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