@xenosystem/agent-sdk 0.10.37 → 0.10.39
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 +9 -9
- package/dist/artifacts/index.js +9 -9
- package/dist/artifacts/metafile-cjs.json +1 -1
- package/dist/artifacts/metafile-esm.json +1 -1
- package/dist/automation/index.cjs +8 -8
- package/dist/automation/index.d.cts +10 -0
- package/dist/automation/index.d.ts +10 -0
- 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/electron/index.cjs +221 -200
- package/dist/electron/index.d.cts +91 -1
- package/dist/electron/index.d.ts +91 -1
- package/dist/electron/index.js +221 -200
- package/dist/electron/metafile-cjs.json +1 -1
- package/dist/electron/metafile-esm.json +1 -1
- package/dist/index.cjs +397 -372
- package/dist/index.d.cts +136 -4
- package/dist/index.d.ts +136 -4
- package/dist/index.js +397 -372
- package/dist/intelligence/index.cjs +9 -9
- package/dist/intelligence/index.js +9 -9
- package/dist/intelligence/metafile-cjs.json +1 -1
- package/dist/intelligence/metafile-esm.json +1 -1
- package/dist/mcp/index.d.cts +10 -0
- package/dist/mcp/index.d.ts +10 -0
- package/dist/metafile-cjs.json +1 -1
- package/dist/metafile-esm.json +1 -1
- package/dist/providers/index.cjs +9 -9
- package/dist/providers/index.js +9 -9
- package/dist/providers/metafile-cjs.json +1 -1
- package/dist/providers/metafile-esm.json +1 -1
- package/dist/recipes/index.cjs +2 -2
- package/dist/recipes/index.js +2 -2
- package/dist/recipes/metafile-cjs.json +1 -1
- package/dist/recipes/metafile-esm.json +1 -1
- package/dist/research/index.cjs +3 -3
- package/dist/research/index.js +3 -3
- package/dist/research/metafile-cjs.json +1 -1
- package/dist/research/metafile-esm.json +1 -1
- package/dist/session/index.cjs +25 -25
- package/dist/session/index.js +25 -25
- package/dist/session/metafile-cjs.json +1 -1
- package/dist/session/metafile-esm.json +1 -1
- package/dist/sharing/index.cjs +4 -4
- package/dist/sharing/index.js +4 -4
- package/dist/sharing/metafile-cjs.json +1 -1
- package/dist/sharing/metafile-esm.json +1 -1
- package/dist/utils/index.cjs +23 -23
- package/dist/utils/index.d.cts +15 -1
- package/dist/utils/index.d.ts +15 -1
- package/dist/utils/index.js +23 -23
- package/dist/utils/metafile-cjs.json +1 -1
- package/dist/utils/metafile-esm.json +1 -1
- package/package.json +3 -3
package/dist/providers/index.js
CHANGED
|
@@ -1,11 +1,11 @@
|
|
|
1
|
-
var Wn=1;var Zn=12,Yn=128,er=/^xeno\.[a-z0-9]+(?:[._][a-z0-9]+)*$/u,tr=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/u,nr=/(?:[\\/]|@|https?:|bearer|token|secret|password|credential|api[_-]?key|[0-9a-f]{8}-[0-9a-f-]{27,})/iu,rr=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"]),St=new Set,At=new Map;function or(e){let t=e.trim().toLowerCase();return!t||t.length>64||nr.test(t)||!tr.test(t)?null:t}function ir(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=or(t);if(!n)return null;let r=At.get(e);return r||(r=new Set,At.set(e,r)),!r.has(n)&&r.size>=Yn?"other":(r.add(n),n)}function sr(e={}){let t={};for(let[n,r]of Object.entries(e)){if(Object.keys(t).length>=Zn)break;if(!rr.has(n))continue;let o=ir(n,r);o!==null&&(t[n]=o)}return Object.freeze(t)}function It(e){if(St.size===0||!er.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:Wn,kind:e.kind,name:e.name,value:Math.min(t,Number.MAX_SAFE_INTEGER),timestamp:(e.timestamp??new Date).toISOString(),attributes:sr(e.attributes)});for(let r of St)try{r(n)}catch{}}function ue(e,t=1,n){It({kind:"counter",name:e,value:t,attributes:n})}function tt(e,t,n){It({kind:"histogram",name:e,value:t,attributes:n})}var ar=["context length","context window","maximum context","too many tokens","request too large"];function Lt(e){let t=e.toLowerCase();return ar.some(n=>t.includes(n))}var Q="[redacted]";var dr=new Set(["authorization","proxy-authorization","x-api-key","x-goog-api-key","api-key","apikey","x-xeno-api-key","dpop","cookie","set-cookie"]),cr=new Set(["content-type","accept","accept-encoding","connection","content-length","user-agent","anthropic-version","anthropic-beta","openai-beta","x-stainless-lang"]),lr=/^(?:access_token|refresh_token|id_token|token|key|api[_-]?key|secret|client_secret|password|signature|sig|auth|code)$/i,ur=[[/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?(?:-----END [A-Z ]*PRIVATE KEY-----|$)/g,"[redacted:private-key]"],[/((?:^|[\s{,;"'(\[])["']?(?:cookie|set-cookie)["']?\s*[:=]\s*["']?)(?!\[redacted)[^\s"',;]+(?:;\s*[^\s"',;=]+=[^\s"',;]*)*/gi,`$1${Q}`],[/((?:^|[\s{,;"'(\[])["']?(?:authorization|proxy-authorization|x-api-key|x-goog-api-key|x-xeno-api-key|api[-_]?key|apikey|dpop)["']?\s*[:=]\s*["']?)(?:(?:Bearer|Basic|Token|DPoP)\s+)?(?!\[redacted)[^\s"',;]+/gi,`$1${Q}`],[/\b(Bearer|Basic|Token|DPoP)\s+[A-Za-z0-9._~+/=-]{6,}/gi,`$1 ${Q}`],[/\b(?:sk-(?:ant-|proj-)?[A-Za-z0-9_-]{16,}|xeno-[A-Za-z0-9]{24,}|xrun_[A-Za-z0-9_-]{8,}|AIza[0-9A-Za-z_-]{30,}|gh[pousr]_[A-Za-z0-9_]{20,}|github_pat_[A-Za-z0-9_]{20,}|npm_[A-Za-z0-9]{30,}|xox[baprs]-[A-Za-z0-9-]{16,}|AKIA[0-9A-Z]{16})\b/g,Q],[/\beyJ[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}/g,Q],[/([?&#;](?:access_token|refresh_token|id_token|token|key|api[_-]?key|secret|client_secret|password|signature|sig)=)[^&#\s"'<>]+/gi,`$1${Q}`],[/(\b[a-z][a-z0-9+.-]*:\/\/)[^/\s:@"']+:[^/\s@"']+@/gi,`$1${Q}@`]];function Ot(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Mt(e){let t=new Set,n=i=>{if(typeof i!="string")return;let s=i.trim();if(s.length<12)return;t.add(s);let a=/^(?:Bearer|Basic|Token|DPoP)\s+(.+)$/i.exec(s);a?.[1]&&a[1].trim().length>=12&&t.add(a[1].trim())},r=(i,s)=>{let a=i.trim().toLowerCase();cr.has(a)||(dr.has(a)||!a.startsWith("x-xeno-"))&&n(s)},o=e.headers;if(o)if(typeof Headers<"u"&&o instanceof Headers)o.forEach((i,s)=>r(s,i));else if(Array.isArray(o))for(let[i,s]of o)r(String(i),String(s));else for(let[i,s]of Object.entries(o))typeof s=="string"&&r(i,s);if(e.url)try{let i=typeof e.url=="string"?new URL(e.url):e.url;i.searchParams.forEach((s,a)=>{lr.test(a)&&n(s)}),i.password&&n(decodeURIComponent(i.password))}catch{}for(let i of e.extra??[])n(i??void 0);return[...t]}function D(e,t=[]){if(!e)return e;let n=e,r=[...new Set([...t].filter(o=>typeof o=="string"&&o.length>=12))].sort((o,i)=>i.length-o.length);for(let o of r){n=n.replace(new RegExp(`(?<![A-Za-z0-9_-])${Ot(o)}(?![A-Za-z0-9_-])`,"g"),Q);let i=encodeURIComponent(o);i!==o&&(n=n.replace(new RegExp(`(?<![A-Za-z0-9_-])${Ot(i)}(?![A-Za-z0-9_-])`,"g"),Q))}for(let[o,i]of ur)o.lastIndex=0,n=n.replace(o,i);return n}function nt(e,t,n){try{Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0,enumerable:!1})}catch{}}function O(e,t=[],n=0){if(!(e instanceof Error)||n>6)return e;let r=[...t],o=D(e.message,r);if(o!==e.message&&nt(e,"message",o),typeof e.stack=="string"){let s=D(e.stack,r);s!==e.stack&&nt(e,"stack",s)}let i=e.cause;if(i instanceof Error)O(i,r,n+1);else if(i!=null){let s;try{s=typeof i=="string"?i:JSON.stringify(i)??String(i)}catch{s=String(i)}let a=D(s,r);a!==s&&nt(e,"cause",a)}for(let s of Object.keys(e)){let a=e[s];if(typeof a=="string"){let d=D(a,r);if(d!==a)try{e[s]=d}catch{}}}return e}var b=class extends Error{category;code;retryable;providerId;statusCode;retryAfterMs;requestId;providerCode;remedy;constructor(t,n){super(D(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,n.providerCode!==void 0&&(this.providerCode=n.providerCode),n.remedy!==void 0&&(this.remedy=n.remedy),O(this)}};function $e(e,t=Date.now()){if(!e)return;let n=Number(e.trim());if(Number.isFinite(n)&&n>=0)return Math.ceil(n*1e3);let r=Date.parse(e);if(Number.isFinite(r))return Math.max(0,r-t)}function pr(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 mr(e){if(!e||typeof e!="object")return;let t=e,n=t.error&&typeof t.error=="object"?t.error:void 0;for(let r of[n?.code,n?.type,t.code,t.type])if(typeof r=="string"&&/^[A-Za-z][A-Za-z0-9_.:-]{1,63}$/.test(r))return r}var fr=["insufficient credit","insufficient_credit","insufficient funds","insufficient_quota","out of credit","credit balance","payment required","payment_required","spending limit","exceeded your current quota"],gr={authentication:"Check the API key, or sign in again",unsupported_model:"Check the model id, or choose a model this endpoint serves",rate_limit:"Wait and retry; the request was not processed",context_overflow:"Shorten the conversation or tool output, or choose a model with a larger context window",safety_refusal:"Rephrase the request; the provider's safety policy refused it",timeout:"Retry; the provider did not answer in time",server:"Retry later; the provider reported a fault on its side",unsupported_capability:"The provider refused the request's shape; check the named field, tool schema or parameter"};function Me(e,t){return t.some(n=>e.includes(n))}function Pe(e){let t=[...e.secrets??[]],n=pr(e.body).trim(),r=mr(e.body),o=`${n} ${r??""}`.toLowerCase(),i=D(n,t),s=r&&!i.includes(r)?` [${r}]`:"",d=` (${e.source==="stream"?"stream error event":`HTTP ${e.statusCode}`})${i?`: ${i.slice(0,1e3)}`:""}${s}`,u={providerId:e.providerId,...e.source==="stream"?{}:{statusCode:e.statusCode},retryAfterMs:e.retryAfterMs,requestId:e.requestId,...r?{providerCode:r}:{}},l=yr(e.statusCode,o,d,u),c=l.remedy??gr[l.category],m=c?`${l.message}. ${c}.`:l.message;return O(new b(m,{...u,category:l.category,code:l.code,retryable:l.retryable,...c?{remedy:c}:{}}),t)}function yr(e,t,n,r){let o={statusCode:e};return o.statusCode===402||Me(t,fr)?new b(`Provider refused the request for billing: the account is out of credits or over its spending limit${n}`,{...r,remedy:"Add credits or raise the spending limit, then retry",category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):o.statusCode===401?new b(`Provider authentication failed${n}`,{...r,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):o.statusCode===403?new b(`Provider authorization failed${n}`,{...r,category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):Me(t,["api key not valid","invalid api key","api key expired","api_key_invalid","invalid authentication credentials","missing api key"])?new b(`Provider authentication failed${n}`,{...r,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):o.statusCode===429?new b(`Provider rate limit reached${n}`,{...r,category:"rate_limit",code:"PROVIDER_RATE_LIMITED",retryable:!0}):Lt(t)?new b(`Provider context window exceeded${n}`,{...r,category:"context_overflow",code:"PROVIDER_CONTEXT_OVERFLOW"}):Me(t,["safety","content policy","blocked_reason","responsible_ai_policy_violation"])?new b(`Provider safety policy refused the request${n}`,{...r,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):o.statusCode===404||Me(t,["model not found","model does not exist","unsupported model","unknown provider for model"])?new b(`Provider model is unavailable${n}`,{...r,category:"unsupported_model",code:"PROVIDER_MODEL_UNSUPPORTED"}):o.statusCode===408||o.statusCode===504?new b(`Provider request timed out${n}`,{...r,category:"timeout",code:"PROVIDER_TIMEOUT",retryable:!0}):o.statusCode>=500||o.statusCode===409||o.statusCode===425?new b(`Provider server error${n}`,{...r,category:"server",code:"PROVIDER_SERVER_ERROR",retryable:!0}):new b(`Provider rejected the request${n}`,{...r,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}var hr={overloaded_error:529,overloaded:529,api_error:500,server_error:500,internal_error:500,internal:500,unavailable:503,service_unavailable:503,rate_limit_error:429,rate_limit_exceeded:429,resource_exhausted:429,authentication_error:401,invalid_api_key:401,unauthenticated:401,permission_error:403,permission_denied:403,not_found_error:404,model_not_found:404,not_found:404,invalid_request_error:400,invalid_argument:400,request_too_large:413,deadline_exceeded:504,timeout:504};function te(e){let t=e.error&&typeof e.error=="object"?e.error:{},n=[t.type,t.code,t.status].find(a=>typeof a=="string"),o=[t.code,t.status,t.status_code].find(a=>typeof a=="number"&&Number.isInteger(a)&&a>=400&&a<600)??(n?hr[n.toLowerCase()]:void 0)??500,i=typeof e.error=="string"?{error:e.error}:{error:t},s=Pe({providerId:e.providerId,statusCode:o,body:i,source:"stream",...e.secrets?{secrets:e.secrets}:{}});return!e.outputSeen||!s.retryable?s:O(new b(`${s.message} The stream failed after part of the answer was delivered, so it is not retried automatically`,{providerId:s.providerId,category:s.category,code:s.code,retryable:!1,...s.providerCode?{providerCode:s.providerCode}:{},...s.remedy?{remedy:s.remedy}:{}}),e.secrets??[])}function g(e,t,n){return new b(`Malformed ${e} response: ${t}`,{providerId:e,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",...n!==void 0?{cause:n}:{}})}function q(e,t){return ue("xeno.provider.capability_mismatches",1,{component:"provider_contract",provider:e,capability:t,error_code:"provider_capability_unsupported"}),new b(`${e} does not advertise the required ${t} capability`,{providerId:e,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}function Ne(e){let t=[...e.secrets??[]],n=e.text;try{n=e.text.trim()?JSON.parse(e.text):{}}catch{}let r=$e(e.retryAfter??null),o=Pe({providerId:e.providerId,statusCode:e.statusCode,body:n,...r!==void 0?{retryAfterMs:r}:{},secrets:t});return O(new b(`${e.prefix} (HTTP ${e.statusCode}): ${D(e.text,t)}`,{providerId:e.providerId,statusCode:e.statusCode,category:o.category,code:o.code,retryable:o.retryable,...r!==void 0?{retryAfterMs:r}:{},...o.providerCode?{providerCode:o.providerCode}:{},...o.remedy?{remedy:o.remedy}:{}}),t)}function De(e,t,n=[]){let r=[...n];if(t instanceof b)return O(t,r);let o=t instanceof Error?O(t,r):t,i=D(t instanceof Error?t.message:String(t),r),s=t instanceof Error&&t.name==="AbortError";return O(new b(i,{providerId:e,category:s?"timeout":"transport",code:s?"PROVIDER_TIMEOUT":"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:o}),r)}var X="legacy-chat";function rt(e,t=[]){let n=[...t],r=e instanceof Error?O(e,n):e;return O(new b(D(e instanceof Error?e.message:String(e),n),{providerId:X,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",retryable:!1,cause:r}),n)}async function*$t(e,t=[]){let n=[...t],r=e.getReader(),o=new TextDecoder,i="",s=!1,a=!1;try{for(;;){let d;try{d=await r.read()}catch(l){let c=l instanceof Error?O(l,n):l;throw O(new b(s?"The model's response stream was cut off part-way through its answer":D(l instanceof Error?l.message:String(l),n),{providerId:X,category:s?"disconnect":"transport",code:s?"PROVIDER_DISCONNECTED":"PROVIDER_TRANSPORT_ERROR",retryable:!s,cause:c}),n)}if(d.done)break;i+=o.decode(d.value,{stream:!0});let u=i.split(`
|
|
2
|
-
`);i=u.pop()??"";for(let l of u){let c=l.trim();if(!c||!c.startsWith("data:"))continue;let m=c.slice(5).trim();if(m==="[DONE]")return;let p;try{let y=JSON.parse(m);if(!y||typeof y!="object"||Array.isArray(y))continue;p=y}catch{continue}if(p.error!==void 0&&p.error!==null)throw te({providerId:X,error:p.error,outputSeen:s,secrets:n});(Array.isArray(p.choices)?p.choices:[]).some(y=>typeof y?.finish_reason=="string"&&y.finish_reason)&&(a=!0),s=!0,yield p}}}finally{r.cancel().catch(()=>{})}if(!a)throw new b("The model's response stream ended without a finish reason or end-of-stream marker",{providerId:X,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",retryable:!1})}var
|
|
3
|
-
`).trim();o.length>0&&t.push({role:n.role,content:o})}return t}var
|
|
1
|
+
var er=1;var tr=12,nr=128,rr=/^xeno\.[a-z0-9]+(?:[._][a-z0-9]+)*$/u,or=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/u,ir=/(?:[\\/]|@|https?:|bearer|token|secret|password|credential|api[_-]?key|[0-9a-f]{8}-[0-9a-f-]{27,})/iu,sr=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"]),At=new Set,It=new Map;function ar(e){let t=e.trim().toLowerCase();return!t||t.length>64||ir.test(t)||!or.test(t)?null:t}function dr(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=ar(t);if(!n)return null;let r=It.get(e);return r||(r=new Set,It.set(e,r)),!r.has(n)&&r.size>=nr?"other":(r.add(n),n)}function cr(e={}){let t={};for(let[n,r]of Object.entries(e)){if(Object.keys(t).length>=tr)break;if(!sr.has(n))continue;let o=dr(n,r);o!==null&&(t[n]=o)}return Object.freeze(t)}function Lt(e){if(At.size===0||!rr.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:er,kind:e.kind,name:e.name,value:Math.min(t,Number.MAX_SAFE_INTEGER),timestamp:(e.timestamp??new Date).toISOString(),attributes:cr(e.attributes)});for(let r of At)try{r(n)}catch{}}function ue(e,t=1,n){Lt({kind:"counter",name:e,value:t,attributes:n})}function tt(e,t,n){Lt({kind:"histogram",name:e,value:t,attributes:n})}var lr=["context length","context window","maximum context","too many tokens","request too large"];function Ot(e){let t=e.toLowerCase();return lr.some(n=>t.includes(n))}var Q="[redacted]";var ur=new Set(["authorization","proxy-authorization","x-api-key","x-goog-api-key","api-key","apikey","x-xeno-api-key","dpop","cookie","set-cookie"]),pr=new Set(["content-type","accept","accept-encoding","connection","content-length","user-agent","anthropic-version","anthropic-beta","openai-beta","x-stainless-lang"]),mr=/^(?:access_token|refresh_token|id_token|token|key|api[_-]?key|secret|client_secret|password|signature|sig|auth|code)$/i,fr=[[/-----BEGIN [A-Z ]*PRIVATE KEY-----[\s\S]*?(?:-----END [A-Z ]*PRIVATE KEY-----|$)/g,"[redacted:private-key]"],[/((?:^|[\s{,;"'(\[])["']?(?:cookie|set-cookie)["']?\s*[:=]\s*["']?)(?!\[redacted)[^\s"',;]+(?:;\s*[^\s"',;=]+=[^\s"',;]*)*/gi,`$1${Q}`],[/((?:^|[\s{,;"'(\[])["']?(?:authorization|proxy-authorization|x-api-key|x-goog-api-key|x-xeno-api-key|api[-_]?key|apikey|dpop)["']?\s*[:=]\s*["']?)(?:(?:Bearer|Basic|Token|DPoP)\s+)?(?!\[redacted)[^\s"',;]+/gi,`$1${Q}`],[/\b(Bearer|Basic|Token|DPoP)\s+[A-Za-z0-9._~+/=-]{6,}/gi,`$1 ${Q}`],[/\b(?:sk-(?:ant-|proj-)?[A-Za-z0-9_-]{16,}|xeno-[A-Za-z0-9]{24,}|xrun_[A-Za-z0-9_-]{8,}|AIza[0-9A-Za-z_-]{30,}|gh[pousr]_[A-Za-z0-9_]{20,}|github_pat_[A-Za-z0-9_]{20,}|npm_[A-Za-z0-9]{30,}|xox[baprs]-[A-Za-z0-9-]{16,}|AKIA[0-9A-Z]{16})\b/g,Q],[/\beyJ[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}/g,Q],[/([?&#;](?:access_token|refresh_token|id_token|token|key|api[_-]?key|secret|client_secret|password|signature|sig)=)[^&#\s"'<>]+/gi,`$1${Q}`],[/(\b[a-z][a-z0-9+.-]*:\/\/)[^/\s:@"']+:[^/\s@"']+@/gi,`$1${Q}@`]];function Mt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function $t(e){let t=new Set,n=i=>{if(typeof i!="string")return;let s=i.trim();if(s.length<12)return;t.add(s);let a=/^(?:Bearer|Basic|Token|DPoP)\s+(.+)$/i.exec(s);a?.[1]&&a[1].trim().length>=12&&t.add(a[1].trim())},r=(i,s)=>{let a=i.trim().toLowerCase();pr.has(a)||(ur.has(a)||!a.startsWith("x-xeno-"))&&n(s)},o=e.headers;if(o)if(typeof Headers<"u"&&o instanceof Headers)o.forEach((i,s)=>r(s,i));else if(Array.isArray(o))for(let[i,s]of o)r(String(i),String(s));else for(let[i,s]of Object.entries(o))typeof s=="string"&&r(i,s);if(e.url)try{let i=typeof e.url=="string"?new URL(e.url):e.url;i.searchParams.forEach((s,a)=>{mr.test(a)&&n(s)}),i.password&&n(decodeURIComponent(i.password))}catch{}for(let i of e.extra??[])n(i??void 0);return[...t]}function D(e,t=[]){if(!e)return e;let n=e,r=[...new Set([...t].filter(o=>typeof o=="string"&&o.length>=12))].sort((o,i)=>i.length-o.length);for(let o of r){n=n.replace(new RegExp(`(?<![A-Za-z0-9_-])${Mt(o)}(?![A-Za-z0-9_-])`,"g"),Q);let i=encodeURIComponent(o);i!==o&&(n=n.replace(new RegExp(`(?<![A-Za-z0-9_-])${Mt(i)}(?![A-Za-z0-9_-])`,"g"),Q))}for(let[o,i]of fr)o.lastIndex=0,n=n.replace(o,i);return n}function nt(e,t,n){try{Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0,enumerable:!1})}catch{}}function O(e,t=[],n=0){if(!(e instanceof Error)||n>6)return e;let r=[...t],o=D(e.message,r);if(o!==e.message&&nt(e,"message",o),typeof e.stack=="string"){let s=D(e.stack,r);s!==e.stack&&nt(e,"stack",s)}let i=e.cause;if(i instanceof Error)O(i,r,n+1);else if(i!=null){let s;try{s=typeof i=="string"?i:JSON.stringify(i)??String(i)}catch{s=String(i)}let a=D(s,r);a!==s&&nt(e,"cause",a)}for(let s of Object.keys(e)){let a=e[s];if(typeof a=="string"){let d=D(a,r);if(d!==a)try{e[s]=d}catch{}}}return e}var b=class extends Error{category;code;retryable;providerId;statusCode;retryAfterMs;requestId;providerCode;remedy;constructor(t,n){super(D(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,n.providerCode!==void 0&&(this.providerCode=n.providerCode),n.remedy!==void 0&&(this.remedy=n.remedy),O(this)}};function $e(e,t=Date.now()){if(!e)return;let n=Number(e.trim());if(Number.isFinite(n)&&n>=0)return Math.ceil(n*1e3);let r=Date.parse(e);if(Number.isFinite(r))return Math.max(0,r-t)}function gr(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 yr(e){if(!e||typeof e!="object")return;let t=e,n=t.error&&typeof t.error=="object"?t.error:void 0;for(let r of[n?.code,n?.type,t.code,t.type])if(typeof r=="string"&&/^[A-Za-z][A-Za-z0-9_.:-]{1,63}$/.test(r))return r}var hr=["insufficient credit","insufficient_credit","insufficient funds","insufficient_quota","out of credit","credit balance","payment required","payment_required","spending limit","exceeded your current quota"],br={authentication:"Check the API key, or sign in again",unsupported_model:"Check the model id, or choose a model this endpoint serves",rate_limit:"Wait and retry; the request was not processed",context_overflow:"Shorten the conversation or tool output, or choose a model with a larger context window",safety_refusal:"Rephrase the request; the provider's safety policy refused it",timeout:"Retry; the provider did not answer in time",server:"Retry later; the provider reported a fault on its side",unsupported_capability:"The provider refused the request's shape; check the named field, tool schema or parameter"};function Me(e,t){return t.some(n=>e.includes(n))}function Pe(e){let t=[...e.secrets??[]],n=gr(e.body).trim(),r=yr(e.body),o=`${n} ${r??""}`.toLowerCase(),i=D(n,t),s=r&&!i.includes(r)?` [${r}]`:"",d=` (${e.source==="stream"?"stream error event":`HTTP ${e.statusCode}`})${i?`: ${i.slice(0,1e3)}`:""}${s}`,u={providerId:e.providerId,...e.source==="stream"?{}:{statusCode:e.statusCode},retryAfterMs:e.retryAfterMs,requestId:e.requestId,...r?{providerCode:r}:{}},l=wr(e.statusCode,o,d,u),c=l.remedy??br[l.category],m=c?`${l.message}. ${c}.`:l.message;return O(new b(m,{...u,category:l.category,code:l.code,retryable:l.retryable,...c?{remedy:c}:{}}),t)}function wr(e,t,n,r){let o={statusCode:e};return o.statusCode===402||Me(t,hr)?new b(`Provider refused the request for billing: the account is out of credits or over its spending limit${n}`,{...r,remedy:"Add credits or raise the spending limit, then retry",category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):o.statusCode===401?new b(`Provider authentication failed${n}`,{...r,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):o.statusCode===403?new b(`Provider authorization failed${n}`,{...r,category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):Me(t,["api key not valid","invalid api key","api key expired","api_key_invalid","invalid authentication credentials","missing api key"])?new b(`Provider authentication failed${n}`,{...r,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):o.statusCode===429?new b(`Provider rate limit reached${n}`,{...r,category:"rate_limit",code:"PROVIDER_RATE_LIMITED",retryable:!0}):Ot(t)?new b(`Provider context window exceeded${n}`,{...r,category:"context_overflow",code:"PROVIDER_CONTEXT_OVERFLOW"}):Me(t,["safety","content policy","blocked_reason","responsible_ai_policy_violation"])?new b(`Provider safety policy refused the request${n}`,{...r,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):o.statusCode===404||Me(t,["model not found","model does not exist","unsupported model","unknown provider for model"])?new b(`Provider model is unavailable${n}`,{...r,category:"unsupported_model",code:"PROVIDER_MODEL_UNSUPPORTED"}):o.statusCode===408||o.statusCode===504?new b(`Provider request timed out${n}`,{...r,category:"timeout",code:"PROVIDER_TIMEOUT",retryable:!0}):o.statusCode>=500||o.statusCode===409||o.statusCode===425?new b(`Provider server error${n}`,{...r,category:"server",code:"PROVIDER_SERVER_ERROR",retryable:!0}):new b(`Provider rejected the request${n}`,{...r,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}var vr={overloaded_error:529,overloaded:529,api_error:500,server_error:500,internal_error:500,internal:500,unavailable:503,service_unavailable:503,rate_limit_error:429,rate_limit_exceeded:429,resource_exhausted:429,authentication_error:401,invalid_api_key:401,unauthenticated:401,permission_error:403,permission_denied:403,not_found_error:404,model_not_found:404,not_found:404,invalid_request_error:400,invalid_argument:400,request_too_large:413,deadline_exceeded:504,timeout:504};function te(e){let t=e.error&&typeof e.error=="object"?e.error:{},n=[t.type,t.code,t.status].find(a=>typeof a=="string"),o=[t.code,t.status,t.status_code].find(a=>typeof a=="number"&&Number.isInteger(a)&&a>=400&&a<600)??(n?vr[n.toLowerCase()]:void 0)??500,i=typeof e.error=="string"?{error:e.error}:{error:t},s=Pe({providerId:e.providerId,statusCode:o,body:i,source:"stream",...e.secrets?{secrets:e.secrets}:{}});return!e.outputSeen||!s.retryable?s:O(new b(`${s.message} The stream failed after part of the answer was delivered, so it is not retried automatically`,{providerId:s.providerId,category:s.category,code:s.code,retryable:!1,...s.providerCode?{providerCode:s.providerCode}:{},...s.remedy?{remedy:s.remedy}:{}}),e.secrets??[])}function g(e,t,n){return new b(`Malformed ${e} response: ${t}`,{providerId:e,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",...n!==void 0?{cause:n}:{}})}function q(e,t){return ue("xeno.provider.capability_mismatches",1,{component:"provider_contract",provider:e,capability:t,error_code:"provider_capability_unsupported"}),new b(`${e} does not advertise the required ${t} capability`,{providerId:e,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}function Ne(e){let t=[...e.secrets??[]],n=e.text;try{n=e.text.trim()?JSON.parse(e.text):{}}catch{}let r=$e(e.retryAfter??null),o=Pe({providerId:e.providerId,statusCode:e.statusCode,body:n,...r!==void 0?{retryAfterMs:r}:{},secrets:t});return O(new b(`${e.prefix} (HTTP ${e.statusCode}): ${D(e.text,t)}`,{providerId:e.providerId,statusCode:e.statusCode,category:o.category,code:o.code,retryable:o.retryable,...r!==void 0?{retryAfterMs:r}:{},...o.providerCode?{providerCode:o.providerCode}:{},...o.remedy?{remedy:o.remedy}:{}}),t)}function De(e,t,n=[]){let r=[...n];if(t instanceof b)return O(t,r);let o=t instanceof Error?O(t,r):t,i=D(t instanceof Error?t.message:String(t),r),s=t instanceof Error&&t.name==="AbortError";return O(new b(i,{providerId:e,category:s?"timeout":"transport",code:s?"PROVIDER_TIMEOUT":"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:o}),r)}var X="legacy-chat";function rt(e,t=[]){let n=[...t],r=e instanceof Error?O(e,n):e;return O(new b(D(e instanceof Error?e.message:String(e),n),{providerId:X,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",retryable:!1,cause:r}),n)}async function*Nt(e,t=[]){let n=[...t],r=e.getReader(),o=new TextDecoder,i="",s=!1,a=!1;try{for(;;){let d;try{d=await r.read()}catch(l){let c=l instanceof Error?O(l,n):l;throw O(new b(s?"The model's response stream was cut off part-way through its answer":D(l instanceof Error?l.message:String(l),n),{providerId:X,category:s?"disconnect":"transport",code:s?"PROVIDER_DISCONNECTED":"PROVIDER_TRANSPORT_ERROR",retryable:!s,cause:c}),n)}if(d.done)break;i+=o.decode(d.value,{stream:!0});let u=i.split(`
|
|
2
|
+
`);i=u.pop()??"";for(let l of u){let c=l.trim();if(!c||!c.startsWith("data:"))continue;let m=c.slice(5).trim();if(m==="[DONE]")return;let p;try{let y=JSON.parse(m);if(!y||typeof y!="object"||Array.isArray(y))continue;p=y}catch{continue}if(p.error!==void 0&&p.error!==null)throw te({providerId:X,error:p.error,outputSeen:s,secrets:n});(Array.isArray(p.choices)?p.choices:[]).some(y=>typeof y?.finish_reason=="string"&&y.finish_reason)&&(a=!0),s=!0,yield p}}}finally{r.cancel().catch(()=>{})}if(!a)throw new b("The model's response stream ended without a finish reason or end-of-stream marker",{providerId:X,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",retryable:!1})}var Li=Object.freeze({"x-xeno-source":Object.freeze(["auto","quota","credits","byok"]),"x-xeno-byok-mode":Object.freeze(["local","cloud"])});var Dt="",qt="https://api.xenostudio.ai";var Di=300*1e3;function jt(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=Pr(r);if(i){let l="";for await(let c of e.chatStream({model:n,messages:a})){if(s?.aborted)break;l+=c,i(c)}return{content:l.length>0?[{type:"text",text:l}]:[],stopReason:"end_turn",usageReported:!1,inputTokens:0,outputTokens:0}}let d=await e.chat({model:n,messages:a});return{content:d.content.length>0?[{type:"text",text:d.content}]:[],stopReason:"end_turn",usageReported:typeof d.usage?.promptTokens=="number",inputTokens:d.usage?.promptTokens??0,outputTokens:d.usage?.completionTokens??0}}}}function Pr(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(`
|
|
3
|
+
`).trim();o.length>0&&t.push({role:n.role,content:o})}return t}var xr="http://localhost:3338",_r=qt,Cr=2e3,ot=12e4,Rr=3e4;function Bt(e){return e instanceof b?{errorCode:e.code,errorCategory:e.category,retryable:e.retryable,...e.statusCode!==void 0?{statusCode:e.statusCode}:{}}:{}}var it=class{localUrl;cloudUrl;cloudApiKey;mode;defaultLocalModel;defaultCloudModel;localAvailable=null;localModelName=null;lastHealthCheck=0;constructor(t){this.localUrl=t?.localUrl??xr,this.cloudUrl=t?.cloudUrl??_r,this.cloudApiKey=t?.cloudApiKey??process.env.XENO_API_KEY??(Dt||""),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),...Bt(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 d=new AbortController,u=setTimeout(()=>d.abort(),ot),l=[this.cloudApiKey];try{let c;try{c=await fetch(`${r}/v1/chat/completions`,{method:"POST",headers:a,body:JSON.stringify(s),signal:d.signal})}catch(m){throw De(X,m,l)}if(!c.ok){let m=await c.text().catch(()=>"");throw Ne({providerId:X,prefix:"LLM stream failed",statusCode:c.status,text:m,retryAfter:c.headers.get("retry-after"),secrets:l})}if(!c.body)throw new Error("Response body is null \u2014 streaming not supported");for await(let m of Nt(c.body,l)){let f=m.choices?.[0]?.delta?.content;f&&(yield f)}}finally{clearTimeout(u)}}async isLocalAvailable(t=!1){let n=Date.now();if(!t&&this.localAvailable!==null&&n-this.lastHealthCheck<Rr)return this.localAvailable;try{let r=new AbortController,o=setTimeout(()=>r.abort(),Cr);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 jt(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(),ot),a=[this.cloudApiKey];try{let d;try{d=await fetch(`${this.localUrl}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o),signal:i.signal})}catch(f){throw De(X,f,a)}if(!d.ok){let f=await d.text().catch(()=>"");throw Ne({providerId:X,prefix:"Local LLM request failed",statusCode:d.status,text:f,retryAfter:d.headers.get("retry-after"),secrets:a})}let u;try{u=await d.json()}catch(f){throw rt(f,a)}let m=(u.choices?.[0]??{}).message??{},p=u.usage??{};return{success:!0,content:String(m.content??""),endpoint:"local",model:String(u.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(),ot),d=[this.cloudApiKey];try{let u;try{u=await fetch(`${this.cloudUrl}/v1/chat/completions`,{method:"POST",headers:i,body:JSON.stringify(o),signal:s.signal})}catch(y){throw De(X,y,d)}if(!u.ok){let y=await u.text().catch(()=>""),h=`Cloud LLM request failed (HTTP ${u.status})`;try{let x=JSON.parse(y).error;h=typeof x=="string"?x:x?.message??h}catch{}let P=Ne({providerId:X,prefix:"Cloud LLM request failed",statusCode:u.status,text:y,retryAfter:u.headers.get("retry-after"),secrets:d});return{success:!1,content:"",endpoint:"cloud",model:n,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:D(h,d),...Bt(P)}}let l;try{l=await u.json()}catch(y){throw rt(y,d)}let p=(l.choices?.[0]??{}).message??{},f=l.usage??{};return{success:!0,content:String(p.content??""),endpoint:"cloud",model:String(l.model??n),usage:{promptTokens:f.prompt_tokens??0,completionTokens:f.completion_tokens??0,totalTokens:f.total_tokens??0}}}finally{clearTimeout(a)}}};import{randomUUID as vt}from"node:crypto";function Tr(e){return/^data:([^;,]+)[;,]/i.exec(e.trim())?.[1]}function kr(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 ${Tr(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 xe(e){return typeof e=="string"?e:Cr(e)}import{performance as dt}from"node:perf_hooks";import{lookup as Rr}from"node:dns/promises";import{isIP as qe}from"node:net";var Xt=new Set(["metadata.google.internal","metadata.azure.internal","instance-data.ec2.internal"]);function $(e){return new b(`Provider endpoint rejected: ${e}`,{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"})}function Tr(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 Ut(e){let t=Tr(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 pe(e){let t=e.toLowerCase().replace(/^\[|\]$/g,"").split("%")[0];qe(t)===6&&(t=new URL(`http://[${t}]`).hostname.slice(1,-1));let n=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(t);if(n){let r=Number.parseInt(n[1],16),o=Number.parseInt(n[2],16);return`${r>>8}.${r&255}.${o>>8}.${o&255}`}return t}function Jt(e){let t=pe(e);return qe(t)===4?Ut(t):t==="::"||t==="::0"?"unspecified":t==="::1"?"loopback":t.startsWith("::ffff:")?Ut(t.slice(7)):/^f[cd]/.test(t)?"private":/^fe[89ab]/.test(t)?"link-local":"public"}function Bt(e){return e==="example"||e.endsWith(".example")||e==="test"||e.endsWith(".test")||e==="invalid"||e.endsWith(".invalid")}function kr(e){return e==="localhost"||e.endsWith(".localhost")}function me(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(Xt.has(n.hostname.toLowerCase()))throw $("cloud metadata destinations are forbidden");if(n.protocol!=="https:"&&n.protocol!=="http:")throw $(`scheme ${n.protocol} is unsupported`);let r=t.profile??"public-https";if(n.protocol==="http:"&&r!=="local-network")throw $("plain HTTP requires the explicit local-network profile");let o=n.hostname.replace(/^\[|\]$/g,""),i=qe(o)?Jt(o):null;if(i==="link-local"||i==="unspecified")throw $(`${i} destinations are forbidden`);if(r==="public-https"&&(i==="private"||i==="loopback"||kr(n.hostname)))throw $("private and loopback destinations require the local-network profile");if(r==="local-network"&&n.protocol==="http:"&&i==="public"&&!t.allowedHosts?.includes(n.hostname))throw $("local-network HTTP must resolve to loopback or a private address");return n}async function st(e,t={}){await at(e,t)}async function at(e,t={}){let n=e.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Xt.has(n))throw $("cloud metadata destinations are forbidden");let r=new Set((t.allowedHosts??[]).map(s=>s.toLowerCase())),o=qe(n)?[n]:Bt(n)?[]:t.resolveHostname?await t.resolveHostname(n):(await Rr(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!o.length&&!Bt(n))throw $("DNS resolution returned no addresses");let i=t.profile??"public-https";for(let s of o){let a=Jt(s);if(a==="link-local"||a==="unspecified")throw $(`DNS resolved to a forbidden ${a} address`);if(i==="public-https"&&a!=="public"&&!r.has(n))throw $(`DNS resolved public endpoint to ${a} address ${s}`);if(i==="local-network"&&e.protocol==="http:"&&a==="public"&&!r.has(n))throw $(`local-network HTTP resolved to public address ${s}`)}return o}import{request as Er}from"node:http";import{request as Sr}from"node:https";import{isIP as Vt}from"node:net";import{once as Ar}from"node:events";function zt(e,t,n){return{dispatch(r,o){let i,s=!1,a=c=>{s||(s=!0,i?.destroy(),o.onError(c))},d=t[0];if(!d||!Vt(d)||new URL(r.origin).origin!==e.origin)return queueMicrotask(()=>a(new Error("Provider connection has no authorized pinned address"))),!0;let u=r.headers??{},l=(e.protocol==="https:"?Sr:Er)(new URL(r.path,e.origin),{method:r.method,headers:u,agent:!1,rejectUnauthorized:!0,lookup:(c,m,p)=>{let f={address:d,family:Vt(d)};typeof m=="object"&&m.all?p(null,[f]):p(null,d,f.family)}},c=>{i=c;let m=c.rawHeaders.map(f=>Buffer.from(f)),p=()=>c.resume();o.onHeaders(c.statusCode??500,m,p,c.statusMessage??"")===!1&&c.pause(),c.on("data",f=>{o.onData(f)||c.pause()}),c.on("end",()=>{s||(s=!0,o.onComplete(c.rawTrailers.map(f=>Buffer.from(f))))}),c.on("error",a),c.on("aborted",()=>a(new Error("Provider response was interrupted")))});return l.on("socket",c=>{c.once("connect",()=>{if(!c.remoteAddress||pe(c.remoteAddress)!==pe(d)){l.destroy(new Error("Provider socket did not connect to its authorized address"));return}e.protocol==="http:"&&n?.()}),e.protocol==="https:"&&c.once("secureConnect",()=>{c.authorized&&c.remoteAddress&&pe(c.remoteAddress)===pe(d)&&n?.()})}),l.on("error",a),o.onConnect(c=>l.destroy(c??new Error("Provider request aborted"))),(async()=>{try{let c=r.body;if(typeof c=="string"||c instanceof Uint8Array)l.end(c);else{if(c)for await(let m of c){if(l.destroyed)return;l.write(m)||await Ar(l,"drain")}l.end()}}catch(c){l.destroy(c instanceof Error?c:new Error("Provider request body failed"))}})(),!0}}}var fe={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function Ir(e={}){for(let[t,n]of Object.entries(e))if(n!==void 0&&(!Number.isSafeInteger(n)||n<1))throw g("provider-transport",`${t} must be a positive safe integer`);return{connectTimeoutMs:Math.max(100,e.connectTimeoutMs??fe.connectTimeoutMs),totalTimeoutMs:Math.max(100,e.totalTimeoutMs??fe.totalTimeoutMs),idleTimeoutMs:Math.max(100,e.idleTimeoutMs??fe.idleTimeoutMs),maxResponseBytes:Math.max(1024,e.maxResponseBytes??fe.maxResponseBytes),maxHeaderBytes:Math.max(1024,e.maxHeaderBytes??fe.maxHeaderBytes),maxEventBytes:Math.max(1024,e.maxEventBytes??fe.maxEventBytes)}}async function _e(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 je(e,t,n,r){try{return e.decode(t,{stream:n})}catch{throw g(r,"response is not valid UTF-8")}}function ct(e,t,n){let r=new b(t==="cancelled"?"Provider request was cancelled":"Provider request timed out",{providerId:e,category:t,code:t==="cancelled"?"PROVIDER_CANCELLED":"PROVIDER_TIMEOUT",retryable:!1,...n!==void 0?{cause:n}:{}});return t==="cancelled"&&(r.name="AbortError"),r}function Lr(e){let t=0;return e.forEach((n,r)=>{t+=Buffer.byteLength(r)+Buffer.byteLength(n)+4}),t}async function Ht(e,t,n,r){if(!e.body)return"";let o=e.body.getReader(),i=new TextDecoder("utf-8",{fatal:!0}),s=0,a="",d,u=()=>{d&&clearTimeout(d),d=setTimeout(()=>r.abort("idle-timeout"),n.idleTimeoutMs)};u();try{for(;;){let{value:l,done:c}=await _e(o.read(),r.signal);if(c)break;if(u(),s+=l.byteLength,s>n.maxResponseBytes)throw g(t,`response exceeded ${n.maxResponseBytes} bytes`);a+=je(i,l,!0,t)}return a+=je(i,void 0,!1,t),a}finally{d&&clearTimeout(d),o.cancel().catch(()=>{}),o.releaseLock()}}async function Ft(e,t,n,r,o={delivered:!1}){let i=dt.now(),s=Ir(n.limits),a=Mt({headers:t.headers,url:e});ue("xeno.provider.requests",1,{component:"provider_transport",provider:n.providerId,transport:"http"});let d=new AbortController,u=null,l=t.signal,c=()=>d.abort("caller");if(l?.aborted)throw ct(n.providerId,"cancelled");l?.addEventListener("abort",c,{once:!0});let m=setTimeout(()=>{u="total",d.abort("total-timeout")},s.totalTimeoutMs),p=setTimeout(()=>{u="connect",d.abort("connect-timeout")},s.connectTimeoutMs),f;try{let y=await _e(at(e,n.endpointPolicy),d.signal);if(d.signal.aborted)throw new Error("Provider request aborted before dispatch");let h={...t,signal:d.signal,redirect:"manual",dispatcher:zt(e,y,()=>clearTimeout(p))},P=fetch(e,h);P.then(R=>{d.signal.aborted&&R.body?.cancel().catch(()=>{})},()=>{});let v=await _e(P,d.signal);if(f=v,clearTimeout(p),Lr(v.headers)>s.maxHeaderBytes)throw g(n.providerId,`response headers exceeded ${s.maxHeaderBytes} bytes`);if(v.redirected||v.status>=300&&v.status<400)throw new b("Provider redirects are disabled",{providerId:n.providerId,category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED",statusCode:v.status});let x=v.headers.get("content-length");if(x&&/^\d+$/.test(x)&&Number(x)>s.maxResponseBytes)throw g(n.providerId,`response exceeded ${s.maxResponseBytes} bytes`);if(!v.ok){let R=await Ht(v,n.providerId,s,d),I=R;try{I=R?JSON.parse(R):{}}catch{}throw Pe({providerId:n.providerId,statusCode:v.status,body:I,retryAfterMs:$e(v.headers.get("retry-after")),requestId:v.headers.get("request-id")??v.headers.get("x-request-id")??void 0,secrets:a})}let w=await _e(r(v,d,s),d.signal);return ue("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),tt("xeno.provider.request_duration_ms",dt.now()-i,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),w}catch(y){let h;throw y instanceof b?h=y:l?.aborted||d.signal.reason==="caller"?h=ct(n.providerId,"cancelled",y):u||d.signal.reason==="idle-timeout"?h=ct(n.providerId,"timeout",y):h=new b("Provider transport failed",{providerId:n.providerId,category:"transport",code:"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:y}),o.delivered&&h.retryable&&!(y instanceof b)&&(h=new b(`${h.message}; the stream was cut off after part of the answer was delivered, so it is not retried automatically`,{...h.providerId!==void 0?{providerId:h.providerId}:{},...h.statusCode!==void 0?{statusCode:h.statusCode}:{},...h.requestId!==void 0?{requestId:h.requestId}:{},...h.providerCode!==void 0?{providerCode:h.providerCode}:{},...h.remedy!==void 0?{remedy:h.remedy}:{},category:h.category,code:h.code,retryable:!1,cause:h.cause??h})),O(h,a),d.abort("request-failed"),f?.body&&!f.body.locked&&f.body.cancel().catch(()=>{}),ue("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:h.category,error_code:h.code}),tt("xeno.provider.request_duration_ms",dt.now()-i,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:h.category}),h}finally{clearTimeout(p),clearTimeout(m),l?.removeEventListener("abort",c)}}async function ge(e,t,n){return Ft(e,t,n,async(r,o,i)=>{let s=await Ht(r,n.providerId,i,o),a;try{a=s?JSON.parse(s):{}}catch(d){throw g(n.providerId,"body is not valid JSON",d)}if(!a||typeof a!="object"||Array.isArray(a))throw g(n.providerId,"JSON body must be an object");return a})}async function Ce(e,t,n,r){let o={delivered:!1};return Ft(e,t,n,async(i,s,a)=>{if(!i.body)throw g(n.providerId,"stream response has no body");let d=i.body.getReader(),u=new TextDecoder("utf-8",{fatal:!0}),l="",c=0,m="message",p=[],f,y=()=>{f&&clearTimeout(f),f=setTimeout(()=>s.abort("idle-timeout"),a.idleTimeoutMs)},h=async()=>{if(p.length===0){m="message";return}let P=p.join(`
|
|
5
|
+
`).trim()}function xe(e){return typeof e=="string"?e:kr(e)}import{performance as dt}from"node:perf_hooks";import{lookup as Er}from"node:dns/promises";import{isIP as qe}from"node:net";var Jt=new Set(["metadata.google.internal","metadata.azure.internal","instance-data.ec2.internal"]);function $(e){return new b(`Provider endpoint rejected: ${e}`,{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"})}function Sr(e){let t=e.split(".");if(t.length!==4)return null;let n=t.map(r=>Number(r));return n.every(r=>Number.isInteger(r)&&r>=0&&r<=255)?n:null}function Ut(e){let t=Sr(e);if(!t)return"public";let[n,r]=t;return n===0?"unspecified":n===127?"loopback":n===169&&r===254?"link-local":n===10||n===172&&r>=16&&r<=31||n===192&&r===168?"private":"public"}function pe(e){let t=e.toLowerCase().replace(/^\[|\]$/g,"").split("%")[0];qe(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 Vt(e){let t=pe(e);return qe(t)===4?Ut(t):t==="::"||t==="::0"?"unspecified":t==="::1"?"loopback":t.startsWith("::ffff:")?Ut(t.slice(7)):/^f[cd]/.test(t)?"private":/^fe[89ab]/.test(t)?"link-local":"public"}function Xt(e){return e==="example"||e.endsWith(".example")||e==="test"||e.endsWith(".test")||e==="invalid"||e.endsWith(".invalid")}function Ar(e){return e==="localhost"||e.endsWith(".localhost")}function me(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(Jt.has(n.hostname.toLowerCase()))throw $("cloud metadata destinations are forbidden");if(n.protocol!=="https:"&&n.protocol!=="http:")throw $(`scheme ${n.protocol} is unsupported`);let r=t.profile??"public-https";if(n.protocol==="http:"&&r!=="local-network")throw $("plain HTTP requires the explicit local-network profile");let o=n.hostname.replace(/^\[|\]$/g,""),i=qe(o)?Vt(o):null;if(i==="link-local"||i==="unspecified")throw $(`${i} destinations are forbidden`);if(r==="public-https"&&(i==="private"||i==="loopback"||Ar(n.hostname)))throw $("private and loopback destinations require the local-network profile");if(r==="local-network"&&n.protocol==="http:"&&i==="public"&&!t.allowedHosts?.includes(n.hostname))throw $("local-network HTTP must resolve to loopback or a private address");return n}async function st(e,t={}){await at(e,t)}async function at(e,t={}){let n=e.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(Jt.has(n))throw $("cloud metadata destinations are forbidden");let r=new Set((t.allowedHosts??[]).map(s=>s.toLowerCase())),o=qe(n)?[n]:Xt(n)?[]:t.resolveHostname?await t.resolveHostname(n):(await Er(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!o.length&&!Xt(n))throw $("DNS resolution returned no addresses");let i=t.profile??"public-https";for(let s of o){let a=Vt(s);if(a==="link-local"||a==="unspecified")throw $(`DNS resolved to a forbidden ${a} address`);if(i==="public-https"&&a!=="public"&&!r.has(n))throw $(`DNS resolved public endpoint to ${a} address ${s}`);if(i==="local-network"&&e.protocol==="http:"&&a==="public"&&!r.has(n))throw $(`local-network HTTP resolved to public address ${s}`)}return o}import{request as Ir}from"node:http";import{request as Lr}from"node:https";import{isIP as zt}from"node:net";import{once as Or}from"node:events";function Ft(e,t,n){return{dispatch(r,o){let i,s=!1,a=c=>{s||(s=!0,i?.destroy(),o.onError(c))},d=t[0];if(!d||!zt(d)||new URL(r.origin).origin!==e.origin)return queueMicrotask(()=>a(new Error("Provider connection has no authorized pinned address"))),!0;let u=r.headers??{},l=(e.protocol==="https:"?Lr:Ir)(new URL(r.path,e.origin),{method:r.method,headers:u,agent:!1,rejectUnauthorized:!0,lookup:(c,m,p)=>{let f={address:d,family:zt(d)};typeof m=="object"&&m.all?p(null,[f]):p(null,d,f.family)}},c=>{i=c;let m=c.rawHeaders.map(f=>Buffer.from(f)),p=()=>c.resume();o.onHeaders(c.statusCode??500,m,p,c.statusMessage??"")===!1&&c.pause(),c.on("data",f=>{o.onData(f)||c.pause()}),c.on("end",()=>{s||(s=!0,o.onComplete(c.rawTrailers.map(f=>Buffer.from(f))))}),c.on("error",a),c.on("aborted",()=>a(new Error("Provider response was interrupted")))});return l.on("socket",c=>{c.once("connect",()=>{if(!c.remoteAddress||pe(c.remoteAddress)!==pe(d)){l.destroy(new Error("Provider socket did not connect to its authorized address"));return}e.protocol==="http:"&&n?.()}),e.protocol==="https:"&&c.once("secureConnect",()=>{c.authorized&&c.remoteAddress&&pe(c.remoteAddress)===pe(d)&&n?.()})}),l.on("error",a),o.onConnect(c=>l.destroy(c??new Error("Provider request aborted"))),(async()=>{try{let c=r.body;if(typeof c=="string"||c instanceof Uint8Array)l.end(c);else{if(c)for await(let m of c){if(l.destroyed)return;l.write(m)||await Or(l,"drain")}l.end()}}catch(c){l.destroy(c instanceof Error?c:new Error("Provider request body failed"))}})(),!0}}}var fe={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function Mr(e={}){for(let[t,n]of Object.entries(e))if(n!==void 0&&(!Number.isSafeInteger(n)||n<1))throw g("provider-transport",`${t} must be a positive safe integer`);return{connectTimeoutMs:Math.max(100,e.connectTimeoutMs??fe.connectTimeoutMs),totalTimeoutMs:Math.max(100,e.totalTimeoutMs??fe.totalTimeoutMs),idleTimeoutMs:Math.max(100,e.idleTimeoutMs??fe.idleTimeoutMs),maxResponseBytes:Math.max(1024,e.maxResponseBytes??fe.maxResponseBytes),maxHeaderBytes:Math.max(1024,e.maxHeaderBytes??fe.maxHeaderBytes),maxEventBytes:Math.max(1024,e.maxEventBytes??fe.maxEventBytes)}}async function _e(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 je(e,t,n,r){try{return e.decode(t,{stream:n})}catch{throw g(r,"response is not valid UTF-8")}}function ct(e,t,n){let r=new b(t==="cancelled"?"Provider request was cancelled":"Provider request timed out",{providerId:e,category:t,code:t==="cancelled"?"PROVIDER_CANCELLED":"PROVIDER_TIMEOUT",retryable:!1,...n!==void 0?{cause:n}:{}});return t==="cancelled"&&(r.name="AbortError"),r}function $r(e){let t=0;return e.forEach((n,r)=>{t+=Buffer.byteLength(r)+Buffer.byteLength(n)+4}),t}async function Ht(e,t,n,r){if(!e.body)return"";let o=e.body.getReader(),i=new TextDecoder("utf-8",{fatal:!0}),s=0,a="",d,u=()=>{d&&clearTimeout(d),d=setTimeout(()=>r.abort("idle-timeout"),n.idleTimeoutMs)};u();try{for(;;){let{value:l,done:c}=await _e(o.read(),r.signal);if(c)break;if(u(),s+=l.byteLength,s>n.maxResponseBytes)throw g(t,`response exceeded ${n.maxResponseBytes} bytes`);a+=je(i,l,!0,t)}return a+=je(i,void 0,!1,t),a}finally{d&&clearTimeout(d),o.cancel().catch(()=>{}),o.releaseLock()}}async function Gt(e,t,n,r,o={delivered:!1}){let i=dt.now(),s=Mr(n.limits),a=$t({headers:t.headers,url:e});ue("xeno.provider.requests",1,{component:"provider_transport",provider:n.providerId,transport:"http"});let d=new AbortController,u=null,l=t.signal,c=()=>d.abort("caller");if(l?.aborted)throw ct(n.providerId,"cancelled");l?.addEventListener("abort",c,{once:!0});let m=setTimeout(()=>{u="total",d.abort("total-timeout")},s.totalTimeoutMs),p=setTimeout(()=>{u="connect",d.abort("connect-timeout")},s.connectTimeoutMs),f;try{let y=await _e(at(e,n.endpointPolicy),d.signal);if(d.signal.aborted)throw new Error("Provider request aborted before dispatch");let h={...t,signal:d.signal,redirect:"manual",dispatcher:Ft(e,y,()=>clearTimeout(p))},P=fetch(e,h);P.then(R=>{d.signal.aborted&&R.body?.cancel().catch(()=>{})},()=>{});let v=await _e(P,d.signal);if(f=v,clearTimeout(p),$r(v.headers)>s.maxHeaderBytes)throw g(n.providerId,`response headers exceeded ${s.maxHeaderBytes} bytes`);if(v.redirected||v.status>=300&&v.status<400)throw new b("Provider redirects are disabled",{providerId:n.providerId,category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED",statusCode:v.status});let x=v.headers.get("content-length");if(x&&/^\d+$/.test(x)&&Number(x)>s.maxResponseBytes)throw g(n.providerId,`response exceeded ${s.maxResponseBytes} bytes`);if(!v.ok){let R=await Ht(v,n.providerId,s,d),I=R;try{I=R?JSON.parse(R):{}}catch{}throw Pe({providerId:n.providerId,statusCode:v.status,body:I,retryAfterMs:$e(v.headers.get("retry-after")),requestId:v.headers.get("request-id")??v.headers.get("x-request-id")??void 0,secrets:a})}let w=await _e(r(v,d,s),d.signal);return ue("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),tt("xeno.provider.request_duration_ms",dt.now()-i,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),w}catch(y){let h;throw y instanceof b?h=y:l?.aborted||d.signal.reason==="caller"?h=ct(n.providerId,"cancelled",y):u||d.signal.reason==="idle-timeout"?h=ct(n.providerId,"timeout",y):h=new b("Provider transport failed",{providerId:n.providerId,category:"transport",code:"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:y}),o.delivered&&h.retryable&&!(y instanceof b)&&(h=new b(`${h.message}; the stream was cut off after part of the answer was delivered, so it is not retried automatically`,{...h.providerId!==void 0?{providerId:h.providerId}:{},...h.statusCode!==void 0?{statusCode:h.statusCode}:{},...h.requestId!==void 0?{requestId:h.requestId}:{},...h.providerCode!==void 0?{providerCode:h.providerCode}:{},...h.remedy!==void 0?{remedy:h.remedy}:{},category:h.category,code:h.code,retryable:!1,cause:h.cause??h})),O(h,a),d.abort("request-failed"),f?.body&&!f.body.locked&&f.body.cancel().catch(()=>{}),ue("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:h.category,error_code:h.code}),tt("xeno.provider.request_duration_ms",dt.now()-i,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:h.category}),h}finally{clearTimeout(p),clearTimeout(m),l?.removeEventListener("abort",c)}}async function ge(e,t,n){return Gt(e,t,n,async(r,o,i)=>{let s=await Ht(r,n.providerId,i,o),a;try{a=s?JSON.parse(s):{}}catch(d){throw g(n.providerId,"body is not valid JSON",d)}if(!a||typeof a!="object"||Array.isArray(a))throw g(n.providerId,"JSON body must be an object");return a})}async function Ce(e,t,n,r){let o={delivered:!1};return Gt(e,t,n,async(i,s,a)=>{if(!i.body)throw g(n.providerId,"stream response has no body");let d=i.body.getReader(),u=new TextDecoder("utf-8",{fatal:!0}),l="",c=0,m="message",p=[],f,y=()=>{f&&clearTimeout(f),f=setTimeout(()=>s.abort("idle-timeout"),a.idleTimeoutMs)},h=async()=>{if(p.length===0){m="message";return}let P=p.join(`
|
|
6
6
|
`);if(Buffer.byteLength(P)>a.maxEventBytes)throw g(n.providerId,`stream event exceeded ${a.maxEventBytes} bytes`);await r({event:m,data:P}),o.delivered=!0,m="message",p=[]};y();try{for(;;){let{value:P,done:v}=await _e(d.read(),s.signal);if(v)break;if(y(),c+=P.byteLength,c>a.maxResponseBytes)throw g(n.providerId,`stream exceeded ${a.maxResponseBytes} bytes`);for(l+=je(u,P,!0,n.providerId);;){let x=l.indexOf(`
|
|
7
|
-
`);if(x<0)break;let w=l.slice(0,x).replace(/\r$/,"");if(l=l.slice(x+1),!w)await h();else if(!w.startsWith(":")){let R=w.indexOf(":"),I=R<0?w:w.slice(0,R),ce=R<0?"":w.slice(R+1).replace(/^ /,"");I==="event"?m=ce:I==="data"&&p.push(ce)}}}if(l+=je(u,void 0,!1,n.providerId),l.trim())for(let P of l.split(/\r?\n/))P.startsWith("data:")?p.push(P.slice(5).replace(/^ /,"")):P.startsWith("event:")&&(m=P.slice(6).trim());await h()}finally{f&&clearTimeout(f),d.cancel().catch(()=>{}),d.releaseLock()}},o)}import{createHash as no}from"node:crypto";import{isIP as Gt}from"node:net";var Ve=class extends Error{issues;constructor(t){super(`Invalid JSON Schema: ${t.map(n=>`${n.path||"#"} ${n.message}`).join("; ")}`),this.name="JsonSchemaCompilationError",this.issues=t}},ut="https://json-schema.org/draft/2020-12/schema",Or=new Set(["string","number","integer","boolean","array","object","null"]),Mr=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"]),Zt=new Map([["date",e=>nn(e)],["date-time",e=>Yr(e)],["time",e=>rn(e)],["duration",e=>/^P(?!$)(?:\d+(?:[.,]\d+)?Y)?(?:\d+(?:[.,]\d+)?M)?(?:\d+(?:[.,]\d+)?W)?(?:\d+(?:[.,]\d+)?D)?(?:T(?=\d)(?:\d+(?:[.,]\d+)?H)?(?:\d+(?:[.,]\d+)?M)?(?:\d+(?:[.,]\d+)?S)?)?$/u.test(e)],["email",e=>Kt(e)],["idn-email",e=>Kt(e)],["hostname",e=>mt(e)],["idn-hostname",e=>mt(e)],["ipv4",e=>Gt(e)===4],["ipv6",e=>Gt(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=>Qt(e)],["iri",e=>Qt(e)],["uri-reference",e=>Wt(e)],["iri-reference",e=>Wt(e)],["uri-template",e=>eo(e)],["json-pointer",e=>/^(?:\/(?:[^~/]|~[01])*)*$/u.test(e)],["relative-json-pointer",e=>/^(?:0|[1-9]\d*)(?:#|(?:\/(?:[^~/]|~[01])*)*)$/u.test(e)],["regex",(e,t)=>gt(e,t.maxPatternLength)!==void 0]]);function $r(e={}){return{strictKeywords:e.strictKeywords??!0,assertFormats:e.assertFormats??!1,maxSchemaDepth:ne(e.maxSchemaDepth,64,1,256,"maxSchemaDepth"),maxSchemaNodes:ne(e.maxSchemaNodes,4096,1,1e5,"maxSchemaNodes"),maxReferences:ne(e.maxReferences,512,0,1e4,"maxReferences"),maxPatternLength:ne(e.maxPatternLength,256,1,4096,"maxPatternLength"),maxValidationDepth:ne(e.maxValidationDepth,128,1,1024,"maxValidationDepth"),maxValidationSteps:ne(e.maxValidationSteps,1e5,100,1e7,"maxValidationSteps"),maxValidationErrors:ne(e.maxValidationErrors,64,1,1024,"maxValidationErrors"),maxInputBytes:ne(e.maxInputBytes,16*1024*1024,1024,256*1024*1024,"maxInputBytes")}}function ne(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 Nr(e,t={}){let n={root:e,options:$r(t),issues:[],rawByPointer:new Map,anchors:new Map,compiledByPointer:new Map,schemaNodes:0,references:0,nextNodeId:1};Xe(e,"",0,n);let r=ie(e,"",0,n);if(n.issues.length>0||!r)throw new Ve(n.issues);return Object.freeze({dialect:ut,formatAssertion:n.options.assertFormats,validate(o){let i=[],s=pt(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),d=Buffer.byteLength(a??"null","utf8");if(d>n.options.maxInputBytes)return i.push({path:"",keyword:"maxInputBytes",schemaPath:"#",message:`input is ${d} bytes; limit is ${n.options.maxInputBytes}`}),{valid:!1,errors:i,steps:0,truncated:!1};let u={options:n.options,errors:i,budget:{steps:0,exhausted:!1},activePairs:new Set,objectIds:new WeakMap,nextObjectId:{value:1}};return W(o,r,"",0,u),{valid:i.length===0,errors:i,steps:u.budget.steps,truncated:u.budget.exhausted||i.length>=n.options.maxValidationErrors}}})}function Yt(e,t={}){if(!j(e)||e.type!=="object"||!j(e.properties))throw new Ve([{path:"#",keyword:"type",message:"tool input schema root must declare type object and a properties object"}]);return Nr(e,t)}function Xe(e,t,n,r){if(n>r.options.maxSchemaDepth){_(r,t,void 0,`schema depth exceeds ${r.options.maxSchemaDepth}`);return}if(typeof e!="boolean"&&!j(e)){_(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){_(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)?_(r,t,"$anchor","$anchor must be a valid plain-name anchor"):r.anchors.has(e.$anchor)?_(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(!j(i)){_(r,t,o,`${o} must be an object`);continue}for(let[s,a]of Object.entries(i))Xe(a,Z(t,o,s),n+1,r)}}for(let o of["items","contains","additionalProperties","not"])e[o]!==void 0&&Xe(e[o],Z(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)){_(r,t,o,`${o} must be an array of schemas`);continue}i.forEach((s,a)=>Xe(s,Z(t,o,String(a)),n+1,r))}}}}}function ie(e,t,n,r){let o=r.compiledByPointer.get(t);if(o)return o;if(typeof e!="boolean"&&!j(e))return;let i={id:r.nextNodeId++,schemaPath:sn(t)};if(r.compiledByPointer.set(t,i),typeof e=="boolean")return i.boolean=e,i;if(Dr(e,t,r),qr(e,t,r),e.$schema!==void 0&&(t!==""||e.$schema!==ut&&e.$schema!==`${ut}#`)&&_(r,t,"$schema",t===""?`unsupported dialect ${String(e.$schema)}`:"$schema is only supported at the root"),e.$id!==void 0&&typeof e.$id!="string"&&_(r,t,"$id","$id must be a string"),e.$ref!==void 0)if(typeof e.$ref!="string")_(r,t,"$ref","$ref must be a string");else{r.references+=1,r.references>r.options.maxReferences&&_(r,t,"$ref",`reference count exceeds ${r.options.maxReferences}`);let s=zr(e.$ref,t,r);if(s!==void 0){let a=r.rawByPointer.get(s);a===void 0?_(r,t,"$ref",`unresolved local reference ${e.$ref}`):i.ref=ie(a,s,n+1,r)}}if(i.types=jr(e.type,t,r),e.enum!==void 0){let s=e.enum;!Array.isArray(s)||s.length===0?_(r,t,"enum","enum must be a non-empty array"):s.some((a,d)=>s.some((u,l)=>l<d&&ye(a,u)))?_(r,t,"enum","enum values must be unique"):s.some(a=>pt(a))?_(r,t,"enum","enum values must be JSON values"):i.enumValues=s}if(Object.prototype.hasOwnProperty.call(e,"const")&&(pt(e.const)?_(r,t,"const","const must be a JSON value"):(i.hasConst=!0,i.constValue=e.const)),i.multipleOf=Jr(e.multipleOf,t,"multipleOf",r),i.maximum=Re(e.maximum,t,"maximum",r),i.exclusiveMaximum=Re(e.exclusiveMaximum,t,"exclusiveMaximum",r),i.minimum=Re(e.minimum,t,"minimum",r),i.exclusiveMinimum=Re(e.exclusiveMinimum,t,"exclusiveMinimum",r),i.maxLength=re(e.maxLength,t,"maxLength",r),i.minLength=re(e.minLength,t,"minLength",r),i.minItems=re(e.minItems,t,"minItems",r),i.maxItems=re(e.maxItems,t,"maxItems",r),i.minContains=re(e.minContains,t,"minContains",r),i.maxContains=re(e.maxContains,t,"maxContains",r),i.minProperties=re(e.minProperties,t,"minProperties",r),i.maxProperties=re(e.maxProperties,t,"maxProperties",r),Vr(i,t,r),e.pattern!==void 0)if(typeof e.pattern!="string")_(r,t,"pattern","pattern must be a string");else{let s=gt(e.pattern,r.options.maxPatternLength);s?i.pattern={source:e.pattern,regex:s}:_(r,t,"pattern","pattern is invalid or outside the safe regex subset")}if(e.format!==void 0&&(typeof e.format!="string"?_(r,t,"format","format must be a string"):r.options.assertFormats&&!Zt.has(e.format)?_(r,t,"format",`unsupported asserted format ${e.format}`):i.format=e.format),i.prefixItems=Be(e.prefixItems,t,"prefixItems",n,r,!0),i.items=Ue(e.items,t,"items",n,r),i.contains=Ue(e.contains,t,"contains",n,r),(e.minContains!==void 0||e.maxContains!==void 0)&&e.contains===void 0&&_(r,t,"contains","minContains/maxContains require contains"),e.uniqueItems!==void 0&&(typeof e.uniqueItems!="boolean"?_(r,t,"uniqueItems","uniqueItems must be boolean"):i.uniqueItems=e.uniqueItems),i.properties=Ur(e.properties,t,"properties",n,r),i.patternProperties=Br(e.patternProperties,t,n,r),i.additionalProperties=Ue(e.additionalProperties,t,"additionalProperties",n,r),i.required=en(e.required,t,"required",r,!0),i.dependentRequired=Xr(e.dependentRequired,t,r),i.allOf=Be(e.allOf,t,"allOf",n,r,!1),i.anyOf=Be(e.anyOf,t,"anyOf",n,r,!1),i.oneOf=Be(e.oneOf,t,"oneOf",n,r,!1),i.not=Ue(e.not,t,"not",n,r),j(e.$defs))for(let[s,a]of Object.entries(e.$defs))ie(a,Z(t,"$defs",s),n+1,r);return i}function Dr(e,t,n){if(n.options.strictKeywords)for(let r of Object.keys(e))!Mr.has(r)&&!r.startsWith("x-")&&_(n,t,r,`unsupported keyword ${r}`)}function qr(e,t,n){for(let r of["$comment","title","description"])e[r]!==void 0&&typeof e[r]!="string"&&_(n,t,r,`${r} must be a string`);for(let r of["deprecated","readOnly","writeOnly"])e[r]!==void 0&&typeof e[r]!="boolean"&&_(n,t,r,`${r} must be boolean`);e.examples!==void 0&&!Array.isArray(e.examples)&&_(n,t,"examples","examples must be an array")}function jr(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"||!Or.has(o))){_(n,t,"type","type must be a recognized type or non-empty unique type array");return}return new Set(r).size!==r.length&&_(n,t,"type","type array must not contain duplicates"),r}function Ue(e,t,n,r,o){if(e!==void 0)return ie(e,Z(t,n),r+1,o)}function Be(e,t,n,r,o,i){if(e!==void 0){if(!Array.isArray(e)||!i&&e.length===0){_(o,t,n,`${n} must be ${i?"an array":"a non-empty array"} of schemas`);return}return e.map((s,a)=>ie(s,Z(t,n,String(a)),r+1,o)).filter(s=>!!s)}}function Ur(e,t,n,r,o){if(e===void 0)return;if(!j(e)){_(o,t,n,`${n} must be an object of schemas`);return}let i=new Map;for(let[s,a]of Object.entries(e)){let d=ie(a,Z(t,n,s),r+1,o);d&&i.set(s,d)}return i}function Br(e,t,n,r){if(e===void 0)return;if(!j(e)){_(r,t,"patternProperties","patternProperties must be an object of schemas");return}let o=[];for(let[i,s]of Object.entries(e)){let a=gt(i,r.options.maxPatternLength);if(!a){_(r,t,"patternProperties",`pattern ${JSON.stringify(i)} is invalid or outside the safe regex subset`);continue}let d=ie(s,Z(t,"patternProperties",i),n+1,r);d&&o.push({pattern:{source:i,regex:a},schema:d})}return o}function Xr(e,t,n){if(e===void 0)return;if(!j(e)){_(n,t,"dependentRequired","dependentRequired must be an object");return}let r=new Map;for(let[o,i]of Object.entries(e)){let s=en(i,Z(t,"dependentRequired",o),"dependentRequired",n,!0);s&&r.set(o,s)}return r}function en(e,t,n,r,o){if(e!==void 0){if(!Array.isArray(e)||e.some(i=>typeof i!="string")){_(r,t,n,`${n} must be an array of strings`);return}return o&&new Set(e).size!==e.length&&_(r,t,n,`${n} values must be unique`),e}}function Jr(e,t,n,r){let o=Re(e,t,n,r);return o!==void 0&&o<=0&&_(r,t,n,`${n} must be greater than zero`),o!==void 0&&o>0?o:void 0}function Re(e,t,n,r){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)){_(r,t,n,`${n} must be a finite number`);return}return e}}function re(e,t,n,r){if(e!==void 0){if(!Number.isSafeInteger(e)||e<0){_(r,t,n,`${n} must be a non-negative safe integer`);return}return e}}function Vr(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&&_(n,t,i,`minimum ${i} exceeds maximum`)}function zr(e,t,n){if(!e.startsWith("#")){_(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(on).join("/")}`;return n.rawByPointer.has(s)||_(n,t,"$ref",`unresolved JSON Pointer ${e}`),s}let r=e.slice(1),o=n.anchors.get(r);return o===void 0&&_(n,t,"$ref",`unresolved anchor ${e}`),o}function W(e,t,n,r,o){if(!tn(o)||o.errors.length>=o.options.maxValidationErrors)return;if(r>o.options.maxValidationDepth){E(o,n,"maxDepth",t,`validation depth exceeds ${o.options.maxValidationDepth}`);return}if(t.boolean!==void 0){t.boolean||E(o,n,"falseSchema",t,"is rejected by the false schema");return}let i=Wr(t,e,o);if(!o.activePairs.has(i)){o.activePairs.add(i);try{if(t.ref&&W(e,t.ref,n,r+1,o),t.enumValues&&!t.enumValues.some(s=>ye(s,e))&&E(o,n,"enum",t,`expected one of ${t.enumValues.map(ft).join(", ")} but got ${lt(e)}`),t.hasConst&&!ye(t.constValue,e)&&E(o,n,"const",t,`expected ${ft(t.constValue)} but got ${lt(e)}`),t.types&&!t.types.some(s=>Zr(e,s))){let s=t.types.length===1?t.types[0]:`one of [${t.types.join(", ")}]`;E(o,n,"type",t,`expected type ${s} but got ${lt(e)}`);return}Hr(e,t,n,r,o),typeof e=="number"&&Fr(e,t,n,o),typeof e=="string"&&Gr(e,t,n,o),Array.isArray(e)&&Kr(e,t,n,r,o),j(e)&&Qr(e,t,n,r,o)}finally{o.activePairs.delete(i)}}}function Hr(e,t,n,r,o){for(let i of t.allOf??[])W(e,i,n,r+1,o);if(t.anyOf&&t.anyOf.filter(s=>Je(e,s,n,r+1,o)).length===0&&E(o,n,"anyOf",t,"must match at least one anyOf branch"),t.oneOf){let i=t.oneOf.filter(s=>Je(e,s,n,r+1,o)).length;i!==1&&E(o,n,"oneOf",t,`must match exactly one oneOf branch; matched ${i}`)}t.not&&Je(e,t.not,n,r+1,o)&&E(o,n,"not",t,"must not match the disallowed schema")}function Fr(e,t,n,r){t.multipleOf!==void 0&&!to(e,t.multipleOf)&&E(r,n,"multipleOf",t,`must be a multiple of ${t.multipleOf}`),t.maximum!==void 0&&e>t.maximum&&E(r,n,"maximum",t,`must be <= ${t.maximum}`),t.exclusiveMaximum!==void 0&&e>=t.exclusiveMaximum&&E(r,n,"exclusiveMaximum",t,`must be < ${t.exclusiveMaximum}`),t.minimum!==void 0&&e<t.minimum&&E(r,n,"minimum",t,`must be >= ${t.minimum}`),t.exclusiveMinimum!==void 0&&e<=t.exclusiveMinimum&&E(r,n,"exclusiveMinimum",t,`must be > ${t.exclusiveMinimum}`)}function Gr(e,t,n,r){let o=[...e].length;if(t.minLength!==void 0&&o<t.minLength&&E(r,n,"minLength",t,`must contain at least ${t.minLength} Unicode code points`),t.maxLength!==void 0&&o>t.maxLength&&E(r,n,"maxLength",t,`must contain at most ${t.maxLength} Unicode code points`),t.pattern&&!t.pattern.regex.test(e)&&E(r,n,"pattern",t,`must match pattern ${JSON.stringify(t.pattern.source)}`),t.format&&r.options.assertFormats){let i=Zt.get(t.format);i&&!i(e,r.options)&&E(r,n,"format",t,`must match format ${t.format}`)}}function Kr(e,t,n,r,o){if(t.minItems!==void 0&&e.length<t.minItems&&E(o,n,"minItems",t,`must contain at least ${t.minItems} items`),t.maxItems!==void 0&&e.length>t.maxItems&&E(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(!tn(o))break e;if(ye(e[s],e[a])){E(o,V(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&&W(e[a],s,V(n,String(a)),r+1,o)}),t.items)for(let s=i;s<e.length;s+=1)W(e[s],t.items,V(n,String(s)),r+1,o);if(t.contains){let s=0;for(let d=0;d<e.length;d+=1)Je(e[d],t.contains,V(n,String(d)),r+1,o)&&(s+=1);let a=t.minContains??1;s<a&&E(o,n,"minContains",t,`contains matched ${s} items; minimum is ${a}`),t.maxContains!==void 0&&s>t.maxContains&&E(o,n,"maxContains",t,`contains matched ${s} items; maximum is ${t.maxContains}`)}}function Qr(e,t,n,r,o){let i=Object.keys(e);t.minProperties!==void 0&&i.length<t.minProperties&&E(o,n,"minProperties",t,`must contain at least ${t.minProperties} properties`),t.maxProperties!==void 0&&i.length>t.maxProperties&&E(o,n,"maxProperties",t,`must contain at most ${t.maxProperties} properties`);for(let s of t.required??[])Object.prototype.hasOwnProperty.call(e,s)||E(o,V(n,s),"required",t,"is required");for(let[s,a]of t.dependentRequired??[])if(Object.prototype.hasOwnProperty.call(e,s))for(let d of a)Object.prototype.hasOwnProperty.call(e,d)||E(o,V(n,d),"dependentRequired",t,`is required when ${s} is present`);for(let s of i){let a=!1,d=t.properties?.get(s);d&&(a=!0,W(e[s],d,V(n,s),r+1,o));for(let u of t.patternProperties??[])u.pattern.regex.test(s)&&(a=!0,W(e[s],u.schema,V(n,s),r+1,o));!a&&t.additionalProperties&&W(e[s],t.additionalProperties,V(n,s),r+1,o)}}function Je(e,t,n,r,o){let i={...o,errors:[],activePairs:new Set(o.activePairs)};return W(e,t,n,r,i),i.errors.length===0&&!i.budget.exhausted}function tn(e){return e.budget.steps+=1,e.budget.steps<=e.options.maxValidationSteps?!0:(e.budget.exhausted||(e.budget.exhausted=!0,E(e,"","maxValidationSteps",{schemaPath:"#"},`validation steps exceed ${e.options.maxValidationSteps}`)),!1)}function E(e,t,n,r,o){e.errors.length>=e.options.maxValidationErrors||e.errors.push({path:t,keyword:n,schemaPath:r.schemaPath,message:o})}function Wr(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}:${ft(t)}`}function Zr(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 j(e);case"null":return e===null}}function pt(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 d=n(a,V(o,String(s)));if(d)return d}t.delete(r)};return n(e,"")}function gt(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 nn(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 rn(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 Yr(e){let t=/^([^Tt ]+)[Tt ](.+)$/u.exec(e);return!!(t&&nn(t[1])&&rn(t[2]))}function Kt(e){if([...e].length>254||/[\s<>(),;:\\"\[\]]/u.test(e))return!1;let t=e.lastIndexOf("@");return t>0&&t<e.length-1&&[...e.slice(0,t)].length<=64&&mt(e.slice(t+1))}function mt(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 Qt(e){try{return!!(new URL(e).protocol&&!/\s/u.test(e))}catch{return!1}}function Wt(e){try{return new URL(e,"https://xeno.invalid/"),!/\s/u.test(e)}catch{return!1}}function eo(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 to(e,t){let n=e/t;return Math.abs(n-Math.round(n))<=Number.EPSILON*Math.max(1,Math.abs(n))*8}function j(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ye(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)=>ye(n,t[r]));if(j(e)&&j(t)){let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(o=>Object.prototype.hasOwnProperty.call(t,o)&&ye(e[o],t[o]))}return!1}function V(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 Z(e,...t){return`${e}/${t.map(on).join("/")}`}function on(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function sn(e){return e.length===0?"#":`#${e}`}function _(e,t,n,r){e.issues.length>=64||e.issues.push({path:sn(t),...n?{keyword:n}:{},message:r})}function lt(e){return e===null?"null":Array.isArray(e)?"array":typeof e=="number"?Number.isSafeInteger(e)?"integer":"number":typeof e}function ft(e){try{let t=JSON.stringify(e);return t===void 0?String(e):t}catch{return String(e)}}var A=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}},an=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),ro=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function cn(e,t){Yt(e);let n=yt(e),r=n,o=dn(n);if(t==="xeno"||t==="google-json-schema")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};ze(r,"",i);let s=se(r,"#",i);if(!he(s))throw new A(t,"#","provider tool root must remain an object schema");return oo(n,s,t),{schema:s,dialect:t,canonicalSha256:o,projectedSha256:dn(s),changes:i.changes}}function ke(e,t){return e.map(n=>{let r=cn(n.input_schema,t);return{definition:{...n,input_schema:r.schema},projection:r}})}function se(e,t,n){if(typeof e=="boolean"){if(n.dialect!=="google")return e;if(e)return{};throw new A(n.dialect,t,"false schemas are not representable by this provider")}if(n.dialect==="google"&&Object.prototype.hasOwnProperty.call(e,"const")&&Array.isArray(e.enum)&&!e.enum.some(o=>Te(o)===Te(e.const)))throw new A(n.dialect,t,"empty const and enum intersection cannot be represented by the legacy dialect; use parametersJsonSchema");if(typeof e.$ref=="string"){let o=io(e.$ref,t,n);if(n.activeReferences.has(e.$ref))throw new A(n.dialect,t,`recursive reference ${e.$ref} cannot be serialized safely`);let i=Object.fromEntries(Object.entries(e).filter(([a])=>a!=="$ref"&&!an.has(a)));if(Object.keys(i).length>0){if(n.dialect==="google")throw new A(n.dialect,t,"$ref siblings require an unsupported intersection");n.activeReferences.add(e.$ref);let a=se(o,`${t}/$ref`,n);n.activeReferences.delete(e.$ref);let d=se(i,t,n);return n.changes.push({path:t,keyword:"$ref",action:"transformed",reason:"inlined local reference with sibling intersection"}),{allOf:[a,d]}}n.activeReferences.add(e.$ref);let s=se(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(an.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"&&!ro.has(o)){if(o==="const"){if(i===null)throw new A(n.dialect,t,"null const cannot be represented by the provider schema dialect");if(typeof i!="string")throw new A(n.dialect,t,"non-string const cannot be represented by the legacy dialect; use parametersJsonSchema");r.enum=[yt(i)],n.changes.push({path:t,keyword:o,action:"transformed",reason:"Google wire schema represents const as a single-value enum"});continue}throw o==="prefixItems"?new A(n.dialect,t,"tuple prefixItems cannot preserve the provider structural contract"):new A(n.dialect,t,`assertion ${o} cannot be represented without weakening; use parametersJsonSchema`)}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 A(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==="enum"&&n.dialect==="google"&&Array.isArray(i)&&i.some(s=>s===null))throw new A(n.dialect,t,"null enum values cannot be represented by the provider schema dialect");if(o==="enum"&&n.dialect==="google"&&Array.isArray(i)&&i.some(s=>typeof s!="string"))throw new A(n.dialect,t,"non-string enum values cannot be represented by the legacy dialect; use parametersJsonSchema");if(!(o==="enum"&&n.dialect==="google"&&Object.prototype.hasOwnProperty.call(e,"const"))){if(o==="properties"||o==="patternProperties"||o==="$defs"){if(!he(i))throw new A(n.dialect,t,`${o} must be an object`);let s={};for(let[a,d]of Object.entries(i))s[a]=se(d,`${t}/${o}/${ht(a)}`,n);r[o]=s;continue}if(["items","contains","additionalProperties","not"].includes(o)){r[o]=se(i,`${t}/${o}`,n);continue}if(["prefixItems","allOf","anyOf","oneOf"].includes(o)){if(!Array.isArray(i))throw new A(n.dialect,t,`${o} must be an array`);r[o]=i.map((s,a)=>se(s,`${t}/${o}/${a}`,n));continue}r[o]=yt(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 A(n.dialect,t,"minimum structural contract cannot be represented")}return r}function oo(e,t,n){if(t.type!=="object"||!he(t.properties))throw new A(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 A(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 A(n,"#","root required-property contract changed")}function ze(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(he(o))for(let[i,s]of Object.entries(o))ze(s,`${t}/${r}/${ht(i)}`,n)}for(let r of["items","contains","additionalProperties","not"]){let o=e[r];(typeof o=="boolean"||he(o))&&ze(o,`${t}/${r}`,n)}for(let r of["prefixItems","allOf","anyOf","oneOf"]){let o=e[r];Array.isArray(o)&&o.forEach((i,s)=>ze(i,`${t}/${r}/${s}`,n))}}}function io(e,t,n){if(!e.startsWith("#"))throw new A(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(ht).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 A(n.dialect,t,`unresolved reference ${e}`)}function dn(e){return no("sha256").update(Te(e)).digest("hex")}function Te(e){return Array.isArray(e)?`[${e.map(Te).join(",")}]`:he(e)?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Te(e[t])}`).join(",")}}`:JSON.stringify(e)}function yt(e){return JSON.parse(JSON.stringify(e))}function ht(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function he(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}import{createHash as so}from"node:crypto";var un=/^[a-zA-Z0-9_-]{1,64}$/,ln=64;function ao(e){return so("sha256").update(e).digest("hex").slice(0,8)}function co(e){return e.replace(/\./g,"__").replace(/[^a-zA-Z0-9_-]/g,"_")}function He(e){let t=new Map,n=new Map,r=[...new Set(e)];for(let o of r)un.test(o)&&(t.set(o,o),n.set(o,o));for(let o of[...r].sort()){if(t.has(o))continue;let i=co(o);if(i.length>ln||n.has(i)||i.length===0){let s=`_${ao(o)}`;i=`${i.slice(0,ln-s.length)}${s}`}t.set(o,i),n.set(i,o)}return{encode:o=>t.get(o)??o,decode:o=>n.get(o)??o}}function pn(e,t,n){if(!(e instanceof Error))return e;let r=[...new Set(t)].map(i=>[n.encode(i),i]).filter(([i,s])=>i!==s).sort((i,s)=>s[0].length-i[0].length);if(r.length===0)return e;let o=i=>r.reduce((s,[a,d])=>s.replace(new RegExp(`(?<![A-Za-z0-9_-])${a.replace(/[-]/g,"-")}(?![A-Za-z0-9_-])`,"g"),d),i);for(let i of["message","stack"]){let s=e[i];if(typeof s!="string")continue;let a=o(s);a!==s&&Object.defineProperty(e,i,{value:a,writable:!0,configurable:!0,enumerable:!1})}return e}import{createHash as fn}from"node:crypto";async function mn(e,t,n=3e4){t?.throwIfAborted();let r=new AbortController,o=setTimeout(()=>r.abort(new DOMException("Operation acknowledgement timed out.","TimeoutError")),n),i=t?AbortSignal.any([t,r.signal]):r.signal,s;try{let a=await new Promise((d,u)=>{s=()=>u(i.reason),i.addEventListener("abort",s,{once:!0}),Promise.resolve().then(()=>(i.throwIfAborted(),e(i))).then(d,u)});return i.throwIfAborted(),a}finally{s&&i.removeEventListener("abort",s),clearTimeout(o)}}var T=class extends Error{constructor(n,r){super(r);this.code=n;this.name="QuotaError"}code;retryable=!1},bt=class extends Error{constructor(n,r,o){let i=o instanceof b?` (${o.category}${o.statusCode?` HTTP ${o.statusCode}`:""})`:"";super(n==="prepare"?`Quota preparation failed before any reservation${i}.`:`Quota ${n} did not acknowledge; reconcile reservation ${r} before retrying.`,{cause:o});this.phase=n;this.reservationId=r;this.name="QuotaAcknowledgementError"}phase;reservationId;code="ACKNOWLEDGEMENT_FAILED";retryable=!1};function lo(e){return e instanceof Error&&(e.name==="QuotaError"||e.name==="QuotaAcknowledgementError")&&"retryable"in e&&e.retryable===!1&&"code"in e&&typeof e.code=="string"}function S(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<0)throw new T("INVALID","Quota counters must be non-negative safe integers.");return e}function U(e){if(typeof e!="string"||!e.trim()||e.length>512)throw new T("INVALID","Invalid quota identity.");return e}function Y(e){let t=n=>({id:U(n?.id),generation:U(n?.generation)});if(!e||e.agent&&!e.team)throw new T("INVALID","A child quota scope requires its complete ancestry.");return{workspace:t(e.workspace),...e.team?{team:t(e.team)}:{},...e.agent?{agent:t(e.agent)}:{},...e.goal!==void 0?{goal:t(e.goal)}:{}}}function z(e){return JSON.stringify(Y(e))}function Ee(e){let t=Y(e),n=[{workspace:t.workspace},...t.team?[{workspace:t.workspace,team:t.team}]:[],...t.agent?[{workspace:t.workspace,team:t.team,agent:t.agent}]:[]];return t.goal?n.flatMap(r=>[r,{...r,goal:t.goal}]):n}var gn=Symbol.for("@xenosystem/agent-sdk/quota-provider-layers-v1");function hs(e,t,n,r={}){let o=Y(n),i=e[gn],s=i?.provider??e,a=[...i?.layers??[],{authority:t,scope:o,soft:r.enforcement==="soft"}];async function d(l,c,m,p,f,y){if(f?.throwIfAborted(),!s.prepareQuotaRequest)throw new T("UNSUPPORTED","This provider cannot guarantee per-request token bounds.");let h=U(y?.attemptId),P=fn("sha256").update(JSON.stringify([s.id,l,c,m,y?.systemPrompt??""])).digest("hex"),v=a.map(k=>({...k,id:fn("sha256").update(JSON.stringify([z(k.scope),s.id,h])).digest("hex"),reserved:!1,dispatchStarted:!1})),x=async(k,M,B,N=f,J=3e4)=>{try{return await mn(B,N,J)}catch(G){throw lo(G)?G:M==="prepare"&&G instanceof b&&G.category==="unsupported_capability"?new T("UNSUPPORTED","This provider cannot enforce the requested per-request token ceiling."):new bt(M,k,G)}},w=y?.quotaRemainingTokens??null;for(let k of v){let M=k.authority.remainingTokens?await x(k.id,"prepare",()=>k.authority.remainingTokens(k.scope)):null;M!==null&&(w=w===null?M:Math.min(w,M))}let R=w===null?y:{...y,systemPrompt:y?.systemPrompt??"",quotaRemainingTokens:w},I=await x(v[0].id,"prepare",k=>s.prepareQuotaRequest(l,structuredClone(c),structuredClone(m),R,k),f,12e4),ce=S(S(I.inputTokensUpperBound)+S(I.outputTokensUpperBound)),ve=I.basis==="estimated";if(I.basis!=="provider-enforced"&&!(a.every(k=>k.soft)&&ve))throw new T("UNSUPPORTED","Estimated token bounds cannot enforce a hard quota.");try{for(let k of v)await x(k.id,"reserve",()=>k.authority.reserve({id:k.id,scope:k.scope,requestHash:P,reservedTokens:ce,...ve?{basis:"estimated"}:{}})),k.reserved=!0;f?.throwIfAborted();for(let k of v)k.dispatchStarted=!0,await x(k.id,"dispatch",()=>k.authority.dispatch(k.id));f?.throwIfAborted()}catch(k){for(let M of v.filter(B=>B.reserved&&!B.dispatchStarted).reverse())await x(M.id,"void",()=>M.authority.void(M.id),new AbortController().signal);throw k}let le=await I.execute(p,f);if(f?.throwIfAborted(),le.usageReported){let k=S(le.inputTokens),M=S(le.outputTokens);if(!ve&&k>I.inputTokensUpperBound||M>I.outputTokensUpperBound)throw new T("CORRUPT","Provider exceeded its guaranteed token bound; reservation requires reconciliation.");let B;for(let N of v)try{await x(N.id,"settle",()=>N.authority.settle(N.id,S(k+M)))}catch(J){B??=J}if(B)throw B}return le}let u={id:s.id,...s.model?{model:s.model}:{},...s.capabilities?{capabilities:s.capabilities}:{},complete:d,completeLocal:d};return Object.defineProperty(u,gn,{value:{provider:s,layers:a}}),u}var uo={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 wn(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 b("Generic OpenAI-compatible providers require baseURL",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let n=me(e.baseURL??t,{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname});return n.pathname=n.pathname.replace(/\/$/,""),n}function oe(e,t){let n=new URL(e.toString());return n.pathname=`${n.pathname.replace(/\/$/,"")}/${t.replace(/^\//,"")}`,n}function wt(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 b("Generic provider authentication header is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let o=t.prefix??"";if(/[\r\n]/.test(o))throw new b("Generic provider authentication prefix is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});return{[n]:`${o}${e.apiKey}`}}function po(e){let t;if(e.kind==="openai-compatible"){if(!e.capabilityProfile)throw new b("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 q("direct-openai-compatible",n);if(t.customToolGrammarsGbnfStreaming&&!t.customToolGrammarsGbnf)throw q("direct-openai-compatible","streaming custom tools without GBNF support");if(t.streaming&&t.customToolGrammarsGbnf&&!t.customToolGrammarsGbnfStreaming)throw q("direct-openai-compatible","streamed grammar-constrained tools");if(!!e.streaming!=!!t.streaming)throw new b("Generic endpoint streaming config must match capabilityProfile.streaming",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}else t={...uo[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 vn(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 Ie(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 Pn(e){return e.filter(t=>t?.type==="image_url")}function xn(e){return e.some(t=>Array.isArray(t.content)&&t.content.some(n=>n.type==="image_url"||n.type==="tool_result"&&Ie(n).length>0))}function yn(e){let t=vn(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 mo(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[yn(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=Ie(n),o=[{type:"text",text:xe(n.content)}];return o.push(...r.map(yn)),[{type:"tool_result",tool_use_id:n.tool_use_id,content:o,is_error:n.is_error}]})}))}function fo(e){return{type:"input_image",image_url:e.image_url.url,detail:e.image_url.detail??"auto"}}function go(e){let t=[];for(let n of e){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});continue}let r=n.content.filter(i=>i.type==="text").map(i=>i.text).join(`
|
|
8
|
-
`),o=[...
|
|
9
|
-
`),s=o.content.filter(d=>d.type==="tool_use").map(d=>{let u=d.provider_metadata?.customInputField;return n&&typeof u=="string"&&typeof d.input[u]=="string"?{id:d.id,type:"custom",custom:{name:d.name,input:d.input[u]}}:{id:d.id,type:"function",function:{name:d.name,arguments:JSON.stringify(d.input)}}});(i||s.length)&&r.push({role:o.role,content:i||null,...s.length?{tool_calls:s}:{}});for(let d of o.content)d.type==="tool_result"&&r.push({role:"tool",tool_call_id:d.tool_use_id,content:xe(d.content)});let a=[...Pn(o.content),...o.content.flatMap(d=>d.type==="tool_result"?Ie(d):[])];a.length&&r.push({role:"user",content:a.map(d=>({type:"image_url",image_url:{url:d.image_url.url,detail:d.image_url.detail??"auto"}}))})}return r}function bn(e,t,n,r,o,i,s=!1,a=!1,d,u,l){return{model:e,messages:_n(t,r?.systemPrompt,s),tools:n.length>0?n.map(c=>bo(c,s)):void 0,...r?.toolChoice!==void 0?{tool_choice:ho(r.toolChoice,n,s)}:{},parallel_tool_calls:a,max_tokens:o,...l?.temperature!==void 0?{temperature:l.temperature}:{},...l?.topP!==void 0?{top_p:l.topP}:{},...l?.seed!==void 0?{seed:l.seed}:{},...i!==void 0||d!==void 0||u!==void 0?{xeno:{...i!==void 0?{max_prompt_tokens:i}:{},...d!==void 0?{enable_thinking:d}:{},...u!==void 0?{tool_format:u}:{}}}:{}}}function ho(e,t,n){if(typeof e=="string"){if(!["auto","none","required"].includes(e)||e==="required"&&t.length===0)throw g("direct-openai-compatible","invalid tool choice");return e}let r=e&&t.find(i=>i.name===e.name);if(!r)throw g("direct-openai-compatible","named tool choice must identify a declared tool");let o=n&&r.grammar?"custom":"function";return{type:o,[o]:{name:r.name}}}function bo(e,t){if(t&&e.grammar){let n=e.grammar,r=e.input_schema.properties[n.inputField];if(n.syntax!=="gbnf"||typeof n.definition!="string"||!n.definition.trim()||Buffer.byteLength(n.definition)>64*1024||n.definition.includes("\0")||Object.keys(e.input_schema.properties).length!==1||r?.type!=="string"||!e.input_schema.required?.includes(n.inputField)||e.input_schema.required.some(o=>o!==n.inputField))throw g("direct-openai-compatible",`tool ${e.name} has an invalid constrained-string contract`);return{type:"custom",custom:{name:e.name,description:e.description,format:{type:"grammar",syntax:"gbnf",definition:n.definition}}}}return{type:"function",function:{name:e.name,description:e.description,parameters:e.input_schema}}}function Cn(e,t,n,r,o){let i=t.find(s=>s.name===r)?.grammar?.inputField;if(!i)throw g(e,`custom tool call names ${r}, which was not sent as a grammar tool`);if(typeof o!="string")throw g(e,"custom tool call input must be text");return{type:"tool_use",id:n,name:r,input:{[i]:o},provider_metadata:{customInputField:i}}}function Rn(e,t,n=!0){let r=new Set;for(let o of t)if(!(!n&&(o.id===void 0||o.id===""))){if(typeof o.id!="string"||o.id.length===0)throw g(e,"tool call is missing id");if(r.has(o.id))throw g(e,`duplicate tool call id ${o.id}`);r.add(o.id)}}function wo(e){return e.map(t=>({name:t.name,description:t.description,parametersJsonSchema:t.input_schema}))}function Le(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 Fe(e,t,n){return{content:e,stopReason:t,...Le(n)}}function ee(e,t,n){if(t&&typeof t=="object"&&!Array.isArray(t))return t;if(typeof t!="string")throw g(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 g(e,`${n} contains malformed tool arguments`,r)}}function vo(e,t){if(!Array.isArray(t.content))throw g(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 g(e,"tool_use is missing id or name");return[{type:"tool_use",id:String(o.id),name:String(o.name),input:ee(e,o.input??{},"tool_use")}]}return[]}),r=t.stop_reason==="tool_use"?"tool_use":t.stop_reason==="max_tokens"?"max_tokens":"end_turn";return Fe(n,r,t.usage??{})}function Po(e,t){if(!Array.isArray(t.output))throw g(e,"output must be an array");let n=[];for(let i of t.output)if(i.type==="message"){if(!Array.isArray(i.content))throw g(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 g(e,"function_call is missing an id");if(!i.name)throw g(e,"function_call is missing a name");n.push({type:"tool_use",id:String(i.call_id??i.id),name:String(i.name),input:ee(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 Fe(n,r?"tool_use":o?"max_tokens":"end_turn",t.usage??{})}function xo(e,t){if(!Array.isArray(t.candidates)||t.candidates.length===0){let s=t.promptFeedback?.blockReason;throw s?new b(`Provider safety policy refused the request: ${String(s)}`,{providerId:e,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):g(e,"candidates must contain at least one item")}let n=t.candidates[0]??{};if(!Array.isArray(n.content?.parts))throw g(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 d=s.functionCall;if(!d.name)throw g(e,"functionCall is missing a name");return[{type:"tool_use",id:String(d.id??`gemini-${a}-${vt().slice(0,8)}`),name:String(d.name),input:ee(e,d.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 Fe(r,o?"tool_use":i?"max_tokens":"end_turn",t.usageMetadata??{})}function Tn(e,t,n=[],r=!1){if(!Array.isArray(t.choices)||t.choices.length===0)throw g(e,"choices must contain an item");let o=t.choices[0]??{},i=o.message;if(!i||typeof i!="object")throw g(e,"choice message is missing");if(i.tool_calls!==void 0&&i.tool_calls!==null&&!Array.isArray(i.tool_calls))throw g(e,"tool_calls must be an array");if(Array.isArray(i.tool_calls)&&i.tool_calls.some(u=>!u||typeof u!="object"))throw g(e,"tool_calls must contain objects");if(o.finish_reason==="error")throw g(e,"runtime reported generation failure");if(i.reasoning_content!==void 0&&i.reasoning_content!==null&&typeof i.reasoning_content!="string")throw g(e,"reasoning_content must be text");let s=[];typeof i.content=="string"&&i.content&&s.push({type:"text",text:i.content});let a=o.finish_reason==="length"||i.tool_calls?.some(u=>u.xeno_grammar?.complete===!1);if(Array.isArray(i.tool_calls)&&Rn(e,i.tool_calls,!a),Array.isArray(i.tool_calls)){let u=[];for(let l of i.tool_calls){if(l.xeno_grammar!==void 0&&typeof l.xeno_grammar?.complete!="boolean")throw g(e,"grammar completion must be a boolean");if(l.type!==void 0&&l.type!=="function"&&l.type!=="custom")throw g(e,"unknown tool call kind");if(l.type==="custom"&&!r)throw g(e,"runtime returned an unnegotiated custom tool call");if(!a){if(l.type==="custom"){if(typeof l.id!="string"||!l.id||typeof l.custom?.name!="string"||!l.custom.name)throw g(e,"custom tool call is missing id or name");u.push(Cn(e,n,l.id,l.custom.name,l.custom.input));continue}if(typeof l.id!="string"||!l.id||typeof l.function?.name!="string"||!l.function.name)throw g(e,"tool call is missing id or name");if(r&&n.find(c=>c.name===l.function.name)?.grammar)throw g(e,"grammar tool returned an unnegotiated function call");u.push({type:"tool_use",id:String(l.id),name:String(l.function.name),input:ee(e,l.function.arguments??"{}","tool call")})}}s.push(...u)}let d=a?"max_tokens":s.some(u=>u.type==="tool_use")?"tool_use":"end_turn";return{...Fe(s,d,t.usage??{}),...typeof i.reasoning_content=="string"?{reasoningContent:i.reasoning_content}:{}}}async function C(e,t){try{await e?.onEvent?.(t)}catch{}}async function kn(e,t,n){await C(n,{type:"message.started"}),e.reasoningContent&&await C(n,{type:"reasoning.delta",text:e.reasoningContent});let r=0;for(let o of e.content)o.type==="text"?(t?.(o.text),await C(n,{type:"text.delta",text:o.text})):o.type==="tool_use"&&(await C(n,{type:"tool_call.started",index:r,toolCallId:o.id,name:o.name}),await C(n,{type:"tool_call.completed",index:r,toolCallId:o.id,name:o.name,input:o.input}),r+=1);await C(n,{type:"usage.updated",inputTokens:e.inputTokens,outputTokens:e.outputTokens}),await C(n,{type:"message.completed",stopReason:e.stopReason})}function Ge(){return{content:[],inputTokens:0,outputTokens:0,usageReported:!1,stopReason:"end_turn",terminal:!1}}function Se(e,t){if(!t.terminal)throw g(e,"stream ended without a terminal event");return{content:t.content,stopReason:t.stopReason,usageReported:t.usageReported,inputTokens:t.inputTokens,outputTokens:t.outputTokens,...t.reasoningContent!==void 0?{reasoningContent:t.reasoningContent}:{}}}function Ke(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 g(e,`invalid stream JSON for ${t.event}`,n)}}async function _o(e){let t=Ge(),n=new Map;return await Ce(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},Ae(e.config,e.providerId),async r=>{let o=Ke(e.providerId,r),i=String(o.type??r.event);if(i==="message_start"){let s=Le(o.message?.usage);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),await C(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 d={index:s,id:String(a.id),name:String(a.name),arguments:""};n.set(s,d),await C(e.context,{type:"tool_call.started",index:s,toolCallId:d.id,name:d.name})}else if(a.type==="text"&&a.text){let d=String(a.text);t.content.push({type:"text",text:d}),e.onText?.(d),await C(e.context,{type:"text.delta",text:d})}}else if(i==="content_block_delta"){let s=o.delta??{};if(s.type==="text_delta"){let a=String(s.text??"");if(a){let d=t.content.at(-1);d?.type==="text"?d.text+=a:t.content.push({type:"text",text:a}),e.onText?.(a),await C(e.context,{type:"text.delta",text:a})}}else if(s.type==="thinking_delta")await C(e.context,{type:"reasoning.delta",text:String(s.thinking??"")});else if(s.type==="input_json_delta"){let a=Number(o.index??0),d=n.get(a);if(!d)throw g(e.providerId,"tool argument delta arrived before tool start");let u=String(s.partial_json??"");d.arguments+=u,await C(e.context,{type:"tool_call.arguments.delta",index:a,toolCallId:d.id,delta:u})}}else if(i==="content_block_stop"){let s=Number(o.index??0),a=n.get(s);if(a){let d=ee(e.providerId,a.arguments||"{}","streamed tool call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:d}),await C(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:d})}}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 C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}else if(i==="message_stop")t.terminal=!0,await C(e.context,{type:"message.completed",stopReason:t.stopReason});else if(i==="error")throw te({providerId:e.providerId,error:o.error??o,outputSeen:t.content.length>0||n.size>0})}),Se(e.providerId,t)}async function Co(e){let t=Ge(),n=new Map;return await Ce(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},Ae(e.config,e.providerId),async r=>{if(r.data==="[DONE]")return;let o=Ke(e.providerId,r),i=String(o.type??r.event);if(i==="response.created")await C(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 C(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 C(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 g(e.providerId,"tool argument delta arrived before tool start");let d=String(o.delta??"");a.arguments+=d,await C(e.context,{type:"tool_call.arguments.delta",index:s,toolCallId:a.id,delta:d})}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:""},d=String(o.item.arguments??a.arguments??"{}"),u=ee(e.providerId,d,"streamed function call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:u}),t.stopReason="tool_use",await C(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:u})}else if(i==="response.completed"||i==="response.incomplete"){let s=o.response??{},a=Le(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 C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens}),await C(e.context,{type:"message.completed",stopReason:t.stopReason})}else if(i==="response.failed"||i==="error")throw te({providerId:e.providerId,error:o.response?.error??o.error??o,outputSeen:t.content.length>0||n.size>0})}),Se(e.providerId,t)}async function Ro(e){let t=Ge(),n=new Map,r=!1;if(await C(e.context,{type:"message.started"}),await Ce(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 a=>{if(a.data==="[DONE]"){t.terminal=!0;return}let d=Ke(e.providerId,a);if(d.error!==void 0&&d.error!==null)throw te({providerId:e.providerId,error:d.error,outputSeen:t.content.length>0||n.size>0});if(d.usage){let u=Le(d.usage);t.inputTokens=u.inputTokens,u.usageReported&&(t.usageReported=!0),t.outputTokens=u.outputTokens,await C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}for(let u of d.choices??[]){let l=u.delta??{};if(l.reasoning_content!==void 0&&l.reasoning_content!==null){if(typeof l.reasoning_content!="string")throw g(e.providerId,"streamed reasoning_content must be text");t.reasoningContent=(t.reasoningContent??"")+l.reasoning_content,l.reasoning_content&&await C(e.context,{type:"reasoning.delta",text:l.reasoning_content})}if(l.tool_calls!==void 0&&l.tool_calls!==null&&!Array.isArray(l.tool_calls))throw g(e.providerId,"streamed tool_calls must be an array");if(typeof l.content=="string"&&l.content){let c=t.content.at(-1);c?.type==="text"?c.text+=l.content:t.content.push({type:"text",text:l.content}),e.onText?.(l.content),await C(e.context,{type:"text.delta",text:l.content})}for(let c of l.tool_calls??[]){if(!c||typeof c!="object")throw g(e.providerId,"tool delta must be an object");let m=Number(c.index??0);if(!Number.isSafeInteger(m)||m<0)throw g(e.providerId,"tool index must be a nonnegative integer");let p=n.get(m);if(p||(p={index:m,id:String(c.id??""),name:"",arguments:""},n.set(m,p)),c.id!==void 0){if(typeof c.id!="string"||!c.id||p.id&&p.id!==c.id)throw g(e.providerId,"streamed tool id is missing or changed");p.id=c.id}let f=c.type??p.kind??(c.custom?"custom":"function");if(f!=="function"&&f!=="custom")throw g(e.providerId,"unknown streamed tool kind");if(p.kind&&p.kind!==f)throw g(e.providerId,"streamed tool changed kind");if(f==="custom"&&!e.customGrammars)throw g(e.providerId,"runtime returned an unnegotiated custom tool delta");if(p.kind=f,c.xeno_grammar!==void 0&&typeof c.xeno_grammar?.complete!="boolean")throw g(e.providerId,"grammar completion must be a boolean");c.xeno_grammar?.complete===!1&&(p.grammarIncomplete=!0),c.function?.name&&(p.name+=String(c.function.name)),c.custom?.name&&(p.name+=String(c.custom.name));let y=f==="custom"?c.custom?.input:c.function?.arguments;if(y!==void 0&&typeof y!="string")throw g(e.providerId,"tool delta input must be text");let h=y??"";p.arguments+=h,p.id&&p.name&&!p.started&&(await C(e.context,{type:"tool_call.started",index:m,toolCallId:p.id,name:p.name}),p.started=!0),p.started&&p.arguments.length>(p.argumentsEmitted??0)&&(await C(e.context,{type:"tool_call.arguments.delta",index:m,toolCallId:p.id,delta:p.arguments.slice(p.argumentsEmitted??0)}),p.argumentsEmitted=p.arguments.length)}if(u.finish_reason){if(u.finish_reason==="error")throw g(e.providerId,"runtime reported generation failure");r=!0,t.stopReason=u.finish_reason==="length"?"max_tokens":n.size?"tool_use":"end_turn"}}}),t.terminal||Se(e.providerId,t),n.size&&!r)throw g(e.providerId,"tool stream has no finish reason");let o=t.stopReason==="max_tokens"||[...n.values()].some(a=>a.grammarIncomplete);o&&(t.stopReason="max_tokens");let i=[...n.values()].sort((a,d)=>a.index-d.index);Rn(e.providerId,i,!o);let s=[];for(let a of i){if(o)continue;if(!a.name||!a.id)throw g(e.providerId,"streamed tool is missing id or name");if(a.kind!=="custom"&&e.customGrammars&&e.sentTools?.find(u=>u.name===a.name)?.grammar)throw g(e.providerId,"grammar tool returned an unnegotiated function delta");let d=a.kind==="custom"?Cn(e.providerId,e.sentTools??[],a.id,a.name,a.arguments):{type:"tool_use",id:a.id,name:a.name,input:ee(e.providerId,a.arguments||"{}","streamed tool call")};if(d.type!=="tool_use")throw g(e.providerId,"invalid custom tool block");s.push({tool:a,block:d})}for(let{tool:a,block:d}of s)t.content.push(d),await C(e.context,{type:"tool_call.completed",index:a.index,toolCallId:a.id,name:a.name,input:d.input});return await C(e.context,{type:"message.completed",stopReason:t.stopReason}),Se(e.providerId,t)}async function To(e){let t=Ge(),n=0;return await C(e.context,{type:"message.started"}),await Ce(e.url,{method:"POST",headers:e.headers,body:JSON.stringify(e.body),signal:e.signal},Ae(e.config,e.providerId),async r=>{let o=Ke(e.providerId,r);if(o.error!==void 0&&o.error!==null)throw te({providerId:e.providerId,error:o.error,outputSeen:t.content.length>0});if(o.usageMetadata){let s=Le(o.usageMetadata);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),t.outputTokens=s.outputTokens,await C(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 C(e.context,{type:"text.delta",text:s.text})}else if(s.functionCall){let a=s.functionCall,d=String(a.id??`gemini-${n}-${vt().slice(0,8)}`),u=String(a.name??""),l=ee(e.providerId,a.args??{},"streamed function call");await C(e.context,{type:"tool_call.started",index:n,toolCallId:d,name:u}),t.content.push({type:"tool_use",id:d,name:u,input:l,...s.thoughtSignature?{provider_metadata:{thoughtSignature:s.thoughtSignature}}:{}}),await C(e.context,{type:"tool_call.completed",index:n,toolCallId:d,name:u,input:l}),n+=1}i?.finishReason&&(t.stopReason=String(i.finishReason).includes("MAX_TOKENS")?"max_tokens":n?"tool_use":"end_turn",t.terminal=!0,await C(e.context,{type:"message.completed",stopReason:t.stopReason}))}),Se(e.providerId,t)}function En(e){return e instanceof b?{type:"provider.error",code:e.code,category:e.category,retryable:e.retryable}:{type:"provider.error",code:"PROVIDER_TRANSPORT_ERROR",category:"transport",retryable:!1}}async function ko(e,t={}){try{let n=new URL(e);if(!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase()))return{gbnf:!1,streaming:!1};let r=await ge(oe(n,"/v1/runtime/capabilities"),{method:"GET",signal:t.signal},{providerId:"direct-openai-compatible",endpointPolicy:{profile:"local-network"},limits:{...t.limits,maxResponseBytes:16384,connectTimeoutMs:Math.min(t.limits?.connectTimeoutMs??1e3,1e3),totalTimeoutMs:Math.min(t.limits?.totalTimeoutMs??1500,1500)}}),o=Array.isArray(r.custom_tool_grammars)&&r.custom_tool_grammars.includes("gbnf");return{gbnf:o,streaming:o&&r.custom_tool_grammars_streaming===!0}}catch(n){if(t.signal?.aborted||n instanceof b&&n.category==="cancelled")throw n;return{gbnf:!1,streaming:!1}}}function Eo(e){let t=e.sampling;if(t===void 0)return;if(e.kind!=="openai-compatible")throw q("direct-provider","OpenAI-compatible sampling options");if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).some(i=>!["temperature","topP","seed"].includes(i)))throw g("direct-provider","sampling must contain only temperature, topP and seed");let{temperature:n,topP:r,seed:o}=t;if(n!==void 0&&(typeof n!="number"||!Number.isFinite(n)||n<0||n>2))throw g("direct-provider","sampling temperature must be finite and between 0 and 2");if(r!==void 0&&(typeof r!="number"||!Number.isFinite(r)||r<=0||r>1))throw g("direct-provider","sampling topP must be finite and greater than 0 through 1");if(o!==void 0&&(typeof o!="number"||!Number.isSafeInteger(o)||o<0))throw g("direct-provider","sampling seed must be a nonnegative safe integer");return Object.freeze({temperature:n,topP:r,seed:o})}function Sn(e){if(e={...e,sampling:Eo(e)},e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw g("direct-provider","maxTokens must be a positive safe integer");let t=`direct-${e.kind}`,n=wn(e);if(e.xenoEnableThinking!==void 0&&(typeof e.xenoEnableThinking!="boolean"||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw g(t,"XENO thinking controls require an explicit loopback xeno-rt endpoint");if(e.xenoToolFormat!==void 0&&(e.xenoToolFormat!=="qwen_native"||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw g(t,"XENO native tool format requires an explicit loopback xeno-rt endpoint");if(e.xenoPromptTokenCeiling!==void 0&&(!Number.isSafeInteger(e.xenoPromptTokenCeiling)||e.xenoPromptTokenCeiling<0||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw g(t,"XENO prompt token ceilings require a nonnegative limit and an explicit loopback xeno-rt endpoint");let r=po(e),o={profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},i={providerId:t,endpointPolicy:o,limits:e.transportLimits},s={id:t,capabilities:r,async complete(d,u,l,c,m,p){let f=He([...l.map(w=>w.name),...u.flatMap(w=>typeof w.content=="string"?[]:w.content.flatMap(R=>R.type==="tool_use"?[R.name]:[]))]),y=l.map(w=>({...w,name:f.encode(w.name)})),h=u.map(w=>typeof w.content=="string"?w:{...w,content:w.content.map(R=>R.type==="tool_use"?{...R,name:f.encode(R.name)}:R)}),P=p?{...p,...typeof p.toolChoice=="object"?{toolChoice:{name:f.encode(p.toolChoice.name)}}:{}}:void 0,v=P?.onEvent?{...P,onEvent:w=>P.onEvent("name"in w&&typeof w.name=="string"?{...w,name:f.decode(w.name)}:w),toolChoice:P.toolChoice}:P,x;try{x=await a(d,h,y,c,m,v)}catch(w){throw pn(w,l.map(R=>R.name),f)}return{...x,content:x.content.map(w=>w.type==="tool_use"?{...w,name:f.decode(w.name)}:w)}}};async function a(d,u,l,c,m,p){{if(l.length>0&&!r.tools)throw q(t,"tools");if(xn(u)&&!r.imageInput)throw q(t,"image input");let f=e.kind==="openai-compatible"?"openai-chat":e.kind==="google"?"google-json-schema":e.kind;if(p?.toolChoice!==void 0&&e.kind!=="openai-compatible")throw q(t,"generic chat tool selection");let y=ke(l,f).map(({definition:x})=>x),h,P={"content-type":"application/json"},v;try{if(e.kind==="anthropic"){if(h=oe(n,"/v1/messages"),P={...P,"x-api-key":e.apiKey,"anthropic-version":e.anthropicVersion??"2023-06-01"},v={model:d,max_tokens:e.maxTokens??8192,system:p?.systemPrompt,messages:mo(u),tools:y.map(R=>({name:R.name,description:R.description,input_schema:R.input_schema}))},e.streaming)return await _o({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p})}else if(e.kind==="google"){let R=e.streaming?"streamGenerateContent":"generateContent";if(h=oe(n,`/v1beta/models/${encodeURIComponent(d)}:${R}`),e.streaming&&h.searchParams.set("alt","sse"),P={...P,"x-goog-api-key":e.apiKey},v={systemInstruction:p?.systemPrompt?{parts:[{text:p.systemPrompt}]}:void 0,contents:yo(u),tools:y.length>0?[{functionDeclarations:wo(y)}]:void 0,generationConfig:{maxOutputTokens:e.maxTokens??8192}},e.streaming)return await To({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p})}else if(e.kind==="openai-compatible"){if(h=oe(n,e.chatCompletionsPath??"/v1/chat/completions"),P={...P,...wt(e)},v=bn(d,u,y,p,e.maxTokens??8192,e.xenoPromptTokenCeiling,r.customToolGrammarsGbnf===!0,r.parallelToolCalls===!0,e.xenoEnableThinking,e.xenoToolFormat,e.sampling),e.streaming)return await Ro({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p,sentTools:y,customGrammars:r.customToolGrammarsGbnf===!0})}else if(h=oe(n,"/v1/responses"),P={...P,authorization:`Bearer ${e.apiKey}`},v={model:d,instructions:p?.systemPrompt,input:go(u),tools:y.map(R=>({type:"function",name:R.name,description:R.description,parameters:R.input_schema})),max_output_tokens:e.maxTokens??8192,store:!1},e.streaming)return await Co({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p});let x=await ge(h,{method:"POST",headers:P,body:JSON.stringify(v),signal:m},i),w=e.kind==="anthropic"?vo(t,x):e.kind==="google"?xo(t,x):e.kind==="openai-compatible"?Tn(t,x,y,r.customToolGrammarsGbnf===!0):Po(t,x);return await kn(w,c,p),w}catch(x){throw x instanceof b&&x.category==="cancelled"?await C(p,{type:"provider.cancelled"}):(await C(p,En(x)),x instanceof b&&x.retryable&&await C(p,{type:"provider.retry",retryAfterMs:x.retryAfterMs,reason:x.category})),x}}}return e.xenoPromptTokenCeiling!==void 0&&(s.prepareQuotaRequest=async(d,u,l,c,m)=>{let p=await ge(oe(n,"/v1/runtime/capabilities"),{method:"GET",signal:m},{...i,limits:{...e.transportLimits,maxResponseBytes:16384}});if(p.prompt_token_ceiling_supported!==!0||p.prompt_token_count_supported!==!0)throw q(t,"XENO prompt token ceiling and exact count");let f=Array.isArray(p.custom_tool_grammars)&&p.custom_tool_grammars.includes("gbnf"),y=f&&p.custom_tool_grammars_streaming===!0,h=f&&(!e.streaming||y);if(r.customToolGrammarsGbnf===!0&&!h)throw q(t,"negotiated local custom tool grammars");let P=r.customToolGrammarsGbnf!==!1&&h,v={...e,capabilityProfile:{...e.capabilityProfile,customToolGrammarsGbnf:P,customToolGrammarsGbnfStreaming:P&&y}},x=structuredClone(u),w=structuredClone(l),R=c?{...c}:void 0,I=He([...w.map(L=>L.name),...x.flatMap(L=>typeof L.content=="string"?[]:L.content.flatMap(K=>K.type==="tool_use"?[K.name]:[]))]),ce=w.map(L=>({...L,name:I.encode(L.name)})),ve=x.map(L=>typeof L.content=="string"?L:{...L,content:L.content.map(K=>K.type==="tool_use"?{...K,name:I.encode(K.name)}:K)}),le=ke(ce,"openai-chat").map(({definition:L})=>L),k=R?{...R,...typeof R.toolChoice=="object"?{toolChoice:{name:I.encode(R.toolChoice.name)}}:{}}:void 0,M=bn(d,ve,le,k,e.maxTokens??8192,void 0,P,r.parallelToolCalls===!0,e.xenoEnableThinking,e.xenoToolFormat,e.sampling),B=await ge(oe(n,"/v1/runtime/chat/prompt-tokens"),{method:"POST",headers:{"content-type":"application/json",...wt(e)},body:JSON.stringify(M),signal:m},{...i,limits:{...e.transportLimits,connectTimeoutMs:9e4,totalTimeoutMs:12e4,maxResponseBytes:16384}}),N=B.prompt_tokens;if(B.object!=="runtime.chat.prompt_tokens"||typeof N!="number"||!Number.isSafeInteger(N)||N<0)throw g(t,"xeno-rt returned an invalid exact prompt token count");if(N>e.xenoPromptTokenCeiling)throw new T("EXCEEDED","Exact prompt exceeds the configured XENO input token ceiling.");let J=R?.quotaRemainingTokens;if(J!==void 0&&(!Number.isSafeInteger(J)||J<0))throw new T("INVALID","Remaining quota must be a nonnegative safe integer.");let G=Math.min(e.maxTokens??8192,J===void 0?Number.MAX_SAFE_INTEGER:J-N);if(G<1)throw new T("EXCEEDED",`Goal token budget exhausted: ${J??0} tokens left, but this request needs exactly ${N} for its input plus at least 1 for the reply. Raise the goal's token limit or start a new goal.`);let Qn=Sn({...v,maxTokens:G,xenoPromptTokenCeiling:N});return{basis:"provider-enforced",inputTokensUpperBound:N,outputTokensUpperBound:G,execute:(L,K)=>Qn.complete(d,x,w,L,K,R)}}),s}function So(e){let t="direct-ollama-native";if(e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw g(t,"maxTokens must be a positive safe integer");let n={...e,kind:"openai-compatible"};if(n.sampling!==void 0)throw q(t,"OpenAI-compatible sampling options");let r=wn(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,d,u){if(xn(i))throw q(t,"image input");try{let l=ke(s,"openai-chat").map(({definition:y})=>y),c=_n(i,u?.systemPrompt).map(y=>({...y,content:y.content??"",...y.tool_calls?{tool_calls:y.tool_calls.map(h=>({...h,function:{...h.function,arguments:ee(t,h.function.arguments,"tool call")}}))}:{}})),m=await ge(oe(r,"/api/chat"),{method:"POST",signal:d,headers:{"content-type":"application/json",...wt(n)},body:JSON.stringify({model:o,messages:c,stream:!1,options:{num_predict:e.maxTokens??8192},tools:l.map(y=>({type:"function",function:{name:y.name,description:y.description,parameters:y.input_schema}}))})},Ae(n,t));if(m.done!==!0||!m.message||typeof m.message!="object")throw g(t,"native completion is missing its terminal message");let p=m.message,f=Tn(t,{choices:[{message:{...p,...Array.isArray(p.tool_calls)?{tool_calls:p.tool_calls.map(y=>({...y,id:y.id??vt()}))}:{}},finish_reason:m.done_reason==="length"?"length":"stop"}],usage:m});return await kn(f,a,u),f}catch(l){throw await C(u,l instanceof b&&l.category==="cancelled"?{type:"provider.cancelled"}:En(l)),l}}}}function Qe(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 An=1,ae={streaming:!0,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!0,usageAccounting:!0,promptCaching:!1,modelDiscovery:!0},We={...ae,reasoningMetadata:!1},Ao=[H("xeno","XENO hosted","xeno","openai-compatible","https://api.xenostudio.ai","public-https","bearer-env","XENO_API_KEY","/v1/models",ae),H("openai","OpenAI","direct","openai-responses","https://api.openai.com","public-https","bearer-env","OPENAI_API_KEY","/v1/models",ae),H("anthropic","Anthropic","direct","anthropic","https://api.anthropic.com","public-https","header-env","ANTHROPIC_API_KEY","/v1/models",{...ae,structuredOutput:!1}),H("google","Google AI Studio","direct","google","https://generativelanguage.googleapis.com","public-https","header-env","GOOGLE_API_KEY","/v1beta/models",ae),H("openrouter","OpenRouter","gateway","openai-compatible","https://openrouter.ai/api","public-https","bearer-env","OPENROUTER_API_KEY","/v1/models",We),H("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"]),H("ollama","Ollama","local","openai-compatible","http://127.0.0.1:11434","local-network","none",void 0,"/v1/models",We,["Ollama OpenAI compatibility endpoint"]),H("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"]),H("aws-bedrock","Amazon Bedrock","cloud","aws-bedrock",void 0,"public-https","cloud-chain",void 0,void 0,{...ae,modelDiscovery:!1},["AWS credential chain","region","Bedrock host adapter"]),H("vertex-ai","Google Vertex AI","cloud","vertex-ai",void 0,"public-https","cloud-chain",void 0,void 0,{...ae,modelDiscovery:!1},["Google application-default credentials","project","region","Vertex host adapter"])],Oe=class{presets=new Map;constructor(t=Ao){for(let n of t)this.add(n)}add(t){Uo(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=In(t.baseUrl??r.defaultBaseUrl,r)}catch(d){o.push(d instanceof Error?d.message:String(d))}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(d=>d.includes("host adapter"))?a="requires-host-adapter":o.some(d=>d.includes("Credential"))?a="missing-credential":o.length&&(a="needs-configuration"),{connection:Bo(t),preset:r,...i?{endpoint:i}:{},...s?{secretRef:s}:{},readiness:a,blockers:o}}};async function Is(e){let n=(e.catalog??new Oe).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:be([...s.errors,`Credential reference ${n.secretRef??"(missing)"} did not resolve`])};if(!n.preset.discoveryPath)return{...s,readiness:"ready",errors:be(s.errors)};let a=me(n.endpoint,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts});try{await st(a,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts,resolveHostname:e.resolveHostname})}catch(c){return{...s,readiness:"blocked",errors:be([...s.errors,c instanceof Error?c.message:String(c)])}}let d=Lo(a,n.preset.discoveryPath),u=Io(n.preset,o),l=Date.now();try{let{response:c,text:m}=await Oo(e.fetchImpl??fetch,d,{headers:u},e.timeoutMs??8e3,e.maxResponseBytes??2097152),p=Date.now()-l,f=c.status===401||c.status===403?!1:c.ok?!0:null;if(!c.ok)return{...s,reachable:!0,authenticated:f,latencyMs:p,readiness:f===!1?"missing-credential":"blocked",errors:be([...s.errors,`Provider discovery returned HTTP ${c.status}`])};let y=JSON.parse(m);return{...s,readiness:"ready",reachable:!0,authenticated:f,latencyMs:p,models:Mo(y),errors:be(s.errors)}}catch(c){return{...s,readiness:"blocked",latencyMs:Date.now()-l,errors:be([...s.errors,Xo(c)])}}}function Ls(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||s.available===!1||s.availability==="unavailable"||n&&!n.has(a)||r.has(a)||!qo({...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,d=o.get(s.connection.preset.id)??Number.MAX_SAFE_INTEGER;return a-d||i.connection.preset.id.localeCompare(s.connection.preset.id)||i.model.id.localeCompare(s.model.id)})}function Os(e,t,n){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");if(n?.capabilities?.textInput===!1)throw new Error(`Provider model ${n.id} does not advertise text input`);let r=jo({...e.preset.capabilities,...n?.capabilities??{}});return{kind:e.preset.adapterKind,apiKey:t??"",baseURL:e.endpoint,endpointProfile:e.preset.endpointProfile,allowedHosts:e.preset.allowedHosts,streaming:r.streaming,...e.preset.adapterKind==="openai-compatible"?{capabilityProfile:r}:{},...e.preset.auth.mode==="header-env"?{authentication:{type:"header",header:e.preset.auth.header??Pt(e.preset.id),prefix:e.preset.auth.prefix}}:{},...e.preset.auth.mode==="none"?{authentication:{type:"none"}}:{}}}function H(e,t,n,r,o,i,s,a,d,u,l=[]){return{schemaVersion:An,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:Pt(e)}:{},description:s==="none"?"No credential required":s==="cloud-chain"?"Provider-owned cloud credential chain":`Environment/credential reference ${a}`},capabilities:u,...d?{discoveryPath:d}:{},requires:l}}function Pt(e){return e==="anthropic"?"x-api-key":e==="google"?"x-goog-api-key":e==="azure-openai"?"api-key":"authorization"}function Io(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??Pt(e.id)]:`${e.auth.prefix??""}${t}`}:{accept:"application/json"}}function In(e,t){return e?me(e.trim().replace(/\/+$/,""),{profile:t.endpointProfile,allowedHosts:t.allowedHosts}).toString().replace(/\/$/,""):void 0}function Lo(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,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,d,u=new Promise((c,m)=>{d=m}),l=setTimeout(()=>{a=!0;let c=new Error("Provider probe timed out");i.abort(c),d(c),s?.cancel().catch(()=>{})},r);try{let c=e(t,{...n,signal:i.signal,redirect:"manual"});c.then(v=>{a&&v.body?.cancel().catch(()=>{})},()=>{});let m=await Promise.race([c,u]);if(m.redirected||m.status>=300&&m.status<400)throw m.body?.cancel().catch(()=>{}),new Error("Provider discovery redirects are disabled");let p=0;if(m.headers.forEach((v,x)=>{p+=Buffer.byteLength(x)+Buffer.byteLength(v)}),p>64*1024)throw m.body?.cancel().catch(()=>{}),new Error("Provider discovery headers exceed limit");if(!m.ok||!m.body)return m.body?.cancel().catch(()=>{}),{response:m,text:""};let f=m.headers.get("content-length");if(f&&/^\d+$/.test(f)&&Number(f)>o)throw m.body.cancel().catch(()=>{}),new Error(`Provider discovery response exceeds ${o} bytes`);s=m.body.getReader();let y=new TextDecoder("utf-8",{fatal:!0}),h=0,P="";for(;;){let v=await Promise.race([s.read(),u]);if(v.done)break;if(h+=v.value.byteLength,h>o)throw new Error(`Provider discovery response exceeds ${o} bytes`);P+=y.decode(v.value,{stream:!0})}return P+=y.decode(),{response:m,text:P}}finally{clearTimeout(l),i.abort(),s&&(s.cancel().catch(()=>{}),s.releaseLock())}}function Mo(e){if(!e||typeof e!="object")return[];let t=e,r=(Array.isArray(t.data)?t.data:Array.isArray(t.models)?t.models:[]).flatMap(i=>{if(!i||typeof i!="object")return[];let s=i,d=(typeof s.id=="string"?s.id:typeof s.name=="string"?s.name.replace(/^models\//,""):"").trim();if(!d||d.length>300||Qe(d))return[];let u=xt(s.type,80),l=Ze(s.supported_input_modalities),c=Ze(s.supported_output_modalities),m=Ze(s.supported_parameters),p=Ze(s.supported_generation_methods),f=Do(s.execution);return[{id:d,...typeof s.displayName=="string"&&s.displayName.trim()?{displayName:s.displayName.trim().slice(0,300)}:{},...typeof s.owned_by=="string"&&s.owned_by.trim()?{ownedBy:s.owned_by.trim().slice(0,200)}:{},...u?{type:u}:{},...l?{supportedInputModalities:l}:{},...c?{supportedOutputModalities:c}:{},...m?{supportedParameters:m}:{},...p?{supportedGenerationMethods:p}:{},...f?{execution:f}:{},...typeof s.available=="boolean"?{available:s.available}:{},...typeof s.availability=="string"&&s.availability.trim()?{availability:s.availability.trim().slice(0,80)}:{},capabilities:No({type:u,inputModalities:l,supportedParameters:m,supportedGenerationMethods:p,execution:f}),metadataSource:"provider"}]}),o=new Map;for(let i of r){let s=o.get(i.id);o.set(i.id,s?$o(s,i):i)}return[...o.values()].sort((i,s)=>i.id.localeCompare(s.id))}function $o(e,t){return{...e,...e.displayName===void 0&&t.displayName!==void 0?{displayName:t.displayName}:{},...e.ownedBy===void 0&&t.ownedBy!==void 0?{ownedBy:t.ownedBy}:{},...e.type===void 0&&t.type!==void 0?{type:t.type}:{},...e.supportedInputModalities===void 0&&t.supportedInputModalities!==void 0?{supportedInputModalities:t.supportedInputModalities}:{},...e.supportedOutputModalities===void 0&&t.supportedOutputModalities!==void 0?{supportedOutputModalities:t.supportedOutputModalities}:{},...e.supportedParameters===void 0&&t.supportedParameters!==void 0?{supportedParameters:t.supportedParameters}:{},...e.supportedGenerationMethods===void 0&&t.supportedGenerationMethods!==void 0?{supportedGenerationMethods:t.supportedGenerationMethods}:{},...e.execution===void 0&&t.execution!==void 0?{execution:t.execution}:{},...e.available===void 0&&t.available!==void 0?{available:t.available}:{},...e.availability===void 0&&t.availability!==void 0?{availability:t.availability}:{},...e.contextTokens===void 0&&t.contextTokens!==void 0?{contextTokens:t.contextTokens}:{},...e.inputCostPerMillion===void 0&&t.inputCostPerMillion!==void 0?{inputCostPerMillion:t.inputCostPerMillion}:{},...e.outputCostPerMillion===void 0&&t.outputCostPerMillion!==void 0?{outputCostPerMillion:t.outputCostPerMillion}:{},...e.capabilities===void 0&&t.capabilities!==void 0?{capabilities:t.capabilities}:{}}}function No(e){let t=e.type?.toLowerCase(),n=e.execution?.endpoint?.toLowerCase()??"",r=new Set((e.supportedParameters??[]).map(l=>l.toLowerCase())),o=new Set((e.supportedGenerationMethods??[]).map(l=>l.toLowerCase())),i=t!==void 0&&t!=="text",s=/\/(?:images|videos|embeddings|audio|moderations)\//.test(n);if(i||s)return{streaming:!1,textInput:!1,imageInput:!1,tools:!1,parallelToolCalls:!1,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!1,promptCaching:!1};if(t===void 0&&!e.execution&&!e.inputModalities&&!e.supportedParameters)return;let a=new Set((e.inputModalities??[]).map(l=>l.toLowerCase())),d=/(?:chat\/completions|responses|generatecontent)/.test(n),u={textInput:a.size>0?a.has("text"):t==="text"||d,imageInput:a.size>0?a.has("image"):!1,tools:r.has("tools"),parallelToolCalls:r.has("parallel_tool_calls")||r.has("parallel-tool-calls")};return e.execution?.stream!==void 0?u.streaming=e.execution.stream:(t==="text"||d)&&(u.streaming=!1),e.execution&&d&&(u.usageAccounting=!0),(o.has("chat")||d)&&(u.textInput=!0),e.supportedParameters&&(u.reasoningMetadata=r.has("reasoning")||r.has("reasoning_effort"),u.structuredOutput=!1,u.promptCaching=r.has("prompt_cache")||r.has("prompt_caching")),u}function xt(e,t){if(typeof e!="string")return;let n=e.trim();if(!(!n||n.length>t||Qe(n)))return n}function Ze(e){if(!Array.isArray(e))return;let t=e.map(n=>xt(n,120)).filter(n=>n!==void 0).slice(0,64);return t.length>0?[...new Set(t)]:void 0}function Do(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let o of["sync","stream","async","batch"])typeof t[o]=="boolean"&&(n[o]=t[o]);typeof t.max_batch_items=="number"&&Number.isSafeInteger(t.max_batch_items)&&t.max_batch_items>0&&t.max_batch_items<=1e5&&(n.maxBatchItems=t.max_batch_items);let r=xt(t.endpoint,200);return r&&(n.endpoint=r),Object.keys(n).length>0?n:void 0}function qo(e,t){return t?Object.entries(t).every(([n,r])=>r!==!0||e[n]===!0):!0}function jo(e){return{streaming:e.streaming,textInput:e.textInput,imageInput:e.imageInput,tools:e.tools,parallelToolCalls:e.parallelToolCalls,structuredOutput:e.structuredOutput,reasoningMetadata:e.reasoningMetadata,usageAccounting:e.usageAccounting,cancellation:!0,retryAfter:!0,promptCaching:e.promptCaching}}function Uo(e){if(e.schemaVersion!==An||!/^[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&&In(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 Bo(e){let t=e.id.trim();if(!t||t.length>120||Qe(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 be(e){return[...new Set(e)]}function Xo(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 Un}from"node:crypto";import{chmod as ei,mkdir as Bn,open as ti,readFile as ni,unlink as ri}from"node:fs/promises";import{dirname as oi,join as qn,resolve as ii}from"node:path";import*as F from"node:fs/promises";var Jo=new Set(["EACCES","EBUSY","EPERM"]),Vo=[10,20,40,80,160,320,640];async function Ln(e,t){for(let n=0;;n+=1)try{await F.rename(e,t);return}catch(r){let o=r.code,i=Vo[n];if(process.platform!=="win32"||!o||!Jo.has(o)||i===void 0)throw r;await new Promise(s=>setTimeout(s,i))}}function Ye(e){return JSON.stringify(_t(e,new Set))}function _t(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=>_t(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]=_t(o,t)}return t.delete(e),n}import{mkdirSync as zo,readFileSync as Ho,rmSync as Mn,writeFileSync as Fo}from"node:fs";import{hostname as $n}from"node:os";import{dirname as Go}from"node:path";function Ko(){return new Date().toISOString()}function Qo(){return new Date(Date.now()-Math.floor(process.uptime()*1e3)).toISOString()}function Nn(e){try{return JSON.parse(Ho(e,"utf8"))}catch{return null}}function Wo(e){if(!e||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function Zo(e){return e.hostname!==$n()?!0:Wo(e.pid)}function On(e,t){zo(Go(e),{recursive:!0}),Fo(e,JSON.stringify(t,null,2)+`
|
|
10
|
-
`,{encoding:"utf8",flag:"wx"})}function
|
|
11
|
-
`),i}finally{n.release()}}};function si(e){return Xn({schemaVersion:Rt,generation:0,updatedAt:e.toISOString(),connections:[],routingPolicy:{}})}function Ct(e,t,n,r){return Xn({schemaVersion:Rt,generation:e.generation+1,updatedAt:r.toISOString(),connections:[...t].sort((o,i)=>o.id.localeCompare(i.id)),routingPolicy:n})}function Xn(e){return{...e,checksum:{algorithm:"sha256",value:Un("sha256").update(zn(e)).digest("hex")}}}function ai(e,t){if(e.schemaVersion!==Rt||!Array.isArray(e.connections))throw new Error("Invalid provider connection snapshot");let{checksum:n,...r}=e;if(n?.algorithm!=="sha256"||n.value!==Un("sha256").update(zn(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(Jn(s),o.has(s.id))throw new Error(`Duplicate provider connection: ${s.id}`);o.add(s.id)}Vn(e.routingPolicy)}function Jn(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 Vn(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 di(e,t){await Bn(oi(e),{recursive:!0,mode:448});let n=`${e}.${process.pid}.${Date.now()}.tmp`,r;try{r=await ti(n,"wx",384),await r.writeFile(t,"utf8"),await r.sync(),await r.close(),r=void 0,await Ln(n,e),await ei(e,384).catch(()=>{})}finally{r&&await r.close().catch(()=>{}),await ri(n).catch(()=>{})}}function zn(e){return Ye(e)}import{createHash as ci,randomUUID as li}from"node:crypto";import{link as ui,lstat as pi,mkdir as mi,open as Tt,readdir as fi,unlink as Hn}from"node:fs/promises";import{join as kt,resolve as gi}from"node:path";var et=e=>ci("sha256").update(Ye(e)).digest("hex"),we=e=>new Date(e).toISOString().slice(0,10);function Fn(e){return e.kind==="policy"?e.policy.limits.tokensLifetime!==void 0||e.policy.scope.goal!==void 0:e.kind==="reserve"&&e.reservation.scope.goal!==void 0&&e.reservation.basis===void 0}function yi(e){return e.kind==="reserve"&&e.reservation.basis!==void 0}function Gn(e){return{requestsPerMinute:e.requestsPerMinute===null?null:S(e.requestsPerMinute),tokensPerDay:e.tokensPerDay===null?null:S(e.tokensPerDay),...e.tokensLifetime!==void 0?{tokensLifetime:e.tokensLifetime===null?null:S(e.tokensLifetime)}:{}}}function Et(e,t){return Ee(e).some(n=>z(n)===z(t))}function de(e){return e.reduce((t,n)=>S(t+n),0)}var Kn=class{constructor(t,n=Date.now,r=1e5){this.now=n;this.maximumEntries=r;this.directory=gi(t),S(r)}now;maximumEntries;directory;async policy(t){return(await this.load()).policies.get(z(t))??null}async setPolicy(t,n,r){let o={scope:Y(t),limits:Gn(n),revision:S(r)+1};return await this.append(()=>({kind:"policy",policy:o,expectedRevision:r})),o}async reservation(t){return(await this.load()).reservations.get(U(t))??null}async reserve(t){if(t.basis!==void 0&&t.basis!=="estimated")throw new T("INVALID","Unknown reservation basis.");let n={id:U(t.id),scope:Y(t.scope),requestHash:U(t.requestHash),reservedTokens:S(t.reservedTokens),...t.basis?{basis:t.basis}:{}};return await this.append((r,o)=>{let i=r.reservations.get(n.id);if(i){if(et([i.scope,i.requestHash,i.reservedTokens,i.basis??null])!==et([n.scope,n.requestHash,n.reservedTokens,n.basis??null]))throw new T("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:U(t)}))}async void(t){await this.append(n=>n.reservations.get(t)?.state==="void"?null:{kind:"void",id:U(t)})}async settle(t,n){S(n),await this.append(r=>{let o=r.reservations.get(t);return o?.state==="settled"&&o.actualTokens===n?null:{kind:"settle",id:U(t),actualTokens:n}})}async snapshot(t){let n=await this.load(),r=S(this.now()),o=Y(t);if(r<n.at)throw new T("CLOCK_ROLLBACK","Quota clock moved backwards.");let i=[...n.reservations.values()].filter(a=>Et(a.scope,o)),s=i.filter(a=>we(a.admittedAt)===we(r));return{authority:"local-file",policies:Ee(o).flatMap(a=>n.policies.get(z(a))?[n.policies.get(z(a))]:[]),heldTokens:de(s.filter(a=>a.state==="reserved"||a.state==="dispatched").map(a=>a.reservedTokens)),usedTokens:de(s.filter(a=>a.state==="settled").map(a=>a.actualTokens)),lifetimeHeldTokens:de(i.filter(a=>a.state==="reserved"||a.state==="dispatched").map(a=>a.reservedTokens)),lifetimeUsedTokens:de(i.filter(a=>a.state==="settled").map(a=>a.actualTokens)),requestsInLastMinute:i.filter(a=>a.state!=="void"&&a.admittedAt>r-6e4).length,unresolved:i.filter(a=>a.state==="dispatched").length}}async remainingTokens(t){let n=await this.load(),r=S(this.now());if(r<n.at)throw new T("CLOCK_ROLLBACK","Quota clock moved backwards.");let o=null;for(let i of Ee(t)){let s=n.policies.get(z(i));if(!s)continue;let a=[...n.reservations.values()].filter(c=>Et(c.scope,i)&&c.state!=="void"),d=c=>de(c.map(m=>m.state==="settled"?m.actualTokens:m.reservedTokens)),u=[s.limits.tokensLifetime===void 0?null:s.limits.tokensLifetime,s.limits.tokensPerDay===null?null:s.limits.tokensPerDay],l=[d(a),d(a.filter(c=>we(c.admittedAt)===we(r)))];for(let c=0;c<u.length;c+=1){let m=u[c];if(m===null)continue;let p=Math.max(0,m-l[c]);o=o===null?p:Math.min(o,p)}}return o}apply(t,n,r,o=!0){if(n.kind==="policy"){let s=n.policy,a=z(s.scope);if((t.policies.get(a)?.revision??0)!==n.expectedRevision||s.revision!==n.expectedRevision+1)throw new T("CONFLICT","Quota policy revision changed.");t.policies.set(a,{scope:Y(s.scope),revision:S(s.revision),limits:Gn(s.limits)});return}if(n.kind==="reserve"){let s=n.reservation;if(U(s.id),U(s.requestHash),Y(s.scope),S(s.reservedTokens),s.state!=="reserved"||s.admittedAt!==r||t.reservations.has(s.id))throw new T("CORRUPT","Invalid reservation record.");for(let a of o?Ee(s.scope):[]){let d=t.policies.get(z(a));if(!d)continue;let u=[...t.reservations.values()].filter(c=>Et(c.scope,a)&&c.state!=="void");if(d.limits.requestsPerMinute!==null&&u.filter(c=>c.admittedAt>r-6e4).length>=d.limits.requestsPerMinute)throw new T("EXCEEDED","Ancestor request rate limit reached.");let l=de(u.filter(c=>we(c.admittedAt)===we(r)).map(c=>c.state==="settled"?c.actualTokens:c.reservedTokens));if(d.limits.tokensPerDay!==null&&S(l+s.reservedTokens)>d.limits.tokensPerDay)throw new T("EXCEEDED","Ancestor daily token limit reached.");if(d.limits.tokensLifetime!==void 0&&d.limits.tokensLifetime!==null){let c=de(u.map(m=>m.state==="settled"?m.actualTokens:m.reservedTokens));if(S(c+s.reservedTokens)>d.limits.tokensLifetime)throw new T("EXCEEDED","Ancestor lifetime token limit reached.")}}t.reservations.set(s.id,structuredClone(s));return}let i=t.reservations.get(n.id);if(!i)throw new T("CONFLICT","Reservation does not exist.");if(n.kind==="dispatch"||n.kind==="void"){if(i.state!=="reserved")throw new T("CONFLICT","Reservation cannot be dispatched twice or release unknown usage.");i.state=n.kind==="dispatch"?"dispatched":"void"}else if(n.kind==="settle"){if(i.state!=="dispatched"||i.basis!=="estimated"&&S(n.actualTokens)>i.reservedTokens)throw new T("CONFLICT","Invalid reservation settlement.");i.state="settled",i.actualTokens=n.actualTokens}else throw new T("CORRUPT","Unknown quota journal operation.")}async load(){let t={sequence:0,hash:"",at:0,policies:new Map,reservations:new Map},n;try{n=await fi(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 T("CAPACITY","Quota journal requires archival maintenance.");for(let o of r){if(o!==`${String(t.sequence+1).padStart(12,"0")}.quota`)throw new T("CORRUPT","Quota journal sequence is incomplete.");let i=kt(this.directory,o),s=await pi(i);if(!s.isFile()||s.isSymbolicLink()||s.size>16384)throw new T("CORRUPT","Invalid quota record file.");let a=await Tt(i,"r"),d;try{let c=Buffer.alloc(16385),m=await a.read(c,0,c.length,0);if(m.bytesRead>16384)throw new T("CORRUPT","Oversized quota record.");d=JSON.parse(c.subarray(0,m.bytesRead).toString("utf8"))}finally{await a.close()}let{hash:u,...l}=d;if(d.version!==1&&d.version!==2&&d.version!==3||d.sequence!==t.sequence+1||d.previousHash!==t.hash||u!==et(l)||S(d.at)<t.at)throw new T("CORRUPT","Quota journal integrity failed.");if(d.version===1&&Fn(d.operation))throw new T("CORRUPT","Lifetime or goal scope requires quota journal version 2.");this.apply(t,d.operation,d.at,!1),t.sequence=d.sequence,t.hash=u,t.at=d.at}return t}async append(t){await mi(this.directory,{recursive:!0,mode:448});for(let n=0;n<100;n++){let r=await this.load(),o=S(this.now());if(o<r.at)throw new T("CLOCK_ROLLBACK","Quota clock moved backwards.");let i=t(r,o);if(!i)return;if(r.sequence>=this.maximumEntries)throw new T("CAPACITY","Quota journal requires archival maintenance.");this.apply(r,i,o);let a={version:yi(i)?3:Fn(i)?2:1,sequence:r.sequence+1,previousHash:r.hash,at:o,operation:i},d=JSON.stringify({...a,hash:et(a)});if(Buffer.byteLength(d)>16384)throw new T("CAPACITY","Quota record exceeds its bound.");let u=kt(this.directory,`${li()}.tmp`),l=kt(this.directory,`${String(a.sequence).padStart(12,"0")}.quota`),c=await Tt(u,"wx",384);try{await c.writeFile(d),await c.sync()}catch(m){throw await c.close(),await Hn(u).catch(()=>{}),m}await c.close();try{if(await ui(u,l),process.platform!=="win32"){let m=await Tt(this.directory,"r");try{await m.sync()}finally{await m.close()}}return}catch(m){if(m.code!=="EEXIST")throw m}finally{await Hn(u).catch(()=>{})}}throw new T("CONFLICT","Quota admission contention exceeded the retry bound.")}};export{Ao as BUILT_IN_XENO_PROVIDER_PRESETS,it as DualLLMProvider,Kn as FileQuotaAuthority,jn as FileXenoProviderConnectionStore,un as PROVIDER_TOOL_NAME_PATTERN,b as ProviderError,bt as QuotaAcknowledgementError,T as QuotaError,A as ToolSchemaProjectionError,An as XENO_PROVIDER_CATALOG_SCHEMA_VERSION,Rt as XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION,Oe as XenoProviderCatalog,st as assertDirectEndpointResolution,Pe as classifyProviderHttpError,te as classifyProviderStreamError,Sn as createDirectProvider,So as createOllamaNativeProvider,hs as createQuotaGovernedProvider,He as createToolNameCodec,Os as directProviderConfigFromConnection,lo as isQuotaControlError,Y as normalizeQuotaScope,$e as parseRetryAfter,ko as probeLocalToolGrammarSupport,Is as probeXenoProvider,ke as projectToolDefinitionsForProvider,cn as projectToolSchemaForProvider,q as providerCapabilityError,g as providerProtocolError,Ee as quotaAncestors,S as quotaInteger,z as quotaScopeKey,U as quotaText,Ls as selectXenoProviderRoute,me as validateDirectEndpoint};
|
|
7
|
+
`);if(x<0)break;let w=l.slice(0,x).replace(/\r$/,"");if(l=l.slice(x+1),!w)await h();else if(!w.startsWith(":")){let R=w.indexOf(":"),I=R<0?w:w.slice(0,R),ce=R<0?"":w.slice(R+1).replace(/^ /,"");I==="event"?m=ce:I==="data"&&p.push(ce)}}}if(l+=je(u,void 0,!1,n.providerId),l.trim())for(let P of l.split(/\r?\n/))P.startsWith("data:")?p.push(P.slice(5).replace(/^ /,"")):P.startsWith("event:")&&(m=P.slice(6).trim());await h()}finally{f&&clearTimeout(f),d.cancel().catch(()=>{}),d.releaseLock()}},o)}import{createHash as io}from"node:crypto";import{isIP as Kt}from"node:net";var Ve=class extends Error{issues;constructor(t){super(`Invalid JSON Schema: ${t.map(n=>`${n.path||"#"} ${n.message}`).join("; ")}`),this.name="JsonSchemaCompilationError",this.issues=t}},ut="https://json-schema.org/draft/2020-12/schema",Nr=new Set(["string","number","integer","boolean","array","object","null"]),Dr=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"]),Yt=new Map([["date",e=>rn(e)],["date-time",e=>no(e)],["time",e=>on(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=>Qt(e)],["idn-email",e=>Qt(e)],["hostname",e=>mt(e)],["idn-hostname",e=>mt(e)],["ipv4",e=>Kt(e)===4],["ipv6",e=>Kt(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=>Wt(e)],["iri",e=>Wt(e)],["uri-reference",e=>Zt(e)],["iri-reference",e=>Zt(e)],["uri-template",e=>ro(e)],["json-pointer",e=>/^(?:\/(?:[^~/]|~[01])*)*$/u.test(e)],["relative-json-pointer",e=>/^(?:0|[1-9]\d*)(?:#|(?:\/(?:[^~/]|~[01])*)*)$/u.test(e)],["regex",(e,t)=>gt(e,t.maxPatternLength)!==void 0]]);function qr(e={}){return{strictKeywords:e.strictKeywords??!0,assertFormats:e.assertFormats??!1,maxSchemaDepth:ne(e.maxSchemaDepth,64,1,256,"maxSchemaDepth"),maxSchemaNodes:ne(e.maxSchemaNodes,4096,1,1e5,"maxSchemaNodes"),maxReferences:ne(e.maxReferences,512,0,1e4,"maxReferences"),maxPatternLength:ne(e.maxPatternLength,256,1,4096,"maxPatternLength"),maxValidationDepth:ne(e.maxValidationDepth,128,1,1024,"maxValidationDepth"),maxValidationSteps:ne(e.maxValidationSteps,1e5,100,1e7,"maxValidationSteps"),maxValidationErrors:ne(e.maxValidationErrors,64,1,1024,"maxValidationErrors"),maxInputBytes:ne(e.maxInputBytes,16*1024*1024,1024,256*1024*1024,"maxInputBytes")}}function ne(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 jr(e,t={}){let n={root:e,options:qr(t),issues:[],rawByPointer:new Map,anchors:new Map,compiledByPointer:new Map,schemaNodes:0,references:0,nextNodeId:1};Xe(e,"",0,n);let r=ie(e,"",0,n);if(n.issues.length>0||!r)throw new Ve(n.issues);return Object.freeze({dialect:ut,formatAssertion:n.options.assertFormats,validate(o){let i=[],s=pt(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),d=Buffer.byteLength(a??"null","utf8");if(d>n.options.maxInputBytes)return i.push({path:"",keyword:"maxInputBytes",schemaPath:"#",message:`input is ${d} bytes; limit is ${n.options.maxInputBytes}`}),{valid:!1,errors:i,steps:0,truncated:!1};let u={options:n.options,errors:i,budget:{steps:0,exhausted:!1},activePairs:new Set,objectIds:new WeakMap,nextObjectId:{value:1}};return W(o,r,"",0,u),{valid:i.length===0,errors:i,steps:u.budget.steps,truncated:u.budget.exhausted||i.length>=n.options.maxValidationErrors}}})}function en(e,t={}){if(!j(e)||e.type!=="object"||!j(e.properties))throw new Ve([{path:"#",keyword:"type",message:"tool input schema root must declare type object and a properties object"}]);return jr(e,t)}function Xe(e,t,n,r){if(n>r.options.maxSchemaDepth){_(r,t,void 0,`schema depth exceeds ${r.options.maxSchemaDepth}`);return}if(typeof e!="boolean"&&!j(e)){_(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){_(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)?_(r,t,"$anchor","$anchor must be a valid plain-name anchor"):r.anchors.has(e.$anchor)?_(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(!j(i)){_(r,t,o,`${o} must be an object`);continue}for(let[s,a]of Object.entries(i))Xe(a,Z(t,o,s),n+1,r)}}for(let o of["items","contains","additionalProperties","not"])e[o]!==void 0&&Xe(e[o],Z(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)){_(r,t,o,`${o} must be an array of schemas`);continue}i.forEach((s,a)=>Xe(s,Z(t,o,String(a)),n+1,r))}}}}}function ie(e,t,n,r){let o=r.compiledByPointer.get(t);if(o)return o;if(typeof e!="boolean"&&!j(e))return;let i={id:r.nextNodeId++,schemaPath:an(t)};if(r.compiledByPointer.set(t,i),typeof e=="boolean")return i.boolean=e,i;if(Br(e,t,r),Ur(e,t,r),e.$schema!==void 0&&(t!==""||e.$schema!==ut&&e.$schema!==`${ut}#`)&&_(r,t,"$schema",t===""?`unsupported dialect ${String(e.$schema)}`:"$schema is only supported at the root"),e.$id!==void 0&&typeof e.$id!="string"&&_(r,t,"$id","$id must be a string"),e.$ref!==void 0)if(typeof e.$ref!="string")_(r,t,"$ref","$ref must be a string");else{r.references+=1,r.references>r.options.maxReferences&&_(r,t,"$ref",`reference count exceeds ${r.options.maxReferences}`);let s=Gr(e.$ref,t,r);if(s!==void 0){let a=r.rawByPointer.get(s);a===void 0?_(r,t,"$ref",`unresolved local reference ${e.$ref}`):i.ref=ie(a,s,n+1,r)}}if(i.types=Xr(e.type,t,r),e.enum!==void 0){let s=e.enum;!Array.isArray(s)||s.length===0?_(r,t,"enum","enum must be a non-empty array"):s.some((a,d)=>s.some((u,l)=>l<d&&ye(a,u)))?_(r,t,"enum","enum values must be unique"):s.some(a=>pt(a))?_(r,t,"enum","enum values must be JSON values"):i.enumValues=s}if(Object.prototype.hasOwnProperty.call(e,"const")&&(pt(e.const)?_(r,t,"const","const must be a JSON value"):(i.hasConst=!0,i.constValue=e.const)),i.multipleOf=Fr(e.multipleOf,t,"multipleOf",r),i.maximum=Re(e.maximum,t,"maximum",r),i.exclusiveMaximum=Re(e.exclusiveMaximum,t,"exclusiveMaximum",r),i.minimum=Re(e.minimum,t,"minimum",r),i.exclusiveMinimum=Re(e.exclusiveMinimum,t,"exclusiveMinimum",r),i.maxLength=re(e.maxLength,t,"maxLength",r),i.minLength=re(e.minLength,t,"minLength",r),i.minItems=re(e.minItems,t,"minItems",r),i.maxItems=re(e.maxItems,t,"maxItems",r),i.minContains=re(e.minContains,t,"minContains",r),i.maxContains=re(e.maxContains,t,"maxContains",r),i.minProperties=re(e.minProperties,t,"minProperties",r),i.maxProperties=re(e.maxProperties,t,"maxProperties",r),Hr(i,t,r),e.pattern!==void 0)if(typeof e.pattern!="string")_(r,t,"pattern","pattern must be a string");else{let s=gt(e.pattern,r.options.maxPatternLength);s?i.pattern={source:e.pattern,regex:s}:_(r,t,"pattern","pattern is invalid or outside the safe regex subset")}if(e.format!==void 0&&(typeof e.format!="string"?_(r,t,"format","format must be a string"):r.options.assertFormats&&!Yt.has(e.format)?_(r,t,"format",`unsupported asserted format ${e.format}`):i.format=e.format),i.prefixItems=Ue(e.prefixItems,t,"prefixItems",n,r,!0),i.items=Be(e.items,t,"items",n,r),i.contains=Be(e.contains,t,"contains",n,r),(e.minContains!==void 0||e.maxContains!==void 0)&&e.contains===void 0&&_(r,t,"contains","minContains/maxContains require contains"),e.uniqueItems!==void 0&&(typeof e.uniqueItems!="boolean"?_(r,t,"uniqueItems","uniqueItems must be boolean"):i.uniqueItems=e.uniqueItems),i.properties=Jr(e.properties,t,"properties",n,r),i.patternProperties=Vr(e.patternProperties,t,n,r),i.additionalProperties=Be(e.additionalProperties,t,"additionalProperties",n,r),i.required=tn(e.required,t,"required",r,!0),i.dependentRequired=zr(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=Be(e.not,t,"not",n,r),j(e.$defs))for(let[s,a]of Object.entries(e.$defs))ie(a,Z(t,"$defs",s),n+1,r);return i}function Br(e,t,n){if(n.options.strictKeywords)for(let r of Object.keys(e))!Dr.has(r)&&!r.startsWith("x-")&&_(n,t,r,`unsupported keyword ${r}`)}function Ur(e,t,n){for(let r of["$comment","title","description"])e[r]!==void 0&&typeof e[r]!="string"&&_(n,t,r,`${r} must be a string`);for(let r of["deprecated","readOnly","writeOnly"])e[r]!==void 0&&typeof e[r]!="boolean"&&_(n,t,r,`${r} must be boolean`);e.examples!==void 0&&!Array.isArray(e.examples)&&_(n,t,"examples","examples must be an array")}function Xr(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"||!Nr.has(o))){_(n,t,"type","type must be a recognized type or non-empty unique type array");return}return new Set(r).size!==r.length&&_(n,t,"type","type array must not contain duplicates"),r}function Be(e,t,n,r,o){if(e!==void 0)return ie(e,Z(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){_(o,t,n,`${n} must be ${i?"an array":"a non-empty array"} of schemas`);return}return e.map((s,a)=>ie(s,Z(t,n,String(a)),r+1,o)).filter(s=>!!s)}}function Jr(e,t,n,r,o){if(e===void 0)return;if(!j(e)){_(o,t,n,`${n} must be an object of schemas`);return}let i=new Map;for(let[s,a]of Object.entries(e)){let d=ie(a,Z(t,n,s),r+1,o);d&&i.set(s,d)}return i}function Vr(e,t,n,r){if(e===void 0)return;if(!j(e)){_(r,t,"patternProperties","patternProperties must be an object of schemas");return}let o=[];for(let[i,s]of Object.entries(e)){let a=gt(i,r.options.maxPatternLength);if(!a){_(r,t,"patternProperties",`pattern ${JSON.stringify(i)} is invalid or outside the safe regex subset`);continue}let d=ie(s,Z(t,"patternProperties",i),n+1,r);d&&o.push({pattern:{source:i,regex:a},schema:d})}return o}function zr(e,t,n){if(e===void 0)return;if(!j(e)){_(n,t,"dependentRequired","dependentRequired must be an object");return}let r=new Map;for(let[o,i]of Object.entries(e)){let s=tn(i,Z(t,"dependentRequired",o),"dependentRequired",n,!0);s&&r.set(o,s)}return r}function tn(e,t,n,r,o){if(e!==void 0){if(!Array.isArray(e)||e.some(i=>typeof i!="string")){_(r,t,n,`${n} must be an array of strings`);return}return o&&new Set(e).size!==e.length&&_(r,t,n,`${n} values must be unique`),e}}function Fr(e,t,n,r){let o=Re(e,t,n,r);return o!==void 0&&o<=0&&_(r,t,n,`${n} must be greater than zero`),o!==void 0&&o>0?o:void 0}function Re(e,t,n,r){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)){_(r,t,n,`${n} must be a finite number`);return}return e}}function re(e,t,n,r){if(e!==void 0){if(!Number.isSafeInteger(e)||e<0){_(r,t,n,`${n} must be a non-negative safe integer`);return}return e}}function Hr(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&&_(n,t,i,`minimum ${i} exceeds maximum`)}function Gr(e,t,n){if(!e.startsWith("#")){_(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(sn).join("/")}`;return n.rawByPointer.has(s)||_(n,t,"$ref",`unresolved JSON Pointer ${e}`),s}let r=e.slice(1),o=n.anchors.get(r);return o===void 0&&_(n,t,"$ref",`unresolved anchor ${e}`),o}function W(e,t,n,r,o){if(!nn(o)||o.errors.length>=o.options.maxValidationErrors)return;if(r>o.options.maxValidationDepth){E(o,n,"maxDepth",t,`validation depth exceeds ${o.options.maxValidationDepth}`);return}if(t.boolean!==void 0){t.boolean||E(o,n,"falseSchema",t,"is rejected by the false schema");return}let i=eo(t,e,o);if(!o.activePairs.has(i)){o.activePairs.add(i);try{if(t.ref&&W(e,t.ref,n,r+1,o),t.enumValues&&!t.enumValues.some(s=>ye(s,e))&&E(o,n,"enum",t,`expected one of ${t.enumValues.map(ft).join(", ")} but got ${lt(e)}`),t.hasConst&&!ye(t.constValue,e)&&E(o,n,"const",t,`expected ${ft(t.constValue)} but got ${lt(e)}`),t.types&&!t.types.some(s=>to(e,s))){let s=t.types.length===1?t.types[0]:`one of [${t.types.join(", ")}]`;E(o,n,"type",t,`expected type ${s} but got ${lt(e)}`);return}Kr(e,t,n,r,o),typeof e=="number"&&Qr(e,t,n,o),typeof e=="string"&&Wr(e,t,n,o),Array.isArray(e)&&Zr(e,t,n,r,o),j(e)&&Yr(e,t,n,r,o)}finally{o.activePairs.delete(i)}}}function Kr(e,t,n,r,o){for(let i of t.allOf??[])W(e,i,n,r+1,o);if(t.anyOf&&t.anyOf.filter(s=>Je(e,s,n,r+1,o)).length===0&&E(o,n,"anyOf",t,"must match at least one anyOf branch"),t.oneOf){let i=t.oneOf.filter(s=>Je(e,s,n,r+1,o)).length;i!==1&&E(o,n,"oneOf",t,`must match exactly one oneOf branch; matched ${i}`)}t.not&&Je(e,t.not,n,r+1,o)&&E(o,n,"not",t,"must not match the disallowed schema")}function Qr(e,t,n,r){t.multipleOf!==void 0&&!oo(e,t.multipleOf)&&E(r,n,"multipleOf",t,`must be a multiple of ${t.multipleOf}`),t.maximum!==void 0&&e>t.maximum&&E(r,n,"maximum",t,`must be <= ${t.maximum}`),t.exclusiveMaximum!==void 0&&e>=t.exclusiveMaximum&&E(r,n,"exclusiveMaximum",t,`must be < ${t.exclusiveMaximum}`),t.minimum!==void 0&&e<t.minimum&&E(r,n,"minimum",t,`must be >= ${t.minimum}`),t.exclusiveMinimum!==void 0&&e<=t.exclusiveMinimum&&E(r,n,"exclusiveMinimum",t,`must be > ${t.exclusiveMinimum}`)}function Wr(e,t,n,r){let o=[...e].length;if(t.minLength!==void 0&&o<t.minLength&&E(r,n,"minLength",t,`must contain at least ${t.minLength} Unicode code points`),t.maxLength!==void 0&&o>t.maxLength&&E(r,n,"maxLength",t,`must contain at most ${t.maxLength} Unicode code points`),t.pattern&&!t.pattern.regex.test(e)&&E(r,n,"pattern",t,`must match pattern ${JSON.stringify(t.pattern.source)}`),t.format&&r.options.assertFormats){let i=Yt.get(t.format);i&&!i(e,r.options)&&E(r,n,"format",t,`must match format ${t.format}`)}}function Zr(e,t,n,r,o){if(t.minItems!==void 0&&e.length<t.minItems&&E(o,n,"minItems",t,`must contain at least ${t.minItems} items`),t.maxItems!==void 0&&e.length>t.maxItems&&E(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(!nn(o))break e;if(ye(e[s],e[a])){E(o,V(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&&W(e[a],s,V(n,String(a)),r+1,o)}),t.items)for(let s=i;s<e.length;s+=1)W(e[s],t.items,V(n,String(s)),r+1,o);if(t.contains){let s=0;for(let d=0;d<e.length;d+=1)Je(e[d],t.contains,V(n,String(d)),r+1,o)&&(s+=1);let a=t.minContains??1;s<a&&E(o,n,"minContains",t,`contains matched ${s} items; minimum is ${a}`),t.maxContains!==void 0&&s>t.maxContains&&E(o,n,"maxContains",t,`contains matched ${s} items; maximum is ${t.maxContains}`)}}function Yr(e,t,n,r,o){let i=Object.keys(e);t.minProperties!==void 0&&i.length<t.minProperties&&E(o,n,"minProperties",t,`must contain at least ${t.minProperties} properties`),t.maxProperties!==void 0&&i.length>t.maxProperties&&E(o,n,"maxProperties",t,`must contain at most ${t.maxProperties} properties`);for(let s of t.required??[])Object.prototype.hasOwnProperty.call(e,s)||E(o,V(n,s),"required",t,"is required");for(let[s,a]of t.dependentRequired??[])if(Object.prototype.hasOwnProperty.call(e,s))for(let d of a)Object.prototype.hasOwnProperty.call(e,d)||E(o,V(n,d),"dependentRequired",t,`is required when ${s} is present`);for(let s of i){let a=!1,d=t.properties?.get(s);d&&(a=!0,W(e[s],d,V(n,s),r+1,o));for(let u of t.patternProperties??[])u.pattern.regex.test(s)&&(a=!0,W(e[s],u.schema,V(n,s),r+1,o));!a&&t.additionalProperties&&W(e[s],t.additionalProperties,V(n,s),r+1,o)}}function Je(e,t,n,r,o){let i={...o,errors:[],activePairs:new Set(o.activePairs)};return W(e,t,n,r,i),i.errors.length===0&&!i.budget.exhausted}function nn(e){return e.budget.steps+=1,e.budget.steps<=e.options.maxValidationSteps?!0:(e.budget.exhausted||(e.budget.exhausted=!0,E(e,"","maxValidationSteps",{schemaPath:"#"},`validation steps exceed ${e.options.maxValidationSteps}`)),!1)}function E(e,t,n,r,o){e.errors.length>=e.options.maxValidationErrors||e.errors.push({path:t,keyword:n,schemaPath:r.schemaPath,message:o})}function eo(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}:${ft(t)}`}function to(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 j(e);case"null":return e===null}}function pt(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 d=n(a,V(o,String(s)));if(d)return d}t.delete(r)};return n(e,"")}function gt(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 rn(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 on(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 no(e){let t=/^([^Tt ]+)[Tt ](.+)$/u.exec(e);return!!(t&&rn(t[1])&&on(t[2]))}function Qt(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&&mt(e.slice(t+1))}function mt(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 Wt(e){try{return!!(new URL(e).protocol&&!/\s/u.test(e))}catch{return!1}}function Zt(e){try{return new URL(e,"https://xeno.invalid/"),!/\s/u.test(e)}catch{return!1}}function ro(e){let t=0;for(let n of e)if(n==="{"&&(t+=1),n==="}"&&(t-=1),t<0||t>1)return!1;return t===0&&![...e].some(n=>{let r=n.codePointAt(0);return r<=31||r===127})}function oo(e,t){let n=e/t;return Math.abs(n-Math.round(n))<=Number.EPSILON*Math.max(1,Math.abs(n))*8}function j(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function ye(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)=>ye(n,t[r]));if(j(e)&&j(t)){let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(o=>Object.prototype.hasOwnProperty.call(t,o)&&ye(e[o],t[o]))}return!1}function V(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 Z(e,...t){return`${e}/${t.map(sn).join("/")}`}function sn(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function an(e){return e.length===0?"#":`#${e}`}function _(e,t,n,r){e.issues.length>=64||e.issues.push({path:an(t),...n?{keyword:n}:{},message:r})}function lt(e){return e===null?"null":Array.isArray(e)?"array":typeof e=="number"?Number.isSafeInteger(e)?"integer":"number":typeof e}function ft(e){try{let t=JSON.stringify(e);return t===void 0?String(e):t}catch{return String(e)}}var A=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}},dn=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),so=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function ln(e,t){en(e);let n=yt(e),r=n,o=cn(n);if(t==="xeno"||t==="google-json-schema")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};ze(r,"",i);let s=se(r,"#",i);if(!he(s))throw new A(t,"#","provider tool root must remain an object schema");return ao(n,s,t),{schema:s,dialect:t,canonicalSha256:o,projectedSha256:cn(s),changes:i.changes}}function ke(e,t){return e.map(n=>{let r=ln(n.input_schema,t);return{definition:{...n,input_schema:r.schema},projection:r}})}function se(e,t,n){if(typeof e=="boolean"){if(n.dialect!=="google")return e;if(e)return{};throw new A(n.dialect,t,"false schemas are not representable by this provider")}if(n.dialect==="google"&&Object.prototype.hasOwnProperty.call(e,"const")&&Array.isArray(e.enum)&&!e.enum.some(o=>Te(o)===Te(e.const)))throw new A(n.dialect,t,"empty const and enum intersection cannot be represented by the legacy dialect; use parametersJsonSchema");if(typeof e.$ref=="string"){let o=co(e.$ref,t,n);if(n.activeReferences.has(e.$ref))throw new A(n.dialect,t,`recursive reference ${e.$ref} cannot be serialized safely`);let i=Object.fromEntries(Object.entries(e).filter(([a])=>a!=="$ref"&&!dn.has(a)));if(Object.keys(i).length>0){if(n.dialect==="google")throw new A(n.dialect,t,"$ref siblings require an unsupported intersection");n.activeReferences.add(e.$ref);let a=se(o,`${t}/$ref`,n);n.activeReferences.delete(e.$ref);let d=se(i,t,n);return n.changes.push({path:t,keyword:"$ref",action:"transformed",reason:"inlined local reference with sibling intersection"}),{allOf:[a,d]}}n.activeReferences.add(e.$ref);let s=se(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(dn.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"&&!so.has(o)){if(o==="const"){if(i===null)throw new A(n.dialect,t,"null const cannot be represented by the provider schema dialect");if(typeof i!="string")throw new A(n.dialect,t,"non-string const cannot be represented by the legacy dialect; use parametersJsonSchema");r.enum=[yt(i)],n.changes.push({path:t,keyword:o,action:"transformed",reason:"Google wire schema represents const as a single-value enum"});continue}throw o==="prefixItems"?new A(n.dialect,t,"tuple prefixItems cannot preserve the provider structural contract"):new A(n.dialect,t,`assertion ${o} cannot be represented without weakening; use parametersJsonSchema`)}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 A(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==="enum"&&n.dialect==="google"&&Array.isArray(i)&&i.some(s=>s===null))throw new A(n.dialect,t,"null enum values cannot be represented by the provider schema dialect");if(o==="enum"&&n.dialect==="google"&&Array.isArray(i)&&i.some(s=>typeof s!="string"))throw new A(n.dialect,t,"non-string enum values cannot be represented by the legacy dialect; use parametersJsonSchema");if(!(o==="enum"&&n.dialect==="google"&&Object.prototype.hasOwnProperty.call(e,"const"))){if(o==="properties"||o==="patternProperties"||o==="$defs"){if(!he(i))throw new A(n.dialect,t,`${o} must be an object`);let s={};for(let[a,d]of Object.entries(i))s[a]=se(d,`${t}/${o}/${ht(a)}`,n);r[o]=s;continue}if(["items","contains","additionalProperties","not"].includes(o)){r[o]=se(i,`${t}/${o}`,n);continue}if(["prefixItems","allOf","anyOf","oneOf"].includes(o)){if(!Array.isArray(i))throw new A(n.dialect,t,`${o} must be an array`);r[o]=i.map((s,a)=>se(s,`${t}/${o}/${a}`,n));continue}r[o]=yt(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 A(n.dialect,t,"minimum structural contract cannot be represented")}return r}function ao(e,t,n){if(t.type!=="object"||!he(t.properties))throw new A(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 A(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 A(n,"#","root required-property contract changed")}function ze(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(he(o))for(let[i,s]of Object.entries(o))ze(s,`${t}/${r}/${ht(i)}`,n)}for(let r of["items","contains","additionalProperties","not"]){let o=e[r];(typeof o=="boolean"||he(o))&&ze(o,`${t}/${r}`,n)}for(let r of["prefixItems","allOf","anyOf","oneOf"]){let o=e[r];Array.isArray(o)&&o.forEach((i,s)=>ze(i,`${t}/${r}/${s}`,n))}}}function co(e,t,n){if(!e.startsWith("#"))throw new A(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(ht).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 A(n.dialect,t,`unresolved reference ${e}`)}function cn(e){return io("sha256").update(Te(e)).digest("hex")}function Te(e){return Array.isArray(e)?`[${e.map(Te).join(",")}]`:he(e)?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Te(e[t])}`).join(",")}}`:JSON.stringify(e)}function yt(e){return JSON.parse(JSON.stringify(e))}function ht(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function he(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}import{createHash as lo}from"node:crypto";var pn=/^[a-zA-Z0-9_-]{1,64}$/,un=64;function uo(e){return lo("sha256").update(e).digest("hex").slice(0,8)}function po(e){return e.replace(/\./g,"__").replace(/[^a-zA-Z0-9_-]/g,"_")}function Fe(e){let t=new Map,n=new Map,r=[...new Set(e)];for(let o of r)pn.test(o)&&(t.set(o,o),n.set(o,o));for(let o of[...r].sort()){if(t.has(o))continue;let i=po(o);if(i.length>un||n.has(i)||i.length===0){let s=`_${uo(o)}`;i=`${i.slice(0,un-s.length)}${s}`}t.set(o,i),n.set(i,o)}return{encode:o=>t.get(o)??o,decode:o=>n.get(o)??o}}function mn(e,t,n){if(!(e instanceof Error))return e;let r=[...new Set(t)].map(i=>[n.encode(i),i]).filter(([i,s])=>i!==s).sort((i,s)=>s[0].length-i[0].length);if(r.length===0)return e;let o=i=>r.reduce((s,[a,d])=>s.replace(new RegExp(`(?<![A-Za-z0-9_-])${a.replace(/[-]/g,"-")}(?![A-Za-z0-9_-])`,"g"),d),i);for(let i of["message","stack"]){let s=e[i];if(typeof s!="string")continue;let a=o(s);a!==s&&Object.defineProperty(e,i,{value:a,writable:!0,configurable:!0,enumerable:!1})}return e}import{createHash as gn}from"node:crypto";async function fn(e,t,n=3e4){t?.throwIfAborted();let r=new AbortController,o=setTimeout(()=>r.abort(new DOMException("Operation acknowledgement timed out.","TimeoutError")),n),i=t?AbortSignal.any([t,r.signal]):r.signal,s;try{let a=await new Promise((d,u)=>{s=()=>u(i.reason),i.addEventListener("abort",s,{once:!0}),Promise.resolve().then(()=>(i.throwIfAborted(),e(i))).then(d,u)});return i.throwIfAborted(),a}finally{s&&i.removeEventListener("abort",s),clearTimeout(o)}}var T=class extends Error{constructor(n,r){super(r);this.code=n;this.name="QuotaError"}code;retryable=!1},bt=class extends Error{constructor(n,r,o){let i=o instanceof b?` (${o.category}${o.statusCode?` HTTP ${o.statusCode}`:""})`:"";super(n==="prepare"?`Quota preparation failed before any reservation${i}.`:`Quota ${n} did not acknowledge; reconcile reservation ${r} before retrying.`,{cause:o});this.phase=n;this.reservationId=r;this.name="QuotaAcknowledgementError"}phase;reservationId;code="ACKNOWLEDGEMENT_FAILED";retryable=!1};function mo(e){return e instanceof Error&&(e.name==="QuotaError"||e.name==="QuotaAcknowledgementError")&&"retryable"in e&&e.retryable===!1&&"code"in e&&typeof e.code=="string"}function S(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<0)throw new T("INVALID","Quota counters must be non-negative safe integers.");return e}function B(e){if(typeof e!="string"||!e.trim()||e.length>512)throw new T("INVALID","Invalid quota identity.");return e}function Y(e){let t=n=>({id:B(n?.id),generation:B(n?.generation)});if(!e||e.agent&&!e.team)throw new T("INVALID","A child quota scope requires its complete ancestry.");return{workspace:t(e.workspace),...e.team?{team:t(e.team)}:{},...e.agent?{agent:t(e.agent)}:{},...e.goal!==void 0?{goal:t(e.goal)}:{}}}function z(e){return JSON.stringify(Y(e))}function Ee(e){let t=Y(e),n=[{workspace:t.workspace},...t.team?[{workspace:t.workspace,team:t.team}]:[],...t.agent?[{workspace:t.workspace,team:t.team,agent:t.agent}]:[]];return t.goal?n.flatMap(r=>[r,{...r,goal:t.goal}]):n}var yn=Symbol.for("@xenosystem/agent-sdk/quota-provider-layers-v1");function Ps(e,t,n,r={}){let o=Y(n),i=e[yn],s=i?.provider??e,a=[...i?.layers??[],{authority:t,scope:o,soft:r.enforcement==="soft"}];async function d(l,c,m,p,f,y){if(f?.throwIfAborted(),!s.prepareQuotaRequest)throw new T("UNSUPPORTED","This provider cannot guarantee per-request token bounds.");let h=B(y?.attemptId),P=gn("sha256").update(JSON.stringify([s.id,l,c,m,y?.systemPrompt??""])).digest("hex"),v=a.map(k=>({...k,id:gn("sha256").update(JSON.stringify([z(k.scope),s.id,h])).digest("hex"),reserved:!1,dispatchStarted:!1})),x=async(k,M,U,N=f,J=3e4)=>{try{return await fn(U,N,J)}catch(G){throw mo(G)?G:M==="prepare"&&G instanceof b&&G.category==="unsupported_capability"?new T("UNSUPPORTED","This provider cannot enforce the requested per-request token ceiling."):new bt(M,k,G)}},w=y?.quotaRemainingTokens??null;for(let k of v){let M=k.authority.remainingTokens?await x(k.id,"prepare",()=>k.authority.remainingTokens(k.scope)):null;M!==null&&(w=w===null?M:Math.min(w,M))}let R=w===null?y:{...y,systemPrompt:y?.systemPrompt??"",quotaRemainingTokens:w},I=await x(v[0].id,"prepare",k=>s.prepareQuotaRequest(l,structuredClone(c),structuredClone(m),R,k),f,12e4),ce=S(S(I.inputTokensUpperBound)+S(I.outputTokensUpperBound)),ve=I.basis==="estimated";if(I.basis!=="provider-enforced"&&!(a.every(k=>k.soft)&&ve))throw new T("UNSUPPORTED","Estimated token bounds cannot enforce a hard quota.");try{for(let k of v)await x(k.id,"reserve",()=>k.authority.reserve({id:k.id,scope:k.scope,requestHash:P,reservedTokens:ce,...ve?{basis:"estimated"}:{}})),k.reserved=!0;f?.throwIfAborted();for(let k of v)k.dispatchStarted=!0,await x(k.id,"dispatch",()=>k.authority.dispatch(k.id));f?.throwIfAborted()}catch(k){for(let M of v.filter(U=>U.reserved&&!U.dispatchStarted).reverse())await x(M.id,"void",()=>M.authority.void(M.id),new AbortController().signal);throw k}let le=await I.execute(p,f);if(f?.throwIfAborted(),le.usageReported){let k=S(le.inputTokens),M=S(le.outputTokens);if(!ve&&k>I.inputTokensUpperBound||M>I.outputTokensUpperBound)throw new T("CORRUPT","Provider exceeded its guaranteed token bound; reservation requires reconciliation.");let U;for(let N of v)try{await x(N.id,"settle",()=>N.authority.settle(N.id,S(k+M)))}catch(J){U??=J}if(U)throw U}return le}let u={id:s.id,...s.model?{model:s.model}:{},...s.capabilities?{capabilities:s.capabilities}:{},complete:d,completeLocal:d};return Object.defineProperty(u,yn,{value:{provider:s,layers:a}}),u}var fo={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 vn(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 b("Generic OpenAI-compatible providers require baseURL",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let n=me(e.baseURL??t,{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname});return n.pathname=n.pathname.replace(/\/$/,""),n}function oe(e,t){let n=new URL(e.toString());return n.pathname=`${n.pathname.replace(/\/$/,"")}/${t.replace(/^\//,"")}`,n}function wt(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 b("Generic provider authentication header is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let o=t.prefix??"";if(/[\r\n]/.test(o))throw new b("Generic provider authentication prefix is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});return{[n]:`${o}${e.apiKey}`}}function go(e){let t;if(e.kind==="openai-compatible"){if(!e.capabilityProfile)throw new b("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 q("direct-openai-compatible",n);if(t.customToolGrammarsGbnfStreaming&&!t.customToolGrammarsGbnf)throw q("direct-openai-compatible","streaming custom tools without GBNF support");if(t.streaming&&t.customToolGrammarsGbnf&&!t.customToolGrammarsGbnfStreaming)throw q("direct-openai-compatible","streamed grammar-constrained tools");if(!!e.streaming!=!!t.streaming)throw new b("Generic endpoint streaming config must match capabilityProfile.streaming",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}else t={...fo[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 Pn(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 Ie(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 xn(e){return e.filter(t=>t?.type==="image_url")}function _n(e){return e.some(t=>Array.isArray(t.content)&&t.content.some(n=>n.type==="image_url"||n.type==="tool_result"&&Ie(n).length>0))}function hn(e){let t=Pn(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 yo(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[hn(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=Ie(n),o=[{type:"text",text:xe(n.content)}];return o.push(...r.map(hn)),[{type:"tool_result",tool_use_id:n.tool_use_id,content:o,is_error:n.is_error}]})}))}function ho(e){return{type:"input_image",image_url:e.image_url.url,detail:e.image_url.detail??"auto"}}function bo(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=[...xn(n.content),...n.content.flatMap(i=>i.type==="tool_result"?Ie(i):[])];(r||o.length)&&t.push({role:n.role,content:[...r?[{type:"input_text",text:r}]:[],...o.map(ho)]});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:xe(i.content)})}return t}function bn(e){let t=Pn(e.image_url.url);return t?{inlineData:{mimeType:t.mediaType,data:t.data}}:{fileData:{fileUri:e.image_url.url}}}function wo(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[bn(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=xe(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}}},...Ie(r).map(bn)]})})}function Cn(e,t,n=!1){let r=t?[{role:"system",content:t}]:[];for(let o of e){if(typeof o.content=="string"){r.push({role:o.role,content:o.content});continue}let i=o.content.filter(d=>d.type==="text").map(d=>d.text).join(`
|
|
9
|
+
`),s=o.content.filter(d=>d.type==="tool_use").map(d=>{let u=d.provider_metadata?.customInputField;return n&&typeof u=="string"&&typeof d.input[u]=="string"?{id:d.id,type:"custom",custom:{name:d.name,input:d.input[u]}}:{id:d.id,type:"function",function:{name:d.name,arguments:JSON.stringify(d.input)}}});(i||s.length)&&r.push({role:o.role,content:i||null,...s.length?{tool_calls:s}:{}});for(let d of o.content)d.type==="tool_result"&&r.push({role:"tool",tool_call_id:d.tool_use_id,content:xe(d.content)});let a=[...xn(o.content),...o.content.flatMap(d=>d.type==="tool_result"?Ie(d):[])];a.length&&r.push({role:"user",content:a.map(d=>({type:"image_url",image_url:{url:d.image_url.url,detail:d.image_url.detail??"auto"}}))})}return r}function wn(e,t,n,r,o,i,s=!1,a=!1,d,u,l){return{model:e,messages:Cn(t,r?.systemPrompt,s),tools:n.length>0?n.map(c=>Po(c,s)):void 0,...r?.toolChoice!==void 0?{tool_choice:vo(r.toolChoice,n,s)}:{},parallel_tool_calls:a,max_tokens:o,...l?.temperature!==void 0?{temperature:l.temperature}:{},...l?.topP!==void 0?{top_p:l.topP}:{},...l?.seed!==void 0?{seed:l.seed}:{},...i!==void 0||d!==void 0||u!==void 0?{xeno:{...i!==void 0?{max_prompt_tokens:i}:{},...d!==void 0?{enable_thinking:d}:{},...u!==void 0?{tool_format:u}:{}}}:{}}}function vo(e,t,n){if(typeof e=="string"){if(!["auto","none","required"].includes(e)||e==="required"&&t.length===0)throw g("direct-openai-compatible","invalid tool choice");return e}let r=e&&t.find(i=>i.name===e.name);if(!r)throw g("direct-openai-compatible","named tool choice must identify a declared tool");let o=n&&r.grammar?"custom":"function";return{type:o,[o]:{name:r.name}}}function Po(e,t){if(t&&e.grammar){let n=e.grammar,r=e.input_schema.properties[n.inputField];if(n.syntax!=="gbnf"||typeof n.definition!="string"||!n.definition.trim()||Buffer.byteLength(n.definition)>64*1024||n.definition.includes("\0")||Object.keys(e.input_schema.properties).length!==1||r?.type!=="string"||!e.input_schema.required?.includes(n.inputField)||e.input_schema.required.some(o=>o!==n.inputField))throw g("direct-openai-compatible",`tool ${e.name} has an invalid constrained-string contract`);return{type:"custom",custom:{name:e.name,description:e.description,format:{type:"grammar",syntax:"gbnf",definition:n.definition}}}}return{type:"function",function:{name:e.name,description:e.description,parameters:e.input_schema}}}function Rn(e,t,n,r,o){let i=t.find(s=>s.name===r)?.grammar?.inputField;if(!i)throw g(e,`custom tool call names ${r}, which was not sent as a grammar tool`);if(typeof o!="string")throw g(e,"custom tool call input must be text");return{type:"tool_use",id:n,name:r,input:{[i]:o},provider_metadata:{customInputField:i}}}function Tn(e,t,n=!0){let r=new Set;for(let o of t)if(!(!n&&(o.id===void 0||o.id===""))){if(typeof o.id!="string"||o.id.length===0)throw g(e,"tool call is missing id");if(r.has(o.id))throw g(e,`duplicate tool call id ${o.id}`);r.add(o.id)}}function xo(e){return e.map(t=>({name:t.name,description:t.description,parametersJsonSchema:t.input_schema}))}function Le(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,...Le(n)}}function ee(e,t,n){if(t&&typeof t=="object"&&!Array.isArray(t))return t;if(typeof t!="string")throw g(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 g(e,`${n} contains malformed tool arguments`,r)}}function _o(e,t){if(!Array.isArray(t.content))throw g(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 g(e,"tool_use is missing id or name");return[{type:"tool_use",id:String(o.id),name:String(o.name),input:ee(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 Co(e,t){if(!Array.isArray(t.output))throw g(e,"output must be an array");let n=[];for(let i of t.output)if(i.type==="message"){if(!Array.isArray(i.content))throw g(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 g(e,"function_call is missing an id");if(!i.name)throw g(e,"function_call is missing a name");n.push({type:"tool_use",id:String(i.call_id??i.id),name:String(i.name),input:ee(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 Ro(e,t){if(!Array.isArray(t.candidates)||t.candidates.length===0){let s=t.promptFeedback?.blockReason;throw s?new b(`Provider safety policy refused the request: ${String(s)}`,{providerId:e,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):g(e,"candidates must contain at least one item")}let n=t.candidates[0]??{};if(!Array.isArray(n.content?.parts))throw g(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 d=s.functionCall;if(!d.name)throw g(e,"functionCall is missing a name");return[{type:"tool_use",id:String(d.id??`gemini-${a}-${vt().slice(0,8)}`),name:String(d.name),input:ee(e,d.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 kn(e,t,n=[],r=!1){if(!Array.isArray(t.choices)||t.choices.length===0)throw g(e,"choices must contain an item");let o=t.choices[0]??{},i=o.message;if(!i||typeof i!="object")throw g(e,"choice message is missing");if(i.tool_calls!==void 0&&i.tool_calls!==null&&!Array.isArray(i.tool_calls))throw g(e,"tool_calls must be an array");if(Array.isArray(i.tool_calls)&&i.tool_calls.some(u=>!u||typeof u!="object"))throw g(e,"tool_calls must contain objects");if(o.finish_reason==="error")throw g(e,"runtime reported generation failure");if(i.reasoning_content!==void 0&&i.reasoning_content!==null&&typeof i.reasoning_content!="string")throw g(e,"reasoning_content must be text");let s=[];typeof i.content=="string"&&i.content&&s.push({type:"text",text:i.content});let a=o.finish_reason==="length"||i.tool_calls?.some(u=>u.xeno_grammar?.complete===!1);if(Array.isArray(i.tool_calls)&&Tn(e,i.tool_calls,!a),Array.isArray(i.tool_calls)){let u=[];for(let l of i.tool_calls){if(l.xeno_grammar!==void 0&&typeof l.xeno_grammar?.complete!="boolean")throw g(e,"grammar completion must be a boolean");if(l.type!==void 0&&l.type!=="function"&&l.type!=="custom")throw g(e,"unknown tool call kind");if(l.type==="custom"&&!r)throw g(e,"runtime returned an unnegotiated custom tool call");if(!a){if(l.type==="custom"){if(typeof l.id!="string"||!l.id||typeof l.custom?.name!="string"||!l.custom.name)throw g(e,"custom tool call is missing id or name");u.push(Rn(e,n,l.id,l.custom.name,l.custom.input));continue}if(typeof l.id!="string"||!l.id||typeof l.function?.name!="string"||!l.function.name)throw g(e,"tool call is missing id or name");if(r&&n.find(c=>c.name===l.function.name)?.grammar)throw g(e,"grammar tool returned an unnegotiated function call");u.push({type:"tool_use",id:String(l.id),name:String(l.function.name),input:ee(e,l.function.arguments??"{}","tool call")})}}s.push(...u)}let d=a?"max_tokens":s.some(u=>u.type==="tool_use")?"tool_use":"end_turn";return{...He(s,d,t.usage??{}),...typeof i.reasoning_content=="string"?{reasoningContent:i.reasoning_content}:{}}}async function C(e,t){try{await e?.onEvent?.(t)}catch{}}async function En(e,t,n){await C(n,{type:"message.started"}),e.reasoningContent&&await C(n,{type:"reasoning.delta",text:e.reasoningContent});let r=0;for(let o of e.content)o.type==="text"?(t?.(o.text),await C(n,{type:"text.delta",text:o.text})):o.type==="tool_use"&&(await C(n,{type:"tool_call.started",index:r,toolCallId:o.id,name:o.name}),await C(n,{type:"tool_call.completed",index:r,toolCallId:o.id,name:o.name,input:o.input}),r+=1);await C(n,{type:"usage.updated",inputTokens:e.inputTokens,outputTokens:e.outputTokens}),await C(n,{type:"message.completed",stopReason:e.stopReason})}function Ge(){return{content:[],inputTokens:0,outputTokens:0,usageReported:!1,stopReason:"end_turn",terminal:!1}}function Se(e,t){if(!t.terminal)throw g(e,"stream ended without a terminal event");return{content:t.content,stopReason:t.stopReason,usageReported:t.usageReported,inputTokens:t.inputTokens,outputTokens:t.outputTokens,...t.reasoningContent!==void 0?{reasoningContent:t.reasoningContent}:{}}}function Ke(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 g(e,`invalid stream JSON for ${t.event}`,n)}}async function To(e){let t=Ge(),n=new Map;return await Ce(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},Ae(e.config,e.providerId),async r=>{let o=Ke(e.providerId,r),i=String(o.type??r.event);if(i==="message_start"){let s=Le(o.message?.usage);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),await C(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 d={index:s,id:String(a.id),name:String(a.name),arguments:""};n.set(s,d),await C(e.context,{type:"tool_call.started",index:s,toolCallId:d.id,name:d.name})}else if(a.type==="text"&&a.text){let d=String(a.text);t.content.push({type:"text",text:d}),e.onText?.(d),await C(e.context,{type:"text.delta",text:d})}}else if(i==="content_block_delta"){let s=o.delta??{};if(s.type==="text_delta"){let a=String(s.text??"");if(a){let d=t.content.at(-1);d?.type==="text"?d.text+=a:t.content.push({type:"text",text:a}),e.onText?.(a),await C(e.context,{type:"text.delta",text:a})}}else if(s.type==="thinking_delta")await C(e.context,{type:"reasoning.delta",text:String(s.thinking??"")});else if(s.type==="input_json_delta"){let a=Number(o.index??0),d=n.get(a);if(!d)throw g(e.providerId,"tool argument delta arrived before tool start");let u=String(s.partial_json??"");d.arguments+=u,await C(e.context,{type:"tool_call.arguments.delta",index:a,toolCallId:d.id,delta:u})}}else if(i==="content_block_stop"){let s=Number(o.index??0),a=n.get(s);if(a){let d=ee(e.providerId,a.arguments||"{}","streamed tool call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:d}),await C(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:d})}}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 C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}else if(i==="message_stop")t.terminal=!0,await C(e.context,{type:"message.completed",stopReason:t.stopReason});else if(i==="error")throw te({providerId:e.providerId,error:o.error??o,outputSeen:t.content.length>0||n.size>0})}),Se(e.providerId,t)}async function ko(e){let t=Ge(),n=new Map;return await Ce(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},Ae(e.config,e.providerId),async r=>{if(r.data==="[DONE]")return;let o=Ke(e.providerId,r),i=String(o.type??r.event);if(i==="response.created")await C(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 C(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 C(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 g(e.providerId,"tool argument delta arrived before tool start");let d=String(o.delta??"");a.arguments+=d,await C(e.context,{type:"tool_call.arguments.delta",index:s,toolCallId:a.id,delta:d})}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:""},d=String(o.item.arguments??a.arguments??"{}"),u=ee(e.providerId,d,"streamed function call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:u}),t.stopReason="tool_use",await C(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:u})}else if(i==="response.completed"||i==="response.incomplete"){let s=o.response??{},a=Le(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 C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens}),await C(e.context,{type:"message.completed",stopReason:t.stopReason})}else if(i==="response.failed"||i==="error")throw te({providerId:e.providerId,error:o.response?.error??o.error??o,outputSeen:t.content.length>0||n.size>0})}),Se(e.providerId,t)}async function Eo(e){let t=Ge(),n=new Map,r=!1;if(await C(e.context,{type:"message.started"}),await Ce(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 a=>{if(a.data==="[DONE]"){t.terminal=!0;return}let d=Ke(e.providerId,a);if(d.error!==void 0&&d.error!==null)throw te({providerId:e.providerId,error:d.error,outputSeen:t.content.length>0||n.size>0});if(d.usage){let u=Le(d.usage);t.inputTokens=u.inputTokens,u.usageReported&&(t.usageReported=!0),t.outputTokens=u.outputTokens,await C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}for(let u of d.choices??[]){let l=u.delta??{};if(l.reasoning_content!==void 0&&l.reasoning_content!==null){if(typeof l.reasoning_content!="string")throw g(e.providerId,"streamed reasoning_content must be text");t.reasoningContent=(t.reasoningContent??"")+l.reasoning_content,l.reasoning_content&&await C(e.context,{type:"reasoning.delta",text:l.reasoning_content})}if(l.tool_calls!==void 0&&l.tool_calls!==null&&!Array.isArray(l.tool_calls))throw g(e.providerId,"streamed tool_calls must be an array");if(typeof l.content=="string"&&l.content){let c=t.content.at(-1);c?.type==="text"?c.text+=l.content:t.content.push({type:"text",text:l.content}),e.onText?.(l.content),await C(e.context,{type:"text.delta",text:l.content})}for(let c of l.tool_calls??[]){if(!c||typeof c!="object")throw g(e.providerId,"tool delta must be an object");let m=Number(c.index??0);if(!Number.isSafeInteger(m)||m<0)throw g(e.providerId,"tool index must be a nonnegative integer");let p=n.get(m);if(p||(p={index:m,id:String(c.id??""),name:"",arguments:""},n.set(m,p)),c.id!==void 0){if(typeof c.id!="string"||!c.id||p.id&&p.id!==c.id)throw g(e.providerId,"streamed tool id is missing or changed");p.id=c.id}let f=c.type??p.kind??(c.custom?"custom":"function");if(f!=="function"&&f!=="custom")throw g(e.providerId,"unknown streamed tool kind");if(p.kind&&p.kind!==f)throw g(e.providerId,"streamed tool changed kind");if(f==="custom"&&!e.customGrammars)throw g(e.providerId,"runtime returned an unnegotiated custom tool delta");if(p.kind=f,c.xeno_grammar!==void 0&&typeof c.xeno_grammar?.complete!="boolean")throw g(e.providerId,"grammar completion must be a boolean");c.xeno_grammar?.complete===!1&&(p.grammarIncomplete=!0),c.function?.name&&(p.name+=String(c.function.name)),c.custom?.name&&(p.name+=String(c.custom.name));let y=f==="custom"?c.custom?.input:c.function?.arguments;if(y!==void 0&&typeof y!="string")throw g(e.providerId,"tool delta input must be text");let h=y??"";p.arguments+=h,p.id&&p.name&&!p.started&&(await C(e.context,{type:"tool_call.started",index:m,toolCallId:p.id,name:p.name}),p.started=!0),p.started&&p.arguments.length>(p.argumentsEmitted??0)&&(await C(e.context,{type:"tool_call.arguments.delta",index:m,toolCallId:p.id,delta:p.arguments.slice(p.argumentsEmitted??0)}),p.argumentsEmitted=p.arguments.length)}if(u.finish_reason){if(u.finish_reason==="error")throw g(e.providerId,"runtime reported generation failure");r=!0,t.stopReason=u.finish_reason==="length"?"max_tokens":n.size?"tool_use":"end_turn"}}}),t.terminal||Se(e.providerId,t),n.size&&!r)throw g(e.providerId,"tool stream has no finish reason");let o=t.stopReason==="max_tokens"||[...n.values()].some(a=>a.grammarIncomplete);o&&(t.stopReason="max_tokens");let i=[...n.values()].sort((a,d)=>a.index-d.index);Tn(e.providerId,i,!o);let s=[];for(let a of i){if(o)continue;if(!a.name||!a.id)throw g(e.providerId,"streamed tool is missing id or name");if(a.kind!=="custom"&&e.customGrammars&&e.sentTools?.find(u=>u.name===a.name)?.grammar)throw g(e.providerId,"grammar tool returned an unnegotiated function delta");let d=a.kind==="custom"?Rn(e.providerId,e.sentTools??[],a.id,a.name,a.arguments):{type:"tool_use",id:a.id,name:a.name,input:ee(e.providerId,a.arguments||"{}","streamed tool call")};if(d.type!=="tool_use")throw g(e.providerId,"invalid custom tool block");s.push({tool:a,block:d})}for(let{tool:a,block:d}of s)t.content.push(d),await C(e.context,{type:"tool_call.completed",index:a.index,toolCallId:a.id,name:a.name,input:d.input});return await C(e.context,{type:"message.completed",stopReason:t.stopReason}),Se(e.providerId,t)}async function So(e){let t=Ge(),n=0;return await C(e.context,{type:"message.started"}),await Ce(e.url,{method:"POST",headers:e.headers,body:JSON.stringify(e.body),signal:e.signal},Ae(e.config,e.providerId),async r=>{let o=Ke(e.providerId,r);if(o.error!==void 0&&o.error!==null)throw te({providerId:e.providerId,error:o.error,outputSeen:t.content.length>0});if(o.usageMetadata){let s=Le(o.usageMetadata);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),t.outputTokens=s.outputTokens,await C(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 C(e.context,{type:"text.delta",text:s.text})}else if(s.functionCall){let a=s.functionCall,d=String(a.id??`gemini-${n}-${vt().slice(0,8)}`),u=String(a.name??""),l=ee(e.providerId,a.args??{},"streamed function call");await C(e.context,{type:"tool_call.started",index:n,toolCallId:d,name:u}),t.content.push({type:"tool_use",id:d,name:u,input:l,...s.thoughtSignature?{provider_metadata:{thoughtSignature:s.thoughtSignature}}:{}}),await C(e.context,{type:"tool_call.completed",index:n,toolCallId:d,name:u,input:l}),n+=1}i?.finishReason&&(t.stopReason=String(i.finishReason).includes("MAX_TOKENS")?"max_tokens":n?"tool_use":"end_turn",t.terminal=!0,await C(e.context,{type:"message.completed",stopReason:t.stopReason}))}),Se(e.providerId,t)}function Sn(e){return e instanceof b?{type:"provider.error",code:e.code,category:e.category,retryable:e.retryable}:{type:"provider.error",code:"PROVIDER_TRANSPORT_ERROR",category:"transport",retryable:!1}}async function Ao(e,t={}){try{let n=new URL(e);if(!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase()))return{gbnf:!1,streaming:!1};let r=await ge(oe(n,"/v1/runtime/capabilities"),{method:"GET",signal:t.signal},{providerId:"direct-openai-compatible",endpointPolicy:{profile:"local-network"},limits:{...t.limits,maxResponseBytes:16384,connectTimeoutMs:Math.min(t.limits?.connectTimeoutMs??1e3,1e3),totalTimeoutMs:Math.min(t.limits?.totalTimeoutMs??1500,1500)}}),o=Array.isArray(r.custom_tool_grammars)&&r.custom_tool_grammars.includes("gbnf");return{gbnf:o,streaming:o&&r.custom_tool_grammars_streaming===!0}}catch(n){if(t.signal?.aborted||n instanceof b&&n.category==="cancelled")throw n;return{gbnf:!1,streaming:!1}}}function Io(e){let t=e.sampling;if(t===void 0)return;if(e.kind!=="openai-compatible")throw q("direct-provider","OpenAI-compatible sampling options");if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).some(i=>!["temperature","topP","seed"].includes(i)))throw g("direct-provider","sampling must contain only temperature, topP and seed");let{temperature:n,topP:r,seed:o}=t;if(n!==void 0&&(typeof n!="number"||!Number.isFinite(n)||n<0||n>2))throw g("direct-provider","sampling temperature must be finite and between 0 and 2");if(r!==void 0&&(typeof r!="number"||!Number.isFinite(r)||r<=0||r>1))throw g("direct-provider","sampling topP must be finite and greater than 0 through 1");if(o!==void 0&&(typeof o!="number"||!Number.isSafeInteger(o)||o<0))throw g("direct-provider","sampling seed must be a nonnegative safe integer");return Object.freeze({temperature:n,topP:r,seed:o})}function An(e){if(e={...e,sampling:Io(e)},e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw g("direct-provider","maxTokens must be a positive safe integer");let t=`direct-${e.kind}`,n=vn(e);if(e.xenoEnableThinking!==void 0&&(typeof e.xenoEnableThinking!="boolean"||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw g(t,"XENO thinking controls require an explicit loopback xeno-rt endpoint");if(e.xenoToolFormat!==void 0&&(e.xenoToolFormat!=="qwen_native"||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw g(t,"XENO native tool format requires an explicit loopback xeno-rt endpoint");if(e.xenoPromptTokenCeiling!==void 0&&(!Number.isSafeInteger(e.xenoPromptTokenCeiling)||e.xenoPromptTokenCeiling<0||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw g(t,"XENO prompt token ceilings require a nonnegative limit and an explicit loopback xeno-rt endpoint");let r=go(e),o={profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},i={providerId:t,endpointPolicy:o,limits:e.transportLimits},s={id:t,capabilities:r,async complete(d,u,l,c,m,p){let f=Fe([...l.map(w=>w.name),...u.flatMap(w=>typeof w.content=="string"?[]:w.content.flatMap(R=>R.type==="tool_use"?[R.name]:[]))]),y=l.map(w=>({...w,name:f.encode(w.name)})),h=u.map(w=>typeof w.content=="string"?w:{...w,content:w.content.map(R=>R.type==="tool_use"?{...R,name:f.encode(R.name)}:R)}),P=p?{...p,...typeof p.toolChoice=="object"?{toolChoice:{name:f.encode(p.toolChoice.name)}}:{}}:void 0,v=P?.onEvent?{...P,onEvent:w=>P.onEvent("name"in w&&typeof w.name=="string"?{...w,name:f.decode(w.name)}:w),toolChoice:P.toolChoice}:P,x;try{x=await a(d,h,y,c,m,v)}catch(w){throw mn(w,l.map(R=>R.name),f)}return{...x,content:x.content.map(w=>w.type==="tool_use"?{...w,name:f.decode(w.name)}:w)}}};async function a(d,u,l,c,m,p){{if(l.length>0&&!r.tools)throw q(t,"tools");if(_n(u)&&!r.imageInput)throw q(t,"image input");let f=e.kind==="openai-compatible"?"openai-chat":e.kind==="google"?"google-json-schema":e.kind;if(p?.toolChoice!==void 0&&e.kind!=="openai-compatible")throw q(t,"generic chat tool selection");let y=ke(l,f).map(({definition:x})=>x),h,P={"content-type":"application/json"},v;try{if(e.kind==="anthropic"){if(h=oe(n,"/v1/messages"),P={...P,"x-api-key":e.apiKey,"anthropic-version":e.anthropicVersion??"2023-06-01"},v={model:d,max_tokens:e.maxTokens??8192,system:p?.systemPrompt,messages:yo(u),tools:y.map(R=>({name:R.name,description:R.description,input_schema:R.input_schema}))},e.streaming)return await To({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p})}else if(e.kind==="google"){let R=e.streaming?"streamGenerateContent":"generateContent";if(h=oe(n,`/v1beta/models/${encodeURIComponent(d)}:${R}`),e.streaming&&h.searchParams.set("alt","sse"),P={...P,"x-goog-api-key":e.apiKey},v={systemInstruction:p?.systemPrompt?{parts:[{text:p.systemPrompt}]}:void 0,contents:wo(u),tools:y.length>0?[{functionDeclarations:xo(y)}]:void 0,generationConfig:{maxOutputTokens:e.maxTokens??8192}},e.streaming)return await So({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p})}else if(e.kind==="openai-compatible"){if(h=oe(n,e.chatCompletionsPath??"/v1/chat/completions"),P={...P,...wt(e)},v=wn(d,u,y,p,e.maxTokens??8192,e.xenoPromptTokenCeiling,r.customToolGrammarsGbnf===!0,r.parallelToolCalls===!0,e.xenoEnableThinking,e.xenoToolFormat,e.sampling),e.streaming)return await Eo({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p,sentTools:y,customGrammars:r.customToolGrammarsGbnf===!0})}else if(h=oe(n,"/v1/responses"),P={...P,authorization:`Bearer ${e.apiKey}`},v={model:d,instructions:p?.systemPrompt,input:bo(u),tools:y.map(R=>({type:"function",name:R.name,description:R.description,parameters:R.input_schema})),max_output_tokens:e.maxTokens??8192,store:!1},e.streaming)return await ko({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p});let x=await ge(h,{method:"POST",headers:P,body:JSON.stringify(v),signal:m},i),w=e.kind==="anthropic"?_o(t,x):e.kind==="google"?Ro(t,x):e.kind==="openai-compatible"?kn(t,x,y,r.customToolGrammarsGbnf===!0):Co(t,x);return await En(w,c,p),w}catch(x){throw x instanceof b&&x.category==="cancelled"?await C(p,{type:"provider.cancelled"}):(await C(p,Sn(x)),x instanceof b&&x.retryable&&await C(p,{type:"provider.retry",retryAfterMs:x.retryAfterMs,reason:x.category})),x}}}return e.xenoPromptTokenCeiling!==void 0&&(s.prepareQuotaRequest=async(d,u,l,c,m)=>{let p=await ge(oe(n,"/v1/runtime/capabilities"),{method:"GET",signal:m},{...i,limits:{...e.transportLimits,maxResponseBytes:16384}});if(p.prompt_token_ceiling_supported!==!0||p.prompt_token_count_supported!==!0)throw q(t,"XENO prompt token ceiling and exact count");let f=Array.isArray(p.custom_tool_grammars)&&p.custom_tool_grammars.includes("gbnf"),y=f&&p.custom_tool_grammars_streaming===!0,h=f&&(!e.streaming||y);if(r.customToolGrammarsGbnf===!0&&!h)throw q(t,"negotiated local custom tool grammars");let P=r.customToolGrammarsGbnf!==!1&&h,v={...e,capabilityProfile:{...e.capabilityProfile,customToolGrammarsGbnf:P,customToolGrammarsGbnfStreaming:P&&y}},x=structuredClone(u),w=structuredClone(l),R=c?{...c}:void 0,I=Fe([...w.map(L=>L.name),...x.flatMap(L=>typeof L.content=="string"?[]:L.content.flatMap(K=>K.type==="tool_use"?[K.name]:[]))]),ce=w.map(L=>({...L,name:I.encode(L.name)})),ve=x.map(L=>typeof L.content=="string"?L:{...L,content:L.content.map(K=>K.type==="tool_use"?{...K,name:I.encode(K.name)}:K)}),le=ke(ce,"openai-chat").map(({definition:L})=>L),k=R?{...R,...typeof R.toolChoice=="object"?{toolChoice:{name:I.encode(R.toolChoice.name)}}:{}}:void 0,M=wn(d,ve,le,k,e.maxTokens??8192,void 0,P,r.parallelToolCalls===!0,e.xenoEnableThinking,e.xenoToolFormat,e.sampling),U=await ge(oe(n,"/v1/runtime/chat/prompt-tokens"),{method:"POST",headers:{"content-type":"application/json",...wt(e)},body:JSON.stringify(M),signal:m},{...i,limits:{...e.transportLimits,connectTimeoutMs:9e4,totalTimeoutMs:12e4,maxResponseBytes:16384}}),N=U.prompt_tokens;if(U.object!=="runtime.chat.prompt_tokens"||typeof N!="number"||!Number.isSafeInteger(N)||N<0)throw g(t,"xeno-rt returned an invalid exact prompt token count");if(N>e.xenoPromptTokenCeiling)throw new T("EXCEEDED","Exact prompt exceeds the configured XENO input token ceiling.");let J=R?.quotaRemainingTokens;if(J!==void 0&&(!Number.isSafeInteger(J)||J<0))throw new T("INVALID","Remaining quota must be a nonnegative safe integer.");let G=Math.min(e.maxTokens??8192,J===void 0?Number.MAX_SAFE_INTEGER:J-N);if(G<1)throw new T("EXCEEDED",`Goal token budget exhausted: ${J??0} tokens left, but this request needs exactly ${N} for its input plus at least 1 for the reply. Raise the goal's token limit or start a new goal.`);let Yn=An({...v,maxTokens:G,xenoPromptTokenCeiling:N});return{basis:"provider-enforced",inputTokensUpperBound:N,outputTokensUpperBound:G,execute:(L,K)=>Yn.complete(d,x,w,L,K,R)}}),s}function Lo(e){let t="direct-ollama-native";if(e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw g(t,"maxTokens must be a positive safe integer");let n={...e,kind:"openai-compatible"};if(n.sampling!==void 0)throw q(t,"OpenAI-compatible sampling options");let r=vn(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,d,u){if(_n(i))throw q(t,"image input");try{let l=ke(s,"openai-chat").map(({definition:y})=>y),c=Cn(i,u?.systemPrompt).map(y=>({...y,content:y.content??"",...y.tool_calls?{tool_calls:y.tool_calls.map(h=>({...h,function:{...h.function,arguments:ee(t,h.function.arguments,"tool call")}}))}:{}})),m=await ge(oe(r,"/api/chat"),{method:"POST",signal:d,headers:{"content-type":"application/json",...wt(n)},body:JSON.stringify({model:o,messages:c,stream:!1,options:{num_predict:e.maxTokens??8192},tools:l.map(y=>({type:"function",function:{name:y.name,description:y.description,parameters:y.input_schema}}))})},Ae(n,t));if(m.done!==!0||!m.message||typeof m.message!="object")throw g(t,"native completion is missing its terminal message");let p=m.message,f=kn(t,{choices:[{message:{...p,...Array.isArray(p.tool_calls)?{tool_calls:p.tool_calls.map(y=>({...y,id:y.id??vt()}))}:{}},finish_reason:m.done_reason==="length"?"length":"stop"}],usage:m});return await En(f,a,u),f}catch(l){throw await C(u,l instanceof b&&l.category==="cancelled"?{type:"provider.cancelled"}:Sn(l)),l}}}}function Qe(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 In=1,ae={streaming:!0,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!0,usageAccounting:!0,promptCaching:!1,modelDiscovery:!0},We={...ae,reasoningMetadata:!1},Oo=[F("xeno","XENO hosted","xeno","openai-compatible","https://api.xenostudio.ai","public-https","bearer-env","XENO_API_KEY","/v1/models",ae),F("openai","OpenAI","direct","openai-responses","https://api.openai.com","public-https","bearer-env","OPENAI_API_KEY","/v1/models",ae),F("anthropic","Anthropic","direct","anthropic","https://api.anthropic.com","public-https","header-env","ANTHROPIC_API_KEY","/v1/models",{...ae,structuredOutput:!1}),F("google","Google AI Studio","direct","google","https://generativelanguage.googleapis.com","public-https","header-env","GOOGLE_API_KEY","/v1beta/models",ae),F("openrouter","OpenRouter","gateway","openai-compatible","https://openrouter.ai/api","public-https","bearer-env","OPENROUTER_API_KEY","/v1/models",We),F("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"]),F("ollama","Ollama","local","openai-compatible","http://127.0.0.1:11434","local-network","none",void 0,"/v1/models",We,["Ollama OpenAI compatibility endpoint"]),F("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"]),F("aws-bedrock","Amazon Bedrock","cloud","aws-bedrock",void 0,"public-https","cloud-chain",void 0,void 0,{...ae,modelDiscovery:!1},["AWS credential chain","region","Bedrock host adapter"]),F("vertex-ai","Google Vertex AI","cloud","vertex-ai",void 0,"public-https","cloud-chain",void 0,void 0,{...ae,modelDiscovery:!1},["Google application-default credentials","project","region","Vertex host adapter"])],Oe=class{presets=new Map;constructor(t=Oo){for(let n of t)this.add(n)}add(t){Jo(t),this.presets.set(t.id,structuredClone(t))}get(t){let n=this.presets.get(t);return n?structuredClone(n):void 0}list(){return[...this.presets.values()].map(t=>structuredClone(t)).sort((t,n)=>t.displayName.localeCompare(n.displayName))}resolve(t,n){let r=this.get(t.providerId);if(!r)throw new Error(`Unknown provider preset: ${t.providerId}`);let o=[],i;try{i=Ln(t.baseUrl??r.defaultBaseUrl,r)}catch(d){o.push(d instanceof Error?d.message:String(d))}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(d=>d.includes("host adapter"))?a="requires-host-adapter":o.some(d=>d.includes("Credential"))?a="missing-credential":o.length&&(a="needs-configuration"),{connection:Vo(t),preset:r,...i?{endpoint:i}:{},...s?{secretRef:s}:{},readiness:a,blockers:o}}};async function $s(e){let n=(e.catalog??new Oe).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:be([...s.errors,`Credential reference ${n.secretRef??"(missing)"} did not resolve`])};if(!n.preset.discoveryPath)return{...s,readiness:"ready",errors:be(s.errors)};let a=me(n.endpoint,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts});try{await st(a,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts,resolveHostname:e.resolveHostname})}catch(c){return{...s,readiness:"blocked",errors:be([...s.errors,c instanceof Error?c.message:String(c)])}}let d=$o(a,n.preset.discoveryPath),u=Mo(n.preset,o),l=Date.now();try{let{response:c,text:m}=await No(e.fetchImpl??fetch,d,{headers:u},e.timeoutMs??8e3,e.maxResponseBytes??2097152),p=Date.now()-l,f=c.status===401||c.status===403?!1:c.ok?!0:null;if(!c.ok)return{...s,reachable:!0,authenticated:f,latencyMs:p,readiness:f===!1?"missing-credential":"blocked",errors:be([...s.errors,`Provider discovery returned HTTP ${c.status}`])};let y=JSON.parse(m);return{...s,readiness:"ready",reachable:!0,authenticated:f,latencyMs:p,models:Do(y),errors:be(s.errors)}}catch(c){return{...s,readiness:"blocked",latencyMs:Date.now()-l,errors:be([...s.errors,zo(c)])}}}function Ns(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||s.available===!1||s.availability==="unavailable"||n&&!n.has(a)||r.has(a)||!Uo({...i.preset.capabilities,...s.capabilities??{}},t.require)||t.maxInputCostPerMillion!==void 0&&(s.inputCostPerMillion??1/0)>t.maxInputCostPerMillion||t.maxOutputCostPerMillion!==void 0&&(s.outputCostPerMillion??1/0)>t.maxOutputCostPerMillion)}).sort((i,s)=>{if(t.preferLocal&&i.connection.preset.family!==s.connection.preset.family){if(i.connection.preset.family==="local")return-1;if(s.connection.preset.family==="local")return 1}let a=o.get(i.connection.preset.id)??Number.MAX_SAFE_INTEGER,d=o.get(s.connection.preset.id)??Number.MAX_SAFE_INTEGER;return a-d||i.connection.preset.id.localeCompare(s.connection.preset.id)||i.model.id.localeCompare(s.model.id)})}function Ds(e,t,n){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");if(n?.capabilities?.textInput===!1)throw new Error(`Provider model ${n.id} does not advertise text input`);let r=Xo({...e.preset.capabilities,...n?.capabilities??{}});return{kind:e.preset.adapterKind,apiKey:t??"",baseURL:e.endpoint,endpointProfile:e.preset.endpointProfile,allowedHosts:e.preset.allowedHosts,streaming:r.streaming,...e.preset.adapterKind==="openai-compatible"?{capabilityProfile:r}:{},...e.preset.auth.mode==="header-env"?{authentication:{type:"header",header:e.preset.auth.header??Pt(e.preset.id),prefix:e.preset.auth.prefix}}:{},...e.preset.auth.mode==="none"?{authentication:{type:"none"}}:{}}}function F(e,t,n,r,o,i,s,a,d,u,l=[]){return{schemaVersion:In,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:Pt(e)}:{},description:s==="none"?"No credential required":s==="cloud-chain"?"Provider-owned cloud credential chain":`Environment/credential reference ${a}`},capabilities:u,...d?{discoveryPath:d}:{},requires:l}}function Pt(e){return e==="anthropic"?"x-api-key":e==="google"?"x-goog-api-key":e==="azure-openai"?"api-key":"authorization"}function Mo(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??Pt(e.id)]:`${e.auth.prefix??""}${t}`}:{accept:"application/json"}}function Ln(e,t){return e?me(e.trim().replace(/\/+$/,""),{profile:t.endpointProfile,allowedHosts:t.allowedHosts}).toString().replace(/\/$/,""):void 0}function $o(e,t){let n=new URL(e.toString());if(!t.startsWith("/")||t.includes("..")||t.includes("#"))throw new Error("Provider discovery path is invalid");return n.pathname=`${n.pathname.replace(/\/$/,"")}${t}`.replace(/\/{2,}/g,"/"),n}async function No(e,t,n,r,o){if(!Number.isSafeInteger(r)||r<1||r>6e4||!Number.isSafeInteger(o)||o<1||o>16*1024*1024)throw new Error("Invalid provider discovery limits");let i=new AbortController,s,a=!1,d,u=new Promise((c,m)=>{d=m}),l=setTimeout(()=>{a=!0;let c=new Error("Provider probe timed out");i.abort(c),d(c),s?.cancel().catch(()=>{})},r);try{let c=e(t,{...n,signal:i.signal,redirect:"manual"});c.then(v=>{a&&v.body?.cancel().catch(()=>{})},()=>{});let m=await Promise.race([c,u]);if(m.redirected||m.status>=300&&m.status<400)throw m.body?.cancel().catch(()=>{}),new Error("Provider discovery redirects are disabled");let p=0;if(m.headers.forEach((v,x)=>{p+=Buffer.byteLength(x)+Buffer.byteLength(v)}),p>64*1024)throw m.body?.cancel().catch(()=>{}),new Error("Provider discovery headers exceed limit");if(!m.ok||!m.body)return m.body?.cancel().catch(()=>{}),{response:m,text:""};let f=m.headers.get("content-length");if(f&&/^\d+$/.test(f)&&Number(f)>o)throw m.body.cancel().catch(()=>{}),new Error(`Provider discovery response exceeds ${o} bytes`);s=m.body.getReader();let y=new TextDecoder("utf-8",{fatal:!0}),h=0,P="";for(;;){let v=await Promise.race([s.read(),u]);if(v.done)break;if(h+=v.value.byteLength,h>o)throw new Error(`Provider discovery response exceeds ${o} bytes`);P+=y.decode(v.value,{stream:!0})}return P+=y.decode(),{response:m,text:P}}finally{clearTimeout(l),i.abort(),s&&(s.cancel().catch(()=>{}),s.releaseLock())}}function Do(e){if(!e||typeof e!="object")return[];let t=e,r=(Array.isArray(t.data)?t.data:Array.isArray(t.models)?t.models:[]).flatMap(i=>{if(!i||typeof i!="object")return[];let s=i,d=(typeof s.id=="string"?s.id:typeof s.name=="string"?s.name.replace(/^models\//,""):"").trim();if(!d||d.length>300||Qe(d))return[];let u=xt(s.type,80),l=Ze(s.supported_input_modalities),c=Ze(s.supported_output_modalities),m=Ze(s.supported_parameters),p=Ze(s.supported_generation_methods),f=Bo(s.execution);return[{id:d,...typeof s.displayName=="string"&&s.displayName.trim()?{displayName:s.displayName.trim().slice(0,300)}:{},...typeof s.owned_by=="string"&&s.owned_by.trim()?{ownedBy:s.owned_by.trim().slice(0,200)}:{},...u?{type:u}:{},...l?{supportedInputModalities:l}:{},...c?{supportedOutputModalities:c}:{},...m?{supportedParameters:m}:{},...p?{supportedGenerationMethods:p}:{},...f?{execution:f}:{},...typeof s.available=="boolean"?{available:s.available}:{},...typeof s.availability=="string"&&s.availability.trim()?{availability:s.availability.trim().slice(0,80)}:{},capabilities:jo({type:u,inputModalities:l,supportedParameters:m,supportedGenerationMethods:p,execution:f}),metadataSource:"provider"}]}),o=new Map;for(let i of r){let s=o.get(i.id);o.set(i.id,s?qo(s,i):i)}return[...o.values()].sort((i,s)=>i.id.localeCompare(s.id))}function qo(e,t){return{...e,...e.displayName===void 0&&t.displayName!==void 0?{displayName:t.displayName}:{},...e.ownedBy===void 0&&t.ownedBy!==void 0?{ownedBy:t.ownedBy}:{},...e.type===void 0&&t.type!==void 0?{type:t.type}:{},...e.supportedInputModalities===void 0&&t.supportedInputModalities!==void 0?{supportedInputModalities:t.supportedInputModalities}:{},...e.supportedOutputModalities===void 0&&t.supportedOutputModalities!==void 0?{supportedOutputModalities:t.supportedOutputModalities}:{},...e.supportedParameters===void 0&&t.supportedParameters!==void 0?{supportedParameters:t.supportedParameters}:{},...e.supportedGenerationMethods===void 0&&t.supportedGenerationMethods!==void 0?{supportedGenerationMethods:t.supportedGenerationMethods}:{},...e.execution===void 0&&t.execution!==void 0?{execution:t.execution}:{},...e.available===void 0&&t.available!==void 0?{available:t.available}:{},...e.availability===void 0&&t.availability!==void 0?{availability:t.availability}:{},...e.contextTokens===void 0&&t.contextTokens!==void 0?{contextTokens:t.contextTokens}:{},...e.inputCostPerMillion===void 0&&t.inputCostPerMillion!==void 0?{inputCostPerMillion:t.inputCostPerMillion}:{},...e.outputCostPerMillion===void 0&&t.outputCostPerMillion!==void 0?{outputCostPerMillion:t.outputCostPerMillion}:{},...e.capabilities===void 0&&t.capabilities!==void 0?{capabilities:t.capabilities}:{}}}function jo(e){let t=e.type?.toLowerCase(),n=e.execution?.endpoint?.toLowerCase()??"",r=new Set((e.supportedParameters??[]).map(l=>l.toLowerCase())),o=new Set((e.supportedGenerationMethods??[]).map(l=>l.toLowerCase())),i=t!==void 0&&t!=="text",s=/\/(?:images|videos|embeddings|audio|moderations)\//.test(n);if(i||s)return{streaming:!1,textInput:!1,imageInput:!1,tools:!1,parallelToolCalls:!1,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!1,promptCaching:!1};if(t===void 0&&!e.execution&&!e.inputModalities&&!e.supportedParameters)return;let a=new Set((e.inputModalities??[]).map(l=>l.toLowerCase())),d=/(?:chat\/completions|responses|generatecontent)/.test(n),u={textInput:a.size>0?a.has("text"):t==="text"||d,imageInput:a.size>0?a.has("image"):!1,tools:r.has("tools"),parallelToolCalls:r.has("parallel_tool_calls")||r.has("parallel-tool-calls")};return e.execution?.stream!==void 0?u.streaming=e.execution.stream:(t==="text"||d)&&(u.streaming=!1),e.execution&&d&&(u.usageAccounting=!0),(o.has("chat")||d)&&(u.textInput=!0),e.supportedParameters&&(u.reasoningMetadata=r.has("reasoning")||r.has("reasoning_effort"),u.structuredOutput=!1,u.promptCaching=r.has("prompt_cache")||r.has("prompt_caching")),u}function xt(e,t){if(typeof e!="string")return;let n=e.trim();if(!(!n||n.length>t||Qe(n)))return n}function Ze(e){if(!Array.isArray(e))return;let t=e.map(n=>xt(n,120)).filter(n=>n!==void 0).slice(0,64);return t.length>0?[...new Set(t)]:void 0}function Bo(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let o of["sync","stream","async","batch"])typeof t[o]=="boolean"&&(n[o]=t[o]);typeof t.max_batch_items=="number"&&Number.isSafeInteger(t.max_batch_items)&&t.max_batch_items>0&&t.max_batch_items<=1e5&&(n.maxBatchItems=t.max_batch_items);let r=xt(t.endpoint,200);return r&&(n.endpoint=r),Object.keys(n).length>0?n:void 0}function Uo(e,t){return t?Object.entries(t).every(([n,r])=>r!==!0||e[n]===!0):!0}function Xo(e){return{streaming:e.streaming,textInput:e.textInput,imageInput:e.imageInput,tools:e.tools,parallelToolCalls:e.parallelToolCalls,structuredOutput:e.structuredOutput,reasoningMetadata:e.reasoningMetadata,usageAccounting:e.usageAccounting,cancellation:!0,retryAfter:!0,promptCaching:e.promptCaching}}function Jo(e){if(e.schemaVersion!==In||!/^[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&&Ln(e.defaultBaseUrl,e),e.discoveryPath&&(!e.discoveryPath.startsWith("/")||e.discoveryPath.includes("..")))throw new Error(`Provider preset ${e.id} discoveryPath is invalid`);if(e.auth.header&&!/^[A-Za-z0-9-]{1,80}$/.test(e.auth.header))throw new Error(`Provider preset ${e.id} auth header is invalid`)}function Vo(e){let t=e.id.trim();if(!t||t.length>120||Qe(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 be(e){return[...new Set(e)]}function zo(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 Jn}from"node:crypto";import{chmod as ri,mkdir as Vn,open as oi,readFile as ii,unlink as si}from"node:fs/promises";import{dirname as ai,join as Un,resolve as di}from"node:path";import*as H from"node:fs/promises";var On=Symbol.for("@xenosystem/agent-sdk/file-cache"),Mn=globalThis,_t=Mn[On]??{entries:new Map,counters:{reads:0,hits:0}};Mn[On]=_t;var js=_t.entries,Bs=_t.counters;var Fo=new Set(["EACCES","EBUSY","EPERM"]),Ho=[10,20,40,80,160,320,640];async function $n(e,t){for(let n=0;;n+=1)try{await H.rename(e,t);return}catch(r){let o=r.code,i=Ho[n];if(process.platform!=="win32"||!o||!Fo.has(o)||i===void 0)throw r;await new Promise(s=>setTimeout(s,i))}}function Ye(e){return JSON.stringify(Ct(e,new Set))}function Ct(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=>Ct(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]=Ct(o,t)}return t.delete(e),n}import{mkdirSync as Go,readFileSync as Ko,rmSync as Dn,writeFileSync as Qo}from"node:fs";import{hostname as qn}from"node:os";import{dirname as Wo}from"node:path";function Zo(){return new Date().toISOString()}function Yo(){return new Date(Date.now()-Math.floor(process.uptime()*1e3)).toISOString()}function jn(e){try{return JSON.parse(Ko(e,"utf8"))}catch{return null}}function ei(e){if(!e||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function ti(e){return e.hostname!==qn()?!0:ei(e.pid)}function Nn(e,t){Go(Wo(e),{recursive:!0}),Qo(e,JSON.stringify(t,null,2)+`
|
|
10
|
+
`,{encoding:"utf8",flag:"wx"})}function ni(e,t){let n=jn(e);n?.pid!==t.pid||n.hostname!==t.hostname||Dn(e,{force:!0})}function Bn(e,t,n){let r=Zo(),o={schemaVersion:1,name:t,pid:process.pid,hostname:qn(),processStartedAt:Yo(),version:n,acquiredAt:r,updatedAt:r};try{Nn(e,o)}catch(i){if(i.code!=="EEXIST")throw i;let a=jn(e);if(a&&ti(a))throw new Error(`${t} is already locked by PID ${a.pid} on ${a.hostname}.`);Dn(e,{force:!0}),Nn(e,o)}return{record:o,release:()=>{ni(e,o)}}}var Tt=1,Xn=class{directory;snapshotPath;lockPath;catalog;now;constructor(t){this.directory=di(t.directory),this.snapshotPath=Un(this.directory,"providers.json"),this.lockPath=Un(this.directory,"providers.lock"),this.catalog=t.catalog??new Oe,this.now=t.now??(()=>new Date)}async upsert(t){let n=this.catalog.resolve(t).connection;return Fn(n),this.mutate(r=>{let o=r.connections.filter(i=>i.id!==n.id);return o.push(n),{snapshot:Rt(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:Rt(n,r,n.routingPolicy,this.now()),result:!0}})}async setRoutingPolicy(t){let n=Hn(t);return this.mutate(r=>({snapshot:Rt(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 ii(this.snapshotPath,"utf8"));return li(t,this.catalog),t}catch(t){if(t.code==="ENOENT")return ci(this.now());throw t}}async mutate(t){await Vn(this.directory,{recursive:!0,mode:448});let n=Bn(this.lockPath,"xeno provider connection store","1");try{let r=await this.load(),{snapshot:o,result:i}=t(r);return o!==r&&await ui(this.snapshotPath,`${JSON.stringify(o,null,2)}
|
|
11
|
+
`),i}finally{n.release()}}};function ci(e){return zn({schemaVersion:Tt,generation:0,updatedAt:e.toISOString(),connections:[],routingPolicy:{}})}function Rt(e,t,n,r){return zn({schemaVersion:Tt,generation:e.generation+1,updatedAt:r.toISOString(),connections:[...t].sort((o,i)=>o.id.localeCompare(i.id)),routingPolicy:n})}function zn(e){return{...e,checksum:{algorithm:"sha256",value:Jn("sha256").update(Gn(e)).digest("hex")}}}function li(e,t){if(e.schemaVersion!==Tt||!Array.isArray(e.connections))throw new Error("Invalid provider connection snapshot");let{checksum:n,...r}=e;if(n?.algorithm!=="sha256"||n.value!==Jn("sha256").update(Gn(r)).digest("hex"))throw new Error("Provider connection snapshot checksum mismatch");let o=new Set;for(let i of e.connections){let s=t.resolve(i).connection;if(Fn(s),o.has(s.id))throw new Error(`Duplicate provider connection: ${s.id}`);o.add(s.id)}Hn(e.routingPolicy)}function Fn(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 Hn(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 ui(e,t){await Vn(ai(e),{recursive:!0,mode:448});let n=`${e}.${process.pid}.${Date.now()}.tmp`,r;try{r=await oi(n,"wx",384),await r.writeFile(t,"utf8"),await r.sync(),await r.close(),r=void 0,await $n(n,e),await ri(e,384).catch(()=>{})}finally{r&&await r.close().catch(()=>{}),await si(n).catch(()=>{})}}function Gn(e){return Ye(e)}import{createHash as pi,randomUUID as mi}from"node:crypto";import{link as fi,lstat as gi,mkdir as yi,open as kt,readdir as hi,unlink as Kn}from"node:fs/promises";import{join as Et,resolve as bi}from"node:path";var et=e=>pi("sha256").update(Ye(e)).digest("hex"),we=e=>new Date(e).toISOString().slice(0,10);function Qn(e){return e.kind==="policy"?e.policy.limits.tokensLifetime!==void 0||e.policy.scope.goal!==void 0:e.kind==="reserve"&&e.reservation.scope.goal!==void 0&&e.reservation.basis===void 0}function wi(e){return e.kind==="reserve"&&e.reservation.basis!==void 0}function Wn(e){return{requestsPerMinute:e.requestsPerMinute===null?null:S(e.requestsPerMinute),tokensPerDay:e.tokensPerDay===null?null:S(e.tokensPerDay),...e.tokensLifetime!==void 0?{tokensLifetime:e.tokensLifetime===null?null:S(e.tokensLifetime)}:{}}}function St(e,t){return Ee(e).some(n=>z(n)===z(t))}function de(e){return e.reduce((t,n)=>S(t+n),0)}var Zn=class{constructor(t,n=Date.now,r=1e5){this.now=n;this.maximumEntries=r;this.directory=bi(t),S(r)}now;maximumEntries;directory;async policy(t){return(await this.load()).policies.get(z(t))??null}async setPolicy(t,n,r){let o={scope:Y(t),limits:Wn(n),revision:S(r)+1};return await this.append(()=>({kind:"policy",policy:o,expectedRevision:r})),o}async reservation(t){return(await this.load()).reservations.get(B(t))??null}async reserve(t){if(t.basis!==void 0&&t.basis!=="estimated")throw new T("INVALID","Unknown reservation basis.");let n={id:B(t.id),scope:Y(t.scope),requestHash:B(t.requestHash),reservedTokens:S(t.reservedTokens),...t.basis?{basis:t.basis}:{}};return await this.append((r,o)=>{let i=r.reservations.get(n.id);if(i){if(et([i.scope,i.requestHash,i.reservedTokens,i.basis??null])!==et([n.scope,n.requestHash,n.reservedTokens,n.basis??null]))throw new T("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:B(t)}))}async void(t){await this.append(n=>n.reservations.get(t)?.state==="void"?null:{kind:"void",id:B(t)})}async settle(t,n){S(n),await this.append(r=>{let o=r.reservations.get(t);return o?.state==="settled"&&o.actualTokens===n?null:{kind:"settle",id:B(t),actualTokens:n}})}async snapshot(t){let n=await this.load(),r=S(this.now()),o=Y(t);if(r<n.at)throw new T("CLOCK_ROLLBACK","Quota clock moved backwards.");let i=[...n.reservations.values()].filter(a=>St(a.scope,o)),s=i.filter(a=>we(a.admittedAt)===we(r));return{authority:"local-file",policies:Ee(o).flatMap(a=>n.policies.get(z(a))?[n.policies.get(z(a))]:[]),heldTokens:de(s.filter(a=>a.state==="reserved"||a.state==="dispatched").map(a=>a.reservedTokens)),usedTokens:de(s.filter(a=>a.state==="settled").map(a=>a.actualTokens)),lifetimeHeldTokens:de(i.filter(a=>a.state==="reserved"||a.state==="dispatched").map(a=>a.reservedTokens)),lifetimeUsedTokens:de(i.filter(a=>a.state==="settled").map(a=>a.actualTokens)),requestsInLastMinute:i.filter(a=>a.state!=="void"&&a.admittedAt>r-6e4).length,unresolved:i.filter(a=>a.state==="dispatched").length}}async remainingTokens(t){let n=await this.load(),r=S(this.now());if(r<n.at)throw new T("CLOCK_ROLLBACK","Quota clock moved backwards.");let o=null;for(let i of Ee(t)){let s=n.policies.get(z(i));if(!s)continue;let a=[...n.reservations.values()].filter(c=>St(c.scope,i)&&c.state!=="void"),d=c=>de(c.map(m=>m.state==="settled"?m.actualTokens:m.reservedTokens)),u=[s.limits.tokensLifetime===void 0?null:s.limits.tokensLifetime,s.limits.tokensPerDay===null?null:s.limits.tokensPerDay],l=[d(a),d(a.filter(c=>we(c.admittedAt)===we(r)))];for(let c=0;c<u.length;c+=1){let m=u[c];if(m===null)continue;let p=Math.max(0,m-l[c]);o=o===null?p:Math.min(o,p)}}return o}apply(t,n,r,o=!0){if(n.kind==="policy"){let s=n.policy,a=z(s.scope);if((t.policies.get(a)?.revision??0)!==n.expectedRevision||s.revision!==n.expectedRevision+1)throw new T("CONFLICT","Quota policy revision changed.");t.policies.set(a,{scope:Y(s.scope),revision:S(s.revision),limits:Wn(s.limits)});return}if(n.kind==="reserve"){let s=n.reservation;if(B(s.id),B(s.requestHash),Y(s.scope),S(s.reservedTokens),s.state!=="reserved"||s.admittedAt!==r||t.reservations.has(s.id))throw new T("CORRUPT","Invalid reservation record.");for(let a of o?Ee(s.scope):[]){let d=t.policies.get(z(a));if(!d)continue;let u=[...t.reservations.values()].filter(c=>St(c.scope,a)&&c.state!=="void");if(d.limits.requestsPerMinute!==null&&u.filter(c=>c.admittedAt>r-6e4).length>=d.limits.requestsPerMinute)throw new T("EXCEEDED","Ancestor request rate limit reached.");let l=de(u.filter(c=>we(c.admittedAt)===we(r)).map(c=>c.state==="settled"?c.actualTokens:c.reservedTokens));if(d.limits.tokensPerDay!==null&&S(l+s.reservedTokens)>d.limits.tokensPerDay)throw new T("EXCEEDED","Ancestor daily token limit reached.");if(d.limits.tokensLifetime!==void 0&&d.limits.tokensLifetime!==null){let c=de(u.map(m=>m.state==="settled"?m.actualTokens:m.reservedTokens));if(S(c+s.reservedTokens)>d.limits.tokensLifetime)throw new T("EXCEEDED","Ancestor lifetime token limit reached.")}}t.reservations.set(s.id,structuredClone(s));return}let i=t.reservations.get(n.id);if(!i)throw new T("CONFLICT","Reservation does not exist.");if(n.kind==="dispatch"||n.kind==="void"){if(i.state!=="reserved")throw new T("CONFLICT","Reservation cannot be dispatched twice or release unknown usage.");i.state=n.kind==="dispatch"?"dispatched":"void"}else if(n.kind==="settle"){if(i.state!=="dispatched"||i.basis!=="estimated"&&S(n.actualTokens)>i.reservedTokens)throw new T("CONFLICT","Invalid reservation settlement.");i.state="settled",i.actualTokens=n.actualTokens}else throw new T("CORRUPT","Unknown quota journal operation.")}async load(){let t={sequence:0,hash:"",at:0,policies:new Map,reservations:new Map},n;try{n=await hi(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 T("CAPACITY","Quota journal requires archival maintenance.");for(let o of r){if(o!==`${String(t.sequence+1).padStart(12,"0")}.quota`)throw new T("CORRUPT","Quota journal sequence is incomplete.");let i=Et(this.directory,o),s=await gi(i);if(!s.isFile()||s.isSymbolicLink()||s.size>16384)throw new T("CORRUPT","Invalid quota record file.");let a=await kt(i,"r"),d;try{let c=Buffer.alloc(16385),m=await a.read(c,0,c.length,0);if(m.bytesRead>16384)throw new T("CORRUPT","Oversized quota record.");d=JSON.parse(c.subarray(0,m.bytesRead).toString("utf8"))}finally{await a.close()}let{hash:u,...l}=d;if(d.version!==1&&d.version!==2&&d.version!==3||d.sequence!==t.sequence+1||d.previousHash!==t.hash||u!==et(l)||S(d.at)<t.at)throw new T("CORRUPT","Quota journal integrity failed.");if(d.version===1&&Qn(d.operation))throw new T("CORRUPT","Lifetime or goal scope requires quota journal version 2.");this.apply(t,d.operation,d.at,!1),t.sequence=d.sequence,t.hash=u,t.at=d.at}return t}async append(t){await yi(this.directory,{recursive:!0,mode:448});for(let n=0;n<100;n++){let r=await this.load(),o=S(this.now());if(o<r.at)throw new T("CLOCK_ROLLBACK","Quota clock moved backwards.");let i=t(r,o);if(!i)return;if(r.sequence>=this.maximumEntries)throw new T("CAPACITY","Quota journal requires archival maintenance.");this.apply(r,i,o);let a={version:wi(i)?3:Qn(i)?2:1,sequence:r.sequence+1,previousHash:r.hash,at:o,operation:i},d=JSON.stringify({...a,hash:et(a)});if(Buffer.byteLength(d)>16384)throw new T("CAPACITY","Quota record exceeds its bound.");let u=Et(this.directory,`${mi()}.tmp`),l=Et(this.directory,`${String(a.sequence).padStart(12,"0")}.quota`),c=await kt(u,"wx",384);try{await c.writeFile(d),await c.sync()}catch(m){throw await c.close(),await Kn(u).catch(()=>{}),m}await c.close();try{if(await fi(u,l),process.platform!=="win32"){let m=await kt(this.directory,"r");try{await m.sync()}finally{await m.close()}}return}catch(m){if(m.code!=="EEXIST")throw m}finally{await Kn(u).catch(()=>{})}}throw new T("CONFLICT","Quota admission contention exceeded the retry bound.")}};export{Oo as BUILT_IN_XENO_PROVIDER_PRESETS,it as DualLLMProvider,Zn as FileQuotaAuthority,Xn as FileXenoProviderConnectionStore,pn as PROVIDER_TOOL_NAME_PATTERN,b as ProviderError,bt as QuotaAcknowledgementError,T as QuotaError,A as ToolSchemaProjectionError,In as XENO_PROVIDER_CATALOG_SCHEMA_VERSION,Tt as XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION,Oe as XenoProviderCatalog,st as assertDirectEndpointResolution,Pe as classifyProviderHttpError,te as classifyProviderStreamError,An as createDirectProvider,Lo as createOllamaNativeProvider,Ps as createQuotaGovernedProvider,Fe as createToolNameCodec,Ds as directProviderConfigFromConnection,mo as isQuotaControlError,Y as normalizeQuotaScope,$e as parseRetryAfter,Ao as probeLocalToolGrammarSupport,$s as probeXenoProvider,ke as projectToolDefinitionsForProvider,ln as projectToolSchemaForProvider,q as providerCapabilityError,g as providerProtocolError,Ee as quotaAncestors,S as quotaInteger,z as quotaScopeKey,B as quotaText,Ns as selectXenoProviderRoute,me as validateDirectEndpoint};
|