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