@kodax-ai/kodax 0.7.97-beta.1 → 0.7.97-beta.2

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 (138) hide show
  1. package/CHANGELOG.md +61 -0
  2. package/README.md +28 -2
  3. package/README_CN.md +18 -1
  4. package/dist/chunks/agent-DS7M57WD.js +2 -0
  5. package/dist/chunks/agent-adapter-TLWGGK3V.js +2 -0
  6. package/dist/chunks/argument-completer-OGCXKTRQ.js +2 -0
  7. package/dist/chunks/{cell-ABNYMGXV.js → cell-LV7MNPNQ.js} +1 -1
  8. package/dist/chunks/{chunk-KQ3XVHKK.js → chunk-2HH5AS7E.js} +55 -55
  9. package/dist/chunks/{chunk-6VHO36HK.js → chunk-3CP7AUWY.js} +1 -1
  10. package/dist/chunks/{chunk-ADIWJDFS.js → chunk-53CJDQS2.js} +1 -1
  11. package/dist/chunks/{chunk-3ZEJRVNA.js → chunk-5MUVRFMU.js} +1 -1
  12. package/dist/chunks/{chunk-KJBS6L7Q.js → chunk-6TITQQAI.js} +155 -155
  13. package/dist/chunks/{chunk-HA4IKFUK.js → chunk-BBZWF2EA.js} +1 -1
  14. package/dist/chunks/{chunk-W6MHQ7ED.js → chunk-C6JGLEYD.js} +1 -1
  15. package/dist/chunks/{chunk-NM3AINLH.js → chunk-D36OIMV7.js} +29 -29
  16. package/dist/chunks/{chunk-LWOGHKTL.js → chunk-D425EZGC.js} +1 -1
  17. package/dist/chunks/{chunk-7SX7CHYP.js → chunk-DCE7XQUG.js} +1 -1
  18. package/dist/chunks/{chunk-N2B6A3CX.js → chunk-DV5YPYLW.js} +1 -1
  19. package/dist/chunks/{chunk-5MDNQCAV.js → chunk-EISRVOBJ.js} +2 -2
  20. package/dist/chunks/chunk-EPK6EWRI.js +12 -0
  21. package/dist/chunks/{chunk-G2IMBA3R.js → chunk-F6GJXQNA.js} +5 -5
  22. package/dist/chunks/chunk-GJXOTOZB.js +465 -0
  23. package/dist/chunks/{chunk-F7H6CDJN.js → chunk-I325ER7D.js} +1 -1
  24. package/dist/chunks/{chunk-E2Z754K5.js → chunk-J2L2NK6E.js} +57 -57
  25. package/dist/chunks/chunk-JAF2YLZO.js +14 -0
  26. package/dist/chunks/{chunk-A3SLNYBB.js → chunk-KDSO7V4O.js} +1 -1
  27. package/dist/chunks/{chunk-654JOM24.js → chunk-MCDZNQWD.js} +4 -4
  28. package/dist/chunks/{chunk-KDRYQKT7.js → chunk-NSR4RW2F.js} +1 -1
  29. package/dist/chunks/chunk-OGTRDK4Q.js +359 -0
  30. package/dist/chunks/{chunk-GYNAAIZP.js → chunk-P55RJIOG.js} +1 -1
  31. package/dist/chunks/chunk-QSZCR5GC.js +190 -0
  32. package/dist/chunks/chunk-R2HTPDI7.js +2 -0
  33. package/dist/chunks/chunk-R42S4BLA.js +2 -0
  34. package/dist/chunks/chunk-RYBUYHDL.js +5 -0
  35. package/dist/chunks/{chunk-XGUGEVCK.js → chunk-SDPZFH6M.js} +1 -1
  36. package/dist/chunks/chunk-SK3RRGHJ.js +142 -0
  37. package/dist/chunks/chunk-TQ475LOI.js +2 -0
  38. package/dist/chunks/{chunk-ZT2LR3KD.js → chunk-UL6YIT4M.js} +1 -1
  39. package/dist/chunks/{chunk-7U2BL7CM.js → chunk-V2XJSFFE.js} +1 -1
  40. package/dist/chunks/{chunk-TXI6SHDO.js → chunk-W2CWO4PQ.js} +1 -1
  41. package/dist/chunks/{chunk-SCGXZ2QT.js → chunk-WWPVEK6B.js} +1 -1
  42. package/dist/chunks/{chunk-FMZN5F3Q.js → chunk-X5M7TLJV.js} +1 -1
  43. package/dist/chunks/{chunk-FZZMHNDB.js → chunk-XDMNJW6J.js} +5 -5
  44. package/dist/chunks/{chunk-VT35IZEZ.js → chunk-XZSFUGPN.js} +1 -1
  45. package/dist/chunks/{client-3JEK33QQ.js → client-LTIFNED5.js} +1 -1
  46. package/dist/chunks/compaction-config-ECMOFP5H.js +2 -0
  47. package/dist/chunks/{construction-bootstrap-HCRLORKG.js → construction-bootstrap-OAZKGI5Y.js} +1 -1
  48. package/dist/chunks/dist-5J53DGAO.js +2 -0
  49. package/dist/chunks/{google-native-45I4S26I.js → google-native-WLL27OV7.js} +1 -1
  50. package/dist/chunks/host-65E5NM5P.js +2 -0
  51. package/dist/chunks/model-DZF6URW3.js +2 -0
  52. package/dist/chunks/{permission-MTSFSB74.js → permission-YVVMLQ5I.js} +1 -1
  53. package/dist/chunks/readline-helpers-UZXWBRXQ.js +2 -0
  54. package/dist/chunks/run-manager-ZFACIZM2.js +2 -0
  55. package/dist/chunks/running-session-Q5Y6A2QV.js +2 -0
  56. package/dist/chunks/{skills-V7T55I4F.js → skills-TJP6BLZJ.js} +1 -1
  57. package/dist/chunks/{tool-dispatch-ZVIDGKB4.js → tool-dispatch-MLM3QTSU.js} +1 -1
  58. package/dist/chunks/{utils-WGRFGT7S.js → utils-2QNMYRGA.js} +1 -1
  59. package/dist/index.d.ts +18 -18
  60. package/dist/index.js +2 -2
  61. package/dist/kodax_bootstrap.js +1 -1
  62. package/dist/kodax_cli.js +1534 -1532
  63. package/dist/kodax_doctor.js +1 -1
  64. package/dist/manual-topics.json +17 -2
  65. package/dist/native/win32-x64/kodax-windows-sandbox.exe +0 -0
  66. package/dist/native/win32-x64/kodax-windows-text-transaction.node +0 -0
  67. package/dist/native/win32-x64/manifest.json +2 -2
  68. package/dist/one-shot-task.js +1 -1
  69. package/dist/provider-auth-cli.js +1 -1
  70. package/dist/runtime-daemon-schema.json +1 -1
  71. package/dist/sandbox-network-broker.js +77 -77
  72. package/dist/script-cell.js +1 -1
  73. package/dist/script-worker.cjs +30 -7
  74. package/dist/sdk-a2a.d.ts +11 -11
  75. package/dist/sdk-a2a.js +1 -1
  76. package/dist/sdk-agent.d.ts +13 -9
  77. package/dist/sdk-agent.js +1 -1
  78. package/dist/sdk-client.d.ts +5 -5
  79. package/dist/sdk-client.js +1 -1
  80. package/dist/sdk-coding.d.ts +57 -16
  81. package/dist/sdk-coding.js +1 -1
  82. package/dist/sdk-experimental-memory.js +1 -1
  83. package/dist/sdk-llm.js +1 -1
  84. package/dist/sdk-mcp.js +1 -1
  85. package/dist/sdk-media.d.ts +11 -11
  86. package/dist/sdk-media.js +1 -1
  87. package/dist/sdk-repl.d.ts +15 -15
  88. package/dist/sdk-repl.js +1 -1
  89. package/dist/sdk-runtime.d.ts +14 -14
  90. package/dist/sdk-runtime.js +1 -1
  91. package/dist/sdk-sandbox.js +1 -1
  92. package/dist/sdk-session.d.ts +6 -6
  93. package/dist/sdk-session.js +1 -1
  94. package/dist/sdk-skills.js +1 -1
  95. package/dist/semantic-worker.js +70 -70
  96. package/dist/static-text.json +50 -2
  97. package/dist/storage-repair-cli.js +1 -1
  98. package/dist/types-chunks/{bash-prefix-extractor.d-RblzA9kO.d.ts → bash-prefix-extractor.d-CJliu5-D.d.ts} +43 -2
  99. package/dist/types-chunks/{capsule.d-C-saon3X.d.ts → capsule.d-EMwSALqK.d.ts} +3 -3
  100. package/dist/types-chunks/{client-contract-D8HXN_iu.d.ts → client-contract-B7q69yMA.d.ts} +19 -3
  101. package/dist/types-chunks/{controller.d-pXik2EIy.d.ts → controller.d-D-hPLKaA.d.ts} +1 -1
  102. package/dist/types-chunks/{manifest.d-r74es7yq.d.ts → manifest.d-YE3-AIeO.d.ts} +1 -1
  103. package/dist/types-chunks/{public-api.d-CvDSMmN2.d.ts → public-api.d-BhDU643p.d.ts} +3 -3
  104. package/dist/types-chunks/{review-packet.d-C0NYHPdq.d.ts → review-packet.d-ChOfJaNI.d.ts} +1 -1
  105. package/dist/types-chunks/{run-manager.d-COrEJ-hn.d.ts → run-manager.d-ChzguipG.d.ts} +12 -6
  106. package/dist/types-chunks/{runtime-client-info-DJ9srk4O.d.ts → runtime-client-info-P_mRDG7j.d.ts} +6 -1
  107. package/dist/types-chunks/{runtime-event-B24TGIxk.d.ts → runtime-event-BW5Pla7a.d.ts} +1 -1
  108. package/dist/types-chunks/{sdk-runtime-CBPScTNR.d.ts → sdk-runtime-cDe7qmN3.d.ts} +18 -10
  109. package/dist/types-chunks/{sdk-session-D_bf_sN2.d.ts → sdk-session-D3pcSbnA.d.ts} +1 -1
  110. package/dist/types-chunks/{skill-invocation-error.d-FJ6ZujRz.d.ts → skill-invocation-error.d-gsNNDnnt.d.ts} +2 -2
  111. package/dist/types-chunks/{trusted-repl-entry-9i4hUuj-.d.ts → trusted-repl-entry-Bbkd2HlO.d.ts} +6 -6
  112. package/dist/types-chunks/{types.d-CTo0NiAM.d.ts → types.d-BlXTogOo.d.ts} +2 -0
  113. package/dist/types-chunks/{utils.d-BhoGV3yv.d.ts → utils.d-CxHyBvO6.d.ts} +5 -5
  114. package/docs/SDK_MIGRATION.md +264 -1
  115. package/docs/SPACE_SDK_SEAMS.md +1 -1
  116. package/package.json +1 -1
  117. package/public_docs/README.md +8 -3
  118. package/public_docs/sdk/embedder-guide.md +1 -1
  119. package/dist/chunks/agent-OY4U4WOU.js +0 -2
  120. package/dist/chunks/agent-adapter-NDH3DMPG.js +0 -2
  121. package/dist/chunks/argument-completer-Q6GMPJ74.js +0 -2
  122. package/dist/chunks/chunk-4KR4VUZK.js +0 -142
  123. package/dist/chunks/chunk-5WZ5FUUD.js +0 -14
  124. package/dist/chunks/chunk-7OTOH4PT.js +0 -465
  125. package/dist/chunks/chunk-BZF7WPRK.js +0 -357
  126. package/dist/chunks/chunk-ED7D73C3.js +0 -2
  127. package/dist/chunks/chunk-LPHKXPF7.js +0 -190
  128. package/dist/chunks/chunk-MJ4IGUD4.js +0 -5
  129. package/dist/chunks/chunk-NQ4XK3B2.js +0 -2
  130. package/dist/chunks/chunk-PRH5G5J7.js +0 -12
  131. package/dist/chunks/chunk-YB24NTBC.js +0 -2
  132. package/dist/chunks/compaction-config-NKDAUZNH.js +0 -2
  133. package/dist/chunks/dist-NTS7CJG3.js +0 -2
  134. package/dist/chunks/host-RHJ3VGYE.js +0 -2
  135. package/dist/chunks/model-WCSO7VEC.js +0 -2
  136. package/dist/chunks/readline-helpers-KZQCE3NH.js +0 -2
  137. package/dist/chunks/run-manager-MWEV42C5.js +0 -2
  138. package/dist/chunks/running-session-3BYAXGLK.js +0 -2
@@ -1,142 +0,0 @@
1
- // @kodax-ai/kodax — bundled distribution. See docs/ADR.md ADR-022 + ADR-024.
2
- import{a as Ur,b as Br,c as bo}from"./chunk-52EN2777.js";import{a as vt,b as Fr,f as U,g as We,h as be,i as wo,j as Me,k as Vr,l as Te}from"./chunk-WMMESRP3.js";import{a as Wt,b as vo,c as zr,d as Hr}from"./chunk-UF3GZ5PO.js";import{a as Gr}from"./chunk-QP47JIWP.js";import{A as $r,C as Ee,D as yt,E as Fe,J as hn,L as mo,R as ho,U as et,V as tt,W as nt,X as go,Y as ze,Z as Pe,aa as Kr,ba as gn,ca as bt,d as Ve,ea as yo,f as Ye,h as uo,i as jr,j as Le,ja as xe,ka as Lr,l as pn,la as Wr,oa as Xr,pa as qr,r as me,t as fo,u as gt,x as Ze,y as Nr,z as mn}from"./chunk-KE2NBMAP.js";import{A as Bt,B as po,I as ue,L as Ft,O as Qe,P as Se,Q as zt,a as Ir,b as Or,c as Ut,e as $e,f as Dr,g as Je,h as un,i as dn,j as Ce,k as lo,l as Ke,m as mt,s as fn,t as Ue,v as ht,y as Be}from"./chunk-V5RCDBKU.js";import{b as L}from"./chunk-KDLOPBFZ.js";import{a as c}from"./chunk-V4WSBIXB.js";function ea(e,t){let n=(t.textBlocks??[]).map(f=>({type:"text",text:f.text})),o=t.thinkingBlocks??[],r=t.toolBlocks??[];if(!e)return[...o,...n,...r];let i=e.filter(f=>f.type==="text").map(f=>f.text).join(""),s=n.map(f=>f.text).join(""),a=i===s,l=!a&&i.startsWith(s),d=s.length,u=new Map(r.map(f=>[f.id,f])),m=[],p=!1,g=0;for(let f of e)if(f.type==="tool_use"){let v=u.get(f.id);if(v){let h=v.customTool??(f.customTool&&f.name===v.name&&JSON.stringify(f.input)===JSON.stringify(v.input)?f.customTool:void 0);m.push(h?{...v,customTool:h}:v),u.delete(f.id)}}else if(f.type==="text"){if(a)m.push(f);else if(l){let v=f.text.slice(0,d);v&&m.push({type:"text",text:v}),d-=v.length}else p||m.push(...n);p=!0}else{let v=o[g++];v&&m.push(v)}return p||m.push(...n),m.push(...o.slice(g),...u.values()),m}c(ea,"reconcileAssistantContent");import{createHash as ko}from"node:crypto";var de=c(e=>ko("sha256").update(JSON.stringify(e)??"null").digest("hex"),"digest"),pe=c(e=>structuredClone(e),"clone");function z(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}c(z,"record");function Yr(e){return de(e)}c(Yr,"fragmentDigest");function Ht(e){if(!z(e))return e;let t={...e};return delete t.cache_control,t}c(Ht,"withoutMarker");var ot=c(e=>Array.isArray(e)?e.map(Ht):e,"withoutTopMarkers");function Jr(e,t){let n=ot(e),o=Array.isArray(t)?t.filter(z).find(r=>z(r.cache_control))?.cache_control:void 0;return o?Array.isArray(n)&&n.length&&z(n.at(-1))?[...n.slice(0,-1),{...n.at(-1),cache_control:pe(o)}]:typeof n=="string"&&n?[{type:"text",text:n,cache_control:pe(o)}]:n:n}c(Jr,"projectTopMarkers");function _o(e){let t=c(n=>n.map(o=>{if(!z(o))return o;let r=Ht(o);return r.type==="tool_result"&&Array.isArray(r.content)&&(r.content=t(r.content)),r.type==="tool_addition"&&z(r.tool)&&z(r.tool.definition)&&(r.tool={...r.tool,definition:Ht(r.tool.definition)}),r}),"content");return e.map(n=>({...n,...Array.isArray(n.content)?{content:t(n.content)}:{}}))}c(_o,"withoutMessageMarkers");function Qr(e){return{role:e.role,content:e.content}}c(Qr,"canonical");function Co(e){return de((typeof e=="string"?[{type:"text",text:e}]:e).filter(n=>n.type!=="text"||n.text!==""))}c(Co,"outputDigest");function ta(e,t){return e?.outputDigest===Co(t)?e:void 0}c(ta,"retainAnthropicNativeHistory");function na(e,t){let n=new Map;for(let o of t){if(o.type!=="thinking_dropped")continue;let r=/^messages\.(\d+)\.content\.(\d+)$/.exec(o.path);if(!r)continue;let i=Number(r[1]),s=Number(r[2]),a=n.get(i)??new Set;a.add(s),n.set(i,a)}for(let[o,r]of n){let i=e[o];Array.isArray(i?.content)&&(i.content=i.content.filter((s,a)=>!r.has(a)||!z(s)||!["thinking","redacted_thinking"].includes(String(s.type))))}}c(na,"applyTransformations");function Zr(e,t){let n,o=ko("sha256");for(let r=0;r<e.length;r++){let i=e[r],s=i.nativeHistory;if(i.role==="assistant"&&s){let{id:a,...l}=s;if(!(s.version===1&&a===Yr(l)&&de(s.source)===de(t)&&s.inputDigest===o.copy().digest("hex")&&s.outputDigest===Co(i.content)&&Array.isArray(s.append)&&s.append.every(z)&&Array.isArray(s.output)&&s.output.every(z)&&z(s.requested)&&(s.baseline!==void 0||s.parent===n?.parent)))n=void 0;else{let u=s.baseline??n?.baseline;if(u){let m=s.baseline?[]:n.messages;m.push(...pe(s.append)),na(m,s.transformations??[]),m.push({role:"assistant",content:pe(s.output)}),n={start:r+1,parent:a,baseline:pe(u),messages:m,requested:pe(s.requested)}}}}o.update(JSON.stringify(Qr(i))),o.update(`
3
- `)}return n}c(Zr,"restoreAnthropicNativeHistory");function oa(e){let t=new Map;for(let n of Array.isArray(e.baseline.tools)?e.baseline.tools:[])z(n)&&typeof n.name=="string"&&t.set(n.name,n);for(let n of e.messages)for(let o of Array.isArray(n.content)?n.content:[])!z(o)||!z(o.tool)||(o.type==="tool_removal"&&typeof o.tool.name=="string"&&t.delete(o.tool.name),o.type==="tool_addition"&&z(o.tool.definition)&&typeof o.tool.definition.name=="string"&&t.set(o.tool.definition.name,o.tool.definition));return t}c(oa,"toolsInHistory");function Eo(e,t,n,o,r=[],i=!1){let s=z(o.output_config)&&typeof o.output_config.effort=="string"?o.output_config.effort:void 0,a=c(y=>typeof y=="string"&&(r.includes("*")||r.includes(y)),"rejected"),l=n&&(i||a(n.baseline.effort)||n.messages.some(y=>z(y.output_config)&&a(y.output_config.effort)));l&&n&&(n={...n,baseline:{...n.baseline,effort:s},requested:{...n.requested,effort:s},messages:n.messages.map(y=>{let b={...y};if(delete b.output_config,y.role==="assistant"&&Array.isArray(y.content)){let w=y.content.flatMap(_=>z(_)&&_.type==="thinking"?typeof _.thinking=="string"&&_.thinking?[{type:"text",text:`<prior_reasoning>
4
- ${_.thinking}
5
- </prior_reasoning>`}]:[]:z(_)&&_.type==="redacted_thinking"?[]:[_]);b.content=w.length?w:[{type:"text",text:"..."}]}return b})});let d=z(o.output_config)?o.output_config:{},u=typeof d.effort=="string"?d.effort:void 0,m={system:de(ot(o.system)),tools:de(ot(o.tools??[])),...u?{effort:u}:{},thinkingMode:z(o.thinking)&&typeof o.thinking.type=="string"?o.thinking.type:"adaptive"},p={system:pe(o.system),tools:pe(o.tools),...u?{effort:u}:{}},g=pe(Array.isArray(o.messages)?o.messages:[]),f=pe(o);if(n){let y=[];if(m.tools!==n.requested.tools){let w=oa(n),_=new Map((Array.isArray(o.tools)?o.tools:[]).filter(E=>z(E)&&typeof E.name=="string").map(E=>[E.name,E]));for(let E of w.keys())_.has(E)||y.push({type:"tool_removal",tool:{type:"tool_reference",name:E}});for(let[E,x]of _)de(Ht(w.get(E)))!==de(Ht(x))&&y.push({type:"tool_addition",tool:{type:"tool_definition",definition:x}})}if(m.system!==n.requested.system){let w=typeof o.system=="string"?o.system:Array.isArray(o.system)?o.system.filter(z).map(_=>typeof _.text=="string"?_.text:"").join(`
6
-
7
- `):"";y.push({type:"text",text:`Use this complete base instruction set from this point onward, replacing earlier base instruction sets:
8
-
9
- ${w||"(No base instructions.)"}`})}let b=u!==void 0&&u!==n.requested.effort;if(y.length||b){let w=[...n.messages,...g].filter(_=>_.role!=="system").at(-1)?.role;if(y.length&&w!=="user")throw new Error("Native system/tool changes require a user turn with all tool results first.");g.push({role:"system",content:y,...b?{output_config:{effort:u??"medium"}}:{}})}Object.assign(f,{system:Jr(n.baseline.system,o.system),tools:Jr(n.baseline.tools,o.tools),messages:[..._o(n.messages),...g],...n.baseline.effort?{output_config:{...d,effort:n.baseline.effort}}:{}}),!n.baseline.effort&&z(f.output_config)&&delete f.output_config.effort}let v=ko("sha256");for(let y of e)v.update(JSON.stringify(Qr(y))),v.update(`
10
- `);let h=v.digest("hex");return{request:f,finish(y,b,w,_){let E=Array.isArray(y.messages)?y.messages:[],x=!l&&n&&de(_o(E.slice(0,n.messages.length)))===de(_o(n.messages))&&de(ot(y.system))===de(ot(n.baseline.system))&&de(ot(y.tools))===de(ot(n.baseline.tools)),k={version:1,source:t,inputDigest:h,outputDigest:Co([...b]),...x&&n?{parent:n.parent}:{baseline:pe({...p,system:y.system,tools:y.tools})},append:pe(x&&n?E.slice(n.messages.length):E),output:pe([...w]),requested:m,..._?.length?{transformations:pe(_)}:{}};return{...k,id:Yr(k)}}}}c(Eo,"prepareAnthropicNativeHistory");function ei(e,t){return!!e&&e.api===t.api&&e.provider===t.provider&&e.model===t.model&&e.baseUrl===t.baseUrl&&e.credentialScope===t.credentialScope}c(ei,"sameSource");function ra(e){let t=e.at(-1);if(!t)return;let n=c(o=>({type:"input_text",text:o,prompt_cache_breakpoint:{mode:"explicit"}}),"marked");"role"in t&&t.role!=="assistant"&&typeof t.content=="string"?e[e.length-1]={...t,content:[n(t.content)]}:t.type==="function_call_output"&&typeof t.output=="string"&&(e[e.length-1]={...t,output:[n(t.output)]})}c(ra,"cacheBoundary");function wt(e,t,n,o={}){let r=[],i=new Map,s=new Set,a=c(()=>{for(let[l,d]of i)r.push({type:d==="custom"?"custom_tool_call_output":"function_call_output",call_id:l,output:`${Ve} Tool execution was interrupted; no result is available.`});i.clear()},"settleMissing");for(let l of e){if(typeof l.content=="string"){a(),r.push({role:l.role,content:l.content});continue}l.role==="assistant"&&a();let d=l.role==="user"?[...l.content.filter(u=>u.type==="tool_result"),...l.content.filter(u=>u.type!=="tool_result")]:l.content;for(let u of d)switch(l.role==="user"&&u.type!=="tool_result"&&a(),u.type){case"text":r.push({role:l.role,content:u.text});break;case"image":r.push({role:"user",content:n(u)});break;case"tool_use":{if(!u.id||s.has(u.id))throw new Error("Responses history contains an empty or duplicate tool call ID.");s.add(u.id);let m=u.customTool,p=m&&typeof m.property=="string"&&ei(m.source,t)&&Object.keys(u.input).length===1&&Object.hasOwn(u.input,m.property)?u.input[m.property]:void 0;i.set(u.id,typeof p=="string"?"custom":"function"),r.push(typeof p=="string"?{type:"custom_tool_call",call_id:u.id,name:u.name,input:p}:{type:"function_call",call_id:u.id,name:u.name,arguments:JSON.stringify(u.input)});break}case"tool_result":{let m=i.get(u.tool_use_id);if(!i.delete(u.tool_use_id))break;r.push({type:m==="custom"?"custom_tool_call_output":"function_call_output",call_id:u.tool_use_id,output:typeof u.content=="string"?u.content:u.content.flatMap(p=>p.type==="text"?[{type:"input_text",text:p.text}]:n(p))});break}case"thinking":{let m=u.responsesReasoning;m&&ei(m.source,t)?r.push({type:"reasoning",id:m.id,summary:m.summary,...m.encrypted_content?{encrypted_content:m.encrypted_content}:{}}):u.thinking&&r.push({role:"assistant",content:`<prior_reasoning>
11
- ${u.thinking}
12
- </prior_reasoning>`});break}case"cache-boundary":o.cacheBreakpoints&&ra(r);break;case"redacted_thinking":break}}return o.settleTrailing!==!1&&a(),r}c(wt,"projectResponsesMessages");import{parse as ia}from"partial-json";function _t(e){if(!e)return{value:{},salvaged:!1};try{let t=JSON.parse(e);return{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!1}}catch{}try{let t=ia(e);return process.env.KODAX_DEBUG_TOOL_STREAM&&console.warn("[Tool Block Salvaged] partial JSON recovered, rawLength=",e.length),{value:t&&typeof t=="object"&&!Array.isArray(t)?t:{},salvaged:!0}}catch{return{value:{},salvaged:!0}}}c(_t,"parseToolInputWithSalvageTracked");function sa(e){return _t(e).value}c(sa,"parseToolInputWithSalvage");var aa={max_tokens:"truncated",length:"truncated",model_context_window_exceeded:"truncated",end_turn:"end",stop:"end",stop_sequence:"end",tool_use:"tool",tool_calls:"tool",function_call:"tool",pause_turn:"paused",refusal:"refused",content_filter:"refused"};function yn(e){return e==null?"unknown":aa[e.trim().toLowerCase()]??"unknown"}c(yn,"classifyStopReason");function kt(e){let t=yn(e);return t==="end"||t==="tool"||t==="paused"}c(kt,"isCleanStop");function Po(e,t){let n=e[e.length-1];if(n&&Ct(n)&&n.hint===t)return e;let o=t?{type:"cache-boundary",hint:t}:{type:"cache-boundary"};return[...e,o]}c(Po,"insertCacheBoundary");function Ct(e){if(typeof e!="object"||e===null||e.type!=="cache-boundary")return!1;let t=Object.keys(e);return t.length<=2&&t.every(n=>n==="type"||n==="hint")}c(Ct,"isCacheBoundary");function xo(e,t){let n=[];for(let o of e){if(Ct(o)){if(t==="attach"&&n.length>0){let r=n[n.length-1];n[n.length-1]={...r,cache_control:{type:"ephemeral"}}}continue}n.push(o)}return n}c(xo,"lowerCacheBoundaries");function Et(e){return e.filter(t=>!Ct(t))}c(Et,"stripCacheBoundaries");import{createHash as la}from"node:crypto";function bn(e,t,n){if(!(n!=="anthropic"&&!e.authentication&&e.credentialSource!=="broker"))return(o,r)=>{let i=new Headers(r?.headers);for(let s of["authorization","x-api-key","api-key","cf-aig-authorization","openai-organization","openai-project"])i.delete(s);return e.authentication==="cloudflare-gateway"?i.set("cf-aig-authorization",`Bearer ${t}`):n==="anthropic"&&e.authentication!=="bearer"?i.set("x-api-key",t):i.set("authorization",`Bearer ${t}`),e.oauth==="anthropic"&&i.set("anthropic-beta",[...new Set([...i.get("anthropic-beta")?.split(",")??[],"oauth-2025-04-20"])].join(",")),e.oauth==="github-copilot"&&ca(i,r?.body),Ke(globalThis.fetch)(o,{...r,headers:i,redirect:"error"})}}c(bn,"connectionAuthFetch");function ca(e,t){if(typeof t!="string")return;let n;try{n=JSON.parse(t)}catch{throw new Error("Invalid Copilot request JSON.")}if(!n||typeof n!="object")throw new Error("Invalid Copilot request body.");let o=n,r=Array.isArray(o.messages)?o.messages:Array.isArray(o.input)?o.input:typeof o.input=="string"?[{role:"user",content:o.input}]:[],i=r.at(-1),s=i&&typeof i=="object"&&"role"in i&&i.role==="user"&&(!("content"in i)||!Array.isArray(i.content)||i.content.some(a=>a&&typeof a=="object"&&"type"in a&&a.type!=="tool_result"));e.set("x-initiator",s?"user":"agent"),e.set("openai-intent","conversation-edits"),/"type":"(?:image|image_url|input_image)"/.test(JSON.stringify(r))&&e.set("copilot-vision-request","true")}c(ca,"copilotHeaders");function Pt(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>typeof t=="string"?t:t&&typeof t=="object"&&typeof t.text=="string"?t.text:"").join(""):""}c(Pt,"reasoningText");var Xt=class{static{c(this,"OpenAIReasoningAccumulator")}text="";reasoning;details=[];append(t,n=!1){if(!t||typeof t!="object")return"";let o=t,r=Array.isArray(o.reasoning_details)?o.reasoning_details.filter(a=>a!==null&&typeof a=="object"&&!Array.isArray(a)):[];for(let[a,l]of r.entries())this.appendDetail(l,n&&a===0);typeof o.reasoning=="string"&&(this.reasoning=(this.reasoning??"")+o.reasoning);let s=r.map(a=>a.type==="reasoning.text"?Pt(a.text):a.type==="reasoning.summary"?Pt(a.summary):"").join("")||Pt(o.reasoning_content)||Pt(o.reasoning);return this.text+=s,s}appendDetail(t,n){let o=n?this.details.at(-1):void 0,r=t.type==="reasoning.text"?"text":t.type==="reasoning.summary"?"summary":void 0,i=typeof t.index=="number"&&o?.index===t.index,s=typeof t.id=="string"&&o?.id===t.id,a=["id","index","signature","format"].some(l=>t[l]!=null&&o?.[l]!=null&&t[l]!==o[l]);if(r&&o&&o.type===t.type&&!a&&(i||s)){let l=Pt(o[r])+Pt(t[r]),d={...o,...structuredClone(t),[r]:l};for(let u of["id","signature","format"])t[u]==null&&o[u]!==void 0&&(d[u]=o[u]);this.details[this.details.length-1]=d}else this.details.push(structuredClone(t))}blocks(t){let n=this.reasoning!==void 0||this.details.length>0;return!this.text&&!n?[]:[{type:"thinking",thinking:this.text,...n?{openaiReasoning:{...t,...this.reasoning!==void 0?{reasoning:this.reasoning}:{},...this.details.length>0?{details:this.details}:{}}}:{}}]}};var ua="KodaX";async function da(e){let{default:t}=await import("openai");return new t({...e,fetch:ht(e?.fetch??Ke(globalThis.fetch))})}c(da,"createOpenAISdkClient");function pa(e){return e==="native-budget"||e==="native-effort"||e==="native-toggle"||e==="none"}c(pa,"isOpenAIReasoningAttempt");function fa(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":ua}}c(fa,"getOpenAICompatDefaultHeaders");function To(e,t){return e==="max_tokens"?{max_tokens:t}:{max_completion_tokens:t}}c(To,"serializeOpenAICompatMaxOutputTokens");function ti(e,t){if(!t)return e;let n=e.at(-1);if(n?.role!=="user")return[...e,{role:"user",content:t}];let o=typeof n.content=="string"?n.content.length>0?`${n.content}
13
-
14
- ${t}`:t:[...n.content,{type:"text",text:t}];return[...e.slice(0,-1),{...n,content:o}]}c(ti,"appendOpenAIEphemeralSuffix");function ma(e){if(e.effort!=="none"){if(e.effort&&e.effort!=="auto")return e.effort;if(!(e.effort==="auto"&&e.effortSource==="explicit"))return go(et(e.effort))}}c(ma,"selectOpenAIReasoningEffort");function ni(e){if(!e)return;let t=typeof e.prompt_tokens=="number"?e.prompt_tokens:0,n=typeof e.completion_tokens=="number"?e.completion_tokens:0,o=typeof e.total_tokens=="number"?e.total_tokens:t+n;if([t,n,o].some(s=>!Number.isFinite(s)||s<0)||o<t||o<n)return;let r=typeof e.prompt_tokens_details?.cached_tokens=="number"&&e.prompt_tokens_details.cached_tokens>=0?e.prompt_tokens_details.cached_tokens:typeof e.prompt_cache_hit_tokens=="number"&&e.prompt_cache_hit_tokens>=0?e.prompt_cache_hit_tokens:void 0,i=e.prompt_tokens_details?.cache_write_tokens;if(!(i!=null&&(!Number.isFinite(i)||i<0||i+(r??0)>t)))return{inputTokens:t,outputTokens:n,totalTokens:o,...r!==void 0?{cachedReadTokens:r}:{},...i!=null?{cachedWriteTokens:i,cachedWriteTokensByTtl:{unknown:i}}:{}}}c(ni,"normalizeOpenAIUsage");function ha(e){return e?e.type==="function"&&"function"in e:!1}c(ha,"isOpenAIFunctionToolCall");function ga(e){return typeof e=="string"?e:Array.isArray(e)?e.map(t=>{if(!t||typeof t!="object")return"";let n=Reflect.get(t,"text");if(typeof n=="string")return n;if(n&&typeof n=="object"){let o=Reflect.get(n,"value");return typeof o=="string"?o:""}return""}).filter(Boolean).join(""):""}c(ga,"extractOpenAIMessageText");function qt(e){let t=e.role;return typeof t=="string"?t:void 0}c(qt,"getWireRole");function ya(e){if(qt(e)!=="assistant")return;let t=e.tool_calls;if(Array.isArray(t))return t.flatMap(n=>{if(!n||typeof n!="object")return[];let o=n.id;return typeof o=="string"&&o.trim().length>0?[{id:o,value:n}]:[]})}c(ya,"getAssistantWireToolCalls");function ba(e){if(qt(e)!=="tool")return;let t=e.tool_call_id;return typeof t=="string"&&t.trim().length>0?t:void 0}c(ba,"getToolWireCallId");function va(e,t){let n={...e};return t.length>0?(n.tool_calls=t.map(o=>o.value),n):(delete n.tool_calls,(n.content==null||n.content==="")&&(n.content="..."),n)}c(va,"rewriteAssistantWireToolCalls");var ne=class extends ze{static{c(this,"KodaXOpenAICompatProvider")}getRequestCredentialFingerprint(){let t=super.getRequestCredentialFingerprint();if(!t||Se()||this.config.authentication||this.config.credentialSource==="broker")return t;let n=$e("OPENAI_ORG_ID"),o=$e("OPENAI_PROJECT_ID");return n||o?la("sha256").update(JSON.stringify([t,n,o])).digest("hex"):t}requestRejections=new WeakMap;usesScopedReasoningLearning(){return!0}getReasoningApi(){return"openai-chat-completions"}requestObservationBoundary="physical_attempt";normalizeReasoning(t){return super.normalizeReasoning(typeof t!="boolean"&&t?.effort===void 0&&t?.enabled===void 0?{...t,effort:"auto"}:t)}reasoningAttempts(t,n){let o=this.getReasoningProfile(n);if(Fe(o)){let i=t.effortSource==="omitted"?"auto":t.effort;return yt(o,i).map(s=>({capability:s===void 0?"none":"profile",reasoning:{...t,effort:s??"none",enabled:s!=="none"&&s!==void 0}}))}return this.validateExplicitReasoningEffort(t,n),(o?["profile","none"]:mo(t)?this.getReasoningFallbackChain(this.getReasoningCapability(n)).filter(pa):["none"]).map(i=>({capability:i,reasoning:t}))}skipRejectedReasoning(t,n,o,r){let i=t;if(!["reasoning_effort","reasoning","thinking","extra_body"].some(u=>u in i))return!1;let a=this.sentReasoningEffort(t),l=[...this.knownReasoningRejections(n,o),...this.requestRejections.get(r)??[]];return!l.some(u=>u.startsWith("parameter:")&&this.hasReasoningParameter(t,u.slice(10)))&&!l.includes("*")&&(a===void 0||!l.includes(a))?!1:(r.fallbacks.some(u=>u.effort===a)||r.fallbacks.push({effort:a,reason:"cached-rejection"}),!0)}hasReasoningParameter(t,n){let o=t;return n in o||["thinking","reasoning","extra_body"].some(r=>{let i=o[r];return i!==null&&typeof i=="object"&&n in i})}sentReasoningEffort(t){let n=t,o=n.thinking,r=n.reasoning;return typeof n.reasoning_effort=="string"?n.reasoning_effort:r?.effort??o?.effort??(o?.type==="disabled"?"none":void 0)}recordReasoningRejection(t,n,o,r,i){let s=this.sentReasoningEffort(n),a=gt(t,s);if(!a||a.parameter&&!this.hasReasoningParameter(n,a.parameter)||!a.parameter&&s===void 0)return!1;let l=a.parameterRejected?["budget_tokens","thinking_budget","enable_thinking"].includes(a.parameter??"")?`parameter:${a.parameter}`:"*":a.rejectedEffort;this.rememberReasoningRejection(o,l,r);let d=this.requestRejections.get(i)??new Set;return d.add(l),this.requestRejections.set(i,d),i.fallbacks.push({effort:s,reason:a.parameterRejected?"unsupported-parameter":"unsupported-effort"}),!0}supportsThinking=!0;_client;_clientPromise;supportsEphemeralSuffix(){return!0}clientCredentialFingerprint;async getClient(){if(Se()||un())return this.buildClient();let t=JSON.stringify([this.getRequestCredentialFingerprint(),this.getCredentialConnectionFingerprint()]);if(this.clientCredentialFingerprint!==void 0&&this.clientCredentialFingerprint!==t&&(this._client=void 0,this._clientPromise=void 0),this._client)return this._client;this.clientCredentialFingerprint=t;let n=this._clientPromise??=Promise.resolve(this.buildClient());try{let o=await n;return this._clientPromise===n&&(this._client=o,this._clientPromise=void 0),o}catch(o){throw this._clientPromise===n&&(this._clientPromise=void 0),o}}set client(t){this._client=t,this._clientPromise=void 0,this.clientCredentialFingerprint=void 0}getBaseUrl(){return this.config.baseUrl??$e("OPENAI_BASE_URL")??"https://api.openai.com/v1"}buildClient(){let t=fa(this.config),n=this.getApiKey(),o=Se(),r=bn(o?{...this.config,credentialSource:"broker"}:this.config,n,"openai");return da({apiKey:n,organization:o?null:$e("OPENAI_ORG_ID")??null,project:o?null:$e("OPENAI_PROJECT_ID")??null,baseURL:this.getBaseUrl(),...t?{defaultHeaders:t}:{},...r?{fetch:r,organization:null,project:null,logLevel:"off"}:{}})}getEffectiveMaxOutputTokensField(t){return this.getModelDescriptor(t)?.maxOutputTokensField??this.config.maxOutputTokensField??"max_completion_tokens"}onStaleConnection(){this._client=void 0}async verifyCredential(t){let n=this.config.model,o=this.getWireModelId(n),r=[{strategy:"models-list",approxTokensSpent:0,run:c(i=>ue(this,"utility",i,async s=>{await(await this.getClient()).models.list({signal:s})}),"run")},{strategy:"minimal-message",approxTokensSpent:6,run:c(i=>ue(this,"utility",i,async s=>{await(await this.getClient()).chat.completions.create({model:o,...To(this.getEffectiveMaxOutputTokensField(n),1),messages:[{role:"user",content:"hi"}]},{signal:s})}),"run")}];return Pe({strategy:this.config.verifyStrategy??"models-list",runners:r,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=Et(n.content);return o.length===n.content.length?n:{...n,content:o}})}normalizeSystemForWire(t,n){let o=[];t&&t.trim().length>0&&o.push(t);let r=[];for(let i of n){if(i.role!=="system"){r.push(i);continue}let s=typeof i.content=="string"?i.content:Array.isArray(i.content)?i.content.filter(a=>typeof a=="object"&&a!==null&&a.type==="text"&&typeof a.text=="string").map(a=>a.text).join(`
15
- `):"";s.trim().length>0&&o.push(s)}return{system:o.join(`
16
-
17
- `),rest:r}}appendExtraBody(t,n){let o=typeof t.extra_body=="object"&&t.extra_body!==null?t.extra_body:{};t.extra_body={...o,...n}}resetReasoningCapabilityParams(t){delete t.reasoning_effort,delete t.reasoning,delete t.thinking;let n=typeof t.extra_body=="object"&&t.extra_body!==null?{...t.extra_body}:void 0;if(n){if(delete n.enable_thinking,delete n.thinking_budget,delete n.thinking,Object.keys(n).length===0){delete t.extra_body;return}t.extra_body=n}}applyReasoningCapability(t,n,o,r,i,s){if(i||o==="none")return;let a=t,l=nt(tt(this.config,et(r.effort),r.taskType),s),d=this.getReasoningProfile(n);if(d){this.applyReasoningProfile(a,d,r,n,l);return}switch(o){case"native-effort":{this.validateExplicitReasoningEffort(r,n);let u=ma(r);u&&(a.reasoning_effort=u);break}case"native-budget":{this.name==="qwen"?this.appendExtraBody(a,{enable_thinking:!0,thinking_budget:l}):this.name==="zhipu"&&(a.thinking={type:"enabled",budget_tokens:l});break}case"native-toggle":{this.name==="qwen"?this.appendExtraBody(a,{enable_thinking:!0}):this.name==="zhipu"&&(a.thinking={type:"enabled"});break}default:break}}applyReasoningProfile(t,n,o,r,i){Fe(n)||this.validateExplicitReasoningEffort(o,r);let s=this.resolveReasoningProfileIntent(o,n,r),a=n.reasoningPreset;if(a==="kimi-k2.7-code"||a==="minimax-m2-always"){t.thinking={type:"enabled"};return}if(a==="kimi-k3.1"){t.reasoning_effort=s.effort??n.defaultEffort;return}if(a==="kimi-k3"){let l=o.effortSource==="omitted"&&o.effort==="none";if(s.disabled&&!l){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:l?n.defaultEffort??"max":s.effort??n.defaultEffort??"max"};return}if(!(a==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(a==="qwen-hybrid-thinking"){if(s.disabled){this.appendExtraBody(t,{enable_thinking:!1});return}let l=this.resolveReasoningProfileBudget(n,s.effort,r,i);this.appendExtraBody(t,{enable_thinking:!0,...l!==void 0?{thinking_budget:l}:{}});return}if(a==="deepseek-v4-flash-openai"||a==="deepseek-v4-pro-openai"||a==="deepseek-v4-openai"||a==="zai-glm-5.3"||a==="zai-glm-5.2"){if(a==="zai-glm-5.3"&&s.disabled){t.thinking={type:"enabled"},t.reasoning_effort="low";return}t.thinking={type:s.disabled?"disabled":"enabled"},!s.disabled&&s.effort&&(t.reasoning_effort=s.effort);return}if(a==="zai-glm-toggle"||a==="deepseek-toggle"||a==="kimi-hybrid-toggle"||n.thinkingStrategy==="provider-toggle"){t.thinking={type:s.disabled?"disabled":"enabled"},!s.disabled&&s.effort&&n.effortStrategy==="openai-chat-effort"&&(t.reasoning_effort=s.effort);return}if(Fe(n)){let l=s.disabled?"none":s.effort;if(n.effortStrategy==="openai-responses-effort"){l&&(t.reasoning={effort:l});return}if(s.disabled){n.supportsDisabledThinking!==!1&&(t.reasoning_effort="none");return}s.effort&&(t.reasoning_effort=s.effort);return}if(n.effortStrategy==="provider-budget"){if(s.disabled){t.thinking={type:"disabled"};return}let l=this.resolveReasoningProfileBudget(n,s.effort,r,i);t.thinking={type:"enabled",...l!==void 0?{budget_tokens:l}:{}};return}n.effortStrategy==="provider-toggle"&&(t.thinking={type:s.disabled?"disabled":"enabled"})}}resolveReasoningProfileBudget(t,n,o,r){if(!t.supportsManualThinkingBudget&&t.effortStrategy!=="provider-budget")return;let i=n&&t.budgetByEffort?.[n]!==void 0?t.budgetByEffort[n]:r,s=this.getEffectiveThinkingBudgetCap(o);return s!==void 0?Math.min(i,s):i}stream(t,n,o,r,i,s){return this.withRequestContext(i,s,a=>this.streamInternal(t,n,o,r,i,a))}complete(t,n,o,r,i,s){return this.withRequestContext(i,s,a=>this.completeInternal(t,n,o,r,i,a))}async streamInternal(t,n,o,r,i,s){let a=i?.modelOverride??this.config.model,l=this.normalizeReasoning(r),d={provider:this.name,model:a,requestedEffort:l.effortSource==="omitted"?"auto":l.effort??"auto",verified:!1,fallbacks:[]};return this.withRateLimit(async u=>{let m=this.stripCacheBoundariesFromMessages(t),{system:p,rest:g}=this.normalizeSystemForWire(o,m),f=this.getWireModelId(a),v=ti([{role:"system",content:p},...await this.convertMessages(g,a)],i?.ephemeralSuffix?.content),h=uo(Le(n,u.disablePreferredToolConstraints),this.getToolCapabilities(a),this.name),y=i?.forcedToolName,b=h.length>0&&!!y;if(s?.aborted)throw new DOMException("Request aborted","AbortError");let w=new Map,_="",E=new Xt,x,k=!0,S=null,R=Date.now(),M=this.reasoningAttempts(l,a),j=this.getEffectiveMaxOutputTokens(a,i?.maxOutputTokensOverride);u.maxOutputTokensLimit??=j;let N=Math.min(u.maxOutputTokensOverride??j,j),$={model:f,messages:v,...h.length>0?{tools:h}:{},...To(this.getEffectiveMaxOutputTokensField(a),N),stream:!0,...this.config.promptCacheAffinity===!0&&i?.promptCacheKey&&!me()?{prompt_cache_key:i.promptCacheKey}:{}};h.length>0&&y&&b&&($.tool_choice={type:"function",function:{name:y}});let A=await this.getClient(),T,K;for(let{capability:W,reasoning:te}of M){for(;!T;){let H={...$};if(k&&(H.stream_options={include_usage:!0}),this.resetReasoningCapabilityParams(H),this.applyReasoningCapability(H,a,W,te,u.suppressReasoningEffort,N),this.skipRejectedReasoning(H,a,i,d))break;d.sentEffort=this.sentReasoningEffort(H);try{T=await A.chat.completions.create(await Ce(H),{...s?{signal:s}:{},maxRetries:0}).catch(V=>{throw Be(V,H),V})}catch(V){let ye=this.recordReasoningRejection(V,H,a,i,d);if(i?.singleAttempt)throw V;if(ye){K=V;break}if(K=V,b&&this.shouldFallbackForForcedToolChoiceError(V)){b=!1,delete $.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}if(k&&this.shouldFallbackForSpecificReasoningError(V,"stream_options","include_usage")){k=!1;continue}throw V}}if(T)break}if(!T)throw K??new L("All reasoning capability attempts failed without a captured error",this.name);let F=Date.now(),J=0,Y=0,ce=3e4;for await(let W of T){if(mt(W),s?.aborted)throw new DOMException("Request aborted","AbortError");let te=Date.now(),H=te-F;H>ce&&(J++,Y+=H,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(H/1e3)}s gap`,{stallCount:J,totalStallMs:Y})),F=te,i?.onHeartbeat?.(),x=Je(ni(W.usage))??x;let V=W.choices[0],ye=V?.delta;if(V?.finish_reason&&(S=V.finish_reason,process.env.KODAX_DEBUG_STREAM)){let le=Date.now()-R;this.logStreamDiagnostic(`[Stream] finish_reason: ${S} after ${le}ms`)}ye?.content&&(_+=ye.content,i?.onTextDelta?.(ye.content));let Lt=E.append(ye,!0);if(Lt&&i?.onThinkingDelta?.(Lt),ye?.tool_calls)for(let le of ye.tool_calls){let we=w.get(le.index)??{id:"",name:"",arguments:""};le.id&&(we.id=le.id),le.function?.name&&(we.name=le.function.name),le.function?.arguments&&(we.arguments+=le.function.arguments,i?.onToolInputDelta?.(we.name,le.function.arguments,we.id?{toolId:we.id}:void 0)),w.set(le.index,we)}}if(!S){let W=Date.now()-R;if(s?.aborted){let H=s.reason instanceof Error?s.reason.message:typeof s.reason=="string"?s.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before finish_reason:",{duration:W,reason:H,textContentLength:_.length,toolCallsCount:w.size}),new DOMException(H,"AbortError")}let te=new Error(`Stream incomplete: finish_reason not received. Duration: ${W}ms. This may indicate a network disconnection or API timeout.`);throw te.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:W,textContentLength:_.length,toolCallsCount:w.size}),te}let Q=_?[{type:"text",text:_}]:[],O=[],G=E.blocks({provider:this.name,model:f,baseUrl:this.getBaseUrl(),...this.getRequestCredentialFingerprint()?{credentialScope:this.getRequestCredentialFingerprint()}:{}});E.text&&i?.onThinkingEnd?.(E.text);let Z=kt(S??void 0);for(let[,W]of w)if(W.id&&W.name){let te=_t(W.arguments),H=te.salvaged?Z?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};O.push({type:"tool_use",id:W.id,name:W.name,input:te.value,...H})}else process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Dropped tool_call missing id or name:",{id:JSON.stringify(W.id),name:JSON.stringify(W.name),argsLength:W.arguments?.length??0});return d.requestedEffort!=="auto"&&d.requestedEffort!==d.sentEffort&&d.fallbacks.length===0&&d.fallbacks.push({effort:d.requestedEffort,reason:"profile"}),i?.onReasoningResolved?.(d),{textBlocks:Q,toolBlocks:O,thinkingBlocks:G,usage:x,stopReason:S??void 0,reasoningResolution:d}},s,i?.singleAttempt?1:3,i?.onRateLimit,i?.onRetryAfter,{model:a,tools:n})}supportsNonStreamingFallback(){return!0}async completeInternal(t,n,o,r,i,s){let a=i?.modelOverride??this.config.model,l=this.normalizeReasoning(r),d={provider:this.name,model:a,requestedEffort:l.effortSource==="omitted"?"auto":l.effort??"auto",verified:!1,fallbacks:[]};return this.withRateLimit(async u=>{let m=this.stripCacheBoundariesFromMessages(t),{system:p,rest:g}=this.normalizeSystemForWire(o,m),f=this.getWireModelId(a),v=ti([{role:"system",content:p},...await this.convertMessages(g,a)],i?.ephemeralSuffix?.content),h=uo(Le(n,u.disablePreferredToolConstraints),this.getToolCapabilities(a),this.name),y=i?.forcedToolName,b=h.length>0&&!!y,w=this.reasoningAttempts(l,a),_=this.getEffectiveMaxOutputTokens(a,i?.maxOutputTokensOverride);u.maxOutputTokensLimit??=_;let E=Math.min(u.maxOutputTokensOverride??_,_),x={model:f,messages:v,...h.length>0?{tools:h}:{},...To(this.getEffectiveMaxOutputTokensField(a),E),...this.config.promptCacheAffinity===!0&&i?.promptCacheKey&&!me()?{prompt_cache_key:i.promptCacheKey}:{}};h.length>0&&y&&b&&(x.tool_choice={type:"function",function:{name:y}});let k,S,R=await this.getClient();for(let{capability:Y,reasoning:ce}of w){for(;!k;){let Q={...x};if(this.resetReasoningCapabilityParams(Q),this.applyReasoningCapability(Q,a,Y,ce,u.suppressReasoningEffort,E),this.skipRejectedReasoning(Q,a,i,d))break;d.sentEffort=this.sentReasoningEffort(Q);try{k=await R.chat.completions.create(await Ce(Q),{...s?{signal:s}:{},maxRetries:0}).catch(O=>{throw Be(O,Q),O})}catch(O){let G=this.recordReasoningRejection(O,Q,a,i,d);if(i?.singleAttempt)throw O;if(G){S=O;break}if(S=O,b&&this.shouldFallbackForForcedToolChoiceError(O)){b=!1,delete x.tool_choice,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}throw O}}if(k)break}if(!k)throw S??new L("All reasoning capability attempts failed without a captured error",this.name);let M=k.choices[0],j=M?.message,N=ga(j?.content),$=new Xt,A=$.append(j),T=kt(M?.finish_reason??void 0),K=(j?.tool_calls??[]).filter(ha).map(Y=>{let ce=_t(Y.function.arguments),Q=ce.salvaged?T?{_salvaged:!0}:{_salvaged:!0,_truncated:!0}:{};return{type:"tool_use",id:Y.id,name:Y.function.name,input:ce.value,...Q}});N&&i?.onTextDelta?.(N);let F=N?[{type:"text",text:N}]:[],J=$.blocks({provider:this.name,model:f,baseUrl:this.getBaseUrl(),...this.getRequestCredentialFingerprint()?{credentialScope:this.getRequestCredentialFingerprint()}:{}});return A&&(i?.onThinkingDelta?.(A),i?.onThinkingEnd?.(A)),d.requestedEffort!=="auto"&&d.requestedEffort!==d.sentEffort&&d.fallbacks.length===0&&d.fallbacks.push({effort:d.requestedEffort,reason:"profile"}),i?.onReasoningResolved?.(d),{reasoningResolution:d,textBlocks:F,toolBlocks:K,thinkingBlocks:J,usage:Je(ni(k.usage)),stopReason:M?.finish_reason??void 0}},s,i?.singleAttempt?1:3,i?.onRateLimit,i?.onRetryAfter,{model:a,tools:n})}serializeAssistantMessage(t,n){let o=t.filter(p=>p.type==="text").map(p=>p.text).join(`
18
- `),r=t.filter(p=>p.type==="tool_use").map(p=>({id:p.id,type:"function",function:{name:p.name,arguments:JSON.stringify(p.input??{})}})),i=t.filter(p=>p.type==="thinking"||p.type==="redacted_thinking").map(p=>p.type==="thinking"?p.thinking:"").filter(Boolean).join(`
19
-
20
- `),s=t.some(p=>p.type==="thinking"||p.type==="redacted_thinking"),a=t.some(p=>p.type==="text");if(!o&&r.length===0&&!s&&!a)return[];let l;o?l=o:r.length>0?l=null:l="...";let d={role:"assistant",content:l};r.length>0&&(d.tool_calls=r),this.getEffectiveReplayReasoningContent(n)&&(d.reasoning_content=i||"");let u=t.flatMap(p=>p.type==="thinking"&&p.openaiReasoning?[p.openaiReasoning]:[]).filter(p=>p.provider===this.name&&p.model===this.getWireModelId(n)&&p.baseUrl===this.getBaseUrl()&&p.credentialScope===this.getRequestCredentialFingerprint()),m=u.flatMap(p=>p.details??[]);return m.length>0&&(d.reasoning_details=m),u.some(p=>p.reasoning!==void 0)&&(d.reasoning=u.map(p=>p.reasoning??"").join("")),[d]}async serializeToolResult(t,n,o){let r=[],i=[],s=this.getCapabilityProfile(o).multimodalSupport,a=s==="image-input"||s==="full";if(typeof t.content=="string")r.push(t.content);else for(let d of t.content)if(d.type==="text")r.push(d.text);else if(a){let u=await xe(d);"placeholder"in u?r.push(u.placeholder):(u.notice&&r.push(u.notice),i.push({type:"image_url",image_url:{url:`data:${u.mediaType};base64,${u.data}`}}))}else r.push(await Lr(d.path)?Kr:gn);i.length>0&&r.push("[Images from this tool result follow in a user message.]");let l={role:"tool",tool_call_id:t.tool_use_id,content:r.join(`
21
- `)};return i.length>0&&n.set(l,{role:"user",content:[{type:"text",text:`Images from tool result ${t.tool_use_id}:`},...i]}),l}async serializeUserMessage(t,n,o){let r=[],i=t.filter(l=>l.type==="text").map(l=>l.text).join(`
22
- `),s=t.filter(l=>l.type==="image");for(let l of t)l.type==="tool_result"&&r.push(await this.serializeToolResult(l,n,o));if(s.length===0)return i&&r.push({role:"user",content:i}),r;let a=[];i&&a.push({type:"text",text:i});for(let l of s){if(this.getModelDescriptor(o)?.multimodalSupport==="none"){a.push({type:"text",text:bt});continue}let d=await xe(l);"placeholder"in d?a.push({type:"text",text:d.placeholder}):(d.notice&&a.push({type:"text",text:d.notice}),a.push({type:"image_url",image_url:{url:`data:${d.mediaType};base64,${d.data}`}}))}return r.push({role:"user",content:a}),r}serializeSystemMessage(t){if(typeof t=="string")return[{role:"system",content:t}];let n=t.filter(o=>o.type==="text").map(o=>o.text).join(`
23
- `);return n?[{role:"system",content:n}]:[]}async convertMessages(t,n){let o=[],r=new Map;for(let i of t){if(i.role==="system"){o.push(...this.serializeSystemMessage(i.content));continue}if(typeof i.content=="string"){o.push({role:i.role,content:i.content,...i.role==="assistant"&&this.getEffectiveReplayReasoningContent(n)?{reasoning_content:""}:{}});continue}if(i.role==="assistant"){o.push(...this.serializeAssistantMessage(i.content,n));continue}o.push(...await this.serializeUserMessage(i.content,r,n))}return this.repairToolCallHistory(o,r)}repairToolCallHistory(t,n){let o=[],r=new Set,i=0;for(;i<t.length;){let s=t[i],a=qt(s);if(a==="assistant"){let l=ya(s)??[];r=new Set(l.map(g=>g.id));let d=va(s,l);if(l.length===0){o.push(d),i+=1;continue}let u=new Map,m=[],p=i+1;for(;p<t.length&&qt(t[p])!=="assistant";){let g=t[p];if(qt(g)==="tool"){let f=ba(g);if(f!==void 0&&r.has(f)&&!u.has(f)){u.set(f,g);let v=n.get(g);v&&m.push(v)}}else m.push(g);p+=1}o.push(d);for(let g of l)o.push(u.get(g.id)??{role:"tool",tool_call_id:g.id,content:Ve});o.push(...m),i=p;continue}if(a==="tool"){i+=1;continue}o.push(s),i+=1}return o}};function vn(e,t,n=()=>!0,o=new Map){let r=c(a=>new L(a,t.provider,{failureCode:"response_stream_error",stage:"response_stream",retryable:!1}),"protocolError");if(!Array.isArray(e.output))throw r("Responses returned no output array.");let i=[],s=new Set;for(let a of e.output){if(!a||typeof a!="object")throw r("Responses returned an invalid output item.");if(a.type==="message"){if(a.status!=="completed"||!Array.isArray(a.content))throw r("Responses returned an unfinished message.");for(let l of a.content){if(!l||l.type!=="output_text"&&l.type!=="refusal")throw r("Responses returned unknown message content.");let d=l.type==="output_text"?l.text:l.refusal;if(typeof d!="string")throw r("Responses returned invalid message text.");i.push({type:"text",text:d})}}else if(a.type==="reasoning"){if(a.status&&a.status!=="completed"||typeof a.id!="string"||!a.id||!Array.isArray(a.summary)||a.summary.some(l=>!l||l.type!=="summary_text"||typeof l.text!="string")||a.encrypted_content!==void 0&&a.encrypted_content!==null&&typeof a.encrypted_content!="string")throw r("Responses returned unfinished reasoning or invalid metadata.");i.push({type:"thinking",thinking:a.summary.map(l=>l.text).join(`
24
- `),responsesReasoning:{source:t,id:a.id,summary:a.summary,encrypted_content:a.encrypted_content}})}else if(a.type==="function_call"){if(a.status&&a.status!=="completed"||typeof a.call_id!="string"||!a.call_id.trim()||typeof a.name!="string"||!a.name.trim()||typeof a.arguments!="string"||s.has(a.call_id)||a.namespace!==void 0&&typeof a.namespace!="string"||!n(a.namespace))throw r("Responses returned an unfinished or duplicate function call.");let l;try{l=JSON.parse(a.arguments)}catch{throw r("Responses returned invalid final function arguments.")}if(l===null||typeof l!="object"||Array.isArray(l))throw r("Responses function arguments must be a JSON object.");s.add(a.call_id),i.push({type:"tool_use",id:a.call_id,name:a.name,input:l})}else if(a.type==="custom_tool_call"){let l=o.get(a.name),d=a.status;if(d!==void 0&&d!=="completed"||typeof a.call_id!="string"||!a.call_id.trim()||s.has(a.call_id)||typeof a.input!="string"||!l||!n(a.namespace))throw r("Responses returned an invalid or undeclared custom tool call.");s.add(a.call_id),i.push({type:"tool_use",id:a.call_id,name:a.name,input:{[l]:a.input},customTool:{source:t,property:l}})}else throw r(`Unsupported Responses output item: ${a.type}`)}return i}c(vn,"parseResponsesOutput");import{createHash as wa}from"node:crypto";function Ao(e){return Je(Or(e.usage))}c(Ao,"usageFrom");var Ie=class extends ne{static{c(this,"KodaXOpenAIResponsesProvider")}getReasoningApi(){return"openai-responses"}rejectedResponseEfforts=new Map;requiresResponseStream(){return!1}prepareResponseRequest(t){return t}responseRequestHeaders(t){}responseSocketHeaders(t,n){let o=this.getApiKey();return Object.fromEntries(dn({...this.config.authentication==="cloudflare-gateway"?{"cf-aig-authorization":`Bearer ${o}`}:{authorization:`Bearer ${o}`},...this.responseRequestHeaders(t)}))}async responseEvents(t,n,o,r,i){let s=c(async()=>(await this.getClient()).responses.create(await Ce({...t,stream:!0}),r),"http");if(o?.transport===void 0||o.transport==="sse")return s();let a=new URL(`${this.getBaseUrl()?.replace(/\/$/,"")??"https://api.openai.com/v1"}/responses`);if(a.username||a.password||a.search||a.hash||a.protocol!=="https:"&&!(a.protocol==="http:"&&["localhost","127.0.0.1","[::1]"].includes(a.hostname)))throw this.protocolError("Invalid WebSocket endpoint.");a.protocol=a.protocol==="https:"?"wss:":"ws:";let{background:l,...d}=t,u=await Ce({type:"response.create",...d},"root",!1),{responsesWebSocketEvents:m}=await import("./responses-websocket-Y4N5GXD3.js");return m({provider:this.name,url:a.href,headers:this.responseSocketHeaders(n,o),frame:u,options:o,signal:r.signal,scope:this.getReasoningLearningScope(o?.modelOverride),validateCompleted:c(p=>wt([{role:"assistant",content:this.parseOutput(p,this.getGenerationSource(o?.modelOverride),i)}],this.getGenerationSource(o?.modelOverride),()=>[],{settleTrailing:!1}),"validateCompleted"),...o.transport==="auto"?{fallback:s}:{}})}acceptsResponseToolNamespace(t){return!0}getGenerationSource(t){let n=this.getRequestCredentialFingerprint();return{provider:this.name,api:"openai-responses",model:this.getWireModelId(t),baseUrl:this.getBaseUrl(),...n?{credentialScope:n}:this.config.credentialSource==="broker"?{credentialScope:"unavailable"}:{}}}async verifyCredential(t){return this.config.verifyStrategy!=="minimal-message"?super.verifyCredential(t):Pe({strategy:"minimal-message",providerName:this.name,...t,runners:[{strategy:"minimal-message",approxTokensSpent:22,run:c(n=>ue(this,"utility",n,async o=>{await(await this.getClient()).responses.create({model:this.getWireModelId(),input:"hi",store:!1,max_output_tokens:16,stream:!1},{signal:o,maxRetries:0})}),"run")}]})}stream(t,n,o,r,i,s){return this.withRequestContext(i,s,a=>this.generate(!0,t,n,o,r,i,a))}complete(t,n,o,r,i,s){return this.withRequestContext(i,s,a=>this.generate(!1,t,n,o,r,i,a))}protocolError(t){return new L(t,this.name,{failureCode:"response_stream_error",stage:"response_stream",retryable:!1})}upstreamError(t,n){let o=n==="server_error"||n==="rate_limit_exceeded",r=n==="server_error"?"server error":n==="rate_limit_exceeded"?"rate limit":"failed";return new L(`Responses ${r}: ${t}`,this.name,{failureCode:"response_stream_error",stage:"response_stream",upstreamCode:n??void 0,...!o||fo({code:n,message:t})?{retryable:!1}:{}})}async generate(t,n,o,r,i,s,a){if(s?.forcedToolName&&!o.some(h=>h.name===s.forcedToolName))throw this.protocolError("Responses forced tool is absent from the current tool definitions.");let l=s?.modelOverride??this.getModel(),d=this.normalizeReasoning(i);this.validateExplicitReasoningEffort(d,l);let u=this.getReasoningProfile(l),m=u?this.resolveReasoningProfileIntent(d,u,l):void 0,p=d.effortSource==="omitted"?"auto":d.effort,g=u?.effortStrategy==="none"||u?.effortStrategy==="prompt-only"?void 0:p==="auto"?u?.defaultEffort??u?.supportedEfforts?.find(h=>h.isDefault)?.value:m?.disabled?u?.supportsDisabledThinking===!0?"none":void 0:m?.effort,f=this.getGenerationSource(l),v=g!==void 0&&Fe(u)?yt(u,g):g===void 0?[void 0]:[g,void 0];return this.withRateLimit(async h=>{if(a?.aborted)throw new DOMException("Request aborted","AbortError");let y=this.normalizeSystemForWire(r,n),b=new Map,w=this.getCapabilityProfile(l).multimodalSupport!=="none";for(let R of y.rest)if(typeof R.content!="string")for(let M of R.content){let j=M.type==="image"?[M]:M.type==="tool_result"&&typeof M.content!="string"?M.content.filter(N=>N.type==="image"):[];for(let N of j){if(!w){b.set(N,[{type:"input_text",text:gn}]);continue}let $=await xe(N);b.set(N,"placeholder"in $?[{type:"input_text",text:$.placeholder}]:[...$.notice?[{type:"input_text",text:$.notice}]:[],{type:"input_image",image_url:`data:${$.mediaType};base64,${$.data}`,detail:"auto"}])}}let _=wt(y.rest,f,R=>b.get(R),{cacheBreakpoints:this.getCacheCapabilities(l)?.dialect==="openai-options"&&!me()&&s?.cacheRetention!=="none"});s?.ephemeralSuffix?.content&&_.push({role:"user",content:s.ephemeralSuffix.content});let E=this.getEffectiveMaxOutputTokens(l,s?.maxOutputTokensOverride);h.maxOutputTokensLimit??=E;let x=this.getReasoningLearningScope(l)??wa("sha256").update(this.getApiKey()).digest("hex"),k=[...this.rejectedResponseEfforts.get(x)??[],...s?.resolveRejectedReasoningEfforts?.(x)??s?.rejectedReasoningEfforts??[]],S=[];for(let R of v){let M=k.includes("*")||k.includes("parameter:reasoning")||k.includes("parameter:effort")||R!==void 0&&k.includes(R);if(R!==void 0&&M){S.push({effort:R,reason:"cached-rejection"});continue}let j=h.suppressReasoningEffort?void 0:R,N=pn(Le(o,h.disablePreferredToolConstraints),this.getToolCapabilities(l),this.name),$=this.prepareResponseRequest({model:f.model,input:_,instructions:y.system,store:!1,include:["reasoning.encrypted_content"],max_output_tokens:Math.min(h.maxOutputTokensOverride??E,E),...o.length?{tools:N.tools}:{},...s?.forcedToolName&&o.length?{tool_choice:{type:N.customProperties.has(s.forcedToolName)?"custom":"function",name:s.forcedToolName}}:{},...j?{reasoning:{effort:j}}:{},...this.config.promptCacheAffinity&&s?.promptCacheKey&&!me()?{prompt_cache_key:s.promptCacheKey}:{}}),A={signal:a,maxRetries:0,headers:this.responseRequestHeaders(n)},T;try{if(t||this.requiresResponseStream()||s?.transport!==void 0&&s.transport!=="sse"){let O=await this.responseEvents($,n,s,A,N.customProperties),G=new Map;for await(let Z of O){if(mt(Z),a?.aborted)throw new DOMException("Request aborted","AbortError");if(s?.onHeartbeat?.(),"response"in Z&&Ue(Ao(Z.response)),Z.type==="response.completed"||Z.type==="response.incomplete"||Z.type==="response.failed"){T=Z.response;break}this.emitDelta(Z,t?s:void 0,G,N.customProperties)}if(a?.aborted)throw new DOMException("Request aborted","AbortError");if(!T)throw new L("Stream incomplete: Responses ended without a terminal response.",this.name,{failureCode:"response_stream_error",stage:"response_stream"})}else T=await(await this.getClient()).responses.create(await Ce({...$,stream:!1}),A),Ue(Ao(T))}catch(O){Be(O,$);let G=j===void 0?null:gt(O,j);if(G){let Z=G.parameterRejected?"*":G.rejectedEffort,W=this.rejectedResponseEfforts.get(x)??new Set;if(W.add(Z),this.rejectedResponseEfforts.set(x,W),k.push(Z),S.push({effort:j,reason:G.parameterRejected?"unsupported-parameter":"unsupported-effort"}),s?.onReasoningEffortRejected?.({provider:this.name,model:l,effort:Z,cacheScope:x}),!s?.singleAttempt&&!a?.aborted)continue}throw O}if(a?.aborted)throw new DOMException("Request aborted","AbortError");if(T.error)throw this.upstreamError(T.error.message,T.error.code);if(T.status!=="completed")throw this.protocolError(`Responses ${T.status}: ${T.incomplete_details?.reason??"no completed output"}`);let K=this.parseOutput(T,f,N.customProperties),F=K.filter(O=>O.type==="text"),J=K.filter(O=>O.type==="thinking"),Y=K.filter(O=>O.type==="tool_use");if(!t){for(let O of F)s?.onTextDelta?.(O.text);for(let O of J)O.thinking&&s?.onThinkingDelta?.(O.thinking)}let ce=J.map(O=>O.thinking).join("");ce&&s?.onThinkingEnd?.(ce);let Q={provider:this.name,model:l,requestedEffort:p,sentEffort:j,verified:!1,fallbacks:S.length?S:p!=="auto"&&p!==j?[{effort:p,reason:"profile"}]:[]};return s?.onReasoningResolved?.(Q),{contentBlocks:K,textBlocks:F,thinkingBlocks:J,toolBlocks:Y,usage:Ao(T),stopReason:Y.length?"tool_use":"end_turn",reasoningResolution:Q}}throw this.protocolError("Responses exhausted reasoning negotiation without a completed response.")},a,s?.singleAttempt?1:3,s?.onRateLimit,s?.onRetryAfter,{model:l,effort:g,tools:o})}emitDelta(t,n,o,r){switch(t.type){case"error":throw this.upstreamError(t.message,t.code);case"response.output_text.delta":case"response.refusal.delta":n?.onTextDelta?.(t.delta);break;case"response.reasoning_summary_text.delta":n?.onThinkingDelta?.(t.delta);break;case"response.output_item.added":if(t.item.type==="function_call"&&o.set(t.item.id,{name:t.item.name,callId:t.item.call_id}),t.item.type==="custom_tool_call"){let i=r.get(t.item.name);if(!i)throw this.protocolError("Responses started an undeclared custom tool.");t.item.id&&o.set(t.item.id,{name:t.item.name,callId:t.item.call_id,property:i})}break;case"response.custom_tool_call_input.delta":{let i=o.get(t.item_id);if(!i?.property)throw this.protocolError("Custom tool delta has no declared input property.");n?.onToolInputDelta?.(i.name,t.delta,{toolId:i.callId,format:"text",inputProperty:i.property});break}case"response.function_call_arguments.delta":{let i=o.get(t.item_id);i&&n?.onToolInputDelta?.(i.name,t.delta,{toolId:i.callId});break}}}parseOutput(t,n,o){return vn(t,n,r=>this.acceptsResponseToolNamespace(r),o)}};function Gt(e,t,n={}){if(e===void 0)return;let o=n.allowZero===!0;if(!Number.isFinite(e)||(o?e<0:e<=0)){let r=o?"a non-negative finite number":"a positive finite number";throw new Error(`${t} must be ${r}`)}return e===0?0:Math.max(1,Math.floor(e*1e3))}c(Gt,"timeoutSecToMs");function _a(e){if(e===void 0||e.trim().length===0)return;let t=Number(e);if(!(!Number.isFinite(t)||t<=0))return Math.max(1,Math.floor(t*1e3))}c(_a,"parseTimeoutSecEnvMs");function ka(e){if(!e)return;let t={requestTimeoutMs:Gt(e.requestTimeoutSec,"timeouts.llm.requestTimeoutSec"),streamIdleTimeoutMs:Gt(e.streamIdleTimeoutSec,"timeouts.llm.streamIdleTimeoutSec",{allowZero:!0}),chunkTimeoutMs:Gt(e.chunkTimeoutSec,"timeouts.llm.chunkTimeoutSec"),maxRetryDelayMs:Gt(e.maxRetryDelaySec,"timeouts.llm.maxRetryDelaySec")};return Object.values(t).some(o=>o!==void 0)?t:void 0}c(ka,"resolveLlmTimeoutConfig");function Vt(e,t,n){return`${e}/${t??""}${n===void 0?"":`#${n}`}`}c(Vt,"capabilityCacheKey");function Ro(e,t){if(t.length===0)return e;let n=new Set(t),o=e.defaultEffort!==void 0&&n.has(e.defaultEffort);return{...e,...o?{defaultEffort:void 0}:{},supportedEfforts:e.supportedEfforts?.filter(r=>!n.has(r.value)),localRejectEfforts:Array.from(new Set([...e.localRejectEfforts??[],...t]))}}c(Ro,"narrowReasoningProfile");function Ca(e,t,n,o){return e[Vt(t,n,o)]?.rejected??[]}c(Ca,"getRejectedEfforts");function Ea(e,t,n,o,r,i,s){let a=Vt(t,n,s),l=e[a],d=l?.rejected.includes(o)?l.rejected:[...l?.rejected??[],o];return{...e,[a]:{rejected:d,source:r,updatedAt:i}}}c(Ea,"addRejectedEffort");function Pa(e,t,n){if(!t)return{};let o={...e};delete o[Vt(t,n)];for(let r of Object.keys(o))r.startsWith(`${Vt(t,n)}#`)&&delete o[r];return o}c(Pa,"removeCacheEntry");function xa(e){if(!e||typeof e!="object")return{};let t={};for(let[n,o]of Object.entries(e)){if(!o||typeof o!="object")continue;let r=o,i=Array.isArray(r.rejected)?r.rejected.filter(l=>typeof l=="string"):[],s=r.source==="probed"?"probed":"observed",a=typeof r.updatedAt=="string"?r.updatedAt:"";t[n]={rejected:i,source:s,updatedAt:a}}return t}c(xa,"sanitizeCapabilityCache");var Ta="KodaX",Aa="effort-2025-11-24";function So(e){return Array.isArray(e)?e.slice(0,1e3).flatMap(t=>it(t)&&["type","path","reason"].every(n=>typeof t[n]=="string"&&t[n].length<=256)?[{type:t.type,path:t.path,reason:t.reason}]:[]):[]}c(So,"inputTransformations");async function Ra(e){let{default:t}=await import("@anthropic-ai/sdk");return new t({...e,fetch:ht(e?.fetch??Ke(globalThis.fetch))})}c(Ra,"createAnthropicSdkClient");function oi(e,t){if(t===void 0||t.length===0)return e;let n={type:"text",text:t},o=e.at(-1);if(o?.role!=="user")return[...e,{role:"user",content:[n]}];let r=typeof o.content=="string"?[{type:"text",text:o.content},n]:[...o.content,n];return[...e.slice(0,-1),{...o,content:r}]}c(oi,"appendAnthropicEphemeralSuffix");function Sa(e){return e.userAgentMode==="sdk"?void 0:{"User-Agent":Ta}}c(Sa,"getAnthropicCompatDefaultHeaders");function Mo(e,t){if(!e)return t;let n=typeof e.input_tokens=="number",o=typeof e.cache_creation_input_tokens=="number",r=typeof e.cache_read_input_tokens=="number",i=n||o||r,s=n?e.input_tokens:0,a=i?o?e.cache_creation_input_tokens:void 0:t?.cachedWriteTokens,l=i?r?e.cache_read_input_tokens:void 0:t?.cachedReadTokens,d=typeof e.output_tokens=="number"?e.output_tokens:t?.outputTokens??0,u=i?s+(a??0)+(l??0):t?.inputTokens??0;if([u,d,a,l].some(p=>p!==void 0&&(!Number.isFinite(p)||p<0)))return;let m=e.cache_creation?Ir(a,{"5m":e.cache_creation.ephemeral_5m_input_tokens,"1h":e.cache_creation.ephemeral_1h_input_tokens}):i?void 0:t?.cachedWriteTokensByTtl;return Je({inputTokens:u,outputTokens:d,totalTokens:u+d,...l!==void 0?{cachedReadTokens:l}:{},...a!==void 0?{cachedWriteTokens:a}:{},...m?{cachedWriteTokensByTtl:m}:{}})}c(Mo,"normalizeAnthropicUsage");function it(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}c(it,"isRecord");function Ma(e){if(!(!e.enabled||e.effort==="auto"||e.effort==="none"))return e.effort}c(Ma,"selectAnthropicOutputEffort");function ri(e,t){let n=Ma(t);if(!n)return;let o=e,r=o.output_config;o.output_config={...it(r)?r:{},effort:n}}c(ri,"applyAnthropicOutputEffort");function rt(e,t){if(!t)return;let n=e,o=n.output_config;n.output_config={...it(o)?o:{},effort:t}}c(rt,"setAnthropicOutputEffort");function Io(e){let n=e.output_config;return it(n)&&typeof n.effort=="string"}c(Io,"hasAnthropicOutputEffort");var oe=class extends ze{static{c(this,"KodaXAnthropicCompatProvider")}usesScopedReasoningLearning(){return!0}getReasoningApi(){return"anthropic-messages"}controlEffort(t){let n=t,o=n.thinking,r=n.output_config;if(this.isNativeHistoryModel(t.model)){if(o?.type==="disabled")return"none";let i=r?.effort,s,a=!1;for(let l of t.messages)l.role==="assistant"&&(a=!1),l.role==="user"&&(typeof l.content=="string"||Array.isArray(l.content)&&l.content.some(d=>it(d)&&d.type!=="tool_result"))&&(a=!0,i=s??i,s=void 0),l.role==="system"&&it(l.output_config)&&typeof l.output_config.effort=="string"&&(a?i=l.output_config.effort:s=l.output_config.effort);return i}return typeof n.reasoning_effort=="string"?n.reasoning_effort:r?.effort??o?.effort??(o?.type==="disabled"?"none":void 0)}skipRejectedControl(t,n,o){if(!t.thinking&&!Io(t)&&!("reasoning_effort"in t))return!1;let r=this.knownReasoningRejections(n,o),i=this.controlEffort(t);return r.includes("*")||i!==void 0&&r.includes(i)}learnRejectedControl(t,n,o,r){if(!n||!n.thinking&&!Io(n)&&!("reasoning_effort"in n))return null;let i=gt(t,this.controlEffort(n));return i?(this.rememberReasoningRejection(o,i.parameterRejected?"*":i.rejectedEffort,r),i):null}getGenerationSource(t){let n=this.getRequestCredentialFingerprint();return{provider:this.name,api:"anthropic-messages",model:this.getWireModelId(t),baseUrl:this.getBaseUrl(),...n?{credentialScope:n}:this.config.credentialSource==="broker"?{credentialScope:"unavailable"}:{}}}canReplayReasoning(t,n){let o=t.source??(t.type==="thinking"?t.responsesReasoning?.source:void 0),r=this.getGenerationSource(n);return o&&(o.provider!==r.provider||o.api!==r.api||o.model!==r.model||o.baseUrl!==r.baseUrl||o.credentialScope!==r.credentialScope)||t.type==="thinking"&&t.openaiReasoning!==void 0?!1:!this.getEffectiveStrictThinkingSignature(n)||(t.type==="thinking"?!!t.signature:o!==void 0)}requestObservationBoundary="physical_attempt";supportsThinking=!0;_client;_clientPromise;clientCredentialFingerprint;async getClient(){if(Se()||un())return this.buildClient();let t=JSON.stringify([this.getRequestCredentialFingerprint(),this.getCredentialConnectionFingerprint()]);if(this.clientCredentialFingerprint!==void 0&&this.clientCredentialFingerprint!==t&&(this._client=void 0,this._clientPromise=void 0),this._client)return this._client;this.clientCredentialFingerprint=t;let n=this._clientPromise??=Promise.resolve(this.buildClient());try{let o=await n;return this._clientPromise===n&&(this._client=o,this._clientPromise=void 0),o}catch(o){throw this._clientPromise===n&&(this._clientPromise=void 0),o}}set client(t){this._client=t,this._clientPromise=void 0,this.clientCredentialFingerprint=void 0}getBaseUrl(){return this.config.baseUrl??$e("ANTHROPIC_BASE_URL")??"https://api.anthropic.com"}buildClient(){let t=Sa(this.config),n=this.getApiKey(),o=bn(this.config,n,"anthropic");return Ra({apiKey:this.config.authentication==="bearer"?null:n,authToken:this.config.authentication==="bearer"?n:null,baseURL:this.getBaseUrl(),...t?{defaultHeaders:t}:{},...o?{fetch:o,logLevel:"off"}:{}})}onStaleConnection(){this._client=void 0}buildMessageCreateOptions(t,n,o){let i=[...this.getReasoningProfile(n)?.requiresEffortBetaHeader&&Io(t)?[Aa]:[],...Br(t)?[Ur]:[],...this.isNativeHistoryModel(n)?["inline-tools-2026-09-15","mid-conversation-output-config-2026-07-01"]:[]],s=i.length?{"anthropic-beta":i.join(",")}:void 0;return{...o?{signal:o}:{},...s?{headers:s}:{}}}isNativeHistoryModel(t){return this.name==="anthropic"&&/^claude-(opus|sonnet|haiku)-5-5(?:-|$)/.test(t??this.config.model)}nativeHistoryInput(t,n,o,r){let i=this.isNativeHistoryModel(n),s=this.getGenerationSource(n),a=i?Zr(t,s):void 0,l=o.effort==="auto"||o.effortSource==="omitted"||o.effort==="none"?n.startsWith("claude-sonnet-")?"high":"medium":o.effort,d=r?.thinkingMode??(!o.enabled&&o.effortSource!=="omitted"?"disabled":"adaptive"),u=!!a&&(a.requested.thinkingMode!==d||d!=="adaptive"&&a.requested.effort!==l),m=a?t.slice(a.start):t,p=i?m.map(g=>({...g,content:typeof g.content=="string"?g.content:g.content.flatMap(f=>f.type==="thinking"?f.thinking?[{type:"text",text:`<prior_reasoning>
25
- ${f.thinking}
26
- </prior_reasoning>`}]:[]:f.type==="redacted_thinking"?[]:[f])})):t;return{native:i,source:s,restored:a,input:p,resetLineage:u}}applyNativeControls(t,n,o,r,i=!1){if(!this.isNativeHistoryModel(n)){if(r?.thinkingMode!==void 0)throw new L("Thinking mode requires a supported native Claude 5.5 model.",this.name,{retryable:!1});return}let s=r?.thinkingMode??(!o.enabled&&o.effortSource!=="omitted"?"disabled":"adaptive"),a=s==="disabled",l=o.effort==="auto"||o.effortSource==="omitted"||o.effort==="none"?n.startsWith("claude-sonnet-")?"high":"medium":o.effort;if(a&&!n.startsWith("claude-haiku-"))throw new L("This Claude model requires adaptive thinking; effort none is unsupported.",this.name,{retryable:!1});if(!["adaptive","between_tools","disabled"].includes(s)||s==="between_tools"&&!n.startsWith("claude-sonnet-"))throw new L("Unsupported native Claude thinking mode.",this.name,{retryable:!1});if(s!=="adaptive"&&(!["low","medium","high"].includes(l)||r?.thinkingDisplay!==void 0))throw new L("This thinking mode requires effort high or below and no display/binding controls.",this.name,{retryable:!1});if(!n.startsWith("claude-haiku-")&&t.tool_choice&&t.tool_choice.type!=="auto"&&t.tool_choice.type!=="none")throw new L("This Claude model does not support forced tool choice.",this.name,{retryable:!1});t.thinking={type:s};let d=this.knownReasoningRejections(n,r);if(i||d.includes("*")?rt(t,void 0):rt(t,l),d.includes("*")){if(s!=="adaptive")throw new L("The requested thinking mode was rejected; refusing to enable thinking silently.",this.name,{retryable:!1});delete t.thinking}if(delete t.temperature,delete t.top_p,delete t.top_k,[...t.messages].filter(m=>m.role!=="system").at(-1)?.role==="assistant")throw new L("Claude 5.5 does not support assistant prefill.",this.name,{retryable:!1})}validateNativePayload(t){if(t.temperature!==void 0||t.top_p!==void 0||t.top_k!==void 0)throw new L("Claude 5.5 sampling controls cannot be set.",this.name,{retryable:!1,failureCode:"request_build_failed"});if([...t.messages].filter(n=>n.role!=="system").at(-1)?.role==="assistant")throw new L("Claude 5.5 does not support assistant prefill.",this.name,{retryable:!1,failureCode:"request_build_failed"})}applyReasoningProfile(t,n,o,r,i,s){if(s)return;this.validateExplicitReasoningEffort(o,r);let a=this.resolveReasoningProfileIntent(o,n,r),l=n.reasoningPreset,d=t;if(l==="kimi-k2.7-code"||l==="minimax-m2-always"){t.thinking={type:"enabled"},l==="kimi-k2.7-code"&&delete t.tool_choice;return}if(l==="kimi-k3.1"){t.thinking={type:"enabled"},rt(t,a.effort??n.defaultEffort);return}if(l==="kimi-k3"){let u=o.effortSource==="omitted"&&o.effort==="none";if(a.disabled&&!u){t.thinking={type:"disabled"};return}t.thinking={type:"enabled",effort:u?n.defaultEffort??"max":a.effort??n.defaultEffort??"max"};return}if(!(l==="none"||n.effortStrategy==="none"||n.effortStrategy==="prompt-only")){if(a.disabled){if(l==="zai-glm-5.3"){t.thinking={type:"adaptive"},rt(t,"low");return}(n.supportsDisabledThinking===!0||l==="zai-glm-5.2"||l==="zai-glm-toggle"||l==="deepseek-v4-anthropic"||l==="deepseek-toggle"||l==="kimi-hybrid-toggle"||l==="minimax-m3"||l==="mimo-v2.5-toggle"||n.thinkingStrategy==="provider-toggle")&&(t.thinking={type:"disabled"});return}if(l==="zai-glm-5.2"){t.thinking={type:"enabled"},a.effort&&(d.reasoning_effort=a.effort);return}if(l==="zai-glm-5.3"){t.thinking={type:"adaptive"},rt(t,a.effort);return}if(l==="deepseek-v4-anthropic"){t.thinking={type:n.thinkingStrategy==="anthropic-adaptive"?"adaptive":"enabled"},rt(t,a.effort);return}if(l==="minimax-m3"){t.thinking={type:"adaptive"};return}if(l==="zai-glm-toggle"||l==="deepseek-toggle"||l==="kimi-hybrid-toggle"||l==="mimo-v2.5-toggle"||n.effortStrategy==="provider-toggle"){t.thinking={type:"enabled"};return}if(n.effortStrategy==="anthropic-reasoning-effort"){t.thinking={type:"enabled"},a.effort&&(d.reasoning_effort=a.effort);return}if(n.effortStrategy==="anthropic-output-effort"||n.thinkingStrategy==="anthropic-adaptive"){t.thinking={type:"adaptive"},rt(t,a.effort);return}if(n.effortStrategy==="provider-budget"||n.thinkingStrategy==="anthropic-budget"){let u=this.resolveReasoningProfileBudget(n,a.effort,o,r,i);t.thinking={type:"enabled",budget_tokens:u}}}}resolveReasoningProfileBudget(t,n,o,r,i){let a=(n?t.budgetByEffort?.[n]:void 0)??tt(this.config,et(o.effort),o.taskType),l=this.getEffectiveThinkingBudgetCap(r),d=l!==void 0?Math.min(a,l):a;return nt(d,i)}async verifyCredential(t){let n=this.config.model,o=[{strategy:"count-tokens",approxTokensSpent:0,run:c(r=>ue(this,"utility",r,async i=>{await(await this.getClient()).messages.countTokens({model:n,messages:[{role:"user",content:"hi"}]},{signal:i})}),"run")},{strategy:"models-list",approxTokensSpent:0,run:c(r=>ue(this,"utility",r,async i=>{await(await this.getClient()).models.list({},{signal:i})}),"run")},{strategy:"minimal-message",approxTokensSpent:7,run:c(r=>ue(this,"utility",r,async i=>{await(await this.getClient()).messages.create({model:n,max_tokens:1,messages:[{role:"user",content:"hi"}]},{signal:i})}),"run")}];return Pe({strategy:this.config.verifyStrategy??"count-tokens",runners:o,timeoutMs:t?.timeoutMs,signal:t?.signal,providerName:this.name})}applyCacheControlToSystem(t){if(!t.trim()||me())return t;let n=Po([{type:"text",text:t}],"system");return xo(n,"attach")}applyCacheControlToTools(t,n){let o=jr(t,this.getToolCapabilities(n),this.name);if(t.length===0||me())return o;let r=o,i=r[r.length-1];return r[r.length-1]={...i,cache_control:{type:"ephemeral"}},r}applyCacheControlToMessages(t){if(t.length===0||me())return t;let n=-1;for(let d=t.length-1;d>=0;d--)if(t[d].role==="user"){n=d;break}if(n===-1)return t;let o=t[n];if(typeof o.content=="string"){if(o.content.length===0)return t;let d=t.slice();return d[n]={...o,content:[{type:"text",text:o.content,cache_control:{type:"ephemeral"}}]},d}if(o.content.length===0)return t;let r=o.content,s={...r[r.length-1],cache_control:{type:"ephemeral"}},a=[...r.slice(0,-1),s],l=t.slice();return l[n]={...o,content:a},l}supportsEphemeralSuffix(){return!0}stream(t,n,o,r,i,s){return this.withRequestContext(i,s,a=>this.streamInternal(t,n,o,r,i,a))}complete(t,n,o,r,i,s){return this.withRequestContext(i,s,a=>this.completeInternal(t,n,o,r,i,a))}async streamInternal(t,n,o,r,i,s){return this.withRateLimit(async a=>{let l=this.normalizeReasoning(r),d=i?.modelOverride??this.config.model,u=this.nativeHistoryInput(t,d,l,i),m={provider:this.name,model:d,requestedEffort:l.effortSource==="omitted"?"auto":l.effort,verified:!1,fallbacks:[]},p=this.getWireModelId(d);this.validateExplicitReasoningEffort(l,d);let g=this.getEffectiveMaxOutputTokens(d,i?.maxOutputTokensOverride);a.maxOutputTokensLimit??=g;let f=Math.min(a.maxOutputTokensOverride??g,g),v=oi(this.applyCacheControlToMessages(await this.convertMessages(u.input,d,!u.restored,u.restored?.messages.at(-1))),i?.ephemeralSuffix?.content),h=l.enabled?this.getReasoningCapability(d):"none",y=this.getReasoningProfile(d),b=y?["profile","none"]:l.enabled?this.getReasoningFallbackChain(h).filter(P=>P==="native-budget"||P==="native-toggle"||P==="native-adaptive"||P==="none"):["none"],w=n.length>0&&!!i?.forcedToolName,_=c(P=>{let D={model:p,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t,d)),messages:v,...n.length>0?{tools:this.applyCacheControlToTools(Le(n,a.disablePreferredToolConstraints),d)}:{},stream:!0,...this.config.promptCacheAffinity===!0&&i?.promptCacheKey&&!me()?{metadata:{user_id:i.promptCacheKey}}:{}};if(n.length>0&&i?.forcedToolName&&w&&(D.tool_choice={type:"tool",name:i.forcedToolName}),P!=="none")if(P==="profile"&&y)this.applyReasoningProfile(D,y,l,d,f,a.suppressReasoningEffort);else if(P==="native-budget"){let q=tt(this.config,et(l.effort),l.taskType);D.thinking={type:"enabled",budget_tokens:nt(q,f)}}else P==="native-toggle"?D.thinking={type:"enabled"}:P==="native-adaptive"&&(D.thinking={type:"adaptive"},ri(D,l));return this.applyNativeControls(D,d,l,i,P==="none"||a.suppressReasoningEffort),bo(D,y,i,this.name),D},"buildRequest");if(s?.aborted)throw new DOMException("Request aborted","AbortError");let E=[],x=[],k=[],S=new Map,R=new Map,M=new Map,j=[],N,$=null,A="",T="",K="",F="",J="",Y="",ce="",Q=!1,O,G=Date.now(),Z=Date.now(),W=await this.getClient(),te,H,V,ye;for(let P of b){for(;!te;){let D;try{if(D=_(P),u.native&&(H=Eo(t,u.source,u.restored,D,this.knownReasoningRejections(d,i),u.resetLineage),D=H.request),this.skipRejectedControl(D,d,i)){m.fallbacks.push({effort:this.controlEffort(D),reason:"cached-rejection"});break}D=await Ce(D,"root",!u.native),u.native&&(this.validateNativePayload(D),lo(D)),m.sentEffort=this.controlEffort(D),te=await W.messages.create(D,{...this.buildMessageCreateOptions(D,d,s),maxRetries:0}).catch(q=>{throw Be(q,D),q}),V=D}catch(q){let I=this.learnRejectedControl(q,D,d,i);if(i?.singleAttempt)throw q;if(ye=q,I){m.fallbacks.push({effort:m.sentEffort,reason:I.parameterRejected?"unsupported-parameter":"unsupported-effort"});break}if(w&&this.shouldFallbackForForcedToolChoiceError(q)){w=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let _e=P==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:P==="native-budget"?["budget_tokens","thinking"]:P==="native-toggle"?["thinking"]:P==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(q,..._e))throw q;break}}if(te)break}if(!te)throw ye??new L("All reasoning capability attempts failed without a captured error",this.name);let Lt=Date.now(),le=0,we=0,Ys=3e4;for await(let P of te){if(mt(P),s?.aborted)throw new DOMException("Request aborted","AbortError");let D=Date.now(),q=D-Lt;if(q>Ys&&(le++,we+=q,this.logStreamDiagnostic(`[Stream] stall detected: ${Math.round(q/1e3)}s gap before ${P.type}`,{stallCount:le,totalStallMs:we,eventType:P.type})),Lt=D,P.type==="content_block_start"||P.type==="content_block_stop"?i?.onHeartbeat?.(!0):i?.onHeartbeat?.(),P.type==="content_block_start"){G=Date.now();let I=P.content_block;u.native&&R.set(P.index,structuredClone(I)),$=I.type,process.env.KODAX_DEBUG_TOOL_STREAM&&I.type==="tool_use"&&console.error("[ToolStream] content_block_start:",{type:I.type,id:I.id,name:I.name}),I.type==="thinking"?(T=I.thinking??"",K=I.signature??""):I.type==="redacted_thinking"?($="redacted_thinking",F=I.data??""):I.type==="text"?A=I.text??"":I.type==="tool_use"&&(J=I.id,Y=I.name,ce="")}else if(P.type==="content_block_delta"){G=Date.now();let I=P.delta;if(u.native){let _e=R.get(P.index);_e&&I.type==="citations_delta"&&(_e.citations=[...Array.isArray(_e.citations)?_e.citations:[],structuredClone(I.citation)]),_e&&_e.type!=="tool_use"&&I.type==="input_json_delta"&&M.set(P.index,(M.get(P.index)??"")+I.partial_json)}I.type==="thinking_delta"?(T+=I.thinking??"",i?.onThinkingDelta?.(I.thinking??"")):I.type==="signature_delta"?K+=I.signature:I.type==="text_delta"?(A+=I.text??"",i?.onTextDelta?.(I.text??"")):I.type==="input_json_delta"&&(ce+=I.partial_json??"",i?.onToolInputDelta?.(Y,I.partial_json??"",J?{toolId:J}:void 0))}else if(P.type==="content_block_stop"){G=Date.now();let I=M.get(P.index);if(I!==void 0){try{R.get(P.index).input=JSON.parse(I)}catch{throw new L("Provider returned invalid native server-tool input.",this.name,{failureCode:"response_stream_error",stage:"response_stream",retryable:!1})}M.delete(P.index)}let _e=k.length+E.length+x.length;if($==="thinking")(T||K)&&k.push({type:"thinking",thinking:T,signature:K}),T&&i?.onThinkingEnd?.(T);else if($==="redacted_thinking")F&&k.push({type:"redacted_thinking",data:F}),F="";else if($==="text")A&&E.push({type:"text",text:A});else if($==="tool_use")if(!J||!Y)process.env.KODAX_DEBUG_TOOL_STREAM&&console.error("[Tool Block Invalid] Missing tool id or name:",{id:JSON.stringify(J),name:JSON.stringify(Y),input:ce.slice(0,100)});else{let ke=_t(ce||(u.native?JSON.stringify(R.get(P.index)?.input??{}):""));x.push({type:"tool_use",id:J,name:Y,input:ke.value,...ke.salvaged?{_salvaged:!0,_truncated:!0}:{}})}if(k.length+E.length+x.length>_e){let ke=$==="thinking"||$==="redacted_thinking"?k.at(-1):$==="text"?E.at(-1):x.at(-1);if(ke&&S.set(P.index,ke),u.native&&ke){let{source:Wl,...Zs}=ke.type==="thinking"||ke.type==="redacted_thinking"?ke:{...ke,source:void 0},co={...Zs};delete co._salvaged,delete co._truncated,R.set(P.index,{...R.get(P.index),...co})}}$=null}else if(P.type==="message_stop"){if(Q=!0,G=Date.now(),process.env.KODAX_DEBUG_STREAM){let I=Date.now()-Z;this.logStreamDiagnostic(`[Stream] message_stop received after ${I}ms`)}}else if(P.type==="message_delta"){j.push(...So(P.input_transformations)),G=Date.now(),N=Mo(P.usage,N),Ue(N);let I=P.delta;I?.stop_reason&&(O=I.stop_reason,process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic(`[Stream] message_delta with stop_reason: ${O}`))}else P.type==="message_start"&&(j.push(...So(P.message?.input_transformations)),G=Date.now(),N=Mo(P.message?.usage,N),Ue(N),process.env.KODAX_DEBUG_STREAM&&this.logStreamDiagnostic("[Stream] message_start received"))}if(!Q){let P=Date.now()-Z,D=Date.now()-G;if(s?.aborted){let q=s.reason instanceof Error?s.reason.message:typeof s.reason=="string"?s.reason:"Request aborted";throw this.logStreamDiagnostic("[Stream] Stream ended after abort before message_stop:",{duration:P,lastEventAge:D,reason:q,textBlocks:E.length,toolBlocks:x.length,thinkingBlocks:k.length}),new DOMException(q,"AbortError")}if(!O){let q=new Error(`Stream incomplete: message_stop event not received. Duration: ${P}ms, Last event: ${D}ms ago. This may indicate a network disconnection or API timeout.`);throw q.name="StreamIncompleteError",this.logStreamDiagnostic("[Stream] Incomplete stream detected:",{duration:P,lastEventAge:D,textBlocks:E.length,toolBlocks:x.length,thinkingBlocks:k.length}),q}this.logStreamDiagnostic("[Stream] message_stop missing but stop_reason known \u2014 treating as complete:",{duration:P,lastEventAge:D,stopReason:O,textBlocks:E.length,toolBlocks:x.length,thinkingBlocks:k.length})}let Sr=kt(O)?x.map(({_truncated:P,...D})=>D):x;for(let P of k)P.source=this.getGenerationSource(d);i?.onReasoningResolved?.(m);let Qs=new Map(Sr.map(P=>[P.id,P])),Mr=[...S.entries()].sort(([P],[D])=>P-D).map(([,P])=>P.type==="tool_use"?Qs.get(P.id)??P:P);return{contentBlocks:Mr,textBlocks:E,toolBlocks:Sr,thinkingBlocks:k,usage:N,stopReason:O,reasoningResolution:m,...H&&V?{nativeHistory:H.finish(V,Mr,[...R.entries()].sort(([P],[D])=>P-D).map(([,P])=>P),j)}:{}}},s,i?.singleAttempt?1:3,i?.onRateLimit,i?.onRetryAfter,{model:i?.modelOverride??this.config.model,onRejected:i?.onReasoningEffortRejected,tools:n})}supportsNonStreamingFallback(){return!0}async completeInternal(t,n,o,r,i,s){return this.withRateLimit(async a=>{let l=this.normalizeReasoning(r),d=i?.modelOverride??this.config.model,u=this.nativeHistoryInput(t,d,l,i),m={provider:this.name,model:d,requestedEffort:l.effortSource==="omitted"?"auto":l.effort,verified:!1,fallbacks:[]},p=this.getWireModelId(d);this.validateExplicitReasoningEffort(l,d);let g=this.getEffectiveMaxOutputTokens(d,i?.maxOutputTokensOverride);a.maxOutputTokensLimit??=g;let f=Math.min(a.maxOutputTokensOverride??g,g),v=oi(this.applyCacheControlToMessages(await this.convertMessages(u.input,d,!u.restored,u.restored?.messages.at(-1))),i?.ephemeralSuffix?.content),h=l.enabled?this.getReasoningCapability(d):"none",y=this.getReasoningProfile(d),b=y?["profile","none"]:l.enabled?this.getReasoningFallbackChain(h).filter(A=>A==="native-budget"||A==="native-toggle"||A==="native-adaptive"||A==="none"):["none"],w=n.length>0&&!!i?.forcedToolName,_=c(A=>{let T={model:p,max_tokens:f,system:this.applyCacheControlToSystem(this.buildSystemPrompt(o,t,d)),messages:v,...n.length>0?{tools:this.applyCacheControlToTools(Le(n,a.disablePreferredToolConstraints),d)}:{},...this.config.promptCacheAffinity===!0&&i?.promptCacheKey&&!me()?{metadata:{user_id:i.promptCacheKey}}:{}};if(n.length>0&&i?.forcedToolName&&w&&(T.tool_choice={type:"tool",name:i.forcedToolName}),A!=="none")if(A==="profile"&&y)this.applyReasoningProfile(T,y,l,d,f,a.suppressReasoningEffort);else if(A==="native-budget"){let K=tt(this.config,et(l.effort),l.taskType);T.thinking={type:"enabled",budget_tokens:nt(K,f)}}else A==="native-toggle"?T.thinking={type:"enabled"}:A==="native-adaptive"&&(T.thinking={type:"adaptive"},ri(T,l));return this.applyNativeControls(T,d,l,i,A==="none"||a.suppressReasoningEffort),bo(T,y,i,this.name),T},"buildRequest"),E=await this.getClient(),x,k,S,R;for(let A of b){for(;!x;){let T;try{if(T=_(A),u.native&&(k=Eo(t,u.source,u.restored,T,this.knownReasoningRejections(d,i),u.resetLineage),T=k.request),this.skipRejectedControl(T,d,i)){m.fallbacks.push({effort:this.controlEffort(T),reason:"cached-rejection"});break}T=await Ce(T,"root",!u.native),u.native&&(this.validateNativePayload(T),lo(T)),m.sentEffort=this.controlEffort(T),x=await E.messages.create(T,{...this.buildMessageCreateOptions(T,d,s),maxRetries:0}).catch(K=>{throw Be(K,T),K}),S=T}catch(K){let F=this.learnRejectedControl(K,T,d,i);if(i?.singleAttempt)throw K;if(R=K,F){m.fallbacks.push({effort:m.sentEffort,reason:F.parameterRejected?"unsupported-parameter":"unsupported-effort"});break}if(w&&this.shouldFallbackForForcedToolChoiceError(K)){w=!1,this.logStreamDiagnostic(`[${this.name}] upstream rejected forced tool_choice; retrying without forced tool choice`);continue}let J=A==="profile"?["thinking","reasoning_effort","budget_tokens","adaptive"]:A==="native-budget"?["budget_tokens","thinking"]:A==="native-toggle"?["thinking"]:A==="native-adaptive"?["adaptive","thinking"]:[];if(!this.shouldFallbackForReasoningError(K,...J))throw K;break}}if(x)break}if(!x)throw R??new L("All reasoning capability attempts failed without a captured error",this.name);let M=[],j=[],N=[],$=[];for(let A of x.content){A.type==="text"?(M.push({type:"text",text:A.text}),i?.onTextDelta?.(A.text)):A.type==="thinking"?(N.push({type:"thinking",thinking:A.thinking,signature:A.signature??""}),i?.onThinkingDelta?.(A.thinking),i?.onThinkingEnd?.(A.thinking)):A.type==="redacted_thinking"?N.push({type:"redacted_thinking",data:A.data}):A.type==="tool_use"&&j.push({type:"tool_use",id:A.id,name:A.name,input:it(A.input)?A.input:{}});let T=A.type==="text"?M.at(-1):A.type==="tool_use"?j.at(-1):A.type==="thinking"||A.type==="redacted_thinking"?N.at(-1):void 0;T&&$.push(T)}for(let A of N)A.source=this.getGenerationSource(d);return i?.onReasoningResolved?.(m),{reasoningResolution:m,contentBlocks:$,...k&&S?{nativeHistory:k.finish(S,$,x.content,So(x.input_transformations))}:{},textBlocks:M,toolBlocks:j,thinkingBlocks:N,usage:Mo(x.usage),stopReason:x.stop_reason??void 0}},s,i?.singleAttempt?1:3,i?.onRateLimit,i?.onRetryAfter,{model:i?.modelOverride??this.config.model,onRejected:i?.onReasoningEffortRejected,tools:n})}serializeSystemMessageContent(t){if(typeof t=="string")return t.trim();for(let n of t)if(Ct(n))throw new L("cache-boundary marker reached system message serialization unlowered. Provider base class lowering must run before any wire-level serialization.",this.name,{failureCode:"request_build_failed",stage:"request_build"});return t.filter(n=>n.type==="text").map(n=>n.text.trim()).filter(Boolean).join(`
27
- `)}buildSystemPrompt(t,n,o){let i=(this.isNativeHistoryModel(o)?n.slice(0,n.findIndex(s=>s.role!=="system")):n).filter(s=>s.role==="system").map(s=>this.serializeSystemMessageContent(s.content)).filter(Boolean);return[t,...i].filter(s=>typeof s=="string"&&s.trim().length>0).join(`
28
-
29
- `)}async convertMessages(t,n,o=!0,r){let i=[],s=this.getEffectiveStrictThinkingSignature(n),a=this.getModelDescriptor(n)?.multimodalSupport!=="none",l=this.isNativeHistoryModel(n),d=[];for(let u of t){if(u.role==="system"){if(l&&(i.length>0||!o)){let f={role:"system",content:[{type:"text",text:this.serializeSystemMessageContent(u.content)}]};i.at(-1)?.role==="user"||i.at(-1)?.role==="system"?i.push(f):d.push(f)}continue}let m=u.role==="user"?"user":"assistant";if(typeof u.content=="string"){i.push({role:m,content:u.content}),m==="user"&&i.push(...d.splice(0));continue}let p=[];if(m==="assistant"){for(let f of u.content)f.type==="thinking"?this.canReplayReasoning(f,n)?p.push({type:"thinking",thinking:f.thinking,signature:f.signature??""}):f.thinking&&p.push({type:"text",text:`<prior_reasoning>
30
- ${f.thinking}
31
- </prior_reasoning>`}):f.type==="redacted_thinking"?this.canReplayReasoning(f,n)&&p.push({type:"redacted_thinking",data:f.data}):f.type==="text"?p.push({type:"text",text:f.text}):f.type==="tool_use"&&s&&p.push({type:"tool_use",id:f.id,name:f.name,input:f.input});for(let f of u.content)f.type==="tool_use"&&!s&&p.push({type:"tool_use",id:f.id,name:f.name,input:f.input})}else{for(let f of u.content)if(f.type==="tool_result"&&u.role==="user"){let v;if(typeof f.content=="string")v=f.content;else{let h=[];for(let y of f.content)if(y.type==="text")h.push({type:"text",text:y.text});else if(y.type==="image"){if(!a){h.push({type:"text",text:bt});continue}let b=await xe(y);"placeholder"in b?h.push({type:"text",text:b.placeholder}):(b.notice&&h.push({type:"text",text:b.notice}),h.push({type:"image",source:{type:"base64",media_type:b.mediaType,data:b.data}}))}v=h}p.push({type:"tool_result",tool_use_id:f.tool_use_id,content:v,...f.is_error===!0?{is_error:!0}:{}})}for(let f of u.content)if(f.type==="text")p.push({type:"text",text:f.text});else if(f.type==="image"&&u.role==="user"){if(!a){p.push({type:"text",text:bt});continue}let v=await xe(f);"placeholder"in v?p.push({type:"text",text:v.placeholder}):(v.notice&&p.push({type:"text",text:v.notice}),p.push({type:"image",source:{type:"base64",media_type:v.mediaType,data:v.data}}))}}if(m==="assistant"&&this.config.supportsThinking&&!s){let f=p.some(h=>h.type==="tool_use"),v=p.some(h=>h.type==="thinking"||h.type==="redacted_thinking");f&&!v&&p.unshift({type:"thinking",thinking:"...",signature:""})}let g=p.length===0||(m==="assistant"||m==="user")&&p.every(f=>{let v=f;return v.type==="thinking"&&!v.thinking&&!v.signature||v.type==="text"&&!v.text});i.push({role:u.role,content:g?[{type:"text",text:"..."}]:p}),m==="user"&&i.push(...d.splice(0))}if(d.length)throw new L("Native system changes require the next user turn and complete tool results.",this.name,{retryable:!1});return l&&r?this.repairToolCallHistory([r,...i],!0).slice(1):o?this.repairToolCallHistory(i,l):i}repairToolCallHistory(t,n=!1){let o=[],r=new Set,i=0;for(;i<t.length;){let s=t[i],a=typeof s.content=="string"||!Array.isArray(s.content)?void 0:s.content;if(s.role==="assistant"){let l=[],d=!1;for(let v of a??[]){let h=v;h.type==="tool_use"&&(typeof h.id=="string"&&h.id.trim().length>0?l.push(h.id):d=!0)}if(r=new Set(l),l.length===0){if(d){let v=(a??[]).filter(h=>h.type!=="tool_use"||!!h.id);o.push(v.length===0?{...s,content:[{type:"text",text:"..."}]}:{...s,content:v})}else o.push(s);i+=1;continue}let u=new Map,m=[],p=[],g=i+1;for(;g<t.length&&t[g].role!=="assistant";){let v=t[g];if(n&&v.role==="system"){p.push(v),g+=1;continue}if(typeof v.content=="string")m.push({type:"text",text:v.content});else if(Array.isArray(v.content))for(let h of v.content){let y=h;if(y.type==="tool_result"){typeof y.tool_use_id=="string"&&r.has(y.tool_use_id)&&!u.has(y.tool_use_id)&&u.set(y.tool_use_id,h);continue}m.push(h)}g+=1}if(d){let v=(a??[]).filter(h=>h.type!=="tool_use"||!!h.id);o.push(v.length===0?{...s,content:[{type:"text",text:"..."}]}:{...s,content:v})}else o.push(s);let f=l.map(v=>u.get(v)??{type:"tool_result",tool_use_id:v,content:Ve,is_error:!0});o.push({role:"user",content:[...f,...m]}),o.push(...p),i=g;continue}if(s.role==="user"&&a){let l=a.filter(d=>{let u=d;return u.type!=="tool_result"||typeof u.tool_use_id=="string"&&r.has(u.tool_use_id)});l.length===a.length?o.push(s):l.length>0&&o.push({...s,content:l}),i+=1;continue}o.push(s),i+=1}return o}};import{spawn as Ba}from"node:child_process";import{Readable as Fa,Writable as za}from"node:stream";import kn from"node:process";import{spawnSync as wn}from"node:child_process";var Ia=2e3,st=2e3,jo=5e3,Oe=Object.freeze({status:"terminated"}),ii=Object.freeze({status:"already-exited"}),se=Object.freeze({status:"unknown"}),di=String.raw`
32
- using System;
33
- using System.Runtime.InteropServices;
34
- using System.Text;
35
- public static class KodaXNativeProcessSnapshot {
36
- [StructLayout(LayoutKind.Sequential, CharSet = CharSet.Auto)]
37
- private struct ProcessEntry32 {
38
- public uint dwSize;
39
- public uint cntUsage;
40
- public uint th32ProcessID;
41
- public IntPtr th32DefaultHeapID;
42
- public uint th32ModuleID;
43
- public uint cntThreads;
44
- public uint th32ParentProcessID;
45
- public int pcPriClassBase;
46
- public uint dwFlags;
47
- [MarshalAs(UnmanagedType.ByValTStr, SizeConst = 260)]
48
- public string szExeFile;
49
- }
50
- [DllImport("kernel32.dll", SetLastError = true)]
51
- private static extern IntPtr CreateToolhelp32Snapshot(uint flags, uint processId);
52
- [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
53
- private static extern bool Process32First(IntPtr snapshot, ref ProcessEntry32 entry);
54
- [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
55
- private static extern bool Process32Next(IntPtr snapshot, ref ProcessEntry32 entry);
56
- [StructLayout(LayoutKind.Sequential)]
57
- private struct FileTime {
58
- public uint Low;
59
- public uint High;
60
- }
61
- [DllImport("kernel32.dll", SetLastError = true)]
62
- private static extern IntPtr OpenProcess(uint access, bool inheritHandle, uint processId);
63
- [DllImport("kernel32.dll", SetLastError = true)]
64
- private static extern bool GetProcessTimes(IntPtr process, out FileTime creation, out FileTime exit, out FileTime kernel, out FileTime user);
65
- [DllImport("kernel32.dll", SetLastError = true)]
66
- private static extern bool TerminateProcess(IntPtr process, uint exitCode);
67
- [DllImport("kernel32.dll")]
68
- private static extern void GetSystemTimeAsFileTime(out FileTime systemTime);
69
- [DllImport("kernel32.dll")]
70
- private static extern bool CloseHandle(IntPtr handle);
71
- private static ulong ReadCreationTime(uint processId) {
72
- var process = OpenProcess(0x1000, false, processId);
73
- if (process == IntPtr.Zero) return 0;
74
- try {
75
- FileTime creation, exit, kernel, user;
76
- if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
77
- return ((ulong)creation.High << 32) | creation.Low;
78
- } finally {
79
- CloseHandle(process);
80
- }
81
- }
82
- public static int TerminateExact(uint processId, ulong expectedCreationTime) {
83
- var process = OpenProcess(0x1001, false, processId);
84
- if (process == IntPtr.Zero) return 0;
85
- try {
86
- FileTime creation, exit, kernel, user;
87
- if (!GetProcessTimes(process, out creation, out exit, out kernel, out user)) return 0;
88
- var actual = (((ulong)creation.High << 32) | creation.Low) / 10000;
89
- if (actual != expectedCreationTime) return 2;
90
- return TerminateProcess(process, 1) ? 1 : 0;
91
- } finally {
92
- CloseHandle(process);
93
- }
94
- }
95
- public static string ReadRows() {
96
- FileTime cutoffTime;
97
- GetSystemTimeAsFileTime(out cutoffTime);
98
- var cutoff = (((ulong)cutoffTime.High << 32) | cutoffTime.Low) / 10000;
99
- var snapshot = CreateToolhelp32Snapshot(2, 0);
100
- if (snapshot == new IntPtr(-1)) return string.Empty;
101
- var rows = new StringBuilder();
102
- var entry = new ProcessEntry32();
103
- entry.dwSize = (uint)Marshal.SizeOf(entry);
104
- try {
105
- if (!Process32First(snapshot, ref entry)) return string.Empty;
106
- do {
107
- var creationTime = ReadCreationTime(entry.th32ProcessID) / 10000;
108
- if (creationTime == 0 || creationTime <= cutoff) {
109
- rows.Append(entry.th32ProcessID).Append(',').Append(entry.th32ParentProcessID).Append(',').Append(creationTime).Append('\n');
110
- }
111
- entry.dwSize = (uint)Marshal.SizeOf(entry);
112
- } while (Process32Next(snapshot, ref entry));
113
- return rows.ToString();
114
- } finally {
115
- CloseHandle(snapshot);
116
- }
117
- }
118
- }`;function He(e){return e.exitCode!==null||e.signalCode!==null}c(He,"isExited");function Oo(e,t){return He(e)?Promise.resolve(!0):new Promise(n=>{let o=!1,r=c(a=>{o||(o=!0,clearTimeout(s),e.off("exit",i),e.off("error",i),n(a))},"finish"),i=c(()=>r(!0),"onExit"),s=setTimeout(()=>r(!1),t);s.unref?.(),e.once("exit",i),e.once("error",i)})}c(Oo,"waitForExit");function si(e,t){let n=!1;try{process.kill(-e,t),n=!0}catch{}try{process.kill(e,t),n=!0}catch{}return n}c(si,"signalPosixPidTree");function No(e){try{return process.kill(e,0),!0}catch(t){return t.code!=="ESRCH"}}c(No,"signalTargetExists");function ai(e){return No(-e)||No(e)}c(ai,"isPosixPidTreeAlive");async function ci(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!ai(e))return!0;await new Promise(o=>setTimeout(o,50))}return!ai(e)}c(ci,"waitForPosixPidTreeExit");function Oa(e){let t=e.trim();if(!t)return[];try{let n=JSON.parse(t);return(Array.isArray(n)?n:[n]).flatMap(r=>{if(typeof r!="object"||r===null)return[];let i=r,s=Number(i.pid),a=Number(i.parentPid),l=typeof i.creationTime=="string"?i.creationTime:String(i.creationTime??"0");return!Number.isFinite(s)||s<=0||!Number.isFinite(a)?[]:[{pid:s,parentPid:a,creationTime:/^\d+$/.test(l)?l:"0"}]})}catch{return[]}}c(Oa,"parseWindowsProcessSnapshotJson");function Da(e){let t=/^(\d{4})(\d{2})(\d{2})(\d{2})(\d{2})(\d{2})\.(\d{6})([+-])(\d{3})$/.exec(e);if(!t)return;let[,n,o,r,i,s,a,l,d,u]=t,m=Date.UTC(Number(n),Number(o)-1,Number(r),Number(i),Number(s),Number(a),Number(l.slice(0,3))),p=Number(u)*6e4*(d==="+"?1:-1),g=m-p;if(Number.isFinite(g))return{identity:(BigInt(g)+11644473600000n).toString(),unixMs:g}}c(Da,"parseWmicCreationTime");function ja(){let e=["$cutoff = [DateTime]::UtcNow","$items = try { @(Get-CimInstance Win32_Process -ErrorAction Stop) } catch { @(Get-WmiObject Win32_Process -ErrorAction Stop) }","$rows = @($items | ForEach-Object {"," $creationTime = '0'"," try {"," $created = $_.CreationDate"," if ($created -isnot [DateTime]) { $created = [System.Management.ManagementDateTimeConverter]::ToDateTime([string]$created) }"," $created = $created.ToUniversalTime()"," if ($created -le $cutoff) { $creationTime = ([long][Math]::Floor($created.ToFileTimeUtc() / 10000)).ToString() }"," } catch {}"," [PSCustomObject]@{ pid = [int]$_.ProcessId; parentPid = [int]$_.ParentProcessId; creationTime = $creationTime }","})","$rows | ConvertTo-Json -Compress"].join(`
119
- `),t=wn("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:jo,windowsHide:!0});if(!t.error&&t.status===0){let i=Oa(t.stdout);if(i.length>0)return i}let n=Date.now(),o=wn("wmic",["process","get","CreationDate,ParentProcessId,ProcessId","/format:list"],{encoding:"utf8",timeout:jo,windowsHide:!0});if(o.error||o.status!==0)return;let r=o.stdout.split(/\r?\n\s*\r?\n/).flatMap(i=>{let s=new Map(i.split(/\r?\n/).flatMap(m=>{let p=m.indexOf("=");return p<0?[]:[[m.slice(0,p),m.slice(p+1)]]})),a=Number(s.get("ProcessId")),l=Number(s.get("ParentProcessId")),d=s.get("CreationDate"),u=d===void 0?void 0:Da(d);return!Number.isFinite(a)||a<=0||!Number.isFinite(l)||u===void 0||u.unixMs>n?[]:[{pid:a,parentPid:l,creationTime:u.identity}]});return r.length>0?r:void 0}c(ja,"readWindowsProcessSnapshotFallback");function Na(){let e=["$source = @'",di,"'@","Add-Type -TypeDefinition $source","[KodaXNativeProcessSnapshot]::ReadRows()"].join(`
120
- `),t=wn("powershell.exe",["-NoProfile","-NonInteractive","-Command",e],{encoding:"utf8",timeout:jo,windowsHide:!0});if(!(t.error||t.status!==0))return pi(t.stdout)}c(Na,"readWindowsProcessSnapshotNative");function pi(e){let t=e.split(/\r?\n/).map(o=>o.trim()).filter(Boolean);if(t.some(o=>!/^\d+,\d+,\d+$/.test(o)))return;let n=t.flatMap(o=>{let[r,i,s="0"]=o.split(",",3),a=Number(r),l=Number(i);return!Number.isFinite(a)||a<=0||!Number.isFinite(l)?[]:[{pid:a,parentPid:l,creationTime:s}]});return n.length>0?n:void 0}c(pi,"parseWindowsNativeProcessRows");function Jt(){return Na()??ja()}c(Jt,"readWindowsProcessSnapshot");function fi(e,t,n){let o=new Map;for(let a of e)o.set(a.parentPid,[...o.get(a.parentPid)??[],a]);let r=[],i=[{pid:t,...n===void 0?{}:{creationTime:n},ancestryVerified:n!==void 0&&n!=="0"}],s=new Set([t]);for(;i.length>0;){let a=i.shift();if(a===void 0)break;for(let l of o.get(a.pid)??[]){if(s.has(l.pid)||!$a(l.creationTime,a.creationTime))continue;s.add(l.pid);let d=a.ancestryVerified&&l.creationTime!=="0";r.push(d?l:{...l,creationTime:"0"}),i.push({pid:l.pid,creationTime:l.creationTime,ancestryVerified:d})}}return r}c(fi,"collectDescendantIdentities");function $a(e,t){if(e==="0"||t===void 0||t==="0")return!0;try{return BigInt(e)>=BigInt(t)}catch{return!1}}c($a,"windowsCreationAtLeast");function Ka(e,t=Jt()){if(t===void 0)return;let n=new Set(t.filter(r=>r.creationTime==="0").map(r=>r.pid));if(e.some(r=>n.has(r.pid)))return;let o=new Set(t.filter(r=>r.creationTime!=="0").map(r=>`${r.pid}:${r.creationTime}`));return new Set(e.filter(r=>r.creationTime!=="0").filter(r=>o.has(`${r.pid}:${r.creationTime}`)).map(r=>r.pid))}c(Ka,"currentCapturedWindowsPids");function $o(e,t=Jt()){if(t===void 0)return;let n=Ka([e.root,...e.descendants],t);if(n!==void 0){if(n.size>0)return!1;if(e.completeTree)return e.uncertainDescendantPids.every(o=>!t.some(r=>r.pid===o))?!0:void 0}}c($o,"capturedWindowsProcessesGone");function La(e){return[e.root.pid,...e.descendants.map(t=>t.pid),...e.uncertainDescendantPids].some(No)}c(La,"capturedWindowsPidMayBeAlive");async function li(e,t){let n=Date.now()+t;for(;Date.now()<n;){if(!La(e))return $o(e)===!0;await new Promise(o=>setTimeout(o,50))}return $o(e)===!0}c(li,"waitForCapturedWindowsProcessesExit");var mi="KODAX_TERMINATION_COMPLETED",hi="KODAX_SNAPSHOT_COMPLETED";function Ua(e,t){let n=e.trim().split(/\r?\n/),o=n.indexOf(mi),r=n.indexOf(hi);return{terminationAttempted:t||o>=0,snapshot:t&&o>=0&&r>o?pi(n.slice(o+1,r).join(`
121
- `)):void 0}}c(Ua,"readWindowsTerminationResult");function ui(e,t=!1){let n=[...e].reverse().flatMap(i=>/^\d+$/.test(i.creationTime)?[`[KodaXNativeProcessSnapshot]::TerminateExact(${i.pid}, [UInt64]${i.creationTime}) | Out-Null`]:[]);if(n.length===0)return{terminationAttempted:!1};let o=["$source = @'",di,"'@","Add-Type -TypeDefinition $source",...n,...t?[`[Console]::Out.WriteLine('${mi}')`,"[Console]::Out.Flush()","[Console]::Out.Write([KodaXNativeProcessSnapshot]::ReadRows())",`[Console]::Out.WriteLine('${hi}')`,"[Console]::Out.Flush()"]:[]].join(`
122
- `),r=wn("powershell.exe",["-NoProfile","-NonInteractive","-Command",o],{encoding:"utf8",timeout:Ia,windowsHide:!0});return Ua(r.stdout??"",!r.error&&r.status===0)}c(ui,"terminateCapturedWindowsProcesses");function Ko(e,t){if(!e)return t;if(!t)return e;if(e.root.pid!==t.root.pid||e.root.creationTime!==t.root.creationTime)return t;let n=new Map;for(let o of[...t.descendants,...e.descendants])n.set(`${o.pid}:${o.creationTime}`,o);return{root:t.root,descendants:[...n.values()],uncertainDescendantPids:[...new Set([...t.uncertainDescendantPids,...e.uncertainDescendantPids])],completeTree:e.completeTree||t.completeTree}}c(Ko,"mergeWindowsProcessTreeCaptures");var xt=new WeakMap;function Tt(e){if(process.platform!=="win32"||e.pid===void 0)return;let t=xt.get(e);if(t!==void 0&&!He(e)){let r=gi(e.pid,t.root.creationTime);return xt.set(e,Ko(r,t)??t),t.root.creationTime}let n=Jt();if(t!==void 0&&He(e)){if(n===void 0)return t.root.creationTime;let r=n.find(s=>s.pid===e.pid);if(r!==void 0&&r.creationTime!==t.root.creationTime)return t.root.creationTime;let i=fi(n,t.root.pid,t.root.creationTime);return xt.set(e,Ko({root:t.root,descendants:i.filter(s=>s.creationTime!=="0"),uncertainDescendantPids:i.filter(s=>s.creationTime==="0").map(s=>s.pid),completeTree:t.completeTree},t)??t),t.root.creationTime}let o=n?.find(r=>r.pid===e.pid&&r.creationTime!=="0");if(o===void 0&&n!==void 0&&!He(e)&&(o=Jt()?.find(r=>r.pid===e.pid&&r.creationTime!=="0")),!(o===void 0||He(e)))return xt.set(e,{root:o,descendants:[],uncertainDescendantPids:[],completeTree:!1}),o.creationTime}c(Tt,"rememberChildProcessTree");function gi(e,t){let n=Jt();if(n===void 0)return;let o=n.find(i=>i.pid===e);if(o===void 0||o.creationTime==="0"||o.creationTime!==t)return null;let r=fi(n,e,o.creationTime);return{root:o,descendants:r.filter(i=>i.creationTime!=="0"),uncertainDescendantPids:r.filter(i=>i.creationTime==="0").map(i=>i.pid),completeTree:!0}}c(gi,"captureWindowsProcessTree");async function Do(e){let t=[e.root,...e.descendants],n=ui(t,e.completeTree);return e.completeTree?n.snapshot!==void 0&&$o(e,n.snapshot)===!0||await li(e,st)?Oe:n.terminationAttempted?(ui(t),await li(e,st)?Oe:se):se:se}c(Do,"killCapturedWindowsTree");async function _n(e){let t;if(process.platform==="win32"&&e.pid!==void 0){let n=xt.get(e),o=n===void 0?void 0:gi(e.pid,n.root.creationTime),r=Ko(o,n);return r!==void 0&&xt.set(e,r),o===void 0&&r===void 0||He(e)&&r!==void 0&&!r.completeTree&&r.descendants.length===0?se:(t=o===void 0?r===void 0?se:await Do(r):o===null?r===void 0?se:await Do(r):await Do(r??o),await Oo(e,st)?t.status==="unknown"?se:Oe:se)}if(e.pid!==void 0&&process.platform!=="win32")return si(e.pid,"SIGTERM")?await ci(e.pid,st)?Oe:(si(e.pid,"SIGKILL"),await ci(e.pid,st)?Oe:se):ii;if(He(e))return process.platform==="win32"&&e.pid!==void 0?se:ii;try{e.kill("SIGTERM")}catch{return He(e)&&t?.status!=="unknown"?Oe:se}if(await Oo(e,st))return t?.status==="unknown"?se:Oe;try{e.kill("SIGKILL")}catch{}return await Oo(e,st)?t?.status==="unknown"?se:Oe:se}c(_n,"killChildProcessTree");var Ae=class extends Error{static{c(this,"AcpTransportClosedError")}constructor(){super("ACP transport closed before the request completed"),this.name="AcpTransportClosedError"}},Cn=class{static{c(this,"AcpClient")}client=null;agentProcess=null;options;constructor(t){this.options=t}async connect(){let{ClientSideConnection:t,PROTOCOL_VERSION:n,ndJsonStream:o}=await import("@agentclientprotocol/sdk"),r,i;if(this.options.inputStream&&this.options.outputStream)r=this.options.inputStream,i=this.options.outputStream;else if(this.options.command){let l=kn.platform==="win32"&&!this.options.command.endsWith(".cmd")?`${this.options.command}.cmd`:this.options.command;if(this.agentProcess=Ba(l,this.options.args??[],{cwd:this.options.cwd??kn.cwd(),stdio:["pipe","pipe","inherit"],detached:kn.platform!=="win32",windowsHide:!0}),Tt(this.agentProcess),!this.agentProcess.stdin||!this.agentProcess.stdout)throw new Error("Failed to create ACP stdio pipes");i=za.toWeb(this.agentProcess.stdin),r=Fa.toWeb(this.agentProcess.stdout)}else throw new Error("AcpClient requires either a command or I/O streams");let s=o(i,r);if(this.client=new t(()=>({sessionUpdate:c(async a=>{this.options.onSessionUpdate?.(a)},"sessionUpdate"),requestPermission:c(async a=>{let l=a.options??[],d=l.find(u=>u.kind==="allow_once"||u.kind==="allow_always")??l[0];return d?{outcome:{outcome:"selected",optionId:d.optionId}}:{outcome:{outcome:"cancelled"}}},"requestPermission")}),s),this.client.signal.aborted)throw new Ae;await this.awaitWhileConnected(this.client.initialize({protocolVersion:n,clientCapabilities:{},clientInfo:{name:"kodax-ai-acp-client",version:"1.0.0"}}))}async createNewSession(){if(!this.client)throw new Error("Client not connected");if(this.client.signal.aborted)throw new Ae;return(await this.awaitWhileConnected(this.client.newSession({cwd:this.options.cwd??kn.cwd(),mcpServers:[]}))).sessionId}async prompt(t,n,o,r){if(!this.client)throw new Error("Client not connected");if(o?.throwIfAborted(),this.client.signal.aborted)throw new Ae;let i={sessionId:n,prompt:[{type:"text",text:t}]};r?.model&&(i.model=r.model),r?.reasoningEffort&&(i.effort=r.reasoningEffort);let s=this.client.prompt(i);if(o){let a,l=new Promise((u,m)=>{a=m}),d=c(()=>{this.client?.cancel({sessionId:n}).catch(()=>{});let u=new Error("ACP prompt aborted");u.name="AbortError",a?.(o.reason??u)},"onAbort");o.addEventListener("abort",d,{once:!0}),s=Promise.race([s,l]).finally(()=>{o.removeEventListener("abort",d)})}return await this.awaitWhileConnected(s)}isConnectionOpen(){return this.client!==null&&!this.client.signal.aborted}releaseSession(t){this.options.releaseSession?.(t)}disconnect(){this.agentProcess&&_n(this.agentProcess),this.options.abort?.();try{this.client?.close?.()}catch{}this.client=null,this.agentProcess=null}async awaitWhileConnected(t){let n=this.client;if(!n||n.signal.aborted)throw t.catch(()=>{}),new Ae;let o,r=new Promise((i,s)=>{o=c(()=>s(new Ae),"onClosed"),n.signal.addEventListener("abort",o,{once:!0})});try{return await Promise.race([t,r])}finally{o&&n.signal.removeEventListener("abort",o)}}};function Wa(e){if(!e||typeof e!="object")return;let t=e,n=t.inputTokens,o=t.outputTokens,r=t.totalTokens;if([n,o,r].some(p=>typeof p!="number"||!Number.isFinite(p)||p<0))return;let i=n,s=o,a=r;if(a<i||a<s)return;let l=c(p=>typeof p=="number"&&Number.isFinite(p)&&p>=0?p:void 0,"optionalToken"),d=l(t.cachedReadTokens),u=l(t.cachedWriteTokens),m=l(t.thoughtTokens);return{inputTokens:i,outputTokens:s,totalTokens:a,...d!==void 0?{cachedReadTokens:d}:{},...u!==void 0?{cachedWriteTokens:u}:{},...m!==void 0?{thoughtTokens:m}:{}}}c(Wa,"normalizeAcpUsage");function Ha(e){if(e.effort==="none")return"none";if(!(!e.enabled||e.effort==="auto"))return e.effort}c(Ha,"selectAcpReasoningEffort");function yi(e){if(!e?.aborted)return;let t=e.reason;if(!(t===void 0||t instanceof Error&&t.name==="AbortError"))return t}c(yi,"nonCancellationAbortReason");var Xe=class extends ze{static{c(this,"KodaXAcpProvider")}_client=null;_clientConnectPromise=null;_connectingClient=null;_clientGeneration=0;_sessionMap=new Map;_activeStreams=new Map;_activeConversationIds=new Set;async ensureClient(t){if(this._client?.isConnectionOpen())return this._client;if(this._client&&this.invalidateClient(this._client),!this._clientConnectPromise){let n=this._clientGeneration===0?this.acpClientOptions:this.acpClientOptions.recreate?.()??this.acpClientOptions;this._clientGeneration+=1;let o={...n,onSessionUpdate:t},r=new Cn(o);this._connectingClient=r;let i;i=r.connect().then(()=>{if(this._clientConnectPromise!==i||this._connectingClient!==r)throw new Error("ACP client initialization was cancelled");return this._connectingClient=null,this._client=r,r}).catch(s=>{throw this._connectingClient===r&&(this._connectingClient=null,r.disconnect()),s}).finally(()=>{this._clientConnectPromise===i&&(this._clientConnectPromise=null)}),this._clientConnectPromise=i}return await this._clientConnectPromise}invalidateClient(t){this._client===t&&(this._client=null,this._sessionMap.clear(),t.disconnect())}supportsEphemeralSuffix(){return!0}isConfigured(){return!0}async verifyCredential(){return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`CLI-bridge provider "${this.name}" manages credentials in its CLI binary's token store; not verifiable from the KodaX SDK`}}getDiagnosticPromptText(t,n){let o=t.map(s=>Array.isArray(s.content)?{...s,content:Et(s.content)}:s),r=o[o.length-1],i="";if(r&&typeof r.content=="string")i=r.content;else if(r&&Array.isArray(r.content)){let s=[];for(let a of r.content)if(a.type==="text")s.push(a.text);else if(a.type==="image"){let l=this.serializeImageBlockToPromptToken(a);l&&s.push(l)}i=s.join(`
123
- `)}return n?i.length>0?`${i}
124
-
125
- ${n}`:n:i}getCapabilityProfile(){return Ee(mn)}serializeImageBlockToPromptToken(t){return null}stripCacheBoundariesFromMessages(t){return t.map(n=>{if(typeof n.content=="string")return n;let o=Et(n.content);return o.length===n.content.length?n:{...n,content:o}})}async stream(t,n,o,r,i,s){let a=this.normalizeReasoning(r),l=Ha(a);if(t=this.stripCacheBoundariesFromMessages(t),this.acpClientOptions.executor&&typeof this.acpClientOptions.executor.isInstalled=="function"&&!await this.acpClientOptions.executor.isInstalled())throw new Error(`${this.name} requires a local CLI environment, but the CLI was not found or is not configured correctly.`);let d=[],u=[],m=i?.ephemeralSuffix?.content,p=this.getDiagnosticPromptText(t,m),g=c(h=>{let y=h.update,b=h.sessionId;if(!("sessionUpdate"in y))return;let w=b?this._activeStreams.get(b):void 0;if(w)switch(y.sessionUpdate){case"agent_message_chunk":if(y.content?.type==="text"){let _=y.content.text;w.output.text+=_,w.streamOptions?.onTextDelta?.(_)}break;case"tool_call":{let _="{}",E=y,x=E.arguments??E.parameters;x&&(_=typeof x=="string"?x:JSON.stringify(x)),w.streamOptions?.onToolInputDelta?.(y.title,_);let k=`
126
- > [Tool Use] ${y.title}: ${_}
127
- `;w.output.text+=k,w.streamOptions?.onTextDelta?.(k);break}case"tool_call_update":if(y.status){let _=`> [Tool Result] ${y.status}
128
-
129
- `;w.output.text+=_,w.streamOptions?.onTextDelta?.(_)}break}},"onSessionUpdate"),f=i?.sessionId,v=await this.ensureClient(g);if(f&&this._activeConversationIds.has(f))throw new Error(`ACP conversation "${f}" already has an active prompt`);f&&this._activeConversationIds.add(f);try{let h=f?this._sessionMap.get(f):void 0;h||(h=await v.createNewSession(),f&&this._sessionMap.set(f,h));let y={text:""};this._activeStreams.set(h,{streamOptions:i,output:y});let b;try{b=await v.prompt(p,h,s,{model:i?.modelOverride,reasoningEffort:l})}catch(w){w instanceof Ae&&this.invalidateClient(v);let _=yi(s);if(_!==void 0)throw _;if(!(s?.aborted||w instanceof Error&&w.name==="AbortError"))throw w}finally{this._activeStreams.delete(h),f||v.releaseSession(h)}if(b?.stopReason==="cancelled"){let w=yi(s);if(w!==void 0)throw w}return y.text&&d.push({type:"text",text:y.text}),{textBlocks:d,toolBlocks:u,thinkingBlocks:[],usage:Wa(b?.usage)}}catch(h){throw h instanceof Ae&&this.invalidateClient(v),h}finally{f&&this._activeConversationIds.delete(f)}}disconnect(){this._clientConnectPromise=null;let t=this._connectingClient;this._connectingClient=null,t?.disconnect(),this._client&&(this._client.disconnect(),this._client=null),this._activeStreams.clear(),this._activeConversationIds.clear(),this._sessionMap.clear()}};import bi from"node:fs";import vi from"node:os";import wi from"node:path";var Xa="gpt-5.4",qa="auto-gemini-3",Ga=["gpt-5.4","gpt-5.3-codex","gpt-5.3-codex-spark"],Va=["auto-gemini-3","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash"];function _i(e){let t=new Set,n=[];for(let o of e){let r=o.trim();if(!r)continue;let i=r.toLowerCase();t.has(i)||(t.add(i),n.push(r))}return n}c(_i,"dedupePreserveOrder");function Ja(){let e=wi.join(vi.homedir(),".codex","config.toml");try{return bi.readFileSync(e,"utf8").match(/^\s*model\s*=\s*"([^"]+)"/m)?.[1]?.trim()||null}catch{return null}}c(Ja,"readCodexConfiguredModel");function Ya(){let e=wi.join(vi.homedir(),".gemini","settings.json");try{let t=JSON.parse(bi.readFileSync(e,"utf8")),n=typeof t.model=="string"?t.model.trim():"";return n||(typeof t.general?.model=="string"?t.general.model.trim():"")||null}catch{return null}}c(Ya,"readGeminiConfiguredModel");function At(){return Ja()||Xa}c(At,"getCodexCliDefaultModel");function Rt(){return Ya()||qa}c(Rt,"getGeminiCliDefaultModel");function Yt(){return _i([At(),...Ga])}c(Yt,"getCodexCliKnownModels");function Qt(){return _i([Rt(),...Va])}c(Qt,"getGeminiCliKnownModels");import{spawn as Qa}from"node:child_process";import Zt from"node:process";var St=class{static{c(this,"CLIExecutor")}config;_installedCache=null;constructor(t){this.config=t}async isInstalled(){return this._installedCache!==null?this._installedCache:(this._installedCache=await this.checkInstalled(),this._installedCache)}async*execute(t){let n=this.buildArgs(t),o={...Zt.env,...this.config.env},i=Zt.platform==="win32"&&!this.config.command.endsWith(".cmd")?`${this.config.command}.cmd`:this.config.command,s=Qa(i,n,{cwd:this.config.cwd??Zt.cwd(),env:o,stdio:["ignore","pipe","pipe"],detached:Zt.platform!=="win32",windowsHide:!0}),a="";s.stderr?.on("data",k=>{a+=k.toString()});let l=new AbortController,d={},u,m=new Promise(k=>{u=c(()=>k(d),"resolveAbort")});Tt(s);let p=c(()=>{if(l.signal.aborted)return;let k=t.signal?.reason;k===void 0?l.abort():l.abort(k)},"forwardExternalAbort");t.signal?.addEventListener("abort",p),t.signal?.aborted&&p();let g=!1,f,v=c(()=>(f||(f=(async()=>{let k={status:"unknown"};for(let S=0;S<3;S+=1){if(Tt(s),k=await _n(s),k.status!=="unknown"||g&&!l.signal.aborted)return k;S<2&&await new Promise(R=>setTimeout(R,50))}return k})()),f),"terminateChild"),h=c(()=>{u?.(),g||(v(),s.stdout?.destroy())},"abortHandler");l.signal.addEventListener("abort",h),l.signal.aborted&&h(),s.on("exit",()=>{g=!0,Tt(s)});let y=!1,b,w,_=this.config.timeout;_!==void 0&&Number.isFinite(_)&&_>0&&!l.signal.aborted&&(w=setTimeout(()=>{l.signal.aborted||(y=!0,b=new Error(`Provider CLI timed out after ${_}ms`),l.abort(b))},_),w.unref?.());let E=c(async k=>{let S=await Promise.race([k,m]);if(S===d)throw l.signal.reason??b??new Error("Provider CLI execution aborted");return S},"waitForExecution"),x=new Promise((k,S)=>{s.once("error",S),s.once("close",(R,M)=>k({code:R,signal:M}))});try{let k=this.parseOutputStream(s.stdout,l.signal)[Symbol.asyncIterator]();for(;;){let M=await E(k.next());if(M.done)break;yield M.value}if(l.signal.aborted)throw l.signal.reason;let S=await E(x);if(y)throw b??l.signal.reason;let R=a.trim();if(!t.signal?.aborted&&S.code!==0){let M=S.code===null?`signal ${S.signal??"unknown"}`:`code ${S.code}`;throw new Error(`Provider CLI exited with ${M}${R?`: ${R}`:""}`)}R&&console.error(`[CLIExecutor] stderr: ${R}`)}catch(k){throw x.catch(()=>{}),l.signal.aborted?l.signal.reason:k}finally{if(w&&clearTimeout(w),t.signal?.removeEventListener("abort",p),l.signal.removeEventListener("abort",h),Zt.platform==="win32"||f!==void 0||!g){let k=f!==void 0;if((await v()).status==="unknown"&&(k||!g))throw new Error("Provider CLI process-tree termination could not be verified")}}}async*parseOutputStream(t,n){let o="";for await(let r of t){if(n?.aborted)break;o+=r.toString();let i=o.split(`
130
- `);o=i.pop()??"";for(let s of i){if(!s.trim())continue;let a=this.parseLine(s.trim());a&&(yield a)}}if(o.trim()&&!n?.aborted){let r=this.parseLine(o.trim());r&&(yield r)}}};import{spawn as Za}from"node:child_process";import ec from"node:process";async function En(e){try{let t=ec.platform==="win32",n=Za(t?`${e}.cmd`:e,["--version"],{windowsHide:!0});return await new Promise(o=>{n.on("close",r=>o(r===0)),n.on("error",()=>o(!1))})}catch{return!1}}c(En,"checkCliCommandInstalled");function Pn(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}c(Pn,"finiteNonNegative");function tc(e){if(!(!e||!Pn(e.input_tokens)||!Pn(e.output_tokens)||!Pn(e.total_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.total_tokens,...Pn(e.cached)?{cachedReadTokens:e.cached}:{}}}c(tc,"normalizeGeminiUsage");var xn=class extends St{static{c(this,"GeminiCLIExecutor")}model;constructor(t){super({command:"gemini",baseArgs:["--output-format","stream-json","--approval-mode","yolo"],timeout:3e5,...t}),this.model=t?.model??"gemini-2.5-pro"}async checkInstalled(){return En("gemini")}buildArgs(t){let n=["-m",t.model??this.model];return t.sessionId?(n.push("-r",t.sessionId),n.push(t.prompt)):n.push("-p",t.prompt),[...n,...this.config.baseArgs]}parseLine(t){if(!t.startsWith("{"))return null;try{let n=JSON.parse(t);return this.convertEvent(n)}catch{return null}}convertEvent(t){let n=t.timestamp?Date.parse(t.timestamp):Date.now();switch(t.type){case"init":return{type:"session_start",timestamp:n,sessionId:t.session_id??"",model:t.model??this.model,raw:t};case"message":return{type:"message",timestamp:n,role:t.role,content:t.content??"",delta:t.delta,raw:t};case"tool_use":return{type:"tool_use",timestamp:n,toolId:t.tool_id??"",toolName:t.tool_name??"",parameters:t.parameters??{},raw:t};case"tool_result":return{type:"tool_result",timestamp:n,toolId:t.tool_id??"",status:t.status==="success"?"success":"error",output:t.output??"",raw:t};case"error":return{type:"error",timestamp:n,errorType:"error",message:t.message??"Unknown error",raw:t};case"result":return{type:"complete",timestamp:n,status:t.status==="success"?"success":"failed",usage:tc(t.stats),raw:t};default:return null}}};import{TransformStream as ki}from"node:stream/web";import{randomUUID as Lo}from"node:crypto";function en(e){let t=new ki,n=new ki,o=t.readable.getReader(),r=n.writable.getWriter(),i=new TextDecoder,s=new TextEncoder,a="",l=Lo(),d=new AbortController,u=new Map,m=new Map;(async()=>{try{for(;;){let{done:h,value:y}=await o.read();if(h)break;a+=i.decode(y,{stream:!0});let b=a.split(`
131
- `);a=b.pop()??"";for(let w of b)if(w.trim())try{let _=JSON.parse(w);g(_).catch(E=>{console.error("[PseudoAcpServer] Failed to handle request:",E)})}catch{console.error("[PseudoAcpServer] Failed to parse message:",w)}}}catch(h){console.error("[PseudoAcpServer] Stream read error:",h)}})();let p=c(async h=>{let y=JSON.stringify(h)+`
132
- `;await r.write(s.encode(y))},"sendMsg");async function g(h){if(h.method==="initialize")await p({jsonrpc:"2.0",id:h.id,result:{protocolVersion:h.params.protocolVersion,serverInfo:{name:"pseudo-acp-server",version:"1.0.0"},serverCapabilities:{}}});else if(h.method==="session/new"||h.method==="sessions/new")l=h.params?.sessionId??Lo(),await p({jsonrpc:"2.0",id:h.id,result:{sessionId:l}});else if(h.method==="session/prompt"||h.method==="chat/prompt"){let y=new AbortController,b=h.params.sessionId;u.set(b,y);let w=c(()=>y.abort(),"onGlobalAbort");d.signal.addEventListener("abort",w);let _=f(b,h.params.prompt,typeof h.params.model=="string"?h.params.model:void 0,typeof h.params.effort=="string"?h.params.effort:void 0,y.signal).finally(()=>{u.delete(b),d.signal.removeEventListener("abort",w)});try{let E=await _;await p({jsonrpc:"2.0",id:h.id,result:E.usage?{stopReason:E.stopReason,usage:E.usage}:{stopReason:E.stopReason}})}catch(E){await p({jsonrpc:"2.0",id:h.id,error:{code:-32e3,message:E instanceof Error?E.message:String(E)}})}}else if(h.method==="session/cancel"||h.method==="chat/cancel"){let y=u.get(h.params.sessionId);y&&y.abort(),h.id!==void 0&&await p({jsonrpc:"2.0",id:h.id,result:{}})}else h.id!==void 0&&await p({jsonrpc:"2.0",id:h.id,result:{}})}c(g,"handleRequest");let f=c(async(h,y,b,w,_)=>{let E=y.find(S=>S.type==="text")?.text??"",x,k=!1;try{let S=e.execute({prompt:E,model:b,reasoningEffort:w,sessionId:m.get(h),signal:_});for await(let R of S){if(R.type==="error")throw new Error(R.message);if(R.type==="complete"&&R.status==="failed")throw new Error("Provider CLI reported a failed completion");R.type==="session_start"&&R.sessionId&&m.set(h,R.sessionId);let M=v(R);M&&await p({jsonrpc:"2.0",method:"session/update",params:{sessionId:h,update:M}}),R.type==="complete"&&(k=!0,x=R.usage)}if(!_.aborted&&!k)throw new Error("Provider CLI ended without a completion event");return{stopReason:_.aborted?"cancelled":"end_turn",...x!==void 0?{usage:x}:{}}}catch(S){if(_.aborted||S instanceof Error&&S.name==="AbortError")return{stopReason:"cancelled"};throw S}},"executePrompt"),v=c(h=>{switch(h.type){case"message":if(h.role==="assistant"&&h.content)return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:h.content}};break;case"tool_use":return{sessionUpdate:"tool_call",title:h.toolName,arguments:h.parameters,status:"running",toolCallId:h.toolId||Lo()};case"tool_result":return{sessionUpdate:"tool_call_update",toolCallId:h.toolId,status:h.status};case"error":return{sessionUpdate:"agent_message_chunk",content:{type:"text",text:`
133
- [Error: ${h.message}]
134
- `}};case"complete":break}return null},"mapToAcpNotification");return{inputStream:n.readable,outputStream:t.writable,abort:c(()=>{d.abort(),u.clear(),m.clear(),o.cancel().catch(()=>{}),r.abort().catch(()=>{})},"abort"),releaseSession:c(h=>{m.delete(h)},"releaseSession"),recreate:c(()=>en(e),"recreate"),executor:e}}c(en,"createPseudoAcpServer");var Uo=Rt(),nc=Qt(),oc={transport:"cli-bridge",conversationSemantics:"last-user-message",mcpSupport:"none",contextFidelity:"lossy",toolCallingFidelity:"limited",sessionSupport:"stateless",longRunningSupport:"limited",multimodalSupport:"image-input",evidenceSupport:"limited"},Tn=class extends Xe{static{c(this,"KodaXGeminiCliProvider")}name="gemini-cli";supportsThinking=!1;config={apiKeyEnv:"GEMINI_CLI_API_KEY",model:Uo,models:nc.filter(t=>t!==Uo).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:1048576};acpClientOptions;constructor(){super();let t=new xn({model:Uo});this.acpClientOptions=en(t)}getCapabilityProfile(){return Ee(oc)}serializeImageBlockToPromptToken(t){return/\s/.test(t.path)?(console.warn(`[gemini-cli] Image path contains whitespace and cannot be safely passed via @<path> syntax \u2014 dropping image block. Path: ${JSON.stringify(t.path)}`),null):`@${t.path}`}};function An(e){return typeof e=="number"&&Number.isFinite(e)&&e>=0}c(An,"finiteNonNegative");function rc(e){if(!(!e||!An(e.input_tokens)||!An(e.output_tokens)))return{inputTokens:e.input_tokens,outputTokens:e.output_tokens,totalTokens:e.input_tokens+e.output_tokens,...An(e.cached_input_tokens)?{cachedReadTokens:e.cached_input_tokens}:{},...An(e.cache_write_input_tokens)?{cachedWriteTokens:e.cache_write_input_tokens}:{}}}c(rc,"normalizeCodexUsage");function ic(e){return!e||e==="auto"?[]:["--config",`model_reasoning_effort=${JSON.stringify(e)}`]}c(ic,"buildReasoningEffortArgs");var Rn=class extends St{static{c(this,"CodexCLIExecutor")}model;constructor(t){super({command:"codex",baseArgs:["exec","--json","--full-auto"],timeout:3e5,...t}),this.model=t?.model??"gpt-5.4"}async checkInstalled(){return En("codex")}buildArgs(t){this.model=t.model??this.model;let n=t.model?["-m",t.model]:[],o=ic(t.reasoningEffort);return t.sessionId?["exec","resume",t.sessionId,...n,...o,t.prompt,...this.config.baseArgs.filter(r=>r!=="exec")]:[...this.config.baseArgs,...n,...o,t.prompt]}parseLine(t){if(!t.startsWith("{"))return null;try{let n=JSON.parse(t);return this.convertEvent(n)}catch{return null}}convertEvent(t){let n=Date.now();switch(t.type){case"thread.started":return{type:"session_start",timestamp:n,sessionId:t.thread_id??"",model:this.model,raw:t};case"item.completed":return t.item?.type==="agent_message"?{type:"message",timestamp:n,role:"assistant",content:t.item.text??"",raw:t}:t.item?.type==="command_execution"?{type:"tool_use",timestamp:n,toolId:t.item.id,toolName:"Bash",parameters:{command:t.item.command},raw:t}:null;case"turn.completed":return{type:"complete",timestamp:n,status:"success",usage:rc(t.usage),raw:t};case"error":case"turn.failed":return{type:"error",timestamp:n,errorType:t.type,message:t.message??"Unknown error",raw:t};default:return null}}};var Bo=At(),sc=Yt(),Sn=class extends Xe{static{c(this,"KodaXCodexCliProvider")}name="codex-cli";supportsThinking=!1;config={apiKeyEnv:"CODEX_CLI_API_KEY",model:Bo,models:sc.filter(t=>t!==Bo).map(t=>({id:t,displayName:t})),supportsThinking:!1,reasoningCapability:"prompt-only",contextWindow:128e3};acpClientOptions;constructor(){super();let t=new Rn({model:Bo});this.acpClientOptions=en(t)}};import{existsSync as gc,readFileSync as yc}from"node:fs";import It from"node:path";import{fileURLToPath as bc}from"node:url";function Mt(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isSafeInteger(e)||e<=0)throw new Error(`${t}.outputTokenLimit must be a positive safe integer`);return e}}c(Mt,"optionalOutputTokenLimit");var Ci=["none","prompt-only","native-effort","native-budget","native-toggle","native-adaptive","unknown"],Ei=["google-thinking-level","bedrock-anthropic-effort","bedrock-openai-effort","bedrock-openai-nested-effort","openai-responses-effort","openai-chat-effort","codex-cli-config","anthropic-output-effort","anthropic-reasoning-effort","provider-budget","provider-toggle","prompt-only","none"],Pi=["anthropic-adaptive","anthropic-budget","provider-budget","provider-toggle","none"],xi=["zai-glm-5.3","zai-glm-5.2","zai-glm-toggle","deepseek-v4-flash-openai","deepseek-v4-pro-openai","deepseek-v4-openai","deepseek-v4-anthropic","deepseek-toggle","kimi-k3","kimi-k3.1","kimi-k2.7-code","kimi-hybrid-toggle","minimax-m3","minimax-m2-always","mimo-v2.5-toggle","qwen-hybrid-thinking","openai-chat-reasoning","openai-responses-reasoning","codex-cli-effort","claude-adaptive-xhigh","claude-adaptive-max","anthropic-budget","generic-thinking-toggle","none"],Ti=["max_tokens","max_completion_tokens"],Ai=["native","image-input-native","cli-bridge","image-input-cli-bridge"],Ri=["count-tokens","models-list","minimal-message","unsupported"];function De(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}c(De,"isPlainObject");function ct(e,t){if(typeof e!="string"||e.length===0)throw new Error(`provider-capabilities.json: ${t} must be a non-empty string`);return e}c(ct,"requireString");function at(e,t){if(e!==void 0)return ct(e,t)}c(at,"optionalString");function Ii(e,t){if(e!==void 0){if(typeof e!="string"||!Ti.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ti.join(", ")}, got ${JSON.stringify(e)}`);return e}}c(Ii,"optionalMaxOutputTokensField");function qe(e,t){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)||e<0)throw new Error(`provider-capabilities.json: ${t} must be a non-negative finite number`);return e}}c(qe,"optionalNumber");function ee(e,t){if(e!==void 0){if(typeof e!="boolean")throw new Error(`provider-capabilities.json: ${t} must be a boolean`);return e}}c(ee,"optionalBoolean");function Si(e,t){if(e!==void 0){if(!Array.isArray(e))throw new Error(`provider-capabilities.json: ${t} must be an array`);return e.map((n,o)=>ct(n,`${t}[${o}]`))}}c(Si,"optionalStringArray");function ac(e,t){if(e===void 0)return;if(!De(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=ct(r,`${t}.${o}`);return n}c(ac,"optionalStringMap");function cc(e,t){if(e!==void 0){if(typeof e!="string"||!xi.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${xi.join(", ")}, got ${JSON.stringify(e)}`);return e}}c(cc,"optionalReasoningPreset");function Fo(e,t){if(typeof e!="string"||!Ci.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ci.join(", ")}, got ${JSON.stringify(e)}`);return e}c(Fo,"requireReasoningCapability");function lc(e,t){if(typeof e!="string"||!Ei.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ei.join(", ")}, got ${JSON.stringify(e)}`);return e}c(lc,"requireEffortStrategy");function uc(e,t){if(e!==void 0){if(typeof e!="string"||!Pi.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Pi.join(", ")}, got ${JSON.stringify(e)}`);return e}}c(uc,"optionalThinkingStrategy");function Mi(e,t){if(e===void 0)return;if(!De(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=lc(e.effortStrategy,`${t}.effortStrategy`),o=cc(e.reasoningPreset,`${t}.reasoningPreset`),r=uc(e.thinkingStrategy,`${t}.thinkingStrategy`),i=at(e.defaultEffort,`${t}.defaultEffort`),s=ac(e.effortAliases,`${t}.effortAliases`),a=Si(e.disabledEfforts,`${t}.disabledEfforts`),l=Si(e.localRejectEfforts,`${t}.localRejectEfforts`),d=ee(e.allowCustomEffort,`${t}.allowCustomEffort`),u=ee(e.supportsReasoningEffort,`${t}.supportsReasoningEffort`),m=ee(e.supportsReasoningSummary,`${t}.supportsReasoningSummary`),p=ee(e.supportsEncryptedReasoningReplay,`${t}.supportsEncryptedReasoningReplay`),g=ee(e.supportsAdaptiveThinking,`${t}.supportsAdaptiveThinking`),f=ee(e.supportsManualThinkingBudget,`${t}.supportsManualThinkingBudget`),v=ee(e.supportsDisabledThinking,`${t}.supportsDisabledThinking`),h=ee(e.requiresEffortBetaHeader,`${t}.requiresEffortBetaHeader`),y={effortStrategy:n};if(o!==void 0&&(y.reasoningPreset=o),r!==void 0&&(y.thinkingStrategy=r),i!==void 0&&(y.defaultEffort=i),s!==void 0&&(y.effortAliases=s),a!==void 0&&(y.disabledEfforts=a),l!==void 0&&(y.localRejectEfforts=l),e.supportedEfforts!==void 0){if(!Array.isArray(e.supportedEfforts))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts must be an array`);y.supportedEfforts=e.supportedEfforts.map((b,w)=>{if(!De(b))throw new Error(`provider-capabilities.json: ${t}.supportedEfforts[${w}] must be an object`);return{value:ct(b.value,`${t}.supportedEfforts[${w}].value`),...at(b.description,`${t}.supportedEfforts[${w}].description`)!==void 0?{description:at(b.description,`${t}.supportedEfforts[${w}].description`)}:{},...ee(b.isDefault,`${t}.supportedEfforts[${w}].isDefault`)!==void 0?{isDefault:ee(b.isDefault,`${t}.supportedEfforts[${w}].isDefault`)}:{},...ee(b.isUserVisible,`${t}.supportedEfforts[${w}].isUserVisible`)!==void 0?{isUserVisible:ee(b.isUserVisible,`${t}.supportedEfforts[${w}].isUserVisible`)}:{}}})}if(e.budgetByEffort!==void 0){if(!De(e.budgetByEffort))throw new Error(`provider-capabilities.json: ${t}.budgetByEffort must be an object`);let b={};for(let[w,_]of Object.entries(e.budgetByEffort))b[w]=qe(_,`${t}.budgetByEffort.${w}`)??0;y.budgetByEffort=b}d!==void 0&&(y.allowCustomEffort=d),u!==void 0&&(y.supportsReasoningEffort=u),m!==void 0&&(y.supportsReasoningSummary=m),p!==void 0&&(y.supportsEncryptedReasoningReplay=p),g!==void 0&&(y.supportsAdaptiveThinking=g),f!==void 0&&(y.supportsManualThinkingBudget=f),v!==void 0&&(y.supportsDisabledThinking=v),h!==void 0&&(y.requiresEffortBetaHeader=h);for(let b of["supportsThinkingDisplay","supportsThinkingBlockBinding"]){let w=ee(e[b],`${t}.${b}`);w!==void 0&&Object.assign(y,{[b]:w})}return y}c(Mi,"validateReasoningProfile");function Oi(e,t){let n=e.reasoningProfile,o=e.reasoningCapabilityV2;if(n!==void 0&&o!==void 0)throw new Error(`provider-capabilities.json: ${t} must not define both reasoningProfile and deprecated reasoningCapabilityV2`);return n!==void 0?Mi(n,`${t}.reasoningProfile`):Mi(o,`${t}.reasoningCapabilityV2`)}c(Oi,"validateReasoningProfileField");function dc(e,t){if(typeof e!="string"||!Ai.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ai.join(", ")}, got ${JSON.stringify(e)}`);return e}c(dc,"requireProfileName");function pc(e,t){if(typeof e!="string"||!Ri.includes(e))throw new Error(`provider-capabilities.json: ${t} must be one of ${Ri.join(", ")}, got ${JSON.stringify(e)}`);return e}c(pc,"requireVerifyStrategy");function Di(e,t){try{Ye(e.toolCapabilities),Ut(e.cacheCapabilities)}catch(n){throw new Error(`${t}: ${n instanceof Error?n.message:"Invalid constraint metadata."}`)}return{...e.toolCapabilities?{toolCapabilities:structuredClone(e.toolCapabilities)}:{},...e.cacheCapabilities?{cacheCapabilities:structuredClone(e.cacheCapabilities)}:{}}}c(Di,"constraintMetadata");function fc(e,t){if(!De(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n=ct(e.id,`${t}.id`),o=at(e.wireModel,`${t}.wireModel`),r=at(e.displayName,`${t}.displayName`),i=at(e.multimodalSupport,`${t}.multimodalSupport`);if(i!==void 0&&!["none","image-input","full"].includes(i))throw new Error(`provider-capabilities.json: ${t}.multimodalSupport must be none, image-input or full`);let s=qe(e.contextWindow,`${t}.contextWindow`),a=qe(e.maxOutputTokens,`${t}.maxOutputTokens`),l=Ii(e.maxOutputTokensField,`${t}.maxOutputTokensField`),d=Mt(e.outputTokenLimit,t),u=qe(e.thinkingBudgetCap,`${t}.thinkingBudgetCap`),m=ee(e.replayReasoningContent,`${t}.replayReasoningContent`),p=ee(e.strictThinkingSignature,`${t}.strictThinkingSignature`),g=qe(e.streamMaxDurationMs,`${t}.streamMaxDurationMs`),f=e.reasoningCapability===void 0?void 0:Fo(e.reasoningCapability,`${t}.reasoningCapability`),v=Oi(e,t),h={id:n,...Di(e,t)};for(let[y,b]of Object.entries({wireModel:o,displayName:r,multimodalSupport:i,contextWindow:s,maxOutputTokens:a,outputTokenLimit:d,maxOutputTokensField:l,thinkingBudgetCap:u,reasoningCapability:f,reasoningProfile:v,replayReasoningContent:m,strictThinkingSignature:p,streamMaxDurationMs:g}))b!==void 0&&Object.assign(h,{[y]:b});return h}c(fc,"validateModelDescriptor");function mc(e,t){if(e===void 0)return;if(!De(e))throw new Error(`provider-capabilities.json: ${t} must be an object`);let n={};for(let[o,r]of Object.entries(e))n[o]=Fo(r,`${t}.${o}`);return n}c(mc,"validateModelReasoningCapabilities");function hc(e,t){if(!De(e))throw new Error(`provider-capabilities.json: providers.${t} must be an object`);let n=ee(e.cliBridge,`providers.${t}.cliBridge`),o=ct(e.apiKeyEnv,`providers.${t}.apiKeyEnv`),r=Fo(e.reasoningCapability,`providers.${t}.reasoningCapability`),i=Oi(e,`providers.${t}`),s=dc(e.capabilityProfile,`providers.${t}.capabilityProfile`),a=pc(e.verifyStrategy,`providers.${t}.verifyStrategy`);if(n&&a!=="unsupported")throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but verifyStrategy="${a}" \u2014 must be "unsupported" (CLI binary owns credentials)`);let l=qe(e.contextWindow,`providers.${t}.contextWindow`),d=qe(e.maxOutputTokens,`providers.${t}.maxOutputTokens`),u=Ii(e.maxOutputTokensField,`providers.${t}.maxOutputTokensField`),m=Mt(e.outputTokenLimit,`providers.${t}`),p=qe(e.thinkingBudgetCap,`providers.${t}.thinkingBudgetCap`),g=ee(e.supportsThinking,`providers.${t}.supportsThinking`),f=mc(e.modelReasoningCapabilities,`providers.${t}.modelReasoningCapabilities`),v=at(e.model,`providers.${t}.model`);if(n&&(v!==void 0||e.models!==void 0))throw new Error(`provider-capabilities.json: providers.${t} is a cliBridge entry but defines model/models \u2014 must be omitted (filled at load time)`);if(!n&&v===void 0)throw new Error(`provider-capabilities.json: providers.${t}.model is required (only cliBridge entries may omit)`);let h;if(e.models!==void 0){if(!Array.isArray(e.models))throw new Error(`provider-capabilities.json: providers.${t}.models must be an array`);h=e.models.map((w,_)=>fc(w,`providers.${t}.models[${_}]`));let b=new Set([...v===void 0?[]:[v],...h.map(w=>w.id)]);for(let[w,_]of h.entries())if(_.wireModel!==void 0&&!b.has(_.wireModel))throw new Error(`provider-capabilities.json: providers.${t}.models[${w}].wireModel must reference a declared model, got ${JSON.stringify(_.wireModel)}`)}let y={...Di(e,`providers.${t}`),apiKeyEnv:o,reasoningCapability:r,capabilityProfile:s,verifyStrategy:a};for(let[b,w]of Object.entries({reasoningProfile:i,model:v,models:h,contextWindow:l,maxOutputTokens:d,outputTokenLimit:m,maxOutputTokensField:u,thinkingBudgetCap:p,supportsThinking:g,modelReasoningCapabilities:f}))w!==void 0&&Object.assign(y,{[b]:w});return n&&(y.cliBridge=!0),y}c(hc,"validateProviderEntry");function ji(e){if(!De(e))throw new Error("provider-capabilities.json: root must be an object");if(e.version!==1)throw new Error(`provider-capabilities.json: version must be 1, got ${JSON.stringify(e.version)}`);let t=ct(e.updatedAt,"updatedAt");if(!De(e.providers))throw new Error("provider-capabilities.json: providers must be an object");let n={};for(let[o,r]of Object.entries(e.providers))n[o]=hc(r,o);return{version:1,updatedAt:t,providers:n}}c(ji,"validateProviderCapabilitiesJson");var vc=Object.freeze({native:Ze,"image-input-native":Nr,"cli-bridge":mn,"image-input-cli-bridge":$r}),Mn=null;function wc(){if(process.env.KODAX_BUNDLED==="true")return It.join(It.dirname(process.execPath),"provider-capabilities.json");let e=It.dirname(bc(import.meta.url)),t=[It.join(e,"provider-capabilities.json"),It.join(It.dirname(e),"provider-capabilities.json")];for(let n of t)if(gc(n))return n;return t[0]}c(wc,"resolveJsonPath");function Ni(e){e.toolCapabilities?.grammar&&Object.freeze(e.toolCapabilities.grammar),e.toolCapabilities&&Object.freeze(e.toolCapabilities),e.cacheCapabilities?.locations&&Object.freeze(e.cacheCapabilities.locations),e.cacheCapabilities&&Object.freeze(e.cacheCapabilities)}c(Ni,"freezeConstraints");function _c(e){if(Ni(e),e.models){for(let t of e.models)t.reasoningProfile&&$i(t.reasoningProfile);for(let t of e.models)Ni(t),Object.freeze(t);Object.freeze(e.models)}return e.reasoningProfile&&$i(e.reasoningProfile),e.modelReasoningCapabilities&&Object.freeze(e.modelReasoningCapabilities),Object.freeze(e)}c(_c,"deepFreezeSnapshot");function $i(e){if(e.supportedEfforts){for(let t of e.supportedEfforts)Object.freeze(t);Object.freeze(e.supportedEfforts)}e.budgetByEffort&&Object.freeze(e.budgetByEffort),e.effortAliases&&Object.freeze(e.effortAliases),e.disabledEfforts&&Object.freeze(e.disabledEfforts),e.localRejectEfforts&&Object.freeze(e.localRejectEfforts),Object.freeze(e)}c($i,"freezeReasoningProfile");function kc(e){if(e==="gemini-cli"){let t=Rt();return{model:t,models:Qt().filter(n=>n!==t).map(n=>({id:n}))}}if(e==="codex-cli"){let t=At();return{model:t,models:Yt().filter(n=>n!==t).map(n=>({id:n}))}}throw new Error(`provider-capabilities loader: unknown cliBridge provider '${e}'`)}c(kc,"resolveCliBridgeModels");function Cc(e,t){let n=vc[t.capabilityProfile];if(!n)throw new Error(`provider-capabilities loader: unknown capabilityProfile '${t.capabilityProfile}' for provider '${e}'`);let o={...t.cliBridge?kc(e):{model:t.model},apiKeyEnv:t.apiKeyEnv,reasoningCapability:t.reasoningCapability,capabilityProfile:n,verifyStrategy:t.verifyStrategy};for(let r of["reasoningProfile","supportsThinking","toolCapabilities","cacheCapabilities"])t[r]!==void 0&&Object.assign(o,{[r]:t[r]});if(!t.cliBridge)for(let r of["models","modelReasoningCapabilities","contextWindow","maxOutputTokens","outputTokenLimit","maxOutputTokensField","thinkingBudgetCap"])t[r]!==void 0&&Object.assign(o,{[r]:t[r]});return o}c(Cc,"buildSnapshot");function Ki(){if(Mn)return Mn;let e=wc(),t;try{let r=yc(e,"utf8");t=JSON.parse(r)}catch(r){let i=r instanceof Error?r.message:String(r);throw new Error(`provider-capabilities loader: failed to read ${e}: ${i}`)}let n=ji(t),o={};for(let[r,i]of Object.entries(n.providers))o[r]=_c(Cc(r,i));return Mn=Object.freeze(o),Mn}c(Ki,"getProviderSnapshots");var re=Ki();function fe(e,t={}){let n=re[e];return{apiKeyEnv:n.apiKeyEnv,toolCapabilities:n.toolCapabilities,cacheCapabilities:n.cacheCapabilities,model:n.model,reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,models:n.models,contextWindow:n.contextWindow,maxOutputTokens:n.maxOutputTokens,outputTokenLimit:n.outputTokenLimit,maxOutputTokensField:n.maxOutputTokensField,thinkingBudgetCap:n.thinkingBudgetCap,supportsThinking:n.supportsThinking??!1,capabilityProfile:n.capabilityProfile,verifyStrategy:n.verifyStrategy,...t}}c(fe,"buildProviderConfig");var zo=class extends oe{static{c(this,"AnthropicProvider")}name="anthropic";config=fe("anthropic",{strictThinkingSignature:!0,userAgentMode:"sdk"})},Wo=class extends oe{static{c(this,"ZhipuCodingProvider")}name="zhipu-coding";config=fe("zhipu-coding",{baseUrl:"https://open.bigmodel.cn/api/anthropic",streamMaxDurationMs:3e5})},Ho=class extends oe{static{c(this,"ZaiCodingProvider")}name="zai-coding";config=fe("zai-coding",{baseUrl:"https://api.z.ai/api/anthropic",streamMaxDurationMs:3e5})},Xo=class extends oe{static{c(this,"KimiCodeProvider")}name="kimi-code";config=fe("kimi-code",{baseUrl:"https://api.kimi.com/coding/",promptCacheAffinity:!0})},qo=class extends oe{static{c(this,"MiniMaxCodingProvider")}name="minimax-coding";config=fe("minimax-coding",{baseUrl:"https://api.minimax.cn/anthropic"})},Go=class extends ne{static{c(this,"MimoCodingProvider")}name="mimo-coding";config=fe("mimo-coding",{baseUrl:"https://token-plan-cn.xiaomimimo.com/v1",replayReasoningContent:!0})},Vo=class extends oe{static{c(this,"MimoProvider")}name="mimo";config=fe("mimo",{baseUrl:"https://api.xiaomimimo.com/anthropic"})},Jo=class extends oe{static{c(this,"ArkCodingProvider")}name="ark-coding";config=fe("ark-coding",{baseUrl:"https://ark.cn-beijing.volces.com/api/coding"})},Yo=class extends ne{static{c(this,"OpenAIProvider")}name="openai";config=fe("openai",{promptCacheAffinity:!0})},Qo=class extends oe{static{c(this,"DeepSeekProvider")}name="deepseek";config=fe("deepseek",{baseUrl:"https://api.deepseek.com/anthropic"})},Zo=class extends ne{static{c(this,"KimiProvider")}name="kimi";config=fe("kimi",{baseUrl:"https://api.moonshot.cn/v1",promptCacheAffinity:!0,replayReasoningContent:!0})},er=class extends ne{static{c(this,"QwenProvider")}name="qwen";config=fe("qwen",{baseUrl:"https://dashscope.aliyuncs.com/compatible-mode/v1",replayReasoningContent:!0})},tr=class extends oe{static{c(this,"QwenTokenPlanProvider")}name="qwen-token-plan";config=fe("qwen-token-plan",{baseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/apps/anthropic"})},nr=class extends ne{static{c(this,"ZhipuProvider")}name="zhipu";config=fe("zhipu",{baseUrl:"https://open.bigmodel.cn/api/paas/v4",replayReasoningContent:!0})},he={anthropic:c(()=>new zo,"anthropic"),openai:c(()=>new Yo,"openai"),deepseek:c(()=>new Qo,"deepseek"),kimi:c(()=>new Zo,"kimi"),"kimi-code":c(()=>new Xo,"kimi-code"),qwen:c(()=>new er,"qwen"),"qwen-token-plan":c(()=>new tr,"qwen-token-plan"),zhipu:c(()=>new nr,"zhipu"),"zhipu-coding":c(()=>new Wo,"zhipu-coding"),"zai-coding":c(()=>new Ho,"zai-coding"),"minimax-coding":c(()=>new qo,"minimax-coding"),"mimo-coding":c(()=>new Go,"mimo-coding"),mimo:c(()=>new Vo,"mimo"),"ark-coding":c(()=>new Jo,"ark-coding"),"gemini-cli":c(()=>new Tn,"gemini-cli"),"codex-cli":c(()=>new Sn,"codex-cli")},or=process.env.KODAX_PROVIDER??"zhipu-coding",Li=new Map;function Ec(e){if(ae(e))return re[e].apiKeyEnv}c(Ec,"resolveApiKeyEnvForProvider");function Bi(e){let t=e??or,n=he[t];if(!n)throw new L(`Unknown provider: ${t}. Available: ${Object.keys(he).join(", ")}`,t,{failureCode:"provider_not_registered",stage:"catalog"});if(Se())return n();let o=Ec(t),r=zt(t,o?process.env[o]:void 0),i=Li.get(t);if(i&&i.apiKey===r)return i.instance;let s=n();return Li.set(t,{apiKey:r,instance:s}),s}c(Bi,"getProvider");function Fi(e){if(!ae(e))return!1;let t=Qe(e);return t!==void 0?t:zt(e,process.env[re[e].apiKeyEnv])!==void 0}c(Fi,"isProviderConfigured");function zi(e){return ae(e)?re[e].model:null}c(zi,"getProviderModel");function Wi(e,t){if(!ae(e))return"unknown";let n=re[e],o=t??n.model;return n.models?.find(i=>i.id===o)?.reasoningCapability??n.modelReasoningCapabilities?.[o]??n.reasoningCapability}c(Wi,"getProviderConfiguredReasoningCapability");function Hi(e,t){if(!ae(e))return null;let n=Ee(re[e].capabilityProfile);return{...n,multimodalSupport:tn(e,t??re[e].model)?.multimodalSupport??n.multimodalSupport}}c(Hi,"getProviderConfiguredCapabilityProfile");function Xi(){let e=[];for(let t of Object.keys(he)){let n=re[t];e.push({name:t,model:n.model,models:rr(t),configured:!!process.env[n.apiKeyEnv],reasoningCapability:n.reasoningCapability,reasoningProfile:n.reasoningProfile,capabilityProfile:Ee(n.capabilityProfile)})}return e}c(Xi,"getProviderList");function rr(e){return Ot(e).map(t=>t.id)}c(rr,"getProviderModels");function ae(e){return e in he}c(ae,"isProviderName");function qi(e){return{id:e.model}}c(qi,"makeDefaultDescriptor");function Gi(e,t){if(!t.wireModel)return t;let n=e.models?.find(o=>o.id===t.wireModel);return n?{...n,...t}:t}c(Gi,"resolveWireModelDescriptor");function In(e,t,n){let o=n.id===t.model,r=n.toolCapabilities??t.toolCapabilities,i=n.cacheCapabilities??t.cacheCapabilities;return{...r?{toolCapabilities:structuredClone(r)}:{},...i?{cacheCapabilities:structuredClone(i)}:{},multimodalSupport:n.multimodalSupport??t.capabilityProfile.multimodalSupport,provider:e,model:n.id,displayName:n.displayName??n.id,supportsThinking:t.supportsThinking??!1,reasoningCapability:n.reasoningCapability??t.reasoningCapability,reasoningProfile:n.reasoningProfile??t.reasoningProfile,contextWindow:n.contextWindow??t.contextWindow,maxOutputTokens:n.maxOutputTokens??t.maxOutputTokens,outputTokenLimit:n.outputTokenLimit??t.outputTokenLimit,thinkingBudgetCap:n.thinkingBudgetCap??t.thinkingBudgetCap,isDefault:o}}c(In,"effectiveCapabilities");function Ot(e){let t=re[e];if(!t)return[];let n=t.models??[],o=n.find(i=>i.id===t.model),r=n.filter(i=>i.id!==t.model);return[o??qi(t),...r].map(i=>Gi(t,i))}c(Ot,"getProviderModelDescriptors");function tn(e,t){let n=re[e];if(!n)return;let o=n.models?.find(r=>r.id===t);return o?In(e,n,Gi(n,o)):t===n.model?In(e,n,qi(n)):In(e,n,{id:t})}c(tn,"getModelCapabilities");function On(){let e=[];for(let t of Object.keys(he)){let n=re[t];for(let o of Ot(t))e.push(In(t,n,o))}return e}c(On,"listBuiltinModelCapabilities");var Vi={"openai-chatgpt":"https://api.openai.com/v1","openai-codex":"https://chatgpt.com/backend-api/codex","github-copilot":"https://api.individual.githubcopilot.com",anthropic:"https://api.anthropic.com",openrouter:"https://openrouter.ai/api/v1","kimi-coding":"https://api.kimi.com/coding/v1",meta:"https://api.meta.ai/v1",xai:"https://api.x.ai/v1",radius:"https://radius.pi.dev"};function Dn(e){let t=e.service==="anthropic"||e.api==="anthropic-messages"?"anthropic":e.service==="radius"?"pi-messages":"openai",n=t==="openai"?e.api??(e.service==="openrouter"||e.service==="kimi-coding"?"chat-completions":"responses"):void 0;return{name:e.name,model:e.model,protocol:t,...n?{api:n}:{},oauth:e.service,...t==="anthropic"?{authentication:"bearer"}:{},baseUrl:e.baseUrl??Vi[e.service],apiKeyEnv:"KODAX_OAUTH_BROKER_ONLY",verifyStrategy:"minimal-message"}}c(Dn,"createOAuthProviderConfig");function Ji(e){if(!e.oauth)return;if(!Object.hasOwn(Vi,e.oauth))throw new Error("Unknown OAuth service.");let t=Dn({service:e.oauth,name:e.name,model:e.model,...e.oauth==="github-copilot"?{api:e.protocol==="anthropic"?"anthropic-messages":e.api}:{}}),n=new URL(e.baseUrl),o=e.oauth==="radius";if(n.protocol!=="https:"||n.username||n.password||n.search||n.hash||e.protocol!==t.protocol||e.api!==t.api||!o&&e.baseUrl.replace(/\/$/,"")!==t.baseUrl)throw new Error("OAuth connection requires its matching native protocol and endpoint.");if(e.protocol==="anthropic"&&e.authentication!=="bearer")throw new Error("Subscription Messages requires bearer authentication.")}c(Ji,"validateOAuthProviderConfig");import{createHash as Pc,randomUUID as xc}from"node:crypto";var jn=class extends Ie{static{c(this,"KodaXOAuthResponsesProvider")}name;config;service;constructor(t,n,o){super(),this.name=t,this.config=n,this.service=o}isConfigured(){return Qe(this.name)===!0}getGenerationSource(t){let n=super.getGenerationSource(t);return{...n,credentialScope:n.credentialScope&&n.credentialScope!=="unavailable"?Pc("sha256").update(JSON.stringify([this.service,n.credentialScope])).digest("hex"):"unavailable"}}getApiKey(){let t=Ft(this.name);if(!t)throw new Error("OAuth provider requires a scoped credential broker.");return t}requiresResponseStream(){return this.service!=="github-copilot"}supportsNonStreamingFallback(){return!this.requiresResponseStream()}prepareResponseRequest(t){if(this.service==="openai-codex"){let{max_output_tokens:n,...o}=t;return{...o,instructions:t.instructions||"You are a helpful assistant."}}return this.service!=="openai-chatgpt"?t:{...t,tools:t.tools?.length?[{type:"namespace",name:"kodax",description:"Tools available for this request",tools:t.tools.filter(n=>n.type==="function"||n.type==="custom")}]:void 0,input:Array.isArray(t.input)?t.input.map(n=>n.type==="function_call"||n.type==="custom_tool_call"?{...n,namespace:"kodax"}:n):t.input}}acceptsResponseToolNamespace(t){return this.service==="openai-chatgpt"?t==="kodax":t===void 0}responseSocketHeaders(t,n){let o=new Headers(super.responseSocketHeaders(t,n));if(this.service==="openai-codex"){let r=xc();o.set("openai-beta","responses_websockets=2026-02-06"),o.set("x-client-request-id",r),o.set("session-id",n?.sessionId??n?.promptCacheKey??r)}return Object.fromEntries(o)}responseRequestHeaders(t){if(this.service==="openai-codex"){let i;try{let s=JSON.parse(Buffer.from(this.getApiKey().split(".")[1]??"","base64url").toString());if(s&&typeof s=="object"){let a=s["https://api.openai.com/auth"];a&&typeof a=="object"&&(i=a.chatgpt_account_id)}}catch{throw new Error("Codex OAuth token has no valid account routing claim.")}if(typeof i!="string"||!i||/[\r\n]/.test(i))throw new Error("Codex OAuth token has no valid account routing claim.");return{"chatgpt-account-id":i}}if(this.service!=="github-copilot")return;let n=t.at(-1),o=n?.role==="user"&&(typeof n.content=="string"||n.content.some(i=>i.type!=="tool_result"))?"user":"agent",r=t.some(i=>Array.isArray(i.content)&&i.content.some(s=>s.type==="image"||s.type==="tool_result"&&Array.isArray(s.content)&&s.content.some(a=>a.type==="image")));return{"X-Initiator":o,"Openai-Intent":"conversation-edits",...r?{"Copilot-Vision-Request":"true"}:{}}}verifyCredential(t){return this.config.verifyStrategy==="unsupported"?super.verifyCredential(t):Pe({strategy:"minimal-message",providerName:this.name,...t,runners:[{strategy:"minimal-message",approxTokensSpent:22,run:c(n=>ue(this,"utility",n,async o=>{await this.complete([{role:"user",content:"hi"}],[],"",!1,{singleAttempt:!0,maxOutputTokensOverride:16},o)}),"run")}]})}};var Nn=class extends Ie{static{c(this,"KodaXAzureResponsesProvider")}name;config;getCredentialCloudConnection(){return{service:"azure"}}constructor(t,n){super(),this.name=t,this.config=n}isConfigured(){return vo(this.name)}getGenerationSource(t){return{...super.getGenerationSource(t),credentialScope:zr(this.name)}}getApiKey(){let t=Wt(this.name);if(t.type==="aws")throw new Error("Azure requires an API key or Entra bearer credential.");return t.type==="api-key"?t.key:t.token}buildClient(){return Yi(this.name,this.config)}responseSocketHeaders(t,n){let o=Wt(this.name);if(o.type==="aws")throw new Error("Azure requires a native API key or Entra bearer.");return Object.fromEntries(dn(o.type==="api-key"?{"api-key":o.key}:{authorization:`Bearer ${o.token}`}))}};async function Yi(e,t){let n=Wt(e);if(n.type==="aws")throw new Error("Azure requires an API key or Entra bearer credential.");let{default:o}=await import("openai");return new o({apiKey:n.type==="api-key"?n.key:n.token,baseURL:t.baseUrl,organization:null,project:null,logLevel:"off",defaultHeaders:n.type==="api-key"?{Authorization:null,"api-key":n.key}:{Authorization:`Bearer ${n.token}`,"api-key":null},fetch:ht((r,i)=>{let s=new Headers({"content-type":"application/json",accept:"application/json","user-agent":"KodaX"});return n.type==="api-key"?s.set("api-key",n.key):s.set("authorization",`Bearer ${n.token}`),Ke(globalThis.fetch)(r,{...i,headers:s})})})}c(Yi,"buildAzureClient");var $n=class extends ne{static{c(this,"KodaXAzureCompletionsProvider")}name;config;getCredentialCloudConnection(){return{service:"azure"}}constructor(t,n){super(),this.name=t,this.config=n}isConfigured(){return vo(this.name)}getApiKey(){let t=Wt(this.name);if(t.type==="aws")throw new Error("Azure requires an API key or Entra bearer credential.");return t.type==="api-key"?t.key:t.token}buildClient(){return Yi(this.name,this.config)}};var Kn=class extends Wr{static{c(this,"KodaXLazyNativeProvider")}protocol;constructor(t,n,o){super(t,n,o==="mistral"?"mistral-chat":"pi-messages"),this.protocol=o}supportsNonStreamingFallback(){return this.protocol==="mistral"}getCacheCapabilities(t){return super.getCacheCapabilities(t)??(this.protocol==="pi-messages"?{dialect:"pi"}:void 0)}usesPromptCacheAffinity(){return this.protocol==="mistral"&&this.config.promptCacheAffinity===!0}async invoke(t){return(this.protocol==="mistral"?new(await import("./mistral-native-JXPIDDYZ.js")).KodaXMistralProvider(this.name,this.config):new(await import("./pi-messages-5LLOZH57.js")).KodaXPiMessagesProvider(this.name,this.config)).invokeNative(t)}},Ln=class extends Hr{static{c(this,"KodaXLazyCloudProvider")}constructor(t,n,o){super(t,n,o)}async invoke(t){return(this.cloud.service==="bedrock"?new(await import("./bedrock-native-Z5VNWF5U.js")).KodaXBedrockProvider(this.name,this.config,this.cloud):new(await import("./google-native-45I4S26I.js")).KodaXGoogleProvider(this.name,this.config,this.cloud)).invokeNative(t)}};var Tc=new Set(["compat","sdk"]),Ac=new Set(["max_tokens","max_completion_tokens"]),Rc=new Set(["count-tokens","models-list","minimal-message","unsupported"]);function ir(e){return e.reasoningProfile??e.reasoningCapabilityV2}c(ir,"getConfiguredReasoningProfile");function Sc(e){return e==="anthropic"?"count-tokens":e==="openai"?"models-list":"minimal-message"}c(Sc,"defaultVerifyStrategyForProtocol");function Qi(e,t,n){if(t!==void 0){if(typeof t!="string"||!Ac.has(t))throw new Error(`Custom provider "${e.name}": ${n} must be "max_tokens" or "max_completion_tokens".`);if(e.protocol!=="openai")throw new Error(`Custom provider "${e.name}": ${n} is only valid for protocol="openai".`)}}c(Qi,"validateMaxOutputTokensField");function Un(e){if(e)return e.effortStrategy==="none"?"none":e.effortStrategy==="prompt-only"?"prompt-only":e.thinkingStrategy==="anthropic-adaptive"?"native-adaptive":e.effortStrategy==="provider-budget"?"native-budget":e.effortStrategy==="provider-toggle"?"native-toggle":"native-effort"}c(Un,"legacyCapabilityFromReasoningProfile");function Mc(e,t,n){if(n===!1)return"none";if(!(e==="google"||e==="bedrock"))switch(t){case"none":case"prompt-only":return"none";case"native-toggle":return e==="anthropic"?"generic-thinking-toggle":void 0;case"native-budget":return e==="anthropic"?"anthropic-budget":"qwen-hybrid-thinking";case"native-effort":return e==="anthropic"?"claude-adaptive-max":"openai-chat-reasoning";case"native-adaptive":return e==="anthropic"?"claude-adaptive-max":void 0;default:return n!==!0?void 0:e==="anthropic"?"generic-thinking-toggle":void 0}}c(Mc,"legacyReasoningPresetForProtocol");function Zi(e){return e==="none"||typeof e=="object"&&e!==null&&Array.isArray(e.efforts)}c(Zi,"isSimpleReasoning");function Ic(e,t){if(e==="none")return hn("none");let n=c(a=>a==="off"?"none":a,"toWire"),o=e.efforts.map(n),r=e.default?n(e.default):void 0,i=o.includes("none"),s=o.map(a=>a===r?{value:a,isDefault:!0}:{value:a});return{effortStrategy:t==="google"?"google-thinking-level":t==="bedrock"?"bedrock-anthropic-effort":t==="anthropic"?"anthropic-reasoning-effort":"openai-chat-effort",...t==="anthropic"?{thinkingStrategy:"provider-toggle"}:{},...r!==void 0?{defaultEffort:r}:{},supportedEfforts:s,...i?{disabledEfforts:["none"],supportsDisabledThinking:!0}:{localRejectEfforts:["none"],supportsDisabledThinking:!1},supportsReasoningEffort:!0}}c(Ic,"buildReasoningProfileFromSimple");function es(e,t,n,o){let r=Zi(n)?n:void 0,i=n!==void 0&&!Zi(n)?n:void 0;if(o?.supportsThinking===!1)return hn("none");if(e)return{...e,...i??{}};if(r!==void 0)return Ic(r,o?.protocol??"openai");let s=t??(o?Mc(o.protocol,o.reasoningCapability,o.supportsThinking):void 0);return s?hn(s,i):void 0}c(es,"resolveCustomReasoningProfile");function ts(e,t,n){if(e!=="deepseek-v4-openai")return e;let o=n??t;return o==="deepseek-v4-flash"||o==="deepseek-flash"?"deepseek-v4-flash-openai":o==="deepseek-v4-pro"?"deepseek-v4-pro-openai":e}c(ts,"migrateLegacyDeepSeekPreset");function ns(e,t){return t==="responses"&&e?.effortStrategy==="openai-chat-effort"?{...e,effortStrategy:"openai-responses-effort"}:e}c(ns,"selectReasoningApi");function Bn(e){let t=es(ir(e),ts(e.reasoningPreset,e.model),e.reasoning,{protocol:e.protocol,reasoningCapability:e.reasoningCapability,supportsThinking:e.supportsThinking})??(e.protocol==="openai"?{effortStrategy:"openai-chat-effort",allowCustomEffort:!0}:void 0);return ns(t,e.api)}c(Bn,"resolveCustomProviderReasoningProfile");function lr(e,t,n,o,r){let i=o==="deepseek-v4-openai"&&ir(e)===void 0&&e.reasoningPreset===void 0&&e.reasoning===void 0&&e.reasoningCapability===void 0,s=es(ir(e),ts(e.reasoningPreset??(i?o:void 0),e.id,e.wireModel),e.reasoning,{protocol:t,reasoningCapability:e.reasoningCapability,supportsThinking:n});return ns(s,r)}c(lr,"resolveCustomModelReasoningProfile");function Oc(e,t,n,o,r){let i=typeof e=="string"?{id:e}:e,s=lr(i,t,n,o,r),a=n===!1&&i.reasoningCapability!==void 0?{...i,reasoningCapability:"none"}:i;return s?{...a,reasoningProfile:s}:a}c(Oc,"customModelDescriptorToFull");function lt(e){if(e.oauthRegistration!==void 0&&(!e.oauth||typeof e.oauthRegistration!="string"||!/^[A-Za-z0-9_-]{1,128}$/.test(e.oauthRegistration)))throw new Error("Invalid OAuth secure-store registration reference.");Ye(e.toolCapabilities),Ut(e.cacheCapabilities);let t=e.protocol==="anthropic"?["anthropic"]:e.protocol==="bedrock"?["bedrock"]:e.protocol==="pi-messages"?["pi"]:e.protocol==="openai"?e.api==="responses"?["openai-options","openai-retention","affinity"]:["openai-retention","affinity"]:[];if([e.cacheCapabilities,...(e.models??[]).flatMap(r=>typeof r=="string"?[]:[r.cacheCapabilities])].some(r=>r&&!t.includes(r.dialect)))throw new Error("Declared cache dialect does not match the native API.");for(let r of e.models??[])typeof r!="string"&&Ut(r.cacheCapabilities);for(let r of e.models??[])typeof r!="string"&&Ye(r.toolCapabilities);for(let r of e.models??[])if(typeof r!="string"&&r.multimodalSupport!==void 0&&!["none","image-input","full"].includes(r.multimodalSupport))throw new Error("Invalid model multimodalSupport.");if(!(e.protocol==="pi-messages"||e.protocol==="openai"&&e.api==="responses")&&(e.toolCapabilities?.grammar?.length||e.models?.some(r=>typeof r!="string"&&r.toolCapabilities?.grammar?.length)))throw new Error("Grammar tools require Responses or Pi Messages.");if(!e.name||!e.baseUrl||!e.apiKeyEnv||!e.model)throw new Error(`Custom provider requires name, baseUrl, apiKeyEnv, and model. Got: ${JSON.stringify({name:e.name,baseUrl:e.baseUrl,apiKeyEnv:e.apiKeyEnv,model:e.model})}`);if(!["anthropic","openai","google","bedrock","mistral","pi-messages"].includes(e.protocol))throw new Error(`Unknown protocol "${e.protocol}" for custom provider "${e.name}". Must be "anthropic" or "openai".`);if(Fr(e),e.authentication!==void 0&&!["bearer","cloudflare-gateway"].includes(e.authentication))throw new Error("Unknown connection authentication mode.");if(e.authentication!==void 0&&(!["anthropic","openai","google"].includes(e.protocol)||e.protocol==="google"&&e.authentication!=="bearer"||e.cloud&&e.cloud.service!=="gemini"))throw new Error("Authentication mode is not supported by this native route.");if(e.api!==void 0&&(e.protocol!=="openai"||!["chat-completions","responses"].includes(e.api)))throw new Error(`Custom provider "${e.name}": api requires openai and must be chat-completions or responses.`);if(Ji(e),e.userAgentMode!==void 0&&!Tc.has(e.userAgentMode))throw new Error(`Unknown userAgentMode "${e.userAgentMode}" for custom provider "${e.name}". Must be "compat" or "sdk".`);if(e.promptCacheAffinity!==void 0&&typeof e.promptCacheAffinity!="boolean")throw new Error(`Custom provider "${e.name}": promptCacheAffinity must be a boolean.`);if(e.imageInput!==void 0&&typeof e.imageInput!="boolean")throw new Error(`Custom provider "${e.name}": imageInput must be a boolean.`);if(Mt(e.outputTokenLimit,e.name),Qi(e,e.maxOutputTokensField,"maxOutputTokensField"),e.models?.forEach((r,i)=>{typeof r!="string"&&(Mt(r.outputTokenLimit,`${e.name}.models[${i}]`),Qi(e,r.maxOutputTokensField,`models[${i}].maxOutputTokensField`))}),e.verifyStrategy!==void 0){if(!Rc.has(e.verifyStrategy))throw new Error(`Unknown verifyStrategy "${e.verifyStrategy}" for custom provider "${e.name}". Must be one of "count-tokens" | "models-list" | "minimal-message" | "unsupported".`);if(e.protocol==="openai"&&e.verifyStrategy==="count-tokens")throw new Error(`Custom provider "${e.name}": verifyStrategy="count-tokens" requires Anthropic protocol; got protocol="openai". Use "models-list" or "minimal-message" for OpenAI-compat.`)}}c(lt,"validateCustomProviderConfig");function Fn(e,t){return t!==!0?e:{...e??Ze,multimodalSupport:"image-input"}}c(Fn,"mergeCapabilityProfileWithImageInput");function Dc(e){let t=e.models?.length?e.models.map(i=>Oc(i,e.protocol,e.supportsThinking,e.reasoningPreset,e.api)):void 0,n=Bn(e),o=e.supportsThinking===!1?"none":e.reasoningCapability??Un(n)??"none",r=e.supportsThinking??(o!=="none"&&o!=="prompt-only");return{apiKeyEnv:e.apiKeyEnv,cacheCapabilities:e.cacheCapabilities?structuredClone(e.cacheCapabilities):void 0,toolCapabilities:e.toolCapabilities?structuredClone(e.toolCapabilities):void 0,authentication:e.authentication,oauth:e.oauth,...e.oauth?{credentialSource:"broker"}:{},model:e.model,baseUrl:e.baseUrl,models:t,userAgentMode:e.userAgentMode,supportsThinking:r,reasoningCapability:o,reasoningProfile:n,capabilityProfile:Fn(e.capabilityProfile,e.imageInput),contextWindow:e.contextWindow,maxOutputTokens:e.maxOutputTokens,outputTokenLimit:e.outputTokenLimit,maxOutputTokensField:e.maxOutputTokensField,thinkingBudgetCap:e.thinkingBudgetCap,promptCacheAffinity:e.promptCacheAffinity??!1,replayReasoningContent:e.replayReasoningContent??!1,strictThinkingSignature:e.oauth==="anthropic"||(e.strictThinkingSignature??!1),streamMaxDurationMs:e.streamMaxDurationMs,verifyStrategy:e.verifyStrategy??(e.cloud?"minimal-message":Sc(e.protocol))}}c(Dc,"buildProviderConfig");function zn(e){lt(e);let t=Dc(e);return e.protocol==="mistral"||e.protocol==="pi-messages"?new Kn(e.name,t,e.protocol):e.cloud?.service==="azure"?e.api==="chat-completions"?new $n(e.name,t):new Nn(e.name,t):e.cloud?new Ln(e.name,t,e.cloud):(e.oauth==="openai-chatgpt"||e.oauth==="openai-codex"||e.oauth==="github-copilot")&&e.protocol==="openai"&&e.api==="responses"?new jn(e.name,t,e.oauth):e.protocol==="anthropic"?new ar(e.name,t):e.api==="responses"?new sr(e.name,t):new cr(e.name,t)}c(zn,"createCustomProvider");var sr=class extends Ie{static{c(this,"DynamicResponsesProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},ar=class extends oe{static{c(this,"DynamicAnthropicProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}},cr=class extends ne{static{c(this,"DynamicOpenAIProvider")}name;config;constructor(t,n){super(),this.name=t,this.config=n}};var ge=new Map,ur=new Map,jc=new Set(["native-toggle","native-budget","native-effort","native-adaptive"]);function os(e){return e.reasoningCapability!==void 0&&jc.has(e.reasoningCapability)||e.reasoningProfile!==void 0||e.reasoningPreset!==void 0&&e.reasoningPreset!=="none"||e.reasoning!==void 0&&e.reasoning!=="none"}c(os,"hasThinkingReasoningConfig");function Nc(e){if(e.supportsThinking!==!1)return;let t=os(e),n=(e.models??[]).some(o=>typeof o!="string"&&os(o));(t||n)&&console.warn(`[kodax] Custom provider "${e.name}": its reasoning config (provider- or per-model reasoningCapability / reasoningProfile / reasoning / reasoningPreset) is ignored because supportsThinking is false (thinking stays off). Set supportsThinking: true to enable thinking, or remove the reasoning config.`)}c(Nc,"warnOnIgnoredReasoningCapability");function rs(e){let t=new Set,n=new Map,o=new Map;for(let r of e){if(lt(r),t.has(r.name))throw new Error(`Duplicate custom provider name: "${r.name}". Each custom provider must have a unique name.`);r.name in he&&console.warn(`[kodax] Custom provider "${r.name}" shadows a built-in provider. The built-in provider will be used. Choose a different name to use your custom provider.`),Nc(r),t.add(r.name),n.set(r.name,r),o.set(r.name,()=>zn(r))}ge.clear(),ur.clear();for(let[r,i]of n)ge.set(r,i);for(let[r,i]of o)ur.set(r,i)}c(rs,"registerCustomProviders");function Wn(e){let t=ur.get(e);return t?t():void 0}c(Wn,"getCustomProvider");function dr(e){let t=ge.get(e)??[...ge.entries()].find(([n])=>n.toLowerCase()===e.toLowerCase())?.[1];if(t)return Ee(Fn(t.capabilityProfile,t.imageInput)??Ze)}c(dr,"getCustomProviderCapabilityProfile");function jt(e){return ge.has(e)}c(jt,"isCustomProviderName");function nn(){return[...ge.keys()]}c(nn,"getCustomProviderNames");function is(){let e=[];for(let[t,n]of ge){let o=!n.oauth&&!n.cloud&&!!process.env[n.apiKeyEnv],r=Bn(n),i=(n.models??[]).map(a=>typeof a=="string"?a:a.id),s=n.model&&i.length?[...new Set([n.model,...i])]:[n.model];e.push({name:t,model:n.model,models:s,configured:o,reasoningCapability:n.supportsThinking===!1?"none":n.reasoningCapability??Un(r)??"none",capabilityProfile:Ee(Fn(n.capabilityProfile,n.imageInput)??Ze),custom:!0})}return e}c(is,"getCustomProviderList");function ss(e){let t=ge.get(e);if(!t)return;let n=(t.models??[]).map(o=>typeof o=="string"?o:o.id);return t.model&&n.length?[...new Set([t.model,...n])]:[t.model]}c(ss,"getCustomProviderModels");function as(e,t,n,o,r){let i=typeof e=="string"?{id:e}:e,s=lr(i,t,n,o,r),a=n===!1&&i.reasoningCapability!==void 0?{...i,reasoningCapability:"none"}:i;return s?{...a,reasoningProfile:s}:a}c(as,"customDescriptorToFull");function Hn(e){let t=ge.get(e);if(!t)return;let n=(t.models??[]).map(i=>as(i,t.protocol,t.supportsThinking,t.reasoningPreset,t.api)),o=n.find(i=>i.id===t.model)??{id:t.model},r=n.filter(i=>i.id!==t.model);return[o,...r]}c(Hn,"getCustomProviderModelDescriptors");function Dt(e,t){let n=ge.get(e);if(!n)return;let o=t===n.model,r=Bn(n),s=(n.models??[]).map(m=>as(m,n.protocol,n.supportsThinking,n.reasoningPreset,n.api)).find(m=>m.id===t)??(o?{id:n.model}:void 0);if(!s)return;let a=n.supportsThinking===!1?r:s.reasoningProfile??r,l=n.supportsThinking===!1?"none":s.reasoningCapability??Un(a)??n.reasoningCapability??"none",d=s.toolCapabilities??n.toolCapabilities,u=s.cacheCapabilities??n.cacheCapabilities;return{...d?{toolCapabilities:structuredClone(d)}:{},...u?{cacheCapabilities:structuredClone(u)}:{},multimodalSupport:s.multimodalSupport??dr(e)?.multimodalSupport,provider:e,model:s.id,displayName:s.displayName??s.id,supportsThinking:n.supportsThinking??(l!=="none"&&l!=="prompt-only"),reasoningCapability:l,reasoningProfile:a,contextWindow:s.contextWindow??n.contextWindow,maxOutputTokens:s.maxOutputTokens??n.maxOutputTokens,outputTokenLimit:s.outputTokenLimit??n.outputTokenLimit,thinkingBudgetCap:s.thinkingBudgetCap??n.thinkingBudgetCap,isDefault:o}}c(Dt,"getCustomModelCapabilities");function pr(e){let t=ge.get(e);if(!t)return;let n=t.verifyStrategy??(t.oauth||t.cloud?"minimal-message":void 0)??(t.protocol==="anthropic"?"count-tokens":t.protocol==="openai"?"models-list":"minimal-message");return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:n}}c(pr,"getCustomProviderVerifyMetadata");function Xn(){let e=[];for(let[t,n]of ge){let o=Dt(t,n.model);o&&e.push(o);for(let r of n.models??[]){let i=typeof r=="string"?r:r.id;if(i===n.model)continue;let s=Dt(t,i);s&&e.push(s)}}return e}c(Xn,"listCustomProviderModelCapabilities");var je=new Map,$c=0;function fr(e){let t=je.get(e);if(!(!t||t.length===0))return t[t.length-1]}c(fr,"getActiveRuntimeProviderRegistration");function Kc(e){for(let[t,n]of je){let o=n.filter(r=>r.id!==e);if(o.length!==n.length){o.length===0?je.delete(t):je.set(t,o);return}}}c(Kc,"removeRuntimeProviderRegistration");function cs(e,t){let n=e.trim();if(!n)throw new Error("Model provider name cannot be empty.");if(ae(n))throw new Error(`Runtime model provider "${n}" conflicts with a built-in provider.`);if(jt(n))throw new Error(`Runtime model provider "${n}" conflicts with an existing config-defined custom provider.`);let o={id:`runtime-provider:${++$c}`,name:n,factory:t},r=je.get(n)??[];return je.set(n,[...r,o]),()=>{Kc(o.id)}}c(cs,"registerModelProvider");function qn(e){let t=fr(e);if(t===void 0)return;let n=t.factory();return t.credentialEnvironmentName??=n.getApiKeyEnv(),n}c(qn,"getRuntimeModelProvider");function on(e){return fr(e)!==void 0}c(on,"isRuntimeModelProviderName");function Gn(){return Array.from(je.keys()).filter(e=>fr(e)!==void 0)}c(Gn,"getRuntimeModelProviderNames");function Vn(){let e=new Set;for(let t of je.values())for(let n of t){if(n.credentialEnvironmentName===void 0){let o=n.factory();n.credentialEnvironmentName=o.getApiKeyEnv()}e.add(n.credentialEnvironmentName)}return[...e]}c(Vn,"getRuntimeModelProviderCredentialEnvironmentNames");function ls(){je.clear()}c(ls,"clearRuntimeModelProviders");function mr(e){if(ae(e))return he[e]();let t=qn(e);if(t)return t;let n=Wn(e);if(n)return n;let o=Yn();throw new L(`Unknown provider: ${e}. Available: ${o.join(", ")}`,e,{failureCode:"provider_not_registered",stage:"catalog"})}c(mr,"resolveProvider");function Jn(e){return ae(e)||on(e)||jt(e)}c(Jn,"isKnownProvider");function Yn(){let e=Object.keys(he),t=Gn(),n=nn();return[...new Set([...e,...t,...n])]}c(Yn,"getAvailableProviderNames");function us(){let e=new Set;for(let t of Object.values(re))e.add(t.apiKeyEnv);for(let t of nn()){let n=pr(t);n!==void 0&&e.add(n.apiKeyEnv)}for(let t of Vn())e.add(t);return[...e].sort()}c(us,"getProviderCredentialEnvironmentNames");function ut(e){return ae(e)?Ot(e):Hn(e)??[]}c(ut,"resolveProviderModelDescriptors");function Qn(e,t){return ae(e)?tn(e,t):Dt(e,t)}c(Qn,"resolveModelCapabilities");function ds(){return[...On(),...Xn()]}c(ds,"listAllModelCapabilities");function Lc(e){if(ae(e)){let t=re[e];return{apiKeyEnv:t.apiKeyEnv,verifyStrategy:t.verifyStrategy}}if(!on(e))return pr(e)}c(Lc,"getProviderVerifyMetadata");async function ps(e,t){let n=Lc(e);if(!n&&!Jn(e))return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Unknown provider: "${e}". Available: ${Yn().join(", ")}`};if(n?.verifyStrategy==="unsupported")return{ok:!1,error:"unsupported",strategy:"unsupported",durationMs:0,approxTokensSpent:0,message:`Provider "${e}" does not support credential verification (cli-bridge or strategy marked unsupported)`};let o=Qe(e);if(o===!1)return{ok:!1,error:"unconfigured",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:`Active credential scope does not authorize provider "${e}"`};if(n&&o!==!0&&!process.env[n.apiKeyEnv])return{ok:!1,error:"unconfigured",strategy:n.verifyStrategy,durationMs:0,approxTokensSpent:0,message:`Environment variable "${n.apiKeyEnv}" is not set for provider "${e}"`};let r;try{r=mr(e)}catch(i){return{ok:!1,error:"unconfigured",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:String(i?.message??i).slice(0,240)}}try{return await r.verifyCredential(t)}catch(i){return{ok:!1,error:"unknown",strategy:n?.verifyStrategy??"unsupported",durationMs:0,approxTokensSpent:0,message:String(i?.message??i).slice(0,240)}}}c(ps,"verifyProviderCredential");async function fs(e,t){if(!Jn(e))return{ok:!1,source:"failed",error:`Unknown provider: "${e}"`,durationMs:0};let n=ut(e);return n.length===0?{ok:!1,source:"failed",error:`Provider "${e}" has no static model list`,durationMs:0}:{ok:!0,source:"static",models:n.map(r=>r.id),durationMs:0}}c(fs,"listProviderModels");function Bc(e){let t=e.model??ut(e.provider)[0]?.id,n=t?Qn(e.provider,t)?.reasoningProfile:void 0;if(!n)return{effort:void 0,configuredEffort:void 0,adjusted:!1};if(n.effortStrategy==="none"||n.effortStrategy==="prompt-only")return{effort:void 0,configuredEffort:e.desiredEffort??"auto",adjusted:!0};if(Fe(n)){let s=e.desiredEffort??"auto",a=e.rejectedEfforts?.includes("*")?void 0:yt(n,s).find(l=>l===void 0||!e.rejectedEfforts?.includes(l));return{effort:a,configuredEffort:s,adjusted:a!==s}}let o=e.rejectedEfforts&&e.rejectedEfforts.length>0?Ro(n,e.rejectedEfforts):n,r=ho({capability:o,sessionEffort:e.desiredEffort}),i=r.effectiveEffort;return i!==void 0&&e.rejectedEfforts?.includes(i)&&(i=void 0),{effort:i,configuredEffort:r.configuredEffort,adjusted:i!==r.configuredEffort}}c(Bc,"resolveWireEffort");var ms={anthropic:{"claude-opus-5-5":{inputPer1M:4,outputPer1M:20,cacheReadPer1M:.2,cacheWritePer1M:5,cacheWritePer1MByTtl:{"5m":5,"1h":8}},"claude-sonnet-5-5":{inputPer1M:2,outputPer1M:10,cacheReadPer1M:.1,cacheWritePer1M:2.5,cacheWritePer1MByTtl:{"5m":2.5,"1h":4}},"claude-haiku-5-5":{inputPer1M:.1,outputPer1M:.5,cacheReadPer1M:.01,cacheWritePer1M:.125,cacheWritePer1MByTtl:{"5m":.125,"1h":.2},longContext:{aboveInputTokens:1e5,inputPer1M:.5,outputPer1M:2.5,cacheReadPer1M:.05,cacheWritePer1M:.625,cacheWritePer1MByTtl:{"5m":.625,"1h":1}}},"claude-opus-4-8":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25,cacheWritePer1MByTtl:{"5m":6.25,"1h":10}},"claude-opus-4-7":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25},"claude-opus-4-6":{inputPer1M:5,outputPer1M:25,cachePer1M:.5,cacheReadPer1M:.5,cacheWritePer1M:6.25,cacheWritePer1MByTtl:{"5m":6.25,"1h":10}},"claude-sonnet-4-6":{inputPer1M:3,outputPer1M:15,cachePer1M:.3,cacheReadPer1M:.3,cacheWritePer1M:3.75,cacheWritePer1MByTtl:{"5m":3.75,"1h":6}},"claude-haiku-4-5":{inputPer1M:1,outputPer1M:5,cachePer1M:.1,cacheReadPer1M:.1,cacheWritePer1M:1.25,cacheWritePer1MByTtl:{"5m":1.25,"1h":2}}},openai:{"gpt-5.3-codex":{inputPer1M:1.75,outputPer1M:14,cacheReadPer1M:.175},"gpt-5.4":{inputPer1M:2.5,outputPer1M:15,cacheReadPer1M:.25,maxPricedInputTokens:272e3},"gpt-5.3-codex-spark":{inputPer1M:10,outputPer1M:40}},deepseek:{"deepseek-flash":{inputPer1M:.15,outputPer1M:.6,cachePer1M:.003},"deepseek-v4-pro":{inputPer1M:.66,outputPer1M:1.98,cachePer1M:.022}},kimi:{"kimi-k3.1-pro":{inputPer1M:1.82,outputPer1M:9.52,cacheReadPer1M:.182,cacheWritePer1M:1.82,cacheWritePer1MByTtl:{"5m":1.82,"1h":3.64},basis:"estimate"},"kimi-k3.1-pro-highspeed":{inputPer1M:3.64,outputPer1M:19.04,cacheReadPer1M:.182,cacheWritePer1M:3.64,cacheWritePer1MByTtl:{"5m":3.64,"1h":7.28},basis:"estimate"},"kimi-k3":{inputPer1M:2.8,outputPer1M:14,cachePer1M:.28},"kimi-k2.7-code":{inputPer1M:.91,outputPer1M:3.78,cachePer1M:.182},"kimi-k2.7-code-highspeed":{inputPer1M:1.82,outputPer1M:7.56,cachePer1M:.364},"kimi-k2.6":{inputPer1M:.91,outputPer1M:3.78,cachePer1M:.154},"kimi-k2.5":{inputPer1M:.56,outputPer1M:2.94,cachePer1M:.098}},"kimi-code":{"k3.1-pro":{inputPer1M:2,outputPer1M:10,cacheReadPer1M:.2,basis:"nominal"},"k3.1-pro-highspeed":{inputPer1M:4,outputPer1M:20,cacheReadPer1M:.2,basis:"nominal"},"kimi-for-coding":{inputPer1M:.005,outputPer1M:.015},k3:{inputPer1M:.01,outputPer1M:.03},"k3-256k":{inputPer1M:.005,outputPer1M:.015},"kimi-for-coding-highspeed":{inputPer1M:.015,outputPer1M:.045}},qwen:{"qwen3.5-plus":{inputPer1M:.003,outputPer1M:.006}},"qwen-token-plan":{"qwen3.8-max":{inputPer1M:.005,outputPer1M:.015},"qwen3.8-max-preview":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-max":{inputPer1M:.005,outputPer1M:.015},"qwen3.7-plus":{inputPer1M:.005,outputPer1M:.015},"qwen3.6-flash":{inputPer1M:.005,outputPer1M:.015},"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015}},zhipu:{"glm-5.3":{inputPer1M:.05,outputPer1M:.1},"glm-5.3-flash":{inputPer1M:.15,outputPer1M:.5,cachePer1M:.03},"glm-5":{inputPer1M:.05,outputPer1M:.1},"glm-5.1":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03}},"zhipu-coding":{"glm-5.3":{inputPer1M:.05,outputPer1M:.1},"glm-5.3-flash":{inputPer1M:.15,outputPer1M:.5,cachePer1M:.03},"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"zai-coding":{"glm-5.3":{inputPer1M:.05,outputPer1M:.1},"glm-5.3-flash":{inputPer1M:.15,outputPer1M:.5,cachePer1M:.03},"glm-5.2":{inputPer1M:.05,outputPer1M:.1},"glm-5-turbo":{inputPer1M:.01,outputPer1M:.03},"glm-4.7":{inputPer1M:.01,outputPer1M:.03}},"minimax-coding":{"MiniMax-M3.1-Flash":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M3":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7":{inputPer1M:.01,outputPer1M:.03},"MiniMax-M2.7-highspeed":{inputPer1M:.01,outputPer1M:.03}},"mimo-coding":{"mimo-v2.6-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.6-flash":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},mimo:{"mimo-v2.6-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.6-flash":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5-pro":{inputPer1M:.01,outputPer1M:.03},"mimo-v2.5":{inputPer1M:.01,outputPer1M:.03}},"ark-coding":{"glm-5.3":{inputPer1M:.005,outputPer1M:.015},"glm-5.3-flash":{inputPer1M:.005,outputPer1M:.015},"kimi-k3.1-pro":{inputPer1M:.005,outputPer1M:.015},"kimi-k3":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.8-preview":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4.1-flash":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4.1-flash-economy":{inputPer1M:.005,outputPer1M:.015},"glm-5.2":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.7-code":{inputPer1M:.005,outputPer1M:.015},"kimi-k2.6":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M3":{inputPer1M:.005,outputPer1M:.015},"MiniMax-M2.7":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-pro":{inputPer1M:.005,outputPer1M:.015},"deepseek-v4-flash":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-code":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-pro":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-2.0-lite":{inputPer1M:.005,outputPer1M:.015},"doubao-seed-code":{inputPer1M:.005,outputPer1M:.015}},"gemini-cli":{},"codex-cli":{}};function Zn(e,t,n){let o=n?.[e]?.[t];return o||ms[e]?.[t]}c(Zn,"getCostRate");var Fc=new Set(["kimi-code","qwen-token-plan","zhipu-coding","zai-coding","minimax-coding","mimo-coding","mimo","ark-coding"]);function gr(e,t,n){let o=Zn(e,t,n);return o?n?.[e]?.[t]?o.basis??"estimate":o.basis??(Fc.has(e)||e==="zhipu"&&t==="glm-5.3"?"nominal":"estimate"):"unknown"}c(gr,"getCostRateBasis");function hr(e,t,n,o=0,r=0){e=hs(e,t);let i=Math.max(0,t-o-r),s=e.cacheReadPer1M??e.cachePer1M??e.inputPer1M,a=e.cacheWritePer1M??e.cachePer1M??e.inputPer1M,l=i/1e6*e.inputPer1M,d=n/1e6*e.outputPer1M,u=o/1e6*s,m=r/1e6*a;return l+d+u+m}c(hr,"calculateCost");function hs(e,t){return e.longContext?e.longContext&&t>e.longContext.aboveInputTokens?{...e,...e.longContext,longContext:void 0}:{...e,longContext:void 0}:e}c(hs,"selectInputTier");function yr(e,t,n,o,r,i){if(e=hs(e,t),e.maxPricedInputTokens!==void 0&&t>e.maxPricedInputTokens)return null;if(!i)return hr(e,t,n,o,r);let s=0,a=0;for(let[l,d]of Object.entries(i)){if(!Number.isFinite(d)||d<0)return null;if(d===0)continue;if(l==="unknown")return null;let u=e.cacheWritePer1MByTtl?.[l]??(l==="5m"?e.cacheWritePer1M:void 0);if(u===void 0||!Number.isFinite(u)||u<0)return null;s+=d,a+=d*u/1e6}return s!==r||!Number.isFinite(s)?null:hr(e,t-s,n,o,r-s)+a}c(yr,"calculateCostWithCacheLifetimes");function zc(){return{records:[],retries:[]}}c(zc,"createCostTracker");function br(e,t){let n={timestamp:Date.now(),provider:t.provider,waitMs:t.waitMs,reason:t.reason,source:t.source};return{records:e.records,retries:[...e.retries,n]}}c(br,"recordRetry");function vr(e,t,n){let o=Zn(t.provider,t.model,n),r=o?yr(o,t.inputTokens,t.outputTokens,t.cacheReadTokens??0,t.cacheWriteTokens??0,t.cacheWriteTokensByTtl):null,i=r!==null&&Number.isFinite(r)&&r>=0?r:null,s={timestamp:Date.now(),provider:t.provider,model:t.model,inputTokens:t.inputTokens,outputTokens:t.outputTokens,cacheReadTokens:t.cacheReadTokens??0,cacheWriteTokens:t.cacheWriteTokens??0,...t.cacheWriteTokensByTtl?{cacheWriteTokensByTtl:{...t.cacheWriteTokensByTtl}}:{},cost:i,costBasis:i===null?"unknown":gr(t.provider,t.model,n),role:t.role};return{records:[...e.records,s],retries:e.retries}}c(vr,"recordUsage");function Wc(e){let t=0,n=0,o=0,r=0,i=0,s=0,a=0,l=0,d={},u={};for(let g of e.records){g.cost===null?n++:t+=g.cost,g.costBasis==="nominal"&&o++,r+=g.inputTokens,i+=g.outputTokens,s+=g.cacheReadTokens+g.cacheWriteTokens,a+=g.cacheReadTokens,l+=g.cacheWriteTokens,d[g.provider]=gs(d[g.provider],g);let f=g.role??"default";u[f]=gs(u[f],g)}let m=0;for(let g of e.retries)m+=g.waitMs;let p=s>0?a/s:0;return{totalCost:n?null:t,knownCostSubtotal:t,unknownCostCalls:n,nominalCostCalls:o,costBasis:ys(e.records.length,n,o),totalInputTokens:r,totalOutputTokens:i,totalCacheTokens:s,totalCacheReadTokens:a,totalCacheWriteTokens:l,cacheHitRate:p,callCount:e.records.length,retryCount:e.retries.length,retryWaitMs:m,byProvider:d,byRole:u}}c(Wc,"getSummary");function gs(e,t){let n=(e?.knownCostSubtotal??e?.cost??0)+(t.cost??0),o=(e?.unknownCostCalls??0)+(t.cost===null?1:0),r=(e?.nominalCostCalls??0)+(t.costBasis==="nominal"?1:0);return{cost:o?null:n,knownCostSubtotal:n,unknownCostCalls:o,nominalCostCalls:r,costBasis:ys((e?.calls??0)+1,o,r),calls:(e?.calls??0)+1,inputTokens:(e?.inputTokens??0)+t.inputTokens,outputTokens:(e?.outputTokens??0)+t.outputTokens}}c(gs,"aggregateCost");function ys(e,t,n){return t?"unknown":n===0?"estimate":n===e?"nominal":"mixed"}c(ys,"summaryBasis");function rn(e){return e===null||!Number.isFinite(e)?"unknown":e<.01?`$${e.toFixed(4)}`:e<1?`$${e.toFixed(3)}`:`$${e.toFixed(2)}`}c(rn,"formatCost");function Hc(e){let t=[],n=e.nominalCostCalls?"Session Cost (nominal estimate)":"Session Cost";if(t.push(`${n}: ${rn(e.totalCost)} (${e.callCount} calls)`),e.unknownCostCalls&&e.knownCostSubtotal!==void 0&&t.push(`Known estimate subtotal: ${rn(e.knownCostSubtotal)}; ${e.unknownCostCalls} unpriced calls`),t.push(`Tokens: ${e.totalInputTokens.toLocaleString()} in / ${e.totalOutputTokens.toLocaleString()} out`),e.totalCacheTokens>0){let i=(e.cacheHitRate*100).toFixed(0);t.push(`Cache: ${e.totalCacheTokens.toLocaleString()} tokens (${e.totalCacheReadTokens.toLocaleString()} read / ${e.totalCacheWriteTokens.toLocaleString()} write, ${i}% hit rate)`)}if(e.retryCount>0){let i=(e.retryWaitMs/1e3).toFixed(1);t.push(`Retries: ${e.retryCount} (${i}s total wait)`)}t.push("");let o=Object.entries(e.byProvider).sort((i,s)=>(s[1].knownCostSubtotal??s[1].cost??0)-(i[1].knownCostSubtotal??i[1].cost??0));if(o.length>0){t.push("By Provider:");for(let[i,s]of o)t.push(` ${i}: ${rn(s.cost)} (${s.calls} calls, ${s.inputTokens.toLocaleString()} in / ${s.outputTokens.toLocaleString()} out)`);t.push("")}let r=Object.entries(e.byRole).sort((i,s)=>(s[1].knownCostSubtotal??s[1].cost??0)-(i[1].knownCostSubtotal??i[1].cost??0));if(r.length>1){t.push("By Role:");for(let[i,s]of r)t.push(` ${i}: ${rn(s.cost)} (${s.calls} calls)`)}return t.join(`
135
- `)}c(Hc,"formatCostReport");import{performance as wr}from"node:perf_hooks";var bs={inputTokens:0,outputTokens:0,totalTokens:0},Xc=3e4,qc=1024;function vs(e){if(!e)return{effort:"none"};let t=new Set(e.localRejectEfforts??[]),n=new Set(e.disabledEfforts??[]),o=e.supportedEfforts?.filter(i=>i.isUserVisible!==!1).map(i=>i.value).filter(i=>!t.has(i));if(!t.has("none")&&e.supportsDisabledThinking!==!1&&(e.supportsDisabledThinking===!0||o?.includes("none")))return{effort:"none"};let r=o?.find(i=>{let s=e.effortAliases?.[i]??i;return i!=="none"&&s!=="none"&&!n.has(i)&&!n.has(s)&&!t.has(s)});return r!==void 0?{effort:r}:e.supportsDisabledThinking===!1||t.has("none")?{effort:"auto"}:void 0}c(vs,"resolveDefaultSideQueryReasoning");function Gc(e,t,n,o){if(!o||!ws(e)||!t)return e;let r=n?.effort,i=r==="none"||r!==void 0&&t.disabledEfforts?.includes(r)===!0,s=t.supportsDisabledThinking===!1||t.localRejectEfforts?.includes("none")===!0;return i||!s?e:e+qc}c(Gc,"resolveSideQueryMaxOutputTokens");async function Vc(e){let t=new AbortController,n=e.timeoutMs??Xc,o=e.costTracker,r=wr.now(),i=Buffer.byteLength(e.system,"utf8"),s=Buffer.byteLength(JSON.stringify(e.messages),"utf8"),a,l,d,u=0,m=0,p=c((E,x)=>{let k=Math.max(0,Math.round(wr.now()-r));return{provider:e.provider.name,model:e.model,timeoutMs:n,elapsedMs:k,systemBytes:i,messageBytes:s,promptBytes:i+s,retryCount:u,retryWaitMs:m,...x!==void 0?x:{},...a!==void 0?{firstUpstreamEventMs:a}:{},...l!==void 0?{firstThinkingDeltaMs:l}:{},...d!==void 0?{firstTextDeltaMs:d,firstOutputMs:d,streamMs:Math.max(0,k-d)}:{},terminalPhase:E}},"diagnostics"),g,f=c(E=>{g||(g=E),t.abort()},"recordAbort"),v=setTimeout(()=>f("timeout"),n),h=c(()=>f("parent"),"onParentAbort");e.abortSignal&&(e.abortSignal.aborted?f("parent"):e.abortSignal.addEventListener("abort",h,{once:!0}));let y=c(()=>Math.max(0,Math.round(wr.now()-r)),"elapsed"),b=c(()=>{a===void 0&&(a=y())},"recordUpstreamEvent"),w,_=new Promise((E,x)=>{w=c(()=>{x(new DOMException(g==="timeout"?"sideQuery timed out":"sideQuery aborted","AbortError"))},"onControllerAbort"),t.signal.aborted?w():t.signal.addEventListener("abort",w,{once:!0})});try{let E=e.provider.getReasoningProfile(e.model),x=e.reasoning??vs(E),k=Gc(e.maxOutputTokens,E,x,e.reasoning===void 0),S=ue(e.provider,e.credentialPurpose??"utility",t.signal,K=>e.provider.stream([...e.messages],[],e.system,x,{modelOverride:e.model,...ws(k)?{maxOutputTokensOverride:k}:{},onTextDelta:c(F=>{b(),F.length>0&&d===void 0&&(d=y())},"onTextDelta"),onThinkingDelta:c(F=>{b(),F.length>0&&l===void 0&&(l=y())},"onThinkingDelta"),onHeartbeat:c(()=>b(),"onHeartbeat"),onRetryAfter:c(F=>{b(),u+=1,m+=Math.max(0,F.waitMs),o&&(o=br(o,{provider:F.provider,waitMs:F.waitMs,reason:F.reason,source:F.source}))},"onRetryAfter")},K)),R=await Promise.race([S,_]),M=R.usage??bs,j=R.textBlocks??[],N=R.toolBlocks??[],$=j.map(K=>K.text).join(""),A={responseBytes:Buffer.byteLength($,"utf8"),textBlockCount:j.length};if(N.length>0)return{text:$,usage:M,costTracker:o,stopReason:"error",diagnostics:p("contract_error",{stopReason:"error",...A}),error:new Error(`sideQuery: provider returned ${N.length} tool_use block(s); sideQuery expects text-only output`)};o&&(o=vr(o,{provider:e.provider.name,model:e.model,inputTokens:M.inputTokens,outputTokens:M.outputTokens,cacheReadTokens:M.cachedReadTokens,cacheWriteTokens:M.cachedWriteTokens,role:e.querySource}));let T=Jc(R.stopReason);return{text:$,usage:M,costTracker:o,stopReason:T,diagnostics:p("completed",{stopReason:T,...A})}}catch(E){let x=E instanceof Error?E:new Error(String(E)),k="error";return t.signal.aborted&&(k=g==="timeout"?"timeout":"aborted"),{text:"",usage:bs,costTracker:o,stopReason:k,diagnostics:p(d!==void 0?"streaming":l!==void 0?"thinking":a!==void 0?"awaiting_text":"pre_output",{stopReason:k}),error:x}}finally{clearTimeout(v),e.abortSignal&&e.abortSignal.removeEventListener("abort",h),w&&t.signal.removeEventListener("abort",w)}}c(Vc,"sideQuery");function ws(e){return e!==void 0&&Number.isInteger(e)&&e>0}c(ws,"isPositiveInteger");function Jc(e){return yn(e)==="truncated"?"max_tokens":"end_turn"}c(Jc,"mapStopReason");var C=class extends Error{static{c(this,"OAuthCredentialError")}code;constructor(t){super(`OAuth credential ${t.replaceAll("_"," ")}.`),this.code=t,this.name="OAuthCredentialError"}};function eo(e,t=!0){return!!e?.accessToken.trim()&&(!t&&e.expiresAt===void 0||typeof e.expiresAt=="number"&&Number.isFinite(e.expiresAt)&&e.expiresAt>0)&&(e.earliestRefreshAt===void 0||Number.isFinite(e.earliestRefreshAt))}c(eo,"validTokens");function _s(e){return e.expiresAt!==void 0&&e.expiresAt<=Date.now()+3e4&&(e.earliestRefreshAt??0)<=Date.now()}c(_s,"due");function _r(e,t){return e.id===t.id&&e.service===t.service&&e.clientId===t.clientId&&e.accountId===t.accountId&&e.issuer===t.issuer&&e.identityKind===t.identityKind&&e.profile===t.profile}c(_r,"sameRegistration");var ks=new WeakMap,kr=new WeakMap,Cs=new Map;function Es(e,t){let n=Cs.get(t);n||(n={},Cs.set(t,n));let o=kr.get(e);if(o&&o!==n)throw new C("invalid_session");kr.set(e,n)}c(Es,"shareOAuthSessionStoreIdentity");async function Yc(e,t){if(!t)return e;let n,o=new Promise((r,i)=>{n=c(()=>i(new DOMException("OAuth request aborted.","AbortError")),"abort"),t.addEventListener("abort",n,{once:!0}),t.aborted&&n()});try{return await Promise.race([e,o])}finally{t.removeEventListener("abort",n)}}c(Yc,"cancellable");async function Qc(e){let{id:t,store:n,driver:o}=e,r=await n.transact(t,async f=>({record:f,result:f})).catch(()=>{throw new C("storage_failed")});if(!r||r.id!==t||!r.clientId||!r.accountId||r.profile!==void 0&&(typeof r.profile!="string"||!r.profile.trim())||r.identityKind!==void 0&&!["account","grant"].includes(r.identityKind)||!["openai-chatgpt","openai-codex","github-copilot","anthropic","openrouter","kimi-coding","meta","xai","radius"].includes(r.service))throw new C("invalid_session");let i={...r,credentials:void 0,resource:void 0},s=kr.get(n)??n,a=ks.get(s);a||(a=new Map,ks.set(s,a));let l=a.get(t);if(l&&!_r(l.registration,i))throw new C("invalid_session");l||(l={registration:i,controller:new AbortController,listeners:new Set},a.set(t,l));let d=l,u=d.controller,m=d.listeners,p=c(()=>{if(u.signal.aborted)throw new C("session_revoked")},"ensureActive"),g=c(async(f,v)=>{f?.throwIfAborted(),p();let h=n.transact(t,async b=>{if(p(),!b||!_r(i,b))throw new C("invalid_session");let w=b.service!=="github-copilot"&&b.service!=="openrouter"&&b.service!=="meta";if(!eo(b.credentials,w))throw new C("reauthentication_required");let _=b,E=!1,x=b.service==="github-copilot"||b.service==="meta",k=x?b.resource:b.credentials,S=v!==void 0&&k!==void 0&&Bt(k.accessToken)===v,R=AbortSignal.any([u.signal,AbortSignal.timeout(3e4)]);try{if(b.credentials.expiresAt!==void 0&&b.credentials.expiresAt<=Date.now()&&(b.credentials.earliestRefreshAt??0)>Date.now())throw new C("refresh_failed");if(S&&!x&&!b.credentials.refreshToken)throw new C("reauthentication_required");if((_s(b.credentials)||S&&!x)&&(_={..._,credentials:await o.refresh(_,R),resource:void 0}),!eo(_.credentials,w)||_.credentials.expiresAt!==void 0&&_.credentials.expiresAt<=Date.now())throw new C("reauthentication_required");if(x&&(S||!eo(_.resource)||_s(_.resource))){if(!o.exchangeResource)throw new C("invalid_session");E=!0,_={..._,resource:await o.exchangeResource(_,R)}}p();let M=x?_.resource:_.credentials,j=_.service==="meta"&&E&&M?.expiresAt===void 0;if(!eo(M,_.service!=="openrouter"&&!j)||M.expiresAt!==void 0&&M.expiresAt<=Date.now())throw new C("refresh_failed");return{record:j?{..._,resource:void 0}:_,result:{token:M.accessToken,error:void 0}}}catch(M){p();let j=M instanceof C?M:new C("refresh_failed");if(E&&!(_.service==="meta"&&j.code==="reauthentication_required"))return{record:{..._,resource:void 0},result:{error:j}};if(j.code==="reauthentication_required")return{record:{...b,credentials:void 0,resource:void 0},result:{token:void 0,error:j}};throw j}}).catch(b=>{throw b instanceof C?b:new C("storage_failed")}),y=await Yc(h,f);if(p(),y.error)throw y.error;return y.token},"acquire");return{id:t,service:r.service,accountId:r.accountId,issuer:r.issuer,profile:r.profile,replayIdentity:Bt([t,r.service,r.clientId,r.accountId,r.issuer,r.identityKind??"account",r.profile??"default"]),acquire:c(f=>g(f),"acquire"),async recoverRejectedCredential(f,v){if(!/^[a-f0-9]{64}$/.test(f))throw new C("invalid_session");await g(v,f)},onInvalidate(f){return p(),m.add(f),()=>{m.delete(f)}},revoke(){if(d.revoking)return d.revoking;u.abort();let f=Promise.allSettled([...m].map(async v=>v()));return m.clear(),d.revoking=(async()=>{let v=await n.transact(t,async b=>{if(b&&!_r(i,b))throw new C("invalid_session");return{record:b&&{...b,credentials:void 0,resource:void 0},result:b}}).catch(b=>{throw b instanceof C?b:new C("storage_failed")}),h="unsupported";if(o.revoke&&v?.credentials)try{await o.revoke(v,AbortSignal.timeout(3e4)),h="revoked"}catch{h="failed"}let y=await f;return a.delete(t),{remote:h,leaseRevocationFailures:y.filter(b=>b.status==="rejected").length}})().catch(v=>{throw d.revoking=void 0,v}),d.revoking}}}c(Qc,"openOAuthSession");var Ps={"openai-chatgpt":{discovery:"https://auth.openai.com/.well-known/openid-configuration",token:"https://auth.openai.com/api/accounts/oauth/token",audience:"https://api.openai.com/v1"},"openai-codex":{discovery:"https://auth.openai.com/.well-known/openid-configuration",token:"https://auth.openai.com/oauth/token"},"github-copilot":{device:"https://github.com/login/device/code",token:"https://github.com/login/oauth/access_token",resourceExchange:"https://api.github.com/copilot_internal/v2/token"},anthropic:{authorization:"https://claude.ai/oauth/authorize",token:"https://platform.claude.com/v1/oauth/token",jsonToken:!0},openrouter:{authorization:"https://openrouter.ai/auth",token:"https://openrouter.ai/api/v1/auth/keys",jsonToken:!0},"kimi-coding":{device:"https://auth.kimi.com/api/oauth/device_authorization",token:"https://auth.kimi.com/api/oauth/token"},meta:{device:"https://auth.meta.com/oidc/device/authorization/",token:"https://auth.meta.com/oidc/device/token/",resourceExchange:"https://api.meta.ai/muse-code/key"},xai:{authorization:"https://auth.x.ai/oauth2/authorize",device:"https://auth.x.ai/oauth2/device/code",token:"https://auth.x.ai/oauth2/token",revocation:"https://auth.x.ai/oauth2/revoke"}};function to(e){try{return new URL(e)}catch{throw new C("invalid_session")}}c(to,"parseOAuthUrl");function Nt(e){let t=to(e);if(t.protocol!=="https:"||t.username||t.password||t.hash)throw new C("invalid_session");return t}c(Nt,"requireOAuthEndpoint");function Ne(e,t){if(e==="radius"){let n=Nt(t??"https://radius.pi.dev");if(n.search)throw new C("invalid_session");let o=n.href.replace(/\/$/,"");return{discovery:`${o}/v1/oauth`,token:`${o}/v1/oauth/token`,device:`${o}/v1/oauth/device`}}if(!Object.hasOwn(Ps,e))throw new C("invalid_session");return Ps[e]}c(Ne,"getOAuthEndpoints");async function no(e,t,n,o=[401]){try{let r=await e(t,{...n,redirect:"error"}),i=await r.json(),s=i&&typeof i=="object"&&!Array.isArray(i)?i:{};if(s.error==="invalid_grant"||o.includes(r.status))throw new C("reauthentication_required");if(!r.ok||s.error)throw new C("refresh_failed");return s}catch(r){throw r instanceof C?r:new C("refresh_failed")}}c(no,"requestJson");function Zc(e,t,n){if(typeof e.access_token!="string"||!e.access_token||typeof e.expires_in!="number"||!Number.isFinite(e.expires_in)||e.expires_in<=0||e.token_type!==void 0&&String(e.token_type).toLowerCase()!=="bearer")throw new C("refresh_failed");let o=typeof e.scope=="string"?e.scope.split(/\s+/).filter(Boolean):t.scopes;if(n==="openai-chatgpt"&&!o?.includes("chatgpt.tokens.use.direct"))throw new C("reauthentication_required");let r=typeof e.refresh_token=="string"&&e.refresh_token?e.refresh_token:t.refreshToken;if(n==="openai-chatgpt"&&(!e.refresh_token||!r))throw new C("refresh_failed");return{accessToken:e.access_token,refreshToken:r,expiresAt:Date.now()+e.expires_in*1e3,scopes:o,...typeof e.earliest_refresh_at=="number"&&Number.isFinite(e.earliest_refresh_at)?{earliestRefreshAt:e.earliest_refresh_at*1e3}:{}}}c(Zc,"parseTokens");function el(e,t={}){let n=c((...r)=>(t.fetch??globalThis.fetch)(...r),"fetcher"),o=c(r=>{if(r.service!==e||!r.clientId||!r.credentials)throw new C("invalid_session");return r.credentials},"requireRecord");return{async refresh(r,i){let s=o(r);if(e==="openrouter"||e==="meta")throw new C("reauthentication_required");if(!s.refreshToken)throw new C("reauthentication_required");let a=new URLSearchParams({grant_type:"refresh_token",client_id:r.clientId,refresh_token:s.refreshToken}),l=Ne(e,r.issuer);l.audience&&a.set("resource",l.audience);let d=l.token,u=l.jsonToken===!0;return Zc(await no(n,d,{method:"POST",headers:{accept:"application/json",...u?{"content-type":"application/json"}:{}},body:u?JSON.stringify(Object.fromEntries(a)):a,signal:i}),s,e)},...e==="github-copilot"?{async exchangeResource(r,i){let s=o(r),a=await no(n,Ne(e).resourceExchange,{headers:{authorization:`token ${s.accessToken}`,accept:"application/json","user-agent":"KodaX"},signal:i});if(typeof a.token!="string"||!a.token||typeof a.expires_at!="number"||!Number.isFinite(a.expires_at)||a.expires_at*1e3<=Date.now())throw new C("refresh_failed");return{accessToken:a.token,expiresAt:a.expires_at*1e3}}}:e==="meta"?{async exchangeResource(r,i){let s=o(r),a=await no(n,Ne(e).resourceExchange,{method:"POST",signal:i,headers:{authorization:`Bearer ${s.accessToken}`,"x-api-version":"1.0.0","content-type":"application/json"},body:"{}"},[401,403]);if(typeof a.api_key!="string"||!a.api_key.trim()||/[\r\n]/.test(a.api_key))throw new C("refresh_failed");return{accessToken:a.api_key}}}:e==="openai-chatgpt"||e==="openai-codex"||e==="xai"?{async revoke(r,i){try{let s=o(r),a=s.refreshToken??(e==="xai"?s.accessToken:void 0);if(!a)throw new C("reauthentication_required");let l=Ne(e),d=l.revocation?{revocation_endpoint:l.revocation}:await no(n,l.discovery,{signal:i});if(typeof d.revocation_endpoint!="string")throw new C("refresh_failed");let u=new URL(d.revocation_endpoint);if(u.origin!==new URL(l.token).origin||u.username||u.password||u.hash)throw new C("refresh_failed");if(!(await n(u.href,{method:"POST",redirect:"error",signal:i,body:new URLSearchParams({token:a,token_type_hint:s.refreshToken?"refresh_token":"access_token",client_id:r.clientId})})).ok)throw new C("refresh_failed")}catch(s){throw s instanceof C?s:new C("refresh_failed")}}}:{}}}c(el,"createOAuthRefreshDriver");var B="openai-completions",ie="anthropic-messages",Ge="openai-responses",sn="google-generative-ai",xs=[{id:"amazon-bedrock",apiKeyEnv:"AWS_BEARER_TOKEN_BEDROCK",chatApis:["bedrock-converse-stream"]},{id:"ant-ling",apiKeyEnv:"ANT_LING_API_KEY",chatApis:[B],baseUrl:"https://api.ant-ling.com/v1"},{id:"anthropic",apiKeyEnv:"ANTHROPIC_API_KEY",chatApis:[ie],baseUrl:"https://api.anthropic.com"},{id:"azure",apiKeyEnv:"AZURE_OPENAI_API_KEY",chatApis:["azure-openai-responses",B]},{id:"baseten",apiKeyEnv:"BASETEN_API_KEY",chatApis:[B],baseUrl:"https://inference.baseten.co/v1"},{id:"cerebras",apiKeyEnv:"CEREBRAS_API_KEY",chatApis:[B],baseUrl:"https://api.cerebras.ai/v1"},{id:"cloudflare-ai-gateway",apiKeyEnv:"CLOUDFLARE_API_KEY",chatApis:[ie,B,Ge]},{id:"cloudflare-workers-ai",apiKeyEnv:"CLOUDFLARE_API_KEY",chatApis:[B],classifierApi:"cloudflare-workers-ai-system-one"},{id:"deepseek",apiKeyEnv:"DEEPSEEK_API_KEY",chatApis:[B],baseUrl:"https://api.deepseek.com/v1"},{id:"fireworks",apiKeyEnv:"FIREWORKS_API_KEY",chatApis:[ie,B],baseUrl:"https://api.fireworks.ai/inference/v1"},{id:"github-copilot",apiKeyEnv:"COPILOT_GITHUB_TOKEN",chatApis:[ie,B,Ge]},{id:"google",apiKeyEnv:"GEMINI_API_KEY",chatApis:[sn]},{id:"google-vertex",apiKeyEnv:"GOOGLE_CLOUD_API_KEY",chatApis:["google-vertex"]},{id:"groq",apiKeyEnv:"GROQ_API_KEY",chatApis:[B],baseUrl:"https://api.groq.com/openai/v1"},{id:"huggingface",apiKeyEnv:"HF_TOKEN",chatApis:[B],baseUrl:"https://router.huggingface.co/v1"},{id:"kimi-coding",apiKeyEnv:"KIMI_API_KEY",chatApis:[B],baseUrl:"https://api.kimi.com/coding/v1"},{id:"meta",apiKeyEnv:"META_API_KEY",chatApis:[Ge],baseUrl:"https://api.meta.ai/v1"},{id:"minimax",apiKeyEnv:"MINIMAX_API_KEY",chatApis:[ie],baseUrl:"https://api.minimax.io/anthropic"},{id:"minimax-cn",apiKeyEnv:"MINIMAX_CN_API_KEY",chatApis:[ie],baseUrl:"https://api.minimaxi.com/anthropic"},{id:"mistral",apiKeyEnv:"MISTRAL_API_KEY",chatApis:["mistral-conversations"],baseUrl:"https://api.mistral.ai/v1"},{id:"moonshotai",apiKeyEnv:"MOONSHOT_API_KEY",chatApis:[B],baseUrl:"https://api.moonshot.ai/v1"},{id:"moonshotai-cn",apiKeyEnv:"MOONSHOT_API_KEY",chatApis:[B],baseUrl:"https://api.moonshot.cn/v1"},{id:"nvidia",apiKeyEnv:"NVIDIA_API_KEY",chatApis:[B],baseUrl:"https://integrate.api.nvidia.com/v1"},{id:"openai",apiKeyEnv:"OPENAI_API_KEY",chatApis:[Ge],classifierApi:"openai-decisions",baseUrl:"https://api.openai.com/v1"},{id:"openai-codex",apiKeyEnv:"KODAX_OAUTH_BROKER_ONLY",chatApis:["openai-codex-responses"]},{id:"opencode",apiKeyEnv:"OPENCODE_API_KEY",chatApis:[ie,B,Ge,sn],classifierApi:"typesafe-system-one"},{id:"opencode-go",apiKeyEnv:"OPENCODE_API_KEY",chatApis:[ie,B,Ge,sn]},{id:"openrouter",apiKeyEnv:"OPENROUTER_API_KEY",chatApis:[ie,B],imageApi:"openrouter-images",classifierApi:"typesafe-system-one",baseUrl:"https://openrouter.ai/api/v1"},{id:"qwen-token-plan",apiKeyEnv:"QWEN_TOKEN_PLAN_API_KEY",chatApis:[B],baseUrl:"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"},{id:"qwen-token-plan-cn",apiKeyEnv:"QWEN_TOKEN_PLAN_CN_API_KEY",chatApis:[B],baseUrl:"https://token-plan.cn-beijing.maas.aliyuncs.com/compatible-mode/v1"},{id:"qwen-token-plan-individual",apiKeyEnv:"QWEN_TOKEN_PLAN_API_KEY",chatApis:[B],baseUrl:"https://token-plan.ap-southeast-1.maas.aliyuncs.com/compatible-mode/v1"},{id:"radius",apiKeyEnv:"RADIUS_API_KEY",chatApis:["pi-messages"],baseUrl:"https://radius.pi.dev"},{id:"together",apiKeyEnv:"TOGETHER_API_KEY",chatApis:[B],baseUrl:"https://api.together.ai/v1"},{id:"typesafe",apiKeyEnv:"TYPESAFE_API_KEY",chatApis:[],classifierApi:"typesafe-system-one"},{id:"vercel-ai-gateway",apiKeyEnv:"AI_GATEWAY_API_KEY",chatApis:[ie],classifierApi:"typesafe-system-one",baseUrl:"https://ai-gateway.vercel.sh"},{id:"xai",apiKeyEnv:"XAI_API_KEY",chatApis:[Ge],baseUrl:"https://api.x.ai/v1"},{id:"xiaomi",apiKeyEnv:"XIAOMI_API_KEY",chatApis:[B],baseUrl:"https://api.xiaomimimo.com/v1"},{id:"xiaomi-token-plan-ams",apiKeyEnv:"XIAOMI_TOKEN_PLAN_AMS_API_KEY",chatApis:[B],baseUrl:"https://token-plan-ams.xiaomimimo.com/v1"},{id:"xiaomi-token-plan-cn",apiKeyEnv:"XIAOMI_TOKEN_PLAN_CN_API_KEY",chatApis:[B],baseUrl:"https://token-plan-cn.xiaomimimo.com/v1"},{id:"xiaomi-token-plan-sgp",apiKeyEnv:"XIAOMI_TOKEN_PLAN_SGP_API_KEY",chatApis:[B],baseUrl:"https://token-plan-sgp.xiaomimimo.com/v1"},{id:"zai",apiKeyEnv:"ZAI_API_KEY",chatApis:[B],baseUrl:"https://api.z.ai/api/coding/paas/v4"},{id:"zai-coding-cn",apiKeyEnv:"ZAI_CODING_CN_API_KEY",chatApis:[B],baseUrl:"https://open.bigmodel.cn/api/coding/paas/v4"}];function Cr(){return structuredClone(xs)}c(Cr,"listProviderPresets");function tl(e,t){let n=xs.find(a=>a.id===e);if(!n)throw new Error(`Unknown provider preset: ${e}`);if(!n.chatApis.length)throw new Error("This provider exposes a classifier operation, not a chat route.");let o=t.apiId??(n.chatApis.length===1?n.chatApis[0]:void 0);if(!o||!n.chatApis.includes(o))throw new Error("Select one explicit supported API for this provider.");if((e==="opencode"||e==="opencode-go")&&!t.baseUrl)throw new Error("This gateway requires an explicit model endpoint.");let r,{apiId:i,...s}=t;if(e==="github-copilot"||e==="openai-codex")r=Dn({service:e,name:t.name,model:t.model,api:o===ie?ie:o===B?"chat-completions":"responses"});else if(o===sn||o==="google-vertex"||o==="bedrock-converse-stream"||e==="azure")r=nl(e,t,o),r.apiKeyEnv=t.apiKeyEnv??n.apiKeyEnv,o===sn&&e!=="google"&&(r.authentication="bearer");else{let a=t.baseUrl??n.baseUrl;if(!a)throw new Error("This route requires an explicit account/model endpoint.");o===ie&&["fireworks","openrouter"].includes(e)&&(a=a.replace(/\/v1\/?$/,""));let l=o===ie?"anthropic":o==="mistral-conversations"?"mistral":o==="pi-messages"?"pi-messages":"openai";r={...s,protocol:l,baseUrl:a,apiKeyEnv:t.apiKeyEnv??n.apiKeyEnv,...l==="openai"?{api:o===Ge?"responses":"chat-completions"}:{},...e==="cloudflare-ai-gateway"?{authentication:"cloudflare-gateway"}:{},verifyStrategy:t.verifyStrategy??"minimal-message"},["openrouter","opencode","opencode-go"].includes(e)&&o===ie&&(r.authentication="bearer")}return e==="fireworks"&&(r.promptCacheAffinity=t.promptCacheAffinity??!0,r.cacheCapabilities=t.cacheCapabilities??(o===ie?{dialect:"anthropic",locations:["system","messages"],affinityHeader:"x-session-affinity"}:{dialect:"affinity",affinityHeader:"x-session-affinity"}),o===B&&(r.toolCapabilities=t.toolCapabilities??{strict:!0})),r={...s,...r},lt(r),r}c(tl,"createProviderConnection");function nl(e,t,n){let o={name:t.name,model:t.model},r;if(e==="azure"){if(!t.baseUrl)throw new Error("Azure requires an explicit resource endpoint.");r=vt({...o,service:"azure",endpoint:t.baseUrl}),n===B&&(r.api="chat-completions")}else if(n==="bedrock-converse-stream"){if(t.cloud?.service!=="bedrock")throw new Error("Bedrock requires an explicit cloud region.");r=vt({...o,...t.cloud})}else n==="google-vertex"?r=vt({...o,...t.cloud?.service==="vertex"?t.cloud:{service:"vertex"}}):r=vt({...o,service:"gemini"});return{...r,...t,...e==="azure"?{baseUrl:r.baseUrl}:{},protocol:r.protocol,cloud:r.cloud,api:r.api}}c(nl,"cloudConnection");import{createHash as rl,randomUUID as Ss}from"node:crypto";function an(e){return typeof e=="number"&&Number.isSafeInteger(e)&&e>0?e:void 0}c(an,"positive");function ol(e,t){if(t&&(typeof e!="string"||!/^\d+(?:\.\d+)?(?:[eE][+-]?\d+)?$/.test(e)))return;let n=t?Number(e)*1e6:e;return typeof n=="number"&&Number.isFinite(n)&&n>=0?n:void 0}c(ol,"price");function Ts(e,t){let n={};for(let[o,r]of t?[["prompt","inputPer1M"],["completion","outputPer1M"],["input_cache_read","cacheReadPer1M"],["input_cache_write","cacheWritePer1M"]]:[["input","inputPer1M"],["output","outputPer1M"],["cacheRead","cacheReadPer1M"],["cacheWrite","cacheWritePer1M"]]){let i=ol(e[o],t);i!==void 0&&Object.assign(n,{[r]:i})}return n}c(Ts,"readRates");function As(e,t,n){if(e==null)return;let o=U(e),r=Ts(o,t),i=o.overrides??o.tiers;if(i!=null&&!Array.isArray(i))throw new Error("Invalid conditional catalog pricing.");return{source:"catalog",currency:"USD",unit:"million-tokens",checkedAt:n,rates:r,...Array.isArray(i)?{conditions:i.map(s=>{let a=U(s),l={...a};for(let d of t?["prompt","completion","input_cache_read","input_cache_write"]:["input","output","cacheRead","cacheWrite"])delete l[d];return{when:l,rates:Ts(a,t)}})}:{}}}c(As,"quote");function Rs(e,t,n){let o=e.api==="radius-config",r=o?t.models:t.data;if(!Array.isArray(r))throw new Error("Invalid model catalog list.");let i=e.curatedModels??ut(e.name),s=new Map(i.map(d=>[d.id,d])),a=new Map;for(let d of r){let u=U(d),m=u.id;if(typeof m!="string"||!m.trim()||m.length>512||/[\u0000-\u001f\u007f]/.test(m)||a.has(m))throw new Error("Invalid or duplicate model catalog identifier.");let p=u.top_provider==null?{}:U(u.top_provider),g=an(p.context_length)??an(u.context_length)??(o?an(u.contextWindow):void 0),f=an(p.max_completion_tokens)??(o?an(u.maxTokens):void 0),v=o?As(u.cost,!1,n):e.api==="openrouter-user-models"?As(u.pricing,!0,n):void 0,h=typeof u.name=="string"&&u.name.length<=512&&!/[\u0000-\u001f\u007f]/.test(u.name)?u.name:void 0;a.set(m,{id:m,available:!0,...s.has(m)?{curated:structuredClone(s.get(m))}:{},advertised:{...h?{displayName:h}:{},...g?{contextWindow:g}:{},...f?{outputTokenLimit:f}:{},...o&&Array.isArray(u.input)?{imageInput:u.input.includes("image")}:{},...o&&typeof u.reasoning=="boolean"?{reasoning:u.reasoning}:{},...o&&u.thinkingLevelMap?{thinkingLevelMap:structuredClone(U(u.thinkingLevelMap))}:{}},...v?{quote:v}:{}})}for(let d of i)a.has(d.id)||a.set(d.id,{id:d.id,available:!1,curated:structuredClone(d),advertised:{}});let l;if(o){if(typeof t.baseUrl!="string")throw new Error("Radius catalog requires a declared message endpoint.");let d=new URL(t.baseUrl),u=new URL(e.baseUrl);if(d.origin!==u.origin||d.username||d.password||d.search||d.hash)throw new Error("Radius catalog returned a foreign or secret-bearing route.");l=d.href.replace(/\/$/,"")}return{models:[...a.values()],...l?{suggestedBaseUrl:l}:{}}}c(Rs,"decodeModelCatalog");function Os(){let e=new Map;return{async read(t,n){n?.throwIfAborted();let o=e.get(t);return o?structuredClone(o):void 0},async compareAndSwap(t,n,o,r){return r.signal?.throwIfAborted(),!r.isCurrent()||e.get(t)?.revision!==n?!1:(e.set(t,structuredClone(o)),!0)}}}c(Os,"createMemoryModelCatalogStore");var il=Os(),Ms=new WeakMap;function Ds(e){return rl("sha256").update(JSON.stringify(e)).digest("hex")}c(Ds,"digest");function sl(e){if(!["openai-models","openrouter-user-models","radius-config"].includes(e.api)||typeof e.accountScope!="string"||!e.accountScope.trim())throw new Error("Catalog refresh requires an explicit API and trusted account scope.");let t=We(e,"");return{url:e.api==="radius-config"?new URL("/v1/config",t):new URL(`${t}${e.api==="openrouter-user-models"?"/models/user":"/models"}`),scope:Ds([e.name,e.api,t,e.accountScope])}}c(sl,"source");function Is(e,t){if(e!==void 0){if(e.version!==1||e.scope!==t||typeof e.revision!="string"||!Array.isArray(e.models)||!Number.isFinite(e.checkedAt)||e.etag!==void 0&&(typeof e.etag!="string"||e.etag.length>4096||/[\r\n]/.test(e.etag))||e.lastModified!==void 0&&!Number.isFinite(Date.parse(e.lastModified)))throw new Error("Invalid stored model catalog snapshot.");return structuredClone(e)}}c(Is,"storedSnapshot");async function al(e,t={}){e=structuredClone(e),t={...t};let{url:n,scope:o}=sl(e),r=t.store??il,i=t.timeoutMs??15e3;if(!Number.isSafeInteger(i)||i<1||i>2147483647)throw new Error("Invalid catalog refresh timeout.");let s=Ms.get(r)??new Map;Ms.set(r,s);let a=new AbortController;s.get(o)?.abort(new Error("Catalog refresh superseded.")),s.set(o,a);let l=AbortSignal.any([a.signal,AbortSignal.timeout(i),...t.signal?[t.signal]:[]]),d=c(()=>s.get(o)===a&&!l.aborted&&t.isCurrent?.()!==!1,"isCurrent");try{let u=Is(await r.read(o,l),o);return d()?await be(e,"utility",l,(m,p)=>fn(e.name,e.model,async()=>{u?.etag&&m.set("if-none-match",u.etag),u?.lastModified&&m.set("if-modified-since",u.lastModified);let g=await Xr(n.href,{method:"GET",headers:m,signal:p},!0);if(!d()||p?.aborted)return{status:"stale"};if([401,403,404].includes(g.status))return await g.body?.cancel(),{status:"unavailable",httpStatus:g.status,...u?{snapshot:u}:{}};if(g.status!==304&&!g.ok)throw Object.assign(new Error(`Model catalog HTTP ${g.status}.`),{status:g.status,headers:g.headers});if(g.status===304&&!u)throw new Error("Model catalog returned 304 without a matching snapshot.");let f=Date.now(),v=g.status===304?{...u,checkedAt:f,revision:Ss()}:{version:1,revision:Ss(),scope:o,checkedAt:f,source:{api:e.api,origin:n.origin,pathHash:Ds(n.pathname)},...Rs(e,await Vr(g,p),f),...g.headers.get("etag")?{etag:g.headers.get("etag")}:{},...g.headers.get("last-modified")?{lastModified:g.headers.get("last-modified")}:{}};return Is(v,o),!await r.compareAndSwap(o,u?.revision,v,{signal:p,isCurrent:c(()=>d()&&!p?.aborted,"isCurrent")})||!d()?{status:"stale"}:{status:g.status===304?"not-modified":"updated",snapshot:structuredClone(v)}},!0)):{status:"stale"}}catch(u){if(s.get(o)!==a)return{status:"stale"};throw u}finally{s.get(o)===a&&s.delete(o)}}c(al,"refreshProviderModelCatalog");import{createHash as cl,randomBytes as Er,timingSafeEqual as ll}from"node:crypto";async function cn(e,t,n){try{let o=await e(t,{...n,redirect:"error"}),r=await o.json();if(!r||typeof r!="object"||Array.isArray(r))throw new C("refresh_failed");return{status:o.status,body:r}}catch(o){throw n.signal?.aborted?new DOMException("OAuth authorization aborted.","AbortError"):o instanceof C?o:new C("refresh_failed")}}c(cn,"oauthJson");function Pr(e,t){let n=t==="openrouter"?e.key:e.access_token;if(typeof n!="string"||!n.trim()||/[\r\n]/.test(n)||e.token_type!==void 0&&String(e.token_type).toLowerCase()!=="bearer")throw new C("refresh_failed");let o=e.expires_in;if(t!=="openrouter"&&t!=="meta"&&t!=="github-copilot"&&(typeof o!="number"||!Number.isFinite(o)||o<=0))throw new C("refresh_failed");let r=typeof o=="number"&&Number.isFinite(o)&&o>0?Date.now()+o*1e3:void 0;if(r!==void 0&&!Number.isFinite(r))throw new C("refresh_failed");if(t==="kimi-coding"&&(typeof e.refresh_token!="string"||!e.refresh_token))throw new C("refresh_failed");return{tokens:{accessToken:n,...r!==void 0?{expiresAt:r}:{},...typeof e.refresh_token=="string"&&e.refresh_token?{refreshToken:e.refresh_token}:{},...typeof e.scope=="string"?{scopes:e.scope.split(t==="github-copilot"?/[,\s]+/:/\s+/).filter(Boolean)}:{}},...typeof e.id_token=="string"?{idToken:e.id_token}:{}}}c(Pr,"loginTokens");async function ul(e,t){let n=Ne(e.service,e.issuer);if(n.discovery){let o=await cn(t,n.discovery,{signal:e.signal}),r=e.service==="radius"?o.body.authorizationEndpoint:o.body.authorization_endpoint;if(o.status!==200||typeof r!="string")throw new C("invalid_session");let i=Nt(r);if(e.service!=="radius"&&i.origin!==new URL(n.token).origin)throw new C("invalid_session");return{...n,authorization:i.href}}if(!n.authorization)throw new C("invalid_session");return{...n,authorization:n.authorization}}c(ul,"authorizationEndpoints");async function dl(e){e={...e,scopes:[...e.scopes]},e.signal?.throwIfAborted();let t=to(e.redirectUri);if(t.username||t.password||t.search||t.hash||t.protocol!=="https:"&&!(t.protocol==="http:"&&["localhost","127.0.0.1","[::1]"].includes(t.hostname)))throw new C("invalid_session");if(e.service!=="openrouter"&&!e.clientId?.trim())throw new C("invalid_session");let n=c((...u)=>(e.fetch??globalThis.fetch)(...u),"fetcher"),o=await ul(e,n),r=Er(32).toString("base64url"),i=Er(32).toString("base64url"),s=Er(32).toString("base64url"),a=new URL(o.authorization);a.searchParams.set("code_challenge",cl("sha256").update(r).digest("base64url")),a.searchParams.set("code_challenge_method","S256"),a.searchParams.set("state",i),a.searchParams.set(e.service==="openrouter"?"callback_url":"redirect_uri",t.href),e.clientId&&a.searchParams.set("client_id",e.clientId),e.service!=="openrouter"&&a.searchParams.set("response_type","code"),e.scopes.length&&a.searchParams.set("scope",e.scopes.join(" ")),e.scopes.includes("openid")&&a.searchParams.set("nonce",s),o.audience&&a.searchParams.set("resource",o.audience);let l=!1,d=new AbortController;return{authorizationUrl:a.href,nonce:s,close(){l=!0,d.abort()},async exchange(u,m){let p=AbortSignal.any([d.signal,...e.signal?[e.signal]:[],...m?[m]:[]]);if(p.throwIfAborted(),l)throw new C("invalid_session");let g=to(u),f=g.searchParams.get("state")??"",v=/^[A-Za-z0-9_-]{43}$/.test(f)&&ll(Buffer.from(f),Buffer.from(i));if(g.origin!==t.origin||g.pathname!==t.pathname||!v||g.searchParams.getAll("state").length!==1||g.searchParams.getAll("code").length!==1||g.searchParams.has("error")||!g.searchParams.get("code"))throw new C("invalid_session");l=!0;let h=g.searchParams.get("code"),y=e.service==="openrouter"?{code:h,code_verifier:r,code_challenge_method:"S256"}:{grant_type:"authorization_code",client_id:e.clientId,code:h,code_verifier:r,redirect_uri:t.href,...e.service==="anthropic"?{state:i}:{},...o.audience?{resource:o.audience}:{}},b=o.jsonToken===!0,w=await cn(n,o.token,{method:"POST",signal:p,headers:{accept:"application/json",...b?{"content-type":"application/json"}:{}},body:b?JSON.stringify(y):new URLSearchParams(y)});if(w.status<200||w.status>=300||w.body.error)throw new C("reauthentication_required");return p.throwIfAborted(),Pr(w.body,e.service)}}}c(dl,"beginOAuthAuthorization");function pl(e,t){return t.throwIfAborted(),new Promise((n,o)=>{let r=setTimeout(()=>{t.removeEventListener("abort",i),n()},e),i=c(()=>{clearTimeout(r),t.removeEventListener("abort",i),o(new DOMException("OAuth device authorization aborted.","AbortError"))},"abort");t.addEventListener("abort",i,{once:!0})})}c(pl,"wait");async function fl(e){if(e={...e,scopes:[...e.scopes]},e.signal?.throwIfAborted(),!e.clientId?.trim())throw new C("invalid_session");let t=Ne(e.service,e.issuer);if(!t.device)throw new C("invalid_session");let n=c((...m)=>(e.fetch??globalThis.fetch)(...m),"fetcher"),o=new URLSearchParams({client_id:e.clientId});e.scopes.length&&e.service!=="kimi-coding"&&e.service!=="meta"&&o.set("scope",e.scopes.join(" "));let r=await cn(n,t.device,{method:"POST",body:o,signal:e.signal,headers:{accept:"application/json"}}),i=r.body;if(r.status<200||r.status>=300||i.error||typeof i.device_code!="string"||!i.device_code||typeof i.user_code!="string"||!i.user_code||typeof i.verification_uri!="string"||typeof i.expires_in!="number"||!Number.isFinite(i.expires_in)||i.expires_in<=0||i.interval!==void 0&&(typeof i.interval!="number"||!Number.isFinite(i.interval)||i.interval<=0))throw new C("refresh_failed");let s=i.device_code,a=Date.now()+i.expires_in*1e3;if(!Number.isFinite(a))throw new C("refresh_failed");let l=typeof i.interval=="number"?i.interval*1e3:5e3,d=new AbortController,u=!1;return{userCode:i.user_code,verificationUri:Nt(i.verification_uri).href,...typeof i.verification_uri_complete=="string"?{verificationUriComplete:Nt(i.verification_uri_complete).href}:{},expiresAt:a,close(){u=!0,d.abort()},async poll(m){if(u)throw new C("invalid_session");u=!0;let p=AbortSignal.any([d.signal,...m?[m]:[],...e.signal?[e.signal]:[]]);for(;Date.now()<a&&(await pl(Math.min(l,a-Date.now()),p),!(Date.now()>=a));){let g=await cn(n,t.token,{method:"POST",signal:p,headers:{accept:"application/json"},body:new URLSearchParams({grant_type:"urn:ietf:params:oauth:grant-type:device_code",client_id:e.clientId,device_code:s})});if(p.throwIfAborted(),g.body.error!=="authorization_pending"){if(g.body.error==="slow_down"){let f=g.body.interval;if(f!==void 0&&(typeof f!="number"||!Number.isFinite(f*1e3)||f<=0))throw new C("refresh_failed");l=Math.max(l+5e3,typeof f=="number"?f*1e3:0);continue}if(g.status<200||g.status>=300||g.body.error)throw new C("reauthentication_required");return Pr(g.body,e.service)}}throw new C("reauthentication_required")}}}c(fl,"beginDeviceAuthorization");function ml(e){if(!Array.isArray(e.tokens))throw new Error("llama-server did not return token IDs.");return e.tokens.map(t=>{let n=typeof t=="number"?t:U(t).id;if(!Number.isSafeInteger(n)||n<0)throw new Error("Invalid llama-server token ID.");return n})}c(ml,"tokenIds");async function hl(e,t,n,o){let r=c(async a=>ml(await wo(e,"/tokenize",n,o,{model:e.model,content:a,add_special:!1,parse_special:!1})),"tokenize"),i=await r(`
136
- `),s=[];for(let a of t){let l=await r(`
137
- ${a}`);if(l.length!==i.length+1||i.some((d,u)=>l[u]!==d)||s.includes(l.at(-1)))throw new Error("Classifier labels require distinct single tokens after the prompt boundary.");s.push(l.at(-1))}return s}c(hl,"labelTokens");function gl(e,t){let n=e.completion_probabilities??e.probs;if(!Array.isArray(n)||n.length!==1)throw new Error("llama-server did not return one native token distribution.");let o=U(n[0]);if(!Array.isArray(o.top_logprobs))throw new Error("llama-server did not return pre-sampling log-probabilities.");let r=new Map;for(let i of o.top_logprobs){let s=U(i);if(!Number.isSafeInteger(s.id)||typeof s.logprob!="number"||!Number.isFinite(s.logprob)||s.logprob>0||r.has(s.id))throw new Error("Invalid llama-server token log-probability.");r.set(s.id,s.logprob)}return t.map(i=>r.get(i))}c(gl,"nextLogprobs");function yl(e,t,n){let o=Math.max(...n),r=n.map(l=>Math.exp(l-o)),i=r.reduce((l,d)=>l+d,0),s=Object.fromEntries(t.map((l,d)=>[l,r[d]/i]));if(e.type==="bool")return{type:"bool",probability:s.true};let a=Math.max(...Object.values(s));return e.type==="score"?{type:"score",score:t.reduce((l,d)=>l+Number(d)*s[d],0),confidence:a,probabilities:s}:{type:"choice",choice:t[r.indexOf(Math.max(...r))],confidence:a,probabilities:s}}c(yl,"labelAnswer");function js(e,t,n){return be(e,"classifier",n,async(o,r)=>{let i={},s=0,a=0,l=!1;for(let[d,u]of Object.entries(t.questions)){let m=u.type==="bool"?["false","true"]:Object.keys(u.criteria),p=m.map((y,b)=>String(b)),g=await hl(e,p,o,r),f=Object.fromEntries(p.map((y,b)=>[y,u.type==="bool"?u.criteria?.[m[b]]??m[b]:u.type==="choice"?{value:m[b],description:u.criteria[m[b]]}:u.criteria[b]])),v=await wo(e,"/apply-template",o,r,{model:e.model,add_generation_prompt:!0,messages:[{role:"system",content:"Evaluate the supplied evidence. Select exactly one numeric option. Reply with its number only."},{role:"user",content:JSON.stringify({state:t.state,instructions:u.instructions,options:f})}]});if(typeof v.prompt!="string")throw new Error("llama-server did not return a rendered prompt.");let h=[];for(let y of[Math.max(32,m.length*4),512,4096]){let b=await Me(e,"/completion",o,r,{model:e.model,prompt:`${v.prompt}
138
- `,n_predict:1,n_probs:y,post_sampling_probs:!1,temperature:0,cache_prompt:!0},w=>({body:w,usage:Te({input_tokens:w.tokens_evaluated,output_tokens:w.tokens_predicted})}));if(b.usage&&(l=!0,s+=b.usage.inputTokens,a+=b.usage.outputTokens),h=gl(b.body,g),h.every(w=>w!==void 0))break}if(h.some(y=>y===void 0))throw new Error("llama-server did not rank every classification label within the bounded readout.");i[d]=yl(u,m,h)}return{model:e.model,answers:i,...l?{usage:{inputTokens:s,outputTokens:a,totalTokens:s+a}}:{}}},{anonymous:!0,retry:!t.singleAttempt})}c(js,"classifyLlama");async function $t(e,t,n=!1){if(t?.throwIfAborted(),typeof e.data!="string"||!e.data||e.data.length>Math.ceil(10*1024*1024/3)*4||!/^[A-Za-z0-9+/]*={0,2}$/.test(e.data))throw new Error("Invalid or oversized operation image base64.");let o=Buffer.from(e.data,"base64");if(o.toString("base64")!==e.data)throw new Error("Operation image requires canonical base64.");if(n&&e.mediaType==="image/svg+xml")return{data:e.data,mediaType:e.mediaType,validation:{status:"unverified",reason:"unsupported_format"}};let r=await yo(o);if(t?.throwIfAborted(),r.status!=="valid")throw new Error(`Operation image could not be admitted: ${r.status}.`);if(e.mediaType&&e.mediaType!==r.mediaType)throw new Error("Operation image MIME does not match its bytes.");return{data:e.data,mediaType:r.mediaType,validation:r}}c($t,"admitOperationImage");function Kt(e){return`data:${e.mediaType};base64,${e.data}`}c(Kt,"imageDataUrl");function xr(e){if(typeof e!="number"||!Number.isFinite(e)||e<0||e>1)throw new Error("Invalid native classification probability.");return e}c(xr,"probability");function bl(e,t){let n=U(e);if(Object.keys(n).length!==t.length||t.some(r=>!Object.hasOwn(n,r)))throw new Error("Incomplete native classification distribution.");let o=Object.fromEntries(t.map(r=>[r,xr(n[r])]));if(Math.abs(Object.values(o).reduce((r,i)=>r+i,0)-1)>.02)throw new Error("Unnormalized native classification distribution.");return o}c(bl,"distribution");function vl(e,t){let n=U(t);if(n.type!==(e.type==="bool"?"noul":e.type))throw new Error("Native classification answer type mismatch.");if(e.type==="bool")return{type:"bool",probability:xr(n.noul)};let o=e.type==="choice"?Object.keys(e.criteria):e.criteria.map((s,a)=>String(a)),r=bl(n.probabilities,o),i=n.confidence===void 0||n.confidence===null?void 0:xr(n.confidence);if(e.type==="choice"){if(typeof n.choice!="string"||!o.includes(n.choice))throw new Error("Unknown native classification choice.");return{type:"choice",choice:n.choice,...i!==void 0?{confidence:i}:{},probabilities:r}}if(typeof n.score!="number"||!Number.isFinite(n.score)||n.score<0||n.score>o.length-1)throw new Error("Invalid native classification score.");return{type:"score",score:n.score,...i!==void 0?{confidence:i}:{},probabilities:r}}c(vl,"answer");function wl(e){let t=Object.entries(e.questions);if(!t.length||t.length>400||t.some(([n,o])=>!n.trim()||typeof o.instructions!="string"||!["bool","choice","score"].includes(o.type)))throw new Error("Invalid classification questions.");for(let[,n]of t){if(n.type==="bool")continue;let o=Object.keys(n.criteria);if(o.length<2||o.length>(n.type==="score"?10:255)||o.some(r=>!r.trim())||Object.values(n.criteria).some(r=>typeof r!="string"))throw new Error("Invalid classification criteria.")}}c(wl,"validateQuestions");function _l(e){return Object.entries(e.questions).map(([t,n])=>({name:t,instructions:n.type==="bool"&&n.criteria?`${n.instructions}
139
- Boolean criteria:
140
- ${JSON.stringify(n.criteria)}`:n.instructions,type:n.type==="bool"?"predicate":n.type,...n.type==="score"?{levels:n.criteria}:n.type==="choice"?{choices:Object.entries(n.criteria).map(([o,r])=>({value:o,description:r}))}:{}}))}c(_l,"decisionsQuestions");function kl(e,t){if(!Array.isArray(e.answers)||e.answers.length!==Object.keys(t.questions).length)throw new Error("Incomplete native classification answers.");let n=e.answers.map((o,r)=>{let i=U(o),s=Object.keys(t.questions)[r];if(i.name!==s)throw new Error("Native classification answer order/name mismatch.");if(i.type==="refusal")return[s,i];if(i.type==="predicate")return[s,{type:"noul",noul:i.probability}];if(!Array.isArray(i.probabilities))throw new Error("Missing native classification distribution.");let a=i.probabilities.map(l=>{let d=U(l);return[String(d.value),d.probability]});if(new Set(a.map(([l])=>l)).size!==a.length)throw new Error("Duplicate native classification labels.");return[s,{...i,probabilities:Object.fromEntries(a)}]});return Object.fromEntries(n)}c(kl,"decisionsAnswers");function Cl(e){if(e.success!==!0)throw new Error("Cloudflare classification failed.");let t=U(e.result);if(t.state!==void 0){if(t.state!=="Completed")throw new Error("Cloudflare classification run is not completed.");return U(t.result)}if(t.status!==void 0){if(t.status!=="completed")throw new Error("Cloudflare classification run is not completed.");return U(t.result)}return t}c(Cl,"unwrapCloudflare");async function El(e,t,n,o){let r={state:t.state},i=[];for(let[s,a]of Object.entries(t.images??{})){if(!s.trim())throw new Error("Classification images require non-empty names.");i.push([s,await $t(a,o)])}if(!i.length)return r;if(e.api==="openai-decisions")r.input=[{role:"user",content:[typeof t.state=="string"?{type:"input_text",text:t.state}:{type:"input_json",data:t.state},...i.map(([,s])=>({type:"input_image",image_url:Kt(s),detail:"auto"}))]}];else if(e.dialect==="openrouter-system-one")r.state=[...i.map(([,s])=>({type:"image_url",image_url:{url:Kt(s)}})),t.state];else if(e.dialect==="cloudflare-clef"){if(i.length>4)throw new Error("Clef accepts at most four images.");let s=0,{imageSize:a}=await import("image-size");for(let[,l]of i){let d=Buffer.from(l.data,"base64");s+=d.length;let u=a(d);if(!["image/png","image/jpeg","image/webp"].includes(l.mediaType)||d.length>4*1024*1024||!u.width||!u.height||u.width*u.height>16e6)throw new Error("Clef image exceeds the native format/size limit.")}if(s>8*1024*1024)throw new Error("Clef images exceed the native total limit.");r.images=i.map(([,l])=>Kt(l))}else{if(i.some(([,s])=>!["image/png","image/jpeg"].includes(s.mediaType)))throw new Error("System One assets require PNG or JPEG.");r.assets=Object.fromEntries(i.map(([s,a])=>[s,{type:"image",format:a.mediaType==="image/png"?"png":"jpeg",data_base64:a.data}])),r.state=[...i.map(([s])=>s),t.state],e.api==="typesafe-system-one"&&n.set("TypeSafe-Danger-Zone-Images","true")}return r}c(El,"classifierEvidence");async function Pl(e,t,n){if(e={...e},t=structuredClone(t),wl(t),e.api==="llama-cpp-classify"){if(Object.keys(t.images??{}).length)throw new Error("llama-cpp classification does not support image input.");return js(e,t,n)}if(!["typesafe-system-one","cloudflare-workers-ai-system-one","openai-decisions"].includes(e.api))throw new Error("Unsupported classifier API.");if(e.api==="cloudflare-workers-ai-system-one"&&!["cloudflare-jev","cloudflare-clef"].includes(e.dialect??""))throw new Error("Select an explicit Cloudflare classifier dialect.");if(e.dialect==="cloudflare-clef"&&(!["clef","clef-flash"].includes(e.model)||Object.keys(t.questions).length>64||Object.keys(t.questions).some(o=>!/^[\w.-]{1,100}$/.test(o))))throw new Error("Invalid Clef model or questions.");return be(e,"classifier",n,async(o,r)=>{let i=Object.fromEntries(Object.entries(t.questions).map(([u,m])=>[u,{...m,type:m.type==="bool"?"noul":m.type}])),s={...await El(e,t,o,r),questions:i},a=e.api==="openai-decisions",l=a?"/decisions":e.api==="cloudflare-workers-ai-system-one"?e.dialect==="cloudflare-jev"?"/ai/run":`/ai/run/@cf/cloudflare/${e.model}`:"/systemone",d=a?{model:e.model,input:s.input??(typeof t.state=="string"?t.state:[{role:"user",content:[{type:"input_json",data:t.state}]}]),questions:_l(t)}:e.dialect==="cloudflare-jev"?{model:e.model,input:s}:{model:e.model,...s};return Me(e,l,o,r,d,u=>{let m=e.api==="cloudflare-workers-ai-system-one"?Cl(u):u,p=a?kl(m,t):U(m.answers);if(Object.keys(p).length!==Object.keys(i).length)throw new Error("Incomplete native classification answers.");let g=Object.fromEntries(Object.entries(t.questions).map(([f,v])=>[f,a&&U(p[f]).type==="refusal"?{type:"refusal"}:vl(v,p[f])]));return{model:typeof m.model=="string"?m.model:e.model,answers:g,usage:Te(m.usage)}})},{retry:!t.singleAttempt})}c(Pl,"classify");async function Ns(e,t,n){let o,r;if(t==="images"){if(!Array.isArray(e.data))throw new Error("Image generation returned no image data.");o=e.data}else{if(!Array.isArray(e.choices)||e.choices.length!==1)throw new Error("Image generation requires one completed choice.");let a=U(e.choices[0]);if(a.finish_reason!=="stop")throw new Error("Image generation did not complete.");let l=U(a.message);if(!Array.isArray(l.images))throw new Error("Image generation returned no image data.");r=typeof l.content=="string"?l.content:void 0,o=l.images.map(d=>{let u=U(d),m=typeof u.image_url=="string"?u.image_url:U(u.image_url).url,p=typeof m=="string"?/^data:(image\/[a-z0-9.+-]+);base64,([A-Za-z0-9+/=]+)$/.exec(m):null;if(!p)throw new Error("Generated images require inline bytes; output URLs are not downloaded.");return{b64_json:p[2],media_type:p[1]}})}if(!o.length||o.length>10)throw new Error("Image generation returned an invalid image count.");let i=[];for(let a of o){let l=U(a);if(typeof l.b64_json!="string"||l.media_type!==void 0&&typeof l.media_type!="string")throw new Error("Invalid generated image data.");i.push(await $t({data:l.b64_json,mediaType:l.media_type},n,!0))}let s=e.usage===void 0?void 0:U(e.usage).cost;if(s!==void 0&&(typeof s!="number"||!Number.isFinite(s)||s<0))throw new Error("Invalid reported image cost.");return{images:i,...r!==void 0?{text:r}:{},usage:Te(e.usage),...s!==void 0?{cost:{amount:s,currency:"USD",source:"reported"}}:{}}}c(Ns,"parseImages");async function xl(e,t,n){let o=[],r=!1,i;for await(let s of Gr(e,n,{maxFrameBytes:24*1024*1024,onDone:c(()=>{if(r)throw new Error("Duplicate image stream terminal.");r=!0},"onDone")})){if(r)throw new Error("Image event follows the terminal marker.");let a=U(s);if(a.type==="image_generation.partial_image"){if(!Number.isSafeInteger(a.partial_image_index)||a.partial_image_index<0||typeof a.b64_json!="string")throw new Error("Invalid image preview event.");let l=await $t({data:a.b64_json,mediaType:typeof a.media_type=="string"?a.media_type:void 0},n,!0);await t.onPreview?.(l,a.partial_image_index)}else if(a.type==="image_generation.completed"){if(o.length>=10)throw new Error("Image stream exceeds the image count limit.");o.push(a),i=a.usage}else throw new Error("Image stream failed or returned an unknown event.")}if(!r||!o.length)throw new Error("Image stream did not reach a completed terminal.");return Ns({data:o,usage:i},"images",n)}c(xl,"streamImages");async function Tl(e,t,n){let o=t.onPreview;if(e={...e},t={...structuredClone({...t,onPreview:void 0}),onPreview:o},e.api!=="openrouter-images"||!["images","chat-completions"].includes(e.dialect))throw new Error("Select an explicit image API dialect.");if(typeof t.prompt!="string"||!t.prompt.trim())throw new Error("Image generation requires a prompt.");if(t.stream&&e.dialect!=="images")throw new Error("Image SSE requires the dedicated image API dialect.");if(Object.keys(t.parameters??{}).some(r=>["model","prompt","stream","messages","images","input_references","modalities"].includes(r)))throw new Error("Image parameters cannot override core request fields.");return be(e,"utility",n,async(r,i)=>{let s=[];for(let l of t.images??[])s.push({type:"image_url",image_url:{url:Kt(await $t(l,i))}});let a=e.dialect==="images"?{...t.parameters,model:e.model,prompt:t.prompt,stream:t.stream??!1,...s.length?{input_references:s}:{}}:{...t.parameters,model:e.model,modalities:["image","text"],stream:!1,messages:[{role:"user",content:[{type:"text",text:t.prompt},...s]}]};return t.stream?fn(e.name,e.model,async()=>{r.set("accept","text/event-stream");let l=await qr(We(e,"/images"),{method:"POST",headers:r,signal:i,body:JSON.stringify(a)});return xl(l,t,i)},!0):Me(e,e.dialect==="images"?"/images":"/chat/completions",r,i,a,l=>Ns(l,e.dialect,i))})}c(Tl,"generateImages");import{createHash as Al}from"node:crypto";var oo=class extends L{static{c(this,"KodaXDeferredOutputError")}reference;partialUsage;usageKind="cumulative";usageId;constructor(t,n,o,r){super("Deferred response contains invalid completed output.",t,{failureCode:"response_stream_error",stage:"response_stream",retryable:!1}),this.reference=n,this.partialUsage=o,this.name="KodaXDeferredOutputError",this.cause=r,this.usageId=`${n.scope}:${n.id}`}};function Tr(e){if(e.api!=="openai-background-responses"||typeof e.accountScope!="string"||!e.accountScope.trim())throw new Error("Deferred operations require an explicit trusted account scope.");return Ye(e.toolCapabilities),Al("sha256").update(JSON.stringify([e.name,e.api,e.model,We(e,""),e.accountScope])).digest("hex")}c(Tr,"connectionScope");function Rl(e,t){if(!t||t.version!==1||typeof t.id!="string"||!/^[A-Za-z0-9_-]{1,200}$/.test(t.id)||t.scope!==Tr(e))throw new Error("Deferred reference does not match the authorized connection/account.");$s(t.customToolProperties)}c(Rl,"validateReference");function $s(e){if(e!==void 0){let t=U(e);if(Object.keys(t).length>128||Object.entries(t).some(([n,o])=>!n.trim()||n.length>256||typeof o!="string"||!o.trim()||o.length>256))throw new Error("Invalid deferred tool conversion data.")}}c($s,"validateCustomProperties");function Ks(e){let t=Ft(e.name)??zt(e.name,e.credentialSource==="broker"?void 0:e.apiKeyEnv?process.env[e.apiKeyEnv]:void 0);return{provider:e.name,api:"openai-responses",model:e.model,baseUrl:e.baseUrl,credentialScope:Bt(t,Dr())}}c(Ks,"source");function Ls(e,t,n,o=new Map){if(typeof t.id!="string"||!/^[A-Za-z0-9_-]{1,200}$/.test(t.id)||n&&t.id!==n.id)throw new Error("Invalid deferred response identity.");let r=n??{version:1,id:t.id,scope:Tr(e),...o.size?{customToolProperties:Object.fromEntries(o)}:{}};if(t.status==="queued"||t.status==="in_progress")return{status:t.status,reference:r};if(t.status==="failed"||t.status==="cancelled"||t.status==="incomplete"){let l=t.status==="incomplete"&&t.incomplete_details?U(t.incomplete_details).reason:void 0;return{status:t.status,reference:r,usageKind:"cumulative",usageId:`${r.scope}:${r.id}`,partialUsage:Te(t.usage),...l==="max_output_tokens"||l==="content_filter"?{reason:l}:{}}}if(t.status!=="completed"||t.error)throw new Error("Invalid deferred response terminal.");let i=Te(t.usage),s;try{s=vn(t,Ks(e),void 0,new Map(Object.entries(r.customToolProperties??{})))}catch(l){throw new oo(e.name,r,i,l)}let a=s.filter(l=>l.type==="tool_use");return{status:"completed",reference:r,usageKind:"cumulative",usageId:`${r.scope}:${r.id}`,result:{contentBlocks:s,textBlocks:s.filter(l=>l.type==="text"),thinkingBlocks:s.filter(l=>l.type==="thinking"||l.type==="redacted_thinking"),toolBlocks:a,stopReason:a.length?"tool_use":"end_turn",usage:i}}}c(Ls,"decode");async function Sl(e,t){let n=new Map;for(let o of e.messages)if(typeof o.content!="string")for(let r of o.content){let i=r.type==="image"?[r]:r.type==="tool_result"&&typeof r.content!="string"?r.content.filter(s=>s.type==="image"):[];for(let s of i){let a=await xe(s);n.set(s,"placeholder"in a?[{type:"input_text",text:a.placeholder}]:[{type:"input_image",image_url:`data:${a.mediaType};base64,${a.data}`,detail:"auto"}])}}return wt(e.messages,t,o=>n.get(o))}c(Sl,"deferredInput");async function Ml(e,t,n){if(e=structuredClone(e),t=structuredClone(t),Tr(e),!Number.isSafeInteger(t.maxOutputTokens)||t.maxOutputTokens<=0)throw new Error("Deferred requests require an explicit positive output budget.");return be(e,"utility",n,async(o,r)=>{let i=await Sl(t,Ks(e)),s=pn(t.tools,e.toolCapabilities??{},e.name);$s(Object.fromEntries(s.customProperties));let a={model:e.model,input:i,instructions:t.system,background:!0,store:t.store??!1,stream:!1,include:["reasoning.encrypted_content"],max_output_tokens:t.maxOutputTokens,...t.effort?{reasoning:{effort:t.effort}}:{},...t.tools.length?{tools:s.tools}:{}};return(await Me(e,"/responses",o,r,a,d=>{["completed","failed","cancelled","incomplete"].includes(d.status)&&Ue(Te(d.usage));let u=Ls(e,d,void 0,s.customProperties);return{value:u,...u.status==="completed"?{usage:u.result.usage}:{}}})).value})}c(Ml,"submitDeferred");async function Us(e,t,n,o){return e=structuredClone(e),t=structuredClone(t),Rl(e,t),t={version:1,id:t.id,scope:t.scope,...t.customToolProperties?{customToolProperties:t.customToolProperties}:{}},be(e,"utility",o,(r,i)=>Me(e,`/responses/${encodeURIComponent(t.id)}${n?"/cancel":""}`,r,i,void 0,s=>Ls(e,s,t),n?"POST":"GET"))}c(Us,"act");function Il(e,t,n){return Us(e,t,!1,n)}c(Il,"fetchDeferred");function Ol(e,t,n){return Us(e,t,!0,n)}c(Ol,"cancelDeferred");function Dl(e,t){let n=Cr().find(i=>i.id===e);if(!n||!(t.api==="openrouter-images"?n.imageApi===t.api:t.api==="openai-background-responses"?e==="openai":n.classifierApi===t.api))throw new Error("Provider does not declare this operation.");let o=t.baseUrl??(e==="typesafe"?"https://api.typesafe.ai/v1":e==="vercel-ai-gateway"&&t.api==="typesafe-system-one"?`${n.baseUrl}/typesafe/v1`:n.baseUrl);if(!o)throw new Error("Operation requires an explicit account/model endpoint.");let r={...t,baseUrl:o,apiKeyEnv:t.apiKeyEnv??n.apiKeyEnv};if(!/^[A-Za-z_]\w*$/.test(r.apiKeyEnv))throw new Error("Invalid operation credential environment name.");if(r.api==="typesafe-system-one"&&e==="openrouter"&&(r.dialect??="openrouter-system-one"),r.api==="openai-background-responses"&&!r.accountScope?.trim())throw new Error("Deferred operation requires an explicit account scope.");return We(r,""),r}c(Dl,"createProviderOperationConnection");import{createHash as jl,randomUUID as io}from"node:crypto";import{chmod as Ws,mkdir as Hs,open as Bs,readFile as Nl,realpath as $l,rename as Kl,unlink as Ll,lstat as Xs}from"node:fs/promises";import ve from"node:path";import{execFile as Fs}from"node:child_process";import{promisify as zs}from"node:util";import Ul from"proper-lockfile";var ao=class extends Error{static{c(this,"CredentialUpdateConflictError")}constructor(){super("Credential update conflict. Refresh its state before retrying."),this.name="CredentialUpdateConflictError"}};function X(){return new C("storage_failed")}c(X,"failure");function qs(e){return!!e&&typeof e=="object"&&"code"in e&&e.code==="ENOENT"}c(qs,"missing");function ft(e){return!!e&&typeof e=="object"&&!Array.isArray(e)}c(ft,"object");function Re(e){return typeof e=="string"&&!!e.trim()&&!/[\r\n]/.test(e)}c(Re,"secret");function pt(e){if(!e||Object.keys(e).some(t=>!["profile","provider","connectionFingerprint"].includes(t))||typeof e.profile!="string"||!e.profile.trim()||typeof e.provider!="string"||!e.provider.trim()||!/^[a-f0-9]{64}$/.test(e.connectionFingerprint))throw X();return jl("sha256").update(JSON.stringify([e.profile,e.provider,e.connectionFingerprint])).digest("hex")}c(pt,"bindingId");function Gs(e,t){return!ft(e)||Object.keys(e).some(n=>!["id","service","clientId","issuer","accountId","identityKind","profile","credentials","resource"].includes(n))||e.id!==t||!Re(e.clientId)||!Re(e.accountId)||!["openai-chatgpt","openai-codex","github-copilot","anthropic","openrouter","kimi-coding","meta","xai","radius"].includes(String(e.service))||e.issuer!==void 0&&!Re(e.issuer)||e.profile!==void 0&&(typeof e.profile!="string"||!e.profile.trim())||e.identityKind!==void 0&&!["account","grant"].includes(String(e.identityKind))?!1:[e.credentials,e.resource].every(n=>n===void 0||ft(n)&&Object.keys(n).every(o=>["accessToken","refreshToken","expiresAt","scopes","earliestRefreshAt"].includes(o))&&Re(n.accessToken)&&(n.refreshToken===void 0||Re(n.refreshToken))&&(n.expiresAt===void 0||typeof n.expiresAt=="number"&&Number.isFinite(n.expiresAt))&&(n.earliestRefreshAt===void 0||typeof n.earliestRefreshAt=="number"&&Number.isFinite(n.earliestRefreshAt))&&(n.scopes===void 0||Array.isArray(n.scopes)&&n.scopes.every(o=>typeof o=="string")))}c(Gs,"validRegistration");function Vs(e){if(!ft(e)||e.version!==1&&e.version!==2||!ft(e.apiKeys)||!ft(e.oauth)||Object.keys(e).some(t=>!["version","apiKeys","oauth"].includes(t)))throw X();for(let[t,n]of Object.entries(e.apiKeys))if(!ft(n)||Object.keys(n).some(o=>!["binding","key","revision"].includes(o))||!ft(n.binding)||(e.version===1||n.key!==void 0)&&!Re(n.key)||!Re(n.revision)||pt(n.binding)!==t)throw X();for(let[t,n]of Object.entries(e.oauth))if(!Gs(n,t))throw X();return{...e,version:2}}c(Vs,"document");async function so(e){try{let t=await Xs(e);if(!t.isFile()||t.isSymbolicLink()||t.size>4*1024*1024)throw X();return Vs(JSON.parse(await Nl(e,"utf8")))}catch(t){if(qs(t))return{version:2,apiKeys:{},oauth:{}};throw X()}}c(so,"readDocument");var ro;async function Rr(e,t=!1){if(process.platform!=="win32")return;let n=process.env.SystemRoot;if(!n||!ve.isAbsolute(n))throw X();let o=ve.join(n,"System32");if(!ro&&(ro=(await zs(Fs)(ve.join(o,"whoami.exe"),["/user","/fo","csv","/nh"],{windowsHide:!0,timeout:1e4})).stdout.match(/"(S-[0-9-]+)"/)?.[1],!ro))throw X();let r=["$ErrorActionPreference='Stop'","$directory=$env:KODAX_AUTH_DIRECTORY -eq '1'","$security=if($directory){[Security.AccessControl.DirectorySecurity]::new()}else{[Security.AccessControl.FileSecurity]::new()}","$security.SetAccessRuleProtection($true,$false)","$inheritance=if($directory){[Security.AccessControl.InheritanceFlags]3}else{[Security.AccessControl.InheritanceFlags]0}","foreach($value in @($env:KODAX_AUTH_SID,'S-1-5-18')){","$sid=[Security.Principal.SecurityIdentifier]::new($value)","$rule=[Security.AccessControl.FileSystemAccessRule]::new($sid,[Security.AccessControl.FileSystemRights]::FullControl,$inheritance,[Security.AccessControl.PropagationFlags]::None,[Security.AccessControl.AccessControlType]::Allow)","$security.AddAccessRule($rule)","}","if($directory){[IO.Directory]::SetAccessControl($env:KODAX_AUTH_FILE,$security)}else{[IO.File]::SetAccessControl($env:KODAX_AUTH_FILE,$security)}"].join(`
141
- `);await zs(Fs)(ve.join(o,"WindowsPowerShell","v1.0","powershell.exe"),["-NoLogo","-NoProfile","-NonInteractive","-EncodedCommand",Buffer.from(r,"utf16le").toString("base64")],{windowsHide:!0,timeout:1e4,env:{...process.env,KODAX_AUTH_FILE:e,KODAX_AUTH_SID:ro,KODAX_AUTH_DIRECTORY:t?"1":"0"}})}c(Rr,"protectFile");async function Js(e){let t=`${e}.staging`;await Hs(t,{recursive:!0,mode:448});let n=await Xs(t);if(!n.isDirectory()||n.isSymbolicLink())throw X();return process.platform==="win32"?await Rr(t,!0):await Ws(t,448),t}c(Js,"prepareStaging");async function Bl(e,t,n){let o=Buffer.from(JSON.stringify(t,null,2)+`
142
- `);if(o.length>4*1024*1024)throw X();let r=await Js(e),i=ve.join(r,`${io()}.tmp`);try{let s=await Bs(i,"wx",384);try{if(await Rr(i),!n())throw X();await s.writeFile(o),await s.sync()}finally{await s.close()}if(!n())throw X();if(await Kl(i,e),process.platform!=="win32"){let a=await Bs(ve.dirname(e),"r");try{await a.sync()}finally{await a.close()}}}catch{throw X()}finally{o.fill(0);try{await Ll(i)}catch(s){if(!qs(s))throw X()}}}c(Bl,"writeDocument");async function ln(e,t,n=!1){let o=!1,r;try{r=await Ul.lock(e,{realpath:!1,stale:3e4,update:5e3,retries:{retries:300,factor:1,minTimeout:100,maxTimeout:100},onCompromised:c(()=>{o=!0},"onCompromised")})}catch{throw X()}try{let i=await so(e),s=JSON.stringify(i),a=await t(i);if(Vs(i),o||((JSON.stringify(i)!==s||n&&!Object.keys(i.apiKeys).length&&!Object.keys(i.oauth).length)&&await Bl(e,i,()=>!o),o))throw X();return a}finally{try{await r()}catch{throw X()}}}c(ln,"transaction");function dt(e,t){return Object.hasOwn(e,t)?e[t]:void 0}c(dt,"own");function Ar(e,t){if(t!==void 0&&(e?.revision??null)!==t)throw new ao}c(Ar,"expectRevision");function Fl(e){if(!ve.isAbsolute(e))throw new Error("Credential store requires an absolute trusted path.");let t=c(async()=>(await Hs(ve.dirname(e),{recursive:!0,mode:448}),ve.join(await $l(ve.dirname(e)),ve.basename(e))),"canonical"),n=c(async i=>{let s=pt(i),a=await so(await t()),l=dt(a.apiKeys,s);return l?.key?{key:l.key,revision:l.revision}:void 0},"readApiKey"),o=c(i=>i?{configured:!0,revision:i.revision}:{configured:!1},"status"),r={async transact(i,s){if(typeof i!="string"||!i.trim()||i.length>512)throw X();let a=await t();return Es(r,"file:"+(process.platform==="win32"?a.toLowerCase():a)),ln(a,async l=>{let d=dt(l.oauth,i),u=await s(d?structuredClone(d):void 0);if(u.record){if(!Gs(u.record,i)||d&&(d.service!==u.record.service||d.clientId!==u.record.clientId||d.accountId!==u.record.accountId||d.issuer!==u.record.issuer||d.identityKind!==u.record.identityKind||d.profile!==u.record.profile))throw X();Object.defineProperty(l.oauth,i,{value:structuredClone(u.record),enumerable:!0,configurable:!0,writable:!0})}else delete l.oauth[i];return u.result})}};return{filePath:e,async readApiKeys(i){let s=i.map(l=>({binding:structuredClone(l),id:pt(l)})),a=await so(await t());return s.map(({binding:l,id:d})=>{let u=dt(a.apiKeys,d);return{binding:l,revision:u?.revision??null,...u?.key===void 0?{}:{key:u.key}}})},async updateApiKeys(i){let s=structuredClone(i).map(a=>({...a,id:pt(a.binding)}));if(new Set(s.map(a=>a.id)).size!==s.length||s.some(a=>a.expectedRevision!==null&&!Re(a.expectedRevision)||a.key!==void 0&&!Re(a.key)))throw X();return ln(await t(),async a=>{for(let l of s)Ar(dt(a.apiKeys,l.id),l.expectedRevision);return s.map(l=>{let d=io();return a.apiKeys[l.id]={binding:l.binding,revision:d,...l.key===void 0?{}:{key:l.key}},l.key===void 0?{configured:!1,revision:d}:{configured:!0,revision:d}})})},async initialize(){let i=await t();await Js(i),await ln(i,async()=>{},!0),process.platform==="win32"?await Rr(i):await Ws(i,384)},readApiKey:n,describeApiKey:c(async i=>{let s=dt((await so(await t())).apiKeys,pt(i));return s?.key?o({key:s.key,revision:s.revision}):{configured:!1,...s?{revision:s.revision}:{}}},"describeApiKey"),async setApiKey(i,s,a){i=structuredClone(i);let l=pt(i);if(!Re(s))throw X();return ln(await t(),async d=>{Ar(dt(d.apiKeys,l),a);let u={binding:i,key:s,revision:io()};return d.apiKeys[l]=u,{configured:!0,revision:u.revision}})},async removeApiKey(i,s){let a=pt(i);return ln(await t(),async l=>{Ar(dt(l.apiKeys,a),s);let d=io();return l.apiKeys[a]={binding:structuredClone(i),revision:d},{configured:!1,revision:d}})},oauth:r}}c(Fl,"createFileProviderCredentialStore");function zl(e){let t=new Map(e.bindings.map(n=>[n.provider,{...n}]));if(!t.size||t.size!==e.bindings.length||[...t.values()].some(n=>!n.provider.trim()||!n.profile.trim()||!/^[a-f0-9]{64}$/.test(n.connectionFingerprint)||n.cloud!==void 0&&!["gemini","vertex","azure","bedrock"].includes(n.cloud)))throw new Error("Invalid approved credential bindings.");return{allowedProviders:[...t.keys()],async acquire(n,o,r,i,s){r.throwIfAborted();let a=t.get(n);if(!a||a.connectionFingerprint!==s)throw new Error("Provider credential connection is not approved.");let{cloud:l,...d}=a,u=await e.store.readApiKey(d);if(r.throwIfAborted(),!u)throw new Error("Stored provider credential is unavailable.");return l?po(n,l==="bedrock"?{type:"bearer",token:u.key}:{type:"api-key",key:u.key}):u.key}}}c(zl,"createFileProviderCredentialAccess");export{ea as a,ta as b,wt as c,sa as d,yn as e,kt as f,Po as g,Ct as h,xo as i,Et as j,ne as k,Ie as l,Gt as m,_a as n,ka as o,Vt as p,Ro as q,Ca as r,Ea as s,Pa as t,xa as u,oe as v,Xe as w,At as x,Rt as y,Yt as z,Qt as A,re as B,he as C,or as D,Bi as E,Fi as F,zi as G,Wi as H,Hi as I,Xi as J,rr as K,ae as L,Ot as M,tn as N,On as O,Dn as P,lt as Q,zn as R,rs as S,Wn as T,dr as U,jt as V,nn as W,is as X,ss as Y,Hn as Z,Dt as _,Xn as $,cs as aa,qn as ba,on as ca,Gn as da,Vn as ea,ls as fa,mr as ga,Jn as ha,Yn as ia,us as ja,ut as ka,Qn as la,ds as ma,ps as na,fs as oa,Bc as pa,ms as qa,Zn as ra,gr as sa,hr as ta,yr as ua,zc as va,br as wa,vr as xa,Wc as ya,rn as za,Hc as Aa,vs as Ba,Vc as Ca,C as Da,Qc as Ea,el as Fa,Cr as Ga,tl as Ha,Os as Ia,al as Ja,dl as Ka,fl as La,Pl as Ma,Tl as Na,oo as Oa,Ml as Pa,Il as Qa,Ol as Ra,Dl as Sa,ao as Ta,Fl as Ua,zl as Va};