@xenosystem/agent-sdk 0.9.25 → 0.9.27

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 (43) hide show
  1. package/dist/artifacts/index.cjs +1 -1
  2. package/dist/artifacts/index.js +1 -1
  3. package/dist/automation/index.cjs +9 -9
  4. package/dist/automation/index.d.cts +66 -3
  5. package/dist/automation/index.d.ts +66 -3
  6. package/dist/automation/index.js +9 -9
  7. package/dist/automation/metafile-cjs.json +1 -1
  8. package/dist/automation/metafile-esm.json +1 -1
  9. package/dist/control-plane/index.cjs +1 -1
  10. package/dist/control-plane/index.js +1 -1
  11. package/dist/coordination/index.cjs +2 -2
  12. package/dist/coordination/index.d.cts +15 -3
  13. package/dist/coordination/index.d.ts +15 -3
  14. package/dist/coordination/index.js +2 -2
  15. package/dist/coordination/metafile-cjs.json +1 -1
  16. package/dist/coordination/metafile-esm.json +1 -1
  17. package/dist/electron/index.cjs +156 -152
  18. package/dist/electron/index.d.cts +19 -3
  19. package/dist/electron/index.d.ts +19 -3
  20. package/dist/electron/index.js +156 -152
  21. package/dist/electron/metafile-cjs.json +1 -1
  22. package/dist/electron/metafile-esm.json +1 -1
  23. package/dist/index.cjs +472 -342
  24. package/dist/index.d.cts +301 -26
  25. package/dist/index.d.ts +301 -26
  26. package/dist/index.js +472 -342
  27. package/dist/mcp/index.cjs +19 -19
  28. package/dist/mcp/index.d.cts +2 -1
  29. package/dist/mcp/index.d.ts +2 -1
  30. package/dist/mcp/index.js +16 -16
  31. package/dist/mcp/metafile-cjs.json +1 -1
  32. package/dist/mcp/metafile-esm.json +1 -1
  33. package/dist/metafile-cjs.json +1 -1
  34. package/dist/metafile-esm.json +1 -1
  35. package/dist/providers/index.cjs +10 -10
  36. package/dist/providers/index.d.cts +92 -17
  37. package/dist/providers/index.d.ts +92 -17
  38. package/dist/providers/index.js +10 -10
  39. package/dist/providers/metafile-cjs.json +1 -1
  40. package/dist/providers/metafile-esm.json +1 -1
  41. package/dist/session/index.cjs +1 -1
  42. package/dist/session/index.js +1 -1
  43. package/package.json +1 -1
@@ -1,11 +1,11 @@
1
- "use strict";var Re=Object.defineProperty;var Jt=Object.getOwnPropertyDescriptor;var Xt=Object.getOwnPropertyNames;var Vt=Object.prototype.hasOwnProperty;var Ut=(e,t)=>{for(var n in t)Re(e,n,{get:t[n],enumerable:!0})},Bt=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of Xt(t))!Vt.call(e,r)&&r!==n&&Re(e,r,{get:()=>t[r],enumerable:!(o=Jt(t,r))||o.enumerable});return e};var qt=e=>Bt(Re({},"__esModule",{value:!0}),e);var Ao={};Ut(Ao,{BUILT_IN_XENO_PROVIDER_PRESETS:()=>kt,DualLLMProvider:()=>oe,FileXenoProviderConnectionStore:()=>He,ProviderError:()=>y,ToolSchemaProjectionError:()=>C,XENO_PROVIDER_CATALOG_SCHEMA_VERSION:()=>Xe,XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION:()=>ve,XenoProviderCatalog:()=>W,assertDirectEndpointResolution:()=>q,classifyProviderHttpError:()=>ie,createDirectProvider:()=>St,directProviderConfigFromConnection:()=>mo,parseRetryAfter:()=>re,probeXenoProvider:()=>co,projectToolDefinitionsForProvider:()=>fe,projectToolSchemaForProvider:()=>Ne,providerCapabilityError:()=>B,providerProtocolError:()=>h,selectXenoProviderRoute:()=>uo,validateDirectEndpoint:()=>D});module.exports=qt(Ao);var Fe="https://api.xenostudio.ai";var Oo=300*1e3;function We(e,t){return{id:t?.id??"dual",...t?.model?{model:t.model}:{},capabilities:{streaming:!0,tools:!1,vision:!1},async complete(n,o,r,i,s){let a=Ht(o);if(i){let m="";for await(let d of e.chatStream({model:n,messages:a})){if(s?.aborted)break;m+=d,i(d)}return{content:m.length>0?[{type:"text",text:m}]:[],stopReason:"end_turn",usageReported:!1,inputTokens:0,outputTokens:0}}let l=await e.chat({model:n,messages:a});return{content:l.content.length>0?[{type:"text",text:l.content}]:[],stopReason:"end_turn",usageReported:typeof l.usage?.promptTokens=="number",inputTokens:l.usage?.promptTokens??0,outputTokens:l.usage?.completionTokens??0}}}}function Ht(e){let t=[];for(let n of e){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});continue}let o=[];for(let i of n.content)if(i.type==="text")o.push(i.text);else if(i.type==="tool_use")o.push(`[tool_use ${i.name} ${JSON.stringify(i.input)}]`);else if(i.type==="tool_result"){let s=typeof i.content=="string"?i.content:JSON.stringify(i.content);o.push(`[tool_result ${i.tool_use_id}: ${s}]`)}let r=o.join(`
2
- `).trim();r.length>0&&t.push({role:n.role,content:r})}return t}var Kt="http://localhost:3338",Ft=Fe,Wt=2e3,Ce=12e4,Yt=3e4,oe=class{localUrl;cloudUrl;cloudApiKey;mode;defaultLocalModel;defaultCloudModel;localAvailable=null;localModelName=null;lastHealthCheck=0;constructor(t){this.localUrl=t?.localUrl??Kt,this.cloudUrl=t?.cloudUrl??Ft,this.cloudApiKey=t?.cloudApiKey??process.env.XENO_API_KEY??"",this.mode=t?.mode??"auto",this.defaultLocalModel=t?.localModel??"default",this.defaultCloudModel=t?.cloudModel??"claude-sonnet-4-6"}async chat(t){let n=await this.shouldUseLocal();if(this.mode==="local"&&!n)return{success:!1,content:"",endpoint:"local",model:"",usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:"Local xeno-rt is not available and mode is set to local-only"};if(n)try{return await this.chatLocal(t)}catch(o){return this.mode==="local"?{success:!1,content:"",endpoint:"local",model:t.model??this.defaultLocalModel,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:o instanceof Error?o.message:String(o)}:this.chatCloud(t)}return this.chatCloud(t)}async*chatStream(t){let n=await this.shouldUseLocal();if(this.mode==="local"&&!n)throw new Error("Local xeno-rt is not available and mode is set to local-only");let o=n?this.localUrl:this.cloudUrl,r=t.model??(n?this.defaultLocalModel:this.defaultCloudModel),i=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,s={model:r,messages:i,stream:!0,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(s.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(s.stop=t.stop);let a={"Content-Type":"application/json"};n||(a.Authorization=`Bearer ${this.cloudApiKey}`,a["User-Agent"]="XenoAgentSDK/0.4.0");let l=new AbortController,c=setTimeout(()=>l.abort(),Ce);try{let m=await fetch(`${o}/v1/chat/completions`,{method:"POST",headers:a,body:JSON.stringify(s),signal:l.signal});if(!m.ok){let P=await m.text().catch(()=>"");throw new Error(`LLM stream failed (HTTP ${m.status}): ${P}`)}if(!m.body)throw new Error("Response body is null \u2014 streaming not supported");let d=m.body.getReader(),g=new TextDecoder,f="";for(;;){let{done:P,value:x}=await d.read();if(P)break;f+=g.decode(x,{stream:!0});let b=f.split(`
3
- `);f=b.pop()??"";for(let R of b){let k=R.trim();if(!k||!k.startsWith("data: "))continue;let v=k.slice(6);if(v==="[DONE]")return;try{let G=JSON.parse(v).choices[0]?.delta.content;G&&(yield G)}catch{}}}}finally{clearTimeout(c)}}async isLocalAvailable(t=!1){let n=Date.now();if(!t&&this.localAvailable!==null&&n-this.lastHealthCheck<Yt)return this.localAvailable;try{let o=new AbortController,r=setTimeout(()=>o.abort(),Wt);try{let i=await fetch(`${this.localUrl}/v1/models`,{signal:o.signal});if(!i.ok)return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1;let s=await i.json();return this.localModelName=s.data?.[0]?.id??null,this.localAvailable=!0,this.lastHealthCheck=n,!0}finally{clearTimeout(r)}}catch{return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1}}setMode(t){this.mode=t}getMode(){return this.mode}setLocalUrl(t){this.localUrl=t,this.localAvailable=null,this.lastHealthCheck=0}setCloudApiKey(t){this.cloudApiKey=t}async getStatus(){let t=await this.isLocalAvailable(),n;return this.mode==="local"?n="local":this.mode==="cloud"?n="cloud":n=t?"local":"cloud",{mode:this.mode,localAvailable:t,activeEndpoint:n,localModel:this.localModelName??void 0,localUrl:this.localUrl,cloudUrl:this.cloudUrl}}asLLMProvider(t){return We(this,t)}async shouldUseLocal(){return this.mode==="cloud"?!1:this.mode==="local"?this.isLocalAvailable():this.isLocalAvailable()}async chatLocal(t){let n=t.model??this.defaultLocalModel,o=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,r={model:n,messages:o,stream:!1,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(r.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(r.stop=t.stop);let i=new AbortController,s=setTimeout(()=>i.abort(),Ce);try{let a=await fetch(`${this.localUrl}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(r),signal:i.signal});if(!a.ok){let f=await a.text().catch(()=>"");throw new Error(`Local LLM request failed (HTTP ${a.status}): ${f}`)}let l=await a.json(),d=(l.choices?.[0]??{}).message??{},g=l.usage??{};return{success:!0,content:String(d.content??""),endpoint:"local",model:String(l.model??n),usage:{promptTokens:g.prompt_tokens??0,completionTokens:g.completion_tokens??0,totalTokens:g.total_tokens??0}}}finally{clearTimeout(s)}}async chatCloud(t){let n=t.model??this.defaultCloudModel,o=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,r={model:n,messages:o,stream:!1,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(r.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(r.stop=t.stop);let i={"Content-Type":"application/json",Authorization:`Bearer ${this.cloudApiKey}`,"User-Agent":"XenoAgentSDK/0.4.0"},s=new AbortController,a=setTimeout(()=>s.abort(),Ce);try{let l=await fetch(`${this.cloudUrl}/v1/chat/completions`,{method:"POST",headers:i,body:JSON.stringify(r),signal:s.signal});if(!l.ok){let P=`Cloud LLM request failed (HTTP ${l.status})`;try{let b=(await l.json()).error;P=typeof b=="string"?b:b?.message??P}catch{}return{success:!1,content:"",endpoint:"cloud",model:n,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:P}}let c=await l.json(),g=(c.choices?.[0]??{}).message??{},f=c.usage??{};return{success:!0,content:String(g.content??""),endpoint:"cloud",model:String(c.model??n),usage:{promptTokens:f.prompt_tokens??0,completionTokens:f.completion_tokens??0,totalTokens:f.total_tokens??0}}}finally{clearTimeout(a)}}};var je=require("node:crypto");function Gt(e){return/^data:([^;,]+)[;,]/i.exec(e.trim())?.[1]}function Zt(e){let t=[];for(let n of e){if(n.type==="text"){t.push(n.text);continue}if(n.type==="image_url"){t.push(`[image ${Gt(n.image_url.url)??"unknown"}]`);continue}let o=n.text??n.data;if(o&&o.trim().length>0){t.push(o);continue}let r=n.uri??n.mimeType??"resource";t.push(`[resource ${r}]`)}return t.join(`
1
+ "use strict";var qe=Object.defineProperty;var vn=Object.getOwnPropertyDescriptor;var Pn=Object.getOwnPropertyNames;var wn=Object.prototype.hasOwnProperty;var xn=(e,t)=>{for(var n in t)qe(e,n,{get:t[n],enumerable:!0})},Rn=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of Pn(t))!wn.call(e,o)&&o!==n&&qe(e,o,{get:()=>t[o],enumerable:!(r=vn(t,o))||r.enumerable});return e};var Cn=e=>Rn(qe({},"__esModule",{value:!0}),e);var no={};xn(no,{BUILT_IN_XENO_PROVIDER_PRESETS:()=>an,DualLLMProvider:()=>ge,FileQuotaAuthority:()=>mt,FileXenoProviderConnectionStore:()=>ct,ProviderError:()=>P,QuotaError:()=>R,ToolSchemaProjectionError:()=>k,XENO_PROVIDER_CATALOG_SCHEMA_VERSION:()=>ot,XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION:()=>$e,XenoProviderCatalog:()=>te,assertDirectEndpointResolution:()=>ve,classifyProviderHttpError:()=>he,createDirectProvider:()=>on,createOllamaNativeProvider:()=>sn,createQuotaGovernedProvider:()=>to,directProviderConfigFromConnection:()=>Dr,normalizeQuotaScope:()=>$,parseRetryAfter:()=>ye,probeXenoProvider:()=>$r,projectToolDefinitionsForProvider:()=>ce,projectToolSchemaForProvider:()=>tt,providerCapabilityError:()=>B,providerProtocolError:()=>v,quotaAncestors:()=>fe,quotaInteger:()=>_,quotaScopeKey:()=>N,quotaText:()=>L,selectXenoProviderRoute:()=>Nr,validateDirectEndpoint:()=>H});module.exports=Cn(no);var gt="https://api.xenostudio.ai";var oo=300*1e3;function yt(e,t){return{id:t?.id??"dual",...t?.model?{model:t.model}:{},capabilities:{streaming:!0,tools:!1,vision:!1},async complete(n,r,o,i,s){let a=Tn(r);if(i){let d="";for await(let u of e.chatStream({model:n,messages:a})){if(s?.aborted)break;d+=u,i(u)}return{content:d.length>0?[{type:"text",text:d}]:[],stopReason:"end_turn",usageReported:!1,inputTokens:0,outputTokens:0}}let l=await e.chat({model:n,messages:a});return{content:l.content.length>0?[{type:"text",text:l.content}]:[],stopReason:"end_turn",usageReported:typeof l.usage?.promptTokens=="number",inputTokens:l.usage?.promptTokens??0,outputTokens:l.usage?.completionTokens??0}}}}function Tn(e){let t=[];for(let n of e){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});continue}let r=[];for(let i of n.content)if(i.type==="text")r.push(i.text);else if(i.type==="tool_use")r.push(`[tool_use ${i.name} ${JSON.stringify(i.input)}]`);else if(i.type==="tool_result"){let s=typeof i.content=="string"?i.content:JSON.stringify(i.content);r.push(`[tool_result ${i.tool_use_id}: ${s}]`)}let o=r.join(`
2
+ `).trim();o.length>0&&t.push({role:n.role,content:o})}return t}var kn="http://localhost:3338",Sn=gt,En=2e3,Ue=12e4,An=3e4,ge=class{localUrl;cloudUrl;cloudApiKey;mode;defaultLocalModel;defaultCloudModel;localAvailable=null;localModelName=null;lastHealthCheck=0;constructor(t){this.localUrl=t?.localUrl??kn,this.cloudUrl=t?.cloudUrl??Sn,this.cloudApiKey=t?.cloudApiKey??process.env.XENO_API_KEY??"",this.mode=t?.mode??"auto",this.defaultLocalModel=t?.localModel??"default",this.defaultCloudModel=t?.cloudModel??"claude-sonnet-4-6"}async chat(t){let n=await this.shouldUseLocal();if(this.mode==="local"&&!n)return{success:!1,content:"",endpoint:"local",model:"",usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:"Local xeno-rt is not available and mode is set to local-only"};if(n)try{return await this.chatLocal(t)}catch(r){return this.mode==="local"?{success:!1,content:"",endpoint:"local",model:t.model??this.defaultLocalModel,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:r instanceof Error?r.message:String(r)}:this.chatCloud(t)}return this.chatCloud(t)}async*chatStream(t){let n=await this.shouldUseLocal();if(this.mode==="local"&&!n)throw new Error("Local xeno-rt is not available and mode is set to local-only");let r=n?this.localUrl:this.cloudUrl,o=t.model??(n?this.defaultLocalModel:this.defaultCloudModel),i=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,s={model:o,messages:i,stream:!0,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(s.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(s.stop=t.stop);let a={"Content-Type":"application/json"};n||(a.Authorization=`Bearer ${this.cloudApiKey}`,a["User-Agent"]="XenoAgentSDK/0.4.0");let l=new AbortController,c=setTimeout(()=>l.abort(),Ue);try{let d=await fetch(`${r}/v1/chat/completions`,{method:"POST",headers:a,body:JSON.stringify(s),signal:l.signal});if(!d.ok){let g=await d.text().catch(()=>"");throw new Error(`LLM stream failed (HTTP ${d.status}): ${g}`)}if(!d.body)throw new Error("Response body is null \u2014 streaming not supported");let u=d.body.getReader(),p=new TextDecoder,m="";for(;;){let{done:g,value:y}=await u.read();if(g)break;m+=p.decode(y,{stream:!0});let f=m.split(`
3
+ `);m=f.pop()??"";for(let x of f){let T=x.trim();if(!T||!T.startsWith("data: "))continue;let w=T.slice(6);if(w==="[DONE]")return;try{let re=JSON.parse(w).choices[0]?.delta.content;re&&(yield re)}catch{}}}}finally{clearTimeout(c)}}async isLocalAvailable(t=!1){let n=Date.now();if(!t&&this.localAvailable!==null&&n-this.lastHealthCheck<An)return this.localAvailable;try{let r=new AbortController,o=setTimeout(()=>r.abort(),En);try{let i=await fetch(`${this.localUrl}/v1/models`,{signal:r.signal});if(!i.ok)return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1;let s=await i.json();return this.localModelName=s.data?.[0]?.id??null,this.localAvailable=!0,this.lastHealthCheck=n,!0}finally{clearTimeout(o)}}catch{return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1}}setMode(t){this.mode=t}getMode(){return this.mode}setLocalUrl(t){this.localUrl=t,this.localAvailable=null,this.lastHealthCheck=0}setCloudApiKey(t){this.cloudApiKey=t}async getStatus(){let t=await this.isLocalAvailable(),n;return this.mode==="local"?n="local":this.mode==="cloud"?n="cloud":n=t?"local":"cloud",{mode:this.mode,localAvailable:t,activeEndpoint:n,localModel:this.localModelName??void 0,localUrl:this.localUrl,cloudUrl:this.cloudUrl}}asLLMProvider(t){return yt(this,t)}async shouldUseLocal(){return this.mode==="cloud"?!1:this.mode==="local"?this.isLocalAvailable():this.isLocalAvailable()}async chatLocal(t){let n=t.model??this.defaultLocalModel,r=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,o={model:n,messages:r,stream:!1,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(o.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(o.stop=t.stop);let i=new AbortController,s=setTimeout(()=>i.abort(),Ue);try{let a=await fetch(`${this.localUrl}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o),signal:i.signal});if(!a.ok){let m=await a.text().catch(()=>"");throw new Error(`Local LLM request failed (HTTP ${a.status}): ${m}`)}let l=await a.json(),u=(l.choices?.[0]??{}).message??{},p=l.usage??{};return{success:!0,content:String(u.content??""),endpoint:"local",model:String(l.model??n),usage:{promptTokens:p.prompt_tokens??0,completionTokens:p.completion_tokens??0,totalTokens:p.total_tokens??0}}}finally{clearTimeout(s)}}async chatCloud(t){let n=t.model??this.defaultCloudModel,r=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,o={model:n,messages:r,stream:!1,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(o.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(o.stop=t.stop);let i={"Content-Type":"application/json",Authorization:`Bearer ${this.cloudApiKey}`,"User-Agent":"XenoAgentSDK/0.4.0"},s=new AbortController,a=setTimeout(()=>s.abort(),Ue);try{let l=await fetch(`${this.cloudUrl}/v1/chat/completions`,{method:"POST",headers:i,body:JSON.stringify(o),signal:s.signal});if(!l.ok){let g=`Cloud LLM request failed (HTTP ${l.status})`;try{let f=(await l.json()).error;g=typeof f=="string"?f:f?.message??g}catch{}return{success:!1,content:"",endpoint:"cloud",model:n,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:g}}let c=await l.json(),p=(c.choices?.[0]??{}).message??{},m=c.usage??{};return{success:!0,content:String(p.content??""),endpoint:"cloud",model:String(c.model??n),usage:{promptTokens:m.prompt_tokens??0,completionTokens:m.completion_tokens??0,totalTokens:m.total_tokens??0}}}finally{clearTimeout(a)}}};var Se=require("node:crypto");function In(e){return/^data:([^;,]+)[;,]/i.exec(e.trim())?.[1]}function Ln(e){let t=[];for(let n of e){if(n.type==="text"){t.push(n.text);continue}if(n.type==="image_url"){t.push(`[image ${In(n.image_url.url)??"unknown"}]`);continue}let r=n.text??n.data;if(r&&r.trim().length>0){t.push(r);continue}let o=n.uri??n.mimeType??"resource";t.push(`[resource ${o}]`)}return t.join(`
4
4
 
5
- `).trim()}function Z(e){return typeof e=="string"?e:Zt(e)}var ae=require("node:perf_hooks");var Qt=1;var en=12,tn=128,nn=/^xeno\.[a-z0-9]+(?:[._][a-z0-9]+)*$/u,on=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/u,rn=/(?:[\\/]|@|https?:|bearer|token|secret|password|credential|api[_-]?key|[0-9a-f]{8}-[0-9a-f-]{27,})/iu,sn=new Set(["arch","cached","capability","category","component","contained","error_code","frame_kind","gate","method","mode","operation","outcome","platform","previous_state","protocol_version","provider","queue","reason","recovery","retry_kind","state","status","tool","transport","trigger"]),Ye=new Set,Ge=new Map;function an(e){let t=e.trim().toLowerCase();return!t||t.length>64||rn.test(t)||!on.test(t)?null:t}function ln(e,t){if(typeof t=="boolean")return t;if(typeof t=="number")return e!=="protocol_version"||!Number.isInteger(t)||t<0||t>100?null:t;if(typeof t!="string")return null;let n=an(t);if(!n)return null;let o=Ge.get(e);return o||(o=new Set,Ge.set(e,o)),!o.has(n)&&o.size>=tn?"other":(o.add(n),n)}function cn(e={}){let t={};for(let[n,o]of Object.entries(e)){if(Object.keys(t).length>=en)break;if(!sn.has(n))continue;let r=ln(n,o);r!==null&&(t[n]=r)}return Object.freeze(t)}function Ze(e){if(Ye.size===0||!nn.test(e.name)||e.name.length>128)return;let t=e.kind==="event"?1:e.value??1;if(!Number.isFinite(t)||t<0)return;let n=Object.freeze({schemaVersion:Qt,kind:e.kind,name:e.name,value:Math.min(t,Number.MAX_SAFE_INTEGER),timestamp:(e.timestamp??new Date).toISOString(),attributes:cn(e.attributes)});for(let o of Ye)try{o(n)}catch{}}function U(e,t=1,n){Ze({kind:"counter",name:e,value:t,attributes:n})}function _e(e,t,n){Ze({kind:"histogram",name:e,value:t,attributes:n})}var ot=require("node:dns/promises"),se=require("node:net");var dn=["context length","context window","maximum context","too many tokens","request too large"];function Qe(e){let t=e.toLowerCase();return dn.some(n=>t.includes(n))}var y=class extends Error{category;code;retryable;providerId;statusCode;retryAfterMs;requestId;constructor(t,n){super(t,n.cause!==void 0?{cause:n.cause}:void 0),this.name="ProviderError",this.category=n.category,this.code=n.code,this.retryable=n.retryable??!1,this.providerId=n.providerId,this.statusCode=n.statusCode,this.retryAfterMs=n.retryAfterMs,this.requestId=n.requestId}};function re(e,t=Date.now()){if(!e)return;let n=Number(e.trim());if(Number.isFinite(n)&&n>=0)return Math.ceil(n*1e3);let o=Date.parse(e);if(Number.isFinite(o))return Math.max(0,o-t)}function un(e){if(typeof e=="string")return e;if(!e||typeof e!="object")return"";let t=e,n=t.error;if(typeof n=="string")return n;if(n&&typeof n=="object"){let o=n;if(typeof o.message=="string")return o.message;if(typeof o.type=="string")return o.type}return typeof t.message=="string"?t.message:""}function et(e,t){return t.some(n=>e.includes(n))}function ie(e){let t=un(e.body).trim(),n=t.toLowerCase(),o=t?`: ${t.slice(0,1e3)}`:"",r={providerId:e.providerId,statusCode:e.statusCode,retryAfterMs:e.retryAfterMs,requestId:e.requestId};return e.statusCode===401?new y(`Provider authentication failed${o}`,{...r,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):e.statusCode===403?new y(`Provider authorization failed${o}`,{...r,category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):e.statusCode===429?new y(`Provider rate limit reached${o}`,{...r,category:"rate_limit",code:"PROVIDER_RATE_LIMITED",retryable:!0}):Qe(n)?new y(`Provider context window exceeded${o}`,{...r,category:"context_overflow",code:"PROVIDER_CONTEXT_OVERFLOW"}):et(n,["safety","content policy","blocked_reason","responsible_ai_policy_violation"])?new y(`Provider safety policy refused the request${o}`,{...r,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):e.statusCode===404||et(n,["model not found","model does not exist","unsupported model"])?new y(`Provider model is unavailable${o}`,{...r,category:"unsupported_model",code:"PROVIDER_MODEL_UNSUPPORTED"}):e.statusCode===408||e.statusCode===504?new y(`Provider request timed out${o}`,{...r,category:"timeout",code:"PROVIDER_TIMEOUT",retryable:!0}):e.statusCode>=500||e.statusCode===409||e.statusCode===425?new y(`Provider server error${o}`,{...r,category:"server",code:"PROVIDER_SERVER_ERROR",retryable:!0}):new y(`Provider rejected the request with HTTP ${e.statusCode}${o}`,{...r,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}function h(e,t,n){return new y(`Malformed ${e} response: ${t}`,{providerId:e,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",...n!==void 0?{cause:n}:{}})}function B(e,t){return U("xeno.provider.capability_mismatches",1,{component:"provider_contract",provider:e,capability:t,error_code:"provider_capability_unsupported"}),new y(`${e} does not advertise the required ${t} capability`,{providerId:e,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}var rt=new Set(["metadata.google.internal","metadata.azure.internal","instance-data.ec2.internal"]);function _(e){return new y(`Provider endpoint rejected: ${e}`,{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"})}function mn(e){let t=e.split(".");if(t.length!==4)return null;let n=t.map(o=>Number(o));return n.every(o=>Number.isInteger(o)&&o>=0&&o<=255)?n:null}function tt(e){let t=mn(e);if(!t)return"public";let[n,o]=t;return n===0?"unspecified":n===127?"loopback":n===169&&o===254?"link-local":n===10||n===172&&o>=16&&o<=31||n===192&&o===168?"private":"public"}function it(e){let t=e.toLowerCase().split("%")[0];return(0,se.isIP)(t)===4?tt(t):t==="::"||t==="::0"?"unspecified":t==="::1"?"loopback":t.startsWith("::ffff:")?tt(t.slice(7)):/^f[cd]/.test(t)?"private":/^fe[89ab]/.test(t)?"link-local":"public"}function nt(e){return e==="example"||e.endsWith(".example")||e==="test"||e.endsWith(".test")||e==="invalid"||e.endsWith(".invalid")}function pn(e){return e==="localhost"||e.endsWith(".localhost")}function D(e,t={}){let n;try{n=new URL(e)}catch{throw _("the URL is invalid")}if(n.username||n.password)throw _("embedded credentials are forbidden");if(n.hash||n.search)throw _("base URLs cannot contain a query or fragment");if(!n.hostname||n.hostname.includes("%"))throw _("the hostname is empty or ambiguous");if(rt.has(n.hostname.toLowerCase()))throw _("cloud metadata destinations are forbidden");if(n.protocol!=="https:"&&n.protocol!=="http:")throw _(`scheme ${n.protocol} is unsupported`);let o=t.profile??"public-https";if(n.protocol==="http:"&&o!=="local-network")throw _("plain HTTP requires the explicit local-network profile");let r=(0,se.isIP)(n.hostname)?it(n.hostname):null;if(r==="link-local"||r==="unspecified")throw _(`${r} destinations are forbidden`);if(o==="public-https"&&(r==="private"||r==="loopback"||pn(n.hostname)))throw _("private and loopback destinations require the local-network profile");if(o==="local-network"&&n.protocol==="http:"&&r==="public"&&!t.allowedHosts?.includes(n.hostname))throw _("local-network HTTP must resolve to loopback or a private address");return n}async function q(e,t={}){let n=e.hostname.toLowerCase();if(rt.has(n))throw _("cloud metadata destinations are forbidden");let o=new Set((t.allowedHosts??[]).map(s=>s.toLowerCase())),r=(0,se.isIP)(n)?[n]:nt(n)?[]:t.resolveHostname?await t.resolveHostname(n):(await(0,ot.lookup)(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!r.length&&!nt(n))throw _("DNS resolution returned no addresses");let i=t.profile??"public-https";for(let s of r){let a=it(s);if(a==="link-local"||a==="unspecified")throw _(`DNS resolved to a forbidden ${a} address`);if(i==="public-https"&&a!=="public"&&!o.has(n))throw _(`DNS resolved public endpoint to ${a} address ${s}`);if(i==="local-network"&&e.protocol==="http:"&&a==="public"&&!o.has(n))throw _(`local-network HTTP resolved to public address ${s}`)}}var H={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function fn(e={}){return{connectTimeoutMs:Math.max(100,e.connectTimeoutMs??H.connectTimeoutMs),totalTimeoutMs:Math.max(100,e.totalTimeoutMs??H.totalTimeoutMs),idleTimeoutMs:Math.max(100,e.idleTimeoutMs??H.idleTimeoutMs),maxResponseBytes:Math.max(1024,e.maxResponseBytes??H.maxResponseBytes),maxHeaderBytes:Math.max(1024,e.maxHeaderBytes??H.maxHeaderBytes),maxEventBytes:Math.max(1024,e.maxEventBytes??H.maxEventBytes)}}function Te(e,t,n){let o=new y(t==="cancelled"?"Provider request was cancelled":"Provider request timed out",{providerId:e,category:t,code:t==="cancelled"?"PROVIDER_CANCELLED":"PROVIDER_TIMEOUT",retryable:t==="timeout",...n!==void 0?{cause:n}:{}});return t==="cancelled"&&(o.name="AbortError"),o}function gn(e){let t=0;return e.forEach((n,o)=>{t+=Buffer.byteLength(o)+Buffer.byteLength(n)+4}),t}async function st(e,t,n,o){if(!e.body)return"";let r=e.body.getReader(),i=new TextDecoder,s=0,a="",l,c=()=>{l&&clearTimeout(l),l=setTimeout(()=>o.abort("idle-timeout"),n.idleTimeoutMs)};c();try{for(;;){let{value:m,done:d}=await r.read();if(d)break;if(c(),s+=m.byteLength,s>n.maxResponseBytes)throw o.abort("response-limit"),h(t,`response exceeded ${n.maxResponseBytes} bytes`);a+=i.decode(m,{stream:!0})}return a+=i.decode(),a}finally{l&&clearTimeout(l),r.releaseLock()}}async function at(e,t,n,o){let r=ae.performance.now(),i=fn(n.limits);U("xeno.provider.requests",1,{component:"provider_transport",provider:n.providerId,transport:"http"}),await q(e,n.endpointPolicy);let s=new AbortController,a=null,l=t.signal,c=()=>s.abort("caller");if(l?.aborted)throw Te(n.providerId,"cancelled");l?.addEventListener("abort",c,{once:!0});let m=setTimeout(()=>{a="total",s.abort("total-timeout")},i.totalTimeoutMs),d=setTimeout(()=>{a="connect",s.abort("connect-timeout")},i.connectTimeoutMs);try{let g=await fetch(e,{...t,signal:s.signal,redirect:"manual"});if(clearTimeout(d),gn(g.headers)>i.maxHeaderBytes)throw h(n.providerId,`response headers exceeded ${i.maxHeaderBytes} bytes`);if(g.status>=300&&g.status<400)throw new y("Provider redirects are disabled",{providerId:n.providerId,category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED",statusCode:g.status});if(!g.ok){let P=await st(g,n.providerId,i,s),x=P;try{x=P?JSON.parse(P):{}}catch{}throw ie({providerId:n.providerId,statusCode:g.status,body:x,retryAfterMs:re(g.headers.get("retry-after")),requestId:g.headers.get("request-id")??g.headers.get("x-request-id")??void 0})}let f=await o(g,s,i);return U("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),_e("xeno.provider.request_duration_ms",ae.performance.now()-r,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),f}catch(g){let f;throw g instanceof y?f=g:l?.aborted||s.signal.reason==="caller"?f=Te(n.providerId,"cancelled",g):a||s.signal.reason==="idle-timeout"?f=Te(n.providerId,"timeout",g):f=new y("Provider transport failed",{providerId:n.providerId,category:"transport",code:"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:g}),U("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:f.category,error_code:f.code}),_e("xeno.provider.request_duration_ms",ae.performance.now()-r,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:f.category}),f}finally{clearTimeout(d),clearTimeout(m),l?.removeEventListener("abort",c)}}async function lt(e,t,n){return at(e,t,n,async(o,r,i)=>{let s=await st(o,n.providerId,i,r),a;try{a=s?JSON.parse(s):{}}catch(l){throw h(n.providerId,"body is not valid JSON",l)}if(!a||typeof a!="object"||Array.isArray(a))throw h(n.providerId,"JSON body must be an object");return a})}async function Q(e,t,n,o){return at(e,t,n,async(r,i,s)=>{if(!r.body)throw h(n.providerId,"stream response has no body");let a=r.body.getReader(),l=new TextDecoder,c="",m=0,d="message",g=[],f,P=()=>{f&&clearTimeout(f),f=setTimeout(()=>i.abort("idle-timeout"),s.idleTimeoutMs)},x=async()=>{if(g.length===0){d="message";return}let b=g.join(`
6
- `);if(Buffer.byteLength(b)>s.maxEventBytes)throw h(n.providerId,`stream event exceeded ${s.maxEventBytes} bytes`);await o({event:d,data:b}),d="message",g=[]};P();try{for(;;){let{value:b,done:R}=await a.read();if(R)break;if(P(),m+=b.byteLength,m>s.maxResponseBytes)throw h(n.providerId,`stream exceeded ${s.maxResponseBytes} bytes`);for(c+=l.decode(b,{stream:!0});;){let k=c.indexOf(`
7
- `);if(k<0)break;let v=c.slice(0,k).replace(/\r$/,"");if(c=c.slice(k+1),!v)await x();else if(!v.startsWith(":")){let Y=v.indexOf(":"),G=Y<0?v:v.slice(0,Y),Ke=Y<0?"":v.slice(Y+1).replace(/^ /,"");G==="event"?d=Ke:G==="data"&&g.push(Ke)}}}if(c+=l.decode(),c.trim())for(let b of c.split(/\r?\n/))b.startsWith("data:")?g.push(b.slice(5).replace(/^ /,"")):b.startsWith("event:")&&(d=b.slice(6).trim());await x()}finally{f&&clearTimeout(f),a.releaseLock()}})}var vt=require("node:crypto");var ke=require("node:net"),me=class extends Error{issues;constructor(t){super(`Invalid JSON Schema: ${t.map(n=>`${n.path||"#"} ${n.message}`).join("; ")}`),this.name="JsonSchemaCompilationError",this.issues=t}},Ee="https://json-schema.org/draft/2020-12/schema",yn=new Set(["string","number","integer","boolean","array","object","null"]),hn=new Set(["$schema","$id","$anchor","$ref","$defs","$comment","title","description","default","examples","deprecated","readOnly","writeOnly","type","enum","const","multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","format","prefixItems","items","contains","minContains","maxContains","minItems","maxItems","uniqueItems","properties","patternProperties","additionalProperties","required","dependentRequired","minProperties","maxProperties","allOf","anyOf","oneOf","not"]),mt=new Map([["date",e=>yt(e)],["date-time",e=>Nn(e)],["time",e=>ht(e)],["duration",e=>/^P(?!$)(?:\d+(?:[.,]\d+)?Y)?(?:\d+(?:[.,]\d+)?M)?(?:\d+(?:[.,]\d+)?W)?(?:\d+(?:[.,]\d+)?D)?(?:T(?=\d)(?:\d+(?:[.,]\d+)?H)?(?:\d+(?:[.,]\d+)?M)?(?:\d+(?:[.,]\d+)?S)?)?$/u.test(e)],["email",e=>ct(e)],["idn-email",e=>ct(e)],["hostname",e=>Ie(e)],["idn-hostname",e=>Ie(e)],["ipv4",e=>(0,ke.isIP)(e)===4],["ipv6",e=>(0,ke.isIP)(e)===6],["uuid",e=>/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(e)],["uri",e=>dt(e)],["iri",e=>dt(e)],["uri-reference",e=>ut(e)],["iri-reference",e=>ut(e)],["uri-template",e=>Dn(e)],["json-pointer",e=>/^(?:\/(?:[^~/]|~[01])*)*$/u.test(e)],["relative-json-pointer",e=>/^(?:0|[1-9]\d*)(?:#|(?:\/(?:[^~/]|~[01])*)*)$/u.test(e)],["regex",(e,t)=>Le(e,t.maxPatternLength)!==void 0]]);function bn(e={}){return{strictKeywords:e.strictKeywords??!0,assertFormats:e.assertFormats??!1,maxSchemaDepth:M(e.maxSchemaDepth,64,1,256,"maxSchemaDepth"),maxSchemaNodes:M(e.maxSchemaNodes,4096,1,1e5,"maxSchemaNodes"),maxReferences:M(e.maxReferences,512,0,1e4,"maxReferences"),maxPatternLength:M(e.maxPatternLength,256,1,4096,"maxPatternLength"),maxValidationDepth:M(e.maxValidationDepth,128,1,1024,"maxValidationDepth"),maxValidationSteps:M(e.maxValidationSteps,1e5,100,1e7,"maxValidationSteps"),maxValidationErrors:M(e.maxValidationErrors,64,1,1024,"maxValidationErrors"),maxInputBytes:M(e.maxInputBytes,16*1024*1024,1024,256*1024*1024,"maxInputBytes")}}function M(e,t,n,o,r){let i=e??t;if(!Number.isInteger(i)||i<n||i>o)throw new TypeError(`${r} must be an integer from ${n} to ${o}.`);return i}function Pn(e,t={}){let n={root:e,options:bn(t),issues:[],rawByPointer:new Map,anchors:new Map,compiledByPointer:new Map,schemaNodes:0,references:0,nextNodeId:1};de(e,"",0,n);let o=j(e,"",0,n);if(n.issues.length>0||!o)throw new me(n.issues);return Object.freeze({dialect:Ee,formatAssertion:n.options.assertFormats,validate(r){let i=[],s=Ae(r);if(s)return i.push({path:s.path,keyword:"type",schemaPath:"#",message:s.message}),{valid:!1,errors:i,steps:0,truncated:!1};let a=JSON.stringify(r),l=Buffer.byteLength(a??"null","utf8");if(l>n.options.maxInputBytes)return i.push({path:"",keyword:"maxInputBytes",schemaPath:"#",message:`input is ${l} bytes; limit is ${n.options.maxInputBytes}`}),{valid:!1,errors:i,steps:0,truncated:!1};let c={options:n.options,errors:i,budget:{steps:0,exhausted:!1},activePairs:new Set,objectIds:new WeakMap,nextObjectId:{value:1}};return I(r,o,"",0,c),{valid:i.length===0,errors:i,steps:c.budget.steps,truncated:c.budget.exhausted||i.length>=n.options.maxValidationErrors}}})}function pt(e,t={}){if(!T(e)||e.type!=="object"||!T(e.properties))throw new me([{path:"#",keyword:"type",message:"tool input schema root must declare type object and a properties object"}]);return Pn(e,t)}function de(e,t,n,o){if(n>o.options.maxSchemaDepth){u(o,t,void 0,`schema depth exceeds ${o.options.maxSchemaDepth}`);return}if(typeof e!="boolean"&&!T(e)){u(o,t,void 0,"schema must be an object or boolean");return}if(!o.rawByPointer.has(t)){if(o.schemaNodes+=1,o.schemaNodes>o.options.maxSchemaNodes){u(o,t,void 0,`schema node count exceeds ${o.options.maxSchemaNodes}`);return}if(o.rawByPointer.set(t,e),typeof e!="boolean"){e.$anchor!==void 0&&(typeof e.$anchor!="string"||!/^[A-Za-z][A-Za-z0-9._:-]*$/u.test(e.$anchor)?u(o,t,"$anchor","$anchor must be a valid plain-name anchor"):o.anchors.has(e.$anchor)?u(o,t,"$anchor",`duplicate anchor ${e.$anchor}`):o.anchors.set(e.$anchor,t));for(let r of["$defs","properties","patternProperties"]){let i=e[r];if(i!==void 0){if(!T(i)){u(o,t,r,`${r} must be an object`);continue}for(let[s,a]of Object.entries(i))de(a,O(t,r,s),n+1,o)}}for(let r of["items","contains","additionalProperties","not"])e[r]!==void 0&&de(e[r],O(t,r),n+1,o);for(let r of["prefixItems","allOf","anyOf","oneOf"]){let i=e[r];if(i!==void 0){if(!Array.isArray(i)){u(o,t,r,`${r} must be an array of schemas`);continue}i.forEach((s,a)=>de(s,O(t,r,String(a)),n+1,o))}}}}}function j(e,t,n,o){let r=o.compiledByPointer.get(t);if(r)return r;if(typeof e!="boolean"&&!T(e))return;let i={id:o.nextNodeId++,schemaPath:Pt(t)};if(o.compiledByPointer.set(t,i),typeof e=="boolean")return i.boolean=e,i;if(wn(e,t,o),xn(e,t,o),e.$schema!==void 0&&(t!==""||e.$schema!==Ee&&e.$schema!==`${Ee}#`)&&u(o,t,"$schema",t===""?`unsupported dialect ${String(e.$schema)}`:"$schema is only supported at the root"),e.$id!==void 0&&typeof e.$id!="string"&&u(o,t,"$id","$id must be a string"),e.$ref!==void 0)if(typeof e.$ref!="string")u(o,t,"$ref","$ref must be a string");else{o.references+=1,o.references>o.options.maxReferences&&u(o,t,"$ref",`reference count exceeds ${o.options.maxReferences}`);let s=kn(e.$ref,t,o);if(s!==void 0){let a=o.rawByPointer.get(s);a===void 0?u(o,t,"$ref",`unresolved local reference ${e.$ref}`):i.ref=j(a,s,n+1,o)}}if(i.types=vn(e.type,t,o),e.enum!==void 0){let s=e.enum;!Array.isArray(s)||s.length===0?u(o,t,"enum","enum must be a non-empty array"):s.some((a,l)=>s.some((c,m)=>m<l&&z(a,c)))?u(o,t,"enum","enum values must be unique"):s.some(a=>Ae(a))?u(o,t,"enum","enum values must be JSON values"):i.enumValues=s}if(Object.prototype.hasOwnProperty.call(e,"const")&&(Ae(e.const)?u(o,t,"const","const must be a JSON value"):(i.hasConst=!0,i.constValue=e.const)),i.multipleOf=Tn(e.multipleOf,t,"multipleOf",o),i.maximum=ee(e.maximum,t,"maximum",o),i.exclusiveMaximum=ee(e.exclusiveMaximum,t,"exclusiveMaximum",o),i.minimum=ee(e.minimum,t,"minimum",o),i.exclusiveMinimum=ee(e.exclusiveMinimum,t,"exclusiveMinimum",o),i.maxLength=$(e.maxLength,t,"maxLength",o),i.minLength=$(e.minLength,t,"minLength",o),i.minItems=$(e.minItems,t,"minItems",o),i.maxItems=$(e.maxItems,t,"maxItems",o),i.minContains=$(e.minContains,t,"minContains",o),i.maxContains=$(e.maxContains,t,"maxContains",o),i.minProperties=$(e.minProperties,t,"minProperties",o),i.maxProperties=$(e.maxProperties,t,"maxProperties",o),Sn(i,t,o),e.pattern!==void 0)if(typeof e.pattern!="string")u(o,t,"pattern","pattern must be a string");else{let s=Le(e.pattern,o.options.maxPatternLength);s?i.pattern={source:e.pattern,regex:s}:u(o,t,"pattern","pattern is invalid or outside the safe regex subset")}if(e.format!==void 0&&(typeof e.format!="string"?u(o,t,"format","format must be a string"):o.options.assertFormats&&!mt.has(e.format)?u(o,t,"format",`unsupported asserted format ${e.format}`):i.format=e.format),i.prefixItems=ce(e.prefixItems,t,"prefixItems",n,o,!0),i.items=le(e.items,t,"items",n,o),i.contains=le(e.contains,t,"contains",n,o),(e.minContains!==void 0||e.maxContains!==void 0)&&e.contains===void 0&&u(o,t,"contains","minContains/maxContains require contains"),e.uniqueItems!==void 0&&(typeof e.uniqueItems!="boolean"?u(o,t,"uniqueItems","uniqueItems must be boolean"):i.uniqueItems=e.uniqueItems),i.properties=Rn(e.properties,t,"properties",n,o),i.patternProperties=Cn(e.patternProperties,t,n,o),i.additionalProperties=le(e.additionalProperties,t,"additionalProperties",n,o),i.required=ft(e.required,t,"required",o,!0),i.dependentRequired=_n(e.dependentRequired,t,o),i.allOf=ce(e.allOf,t,"allOf",n,o,!1),i.anyOf=ce(e.anyOf,t,"anyOf",n,o,!1),i.oneOf=ce(e.oneOf,t,"oneOf",n,o,!1),i.not=le(e.not,t,"not",n,o),T(e.$defs))for(let[s,a]of Object.entries(e.$defs))j(a,O(t,"$defs",s),n+1,o);return i}function wn(e,t,n){if(n.options.strictKeywords)for(let o of Object.keys(e))!hn.has(o)&&!o.startsWith("x-")&&u(n,t,o,`unsupported keyword ${o}`)}function xn(e,t,n){for(let o of["$comment","title","description"])e[o]!==void 0&&typeof e[o]!="string"&&u(n,t,o,`${o} must be a string`);for(let o of["deprecated","readOnly","writeOnly"])e[o]!==void 0&&typeof e[o]!="boolean"&&u(n,t,o,`${o} must be boolean`);e.examples!==void 0&&!Array.isArray(e.examples)&&u(n,t,"examples","examples must be an array")}function vn(e,t,n){if(e===void 0)return;let o=Array.isArray(e)?e:[e];if(o.length===0||o.some(r=>typeof r!="string"||!yn.has(r))){u(n,t,"type","type must be a recognized type or non-empty unique type array");return}return new Set(o).size!==o.length&&u(n,t,"type","type array must not contain duplicates"),o}function le(e,t,n,o,r){if(e!==void 0)return j(e,O(t,n),o+1,r)}function ce(e,t,n,o,r,i){if(e!==void 0){if(!Array.isArray(e)||!i&&e.length===0){u(r,t,n,`${n} must be ${i?"an array":"a non-empty array"} of schemas`);return}return e.map((s,a)=>j(s,O(t,n,String(a)),o+1,r)).filter(s=>!!s)}}function Rn(e,t,n,o,r){if(e===void 0)return;if(!T(e)){u(r,t,n,`${n} must be an object of schemas`);return}let i=new Map;for(let[s,a]of Object.entries(e)){let l=j(a,O(t,n,s),o+1,r);l&&i.set(s,l)}return i}function Cn(e,t,n,o){if(e===void 0)return;if(!T(e)){u(o,t,"patternProperties","patternProperties must be an object of schemas");return}let r=[];for(let[i,s]of Object.entries(e)){let a=Le(i,o.options.maxPatternLength);if(!a){u(o,t,"patternProperties",`pattern ${JSON.stringify(i)} is invalid or outside the safe regex subset`);continue}let l=j(s,O(t,"patternProperties",i),n+1,o);l&&r.push({pattern:{source:i,regex:a},schema:l})}return r}function _n(e,t,n){if(e===void 0)return;if(!T(e)){u(n,t,"dependentRequired","dependentRequired must be an object");return}let o=new Map;for(let[r,i]of Object.entries(e)){let s=ft(i,O(t,"dependentRequired",r),"dependentRequired",n,!0);s&&o.set(r,s)}return o}function ft(e,t,n,o,r){if(e!==void 0){if(!Array.isArray(e)||e.some(i=>typeof i!="string")){u(o,t,n,`${n} must be an array of strings`);return}return r&&new Set(e).size!==e.length&&u(o,t,n,`${n} values must be unique`),e}}function Tn(e,t,n,o){let r=ee(e,t,n,o);return r!==void 0&&r<=0&&u(o,t,n,`${n} must be greater than zero`),r!==void 0&&r>0?r:void 0}function ee(e,t,n,o){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)){u(o,t,n,`${n} must be a finite number`);return}return e}}function $(e,t,n,o){if(e!==void 0){if(!Number.isSafeInteger(e)||e<0){u(o,t,n,`${n} must be a non-negative safe integer`);return}return e}}function Sn(e,t,n){for(let[o,r,i]of[[e.minLength,e.maxLength,"length"],[e.minItems,e.maxItems,"items"],[e.minContains,e.maxContains,"contains"],[e.minProperties,e.maxProperties,"properties"]])o!==void 0&&r!==void 0&&o>r&&u(n,t,i,`minimum ${i} exceeds maximum`)}function kn(e,t,n){if(!e.startsWith("#")){u(n,t,"$ref","remote and file references are not supported");return}if(e==="#")return"";if(e.startsWith("#/")){let s=`/${e.slice(2).split("/").map(a=>a.replace(/~1/g,"/").replace(/~0/g,"~")).map(bt).join("/")}`;return n.rawByPointer.has(s)||u(n,t,"$ref",`unresolved JSON Pointer ${e}`),s}let o=e.slice(1),r=n.anchors.get(o);return r===void 0&&u(n,t,"$ref",`unresolved anchor ${e}`),r}function I(e,t,n,o,r){if(!gt(r)||r.errors.length>=r.options.maxValidationErrors)return;if(o>r.options.maxValidationDepth){w(r,n,"maxDepth",t,`validation depth exceeds ${r.options.maxValidationDepth}`);return}if(t.boolean!==void 0){t.boolean||w(r,n,"falseSchema",t,"is rejected by the false schema");return}let i=Mn(t,e,r);if(!r.activePairs.has(i)){r.activePairs.add(i);try{if(t.ref&&I(e,t.ref,n,o+1,r),t.enumValues&&!t.enumValues.some(s=>z(s,e))&&w(r,n,"enum",t,`expected one of ${t.enumValues.map(Oe).join(", ")} but got ${Se(e)}`),t.hasConst&&!z(t.constValue,e)&&w(r,n,"const",t,`expected ${Oe(t.constValue)} but got ${Se(e)}`),t.types&&!t.types.some(s=>$n(e,s))){let s=t.types.length===1?t.types[0]:`one of [${t.types.join(", ")}]`;w(r,n,"type",t,`expected type ${s} but got ${Se(e)}`);return}En(e,t,n,o,r),typeof e=="number"&&An(e,t,n,r),typeof e=="string"&&In(e,t,n,r),Array.isArray(e)&&On(e,t,n,o,r),T(e)&&Ln(e,t,n,o,r)}finally{r.activePairs.delete(i)}}}function En(e,t,n,o,r){for(let i of t.allOf??[])I(e,i,n,o+1,r);if(t.anyOf&&t.anyOf.filter(s=>ue(e,s,n,o+1,r)).length===0&&w(r,n,"anyOf",t,"must match at least one anyOf branch"),t.oneOf){let i=t.oneOf.filter(s=>ue(e,s,n,o+1,r)).length;i!==1&&w(r,n,"oneOf",t,`must match exactly one oneOf branch; matched ${i}`)}t.not&&ue(e,t.not,n,o+1,r)&&w(r,n,"not",t,"must not match the disallowed schema")}function An(e,t,n,o){t.multipleOf!==void 0&&!jn(e,t.multipleOf)&&w(o,n,"multipleOf",t,`must be a multiple of ${t.multipleOf}`),t.maximum!==void 0&&e>t.maximum&&w(o,n,"maximum",t,`must be <= ${t.maximum}`),t.exclusiveMaximum!==void 0&&e>=t.exclusiveMaximum&&w(o,n,"exclusiveMaximum",t,`must be < ${t.exclusiveMaximum}`),t.minimum!==void 0&&e<t.minimum&&w(o,n,"minimum",t,`must be >= ${t.minimum}`),t.exclusiveMinimum!==void 0&&e<=t.exclusiveMinimum&&w(o,n,"exclusiveMinimum",t,`must be > ${t.exclusiveMinimum}`)}function In(e,t,n,o){let r=[...e].length;if(t.minLength!==void 0&&r<t.minLength&&w(o,n,"minLength",t,`must contain at least ${t.minLength} Unicode code points`),t.maxLength!==void 0&&r>t.maxLength&&w(o,n,"maxLength",t,`must contain at most ${t.maxLength} Unicode code points`),t.pattern&&!t.pattern.regex.test(e)&&w(o,n,"pattern",t,`must match pattern ${JSON.stringify(t.pattern.source)}`),t.format&&o.options.assertFormats){let i=mt.get(t.format);i&&!i(e,o.options)&&w(o,n,"format",t,`must match format ${t.format}`)}}function On(e,t,n,o,r){if(t.minItems!==void 0&&e.length<t.minItems&&w(r,n,"minItems",t,`must contain at least ${t.minItems} items`),t.maxItems!==void 0&&e.length>t.maxItems&&w(r,n,"maxItems",t,`must contain at most ${t.maxItems} items`),t.uniqueItems)e:for(let s=0;s<e.length;s+=1)for(let a=0;a<s;a+=1){if(!gt(r))break e;if(z(e[s],e[a])){w(r,E(n,String(s)),"uniqueItems",t,`duplicates item ${a}`);break e}}let i=t.prefixItems?.length??0;if(t.prefixItems?.forEach((s,a)=>{a<e.length&&I(e[a],s,E(n,String(a)),o+1,r)}),t.items)for(let s=i;s<e.length;s+=1)I(e[s],t.items,E(n,String(s)),o+1,r);if(t.contains){let s=0;for(let l=0;l<e.length;l+=1)ue(e[l],t.contains,E(n,String(l)),o+1,r)&&(s+=1);let a=t.minContains??1;s<a&&w(r,n,"minContains",t,`contains matched ${s} items; minimum is ${a}`),t.maxContains!==void 0&&s>t.maxContains&&w(r,n,"maxContains",t,`contains matched ${s} items; maximum is ${t.maxContains}`)}}function Ln(e,t,n,o,r){let i=Object.keys(e);t.minProperties!==void 0&&i.length<t.minProperties&&w(r,n,"minProperties",t,`must contain at least ${t.minProperties} properties`),t.maxProperties!==void 0&&i.length>t.maxProperties&&w(r,n,"maxProperties",t,`must contain at most ${t.maxProperties} properties`);for(let s of t.required??[])Object.prototype.hasOwnProperty.call(e,s)||w(r,E(n,s),"required",t,"is required");for(let[s,a]of t.dependentRequired??[])if(Object.prototype.hasOwnProperty.call(e,s))for(let l of a)Object.prototype.hasOwnProperty.call(e,l)||w(r,E(n,l),"dependentRequired",t,`is required when ${s} is present`);for(let s of i){let a=!1,l=t.properties?.get(s);l&&(a=!0,I(e[s],l,E(n,s),o+1,r));for(let c of t.patternProperties??[])c.pattern.regex.test(s)&&(a=!0,I(e[s],c.schema,E(n,s),o+1,r));!a&&t.additionalProperties&&I(e[s],t.additionalProperties,E(n,s),o+1,r)}}function ue(e,t,n,o,r){let i={...r,errors:[],activePairs:new Set(r.activePairs)};return I(e,t,n,o,i),i.errors.length===0&&!i.budget.exhausted}function gt(e){return e.budget.steps+=1,e.budget.steps<=e.options.maxValidationSteps?!0:(e.budget.exhausted||(e.budget.exhausted=!0,w(e,"","maxValidationSteps",{schemaPath:"#"},`validation steps exceed ${e.options.maxValidationSteps}`)),!1)}function w(e,t,n,o,r){e.errors.length>=e.options.maxValidationErrors||e.errors.push({path:t,keyword:n,schemaPath:o.schemaPath,message:r})}function Mn(e,t,n){if(t!==null&&typeof t=="object"){let o=n.objectIds.get(t);return o===void 0&&(o=n.nextObjectId.value++,n.objectIds.set(t,o)),`${e.id}:object:${o}`}return`${e.id}:${typeof t}:${Oe(t)}`}function $n(e,t){switch(t){case"string":return typeof e=="string";case"number":return typeof e=="number"&&Number.isFinite(e);case"integer":return typeof e=="number"&&Number.isSafeInteger(e);case"boolean":return typeof e=="boolean";case"array":return Array.isArray(e);case"object":return T(e);case"null":return e===null}}function Ae(e){let t=new WeakSet,n=(o,r)=>{if(o===null||typeof o=="string"||typeof o=="boolean")return;if(typeof o=="number")return Number.isFinite(o)?void 0:{path:r,message:"must be a finite JSON number"};if(typeof o!="object")return{path:r,message:`must be a JSON value, not ${typeof o}`};if(t.has(o))return{path:r,message:"must not contain cyclic references"};t.add(o);let i=Array.isArray(o)?o.entries():Object.entries(o);for(let[s,a]of i){let l=n(a,E(r,String(s)));if(l)return l}t.delete(o)};return n(e,"")}function Le(e,t){if(!([...e].length>t)&&!/\\(?:[1-9]|k<)/u.test(e)&&!/\(\?<(?:[=!]|[A-Za-z])/u.test(e)&&!/\((?:[^()\\]|\\.)*[+*{](?:[^()\\]|\\.)*\)[+*{?]/u.test(e))try{return new RegExp(e,"u")}catch{return}}function yt(e){let t=/^(\d{4})-(\d{2})-(\d{2})$/u.exec(e);if(!t)return!1;let n=new Date(Date.UTC(Number(t[1]),Number(t[2])-1,Number(t[3])));return n.getUTCFullYear()===Number(t[1])&&n.getUTCMonth()===Number(t[2])-1&&n.getUTCDate()===Number(t[3])}function ht(e){let t=/^(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/u.exec(e);return t?Number(t[1])<=23&&Number(t[2])<=59&&Number(t[3])<=60:!1}function Nn(e){let t=/^([^Tt ]+)[Tt ](.+)$/u.exec(e);return!!(t&&yt(t[1])&&ht(t[2]))}function ct(e){if([...e].length>254||/[\s<>(),;:\\"\[\]]/u.test(e))return!1;let t=e.lastIndexOf("@");return t>0&&t<e.length-1&&[...e.slice(0,t)].length<=64&&Ie(e.slice(t+1))}function Ie(e){if([...e].length>253)return!1;let t=e.endsWith(".")?e.slice(0,-1):e;return t.length>0&&t.split(".").every(n=>n.length>0&&n.length<=63&&!n.startsWith("-")&&!n.endsWith("-")&&/^[\p{L}\p{N}-]+$/u.test(n))}function dt(e){try{return!!(new URL(e).protocol&&!/\s/u.test(e))}catch{return!1}}function ut(e){try{return new URL(e,"https://xeno.invalid/"),!/\s/u.test(e)}catch{return!1}}function Dn(e){let t=0;for(let n of e)if(n==="{"&&(t+=1),n==="}"&&(t-=1),t<0||t>1)return!1;return t===0&&![...e].some(n=>{let o=n.codePointAt(0);return o<=31||o===127})}function jn(e,t){let n=e/t;return Math.abs(n-Math.round(n))<=Number.EPSILON*Math.max(1,Math.abs(n))*8}function T(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function z(e,t){if(Object.is(e,t))return!0;if(typeof e!=typeof t||e===null||t===null)return!1;if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length&&e.every((n,o)=>z(n,t[o]));if(T(e)&&T(t)){let n=Object.keys(e),o=Object.keys(t);return n.length===o.length&&n.every(r=>Object.prototype.hasOwnProperty.call(t,r)&&z(e[r],t[r]))}return!1}function E(e,t){let n=/^[A-Za-z_$][A-Za-z0-9_$]*$/u.test(t)?t:`[${JSON.stringify(t)}]`;return e.length===0?n:n.startsWith("[")?`${e}${n}`:`${e}.${n}`}function O(e,...t){return`${e}/${t.map(bt).join("/")}`}function bt(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function Pt(e){return e.length===0?"#":`#${e}`}function u(e,t,n,o){e.issues.length>=64||e.issues.push({path:Pt(t),...n?{keyword:n}:{},message:o})}function Se(e){return e===null?"null":Array.isArray(e)?"array":typeof e=="number"?Number.isSafeInteger(e)?"integer":"number":typeof e}function Oe(e){try{let t=JSON.stringify(e);return t===void 0?String(e):t}catch{return String(e)}}var C=class extends Error{dialect;path;constructor(t,n,o){super(`Tool schema cannot be projected to ${t} at ${n}: ${o}`),this.name="ToolSchemaProjectionError",this.dialect=t,this.path=n}},wt=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),Jn=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function Ne(e,t){pt(e);let n=$e(e),o=n,r=xt(n);if(t==="xeno")return{schema:n,dialect:t,canonicalSha256:r,projectedSha256:r,changes:[]};let i={dialect:t,root:o,pointers:new Map,anchors:new Map,changes:[],activeReferences:new Set};pe(o,"",i);let s=J(o,"#",i);if(!K(s))throw new C(t,"#","provider tool root must remain an object schema");return Xn(n,s,t),{schema:s,dialect:t,canonicalSha256:r,projectedSha256:xt(s),changes:i.changes}}function fe(e,t){return e.map(n=>{let o=Ne(n.input_schema,t);return{definition:{...n,input_schema:o.schema},projection:o}})}function J(e,t,n){if(typeof e=="boolean"){if(n.dialect!=="google")return e;if(e)return{};throw new C(n.dialect,t,"false schemas are not representable by this provider")}if(typeof e.$ref=="string"){let r=Vn(e.$ref,t,n);if(n.activeReferences.has(e.$ref))throw new C(n.dialect,t,`recursive reference ${e.$ref} cannot be serialized safely`);let i=Object.fromEntries(Object.entries(e).filter(([a])=>a!=="$ref"&&!wt.has(a)));if(Object.keys(i).length>0){if(n.dialect==="google")throw new C(n.dialect,t,"$ref siblings require an unsupported intersection");n.activeReferences.add(e.$ref);let a=J(r,`${t}/$ref`,n);n.activeReferences.delete(e.$ref);let l=J(i,t,n);return n.changes.push({path:t,keyword:"$ref",action:"transformed",reason:"inlined local reference with sibling intersection"}),{allOf:[a,l]}}n.activeReferences.add(e.$ref);let s=J(r,`${t}/$ref`,n);return n.activeReferences.delete(e.$ref),n.changes.push({path:t,keyword:"$ref",action:"transformed",reason:"inlined local reference"}),s}let o={};for(let[r,i]of Object.entries(e))if(r!=="$ref"){if(wt.has(r)||r.startsWith("x-")){r==="description"?o.description=i:n.changes.push({path:t,keyword:r,action:"omitted",reason:"provider wire metadata is not required for canonical validation"});continue}if(n.dialect==="google"&&!Jn.has(r)){if(r==="const"){o.enum=[$e(i)],n.changes.push({path:t,keyword:r,action:"transformed",reason:"Google wire schema represents const as a single-value enum"});continue}if(r==="prefixItems")throw new C(n.dialect,t,"tuple prefixItems cannot preserve the provider structural contract");n.changes.push({path:t,keyword:r,action:"omitted",reason:"constraint remains enforced by canonical local validation"});continue}if(r==="type"&&n.dialect==="google"&&Array.isArray(i)){let s=i.filter(a=>a!=="null");if(s.length!==1||i.length!==2)throw new C(n.dialect,t,"type union cannot be represented without weakening structure");o.type=s[0],o.nullable=!0,n.changes.push({path:t,keyword:r,action:"transformed",reason:"nullable two-type union mapped to Google nullable"});continue}if(r==="properties"||r==="patternProperties"||r==="$defs"){if(!K(i))throw new C(n.dialect,t,`${r} must be an object`);let s={};for(let[a,l]of Object.entries(i))s[a]=J(l,`${t}/${r}/${De(a)}`,n);o[r]=s;continue}if(["items","contains","additionalProperties","not"].includes(r)){o[r]=J(i,`${t}/${r}`,n);continue}if(["prefixItems","allOf","anyOf","oneOf"].includes(r)){if(!Array.isArray(i))throw new C(n.dialect,t,`${r} must be an array`);o[r]=i.map((s,a)=>J(s,`${t}/${r}/${a}`,n));continue}o[r]=$e(i)}if(n.dialect==="google"){let r=e.type!==void 0||e.properties!==void 0||e.items!==void 0,i=o.type!==void 0||o.properties!==void 0||o.items!==void 0;if(!r&&(e.oneOf!==void 0||e.allOf!==void 0||e.not!==void 0)||r&&!i)throw new C(n.dialect,t,"minimum structural contract cannot be represented")}return o}function Xn(e,t,n){if(t.type!=="object"||!K(t.properties))throw new C(n,"#","root object/properties contract changed");let o=Object.keys(e.properties).sort(),r=Object.keys(t.properties).sort();if(JSON.stringify(o)!==JSON.stringify(r))throw new C(n,"#","root property identity changed");let i=[...e.required??[]].sort(),s=Array.isArray(t.required)?[...t.required].sort():[];if(JSON.stringify(i)!==JSON.stringify(s))throw new C(n,"#","root required-property contract changed")}function pe(e,t,n){if(n.pointers.set(t,e),typeof e!="boolean"){typeof e.$anchor=="string"&&n.anchors.set(e.$anchor,e);for(let o of["$defs","properties","patternProperties"]){let r=e[o];if(K(r))for(let[i,s]of Object.entries(r))pe(s,`${t}/${o}/${De(i)}`,n)}for(let o of["items","contains","additionalProperties","not"]){let r=e[o];(typeof r=="boolean"||K(r))&&pe(r,`${t}/${o}`,n)}for(let o of["prefixItems","allOf","anyOf","oneOf"]){let r=e[o];Array.isArray(r)&&r.forEach((i,s)=>pe(i,`${t}/${o}/${s}`,n))}}}function Vn(e,t,n){if(!e.startsWith("#"))throw new C(n.dialect,t,"remote references are forbidden");if(e==="#")return n.root;if(e.startsWith("#/")){let o=e.slice(1).split("/").map(i=>i.replace(/~1/g,"/").replace(/~0/g,"~")).map(De).join("/"),r=n.pointers.get(o);if(r!==void 0)return r}else{let o=n.anchors.get(e.slice(1));if(o!==void 0)return o}throw new C(n.dialect,t,`unresolved reference ${e}`)}function xt(e){return(0,vt.createHash)("sha256").update(Me(e)).digest("hex")}function Me(e){return Array.isArray(e)?`[${e.map(Me).join(",")}]`:K(e)?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Me(e[t])}`).join(",")}}`:JSON.stringify(e)}function $e(e){return JSON.parse(JSON.stringify(e))}function De(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function K(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var Un={anthropic:{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1},"openai-responses":{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1},google:{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1}};function Bn(e){let t=e.kind==="anthropic"?"https://api.anthropic.com":e.kind==="google"?"https://generativelanguage.googleapis.com":e.kind==="openai-responses"?"https://api.openai.com":null;if(!e.baseURL&&!t)throw new y("Generic OpenAI-compatible providers require baseURL",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let n=D(e.baseURL??t,{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname});return n.pathname=n.pathname.replace(/\/$/,""),n}function ge(e,t){let n=new URL(e.toString());return n.pathname=`${n.pathname.replace(/\/$/,"")}/${t.replace(/^\//,"")}`,n}function qn(e){let t=e.authentication??{type:"bearer"};if(t.type==="none"||!e.apiKey)return{};if(t.type==="bearer")return{authorization:`Bearer ${e.apiKey}`};let n=t.header.trim().toLowerCase(),o=new Set(["host","content-length","connection","transfer-encoding","cookie","set-cookie","proxy-authorization"]);if(!/^[a-z0-9-]{1,80}$/.test(n)||o.has(n))throw new y("Generic provider authentication header is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let r=t.prefix??"";if(/[\r\n]/.test(r))throw new y("Generic provider authentication prefix is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});return{[n]:`${r}${e.apiKey}`}}function Hn(e){let t;if(e.kind==="openai-compatible"){if(!e.capabilityProfile)throw new y("Generic OpenAI-compatible providers require an explicit capabilityProfile",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"});t={...e.capabilityProfile};for(let n of["structuredOutput","promptCaching"])if(t[n])throw B("direct-openai-compatible",n);if(!!e.streaming!=!!t.streaming)throw new y("Generic endpoint streaming config must match capabilityProfile.streaming",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}else t={...Un[e.kind],streaming:!!e.streaming,reasoningMetadata:e.kind==="anthropic"&&!!e.streaming};return{...t,vision:t.imageInput}}function ye(e,t){return{providerId:t,endpointPolicy:{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},limits:e.transportLimits}}function _t(e){let t=/^data:([^;,]+);base64,([a-z0-9+/=\r\n]+)$/i.exec(e);return t?{mediaType:t[1],data:t[2].replace(/\s/g,"")}:null}function te(e){let t=Array.isArray(e.assistant_content)?e.assistant_content:[],n=Array.isArray(e.assistant_only_content)?e.assistant_only_content:[];return[...t,...n].filter(o=>o?.type==="image_url")}function Tt(e){return e.filter(t=>t?.type==="image_url")}function zn(e){return e.some(t=>Array.isArray(t.content)&&t.content.some(n=>n.type==="image_url"||n.type==="tool_result"&&te(n).length>0))}function Rt(e){let t=_t(e.image_url.url);return t?{type:"image",source:{type:"base64",media_type:t.mediaType,data:t.data}}:{type:"image",source:{type:"url",url:e.image_url.url}}}function Kn(e){return e.map(t=>({role:t.role,content:typeof t.content=="string"?t.content:t.content.flatMap(n=>{if(n.type==="image_url")return[Rt(n)];if(n.type==="text")return[n];if(n.type==="tool_use")return[{type:"tool_use",id:n.id,name:n.name,input:n.input}];let o=te(n),r=[{type:"text",text:Z(n.content)}];return r.push(...o.map(Rt)),[{type:"tool_result",tool_use_id:n.tool_use_id,content:r,is_error:n.is_error}]})}))}function Fn(e){return{type:"input_image",image_url:e.image_url.url,detail:e.image_url.detail??"auto"}}function Wn(e){let t=[];for(let n of e){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});continue}let o=n.content.filter(i=>i.type==="text").map(i=>i.text).join(`
8
- `),r=[...Tt(n.content),...n.content.flatMap(i=>i.type==="tool_result"?te(i):[])];(o||r.length)&&t.push({role:n.role,content:[...o?[{type:"input_text",text:o}]:[],...r.map(Fn)]});for(let i of n.content)i.type==="tool_use"?t.push({type:"function_call",call_id:i.id,name:i.name,arguments:JSON.stringify(i.input)}):i.type==="tool_result"&&t.push({type:"function_call_output",call_id:i.tool_use_id,output:Z(i.content)})}return t}function Ct(e){let t=_t(e.image_url.url);return t?{inlineData:{mimeType:t.mediaType,data:t.data}}:{fileData:{fileUri:e.image_url.url}}}function Yn(e){let t=new Map;for(let n of e)if(Array.isArray(n.content))for(let o of n.content)o.type==="tool_use"&&t.set(o.id,o.name);return e.map(n=>typeof n.content=="string"?{role:n.role==="assistant"?"model":"user",parts:[{text:n.content}]}:{role:n.role==="assistant"?"model":"user",parts:n.content.flatMap(o=>{if(o.type==="image_url")return[Ct(o)];if(o.type==="text")return[{text:o.text}];if(o.type==="tool_use")return[{functionCall:{id:o.id,name:o.name,args:o.input},...o.provider_metadata?.thoughtSignature?{thoughtSignature:o.provider_metadata.thoughtSignature}:{}}];let r=Z(o.content);return[{functionResponse:{id:o.tool_use_id,name:t.get(o.tool_use_id)??"unknown_tool",response:o.is_error?{error:r}:{result:r}}},...te(o).map(Ct)]})})}function Gn(e,t){let n=t?[{role:"system",content:t}]:[];for(let o of e){if(typeof o.content=="string"){n.push({role:o.role,content:o.content});continue}let r=o.content.filter(a=>a.type==="text").map(a=>a.text).join(`
9
- `),i=o.content.filter(a=>a.type==="tool_use").map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.input)}}));(r||i.length)&&n.push({role:o.role,content:r||null,...i.length?{tool_calls:i}:{}});for(let a of o.content)a.type==="tool_result"&&n.push({role:"tool",tool_call_id:a.tool_use_id,content:Z(a.content)});let s=[...Tt(o.content),...o.content.flatMap(a=>a.type==="tool_result"?te(a):[])];s.length&&n.push({role:"user",content:s.map(a=>({type:"image_url",image_url:{url:a.image_url.url,detail:a.image_url.detail??"auto"}}))})}return n}function Zn(e){return e.map(t=>({name:t.name,description:t.description,parameters:t.input_schema}))}function ne(e={}){let t=i=>{let s=Number(i);return Number.isFinite(s)&&s>0?s:0},n=e.input_tokens!==void 0?t(e.input_tokens)+t(e.cache_creation_input_tokens)+t(e.cache_read_input_tokens):t(e.prompt_tokens??e.promptTokenCount),o=i=>typeof i=="number"&&Number.isFinite(i),r=o(e.input_tokens)||o(e.prompt_tokens)||o(e.promptTokenCount);return{inputTokens:n,outputTokens:t(e.output_tokens??e.completion_tokens??e.candidatesTokenCount),usageReported:r}}function he(e,t,n){return{content:e,stopReason:t,...ne(n)}}function N(e,t,n){if(t&&typeof t=="object"&&!Array.isArray(t))return t;if(typeof t!="string")throw h(e,`${n} arguments must be JSON`);try{let o=JSON.parse(t||"{}");if(!o||typeof o!="object"||Array.isArray(o))throw new Error("arguments are not an object");return o}catch(o){throw h(e,`${n} contains malformed tool arguments`,o)}}function Qn(e,t){if(!Array.isArray(t.content))throw h(e,"content must be an array");let n=t.content.flatMap(r=>{if(r.type==="text"&&typeof r.text=="string")return[{type:"text",text:r.text}];if(r.type==="tool_use"){if(!r.id||!r.name)throw h(e,"tool_use is missing id or name");return[{type:"tool_use",id:String(r.id),name:String(r.name),input:N(e,r.input??{},"tool_use")}]}return[]}),o=t.stop_reason==="tool_use"?"tool_use":t.stop_reason==="max_tokens"?"max_tokens":"end_turn";return he(n,o,t.usage??{})}function eo(e,t){if(!Array.isArray(t.output))throw h(e,"output must be an array");let n=[];for(let i of t.output)if(i.type==="message"){if(!Array.isArray(i.content))throw h(e,"message content must be an array");for(let s of i.content)s.type==="output_text"&&typeof s.text=="string"&&n.push({type:"text",text:s.text})}else if(i.type==="function_call"){if(!i.call_id&&!i.id)throw h(e,"function_call is missing an id");if(!i.name)throw h(e,"function_call is missing a name");n.push({type:"tool_use",id:String(i.call_id??i.id),name:String(i.name),input:N(e,i.arguments??"{}","function_call")})}let o=n.some(i=>i.type==="tool_use"),r=t.status==="incomplete"&&t.incomplete_details?.reason==="max_output_tokens";return he(n,o?"tool_use":r?"max_tokens":"end_turn",t.usage??{})}function to(e,t){if(!Array.isArray(t.candidates)||t.candidates.length===0){let s=t.promptFeedback?.blockReason;throw s?new y(`Provider safety policy refused the request: ${String(s)}`,{providerId:e,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):h(e,"candidates must contain at least one item")}let n=t.candidates[0]??{};if(!Array.isArray(n.content?.parts))throw h(e,"candidate parts must be an array");let o=n.content.parts.flatMap((s,a)=>{if(typeof s.text=="string")return[{type:"text",text:s.text}];if(s.functionCall){let l=s.functionCall;if(!l.name)throw h(e,"functionCall is missing a name");return[{type:"tool_use",id:String(l.id??`gemini-${a}-${(0,je.randomUUID)().slice(0,8)}`),name:String(l.name),input:N(e,l.args??{},"functionCall"),...s.thoughtSignature?{provider_metadata:{thoughtSignature:s.thoughtSignature}}:{}}]}return[]}),r=o.some(s=>s.type==="tool_use"),i=String(n.finishReason??"").includes("MAX_TOKENS");return he(o,r?"tool_use":i?"max_tokens":"end_turn",t.usageMetadata??{})}function no(e,t){if(!Array.isArray(t.choices)||t.choices.length===0)throw h(e,"choices must contain an item");let n=t.choices[0]??{},o=n.message;if(!o||typeof o!="object")throw h(e,"choice message is missing");let r=[];if(typeof o.content=="string"&&o.content&&r.push({type:"text",text:o.content}),Array.isArray(o.tool_calls))for(let s of o.tool_calls){if(!s.id||!s.function?.name)throw h(e,"tool call is missing id or name");r.push({type:"tool_use",id:String(s.id),name:String(s.function.name),input:N(e,s.function.arguments??"{}","tool call")})}let i=n.finish_reason==="length"?"max_tokens":r.some(s=>s.type==="tool_use")?"tool_use":"end_turn";return he(r,i,t.usage??{})}async function p(e,t){try{await e?.onEvent?.(t)}catch{}}async function oo(e,t,n){await p(n,{type:"message.started"});let o=0;for(let r of e.content)r.type==="text"?(t?.(r.text),await p(n,{type:"text.delta",text:r.text})):r.type==="tool_use"&&(await p(n,{type:"tool_call.started",index:o,toolCallId:r.id,name:r.name}),await p(n,{type:"tool_call.completed",index:o,toolCallId:r.id,name:r.name,input:r.input}),o+=1);await p(n,{type:"usage.updated",inputTokens:e.inputTokens,outputTokens:e.outputTokens}),await p(n,{type:"message.completed",stopReason:e.stopReason})}function be(){return{content:[],inputTokens:0,outputTokens:0,usageReported:!1,stopReason:"end_turn",terminal:!1}}function Pe(e,t){if(!t.terminal)throw h(e,"stream ended without a terminal event");return{content:t.content,stopReason:t.stopReason,usageReported:t.usageReported,inputTokens:t.inputTokens,outputTokens:t.outputTokens}}function we(e,t){try{let n=JSON.parse(t.data);if(!n||typeof n!="object"||Array.isArray(n))throw new Error("frame is not an object");return n}catch(n){throw h(e,`invalid stream JSON for ${t.event}`,n)}}async function ro(e){let t=be(),n=new Map;return await Q(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},ye(e.config,e.providerId),async o=>{let r=we(e.providerId,o),i=String(r.type??o.event);if(i==="message_start"){let s=ne(r.message?.usage);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),await p(e.context,{type:"message.started",providerMessageId:r.message?.id})}else if(i==="content_block_start"){let s=Number(r.index??0),a=r.content_block??{};if(a.type==="tool_use"){let l={index:s,id:String(a.id),name:String(a.name),arguments:""};n.set(s,l),await p(e.context,{type:"tool_call.started",index:s,toolCallId:l.id,name:l.name})}else if(a.type==="text"&&a.text){let l=String(a.text);t.content.push({type:"text",text:l}),e.onText?.(l),await p(e.context,{type:"text.delta",text:l})}}else if(i==="content_block_delta"){let s=r.delta??{};if(s.type==="text_delta"){let a=String(s.text??"");if(a){let l=t.content.at(-1);l?.type==="text"?l.text+=a:t.content.push({type:"text",text:a}),e.onText?.(a),await p(e.context,{type:"text.delta",text:a})}}else if(s.type==="thinking_delta")await p(e.context,{type:"reasoning.delta",text:String(s.thinking??"")});else if(s.type==="input_json_delta"){let a=Number(r.index??0),l=n.get(a);if(!l)throw h(e.providerId,"tool argument delta arrived before tool start");let c=String(s.partial_json??"");l.arguments+=c,await p(e.context,{type:"tool_call.arguments.delta",index:a,toolCallId:l.id,delta:c})}}else if(i==="content_block_stop"){let s=Number(r.index??0),a=n.get(s);if(a){let l=N(e.providerId,a.arguments||"{}","streamed tool call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:l}),await p(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:l})}}else if(i==="message_delta"){t.outputTokens=Number(r.usage?.output_tokens??t.outputTokens);let s=r.delta?.stop_reason;t.stopReason=s==="tool_use"?"tool_use":s==="max_tokens"?"max_tokens":"end_turn",await p(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}else if(i==="message_stop")t.terminal=!0,await p(e.context,{type:"message.completed",stopReason:t.stopReason});else if(i==="error")throw h(e.providerId,String(r.error?.message??"stream error"))}),Pe(e.providerId,t)}async function io(e){let t=be(),n=new Map;return await Q(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},ye(e.config,e.providerId),async o=>{if(o.data==="[DONE]")return;let r=we(e.providerId,o),i=String(r.type??o.event);if(i==="response.created")await p(e.context,{type:"message.started",providerMessageId:r.response?.id});else if(i==="response.output_text.delta"){let s=String(r.delta??""),a=t.content.at(-1);a?.type==="text"?a.text+=s:t.content.push({type:"text",text:s}),e.onText?.(s),await p(e.context,{type:"text.delta",text:s})}else if(i==="response.output_item.added"&&r.item?.type==="function_call"){let s=Number(r.output_index??n.size),a={index:s,id:String(r.item.call_id??r.item.id),name:String(r.item.name),arguments:String(r.item.arguments??"")};n.set(s,a),await p(e.context,{type:"tool_call.started",index:s,toolCallId:a.id,name:a.name})}else if(i==="response.function_call_arguments.delta"){let s=Number(r.output_index??0),a=n.get(s);if(!a)throw h(e.providerId,"tool argument delta arrived before tool start");let l=String(r.delta??"");a.arguments+=l,await p(e.context,{type:"tool_call.arguments.delta",index:s,toolCallId:a.id,delta:l})}else if(i==="response.output_item.done"&&r.item?.type==="function_call"){let s=Number(r.output_index??0),a=n.get(s)??{index:s,id:String(r.item.call_id??r.item.id),name:String(r.item.name),arguments:""},l=String(r.item.arguments??a.arguments??"{}"),c=N(e.providerId,l,"streamed function call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:c}),t.stopReason="tool_use",await p(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:c})}else if(i==="response.completed"||i==="response.incomplete"){let s=r.response??{},a=ne(s.usage??{});t.inputTokens=a.inputTokens,a.usageReported&&(t.usageReported=!0),t.outputTokens=a.outputTokens,i==="response.incomplete"&&(t.stopReason="max_tokens"),t.terminal=!0,await p(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens}),await p(e.context,{type:"message.completed",stopReason:t.stopReason})}else if(i==="response.failed"||i==="error")throw h(e.providerId,String(r.response?.error?.message??r.error?.message??"stream failed"))}),Pe(e.providerId,t)}async function so(e){let t=be(),n=new Map;await p(e.context,{type:"message.started"}),await Q(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0,stream_options:{include_usage:!0}}),signal:e.signal},ye(e.config,e.providerId),async o=>{if(o.data==="[DONE]"){t.terminal=!0;return}let r=we(e.providerId,o);if(r.usage){let i=ne(r.usage);t.inputTokens=i.inputTokens,i.usageReported&&(t.usageReported=!0),t.outputTokens=i.outputTokens,await p(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}for(let i of r.choices??[]){let s=i.delta??{};if(typeof s.content=="string"&&s.content){let a=t.content.at(-1);a?.type==="text"?a.text+=s.content:t.content.push({type:"text",text:s.content}),e.onText?.(s.content),await p(e.context,{type:"text.delta",text:s.content})}for(let a of s.tool_calls??[]){let l=Number(a.index??0),c=n.get(l);c||(c={index:l,id:String(a.id??`call-${l}`),name:"",arguments:""},n.set(l,c)),a.id&&(c.id=String(a.id)),a.function?.name&&(c.name+=String(a.function.name)),c.name&&!c.started&&(await p(e.context,{type:"tool_call.started",index:l,toolCallId:c.id,name:c.name}),c.started=!0);let m=String(a.function?.arguments??"");m&&(c.arguments+=m,await p(e.context,{type:"tool_call.arguments.delta",index:l,toolCallId:c.id,delta:m}))}i.finish_reason&&(t.stopReason=i.finish_reason==="length"?"max_tokens":n.size?"tool_use":"end_turn")}});for(let o of[...n.values()].sort((r,i)=>r.index-i.index)){let r=N(e.providerId,o.arguments||"{}","streamed tool call");t.content.push({type:"tool_use",id:o.id,name:o.name,input:r}),await p(e.context,{type:"tool_call.completed",index:o.index,toolCallId:o.id,name:o.name,input:r})}return await p(e.context,{type:"message.completed",stopReason:t.stopReason}),Pe(e.providerId,t)}async function ao(e){let t=be(),n=0;return await p(e.context,{type:"message.started"}),await Q(e.url,{method:"POST",headers:e.headers,body:JSON.stringify(e.body),signal:e.signal},ye(e.config,e.providerId),async o=>{let r=we(e.providerId,o);if(r.usageMetadata){let s=ne(r.usageMetadata);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),t.outputTokens=s.outputTokens,await p(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}let i=r.candidates?.[0];for(let s of i?.content?.parts??[])if(typeof s.text=="string"){let a=t.content.at(-1);a?.type==="text"?a.text+=s.text:t.content.push({type:"text",text:s.text}),e.onText?.(s.text),await p(e.context,{type:"text.delta",text:s.text})}else if(s.functionCall){let a=s.functionCall,l=String(a.id??`gemini-${n}-${(0,je.randomUUID)().slice(0,8)}`),c=String(a.name??""),m=N(e.providerId,a.args??{},"streamed function call");await p(e.context,{type:"tool_call.started",index:n,toolCallId:l,name:c}),t.content.push({type:"tool_use",id:l,name:c,input:m,...s.thoughtSignature?{provider_metadata:{thoughtSignature:s.thoughtSignature}}:{}}),await p(e.context,{type:"tool_call.completed",index:n,toolCallId:l,name:c,input:m}),n+=1}i?.finishReason&&(t.stopReason=String(i.finishReason).includes("MAX_TOKENS")?"max_tokens":n?"tool_use":"end_turn",t.terminal=!0,await p(e.context,{type:"message.completed",stopReason:t.stopReason}))}),Pe(e.providerId,t)}function lo(e){return e instanceof y?{type:"provider.error",code:e.code,category:e.category,retryable:e.retryable}:{type:"provider.error",code:"PROVIDER_TRANSPORT_ERROR",category:"transport",retryable:!1}}function St(e){let t=`direct-${e.kind}`,n=Bn(e),o=Hn(e),r={profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},i={providerId:t,endpointPolicy:r,limits:e.transportLimits};return{id:t,capabilities:o,async complete(s,a,l,c,m,d){if(l.length>0&&!o.tools)throw B(t,"tools");if(zn(a)&&!o.imageInput)throw B(t,"image input");let g=e.kind==="openai-compatible"?"openai-chat":e.kind,f=fe(l,g).map(({definition:R})=>R),P,x={"content-type":"application/json"},b;try{if(e.kind==="anthropic"){if(P=ge(n,"/v1/messages"),x={...x,"x-api-key":e.apiKey,"anthropic-version":e.anthropicVersion??"2023-06-01"},b={model:s,max_tokens:e.maxTokens??8192,system:d?.systemPrompt,messages:Kn(a),tools:f.map(v=>({name:v.name,description:v.description,input_schema:v.input_schema}))},e.streaming)return await ro({providerId:t,url:P,headers:x,body:b,config:e,signal:m,onText:c,context:d})}else if(e.kind==="google"){let v=e.streaming?"streamGenerateContent":"generateContent";if(P=ge(n,`/v1beta/models/${encodeURIComponent(s)}:${v}`),e.streaming&&P.searchParams.set("alt","sse"),x={...x,"x-goog-api-key":e.apiKey},b={systemInstruction:d?.systemPrompt?{parts:[{text:d.systemPrompt}]}:void 0,contents:Yn(a),tools:f.length>0?[{functionDeclarations:Zn(f)}]:void 0,generationConfig:{maxOutputTokens:e.maxTokens??8192}},e.streaming)return await ao({providerId:t,url:P,headers:x,body:b,config:e,signal:m,onText:c,context:d})}else if(e.kind==="openai-compatible"){if(P=ge(n,e.chatCompletionsPath??"/v1/chat/completions"),x={...x,...qn(e)},b={model:s,messages:Gn(a,d?.systemPrompt),tools:f.length>0?f.map(v=>({type:"function",function:{name:v.name,description:v.description,parameters:v.input_schema}})):void 0,max_tokens:e.maxTokens??8192},e.streaming)return await so({providerId:t,url:P,headers:x,body:b,config:e,signal:m,onText:c,context:d})}else if(P=ge(n,"/v1/responses"),x={...x,authorization:`Bearer ${e.apiKey}`},b={model:s,instructions:d?.systemPrompt,input:Wn(a),tools:f.map(v=>({type:"function",name:v.name,description:v.description,parameters:v.input_schema})),max_output_tokens:e.maxTokens??8192,store:!1},e.streaming)return await io({providerId:t,url:P,headers:x,body:b,config:e,signal:m,onText:c,context:d});let R=await lt(P,{method:"POST",headers:x,body:JSON.stringify(b),signal:m},i),k=e.kind==="anthropic"?Qn(t,R):e.kind==="google"?to(t,R):e.kind==="openai-compatible"?no(t,R):eo(t,R);return await oo(k,c,d),k}catch(R){throw R instanceof y&&R.category==="cancelled"?await p(d,{type:"provider.cancelled"}):(await p(d,lo(R)),R instanceof y&&R.retryable&&await p(d,{type:"provider.retry",retryAfterMs:R.retryAfterMs,reason:R.category})),R}}}}function Je(e,t={}){for(let n of e){let o=n.codePointAt(0);if(o===127)return!0;if(!(o>31)&&!(o===9&&t.allowTab===!0)&&!((o===10||o===13)&&t.allowLineBreaks===!0))return!0}return!1}var Xe=1,X={streaming:!0,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!0,usageAccounting:!0,promptCaching:!1,modelDiscovery:!0},xe={...X,reasoningMetadata:!1},kt=[A("xeno","XENO hosted","xeno","openai-compatible","https://api.xenostudio.ai","public-https","bearer-env","XENO_API_KEY","/v1/models",X),A("openai","OpenAI","direct","openai-responses","https://api.openai.com","public-https","bearer-env","OPENAI_API_KEY","/v1/models",X),A("anthropic","Anthropic","direct","anthropic","https://api.anthropic.com","public-https","header-env","ANTHROPIC_API_KEY","/v1/models",{...X,structuredOutput:!1}),A("google","Google AI Studio","direct","google","https://generativelanguage.googleapis.com","public-https","header-env","GOOGLE_API_KEY","/v1beta/models",X),A("openrouter","OpenRouter","gateway","openai-compatible","https://openrouter.ai/api","public-https","bearer-env","OPENROUTER_API_KEY","/v1/models",xe),A("xeno-rt","xeno-rt","local","openai-compatible","http://127.0.0.1:3338","local-network","none",void 0,"/v1/models",xe,["running xeno-rt endpoint"]),A("ollama","Ollama","local","openai-compatible","http://127.0.0.1:11434","local-network","none",void 0,"/v1/models",xe,["Ollama OpenAI compatibility endpoint"]),A("azure-openai","Azure OpenAI","cloud","openai-compatible",void 0,"public-https","header-env","AZURE_OPENAI_API_KEY",void 0,xe,["resource endpoint","deployment","API version","host adapter for deployment-shaped requests"]),A("aws-bedrock","Amazon Bedrock","cloud","aws-bedrock",void 0,"public-https","cloud-chain",void 0,void 0,{...X,modelDiscovery:!1},["AWS credential chain","region","Bedrock host adapter"]),A("vertex-ai","Google Vertex AI","cloud","vertex-ai",void 0,"public-https","cloud-chain",void 0,void 0,{...X,modelDiscovery:!1},["Google application-default credentials","project","region","Vertex host adapter"])],W=class{presets=new Map;constructor(t=kt){for(let n of t)this.add(n)}add(t){Po(t),this.presets.set(t.id,structuredClone(t))}get(t){let n=this.presets.get(t);return n?structuredClone(n):void 0}list(){return[...this.presets.values()].map(t=>structuredClone(t)).sort((t,n)=>t.displayName.localeCompare(n.displayName))}resolve(t,n){let o=this.get(t.providerId);if(!o)throw new Error(`Unknown provider preset: ${t.providerId}`);let r=[],i;try{i=Et(t.baseUrl??o.defaultBaseUrl,o)}catch(l){r.push(l instanceof Error?l.message:String(l))}i||r.push("Provider endpoint is not configured");let s=t.secretRef?.trim()||o.auth.defaultSecretRef;(o.auth.mode==="bearer-env"||o.auth.mode==="header-env")&&!s&&r.push("Credential reference is not configured"),s&&n&&!n(s)&&r.push(`Credential reference ${s} is not available`),(o.adapterKind==="aws-bedrock"||o.adapterKind==="vertex-ai"||o.id==="azure-openai")&&r.push("Provider requires a dedicated host adapter");let a="ready";return t.enabled===!1?a="blocked":r.some(l=>l.includes("host adapter"))?a="requires-host-adapter":r.some(l=>l.includes("Credential"))?a="missing-credential":r.length&&(a="needs-configuration"),{connection:wo(t),preset:o,...i?{endpoint:i}:{},...s?{secretRef:s}:{},readiness:a,blockers:r}}};async function co(e){let n=(e.catalog??new W).resolve(e.connection),o=n.preset.auth.mode,r=n.secretRef?await e.resolveSecretRef?.(n.secretRef):void 0,i=o==="none"?"not-required":o==="cloud-chain"?"external":r?"present":"missing",s={schemaVersion:1,connectionId:n.connection.id,providerId:n.preset.id,...n.endpoint?{endpoint:n.endpoint}:{},readiness:n.readiness,credentialState:i,reachable:!1,authenticated:null,models:[],capabilities:n.preset.capabilities,errors:[...n.blockers]};if(n.readiness==="requires-host-adapter"||n.readiness==="blocked"||!n.endpoint)return s;if((o==="bearer-env"||o==="header-env")&&!r)return{...s,readiness:"missing-credential",errors:F([...s.errors,`Credential reference ${n.secretRef??"(missing)"} did not resolve`])};if(!n.preset.discoveryPath)return{...s,readiness:"ready",errors:F(s.errors)};let a=D(n.endpoint,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts});try{await q(a,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts,resolveHostname:e.resolveHostname})}catch(d){return{...s,readiness:"blocked",errors:F([...s.errors,d instanceof Error?d.message:String(d)])}}let l=fo(a,n.preset.discoveryPath),c=po(n.preset,r),m=Date.now();try{let d=await go(e.fetchImpl??fetch,l,{headers:c},e.timeoutMs??8e3),g=Date.now()-m,f=d.status===401||d.status===403?!1:d.ok?!0:null;if(!d.ok)return{...s,reachable:!0,authenticated:f,latencyMs:g,readiness:f===!1?"missing-credential":"blocked",errors:F([...s.errors,`Provider discovery returned HTTP ${d.status}`])};let P=new Uint8Array(await d.arrayBuffer()),x=e.maxResponseBytes??2*1024*1024;if(P.byteLength>x)throw new Error(`Provider discovery response exceeds ${x} bytes`);let b=JSON.parse(new TextDecoder().decode(P));return{...s,readiness:"ready",reachable:!0,authenticated:f,latencyMs:g,models:yo(b),errors:F(s.errors)}}catch(d){return{...s,readiness:"blocked",latencyMs:Date.now()-m,errors:F([...s.errors,xo(d)])}}}function uo(e,t={}){let n=t.allowedProviderIds?new Set(t.allowedProviderIds):null,o=new Set(t.deniedProviderIds??[]),r=new Map((t.fallbackOrder??[]).map((i,s)=>[i,s]));return e.filter(({connection:i,model:s})=>{let a=i.preset.id;return!(i.readiness!=="ready"||i.connection.enabled===!1||n&&!n.has(a)||o.has(a)||!ho({...i.preset.capabilities,...s.capabilities??{}},t.require)||t.maxInputCostPerMillion!==void 0&&(s.inputCostPerMillion??1/0)>t.maxInputCostPerMillion||t.maxOutputCostPerMillion!==void 0&&(s.outputCostPerMillion??1/0)>t.maxOutputCostPerMillion)}).sort((i,s)=>{if(t.preferLocal&&i.connection.preset.family!==s.connection.preset.family){if(i.connection.preset.family==="local")return-1;if(s.connection.preset.family==="local")return 1}let a=r.get(i.connection.preset.id)??Number.MAX_SAFE_INTEGER,l=r.get(s.connection.preset.id)??Number.MAX_SAFE_INTEGER;return a-l||i.connection.preset.id.localeCompare(s.connection.preset.id)||i.model.id.localeCompare(s.model.id)})}function mo(e,t){if(e.readiness==="requires-host-adapter")throw new Error(`${e.preset.displayName} requires a dedicated host adapter`);if(!e.endpoint)throw new Error("Provider endpoint is not configured");if(e.preset.adapterKind==="aws-bedrock"||e.preset.adapterKind==="vertex-ai")throw new Error("Cloud adapter cannot be represented as DirectProviderConfig");if((e.preset.auth.mode==="bearer-env"||e.preset.auth.mode==="header-env")&&!t)throw new Error("Provider credential did not resolve");let n=bo(e.preset.capabilities);return{kind:e.preset.adapterKind,apiKey:t??"",baseURL:e.endpoint,endpointProfile:e.preset.endpointProfile,allowedHosts:e.preset.allowedHosts,streaming:n.streaming,...e.preset.adapterKind==="openai-compatible"?{capabilityProfile:n}:{},...e.preset.auth.mode==="header-env"?{authentication:{type:"header",header:e.preset.auth.header??Ve(e.preset.id),prefix:e.preset.auth.prefix}}:{},...e.preset.auth.mode==="none"?{authentication:{type:"none"}}:{}}}function A(e,t,n,o,r,i,s,a,l,c,m=[]){return{schemaVersion:Xe,id:e,displayName:t,family:n,adapterKind:o,...r?{defaultBaseUrl:r}:{},endpointProfile:i,...r?{allowedHosts:[new URL(r).hostname]}:{},auth:{mode:s,...a?{defaultSecretRef:a}:{},...s==="header-env"?{header:Ve(e)}:{},description:s==="none"?"No credential required":s==="cloud-chain"?"Provider-owned cloud credential chain":`Environment/credential reference ${a}`},capabilities:c,...l?{discoveryPath:l}:{},requires:m}}function Ve(e){return e==="anthropic"?"x-api-key":e==="google"?"x-goog-api-key":e==="azure-openai"?"api-key":"authorization"}function po(e,t){return e.auth.mode==="none"||e.auth.mode==="cloud-chain"?{accept:"application/json"}:t?e.auth.mode==="bearer-env"?{accept:"application/json",authorization:`Bearer ${t}`}:{accept:"application/json",[e.auth.header??Ve(e.id)]:`${e.auth.prefix??""}${t}`}:{accept:"application/json"}}function Et(e,t){return e?D(e.trim().replace(/\/+$/,""),{profile:t.endpointProfile,allowedHosts:t.allowedHosts}).toString().replace(/\/$/,""):void 0}function fo(e,t){let n=new URL(e.toString());if(!t.startsWith("/")||t.includes("..")||t.includes("#"))throw new Error("Provider discovery path is invalid");return n.pathname=`${n.pathname.replace(/\/$/,"")}${t}`.replace(/\/{2,}/g,"/"),n}async function go(e,t,n,o){let r=new AbortController,i=setTimeout(()=>r.abort(new Error("Provider probe timed out")),Math.max(100,Math.min(o,6e4)));i.unref?.();try{return await e(t,{...n,signal:r.signal,redirect:"error"})}finally{clearTimeout(i)}}function yo(e){if(!e||typeof e!="object")return[];let t=e,o=(Array.isArray(t.data)?t.data:Array.isArray(t.models)?t.models:[]).flatMap(r=>{if(!r||typeof r!="object")return[];let i=r,a=(typeof i.id=="string"?i.id:typeof i.name=="string"?i.name.replace(/^models\//,""):"").trim();return!a||a.length>300||Je(a)?[]:[{id:a,...typeof i.displayName=="string"&&i.displayName.trim()?{displayName:i.displayName.trim().slice(0,300)}:{},...typeof i.owned_by=="string"&&i.owned_by.trim()?{ownedBy:i.owned_by.trim().slice(0,200)}:{},metadataSource:"provider"}]});return[...new Map(o.map(r=>[r.id,r])).values()].sort((r,i)=>r.id.localeCompare(i.id))}function ho(e,t){return t?Object.entries(t).every(([n,o])=>o!==!0||e[n]===!0):!0}function bo(e){return{streaming:e.streaming,textInput:e.textInput,imageInput:e.imageInput,tools:e.tools,parallelToolCalls:e.parallelToolCalls,structuredOutput:e.structuredOutput,reasoningMetadata:e.reasoningMetadata,usageAccounting:e.usageAccounting,cancellation:!0,retryAfter:!0,promptCaching:e.promptCaching}}function Po(e){if(e.schemaVersion!==Xe||!/^[a-z0-9][a-z0-9._-]{1,80}$/.test(e.id))throw new Error("Provider preset id is invalid");if(!e.displayName.trim())throw new Error(`Provider preset ${e.id} requires displayName`);if(e.defaultBaseUrl&&Et(e.defaultBaseUrl,e),e.discoveryPath&&(!e.discoveryPath.startsWith("/")||e.discoveryPath.includes("..")))throw new Error(`Provider preset ${e.id} discoveryPath is invalid`);if(e.auth.header&&!/^[A-Za-z0-9-]{1,80}$/.test(e.auth.header))throw new Error(`Provider preset ${e.id} auth header is invalid`)}function wo(e){let t=e.id.trim();if(!t||t.length>120||Je(t))throw new Error("Provider connection id is invalid");let n=e.secretRef?.trim();if(n&&!/^[A-Za-z_][A-Za-z0-9_.:/-]{0,255}$/.test(n))throw new Error("Provider credential reference is invalid");return{id:t,providerId:e.providerId.trim(),...e.baseUrl?.trim()?{baseUrl:e.baseUrl.trim()}:{},...n?{secretRef:n}:{},...e.model?.trim()?{model:e.model.trim().slice(0,300)}:{},enabled:e.enabled!==!1,...e.metadata?{metadata:{...e.metadata}}:{}}}function F(e){return[...new Set(e)]}function xo(e){return(e instanceof Error?e.message:String(e)).replace(/(Bearer\s+)[A-Za-z0-9._~+/=-]+/gi,"$1[redacted]").replace(/([?&#](?:token|key|secret|password|api[_-]?key)=)[^&#\s]+/gi,"$1[redacted]").slice(0,500)}var ze=require("node:crypto"),S=require("node:fs/promises"),V=require("node:path");function At(e){return JSON.stringify(Ue(e,new Set))}function Ue(e,t){if(e===null||typeof e!="object"){if(typeof e=="number"&&!Number.isFinite(e))throw new TypeError("Artifact JSON cannot contain non-finite numbers");return e}if(t.has(e))throw new TypeError("Artifact JSON cannot contain cycles");if(t.add(e),Array.isArray(e)){let o=e.map(r=>Ue(r,t));return t.delete(e),o}let n={};for(let o of Object.keys(e).sort((r,i)=>r.localeCompare(i))){let r=e[o];if(r===void 0)throw new TypeError(`Artifact JSON property ${o} is undefined`);n[o]=Ue(r,t)}return t.delete(e),n}var L=require("node:fs"),Be=require("node:os"),Ot=require("node:path");function vo(){return new Date().toISOString()}function Ro(){return new Date(Date.now()-Math.floor(process.uptime()*1e3)).toISOString()}function Lt(e){try{return JSON.parse((0,L.readFileSync)(e,"utf8"))}catch{return null}}function Co(e){if(!e||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function _o(e){return e.hostname!==(0,Be.hostname)()?!0:Co(e.pid)}function It(e,t){(0,L.mkdirSync)((0,Ot.dirname)(e),{recursive:!0}),(0,L.writeFileSync)(e,JSON.stringify(t,null,2)+`
10
- `,{encoding:"utf8",flag:"wx"})}function To(e,t){let n=Lt(e);n?.pid!==t.pid||n.hostname!==t.hostname||(0,L.rmSync)(e,{force:!0})}function Mt(e,t,n){let o=vo(),r={schemaVersion:1,name:t,pid:process.pid,hostname:(0,Be.hostname)(),processStartedAt:Ro(),version:n,acquiredAt:o,updatedAt:o};try{It(e,r)}catch(i){if(i.code!=="EEXIST")throw i;let a=Lt(e);if(a&&_o(a))throw new Error(`${t} is already locked by PID ${a.pid} on ${a.hostname}.`);(0,L.rmSync)(e,{force:!0}),It(e,r)}return{record:r,release:()=>{To(e,r)}}}var ve=1,He=class{directory;snapshotPath;lockPath;catalog;now;constructor(t){this.directory=(0,V.resolve)(t.directory),this.snapshotPath=(0,V.join)(this.directory,"providers.json"),this.lockPath=(0,V.join)(this.directory,"providers.lock"),this.catalog=t.catalog??new W,this.now=t.now??(()=>new Date)}async upsert(t){let n=this.catalog.resolve(t).connection;return Nt(n),this.mutate(o=>{let r=o.connections.filter(i=>i.id!==n.id);return r.push(n),{snapshot:qe(o,r,o.routingPolicy,this.now()),result:n}})}async remove(t){return this.mutate(n=>{let o=n.connections.filter(r=>r.id!==t);return o.length===n.connections.length?{snapshot:n,result:!1}:{snapshot:qe(n,o,n.routingPolicy,this.now()),result:!0}})}async setRoutingPolicy(t){let n=Dt(t);return this.mutate(o=>({snapshot:qe(o,o.connections,n,this.now()),result:n}))}async get(t){return(await this.load()).connections.find(n=>n.id===t)??null}async list(){return(await this.load()).connections}async load(){try{let t=JSON.parse(await(0,S.readFile)(this.snapshotPath,"utf8"));return ko(t,this.catalog),t}catch(t){if(t.code==="ENOENT")return So(this.now());throw t}}async mutate(t){await(0,S.mkdir)(this.directory,{recursive:!0,mode:448});let n=Mt(this.lockPath,"xeno provider connection store","1");try{let o=await this.load(),{snapshot:r,result:i}=t(o);return r!==o&&await Eo(this.snapshotPath,`${JSON.stringify(r,null,2)}
11
- `),i}finally{n.release()}}};function So(e){return $t({schemaVersion:ve,generation:0,updatedAt:e.toISOString(),connections:[],routingPolicy:{}})}function qe(e,t,n,o){return $t({schemaVersion:ve,generation:e.generation+1,updatedAt:o.toISOString(),connections:[...t].sort((r,i)=>r.id.localeCompare(i.id)),routingPolicy:n})}function $t(e){return{...e,checksum:{algorithm:"sha256",value:(0,ze.createHash)("sha256").update(jt(e)).digest("hex")}}}function ko(e,t){if(e.schemaVersion!==ve||!Array.isArray(e.connections))throw new Error("Invalid provider connection snapshot");let{checksum:n,...o}=e;if(n?.algorithm!=="sha256"||n.value!==(0,ze.createHash)("sha256").update(jt(o)).digest("hex"))throw new Error("Provider connection snapshot checksum mismatch");let r=new Set;for(let i of e.connections){let s=t.resolve(i).connection;if(Nt(s),r.has(s.id))throw new Error(`Duplicate provider connection: ${s.id}`);r.add(s.id)}Dt(e.routingPolicy)}function Nt(e){let t=JSON.stringify(e);if(/\b(?:sk-[A-Za-z0-9_-]{16,}|xox[baprs]-[A-Za-z0-9-]{16,}|AKIA[0-9A-Z]{16})\b/.test(t))throw new Error("Provider connection configuration cannot contain raw credentials");if(e.baseUrl&&/[?&#](?:token|key|secret|password|api[_-]?key)=/i.test(e.baseUrl))throw new Error("Provider endpoint cannot contain credentials")}function Dt(e){let t=o=>o?[...new Set(o.map(r=>r.trim()).filter(Boolean))].sort():void 0,n={...t(e.allowedProviderIds)?{allowedProviderIds:t(e.allowedProviderIds)}:{},...t(e.deniedProviderIds)?{deniedProviderIds:t(e.deniedProviderIds)}:{},...t(e.fallbackOrder)?{fallbackOrder:t(e.fallbackOrder)}:{},...e.preferLocal!==void 0?{preferLocal:!!e.preferLocal}:{},...e.require?{require:{...e.require}}:{}};for(let[o,r]of[["maxInputCostPerMillion",e.maxInputCostPerMillion],["maxOutputCostPerMillion",e.maxOutputCostPerMillion]])if(r!==void 0){if(!Number.isFinite(r)||r<0)throw new Error(`${o} must be a non-negative finite number`);n[o]=r}return n}async function Eo(e,t){await(0,S.mkdir)((0,V.dirname)(e),{recursive:!0,mode:448});let n=`${e}.${process.pid}.${Date.now()}.tmp`,o;try{o=await(0,S.open)(n,"wx",384),await o.writeFile(t,"utf8"),await o.sync(),await o.close(),o=void 0,await(0,S.rename)(n,e),await(0,S.chmod)(e,384).catch(()=>{})}finally{o&&await o.close().catch(()=>{}),await(0,S.unlink)(n).catch(()=>{})}}function jt(e){return At(e)}0&&(module.exports={BUILT_IN_XENO_PROVIDER_PRESETS,DualLLMProvider,FileXenoProviderConnectionStore,ProviderError,ToolSchemaProjectionError,XENO_PROVIDER_CATALOG_SCHEMA_VERSION,XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION,XenoProviderCatalog,assertDirectEndpointResolution,classifyProviderHttpError,createDirectProvider,directProviderConfigFromConnection,parseRetryAfter,probeXenoProvider,projectToolDefinitionsForProvider,projectToolSchemaForProvider,providerCapabilityError,providerProtocolError,selectXenoProviderRoute,validateDirectEndpoint});
5
+ `).trim()}function oe(e){return typeof e=="string"?e:Ln(e)}var Pe=require("node:perf_hooks");var On=1;var Mn=12,$n=128,Nn=/^xeno\.[a-z0-9]+(?:[._][a-z0-9]+)*$/u,Dn=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/u,jn=/(?:[\\/]|@|https?:|bearer|token|secret|password|credential|api[_-]?key|[0-9a-f]{8}-[0-9a-f-]{27,})/iu,qn=new Set(["arch","cached","capability","category","component","contained","error_code","frame_kind","gate","method","mode","operation","outcome","platform","previous_state","protocol_version","provider","queue","reason","recovery","retry_kind","state","status","tool","transport","trigger"]),ht=new Set,bt=new Map;function Un(e){let t=e.trim().toLowerCase();return!t||t.length>64||jn.test(t)||!Dn.test(t)?null:t}function Jn(e,t){if(typeof t=="boolean")return t;if(typeof t=="number")return e!=="protocol_version"||!Number.isInteger(t)||t<0||t>100?null:t;if(typeof t!="string")return null;let n=Un(t);if(!n)return null;let r=bt.get(e);return r||(r=new Set,bt.set(e,r)),!r.has(n)&&r.size>=$n?"other":(r.add(n),n)}function Xn(e={}){let t={};for(let[n,r]of Object.entries(e)){if(Object.keys(t).length>=Mn)break;if(!qn.has(n))continue;let o=Jn(n,r);o!==null&&(t[n]=o)}return Object.freeze(t)}function vt(e){if(ht.size===0||!Nn.test(e.name)||e.name.length>128)return;let t=e.kind==="event"?1:e.value??1;if(!Number.isFinite(t)||t<0)return;let n=Object.freeze({schemaVersion:On,kind:e.kind,name:e.name,value:Math.min(t,Number.MAX_SAFE_INTEGER),timestamp:(e.timestamp??new Date).toISOString(),attributes:Xn(e.attributes)});for(let r of ht)try{r(n)}catch{}}function W(e,t=1,n){vt({kind:"counter",name:e,value:t,attributes:n})}function Je(e,t,n){vt({kind:"histogram",name:e,value:t,attributes:n})}var Ct=require("node:dns/promises"),ie=require("node:net");var Vn=["context length","context window","maximum context","too many tokens","request too large"];function Pt(e){let t=e.toLowerCase();return Vn.some(n=>t.includes(n))}var P=class extends Error{category;code;retryable;providerId;statusCode;retryAfterMs;requestId;constructor(t,n){super(t,n.cause!==void 0?{cause:n.cause}:void 0),this.name="ProviderError",this.category=n.category,this.code=n.code,this.retryable=n.retryable??!1,this.providerId=n.providerId,this.statusCode=n.statusCode,this.retryAfterMs=n.retryAfterMs,this.requestId=n.requestId}};function ye(e,t=Date.now()){if(!e)return;let n=Number(e.trim());if(Number.isFinite(n)&&n>=0)return Math.ceil(n*1e3);let r=Date.parse(e);if(Number.isFinite(r))return Math.max(0,r-t)}function Bn(e){if(typeof e=="string")return e;if(!e||typeof e!="object")return"";let t=e,n=t.error;if(typeof n=="string")return n;if(n&&typeof n=="object"){let r=n;if(typeof r.message=="string")return r.message;if(typeof r.type=="string")return r.type}return typeof t.message=="string"?t.message:""}function wt(e,t){return t.some(n=>e.includes(n))}function he(e){let t=Bn(e.body).trim(),n=t.toLowerCase(),r=t?`: ${t.slice(0,1e3)}`:"",o={providerId:e.providerId,statusCode:e.statusCode,retryAfterMs:e.retryAfterMs,requestId:e.requestId};return e.statusCode===401?new P(`Provider authentication failed${r}`,{...o,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):e.statusCode===403?new P(`Provider authorization failed${r}`,{...o,category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):e.statusCode===429?new P(`Provider rate limit reached${r}`,{...o,category:"rate_limit",code:"PROVIDER_RATE_LIMITED",retryable:!0}):Pt(n)?new P(`Provider context window exceeded${r}`,{...o,category:"context_overflow",code:"PROVIDER_CONTEXT_OVERFLOW"}):wt(n,["safety","content policy","blocked_reason","responsible_ai_policy_violation"])?new P(`Provider safety policy refused the request${r}`,{...o,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):e.statusCode===404||wt(n,["model not found","model does not exist","unsupported model"])?new P(`Provider model is unavailable${r}`,{...o,category:"unsupported_model",code:"PROVIDER_MODEL_UNSUPPORTED"}):e.statusCode===408||e.statusCode===504?new P(`Provider request timed out${r}`,{...o,category:"timeout",code:"PROVIDER_TIMEOUT",retryable:!0}):e.statusCode>=500||e.statusCode===409||e.statusCode===425?new P(`Provider server error${r}`,{...o,category:"server",code:"PROVIDER_SERVER_ERROR",retryable:!0}):new P(`Provider rejected the request with HTTP ${e.statusCode}${r}`,{...o,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}function v(e,t,n){return new P(`Malformed ${e} response: ${t}`,{providerId:e,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",...n!==void 0?{cause:n}:{}})}function B(e,t){return W("xeno.provider.capability_mismatches",1,{component:"provider_contract",provider:e,capability:t,error_code:"provider_capability_unsupported"}),new P(`${e} does not advertise the required ${t} capability`,{providerId:e,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}var Tt=new Set(["metadata.google.internal","metadata.azure.internal","instance-data.ec2.internal"]);function S(e){return new P(`Provider endpoint rejected: ${e}`,{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"})}function Hn(e){let t=e.split(".");if(t.length!==4)return null;let n=t.map(r=>Number(r));return n.every(r=>Number.isInteger(r)&&r>=0&&r<=255)?n:null}function xt(e){let t=Hn(e);if(!t)return"public";let[n,r]=t;return n===0?"unspecified":n===127?"loopback":n===169&&r===254?"link-local":n===10||n===172&&r>=16&&r<=31||n===192&&r===168?"private":"public"}function be(e){let t=e.toLowerCase().replace(/^\[|\]$/g,"").split("%")[0];(0,ie.isIP)(t)===6&&(t=new URL(`http://[${t}]`).hostname.slice(1,-1));let n=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(t);if(n){let r=Number.parseInt(n[1],16),o=Number.parseInt(n[2],16);return`${r>>8}.${r&255}.${o>>8}.${o&255}`}return t}function _t(e){let t=be(e);return(0,ie.isIP)(t)===4?xt(t):t==="::"||t==="::0"?"unspecified":t==="::1"?"loopback":t.startsWith("::ffff:")?xt(t.slice(7)):/^f[cd]/.test(t)?"private":/^fe[89ab]/.test(t)?"link-local":"public"}function Rt(e){return e==="example"||e.endsWith(".example")||e==="test"||e.endsWith(".test")||e==="invalid"||e.endsWith(".invalid")}function zn(e){return e==="localhost"||e.endsWith(".localhost")}function H(e,t={}){let n;try{n=new URL(e)}catch{throw S("the URL is invalid")}if(n.username||n.password)throw S("embedded credentials are forbidden");if(n.hash||n.search)throw S("base URLs cannot contain a query or fragment");if(!n.hostname||n.hostname.includes("%"))throw S("the hostname is empty or ambiguous");if(Tt.has(n.hostname.toLowerCase()))throw S("cloud metadata destinations are forbidden");if(n.protocol!=="https:"&&n.protocol!=="http:")throw S(`scheme ${n.protocol} is unsupported`);let r=t.profile??"public-https";if(n.protocol==="http:"&&r!=="local-network")throw S("plain HTTP requires the explicit local-network profile");let o=n.hostname.replace(/^\[|\]$/g,""),i=(0,ie.isIP)(o)?_t(o):null;if(i==="link-local"||i==="unspecified")throw S(`${i} destinations are forbidden`);if(r==="public-https"&&(i==="private"||i==="loopback"||zn(n.hostname)))throw S("private and loopback destinations require the local-network profile");if(r==="local-network"&&n.protocol==="http:"&&i==="public"&&!t.allowedHosts?.includes(n.hostname))throw S("local-network HTTP must resolve to loopback or a private address");return n}async function ve(e,t={}){await Xe(e,t)}async function Xe(e,t={}){let n=e.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Tt.has(n))throw S("cloud metadata destinations are forbidden");let r=new Set((t.allowedHosts??[]).map(s=>s.toLowerCase())),o=(0,ie.isIP)(n)?[n]:Rt(n)?[]:t.resolveHostname?await t.resolveHostname(n):(await(0,Ct.lookup)(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!o.length&&!Rt(n))throw S("DNS resolution returned no addresses");let i=t.profile??"public-https";for(let s of o){let a=_t(s);if(a==="link-local"||a==="unspecified")throw S(`DNS resolved to a forbidden ${a} address`);if(i==="public-https"&&a!=="public"&&!r.has(n))throw S(`DNS resolved public endpoint to ${a} address ${s}`);if(i==="local-network"&&e.protocol==="http:"&&a==="public"&&!r.has(n))throw S(`local-network HTTP resolved to public address ${s}`)}return o}var kt=require("node:http"),St=require("node:https"),Ve=require("node:net"),Et=require("node:events");function At(e,t){return{dispatch(n,r){let o,i=!1,s=d=>{i||(i=!0,o?.destroy(),r.onError(d))},a=t[0];if(!a||!(0,Ve.isIP)(a)||new URL(n.origin).origin!==e.origin)return queueMicrotask(()=>s(new Error("Provider connection has no authorized pinned address"))),!0;let l=n.headers??{},c=(e.protocol==="https:"?St.request:kt.request)(new URL(n.path,e.origin),{method:n.method,headers:l,agent:!1,rejectUnauthorized:!0,lookup:(d,u,p)=>{let m={address:a,family:(0,Ve.isIP)(a)};typeof u=="object"&&u.all?p(null,[m]):p(null,a,m.family)}},d=>{o=d;let u=d.rawHeaders.map(m=>Buffer.from(m)),p=()=>d.resume();r.onHeaders(d.statusCode??500,u,p,d.statusMessage??"")===!1&&d.pause(),d.on("data",m=>{r.onData(m)||d.pause()}),d.on("end",()=>{i||(i=!0,r.onComplete(d.rawTrailers.map(m=>Buffer.from(m))))}),d.on("error",s),d.on("aborted",()=>s(new Error("Provider response was interrupted")))});return c.on("socket",d=>{d.once("connect",()=>{(!d.remoteAddress||be(d.remoteAddress)!==be(a))&&c.destroy(new Error("Provider socket did not connect to its authorized address"))})}),c.on("error",s),r.onConnect(d=>c.destroy(d??new Error("Provider request aborted"))),(async()=>{try{let d=n.body;if(typeof d=="string"||d instanceof Uint8Array)c.end(d);else{if(d)for await(let u of d){if(c.destroyed)return;c.write(u)||await(0,Et.once)(c,"drain")}c.end()}}catch(d){c.destroy(d instanceof Error?d:new Error("Provider request body failed"))}})(),!0}}}var Y={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function Kn(e={}){for(let[t,n]of Object.entries(e))if(n!==void 0&&(!Number.isSafeInteger(n)||n<1))throw v("provider-transport",`${t} must be a positive safe integer`);return{connectTimeoutMs:Math.max(100,e.connectTimeoutMs??Y.connectTimeoutMs),totalTimeoutMs:Math.max(100,e.totalTimeoutMs??Y.totalTimeoutMs),idleTimeoutMs:Math.max(100,e.idleTimeoutMs??Y.idleTimeoutMs),maxResponseBytes:Math.max(1024,e.maxResponseBytes??Y.maxResponseBytes),maxHeaderBytes:Math.max(1024,e.maxHeaderBytes??Y.maxHeaderBytes),maxEventBytes:Math.max(1024,e.maxEventBytes??Y.maxEventBytes)}}async function se(e,t){let n,r=new Promise((o,i)=>{n=()=>i(new Error("Provider operation aborted")),t.addEventListener("abort",n,{once:!0}),t.aborted&&n()});try{return await Promise.race([e,r])}finally{t.removeEventListener("abort",n)}}function we(e,t,n,r){try{return e.decode(t,{stream:n})}catch{throw v(r,"response is not valid UTF-8")}}function Be(e,t,n){let r=new P(t==="cancelled"?"Provider request was cancelled":"Provider request timed out",{providerId:e,category:t,code:t==="cancelled"?"PROVIDER_CANCELLED":"PROVIDER_TIMEOUT",retryable:t==="timeout",...n!==void 0?{cause:n}:{}});return t==="cancelled"&&(r.name="AbortError"),r}function Fn(e){let t=0;return e.forEach((n,r)=>{t+=Buffer.byteLength(r)+Buffer.byteLength(n)+4}),t}async function It(e,t,n,r){if(!e.body)return"";let o=e.body.getReader(),i=new TextDecoder("utf-8",{fatal:!0}),s=0,a="",l,c=()=>{l&&clearTimeout(l),l=setTimeout(()=>r.abort("idle-timeout"),n.idleTimeoutMs)};c();try{for(;;){let{value:d,done:u}=await se(o.read(),r.signal);if(u)break;if(c(),s+=d.byteLength,s>n.maxResponseBytes)throw v(t,`response exceeded ${n.maxResponseBytes} bytes`);a+=we(i,d,!0,t)}return a+=we(i,void 0,!1,t),a}finally{l&&clearTimeout(l),o.cancel().catch(()=>{}),o.releaseLock()}}async function Lt(e,t,n,r){let o=Pe.performance.now(),i=Kn(n.limits);W("xeno.provider.requests",1,{component:"provider_transport",provider:n.providerId,transport:"http"});let s=new AbortController,a=null,l=t.signal,c=()=>s.abort("caller");if(l?.aborted)throw Be(n.providerId,"cancelled");l?.addEventListener("abort",c,{once:!0});let d=setTimeout(()=>{a="total",s.abort("total-timeout")},i.totalTimeoutMs),u=setTimeout(()=>{a="connect",s.abort("connect-timeout")},i.connectTimeoutMs),p;try{let m=await se(Xe(e,n.endpointPolicy),s.signal);if(s.signal.aborted)throw new Error("Provider request aborted before dispatch");let g={...t,signal:s.signal,redirect:"manual",dispatcher:At(e,m)},y=fetch(e,g);y.then(w=>{s.signal.aborted&&w.body?.cancel().catch(()=>{})},()=>{});let f=await se(y,s.signal);if(p=f,clearTimeout(u),Fn(f.headers)>i.maxHeaderBytes)throw v(n.providerId,`response headers exceeded ${i.maxHeaderBytes} bytes`);if(f.redirected||f.status>=300&&f.status<400)throw new P("Provider redirects are disabled",{providerId:n.providerId,category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED",statusCode:f.status});let x=f.headers.get("content-length");if(x&&/^\d+$/.test(x)&&Number(x)>i.maxResponseBytes)throw v(n.providerId,`response exceeded ${i.maxResponseBytes} bytes`);if(!f.ok){let w=await It(f,n.providerId,i,s),J=w;try{J=w?JSON.parse(w):{}}catch{}throw he({providerId:n.providerId,statusCode:f.status,body:J,retryAfterMs:ye(f.headers.get("retry-after")),requestId:f.headers.get("request-id")??f.headers.get("x-request-id")??void 0})}let T=await se(r(f,s,i),s.signal);return W("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),Je("xeno.provider.request_duration_ms",Pe.performance.now()-o,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),T}catch(m){let g;throw m instanceof P?g=m:l?.aborted||s.signal.reason==="caller"?g=Be(n.providerId,"cancelled",m):a||s.signal.reason==="idle-timeout"?g=Be(n.providerId,"timeout",m):g=new P("Provider transport failed",{providerId:n.providerId,category:"transport",code:"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:m}),s.abort("request-failed"),p?.body&&!p.body.locked&&p.body.cancel().catch(()=>{}),W("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:g.category,error_code:g.code}),Je("xeno.provider.request_duration_ms",Pe.performance.now()-o,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:g.category}),g}finally{clearTimeout(u),clearTimeout(d),l?.removeEventListener("abort",c)}}async function He(e,t,n){return Lt(e,t,n,async(r,o,i)=>{let s=await It(r,n.providerId,i,o),a;try{a=s?JSON.parse(s):{}}catch(l){throw v(n.providerId,"body is not valid JSON",l)}if(!a||typeof a!="object"||Array.isArray(a))throw v(n.providerId,"JSON body must be an object");return a})}async function ae(e,t,n,r){return Lt(e,t,n,async(o,i,s)=>{if(!o.body)throw v(n.providerId,"stream response has no body");let a=o.body.getReader(),l=new TextDecoder("utf-8",{fatal:!0}),c="",d=0,u="message",p=[],m,g=()=>{m&&clearTimeout(m),m=setTimeout(()=>i.abort("idle-timeout"),s.idleTimeoutMs)},y=async()=>{if(p.length===0){u="message";return}let f=p.join(`
6
+ `);if(Buffer.byteLength(f)>s.maxEventBytes)throw v(n.providerId,`stream event exceeded ${s.maxEventBytes} bytes`);await r({event:u,data:f}),u="message",p=[]};g();try{for(;;){let{value:f,done:x}=await se(a.read(),i.signal);if(x)break;if(g(),d+=f.byteLength,d>s.maxResponseBytes)throw v(n.providerId,`stream exceeded ${s.maxResponseBytes} bytes`);for(c+=we(l,f,!0,n.providerId);;){let T=c.indexOf(`
7
+ `);if(T<0)break;let w=c.slice(0,T).replace(/\r$/,"");if(c=c.slice(T+1),!w)await y();else if(!w.startsWith(":")){let J=w.indexOf(":"),re=J<0?w:w.slice(0,J),ft=J<0?"":w.slice(J+1).replace(/^ /,"");re==="event"?u=ft:re==="data"&&p.push(ft)}}}if(c+=we(l,void 0,!1,n.providerId),c.trim())for(let f of c.split(/\r?\n/))f.startsWith("data:")?p.push(f.slice(5).replace(/^ /,"")):f.startsWith("event:")&&(u=f.slice(6).trim());await y()}finally{m&&clearTimeout(m),a.cancel().catch(()=>{}),a.releaseLock()}})}var zt=require("node:crypto");var Ke=require("node:net"),_e=class extends Error{issues;constructor(t){super(`Invalid JSON Schema: ${t.map(n=>`${n.path||"#"} ${n.message}`).join("; ")}`),this.name="JsonSchemaCompilationError",this.issues=t}},Fe="https://json-schema.org/draft/2020-12/schema",Qn=new Set(["string","number","integer","boolean","array","object","null"]),Wn=new Set(["$schema","$id","$anchor","$ref","$defs","$comment","title","description","default","examples","deprecated","readOnly","writeOnly","type","enum","const","multipleOf","maximum","exclusiveMaximum","minimum","exclusiveMinimum","maxLength","minLength","pattern","format","prefixItems","items","contains","minContains","maxContains","minItems","maxItems","uniqueItems","properties","patternProperties","additionalProperties","required","dependentRequired","minProperties","maxProperties","allOf","anyOf","oneOf","not"]),Nt=new Map([["date",e=>Ut(e)],["date-time",e=>gr(e)],["time",e=>Jt(e)],["duration",e=>/^P(?!$)(?:\d+(?:[.,]\d+)?Y)?(?:\d+(?:[.,]\d+)?M)?(?:\d+(?:[.,]\d+)?W)?(?:\d+(?:[.,]\d+)?D)?(?:T(?=\d)(?:\d+(?:[.,]\d+)?H)?(?:\d+(?:[.,]\d+)?M)?(?:\d+(?:[.,]\d+)?S)?)?$/u.test(e)],["email",e=>Ot(e)],["idn-email",e=>Ot(e)],["hostname",e=>We(e)],["idn-hostname",e=>We(e)],["ipv4",e=>(0,Ke.isIP)(e)===4],["ipv6",e=>(0,Ke.isIP)(e)===6],["uuid",e=>/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(e)],["uri",e=>Mt(e)],["iri",e=>Mt(e)],["uri-reference",e=>$t(e)],["iri-reference",e=>$t(e)],["uri-template",e=>yr(e)],["json-pointer",e=>/^(?:\/(?:[^~/]|~[01])*)*$/u.test(e)],["relative-json-pointer",e=>/^(?:0|[1-9]\d*)(?:#|(?:\/(?:[^~/]|~[01])*)*)$/u.test(e)],["regex",(e,t)=>Ge(e,t.maxPatternLength)!==void 0]]);function Yn(e={}){return{strictKeywords:e.strictKeywords??!0,assertFormats:e.assertFormats??!1,maxSchemaDepth:X(e.maxSchemaDepth,64,1,256,"maxSchemaDepth"),maxSchemaNodes:X(e.maxSchemaNodes,4096,1,1e5,"maxSchemaNodes"),maxReferences:X(e.maxReferences,512,0,1e4,"maxReferences"),maxPatternLength:X(e.maxPatternLength,256,1,4096,"maxPatternLength"),maxValidationDepth:X(e.maxValidationDepth,128,1,1024,"maxValidationDepth"),maxValidationSteps:X(e.maxValidationSteps,1e5,100,1e7,"maxValidationSteps"),maxValidationErrors:X(e.maxValidationErrors,64,1,1024,"maxValidationErrors"),maxInputBytes:X(e.maxInputBytes,16*1024*1024,1024,256*1024*1024,"maxInputBytes")}}function X(e,t,n,r,o){let i=e??t;if(!Number.isInteger(i)||i<n||i>r)throw new TypeError(`${o} must be an integer from ${n} to ${r}.`);return i}function Gn(e,t={}){let n={root:e,options:Yn(t),issues:[],rawByPointer:new Map,anchors:new Map,compiledByPointer:new Map,schemaNodes:0,references:0,nextNodeId:1};Ce(e,"",0,n);let r=z(e,"",0,n);if(n.issues.length>0||!r)throw new _e(n.issues);return Object.freeze({dialect:Fe,formatAssertion:n.options.assertFormats,validate(o){let i=[],s=Qe(o);if(s)return i.push({path:s.path,keyword:"type",schemaPath:"#",message:s.message}),{valid:!1,errors:i,steps:0,truncated:!1};let a=JSON.stringify(o),l=Buffer.byteLength(a??"null","utf8");if(l>n.options.maxInputBytes)return i.push({path:"",keyword:"maxInputBytes",schemaPath:"#",message:`input is ${l} bytes; limit is ${n.options.maxInputBytes}`}),{valid:!1,errors:i,steps:0,truncated:!1};let c={options:n.options,errors:i,budget:{steps:0,exhausted:!1},activePairs:new Set,objectIds:new WeakMap,nextObjectId:{value:1}};return D(o,r,"",0,c),{valid:i.length===0,errors:i,steps:c.budget.steps,truncated:c.budget.exhausted||i.length>=n.options.maxValidationErrors}}})}function Dt(e,t={}){if(!A(e)||e.type!=="object"||!A(e.properties))throw new _e([{path:"#",keyword:"type",message:"tool input schema root must declare type object and a properties object"}]);return Gn(e,t)}function Ce(e,t,n,r){if(n>r.options.maxSchemaDepth){h(r,t,void 0,`schema depth exceeds ${r.options.maxSchemaDepth}`);return}if(typeof e!="boolean"&&!A(e)){h(r,t,void 0,"schema must be an object or boolean");return}if(!r.rawByPointer.has(t)){if(r.schemaNodes+=1,r.schemaNodes>r.options.maxSchemaNodes){h(r,t,void 0,`schema node count exceeds ${r.options.maxSchemaNodes}`);return}if(r.rawByPointer.set(t,e),typeof e!="boolean"){e.$anchor!==void 0&&(typeof e.$anchor!="string"||!/^[A-Za-z][A-Za-z0-9._:-]*$/u.test(e.$anchor)?h(r,t,"$anchor","$anchor must be a valid plain-name anchor"):r.anchors.has(e.$anchor)?h(r,t,"$anchor",`duplicate anchor ${e.$anchor}`):r.anchors.set(e.$anchor,t));for(let o of["$defs","properties","patternProperties"]){let i=e[o];if(i!==void 0){if(!A(i)){h(r,t,o,`${o} must be an object`);continue}for(let[s,a]of Object.entries(i))Ce(a,j(t,o,s),n+1,r)}}for(let o of["items","contains","additionalProperties","not"])e[o]!==void 0&&Ce(e[o],j(t,o),n+1,r);for(let o of["prefixItems","allOf","anyOf","oneOf"]){let i=e[o];if(i!==void 0){if(!Array.isArray(i)){h(r,t,o,`${o} must be an array of schemas`);continue}i.forEach((s,a)=>Ce(s,j(t,o,String(a)),n+1,r))}}}}}function z(e,t,n,r){let o=r.compiledByPointer.get(t);if(o)return o;if(typeof e!="boolean"&&!A(e))return;let i={id:r.nextNodeId++,schemaPath:Vt(t)};if(r.compiledByPointer.set(t,i),typeof e=="boolean")return i.boolean=e,i;if(Zn(e,t,r),er(e,t,r),e.$schema!==void 0&&(t!==""||e.$schema!==Fe&&e.$schema!==`${Fe}#`)&&h(r,t,"$schema",t===""?`unsupported dialect ${String(e.$schema)}`:"$schema is only supported at the root"),e.$id!==void 0&&typeof e.$id!="string"&&h(r,t,"$id","$id must be a string"),e.$ref!==void 0)if(typeof e.$ref!="string")h(r,t,"$ref","$ref must be a string");else{r.references+=1,r.references>r.options.maxReferences&&h(r,t,"$ref",`reference count exceeds ${r.options.maxReferences}`);let s=ar(e.$ref,t,r);if(s!==void 0){let a=r.rawByPointer.get(s);a===void 0?h(r,t,"$ref",`unresolved local reference ${e.$ref}`):i.ref=z(a,s,n+1,r)}}if(i.types=tr(e.type,t,r),e.enum!==void 0){let s=e.enum;!Array.isArray(s)||s.length===0?h(r,t,"enum","enum must be a non-empty array"):s.some((a,l)=>s.some((c,d)=>d<l&&G(a,c)))?h(r,t,"enum","enum values must be unique"):s.some(a=>Qe(a))?h(r,t,"enum","enum values must be JSON values"):i.enumValues=s}if(Object.prototype.hasOwnProperty.call(e,"const")&&(Qe(e.const)?h(r,t,"const","const must be a JSON value"):(i.hasConst=!0,i.constValue=e.const)),i.multipleOf=ir(e.multipleOf,t,"multipleOf",r),i.maximum=le(e.maximum,t,"maximum",r),i.exclusiveMaximum=le(e.exclusiveMaximum,t,"exclusiveMaximum",r),i.minimum=le(e.minimum,t,"minimum",r),i.exclusiveMinimum=le(e.exclusiveMinimum,t,"exclusiveMinimum",r),i.maxLength=V(e.maxLength,t,"maxLength",r),i.minLength=V(e.minLength,t,"minLength",r),i.minItems=V(e.minItems,t,"minItems",r),i.maxItems=V(e.maxItems,t,"maxItems",r),i.minContains=V(e.minContains,t,"minContains",r),i.maxContains=V(e.maxContains,t,"maxContains",r),i.minProperties=V(e.minProperties,t,"minProperties",r),i.maxProperties=V(e.maxProperties,t,"maxProperties",r),sr(i,t,r),e.pattern!==void 0)if(typeof e.pattern!="string")h(r,t,"pattern","pattern must be a string");else{let s=Ge(e.pattern,r.options.maxPatternLength);s?i.pattern={source:e.pattern,regex:s}:h(r,t,"pattern","pattern is invalid or outside the safe regex subset")}if(e.format!==void 0&&(typeof e.format!="string"?h(r,t,"format","format must be a string"):r.options.assertFormats&&!Nt.has(e.format)?h(r,t,"format",`unsupported asserted format ${e.format}`):i.format=e.format),i.prefixItems=Re(e.prefixItems,t,"prefixItems",n,r,!0),i.items=xe(e.items,t,"items",n,r),i.contains=xe(e.contains,t,"contains",n,r),(e.minContains!==void 0||e.maxContains!==void 0)&&e.contains===void 0&&h(r,t,"contains","minContains/maxContains require contains"),e.uniqueItems!==void 0&&(typeof e.uniqueItems!="boolean"?h(r,t,"uniqueItems","uniqueItems must be boolean"):i.uniqueItems=e.uniqueItems),i.properties=nr(e.properties,t,"properties",n,r),i.patternProperties=rr(e.patternProperties,t,n,r),i.additionalProperties=xe(e.additionalProperties,t,"additionalProperties",n,r),i.required=jt(e.required,t,"required",r,!0),i.dependentRequired=or(e.dependentRequired,t,r),i.allOf=Re(e.allOf,t,"allOf",n,r,!1),i.anyOf=Re(e.anyOf,t,"anyOf",n,r,!1),i.oneOf=Re(e.oneOf,t,"oneOf",n,r,!1),i.not=xe(e.not,t,"not",n,r),A(e.$defs))for(let[s,a]of Object.entries(e.$defs))z(a,j(t,"$defs",s),n+1,r);return i}function Zn(e,t,n){if(n.options.strictKeywords)for(let r of Object.keys(e))!Wn.has(r)&&!r.startsWith("x-")&&h(n,t,r,`unsupported keyword ${r}`)}function er(e,t,n){for(let r of["$comment","title","description"])e[r]!==void 0&&typeof e[r]!="string"&&h(n,t,r,`${r} must be a string`);for(let r of["deprecated","readOnly","writeOnly"])e[r]!==void 0&&typeof e[r]!="boolean"&&h(n,t,r,`${r} must be boolean`);e.examples!==void 0&&!Array.isArray(e.examples)&&h(n,t,"examples","examples must be an array")}function tr(e,t,n){if(e===void 0)return;let r=Array.isArray(e)?e:[e];if(r.length===0||r.some(o=>typeof o!="string"||!Qn.has(o))){h(n,t,"type","type must be a recognized type or non-empty unique type array");return}return new Set(r).size!==r.length&&h(n,t,"type","type array must not contain duplicates"),r}function xe(e,t,n,r,o){if(e!==void 0)return z(e,j(t,n),r+1,o)}function Re(e,t,n,r,o,i){if(e!==void 0){if(!Array.isArray(e)||!i&&e.length===0){h(o,t,n,`${n} must be ${i?"an array":"a non-empty array"} of schemas`);return}return e.map((s,a)=>z(s,j(t,n,String(a)),r+1,o)).filter(s=>!!s)}}function nr(e,t,n,r,o){if(e===void 0)return;if(!A(e)){h(o,t,n,`${n} must be an object of schemas`);return}let i=new Map;for(let[s,a]of Object.entries(e)){let l=z(a,j(t,n,s),r+1,o);l&&i.set(s,l)}return i}function rr(e,t,n,r){if(e===void 0)return;if(!A(e)){h(r,t,"patternProperties","patternProperties must be an object of schemas");return}let o=[];for(let[i,s]of Object.entries(e)){let a=Ge(i,r.options.maxPatternLength);if(!a){h(r,t,"patternProperties",`pattern ${JSON.stringify(i)} is invalid or outside the safe regex subset`);continue}let l=z(s,j(t,"patternProperties",i),n+1,r);l&&o.push({pattern:{source:i,regex:a},schema:l})}return o}function or(e,t,n){if(e===void 0)return;if(!A(e)){h(n,t,"dependentRequired","dependentRequired must be an object");return}let r=new Map;for(let[o,i]of Object.entries(e)){let s=jt(i,j(t,"dependentRequired",o),"dependentRequired",n,!0);s&&r.set(o,s)}return r}function jt(e,t,n,r,o){if(e!==void 0){if(!Array.isArray(e)||e.some(i=>typeof i!="string")){h(r,t,n,`${n} must be an array of strings`);return}return o&&new Set(e).size!==e.length&&h(r,t,n,`${n} values must be unique`),e}}function ir(e,t,n,r){let o=le(e,t,n,r);return o!==void 0&&o<=0&&h(r,t,n,`${n} must be greater than zero`),o!==void 0&&o>0?o:void 0}function le(e,t,n,r){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)){h(r,t,n,`${n} must be a finite number`);return}return e}}function V(e,t,n,r){if(e!==void 0){if(!Number.isSafeInteger(e)||e<0){h(r,t,n,`${n} must be a non-negative safe integer`);return}return e}}function sr(e,t,n){for(let[r,o,i]of[[e.minLength,e.maxLength,"length"],[e.minItems,e.maxItems,"items"],[e.minContains,e.maxContains,"contains"],[e.minProperties,e.maxProperties,"properties"]])r!==void 0&&o!==void 0&&r>o&&h(n,t,i,`minimum ${i} exceeds maximum`)}function ar(e,t,n){if(!e.startsWith("#")){h(n,t,"$ref","remote and file references are not supported");return}if(e==="#")return"";if(e.startsWith("#/")){let s=`/${e.slice(2).split("/").map(a=>a.replace(/~1/g,"/").replace(/~0/g,"~")).map(Xt).join("/")}`;return n.rawByPointer.has(s)||h(n,t,"$ref",`unresolved JSON Pointer ${e}`),s}let r=e.slice(1),o=n.anchors.get(r);return o===void 0&&h(n,t,"$ref",`unresolved anchor ${e}`),o}function D(e,t,n,r,o){if(!qt(o)||o.errors.length>=o.options.maxValidationErrors)return;if(r>o.options.maxValidationDepth){C(o,n,"maxDepth",t,`validation depth exceeds ${o.options.maxValidationDepth}`);return}if(t.boolean!==void 0){t.boolean||C(o,n,"falseSchema",t,"is rejected by the false schema");return}let i=mr(t,e,o);if(!o.activePairs.has(i)){o.activePairs.add(i);try{if(t.ref&&D(e,t.ref,n,r+1,o),t.enumValues&&!t.enumValues.some(s=>G(s,e))&&C(o,n,"enum",t,`expected one of ${t.enumValues.map(Ye).join(", ")} but got ${ze(e)}`),t.hasConst&&!G(t.constValue,e)&&C(o,n,"const",t,`expected ${Ye(t.constValue)} but got ${ze(e)}`),t.types&&!t.types.some(s=>fr(e,s))){let s=t.types.length===1?t.types[0]:`one of [${t.types.join(", ")}]`;C(o,n,"type",t,`expected type ${s} but got ${ze(e)}`);return}lr(e,t,n,r,o),typeof e=="number"&&cr(e,t,n,o),typeof e=="string"&&dr(e,t,n,o),Array.isArray(e)&&ur(e,t,n,r,o),A(e)&&pr(e,t,n,r,o)}finally{o.activePairs.delete(i)}}}function lr(e,t,n,r,o){for(let i of t.allOf??[])D(e,i,n,r+1,o);if(t.anyOf&&t.anyOf.filter(s=>Te(e,s,n,r+1,o)).length===0&&C(o,n,"anyOf",t,"must match at least one anyOf branch"),t.oneOf){let i=t.oneOf.filter(s=>Te(e,s,n,r+1,o)).length;i!==1&&C(o,n,"oneOf",t,`must match exactly one oneOf branch; matched ${i}`)}t.not&&Te(e,t.not,n,r+1,o)&&C(o,n,"not",t,"must not match the disallowed schema")}function cr(e,t,n,r){t.multipleOf!==void 0&&!hr(e,t.multipleOf)&&C(r,n,"multipleOf",t,`must be a multiple of ${t.multipleOf}`),t.maximum!==void 0&&e>t.maximum&&C(r,n,"maximum",t,`must be <= ${t.maximum}`),t.exclusiveMaximum!==void 0&&e>=t.exclusiveMaximum&&C(r,n,"exclusiveMaximum",t,`must be < ${t.exclusiveMaximum}`),t.minimum!==void 0&&e<t.minimum&&C(r,n,"minimum",t,`must be >= ${t.minimum}`),t.exclusiveMinimum!==void 0&&e<=t.exclusiveMinimum&&C(r,n,"exclusiveMinimum",t,`must be > ${t.exclusiveMinimum}`)}function dr(e,t,n,r){let o=[...e].length;if(t.minLength!==void 0&&o<t.minLength&&C(r,n,"minLength",t,`must contain at least ${t.minLength} Unicode code points`),t.maxLength!==void 0&&o>t.maxLength&&C(r,n,"maxLength",t,`must contain at most ${t.maxLength} Unicode code points`),t.pattern&&!t.pattern.regex.test(e)&&C(r,n,"pattern",t,`must match pattern ${JSON.stringify(t.pattern.source)}`),t.format&&r.options.assertFormats){let i=Nt.get(t.format);i&&!i(e,r.options)&&C(r,n,"format",t,`must match format ${t.format}`)}}function ur(e,t,n,r,o){if(t.minItems!==void 0&&e.length<t.minItems&&C(o,n,"minItems",t,`must contain at least ${t.minItems} items`),t.maxItems!==void 0&&e.length>t.maxItems&&C(o,n,"maxItems",t,`must contain at most ${t.maxItems} items`),t.uniqueItems)e:for(let s=0;s<e.length;s+=1)for(let a=0;a<s;a+=1){if(!qt(o))break e;if(G(e[s],e[a])){C(o,O(n,String(s)),"uniqueItems",t,`duplicates item ${a}`);break e}}let i=t.prefixItems?.length??0;if(t.prefixItems?.forEach((s,a)=>{a<e.length&&D(e[a],s,O(n,String(a)),r+1,o)}),t.items)for(let s=i;s<e.length;s+=1)D(e[s],t.items,O(n,String(s)),r+1,o);if(t.contains){let s=0;for(let l=0;l<e.length;l+=1)Te(e[l],t.contains,O(n,String(l)),r+1,o)&&(s+=1);let a=t.minContains??1;s<a&&C(o,n,"minContains",t,`contains matched ${s} items; minimum is ${a}`),t.maxContains!==void 0&&s>t.maxContains&&C(o,n,"maxContains",t,`contains matched ${s} items; maximum is ${t.maxContains}`)}}function pr(e,t,n,r,o){let i=Object.keys(e);t.minProperties!==void 0&&i.length<t.minProperties&&C(o,n,"minProperties",t,`must contain at least ${t.minProperties} properties`),t.maxProperties!==void 0&&i.length>t.maxProperties&&C(o,n,"maxProperties",t,`must contain at most ${t.maxProperties} properties`);for(let s of t.required??[])Object.prototype.hasOwnProperty.call(e,s)||C(o,O(n,s),"required",t,"is required");for(let[s,a]of t.dependentRequired??[])if(Object.prototype.hasOwnProperty.call(e,s))for(let l of a)Object.prototype.hasOwnProperty.call(e,l)||C(o,O(n,l),"dependentRequired",t,`is required when ${s} is present`);for(let s of i){let a=!1,l=t.properties?.get(s);l&&(a=!0,D(e[s],l,O(n,s),r+1,o));for(let c of t.patternProperties??[])c.pattern.regex.test(s)&&(a=!0,D(e[s],c.schema,O(n,s),r+1,o));!a&&t.additionalProperties&&D(e[s],t.additionalProperties,O(n,s),r+1,o)}}function Te(e,t,n,r,o){let i={...o,errors:[],activePairs:new Set(o.activePairs)};return D(e,t,n,r,i),i.errors.length===0&&!i.budget.exhausted}function qt(e){return e.budget.steps+=1,e.budget.steps<=e.options.maxValidationSteps?!0:(e.budget.exhausted||(e.budget.exhausted=!0,C(e,"","maxValidationSteps",{schemaPath:"#"},`validation steps exceed ${e.options.maxValidationSteps}`)),!1)}function C(e,t,n,r,o){e.errors.length>=e.options.maxValidationErrors||e.errors.push({path:t,keyword:n,schemaPath:r.schemaPath,message:o})}function mr(e,t,n){if(t!==null&&typeof t=="object"){let r=n.objectIds.get(t);return r===void 0&&(r=n.nextObjectId.value++,n.objectIds.set(t,r)),`${e.id}:object:${r}`}return`${e.id}:${typeof t}:${Ye(t)}`}function fr(e,t){switch(t){case"string":return typeof e=="string";case"number":return typeof e=="number"&&Number.isFinite(e);case"integer":return typeof e=="number"&&Number.isSafeInteger(e);case"boolean":return typeof e=="boolean";case"array":return Array.isArray(e);case"object":return A(e);case"null":return e===null}}function Qe(e){let t=new WeakSet,n=(r,o)=>{if(r===null||typeof r=="string"||typeof r=="boolean")return;if(typeof r=="number")return Number.isFinite(r)?void 0:{path:o,message:"must be a finite JSON number"};if(typeof r!="object")return{path:o,message:`must be a JSON value, not ${typeof r}`};if(t.has(r))return{path:o,message:"must not contain cyclic references"};t.add(r);let i=Array.isArray(r)?r.entries():Object.entries(r);for(let[s,a]of i){let l=n(a,O(o,String(s)));if(l)return l}t.delete(r)};return n(e,"")}function Ge(e,t){if(!([...e].length>t)&&!/\\(?:[1-9]|k<)/u.test(e)&&!/\(\?<(?:[=!]|[A-Za-z])/u.test(e)&&!/\((?:[^()\\]|\\.)*[+*{](?:[^()\\]|\\.)*\)[+*{?]/u.test(e))try{return new RegExp(e,"u")}catch{return}}function Ut(e){let t=/^(\d{4})-(\d{2})-(\d{2})$/u.exec(e);if(!t)return!1;let n=new Date(Date.UTC(Number(t[1]),Number(t[2])-1,Number(t[3])));return n.getUTCFullYear()===Number(t[1])&&n.getUTCMonth()===Number(t[2])-1&&n.getUTCDate()===Number(t[3])}function Jt(e){let t=/^(\d{2}):(\d{2}):(\d{2})(?:\.\d+)?(?:Z|[+-]\d{2}:\d{2})$/u.exec(e);return t?Number(t[1])<=23&&Number(t[2])<=59&&Number(t[3])<=60:!1}function gr(e){let t=/^([^Tt ]+)[Tt ](.+)$/u.exec(e);return!!(t&&Ut(t[1])&&Jt(t[2]))}function Ot(e){if([...e].length>254||/[\s<>(),;:\\"\[\]]/u.test(e))return!1;let t=e.lastIndexOf("@");return t>0&&t<e.length-1&&[...e.slice(0,t)].length<=64&&We(e.slice(t+1))}function We(e){if([...e].length>253)return!1;let t=e.endsWith(".")?e.slice(0,-1):e;return t.length>0&&t.split(".").every(n=>n.length>0&&n.length<=63&&!n.startsWith("-")&&!n.endsWith("-")&&/^[\p{L}\p{N}-]+$/u.test(n))}function Mt(e){try{return!!(new URL(e).protocol&&!/\s/u.test(e))}catch{return!1}}function $t(e){try{return new URL(e,"https://xeno.invalid/"),!/\s/u.test(e)}catch{return!1}}function yr(e){let t=0;for(let n of e)if(n==="{"&&(t+=1),n==="}"&&(t-=1),t<0||t>1)return!1;return t===0&&![...e].some(n=>{let r=n.codePointAt(0);return r<=31||r===127})}function hr(e,t){let n=e/t;return Math.abs(n-Math.round(n))<=Number.EPSILON*Math.max(1,Math.abs(n))*8}function A(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function G(e,t){if(Object.is(e,t))return!0;if(typeof e!=typeof t||e===null||t===null)return!1;if(Array.isArray(e)&&Array.isArray(t))return e.length===t.length&&e.every((n,r)=>G(n,t[r]));if(A(e)&&A(t)){let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(o=>Object.prototype.hasOwnProperty.call(t,o)&&G(e[o],t[o]))}return!1}function O(e,t){let n=/^[A-Za-z_$][A-Za-z0-9_$]*$/u.test(t)?t:`[${JSON.stringify(t)}]`;return e.length===0?n:n.startsWith("[")?`${e}${n}`:`${e}.${n}`}function j(e,...t){return`${e}/${t.map(Xt).join("/")}`}function Xt(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function Vt(e){return e.length===0?"#":`#${e}`}function h(e,t,n,r){e.issues.length>=64||e.issues.push({path:Vt(t),...n?{keyword:n}:{},message:r})}function ze(e){return e===null?"null":Array.isArray(e)?"array":typeof e=="number"?Number.isSafeInteger(e)?"integer":"number":typeof e}function Ye(e){try{let t=JSON.stringify(e);return t===void 0?String(e):t}catch{return String(e)}}var k=class extends Error{dialect;path;constructor(t,n,r){super(`Tool schema cannot be projected to ${t} at ${n}: ${r}`),this.name="ToolSchemaProjectionError",this.dialect=t,this.path=n}},Bt=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),br=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function tt(e,t){Dt(e);let n=et(e),r=n,o=Ht(n);if(t==="xeno")return{schema:n,dialect:t,canonicalSha256:o,projectedSha256:o,changes:[]};let i={dialect:t,root:r,pointers:new Map,anchors:new Map,changes:[],activeReferences:new Set};ke(r,"",i);let s=K(r,"#",i);if(!Z(s))throw new k(t,"#","provider tool root must remain an object schema");return vr(n,s,t),{schema:s,dialect:t,canonicalSha256:o,projectedSha256:Ht(s),changes:i.changes}}function ce(e,t){return e.map(n=>{let r=tt(n.input_schema,t);return{definition:{...n,input_schema:r.schema},projection:r}})}function K(e,t,n){if(typeof e=="boolean"){if(n.dialect!=="google")return e;if(e)return{};throw new k(n.dialect,t,"false schemas are not representable by this provider")}if(typeof e.$ref=="string"){let o=Pr(e.$ref,t,n);if(n.activeReferences.has(e.$ref))throw new k(n.dialect,t,`recursive reference ${e.$ref} cannot be serialized safely`);let i=Object.fromEntries(Object.entries(e).filter(([a])=>a!=="$ref"&&!Bt.has(a)));if(Object.keys(i).length>0){if(n.dialect==="google")throw new k(n.dialect,t,"$ref siblings require an unsupported intersection");n.activeReferences.add(e.$ref);let a=K(o,`${t}/$ref`,n);n.activeReferences.delete(e.$ref);let l=K(i,t,n);return n.changes.push({path:t,keyword:"$ref",action:"transformed",reason:"inlined local reference with sibling intersection"}),{allOf:[a,l]}}n.activeReferences.add(e.$ref);let s=K(o,`${t}/$ref`,n);return n.activeReferences.delete(e.$ref),n.changes.push({path:t,keyword:"$ref",action:"transformed",reason:"inlined local reference"}),s}let r={};for(let[o,i]of Object.entries(e))if(o!=="$ref"){if(Bt.has(o)||o.startsWith("x-")){o==="description"?r.description=i:n.changes.push({path:t,keyword:o,action:"omitted",reason:"provider wire metadata is not required for canonical validation"});continue}if(n.dialect==="google"&&!br.has(o)){if(o==="const"){r.enum=[et(i)],n.changes.push({path:t,keyword:o,action:"transformed",reason:"Google wire schema represents const as a single-value enum"});continue}if(o==="prefixItems")throw new k(n.dialect,t,"tuple prefixItems cannot preserve the provider structural contract");n.changes.push({path:t,keyword:o,action:"omitted",reason:"constraint remains enforced by canonical local validation"});continue}if(o==="type"&&n.dialect==="google"&&Array.isArray(i)){let s=i.filter(a=>a!=="null");if(s.length!==1||i.length!==2)throw new k(n.dialect,t,"type union cannot be represented without weakening structure");r.type=s[0],r.nullable=!0,n.changes.push({path:t,keyword:o,action:"transformed",reason:"nullable two-type union mapped to Google nullable"});continue}if(o==="properties"||o==="patternProperties"||o==="$defs"){if(!Z(i))throw new k(n.dialect,t,`${o} must be an object`);let s={};for(let[a,l]of Object.entries(i))s[a]=K(l,`${t}/${o}/${nt(a)}`,n);r[o]=s;continue}if(["items","contains","additionalProperties","not"].includes(o)){r[o]=K(i,`${t}/${o}`,n);continue}if(["prefixItems","allOf","anyOf","oneOf"].includes(o)){if(!Array.isArray(i))throw new k(n.dialect,t,`${o} must be an array`);r[o]=i.map((s,a)=>K(s,`${t}/${o}/${a}`,n));continue}r[o]=et(i)}if(n.dialect==="google"){let o=e.type!==void 0||e.properties!==void 0||e.items!==void 0,i=r.type!==void 0||r.properties!==void 0||r.items!==void 0;if(!o&&(e.oneOf!==void 0||e.allOf!==void 0||e.not!==void 0)||o&&!i)throw new k(n.dialect,t,"minimum structural contract cannot be represented")}return r}function vr(e,t,n){if(t.type!=="object"||!Z(t.properties))throw new k(n,"#","root object/properties contract changed");let r=Object.keys(e.properties).sort(),o=Object.keys(t.properties).sort();if(JSON.stringify(r)!==JSON.stringify(o))throw new k(n,"#","root property identity changed");let i=[...e.required??[]].sort(),s=Array.isArray(t.required)?[...t.required].sort():[];if(JSON.stringify(i)!==JSON.stringify(s))throw new k(n,"#","root required-property contract changed")}function ke(e,t,n){if(n.pointers.set(t,e),typeof e!="boolean"){typeof e.$anchor=="string"&&n.anchors.set(e.$anchor,e);for(let r of["$defs","properties","patternProperties"]){let o=e[r];if(Z(o))for(let[i,s]of Object.entries(o))ke(s,`${t}/${r}/${nt(i)}`,n)}for(let r of["items","contains","additionalProperties","not"]){let o=e[r];(typeof o=="boolean"||Z(o))&&ke(o,`${t}/${r}`,n)}for(let r of["prefixItems","allOf","anyOf","oneOf"]){let o=e[r];Array.isArray(o)&&o.forEach((i,s)=>ke(i,`${t}/${r}/${s}`,n))}}}function Pr(e,t,n){if(!e.startsWith("#"))throw new k(n.dialect,t,"remote references are forbidden");if(e==="#")return n.root;if(e.startsWith("#/")){let r=e.slice(1).split("/").map(i=>i.replace(/~1/g,"/").replace(/~0/g,"~")).map(nt).join("/"),o=n.pointers.get(r);if(o!==void 0)return o}else{let r=n.anchors.get(e.slice(1));if(r!==void 0)return r}throw new k(n.dialect,t,`unresolved reference ${e}`)}function Ht(e){return(0,zt.createHash)("sha256").update(Ze(e)).digest("hex")}function Ze(e){return Array.isArray(e)?`[${e.map(Ze).join(",")}]`:Z(e)?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Ze(e[t])}`).join(",")}}`:JSON.stringify(e)}function et(e){return JSON.parse(JSON.stringify(e))}function nt(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function Z(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var wr={anthropic:{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1},"openai-responses":{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1},google:{streaming:!1,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1}};function Qt(e){let t=e.kind==="anthropic"?"https://api.anthropic.com":e.kind==="google"?"https://generativelanguage.googleapis.com":e.kind==="openai-responses"?"https://api.openai.com":null;if(!e.baseURL&&!t)throw new P("Generic OpenAI-compatible providers require baseURL",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let n=H(e.baseURL??t,{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname});return n.pathname=n.pathname.replace(/\/$/,""),n}function de(e,t){let n=new URL(e.toString());return n.pathname=`${n.pathname.replace(/\/$/,"")}/${t.replace(/^\//,"")}`,n}function Wt(e){let t=e.authentication??{type:"bearer"};if(t.type==="none"||!e.apiKey)return{};if(t.type==="bearer")return{authorization:`Bearer ${e.apiKey}`};let n=t.header.trim().toLowerCase(),r=new Set(["host","content-length","connection","transfer-encoding","cookie","set-cookie","proxy-authorization"]);if(!/^[a-z0-9-]{1,80}$/.test(n)||r.has(n))throw new P("Generic provider authentication header is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let o=t.prefix??"";if(/[\r\n]/.test(o))throw new P("Generic provider authentication prefix is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});return{[n]:`${o}${e.apiKey}`}}function xr(e){let t;if(e.kind==="openai-compatible"){if(!e.capabilityProfile)throw new P("Generic OpenAI-compatible providers require an explicit capabilityProfile",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"});t={...e.capabilityProfile};for(let n of["structuredOutput","promptCaching"])if(t[n])throw B("direct-openai-compatible",n);if(!!e.streaming!=!!t.streaming)throw new P("Generic endpoint streaming config must match capabilityProfile.streaming",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}else t={...wr[e.kind],streaming:!!e.streaming,reasoningMetadata:e.kind==="anthropic"&&!!e.streaming};return{...t,vision:t.imageInput}}function ue(e,t){return{providerId:t,endpointPolicy:{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},limits:e.transportLimits}}function Yt(e){let t=/^data:([^;,]+);base64,([a-z0-9+/=\r\n]+)$/i.exec(e);return t?{mediaType:t[1],data:t[2].replace(/\s/g,"")}:null}function pe(e){let t=Array.isArray(e.assistant_content)?e.assistant_content:[],n=Array.isArray(e.assistant_only_content)?e.assistant_only_content:[];return[...t,...n].filter(r=>r?.type==="image_url")}function Gt(e){return e.filter(t=>t?.type==="image_url")}function Zt(e){return e.some(t=>Array.isArray(t.content)&&t.content.some(n=>n.type==="image_url"||n.type==="tool_result"&&pe(n).length>0))}function Kt(e){let t=Yt(e.image_url.url);return t?{type:"image",source:{type:"base64",media_type:t.mediaType,data:t.data}}:{type:"image",source:{type:"url",url:e.image_url.url}}}function Rr(e){return e.map(t=>({role:t.role,content:typeof t.content=="string"?t.content:t.content.flatMap(n=>{if(n.type==="image_url")return[Kt(n)];if(n.type==="text")return[n];if(n.type==="tool_use")return[{type:"tool_use",id:n.id,name:n.name,input:n.input}];let r=pe(n),o=[{type:"text",text:oe(n.content)}];return o.push(...r.map(Kt)),[{type:"tool_result",tool_use_id:n.tool_use_id,content:o,is_error:n.is_error}]})}))}function Cr(e){return{type:"input_image",image_url:e.image_url.url,detail:e.image_url.detail??"auto"}}function Tr(e){let t=[];for(let n of e){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});continue}let r=n.content.filter(i=>i.type==="text").map(i=>i.text).join(`
8
+ `),o=[...Gt(n.content),...n.content.flatMap(i=>i.type==="tool_result"?pe(i):[])];(r||o.length)&&t.push({role:n.role,content:[...r?[{type:"input_text",text:r}]:[],...o.map(Cr)]});for(let i of n.content)i.type==="tool_use"?t.push({type:"function_call",call_id:i.id,name:i.name,arguments:JSON.stringify(i.input)}):i.type==="tool_result"&&t.push({type:"function_call_output",call_id:i.tool_use_id,output:oe(i.content)})}return t}function Ft(e){let t=Yt(e.image_url.url);return t?{inlineData:{mimeType:t.mediaType,data:t.data}}:{fileData:{fileUri:e.image_url.url}}}function _r(e){let t=new Map;for(let n of e)if(Array.isArray(n.content))for(let r of n.content)r.type==="tool_use"&&t.set(r.id,r.name);return e.map(n=>typeof n.content=="string"?{role:n.role==="assistant"?"model":"user",parts:[{text:n.content}]}:{role:n.role==="assistant"?"model":"user",parts:n.content.flatMap(r=>{if(r.type==="image_url")return[Ft(r)];if(r.type==="text")return[{text:r.text}];if(r.type==="tool_use")return[{functionCall:{id:r.id,name:r.name,args:r.input},...r.provider_metadata?.thoughtSignature?{thoughtSignature:r.provider_metadata.thoughtSignature}:{}}];let o=oe(r.content);return[{functionResponse:{id:r.tool_use_id,name:t.get(r.tool_use_id)??"unknown_tool",response:r.is_error?{error:o}:{result:o}}},...pe(r).map(Ft)]})})}function en(e,t){let n=t?[{role:"system",content:t}]:[];for(let r of e){if(typeof r.content=="string"){n.push({role:r.role,content:r.content});continue}let o=r.content.filter(a=>a.type==="text").map(a=>a.text).join(`
9
+ `),i=r.content.filter(a=>a.type==="tool_use").map(a=>({id:a.id,type:"function",function:{name:a.name,arguments:JSON.stringify(a.input)}}));(o||i.length)&&n.push({role:r.role,content:o||null,...i.length?{tool_calls:i}:{}});for(let a of r.content)a.type==="tool_result"&&n.push({role:"tool",tool_call_id:a.tool_use_id,content:oe(a.content)});let s=[...Gt(r.content),...r.content.flatMap(a=>a.type==="tool_result"?pe(a):[])];s.length&&n.push({role:"user",content:s.map(a=>({type:"image_url",image_url:{url:a.image_url.url,detail:a.image_url.detail??"auto"}}))})}return n}function kr(e){return e.map(t=>({name:t.name,description:t.description,parameters:t.input_schema}))}function me(e={}){let t=i=>{let s=Number(i);return Number.isFinite(s)&&s>0?s:0},n=e.input_tokens!==void 0?t(e.input_tokens)+t(e.cache_creation_input_tokens)+t(e.cache_read_input_tokens):t(e.prompt_tokens??e.promptTokenCount??e.prompt_eval_count),r=i=>typeof i=="number"&&Number.isFinite(i),o=r(e.input_tokens)||r(e.prompt_tokens)||r(e.promptTokenCount)||r(e.prompt_eval_count);return{inputTokens:n,outputTokens:t(e.output_tokens??e.completion_tokens??e.candidatesTokenCount??e.eval_count),usageReported:o}}function Ee(e,t,n){return{content:e,stopReason:t,...me(n)}}function q(e,t,n){if(t&&typeof t=="object"&&!Array.isArray(t))return t;if(typeof t!="string")throw v(e,`${n} arguments must be JSON`);try{let r=JSON.parse(t||"{}");if(!r||typeof r!="object"||Array.isArray(r))throw new Error("arguments are not an object");return r}catch(r){throw v(e,`${n} contains malformed tool arguments`,r)}}function Sr(e,t){if(!Array.isArray(t.content))throw v(e,"content must be an array");let n=t.content.flatMap(o=>{if(o.type==="text"&&typeof o.text=="string")return[{type:"text",text:o.text}];if(o.type==="tool_use"){if(!o.id||!o.name)throw v(e,"tool_use is missing id or name");return[{type:"tool_use",id:String(o.id),name:String(o.name),input:q(e,o.input??{},"tool_use")}]}return[]}),r=t.stop_reason==="tool_use"?"tool_use":t.stop_reason==="max_tokens"?"max_tokens":"end_turn";return Ee(n,r,t.usage??{})}function Er(e,t){if(!Array.isArray(t.output))throw v(e,"output must be an array");let n=[];for(let i of t.output)if(i.type==="message"){if(!Array.isArray(i.content))throw v(e,"message content must be an array");for(let s of i.content)s.type==="output_text"&&typeof s.text=="string"&&n.push({type:"text",text:s.text})}else if(i.type==="function_call"){if(!i.call_id&&!i.id)throw v(e,"function_call is missing an id");if(!i.name)throw v(e,"function_call is missing a name");n.push({type:"tool_use",id:String(i.call_id??i.id),name:String(i.name),input:q(e,i.arguments??"{}","function_call")})}let r=n.some(i=>i.type==="tool_use"),o=t.status==="incomplete"&&t.incomplete_details?.reason==="max_output_tokens";return Ee(n,r?"tool_use":o?"max_tokens":"end_turn",t.usage??{})}function Ar(e,t){if(!Array.isArray(t.candidates)||t.candidates.length===0){let s=t.promptFeedback?.blockReason;throw s?new P(`Provider safety policy refused the request: ${String(s)}`,{providerId:e,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):v(e,"candidates must contain at least one item")}let n=t.candidates[0]??{};if(!Array.isArray(n.content?.parts))throw v(e,"candidate parts must be an array");let r=n.content.parts.flatMap((s,a)=>{if(typeof s.text=="string")return[{type:"text",text:s.text}];if(s.functionCall){let l=s.functionCall;if(!l.name)throw v(e,"functionCall is missing a name");return[{type:"tool_use",id:String(l.id??`gemini-${a}-${(0,Se.randomUUID)().slice(0,8)}`),name:String(l.name),input:q(e,l.args??{},"functionCall"),...s.thoughtSignature?{provider_metadata:{thoughtSignature:s.thoughtSignature}}:{}}]}return[]}),o=r.some(s=>s.type==="tool_use"),i=String(n.finishReason??"").includes("MAX_TOKENS");return Ee(r,o?"tool_use":i?"max_tokens":"end_turn",t.usageMetadata??{})}function tn(e,t){if(!Array.isArray(t.choices)||t.choices.length===0)throw v(e,"choices must contain an item");let n=t.choices[0]??{},r=n.message;if(!r||typeof r!="object")throw v(e,"choice message is missing");let o=[];if(typeof r.content=="string"&&r.content&&o.push({type:"text",text:r.content}),Array.isArray(r.tool_calls))for(let s of r.tool_calls){if(!s.id||!s.function?.name)throw v(e,"tool call is missing id or name");o.push({type:"tool_use",id:String(s.id),name:String(s.function.name),input:q(e,s.function.arguments??"{}","tool call")})}let i=n.finish_reason==="length"?"max_tokens":o.some(s=>s.type==="tool_use")?"tool_use":"end_turn";return Ee(o,i,t.usage??{})}async function b(e,t){try{await e?.onEvent?.(t)}catch{}}async function nn(e,t,n){await b(n,{type:"message.started"});let r=0;for(let o of e.content)o.type==="text"?(t?.(o.text),await b(n,{type:"text.delta",text:o.text})):o.type==="tool_use"&&(await b(n,{type:"tool_call.started",index:r,toolCallId:o.id,name:o.name}),await b(n,{type:"tool_call.completed",index:r,toolCallId:o.id,name:o.name,input:o.input}),r+=1);await b(n,{type:"usage.updated",inputTokens:e.inputTokens,outputTokens:e.outputTokens}),await b(n,{type:"message.completed",stopReason:e.stopReason})}function Ae(){return{content:[],inputTokens:0,outputTokens:0,usageReported:!1,stopReason:"end_turn",terminal:!1}}function Ie(e,t){if(!t.terminal)throw v(e,"stream ended without a terminal event");return{content:t.content,stopReason:t.stopReason,usageReported:t.usageReported,inputTokens:t.inputTokens,outputTokens:t.outputTokens}}function Le(e,t){try{let n=JSON.parse(t.data);if(!n||typeof n!="object"||Array.isArray(n))throw new Error("frame is not an object");return n}catch(n){throw v(e,`invalid stream JSON for ${t.event}`,n)}}async function Ir(e){let t=Ae(),n=new Map;return await ae(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},ue(e.config,e.providerId),async r=>{let o=Le(e.providerId,r),i=String(o.type??r.event);if(i==="message_start"){let s=me(o.message?.usage);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),await b(e.context,{type:"message.started",providerMessageId:o.message?.id})}else if(i==="content_block_start"){let s=Number(o.index??0),a=o.content_block??{};if(a.type==="tool_use"){let l={index:s,id:String(a.id),name:String(a.name),arguments:""};n.set(s,l),await b(e.context,{type:"tool_call.started",index:s,toolCallId:l.id,name:l.name})}else if(a.type==="text"&&a.text){let l=String(a.text);t.content.push({type:"text",text:l}),e.onText?.(l),await b(e.context,{type:"text.delta",text:l})}}else if(i==="content_block_delta"){let s=o.delta??{};if(s.type==="text_delta"){let a=String(s.text??"");if(a){let l=t.content.at(-1);l?.type==="text"?l.text+=a:t.content.push({type:"text",text:a}),e.onText?.(a),await b(e.context,{type:"text.delta",text:a})}}else if(s.type==="thinking_delta")await b(e.context,{type:"reasoning.delta",text:String(s.thinking??"")});else if(s.type==="input_json_delta"){let a=Number(o.index??0),l=n.get(a);if(!l)throw v(e.providerId,"tool argument delta arrived before tool start");let c=String(s.partial_json??"");l.arguments+=c,await b(e.context,{type:"tool_call.arguments.delta",index:a,toolCallId:l.id,delta:c})}}else if(i==="content_block_stop"){let s=Number(o.index??0),a=n.get(s);if(a){let l=q(e.providerId,a.arguments||"{}","streamed tool call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:l}),await b(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:l})}}else if(i==="message_delta"){t.outputTokens=Number(o.usage?.output_tokens??t.outputTokens);let s=o.delta?.stop_reason;t.stopReason=s==="tool_use"?"tool_use":s==="max_tokens"?"max_tokens":"end_turn",await b(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}else if(i==="message_stop")t.terminal=!0,await b(e.context,{type:"message.completed",stopReason:t.stopReason});else if(i==="error")throw v(e.providerId,String(o.error?.message??"stream error"))}),Ie(e.providerId,t)}async function Lr(e){let t=Ae(),n=new Map;return await ae(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},ue(e.config,e.providerId),async r=>{if(r.data==="[DONE]")return;let o=Le(e.providerId,r),i=String(o.type??r.event);if(i==="response.created")await b(e.context,{type:"message.started",providerMessageId:o.response?.id});else if(i==="response.output_text.delta"){let s=String(o.delta??""),a=t.content.at(-1);a?.type==="text"?a.text+=s:t.content.push({type:"text",text:s}),e.onText?.(s),await b(e.context,{type:"text.delta",text:s})}else if(i==="response.output_item.added"&&o.item?.type==="function_call"){let s=Number(o.output_index??n.size),a={index:s,id:String(o.item.call_id??o.item.id),name:String(o.item.name),arguments:String(o.item.arguments??"")};n.set(s,a),await b(e.context,{type:"tool_call.started",index:s,toolCallId:a.id,name:a.name})}else if(i==="response.function_call_arguments.delta"){let s=Number(o.output_index??0),a=n.get(s);if(!a)throw v(e.providerId,"tool argument delta arrived before tool start");let l=String(o.delta??"");a.arguments+=l,await b(e.context,{type:"tool_call.arguments.delta",index:s,toolCallId:a.id,delta:l})}else if(i==="response.output_item.done"&&o.item?.type==="function_call"){let s=Number(o.output_index??0),a=n.get(s)??{index:s,id:String(o.item.call_id??o.item.id),name:String(o.item.name),arguments:""},l=String(o.item.arguments??a.arguments??"{}"),c=q(e.providerId,l,"streamed function call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:c}),t.stopReason="tool_use",await b(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:c})}else if(i==="response.completed"||i==="response.incomplete"){let s=o.response??{},a=me(s.usage??{});t.inputTokens=a.inputTokens,a.usageReported&&(t.usageReported=!0),t.outputTokens=a.outputTokens,i==="response.incomplete"&&(t.stopReason="max_tokens"),t.terminal=!0,await b(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens}),await b(e.context,{type:"message.completed",stopReason:t.stopReason})}else if(i==="response.failed"||i==="error")throw v(e.providerId,String(o.response?.error?.message??o.error?.message??"stream failed"))}),Ie(e.providerId,t)}async function Or(e){let t=Ae(),n=new Map;await b(e.context,{type:"message.started"}),await ae(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0,stream_options:{include_usage:!0}}),signal:e.signal},ue(e.config,e.providerId),async r=>{if(r.data==="[DONE]"){t.terminal=!0;return}let o=Le(e.providerId,r);if(o.usage){let i=me(o.usage);t.inputTokens=i.inputTokens,i.usageReported&&(t.usageReported=!0),t.outputTokens=i.outputTokens,await b(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}for(let i of o.choices??[]){let s=i.delta??{};if(typeof s.content=="string"&&s.content){let a=t.content.at(-1);a?.type==="text"?a.text+=s.content:t.content.push({type:"text",text:s.content}),e.onText?.(s.content),await b(e.context,{type:"text.delta",text:s.content})}for(let a of s.tool_calls??[]){let l=Number(a.index??0),c=n.get(l);c||(c={index:l,id:String(a.id??`call-${l}`),name:"",arguments:""},n.set(l,c)),a.id&&(c.id=String(a.id)),a.function?.name&&(c.name+=String(a.function.name)),c.name&&!c.started&&(await b(e.context,{type:"tool_call.started",index:l,toolCallId:c.id,name:c.name}),c.started=!0);let d=String(a.function?.arguments??"");d&&(c.arguments+=d,await b(e.context,{type:"tool_call.arguments.delta",index:l,toolCallId:c.id,delta:d}))}i.finish_reason&&(t.stopReason=i.finish_reason==="length"?"max_tokens":n.size?"tool_use":"end_turn")}});for(let r of[...n.values()].sort((o,i)=>o.index-i.index)){let o=q(e.providerId,r.arguments||"{}","streamed tool call");t.content.push({type:"tool_use",id:r.id,name:r.name,input:o}),await b(e.context,{type:"tool_call.completed",index:r.index,toolCallId:r.id,name:r.name,input:o})}return await b(e.context,{type:"message.completed",stopReason:t.stopReason}),Ie(e.providerId,t)}async function Mr(e){let t=Ae(),n=0;return await b(e.context,{type:"message.started"}),await ae(e.url,{method:"POST",headers:e.headers,body:JSON.stringify(e.body),signal:e.signal},ue(e.config,e.providerId),async r=>{let o=Le(e.providerId,r);if(o.usageMetadata){let s=me(o.usageMetadata);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),t.outputTokens=s.outputTokens,await b(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}let i=o.candidates?.[0];for(let s of i?.content?.parts??[])if(typeof s.text=="string"){let a=t.content.at(-1);a?.type==="text"?a.text+=s.text:t.content.push({type:"text",text:s.text}),e.onText?.(s.text),await b(e.context,{type:"text.delta",text:s.text})}else if(s.functionCall){let a=s.functionCall,l=String(a.id??`gemini-${n}-${(0,Se.randomUUID)().slice(0,8)}`),c=String(a.name??""),d=q(e.providerId,a.args??{},"streamed function call");await b(e.context,{type:"tool_call.started",index:n,toolCallId:l,name:c}),t.content.push({type:"tool_use",id:l,name:c,input:d,...s.thoughtSignature?{provider_metadata:{thoughtSignature:s.thoughtSignature}}:{}}),await b(e.context,{type:"tool_call.completed",index:n,toolCallId:l,name:c,input:d}),n+=1}i?.finishReason&&(t.stopReason=String(i.finishReason).includes("MAX_TOKENS")?"max_tokens":n?"tool_use":"end_turn",t.terminal=!0,await b(e.context,{type:"message.completed",stopReason:t.stopReason}))}),Ie(e.providerId,t)}function rn(e){return e instanceof P?{type:"provider.error",code:e.code,category:e.category,retryable:e.retryable}:{type:"provider.error",code:"PROVIDER_TRANSPORT_ERROR",category:"transport",retryable:!1}}function on(e){if(e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw v("direct-provider","maxTokens must be a positive safe integer");let t=`direct-${e.kind}`,n=Qt(e),r=xr(e),o={profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},i={providerId:t,endpointPolicy:o,limits:e.transportLimits};return{id:t,capabilities:r,async complete(s,a,l,c,d,u){if(l.length>0&&!r.tools)throw B(t,"tools");if(Zt(a)&&!r.imageInput)throw B(t,"image input");let p=e.kind==="openai-compatible"?"openai-chat":e.kind,m=ce(l,p).map(({definition:x})=>x),g,y={"content-type":"application/json"},f;try{if(e.kind==="anthropic"){if(g=de(n,"/v1/messages"),y={...y,"x-api-key":e.apiKey,"anthropic-version":e.anthropicVersion??"2023-06-01"},f={model:s,max_tokens:e.maxTokens??8192,system:u?.systemPrompt,messages:Rr(a),tools:m.map(w=>({name:w.name,description:w.description,input_schema:w.input_schema}))},e.streaming)return await Ir({providerId:t,url:g,headers:y,body:f,config:e,signal:d,onText:c,context:u})}else if(e.kind==="google"){let w=e.streaming?"streamGenerateContent":"generateContent";if(g=de(n,`/v1beta/models/${encodeURIComponent(s)}:${w}`),e.streaming&&g.searchParams.set("alt","sse"),y={...y,"x-goog-api-key":e.apiKey},f={systemInstruction:u?.systemPrompt?{parts:[{text:u.systemPrompt}]}:void 0,contents:_r(a),tools:m.length>0?[{functionDeclarations:kr(m)}]:void 0,generationConfig:{maxOutputTokens:e.maxTokens??8192}},e.streaming)return await Mr({providerId:t,url:g,headers:y,body:f,config:e,signal:d,onText:c,context:u})}else if(e.kind==="openai-compatible"){if(g=de(n,e.chatCompletionsPath??"/v1/chat/completions"),y={...y,...Wt(e)},f={model:s,messages:en(a,u?.systemPrompt),tools:m.length>0?m.map(w=>({type:"function",function:{name:w.name,description:w.description,parameters:w.input_schema}})):void 0,max_tokens:e.maxTokens??8192},e.streaming)return await Or({providerId:t,url:g,headers:y,body:f,config:e,signal:d,onText:c,context:u})}else if(g=de(n,"/v1/responses"),y={...y,authorization:`Bearer ${e.apiKey}`},f={model:s,instructions:u?.systemPrompt,input:Tr(a),tools:m.map(w=>({type:"function",name:w.name,description:w.description,parameters:w.input_schema})),max_output_tokens:e.maxTokens??8192,store:!1},e.streaming)return await Lr({providerId:t,url:g,headers:y,body:f,config:e,signal:d,onText:c,context:u});let x=await He(g,{method:"POST",headers:y,body:JSON.stringify(f),signal:d},i),T=e.kind==="anthropic"?Sr(t,x):e.kind==="google"?Ar(t,x):e.kind==="openai-compatible"?tn(t,x):Er(t,x);return await nn(T,c,u),T}catch(x){throw x instanceof P&&x.category==="cancelled"?await b(u,{type:"provider.cancelled"}):(await b(u,rn(x)),x instanceof P&&x.retryable&&await b(u,{type:"provider.retry",retryAfterMs:x.retryAfterMs,reason:x.category})),x}}}}function sn(e){let t="direct-ollama-native";if(e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw v(t,"maxTokens must be a positive safe integer");let n={...e,kind:"openai-compatible"},r=Qt(n);return{id:t,capabilities:{streaming:!1,textInput:!0,imageInput:!1,vision:!1,tools:!0,parallelToolCalls:!1,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1},async complete(o,i,s,a,l,c){if(Zt(i))throw B(t,"image input");try{let d=ce(s,"openai-chat").map(({definition:y})=>y),u=en(i,c?.systemPrompt).map(y=>({...y,content:y.content??"",...y.tool_calls?{tool_calls:y.tool_calls.map(f=>({...f,function:{...f.function,arguments:q(t,f.function.arguments,"tool call")}}))}:{}})),p=await He(de(r,"/api/chat"),{method:"POST",signal:l,headers:{"content-type":"application/json",...Wt(n)},body:JSON.stringify({model:o,messages:u,stream:!1,options:{num_predict:e.maxTokens??8192},tools:d.map(y=>({type:"function",function:{name:y.name,description:y.description,parameters:y.input_schema}}))})},ue(n,t));if(p.done!==!0||!p.message||typeof p.message!="object")throw v(t,"native completion is missing its terminal message");let m=p.message,g=tn(t,{choices:[{message:{...m,...Array.isArray(m.tool_calls)?{tool_calls:m.tool_calls.map(y=>({...y,id:y.id??(0,Se.randomUUID)()}))}:{}},finish_reason:p.done_reason==="length"?"length":"stop"}],usage:p});return await nn(g,a,c),g}catch(d){throw await b(c,d instanceof P&&d.category==="cancelled"?{type:"provider.cancelled"}:rn(d)),d}}}}function rt(e,t={}){for(let n of e){let r=n.codePointAt(0);if(r===127)return!0;if(!(r>31)&&!(r===9&&t.allowTab===!0)&&!((r===10||r===13)&&t.allowLineBreaks===!0))return!0}return!1}var ot=1,F={streaming:!0,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!0,usageAccounting:!0,promptCaching:!1,modelDiscovery:!0},Oe={...F,reasoningMetadata:!1},an=[M("xeno","XENO hosted","xeno","openai-compatible","https://api.xenostudio.ai","public-https","bearer-env","XENO_API_KEY","/v1/models",F),M("openai","OpenAI","direct","openai-responses","https://api.openai.com","public-https","bearer-env","OPENAI_API_KEY","/v1/models",F),M("anthropic","Anthropic","direct","anthropic","https://api.anthropic.com","public-https","header-env","ANTHROPIC_API_KEY","/v1/models",{...F,structuredOutput:!1}),M("google","Google AI Studio","direct","google","https://generativelanguage.googleapis.com","public-https","header-env","GOOGLE_API_KEY","/v1beta/models",F),M("openrouter","OpenRouter","gateway","openai-compatible","https://openrouter.ai/api","public-https","bearer-env","OPENROUTER_API_KEY","/v1/models",Oe),M("xeno-rt","xeno-rt","local","openai-compatible","http://127.0.0.1:3338","local-network","none",void 0,"/v1/models",Oe,["running xeno-rt endpoint"]),M("ollama","Ollama","local","openai-compatible","http://127.0.0.1:11434","local-network","none",void 0,"/v1/models",Oe,["Ollama OpenAI compatibility endpoint"]),M("azure-openai","Azure OpenAI","cloud","openai-compatible",void 0,"public-https","header-env","AZURE_OPENAI_API_KEY",void 0,Oe,["resource endpoint","deployment","API version","host adapter for deployment-shaped requests"]),M("aws-bedrock","Amazon Bedrock","cloud","aws-bedrock",void 0,"public-https","cloud-chain",void 0,void 0,{...F,modelDiscovery:!1},["AWS credential chain","region","Bedrock host adapter"]),M("vertex-ai","Google Vertex AI","cloud","vertex-ai",void 0,"public-https","cloud-chain",void 0,void 0,{...F,modelDiscovery:!1},["Google application-default credentials","project","region","Vertex host adapter"])],te=class{presets=new Map;constructor(t=an){for(let n of t)this.add(n)}add(t){Br(t),this.presets.set(t.id,structuredClone(t))}get(t){let n=this.presets.get(t);return n?structuredClone(n):void 0}list(){return[...this.presets.values()].map(t=>structuredClone(t)).sort((t,n)=>t.displayName.localeCompare(n.displayName))}resolve(t,n){let r=this.get(t.providerId);if(!r)throw new Error(`Unknown provider preset: ${t.providerId}`);let o=[],i;try{i=ln(t.baseUrl??r.defaultBaseUrl,r)}catch(l){o.push(l instanceof Error?l.message:String(l))}i||o.push("Provider endpoint is not configured");let s=t.secretRef?.trim()||r.auth.defaultSecretRef;(r.auth.mode==="bearer-env"||r.auth.mode==="header-env")&&!s&&o.push("Credential reference is not configured"),s&&n&&!n(s)&&o.push(`Credential reference ${s} is not available`),(r.adapterKind==="aws-bedrock"||r.adapterKind==="vertex-ai"||r.id==="azure-openai")&&o.push("Provider requires a dedicated host adapter");let a="ready";return t.enabled===!1?a="blocked":o.some(l=>l.includes("host adapter"))?a="requires-host-adapter":o.some(l=>l.includes("Credential"))?a="missing-credential":o.length&&(a="needs-configuration"),{connection:Hr(t),preset:r,...i?{endpoint:i}:{},...s?{secretRef:s}:{},readiness:a,blockers:o}}};async function $r(e){let n=(e.catalog??new te).resolve(e.connection),r=n.preset.auth.mode,o=n.secretRef?await e.resolveSecretRef?.(n.secretRef):void 0,i=r==="none"?"not-required":r==="cloud-chain"?"external":o?"present":"missing",s={schemaVersion:1,connectionId:n.connection.id,providerId:n.preset.id,...n.endpoint?{endpoint:n.endpoint}:{},readiness:n.readiness,credentialState:i,reachable:!1,authenticated:null,models:[],capabilities:n.preset.capabilities,errors:[...n.blockers]};if(n.readiness==="requires-host-adapter"||n.readiness==="blocked"||!n.endpoint)return s;if((r==="bearer-env"||r==="header-env")&&!o)return{...s,readiness:"missing-credential",errors:ee([...s.errors,`Credential reference ${n.secretRef??"(missing)"} did not resolve`])};if(!n.preset.discoveryPath)return{...s,readiness:"ready",errors:ee(s.errors)};let a=H(n.endpoint,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts});try{await ve(a,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts,resolveHostname:e.resolveHostname})}catch(u){return{...s,readiness:"blocked",errors:ee([...s.errors,u instanceof Error?u.message:String(u)])}}let l=qr(a,n.preset.discoveryPath),c=jr(n.preset,o),d=Date.now();try{let{response:u,text:p}=await Ur(e.fetchImpl??fetch,l,{headers:c},e.timeoutMs??8e3,e.maxResponseBytes??2097152),m=Date.now()-d,g=u.status===401||u.status===403?!1:u.ok?!0:null;if(!u.ok)return{...s,reachable:!0,authenticated:g,latencyMs:m,readiness:g===!1?"missing-credential":"blocked",errors:ee([...s.errors,`Provider discovery returned HTTP ${u.status}`])};let y=JSON.parse(p);return{...s,readiness:"ready",reachable:!0,authenticated:g,latencyMs:m,models:Jr(y),errors:ee(s.errors)}}catch(u){return{...s,readiness:"blocked",latencyMs:Date.now()-d,errors:ee([...s.errors,zr(u)])}}}function Nr(e,t={}){let n=t.allowedProviderIds?new Set(t.allowedProviderIds):null,r=new Set(t.deniedProviderIds??[]),o=new Map((t.fallbackOrder??[]).map((i,s)=>[i,s]));return e.filter(({connection:i,model:s})=>{let a=i.preset.id;return!(i.readiness!=="ready"||i.connection.enabled===!1||n&&!n.has(a)||r.has(a)||!Xr({...i.preset.capabilities,...s.capabilities??{}},t.require)||t.maxInputCostPerMillion!==void 0&&(s.inputCostPerMillion??1/0)>t.maxInputCostPerMillion||t.maxOutputCostPerMillion!==void 0&&(s.outputCostPerMillion??1/0)>t.maxOutputCostPerMillion)}).sort((i,s)=>{if(t.preferLocal&&i.connection.preset.family!==s.connection.preset.family){if(i.connection.preset.family==="local")return-1;if(s.connection.preset.family==="local")return 1}let a=o.get(i.connection.preset.id)??Number.MAX_SAFE_INTEGER,l=o.get(s.connection.preset.id)??Number.MAX_SAFE_INTEGER;return a-l||i.connection.preset.id.localeCompare(s.connection.preset.id)||i.model.id.localeCompare(s.model.id)})}function Dr(e,t){if(e.readiness==="requires-host-adapter")throw new Error(`${e.preset.displayName} requires a dedicated host adapter`);if(!e.endpoint)throw new Error("Provider endpoint is not configured");if(e.preset.adapterKind==="aws-bedrock"||e.preset.adapterKind==="vertex-ai")throw new Error("Cloud adapter cannot be represented as DirectProviderConfig");if((e.preset.auth.mode==="bearer-env"||e.preset.auth.mode==="header-env")&&!t)throw new Error("Provider credential did not resolve");let n=Vr(e.preset.capabilities);return{kind:e.preset.adapterKind,apiKey:t??"",baseURL:e.endpoint,endpointProfile:e.preset.endpointProfile,allowedHosts:e.preset.allowedHosts,streaming:n.streaming,...e.preset.adapterKind==="openai-compatible"?{capabilityProfile:n}:{},...e.preset.auth.mode==="header-env"?{authentication:{type:"header",header:e.preset.auth.header??it(e.preset.id),prefix:e.preset.auth.prefix}}:{},...e.preset.auth.mode==="none"?{authentication:{type:"none"}}:{}}}function M(e,t,n,r,o,i,s,a,l,c,d=[]){return{schemaVersion:ot,id:e,displayName:t,family:n,adapterKind:r,...o?{defaultBaseUrl:o}:{},endpointProfile:i,...o?{allowedHosts:[new URL(o).hostname]}:{},auth:{mode:s,...a?{defaultSecretRef:a}:{},...s==="header-env"?{header:it(e)}:{},description:s==="none"?"No credential required":s==="cloud-chain"?"Provider-owned cloud credential chain":`Environment/credential reference ${a}`},capabilities:c,...l?{discoveryPath:l}:{},requires:d}}function it(e){return e==="anthropic"?"x-api-key":e==="google"?"x-goog-api-key":e==="azure-openai"?"api-key":"authorization"}function jr(e,t){return e.auth.mode==="none"||e.auth.mode==="cloud-chain"?{accept:"application/json"}:t?e.auth.mode==="bearer-env"?{accept:"application/json",authorization:`Bearer ${t}`}:{accept:"application/json",[e.auth.header??it(e.id)]:`${e.auth.prefix??""}${t}`}:{accept:"application/json"}}function ln(e,t){return e?H(e.trim().replace(/\/+$/,""),{profile:t.endpointProfile,allowedHosts:t.allowedHosts}).toString().replace(/\/$/,""):void 0}function qr(e,t){let n=new URL(e.toString());if(!t.startsWith("/")||t.includes("..")||t.includes("#"))throw new Error("Provider discovery path is invalid");return n.pathname=`${n.pathname.replace(/\/$/,"")}${t}`.replace(/\/{2,}/g,"/"),n}async function Ur(e,t,n,r,o){if(!Number.isSafeInteger(r)||r<1||r>6e4||!Number.isSafeInteger(o)||o<1||o>16*1024*1024)throw new Error("Invalid provider discovery limits");let i=new AbortController,s,a=!1,l,c=new Promise((u,p)=>{l=p}),d=setTimeout(()=>{a=!0;let u=new Error("Provider probe timed out");i.abort(u),l(u),s?.cancel().catch(()=>{})},r);try{let u=e(t,{...n,signal:i.signal,redirect:"manual"});u.then(T=>{a&&T.body?.cancel().catch(()=>{})},()=>{});let p=await Promise.race([u,c]);if(p.redirected||p.status>=300&&p.status<400)throw p.body?.cancel().catch(()=>{}),new Error("Provider discovery redirects are disabled");let m=0;if(p.headers.forEach((T,w)=>{m+=Buffer.byteLength(w)+Buffer.byteLength(T)}),m>64*1024)throw p.body?.cancel().catch(()=>{}),new Error("Provider discovery headers exceed limit");if(!p.ok||!p.body)return p.body?.cancel().catch(()=>{}),{response:p,text:""};let g=p.headers.get("content-length");if(g&&/^\d+$/.test(g)&&Number(g)>o)throw p.body.cancel().catch(()=>{}),new Error(`Provider discovery response exceeds ${o} bytes`);s=p.body.getReader();let y=new TextDecoder("utf-8",{fatal:!0}),f=0,x="";for(;;){let T=await Promise.race([s.read(),c]);if(T.done)break;if(f+=T.value.byteLength,f>o)throw new Error(`Provider discovery response exceeds ${o} bytes`);x+=y.decode(T.value,{stream:!0})}return x+=y.decode(),{response:p,text:x}}finally{clearTimeout(d),i.abort(),s&&(s.cancel().catch(()=>{}),s.releaseLock())}}function Jr(e){if(!e||typeof e!="object")return[];let t=e,r=(Array.isArray(t.data)?t.data:Array.isArray(t.models)?t.models:[]).flatMap(o=>{if(!o||typeof o!="object")return[];let i=o,a=(typeof i.id=="string"?i.id:typeof i.name=="string"?i.name.replace(/^models\//,""):"").trim();return!a||a.length>300||rt(a)?[]:[{id:a,...typeof i.displayName=="string"&&i.displayName.trim()?{displayName:i.displayName.trim().slice(0,300)}:{},...typeof i.owned_by=="string"&&i.owned_by.trim()?{ownedBy:i.owned_by.trim().slice(0,200)}:{},metadataSource:"provider"}]});return[...new Map(r.map(o=>[o.id,o])).values()].sort((o,i)=>o.id.localeCompare(i.id))}function Xr(e,t){return t?Object.entries(t).every(([n,r])=>r!==!0||e[n]===!0):!0}function Vr(e){return{streaming:e.streaming,textInput:e.textInput,imageInput:e.imageInput,tools:e.tools,parallelToolCalls:e.parallelToolCalls,structuredOutput:e.structuredOutput,reasoningMetadata:e.reasoningMetadata,usageAccounting:e.usageAccounting,cancellation:!0,retryAfter:!0,promptCaching:e.promptCaching}}function Br(e){if(e.schemaVersion!==ot||!/^[a-z0-9][a-z0-9._-]{1,80}$/.test(e.id))throw new Error("Provider preset id is invalid");if(!e.displayName.trim())throw new Error(`Provider preset ${e.id} requires displayName`);if(e.defaultBaseUrl&&ln(e.defaultBaseUrl,e),e.discoveryPath&&(!e.discoveryPath.startsWith("/")||e.discoveryPath.includes("..")))throw new Error(`Provider preset ${e.id} discoveryPath is invalid`);if(e.auth.header&&!/^[A-Za-z0-9-]{1,80}$/.test(e.auth.header))throw new Error(`Provider preset ${e.id} auth header is invalid`)}function Hr(e){let t=e.id.trim();if(!t||t.length>120||rt(t))throw new Error("Provider connection id is invalid");let n=e.secretRef?.trim();if(n&&!/^[A-Za-z_][A-Za-z0-9_.:/-]{0,255}$/.test(n))throw new Error("Provider credential reference is invalid");return{id:t,providerId:e.providerId.trim(),...e.baseUrl?.trim()?{baseUrl:e.baseUrl.trim()}:{},...n?{secretRef:n}:{},...e.model?.trim()?{model:e.model.trim().slice(0,300)}:{},enabled:e.enabled!==!1,...e.metadata?{metadata:{...e.metadata}}:{}}}function ee(e){return[...new Set(e)]}function zr(e){return(e instanceof Error?e.message:String(e)).replace(/(Bearer\s+)[A-Za-z0-9._~+/=-]+/gi,"$1[redacted]").replace(/([?&#](?:token|key|secret|password|api[_-]?key)=)[^&#\s]+/gi,"$1[redacted]").slice(0,500)}var dt=require("node:crypto"),I=require("node:fs/promises"),Q=require("node:path");function Me(e){return JSON.stringify(st(e,new Set))}function st(e,t){if(e===null||typeof e!="object"){if(typeof e=="number"&&!Number.isFinite(e))throw new TypeError("Artifact JSON cannot contain non-finite numbers");return e}if(t.has(e))throw new TypeError("Artifact JSON cannot contain cycles");if(t.add(e),Array.isArray(e)){let r=e.map(o=>st(o,t));return t.delete(e),r}let n={};for(let r of Object.keys(e).sort((o,i)=>o.localeCompare(i))){let o=e[r];if(o===void 0)throw new TypeError(`Artifact JSON property ${r} is undefined`);n[r]=st(o,t)}return t.delete(e),n}var U=require("node:fs"),at=require("node:os"),dn=require("node:path");function Kr(){return new Date().toISOString()}function Fr(){return new Date(Date.now()-Math.floor(process.uptime()*1e3)).toISOString()}function un(e){try{return JSON.parse((0,U.readFileSync)(e,"utf8"))}catch{return null}}function Qr(e){if(!e||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function Wr(e){return e.hostname!==(0,at.hostname)()?!0:Qr(e.pid)}function cn(e,t){(0,U.mkdirSync)((0,dn.dirname)(e),{recursive:!0}),(0,U.writeFileSync)(e,JSON.stringify(t,null,2)+`
10
+ `,{encoding:"utf8",flag:"wx"})}function Yr(e,t){let n=un(e);n?.pid!==t.pid||n.hostname!==t.hostname||(0,U.rmSync)(e,{force:!0})}function pn(e,t,n){let r=Kr(),o={schemaVersion:1,name:t,pid:process.pid,hostname:(0,at.hostname)(),processStartedAt:Fr(),version:n,acquiredAt:r,updatedAt:r};try{cn(e,o)}catch(i){if(i.code!=="EEXIST")throw i;let a=un(e);if(a&&Wr(a))throw new Error(`${t} is already locked by PID ${a.pid} on ${a.hostname}.`);(0,U.rmSync)(e,{force:!0}),cn(e,o)}return{record:o,release:()=>{Yr(e,o)}}}var $e=1,ct=class{directory;snapshotPath;lockPath;catalog;now;constructor(t){this.directory=(0,Q.resolve)(t.directory),this.snapshotPath=(0,Q.join)(this.directory,"providers.json"),this.lockPath=(0,Q.join)(this.directory,"providers.lock"),this.catalog=t.catalog??new te,this.now=t.now??(()=>new Date)}async upsert(t){let n=this.catalog.resolve(t).connection;return fn(n),this.mutate(r=>{let o=r.connections.filter(i=>i.id!==n.id);return o.push(n),{snapshot:lt(r,o,r.routingPolicy,this.now()),result:n}})}async remove(t){return this.mutate(n=>{let r=n.connections.filter(o=>o.id!==t);return r.length===n.connections.length?{snapshot:n,result:!1}:{snapshot:lt(n,r,n.routingPolicy,this.now()),result:!0}})}async setRoutingPolicy(t){let n=gn(t);return this.mutate(r=>({snapshot:lt(r,r.connections,n,this.now()),result:n}))}async get(t){return(await this.load()).connections.find(n=>n.id===t)??null}async list(){return(await this.load()).connections}async load(){try{let t=JSON.parse(await(0,I.readFile)(this.snapshotPath,"utf8"));return Zr(t,this.catalog),t}catch(t){if(t.code==="ENOENT")return Gr(this.now());throw t}}async mutate(t){await(0,I.mkdir)(this.directory,{recursive:!0,mode:448});let n=pn(this.lockPath,"xeno provider connection store","1");try{let r=await this.load(),{snapshot:o,result:i}=t(r);return o!==r&&await eo(this.snapshotPath,`${JSON.stringify(o,null,2)}
11
+ `),i}finally{n.release()}}};function Gr(e){return mn({schemaVersion:$e,generation:0,updatedAt:e.toISOString(),connections:[],routingPolicy:{}})}function lt(e,t,n,r){return mn({schemaVersion:$e,generation:e.generation+1,updatedAt:r.toISOString(),connections:[...t].sort((o,i)=>o.id.localeCompare(i.id)),routingPolicy:n})}function mn(e){return{...e,checksum:{algorithm:"sha256",value:(0,dt.createHash)("sha256").update(yn(e)).digest("hex")}}}function Zr(e,t){if(e.schemaVersion!==$e||!Array.isArray(e.connections))throw new Error("Invalid provider connection snapshot");let{checksum:n,...r}=e;if(n?.algorithm!=="sha256"||n.value!==(0,dt.createHash)("sha256").update(yn(r)).digest("hex"))throw new Error("Provider connection snapshot checksum mismatch");let o=new Set;for(let i of e.connections){let s=t.resolve(i).connection;if(fn(s),o.has(s.id))throw new Error(`Duplicate provider connection: ${s.id}`);o.add(s.id)}gn(e.routingPolicy)}function fn(e){let t=JSON.stringify(e);if(/\b(?:sk-[A-Za-z0-9_-]{16,}|xox[baprs]-[A-Za-z0-9-]{16,}|AKIA[0-9A-Z]{16})\b/.test(t))throw new Error("Provider connection configuration cannot contain raw credentials");if(e.baseUrl&&/[?&#](?:token|key|secret|password|api[_-]?key)=/i.test(e.baseUrl))throw new Error("Provider endpoint cannot contain credentials")}function gn(e){let t=r=>r?[...new Set(r.map(o=>o.trim()).filter(Boolean))].sort():void 0,n={...t(e.allowedProviderIds)?{allowedProviderIds:t(e.allowedProviderIds)}:{},...t(e.deniedProviderIds)?{deniedProviderIds:t(e.deniedProviderIds)}:{},...t(e.fallbackOrder)?{fallbackOrder:t(e.fallbackOrder)}:{},...e.preferLocal!==void 0?{preferLocal:!!e.preferLocal}:{},...e.require?{require:{...e.require}}:{}};for(let[r,o]of[["maxInputCostPerMillion",e.maxInputCostPerMillion],["maxOutputCostPerMillion",e.maxOutputCostPerMillion]])if(o!==void 0){if(!Number.isFinite(o)||o<0)throw new Error(`${r} must be a non-negative finite number`);n[r]=o}return n}async function eo(e,t){await(0,I.mkdir)((0,Q.dirname)(e),{recursive:!0,mode:448});let n=`${e}.${process.pid}.${Date.now()}.tmp`,r;try{r=await(0,I.open)(n,"wx",384),await r.writeFile(t,"utf8"),await r.sync(),await r.close(),r=void 0,await(0,I.rename)(n,e),await(0,I.chmod)(e,384).catch(()=>{})}finally{r&&await r.close().catch(()=>{}),await(0,I.unlink)(n).catch(()=>{})}}function yn(e){return Me(e)}var ut=require("node:crypto"),R=class extends Error{constructor(n,r){super(r);this.code=n;this.name="QuotaError"}code};function _(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<0)throw new R("INVALID","Quota counters must be non-negative safe integers.");return e}function L(e){if(typeof e!="string"||!e.trim()||e.length>512)throw new R("INVALID","Invalid quota identity.");return e}function $(e){let t=n=>({id:L(n?.id),generation:L(n?.generation)});if(!e||e.agent&&!e.team)throw new R("INVALID","A child quota scope requires its complete ancestry.");return{workspace:t(e.workspace),...e.team?{team:t(e.team)}:{},...e.agent?{agent:t(e.agent)}:{}}}function N(e){return JSON.stringify($(e))}function fe(e){let t=$(e);return[{workspace:t.workspace},...t.team?[{workspace:t.workspace,team:t.team}]:[],...t.agent?[t]:[]]}function to(e,t,n){let r=$(n);async function o(i,s,a,l,c,d){if(!e.prepareQuotaRequest)throw new R("UNSUPPORTED","This provider cannot guarantee per-request token bounds.");let u=L(d?.attemptId),p=(0,ut.createHash)("sha256").update(JSON.stringify([e.id,i,s,a,d?.systemPrompt??""])).digest("hex"),m=(0,ut.createHash)("sha256").update(JSON.stringify([N(r),e.id,u])).digest("hex"),g=await e.prepareQuotaRequest(i,structuredClone(s),structuredClone(a),d,c),y=_(_(g.inputTokensUpperBound)+_(g.outputTokensUpperBound));if(g.basis!=="provider-enforced")throw new R("UNSUPPORTED","Estimated token bounds cannot enforce a hard quota.");if(await t.reserve({id:m,scope:r,requestHash:p,reservedTokens:y}),c?.aborted)throw await t.void(m),c.reason??new Error("Cancelled before dispatch.");await t.dispatch(m);let f=await g.execute(l,c);if(f.usageReported){let x=_(f.inputTokens),T=_(f.outputTokens);if(x>g.inputTokensUpperBound||T>g.outputTokensUpperBound)throw new R("CORRUPT","Provider exceeded its guaranteed token bound; reservation requires reconciliation.");await t.settle(m,_(x+T))}return f}return{id:e.id,...e.model?{model:e.model}:{},...e.capabilities?{capabilities:e.capabilities}:{},complete:o,completeLocal:o}}var je=require("node:crypto"),E=require("node:fs/promises"),ne=require("node:path");var Ne=e=>(0,je.createHash)("sha256").update(Me(e)).digest("hex"),De=e=>new Date(e).toISOString().slice(0,10);function hn(e){return{requestsPerMinute:e.requestsPerMinute===null?null:_(e.requestsPerMinute),tokensPerDay:e.tokensPerDay===null?null:_(e.tokensPerDay)}}function bn(e,t){return fe(e).some(n=>N(n)===N(t))}function pt(e){return e.reduce((t,n)=>_(t+n),0)}var mt=class{constructor(t,n=Date.now,r=1e5){this.now=n;this.maximumEntries=r;this.directory=(0,ne.resolve)(t),_(r)}now;maximumEntries;directory;async policy(t){return(await this.load()).policies.get(N(t))??null}async setPolicy(t,n,r){let o={scope:$(t),limits:hn(n),revision:_(r)+1};return await this.append(()=>({kind:"policy",policy:o,expectedRevision:r})),o}async reservation(t){return(await this.load()).reservations.get(L(t))??null}async reserve(t){let n={id:L(t.id),scope:$(t.scope),requestHash:L(t.requestHash),reservedTokens:_(t.reservedTokens)};return await this.append((r,o)=>{let i=r.reservations.get(n.id);if(i){if(Ne([i.scope,i.requestHash,i.reservedTokens])!==Ne([n.scope,n.requestHash,n.reservedTokens]))throw new R("CONFLICT","Reservation identity was reused for different work.");return null}return{kind:"reserve",reservation:{...n,admittedAt:o,state:"reserved"}}}),await this.reservation(n.id)}async dispatch(t){await this.append(()=>({kind:"dispatch",id:L(t)}))}async void(t){await this.append(n=>n.reservations.get(t)?.state==="void"?null:{kind:"void",id:L(t)})}async settle(t,n){_(n),await this.append(r=>{let o=r.reservations.get(t);return o?.state==="settled"&&o.actualTokens===n?null:{kind:"settle",id:L(t),actualTokens:n}})}async snapshot(t){let n=await this.load(),r=_(this.now()),o=$(t);if(r<n.at)throw new R("CLOCK_ROLLBACK","Quota clock moved backwards.");let i=[...n.reservations.values()].filter(a=>bn(a.scope,o)),s=i.filter(a=>De(a.admittedAt)===De(r));return{authority:"local-file",policies:fe(o).flatMap(a=>n.policies.get(N(a))?[n.policies.get(N(a))]:[]),heldTokens:pt(s.filter(a=>a.state==="reserved"||a.state==="dispatched").map(a=>a.reservedTokens)),usedTokens:pt(s.filter(a=>a.state==="settled").map(a=>a.actualTokens)),requestsInLastMinute:i.filter(a=>a.state!=="void"&&a.admittedAt>r-6e4).length,unresolved:i.filter(a=>a.state==="dispatched").length}}apply(t,n,r,o=!0){if(n.kind==="policy"){let s=n.policy,a=N(s.scope);if((t.policies.get(a)?.revision??0)!==n.expectedRevision||s.revision!==n.expectedRevision+1)throw new R("CONFLICT","Quota policy revision changed.");t.policies.set(a,{scope:$(s.scope),revision:_(s.revision),limits:hn(s.limits)});return}if(n.kind==="reserve"){let s=n.reservation;if(L(s.id),L(s.requestHash),$(s.scope),_(s.reservedTokens),s.state!=="reserved"||s.admittedAt!==r||t.reservations.has(s.id))throw new R("CORRUPT","Invalid reservation record.");for(let a of o?fe(s.scope):[]){let l=t.policies.get(N(a));if(!l)continue;let c=[...t.reservations.values()].filter(u=>bn(u.scope,a)&&u.state!=="void");if(l.limits.requestsPerMinute!==null&&c.filter(u=>u.admittedAt>r-6e4).length>=l.limits.requestsPerMinute)throw new R("EXCEEDED","Ancestor request rate limit reached.");let d=pt(c.filter(u=>De(u.admittedAt)===De(r)).map(u=>u.state==="settled"?u.actualTokens:u.reservedTokens));if(l.limits.tokensPerDay!==null&&_(d+s.reservedTokens)>l.limits.tokensPerDay)throw new R("EXCEEDED","Ancestor daily token limit reached.")}t.reservations.set(s.id,structuredClone(s));return}let i=t.reservations.get(n.id);if(!i)throw new R("CONFLICT","Reservation does not exist.");if(n.kind==="dispatch"||n.kind==="void"){if(i.state!=="reserved")throw new R("CONFLICT","Reservation cannot be dispatched twice or release unknown usage.");i.state=n.kind==="dispatch"?"dispatched":"void"}else if(n.kind==="settle"){if(i.state!=="dispatched"||_(n.actualTokens)>i.reservedTokens)throw new R("CONFLICT","Invalid reservation settlement.");i.state="settled",i.actualTokens=n.actualTokens}else throw new R("CORRUPT","Unknown quota journal operation.")}async load(){let t={sequence:0,hash:"",at:0,policies:new Map,reservations:new Map},n;try{n=await(0,E.readdir)(this.directory)}catch(o){if(o.code==="ENOENT")return t;throw o}let r=n.filter(o=>o.endsWith(".quota")).sort();if(r.length>this.maximumEntries)throw new R("CAPACITY","Quota journal requires archival maintenance.");for(let o of r){if(o!==`${String(t.sequence+1).padStart(12,"0")}.quota`)throw new R("CORRUPT","Quota journal sequence is incomplete.");let i=(0,ne.join)(this.directory,o),s=await(0,E.lstat)(i);if(!s.isFile()||s.isSymbolicLink()||s.size>16384)throw new R("CORRUPT","Invalid quota record file.");let a=await(0,E.open)(i,"r"),l;try{let u=Buffer.alloc(16385),p=await a.read(u,0,u.length,0);if(p.bytesRead>16384)throw new R("CORRUPT","Oversized quota record.");l=JSON.parse(u.subarray(0,p.bytesRead).toString("utf8"))}finally{await a.close()}let{hash:c,...d}=l;if(l.version!==1||l.sequence!==t.sequence+1||l.previousHash!==t.hash||c!==Ne(d)||_(l.at)<t.at)throw new R("CORRUPT","Quota journal integrity failed.");this.apply(t,l.operation,l.at,!1),t.sequence=l.sequence,t.hash=c,t.at=l.at}return t}async append(t){await(0,E.mkdir)(this.directory,{recursive:!0,mode:448});for(let n=0;n<100;n++){let r=await this.load(),o=_(this.now());if(o<r.at)throw new R("CLOCK_ROLLBACK","Quota clock moved backwards.");let i=t(r,o);if(!i)return;if(r.sequence>=this.maximumEntries)throw new R("CAPACITY","Quota journal requires archival maintenance.");this.apply(r,i,o);let s={version:1,sequence:r.sequence+1,previousHash:r.hash,at:o,operation:i},a=JSON.stringify({...s,hash:Ne(s)});if(Buffer.byteLength(a)>16384)throw new R("CAPACITY","Quota record exceeds its bound.");let l=(0,ne.join)(this.directory,`${(0,je.randomUUID)()}.tmp`),c=(0,ne.join)(this.directory,`${String(s.sequence).padStart(12,"0")}.quota`),d=await(0,E.open)(l,"wx",384);try{await d.writeFile(a),await d.sync()}catch(u){throw await d.close(),await(0,E.unlink)(l).catch(()=>{}),u}await d.close();try{if(await(0,E.link)(l,c),process.platform!=="win32"){let u=await(0,E.open)(this.directory,"r");try{await u.sync()}finally{await u.close()}}return}catch(u){if(u.code!=="EEXIST")throw u}finally{await(0,E.unlink)(l).catch(()=>{})}}throw new R("CONFLICT","Quota admission contention exceeded the retry bound.")}};0&&(module.exports={BUILT_IN_XENO_PROVIDER_PRESETS,DualLLMProvider,FileQuotaAuthority,FileXenoProviderConnectionStore,ProviderError,QuotaError,ToolSchemaProjectionError,XENO_PROVIDER_CATALOG_SCHEMA_VERSION,XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION,XenoProviderCatalog,assertDirectEndpointResolution,classifyProviderHttpError,createDirectProvider,createOllamaNativeProvider,createQuotaGovernedProvider,directProviderConfigFromConnection,normalizeQuotaScope,parseRetryAfter,probeXenoProvider,projectToolDefinitionsForProvider,projectToolSchemaForProvider,providerCapabilityError,providerProtocolError,quotaAncestors,quotaInteger,quotaScopeKey,quotaText,selectXenoProviderRoute,validateDirectEndpoint});