@xenosystem/agent-sdk 0.10.21 → 0.10.23

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