@xenosystem/agent-sdk 0.10.2 → 0.10.3

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