@xenosystem/agent-sdk 0.10.38 → 0.10.39

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (57) hide show
  1. package/dist/artifacts/index.cjs +9 -9
  2. package/dist/artifacts/index.js +9 -9
  3. package/dist/artifacts/metafile-cjs.json +1 -1
  4. package/dist/artifacts/metafile-esm.json +1 -1
  5. package/dist/automation/index.cjs +8 -8
  6. package/dist/automation/index.d.cts +10 -0
  7. package/dist/automation/index.d.ts +10 -0
  8. package/dist/automation/index.js +9 -9
  9. package/dist/automation/metafile-cjs.json +1 -1
  10. package/dist/automation/metafile-esm.json +1 -1
  11. package/dist/control-plane/index.cjs +1 -1
  12. package/dist/control-plane/index.js +1 -1
  13. package/dist/electron/index.cjs +221 -200
  14. package/dist/electron/index.d.cts +91 -1
  15. package/dist/electron/index.d.ts +91 -1
  16. package/dist/electron/index.js +221 -200
  17. package/dist/electron/metafile-cjs.json +1 -1
  18. package/dist/electron/metafile-esm.json +1 -1
  19. package/dist/index.cjs +396 -371
  20. package/dist/index.d.cts +134 -4
  21. package/dist/index.d.ts +134 -4
  22. package/dist/index.js +397 -372
  23. package/dist/intelligence/index.cjs +9 -9
  24. package/dist/intelligence/index.js +9 -9
  25. package/dist/intelligence/metafile-cjs.json +1 -1
  26. package/dist/intelligence/metafile-esm.json +1 -1
  27. package/dist/mcp/index.d.cts +10 -0
  28. package/dist/mcp/index.d.ts +10 -0
  29. package/dist/metafile-cjs.json +1 -1
  30. package/dist/metafile-esm.json +1 -1
  31. package/dist/providers/index.cjs +9 -9
  32. package/dist/providers/index.js +9 -9
  33. package/dist/providers/metafile-cjs.json +1 -1
  34. package/dist/providers/metafile-esm.json +1 -1
  35. package/dist/recipes/index.cjs +2 -2
  36. package/dist/recipes/index.js +2 -2
  37. package/dist/recipes/metafile-cjs.json +1 -1
  38. package/dist/recipes/metafile-esm.json +1 -1
  39. package/dist/research/index.cjs +3 -3
  40. package/dist/research/index.js +3 -3
  41. package/dist/research/metafile-cjs.json +1 -1
  42. package/dist/research/metafile-esm.json +1 -1
  43. package/dist/session/index.cjs +25 -25
  44. package/dist/session/index.js +25 -25
  45. package/dist/session/metafile-cjs.json +1 -1
  46. package/dist/session/metafile-esm.json +1 -1
  47. package/dist/sharing/index.cjs +4 -4
  48. package/dist/sharing/index.js +4 -4
  49. package/dist/sharing/metafile-cjs.json +1 -1
  50. package/dist/sharing/metafile-esm.json +1 -1
  51. package/dist/utils/index.cjs +23 -23
  52. package/dist/utils/index.d.cts +15 -1
  53. package/dist/utils/index.d.ts +15 -1
  54. package/dist/utils/index.js +23 -23
  55. package/dist/utils/metafile-cjs.json +1 -1
  56. package/dist/utils/metafile-esm.json +1 -1
  57. package/package.json +3 -3
@@ -1,11 +1,11 @@
1
- "use strict";var lr=Object.create;var Xe=Object.defineProperty;var ur=Object.getOwnPropertyDescriptor;var pr=Object.getOwnPropertyNames;var mr=Object.getPrototypeOf,fr=Object.prototype.hasOwnProperty;var gr=(e,t)=>{for(var n in t)Xe(e,n,{get:t[n],enumerable:!0})},zt=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of pr(t))!fr.call(e,o)&&o!==n&&Xe(e,o,{get:()=>t[o],enumerable:!(r=ur(t,o))||r.enumerable});return e};var yr=(e,t,n)=>(n=e!=null?lr(mr(e)):{},zt(t||!e||!e.__esModule?Xe(n,"default",{value:e,enumerable:!0}):n,e)),hr=e=>zt(Xe({},"__esModule",{value:!0}),e);var gi={};gr(gi,{BUILT_IN_XENO_PROVIDER_PRESETS:()=>Qn,DualLLMProvider:()=>He,FileQuotaAuthority:()=>Vt,FileXenoProviderConnectionStore:()=>Bt,PROVIDER_TOOL_NAME_PATTERN:()=>It,ProviderError:()=>b,QuotaAcknowledgementError:()=>nt,QuotaError:()=>T,ToolSchemaProjectionError:()=>A,XENO_PROVIDER_CATALOG_SCHEMA_VERSION:()=>$t,XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION:()=>ut,XenoProviderCatalog:()=>Te,assertDirectEndpointResolution:()=>Fe,classifyProviderHttpError:()=>he,classifyProviderStreamError:()=>ee,createDirectProvider:()=>Mt,createOllamaNativeProvider:()=>Kn,createQuotaGovernedProvider:()=>Ro,createToolNameCodec:()=>De,directProviderConfigFromConnection:()=>zo,isQuotaControlError:()=>Mn,normalizeQuotaScope:()=>G,parseRetryAfter:()=>Ae,probeLocalToolGrammarSupport:()=>Gn,probeXenoProvider:()=>Jo,projectToolDefinitionsForProvider:()=>_e,projectToolSchemaForProvider:()=>St,providerCapabilityError:()=>j,providerProtocolError:()=>g,quotaAncestors:()=>Ce,quotaInteger:()=>S,quotaScopeKey:()=>V,quotaText:()=>B,selectXenoProviderRoute:()=>Vo,validateDirectEndpoint:()=>de});module.exports=hr(gi);var br=1;var wr=12,vr=128,Pr=/^xeno\.[a-z0-9]+(?:[._][a-z0-9]+)*$/u,xr=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/u,_r=/(?:[\\/]|@|https?:|bearer|token|secret|password|credential|api[_-]?key|[0-9a-f]{8}-[0-9a-f-]{27,})/iu,Cr=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"]),Ht=new Set,Ft=new Map;function Rr(e){let t=e.trim().toLowerCase();return!t||t.length>64||_r.test(t)||!xr.test(t)?null:t}function Tr(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=Rr(t);if(!n)return null;let r=Ft.get(e);return r||(r=new Set,Ft.set(e,r)),!r.has(n)&&r.size>=vr?"other":(r.add(n),n)}function kr(e={}){let t={};for(let[n,r]of Object.entries(e)){if(Object.keys(t).length>=wr)break;if(!Cr.has(n))continue;let o=Tr(n,r);o!==null&&(t[n]=o)}return Object.freeze(t)}function Gt(e){if(Ht.size===0||!Pr.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:br,kind:e.kind,name:e.name,value:Math.min(t,Number.MAX_SAFE_INTEGER),timestamp:(e.timestamp??new Date).toISOString(),attributes:kr(e.attributes)});for(let r of Ht)try{r(n)}catch{}}function ye(e,t=1,n){Gt({kind:"counter",name:e,value:t,attributes:n})}function ft(e,t,n){Gt({kind:"histogram",name:e,value:t,attributes:n})}var Er=["context length","context window","maximum context","too many tokens","request too large"];function Kt(e){let t=e.toLowerCase();return Er.some(n=>t.includes(n))}var Y="[redacted]";var Sr=new Set(["authorization","proxy-authorization","x-api-key","x-goog-api-key","api-key","apikey","x-xeno-api-key","dpop","cookie","set-cookie"]),Ar=new Set(["content-type","accept","accept-encoding","connection","content-length","user-agent","anthropic-version","anthropic-beta","openai-beta","x-stainless-lang"]),Ir=/^(?:access_token|refresh_token|id_token|token|key|api[_-]?key|secret|client_secret|password|signature|sig|auth|code)$/i,Lr=[[/-----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${Y}`],[/((?:^|[\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${Y}`],[/\b(Bearer|Basic|Token|DPoP)\s+[A-Za-z0-9._~+/=-]{6,}/gi,`$1 ${Y}`],[/\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,Y],[/\beyJ[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}/g,Y],[/([?&#;](?:access_token|refresh_token|id_token|token|key|api[_-]?key|secret|client_secret|password|signature|sig)=)[^&#\s"'<>]+/gi,`$1${Y}`],[/(\b[a-z][a-z0-9+.-]*:\/\/)[^/\s:@"']+:[^/\s@"']+@/gi,`$1${Y}@`]];function Qt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Wt(e){let t=new Set,n=i=>{if(typeof i!="string")return;let s=i.trim();if(s.length<12)return;t.add(s);let a=/^(?:Bearer|Basic|Token|DPoP)\s+(.+)$/i.exec(s);a?.[1]&&a[1].trim().length>=12&&t.add(a[1].trim())},r=(i,s)=>{let a=i.trim().toLowerCase();Ar.has(a)||(Sr.has(a)||!a.startsWith("x-xeno-"))&&n(s)},o=e.headers;if(o)if(typeof Headers<"u"&&o instanceof Headers)o.forEach((i,s)=>r(s,i));else if(Array.isArray(o))for(let[i,s]of o)r(String(i),String(s));else for(let[i,s]of Object.entries(o))typeof s=="string"&&r(i,s);if(e.url)try{let i=typeof e.url=="string"?new URL(e.url):e.url;i.searchParams.forEach((s,a)=>{Ir.test(a)&&n(s)}),i.password&&n(decodeURIComponent(i.password))}catch{}for(let i of e.extra??[])n(i??void 0);return[...t]}function q(e,t=[]){if(!e)return e;let n=e,r=[...new Set([...t].filter(o=>typeof o=="string"&&o.length>=12))].sort((o,i)=>i.length-o.length);for(let o of r){n=n.replace(new RegExp(`(?<![A-Za-z0-9_-])${Qt(o)}(?![A-Za-z0-9_-])`,"g"),Y);let i=encodeURIComponent(o);i!==o&&(n=n.replace(new RegExp(`(?<![A-Za-z0-9_-])${Qt(i)}(?![A-Za-z0-9_-])`,"g"),Y))}for(let[o,i]of Lr)o.lastIndex=0,n=n.replace(o,i);return n}function gt(e,t,n){try{Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0,enumerable:!1})}catch{}}function O(e,t=[],n=0){if(!(e instanceof Error)||n>6)return e;let r=[...t],o=q(e.message,r);if(o!==e.message&&gt(e,"message",o),typeof e.stack=="string"){let s=q(e.stack,r);s!==e.stack&&gt(e,"stack",s)}let i=e.cause;if(i instanceof Error)O(i,r,n+1);else if(i!=null){let s;try{s=typeof i=="string"?i:JSON.stringify(i)??String(i)}catch{s=String(i)}let a=q(s,r);a!==s&&gt(e,"cause",a)}for(let s of Object.keys(e)){let a=e[s];if(typeof a=="string"){let d=q(a,r);if(d!==a)try{e[s]=d}catch{}}}return e}var b=class extends Error{category;code;retryable;providerId;statusCode;retryAfterMs;requestId;providerCode;remedy;constructor(t,n){super(q(t),n.cause!==void 0?{cause:n.cause}:void 0),this.name="ProviderError",this.category=n.category,this.code=n.code,this.retryable=n.retryable??!1,this.providerId=n.providerId,this.statusCode=n.statusCode,this.retryAfterMs=n.retryAfterMs,this.requestId=n.requestId,n.providerCode!==void 0&&(this.providerCode=n.providerCode),n.remedy!==void 0&&(this.remedy=n.remedy),O(this)}};function Ae(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 Or(e){if(typeof e=="string")return e;if(!e||typeof e!="object")return"";let t=e,n=t.error;if(typeof n=="string")return n;if(n&&typeof n=="object"){let r=n;if(typeof r.message=="string")return r.message;if(typeof r.type=="string")return r.type}return typeof t.message=="string"?t.message:""}function Mr(e){if(!e||typeof e!="object")return;let t=e,n=t.error&&typeof t.error=="object"?t.error:void 0;for(let r of[n?.code,n?.type,t.code,t.type])if(typeof r=="string"&&/^[A-Za-z][A-Za-z0-9_.:-]{1,63}$/.test(r))return r}var $r=["insufficient credit","insufficient_credit","insufficient funds","insufficient_quota","out of credit","credit balance","payment required","payment_required","spending limit","exceeded your current quota"],Nr={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 Je(e,t){return t.some(n=>e.includes(n))}function he(e){let t=[...e.secrets??[]],n=Or(e.body).trim(),r=Mr(e.body),o=`${n} ${r??""}`.toLowerCase(),i=q(n,t),s=r&&!i.includes(r)?` [${r}]`:"",d=` (${e.source==="stream"?"stream error event":`HTTP ${e.statusCode}`})${i?`: ${i.slice(0,1e3)}`:""}${s}`,u={providerId:e.providerId,...e.source==="stream"?{}:{statusCode:e.statusCode},retryAfterMs:e.retryAfterMs,requestId:e.requestId,...r?{providerCode:r}:{}},l=Dr(e.statusCode,o,d,u),c=l.remedy??Nr[l.category],m=c?`${l.message}. ${c}.`:l.message;return O(new b(m,{...u,category:l.category,code:l.code,retryable:l.retryable,...c?{remedy:c}:{}}),t)}function Dr(e,t,n,r){let o={statusCode:e};return o.statusCode===402||Je(t,$r)?new b(`Provider refused the request for billing: the account is out of credits or over its spending limit${n}`,{...r,remedy:"Add credits or raise the spending limit, then retry",category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):o.statusCode===401?new b(`Provider authentication failed${n}`,{...r,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):o.statusCode===403?new b(`Provider authorization failed${n}`,{...r,category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):Je(t,["api key not valid","invalid api key","api key expired","api_key_invalid","invalid authentication credentials","missing api key"])?new b(`Provider authentication failed${n}`,{...r,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):o.statusCode===429?new b(`Provider rate limit reached${n}`,{...r,category:"rate_limit",code:"PROVIDER_RATE_LIMITED",retryable:!0}):Kt(t)?new b(`Provider context window exceeded${n}`,{...r,category:"context_overflow",code:"PROVIDER_CONTEXT_OVERFLOW"}):Je(t,["safety","content policy","blocked_reason","responsible_ai_policy_violation"])?new b(`Provider safety policy refused the request${n}`,{...r,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):o.statusCode===404||Je(t,["model not found","model does not exist","unsupported model","unknown provider for model"])?new b(`Provider model is unavailable${n}`,{...r,category:"unsupported_model",code:"PROVIDER_MODEL_UNSUPPORTED"}):o.statusCode===408||o.statusCode===504?new b(`Provider request timed out${n}`,{...r,category:"timeout",code:"PROVIDER_TIMEOUT",retryable:!0}):o.statusCode>=500||o.statusCode===409||o.statusCode===425?new b(`Provider server error${n}`,{...r,category:"server",code:"PROVIDER_SERVER_ERROR",retryable:!0}):new b(`Provider rejected the request${n}`,{...r,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}var qr={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 ee(e){let t=e.error&&typeof e.error=="object"?e.error:{},n=[t.type,t.code,t.status].find(a=>typeof a=="string"),o=[t.code,t.status,t.status_code].find(a=>typeof a=="number"&&Number.isInteger(a)&&a>=400&&a<600)??(n?qr[n.toLowerCase()]:void 0)??500,i=typeof e.error=="string"?{error:e.error}:{error:t},s=he({providerId:e.providerId,statusCode:o,body:i,source:"stream",...e.secrets?{secrets:e.secrets}:{}});return!e.outputSeen||!s.retryable?s:O(new b(`${s.message} The stream failed after part of the answer was delivered, so it is not retried automatically`,{providerId:s.providerId,category:s.category,code:s.code,retryable:!1,...s.providerCode?{providerCode:s.providerCode}:{},...s.remedy?{remedy:s.remedy}:{}}),e.secrets??[])}function g(e,t,n){return new b(`Malformed ${e} response: ${t}`,{providerId:e,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",...n!==void 0?{cause:n}:{}})}function j(e,t){return ye("xeno.provider.capability_mismatches",1,{component:"provider_contract",provider:e,capability:t,error_code:"provider_capability_unsupported"}),new b(`${e} does not advertise the required ${t} capability`,{providerId:e,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}function Ve(e){let t=[...e.secrets??[]],n=e.text;try{n=e.text.trim()?JSON.parse(e.text):{}}catch{}let r=Ae(e.retryAfter??null),o=he({providerId:e.providerId,statusCode:e.statusCode,body:n,...r!==void 0?{retryAfterMs:r}:{},secrets:t});return O(new b(`${e.prefix} (HTTP ${e.statusCode}): ${q(e.text,t)}`,{providerId:e.providerId,statusCode:e.statusCode,category:o.category,code:o.code,retryable:o.retryable,...r!==void 0?{retryAfterMs:r}:{},...o.providerCode?{providerCode:o.providerCode}:{},...o.remedy?{remedy:o.remedy}:{}}),t)}function ze(e,t,n=[]){let r=[...n];if(t instanceof b)return O(t,r);let o=t instanceof Error?O(t,r):t,i=q(t instanceof Error?t.message:String(t),r),s=t instanceof Error&&t.name==="AbortError";return O(new b(i,{providerId:e,category:s?"timeout":"transport",code:s?"PROVIDER_TIMEOUT":"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:o}),r)}var J="legacy-chat";function yt(e,t=[]){let n=[...t],r=e instanceof Error?O(e,n):e;return O(new b(q(e instanceof Error?e.message:String(e),n),{providerId:J,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",retryable:!1,cause:r}),n)}async function*Zt(e,t=[]){let n=[...t],r=e.getReader(),o=new TextDecoder,i="",s=!1,a=!1;try{for(;;){let d;try{d=await r.read()}catch(l){let c=l instanceof Error?O(l,n):l;throw O(new b(s?"The model's response stream was cut off part-way through its answer":q(l instanceof Error?l.message:String(l),n),{providerId:J,category:s?"disconnect":"transport",code:s?"PROVIDER_DISCONNECTED":"PROVIDER_TRANSPORT_ERROR",retryable:!s,cause:c}),n)}if(d.done)break;i+=o.decode(d.value,{stream:!0});let u=i.split(`
2
- `);i=u.pop()??"";for(let l of u){let c=l.trim();if(!c||!c.startsWith("data:"))continue;let m=c.slice(5).trim();if(m==="[DONE]")return;let p;try{let y=JSON.parse(m);if(!y||typeof y!="object"||Array.isArray(y))continue;p=y}catch{continue}if(p.error!==void 0&&p.error!==null)throw ee({providerId:J,error:p.error,outputSeen:s,secrets:n});(Array.isArray(p.choices)?p.choices:[]).some(y=>typeof y?.finish_reason=="string"&&y.finish_reason)&&(a=!0),s=!0,yield p}}}finally{r.cancel().catch(()=>{})}if(!a)throw new b("The model's response stream ended without a finish reason or end-of-stream marker",{providerId:J,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",retryable:!1})}var Yt="",en="https://api.xenostudio.ai";var Oi=300*1e3;function tn(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=jr(r);if(i){let l="";for await(let c of e.chatStream({model:n,messages:a})){if(s?.aborted)break;l+=c,i(c)}return{content:l.length>0?[{type:"text",text:l}]:[],stopReason:"end_turn",usageReported:!1,inputTokens:0,outputTokens:0}}let d=await e.chat({model:n,messages:a});return{content:d.content.length>0?[{type:"text",text:d.content}]:[],stopReason:"end_turn",usageReported:typeof d.usage?.promptTokens=="number",inputTokens:d.usage?.promptTokens??0,outputTokens:d.usage?.completionTokens??0}}}}function jr(e){let t=[];for(let n of e){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});continue}let r=[];for(let i of n.content)if(i.type==="text")r.push(i.text);else if(i.type==="tool_use")r.push(`[tool_use ${i.name} ${JSON.stringify(i.input)}]`);else if(i.type==="tool_result"){let s=typeof i.content=="string"?i.content:JSON.stringify(i.content);r.push(`[tool_result ${i.tool_use_id}: ${s}]`)}let o=r.join(`
3
- `).trim();o.length>0&&t.push({role:n.role,content:o})}return t}var Ur="http://localhost:3338",Br=en,Xr=2e3,ht=12e4,Jr=3e4;function nn(e){return e instanceof b?{errorCode:e.code,errorCategory:e.category,retryable:e.retryable,...e.statusCode!==void 0?{statusCode:e.statusCode}:{}}:{}}var He=class{localUrl;cloudUrl;cloudApiKey;mode;defaultLocalModel;defaultCloudModel;localAvailable=null;localModelName=null;lastHealthCheck=0;constructor(t){this.localUrl=t?.localUrl??Ur,this.cloudUrl=t?.cloudUrl??Br,this.cloudApiKey=t?.cloudApiKey??process.env.XENO_API_KEY??(Yt||""),this.mode=t?.mode??"auto",this.defaultLocalModel=t?.localModel??"default",this.defaultCloudModel=t?.cloudModel??"claude-sonnet-4-6"}async chat(t){let n=await this.shouldUseLocal();if(this.mode==="local"&&!n)return{success:!1,content:"",endpoint:"local",model:"",usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:"Local xeno-rt is not available and mode is set to local-only"};if(n)try{return await this.chatLocal(t)}catch(r){return this.mode==="local"?{success:!1,content:"",endpoint:"local",model:t.model??this.defaultLocalModel,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:r instanceof Error?r.message:String(r),...nn(r)}:this.chatCloud(t)}return this.chatCloud(t)}async*chatStream(t){let n=await this.shouldUseLocal();if(this.mode==="local"&&!n)throw new Error("Local xeno-rt is not available and mode is set to local-only");let r=n?this.localUrl:this.cloudUrl,o=t.model??(n?this.defaultLocalModel:this.defaultCloudModel),i=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,s={model:o,messages:i,stream:!0,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(s.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(s.stop=t.stop);let a={"Content-Type":"application/json"};n||(a.Authorization=`Bearer ${this.cloudApiKey}`,a["User-Agent"]="XenoAgentSDK/0.4.0");let d=new AbortController,u=setTimeout(()=>d.abort(),ht),l=[this.cloudApiKey];try{let c;try{c=await fetch(`${r}/v1/chat/completions`,{method:"POST",headers:a,body:JSON.stringify(s),signal:d.signal})}catch(m){throw ze(J,m,l)}if(!c.ok){let m=await c.text().catch(()=>"");throw Ve({providerId:J,prefix:"LLM stream failed",statusCode:c.status,text:m,retryAfter:c.headers.get("retry-after"),secrets:l})}if(!c.body)throw new Error("Response body is null \u2014 streaming not supported");for await(let m of Zt(c.body,l)){let f=m.choices?.[0]?.delta?.content;f&&(yield f)}}finally{clearTimeout(u)}}async isLocalAvailable(t=!1){let n=Date.now();if(!t&&this.localAvailable!==null&&n-this.lastHealthCheck<Jr)return this.localAvailable;try{let r=new AbortController,o=setTimeout(()=>r.abort(),Xr);try{let i=await fetch(`${this.localUrl}/v1/models`,{signal:r.signal});if(!i.ok)return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1;let s=await i.json();return this.localModelName=s.data?.[0]?.id??null,this.localAvailable=!0,this.lastHealthCheck=n,!0}finally{clearTimeout(o)}}catch{return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1}}setMode(t){this.mode=t}getMode(){return this.mode}setLocalUrl(t){this.localUrl=t,this.localAvailable=null,this.lastHealthCheck=0}setCloudApiKey(t){this.cloudApiKey=t}async getStatus(){let t=await this.isLocalAvailable(),n;return this.mode==="local"?n="local":this.mode==="cloud"?n="cloud":n=t?"local":"cloud",{mode:this.mode,localAvailable:t,activeEndpoint:n,localModel:this.localModelName??void 0,localUrl:this.localUrl,cloudUrl:this.cloudUrl}}asLLMProvider(t){return tn(this,t)}async shouldUseLocal(){return this.mode==="cloud"?!1:this.mode==="local"?this.isLocalAvailable():this.isLocalAvailable()}async chatLocal(t){let n=t.model??this.defaultLocalModel,r=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,o={model:n,messages:r,stream:!1,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(o.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(o.stop=t.stop);let i=new AbortController,s=setTimeout(()=>i.abort(),ht),a=[this.cloudApiKey];try{let d;try{d=await fetch(`${this.localUrl}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o),signal:i.signal})}catch(f){throw ze(J,f,a)}if(!d.ok){let f=await d.text().catch(()=>"");throw Ve({providerId:J,prefix:"Local LLM request failed",statusCode:d.status,text:f,retryAfter:d.headers.get("retry-after"),secrets:a})}let u;try{u=await d.json()}catch(f){throw yt(f,a)}let m=(u.choices?.[0]??{}).message??{},p=u.usage??{};return{success:!0,content:String(m.content??""),endpoint:"local",model:String(u.model??n),usage:{promptTokens:p.prompt_tokens??0,completionTokens:p.completion_tokens??0,totalTokens:p.total_tokens??0}}}finally{clearTimeout(s)}}async chatCloud(t){let n=t.model??this.defaultCloudModel,r=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,o={model:n,messages:r,stream:!1,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(o.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(o.stop=t.stop);let i={"Content-Type":"application/json",Authorization:`Bearer ${this.cloudApiKey}`,"User-Agent":"XenoAgentSDK/0.4.0"},s=new AbortController,a=setTimeout(()=>s.abort(),ht),d=[this.cloudApiKey];try{let u;try{u=await fetch(`${this.cloudUrl}/v1/chat/completions`,{method:"POST",headers:i,body:JSON.stringify(o),signal:s.signal})}catch(y){throw ze(J,y,d)}if(!u.ok){let y=await u.text().catch(()=>""),h=`Cloud LLM request failed (HTTP ${u.status})`;try{let x=JSON.parse(y).error;h=typeof x=="string"?x:x?.message??h}catch{}let P=Ve({providerId:J,prefix:"Cloud LLM request failed",statusCode:u.status,text:y,retryAfter:u.headers.get("retry-after"),secrets:d});return{success:!1,content:"",endpoint:"cloud",model:n,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:q(h,d),...nn(P)}}let l;try{l=await u.json()}catch(y){throw yt(y,d)}let p=(l.choices?.[0]??{}).message??{},f=l.usage??{};return{success:!0,content:String(p.content??""),endpoint:"cloud",model:String(l.model??n),usage:{promptTokens:f.prompt_tokens??0,completionTokens:f.completion_tokens??0,totalTokens:f.total_tokens??0}}}finally{clearTimeout(a)}}};var rt=require("node:crypto");function Vr(e){return/^data:([^;,]+)[;,]/i.exec(e.trim())?.[1]}function zr(e){let t=[];for(let n of e){if(n.type==="text"){t.push(n.text);continue}if(n.type==="image_url"){t.push(`[image ${Vr(n.image_url.url)??"unknown"}]`);continue}let r=n.text??n.data;if(r&&r.trim().length>0){t.push(r);continue}let o=n.uri??n.mimeType??"resource";t.push(`[resource ${o}]`)}return t.join(`
1
+ "use strict";var mr=Object.create;var Xe=Object.defineProperty;var fr=Object.getOwnPropertyDescriptor;var gr=Object.getOwnPropertyNames;var yr=Object.getPrototypeOf,hr=Object.prototype.hasOwnProperty;var br=(e,t)=>{for(var n in t)Xe(e,n,{get:t[n],enumerable:!0})},Ft=(e,t,n,r)=>{if(t&&typeof t=="object"||typeof t=="function")for(let o of gr(t))!hr.call(e,o)&&o!==n&&Xe(e,o,{get:()=>t[o],enumerable:!(r=fr(t,o))||r.enumerable});return e};var wr=(e,t,n)=>(n=e!=null?mr(yr(e)):{},Ft(t||!e||!e.__esModule?Xe(n,"default",{value:e,enumerable:!0}):n,e)),vr=e=>Ft(Xe({},"__esModule",{value:!0}),e);var bi={};br(bi,{BUILT_IN_XENO_PROVIDER_PRESETS:()=>Wn,DualLLMProvider:()=>Fe,FileQuotaAuthority:()=>zt,FileXenoProviderConnectionStore:()=>Xt,PROVIDER_TOOL_NAME_PATTERN:()=>It,ProviderError:()=>b,QuotaAcknowledgementError:()=>nt,QuotaError:()=>T,ToolSchemaProjectionError:()=>A,XENO_PROVIDER_CATALOG_SCHEMA_VERSION:()=>$t,XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION:()=>ut,XenoProviderCatalog:()=>Te,assertDirectEndpointResolution:()=>He,classifyProviderHttpError:()=>he,classifyProviderStreamError:()=>ee,createDirectProvider:()=>Mt,createOllamaNativeProvider:()=>Qn,createQuotaGovernedProvider:()=>Eo,createToolNameCodec:()=>De,directProviderConfigFromConnection:()=>Go,isQuotaControlError:()=>$n,normalizeQuotaScope:()=>G,parseRetryAfter:()=>Ae,probeLocalToolGrammarSupport:()=>Kn,probeXenoProvider:()=>Fo,projectToolDefinitionsForProvider:()=>_e,projectToolSchemaForProvider:()=>St,providerCapabilityError:()=>j,providerProtocolError:()=>g,quotaAncestors:()=>Ce,quotaInteger:()=>S,quotaScopeKey:()=>V,quotaText:()=>U,selectXenoProviderRoute:()=>Ho,validateDirectEndpoint:()=>de});module.exports=vr(bi);var Pr=1;var xr=12,_r=128,Cr=/^xeno\.[a-z0-9]+(?:[._][a-z0-9]+)*$/u,Rr=/^[a-z0-9]+(?:[._-][a-z0-9]+)*$/u,Tr=/(?:[\\/]|@|https?:|bearer|token|secret|password|credential|api[_-]?key|[0-9a-f]{8}-[0-9a-f-]{27,})/iu,kr=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"]),Ht=new Set,Gt=new Map;function Er(e){let t=e.trim().toLowerCase();return!t||t.length>64||Tr.test(t)||!Rr.test(t)?null:t}function Sr(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=Er(t);if(!n)return null;let r=Gt.get(e);return r||(r=new Set,Gt.set(e,r)),!r.has(n)&&r.size>=_r?"other":(r.add(n),n)}function Ar(e={}){let t={};for(let[n,r]of Object.entries(e)){if(Object.keys(t).length>=xr)break;if(!kr.has(n))continue;let o=Sr(n,r);o!==null&&(t[n]=o)}return Object.freeze(t)}function Kt(e){if(Ht.size===0||!Cr.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:Pr,kind:e.kind,name:e.name,value:Math.min(t,Number.MAX_SAFE_INTEGER),timestamp:(e.timestamp??new Date).toISOString(),attributes:Ar(e.attributes)});for(let r of Ht)try{r(n)}catch{}}function ye(e,t=1,n){Kt({kind:"counter",name:e,value:t,attributes:n})}function ft(e,t,n){Kt({kind:"histogram",name:e,value:t,attributes:n})}var Ir=["context length","context window","maximum context","too many tokens","request too large"];function Qt(e){let t=e.toLowerCase();return Ir.some(n=>t.includes(n))}var Y="[redacted]";var Lr=new Set(["authorization","proxy-authorization","x-api-key","x-goog-api-key","api-key","apikey","x-xeno-api-key","dpop","cookie","set-cookie"]),Or=new Set(["content-type","accept","accept-encoding","connection","content-length","user-agent","anthropic-version","anthropic-beta","openai-beta","x-stainless-lang"]),Mr=/^(?:access_token|refresh_token|id_token|token|key|api[_-]?key|secret|client_secret|password|signature|sig|auth|code)$/i,$r=[[/-----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${Y}`],[/((?:^|[\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${Y}`],[/\b(Bearer|Basic|Token|DPoP)\s+[A-Za-z0-9._~+/=-]{6,}/gi,`$1 ${Y}`],[/\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,Y],[/\beyJ[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}\.[A-Za-z0-9_-]{6,}/g,Y],[/([?&#;](?:access_token|refresh_token|id_token|token|key|api[_-]?key|secret|client_secret|password|signature|sig)=)[^&#\s"'<>]+/gi,`$1${Y}`],[/(\b[a-z][a-z0-9+.-]*:\/\/)[^/\s:@"']+:[^/\s@"']+@/gi,`$1${Y}@`]];function Wt(e){return e.replace(/[.*+?^${}()|[\]\\]/g,"\\$&")}function Zt(e){let t=new Set,n=i=>{if(typeof i!="string")return;let s=i.trim();if(s.length<12)return;t.add(s);let a=/^(?:Bearer|Basic|Token|DPoP)\s+(.+)$/i.exec(s);a?.[1]&&a[1].trim().length>=12&&t.add(a[1].trim())},r=(i,s)=>{let a=i.trim().toLowerCase();Or.has(a)||(Lr.has(a)||!a.startsWith("x-xeno-"))&&n(s)},o=e.headers;if(o)if(typeof Headers<"u"&&o instanceof Headers)o.forEach((i,s)=>r(s,i));else if(Array.isArray(o))for(let[i,s]of o)r(String(i),String(s));else for(let[i,s]of Object.entries(o))typeof s=="string"&&r(i,s);if(e.url)try{let i=typeof e.url=="string"?new URL(e.url):e.url;i.searchParams.forEach((s,a)=>{Mr.test(a)&&n(s)}),i.password&&n(decodeURIComponent(i.password))}catch{}for(let i of e.extra??[])n(i??void 0);return[...t]}function q(e,t=[]){if(!e)return e;let n=e,r=[...new Set([...t].filter(o=>typeof o=="string"&&o.length>=12))].sort((o,i)=>i.length-o.length);for(let o of r){n=n.replace(new RegExp(`(?<![A-Za-z0-9_-])${Wt(o)}(?![A-Za-z0-9_-])`,"g"),Y);let i=encodeURIComponent(o);i!==o&&(n=n.replace(new RegExp(`(?<![A-Za-z0-9_-])${Wt(i)}(?![A-Za-z0-9_-])`,"g"),Y))}for(let[o,i]of $r)o.lastIndex=0,n=n.replace(o,i);return n}function gt(e,t,n){try{Object.defineProperty(e,t,{value:n,writable:!0,configurable:!0,enumerable:!1})}catch{}}function O(e,t=[],n=0){if(!(e instanceof Error)||n>6)return e;let r=[...t],o=q(e.message,r);if(o!==e.message&&gt(e,"message",o),typeof e.stack=="string"){let s=q(e.stack,r);s!==e.stack&&gt(e,"stack",s)}let i=e.cause;if(i instanceof Error)O(i,r,n+1);else if(i!=null){let s;try{s=typeof i=="string"?i:JSON.stringify(i)??String(i)}catch{s=String(i)}let a=q(s,r);a!==s&&gt(e,"cause",a)}for(let s of Object.keys(e)){let a=e[s];if(typeof a=="string"){let d=q(a,r);if(d!==a)try{e[s]=d}catch{}}}return e}var b=class extends Error{category;code;retryable;providerId;statusCode;retryAfterMs;requestId;providerCode;remedy;constructor(t,n){super(q(t),n.cause!==void 0?{cause:n.cause}:void 0),this.name="ProviderError",this.category=n.category,this.code=n.code,this.retryable=n.retryable??!1,this.providerId=n.providerId,this.statusCode=n.statusCode,this.retryAfterMs=n.retryAfterMs,this.requestId=n.requestId,n.providerCode!==void 0&&(this.providerCode=n.providerCode),n.remedy!==void 0&&(this.remedy=n.remedy),O(this)}};function Ae(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 Nr(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 Dr(e){if(!e||typeof e!="object")return;let t=e,n=t.error&&typeof t.error=="object"?t.error:void 0;for(let r of[n?.code,n?.type,t.code,t.type])if(typeof r=="string"&&/^[A-Za-z][A-Za-z0-9_.:-]{1,63}$/.test(r))return r}var qr=["insufficient credit","insufficient_credit","insufficient funds","insufficient_quota","out of credit","credit balance","payment required","payment_required","spending limit","exceeded your current quota"],jr={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 Je(e,t){return t.some(n=>e.includes(n))}function he(e){let t=[...e.secrets??[]],n=Nr(e.body).trim(),r=Dr(e.body),o=`${n} ${r??""}`.toLowerCase(),i=q(n,t),s=r&&!i.includes(r)?` [${r}]`:"",d=` (${e.source==="stream"?"stream error event":`HTTP ${e.statusCode}`})${i?`: ${i.slice(0,1e3)}`:""}${s}`,u={providerId:e.providerId,...e.source==="stream"?{}:{statusCode:e.statusCode},retryAfterMs:e.retryAfterMs,requestId:e.requestId,...r?{providerCode:r}:{}},l=Br(e.statusCode,o,d,u),c=l.remedy??jr[l.category],m=c?`${l.message}. ${c}.`:l.message;return O(new b(m,{...u,category:l.category,code:l.code,retryable:l.retryable,...c?{remedy:c}:{}}),t)}function Br(e,t,n,r){let o={statusCode:e};return o.statusCode===402||Je(t,qr)?new b(`Provider refused the request for billing: the account is out of credits or over its spending limit${n}`,{...r,remedy:"Add credits or raise the spending limit, then retry",category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):o.statusCode===401?new b(`Provider authentication failed${n}`,{...r,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):o.statusCode===403?new b(`Provider authorization failed${n}`,{...r,category:"authorization",code:"PROVIDER_AUTHORIZATION_FAILED"}):Je(t,["api key not valid","invalid api key","api key expired","api_key_invalid","invalid authentication credentials","missing api key"])?new b(`Provider authentication failed${n}`,{...r,category:"authentication",code:"PROVIDER_AUTHENTICATION_FAILED"}):o.statusCode===429?new b(`Provider rate limit reached${n}`,{...r,category:"rate_limit",code:"PROVIDER_RATE_LIMITED",retryable:!0}):Qt(t)?new b(`Provider context window exceeded${n}`,{...r,category:"context_overflow",code:"PROVIDER_CONTEXT_OVERFLOW"}):Je(t,["safety","content policy","blocked_reason","responsible_ai_policy_violation"])?new b(`Provider safety policy refused the request${n}`,{...r,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):o.statusCode===404||Je(t,["model not found","model does not exist","unsupported model","unknown provider for model"])?new b(`Provider model is unavailable${n}`,{...r,category:"unsupported_model",code:"PROVIDER_MODEL_UNSUPPORTED"}):o.statusCode===408||o.statusCode===504?new b(`Provider request timed out${n}`,{...r,category:"timeout",code:"PROVIDER_TIMEOUT",retryable:!0}):o.statusCode>=500||o.statusCode===409||o.statusCode===425?new b(`Provider server error${n}`,{...r,category:"server",code:"PROVIDER_SERVER_ERROR",retryable:!0}):new b(`Provider rejected the request${n}`,{...r,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}var Ur={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 ee(e){let t=e.error&&typeof e.error=="object"?e.error:{},n=[t.type,t.code,t.status].find(a=>typeof a=="string"),o=[t.code,t.status,t.status_code].find(a=>typeof a=="number"&&Number.isInteger(a)&&a>=400&&a<600)??(n?Ur[n.toLowerCase()]:void 0)??500,i=typeof e.error=="string"?{error:e.error}:{error:t},s=he({providerId:e.providerId,statusCode:o,body:i,source:"stream",...e.secrets?{secrets:e.secrets}:{}});return!e.outputSeen||!s.retryable?s:O(new b(`${s.message} The stream failed after part of the answer was delivered, so it is not retried automatically`,{providerId:s.providerId,category:s.category,code:s.code,retryable:!1,...s.providerCode?{providerCode:s.providerCode}:{},...s.remedy?{remedy:s.remedy}:{}}),e.secrets??[])}function g(e,t,n){return new b(`Malformed ${e} response: ${t}`,{providerId:e,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",...n!==void 0?{cause:n}:{}})}function j(e,t){return ye("xeno.provider.capability_mismatches",1,{component:"provider_contract",provider:e,capability:t,error_code:"provider_capability_unsupported"}),new b(`${e} does not advertise the required ${t} capability`,{providerId:e,category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}function Ve(e){let t=[...e.secrets??[]],n=e.text;try{n=e.text.trim()?JSON.parse(e.text):{}}catch{}let r=Ae(e.retryAfter??null),o=he({providerId:e.providerId,statusCode:e.statusCode,body:n,...r!==void 0?{retryAfterMs:r}:{},secrets:t});return O(new b(`${e.prefix} (HTTP ${e.statusCode}): ${q(e.text,t)}`,{providerId:e.providerId,statusCode:e.statusCode,category:o.category,code:o.code,retryable:o.retryable,...r!==void 0?{retryAfterMs:r}:{},...o.providerCode?{providerCode:o.providerCode}:{},...o.remedy?{remedy:o.remedy}:{}}),t)}function ze(e,t,n=[]){let r=[...n];if(t instanceof b)return O(t,r);let o=t instanceof Error?O(t,r):t,i=q(t instanceof Error?t.message:String(t),r),s=t instanceof Error&&t.name==="AbortError";return O(new b(i,{providerId:e,category:s?"timeout":"transport",code:s?"PROVIDER_TIMEOUT":"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:o}),r)}var J="legacy-chat";function yt(e,t=[]){let n=[...t],r=e instanceof Error?O(e,n):e;return O(new b(q(e instanceof Error?e.message:String(e),n),{providerId:J,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",retryable:!1,cause:r}),n)}async function*Yt(e,t=[]){let n=[...t],r=e.getReader(),o=new TextDecoder,i="",s=!1,a=!1;try{for(;;){let d;try{d=await r.read()}catch(l){let c=l instanceof Error?O(l,n):l;throw O(new b(s?"The model's response stream was cut off part-way through its answer":q(l instanceof Error?l.message:String(l),n),{providerId:J,category:s?"disconnect":"transport",code:s?"PROVIDER_DISCONNECTED":"PROVIDER_TRANSPORT_ERROR",retryable:!s,cause:c}),n)}if(d.done)break;i+=o.decode(d.value,{stream:!0});let u=i.split(`
2
+ `);i=u.pop()??"";for(let l of u){let c=l.trim();if(!c||!c.startsWith("data:"))continue;let m=c.slice(5).trim();if(m==="[DONE]")return;let p;try{let y=JSON.parse(m);if(!y||typeof y!="object"||Array.isArray(y))continue;p=y}catch{continue}if(p.error!==void 0&&p.error!==null)throw ee({providerId:J,error:p.error,outputSeen:s,secrets:n});(Array.isArray(p.choices)?p.choices:[]).some(y=>typeof y?.finish_reason=="string"&&y.finish_reason)&&(a=!0),s=!0,yield p}}}finally{r.cancel().catch(()=>{})}if(!a)throw new b("The model's response stream ended without a finish reason or end-of-stream marker",{providerId:J,category:"malformed_response",code:"PROVIDER_MALFORMED_RESPONSE",retryable:!1})}var Li=Object.freeze({"x-xeno-source":Object.freeze(["auto","quota","credits","byok"]),"x-xeno-byok-mode":Object.freeze(["local","cloud"])});var en="",tn="https://api.xenostudio.ai";var Di=300*1e3;function nn(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=Xr(r);if(i){let l="";for await(let c of e.chatStream({model:n,messages:a})){if(s?.aborted)break;l+=c,i(c)}return{content:l.length>0?[{type:"text",text:l}]:[],stopReason:"end_turn",usageReported:!1,inputTokens:0,outputTokens:0}}let d=await e.chat({model:n,messages:a});return{content:d.content.length>0?[{type:"text",text:d.content}]:[],stopReason:"end_turn",usageReported:typeof d.usage?.promptTokens=="number",inputTokens:d.usage?.promptTokens??0,outputTokens:d.usage?.completionTokens??0}}}}function Xr(e){let t=[];for(let n of e){if(typeof n.content=="string"){t.push({role:n.role,content:n.content});continue}let r=[];for(let i of n.content)if(i.type==="text")r.push(i.text);else if(i.type==="tool_use")r.push(`[tool_use ${i.name} ${JSON.stringify(i.input)}]`);else if(i.type==="tool_result"){let s=typeof i.content=="string"?i.content:JSON.stringify(i.content);r.push(`[tool_result ${i.tool_use_id}: ${s}]`)}let o=r.join(`
3
+ `).trim();o.length>0&&t.push({role:n.role,content:o})}return t}var Jr="http://localhost:3338",Vr=tn,zr=2e3,ht=12e4,Fr=3e4;function rn(e){return e instanceof b?{errorCode:e.code,errorCategory:e.category,retryable:e.retryable,...e.statusCode!==void 0?{statusCode:e.statusCode}:{}}:{}}var Fe=class{localUrl;cloudUrl;cloudApiKey;mode;defaultLocalModel;defaultCloudModel;localAvailable=null;localModelName=null;lastHealthCheck=0;constructor(t){this.localUrl=t?.localUrl??Jr,this.cloudUrl=t?.cloudUrl??Vr,this.cloudApiKey=t?.cloudApiKey??process.env.XENO_API_KEY??(en||""),this.mode=t?.mode??"auto",this.defaultLocalModel=t?.localModel??"default",this.defaultCloudModel=t?.cloudModel??"claude-sonnet-4-6"}async chat(t){let n=await this.shouldUseLocal();if(this.mode==="local"&&!n)return{success:!1,content:"",endpoint:"local",model:"",usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:"Local xeno-rt is not available and mode is set to local-only"};if(n)try{return await this.chatLocal(t)}catch(r){return this.mode==="local"?{success:!1,content:"",endpoint:"local",model:t.model??this.defaultLocalModel,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:r instanceof Error?r.message:String(r),...rn(r)}:this.chatCloud(t)}return this.chatCloud(t)}async*chatStream(t){let n=await this.shouldUseLocal();if(this.mode==="local"&&!n)throw new Error("Local xeno-rt is not available and mode is set to local-only");let r=n?this.localUrl:this.cloudUrl,o=t.model??(n?this.defaultLocalModel:this.defaultCloudModel),i=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,s={model:o,messages:i,stream:!0,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(s.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(s.stop=t.stop);let a={"Content-Type":"application/json"};n||(a.Authorization=`Bearer ${this.cloudApiKey}`,a["User-Agent"]="XenoAgentSDK/0.4.0");let d=new AbortController,u=setTimeout(()=>d.abort(),ht),l=[this.cloudApiKey];try{let c;try{c=await fetch(`${r}/v1/chat/completions`,{method:"POST",headers:a,body:JSON.stringify(s),signal:d.signal})}catch(m){throw ze(J,m,l)}if(!c.ok){let m=await c.text().catch(()=>"");throw Ve({providerId:J,prefix:"LLM stream failed",statusCode:c.status,text:m,retryAfter:c.headers.get("retry-after"),secrets:l})}if(!c.body)throw new Error("Response body is null \u2014 streaming not supported");for await(let m of Yt(c.body,l)){let f=m.choices?.[0]?.delta?.content;f&&(yield f)}}finally{clearTimeout(u)}}async isLocalAvailable(t=!1){let n=Date.now();if(!t&&this.localAvailable!==null&&n-this.lastHealthCheck<Fr)return this.localAvailable;try{let r=new AbortController,o=setTimeout(()=>r.abort(),zr);try{let i=await fetch(`${this.localUrl}/v1/models`,{signal:r.signal});if(!i.ok)return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1;let s=await i.json();return this.localModelName=s.data?.[0]?.id??null,this.localAvailable=!0,this.lastHealthCheck=n,!0}finally{clearTimeout(o)}}catch{return this.localAvailable=!1,this.localModelName=null,this.lastHealthCheck=n,!1}}setMode(t){this.mode=t}getMode(){return this.mode}setLocalUrl(t){this.localUrl=t,this.localAvailable=null,this.lastHealthCheck=0}setCloudApiKey(t){this.cloudApiKey=t}async getStatus(){let t=await this.isLocalAvailable(),n;return this.mode==="local"?n="local":this.mode==="cloud"?n="cloud":n=t?"local":"cloud",{mode:this.mode,localAvailable:t,activeEndpoint:n,localModel:this.localModelName??void 0,localUrl:this.localUrl,cloudUrl:this.cloudUrl}}asLLMProvider(t){return nn(this,t)}async shouldUseLocal(){return this.mode==="cloud"?!1:this.mode==="local"?this.isLocalAvailable():this.isLocalAvailable()}async chatLocal(t){let n=t.model??this.defaultLocalModel,r=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,o={model:n,messages:r,stream:!1,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(o.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(o.stop=t.stop);let i=new AbortController,s=setTimeout(()=>i.abort(),ht),a=[this.cloudApiKey];try{let d;try{d=await fetch(`${this.localUrl}/v1/chat/completions`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(o),signal:i.signal})}catch(f){throw ze(J,f,a)}if(!d.ok){let f=await d.text().catch(()=>"");throw Ve({providerId:J,prefix:"Local LLM request failed",statusCode:d.status,text:f,retryAfter:d.headers.get("retry-after"),secrets:a})}let u;try{u=await d.json()}catch(f){throw yt(f,a)}let m=(u.choices?.[0]??{}).message??{},p=u.usage??{};return{success:!0,content:String(m.content??""),endpoint:"local",model:String(u.model??n),usage:{promptTokens:p.prompt_tokens??0,completionTokens:p.completion_tokens??0,totalTokens:p.total_tokens??0}}}finally{clearTimeout(s)}}async chatCloud(t){let n=t.model??this.defaultCloudModel,r=t.systemPrompt?[{role:"system",content:t.systemPrompt},...t.messages]:t.messages,o={model:n,messages:r,stream:!1,max_tokens:t.maxTokens??4096,temperature:t.temperature??.7};t.jsonMode&&(o.response_format={type:"json_object"}),t.stop&&t.stop.length>0&&(o.stop=t.stop);let i={"Content-Type":"application/json",Authorization:`Bearer ${this.cloudApiKey}`,"User-Agent":"XenoAgentSDK/0.4.0"},s=new AbortController,a=setTimeout(()=>s.abort(),ht),d=[this.cloudApiKey];try{let u;try{u=await fetch(`${this.cloudUrl}/v1/chat/completions`,{method:"POST",headers:i,body:JSON.stringify(o),signal:s.signal})}catch(y){throw ze(J,y,d)}if(!u.ok){let y=await u.text().catch(()=>""),h=`Cloud LLM request failed (HTTP ${u.status})`;try{let x=JSON.parse(y).error;h=typeof x=="string"?x:x?.message??h}catch{}let P=Ve({providerId:J,prefix:"Cloud LLM request failed",statusCode:u.status,text:y,retryAfter:u.headers.get("retry-after"),secrets:d});return{success:!1,content:"",endpoint:"cloud",model:n,usage:{promptTokens:0,completionTokens:0,totalTokens:0},error:q(h,d),...rn(P)}}let l;try{l=await u.json()}catch(y){throw yt(y,d)}let p=(l.choices?.[0]??{}).message??{},f=l.usage??{};return{success:!0,content:String(p.content??""),endpoint:"cloud",model:String(l.model??n),usage:{promptTokens:f.prompt_tokens??0,completionTokens:f.completion_tokens??0,totalTokens:f.total_tokens??0}}}finally{clearTimeout(a)}}};var rt=require("node:crypto");function Hr(e){return/^data:([^;,]+)[;,]/i.exec(e.trim())?.[1]}function Gr(e){let t=[];for(let n of e){if(n.type==="text"){t.push(n.text);continue}if(n.type==="image_url"){t.push(`[image ${Hr(n.image_url.url)??"unknown"}]`);continue}let r=n.text??n.data;if(r&&r.trim().length>0){t.push(r);continue}let o=n.uri??n.mimeType??"resource";t.push(`[resource ${o}]`)}return t.join(`
4
4
 
5
- `).trim()}function Ie(e){return typeof e=="string"?e:zr(e)}var Ge=require("node:perf_hooks");var sn=require("node:dns/promises"),Le=require("node:net");var an=new Set(["metadata.google.internal","metadata.azure.internal","instance-data.ec2.internal"]);function $(e){return new b(`Provider endpoint rejected: ${e}`,{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"})}function Hr(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 rn(e){let t=Hr(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];(0,Le.isIP)(t)===6&&(t=new URL(`http://[${t}]`).hostname.slice(1,-1));let n=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(t);if(n){let r=Number.parseInt(n[1],16),o=Number.parseInt(n[2],16);return`${r>>8}.${r&255}.${o>>8}.${o&255}`}return t}function dn(e){let t=be(e);return(0,Le.isIP)(t)===4?rn(t):t==="::"||t==="::0"?"unspecified":t==="::1"?"loopback":t.startsWith("::ffff:")?rn(t.slice(7)):/^f[cd]/.test(t)?"private":/^fe[89ab]/.test(t)?"link-local":"public"}function on(e){return e==="example"||e.endsWith(".example")||e==="test"||e.endsWith(".test")||e==="invalid"||e.endsWith(".invalid")}function Fr(e){return e==="localhost"||e.endsWith(".localhost")}function de(e,t={}){let n;try{n=new URL(e)}catch{throw $("the URL is invalid")}if(n.username||n.password)throw $("embedded credentials are forbidden");if(n.hash||n.search)throw $("base URLs cannot contain a query or fragment");if(!n.hostname||n.hostname.includes("%"))throw $("the hostname is empty or ambiguous");if(an.has(n.hostname.toLowerCase()))throw $("cloud metadata destinations are forbidden");if(n.protocol!=="https:"&&n.protocol!=="http:")throw $(`scheme ${n.protocol} is unsupported`);let r=t.profile??"public-https";if(n.protocol==="http:"&&r!=="local-network")throw $("plain HTTP requires the explicit local-network profile");let o=n.hostname.replace(/^\[|\]$/g,""),i=(0,Le.isIP)(o)?dn(o):null;if(i==="link-local"||i==="unspecified")throw $(`${i} destinations are forbidden`);if(r==="public-https"&&(i==="private"||i==="loopback"||Fr(n.hostname)))throw $("private and loopback destinations require the local-network profile");if(r==="local-network"&&n.protocol==="http:"&&i==="public"&&!t.allowedHosts?.includes(n.hostname))throw $("local-network HTTP must resolve to loopback or a private address");return n}async function Fe(e,t={}){await bt(e,t)}async function bt(e,t={}){let n=e.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(an.has(n))throw $("cloud metadata destinations are forbidden");let r=new Set((t.allowedHosts??[]).map(s=>s.toLowerCase())),o=(0,Le.isIP)(n)?[n]:on(n)?[]:t.resolveHostname?await t.resolveHostname(n):(await(0,sn.lookup)(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!o.length&&!on(n))throw $("DNS resolution returned no addresses");let i=t.profile??"public-https";for(let s of o){let a=dn(s);if(a==="link-local"||a==="unspecified")throw $(`DNS resolved to a forbidden ${a} address`);if(i==="public-https"&&a!=="public"&&!r.has(n))throw $(`DNS resolved public endpoint to ${a} address ${s}`);if(i==="local-network"&&e.protocol==="http:"&&a==="public"&&!r.has(n))throw $(`local-network HTTP resolved to public address ${s}`)}return o}var cn=require("node:http"),ln=require("node:https"),wt=require("node:net"),un=require("node:events");function pn(e,t,n){return{dispatch(r,o){let i,s=!1,a=c=>{s||(s=!0,i?.destroy(),o.onError(c))},d=t[0];if(!d||!(0,wt.isIP)(d)||new URL(r.origin).origin!==e.origin)return queueMicrotask(()=>a(new Error("Provider connection has no authorized pinned address"))),!0;let u=r.headers??{},l=(e.protocol==="https:"?ln.request:cn.request)(new URL(r.path,e.origin),{method:r.method,headers:u,agent:!1,rejectUnauthorized:!0,lookup:(c,m,p)=>{let f={address:d,family:(0,wt.isIP)(d)};typeof m=="object"&&m.all?p(null,[f]):p(null,d,f.family)}},c=>{i=c;let m=c.rawHeaders.map(f=>Buffer.from(f)),p=()=>c.resume();o.onHeaders(c.statusCode??500,m,p,c.statusMessage??"")===!1&&c.pause(),c.on("data",f=>{o.onData(f)||c.pause()}),c.on("end",()=>{s||(s=!0,o.onComplete(c.rawTrailers.map(f=>Buffer.from(f))))}),c.on("error",a),c.on("aborted",()=>a(new Error("Provider response was interrupted")))});return l.on("socket",c=>{c.once("connect",()=>{if(!c.remoteAddress||be(c.remoteAddress)!==be(d)){l.destroy(new Error("Provider socket did not connect to its authorized address"));return}e.protocol==="http:"&&n?.()}),e.protocol==="https:"&&c.once("secureConnect",()=>{c.authorized&&c.remoteAddress&&be(c.remoteAddress)===be(d)&&n?.()})}),l.on("error",a),o.onConnect(c=>l.destroy(c??new Error("Provider request aborted"))),(async()=>{try{let c=r.body;if(typeof c=="string"||c instanceof Uint8Array)l.end(c);else{if(c)for await(let m of c){if(l.destroyed)return;l.write(m)||await(0,un.once)(l,"drain")}l.end()}}catch(c){l.destroy(c instanceof Error?c:new Error("Provider request body failed"))}})(),!0}}}var we={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function Gr(e={}){for(let[t,n]of Object.entries(e))if(n!==void 0&&(!Number.isSafeInteger(n)||n<1))throw g("provider-transport",`${t} must be a positive safe integer`);return{connectTimeoutMs:Math.max(100,e.connectTimeoutMs??we.connectTimeoutMs),totalTimeoutMs:Math.max(100,e.totalTimeoutMs??we.totalTimeoutMs),idleTimeoutMs:Math.max(100,e.idleTimeoutMs??we.idleTimeoutMs),maxResponseBytes:Math.max(1024,e.maxResponseBytes??we.maxResponseBytes),maxHeaderBytes:Math.max(1024,e.maxHeaderBytes??we.maxHeaderBytes),maxEventBytes:Math.max(1024,e.maxEventBytes??we.maxEventBytes)}}async function Oe(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 Ke(e,t,n,r){try{return e.decode(t,{stream:n})}catch{throw g(r,"response is not valid UTF-8")}}function vt(e,t,n){let r=new b(t==="cancelled"?"Provider request was cancelled":"Provider request timed out",{providerId:e,category:t,code:t==="cancelled"?"PROVIDER_CANCELLED":"PROVIDER_TIMEOUT",retryable:!1,...n!==void 0?{cause:n}:{}});return t==="cancelled"&&(r.name="AbortError"),r}function Kr(e){let t=0;return e.forEach((n,r)=>{t+=Buffer.byteLength(r)+Buffer.byteLength(n)+4}),t}async function mn(e,t,n,r){if(!e.body)return"";let o=e.body.getReader(),i=new TextDecoder("utf-8",{fatal:!0}),s=0,a="",d,u=()=>{d&&clearTimeout(d),d=setTimeout(()=>r.abort("idle-timeout"),n.idleTimeoutMs)};u();try{for(;;){let{value:l,done:c}=await Oe(o.read(),r.signal);if(c)break;if(u(),s+=l.byteLength,s>n.maxResponseBytes)throw g(t,`response exceeded ${n.maxResponseBytes} bytes`);a+=Ke(i,l,!0,t)}return a+=Ke(i,void 0,!1,t),a}finally{d&&clearTimeout(d),o.cancel().catch(()=>{}),o.releaseLock()}}async function fn(e,t,n,r,o={delivered:!1}){let i=Ge.performance.now(),s=Gr(n.limits),a=Wt({headers:t.headers,url:e});ye("xeno.provider.requests",1,{component:"provider_transport",provider:n.providerId,transport:"http"});let d=new AbortController,u=null,l=t.signal,c=()=>d.abort("caller");if(l?.aborted)throw vt(n.providerId,"cancelled");l?.addEventListener("abort",c,{once:!0});let m=setTimeout(()=>{u="total",d.abort("total-timeout")},s.totalTimeoutMs),p=setTimeout(()=>{u="connect",d.abort("connect-timeout")},s.connectTimeoutMs),f;try{let y=await Oe(bt(e,n.endpointPolicy),d.signal);if(d.signal.aborted)throw new Error("Provider request aborted before dispatch");let h={...t,signal:d.signal,redirect:"manual",dispatcher:pn(e,y,()=>clearTimeout(p))},P=fetch(e,h);P.then(R=>{d.signal.aborted&&R.body?.cancel().catch(()=>{})},()=>{});let v=await Oe(P,d.signal);if(f=v,clearTimeout(p),Kr(v.headers)>s.maxHeaderBytes)throw g(n.providerId,`response headers exceeded ${s.maxHeaderBytes} bytes`);if(v.redirected||v.status>=300&&v.status<400)throw new b("Provider redirects are disabled",{providerId:n.providerId,category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED",statusCode:v.status});let x=v.headers.get("content-length");if(x&&/^\d+$/.test(x)&&Number(x)>s.maxResponseBytes)throw g(n.providerId,`response exceeded ${s.maxResponseBytes} bytes`);if(!v.ok){let R=await mn(v,n.providerId,s,d),I=R;try{I=R?JSON.parse(R):{}}catch{}throw he({providerId:n.providerId,statusCode:v.status,body:I,retryAfterMs:Ae(v.headers.get("retry-after")),requestId:v.headers.get("request-id")??v.headers.get("x-request-id")??void 0,secrets:a})}let w=await Oe(r(v,d,s),d.signal);return ye("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),ft("xeno.provider.request_duration_ms",Ge.performance.now()-i,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),w}catch(y){let h;throw y instanceof b?h=y:l?.aborted||d.signal.reason==="caller"?h=vt(n.providerId,"cancelled",y):u||d.signal.reason==="idle-timeout"?h=vt(n.providerId,"timeout",y):h=new b("Provider transport failed",{providerId:n.providerId,category:"transport",code:"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:y}),o.delivered&&h.retryable&&!(y instanceof b)&&(h=new b(`${h.message}; the stream was cut off after part of the answer was delivered, so it is not retried automatically`,{...h.providerId!==void 0?{providerId:h.providerId}:{},...h.statusCode!==void 0?{statusCode:h.statusCode}:{},...h.requestId!==void 0?{requestId:h.requestId}:{},...h.providerCode!==void 0?{providerCode:h.providerCode}:{},...h.remedy!==void 0?{remedy:h.remedy}:{},category:h.category,code:h.code,retryable:!1,cause:h.cause??h})),O(h,a),d.abort("request-failed"),f?.body&&!f.body.locked&&f.body.cancel().catch(()=>{}),ye("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:h.category,error_code:h.code}),ft("xeno.provider.request_duration_ms",Ge.performance.now()-i,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:h.category}),h}finally{clearTimeout(p),clearTimeout(m),l?.removeEventListener("abort",c)}}async function ve(e,t,n){return fn(e,t,n,async(r,o,i)=>{let s=await mn(r,n.providerId,i,o),a;try{a=s?JSON.parse(s):{}}catch(d){throw g(n.providerId,"body is not valid JSON",d)}if(!a||typeof a!="object"||Array.isArray(a))throw g(n.providerId,"JSON body must be an object");return a})}async function Me(e,t,n,r){let o={delivered:!1};return fn(e,t,n,async(i,s,a)=>{if(!i.body)throw g(n.providerId,"stream response has no body");let d=i.body.getReader(),u=new TextDecoder("utf-8",{fatal:!0}),l="",c=0,m="message",p=[],f,y=()=>{f&&clearTimeout(f),f=setTimeout(()=>s.abort("idle-timeout"),a.idleTimeoutMs)},h=async()=>{if(p.length===0){m="message";return}let P=p.join(`
5
+ `).trim()}function Ie(e){return typeof e=="string"?e:Gr(e)}var Ge=require("node:perf_hooks");var an=require("node:dns/promises"),Le=require("node:net");var dn=new Set(["metadata.google.internal","metadata.azure.internal","instance-data.ec2.internal"]);function $(e){return new b(`Provider endpoint rejected: ${e}`,{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"})}function Kr(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 on(e){let t=Kr(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];(0,Le.isIP)(t)===6&&(t=new URL(`http://[${t}]`).hostname.slice(1,-1));let n=/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/.exec(t);if(n){let r=Number.parseInt(n[1],16),o=Number.parseInt(n[2],16);return`${r>>8}.${r&255}.${o>>8}.${o&255}`}return t}function cn(e){let t=be(e);return(0,Le.isIP)(t)===4?on(t):t==="::"||t==="::0"?"unspecified":t==="::1"?"loopback":t.startsWith("::ffff:")?on(t.slice(7)):/^f[cd]/.test(t)?"private":/^fe[89ab]/.test(t)?"link-local":"public"}function sn(e){return e==="example"||e.endsWith(".example")||e==="test"||e.endsWith(".test")||e==="invalid"||e.endsWith(".invalid")}function Qr(e){return e==="localhost"||e.endsWith(".localhost")}function de(e,t={}){let n;try{n=new URL(e)}catch{throw $("the URL is invalid")}if(n.username||n.password)throw $("embedded credentials are forbidden");if(n.hash||n.search)throw $("base URLs cannot contain a query or fragment");if(!n.hostname||n.hostname.includes("%"))throw $("the hostname is empty or ambiguous");if(dn.has(n.hostname.toLowerCase()))throw $("cloud metadata destinations are forbidden");if(n.protocol!=="https:"&&n.protocol!=="http:")throw $(`scheme ${n.protocol} is unsupported`);let r=t.profile??"public-https";if(n.protocol==="http:"&&r!=="local-network")throw $("plain HTTP requires the explicit local-network profile");let o=n.hostname.replace(/^\[|\]$/g,""),i=(0,Le.isIP)(o)?cn(o):null;if(i==="link-local"||i==="unspecified")throw $(`${i} destinations are forbidden`);if(r==="public-https"&&(i==="private"||i==="loopback"||Qr(n.hostname)))throw $("private and loopback destinations require the local-network profile");if(r==="local-network"&&n.protocol==="http:"&&i==="public"&&!t.allowedHosts?.includes(n.hostname))throw $("local-network HTTP must resolve to loopback or a private address");return n}async function He(e,t={}){await bt(e,t)}async function bt(e,t={}){let n=e.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(dn.has(n))throw $("cloud metadata destinations are forbidden");let r=new Set((t.allowedHosts??[]).map(s=>s.toLowerCase())),o=(0,Le.isIP)(n)?[n]:sn(n)?[]:t.resolveHostname?await t.resolveHostname(n):(await(0,an.lookup)(n,{all:!0,verbatim:!0})).map(s=>s.address);if(!o.length&&!sn(n))throw $("DNS resolution returned no addresses");let i=t.profile??"public-https";for(let s of o){let a=cn(s);if(a==="link-local"||a==="unspecified")throw $(`DNS resolved to a forbidden ${a} address`);if(i==="public-https"&&a!=="public"&&!r.has(n))throw $(`DNS resolved public endpoint to ${a} address ${s}`);if(i==="local-network"&&e.protocol==="http:"&&a==="public"&&!r.has(n))throw $(`local-network HTTP resolved to public address ${s}`)}return o}var ln=require("node:http"),un=require("node:https"),wt=require("node:net"),pn=require("node:events");function mn(e,t,n){return{dispatch(r,o){let i,s=!1,a=c=>{s||(s=!0,i?.destroy(),o.onError(c))},d=t[0];if(!d||!(0,wt.isIP)(d)||new URL(r.origin).origin!==e.origin)return queueMicrotask(()=>a(new Error("Provider connection has no authorized pinned address"))),!0;let u=r.headers??{},l=(e.protocol==="https:"?un.request:ln.request)(new URL(r.path,e.origin),{method:r.method,headers:u,agent:!1,rejectUnauthorized:!0,lookup:(c,m,p)=>{let f={address:d,family:(0,wt.isIP)(d)};typeof m=="object"&&m.all?p(null,[f]):p(null,d,f.family)}},c=>{i=c;let m=c.rawHeaders.map(f=>Buffer.from(f)),p=()=>c.resume();o.onHeaders(c.statusCode??500,m,p,c.statusMessage??"")===!1&&c.pause(),c.on("data",f=>{o.onData(f)||c.pause()}),c.on("end",()=>{s||(s=!0,o.onComplete(c.rawTrailers.map(f=>Buffer.from(f))))}),c.on("error",a),c.on("aborted",()=>a(new Error("Provider response was interrupted")))});return l.on("socket",c=>{c.once("connect",()=>{if(!c.remoteAddress||be(c.remoteAddress)!==be(d)){l.destroy(new Error("Provider socket did not connect to its authorized address"));return}e.protocol==="http:"&&n?.()}),e.protocol==="https:"&&c.once("secureConnect",()=>{c.authorized&&c.remoteAddress&&be(c.remoteAddress)===be(d)&&n?.()})}),l.on("error",a),o.onConnect(c=>l.destroy(c??new Error("Provider request aborted"))),(async()=>{try{let c=r.body;if(typeof c=="string"||c instanceof Uint8Array)l.end(c);else{if(c)for await(let m of c){if(l.destroyed)return;l.write(m)||await(0,pn.once)(l,"drain")}l.end()}}catch(c){l.destroy(c instanceof Error?c:new Error("Provider request body failed"))}})(),!0}}}var we={connectTimeoutMs:15e3,totalTimeoutMs:12e4,idleTimeoutMs:3e4,maxResponseBytes:8*1024*1024,maxHeaderBytes:64*1024,maxEventBytes:1024*1024};function Wr(e={}){for(let[t,n]of Object.entries(e))if(n!==void 0&&(!Number.isSafeInteger(n)||n<1))throw g("provider-transport",`${t} must be a positive safe integer`);return{connectTimeoutMs:Math.max(100,e.connectTimeoutMs??we.connectTimeoutMs),totalTimeoutMs:Math.max(100,e.totalTimeoutMs??we.totalTimeoutMs),idleTimeoutMs:Math.max(100,e.idleTimeoutMs??we.idleTimeoutMs),maxResponseBytes:Math.max(1024,e.maxResponseBytes??we.maxResponseBytes),maxHeaderBytes:Math.max(1024,e.maxHeaderBytes??we.maxHeaderBytes),maxEventBytes:Math.max(1024,e.maxEventBytes??we.maxEventBytes)}}async function Oe(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 Ke(e,t,n,r){try{return e.decode(t,{stream:n})}catch{throw g(r,"response is not valid UTF-8")}}function vt(e,t,n){let r=new b(t==="cancelled"?"Provider request was cancelled":"Provider request timed out",{providerId:e,category:t,code:t==="cancelled"?"PROVIDER_CANCELLED":"PROVIDER_TIMEOUT",retryable:!1,...n!==void 0?{cause:n}:{}});return t==="cancelled"&&(r.name="AbortError"),r}function Zr(e){let t=0;return e.forEach((n,r)=>{t+=Buffer.byteLength(r)+Buffer.byteLength(n)+4}),t}async function fn(e,t,n,r){if(!e.body)return"";let o=e.body.getReader(),i=new TextDecoder("utf-8",{fatal:!0}),s=0,a="",d,u=()=>{d&&clearTimeout(d),d=setTimeout(()=>r.abort("idle-timeout"),n.idleTimeoutMs)};u();try{for(;;){let{value:l,done:c}=await Oe(o.read(),r.signal);if(c)break;if(u(),s+=l.byteLength,s>n.maxResponseBytes)throw g(t,`response exceeded ${n.maxResponseBytes} bytes`);a+=Ke(i,l,!0,t)}return a+=Ke(i,void 0,!1,t),a}finally{d&&clearTimeout(d),o.cancel().catch(()=>{}),o.releaseLock()}}async function gn(e,t,n,r,o={delivered:!1}){let i=Ge.performance.now(),s=Wr(n.limits),a=Zt({headers:t.headers,url:e});ye("xeno.provider.requests",1,{component:"provider_transport",provider:n.providerId,transport:"http"});let d=new AbortController,u=null,l=t.signal,c=()=>d.abort("caller");if(l?.aborted)throw vt(n.providerId,"cancelled");l?.addEventListener("abort",c,{once:!0});let m=setTimeout(()=>{u="total",d.abort("total-timeout")},s.totalTimeoutMs),p=setTimeout(()=>{u="connect",d.abort("connect-timeout")},s.connectTimeoutMs),f;try{let y=await Oe(bt(e,n.endpointPolicy),d.signal);if(d.signal.aborted)throw new Error("Provider request aborted before dispatch");let h={...t,signal:d.signal,redirect:"manual",dispatcher:mn(e,y,()=>clearTimeout(p))},P=fetch(e,h);P.then(R=>{d.signal.aborted&&R.body?.cancel().catch(()=>{})},()=>{});let v=await Oe(P,d.signal);if(f=v,clearTimeout(p),Zr(v.headers)>s.maxHeaderBytes)throw g(n.providerId,`response headers exceeded ${s.maxHeaderBytes} bytes`);if(v.redirected||v.status>=300&&v.status<400)throw new b("Provider redirects are disabled",{providerId:n.providerId,category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED",statusCode:v.status});let x=v.headers.get("content-length");if(x&&/^\d+$/.test(x)&&Number(x)>s.maxResponseBytes)throw g(n.providerId,`response exceeded ${s.maxResponseBytes} bytes`);if(!v.ok){let R=await fn(v,n.providerId,s,d),I=R;try{I=R?JSON.parse(R):{}}catch{}throw he({providerId:n.providerId,statusCode:v.status,body:I,retryAfterMs:Ae(v.headers.get("retry-after")),requestId:v.headers.get("request-id")??v.headers.get("x-request-id")??void 0,secrets:a})}let w=await Oe(r(v,d,s),d.signal);return ye("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),ft("xeno.provider.request_duration_ms",Ge.performance.now()-i,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"success"}),w}catch(y){let h;throw y instanceof b?h=y:l?.aborted||d.signal.reason==="caller"?h=vt(n.providerId,"cancelled",y):u||d.signal.reason==="idle-timeout"?h=vt(n.providerId,"timeout",y):h=new b("Provider transport failed",{providerId:n.providerId,category:"transport",code:"PROVIDER_TRANSPORT_ERROR",retryable:!0,cause:y}),o.delivered&&h.retryable&&!(y instanceof b)&&(h=new b(`${h.message}; the stream was cut off after part of the answer was delivered, so it is not retried automatically`,{...h.providerId!==void 0?{providerId:h.providerId}:{},...h.statusCode!==void 0?{statusCode:h.statusCode}:{},...h.requestId!==void 0?{requestId:h.requestId}:{},...h.providerCode!==void 0?{providerCode:h.providerCode}:{},...h.remedy!==void 0?{remedy:h.remedy}:{},category:h.category,code:h.code,retryable:!1,cause:h.cause??h})),O(h,a),d.abort("request-failed"),f?.body&&!f.body.locked&&f.body.cancel().catch(()=>{}),ye("xeno.provider.request_results",1,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:h.category,error_code:h.code}),ft("xeno.provider.request_duration_ms",Ge.performance.now()-i,{component:"provider_transport",provider:n.providerId,transport:"http",outcome:"error",category:h.category}),h}finally{clearTimeout(p),clearTimeout(m),l?.removeEventListener("abort",c)}}async function ve(e,t,n){return gn(e,t,n,async(r,o,i)=>{let s=await fn(r,n.providerId,i,o),a;try{a=s?JSON.parse(s):{}}catch(d){throw g(n.providerId,"body is not valid JSON",d)}if(!a||typeof a!="object"||Array.isArray(a))throw g(n.providerId,"JSON body must be an object");return a})}async function Me(e,t,n,r){let o={delivered:!1};return gn(e,t,n,async(i,s,a)=>{if(!i.body)throw g(n.providerId,"stream response has no body");let d=i.body.getReader(),u=new TextDecoder("utf-8",{fatal:!0}),l="",c=0,m="message",p=[],f,y=()=>{f&&clearTimeout(f),f=setTimeout(()=>s.abort("idle-timeout"),a.idleTimeoutMs)},h=async()=>{if(p.length===0){m="message";return}let P=p.join(`
6
6
  `);if(Buffer.byteLength(P)>a.maxEventBytes)throw g(n.providerId,`stream event exceeded ${a.maxEventBytes} bytes`);await r({event:m,data:P}),o.delivered=!0,m="message",p=[]};y();try{for(;;){let{value:P,done:v}=await Oe(d.read(),s.signal);if(v)break;if(y(),c+=P.byteLength,c>a.maxResponseBytes)throw g(n.providerId,`stream exceeded ${a.maxResponseBytes} bytes`);for(l+=Ke(u,P,!0,n.providerId);;){let x=l.indexOf(`
7
- `);if(x<0)break;let w=l.slice(0,x).replace(/\r$/,"");if(l=l.slice(x+1),!w)await h();else if(!w.startsWith(":")){let R=w.indexOf(":"),I=R<0?w:w.slice(0,R),fe=R<0?"":w.slice(R+1).replace(/^ /,"");I==="event"?m=fe:I==="data"&&p.push(fe)}}}if(l+=Ke(u,void 0,!1,n.providerId),l.trim())for(let P of l.split(/\r?\n/))P.startsWith("data:")?p.push(P.slice(5).replace(/^ /,"")):P.startsWith("event:")&&(m=P.slice(6).trim());await h()}finally{f&&clearTimeout(f),d.cancel().catch(()=>{}),d.releaseLock()}},o)}var En=require("node:crypto");var xt=require("node:net"),et=class extends Error{issues;constructor(t){super(`Invalid JSON Schema: ${t.map(n=>`${n.path||"#"} ${n.message}`).join("; ")}`),this.name="JsonSchemaCompilationError",this.issues=t}},_t="https://json-schema.org/draft/2020-12/schema",Qr=new Set(["string","number","integer","boolean","array","object","null"]),Wr=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"]),bn=new Map([["date",e=>xn(e)],["date-time",e=>ho(e)],["time",e=>_n(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=>gn(e)],["idn-email",e=>gn(e)],["hostname",e=>Rt(e)],["idn-hostname",e=>Rt(e)],["ipv4",e=>(0,xt.isIP)(e)===4],["ipv6",e=>(0,xt.isIP)(e)===6],["uuid",e=>/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(e)],["uri",e=>yn(e)],["iri",e=>yn(e)],["uri-reference",e=>hn(e)],["iri-reference",e=>hn(e)],["uri-template",e=>bo(e)],["json-pointer",e=>/^(?:\/(?:[^~/]|~[01])*)*$/u.test(e)],["relative-json-pointer",e=>/^(?:0|[1-9]\d*)(?:#|(?:\/(?:[^~/]|~[01])*)*)$/u.test(e)],["regex",(e,t)=>kt(e,t.maxPatternLength)!==void 0]]);function Zr(e={}){return{strictKeywords:e.strictKeywords??!0,assertFormats:e.assertFormats??!1,maxSchemaDepth:ie(e.maxSchemaDepth,64,1,256,"maxSchemaDepth"),maxSchemaNodes:ie(e.maxSchemaNodes,4096,1,1e5,"maxSchemaNodes"),maxReferences:ie(e.maxReferences,512,0,1e4,"maxReferences"),maxPatternLength:ie(e.maxPatternLength,256,1,4096,"maxPatternLength"),maxValidationDepth:ie(e.maxValidationDepth,128,1,1024,"maxValidationDepth"),maxValidationSteps:ie(e.maxValidationSteps,1e5,100,1e7,"maxValidationSteps"),maxValidationErrors:ie(e.maxValidationErrors,64,1,1024,"maxValidationErrors"),maxInputBytes:ie(e.maxInputBytes,16*1024*1024,1024,256*1024*1024,"maxInputBytes")}}function ie(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 Yr(e,t={}){let n={root:e,options:Zr(t),issues:[],rawByPointer:new Map,anchors:new Map,compiledByPointer:new Map,schemaNodes:0,references:0,nextNodeId:1};Ze(e,"",0,n);let r=ce(e,"",0,n);if(n.issues.length>0||!r)throw new et(n.issues);return Object.freeze({dialect:_t,formatAssertion:n.options.assertFormats,validate(o){let i=[],s=Ct(o);if(s)return i.push({path:s.path,keyword:"type",schemaPath:"#",message:s.message}),{valid:!1,errors:i,steps:0,truncated:!1};let a=JSON.stringify(o),d=Buffer.byteLength(a??"null","utf8");if(d>n.options.maxInputBytes)return i.push({path:"",keyword:"maxInputBytes",schemaPath:"#",message:`input is ${d} bytes; limit is ${n.options.maxInputBytes}`}),{valid:!1,errors:i,steps:0,truncated:!1};let u={options:n.options,errors:i,budget:{steps:0,exhausted:!1},activePairs:new Set,objectIds:new WeakMap,nextObjectId:{value:1}};return te(o,r,"",0,u),{valid:i.length===0,errors:i,steps:u.budget.steps,truncated:u.budget.exhausted||i.length>=n.options.maxValidationErrors}}})}function wn(e,t={}){if(!U(e)||e.type!=="object"||!U(e.properties))throw new et([{path:"#",keyword:"type",message:"tool input schema root must declare type object and a properties object"}]);return Yr(e,t)}function Ze(e,t,n,r){if(n>r.options.maxSchemaDepth){_(r,t,void 0,`schema depth exceeds ${r.options.maxSchemaDepth}`);return}if(typeof e!="boolean"&&!U(e)){_(r,t,void 0,"schema must be an object or boolean");return}if(!r.rawByPointer.has(t)){if(r.schemaNodes+=1,r.schemaNodes>r.options.maxSchemaNodes){_(r,t,void 0,`schema node count exceeds ${r.options.maxSchemaNodes}`);return}if(r.rawByPointer.set(t,e),typeof e!="boolean"){e.$anchor!==void 0&&(typeof e.$anchor!="string"||!/^[A-Za-z][A-Za-z0-9._:-]*$/u.test(e.$anchor)?_(r,t,"$anchor","$anchor must be a valid plain-name anchor"):r.anchors.has(e.$anchor)?_(r,t,"$anchor",`duplicate anchor ${e.$anchor}`):r.anchors.set(e.$anchor,t));for(let o of["$defs","properties","patternProperties"]){let i=e[o];if(i!==void 0){if(!U(i)){_(r,t,o,`${o} must be an object`);continue}for(let[s,a]of Object.entries(i))Ze(a,ne(t,o,s),n+1,r)}}for(let o of["items","contains","additionalProperties","not"])e[o]!==void 0&&Ze(e[o],ne(t,o),n+1,r);for(let o of["prefixItems","allOf","anyOf","oneOf"]){let i=e[o];if(i!==void 0){if(!Array.isArray(i)){_(r,t,o,`${o} must be an array of schemas`);continue}i.forEach((s,a)=>Ze(s,ne(t,o,String(a)),n+1,r))}}}}}function ce(e,t,n,r){let o=r.compiledByPointer.get(t);if(o)return o;if(typeof e!="boolean"&&!U(e))return;let i={id:r.nextNodeId++,schemaPath:Rn(t)};if(r.compiledByPointer.set(t,i),typeof e=="boolean")return i.boolean=e,i;if(eo(e,t,r),to(e,t,r),e.$schema!==void 0&&(t!==""||e.$schema!==_t&&e.$schema!==`${_t}#`)&&_(r,t,"$schema",t===""?`unsupported dialect ${String(e.$schema)}`:"$schema is only supported at the root"),e.$id!==void 0&&typeof e.$id!="string"&&_(r,t,"$id","$id must be a string"),e.$ref!==void 0)if(typeof e.$ref!="string")_(r,t,"$ref","$ref must be a string");else{r.references+=1,r.references>r.options.maxReferences&&_(r,t,"$ref",`reference count exceeds ${r.options.maxReferences}`);let s=co(e.$ref,t,r);if(s!==void 0){let a=r.rawByPointer.get(s);a===void 0?_(r,t,"$ref",`unresolved local reference ${e.$ref}`):i.ref=ce(a,s,n+1,r)}}if(i.types=no(e.type,t,r),e.enum!==void 0){let s=e.enum;!Array.isArray(s)||s.length===0?_(r,t,"enum","enum must be a non-empty array"):s.some((a,d)=>s.some((u,l)=>l<d&&Pe(a,u)))?_(r,t,"enum","enum values must be unique"):s.some(a=>Ct(a))?_(r,t,"enum","enum values must be JSON values"):i.enumValues=s}if(Object.prototype.hasOwnProperty.call(e,"const")&&(Ct(e.const)?_(r,t,"const","const must be a JSON value"):(i.hasConst=!0,i.constValue=e.const)),i.multipleOf=so(e.multipleOf,t,"multipleOf",r),i.maximum=$e(e.maximum,t,"maximum",r),i.exclusiveMaximum=$e(e.exclusiveMaximum,t,"exclusiveMaximum",r),i.minimum=$e(e.minimum,t,"minimum",r),i.exclusiveMinimum=$e(e.exclusiveMinimum,t,"exclusiveMinimum",r),i.maxLength=se(e.maxLength,t,"maxLength",r),i.minLength=se(e.minLength,t,"minLength",r),i.minItems=se(e.minItems,t,"minItems",r),i.maxItems=se(e.maxItems,t,"maxItems",r),i.minContains=se(e.minContains,t,"minContains",r),i.maxContains=se(e.maxContains,t,"maxContains",r),i.minProperties=se(e.minProperties,t,"minProperties",r),i.maxProperties=se(e.maxProperties,t,"maxProperties",r),ao(i,t,r),e.pattern!==void 0)if(typeof e.pattern!="string")_(r,t,"pattern","pattern must be a string");else{let s=kt(e.pattern,r.options.maxPatternLength);s?i.pattern={source:e.pattern,regex:s}:_(r,t,"pattern","pattern is invalid or outside the safe regex subset")}if(e.format!==void 0&&(typeof e.format!="string"?_(r,t,"format","format must be a string"):r.options.assertFormats&&!bn.has(e.format)?_(r,t,"format",`unsupported asserted format ${e.format}`):i.format=e.format),i.prefixItems=We(e.prefixItems,t,"prefixItems",n,r,!0),i.items=Qe(e.items,t,"items",n,r),i.contains=Qe(e.contains,t,"contains",n,r),(e.minContains!==void 0||e.maxContains!==void 0)&&e.contains===void 0&&_(r,t,"contains","minContains/maxContains require contains"),e.uniqueItems!==void 0&&(typeof e.uniqueItems!="boolean"?_(r,t,"uniqueItems","uniqueItems must be boolean"):i.uniqueItems=e.uniqueItems),i.properties=ro(e.properties,t,"properties",n,r),i.patternProperties=oo(e.patternProperties,t,n,r),i.additionalProperties=Qe(e.additionalProperties,t,"additionalProperties",n,r),i.required=vn(e.required,t,"required",r,!0),i.dependentRequired=io(e.dependentRequired,t,r),i.allOf=We(e.allOf,t,"allOf",n,r,!1),i.anyOf=We(e.anyOf,t,"anyOf",n,r,!1),i.oneOf=We(e.oneOf,t,"oneOf",n,r,!1),i.not=Qe(e.not,t,"not",n,r),U(e.$defs))for(let[s,a]of Object.entries(e.$defs))ce(a,ne(t,"$defs",s),n+1,r);return i}function eo(e,t,n){if(n.options.strictKeywords)for(let r of Object.keys(e))!Wr.has(r)&&!r.startsWith("x-")&&_(n,t,r,`unsupported keyword ${r}`)}function to(e,t,n){for(let r of["$comment","title","description"])e[r]!==void 0&&typeof e[r]!="string"&&_(n,t,r,`${r} must be a string`);for(let r of["deprecated","readOnly","writeOnly"])e[r]!==void 0&&typeof e[r]!="boolean"&&_(n,t,r,`${r} must be boolean`);e.examples!==void 0&&!Array.isArray(e.examples)&&_(n,t,"examples","examples must be an array")}function no(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"||!Qr.has(o))){_(n,t,"type","type must be a recognized type or non-empty unique type array");return}return new Set(r).size!==r.length&&_(n,t,"type","type array must not contain duplicates"),r}function Qe(e,t,n,r,o){if(e!==void 0)return ce(e,ne(t,n),r+1,o)}function We(e,t,n,r,o,i){if(e!==void 0){if(!Array.isArray(e)||!i&&e.length===0){_(o,t,n,`${n} must be ${i?"an array":"a non-empty array"} of schemas`);return}return e.map((s,a)=>ce(s,ne(t,n,String(a)),r+1,o)).filter(s=>!!s)}}function ro(e,t,n,r,o){if(e===void 0)return;if(!U(e)){_(o,t,n,`${n} must be an object of schemas`);return}let i=new Map;for(let[s,a]of Object.entries(e)){let d=ce(a,ne(t,n,s),r+1,o);d&&i.set(s,d)}return i}function oo(e,t,n,r){if(e===void 0)return;if(!U(e)){_(r,t,"patternProperties","patternProperties must be an object of schemas");return}let o=[];for(let[i,s]of Object.entries(e)){let a=kt(i,r.options.maxPatternLength);if(!a){_(r,t,"patternProperties",`pattern ${JSON.stringify(i)} is invalid or outside the safe regex subset`);continue}let d=ce(s,ne(t,"patternProperties",i),n+1,r);d&&o.push({pattern:{source:i,regex:a},schema:d})}return o}function io(e,t,n){if(e===void 0)return;if(!U(e)){_(n,t,"dependentRequired","dependentRequired must be an object");return}let r=new Map;for(let[o,i]of Object.entries(e)){let s=vn(i,ne(t,"dependentRequired",o),"dependentRequired",n,!0);s&&r.set(o,s)}return r}function vn(e,t,n,r,o){if(e!==void 0){if(!Array.isArray(e)||e.some(i=>typeof i!="string")){_(r,t,n,`${n} must be an array of strings`);return}return o&&new Set(e).size!==e.length&&_(r,t,n,`${n} values must be unique`),e}}function so(e,t,n,r){let o=$e(e,t,n,r);return o!==void 0&&o<=0&&_(r,t,n,`${n} must be greater than zero`),o!==void 0&&o>0?o:void 0}function $e(e,t,n,r){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)){_(r,t,n,`${n} must be a finite number`);return}return e}}function se(e,t,n,r){if(e!==void 0){if(!Number.isSafeInteger(e)||e<0){_(r,t,n,`${n} must be a non-negative safe integer`);return}return e}}function ao(e,t,n){for(let[r,o,i]of[[e.minLength,e.maxLength,"length"],[e.minItems,e.maxItems,"items"],[e.minContains,e.maxContains,"contains"],[e.minProperties,e.maxProperties,"properties"]])r!==void 0&&o!==void 0&&r>o&&_(n,t,i,`minimum ${i} exceeds maximum`)}function co(e,t,n){if(!e.startsWith("#")){_(n,t,"$ref","remote and file references are not supported");return}if(e==="#")return"";if(e.startsWith("#/")){let s=`/${e.slice(2).split("/").map(a=>a.replace(/~1/g,"/").replace(/~0/g,"~")).map(Cn).join("/")}`;return n.rawByPointer.has(s)||_(n,t,"$ref",`unresolved JSON Pointer ${e}`),s}let r=e.slice(1),o=n.anchors.get(r);return o===void 0&&_(n,t,"$ref",`unresolved anchor ${e}`),o}function te(e,t,n,r,o){if(!Pn(o)||o.errors.length>=o.options.maxValidationErrors)return;if(r>o.options.maxValidationDepth){E(o,n,"maxDepth",t,`validation depth exceeds ${o.options.maxValidationDepth}`);return}if(t.boolean!==void 0){t.boolean||E(o,n,"falseSchema",t,"is rejected by the false schema");return}let i=go(t,e,o);if(!o.activePairs.has(i)){o.activePairs.add(i);try{if(t.ref&&te(e,t.ref,n,r+1,o),t.enumValues&&!t.enumValues.some(s=>Pe(s,e))&&E(o,n,"enum",t,`expected one of ${t.enumValues.map(Tt).join(", ")} but got ${Pt(e)}`),t.hasConst&&!Pe(t.constValue,e)&&E(o,n,"const",t,`expected ${Tt(t.constValue)} but got ${Pt(e)}`),t.types&&!t.types.some(s=>yo(e,s))){let s=t.types.length===1?t.types[0]:`one of [${t.types.join(", ")}]`;E(o,n,"type",t,`expected type ${s} but got ${Pt(e)}`);return}lo(e,t,n,r,o),typeof e=="number"&&uo(e,t,n,o),typeof e=="string"&&po(e,t,n,o),Array.isArray(e)&&mo(e,t,n,r,o),U(e)&&fo(e,t,n,r,o)}finally{o.activePairs.delete(i)}}}function lo(e,t,n,r,o){for(let i of t.allOf??[])te(e,i,n,r+1,o);if(t.anyOf&&t.anyOf.filter(s=>Ye(e,s,n,r+1,o)).length===0&&E(o,n,"anyOf",t,"must match at least one anyOf branch"),t.oneOf){let i=t.oneOf.filter(s=>Ye(e,s,n,r+1,o)).length;i!==1&&E(o,n,"oneOf",t,`must match exactly one oneOf branch; matched ${i}`)}t.not&&Ye(e,t.not,n,r+1,o)&&E(o,n,"not",t,"must not match the disallowed schema")}function uo(e,t,n,r){t.multipleOf!==void 0&&!wo(e,t.multipleOf)&&E(r,n,"multipleOf",t,`must be a multiple of ${t.multipleOf}`),t.maximum!==void 0&&e>t.maximum&&E(r,n,"maximum",t,`must be <= ${t.maximum}`),t.exclusiveMaximum!==void 0&&e>=t.exclusiveMaximum&&E(r,n,"exclusiveMaximum",t,`must be < ${t.exclusiveMaximum}`),t.minimum!==void 0&&e<t.minimum&&E(r,n,"minimum",t,`must be >= ${t.minimum}`),t.exclusiveMinimum!==void 0&&e<=t.exclusiveMinimum&&E(r,n,"exclusiveMinimum",t,`must be > ${t.exclusiveMinimum}`)}function po(e,t,n,r){let o=[...e].length;if(t.minLength!==void 0&&o<t.minLength&&E(r,n,"minLength",t,`must contain at least ${t.minLength} Unicode code points`),t.maxLength!==void 0&&o>t.maxLength&&E(r,n,"maxLength",t,`must contain at most ${t.maxLength} Unicode code points`),t.pattern&&!t.pattern.regex.test(e)&&E(r,n,"pattern",t,`must match pattern ${JSON.stringify(t.pattern.source)}`),t.format&&r.options.assertFormats){let i=bn.get(t.format);i&&!i(e,r.options)&&E(r,n,"format",t,`must match format ${t.format}`)}}function mo(e,t,n,r,o){if(t.minItems!==void 0&&e.length<t.minItems&&E(o,n,"minItems",t,`must contain at least ${t.minItems} items`),t.maxItems!==void 0&&e.length>t.maxItems&&E(o,n,"maxItems",t,`must contain at most ${t.maxItems} items`),t.uniqueItems)e:for(let s=0;s<e.length;s+=1)for(let a=0;a<s;a+=1){if(!Pn(o))break e;if(Pe(e[s],e[a])){E(o,F(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&&te(e[a],s,F(n,String(a)),r+1,o)}),t.items)for(let s=i;s<e.length;s+=1)te(e[s],t.items,F(n,String(s)),r+1,o);if(t.contains){let s=0;for(let d=0;d<e.length;d+=1)Ye(e[d],t.contains,F(n,String(d)),r+1,o)&&(s+=1);let a=t.minContains??1;s<a&&E(o,n,"minContains",t,`contains matched ${s} items; minimum is ${a}`),t.maxContains!==void 0&&s>t.maxContains&&E(o,n,"maxContains",t,`contains matched ${s} items; maximum is ${t.maxContains}`)}}function fo(e,t,n,r,o){let i=Object.keys(e);t.minProperties!==void 0&&i.length<t.minProperties&&E(o,n,"minProperties",t,`must contain at least ${t.minProperties} properties`),t.maxProperties!==void 0&&i.length>t.maxProperties&&E(o,n,"maxProperties",t,`must contain at most ${t.maxProperties} properties`);for(let s of t.required??[])Object.prototype.hasOwnProperty.call(e,s)||E(o,F(n,s),"required",t,"is required");for(let[s,a]of t.dependentRequired??[])if(Object.prototype.hasOwnProperty.call(e,s))for(let d of a)Object.prototype.hasOwnProperty.call(e,d)||E(o,F(n,d),"dependentRequired",t,`is required when ${s} is present`);for(let s of i){let a=!1,d=t.properties?.get(s);d&&(a=!0,te(e[s],d,F(n,s),r+1,o));for(let u of t.patternProperties??[])u.pattern.regex.test(s)&&(a=!0,te(e[s],u.schema,F(n,s),r+1,o));!a&&t.additionalProperties&&te(e[s],t.additionalProperties,F(n,s),r+1,o)}}function Ye(e,t,n,r,o){let i={...o,errors:[],activePairs:new Set(o.activePairs)};return te(e,t,n,r,i),i.errors.length===0&&!i.budget.exhausted}function Pn(e){return e.budget.steps+=1,e.budget.steps<=e.options.maxValidationSteps?!0:(e.budget.exhausted||(e.budget.exhausted=!0,E(e,"","maxValidationSteps",{schemaPath:"#"},`validation steps exceed ${e.options.maxValidationSteps}`)),!1)}function E(e,t,n,r,o){e.errors.length>=e.options.maxValidationErrors||e.errors.push({path:t,keyword:n,schemaPath:r.schemaPath,message:o})}function go(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}:${Tt(t)}`}function yo(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 U(e);case"null":return e===null}}function Ct(e){let t=new WeakSet,n=(r,o)=>{if(r===null||typeof r=="string"||typeof r=="boolean")return;if(typeof r=="number")return Number.isFinite(r)?void 0:{path:o,message:"must be a finite JSON number"};if(typeof r!="object")return{path:o,message:`must be a JSON value, not ${typeof r}`};if(t.has(r))return{path:o,message:"must not contain cyclic references"};t.add(r);let i=Array.isArray(r)?r.entries():Object.entries(r);for(let[s,a]of i){let d=n(a,F(o,String(s)));if(d)return d}t.delete(r)};return n(e,"")}function kt(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 xn(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 _n(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 ho(e){let t=/^([^Tt ]+)[Tt ](.+)$/u.exec(e);return!!(t&&xn(t[1])&&_n(t[2]))}function gn(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(n=>n.length>0&&n.length<=63&&!n.startsWith("-")&&!n.endsWith("-")&&/^[\p{L}\p{N}-]+$/u.test(n))}function yn(e){try{return!!(new URL(e).protocol&&!/\s/u.test(e))}catch{return!1}}function hn(e){try{return new URL(e,"https://xeno.invalid/"),!/\s/u.test(e)}catch{return!1}}function bo(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 wo(e,t){let n=e/t;return Math.abs(n-Math.round(n))<=Number.EPSILON*Math.max(1,Math.abs(n))*8}function U(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(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)=>Pe(n,t[r]));if(U(e)&&U(t)){let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(o=>Object.prototype.hasOwnProperty.call(t,o)&&Pe(e[o],t[o]))}return!1}function F(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 ne(e,...t){return`${e}/${t.map(Cn).join("/")}`}function Cn(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function Rn(e){return e.length===0?"#":`#${e}`}function _(e,t,n,r){e.issues.length>=64||e.issues.push({path:Rn(t),...n?{keyword:n}:{},message:r})}function Pt(e){return e===null?"null":Array.isArray(e)?"array":typeof e=="number"?Number.isSafeInteger(e)?"integer":"number":typeof e}function Tt(e){try{let t=JSON.stringify(e);return t===void 0?String(e):t}catch{return String(e)}}var A=class extends Error{dialect;path;constructor(t,n,r){super(`Tool schema cannot be projected to ${t} at ${n}: ${r}`),this.name="ToolSchemaProjectionError",this.dialect=t,this.path=n}},Tn=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),vo=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function St(e,t){wn(e);let n=Et(e),r=n,o=kn(n);if(t==="xeno"||t==="google-json-schema")return{schema:n,dialect:t,canonicalSha256:o,projectedSha256:o,changes:[]};let i={dialect:t,root:r,pointers:new Map,anchors:new Map,changes:[],activeReferences:new Set};tt(r,"",i);let s=le(r,"#",i);if(!xe(s))throw new A(t,"#","provider tool root must remain an object schema");return Po(n,s,t),{schema:s,dialect:t,canonicalSha256:o,projectedSha256:kn(s),changes:i.changes}}function _e(e,t){return e.map(n=>{let r=St(n.input_schema,t);return{definition:{...n,input_schema:r.schema},projection:r}})}function le(e,t,n){if(typeof e=="boolean"){if(n.dialect!=="google")return e;if(e)return{};throw new A(n.dialect,t,"false schemas are not representable by this provider")}if(n.dialect==="google"&&Object.prototype.hasOwnProperty.call(e,"const")&&Array.isArray(e.enum)&&!e.enum.some(o=>Ne(o)===Ne(e.const)))throw new A(n.dialect,t,"empty const and enum intersection cannot be represented by the legacy dialect; use parametersJsonSchema");if(typeof e.$ref=="string"){let o=xo(e.$ref,t,n);if(n.activeReferences.has(e.$ref))throw new A(n.dialect,t,`recursive reference ${e.$ref} cannot be serialized safely`);let i=Object.fromEntries(Object.entries(e).filter(([a])=>a!=="$ref"&&!Tn.has(a)));if(Object.keys(i).length>0){if(n.dialect==="google")throw new A(n.dialect,t,"$ref siblings require an unsupported intersection");n.activeReferences.add(e.$ref);let a=le(o,`${t}/$ref`,n);n.activeReferences.delete(e.$ref);let d=le(i,t,n);return n.changes.push({path:t,keyword:"$ref",action:"transformed",reason:"inlined local reference with sibling intersection"}),{allOf:[a,d]}}n.activeReferences.add(e.$ref);let s=le(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(Tn.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"&&!vo.has(o)){if(o==="const"){if(i===null)throw new A(n.dialect,t,"null const cannot be represented by the provider schema dialect");if(typeof i!="string")throw new A(n.dialect,t,"non-string const cannot be represented by the legacy dialect; use parametersJsonSchema");r.enum=[Et(i)],n.changes.push({path:t,keyword:o,action:"transformed",reason:"Google wire schema represents const as a single-value enum"});continue}throw o==="prefixItems"?new A(n.dialect,t,"tuple prefixItems cannot preserve the provider structural contract"):new A(n.dialect,t,`assertion ${o} cannot be represented without weakening; use parametersJsonSchema`)}if(o==="type"&&n.dialect==="google"&&Array.isArray(i)){let s=i.filter(a=>a!=="null");if(s.length!==1||i.length!==2)throw new A(n.dialect,t,"type union cannot be represented without weakening structure");r.type=s[0],r.nullable=!0,n.changes.push({path:t,keyword:o,action:"transformed",reason:"nullable two-type union mapped to Google nullable"});continue}if(o==="enum"&&n.dialect==="google"&&Array.isArray(i)&&i.some(s=>s===null))throw new A(n.dialect,t,"null enum values cannot be represented by the provider schema dialect");if(o==="enum"&&n.dialect==="google"&&Array.isArray(i)&&i.some(s=>typeof s!="string"))throw new A(n.dialect,t,"non-string enum values cannot be represented by the legacy dialect; use parametersJsonSchema");if(!(o==="enum"&&n.dialect==="google"&&Object.prototype.hasOwnProperty.call(e,"const"))){if(o==="properties"||o==="patternProperties"||o==="$defs"){if(!xe(i))throw new A(n.dialect,t,`${o} must be an object`);let s={};for(let[a,d]of Object.entries(i))s[a]=le(d,`${t}/${o}/${At(a)}`,n);r[o]=s;continue}if(["items","contains","additionalProperties","not"].includes(o)){r[o]=le(i,`${t}/${o}`,n);continue}if(["prefixItems","allOf","anyOf","oneOf"].includes(o)){if(!Array.isArray(i))throw new A(n.dialect,t,`${o} must be an array`);r[o]=i.map((s,a)=>le(s,`${t}/${o}/${a}`,n));continue}r[o]=Et(i)}}if(n.dialect==="google"){let o=e.type!==void 0||e.properties!==void 0||e.items!==void 0,i=r.type!==void 0||r.properties!==void 0||r.items!==void 0;if(!o&&(e.oneOf!==void 0||e.allOf!==void 0||e.not!==void 0)||o&&!i)throw new A(n.dialect,t,"minimum structural contract cannot be represented")}return r}function Po(e,t,n){if(t.type!=="object"||!xe(t.properties))throw new A(n,"#","root object/properties contract changed");let r=Object.keys(e.properties).sort(),o=Object.keys(t.properties).sort();if(JSON.stringify(r)!==JSON.stringify(o))throw new A(n,"#","root property identity changed");let i=[...e.required??[]].sort(),s=Array.isArray(t.required)?[...t.required].sort():[];if(JSON.stringify(i)!==JSON.stringify(s))throw new A(n,"#","root required-property contract changed")}function tt(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(xe(o))for(let[i,s]of Object.entries(o))tt(s,`${t}/${r}/${At(i)}`,n)}for(let r of["items","contains","additionalProperties","not"]){let o=e[r];(typeof o=="boolean"||xe(o))&&tt(o,`${t}/${r}`,n)}for(let r of["prefixItems","allOf","anyOf","oneOf"]){let o=e[r];Array.isArray(o)&&o.forEach((i,s)=>tt(i,`${t}/${r}/${s}`,n))}}}function xo(e,t,n){if(!e.startsWith("#"))throw new A(n.dialect,t,"remote references are forbidden");if(e==="#")return n.root;if(e.startsWith("#/")){let r=e.slice(1).split("/").map(i=>i.replace(/~1/g,"/").replace(/~0/g,"~")).map(At).join("/"),o=n.pointers.get(r);if(o!==void 0)return o}else{let r=n.anchors.get(e.slice(1));if(r!==void 0)return r}throw new A(n.dialect,t,`unresolved reference ${e}`)}function kn(e){return(0,En.createHash)("sha256").update(Ne(e)).digest("hex")}function Ne(e){return Array.isArray(e)?`[${e.map(Ne).join(",")}]`:xe(e)?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Ne(e[t])}`).join(",")}}`:JSON.stringify(e)}function Et(e){return JSON.parse(JSON.stringify(e))}function At(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function xe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var An=require("node:crypto"),It=/^[a-zA-Z0-9_-]{1,64}$/,Sn=64;function _o(e){return(0,An.createHash)("sha256").update(e).digest("hex").slice(0,8)}function Co(e){return e.replace(/\./g,"__").replace(/[^a-zA-Z0-9_-]/g,"_")}function De(e){let t=new Map,n=new Map,r=[...new Set(e)];for(let o of r)It.test(o)&&(t.set(o,o),n.set(o,o));for(let o of[...r].sort()){if(t.has(o))continue;let i=Co(o);if(i.length>Sn||n.has(i)||i.length===0){let s=`_${_o(o)}`;i=`${i.slice(0,Sn-s.length)}${s}`}t.set(o,i),n.set(i,o)}return{encode:o=>t.get(o)??o,decode:o=>n.get(o)??o}}function In(e,t,n){if(!(e instanceof Error))return e;let r=[...new Set(t)].map(i=>[n.encode(i),i]).filter(([i,s])=>i!==s).sort((i,s)=>s[0].length-i[0].length);if(r.length===0)return e;let o=i=>r.reduce((s,[a,d])=>s.replace(new RegExp(`(?<![A-Za-z0-9_-])${a.replace(/[-]/g,"-")}(?![A-Za-z0-9_-])`,"g"),d),i);for(let i of["message","stack"]){let s=e[i];if(typeof s!="string")continue;let a=o(s);a!==s&&Object.defineProperty(e,i,{value:a,writable:!0,configurable:!0,enumerable:!1})}return e}var Lt=require("node:crypto");async function Ln(e,t,n=3e4){t?.throwIfAborted();let r=new AbortController,o=setTimeout(()=>r.abort(new DOMException("Operation acknowledgement timed out.","TimeoutError")),n),i=t?AbortSignal.any([t,r.signal]):r.signal,s;try{let a=await new Promise((d,u)=>{s=()=>u(i.reason),i.addEventListener("abort",s,{once:!0}),Promise.resolve().then(()=>(i.throwIfAborted(),e(i))).then(d,u)});return i.throwIfAborted(),a}finally{s&&i.removeEventListener("abort",s),clearTimeout(o)}}var T=class extends Error{constructor(n,r){super(r);this.code=n;this.name="QuotaError"}code;retryable=!1},nt=class extends Error{constructor(n,r,o){let i=o instanceof b?` (${o.category}${o.statusCode?` HTTP ${o.statusCode}`:""})`:"";super(n==="prepare"?`Quota preparation failed before any reservation${i}.`:`Quota ${n} did not acknowledge; reconcile reservation ${r} before retrying.`,{cause:o});this.phase=n;this.reservationId=r;this.name="QuotaAcknowledgementError"}phase;reservationId;code="ACKNOWLEDGEMENT_FAILED";retryable=!1};function Mn(e){return e instanceof Error&&(e.name==="QuotaError"||e.name==="QuotaAcknowledgementError")&&"retryable"in e&&e.retryable===!1&&"code"in e&&typeof e.code=="string"}function S(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<0)throw new T("INVALID","Quota counters must be non-negative safe integers.");return e}function B(e){if(typeof e!="string"||!e.trim()||e.length>512)throw new T("INVALID","Invalid quota identity.");return e}function G(e){let t=n=>({id:B(n?.id),generation:B(n?.generation)});if(!e||e.agent&&!e.team)throw new T("INVALID","A child quota scope requires its complete ancestry.");return{workspace:t(e.workspace),...e.team?{team:t(e.team)}:{},...e.agent?{agent:t(e.agent)}:{},...e.goal!==void 0?{goal:t(e.goal)}:{}}}function V(e){return JSON.stringify(G(e))}function Ce(e){let t=G(e),n=[{workspace:t.workspace},...t.team?[{workspace:t.workspace,team:t.team}]:[],...t.agent?[{workspace:t.workspace,team:t.team,agent:t.agent}]:[]];return t.goal?n.flatMap(r=>[r,{...r,goal:t.goal}]):n}var On=Symbol.for("@xenosystem/agent-sdk/quota-provider-layers-v1");function Ro(e,t,n,r={}){let o=G(n),i=e[On],s=i?.provider??e,a=[...i?.layers??[],{authority:t,scope:o,soft:r.enforcement==="soft"}];async function d(l,c,m,p,f,y){if(f?.throwIfAborted(),!s.prepareQuotaRequest)throw new T("UNSUPPORTED","This provider cannot guarantee per-request token bounds.");let h=B(y?.attemptId),P=(0,Lt.createHash)("sha256").update(JSON.stringify([s.id,l,c,m,y?.systemPrompt??""])).digest("hex"),v=a.map(k=>({...k,id:(0,Lt.createHash)("sha256").update(JSON.stringify([V(k.scope),s.id,h])).digest("hex"),reserved:!1,dispatchStarted:!1})),x=async(k,M,X,D=f,H=3e4)=>{try{return await Ln(X,D,H)}catch(W){throw Mn(W)?W:M==="prepare"&&W instanceof b&&W.category==="unsupported_capability"?new T("UNSUPPORTED","This provider cannot enforce the requested per-request token ceiling."):new nt(M,k,W)}},w=y?.quotaRemainingTokens??null;for(let k of v){let M=k.authority.remainingTokens?await x(k.id,"prepare",()=>k.authority.remainingTokens(k.scope)):null;M!==null&&(w=w===null?M:Math.min(w,M))}let R=w===null?y:{...y,systemPrompt:y?.systemPrompt??"",quotaRemainingTokens:w},I=await x(v[0].id,"prepare",k=>s.prepareQuotaRequest(l,structuredClone(c),structuredClone(m),R,k),f,12e4),fe=S(S(I.inputTokensUpperBound)+S(I.outputTokensUpperBound)),Se=I.basis==="estimated";if(I.basis!=="provider-enforced"&&!(a.every(k=>k.soft)&&Se))throw new T("UNSUPPORTED","Estimated token bounds cannot enforce a hard quota.");try{for(let k of v)await x(k.id,"reserve",()=>k.authority.reserve({id:k.id,scope:k.scope,requestHash:P,reservedTokens:fe,...Se?{basis:"estimated"}:{}})),k.reserved=!0;f?.throwIfAborted();for(let k of v)k.dispatchStarted=!0,await x(k.id,"dispatch",()=>k.authority.dispatch(k.id));f?.throwIfAborted()}catch(k){for(let M of v.filter(X=>X.reserved&&!X.dispatchStarted).reverse())await x(M.id,"void",()=>M.authority.void(M.id),new AbortController().signal);throw k}let ge=await I.execute(p,f);if(f?.throwIfAborted(),ge.usageReported){let k=S(ge.inputTokens),M=S(ge.outputTokens);if(!Se&&k>I.inputTokensUpperBound||M>I.outputTokensUpperBound)throw new T("CORRUPT","Provider exceeded its guaranteed token bound; reservation requires reconciliation.");let X;for(let D of v)try{await x(D.id,"settle",()=>D.authority.settle(D.id,S(k+M)))}catch(H){X??=H}if(X)throw X}return ge}let u={id:s.id,...s.model?{model:s.model}:{},...s.capabilities?{capabilities:s.capabilities}:{},complete:d,completeLocal:d};return Object.defineProperty(u,On,{value:{provider:s,layers:a}}),u}var To={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 qn(e){let t=e.kind==="anthropic"?"https://api.anthropic.com":e.kind==="google"?"https://generativelanguage.googleapis.com":e.kind==="openai-responses"?"https://api.openai.com":null;if(!e.baseURL&&!t)throw new b("Generic OpenAI-compatible providers require baseURL",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let n=de(e.baseURL??t,{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname});return n.pathname=n.pathname.replace(/\/$/,""),n}function ae(e,t){let n=new URL(e.toString());return n.pathname=`${n.pathname.replace(/\/$/,"")}/${t.replace(/^\//,"")}`,n}function Ot(e){let t=e.authentication??{type:"bearer"};if(t.type==="none"||!e.apiKey)return{};if(t.type==="bearer")return{authorization:`Bearer ${e.apiKey}`};let n=t.header.trim().toLowerCase(),r=new Set(["host","content-length","connection","transfer-encoding","cookie","set-cookie","proxy-authorization"]);if(!/^[a-z0-9-]{1,80}$/.test(n)||r.has(n))throw new b("Generic provider authentication header is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let o=t.prefix??"";if(/[\r\n]/.test(o))throw new b("Generic provider authentication prefix is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});return{[n]:`${o}${e.apiKey}`}}function ko(e){let t;if(e.kind==="openai-compatible"){if(!e.capabilityProfile)throw new b("Generic OpenAI-compatible providers require an explicit capabilityProfile",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"});t={...e.capabilityProfile};for(let n of["structuredOutput","promptCaching"])if(t[n])throw j("direct-openai-compatible",n);if(t.customToolGrammarsGbnfStreaming&&!t.customToolGrammarsGbnf)throw j("direct-openai-compatible","streaming custom tools without GBNF support");if(t.streaming&&t.customToolGrammarsGbnf&&!t.customToolGrammarsGbnfStreaming)throw j("direct-openai-compatible","streamed grammar-constrained tools");if(!!e.streaming!=!!t.streaming)throw new b("Generic endpoint streaming config must match capabilityProfile.streaming",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}else t={...To[e.kind],streaming:!!e.streaming,reasoningMetadata:e.kind==="anthropic"&&!!e.streaming};return{...t,vision:t.imageInput}}function je(e,t){return{providerId:t,endpointPolicy:{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},limits:e.transportLimits}}function jn(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 Ue(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 Un(e){return e.filter(t=>t?.type==="image_url")}function Bn(e){return e.some(t=>Array.isArray(t.content)&&t.content.some(n=>n.type==="image_url"||n.type==="tool_result"&&Ue(n).length>0))}function $n(e){let t=jn(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(n=>{if(n.type==="image_url")return[$n(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=Ue(n),o=[{type:"text",text:Ie(n.content)}];return o.push(...r.map($n)),[{type:"tool_result",tool_use_id:n.tool_use_id,content:o,is_error:n.is_error}]})}))}function So(e){return{type:"input_image",image_url:e.image_url.url,detail:e.image_url.detail??"auto"}}function Ao(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=[...Un(n.content),...n.content.flatMap(i=>i.type==="tool_result"?Ue(i):[])];(r||o.length)&&t.push({role:n.role,content:[...r?[{type:"input_text",text:r}]:[],...o.map(So)]});for(let i of n.content)i.type==="tool_use"?t.push({type:"function_call",call_id:i.id,name:i.name,arguments:JSON.stringify(i.input)}):i.type==="tool_result"&&t.push({type:"function_call_output",call_id:i.tool_use_id,output:Ie(i.content)})}return t}function Nn(e){let t=jn(e.image_url.url);return t?{inlineData:{mimeType:t.mediaType,data:t.data}}:{fileData:{fileUri:e.image_url.url}}}function Io(e){let t=new Map;for(let n of e)if(Array.isArray(n.content))for(let r of n.content)r.type==="tool_use"&&t.set(r.id,r.name);return e.map(n=>typeof n.content=="string"?{role:n.role==="assistant"?"model":"user",parts:[{text:n.content}]}:{role:n.role==="assistant"?"model":"user",parts:n.content.flatMap(r=>{if(r.type==="image_url")return[Nn(r)];if(r.type==="text")return[{text:r.text}];if(r.type==="tool_use")return[{functionCall:{id:r.id,name:r.name,args:r.input},...r.provider_metadata?.thoughtSignature?{thoughtSignature:r.provider_metadata.thoughtSignature}:{}}];let o=Ie(r.content);return[{functionResponse:{id:r.tool_use_id,name:t.get(r.tool_use_id)??"unknown_tool",response:r.is_error?{error:o}:{result:o}}},...Ue(r).map(Nn)]})})}function Xn(e,t,n=!1){let r=t?[{role:"system",content:t}]:[];for(let o of e){if(typeof o.content=="string"){r.push({role:o.role,content:o.content});continue}let i=o.content.filter(d=>d.type==="text").map(d=>d.text).join(`
9
- `),s=o.content.filter(d=>d.type==="tool_use").map(d=>{let u=d.provider_metadata?.customInputField;return n&&typeof u=="string"&&typeof d.input[u]=="string"?{id:d.id,type:"custom",custom:{name:d.name,input:d.input[u]}}:{id:d.id,type:"function",function:{name:d.name,arguments:JSON.stringify(d.input)}}});(i||s.length)&&r.push({role:o.role,content:i||null,...s.length?{tool_calls:s}:{}});for(let d of o.content)d.type==="tool_result"&&r.push({role:"tool",tool_call_id:d.tool_use_id,content:Ie(d.content)});let a=[...Un(o.content),...o.content.flatMap(d=>d.type==="tool_result"?Ue(d):[])];a.length&&r.push({role:"user",content:a.map(d=>({type:"image_url",image_url:{url:d.image_url.url,detail:d.image_url.detail??"auto"}}))})}return r}function Dn(e,t,n,r,o,i,s=!1,a=!1,d,u,l){return{model:e,messages:Xn(t,r?.systemPrompt,s),tools:n.length>0?n.map(c=>Oo(c,s)):void 0,...r?.toolChoice!==void 0?{tool_choice:Lo(r.toolChoice,n,s)}:{},parallel_tool_calls:a,max_tokens:o,...l?.temperature!==void 0?{temperature:l.temperature}:{},...l?.topP!==void 0?{top_p:l.topP}:{},...l?.seed!==void 0?{seed:l.seed}:{},...i!==void 0||d!==void 0||u!==void 0?{xeno:{...i!==void 0?{max_prompt_tokens:i}:{},...d!==void 0?{enable_thinking:d}:{},...u!==void 0?{tool_format:u}:{}}}:{}}}function Lo(e,t,n){if(typeof e=="string"){if(!["auto","none","required"].includes(e)||e==="required"&&t.length===0)throw g("direct-openai-compatible","invalid tool choice");return e}let r=e&&t.find(i=>i.name===e.name);if(!r)throw g("direct-openai-compatible","named tool choice must identify a declared tool");let o=n&&r.grammar?"custom":"function";return{type:o,[o]:{name:r.name}}}function Oo(e,t){if(t&&e.grammar){let n=e.grammar,r=e.input_schema.properties[n.inputField];if(n.syntax!=="gbnf"||typeof n.definition!="string"||!n.definition.trim()||Buffer.byteLength(n.definition)>64*1024||n.definition.includes("\0")||Object.keys(e.input_schema.properties).length!==1||r?.type!=="string"||!e.input_schema.required?.includes(n.inputField)||e.input_schema.required.some(o=>o!==n.inputField))throw g("direct-openai-compatible",`tool ${e.name} has an invalid constrained-string contract`);return{type:"custom",custom:{name:e.name,description:e.description,format:{type:"grammar",syntax:"gbnf",definition:n.definition}}}}return{type:"function",function:{name:e.name,description:e.description,parameters:e.input_schema}}}function Jn(e,t,n,r,o){let i=t.find(s=>s.name===r)?.grammar?.inputField;if(!i)throw g(e,`custom tool call names ${r}, which was not sent as a grammar tool`);if(typeof o!="string")throw g(e,"custom tool call input must be text");return{type:"tool_use",id:n,name:r,input:{[i]:o},provider_metadata:{customInputField:i}}}function Vn(e,t,n=!0){let r=new Set;for(let o of t)if(!(!n&&(o.id===void 0||o.id===""))){if(typeof o.id!="string"||o.id.length===0)throw g(e,"tool call is missing id");if(r.has(o.id))throw g(e,`duplicate tool call id ${o.id}`);r.add(o.id)}}function Mo(e){return e.map(t=>({name:t.name,description:t.description,parametersJsonSchema:t.input_schema}))}function Be(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 ot(e,t,n){return{content:e,stopReason:t,...Be(n)}}function re(e,t,n){if(t&&typeof t=="object"&&!Array.isArray(t))return t;if(typeof t!="string")throw g(e,`${n} arguments must be JSON`);try{let r=JSON.parse(t||"{}");if(!r||typeof r!="object"||Array.isArray(r))throw new Error("arguments are not an object");return r}catch(r){throw g(e,`${n} contains malformed tool arguments`,r)}}function $o(e,t){if(!Array.isArray(t.content))throw g(e,"content must be an array");let n=t.content.flatMap(o=>{if(o.type==="text"&&typeof o.text=="string")return[{type:"text",text:o.text}];if(o.type==="tool_use"){if(!o.id||!o.name)throw g(e,"tool_use is missing id or name");return[{type:"tool_use",id:String(o.id),name:String(o.name),input:re(e,o.input??{},"tool_use")}]}return[]}),r=t.stop_reason==="tool_use"?"tool_use":t.stop_reason==="max_tokens"?"max_tokens":"end_turn";return ot(n,r,t.usage??{})}function No(e,t){if(!Array.isArray(t.output))throw g(e,"output must be an array");let n=[];for(let i of t.output)if(i.type==="message"){if(!Array.isArray(i.content))throw g(e,"message content must be an array");for(let s of i.content)s.type==="output_text"&&typeof s.text=="string"&&n.push({type:"text",text:s.text})}else if(i.type==="function_call"){if(!i.call_id&&!i.id)throw g(e,"function_call is missing an id");if(!i.name)throw g(e,"function_call is missing a name");n.push({type:"tool_use",id:String(i.call_id??i.id),name:String(i.name),input:re(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 ot(n,r?"tool_use":o?"max_tokens":"end_turn",t.usage??{})}function Do(e,t){if(!Array.isArray(t.candidates)||t.candidates.length===0){let s=t.promptFeedback?.blockReason;throw s?new b(`Provider safety policy refused the request: ${String(s)}`,{providerId:e,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):g(e,"candidates must contain at least one item")}let n=t.candidates[0]??{};if(!Array.isArray(n.content?.parts))throw g(e,"candidate parts must be an array");let r=n.content.parts.flatMap((s,a)=>{if(typeof s.text=="string")return[{type:"text",text:s.text}];if(s.functionCall){let d=s.functionCall;if(!d.name)throw g(e,"functionCall is missing a name");return[{type:"tool_use",id:String(d.id??`gemini-${a}-${(0,rt.randomUUID)().slice(0,8)}`),name:String(d.name),input:re(e,d.args??{},"functionCall"),...s.thoughtSignature?{provider_metadata:{thoughtSignature:s.thoughtSignature}}:{}}]}return[]}),o=r.some(s=>s.type==="tool_use"),i=String(n.finishReason??"").includes("MAX_TOKENS");return ot(r,o?"tool_use":i?"max_tokens":"end_turn",t.usageMetadata??{})}function zn(e,t,n=[],r=!1){if(!Array.isArray(t.choices)||t.choices.length===0)throw g(e,"choices must contain an item");let o=t.choices[0]??{},i=o.message;if(!i||typeof i!="object")throw g(e,"choice message is missing");if(i.tool_calls!==void 0&&i.tool_calls!==null&&!Array.isArray(i.tool_calls))throw g(e,"tool_calls must be an array");if(Array.isArray(i.tool_calls)&&i.tool_calls.some(u=>!u||typeof u!="object"))throw g(e,"tool_calls must contain objects");if(o.finish_reason==="error")throw g(e,"runtime reported generation failure");if(i.reasoning_content!==void 0&&i.reasoning_content!==null&&typeof i.reasoning_content!="string")throw g(e,"reasoning_content must be text");let s=[];typeof i.content=="string"&&i.content&&s.push({type:"text",text:i.content});let a=o.finish_reason==="length"||i.tool_calls?.some(u=>u.xeno_grammar?.complete===!1);if(Array.isArray(i.tool_calls)&&Vn(e,i.tool_calls,!a),Array.isArray(i.tool_calls)){let u=[];for(let l of i.tool_calls){if(l.xeno_grammar!==void 0&&typeof l.xeno_grammar?.complete!="boolean")throw g(e,"grammar completion must be a boolean");if(l.type!==void 0&&l.type!=="function"&&l.type!=="custom")throw g(e,"unknown tool call kind");if(l.type==="custom"&&!r)throw g(e,"runtime returned an unnegotiated custom tool call");if(!a){if(l.type==="custom"){if(typeof l.id!="string"||!l.id||typeof l.custom?.name!="string"||!l.custom.name)throw g(e,"custom tool call is missing id or name");u.push(Jn(e,n,l.id,l.custom.name,l.custom.input));continue}if(typeof l.id!="string"||!l.id||typeof l.function?.name!="string"||!l.function.name)throw g(e,"tool call is missing id or name");if(r&&n.find(c=>c.name===l.function.name)?.grammar)throw g(e,"grammar tool returned an unnegotiated function call");u.push({type:"tool_use",id:String(l.id),name:String(l.function.name),input:re(e,l.function.arguments??"{}","tool call")})}}s.push(...u)}let d=a?"max_tokens":s.some(u=>u.type==="tool_use")?"tool_use":"end_turn";return{...ot(s,d,t.usage??{}),...typeof i.reasoning_content=="string"?{reasoningContent:i.reasoning_content}:{}}}async function C(e,t){try{await e?.onEvent?.(t)}catch{}}async function Hn(e,t,n){await C(n,{type:"message.started"}),e.reasoningContent&&await C(n,{type:"reasoning.delta",text:e.reasoningContent});let r=0;for(let o of e.content)o.type==="text"?(t?.(o.text),await C(n,{type:"text.delta",text:o.text})):o.type==="tool_use"&&(await C(n,{type:"tool_call.started",index:r,toolCallId:o.id,name:o.name}),await C(n,{type:"tool_call.completed",index:r,toolCallId:o.id,name:o.name,input:o.input}),r+=1);await C(n,{type:"usage.updated",inputTokens:e.inputTokens,outputTokens:e.outputTokens}),await C(n,{type:"message.completed",stopReason:e.stopReason})}function it(){return{content:[],inputTokens:0,outputTokens:0,usageReported:!1,stopReason:"end_turn",terminal:!1}}function qe(e,t){if(!t.terminal)throw g(e,"stream ended without a terminal event");return{content:t.content,stopReason:t.stopReason,usageReported:t.usageReported,inputTokens:t.inputTokens,outputTokens:t.outputTokens,...t.reasoningContent!==void 0?{reasoningContent:t.reasoningContent}:{}}}function st(e,t){try{let n=JSON.parse(t.data);if(!n||typeof n!="object"||Array.isArray(n))throw new Error("frame is not an object");return n}catch(n){throw g(e,`invalid stream JSON for ${t.event}`,n)}}async function qo(e){let t=it(),n=new Map;return await Me(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},je(e.config,e.providerId),async r=>{let o=st(e.providerId,r),i=String(o.type??r.event);if(i==="message_start"){let s=Be(o.message?.usage);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),await C(e.context,{type:"message.started",providerMessageId:o.message?.id})}else if(i==="content_block_start"){let s=Number(o.index??0),a=o.content_block??{};if(a.type==="tool_use"){let d={index:s,id:String(a.id),name:String(a.name),arguments:""};n.set(s,d),await C(e.context,{type:"tool_call.started",index:s,toolCallId:d.id,name:d.name})}else if(a.type==="text"&&a.text){let d=String(a.text);t.content.push({type:"text",text:d}),e.onText?.(d),await C(e.context,{type:"text.delta",text:d})}}else if(i==="content_block_delta"){let s=o.delta??{};if(s.type==="text_delta"){let a=String(s.text??"");if(a){let d=t.content.at(-1);d?.type==="text"?d.text+=a:t.content.push({type:"text",text:a}),e.onText?.(a),await C(e.context,{type:"text.delta",text:a})}}else if(s.type==="thinking_delta")await C(e.context,{type:"reasoning.delta",text:String(s.thinking??"")});else if(s.type==="input_json_delta"){let a=Number(o.index??0),d=n.get(a);if(!d)throw g(e.providerId,"tool argument delta arrived before tool start");let u=String(s.partial_json??"");d.arguments+=u,await C(e.context,{type:"tool_call.arguments.delta",index:a,toolCallId:d.id,delta:u})}}else if(i==="content_block_stop"){let s=Number(o.index??0),a=n.get(s);if(a){let d=re(e.providerId,a.arguments||"{}","streamed tool call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:d}),await C(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:d})}}else if(i==="message_delta"){t.outputTokens=Number(o.usage?.output_tokens??t.outputTokens);let s=o.delta?.stop_reason;t.stopReason=s==="tool_use"?"tool_use":s==="max_tokens"?"max_tokens":"end_turn",await C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}else if(i==="message_stop")t.terminal=!0,await C(e.context,{type:"message.completed",stopReason:t.stopReason});else if(i==="error")throw ee({providerId:e.providerId,error:o.error??o,outputSeen:t.content.length>0||n.size>0})}),qe(e.providerId,t)}async function jo(e){let t=it(),n=new Map;return await Me(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},je(e.config,e.providerId),async r=>{if(r.data==="[DONE]")return;let o=st(e.providerId,r),i=String(o.type??r.event);if(i==="response.created")await C(e.context,{type:"message.started",providerMessageId:o.response?.id});else if(i==="response.output_text.delta"){let s=String(o.delta??""),a=t.content.at(-1);a?.type==="text"?a.text+=s:t.content.push({type:"text",text:s}),e.onText?.(s),await C(e.context,{type:"text.delta",text:s})}else if(i==="response.output_item.added"&&o.item?.type==="function_call"){let s=Number(o.output_index??n.size),a={index:s,id:String(o.item.call_id??o.item.id),name:String(o.item.name),arguments:String(o.item.arguments??"")};n.set(s,a),await C(e.context,{type:"tool_call.started",index:s,toolCallId:a.id,name:a.name})}else if(i==="response.function_call_arguments.delta"){let s=Number(o.output_index??0),a=n.get(s);if(!a)throw g(e.providerId,"tool argument delta arrived before tool start");let d=String(o.delta??"");a.arguments+=d,await C(e.context,{type:"tool_call.arguments.delta",index:s,toolCallId:a.id,delta:d})}else if(i==="response.output_item.done"&&o.item?.type==="function_call"){let s=Number(o.output_index??0),a=n.get(s)??{index:s,id:String(o.item.call_id??o.item.id),name:String(o.item.name),arguments:""},d=String(o.item.arguments??a.arguments??"{}"),u=re(e.providerId,d,"streamed function call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:u}),t.stopReason="tool_use",await C(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:u})}else if(i==="response.completed"||i==="response.incomplete"){let s=o.response??{},a=Be(s.usage??{});t.inputTokens=a.inputTokens,a.usageReported&&(t.usageReported=!0),t.outputTokens=a.outputTokens,i==="response.incomplete"&&(t.stopReason="max_tokens"),t.terminal=!0,await C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens}),await C(e.context,{type:"message.completed",stopReason:t.stopReason})}else if(i==="response.failed"||i==="error")throw ee({providerId:e.providerId,error:o.response?.error??o.error??o,outputSeen:t.content.length>0||n.size>0})}),qe(e.providerId,t)}async function Uo(e){let t=it(),n=new Map,r=!1;if(await C(e.context,{type:"message.started"}),await Me(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0,stream_options:{include_usage:!0}}),signal:e.signal},je(e.config,e.providerId),async a=>{if(a.data==="[DONE]"){t.terminal=!0;return}let d=st(e.providerId,a);if(d.error!==void 0&&d.error!==null)throw ee({providerId:e.providerId,error:d.error,outputSeen:t.content.length>0||n.size>0});if(d.usage){let u=Be(d.usage);t.inputTokens=u.inputTokens,u.usageReported&&(t.usageReported=!0),t.outputTokens=u.outputTokens,await C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}for(let u of d.choices??[]){let l=u.delta??{};if(l.reasoning_content!==void 0&&l.reasoning_content!==null){if(typeof l.reasoning_content!="string")throw g(e.providerId,"streamed reasoning_content must be text");t.reasoningContent=(t.reasoningContent??"")+l.reasoning_content,l.reasoning_content&&await C(e.context,{type:"reasoning.delta",text:l.reasoning_content})}if(l.tool_calls!==void 0&&l.tool_calls!==null&&!Array.isArray(l.tool_calls))throw g(e.providerId,"streamed tool_calls must be an array");if(typeof l.content=="string"&&l.content){let c=t.content.at(-1);c?.type==="text"?c.text+=l.content:t.content.push({type:"text",text:l.content}),e.onText?.(l.content),await C(e.context,{type:"text.delta",text:l.content})}for(let c of l.tool_calls??[]){if(!c||typeof c!="object")throw g(e.providerId,"tool delta must be an object");let m=Number(c.index??0);if(!Number.isSafeInteger(m)||m<0)throw g(e.providerId,"tool index must be a nonnegative integer");let p=n.get(m);if(p||(p={index:m,id:String(c.id??""),name:"",arguments:""},n.set(m,p)),c.id!==void 0){if(typeof c.id!="string"||!c.id||p.id&&p.id!==c.id)throw g(e.providerId,"streamed tool id is missing or changed");p.id=c.id}let f=c.type??p.kind??(c.custom?"custom":"function");if(f!=="function"&&f!=="custom")throw g(e.providerId,"unknown streamed tool kind");if(p.kind&&p.kind!==f)throw g(e.providerId,"streamed tool changed kind");if(f==="custom"&&!e.customGrammars)throw g(e.providerId,"runtime returned an unnegotiated custom tool delta");if(p.kind=f,c.xeno_grammar!==void 0&&typeof c.xeno_grammar?.complete!="boolean")throw g(e.providerId,"grammar completion must be a boolean");c.xeno_grammar?.complete===!1&&(p.grammarIncomplete=!0),c.function?.name&&(p.name+=String(c.function.name)),c.custom?.name&&(p.name+=String(c.custom.name));let y=f==="custom"?c.custom?.input:c.function?.arguments;if(y!==void 0&&typeof y!="string")throw g(e.providerId,"tool delta input must be text");let h=y??"";p.arguments+=h,p.id&&p.name&&!p.started&&(await C(e.context,{type:"tool_call.started",index:m,toolCallId:p.id,name:p.name}),p.started=!0),p.started&&p.arguments.length>(p.argumentsEmitted??0)&&(await C(e.context,{type:"tool_call.arguments.delta",index:m,toolCallId:p.id,delta:p.arguments.slice(p.argumentsEmitted??0)}),p.argumentsEmitted=p.arguments.length)}if(u.finish_reason){if(u.finish_reason==="error")throw g(e.providerId,"runtime reported generation failure");r=!0,t.stopReason=u.finish_reason==="length"?"max_tokens":n.size?"tool_use":"end_turn"}}}),t.terminal||qe(e.providerId,t),n.size&&!r)throw g(e.providerId,"tool stream has no finish reason");let o=t.stopReason==="max_tokens"||[...n.values()].some(a=>a.grammarIncomplete);o&&(t.stopReason="max_tokens");let i=[...n.values()].sort((a,d)=>a.index-d.index);Vn(e.providerId,i,!o);let s=[];for(let a of i){if(o)continue;if(!a.name||!a.id)throw g(e.providerId,"streamed tool is missing id or name");if(a.kind!=="custom"&&e.customGrammars&&e.sentTools?.find(u=>u.name===a.name)?.grammar)throw g(e.providerId,"grammar tool returned an unnegotiated function delta");let d=a.kind==="custom"?Jn(e.providerId,e.sentTools??[],a.id,a.name,a.arguments):{type:"tool_use",id:a.id,name:a.name,input:re(e.providerId,a.arguments||"{}","streamed tool call")};if(d.type!=="tool_use")throw g(e.providerId,"invalid custom tool block");s.push({tool:a,block:d})}for(let{tool:a,block:d}of s)t.content.push(d),await C(e.context,{type:"tool_call.completed",index:a.index,toolCallId:a.id,name:a.name,input:d.input});return await C(e.context,{type:"message.completed",stopReason:t.stopReason}),qe(e.providerId,t)}async function Bo(e){let t=it(),n=0;return await C(e.context,{type:"message.started"}),await Me(e.url,{method:"POST",headers:e.headers,body:JSON.stringify(e.body),signal:e.signal},je(e.config,e.providerId),async r=>{let o=st(e.providerId,r);if(o.error!==void 0&&o.error!==null)throw ee({providerId:e.providerId,error:o.error,outputSeen:t.content.length>0});if(o.usageMetadata){let s=Be(o.usageMetadata);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),t.outputTokens=s.outputTokens,await C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}let i=o.candidates?.[0];for(let s of i?.content?.parts??[])if(typeof s.text=="string"){let a=t.content.at(-1);a?.type==="text"?a.text+=s.text:t.content.push({type:"text",text:s.text}),e.onText?.(s.text),await C(e.context,{type:"text.delta",text:s.text})}else if(s.functionCall){let a=s.functionCall,d=String(a.id??`gemini-${n}-${(0,rt.randomUUID)().slice(0,8)}`),u=String(a.name??""),l=re(e.providerId,a.args??{},"streamed function call");await C(e.context,{type:"tool_call.started",index:n,toolCallId:d,name:u}),t.content.push({type:"tool_use",id:d,name:u,input:l,...s.thoughtSignature?{provider_metadata:{thoughtSignature:s.thoughtSignature}}:{}}),await C(e.context,{type:"tool_call.completed",index:n,toolCallId:d,name:u,input:l}),n+=1}i?.finishReason&&(t.stopReason=String(i.finishReason).includes("MAX_TOKENS")?"max_tokens":n?"tool_use":"end_turn",t.terminal=!0,await C(e.context,{type:"message.completed",stopReason:t.stopReason}))}),qe(e.providerId,t)}function Fn(e){return e instanceof b?{type:"provider.error",code:e.code,category:e.category,retryable:e.retryable}:{type:"provider.error",code:"PROVIDER_TRANSPORT_ERROR",category:"transport",retryable:!1}}async function Gn(e,t={}){try{let n=new URL(e);if(!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase()))return{gbnf:!1,streaming:!1};let r=await ve(ae(n,"/v1/runtime/capabilities"),{method:"GET",signal:t.signal},{providerId:"direct-openai-compatible",endpointPolicy:{profile:"local-network"},limits:{...t.limits,maxResponseBytes:16384,connectTimeoutMs:Math.min(t.limits?.connectTimeoutMs??1e3,1e3),totalTimeoutMs:Math.min(t.limits?.totalTimeoutMs??1500,1500)}}),o=Array.isArray(r.custom_tool_grammars)&&r.custom_tool_grammars.includes("gbnf");return{gbnf:o,streaming:o&&r.custom_tool_grammars_streaming===!0}}catch(n){if(t.signal?.aborted||n instanceof b&&n.category==="cancelled")throw n;return{gbnf:!1,streaming:!1}}}function Xo(e){let t=e.sampling;if(t===void 0)return;if(e.kind!=="openai-compatible")throw j("direct-provider","OpenAI-compatible sampling options");if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).some(i=>!["temperature","topP","seed"].includes(i)))throw g("direct-provider","sampling must contain only temperature, topP and seed");let{temperature:n,topP:r,seed:o}=t;if(n!==void 0&&(typeof n!="number"||!Number.isFinite(n)||n<0||n>2))throw g("direct-provider","sampling temperature must be finite and between 0 and 2");if(r!==void 0&&(typeof r!="number"||!Number.isFinite(r)||r<=0||r>1))throw g("direct-provider","sampling topP must be finite and greater than 0 through 1");if(o!==void 0&&(typeof o!="number"||!Number.isSafeInteger(o)||o<0))throw g("direct-provider","sampling seed must be a nonnegative safe integer");return Object.freeze({temperature:n,topP:r,seed:o})}function Mt(e){if(e={...e,sampling:Xo(e)},e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw g("direct-provider","maxTokens must be a positive safe integer");let t=`direct-${e.kind}`,n=qn(e);if(e.xenoEnableThinking!==void 0&&(typeof e.xenoEnableThinking!="boolean"||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw g(t,"XENO thinking controls require an explicit loopback xeno-rt endpoint");if(e.xenoToolFormat!==void 0&&(e.xenoToolFormat!=="qwen_native"||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw g(t,"XENO native tool format requires an explicit loopback xeno-rt endpoint");if(e.xenoPromptTokenCeiling!==void 0&&(!Number.isSafeInteger(e.xenoPromptTokenCeiling)||e.xenoPromptTokenCeiling<0||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw g(t,"XENO prompt token ceilings require a nonnegative limit and an explicit loopback xeno-rt endpoint");let r=ko(e),o={profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},i={providerId:t,endpointPolicy:o,limits:e.transportLimits},s={id:t,capabilities:r,async complete(d,u,l,c,m,p){let f=De([...l.map(w=>w.name),...u.flatMap(w=>typeof w.content=="string"?[]:w.content.flatMap(R=>R.type==="tool_use"?[R.name]:[]))]),y=l.map(w=>({...w,name:f.encode(w.name)})),h=u.map(w=>typeof w.content=="string"?w:{...w,content:w.content.map(R=>R.type==="tool_use"?{...R,name:f.encode(R.name)}:R)}),P=p?{...p,...typeof p.toolChoice=="object"?{toolChoice:{name:f.encode(p.toolChoice.name)}}:{}}:void 0,v=P?.onEvent?{...P,onEvent:w=>P.onEvent("name"in w&&typeof w.name=="string"?{...w,name:f.decode(w.name)}:w),toolChoice:P.toolChoice}:P,x;try{x=await a(d,h,y,c,m,v)}catch(w){throw In(w,l.map(R=>R.name),f)}return{...x,content:x.content.map(w=>w.type==="tool_use"?{...w,name:f.decode(w.name)}:w)}}};async function a(d,u,l,c,m,p){{if(l.length>0&&!r.tools)throw j(t,"tools");if(Bn(u)&&!r.imageInput)throw j(t,"image input");let f=e.kind==="openai-compatible"?"openai-chat":e.kind==="google"?"google-json-schema":e.kind;if(p?.toolChoice!==void 0&&e.kind!=="openai-compatible")throw j(t,"generic chat tool selection");let y=_e(l,f).map(({definition:x})=>x),h,P={"content-type":"application/json"},v;try{if(e.kind==="anthropic"){if(h=ae(n,"/v1/messages"),P={...P,"x-api-key":e.apiKey,"anthropic-version":e.anthropicVersion??"2023-06-01"},v={model:d,max_tokens:e.maxTokens??8192,system:p?.systemPrompt,messages:Eo(u),tools:y.map(R=>({name:R.name,description:R.description,input_schema:R.input_schema}))},e.streaming)return await qo({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p})}else if(e.kind==="google"){let R=e.streaming?"streamGenerateContent":"generateContent";if(h=ae(n,`/v1beta/models/${encodeURIComponent(d)}:${R}`),e.streaming&&h.searchParams.set("alt","sse"),P={...P,"x-goog-api-key":e.apiKey},v={systemInstruction:p?.systemPrompt?{parts:[{text:p.systemPrompt}]}:void 0,contents:Io(u),tools:y.length>0?[{functionDeclarations:Mo(y)}]:void 0,generationConfig:{maxOutputTokens:e.maxTokens??8192}},e.streaming)return await Bo({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p})}else if(e.kind==="openai-compatible"){if(h=ae(n,e.chatCompletionsPath??"/v1/chat/completions"),P={...P,...Ot(e)},v=Dn(d,u,y,p,e.maxTokens??8192,e.xenoPromptTokenCeiling,r.customToolGrammarsGbnf===!0,r.parallelToolCalls===!0,e.xenoEnableThinking,e.xenoToolFormat,e.sampling),e.streaming)return await Uo({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p,sentTools:y,customGrammars:r.customToolGrammarsGbnf===!0})}else if(h=ae(n,"/v1/responses"),P={...P,authorization:`Bearer ${e.apiKey}`},v={model:d,instructions:p?.systemPrompt,input:Ao(u),tools:y.map(R=>({type:"function",name:R.name,description:R.description,parameters:R.input_schema})),max_output_tokens:e.maxTokens??8192,store:!1},e.streaming)return await jo({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p});let x=await ve(h,{method:"POST",headers:P,body:JSON.stringify(v),signal:m},i),w=e.kind==="anthropic"?$o(t,x):e.kind==="google"?Do(t,x):e.kind==="openai-compatible"?zn(t,x,y,r.customToolGrammarsGbnf===!0):No(t,x);return await Hn(w,c,p),w}catch(x){throw x instanceof b&&x.category==="cancelled"?await C(p,{type:"provider.cancelled"}):(await C(p,Fn(x)),x instanceof b&&x.retryable&&await C(p,{type:"provider.retry",retryAfterMs:x.retryAfterMs,reason:x.category})),x}}}return e.xenoPromptTokenCeiling!==void 0&&(s.prepareQuotaRequest=async(d,u,l,c,m)=>{let p=await ve(ae(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 j(t,"XENO prompt token ceiling and exact count");let f=Array.isArray(p.custom_tool_grammars)&&p.custom_tool_grammars.includes("gbnf"),y=f&&p.custom_tool_grammars_streaming===!0,h=f&&(!e.streaming||y);if(r.customToolGrammarsGbnf===!0&&!h)throw j(t,"negotiated local custom tool grammars");let P=r.customToolGrammarsGbnf!==!1&&h,v={...e,capabilityProfile:{...e.capabilityProfile,customToolGrammarsGbnf:P,customToolGrammarsGbnfStreaming:P&&y}},x=structuredClone(u),w=structuredClone(l),R=c?{...c}:void 0,I=De([...w.map(L=>L.name),...x.flatMap(L=>typeof L.content=="string"?[]:L.content.flatMap(Z=>Z.type==="tool_use"?[Z.name]:[]))]),fe=w.map(L=>({...L,name:I.encode(L.name)})),Se=x.map(L=>typeof L.content=="string"?L:{...L,content:L.content.map(Z=>Z.type==="tool_use"?{...Z,name:I.encode(Z.name)}:Z)}),ge=_e(fe,"openai-chat").map(({definition:L})=>L),k=R?{...R,...typeof R.toolChoice=="object"?{toolChoice:{name:I.encode(R.toolChoice.name)}}:{}}:void 0,M=Dn(d,Se,ge,k,e.maxTokens??8192,void 0,P,r.parallelToolCalls===!0,e.xenoEnableThinking,e.xenoToolFormat,e.sampling),X=await ve(ae(n,"/v1/runtime/chat/prompt-tokens"),{method:"POST",headers:{"content-type":"application/json",...Ot(e)},body:JSON.stringify(M),signal:m},{...i,limits:{...e.transportLimits,connectTimeoutMs:9e4,totalTimeoutMs:12e4,maxResponseBytes:16384}}),D=X.prompt_tokens;if(X.object!=="runtime.chat.prompt_tokens"||typeof D!="number"||!Number.isSafeInteger(D)||D<0)throw g(t,"xeno-rt returned an invalid exact prompt token count");if(D>e.xenoPromptTokenCeiling)throw new T("EXCEEDED","Exact prompt exceeds the configured XENO input token ceiling.");let H=R?.quotaRemainingTokens;if(H!==void 0&&(!Number.isSafeInteger(H)||H<0))throw new T("INVALID","Remaining quota must be a nonnegative safe integer.");let W=Math.min(e.maxTokens??8192,H===void 0?Number.MAX_SAFE_INTEGER:H-D);if(W<1)throw new T("EXCEEDED",`Goal token budget exhausted: ${H??0} tokens left, but this request needs exactly ${D} for its input plus at least 1 for the reply. Raise the goal's token limit or start a new goal.`);let cr=Mt({...v,maxTokens:W,xenoPromptTokenCeiling:D});return{basis:"provider-enforced",inputTokensUpperBound:D,outputTokensUpperBound:W,execute:(L,Z)=>cr.complete(d,x,w,L,Z,R)}}),s}function Kn(e){let t="direct-ollama-native";if(e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw g(t,"maxTokens must be a positive safe integer");let n={...e,kind:"openai-compatible"};if(n.sampling!==void 0)throw j(t,"OpenAI-compatible sampling options");let r=qn(n);return{id:t,capabilities:{streaming:!1,textInput:!0,imageInput:!1,vision:!1,tools:!0,parallelToolCalls:!1,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1},async complete(o,i,s,a,d,u){if(Bn(i))throw j(t,"image input");try{let l=_e(s,"openai-chat").map(({definition:y})=>y),c=Xn(i,u?.systemPrompt).map(y=>({...y,content:y.content??"",...y.tool_calls?{tool_calls:y.tool_calls.map(h=>({...h,function:{...h.function,arguments:re(t,h.function.arguments,"tool call")}}))}:{}})),m=await ve(ae(r,"/api/chat"),{method:"POST",signal:d,headers:{"content-type":"application/json",...Ot(n)},body:JSON.stringify({model:o,messages:c,stream:!1,options:{num_predict:e.maxTokens??8192},tools:l.map(y=>({type:"function",function:{name:y.name,description:y.description,parameters:y.input_schema}}))})},je(n,t));if(m.done!==!0||!m.message||typeof m.message!="object")throw g(t,"native completion is missing its terminal message");let p=m.message,f=zn(t,{choices:[{message:{...p,...Array.isArray(p.tool_calls)?{tool_calls:p.tool_calls.map(y=>({...y,id:y.id??(0,rt.randomUUID)()}))}:{}},finish_reason:m.done_reason==="length"?"length":"stop"}],usage:m});return await Hn(f,a,u),f}catch(l){throw await C(u,l instanceof b&&l.category==="cancelled"?{type:"provider.cancelled"}:Fn(l)),l}}}}function at(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 $t=1,ue={streaming:!0,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!0,usageAccounting:!0,promptCaching:!1,modelDiscovery:!0},dt={...ue,reasoningMetadata:!1},Qn=[K("xeno","XENO hosted","xeno","openai-compatible","https://api.xenostudio.ai","public-https","bearer-env","XENO_API_KEY","/v1/models",ue),K("openai","OpenAI","direct","openai-responses","https://api.openai.com","public-https","bearer-env","OPENAI_API_KEY","/v1/models",ue),K("anthropic","Anthropic","direct","anthropic","https://api.anthropic.com","public-https","header-env","ANTHROPIC_API_KEY","/v1/models",{...ue,structuredOutput:!1}),K("google","Google AI Studio","direct","google","https://generativelanguage.googleapis.com","public-https","header-env","GOOGLE_API_KEY","/v1beta/models",ue),K("openrouter","OpenRouter","gateway","openai-compatible","https://openrouter.ai/api","public-https","bearer-env","OPENROUTER_API_KEY","/v1/models",dt),K("xeno-rt","xeno-rt","local","openai-compatible","http://127.0.0.1:3338","local-network","none",void 0,"/v1/models",dt,["running xeno-rt endpoint"]),K("ollama","Ollama","local","openai-compatible","http://127.0.0.1:11434","local-network","none",void 0,"/v1/models",dt,["Ollama OpenAI compatibility endpoint"]),K("azure-openai","Azure OpenAI","cloud","openai-compatible",void 0,"public-https","header-env","AZURE_OPENAI_API_KEY",void 0,dt,["resource endpoint","deployment","API version","host adapter for deployment-shaped requests"]),K("aws-bedrock","Amazon Bedrock","cloud","aws-bedrock",void 0,"public-https","cloud-chain",void 0,void 0,{...ue,modelDiscovery:!1},["AWS credential chain","region","Bedrock host adapter"]),K("vertex-ai","Google Vertex AI","cloud","vertex-ai",void 0,"public-https","cloud-chain",void 0,void 0,{...ue,modelDiscovery:!1},["Google application-default credentials","project","region","Vertex host adapter"])],Te=class{presets=new Map;constructor(t=Qn){for(let n of t)this.add(n)}add(t){ti(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=Wn(t.baseUrl??r.defaultBaseUrl,r)}catch(d){o.push(d instanceof Error?d.message:String(d))}i||o.push("Provider endpoint is not configured");let s=t.secretRef?.trim()||r.auth.defaultSecretRef;(r.auth.mode==="bearer-env"||r.auth.mode==="header-env")&&!s&&o.push("Credential reference is not configured"),s&&n&&!n(s)&&o.push(`Credential reference ${s} is not available`),(r.adapterKind==="aws-bedrock"||r.adapterKind==="vertex-ai"||r.id==="azure-openai")&&o.push("Provider requires a dedicated host adapter");let a="ready";return t.enabled===!1?a="blocked":o.some(d=>d.includes("host adapter"))?a="requires-host-adapter":o.some(d=>d.includes("Credential"))?a="missing-credential":o.length&&(a="needs-configuration"),{connection:ni(t),preset:r,...i?{endpoint:i}:{},...s?{secretRef:s}:{},readiness:a,blockers:o}}};async function Jo(e){let n=(e.catalog??new Te).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=de(n.endpoint,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts});try{await Fe(a,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts,resolveHostname:e.resolveHostname})}catch(c){return{...s,readiness:"blocked",errors:Re([...s.errors,c instanceof Error?c.message:String(c)])}}let d=Fo(a,n.preset.discoveryPath),u=Ho(n.preset,o),l=Date.now();try{let{response:c,text:m}=await Go(e.fetchImpl??fetch,d,{headers:u},e.timeoutMs??8e3,e.maxResponseBytes??2097152),p=Date.now()-l,f=c.status===401||c.status===403?!1:c.ok?!0:null;if(!c.ok)return{...s,reachable:!0,authenticated:f,latencyMs:p,readiness:f===!1?"missing-credential":"blocked",errors:Re([...s.errors,`Provider discovery returned HTTP ${c.status}`])};let y=JSON.parse(m);return{...s,readiness:"ready",reachable:!0,authenticated:f,latencyMs:p,models:Ko(y),errors:Re(s.errors)}}catch(c){return{...s,readiness:"blocked",latencyMs:Date.now()-l,errors:Re([...s.errors,ri(c)])}}}function Vo(e,t={}){let n=t.allowedProviderIds?new Set(t.allowedProviderIds):null,r=new Set(t.deniedProviderIds??[]),o=new Map((t.fallbackOrder??[]).map((i,s)=>[i,s]));return e.filter(({connection:i,model:s})=>{let a=i.preset.id;return!(i.readiness!=="ready"||i.connection.enabled===!1||s.available===!1||s.availability==="unavailable"||n&&!n.has(a)||r.has(a)||!Yo({...i.preset.capabilities,...s.capabilities??{}},t.require)||t.maxInputCostPerMillion!==void 0&&(s.inputCostPerMillion??1/0)>t.maxInputCostPerMillion||t.maxOutputCostPerMillion!==void 0&&(s.outputCostPerMillion??1/0)>t.maxOutputCostPerMillion)}).sort((i,s)=>{if(t.preferLocal&&i.connection.preset.family!==s.connection.preset.family){if(i.connection.preset.family==="local")return-1;if(s.connection.preset.family==="local")return 1}let a=o.get(i.connection.preset.id)??Number.MAX_SAFE_INTEGER,d=o.get(s.connection.preset.id)??Number.MAX_SAFE_INTEGER;return a-d||i.connection.preset.id.localeCompare(s.connection.preset.id)||i.model.id.localeCompare(s.model.id)})}function zo(e,t,n){if(e.readiness==="requires-host-adapter")throw new Error(`${e.preset.displayName} requires a dedicated host adapter`);if(!e.endpoint)throw new Error("Provider endpoint is not configured");if(e.preset.adapterKind==="aws-bedrock"||e.preset.adapterKind==="vertex-ai")throw new Error("Cloud adapter cannot be represented as DirectProviderConfig");if((e.preset.auth.mode==="bearer-env"||e.preset.auth.mode==="header-env")&&!t)throw new Error("Provider credential did not resolve");if(n?.capabilities?.textInput===!1)throw new Error(`Provider model ${n.id} does not advertise text input`);let r=ei({...e.preset.capabilities,...n?.capabilities??{}});return{kind:e.preset.adapterKind,apiKey:t??"",baseURL:e.endpoint,endpointProfile:e.preset.endpointProfile,allowedHosts:e.preset.allowedHosts,streaming:r.streaming,...e.preset.adapterKind==="openai-compatible"?{capabilityProfile:r}:{},...e.preset.auth.mode==="header-env"?{authentication:{type:"header",header:e.preset.auth.header??Nt(e.preset.id),prefix:e.preset.auth.prefix}}:{},...e.preset.auth.mode==="none"?{authentication:{type:"none"}}:{}}}function K(e,t,n,r,o,i,s,a,d,u,l=[]){return{schemaVersion:$t,id:e,displayName:t,family:n,adapterKind:r,...o?{defaultBaseUrl:o}:{},endpointProfile:i,...o?{allowedHosts:[new URL(o).hostname]}:{},auth:{mode:s,...a?{defaultSecretRef:a}:{},...s==="header-env"?{header:Nt(e)}:{},description:s==="none"?"No credential required":s==="cloud-chain"?"Provider-owned cloud credential chain":`Environment/credential reference ${a}`},capabilities:u,...d?{discoveryPath:d}:{},requires:l}}function Nt(e){return e==="anthropic"?"x-api-key":e==="google"?"x-goog-api-key":e==="azure-openai"?"api-key":"authorization"}function Ho(e,t){return e.auth.mode==="none"||e.auth.mode==="cloud-chain"?{accept:"application/json"}:t?e.auth.mode==="bearer-env"?{accept:"application/json",authorization:`Bearer ${t}`}:{accept:"application/json",[e.auth.header??Nt(e.id)]:`${e.auth.prefix??""}${t}`}:{accept:"application/json"}}function Wn(e,t){return e?de(e.trim().replace(/\/+$/,""),{profile:t.endpointProfile,allowedHosts:t.allowedHosts}).toString().replace(/\/$/,""):void 0}function Fo(e,t){let n=new URL(e.toString());if(!t.startsWith("/")||t.includes("..")||t.includes("#"))throw new Error("Provider discovery path is invalid");return n.pathname=`${n.pathname.replace(/\/$/,"")}${t}`.replace(/\/{2,}/g,"/"),n}async function Go(e,t,n,r,o){if(!Number.isSafeInteger(r)||r<1||r>6e4||!Number.isSafeInteger(o)||o<1||o>16*1024*1024)throw new Error("Invalid provider discovery limits");let i=new AbortController,s,a=!1,d,u=new Promise((c,m)=>{d=m}),l=setTimeout(()=>{a=!0;let c=new Error("Provider probe timed out");i.abort(c),d(c),s?.cancel().catch(()=>{})},r);try{let c=e(t,{...n,signal:i.signal,redirect:"manual"});c.then(v=>{a&&v.body?.cancel().catch(()=>{})},()=>{});let m=await Promise.race([c,u]);if(m.redirected||m.status>=300&&m.status<400)throw m.body?.cancel().catch(()=>{}),new Error("Provider discovery redirects are disabled");let p=0;if(m.headers.forEach((v,x)=>{p+=Buffer.byteLength(x)+Buffer.byteLength(v)}),p>64*1024)throw m.body?.cancel().catch(()=>{}),new Error("Provider discovery headers exceed limit");if(!m.ok||!m.body)return m.body?.cancel().catch(()=>{}),{response:m,text:""};let f=m.headers.get("content-length");if(f&&/^\d+$/.test(f)&&Number(f)>o)throw m.body.cancel().catch(()=>{}),new Error(`Provider discovery response exceeds ${o} bytes`);s=m.body.getReader();let y=new TextDecoder("utf-8",{fatal:!0}),h=0,P="";for(;;){let v=await Promise.race([s.read(),u]);if(v.done)break;if(h+=v.value.byteLength,h>o)throw new Error(`Provider discovery response exceeds ${o} bytes`);P+=y.decode(v.value,{stream:!0})}return P+=y.decode(),{response:m,text:P}}finally{clearTimeout(l),i.abort(),s&&(s.cancel().catch(()=>{}),s.releaseLock())}}function Ko(e){if(!e||typeof e!="object")return[];let t=e,r=(Array.isArray(t.data)?t.data:Array.isArray(t.models)?t.models:[]).flatMap(i=>{if(!i||typeof i!="object")return[];let s=i,d=(typeof s.id=="string"?s.id:typeof s.name=="string"?s.name.replace(/^models\//,""):"").trim();if(!d||d.length>300||at(d))return[];let u=Dt(s.type,80),l=ct(s.supported_input_modalities),c=ct(s.supported_output_modalities),m=ct(s.supported_parameters),p=ct(s.supported_generation_methods),f=Zo(s.execution);return[{id:d,...typeof s.displayName=="string"&&s.displayName.trim()?{displayName:s.displayName.trim().slice(0,300)}:{},...typeof s.owned_by=="string"&&s.owned_by.trim()?{ownedBy:s.owned_by.trim().slice(0,200)}:{},...u?{type:u}:{},...l?{supportedInputModalities:l}:{},...c?{supportedOutputModalities:c}:{},...m?{supportedParameters:m}:{},...p?{supportedGenerationMethods:p}:{},...f?{execution:f}:{},...typeof s.available=="boolean"?{available:s.available}:{},...typeof s.availability=="string"&&s.availability.trim()?{availability:s.availability.trim().slice(0,80)}:{},capabilities:Wo({type:u,inputModalities:l,supportedParameters:m,supportedGenerationMethods:p,execution:f}),metadataSource:"provider"}]}),o=new Map;for(let i of r){let s=o.get(i.id);o.set(i.id,s?Qo(s,i):i)}return[...o.values()].sort((i,s)=>i.id.localeCompare(s.id))}function Qo(e,t){return{...e,...e.displayName===void 0&&t.displayName!==void 0?{displayName:t.displayName}:{},...e.ownedBy===void 0&&t.ownedBy!==void 0?{ownedBy:t.ownedBy}:{},...e.type===void 0&&t.type!==void 0?{type:t.type}:{},...e.supportedInputModalities===void 0&&t.supportedInputModalities!==void 0?{supportedInputModalities:t.supportedInputModalities}:{},...e.supportedOutputModalities===void 0&&t.supportedOutputModalities!==void 0?{supportedOutputModalities:t.supportedOutputModalities}:{},...e.supportedParameters===void 0&&t.supportedParameters!==void 0?{supportedParameters:t.supportedParameters}:{},...e.supportedGenerationMethods===void 0&&t.supportedGenerationMethods!==void 0?{supportedGenerationMethods:t.supportedGenerationMethods}:{},...e.execution===void 0&&t.execution!==void 0?{execution:t.execution}:{},...e.available===void 0&&t.available!==void 0?{available:t.available}:{},...e.availability===void 0&&t.availability!==void 0?{availability:t.availability}:{},...e.contextTokens===void 0&&t.contextTokens!==void 0?{contextTokens:t.contextTokens}:{},...e.inputCostPerMillion===void 0&&t.inputCostPerMillion!==void 0?{inputCostPerMillion:t.inputCostPerMillion}:{},...e.outputCostPerMillion===void 0&&t.outputCostPerMillion!==void 0?{outputCostPerMillion:t.outputCostPerMillion}:{},...e.capabilities===void 0&&t.capabilities!==void 0?{capabilities:t.capabilities}:{}}}function Wo(e){let t=e.type?.toLowerCase(),n=e.execution?.endpoint?.toLowerCase()??"",r=new Set((e.supportedParameters??[]).map(l=>l.toLowerCase())),o=new Set((e.supportedGenerationMethods??[]).map(l=>l.toLowerCase())),i=t!==void 0&&t!=="text",s=/\/(?:images|videos|embeddings|audio|moderations)\//.test(n);if(i||s)return{streaming:!1,textInput:!1,imageInput:!1,tools:!1,parallelToolCalls:!1,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!1,promptCaching:!1};if(t===void 0&&!e.execution&&!e.inputModalities&&!e.supportedParameters)return;let a=new Set((e.inputModalities??[]).map(l=>l.toLowerCase())),d=/(?:chat\/completions|responses|generatecontent)/.test(n),u={textInput:a.size>0?a.has("text"):t==="text"||d,imageInput:a.size>0?a.has("image"):!1,tools:r.has("tools"),parallelToolCalls:r.has("parallel_tool_calls")||r.has("parallel-tool-calls")};return e.execution?.stream!==void 0?u.streaming=e.execution.stream:(t==="text"||d)&&(u.streaming=!1),e.execution&&d&&(u.usageAccounting=!0),(o.has("chat")||d)&&(u.textInput=!0),e.supportedParameters&&(u.reasoningMetadata=r.has("reasoning")||r.has("reasoning_effort"),u.structuredOutput=!1,u.promptCaching=r.has("prompt_cache")||r.has("prompt_caching")),u}function Dt(e,t){if(typeof e!="string")return;let n=e.trim();if(!(!n||n.length>t||at(n)))return n}function ct(e){if(!Array.isArray(e))return;let t=e.map(n=>Dt(n,120)).filter(n=>n!==void 0).slice(0,64);return t.length>0?[...new Set(t)]:void 0}function Zo(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let o of["sync","stream","async","batch"])typeof t[o]=="boolean"&&(n[o]=t[o]);typeof t.max_batch_items=="number"&&Number.isSafeInteger(t.max_batch_items)&&t.max_batch_items>0&&t.max_batch_items<=1e5&&(n.maxBatchItems=t.max_batch_items);let r=Dt(t.endpoint,200);return r&&(n.endpoint=r),Object.keys(n).length>0?n:void 0}function Yo(e,t){return t?Object.entries(t).every(([n,r])=>r!==!0||e[n]===!0):!0}function ei(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 ti(e){if(e.schemaVersion!==$t||!/^[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&&Wn(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 ni(e){let t=e.id.trim();if(!t||t.length>120||at(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 ri(e){return(e instanceof Error?e.message:String(e)).replace(/(Bearer\s+)[A-Za-z0-9._~+/=-]+/gi,"$1[redacted]").replace(/([?&#](?:token|key|secret|password|api[_-]?key)=)[^&#\s]+/gi,"$1[redacted]").slice(0,500)}var Xt=require("node:crypto"),z=require("node:fs/promises"),pe=require("node:path");var Q=yr(require("node:fs/promises"),1);var oi=new Set(["EACCES","EBUSY","EPERM"]),ii=[10,20,40,80,160,320,640];async function Zn(e,t){for(let n=0;;n+=1)try{await Q.rename(e,t);return}catch(r){let o=r.code,i=ii[n];if(process.platform!=="win32"||!o||!oi.has(o)||i===void 0)throw r;await new Promise(s=>setTimeout(s,i))}}function lt(e){return JSON.stringify(qt(e,new Set))}function qt(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=>qt(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]=qt(o,t)}return t.delete(e),n}var oe=require("node:fs"),jt=require("node:os"),er=require("node:path");function si(){return new Date().toISOString()}function ai(){return new Date(Date.now()-Math.floor(process.uptime()*1e3)).toISOString()}function tr(e){try{return JSON.parse((0,oe.readFileSync)(e,"utf8"))}catch{return null}}function di(e){if(!e||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function ci(e){return e.hostname!==(0,jt.hostname)()?!0:di(e.pid)}function Yn(e,t){(0,oe.mkdirSync)((0,er.dirname)(e),{recursive:!0}),(0,oe.writeFileSync)(e,JSON.stringify(t,null,2)+`
10
- `,{encoding:"utf8",flag:"wx"})}function li(e,t){let n=tr(e);n?.pid!==t.pid||n.hostname!==t.hostname||(0,oe.rmSync)(e,{force:!0})}function nr(e,t,n){let r=si(),o={schemaVersion:1,name:t,pid:process.pid,hostname:(0,jt.hostname)(),processStartedAt:ai(),version:n,acquiredAt:r,updatedAt:r};try{Yn(e,o)}catch(i){if(i.code!=="EEXIST")throw i;let a=tr(e);if(a&&ci(a))throw new Error(`${t} is already locked by PID ${a.pid} on ${a.hostname}.`);(0,oe.rmSync)(e,{force:!0}),Yn(e,o)}return{record:o,release:()=>{li(e,o)}}}var ut=1,Bt=class{directory;snapshotPath;lockPath;catalog;now;constructor(t){this.directory=(0,pe.resolve)(t.directory),this.snapshotPath=(0,pe.join)(this.directory,"providers.json"),this.lockPath=(0,pe.join)(this.directory,"providers.lock"),this.catalog=t.catalog??new Te,this.now=t.now??(()=>new Date)}async upsert(t){let n=this.catalog.resolve(t).connection;return or(n),this.mutate(r=>{let o=r.connections.filter(i=>i.id!==n.id);return o.push(n),{snapshot:Ut(r,o,r.routingPolicy,this.now()),result:n}})}async remove(t){return this.mutate(n=>{let r=n.connections.filter(o=>o.id!==t);return r.length===n.connections.length?{snapshot:n,result:!1}:{snapshot:Ut(n,r,n.routingPolicy,this.now()),result:!0}})}async setRoutingPolicy(t){let n=ir(t);return this.mutate(r=>({snapshot:Ut(r,r.connections,n,this.now()),result:n}))}async get(t){return(await this.load()).connections.find(n=>n.id===t)??null}async list(){return(await this.load()).connections}async load(){try{let t=JSON.parse(await(0,z.readFile)(this.snapshotPath,"utf8"));return pi(t,this.catalog),t}catch(t){if(t.code==="ENOENT")return ui(this.now());throw t}}async mutate(t){await(0,z.mkdir)(this.directory,{recursive:!0,mode:448});let n=nr(this.lockPath,"xeno provider connection store","1");try{let r=await this.load(),{snapshot:o,result:i}=t(r);return o!==r&&await mi(this.snapshotPath,`${JSON.stringify(o,null,2)}
11
- `),i}finally{n.release()}}};function ui(e){return rr({schemaVersion:ut,generation:0,updatedAt:e.toISOString(),connections:[],routingPolicy:{}})}function Ut(e,t,n,r){return rr({schemaVersion:ut,generation:e.generation+1,updatedAt:r.toISOString(),connections:[...t].sort((o,i)=>o.id.localeCompare(i.id)),routingPolicy:n})}function rr(e){return{...e,checksum:{algorithm:"sha256",value:(0,Xt.createHash)("sha256").update(sr(e)).digest("hex")}}}function pi(e,t){if(e.schemaVersion!==ut||!Array.isArray(e.connections))throw new Error("Invalid provider connection snapshot");let{checksum:n,...r}=e;if(n?.algorithm!=="sha256"||n.value!==(0,Xt.createHash)("sha256").update(sr(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(or(s),o.has(s.id))throw new Error(`Duplicate provider connection: ${s.id}`);o.add(s.id)}ir(e.routingPolicy)}function or(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=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 mi(e,t){await(0,z.mkdir)((0,pe.dirname)(e),{recursive:!0,mode:448});let n=`${e}.${process.pid}.${Date.now()}.tmp`,r;try{r=await(0,z.open)(n,"wx",384),await r.writeFile(t,"utf8"),await r.sync(),await r.close(),r=void 0,await Zn(n,e),await(0,z.chmod)(e,384).catch(()=>{})}finally{r&&await r.close().catch(()=>{}),await(0,z.unlink)(n).catch(()=>{})}}function sr(e){return lt(e)}var mt=require("node:crypto"),N=require("node:fs/promises"),Ee=require("node:path");var pt=e=>(0,mt.createHash)("sha256").update(lt(e)).digest("hex"),ke=e=>new Date(e).toISOString().slice(0,10);function ar(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 fi(e){return e.kind==="reserve"&&e.reservation.basis!==void 0}function dr(e){return{requestsPerMinute:e.requestsPerMinute===null?null:S(e.requestsPerMinute),tokensPerDay:e.tokensPerDay===null?null:S(e.tokensPerDay),...e.tokensLifetime!==void 0?{tokensLifetime:e.tokensLifetime===null?null:S(e.tokensLifetime)}:{}}}function Jt(e,t){return Ce(e).some(n=>V(n)===V(t))}function me(e){return e.reduce((t,n)=>S(t+n),0)}var Vt=class{constructor(t,n=Date.now,r=1e5){this.now=n;this.maximumEntries=r;this.directory=(0,Ee.resolve)(t),S(r)}now;maximumEntries;directory;async policy(t){return(await this.load()).policies.get(V(t))??null}async setPolicy(t,n,r){let o={scope:G(t),limits:dr(n),revision:S(r)+1};return await this.append(()=>({kind:"policy",policy:o,expectedRevision:r})),o}async reservation(t){return(await this.load()).reservations.get(B(t))??null}async reserve(t){if(t.basis!==void 0&&t.basis!=="estimated")throw new T("INVALID","Unknown reservation basis.");let n={id:B(t.id),scope:G(t.scope),requestHash:B(t.requestHash),reservedTokens:S(t.reservedTokens),...t.basis?{basis:t.basis}:{}};return await this.append((r,o)=>{let i=r.reservations.get(n.id);if(i){if(pt([i.scope,i.requestHash,i.reservedTokens,i.basis??null])!==pt([n.scope,n.requestHash,n.reservedTokens,n.basis??null]))throw new T("CONFLICT","Reservation identity was reused for different work.");return null}return{kind:"reserve",reservation:{...n,admittedAt:o,state:"reserved"}}}),await this.reservation(n.id)}async dispatch(t){await this.append(()=>({kind:"dispatch",id:B(t)}))}async void(t){await this.append(n=>n.reservations.get(t)?.state==="void"?null:{kind:"void",id:B(t)})}async settle(t,n){S(n),await this.append(r=>{let o=r.reservations.get(t);return o?.state==="settled"&&o.actualTokens===n?null:{kind:"settle",id:B(t),actualTokens:n}})}async snapshot(t){let n=await this.load(),r=S(this.now()),o=G(t);if(r<n.at)throw new T("CLOCK_ROLLBACK","Quota clock moved backwards.");let i=[...n.reservations.values()].filter(a=>Jt(a.scope,o)),s=i.filter(a=>ke(a.admittedAt)===ke(r));return{authority:"local-file",policies:Ce(o).flatMap(a=>n.policies.get(V(a))?[n.policies.get(V(a))]:[]),heldTokens:me(s.filter(a=>a.state==="reserved"||a.state==="dispatched").map(a=>a.reservedTokens)),usedTokens:me(s.filter(a=>a.state==="settled").map(a=>a.actualTokens)),lifetimeHeldTokens:me(i.filter(a=>a.state==="reserved"||a.state==="dispatched").map(a=>a.reservedTokens)),lifetimeUsedTokens:me(i.filter(a=>a.state==="settled").map(a=>a.actualTokens)),requestsInLastMinute:i.filter(a=>a.state!=="void"&&a.admittedAt>r-6e4).length,unresolved:i.filter(a=>a.state==="dispatched").length}}async remainingTokens(t){let n=await this.load(),r=S(this.now());if(r<n.at)throw new T("CLOCK_ROLLBACK","Quota clock moved backwards.");let o=null;for(let i of Ce(t)){let s=n.policies.get(V(i));if(!s)continue;let a=[...n.reservations.values()].filter(c=>Jt(c.scope,i)&&c.state!=="void"),d=c=>me(c.map(m=>m.state==="settled"?m.actualTokens:m.reservedTokens)),u=[s.limits.tokensLifetime===void 0?null:s.limits.tokensLifetime,s.limits.tokensPerDay===null?null:s.limits.tokensPerDay],l=[d(a),d(a.filter(c=>ke(c.admittedAt)===ke(r)))];for(let c=0;c<u.length;c+=1){let m=u[c];if(m===null)continue;let p=Math.max(0,m-l[c]);o=o===null?p:Math.min(o,p)}}return o}apply(t,n,r,o=!0){if(n.kind==="policy"){let s=n.policy,a=V(s.scope);if((t.policies.get(a)?.revision??0)!==n.expectedRevision||s.revision!==n.expectedRevision+1)throw new T("CONFLICT","Quota policy revision changed.");t.policies.set(a,{scope:G(s.scope),revision:S(s.revision),limits:dr(s.limits)});return}if(n.kind==="reserve"){let s=n.reservation;if(B(s.id),B(s.requestHash),G(s.scope),S(s.reservedTokens),s.state!=="reserved"||s.admittedAt!==r||t.reservations.has(s.id))throw new T("CORRUPT","Invalid reservation record.");for(let a of o?Ce(s.scope):[]){let d=t.policies.get(V(a));if(!d)continue;let u=[...t.reservations.values()].filter(c=>Jt(c.scope,a)&&c.state!=="void");if(d.limits.requestsPerMinute!==null&&u.filter(c=>c.admittedAt>r-6e4).length>=d.limits.requestsPerMinute)throw new T("EXCEEDED","Ancestor request rate limit reached.");let l=me(u.filter(c=>ke(c.admittedAt)===ke(r)).map(c=>c.state==="settled"?c.actualTokens:c.reservedTokens));if(d.limits.tokensPerDay!==null&&S(l+s.reservedTokens)>d.limits.tokensPerDay)throw new T("EXCEEDED","Ancestor daily token limit reached.");if(d.limits.tokensLifetime!==void 0&&d.limits.tokensLifetime!==null){let c=me(u.map(m=>m.state==="settled"?m.actualTokens:m.reservedTokens));if(S(c+s.reservedTokens)>d.limits.tokensLifetime)throw new T("EXCEEDED","Ancestor lifetime token limit reached.")}}t.reservations.set(s.id,structuredClone(s));return}let i=t.reservations.get(n.id);if(!i)throw new T("CONFLICT","Reservation does not exist.");if(n.kind==="dispatch"||n.kind==="void"){if(i.state!=="reserved")throw new T("CONFLICT","Reservation cannot be dispatched twice or release unknown usage.");i.state=n.kind==="dispatch"?"dispatched":"void"}else if(n.kind==="settle"){if(i.state!=="dispatched"||i.basis!=="estimated"&&S(n.actualTokens)>i.reservedTokens)throw new T("CONFLICT","Invalid reservation settlement.");i.state="settled",i.actualTokens=n.actualTokens}else throw new T("CORRUPT","Unknown quota journal operation.")}async load(){let t={sequence:0,hash:"",at:0,policies:new Map,reservations:new Map},n;try{n=await(0,N.readdir)(this.directory)}catch(o){if(o.code==="ENOENT")return t;throw o}let r=n.filter(o=>o.endsWith(".quota")).sort();if(r.length>this.maximumEntries)throw new T("CAPACITY","Quota journal requires archival maintenance.");for(let o of r){if(o!==`${String(t.sequence+1).padStart(12,"0")}.quota`)throw new T("CORRUPT","Quota journal sequence is incomplete.");let i=(0,Ee.join)(this.directory,o),s=await(0,N.lstat)(i);if(!s.isFile()||s.isSymbolicLink()||s.size>16384)throw new T("CORRUPT","Invalid quota record file.");let a=await(0,N.open)(i,"r"),d;try{let c=Buffer.alloc(16385),m=await a.read(c,0,c.length,0);if(m.bytesRead>16384)throw new T("CORRUPT","Oversized quota record.");d=JSON.parse(c.subarray(0,m.bytesRead).toString("utf8"))}finally{await a.close()}let{hash:u,...l}=d;if(d.version!==1&&d.version!==2&&d.version!==3||d.sequence!==t.sequence+1||d.previousHash!==t.hash||u!==pt(l)||S(d.at)<t.at)throw new T("CORRUPT","Quota journal integrity failed.");if(d.version===1&&ar(d.operation))throw new T("CORRUPT","Lifetime or goal scope requires quota journal version 2.");this.apply(t,d.operation,d.at,!1),t.sequence=d.sequence,t.hash=u,t.at=d.at}return t}async append(t){await(0,N.mkdir)(this.directory,{recursive:!0,mode:448});for(let n=0;n<100;n++){let r=await this.load(),o=S(this.now());if(o<r.at)throw new T("CLOCK_ROLLBACK","Quota clock moved backwards.");let i=t(r,o);if(!i)return;if(r.sequence>=this.maximumEntries)throw new T("CAPACITY","Quota journal requires archival maintenance.");this.apply(r,i,o);let a={version:fi(i)?3:ar(i)?2:1,sequence:r.sequence+1,previousHash:r.hash,at:o,operation:i},d=JSON.stringify({...a,hash:pt(a)});if(Buffer.byteLength(d)>16384)throw new T("CAPACITY","Quota record exceeds its bound.");let u=(0,Ee.join)(this.directory,`${(0,mt.randomUUID)()}.tmp`),l=(0,Ee.join)(this.directory,`${String(a.sequence).padStart(12,"0")}.quota`),c=await(0,N.open)(u,"wx",384);try{await c.writeFile(d),await c.sync()}catch(m){throw await c.close(),await(0,N.unlink)(u).catch(()=>{}),m}await c.close();try{if(await(0,N.link)(u,l),process.platform!=="win32"){let m=await(0,N.open)(this.directory,"r");try{await m.sync()}finally{await m.close()}}return}catch(m){if(m.code!=="EEXIST")throw m}finally{await(0,N.unlink)(u).catch(()=>{})}}throw new T("CONFLICT","Quota admission contention exceeded the retry bound.")}};0&&(module.exports={BUILT_IN_XENO_PROVIDER_PRESETS,DualLLMProvider,FileQuotaAuthority,FileXenoProviderConnectionStore,PROVIDER_TOOL_NAME_PATTERN,ProviderError,QuotaAcknowledgementError,QuotaError,ToolSchemaProjectionError,XENO_PROVIDER_CATALOG_SCHEMA_VERSION,XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION,XenoProviderCatalog,assertDirectEndpointResolution,classifyProviderHttpError,classifyProviderStreamError,createDirectProvider,createOllamaNativeProvider,createQuotaGovernedProvider,createToolNameCodec,directProviderConfigFromConnection,isQuotaControlError,normalizeQuotaScope,parseRetryAfter,probeLocalToolGrammarSupport,probeXenoProvider,projectToolDefinitionsForProvider,projectToolSchemaForProvider,providerCapabilityError,providerProtocolError,quotaAncestors,quotaInteger,quotaScopeKey,quotaText,selectXenoProviderRoute,validateDirectEndpoint});
7
+ `);if(x<0)break;let w=l.slice(0,x).replace(/\r$/,"");if(l=l.slice(x+1),!w)await h();else if(!w.startsWith(":")){let R=w.indexOf(":"),I=R<0?w:w.slice(0,R),fe=R<0?"":w.slice(R+1).replace(/^ /,"");I==="event"?m=fe:I==="data"&&p.push(fe)}}}if(l+=Ke(u,void 0,!1,n.providerId),l.trim())for(let P of l.split(/\r?\n/))P.startsWith("data:")?p.push(P.slice(5).replace(/^ /,"")):P.startsWith("event:")&&(m=P.slice(6).trim());await h()}finally{f&&clearTimeout(f),d.cancel().catch(()=>{}),d.releaseLock()}},o)}var Sn=require("node:crypto");var xt=require("node:net"),et=class extends Error{issues;constructor(t){super(`Invalid JSON Schema: ${t.map(n=>`${n.path||"#"} ${n.message}`).join("; ")}`),this.name="JsonSchemaCompilationError",this.issues=t}},_t="https://json-schema.org/draft/2020-12/schema",Yr=new Set(["string","number","integer","boolean","array","object","null"]),eo=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"]),wn=new Map([["date",e=>_n(e)],["date-time",e=>vo(e)],["time",e=>Cn(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=>yn(e)],["idn-email",e=>yn(e)],["hostname",e=>Rt(e)],["idn-hostname",e=>Rt(e)],["ipv4",e=>(0,xt.isIP)(e)===4],["ipv6",e=>(0,xt.isIP)(e)===6],["uuid",e=>/^[0-9a-f]{8}-[0-9a-f]{4}-[1-8][0-9a-f]{3}-[89ab][0-9a-f]{3}-[0-9a-f]{12}$/iu.test(e)],["uri",e=>hn(e)],["iri",e=>hn(e)],["uri-reference",e=>bn(e)],["iri-reference",e=>bn(e)],["uri-template",e=>Po(e)],["json-pointer",e=>/^(?:\/(?:[^~/]|~[01])*)*$/u.test(e)],["relative-json-pointer",e=>/^(?:0|[1-9]\d*)(?:#|(?:\/(?:[^~/]|~[01])*)*)$/u.test(e)],["regex",(e,t)=>kt(e,t.maxPatternLength)!==void 0]]);function to(e={}){return{strictKeywords:e.strictKeywords??!0,assertFormats:e.assertFormats??!1,maxSchemaDepth:ie(e.maxSchemaDepth,64,1,256,"maxSchemaDepth"),maxSchemaNodes:ie(e.maxSchemaNodes,4096,1,1e5,"maxSchemaNodes"),maxReferences:ie(e.maxReferences,512,0,1e4,"maxReferences"),maxPatternLength:ie(e.maxPatternLength,256,1,4096,"maxPatternLength"),maxValidationDepth:ie(e.maxValidationDepth,128,1,1024,"maxValidationDepth"),maxValidationSteps:ie(e.maxValidationSteps,1e5,100,1e7,"maxValidationSteps"),maxValidationErrors:ie(e.maxValidationErrors,64,1,1024,"maxValidationErrors"),maxInputBytes:ie(e.maxInputBytes,16*1024*1024,1024,256*1024*1024,"maxInputBytes")}}function ie(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 no(e,t={}){let n={root:e,options:to(t),issues:[],rawByPointer:new Map,anchors:new Map,compiledByPointer:new Map,schemaNodes:0,references:0,nextNodeId:1};Ze(e,"",0,n);let r=ce(e,"",0,n);if(n.issues.length>0||!r)throw new et(n.issues);return Object.freeze({dialect:_t,formatAssertion:n.options.assertFormats,validate(o){let i=[],s=Ct(o);if(s)return i.push({path:s.path,keyword:"type",schemaPath:"#",message:s.message}),{valid:!1,errors:i,steps:0,truncated:!1};let a=JSON.stringify(o),d=Buffer.byteLength(a??"null","utf8");if(d>n.options.maxInputBytes)return i.push({path:"",keyword:"maxInputBytes",schemaPath:"#",message:`input is ${d} bytes; limit is ${n.options.maxInputBytes}`}),{valid:!1,errors:i,steps:0,truncated:!1};let u={options:n.options,errors:i,budget:{steps:0,exhausted:!1},activePairs:new Set,objectIds:new WeakMap,nextObjectId:{value:1}};return te(o,r,"",0,u),{valid:i.length===0,errors:i,steps:u.budget.steps,truncated:u.budget.exhausted||i.length>=n.options.maxValidationErrors}}})}function vn(e,t={}){if(!B(e)||e.type!=="object"||!B(e.properties))throw new et([{path:"#",keyword:"type",message:"tool input schema root must declare type object and a properties object"}]);return no(e,t)}function Ze(e,t,n,r){if(n>r.options.maxSchemaDepth){_(r,t,void 0,`schema depth exceeds ${r.options.maxSchemaDepth}`);return}if(typeof e!="boolean"&&!B(e)){_(r,t,void 0,"schema must be an object or boolean");return}if(!r.rawByPointer.has(t)){if(r.schemaNodes+=1,r.schemaNodes>r.options.maxSchemaNodes){_(r,t,void 0,`schema node count exceeds ${r.options.maxSchemaNodes}`);return}if(r.rawByPointer.set(t,e),typeof e!="boolean"){e.$anchor!==void 0&&(typeof e.$anchor!="string"||!/^[A-Za-z][A-Za-z0-9._:-]*$/u.test(e.$anchor)?_(r,t,"$anchor","$anchor must be a valid plain-name anchor"):r.anchors.has(e.$anchor)?_(r,t,"$anchor",`duplicate anchor ${e.$anchor}`):r.anchors.set(e.$anchor,t));for(let o of["$defs","properties","patternProperties"]){let i=e[o];if(i!==void 0){if(!B(i)){_(r,t,o,`${o} must be an object`);continue}for(let[s,a]of Object.entries(i))Ze(a,ne(t,o,s),n+1,r)}}for(let o of["items","contains","additionalProperties","not"])e[o]!==void 0&&Ze(e[o],ne(t,o),n+1,r);for(let o of["prefixItems","allOf","anyOf","oneOf"]){let i=e[o];if(i!==void 0){if(!Array.isArray(i)){_(r,t,o,`${o} must be an array of schemas`);continue}i.forEach((s,a)=>Ze(s,ne(t,o,String(a)),n+1,r))}}}}}function ce(e,t,n,r){let o=r.compiledByPointer.get(t);if(o)return o;if(typeof e!="boolean"&&!B(e))return;let i={id:r.nextNodeId++,schemaPath:Tn(t)};if(r.compiledByPointer.set(t,i),typeof e=="boolean")return i.boolean=e,i;if(ro(e,t,r),oo(e,t,r),e.$schema!==void 0&&(t!==""||e.$schema!==_t&&e.$schema!==`${_t}#`)&&_(r,t,"$schema",t===""?`unsupported dialect ${String(e.$schema)}`:"$schema is only supported at the root"),e.$id!==void 0&&typeof e.$id!="string"&&_(r,t,"$id","$id must be a string"),e.$ref!==void 0)if(typeof e.$ref!="string")_(r,t,"$ref","$ref must be a string");else{r.references+=1,r.references>r.options.maxReferences&&_(r,t,"$ref",`reference count exceeds ${r.options.maxReferences}`);let s=po(e.$ref,t,r);if(s!==void 0){let a=r.rawByPointer.get(s);a===void 0?_(r,t,"$ref",`unresolved local reference ${e.$ref}`):i.ref=ce(a,s,n+1,r)}}if(i.types=io(e.type,t,r),e.enum!==void 0){let s=e.enum;!Array.isArray(s)||s.length===0?_(r,t,"enum","enum must be a non-empty array"):s.some((a,d)=>s.some((u,l)=>l<d&&Pe(a,u)))?_(r,t,"enum","enum values must be unique"):s.some(a=>Ct(a))?_(r,t,"enum","enum values must be JSON values"):i.enumValues=s}if(Object.prototype.hasOwnProperty.call(e,"const")&&(Ct(e.const)?_(r,t,"const","const must be a JSON value"):(i.hasConst=!0,i.constValue=e.const)),i.multipleOf=lo(e.multipleOf,t,"multipleOf",r),i.maximum=$e(e.maximum,t,"maximum",r),i.exclusiveMaximum=$e(e.exclusiveMaximum,t,"exclusiveMaximum",r),i.minimum=$e(e.minimum,t,"minimum",r),i.exclusiveMinimum=$e(e.exclusiveMinimum,t,"exclusiveMinimum",r),i.maxLength=se(e.maxLength,t,"maxLength",r),i.minLength=se(e.minLength,t,"minLength",r),i.minItems=se(e.minItems,t,"minItems",r),i.maxItems=se(e.maxItems,t,"maxItems",r),i.minContains=se(e.minContains,t,"minContains",r),i.maxContains=se(e.maxContains,t,"maxContains",r),i.minProperties=se(e.minProperties,t,"minProperties",r),i.maxProperties=se(e.maxProperties,t,"maxProperties",r),uo(i,t,r),e.pattern!==void 0)if(typeof e.pattern!="string")_(r,t,"pattern","pattern must be a string");else{let s=kt(e.pattern,r.options.maxPatternLength);s?i.pattern={source:e.pattern,regex:s}:_(r,t,"pattern","pattern is invalid or outside the safe regex subset")}if(e.format!==void 0&&(typeof e.format!="string"?_(r,t,"format","format must be a string"):r.options.assertFormats&&!wn.has(e.format)?_(r,t,"format",`unsupported asserted format ${e.format}`):i.format=e.format),i.prefixItems=We(e.prefixItems,t,"prefixItems",n,r,!0),i.items=Qe(e.items,t,"items",n,r),i.contains=Qe(e.contains,t,"contains",n,r),(e.minContains!==void 0||e.maxContains!==void 0)&&e.contains===void 0&&_(r,t,"contains","minContains/maxContains require contains"),e.uniqueItems!==void 0&&(typeof e.uniqueItems!="boolean"?_(r,t,"uniqueItems","uniqueItems must be boolean"):i.uniqueItems=e.uniqueItems),i.properties=so(e.properties,t,"properties",n,r),i.patternProperties=ao(e.patternProperties,t,n,r),i.additionalProperties=Qe(e.additionalProperties,t,"additionalProperties",n,r),i.required=Pn(e.required,t,"required",r,!0),i.dependentRequired=co(e.dependentRequired,t,r),i.allOf=We(e.allOf,t,"allOf",n,r,!1),i.anyOf=We(e.anyOf,t,"anyOf",n,r,!1),i.oneOf=We(e.oneOf,t,"oneOf",n,r,!1),i.not=Qe(e.not,t,"not",n,r),B(e.$defs))for(let[s,a]of Object.entries(e.$defs))ce(a,ne(t,"$defs",s),n+1,r);return i}function ro(e,t,n){if(n.options.strictKeywords)for(let r of Object.keys(e))!eo.has(r)&&!r.startsWith("x-")&&_(n,t,r,`unsupported keyword ${r}`)}function oo(e,t,n){for(let r of["$comment","title","description"])e[r]!==void 0&&typeof e[r]!="string"&&_(n,t,r,`${r} must be a string`);for(let r of["deprecated","readOnly","writeOnly"])e[r]!==void 0&&typeof e[r]!="boolean"&&_(n,t,r,`${r} must be boolean`);e.examples!==void 0&&!Array.isArray(e.examples)&&_(n,t,"examples","examples must be an array")}function io(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"||!Yr.has(o))){_(n,t,"type","type must be a recognized type or non-empty unique type array");return}return new Set(r).size!==r.length&&_(n,t,"type","type array must not contain duplicates"),r}function Qe(e,t,n,r,o){if(e!==void 0)return ce(e,ne(t,n),r+1,o)}function We(e,t,n,r,o,i){if(e!==void 0){if(!Array.isArray(e)||!i&&e.length===0){_(o,t,n,`${n} must be ${i?"an array":"a non-empty array"} of schemas`);return}return e.map((s,a)=>ce(s,ne(t,n,String(a)),r+1,o)).filter(s=>!!s)}}function so(e,t,n,r,o){if(e===void 0)return;if(!B(e)){_(o,t,n,`${n} must be an object of schemas`);return}let i=new Map;for(let[s,a]of Object.entries(e)){let d=ce(a,ne(t,n,s),r+1,o);d&&i.set(s,d)}return i}function ao(e,t,n,r){if(e===void 0)return;if(!B(e)){_(r,t,"patternProperties","patternProperties must be an object of schemas");return}let o=[];for(let[i,s]of Object.entries(e)){let a=kt(i,r.options.maxPatternLength);if(!a){_(r,t,"patternProperties",`pattern ${JSON.stringify(i)} is invalid or outside the safe regex subset`);continue}let d=ce(s,ne(t,"patternProperties",i),n+1,r);d&&o.push({pattern:{source:i,regex:a},schema:d})}return o}function co(e,t,n){if(e===void 0)return;if(!B(e)){_(n,t,"dependentRequired","dependentRequired must be an object");return}let r=new Map;for(let[o,i]of Object.entries(e)){let s=Pn(i,ne(t,"dependentRequired",o),"dependentRequired",n,!0);s&&r.set(o,s)}return r}function Pn(e,t,n,r,o){if(e!==void 0){if(!Array.isArray(e)||e.some(i=>typeof i!="string")){_(r,t,n,`${n} must be an array of strings`);return}return o&&new Set(e).size!==e.length&&_(r,t,n,`${n} values must be unique`),e}}function lo(e,t,n,r){let o=$e(e,t,n,r);return o!==void 0&&o<=0&&_(r,t,n,`${n} must be greater than zero`),o!==void 0&&o>0?o:void 0}function $e(e,t,n,r){if(e!==void 0){if(typeof e!="number"||!Number.isFinite(e)){_(r,t,n,`${n} must be a finite number`);return}return e}}function se(e,t,n,r){if(e!==void 0){if(!Number.isSafeInteger(e)||e<0){_(r,t,n,`${n} must be a non-negative safe integer`);return}return e}}function uo(e,t,n){for(let[r,o,i]of[[e.minLength,e.maxLength,"length"],[e.minItems,e.maxItems,"items"],[e.minContains,e.maxContains,"contains"],[e.minProperties,e.maxProperties,"properties"]])r!==void 0&&o!==void 0&&r>o&&_(n,t,i,`minimum ${i} exceeds maximum`)}function po(e,t,n){if(!e.startsWith("#")){_(n,t,"$ref","remote and file references are not supported");return}if(e==="#")return"";if(e.startsWith("#/")){let s=`/${e.slice(2).split("/").map(a=>a.replace(/~1/g,"/").replace(/~0/g,"~")).map(Rn).join("/")}`;return n.rawByPointer.has(s)||_(n,t,"$ref",`unresolved JSON Pointer ${e}`),s}let r=e.slice(1),o=n.anchors.get(r);return o===void 0&&_(n,t,"$ref",`unresolved anchor ${e}`),o}function te(e,t,n,r,o){if(!xn(o)||o.errors.length>=o.options.maxValidationErrors)return;if(r>o.options.maxValidationDepth){E(o,n,"maxDepth",t,`validation depth exceeds ${o.options.maxValidationDepth}`);return}if(t.boolean!==void 0){t.boolean||E(o,n,"falseSchema",t,"is rejected by the false schema");return}let i=bo(t,e,o);if(!o.activePairs.has(i)){o.activePairs.add(i);try{if(t.ref&&te(e,t.ref,n,r+1,o),t.enumValues&&!t.enumValues.some(s=>Pe(s,e))&&E(o,n,"enum",t,`expected one of ${t.enumValues.map(Tt).join(", ")} but got ${Pt(e)}`),t.hasConst&&!Pe(t.constValue,e)&&E(o,n,"const",t,`expected ${Tt(t.constValue)} but got ${Pt(e)}`),t.types&&!t.types.some(s=>wo(e,s))){let s=t.types.length===1?t.types[0]:`one of [${t.types.join(", ")}]`;E(o,n,"type",t,`expected type ${s} but got ${Pt(e)}`);return}mo(e,t,n,r,o),typeof e=="number"&&fo(e,t,n,o),typeof e=="string"&&go(e,t,n,o),Array.isArray(e)&&yo(e,t,n,r,o),B(e)&&ho(e,t,n,r,o)}finally{o.activePairs.delete(i)}}}function mo(e,t,n,r,o){for(let i of t.allOf??[])te(e,i,n,r+1,o);if(t.anyOf&&t.anyOf.filter(s=>Ye(e,s,n,r+1,o)).length===0&&E(o,n,"anyOf",t,"must match at least one anyOf branch"),t.oneOf){let i=t.oneOf.filter(s=>Ye(e,s,n,r+1,o)).length;i!==1&&E(o,n,"oneOf",t,`must match exactly one oneOf branch; matched ${i}`)}t.not&&Ye(e,t.not,n,r+1,o)&&E(o,n,"not",t,"must not match the disallowed schema")}function fo(e,t,n,r){t.multipleOf!==void 0&&!xo(e,t.multipleOf)&&E(r,n,"multipleOf",t,`must be a multiple of ${t.multipleOf}`),t.maximum!==void 0&&e>t.maximum&&E(r,n,"maximum",t,`must be <= ${t.maximum}`),t.exclusiveMaximum!==void 0&&e>=t.exclusiveMaximum&&E(r,n,"exclusiveMaximum",t,`must be < ${t.exclusiveMaximum}`),t.minimum!==void 0&&e<t.minimum&&E(r,n,"minimum",t,`must be >= ${t.minimum}`),t.exclusiveMinimum!==void 0&&e<=t.exclusiveMinimum&&E(r,n,"exclusiveMinimum",t,`must be > ${t.exclusiveMinimum}`)}function go(e,t,n,r){let o=[...e].length;if(t.minLength!==void 0&&o<t.minLength&&E(r,n,"minLength",t,`must contain at least ${t.minLength} Unicode code points`),t.maxLength!==void 0&&o>t.maxLength&&E(r,n,"maxLength",t,`must contain at most ${t.maxLength} Unicode code points`),t.pattern&&!t.pattern.regex.test(e)&&E(r,n,"pattern",t,`must match pattern ${JSON.stringify(t.pattern.source)}`),t.format&&r.options.assertFormats){let i=wn.get(t.format);i&&!i(e,r.options)&&E(r,n,"format",t,`must match format ${t.format}`)}}function yo(e,t,n,r,o){if(t.minItems!==void 0&&e.length<t.minItems&&E(o,n,"minItems",t,`must contain at least ${t.minItems} items`),t.maxItems!==void 0&&e.length>t.maxItems&&E(o,n,"maxItems",t,`must contain at most ${t.maxItems} items`),t.uniqueItems)e:for(let s=0;s<e.length;s+=1)for(let a=0;a<s;a+=1){if(!xn(o))break e;if(Pe(e[s],e[a])){E(o,H(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&&te(e[a],s,H(n,String(a)),r+1,o)}),t.items)for(let s=i;s<e.length;s+=1)te(e[s],t.items,H(n,String(s)),r+1,o);if(t.contains){let s=0;for(let d=0;d<e.length;d+=1)Ye(e[d],t.contains,H(n,String(d)),r+1,o)&&(s+=1);let a=t.minContains??1;s<a&&E(o,n,"minContains",t,`contains matched ${s} items; minimum is ${a}`),t.maxContains!==void 0&&s>t.maxContains&&E(o,n,"maxContains",t,`contains matched ${s} items; maximum is ${t.maxContains}`)}}function ho(e,t,n,r,o){let i=Object.keys(e);t.minProperties!==void 0&&i.length<t.minProperties&&E(o,n,"minProperties",t,`must contain at least ${t.minProperties} properties`),t.maxProperties!==void 0&&i.length>t.maxProperties&&E(o,n,"maxProperties",t,`must contain at most ${t.maxProperties} properties`);for(let s of t.required??[])Object.prototype.hasOwnProperty.call(e,s)||E(o,H(n,s),"required",t,"is required");for(let[s,a]of t.dependentRequired??[])if(Object.prototype.hasOwnProperty.call(e,s))for(let d of a)Object.prototype.hasOwnProperty.call(e,d)||E(o,H(n,d),"dependentRequired",t,`is required when ${s} is present`);for(let s of i){let a=!1,d=t.properties?.get(s);d&&(a=!0,te(e[s],d,H(n,s),r+1,o));for(let u of t.patternProperties??[])u.pattern.regex.test(s)&&(a=!0,te(e[s],u.schema,H(n,s),r+1,o));!a&&t.additionalProperties&&te(e[s],t.additionalProperties,H(n,s),r+1,o)}}function Ye(e,t,n,r,o){let i={...o,errors:[],activePairs:new Set(o.activePairs)};return te(e,t,n,r,i),i.errors.length===0&&!i.budget.exhausted}function xn(e){return e.budget.steps+=1,e.budget.steps<=e.options.maxValidationSteps?!0:(e.budget.exhausted||(e.budget.exhausted=!0,E(e,"","maxValidationSteps",{schemaPath:"#"},`validation steps exceed ${e.options.maxValidationSteps}`)),!1)}function E(e,t,n,r,o){e.errors.length>=e.options.maxValidationErrors||e.errors.push({path:t,keyword:n,schemaPath:r.schemaPath,message:o})}function bo(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}:${Tt(t)}`}function wo(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 B(e);case"null":return e===null}}function Ct(e){let t=new WeakSet,n=(r,o)=>{if(r===null||typeof r=="string"||typeof r=="boolean")return;if(typeof r=="number")return Number.isFinite(r)?void 0:{path:o,message:"must be a finite JSON number"};if(typeof r!="object")return{path:o,message:`must be a JSON value, not ${typeof r}`};if(t.has(r))return{path:o,message:"must not contain cyclic references"};t.add(r);let i=Array.isArray(r)?r.entries():Object.entries(r);for(let[s,a]of i){let d=n(a,H(o,String(s)));if(d)return d}t.delete(r)};return n(e,"")}function kt(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 _n(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 Cn(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 vo(e){let t=/^([^Tt ]+)[Tt ](.+)$/u.exec(e);return!!(t&&_n(t[1])&&Cn(t[2]))}function yn(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(n=>n.length>0&&n.length<=63&&!n.startsWith("-")&&!n.endsWith("-")&&/^[\p{L}\p{N}-]+$/u.test(n))}function hn(e){try{return!!(new URL(e).protocol&&!/\s/u.test(e))}catch{return!1}}function bn(e){try{return new URL(e,"https://xeno.invalid/"),!/\s/u.test(e)}catch{return!1}}function Po(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 xo(e,t){let n=e/t;return Math.abs(n-Math.round(n))<=Number.EPSILON*Math.max(1,Math.abs(n))*8}function B(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}function Pe(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)=>Pe(n,t[r]));if(B(e)&&B(t)){let n=Object.keys(e),r=Object.keys(t);return n.length===r.length&&n.every(o=>Object.prototype.hasOwnProperty.call(t,o)&&Pe(e[o],t[o]))}return!1}function H(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 ne(e,...t){return`${e}/${t.map(Rn).join("/")}`}function Rn(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function Tn(e){return e.length===0?"#":`#${e}`}function _(e,t,n,r){e.issues.length>=64||e.issues.push({path:Tn(t),...n?{keyword:n}:{},message:r})}function Pt(e){return e===null?"null":Array.isArray(e)?"array":typeof e=="number"?Number.isSafeInteger(e)?"integer":"number":typeof e}function Tt(e){try{let t=JSON.stringify(e);return t===void 0?String(e):t}catch{return String(e)}}var A=class extends Error{dialect;path;constructor(t,n,r){super(`Tool schema cannot be projected to ${t} at ${n}: ${r}`),this.name="ToolSchemaProjectionError",this.dialect=t,this.path=n}},kn=new Set(["$schema","$id","$anchor","$defs","$comment","title","default","examples","deprecated","readOnly","writeOnly"]),_o=new Set(["type","description","enum","format","properties","required","items","minItems","maxItems","minLength","maxLength","minimum","maximum","anyOf"]);function St(e,t){vn(e);let n=Et(e),r=n,o=En(n);if(t==="xeno"||t==="google-json-schema")return{schema:n,dialect:t,canonicalSha256:o,projectedSha256:o,changes:[]};let i={dialect:t,root:r,pointers:new Map,anchors:new Map,changes:[],activeReferences:new Set};tt(r,"",i);let s=le(r,"#",i);if(!xe(s))throw new A(t,"#","provider tool root must remain an object schema");return Co(n,s,t),{schema:s,dialect:t,canonicalSha256:o,projectedSha256:En(s),changes:i.changes}}function _e(e,t){return e.map(n=>{let r=St(n.input_schema,t);return{definition:{...n,input_schema:r.schema},projection:r}})}function le(e,t,n){if(typeof e=="boolean"){if(n.dialect!=="google")return e;if(e)return{};throw new A(n.dialect,t,"false schemas are not representable by this provider")}if(n.dialect==="google"&&Object.prototype.hasOwnProperty.call(e,"const")&&Array.isArray(e.enum)&&!e.enum.some(o=>Ne(o)===Ne(e.const)))throw new A(n.dialect,t,"empty const and enum intersection cannot be represented by the legacy dialect; use parametersJsonSchema");if(typeof e.$ref=="string"){let o=Ro(e.$ref,t,n);if(n.activeReferences.has(e.$ref))throw new A(n.dialect,t,`recursive reference ${e.$ref} cannot be serialized safely`);let i=Object.fromEntries(Object.entries(e).filter(([a])=>a!=="$ref"&&!kn.has(a)));if(Object.keys(i).length>0){if(n.dialect==="google")throw new A(n.dialect,t,"$ref siblings require an unsupported intersection");n.activeReferences.add(e.$ref);let a=le(o,`${t}/$ref`,n);n.activeReferences.delete(e.$ref);let d=le(i,t,n);return n.changes.push({path:t,keyword:"$ref",action:"transformed",reason:"inlined local reference with sibling intersection"}),{allOf:[a,d]}}n.activeReferences.add(e.$ref);let s=le(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(kn.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"&&!_o.has(o)){if(o==="const"){if(i===null)throw new A(n.dialect,t,"null const cannot be represented by the provider schema dialect");if(typeof i!="string")throw new A(n.dialect,t,"non-string const cannot be represented by the legacy dialect; use parametersJsonSchema");r.enum=[Et(i)],n.changes.push({path:t,keyword:o,action:"transformed",reason:"Google wire schema represents const as a single-value enum"});continue}throw o==="prefixItems"?new A(n.dialect,t,"tuple prefixItems cannot preserve the provider structural contract"):new A(n.dialect,t,`assertion ${o} cannot be represented without weakening; use parametersJsonSchema`)}if(o==="type"&&n.dialect==="google"&&Array.isArray(i)){let s=i.filter(a=>a!=="null");if(s.length!==1||i.length!==2)throw new A(n.dialect,t,"type union cannot be represented without weakening structure");r.type=s[0],r.nullable=!0,n.changes.push({path:t,keyword:o,action:"transformed",reason:"nullable two-type union mapped to Google nullable"});continue}if(o==="enum"&&n.dialect==="google"&&Array.isArray(i)&&i.some(s=>s===null))throw new A(n.dialect,t,"null enum values cannot be represented by the provider schema dialect");if(o==="enum"&&n.dialect==="google"&&Array.isArray(i)&&i.some(s=>typeof s!="string"))throw new A(n.dialect,t,"non-string enum values cannot be represented by the legacy dialect; use parametersJsonSchema");if(!(o==="enum"&&n.dialect==="google"&&Object.prototype.hasOwnProperty.call(e,"const"))){if(o==="properties"||o==="patternProperties"||o==="$defs"){if(!xe(i))throw new A(n.dialect,t,`${o} must be an object`);let s={};for(let[a,d]of Object.entries(i))s[a]=le(d,`${t}/${o}/${At(a)}`,n);r[o]=s;continue}if(["items","contains","additionalProperties","not"].includes(o)){r[o]=le(i,`${t}/${o}`,n);continue}if(["prefixItems","allOf","anyOf","oneOf"].includes(o)){if(!Array.isArray(i))throw new A(n.dialect,t,`${o} must be an array`);r[o]=i.map((s,a)=>le(s,`${t}/${o}/${a}`,n));continue}r[o]=Et(i)}}if(n.dialect==="google"){let o=e.type!==void 0||e.properties!==void 0||e.items!==void 0,i=r.type!==void 0||r.properties!==void 0||r.items!==void 0;if(!o&&(e.oneOf!==void 0||e.allOf!==void 0||e.not!==void 0)||o&&!i)throw new A(n.dialect,t,"minimum structural contract cannot be represented")}return r}function Co(e,t,n){if(t.type!=="object"||!xe(t.properties))throw new A(n,"#","root object/properties contract changed");let r=Object.keys(e.properties).sort(),o=Object.keys(t.properties).sort();if(JSON.stringify(r)!==JSON.stringify(o))throw new A(n,"#","root property identity changed");let i=[...e.required??[]].sort(),s=Array.isArray(t.required)?[...t.required].sort():[];if(JSON.stringify(i)!==JSON.stringify(s))throw new A(n,"#","root required-property contract changed")}function tt(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(xe(o))for(let[i,s]of Object.entries(o))tt(s,`${t}/${r}/${At(i)}`,n)}for(let r of["items","contains","additionalProperties","not"]){let o=e[r];(typeof o=="boolean"||xe(o))&&tt(o,`${t}/${r}`,n)}for(let r of["prefixItems","allOf","anyOf","oneOf"]){let o=e[r];Array.isArray(o)&&o.forEach((i,s)=>tt(i,`${t}/${r}/${s}`,n))}}}function Ro(e,t,n){if(!e.startsWith("#"))throw new A(n.dialect,t,"remote references are forbidden");if(e==="#")return n.root;if(e.startsWith("#/")){let r=e.slice(1).split("/").map(i=>i.replace(/~1/g,"/").replace(/~0/g,"~")).map(At).join("/"),o=n.pointers.get(r);if(o!==void 0)return o}else{let r=n.anchors.get(e.slice(1));if(r!==void 0)return r}throw new A(n.dialect,t,`unresolved reference ${e}`)}function En(e){return(0,Sn.createHash)("sha256").update(Ne(e)).digest("hex")}function Ne(e){return Array.isArray(e)?`[${e.map(Ne).join(",")}]`:xe(e)?`{${Object.keys(e).sort().map(t=>`${JSON.stringify(t)}:${Ne(e[t])}`).join(",")}}`:JSON.stringify(e)}function Et(e){return JSON.parse(JSON.stringify(e))}function At(e){return e.replace(/~/g,"~0").replace(/\//g,"~1")}function xe(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)}var In=require("node:crypto"),It=/^[a-zA-Z0-9_-]{1,64}$/,An=64;function To(e){return(0,In.createHash)("sha256").update(e).digest("hex").slice(0,8)}function ko(e){return e.replace(/\./g,"__").replace(/[^a-zA-Z0-9_-]/g,"_")}function De(e){let t=new Map,n=new Map,r=[...new Set(e)];for(let o of r)It.test(o)&&(t.set(o,o),n.set(o,o));for(let o of[...r].sort()){if(t.has(o))continue;let i=ko(o);if(i.length>An||n.has(i)||i.length===0){let s=`_${To(o)}`;i=`${i.slice(0,An-s.length)}${s}`}t.set(o,i),n.set(i,o)}return{encode:o=>t.get(o)??o,decode:o=>n.get(o)??o}}function Ln(e,t,n){if(!(e instanceof Error))return e;let r=[...new Set(t)].map(i=>[n.encode(i),i]).filter(([i,s])=>i!==s).sort((i,s)=>s[0].length-i[0].length);if(r.length===0)return e;let o=i=>r.reduce((s,[a,d])=>s.replace(new RegExp(`(?<![A-Za-z0-9_-])${a.replace(/[-]/g,"-")}(?![A-Za-z0-9_-])`,"g"),d),i);for(let i of["message","stack"]){let s=e[i];if(typeof s!="string")continue;let a=o(s);a!==s&&Object.defineProperty(e,i,{value:a,writable:!0,configurable:!0,enumerable:!1})}return e}var Lt=require("node:crypto");async function On(e,t,n=3e4){t?.throwIfAborted();let r=new AbortController,o=setTimeout(()=>r.abort(new DOMException("Operation acknowledgement timed out.","TimeoutError")),n),i=t?AbortSignal.any([t,r.signal]):r.signal,s;try{let a=await new Promise((d,u)=>{s=()=>u(i.reason),i.addEventListener("abort",s,{once:!0}),Promise.resolve().then(()=>(i.throwIfAborted(),e(i))).then(d,u)});return i.throwIfAborted(),a}finally{s&&i.removeEventListener("abort",s),clearTimeout(o)}}var T=class extends Error{constructor(n,r){super(r);this.code=n;this.name="QuotaError"}code;retryable=!1},nt=class extends Error{constructor(n,r,o){let i=o instanceof b?` (${o.category}${o.statusCode?` HTTP ${o.statusCode}`:""})`:"";super(n==="prepare"?`Quota preparation failed before any reservation${i}.`:`Quota ${n} did not acknowledge; reconcile reservation ${r} before retrying.`,{cause:o});this.phase=n;this.reservationId=r;this.name="QuotaAcknowledgementError"}phase;reservationId;code="ACKNOWLEDGEMENT_FAILED";retryable=!1};function $n(e){return e instanceof Error&&(e.name==="QuotaError"||e.name==="QuotaAcknowledgementError")&&"retryable"in e&&e.retryable===!1&&"code"in e&&typeof e.code=="string"}function S(e){if(typeof e!="number"||!Number.isSafeInteger(e)||e<0)throw new T("INVALID","Quota counters must be non-negative safe integers.");return e}function U(e){if(typeof e!="string"||!e.trim()||e.length>512)throw new T("INVALID","Invalid quota identity.");return e}function G(e){let t=n=>({id:U(n?.id),generation:U(n?.generation)});if(!e||e.agent&&!e.team)throw new T("INVALID","A child quota scope requires its complete ancestry.");return{workspace:t(e.workspace),...e.team?{team:t(e.team)}:{},...e.agent?{agent:t(e.agent)}:{},...e.goal!==void 0?{goal:t(e.goal)}:{}}}function V(e){return JSON.stringify(G(e))}function Ce(e){let t=G(e),n=[{workspace:t.workspace},...t.team?[{workspace:t.workspace,team:t.team}]:[],...t.agent?[{workspace:t.workspace,team:t.team,agent:t.agent}]:[]];return t.goal?n.flatMap(r=>[r,{...r,goal:t.goal}]):n}var Mn=Symbol.for("@xenosystem/agent-sdk/quota-provider-layers-v1");function Eo(e,t,n,r={}){let o=G(n),i=e[Mn],s=i?.provider??e,a=[...i?.layers??[],{authority:t,scope:o,soft:r.enforcement==="soft"}];async function d(l,c,m,p,f,y){if(f?.throwIfAborted(),!s.prepareQuotaRequest)throw new T("UNSUPPORTED","This provider cannot guarantee per-request token bounds.");let h=U(y?.attemptId),P=(0,Lt.createHash)("sha256").update(JSON.stringify([s.id,l,c,m,y?.systemPrompt??""])).digest("hex"),v=a.map(k=>({...k,id:(0,Lt.createHash)("sha256").update(JSON.stringify([V(k.scope),s.id,h])).digest("hex"),reserved:!1,dispatchStarted:!1})),x=async(k,M,X,D=f,F=3e4)=>{try{return await On(X,D,F)}catch(W){throw $n(W)?W:M==="prepare"&&W instanceof b&&W.category==="unsupported_capability"?new T("UNSUPPORTED","This provider cannot enforce the requested per-request token ceiling."):new nt(M,k,W)}},w=y?.quotaRemainingTokens??null;for(let k of v){let M=k.authority.remainingTokens?await x(k.id,"prepare",()=>k.authority.remainingTokens(k.scope)):null;M!==null&&(w=w===null?M:Math.min(w,M))}let R=w===null?y:{...y,systemPrompt:y?.systemPrompt??"",quotaRemainingTokens:w},I=await x(v[0].id,"prepare",k=>s.prepareQuotaRequest(l,structuredClone(c),structuredClone(m),R,k),f,12e4),fe=S(S(I.inputTokensUpperBound)+S(I.outputTokensUpperBound)),Se=I.basis==="estimated";if(I.basis!=="provider-enforced"&&!(a.every(k=>k.soft)&&Se))throw new T("UNSUPPORTED","Estimated token bounds cannot enforce a hard quota.");try{for(let k of v)await x(k.id,"reserve",()=>k.authority.reserve({id:k.id,scope:k.scope,requestHash:P,reservedTokens:fe,...Se?{basis:"estimated"}:{}})),k.reserved=!0;f?.throwIfAborted();for(let k of v)k.dispatchStarted=!0,await x(k.id,"dispatch",()=>k.authority.dispatch(k.id));f?.throwIfAborted()}catch(k){for(let M of v.filter(X=>X.reserved&&!X.dispatchStarted).reverse())await x(M.id,"void",()=>M.authority.void(M.id),new AbortController().signal);throw k}let ge=await I.execute(p,f);if(f?.throwIfAborted(),ge.usageReported){let k=S(ge.inputTokens),M=S(ge.outputTokens);if(!Se&&k>I.inputTokensUpperBound||M>I.outputTokensUpperBound)throw new T("CORRUPT","Provider exceeded its guaranteed token bound; reservation requires reconciliation.");let X;for(let D of v)try{await x(D.id,"settle",()=>D.authority.settle(D.id,S(k+M)))}catch(F){X??=F}if(X)throw X}return ge}let u={id:s.id,...s.model?{model:s.model}:{},...s.capabilities?{capabilities:s.capabilities}:{},complete:d,completeLocal:d};return Object.defineProperty(u,Mn,{value:{provider:s,layers:a}}),u}var So={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 jn(e){let t=e.kind==="anthropic"?"https://api.anthropic.com":e.kind==="google"?"https://generativelanguage.googleapis.com":e.kind==="openai-responses"?"https://api.openai.com":null;if(!e.baseURL&&!t)throw new b("Generic OpenAI-compatible providers require baseURL",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let n=de(e.baseURL??t,{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname});return n.pathname=n.pathname.replace(/\/$/,""),n}function ae(e,t){let n=new URL(e.toString());return n.pathname=`${n.pathname.replace(/\/$/,"")}/${t.replace(/^\//,"")}`,n}function Ot(e){let t=e.authentication??{type:"bearer"};if(t.type==="none"||!e.apiKey)return{};if(t.type==="bearer")return{authorization:`Bearer ${e.apiKey}`};let n=t.header.trim().toLowerCase(),r=new Set(["host","content-length","connection","transfer-encoding","cookie","set-cookie","proxy-authorization"]);if(!/^[a-z0-9-]{1,80}$/.test(n)||r.has(n))throw new b("Generic provider authentication header is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});let o=t.prefix??"";if(/[\r\n]/.test(o))throw new b("Generic provider authentication prefix is invalid",{category:"endpoint_policy",code:"PROVIDER_ENDPOINT_REJECTED"});return{[n]:`${o}${e.apiKey}`}}function Ao(e){let t;if(e.kind==="openai-compatible"){if(!e.capabilityProfile)throw new b("Generic OpenAI-compatible providers require an explicit capabilityProfile",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"});t={...e.capabilityProfile};for(let n of["structuredOutput","promptCaching"])if(t[n])throw j("direct-openai-compatible",n);if(t.customToolGrammarsGbnfStreaming&&!t.customToolGrammarsGbnf)throw j("direct-openai-compatible","streaming custom tools without GBNF support");if(t.streaming&&t.customToolGrammarsGbnf&&!t.customToolGrammarsGbnfStreaming)throw j("direct-openai-compatible","streamed grammar-constrained tools");if(!!e.streaming!=!!t.streaming)throw new b("Generic endpoint streaming config must match capabilityProfile.streaming",{category:"unsupported_capability",code:"PROVIDER_CAPABILITY_UNSUPPORTED"})}else t={...So[e.kind],streaming:!!e.streaming,reasoningMetadata:e.kind==="anthropic"&&!!e.streaming};return{...t,vision:t.imageInput}}function je(e,t){return{providerId:t,endpointPolicy:{profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},limits:e.transportLimits}}function Bn(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 Be(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 Un(e){return e.filter(t=>t?.type==="image_url")}function Xn(e){return e.some(t=>Array.isArray(t.content)&&t.content.some(n=>n.type==="image_url"||n.type==="tool_result"&&Be(n).length>0))}function Nn(e){let t=Bn(e.image_url.url);return t?{type:"image",source:{type:"base64",media_type:t.mediaType,data:t.data}}:{type:"image",source:{type:"url",url:e.image_url.url}}}function Io(e){return e.map(t=>({role:t.role,content:typeof t.content=="string"?t.content:t.content.flatMap(n=>{if(n.type==="image_url")return[Nn(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=Be(n),o=[{type:"text",text:Ie(n.content)}];return o.push(...r.map(Nn)),[{type:"tool_result",tool_use_id:n.tool_use_id,content:o,is_error:n.is_error}]})}))}function Lo(e){return{type:"input_image",image_url:e.image_url.url,detail:e.image_url.detail??"auto"}}function Oo(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=[...Un(n.content),...n.content.flatMap(i=>i.type==="tool_result"?Be(i):[])];(r||o.length)&&t.push({role:n.role,content:[...r?[{type:"input_text",text:r}]:[],...o.map(Lo)]});for(let i of n.content)i.type==="tool_use"?t.push({type:"function_call",call_id:i.id,name:i.name,arguments:JSON.stringify(i.input)}):i.type==="tool_result"&&t.push({type:"function_call_output",call_id:i.tool_use_id,output:Ie(i.content)})}return t}function Dn(e){let t=Bn(e.image_url.url);return t?{inlineData:{mimeType:t.mediaType,data:t.data}}:{fileData:{fileUri:e.image_url.url}}}function Mo(e){let t=new Map;for(let n of e)if(Array.isArray(n.content))for(let r of n.content)r.type==="tool_use"&&t.set(r.id,r.name);return e.map(n=>typeof n.content=="string"?{role:n.role==="assistant"?"model":"user",parts:[{text:n.content}]}:{role:n.role==="assistant"?"model":"user",parts:n.content.flatMap(r=>{if(r.type==="image_url")return[Dn(r)];if(r.type==="text")return[{text:r.text}];if(r.type==="tool_use")return[{functionCall:{id:r.id,name:r.name,args:r.input},...r.provider_metadata?.thoughtSignature?{thoughtSignature:r.provider_metadata.thoughtSignature}:{}}];let o=Ie(r.content);return[{functionResponse:{id:r.tool_use_id,name:t.get(r.tool_use_id)??"unknown_tool",response:r.is_error?{error:o}:{result:o}}},...Be(r).map(Dn)]})})}function Jn(e,t,n=!1){let r=t?[{role:"system",content:t}]:[];for(let o of e){if(typeof o.content=="string"){r.push({role:o.role,content:o.content});continue}let i=o.content.filter(d=>d.type==="text").map(d=>d.text).join(`
9
+ `),s=o.content.filter(d=>d.type==="tool_use").map(d=>{let u=d.provider_metadata?.customInputField;return n&&typeof u=="string"&&typeof d.input[u]=="string"?{id:d.id,type:"custom",custom:{name:d.name,input:d.input[u]}}:{id:d.id,type:"function",function:{name:d.name,arguments:JSON.stringify(d.input)}}});(i||s.length)&&r.push({role:o.role,content:i||null,...s.length?{tool_calls:s}:{}});for(let d of o.content)d.type==="tool_result"&&r.push({role:"tool",tool_call_id:d.tool_use_id,content:Ie(d.content)});let a=[...Un(o.content),...o.content.flatMap(d=>d.type==="tool_result"?Be(d):[])];a.length&&r.push({role:"user",content:a.map(d=>({type:"image_url",image_url:{url:d.image_url.url,detail:d.image_url.detail??"auto"}}))})}return r}function qn(e,t,n,r,o,i,s=!1,a=!1,d,u,l){return{model:e,messages:Jn(t,r?.systemPrompt,s),tools:n.length>0?n.map(c=>No(c,s)):void 0,...r?.toolChoice!==void 0?{tool_choice:$o(r.toolChoice,n,s)}:{},parallel_tool_calls:a,max_tokens:o,...l?.temperature!==void 0?{temperature:l.temperature}:{},...l?.topP!==void 0?{top_p:l.topP}:{},...l?.seed!==void 0?{seed:l.seed}:{},...i!==void 0||d!==void 0||u!==void 0?{xeno:{...i!==void 0?{max_prompt_tokens:i}:{},...d!==void 0?{enable_thinking:d}:{},...u!==void 0?{tool_format:u}:{}}}:{}}}function $o(e,t,n){if(typeof e=="string"){if(!["auto","none","required"].includes(e)||e==="required"&&t.length===0)throw g("direct-openai-compatible","invalid tool choice");return e}let r=e&&t.find(i=>i.name===e.name);if(!r)throw g("direct-openai-compatible","named tool choice must identify a declared tool");let o=n&&r.grammar?"custom":"function";return{type:o,[o]:{name:r.name}}}function No(e,t){if(t&&e.grammar){let n=e.grammar,r=e.input_schema.properties[n.inputField];if(n.syntax!=="gbnf"||typeof n.definition!="string"||!n.definition.trim()||Buffer.byteLength(n.definition)>64*1024||n.definition.includes("\0")||Object.keys(e.input_schema.properties).length!==1||r?.type!=="string"||!e.input_schema.required?.includes(n.inputField)||e.input_schema.required.some(o=>o!==n.inputField))throw g("direct-openai-compatible",`tool ${e.name} has an invalid constrained-string contract`);return{type:"custom",custom:{name:e.name,description:e.description,format:{type:"grammar",syntax:"gbnf",definition:n.definition}}}}return{type:"function",function:{name:e.name,description:e.description,parameters:e.input_schema}}}function Vn(e,t,n,r,o){let i=t.find(s=>s.name===r)?.grammar?.inputField;if(!i)throw g(e,`custom tool call names ${r}, which was not sent as a grammar tool`);if(typeof o!="string")throw g(e,"custom tool call input must be text");return{type:"tool_use",id:n,name:r,input:{[i]:o},provider_metadata:{customInputField:i}}}function zn(e,t,n=!0){let r=new Set;for(let o of t)if(!(!n&&(o.id===void 0||o.id===""))){if(typeof o.id!="string"||o.id.length===0)throw g(e,"tool call is missing id");if(r.has(o.id))throw g(e,`duplicate tool call id ${o.id}`);r.add(o.id)}}function Do(e){return e.map(t=>({name:t.name,description:t.description,parametersJsonSchema:t.input_schema}))}function Ue(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 ot(e,t,n){return{content:e,stopReason:t,...Ue(n)}}function re(e,t,n){if(t&&typeof t=="object"&&!Array.isArray(t))return t;if(typeof t!="string")throw g(e,`${n} arguments must be JSON`);try{let r=JSON.parse(t||"{}");if(!r||typeof r!="object"||Array.isArray(r))throw new Error("arguments are not an object");return r}catch(r){throw g(e,`${n} contains malformed tool arguments`,r)}}function qo(e,t){if(!Array.isArray(t.content))throw g(e,"content must be an array");let n=t.content.flatMap(o=>{if(o.type==="text"&&typeof o.text=="string")return[{type:"text",text:o.text}];if(o.type==="tool_use"){if(!o.id||!o.name)throw g(e,"tool_use is missing id or name");return[{type:"tool_use",id:String(o.id),name:String(o.name),input:re(e,o.input??{},"tool_use")}]}return[]}),r=t.stop_reason==="tool_use"?"tool_use":t.stop_reason==="max_tokens"?"max_tokens":"end_turn";return ot(n,r,t.usage??{})}function jo(e,t){if(!Array.isArray(t.output))throw g(e,"output must be an array");let n=[];for(let i of t.output)if(i.type==="message"){if(!Array.isArray(i.content))throw g(e,"message content must be an array");for(let s of i.content)s.type==="output_text"&&typeof s.text=="string"&&n.push({type:"text",text:s.text})}else if(i.type==="function_call"){if(!i.call_id&&!i.id)throw g(e,"function_call is missing an id");if(!i.name)throw g(e,"function_call is missing a name");n.push({type:"tool_use",id:String(i.call_id??i.id),name:String(i.name),input:re(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 ot(n,r?"tool_use":o?"max_tokens":"end_turn",t.usage??{})}function Bo(e,t){if(!Array.isArray(t.candidates)||t.candidates.length===0){let s=t.promptFeedback?.blockReason;throw s?new b(`Provider safety policy refused the request: ${String(s)}`,{providerId:e,category:"safety_refusal",code:"PROVIDER_SAFETY_REFUSAL"}):g(e,"candidates must contain at least one item")}let n=t.candidates[0]??{};if(!Array.isArray(n.content?.parts))throw g(e,"candidate parts must be an array");let r=n.content.parts.flatMap((s,a)=>{if(typeof s.text=="string")return[{type:"text",text:s.text}];if(s.functionCall){let d=s.functionCall;if(!d.name)throw g(e,"functionCall is missing a name");return[{type:"tool_use",id:String(d.id??`gemini-${a}-${(0,rt.randomUUID)().slice(0,8)}`),name:String(d.name),input:re(e,d.args??{},"functionCall"),...s.thoughtSignature?{provider_metadata:{thoughtSignature:s.thoughtSignature}}:{}}]}return[]}),o=r.some(s=>s.type==="tool_use"),i=String(n.finishReason??"").includes("MAX_TOKENS");return ot(r,o?"tool_use":i?"max_tokens":"end_turn",t.usageMetadata??{})}function Fn(e,t,n=[],r=!1){if(!Array.isArray(t.choices)||t.choices.length===0)throw g(e,"choices must contain an item");let o=t.choices[0]??{},i=o.message;if(!i||typeof i!="object")throw g(e,"choice message is missing");if(i.tool_calls!==void 0&&i.tool_calls!==null&&!Array.isArray(i.tool_calls))throw g(e,"tool_calls must be an array");if(Array.isArray(i.tool_calls)&&i.tool_calls.some(u=>!u||typeof u!="object"))throw g(e,"tool_calls must contain objects");if(o.finish_reason==="error")throw g(e,"runtime reported generation failure");if(i.reasoning_content!==void 0&&i.reasoning_content!==null&&typeof i.reasoning_content!="string")throw g(e,"reasoning_content must be text");let s=[];typeof i.content=="string"&&i.content&&s.push({type:"text",text:i.content});let a=o.finish_reason==="length"||i.tool_calls?.some(u=>u.xeno_grammar?.complete===!1);if(Array.isArray(i.tool_calls)&&zn(e,i.tool_calls,!a),Array.isArray(i.tool_calls)){let u=[];for(let l of i.tool_calls){if(l.xeno_grammar!==void 0&&typeof l.xeno_grammar?.complete!="boolean")throw g(e,"grammar completion must be a boolean");if(l.type!==void 0&&l.type!=="function"&&l.type!=="custom")throw g(e,"unknown tool call kind");if(l.type==="custom"&&!r)throw g(e,"runtime returned an unnegotiated custom tool call");if(!a){if(l.type==="custom"){if(typeof l.id!="string"||!l.id||typeof l.custom?.name!="string"||!l.custom.name)throw g(e,"custom tool call is missing id or name");u.push(Vn(e,n,l.id,l.custom.name,l.custom.input));continue}if(typeof l.id!="string"||!l.id||typeof l.function?.name!="string"||!l.function.name)throw g(e,"tool call is missing id or name");if(r&&n.find(c=>c.name===l.function.name)?.grammar)throw g(e,"grammar tool returned an unnegotiated function call");u.push({type:"tool_use",id:String(l.id),name:String(l.function.name),input:re(e,l.function.arguments??"{}","tool call")})}}s.push(...u)}let d=a?"max_tokens":s.some(u=>u.type==="tool_use")?"tool_use":"end_turn";return{...ot(s,d,t.usage??{}),...typeof i.reasoning_content=="string"?{reasoningContent:i.reasoning_content}:{}}}async function C(e,t){try{await e?.onEvent?.(t)}catch{}}async function Hn(e,t,n){await C(n,{type:"message.started"}),e.reasoningContent&&await C(n,{type:"reasoning.delta",text:e.reasoningContent});let r=0;for(let o of e.content)o.type==="text"?(t?.(o.text),await C(n,{type:"text.delta",text:o.text})):o.type==="tool_use"&&(await C(n,{type:"tool_call.started",index:r,toolCallId:o.id,name:o.name}),await C(n,{type:"tool_call.completed",index:r,toolCallId:o.id,name:o.name,input:o.input}),r+=1);await C(n,{type:"usage.updated",inputTokens:e.inputTokens,outputTokens:e.outputTokens}),await C(n,{type:"message.completed",stopReason:e.stopReason})}function it(){return{content:[],inputTokens:0,outputTokens:0,usageReported:!1,stopReason:"end_turn",terminal:!1}}function qe(e,t){if(!t.terminal)throw g(e,"stream ended without a terminal event");return{content:t.content,stopReason:t.stopReason,usageReported:t.usageReported,inputTokens:t.inputTokens,outputTokens:t.outputTokens,...t.reasoningContent!==void 0?{reasoningContent:t.reasoningContent}:{}}}function st(e,t){try{let n=JSON.parse(t.data);if(!n||typeof n!="object"||Array.isArray(n))throw new Error("frame is not an object");return n}catch(n){throw g(e,`invalid stream JSON for ${t.event}`,n)}}async function Uo(e){let t=it(),n=new Map;return await Me(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},je(e.config,e.providerId),async r=>{let o=st(e.providerId,r),i=String(o.type??r.event);if(i==="message_start"){let s=Ue(o.message?.usage);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),await C(e.context,{type:"message.started",providerMessageId:o.message?.id})}else if(i==="content_block_start"){let s=Number(o.index??0),a=o.content_block??{};if(a.type==="tool_use"){let d={index:s,id:String(a.id),name:String(a.name),arguments:""};n.set(s,d),await C(e.context,{type:"tool_call.started",index:s,toolCallId:d.id,name:d.name})}else if(a.type==="text"&&a.text){let d=String(a.text);t.content.push({type:"text",text:d}),e.onText?.(d),await C(e.context,{type:"text.delta",text:d})}}else if(i==="content_block_delta"){let s=o.delta??{};if(s.type==="text_delta"){let a=String(s.text??"");if(a){let d=t.content.at(-1);d?.type==="text"?d.text+=a:t.content.push({type:"text",text:a}),e.onText?.(a),await C(e.context,{type:"text.delta",text:a})}}else if(s.type==="thinking_delta")await C(e.context,{type:"reasoning.delta",text:String(s.thinking??"")});else if(s.type==="input_json_delta"){let a=Number(o.index??0),d=n.get(a);if(!d)throw g(e.providerId,"tool argument delta arrived before tool start");let u=String(s.partial_json??"");d.arguments+=u,await C(e.context,{type:"tool_call.arguments.delta",index:a,toolCallId:d.id,delta:u})}}else if(i==="content_block_stop"){let s=Number(o.index??0),a=n.get(s);if(a){let d=re(e.providerId,a.arguments||"{}","streamed tool call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:d}),await C(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:d})}}else if(i==="message_delta"){t.outputTokens=Number(o.usage?.output_tokens??t.outputTokens);let s=o.delta?.stop_reason;t.stopReason=s==="tool_use"?"tool_use":s==="max_tokens"?"max_tokens":"end_turn",await C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}else if(i==="message_stop")t.terminal=!0,await C(e.context,{type:"message.completed",stopReason:t.stopReason});else if(i==="error")throw ee({providerId:e.providerId,error:o.error??o,outputSeen:t.content.length>0||n.size>0})}),qe(e.providerId,t)}async function Xo(e){let t=it(),n=new Map;return await Me(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0}),signal:e.signal},je(e.config,e.providerId),async r=>{if(r.data==="[DONE]")return;let o=st(e.providerId,r),i=String(o.type??r.event);if(i==="response.created")await C(e.context,{type:"message.started",providerMessageId:o.response?.id});else if(i==="response.output_text.delta"){let s=String(o.delta??""),a=t.content.at(-1);a?.type==="text"?a.text+=s:t.content.push({type:"text",text:s}),e.onText?.(s),await C(e.context,{type:"text.delta",text:s})}else if(i==="response.output_item.added"&&o.item?.type==="function_call"){let s=Number(o.output_index??n.size),a={index:s,id:String(o.item.call_id??o.item.id),name:String(o.item.name),arguments:String(o.item.arguments??"")};n.set(s,a),await C(e.context,{type:"tool_call.started",index:s,toolCallId:a.id,name:a.name})}else if(i==="response.function_call_arguments.delta"){let s=Number(o.output_index??0),a=n.get(s);if(!a)throw g(e.providerId,"tool argument delta arrived before tool start");let d=String(o.delta??"");a.arguments+=d,await C(e.context,{type:"tool_call.arguments.delta",index:s,toolCallId:a.id,delta:d})}else if(i==="response.output_item.done"&&o.item?.type==="function_call"){let s=Number(o.output_index??0),a=n.get(s)??{index:s,id:String(o.item.call_id??o.item.id),name:String(o.item.name),arguments:""},d=String(o.item.arguments??a.arguments??"{}"),u=re(e.providerId,d,"streamed function call");t.content.push({type:"tool_use",id:a.id,name:a.name,input:u}),t.stopReason="tool_use",await C(e.context,{type:"tool_call.completed",index:s,toolCallId:a.id,name:a.name,input:u})}else if(i==="response.completed"||i==="response.incomplete"){let s=o.response??{},a=Ue(s.usage??{});t.inputTokens=a.inputTokens,a.usageReported&&(t.usageReported=!0),t.outputTokens=a.outputTokens,i==="response.incomplete"&&(t.stopReason="max_tokens"),t.terminal=!0,await C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens}),await C(e.context,{type:"message.completed",stopReason:t.stopReason})}else if(i==="response.failed"||i==="error")throw ee({providerId:e.providerId,error:o.response?.error??o.error??o,outputSeen:t.content.length>0||n.size>0})}),qe(e.providerId,t)}async function Jo(e){let t=it(),n=new Map,r=!1;if(await C(e.context,{type:"message.started"}),await Me(e.url,{method:"POST",headers:e.headers,body:JSON.stringify({...e.body,stream:!0,stream_options:{include_usage:!0}}),signal:e.signal},je(e.config,e.providerId),async a=>{if(a.data==="[DONE]"){t.terminal=!0;return}let d=st(e.providerId,a);if(d.error!==void 0&&d.error!==null)throw ee({providerId:e.providerId,error:d.error,outputSeen:t.content.length>0||n.size>0});if(d.usage){let u=Ue(d.usage);t.inputTokens=u.inputTokens,u.usageReported&&(t.usageReported=!0),t.outputTokens=u.outputTokens,await C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}for(let u of d.choices??[]){let l=u.delta??{};if(l.reasoning_content!==void 0&&l.reasoning_content!==null){if(typeof l.reasoning_content!="string")throw g(e.providerId,"streamed reasoning_content must be text");t.reasoningContent=(t.reasoningContent??"")+l.reasoning_content,l.reasoning_content&&await C(e.context,{type:"reasoning.delta",text:l.reasoning_content})}if(l.tool_calls!==void 0&&l.tool_calls!==null&&!Array.isArray(l.tool_calls))throw g(e.providerId,"streamed tool_calls must be an array");if(typeof l.content=="string"&&l.content){let c=t.content.at(-1);c?.type==="text"?c.text+=l.content:t.content.push({type:"text",text:l.content}),e.onText?.(l.content),await C(e.context,{type:"text.delta",text:l.content})}for(let c of l.tool_calls??[]){if(!c||typeof c!="object")throw g(e.providerId,"tool delta must be an object");let m=Number(c.index??0);if(!Number.isSafeInteger(m)||m<0)throw g(e.providerId,"tool index must be a nonnegative integer");let p=n.get(m);if(p||(p={index:m,id:String(c.id??""),name:"",arguments:""},n.set(m,p)),c.id!==void 0){if(typeof c.id!="string"||!c.id||p.id&&p.id!==c.id)throw g(e.providerId,"streamed tool id is missing or changed");p.id=c.id}let f=c.type??p.kind??(c.custom?"custom":"function");if(f!=="function"&&f!=="custom")throw g(e.providerId,"unknown streamed tool kind");if(p.kind&&p.kind!==f)throw g(e.providerId,"streamed tool changed kind");if(f==="custom"&&!e.customGrammars)throw g(e.providerId,"runtime returned an unnegotiated custom tool delta");if(p.kind=f,c.xeno_grammar!==void 0&&typeof c.xeno_grammar?.complete!="boolean")throw g(e.providerId,"grammar completion must be a boolean");c.xeno_grammar?.complete===!1&&(p.grammarIncomplete=!0),c.function?.name&&(p.name+=String(c.function.name)),c.custom?.name&&(p.name+=String(c.custom.name));let y=f==="custom"?c.custom?.input:c.function?.arguments;if(y!==void 0&&typeof y!="string")throw g(e.providerId,"tool delta input must be text");let h=y??"";p.arguments+=h,p.id&&p.name&&!p.started&&(await C(e.context,{type:"tool_call.started",index:m,toolCallId:p.id,name:p.name}),p.started=!0),p.started&&p.arguments.length>(p.argumentsEmitted??0)&&(await C(e.context,{type:"tool_call.arguments.delta",index:m,toolCallId:p.id,delta:p.arguments.slice(p.argumentsEmitted??0)}),p.argumentsEmitted=p.arguments.length)}if(u.finish_reason){if(u.finish_reason==="error")throw g(e.providerId,"runtime reported generation failure");r=!0,t.stopReason=u.finish_reason==="length"?"max_tokens":n.size?"tool_use":"end_turn"}}}),t.terminal||qe(e.providerId,t),n.size&&!r)throw g(e.providerId,"tool stream has no finish reason");let o=t.stopReason==="max_tokens"||[...n.values()].some(a=>a.grammarIncomplete);o&&(t.stopReason="max_tokens");let i=[...n.values()].sort((a,d)=>a.index-d.index);zn(e.providerId,i,!o);let s=[];for(let a of i){if(o)continue;if(!a.name||!a.id)throw g(e.providerId,"streamed tool is missing id or name");if(a.kind!=="custom"&&e.customGrammars&&e.sentTools?.find(u=>u.name===a.name)?.grammar)throw g(e.providerId,"grammar tool returned an unnegotiated function delta");let d=a.kind==="custom"?Vn(e.providerId,e.sentTools??[],a.id,a.name,a.arguments):{type:"tool_use",id:a.id,name:a.name,input:re(e.providerId,a.arguments||"{}","streamed tool call")};if(d.type!=="tool_use")throw g(e.providerId,"invalid custom tool block");s.push({tool:a,block:d})}for(let{tool:a,block:d}of s)t.content.push(d),await C(e.context,{type:"tool_call.completed",index:a.index,toolCallId:a.id,name:a.name,input:d.input});return await C(e.context,{type:"message.completed",stopReason:t.stopReason}),qe(e.providerId,t)}async function Vo(e){let t=it(),n=0;return await C(e.context,{type:"message.started"}),await Me(e.url,{method:"POST",headers:e.headers,body:JSON.stringify(e.body),signal:e.signal},je(e.config,e.providerId),async r=>{let o=st(e.providerId,r);if(o.error!==void 0&&o.error!==null)throw ee({providerId:e.providerId,error:o.error,outputSeen:t.content.length>0});if(o.usageMetadata){let s=Ue(o.usageMetadata);t.inputTokens=s.inputTokens,s.usageReported&&(t.usageReported=!0),t.outputTokens=s.outputTokens,await C(e.context,{type:"usage.updated",inputTokens:t.inputTokens,outputTokens:t.outputTokens})}let i=o.candidates?.[0];for(let s of i?.content?.parts??[])if(typeof s.text=="string"){let a=t.content.at(-1);a?.type==="text"?a.text+=s.text:t.content.push({type:"text",text:s.text}),e.onText?.(s.text),await C(e.context,{type:"text.delta",text:s.text})}else if(s.functionCall){let a=s.functionCall,d=String(a.id??`gemini-${n}-${(0,rt.randomUUID)().slice(0,8)}`),u=String(a.name??""),l=re(e.providerId,a.args??{},"streamed function call");await C(e.context,{type:"tool_call.started",index:n,toolCallId:d,name:u}),t.content.push({type:"tool_use",id:d,name:u,input:l,...s.thoughtSignature?{provider_metadata:{thoughtSignature:s.thoughtSignature}}:{}}),await C(e.context,{type:"tool_call.completed",index:n,toolCallId:d,name:u,input:l}),n+=1}i?.finishReason&&(t.stopReason=String(i.finishReason).includes("MAX_TOKENS")?"max_tokens":n?"tool_use":"end_turn",t.terminal=!0,await C(e.context,{type:"message.completed",stopReason:t.stopReason}))}),qe(e.providerId,t)}function Gn(e){return e instanceof b?{type:"provider.error",code:e.code,category:e.category,retryable:e.retryable}:{type:"provider.error",code:"PROVIDER_TRANSPORT_ERROR",category:"transport",retryable:!1}}async function Kn(e,t={}){try{let n=new URL(e);if(!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase()))return{gbnf:!1,streaming:!1};let r=await ve(ae(n,"/v1/runtime/capabilities"),{method:"GET",signal:t.signal},{providerId:"direct-openai-compatible",endpointPolicy:{profile:"local-network"},limits:{...t.limits,maxResponseBytes:16384,connectTimeoutMs:Math.min(t.limits?.connectTimeoutMs??1e3,1e3),totalTimeoutMs:Math.min(t.limits?.totalTimeoutMs??1500,1500)}}),o=Array.isArray(r.custom_tool_grammars)&&r.custom_tool_grammars.includes("gbnf");return{gbnf:o,streaming:o&&r.custom_tool_grammars_streaming===!0}}catch(n){if(t.signal?.aborted||n instanceof b&&n.category==="cancelled")throw n;return{gbnf:!1,streaming:!1}}}function zo(e){let t=e.sampling;if(t===void 0)return;if(e.kind!=="openai-compatible")throw j("direct-provider","OpenAI-compatible sampling options");if(!t||typeof t!="object"||Array.isArray(t)||Object.keys(t).some(i=>!["temperature","topP","seed"].includes(i)))throw g("direct-provider","sampling must contain only temperature, topP and seed");let{temperature:n,topP:r,seed:o}=t;if(n!==void 0&&(typeof n!="number"||!Number.isFinite(n)||n<0||n>2))throw g("direct-provider","sampling temperature must be finite and between 0 and 2");if(r!==void 0&&(typeof r!="number"||!Number.isFinite(r)||r<=0||r>1))throw g("direct-provider","sampling topP must be finite and greater than 0 through 1");if(o!==void 0&&(typeof o!="number"||!Number.isSafeInteger(o)||o<0))throw g("direct-provider","sampling seed must be a nonnegative safe integer");return Object.freeze({temperature:n,topP:r,seed:o})}function Mt(e){if(e={...e,sampling:zo(e)},e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw g("direct-provider","maxTokens must be a positive safe integer");let t=`direct-${e.kind}`,n=jn(e);if(e.xenoEnableThinking!==void 0&&(typeof e.xenoEnableThinking!="boolean"||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw g(t,"XENO thinking controls require an explicit loopback xeno-rt endpoint");if(e.xenoToolFormat!==void 0&&(e.xenoToolFormat!=="qwen_native"||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw g(t,"XENO native tool format requires an explicit loopback xeno-rt endpoint");if(e.xenoPromptTokenCeiling!==void 0&&(!Number.isSafeInteger(e.xenoPromptTokenCeiling)||e.xenoPromptTokenCeiling<0||e.kind!=="openai-compatible"||e.endpointProfile!=="local-network"||!["127.0.0.1","localhost","[::1]"].includes(n.hostname.toLowerCase())))throw g(t,"XENO prompt token ceilings require a nonnegative limit and an explicit loopback xeno-rt endpoint");let r=Ao(e),o={profile:e.endpointProfile,allowedHosts:e.allowedHosts,resolveHostname:e.resolveHostname},i={providerId:t,endpointPolicy:o,limits:e.transportLimits},s={id:t,capabilities:r,async complete(d,u,l,c,m,p){let f=De([...l.map(w=>w.name),...u.flatMap(w=>typeof w.content=="string"?[]:w.content.flatMap(R=>R.type==="tool_use"?[R.name]:[]))]),y=l.map(w=>({...w,name:f.encode(w.name)})),h=u.map(w=>typeof w.content=="string"?w:{...w,content:w.content.map(R=>R.type==="tool_use"?{...R,name:f.encode(R.name)}:R)}),P=p?{...p,...typeof p.toolChoice=="object"?{toolChoice:{name:f.encode(p.toolChoice.name)}}:{}}:void 0,v=P?.onEvent?{...P,onEvent:w=>P.onEvent("name"in w&&typeof w.name=="string"?{...w,name:f.decode(w.name)}:w),toolChoice:P.toolChoice}:P,x;try{x=await a(d,h,y,c,m,v)}catch(w){throw Ln(w,l.map(R=>R.name),f)}return{...x,content:x.content.map(w=>w.type==="tool_use"?{...w,name:f.decode(w.name)}:w)}}};async function a(d,u,l,c,m,p){{if(l.length>0&&!r.tools)throw j(t,"tools");if(Xn(u)&&!r.imageInput)throw j(t,"image input");let f=e.kind==="openai-compatible"?"openai-chat":e.kind==="google"?"google-json-schema":e.kind;if(p?.toolChoice!==void 0&&e.kind!=="openai-compatible")throw j(t,"generic chat tool selection");let y=_e(l,f).map(({definition:x})=>x),h,P={"content-type":"application/json"},v;try{if(e.kind==="anthropic"){if(h=ae(n,"/v1/messages"),P={...P,"x-api-key":e.apiKey,"anthropic-version":e.anthropicVersion??"2023-06-01"},v={model:d,max_tokens:e.maxTokens??8192,system:p?.systemPrompt,messages:Io(u),tools:y.map(R=>({name:R.name,description:R.description,input_schema:R.input_schema}))},e.streaming)return await Uo({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p})}else if(e.kind==="google"){let R=e.streaming?"streamGenerateContent":"generateContent";if(h=ae(n,`/v1beta/models/${encodeURIComponent(d)}:${R}`),e.streaming&&h.searchParams.set("alt","sse"),P={...P,"x-goog-api-key":e.apiKey},v={systemInstruction:p?.systemPrompt?{parts:[{text:p.systemPrompt}]}:void 0,contents:Mo(u),tools:y.length>0?[{functionDeclarations:Do(y)}]:void 0,generationConfig:{maxOutputTokens:e.maxTokens??8192}},e.streaming)return await Vo({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p})}else if(e.kind==="openai-compatible"){if(h=ae(n,e.chatCompletionsPath??"/v1/chat/completions"),P={...P,...Ot(e)},v=qn(d,u,y,p,e.maxTokens??8192,e.xenoPromptTokenCeiling,r.customToolGrammarsGbnf===!0,r.parallelToolCalls===!0,e.xenoEnableThinking,e.xenoToolFormat,e.sampling),e.streaming)return await Jo({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p,sentTools:y,customGrammars:r.customToolGrammarsGbnf===!0})}else if(h=ae(n,"/v1/responses"),P={...P,authorization:`Bearer ${e.apiKey}`},v={model:d,instructions:p?.systemPrompt,input:Oo(u),tools:y.map(R=>({type:"function",name:R.name,description:R.description,parameters:R.input_schema})),max_output_tokens:e.maxTokens??8192,store:!1},e.streaming)return await Xo({providerId:t,url:h,headers:P,body:v,config:e,signal:m,onText:c,context:p});let x=await ve(h,{method:"POST",headers:P,body:JSON.stringify(v),signal:m},i),w=e.kind==="anthropic"?qo(t,x):e.kind==="google"?Bo(t,x):e.kind==="openai-compatible"?Fn(t,x,y,r.customToolGrammarsGbnf===!0):jo(t,x);return await Hn(w,c,p),w}catch(x){throw x instanceof b&&x.category==="cancelled"?await C(p,{type:"provider.cancelled"}):(await C(p,Gn(x)),x instanceof b&&x.retryable&&await C(p,{type:"provider.retry",retryAfterMs:x.retryAfterMs,reason:x.category})),x}}}return e.xenoPromptTokenCeiling!==void 0&&(s.prepareQuotaRequest=async(d,u,l,c,m)=>{let p=await ve(ae(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 j(t,"XENO prompt token ceiling and exact count");let f=Array.isArray(p.custom_tool_grammars)&&p.custom_tool_grammars.includes("gbnf"),y=f&&p.custom_tool_grammars_streaming===!0,h=f&&(!e.streaming||y);if(r.customToolGrammarsGbnf===!0&&!h)throw j(t,"negotiated local custom tool grammars");let P=r.customToolGrammarsGbnf!==!1&&h,v={...e,capabilityProfile:{...e.capabilityProfile,customToolGrammarsGbnf:P,customToolGrammarsGbnfStreaming:P&&y}},x=structuredClone(u),w=structuredClone(l),R=c?{...c}:void 0,I=De([...w.map(L=>L.name),...x.flatMap(L=>typeof L.content=="string"?[]:L.content.flatMap(Z=>Z.type==="tool_use"?[Z.name]:[]))]),fe=w.map(L=>({...L,name:I.encode(L.name)})),Se=x.map(L=>typeof L.content=="string"?L:{...L,content:L.content.map(Z=>Z.type==="tool_use"?{...Z,name:I.encode(Z.name)}:Z)}),ge=_e(fe,"openai-chat").map(({definition:L})=>L),k=R?{...R,...typeof R.toolChoice=="object"?{toolChoice:{name:I.encode(R.toolChoice.name)}}:{}}:void 0,M=qn(d,Se,ge,k,e.maxTokens??8192,void 0,P,r.parallelToolCalls===!0,e.xenoEnableThinking,e.xenoToolFormat,e.sampling),X=await ve(ae(n,"/v1/runtime/chat/prompt-tokens"),{method:"POST",headers:{"content-type":"application/json",...Ot(e)},body:JSON.stringify(M),signal:m},{...i,limits:{...e.transportLimits,connectTimeoutMs:9e4,totalTimeoutMs:12e4,maxResponseBytes:16384}}),D=X.prompt_tokens;if(X.object!=="runtime.chat.prompt_tokens"||typeof D!="number"||!Number.isSafeInteger(D)||D<0)throw g(t,"xeno-rt returned an invalid exact prompt token count");if(D>e.xenoPromptTokenCeiling)throw new T("EXCEEDED","Exact prompt exceeds the configured XENO input token ceiling.");let F=R?.quotaRemainingTokens;if(F!==void 0&&(!Number.isSafeInteger(F)||F<0))throw new T("INVALID","Remaining quota must be a nonnegative safe integer.");let W=Math.min(e.maxTokens??8192,F===void 0?Number.MAX_SAFE_INTEGER:F-D);if(W<1)throw new T("EXCEEDED",`Goal token budget exhausted: ${F??0} tokens left, but this request needs exactly ${D} for its input plus at least 1 for the reply. Raise the goal's token limit or start a new goal.`);let pr=Mt({...v,maxTokens:W,xenoPromptTokenCeiling:D});return{basis:"provider-enforced",inputTokensUpperBound:D,outputTokensUpperBound:W,execute:(L,Z)=>pr.complete(d,x,w,L,Z,R)}}),s}function Qn(e){let t="direct-ollama-native";if(e.maxTokens!==void 0&&(!Number.isSafeInteger(e.maxTokens)||e.maxTokens<1))throw g(t,"maxTokens must be a positive safe integer");let n={...e,kind:"openai-compatible"};if(n.sampling!==void 0)throw j(t,"OpenAI-compatible sampling options");let r=jn(n);return{id:t,capabilities:{streaming:!1,textInput:!0,imageInput:!1,vision:!1,tools:!0,parallelToolCalls:!1,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!0,cancellation:!0,retryAfter:!0,promptCaching:!1},async complete(o,i,s,a,d,u){if(Xn(i))throw j(t,"image input");try{let l=_e(s,"openai-chat").map(({definition:y})=>y),c=Jn(i,u?.systemPrompt).map(y=>({...y,content:y.content??"",...y.tool_calls?{tool_calls:y.tool_calls.map(h=>({...h,function:{...h.function,arguments:re(t,h.function.arguments,"tool call")}}))}:{}})),m=await ve(ae(r,"/api/chat"),{method:"POST",signal:d,headers:{"content-type":"application/json",...Ot(n)},body:JSON.stringify({model:o,messages:c,stream:!1,options:{num_predict:e.maxTokens??8192},tools:l.map(y=>({type:"function",function:{name:y.name,description:y.description,parameters:y.input_schema}}))})},je(n,t));if(m.done!==!0||!m.message||typeof m.message!="object")throw g(t,"native completion is missing its terminal message");let p=m.message,f=Fn(t,{choices:[{message:{...p,...Array.isArray(p.tool_calls)?{tool_calls:p.tool_calls.map(y=>({...y,id:y.id??(0,rt.randomUUID)()}))}:{}},finish_reason:m.done_reason==="length"?"length":"stop"}],usage:m});return await Hn(f,a,u),f}catch(l){throw await C(u,l instanceof b&&l.category==="cancelled"?{type:"provider.cancelled"}:Gn(l)),l}}}}function at(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 $t=1,ue={streaming:!0,textInput:!0,imageInput:!0,tools:!0,parallelToolCalls:!0,structuredOutput:!1,reasoningMetadata:!0,usageAccounting:!0,promptCaching:!1,modelDiscovery:!0},dt={...ue,reasoningMetadata:!1},Wn=[K("xeno","XENO hosted","xeno","openai-compatible","https://api.xenostudio.ai","public-https","bearer-env","XENO_API_KEY","/v1/models",ue),K("openai","OpenAI","direct","openai-responses","https://api.openai.com","public-https","bearer-env","OPENAI_API_KEY","/v1/models",ue),K("anthropic","Anthropic","direct","anthropic","https://api.anthropic.com","public-https","header-env","ANTHROPIC_API_KEY","/v1/models",{...ue,structuredOutput:!1}),K("google","Google AI Studio","direct","google","https://generativelanguage.googleapis.com","public-https","header-env","GOOGLE_API_KEY","/v1beta/models",ue),K("openrouter","OpenRouter","gateway","openai-compatible","https://openrouter.ai/api","public-https","bearer-env","OPENROUTER_API_KEY","/v1/models",dt),K("xeno-rt","xeno-rt","local","openai-compatible","http://127.0.0.1:3338","local-network","none",void 0,"/v1/models",dt,["running xeno-rt endpoint"]),K("ollama","Ollama","local","openai-compatible","http://127.0.0.1:11434","local-network","none",void 0,"/v1/models",dt,["Ollama OpenAI compatibility endpoint"]),K("azure-openai","Azure OpenAI","cloud","openai-compatible",void 0,"public-https","header-env","AZURE_OPENAI_API_KEY",void 0,dt,["resource endpoint","deployment","API version","host adapter for deployment-shaped requests"]),K("aws-bedrock","Amazon Bedrock","cloud","aws-bedrock",void 0,"public-https","cloud-chain",void 0,void 0,{...ue,modelDiscovery:!1},["AWS credential chain","region","Bedrock host adapter"]),K("vertex-ai","Google Vertex AI","cloud","vertex-ai",void 0,"public-https","cloud-chain",void 0,void 0,{...ue,modelDiscovery:!1},["Google application-default credentials","project","region","Vertex host adapter"])],Te=class{presets=new Map;constructor(t=Wn){for(let n of t)this.add(n)}add(t){oi(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=Zn(t.baseUrl??r.defaultBaseUrl,r)}catch(d){o.push(d instanceof Error?d.message:String(d))}i||o.push("Provider endpoint is not configured");let s=t.secretRef?.trim()||r.auth.defaultSecretRef;(r.auth.mode==="bearer-env"||r.auth.mode==="header-env")&&!s&&o.push("Credential reference is not configured"),s&&n&&!n(s)&&o.push(`Credential reference ${s} is not available`),(r.adapterKind==="aws-bedrock"||r.adapterKind==="vertex-ai"||r.id==="azure-openai")&&o.push("Provider requires a dedicated host adapter");let a="ready";return t.enabled===!1?a="blocked":o.some(d=>d.includes("host adapter"))?a="requires-host-adapter":o.some(d=>d.includes("Credential"))?a="missing-credential":o.length&&(a="needs-configuration"),{connection:ii(t),preset:r,...i?{endpoint:i}:{},...s?{secretRef:s}:{},readiness:a,blockers:o}}};async function Fo(e){let n=(e.catalog??new Te).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=de(n.endpoint,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts});try{await He(a,{profile:n.preset.endpointProfile,allowedHosts:n.preset.allowedHosts,resolveHostname:e.resolveHostname})}catch(c){return{...s,readiness:"blocked",errors:Re([...s.errors,c instanceof Error?c.message:String(c)])}}let d=Qo(a,n.preset.discoveryPath),u=Ko(n.preset,o),l=Date.now();try{let{response:c,text:m}=await Wo(e.fetchImpl??fetch,d,{headers:u},e.timeoutMs??8e3,e.maxResponseBytes??2097152),p=Date.now()-l,f=c.status===401||c.status===403?!1:c.ok?!0:null;if(!c.ok)return{...s,reachable:!0,authenticated:f,latencyMs:p,readiness:f===!1?"missing-credential":"blocked",errors:Re([...s.errors,`Provider discovery returned HTTP ${c.status}`])};let y=JSON.parse(m);return{...s,readiness:"ready",reachable:!0,authenticated:f,latencyMs:p,models:Zo(y),errors:Re(s.errors)}}catch(c){return{...s,readiness:"blocked",latencyMs:Date.now()-l,errors:Re([...s.errors,si(c)])}}}function Ho(e,t={}){let n=t.allowedProviderIds?new Set(t.allowedProviderIds):null,r=new Set(t.deniedProviderIds??[]),o=new Map((t.fallbackOrder??[]).map((i,s)=>[i,s]));return e.filter(({connection:i,model:s})=>{let a=i.preset.id;return!(i.readiness!=="ready"||i.connection.enabled===!1||s.available===!1||s.availability==="unavailable"||n&&!n.has(a)||r.has(a)||!ni({...i.preset.capabilities,...s.capabilities??{}},t.require)||t.maxInputCostPerMillion!==void 0&&(s.inputCostPerMillion??1/0)>t.maxInputCostPerMillion||t.maxOutputCostPerMillion!==void 0&&(s.outputCostPerMillion??1/0)>t.maxOutputCostPerMillion)}).sort((i,s)=>{if(t.preferLocal&&i.connection.preset.family!==s.connection.preset.family){if(i.connection.preset.family==="local")return-1;if(s.connection.preset.family==="local")return 1}let a=o.get(i.connection.preset.id)??Number.MAX_SAFE_INTEGER,d=o.get(s.connection.preset.id)??Number.MAX_SAFE_INTEGER;return a-d||i.connection.preset.id.localeCompare(s.connection.preset.id)||i.model.id.localeCompare(s.model.id)})}function Go(e,t,n){if(e.readiness==="requires-host-adapter")throw new Error(`${e.preset.displayName} requires a dedicated host adapter`);if(!e.endpoint)throw new Error("Provider endpoint is not configured");if(e.preset.adapterKind==="aws-bedrock"||e.preset.adapterKind==="vertex-ai")throw new Error("Cloud adapter cannot be represented as DirectProviderConfig");if((e.preset.auth.mode==="bearer-env"||e.preset.auth.mode==="header-env")&&!t)throw new Error("Provider credential did not resolve");if(n?.capabilities?.textInput===!1)throw new Error(`Provider model ${n.id} does not advertise text input`);let r=ri({...e.preset.capabilities,...n?.capabilities??{}});return{kind:e.preset.adapterKind,apiKey:t??"",baseURL:e.endpoint,endpointProfile:e.preset.endpointProfile,allowedHosts:e.preset.allowedHosts,streaming:r.streaming,...e.preset.adapterKind==="openai-compatible"?{capabilityProfile:r}:{},...e.preset.auth.mode==="header-env"?{authentication:{type:"header",header:e.preset.auth.header??Nt(e.preset.id),prefix:e.preset.auth.prefix}}:{},...e.preset.auth.mode==="none"?{authentication:{type:"none"}}:{}}}function K(e,t,n,r,o,i,s,a,d,u,l=[]){return{schemaVersion:$t,id:e,displayName:t,family:n,adapterKind:r,...o?{defaultBaseUrl:o}:{},endpointProfile:i,...o?{allowedHosts:[new URL(o).hostname]}:{},auth:{mode:s,...a?{defaultSecretRef:a}:{},...s==="header-env"?{header:Nt(e)}:{},description:s==="none"?"No credential required":s==="cloud-chain"?"Provider-owned cloud credential chain":`Environment/credential reference ${a}`},capabilities:u,...d?{discoveryPath:d}:{},requires:l}}function Nt(e){return e==="anthropic"?"x-api-key":e==="google"?"x-goog-api-key":e==="azure-openai"?"api-key":"authorization"}function Ko(e,t){return e.auth.mode==="none"||e.auth.mode==="cloud-chain"?{accept:"application/json"}:t?e.auth.mode==="bearer-env"?{accept:"application/json",authorization:`Bearer ${t}`}:{accept:"application/json",[e.auth.header??Nt(e.id)]:`${e.auth.prefix??""}${t}`}:{accept:"application/json"}}function Zn(e,t){return e?de(e.trim().replace(/\/+$/,""),{profile:t.endpointProfile,allowedHosts:t.allowedHosts}).toString().replace(/\/$/,""):void 0}function Qo(e,t){let n=new URL(e.toString());if(!t.startsWith("/")||t.includes("..")||t.includes("#"))throw new Error("Provider discovery path is invalid");return n.pathname=`${n.pathname.replace(/\/$/,"")}${t}`.replace(/\/{2,}/g,"/"),n}async function Wo(e,t,n,r,o){if(!Number.isSafeInteger(r)||r<1||r>6e4||!Number.isSafeInteger(o)||o<1||o>16*1024*1024)throw new Error("Invalid provider discovery limits");let i=new AbortController,s,a=!1,d,u=new Promise((c,m)=>{d=m}),l=setTimeout(()=>{a=!0;let c=new Error("Provider probe timed out");i.abort(c),d(c),s?.cancel().catch(()=>{})},r);try{let c=e(t,{...n,signal:i.signal,redirect:"manual"});c.then(v=>{a&&v.body?.cancel().catch(()=>{})},()=>{});let m=await Promise.race([c,u]);if(m.redirected||m.status>=300&&m.status<400)throw m.body?.cancel().catch(()=>{}),new Error("Provider discovery redirects are disabled");let p=0;if(m.headers.forEach((v,x)=>{p+=Buffer.byteLength(x)+Buffer.byteLength(v)}),p>64*1024)throw m.body?.cancel().catch(()=>{}),new Error("Provider discovery headers exceed limit");if(!m.ok||!m.body)return m.body?.cancel().catch(()=>{}),{response:m,text:""};let f=m.headers.get("content-length");if(f&&/^\d+$/.test(f)&&Number(f)>o)throw m.body.cancel().catch(()=>{}),new Error(`Provider discovery response exceeds ${o} bytes`);s=m.body.getReader();let y=new TextDecoder("utf-8",{fatal:!0}),h=0,P="";for(;;){let v=await Promise.race([s.read(),u]);if(v.done)break;if(h+=v.value.byteLength,h>o)throw new Error(`Provider discovery response exceeds ${o} bytes`);P+=y.decode(v.value,{stream:!0})}return P+=y.decode(),{response:m,text:P}}finally{clearTimeout(l),i.abort(),s&&(s.cancel().catch(()=>{}),s.releaseLock())}}function Zo(e){if(!e||typeof e!="object")return[];let t=e,r=(Array.isArray(t.data)?t.data:Array.isArray(t.models)?t.models:[]).flatMap(i=>{if(!i||typeof i!="object")return[];let s=i,d=(typeof s.id=="string"?s.id:typeof s.name=="string"?s.name.replace(/^models\//,""):"").trim();if(!d||d.length>300||at(d))return[];let u=Dt(s.type,80),l=ct(s.supported_input_modalities),c=ct(s.supported_output_modalities),m=ct(s.supported_parameters),p=ct(s.supported_generation_methods),f=ti(s.execution);return[{id:d,...typeof s.displayName=="string"&&s.displayName.trim()?{displayName:s.displayName.trim().slice(0,300)}:{},...typeof s.owned_by=="string"&&s.owned_by.trim()?{ownedBy:s.owned_by.trim().slice(0,200)}:{},...u?{type:u}:{},...l?{supportedInputModalities:l}:{},...c?{supportedOutputModalities:c}:{},...m?{supportedParameters:m}:{},...p?{supportedGenerationMethods:p}:{},...f?{execution:f}:{},...typeof s.available=="boolean"?{available:s.available}:{},...typeof s.availability=="string"&&s.availability.trim()?{availability:s.availability.trim().slice(0,80)}:{},capabilities:ei({type:u,inputModalities:l,supportedParameters:m,supportedGenerationMethods:p,execution:f}),metadataSource:"provider"}]}),o=new Map;for(let i of r){let s=o.get(i.id);o.set(i.id,s?Yo(s,i):i)}return[...o.values()].sort((i,s)=>i.id.localeCompare(s.id))}function Yo(e,t){return{...e,...e.displayName===void 0&&t.displayName!==void 0?{displayName:t.displayName}:{},...e.ownedBy===void 0&&t.ownedBy!==void 0?{ownedBy:t.ownedBy}:{},...e.type===void 0&&t.type!==void 0?{type:t.type}:{},...e.supportedInputModalities===void 0&&t.supportedInputModalities!==void 0?{supportedInputModalities:t.supportedInputModalities}:{},...e.supportedOutputModalities===void 0&&t.supportedOutputModalities!==void 0?{supportedOutputModalities:t.supportedOutputModalities}:{},...e.supportedParameters===void 0&&t.supportedParameters!==void 0?{supportedParameters:t.supportedParameters}:{},...e.supportedGenerationMethods===void 0&&t.supportedGenerationMethods!==void 0?{supportedGenerationMethods:t.supportedGenerationMethods}:{},...e.execution===void 0&&t.execution!==void 0?{execution:t.execution}:{},...e.available===void 0&&t.available!==void 0?{available:t.available}:{},...e.availability===void 0&&t.availability!==void 0?{availability:t.availability}:{},...e.contextTokens===void 0&&t.contextTokens!==void 0?{contextTokens:t.contextTokens}:{},...e.inputCostPerMillion===void 0&&t.inputCostPerMillion!==void 0?{inputCostPerMillion:t.inputCostPerMillion}:{},...e.outputCostPerMillion===void 0&&t.outputCostPerMillion!==void 0?{outputCostPerMillion:t.outputCostPerMillion}:{},...e.capabilities===void 0&&t.capabilities!==void 0?{capabilities:t.capabilities}:{}}}function ei(e){let t=e.type?.toLowerCase(),n=e.execution?.endpoint?.toLowerCase()??"",r=new Set((e.supportedParameters??[]).map(l=>l.toLowerCase())),o=new Set((e.supportedGenerationMethods??[]).map(l=>l.toLowerCase())),i=t!==void 0&&t!=="text",s=/\/(?:images|videos|embeddings|audio|moderations)\//.test(n);if(i||s)return{streaming:!1,textInput:!1,imageInput:!1,tools:!1,parallelToolCalls:!1,structuredOutput:!1,reasoningMetadata:!1,usageAccounting:!1,promptCaching:!1};if(t===void 0&&!e.execution&&!e.inputModalities&&!e.supportedParameters)return;let a=new Set((e.inputModalities??[]).map(l=>l.toLowerCase())),d=/(?:chat\/completions|responses|generatecontent)/.test(n),u={textInput:a.size>0?a.has("text"):t==="text"||d,imageInput:a.size>0?a.has("image"):!1,tools:r.has("tools"),parallelToolCalls:r.has("parallel_tool_calls")||r.has("parallel-tool-calls")};return e.execution?.stream!==void 0?u.streaming=e.execution.stream:(t==="text"||d)&&(u.streaming=!1),e.execution&&d&&(u.usageAccounting=!0),(o.has("chat")||d)&&(u.textInput=!0),e.supportedParameters&&(u.reasoningMetadata=r.has("reasoning")||r.has("reasoning_effort"),u.structuredOutput=!1,u.promptCaching=r.has("prompt_cache")||r.has("prompt_caching")),u}function Dt(e,t){if(typeof e!="string")return;let n=e.trim();if(!(!n||n.length>t||at(n)))return n}function ct(e){if(!Array.isArray(e))return;let t=e.map(n=>Dt(n,120)).filter(n=>n!==void 0).slice(0,64);return t.length>0?[...new Set(t)]:void 0}function ti(e){if(!e||typeof e!="object"||Array.isArray(e))return;let t=e,n={};for(let o of["sync","stream","async","batch"])typeof t[o]=="boolean"&&(n[o]=t[o]);typeof t.max_batch_items=="number"&&Number.isSafeInteger(t.max_batch_items)&&t.max_batch_items>0&&t.max_batch_items<=1e5&&(n.maxBatchItems=t.max_batch_items);let r=Dt(t.endpoint,200);return r&&(n.endpoint=r),Object.keys(n).length>0?n:void 0}function ni(e,t){return t?Object.entries(t).every(([n,r])=>r!==!0||e[n]===!0):!0}function ri(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 oi(e){if(e.schemaVersion!==$t||!/^[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&&Zn(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 ii(e){let t=e.id.trim();if(!t||t.length>120||at(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 si(e){return(e instanceof Error?e.message:String(e)).replace(/(Bearer\s+)[A-Za-z0-9._~+/=-]+/gi,"$1[redacted]").replace(/([?&#](?:token|key|secret|password|api[_-]?key)=)[^&#\s]+/gi,"$1[redacted]").slice(0,500)}var Jt=require("node:crypto"),z=require("node:fs/promises"),pe=require("node:path");var Q=wr(require("node:fs/promises"),1);var Yn=Symbol.for("@xenosystem/agent-sdk/file-cache"),er=globalThis,qt=er[Yn]??{entries:new Map,counters:{reads:0,hits:0}};er[Yn]=qt;var _s=qt.entries,Cs=qt.counters;var ai=new Set(["EACCES","EBUSY","EPERM"]),di=[10,20,40,80,160,320,640];async function tr(e,t){for(let n=0;;n+=1)try{await Q.rename(e,t);return}catch(r){let o=r.code,i=di[n];if(process.platform!=="win32"||!o||!ai.has(o)||i===void 0)throw r;await new Promise(s=>setTimeout(s,i))}}function lt(e){return JSON.stringify(jt(e,new Set))}function jt(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=>jt(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]=jt(o,t)}return t.delete(e),n}var oe=require("node:fs"),Bt=require("node:os"),rr=require("node:path");function ci(){return new Date().toISOString()}function li(){return new Date(Date.now()-Math.floor(process.uptime()*1e3)).toISOString()}function or(e){try{return JSON.parse((0,oe.readFileSync)(e,"utf8"))}catch{return null}}function ui(e){if(!e||e<=0)return!1;try{return process.kill(e,0),!0}catch{return!1}}function pi(e){return e.hostname!==(0,Bt.hostname)()?!0:ui(e.pid)}function nr(e,t){(0,oe.mkdirSync)((0,rr.dirname)(e),{recursive:!0}),(0,oe.writeFileSync)(e,JSON.stringify(t,null,2)+`
10
+ `,{encoding:"utf8",flag:"wx"})}function mi(e,t){let n=or(e);n?.pid!==t.pid||n.hostname!==t.hostname||(0,oe.rmSync)(e,{force:!0})}function ir(e,t,n){let r=ci(),o={schemaVersion:1,name:t,pid:process.pid,hostname:(0,Bt.hostname)(),processStartedAt:li(),version:n,acquiredAt:r,updatedAt:r};try{nr(e,o)}catch(i){if(i.code!=="EEXIST")throw i;let a=or(e);if(a&&pi(a))throw new Error(`${t} is already locked by PID ${a.pid} on ${a.hostname}.`);(0,oe.rmSync)(e,{force:!0}),nr(e,o)}return{record:o,release:()=>{mi(e,o)}}}var ut=1,Xt=class{directory;snapshotPath;lockPath;catalog;now;constructor(t){this.directory=(0,pe.resolve)(t.directory),this.snapshotPath=(0,pe.join)(this.directory,"providers.json"),this.lockPath=(0,pe.join)(this.directory,"providers.lock"),this.catalog=t.catalog??new Te,this.now=t.now??(()=>new Date)}async upsert(t){let n=this.catalog.resolve(t).connection;return ar(n),this.mutate(r=>{let o=r.connections.filter(i=>i.id!==n.id);return o.push(n),{snapshot:Ut(r,o,r.routingPolicy,this.now()),result:n}})}async remove(t){return this.mutate(n=>{let r=n.connections.filter(o=>o.id!==t);return r.length===n.connections.length?{snapshot:n,result:!1}:{snapshot:Ut(n,r,n.routingPolicy,this.now()),result:!0}})}async setRoutingPolicy(t){let n=dr(t);return this.mutate(r=>({snapshot:Ut(r,r.connections,n,this.now()),result:n}))}async get(t){return(await this.load()).connections.find(n=>n.id===t)??null}async list(){return(await this.load()).connections}async load(){try{let t=JSON.parse(await(0,z.readFile)(this.snapshotPath,"utf8"));return gi(t,this.catalog),t}catch(t){if(t.code==="ENOENT")return fi(this.now());throw t}}async mutate(t){await(0,z.mkdir)(this.directory,{recursive:!0,mode:448});let n=ir(this.lockPath,"xeno provider connection store","1");try{let r=await this.load(),{snapshot:o,result:i}=t(r);return o!==r&&await yi(this.snapshotPath,`${JSON.stringify(o,null,2)}
11
+ `),i}finally{n.release()}}};function fi(e){return sr({schemaVersion:ut,generation:0,updatedAt:e.toISOString(),connections:[],routingPolicy:{}})}function Ut(e,t,n,r){return sr({schemaVersion:ut,generation:e.generation+1,updatedAt:r.toISOString(),connections:[...t].sort((o,i)=>o.id.localeCompare(i.id)),routingPolicy:n})}function sr(e){return{...e,checksum:{algorithm:"sha256",value:(0,Jt.createHash)("sha256").update(cr(e)).digest("hex")}}}function gi(e,t){if(e.schemaVersion!==ut||!Array.isArray(e.connections))throw new Error("Invalid provider connection snapshot");let{checksum:n,...r}=e;if(n?.algorithm!=="sha256"||n.value!==(0,Jt.createHash)("sha256").update(cr(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(ar(s),o.has(s.id))throw new Error(`Duplicate provider connection: ${s.id}`);o.add(s.id)}dr(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 dr(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 yi(e,t){await(0,z.mkdir)((0,pe.dirname)(e),{recursive:!0,mode:448});let n=`${e}.${process.pid}.${Date.now()}.tmp`,r;try{r=await(0,z.open)(n,"wx",384),await r.writeFile(t,"utf8"),await r.sync(),await r.close(),r=void 0,await tr(n,e),await(0,z.chmod)(e,384).catch(()=>{})}finally{r&&await r.close().catch(()=>{}),await(0,z.unlink)(n).catch(()=>{})}}function cr(e){return lt(e)}var mt=require("node:crypto"),N=require("node:fs/promises"),Ee=require("node:path");var pt=e=>(0,mt.createHash)("sha256").update(lt(e)).digest("hex"),ke=e=>new Date(e).toISOString().slice(0,10);function lr(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 hi(e){return e.kind==="reserve"&&e.reservation.basis!==void 0}function ur(e){return{requestsPerMinute:e.requestsPerMinute===null?null:S(e.requestsPerMinute),tokensPerDay:e.tokensPerDay===null?null:S(e.tokensPerDay),...e.tokensLifetime!==void 0?{tokensLifetime:e.tokensLifetime===null?null:S(e.tokensLifetime)}:{}}}function Vt(e,t){return Ce(e).some(n=>V(n)===V(t))}function me(e){return e.reduce((t,n)=>S(t+n),0)}var zt=class{constructor(t,n=Date.now,r=1e5){this.now=n;this.maximumEntries=r;this.directory=(0,Ee.resolve)(t),S(r)}now;maximumEntries;directory;async policy(t){return(await this.load()).policies.get(V(t))??null}async setPolicy(t,n,r){let o={scope:G(t),limits:ur(n),revision:S(r)+1};return await this.append(()=>({kind:"policy",policy:o,expectedRevision:r})),o}async reservation(t){return(await this.load()).reservations.get(U(t))??null}async reserve(t){if(t.basis!==void 0&&t.basis!=="estimated")throw new T("INVALID","Unknown reservation basis.");let n={id:U(t.id),scope:G(t.scope),requestHash:U(t.requestHash),reservedTokens:S(t.reservedTokens),...t.basis?{basis:t.basis}:{}};return await this.append((r,o)=>{let i=r.reservations.get(n.id);if(i){if(pt([i.scope,i.requestHash,i.reservedTokens,i.basis??null])!==pt([n.scope,n.requestHash,n.reservedTokens,n.basis??null]))throw new T("CONFLICT","Reservation identity was reused for different work.");return null}return{kind:"reserve",reservation:{...n,admittedAt:o,state:"reserved"}}}),await this.reservation(n.id)}async dispatch(t){await this.append(()=>({kind:"dispatch",id:U(t)}))}async void(t){await this.append(n=>n.reservations.get(t)?.state==="void"?null:{kind:"void",id:U(t)})}async settle(t,n){S(n),await this.append(r=>{let o=r.reservations.get(t);return o?.state==="settled"&&o.actualTokens===n?null:{kind:"settle",id:U(t),actualTokens:n}})}async snapshot(t){let n=await this.load(),r=S(this.now()),o=G(t);if(r<n.at)throw new T("CLOCK_ROLLBACK","Quota clock moved backwards.");let i=[...n.reservations.values()].filter(a=>Vt(a.scope,o)),s=i.filter(a=>ke(a.admittedAt)===ke(r));return{authority:"local-file",policies:Ce(o).flatMap(a=>n.policies.get(V(a))?[n.policies.get(V(a))]:[]),heldTokens:me(s.filter(a=>a.state==="reserved"||a.state==="dispatched").map(a=>a.reservedTokens)),usedTokens:me(s.filter(a=>a.state==="settled").map(a=>a.actualTokens)),lifetimeHeldTokens:me(i.filter(a=>a.state==="reserved"||a.state==="dispatched").map(a=>a.reservedTokens)),lifetimeUsedTokens:me(i.filter(a=>a.state==="settled").map(a=>a.actualTokens)),requestsInLastMinute:i.filter(a=>a.state!=="void"&&a.admittedAt>r-6e4).length,unresolved:i.filter(a=>a.state==="dispatched").length}}async remainingTokens(t){let n=await this.load(),r=S(this.now());if(r<n.at)throw new T("CLOCK_ROLLBACK","Quota clock moved backwards.");let o=null;for(let i of Ce(t)){let s=n.policies.get(V(i));if(!s)continue;let a=[...n.reservations.values()].filter(c=>Vt(c.scope,i)&&c.state!=="void"),d=c=>me(c.map(m=>m.state==="settled"?m.actualTokens:m.reservedTokens)),u=[s.limits.tokensLifetime===void 0?null:s.limits.tokensLifetime,s.limits.tokensPerDay===null?null:s.limits.tokensPerDay],l=[d(a),d(a.filter(c=>ke(c.admittedAt)===ke(r)))];for(let c=0;c<u.length;c+=1){let m=u[c];if(m===null)continue;let p=Math.max(0,m-l[c]);o=o===null?p:Math.min(o,p)}}return o}apply(t,n,r,o=!0){if(n.kind==="policy"){let s=n.policy,a=V(s.scope);if((t.policies.get(a)?.revision??0)!==n.expectedRevision||s.revision!==n.expectedRevision+1)throw new T("CONFLICT","Quota policy revision changed.");t.policies.set(a,{scope:G(s.scope),revision:S(s.revision),limits:ur(s.limits)});return}if(n.kind==="reserve"){let s=n.reservation;if(U(s.id),U(s.requestHash),G(s.scope),S(s.reservedTokens),s.state!=="reserved"||s.admittedAt!==r||t.reservations.has(s.id))throw new T("CORRUPT","Invalid reservation record.");for(let a of o?Ce(s.scope):[]){let d=t.policies.get(V(a));if(!d)continue;let u=[...t.reservations.values()].filter(c=>Vt(c.scope,a)&&c.state!=="void");if(d.limits.requestsPerMinute!==null&&u.filter(c=>c.admittedAt>r-6e4).length>=d.limits.requestsPerMinute)throw new T("EXCEEDED","Ancestor request rate limit reached.");let l=me(u.filter(c=>ke(c.admittedAt)===ke(r)).map(c=>c.state==="settled"?c.actualTokens:c.reservedTokens));if(d.limits.tokensPerDay!==null&&S(l+s.reservedTokens)>d.limits.tokensPerDay)throw new T("EXCEEDED","Ancestor daily token limit reached.");if(d.limits.tokensLifetime!==void 0&&d.limits.tokensLifetime!==null){let c=me(u.map(m=>m.state==="settled"?m.actualTokens:m.reservedTokens));if(S(c+s.reservedTokens)>d.limits.tokensLifetime)throw new T("EXCEEDED","Ancestor lifetime token limit reached.")}}t.reservations.set(s.id,structuredClone(s));return}let i=t.reservations.get(n.id);if(!i)throw new T("CONFLICT","Reservation does not exist.");if(n.kind==="dispatch"||n.kind==="void"){if(i.state!=="reserved")throw new T("CONFLICT","Reservation cannot be dispatched twice or release unknown usage.");i.state=n.kind==="dispatch"?"dispatched":"void"}else if(n.kind==="settle"){if(i.state!=="dispatched"||i.basis!=="estimated"&&S(n.actualTokens)>i.reservedTokens)throw new T("CONFLICT","Invalid reservation settlement.");i.state="settled",i.actualTokens=n.actualTokens}else throw new T("CORRUPT","Unknown quota journal operation.")}async load(){let t={sequence:0,hash:"",at:0,policies:new Map,reservations:new Map},n;try{n=await(0,N.readdir)(this.directory)}catch(o){if(o.code==="ENOENT")return t;throw o}let r=n.filter(o=>o.endsWith(".quota")).sort();if(r.length>this.maximumEntries)throw new T("CAPACITY","Quota journal requires archival maintenance.");for(let o of r){if(o!==`${String(t.sequence+1).padStart(12,"0")}.quota`)throw new T("CORRUPT","Quota journal sequence is incomplete.");let i=(0,Ee.join)(this.directory,o),s=await(0,N.lstat)(i);if(!s.isFile()||s.isSymbolicLink()||s.size>16384)throw new T("CORRUPT","Invalid quota record file.");let a=await(0,N.open)(i,"r"),d;try{let c=Buffer.alloc(16385),m=await a.read(c,0,c.length,0);if(m.bytesRead>16384)throw new T("CORRUPT","Oversized quota record.");d=JSON.parse(c.subarray(0,m.bytesRead).toString("utf8"))}finally{await a.close()}let{hash:u,...l}=d;if(d.version!==1&&d.version!==2&&d.version!==3||d.sequence!==t.sequence+1||d.previousHash!==t.hash||u!==pt(l)||S(d.at)<t.at)throw new T("CORRUPT","Quota journal integrity failed.");if(d.version===1&&lr(d.operation))throw new T("CORRUPT","Lifetime or goal scope requires quota journal version 2.");this.apply(t,d.operation,d.at,!1),t.sequence=d.sequence,t.hash=u,t.at=d.at}return t}async append(t){await(0,N.mkdir)(this.directory,{recursive:!0,mode:448});for(let n=0;n<100;n++){let r=await this.load(),o=S(this.now());if(o<r.at)throw new T("CLOCK_ROLLBACK","Quota clock moved backwards.");let i=t(r,o);if(!i)return;if(r.sequence>=this.maximumEntries)throw new T("CAPACITY","Quota journal requires archival maintenance.");this.apply(r,i,o);let a={version:hi(i)?3:lr(i)?2:1,sequence:r.sequence+1,previousHash:r.hash,at:o,operation:i},d=JSON.stringify({...a,hash:pt(a)});if(Buffer.byteLength(d)>16384)throw new T("CAPACITY","Quota record exceeds its bound.");let u=(0,Ee.join)(this.directory,`${(0,mt.randomUUID)()}.tmp`),l=(0,Ee.join)(this.directory,`${String(a.sequence).padStart(12,"0")}.quota`),c=await(0,N.open)(u,"wx",384);try{await c.writeFile(d),await c.sync()}catch(m){throw await c.close(),await(0,N.unlink)(u).catch(()=>{}),m}await c.close();try{if(await(0,N.link)(u,l),process.platform!=="win32"){let m=await(0,N.open)(this.directory,"r");try{await m.sync()}finally{await m.close()}}return}catch(m){if(m.code!=="EEXIST")throw m}finally{await(0,N.unlink)(u).catch(()=>{})}}throw new T("CONFLICT","Quota admission contention exceeded the retry bound.")}};0&&(module.exports={BUILT_IN_XENO_PROVIDER_PRESETS,DualLLMProvider,FileQuotaAuthority,FileXenoProviderConnectionStore,PROVIDER_TOOL_NAME_PATTERN,ProviderError,QuotaAcknowledgementError,QuotaError,ToolSchemaProjectionError,XENO_PROVIDER_CATALOG_SCHEMA_VERSION,XENO_PROVIDER_CONNECTION_STORE_SCHEMA_VERSION,XenoProviderCatalog,assertDirectEndpointResolution,classifyProviderHttpError,classifyProviderStreamError,createDirectProvider,createOllamaNativeProvider,createQuotaGovernedProvider,createToolNameCodec,directProviderConfigFromConnection,isQuotaControlError,normalizeQuotaScope,parseRetryAfter,probeLocalToolGrammarSupport,probeXenoProvider,projectToolDefinitionsForProvider,projectToolSchemaForProvider,providerCapabilityError,providerProtocolError,quotaAncestors,quotaInteger,quotaScopeKey,quotaText,selectXenoProviderRoute,validateDirectEndpoint});