@xenosystem/agent-sdk 0.10.2 → 0.10.4
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.
- package/dist/artifacts/index.cjs +1 -1
- package/dist/artifacts/index.js +1 -1
- package/dist/automation/index.cjs +1 -1
- package/dist/automation/index.js +1 -1
- package/dist/control-plane/index.cjs +1 -1
- package/dist/control-plane/index.js +1 -1
- package/dist/electron/index.cjs +160 -160
- package/dist/electron/index.d.cts +18 -0
- package/dist/electron/index.d.ts +18 -0
- package/dist/electron/index.js +160 -160
- package/dist/electron/metafile-cjs.json +1 -1
- package/dist/electron/metafile-esm.json +1 -1
- package/dist/index.cjs +333 -333
- package/dist/index.d.cts +29 -1
- package/dist/index.d.ts +29 -1
- package/dist/index.js +330 -330
- package/dist/mcp/metafile-cjs.json +1 -1
- package/dist/mcp/metafile-esm.json +1 -1
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/providers/index.cjs +10 -10
- package/dist/providers/index.js +10 -10
- package/dist/providers/metafile-cjs.json +1 -1
- package/dist/providers/metafile-esm.json +1 -1
- package/dist/session/index.cjs +1 -1
- package/dist/session/index.js +1 -1
- package/dist/workforce/index.cjs +1 -0
- package/dist/workforce/index.d.cts +86 -0
- package/dist/workforce/index.d.ts +86 -0
- package/dist/workforce/index.js +1 -0
- package/dist/workforce/metafile-cjs.json +1 -0
- package/dist/workforce/metafile-esm.json +1 -0
- package/package.json +6 -1
package/dist/providers/index.cjs
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
"use strict";var
|
|
2
|
-
`).trim();r.length>0&&t.push({role:n.role,content:r})}return t}var
|
|
3
|
-
`);f=
|
|
1
|
+
"use strict";var He=Object.defineProperty;var Cn=Object.getOwnPropertyDescriptor;var _n=Object.getOwnPropertyNames;var Sn=Object.prototype.hasOwnProperty;var En=(e,t)=>{for(var n in t)He(e,n,{get:t[n],enumerable:!0})},An=(e,t,n,o)=>{if(t&&typeof t=="object"||typeof t=="function")for(let r of _n(t))!Sn.call(e,r)&&r!==n&&He(e,r,{get:()=>t[r],enumerable:!(o=Cn(t,r))||o.enumerable});return e};var Ln=e=>An(He({},"__esModule",{value:!0}),e);var dr={};En(dr,{BUILT_IN_XENO_PROVIDER_PRESETS:()=>fn,DualLLMProvider:()=>Pe,FileQuotaAuthority:()=>Pt,FileXenoProviderConnectionStore:()=>bt,ProviderError:()=>P,QuotaAcknowledgementError:()=>Me,QuotaError:()=>x,ToolSchemaProjectionError:()=>S,XENO_PROVIDER_CATALOG_SCHEMA_VERSION:()=>pt,XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION:()=>Xe,XenoProviderCatalog:()=>le,assertDirectEndpointResolution:()=>Te,classifyProviderHttpError:()=>ke,createDirectProvider:()=>ut,createOllamaNativeProvider:()=>pn,createQuotaGovernedProvider:()=>Eo,directProviderConfigFromConnection:()=>zo,isQuotaControlError:()=>en,normalizeQuotaScope:()=>D,parseRetryAfter:()=>xe,probeXenoProvider:()=>Bo,projectToolDefinitionsForProvider:()=>ie,projectToolSchemaForProvider:()=>at,providerCapabilityError:()=>V,providerProtocolError:()=>b,quotaAncestors:()=>se,quotaInteger:()=>_,quotaScopeKey:()=>$,quotaText:()=>O,selectXenoProviderRoute:()=>Ho,validateDirectEndpoint:()=>K});module.exports=Ln(dr);var xt="https://api.xenostudio.ai";var mr=300*1e3;function kt(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=In(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 In(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 Mn="http://localhost:3338",$n=xt,Nn=2e3,ze=12e4,Dn=3e4,Pe=class{localUrl;cloudUrl;cloudApiKey;mode;defaultLocalModel;defaultCloudModel;localAvailable=null;localModelName=null;lastHealthCheck=0;constructor(t){this.localUrl=t?.localUrl??Mn,this.cloudUrl=t?.cloudUrl??$n,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(),ze);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 v=T.trim();if(!v||!v.startsWith("data: "))continue;let k=v.slice(6);if(k==="[DONE]")return;try{let L=JSON.parse(k).choices[0]?.delta.content;L&&(yield L)}catch{}}}}finally{clearTimeout(c)}}async isLocalAvailable(t=!1){let n=Date.now();if(!t&&this.localAvailable!==null&&n-this.lastHealthCheck<Dn)return this.localAvailable;try{let o=new AbortController,r=setTimeout(()=>o.abort(),Nn);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 kt(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(),ze);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(),ze);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)}}};var $e=require("node:crypto");function qn(e){return/^data:([^;,]+)[;,]/i.exec(e.trim())?.[1]}function jn(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 ${qn(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 me(e){return typeof e=="string"?e:jn(e)}var Ce=require("node:perf_hooks");var Jn=1;var Xn=12,Vn=128,Bn=/^xeno\.[a-z0-9]+(?:[._][a-z0-9]+)*$/u,Hn=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/u,zn=/(?:[\\/]|@|https?:|bearer|token|secret|password|credential|api[_-]?key|[0-9a-f]{8}-[0-9a-f-]{27,})/iu,Kn=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"]),Rt=new Set,Tt=new Map;function Fn(e){let t=e.trim().toLowerCase();return!t||t.length>64||zn.test(t)||!Hn.test(t)?null:t}function Qn(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=Fn(t);if(!n)return null;let o=Tt.get(e);return o||(o=new Set,Tt.set(e,o)),!o.has(n)&&o.size>=Vn?"other":(o.add(n),n)}function Wn(e={}){let t={};for(let[n,o]of Object.entries(e)){if(Object.keys(t).length>=Xn)break;if(!Kn.has(n))continue;let r=Qn(n,o);r!==null&&(t[n]=r)}return Object.freeze(t)}function Ct(e){if(Rt.size===0||!Bn.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:Jn,kind:e.kind,name:e.name,value:Math.min(t,Number.MAX_SAFE_INTEGER),timestamp:(e.timestamp??new Date).toISOString(),attributes:Wn(e.attributes)});for(let o of Rt)try{o(n)}catch{}}function oe(e,t=1,n){Ct({kind:"counter",name:e,value:t,attributes:n})}function Fe(e,t,n){Ct({kind:"histogram",name:e,value:t,attributes:n})}var At=require("node:dns/promises"),fe=require("node:net");var Gn=["context length","context window","maximum context","too many tokens","request too large"];function _t(e){let t=e.toLowerCase();return Gn.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 xe(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 Yn(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 Qe(e,t){return t.some(n=>e.includes(n))}function ke(e){let t=Yn(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"}):Qe(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}):_t(n)?new k(`Provider context window exceeded${o}`,{...r,category:"context_overflow",code:"PROVIDER_CONTEXT_OVERFLOW"}):Qe(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||Qe(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 w(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 H(e,t){return oe("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 Lt=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 Zn(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 St(e){let t=Zn(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 Re(e){let t=e.toLowerCase().replace(/^\[|\]$/g,"").split("%")[0];(0,fe.isIP)(t)===6&&(t=new URL(`http://[${t}]`).hostname.slice(1,-1));let n=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(t);if(n){let o=Number.parseInt(n[1],16),r=Number.parseInt(n[2],16);return`${o>>8}.${o&255}.${r>>8}.${r&255}`}return t}function It(e){let t=Re(e);return(0,fe.isIP)(t)===4?St(t):t==="::"||t==="::0"?"unspecified":t==="::1"?"loopback":t.startsWith("::ffff:")?St(t.slice(7)):/^f[cd]/.test(t)?"private":/^fe[89ab]/.test(t)?"link-local":"public"}function Et(e){return e==="example"||e.endsWith(".example")||e==="test"||e.endsWith(".test")||e==="invalid"||e.endsWith(".invalid")}function eo(e){return e==="localhost"||e.endsWith(".localhost")}function W(e,t={}){let n;try{n=new URL(e)}catch{throw A("the URL is invalid")}if(n.username||n.password)throw A("embedded credentials are forbidden");if(n.hash||n.search)throw A("base URLs cannot contain a query or fragment");if(!n.hostname||n.hostname.includes("%"))throw A("the hostname is empty or ambiguous");if(Lt.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=(0,fe.isIP)(r)?It(r):null;if(i==="link-local"||i==="unspecified")throw A(`${i} destinations are forbidden`);if(o==="public-https"&&(i==="private"||i==="loopback"||eo(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 Te(e,t={}){await We(e,t)}async function We(e,t={}){let n=e.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Lt.has(n))throw A("cloud metadata destinations are forbidden");let o=new Set((t.allowedHosts??[]).map(s=>s.toLowerCase())),r=(0,fe.isIP)(n)?[n]:Et(n)?[]:t.resolveHostname?await t.resolveHostname(n):(await(0,At.lookup)(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!r.length&&!Et(n))throw A("DNS resolution returned no addresses");let i=t.profile??"public-https";for(let s of r){let a=It(s);if(a==="link-local"||a==="unspecified")throw 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}var Ot=require("node:http"),Mt=require("node:https"),Ge=require("node:net"),$t=require("node:events");function Nt(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||!(0,Ge.isIP)(a)||new URL(n.origin).origin!==e.origin)return queueMicrotask(()=>s(new Error("Provider connection has no authorized pinned address"))),!0;let l=n.headers??{},c=(e.protocol==="https:"?Mt.request:Ot.request)(new URL(n.path,e.origin),{method:n.method,headers:l,agent:!1,rejectUnauthorized:!0,lookup:(d,u,p)=>{let f={address:a,family:(0,Ge.isIP)(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||Re(d.remoteAddress)!==Re(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(0,$t.once)(c,"drain")}c.end()}}catch(d){c.destroy(d instanceof Error?d:new Error("Provider request body failed"))}})(),!0}}}var re={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function to(e={}){for(let[t,n]of Object.entries(e))if(n!==void 0&&(!Number.isSafeInteger(n)||n<1))throw w("provider-transport",`${t} must be a positive safe integer`);return{connectTimeoutMs:Math.max(100,e.connectTimeoutMs??re.connectTimeoutMs),totalTimeoutMs:Math.max(100,e.totalTimeoutMs??re.totalTimeoutMs),idleTimeoutMs:Math.max(100,e.idleTimeoutMs??re.idleTimeoutMs),maxResponseBytes:Math.max(1024,e.maxResponseBytes??re.maxResponseBytes),maxHeaderBytes:Math.max(1024,e.maxHeaderBytes??re.maxHeaderBytes),maxEventBytes:Math.max(1024,e.maxEventBytes??re.maxEventBytes)}}async function ge(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 _e(e,t,n,o){try{return e.decode(t,{stream:n})}catch{throw w(o,"response is not valid UTF-8")}}function Ye(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 no(e){let t=0;return e.forEach((n,o)=>{t+=Buffer.byteLength(o)+Buffer.byteLength(n)+4}),t}async function Dt(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 ge(r.read(),o.signal);if(u)break;if(c(),s+=d.byteLength,s>n.maxResponseBytes)throw w(t,`response exceeded ${n.maxResponseBytes} bytes`);a+=_e(i,d,!0,t)}return a+=_e(i,void 0,!1,t),a}finally{l&&clearTimeout(l),r.cancel().catch(()=>{}),r.releaseLock()}}async function qt(e,t,n,o){let r=Ce.performance.now(),i=to(n.limits);oe("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 Ye(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 ge(We(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:Nt(e,f)},y=fetch(e,g);y.then(P=>{s.signal.aborted&&P.body?.cancel().catch(()=>{})},()=>{});let m=await ge(y,s.signal);if(p=m,clearTimeout(u),no(m.headers)>i.maxHeaderBytes)throw w(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 w(n.providerId,`response exceeded ${i.maxResponseBytes} bytes`);if(!m.ok){let P=await Dt(m,n.providerId,i,s),T=P;try{T=P?JSON.parse(P):{}}catch{}throw ke({providerId:n.providerId,statusCode:m.status,body:T,retryAfterMs:xe(m.headers.get("retry-after")),requestId:m.headers.get("request-id")??m.headers.get("x-request-id")??void 0})}let h=await ge(o(m,s,i),s.signal);return oe("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),Fe("xeno.provider.request_duration_ms",Ce.performance.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=Ye(n.providerId,"cancelled",f):a||s.signal.reason==="idle-timeout"?g=Ye(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(()=>{}),oe("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:g.category,error_code:g.code}),Fe("xeno.provider.request_duration_ms",Ce.performance.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 ie(e,t,n){return qt(e,t,n,async(o,r,i)=>{let s=await Dt(o,n.providerId,i,r),a;try{a=s?JSON.parse(s):{}}catch(l){throw w(n.providerId,"body is not valid JSON",l)}if(!a||typeof a!="object"||Array.isArray(a))throw w(n.providerId,"JSON body must be an object");return a})}async function ye(e,t,n,o){return qt(e,t,n,async(r,i,s)=>{if(!r.body)throw w(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(
|
|
7
|
-
`);if(h<0)break;let P=c.slice(0,h).replace(/\r$/,"");if(c=c.slice(h+1),!P)await y();else if(!P.startsWith(":")){let T=P.indexOf(":"),E=T<0?P:P.slice(0,T),I=T<0?"":P.slice(T+1).replace(/^ /,"");E==="event"?u=I:E==="data"&&p.push(I)}}}if(c+=_e(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()}})}var Yt=require("node:crypto");var et=require("node:net"),Ie=class extends Error{issues;constructor(t){super(`Invalid JSON Schema: ${t.map(n=>`${n.path||"#"} ${n.message}`).join("; ")}`),this.name="JsonSchemaCompilationError",this.issues=t}},tt="https://json-schema.org/draft/2020-12/schema",oo=new Set(["string","number","integer","boolean","array","object","null"]),ro=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"]),Xt=new Map([["date",e=>zt(e)],["date-time",e=>Ro(e)],["time",e=>Kt(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=>Ut(e)],["idn-email",e=>Ut(e)],["hostname",e=>ot(e)],["idn-hostname",e=>ot(e)],["ipv4",e=>(0,et.isIP)(e)===4],["ipv6",e=>(0,et.isIP)(e)===6],["uuid",e=>/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(e)],["uri",e=>jt(e)],["iri",e=>jt(e)],["uri-reference",e=>Jt(e)],["iri-reference",e=>Jt(e)],["uri-template",e=>To(e)],["json-pointer",e=>/^(?:\/(?:[^~/]|~[01])*)*$/u.test(e)],["relative-json-pointer",e=>/^(?:0|[1-9]\d*)(?:#|(?:\/(?:[^~/]|~[01])*)*)$/u.test(e)],["regex",(e,t)=>it(e,t.maxPatternLength)!==void 0]]);function io(e={}){return{strictKeywords:e.strictKeywords??!0,assertFormats:e.assertFormats??!1,maxSchemaDepth:z(e.maxSchemaDepth,64,1,256,"maxSchemaDepth"),maxSchemaNodes:z(e.maxSchemaNodes,4096,1,1e5,"maxSchemaNodes"),maxReferences:z(e.maxReferences,512,0,1e4,"maxReferences"),maxPatternLength:z(e.maxPatternLength,256,1,4096,"maxPatternLength"),maxValidationDepth:z(e.maxValidationDepth,128,1,1024,"maxValidationDepth"),maxValidationSteps:z(e.maxValidationSteps,1e5,100,1e7,"maxValidationSteps"),maxValidationErrors:z(e.maxValidationErrors,64,1,1024,"maxValidationErrors"),maxInputBytes:z(e.maxInputBytes,16*1024*1024,1024,256*1024*1024,"maxInputBytes")}}function z(e,t,n,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 so(e,t={}){let n={root:e,options:io(t),issues:[],rawByPointer:new Map,anchors:new Map,compiledByPointer:new Map,schemaNodes:0,references:0,nextNodeId:1};Ae(e,"",0,n);let o=G(e,"",0,n);if(n.issues.length>0||!o)throw new Ie(n.issues);return Object.freeze({dialect:tt,formatAssertion:n.options.assertFormats,validate(r){let i=[],s=nt(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 J(r,o,"",0,c),{valid:i.length===0,errors:i,steps:c.budget.steps,truncated:c.budget.exhausted||i.length>=n.options.maxValidationErrors}}})}function Vt(e,t={}){if(!O(e)||e.type!=="object"||!O(e.properties))throw new Ie([{path:"#",keyword:"type",message:"tool input schema root must declare type object and a properties object"}]);return so(e,t)}function Ae(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"&&!O(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(!O(i)){b(o,t,r,`${r} must be an object`);continue}for(let[s,a]of Object.entries(i))Ae(a,X(t,r,s),n+1,o)}}for(let r of["items","contains","additionalProperties","not"])e[r]!==void 0&&Ae(e[r],X(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)=>Ae(s,X(t,r,String(a)),n+1,o))}}}}}function G(e,t,n,o){let r=o.compiledByPointer.get(t);if(r)return r;if(typeof e!="boolean"&&!O(e))return;let i={id:o.nextNodeId++,schemaPath:Qt(t)};if(o.compiledByPointer.set(t,i),typeof e=="boolean")return i.boolean=e,i;if(ao(e,t,o),lo(e,t,o),e.$schema!==void 0&&(t!==""||e.$schema!==tt&&e.$schema!==`${tt}#`)&&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=yo(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=G(a,s,n+1,o)}}if(i.types=co(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&&se(a,c)))?b(o,t,"enum","enum values must be unique"):s.some(a=>nt(a))?b(o,t,"enum","enum values must be JSON values"):i.enumValues=s}if(Object.prototype.hasOwnProperty.call(e,"const")&&(nt(e.const)?b(o,t,"const","const must be a JSON value"):(i.hasConst=!0,i.constValue=e.const)),i.multipleOf=fo(e.multipleOf,t,"multipleOf",o),i.maximum=he(e.maximum,t,"maximum",o),i.exclusiveMaximum=he(e.exclusiveMaximum,t,"exclusiveMaximum",o),i.minimum=he(e.minimum,t,"minimum",o),i.exclusiveMinimum=he(e.exclusiveMinimum,t,"exclusiveMinimum",o),i.maxLength=K(e.maxLength,t,"maxLength",o),i.minLength=K(e.minLength,t,"minLength",o),i.minItems=K(e.minItems,t,"minItems",o),i.maxItems=K(e.maxItems,t,"maxItems",o),i.minContains=K(e.minContains,t,"minContains",o),i.maxContains=K(e.maxContains,t,"maxContains",o),i.minProperties=K(e.minProperties,t,"minProperties",o),i.maxProperties=K(e.maxProperties,t,"maxProperties",o),go(i,t,o),e.pattern!==void 0)if(typeof e.pattern!="string")b(o,t,"pattern","pattern must be a string");else{let s=it(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&&!Xt.has(e.format)?b(o,t,"format",`unsupported asserted format ${e.format}`):i.format=e.format),i.prefixItems=Ee(e.prefixItems,t,"prefixItems",n,o,!0),i.items=Se(e.items,t,"items",n,o),i.contains=Se(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=uo(e.properties,t,"properties",n,o),i.patternProperties=po(e.patternProperties,t,n,o),i.additionalProperties=Se(e.additionalProperties,t,"additionalProperties",n,o),i.required=Bt(e.required,t,"required",o,!0),i.dependentRequired=mo(e.dependentRequired,t,o),i.allOf=Ee(e.allOf,t,"allOf",n,o,!1),i.anyOf=Ee(e.anyOf,t,"anyOf",n,o,!1),i.oneOf=Ee(e.oneOf,t,"oneOf",n,o,!1),i.not=Se(e.not,t,"not",n,o),O(e.$defs))for(let[s,a]of Object.entries(e.$defs))G(a,X(t,"$defs",s),n+1,o);return i}function ao(e,t,n){if(n.options.strictKeywords)for(let o of Object.keys(e))!ro.has(o)&&!o.startsWith("x-")&&b(n,t,o,`unsupported keyword ${o}`)}function lo(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 co(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"||!oo.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 Se(e,t,n,o,r){if(e!==void 0)return G(e,X(t,n),o+1,r)}function Ee(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)=>G(s,X(t,n,String(a)),o+1,r)).filter(s=>!!s)}}function uo(e,t,n,o,r){if(e===void 0)return;if(!O(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=G(a,X(t,n,s),o+1,r);l&&i.set(s,l)}return i}function po(e,t,n,o){if(e===void 0)return;if(!O(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=it(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=G(s,X(t,"patternProperties",i),n+1,o);l&&r.push({pattern:{source:i,regex:a},schema:l})}return r}function mo(e,t,n){if(e===void 0)return;if(!O(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=Bt(i,X(t,"dependentRequired",r),"dependentRequired",n,!0);s&&o.set(r,s)}return o}function Bt(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 fo(e,t,n,o){let r=he(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 he(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 K(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 go(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 yo(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(Ft).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 J(e,t,n,o,r){if(!Ht(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=xo(t,e,r);if(!r.activePairs.has(i)){r.activePairs.add(i);try{if(t.ref&&J(e,t.ref,n,o+1,r),t.enumValues&&!t.enumValues.some(s=>se(s,e))&&C(r,n,"enum",t,`expected one of ${t.enumValues.map(rt).join(", ")} but got ${Ze(e)}`),t.hasConst&&!se(t.constValue,e)&&C(r,n,"const",t,`expected ${rt(t.constValue)} but got ${Ze(e)}`),t.types&&!t.types.some(s=>ko(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 ${Ze(e)}`);return}ho(e,t,n,o,r),typeof e=="number"&&bo(e,t,n,r),typeof e=="string"&&wo(e,t,n,r),Array.isArray(e)&&vo(e,t,n,o,r),O(e)&&Po(e,t,n,o,r)}finally{r.activePairs.delete(i)}}}function ho(e,t,n,o,r){for(let i of t.allOf??[])J(e,i,n,o+1,r);if(t.anyOf&&t.anyOf.filter(s=>Le(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=>Le(e,s,n,o+1,r)).length;i!==1&&C(r,n,"oneOf",t,`must match exactly one oneOf branch; matched ${i}`)}t.not&&Le(e,t.not,n,o+1,r)&&C(r,n,"not",t,"must not match the disallowed schema")}function bo(e,t,n,o){t.multipleOf!==void 0&&!Co(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 wo(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=Xt.get(t.format);i&&!i(e,o.options)&&C(o,n,"format",t,`must match format ${t.format}`)}}function vo(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(!Ht(r))break e;if(se(e[s],e[a])){C(r,q(n,String(s)),"uniqueItems",t,`duplicates item ${a}`);break e}}let i=t.prefixItems?.length??0;if(t.prefixItems?.forEach((s,a)=>{a<e.length&&J(e[a],s,q(n,String(a)),o+1,r)}),t.items)for(let s=i;s<e.length;s+=1)J(e[s],t.items,q(n,String(s)),o+1,r);if(t.contains){let s=0;for(let l=0;l<e.length;l+=1)Le(e[l],t.contains,q(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 Po(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,q(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,q(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,J(e[s],l,q(n,s),o+1,r));for(let c of t.patternProperties??[])c.pattern.regex.test(s)&&(a=!0,J(e[s],c.schema,q(n,s),o+1,r));!a&&t.additionalProperties&&J(e[s],t.additionalProperties,q(n,s),o+1,r)}}function Le(e,t,n,o,r){let i={...r,errors:[],activePairs:new Set(r.activePairs)};return J(e,t,n,o,i),i.errors.length===0&&!i.budget.exhausted}function Ht(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 xo(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}:${rt(t)}`}function ko(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 O(e);case"null":return e===null}}function nt(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,q(r,String(s)));if(l)return l}t.delete(o)};return n(e,"")}function it(e,t){if(!([...e].length>t)&&!/\\(?:[1-9]|k<)/u.test(e)&&!/\(\?<(?:[=!]|[A-Za-z])/u.test(e)&&!/\((?:[^()\\]|\\.)*[+*{](?:[^()\\]|\\.)*\)[+*{?]/u.test(e))try{return new RegExp(e,"u")}catch{return}}function zt(e){let t=/^(\d{4})-(\d{2})-(\d{2})$/u.exec(e);if(!t)return!1;let n=new Date(Date.UTC(Number(t[1]),Number(t[2])-1,Number(t[3])));return n.getUTCFullYear()===Number(t[1])&&n.getUTCMonth()===Number(t[2])-1&&n.getUTCDate()===Number(t[3])}function Kt(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 Ro(e){let t=/^([^Tt ]+)[Tt ](.+)$/u.exec(e);return!!(t&&zt(t[1])&&Kt(t[2]))}function Ut(e){if([...e].length>254||/[\s<>(),;:\\"\[\]]/u.test(e))return!1;let t=e.lastIndexOf("@");return t>0&&t<e.length-1&&[...e.slice(0,t)].length<=64&&ot(e.slice(t+1))}function ot(e){if([...e].length>253)return!1;let t=e.endsWith(".")?e.slice(0,-1):e;return t.length>0&&t.split(".").every(n=>n.length>0&&n.length<=63&&!n.startsWith("-")&&!n.endsWith("-")&&/^[\p{L}\p{N}-]+$/u.test(n))}function jt(e){try{return!!(new URL(e).protocol&&!/\s/u.test(e))}catch{return!1}}function Jt(e){try{return new URL(e,"https://xeno.invalid/"),!/\s/u.test(e)}catch{return!1}}function To(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 Co(e,t){let n=e/t;return Math.abs(n-Math.round(n))<=Number.EPSILON*Math.max(1,Math.abs(n))*8}function O(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function se(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)=>se(n,t[o]));if(O(e)&&O(t)){let n=Object.keys(e),o=Object.keys(t);return n.length===o.length&&n.every(r=>Object.prototype.hasOwnProperty.call(t,r)&&se(e[r],t[r]))}return!1}function q(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 X(e,...t){return`${e}/${t.map(Ft).join("/")}`}function Ft(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function Qt(e){return e.length===0?"#":`#${e}`}function b(e,t,n,o){e.issues.length>=64||e.issues.push({path:Qt(t),...n?{keyword:n}:{},message:o})}function Ze(e){return e===null?"null":Array.isArray(e)?"array":typeof e=="number"?Number.isSafeInteger(e)?"integer":"number":typeof e}function rt(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}},Wt=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),_o=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function lt(e,t){Vt(e);let n=at(e),o=n,r=Gt(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};Oe(o,"",i);let s=Y(o,"#",i);if(!ae(s))throw new S(t,"#","provider tool root must remain an object schema");return So(n,s,t),{schema:s,dialect:t,canonicalSha256:r,projectedSha256:Gt(s),changes:i.changes}}function Z(e,t){return e.map(n=>{let o=lt(n.input_schema,t);return{definition:{...n,input_schema:o.schema},projection:o}})}function Y(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=Eo(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"&&!Wt.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=Y(r,`${t}/$ref`,n);n.activeReferences.delete(e.$ref);let l=Y(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=Y(r,`${t}/$ref`,n);return n.activeReferences.delete(e.$ref),n.changes.push({path:t,keyword:"$ref",action:"transformed",reason:"inlined local reference"}),s}let o={};for(let[r,i]of Object.entries(e))if(r!=="$ref"){if(Wt.has(r)||r.startsWith("x-")){r==="description"?o.description=i:n.changes.push({path:t,keyword:r,action:"omitted",reason:"provider wire metadata is not required for canonical validation"});continue}if(n.dialect==="google"&&!_o.has(r)){if(r==="const"){o.enum=[at(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(!ae(i))throw new S(n.dialect,t,`${r} must be an object`);let s={};for(let[a,l]of Object.entries(i))s[a]=Y(l,`${t}/${r}/${ct(a)}`,n);o[r]=s;continue}if(["items","contains","additionalProperties","not"].includes(r)){o[r]=Y(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)=>Y(s,`${t}/${r}/${a}`,n));continue}o[r]=at(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 So(e,t,n){if(t.type!=="object"||!ae(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 Oe(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(ae(r))for(let[i,s]of Object.entries(r))Oe(s,`${t}/${o}/${ct(i)}`,n)}for(let o of["items","contains","additionalProperties","not"]){let r=e[o];(typeof r=="boolean"||ae(r))&&Oe(r,`${t}/${o}`,n)}for(let o of["prefixItems","allOf","anyOf","oneOf"]){let r=e[o];Array.isArray(r)&&r.forEach((i,s)=>Oe(i,`${t}/${o}/${s}`,n))}}}function Eo(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(ct).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 Gt(e){return(0,Yt.createHash)("sha256").update(st(e)).digest("hex")}function st(e){return Array.isArray(e)?`[${e.map(st).join(",")}]`:ae(e)?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${st(e[t])}`).join(",")}}`:JSON.stringify(e)}function at(e){return JSON.parse(JSON.stringify(e))}function ct(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function ae(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var dt=require("node:crypto");async function Zt(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 v=class extends Error{constructor(n,o){super(o);this.code=n;this.name="QuotaError"}code;retryable=!1},Me=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 en(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 v("INVALID","Quota counters must be non-negative safe integers.");return e}function M(e){if(typeof e!="string"||!e.trim()||e.length>512)throw new v("INVALID","Invalid quota identity.");return e}function U(e){let t=n=>({id:M(n?.id),generation:M(n?.generation)});if(!e||e.agent&&!e.team)throw new v("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 D(e){return JSON.stringify(U(e))}function le(e){let t=U(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 Ao(e,t,n){let o=U(n);async function r(i,s,a,l,c,d){if(c?.throwIfAborted(),!e.prepareQuotaRequest)throw new v("UNSUPPORTED","This provider cannot guarantee per-request token bounds.");let u=M(d?.attemptId),p=(0,dt.createHash)("sha256").update(JSON.stringify([e.id,i,s,a,d?.systemPrompt??""])).digest("hex"),f=(0,dt.createHash)("sha256").update(JSON.stringify([D(o),e.id,u])).digest("hex"),g=async(T,E,I=c,N=3e4)=>{try{return await Zt(E,I,N)}catch(Q){throw en(Q)?Q:T==="prepare"&&Q instanceof k&&Q.category==="unsupported_capability"?new v("UNSUPPORTED","This provider cannot enforce the requested per-request token ceiling."):new Me(T,f,Q)}},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 v("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 P=await R.execute(l,c);if(c?.throwIfAborted(),P.usageReported){let T=_(P.inputTokens),E=_(P.outputTokens);if(T>R.inputTokensUpperBound||E>R.outputTokensUpperBound)throw new v("CORRUPT","Provider exceeded its guaranteed token bound; reservation requires reconciliation.");await g("settle",()=>t.settle(f,_(T+E)))}return P}return{id:e.id,...e.model?{model:e.model}:{},...e.capabilities?{capabilities:e.capabilities}:{},complete:r,completeLocal:r}}var Lo={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 sn(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=W(e.baseURL??t,{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname});return n.pathname=n.pathname.replace(/\/$/,""),n}function F(e,t){let n=new URL(e.toString());return n.pathname=`${n.pathname.replace(/\/$/,"")}/${t.replace(/^\//,"")}`,n}function ut(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 Io(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 H("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={...Lo[e.kind],streaming:!!e.streaming,reasoningMetadata:e.kind==="anthropic"&&!!e.streaming};return{...t,vision:t.imageInput}}function be(e,t){return{providerId:t,endpointPolicy:{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},limits:e.transportLimits}}function an(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 we(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 ln(e){return e.filter(t=>t?.type==="image_url")}function cn(e){return e.some(t=>Array.isArray(t.content)&&t.content.some(n=>n.type==="image_url"||n.type==="tool_result"&&we(n).length>0))}function tn(e){let t=an(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 Oo(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[tn(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=we(n),r=[{type:"text",text:me(n.content)}];return r.push(...o.map(tn)),[{type:"tool_result",tool_use_id:n.tool_use_id,content:r,is_error:n.is_error}]})}))}function Mo(e){return{type:"input_image",image_url:e.image_url.url,detail:e.image_url.detail??"auto"}}function $o(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=[...
|
|
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:me(a.content)});let s=[...ln(o.content),...o.content.flatMap(a=>a.type==="tool_result"?we(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 rn(e,t,n,o,r,i){return{model:e,messages:dn(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 Do(e){return e.map(t=>({name:t.name,description:t.description,parameters:t.input_schema}))}function ve(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 De(e,t,n){return{content:e,stopReason:t,...ve(n)}}function V(e,t,n){if(t&&typeof t=="object"&&!Array.isArray(t))return t;if(typeof t!="string")throw w(e,`${n} arguments must be JSON`);try{let 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 w(e,`${n} contains malformed tool arguments`,o)}}function qo(e,t){if(!Array.isArray(t.content))throw w(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 w(e,"tool_use is missing id or name");return[{type:"tool_use",id:String(r.id),name:String(r.name),input:V(e,r.input??{},"tool_use")}]}return[]}),o=t.stop_reason==="tool_use"?"tool_use":t.stop_reason==="max_tokens"?"max_tokens":"end_turn";return De(n,o,t.usage??{})}function Uo(e,t){if(!Array.isArray(t.output))throw w(e,"output must be an array");let n=[];for(let i of t.output)if(i.type==="message"){if(!Array.isArray(i.content))throw w(e,"message content must be an array");for(let s of i.content)s.type==="output_text"&&typeof s.text=="string"&&n.push({type:"text",text:s.text})}else if(i.type==="function_call"){if(!i.call_id&&!i.id)throw w(e,"function_call is missing an id");if(!i.name)throw w(e,"function_call is missing a name");n.push({type:"tool_use",id:String(i.call_id??i.id),name:String(i.name),input:V(e,i.arguments??"{}","function_call")})}let o=n.some(i=>i.type==="tool_use"),r=t.status==="incomplete"&&t.incomplete_details?.reason==="max_output_tokens";return De(n,o?"tool_use":r?"max_tokens":"end_turn",t.usage??{})}function jo(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"}):w(e,"candidates must contain at least one item")}let n=t.candidates[0]??{};if(!Array.isArray(n.content?.parts))throw w(e,"candidate parts must be an array");let 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 w(e,"functionCall is missing a name");return[{type:"tool_use",id:String(l.id??`gemini-${a}-${(0,Ne.randomUUID)().slice(0,8)}`),name:String(l.name),input:V(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 De(o,r?"tool_use":i?"max_tokens":"end_turn",t.usageMetadata??{})}function un(e,t){if(!Array.isArray(t.choices)||t.choices.length===0)throw w(e,"choices must contain an item");let n=t.choices[0]??{},o=n.message;if(!o||typeof o!="object")throw w(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 w(e,"tool call is missing id or name");r.push({type:"tool_use",id:String(s.id),name:String(s.function.name),input:V(e,s.function.arguments??"{}","tool call")})}let i=n.finish_reason==="length"?"max_tokens":r.some(s=>s.type==="tool_use")?"tool_use":"end_turn";return De(r,i,t.usage??{})}async function x(e,t){try{await e?.onEvent?.(t)}catch{}}async function pn(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 qe(){return{content:[],inputTokens:0,outputTokens:0,usageReported:!1,stopReason:"end_turn",terminal:!1}}function Ue(e,t){if(!t.terminal)throw w(e,"stream ended without a terminal event");return{content:t.content,stopReason:t.stopReason,usageReported:t.usageReported,inputTokens:t.inputTokens,outputTokens:t.outputTokens}}function je(e,t){try{let n=JSON.parse(t.data);if(!n||typeof n!="object"||Array.isArray(n))throw new Error("frame is not an object");return n}catch(n){throw w(e,`invalid stream JSON for ${t.event}`,n)}}async function Jo(e){let t=qe(),n=new Map;return await ye(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},be(e.config,e.providerId),async o=>{let r=je(e.providerId,o),i=String(r.type??o.event);if(i==="message_start"){let s=ve(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 w(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=V(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 w(e.providerId,String(r.error?.message??"stream error"))}),Ue(e.providerId,t)}async function Xo(e){let t=qe(),n=new Map;return await ye(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},be(e.config,e.providerId),async o=>{if(o.data==="[DONE]")return;let r=je(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 w(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=V(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=ve(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 w(e.providerId,String(r.response?.error?.message??r.error?.message??"stream failed"))}),Ue(e.providerId,t)}async function Vo(e){let t=qe(),n=new Map;await x(e.context,{type:"message.started"}),await ye(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0,stream_options:{include_usage:!0}}),signal:e.signal},be(e.config,e.providerId),async o=>{if(o.data==="[DONE]"){t.terminal=!0;return}let r=je(e.providerId,o);if(r.usage){let i=ve(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=V(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}),Ue(e.providerId,t)}async function Bo(e){let t=qe(),n=0;return await x(e.context,{type:"message.started"}),await ye(e.url,{method:"POST",headers:e.headers,body:JSON.stringify(e.body),signal:e.signal},be(e.config,e.providerId),async o=>{let r=je(e.providerId,o);if(r.usageMetadata){let s=ve(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}-${(0,Ne.randomUUID)().slice(0,8)}`),c=String(a.name??""),d=V(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}))}),Ue(e.providerId,t)}function mn(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 $e(e){if(e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw w("direct-provider","maxTokens must be a positive safe integer");let t=`direct-${e.kind}`,n=sn(e);if(e.xenoPromptTokenCeiling!==void 0&&(!Number.isSafeInteger(e.xenoPromptTokenCeiling)||e.xenoPromptTokenCeiling<0||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw w(t,"XENO prompt token ceilings require a nonnegative limit and an explicit loopback xeno-rt endpoint");let o=Io(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 H(t,"tools");if(cn(l)&&!o.imageInput)throw H(t,"image input");let f=e.kind==="openai-compatible"?"openai-chat":e.kind,g=Z(c,f).map(({definition:h})=>h),y,m={"content-type":"application/json"},R;try{if(e.kind==="anthropic"){if(y=F(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:Oo(l),tools:g.map(T=>({name:T.name,description:T.description,input_schema:T.input_schema}))},e.streaming)return await Jo({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=F(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:No(l),tools:g.length>0?[{functionDeclarations:Do(g)}]:void 0,generationConfig:{maxOutputTokens:e.maxTokens??8192}},e.streaming)return await Bo({providerId:t,url:y,headers:m,body:R,config:e,signal:u,onText:d,context:p})}else if(e.kind==="openai-compatible"){if(y=F(n,e.chatCompletionsPath??"/v1/chat/completions"),m={...m,...ut(e)},R=rn(a,l,g,p,e.maxTokens??8192,e.xenoPromptTokenCeiling),e.streaming)return await Vo({providerId:t,url:y,headers:m,body:R,config:e,signal:u,onText:d,context:p})}else if(y=F(n,"/v1/responses"),m={...m,authorization:`Bearer ${e.apiKey}`},R={...nn(a,l,g,p),max_output_tokens:e.maxTokens??8192,store:!1},e.streaming)return await Xo({providerId:t,url:y,headers:m,body:R,config:e,signal:u,onText:d,context:p});let h=await ie(y,{method:"POST",headers:m,body:JSON.stringify(R),signal:u},i),P=e.kind==="anthropic"?qo(t,h):e.kind==="google"?jo(t,h):e.kind==="openai-compatible"?un(t,h):Uo(t,h);return await pn(P,d,p),P}catch(h){throw h instanceof k&&h.category==="cancelled"?await x(p,{type:"provider.cancelled"}):(await x(p,mn(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 ie(F(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 H(t,"XENO prompt token ceiling and exact count");let f=structuredClone(l),g=structuredClone(c),y=d?{...d}:void 0,m=Z(g,"openai-chat").map(({definition:N})=>N),R=rn(a,f,m,y,e.maxTokens??8192),h=await ie(F(n,"/v1/runtime/chat/prompt-tokens"),{method:"POST",headers:{"content-type":"application/json",...ut(e)},body:JSON.stringify(R),signal:u},{...i,limits:{...e.transportLimits,connectTimeoutMs:9e4,totalTimeoutMs:12e4,maxResponseBytes:16384}}),P=h.prompt_tokens;if(h.object!=="runtime.chat.prompt_tokens"||typeof P!="number"||!Number.isSafeInteger(P)||P<0)throw w(t,"xeno-rt returned an invalid exact prompt token count");if(P>e.xenoPromptTokenCeiling)throw new v("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 v("INVALID","Remaining quota must be a nonnegative safe integer.");let E=Math.min(e.maxTokens??8192,T===void 0?Number.MAX_SAFE_INTEGER:T-P);if(E<1)throw new v("EXCEEDED","Goal token allowance cannot admit the exact prompt and one output token.");let I=$e({...e,maxTokens:E,xenoPromptTokenCeiling:P});return{basis:"provider-enforced",inputTokensUpperBound:P,outputTokensUpperBound:E,execute:(N,Q)=>I.complete(a,f,g,N,Q,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=Z(f,"openai-responses").map(({definition:I})=>I),m=nn(a,p,y,g);if(m.input.some(I=>Array.isArray(I.content)&&I.content.some(N=>N.type==="input_image"&&typeof N.image_url=="string"&&!N.image_url.startsWith("data:"))))throw new v("UNSUPPORTED","A mutable remote image URL cannot guarantee the counted Responses input at dispatch.");let R=await ie(F(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 w(t,"OpenAI Responses returned an invalid exact input token count");let P=g?.quotaRemainingTokens;if(P!==void 0&&(!Number.isSafeInteger(P)||P<0))throw new v("INVALID","Remaining quota must be a nonnegative safe integer.");let T=Math.min(e.maxTokens??8192,P===void 0?Number.MAX_SAFE_INTEGER:P-h);if(T<1)throw new v("EXCEEDED","Goal token allowance cannot admit the exact Responses input and one output token.");let E=$e({...e,maxTokens:T});return{basis:"provider-enforced",inputTokensUpperBound:h,outputTokensUpperBound:T,execute:(I,N)=>E.complete(a,p,f,I,N,g)}}),s}function fn(e){let t="direct-ollama-native";if(e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw w(t,"maxTokens must be a positive safe integer");let n={...e,kind:"openai-compatible"},o=sn(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(cn(i))throw H(t,"image input");try{let d=Z(s,"openai-chat").map(({definition:y})=>y),u=dn(i,c?.systemPrompt).map(y=>({...y,content:y.content??"",...y.tool_calls?{tool_calls:y.tool_calls.map(m=>({...m,function:{...m.function,arguments:V(t,m.function.arguments,"tool call")}}))}:{}})),p=await ie(F(o,"/api/chat"),{method:"POST",signal:l,headers:{"content-type":"application/json",...ut(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}}))})},be(n,t));if(p.done!==!0||!p.message||typeof p.message!="object")throw w(t,"native completion is missing its terminal message");let f=p.message,g=un(t,{choices:[{message:{...f,...Array.isArray(f.tool_calls)?{tool_calls:f.tool_calls.map(y=>({...y,id:y.id??(0,Ne.randomUUID)()}))}:{}},finish_reason:p.done_reason==="length"?"length":"stop"}],usage:p});return await pn(g,a,c),g}catch(d){throw await x(c,d instanceof k&&d.category==="cancelled"?{type:"provider.cancelled"}:mn(d)),d}}}}function pt(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 mt=1,ee={streaming:!0,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!0,usageAccounting:!0,promptCaching:!1,modelDiscovery:!0},Je={...ee,reasoningMetadata:!1},gn=[j("xeno","XENO hosted","xeno","openai-compatible","https://api.xenostudio.ai","public-https","bearer-env","XENO_API_KEY","/v1/models",ee),j("openai","OpenAI","direct","openai-responses","https://api.openai.com","public-https","bearer-env","OPENAI_API_KEY","/v1/models",ee),j("anthropic","Anthropic","direct","anthropic","https://api.anthropic.com","public-https","header-env","ANTHROPIC_API_KEY","/v1/models",{...ee,structuredOutput:!1}),j("google","Google AI Studio","direct","google","https://generativelanguage.googleapis.com","public-https","header-env","GOOGLE_API_KEY","/v1beta/models",ee),j("openrouter","OpenRouter","gateway","openai-compatible","https://openrouter.ai/api","public-https","bearer-env","OPENROUTER_API_KEY","/v1/models",Je),j("xeno-rt","xeno-rt","local","openai-compatible","http://127.0.0.1:3338","local-network","none",void 0,"/v1/models",Je,["running xeno-rt endpoint"]),j("ollama","Ollama","local","openai-compatible","http://127.0.0.1:11434","local-network","none",void 0,"/v1/models",Je,["Ollama OpenAI compatibility endpoint"]),j("azure-openai","Azure OpenAI","cloud","openai-compatible",void 0,"public-https","header-env","AZURE_OPENAI_API_KEY",void 0,Je,["resource endpoint","deployment","API version","host adapter for deployment-shaped requests"]),j("aws-bedrock","Amazon Bedrock","cloud","aws-bedrock",void 0,"public-https","cloud-chain",void 0,void 0,{...ee,modelDiscovery:!1},["AWS credential chain","region","Bedrock host adapter"]),j("vertex-ai","Google Vertex AI","cloud","vertex-ai",void 0,"public-https","cloud-chain",void 0,void 0,{...ee,modelDiscovery:!1},["Google application-default credentials","project","region","Vertex host adapter"])],de=class{presets=new Map;constructor(t=gn){for(let n of t)this.add(n)}add(t){er(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=yn(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:tr(t),preset:o,...i?{endpoint:i}:{},...s?{secretRef:s}:{},readiness:a,blockers:r}}};async function Ho(e){let n=(e.catalog??new de).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:ce([...s.errors,`Credential reference ${n.secretRef??"(missing)"} did not resolve`])};if(!n.preset.discoveryPath)return{...s,readiness:"ready",errors:ce(s.errors)};let a=W(n.endpoint,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts});try{await Te(a,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts,resolveHostname:e.resolveHostname})}catch(u){return{...s,readiness:"blocked",errors:ce([...s.errors,u instanceof Error?u.message:String(u)])}}let l=Qo(a,n.preset.discoveryPath),c=Fo(n.preset,r),d=Date.now();try{let{response:u,text:p}=await Wo(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:ce([...s.errors,`Provider discovery returned HTTP ${u.status}`])};let y=JSON.parse(p);return{...s,readiness:"ready",reachable:!0,authenticated:g,latencyMs:f,models:Go(y),errors:ce(s.errors)}}catch(u){return{...s,readiness:"blocked",latencyMs:Date.now()-d,errors:ce([...s.errors,nr(u)])}}}function zo(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)||!Yo({...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 Ko(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=Zo(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??ft(e.preset.id),prefix:e.preset.auth.prefix}}:{},...e.preset.auth.mode==="none"?{authentication:{type:"none"}}:{}}}function j(e,t,n,o,r,i,s,a,l,c,d=[]){return{schemaVersion:mt,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:ft(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 ft(e){return e==="anthropic"?"x-api-key":e==="google"?"x-goog-api-key":e==="azure-openai"?"api-key":"authorization"}function Fo(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??ft(e.id)]:`${e.auth.prefix??""}${t}`}:{accept:"application/json"}}function yn(e,t){return e?W(e.trim().replace(/\/+$/,""),{profile:t.endpointProfile,allowedHosts:t.allowedHosts}).toString().replace(/\/$/,""):void 0}function Qo(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 Wo(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,P)=>{f+=Buffer.byteLength(P)+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 Go(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||pt(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 Yo(e,t){return t?Object.entries(t).every(([n,o])=>o!==!0||e[n]===!0):!0}function Zo(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 er(e){if(e.schemaVersion!==mt||!/^[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&&yn(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 tr(e){let t=e.id.trim();if(!t||t.length>120||pt(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 ce(e){return[...new Set(e)]}function nr(e){return(e instanceof Error?e.message:String(e)).replace(/(Bearer\s+)[A-Za-z0-9._~+/=-]+/gi,"$1[redacted]").replace(/([?&#](?:token|key|secret|password|api[_-]?key)=)[^&#\s]+/gi,"$1[redacted]").slice(0,500)}var wt=require("node:crypto"),$=require("node:fs/promises"),te=require("node:path");function Xe(e){return JSON.stringify(gt(e,new Set))}function gt(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=>gt(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]=gt(r,t)}return t.delete(e),n}var B=require("node:fs"),yt=require("node:os"),bn=require("node:path");function or(){return new Date().toISOString()}function rr(){return new Date(Date.now()-Math.floor(process.uptime()*1e3)).toISOString()}function wn(e){try{return JSON.parse((0,B.readFileSync)(e,"utf8"))}catch{return null}}function ir(e){if(!e||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function sr(e){return e.hostname!==(0,yt.hostname)()?!0:ir(e.pid)}function hn(e,t){(0,B.mkdirSync)((0,bn.dirname)(e),{recursive:!0}),(0,B.writeFileSync)(e,JSON.stringify(t,null,2)+`
|
|
10
|
-
`,{encoding:"utf8",flag:"wx"})}function
|
|
11
|
-
`),i}finally{n.release()}}};function lr(e){return Pn({schemaVersion:Ve,generation:0,updatedAt:e.toISOString(),connections:[],routingPolicy:{}})}function ht(e,t,n,o){return Pn({schemaVersion:Ve,generation:e.generation+1,updatedAt:o.toISOString(),connections:[...t].sort((r,i)=>r.id.localeCompare(i.id)),routingPolicy:n})}function Pn(e){return{...e,checksum:{algorithm:"sha256",value:(0,wt.createHash)("sha256").update(Rn(e)).digest("hex")}}}function cr(e,t){if(e.schemaVersion!==Ve||!Array.isArray(e.connections))throw new Error("Invalid provider connection snapshot");let{checksum:n,...o}=e;if(n?.algorithm!=="sha256"||n.value!==(0,wt.createHash)("sha256").update(Rn(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(xn(s),r.has(s.id))throw new Error(`Duplicate provider connection: ${s.id}`);r.add(s.id)}kn(e.routingPolicy)}function xn(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 kn(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 dr(e,t){await(0,$.mkdir)((0,te.dirname)(e),{recursive:!0,mode:448});let n=`${e}.${process.pid}.${Date.now()}.tmp`,o;try{o=await(0,$.open)(n,"wx",384),await o.writeFile(t,"utf8"),await o.sync(),await o.close(),o=void 0,await(0,$.rename)(n,e),await(0,$.chmod)(e,384).catch(()=>{})}finally{o&&await o.close().catch(()=>{}),await(0,$.unlink)(n).catch(()=>{})}}function Rn(e){return Xe(e)}var He=require("node:crypto"),L=require("node:fs/promises"),pe=require("node:path");var Be=e=>(0,He.createHash)("sha256").update(Xe(e)).digest("hex"),ue=e=>new Date(e).toISOString().slice(0,10);function Tn(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 Cn(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 vt(e,t){return le(e).some(n=>D(n)===D(t))}function ne(e){return e.reduce((t,n)=>_(t+n),0)}var Pt=class{constructor(t,n=Date.now,o=1e5){this.now=n;this.maximumEntries=o;this.directory=(0,pe.resolve)(t),_(o)}now;maximumEntries;directory;async policy(t){return(await this.load()).policies.get(D(t))??null}async setPolicy(t,n,o){let r={scope:U(t),limits:Cn(n),revision:_(o)+1};return await this.append(()=>({kind:"policy",policy:r,expectedRevision:o})),r}async reservation(t){return(await this.load()).reservations.get(M(t))??null}async reserve(t){let n={id:M(t.id),scope:U(t.scope),requestHash:M(t.requestHash),reservedTokens:_(t.reservedTokens)};return await this.append((o,r)=>{let i=o.reservations.get(n.id);if(i){if(Be([i.scope,i.requestHash,i.reservedTokens])!==Be([n.scope,n.requestHash,n.reservedTokens]))throw new v("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:M(t)}))}async void(t){await this.append(n=>n.reservations.get(t)?.state==="void"?null:{kind:"void",id:M(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:M(t),actualTokens:n}})}async snapshot(t){let n=await this.load(),o=_(this.now()),r=U(t);if(o<n.at)throw new v("CLOCK_ROLLBACK","Quota clock moved backwards.");let i=[...n.reservations.values()].filter(a=>vt(a.scope,r)),s=i.filter(a=>ue(a.admittedAt)===ue(o));return{authority:"local-file",policies:le(r).flatMap(a=>n.policies.get(D(a))?[n.policies.get(D(a))]:[]),heldTokens:ne(s.filter(a=>a.state==="reserved"||a.state==="dispatched").map(a=>a.reservedTokens)),usedTokens:ne(s.filter(a=>a.state==="settled").map(a=>a.actualTokens)),lifetimeHeldTokens:ne(i.filter(a=>a.state==="reserved"||a.state==="dispatched").map(a=>a.reservedTokens)),lifetimeUsedTokens:ne(i.filter(a=>a.state==="settled").map(a=>a.actualTokens)),requestsInLastMinute:i.filter(a=>a.state!=="void"&&a.admittedAt>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 v("CLOCK_ROLLBACK","Quota clock moved backwards.");let r=null;for(let i of le(t)){let s=n.policies.get(D(i));if(!s)continue;let a=[...n.reservations.values()].filter(u=>vt(u.scope,i)&&u.state!=="void"),l=u=>ne(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=>ue(u.admittedAt)===ue(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=D(s.scope);if((t.policies.get(a)?.revision??0)!==n.expectedRevision||s.revision!==n.expectedRevision+1)throw new v("CONFLICT","Quota policy revision changed.");t.policies.set(a,{scope:U(s.scope),revision:_(s.revision),limits:Cn(s.limits)});return}if(n.kind==="reserve"){let s=n.reservation;if(M(s.id),M(s.requestHash),U(s.scope),_(s.reservedTokens),s.state!=="reserved"||s.admittedAt!==o||t.reservations.has(s.id))throw new v("CORRUPT","Invalid reservation record.");for(let a of r?le(s.scope):[]){let l=t.policies.get(D(a));if(!l)continue;let c=[...t.reservations.values()].filter(u=>vt(u.scope,a)&&u.state!=="void");if(l.limits.requestsPerMinute!==null&&c.filter(u=>u.admittedAt>o-6e4).length>=l.limits.requestsPerMinute)throw new v("EXCEEDED","Ancestor request rate limit reached.");let d=ne(c.filter(u=>ue(u.admittedAt)===ue(o)).map(u=>u.state==="settled"?u.actualTokens:u.reservedTokens));if(l.limits.tokensPerDay!==null&&_(d+s.reservedTokens)>l.limits.tokensPerDay)throw new v("EXCEEDED","Ancestor daily token limit reached.");if(l.limits.tokensLifetime!==void 0&&l.limits.tokensLifetime!==null){let u=ne(c.map(p=>p.state==="settled"?p.actualTokens:p.reservedTokens));if(_(u+s.reservedTokens)>l.limits.tokensLifetime)throw new v("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 v("CONFLICT","Reservation does not exist.");if(n.kind==="dispatch"||n.kind==="void"){if(i.state!=="reserved")throw new v("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 v("CONFLICT","Invalid reservation settlement.");i.state="settled",i.actualTokens=n.actualTokens}else throw new v("CORRUPT","Unknown quota journal operation.")}async load(){let t={sequence:0,hash:"",at:0,policies:new Map,reservations:new Map},n;try{n=await(0,L.readdir)(this.directory)}catch(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 v("CAPACITY","Quota journal requires archival maintenance.");for(let r of o){if(r!==`${String(t.sequence+1).padStart(12,"0")}.quota`)throw new v("CORRUPT","Quota journal sequence is incomplete.");let i=(0,pe.join)(this.directory,r),s=await(0,L.lstat)(i);if(!s.isFile()||s.isSymbolicLink()||s.size>16384)throw new v("CORRUPT","Invalid quota record file.");let a=await(0,L.open)(i,"r"),l;try{let u=Buffer.alloc(16385),p=await a.read(u,0,u.length,0);if(p.bytesRead>16384)throw new v("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!==Be(d)||_(l.at)<t.at)throw new v("CORRUPT","Quota journal integrity failed.");if(l.version===1&&Tn(l.operation))throw new v("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(0,L.mkdir)(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 v("CLOCK_ROLLBACK","Quota clock moved backwards.");let i=t(o,r);if(!i)return;if(o.sequence>=this.maximumEntries)throw new v("CAPACITY","Quota journal requires archival maintenance.");this.apply(o,i,r);let a={version:Tn(i)?2:1,sequence:o.sequence+1,previousHash:o.hash,at:r,operation:i},l=JSON.stringify({...a,hash:Be(a)});if(Buffer.byteLength(l)>16384)throw new v("CAPACITY","Quota record exceeds its bound.");let c=(0,pe.join)(this.directory,`${(0,He.randomUUID)()}.tmp`),d=(0,pe.join)(this.directory,`${String(a.sequence).padStart(12,"0")}.quota`),u=await(0,L.open)(c,"wx",384);try{await u.writeFile(l),await u.sync()}catch(p){throw await u.close(),await(0,L.unlink)(c).catch(()=>{}),p}await u.close();try{if(await(0,L.link)(c,d),process.platform!=="win32"){let p=await(0,L.open)(this.directory,"r");try{await p.sync()}finally{await p.close()}}return}catch(p){if(p.code!=="EEXIST")throw p}finally{await(0,L.unlink)(c).catch(()=>{})}}throw new v("CONFLICT","Quota admission contention exceeded the retry bound.")}};0&&(module.exports={BUILT_IN_XENO_PROVIDER_PRESETS,DualLLMProvider,FileQuotaAuthority,FileXenoProviderConnectionStore,ProviderError,QuotaAcknowledgementError,QuotaError,ToolSchemaProjectionError,XENO_PROVIDER_CATALOG_SCHEMA_VERSION,XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION,XenoProviderCatalog,assertDirectEndpointResolution,classifyProviderHttpError,createDirectProvider,createOllamaNativeProvider,createQuotaGovernedProvider,directProviderConfigFromConnection,isQuotaControlError,normalizeQuotaScope,parseRetryAfter,probeXenoProvider,projectToolDefinitionsForProvider,projectToolSchemaForProvider,providerCapabilityError,providerProtocolError,quotaAncestors,quotaInteger,quotaScopeKey,quotaText,selectXenoProviderRoute,validateDirectEndpoint});
|
|
5
|
+
`).trim()}function me(e){return typeof e=="string"?e:jn(e)}var Ce=require("node:perf_hooks");var Un=1;var Jn=12,Xn=128,Vn=/^xeno\.[a-z0-9]+(?:[._][a-z0-9]+)*$/u,Bn=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/u,Hn=/(?:[\\/]|@|https?:|bearer|token|secret|password|credential|api[_-]?key|[0-9a-f]{8}-[0-9a-f-]{27,})/iu,zn=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"]),Rt=new Set,Tt=new Map;function Kn(e){let t=e.trim().toLowerCase();return!t||t.length>64||Hn.test(t)||!Bn.test(t)?null:t}function Fn(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=Kn(t);if(!n)return null;let o=Tt.get(e);return o||(o=new Set,Tt.set(e,o)),!o.has(n)&&o.size>=Xn?"other":(o.add(n),n)}function Qn(e={}){let t={};for(let[n,o]of Object.entries(e)){if(Object.keys(t).length>=Jn)break;if(!zn.has(n))continue;let r=Fn(n,o);r!==null&&(t[n]=r)}return Object.freeze(t)}function Ct(e){if(Rt.size===0||!Vn.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:Un,kind:e.kind,name:e.name,value:Math.min(t,Number.MAX_SAFE_INTEGER),timestamp:(e.timestamp??new Date).toISOString(),attributes:Qn(e.attributes)});for(let o of Rt)try{o(n)}catch{}}function te(e,t=1,n){Ct({kind:"counter",name:e,value:t,attributes:n})}function Ke(e,t,n){Ct({kind:"histogram",name:e,value:t,attributes:n})}var At=require("node:dns/promises"),pe=require("node:net");var Wn=["context length","context window","maximum context","too many tokens","request too large"];function _t(e){let t=e.toLowerCase();return Wn.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 xe(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 Yn(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 Fe(e,t){return t.some(n=>e.includes(n))}function ke(e){let t=Yn(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"}):Fe(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}):_t(n)?new P(`Provider context window exceeded${o}`,{...r,category:"context_overflow",code:"PROVIDER_CONTEXT_OVERFLOW"}):Fe(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||Fe(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 b(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 te("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 Lt=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 Gn(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 St(e){let t=Gn(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 Re(e){let t=e.toLowerCase().replace(/^\[|\]$/g,"").split("%")[0];(0,pe.isIP)(t)===6&&(t=new URL(`http://[${t}]`).hostname.slice(1,-1));let n=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(t);if(n){let o=Number.parseInt(n[1],16),r=Number.parseInt(n[2],16);return`${o>>8}.${o&255}.${r>>8}.${r&255}`}return t}function It(e){let t=Re(e);return(0,pe.isIP)(t)===4?St(t):t==="::"||t==="::0"?"unspecified":t==="::1"?"loopback":t.startsWith("::ffff:")?St(t.slice(7)):/^f[cd]/.test(t)?"private":/^fe[89ab]/.test(t)?"link-local":"public"}function Et(e){return e==="example"||e.endsWith(".example")||e==="test"||e.endsWith(".test")||e==="invalid"||e.endsWith(".invalid")}function Zn(e){return e==="localhost"||e.endsWith(".localhost")}function K(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(Lt.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=(0,pe.isIP)(r)?It(r):null;if(i==="link-local"||i==="unspecified")throw E(`${i} destinations are forbidden`);if(o==="public-https"&&(i==="private"||i==="loopback"||Zn(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 Te(e,t={}){await Qe(e,t)}async function Qe(e,t={}){let n=e.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Lt.has(n))throw E("cloud metadata destinations are forbidden");let o=new Set((t.allowedHosts??[]).map(s=>s.toLowerCase())),r=(0,pe.isIP)(n)?[n]:Et(n)?[]:t.resolveHostname?await t.resolveHostname(n):(await(0,At.lookup)(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!r.length&&!Et(n))throw E("DNS resolution returned no addresses");let i=t.profile??"public-https";for(let s of r){let a=It(s);if(a==="link-local"||a==="unspecified")throw 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}var Ot=require("node:http"),Mt=require("node:https"),We=require("node:net"),$t=require("node:events");function Nt(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||!(0,We.isIP)(a)||new URL(n.origin).origin!==e.origin)return queueMicrotask(()=>s(new Error("Provider connection has no authorized pinned address"))),!0;let l=n.headers??{},c=(e.protocol==="https:"?Mt.request:Ot.request)(new URL(n.path,e.origin),{method:n.method,headers:l,agent:!1,rejectUnauthorized:!0,lookup:(d,u,m)=>{let f={address:a,family:(0,We.isIP)(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||Re(d.remoteAddress)!==Re(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(0,$t.once)(c,"drain")}c.end()}}catch(d){c.destroy(d instanceof Error?d:new Error("Provider request body failed"))}})(),!0}}}var ne={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function eo(e={}){for(let[t,n]of Object.entries(e))if(n!==void 0&&(!Number.isSafeInteger(n)||n<1))throw b("provider-transport",`${t} must be a positive safe integer`);return{connectTimeoutMs:Math.max(100,e.connectTimeoutMs??ne.connectTimeoutMs),totalTimeoutMs:Math.max(100,e.totalTimeoutMs??ne.totalTimeoutMs),idleTimeoutMs:Math.max(100,e.idleTimeoutMs??ne.idleTimeoutMs),maxResponseBytes:Math.max(1024,e.maxResponseBytes??ne.maxResponseBytes),maxHeaderBytes:Math.max(1024,e.maxHeaderBytes??ne.maxHeaderBytes),maxEventBytes:Math.max(1024,e.maxEventBytes??ne.maxEventBytes)}}async function fe(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 _e(e,t,n,o){try{return e.decode(t,{stream:n})}catch{throw b(o,"response is not valid UTF-8")}}function Ye(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 to(e){let t=0;return e.forEach((n,o)=>{t+=Buffer.byteLength(o)+Buffer.byteLength(n)+4}),t}async function Dt(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 fe(r.read(),o.signal);if(u)break;if(c(),s+=d.byteLength,s>n.maxResponseBytes)throw b(t,`response exceeded ${n.maxResponseBytes} bytes`);a+=_e(i,d,!0,t)}return a+=_e(i,void 0,!1,t),a}finally{l&&clearTimeout(l),r.cancel().catch(()=>{}),r.releaseLock()}}async function qt(e,t,n,o){let r=Ce.performance.now(),i=eo(n.limits);te("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 Ye(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 fe(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:Nt(e,f)},y=fetch(e,g);y.then(k=>{s.signal.aborted&&k.body?.cancel().catch(()=>{})},()=>{});let p=await fe(y,s.signal);if(m=p,clearTimeout(u),to(p.headers)>i.maxHeaderBytes)throw b(n.providerId,`response headers exceeded ${i.maxHeaderBytes} bytes`);if(p.redirected||p.status>=300&&p.status<400)throw new 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 b(n.providerId,`response exceeded ${i.maxResponseBytes} bytes`);if(!p.ok){let k=await Dt(p,n.providerId,i,s),R=k;try{R=k?JSON.parse(k):{}}catch{}throw ke({providerId:n.providerId,statusCode:p.status,body:R,retryAfterMs:xe(p.headers.get("retry-after")),requestId:p.headers.get("request-id")??p.headers.get("x-request-id")??void 0})}let v=await fe(o(p,s,i),s.signal);return te("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),Ke("xeno.provider.request_duration_ms",Ce.performance.now()-r,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),v}catch(f){let g;throw f instanceof P?g=f:l?.aborted||s.signal.reason==="caller"?g=Ye(n.providerId,"cancelled",f):a||s.signal.reason==="idle-timeout"?g=Ye(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(()=>{}),te("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:g.category,error_code:g.code}),Ke("xeno.provider.request_duration_ms",Ce.performance.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 ge(e,t,n){return qt(e,t,n,async(o,r,i)=>{let s=await Dt(o,n.providerId,i,r),a;try{a=s?JSON.parse(s):{}}catch(l){throw b(n.providerId,"body is not valid JSON",l)}if(!a||typeof a!="object"||Array.isArray(a))throw b(n.providerId,"JSON body must be an object");return a})}async function ye(e,t,n,o){return qt(e,t,n,async(r,i,s)=>{if(!r.body)throw b(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 b(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 fe(a.read(),i.signal);if(T)break;if(g(),d+=p.byteLength,d>s.maxResponseBytes)throw b(n.providerId,`stream exceeded ${s.maxResponseBytes} bytes`);for(c+=_e(l,p,!0,n.providerId);;){let v=c.indexOf(`
|
|
7
|
+
`);if(v<0)break;let k=c.slice(0,v).replace(/\r$/,"");if(c=c.slice(v+1),!k)await y();else if(!k.startsWith(":")){let R=k.indexOf(":"),L=R<0?k:k.slice(0,R),ee=R<0?"":k.slice(R+1).replace(/^ /,"");L==="event"?u=ee:L==="data"&&m.push(ee)}}}if(c+=_e(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()}})}var Gt=require("node:crypto");var Ze=require("node:net"),Ie=class extends Error{issues;constructor(t){super(`Invalid JSON Schema: ${t.map(n=>`${n.path||"#"} ${n.message}`).join("; ")}`),this.name="JsonSchemaCompilationError",this.issues=t}},et="https://json-schema.org/draft/2020-12/schema",no=new Set(["string","number","integer","boolean","array","object","null"]),oo=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"]),Xt=new Map([["date",e=>zt(e)],["date-time",e=>ko(e)],["time",e=>Kt(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=>jt(e)],["idn-email",e=>jt(e)],["hostname",e=>nt(e)],["idn-hostname",e=>nt(e)],["ipv4",e=>(0,Ze.isIP)(e)===4],["ipv6",e=>(0,Ze.isIP)(e)===6],["uuid",e=>/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(e)],["uri",e=>Ut(e)],["iri",e=>Ut(e)],["uri-reference",e=>Jt(e)],["iri-reference",e=>Jt(e)],["uri-template",e=>Ro(e)],["json-pointer",e=>/^(?:\/(?:[^~/]|~[01])*)*$/u.test(e)],["relative-json-pointer",e=>/^(?:0|[1-9]\d*)(?:#|(?:\/(?:[^~/]|~[01])*)*)$/u.test(e)],["regex",(e,t)=>rt(e,t.maxPatternLength)!==void 0]]);function ro(e={}){return{strictKeywords:e.strictKeywords??!0,assertFormats:e.assertFormats??!1,maxSchemaDepth:B(e.maxSchemaDepth,64,1,256,"maxSchemaDepth"),maxSchemaNodes:B(e.maxSchemaNodes,4096,1,1e5,"maxSchemaNodes"),maxReferences:B(e.maxReferences,512,0,1e4,"maxReferences"),maxPatternLength:B(e.maxPatternLength,256,1,4096,"maxPatternLength"),maxValidationDepth:B(e.maxValidationDepth,128,1,1024,"maxValidationDepth"),maxValidationSteps:B(e.maxValidationSteps,1e5,100,1e7,"maxValidationSteps"),maxValidationErrors:B(e.maxValidationErrors,64,1,1024,"maxValidationErrors"),maxInputBytes:B(e.maxInputBytes,16*1024*1024,1024,256*1024*1024,"maxInputBytes")}}function B(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 io(e,t={}){let n={root:e,options:ro(t),issues:[],rawByPointer:new Map,anchors:new Map,compiledByPointer:new Map,schemaNodes:0,references:0,nextNodeId:1};Ae(e,"",0,n);let o=F(e,"",0,n);if(n.issues.length>0||!o)throw new Ie(n.issues);return Object.freeze({dialect:et,formatAssertion:n.options.assertFormats,validate(r){let i=[],s=tt(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 j(r,o,"",0,c),{valid:i.length===0,errors:i,steps:c.budget.steps,truncated:c.budget.exhausted||i.length>=n.options.maxValidationErrors}}})}function Vt(e,t={}){if(!I(e)||e.type!=="object"||!I(e.properties))throw new Ie([{path:"#",keyword:"type",message:"tool input schema root must declare type object and a properties object"}]);return io(e,t)}function Ae(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"&&!I(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(!I(i)){h(o,t,r,`${r} must be an object`);continue}for(let[s,a]of Object.entries(i))Ae(a,U(t,r,s),n+1,o)}}for(let r of["items","contains","additionalProperties","not"])e[r]!==void 0&&Ae(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)){h(o,t,r,`${r} must be an array of schemas`);continue}i.forEach((s,a)=>Ae(s,U(t,r,String(a)),n+1,o))}}}}}function F(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:Qt(t)};if(o.compiledByPointer.set(t,i),typeof e=="boolean")return i.boolean=e,i;if(so(e,t,o),ao(e,t,o),e.$schema!==void 0&&(t!==""||e.$schema!==et&&e.$schema!==`${et}#`)&&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=go(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=F(a,s,n+1,o)}}if(i.types=lo(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&&oe(a,c)))?h(o,t,"enum","enum values must be unique"):s.some(a=>tt(a))?h(o,t,"enum","enum values must be JSON values"):i.enumValues=s}if(Object.prototype.hasOwnProperty.call(e,"const")&&(tt(e.const)?h(o,t,"const","const must be a JSON value"):(i.hasConst=!0,i.constValue=e.const)),i.multipleOf=po(e.multipleOf,t,"multipleOf",o),i.maximum=he(e.maximum,t,"maximum",o),i.exclusiveMaximum=he(e.exclusiveMaximum,t,"exclusiveMaximum",o),i.minimum=he(e.minimum,t,"minimum",o),i.exclusiveMinimum=he(e.exclusiveMinimum,t,"exclusiveMinimum",o),i.maxLength=H(e.maxLength,t,"maxLength",o),i.minLength=H(e.minLength,t,"minLength",o),i.minItems=H(e.minItems,t,"minItems",o),i.maxItems=H(e.maxItems,t,"maxItems",o),i.minContains=H(e.minContains,t,"minContains",o),i.maxContains=H(e.maxContains,t,"maxContains",o),i.minProperties=H(e.minProperties,t,"minProperties",o),i.maxProperties=H(e.maxProperties,t,"maxProperties",o),fo(i,t,o),e.pattern!==void 0)if(typeof e.pattern!="string")h(o,t,"pattern","pattern must be a string");else{let s=rt(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&&!Xt.has(e.format)?h(o,t,"format",`unsupported asserted format ${e.format}`):i.format=e.format),i.prefixItems=Ee(e.prefixItems,t,"prefixItems",n,o,!0),i.items=Se(e.items,t,"items",n,o),i.contains=Se(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=co(e.properties,t,"properties",n,o),i.patternProperties=uo(e.patternProperties,t,n,o),i.additionalProperties=Se(e.additionalProperties,t,"additionalProperties",n,o),i.required=Bt(e.required,t,"required",o,!0),i.dependentRequired=mo(e.dependentRequired,t,o),i.allOf=Ee(e.allOf,t,"allOf",n,o,!1),i.anyOf=Ee(e.anyOf,t,"anyOf",n,o,!1),i.oneOf=Ee(e.oneOf,t,"oneOf",n,o,!1),i.not=Se(e.not,t,"not",n,o),I(e.$defs))for(let[s,a]of Object.entries(e.$defs))F(a,U(t,"$defs",s),n+1,o);return i}function so(e,t,n){if(n.options.strictKeywords)for(let o of Object.keys(e))!oo.has(o)&&!o.startsWith("x-")&&h(n,t,o,`unsupported keyword ${o}`)}function ao(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 lo(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"||!no.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 Se(e,t,n,o,r){if(e!==void 0)return F(e,U(t,n),o+1,r)}function Ee(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)=>F(s,U(t,n,String(a)),o+1,r)).filter(s=>!!s)}}function co(e,t,n,o,r){if(e===void 0)return;if(!I(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=F(a,U(t,n,s),o+1,r);l&&i.set(s,l)}return i}function uo(e,t,n,o){if(e===void 0)return;if(!I(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=rt(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=F(s,U(t,"patternProperties",i),n+1,o);l&&r.push({pattern:{source:i,regex:a},schema:l})}return r}function mo(e,t,n){if(e===void 0)return;if(!I(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=Bt(i,U(t,"dependentRequired",r),"dependentRequired",n,!0);s&&o.set(r,s)}return o}function Bt(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 po(e,t,n,o){let r=he(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 he(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 H(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 fo(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 go(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(Ft).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 j(e,t,n,o,r){if(!Ht(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=Po(t,e,r);if(!r.activePairs.has(i)){r.activePairs.add(i);try{if(t.ref&&j(e,t.ref,n,o+1,r),t.enumValues&&!t.enumValues.some(s=>oe(s,e))&&C(r,n,"enum",t,`expected one of ${t.enumValues.map(ot).join(", ")} but got ${Ge(e)}`),t.hasConst&&!oe(t.constValue,e)&&C(r,n,"const",t,`expected ${ot(t.constValue)} but got ${Ge(e)}`),t.types&&!t.types.some(s=>xo(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 ${Ge(e)}`);return}yo(e,t,n,o,r),typeof e=="number"&&ho(e,t,n,r),typeof e=="string"&&bo(e,t,n,r),Array.isArray(e)&&wo(e,t,n,o,r),I(e)&&vo(e,t,n,o,r)}finally{r.activePairs.delete(i)}}}function yo(e,t,n,o,r){for(let i of t.allOf??[])j(e,i,n,o+1,r);if(t.anyOf&&t.anyOf.filter(s=>Le(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=>Le(e,s,n,o+1,r)).length;i!==1&&C(r,n,"oneOf",t,`must match exactly one oneOf branch; matched ${i}`)}t.not&&Le(e,t.not,n,o+1,r)&&C(r,n,"not",t,"must not match the disallowed schema")}function ho(e,t,n,o){t.multipleOf!==void 0&&!To(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 bo(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=Xt.get(t.format);i&&!i(e,o.options)&&C(o,n,"format",t,`must match format ${t.format}`)}}function wo(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(!Ht(r))break e;if(oe(e[s],e[a])){C(r,N(n,String(s)),"uniqueItems",t,`duplicates item ${a}`);break e}}let i=t.prefixItems?.length??0;if(t.prefixItems?.forEach((s,a)=>{a<e.length&&j(e[a],s,N(n,String(a)),o+1,r)}),t.items)for(let s=i;s<e.length;s+=1)j(e[s],t.items,N(n,String(s)),o+1,r);if(t.contains){let s=0;for(let l=0;l<e.length;l+=1)Le(e[l],t.contains,N(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 vo(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(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(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,j(e[s],l,N(n,s),o+1,r));for(let c of t.patternProperties??[])c.pattern.regex.test(s)&&(a=!0,j(e[s],c.schema,N(n,s),o+1,r));!a&&t.additionalProperties&&j(e[s],t.additionalProperties,N(n,s),o+1,r)}}function Le(e,t,n,o,r){let i={...r,errors:[],activePairs:new Set(r.activePairs)};return j(e,t,n,o,i),i.errors.length===0&&!i.budget.exhausted}function Ht(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 Po(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}:${ot(t)}`}function xo(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 tt(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,N(r,String(s)));if(l)return l}t.delete(o)};return n(e,"")}function rt(e,t){if(!([...e].length>t)&&!/\\(?:[1-9]|k<)/u.test(e)&&!/\(\?<(?:[=!]|[A-Za-z])/u.test(e)&&!/\((?:[^()\\]|\\.)*[+*{](?:[^()\\]|\\.)*\)[+*{?]/u.test(e))try{return new RegExp(e,"u")}catch{return}}function zt(e){let t=/^(\d{4})-(\d{2})-(\d{2})$/u.exec(e);if(!t)return!1;let n=new Date(Date.UTC(Number(t[1]),Number(t[2])-1,Number(t[3])));return n.getUTCFullYear()===Number(t[1])&&n.getUTCMonth()===Number(t[2])-1&&n.getUTCDate()===Number(t[3])}function Kt(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 ko(e){let t=/^([^Tt ]+)[Tt ](.+)$/u.exec(e);return!!(t&&zt(t[1])&&Kt(t[2]))}function jt(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&&nt(e.slice(t+1))}function nt(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 Ut(e){try{return!!(new URL(e).protocol&&!/\s/u.test(e))}catch{return!1}}function Jt(e){try{return new URL(e,"https://xeno.invalid/"),!/\s/u.test(e)}catch{return!1}}function Ro(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 To(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 oe(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)=>oe(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)&&oe(e[r],t[r]))}return!1}function N(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(Ft).join("/")}`}function Ft(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function Qt(e){return e.length===0?"#":`#${e}`}function h(e,t,n,o){e.issues.length>=64||e.issues.push({path:Qt(t),...n?{keyword:n}:{},message:o})}function Ge(e){return e===null?"null":Array.isArray(e)?"array":typeof e=="number"?Number.isSafeInteger(e)?"integer":"number":typeof e}function ot(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}},Wt=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),Co=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function at(e,t){Vt(e);let n=st(e),o=n,r=Yt(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};Oe(o,"",i);let s=Q(o,"#",i);if(!re(s))throw new S(t,"#","provider tool root must remain an object schema");return _o(n,s,t),{schema:s,dialect:t,canonicalSha256:r,projectedSha256:Yt(s),changes:i.changes}}function ie(e,t){return e.map(n=>{let o=at(n.input_schema,t);return{definition:{...n,input_schema:o.schema},projection:o}})}function Q(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=So(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"&&!Wt.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=Q(r,`${t}/$ref`,n);n.activeReferences.delete(e.$ref);let l=Q(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=Q(r,`${t}/$ref`,n);return n.activeReferences.delete(e.$ref),n.changes.push({path:t,keyword:"$ref",action:"transformed",reason:"inlined local reference"}),s}let o={};for(let[r,i]of Object.entries(e))if(r!=="$ref"){if(Wt.has(r)||r.startsWith("x-")){r==="description"?o.description=i:n.changes.push({path:t,keyword:r,action:"omitted",reason:"provider wire metadata is not required for canonical validation"});continue}if(n.dialect==="google"&&!Co.has(r)){if(r==="const"){o.enum=[st(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(!re(i))throw new S(n.dialect,t,`${r} must be an object`);let s={};for(let[a,l]of Object.entries(i))s[a]=Q(l,`${t}/${r}/${lt(a)}`,n);o[r]=s;continue}if(["items","contains","additionalProperties","not"].includes(r)){o[r]=Q(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)=>Q(s,`${t}/${r}/${a}`,n));continue}o[r]=st(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 _o(e,t,n){if(t.type!=="object"||!re(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 Oe(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(re(r))for(let[i,s]of Object.entries(r))Oe(s,`${t}/${o}/${lt(i)}`,n)}for(let o of["items","contains","additionalProperties","not"]){let r=e[o];(typeof r=="boolean"||re(r))&&Oe(r,`${t}/${o}`,n)}for(let o of["prefixItems","allOf","anyOf","oneOf"]){let r=e[o];Array.isArray(r)&&r.forEach((i,s)=>Oe(i,`${t}/${o}/${s}`,n))}}}function So(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(lt).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 Yt(e){return(0,Gt.createHash)("sha256").update(it(e)).digest("hex")}function it(e){return Array.isArray(e)?`[${e.map(it).join(",")}]`:re(e)?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${it(e[t])}`).join(",")}}`:JSON.stringify(e)}function st(e){return JSON.parse(JSON.stringify(e))}function lt(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function re(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var ct=require("node:crypto");async function Zt(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},Me=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 en(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 O(e){if(typeof e!="string"||!e.trim()||e.length>512)throw new x("INVALID","Invalid quota identity.");return e}function D(e){let t=n=>({id:O(n?.id),generation:O(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 $(e){return JSON.stringify(D(e))}function se(e){let t=D(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 Eo(e,t,n){let o=D(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=O(d?.attemptId),m=(0,ct.createHash)("sha256").update(JSON.stringify([e.id,i,s,a,d?.systemPrompt??""])).digest("hex"),f=(0,ct.createHash)("sha256").update(JSON.stringify([$(o),e.id,u])).digest("hex"),g=async(R,L,ee=c,ue=3e4)=>{try{return await Zt(L,ee,ue)}catch(z){throw en(z)?z:R==="prepare"&&z instanceof P&&z.category==="unsupported_capability"?new x("UNSUPPORTED","This provider cannot enforce the requested per-request token ceiling."):new Me(R,f,z)}},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),v=_(_(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:v})),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),L=_(k.outputTokens);if(R>T.inputTokensUpperBound||L>T.outputTokensUpperBound)throw new x("CORRUPT","Provider exceeded its guaranteed token bound; reservation requires reconciliation.");await g("settle",()=>t.settle(f,_(R+L)))}return k}return{id:e.id,...e.model?{model:e.model}:{},...e.capabilities?{capabilities:e.capabilities}:{},complete:r,completeLocal:r}}var Ao={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 rn(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=K(e.baseURL??t,{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname});return n.pathname=n.pathname.replace(/\/$/,""),n}function W(e,t){let n=new URL(e.toString());return n.pathname=`${n.pathname.replace(/\/$/,"")}/${t.replace(/^\//,"")}`,n}function dt(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 Lo(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={...Ao[e.kind],streaming:!!e.streaming,reasoningMetadata:e.kind==="anthropic"&&!!e.streaming};return{...t,vision:t.imageInput}}function be(e,t){return{providerId:t,endpointPolicy:{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},limits:e.transportLimits}}function sn(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 we(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 an(e){return e.filter(t=>t?.type==="image_url")}function ln(e){return e.some(t=>Array.isArray(t.content)&&t.content.some(n=>n.type==="image_url"||n.type==="tool_result"&&we(n).length>0))}function tn(e){let t=sn(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 Io(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[tn(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=we(n),r=[{type:"text",text:me(n.content)}];return r.push(...o.map(tn)),[{type:"tool_result",tool_use_id:n.tool_use_id,content:r,is_error:n.is_error}]})}))}function Oo(e){return{type:"input_image",image_url:e.image_url.url,detail:e.image_url.detail??"auto"}}function Mo(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=[...an(n.content),...n.content.flatMap(i=>i.type==="tool_result"?we(i):[])];(o||r.length)&&t.push({role:n.role,content:[...o?[{type:"input_text",text:o}]:[],...r.map(Oo)]});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:me(i.content)})}return t}function nn(e){let t=sn(e.image_url.url);return t?{inlineData:{mimeType:t.mediaType,data:t.data}}:{fileData:{fileUri:e.image_url.url}}}function $o(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[nn(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=me(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}}},...we(o).map(nn)]})})}function cn(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:me(a.content)});let s=[...an(o.content),...o.content.flatMap(a=>a.type==="tool_result"?we(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 on(e,t,n,o,r,i){return{model:e,messages:cn(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 No(e){return e.map(t=>({name:t.name,description:t.description,parameters:t.input_schema}))}function ve(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 Ne(e,t,n){return{content:e,stopReason:t,...ve(n)}}function J(e,t,n){if(t&&typeof t=="object"&&!Array.isArray(t))return t;if(typeof t!="string")throw b(e,`${n} arguments must be JSON`);try{let 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 b(e,`${n} contains malformed tool arguments`,o)}}function Do(e,t){if(!Array.isArray(t.content))throw b(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 b(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 Ne(n,o,t.usage??{})}function qo(e,t){if(!Array.isArray(t.output))throw b(e,"output must be an array");let n=[];for(let i of t.output)if(i.type==="message"){if(!Array.isArray(i.content))throw b(e,"message content must be an array");for(let s of i.content)s.type==="output_text"&&typeof s.text=="string"&&n.push({type:"text",text:s.text})}else if(i.type==="function_call"){if(!i.call_id&&!i.id)throw b(e,"function_call is missing an id");if(!i.name)throw b(e,"function_call is missing a name");n.push({type:"tool_use",id:String(i.call_id??i.id),name:String(i.name),input: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 Ne(n,o?"tool_use":r?"max_tokens":"end_turn",t.usage??{})}function jo(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"}):b(e,"candidates must contain at least one item")}let n=t.candidates[0]??{};if(!Array.isArray(n.content?.parts))throw b(e,"candidate parts must be an array");let 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 b(e,"functionCall is missing a name");return[{type:"tool_use",id:String(l.id??`gemini-${a}-${(0,$e.randomUUID)().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 Ne(o,r?"tool_use":i?"max_tokens":"end_turn",t.usageMetadata??{})}function dn(e,t){if(!Array.isArray(t.choices)||t.choices.length===0)throw b(e,"choices must contain an item");let n=t.choices[0]??{},o=n.message;if(!o||typeof o!="object")throw b(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 b(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 Ne(r,i,t.usage??{})}async function w(e,t){try{await e?.onEvent?.(t)}catch{}}async function un(e,t,n){await w(n,{type:"message.started"});let o=0;for(let r of e.content)r.type==="text"?(t?.(r.text),await w(n,{type:"text.delta",text:r.text})):r.type==="tool_use"&&(await w(n,{type:"tool_call.started",index:o,toolCallId:r.id,name:r.name}),await w(n,{type:"tool_call.completed",index:o,toolCallId:r.id,name:r.name,input:r.input}),o+=1);await w(n,{type:"usage.updated",inputTokens:e.inputTokens,outputTokens:e.outputTokens}),await w(n,{type:"message.completed",stopReason:e.stopReason})}function De(){return{content:[],inputTokens:0,outputTokens:0,usageReported:!1,stopReason:"end_turn",terminal:!1}}function qe(e,t){if(!t.terminal)throw b(e,"stream ended without a terminal event");return{content:t.content,stopReason:t.stopReason,usageReported:t.usageReported,inputTokens:t.inputTokens,outputTokens:t.outputTokens}}function je(e,t){try{let n=JSON.parse(t.data);if(!n||typeof n!="object"||Array.isArray(n))throw new Error("frame is not an object");return n}catch(n){throw b(e,`invalid stream JSON for ${t.event}`,n)}}async function Uo(e){let t=De(),n=new Map;return await ye(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},be(e.config,e.providerId),async o=>{let r=je(e.providerId,o),i=String(r.type??o.event);if(i==="message_start"){let s=ve(r.message?.usage);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),await w(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 w(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 w(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 w(e.context,{type:"text.delta",text:a})}}else if(s.type==="thinking_delta")await w(e.context,{type:"reasoning.delta",text:String(s.thinking??"")});else if(s.type==="input_json_delta"){let a=Number(r.index??0),l=n.get(a);if(!l)throw b(e.providerId,"tool argument delta arrived before tool start");let c=String(s.partial_json??"");l.arguments+=c,await w(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 w(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 w(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}else if(i==="message_stop")t.terminal=!0,await w(e.context,{type:"message.completed",stopReason:t.stopReason});else if(i==="error")throw b(e.providerId,String(r.error?.message??"stream error"))}),qe(e.providerId,t)}async function Jo(e){let t=De(),n=new Map;return await ye(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},be(e.config,e.providerId),async o=>{if(o.data==="[DONE]")return;let r=je(e.providerId,o),i=String(r.type??o.event);if(i==="response.created")await w(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 w(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 w(e.context,{type:"tool_call.started",index:s,toolCallId:a.id,name:a.name})}else if(i==="response.function_call_arguments.delta"){let s=Number(r.output_index??0),a=n.get(s);if(!a)throw b(e.providerId,"tool argument delta arrived before tool start");let l=String(r.delta??"");a.arguments+=l,await w(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 w(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=ve(s.usage??{});t.inputTokens=a.inputTokens,a.usageReported&&(t.usageReported=!0),t.outputTokens=a.outputTokens,i==="response.incomplete"&&(t.stopReason="max_tokens"),t.terminal=!0,await w(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens}),await w(e.context,{type:"message.completed",stopReason:t.stopReason})}else if(i==="response.failed"||i==="error")throw b(e.providerId,String(r.response?.error?.message??r.error?.message??"stream failed"))}),qe(e.providerId,t)}async function Xo(e){let t=De(),n=new Map;await w(e.context,{type:"message.started"}),await ye(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0,stream_options:{include_usage:!0}}),signal:e.signal},be(e.config,e.providerId),async o=>{if(o.data==="[DONE]"){t.terminal=!0;return}let r=je(e.providerId,o);if(r.usage){let i=ve(r.usage);t.inputTokens=i.inputTokens,i.usageReported&&(t.usageReported=!0),t.outputTokens=i.outputTokens,await w(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}for(let i of 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 w(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 w(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 w(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 w(e.context,{type:"tool_call.completed",index:o.index,toolCallId:o.id,name:o.name,input:r})}return await w(e.context,{type:"message.completed",stopReason:t.stopReason}),qe(e.providerId,t)}async function Vo(e){let t=De(),n=0;return await w(e.context,{type:"message.started"}),await ye(e.url,{method:"POST",headers:e.headers,body:JSON.stringify(e.body),signal:e.signal},be(e.config,e.providerId),async o=>{let r=je(e.providerId,o);if(r.usageMetadata){let s=ve(r.usageMetadata);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),t.outputTokens=s.outputTokens,await w(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}let i=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 w(e.context,{type:"text.delta",text:s.text})}else if(s.functionCall){let a=s.functionCall,l=String(a.id??`gemini-${n}-${(0,$e.randomUUID)().slice(0,8)}`),c=String(a.name??""),d=J(e.providerId,a.args??{},"streamed function call");await w(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 w(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 w(e.context,{type:"message.completed",stopReason:t.stopReason}))}),qe(e.providerId,t)}function mn(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 ut(e){if(e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw b("direct-provider","maxTokens must be a positive safe integer");let t=`direct-${e.kind}`,n=rn(e);if(e.xenoPromptTokenCeiling!==void 0&&(!Number.isSafeInteger(e.xenoPromptTokenCeiling)||e.xenoPromptTokenCeiling<0||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw b(t,"XENO prompt token ceilings require a nonnegative limit and an explicit loopback xeno-rt endpoint");let o=Lo(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(ln(l)&&!o.imageInput)throw V(t,"image input");let f=e.kind==="openai-compatible"?"openai-chat":e.kind,g=ie(c,f).map(({definition:v})=>v),y,p={"content-type":"application/json"},T;try{if(e.kind==="anthropic"){if(y=W(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:Io(l),tools:g.map(R=>({name:R.name,description:R.description,input_schema:R.input_schema}))},e.streaming)return await Uo({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=W(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:$o(l),tools:g.length>0?[{functionDeclarations:No(g)}]:void 0,generationConfig:{maxOutputTokens:e.maxTokens??8192}},e.streaming)return await Vo({providerId:t,url:y,headers:p,body:T,config:e,signal:u,onText:d,context:m})}else if(e.kind==="openai-compatible"){if(y=W(n,e.chatCompletionsPath??"/v1/chat/completions"),p={...p,...dt(e)},T=on(a,l,g,m,e.maxTokens??8192,e.xenoPromptTokenCeiling),e.streaming)return await Xo({providerId:t,url:y,headers:p,body:T,config:e,signal:u,onText:d,context:m})}else if(y=W(n,"/v1/responses"),p={...p,authorization:`Bearer ${e.apiKey}`},T={model:a,instructions:m?.systemPrompt,input:Mo(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 Jo({providerId:t,url:y,headers:p,body:T,config:e,signal:u,onText:d,context:m});let v=await ge(y,{method:"POST",headers:p,body:JSON.stringify(T),signal:u},i),k=e.kind==="anthropic"?Do(t,v):e.kind==="google"?jo(t,v):e.kind==="openai-compatible"?dn(t,v):qo(t,v);return await un(k,d,m),k}catch(v){throw v instanceof P&&v.category==="cancelled"?await w(m,{type:"provider.cancelled"}):(await w(m,mn(v)),v instanceof P&&v.retryable&&await w(m,{type:"provider.retry",retryAfterMs:v.retryAfterMs,reason:v.category})),v}}};return e.xenoPromptTokenCeiling!==void 0&&(s.prepareQuotaRequest=async(a,l,c,d,u)=>{let m=await ge(W(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=ie(g,"openai-chat").map(({definition:ue})=>ue),T=on(a,f,p,y,e.maxTokens??8192),v=await ge(W(n,"/v1/runtime/chat/prompt-tokens"),{method:"POST",headers:{"content-type":"application/json",...dt(e)},body:JSON.stringify(T),signal:u},{...i,limits:{...e.transportLimits,connectTimeoutMs:9e4,totalTimeoutMs:12e4,maxResponseBytes:16384}}),k=v.prompt_tokens;if(v.object!=="runtime.chat.prompt_tokens"||typeof k!="number"||!Number.isSafeInteger(k)||k<0)throw b(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 L=Math.min(e.maxTokens??8192,R===void 0?Number.MAX_SAFE_INTEGER:R-k);if(L<1)throw new x("EXCEEDED","Goal token allowance cannot admit the exact prompt and one output token.");let ee=ut({...e,maxTokens:L,xenoPromptTokenCeiling:k});return{basis:"provider-enforced",inputTokensUpperBound:k,outputTokensUpperBound:L,execute:(ue,z)=>ee.complete(a,f,g,ue,z,y)}}),s}function pn(e){let t="direct-ollama-native";if(e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw b(t,"maxTokens must be a positive safe integer");let n={...e,kind:"openai-compatible"},o=rn(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(ln(i))throw V(t,"image input");try{let d=ie(s,"openai-chat").map(({definition:y})=>y),u=cn(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 ge(W(o,"/api/chat"),{method:"POST",signal:l,headers:{"content-type":"application/json",...dt(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}}))})},be(n,t));if(m.done!==!0||!m.message||typeof m.message!="object")throw b(t,"native completion is missing its terminal message");let f=m.message,g=dn(t,{choices:[{message:{...f,...Array.isArray(f.tool_calls)?{tool_calls:f.tool_calls.map(y=>({...y,id:y.id??(0,$e.randomUUID)()}))}:{}},finish_reason:m.done_reason==="length"?"length":"stop"}],usage:m});return await un(g,a,c),g}catch(d){throw await w(c,d instanceof P&&d.category==="cancelled"?{type:"provider.cancelled"}:mn(d)),d}}}}function mt(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 pt=1,Y={streaming:!0,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!0,usageAccounting:!0,promptCaching:!1,modelDiscovery:!0},Ue={...Y,reasoningMetadata:!1},fn=[q("xeno","XENO hosted","xeno","openai-compatible","https://api.xenostudio.ai","public-https","bearer-env","XENO_API_KEY","/v1/models",Y),q("openai","OpenAI","direct","openai-responses","https://api.openai.com","public-https","bearer-env","OPENAI_API_KEY","/v1/models",Y),q("anthropic","Anthropic","direct","anthropic","https://api.anthropic.com","public-https","header-env","ANTHROPIC_API_KEY","/v1/models",{...Y,structuredOutput:!1}),q("google","Google AI Studio","direct","google","https://generativelanguage.googleapis.com","public-https","header-env","GOOGLE_API_KEY","/v1beta/models",Y),q("openrouter","OpenRouter","gateway","openai-compatible","https://openrouter.ai/api","public-https","bearer-env","OPENROUTER_API_KEY","/v1/models",Ue),q("xeno-rt","xeno-rt","local","openai-compatible","http://127.0.0.1:3338","local-network","none",void 0,"/v1/models",Ue,["running xeno-rt endpoint"]),q("ollama","Ollama","local","openai-compatible","http://127.0.0.1:11434","local-network","none",void 0,"/v1/models",Ue,["Ollama OpenAI compatibility endpoint"]),q("azure-openai","Azure OpenAI","cloud","openai-compatible",void 0,"public-https","header-env","AZURE_OPENAI_API_KEY",void 0,Ue,["resource endpoint","deployment","API version","host adapter for deployment-shaped requests"]),q("aws-bedrock","Amazon Bedrock","cloud","aws-bedrock",void 0,"public-https","cloud-chain",void 0,void 0,{...Y,modelDiscovery:!1},["AWS credential chain","region","Bedrock host adapter"]),q("vertex-ai","Google Vertex AI","cloud","vertex-ai",void 0,"public-https","cloud-chain",void 0,void 0,{...Y,modelDiscovery:!1},["Google application-default credentials","project","region","Vertex host adapter"])],le=class{presets=new Map;constructor(t=fn){for(let n of t)this.add(n)}add(t){Zo(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=gn(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:er(t),preset:o,...i?{endpoint:i}:{},...s?{secretRef:s}:{},readiness:a,blockers:r}}};async function Bo(e){let n=(e.catalog??new le).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:ae([...s.errors,`Credential reference ${n.secretRef??"(missing)"} did not resolve`])};if(!n.preset.discoveryPath)return{...s,readiness:"ready",errors:ae(s.errors)};let a=K(n.endpoint,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts});try{await Te(a,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts,resolveHostname:e.resolveHostname})}catch(u){return{...s,readiness:"blocked",errors:ae([...s.errors,u instanceof Error?u.message:String(u)])}}let l=Fo(a,n.preset.discoveryPath),c=Ko(n.preset,r),d=Date.now();try{let{response:u,text:m}=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:ae([...s.errors,`Provider discovery returned HTTP ${u.status}`])};let y=JSON.parse(m);return{...s,readiness:"ready",reachable:!0,authenticated:g,latencyMs:f,models:Wo(y),errors:ae(s.errors)}}catch(u){return{...s,readiness:"blocked",latencyMs:Date.now()-d,errors:ae([...s.errors,tr(u)])}}}function Ho(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)||!Yo({...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 zo(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=Go(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??ft(e.preset.id),prefix:e.preset.auth.prefix}}:{},...e.preset.auth.mode==="none"?{authentication:{type:"none"}}:{}}}function q(e,t,n,o,r,i,s,a,l,c,d=[]){return{schemaVersion:pt,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:ft(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 ft(e){return e==="anthropic"?"x-api-key":e==="google"?"x-goog-api-key":e==="azure-openai"?"api-key":"authorization"}function Ko(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??ft(e.id)]:`${e.auth.prefix??""}${t}`}:{accept:"application/json"}}function gn(e,t){return e?K(e.trim().replace(/\/+$/,""),{profile:t.endpointProfile,allowedHosts:t.allowedHosts}).toString().replace(/\/$/,""):void 0}function Fo(e,t){let n=new URL(e.toString());if(!t.startsWith("/")||t.includes("..")||t.includes("#"))throw new Error("Provider discovery path is invalid");return n.pathname=`${n.pathname.replace(/\/$/,"")}${t}`.replace(/\/{2,}/g,"/"),n}async function 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,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(v=>{a&&v.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((v,k)=>{f+=Buffer.byteLength(k)+Buffer.byteLength(v)}),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 v=await Promise.race([s.read(),c]);if(v.done)break;if(p+=v.value.byteLength,p>r)throw new Error(`Provider discovery response exceeds ${r} bytes`);T+=y.decode(v.value,{stream:!0})}return T+=y.decode(),{response:m,text:T}}finally{clearTimeout(d),i.abort(),s&&(s.cancel().catch(()=>{}),s.releaseLock())}}function Wo(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||mt(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 Yo(e,t){return t?Object.entries(t).every(([n,o])=>o!==!0||e[n]===!0):!0}function Go(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 Zo(e){if(e.schemaVersion!==pt||!/^[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&&gn(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 er(e){let t=e.id.trim();if(!t||t.length>120||mt(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 ae(e){return[...new Set(e)]}function tr(e){return(e instanceof Error?e.message:String(e)).replace(/(Bearer\s+)[A-Za-z0-9._~+/=-]+/gi,"$1[redacted]").replace(/([?&#](?:token|key|secret|password|api[_-]?key)=)[^&#\s]+/gi,"$1[redacted]").slice(0,500)}var wt=require("node:crypto"),M=require("node:fs/promises"),G=require("node:path");function Je(e){return JSON.stringify(gt(e,new Set))}function gt(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=>gt(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]=gt(r,t)}return t.delete(e),n}var X=require("node:fs"),yt=require("node:os"),hn=require("node:path");function nr(){return new Date().toISOString()}function or(){return new Date(Date.now()-Math.floor(process.uptime()*1e3)).toISOString()}function bn(e){try{return JSON.parse((0,X.readFileSync)(e,"utf8"))}catch{return null}}function rr(e){if(!e||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function ir(e){return e.hostname!==(0,yt.hostname)()?!0:rr(e.pid)}function yn(e,t){(0,X.mkdirSync)((0,hn.dirname)(e),{recursive:!0}),(0,X.writeFileSync)(e,JSON.stringify(t,null,2)+`
|
|
10
|
+
`,{encoding:"utf8",flag:"wx"})}function sr(e,t){let n=bn(e);n?.pid!==t.pid||n.hostname!==t.hostname||(0,X.rmSync)(e,{force:!0})}function wn(e,t,n){let o=nr(),r={schemaVersion:1,name:t,pid:process.pid,hostname:(0,yt.hostname)(),processStartedAt:or(),version:n,acquiredAt:o,updatedAt:o};try{yn(e,r)}catch(i){if(i.code!=="EEXIST")throw i;let a=bn(e);if(a&&ir(a))throw new Error(`${t} is already locked by PID ${a.pid} on ${a.hostname}.`);(0,X.rmSync)(e,{force:!0}),yn(e,r)}return{record:r,release:()=>{sr(e,r)}}}var Xe=1,bt=class{directory;snapshotPath;lockPath;catalog;now;constructor(t){this.directory=(0,G.resolve)(t.directory),this.snapshotPath=(0,G.join)(this.directory,"providers.json"),this.lockPath=(0,G.join)(this.directory,"providers.lock"),this.catalog=t.catalog??new le,this.now=t.now??(()=>new Date)}async upsert(t){let n=this.catalog.resolve(t).connection;return Pn(n),this.mutate(o=>{let r=o.connections.filter(i=>i.id!==n.id);return r.push(n),{snapshot:ht(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:ht(n,o,n.routingPolicy,this.now()),result:!0}})}async setRoutingPolicy(t){let n=xn(t);return this.mutate(o=>({snapshot:ht(o,o.connections,n,this.now()),result:n}))}async get(t){return(await this.load()).connections.find(n=>n.id===t)??null}async list(){return(await this.load()).connections}async load(){try{let t=JSON.parse(await(0,M.readFile)(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(0,M.mkdir)(this.directory,{recursive:!0,mode:448});let n=wn(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 vn({schemaVersion:Xe,generation:0,updatedAt:e.toISOString(),connections:[],routingPolicy:{}})}function ht(e,t,n,o){return vn({schemaVersion:Xe,generation:e.generation+1,updatedAt:o.toISOString(),connections:[...t].sort((r,i)=>r.id.localeCompare(i.id)),routingPolicy:n})}function vn(e){return{...e,checksum:{algorithm:"sha256",value:(0,wt.createHash)("sha256").update(kn(e)).digest("hex")}}}function lr(e,t){if(e.schemaVersion!==Xe||!Array.isArray(e.connections))throw new Error("Invalid provider connection snapshot");let{checksum:n,...o}=e;if(n?.algorithm!=="sha256"||n.value!==(0,wt.createHash)("sha256").update(kn(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(Pn(s),r.has(s.id))throw new Error(`Duplicate provider connection: ${s.id}`);r.add(s.id)}xn(e.routingPolicy)}function Pn(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 xn(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(0,M.mkdir)((0,G.dirname)(e),{recursive:!0,mode:448});let n=`${e}.${process.pid}.${Date.now()}.tmp`,o;try{o=await(0,M.open)(n,"wx",384),await o.writeFile(t,"utf8"),await o.sync(),await o.close(),o=void 0,await(0,M.rename)(n,e),await(0,M.chmod)(e,384).catch(()=>{})}finally{o&&await o.close().catch(()=>{}),await(0,M.unlink)(n).catch(()=>{})}}function kn(e){return Je(e)}var Be=require("node:crypto"),A=require("node:fs/promises"),de=require("node:path");var Ve=e=>(0,Be.createHash)("sha256").update(Je(e)).digest("hex"),ce=e=>new Date(e).toISOString().slice(0,10);function Rn(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 Tn(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 vt(e,t){return se(e).some(n=>$(n)===$(t))}function Z(e){return e.reduce((t,n)=>_(t+n),0)}var Pt=class{constructor(t,n=Date.now,o=1e5){this.now=n;this.maximumEntries=o;this.directory=(0,de.resolve)(t),_(o)}now;maximumEntries;directory;async policy(t){return(await this.load()).policies.get($(t))??null}async setPolicy(t,n,o){let r={scope:D(t),limits:Tn(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:D(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(Ve([i.scope,i.requestHash,i.reservedTokens])!==Ve([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: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=D(t);if(o<n.at)throw new x("CLOCK_ROLLBACK","Quota clock moved backwards.");let i=[...n.reservations.values()].filter(a=>vt(a.scope,r)),s=i.filter(a=>ce(a.admittedAt)===ce(o));return{authority:"local-file",policies:se(r).flatMap(a=>n.policies.get($(a))?[n.policies.get($(a))]:[]),heldTokens:Z(s.filter(a=>a.state==="reserved"||a.state==="dispatched").map(a=>a.reservedTokens)),usedTokens:Z(s.filter(a=>a.state==="settled").map(a=>a.actualTokens)),lifetimeHeldTokens:Z(i.filter(a=>a.state==="reserved"||a.state==="dispatched").map(a=>a.reservedTokens)),lifetimeUsedTokens:Z(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 se(t)){let s=n.policies.get($(i));if(!s)continue;let a=[...n.reservations.values()].filter(u=>vt(u.scope,i)&&u.state!=="void"),l=u=>Z(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=>ce(u.admittedAt)===ce(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=$(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:D(s.scope),revision:_(s.revision),limits:Tn(s.limits)});return}if(n.kind==="reserve"){let s=n.reservation;if(O(s.id),O(s.requestHash),D(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?se(s.scope):[]){let l=t.policies.get($(a));if(!l)continue;let c=[...t.reservations.values()].filter(u=>vt(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=Z(c.filter(u=>ce(u.admittedAt)===ce(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=Z(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(0,A.readdir)(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=(0,de.join)(this.directory,r),s=await(0,A.lstat)(i);if(!s.isFile()||s.isSymbolicLink()||s.size>16384)throw new x("CORRUPT","Invalid quota record file.");let a=await(0,A.open)(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!==Ve(d)||_(l.at)<t.at)throw new x("CORRUPT","Quota journal integrity failed.");if(l.version===1&&Rn(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(0,A.mkdir)(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:Rn(i)?2:1,sequence:o.sequence+1,previousHash:o.hash,at:r,operation:i},l=JSON.stringify({...a,hash:Ve(a)});if(Buffer.byteLength(l)>16384)throw new x("CAPACITY","Quota record exceeds its bound.");let c=(0,de.join)(this.directory,`${(0,Be.randomUUID)()}.tmp`),d=(0,de.join)(this.directory,`${String(a.sequence).padStart(12,"0")}.quota`),u=await(0,A.open)(c,"wx",384);try{await u.writeFile(l),await u.sync()}catch(m){throw await u.close(),await(0,A.unlink)(c).catch(()=>{}),m}await u.close();try{if(await(0,A.link)(c,d),process.platform!=="win32"){let m=await(0,A.open)(this.directory,"r");try{await m.sync()}finally{await m.close()}}return}catch(m){if(m.code!=="EEXIST")throw m}finally{await(0,A.unlink)(c).catch(()=>{})}}throw new x("CONFLICT","Quota admission contention exceeded the retry bound.")}};0&&(module.exports={BUILT_IN_XENO_PROVIDER_PRESETS,DualLLMProvider,FileQuotaAuthority,FileXenoProviderConnectionStore,ProviderError,QuotaAcknowledgementError,QuotaError,ToolSchemaProjectionError,XENO_PROVIDER_CATALOG_SCHEMA_VERSION,XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION,XenoProviderCatalog,assertDirectEndpointResolution,classifyProviderHttpError,createDirectProvider,createOllamaNativeProvider,createQuotaGovernedProvider,directProviderConfigFromConnection,isQuotaControlError,normalizeQuotaScope,parseRetryAfter,probeXenoProvider,projectToolDefinitionsForProvider,projectToolSchemaForProvider,providerCapabilityError,providerProtocolError,quotaAncestors,quotaInteger,quotaScopeKey,quotaText,selectXenoProviderRoute,validateDirectEndpoint});
|