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