@juspay/neurolink 10.2.0 → 10.2.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [10.2.1](https://github.com/juspay/neurolink/compare/v10.2.0...v10.2.1) (2026-07-20)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **(providers):** suppress response_format on chat-completions requests that carry tools ([0144643](https://github.com/juspay/neurolink/commit/0144643273d6abefcc0d1fb99e6ef701f3347ff0))
6
+
1
7
  ## [10.2.0](https://github.com/juspay/neurolink/compare/v10.1.2...v10.2.0) (2026-07-20)
2
8
 
3
9
  ### Features
@@ -1172,7 +1172,7 @@ ${r.envVarName}=your_key_here
1172
1172
 
1173
1173
  \u{1F527} Step 3: Restart Application
1174
1174
  Restart your application to load the new environment variables.`}function Or(r,e){return process.env[r]||e}function dBe(){let r=Afr(),e=Ifr(),t=["\u{1F511} Option 1: API Key Authentication (Recommended for developers)","1. Visit: https://console.anthropic.com/","2. Sign in or create an account","3. Go to API Keys section","4. Create a new API key","5. Set ANTHROPIC_API_KEY in your .env file"],n=["","\u{1F510} Option 2: OAuth Authentication (For Claude Pro/Max subscribers)","1. Set ANTHROPIC_AUTH_METHOD=oauth in your .env file","2. Set ANTHROPIC_SUBSCRIPTION_TIER to your tier (free, pro, max)","3. Run the OAuth flow to obtain tokens, or set pre-configured tokens:"," - ANTHROPIC_OAUTH_TOKEN=your_access_token"," - ANTHROPIC_OAUTH_REFRESH_TOKEN=your_refresh_token (optional)","","\u{1F4CB} Available Subscription Tiers:"," - free: Free tier with limited usage"," - pro: Claude Pro ($20/month) - Extended usage limits"," - max: Claude Max - Highest usage limits"," - api: API-based access (pay-per-use)"],o=r==="oauth"?[...n.slice(1),"",...t]:[...t,...n];return{providerName:"Anthropic",envVarName:r==="oauth"?"ANTHROPIC_OAUTH_TOKEN":"ANTHROPIC_API_KEY",setupUrl:r==="oauth"?"https://claude.ai/settings":"https://console.anthropic.com/",description:r==="oauth"?`Anthropic OAuth Token (${e} tier)`:"Anthropic API Key",instructions:o,fallbackEnvVars:r==="oauth"?["ANTHROPIC_API_KEY"]:["ANTHROPIC_OAUTH_TOKEN","CLAUDE_OAUTH_TOKEN","ANTHROPIC_OAUTH_ACCESS_TOKEN"]}}function pBe(){return{providerName:"OPENAI",envVarName:"OPENAI_API_KEY",setupUrl:"https://platform.openai.com/api-keys",description:"Credentials",instructions:["1. Visit: https://platform.openai.com/api-keys","2. Create new API key","3. Copy the key"]}}function mBe(){return{providerName:"HuggingFace",envVarName:"HUGGINGFACE_API_KEY",setupUrl:"https://huggingface.co/settings/tokens",description:"Credentials",instructions:["1. Visit: https://huggingface.co/settings/tokens","2. Create new API token","3. Copy the token"],fallbackEnvVars:["HF_TOKEN"]}}function fBe(){return{providerName:"Mistral",envVarName:"MISTRAL_API_KEY",setupUrl:"https://console.mistral.ai/",description:"API key",instructions:["1. Visit: https://console.mistral.ai/","2. Create or sign in to your account","3. Generate a new API key"]}}function gBe(){return{providerName:"Azure OpenAI",envVarName:"AZURE_OPENAI_API_KEY",setupUrl:"https://portal.azure.com/",description:"Azure OpenAI API Key",instructions:["1. Visit: https://portal.azure.com/","2. Create or access Azure OpenAI resource","3. Get API key from Keys and Endpoint section"]}}function hBe(){return{providerName:"Azure OpenAI",envVarName:"AZURE_OPENAI_ENDPOINT",setupUrl:"https://portal.azure.com/",description:"Azure OpenAI Endpoint",instructions:["1. Visit: https://portal.azure.com/","2. Access your Azure OpenAI resource","3. Copy endpoint URL from Keys and Endpoint section"]}}function yBe(){return{providerName:"DeepSeek",envVarName:"DEEPSEEK_API_KEY",setupUrl:"https://platform.deepseek.com/api_keys",description:"API key",instructions:["1. Visit: https://platform.deepseek.com/api_keys","2. Create or sign in to your DeepSeek account","3. Generate a new API key","4. Set DEEPSEEK_API_KEY in your .env file"]}}function xBe(){return{providerName:"NVIDIA NIM",envVarName:"NVIDIA_NIM_API_KEY",setupUrl:"https://build.nvidia.com/settings/api-keys",description:"API key",instructions:["1. Visit: https://build.nvidia.com/","2. Sign in with your NVIDIA developer account","3. Open Settings \u2192 API Keys","4. Generate a new API key (Bearer token)","5. Set NVIDIA_NIM_API_KEY in your .env file"]}}function vBe(){return{providerName:"xAI",envVarName:"XAI_API_KEY",setupUrl:"https://console.x.ai/",description:"API key",instructions:["1. Visit: https://console.x.ai/","2. Sign in with your xAI account","3. Create an API key","4. Set XAI_API_KEY in your .env file"]}}function bBe(){return{providerName:"Groq",envVarName:"GROQ_API_KEY",setupUrl:"https://console.groq.com/keys",description:"API key",instructions:["1. Visit: https://console.groq.com/keys","2. Sign in to your Groq account","3. Create a new API key","4. Set GROQ_API_KEY in your .env file"]}}function TBe(){return{providerName:"Cohere",envVarName:"COHERE_API_KEY",setupUrl:"https://dashboard.cohere.com/api-keys",description:"API key",instructions:["1. Visit: https://dashboard.cohere.com/api-keys","2. Sign in to your Cohere account","3. Create a new API key","4. Set COHERE_API_KEY in your .env file"]}}function SBe(){return{providerName:"Replicate",envVarName:"REPLICATE_API_TOKEN",setupUrl:"https://replicate.com/account/api-tokens",description:"API token",instructions:["1. Visit: https://replicate.com/account/api-tokens","2. Sign in to your Replicate account","3. Create a new API token","4. Set REPLICATE_API_TOKEN in your .env file"]}}function wBe(){return{providerName:"Together AI",envVarName:"TOGETHER_API_KEY",setupUrl:"https://api.together.xyz/settings/api-keys",description:"API key",instructions:["1. Visit: https://api.together.xyz/settings/api-keys","2. Sign in to your Together AI account","3. Create a new API key","4. Set TOGETHER_API_KEY in your .env file"]}}function EBe(){return{providerName:"Fireworks AI",envVarName:"FIREWORKS_API_KEY",setupUrl:"https://fireworks.ai/account/api-keys",description:"API key",instructions:["1. Visit: https://fireworks.ai/account/api-keys","2. Sign in to your Fireworks AI account","3. Create a new API key","4. Set FIREWORKS_API_KEY in your .env file"]}}function _Be(){return{providerName:"Perplexity",envVarName:"PERPLEXITY_API_KEY",setupUrl:"https://www.perplexity.ai/settings/api",description:"API key",instructions:["1. Visit: https://www.perplexity.ai/settings/api","2. Sign in to your Perplexity account","3. Create a new API key (Sonar tier)","4. Set PERPLEXITY_API_KEY in your .env file"]}}function CBe(){return{providerName:"Voyage AI",envVarName:"VOYAGE_API_KEY",setupUrl:"https://dash.voyageai.com/api-keys",description:"API key",instructions:["1. Visit: https://dash.voyageai.com/api-keys","2. Sign in to your Voyage AI account","3. Create a new API key","4. Set VOYAGE_API_KEY in your .env file"]}}function kBe(){return{providerName:"Jina AI",envVarName:"JINA_API_KEY",setupUrl:"https://jina.ai/?sui=apikey",description:"API key",instructions:["1. Visit: https://jina.ai/?sui=apikey","2. Sign in / create account","3. Copy your API key","4. Set JINA_API_KEY in your .env file"]}}function RBe(){return{providerName:"Ideogram",envVarName:"IDEOGRAM_API_KEY",setupUrl:"https://developer.ideogram.ai/",description:"API key",instructions:["1. Visit: https://developer.ideogram.ai/","2. Sign in / create account","3. Generate a new API key","4. Set IDEOGRAM_API_KEY in your .env file"]}}function ABe(){return{providerName:"Recraft",envVarName:"RECRAFT_API_KEY",setupUrl:"https://www.recraft.ai/api",description:"API token",instructions:["1. Visit: https://www.recraft.ai/api","2. Sign in / create account","3. Create an API token","4. Set RECRAFT_API_KEY in your .env file"]}}function IBe(){return{providerName:"Cloudflare Workers AI",envVarName:"CLOUDFLARE_API_KEY",setupUrl:"https://dash.cloudflare.com/profile/api-tokens",description:"API token (Workers AI Read+Write scope)",instructions:["1. Visit: https://dash.cloudflare.com/profile/api-tokens","2. Create a token with 'Workers AI: Read + Write' scope","3. Set CLOUDFLARE_API_KEY in your .env file","4. Also set CLOUDFLARE_ACCOUNT_ID (find it in the dashboard URL or under 'Account ID')"]}}function PBe(){return{providerName:"Google Vertex AI",envVarName:"GOOGLE_CLOUD_PROJECT_ID",setupUrl:"https://console.cloud.google.com/",description:"Google Cloud Credentials",instructions:["1. Visit: https://console.cloud.google.com/","2. Create or select a project","3. Enable Vertex AI API","4. Set up authentication"],fallbackEnvVars:["VERTEX_PROJECT_ID","GOOGLE_VERTEX_PROJECT","GOOGLE_CLOUD_PROJECT"]}}function MBe(){return{providerName:"Google Vertex AI",envVarName:"GOOGLE_APPLICATION_CREDENTIALS",setupUrl:"https://console.cloud.google.com/",description:"Google Cloud authentication",instructions:["\u{1F527} Option 1: Service Account Key File","GOOGLE_APPLICATION_CREDENTIALS=/path/to/service-account.json","","\u{1F527} Option 2: Service Account Key (Base64)","GOOGLE_SERVICE_ACCOUNT_KEY=base64_encoded_key","","\u{1F527} Option 3: Individual Credentials","GOOGLE_AUTH_CLIENT_EMAIL=your-service-account@project.iam.gserviceaccount.com","GOOGLE_AUTH_PRIVATE_KEY=-----BEGIN PRIVATE KEY-----..."],fallbackEnvVars:["GOOGLE_SERVICE_ACCOUNT_KEY"]}}function Afr(){return process.env.ANTHROPIC_AUTH_METHOD?.toLowerCase()==="oauth"?"oauth":"api_key"}function Ifr(){switch(process.env.ANTHROPIC_SUBSCRIPTION_TIER?.toLowerCase()){case"free":return"free";case"pro":return"pro";case"max":return"max";case"max_5":return"max_5";case"max_20":return"max_20";default:return"api"}}var wT,Vu,y4,go=C(()=>{"use strict";wT={openai:/^sk-[A-Za-z0-9]{48,}$/,anthropic:/^sk-ant-[A-Za-z0-9\-_]{95,}$/,"google-ai":/^AIza[A-Za-z0-9\-_]{35}$/,huggingface:/^hf_[A-Za-z0-9]{37}$/,mistral:/^[A-Za-z0-9]{32}$/,azure:/^[A-Za-z0-9]{32}$/,aws:/^[A-Z0-9]{20}$/,bedrock:/^[A-Z0-9]{20}$/},Vu={OPENAI_MIN:48,ANTHROPIC_MIN:95,HUGGINGFACE_EXACT:37,AZURE_MIN:32,MISTRAL_EXACT:32,AWS_ACCESS_KEY:20,GOOGLE_AI_EXACT:39},y4={MIN_LENGTH:6,MAX_LENGTH:30,PATTERN:/^[a-z][a-z0-9-]{4,28}[a-z0-9]$/}});async function nc(r,e,t){let n=parseInt(r.headers.get("content-length")??"0",10);if(n>0&&n>e)throw new Error(`${t} download too large: ${n} bytes (max ${e})`);let o=Buffer.from(await r.arrayBuffer());if(o.length>e)throw new Error(`${t} download exceeded size cap after fetch: ${o.length} bytes (max ${e})`);return o}var Lg=C(()=>{"use strict"});var v4n,b4n,T4n,S4n,Die,Pfr,OBe,Lie,w4n,E4n,C4n,k4n,NBe=C(()=>{v4n=globalThis.crypto,b4n=globalThis.ReadableStream||class{},T4n=globalThis.URL,S4n=globalThis.URLSearchParams,Die=r=>{try{return JSON.stringify(r,null,2)}catch{return String(r)}};Die.custom=Symbol.for("nodejs.util.inspect.custom");Die.colors={};Die.styles={};Pfr=globalThis.TextDecoder,OBe=globalThis.TextEncoder,Lie=(r,e)=>e?.(null,"127.0.0.1",4),w4n=globalThis.performance||{now:()=>Date.now()},E4n=globalThis.Buffer||class extends Uint8Array{static from(e,t){if(typeof e=="string"){let n=(t||"utf8").toLowerCase();if(n==="base64"){let o=atob(e),s=new Uint8Array(o.length);for(let i=0;i<o.length;i++)s[i]=o.charCodeAt(i);return s}if(n==="hex"){let o=new Uint8Array(e.length/2);for(let s=0;s<e.length;s+=2)o[s/2]=parseInt(e.substr(s,2),16);return o}return new OBe().encode(e)}return new Uint8Array(e)}static alloc(e){return new Uint8Array(e)}static isBuffer(e){return e instanceof Uint8Array}static concat(e){let t=e.reduce((s,i)=>s+i.length,0),n=new Uint8Array(t),o=0;for(let s of e)n.set(s,o),o+=s.length;return n}static byteLength(e,t){return t==="base64"?Math.ceil(e.length*3/4):new OBe().encode(e).length}toString(e){let t=(e||"utf8").toLowerCase();if(t==="hex")return Array.from(new Uint8Array(this.buffer,this.byteOffset,this.byteLength)).map(n=>n.toString(16).padStart(2,"0")).join("");if(t==="base64"){let n="";for(let o=0;o<this.length;o++)n+=String.fromCharCode(this[o]);return btoa(n)}return new Pfr().decode(this)}},C4n=globalThis.clearTimeout,k4n=globalThis.clearInterval});var I4n,P4n,M4n,O4n,Fie,Mfr,DBe,N4n,D4n,LBe,F4n,U4n,FBe=C(()=>{I4n=globalThis.crypto,P4n=globalThis.ReadableStream||class{},M4n=globalThis.URL,O4n=globalThis.URLSearchParams,Fie=r=>{try{return JSON.stringify(r,null,2)}catch{return String(r)}};Fie.custom=Symbol.for("nodejs.util.inspect.custom");Fie.colors={};Fie.styles={};Mfr=globalThis.TextDecoder,DBe=globalThis.TextEncoder,N4n=globalThis.performance||{now:()=>Date.now()},D4n=globalThis.Buffer||class extends Uint8Array{static from(e,t){if(typeof e=="string"){let n=(t||"utf8").toLowerCase();if(n==="base64"){let o=atob(e),s=new Uint8Array(o.length);for(let i=0;i<o.length;i++)s[i]=o.charCodeAt(i);return s}if(n==="hex"){let o=new Uint8Array(e.length/2);for(let s=0;s<e.length;s+=2)o[s/2]=parseInt(e.substr(s,2),16);return o}return new DBe().encode(e)}return new Uint8Array(e)}static alloc(e){return new Uint8Array(e)}static isBuffer(e){return e instanceof Uint8Array}static concat(e){let t=e.reduce((s,i)=>s+i.length,0),n=new Uint8Array(t),o=0;for(let s of e)n.set(s,o),o+=s.length;return n}static byteLength(e,t){return t==="base64"?Math.ceil(e.length*3/4):new DBe().encode(e).length}toString(e){let t=(e||"utf8").toLowerCase();if(t==="hex")return Array.from(new Uint8Array(this.buffer,this.byteOffset,this.byteLength)).map(n=>n.toString(16).padStart(2,"0")).join("");if(t==="base64"){let n="";for(let o=0;o<this.length;o++)n+=String.fromCharCode(this[o]);return btoa(n)}return new Mfr().decode(this)}},LBe=()=>0,F4n=globalThis.clearTimeout,U4n=globalThis.clearInterval});function Dfr(r){return r.length===0?null:/^0x[0-9a-f]+$/i.test(r)?parseInt(r.slice(2),16):r.length>1&&r.startsWith("0")&&/^0[0-7]+$/.test(r)?parseInt(r.slice(1),8):/^\d+$/.test(r)?parseInt(r,10):null}function x4(r){if(r.length===0)return null;let e=r.split(".");if(e.length===4){let t=e.map(Dfr);return t.some(n=>n===null||n<0||n>255)?null:t.join(".")}if(e.length===1){let t;if(/^0x[0-9a-f]+$/i.test(r))t=parseInt(r.slice(2),16);else if(/^\d+$/.test(r))t=parseInt(r,10);else return null;return Number.isNaN(t)||t<0||t>4294967295?null:[t>>>24&255,t>>>16&255,t>>>8&255,t&255].join(".")}return null}function $Be(r){if(LBe(r)!==6)return null;let e=r.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/i),t;if(e){let n=x4(e[1]);if(!n)return null;let o=n.split(".").map(a=>parseInt(a,10)),s=(o[0]<<8|o[1]).toString(16),i=(o[2]<<8|o[3]).toString(16);t=["0","0","0","0","0","ffff",s,i]}else{let[n,o=""]=r.split("::"),s=n?n.split(":"):[],i=o?o.split(":"):[],a=8-s.length-i.length;if(a<0)return null;t=[...s,...Array(a).fill("0"),...i]}return t.length!==8?null:t.map(n=>n.toLowerCase().padStart(4,"0")).join(":")}function BBe(r){let e=r.match(/^::ffff:(\d+\.\d+\.\d+\.\d+)$/i);if(e)return x4(e[1]);let t=r.match(/^::ffff:([0-9a-f]{1,4}):([0-9a-f]{1,4})$/i);if(t){let n=parseInt(t[1],16),o=parseInt(t[2],16);return Number.isNaN(n)||Number.isNaN(o)||n>65535||o>65535?null:[n>>8&255,n&255,o>>8&255,o&255].join(".")}return null}function UBe(r){let[e,t,n,o]=r.split(".").map(s=>parseInt(s,10));return(e<<24|t<<16|n<<8|o)>>>0}function sN(r){let e=UBe(r);for(let[t,n]of Ofr){let o=UBe(t),s=n===0?0:4294967295<<32-n>>>0;if((e&s)===(o&s))return!0}return!1}function zBe(r){return Nfr.some(e=>e.length===39?r===e:r.startsWith(e))}function jBe(r){return r.startsWith("[")&&r.endsWith("]")?r.slice(1,-1):r}function GBe(r){let e=x4(r);if(e)return sN(e)?`IPv4 ${r} \u2192 ${e} is in a blocked range`:null;if(r.includes(":")){let t=BBe(r);if(t)return sN(t)?`IPv4-mapped IPv6 ${r} \u2192 ${t} is in a blocked range`:null;let n=$Be(r);return n?zBe(n)?`IPv6 ${r} is in a blocked range`:null:`IPv6 ${r} could not be parsed`}return"not-an-ip"}async function qu(r){let e;try{e=new URL(r)}catch{throw new Error(`Invalid URL: "${r}"`)}if(e.protocol!=="https:")throw new Error(`Only HTTPS URLs are permitted; got "${e.protocol}//" in "${r}"`);let t=jBe(e.hostname).toLowerCase(),n=GBe(t);if(n!==null){if(n!=="not-an-ip")throw new Error(`URL "${r}" rejected: ${n}`);await VBe(r,t)}}async function VBe(r,e){let[t,n]=await Promise.allSettled([Lie(e,{family:4,all:!0}),Lie(e,{family:6,all:!0})]),o=[],s=[],i=!1;if(t.status==="fulfilled"){i=!0;for(let a of t.value)o.push(a.address)}if(n.status==="fulfilled"){i=!0;for(let a of n.value)s.push(a.address)}if(!i){let a=t.status==="rejected"?t.reason instanceof Error?t.reason.message:String(t.reason):"ok",c=n.status==="rejected"?n.reason instanceof Error?n.reason.message:String(n.reason):"ok";throw new Error(`URL "${r}" rejected: hostname ${e} could not be resolved (A: ${a}; AAAA: ${c})`)}for(let a of o)if(sN(a))throw new Error(`URL "${r}" rejected: hostname ${e} resolves to ${a} (IPv4 in blocked range)`);for(let a of s){let c=GBe(a.toLowerCase());if(c&&c!=="not-an-ip")throw new Error(`URL "${r}" rejected: hostname ${e} resolves to ${a} (IPv6 ${c})`)}return{v4:o,v6:s}}async function qBe(r){let e;try{e=new URL(r)}catch{throw new Error(`Invalid URL: "${r}"`)}if(e.protocol!=="https:")throw new Error(`Only HTTPS URLs are permitted; got "${e.protocol}//" in "${r}"`);let t=jBe(e.hostname).toLowerCase(),n=x4(t);if(n){if(sN(n))throw new Error(`URL "${r}" rejected: IPv4 ${t} \u2192 ${n} is in a blocked range`);return{url:r,ip:n,family:4,addresses:[{ip:n,family:4}]}}if(t.includes(":")){let c=BBe(t);if(c){if(sN(c))throw new Error(`URL "${r}" rejected: IPv4-mapped IPv6 ${t} \u2192 ${c} is in a blocked range`);return{url:r,ip:c,family:4,addresses:[{ip:c,family:4}]}}let l=$Be(t);if(!l)throw new Error(`URL "${r}" rejected: IPv6 ${t} could not be parsed`);if(zBe(l))throw new Error(`URL "${r}" rejected: IPv6 ${t} is in a blocked range`);return{url:r,ip:t,family:6,addresses:[{ip:t,family:6}]}}let{v4:o,v6:s}=await VBe(r,t),i=[...o.map(c=>({ip:c,family:4})),...s.map(c=>({ip:c,family:6}))],a=i[0];if(!a)throw new Error(`URL "${r}" rejected: hostname ${t} resolved to an empty address set`);return{url:r,ip:a.ip,family:a.family,addresses:i}}var Ofr,Nfr,wx=C(()=>{"use strict";NBe();FBe();Ofr=[["0.0.0.0",8],["10.0.0.0",8],["100.64.0.0",10],["127.0.0.0",8],["169.254.0.0",16],["172.16.0.0",12],["192.0.0.0",24],["192.168.0.0",16],["198.18.0.0",15],["100.100.100.200",32],["224.0.0.0",4],["240.0.0.0",4]],Nfr=["0000:0000:0000:0000:0000:0000:0000:0000","0000:0000:0000:0000:0000:0000:0000:0001","fc","fd","fe8","fe9","fea","feb"]});var Oa,ET,v4,Uie,Lfr,Ffr,$ie,HBe,WBe,KBe,JBe,YBe,Ufr,Bie,XBe,zie,ZBe,iN,b4,T4,QBe,Fg=C(()=>{"use strict";z2();Iu();Oa=r=>r.replace(/\/+$/,""),ET=r=>{try{return JSON.stringify(r??"")}catch{return String(r??"")}},v4=r=>{if(typeof r=="string")return r;try{return JSON.stringify(r??{})}catch{return"{}"}},Uie=r=>{if(r==null)return"";if(typeof r=="string")return r;if(typeof r!="object")return String(r);let e=r;switch(e.type){case"text":return typeof e.value=="string"?e.value:ET(e.value);case"json":return ET(e.value);case"execution-denied":return`Tool execution denied${e.reason?`: ${e.reason}`:""}`;case"error-text":return typeof e.value=="string"?e.value:ET(e.value);case"error-json":return ET(e.value);case"content":return Array.isArray(e.value)?e.value.map(t=>t&&typeof t=="object"&&t.type==="text"?String(t.text??""):"").filter(t=>t.length>0).join(`
1175
- `):"";default:return ET(r)}},Lfr=r=>{if(typeof r=="string")return r.startsWith("data:")||/^https?:\/\//i.test(r)?r:`data:image/png;base64,${r}`;if(r instanceof URL)return r.toString();if(r instanceof Uint8Array)return`data:image/png;base64,${Buffer.from(r).toString("base64")}`},Ffr=r=>{if(typeof r=="string")return r;if(!Array.isArray(r))return ET(r);let e=[];for(let t of r){if(typeof t=="string"){e.push({type:"text",text:t});continue}if(!t||typeof t!="object")continue;let n=t;if(n.type==="text")e.push({type:"text",text:t.text??""});else if(n.type==="image"||n.type==="image_url"){let o=t.image??t.data??t.url,s=Lfr(o);s&&e.push({type:"image_url",image_url:{url:s}})}}return e.length===1&&e[0].type==="text"?e[0].text:e},$ie=r=>{let e=[];for(let t of r)switch(t.role){case"system":e.push({role:"system",content:typeof t.content=="string"?t.content:ET(t.content)});break;case"user":e.push({role:"user",content:Ffr(t.content)});break;case"assistant":{let n=Array.isArray(t.content)?t.content:[t.content],o=[],s=[];for(let a of n)if(a&&typeof a=="object"){let c=a;if(c.type==="text")o.push({type:"text",text:a.text??""});else if(c.type==="tool-call"){let l=a;s.push({id:l.toolCallId??"",type:"function",function:{name:l.toolName??"",arguments:v4(l.input)}})}}else typeof a=="string"&&o.push({type:"text",text:a});let i=o.length===0?null:o.length===1&&o[0].type==="text"?o[0].text:o;e.push({role:"assistant",content:i,...s.length>0?{tool_calls:s}:{}});break}case"tool":{if(Array.isArray(t.content))for(let n of t.content){if(!n||typeof n!="object")continue;let o=n;o.type==="tool-result"&&e.push({role:"tool",tool_call_id:o.toolCallId??"",content:Uie(o.output)})}else typeof t.content=="string"&&e.push({role:"tool",tool_call_id:t.toolCallId??"",content:t.content});break}}return e},HBe=r=>{let e=Object.entries(r);if(e.length===0)return;let t=[];for(let[n,o]of e){let s=o,i=s.inputSchema??s.parameters,a=i?po(i):{type:"object",properties:{}};t.push({type:"function",function:{name:n,...s.description?{description:s.description}:{},parameters:a}})}return t},WBe=r=>{if(!r||r.length===0)return;let e=[];for(let t of r)t.type==="function"&&e.push({type:"function",function:{name:t.name,...t.description?{description:t.description}:{},parameters:t.inputSchema,...t.strict!==void 0?{strict:t.strict}:{}}});return e.length>0?e:void 0},KBe=r=>{switch(r.type){case"auto":case"none":case"required":return r.type;case"tool":return{type:"function",function:{name:r.toolName}}}},JBe=r=>r.type==="text"?{type:"text"}:r.schema?{type:"json_schema",json_schema:{name:r.name??"response",schema:r.schema,...r.description?{description:r.description}:{},strict:!0}}:{type:"json_object"},YBe=r=>{if(r){if(r==="auto"||r==="none"||r==="required")return r;if(typeof r=="object"&&r!==null){let e=r;if(e.type==="tool"&&e.toolName)return{type:"function",function:{name:e.toolName}}}}},Ufr=r=>r.some(e=>{let t=e.content;return typeof t=="string"?/\bjson\b/i.test(t):Array.isArray(t)?t.some(n=>typeof n?.text=="string"&&/\bjson\b/i.test(n.text)):!1}),Bie=r=>r.response_format?.type==="json_object"&&!Ufr(r.messages)?{...r,messages:[{role:"system",content:"Respond with valid JSON only \u2014 no prose, no markdown fencing."},...r.messages]}:r,XBe=r=>/^(o\d|gpt-5)/i.test(r.replace(/^.*\//,"")),zie=r=>{let{modelId:e,messages:t,options:n,tools:o,toolChoice:s,streaming:i,responseFormat:a}=r,c={model:e,messages:t,...i?{stream:!0}:{},...i?{stream_options:{include_usage:!0}}:{}};return n.maxTokens!==void 0&&n.maxTokens!==null&&(c.max_tokens=n.maxTokens),n.temperature!==void 0&&n.temperature!==null&&(c.temperature=n.temperature),n.topP!==void 0&&n.topP!==null&&(c.top_p=n.topP),n.presencePenalty!==void 0&&n.presencePenalty!==null&&(c.presence_penalty=n.presencePenalty),n.frequencyPenalty!==void 0&&n.frequencyPenalty!==null&&(c.frequency_penalty=n.frequencyPenalty),n.seed!==void 0&&n.seed!==null&&(c.seed=n.seed),n.stopSequences&&n.stopSequences.length>0&&(c.stop=n.stopSequences),o&&(c.tools=o),s!==void 0&&(c.tool_choice=s),a&&(c.response_format=a),n.extraBody&&Object.assign(c,n.extraBody),c},ZBe=async(r,e,t)=>{let n={text:"",reasoning:"",toolCalls:new Map,finishReason:null,usage:void 0},o=new TextDecoder,s,a=hE({onEvent:l=>{let u=l.data;if(!u||u==="[DONE]")return;let d;try{d=JSON.parse(u)}catch(y){s=y instanceof Error?y:new Error(String(y));return}d.usage&&(n.usage=d.usage);let p=d.choices?.[0];if(!p)return;let f=p.delta;f?.content&&(n.text+=f.content,e(f.content));let h=f?.reasoning_content||f?.reasoning;if(h&&(n.reasoning+=h,t?.(h)),f?.tool_calls)for(let y of f.tool_calls){let x=n.toolCalls.get(y.index);x?y.id&&(x.id=y.id):(x={id:y.id??`call_${y.index}_${Date.now()}`,name:y.function?.name??"",argsBuffered:""},n.toolCalls.set(y.index,x)),y.function?.name&&(x.name=y.function.name),y.function?.arguments&&(x.argsBuffered+=y.function.arguments)}p.finish_reason&&(n.finishReason=p.finish_reason)}}),c=r.getReader();try{for(;;){let{done:l,value:u}=await c.read();if(l)break;a.feed(o.decode(u,{stream:!0}))}a.feed(o.decode())}finally{c.releaseLock()}if(s)throw s;return n},iN=async(r,e,t)=>{let n,o;try{n=await t.text(),o=n?JSON.parse(n):void 0}catch{o=void 0}let s=o?.error?.message??`OpenAI-compatible request failed with status ${t.status}`,i=new Error(s);return i.statusCode=t.status,i.url=r,i.requestBody={model:e.model,stream:e.stream===!0,tool_count:e.tools?.length??0},n!==void 0&&(i.responseBody=n),i},b4=()=>{let r=()=>{},e=new Promise(o=>{r=o}),t=()=>{},n=new Promise(o=>{t=o});return{usagePromise:e,finishPromise:n,resolveUsage:r,resolveFinish:t}},T4=()=>{let r=[],e;return{pushChunk:o=>{if(e){let s=e;e=void 0,s(o)}else r.push(o)},nextChunk:()=>new Promise(o=>{r.length>0?o(r.shift()):e=o})}},QBe=(r,e)=>r?e?{prompt_tokens:(r.prompt_tokens??0)+(e.prompt_tokens??0),completion_tokens:(r.completion_tokens??0)+(e.completion_tokens??0),total_tokens:(r.total_tokens??0)+(e.total_tokens??0)}:r:e});var jie,eze,tze=C(()=>{"use strict";DO();H();zj();Nm();jie=class{async collectUsage(e){try{let t=await e.usage;return t?a_(t):(g.debug("No usage data available from stream result"),vre())}catch(t){return Ja.isInstance(t)?g.debug("No output generated from stream \u2014 returning empty usage"):g.warn("Failed to collect usage from stream result",{error:t}),vre()}}async collectMetadata(e){try{let[t,n]=await Promise.all([e.response,e.finishReason]);return{id:t?.id,model:t?.model,timestamp:t?.timestamp instanceof Date?t.timestamp.getTime():t?.timestamp||Date.now(),finishReason:n}}catch(t){return Ja.isInstance(t)?g.debug("No output generated from stream \u2014 returning default metadata"):g.warn("Failed to collect metadata from stream result",{error:t}),{timestamp:Date.now(),finishReason:"error"}}}async createAnalytics(e,t,n,o,s){try{let[i,a]=await Promise.all([this.collectUsage(n),this.collectMetadata(n)]),[c,l,u,d]=await Promise.all([Promise.resolve(n.text).catch(()=>""),Promise.resolve(n.finishReason).catch(()=>"error"),Promise.resolve(n.toolResults||[]).catch(()=>[]),Promise.resolve(n.toolCalls||[]).catch(()=>[])]);return mx(e,t,{usage:i,content:c,response:a,finishReason:l,toolResults:u,toolCalls:d},o,{...s,streamingMode:!0,responseId:a.id,finishReason:l})}catch(i){return g.error("Failed to create analytics from stream result",{provider:e,model:t,error:i instanceof Error?i.message:String(i)}),mx(e,t,{usage:{input:0,output:0,total:0}},o,{...s,streamingMode:!0,analyticsError:!0})}}cleanup(){let e=process.memoryUsage().heapUsed,t=500*1024*1024;typeof global<"u"&&global.gc&&e>t&&global.gc()}},eze=new jie});function S4(r,e,t){return!t||!e||Object.keys(e).length===0?"none":r.toolChoice??"auto"}var Gie=C(()=>{"use strict"});var Ur,xi=C(()=>{"use strict";zu();ki();tze();Co();H();Nm();$q();no();iM();Gie();_y();Fg();Ur=class extends fo{config;resolvedModel;constructor(e,t,n,o){super(t,e,n),this.config=o}getFallbackModelName(){return"gpt-3.5-turbo"}getFallbackModels(){return[]}adjustBuildBodyOptions(e,t){return t}adjustResponseFormat(e,t){return e}adjustRequestBody(e,t){return e}adjustBodyAfter400(e,t){}onStreamStart(e){}shouldAutoDiscoverModel(){return!0}getChatCompletionsURL(e){return`${Oa(this.config.baseURL)}/chat/completions`}getAuthHeaders(){return{Authorization:`Bearer ${this.config.apiKey}`}}supportsTools(){return!0}async validateConfiguration(){return typeof this.config.apiKey=="string"&&this.config.apiKey.trim().length>0}getConfiguration(){return{provider:this.providerName,model:this.modelName,defaultModel:this.getDefaultModel(),baseURL:this.config.baseURL}}async getAISDKModel(){let e=await this.resolveModelName();return this.buildDelegatingModel(e)}async resolveModelName(){if(this.resolvedModel)return this.resolvedModel;let e=this.modelName||this.getDefaultModel();if(e&&e.trim()!=="")return this.resolvedModel=e,this.modelName!==e&&this.refreshHandlersForModel(e),e;if(this.shouldAutoDiscoverModel()){try{let n=await this.getAvailableModels();if(n.length>0)return this.resolvedModel=n[0],this.refreshHandlersForModel(n[0]),g.info(`\u{1F50D} Auto-discovered model: ${n[0]} from ${n.length} available models`),n[0]}catch(n){g.warn("Model auto-discovery failed, using fallback:",n)}return this.getFallbackModelName()}let t=this.getFallbackModelName();return this.resolvedModel=t,this.refreshHandlersForModel(t),t}buildDelegatingModel(e){let t=this.getChatCompletionsURL(e),n=vt(),o=this.getAuthHeaders.bind(this),s=this.providerName,i=this.adjustBuildBodyOptions.bind(this),a=this.adjustResponseFormat.bind(this),c=this.adjustRequestBody.bind(this),l=this.adjustBodyAfter400.bind(this),u=d=>this.getTimeout(d??{});return{specificationVersion:"v3",provider:s,modelId:e,supportedUrls:{},doGenerate:async d=>{let p=$ie(d.prompt),f=d.responseFormat?a(JBe(d.responseFormat),e):void 0,h=Bie(c(zie({modelId:e,messages:p,options:i(e,{maxTokens:d.maxOutputTokens,temperature:d.temperature,topP:d.topP,presencePenalty:d.presencePenalty,frequencyPenalty:d.frequencyPenalty,seed:d.seed,stopSequences:d.stopSequences}),tools:WBe(d.tools),...d.toolChoice?{toolChoice:KBe(d.toolChoice)}:{},streaming:!1,...f?{responseFormat:f}:{}}),e)),y=pi(u(d),s,"generate"),x=og(d.abortSignal,y?.controller.signal),v;try{if(v=await n(t,{method:"POST",headers:{"Content-Type":"application/json",...o()},body:JSON.stringify(h),...x?{signal:x}:{}}),!v.ok){let I=await iN(t,h,v),M=v.status===400?l(h,I):void 0;if(!M)throw I;if(v=await n(t,{method:"POST",headers:{"Content-Type":"application/json",...o()},body:JSON.stringify(M),...x?{signal:x}:{}}),!v.ok)throw await iN(t,M,v)}}finally{y?.cleanup()}let T=await v.json(),S=T.choices?.[0],E=(typeof S?.message?.content=="string"?S.message.content:"")??"",k=[],R=S?.message?.reasoning_content||S?.message?.reasoning;typeof R=="string"&&R.length>0&&k.push({type:"reasoning",text:R}),E.length>0&&k.push({type:"text",text:E});for(let I of S?.message?.tool_calls??[])k.push({type:"tool-call",toolCallId:I.id,toolName:I.function.name,input:I.function.arguments??""});let P=S?.finish_reason;return{content:k,finishReason:{unified:P==="length"?"length":P==="tool_calls"||P==="function_call"?"tool-calls":P==="content_filter"?"content-filter":"stop",raw:P??"stop"},usage:{inputTokens:{total:T.usage?.prompt_tokens,noCache:T.usage?.prompt_tokens,cacheRead:void 0,cacheWrite:void 0},outputTokens:{total:T.usage?.completion_tokens,text:T.usage?.completion_tokens!==void 0&&T.usage?.completion_tokens_details?.reasoning_tokens!==void 0?Math.max(0,T.usage.completion_tokens-T.usage.completion_tokens_details.reasoning_tokens):T.usage?.completion_tokens,reasoning:T.usage?.completion_tokens_details?.reasoning_tokens}},warnings:[],request:{body:h},response:{...T.id?{id:T.id}:{},...T.model?{modelId:T.model}:{},headers:{},body:T}}},doStream:()=>{throw new Error(`${s}: doStream is not implemented on the delegating model \u2014 the streaming path uses executeStream directly.`)}}}async executeStream(e,t){this.validateStreamOptions(e);let n=Date.now(),o=this.getTimeout(e),s=pi(o,this.providerName,"stream"),i=new AbortController,a=bz([e.abortSignal,s?.controller.signal,i.signal]).signal,c,l,u,d,p;try{c=await this.resolveModelName();let U=!e.disableTools&&this.supportsTools();l=U?e.tools||await this.getAllTools():{},u=U?HBe(l):void 0,d=YBe(S4(e,l,U));let V=await this.buildMessagesForStream(e);p=$ie(V)}catch(U){throw s?.cleanup(),U}let f=this.getChatCompletionsURL(c),h=vt(),y=e.maxSteps||Ws,x=this.neurolink?.getEventEmitter(),v=[],T=[],{usagePromise:S,finishPromise:E,resolveUsage:k,resolveFinish:R}=b4(),{pushChunk:P,nextChunk:A}=T4(),I=this.onStreamStart(c),M=this.runStreamLoop({maxSteps:y,modelId:c,url:f,fetchImpl:h,abortSignal:a,options:e,conversation:p,openAITools:u,openAIToolChoice:d,toolsRecord:l,emitter:x,toolsUsed:v,toolExecutionSummaries:T,pushChunk:P,resolveUsage:k,resolveFinish:R}),D,z=U=>{D=U};I?.onUsage&&S.then(I.onUsage).catch(()=>{}),I?.onFinish&&E.then(U=>I.onFinish?.(U,D)).catch(()=>{});let O=this.providerName,$={stream:async function*(){let U=0;try{for(;;){let V=await A();if("done"in V)break;"content"in V&&typeof V.content=="string"&&V.content.length>0&&U++,yield V}if(await M,U===0&&v.length===0){g.warn(`${O}: Stream produced no output \u2014 emitting enriched sentinel`);let V=new Ja({message:"Stream produced no output"}),B=await Zm(V,void 0,D);Qm(B),yield B}}catch(V){if(Ja.isInstance(V)){let K=await Zm(V,void 0,D);Qm(K),yield K;return}let B=await Zm(V,void 0,D);throw Qm(B),yield B,V}finally{i.signal.aborted||i.abort()}}(),provider:this.providerName,model:c,analytics:eze.createAnalytics(this.providerName,c,{textStream:(async function*(){})(),usage:S,finishReason:E},Date.now()-n,{requestId:e.requestId??`${this.providerName}-stream-${Date.now()}`,streamingMode:!0}),toolsUsed:v,metadata:{startTime:n,streamId:`${this.providerName}-${Date.now()}`}};return Object.defineProperty($,"toolExecutions",{enumerable:!0,configurable:!0,get:()=>Ed(T.map(U=>({toolName:U.toolName,input:U.input,output:U.output,duration:U.endTime.getTime()-U.startTime.getTime()})))}),M.finally(()=>s?.cleanup()).catch(U=>{z(U)}),$}async runStreamLoop(e){let{maxSteps:t,modelId:n,url:o,fetchImpl:s,abortSignal:i,options:a,conversation:c,openAITools:l,openAIToolChoice:u,toolsRecord:d,emitter:p,toolsUsed:f,toolExecutionSummaries:h,pushChunk:y,resolveUsage:x,resolveFinish:v}=e;try{let T=null,S;for(let E=0;E<t;E++){let k=await this.streamOneStep({modelId:n,url:o,fetchImpl:s,abortSignal:i,options:a,conversation:c,openAITools:l,openAIToolChoice:u,pushChunk:y});if(T=k.finishReason,k.usage&&(S=QBe(S,k.usage)),k.toolCalls.size===0)break;await this.executeToolBatch({stepResult:k,conversation:c,toolsRecord:d,emitter:p,toolsUsed:f,toolExecutionSummaries:h,options:a})}return x({promptTokens:S?.prompt_tokens??0,completionTokens:S?.completion_tokens??0,totalTokens:S?.total_tokens??0}),v(T??"stop"),y({done:!0}),{finishReason:T??"stop",usage:S}}catch(T){throw g.error(`${this.providerName}: Stream error`,{error:T instanceof Error?T.message:String(T)}),x({promptTokens:0,completionTokens:0,totalTokens:0}),v("error"),y({done:!0}),T}}async streamOneStep(e){let t=Bie(this.adjustRequestBody(zie({modelId:e.modelId,messages:e.conversation,options:this.adjustBuildBodyOptions(e.modelId,e.options),tools:e.openAITools,...e.openAIToolChoice!==void 0?{toolChoice:e.openAIToolChoice}:{},streaming:!0}),e.modelId)),n=await e.fetchImpl(e.url,{method:"POST",headers:{"Content-Type":"application/json",...this.getAuthHeaders()},body:JSON.stringify(t),...e.abortSignal?{signal:e.abortSignal}:{}});if(!n.ok){let o=await iN(e.url,t,n),s=n.status===400?this.adjustBodyAfter400(t,o):void 0;if(!s)throw o;if(n=await e.fetchImpl(e.url,{method:"POST",headers:{"Content-Type":"application/json",...this.getAuthHeaders()},body:JSON.stringify(s),...e.abortSignal?{signal:e.abortSignal}:{}}),!n.ok)throw await iN(e.url,s,n)}if(!n.body)throw new Error(`${this.providerName}: stream response had no body`);return ZBe(n.body,o=>{e.pushChunk({content:o})},o=>{e.pushChunk({content:"",reasoning:o})})}async executeToolBatch(e){let{stepResult:t,conversation:n,toolsRecord:o,emitter:s,toolsUsed:i,toolExecutionSummaries:a,options:c}=e,l=[];for(let[,d]of t.toolCalls)l.push({id:d.id,type:"function",function:{name:d.name,arguments:d.argsBuffered}});n.push({role:"assistant",content:t.text.length>0?t.text:null,tool_calls:l});for(let[,d]of t.toolCalls){let p=new Date,f;try{f=JSON.parse(d.argsBuffered||"{}")}catch{f=d.argsBuffered}let h,y,x=o[d.name];if(s?.emit("tool:start",{toolName:d.name,toolCallId:d.id,input:f}),!x||typeof x.execute!="function")y=`Tool '${d.name}' is not registered.`,h={error:y};else try{h=await x.execute(f,{})}catch(T){y=T instanceof Error?T.message:String(T),h={error:y}}let v=new Date;i.push(d.name),a.push({toolCallId:d.id,toolName:d.name,input:f,output:h,...y?{error:y}:{},startTime:p,endTime:v}),n.push({role:"tool",tool_call_id:d.id,content:Uie(h)})}let u=a.slice(-t.toolCalls.size);Ay(s,u.map(d=>({toolName:d.toolName,output:d.output,...d.error?{error:d.error}:{}})));try{await this.handleToolExecutionStorage(u.map(d=>({toolCallId:d.toolCallId,toolName:d.toolName,input:d.input,output:d.output})),u.map(d=>({toolCallId:d.toolCallId,toolName:d.toolName,output:d.output})),c,new Date)}catch(d){g.warn(`[${this.constructor.name}] Failed to store tool executions`,{provider:this.providerName,error:d instanceof Error?d.message:String(d)})}}async getAvailableModels(){try{let e=`${Oa(this.config.baseURL)}/models`;g.debug(`Fetching available models from: ${e}`);let t=vt(),n=new AbortController,o=setTimeout(()=>n.abort(),5e3),s=await t(e,{headers:{...this.getAuthHeaders(),"Content-Type":"application/json"},signal:n.signal});if(clearTimeout(o),!s.ok)return g.warn(`Models endpoint returned ${s.status}: ${s.statusText}`),this.getFallbackModels();let i=await s.json();if(!i.data||!Array.isArray(i.data))return g.warn("Invalid models response format"),this.getFallbackModels();let a=i.data.map(c=>c.id).filter(Boolean);return g.shouldLog("debug")&&g.debug(`Discovered ${a.length} models:`,a),a.length>0?a:this.getFallbackModels()}catch(e){return g.warn(`[${this.constructor.name}] Failed to fetch models from endpoint:`,e),this.getFallbackModels()}}async getFirstAvailableModel(){return(await this.getAvailableModels())[0]||this.getFallbackModelName()}}});var nze={};te(nze,{OpenAIProvider:()=>Vie});var rze,$fr,Bfr,zfr,jfr,Vie,oze=C(()=>{"use strict";Dr();Co();Dt();H();mn();Cd();go();Lg();wx();no();Fg();xi();rze="https://api.openai.com/v1",$fr=(r,e)=>{let t=[r,e].map(n=>n?.trim()).find(n=>!!n&&n.length>0)??rze;try{let n=new URL(t),o=n.pathname&&n.pathname!=="/";if(n.hostname==="api.openai.com"&&!o)return n.pathname="/v1",Oa(n.toString())}catch{}return t},Bfr=()=>Mr(pBe()),zfr=()=>Or("OPENAI_MODEL","gpt-4o"),jfr=Tt.getTracer("neurolink.provider.openai"),Vie=class extends Ur{constructor(e,t,n,o){let s=o?.apiKey?.trim(),i=s&&s.length>0?s:Bfr(),a=$fr(o?.baseURL,process.env.OPENAI_BASE_URL);super("openai",e,t,{baseURL:a,apiKey:i}),g.debug("OpenAIProvider initialized",{model:this.modelName,providerName:this.providerName,baseURL:lr(this.config.baseURL)})}getProviderName(){return"openai"}getDefaultModel(){return zfr()}formatProviderError(e){if(e instanceof rr)return new zt(e.message,this.providerName);let t=e,n=t?.message&&typeof t.message=="string"?t.message:"Unknown error",o=t?.type&&typeof t.type=="string"?t.type:void 0,s=typeof t?.status=="number"?t.status:typeof t?.statusCode=="number"?t.statusCode:void 0;return n.includes("API_KEY_INVALID")||n.includes("Invalid API key")||n.includes("Incorrect API key")||n.includes("invalid_api_key")||o==="invalid_api_key"||s===401?new Ot(n.includes("Incorrect API key")||n.includes("Invalid API key")?n:"Invalid OpenAI API key. Please check your OPENAI_API_KEY environment variable.",this.providerName):n.includes("rate limit")||o==="rate_limit_error"||s===429?new tr("OpenAI rate limit exceeded. Please try again later.",this.providerName):n.includes("model_not_found")?new Zt(`Model not found: ${this.modelName}`,this.providerName):new qe(`OpenAI error: ${n}`,this.providerName)}onStreamStart(e){let t=jfr.startSpan("neurolink.provider.streamText",{kind:kr.CLIENT,attributes:{"gen_ai.system":"openai","gen_ai.request.model":e}}),n=!1,o=()=>{n||(n=!0,t.end())};return{onUsage:s=>{t.setAttribute("gen_ai.usage.input_tokens",s.promptTokens),t.setAttribute("gen_ai.usage.output_tokens",s.completionTokens);let i=wo(this.providerName,this.modelName,{input:s.promptTokens,output:s.completionTokens,total:s.totalTokens});i&&i>0&&t.setAttribute("neurolink.cost",i)},onFinish:(s,i)=>{t.setAttribute("gen_ai.response.finish_reason",s||"unknown"),s==="error"&&t.setStatus({code:Me.ERROR,message:i instanceof Error?i.message:String(i??"stream error")}),o()}}}getDefaultEmbeddingModel(){return process.env.OPENAI_EMBEDDING_MODEL||"text-embedding-3-small"}async embed(e,t){let n=t||this.getDefaultEmbeddingModel();g.debug("Generating embedding",{provider:this.providerName,model:n,textLength:e.length});try{let[o]=await this.callEmbeddings(n,[e],"embed");return g.debug("Embedding generated successfully",{provider:this.providerName,model:n,embeddingDimension:o.length}),o}catch(o){throw g.error("Embedding generation failed",{error:o instanceof Error?o.message:String(o),model:n,textLength:e.length}),this.handleProviderError(o)}}async embedMany(e,t){let n=t||this.getDefaultEmbeddingModel();g.debug("Generating batch embeddings",{provider:this.providerName,model:n,count:e.length});try{let o=await this.callEmbeddings(n,e,"embedMany");return g.debug("Batch embeddings generated successfully",{provider:this.providerName,model:n,count:o.length,embeddingDimension:o[0]?.length}),o}catch(o){throw g.error("Batch embedding generation failed",{error:o instanceof Error?o.message:String(o),model:n,count:e.length}),this.handleProviderError(o)}}async callEmbeddings(e,t,n){let o=`${Oa(this.config.baseURL)}/embeddings`,s=vt(),i=pi(3e4,this.providerName,"generate");try{let a=await s(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`},body:JSON.stringify({model:e,input:t.length===1?t[0]:t}),...i?.controller.signal?{signal:i.controller.signal}:{}});if(!a.ok){let u=await a.text().catch(()=>""),d=`OpenAI ${n} failed with status ${a.status}`,p;if(u)try{let f=JSON.parse(u);f.error?.message&&(d=f.error.message),p=f.error?.type}catch{}throw Object.assign(new Error(d),{status:a.status,type:p})}let l=((await a.json()).data??[]).map(u=>u.embedding).filter(u=>Array.isArray(u));if(l.length===0)throw new qe(`OpenAI ${n} returned no embeddings`,this.providerName);return l}finally{i?.cleanup()}}async executeImageGeneration(e){let t=Date.now(),n=e.prompt??e.input?.text??"";if(!n.trim())throw new Error("OpenAI image generation requires a prompt (input.text or prompt)");let o=e.model??this.modelName,s=Oa(this.config.baseURL??rze),i=e,a=i.size??this.aspectRatioToOpenAISize(i.aspectRatio,o),c=i.numberOfImages??1,l;o==="gpt-image-1"||o.startsWith("dall-e-3")?l=1:o.startsWith("dall-e-2")?l=Math.min(Math.max(c,1),10):l=1;let d={model:o,prompt:n,n:l,size:a};o==="gpt-image-1"?i.quality&&(d.quality=i.quality):o.startsWith("dall-e-3")?(d.response_format="b64_json",i.quality&&(d.quality=i.quality),i.style&&(d.style=i.style)):d.response_format="b64_json";let p=12e4,f=new AbortController,h=setTimeout(()=>f.abort(),p),y;try{y=await vt()(`${s}/images/generations`,{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify(d),signal:f.signal})}catch(E){throw E instanceof Error&&E.name==="AbortError"?new Error(`OpenAI image generation timed out after ${p/1e3}s`,{cause:E}):E}finally{clearTimeout(h)}if(!y.ok){let E=await y.text();throw new Error(`OpenAI image generation failed: ${y.status} \u2014 ${E}`)}let v=(await y.json()).data?.[0];if(!v)throw new Error("OpenAI image generation returned no images");let T=v.b64_json;if(!T&&v.url){await qu(v.url);let E=vt(),k=new AbortController,R=setTimeout(()=>k.abort(),6e4),P;try{P=await E(v.url,{signal:k.signal})}catch(I){throw I instanceof Error&&I.name==="AbortError"?new Error("OpenAI image URL download timed out after 60s",{cause:I}):I}finally{clearTimeout(R)}if(!P.ok)throw new Error(`OpenAI image generation: failed to fetch hosted URL ${v.url} (${P.status})`);T=(await nc(P,26214400,"OpenAI image fallback")).toString("base64")}if(!T)throw new Error("OpenAI image generation returned neither b64_json nor a URL");let S=Date.now()-t;return g.info(`[OpenAIProvider] Generated image (${T.length} base64 chars) in ${S}ms \u2014 model ${o}`),{content:v.revised_prompt??n,provider:this.providerName,model:o,usage:{input:0,output:0,total:0},imageOutput:{base64:T}}}aspectRatioToOpenAISize(e,t){return t==="gpt-image-1"?e==="16:9"||e==="3:2"?"1536x1024":e==="9:16"||e==="2:3"?"1024x1536":"1024x1024":t.startsWith("dall-e-3")?e==="16:9"||e==="3:2"?"1792x1024":e==="9:16"||e==="2:3"?"1024x1792":"1024x1024":"1024x1024"}}});function Fe(r,e,t,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof e=="function"?r!==e||!o:!e.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(r,t):o?o.value=t:e.set(r,t),t}function G(r,e,t,n){if(t==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?r!==e||!n:!e.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?n:t==="a"?n.call(r):n?n.value:e.get(r)}var Jl=C(()=>{});var L0,w4=C(()=>{L0=function(){let{crypto:r}=globalThis;if(r?.randomUUID)return L0=r.randomUUID.bind(r),r.randomUUID();let e=new Uint8Array(1),t=r?()=>r.getRandomValues(e)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,n=>(+n^t()&15>>+n/4).toString(16))}});function Wp(r){return typeof r=="object"&&r!==null&&("name"in r&&r.name==="AbortError"||"message"in r&&String(r.message).includes("FetchRequestCanceledException"))}var _T,CT=C(()=>{_T=r=>{if(r instanceof Error)return r;if(typeof r=="object"&&r!==null){try{if(Object.prototype.toString.call(r)==="[object Error]"){let e=new Error(r.message,r.cause?{cause:r.cause}:{});return r.stack&&(e.stack=r.stack),r.cause&&!e.cause&&(e.cause=r.cause),r.name&&(e.name=r.name),e}}catch{}try{return new Error(JSON.stringify(r))}catch{}}return new Error(r)}});var Je,ni,oc,rf,F0,aN,U0,$0,B0,z0,j0,G0,V0,q0,ko=C(()=>{CT();Je=class extends Error{},ni=class r extends Je{constructor(e,t,n,o,s){super(`${r.makeMessage(e,t,n)}`),this.status=e,this.headers=o,this.requestID=o?.get("request-id"),this.error=t,this.type=s??null}static makeMessage(e,t,n){let o=t?.message?typeof t.message=="string"?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&o?`${e} ${o}`:e?`${e} status code (no body)`:o||"(no status code or body)"}static generate(e,t,n,o){if(!e||!o)return new rf({message:n,cause:_T(t)});let s=t,i=s?.error?.type;return e===400?new U0(e,s,n,o,i):e===401?new $0(e,s,n,o,i):e===403?new B0(e,s,n,o,i):e===404?new z0(e,s,n,o,i):e===409?new j0(e,s,n,o,i):e===422?new G0(e,s,n,o,i):e===429?new V0(e,s,n,o,i):e>=500?new q0(e,s,n,o,i):new r(e,s,n,o,i)}},oc=class extends ni{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}},rf=class extends ni{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}},F0=class extends rf{constructor({message:e}={}){super({message:e??"Request timed out."})}},aN=class extends Je{constructor(e,{cause:t}={}){super(e??"Retryable error."),t!==void 0&&(this.cause=t)}},U0=class extends ni{},$0=class extends ni{},B0=class extends ni{},z0=class extends ni{},j0=class extends ni{},G0=class extends ni{},V0=class extends ni{},q0=class extends ni{}});function E4(r){return typeof r!="object"?{}:r??{}}function Hie(r){if(!r)return!0;for(let e in r)return!1;return!0}function ize(r,e){return Object.prototype.hasOwnProperty.call(r,e)}var Vfr,sze,Uc,qie,aze,_4,nf=C(()=>{ko();Vfr=/^[a-z][a-z0-9+.-]*:/i,sze=r=>Vfr.test(r),Uc=r=>(Uc=Array.isArray,Uc(r)),qie=Uc;aze=(r,e)=>{if(typeof e!="number"||!Number.isInteger(e))throw new Je(`${r} must be an integer`);if(e<0)throw new Je(`${r} must be a positive integer`);return e},_4=r=>{try{return JSON.parse(r)}catch{return}}});var Kp,H0=C(()=>{Kp=(r,e)=>new Promise(t=>{if(e?.aborted)return t();let n=()=>{clearTimeout(o),t()},o=setTimeout(()=>{e?.removeEventListener("abort",n),t()},r);e?.addEventListener("abort",n,{once:!0})})});var Ld,cN=C(()=>{Ld="0.102.0"});function qfr(){return typeof Deno<"u"&&Deno.build!=null?"deno":typeof EdgeRuntime<"u"?"edge":Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]"?"node":"unknown"}function Wfr(){if(typeof navigator>"u"||!navigator)return null;let r=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:e,pattern:t}of r){let n=t.exec(navigator.userAgent);if(n){let o=n[1]||0,s=n[2]||0,i=n[3]||0;return{browser:e,version:`${o}.${s}.${i}`}}}return null}var dze,Hfr,cze,lze,uze,lN,C4=C(()=>{cN();dze=()=>typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u";Hfr=()=>{let r=qfr();if(r==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ld,"X-Stainless-OS":lze(Deno.build.os),"X-Stainless-Arch":cze(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version=="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ld,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(r==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ld,"X-Stainless-OS":lze(globalThis.process.platform??"unknown"),"X-Stainless-Arch":cze(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let e=Wfr();return e?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ld,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${e.browser}`,"X-Stainless-Runtime-Version":e.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ld,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};cze=r=>r==="x32"?"x32":r==="x86_64"||r==="x64"?"x64":r==="arm"?"arm":r==="aarch64"||r==="arm64"?"arm64":r?`other:${r}`:"unknown",lze=r=>(r=r.toLowerCase(),r.includes("ios")?"iOS":r==="android"?"Android":r==="darwin"?"MacOS":r==="win32"?"Windows":r==="freebsd"?"FreeBSD":r==="openbsd"?"OpenBSD":r==="linux"?"Linux":r?`Other:${r}`:"Unknown"),lN=()=>uze??(uze=Hfr())});function pze(){if(typeof fetch<"u")return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function Wie(...r){let e=globalThis.ReadableStream;if(typeof e>"u")throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new e(...r)}function k4(r){let e=Symbol.asyncIterator in r?r[Symbol.asyncIterator]():r[Symbol.iterator]();return Wie({start(){},async pull(t){let{done:n,value:o}=await e.next();n?t.close():t.enqueue(o)},async cancel(){await e.return?.()}})}function uN(r){if(r[Symbol.asyncIterator])return r;let e=r.getReader();return{async next(){try{let t=await e.read();return t?.done&&e.releaseLock(),t}catch(t){throw e.releaseLock(),t}},async return(){let t=e.cancel();return e.releaseLock(),await t,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function mze(r){if(r===null||typeof r!="object")return;if(r[Symbol.asyncIterator]){await r[Symbol.asyncIterator]().return?.();return}let e=r.getReader(),t=e.cancel();e.releaseLock(),await t}var W0=C(()=>{});var fze,gze=C(()=>{fze=({headers:r,body:e})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(e)})});var Kie,Jie,Yie,hze,Xie=C(()=>{Kie="RFC3986",Jie=r=>String(r),Yie={RFC1738:r=>String(r).replace(/%20/g,"+"),RFC3986:Jie},hze="RFC1738"});function xze(r){return!r||typeof r!="object"?!1:!!(r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer(r))}function Qie(r,e){if(Uc(r)){let t=[];for(let n=0;n<r.length;n+=1)t.push(e(r[n]));return t}return e(r)}var R4,of,Zie,yze,vze=C(()=>{Xie();nf();R4=(r,e)=>(R4=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),R4(r,e)),of=(()=>{let r=[];for(let e=0;e<256;++e)r.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return r})(),Zie=1024,yze=(r,e,t,n,o)=>{if(r.length===0)return r;let s=r;if(typeof r=="symbol"?s=Symbol.prototype.toString.call(r):typeof r!="string"&&(s=String(r)),t==="iso-8859-1")return escape(s).replace(/%u[0-9a-f]{4}/gi,function(a){return"%26%23"+parseInt(a.slice(2),16)+"%3B"});let i="";for(let a=0;a<s.length;a+=Zie){let c=s.length>=Zie?s.slice(a,a+Zie):s,l=[];for(let u=0;u<c.length;++u){let d=c.charCodeAt(u);if(d===45||d===46||d===95||d===126||d>=48&&d<=57||d>=65&&d<=90||d>=97&&d<=122||o===hze&&(d===40||d===41)){l[l.length]=c.charAt(u);continue}if(d<128){l[l.length]=of[d];continue}if(d<2048){l[l.length]=of[192|d>>6]+of[128|d&63];continue}if(d<55296||d>=57344){l[l.length]=of[224|d>>12]+of[128|d>>6&63]+of[128|d&63];continue}u+=1,d=65536+((d&1023)<<10|c.charCodeAt(u)&1023),l[l.length]=of[240|d>>18]+of[128|d>>12&63]+of[128|d>>6&63]+of[128|d&63]}i+=l.join("")}return i}});function Yfr(r){return typeof r=="string"||typeof r=="number"||typeof r=="boolean"||typeof r=="symbol"||typeof r=="bigint"}function wze(r,e,t,n,o,s,i,a,c,l,u,d,p,f,h,y,x,v){let T=r,S=v,E=0,k=!1;for(;(S=S.get(eae))!==void 0&&!k;){let M=S.get(r);if(E+=1,typeof M<"u"){if(M===E)throw new RangeError("Cyclic object value");k=!0}typeof S.get(eae)>"u"&&(E=0)}if(typeof l=="function"?T=l(e,T):T instanceof Date?T=p?.(T):t==="comma"&&Uc(T)&&(T=Qie(T,function(M){return M instanceof Date?p?.(M):M})),T===null){if(s)return c&&!y?c(e,qi.encoder,x,"key",f):e;T=""}if(Yfr(T)||xze(T)){if(c){let M=y?e:c(e,qi.encoder,x,"key",f);return[h?.(M)+"="+h?.(c(T,qi.encoder,x,"value",f))]}return[h?.(e)+"="+h?.(String(T))]}let R=[];if(typeof T>"u")return R;let P;if(t==="comma"&&Uc(T))y&&c&&(T=Qie(T,c)),P=[{value:T.length>0?T.join(",")||null:void 0}];else if(Uc(l))P=l;else{let M=Object.keys(T);P=u?M.sort(u):M}let A=a?String(e).replace(/\./g,"%2E"):String(e),I=n&&Uc(T)&&T.length===1?A+"[]":A;if(o&&Uc(T)&&T.length===0)return I+"[]";for(let M=0;M<P.length;++M){let D=P[M],z=typeof D=="object"&&typeof D.value<"u"?D.value:T[D];if(i&&z===null)continue;let O=d&&a?D.replace(/\./g,"%2E"):D,L=Uc(T)?typeof t=="function"?t(I,O):I:I+(d?"."+O:"["+O+"]");v.set(r,E);let $=new WeakMap;$.set(eae,v),Sze(R,wze(z,L,t,n,o,s,i,a,t==="comma"&&y&&Uc(T)?null:c,l,u,d,p,f,h,y,x,$))}return R}function Xfr(r=qi){if(typeof r.allowEmptyArrays<"u"&&typeof r.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof r.encodeDotInKeys<"u"&&typeof r.encodeDotInKeys!="boolean")throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(r.encoder!==null&&typeof r.encoder<"u"&&typeof r.encoder!="function")throw new TypeError("Encoder has to be a function.");let e=r.charset||qi.charset;if(typeof r.charset<"u"&&r.charset!=="utf-8"&&r.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let t=Kie;if(typeof r.format<"u"){if(!R4(Yie,r.format))throw new TypeError("Unknown format option provided.");t=r.format}let n=Yie[t],o=qi.filter;(typeof r.filter=="function"||Uc(r.filter))&&(o=r.filter);let s;if(r.arrayFormat&&r.arrayFormat in Tze?s=r.arrayFormat:"indices"in r?s=r.indices?"indices":"repeat":s=qi.arrayFormat,"commaRoundTrip"in r&&typeof r.commaRoundTrip!="boolean")throw new TypeError("`commaRoundTrip` must be a boolean, or absent");let i=typeof r.allowDots>"u"?r.encodeDotInKeys?!0:qi.allowDots:!!r.allowDots;return{addQueryPrefix:typeof r.addQueryPrefix=="boolean"?r.addQueryPrefix:qi.addQueryPrefix,allowDots:i,allowEmptyArrays:typeof r.allowEmptyArrays=="boolean"?!!r.allowEmptyArrays:qi.allowEmptyArrays,arrayFormat:s,charset:e,charsetSentinel:typeof r.charsetSentinel=="boolean"?r.charsetSentinel:qi.charsetSentinel,commaRoundTrip:!!r.commaRoundTrip,delimiter:typeof r.delimiter>"u"?qi.delimiter:r.delimiter,encode:typeof r.encode=="boolean"?r.encode:qi.encode,encodeDotInKeys:typeof r.encodeDotInKeys=="boolean"?r.encodeDotInKeys:qi.encodeDotInKeys,encoder:typeof r.encoder=="function"?r.encoder:qi.encoder,encodeValuesOnly:typeof r.encodeValuesOnly=="boolean"?r.encodeValuesOnly:qi.encodeValuesOnly,filter:o,format:t,formatter:n,serializeDate:typeof r.serializeDate=="function"?r.serializeDate:qi.serializeDate,skipNulls:typeof r.skipNulls=="boolean"?r.skipNulls:qi.skipNulls,sort:typeof r.sort=="function"?r.sort:null,strictNullHandling:typeof r.strictNullHandling=="boolean"?r.strictNullHandling:qi.strictNullHandling}}function Eze(r,e={}){let t=r,n=Xfr(e),o,s;typeof n.filter=="function"?(s=n.filter,t=s("",t)):Uc(n.filter)&&(s=n.filter,o=s);let i=[];if(typeof t!="object"||t===null)return"";let a=Tze[n.arrayFormat],c=a==="comma"&&n.commaRoundTrip;o||(o=Object.keys(t)),n.sort&&o.sort(n.sort);let l=new WeakMap;for(let p=0;p<o.length;++p){let f=o[p];n.skipNulls&&t[f]===null||Sze(i,wze(t[f],f,a,c,n.allowEmptyArrays,n.strictNullHandling,n.skipNulls,n.encodeDotInKeys,n.encode?n.encoder:null,n.filter,n.sort,n.allowDots,n.serializeDate,n.format,n.formatter,n.encodeValuesOnly,n.charset,l))}let u=i.join(n.delimiter),d=n.addQueryPrefix===!0?"?":"";return n.charsetSentinel&&(n.charset==="iso-8859-1"?d+="utf8=%26%2310003%3B&":d+="utf8=%E2%9C%93&"),u.length>0?d+u:""}var Tze,Sze,bze,qi,eae,_ze=C(()=>{vze();Xie();nf();Tze={brackets(r){return String(r)+"[]"},comma:"comma",indices(r,e){return String(r)+"["+e+"]"},repeat(r){return String(r)}},Sze=function(r,e){Array.prototype.push.apply(r,Uc(e)?e:[e])},qi={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:yze,encodeValuesOnly:!1,format:Kie,formatter:Jie,indices:!1,serializeDate(r){return(bze??(bze=Function.prototype.call.bind(Date.prototype.toISOString)))(r)},skipNulls:!1,strictNullHandling:!1};eae={}});function Cze(r){return Eze(r,{arrayFormat:"brackets"})}var tae=C(()=>{_ze()});function I4(r){if(!r)return;let e;try{e=new URL(r)}catch(n){throw new On(`Invalid token endpoint base URL "${r}": ${n}`)}if(e.protocol==="https:")return;let t=e.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(!(e.protocol==="http:"&&(t==="localhost"||t==="127.0.0.1"||t==="::1")))throw new On(`Refusing to send credential over non-https token endpoint "${r}"`)}async function P4(r,e){let t=await egr(r),n;try{n=JSON.parse(t)}catch{throw new On(`Token endpoint returned non-JSON response (status ${r.status})`,r.status,Yl(t),e)}if(!n.access_token)throw new On(`Token endpoint response missing access_token: ${JSON.stringify(Yl(n))}`,r.status,Yl(n),e);if(n.token_type&&n.token_type.toLowerCase()!=="bearer")throw new On(`Token endpoint response: unsupported token_type "${n.token_type}" (want Bearer)`,r.status,Yl(n),e);return n}function Yl(r){if(r==null)return r;if(typeof r=="string"){let e;try{e=JSON.parse(r)}catch{return r.length<=rae?r:r.slice(0,rae)+`... <${r.length-rae} more chars>`}return JSON.stringify(Yl(e))}if(typeof r=="object"&&!Array.isArray(r)){let e={};for(let[t,n]of Object.entries(r))Qfr.has(t)&&(e[t]=n);return e}return null}async function M4(r,e=t=>console.warn(`anthropic-sdk: ${t}`)){if(typeof process>"u"||process.platform==="win32")return;let t=await Promise.resolve().then(()=>(ri(),qp)),n=r,o;try{n=await t.promises.realpath(r),o=await t.promises.stat(n)}catch{return}let s=o.mode&511;if(s&18)throw new On(`Credentials file at ${n} is group/world-writable (mode 0o${s.toString(8)}); this allows other local users to plant tokens. Run \`chmod 600 ${n}\`.`);if(s&36)throw new On(`Credentials file at ${n} is group/world-readable (mode 0o${s.toString(8)}); run \`chmod 600 ${n}\` before retrying.`);typeof process.getuid=="function"&&o.uid!==process.getuid()&&e(`credentials file at ${n} is owned by uid ${o.uid} (current process uid ${process.getuid()}); verify this is intentional.`)}async function O4(r,e){let t=await Promise.resolve().then(()=>(ri(),qp)),o=(await Promise.resolve().then(()=>(mo(),Rd))).dirname(r);await t.promises.mkdir(o,{recursive:!0,mode:448});let s=`${r}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;try{let i=await t.promises.open(s,"w",384);try{await i.writeFile(JSON.stringify(e,null,2)),await i.sync()}finally{await i.close()}await t.promises.rename(s,r)}catch(i){throw await t.promises.unlink(s).catch(()=>{}),i}try{let i=await t.promises.open(o,"r");try{await i.sync()}finally{await i.close()}}catch{}}async function egr(r){if(!r.body)return"";let e=r.body.getReader(),t=[],n=0;for(;;){let{done:s,value:i}=await e.read();if(s)break;if(n+i.length>kze){let a=kze-n;a>0&&t.push(i.subarray(0,a)),await e.cancel();break}t.push(i),n+=i.length}let o;if(t.length===1)o=t[0];else{o=new Uint8Array(t.reduce((i,a)=>i+a.length,0));let s=0;for(let i of t)o.set(i,s),s+=i.length}return new TextDecoder("utf-8").decode(o)}var Rze,Aze,A4,kT,Ize,Pze,K0,Mze,kze,rae,Qfr,On,J0=C(()=>{ko();Rze="urn:ietf:params:oauth:grant-type:jwt-bearer",Aze="refresh_token",A4="/v1/oauth/token",kT="oauth-2025-04-20",Ize="oidc-federation-2026-04-01",Pze=120,K0=30,Mze=5,kze=1<<20;rae=2e3,Qfr=new Set(["error","error_description","error_uri"]);On=class extends Je{constructor(e,t=null,n=null,o=null){super(e),this.statusCode=t,this.body=n,this.requestId=o}}});function Jp(){return Math.floor(Date.now()/1e3)}var dN=C(()=>{});var N4,Oze=C(()=>{J0();dN();N4=class{constructor(e,t){this.cached=null,this.pendingRefresh=null,this.nextForce=!1,this.lastAdvisoryError=0,this.provider=e,this.onAdvisoryRefreshError=t}async getToken(){let e=this.nextForce;this.nextForce=!1;let t=this.cached;if(e||t==null)return(await this.refresh(e)).token;if(t.expiresAt==null)return t.token;let n=t.expiresAt-Jp();return n>Pze?t.token:n>K0?(this.backgroundRefresh(),t.token):(await this.refresh()).token}invalidate(){this.cached=null,this.nextForce=!0}refresh(e=!1){return this.pendingRefresh&&!e?this.pendingRefresh:this.doRefresh(e)}backgroundRefresh(){this.pendingRefresh||Jp()-this.lastAdvisoryError<Mze||this.doRefresh().catch(e=>{this.lastAdvisoryError=Jp(),this.onAdvisoryRefreshError?.(e)})}doRefresh(e=!1){return this.pendingRefresh=this.provider(e?{forceRefresh:!0}:void 0).then(t=>(this.cached=t,this.pendingRefresh=null,t),t=>{throw this.pendingRefresh=null,t}),this.pendingRefresh}}});var rn,pN=C(()=>{rn=r=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[r]?.trim()||void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(r)?.trim()||void 0}});function Lze(r){let e=0;for(let o of r)e+=o.length;let t=new Uint8Array(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function Y0(r){let e;return(Nze??(e=new globalThis.TextEncoder,Nze=e.encode.bind(e)))(r)}function nae(r){let e;return(Dze??(e=new globalThis.TextDecoder,Dze=e.decode.bind(e)))(r)}var Nze,Dze,D4=C(()=>{});var Fze=C(()=>{ko();D4()});function mN(){}function L4(r,e,t){return!e||F4[r]>F4[t]?mN:e[r].bind(e)}function Cn(r){let e=r.logger,t=r.logLevel??"off";if(!e)return tgr;let n=Uze.get(e);if(n&&n[0]===t)return n[1];let o={error:L4("error",e,t),warn:L4("warn",e,t),info:L4("info",e,t),debug:L4("debug",e,t)};return Uze.set(e,[t,o]),o}var F4,oae,tgr,Uze,sf,$g=C(()=>{nf();F4={off:0,error:200,warn:300,info:400,debug:500},oae=(r,e,t)=>{if(r){if(ize(F4,r))return r;Cn(t).warn(`${e} was set to ${JSON.stringify(r)}, expected one of ${JSON.stringify(Object.keys(F4))}`)}};tgr={error:mN,warn:mN,info:mN,debug:mN},Uze=new WeakMap;sf=r=>(r.options&&(r.options={...r.options},delete r.options.headers),r.headers&&(r.headers=Object.fromEntries((r.headers instanceof Headers?[...r.headers]:Object.entries(r.headers)).map(([e,t])=>[e,e.toLowerCase()==="authorization"||e.toLowerCase()==="api-key"||e.toLowerCase()==="x-api-key"||e.toLowerCase()==="cookie"||e.toLowerCase()==="set-cookie"?"***":t]))),"retryOfRequestLogID"in r&&(r.retryOfRequestLogID&&(r.retryOf=r.retryOfRequestLogID),delete r.retryOfRequestLogID),r)});var sae=C(()=>{nf();Fze();pN();$g();w4();H0();tae()});function $ze(r){if(!r)throw new Error("profile name is empty");if(r==="."||r==="..")throw new Error(`profile name "${r}" is not allowed`);if(r.includes("/")||r.includes("\\"))throw new Error(`profile name "${r}" must not contain path separators`);if(!rgr.test(r))throw new Error(`profile name "${r}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`)}var U4,rgr,Bze,zze,iae,ngr,jze,aae=C(()=>{C4();sae();U4="1.0",rgr=/^[A-Za-z0-9_.-]+$/;Bze=async r=>{var e,t;let n=await iae();if(n===null)return null;let o=r??await jze();if(o===null)return null;$ze(o);let s=await Promise.resolve().then(()=>(ri(),qp)),a=(await Promise.resolve().then(()=>(mo(),Rd))).join(n,"configs",`${o}.json`),c;try{c=await s.promises.readFile(a,"utf-8")}catch(d){if(d?.code!=="ENOENT")throw new Error(`failed to read config file ${a}: ${d}`);c=null}if(c===null){let d=rn("ANTHROPIC_ORGANIZATION_ID"),p=rn("ANTHROPIC_IDENTITY_TOKEN_FILE"),f=rn("ANTHROPIC_FEDERATION_RULE_ID");return f&&d?{fromFile:!1,config:{organization_id:d,workspace_id:rn("ANTHROPIC_WORKSPACE_ID"),base_url:rn("ANTHROPIC_BASE_URL"),authentication:{type:"oidc_federation",federation_rule_id:f,service_account_id:rn("ANTHROPIC_SERVICE_ACCOUNT_ID"),identity_token:p?{source:"file",path:p}:void 0,scope:rn("ANTHROPIC_SCOPE")}}}:null}let l;try{l=JSON.parse(c)}catch(d){throw new Error(`failed to parse config file ${a}: ${d}`)}if(!l.authentication)throw new Error(`config file ${a} is missing "authentication"`);let u=l.authentication.type;if(u!=="oidc_federation"&&u!=="user_oauth")throw new Error(`authentication.type "${u}" is not a known authentication type`);if(l.organization_id??(l.organization_id=rn("ANTHROPIC_ORGANIZATION_ID")),l.workspace_id??(l.workspace_id=rn("ANTHROPIC_WORKSPACE_ID")),l.base_url??(l.base_url=rn("ANTHROPIC_BASE_URL")),(e=l.authentication).scope??(e.scope=rn("ANTHROPIC_SCOPE")),l.authentication.type==="oidc_federation"){if(!l.authentication.identity_token){let d=rn("ANTHROPIC_IDENTITY_TOKEN_FILE");d&&(l.authentication.identity_token={source:"file",path:d})}l.authentication.federation_rule_id||(l.authentication.federation_rule_id=rn("ANTHROPIC_FEDERATION_RULE_ID")??""),(t=l.authentication).service_account_id??(t.service_account_id=rn("ANTHROPIC_SERVICE_ACCOUNT_ID"))}return{config:l,fromFile:!0}},zze=async(r,e)=>{if(r?.authentication.credentials_path)return r.authentication.credentials_path;let t=await iae();if(!t)return null;let n=e??await jze();return n?($ze(n),(await Promise.resolve().then(()=>(mo(),Rd))).join(t,"credentials",`${n}.json`)):null},iae=async()=>{if(!ngr())return null;let r=await Promise.resolve().then(()=>(mo(),Rd)),e=rn("ANTHROPIC_CONFIG_DIR");if(e)return e;if(lN()["X-Stainless-OS"]==="Windows"){let s=rn("APPDATA");if(s)return r.join(s,"Anthropic");let i=rn("USERPROFILE");return i?r.join(i,"AppData","Roaming","Anthropic"):null}let n=rn("XDG_CONFIG_HOME");if(n)return r.join(n,"anthropic");let o=rn("HOME");return o?r.join(o,".config","anthropic"):null},ngr=()=>{let r=lN()["X-Stainless-Runtime"];return r==="node"||r==="deno"},jze=async()=>{let r=await iae();if(!r)return null;let e=rn("ANTHROPIC_PROFILE");if(e)return e;let t=await Promise.resolve().then(()=>(ri(),qp)),o=(await Promise.resolve().then(()=>(mo(),Rd))).join(r,"active_config");try{return(await t.promises.readFile(o,"utf-8")).trim()||"default"}catch(s){if(s?.code!=="ENOENT")throw new Error(`failed to read ${o}: ${s}`);return"default"}}});function cae(r){if(!r)throw new Je("Identity token file path is empty");return async()=>{let e=await Promise.resolve().then(()=>(ri(),qp)),t;try{t=await e.promises.readFile(r,"utf-8")}catch(o){throw new Je(`Failed to read identity token file at ${r}: ${o}`)}let n=t.trim();if(!n)throw new Je(`Identity token file at ${r} is empty`);return n}}function Gze(r){if(!r)throw new Je("Identity token value is empty");return()=>r}var Vze=C(()=>{ko()});function qze(r){return async()=>{I4(r.baseURL);let e=await r.identityTokenProvider();if(e.length>16*1024)throw new On(`Identity token is ${Math.ceil(e.length/1024)} KiB, exceeds the 16 KiB assertion limit`);let t={grant_type:Rze,assertion:e,federation_rule_id:r.federationRuleId,organization_id:r.organizationId};r.serviceAccountId&&(t.service_account_id=r.serviceAccountId),r.workspaceId&&(t.workspace_id=r.workspaceId);let n=`${r.baseURL}${A4}`,o;try{o=await r.fetch(n,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":`${kT},${Ize}`,"User-Agent":r.userAgent||`anthropic-sdk-typescript/${Ld} oidcFederationProvider`},body:JSON.stringify(t)})}catch(c){throw new On(`Failed to reach token endpoint ${n}: ${c}`)}let s=o.headers.get("Request-Id");if(!o.ok){let c=await o.text().catch(()=>""),l=Yl(c),u="";throw o.status===401&&(u=` Ensure your federation rule matches your identity token. ${r.workspaceId?"":"If your federation rule is scoped to multiple workspaces, set the ANTHROPIC_WORKSPACE_ID environment variable, the 'workspace_id' config key, or the `workspaceId` option. "}View your authentication events in the Workload identity page of Claude Console for more details.`),new On(`Token exchange failed with status ${o.status}${s?` (request-id ${s})`:""}: ${l}${u}`,o.status,l,s)}let i=await P4(o,s),a=Number(i.expires_in);if(!Number.isFinite(a))throw new On(`Token endpoint response missing required fields: ${JSON.stringify(Yl(i))}`,o.status,Yl(i),s);return{token:i.access_token,expiresAt:Jp()+a}}}var Hze=C(()=>{J0();dN();cN()});function Wze(r){return async e=>{let t=await Promise.resolve().then(()=>(ri(),qp));await M4(r.credentialsPath,r.onSafetyWarning);let n;try{n=await t.promises.readFile(r.credentialsPath,"utf-8")}catch(x){throw new On(`Credentials file not found at ${r.credentialsPath}: ${x}`)}let o;try{o=JSON.parse(n)}catch(x){throw new On(`Credentials file at ${r.credentialsPath} is not valid JSON: ${x}`)}let s=o.access_token;if(!s)throw new On(`Credentials file at ${r.credentialsPath} must include 'access_token'`);let i=o.expires_at;if(!e?.forceRefresh&&(i==null||Jp()<i-K0))return{token:s,expiresAt:i??null};let a=o.refresh_token;if(!r.clientId||!a)throw new On(`Access token at ${r.credentialsPath} has expired and no refresh is available (client_id ${r.clientId?"set":"empty"}, refresh_token ${a?"set":"empty"})`);I4(r.baseURL);let c={grant_type:Aze,refresh_token:a,client_id:r.clientId},l=`${r.baseURL}${A4}`,u;try{u=await r.fetch(l,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":kT,"User-Agent":r.userAgent||`anthropic-sdk-typescript/${Ld} userOAuthProvider`},body:JSON.stringify(c)})}catch(x){throw new On(`User OAuth refresh failed to reach token endpoint: ${x}`)}let d=u.headers.get("Request-Id");if(!u.ok){let x=await u.text().catch(()=>"");throw new On(`User OAuth refresh failed (HTTP ${u.status}): ${Yl(x)}`,u.status,Yl(x),d)}let p=await P4(u,d),f=Number(p.expires_in);if(!Number.isFinite(f))throw new On(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(Yl(p))}`,u.status,Yl(p),d);let h=Jp()+f,y=p.refresh_token||a;return await O4(r.credentialsPath,{...o,version:U4,type:"oauth_token",access_token:p.access_token,expires_at:h,refresh_token:y}),{token:p.access_token,expiresAt:h}}}var Kze=C(()=>{aae();J0();dN();cN()});function lae(r,e){let t=r.authentication.credentials_path??null,n=(r.base_url||e.baseURL).replace(/\/+$/,""),o=ogr(r,t,n,e),s={};return r.workspace_id&&r.authentication.type==="user_oauth"&&(s["anthropic-workspace-id"]=r.workspace_id),{provider:o,extraHeaders:s,baseURL:r.base_url||void 0}}async function Jze(r,e){let t=await Bze(e);if(!t)return null;let{config:n,fromFile:o}=t,s=n.authentication.credentials_path||!o?n:{...n,authentication:{...n.authentication,credentials_path:await zze(n,e)??void 0}};return lae(s,r)}function ogr(r,e,t,n){switch(r.authentication.type){case"oidc_federation":{let o=r.authentication,s=sgr(o);if(!s)throw new On("oidc_federation config requires an identity token (set authentication.identity_token, ANTHROPIC_IDENTITY_TOKEN_FILE, or ANTHROPIC_IDENTITY_TOKEN)");if(!o.federation_rule_id)throw new On("oidc_federation config requires 'federation_rule_id'. Set it in authentication.federation_rule_id in your profile, or via ANTHROPIC_FEDERATION_RULE_ID (profile takes precedence).");if(!r.organization_id)throw new On("oidc_federation config requires organization_id (set ANTHROPIC_ORGANIZATION_ID or config.organization_id)");let i=qze({identityTokenProvider:s,federationRuleId:o.federation_rule_id,organizationId:r.organization_id,serviceAccountId:o.service_account_id,workspaceId:r.workspace_id,baseURL:t,fetch:n.fetch,userAgent:n.userAgent});return e?igr(i,e,n.onCacheWriteError,n.onSafetyWarning):i}case"user_oauth":{if(!e)throw new On("user_oauth config requires authentication.credentials_path (or load via a profile so it defaults to <config_dir>/credentials/<profile>.json)");return Wze({credentialsPath:e,clientId:r.authentication.client_id,baseURL:t,fetch:n.fetch,userAgent:n.userAgent,onSafetyWarning:n.onSafetyWarning})}default:{let o=r.authentication.type;throw new On(`authentication.type "${o}" is not a known authentication type`)}}}function sgr(r){if(r.identity_token){let n=r.identity_token.source;if(n!=="file")throw new On(`identity_token.source "${n}" is not supported by this SDK version (only "file")`);if(!r.identity_token.path)throw new On('identity_token.source "file" requires a non-empty path');return cae(r.identity_token.path)}let e=rn("ANTHROPIC_IDENTITY_TOKEN_FILE");if(e)return cae(e);let t=rn("ANTHROPIC_IDENTITY_TOKEN");return t?Gze(t):null}function igr(r,e,t,n){return async o=>{let s=await Promise.resolve().then(()=>(ri(),qp));await M4(e,n);let i;try{let c=await s.promises.readFile(e,"utf-8");i=JSON.parse(c);let l=i?.access_token;if(l&&!o?.forceRefresh){let u=i?.expires_at;if(u==null||Jp()<u-K0)return{token:l,expiresAt:u??null}}}catch(c){c?.code!=="ENOENT"&&!(c instanceof SyntaxError)&&t?.(c)}let a=await r(o);try{await O4(e,{...i??{},version:U4,type:"oauth_token",access_token:a.token,expires_at:a.expiresAt})}catch(c){t?.(c)}return a}}var Yze=C(()=>{pN();aae();J0();dN();Vze();Hze();Kze()});function agr(r,e){for(let o=e??0;o<r.length;o++){if(r[o]===10)return{preceding:o,index:o+1,carriage:!1};if(r[o]===13)return{preceding:o,index:o+1,carriage:!0}}return null}function Xze(r){for(let n=0;n<r.length-1;n++){if(r[n]===10&&r[n+1]===10||r[n]===13&&r[n+1]===13)return n+2;if(r[n]===13&&r[n+1]===10&&n+3<r.length&&r[n+2]===13&&r[n+3]===10)return n+4}return-1}var Hu,Wu,Bg,uae=C(()=>{Jl();D4();Bg=class{constructor(){Hu.set(this,void 0),Wu.set(this,void 0),Fe(this,Hu,new Uint8Array,"f"),Fe(this,Wu,null,"f")}decode(e){if(e==null)return[];let t=e instanceof ArrayBuffer?new Uint8Array(e):typeof e=="string"?Y0(e):e;Fe(this,Hu,Lze([G(this,Hu,"f"),t]),"f");let n=[],o;for(;(o=agr(G(this,Hu,"f"),G(this,Wu,"f")))!=null;){if(o.carriage&&G(this,Wu,"f")==null){Fe(this,Wu,o.index,"f");continue}if(G(this,Wu,"f")!=null&&(o.index!==G(this,Wu,"f")+1||o.carriage)){n.push(nae(G(this,Hu,"f").subarray(0,G(this,Wu,"f")-1))),Fe(this,Hu,G(this,Hu,"f").subarray(G(this,Wu,"f")),"f"),Fe(this,Wu,null,"f");continue}let s=G(this,Wu,"f")!==null?o.preceding-1:o.preceding,i=nae(G(this,Hu,"f").subarray(0,s));n.push(i),Fe(this,Hu,G(this,Hu,"f").subarray(o.index),"f"),Fe(this,Wu,null,"f")}return n}flush(){return G(this,Hu,"f").length?this.decode(`
1175
+ `):"";default:return ET(r)}},Lfr=r=>{if(typeof r=="string")return r.startsWith("data:")||/^https?:\/\//i.test(r)?r:`data:image/png;base64,${r}`;if(r instanceof URL)return r.toString();if(r instanceof Uint8Array)return`data:image/png;base64,${Buffer.from(r).toString("base64")}`},Ffr=r=>{if(typeof r=="string")return r;if(!Array.isArray(r))return ET(r);let e=[];for(let t of r){if(typeof t=="string"){e.push({type:"text",text:t});continue}if(!t||typeof t!="object")continue;let n=t;if(n.type==="text")e.push({type:"text",text:t.text??""});else if(n.type==="image"||n.type==="image_url"){let o=t.image??t.data??t.url,s=Lfr(o);s&&e.push({type:"image_url",image_url:{url:s}})}}return e.length===1&&e[0].type==="text"?e[0].text:e},$ie=r=>{let e=[];for(let t of r)switch(t.role){case"system":e.push({role:"system",content:typeof t.content=="string"?t.content:ET(t.content)});break;case"user":e.push({role:"user",content:Ffr(t.content)});break;case"assistant":{let n=Array.isArray(t.content)?t.content:[t.content],o=[],s=[];for(let a of n)if(a&&typeof a=="object"){let c=a;if(c.type==="text")o.push({type:"text",text:a.text??""});else if(c.type==="tool-call"){let l=a;s.push({id:l.toolCallId??"",type:"function",function:{name:l.toolName??"",arguments:v4(l.input)}})}}else typeof a=="string"&&o.push({type:"text",text:a});let i=o.length===0?null:o.length===1&&o[0].type==="text"?o[0].text:o;e.push({role:"assistant",content:i,...s.length>0?{tool_calls:s}:{}});break}case"tool":{if(Array.isArray(t.content))for(let n of t.content){if(!n||typeof n!="object")continue;let o=n;o.type==="tool-result"&&e.push({role:"tool",tool_call_id:o.toolCallId??"",content:Uie(o.output)})}else typeof t.content=="string"&&e.push({role:"tool",tool_call_id:t.toolCallId??"",content:t.content});break}}return e},HBe=r=>{let e=Object.entries(r);if(e.length===0)return;let t=[];for(let[n,o]of e){let s=o,i=s.inputSchema??s.parameters,a=i?po(i):{type:"object",properties:{}};t.push({type:"function",function:{name:n,...s.description?{description:s.description}:{},parameters:a}})}return t},WBe=r=>{if(!r||r.length===0)return;let e=[];for(let t of r)t.type==="function"&&e.push({type:"function",function:{name:t.name,...t.description?{description:t.description}:{},parameters:t.inputSchema,...t.strict!==void 0?{strict:t.strict}:{}}});return e.length>0?e:void 0},KBe=r=>{switch(r.type){case"auto":case"none":case"required":return r.type;case"tool":return{type:"function",function:{name:r.toolName}}}},JBe=r=>r.type==="text"?{type:"text"}:r.schema?{type:"json_schema",json_schema:{name:r.name??"response",schema:r.schema,...r.description?{description:r.description}:{},strict:!0}}:{type:"json_object"},YBe=r=>{if(r){if(r==="auto"||r==="none"||r==="required")return r;if(typeof r=="object"&&r!==null){let e=r;if(e.type==="tool"&&e.toolName)return{type:"function",function:{name:e.toolName}}}}},Ufr=r=>r.some(e=>{let t=e.content;return typeof t=="string"?/\bjson\b/i.test(t):Array.isArray(t)?t.some(n=>typeof n?.text=="string"&&/\bjson\b/i.test(n.text)):!1}),Bie=r=>r.response_format?.type==="json_object"&&!Ufr(r.messages)?{...r,messages:[{role:"system",content:"Respond with valid JSON only \u2014 no prose, no markdown fencing."},...r.messages]}:r,XBe=r=>/^(o\d|gpt-5)/i.test(r.replace(/^.*\//,"")),zie=r=>{let{modelId:e,messages:t,options:n,tools:o,toolChoice:s,streaming:i,responseFormat:a}=r,c={model:e,messages:t,...i?{stream:!0}:{},...i?{stream_options:{include_usage:!0}}:{}};return n.maxTokens!==void 0&&n.maxTokens!==null&&(c.max_tokens=n.maxTokens),n.temperature!==void 0&&n.temperature!==null&&(c.temperature=n.temperature),n.topP!==void 0&&n.topP!==null&&(c.top_p=n.topP),n.presencePenalty!==void 0&&n.presencePenalty!==null&&(c.presence_penalty=n.presencePenalty),n.frequencyPenalty!==void 0&&n.frequencyPenalty!==null&&(c.frequency_penalty=n.frequencyPenalty),n.seed!==void 0&&n.seed!==null&&(c.seed=n.seed),n.stopSequences&&n.stopSequences.length>0&&(c.stop=n.stopSequences),o&&(c.tools=o),s!==void 0&&(c.tool_choice=s),a&&(c.response_format=a),n.extraBody&&Object.assign(c,n.extraBody),c},ZBe=async(r,e,t)=>{let n={text:"",reasoning:"",toolCalls:new Map,finishReason:null,usage:void 0},o=new TextDecoder,s,a=hE({onEvent:l=>{let u=l.data;if(!u||u==="[DONE]")return;let d;try{d=JSON.parse(u)}catch(y){s=y instanceof Error?y:new Error(String(y));return}d.usage&&(n.usage=d.usage);let p=d.choices?.[0];if(!p)return;let f=p.delta;f?.content&&(n.text+=f.content,e(f.content));let h=f?.reasoning_content||f?.reasoning;if(h&&(n.reasoning+=h,t?.(h)),f?.tool_calls)for(let y of f.tool_calls){let x=n.toolCalls.get(y.index);x?y.id&&(x.id=y.id):(x={id:y.id??`call_${y.index}_${Date.now()}`,name:y.function?.name??"",argsBuffered:""},n.toolCalls.set(y.index,x)),y.function?.name&&(x.name=y.function.name),y.function?.arguments&&(x.argsBuffered+=y.function.arguments)}p.finish_reason&&(n.finishReason=p.finish_reason)}}),c=r.getReader();try{for(;;){let{done:l,value:u}=await c.read();if(l)break;a.feed(o.decode(u,{stream:!0}))}a.feed(o.decode())}finally{c.releaseLock()}if(s)throw s;return n},iN=async(r,e,t)=>{let n,o;try{n=await t.text(),o=n?JSON.parse(n):void 0}catch{o=void 0}let s=o?.error?.message??`OpenAI-compatible request failed with status ${t.status}`,i=new Error(s);return i.statusCode=t.status,i.url=r,i.requestBody={model:e.model,stream:e.stream===!0,tool_count:e.tools?.length??0},n!==void 0&&(i.responseBody=n),i},b4=()=>{let r=()=>{},e=new Promise(o=>{r=o}),t=()=>{},n=new Promise(o=>{t=o});return{usagePromise:e,finishPromise:n,resolveUsage:r,resolveFinish:t}},T4=()=>{let r=[],e;return{pushChunk:o=>{if(e){let s=e;e=void 0,s(o)}else r.push(o)},nextChunk:()=>new Promise(o=>{r.length>0?o(r.shift()):e=o})}},QBe=(r,e)=>r?e?{prompt_tokens:(r.prompt_tokens??0)+(e.prompt_tokens??0),completion_tokens:(r.completion_tokens??0)+(e.completion_tokens??0),total_tokens:(r.total_tokens??0)+(e.total_tokens??0)}:r:e});var jie,eze,tze=C(()=>{"use strict";DO();H();zj();Nm();jie=class{async collectUsage(e){try{let t=await e.usage;return t?a_(t):(g.debug("No usage data available from stream result"),vre())}catch(t){return Ja.isInstance(t)?g.debug("No output generated from stream \u2014 returning empty usage"):g.warn("Failed to collect usage from stream result",{error:t}),vre()}}async collectMetadata(e){try{let[t,n]=await Promise.all([e.response,e.finishReason]);return{id:t?.id,model:t?.model,timestamp:t?.timestamp instanceof Date?t.timestamp.getTime():t?.timestamp||Date.now(),finishReason:n}}catch(t){return Ja.isInstance(t)?g.debug("No output generated from stream \u2014 returning default metadata"):g.warn("Failed to collect metadata from stream result",{error:t}),{timestamp:Date.now(),finishReason:"error"}}}async createAnalytics(e,t,n,o,s){try{let[i,a]=await Promise.all([this.collectUsage(n),this.collectMetadata(n)]),[c,l,u,d]=await Promise.all([Promise.resolve(n.text).catch(()=>""),Promise.resolve(n.finishReason).catch(()=>"error"),Promise.resolve(n.toolResults||[]).catch(()=>[]),Promise.resolve(n.toolCalls||[]).catch(()=>[])]);return mx(e,t,{usage:i,content:c,response:a,finishReason:l,toolResults:u,toolCalls:d},o,{...s,streamingMode:!0,responseId:a.id,finishReason:l})}catch(i){return g.error("Failed to create analytics from stream result",{provider:e,model:t,error:i instanceof Error?i.message:String(i)}),mx(e,t,{usage:{input:0,output:0,total:0}},o,{...s,streamingMode:!0,analyticsError:!0})}}cleanup(){let e=process.memoryUsage().heapUsed,t=500*1024*1024;typeof global<"u"&&global.gc&&e>t&&global.gc()}},eze=new jie});function S4(r,e,t){return!t||!e||Object.keys(e).length===0?"none":r.toolChoice??"auto"}var Gie=C(()=>{"use strict"});var Ur,xi=C(()=>{"use strict";zu();ki();tze();Co();H();Nm();$q();no();iM();Gie();_y();Fg();Ur=class extends fo{config;resolvedModel;constructor(e,t,n,o){super(t,e,n),this.config=o}getFallbackModelName(){return"gpt-3.5-turbo"}getFallbackModels(){return[]}adjustBuildBodyOptions(e,t){return t}adjustResponseFormat(e,t){return e}suppressResponseFormatWithTools(){return!0}adjustRequestBody(e,t){return e}adjustBodyAfter400(e,t){}onStreamStart(e){}shouldAutoDiscoverModel(){return!0}getChatCompletionsURL(e){return`${Oa(this.config.baseURL)}/chat/completions`}getAuthHeaders(){return{Authorization:`Bearer ${this.config.apiKey}`}}supportsTools(){return!0}async validateConfiguration(){return typeof this.config.apiKey=="string"&&this.config.apiKey.trim().length>0}getConfiguration(){return{provider:this.providerName,model:this.modelName,defaultModel:this.getDefaultModel(),baseURL:this.config.baseURL}}async getAISDKModel(){let e=await this.resolveModelName();return this.buildDelegatingModel(e)}async resolveModelName(){if(this.resolvedModel)return this.resolvedModel;let e=this.modelName||this.getDefaultModel();if(e&&e.trim()!=="")return this.resolvedModel=e,this.modelName!==e&&this.refreshHandlersForModel(e),e;if(this.shouldAutoDiscoverModel()){try{let n=await this.getAvailableModels();if(n.length>0)return this.resolvedModel=n[0],this.refreshHandlersForModel(n[0]),g.info(`\u{1F50D} Auto-discovered model: ${n[0]} from ${n.length} available models`),n[0]}catch(n){g.warn("Model auto-discovery failed, using fallback:",n)}return this.getFallbackModelName()}let t=this.getFallbackModelName();return this.resolvedModel=t,this.refreshHandlersForModel(t),t}buildDelegatingModel(e){let t=this.getChatCompletionsURL(e),n=vt(),o=this.getAuthHeaders.bind(this),s=this.providerName,i=this.adjustBuildBodyOptions.bind(this),a=this.adjustResponseFormat.bind(this),c=this.adjustRequestBody.bind(this),l=this.adjustBodyAfter400.bind(this),u=this.suppressResponseFormatWithTools.bind(this),d=p=>this.getTimeout(p??{});return{specificationVersion:"v3",provider:s,modelId:e,supportedUrls:{},doGenerate:async p=>{let f=$ie(p.prompt),h=Array.isArray(p.tools)&&p.tools.length>0,y=p.responseFormat&&!(h&&u())?a(JBe(p.responseFormat),e):void 0,x=Bie(c(zie({modelId:e,messages:f,options:i(e,{maxTokens:p.maxOutputTokens,temperature:p.temperature,topP:p.topP,presencePenalty:p.presencePenalty,frequencyPenalty:p.frequencyPenalty,seed:p.seed,stopSequences:p.stopSequences}),tools:WBe(p.tools),...p.toolChoice?{toolChoice:KBe(p.toolChoice)}:{},streaming:!1,...y?{responseFormat:y}:{}}),e)),v=pi(d(p),s,"generate"),T=og(p.abortSignal,v?.controller.signal),S;try{if(S=await n(t,{method:"POST",headers:{"Content-Type":"application/json",...o()},body:JSON.stringify(x),...T?{signal:T}:{}}),!S.ok){let D=await iN(t,x,S),z=S.status===400?l(x,D):void 0;if(!z)throw D;if(S=await n(t,{method:"POST",headers:{"Content-Type":"application/json",...o()},body:JSON.stringify(z),...T?{signal:T}:{}}),!S.ok)throw await iN(t,z,S)}}finally{v?.cleanup()}let E=await S.json(),k=E.choices?.[0],R=(typeof k?.message?.content=="string"?k.message.content:"")??"",P=[],A=k?.message?.reasoning_content||k?.message?.reasoning;typeof A=="string"&&A.length>0&&P.push({type:"reasoning",text:A}),R.length>0&&P.push({type:"text",text:R});for(let D of k?.message?.tool_calls??[])P.push({type:"tool-call",toolCallId:D.id,toolName:D.function.name,input:D.function.arguments??""});let I=k?.finish_reason;return{content:P,finishReason:{unified:I==="length"?"length":I==="tool_calls"||I==="function_call"?"tool-calls":I==="content_filter"?"content-filter":"stop",raw:I??"stop"},usage:{inputTokens:{total:E.usage?.prompt_tokens,noCache:E.usage?.prompt_tokens,cacheRead:void 0,cacheWrite:void 0},outputTokens:{total:E.usage?.completion_tokens,text:E.usage?.completion_tokens!==void 0&&E.usage?.completion_tokens_details?.reasoning_tokens!==void 0?Math.max(0,E.usage.completion_tokens-E.usage.completion_tokens_details.reasoning_tokens):E.usage?.completion_tokens,reasoning:E.usage?.completion_tokens_details?.reasoning_tokens}},warnings:[],request:{body:x},response:{...E.id?{id:E.id}:{},...E.model?{modelId:E.model}:{},headers:{},body:E}}},doStream:()=>{throw new Error(`${s}: doStream is not implemented on the delegating model \u2014 the streaming path uses executeStream directly.`)}}}async executeStream(e,t){this.validateStreamOptions(e);let n=Date.now(),o=this.getTimeout(e),s=pi(o,this.providerName,"stream"),i=new AbortController,a=bz([e.abortSignal,s?.controller.signal,i.signal]).signal,c,l,u,d,p;try{c=await this.resolveModelName();let U=!e.disableTools&&this.supportsTools();l=U?e.tools||await this.getAllTools():{},u=U?HBe(l):void 0,d=YBe(S4(e,l,U));let V=await this.buildMessagesForStream(e);p=$ie(V)}catch(U){throw s?.cleanup(),U}let f=this.getChatCompletionsURL(c),h=vt(),y=e.maxSteps||Ws,x=this.neurolink?.getEventEmitter(),v=[],T=[],{usagePromise:S,finishPromise:E,resolveUsage:k,resolveFinish:R}=b4(),{pushChunk:P,nextChunk:A}=T4(),I=this.onStreamStart(c),M=this.runStreamLoop({maxSteps:y,modelId:c,url:f,fetchImpl:h,abortSignal:a,options:e,conversation:p,openAITools:u,openAIToolChoice:d,toolsRecord:l,emitter:x,toolsUsed:v,toolExecutionSummaries:T,pushChunk:P,resolveUsage:k,resolveFinish:R}),D,z=U=>{D=U};I?.onUsage&&S.then(I.onUsage).catch(()=>{}),I?.onFinish&&E.then(U=>I.onFinish?.(U,D)).catch(()=>{});let O=this.providerName,$={stream:async function*(){let U=0;try{for(;;){let V=await A();if("done"in V)break;"content"in V&&typeof V.content=="string"&&V.content.length>0&&U++,yield V}if(await M,U===0&&v.length===0){g.warn(`${O}: Stream produced no output \u2014 emitting enriched sentinel`);let V=new Ja({message:"Stream produced no output"}),B=await Zm(V,void 0,D);Qm(B),yield B}}catch(V){if(Ja.isInstance(V)){let K=await Zm(V,void 0,D);Qm(K),yield K;return}let B=await Zm(V,void 0,D);throw Qm(B),yield B,V}finally{i.signal.aborted||i.abort()}}(),provider:this.providerName,model:c,analytics:eze.createAnalytics(this.providerName,c,{textStream:(async function*(){})(),usage:S,finishReason:E},Date.now()-n,{requestId:e.requestId??`${this.providerName}-stream-${Date.now()}`,streamingMode:!0}),toolsUsed:v,metadata:{startTime:n,streamId:`${this.providerName}-${Date.now()}`}};return Object.defineProperty($,"toolExecutions",{enumerable:!0,configurable:!0,get:()=>Ed(T.map(U=>({toolName:U.toolName,input:U.input,output:U.output,duration:U.endTime.getTime()-U.startTime.getTime()})))}),M.finally(()=>s?.cleanup()).catch(U=>{z(U)}),$}async runStreamLoop(e){let{maxSteps:t,modelId:n,url:o,fetchImpl:s,abortSignal:i,options:a,conversation:c,openAITools:l,openAIToolChoice:u,toolsRecord:d,emitter:p,toolsUsed:f,toolExecutionSummaries:h,pushChunk:y,resolveUsage:x,resolveFinish:v}=e;try{let T=null,S;for(let E=0;E<t;E++){let k=await this.streamOneStep({modelId:n,url:o,fetchImpl:s,abortSignal:i,options:a,conversation:c,openAITools:l,openAIToolChoice:u,pushChunk:y});if(T=k.finishReason,k.usage&&(S=QBe(S,k.usage)),k.toolCalls.size===0)break;await this.executeToolBatch({stepResult:k,conversation:c,toolsRecord:d,emitter:p,toolsUsed:f,toolExecutionSummaries:h,options:a})}return x({promptTokens:S?.prompt_tokens??0,completionTokens:S?.completion_tokens??0,totalTokens:S?.total_tokens??0}),v(T??"stop"),y({done:!0}),{finishReason:T??"stop",usage:S}}catch(T){throw g.error(`${this.providerName}: Stream error`,{error:T instanceof Error?T.message:String(T)}),x({promptTokens:0,completionTokens:0,totalTokens:0}),v("error"),y({done:!0}),T}}async streamOneStep(e){let t=Bie(this.adjustRequestBody(zie({modelId:e.modelId,messages:e.conversation,options:this.adjustBuildBodyOptions(e.modelId,e.options),tools:e.openAITools,...e.openAIToolChoice!==void 0?{toolChoice:e.openAIToolChoice}:{},streaming:!0}),e.modelId)),n=await e.fetchImpl(e.url,{method:"POST",headers:{"Content-Type":"application/json",...this.getAuthHeaders()},body:JSON.stringify(t),...e.abortSignal?{signal:e.abortSignal}:{}});if(!n.ok){let o=await iN(e.url,t,n),s=n.status===400?this.adjustBodyAfter400(t,o):void 0;if(!s)throw o;if(n=await e.fetchImpl(e.url,{method:"POST",headers:{"Content-Type":"application/json",...this.getAuthHeaders()},body:JSON.stringify(s),...e.abortSignal?{signal:e.abortSignal}:{}}),!n.ok)throw await iN(e.url,s,n)}if(!n.body)throw new Error(`${this.providerName}: stream response had no body`);return ZBe(n.body,o=>{e.pushChunk({content:o})},o=>{e.pushChunk({content:"",reasoning:o})})}async executeToolBatch(e){let{stepResult:t,conversation:n,toolsRecord:o,emitter:s,toolsUsed:i,toolExecutionSummaries:a,options:c}=e,l=[];for(let[,d]of t.toolCalls)l.push({id:d.id,type:"function",function:{name:d.name,arguments:d.argsBuffered}});n.push({role:"assistant",content:t.text.length>0?t.text:null,tool_calls:l});for(let[,d]of t.toolCalls){let p=new Date,f;try{f=JSON.parse(d.argsBuffered||"{}")}catch{f=d.argsBuffered}let h,y,x=o[d.name];if(s?.emit("tool:start",{toolName:d.name,toolCallId:d.id,input:f}),!x||typeof x.execute!="function")y=`Tool '${d.name}' is not registered.`,h={error:y};else try{h=await x.execute(f,{})}catch(T){y=T instanceof Error?T.message:String(T),h={error:y}}let v=new Date;i.push(d.name),a.push({toolCallId:d.id,toolName:d.name,input:f,output:h,...y?{error:y}:{},startTime:p,endTime:v}),n.push({role:"tool",tool_call_id:d.id,content:Uie(h)})}let u=a.slice(-t.toolCalls.size);Ay(s,u.map(d=>({toolName:d.toolName,output:d.output,...d.error?{error:d.error}:{}})));try{await this.handleToolExecutionStorage(u.map(d=>({toolCallId:d.toolCallId,toolName:d.toolName,input:d.input,output:d.output})),u.map(d=>({toolCallId:d.toolCallId,toolName:d.toolName,output:d.output})),c,new Date)}catch(d){g.warn(`[${this.constructor.name}] Failed to store tool executions`,{provider:this.providerName,error:d instanceof Error?d.message:String(d)})}}async getAvailableModels(){try{let e=`${Oa(this.config.baseURL)}/models`;g.debug(`Fetching available models from: ${e}`);let t=vt(),n=new AbortController,o=setTimeout(()=>n.abort(),5e3),s=await t(e,{headers:{...this.getAuthHeaders(),"Content-Type":"application/json"},signal:n.signal});if(clearTimeout(o),!s.ok)return g.warn(`Models endpoint returned ${s.status}: ${s.statusText}`),this.getFallbackModels();let i=await s.json();if(!i.data||!Array.isArray(i.data))return g.warn("Invalid models response format"),this.getFallbackModels();let a=i.data.map(c=>c.id).filter(Boolean);return g.shouldLog("debug")&&g.debug(`Discovered ${a.length} models:`,a),a.length>0?a:this.getFallbackModels()}catch(e){return g.warn(`[${this.constructor.name}] Failed to fetch models from endpoint:`,e),this.getFallbackModels()}}async getFirstAvailableModel(){return(await this.getAvailableModels())[0]||this.getFallbackModelName()}}});var nze={};te(nze,{OpenAIProvider:()=>Vie});var rze,$fr,Bfr,zfr,jfr,Vie,oze=C(()=>{"use strict";Dr();Co();Dt();H();mn();Cd();go();Lg();wx();no();Fg();xi();rze="https://api.openai.com/v1",$fr=(r,e)=>{let t=[r,e].map(n=>n?.trim()).find(n=>!!n&&n.length>0)??rze;try{let n=new URL(t),o=n.pathname&&n.pathname!=="/";if(n.hostname==="api.openai.com"&&!o)return n.pathname="/v1",Oa(n.toString())}catch{}return t},Bfr=()=>Mr(pBe()),zfr=()=>Or("OPENAI_MODEL","gpt-4o"),jfr=Tt.getTracer("neurolink.provider.openai"),Vie=class extends Ur{constructor(e,t,n,o){let s=o?.apiKey?.trim(),i=s&&s.length>0?s:Bfr(),a=$fr(o?.baseURL,process.env.OPENAI_BASE_URL);super("openai",e,t,{baseURL:a,apiKey:i}),g.debug("OpenAIProvider initialized",{model:this.modelName,providerName:this.providerName,baseURL:lr(this.config.baseURL)})}suppressResponseFormatWithTools(){return!1}getProviderName(){return"openai"}getDefaultModel(){return zfr()}formatProviderError(e){if(e instanceof rr)return new zt(e.message,this.providerName);let t=e,n=t?.message&&typeof t.message=="string"?t.message:"Unknown error",o=t?.type&&typeof t.type=="string"?t.type:void 0,s=typeof t?.status=="number"?t.status:typeof t?.statusCode=="number"?t.statusCode:void 0;return n.includes("API_KEY_INVALID")||n.includes("Invalid API key")||n.includes("Incorrect API key")||n.includes("invalid_api_key")||o==="invalid_api_key"||s===401?new Ot(n.includes("Incorrect API key")||n.includes("Invalid API key")?n:"Invalid OpenAI API key. Please check your OPENAI_API_KEY environment variable.",this.providerName):n.includes("rate limit")||o==="rate_limit_error"||s===429?new tr("OpenAI rate limit exceeded. Please try again later.",this.providerName):n.includes("model_not_found")?new Zt(`Model not found: ${this.modelName}`,this.providerName):new qe(`OpenAI error: ${n}`,this.providerName)}onStreamStart(e){let t=jfr.startSpan("neurolink.provider.streamText",{kind:kr.CLIENT,attributes:{"gen_ai.system":"openai","gen_ai.request.model":e}}),n=!1,o=()=>{n||(n=!0,t.end())};return{onUsage:s=>{t.setAttribute("gen_ai.usage.input_tokens",s.promptTokens),t.setAttribute("gen_ai.usage.output_tokens",s.completionTokens);let i=wo(this.providerName,this.modelName,{input:s.promptTokens,output:s.completionTokens,total:s.totalTokens});i&&i>0&&t.setAttribute("neurolink.cost",i)},onFinish:(s,i)=>{t.setAttribute("gen_ai.response.finish_reason",s||"unknown"),s==="error"&&t.setStatus({code:Me.ERROR,message:i instanceof Error?i.message:String(i??"stream error")}),o()}}}getDefaultEmbeddingModel(){return process.env.OPENAI_EMBEDDING_MODEL||"text-embedding-3-small"}async embed(e,t){let n=t||this.getDefaultEmbeddingModel();g.debug("Generating embedding",{provider:this.providerName,model:n,textLength:e.length});try{let[o]=await this.callEmbeddings(n,[e],"embed");return g.debug("Embedding generated successfully",{provider:this.providerName,model:n,embeddingDimension:o.length}),o}catch(o){throw g.error("Embedding generation failed",{error:o instanceof Error?o.message:String(o),model:n,textLength:e.length}),this.handleProviderError(o)}}async embedMany(e,t){let n=t||this.getDefaultEmbeddingModel();g.debug("Generating batch embeddings",{provider:this.providerName,model:n,count:e.length});try{let o=await this.callEmbeddings(n,e,"embedMany");return g.debug("Batch embeddings generated successfully",{provider:this.providerName,model:n,count:o.length,embeddingDimension:o[0]?.length}),o}catch(o){throw g.error("Batch embedding generation failed",{error:o instanceof Error?o.message:String(o),model:n,count:e.length}),this.handleProviderError(o)}}async callEmbeddings(e,t,n){let o=`${Oa(this.config.baseURL)}/embeddings`,s=vt(),i=pi(3e4,this.providerName,"generate");try{let a=await s(o,{method:"POST",headers:{"Content-Type":"application/json",Authorization:`Bearer ${this.config.apiKey}`},body:JSON.stringify({model:e,input:t.length===1?t[0]:t}),...i?.controller.signal?{signal:i.controller.signal}:{}});if(!a.ok){let u=await a.text().catch(()=>""),d=`OpenAI ${n} failed with status ${a.status}`,p;if(u)try{let f=JSON.parse(u);f.error?.message&&(d=f.error.message),p=f.error?.type}catch{}throw Object.assign(new Error(d),{status:a.status,type:p})}let l=((await a.json()).data??[]).map(u=>u.embedding).filter(u=>Array.isArray(u));if(l.length===0)throw new qe(`OpenAI ${n} returned no embeddings`,this.providerName);return l}finally{i?.cleanup()}}async executeImageGeneration(e){let t=Date.now(),n=e.prompt??e.input?.text??"";if(!n.trim())throw new Error("OpenAI image generation requires a prompt (input.text or prompt)");let o=e.model??this.modelName,s=Oa(this.config.baseURL??rze),i=e,a=i.size??this.aspectRatioToOpenAISize(i.aspectRatio,o),c=i.numberOfImages??1,l;o==="gpt-image-1"||o.startsWith("dall-e-3")?l=1:o.startsWith("dall-e-2")?l=Math.min(Math.max(c,1),10):l=1;let d={model:o,prompt:n,n:l,size:a};o==="gpt-image-1"?i.quality&&(d.quality=i.quality):o.startsWith("dall-e-3")?(d.response_format="b64_json",i.quality&&(d.quality=i.quality),i.style&&(d.style=i.style)):d.response_format="b64_json";let p=12e4,f=new AbortController,h=setTimeout(()=>f.abort(),p),y;try{y=await vt()(`${s}/images/generations`,{method:"POST",headers:{Authorization:`Bearer ${this.config.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify(d),signal:f.signal})}catch(E){throw E instanceof Error&&E.name==="AbortError"?new Error(`OpenAI image generation timed out after ${p/1e3}s`,{cause:E}):E}finally{clearTimeout(h)}if(!y.ok){let E=await y.text();throw new Error(`OpenAI image generation failed: ${y.status} \u2014 ${E}`)}let v=(await y.json()).data?.[0];if(!v)throw new Error("OpenAI image generation returned no images");let T=v.b64_json;if(!T&&v.url){await qu(v.url);let E=vt(),k=new AbortController,R=setTimeout(()=>k.abort(),6e4),P;try{P=await E(v.url,{signal:k.signal})}catch(I){throw I instanceof Error&&I.name==="AbortError"?new Error("OpenAI image URL download timed out after 60s",{cause:I}):I}finally{clearTimeout(R)}if(!P.ok)throw new Error(`OpenAI image generation: failed to fetch hosted URL ${v.url} (${P.status})`);T=(await nc(P,26214400,"OpenAI image fallback")).toString("base64")}if(!T)throw new Error("OpenAI image generation returned neither b64_json nor a URL");let S=Date.now()-t;return g.info(`[OpenAIProvider] Generated image (${T.length} base64 chars) in ${S}ms \u2014 model ${o}`),{content:v.revised_prompt??n,provider:this.providerName,model:o,usage:{input:0,output:0,total:0},imageOutput:{base64:T}}}aspectRatioToOpenAISize(e,t){return t==="gpt-image-1"?e==="16:9"||e==="3:2"?"1536x1024":e==="9:16"||e==="2:3"?"1024x1536":"1024x1024":t.startsWith("dall-e-3")?e==="16:9"||e==="3:2"?"1792x1024":e==="9:16"||e==="2:3"?"1024x1792":"1024x1024":"1024x1024"}}});function Fe(r,e,t,n,o){if(n==="m")throw new TypeError("Private method is not writable");if(n==="a"&&!o)throw new TypeError("Private accessor was defined without a setter");if(typeof e=="function"?r!==e||!o:!e.has(r))throw new TypeError("Cannot write private member to an object whose class did not declare it");return n==="a"?o.call(r,t):o?o.value=t:e.set(r,t),t}function G(r,e,t,n){if(t==="a"&&!n)throw new TypeError("Private accessor was defined without a getter");if(typeof e=="function"?r!==e||!n:!e.has(r))throw new TypeError("Cannot read private member from an object whose class did not declare it");return t==="m"?n:t==="a"?n.call(r):n?n.value:e.get(r)}var Jl=C(()=>{});var L0,w4=C(()=>{L0=function(){let{crypto:r}=globalThis;if(r?.randomUUID)return L0=r.randomUUID.bind(r),r.randomUUID();let e=new Uint8Array(1),t=r?()=>r.getRandomValues(e)[0]:()=>Math.random()*255&255;return"10000000-1000-4000-8000-100000000000".replace(/[018]/g,n=>(+n^t()&15>>+n/4).toString(16))}});function Wp(r){return typeof r=="object"&&r!==null&&("name"in r&&r.name==="AbortError"||"message"in r&&String(r.message).includes("FetchRequestCanceledException"))}var _T,CT=C(()=>{_T=r=>{if(r instanceof Error)return r;if(typeof r=="object"&&r!==null){try{if(Object.prototype.toString.call(r)==="[object Error]"){let e=new Error(r.message,r.cause?{cause:r.cause}:{});return r.stack&&(e.stack=r.stack),r.cause&&!e.cause&&(e.cause=r.cause),r.name&&(e.name=r.name),e}}catch{}try{return new Error(JSON.stringify(r))}catch{}}return new Error(r)}});var Je,ni,oc,rf,F0,aN,U0,$0,B0,z0,j0,G0,V0,q0,ko=C(()=>{CT();Je=class extends Error{},ni=class r extends Je{constructor(e,t,n,o,s){super(`${r.makeMessage(e,t,n)}`),this.status=e,this.headers=o,this.requestID=o?.get("request-id"),this.error=t,this.type=s??null}static makeMessage(e,t,n){let o=t?.message?typeof t.message=="string"?t.message:JSON.stringify(t.message):t?JSON.stringify(t):n;return e&&o?`${e} ${o}`:e?`${e} status code (no body)`:o||"(no status code or body)"}static generate(e,t,n,o){if(!e||!o)return new rf({message:n,cause:_T(t)});let s=t,i=s?.error?.type;return e===400?new U0(e,s,n,o,i):e===401?new $0(e,s,n,o,i):e===403?new B0(e,s,n,o,i):e===404?new z0(e,s,n,o,i):e===409?new j0(e,s,n,o,i):e===422?new G0(e,s,n,o,i):e===429?new V0(e,s,n,o,i):e>=500?new q0(e,s,n,o,i):new r(e,s,n,o,i)}},oc=class extends ni{constructor({message:e}={}){super(void 0,void 0,e||"Request was aborted.",void 0)}},rf=class extends ni{constructor({message:e,cause:t}){super(void 0,void 0,e||"Connection error.",void 0),t&&(this.cause=t)}},F0=class extends rf{constructor({message:e}={}){super({message:e??"Request timed out."})}},aN=class extends Je{constructor(e,{cause:t}={}){super(e??"Retryable error."),t!==void 0&&(this.cause=t)}},U0=class extends ni{},$0=class extends ni{},B0=class extends ni{},z0=class extends ni{},j0=class extends ni{},G0=class extends ni{},V0=class extends ni{},q0=class extends ni{}});function E4(r){return typeof r!="object"?{}:r??{}}function Hie(r){if(!r)return!0;for(let e in r)return!1;return!0}function ize(r,e){return Object.prototype.hasOwnProperty.call(r,e)}var Vfr,sze,Uc,qie,aze,_4,nf=C(()=>{ko();Vfr=/^[a-z][a-z0-9+.-]*:/i,sze=r=>Vfr.test(r),Uc=r=>(Uc=Array.isArray,Uc(r)),qie=Uc;aze=(r,e)=>{if(typeof e!="number"||!Number.isInteger(e))throw new Je(`${r} must be an integer`);if(e<0)throw new Je(`${r} must be a positive integer`);return e},_4=r=>{try{return JSON.parse(r)}catch{return}}});var Kp,H0=C(()=>{Kp=(r,e)=>new Promise(t=>{if(e?.aborted)return t();let n=()=>{clearTimeout(o),t()},o=setTimeout(()=>{e?.removeEventListener("abort",n),t()},r);e?.addEventListener("abort",n,{once:!0})})});var Ld,cN=C(()=>{Ld="0.102.0"});function qfr(){return typeof Deno<"u"&&Deno.build!=null?"deno":typeof EdgeRuntime<"u"?"edge":Object.prototype.toString.call(typeof globalThis.process<"u"?globalThis.process:0)==="[object process]"?"node":"unknown"}function Wfr(){if(typeof navigator>"u"||!navigator)return null;let r=[{key:"edge",pattern:/Edge(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/MSIE(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"ie",pattern:/Trident(?:.*rv\:(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"chrome",pattern:/Chrome(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"firefox",pattern:/Firefox(?:\W+(\d+)\.(\d+)(?:\.(\d+))?)?/},{key:"safari",pattern:/(?:Version\W+(\d+)\.(\d+)(?:\.(\d+))?)?(?:\W+Mobile\S*)?\W+Safari/}];for(let{key:e,pattern:t}of r){let n=t.exec(navigator.userAgent);if(n){let o=n[1]||0,s=n[2]||0,i=n[3]||0;return{browser:e,version:`${o}.${s}.${i}`}}}return null}var dze,Hfr,cze,lze,uze,lN,C4=C(()=>{cN();dze=()=>typeof window<"u"&&typeof window.document<"u"&&typeof navigator<"u";Hfr=()=>{let r=qfr();if(r==="deno")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ld,"X-Stainless-OS":lze(Deno.build.os),"X-Stainless-Arch":cze(Deno.build.arch),"X-Stainless-Runtime":"deno","X-Stainless-Runtime-Version":typeof Deno.version=="string"?Deno.version:Deno.version?.deno??"unknown"};if(typeof EdgeRuntime<"u")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ld,"X-Stainless-OS":"Unknown","X-Stainless-Arch":`other:${EdgeRuntime}`,"X-Stainless-Runtime":"edge","X-Stainless-Runtime-Version":globalThis.process.version};if(r==="node")return{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ld,"X-Stainless-OS":lze(globalThis.process.platform??"unknown"),"X-Stainless-Arch":cze(globalThis.process.arch??"unknown"),"X-Stainless-Runtime":"node","X-Stainless-Runtime-Version":globalThis.process.version??"unknown"};let e=Wfr();return e?{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ld,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":`browser:${e.browser}`,"X-Stainless-Runtime-Version":e.version}:{"X-Stainless-Lang":"js","X-Stainless-Package-Version":Ld,"X-Stainless-OS":"Unknown","X-Stainless-Arch":"unknown","X-Stainless-Runtime":"unknown","X-Stainless-Runtime-Version":"unknown"}};cze=r=>r==="x32"?"x32":r==="x86_64"||r==="x64"?"x64":r==="arm"?"arm":r==="aarch64"||r==="arm64"?"arm64":r?`other:${r}`:"unknown",lze=r=>(r=r.toLowerCase(),r.includes("ios")?"iOS":r==="android"?"Android":r==="darwin"?"MacOS":r==="win32"?"Windows":r==="freebsd"?"FreeBSD":r==="openbsd"?"OpenBSD":r==="linux"?"Linux":r?`Other:${r}`:"Unknown"),lN=()=>uze??(uze=Hfr())});function pze(){if(typeof fetch<"u")return fetch;throw new Error("`fetch` is not defined as a global; Either pass `fetch` to the client, `new Anthropic({ fetch })` or polyfill the global, `globalThis.fetch = fetch`")}function Wie(...r){let e=globalThis.ReadableStream;if(typeof e>"u")throw new Error("`ReadableStream` is not defined as a global; You will need to polyfill it, `globalThis.ReadableStream = ReadableStream`");return new e(...r)}function k4(r){let e=Symbol.asyncIterator in r?r[Symbol.asyncIterator]():r[Symbol.iterator]();return Wie({start(){},async pull(t){let{done:n,value:o}=await e.next();n?t.close():t.enqueue(o)},async cancel(){await e.return?.()}})}function uN(r){if(r[Symbol.asyncIterator])return r;let e=r.getReader();return{async next(){try{let t=await e.read();return t?.done&&e.releaseLock(),t}catch(t){throw e.releaseLock(),t}},async return(){let t=e.cancel();return e.releaseLock(),await t,{done:!0,value:void 0}},[Symbol.asyncIterator](){return this}}}async function mze(r){if(r===null||typeof r!="object")return;if(r[Symbol.asyncIterator]){await r[Symbol.asyncIterator]().return?.();return}let e=r.getReader(),t=e.cancel();e.releaseLock(),await t}var W0=C(()=>{});var fze,gze=C(()=>{fze=({headers:r,body:e})=>({bodyHeaders:{"content-type":"application/json"},body:JSON.stringify(e)})});var Kie,Jie,Yie,hze,Xie=C(()=>{Kie="RFC3986",Jie=r=>String(r),Yie={RFC1738:r=>String(r).replace(/%20/g,"+"),RFC3986:Jie},hze="RFC1738"});function xze(r){return!r||typeof r!="object"?!1:!!(r.constructor&&r.constructor.isBuffer&&r.constructor.isBuffer(r))}function Qie(r,e){if(Uc(r)){let t=[];for(let n=0;n<r.length;n+=1)t.push(e(r[n]));return t}return e(r)}var R4,of,Zie,yze,vze=C(()=>{Xie();nf();R4=(r,e)=>(R4=Object.hasOwn??Function.prototype.call.bind(Object.prototype.hasOwnProperty),R4(r,e)),of=(()=>{let r=[];for(let e=0;e<256;++e)r.push("%"+((e<16?"0":"")+e.toString(16)).toUpperCase());return r})(),Zie=1024,yze=(r,e,t,n,o)=>{if(r.length===0)return r;let s=r;if(typeof r=="symbol"?s=Symbol.prototype.toString.call(r):typeof r!="string"&&(s=String(r)),t==="iso-8859-1")return escape(s).replace(/%u[0-9a-f]{4}/gi,function(a){return"%26%23"+parseInt(a.slice(2),16)+"%3B"});let i="";for(let a=0;a<s.length;a+=Zie){let c=s.length>=Zie?s.slice(a,a+Zie):s,l=[];for(let u=0;u<c.length;++u){let d=c.charCodeAt(u);if(d===45||d===46||d===95||d===126||d>=48&&d<=57||d>=65&&d<=90||d>=97&&d<=122||o===hze&&(d===40||d===41)){l[l.length]=c.charAt(u);continue}if(d<128){l[l.length]=of[d];continue}if(d<2048){l[l.length]=of[192|d>>6]+of[128|d&63];continue}if(d<55296||d>=57344){l[l.length]=of[224|d>>12]+of[128|d>>6&63]+of[128|d&63];continue}u+=1,d=65536+((d&1023)<<10|c.charCodeAt(u)&1023),l[l.length]=of[240|d>>18]+of[128|d>>12&63]+of[128|d>>6&63]+of[128|d&63]}i+=l.join("")}return i}});function Yfr(r){return typeof r=="string"||typeof r=="number"||typeof r=="boolean"||typeof r=="symbol"||typeof r=="bigint"}function wze(r,e,t,n,o,s,i,a,c,l,u,d,p,f,h,y,x,v){let T=r,S=v,E=0,k=!1;for(;(S=S.get(eae))!==void 0&&!k;){let M=S.get(r);if(E+=1,typeof M<"u"){if(M===E)throw new RangeError("Cyclic object value");k=!0}typeof S.get(eae)>"u"&&(E=0)}if(typeof l=="function"?T=l(e,T):T instanceof Date?T=p?.(T):t==="comma"&&Uc(T)&&(T=Qie(T,function(M){return M instanceof Date?p?.(M):M})),T===null){if(s)return c&&!y?c(e,qi.encoder,x,"key",f):e;T=""}if(Yfr(T)||xze(T)){if(c){let M=y?e:c(e,qi.encoder,x,"key",f);return[h?.(M)+"="+h?.(c(T,qi.encoder,x,"value",f))]}return[h?.(e)+"="+h?.(String(T))]}let R=[];if(typeof T>"u")return R;let P;if(t==="comma"&&Uc(T))y&&c&&(T=Qie(T,c)),P=[{value:T.length>0?T.join(",")||null:void 0}];else if(Uc(l))P=l;else{let M=Object.keys(T);P=u?M.sort(u):M}let A=a?String(e).replace(/\./g,"%2E"):String(e),I=n&&Uc(T)&&T.length===1?A+"[]":A;if(o&&Uc(T)&&T.length===0)return I+"[]";for(let M=0;M<P.length;++M){let D=P[M],z=typeof D=="object"&&typeof D.value<"u"?D.value:T[D];if(i&&z===null)continue;let O=d&&a?D.replace(/\./g,"%2E"):D,L=Uc(T)?typeof t=="function"?t(I,O):I:I+(d?"."+O:"["+O+"]");v.set(r,E);let $=new WeakMap;$.set(eae,v),Sze(R,wze(z,L,t,n,o,s,i,a,t==="comma"&&y&&Uc(T)?null:c,l,u,d,p,f,h,y,x,$))}return R}function Xfr(r=qi){if(typeof r.allowEmptyArrays<"u"&&typeof r.allowEmptyArrays!="boolean")throw new TypeError("`allowEmptyArrays` option can only be `true` or `false`, when provided");if(typeof r.encodeDotInKeys<"u"&&typeof r.encodeDotInKeys!="boolean")throw new TypeError("`encodeDotInKeys` option can only be `true` or `false`, when provided");if(r.encoder!==null&&typeof r.encoder<"u"&&typeof r.encoder!="function")throw new TypeError("Encoder has to be a function.");let e=r.charset||qi.charset;if(typeof r.charset<"u"&&r.charset!=="utf-8"&&r.charset!=="iso-8859-1")throw new TypeError("The charset option must be either utf-8, iso-8859-1, or undefined");let t=Kie;if(typeof r.format<"u"){if(!R4(Yie,r.format))throw new TypeError("Unknown format option provided.");t=r.format}let n=Yie[t],o=qi.filter;(typeof r.filter=="function"||Uc(r.filter))&&(o=r.filter);let s;if(r.arrayFormat&&r.arrayFormat in Tze?s=r.arrayFormat:"indices"in r?s=r.indices?"indices":"repeat":s=qi.arrayFormat,"commaRoundTrip"in r&&typeof r.commaRoundTrip!="boolean")throw new TypeError("`commaRoundTrip` must be a boolean, or absent");let i=typeof r.allowDots>"u"?r.encodeDotInKeys?!0:qi.allowDots:!!r.allowDots;return{addQueryPrefix:typeof r.addQueryPrefix=="boolean"?r.addQueryPrefix:qi.addQueryPrefix,allowDots:i,allowEmptyArrays:typeof r.allowEmptyArrays=="boolean"?!!r.allowEmptyArrays:qi.allowEmptyArrays,arrayFormat:s,charset:e,charsetSentinel:typeof r.charsetSentinel=="boolean"?r.charsetSentinel:qi.charsetSentinel,commaRoundTrip:!!r.commaRoundTrip,delimiter:typeof r.delimiter>"u"?qi.delimiter:r.delimiter,encode:typeof r.encode=="boolean"?r.encode:qi.encode,encodeDotInKeys:typeof r.encodeDotInKeys=="boolean"?r.encodeDotInKeys:qi.encodeDotInKeys,encoder:typeof r.encoder=="function"?r.encoder:qi.encoder,encodeValuesOnly:typeof r.encodeValuesOnly=="boolean"?r.encodeValuesOnly:qi.encodeValuesOnly,filter:o,format:t,formatter:n,serializeDate:typeof r.serializeDate=="function"?r.serializeDate:qi.serializeDate,skipNulls:typeof r.skipNulls=="boolean"?r.skipNulls:qi.skipNulls,sort:typeof r.sort=="function"?r.sort:null,strictNullHandling:typeof r.strictNullHandling=="boolean"?r.strictNullHandling:qi.strictNullHandling}}function Eze(r,e={}){let t=r,n=Xfr(e),o,s;typeof n.filter=="function"?(s=n.filter,t=s("",t)):Uc(n.filter)&&(s=n.filter,o=s);let i=[];if(typeof t!="object"||t===null)return"";let a=Tze[n.arrayFormat],c=a==="comma"&&n.commaRoundTrip;o||(o=Object.keys(t)),n.sort&&o.sort(n.sort);let l=new WeakMap;for(let p=0;p<o.length;++p){let f=o[p];n.skipNulls&&t[f]===null||Sze(i,wze(t[f],f,a,c,n.allowEmptyArrays,n.strictNullHandling,n.skipNulls,n.encodeDotInKeys,n.encode?n.encoder:null,n.filter,n.sort,n.allowDots,n.serializeDate,n.format,n.formatter,n.encodeValuesOnly,n.charset,l))}let u=i.join(n.delimiter),d=n.addQueryPrefix===!0?"?":"";return n.charsetSentinel&&(n.charset==="iso-8859-1"?d+="utf8=%26%2310003%3B&":d+="utf8=%E2%9C%93&"),u.length>0?d+u:""}var Tze,Sze,bze,qi,eae,_ze=C(()=>{vze();Xie();nf();Tze={brackets(r){return String(r)+"[]"},comma:"comma",indices(r,e){return String(r)+"["+e+"]"},repeat(r){return String(r)}},Sze=function(r,e){Array.prototype.push.apply(r,Uc(e)?e:[e])},qi={addQueryPrefix:!1,allowDots:!1,allowEmptyArrays:!1,arrayFormat:"indices",charset:"utf-8",charsetSentinel:!1,delimiter:"&",encode:!0,encodeDotInKeys:!1,encoder:yze,encodeValuesOnly:!1,format:Kie,formatter:Jie,indices:!1,serializeDate(r){return(bze??(bze=Function.prototype.call.bind(Date.prototype.toISOString)))(r)},skipNulls:!1,strictNullHandling:!1};eae={}});function Cze(r){return Eze(r,{arrayFormat:"brackets"})}var tae=C(()=>{_ze()});function I4(r){if(!r)return;let e;try{e=new URL(r)}catch(n){throw new On(`Invalid token endpoint base URL "${r}": ${n}`)}if(e.protocol==="https:")return;let t=e.hostname.toLowerCase().replace(/^\[|\]$/g,"");if(!(e.protocol==="http:"&&(t==="localhost"||t==="127.0.0.1"||t==="::1")))throw new On(`Refusing to send credential over non-https token endpoint "${r}"`)}async function P4(r,e){let t=await egr(r),n;try{n=JSON.parse(t)}catch{throw new On(`Token endpoint returned non-JSON response (status ${r.status})`,r.status,Yl(t),e)}if(!n.access_token)throw new On(`Token endpoint response missing access_token: ${JSON.stringify(Yl(n))}`,r.status,Yl(n),e);if(n.token_type&&n.token_type.toLowerCase()!=="bearer")throw new On(`Token endpoint response: unsupported token_type "${n.token_type}" (want Bearer)`,r.status,Yl(n),e);return n}function Yl(r){if(r==null)return r;if(typeof r=="string"){let e;try{e=JSON.parse(r)}catch{return r.length<=rae?r:r.slice(0,rae)+`... <${r.length-rae} more chars>`}return JSON.stringify(Yl(e))}if(typeof r=="object"&&!Array.isArray(r)){let e={};for(let[t,n]of Object.entries(r))Qfr.has(t)&&(e[t]=n);return e}return null}async function M4(r,e=t=>console.warn(`anthropic-sdk: ${t}`)){if(typeof process>"u"||process.platform==="win32")return;let t=await Promise.resolve().then(()=>(ri(),qp)),n=r,o;try{n=await t.promises.realpath(r),o=await t.promises.stat(n)}catch{return}let s=o.mode&511;if(s&18)throw new On(`Credentials file at ${n} is group/world-writable (mode 0o${s.toString(8)}); this allows other local users to plant tokens. Run \`chmod 600 ${n}\`.`);if(s&36)throw new On(`Credentials file at ${n} is group/world-readable (mode 0o${s.toString(8)}); run \`chmod 600 ${n}\` before retrying.`);typeof process.getuid=="function"&&o.uid!==process.getuid()&&e(`credentials file at ${n} is owned by uid ${o.uid} (current process uid ${process.getuid()}); verify this is intentional.`)}async function O4(r,e){let t=await Promise.resolve().then(()=>(ri(),qp)),o=(await Promise.resolve().then(()=>(mo(),Rd))).dirname(r);await t.promises.mkdir(o,{recursive:!0,mode:448});let s=`${r}.${process.pid}.${Math.random().toString(36).slice(2)}.tmp`;try{let i=await t.promises.open(s,"w",384);try{await i.writeFile(JSON.stringify(e,null,2)),await i.sync()}finally{await i.close()}await t.promises.rename(s,r)}catch(i){throw await t.promises.unlink(s).catch(()=>{}),i}try{let i=await t.promises.open(o,"r");try{await i.sync()}finally{await i.close()}}catch{}}async function egr(r){if(!r.body)return"";let e=r.body.getReader(),t=[],n=0;for(;;){let{done:s,value:i}=await e.read();if(s)break;if(n+i.length>kze){let a=kze-n;a>0&&t.push(i.subarray(0,a)),await e.cancel();break}t.push(i),n+=i.length}let o;if(t.length===1)o=t[0];else{o=new Uint8Array(t.reduce((i,a)=>i+a.length,0));let s=0;for(let i of t)o.set(i,s),s+=i.length}return new TextDecoder("utf-8").decode(o)}var Rze,Aze,A4,kT,Ize,Pze,K0,Mze,kze,rae,Qfr,On,J0=C(()=>{ko();Rze="urn:ietf:params:oauth:grant-type:jwt-bearer",Aze="refresh_token",A4="/v1/oauth/token",kT="oauth-2025-04-20",Ize="oidc-federation-2026-04-01",Pze=120,K0=30,Mze=5,kze=1<<20;rae=2e3,Qfr=new Set(["error","error_description","error_uri"]);On=class extends Je{constructor(e,t=null,n=null,o=null){super(e),this.statusCode=t,this.body=n,this.requestId=o}}});function Jp(){return Math.floor(Date.now()/1e3)}var dN=C(()=>{});var N4,Oze=C(()=>{J0();dN();N4=class{constructor(e,t){this.cached=null,this.pendingRefresh=null,this.nextForce=!1,this.lastAdvisoryError=0,this.provider=e,this.onAdvisoryRefreshError=t}async getToken(){let e=this.nextForce;this.nextForce=!1;let t=this.cached;if(e||t==null)return(await this.refresh(e)).token;if(t.expiresAt==null)return t.token;let n=t.expiresAt-Jp();return n>Pze?t.token:n>K0?(this.backgroundRefresh(),t.token):(await this.refresh()).token}invalidate(){this.cached=null,this.nextForce=!0}refresh(e=!1){return this.pendingRefresh&&!e?this.pendingRefresh:this.doRefresh(e)}backgroundRefresh(){this.pendingRefresh||Jp()-this.lastAdvisoryError<Mze||this.doRefresh().catch(e=>{this.lastAdvisoryError=Jp(),this.onAdvisoryRefreshError?.(e)})}doRefresh(e=!1){return this.pendingRefresh=this.provider(e?{forceRefresh:!0}:void 0).then(t=>(this.cached=t,this.pendingRefresh=null,t),t=>{throw this.pendingRefresh=null,t}),this.pendingRefresh}}});var rn,pN=C(()=>{rn=r=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[r]?.trim()||void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(r)?.trim()||void 0}});function Lze(r){let e=0;for(let o of r)e+=o.length;let t=new Uint8Array(e),n=0;for(let o of r)t.set(o,n),n+=o.length;return t}function Y0(r){let e;return(Nze??(e=new globalThis.TextEncoder,Nze=e.encode.bind(e)))(r)}function nae(r){let e;return(Dze??(e=new globalThis.TextDecoder,Dze=e.decode.bind(e)))(r)}var Nze,Dze,D4=C(()=>{});var Fze=C(()=>{ko();D4()});function mN(){}function L4(r,e,t){return!e||F4[r]>F4[t]?mN:e[r].bind(e)}function Cn(r){let e=r.logger,t=r.logLevel??"off";if(!e)return tgr;let n=Uze.get(e);if(n&&n[0]===t)return n[1];let o={error:L4("error",e,t),warn:L4("warn",e,t),info:L4("info",e,t),debug:L4("debug",e,t)};return Uze.set(e,[t,o]),o}var F4,oae,tgr,Uze,sf,$g=C(()=>{nf();F4={off:0,error:200,warn:300,info:400,debug:500},oae=(r,e,t)=>{if(r){if(ize(F4,r))return r;Cn(t).warn(`${e} was set to ${JSON.stringify(r)}, expected one of ${JSON.stringify(Object.keys(F4))}`)}};tgr={error:mN,warn:mN,info:mN,debug:mN},Uze=new WeakMap;sf=r=>(r.options&&(r.options={...r.options},delete r.options.headers),r.headers&&(r.headers=Object.fromEntries((r.headers instanceof Headers?[...r.headers]:Object.entries(r.headers)).map(([e,t])=>[e,e.toLowerCase()==="authorization"||e.toLowerCase()==="api-key"||e.toLowerCase()==="x-api-key"||e.toLowerCase()==="cookie"||e.toLowerCase()==="set-cookie"?"***":t]))),"retryOfRequestLogID"in r&&(r.retryOfRequestLogID&&(r.retryOf=r.retryOfRequestLogID),delete r.retryOfRequestLogID),r)});var sae=C(()=>{nf();Fze();pN();$g();w4();H0();tae()});function $ze(r){if(!r)throw new Error("profile name is empty");if(r==="."||r==="..")throw new Error(`profile name "${r}" is not allowed`);if(r.includes("/")||r.includes("\\"))throw new Error(`profile name "${r}" must not contain path separators`);if(!rgr.test(r))throw new Error(`profile name "${r}" contains disallowed characters (allowed: letters, digits, '_', '.', '-')`)}var U4,rgr,Bze,zze,iae,ngr,jze,aae=C(()=>{C4();sae();U4="1.0",rgr=/^[A-Za-z0-9_.-]+$/;Bze=async r=>{var e,t;let n=await iae();if(n===null)return null;let o=r??await jze();if(o===null)return null;$ze(o);let s=await Promise.resolve().then(()=>(ri(),qp)),a=(await Promise.resolve().then(()=>(mo(),Rd))).join(n,"configs",`${o}.json`),c;try{c=await s.promises.readFile(a,"utf-8")}catch(d){if(d?.code!=="ENOENT")throw new Error(`failed to read config file ${a}: ${d}`);c=null}if(c===null){let d=rn("ANTHROPIC_ORGANIZATION_ID"),p=rn("ANTHROPIC_IDENTITY_TOKEN_FILE"),f=rn("ANTHROPIC_FEDERATION_RULE_ID");return f&&d?{fromFile:!1,config:{organization_id:d,workspace_id:rn("ANTHROPIC_WORKSPACE_ID"),base_url:rn("ANTHROPIC_BASE_URL"),authentication:{type:"oidc_federation",federation_rule_id:f,service_account_id:rn("ANTHROPIC_SERVICE_ACCOUNT_ID"),identity_token:p?{source:"file",path:p}:void 0,scope:rn("ANTHROPIC_SCOPE")}}}:null}let l;try{l=JSON.parse(c)}catch(d){throw new Error(`failed to parse config file ${a}: ${d}`)}if(!l.authentication)throw new Error(`config file ${a} is missing "authentication"`);let u=l.authentication.type;if(u!=="oidc_federation"&&u!=="user_oauth")throw new Error(`authentication.type "${u}" is not a known authentication type`);if(l.organization_id??(l.organization_id=rn("ANTHROPIC_ORGANIZATION_ID")),l.workspace_id??(l.workspace_id=rn("ANTHROPIC_WORKSPACE_ID")),l.base_url??(l.base_url=rn("ANTHROPIC_BASE_URL")),(e=l.authentication).scope??(e.scope=rn("ANTHROPIC_SCOPE")),l.authentication.type==="oidc_federation"){if(!l.authentication.identity_token){let d=rn("ANTHROPIC_IDENTITY_TOKEN_FILE");d&&(l.authentication.identity_token={source:"file",path:d})}l.authentication.federation_rule_id||(l.authentication.federation_rule_id=rn("ANTHROPIC_FEDERATION_RULE_ID")??""),(t=l.authentication).service_account_id??(t.service_account_id=rn("ANTHROPIC_SERVICE_ACCOUNT_ID"))}return{config:l,fromFile:!0}},zze=async(r,e)=>{if(r?.authentication.credentials_path)return r.authentication.credentials_path;let t=await iae();if(!t)return null;let n=e??await jze();return n?($ze(n),(await Promise.resolve().then(()=>(mo(),Rd))).join(t,"credentials",`${n}.json`)):null},iae=async()=>{if(!ngr())return null;let r=await Promise.resolve().then(()=>(mo(),Rd)),e=rn("ANTHROPIC_CONFIG_DIR");if(e)return e;if(lN()["X-Stainless-OS"]==="Windows"){let s=rn("APPDATA");if(s)return r.join(s,"Anthropic");let i=rn("USERPROFILE");return i?r.join(i,"AppData","Roaming","Anthropic"):null}let n=rn("XDG_CONFIG_HOME");if(n)return r.join(n,"anthropic");let o=rn("HOME");return o?r.join(o,".config","anthropic"):null},ngr=()=>{let r=lN()["X-Stainless-Runtime"];return r==="node"||r==="deno"},jze=async()=>{let r=await iae();if(!r)return null;let e=rn("ANTHROPIC_PROFILE");if(e)return e;let t=await Promise.resolve().then(()=>(ri(),qp)),o=(await Promise.resolve().then(()=>(mo(),Rd))).join(r,"active_config");try{return(await t.promises.readFile(o,"utf-8")).trim()||"default"}catch(s){if(s?.code!=="ENOENT")throw new Error(`failed to read ${o}: ${s}`);return"default"}}});function cae(r){if(!r)throw new Je("Identity token file path is empty");return async()=>{let e=await Promise.resolve().then(()=>(ri(),qp)),t;try{t=await e.promises.readFile(r,"utf-8")}catch(o){throw new Je(`Failed to read identity token file at ${r}: ${o}`)}let n=t.trim();if(!n)throw new Je(`Identity token file at ${r} is empty`);return n}}function Gze(r){if(!r)throw new Je("Identity token value is empty");return()=>r}var Vze=C(()=>{ko()});function qze(r){return async()=>{I4(r.baseURL);let e=await r.identityTokenProvider();if(e.length>16*1024)throw new On(`Identity token is ${Math.ceil(e.length/1024)} KiB, exceeds the 16 KiB assertion limit`);let t={grant_type:Rze,assertion:e,federation_rule_id:r.federationRuleId,organization_id:r.organizationId};r.serviceAccountId&&(t.service_account_id=r.serviceAccountId),r.workspaceId&&(t.workspace_id=r.workspaceId);let n=`${r.baseURL}${A4}`,o;try{o=await r.fetch(n,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":`${kT},${Ize}`,"User-Agent":r.userAgent||`anthropic-sdk-typescript/${Ld} oidcFederationProvider`},body:JSON.stringify(t)})}catch(c){throw new On(`Failed to reach token endpoint ${n}: ${c}`)}let s=o.headers.get("Request-Id");if(!o.ok){let c=await o.text().catch(()=>""),l=Yl(c),u="";throw o.status===401&&(u=` Ensure your federation rule matches your identity token. ${r.workspaceId?"":"If your federation rule is scoped to multiple workspaces, set the ANTHROPIC_WORKSPACE_ID environment variable, the 'workspace_id' config key, or the `workspaceId` option. "}View your authentication events in the Workload identity page of Claude Console for more details.`),new On(`Token exchange failed with status ${o.status}${s?` (request-id ${s})`:""}: ${l}${u}`,o.status,l,s)}let i=await P4(o,s),a=Number(i.expires_in);if(!Number.isFinite(a))throw new On(`Token endpoint response missing required fields: ${JSON.stringify(Yl(i))}`,o.status,Yl(i),s);return{token:i.access_token,expiresAt:Jp()+a}}}var Hze=C(()=>{J0();dN();cN()});function Wze(r){return async e=>{let t=await Promise.resolve().then(()=>(ri(),qp));await M4(r.credentialsPath,r.onSafetyWarning);let n;try{n=await t.promises.readFile(r.credentialsPath,"utf-8")}catch(x){throw new On(`Credentials file not found at ${r.credentialsPath}: ${x}`)}let o;try{o=JSON.parse(n)}catch(x){throw new On(`Credentials file at ${r.credentialsPath} is not valid JSON: ${x}`)}let s=o.access_token;if(!s)throw new On(`Credentials file at ${r.credentialsPath} must include 'access_token'`);let i=o.expires_at;if(!e?.forceRefresh&&(i==null||Jp()<i-K0))return{token:s,expiresAt:i??null};let a=o.refresh_token;if(!r.clientId||!a)throw new On(`Access token at ${r.credentialsPath} has expired and no refresh is available (client_id ${r.clientId?"set":"empty"}, refresh_token ${a?"set":"empty"})`);I4(r.baseURL);let c={grant_type:Aze,refresh_token:a,client_id:r.clientId},l=`${r.baseURL}${A4}`,u;try{u=await r.fetch(l,{method:"POST",headers:{"Content-Type":"application/json","anthropic-beta":kT,"User-Agent":r.userAgent||`anthropic-sdk-typescript/${Ld} userOAuthProvider`},body:JSON.stringify(c)})}catch(x){throw new On(`User OAuth refresh failed to reach token endpoint: ${x}`)}let d=u.headers.get("Request-Id");if(!u.ok){let x=await u.text().catch(()=>"");throw new On(`User OAuth refresh failed (HTTP ${u.status}): ${Yl(x)}`,u.status,Yl(x),d)}let p=await P4(u,d),f=Number(p.expires_in);if(!Number.isFinite(f))throw new On(`User OAuth refresh response missing or invalid expires_in: ${JSON.stringify(Yl(p))}`,u.status,Yl(p),d);let h=Jp()+f,y=p.refresh_token||a;return await O4(r.credentialsPath,{...o,version:U4,type:"oauth_token",access_token:p.access_token,expires_at:h,refresh_token:y}),{token:p.access_token,expiresAt:h}}}var Kze=C(()=>{aae();J0();dN();cN()});function lae(r,e){let t=r.authentication.credentials_path??null,n=(r.base_url||e.baseURL).replace(/\/+$/,""),o=ogr(r,t,n,e),s={};return r.workspace_id&&r.authentication.type==="user_oauth"&&(s["anthropic-workspace-id"]=r.workspace_id),{provider:o,extraHeaders:s,baseURL:r.base_url||void 0}}async function Jze(r,e){let t=await Bze(e);if(!t)return null;let{config:n,fromFile:o}=t,s=n.authentication.credentials_path||!o?n:{...n,authentication:{...n.authentication,credentials_path:await zze(n,e)??void 0}};return lae(s,r)}function ogr(r,e,t,n){switch(r.authentication.type){case"oidc_federation":{let o=r.authentication,s=sgr(o);if(!s)throw new On("oidc_federation config requires an identity token (set authentication.identity_token, ANTHROPIC_IDENTITY_TOKEN_FILE, or ANTHROPIC_IDENTITY_TOKEN)");if(!o.federation_rule_id)throw new On("oidc_federation config requires 'federation_rule_id'. Set it in authentication.federation_rule_id in your profile, or via ANTHROPIC_FEDERATION_RULE_ID (profile takes precedence).");if(!r.organization_id)throw new On("oidc_federation config requires organization_id (set ANTHROPIC_ORGANIZATION_ID or config.organization_id)");let i=qze({identityTokenProvider:s,federationRuleId:o.federation_rule_id,organizationId:r.organization_id,serviceAccountId:o.service_account_id,workspaceId:r.workspace_id,baseURL:t,fetch:n.fetch,userAgent:n.userAgent});return e?igr(i,e,n.onCacheWriteError,n.onSafetyWarning):i}case"user_oauth":{if(!e)throw new On("user_oauth config requires authentication.credentials_path (or load via a profile so it defaults to <config_dir>/credentials/<profile>.json)");return Wze({credentialsPath:e,clientId:r.authentication.client_id,baseURL:t,fetch:n.fetch,userAgent:n.userAgent,onSafetyWarning:n.onSafetyWarning})}default:{let o=r.authentication.type;throw new On(`authentication.type "${o}" is not a known authentication type`)}}}function sgr(r){if(r.identity_token){let n=r.identity_token.source;if(n!=="file")throw new On(`identity_token.source "${n}" is not supported by this SDK version (only "file")`);if(!r.identity_token.path)throw new On('identity_token.source "file" requires a non-empty path');return cae(r.identity_token.path)}let e=rn("ANTHROPIC_IDENTITY_TOKEN_FILE");if(e)return cae(e);let t=rn("ANTHROPIC_IDENTITY_TOKEN");return t?Gze(t):null}function igr(r,e,t,n){return async o=>{let s=await Promise.resolve().then(()=>(ri(),qp));await M4(e,n);let i;try{let c=await s.promises.readFile(e,"utf-8");i=JSON.parse(c);let l=i?.access_token;if(l&&!o?.forceRefresh){let u=i?.expires_at;if(u==null||Jp()<u-K0)return{token:l,expiresAt:u??null}}}catch(c){c?.code!=="ENOENT"&&!(c instanceof SyntaxError)&&t?.(c)}let a=await r(o);try{await O4(e,{...i??{},version:U4,type:"oauth_token",access_token:a.token,expires_at:a.expiresAt})}catch(c){t?.(c)}return a}}var Yze=C(()=>{pN();aae();J0();dN();Vze();Hze();Kze()});function agr(r,e){for(let o=e??0;o<r.length;o++){if(r[o]===10)return{preceding:o,index:o+1,carriage:!1};if(r[o]===13)return{preceding:o,index:o+1,carriage:!0}}return null}function Xze(r){for(let n=0;n<r.length-1;n++){if(r[n]===10&&r[n+1]===10||r[n]===13&&r[n+1]===13)return n+2;if(r[n]===13&&r[n+1]===10&&n+3<r.length&&r[n+2]===13&&r[n+3]===10)return n+4}return-1}var Hu,Wu,Bg,uae=C(()=>{Jl();D4();Bg=class{constructor(){Hu.set(this,void 0),Wu.set(this,void 0),Fe(this,Hu,new Uint8Array,"f"),Fe(this,Wu,null,"f")}decode(e){if(e==null)return[];let t=e instanceof ArrayBuffer?new Uint8Array(e):typeof e=="string"?Y0(e):e;Fe(this,Hu,Lze([G(this,Hu,"f"),t]),"f");let n=[],o;for(;(o=agr(G(this,Hu,"f"),G(this,Wu,"f")))!=null;){if(o.carriage&&G(this,Wu,"f")==null){Fe(this,Wu,o.index,"f");continue}if(G(this,Wu,"f")!=null&&(o.index!==G(this,Wu,"f")+1||o.carriage)){n.push(nae(G(this,Hu,"f").subarray(0,G(this,Wu,"f")-1))),Fe(this,Hu,G(this,Hu,"f").subarray(G(this,Wu,"f")),"f"),Fe(this,Wu,null,"f");continue}let s=G(this,Wu,"f")!==null?o.preceding-1:o.preceding,i=nae(G(this,Hu,"f").subarray(0,s));n.push(i),Fe(this,Hu,G(this,Hu,"f").subarray(o.index),"f"),Fe(this,Wu,null,"f")}return n}flush(){return G(this,Hu,"f").length?this.decode(`
1176
1176
  `):[]}};Hu=new WeakMap,Wu=new WeakMap;Bg.NEWLINE_CHARS=new Set([`
1177
1177
  `,"\r"]);Bg.NEWLINE_REGEXP=/\r\n|[\n\r]/g});async function*cgr(r,e){if(!r.body)throw e.abort(),typeof globalThis.navigator<"u"&&globalThis.navigator.product==="ReactNative"?new Je("The default react-native fetch implementation does not support streaming. Please use expo/fetch: https://docs.expo.dev/versions/latest/sdk/expo/#expofetch-api"):new Je("Attempted to iterate over a response with no body");let t=new dae,n=new Bg,o=uN(r.body);for await(let s of lgr(o))for(let i of n.decode(s)){let a=t.decode(i);a&&(yield a)}for(let s of n.flush()){let i=t.decode(s);i&&(yield i)}}async function*lgr(r){let e=new Uint8Array;for await(let t of r){if(t==null)continue;let n=t instanceof ArrayBuffer?new Uint8Array(t):typeof t=="string"?Y0(t):t,o=new Uint8Array(e.length+n.length);o.set(e),o.set(n,e.length),e=o;let s;for(;(s=Xze(e))!==-1;)yield e.slice(0,s),e=e.slice(s)}e.length>0&&(yield e)}function ugr(r,e){let t=r.indexOf(e);return t!==-1?[r.substring(0,t),e,r.substring(t+e.length)]:[r,"",""]}var fN,Fd,dae,$4=C(()=>{Jl();ko();W0();uae();W0();CT();nf();D4();$g();ko();Fd=class r{constructor(e,t,n){this.iterator=e,fN.set(this,void 0),this.controller=t,Fe(this,fN,n,"f")}static fromSSEResponse(e,t,n){let o=!1,s=n?Cn(n):console;async function*i(){if(o)throw new Je("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");o=!0;let a=!1;try{for await(let c of cgr(e,t)){if(c.event==="completion")try{yield JSON.parse(c.data)}catch(l){throw s.error("Could not parse message into JSON:",c.data),s.error("From chunk:",c.raw),l}if(c.event==="message_start"||c.event==="message_delta"||c.event==="message_stop"||c.event==="content_block_start"||c.event==="content_block_delta"||c.event==="content_block_stop"||c.event==="message"||c.event==="user.message"||c.event==="user.interrupt"||c.event==="user.tool_confirmation"||c.event==="user.custom_tool_result"||c.event==="user.tool_result"||c.event==="agent.message"||c.event==="agent.thinking"||c.event==="agent.tool_use"||c.event==="agent.tool_result"||c.event==="agent.mcp_tool_use"||c.event==="agent.mcp_tool_result"||c.event==="agent.custom_tool_use"||c.event==="agent.thread_context_compacted"||c.event==="session.status_running"||c.event==="session.status_idle"||c.event==="session.status_rescheduled"||c.event==="session.status_terminated"||c.event==="session.error"||c.event==="session.deleted"||c.event==="session.updated"||c.event==="span.model_request_start"||c.event==="span.model_request_end"||c.event==="span.outcome_evaluation_start"||c.event==="span.outcome_evaluation_ongoing"||c.event==="span.outcome_evaluation_end"||c.event==="user.define_outcome"||c.event==="agent.thread_message_received"||c.event==="agent.thread_message_sent"||c.event==="agent.session_thread_message_received"||c.event==="agent.session_thread_message_sent"||c.event==="session.thread_created"||c.event==="session.thread_status_created"||c.event==="session.thread_status_running"||c.event==="session.thread_status_idle"||c.event==="session.thread_status_rescheduled"||c.event==="session.thread_status_terminated")try{yield JSON.parse(c.data)}catch(l){throw s.error("Could not parse message into JSON:",c.data),s.error("From chunk:",c.raw),l}if(c.event!=="ping"&&c.event==="error"){let l=_4(c.data)??c.data,u=l?.error?.type;throw new ni(void 0,l,void 0,e.headers,u)}}a=!0}catch(c){if(Wp(c))return;throw c}finally{a||t.abort()}}return new r(i,t,n)}static fromReadableStream(e,t,n){let o=!1;async function*s(){let a=new Bg,c=uN(e);for await(let l of c)for(let u of a.decode(l))yield u;for(let l of a.flush())yield l}async function*i(){if(o)throw new Je("Cannot iterate over a consumed stream, use `.tee()` to split the stream.");o=!0;let a=!1;try{for await(let c of s())a||c&&(yield JSON.parse(c));a=!0}catch(c){if(Wp(c))return;throw c}finally{a||t.abort()}}return new r(i,t,n)}[(fN=new WeakMap,Symbol.asyncIterator)](){return this.iterator()}tee(){let e=[],t=[],n=this.iterator(),o=s=>({next:()=>{if(s.length===0){let i=n.next();e.push(i),t.push(i)}return s.shift()}});return[new r(()=>o(e),this.controller,G(this,fN,"f")),new r(()=>o(t),this.controller,G(this,fN,"f"))]}toReadableStream(){let e=this,t;return Wie({async start(){t=e[Symbol.asyncIterator]()},async pull(n){try{let{value:o,done:s}=await t.next();if(s)return n.close();let i=Y0(JSON.stringify(o)+`
1178
1178
  `);n.enqueue(i)}catch(o){n.error(o)}},async cancel(){await t.return?.()}})}};dae=class{constructor(){this.event=null,this.data=[],this.chunks=[]}decode(e){if(e.endsWith("\r")&&(e=e.substring(0,e.length-1)),!e){if(!this.event&&!this.data.length)return null;let s={event:this.event,data:this.data.join(`
@@ -1228,7 +1228,7 @@ ${t[0].text}`;let n=t.length-1;t[n].text=`${t[n].text}
1228
1228
  </system_instructions>`;let o=Array.isArray(r.messages)?r.messages:[],s=o[0];if(s&&s.role==="user"){let i=typeof s.content=="string"?[{type:"text",text:s.content}]:Array.isArray(s.content)?s.content:[];s.content=[...t,...i]}else o.unshift({role:"user",content:t});r.messages=o}var Gce=C(()=>{"use strict"});function Rvr(r){try{if(typeof r=="string"||r instanceof URL)return new URL(r.toString());if(r instanceof Request)return new URL(r.url)}catch{return null}return null}function Avr(r,e){let t=new Headers;if(r instanceof Request&&r.headers.forEach((n,o)=>{t.set(o,n)}),!e?.headers)return t;if(e.headers instanceof Headers)return e.headers.forEach((n,o)=>{t.set(o,n)}),t;if(Array.isArray(e.headers)){for(let[n,o]of e.headers)typeof o<"u"&&t.set(n,String(o));return t}for(let[n,o]of Object.entries(e.headers))typeof o<"u"&&t.set(n,String(o));return t}function Ivr(r,e,t,n){let o=(r.get("anthropic-beta")??"").split(",").map(i=>i.trim()).filter(Boolean),s=["oauth-2025-04-20"];n||s.push(...t?WT.filter(i=>i!=="oauth-2025-04-20"):[]),r.set("authorization",`Bearer ${e()}`),r.set("anthropic-beta",[...new Set([...o,...s])].join(",")),r.delete("x-api-key"),!n&&(r.set("user-agent",IC),r.set("anthropic-version","2023-06-01"),r.set("accept","application/json"),r.set("anthropic-dangerous-direct-browser-access","true"),r.set("x-app","cli"),r.set("connection","keep-alive"),r.set("x-stainless-retry-count","0"),r.set("x-stainless-runtime-version","v24.3.0"),r.set("x-stainless-package-version","0.74.0"),r.set("x-stainless-runtime","node"),r.set("x-stainless-lang","js"),r.set("x-stainless-arch",process.arch==="x64"?"x64":process.arch),r.set("x-stainless-os",process.platform==="darwin"?"MacOS":process.platform==="win32"?"Windows":"Linux"),r.set("x-stainless-timeout","600"))}async function Pvr(r,e){let t=r instanceof Request?r:void 0,n=e?.method??t?.method,o=e?.body;return o===void 0&&t&&n!=="GET"&&n!=="HEAD"&&((t.headers.get("content-type")??"").includes("application/json")?o=await t.clone().text()||void 0:o=t.clone().body??void 0),{sourceRequest:t,method:n,body:o??void 0}}function Mvr(r,e,t,n){let o=JSON.parse(r);n&&(o.tools&&Array.isArray(o.tools)&&(o.tools=o.tools.map(l=>({...l,name:l.name?`${zce}${l.name}`:l.name}))),o.messages&&Array.isArray(o.messages)&&(o.messages=o.messages.map(l=>(l.content&&Array.isArray(l.content)&&(l.content=l.content.map(u=>{let d=u;return d.type==="tool_use"&&d.name?{...d,name:`${zce}${d.name}`}:u})),l)))),(o.tool_choice?.type==="any"||o.tool_choice?.type==="tool")&&delete o.thinking;let s={type:"text",text:"You are a Claude agent, built on Anthropic's Claude Agent SDK."};if(o.system){if(typeof o.system=="string"&&(o.system=[{type:"text",text:o.system}]),Array.isArray(o.system)){let l=o.system.findIndex(h=>typeof h.text=="string"&&h.text.includes("x-anthropic-billing-header")),u=o.system.findIndex(h=>typeof h.text=="string"&&h.text.includes("Claude Agent SDK")),d={type:"text",text:PC(o.system[l]?.text)},p=u>=0,f=[l,u].filter(h=>h>=0).sort((h,y)=>y-h);for(let h of f)o.system.splice(h,1);!p&&o.system.length>0?(DH(o,o.system),o.system=[d,s]):o.system=[...o.system,d,s]}}else{let l={type:"text",text:PC()};o.system=[l,s]}let i=t(),a=o.metadata?.user_id??i.substring(0,Math.min(20,i.length)),c=PH(a,{existingUserId:o.metadata?.user_id,preferredSessionId:e.get("x-claude-code-session-id")??void 0});return o.metadata={...o.metadata,user_id:c.metadataUserId},e.set("x-claude-code-session-id",c.sessionId),JSON.stringify(o)}async function Ovr(r){try{let{propagation:e,context:t}=await Promise.resolve().then(()=>(Dr(),J8)),n={};e.inject(t.active(),n);for(let[o,s]of Object.entries(n))r.has(o)||r.set(o,s)}catch{}}function Nvr(r){if(!r.body)return r;let e=r.body.getReader(),t=new TextDecoder,n=new TextEncoder,o=new Headers(r.headers);o.delete("content-length");let s="",i=new ReadableStream({async pull(a){let{done:c,value:l}=await e.read();if(c){s&&(a.enqueue(n.encode(s.replace(/"name"\s*:\s*"mcp_([^"]+)"/g,'"name": "$1"'))),s=""),a.close();return}let u=t.decode(l,{stream:!0}),d=s+u,p=d.match(/"name"\s*:\s*"mcp_[^"]*$/),f;if(p&&p.index!==void 0)f=d.slice(0,p.index),s=d.slice(p.index);else{let y=d.lastIndexOf('"'),x=y>=0?y+1:d.length;f=d.slice(0,x),s=d.slice(x)}let h=f.replace(/"name"\s*:\s*"mcp_([^"]+)"/g,'"name": "$1"');h&&a.enqueue(n.encode(h))},async cancel(a){await e.cancel(a)}});return new Response(i,{status:r.status,statusText:r.statusText,headers:o})}async function Dvr(r,e,t,n,o,s){let i=Rvr(r);i&&i.pathname==="/v1/messages"&&!i.searchParams.has("beta")&&i.searchParams.set("beta","true");let a=Avr(r,e);Ivr(a,t,n,s),g.debug("[createOAuthFetch] Making OAuth request:",{url:i?.toString()||r.toString(),hasAuthorization:a.has("authorization"),authType:"Bearer",anthropicBeta:a.get("anthropic-beta"),userAgent:a.get("user-agent")});let{sourceRequest:c,method:l,body:u}=await Pvr(r,e),d=u;if(d&&typeof d=="string"&&!s)try{d=Mvr(d,a,t,o)}catch{}a.delete("content-length"),await Ovr(a);let f=await vt()(i?.toString()||(r instanceof Request?r.url:r.toString()),{...e,method:l,body:d,signal:e?.signal??c?.signal,headers:a});return o?Nvr(f):f}function NGe(r,e=!0,t=!1,n=!1){return async(o,s)=>Dvr(o,s,r,e,t,n)}var DGe=C(()=>{"use strict";MH();H();Co();Gce()});function KT(r){let e=Vce,t=r.system,n=r.tools;if(!!r.system&&r.system.trim().length>0)t=[{type:"text",text:r.system,cache_control:LH}],e--;else if(r.tools&&r.tools.length>0){let a=r.tools.length-1;n=r.tools.map((c,l)=>l===a?{...c,cache_control:LH}:c),e--}let s=r.messages.map(a=>({...a})),i=Math.min(e,r.maxHistoryBreakpoints??Vce);for(let a=s.length-1;a>=0&&i>0;a--)LGe(s,a)&&i--;return{system:t,tools:n,messages:s}}function qce(r){let e=0;Array.isArray(r.system)&&(e+=r.system.filter(t=>t.cache_control).length),r.tools&&(e+=r.tools.filter(t=>t.cache_control).length);for(let t of r.messages)Array.isArray(t.content)&&(e+=t.content.filter(n=>n.cache_control).length);return e}function Hce(r,e){let t=r.map(o=>({...o})),n=Math.max(0,Math.min(e,Vce));for(let o=t.length-1;o>=0&&n>0;o--)Lvr(t[o])||LGe(t,o)&&n--;return t}function Lvr(r){return!Array.isArray(r.content)||r.content.length===0?!1:!!r.content[r.content.length-1].cache_control}function LGe(r,e){let t=r[e];if(typeof t.content=="string")return t.content.length===0?!1:(r[e]={...t,content:[{type:"text",text:t.content,cache_control:LH}]},!0);if(!Array.isArray(t.content)||t.content.length===0)return!1;let n=t.content.map(s=>({...s})),o=n.length-1;return n[o]={...n[o],cache_control:LH},r[e]={...t,content:n},!0}var LH,FH,Vce,Wce=C(()=>{"use strict";LH={type:"ephemeral"},FH=4,Vce=FH});function Jce(r){if(r.length>=8&&r[0]===137&&r[1]===80&&r[2]===78&&r[3]===71)return"image/png";if(r.length>=3&&r[0]===255&&r[1]===216&&r[2]===255)return"image/jpeg";if(r.length>=6&&r[0]===71&&r[1]===73&&r[2]===70)return"image/gif";if(r.length>=12&&r[0]===82&&r[1]===73&&r[2]===70&&r[3]===70&&r[8]===87&&r[9]===69&&r[10]===66&&r[11]===80)return"image/webp"}function YN(r,e){if(r instanceof ArrayBuffer)return YN(new Uint8Array(r),e);if(r instanceof Uint8Array)return{type:"image",source:{type:"base64",media_type:Kce(e)??Jce(r)??"image/png",data:Buffer.from(r).toString("base64")}};if(typeof r!="string"&&!(r instanceof URL))return;let t=r instanceof URL?r.toString():r,n=t.match(/^data:(image\/[a-z0-9+.-]+);base64,(.+)$/i);if(n){let s=Kce(n[1])??FGe(n[2]);return s?{type:"image",source:{type:"base64",media_type:s,data:n[2]}}:void 0}return/^https?:\/\//i.test(t)?{type:"image",source:{type:"url",url:t}}:{type:"image",source:{type:"base64",media_type:Kce(e)??FGe(t)??"image/png",data:t}}}function BGe(r){let e=r?.data;if(e==null)return;let t=typeof r.mediaType=="string"?r.mediaType.toLowerCase().split(";")[0].trim():"";if(UGe.has(t)||t==="image/jpg")return YN(e,t);if(t==="application/pdf")return $Ge(e);let n=e instanceof ArrayBuffer?new Uint8Array(e):e instanceof Uint8Array?e:void 0;if(n&&Jce(n))return YN(n)}var UGe,Kce,Fvr,FGe,$Ge,zGe=C(()=>{"use strict";UGe=new Set(["image/jpeg","image/png","image/gif","image/webp"]),Kce=r=>{if(!r)return;let e=r.toLowerCase().split(";")[0].trim();return e==="image/jpg"?"image/jpeg":UGe.has(e)?e:void 0};Fvr=32,FGe=r=>{try{return Jce(Buffer.from(r.slice(0,Fvr),"base64"))}catch{return}};$Ge=r=>{if(r instanceof ArrayBuffer)return $Ge(new Uint8Array(r));if(r instanceof Uint8Array)return{type:"document",source:{type:"base64",media_type:"application/pdf",data:Buffer.from(r).toString("base64")}};if(r instanceof URL)return{type:"document",source:{type:"url",url:r.toString()}};if(typeof r=="string"){let e=r.match(/^data:application\/pdf;base64,(.+)$/i);return e?{type:"document",source:{type:"base64",media_type:"application/pdf",data:e[1]}}:/^https?:\/\//i.test(r)?{type:"document",source:{type:"url",url:r}}:{type:"document",source:{type:"base64",media_type:"application/pdf",data:r}}}}});var KGe={};te(KGe,{ANTHROPIC_BETA_HEADERS:()=>Yce,AnthropicProvider:()=>Xce,ModelAccessError:()=>JI,getModelCapabilities:()=>NH,getRecommendedModelForTier:()=>OH,isModelAvailableForTier:()=>JN});var Yce,jGe,UH,Uvr,GGe,$vr,Bvr,zvr,Nx,WGe,VGe,jvr,qGe,Gvr,HGe,Xce,JGe=C(()=>{"use strict";Oae();Dr();Xn();yp();dn();MH();zu();ki();jce();DGe();Co();Dt();H();mn();Wce();Cd();go();no();Gie();iM();Nm();$q();Iu();Yq();zGe();Gj();Fg();jce();Yce={"anthropic-beta":["claude-code-20250219","fine-grained-tool-streaming-2025-05-14"].join(",")},jGe=()=>Mr(dBe()),UH=()=>Or("ANTHROPIC_MODEL","claude-sonnet-4-6"),Uvr=Tt.getTracer("neurolink.provider.anthropic"),GGe=()=>{try{let e=Zr(Em(),".neurolink","anthropic-credentials.json");if(co(e)){let t=hu(e,"utf-8"),n=JSON.parse(t);if(n.type==="oauth"&&n.oauth?.accessToken)return g.debug("[AnthropicProvider] Using OAuth token from stored credentials file"),n.oauth}}catch(e){g.debug("[AnthropicProvider] Failed to read stored credentials:",e)}let r=process.env.ANTHROPIC_OAUTH_TOKEN||process.env.CLAUDE_OAUTH_TOKEN;if(!r)return null;try{let e=JSON.parse(r);if(typeof e=="object"&&e.accessToken)return e;if(typeof e=="string")return{accessToken:e}}catch{}return{accessToken:r}},$vr=r=>{let e=process.env.ANTHROPIC_SUBSCRIPTION_TIER?.toLowerCase();if(e){let t=["free","pro","max","max_5","max_20","api"];if(t.includes(e))return g.debug("[detectSubscriptionTier] Using environment override",{tier:e}),e;g.warn("[detectSubscriptionTier] Invalid ANTHROPIC_SUBSCRIPTION_TIER",{value:e,validTiers:t})}if(r){let t=r.scopes??[],n="pro";return t.includes("max_20")?n="max_20":t.includes("max_5")?n="max_5":t.includes("max")&&(n="max"),g.debug("[detectSubscriptionTier] Detected from OAuth token",{tier:n,scopes:t}),n}return g.debug("[detectSubscriptionTier] No OAuth token, defaulting to API tier"),"api"},Bvr=r=>{let e=process.env.ANTHROPIC_AUTH_METHOD?.toLowerCase();if(e==="api_key"||e==="apikey")return g.debug("[detectAuthMethod] Forced to api_key by ANTHROPIC_AUTH_METHOD env var"),"api_key";if(e==="oauth"){if(r)return g.debug("[detectAuthMethod] Forced to oauth by ANTHROPIC_AUTH_METHOD env var"),"oauth";g.warn("[detectAuthMethod] ANTHROPIC_AUTH_METHOD=oauth but no OAuth token found; falling through to auto-detection")}else e&&g.warn("[detectAuthMethod] Unrecognized ANTHROPIC_AUTH_METHOD value; falling through to auto-detection",{value:e});let t=r?"oauth":"api_key";return g.debug("[detectAuthMethod] Auth method resolved",{method:t,hasOAuthToken:!!r}),t},zvr=r=>{let e=n=>r instanceof Headers?r.get(n):r[n]||r[n.toLowerCase()]||null,t=n=>{if(!n)return;let o=parseInt(n,10);return isNaN(o)?void 0:o};return{requestsLimit:t(e("anthropic-ratelimit-requests-limit")),requestsRemaining:t(e("anthropic-ratelimit-requests-remaining")),requestsReset:e("anthropic-ratelimit-requests-reset")||void 0,tokensLimit:t(e("anthropic-ratelimit-tokens-limit")),tokensRemaining:t(e("anthropic-ratelimit-tokens-remaining")),tokensReset:e("anthropic-ratelimit-tokens-reset")||void 0,retryAfter:t(e("retry-after"))}},Nx=r=>r?.providerOptions?.anthropic?.cacheControl?.type==="ephemeral"?{type:"ephemeral"}:void 0,WGe=r=>{if(r==null)return"";if(typeof r=="string")return r;let e=r;if(e.type==="text"&&typeof e.value=="string")return e.value;if(e.type==="json"||e.type==="error-json")try{return JSON.stringify(e.value)}catch{return String(e.value)}try{return JSON.stringify(r)}catch{return String(r)}},VGe=r=>{let e=[],t=[],n=i=>Array.isArray(i)?i:[i],o=(i,a)=>{let c=Nx(a);if(c&&i.length>0){let l=i[i.length-1];l.cache_control=c}};for(let i of r)switch(i.role){case"system":{let a=typeof i.content=="string"?i.content:n(i.content).map(l=>typeof l=="string"?l:String(l?.text??"")).join(`
1229
1229
  `),c=Nx(i);e.push({type:"text",text:a,...c?{cache_control:c}:{}});break}case"user":{let a=[];for(let c of n(i.content)){if(typeof c=="string"){c.length>0&&a.push({type:"text",text:c});continue}let l=c;if(l?.type==="text"&&typeof l.text=="string"){let u=Nx(l);a.push({type:"text",text:l.text,...u?{cache_control:u}:{}})}else if(l?.type==="image"||l?.type==="image_url"){let u=YN(l.image??l.data??l.url);if(u){let d=Nx(l);a.push(d?{...u,cache_control:d}:u)}}else if(l?.type==="file"){let d=typeof l=="object"&&l!==null&&("mediaType"in l?typeof l.mediaType=="string":!0)?BGe(l):void 0;if(d){let p=Nx(l);p&&(d.cache_control=p),a.push(d)}}}a.length>0&&(o(a,i),t.push({role:"user",content:a}));break}case"assistant":{let a=[];for(let c of n(i.content)){if(typeof c=="string"){c.length>0&&a.push({type:"text",text:c});continue}let l=c;if(l?.type==="text"&&typeof l.text=="string"){if(l.text.length>0){let u=Nx(l);a.push({type:"text",text:l.text,...u?{cache_control:u}:{}})}}else if(l?.type==="tool-call"){let u=l.input;if(typeof u=="string")try{u=JSON.parse(u)}catch{u={}}a.push({type:"tool_use",id:l.toolCallId??"",name:l.toolName??"",input:u??{}})}}a.length>0&&(o(a,i),t.push({role:"assistant",content:a}));break}case"tool":{let a=[];if(Array.isArray(i.content))for(let c of i.content){let l=c;l?.type==="tool-result"&&a.push({type:"tool_result",tool_use_id:l.toolCallId??"",content:WGe(l.output)})}else typeof i.content=="string"&&a.push({type:"tool_result",tool_use_id:i.toolCallId??"",content:i.content});a.length>0&&t.push({role:"user",content:a});break}}let s=e.length===0?void 0:e.some(i=>i.cache_control)?e:e.map(i=>i.text).join(`
1230
1230
 
1231
- `);return{...s!==void 0?{system:s}:{},messages:t}},jvr=r=>{let e=Object.entries(r);if(e.length!==0)return e.map(([t,n])=>{let o=n,s=o.inputSchema??o.parameters,i=s?po(s):{type:"object",properties:{}},a=Nx(n);return{name:t,...o.description?{description:o.description}:{},input_schema:i,...a?{cache_control:a}:{}}})},qGe=r=>{if(!(!r||r==="auto")){if(r==="none")return{type:"none"};if(r==="required")return{type:"any"};if(typeof r=="object"){let e=r;if(e.type==="tool"&&e.toolName)return{type:"tool",name:e.toolName}}}},Gvr=r=>{switch(r){case"max_tokens":return"length";case"tool_use":return"tool-calls";case"refusal":return"content-filter";default:return"stop"}},HGe=6e5,Xce=class extends fo{client;authMethod;subscriptionTier;enableBetaFeatures;oauthToken;lastResponseMetadata=null;usageInfo=null;refreshPromise;constructor(e,t,n,o){let s=!!(o?.apiKey&&!o?.oauthToken),i=s?null:(o?.oauthToken?{accessToken:o.oauthToken}:null)??n?.oauthToken??GGe(),a=s?"api_key":n?.authMethod??Bvr(i),c=n?.subscriptionTier??(a==="oauth"?$vr(i):"api"),l=e||UH(),u=l;!process.env.ANTHROPIC_BASE_URL&&c!=="api"&&!JN(l,c)&&(u=OH(c),g.warn("Model not available for subscription tier, using recommended model",{requestedModel:l,subscriptionTier:c,recommendedModel:u})),super(u,"anthropic",t),this.enableBetaFeatures=n?.enableBetaFeatures??!0,this.oauthToken=i,this.subscriptionTier=c,this.authMethod=a;let p=this.getAuthHeaders(),f;if(g.debug("[AnthropicProvider] Constructor - checking OAuth:",{authMethod:this.authMethod,hasOAuthToken:!!this.oauthToken,hasAccessToken:!!this.oauthToken?.accessToken}),this.authMethod==="oauth"&&this.oauthToken){g.debug("[AnthropicProvider] Creating OAuth fetch wrapper...");let h=this.oauthToken,y=NGe(()=>h.accessToken,this.enableBetaFeatures,!1,!0);f=new Yp({apiKey:"oauth-authenticated",fetch:y,timeout:HGe}),g.debug("[AnthropicProvider] Anthropic SDK client created with OAuth fetch wrapper"),g.debug("Anthropic Provider initialized with OAuth",{modelName:this.modelName,provider:this.providerName,authMethod:this.authMethod,subscriptionTier:this.subscriptionTier,enableBetaFeatures:this.enableBetaFeatures,hasRefreshToken:!!this.oauthToken.refreshToken,tokenExpiry:this.oauthToken.expiresAt?new Date(this.oauthToken.expiresAt).toISOString():"none"})}else{let h=o?.apiKey??n?.apiKey??jGe(),y=(()=>{let x=process.env.ANTHROPIC_BASE_URL;if(!x)return;let v=x.replace(/\/+$/,""),T=v.replace(/\/v\d+$/,"");return T!==v&&g.debug("[AnthropicProvider] Stripping the version suffix from ANTHROPIC_BASE_URL \u2014 the official Anthropic SDK appends /v1 to the base URL itself.",{baseURL:lr(x),rewrittenTo:lr(T)}),T})();f=new Yp({apiKey:h,defaultHeaders:p,...y&&{baseURL:y},fetch:vt(),timeout:HGe}),g.debug("Anthropic Provider initialized with API key",{modelName:this.modelName,provider:this.providerName,authMethod:this.authMethod,subscriptionTier:this.subscriptionTier,enableBetaFeatures:this.enableBetaFeatures})}this.client=f,this.usageInfo={messagesUsed:0,messagesRemaining:-1,tokensUsed:0,tokensRemaining:-1,inputTokensUsed:0,outputTokensUsed:0,lastRequestTimestamp:0,isRateLimited:!1,requestCount:0,messageQuotaPercent:0,tokenQuotaPercent:0},g.debug("Anthropic Provider v2 initialized",{modelName:this.modelName,provider:this.providerName,authMethod:this.authMethod,subscriptionTier:this.subscriptionTier,enableBetaFeatures:this.enableBetaFeatures,betaFeatures:this.enableBetaFeatures?Yce["anthropic-beta"]:"disabled"})}getAuthHeaders(){let e={},t=!!process.env.ANTHROPIC_BASE_URL;if(this.enableBetaFeatures)if(t){let n=process.env.ANTHROPIC_ENABLE_LONG_CONTEXT_BETA==="1"||process.env.ANTHROPIC_ENABLE_LONG_CONTEXT_BETA==="true",o=[...WT,"fine-grained-tool-streaming-2025-05-14","interleaved-thinking-2025-05-14","redact-thinking-2026-02-12"];n&&o.push("context-1m-2025-08-07"),e["anthropic-beta"]=o.join(",")}else e["anthropic-beta"]=Yce["anthropic-beta"];return this.subscriptionTier!=="api"&&(e["x-subscription-tier"]=this.subscriptionTier),e}validateModelAccess(e){if(process.env.ANTHROPIC_BASE_URL)return g.debug("[validateModelAccess] Bypassing tier check (ANTHROPIC_BASE_URL set \u2014 proxy enforces access)",{model:e}),!0;if(this.subscriptionTier==="api")return!0;let t=JN(e,this.subscriptionTier);return t||g.debug("[validateModelAccess] Model not available for tier",{model:e,tier:this.subscriptionTier}),t}getUsageInfo(){return this.usageInfo}areBetaFeaturesEnabled(){return this.enableBetaFeatures}getModelCapabilities(){return NH(this.modelName||this.getDefaultModel())}getSubscriptionTier(){return this.subscriptionTier}getAuthMethod(){return this.authMethod}async refreshAuthIfNeeded(){if(this.authMethod!=="oauth"||!this.oauthToken){g.debug("Token refresh not applicable for API key authentication");return}if(!this.oauthToken.expiresAt){g.debug("Token has no expiry information, assuming valid");return}let e=Date.now(),t=this.oauthToken.expiresAt<=e,n=this.oauthToken.expiresAt<=e+3e5;if(!t&&!n){g.debug("OAuth token is still valid",{expiresInMs:this.oauthToken.expiresAt-e});return}if(!this.oauthToken.refreshToken){if(t)throw new Ot("OAuth token expired and no refresh token available. Please re-authenticate.",this.providerName);g.warn("OAuth token expiring soon but no refresh token available",{expiresInMs:this.oauthToken.expiresAt-e});return}if(this.refreshPromise){await this.refreshPromise;return}g.info("Refreshing OAuth token",{isExpired:t,expiresInMs:this.oauthToken.expiresAt-e});let o=this.oauthToken,s=o.refreshToken;this.refreshPromise=(async()=>{let a=new AbortController,c=setTimeout(()=>a.abort(),3e4),l=await fetch(MGe,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","User-Agent":IC},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:s,client_id:PGe}),signal:a.signal});if(clearTimeout(c),!l.ok){let p=await l.text();throw new Ot(`Failed to refresh OAuth token: ${l.status} ${p}`,this.providerName)}let u=await l.json();o.accessToken=u.access_token,o.refreshToken=u.refresh_token||o.refreshToken,o.expiresAt=u.expires_in?Date.now()+u.expires_in*1e3:void 0,o.tokenType=u.token_type||"Bearer";let d=o;try{let p=Zr(Em(),".neurolink");co(p)||RI(p,{recursive:!0});let f=Zr(p,"anthropic-credentials.json"),h=`${f}.tmp`,x={...co(f)?JSON.parse(hu(f,"utf-8")):{},type:"oauth",oauth:d,updatedAt:Date.now()};kI(h,JSON.stringify(x,null,2),{mode:384}),sX(h,f),g.debug("Refreshed OAuth credentials persisted to disk")}catch(p){g.warn("Failed to persist refreshed OAuth token to disk",{error:p instanceof Error?p.message:String(p)})}g.info("OAuth token refreshed successfully",{hasNewRefreshToken:!!u.refresh_token,expiresIn:u.expires_in})})();try{await this.refreshPromise}catch(i){throw i instanceof Ot?i:new Ot(`Failed to refresh OAuth token: ${i instanceof Error?i.message:String(i)}`,this.providerName)}finally{this.refreshPromise=void 0}}getLastResponseMetadata(){return this.lastResponseMetadata}updateResponseMetadata(e,t,n){this.lastResponseMetadata={rateLimit:zvr(e),requestId:t||(e instanceof Headers?e.get("x-request-id")||void 0:e["x-request-id"]),serverTiming:e instanceof Headers?e.get("server-timing")||void 0:e["server-timing"]};let o=this.lastResponseMetadata.rateLimit;this.usageInfo&&(this.usageInfo.requestCount++,this.usageInfo.messagesUsed++,this.usageInfo.lastRequestTimestamp=Date.now(),n&&(n.inputTokens!==void 0&&(this.usageInfo.inputTokensUsed+=n.inputTokens,this.usageInfo.tokensUsed+=n.inputTokens),n.outputTokens!==void 0&&(this.usageInfo.outputTokensUsed+=n.outputTokens,this.usageInfo.tokensUsed+=n.outputTokens)),o?.requestsRemaining!==void 0&&(this.usageInfo.messagesRemaining=o.requestsRemaining),o?.tokensRemaining!==void 0&&(this.usageInfo.tokensRemaining=o.tokensRemaining),o?.requestsLimit&&o.requestsLimit>0&&(this.usageInfo.messageQuotaPercent=Math.round((o.requestsLimit-(o.requestsRemaining??0))/o.requestsLimit*100)),o?.tokensLimit&&o.tokensLimit>0&&(this.usageInfo.tokenQuotaPercent=Math.round((o.tokensLimit-(o.tokensRemaining??0))/o.tokensLimit*100)),o?.retryAfter!==void 0?(this.usageInfo.isRateLimited=!0,this.usageInfo.rateLimitExpiresAt=Date.now()+o.retryAfter*1e3):(this.usageInfo.isRateLimited=!1,this.usageInfo.rateLimitExpiresAt=void 0)),o?.requestsRemaining!==void 0&&o.requestsRemaining<=5&&g.warn("Approaching Anthropic request rate limit",{remaining:o.requestsRemaining,limit:o.requestsLimit,reset:o.requestsReset}),o?.tokensRemaining!==void 0&&o.tokensLimit&&o.tokensRemaining<o.tokensLimit*.1&&g.warn("Approaching Anthropic token rate limit",{remaining:o.tokensRemaining,limit:o.tokensLimit,reset:o.tokensReset})}getProviderName(){return"anthropic"}getDefaultModel(){return UH()}getAISDKModel(){let e=this.client,t=this.providerName,n=this.modelName||UH(),o=i=>this.getTimeout(i??{}),s=()=>this.refreshAuthIfNeeded();return{specificationVersion:"v3",provider:t,modelId:n,supportedUrls:{},doGenerate:async i=>{await s();let{system:a,messages:c}=VGe(i.prompt),l=(i.tools??[]).filter(A=>A.type==="function").map(A=>{let I=Nx(A);return{name:A.name,...A.description?{description:A.description}:{},input_schema:A.inputSchema??{type:"object",properties:{}},...I?{cache_control:I}:{}}});l&&l.length===0&&(l=void 0);let u=i.toolChoice?qGe(i.toolChoice.type==="tool"?{type:"tool",toolName:i.toolChoice.toolName}:i.toolChoice.type):void 0,d;if(i.responseFormat?.type==="json"){d=i.responseFormat.name??"json";let A=i.responseFormat.schema??{type:"object"};l=[{name:d,description:i.responseFormat.description??"Respond by calling this tool with the answer as its input.",input_schema:A}],u={type:"tool",name:d}}let p=i.providerOptions?.anthropic?.thinking,f=qce({system:a,tools:l,messages:c}),h=Hce(c,FH-f),y={model:n,messages:h,max_tokens:C0(n,i.maxOutputTokens),...a?{system:a}:{},...i.temperature!==void 0&&i.temperature!==null&&!bre(n)?{temperature:i.temperature}:{},...i.topP!==void 0&&i.topP!==null?{top_p:i.topP}:{},...i.stopSequences&&i.stopSequences.length>0?{stop_sequences:i.stopSequences}:{},...l?{tools:l}:{},...u?{tool_choice:u}:{},...p?{thinking:p}:{}},x=i.timeout,v=x!=null,T=y.max_tokens>8192&&!v?Math.max(o(i),3e5):o(i),S=pi(T,t,"generate"),E;try{E=await e.messages.create(y,{signal:og(i.abortSignal,S?.controller.signal)})}finally{S?.cleanup()}let k=[];for(let A of E.content)A.type==="thinking"?k.push({type:"reasoning",text:A.thinking}):A.type==="text"?d||k.push({type:"text",text:A.text}):A.type==="tool_use"&&(d&&A.name===d?k.push({type:"text",text:v4(A.input)}):k.push({type:"tool-call",toolCallId:A.id,toolName:A.name,input:v4(A.input)}));let R=E.usage.cache_read_input_tokens??0,P=E.usage.cache_creation_input_tokens??0;return{content:k,finishReason:{unified:Gvr(E.stop_reason),raw:E.stop_reason??"stop"},usage:{inputTokens:{total:E.usage.input_tokens+R+P,noCache:E.usage.input_tokens,cacheRead:R,cacheWrite:P},outputTokens:{total:E.usage.output_tokens,text:E.usage.output_tokens,reasoning:void 0}},warnings:[],request:{body:y},response:{id:E.id,modelId:E.model,headers:{},body:E}}},doStream:()=>{throw new Error(`${t}: doStream is not implemented on the delegating model \u2014 the streaming path uses executeStream directly.`)}}}formatProviderError(e){if(e instanceof rr)return new zt(`Request timed out after ${e.timeout}ms`,this.providerName);let t=e,n=typeof t?.message=="string"?t.message:"Unknown error";return n.includes("API_KEY_INVALID")||n.includes("Invalid API key")?new Ot("Invalid Anthropic API key. Please check your ANTHROPIC_API_KEY environment variable.",this.providerName):n.includes("rate limit")||n.includes("too_many_requests")||n.includes("429")?new tr("Anthropic rate limit exceeded. Please try again later.",this.providerName):n.includes("ECONNRESET")||n.includes("ENOTFOUND")||n.includes("ECONNREFUSED")||n.includes("network")||n.includes("connection")?new zt(`Connection error: ${n}`,this.providerName):n.includes("500")||n.includes("502")||n.includes("503")||n.includes("504")||n.includes("server error")?new qe(`Server error: ${n}`,this.providerName):new qe(`Anthropic error: ${n}`,this.providerName)}async generate(e,t){return await this.refreshAuthIfNeeded(),super.generate(e,t)}async executeStream(e,t){await this.refreshAuthIfNeeded(),this.validateStreamOptions(e);let n=this.getTimeout(e),o=pi(n,this.providerName,"stream"),s=new AbortController,i=bz([e.abortSignal,o?.controller.signal,s.signal]).signal,a,c,l,u;try{u=!e.disableTools&&this.supportsTools(),a=u?e.tools||await this.getAllTools():{},c=u?jvr(a):void 0;let L=await this.buildMessagesForStream(e);l=VGe(L)}catch(L){throw o?.cleanup(),this.handleProviderError(L)}let d=this.modelName||UH(),p=u&&c&&c.length>0?qGe(S4(e,a,u)):void 0,f=e.thinkingConfig?.enabled&&e.thinkingConfig.budgetTokens?{type:"enabled",budget_tokens:e.thinkingConfig.budgetTokens}:void 0,h=Uvr.startSpan("neurolink.provider.streamText",{kind:kr.CLIENT,attributes:{"gen_ai.system":"anthropic","gen_ai.request.model":d}}),y=e.maxSteps||Ws,x=this.neurolink?.getEventEmitter(),{pushChunk:v,nextChunk:T}=T4(),{usagePromise:S,finishPromise:E,resolveUsage:k,resolveFinish:R}=b4();S.then(L=>{h.setAttribute("gen_ai.usage.input_tokens",L.promptTokens||0),h.setAttribute("gen_ai.usage.output_tokens",L.completionTokens||0),L.cacheReadTokens&&h.setAttribute("gen_ai.usage.cached_input_tokens",L.cacheReadTokens);let $=wo(this.providerName,this.modelName,{input:L.promptTokens||0,output:L.completionTokens||0,total:L.totalTokens||0,...L.cacheReadTokens?{cacheReadTokens:L.cacheReadTokens}:{},...L.cacheCreationTokens?{cacheCreationTokens:L.cacheCreationTokens}:{}});$&&$>0&&h.setAttribute("neurolink.cost",$)}).catch(()=>{}),E.then(L=>{h.setAttribute("gen_ai.response.finish_reason",L||"unknown"),h.end()}).catch(()=>{h.end()});let P,A=this.client,I=[],D=(async()=>{let L=l.messages.slice(),$=0,U=0,V=0,B=0,K=null;for(let Z=0;Z<y;Z++){let q=qce({system:l.system,tools:c,messages:L}),ce=Hce(L,FH-q),ye={model:d,messages:ce,max_tokens:C0(d,e.maxTokens),stream:!0,...l.system?{system:l.system}:{},...e.temperature!==void 0&&e.temperature!==null&&!bre(d)?{temperature:e.temperature}:{},...c&&c.length>0?{tools:c}:{},...p?{tool_choice:p}:{},...f?{thinking:f}:{}},J=await A.messages.create(ye,{signal:i??void 0}),ve=new Map,fe=new Map,Ue=new Map,ge=new Map,xe=null;for await(let oe of J)if(oe.type==="message_start")$+=oe.message.usage.input_tokens??0,U+=oe.message.usage.output_tokens??0,V+=oe.message.usage.cache_read_input_tokens??0,B+=oe.message.usage.cache_creation_input_tokens??0;else if(oe.type==="content_block_start")ve.set(oe.index,oe.content_block.type),oe.content_block.type==="tool_use"&&ge.set(oe.index,{id:oe.content_block.id,name:oe.content_block.name,inputJson:""});else if(oe.type==="content_block_delta"){let Y=oe.delta;if(Y.type==="text_delta")fe.set(oe.index,(fe.get(oe.index)??"")+Y.text),v({content:Y.text});else if(Y.type==="thinking_delta"){let X=Ue.get(oe.index)??{text:"",signature:""};X.text+=Y.thinking,Ue.set(oe.index,X),v({content:"",reasoning:Y.thinking})}else if(Y.type==="signature_delta"){let X=Ue.get(oe.index)??{text:"",signature:""};X.signature+=Y.signature,Ue.set(oe.index,X)}else if(Y.type==="input_json_delta"){let X=ge.get(oe.index);X&&(X.inputJson+=Y.partial_json)}}else oe.type==="message_delta"&&(xe=oe.delta.stop_reason??xe,U+=oe.usage?.output_tokens??0);if(K=xe,xe!=="tool_use"||ge.size===0)break;let ne=[],he=[...ve.keys()].sort((oe,Y)=>oe-Y);for(let oe of he){let Y=ve.get(oe);if(Y==="thinking"){let X=Ue.get(oe);X&&X.text.length>0&&ne.push({type:"thinking",thinking:X.text,signature:X.signature})}else if(Y==="text"){let X=fe.get(oe);X&&X.length>0&&ne.push({type:"text",text:X})}else if(Y==="tool_use"){let X=ge.get(oe);if(X){let ze;try{ze=X.inputJson?JSON.parse(X.inputJson):{}}catch{ze={}}ne.push({type:"tool_use",id:X.id,name:X.name,input:ze})}}}L.push({role:"assistant",content:ne});let Q=[],ee=[],Ee=[];for(let oe of ge.values()){let Y;try{Y=oe.inputJson?JSON.parse(oe.inputJson):{}}catch{Y={}}ee.push({type:"tool-call",toolCallId:oe.id,toolName:oe.name,args:Y}),I.push(oe.name);let X=a[oe.name];try{if(!X?.execute)throw new Error(`Tool not found: ${oe.name}`);let ze=await X.execute(Y,{toolCallId:oe.id,messages:[]});Ee.push({type:"tool-result",toolCallId:oe.id,toolName:oe.name,result:ze}),Q.push({type:"tool_result",tool_use_id:oe.id,content:WGe(ze)})}catch(ze){let _t=ze instanceof Error?ze.message:String(ze);Ee.push({type:"tool-result",toolCallId:oe.id,toolName:oe.name,error:_t}),Q.push({type:"tool_result",tool_use_id:oe.id,content:`Error: ${_t}`,is_error:!0})}}Ay(x,Ee.map(oe=>({toolName:oe.toolName,result:oe.result,error:oe.error}))),this.handleToolExecutionStorage(ee,Ee,e,new Date).catch(oe=>{g.warn("[AnthropicProvider] Failed to store tool executions",{provider:this.providerName,error:oe instanceof Error?oe.message:String(oe)})}),L.push({role:"user",content:Q})}k({promptTokens:$,completionTokens:U,totalTokens:$+V+B+U,...V>0?{cacheReadTokens:V}:{},...B>0?{cacheCreationTokens:B}:{}}),R(K??"stop")})().catch(L=>{throw P=L,g.error("Anthropic: Stream error",{error:L instanceof Error?L.message:String(L)}),R("error"),this.formatProviderError(L)}).finally(()=>{o?.cleanup(),v({done:!0})});D.catch(()=>{});let z=this.providerName;return{stream:async function*(){let L=0;try{for(;;){let $=await T();if("done"in $)break;"content"in $&&typeof $.content=="string"&&$.content.length>0&&L++,yield $}if(await D,L===0&&I.length===0){g.warn(`${z}: Stream produced no output \u2014 emitting enriched sentinel`);let $=new Ja({message:"Stream produced no output"}),U=await Zm($,void 0,P);Qm(U),yield U}}catch($){let U=await Zm($,void 0,P);if(Qm(U),yield U,!Ja.isInstance($))throw $}finally{s.signal.aborted||s.abort()}}(),provider:this.providerName,model:this.modelName,toolCalls:[],toolResults:[]}}async isAvailable(){try{return GGe()||jGe(),!0}catch{return!1}}getModel(){return this.getAISDKModel()}}});var YGe={};te(YGe,{Agent:()=>kbr,BedrockClient:()=>qvr,BedrockRuntimeClient:()=>Zce,Blob:()=>Cbr,Client:()=>Abr,ConverseCommand:()=>Qce,ConverseStreamCommand:()=>$H,Cron:()=>cbr,Dispatcher:()=>Ibr,File:()=>_br,FlowProducer:()=>abr,FormData:()=>Ebr,GoogleAuth:()=>Yvr,HTTPException:()=>gbr,Headers:()=>wbr,Hippocampus:()=>ebr,HippocampusConfig:()=>tbr,Hono:()=>mbr,ImageFormat:()=>OC,InvokeEndpointCommand:()=>Kvr,InvokeEndpointWithResponseStreamCommand:()=>Jvr,Job:()=>sbr,ListFoundationModelsCommand:()=>Hvr,MockAgent:()=>Obr,Pool:()=>Rbr,Queue:()=>nbr,QueueScheduler:()=>ibr,Request:()=>Tbr,Response:()=>Sbr,SageMakerRuntimeClient:()=>Wvr,TextToSpeechClient:()=>Zvr,VertexAI:()=>Xvr,Webhook:()=>Qvr,Worker:()=>obr,convertToHtml:()=>pbr,cors:()=>fbr,createClient:()=>rbr,default:()=>Vvr,extractRawText:()=>dbr,fetch:()=>bbr,getGlobalDispatcher:()=>Mbr,interceptors:()=>Nbr,logger:()=>hbr,parseBuffer:()=>lbr,request:()=>Dbr,secureHeaders:()=>ybr,selectCover:()=>ubr,setGlobalDispatcher:()=>Pbr,streamSSE:()=>xbr,timeout:()=>vbr});var MC,Ki,Vvr,qvr,Hvr,Zce,Qce,$H,OC,Wvr,Kvr,Jvr,Yvr,Xvr,Zvr,Qvr,ebr,tbr,rbr,nbr,obr,sbr,ibr,abr,cbr,lbr,ubr,dbr,pbr,mbr,fbr,gbr,hbr,ybr,xbr,vbr,bbr,Tbr,Sbr,wbr,Ebr,_br,Cbr,kbr,Rbr,Abr,Ibr,Pbr,Mbr,Obr,Nbr,Dbr,ele=C(()=>{MC={get(r,e){return e==="__esModule"?!0:e==="default"?new Proxy({},{get:MC.get}):new Proxy(function(...t){return new Proxy({},{get:MC.get})},{get:MC.get,apply(t,n,o){return new Proxy({},{get:MC.get})},construct(t,n){return new Proxy({},{get:MC.get})}})}},Ki=new Proxy({},MC),Vvr=Ki,{BedrockClient:qvr,ListFoundationModelsCommand:Hvr,BedrockRuntimeClient:Zce,ConverseCommand:Qce,ConverseStreamCommand:$H,ImageFormat:OC}=Ki,{SageMakerRuntimeClient:Wvr,InvokeEndpointCommand:Kvr,InvokeEndpointWithResponseStreamCommand:Jvr}=Ki,{GoogleAuth:Yvr,VertexAI:Xvr,TextToSpeechClient:Zvr}=Ki,{Webhook:Qvr}=Ki,{Hippocampus:ebr,HippocampusConfig:tbr}=Ki,{createClient:rbr}=Ki,{Queue:nbr,Worker:obr,Job:sbr,QueueScheduler:ibr,FlowProducer:abr}=Ki,{Cron:cbr}=Ki,{parseBuffer:lbr,selectCover:ubr}=Ki,{extractRawText:dbr,convertToHtml:pbr}=Ki,{Hono:mbr}=Ki,{cors:fbr,HTTPException:gbr,logger:hbr,secureHeaders:ybr,streamSSE:xbr,timeout:vbr}=Ki,bbr=globalThis.fetch,Tbr=globalThis.Request,Sbr=globalThis.Response,wbr=globalThis.Headers,Ebr=globalThis.FormData,_br=globalThis.File,Cbr=globalThis.Blob,kbr=Ki.Agent,Rbr=Ki.Pool,Abr=Ki.Client,Ibr=Ki.Dispatcher,Pbr=()=>{},Mbr=()=>Ki,Obr=Ki.MockAgent,Nbr={redirect:()=>r=>r,retry:()=>r=>r},Dbr=async(r,e)=>{let t=await globalThis.fetch(r,e);return{statusCode:t.status,headers:Object.fromEntries(t.headers.entries()),body:{text:()=>t.text(),json:()=>t.json(),arrayBuffer:()=>t.arrayBuffer()}}}});function tle(r,e,t){return{input:{text:r.input?.text||"",images:r.input?.images,content:r.input?.content,files:r.input?.files,csvFiles:r.input?.csvFiles,pdfFiles:r.input?.pdfFiles},csvOptions:r.csvOptions,pdfOptions:r.pdfOptions,systemPrompt:r.systemPrompt,conversationHistory:r.conversationMessages,provider:e,model:t,temperature:r.temperature,maxTokens:r.maxTokens,enableAnalytics:r.enableAnalytics,enableEvaluation:r.enableEvaluation,context:r.context,fileRegistry:r.fileRegistry}}var XGe=C(()=>{"use strict"});var ZGe={};te(ZGe,{Agent:()=>wTr,BedrockClient:()=>Fbr,BedrockRuntimeClient:()=>$br,Blob:()=>STr,Client:()=>_Tr,ConverseCommand:()=>Bbr,ConverseStreamCommand:()=>zbr,Cron:()=>oTr,Dispatcher:()=>CTr,File:()=>TTr,FlowProducer:()=>nTr,FormData:()=>bTr,GoogleAuth:()=>Hbr,HTTPException:()=>dTr,Headers:()=>vTr,Hippocampus:()=>Ybr,HippocampusConfig:()=>Xbr,Hono:()=>lTr,ImageFormat:()=>jbr,InvokeEndpointCommand:()=>Vbr,InvokeEndpointWithResponseStreamCommand:()=>qbr,Job:()=>tTr,ListFoundationModelsCommand:()=>Ubr,MockAgent:()=>ATr,Pool:()=>ETr,Queue:()=>Qbr,QueueScheduler:()=>rTr,Request:()=>yTr,Response:()=>xTr,SageMakerRuntimeClient:()=>Gbr,TextToSpeechClient:()=>Kbr,VertexAI:()=>Wbr,Webhook:()=>Jbr,Worker:()=>eTr,convertToHtml:()=>cTr,cors:()=>uTr,createClient:()=>Zbr,default:()=>Lbr,extractRawText:()=>aTr,fetch:()=>hTr,getGlobalDispatcher:()=>RTr,interceptors:()=>ITr,logger:()=>pTr,parseBuffer:()=>sTr,request:()=>PTr,secureHeaders:()=>mTr,selectCover:()=>iTr,setGlobalDispatcher:()=>kTr,streamSSE:()=>fTr,timeout:()=>gTr});var NC,Ji,Lbr,Fbr,Ubr,$br,Bbr,zbr,jbr,Gbr,Vbr,qbr,Hbr,Wbr,Kbr,Jbr,Ybr,Xbr,Zbr,Qbr,eTr,tTr,rTr,nTr,oTr,sTr,iTr,aTr,cTr,lTr,uTr,dTr,pTr,mTr,fTr,gTr,hTr,yTr,xTr,vTr,bTr,TTr,STr,wTr,ETr,_Tr,CTr,kTr,RTr,ATr,ITr,PTr,QGe=C(()=>{NC={get(r,e){return e==="__esModule"?!0:e==="default"?new Proxy({},{get:NC.get}):new Proxy(function(...t){return new Proxy({},{get:NC.get})},{get:NC.get,apply(t,n,o){return new Proxy({},{get:NC.get})},construct(t,n){return new Proxy({},{get:NC.get})}})}},Ji=new Proxy({},NC),Lbr=Ji,{BedrockClient:Fbr,ListFoundationModelsCommand:Ubr,BedrockRuntimeClient:$br,ConverseCommand:Bbr,ConverseStreamCommand:zbr,ImageFormat:jbr}=Ji,{SageMakerRuntimeClient:Gbr,InvokeEndpointCommand:Vbr,InvokeEndpointWithResponseStreamCommand:qbr}=Ji,{GoogleAuth:Hbr,VertexAI:Wbr,TextToSpeechClient:Kbr}=Ji,{Webhook:Jbr}=Ji,{Hippocampus:Ybr,HippocampusConfig:Xbr}=Ji,{createClient:Zbr}=Ji,{Queue:Qbr,Worker:eTr,Job:tTr,QueueScheduler:rTr,FlowProducer:nTr}=Ji,{Cron:oTr}=Ji,{parseBuffer:sTr,selectCover:iTr}=Ji,{extractRawText:aTr,convertToHtml:cTr}=Ji,{Hono:lTr}=Ji,{cors:uTr,HTTPException:dTr,logger:pTr,secureHeaders:mTr,streamSSE:fTr,timeout:gTr}=Ji,hTr=globalThis.fetch,yTr=globalThis.Request,xTr=globalThis.Response,vTr=globalThis.Headers,bTr=globalThis.FormData,TTr=globalThis.File,STr=globalThis.Blob,wTr=Ji.Agent,ETr=Ji.Pool,_Tr=Ji.Client,CTr=Ji.Dispatcher,kTr=()=>{},RTr=()=>Ji,ATr=Ji.MockAgent,ITr={redirect:()=>r=>r,retry:()=>r=>r},PTr=async(r,e)=>{let t=await globalThis.fetch(r,e);return{statusCode:t.status,headers:Object.fromEntries(t.headers.entries()),body:{text:()=>t.text(),json:()=>t.json(),arrayBuffer:()=>t.arrayBuffer()}}}});var tVe={};te(tVe,{AmazonBedrockProvider:()=>nle});async function eVe(){return await Promise.resolve().then(()=>(QGe(),ZGe))}var rle,nle,rVe=C(()=>{"use strict";ele();dn();DO();zu();ki();Dt();kt();iM();H();Cd();PO();XGe();Iu();Dr();Al();rle=ke.provider,nle=class r extends fo{bedrockClient;conversationHistory=[];region;static extractRegionFromArn(e){return e?e.match(/^arn:aws[a-z0-9-]*:bedrock:([^:]+):/)?.[1]??null:null}constructor(e,t,n,o){super(e,"bedrock",t);let s=e||process.env.BEDROCK_MODEL||this.modelName,i=r.extractRegionFromArn(s);this.region=o?.region||n||i||process.env.AWS_REGION||"us-east-1",g.debug("[AmazonBedrockProvider] Starting constructor with extensive logging for debugging"),g.debug(`[AmazonBedrockProvider] Environment check: AWS_REGION=${process.env.AWS_REGION||"undefined"}, AWS_ACCESS_KEY_ID=${process.env.AWS_ACCESS_KEY_ID?"SET":"undefined"}, AWS_SECRET_ACCESS_KEY=${process.env.AWS_SECRET_ACCESS_KEY?"SET":"undefined"}`);try{g.debug("[AmazonBedrockProvider] Creating BedrockRuntimeClient with clean configuration"),this.bedrockClient=new Zce({region:this.region,...o?.accessKeyId&&o?.secretAccessKey?{credentials:{accessKeyId:o.accessKeyId,secretAccessKey:o.secretAccessKey,...o.sessionToken?{sessionToken:o.sessionToken}:{}}}:{}}),g.debug(`[AmazonBedrockProvider] Successfully created BedrockRuntimeClient with model: ${this.modelName}, region: ${this.region}`)}catch(a){throw g.error("[AmazonBedrockProvider] CRITICAL: Failed to initialize BedrockRuntimeClient:",a),a}}async performInitialHealthCheck(){let{BedrockClient:e,ListFoundationModelsCommand:t}=await eVe(),n=new e({region:this.region});try{g.debug("[AmazonBedrockProvider] Starting initial health check to validate credentials and connectivity");let o=new t({}),s=Date.now();await n.send(o);let i=Date.now()-s;g.debug(`[AmazonBedrockProvider] Health check PASSED - credentials valid, connectivity good, responseTime: ${i}ms`)}catch(o){let s=o instanceof Error?o.message:String(o);g.error("[AmazonBedrockProvider] Health check FAILED - this will cause production failures:",{error:s,errorType:o instanceof Error?o.constructor.name:"Unknown",region:process.env.AWS_REGION||"us-east-1",hasAccessKey:!!process.env.AWS_ACCESS_KEY_ID,hasSecretKey:!!process.env.AWS_SECRET_ACCESS_KEY})}finally{try{n.destroy()}catch{}}}getAISDKModel(){throw new Error("AmazonBedrockProvider does not use AI SDK models")}getProviderName(){return"bedrock"}getDefaultModel(){return process.env.BEDROCK_MODEL||"anthropic.claude-sonnet-4-6"}getDefaultEmbeddingModel(){return process.env.BEDROCK_EMBEDDING_MODEL||process.env.AWS_EMBEDDING_MODEL||"amazon.titan-embed-text-v2:0"}async generate(e){g.debug("[AmazonBedrockProvider] generate() called with conversation management");let t=Date.now(),n=typeof e=="string"?{prompt:e}:e;this.conversationHistory=[];let o=n.input;if(!!(o?.images?.length||o?.content?.length||o?.files?.length||o?.csvFiles?.length||o?.pdfFiles?.length)){g.debug("[AmazonBedrockProvider] Detected multimodal input in generate(), using multimodal message builder",{hasImages:!!o?.images?.length,imageCount:o?.images?.length||0,hasContent:!!o?.content?.length,contentCount:o?.content?.length||0,hasFiles:!!o?.files?.length,fileCount:o?.files?.length||0,hasCSVFiles:!!o?.csvFiles?.length,csvFileCount:o?.csvFiles?.length||0,hasPDFFiles:!!o?.pdfFiles?.length,pdfFileCount:o?.pdfFiles?.length||0});let d=tle(n,this.providerName,this.modelName),p=await y0(d,this.providerName,this.modelName);this.conversationHistory=this.convertToBedrockMessages(p)}else{g.debug("[AmazonBedrockProvider] Text-only input in generate(), using simple message builder");let u={role:"user",content:[{text:n.prompt}]};this.conversationHistory.push(u)}g.debug(`[AmazonBedrockProvider] Starting conversation with ${this.conversationHistory.length} message(s)`);let i,a,c;try{({text:i,usage:a,finishReason:c}=await this.conversationLoop(n))}catch(u){let d=this.neurolink?.getEventEmitter();throw d&&d.emit("generation:end",{provider:this.providerName,responseTime:Date.now()-t,timestamp:Date.now(),result:{content:"",usage:{input:0,output:0,total:0},model:this.modelName||this.getDefaultModel(),provider:this.providerName,finishReason:"error"},success:!1,error:u instanceof Error?u.message:String(u)}),u}let l=this.neurolink?.getEventEmitter();return l&&l.emit("generation:end",{provider:this.providerName,responseTime:Date.now()-t,timestamp:Date.now(),result:{content:i,usage:a,model:this.modelName||this.getDefaultModel(),provider:this.providerName,finishReason:c},success:!0}),{content:i,usage:a,model:this.modelName||this.getDefaultModel(),provider:this.getProviderName()}}async conversationLoop(e){let n=0,o=0,s=0,i;for(;n<10;){n++,g.debug(`[AmazonBedrockProvider] Conversation iteration ${n}`);try{g.debug("[AmazonBedrockProvider] About to call Bedrock API");let a=await this.callBedrock(e);g.debug("[AmazonBedrockProvider] Received Bedrock response",JSON.stringify(a,null,2)),o+=a.usage?.inputTokens??0,s+=a.usage?.outputTokens??0,a.stopReason&&(i=a.stopReason);let c=await this.handleBedrockResponse(a);if(g.debug("[AmazonBedrockProvider] Handle response result:",c),c.shouldContinue)g.debug("[AmazonBedrockProvider] Continuing conversation loop...");else return g.debug("[AmazonBedrockProvider] Conversation completed with final text"),g.debug(`[AmazonBedrockProvider] Returning final text: "${c.text}"`),{text:c.text||"",usage:{input:o,output:s,total:o+s},finishReason:i}}catch(a){throw g.error("[AmazonBedrockProvider] Error in conversation loop:",a),this.handleProviderError(a)}}throw new Error("Conversation loop exceeded maximum iterations")}async callBedrock(e){let t=Date.now();return rle.startActiveSpan("bedrock.generate",{kind:kr.CLIENT,attributes:{"gen_ai.system":"aws.bedrock","gen_ai.request.model":this.modelName||this.getDefaultModel(),"gen_ai.operation.name":"chat"}},async n=>{g.info(`[AmazonBedrockProvider] Starting Bedrock API call at ${new Date().toISOString()}`);try{let o="unknown";try{o=typeof this.bedrockClient.config.region=="function"?await this.bedrockClient.config.region():this.bedrockClient.config.region??"unknown"}catch{}g.info(`[AmazonBedrockProvider] Client region: ${o}`),g.info(`[AmazonBedrockProvider] Model: ${this.modelName||this.getDefaultModel()}`),g.info(`[AmazonBedrockProvider] Conversation history length: ${this.conversationHistory.length}`);let s=await this.getAllTools(),i=this.convertAISDKToolsToToolDefinitions(s),a=this.formatToolsForBedrock(i),c={modelId:this.modelName||this.getDefaultModel(),messages:this.convertToAWSMessages(this.conversationHistory),system:[{text:e.systemPrompt||"You are a helpful assistant with access to external tools. Use tools when necessary to provide accurate information."}],inferenceConfig:{maxTokens:e.maxTokens,temperature:e.temperature||.7}};a&&(c.toolConfig=a,g.info(`[AmazonBedrockProvider] Tools configured: ${a.tools?.length||0}`)),g.info("[AmazonBedrockProvider] Command input summary:"),g.info(` - Model ID: ${c.modelId}`),g.info(` - Messages count: ${c.messages?.length||0}`),g.info(` - System prompts: ${c.system?.length||0}`),g.info(` - Max tokens: ${c.inferenceConfig?.maxTokens}`),g.info(` - Temperature: ${c.inferenceConfig?.temperature}`),g.debug(`[AmazonBedrockProvider] Calling Bedrock with ${this.conversationHistory.length} messages and ${a?.tools?.length||0} tools`);let l=new Qce(c);g.debug("[Observability] Bedrock API request",{model:c.modelId,region:o,messageCount:c.messages?.length||0,toolCount:c.toolConfig?.tools?.length||0,maxTokens:c.inferenceConfig?.maxTokens});let u=Date.now(),d=await Be(this.bedrockClient.send(l),12e4,new Error("Bedrock API call timed out")),p=Date.now()-u;g.debug("[Observability] Bedrock API response",{model:c.modelId,durationMs:p,hasContent:!!d.output?.message?.content?.length,stopReason:d.stopReason,usage:d.usage?{inputTokens:d.usage.inputTokens,outputTokens:d.usage.outputTokens,totalTokens:(d.usage.inputTokens||0)+(d.usage.outputTokens||0)}:void 0}),g.info("[AmazonBedrockProvider] Bedrock API call successful"),g.info(`[AmazonBedrockProvider] API call duration: ${p}ms`);let f=Date.now()-t;g.info(`[AmazonBedrockProvider] Total callBedrock duration: ${f}ms`),n.setAttribute("gen_ai.response.stop_reason",d.stopReason??""),n.setAttribute("gen_ai.usage.input_tokens",d.usage?.inputTokens??0),n.setAttribute("gen_ai.usage.output_tokens",d.usage?.outputTokens??0);let h=wo(this.providerName,this.modelName,{input:d.usage?.inputTokens??0,output:d.usage?.outputTokens??0,total:(d.usage?.inputTokens??0)+(d.usage?.outputTokens??0)});return h&&h>0&&n.setAttribute("neurolink.cost",h),n.setStatus({code:Me.OK}),n.end(),d}catch(o){let s=Date.now()-t,i=o&&typeof o=="object"?o:null,a=i?.$metadata&&typeof i.$metadata=="object"?i.$metadata:null;throw g.debug("[Observability] Bedrock API request failed",{model:this.modelName||this.getDefaultModel(),durationMs:s,error:o instanceof Error?o.message:String(o),errorName:o instanceof Error?o.name:void 0,httpStatus:a?.httpStatusCode,awsRequestId:a?.requestId,awsErrorCode:i?.Code}),g.error(`[AmazonBedrockProvider] Bedrock API call failed after ${s}ms`),o instanceof Error&&g.error(`[AmazonBedrockProvider] Error: ${o.name} - ${o.message}`),a&&g.error("[AmazonBedrockProvider] AWS SDK metadata",{httpStatus:a.httpStatusCode,requestId:a.requestId,attempts:a.attempts,totalRetryDelay:a.totalRetryDelay}),n.setStatus({code:Me.ERROR,message:o instanceof Error?o.message:String(o)}),n.recordException(o instanceof Error?o:new Error(String(o))),n.end(),o}})}async handleBedrockResponse(e){if(g.debug(`[AmazonBedrockProvider] Received response with stopReason: ${e.stopReason}`),!e.output||!e.output.message)throw new Error("Invalid response structure from Bedrock API");let t=e.output.message,n=e.stopReason,o={role:"assistant",content:(t.content||[]).map(s=>{let i={};return"text"in s&&s.text&&(i.text=s.text),"toolUse"in s&&s.toolUse&&(i.toolUse={toolUseId:s.toolUse.toolUseId||"",name:s.toolUse.name||"",input:s.toolUse.input||{}}),"toolResult"in s&&s.toolResult&&(i.toolResult={toolUseId:s.toolResult.toolUseId||"",content:(s.toolResult.content||[]).map(a=>({text:typeof a=="object"&&"text"in a&&a.text||""})),status:s.toolResult.status||"unknown"}),i})};if(this.conversationHistory.push(o),n==="end_turn"||n==="stop_sequence")return{shouldContinue:!1,text:o.content.filter(i=>i.text).map(i=>i.text).join(" ")};if(n==="tool_use"){g.debug("[AmazonBedrockProvider] Tool use detected - executing tools immediately");let s=[];for(let i of o.content)if(i.toolUse){g.debug(`[AmazonBedrockProvider] Executing tool: ${i.toolUse.name}`);try{g.debug("[AmazonBedrockProvider] Debug toolUse.input:",JSON.stringify(i.toolUse.input,null,2));let a=await this.executeSingleTool(i.toolUse.name,i.toolUse.input||{},i.toolUse.toolUseId);g.debug(`[AmazonBedrockProvider] Tool execution successful: ${i.toolUse.name}`),s.push({toolResult:{toolUseId:i.toolUse.toolUseId,content:[{text:String(a)}],status:"success"}})}catch(a){g.error(`[AmazonBedrockProvider] Tool execution failed: ${i.toolUse.name}`,a);let c=a instanceof Error?a.message:String(a);s.push({toolResult:{toolUseId:i.toolUse.toolUseId,content:[{text:`Error executing tool ${i.toolUse.name}: ${c}`}],status:"error"}})}}if(s.length>0){let i={role:"user",content:s};this.conversationHistory.push(i),g.debug(`[AmazonBedrockProvider] Added ${s.length} tool results to conversation`)}return{shouldContinue:!0}}else return n==="max_tokens"?{shouldContinue:!1,text:o.content.filter(i=>i.text).map(i=>i.text).join(" ")}:(g.warn(`[AmazonBedrockProvider] Unrecognized stop reason "${n}", ending conversation.`),{shouldContinue:!1,text:""})}convertToAWSMessages(e){return e.map(t=>({role:t.role,content:t.content.map(n=>n.text?{text:n.text}:n.image?{image:n.image}:n.document?{document:n.document}:n.toolUse?{toolUse:{toolUseId:n.toolUse.toolUseId,name:n.toolUse.name,input:n.toolUse.input}}:n.toolResult?{toolResult:{toolUseId:n.toolResult.toolUseId,content:n.toolResult.content,status:n.toolResult.status}}:{text:""})}))}async executeSingleTool(e,t,n){return rle.startActiveSpan("bedrock.tool.execute",{kind:kr.CLIENT,attributes:{"gen_ai.tool.name":e,"gen_ai.system":"aws.bedrock"}},async o=>{try{g.debug(`[AmazonBedrockProvider] Executing single tool: ${e}`,{args:t});let s=await this.getAllTools(),i=this.convertAISDKToolsToToolDefinitions(s);if(!i[e])throw new Error(`Tool not found: ${e}`);let a=i[e];if(!a||!a.execute)throw new Error(`Tool ${e} does not have execute method`);let c=t||{};e==="list_directory"&&!c.path&&(c.path=".",g.debug("[AmazonBedrockProvider] Added default path '.' for list_directory tool")),g.debug("[AmazonBedrockProvider] Tool input parameters:",c);let l={};for(let[p,f]of Object.entries(c))(f===null||typeof f=="string"||typeof f=="number"||typeof f=="boolean"||typeof f=="object"&&f!==null)&&(l[p]=f);let u=await a.execute(l);g.debug("[AmazonBedrockProvider] Tool execution result:",{toolName:e,result:u});let d;if(u&&typeof u=="object"&&"success"in u)if(u.success&&u.data!==void 0)typeof u.data=="string"?d=u.data:typeof u.data=="object"?d=JSON.stringify(u.data,null,2):d=String(u.data);else if(u.error){let p=typeof u.error=="string"?u.error:u.error.message||"Tool execution failed";throw new Error(p)}else d="";else typeof u=="string"?d=u:typeof u=="object"?d=JSON.stringify(u,null,2):d=String(u);return o.setStatus({code:Me.OK}),d}catch(s){throw g.error("[AmazonBedrockProvider] Tool execution error:",{toolName:e,error:s}),o.setStatus({code:Me.ERROR,message:s.message}),o.recordException(s),s}finally{o.end()}})}convertAISDKToolsToToolDefinitions(e){let t={};for(let[n,o]of Object.entries(e))if("description"in o&&o.description){let i=o.parameters??o.inputSchema;t[n]={description:o.description,parameters:i,execute:async a=>{if("execute"in o&&o.execute)return{success:!0,data:await o.execute(a,{toolCallId:`tool_${Date.now()}`,messages:[]})};throw new Error(`Tool ${n} has no execute method`)}}}return t}formatToolsForBedrock(e){if(!e||Object.keys(e).length===0)return null;let t=Object.entries(e).map(([n,o])=>{let s;return o.parameters&&typeof o.parameters=="object"?"_def"in o.parameters?s=po(o.parameters):s=o.parameters:s={type:"object",properties:{},required:[]},(!s.type||s.type!=="object")&&(s={type:"object",properties:s.properties||{},required:s.required||[]}),{toolSpec:{name:n,description:o.description,inputSchema:{json:s}}}});return g.debug(`[AmazonBedrockProvider] Formatted ${t.length} tools for Bedrock`),{tools:t}}convertToBedrockMessages(e){return e.map(t=>{let n={role:t.role==="system"?"user":t.role,content:[]};return typeof t.content=="string"?n.content.push({text:t.content}):t.content.forEach(o=>{if(o.type==="text"&&o.text)n.content.push({text:o.text});else if(o.type==="image"&&o.image){let s=typeof o.image=="string"?Buffer.from(o.image.replace(/^data:image\/\w+;base64,/,""),"base64"):o.image,i=o.mimeType?.split("/")[1]||"png";i==="jpg"&&(i="jpeg"),n.content.push({image:{format:i==="jpeg"?OC.JPEG:i==="png"?OC.PNG:i==="gif"?OC.GIF:OC.WEBP,source:{bytes:s}}})}else if(o.type==="document"||o.type==="pdf"||o.type==="file"&&o.mimeType?.toLowerCase().startsWith("application/pdf")){let s;if(typeof o.data=="string"){let a=o.data.replace(/^data:application\/pdf;base64,/i,"");s=Buffer.from(a,"base64")}else s=o.data;let i=typeof o.name=="string"&&o.name?_c.basename(o.name):"document-pdf";i=i.replace(/\.[^.]+$/,""),i=i.replace(/[^a-zA-Z0-9\s\-()[\]]/g,"-"),i=i.replace(/-+/g,"-").trim().replace(/^-+|-+$/g,""),i=i||"document",n.content.push({document:{format:"pdf",name:i,source:{bytes:s}}})}}),n})}getBedrockClient(){return this.bedrockClient}async executeStream(e){return g.debug("[TRACE] executeStream ENTRY - starting streaming attempt"),g.info("[AmazonBedrockProvider] Attempting real streaming with ConverseStreamCommand"),rle.startActiveSpan("bedrock.stream",{kind:kr.CLIENT,attributes:{"gen_ai.system":"aws.bedrock","gen_ai.request.model":this.modelName||this.getDefaultModel(),"gen_ai.operation.name":"stream"}},async t=>{try{if(g.debug("[TRACE] executeStream TRY block - about to call streamingConversationLoop"),this.conversationHistory=[],!!(e.input?.images?.length||e.input?.content?.length||e.input?.files?.length||e.input?.csvFiles?.length||e.input?.pdfFiles?.length)){g.debug("[AmazonBedrockProvider] Detected multimodal input, using multimodal message builder",{hasImages:!!e.input?.images?.length,imageCount:e.input?.images?.length||0,hasContent:!!e.input?.content?.length,contentCount:e.input?.content?.length||0,hasFiles:!!e.input?.files?.length,fileCount:e.input?.files?.length||0,hasCSVFiles:!!e.input?.csvFiles?.length,csvFileCount:e.input?.csvFiles?.length||0,hasPDFFiles:!!e.input?.pdfFiles?.length,pdfFileCount:e.input?.pdfFiles?.length||0});let s=tle(e,this.providerName,this.modelName),i=await y0(s,this.providerName,this.modelName);this.conversationHistory=this.convertToBedrockMessages(i)}else{g.debug("[AmazonBedrockProvider] Text-only input, using simple message builder");let s={role:"user",content:[{text:e.input.text}]};this.conversationHistory.push(s)}g.debug(`[AmazonBedrockProvider] Starting streaming conversation with ${this.conversationHistory.length} message(s)`),g.debug("[TRACE] executeStream - calling streamingConversationLoop NOW");let o=await this.streamingConversationLoop(e,t);return g.debug("[TRACE] executeStream - streamingConversationLoop SUCCESS, returning result"),t.setStatus({code:Me.OK}),t.end(),o}catch(n){g.debug("[TRACE] executeStream CATCH - error caught from streamingConversationLoop");let o=n,s=o?.name==="AccessDeniedException"||o?.name==="UnauthorizedOperation"||o?.message?.includes("bedrock:InvokeModelWithResponseStream")||o?.message?.includes("streaming")||o?.message?.includes("ConverseStream");if(g.debug("[TRACE] executeStream CATCH - checking if permission error"),g.debug(`[TRACE] executeStream CATCH - isPermissionError=${s}`),s){g.debug("[TRACE] executeStream CATCH - PERMISSION ERROR DETECTED, starting fallback"),g.warn(`[AmazonBedrockProvider] Streaming permissions not available, falling back to generate method: ${o.message}`),t.addEvent("stream.fallback_to_generate",{reason:o.message});let i=await this.generate({prompt:e.input.text,input:e.input,maxTokens:e.maxTokens,temperature:e.temperature,systemPrompt:e.systemPrompt});if(!i)throw t.setStatus({code:Me.ERROR,message:"Generate method returned null result"}),t.end(),new Error("Generate method returned null result");t.setAttribute("gen_ai.response.stop_reason","fallback_end_turn"),t.setStatus({code:Me.OK}),t.end();let a=new ReadableStream({start(l){let d=(i.content||"").split(/(\s+)/),p="";for(let f=0;f<d.length;f++)p+=d[f],(f===d.length-1||p.length>50||/[.!?;,]\s*$/.test(p))&&p.length>0&&(l.enqueue({content:p}),p="");p.length>0&&l.enqueue({content:p}),l.close()}});return{stream:{async*[Symbol.asyncIterator](){let l=a.getReader();try{for(;;){let{done:u,value:d}=await l.read();if(u)break;yield d}}finally{l.releaseLock()}}},usage:{total:0,input:0,output:0},model:this.modelName||this.getDefaultModel(),provider:this.getProviderName(),metadata:{fallback:!0}}}throw t.setStatus({code:Me.ERROR,message:o instanceof Error?o.message:String(o)}),t.recordException(o instanceof Error?o:new Error(String(o))),t.end(),n}})}async streamingConversationLoop(e,t){g.debug("[TRACE] streamingConversationLoop ENTRY");let n=Date.now(),o=e.maxSteps||Ws,s=0,i=0,a=0,c;try{g.debug("[TRACE] streamingConversationLoop - testing first streaming call");let l=await this.prepareStreamCommand(e),u=new $H(l);g.debug("[Observability] Bedrock streaming API request",{model:l.modelId,messageCount:l.messages?.length||0,toolCount:l.toolConfig?.tools?.length||0}),t.addEvent("stream.api_call",{"bedrock.message_count":l.messages?.length||0,"bedrock.tool_count":l.toolConfig?.tools?.length||0});let d=Date.now(),p=await Be(this.bedrockClient.send(u),12e4,new Error("Bedrock streaming API call timed out"));g.debug("[Observability] Bedrock streaming API connection established",{model:l.modelId,durationMs:Date.now()-d,hasStream:!!p.stream});let f=new ReadableStream({start:async E=>{g.debug("[TRACE] streamingConversationLoop - ReadableStream start() called");try{let k="";if(p.stream){let R=[],P="";for await(let M of p.stream){if(M.contentBlockStart&&R.push({}),M.contentBlockDelta?.delta?.text){let D=M.contentBlockDelta.delta.text;P+=D,E.enqueue({content:D})}if(M.contentBlockStart?.start?.toolUse){let D=R[R.length-1];D.toolUse={name:M.contentBlockStart.start.toolUse.name||"",input:{},toolUseId:M.contentBlockStart.start.toolUse.toolUseId||`tool_${Date.now()}_${Math.random().toString(36).substring(2,11)}`}}if(M.contentBlockDelta?.delta?.toolUse){let D=R[R.length-1];D.toolUse||(D.toolUse={name:"",input:{},toolUseId:`tool_${Date.now()}_${Math.random().toString(36).substring(2,11)}`});let z=M.contentBlockDelta.delta.toolUse.input;if(z){if(typeof z=="string")D._inputBuffer=(D._inputBuffer||"")+z;else if(typeof z=="object"&&!Array.isArray(z)){let O=D.toolUse.input||{};D.toolUse.input={...O,...z}}}}if(M.contentBlockStop){let D=R[R.length-1];if(D?.toolUse&&D._inputBuffer){try{D.toolUse.input=JSON.parse(D._inputBuffer)}catch{D.toolUse.input={}}delete D._inputBuffer}P&&D&&!D.toolUse&&(D.text=P),P=""}if(M.messageStop){k=M.messageStop.stopReason||"end_turn";continue}if(M.metadata?.usage){i+=M.metadata.usage.inputTokens??0,a+=M.metadata.usage.outputTokens??0;break}}k&&(c=k);let A={role:"assistant",content:R};if(this.conversationHistory.push(A),t.addEvent("stream.turn_complete",{iteration:0,stop_reason:k}),k==="tool_use"){let M=R.flatMap(D=>D.toolUse?.name?[D.toolUse.name]:[]).join(", ");t.addEvent("stream.tool_use",{iteration:0,tool_names:M})}if(!await this.handleStreamStopReason(k,A,E,e)){t.setAttribute("gen_ai.response.stop_reason",k),E.close();return}}for(;s<o;){s++,g.debug(`[AmazonBedrockProvider] Streaming iteration ${s}`);let R=await this.prepareStreamCommand(e),{stopReason:P,assistantMessage:A,usage:I}=await this.processStreamResponse(R,E);if(I&&(i+=I.input,a+=I.output),P&&(c=P),t.addEvent("stream.turn_complete",{iteration:s,stop_reason:P}),P==="tool_use"){let D=A.content.flatMap(z=>z.toolUse?.name?[z.toolUse.name]:[]).join(", ");t.addEvent("stream.tool_use",{iteration:s,tool_names:D})}if(!await this.handleStreamStopReason(P,A,E,e)){t.setAttribute("gen_ai.response.stop_reason",P);break}}if(s>=o){t.setAttribute("gen_ai.response.stop_reason","max_iterations"),E.error(new Error("Streaming conversation exceeded maximum iterations"));return}E.close()}catch(k){g.debug("[TRACE] streamingConversationLoop - CATCH block hit in ReadableStream"),E.error(k)}}}),h=this.neurolink?.getEventEmitter(),y=this.convertToAsyncIterable(f),x=this,v,T=new Promise(E=>{v=E});return{stream:{async*[Symbol.asyncIterator](){let E=!1;try{yield*y}catch(k){throw E=!0,k}finally{let k={input:i,output:a,total:i+a};v(mx(x.providerName,x.modelName||x.getDefaultModel(),{usage:k},Date.now()-n,{requestId:`bedrock-stream-${Date.now()}`,streamingMode:!0})),h&&h.emit("generation:end",{provider:x.providerName,responseTime:Date.now()-n,timestamp:Date.now(),result:{content:"",usage:k,model:x.modelName||x.getDefaultModel(),provider:x.providerName,finishReason:E?"error":c},success:!E})}}},usage:{total:0,input:0,output:0},model:this.modelName||this.getDefaultModel(),provider:this.getProviderName(),analytics:T,metadata:{startTime:n,streamId:`bedrock-${Date.now()}`}}}catch(l){throw g.debug("[TRACE] streamingConversationLoop - first streaming call FAILED, throwing"),l}}convertToAsyncIterable(e){return{async*[Symbol.asyncIterator](){let t=e.getReader();try{for(;;){let{done:n,value:o}=await t.read();if(n)break;yield o}}finally{t.releaseLock()}}}}async prepareStreamCommand(e){g.shouldLog("debug")&&(g.debug(`[AmazonBedrockProvider] BEFORE conversion - conversationHistory length: ${this.conversationHistory.length}`),this.conversationHistory.forEach((a,c)=>{g.debug(`[AmazonBedrockProvider] Message ${c}: role=${a.role}, content=${JSON.stringify(a.content)}`)}));let t=e.tools||await this.getAllTools(),n=this.convertAISDKToolsToToolDefinitions(t),o=this.formatToolsForBedrock(n),s=this.convertToAWSMessages(this.conversationHistory);g.shouldLog("debug")&&(g.debug(`[AmazonBedrockProvider] AFTER conversion - messages length: ${s.length}`),s.forEach((a,c)=>{g.debug(`[AmazonBedrockProvider] Converted Message ${c}: role=${a.role}, content=${JSON.stringify(a.content)}`)}));let i={modelId:this.modelName||this.getDefaultModel(),messages:s,system:[{text:e.systemPrompt||"You are a helpful assistant with access to external tools. Use tools when necessary to provide accurate information."}],inferenceConfig:{maxTokens:e.maxTokens,temperature:e.temperature||.7}};return o&&(i.toolConfig=o),g.debug(`[AmazonBedrockProvider] Calling Bedrock streaming with ${this.conversationHistory.length} messages`),g.debug("[AmazonBedrockProvider] DEBUG - Conversation structure:"),this.conversationHistory.forEach((a,c)=>{g.debug(` Message ${c} (${a.role}): ${a.content.length} content items`),a.content.forEach((l,u)=>{let d=Object.keys(l);g.debug(` Content ${u}: ${d.join(", ")}`)})}),i}async processStreamResponse(e,t){let n=new $H(e);g.debug("[Observability] Bedrock streaming API request (continuation)",{model:e.modelId,messageCount:e.messages?.length||0});let o=Date.now(),s=await Be(this.bedrockClient.send(n),12e4,new Error("Bedrock streaming API call timed out"));if(g.debug("[Observability] Bedrock streaming API connection established (continuation)",{model:e.modelId,durationMs:Date.now()-o}),!s.stream)throw new Error("No stream returned from Bedrock");let i=[],a="",c="",l;for await(let d of s.stream){if(d.contentBlockStart&&i.push({}),d.contentBlockDelta?.delta?.text){let p=d.contentBlockDelta.delta.text;c+=p,t.enqueue({content:p})}if(d.contentBlockStart?.start?.toolUse){let p=i[i.length-1];p.toolUse={name:d.contentBlockStart.start.toolUse.name||"",input:{},toolUseId:d.contentBlockStart.start.toolUse.toolUseId||`tool_${Date.now()}_${Math.random().toString(36).substring(2,11)}`}}if(d.contentBlockDelta?.delta?.toolUse){let p=i[i.length-1];if(p.toolUse||(p.toolUse={name:"",input:{},toolUseId:`tool_${Date.now()}_${Math.random().toString(36).substring(2,11)}`}),d.contentBlockDelta.delta.toolUse.input){let f=d.contentBlockDelta.delta.toolUse.input;if(typeof f=="string")p._inputBuffer=(p._inputBuffer||"")+f;else if(f&&typeof f=="object"&&!Array.isArray(f)){let h=p.toolUse.input||{};p.toolUse.input={...h,...f}}}}if(d.contentBlockStop){let p=i[i.length-1];if(p?.toolUse&&p._inputBuffer){try{p.toolUse.input=JSON.parse(p._inputBuffer)}catch{p.toolUse.input={}}delete p._inputBuffer}c&&p&&!p.toolUse&&(p.text=c),c=""}if(d.messageStop){a=d.messageStop.stopReason||"end_turn";continue}if(d.metadata?.usage){let p=d.metadata.usage.inputTokens??0,f=d.metadata.usage.outputTokens??0;l={input:p,output:f,total:d.metadata.usage.totalTokens??p+f};break}}let u={role:"assistant",content:i};return this.conversationHistory.push(u),{stopReason:a,assistantMessage:u,usage:l}}async handleStreamStopReason(e,t,n,o){return e==="end_turn"||e==="stop_sequence"?(n.close(),!1):e==="tool_use"?(g.debug("[AmazonBedrockProvider] Tool use detected in streaming - executing tools"),await this.executeStreamTools(t.content,o),!0):(n.close(),!1)}async executeStreamTools(e,t){let n=[],o=0,s=[],i=[];for(let a of e)a.toolUse&&o++;g.debug(`[AmazonBedrockProvider] Found ${o} toolUse blocks in assistant message`);for(let a of e)if(a.toolUse){g.debug(`[AmazonBedrockProvider] Executing tool: ${a.toolUse.name}`),s.push({type:"tool-call",toolCallId:a.toolUse.toolUseId,toolName:a.toolUse.name,args:a.toolUse.input||{}});try{let c=await this.executeSingleTool(a.toolUse.name,a.toolUse.input||{},a.toolUse.toolUseId);g.debug(`[AmazonBedrockProvider] Tool execution successful: ${a.toolUse.name}`),i.push({type:"tool-result",toolCallId:a.toolUse.toolUseId,toolName:a.toolUse.name,result:c}),n.push({toolResult:{toolUseId:a.toolUse.toolUseId,content:[{text:String(c)}],status:"success"}})}catch(c){g.error(`[AmazonBedrockProvider] Tool execution failed: ${a.toolUse.name}`,c);let l=c instanceof Error?c.message:String(c);i.push({type:"tool-result",toolCallId:a.toolUse.toolUseId,toolName:a.toolUse.name,result:{error:l}}),n.push({toolResult:{toolUseId:a.toolUse.toolUseId,content:[{text:`Error executing tool ${a.toolUse.name}: ${l}`}],status:"error"}})}}if(g.debug(`[AmazonBedrockProvider] Created ${n.length} toolResult blocks for ${o} toolUse blocks`),n.length!==o)throw g.error(`[AmazonBedrockProvider] Mismatch: ${n.length} toolResults vs ${o} toolUse blocks`),new Error(`Tool mapping mismatch: ${n.length} toolResults for ${o} toolUse blocks`);if(n.length>0){let a={role:"user",content:n};this.conversationHistory.push(a),g.debug(`[AmazonBedrockProvider] Added ${n.length} tool results to conversation (1:1 mapping validated)`),Ay(this.neurolink?.getEventEmitter(),i.map(c=>{let l=c.result&&typeof c.result=="object"&&"error"in c.result;return{toolName:c.toolName,result:c.result,error:l?String(c.result.error):void 0}})),this.handleToolExecutionStorage(s,i,t,new Date).catch(c=>{g.warn("[AmazonBedrockProvider] Failed to store tool executions",{provider:this.providerName,error:c instanceof Error?c.message:String(c)})})}}async checkBedrockHealth(){let e=new AbortController,t=setTimeout(()=>e.abort(),1e4),{BedrockClient:n,ListFoundationModelsCommand:o}=await eVe(),s=new n({region:process.env.AWS_REGION||"us-east-1"});try{g.debug("[AmazonBedrockProvider] Starting health check...");let i=new o({}),c=(await s.send(i,{abortSignal:e.signal})).modelSummaries||[],l=c.filter(u=>u.modelLifecycle?.status==="ACTIVE");if(g.debug(`[AmazonBedrockProvider] Health check passed - Found ${l.length} active models out of ${c.length} total models`),l.length===0)throw new Error("No active foundation models available in the region")}catch(i){clearTimeout(t);let a=i;if(qr(i))throw new Error("Bedrock health check timed out after 10 seconds",{cause:i});let c=typeof a.message=="string"?a.message:"";throw c.includes("UnauthorizedOperation")||c.includes("AccessDenied")?new Error("Bedrock access denied. Check your AWS credentials and IAM permissions for bedrock:ListFoundationModels",{cause:i}):a.code==="ECONNREFUSED"||a.code==="ENOTFOUND"?new Error("Unable to connect to Bedrock service. Check your network connectivity and AWS region configuration",{cause:i}):(g.error("[AmazonBedrockProvider] Health check failed:",i),new Error(`Bedrock health check failed: ${c||"Unknown error"}`,{cause:i}))}finally{clearTimeout(t);try{s.destroy()}catch{}}}formatProviderError(e){let t=e instanceof Error?e.message:String(e);if(t.includes("AccessDeniedException"))return new Ot("AWS Bedrock access denied. Check your credentials and permissions.",this.providerName);if(t.includes("ValidationException"))return new qe(`Validation error: ${t}`,this.providerName);let n=e?.name??"",o=e?.code??"";return n==="ThrottlingException"||o==="ThrottlingException"?new tr(`Bedrock rate limit (throttled): ${e instanceof Error?e.message:String(e)}`,"bedrock"):new qe(`AWS Bedrock error: ${t}`,this.providerName)}async embed(e,t){let n=t||"amazon.titan-embed-text-v2:0";g.debug("Generating embedding",{provider:this.providerName,model:n,textLength:e.length});try{let{InvokeModelCommand:o}=await Promise.resolve().then(()=>(ele(),YGe)),s=JSON.stringify({inputText:e}),i=new o({modelId:n,contentType:"application/json",accept:"application/json",body:s}),a=await Be(this.bedrockClient.send(i),6e4,new Error("Bedrock embedding API call timed out")),c=JSON.parse(new TextDecoder().decode(a.body));if(!c.embedding||!Array.isArray(c.embedding))throw new Error("Invalid embedding response from Bedrock");return g.debug("Embedding generated successfully",{provider:this.providerName,model:n,embeddingDimension:c.embedding.length}),c.embedding}catch(o){throw g.error("Embedding generation failed",{error:o instanceof Error?o.message:String(o),model:n,textLength:e.length}),this.handleProviderError(o)}}async embedMany(e,t){let n=t||"amazon.titan-embed-text-v2:0";g.debug("Generating batch embeddings",{provider:this.providerName,model:n,count:e.length});try{let o=await Promise.all(e.map(s=>this.embed(s,n)));return g.debug("Batch embeddings generated successfully",{provider:this.providerName,model:n,count:o.length,embeddingDimension:o[0]?.length}),o}catch(o){throw g.error("Batch embedding generation failed",{error:o instanceof Error?o.message:String(o),model:n,count:e.length}),this.handleProviderError(o)}}}});var nVe={};te(nVe,{AzureOpenAIProvider:()=>ole});var ole,oVe=C(()=>{"use strict";Dt();H();go();no();_y();xi();Fg();ole=class extends Ur{azureDeployment;azureApiVersion;azureResourceOrigin;azureDeploymentPathPrefix;useMaxCompletionTokensOverride;constructor(e,t,n,o){let s=o?.apiKey||process.env.AZURE_OPENAI_API_KEY||"",i=process.env.AZURE_OPENAI_ENDPOINT||"",a;if(i)try{a=new URL(i.includes("://")?i:`https://${i}`)}catch{a=void 0}let c=a?.hostname??"",l=a?.pathname&&a.pathname!=="/"?a.pathname.replace(/\/+$/,""):"",u=/\.(openai|cognitiveservices)\.azure\.com$/.test(c),d;u?d="/openai":d=/\/openai(?:\/v\d+)?$/.test(l)?l:`${l}/openai`;let p=a?.origin??"",f=o?.deploymentName||e||process.env.AZURE_OPENAI_MODEL||process.env.AZURE_OPENAI_DEPLOYMENT||process.env.AZURE_OPENAI_DEPLOYMENT_ID||"gpt-4o",h=o?.apiVersion||process.env.AZURE_API_VERSION||"2025-04-01-preview",y=process.env.AZURE_OPENAI_USE_MAX_COMPLETION_TOKENS,x=o?.useMaxCompletionTokens??(y===void 0?void 0:/^(1|true|yes)$/i.test(y));s||Mr(gBe()),p||Mr(hBe()),super("azure",e,t,{baseURL:p,apiKey:s}),this.azureDeployment=f,this.azureApiVersion=h,this.azureResourceOrigin=p,this.azureDeploymentPathPrefix=d,this.useMaxCompletionTokensOverride=x,g.shouldLog("debug")&&g.debug("Azure OpenAI Provider initialized",Rz({deployment:this.azureDeployment,resourceOrigin:this.azureResourceOrigin,deploymentPathPrefix:this.azureDeploymentPathPrefix,apiVersion:this.azureApiVersion,provider:"azure"}))}getProviderName(){return"azure"}getDefaultModel(){return this.azureDeployment}formatProviderError(e){if(e instanceof rr)return new zt(`Request timed out: ${e.message}`,"azure");let t=e;if(t?.message&&typeof t.message=="string"&&t.message.includes("401"))return new Ot("Invalid Azure OpenAI API key or endpoint.","azure");let n=t?.message&&typeof t.message=="string"?t.message:"Unknown error";return new qe(`Azure OpenAI error: ${n}`,"azure")}getChatCompletionsURL(e){let t=e||this.azureDeployment,n=this.azureDeploymentPathPrefix.replace(/\/+$/,"");return`${this.azureResourceOrigin}${n}/deployments/${t}/chat/completions?api-version=${this.azureApiVersion}`}getAuthHeaders(){return{"api-key":this.config.apiKey}}adjustRequestBody(e,t){let n=this.useMaxCompletionTokensOverride??XBe(t);return e.max_tokens!==void 0&&n?{...e,max_completion_tokens:e.max_tokens,max_tokens:void 0}:e}}});function sVe(r){return r.length>=8&&r[0]===137&&r[1]===80&&r[2]===78&&r[3]===71?"image/png":r.length>=3&&r[0]===255&&r[1]===216&&r[2]===255?"image/jpeg":r.length>=12&&r[0]===82&&r[1]===73&&r[2]===70&&r[3]===70&&r[8]===87&&r[9]===69&&r[10]===66&&r[11]===80?"image/webp":r.length>=6&&r[0]===71&&r[1]===73&&r[2]===70?"image/gif":"image/png"}var iVe=C(()=>{"use strict"});function sle(r){return r.map(e=>typeof e.content=="string"?{role:e.role,content:e.content}:{role:e.role,content:e.content.map(t=>t.type==="image"||t.type==="document"?{type:t.type,media_type:t.source.media_type,base64_chars:t.source.data.length}:t)})}var aVe=C(()=>{"use strict"});var BH,cVe=C(()=>{BH=r=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[r]?.trim()||void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(r)?.trim()||void 0}});var lVe=C(()=>{ko()});function zH(r){return r!=null&&typeof r=="object"&&!Array.isArray(r)}var ile,ale,cle=C(()=>{lVe();ile=r=>(ile=Array.isArray,ile(r)),ale=ile});function*MTr(r){if(!r)return;if(uVe in r){let{values:n,nulls:o}=r;yield*n.entries();for(let s of o)yield[s,null];return}let e=!1,t;r instanceof Headers?t=r.entries():ale(r)?t=r:(e=!0,t=Object.entries(r??{}));for(let n of t){let o=n[0];if(typeof o!="string")throw new TypeError("expected header name to be a string");let s=ale(n[1])?n[1]:[n[1]],i=!1;for(let a of s)a!==void 0&&(e&&!i&&(i=!0,yield[o,null]),yield[o,a])}}var uVe,dVe,pVe=C(()=>{cle();uVe=Symbol.for("brand.privateNullableHeaders");dVe=r=>{let e=new Headers,t=new Set;for(let n of r){let o=new Set;for(let[s,i]of MTr(n)){let a=s.toLowerCase();o.has(a)||(e.delete(s),o.add(a)),i===null?(e.delete(s),t.add(a)):(e.append(s,i),t.delete(a))}}return{[uVe]:!0,values:e,nulls:t}}});function DTr(r){let e=new cf(r);return delete e.batches,e}function LTr(r){let e=new vi(r);return delete e.messages.batches,e}var OTr,NTr,jH,lle=C(()=>{HN();Dce();JO();cVe();cle();pVe();HN();OTr="vertex-2023-10-16",NTr=new Set(["/v1/messages","/v1/messages?beta=true"]),jH=class extends oo{constructor({baseURL:e=BH("ANTHROPIC_VERTEX_BASE_URL"),region:t=BH("CLOUD_ML_REGION")??null,projectId:n=BH("ANTHROPIC_VERTEX_PROJECT_ID")??null,...o}={}){if(!t)throw new Error("No region was given. The client should be instantiated with the `region` option or the `CLOUD_ML_REGION` environment variable should be set.");if(!e)switch(t){case"global":e="https://aiplatform.googleapis.com/v1";break;case"us":e="https://aiplatform.us.rep.googleapis.com/v1";break;case"eu":e="https://aiplatform.eu.rep.googleapis.com/v1";break;default:e=`https://${t}-aiplatform.googleapis.com/v1`}if(super({baseURL:e,...o}),this.messages=DTr(this),this.beta=LTr(this),this.region=t,this.projectId=n,this.accessToken=o.accessToken??null,o.authClient&&o.googleAuth)throw new Error("You cannot provide both `authClient` and `googleAuth`. Please provide only one of them.");o.authClient?this._authClientPromise=Promise.resolve(o.authClient):(this._auth=o.googleAuth??new rie({scopes:"https://www.googleapis.com/auth/cloud-platform"}),this._authClientPromise=this._auth.getClient())}validateHeaders(){}async prepareOptions(e){let t=await this._authClientPromise,n=await t.getRequestHeaders(),o=t.projectId??n["x-goog-user-project"];!this.projectId&&o&&(this.projectId=o),e.headers=dVe([n,e.headers])}async buildRequest(e){if(zH(e.body)&&(e.body={...e.body}),zH(e.body)&&(e.body.anthropic_version||(e.body.anthropic_version=OTr)),NTr.has(e.path)&&e.method==="post"){if(!this.projectId)throw new Error("No projectId was given and it could not be resolved from credentials. The client should be instantiated with the `projectId` option or the `ANTHROPIC_VERTEX_PROJECT_ID` environment variable should be set.");if(!zH(e.body))throw new Error("Expected request body to be an object for post /v1/messages");let t=e.body.model;e.body.model=void 0;let o=e.body.stream??!1?"streamRawPredict":"rawPredict";e.path=`/projects/${this.projectId}/locations/${this.region}/publishers/anthropic/models/${t}:${o}`}if(e.path==="/v1/messages/count_tokens"||e.path=="/v1/messages/count_tokens?beta=true"&&e.method==="post"){if(!this.projectId)throw new Error("No projectId was given and it could not be resolved from credentials. The client should be instantiated with the `projectId` option or the `ANTHROPIC_VERTEX_PROJECT_ID` environment variable should be set.");e.path=`/projects/${this.projectId}/locations/${this.region}/publishers/anthropic/models/count-tokens:rawPredict`}return super.buildRequest(e)}}});var ule={};te(ule,{AnthropicVertex:()=>jH,BaseAnthropic:()=>oo,default:()=>jH});var dle=C(()=>{lle();lle()});var hVe={};te(hVe,{GoogleVertexAI:()=>qH,GoogleVertexProvider:()=>qH,appendUserMessage:()=>gle,buildAnthropicHistoryMessages:()=>fle,default:()=>qTr,resolveVertexLocation:()=>gVe,stripAdditionalPropertiesDeep:()=>Wg});async function FTr(){return ple||(ple=await Promise.resolve().then(()=>(dle(),ule))),ple}function UTr(r){let e=[],t=new Map,n=0,o=s=>{let i=`${n}:${s??"x"}`,a=t.get(i);return a||(a={type:"tool_step",callParts:[],resultParts:[]},t.set(i,a),e.push(a)),a};for(let s of r){if(s.role==="tool_call"){o(s.metadata?.stepIndex).callParts.push({name:s.tool||"unknown",input:s.args||{}});continue}if(s.role==="tool_result"){o(s.metadata?.stepIndex).resultParts.push(s.content&&s.content.length>0?s.content:"(no output)");continue}let i=s.role==="assistant"?"assistant":s.role==="user"?"user":null;!i||!s.content||s.content.trim().length===0||(n++,e.push({type:"regular",role:i,parts:[s.content]}))}return e}function mle(r,e,t){let n=r[r.length-1];n&&n.role===e&&Array.isArray(n.content)?n.content.push(...t):r.push({role:e,content:[...t]})}function $Tr(r,e){let t=r.callParts,n=r.resultParts,o=Math.min(t.length,n.length);(o!==t.length||o!==n.length)&&g.debug("[GoogleVertex] Unbalanced tool step in Claude history replay",{calls:t.length,results:n.length,paired:o});let s=[],i=[];for(let a=0;a<o;a++){let c=`hist_${e}_${a}`;s.push({type:"tool_use",id:c,name:t[a].name,input:t[a].input}),i.push({type:"tool_result",tool_use_id:c,content:n[a]})}return{uses:s,results:i}}function BTr(r){let e=t=>Array.isArray(t.content)&&t.content.length>0&&t.content.every(n=>n.type==="tool_result");for(;r.length>0&&(r[0].role!=="user"||e(r[0]));)r.shift()}function fle(r){let e=[],t=0;for(let n of UTr(r)){if(n.type==="regular"){mle(e,n.role==="assistant"?"assistant":"user",[{type:"text",text:String(n.parts[0]??"")}]);continue}let{uses:o,results:s}=$Tr(n,t);o.length!==0&&(t++,mle(e,"assistant",o),mle(e,"user",s))}if(BTr(e),g.shouldLog("debug")){let n=e.flatMap(o=>Array.isArray(o.content)?o.content:[]);g.debug("[GoogleVertex] Replayed Claude history with tool turns",{historyMessages:e.length,toolUseBlocks:n.filter(o=>o.type==="tool_use").length,toolResultBlocks:n.filter(o=>o.type==="tool_result").length})}return e}function gle(r,e){let t=r[r.length-1];if(t&&t.role==="user"){let n=Array.isArray(t.content)?t.content:[{type:"text",text:t.content}],o=Array.isArray(e)?e:[{type:"text",text:e}];t.content=[...n,...o];return}r.push({role:"user",content:e})}function Wg(r){if(!r||typeof r!="object")return;let e=["additionalProperties","default","$schema","$id","$ref","definitions","$defs","examples","errorMessage"];for(let n of e)n in r&&delete r[n];typeof r.exclusiveMinimum=="boolean"&&(r.exclusiveMinimum===!0&&typeof r.minimum=="number"?(r.exclusiveMinimum=r.minimum,delete r.minimum):delete r.exclusiveMinimum),typeof r.exclusiveMaximum=="boolean"&&(r.exclusiveMaximum===!0&&typeof r.maximum=="number"?(r.exclusiveMaximum=r.maximum,delete r.maximum):delete r.exclusiveMaximum);let t=2147483647;if(typeof r.maximum=="number"&&r.maximum>t&&delete r.maximum,typeof r.minimum=="number"&&r.minimum<-t&&delete r.minimum,r.properties&&typeof r.properties=="object")for(let n of Object.values(r.properties))n&&typeof n=="object"&&Wg(n);if(r.items&&typeof r.items=="object")if(Array.isArray(r.items))for(let n of r.items)n&&typeof n=="object"&&Wg(n);else Wg(r.items);for(let n of["allOf","anyOf","oneOf"])if(Array.isArray(r[n]))for(let o of r[n])o&&typeof o=="object"&&Wg(o)}var ple,mVe,ZN,QN,gVe,XN,JT,zTr,GH,fVe,jTr,GTr,VTr,VH,qH,qTr,yVe=C(()=>{"use strict";Xn();dn();yp();zu();ki();px();Gj();mn();Co();Dt();kt();Wce();Use();PO();H();Jq();iVe();Yq();go();Iu();bie();M0();no();Oie();xM();Al();Dr();Cd();_y();aVe();BO();ple=null;mVe=()=>!0;ZN=()=>Mr(PBe()),QN=()=>process.env.GOOGLE_CLOUD_LOCATION||process.env.VERTEX_LOCATION||process.env.GOOGLE_VERTEX_LOCATION||"us-central1",gVe=(r,e)=>{let t=e||QN();if(!r)return t;let n=r.toLowerCase();return n.startsWith("gemini-")||n.includes("/gemini-")||xB.some(s=>n===s.toLowerCase()||n.includes(s.toLowerCase())||s.toLowerCase().includes(n))?process.env.GOOGLE_VERTEX_GLOBAL_LOCATION||"global":t},XN=gVe,JT=()=>process.env.VERTEX_MODEL||"gemini-2.5-flash",zTr=()=>!!(process.env.GOOGLE_APPLICATION_CREDENTIALS_NEUROLINK||process.env.GOOGLE_APPLICATION_CREDENTIALS||process.env.GOOGLE_SERVICE_ACCOUNT_KEY||process.env.GOOGLE_AUTH_CLIENT_EMAIL&&process.env.GOOGLE_AUTH_PRIVATE_KEY),GH=null,fVe=!1,jTr=r=>{if(fVe)return;fVe=!0;let e=()=>{try{cn.existsSync(r)&&cn.unlinkSync(r)}catch{}};process.once("exit",e),process.once("SIGINT",()=>{e(),process.exit(130)}),process.once("SIGTERM",()=>{e(),process.exit(143)})},GTr=async r=>{let e=r||QN(),n={project:ZN(),location:e,fetch:vt()},o={type:process.env.GOOGLE_AUTH_TYPE,project_id:process.env.GOOGLE_AUTH_BREEZE_PROJECT_ID,private_key:process.env.GOOGLE_AUTH_PRIVATE_KEY,client_email:process.env.GOOGLE_AUTH_CLIENT_EMAIL,client_id:process.env.GOOGLE_AUTH_CLIENT_ID,auth_uri:process.env.GOOGLE_AUTH_AUTH_URI,token_uri:process.env.GOOGLE_AUTH_TOKEN_URI,auth_provider_x509_cert_url:process.env.GOOGLE_AUTH_AUTH_PROVIDER_CERT_URL,client_x509_cert_url:process.env.GOOGLE_AUTH_CLIENT_CERT_URL,universe_domain:process.env.GOOGLE_AUTH_UNIVERSE_DOMAIN};if(o.client_email&&o.private_key)try{if(GH&&cn.existsSync(GH))return process.env.GOOGLE_APPLICATION_CREDENTIALS=GH,n;let s={type:o.type||"service_account",project_id:o.project_id||ZN(),private_key:o.private_key.replace(/\\n/g,`
1231
+ `);return{...s!==void 0?{system:s}:{},messages:t}},jvr=r=>{let e=Object.entries(r);if(e.length!==0)return e.map(([t,n])=>{let o=n,s=o.inputSchema??o.parameters,i=s?po(s):{type:"object",properties:{}},a=Nx(n);return{name:t,...o.description?{description:o.description}:{},input_schema:i,...a?{cache_control:a}:{}}})},qGe=r=>{if(!(!r||r==="auto")){if(r==="none")return{type:"none"};if(r==="required")return{type:"any"};if(typeof r=="object"){let e=r;if(e.type==="tool"&&e.toolName)return{type:"tool",name:e.toolName}}}},Gvr=r=>{switch(r){case"max_tokens":return"length";case"tool_use":return"tool-calls";case"refusal":return"content-filter";default:return"stop"}},HGe=6e5,Xce=class extends fo{client;authMethod;subscriptionTier;enableBetaFeatures;oauthToken;lastResponseMetadata=null;usageInfo=null;refreshPromise;constructor(e,t,n,o){let s=!!(o?.apiKey&&!o?.oauthToken),i=s?null:(o?.oauthToken?{accessToken:o.oauthToken}:null)??n?.oauthToken??GGe(),a=s?"api_key":n?.authMethod??Bvr(i),c=n?.subscriptionTier??(a==="oauth"?$vr(i):"api"),l=e||UH(),u=l;!process.env.ANTHROPIC_BASE_URL&&c!=="api"&&!JN(l,c)&&(u=OH(c),g.warn("Model not available for subscription tier, using recommended model",{requestedModel:l,subscriptionTier:c,recommendedModel:u})),super(u,"anthropic",t),this.enableBetaFeatures=n?.enableBetaFeatures??!0,this.oauthToken=i,this.subscriptionTier=c,this.authMethod=a;let p=this.getAuthHeaders(),f;if(g.debug("[AnthropicProvider] Constructor - checking OAuth:",{authMethod:this.authMethod,hasOAuthToken:!!this.oauthToken,hasAccessToken:!!this.oauthToken?.accessToken}),this.authMethod==="oauth"&&this.oauthToken){g.debug("[AnthropicProvider] Creating OAuth fetch wrapper...");let h=this.oauthToken,y=NGe(()=>h.accessToken,this.enableBetaFeatures,!1,!0);f=new Yp({apiKey:"oauth-authenticated",fetch:y,timeout:HGe}),g.debug("[AnthropicProvider] Anthropic SDK client created with OAuth fetch wrapper"),g.debug("Anthropic Provider initialized with OAuth",{modelName:this.modelName,provider:this.providerName,authMethod:this.authMethod,subscriptionTier:this.subscriptionTier,enableBetaFeatures:this.enableBetaFeatures,hasRefreshToken:!!this.oauthToken.refreshToken,tokenExpiry:this.oauthToken.expiresAt?new Date(this.oauthToken.expiresAt).toISOString():"none"})}else{let h=o?.apiKey??n?.apiKey??jGe(),y=(()=>{let x=process.env.ANTHROPIC_BASE_URL;if(!x)return;let v=x.replace(/\/+$/,""),T=v.replace(/\/v\d+$/,"");return T!==v&&g.debug("[AnthropicProvider] Stripping the version suffix from ANTHROPIC_BASE_URL \u2014 the official Anthropic SDK appends /v1 to the base URL itself.",{baseURL:lr(x),rewrittenTo:lr(T)}),T})();f=new Yp({apiKey:h,defaultHeaders:p,...y&&{baseURL:y},fetch:vt(),timeout:HGe}),g.debug("Anthropic Provider initialized with API key",{modelName:this.modelName,provider:this.providerName,authMethod:this.authMethod,subscriptionTier:this.subscriptionTier,enableBetaFeatures:this.enableBetaFeatures})}this.client=f,this.usageInfo={messagesUsed:0,messagesRemaining:-1,tokensUsed:0,tokensRemaining:-1,inputTokensUsed:0,outputTokensUsed:0,lastRequestTimestamp:0,isRateLimited:!1,requestCount:0,messageQuotaPercent:0,tokenQuotaPercent:0},g.debug("Anthropic Provider v2 initialized",{modelName:this.modelName,provider:this.providerName,authMethod:this.authMethod,subscriptionTier:this.subscriptionTier,enableBetaFeatures:this.enableBetaFeatures,betaFeatures:this.enableBetaFeatures?Yce["anthropic-beta"]:"disabled"})}getAuthHeaders(){let e={},t=!!process.env.ANTHROPIC_BASE_URL;if(this.enableBetaFeatures)if(t){let n=process.env.ANTHROPIC_ENABLE_LONG_CONTEXT_BETA==="1"||process.env.ANTHROPIC_ENABLE_LONG_CONTEXT_BETA==="true",o=[...WT,"fine-grained-tool-streaming-2025-05-14","interleaved-thinking-2025-05-14","redact-thinking-2026-02-12"];n&&o.push("context-1m-2025-08-07"),e["anthropic-beta"]=o.join(",")}else e["anthropic-beta"]=Yce["anthropic-beta"];return this.subscriptionTier!=="api"&&(e["x-subscription-tier"]=this.subscriptionTier),e}validateModelAccess(e){if(process.env.ANTHROPIC_BASE_URL)return g.debug("[validateModelAccess] Bypassing tier check (ANTHROPIC_BASE_URL set \u2014 proxy enforces access)",{model:e}),!0;if(this.subscriptionTier==="api")return!0;let t=JN(e,this.subscriptionTier);return t||g.debug("[validateModelAccess] Model not available for tier",{model:e,tier:this.subscriptionTier}),t}getUsageInfo(){return this.usageInfo}areBetaFeaturesEnabled(){return this.enableBetaFeatures}getModelCapabilities(){return NH(this.modelName||this.getDefaultModel())}getSubscriptionTier(){return this.subscriptionTier}getAuthMethod(){return this.authMethod}async refreshAuthIfNeeded(){if(this.authMethod!=="oauth"||!this.oauthToken){g.debug("Token refresh not applicable for API key authentication");return}if(!this.oauthToken.expiresAt){g.debug("Token has no expiry information, assuming valid");return}let e=Date.now(),t=this.oauthToken.expiresAt<=e,n=this.oauthToken.expiresAt<=e+3e5;if(!t&&!n){g.debug("OAuth token is still valid",{expiresInMs:this.oauthToken.expiresAt-e});return}if(!this.oauthToken.refreshToken){if(t)throw new Ot("OAuth token expired and no refresh token available. Please re-authenticate.",this.providerName);g.warn("OAuth token expiring soon but no refresh token available",{expiresInMs:this.oauthToken.expiresAt-e});return}if(this.refreshPromise){await this.refreshPromise;return}g.info("Refreshing OAuth token",{isExpired:t,expiresInMs:this.oauthToken.expiresAt-e});let o=this.oauthToken,s=o.refreshToken;this.refreshPromise=(async()=>{let a=new AbortController,c=setTimeout(()=>a.abort(),3e4),l=await fetch(MGe,{method:"POST",headers:{"Content-Type":"application/x-www-form-urlencoded","User-Agent":IC},body:new URLSearchParams({grant_type:"refresh_token",refresh_token:s,client_id:PGe}),signal:a.signal});if(clearTimeout(c),!l.ok){let p=await l.text();throw new Ot(`Failed to refresh OAuth token: ${l.status} ${p}`,this.providerName)}let u=await l.json();o.accessToken=u.access_token,o.refreshToken=u.refresh_token||o.refreshToken,o.expiresAt=u.expires_in?Date.now()+u.expires_in*1e3:void 0,o.tokenType=u.token_type||"Bearer";let d=o;try{let p=Zr(Em(),".neurolink");co(p)||RI(p,{recursive:!0});let f=Zr(p,"anthropic-credentials.json"),h=`${f}.tmp`,x={...co(f)?JSON.parse(hu(f,"utf-8")):{},type:"oauth",oauth:d,updatedAt:Date.now()};kI(h,JSON.stringify(x,null,2),{mode:384}),sX(h,f),g.debug("Refreshed OAuth credentials persisted to disk")}catch(p){g.warn("Failed to persist refreshed OAuth token to disk",{error:p instanceof Error?p.message:String(p)})}g.info("OAuth token refreshed successfully",{hasNewRefreshToken:!!u.refresh_token,expiresIn:u.expires_in})})();try{await this.refreshPromise}catch(i){throw i instanceof Ot?i:new Ot(`Failed to refresh OAuth token: ${i instanceof Error?i.message:String(i)}`,this.providerName)}finally{this.refreshPromise=void 0}}getLastResponseMetadata(){return this.lastResponseMetadata}updateResponseMetadata(e,t,n){this.lastResponseMetadata={rateLimit:zvr(e),requestId:t||(e instanceof Headers?e.get("x-request-id")||void 0:e["x-request-id"]),serverTiming:e instanceof Headers?e.get("server-timing")||void 0:e["server-timing"]};let o=this.lastResponseMetadata.rateLimit;this.usageInfo&&(this.usageInfo.requestCount++,this.usageInfo.messagesUsed++,this.usageInfo.lastRequestTimestamp=Date.now(),n&&(n.inputTokens!==void 0&&(this.usageInfo.inputTokensUsed+=n.inputTokens,this.usageInfo.tokensUsed+=n.inputTokens),n.outputTokens!==void 0&&(this.usageInfo.outputTokensUsed+=n.outputTokens,this.usageInfo.tokensUsed+=n.outputTokens)),o?.requestsRemaining!==void 0&&(this.usageInfo.messagesRemaining=o.requestsRemaining),o?.tokensRemaining!==void 0&&(this.usageInfo.tokensRemaining=o.tokensRemaining),o?.requestsLimit&&o.requestsLimit>0&&(this.usageInfo.messageQuotaPercent=Math.round((o.requestsLimit-(o.requestsRemaining??0))/o.requestsLimit*100)),o?.tokensLimit&&o.tokensLimit>0&&(this.usageInfo.tokenQuotaPercent=Math.round((o.tokensLimit-(o.tokensRemaining??0))/o.tokensLimit*100)),o?.retryAfter!==void 0?(this.usageInfo.isRateLimited=!0,this.usageInfo.rateLimitExpiresAt=Date.now()+o.retryAfter*1e3):(this.usageInfo.isRateLimited=!1,this.usageInfo.rateLimitExpiresAt=void 0)),o?.requestsRemaining!==void 0&&o.requestsRemaining<=5&&g.warn("Approaching Anthropic request rate limit",{remaining:o.requestsRemaining,limit:o.requestsLimit,reset:o.requestsReset}),o?.tokensRemaining!==void 0&&o.tokensLimit&&o.tokensRemaining<o.tokensLimit*.1&&g.warn("Approaching Anthropic token rate limit",{remaining:o.tokensRemaining,limit:o.tokensLimit,reset:o.tokensReset})}getProviderName(){return"anthropic"}getDefaultModel(){return UH()}getAISDKModel(){let e=this.client,t=this.providerName,n=this.modelName||UH(),o=i=>this.getTimeout(i??{}),s=()=>this.refreshAuthIfNeeded();return{specificationVersion:"v3",provider:t,modelId:n,supportedUrls:{},doGenerate:async i=>{await s();let{system:a,messages:c}=VGe(i.prompt),l=(i.tools??[]).filter(A=>A.type==="function").map(A=>{let I=Nx(A);return{name:A.name,...A.description?{description:A.description}:{},input_schema:A.inputSchema??{type:"object",properties:{}},...I?{cache_control:I}:{}}});l&&l.length===0&&(l=void 0);let u=i.toolChoice?qGe(i.toolChoice.type==="tool"?{type:"tool",toolName:i.toolChoice.toolName}:i.toolChoice.type):void 0,d;if(i.responseFormat?.type==="json"){d=i.responseFormat.name??"json";let A=i.responseFormat.schema??{type:"object"};l=[{name:d,description:i.responseFormat.description??"Respond by calling this tool with the answer as its input.",input_schema:A}],u={type:"tool",name:d}}let p=i.providerOptions?.anthropic?.thinking,f=qce({system:a,tools:l,messages:c}),h=Hce(c,FH-f),y={model:n,messages:h,max_tokens:C0(n,i.maxOutputTokens),...a?{system:a}:{},...i.temperature!==void 0&&i.temperature!==null&&!bre(n)?{temperature:i.temperature}:{},...i.topP!==void 0&&i.topP!==null?{top_p:i.topP}:{},...i.stopSequences&&i.stopSequences.length>0?{stop_sequences:i.stopSequences}:{},...l?{tools:l}:{},...u?{tool_choice:u}:{},...p?{thinking:p}:{}},x=i.timeout,v=x!=null,T=y.max_tokens>8192&&!v?Math.max(o(i),3e5):o(i),S=pi(T,t,"generate"),E;try{E=await e.messages.create(y,{signal:og(i.abortSignal,S?.controller.signal)})}finally{S?.cleanup()}let k=[];for(let A of E.content)A.type==="thinking"?k.push({type:"reasoning",text:A.thinking}):A.type==="text"?d||k.push({type:"text",text:A.text}):A.type==="tool_use"&&(d&&A.name===d?k.push({type:"text",text:v4(A.input)}):k.push({type:"tool-call",toolCallId:A.id,toolName:A.name,input:v4(A.input)}));let R=E.usage.cache_read_input_tokens??0,P=E.usage.cache_creation_input_tokens??0;return{content:k,finishReason:{unified:Gvr(E.stop_reason),raw:E.stop_reason??"stop"},usage:{inputTokens:{total:E.usage.input_tokens+R+P,noCache:E.usage.input_tokens,cacheRead:R,cacheWrite:P},outputTokens:{total:E.usage.output_tokens,text:E.usage.output_tokens,reasoning:void 0}},warnings:[],request:{body:y},response:{id:E.id,modelId:E.model,headers:{},body:E}}},doStream:()=>{throw new Error(`${t}: doStream is not implemented on the delegating model \u2014 the streaming path uses executeStream directly.`)}}}formatProviderError(e){if(e instanceof rr)return new zt(`Request timed out after ${e.timeout}ms`,this.providerName);let t=e,n=typeof t?.message=="string"?t.message:"Unknown error";return n.includes("API_KEY_INVALID")||n.includes("Invalid API key")?new Ot("Invalid Anthropic API key. Please check your ANTHROPIC_API_KEY environment variable.",this.providerName):n.includes("rate limit")||n.includes("too_many_requests")||n.includes("429")?new tr("Anthropic rate limit exceeded. Please try again later.",this.providerName):n.includes("ECONNRESET")||n.includes("ENOTFOUND")||n.includes("ECONNREFUSED")||n.includes("network")||n.includes("connection")?new zt(`Connection error: ${n}`,this.providerName):n.includes("500")||n.includes("502")||n.includes("503")||n.includes("504")||n.includes("server error")?new qe(`Server error: ${n}`,this.providerName):new qe(`Anthropic error: ${n}`,this.providerName)}async generate(e,t){return await this.refreshAuthIfNeeded(),super.generate(e,t)}async executeStream(e,t){await this.refreshAuthIfNeeded(),this.validateStreamOptions(e);let n=this.getTimeout(e),o=pi(n,this.providerName,"stream"),s=new AbortController,i=bz([e.abortSignal,o?.controller.signal,s.signal]).signal,a,c,l,u;try{u=!e.disableTools&&this.supportsTools(),a=u?e.tools||await this.getAllTools():{},c=u?jvr(a):void 0;let L=await this.buildMessagesForStream(e);l=VGe(L)}catch(L){throw o?.cleanup(),this.handleProviderError(L)}let d=this.modelName||UH(),p=u&&c&&c.length>0?qGe(S4(e,a,u)):void 0,f=e.thinkingConfig?.enabled&&e.thinkingConfig.budgetTokens?{type:"enabled",budget_tokens:e.thinkingConfig.budgetTokens}:void 0,h=Uvr.startSpan("neurolink.provider.streamText",{kind:kr.CLIENT,attributes:{"gen_ai.system":"anthropic","gen_ai.request.model":d}}),y=e.maxSteps||Ws,x=this.neurolink?.getEventEmitter(),{pushChunk:v,nextChunk:T}=T4(),{usagePromise:S,finishPromise:E,resolveUsage:k,resolveFinish:R}=b4();S.then(L=>{h.setAttribute("gen_ai.usage.input_tokens",L.promptTokens||0),h.setAttribute("gen_ai.usage.output_tokens",L.completionTokens||0),L.cacheReadTokens&&h.setAttribute("gen_ai.usage.cached_input_tokens",L.cacheReadTokens);let $=wo(this.providerName,this.modelName,{input:L.promptTokens||0,output:L.completionTokens||0,total:L.totalTokens||0,...L.cacheReadTokens?{cacheReadTokens:L.cacheReadTokens}:{},...L.cacheCreationTokens?{cacheCreationTokens:L.cacheCreationTokens}:{}});$&&$>0&&h.setAttribute("neurolink.cost",$)}).catch(()=>{}),E.then(L=>{h.setAttribute("gen_ai.response.finish_reason",L||"unknown"),h.end()}).catch(()=>{h.end()});let P,A=this.client,I=[],D=(async()=>{let L=l.messages.slice(),$=0,U=0,V=0,B=0,K=null;for(let Z=0;Z<y;Z++){let q=qce({system:l.system,tools:c,messages:L}),ce=Hce(L,FH-q),ye={model:d,messages:ce,max_tokens:C0(d,e.maxTokens),stream:!0,...l.system?{system:l.system}:{},...e.temperature!==void 0&&e.temperature!==null&&!bre(d)?{temperature:e.temperature}:{},...c&&c.length>0?{tools:c}:{},...p?{tool_choice:p}:{},...f?{thinking:f}:{}},J=await A.messages.create(ye,{signal:i??void 0}),ve=new Map,fe=new Map,Ue=new Map,ge=new Map,xe=null;for await(let oe of J)if(oe.type==="message_start")$+=oe.message.usage.input_tokens??0,U+=oe.message.usage.output_tokens??0,V+=oe.message.usage.cache_read_input_tokens??0,B+=oe.message.usage.cache_creation_input_tokens??0;else if(oe.type==="content_block_start")ve.set(oe.index,oe.content_block.type),oe.content_block.type==="tool_use"&&ge.set(oe.index,{id:oe.content_block.id,name:oe.content_block.name,inputJson:""});else if(oe.type==="content_block_delta"){let Y=oe.delta;if(Y.type==="text_delta")fe.set(oe.index,(fe.get(oe.index)??"")+Y.text),v({content:Y.text});else if(Y.type==="thinking_delta"){let X=Ue.get(oe.index)??{text:"",signature:""};X.text+=Y.thinking,Ue.set(oe.index,X),v({content:"",reasoning:Y.thinking})}else if(Y.type==="signature_delta"){let X=Ue.get(oe.index)??{text:"",signature:""};X.signature+=Y.signature,Ue.set(oe.index,X)}else if(Y.type==="input_json_delta"){let X=ge.get(oe.index);X&&(X.inputJson+=Y.partial_json)}}else oe.type==="message_delta"&&(xe=oe.delta.stop_reason??xe,U+=oe.usage?.output_tokens??0);if(K=xe,xe!=="tool_use"||ge.size===0)break;let ne=[],he=[...ve.keys()].sort((oe,Y)=>oe-Y);for(let oe of he){let Y=ve.get(oe);if(Y==="thinking"){let X=Ue.get(oe);X&&X.text.length>0&&ne.push({type:"thinking",thinking:X.text,signature:X.signature})}else if(Y==="text"){let X=fe.get(oe);X&&X.length>0&&ne.push({type:"text",text:X})}else if(Y==="tool_use"){let X=ge.get(oe);if(X){let ze;try{ze=X.inputJson?JSON.parse(X.inputJson):{}}catch{ze={}}ne.push({type:"tool_use",id:X.id,name:X.name,input:ze})}}}L.push({role:"assistant",content:ne});let Q=[],ee=[],Ee=[];for(let oe of ge.values()){let Y;try{Y=oe.inputJson?JSON.parse(oe.inputJson):{}}catch{Y={}}ee.push({type:"tool-call",toolCallId:oe.id,toolName:oe.name,args:Y}),I.push(oe.name);let X=a[oe.name];try{if(!X?.execute)throw new Error(`Tool not found: ${oe.name}`);let ze=await X.execute(Y,{toolCallId:oe.id,messages:[]});Ee.push({type:"tool-result",toolCallId:oe.id,toolName:oe.name,result:ze}),Q.push({type:"tool_result",tool_use_id:oe.id,content:WGe(ze)})}catch(ze){let _t=ze instanceof Error?ze.message:String(ze);Ee.push({type:"tool-result",toolCallId:oe.id,toolName:oe.name,error:_t}),Q.push({type:"tool_result",tool_use_id:oe.id,content:`Error: ${_t}`,is_error:!0})}}Ay(x,Ee.map(oe=>({toolName:oe.toolName,result:oe.result,error:oe.error}))),this.handleToolExecutionStorage(ee,Ee,e,new Date).catch(oe=>{g.warn("[AnthropicProvider] Failed to store tool executions",{provider:this.providerName,error:oe instanceof Error?oe.message:String(oe)})}),L.push({role:"user",content:Q})}k({promptTokens:$,completionTokens:U,totalTokens:$+V+B+U,...V>0?{cacheReadTokens:V}:{},...B>0?{cacheCreationTokens:B}:{}}),R(K??"stop")})().catch(L=>{throw P=L,g.error("Anthropic: Stream error",{error:L instanceof Error?L.message:String(L)}),R("error"),this.formatProviderError(L)}).finally(()=>{o?.cleanup(),v({done:!0})});D.catch(()=>{});let z=this.providerName;return{stream:async function*(){let L=0;try{for(;;){let $=await T();if("done"in $)break;"content"in $&&typeof $.content=="string"&&$.content.length>0&&L++,yield $}if(await D,L===0&&I.length===0){g.warn(`${z}: Stream produced no output \u2014 emitting enriched sentinel`);let $=new Ja({message:"Stream produced no output"}),U=await Zm($,void 0,P);Qm(U),yield U}}catch($){let U=await Zm($,void 0,P);if(Qm(U),yield U,!Ja.isInstance($))throw $}finally{s.signal.aborted||s.abort()}}(),provider:this.providerName,model:this.modelName,toolCalls:[],toolResults:[]}}async isAvailable(){try{return GGe()||jGe(),!0}catch{return!1}}getModel(){return this.getAISDKModel()}}});var YGe={};te(YGe,{Agent:()=>kbr,BedrockClient:()=>qvr,BedrockRuntimeClient:()=>Zce,Blob:()=>Cbr,Client:()=>Abr,ConverseCommand:()=>Qce,ConverseStreamCommand:()=>$H,Cron:()=>cbr,Dispatcher:()=>Ibr,File:()=>_br,FlowProducer:()=>abr,FormData:()=>Ebr,GoogleAuth:()=>Yvr,HTTPException:()=>gbr,Headers:()=>wbr,Hippocampus:()=>ebr,HippocampusConfig:()=>tbr,Hono:()=>mbr,ImageFormat:()=>OC,InvokeEndpointCommand:()=>Kvr,InvokeEndpointWithResponseStreamCommand:()=>Jvr,Job:()=>sbr,ListFoundationModelsCommand:()=>Hvr,MockAgent:()=>Obr,Pool:()=>Rbr,Queue:()=>nbr,QueueScheduler:()=>ibr,Request:()=>Tbr,Response:()=>Sbr,SageMakerRuntimeClient:()=>Wvr,TextToSpeechClient:()=>Zvr,VertexAI:()=>Xvr,Webhook:()=>Qvr,Worker:()=>obr,convertToHtml:()=>pbr,cors:()=>fbr,createClient:()=>rbr,default:()=>Vvr,extractRawText:()=>dbr,fetch:()=>bbr,getGlobalDispatcher:()=>Mbr,interceptors:()=>Nbr,logger:()=>hbr,parseBuffer:()=>lbr,request:()=>Dbr,secureHeaders:()=>ybr,selectCover:()=>ubr,setGlobalDispatcher:()=>Pbr,streamSSE:()=>xbr,timeout:()=>vbr});var MC,Ki,Vvr,qvr,Hvr,Zce,Qce,$H,OC,Wvr,Kvr,Jvr,Yvr,Xvr,Zvr,Qvr,ebr,tbr,rbr,nbr,obr,sbr,ibr,abr,cbr,lbr,ubr,dbr,pbr,mbr,fbr,gbr,hbr,ybr,xbr,vbr,bbr,Tbr,Sbr,wbr,Ebr,_br,Cbr,kbr,Rbr,Abr,Ibr,Pbr,Mbr,Obr,Nbr,Dbr,ele=C(()=>{MC={get(r,e){return e==="__esModule"?!0:e==="default"?new Proxy({},{get:MC.get}):new Proxy(function(...t){return new Proxy({},{get:MC.get})},{get:MC.get,apply(t,n,o){return new Proxy({},{get:MC.get})},construct(t,n){return new Proxy({},{get:MC.get})}})}},Ki=new Proxy({},MC),Vvr=Ki,{BedrockClient:qvr,ListFoundationModelsCommand:Hvr,BedrockRuntimeClient:Zce,ConverseCommand:Qce,ConverseStreamCommand:$H,ImageFormat:OC}=Ki,{SageMakerRuntimeClient:Wvr,InvokeEndpointCommand:Kvr,InvokeEndpointWithResponseStreamCommand:Jvr}=Ki,{GoogleAuth:Yvr,VertexAI:Xvr,TextToSpeechClient:Zvr}=Ki,{Webhook:Qvr}=Ki,{Hippocampus:ebr,HippocampusConfig:tbr}=Ki,{createClient:rbr}=Ki,{Queue:nbr,Worker:obr,Job:sbr,QueueScheduler:ibr,FlowProducer:abr}=Ki,{Cron:cbr}=Ki,{parseBuffer:lbr,selectCover:ubr}=Ki,{extractRawText:dbr,convertToHtml:pbr}=Ki,{Hono:mbr}=Ki,{cors:fbr,HTTPException:gbr,logger:hbr,secureHeaders:ybr,streamSSE:xbr,timeout:vbr}=Ki,bbr=globalThis.fetch,Tbr=globalThis.Request,Sbr=globalThis.Response,wbr=globalThis.Headers,Ebr=globalThis.FormData,_br=globalThis.File,Cbr=globalThis.Blob,kbr=Ki.Agent,Rbr=Ki.Pool,Abr=Ki.Client,Ibr=Ki.Dispatcher,Pbr=()=>{},Mbr=()=>Ki,Obr=Ki.MockAgent,Nbr={redirect:()=>r=>r,retry:()=>r=>r},Dbr=async(r,e)=>{let t=await globalThis.fetch(r,e);return{statusCode:t.status,headers:Object.fromEntries(t.headers.entries()),body:{text:()=>t.text(),json:()=>t.json(),arrayBuffer:()=>t.arrayBuffer()}}}});function tle(r,e,t){return{input:{text:r.input?.text||"",images:r.input?.images,content:r.input?.content,files:r.input?.files,csvFiles:r.input?.csvFiles,pdfFiles:r.input?.pdfFiles},csvOptions:r.csvOptions,pdfOptions:r.pdfOptions,systemPrompt:r.systemPrompt,conversationHistory:r.conversationMessages,provider:e,model:t,temperature:r.temperature,maxTokens:r.maxTokens,enableAnalytics:r.enableAnalytics,enableEvaluation:r.enableEvaluation,context:r.context,fileRegistry:r.fileRegistry}}var XGe=C(()=>{"use strict"});var ZGe={};te(ZGe,{Agent:()=>wTr,BedrockClient:()=>Fbr,BedrockRuntimeClient:()=>$br,Blob:()=>STr,Client:()=>_Tr,ConverseCommand:()=>Bbr,ConverseStreamCommand:()=>zbr,Cron:()=>oTr,Dispatcher:()=>CTr,File:()=>TTr,FlowProducer:()=>nTr,FormData:()=>bTr,GoogleAuth:()=>Hbr,HTTPException:()=>dTr,Headers:()=>vTr,Hippocampus:()=>Ybr,HippocampusConfig:()=>Xbr,Hono:()=>lTr,ImageFormat:()=>jbr,InvokeEndpointCommand:()=>Vbr,InvokeEndpointWithResponseStreamCommand:()=>qbr,Job:()=>tTr,ListFoundationModelsCommand:()=>Ubr,MockAgent:()=>ATr,Pool:()=>ETr,Queue:()=>Qbr,QueueScheduler:()=>rTr,Request:()=>yTr,Response:()=>xTr,SageMakerRuntimeClient:()=>Gbr,TextToSpeechClient:()=>Kbr,VertexAI:()=>Wbr,Webhook:()=>Jbr,Worker:()=>eTr,convertToHtml:()=>cTr,cors:()=>uTr,createClient:()=>Zbr,default:()=>Lbr,extractRawText:()=>aTr,fetch:()=>hTr,getGlobalDispatcher:()=>RTr,interceptors:()=>ITr,logger:()=>pTr,parseBuffer:()=>sTr,request:()=>PTr,secureHeaders:()=>mTr,selectCover:()=>iTr,setGlobalDispatcher:()=>kTr,streamSSE:()=>fTr,timeout:()=>gTr});var NC,Ji,Lbr,Fbr,Ubr,$br,Bbr,zbr,jbr,Gbr,Vbr,qbr,Hbr,Wbr,Kbr,Jbr,Ybr,Xbr,Zbr,Qbr,eTr,tTr,rTr,nTr,oTr,sTr,iTr,aTr,cTr,lTr,uTr,dTr,pTr,mTr,fTr,gTr,hTr,yTr,xTr,vTr,bTr,TTr,STr,wTr,ETr,_Tr,CTr,kTr,RTr,ATr,ITr,PTr,QGe=C(()=>{NC={get(r,e){return e==="__esModule"?!0:e==="default"?new Proxy({},{get:NC.get}):new Proxy(function(...t){return new Proxy({},{get:NC.get})},{get:NC.get,apply(t,n,o){return new Proxy({},{get:NC.get})},construct(t,n){return new Proxy({},{get:NC.get})}})}},Ji=new Proxy({},NC),Lbr=Ji,{BedrockClient:Fbr,ListFoundationModelsCommand:Ubr,BedrockRuntimeClient:$br,ConverseCommand:Bbr,ConverseStreamCommand:zbr,ImageFormat:jbr}=Ji,{SageMakerRuntimeClient:Gbr,InvokeEndpointCommand:Vbr,InvokeEndpointWithResponseStreamCommand:qbr}=Ji,{GoogleAuth:Hbr,VertexAI:Wbr,TextToSpeechClient:Kbr}=Ji,{Webhook:Jbr}=Ji,{Hippocampus:Ybr,HippocampusConfig:Xbr}=Ji,{createClient:Zbr}=Ji,{Queue:Qbr,Worker:eTr,Job:tTr,QueueScheduler:rTr,FlowProducer:nTr}=Ji,{Cron:oTr}=Ji,{parseBuffer:sTr,selectCover:iTr}=Ji,{extractRawText:aTr,convertToHtml:cTr}=Ji,{Hono:lTr}=Ji,{cors:uTr,HTTPException:dTr,logger:pTr,secureHeaders:mTr,streamSSE:fTr,timeout:gTr}=Ji,hTr=globalThis.fetch,yTr=globalThis.Request,xTr=globalThis.Response,vTr=globalThis.Headers,bTr=globalThis.FormData,TTr=globalThis.File,STr=globalThis.Blob,wTr=Ji.Agent,ETr=Ji.Pool,_Tr=Ji.Client,CTr=Ji.Dispatcher,kTr=()=>{},RTr=()=>Ji,ATr=Ji.MockAgent,ITr={redirect:()=>r=>r,retry:()=>r=>r},PTr=async(r,e)=>{let t=await globalThis.fetch(r,e);return{statusCode:t.status,headers:Object.fromEntries(t.headers.entries()),body:{text:()=>t.text(),json:()=>t.json(),arrayBuffer:()=>t.arrayBuffer()}}}});var tVe={};te(tVe,{AmazonBedrockProvider:()=>nle});async function eVe(){return await Promise.resolve().then(()=>(QGe(),ZGe))}var rle,nle,rVe=C(()=>{"use strict";ele();dn();DO();zu();ki();Dt();kt();iM();H();Cd();PO();XGe();Iu();Dr();Al();rle=ke.provider,nle=class r extends fo{bedrockClient;conversationHistory=[];region;static extractRegionFromArn(e){return e?e.match(/^arn:aws[a-z0-9-]*:bedrock:([^:]+):/)?.[1]??null:null}constructor(e,t,n,o){super(e,"bedrock",t);let s=e||process.env.BEDROCK_MODEL||this.modelName,i=r.extractRegionFromArn(s);this.region=o?.region||n||i||process.env.AWS_REGION||"us-east-1",g.debug("[AmazonBedrockProvider] Starting constructor with extensive logging for debugging"),g.debug(`[AmazonBedrockProvider] Environment check: AWS_REGION=${process.env.AWS_REGION||"undefined"}, AWS_ACCESS_KEY_ID=${process.env.AWS_ACCESS_KEY_ID?"SET":"undefined"}, AWS_SECRET_ACCESS_KEY=${process.env.AWS_SECRET_ACCESS_KEY?"SET":"undefined"}`);try{g.debug("[AmazonBedrockProvider] Creating BedrockRuntimeClient with clean configuration"),this.bedrockClient=new Zce({region:this.region,...o?.accessKeyId&&o?.secretAccessKey?{credentials:{accessKeyId:o.accessKeyId,secretAccessKey:o.secretAccessKey,...o.sessionToken?{sessionToken:o.sessionToken}:{}}}:{}}),g.debug(`[AmazonBedrockProvider] Successfully created BedrockRuntimeClient with model: ${this.modelName}, region: ${this.region}`)}catch(a){throw g.error("[AmazonBedrockProvider] CRITICAL: Failed to initialize BedrockRuntimeClient:",a),a}}async performInitialHealthCheck(){let{BedrockClient:e,ListFoundationModelsCommand:t}=await eVe(),n=new e({region:this.region});try{g.debug("[AmazonBedrockProvider] Starting initial health check to validate credentials and connectivity");let o=new t({}),s=Date.now();await n.send(o);let i=Date.now()-s;g.debug(`[AmazonBedrockProvider] Health check PASSED - credentials valid, connectivity good, responseTime: ${i}ms`)}catch(o){let s=o instanceof Error?o.message:String(o);g.error("[AmazonBedrockProvider] Health check FAILED - this will cause production failures:",{error:s,errorType:o instanceof Error?o.constructor.name:"Unknown",region:process.env.AWS_REGION||"us-east-1",hasAccessKey:!!process.env.AWS_ACCESS_KEY_ID,hasSecretKey:!!process.env.AWS_SECRET_ACCESS_KEY})}finally{try{n.destroy()}catch{}}}getAISDKModel(){throw new Error("AmazonBedrockProvider does not use AI SDK models")}getProviderName(){return"bedrock"}getDefaultModel(){return process.env.BEDROCK_MODEL||"anthropic.claude-sonnet-4-6"}getDefaultEmbeddingModel(){return process.env.BEDROCK_EMBEDDING_MODEL||process.env.AWS_EMBEDDING_MODEL||"amazon.titan-embed-text-v2:0"}async generate(e){g.debug("[AmazonBedrockProvider] generate() called with conversation management");let t=Date.now(),n=typeof e=="string"?{prompt:e}:e;this.conversationHistory=[];let o=n.input;if(!!(o?.images?.length||o?.content?.length||o?.files?.length||o?.csvFiles?.length||o?.pdfFiles?.length)){g.debug("[AmazonBedrockProvider] Detected multimodal input in generate(), using multimodal message builder",{hasImages:!!o?.images?.length,imageCount:o?.images?.length||0,hasContent:!!o?.content?.length,contentCount:o?.content?.length||0,hasFiles:!!o?.files?.length,fileCount:o?.files?.length||0,hasCSVFiles:!!o?.csvFiles?.length,csvFileCount:o?.csvFiles?.length||0,hasPDFFiles:!!o?.pdfFiles?.length,pdfFileCount:o?.pdfFiles?.length||0});let d=tle(n,this.providerName,this.modelName),p=await y0(d,this.providerName,this.modelName);this.conversationHistory=this.convertToBedrockMessages(p)}else{g.debug("[AmazonBedrockProvider] Text-only input in generate(), using simple message builder");let u={role:"user",content:[{text:n.prompt}]};this.conversationHistory.push(u)}g.debug(`[AmazonBedrockProvider] Starting conversation with ${this.conversationHistory.length} message(s)`);let i,a,c;try{({text:i,usage:a,finishReason:c}=await this.conversationLoop(n))}catch(u){let d=this.neurolink?.getEventEmitter();throw d&&d.emit("generation:end",{provider:this.providerName,responseTime:Date.now()-t,timestamp:Date.now(),result:{content:"",usage:{input:0,output:0,total:0},model:this.modelName||this.getDefaultModel(),provider:this.providerName,finishReason:"error"},success:!1,error:u instanceof Error?u.message:String(u)}),u}let l=this.neurolink?.getEventEmitter();return l&&l.emit("generation:end",{provider:this.providerName,responseTime:Date.now()-t,timestamp:Date.now(),result:{content:i,usage:a,model:this.modelName||this.getDefaultModel(),provider:this.providerName,finishReason:c},success:!0}),{content:i,usage:a,model:this.modelName||this.getDefaultModel(),provider:this.getProviderName()}}async conversationLoop(e){let n=0,o=0,s=0,i;for(;n<10;){n++,g.debug(`[AmazonBedrockProvider] Conversation iteration ${n}`);try{g.debug("[AmazonBedrockProvider] About to call Bedrock API");let a=await this.callBedrock(e);g.debug("[AmazonBedrockProvider] Received Bedrock response",JSON.stringify(a,null,2)),o+=a.usage?.inputTokens??0,s+=a.usage?.outputTokens??0,a.stopReason&&(i=a.stopReason);let c=await this.handleBedrockResponse(a);if(g.debug("[AmazonBedrockProvider] Handle response result:",c),c.shouldContinue)g.debug("[AmazonBedrockProvider] Continuing conversation loop...");else return g.debug("[AmazonBedrockProvider] Conversation completed with final text"),g.debug(`[AmazonBedrockProvider] Returning final text: "${c.text}"`),{text:c.text||"",usage:{input:o,output:s,total:o+s},finishReason:i}}catch(a){throw g.error("[AmazonBedrockProvider] Error in conversation loop:",a),this.handleProviderError(a)}}throw new Error("Conversation loop exceeded maximum iterations")}async callBedrock(e){let t=Date.now();return rle.startActiveSpan("bedrock.generate",{kind:kr.CLIENT,attributes:{"gen_ai.system":"aws.bedrock","gen_ai.request.model":this.modelName||this.getDefaultModel(),"gen_ai.operation.name":"chat"}},async n=>{g.info(`[AmazonBedrockProvider] Starting Bedrock API call at ${new Date().toISOString()}`);try{let o="unknown";try{o=typeof this.bedrockClient.config.region=="function"?await this.bedrockClient.config.region():this.bedrockClient.config.region??"unknown"}catch{}g.info(`[AmazonBedrockProvider] Client region: ${o}`),g.info(`[AmazonBedrockProvider] Model: ${this.modelName||this.getDefaultModel()}`),g.info(`[AmazonBedrockProvider] Conversation history length: ${this.conversationHistory.length}`);let s=await this.getAllTools(),i=this.convertAISDKToolsToToolDefinitions(s),a=this.formatToolsForBedrock(i),c={modelId:this.modelName||this.getDefaultModel(),messages:this.convertToAWSMessages(this.conversationHistory),system:[{text:e.systemPrompt||"You are a helpful assistant with access to external tools. Use tools when necessary to provide accurate information."}],inferenceConfig:{maxTokens:e.maxTokens,temperature:e.temperature||.7}};a&&(c.toolConfig=a,g.info(`[AmazonBedrockProvider] Tools configured: ${a.tools?.length||0}`)),g.info("[AmazonBedrockProvider] Command input summary:"),g.info(` - Model ID: ${c.modelId}`),g.info(` - Messages count: ${c.messages?.length||0}`),g.info(` - System prompts: ${c.system?.length||0}`),g.info(` - Max tokens: ${c.inferenceConfig?.maxTokens}`),g.info(` - Temperature: ${c.inferenceConfig?.temperature}`),g.debug(`[AmazonBedrockProvider] Calling Bedrock with ${this.conversationHistory.length} messages and ${a?.tools?.length||0} tools`);let l=new Qce(c);g.debug("[Observability] Bedrock API request",{model:c.modelId,region:o,messageCount:c.messages?.length||0,toolCount:c.toolConfig?.tools?.length||0,maxTokens:c.inferenceConfig?.maxTokens});let u=Date.now(),d=await Be(this.bedrockClient.send(l),12e4,new Error("Bedrock API call timed out")),p=Date.now()-u;g.debug("[Observability] Bedrock API response",{model:c.modelId,durationMs:p,hasContent:!!d.output?.message?.content?.length,stopReason:d.stopReason,usage:d.usage?{inputTokens:d.usage.inputTokens,outputTokens:d.usage.outputTokens,totalTokens:(d.usage.inputTokens||0)+(d.usage.outputTokens||0)}:void 0}),g.info("[AmazonBedrockProvider] Bedrock API call successful"),g.info(`[AmazonBedrockProvider] API call duration: ${p}ms`);let f=Date.now()-t;g.info(`[AmazonBedrockProvider] Total callBedrock duration: ${f}ms`),n.setAttribute("gen_ai.response.stop_reason",d.stopReason??""),n.setAttribute("gen_ai.usage.input_tokens",d.usage?.inputTokens??0),n.setAttribute("gen_ai.usage.output_tokens",d.usage?.outputTokens??0);let h=wo(this.providerName,this.modelName,{input:d.usage?.inputTokens??0,output:d.usage?.outputTokens??0,total:(d.usage?.inputTokens??0)+(d.usage?.outputTokens??0)});return h&&h>0&&n.setAttribute("neurolink.cost",h),n.setStatus({code:Me.OK}),n.end(),d}catch(o){let s=Date.now()-t,i=o&&typeof o=="object"?o:null,a=i?.$metadata&&typeof i.$metadata=="object"?i.$metadata:null;throw g.debug("[Observability] Bedrock API request failed",{model:this.modelName||this.getDefaultModel(),durationMs:s,error:o instanceof Error?o.message:String(o),errorName:o instanceof Error?o.name:void 0,httpStatus:a?.httpStatusCode,awsRequestId:a?.requestId,awsErrorCode:i?.Code}),g.error(`[AmazonBedrockProvider] Bedrock API call failed after ${s}ms`),o instanceof Error&&g.error(`[AmazonBedrockProvider] Error: ${o.name} - ${o.message}`),a&&g.error("[AmazonBedrockProvider] AWS SDK metadata",{httpStatus:a.httpStatusCode,requestId:a.requestId,attempts:a.attempts,totalRetryDelay:a.totalRetryDelay}),n.setStatus({code:Me.ERROR,message:o instanceof Error?o.message:String(o)}),n.recordException(o instanceof Error?o:new Error(String(o))),n.end(),o}})}async handleBedrockResponse(e){if(g.debug(`[AmazonBedrockProvider] Received response with stopReason: ${e.stopReason}`),!e.output||!e.output.message)throw new Error("Invalid response structure from Bedrock API");let t=e.output.message,n=e.stopReason,o={role:"assistant",content:(t.content||[]).map(s=>{let i={};return"text"in s&&s.text&&(i.text=s.text),"toolUse"in s&&s.toolUse&&(i.toolUse={toolUseId:s.toolUse.toolUseId||"",name:s.toolUse.name||"",input:s.toolUse.input||{}}),"toolResult"in s&&s.toolResult&&(i.toolResult={toolUseId:s.toolResult.toolUseId||"",content:(s.toolResult.content||[]).map(a=>({text:typeof a=="object"&&"text"in a&&a.text||""})),status:s.toolResult.status||"unknown"}),i})};if(this.conversationHistory.push(o),n==="end_turn"||n==="stop_sequence")return{shouldContinue:!1,text:o.content.filter(i=>i.text).map(i=>i.text).join(" ")};if(n==="tool_use"){g.debug("[AmazonBedrockProvider] Tool use detected - executing tools immediately");let s=[];for(let i of o.content)if(i.toolUse){g.debug(`[AmazonBedrockProvider] Executing tool: ${i.toolUse.name}`);try{g.debug("[AmazonBedrockProvider] Debug toolUse.input:",JSON.stringify(i.toolUse.input,null,2));let a=await this.executeSingleTool(i.toolUse.name,i.toolUse.input||{},i.toolUse.toolUseId);g.debug(`[AmazonBedrockProvider] Tool execution successful: ${i.toolUse.name}`),s.push({toolResult:{toolUseId:i.toolUse.toolUseId,content:[{text:String(a)}],status:"success"}})}catch(a){g.error(`[AmazonBedrockProvider] Tool execution failed: ${i.toolUse.name}`,a);let c=a instanceof Error?a.message:String(a);s.push({toolResult:{toolUseId:i.toolUse.toolUseId,content:[{text:`Error executing tool ${i.toolUse.name}: ${c}`}],status:"error"}})}}if(s.length>0){let i={role:"user",content:s};this.conversationHistory.push(i),g.debug(`[AmazonBedrockProvider] Added ${s.length} tool results to conversation`)}return{shouldContinue:!0}}else return n==="max_tokens"?{shouldContinue:!1,text:o.content.filter(i=>i.text).map(i=>i.text).join(" ")}:(g.warn(`[AmazonBedrockProvider] Unrecognized stop reason "${n}", ending conversation.`),{shouldContinue:!1,text:""})}convertToAWSMessages(e){return e.map(t=>({role:t.role,content:t.content.map(n=>n.text?{text:n.text}:n.image?{image:n.image}:n.document?{document:n.document}:n.toolUse?{toolUse:{toolUseId:n.toolUse.toolUseId,name:n.toolUse.name,input:n.toolUse.input}}:n.toolResult?{toolResult:{toolUseId:n.toolResult.toolUseId,content:n.toolResult.content,status:n.toolResult.status}}:{text:""})}))}async executeSingleTool(e,t,n){return rle.startActiveSpan("bedrock.tool.execute",{kind:kr.CLIENT,attributes:{"gen_ai.tool.name":e,"gen_ai.system":"aws.bedrock"}},async o=>{try{g.debug(`[AmazonBedrockProvider] Executing single tool: ${e}`,{args:t});let s=await this.getAllTools(),i=this.convertAISDKToolsToToolDefinitions(s);if(!i[e])throw new Error(`Tool not found: ${e}`);let a=i[e];if(!a||!a.execute)throw new Error(`Tool ${e} does not have execute method`);let c=t||{};e==="list_directory"&&!c.path&&(c.path=".",g.debug("[AmazonBedrockProvider] Added default path '.' for list_directory tool")),g.debug("[AmazonBedrockProvider] Tool input parameters:",c);let l={};for(let[p,f]of Object.entries(c))(f===null||typeof f=="string"||typeof f=="number"||typeof f=="boolean"||typeof f=="object"&&f!==null)&&(l[p]=f);let u=await a.execute(l);g.debug("[AmazonBedrockProvider] Tool execution result:",{toolName:e,result:u});let d;if(u&&typeof u=="object"&&"success"in u)if(u.success&&u.data!==void 0)typeof u.data=="string"?d=u.data:typeof u.data=="object"?d=JSON.stringify(u.data,null,2):d=String(u.data);else if(u.error){let p=typeof u.error=="string"?u.error:u.error.message||"Tool execution failed";throw new Error(p)}else d="";else typeof u=="string"?d=u:typeof u=="object"?d=JSON.stringify(u,null,2):d=String(u);return o.setStatus({code:Me.OK}),d}catch(s){throw g.error("[AmazonBedrockProvider] Tool execution error:",{toolName:e,error:s}),o.setStatus({code:Me.ERROR,message:s.message}),o.recordException(s),s}finally{o.end()}})}convertAISDKToolsToToolDefinitions(e){let t={};for(let[n,o]of Object.entries(e))if("description"in o&&o.description){let i=o.parameters??o.inputSchema;t[n]={description:o.description,parameters:i,execute:async a=>{if("execute"in o&&o.execute)return{success:!0,data:await o.execute(a,{toolCallId:`tool_${Date.now()}`,messages:[]})};throw new Error(`Tool ${n} has no execute method`)}}}return t}formatToolsForBedrock(e){if(!e||Object.keys(e).length===0)return null;let t=Object.entries(e).map(([n,o])=>{let s;return o.parameters&&typeof o.parameters=="object"?"_def"in o.parameters?s=po(o.parameters):s=o.parameters:s={type:"object",properties:{},required:[]},(!s.type||s.type!=="object")&&(s={type:"object",properties:s.properties||{},required:s.required||[]}),{toolSpec:{name:n,description:o.description,inputSchema:{json:s}}}});return g.debug(`[AmazonBedrockProvider] Formatted ${t.length} tools for Bedrock`),{tools:t}}convertToBedrockMessages(e){return e.map(t=>{let n={role:t.role==="system"?"user":t.role,content:[]};return typeof t.content=="string"?n.content.push({text:t.content}):t.content.forEach(o=>{if(o.type==="text"&&o.text)n.content.push({text:o.text});else if(o.type==="image"&&o.image){let s=typeof o.image=="string"?Buffer.from(o.image.replace(/^data:image\/\w+;base64,/,""),"base64"):o.image,i=o.mimeType?.split("/")[1]||"png";i==="jpg"&&(i="jpeg"),n.content.push({image:{format:i==="jpeg"?OC.JPEG:i==="png"?OC.PNG:i==="gif"?OC.GIF:OC.WEBP,source:{bytes:s}}})}else if(o.type==="document"||o.type==="pdf"||o.type==="file"&&o.mimeType?.toLowerCase().startsWith("application/pdf")){let s;if(typeof o.data=="string"){let a=o.data.replace(/^data:application\/pdf;base64,/i,"");s=Buffer.from(a,"base64")}else s=o.data;let i=typeof o.name=="string"&&o.name?_c.basename(o.name):"document-pdf";i=i.replace(/\.[^.]+$/,""),i=i.replace(/[^a-zA-Z0-9\s\-()[\]]/g,"-"),i=i.replace(/-+/g,"-").trim().replace(/^-+|-+$/g,""),i=i||"document",n.content.push({document:{format:"pdf",name:i,source:{bytes:s}}})}}),n})}getBedrockClient(){return this.bedrockClient}async executeStream(e){return g.debug("[TRACE] executeStream ENTRY - starting streaming attempt"),g.info("[AmazonBedrockProvider] Attempting real streaming with ConverseStreamCommand"),rle.startActiveSpan("bedrock.stream",{kind:kr.CLIENT,attributes:{"gen_ai.system":"aws.bedrock","gen_ai.request.model":this.modelName||this.getDefaultModel(),"gen_ai.operation.name":"stream"}},async t=>{try{if(g.debug("[TRACE] executeStream TRY block - about to call streamingConversationLoop"),this.conversationHistory=[],!!(e.input?.images?.length||e.input?.content?.length||e.input?.files?.length||e.input?.csvFiles?.length||e.input?.pdfFiles?.length)){g.debug("[AmazonBedrockProvider] Detected multimodal input, using multimodal message builder",{hasImages:!!e.input?.images?.length,imageCount:e.input?.images?.length||0,hasContent:!!e.input?.content?.length,contentCount:e.input?.content?.length||0,hasFiles:!!e.input?.files?.length,fileCount:e.input?.files?.length||0,hasCSVFiles:!!e.input?.csvFiles?.length,csvFileCount:e.input?.csvFiles?.length||0,hasPDFFiles:!!e.input?.pdfFiles?.length,pdfFileCount:e.input?.pdfFiles?.length||0});let s=tle(e,this.providerName,this.modelName),i=await y0(s,this.providerName,this.modelName);this.conversationHistory=this.convertToBedrockMessages(i)}else{g.debug("[AmazonBedrockProvider] Text-only input, using simple message builder");let s={role:"user",content:[{text:e.input.text}]};this.conversationHistory.push(s)}g.debug(`[AmazonBedrockProvider] Starting streaming conversation with ${this.conversationHistory.length} message(s)`),g.debug("[TRACE] executeStream - calling streamingConversationLoop NOW");let o=await this.streamingConversationLoop(e,t);return g.debug("[TRACE] executeStream - streamingConversationLoop SUCCESS, returning result"),t.setStatus({code:Me.OK}),t.end(),o}catch(n){g.debug("[TRACE] executeStream CATCH - error caught from streamingConversationLoop");let o=n,s=o?.name==="AccessDeniedException"||o?.name==="UnauthorizedOperation"||o?.message?.includes("bedrock:InvokeModelWithResponseStream")||o?.message?.includes("streaming")||o?.message?.includes("ConverseStream");if(g.debug("[TRACE] executeStream CATCH - checking if permission error"),g.debug(`[TRACE] executeStream CATCH - isPermissionError=${s}`),s){g.debug("[TRACE] executeStream CATCH - PERMISSION ERROR DETECTED, starting fallback"),g.warn(`[AmazonBedrockProvider] Streaming permissions not available, falling back to generate method: ${o.message}`),t.addEvent("stream.fallback_to_generate",{reason:o.message});let i=await this.generate({prompt:e.input.text,input:e.input,maxTokens:e.maxTokens,temperature:e.temperature,systemPrompt:e.systemPrompt});if(!i)throw t.setStatus({code:Me.ERROR,message:"Generate method returned null result"}),t.end(),new Error("Generate method returned null result");t.setAttribute("gen_ai.response.stop_reason","fallback_end_turn"),t.setStatus({code:Me.OK}),t.end();let a=new ReadableStream({start(l){let d=(i.content||"").split(/(\s+)/),p="";for(let f=0;f<d.length;f++)p+=d[f],(f===d.length-1||p.length>50||/[.!?;,]\s*$/.test(p))&&p.length>0&&(l.enqueue({content:p}),p="");p.length>0&&l.enqueue({content:p}),l.close()}});return{stream:{async*[Symbol.asyncIterator](){let l=a.getReader();try{for(;;){let{done:u,value:d}=await l.read();if(u)break;yield d}}finally{l.releaseLock()}}},usage:{total:0,input:0,output:0},model:this.modelName||this.getDefaultModel(),provider:this.getProviderName(),metadata:{fallback:!0}}}throw t.setStatus({code:Me.ERROR,message:o instanceof Error?o.message:String(o)}),t.recordException(o instanceof Error?o:new Error(String(o))),t.end(),n}})}async streamingConversationLoop(e,t){g.debug("[TRACE] streamingConversationLoop ENTRY");let n=Date.now(),o=e.maxSteps||Ws,s=0,i=0,a=0,c;try{g.debug("[TRACE] streamingConversationLoop - testing first streaming call");let l=await this.prepareStreamCommand(e),u=new $H(l);g.debug("[Observability] Bedrock streaming API request",{model:l.modelId,messageCount:l.messages?.length||0,toolCount:l.toolConfig?.tools?.length||0}),t.addEvent("stream.api_call",{"bedrock.message_count":l.messages?.length||0,"bedrock.tool_count":l.toolConfig?.tools?.length||0});let d=Date.now(),p=await Be(this.bedrockClient.send(u),12e4,new Error("Bedrock streaming API call timed out"));g.debug("[Observability] Bedrock streaming API connection established",{model:l.modelId,durationMs:Date.now()-d,hasStream:!!p.stream});let f=new ReadableStream({start:async E=>{g.debug("[TRACE] streamingConversationLoop - ReadableStream start() called");try{let k="";if(p.stream){let R=[],P="";for await(let M of p.stream){if(M.contentBlockStart&&R.push({}),M.contentBlockDelta?.delta?.text){let D=M.contentBlockDelta.delta.text;P+=D,E.enqueue({content:D})}if(M.contentBlockStart?.start?.toolUse){let D=R[R.length-1];D.toolUse={name:M.contentBlockStart.start.toolUse.name||"",input:{},toolUseId:M.contentBlockStart.start.toolUse.toolUseId||`tool_${Date.now()}_${Math.random().toString(36).substring(2,11)}`}}if(M.contentBlockDelta?.delta?.toolUse){let D=R[R.length-1];D.toolUse||(D.toolUse={name:"",input:{},toolUseId:`tool_${Date.now()}_${Math.random().toString(36).substring(2,11)}`});let z=M.contentBlockDelta.delta.toolUse.input;if(z){if(typeof z=="string")D._inputBuffer=(D._inputBuffer||"")+z;else if(typeof z=="object"&&!Array.isArray(z)){let O=D.toolUse.input||{};D.toolUse.input={...O,...z}}}}if(M.contentBlockStop){let D=R[R.length-1];if(D?.toolUse&&D._inputBuffer){try{D.toolUse.input=JSON.parse(D._inputBuffer)}catch{D.toolUse.input={}}delete D._inputBuffer}P&&D&&!D.toolUse&&(D.text=P),P=""}if(M.messageStop){k=M.messageStop.stopReason||"end_turn";continue}if(M.metadata?.usage){i+=M.metadata.usage.inputTokens??0,a+=M.metadata.usage.outputTokens??0;break}}k&&(c=k);let A={role:"assistant",content:R};if(this.conversationHistory.push(A),t.addEvent("stream.turn_complete",{iteration:0,stop_reason:k}),k==="tool_use"){let M=R.flatMap(D=>D.toolUse?.name?[D.toolUse.name]:[]).join(", ");t.addEvent("stream.tool_use",{iteration:0,tool_names:M})}if(!await this.handleStreamStopReason(k,A,E,e)){t.setAttribute("gen_ai.response.stop_reason",k),E.close();return}}for(;s<o;){s++,g.debug(`[AmazonBedrockProvider] Streaming iteration ${s}`);let R=await this.prepareStreamCommand(e),{stopReason:P,assistantMessage:A,usage:I}=await this.processStreamResponse(R,E);if(I&&(i+=I.input,a+=I.output),P&&(c=P),t.addEvent("stream.turn_complete",{iteration:s,stop_reason:P}),P==="tool_use"){let D=A.content.flatMap(z=>z.toolUse?.name?[z.toolUse.name]:[]).join(", ");t.addEvent("stream.tool_use",{iteration:s,tool_names:D})}if(!await this.handleStreamStopReason(P,A,E,e)){t.setAttribute("gen_ai.response.stop_reason",P);break}}if(s>=o){t.setAttribute("gen_ai.response.stop_reason","max_iterations"),E.error(new Error("Streaming conversation exceeded maximum iterations"));return}E.close()}catch(k){g.debug("[TRACE] streamingConversationLoop - CATCH block hit in ReadableStream"),E.error(k)}}}),h=this.neurolink?.getEventEmitter(),y=this.convertToAsyncIterable(f),x=this,v,T=new Promise(E=>{v=E});return{stream:{async*[Symbol.asyncIterator](){let E=!1;try{yield*y}catch(k){throw E=!0,k}finally{let k={input:i,output:a,total:i+a};v(mx(x.providerName,x.modelName||x.getDefaultModel(),{usage:k},Date.now()-n,{requestId:`bedrock-stream-${Date.now()}`,streamingMode:!0})),h&&h.emit("generation:end",{provider:x.providerName,responseTime:Date.now()-n,timestamp:Date.now(),result:{content:"",usage:k,model:x.modelName||x.getDefaultModel(),provider:x.providerName,finishReason:E?"error":c},success:!E})}}},usage:{total:0,input:0,output:0},model:this.modelName||this.getDefaultModel(),provider:this.getProviderName(),analytics:T,metadata:{startTime:n,streamId:`bedrock-${Date.now()}`}}}catch(l){throw g.debug("[TRACE] streamingConversationLoop - first streaming call FAILED, throwing"),l}}convertToAsyncIterable(e){return{async*[Symbol.asyncIterator](){let t=e.getReader();try{for(;;){let{done:n,value:o}=await t.read();if(n)break;yield o}}finally{t.releaseLock()}}}}async prepareStreamCommand(e){g.shouldLog("debug")&&(g.debug(`[AmazonBedrockProvider] BEFORE conversion - conversationHistory length: ${this.conversationHistory.length}`),this.conversationHistory.forEach((a,c)=>{g.debug(`[AmazonBedrockProvider] Message ${c}: role=${a.role}, content=${JSON.stringify(a.content)}`)}));let t=e.tools||await this.getAllTools(),n=this.convertAISDKToolsToToolDefinitions(t),o=this.formatToolsForBedrock(n),s=this.convertToAWSMessages(this.conversationHistory);g.shouldLog("debug")&&(g.debug(`[AmazonBedrockProvider] AFTER conversion - messages length: ${s.length}`),s.forEach((a,c)=>{g.debug(`[AmazonBedrockProvider] Converted Message ${c}: role=${a.role}, content=${JSON.stringify(a.content)}`)}));let i={modelId:this.modelName||this.getDefaultModel(),messages:s,system:[{text:e.systemPrompt||"You are a helpful assistant with access to external tools. Use tools when necessary to provide accurate information."}],inferenceConfig:{maxTokens:e.maxTokens,temperature:e.temperature||.7}};return o&&(i.toolConfig=o),g.debug(`[AmazonBedrockProvider] Calling Bedrock streaming with ${this.conversationHistory.length} messages`),g.debug("[AmazonBedrockProvider] DEBUG - Conversation structure:"),this.conversationHistory.forEach((a,c)=>{g.debug(` Message ${c} (${a.role}): ${a.content.length} content items`),a.content.forEach((l,u)=>{let d=Object.keys(l);g.debug(` Content ${u}: ${d.join(", ")}`)})}),i}async processStreamResponse(e,t){let n=new $H(e);g.debug("[Observability] Bedrock streaming API request (continuation)",{model:e.modelId,messageCount:e.messages?.length||0});let o=Date.now(),s=await Be(this.bedrockClient.send(n),12e4,new Error("Bedrock streaming API call timed out"));if(g.debug("[Observability] Bedrock streaming API connection established (continuation)",{model:e.modelId,durationMs:Date.now()-o}),!s.stream)throw new Error("No stream returned from Bedrock");let i=[],a="",c="",l;for await(let d of s.stream){if(d.contentBlockStart&&i.push({}),d.contentBlockDelta?.delta?.text){let p=d.contentBlockDelta.delta.text;c+=p,t.enqueue({content:p})}if(d.contentBlockStart?.start?.toolUse){let p=i[i.length-1];p.toolUse={name:d.contentBlockStart.start.toolUse.name||"",input:{},toolUseId:d.contentBlockStart.start.toolUse.toolUseId||`tool_${Date.now()}_${Math.random().toString(36).substring(2,11)}`}}if(d.contentBlockDelta?.delta?.toolUse){let p=i[i.length-1];if(p.toolUse||(p.toolUse={name:"",input:{},toolUseId:`tool_${Date.now()}_${Math.random().toString(36).substring(2,11)}`}),d.contentBlockDelta.delta.toolUse.input){let f=d.contentBlockDelta.delta.toolUse.input;if(typeof f=="string")p._inputBuffer=(p._inputBuffer||"")+f;else if(f&&typeof f=="object"&&!Array.isArray(f)){let h=p.toolUse.input||{};p.toolUse.input={...h,...f}}}}if(d.contentBlockStop){let p=i[i.length-1];if(p?.toolUse&&p._inputBuffer){try{p.toolUse.input=JSON.parse(p._inputBuffer)}catch{p.toolUse.input={}}delete p._inputBuffer}c&&p&&!p.toolUse&&(p.text=c),c=""}if(d.messageStop){a=d.messageStop.stopReason||"end_turn";continue}if(d.metadata?.usage){let p=d.metadata.usage.inputTokens??0,f=d.metadata.usage.outputTokens??0;l={input:p,output:f,total:d.metadata.usage.totalTokens??p+f};break}}let u={role:"assistant",content:i};return this.conversationHistory.push(u),{stopReason:a,assistantMessage:u,usage:l}}async handleStreamStopReason(e,t,n,o){return e==="end_turn"||e==="stop_sequence"?(n.close(),!1):e==="tool_use"?(g.debug("[AmazonBedrockProvider] Tool use detected in streaming - executing tools"),await this.executeStreamTools(t.content,o),!0):(n.close(),!1)}async executeStreamTools(e,t){let n=[],o=0,s=[],i=[];for(let a of e)a.toolUse&&o++;g.debug(`[AmazonBedrockProvider] Found ${o} toolUse blocks in assistant message`);for(let a of e)if(a.toolUse){g.debug(`[AmazonBedrockProvider] Executing tool: ${a.toolUse.name}`),s.push({type:"tool-call",toolCallId:a.toolUse.toolUseId,toolName:a.toolUse.name,args:a.toolUse.input||{}});try{let c=await this.executeSingleTool(a.toolUse.name,a.toolUse.input||{},a.toolUse.toolUseId);g.debug(`[AmazonBedrockProvider] Tool execution successful: ${a.toolUse.name}`),i.push({type:"tool-result",toolCallId:a.toolUse.toolUseId,toolName:a.toolUse.name,result:c}),n.push({toolResult:{toolUseId:a.toolUse.toolUseId,content:[{text:String(c)}],status:"success"}})}catch(c){g.error(`[AmazonBedrockProvider] Tool execution failed: ${a.toolUse.name}`,c);let l=c instanceof Error?c.message:String(c);i.push({type:"tool-result",toolCallId:a.toolUse.toolUseId,toolName:a.toolUse.name,result:{error:l}}),n.push({toolResult:{toolUseId:a.toolUse.toolUseId,content:[{text:`Error executing tool ${a.toolUse.name}: ${l}`}],status:"error"}})}}if(g.debug(`[AmazonBedrockProvider] Created ${n.length} toolResult blocks for ${o} toolUse blocks`),n.length!==o)throw g.error(`[AmazonBedrockProvider] Mismatch: ${n.length} toolResults vs ${o} toolUse blocks`),new Error(`Tool mapping mismatch: ${n.length} toolResults for ${o} toolUse blocks`);if(n.length>0){let a={role:"user",content:n};this.conversationHistory.push(a),g.debug(`[AmazonBedrockProvider] Added ${n.length} tool results to conversation (1:1 mapping validated)`),Ay(this.neurolink?.getEventEmitter(),i.map(c=>{let l=c.result&&typeof c.result=="object"&&"error"in c.result;return{toolName:c.toolName,result:c.result,error:l?String(c.result.error):void 0}})),this.handleToolExecutionStorage(s,i,t,new Date).catch(c=>{g.warn("[AmazonBedrockProvider] Failed to store tool executions",{provider:this.providerName,error:c instanceof Error?c.message:String(c)})})}}async checkBedrockHealth(){let e=new AbortController,t=setTimeout(()=>e.abort(),1e4),{BedrockClient:n,ListFoundationModelsCommand:o}=await eVe(),s=new n({region:process.env.AWS_REGION||"us-east-1"});try{g.debug("[AmazonBedrockProvider] Starting health check...");let i=new o({}),c=(await s.send(i,{abortSignal:e.signal})).modelSummaries||[],l=c.filter(u=>u.modelLifecycle?.status==="ACTIVE");if(g.debug(`[AmazonBedrockProvider] Health check passed - Found ${l.length} active models out of ${c.length} total models`),l.length===0)throw new Error("No active foundation models available in the region")}catch(i){clearTimeout(t);let a=i;if(qr(i))throw new Error("Bedrock health check timed out after 10 seconds",{cause:i});let c=typeof a.message=="string"?a.message:"";throw c.includes("UnauthorizedOperation")||c.includes("AccessDenied")?new Error("Bedrock access denied. Check your AWS credentials and IAM permissions for bedrock:ListFoundationModels",{cause:i}):a.code==="ECONNREFUSED"||a.code==="ENOTFOUND"?new Error("Unable to connect to Bedrock service. Check your network connectivity and AWS region configuration",{cause:i}):(g.error("[AmazonBedrockProvider] Health check failed:",i),new Error(`Bedrock health check failed: ${c||"Unknown error"}`,{cause:i}))}finally{clearTimeout(t);try{s.destroy()}catch{}}}formatProviderError(e){let t=e instanceof Error?e.message:String(e);if(t.includes("AccessDeniedException"))return new Ot("AWS Bedrock access denied. Check your credentials and permissions.",this.providerName);if(t.includes("ValidationException"))return new qe(`Validation error: ${t}`,this.providerName);let n=e?.name??"",o=e?.code??"";return n==="ThrottlingException"||o==="ThrottlingException"?new tr(`Bedrock rate limit (throttled): ${e instanceof Error?e.message:String(e)}`,"bedrock"):new qe(`AWS Bedrock error: ${t}`,this.providerName)}async embed(e,t){let n=t||"amazon.titan-embed-text-v2:0";g.debug("Generating embedding",{provider:this.providerName,model:n,textLength:e.length});try{let{InvokeModelCommand:o}=await Promise.resolve().then(()=>(ele(),YGe)),s=JSON.stringify({inputText:e}),i=new o({modelId:n,contentType:"application/json",accept:"application/json",body:s}),a=await Be(this.bedrockClient.send(i),6e4,new Error("Bedrock embedding API call timed out")),c=JSON.parse(new TextDecoder().decode(a.body));if(!c.embedding||!Array.isArray(c.embedding))throw new Error("Invalid embedding response from Bedrock");return g.debug("Embedding generated successfully",{provider:this.providerName,model:n,embeddingDimension:c.embedding.length}),c.embedding}catch(o){throw g.error("Embedding generation failed",{error:o instanceof Error?o.message:String(o),model:n,textLength:e.length}),this.handleProviderError(o)}}async embedMany(e,t){let n=t||"amazon.titan-embed-text-v2:0";g.debug("Generating batch embeddings",{provider:this.providerName,model:n,count:e.length});try{let o=await Promise.all(e.map(s=>this.embed(s,n)));return g.debug("Batch embeddings generated successfully",{provider:this.providerName,model:n,count:o.length,embeddingDimension:o[0]?.length}),o}catch(o){throw g.error("Batch embedding generation failed",{error:o instanceof Error?o.message:String(o),model:n,count:e.length}),this.handleProviderError(o)}}}});var nVe={};te(nVe,{AzureOpenAIProvider:()=>ole});var ole,oVe=C(()=>{"use strict";Dt();H();go();no();_y();xi();Fg();ole=class extends Ur{azureDeployment;azureApiVersion;azureResourceOrigin;azureDeploymentPathPrefix;useMaxCompletionTokensOverride;constructor(e,t,n,o){let s=o?.apiKey||process.env.AZURE_OPENAI_API_KEY||"",i=process.env.AZURE_OPENAI_ENDPOINT||"",a;if(i)try{a=new URL(i.includes("://")?i:`https://${i}`)}catch{a=void 0}let c=a?.hostname??"",l=a?.pathname&&a.pathname!=="/"?a.pathname.replace(/\/+$/,""):"",u=/\.(openai|cognitiveservices)\.azure\.com$/.test(c),d;u?d="/openai":d=/\/openai(?:\/v\d+)?$/.test(l)?l:`${l}/openai`;let p=a?.origin??"",f=o?.deploymentName||e||process.env.AZURE_OPENAI_MODEL||process.env.AZURE_OPENAI_DEPLOYMENT||process.env.AZURE_OPENAI_DEPLOYMENT_ID||"gpt-4o",h=o?.apiVersion||process.env.AZURE_API_VERSION||"2025-04-01-preview",y=process.env.AZURE_OPENAI_USE_MAX_COMPLETION_TOKENS,x=o?.useMaxCompletionTokens??(y===void 0?void 0:/^(1|true|yes)$/i.test(y));s||Mr(gBe()),p||Mr(hBe()),super("azure",e,t,{baseURL:p,apiKey:s}),this.azureDeployment=f,this.azureApiVersion=h,this.azureResourceOrigin=p,this.azureDeploymentPathPrefix=d,this.useMaxCompletionTokensOverride=x,g.shouldLog("debug")&&g.debug("Azure OpenAI Provider initialized",Rz({deployment:this.azureDeployment,resourceOrigin:this.azureResourceOrigin,deploymentPathPrefix:this.azureDeploymentPathPrefix,apiVersion:this.azureApiVersion,provider:"azure"}))}suppressResponseFormatWithTools(){return!1}getProviderName(){return"azure"}getDefaultModel(){return this.azureDeployment}formatProviderError(e){if(e instanceof rr)return new zt(`Request timed out: ${e.message}`,"azure");let t=e;if(t?.message&&typeof t.message=="string"&&t.message.includes("401"))return new Ot("Invalid Azure OpenAI API key or endpoint.","azure");let n=t?.message&&typeof t.message=="string"?t.message:"Unknown error";return new qe(`Azure OpenAI error: ${n}`,"azure")}getChatCompletionsURL(e){let t=e||this.azureDeployment,n=this.azureDeploymentPathPrefix.replace(/\/+$/,"");return`${this.azureResourceOrigin}${n}/deployments/${t}/chat/completions?api-version=${this.azureApiVersion}`}getAuthHeaders(){return{"api-key":this.config.apiKey}}adjustRequestBody(e,t){let n=this.useMaxCompletionTokensOverride??XBe(t);return e.max_tokens!==void 0&&n?{...e,max_completion_tokens:e.max_tokens,max_tokens:void 0}:e}}});function sVe(r){return r.length>=8&&r[0]===137&&r[1]===80&&r[2]===78&&r[3]===71?"image/png":r.length>=3&&r[0]===255&&r[1]===216&&r[2]===255?"image/jpeg":r.length>=12&&r[0]===82&&r[1]===73&&r[2]===70&&r[3]===70&&r[8]===87&&r[9]===69&&r[10]===66&&r[11]===80?"image/webp":r.length>=6&&r[0]===71&&r[1]===73&&r[2]===70?"image/gif":"image/png"}var iVe=C(()=>{"use strict"});function sle(r){return r.map(e=>typeof e.content=="string"?{role:e.role,content:e.content}:{role:e.role,content:e.content.map(t=>t.type==="image"||t.type==="document"?{type:t.type,media_type:t.source.media_type,base64_chars:t.source.data.length}:t)})}var aVe=C(()=>{"use strict"});var BH,cVe=C(()=>{BH=r=>{if(typeof globalThis.process<"u")return globalThis.process.env?.[r]?.trim()||void 0;if(typeof globalThis.Deno<"u")return globalThis.Deno.env?.get?.(r)?.trim()||void 0}});var lVe=C(()=>{ko()});function zH(r){return r!=null&&typeof r=="object"&&!Array.isArray(r)}var ile,ale,cle=C(()=>{lVe();ile=r=>(ile=Array.isArray,ile(r)),ale=ile});function*MTr(r){if(!r)return;if(uVe in r){let{values:n,nulls:o}=r;yield*n.entries();for(let s of o)yield[s,null];return}let e=!1,t;r instanceof Headers?t=r.entries():ale(r)?t=r:(e=!0,t=Object.entries(r??{}));for(let n of t){let o=n[0];if(typeof o!="string")throw new TypeError("expected header name to be a string");let s=ale(n[1])?n[1]:[n[1]],i=!1;for(let a of s)a!==void 0&&(e&&!i&&(i=!0,yield[o,null]),yield[o,a])}}var uVe,dVe,pVe=C(()=>{cle();uVe=Symbol.for("brand.privateNullableHeaders");dVe=r=>{let e=new Headers,t=new Set;for(let n of r){let o=new Set;for(let[s,i]of MTr(n)){let a=s.toLowerCase();o.has(a)||(e.delete(s),o.add(a)),i===null?(e.delete(s),t.add(a)):(e.append(s,i),t.delete(a))}}return{[uVe]:!0,values:e,nulls:t}}});function DTr(r){let e=new cf(r);return delete e.batches,e}function LTr(r){let e=new vi(r);return delete e.messages.batches,e}var OTr,NTr,jH,lle=C(()=>{HN();Dce();JO();cVe();cle();pVe();HN();OTr="vertex-2023-10-16",NTr=new Set(["/v1/messages","/v1/messages?beta=true"]),jH=class extends oo{constructor({baseURL:e=BH("ANTHROPIC_VERTEX_BASE_URL"),region:t=BH("CLOUD_ML_REGION")??null,projectId:n=BH("ANTHROPIC_VERTEX_PROJECT_ID")??null,...o}={}){if(!t)throw new Error("No region was given. The client should be instantiated with the `region` option or the `CLOUD_ML_REGION` environment variable should be set.");if(!e)switch(t){case"global":e="https://aiplatform.googleapis.com/v1";break;case"us":e="https://aiplatform.us.rep.googleapis.com/v1";break;case"eu":e="https://aiplatform.eu.rep.googleapis.com/v1";break;default:e=`https://${t}-aiplatform.googleapis.com/v1`}if(super({baseURL:e,...o}),this.messages=DTr(this),this.beta=LTr(this),this.region=t,this.projectId=n,this.accessToken=o.accessToken??null,o.authClient&&o.googleAuth)throw new Error("You cannot provide both `authClient` and `googleAuth`. Please provide only one of them.");o.authClient?this._authClientPromise=Promise.resolve(o.authClient):(this._auth=o.googleAuth??new rie({scopes:"https://www.googleapis.com/auth/cloud-platform"}),this._authClientPromise=this._auth.getClient())}validateHeaders(){}async prepareOptions(e){let t=await this._authClientPromise,n=await t.getRequestHeaders(),o=t.projectId??n["x-goog-user-project"];!this.projectId&&o&&(this.projectId=o),e.headers=dVe([n,e.headers])}async buildRequest(e){if(zH(e.body)&&(e.body={...e.body}),zH(e.body)&&(e.body.anthropic_version||(e.body.anthropic_version=OTr)),NTr.has(e.path)&&e.method==="post"){if(!this.projectId)throw new Error("No projectId was given and it could not be resolved from credentials. The client should be instantiated with the `projectId` option or the `ANTHROPIC_VERTEX_PROJECT_ID` environment variable should be set.");if(!zH(e.body))throw new Error("Expected request body to be an object for post /v1/messages");let t=e.body.model;e.body.model=void 0;let o=e.body.stream??!1?"streamRawPredict":"rawPredict";e.path=`/projects/${this.projectId}/locations/${this.region}/publishers/anthropic/models/${t}:${o}`}if(e.path==="/v1/messages/count_tokens"||e.path=="/v1/messages/count_tokens?beta=true"&&e.method==="post"){if(!this.projectId)throw new Error("No projectId was given and it could not be resolved from credentials. The client should be instantiated with the `projectId` option or the `ANTHROPIC_VERTEX_PROJECT_ID` environment variable should be set.");e.path=`/projects/${this.projectId}/locations/${this.region}/publishers/anthropic/models/count-tokens:rawPredict`}return super.buildRequest(e)}}});var ule={};te(ule,{AnthropicVertex:()=>jH,BaseAnthropic:()=>oo,default:()=>jH});var dle=C(()=>{lle();lle()});var hVe={};te(hVe,{GoogleVertexAI:()=>qH,GoogleVertexProvider:()=>qH,appendUserMessage:()=>gle,buildAnthropicHistoryMessages:()=>fle,default:()=>qTr,resolveVertexLocation:()=>gVe,stripAdditionalPropertiesDeep:()=>Wg});async function FTr(){return ple||(ple=await Promise.resolve().then(()=>(dle(),ule))),ple}function UTr(r){let e=[],t=new Map,n=0,o=s=>{let i=`${n}:${s??"x"}`,a=t.get(i);return a||(a={type:"tool_step",callParts:[],resultParts:[]},t.set(i,a),e.push(a)),a};for(let s of r){if(s.role==="tool_call"){o(s.metadata?.stepIndex).callParts.push({name:s.tool||"unknown",input:s.args||{}});continue}if(s.role==="tool_result"){o(s.metadata?.stepIndex).resultParts.push(s.content&&s.content.length>0?s.content:"(no output)");continue}let i=s.role==="assistant"?"assistant":s.role==="user"?"user":null;!i||!s.content||s.content.trim().length===0||(n++,e.push({type:"regular",role:i,parts:[s.content]}))}return e}function mle(r,e,t){let n=r[r.length-1];n&&n.role===e&&Array.isArray(n.content)?n.content.push(...t):r.push({role:e,content:[...t]})}function $Tr(r,e){let t=r.callParts,n=r.resultParts,o=Math.min(t.length,n.length);(o!==t.length||o!==n.length)&&g.debug("[GoogleVertex] Unbalanced tool step in Claude history replay",{calls:t.length,results:n.length,paired:o});let s=[],i=[];for(let a=0;a<o;a++){let c=`hist_${e}_${a}`;s.push({type:"tool_use",id:c,name:t[a].name,input:t[a].input}),i.push({type:"tool_result",tool_use_id:c,content:n[a]})}return{uses:s,results:i}}function BTr(r){let e=t=>Array.isArray(t.content)&&t.content.length>0&&t.content.every(n=>n.type==="tool_result");for(;r.length>0&&(r[0].role!=="user"||e(r[0]));)r.shift()}function fle(r){let e=[],t=0;for(let n of UTr(r)){if(n.type==="regular"){mle(e,n.role==="assistant"?"assistant":"user",[{type:"text",text:String(n.parts[0]??"")}]);continue}let{uses:o,results:s}=$Tr(n,t);o.length!==0&&(t++,mle(e,"assistant",o),mle(e,"user",s))}if(BTr(e),g.shouldLog("debug")){let n=e.flatMap(o=>Array.isArray(o.content)?o.content:[]);g.debug("[GoogleVertex] Replayed Claude history with tool turns",{historyMessages:e.length,toolUseBlocks:n.filter(o=>o.type==="tool_use").length,toolResultBlocks:n.filter(o=>o.type==="tool_result").length})}return e}function gle(r,e){let t=r[r.length-1];if(t&&t.role==="user"){let n=Array.isArray(t.content)?t.content:[{type:"text",text:t.content}],o=Array.isArray(e)?e:[{type:"text",text:e}];t.content=[...n,...o];return}r.push({role:"user",content:e})}function Wg(r){if(!r||typeof r!="object")return;let e=["additionalProperties","default","$schema","$id","$ref","definitions","$defs","examples","errorMessage"];for(let n of e)n in r&&delete r[n];typeof r.exclusiveMinimum=="boolean"&&(r.exclusiveMinimum===!0&&typeof r.minimum=="number"?(r.exclusiveMinimum=r.minimum,delete r.minimum):delete r.exclusiveMinimum),typeof r.exclusiveMaximum=="boolean"&&(r.exclusiveMaximum===!0&&typeof r.maximum=="number"?(r.exclusiveMaximum=r.maximum,delete r.maximum):delete r.exclusiveMaximum);let t=2147483647;if(typeof r.maximum=="number"&&r.maximum>t&&delete r.maximum,typeof r.minimum=="number"&&r.minimum<-t&&delete r.minimum,r.properties&&typeof r.properties=="object")for(let n of Object.values(r.properties))n&&typeof n=="object"&&Wg(n);if(r.items&&typeof r.items=="object")if(Array.isArray(r.items))for(let n of r.items)n&&typeof n=="object"&&Wg(n);else Wg(r.items);for(let n of["allOf","anyOf","oneOf"])if(Array.isArray(r[n]))for(let o of r[n])o&&typeof o=="object"&&Wg(o)}var ple,mVe,ZN,QN,gVe,XN,JT,zTr,GH,fVe,jTr,GTr,VTr,VH,qH,qTr,yVe=C(()=>{"use strict";Xn();dn();yp();zu();ki();px();Gj();mn();Co();Dt();kt();Wce();Use();PO();H();Jq();iVe();Yq();go();Iu();bie();M0();no();Oie();xM();Al();Dr();Cd();_y();aVe();BO();ple=null;mVe=()=>!0;ZN=()=>Mr(PBe()),QN=()=>process.env.GOOGLE_CLOUD_LOCATION||process.env.VERTEX_LOCATION||process.env.GOOGLE_VERTEX_LOCATION||"us-central1",gVe=(r,e)=>{let t=e||QN();if(!r)return t;let n=r.toLowerCase();return n.startsWith("gemini-")||n.includes("/gemini-")||xB.some(s=>n===s.toLowerCase()||n.includes(s.toLowerCase())||s.toLowerCase().includes(n))?process.env.GOOGLE_VERTEX_GLOBAL_LOCATION||"global":t},XN=gVe,JT=()=>process.env.VERTEX_MODEL||"gemini-2.5-flash",zTr=()=>!!(process.env.GOOGLE_APPLICATION_CREDENTIALS_NEUROLINK||process.env.GOOGLE_APPLICATION_CREDENTIALS||process.env.GOOGLE_SERVICE_ACCOUNT_KEY||process.env.GOOGLE_AUTH_CLIENT_EMAIL&&process.env.GOOGLE_AUTH_PRIVATE_KEY),GH=null,fVe=!1,jTr=r=>{if(fVe)return;fVe=!0;let e=()=>{try{cn.existsSync(r)&&cn.unlinkSync(r)}catch{}};process.once("exit",e),process.once("SIGINT",()=>{e(),process.exit(130)}),process.once("SIGTERM",()=>{e(),process.exit(143)})},GTr=async r=>{let e=r||QN(),n={project:ZN(),location:e,fetch:vt()},o={type:process.env.GOOGLE_AUTH_TYPE,project_id:process.env.GOOGLE_AUTH_BREEZE_PROJECT_ID,private_key:process.env.GOOGLE_AUTH_PRIVATE_KEY,client_email:process.env.GOOGLE_AUTH_CLIENT_EMAIL,client_id:process.env.GOOGLE_AUTH_CLIENT_ID,auth_uri:process.env.GOOGLE_AUTH_AUTH_URI,token_uri:process.env.GOOGLE_AUTH_TOKEN_URI,auth_provider_x509_cert_url:process.env.GOOGLE_AUTH_AUTH_PROVIDER_CERT_URL,client_x509_cert_url:process.env.GOOGLE_AUTH_CLIENT_CERT_URL,universe_domain:process.env.GOOGLE_AUTH_UNIVERSE_DOMAIN};if(o.client_email&&o.private_key)try{if(GH&&cn.existsSync(GH))return process.env.GOOGLE_APPLICATION_CREDENTIALS=GH,n;let s={type:o.type||"service_account",project_id:o.project_id||ZN(),private_key:o.private_key.replace(/\\n/g,`
1232
1232
  `),client_email:o.client_email,client_id:o.client_id||"",auth_uri:o.auth_uri||"https://accounts.google.com/o/oauth2/auth",token_uri:o.token_uri||"https://oauth2.googleapis.com/token",auth_provider_x509_cert_url:o.auth_provider_x509_cert_url||"https://www.googleapis.com/oauth2/v1/certs",client_x509_cert_url:o.client_x509_cert_url||"",universe_domain:o.universe_domain||"googleapis.com"},i=zZ.tmpdir(),a=`google-credentials-${Date.now()}-${Math.random().toString(36).substring(2,11)}.json`,c=_c.join(i,a);if(cn.writeFileSync(c,JSON.stringify(s,null,2),{mode:384}),process.env.GOOGLE_APPLICATION_CREDENTIALS=c,GH=c,jTr(c),cn.existsSync(c))return n}catch{}if(process.env.GOOGLE_APPLICATION_CREDENTIALS_NEUROLINK){let s=process.env.GOOGLE_APPLICATION_CREDENTIALS_NEUROLINK,i=!1;try{i=cn.existsSync(s)}catch{}if(i)return n}else if(process.env.GOOGLE_APPLICATION_CREDENTIALS){let s=process.env.GOOGLE_APPLICATION_CREDENTIALS,i=!1;try{i=cn.existsSync(s)}catch{}if(i)return n}return g.warn("No valid authentication found for Google Vertex AI",{authMethod:"none",authenticationAttempts:{principalAccountFile:{envVarSet:!!process.env.GOOGLE_APPLICATION_CREDENTIALS,filePath:process.env.GOOGLE_APPLICATION_CREDENTIALS||"NOT_SET",fileExists:!1},explicitCredentials:{hasClientEmail:!!process.env.GOOGLE_AUTH_CLIENT_EMAIL,hasPrivateKey:!!process.env.GOOGLE_AUTH_PRIVATE_KEY}},troubleshooting:["1. Ensure GOOGLE_APPLICATION_CREDENTIALS points to an existing file, OR","2. Set individual environment variables: GOOGLE_AUTH_CLIENT_EMAIL and GOOGLE_AUTH_PRIVATE_KEY"]}),n},VTr=async(r,e)=>{let t=r||QN();return{projectId:ZN(),region:t,...e!==void 0&&{timeout:e}}},VH=r=>r.toLowerCase().includes("claude"),qH=class r extends fo{projectId;location;registeredTools=new Map;toolContext={};static modelConfigCache=new Map;static modelConfigCacheTime=0;static CACHE_DURATION=300*1e3;static MAX_CACHE_SIZE=50;static maxTokensCache=new Map;static maxTokensCacheTime=0;constructor(e,t,n,o,s){super(e,"vertex",n),s&&(s.projectId&&(process.env.GOOGLE_CLOUD_PROJECT=String(s.projectId)),s.location&&(process.env.GOOGLE_CLOUD_LOCATION=String(s.location)),s.apiKey&&(process.env.GOOGLE_API_KEY=String(s.apiKey))),zTr()||Mr(MBe()),this.projectId=s?.projectId||ZN(),this.location=o||s?.location||QN(),g.debug("[GoogleVertexProvider] Constructor initialized",{regionParam:o,resolvedLocation:this.location,projectId:this.projectId}),g.debug("Google Vertex AI BaseProvider v2 initialized",{modelName:this.modelName,projectId:this.projectId,location:this.location,provider:this.providerName})}getProviderName(){return"vertex"}getDefaultModel(){return JT()}async getAISDKModel(){throw new Oe({code:ot.INVALID_CONFIGURATION,message:"GoogleVertexProvider no longer uses @ai-sdk/google-vertex. All models use native SDKs: @google/genai for Gemini, @anthropic-ai/vertex-sdk for Claude.",category:"configuration",severity:"critical",retriable:!1,context:{provider:this.providerName,model:this.modelName}})}initializeModelCreationLogging(){let e=`vertex-model-${Date.now()}-${Math.random().toString(36).substring(2,11)}`,t=Date.now(),n=process.hrtime.bigint(),o=this.modelName||JT();return{modelCreationId:e,modelCreationStartTime:t,modelCreationHrTimeStart:n,modelName:o}}async attemptAnthropicModelCreation(e,t,n,o){if(!VH(e))return null;if(g.debug("Creating Anthropic model using vertexAnthropic provider",{modelName:e}),!mVe())return g.warn("[GoogleVertexProvider] Anthropic support not available, falling back to Google model"),null;try{let i=await this.createAnthropicModel(e);if(i)return i}catch(i){g.error("[GoogleVertexProvider] \u274C LOG_POINT_V006_ANTHROPIC_MODEL_ERROR",{logPoint:"V006_ANTHROPIC_MODEL_ERROR",modelCreationId:t,timestamp:new Date().toISOString(),elapsedMs:Date.now()-n,elapsedNs:(process.hrtime.bigint()-o).toString(),modelName:e,error:i instanceof Error?i.message:String(i),errorName:i instanceof Error?i.name:"UnknownError",errorStack:i instanceof Error?i.stack:void 0,fallbackToGoogle:!0,message:"Anthropic model creation failed - falling back to Google model"})}return g.warn(`Anthropic model ${e} requested but not available, falling back to Google model`),null}async createGoogleVertexModel(e,t,n,o){g.debug("Creating Google Vertex model",{modelName:e,project:this.projectId,location:this.location});let s=process.hrtime.bigint();g.debug("[GoogleVertexProvider] \u2699\uFE0F LOG_POINT_V008_VERTEX_SETTINGS_START",{logPoint:"V008_VERTEX_SETTINGS_START",modelCreationId:t,timestamp:new Date().toISOString(),elapsedMs:Date.now()-n,elapsedNs:(process.hrtime.bigint()-o).toString(),vertexSettingsStartTimeNs:s.toString(),networkConfig:{projectId:this.projectId,location:this.location,expectedEndpoint:`https://${this.location}-aiplatform.googleapis.com`,httpProxy:process.env.HTTP_PROXY||process.env.http_proxy,httpsProxy:process.env.HTTPS_PROXY||process.env.https_proxy,noProxy:process.env.NO_PROXY||process.env.no_proxy,proxyConfigured:!!(process.env.HTTP_PROXY||process.env.HTTPS_PROXY||process.env.http_proxy||process.env.https_proxy)},message:"Starting Vertex settings creation with network configuration analysis"});try{let i=await GTr(this.location),c=process.hrtime.bigint()-s;return g.debug("[GoogleVertexProvider] \u2705 LOG_POINT_V009_VERTEX_SETTINGS_SUCCESS",{logPoint:"V009_VERTEX_SETTINGS_SUCCESS",modelCreationId:t,timestamp:new Date().toISOString(),elapsedMs:Date.now()-n,elapsedNs:(process.hrtime.bigint()-o).toString(),vertexSettingsDurationNs:c.toString(),vertexSettingsDurationMs:Number(c)/1e6,vertexSettingsAnalysis:{hasSettings:!!i,settingsType:typeof i,settingsKeys:i?Object.keys(i):[],projectId:i?.project,location:i?.location,hasFetch:!!i?.fetch,settingsSize:i?JSON.stringify(i).length:0},message:"Vertex settings created successfully"}),await this.createVertexInstance(i,e,t,n,o)}catch(i){let a=process.hrtime.bigint(),c=a-s,l=a-o;throw g.error("[GoogleVertexProvider] \u274C LOG_POINT_V014_VERTEX_SETTINGS_ERROR",{logPoint:"V014_VERTEX_SETTINGS_ERROR",modelCreationId:t,timestamp:new Date().toISOString(),totalElapsedMs:Date.now()-n,totalElapsedNs:l.toString(),totalErrorDurationMs:Number(l)/1e6,vertexSettingsDurationNs:c.toString(),vertexSettingsDurationMs:Number(c)/1e6,error:i instanceof Error?i.message:String(i),errorName:i instanceof Error?i.name:"UnknownError",errorStack:i instanceof Error?i.stack:void 0,networkDiagnostics:{errorCode:i?.code||"UNKNOWN",errorErrno:i?.errno||"UNKNOWN",errorAddress:i?.address||"UNKNOWN",errorPort:i?.port||"UNKNOWN",errorSyscall:i?.syscall||"UNKNOWN",errorHostname:i?.hostname||"UNKNOWN",isTimeoutError:i instanceof Error&&(i.message.includes("timeout")||i.message.includes("ETIMEDOUT")),isNetworkError:i instanceof Error&&(i.message.includes("ENOTFOUND")||i.message.includes("ECONNREFUSED")||i.message.includes("ETIMEDOUT")),isAuthError:i instanceof Error&&(i.message.includes("PERMISSION_DENIED")||i.message.includes("401")||i.message.includes("403")),infrastructureIssue:i instanceof Error&&i.message.includes("ETIMEDOUT")&&i.message.includes("aiplatform.googleapis.com")},errorEnvironment:{httpProxy:process.env.HTTP_PROXY||process.env.http_proxy,httpsProxy:process.env.HTTPS_PROXY||process.env.https_proxy,googleAppCreds:process.env.GOOGLE_APPLICATION_CREDENTIALS_NEUROLINK||process.env.GOOGLE_APPLICATION_CREDENTIALS||"NOT_SET",hasGoogleServiceKey:!!process.env.GOOGLE_SERVICE_ACCOUNT_KEY,nodeVersion:process.version,memoryUsage:process.memoryUsage(),uptime:process.uptime()},message:"Vertex settings creation failed - critical network/authentication error"}),i}}async createVertexInstance(e,t,n,o,s){throw new Oe({code:ot.INVALID_CONFIGURATION,message:"createVertexInstance is deprecated. Use executeNativeGemini3Stream/Generate or executeNativeAnthropicStream/Generate instead.",category:"configuration",severity:"critical",retriable:!1,context:{provider:this.providerName}})}async getModel(){let{modelCreationId:e,modelCreationStartTime:t,modelCreationHrTimeStart:n,modelName:o}=this.initializeModelCreationLogging(),s=await this.attemptAnthropicModelCreation(o,e,t,n);return s||await this.createGoogleVertexModel(o,e,t,n)}validateStreamOptionsOnly(e){this.validateStreamOptions(e)}async executeStream(e,t){let n=e.model||this.modelName||JT();return TP({name:"neurolink.provider.stream",tracer:ke.provider,attributes:{[_e.GEN_AI_SYSTEM]:this.providerName,[_e.GEN_AI_MODEL]:n,[_e.GEN_AI_OPERATION]:"stream",[_e.NL_PROVIDER]:this.providerName}},async o=>{let s=Date.now(),i=e.tools||{},c={...await Ke({name:"neurolink.message.build",tracer:ke.provider,attributes:{[_e.NL_PROVIDER]:this.providerName,"message.count":1,"message.build.count":1,"message.build.path":"vertex.native.stream"}},async()=>this.processCSVFilesForNativeSDK(e)),tools:i};try{let l;VH(n)?(g.info("[GoogleVertex] Routing Claude model to native @anthropic-ai/vertex-sdk",{model:n,totalToolCount:Object.keys(i).length}),l=await this.executeNativeAnthropicStream(c)):(g.info("[GoogleVertex] Routing Gemini model to native @google/genai",{model:n,totalToolCount:Object.keys(i).length}),l=await this.executeNativeGemini3Stream(c)),this.attachUsageAndCostAttributes(o,n,l?.usage);let u=this.wrapStreamResultWithLifecycle(e,l,s);return this.emitStreamEnd(n,s,!0,void 0,l.finishReason),u}catch(l){throw this.fireGenerateOnError(e,l,s),this.emitStreamEnd(n,s,!1,l),l}},o=>o.stream,(o,s)=>this.preserveStreamResultAccessors(o,{...o,stream:s}))}emitStreamEnd(e,t,n,o,s){let i=this.neurolink?.getEventEmitter();i&&i.emit("stream:end",{provider:this.providerName,responseTime:Date.now()-t,timestamp:Date.now(),result:{content:"",usage:{input:0,output:0,total:0},model:e,provider:this.providerName,finishReason:n?s??"stop":"error"},success:n,...o?{error:o instanceof Error?o.message:String(o)}:{}})}async createVertexGenAIClient(e){let t=ZN(),n=e||this.location||QN(),s=(await Promise.resolve().then(()=>(oM(),nM))).GoogleGenAI;if(!s)throw new Oe({code:ot.INVALID_CONFIGURATION,message:"@google/genai does not export GoogleGenAI",category:"configuration",severity:"critical",retriable:!1,context:{module:"@google/genai",expectedExport:"GoogleGenAI"}});let i=s;return new i({vertexai:!0,project:t,location:n,httpOptions:{fetch:vt()}})}async executeNativeGemini3Stream(e){let t=e.model||this.modelName||JT(),n=XN(t,e.region),o=await this.createVertexGenAIClient(n);g.debug("[GoogleVertex] Using native @google/genai for Gemini 3",{model:t,hasTools:!!e.tools&&Object.keys(e.tools).length>0,project:this.projectId,location:n});let s=[],i=[{text:e.input.text??""}],a=e.input;if(a?.pdfFiles&&a.pdfFiles.length>0){g.debug(`[GoogleVertex] Processing ${a.pdfFiles.length} PDF file(s) for native stream`);for(let Y of a.pdfFiles){let X;typeof Y=="string"?cn.existsSync(Y)?X=cn.readFileSync(Y):X=Buffer.from(Y,"base64"):X=Y;let ze=X.toString("base64");i.push({inlineData:{mimeType:"application/pdf",data:ze}})}}if(a?.images&&a.images.length>0){g.debug(`[GoogleVertex] Processing ${a.images.length} image(s) for native stream`);for(let Y of a.images){let X,ze="image/jpeg";if(typeof Y=="string")if(cn.existsSync(Y)){X=cn.readFileSync(Y);let Nt=_c.extname(Y).toLowerCase();Nt===".png"?ze="image/png":Nt===".gif"?ze="image/gif":Nt===".webp"&&(ze="image/webp")}else if(Y.startsWith("data:")){let Nt=Y.match(/^data:([^;]+);base64,(.+)$/);if(Nt)ze=Nt[1],X=Buffer.from(Nt[2],"base64");else continue}else if(Y.startsWith("http://")||Y.startsWith("https://"))try{let Nt=await fetch(Y);if(!Nt.ok){g.warn(`[GoogleVertex] Image fetch failed: ${Nt.status} ${Nt.statusText}, skipping`,{url:Y});continue}let sr=await Nt.arrayBuffer();X=Buffer.from(sr);let Ne=Nt.headers.get("content-type");Ne&&Ne.startsWith("image/")&&(ze=Ne.split(";")[0])}catch(Nt){g.warn(`[GoogleVertex] Image URL fetch threw, skipping: ${Nt instanceof Error?Nt.message:String(Nt)}`,{url:Y});continue}else X=Buffer.from(Y,"base64"),ze=this.detectImageType(X);else X=Y,ze=this.detectImageType(X);let _t=X.toString("base64");i.push({inlineData:{mimeType:ze,data:_t}})}}N0(s,e.conversationMessages),s.push({role:"user",parts:i});let c,l=new Hp;if(e.tools&&Object.keys(e.tools).length>0&&!e.disableTools){let Y=[];for(let[X,ze]of Object.entries(e.tools)){let _t={name:X,description:ze.description||`Tool: ${X}`},sr=ze.parameters||ze.inputSchema;if(sr){let Ne=po(sr,"openApi3"),ft=In(Ne);ft.$schema&&delete ft.$schema;let He=mi(ft);Wg(He),_t.parametersJsonSchema=He}Y.push(_t),ze.execute&&l.set(X,ze.execute)}c=[{functionDeclarations:Y}],g.debug("[GoogleVertex] Converted tools for native SDK",{toolCount:Y.length,toolNames:Y.map(X=>X.name)})}let u=e,d=!1;if(u.schema&&c){d=!0;let Y=po(u.schema,"openApi3"),X=In(Y);X.$schema&&delete X.$schema;let ze=mi(X),_t=c[0]?.functionDeclarations||[];_t.push({name:"final_result",description:"Return the final structured result. You MUST call this tool when you have gathered all information and are ready to provide the final answer. The arguments should contain the structured data matching the expected schema.",parametersJsonSchema:ze}),c=[{functionDeclarations:_t}],g.debug("[GoogleVertex] Added final_result tool for structured output with tools (stream)",{schemaKeys:Object.keys(ze),totalTools:_t.length})}let p={temperature:e.temperature??1,maxOutputTokens:e.maxTokens};HO(t)&&(p.maxOutputTokens&&p.maxOutputTokens>il&&(g.warn(`[GoogleVertex] Capping maxOutputTokens from ${p.maxOutputTokens} to ${il} for ${t}`),p.maxOutputTokens=il),p.maxOutputTokens||(p.maxOutputTokens=il)),e.topP!==void 0&&(p.topP=e.topP),e.topK!==void 0&&(p.topK=e.topK),e.stopSequences&&e.stopSequences.length>0&&(p.stopSequences=e.stopSequences),c&&(p.tools=c);let f=e.systemPrompt||"";d&&(f=f+`
1233
1233
 
1234
1234
  IMPORTANT: When you have gathered all necessary information and are ready to provide your final answer, you MUST call the 'final_result' tool with the structured data. Do not return the final answer as plain text - always use the final_result tool.`),f&&(p.systemInstruction=f);let h=eN(e.thinkingConfig);if(h&&(p.thinkingConfig=h),(u.output?.format==="json"||u.schema)&&!d&&!c&&(p.responseMimeType="application/json",u.schema)){let Y=po(u.schema,"openApi3"),X=In(Y);X.$schema&&delete X.$schema;let ze=mi(X);Wg(ze),p.responseSchema=ze,g.debug("[GoogleVertex] Added responseSchema for JSON output (stream)",{schemaKeys:Object.keys(ze)})}let y=Date.now(),x=e.maxSteps||Ws,v=Number.isFinite(x)&&x>0?Math.min(Math.floor(x),100):Math.min(Ws,100),T=[...s],S="",E,k=[],R=[],P=0,A,I=new Map,M=oN(Ly("vertex",t)),D=!1,z=0,O=0,L=0,$=[],U=Il(e.timeout)??PE,V=e.toolTimeoutMs??ME,B=e.turnTimeoutMs??U,K=new AbortController,Z=()=>K.abort();e.abortSignal?.addEventListener("abort",Z);let q=nN({turnTimeoutMs:e.turnTimeoutMs,defaultTurnTimeoutMs:U,stallTimeoutMs:e.stallTimeoutMs,wrapupTimeLeadMs:e.wrapupTimeLeadMs,onDeadline:Y=>{g.warn(Y==="timeout"?`[GoogleVertex] Native Gemini turn exceeded its ${B}ms time budget \u2014 aborting`:`[GoogleVertex] Native Gemini turn made no progress for ${e.stallTimeoutMs}ms \u2014 aborting`),K.abort()}}),ce=K.signal;e.abortSignal?.aborted&&K.abort();let ye=!1,J=0,ve=!1,fe=!1;try{for(;P<v;){if(ce.aborted){ye=!0;break}if(M.shouldStop()){D=!0,g.warn(`[GoogleVertex] Gemini turn stopped by the context guard: projected prompt ~${M.projectedNextPromptTokens} tokens >= threshold ${M.thresholdTokens} (step ${P}) \u2014 synthesizing a final answer.`);break}P++,q.noteProgress(),g.debug(`[GoogleVertex] Native SDK step ${P}/${v}`);try{let Y=await o.models.generateContentStream({model:t,contents:T,config:{...p,abortSignal:ce}}),X=[],ze=[],_t;for await(let He of Y){q.noteProgress();let $e=He,St=$e.candidates?.[0],_=St?.finishReason;typeof _=="string"&&_&&(E=_,_t=_);let j=St?.content;if(j&&Array.isArray(j.parts))for(let le of j.parts)ze.push(le),typeof le.text=="string"&&le.text.length>0&&$.push(le.text);He.functionCalls&&X.push(...He.functionCalls);let W=$e.usageMetadata;W&&(W.promptTokenCount!==void 0&&W.promptTokenCount>0&&(z=W.promptTokenCount,M.noteUsage(W.promptTokenCount,W.candidatesTokenCount??0),L=Math.min(W.cachedContentTokenCount??0,W.promptTokenCount)),W.candidatesTokenCount!==void 0&&W.candidatesTokenCount>0&&(O=W.candidatesTokenCount))}let Nt=ze.filter(He=>typeof He.text=="string").map(He=>He.text).join("");if(X.length===0&&!Nt&&_t==="MALFORMED_FUNCTION_CALL"&&J<1&&!ce.aborted){J++,g.warn(`[GoogleVertex] Model returned MALFORMED_FUNCTION_CALL at step ${P}/${v}; retrying once with a corrective note.`),this.emitTurnEvent({phase:"malformed-retry",step:P,maxSteps:v}),ze.length>0&&T.push({role:"model",parts:ze}),T.push({role:"user",parts:[{text:"Your previous function call was malformed and could not be parsed. Re-issue it as a single valid function call, or answer in plain text."}]});continue}if(X.length===0){S=Nt;break}if(d){let He=X.find($e=>$e.name==="final_result");if(He){A=He.args,g.debug("[GoogleVertex] Received final_result tool call with structured output (stream)",{outputKeys:Object.keys(A)}),S=JSON.stringify(A);break}}g.debug(`[GoogleVertex] Executing ${X.length} function calls`),T.push({role:"model",parts:ze.length>0?ze:X.map(He=>({functionCall:He}))});let sr=[],Ne=[],ft=[];for(let He of X){if(ce.aborted){ye=!0;break}k.push({toolName:He.name,args:He.args}),Ne.push({toolName:He.name,args:He.args});let $e=I.get(He.name);if($e&&$e.count>=ro){g.warn(`[GoogleVertex] Tool "${He.name}" has exceeded retry limit (${ro}), skipping execution`);let St={error:`TOOL_PERMANENTLY_FAILED: The tool "${He.name}" has failed ${$e.count} times and will not be retried. Last error: ${$e.lastError}. Please proceed without using this tool or inform the user that this functionality is unavailable.`,status:"permanently_failed",do_not_retry:!0};sr.push({functionResponse:{name:He.name,response:St}}),R.push({name:He.name,input:He.args,output:St}),ft.push({toolName:He.name,output:St});continue}let ut=l.get(He.name);if(ut)try{let St={toolCallId:`${He.name}-${Date.now()}`,messages:[],abortSignal:ce};q.noteProgress();let _=await At(pE(Promise.resolve(ut(He.args,St)),ce),V,`Tool "${He.name}" execution timed out after ${V}ms`);q.noteProgress();let j=$O(_);if(j){let W=I.get(He.name)||{count:0,lastError:""};W.count++,W.lastError=j,I.set(He.name,W)}else I.delete(He.name);R.push({name:He.name,input:He.args,output:_}),sr.push({functionResponse:{name:He.name,response:{result:_}}}),ft.push({toolName:He.name,output:_})}catch(St){if(ce.aborted||ju(St)){ye=!0;break}q.noteProgress(),St instanceof Sl&&this.emitTurnEvent({phase:"tool-timeout",step:P,maxSteps:v,toolName:He.name});let _=St instanceof Error?St.message:"Unknown error",j=I.get(He.name)||{count:0,lastError:""};j.count++,j.lastError=_,I.set(He.name,j),g.warn(`[GoogleVertex] Tool "${He.name}" failed (attempt ${j.count}/${ro}): ${_}`);let W=j.count>=ro,le={error:W?`TOOL_PERMANENTLY_FAILED: The tool "${He.name}" has failed ${j.count} times with error: ${_}. This tool will not be retried. Please proceed without using this tool or inform the user that this functionality is unavailable.`:`TOOL_EXECUTION_ERROR: ${_}. Retry attempt ${j.count}/${ro}.`,status:W?"permanently_failed":"failed",do_not_retry:W,retry_count:j.count,max_retries:ro};sr.push({functionResponse:{name:He.name,response:le}}),R.push({name:He.name,input:He.args,output:le}),ft.push({toolName:He.name,output:le})}else{let St={error:`TOOL_NOT_FOUND: The tool "${He.name}" does not exist. Do not attempt to call this tool again.`,status:"permanently_failed",do_not_retry:!0},_=I.get(He.name)||{count:0,lastError:""};_.count++,_.lastError=St.error,I.set(He.name,_),sr.push({functionResponse:{name:He.name,response:St}}),R.push({name:He.name,input:He.args,output:St}),ft.push({toolName:He.name,output:St})}}if(ye)break;if(Ne.length>0||ft.length>0){let He=O0(ze);At(this.handleToolExecutionStorage(Ne.map(($e,ut)=>({...$e,...ut===0&&He?{thoughtSignature:He}:{},stepIndex:P})),ft.map($e=>({...$e,stepIndex:P})),e,new Date),Zf,"tool storage write timed out").catch($e=>{g.warn("[GoogleVertex] Failed to store native Gemini stream tool executions",{error:$e instanceof Error?$e.message:String($e)})})}q.shouldNudgeWrapup()&&sr.push({text:tN(d)}),T.push({role:"user",parts:sr});try{M.noteAppendedChars(JSON.stringify(sr).length)}catch{}}catch(Y){if(ce.aborted||ju(Y)){ye=!0;break}throw g.error("[GoogleVertex] Native SDK error",Y),this.handleProviderError(Y)}}if(!S&&(P>=v||ye||D)){ve=P>=v&&!ye;let Y=k.filter(X=>X.toolName!=="final_result").length;if($.length>0)g.warn(D?"[GoogleVertex] Tool call loop stopped by the context guard; returning text already gathered from prior steps.":`[GoogleVertex] Tool call loop terminated after reaching maxSteps (${v}); returning text already gathered from prior steps.`);else if(ye)g.warn(`[GoogleVertex] Tool call loop ended mid-turn (${q.timedOut?"turn time limit":q.stalled?"stall watchdog":"caller abort"}); returning an honest terminal message.`),S=this.buildLoopExitMessage({turnClock:q,wasAborted:ye,stallTimeoutMs:e.stallTimeoutMs,maxSteps:v,toolCallCount:Y});else{g.warn(D?"[GoogleVertex] Tool call loop stopped by the context guard with no text; synthesizing a final answer with tools disabled.":`[GoogleVertex] Tool call loop terminated after reaching maxSteps (${v}) with no text; synthesizing a final answer with tools disabled.`);let X=await this.synthesizeFinalAnswerWithoutTools(o,t,p,T,d,Il(e.timeout)??PE,ce);X.text?(fe=!0,S=X.text,$.push(X.text),z+=X.inputTokens,O+=X.outputTokens,X.finishReason&&(E=X.finishReason)):S=D?Gu(Y):Dg(v,Y)}}}finally{q.dispose(),e.abortSignal?.removeEventListener("abort",Z)}let Ue=ve&&!fe?"tool-calls":_ie(E),ge=rN({timedOut:q.timedOut,stalled:q.stalled,wasAborted:ye,cappedWithoutAnswer:ve&&!fe,contextCappedWithoutAnswer:D&&!fe,finishReason:Ue});ge!=="completed"&&this.emitTurnEvent({phase:ge,step:P,maxSteps:v,toolCallCount:k.filter(Y=>Y.toolName!=="final_result").length,elapsedMs:q.elapsedMs()});let xe=Date.now()-y,ne=A?[S]:$.length>0?$:[S];async function*he(){for(let Y of ne)Y.length>0&&(yield{content:Y})}let Q=k.filter(Y=>Y.toolName!=="final_result"),ee=R.filter(Y=>Y.name!=="final_result"),Ee=Math.max(0,z-L),oe={stream:he(),provider:this.providerName,model:t,finishReason:Ue,stopReason:ge,rawFinishReason:E,usage:{input:Ee,output:O,total:Ee+L+O,...L>0&&{cacheReadTokens:L}},toolCalls:Q.map(Y=>({toolName:Y.toolName,args:Y.args})),toolsUsed:Q.map(Y=>Y.toolName),toolExecutions:Ed(ee),metadata:{streamId:`native-vertex-${Date.now()}`,startTime:y,responseTime:xe,totalToolExecutions:Q.length,stopReason:ge,rawFinishReason:E,stepsUsed:P}};return A&&(oe.structuredOutput=A),oe}async executeNativeGemini3Generate(e){let t=e.model||this.modelName||JT(),n=XN(t,e.region),o=await this.createVertexGenAIClient(n);g.debug("[GoogleVertex] Using native @google/genai for Gemini 3 generate",{model:t,project:this.projectId,location:n});let s=e.input?.text||e.prompt||"Please respond.",i=[],a=[{text:s}],c=e.input;if(c?.pdfFiles&&c.pdfFiles.length>0){g.debug(`[GoogleVertex] Processing ${c.pdfFiles.length} PDF file(s) for native generate`);for(let oe of c.pdfFiles){let Y;typeof oe=="string"?cn.existsSync(oe)?Y=cn.readFileSync(oe):Y=Buffer.from(oe,"base64"):Y=oe;let X=Y.toString("base64");a.push({inlineData:{mimeType:"application/pdf",data:X}})}}if(c?.images&&c.images.length>0){g.debug(`[GoogleVertex] Processing ${c.images.length} image(s) for native generate`);for(let oe of c.images){let Y,X="image/jpeg";if(typeof oe=="string")if(cn.existsSync(oe)){Y=cn.readFileSync(oe);let _t=_c.extname(oe).toLowerCase();_t===".png"?X="image/png":_t===".gif"?X="image/gif":_t===".webp"&&(X="image/webp")}else if(oe.startsWith("data:")){let _t=oe.match(/^data:([^;]+);base64,(.+)$/);if(_t)X=_t[1],Y=Buffer.from(_t[2],"base64");else continue}else if(oe.startsWith("http://")||oe.startsWith("https://"))try{let _t=await fetch(oe);if(!_t.ok){g.warn(`[GoogleVertex] Image fetch failed: ${_t.status} ${_t.statusText}, skipping`,{url:oe});continue}let Nt=await _t.arrayBuffer();Y=Buffer.from(Nt);let sr=_t.headers.get("content-type");sr&&sr.startsWith("image/")&&(X=sr.split(";")[0])}catch(_t){g.warn(`[GoogleVertex] Image URL fetch threw, skipping: ${_t instanceof Error?_t.message:String(_t)}`,{url:oe});continue}else Y=Buffer.from(oe,"base64"),X=this.detectImageType(Y);else Y=oe,X=this.detectImageType(Y);let ze=Y.toString("base64");a.push({inlineData:{mimeType:X,data:ze}})}}N0(i,e.conversationMessages),i.push({role:"user",parts:a});let l=e.disableTools?{}:e.tools||{},u,d=new Hp;if(Object.keys(l).length>0){let oe=[];for(let[Y,X]of Object.entries(l)){let ze={name:Y,description:X.description||`Tool: ${Y}`},Nt=X.parameters||X.inputSchema;if(Nt){let sr=po(Nt,"openApi3"),Ne=In(sr);Ne.$schema&&delete Ne.$schema;let ft=mi(Ne);Wg(ft),ze.parametersJsonSchema=ft}oe.push(ze),X.execute&&d.set(Y,X.execute)}u=[{functionDeclarations:oe}],g.debug("[GoogleVertex] Converted tools for native SDK generate",{toolCount:oe.length,toolNames:oe.map(Y=>Y.name)})}let p=!1;if(e.schema&&u){p=!0;let oe=po(e.schema,"openApi3"),Y=In(oe);Y.$schema&&delete Y.$schema;let X=mi(Y),ze=u[0]?.functionDeclarations||[];ze.push({name:"final_result",description:"Return the final structured result. You MUST call this tool when you have gathered all information and are ready to provide the final answer. The arguments should contain the structured data matching the expected schema.",parametersJsonSchema:X}),u=[{functionDeclarations:ze}],g.debug("[GoogleVertex] Added final_result tool for structured output with tools (generate)",{schemaKeys:Object.keys(X),totalTools:ze.length})}let f={temperature:e.temperature??1,maxOutputTokens:e.maxTokens};HO(t)&&(f.maxOutputTokens&&f.maxOutputTokens>il&&(g.warn(`[GoogleVertex] Capping maxOutputTokens from ${f.maxOutputTokens} to ${il} for ${t}`),f.maxOutputTokens=il),f.maxOutputTokens||(f.maxOutputTokens=il)),e.topP!==void 0&&(f.topP=e.topP),e.topK!==void 0&&(f.topK=e.topK),e.stopSequences&&e.stopSequences.length>0&&(f.stopSequences=e.stopSequences),u&&(f.tools=u);let h=e.systemPrompt||"";p&&(h=h+`
@@ -22,6 +22,12 @@ export declare class AzureOpenAIProvider extends OpenAIChatCompletionsProvider {
22
22
  protected readonly azureDeploymentPathPrefix: string;
23
23
  protected readonly useMaxCompletionTokensOverride?: boolean;
24
24
  constructor(modelName?: string, sdk?: unknown, _region?: string, credentials?: NeurolinkCredentials["azure"]);
25
+ /**
26
+ * Azure OpenAI natively supports `response_format: json_schema` together
27
+ * with tool calling in one request, so structured output stays
28
+ * wire-enforced mid-loop instead of deferring to post-hoc coercion.
29
+ */
30
+ protected suppressResponseFormatWithTools(): boolean;
25
31
  protected getProviderName(): AIProviderName;
26
32
  /**
27
33
  * The "default model" for Azure is the deployment name — it's the
@@ -139,6 +139,14 @@ export class AzureOpenAIProvider extends OpenAIChatCompletionsProvider {
139
139
  // ===========================================================================
140
140
  // Abstract-hook implementations
141
141
  // ===========================================================================
142
+ /**
143
+ * Azure OpenAI natively supports `response_format: json_schema` together
144
+ * with tool calling in one request, so structured output stays
145
+ * wire-enforced mid-loop instead of deferring to post-hoc coercion.
146
+ */
147
+ suppressResponseFormatWithTools() {
148
+ return false;
149
+ }
142
150
  getProviderName() {
143
151
  return "azure";
144
152
  }
@@ -16,6 +16,12 @@ import { OpenAIChatCompletionsProvider } from "./openaiChatCompletionsBase.js";
16
16
  */
17
17
  export declare class OpenAIProvider extends OpenAIChatCompletionsProvider {
18
18
  constructor(modelName?: string, sdk?: unknown, _region?: string, credentials?: NeurolinkCredentials["openai"]);
19
+ /**
20
+ * OpenAI natively supports `response_format: json_schema` together with
21
+ * tool calling in one request, so structured output stays wire-enforced
22
+ * mid-loop instead of deferring to post-hoc coercion.
23
+ */
24
+ protected suppressResponseFormatWithTools(): boolean;
19
25
  protected getProviderName(): AIProviderName;
20
26
  protected getDefaultModel(): string;
21
27
  formatProviderError(error: unknown): Error;
@@ -74,6 +74,14 @@ export class OpenAIProvider extends OpenAIChatCompletionsProvider {
74
74
  // ===========================================================================
75
75
  // Abstract hook implementations
76
76
  // ===========================================================================
77
+ /**
78
+ * OpenAI natively supports `response_format: json_schema` together with
79
+ * tool calling in one request, so structured output stays wire-enforced
80
+ * mid-loop instead of deferring to post-hoc coercion.
81
+ */
82
+ suppressResponseFormatWithTools() {
83
+ return false;
84
+ }
77
85
  getProviderName() {
78
86
  return AIProviderNameEnum.OPENAI;
79
87
  }
@@ -62,6 +62,21 @@ export declare abstract class OpenAIChatCompletionsProvider extends BaseProvider
62
62
  * downgraded `json_schema` to `json_object`. Subclasses replicate that here.
63
63
  */
64
64
  protected adjustResponseFormat(rf: OpenAICompatResponseFormat | undefined, _modelId: string): OpenAICompatResponseFormat | undefined;
65
+ /**
66
+ * When true (default), `response_format` is NOT sent on requests that carry
67
+ * tools. The AI SDK sets responseFormat on EVERY step of a tool loop, and
68
+ * generic/proxy backends (LiteLLM→vllm/GLM, openai-compatible, local
69
+ * servers) may silently honor it over tool calling — answering with
70
+ * final-shape JSON on step 1 instead of running the agentic loop. No error
71
+ * is raised, so the runtime tools↔schema conflict detector cannot catch it.
72
+ * The schema is still enforced post-hoc (GenerationHandler coerces the final
73
+ * text against it) — the same contract as the Gemini tools↔schema exclusion.
74
+ * Mirrors the streaming path, which never sends response_format.
75
+ *
76
+ * Backends with first-party support for tools + json_schema in one request
77
+ * (OpenAI, Azure OpenAI) override this to false.
78
+ */
79
+ protected suppressResponseFormatWithTools(): boolean;
65
80
  /**
66
81
  * Hook to adjust the fully-built wire request body before it is sent, on
67
82
  * both the streaming and non-streaming paths. Default identity. Override for
@@ -76,6 +76,23 @@ export class OpenAIChatCompletionsProvider extends BaseProvider {
76
76
  adjustResponseFormat(rf, _modelId) {
77
77
  return rf;
78
78
  }
79
+ /**
80
+ * When true (default), `response_format` is NOT sent on requests that carry
81
+ * tools. The AI SDK sets responseFormat on EVERY step of a tool loop, and
82
+ * generic/proxy backends (LiteLLM→vllm/GLM, openai-compatible, local
83
+ * servers) may silently honor it over tool calling — answering with
84
+ * final-shape JSON on step 1 instead of running the agentic loop. No error
85
+ * is raised, so the runtime tools↔schema conflict detector cannot catch it.
86
+ * The schema is still enforced post-hoc (GenerationHandler coerces the final
87
+ * text against it) — the same contract as the Gemini tools↔schema exclusion.
88
+ * Mirrors the streaming path, which never sends response_format.
89
+ *
90
+ * Backends with first-party support for tools + json_schema in one request
91
+ * (OpenAI, Azure OpenAI) override this to false.
92
+ */
93
+ suppressResponseFormatWithTools() {
94
+ return true;
95
+ }
79
96
  /**
80
97
  * Hook to adjust the fully-built wire request body before it is sent, on
81
98
  * both the streaming and non-streaming paths. Default identity. Override for
@@ -221,6 +238,7 @@ export class OpenAIChatCompletionsProvider extends BaseProvider {
221
238
  const adjustResponseFormat = this.adjustResponseFormat.bind(this);
222
239
  const adjustRequestBody = this.adjustRequestBody.bind(this);
223
240
  const adjustBodyAfter400 = this.adjustBodyAfter400.bind(this);
241
+ const suppressResponseFormatWithTools = this.suppressResponseFormatWithTools.bind(this);
224
242
  const getTimeoutForOptions = (opts) => this.getTimeout((opts ?? {}));
225
243
  return {
226
244
  specificationVersion: "v3",
@@ -229,7 +247,9 @@ export class OpenAIChatCompletionsProvider extends BaseProvider {
229
247
  supportedUrls: {},
230
248
  doGenerate: async (options) => {
231
249
  const baseMessages = messageBuilderToOpenAI(options.prompt);
232
- const responseFormat = options.responseFormat
250
+ const hasTools = Array.isArray(options.tools) && options.tools.length > 0;
251
+ const responseFormat = options.responseFormat &&
252
+ !(hasTools && suppressResponseFormatWithTools())
233
253
  ? adjustResponseFormat(v3ResponseFormatToOpenAI(options.responseFormat), modelId)
234
254
  : undefined;
235
255
  // ensureJsonWordInBody runs LAST — on the body after adjustRequestBody —
@@ -22,6 +22,12 @@ export declare class AzureOpenAIProvider extends OpenAIChatCompletionsProvider {
22
22
  protected readonly azureDeploymentPathPrefix: string;
23
23
  protected readonly useMaxCompletionTokensOverride?: boolean;
24
24
  constructor(modelName?: string, sdk?: unknown, _region?: string, credentials?: NeurolinkCredentials["azure"]);
25
+ /**
26
+ * Azure OpenAI natively supports `response_format: json_schema` together
27
+ * with tool calling in one request, so structured output stays
28
+ * wire-enforced mid-loop instead of deferring to post-hoc coercion.
29
+ */
30
+ protected suppressResponseFormatWithTools(): boolean;
25
31
  protected getProviderName(): AIProviderName;
26
32
  /**
27
33
  * The "default model" for Azure is the deployment name — it's the
@@ -139,6 +139,14 @@ export class AzureOpenAIProvider extends OpenAIChatCompletionsProvider {
139
139
  // ===========================================================================
140
140
  // Abstract-hook implementations
141
141
  // ===========================================================================
142
+ /**
143
+ * Azure OpenAI natively supports `response_format: json_schema` together
144
+ * with tool calling in one request, so structured output stays
145
+ * wire-enforced mid-loop instead of deferring to post-hoc coercion.
146
+ */
147
+ suppressResponseFormatWithTools() {
148
+ return false;
149
+ }
142
150
  getProviderName() {
143
151
  return "azure";
144
152
  }
@@ -16,6 +16,12 @@ import { OpenAIChatCompletionsProvider } from "./openaiChatCompletionsBase.js";
16
16
  */
17
17
  export declare class OpenAIProvider extends OpenAIChatCompletionsProvider {
18
18
  constructor(modelName?: string, sdk?: unknown, _region?: string, credentials?: NeurolinkCredentials["openai"]);
19
+ /**
20
+ * OpenAI natively supports `response_format: json_schema` together with
21
+ * tool calling in one request, so structured output stays wire-enforced
22
+ * mid-loop instead of deferring to post-hoc coercion.
23
+ */
24
+ protected suppressResponseFormatWithTools(): boolean;
19
25
  protected getProviderName(): AIProviderName;
20
26
  protected getDefaultModel(): string;
21
27
  formatProviderError(error: unknown): Error;
@@ -74,6 +74,14 @@ export class OpenAIProvider extends OpenAIChatCompletionsProvider {
74
74
  // ===========================================================================
75
75
  // Abstract hook implementations
76
76
  // ===========================================================================
77
+ /**
78
+ * OpenAI natively supports `response_format: json_schema` together with
79
+ * tool calling in one request, so structured output stays wire-enforced
80
+ * mid-loop instead of deferring to post-hoc coercion.
81
+ */
82
+ suppressResponseFormatWithTools() {
83
+ return false;
84
+ }
77
85
  getProviderName() {
78
86
  return AIProviderNameEnum.OPENAI;
79
87
  }
@@ -62,6 +62,21 @@ export declare abstract class OpenAIChatCompletionsProvider extends BaseProvider
62
62
  * downgraded `json_schema` to `json_object`. Subclasses replicate that here.
63
63
  */
64
64
  protected adjustResponseFormat(rf: OpenAICompatResponseFormat | undefined, _modelId: string): OpenAICompatResponseFormat | undefined;
65
+ /**
66
+ * When true (default), `response_format` is NOT sent on requests that carry
67
+ * tools. The AI SDK sets responseFormat on EVERY step of a tool loop, and
68
+ * generic/proxy backends (LiteLLM→vllm/GLM, openai-compatible, local
69
+ * servers) may silently honor it over tool calling — answering with
70
+ * final-shape JSON on step 1 instead of running the agentic loop. No error
71
+ * is raised, so the runtime tools↔schema conflict detector cannot catch it.
72
+ * The schema is still enforced post-hoc (GenerationHandler coerces the final
73
+ * text against it) — the same contract as the Gemini tools↔schema exclusion.
74
+ * Mirrors the streaming path, which never sends response_format.
75
+ *
76
+ * Backends with first-party support for tools + json_schema in one request
77
+ * (OpenAI, Azure OpenAI) override this to false.
78
+ */
79
+ protected suppressResponseFormatWithTools(): boolean;
65
80
  /**
66
81
  * Hook to adjust the fully-built wire request body before it is sent, on
67
82
  * both the streaming and non-streaming paths. Default identity. Override for
@@ -76,6 +76,23 @@ export class OpenAIChatCompletionsProvider extends BaseProvider {
76
76
  adjustResponseFormat(rf, _modelId) {
77
77
  return rf;
78
78
  }
79
+ /**
80
+ * When true (default), `response_format` is NOT sent on requests that carry
81
+ * tools. The AI SDK sets responseFormat on EVERY step of a tool loop, and
82
+ * generic/proxy backends (LiteLLM→vllm/GLM, openai-compatible, local
83
+ * servers) may silently honor it over tool calling — answering with
84
+ * final-shape JSON on step 1 instead of running the agentic loop. No error
85
+ * is raised, so the runtime tools↔schema conflict detector cannot catch it.
86
+ * The schema is still enforced post-hoc (GenerationHandler coerces the final
87
+ * text against it) — the same contract as the Gemini tools↔schema exclusion.
88
+ * Mirrors the streaming path, which never sends response_format.
89
+ *
90
+ * Backends with first-party support for tools + json_schema in one request
91
+ * (OpenAI, Azure OpenAI) override this to false.
92
+ */
93
+ suppressResponseFormatWithTools() {
94
+ return true;
95
+ }
79
96
  /**
80
97
  * Hook to adjust the fully-built wire request body before it is sent, on
81
98
  * both the streaming and non-streaming paths. Default identity. Override for
@@ -221,6 +238,7 @@ export class OpenAIChatCompletionsProvider extends BaseProvider {
221
238
  const adjustResponseFormat = this.adjustResponseFormat.bind(this);
222
239
  const adjustRequestBody = this.adjustRequestBody.bind(this);
223
240
  const adjustBodyAfter400 = this.adjustBodyAfter400.bind(this);
241
+ const suppressResponseFormatWithTools = this.suppressResponseFormatWithTools.bind(this);
224
242
  const getTimeoutForOptions = (opts) => this.getTimeout((opts ?? {}));
225
243
  return {
226
244
  specificationVersion: "v3",
@@ -229,7 +247,9 @@ export class OpenAIChatCompletionsProvider extends BaseProvider {
229
247
  supportedUrls: {},
230
248
  doGenerate: async (options) => {
231
249
  const baseMessages = messageBuilderToOpenAI(options.prompt);
232
- const responseFormat = options.responseFormat
250
+ const hasTools = Array.isArray(options.tools) && options.tools.length > 0;
251
+ const responseFormat = options.responseFormat &&
252
+ !(hasTools && suppressResponseFormatWithTools())
233
253
  ? adjustResponseFormat(v3ResponseFormatToOpenAI(options.responseFormat), modelId)
234
254
  : undefined;
235
255
  // ensureJsonWordInBody runs LAST — on the body after adjustRequestBody —
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juspay/neurolink",
3
- "version": "10.2.0",
3
+ "version": "10.2.1",
4
4
  "packageManager": "pnpm@10.15.1",
5
5
  "description": "TypeScript AI SDK with 24+ LLM providers behind one consistent API. MCP-native (connect any MCP server), voice TTS/STT/realtime, RAG, agents, memory, context compaction. OpenAI · Anthropic · Gemini · Bedrock · Azure · Ollama · DeepSeek · NVIDIA NIM and more.",
6
6
  "author": {