@juspay/neurolink 10.1.0 → 10.1.2

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,16 @@
1
+ ## [10.1.2](https://github.com/juspay/neurolink/compare/v10.1.1...v10.1.2) (2026-07-20)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **(cache):** keep image content-hash dedup index resilient across eviction ([#1213](https://github.com/juspay/neurolink/issues/1213)) ([a722798](https://github.com/juspay/neurolink/commit/a7227986c0640be6ff72a42ab275c8666a78fb28))
6
+ - **(pdf):** pin pdfjs-dist to one version so page counting survives image conversion ([#1212](https://github.com/juspay/neurolink/issues/1212)) ([4eb5dfb](https://github.com/juspay/neurolink/commit/4eb5dfb83c933c5e2338ee65be6aee5c7edc34e6))
7
+
8
+ ## [10.1.1](https://github.com/juspay/neurolink/compare/v10.1.0...v10.1.1) (2026-07-20)
9
+
10
+ ### Bug Fixes
11
+
12
+ - **(timeout):** add missing litellm entry to DEFAULT_TIMEOUTS.providers ([c24a54c](https://github.com/juspay/neurolink/commit/c24a54ca2fa96e7e9cfc5bcb2a82b32dd3d3eecf))
13
+
1
14
  ## [10.1.0](https://github.com/juspay/neurolink/compare/v10.0.1...v10.1.0) (2026-07-20)
2
15
 
3
16
  ### Features
@@ -677,7 +677,7 @@ Warning: ${t.alerts.high} high-severity alerts detected.
677
677
 
678
678
  Generate a new, complete response that incorporates this feedback.
679
679
  `}}});var ku,sz=C(()=>{"use strict";vB();CB();rPe();SPe();PPe();zE();sMe();nz();lMe();dMe();mMe();CB();fMe();ku=class{contextBuilder;config;ragasEvaluator;constructor(e={}){this.config=e,this.contextBuilder=new IE,this.ragasEvaluator=new lv(this.config.evaluationModel,this.config.provider,this.config.threshold,this.config.promptGenerator)}async evaluate(e,t,n,o){let s=this.config.evaluationStrategy||"ragas",i=this.config.customEvaluator;switch(s){case"ragas":{let{evaluationResult:a,evalContext:c}=await this.evaluateWithRAGAS(e,t);return M7(c,a,n,o.offTopicThreshold,o.highSeverityThreshold)}case"custom":{if(i){let{evaluationResult:a,evalContext:c}=await i(e,t);return M7(c,a,n,o.offTopicThreshold,o.highSeverityThreshold)}throw new Error("Custom evaluator function not provided in config.")}default:throw new Error(`Unsupported evaluation strategy: ${s} `)}}async evaluateWithRAGAS(e,t){let n=this.contextBuilder.buildContext(e,t);return{evaluationResult:await this.ragasEvaluator.evaluate(n),evalContext:n}}}});function yQ(r={}){let e={id:"autoEvaluation",name:"Auto Evaluation",description:"Automatically evaluates response quality and retries if needed.",priority:90,defaultEnabled:!1};return g.debug("Auto-Evaluation Middleware Config:",r),{...{specificationVersion:"v3",wrapGenerate:async({doGenerate:n,params:o})=>{let s=o,i=await n(),a=i.reasoning,c=i.content.filter(h=>h.type==="text").map(h=>h.text),l=i.content.filter(h=>h.type==="tool-call"),u=i.usage.inputTokens.total??0,d=i.usage.outputTokens.total??0,p={content:c.join(""),finishReason:i.finishReason.unified,reasoning:typeof a=="string"?a:Array.isArray(a)?a.map(h=>typeof h=="string"?h:h?.text??JSON.stringify(h)).join(`
680
- `):void 0,usage:{input:u,output:d,total:u+d},toolCalls:l.length>0?l.map(h=>{let y;try{y=JSON.parse(h.input)}catch(x){g.warn(`Failed to parse tool call args for tool ${h.toolName}:`,x),y={raw:h.input}}return{toolCallId:h.toolCallId,toolName:h.toolName,args:y}}):void 0};if(r.blocking!==!1){let h=await hQ(r,s,p);return{...i,evaluationResult:h}}else return hQ(r,s,p).catch(h=>{g.error("Non-blocking auto-evaluation error:",h)}),i},wrapStream:async({doStream:n,params:o})=>{let s=o,i=await n(),[a,c]=i.stream.tee();return oPt(r,s,c).catch(l=>{g.error("Non-blocking stream auto-evaluation error:",l)}),{...i,stream:a}}},metadata:e}}async function hQ(r,e,t){let n=r.blocking!==!1,o=r.threshold??(Number(process.env.NEUROLINK_EVALUATION_THRESHOLD)||7);try{let i=await new ku({threshold:o,provider:r.provider,promptGenerator:r.promptGenerator,evaluationModel:r.evaluationModel}).evaluate(e,t,o,r);r.onEvaluationComplete&&await r.onEvaluationComplete(i)}catch(s){if(g.error("Error during auto-evaluation:",s),n)throw s}}async function oPt(r,e,t){let n="",o,s=[],i=t.getReader();try{for(;;){let{done:l,value:u}=await i.read();if(l)break;switch(u.type){case"text-delta":n+=u.delta;break;case"tool-call":{let d;try{d=JSON.parse(u.input)}catch(p){g.warn(`Failed to parse tool call args for tool ${u.toolName}:`,p),d={raw:u.input}}s.push({toolCallId:u.toolCallId,toolName:u.toolName,args:d})}break;case"finish":{let d=u.usage.inputTokens.total??0,p=u.usage.outputTokens.total??0;o={input:d,output:p,total:d+p}}break}}}finally{i.releaseLock()}let a={content:n,usage:o,toolCalls:s.length>0?s:void 0};r.blocking&&g.warn("Auto-evaluation 'blocking' mode is not supported for streaming responses. Evaluation will proceed non-blockingly.");let c={...r,blocking:!1};await hQ(c,e,a)}var gMe=C(()=>{"use strict";sz();H()});function hMe(r){try{Object.defineProperty(r,xQ,{value:!0,enumerable:!1,writable:!1,configurable:!1})}catch{}}function Ev(r){return r===null||typeof r!="object"?!1:r[xQ]===!0}function GE(r){r===null||typeof r!="object"||r[xQ]!==!0&&hMe(r)}function cz(r,e,t){if(typeof r=="function"&&!Ev(e)){e!==null&&typeof e=="object"&&hMe(e);try{let n=r(t);Promise.resolve(n).catch(()=>{})}catch{}}}var xQ,lz=C(()=>{"use strict";xQ=Symbol.for("neurolink.onErrorFired")});function bQ(r){if(r instanceof Error)return r;if(typeof r=="object"&&r!==null){let e=r,t=typeof e.message=="string"?e.message:String(r);return Object.assign(new Error(t),e)}return new Error(String(r))}function uz(r={}){return{...{specificationVersion:"v3",wrapGenerate:async({doGenerate:n})=>{let o=Date.now();try{let s=await n();if(r.onFinish)try{let i=s.content?.map(c=>c.type==="text"?c.text:"").join("")??"",a=r.onFinish({text:i,usage:s.usage?{promptTokens:s.usage.inputTokens?.total??0,completionTokens:s.usage.outputTokens?.total??0}:void 0,duration:Date.now()-o,finishReason:String(s.finishReason??"")});Promise.resolve(a).catch(c=>{g.warn("[LifecycleMiddleware] onFinish callback error:",c)})}catch(i){g.warn("[LifecycleMiddleware] onFinish callback error:",i)}return s}catch(s){let i=bQ(s);throw cz(r.onError,i,{error:i,duration:Date.now()-o,recoverable:JI(i)}),i}},wrapStream:async({doStream:n})=>{let o=Date.now();try{let s=await n();if(!r.onChunk&&!r.onFinish&&!r.onError)return s;let i=0,a="",c=new TransformStream({transform(l,u){try{if(l.type==="text-delta"&&(a+=l.textDelta),r.onChunk&&l.type)try{let d=r.onChunk({type:l.type,textDelta:l.type==="text-delta"?l.textDelta:void 0,sequenceNumber:i++});Promise.resolve(d).catch(p=>{g.warn("[LifecycleMiddleware] onChunk callback error:",p)})}catch(d){g.warn("[LifecycleMiddleware] onChunk callback error:",d)}u.enqueue(l)}catch(d){let p=bQ(d);throw cz(r.onError,p,{error:p,duration:Date.now()-o,recoverable:JI(p)}),p}},flush(){if(r.onFinish)try{let l=r.onFinish({text:a,duration:Date.now()-o});Promise.resolve(l).catch(u=>{g.warn("[LifecycleMiddleware] onFinish callback error:",u)})}catch(l){g.warn("[LifecycleMiddleware] onFinish callback error:",l)}}});return{...s,stream:s.stream.pipeThrough(c)}}catch(s){let i=bQ(s);throw cz(r.onError,i,{error:i,duration:Date.now()-o,recoverable:JI(i)}),i}}},metadata:{id:"lifecycle",name:"Lifecycle Callbacks",description:"Provides onFinish, onError, and onChunk callbacks for generation and streaming lifecycle events",priority:110,defaultEnabled:!1}}}var vQ=C(()=>{"use strict";H();kt();lz()});var EP,TQ=C(()=>{"use strict";PIe();h7();FIe();gMe();vQ();H();sv();EP=class{registry;presets=new Map;options;constructor(e={}){this.options=e,this.registry=new xB,this.initialize(e)}initialize(e){let t={analytics:bB,guardrails:x7,autoEvaluation:yQ,lifecycle:uz};if(this.registerPreset({name:"default",description:"Default preset with analytics enabled.",config:{analytics:{enabled:!0}}}),this.registerPreset({name:"all",description:"Enables all available middleware.",config:{analytics:{enabled:!0},guardrails:{enabled:!0}}}),this.registerPreset({name:"security",description:"Focuses on security with guardrails.",config:{guardrails:{enabled:!0}}}),g.debug("Initializing MiddlewareFactory",{options:e}),e.middleware){g.debug("Registering custom middleware");for(let n of e.middleware)this.register(n)}for(let n in t)if(!this.registry.has(n)){let o=t[n],s=e.middlewareConfig?.[n]?.config;g.debug(`Registering built-in middleware '${n}'`,s),this.registry.register(o(s))}}registerPreset(e,t=!1){if(this.presets.has(e.name)&&!t)throw new Error(`Preset with name '${e.name}' already exists. Use replace: true to override.`);this.presets.set(e.name,e)}register(e,t){this.registry.register(e,t)}applyMiddleware(e,t,n={}){let o=Date.now();try{let s={...this.options,...n,middlewareConfig:{...this.options.middlewareConfig,...n.middlewareConfig}},i=this.buildMiddlewareConfig(s);for(let[d,p]of Object.entries(i))if(g.debug(`Configuring middleware '${d}'`,{config:p}),p.enabled&&this.registry.has(d)){let f=this.getCreator(d);f&&this.registry.register(f(p.config),{replace:!0})}let a=this.registry.buildChain(t,i);if(a.length===0)return g.debug("No middleware to apply",{provider:t.provider}),e;g.debug(`Applying ${a.length} middleware to model`,{provider:t.provider,model:t.model,middlewareCount:a.length});let l=dB({model:e,middleware:a}),u=Date.now()-o;return g.debug("Middleware applied successfully",{provider:t.provider,middlewareCount:a.length,processingTime:u}),l}catch(s){return g.error("Failed to apply middleware",{provider:t.provider,error:s instanceof Error?s.message:String(s)}),e}}getCreator(e){let t={analytics:bB,guardrails:x7,autoEvaluation:yQ,lifecycle:uz};return g.debug("Getting creator for middleware ID:",e),t[e]}buildMiddlewareConfig(e){let t={},n=this.registry.list();for(let s of n)t[s.metadata.id]={enabled:!1,config:{}};let o=e.preset;if(!o&&(!e.middlewareConfig||Object.keys(e.middlewareConfig).length===0)&&(!e.enabledMiddleware||e.enabledMiddleware.length===0)&&(o="default"),o){let s=this.getPresetConfig(o);if(s)for(let[i,a]of Object.entries(s))t[i]&&(t[i]={...t[i],...a})}if(e.middlewareConfig)for(let[s,i]of Object.entries(e.middlewareConfig))t[s]={...t[s],...i};if(e.enabledMiddleware)for(let s of e.enabledMiddleware)t[s]&&(t[s].enabled=!0);if(e.disabledMiddleware)for(let s of e.disabledMiddleware)t[s]&&(t[s].enabled=!1);return t}getPresetConfig(e){let t=this.presets.get(e);return t?t.config:null}createContext(e,t,n={},o){return{provider:e,model:t,options:n,session:o,metadata:{timestamp:Date.now(),requestId:`${e}-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}}}validateConfig(e){let t=[],n=[];for(let[o,s]of Object.entries(e)){if(!this.registry.has(o)){t.push(`Middleware '${o}' is not registered`);continue}s.enabled!==void 0&&typeof s.enabled!="boolean"&&t.push(`Middleware '${o}' enabled property must be boolean`),s.config&&typeof s.config!="object"&&t.push(`Middleware '${o}' config property must be an object`),s.conditions?.providers&&s.conditions.providers.length===0&&n.push(`Middleware '${o}' has empty providers condition`)}return{isValid:t.length===0,errors:t,warnings:n}}getAvailablePresets(){return Array.from(this.presets.values()).map(e=>({name:e.name,description:e.description,middleware:Object.keys(e.config)}))}getChainStats(e,t){let n=this.registry.buildChain(e,t),o=this.registry.getAggregatedStats(),s={},i=0,a=0;for(let[c,l]of Object.entries(o))t[c]?.enabled&&(s[c]={applied:!0,executionTime:l.averageExecutionTime},i+=l.averageExecutionTime,a++);return{totalMiddleware:n.length,appliedMiddleware:a,totalExecutionTime:i,results:s}}createModelFactory(e,t={}){return async(n,o={})=>{let s=await e(),i={...t,...o,middlewareConfig:{...t.middlewareConfig,...o.middlewareConfig}};return this.applyMiddleware(s,n,i)}}}});var yMe,sPt,xMe,dz,SQ=C(()=>{yMe={setAttribute(){return this},setAttributes(){return this},addEvent(){return this},setStatus(){return this},updateName(){return this},end(){},isRecording(){return!1},recordException(){},spanContext(){return{traceId:"0",spanId:"0",traceFlags:0}}},sPt={startSpan(){return yMe},startActiveSpan(r,e,t){return(typeof e=="function"?e:t)(yMe)}},xMe=class{constructor(){}register(){}addSpanProcessor(){}getTracer(){return sPt}shutdown(){return Promise.resolve()}},dz=class{onStart(){}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}}});var pz,wQ=C(()=>{pz=class{export(){}shutdown(){return Promise.resolve()}}});var mz,EQ=C(()=>{mz=r=>({attributes:r||{},merge(){return this}})});var fz,gz,_Q=C(()=>{fz="service.name",gz="service.version"});var _Me={};te(_Me,{ATTR_SERVICE_NAME:()=>NPt,ATTR_SERVICE_VERSION:()=>DPt,AsyncLocalStorageContextManager:()=>MPt,BasicTracerProvider:()=>hPt,BatchLogRecordProcessor:()=>RPt,BatchSpanProcessor:()=>bPt,DiagConsoleLogger:()=>aPt,DiagLogLevel:()=>cPt,INVALID_SPAN_CONTEXT:()=>mPt,LangfuseSpanProcessor:()=>CPt,LoggerProvider:()=>kPt,MeterProvider:()=>APt,NodeSDK:()=>gPt,NodeTracerProvider:()=>yPt,OTLPLogExporter:()=>TPt,OTLPMetricExporter:()=>SPt,OTLPTraceExporter:()=>vPt,PeriodicExportingMetricReader:()=>IPt,SEMRESATTRS_SERVICE_NAME:()=>LPt,SEMRESATTRS_SERVICE_VERSION:()=>FPt,SeverityNumber:()=>PPt,SimpleSpanProcessor:()=>xPt,SpanKind:()=>EMe,SpanStatusCode:()=>wMe,TraceFlags:()=>iPt,ValueType:()=>lPt,W3CTraceContextPropagator:()=>OPt,baggageEntryMetadataFromString:()=>fPt,context:()=>vMe,default:()=>UPt,diag:()=>RQ,getNodeAutoInstrumentations:()=>wPt,isSpanContextValid:()=>uPt,isValidSpanId:()=>pPt,isValidTraceId:()=>dPt,metrics:()=>SMe,propagation:()=>TMe,registerInstrumentations:()=>EPt,resourceFromAttributes:()=>_Pt,trace:()=>bMe});var CQ,hz,kQ,yz,bMe,vMe,TMe,SMe,RQ,wMe,EMe,iPt,aPt,cPt,lPt,uPt,dPt,pPt,mPt,fPt,gPt,hPt,yPt,xPt,bPt,vPt,TPt,SPt,wPt,EPt,_Pt,CPt,kPt,RPt,APt,IPt,PPt,MPt,OPt,NPt,DPt,LPt,FPt,UPt,CMe=C(()=>{CQ={setAttribute(){return this},setAttributes(){return this},addEvent(){return this},setStatus(){return this},updateName(){return this},end(){},isRecording(){return!1},recordException(){},spanContext(){return{traceId:"0",spanId:"0",traceFlags:0}}},hz={startSpan(){return CQ},startActiveSpan(r,e,t){return(typeof e=="function"?e:t)(CQ)}},kQ={createCounter(){return{add(){}}},createHistogram(){return{record(){}}},createUpDownCounter(){return{add(){}}},createObservableGauge(){return{addCallback(){}}}},yz={getValue(){},setValue(){return yz},deleteValue(){return yz}},bMe={getTracer(){return hz},getTracerProvider(){return{getTracer(){return hz}}},setGlobalTracerProvider(){},getSpan(){return CQ},getActiveSpan(){},setSpan(r){return r},deleteSpan(r){return r},setSpanContext(r){return r},getSpanContext(){}},vMe={active(){return yz},with(r,e){return e()},bind(r,e){return e},setValue(){return yz},getValue(){}},TMe={inject(){},extract(r){return r},setGlobalPropagator(){},getBaggage(){},setBaggage(r){return r},createBaggage(){return{getAllEntries(){return[]},getEntry(){},setEntry(){return this},removeEntry(){return this}}}},SMe={getMeter(){return kQ},getMeterProvider(){return{getMeter(){return kQ}}},setGlobalMeterProvider(){}},RQ={setLogger(){},verbose(){},debug(){},info(){},warn(){},error(){},createComponentLogger(){return RQ}},wMe={UNSET:0,OK:1,ERROR:2},EMe={INTERNAL:0,SERVER:1,CLIENT:2,PRODUCER:3,CONSUMER:4},iPt={NONE:0,SAMPLED:1},aPt=class{},cPt={NONE:0,ERROR:30,WARN:50,INFO:60,DEBUG:70,VERBOSE:80,ALL:9999},lPt={INT:0,DOUBLE:1},uPt=()=>!1,dPt=()=>!1,pPt=()=>!1,mPt={traceId:"0",spanId:"0",traceFlags:0},fPt=()=>({}),gPt=class{start(){}shutdown(){return Promise.resolve()}},hPt=class{constructor(){}register(){}addSpanProcessor(){}getTracer(){return hz}shutdown(){return Promise.resolve()}},yPt=class{register(){}addSpanProcessor(){}getTracer(){return hz}shutdown(){return Promise.resolve()}},xPt=class{onStart(){}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}},bPt=class{onStart(){}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}},vPt=class{export(){}shutdown(){return Promise.resolve()}},TPt=class{export(){}shutdown(){return Promise.resolve()}},SPt=class{constructor(){}export(){}shutdown(){return Promise.resolve()}},wPt=()=>[],EPt=()=>{},_Pt=r=>({attributes:r||{},merge(){return this}}),CPt=class{onStart(){}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}},kPt=class{constructor(){}getLogger(){return{emit(){}}}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},RPt=class{onStart(){}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}},APt=class{constructor(){}getMeter(){return kQ}addMetricReader(){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},IPt=class{constructor(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}},PPt={UNSPECIFIED:0,TRACE:1,TRACE2:2,TRACE3:3,TRACE4:4,DEBUG:5,DEBUG2:6,DEBUG3:7,DEBUG4:8,INFO:9,INFO2:10,INFO3:11,INFO4:12,WARN:13,WARN2:14,WARN3:15,WARN4:16,ERROR:17,ERROR2:18,ERROR3:19,ERROR4:20,FATAL:21,FATAL2:22,FATAL3:23,FATAL4:24},MPt=class{enable(){return this}disable(){return this}},OPt=class{inject(){}extract(r){return r}fields(){return[]}},NPt="service.name",DPt="service.version",LPt="service.name",FPt="service.version",UPt={trace:bMe,context:vMe,propagation:TMe,metrics:SMe,diag:RQ,SpanStatusCode:wMe,SpanKind:EMe}});var AQ={};te(AQ,{TelemetryService:()=>Cm});var Cm,VE=C(()=>{"use strict";Dr();SQ();wQ();EQ();_Q();H();Cm=class r{static instance;tracerProvider;enabled=!1;initialized=!1;usingExternalTracerProvider=!1;meter;tracer;aiRequestCounter;aiRequestDuration;aiTokensUsed;aiProviderErrors;aiCostUsd;mcpToolCalls;connectionCounter;responseTimeHistogram;activeConnectionCount=0;errorCount=0;requestCount=0;totalResponseTime=0;responseTimeCount=0;constructor(){this.enabled=this.isTelemetryEnabled(),this.enabled?this.initializeTelemetry():g.debug("[Telemetry] Disabled - set NEUROLINK_TELEMETRY_ENABLED=true or configure OTEL_EXPORTER_OTLP_ENDPOINT to enable")}static getInstance(){return r.instance||(r.instance=new r),r.instance}isTelemetryEnabled(){return this.hasExternalTracerProvider()||process.env.NEUROLINK_TELEMETRY_ENABLED==="true"||process.env.OTEL_EXPORTER_OTLP_ENDPOINT!==void 0}hasExternalTracerProvider(){try{let e=Tt.getTracerProvider();if(!e)return!1;let t=e.constructor?.name||"";if(t&&t!=="ProxyTracerProvider"&&t!=="NoopTracerProvider")return!0;let o=(typeof e.getDelegate=="function"?e.getDelegate():e._delegate)?.constructor?.name||"";return!!(o&&o!=="NoopTracerProvider")}catch(e){return g.warn("[Telemetry] Failed checking for external TracerProvider",{error:e instanceof Error?e.message:String(e)}),!1}}adoptExternalTracerProvider(e){this.usingExternalTracerProvider=!0,this.tracerProvider=void 0,this.meter=If.getMeter("neurolink-ai"),this.tracer=Tt.getTracer("neurolink-ai"),this.initializeMetrics(),g.debug("[Telemetry] Reusing externally managed TracerProvider",{reason:e,endpoint:process.env.OTEL_EXPORTER_OTLP_ENDPOINT})}initializeTelemetry(){try{if(this.hasExternalTracerProvider()){this.adoptExternalTracerProvider("global tracer provider already registered");return}let e=mz({[fz]:process.env.OTEL_SERVICE_NAME||"neurolink-ai",[gz]:process.env.OTEL_SERVICE_VERSION||"3.0.1"}),t=new pz({url:process.env.OTEL_EXPORTER_OTLP_ENDPOINT?`${process.env.OTEL_EXPORTER_OTLP_ENDPOINT}/v1/traces`:void 0});this.tracerProvider=new xMe({resource:e,spanProcessors:[new dz(t)]}),this.meter=If.getMeter("neurolink-ai"),this.tracer=this.tracerProvider.getTracer("neurolink-ai"),this.initializeMetrics(),g.debug("[Telemetry] Initialized local telemetry exporter",{endpoint:process.env.OTEL_EXPORTER_OTLP_ENDPOINT,globalTracerProviderOwnedBy:"observability/instrumentation"})}catch(e){let t=e instanceof Error?e.message:String(e);if((t.includes("duplicate registration")||t.includes("already registered")||t.includes("already set"))&&this.hasExternalTracerProvider()){this.adoptExternalTracerProvider("duplicate global tracer registration detected");return}g.error("[Telemetry] Failed to initialize:",e),this.enabled=!1}}initializeMetrics(){!this.enabled||!this.meter||(this.aiRequestCounter=this.meter.createCounter("ai_requests_total",{description:"Total number of AI requests"}),this.aiRequestDuration=this.meter.createHistogram("ai_request_duration_ms",{description:"AI request duration in milliseconds"}),this.aiTokensUsed=this.meter.createCounter("ai_tokens_used_total",{description:"Total number of AI tokens used"}),this.aiCostUsd=this.meter.createCounter("ai_cost_usd_total",{description:"Total accumulated AI cost in USD"}),this.aiProviderErrors=this.meter.createCounter("ai_provider_errors_total",{description:"Total number of AI provider errors"}),this.mcpToolCalls=this.meter.createCounter("mcp_tool_calls_total",{description:"Total number of MCP tool calls"}),this.connectionCounter=this.meter.createCounter("connections_total",{description:"Total number of connections"}),this.responseTimeHistogram=this.meter.createHistogram("response_time_ms",{description:"Response time in milliseconds"}))}async initialize(){if(this.enabled){if(this.usingExternalTracerProvider){this.initialized=!0,g.debug("[Telemetry] External TracerProvider already initialized by host");return}if(!this.tracerProvider){this.initialized=!0,g.debug("[Telemetry] Tracer provider already prepared during constructor");return}try{try{let{AsyncLocalStorageContextManager:e}=await Promise.resolve().then(()=>(CMe(),_Me));wr.setGlobalContextManager(new e().enable())}catch{}this.initialized=!0,g.debug("[Telemetry] Tracer provider started successfully")}catch(e){g.error("[Telemetry] Failed to start:",e),this.enabled=!1,this.initialized=!1}}}async traceAIRequest(e,t,n="generate_text"){if(!this.enabled||!this.tracer)return await t();let o=this.tracer.startSpan(`ai.${e}.${n}`,{attributes:{"ai.provider":e,"ai.operation":n}});try{let s=await t();return o.setStatus({code:1}),s}catch(s){throw o.setStatus({code:2,message:s instanceof Error?s.message:"Unknown error"}),o.recordException(s),s}finally{o.end()}}recordAIRequest(e,t,n,o,s){if(this.requestCount++,this.totalResponseTime+=o,this.responseTimeCount++,!this.enabled||!this.aiRequestCounter)return;let i={provider:e,model:t};this.aiRequestCounter.add(1,i),this.aiRequestDuration?.record(o,i),this.aiTokensUsed?.add(n,i),s!==void 0&&Number.isFinite(s)&&s>0&&this.aiCostUsd?.add(s,i)}recordAIError(e,t){this.errorCount++,!(!this.enabled||!this.aiProviderErrors)&&this.aiProviderErrors.add(1,{provider:e,error:t.name,message:t.message.substring(0,100)})}recordMCPToolCall(e,t,n){!this.enabled||!this.mcpToolCalls||this.mcpToolCalls.add(1,{tool:e,success:n.toString(),duration_bucket:this.getDurationBucket(t)})}recordConnection(e){this.activeConnectionCount++,!(!this.enabled||!this.connectionCounter)&&this.connectionCounter.add(1,{connection_type:e})}recordConnectionClosed(e){this.activeConnectionCount=Math.max(0,this.activeConnectionCount-1),!(!this.enabled||!this.connectionCounter)&&this.connectionCounter.add(-1,{connection_type:e,event:"disconnect"})}recordResponseTime(e,t,n){this.totalResponseTime+=n,this.responseTimeCount++,!(!this.enabled||!this.responseTimeHistogram)&&this.responseTimeHistogram.record(n,{endpoint:e,method:t,status_bucket:this.getStatusBucket(n)})}recordCustomMetric(e,t,n){if(!this.enabled||!this.meter)return;this.meter.createCounter(`custom_${e}`,{description:`Custom metric: ${e}`}).add(t,n||{})}recordCustomHistogram(e,t,n){if(!this.enabled||!this.meter)return;this.meter.createHistogram(`custom_${e}_histogram`,{description:`Custom histogram: ${e}`}).record(t,n||{})}async getHealthMetrics(){let e=process.memoryUsage(),t=this.requestCount>0?this.errorCount/this.requestCount*100:0,n=this.responseTimeCount>0?this.totalResponseTime/this.responseTimeCount:0;return{timestamp:Date.now(),memoryUsage:e,uptime:process.uptime(),activeConnections:this.activeConnectionCount,errorRate:Math.round(t*100)/100,averageResponseTime:Math.round(n*100)/100}}isEnabled(){return this.enabled}getStatus(){return{enabled:this.enabled,initialized:this.initialized,endpoint:process.env.OTEL_EXPORTER_OTLP_ENDPOINT,service:process.env.OTEL_SERVICE_NAME||"neurolink-ai",version:process.env.OTEL_SERVICE_VERSION||"3.0.1"}}getDurationBucket(e){return e<100?"fast":e<500?"medium":e<1e3?"slow":"very_slow"}getStatusBucket(e){return e<200?"excellent":e<500?"good":e<1e3?"acceptable":"poor"}async shutdown(){if(this.enabled&&this.tracerProvider&&!this.usingExternalTracerProvider)try{await this.tracerProvider.shutdown(),this.initialized=!1,g.debug("[Telemetry] Tracer provider shutdown completed")}catch(e){g.error("[Telemetry] Error during shutdown:",e)}}}});function os(r,e=kMe){let t;try{t=typeof r=="string"?r:JSON.stringify(r)??String(r)}catch{t=String(r)}if(t.length>e){let n=`...[truncated ${t.length-e} chars]`,o=Math.max(0,e-n.length);return`${t.slice(0,o)}${n}`}return t}var _e,$n,kMe,_P=C(()=>{"use strict";_e={GEN_AI_SYSTEM:"gen_ai.system",GEN_AI_MODEL:"gen_ai.request.model",GEN_AI_OPERATION:"gen_ai.operation.name",GEN_AI_INPUT_TOKENS:"gen_ai.usage.input_tokens",GEN_AI_OUTPUT_TOKENS:"gen_ai.usage.output_tokens",GEN_AI_FINISH_REASON:"gen_ai.response.finish_reason",GEN_AI_COST_USD:"gen_ai.cost_usd",GEN_AI_TOOL_NAME:"gen_ai.tool.name",GEN_AI_TEMPERATURE:"gen_ai.request.temperature",GEN_AI_MAX_TOKENS:"gen_ai.request.max_tokens",NL_PROVIDER:"neurolink.provider",NL_MODEL:"neurolink.model",NL_STREAM_MODE:"neurolink.stream_mode",NL_TOOL_COUNT:"neurolink.tool_count",NL_MESSAGE_COUNT:"neurolink.message_count",NL_HAS_TOOLS:"neurolink.has_tools",NL_INPUT_LENGTH:"neurolink.input_length",NL_OUTPUT_LENGTH:"neurolink.output_length",NL_REQUEST_ID:"neurolink.request_id",NL_PATH:"neurolink.path",NL_HAS_MEMORY:"neurolink.has_conversation_memory",NL_COST:"neurolink.cost",NL_STRUCTURED_OUTPUT:"neurolink.structured_output",NL_HAS_FALLBACK:"neurolink.has_fallback",MCP_SERVER_ID:"mcp.server_id",MCP_TOOL_NAME:"mcp.tool_name",MCP_TIMEOUT_MS:"mcp.timeout_ms",MCP_TRANSPORT:"mcp.transport",MCP_CIRCUIT_STATE:"mcp.circuit_state",SESSION_ID:"session.id",USER_ID:"user.id",MEMORY_TYPE:"memory.type",MESSAGE_COUNT:"message.count",CONTENT_LENGTH:"content.length",RAG_FILE_COUNT:"rag.file_count",RAG_STRATEGY:"rag.strategy",RAG_CHUNK_SIZE:"rag.chunk_size",RAG_TOP_K:"rag.top_k",RAG_RESULT_COUNT:"rag.result_count",MSG_COUNT:"message.build.count",MSG_HAS_IMAGES:"message.has_images",MSG_HAS_FILES:"message.has_files",MSG_HAS_SYSTEM_PROMPT:"message.has_system_prompt",MSG_TOTAL_CONTENT_LENGTH:"message.total_content_length",MSG_IS_MULTIMODAL:"message.is_multimodal",FILE_NAME:"file.name",FILE_MIMETYPE:"file.mimetype",FILE_SIZE_BYTES:"file.size_bytes",FILE_CATEGORY:"file.category",FILE_OUTPUT_LENGTH:"file.output_length",FILE_SUCCESS:"file.success",FILE_PROCESSOR_USED:"file.processor_used",FILE_CONFIDENCE:"file.detection_confidence",FILE_HAS_IMAGES:"file.has_images",FILE_IMAGE_COUNT:"file.image_count",FILE_ERROR:"file.error",FILE_SKIPPED_REASON:"file.skipped_reason",FILE_TOTAL_COUNT:"file.total_count",FILE_INCLUDED_COUNT:"file.included_count",FILE_CONTENT_TYPE:"file.content_type",VIDEO_DURATION_SEC:"video.duration_sec",VIDEO_WIDTH:"video.width",VIDEO_HEIGHT:"video.height",VIDEO_CODEC:"video.codec",VIDEO_AUDIO_CODEC:"video.audio_codec",VIDEO_FORMAT:"video.format",VIDEO_BITRATE:"video.bitrate",VIDEO_KEYFRAMES_EXTRACTED:"video.keyframes_extracted",VIDEO_TARGET_FRAMES:"video.target_frames",VIDEO_INTERVAL_SEC:"video.interval_sec",VIDEO_FRAME_QUALITY:"video.frame_quality",VIDEO_FRAME_RESIZE_PX:"video.frame_resize_px",VIDEO_FRAMES_RESIZED:"video.frames_resized",VIDEO_TOTAL_FRAME_BYTES:"video.total_frame_bytes",VIDEO_HAS_SUBTITLES:"video.has_subtitles",VIDEO_SUBTITLE_LENGTH:"video.subtitle_length",VIDEO_TEXT_CONTENT_LENGTH:"video.text_content_length",VIDEO_HAS_METADATA:"video.has_metadata",VIDEO_HAS_KEYFRAMES:"video.has_keyframes",VIDEO_TEMP_PATH:"video.temp_path",VIDEO_BYTES_WRITTEN:"video.bytes_written",VIDEO_WRITE_DURATION_MS:"video.write_duration_ms",VIDEO_STEP:"video.step",CONTEXT_STAGE:"context.compaction_stage",CONTEXT_TOKENS_BEFORE:"context.tokens_before",CONTEXT_TOKENS_AFTER:"context.tokens_after",MW_COUNT:"middleware.count",MW_NAMES:"middleware.names",AR_TAG:"autoresearch.tag",AR_BRANCH:"autoresearch.branch",AR_PHASE:"autoresearch.phase",AR_PHASE_FROM:"autoresearch.phase_from",AR_PHASE_TO:"autoresearch.phase_to",AR_RUN_COUNT:"autoresearch.run_count",AR_KEEP_COUNT:"autoresearch.keep_count",AR_STATUS:"autoresearch.status",AR_METRIC:"autoresearch.metric",AR_BEST_METRIC:"autoresearch.best_metric",AR_DIRECTION:"autoresearch.metric_direction",AR_COMMIT:"autoresearch.commit",AR_DURATION_MS:"autoresearch.duration_ms",AR_DESCRIPTION:"autoresearch.description",AR_ERROR_CODE:"autoresearch.error_code"},$n={TRACE_NAME:"langfuse.trace.name",TRACE_INPUT:"langfuse.trace.input",TRACE_OUTPUT:"langfuse.trace.output",OBSERVATION_TYPE:"langfuse.observation.type",OBSERVATION_INPUT:"langfuse.observation.input",OBSERVATION_OUTPUT:"langfuse.observation.output",OBSERVATION_METADATA:"langfuse.observation.metadata",OBSERVATION_MODEL_NAME:"langfuse.observation.model.name",OBSERVATION_MODEL_PARAMETERS:"langfuse.observation.model.parameters",OBSERVATION_USAGE_DETAILS:"langfuse.observation.usage_details",OBSERVATION_LEVEL:"langfuse.observation.level",OBSERVATION_STATUS_MESSAGE:"langfuse.observation.status_message",OBSERVATION_COMPLETION_START_TIME:"langfuse.observation.completion_start_time"},kMe=4e4});async function RMe(){let{TelemetryService:r}=await Promise.resolve().then(()=>(VE(),AQ)),e=r.getInstance();return e.isEnabled()&&(await e.initialize(),g.info("[NeuroLink] Telemetry initialized")),e}async function AMe(){let{TelemetryService:r}=await Promise.resolve().then(()=>(VE(),AQ));return r.getInstance().getStatus()}var kl=C(()=>{"use strict";Vr();An();_P();H()});function CP(r){if(r&&typeof r.timeoutMs=="number"&&Number.isFinite(r.timeoutMs)&&r.timeoutMs>=0)return r.timeoutMs;let e=process.env.NEUROLINK_LIFECYCLE_TIMEOUT_MS;if(e){let t=Number(e);if(Number.isFinite(t)&&t>=0)return t}return 5e3}var IQ=C(()=>{"use strict"});function Rl(r){if(r!==void 0){if(typeof r=="number"){if(r<=0)throw new Error(`Timeout must be positive, got: ${r}`);return r}if(typeof r=="string"){let e=r.match(/^(\d+(?:\.\d+)?)(ms|s|m|h)?$/);if(!e)throw new Error(`Invalid timeout format: ${r}. Use formats like '30s', '2m', '500ms', or '1.5h'`);let t=parseFloat(e[1]);if(t<=0)throw new Error(`Timeout must be positive, got: ${t}`);switch(e[2]||"ms"){case"ms":return t;case"s":return t*1e3;case"m":return t*60*1e3;case"h":return t*60*60*1e3;default:return t}}throw new Error(`Invalid timeout type: ${typeof r}`)}}function IMe(r,e="generate"){if(e==="stream")return PQ.streaming;let t=r.toLowerCase().replace("_","-");return PQ.providers[t]||PQ.global}async function PMe(r,e,t,n){let o=Rl(e);if(!o)return r;let s=new Promise((i,a)=>{setTimeout(()=>{a(new tr(`${t} ${n} operation timed out after ${o}ms`,o,t,n))},o)});return Promise.race([r,s])}function pi(r,e,t){let n=Rl(r);if(!n)return null;let o=new AbortController,s=setTimeout(()=>{o.abort(new tr(`${e} ${t} operation timed out after ${r}`,n,e,t))},n);return{controller:o,cleanup:()=>{clearTimeout(s)},timeoutMs:n}}function Qf(r,e){return r&&e?AbortSignal.any([r,e]):r??e}function xz(r){let e=new AbortController;for(let t of r)if(t&&!t.aborted&&t.addEventListener("abort",()=>{e.signal.aborted||e.abort(t.reason)}),t?.aborted){e.abort(t.reason);break}return e}var tr,PQ,ro=C(()=>{"use strict";tr=class r extends Error{constructor(t,n,o,s){super(t);this.timeout=n;this.provider=o;this.operation=s;this.name="TimeoutError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}timeout;provider;operation};PQ={global:"30s",streaming:"2m",providers:{openai:"30s",bedrock:"45s",vertex:"60s",anthropic:"60s",azure:"30s","google-ai":"30s",huggingface:"2m",ollama:"5m",mistral:"45s"},tools:{default:"10s",filesystem:"5s",network:"30s",computation:"2m"}}});var MMe=C(()=>{});var bz,vz=C(()=>{Al();bz=(r,e)=>r.anyOf.length?r.anyOf.length===1?bn(r.anyOf[0],{...e,path:[...e.path,"anyOf",0]}):`z.union([${r.anyOf.map((t,n)=>bn(t,{...e,path:[...e.path,"anyOf",n]})).join(", ")}])`:"z.any()"});var OMe,MQ=C(()=>{OMe=r=>"z.boolean()"});var NMe,OQ=C(()=>{NMe=r=>"z.any()"});var DMe,NQ=C(()=>{Al();DMe=(r,e)=>`z.union([${r.type.map(t=>bn({...r,type:t},{...e,withoutDefaults:!0})).join(", ")}])`});var LMe,DQ=C(()=>{Al();LMe=(r,e)=>`z.any().refine((value) => !${bn(r.not,{...e,path:[...e.path,"not"]})}.safeParse(value).success, "Invalid input: Should NOT be valid against schema")`});var FMe,LQ=C(()=>{FMe=r=>"z.null()"});var UMe,FQ=C(()=>{UMe=r=>[r.slice(0,r.length/2),r.slice(r.length/2)]});function qE(r,e){if(r.allOf.length===0)return"z.never()";if(r.allOf.length===1){let t=r.allOf[0];return bn(t,{...e,path:[...e.path,"allOf",t[kP]]})}else{let[t,n]=UMe($Pt(r.allOf));return`z.intersection(${qE({allOf:t},e)}, ${qE({allOf:n},e)})`}}var kP,$Pt,Tz=C(()=>{Al();FQ();kP=Symbol("Original index"),$Pt=r=>{let e=[];for(let t=0;t<r.length;t++){let n=r[t];if(typeof n=="boolean")e.push(n?{[kP]:t}:{[kP]:t,not:{}});else{if(kP in n)return r;e.push({...n,[kP]:t})}}return e}});function ws(r,e,t,n){let o=r[e],s="";if(o!==void 0){let i=t({value:o,json:JSON.stringify(o)});if(i){let a=i[0],c=i.length===3?i[1]:"",l=i.length===3?i[2]:i[1];s+=a;let u=r.errorMessage?.[e]??n;u!==void 0&&(s+=c+JSON.stringify(u)),s+=l}}return s}var RP=C(()=>{});var $Me,UQ=C(()=>{RP();Al();$Me=(r,e)=>{if(Array.isArray(r.items))return`z.tuple([${r.items.map((n,o)=>bn(n,{...e,path:[...e.path,"items",o]}))}])`;let t=r.items?`z.array(${bn(r.items,{...e,path:[...e.path,"items"]})})`:"z.array(z.any())";return t+=ws(r,"minItems",({json:n})=>[`.min(${n}`,", ",")"]),t+=ws(r,"maxItems",({json:n})=>[`.max(${n}`,", ",")"]),r.uniqueItems===!0&&(t+=ws(r,"uniqueItems",()=>[".refine((arr) => arr.every((item, i) => arr.indexOf(item) == i)",", ",")"],"All items must be unique!")),t}});var BMe,$Q=C(()=>{BMe=r=>`z.literal(${JSON.stringify(r.const)})`});var zMe,BQ=C(()=>{zMe=r=>r.enum.length===0?"z.never()":r.enum.length===1?`z.literal(${JSON.stringify(r.enum[0])})`:r.enum.every(e=>typeof e=="string")?`z.enum([${r.enum.map(e=>JSON.stringify(e))}])`:`z.union([${r.enum.map(e=>`z.literal(${JSON.stringify(e)})`).join(", ")}])`});var jMe,zQ=C(()=>{Al();jMe=(r,e)=>{let t=bn(r.if,{...e,path:[...e.path,"if"]}),n=bn(r.then,{...e,path:[...e.path,"then"]}),o=bn(r.else,{...e,path:[...e.path,"else"]});return`z.union([${n}, ${o}]).superRefine((value,ctx) => {
680
+ `):void 0,usage:{input:u,output:d,total:u+d},toolCalls:l.length>0?l.map(h=>{let y;try{y=JSON.parse(h.input)}catch(x){g.warn(`Failed to parse tool call args for tool ${h.toolName}:`,x),y={raw:h.input}}return{toolCallId:h.toolCallId,toolName:h.toolName,args:y}}):void 0};if(r.blocking!==!1){let h=await hQ(r,s,p);return{...i,evaluationResult:h}}else return hQ(r,s,p).catch(h=>{g.error("Non-blocking auto-evaluation error:",h)}),i},wrapStream:async({doStream:n,params:o})=>{let s=o,i=await n(),[a,c]=i.stream.tee();return oPt(r,s,c).catch(l=>{g.error("Non-blocking stream auto-evaluation error:",l)}),{...i,stream:a}}},metadata:e}}async function hQ(r,e,t){let n=r.blocking!==!1,o=r.threshold??(Number(process.env.NEUROLINK_EVALUATION_THRESHOLD)||7);try{let i=await new ku({threshold:o,provider:r.provider,promptGenerator:r.promptGenerator,evaluationModel:r.evaluationModel}).evaluate(e,t,o,r);r.onEvaluationComplete&&await r.onEvaluationComplete(i)}catch(s){if(g.error("Error during auto-evaluation:",s),n)throw s}}async function oPt(r,e,t){let n="",o,s=[],i=t.getReader();try{for(;;){let{done:l,value:u}=await i.read();if(l)break;switch(u.type){case"text-delta":n+=u.delta;break;case"tool-call":{let d;try{d=JSON.parse(u.input)}catch(p){g.warn(`Failed to parse tool call args for tool ${u.toolName}:`,p),d={raw:u.input}}s.push({toolCallId:u.toolCallId,toolName:u.toolName,args:d})}break;case"finish":{let d=u.usage.inputTokens.total??0,p=u.usage.outputTokens.total??0;o={input:d,output:p,total:d+p}}break}}}finally{i.releaseLock()}let a={content:n,usage:o,toolCalls:s.length>0?s:void 0};r.blocking&&g.warn("Auto-evaluation 'blocking' mode is not supported for streaming responses. Evaluation will proceed non-blockingly.");let c={...r,blocking:!1};await hQ(c,e,a)}var gMe=C(()=>{"use strict";sz();H()});function hMe(r){try{Object.defineProperty(r,xQ,{value:!0,enumerable:!1,writable:!1,configurable:!1})}catch{}}function Ev(r){return r===null||typeof r!="object"?!1:r[xQ]===!0}function GE(r){r===null||typeof r!="object"||r[xQ]!==!0&&hMe(r)}function cz(r,e,t){if(typeof r=="function"&&!Ev(e)){e!==null&&typeof e=="object"&&hMe(e);try{let n=r(t);Promise.resolve(n).catch(()=>{})}catch{}}}var xQ,lz=C(()=>{"use strict";xQ=Symbol.for("neurolink.onErrorFired")});function bQ(r){if(r instanceof Error)return r;if(typeof r=="object"&&r!==null){let e=r,t=typeof e.message=="string"?e.message:String(r);return Object.assign(new Error(t),e)}return new Error(String(r))}function uz(r={}){return{...{specificationVersion:"v3",wrapGenerate:async({doGenerate:n})=>{let o=Date.now();try{let s=await n();if(r.onFinish)try{let i=s.content?.map(c=>c.type==="text"?c.text:"").join("")??"",a=r.onFinish({text:i,usage:s.usage?{promptTokens:s.usage.inputTokens?.total??0,completionTokens:s.usage.outputTokens?.total??0}:void 0,duration:Date.now()-o,finishReason:String(s.finishReason??"")});Promise.resolve(a).catch(c=>{g.warn("[LifecycleMiddleware] onFinish callback error:",c)})}catch(i){g.warn("[LifecycleMiddleware] onFinish callback error:",i)}return s}catch(s){let i=bQ(s);throw cz(r.onError,i,{error:i,duration:Date.now()-o,recoverable:JI(i)}),i}},wrapStream:async({doStream:n})=>{let o=Date.now();try{let s=await n();if(!r.onChunk&&!r.onFinish&&!r.onError)return s;let i=0,a="",c=new TransformStream({transform(l,u){try{if(l.type==="text-delta"&&(a+=l.textDelta),r.onChunk&&l.type)try{let d=r.onChunk({type:l.type,textDelta:l.type==="text-delta"?l.textDelta:void 0,sequenceNumber:i++});Promise.resolve(d).catch(p=>{g.warn("[LifecycleMiddleware] onChunk callback error:",p)})}catch(d){g.warn("[LifecycleMiddleware] onChunk callback error:",d)}u.enqueue(l)}catch(d){let p=bQ(d);throw cz(r.onError,p,{error:p,duration:Date.now()-o,recoverable:JI(p)}),p}},flush(){if(r.onFinish)try{let l=r.onFinish({text:a,duration:Date.now()-o});Promise.resolve(l).catch(u=>{g.warn("[LifecycleMiddleware] onFinish callback error:",u)})}catch(l){g.warn("[LifecycleMiddleware] onFinish callback error:",l)}}});return{...s,stream:s.stream.pipeThrough(c)}}catch(s){let i=bQ(s);throw cz(r.onError,i,{error:i,duration:Date.now()-o,recoverable:JI(i)}),i}}},metadata:{id:"lifecycle",name:"Lifecycle Callbacks",description:"Provides onFinish, onError, and onChunk callbacks for generation and streaming lifecycle events",priority:110,defaultEnabled:!1}}}var vQ=C(()=>{"use strict";H();kt();lz()});var EP,TQ=C(()=>{"use strict";PIe();h7();FIe();gMe();vQ();H();sv();EP=class{registry;presets=new Map;options;constructor(e={}){this.options=e,this.registry=new xB,this.initialize(e)}initialize(e){let t={analytics:bB,guardrails:x7,autoEvaluation:yQ,lifecycle:uz};if(this.registerPreset({name:"default",description:"Default preset with analytics enabled.",config:{analytics:{enabled:!0}}}),this.registerPreset({name:"all",description:"Enables all available middleware.",config:{analytics:{enabled:!0},guardrails:{enabled:!0}}}),this.registerPreset({name:"security",description:"Focuses on security with guardrails.",config:{guardrails:{enabled:!0}}}),g.debug("Initializing MiddlewareFactory",{options:e}),e.middleware){g.debug("Registering custom middleware");for(let n of e.middleware)this.register(n)}for(let n in t)if(!this.registry.has(n)){let o=t[n],s=e.middlewareConfig?.[n]?.config;g.debug(`Registering built-in middleware '${n}'`,s),this.registry.register(o(s))}}registerPreset(e,t=!1){if(this.presets.has(e.name)&&!t)throw new Error(`Preset with name '${e.name}' already exists. Use replace: true to override.`);this.presets.set(e.name,e)}register(e,t){this.registry.register(e,t)}applyMiddleware(e,t,n={}){let o=Date.now();try{let s={...this.options,...n,middlewareConfig:{...this.options.middlewareConfig,...n.middlewareConfig}},i=this.buildMiddlewareConfig(s);for(let[d,p]of Object.entries(i))if(g.debug(`Configuring middleware '${d}'`,{config:p}),p.enabled&&this.registry.has(d)){let f=this.getCreator(d);f&&this.registry.register(f(p.config),{replace:!0})}let a=this.registry.buildChain(t,i);if(a.length===0)return g.debug("No middleware to apply",{provider:t.provider}),e;g.debug(`Applying ${a.length} middleware to model`,{provider:t.provider,model:t.model,middlewareCount:a.length});let l=dB({model:e,middleware:a}),u=Date.now()-o;return g.debug("Middleware applied successfully",{provider:t.provider,middlewareCount:a.length,processingTime:u}),l}catch(s){return g.error("Failed to apply middleware",{provider:t.provider,error:s instanceof Error?s.message:String(s)}),e}}getCreator(e){let t={analytics:bB,guardrails:x7,autoEvaluation:yQ,lifecycle:uz};return g.debug("Getting creator for middleware ID:",e),t[e]}buildMiddlewareConfig(e){let t={},n=this.registry.list();for(let s of n)t[s.metadata.id]={enabled:!1,config:{}};let o=e.preset;if(!o&&(!e.middlewareConfig||Object.keys(e.middlewareConfig).length===0)&&(!e.enabledMiddleware||e.enabledMiddleware.length===0)&&(o="default"),o){let s=this.getPresetConfig(o);if(s)for(let[i,a]of Object.entries(s))t[i]&&(t[i]={...t[i],...a})}if(e.middlewareConfig)for(let[s,i]of Object.entries(e.middlewareConfig))t[s]={...t[s],...i};if(e.enabledMiddleware)for(let s of e.enabledMiddleware)t[s]&&(t[s].enabled=!0);if(e.disabledMiddleware)for(let s of e.disabledMiddleware)t[s]&&(t[s].enabled=!1);return t}getPresetConfig(e){let t=this.presets.get(e);return t?t.config:null}createContext(e,t,n={},o){return{provider:e,model:t,options:n,session:o,metadata:{timestamp:Date.now(),requestId:`${e}-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}}}validateConfig(e){let t=[],n=[];for(let[o,s]of Object.entries(e)){if(!this.registry.has(o)){t.push(`Middleware '${o}' is not registered`);continue}s.enabled!==void 0&&typeof s.enabled!="boolean"&&t.push(`Middleware '${o}' enabled property must be boolean`),s.config&&typeof s.config!="object"&&t.push(`Middleware '${o}' config property must be an object`),s.conditions?.providers&&s.conditions.providers.length===0&&n.push(`Middleware '${o}' has empty providers condition`)}return{isValid:t.length===0,errors:t,warnings:n}}getAvailablePresets(){return Array.from(this.presets.values()).map(e=>({name:e.name,description:e.description,middleware:Object.keys(e.config)}))}getChainStats(e,t){let n=this.registry.buildChain(e,t),o=this.registry.getAggregatedStats(),s={},i=0,a=0;for(let[c,l]of Object.entries(o))t[c]?.enabled&&(s[c]={applied:!0,executionTime:l.averageExecutionTime},i+=l.averageExecutionTime,a++);return{totalMiddleware:n.length,appliedMiddleware:a,totalExecutionTime:i,results:s}}createModelFactory(e,t={}){return async(n,o={})=>{let s=await e(),i={...t,...o,middlewareConfig:{...t.middlewareConfig,...o.middlewareConfig}};return this.applyMiddleware(s,n,i)}}}});var yMe,sPt,xMe,dz,SQ=C(()=>{yMe={setAttribute(){return this},setAttributes(){return this},addEvent(){return this},setStatus(){return this},updateName(){return this},end(){},isRecording(){return!1},recordException(){},spanContext(){return{traceId:"0",spanId:"0",traceFlags:0}}},sPt={startSpan(){return yMe},startActiveSpan(r,e,t){return(typeof e=="function"?e:t)(yMe)}},xMe=class{constructor(){}register(){}addSpanProcessor(){}getTracer(){return sPt}shutdown(){return Promise.resolve()}},dz=class{onStart(){}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}}});var pz,wQ=C(()=>{pz=class{export(){}shutdown(){return Promise.resolve()}}});var mz,EQ=C(()=>{mz=r=>({attributes:r||{},merge(){return this}})});var fz,gz,_Q=C(()=>{fz="service.name",gz="service.version"});var _Me={};te(_Me,{ATTR_SERVICE_NAME:()=>NPt,ATTR_SERVICE_VERSION:()=>DPt,AsyncLocalStorageContextManager:()=>MPt,BasicTracerProvider:()=>hPt,BatchLogRecordProcessor:()=>RPt,BatchSpanProcessor:()=>bPt,DiagConsoleLogger:()=>aPt,DiagLogLevel:()=>cPt,INVALID_SPAN_CONTEXT:()=>mPt,LangfuseSpanProcessor:()=>CPt,LoggerProvider:()=>kPt,MeterProvider:()=>APt,NodeSDK:()=>gPt,NodeTracerProvider:()=>yPt,OTLPLogExporter:()=>TPt,OTLPMetricExporter:()=>SPt,OTLPTraceExporter:()=>vPt,PeriodicExportingMetricReader:()=>IPt,SEMRESATTRS_SERVICE_NAME:()=>LPt,SEMRESATTRS_SERVICE_VERSION:()=>FPt,SeverityNumber:()=>PPt,SimpleSpanProcessor:()=>xPt,SpanKind:()=>EMe,SpanStatusCode:()=>wMe,TraceFlags:()=>iPt,ValueType:()=>lPt,W3CTraceContextPropagator:()=>OPt,baggageEntryMetadataFromString:()=>fPt,context:()=>vMe,default:()=>UPt,diag:()=>RQ,getNodeAutoInstrumentations:()=>wPt,isSpanContextValid:()=>uPt,isValidSpanId:()=>pPt,isValidTraceId:()=>dPt,metrics:()=>SMe,propagation:()=>TMe,registerInstrumentations:()=>EPt,resourceFromAttributes:()=>_Pt,trace:()=>bMe});var CQ,hz,kQ,yz,bMe,vMe,TMe,SMe,RQ,wMe,EMe,iPt,aPt,cPt,lPt,uPt,dPt,pPt,mPt,fPt,gPt,hPt,yPt,xPt,bPt,vPt,TPt,SPt,wPt,EPt,_Pt,CPt,kPt,RPt,APt,IPt,PPt,MPt,OPt,NPt,DPt,LPt,FPt,UPt,CMe=C(()=>{CQ={setAttribute(){return this},setAttributes(){return this},addEvent(){return this},setStatus(){return this},updateName(){return this},end(){},isRecording(){return!1},recordException(){},spanContext(){return{traceId:"0",spanId:"0",traceFlags:0}}},hz={startSpan(){return CQ},startActiveSpan(r,e,t){return(typeof e=="function"?e:t)(CQ)}},kQ={createCounter(){return{add(){}}},createHistogram(){return{record(){}}},createUpDownCounter(){return{add(){}}},createObservableGauge(){return{addCallback(){}}}},yz={getValue(){},setValue(){return yz},deleteValue(){return yz}},bMe={getTracer(){return hz},getTracerProvider(){return{getTracer(){return hz}}},setGlobalTracerProvider(){},getSpan(){return CQ},getActiveSpan(){},setSpan(r){return r},deleteSpan(r){return r},setSpanContext(r){return r},getSpanContext(){}},vMe={active(){return yz},with(r,e){return e()},bind(r,e){return e},setValue(){return yz},getValue(){}},TMe={inject(){},extract(r){return r},setGlobalPropagator(){},getBaggage(){},setBaggage(r){return r},createBaggage(){return{getAllEntries(){return[]},getEntry(){},setEntry(){return this},removeEntry(){return this}}}},SMe={getMeter(){return kQ},getMeterProvider(){return{getMeter(){return kQ}}},setGlobalMeterProvider(){}},RQ={setLogger(){},verbose(){},debug(){},info(){},warn(){},error(){},createComponentLogger(){return RQ}},wMe={UNSET:0,OK:1,ERROR:2},EMe={INTERNAL:0,SERVER:1,CLIENT:2,PRODUCER:3,CONSUMER:4},iPt={NONE:0,SAMPLED:1},aPt=class{},cPt={NONE:0,ERROR:30,WARN:50,INFO:60,DEBUG:70,VERBOSE:80,ALL:9999},lPt={INT:0,DOUBLE:1},uPt=()=>!1,dPt=()=>!1,pPt=()=>!1,mPt={traceId:"0",spanId:"0",traceFlags:0},fPt=()=>({}),gPt=class{start(){}shutdown(){return Promise.resolve()}},hPt=class{constructor(){}register(){}addSpanProcessor(){}getTracer(){return hz}shutdown(){return Promise.resolve()}},yPt=class{register(){}addSpanProcessor(){}getTracer(){return hz}shutdown(){return Promise.resolve()}},xPt=class{onStart(){}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}},bPt=class{onStart(){}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}},vPt=class{export(){}shutdown(){return Promise.resolve()}},TPt=class{export(){}shutdown(){return Promise.resolve()}},SPt=class{constructor(){}export(){}shutdown(){return Promise.resolve()}},wPt=()=>[],EPt=()=>{},_Pt=r=>({attributes:r||{},merge(){return this}}),CPt=class{onStart(){}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}},kPt=class{constructor(){}getLogger(){return{emit(){}}}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},RPt=class{onStart(){}onEnd(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}},APt=class{constructor(){}getMeter(){return kQ}addMetricReader(){}forceFlush(){return Promise.resolve()}shutdown(){return Promise.resolve()}},IPt=class{constructor(){}shutdown(){return Promise.resolve()}forceFlush(){return Promise.resolve()}},PPt={UNSPECIFIED:0,TRACE:1,TRACE2:2,TRACE3:3,TRACE4:4,DEBUG:5,DEBUG2:6,DEBUG3:7,DEBUG4:8,INFO:9,INFO2:10,INFO3:11,INFO4:12,WARN:13,WARN2:14,WARN3:15,WARN4:16,ERROR:17,ERROR2:18,ERROR3:19,ERROR4:20,FATAL:21,FATAL2:22,FATAL3:23,FATAL4:24},MPt=class{enable(){return this}disable(){return this}},OPt=class{inject(){}extract(r){return r}fields(){return[]}},NPt="service.name",DPt="service.version",LPt="service.name",FPt="service.version",UPt={trace:bMe,context:vMe,propagation:TMe,metrics:SMe,diag:RQ,SpanStatusCode:wMe,SpanKind:EMe}});var AQ={};te(AQ,{TelemetryService:()=>Cm});var Cm,VE=C(()=>{"use strict";Dr();SQ();wQ();EQ();_Q();H();Cm=class r{static instance;tracerProvider;enabled=!1;initialized=!1;usingExternalTracerProvider=!1;meter;tracer;aiRequestCounter;aiRequestDuration;aiTokensUsed;aiProviderErrors;aiCostUsd;mcpToolCalls;connectionCounter;responseTimeHistogram;activeConnectionCount=0;errorCount=0;requestCount=0;totalResponseTime=0;responseTimeCount=0;constructor(){this.enabled=this.isTelemetryEnabled(),this.enabled?this.initializeTelemetry():g.debug("[Telemetry] Disabled - set NEUROLINK_TELEMETRY_ENABLED=true or configure OTEL_EXPORTER_OTLP_ENDPOINT to enable")}static getInstance(){return r.instance||(r.instance=new r),r.instance}isTelemetryEnabled(){return this.hasExternalTracerProvider()||process.env.NEUROLINK_TELEMETRY_ENABLED==="true"||process.env.OTEL_EXPORTER_OTLP_ENDPOINT!==void 0}hasExternalTracerProvider(){try{let e=Tt.getTracerProvider();if(!e)return!1;let t=e.constructor?.name||"";if(t&&t!=="ProxyTracerProvider"&&t!=="NoopTracerProvider")return!0;let o=(typeof e.getDelegate=="function"?e.getDelegate():e._delegate)?.constructor?.name||"";return!!(o&&o!=="NoopTracerProvider")}catch(e){return g.warn("[Telemetry] Failed checking for external TracerProvider",{error:e instanceof Error?e.message:String(e)}),!1}}adoptExternalTracerProvider(e){this.usingExternalTracerProvider=!0,this.tracerProvider=void 0,this.meter=If.getMeter("neurolink-ai"),this.tracer=Tt.getTracer("neurolink-ai"),this.initializeMetrics(),g.debug("[Telemetry] Reusing externally managed TracerProvider",{reason:e,endpoint:process.env.OTEL_EXPORTER_OTLP_ENDPOINT})}initializeTelemetry(){try{if(this.hasExternalTracerProvider()){this.adoptExternalTracerProvider("global tracer provider already registered");return}let e=mz({[fz]:process.env.OTEL_SERVICE_NAME||"neurolink-ai",[gz]:process.env.OTEL_SERVICE_VERSION||"3.0.1"}),t=new pz({url:process.env.OTEL_EXPORTER_OTLP_ENDPOINT?`${process.env.OTEL_EXPORTER_OTLP_ENDPOINT}/v1/traces`:void 0});this.tracerProvider=new xMe({resource:e,spanProcessors:[new dz(t)]}),this.meter=If.getMeter("neurolink-ai"),this.tracer=this.tracerProvider.getTracer("neurolink-ai"),this.initializeMetrics(),g.debug("[Telemetry] Initialized local telemetry exporter",{endpoint:process.env.OTEL_EXPORTER_OTLP_ENDPOINT,globalTracerProviderOwnedBy:"observability/instrumentation"})}catch(e){let t=e instanceof Error?e.message:String(e);if((t.includes("duplicate registration")||t.includes("already registered")||t.includes("already set"))&&this.hasExternalTracerProvider()){this.adoptExternalTracerProvider("duplicate global tracer registration detected");return}g.error("[Telemetry] Failed to initialize:",e),this.enabled=!1}}initializeMetrics(){!this.enabled||!this.meter||(this.aiRequestCounter=this.meter.createCounter("ai_requests_total",{description:"Total number of AI requests"}),this.aiRequestDuration=this.meter.createHistogram("ai_request_duration_ms",{description:"AI request duration in milliseconds"}),this.aiTokensUsed=this.meter.createCounter("ai_tokens_used_total",{description:"Total number of AI tokens used"}),this.aiCostUsd=this.meter.createCounter("ai_cost_usd_total",{description:"Total accumulated AI cost in USD"}),this.aiProviderErrors=this.meter.createCounter("ai_provider_errors_total",{description:"Total number of AI provider errors"}),this.mcpToolCalls=this.meter.createCounter("mcp_tool_calls_total",{description:"Total number of MCP tool calls"}),this.connectionCounter=this.meter.createCounter("connections_total",{description:"Total number of connections"}),this.responseTimeHistogram=this.meter.createHistogram("response_time_ms",{description:"Response time in milliseconds"}))}async initialize(){if(this.enabled){if(this.usingExternalTracerProvider){this.initialized=!0,g.debug("[Telemetry] External TracerProvider already initialized by host");return}if(!this.tracerProvider){this.initialized=!0,g.debug("[Telemetry] Tracer provider already prepared during constructor");return}try{try{let{AsyncLocalStorageContextManager:e}=await Promise.resolve().then(()=>(CMe(),_Me));wr.setGlobalContextManager(new e().enable())}catch{}this.initialized=!0,g.debug("[Telemetry] Tracer provider started successfully")}catch(e){g.error("[Telemetry] Failed to start:",e),this.enabled=!1,this.initialized=!1}}}async traceAIRequest(e,t,n="generate_text"){if(!this.enabled||!this.tracer)return await t();let o=this.tracer.startSpan(`ai.${e}.${n}`,{attributes:{"ai.provider":e,"ai.operation":n}});try{let s=await t();return o.setStatus({code:1}),s}catch(s){throw o.setStatus({code:2,message:s instanceof Error?s.message:"Unknown error"}),o.recordException(s),s}finally{o.end()}}recordAIRequest(e,t,n,o,s){if(this.requestCount++,this.totalResponseTime+=o,this.responseTimeCount++,!this.enabled||!this.aiRequestCounter)return;let i={provider:e,model:t};this.aiRequestCounter.add(1,i),this.aiRequestDuration?.record(o,i),this.aiTokensUsed?.add(n,i),s!==void 0&&Number.isFinite(s)&&s>0&&this.aiCostUsd?.add(s,i)}recordAIError(e,t){this.errorCount++,!(!this.enabled||!this.aiProviderErrors)&&this.aiProviderErrors.add(1,{provider:e,error:t.name,message:t.message.substring(0,100)})}recordMCPToolCall(e,t,n){!this.enabled||!this.mcpToolCalls||this.mcpToolCalls.add(1,{tool:e,success:n.toString(),duration_bucket:this.getDurationBucket(t)})}recordConnection(e){this.activeConnectionCount++,!(!this.enabled||!this.connectionCounter)&&this.connectionCounter.add(1,{connection_type:e})}recordConnectionClosed(e){this.activeConnectionCount=Math.max(0,this.activeConnectionCount-1),!(!this.enabled||!this.connectionCounter)&&this.connectionCounter.add(-1,{connection_type:e,event:"disconnect"})}recordResponseTime(e,t,n){this.totalResponseTime+=n,this.responseTimeCount++,!(!this.enabled||!this.responseTimeHistogram)&&this.responseTimeHistogram.record(n,{endpoint:e,method:t,status_bucket:this.getStatusBucket(n)})}recordCustomMetric(e,t,n){if(!this.enabled||!this.meter)return;this.meter.createCounter(`custom_${e}`,{description:`Custom metric: ${e}`}).add(t,n||{})}recordCustomHistogram(e,t,n){if(!this.enabled||!this.meter)return;this.meter.createHistogram(`custom_${e}_histogram`,{description:`Custom histogram: ${e}`}).record(t,n||{})}async getHealthMetrics(){let e=process.memoryUsage(),t=this.requestCount>0?this.errorCount/this.requestCount*100:0,n=this.responseTimeCount>0?this.totalResponseTime/this.responseTimeCount:0;return{timestamp:Date.now(),memoryUsage:e,uptime:process.uptime(),activeConnections:this.activeConnectionCount,errorRate:Math.round(t*100)/100,averageResponseTime:Math.round(n*100)/100}}isEnabled(){return this.enabled}getStatus(){return{enabled:this.enabled,initialized:this.initialized,endpoint:process.env.OTEL_EXPORTER_OTLP_ENDPOINT,service:process.env.OTEL_SERVICE_NAME||"neurolink-ai",version:process.env.OTEL_SERVICE_VERSION||"3.0.1"}}getDurationBucket(e){return e<100?"fast":e<500?"medium":e<1e3?"slow":"very_slow"}getStatusBucket(e){return e<200?"excellent":e<500?"good":e<1e3?"acceptable":"poor"}async shutdown(){if(this.enabled&&this.tracerProvider&&!this.usingExternalTracerProvider)try{await this.tracerProvider.shutdown(),this.initialized=!1,g.debug("[Telemetry] Tracer provider shutdown completed")}catch(e){g.error("[Telemetry] Error during shutdown:",e)}}}});function os(r,e=kMe){let t;try{t=typeof r=="string"?r:JSON.stringify(r)??String(r)}catch{t=String(r)}if(t.length>e){let n=`...[truncated ${t.length-e} chars]`,o=Math.max(0,e-n.length);return`${t.slice(0,o)}${n}`}return t}var _e,$n,kMe,_P=C(()=>{"use strict";_e={GEN_AI_SYSTEM:"gen_ai.system",GEN_AI_MODEL:"gen_ai.request.model",GEN_AI_OPERATION:"gen_ai.operation.name",GEN_AI_INPUT_TOKENS:"gen_ai.usage.input_tokens",GEN_AI_OUTPUT_TOKENS:"gen_ai.usage.output_tokens",GEN_AI_FINISH_REASON:"gen_ai.response.finish_reason",GEN_AI_COST_USD:"gen_ai.cost_usd",GEN_AI_TOOL_NAME:"gen_ai.tool.name",GEN_AI_TEMPERATURE:"gen_ai.request.temperature",GEN_AI_MAX_TOKENS:"gen_ai.request.max_tokens",NL_PROVIDER:"neurolink.provider",NL_MODEL:"neurolink.model",NL_STREAM_MODE:"neurolink.stream_mode",NL_TOOL_COUNT:"neurolink.tool_count",NL_MESSAGE_COUNT:"neurolink.message_count",NL_HAS_TOOLS:"neurolink.has_tools",NL_INPUT_LENGTH:"neurolink.input_length",NL_OUTPUT_LENGTH:"neurolink.output_length",NL_REQUEST_ID:"neurolink.request_id",NL_PATH:"neurolink.path",NL_HAS_MEMORY:"neurolink.has_conversation_memory",NL_COST:"neurolink.cost",NL_STRUCTURED_OUTPUT:"neurolink.structured_output",NL_HAS_FALLBACK:"neurolink.has_fallback",MCP_SERVER_ID:"mcp.server_id",MCP_TOOL_NAME:"mcp.tool_name",MCP_TIMEOUT_MS:"mcp.timeout_ms",MCP_TRANSPORT:"mcp.transport",MCP_CIRCUIT_STATE:"mcp.circuit_state",SESSION_ID:"session.id",USER_ID:"user.id",MEMORY_TYPE:"memory.type",MESSAGE_COUNT:"message.count",CONTENT_LENGTH:"content.length",RAG_FILE_COUNT:"rag.file_count",RAG_STRATEGY:"rag.strategy",RAG_CHUNK_SIZE:"rag.chunk_size",RAG_TOP_K:"rag.top_k",RAG_RESULT_COUNT:"rag.result_count",MSG_COUNT:"message.build.count",MSG_HAS_IMAGES:"message.has_images",MSG_HAS_FILES:"message.has_files",MSG_HAS_SYSTEM_PROMPT:"message.has_system_prompt",MSG_TOTAL_CONTENT_LENGTH:"message.total_content_length",MSG_IS_MULTIMODAL:"message.is_multimodal",FILE_NAME:"file.name",FILE_MIMETYPE:"file.mimetype",FILE_SIZE_BYTES:"file.size_bytes",FILE_CATEGORY:"file.category",FILE_OUTPUT_LENGTH:"file.output_length",FILE_SUCCESS:"file.success",FILE_PROCESSOR_USED:"file.processor_used",FILE_CONFIDENCE:"file.detection_confidence",FILE_HAS_IMAGES:"file.has_images",FILE_IMAGE_COUNT:"file.image_count",FILE_ERROR:"file.error",FILE_SKIPPED_REASON:"file.skipped_reason",FILE_TOTAL_COUNT:"file.total_count",FILE_INCLUDED_COUNT:"file.included_count",FILE_CONTENT_TYPE:"file.content_type",VIDEO_DURATION_SEC:"video.duration_sec",VIDEO_WIDTH:"video.width",VIDEO_HEIGHT:"video.height",VIDEO_CODEC:"video.codec",VIDEO_AUDIO_CODEC:"video.audio_codec",VIDEO_FORMAT:"video.format",VIDEO_BITRATE:"video.bitrate",VIDEO_KEYFRAMES_EXTRACTED:"video.keyframes_extracted",VIDEO_TARGET_FRAMES:"video.target_frames",VIDEO_INTERVAL_SEC:"video.interval_sec",VIDEO_FRAME_QUALITY:"video.frame_quality",VIDEO_FRAME_RESIZE_PX:"video.frame_resize_px",VIDEO_FRAMES_RESIZED:"video.frames_resized",VIDEO_TOTAL_FRAME_BYTES:"video.total_frame_bytes",VIDEO_HAS_SUBTITLES:"video.has_subtitles",VIDEO_SUBTITLE_LENGTH:"video.subtitle_length",VIDEO_TEXT_CONTENT_LENGTH:"video.text_content_length",VIDEO_HAS_METADATA:"video.has_metadata",VIDEO_HAS_KEYFRAMES:"video.has_keyframes",VIDEO_TEMP_PATH:"video.temp_path",VIDEO_BYTES_WRITTEN:"video.bytes_written",VIDEO_WRITE_DURATION_MS:"video.write_duration_ms",VIDEO_STEP:"video.step",CONTEXT_STAGE:"context.compaction_stage",CONTEXT_TOKENS_BEFORE:"context.tokens_before",CONTEXT_TOKENS_AFTER:"context.tokens_after",MW_COUNT:"middleware.count",MW_NAMES:"middleware.names",AR_TAG:"autoresearch.tag",AR_BRANCH:"autoresearch.branch",AR_PHASE:"autoresearch.phase",AR_PHASE_FROM:"autoresearch.phase_from",AR_PHASE_TO:"autoresearch.phase_to",AR_RUN_COUNT:"autoresearch.run_count",AR_KEEP_COUNT:"autoresearch.keep_count",AR_STATUS:"autoresearch.status",AR_METRIC:"autoresearch.metric",AR_BEST_METRIC:"autoresearch.best_metric",AR_DIRECTION:"autoresearch.metric_direction",AR_COMMIT:"autoresearch.commit",AR_DURATION_MS:"autoresearch.duration_ms",AR_DESCRIPTION:"autoresearch.description",AR_ERROR_CODE:"autoresearch.error_code"},$n={TRACE_NAME:"langfuse.trace.name",TRACE_INPUT:"langfuse.trace.input",TRACE_OUTPUT:"langfuse.trace.output",OBSERVATION_TYPE:"langfuse.observation.type",OBSERVATION_INPUT:"langfuse.observation.input",OBSERVATION_OUTPUT:"langfuse.observation.output",OBSERVATION_METADATA:"langfuse.observation.metadata",OBSERVATION_MODEL_NAME:"langfuse.observation.model.name",OBSERVATION_MODEL_PARAMETERS:"langfuse.observation.model.parameters",OBSERVATION_USAGE_DETAILS:"langfuse.observation.usage_details",OBSERVATION_LEVEL:"langfuse.observation.level",OBSERVATION_STATUS_MESSAGE:"langfuse.observation.status_message",OBSERVATION_COMPLETION_START_TIME:"langfuse.observation.completion_start_time"},kMe=4e4});async function RMe(){let{TelemetryService:r}=await Promise.resolve().then(()=>(VE(),AQ)),e=r.getInstance();return e.isEnabled()&&(await e.initialize(),g.info("[NeuroLink] Telemetry initialized")),e}async function AMe(){let{TelemetryService:r}=await Promise.resolve().then(()=>(VE(),AQ));return r.getInstance().getStatus()}var kl=C(()=>{"use strict";Vr();An();_P();H()});function CP(r){if(r&&typeof r.timeoutMs=="number"&&Number.isFinite(r.timeoutMs)&&r.timeoutMs>=0)return r.timeoutMs;let e=process.env.NEUROLINK_LIFECYCLE_TIMEOUT_MS;if(e){let t=Number(e);if(Number.isFinite(t)&&t>=0)return t}return 5e3}var IQ=C(()=>{"use strict"});function Rl(r){if(r!==void 0){if(typeof r=="number"){if(r<=0)throw new Error(`Timeout must be positive, got: ${r}`);return r}if(typeof r=="string"){let e=r.match(/^(\d+(?:\.\d+)?)(ms|s|m|h)?$/);if(!e)throw new Error(`Invalid timeout format: ${r}. Use formats like '30s', '2m', '500ms', or '1.5h'`);let t=parseFloat(e[1]);if(t<=0)throw new Error(`Timeout must be positive, got: ${t}`);switch(e[2]||"ms"){case"ms":return t;case"s":return t*1e3;case"m":return t*60*1e3;case"h":return t*60*60*1e3;default:return t}}throw new Error(`Invalid timeout type: ${typeof r}`)}}function IMe(r,e="generate"){if(e==="stream")return PQ.streaming;let t=r.toLowerCase().replace("_","-");return PQ.providers[t]||PQ.global}async function PMe(r,e,t,n){let o=Rl(e);if(!o)return r;let s=new Promise((i,a)=>{setTimeout(()=>{a(new tr(`${t} ${n} operation timed out after ${o}ms`,o,t,n))},o)});return Promise.race([r,s])}function pi(r,e,t){let n=Rl(r);if(!n)return null;let o=new AbortController,s=setTimeout(()=>{o.abort(new tr(`${e} ${t} operation timed out after ${r}`,n,e,t))},n);return{controller:o,cleanup:()=>{clearTimeout(s)},timeoutMs:n}}function Qf(r,e){return r&&e?AbortSignal.any([r,e]):r??e}function xz(r){let e=new AbortController;for(let t of r)if(t&&!t.aborted&&t.addEventListener("abort",()=>{e.signal.aborted||e.abort(t.reason)}),t?.aborted){e.abort(t.reason);break}return e}var tr,PQ,ro=C(()=>{"use strict";tr=class r extends Error{constructor(t,n,o,s){super(t);this.timeout=n;this.provider=o;this.operation=s;this.name="TimeoutError",typeof Error.captureStackTrace=="function"&&Error.captureStackTrace(this,r)}timeout;provider;operation};PQ={global:"30s",streaming:"2m",providers:{openai:"30s",bedrock:"45s",vertex:"60s",anthropic:"60s",azure:"30s","google-ai":"30s",huggingface:"2m",ollama:"5m",mistral:"45s",litellm:"5m"},tools:{default:"10s",filesystem:"5s",network:"30s",computation:"2m"}}});var MMe=C(()=>{});var bz,vz=C(()=>{Al();bz=(r,e)=>r.anyOf.length?r.anyOf.length===1?bn(r.anyOf[0],{...e,path:[...e.path,"anyOf",0]}):`z.union([${r.anyOf.map((t,n)=>bn(t,{...e,path:[...e.path,"anyOf",n]})).join(", ")}])`:"z.any()"});var OMe,MQ=C(()=>{OMe=r=>"z.boolean()"});var NMe,OQ=C(()=>{NMe=r=>"z.any()"});var DMe,NQ=C(()=>{Al();DMe=(r,e)=>`z.union([${r.type.map(t=>bn({...r,type:t},{...e,withoutDefaults:!0})).join(", ")}])`});var LMe,DQ=C(()=>{Al();LMe=(r,e)=>`z.any().refine((value) => !${bn(r.not,{...e,path:[...e.path,"not"]})}.safeParse(value).success, "Invalid input: Should NOT be valid against schema")`});var FMe,LQ=C(()=>{FMe=r=>"z.null()"});var UMe,FQ=C(()=>{UMe=r=>[r.slice(0,r.length/2),r.slice(r.length/2)]});function qE(r,e){if(r.allOf.length===0)return"z.never()";if(r.allOf.length===1){let t=r.allOf[0];return bn(t,{...e,path:[...e.path,"allOf",t[kP]]})}else{let[t,n]=UMe($Pt(r.allOf));return`z.intersection(${qE({allOf:t},e)}, ${qE({allOf:n},e)})`}}var kP,$Pt,Tz=C(()=>{Al();FQ();kP=Symbol("Original index"),$Pt=r=>{let e=[];for(let t=0;t<r.length;t++){let n=r[t];if(typeof n=="boolean")e.push(n?{[kP]:t}:{[kP]:t,not:{}});else{if(kP in n)return r;e.push({...n,[kP]:t})}}return e}});function ws(r,e,t,n){let o=r[e],s="";if(o!==void 0){let i=t({value:o,json:JSON.stringify(o)});if(i){let a=i[0],c=i.length===3?i[1]:"",l=i.length===3?i[2]:i[1];s+=a;let u=r.errorMessage?.[e]??n;u!==void 0&&(s+=c+JSON.stringify(u)),s+=l}}return s}var RP=C(()=>{});var $Me,UQ=C(()=>{RP();Al();$Me=(r,e)=>{if(Array.isArray(r.items))return`z.tuple([${r.items.map((n,o)=>bn(n,{...e,path:[...e.path,"items",o]}))}])`;let t=r.items?`z.array(${bn(r.items,{...e,path:[...e.path,"items"]})})`:"z.array(z.any())";return t+=ws(r,"minItems",({json:n})=>[`.min(${n}`,", ",")"]),t+=ws(r,"maxItems",({json:n})=>[`.max(${n}`,", ",")"]),r.uniqueItems===!0&&(t+=ws(r,"uniqueItems",()=>[".refine((arr) => arr.every((item, i) => arr.indexOf(item) == i)",", ",")"],"All items must be unique!")),t}});var BMe,$Q=C(()=>{BMe=r=>`z.literal(${JSON.stringify(r.const)})`});var zMe,BQ=C(()=>{zMe=r=>r.enum.length===0?"z.never()":r.enum.length===1?`z.literal(${JSON.stringify(r.enum[0])})`:r.enum.every(e=>typeof e=="string")?`z.enum([${r.enum.map(e=>JSON.stringify(e))}])`:`z.union([${r.enum.map(e=>`z.literal(${JSON.stringify(e)})`).join(", ")}])`});var jMe,zQ=C(()=>{Al();jMe=(r,e)=>{let t=bn(r.if,{...e,path:[...e.path,"if"]}),n=bn(r.then,{...e,path:[...e.path,"then"]}),o=bn(r.else,{...e,path:[...e.path,"else"]});return`z.union([${n}, ${o}]).superRefine((value,ctx) => {
681
681
  const result = ${t}.safeParse(value).success
682
682
  ? ${n}.safeParse(value)
683
683
  : ${o}.safeParse(value);
@@ -816,7 +816,7 @@ ${t}
816
816
  ]`}function T(){let B=arguments.length>0&&arguments[0]!==void 0?arguments[0]:!1,K=arguments.length>1&&arguments[1]!==void 0?arguments[1]:-1,Z=r[e]==="\\";if(Z&&(e++,Z=!0),cM(r[e])){let q=Ere(r[e])?Ere:_re(r[e])?_re:jj(r[e])?jj:wre,ce=e,ye=t.length,J='"';for(e++;;){if(e>=r.length){let be=I(e-1);return!B&&aM(r.charAt(be))?(e=ce,t=t.substring(0,ye),T(!0)):(J=_d(J,'"'),t+=J,!0)}if(e===K)return J=_d(J,'"'),t+=J,!0;if(q(r[e])){let be=e,fe=J.length;if(J+='"',e++,t+=J,i(!1),B||e>=r.length||aM(r[e])||cM(r[e])||Iy(r[e]))return S(),!0;let Ue=I(be-1),ge=r.charAt(Ue);if(ge===",")return e=ce,t=t.substring(0,ye),T(!1,Ue);if(aM(ge))return e=ce,t=t.substring(0,ye),T(!0);t=t.substring(0,ye),e=be+1,J=`${J.substring(0,fe)}\\${J.substring(fe)}`}else if(B&&Tre(r[e])){if(r[e-1]===":"&&bre.test(r.substring(ce+1,e+2)))for(;e<r.length&&vre.test(r[e]);)J+=r[e],e++;return J=_d(J,'"'),t+=J,S(),!0}else if(r[e]==="\\"){let be=r.charAt(e+1);if(O2t[be]!==void 0)J+=r.slice(e,e+2),e+=2;else if(be==="u"){let Ue=2;for(;Ue<6&&rDe(r[e+Ue]);)Ue++;Ue===6?(J+=r.slice(e,e+6),e+=6):e+Ue>=r.length?e=r.length:V()}else be===`
817
817
  `?(J+="\\n",e+=2):(J+=be,e+=2)}else{let be=r.charAt(e);be==='"'&&r[e-1]!=="\\"?(J+=`\\${be}`,e++):oDe(be)?(J+=M2t[be],e++):(nDe(be)||z(be),J+=be,e++)}Z&&f()}}return!1}function S(){let B=!1;for(i();r[e]==="+";){B=!0,e++,i(),t=s_(t,'"',!0);let K=t.length;T()?t=aDe(t,K,1):t=_d(t,'"')}return B}function E(){let B=e;if(r[e]==="-"){if(e++,M())return D(B),!0;if(!Iy(r[e]))return e=B,!1}for(;Iy(r[e]);)e++;if(r[e]==="."){if(e++,M())return D(B),!0;if(!Iy(r[e]))return e=B,!1;for(;Iy(r[e]);)e++}if(r[e]==="e"||r[e]==="E"){if(e++,(r[e]==="-"||r[e]==="+")&&e++,M())return D(B),!0;if(!Iy(r[e]))return e=B,!1;for(;Iy(r[e]);)e++}if(!M())return e=B,!1;if(e>B){let K=r.slice(B,e),Z=/^0\d/.test(K);return t+=Z?`"${K}"`:K,!0}return!1}function k(){return R("true","true")||R("false","false")||R("null","null")||R("True","true")||R("False","false")||R("None","null")}function R(B,K){return r.slice(e,e+B.length)===B?(t+=K,e+=B.length,!0):!1}function P(B){let K=e;if(yre(r[e])){for(;e<r.length&&xre(r[e]);)e++;let Z=e;for(;Ay(r,Z);)Z++;if(r[Z]==="(")return e=Z+1,s(),r[e]===")"&&(e++,r[e]===";"&&e++),!0}for(;e<r.length&&!Tre(r[e])&&!cM(r[e])&&(!B||r[e]!==":");)e++;if(r[e-1]===":"&&bre.test(r.substring(K,e+2)))for(;e<r.length&&vre.test(r[e]);)e++;if(e>K){for(;Ay(r,e-1)&&e>0;)e--;let Z=r.slice(K,e);return t+=Z==="undefined"?"null":JSON.stringify(Z),r[e]==='"'&&e++,!0}}function A(){if(r[e]==="/"){let B=e;for(e++;e<r.length&&(r[e]!=="/"||r[e-1]==="\\");)e++;return e++,t+=JSON.stringify(r.substring(B,e)),!0}}function I(B){let K=B;for(;K>0&&Ay(r,K);)K--;return K}function M(){return e>=r.length||aM(r[e])||Ay(r,e)}function D(B){t+=`${r.slice(B,e)}0`}function z(B){throw new og(`Invalid character ${JSON.stringify(B)}`,e)}function O(){throw new og(`Unexpected character ${JSON.stringify(r[e])}`,e)}function L(){throw new og("Unexpected end of json string",r.length)}function $(){throw new og("Object key expected",e)}function U(){throw new og("Colon expected",e)}function V(){let B=r.slice(e,e+6);throw new og(`Invalid unicode character "${B}"`,e)}}function N2t(r,e){return r[e]==="*"&&r[e+1]==="/"}var M2t,O2t,uDe=C(()=>{tDe();lDe();M2t={"\b":"\\b","\f":"\\f","\n":"\\n","\r":"\\r"," ":"\\t"},O2t={'"':'"',"\\":"\\","/":"/",b:"\b",f:"\f",n:`
818
818
  `,r:"\r",t:" "}});var dDe=C(()=>{uDe()});function kre(r,e=0){for(let t=e;t<r.length;t++){let n=r[t];if(n!=="{"&&n!=="[")continue;let o=n==="{"?"}":"]",s=0,i=!1,a=!1;for(let c=t;c<r.length;c++){let l=r[c];if(a){a=!1;continue}if(l==="\\"){a=!0;continue}if(l==='"'){i=!i;continue}if(!i){if(l===n)s++;else if(l===o&&(s--,s===0))return{span:r.substring(t,c+1),end:c+1}}}}return null}var pDe=C(()=>{"use strict"});function D2t(r){return typeof r.safeParse=="function"}function L2t(r){try{return{value:JSON.parse(r),repaired:!1}}catch{}try{let e=Cre(r),t=JSON.parse(e);return e!==r&&g.shouldLog("debug")&&g.debug("[coerceJsonToSchema] jsonrepair altered model output",{originalLength:r.length,repairedLength:e.length}),{value:t,repaired:e!==r}}catch{return}}function Rre(r,e=0){if(e>F2t)return{value:r,changed:!1};if(typeof r=="string"){let t=r.trim();if(t.startsWith("{")&&t.endsWith("}")||t.startsWith("[")&&t.endsWith("]"))try{let o=JSON.parse(t);if(o!==null&&typeof o=="object")return{value:o,changed:!0}}catch{}return{value:r,changed:!1}}if(Array.isArray(r)){let t=!1,n=r.map(o=>{let s=Rre(o,e+1);return s.changed&&(t=!0),s.value});return{value:t?n:r,changed:t}}if(r!==null&&typeof r=="object"){let t=!1,n={};for(let[o,s]of Object.entries(r)){let i=Rre(s,e+1);i.changed&&(t=!0),n[o]=i.value}return{value:t?n:r,changed:t}}return{value:r,changed:!1}}function Gj(r,e){if(typeof r!="string"||r.trim().length===0)return null;let t=[],n=0;for(;;){let h=kre(r,n);if(!h)break;t.push({text:h.span,truncated:!1}),n=h.end}let o=[r.indexOf("{"),r.indexOf("[")].filter(h=>h>=0),s=o.length>0?Math.min(...o):-1,i=Math.max(r.lastIndexOf("}"),r.lastIndexOf("]"));s>=0&&i>s&&t.push({text:r.slice(s,i+1),truncated:!1}),s>=0&&t.push({text:r.slice(s),truncated:!0});let a=r.trim();if(a.length>1&&a.startsWith('"')&&a.endsWith('"'))try{let h=JSON.parse(a);if(typeof h=="string"){let y=0;for(;;){let x=kre(h,y);if(!x)break;t.push({text:x.span,truncated:!1}),y=x.end}}}catch{}let c,l=[],u=!!(e&&D2t(e)),d=new Set;for(let h of t){if(d.has(h.text))continue;d.add(h.text);let y=L2t(h.text);if(y===void 0||y.value===null||typeof y.value!="object")continue;let x={value:y.value,repaired:y.repaired,truncated:h.truncated};if(c===void 0&&(c=x),!u)break;let b=e;if(b.safeParse(y.value).success)l.push(x);else{let T=Rre(y.value);T.changed&&T.value!==null&&typeof T.value=="object"&&b.safeParse(T.value).success?l.push({value:T.value,repaired:!0,truncated:h.truncated}):Array.isArray(y.value)&&y.value.length===1&&y.value[0]!==null&&typeof y.value[0]=="object"&&!Array.isArray(y.value[0])&&b.safeParse(y.value[0]).success&&l.push({value:y.value[0],repaired:!0,truncated:h.truncated})}}let f=(l.length>0?l.reduce((h,y)=>JSON.stringify(y.value).length>JSON.stringify(h.value).length?y:h):void 0)??c;return f===void 0?null:{content:JSON.stringify(f.value),structuredData:f.value,repaired:f.repaired,truncated:f.truncated}}var F2t,Are=C(()=>{"use strict";dDe();H();pDe();F2t=6});function mDe(r){let e=[],t=[];for(let n of r)n.role==="system"?e.push(n):t.push(n);return e.length===0||t.length===0?{system:void 0,messages:r}:{system:e,messages:t}}var fDe=C(()=>{"use strict"});function $2t(r){if(r===void 0)return"";try{return((typeof r=="string"?r:JSON.stringify(r))??"").substring(0,200)}catch{return"[unserializable]"}}var U2t,lM,gDe=C(()=>{"use strict";Dr();KNe();Vr();H();sM();Ed();XNe();$j();ki();zj();Are();Im();mP();sv();fDe();U2t=ke.generation;lM=class{constructor(e,t,n,o,s,i){this.providerName=e;this.modelName=t;this.supportsToolsFn=n;this.getTelemetryConfigFn=o;this.handleToolStorageFn=s;this.getEmitterFn=i}providerName;modelName;supportsToolsFn;getTelemetryConfigFn;handleToolStorageFn;getEmitterFn;async callGenerateText(e,t,n,o,s,i){let a=this.providerName==="google-ai"||this.providerName==="vertex",c=this.providerName==="anthropic"||this.providerName==="bedrock"||this.providerName==="vertex"&&this.modelName?.startsWith("claude-"),u=i&&(!!o.schema||o.output?.format==="json"||o.output?.format==="structured")&&!ZNe(this.providerName,this.modelName,s,Object.keys(n).length),d=n;if(c&&s&&Object.keys(d).length>0){let y=Object.keys(d),x=y[y.length-1];if(x&&d[x]){let b=d[x];d[x]={...b,providerOptions:{...b.providerOptions??{},anthropic:{cacheControl:{type:"ephemeral"}}}}}}let p=o.prepareStep,{system:f,messages:h}=mDe(t);return await Hf({model:e,...f&&{system:f},messages:h,...s&&Object.keys(d).length>0&&{tools:d},stopWhen:dP(o.maxSteps??Ws),...s&&o.toolChoice&&{toolChoice:o.toolChoice},...p&&{experimental_prepareStep:(y=>p({...y,maxSteps:o.maxSteps??Ws}))},temperature:o.temperature,maxOutputTokens:o.maxTokens,maxRetries:0,abortSignal:o.abortSignal,...u&&o.schema&&{experimental_output:uB.object({schema:o.schema})},...o.thinkingConfig?.enabled&&{...c&&o.thinkingConfig.budgetTokens&&!o.thinkingConfig.thinkingLevel&&{experimental_thinking:{type:"enabled",budgetTokens:o.thinkingConfig.budgetTokens}},...a&&{providerOptions:{google:{thinkingConfig:{...o.thinkingConfig.thinkingLevel&&{thinkingLevel:o.thinkingConfig.thinkingLevel},...o.thinkingConfig.budgetTokens&&!o.thinkingConfig.thinkingLevel&&{thinkingBudget:o.thinkingConfig.budgetTokens},includeThoughts:!0}}}}},experimental_telemetry:this.getTelemetryConfigFn(o,"generate"),onStepFinish:({toolCalls:y,toolResults:x})=>{g.info("Tool execution completed",{toolResults:x,toolCalls:y}),Ry(this.getEmitterFn?.(),x),this.handleToolStorageFn(y,x,o,new Date).catch(b=>{g.warn("[GenerationHandler] Failed to store tool executions",{provider:this.providerName,error:b instanceof Error?b.message:String(b)})})}})}async executeGeneration(e,t,n,o){return U2t.startActiveSpan("neurolink.executeGeneration",{kind:kr.INTERNAL},async s=>{let i=!o.disableTools&&this.supportsToolsFn(),a=Object.keys(n||{}).length,c=!!o.schema||o.output?.format==="json"||o.output?.format==="structured";s.setAttribute("gen_ai.system",this.providerName||"unknown"),s.setAttribute("neurolink.structured_output",c),s.setAttribute("neurolink.tool_count",a),s.setAttribute("neurolink.message_count",t.length),s.setAttribute("gen_ai.request.model",Dj(e,this.modelName||"unknown"));let l=o.requestId||o.context?.requestId||"unknown";if(g.info("[GenerationHandler] Calling generateText",{requestId:l,model:Dj(e),messageCount:t.length,toolCount:a,maxSteps:o.maxSteps,temperature:o.temperature}),g.shouldLog("debug"))try{g.debug("[Observability] Full generateText parameters",{requestId:l,model:Dj(e),messageCount:t.length,messages:t.map((d,p)=>({index:p,role:d.role,contentLength:typeof d.content=="string"?d.content.length:$2t(d.content).length,contentPreview:typeof d.content=="string"?d.content.substring(0,200):"[multimodal]"})),toolNames:Object.keys(n||{}),toolCount:a,maxSteps:o.maxSteps,temperature:o.temperature,maxTokens:o.maxTokens})}catch{}let u=Date.now();try{let d=await Uj(()=>this.callGenerateText(e,t,n,o,i,!0),s,"generateText");if(g.info("[GenerationHandler] generateText returned",{requestId:l,durationMs:Date.now()-u,finishReason:d.finishReason,steps:d.steps?.length||1,toolCallsTotal:d.toolCalls?.length||0,responseChars:d.text?.length||0}),g.shouldLog("debug")&&g.debug("[Observability] LLM response metadata",{requestId:l,responseLength:d.text?.length||0,hasToolCalls:!!(d.toolCalls&&d.toolCalls.length>0),toolCallCount:d.toolCalls?.length||0,toolNames:d.toolCalls?.map(p=>p.toolName),finishReason:d.finishReason,stepCount:d.steps?.length||0,steps:d.steps?.map((p,f)=>({stepIndex:f,stepType:p.stepType,textLength:p.text?.length||0,toolCallCount:p.toolCalls?.length||0,toolNames:p.toolCalls?.map(h=>h.toolName),toolResultCount:p.toolResults?.length||0,finishReason:p.finishReason})),usage:d.usage}),d.usage){s.setAttribute("gen_ai.usage.input_tokens",d.usage.inputTokens||0),s.setAttribute("gen_ai.usage.output_tokens",d.usage.outputTokens||0);let p=To(this.providerName,this.modelName,{input:d.usage.inputTokens||0,output:d.usage.outputTokens||0,total:(d.usage.inputTokens||0)+(d.usage.outputTokens||0)});s.setAttribute("neurolink.cost",p??0)}return d.finishReason&&s.setAttribute("gen_ai.response.finish_reason",d.finishReason),s.setStatus({code:Me.OK}),d}catch(d){let p=c&&Bj(d);if(c&&(d instanceof va||QNe(d)||p)){s.setAttribute("neurolink.has_fallback",!0),s.addEvent("retry.initial_failure",{"error.message":d instanceof Error?d.message:String(d),"retry.attempt":1,"retry.reason":d instanceof va?"NoObjectGeneratedError_structured_output_fallback":p?"schema_complexity_structured_output_fallback":"tools_schema_conflict_structured_output_fallback"}),p?g.warn("[GenerationHandler] schema too complex for provider constrained decoding \u2014 retrying with prompt-based JSON",{provider:this.providerName,model:this.modelName,error:d instanceof Error?d.message:String(d)}):g.debug("[GenerationHandler] structured-output conflict caught - falling back to manual JSON extraction",{provider:this.providerName,model:this.modelName,error:d instanceof Error?d.message:String(d)});let h=await Uj(()=>this.callGenerateText(e,t,n,o,i,!1),s,"generateText(fallback)");if(s.addEvent("retry.recovered",{"retry.attempts":2,"retry.strategy":"structured_output_disabled"}),s.setAttribute("retry.count",1),g.info("[GenerationHandler] generateText returned (fallback)",{requestId:l,durationMs:Date.now()-u,finishReason:h.finishReason,steps:h.steps?.length||1,toolCallsTotal:h.toolCalls?.length||0,responseChars:h.text?.length||0}),h.usage){s.setAttribute("gen_ai.usage.input_tokens",h.usage.inputTokens||0),s.setAttribute("gen_ai.usage.output_tokens",h.usage.outputTokens||0);let y=To(this.providerName,this.modelName,{input:h.usage.inputTokens||0,output:h.usage.outputTokens||0,total:(h.usage.inputTokens||0)+(h.usage.outputTokens||0)});s.setAttribute("neurolink.cost",y??0)}return h.finishReason&&s.setAttribute("gen_ai.response.finish_reason",h.finishReason),s.setStatus({code:Me.OK}),h}if(eDe(d)&&typeof o.temperature=="number"){s.setAttribute("neurolink.has_fallback",!0),s.addEvent("retry.initial_failure",{"error.message":d instanceof Error?d.message:String(d),"retry.attempt":1,"retry.reason":"temperature_deprecated"}),g.debug("[GenerationHandler] temperature-deprecated error caught - retrying without temperature",{provider:this.providerName,model:this.modelName,error:d instanceof Error?d.message:String(d)});let h=await Uj(()=>this.callGenerateText(e,t,n,{...o,temperature:void 0},i,!0),s,"generateText(no-temperature)");if(s.addEvent("retry.recovered",{"retry.attempts":2,"retry.strategy":"temperature_omitted"}),s.setAttribute("retry.count",1),h.usage){s.setAttribute("gen_ai.usage.input_tokens",h.usage.inputTokens||0),s.setAttribute("gen_ai.usage.output_tokens",h.usage.outputTokens||0);let y=To(this.providerName,this.modelName,{input:h.usage.inputTokens||0,output:h.usage.outputTokens||0,total:(h.usage.inputTokens||0)+(h.usage.outputTokens||0)});s.setAttribute("neurolink.cost",y??0)}return h.finishReason&&s.setAttribute("gen_ai.response.finish_reason",h.finishReason),s.setStatus({code:Me.OK}),h}throw s.setStatus({code:Me.ERROR,message:d instanceof Error?d.message:String(d)}),d}finally{s.end()}})}extractCacheMetricsFromProviderMetadata(e){let t=e.providerMetadata;if(!t)return{};let n=t.anthropic;if(n){let o=pre(n),s=mre(n);return{...o!==void 0&&{cacheCreationTokens:o},...s!==void 0&&{cacheReadTokens:s}}}return{}}logGenerationComplete(e){let t=this.extractCacheMetricsFromProviderMetadata(e);g.shouldLog("debug")&&g.debug("generateText completed",{provider:this.providerName,model:this.modelName,responseLength:e.text?.length||0,toolResultsCount:e.toolResults?.length||0,finishReason:e.finishReason,usage:e.usage,...t.cacheCreationTokens!==void 0&&{cacheCreationTokens:t.cacheCreationTokens},...t.cacheReadTokens!==void 0&&{cacheReadTokens:t.cacheReadTokens},timestamp:Date.now()})}extractToolInformation(e){let t=[],n=[];if(e.toolCalls&&e.toolCalls.length>0&&t.push(...e.toolCalls.map(o=>o.toolName||o.name||"unknown")),e.steps&&Array.isArray(e.steps)){let o=new Map;for(let s of e.steps||[]){if(s?.toolCalls&&Array.isArray(s.toolCalls))for(let i of s.toolCalls){let a=i,c=a.toolName||a.name||"unknown",l=a.toolCallId||a.id||c;t.push(c);let u={};a.args?u=a.args:a.arguments?u=a.arguments:a.parameters&&(u=a.parameters),o.set(l,u),o.set(c,u)}if(s?.toolResults&&Array.isArray(s.toolResults))for(let i of s.toolResults){let a=i,c=a.toolName||"unknown",l=a.toolCallId||a.id,u=a.args??a.arguments??a.parameters??a.input??o.get(l||c)??{};n.push({name:c,input:u,output:a.output??a.result??"success"})}}}return{toolsUsed:[...new Set(t)],toolExecutions:n}}formatEnhancedResult(e,t,n,o,s){let i=!!s.schema||s.output?.format==="json"||s.output?.format==="structured",a,c,l=!1,u=!1,d=x=>{let b=x.replace(/^```(?:json)?\s*\n?/i,"").replace(/\n?```\s*$/i,"").trim(),T=Gj(b,s.schema);if(T)return c=T.structuredData,T.repaired&&(l=!0),T.truncated&&(u=!0),T.content;try{let S=JSON.parse(b);if(S==="")return g.warn("[GenerationHandler] schema requested but the model returned an empty JSON string; normalizing to empty content",{provider:this.providerName,model:this.modelName}),"";if(S!=null)return c=S,b}catch{}return g.warn("[GenerationHandler] schema requested but no JSON could be recovered from model text; returning raw text",{provider:this.providerName,model:this.modelName}),b};if(i)try{let x=e.experimental_output,b=typeof x=="string"&&x===(e.text??"");x!==void 0&&!b?(c=x,a=JSON.stringify(x)):a=d(e.text||"")}catch(x){g.debug("[GenerationHandler] experimental_output threw, falling back to text parsing",{error:x instanceof Error?x.message:String(x)}),a=d(e.text||"")}else a=e.text;i&&e.finishReason==="length"&&(u=!0,g.warn("[GenerationHandler] Structured output truncated by token cap (finishReason=length); increase maxTokens",{provider:this.providerName,model:this.modelName}));let p=o_(e.usage);if(p.cacheCreationTokens===void 0||p.cacheReadTokens===void 0){let x=this.extractCacheMetricsFromProviderMetadata(e);if(p.cacheCreationTokens===void 0&&x.cacheCreationTokens!==void 0&&(p.cacheCreationTokens=x.cacheCreationTokens),p.cacheReadTokens===void 0&&x.cacheReadTokens!==void 0&&(p.cacheReadTokens=x.cacheReadTokens),p.cacheReadTokens!==void 0){let b=fre(p.cacheReadTokens,p.input);b!==void 0&&(p.cacheSavingsPercent=b)}}let f=e.reasoning,h=f?typeof f=="string"?f:Array.isArray(f)?f.map(x=>typeof x=="string"?x:x.text??JSON.stringify(x)).join(`
819
- `):String(f):void 0,y=p.reasoning??void 0;return{content:a,structuredData:c,usage:p,finishReason:e.finishReason,jsonRepaired:l||void 0,jsonTruncated:u||void 0,provider:this.providerName,model:this.modelName,reasoning:h,reasoningTokens:y,toolCalls:e.toolCalls?e.toolCalls.map(x=>({toolCallId:x.toolCallId||"unknown",toolName:x.toolName||"unknown",args:x.args||{}})):[],toolResults:e.toolResults??[],toolsUsed:n,toolExecutions:o,availableTools:Object.keys(t).map(x=>{let b=t[x];return{name:x,description:b.description||"No description available",parameters:b.inputSchema||{},server:b.serverId||"direct"}})}}analyzeAIResponse(e){g.debug("NeuroLink Raw AI Response Analysis",{provider:this.providerName,model:this.modelName,responseTextLength:e.text?.length||0,responsePreview:e.text?.substring(0,500)??"",finishReason:e.finishReason,usage:e.usage});let t={hasToolCalls:!!e.toolCalls,toolCallsLength:e.toolCalls?.length||0,toolCalls:e.toolCalls?.map((n,o)=>{let s=n,i=s.toolName||s.name||"unknown";return{index:o+1,toolName:i,toolId:s.toolCallId||s.id||"none",hasArgs:!!s.args,argsKeys:s.args&&typeof s.args=="object"?Object.keys(s.args):[]}})||[]};g.debug("Tool Calls Analysis",t)}}});var sg={};te(sg,{AsyncLocalStorage:()=>iBt,Buffer:()=>qzt,Channel:()=>Nzt,DatabaseSync:()=>Vzt,Duplex:()=>cBt,EventEmitter:()=>sBt,Http2ServerRequest:()=>Yzt,Http2ServerResponse:()=>Xzt,Interface:()=>Gzt,MIMEType:()=>njt,PassThrough:()=>lBt,PerformanceObserver:()=>Pzt,Readable:()=>yDe,ReadableStream:()=>uBt,Resolver:()=>Azt,TextDecoder:()=>vDe,TextEncoder:()=>Vj,Transform:()=>aBt,URL:()=>hzt,URLSearchParams:()=>yzt,Worker:()=>Uzt,Writable:()=>xDe,access:()=>OBt,appendFile:()=>uM,appendFileSync:()=>H2t,arch:()=>JBt,arrayBuffer:()=>Zzt,basename:()=>Z2t,builtinModules:()=>pzt,callbackify:()=>Ezt,channel:()=>Ozt,chmodSync:()=>hBt,clearInterval:()=>rjt,clearTimeout:()=>ejt,closeSync:()=>vBt,connect:()=>QBt,constants:()=>Hzt,copyFileSync:()=>xBt,cpSync:()=>W2t,cpus:()=>qBt,createConnection:()=>ezt,createGunzip:()=>azt,createGzip:()=>czt,createHash:()=>hDe,createHmac:()=>j2t,createInterface:()=>jzt,createReadStream:()=>IBt,createRequire:()=>dzt,createServer:()=>K2t,createWriteStream:()=>ABt,debug:()=>Szt,debuglog:()=>bDe,default:()=>B2t,deflateSync:()=>rzt,deprecate:()=>wzt,deserialize:()=>Fzt,dirname:()=>X2t,exec:()=>FBt,execFile:()=>$Bt,execFileSync:()=>BBt,execSync:()=>UBt,existsSync:()=>mBt,extname:()=>Q2t,fileURLToPath:()=>xzt,finished:()=>pBt,format:()=>gzt,freemem:()=>HBt,fstatSync:()=>TBt,get:()=>ZBt,gunzip:()=>izt,gunzipSync:()=>nzt,gzip:()=>szt,gzipSync:()=>ozt,hasSubscribers:()=>Dzt,homedir:()=>jBt,hostname:()=>VBt,inflateSync:()=>tzt,inherits:()=>vzt,inspect:()=>Hj,isAbsolute:()=>tBt,isBuiltin:()=>mzt,isDeepStrictEqual:()=>_zt,isIP:()=>Jzt,isIPv4:()=>Kzt,isIPv6:()=>Wzt,isMainThread:()=>$zt,join:()=>J2t,lookup:()=>Rzt,mkdir:()=>Pre,mkdirSync:()=>SBt,monitorEventLoopDelay:()=>Mzt,normalize:()=>oBt,ok:()=>lzt,open:()=>Mre,openSync:()=>bBt,parentPort:()=>Bzt,parse:()=>fzt,pathToFileURL:()=>bzt,performance:()=>Izt,pipeline:()=>dBt,platform:()=>zBt,posix:()=>nBt,promises:()=>z2t,promisify:()=>Tzt,randomBytes:()=>G2t,randomUUID:()=>V2t,readFile:()=>Py,readFileSync:()=>fBt,readdir:()=>PBt,readdirSync:()=>EBt,realpath:()=>qj,realpathSync:()=>yBt,relative:()=>eBt,release:()=>YBt,rename:()=>NBt,renameSync:()=>CBt,request:()=>XBt,resolve:()=>Y2t,rm:()=>DBt,rmSync:()=>RBt,rmdirSync:()=>kBt,sep:()=>rBt,serialize:()=>Lzt,setInterval:()=>tjt,setTimeout:()=>Qzt,spawn:()=>LBt,stat:()=>dM,statSync:()=>wBt,strict:()=>uzt,tmpdir:()=>GBt,toUSVString:()=>Czt,totalmem:()=>WBt,type:()=>KBt,types:()=>kzt,unlink:()=>MBt,unlinkSync:()=>_Bt,webcrypto:()=>q2t,workerData:()=>zzt,writeFile:()=>Ire,writeFileSync:()=>gBt});var _s,$o,B2t,z2t,hDe,j2t,G2t,V2t,q2t,H2t,W2t,K2t,J2t,Y2t,X2t,Z2t,Q2t,eBt,tBt,rBt,nBt,oBt,sBt,iBt,yDe,xDe,aBt,cBt,lBt,uBt,dBt,pBt,mBt,fBt,gBt,hBt,uM,yBt,xBt,bBt,vBt,TBt,SBt,wBt,EBt,_Bt,CBt,kBt,RBt,ABt,IBt,Py,Ire,Pre,dM,PBt,MBt,OBt,NBt,DBt,Mre,qj,LBt,FBt,UBt,$Bt,BBt,zBt,jBt,GBt,VBt,qBt,HBt,WBt,KBt,JBt,YBt,XBt,ZBt,QBt,ezt,tzt,rzt,nzt,ozt,szt,izt,azt,czt,lzt,uzt,dzt,pzt,mzt,fzt,gzt,hzt,yzt,xzt,bzt,vzt,Tzt,bDe,Szt,Hj,wzt,Ezt,_zt,Czt,kzt,vDe,Vj,Rzt,Azt,Izt,Pzt,Mzt,Ozt,Nzt,Dzt,Lzt,Fzt,Uzt,$zt,Bzt,zzt,jzt,Gzt,Vzt,qzt,Hzt,Wzt,Kzt,Jzt,Yzt,Xzt,Zzt,TDe,Qzt,ejt,tjt,rjt,njt,Iu=C(()=>{_s=()=>{},$o=async()=>{},B2t={},z2t={readFile:$o,writeFile:$o,mkdir:$o,stat:$o,readdir:$o,unlink:$o,access:$o,rm:$o,rename:$o},hDe=r=>{let e=[];return{update(t){return e.push(typeof t=="string"?new Vj().encode(t):t),this},digest(t){let n=0;for(let s of e)for(let i=0;i<s.length;i++)n=(n<<5)-n+s[i]|0;let o=(n>>>0).toString(16).padStart(8,"0");return t==="hex"?o:t==="base64"?btoa(o):o}}},j2t=(r,e)=>hDe(r),G2t=r=>new Uint8Array(r||32),V2t=()=>globalThis.crypto?.randomUUID?.()||Math.random().toString(36),q2t=globalThis.crypto,H2t=()=>{throw new Error("[NeuroLink:browser] fs.appendFileSync is not supported in browser runtime \u2014 use server-side execution")},W2t=()=>{throw new Error("[NeuroLink:browser] fs.cpSync is not supported in browser runtime \u2014 use server-side execution")},K2t=()=>({listen:_s,close:_s,on:_s}),J2t=(...r)=>r.join("/"),Y2t=(...r)=>r.join("/"),X2t=r=>r||"",Z2t=r=>r?.split?.("/")?.pop?.()||"",Q2t=r=>{let e=r?.match?.(/\.[^.]+$/);return e?e[0]:""},eBt=(r,e)=>e||"",tBt=()=>!1,rBt="/",nBt={normalize:r=>r,join:(...r)=>r.join("/"),resolve:(...r)=>r.join("/"),sep:"/"},oBt=r=>r,sBt=class{on(){return this}off(){return this}emit(){return this}once(){return this}removeListener(){return this}addListener(){return this}},iBt=class{getStore(){}run(r,e,...t){return e(...t)}enterWith(){}disable(){}},yDe=class{pipe(){return this}on(){return this}read(){return null}push(){}destroy(){}},xDe=class{write(){return!0}end(){}on(){return this}destroy(){}},aBt=class{push(){}on(){return this}},cBt=class{on(){return this}},lBt=class{pipe(){return this}on(){return this}},uBt=globalThis.ReadableStream||class{},dBt=_s,pBt=_s,mBt=()=>!1,fBt=()=>"",gBt=_s,hBt=_s,uM=$o,yBt=r=>r,xBt=_s,bBt=()=>0,vBt=_s,TBt=()=>({}),SBt=_s,wBt=()=>({}),EBt=()=>[],_Bt=_s,CBt=_s,kBt=_s,RBt=_s,ABt=()=>new xDe,IBt=()=>new yDe,Py=$o,Ire=$o,Pre=$o,dM=$o,PBt=$o,MBt=$o,OBt=$o,NBt=$o,DBt=$o,Mre=async()=>({stat:$o,readFile:$o,close:$o,read:$o,write:$o}),qj=async r=>r,LBt=()=>({on:_s,stdout:{on:_s},stderr:{on:_s},kill:_s}),FBt=(r,e)=>e?.(null,"",""),UBt=()=>"",$Bt=(r,e,t)=>{typeof e=="function"?e(null,"",""):t?.(null,"","")},BBt=()=>"",zBt="browser",jBt=()=>"/",GBt=()=>"/tmp",VBt=()=>"browser",qBt=()=>[{}],HBt=()=>0,WBt=()=>0,KBt=()=>"Browser",JBt=()=>"wasm",YBt=()=>"0",XBt=()=>({}),ZBt=()=>({}),QBt=()=>({}),ezt=()=>({}),tzt=()=>new Uint8Array,rzt=()=>new Uint8Array,nzt=()=>new Uint8Array,ozt=()=>new Uint8Array,szt=(r,e)=>e?.(null,r),izt=(r,e)=>e?.(null,r),azt=()=>({}),czt=()=>({}),lzt=_s,uzt={},dzt=()=>()=>({}),pzt=[],mzt=()=>!1,fzt=r=>({pathname:r||"",hostname:"",protocol:"",search:"",hash:""}),gzt=()=>"",hzt=globalThis.URL,yzt=globalThis.URLSearchParams,xzt=r=>typeof r=="string"?r.replace("file://",""):r,bzt=r=>new globalThis.URL("file://"+r),vzt=(r,e)=>{e&&(r.super_=e,Object.setPrototypeOf(r.prototype,e.prototype))},Tzt=r=>(...e)=>new Promise((t,n)=>r(...e,(o,s)=>o?n(o):t(s))),bDe=r=>{let e=(...t)=>{};return e.enabled=!1,e},Szt=bDe,Hj=r=>{try{return JSON.stringify(r,null,2)}catch{return String(r)}};Hj.custom=Symbol.for("nodejs.util.inspect.custom");Hj.colors={};Hj.styles={};wzt=r=>r,Ezt=r=>(...e)=>{let t=e.pop();r(...e).then(n=>t(null,n)).catch(t)},_zt=(r,e)=>JSON.stringify(r)===JSON.stringify(e),Czt=r=>String(r),kzt={isPromise:r=>r instanceof Promise,isDate:r=>r instanceof Date,isRegExp:r=>r instanceof RegExp,isNativeError:r=>r instanceof Error,isArrayBuffer:r=>r instanceof ArrayBuffer,isTypedArray:r=>ArrayBuffer.isView(r),isUint8Array:r=>r instanceof Uint8Array,isProxy:()=>!1},vDe=globalThis.TextDecoder,Vj=globalThis.TextEncoder,Rzt=(r,e)=>e?.(null,"127.0.0.1",4),Azt=class{},Izt=globalThis.performance||{now:()=>Date.now()},Pzt=class{observe(){}disconnect(){}},Mzt=()=>({enable:_s,disable:_s,percentile:()=>0}),Ozt=()=>({}),Nzt=class{},Dzt=()=>!1,Lzt=()=>new Uint8Array,Fzt=_s,Uzt=class{},$zt=!0,Bzt=null,zzt=null,jzt=()=>({}),Gzt=class{},Vzt=class{},qzt=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 Vj().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 Vj().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 vDe().decode(this)}},Hzt={F_OK:0,R_OK:4,W_OK:2,X_OK:1},Wzt=()=>!1,Kzt=()=>!1,Jzt=()=>0,Yzt=class{},Xzt=class{},Zzt=async()=>new ArrayBuffer(0),TDe=r=>({[Symbol.toPrimitive](){return r},ref(){return this},unref(){return this},hasRef(){return!1},refresh(){return this},close(){}}),Qzt=(...r)=>TDe(globalThis.setTimeout(...r)),ejt=globalThis.clearTimeout,tjt=(...r)=>TDe(globalThis.setInterval(...r)),rjt=globalThis.clearInterval,njt=class{constructor(r){this.type=r}toString(){return this.type}}});var Dre={};te(Dre,{Agent:()=>Nre,BedrockClient:()=>sjt,BedrockRuntimeClient:()=>ajt,Blob:()=>Gjt,Client:()=>qjt,ConverseCommand:()=>cjt,ConverseStreamCommand:()=>ljt,Cron:()=>Cjt,Dispatcher:()=>Hjt,File:()=>jjt,FlowProducer:()=>_jt,FormData:()=>zjt,GoogleAuth:()=>fjt,HTTPException:()=>Ojt,Headers:()=>Bjt,Hippocampus:()=>xjt,HippocampusConfig:()=>bjt,Hono:()=>Pjt,ImageFormat:()=>ujt,InvokeEndpointCommand:()=>pjt,InvokeEndpointWithResponseStreamCommand:()=>mjt,Job:()=>wjt,ListFoundationModelsCommand:()=>ijt,MockAgent:()=>Kjt,Pool:()=>Vjt,Queue:()=>Tjt,QueueScheduler:()=>Ejt,Request:()=>Ujt,Response:()=>$jt,SageMakerRuntimeClient:()=>djt,TextToSpeechClient:()=>hjt,VertexAI:()=>gjt,Webhook:()=>yjt,Worker:()=>Sjt,convertToHtml:()=>Ijt,cors:()=>Mjt,createClient:()=>vjt,default:()=>ojt,extractRawText:()=>Ajt,fetch:()=>Ore,getGlobalDispatcher:()=>Rv,interceptors:()=>Av,logger:()=>Njt,parseBuffer:()=>kjt,request:()=>Iv,secureHeaders:()=>Djt,selectCover:()=>Rjt,setGlobalDispatcher:()=>Wjt,streamSSE:()=>Ljt,timeout:()=>Fjt});var i_,Ri,ojt,sjt,ijt,ajt,cjt,ljt,ujt,djt,pjt,mjt,fjt,gjt,hjt,yjt,xjt,bjt,vjt,Tjt,Sjt,wjt,Ejt,_jt,Cjt,kjt,Rjt,Ajt,Ijt,Pjt,Mjt,Ojt,Njt,Djt,Ljt,Fjt,Ore,Ujt,$jt,Bjt,zjt,jjt,Gjt,Nre,Vjt,qjt,Hjt,Wjt,Rv,Kjt,Av,Iv,a_=C(()=>{i_={get(r,e){return e==="__esModule"?!0:e==="default"?new Proxy({},{get:i_.get}):new Proxy(function(...t){return new Proxy({},{get:i_.get})},{get:i_.get,apply(t,n,o){return new Proxy({},{get:i_.get})},construct(t,n){return new Proxy({},{get:i_.get})}})}},Ri=new Proxy({},i_),ojt=Ri,{BedrockClient:sjt,ListFoundationModelsCommand:ijt,BedrockRuntimeClient:ajt,ConverseCommand:cjt,ConverseStreamCommand:ljt,ImageFormat:ujt}=Ri,{SageMakerRuntimeClient:djt,InvokeEndpointCommand:pjt,InvokeEndpointWithResponseStreamCommand:mjt}=Ri,{GoogleAuth:fjt,VertexAI:gjt,TextToSpeechClient:hjt}=Ri,{Webhook:yjt}=Ri,{Hippocampus:xjt,HippocampusConfig:bjt}=Ri,{createClient:vjt}=Ri,{Queue:Tjt,Worker:Sjt,Job:wjt,QueueScheduler:Ejt,FlowProducer:_jt}=Ri,{Cron:Cjt}=Ri,{parseBuffer:kjt,selectCover:Rjt}=Ri,{extractRawText:Ajt,convertToHtml:Ijt}=Ri,{Hono:Pjt}=Ri,{cors:Mjt,HTTPException:Ojt,logger:Njt,secureHeaders:Djt,streamSSE:Ljt,timeout:Fjt}=Ri,Ore=globalThis.fetch,Ujt=globalThis.Request,$jt=globalThis.Response,Bjt=globalThis.Headers,zjt=globalThis.FormData,jjt=globalThis.File,Gjt=globalThis.Blob,Nre=Ri.Agent,Vjt=Ri.Pool,qjt=Ri.Client,Hjt=Ri.Dispatcher,Wjt=()=>{},Rv=()=>Ri,Kjt=Ri.MockAgent,Av={redirect:()=>r=>r,retry:()=>r=>r},Iv=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 pM={};te(pM,{AsyncLocalStorage:()=>pGt,Buffer:()=>oqt,Channel:()=>WVt,DatabaseSync:()=>nqt,Duplex:()=>fGt,EventEmitter:()=>dGt,Http2ServerRequest:()=>lqt,Http2ServerResponse:()=>uqt,Interface:()=>rqt,MIMEType:()=>hqt,PassThrough:()=>gGt,PerformanceObserver:()=>VVt,Readable:()=>SDe,ReadableStream:()=>hGt,Resolver:()=>jVt,TextDecoder:()=>_De,TextEncoder:()=>Wj,Transform:()=>mGt,URL:()=>AVt,URLSearchParams:()=>IVt,Worker:()=>XVt,Writable:()=>wDe,access:()=>VGt,appendFile:()=>wGt,appendFileSync:()=>Zjt,arch:()=>cVt,arrayBuffer:()=>dqt,basename:()=>oGt,builtinModules:()=>_Vt,callbackify:()=>FVt,channel:()=>HVt,chmodSync:()=>SGt,clearInterval:()=>gqt,clearTimeout:()=>mqt,closeSync:()=>kGt,connect:()=>pVt,constants:()=>sqt,copyFileSync:()=>_Gt,cpSync:()=>Qjt,cpus:()=>oVt,createConnection:()=>mVt,createGunzip:()=>vVt,createGzip:()=>TVt,createHash:()=>Xa,createHmac:()=>Lre,createInterface:()=>tqt,createReadStream:()=>FGt,createRequire:()=>EVt,createServer:()=>eGt,createWriteStream:()=>LGt,debug:()=>DVt,debuglog:()=>EDe,default:()=>Jjt,deflateSync:()=>gVt,deprecate:()=>LVt,deserialize:()=>YVt,dirname:()=>nGt,exec:()=>YGt,execFile:()=>ZGt,execFileSync:()=>QGt,execSync:()=>XGt,existsSync:()=>bGt,extname:()=>sGt,fileURLToPath:()=>PVt,finished:()=>xGt,format:()=>RVt,freemem:()=>sVt,fstatSync:()=>RGt,get:()=>dVt,gunzip:()=>bVt,gunzipSync:()=>hVt,gzip:()=>xVt,gzipSync:()=>yVt,hasSubscribers:()=>KVt,homedir:()=>tVt,hostname:()=>nVt,inflateSync:()=>fVt,inherits:()=>OVt,inspect:()=>Kj,isAbsolute:()=>aGt,isBuiltin:()=>CVt,isDeepStrictEqual:()=>UVt,isIP:()=>cqt,isIPv4:()=>aqt,isIPv6:()=>iqt,isMainThread:()=>ZVt,join:()=>tGt,lookup:()=>zVt,mkdir:()=>BGt,mkdirSync:()=>AGt,monitorEventLoopDelay:()=>qVt,normalize:()=>uGt,ok:()=>SVt,open:()=>WGt,openSync:()=>CGt,parentPort:()=>QVt,parse:()=>kVt,pathToFileURL:()=>MVt,performance:()=>GVt,pipeline:()=>yGt,platform:()=>eVt,posix:()=>lGt,promises:()=>Yjt,promisify:()=>NVt,randomBytes:()=>Pm,randomUUID:()=>We,readFile:()=>UGt,readFileSync:()=>vGt,readdir:()=>jGt,readdirSync:()=>PGt,realpath:()=>KGt,realpathSync:()=>EGt,relative:()=>iGt,release:()=>lVt,rename:()=>qGt,renameSync:()=>OGt,request:()=>uVt,resolve:()=>rGt,rm:()=>HGt,rmSync:()=>DGt,rmdirSync:()=>NGt,sep:()=>cGt,serialize:()=>JVt,setInterval:()=>fqt,setTimeout:()=>pqt,spawn:()=>JGt,stat:()=>zGt,statSync:()=>IGt,strict:()=>wVt,tmpdir:()=>rVt,toUSVString:()=>$Vt,totalmem:()=>iVt,type:()=>aVt,types:()=>BVt,unlink:()=>GGt,unlinkSync:()=>MGt,webcrypto:()=>Xjt,workerData:()=>eqt,writeFile:()=>$Gt,writeFileSync:()=>TGt});var Cs,Bo,Jjt,Yjt,Xa,Lre,Pm,We,Xjt,Zjt,Qjt,eGt,tGt,rGt,nGt,oGt,sGt,iGt,aGt,cGt,lGt,uGt,dGt,pGt,SDe,wDe,mGt,fGt,gGt,hGt,yGt,xGt,bGt,vGt,TGt,SGt,wGt,EGt,_Gt,CGt,kGt,RGt,AGt,IGt,PGt,MGt,OGt,NGt,DGt,LGt,FGt,UGt,$Gt,BGt,zGt,jGt,GGt,VGt,qGt,HGt,WGt,KGt,JGt,YGt,XGt,ZGt,QGt,eVt,tVt,rVt,nVt,oVt,sVt,iVt,aVt,cVt,lVt,uVt,dVt,pVt,mVt,fVt,gVt,hVt,yVt,xVt,bVt,vVt,TVt,SVt,wVt,EVt,_Vt,CVt,kVt,RVt,AVt,IVt,PVt,MVt,OVt,NVt,EDe,DVt,Kj,LVt,FVt,UVt,$Vt,BVt,_De,Wj,zVt,jVt,GVt,VVt,qVt,HVt,WVt,KVt,JVt,YVt,XVt,ZVt,QVt,eqt,tqt,rqt,nqt,oqt,sqt,iqt,aqt,cqt,lqt,uqt,dqt,CDe,pqt,mqt,fqt,gqt,hqt,yr=C(()=>{Cs=()=>{},Bo=async()=>{},Jjt={},Yjt={readFile:Bo,writeFile:Bo,mkdir:Bo,stat:Bo,readdir:Bo,unlink:Bo,access:Bo,rm:Bo,rename:Bo},Xa=r=>{let e=[];return{update(t){return e.push(typeof t=="string"?new Wj().encode(t):t),this},digest(t){let n=0;for(let s of e)for(let i=0;i<s.length;i++)n=(n<<5)-n+s[i]|0;let o=(n>>>0).toString(16).padStart(8,"0");return t==="hex"?o:t==="base64"?btoa(o):o}}},Lre=(r,e)=>Xa(r),Pm=r=>new Uint8Array(r||32),We=()=>globalThis.crypto?.randomUUID?.()||Math.random().toString(36),Xjt=globalThis.crypto,Zjt=()=>{throw new Error("[NeuroLink:browser] fs.appendFileSync is not supported in browser runtime \u2014 use server-side execution")},Qjt=()=>{throw new Error("[NeuroLink:browser] fs.cpSync is not supported in browser runtime \u2014 use server-side execution")},eGt=()=>({listen:Cs,close:Cs,on:Cs}),tGt=(...r)=>r.join("/"),rGt=(...r)=>r.join("/"),nGt=r=>r||"",oGt=r=>r?.split?.("/")?.pop?.()||"",sGt=r=>{let e=r?.match?.(/\.[^.]+$/);return e?e[0]:""},iGt=(r,e)=>e||"",aGt=()=>!1,cGt="/",lGt={normalize:r=>r,join:(...r)=>r.join("/"),resolve:(...r)=>r.join("/"),sep:"/"},uGt=r=>r,dGt=class{on(){return this}off(){return this}emit(){return this}once(){return this}removeListener(){return this}addListener(){return this}},pGt=class{getStore(){}run(r,e,...t){return e(...t)}enterWith(){}disable(){}},SDe=class{pipe(){return this}on(){return this}read(){return null}push(){}destroy(){}},wDe=class{write(){return!0}end(){}on(){return this}destroy(){}},mGt=class{push(){}on(){return this}},fGt=class{on(){return this}},gGt=class{pipe(){return this}on(){return this}},hGt=globalThis.ReadableStream||class{},yGt=Cs,xGt=Cs,bGt=()=>!1,vGt=()=>"",TGt=Cs,SGt=Cs,wGt=Bo,EGt=r=>r,_Gt=Cs,CGt=()=>0,kGt=Cs,RGt=()=>({}),AGt=Cs,IGt=()=>({}),PGt=()=>[],MGt=Cs,OGt=Cs,NGt=Cs,DGt=Cs,LGt=()=>new wDe,FGt=()=>new SDe,UGt=Bo,$Gt=Bo,BGt=Bo,zGt=Bo,jGt=Bo,GGt=Bo,VGt=Bo,qGt=Bo,HGt=Bo,WGt=async()=>({stat:Bo,readFile:Bo,close:Bo,read:Bo,write:Bo}),KGt=async r=>r,JGt=()=>({on:Cs,stdout:{on:Cs},stderr:{on:Cs},kill:Cs}),YGt=(r,e)=>e?.(null,"",""),XGt=()=>"",ZGt=(r,e,t)=>{typeof e=="function"?e(null,"",""):t?.(null,"","")},QGt=()=>"",eVt="browser",tVt=()=>"/",rVt=()=>"/tmp",nVt=()=>"browser",oVt=()=>[{}],sVt=()=>0,iVt=()=>0,aVt=()=>"Browser",cVt=()=>"wasm",lVt=()=>"0",uVt=()=>({}),dVt=()=>({}),pVt=()=>({}),mVt=()=>({}),fVt=()=>new Uint8Array,gVt=()=>new Uint8Array,hVt=()=>new Uint8Array,yVt=()=>new Uint8Array,xVt=(r,e)=>e?.(null,r),bVt=(r,e)=>e?.(null,r),vVt=()=>({}),TVt=()=>({}),SVt=Cs,wVt={},EVt=()=>()=>({}),_Vt=[],CVt=()=>!1,kVt=r=>({pathname:r||"",hostname:"",protocol:"",search:"",hash:""}),RVt=()=>"",AVt=globalThis.URL,IVt=globalThis.URLSearchParams,PVt=r=>typeof r=="string"?r.replace("file://",""):r,MVt=r=>new globalThis.URL("file://"+r),OVt=(r,e)=>{e&&(r.super_=e,Object.setPrototypeOf(r.prototype,e.prototype))},NVt=r=>(...e)=>new Promise((t,n)=>r(...e,(o,s)=>o?n(o):t(s))),EDe=r=>{let e=(...t)=>{};return e.enabled=!1,e},DVt=EDe,Kj=r=>{try{return JSON.stringify(r,null,2)}catch{return String(r)}};Kj.custom=Symbol.for("nodejs.util.inspect.custom");Kj.colors={};Kj.styles={};LVt=r=>r,FVt=r=>(...e)=>{let t=e.pop();r(...e).then(n=>t(null,n)).catch(t)},UVt=(r,e)=>JSON.stringify(r)===JSON.stringify(e),$Vt=r=>String(r),BVt={isPromise:r=>r instanceof Promise,isDate:r=>r instanceof Date,isRegExp:r=>r instanceof RegExp,isNativeError:r=>r instanceof Error,isArrayBuffer:r=>r instanceof ArrayBuffer,isTypedArray:r=>ArrayBuffer.isView(r),isUint8Array:r=>r instanceof Uint8Array,isProxy:()=>!1},_De=globalThis.TextDecoder,Wj=globalThis.TextEncoder,zVt=(r,e)=>e?.(null,"127.0.0.1",4),jVt=class{},GVt=globalThis.performance||{now:()=>Date.now()},VVt=class{observe(){}disconnect(){}},qVt=()=>({enable:Cs,disable:Cs,percentile:()=>0}),HVt=()=>({}),WVt=class{},KVt=()=>!1,JVt=()=>new Uint8Array,YVt=Cs,XVt=class{},ZVt=!0,QVt=null,eqt=null,tqt=()=>({}),rqt=class{},nqt=class{},oqt=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 Wj().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 Wj().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 _De().decode(this)}},sqt={F_OK:0,R_OK:4,W_OK:2,X_OK:1},iqt=()=>!1,aqt=()=>!1,cqt=()=>0,lqt=class{},uqt=class{},dqt=async()=>new ArrayBuffer(0),CDe=r=>({[Symbol.toPrimitive](){return r},ref(){return this},unref(){return this},hasRef(){return!1},refresh(){return this},close(){}}),pqt=(...r)=>CDe(globalThis.setTimeout(...r)),mqt=globalThis.clearTimeout,fqt=(...r)=>CDe(globalThis.setInterval(...r)),gqt=globalThis.clearInterval,hqt=class{constructor(r){this.type=r}toString(){return this.type}}});function ss(r,e=500){return r&&r.slice(0,e).replace(bqt,"***")}function Mm(r){if(typeof r=="string")return r;try{return JSON.stringify(r)??String(r)}catch{return"[content too large to serialize]"}}function c_(r,e=1e4){try{let t=JSON.stringify(r);return t===void 0?String(r):t.length>e?`${t.slice(0,e)}\u2026[truncated ${t.length-e} chars]`:t}catch(t){return`[unserializable: ${t instanceof Error?t.message:String(t)}]`}}function lr(r){return r.replace(/\/\/[^/\s"'<>]*@/g,"//***@").replace(/\/\/(?:(?!\/\/)[^\s"'<>])*@/g,"//***@")}function Za(r){let e=t=>t.length>200?`${t.slice(0,200)}\u2026`:t;try{let t=new URL(r);return e(`${t.protocol}//${t.host}${t.pathname}`)}catch{let t=r.split(/[?#]/)[0];return e(lr(t))}}function wqt(r){Sqt.forEach(e=>r.searchParams.delete(e))}function Eqt(r){let e=[],t=[];for(let[o,s]of r.searchParams.entries())Tqt.includes(o.toLowerCase())&&(e.push(`${o.toLowerCase()}=${s}`),t.push(o));return e.length===0?"":(t.forEach(o=>r.searchParams.delete(o)),e.sort(),`\0auth=${Xa("sha256").update(e.join("&")).digest("hex").slice(0,16)}`)}function Jj(r){try{let e=new URL(r);wqt(e);let t=Eqt(e);return e.toString()+t}catch{return r}}function Fre(r){return r.replace(/[a-zA-Z][a-zA-Z0-9+.-]*:\/\/[^\s"'<>)]+/g,e=>Za(e))}function Ure(r,e){let t=qs(e);return r.split(dd(e)).join(t).split(e).join(t)}function My(r,e){let t=s=>{let i=Fre(s);return e?.filePath?Ure(i,e.filePath):i};if(!(r instanceof Error))return new Error(t(String(r)));let n=new Error(t(r.message));n.name=r.name;let o=r.code;return o!==void 0&&(n.code=o),n}function l_(r,e=1e3){let t=new WeakSet,n=o=>{if(o==null)return o;if(typeof o=="string")return ss(o,e);if(typeof o!="object")return o;if(t.has(o))return"[Circular]";if(t.add(o),Array.isArray(o))return o.map(n);let s={};for(let[i,a]of Object.entries(o))vqt.some(c=>c.toLowerCase()===i.toLowerCase())?s[i]="***":s[i]=n(a);return s};return n(r)}var yqt,xqt,bqt,vqt,Tqt,Sqt,mn=C(()=>{"use strict";yr();dn();yqt=["sk","pk","r8","gsk","xai","tgp","fw","pplx","pa","jina","fish"],xqt=yqt.join("|"),bqt=new RegExp(`\\bBearer\\s+[A-Za-z0-9_\\-\\.]{8,}\\b|\\bToken\\s+[A-Za-z0-9_\\-\\.]{8,}\\b|\\bBasic\\s+[A-Za-z0-9+/=]{12,}\\b|\\b(?:${xqt})[_\\-][A-Za-z0-9_\\-\\.]{8,}\\b|\\b(?:api[_-]?key|access[_-]?token|secret[_-]?key|refresh[_-]?token)\\s*[:=]\\s*['"]?[^\\s,;'"&]+`,"gi"),vqt=["apikey","api_key","apiKey","access_token","accessToken","refresh_token","refreshToken","secret","secretkey","secret_key","secretKey","password","authorization","oauth","oauthToken","credentials","authContext","authToken","sessionToken","serviceAccountKey","secretAccessKey","userEmail"];Tqt=["token","signature","x-amz-signature","x-amz-credential","x-amz-security-token","awsaccesskeyid","expires","sig","se","sp","sr","sv","x-goog-signature","x-goog-credential","x-goog-algorithm","x-goog-date","x-goog-expires","x-goog-signedheaders"],Sqt=["utm_source","utm_medium","utm_campaign","utm_term","utm_content","fbclid","gclid","_ga"]});var _qt,$re,Yj,Bre=C(()=>{"use strict";H();kt();_qt={maxTokens:10,refillIntervalMs:1e3,tokensPerRefill:10,maxQueueSize:100,queueTimeoutMs:3e4},$re=class{tokens;config;queue=[];refillTimer=null;lastRefillTime;constructor(e={}){this.config={..._qt,...e},this.tokens=this.config.maxTokens,this.lastRefillTime=Date.now(),this.startRefillTimer()}startRefillTimer(){this.refillTimer||(this.refillTimer=setInterval(()=>{this.refillTokens(),this.processQueue()},this.config.refillIntervalMs),this.refillTimer.unref())}refillTokens(){let e=Date.now(),t=e-this.lastRefillTime,n=Math.floor(t/this.config.refillIntervalMs);if(n>0){let o=n*this.config.tokensPerRefill;this.tokens=Math.min(this.config.maxTokens,this.tokens+o),this.lastRefillTime=e}}processQueue(){let e=Date.now();for(;this.queue.length>0;){let t=this.queue[0];if(e-t.timestamp>this.config.queueTimeoutMs)this.queue.shift(),t.timeoutTimer&&clearTimeout(t.timeoutTimer),t.reject(de.rateLimiterQueueTimeout(this.config.queueTimeoutMs));else break}for(;this.tokens>0&&this.queue.length>0;){let t=this.queue.shift();t&&(t.timeoutTimer&&clearTimeout(t.timeoutTimer),this.tokens--,t.resolve())}}async acquire(){if(this.refillTokens(),this.tokens>0){this.tokens--;return}if(this.queue.length>=this.config.maxQueueSize)throw g.warn(`Rate limiter queue full (${this.config.maxQueueSize} requests pending)`),de.rateLimiterQueueFull(this.config.maxQueueSize);return new Promise((e,t)=>{let n=setTimeout(()=>{let o=this.queue.findIndex(s=>s.timeoutTimer===n);o!==-1&&(this.queue.splice(o,1),t(de.rateLimiterQueueTimeout(this.config.queueTimeoutMs)))},this.config.queueTimeoutMs);this.queue.push({resolve:e,reject:t,timestamp:Date.now(),timeoutTimer:n})})}getStats(){return{availableTokens:this.tokens,queueLength:this.queue.length,maxTokens:this.config.maxTokens,maxQueueSize:this.config.maxQueueSize}}reset(){for(this.tokens=this.config.maxTokens,this.lastRefillTime=Date.now();this.queue.length>0;){let e=this.queue.shift();e&&(e.timeoutTimer&&clearTimeout(e.timeoutTimer),e.reject(de.rateLimiterReset()))}}stop(){this.refillTimer&&(clearInterval(this.refillTimer),this.refillTimer=null),this.reset()}},Yj=new $re({maxTokens:10,refillIntervalMs:1e3,tokensPerRefill:10,maxQueueSize:100,queueTimeoutMs:3e4})});function Hre(r,e=Ta.DEFAULT_INITIAL_DELAY,t=Ta.DEFAULT_BACKOFF_MULTIPLIER,n=Ta.DEFAULT_MAX_DELAY,o=!0){let s=e*Math.pow(t,r-1),i=Math.min(s,n),a=o?Math.random()*Math.min(i*.1,1e3):0;return i+a}function Wre(r){return new Promise(e=>setTimeout(e,r))}async function kDe(r,e={}){let t={...Cqt,...e},n;for(let o=1;o<=t.maxAttempts;o++)try{return await r()}catch(s){if(n=s,o===t.maxAttempts||!t.retryCondition(s))break;t.onRetry(o,s);let i=Hre(o,t.initialDelay,t.backoffMultiplier,t.maxDelay,!0);await Wre(i)}throw n}var zre,jre,Cqt,Gre,Vre,qre,LPn,FPn,UPn,Kre=C(()=>{"use strict";H();ki();zre=class extends Error{constructor(t,n){super(t);this.cause=n;this.name="NetworkError"}cause},jre=class extends Error{constructor(t,n){super(t);this.cause=n;this.name="TemporaryError"}cause},Cqt={maxAttempts:Ta.DEFAULT_RETRY_ATTEMPTS,initialDelay:Ta.DEFAULT_INITIAL_DELAY,maxDelay:Ta.DEFAULT_MAX_DELAY,backoffMultiplier:Ta.DEFAULT_BACKOFF_MULTIPLIER,retryCondition:r=>{if(r instanceof zre||r instanceof jre||r&&typeof r=="object"&&(r.name==="TimeoutError"||r.code==="TIMEOUT")||r&&typeof r=="object"&&(r.code==="ECONNRESET"||r.code==="ENOTFOUND"||r.code==="ECONNREFUSED"||r.code==="ETIMEDOUT"))return!0;if(r&&typeof r=="object"&&r.status){let e=Number(r.status);return e>=500||e===429||e===408}return!1},onRetry:(r,e)=>{let t=e instanceof Error?e.message:String(e);g.warn(`\u26A0\uFE0F Retry attempt ${r}: ${t}`)}};Gre=class{constructor(e=5,t=6e4,n=6e5){this.threshold=e;this.timeout=t;this.monitorWindow=n}threshold;timeout;monitorWindow;failures=0;lastFailureTime=0;state="closed";async execute(e){if(this.state==="open")if(Date.now()-this.lastFailureTime>this.timeout)this.state="half-open";else throw new Error("Circuit breaker is open - operation rejected");try{let t=await e();return this.onSuccess(),t}catch(t){throw this.onFailure(),t}}onSuccess(){this.failures=0,this.state="closed"}onFailure(){this.failures++,this.lastFailureTime=Date.now(),this.failures>=this.threshold&&(this.state="open")}getState(){return this.state}reset(){this.failures=0,this.lastFailureTime=0,this.state="closed"}},Vre=class{constructor(e,t){this.maxRequests=e;this.windowMs=t}maxRequests;windowMs;requests=[];async acquire(){let e=Date.now();if(this.requests=this.requests.filter(t=>e-t<this.windowMs),this.requests.length>=this.maxRequests){let t=Math.min(...this.requests),n=this.windowMs-(e-t);if(n>0)return await Wre(n),this.acquire()}this.requests.push(e)}},qre=class{operations=new Set;shutdownPromise=null;track(e){return this.operations.add(e),e.finally(()=>{this.operations.delete(e)}),e}async shutdown(e=3e4){return this.shutdownPromise?this.shutdownPromise:(this.shutdownPromise=this.performShutdown(e),this.shutdownPromise)}async performShutdown(e){g.debug(`\u{1F504} Graceful shutdown: waiting for ${this.operations.size} operations...`);try{await Promise.race([Promise.all(this.operations),Wre(e).then(()=>{throw new Error(`Shutdown timeout: ${this.operations.size} operations still running`)})]),g.debug("\u2705 Graceful shutdown completed")}catch(t){g.warn(`\u26A0\uFE0F Shutdown warning: ${t instanceof Error?t.message:String(t)}`)}}},LPn=new qre,FPn=new Gre(3,3e4),UPn=new Vre(100,6e4)});var Jc,ig,Oy,Xj,RDe,Ai,Jre=C(()=>{"use strict";Jc={IMAGE_MAX_MB:10,PDF_MAX_MB:100,DOCUMENT_MAX_MB:100,WORD_MAX_MB:100,TEXT_MAX_MB:50,CSV_MAX_MB:50,EXCEL_MAX_MB:100,SOURCE_CODE_MAX_MB:20,JSON_MAX_MB:20,YAML_MAX_MB:20,XML_MAX_MB:20,VIDEO_MAX_MB:500,AUDIO_MAX_MB:500,ARCHIVE_MAX_MB:200,GENERAL_MAX_MB:200},ig={IMAGE_MAX:10*1024*1024,PDF_MAX:100*1024*1024,DOCUMENT_MAX:100*1024*1024,WORD_MAX:100*1024*1024,TEXT_MAX:50*1024*1024,CSV_MAX:50*1024*1024,EXCEL_MAX:100*1024*1024,SOURCE_CODE_MAX:20*1024*1024,JSON_MAX:20*1024*1024,YAML_MAX:20*1024*1024,XML_MAX:20*1024*1024,VIDEO_MAX:500*1024*1024,AUDIO_MAX:500*1024*1024,ARCHIVE_MAX:200*1024*1024,GENERAL_MAX:200*1024*1024},Oy={MAX_SOURCE_CODE_LINES:1e4,MAX_TEXT_LINES:1e4,MAX_TEXT_LENGTH:1e6,MAX_CSV_ROWS:1e4,MAX_EXCEL_ROWS:5e3,MAX_EXCEL_SHEETS:10,MAX_PDF_PAGES:100,MAX_OBJECT_DEPTH:50,MAX_ARRAY_LENGTH:1e4},Xj={MAX_DECOMPRESSED_SIZE:100*1024*1024,MAX_COMPRESSION_RATIO:100,MAX_ENTRIES:1e3,MAX_NESTING_DEPTH:5},RDe={MAX_ALIAS_COUNT:100,MAX_DOCUMENTS:10,MAX_ANCHORS:100},Ai={IMAGE_MAX_MB:Jc.IMAGE_MAX_MB,PDF_MAX_MB:Jc.PDF_MAX_MB,DOCUMENT_MAX_MB:Jc.DOCUMENT_MAX_MB,WORD_MAX_MB:Jc.WORD_MAX_MB,TEXT_MAX_MB:Jc.TEXT_MAX_MB,CSV_MAX_MB:Jc.CSV_MAX_MB,EXCEL_MAX_MB:Jc.EXCEL_MAX_MB,SOURCE_CODE_MAX_MB:Jc.SOURCE_CODE_MAX_MB,MAX_FILE_SIZE:ig.GENERAL_MAX,MAX_IMAGE_SIZE:ig.IMAGE_MAX,MAX_TEXT_SIZE:ig.TEXT_MAX,MAX_SOURCE_CODE_LINES:Oy.MAX_SOURCE_CODE_LINES,MAX_TEXT_LINES:Oy.MAX_TEXT_LINES,MAX_TEXT_LENGTH:Oy.MAX_TEXT_LENGTH,MAX_CSV_ROWS:Oy.MAX_CSV_ROWS,EXCEL_MAX_ROWS:Oy.MAX_EXCEL_ROWS,EXCEL_MAX_SHEETS:Oy.MAX_EXCEL_SHEETS,MAX_PDF_PAGES:Oy.MAX_PDF_PAGES,MAX_DECOMPRESSED_SIZE:Xj.MAX_DECOMPRESSED_SIZE,MAX_COMPRESSION_RATIO:Xj.MAX_COMPRESSION_RATIO,MAX_ZIP_ENTRIES:Xj.MAX_ENTRIES,YAML_MAX_ALIAS_COUNT:RDe.MAX_ALIAS_COUNT}});function Zj(r){return Yre||(Yre=new Xre(r)),Yre}var Xre,Yre,Zre=C(()=>{"use strict";yr();H();mn();Xre=class{cache=new Map;contentHashIndex=new Map;maxSize;ttlMs;maxImageSize;enabled;stats={hits:0,misses:0,evictions:0,expirations:0,totalRequests:0};constructor(e={}){let t=process.env.NEUROLINK_IMAGE_CACHE_ENABLED,n=process.env.NEUROLINK_IMAGE_CACHE_SIZE,o=process.env.NEUROLINK_IMAGE_CACHE_TTL_MS,s=process.env.NEUROLINK_IMAGE_MAX_SIZE;this.enabled=t!==void 0?t.toLowerCase()==="true":!1,this.maxSize=this.parseConfigValue(n,e.maxSize,100,1,1e3),this.ttlMs=this.parseConfigValue(o,e.ttlMs,1800*1e3,1e3,1440*60*1e3),this.maxImageSize=this.parseConfigValue(s,e.maxImageSize,10*1024*1024,1024,100*1024*1024),g.debug("ImageCache initialized",{enabled:this.enabled,maxSize:this.maxSize,ttlMs:this.ttlMs,maxImageSize:this.maxImageSize})}parseConfigValue(e,t,n,o,s){let i;if(e!==void 0){let a=parseInt(e,10);i=isNaN(a)?n:a}else t!==void 0?i=t:i=n;return i<o?(g.warn(`Cache config value ${i} below minimum ${o}, using min`),o):i>s?(g.warn(`Cache config value ${i} above maximum ${s}, using max`),s):i}normalizeUrl(e){return Jj(e)}generateContentHash(e){let t=typeof e=="string"?Buffer.from(e,"base64"):e;return Xa("sha256").update(t).digest("hex").substring(0,16)}isExpired(e){return Date.now()-e.createdAt>this.ttlMs}isEnabled(){return this.enabled}get(e){if(!this.enabled)return null;this.stats.totalRequests++;let t=this.normalizeUrl(e),n=this.cache.get(t);return n?this.isExpired(n)?(this.stats.expirations++,this.delete(t),g.debug("Image cache entry expired",{url:Za(t)}),null):(n.lastAccessedAt=Date.now(),n.accessCount++,this.cache.delete(t),this.cache.set(t,n),this.stats.hits++,g.debug("Image cache hit",{url:Za(t),accessCount:n.accessCount}),n):(this.stats.misses++,g.debug("Image cache miss",{url:Za(t)}),null)}getByContentHash(e){let t=this.contentHashIndex.get(e);return t?this.get(t):null}set(e,t,n,o){if(!this.enabled){g.debug("Image caching disabled, skipping cache storage");return}let s=this.normalizeUrl(e),i=o.length;if(i>this.maxImageSize){g.debug("Image too large to cache",{url:Za(s),size:i,maxSize:this.maxImageSize});return}let a=this.generateContentHash(o),c=this.contentHashIndex.get(a);if(c&&c!==s){let d=this.cache.get(c);if(d&&!this.isExpired(d)){this.cache.set(s,{...d}),this.contentHashIndex.set(a,s),g.debug("Image cache dedup hit",{newUrl:Za(s),existingUrl:Za(c)});return}}for(;this.cache.size>=this.maxSize;)this.evictOldest();let l=Date.now(),u={dataUri:t,contentType:n,size:i,contentHash:a,createdAt:l,lastAccessedAt:l,accessCount:1};this.cache.set(s,u),this.contentHashIndex.set(a,s),g.debug("Image cached",{url:Za(s),size:i,contentHash:a.substring(0,8),cacheSize:this.cache.size})}delete(e){let t=this.normalizeUrl(e),n=this.cache.get(t);return n?(this.contentHashIndex.get(n.contentHash)===t&&this.contentHashIndex.delete(n.contentHash),this.cache.delete(t),!0):!1}evictOldest(){let e=this.cache.keys().next().value;if(e!==void 0){let t=this.cache.get(e);t&&this.contentHashIndex.get(t.contentHash)===e&&this.contentHashIndex.delete(t.contentHash),this.cache.delete(e),this.stats.evictions++,g.debug("Image cache eviction",{url:Za(String(e))})}}evictExpired(){let e=0,t=Date.now();for(let[n,o]of this.cache.entries())t-o.createdAt>this.ttlMs&&(this.delete(n),e++,this.stats.expirations++);return e>0&&g.debug(`Evicted ${e} expired image cache entries`),e}clear(){let e=this.cache.size;this.cache.clear(),this.contentHashIndex.clear(),g.debug(`Image cache cleared (${e} entries removed)`)}getStats(){let e=0;for(let n of this.cache.values())e+=n.size;let t=this.stats.totalRequests>0?Number((this.stats.hits/this.stats.totalRequests*100).toFixed(2)):0;return{...this.stats,size:this.cache.size,totalBytes:e,hitRate:t}}has(e){let t=this.normalizeUrl(e),n=this.cache.get(t);return n!=null&&!this.isExpired(n)}getSize(){return this.cache.size}getConfig(){return{enabled:this.enabled,maxSize:this.maxSize,ttlMs:this.ttlMs,maxImageSize:this.maxImageSize}}},Yre=null});function Aqt(r){if(r&&typeof r=="object"){let e=r.code,t=r.name;if(Rqt.has(e||"")||t==="AbortError")return!0}if(r instanceof Error){let e=r.message,t=e.match(/HTTP (\d{3}):/);if(t){let n=parseInt(t[1],10);return n>=500||n===429||n===408}if(/\b(request timed out|operation timed out|connection timed out|timed out)\b/i.test(e)||/\bnetwork (error|failure|unreachable|down)\b/i.test(e))return!0}return!1}function Qre(r){if(r==="application/octet-stream")throw g.error("Unable to detect a supported image format from file content"),new Error("Unsupported or corrupted image: no known image signature (PNG/JPEG/GIF/WebP/BMP/TIFF/SVG/AVIF) was found in the file content.")}var ADe,kqt,Rqt,Pu,Iqt,Pqt,mM,Qj=C(()=>{"use strict";dn();H();mn();Bre();Kre();ki();Jre();Zre();kt();ADe=12,kqt={"image/png":67,"image/jpeg":125,"image/gif":43,"image/webp":20,"image/avif":100},Rqt=new Set(["ECONNRESET","ENOTFOUND","ECONNREFUSED","ETIMEDOUT","ERR_NETWORK"]);Pu=class r{static async process(e,t){let n=this.validateBufferNotEmpty(e);Qre(n);let o=r.safeBase64Convert(e,"image processing"),s=`data:${n};base64,${o}`;return this.validateProcessOutput(s,o,n),{type:"image",content:s,mimeType:n,metadata:{confidence:100,size:e.length}}}static hasStrictImageMagic(e,t){let n=e;switch(t){case"image/png":return n.length>=4&&n[0]===137&&n[1]===80&&n[2]===78&&n[3]===71;case"image/jpeg":return n.length>=3&&n[0]===255&&n[1]===216&&n[2]===255;case"image/gif":return n.length>=3&&n[0]===71&&n[1]===73&&n[2]===70;case"image/webp":return n.length>=12&&n.subarray(0,4).toString("latin1")==="RIFF"&&n.subarray(8,12).toString("latin1")==="WEBP";case"image/avif":return n.length>=12&&n.subarray(4,8).toString("latin1")==="ftyp"&&n.subarray(8,12).toString("latin1").startsWith("avif");default:return!1}}static validateBufferNotEmpty(e){if(e.length===0)throw g.error("Empty buffer provided"),de.imageBufferInvalid("Invalid image processing: buffer is empty");let t=this.detectImageType(e);if(t==="image/svg+xml")return t;if(e.length<ADe)throw de.imageBufferInvalid(`Invalid image processing: buffer too small (${e.length} bytes) \u2014 a minimum of ${ADe} bytes is required for a valid image.`);let n=kqt[t];if(n!==void 0&&e.length<n&&this.hasStrictImageMagic(e,t))throw de.imageBufferInvalid(`Invalid image processing: ${t} buffer is truncated (${e.length} bytes, minimum ${n} for a valid ${t}).`);return t}static validateProcessOutput(e,t,n){if(t.length===0)throw g.error("Empty base64 content generated"),new Error("Invalid image processing: base64 content is empty");if(!/^data:[^;]+;base64,[A-Za-z0-9+/]*={0,2}$/.test(e))throw g.error("Invalid data URI format generated",{dataUri:e}),new Error("Invalid data URI format: must be data:{mimeType};base64,{content}");if(!this.validateImageFormat(n))throw g.error("Invalid MIME type generated",{mediaType:n}),new Error(`Invalid MIME type: ${n} is not in allowed list`)}static processImageForOpenAI(e){try{return typeof e=="string"?e.startsWith("http")||e.startsWith("data:")?e:`data:image/jpeg;base64,${e}`:`data:image/jpeg;base64,${r.safeBase64Convert(e,"OpenAI image input")}`}catch(t){throw t instanceof Oe?t:(g.error("Failed to process image for OpenAI:",t),new Error(`Image processing failed for OpenAI: ${t instanceof Error?t.message:"Unknown error"}`,{cause:t}))}}static processImageForGoogle(e){try{let t,n="image/jpeg";if(typeof e=="string")if(e.startsWith("data:")){let o=e.match(/^data:([^;]+);base64,(.+)$/);o?(n=o[1],t=o[2]):t=e.split(",")[1]||e}else t=e;else t=r.safeBase64Convert(e,"provider image input");return{mimeType:n,data:t}}catch(t){throw t instanceof Oe?t:(g.error("Failed to process image for Google AI:",t),new Error(`Image processing failed for Google AI: ${t instanceof Error?t.message:"Unknown error"}`,{cause:t}))}}static processImageForAnthropic(e){try{let t,n="image/jpeg";if(typeof e=="string")if(e.startsWith("data:")){let o=e.match(/^data:([^;]+);base64,(.+)$/);o?(n=o[1],t=o[2]):t=e.split(",")[1]||e}else t=e;else t=r.safeBase64Convert(e,"provider image input");return{mediaType:n,data:t}}catch(t){throw t instanceof Oe?t:(g.error("Failed to process image for Anthropic:",t),new Error(`Image processing failed for Anthropic: ${t instanceof Error?t.message:"Unknown error"}`,{cause:t}))}}static processImageForVertex(e,t){try{return t.includes("gemini")?r.processImageForGoogle(e):t.includes("claude")?r.processImageForAnthropic(e):r.processImageForGoogle(e)}catch(n){throw n instanceof Oe?n:(g.error("Failed to process image for Vertex AI:",n),new Error(`Image processing failed for Vertex AI: ${n instanceof Error?n.message:"Unknown error"}`,{cause:n}))}}static detectImageType(e){try{if(typeof e=="string"){if(e.startsWith("data:")){let o=e.match(/^data:([^;]+);/);return o?o[1]:"image/jpeg"}let t=e.toLowerCase().split(".").pop();return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",bmp:"image/bmp",tiff:"image/tiff",tif:"image/tiff",svg:"image/svg+xml",avif:"image/avif"}[t||""]||"image/jpeg"}if(e.length>=4){let t=e.subarray(0,4);if(t[0]===137&&t[1]===80&&t[2]===78&&t[3]===71)return"image/png";if(t[0]===255&&t[1]===216&&t[2]===255)return"image/jpeg";if(t[0]===71&&t[1]===73&&t[2]===70&&t[3]===56)return"image/gif";if(e.length>=12){let n=e.subarray(0,4),o=e.subarray(8,12);if(n.toString()==="RIFF"&&o.toString()==="WEBP")return"image/webp"}if(e.length>=4){let n=e.subarray(0,4).toString();if(n==="<svg"||n==="<?xm")return"image/svg+xml"}if(e.length>=12){let n=e[4]===102&&e[5]===116&&e[6]===121&&e[7]===112,o=String.fromCharCode(e[8],e[9],e[10],e[11]);if(n&&(o==="avif"||o==="avis"||o==="avio"))return"image/avif"}if(e[0]===66&&e[1]===77)return"image/bmp";if(e[0]===73&&e[1]===73&&e[2]===42&&e[3]===0||e[0]===77&&e[1]===77&&e[2]===0&&e[3]===42)return"image/tiff"}return g.warn("Could not detect image type from magic bytes; using application/octet-stream"),"application/octet-stream"}catch(t){return g.warn("Failed to detect image type, using default:",t),"application/octet-stream"}}static validateSize(e,t,n=ig.IMAGE_MAX){if(!Number.isFinite(n)||n<0)throw de.invalidConfiguration("maxSize","must be a finite, non-negative byte count",{maxSize:n,context:t});if(!Number.isFinite(e)||e<0)throw de.invalidImageSize(e);if(e>n){let o=(e/1048576).toFixed(1),s=(n/(1024*1024)).toFixed(0);throw de.imageTooLarge(o,s)}}static validateBufferSize(e,t,n=ig.IMAGE_MAX){r.validateSize(e.length,t,n)}static safeBase64Convert(e,t,n=ig.IMAGE_MAX){return r.validateBufferSize(e,t,n),e.toString("base64")}static validateImageFormat(e){return["image/jpeg","image/png","image/gif","image/webp","image/bmp","image/tiff","image/svg+xml","image/avif"].includes(e.toLowerCase())}static getImageDimensions(e){try{if(e.length>=24&&e.subarray(0,8).toString("hex")==="89504e470d0a1a0a"){let t=e.readUInt32BE(16),n=e.readUInt32BE(20);return{width:t,height:n}}if(e.length>=4&&e[0]===255&&e[1]===216){let t=2;for(;t<e.length-1;){if(e[t]!==255){t++;continue}for(;t<e.length&&e[t]===255;)t++;if(t>=e.length)break;let n=e[t];if(t++,n===192||n===194){if(t+7>e.length)break;let s=e.readUInt16BE(t+3);return{width:e.readUInt16BE(t+5),height:s}}if(n===208||n===209||n===210||n===211||n===212||n===213||n===214||n===215||n===216||n===217||n===1)continue;if(t+2>e.length)break;let o=e.readUInt16BE(t);t+=o}return null}return null}catch(t){return g.warn("Failed to extract image dimensions:",t),null}}static processImage(e,t,n){try{Buffer.isBuffer(e)&&r.validateBufferSize(e,"image processing");let o=r.detectImageType(e);Qre(o);let s=typeof e=="string"?Buffer.byteLength(e,"base64"):e.length,i,a;switch(t.toLowerCase()){case"openai":i=r.processImageForOpenAI(e),a="data_uri";break;case"google-ai":case"google":{i=r.processImageForGoogle(e).data,a="base64";break}case"anthropic":{i=r.processImageForAnthropic(e).data,a="base64";break}case"vertex":{i=r.processImageForVertex(e,n||"").data,a="base64";break}default:typeof e=="string"?i=e.startsWith("data:")&&e.split(",")[1]||e:i=r.safeBase64Convert(e,"image input"),a="base64"}return{data:i,mediaType:o,size:s,format:a}}catch(o){throw o instanceof Oe?o:(g.error(`Failed to process image for ${t}:`,o),new Error(`Image processing failed: ${o instanceof Error?o.message:"Unknown error"}`,{cause:o}))}}},Iqt=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","svg","avif","ico","heic","heif"],Pqt=new Set(Iqt),mM={isDataUri:r=>typeof r=="string"&&r.startsWith("data:")&&r.includes("base64,"),isUrl:r=>{try{return new URL(r),r.startsWith("http://")||r.startsWith("https://")}catch{return!1}},isBase64:r=>mM.isValidBase64(r),getFileExtension:r=>{let t=r.split(/[?#]/)[0].match(/\.([^.]+)$/);if(!t)return null;let n=t[1].toLowerCase();return/^[a-z0-9]+$/.test(n)?n:null},isValidImageExtension:r=>{if(!r||typeof r!="string")return!1;let e=r.toLowerCase();return/^[a-z0-9]+$/.test(e)?Pqt.has(e):!1},getValidatedImageExtension:r=>{let e=mM.getFileExtension(r);return e&&mM.isValidImageExtension(e)?e:null},formatFileSize:r=>{if(r===0)return"0 Bytes";let e=1024,t=["Bytes","KB","MB","GB"],n=Math.floor(Math.log(r)/Math.log(e));return parseFloat((r/Math.pow(e,n)).toFixed(2))+" "+t[n]},bufferToBase64:(r,e=ig.IMAGE_MAX)=>Pu.safeBase64Convert(r,"buffer-to-base64",e),base64ToBuffer:r=>{let e=r.includes(",")?r.split(",")[1]:r;return Buffer.from(e,"base64")},redactPathFromMessage:Ure,fileToBase64DataUri:async(r,e=10*1024*1024)=>{try{let t=await Promise.resolve().then(()=>(Iu(),sg)),n=await t.stat(r);if(!n.isFile())throw new Error("Not a file");if(n.size>e)throw new Error(`File too large: ${n.size} bytes (max: ${e} bytes)`);let o=await t.readFile(r),s=Pu.detectImageType(o)||Pu.detectImageType(r);Qre(s);let i=o.toString("base64");return`data:${s};base64,${i}`}catch(t){g.debug("fileToBase64DataUri failed",{filePath:r,error:t});let n=qs(r),o=My(t,{filePath:r}),s=t instanceof Error?o.message:"Unknown error";throw new Error(`Failed to convert file to base64 (${n}): ${s}`,{cause:o})}},urlToBase64DataUri:async(r,{timeoutMs:e=15e3,maxBytes:t=10*1024*1024,maxAttempts:n=3}={})=>{let o=Zj(),s=o.get(r);if(s)return g.debug("Using cached image for URL",{url:Za(r)}),s.dataUri;if(await Yj.acquire(),!/^https?:\/\//i.test(r))throw new Error("Unsupported protocol");let i=async()=>{let a=new AbortController,c=setTimeout(()=>a.abort(),e);try{let l=await fetch(r,{signal:a.signal});if(!l.ok)throw new Error(`HTTP ${l.status}: ${l.statusText}`);let u=l.headers.get("content-type")||"";if(!/^image\//i.test(u))throw new Error(`Unsupported content-type: ${u||"unknown"}`);let d=l.headers.get("content-length"),p=Number(d||0);if(d!==null&&p===0)throw new Error("Empty response: content-length is 0");if(p&&p>t)throw new Error(`Content too large: ${p} bytes`);let f=await l.arrayBuffer();if(f.byteLength>t)throw new Error(`Downloaded content too large: ${f.byteLength} bytes`);let h=Buffer.from(f),y=h.toString("base64"),x=`data:${u||"image/jpeg"};base64,${y}`;return o.set(r,x,u||"image/jpeg",h),x}finally{clearTimeout(c)}};try{return await kDe(i,{maxAttempts:n,initialDelay:Ta.DEFAULT_INITIAL_DELAY,backoffMultiplier:Ta.DEFAULT_BACKOFF_MULTIPLIER,maxDelay:Ta.DEFAULT_MAX_DELAY,retryCondition:Aqt,onRetry:(a,c)=>{let l=Fre(c instanceof Error?c.message:String(c)),u=n-a;g.warn(`\u26A0\uFE0F Image download attempt ${a} failed for ${Za(r)}: ${l}. ${u} ${u===1?"attempt":"attempts"} remaining...`)}})}catch(a){let c=Za(r),l=My(a);throw new Error(`Failed to download and convert URL to base64 (${c}): ${l.message}`,{cause:l})}},extractBase64FromDataUri:r=>r.includes(",")?r.split(",")[1]:r,extractMimeTypeFromDataUri:r=>{let e=r.match(/^data:([^;]+);base64,/);return e?e[1]:"image/jpeg"},createDataUri:(r,e="image/jpeg")=>{let t=r.includes(",")?r.split(",")[1]:r;return`data:${e};base64,${t}`},isValidBase64:r=>{try{let e=r.includes(",")?r.split(",")[1]:r;if(!e||e.length===0||!/^[A-Za-z0-9+/]*={0,2}$/.test(e)||e.length%4!==0)return!1;let n=e.indexOf("=");if(n!==-1){if(n<e.length-2)return!1;let a=e.slice(n);if(!/^=+$/.test(a))return!1}let s=Buffer.from(e,"base64").toString("base64"),i=a=>a.replace(/=+$/,"");return i(e)===i(s)}catch{return!1}},getBase64Size:r=>{let e=r.includes(",")?r.split(",")[1]:r;return Buffer.byteLength(e,"base64")},compressBase64:(r,e=.8)=>(g.warn("Base64 compression not implemented - returning original"),r)}});function Oqt(r){let e=r.toLowerCase();switch(e.replace(/[^a-z]/g,"")){case"lmstudio":return"lm-studio";case"llamacpp":return"llamacpp";case"nvidianim":return"nvidia-nim";case"googleaistudio":return"google-ai";case"or":return"openrouter";default:return e}}var Ny,fM,Mqt,ene,u_,IDe=C(()=>{"use strict";Qj();H();Ny=class{static logError(e,t,n){g.error(`Multimodal ${e} failed: ${t.message}`),process.env.NODE_ENV==="development"&&(g.error("Context:",JSON.stringify(n,null,2)),g.error("Stack:",t.stack))}},fM={openai:10,azure:10,"google-ai":16,google:16,anthropic:20,vertex:{claude:20,gemini:16,default:16},ollama:10,litellm:10,mistral:10,bedrock:20,openrouter:10},Mqt=new Set(["litellm","openrouter"]);ene={openai:["gpt-5.4","gpt-5.4-mini","gpt-5.4-nano","gpt-5.4-pro","gpt-5.2","gpt-5.2-chat-latest","gpt-5.2-pro","gpt-5","gpt-5-2025-08-07","gpt-5-pro","gpt-5-mini","gpt-5-nano","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","o3","o3-mini","o3-pro","o4","o4-mini","o4-mini-deep-research","gpt-4o","gpt-4o-mini","gpt-4-turbo","gpt-4-vision-preview"],"google-ai":["gemini-3.1-pro-preview","gemini-3.1-flash-lite-preview","gemini-3.1-flash-image-preview","gemini-3.1-pro-preview-customtools","gemini-3-flash-preview","gemini-3-pro-image-preview","gemini-3-pro-preview","gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.5-flash-image","gemini-2.0-flash","gemini-2.0-flash-001","gemini-2.0-flash-lite","gemini-2.0-flash-preview-image-generation","gemini-1.5-pro","gemini-1.5-flash","gemini-pro-vision"],anthropic:["claude-opus-4-6","claude-sonnet-4-6","claude-sonnet-4-5","claude-sonnet-4-5-20250929","claude-opus-4-5","claude-opus-4-5-20251101","claude-haiku-4-5","claude-haiku-4-5-20251001","claude-opus-4-1","claude-opus-4-1-20250805","claude-opus-4","claude-opus-4-20250514","claude-sonnet-4","claude-sonnet-4-20250514","claude-3-7-sonnet","claude-3-7-sonnet-20250219","claude-3-5-sonnet","claude-3-5-sonnet-20241022","claude-3-opus","claude-3-sonnet","claude-3-haiku"],azure:["gpt-5.1","gpt-5.1-chat","gpt-5.1-codex","gpt-5","gpt-5-pro","gpt-5-turbo","gpt-5-chat","gpt-5-mini","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","o3","o3-mini","o3-pro","o4-mini","gpt-4o","gpt-4o-mini","gpt-4-turbo","gpt-4-vision-preview","gpt-4"],vertex:["gemini-3.1-pro-preview","gemini-3.1-flash-lite-preview","gemini-3.1-flash-image-preview","gemini-3.1-pro-preview-customtools","gemini-3-flash-preview","gemini-3-pro-image-preview","gemini-3-pro-preview","gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.5-flash-image","gemini-2.0-flash-001","gemini-2.0-flash-lite","gemini-2.0-flash","gemini-1.5-pro","gemini-1.5-flash","claude-sonnet-4-5@","claude-opus-4-5@","claude-haiku-4-5@","claude-haiku-4-5","claude-sonnet-4@","claude-opus-4@","claude-opus-4-1@","claude-3-7-sonnet@","claude-3-5-sonnet@","claude-opus-3@","claude-haiku-3@","claude-3-7-sonnet","claude-3-5-sonnet","claude-3-opus","claude-3-sonnet","claude-3-haiku","claude-sonnet-4","claude-sonnet-3","claude-opus-3","claude-haiku-3","claude-haiku-4","claude-3.5-sonnet","claude-3.5-haiku","claude-4.5-sonnet","claude-4.5-opus","claude-4.5-haiku","claude-haiku-4-5","claude-3.0-sonnet","claude-3.0-opus"],litellm:["openai/gpt-5","openai/gpt-4o","openai/gpt-4o-mini","openai/gpt-4-turbo","gpt-5","gpt-4o","gpt-4.1","anthropic/claude-sonnet-4-5-20250929","anthropic/claude-opus-4-1-20250805","anthropic/claude-3-5-sonnet-20240620","claude-sonnet-4-5","claude-sonnet-4-5-20250929","claude-opus-4-5","claude-opus-4-5-20251101","claude-haiku-4-5-20251001","claude-sonnet-4","claude-opus-4-1","vertex_ai/gemini-2.5-pro","gemini/gemini-2.5-pro","gemini/gemini-2.0-flash","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash","gemini-2.0-flash-lite","groq/llama-3.2-11b-vision-preview"],openrouter:["anthropic/claude-3.7-sonnet","anthropic/claude-3-5-haiku","anthropic/claude-3-opus","anthropic/claude-3-sonnet","anthropic/claude-3-haiku","openai/gpt-4o","openai/gpt-4o-mini","openai/gpt-4-turbo","openai/gpt-4-vision-preview","google/gemini-2.5-pro","google/gemini-2.5-flash","google/gemini-2.0-flash","google/gemini-2.0-flash-001","google/gemini-1.5-pro","google/gemini-1.5-flash","google/gemini-pro-vision","meta-llama/llama-3.2-90b-vision-instruct","meta-llama/llama-3.2-11b-vision-instruct","mistralai/pixtral-12b","mistralai/pixtral-large","qwen/qwen-2-vl-72b-instruct","qwen/qwen-2-vl-7b-instruct"],mistral:["mistral-large-latest","mistral-large-2512","mistral-small","mistral-small-latest","mistral-small-3.2","mistral-small-2506","mistral-medium","mistral-medium-latest","mistral-medium-3.1","mistral-medium-2508","magistral-small","magistral-small-latest","magistral-medium","magistral-medium-latest","pixtral-12b","pixtral-12b-latest","pixtral-large","pixtral-large-latest","pixtral-large-2502"],ollama:["llama4:scout","llama4:maverick","llama4:latest","llama4","llama3.2-vision","llama3.2-vision:11b","llama3.2-vision:90b","gemma3","gemma3:4b","gemma3:12b","gemma3:27b","gemma3:latest","qwen2.5-vl","qwen2.5-vl:72b","qwen2.5-vl:32b","mistral-small3.1","mistral-small3.1:large","mistral-small3.1:medium","mistral-small3.1:small","llava","llava:7b","llava:13b","llava:34b","llava-llama3","llava-llama3:8b"],bedrock:["amazon.nova-premier","amazon.nova-premier-v1:0","amazon.nova-pro","amazon.nova-pro-v1:0","amazon.nova-lite","amazon.nova-lite-v1:0","amazon.nova-2-lite-v1:0","nova-premier","nova-pro","nova-lite","claude-sonnet-4-5","claude-sonnet-4.5","anthropic.claude-sonnet-4-5","anthropic.claude-sonnet-4-5-20250929-v1:0","claude-opus-4-5","claude-opus-4.5","anthropic.claude-opus-4-5","anthropic.claude-opus-4-5-20251124-v1:0","claude-haiku-4-5","claude-haiku-4.5","anthropic.claude-haiku-4-5","anthropic.claude-haiku-4-5-20251001-v1:0","claude-sonnet-4","claude-sonnet-4@","anthropic.claude-sonnet-4","anthropic.claude-sonnet-4-20250514-v1:0","claude-opus-4","claude-opus-4-1","claude-opus-4@","anthropic.claude-opus-4","anthropic.claude-opus-4-1-20250805-v1:0","claude-3-7-sonnet","claude-3.7-sonnet","anthropic.claude-3-7-sonnet","anthropic.claude-3-7-sonnet-20250219-v1:0","claude-3-5-sonnet","claude-3.5-sonnet","anthropic.claude-3-5-sonnet","anthropic.claude-3-5-sonnet-20241022-v1:0","claude-3-opus","anthropic.claude-3-opus","claude-3-sonnet","anthropic.claude-3-sonnet","claude-3-haiku","anthropic.claude-3-haiku","meta.llama4-maverick-17b-instruct-v1:0","meta.llama4-scout-17b-instruct-v1:0","meta.llama3-2-90b-instruct-v1:0","meta.llama3-2-11b-instruct-v1:0","mistral.pixtral-large-2502-v1:0","anthropic.claude"],huggingface:["Qwen/Qwen2.5-VL-32B-Instruct","Qwen/Qwen2.5-VL-7B-Instruct","microsoft/Phi-3-vision-128k-instruct","llava-hf/llava-1.5-7b-hf","llava-hf/llava-v1.6-mistral-7b-hf"],sagemaker:["meta-llama-4-maverick-17b-128e-instruct","meta-llama-4-scout-17b-16e-instruct"],deepseek:[],"nvidia-nim":["meta/llama-3.2-90b-vision-instruct","meta/llama-3.2-11b-vision-instruct"],"lm-studio":["llava","llama-3.2-11b-vision","llama-3.2-90b-vision","vision-instruct","qwen2-vl","qwen2.5-vl","phi-3-vision"],llamacpp:["llava","llama-3.2-11b-vision","llama-3.2-90b-vision","vision-instruct","qwen2-vl","phi-3-vision"],xai:["grok-2-vision-latest"],groq:["llama-3.2-90b-vision-preview","llama-3.2-11b-vision-preview"],cohere:[],"together-ai":[],fireworks:["accounts/fireworks/models/phi-3-vision-128k-instruct","accounts/fireworks/models/llama-v3p2-90b-vision-instruct","accounts/fireworks/models/llama-v3p2-11b-vision-instruct"],perplexity:[],cloudflare:["@cf/meta/llama-3.2-11b-vision-instruct"],replicate:["llava","llama-3.2-vision","moondream","qwen2-vl"],voyage:[],jina:[],stability:[],ideogram:[],recraft:[]},u_=class{static validateImageCount(e,t,n){let o=t.toLowerCase(),s;if(o==="vertex"&&n)n.includes("claude")?s=fM.vertex.claude:n.includes("gemini")?s=fM.vertex.gemini:s=fM.vertex.default;else{let a=o in fM?fM[o]:void 0;a===void 0?(s=10,g.warn(`Image count limit not defined for provider ${t}. Using conservative default of 10 images.`)):s=a}let i=Math.floor(s*.8);if(e===i&&g.warn(`Image count (${e}) is approaching the limit for ${t}. Maximum allowed: ${s}. Please reduce the number of images.`),e>s)throw new Error(`Image count (${e}) exceeds the maximum limit for ${t}. Maximum allowed: ${s}. Please reduce the number of images.`)}static convertToContent(e,t){let n=[{type:"text",text:e}];return t&&t.length>0&&t.forEach(o=>{let s=typeof o=="object"&&"data"in o&&!Buffer.isBuffer(o)?o.data:o,i=typeof o=="object"&&"data"in o&&!Buffer.isBuffer(o)?o.altText:void 0;n.push({type:"image",data:s,altText:i,mediaType:Pu.detectImageType(s)})}),n}static supportsVision(e,t){try{let n=Oqt(e),o=ene[n];if(!o||o.length===0)return!1;if(!t)return!0;let s=o.some(i=>t.toLowerCase().includes(i.toLowerCase()));return!s&&Mqt.has(n)?!0:s}catch{return!1}}static getSupportedModels(e){let t=e.toLowerCase(),n=ene[t];return n?[...n]:[]}static getVisionProviders(){return Object.entries(ene).filter(([,e])=>e.length>0).map(([e])=>e)}static countImagesInMessage(e,t){return(e?.length||0)+(t??0)}static countImagesInPages(e){return!e||e.length===0?0:e.reduce((t,n)=>t+(n.pageCount??0),0)}}});function PDe(){return{enabled:process.env.NEUROLINK_MEMORY_ENABLED==="true",maxSessions:Number(process.env.NEUROLINK_MEMORY_MAX_SESSIONS)||50,enableSummarization:process.env.NEUROLINK_SUMMARIZATION_ENABLED!=="false",tokenThreshold:process.env.NEUROLINK_TOKEN_THRESHOLD?Number(process.env.NEUROLINK_TOKEN_THRESHOLD):void 0,summarizationProvider:process.env.NEUROLINK_SUMMARIZATION_PROVIDER||"vertex",summarizationModel:process.env.NEUROLINK_SUMMARIZATION_MODEL||"gemini-2.5-flash",maxTurnsPerSession:50}}var tne,rne,nne=C(()=>{"use strict";tne=`
819
+ `):String(f):void 0,y=p.reasoning??void 0;return{content:a,structuredData:c,usage:p,finishReason:e.finishReason,jsonRepaired:l||void 0,jsonTruncated:u||void 0,provider:this.providerName,model:this.modelName,reasoning:h,reasoningTokens:y,toolCalls:e.toolCalls?e.toolCalls.map(x=>({toolCallId:x.toolCallId||"unknown",toolName:x.toolName||"unknown",args:x.args||{}})):[],toolResults:e.toolResults??[],toolsUsed:n,toolExecutions:o,availableTools:Object.keys(t).map(x=>{let b=t[x];return{name:x,description:b.description||"No description available",parameters:b.inputSchema||{},server:b.serverId||"direct"}})}}analyzeAIResponse(e){g.debug("NeuroLink Raw AI Response Analysis",{provider:this.providerName,model:this.modelName,responseTextLength:e.text?.length||0,responsePreview:e.text?.substring(0,500)??"",finishReason:e.finishReason,usage:e.usage});let t={hasToolCalls:!!e.toolCalls,toolCallsLength:e.toolCalls?.length||0,toolCalls:e.toolCalls?.map((n,o)=>{let s=n,i=s.toolName||s.name||"unknown";return{index:o+1,toolName:i,toolId:s.toolCallId||s.id||"none",hasArgs:!!s.args,argsKeys:s.args&&typeof s.args=="object"?Object.keys(s.args):[]}})||[]};g.debug("Tool Calls Analysis",t)}}});var sg={};te(sg,{AsyncLocalStorage:()=>iBt,Buffer:()=>qzt,Channel:()=>Nzt,DatabaseSync:()=>Vzt,Duplex:()=>cBt,EventEmitter:()=>sBt,Http2ServerRequest:()=>Yzt,Http2ServerResponse:()=>Xzt,Interface:()=>Gzt,MIMEType:()=>njt,PassThrough:()=>lBt,PerformanceObserver:()=>Pzt,Readable:()=>yDe,ReadableStream:()=>uBt,Resolver:()=>Azt,TextDecoder:()=>vDe,TextEncoder:()=>Vj,Transform:()=>aBt,URL:()=>hzt,URLSearchParams:()=>yzt,Worker:()=>Uzt,Writable:()=>xDe,access:()=>OBt,appendFile:()=>uM,appendFileSync:()=>H2t,arch:()=>JBt,arrayBuffer:()=>Zzt,basename:()=>Z2t,builtinModules:()=>pzt,callbackify:()=>Ezt,channel:()=>Ozt,chmodSync:()=>hBt,clearInterval:()=>rjt,clearTimeout:()=>ejt,closeSync:()=>vBt,connect:()=>QBt,constants:()=>Hzt,copyFileSync:()=>xBt,cpSync:()=>W2t,cpus:()=>qBt,createConnection:()=>ezt,createGunzip:()=>azt,createGzip:()=>czt,createHash:()=>hDe,createHmac:()=>j2t,createInterface:()=>jzt,createReadStream:()=>IBt,createRequire:()=>dzt,createServer:()=>K2t,createWriteStream:()=>ABt,debug:()=>Szt,debuglog:()=>bDe,default:()=>B2t,deflateSync:()=>rzt,deprecate:()=>wzt,deserialize:()=>Fzt,dirname:()=>X2t,exec:()=>FBt,execFile:()=>$Bt,execFileSync:()=>BBt,execSync:()=>UBt,existsSync:()=>mBt,extname:()=>Q2t,fileURLToPath:()=>xzt,finished:()=>pBt,format:()=>gzt,freemem:()=>HBt,fstatSync:()=>TBt,get:()=>ZBt,gunzip:()=>izt,gunzipSync:()=>nzt,gzip:()=>szt,gzipSync:()=>ozt,hasSubscribers:()=>Dzt,homedir:()=>jBt,hostname:()=>VBt,inflateSync:()=>tzt,inherits:()=>vzt,inspect:()=>Hj,isAbsolute:()=>tBt,isBuiltin:()=>mzt,isDeepStrictEqual:()=>_zt,isIP:()=>Jzt,isIPv4:()=>Kzt,isIPv6:()=>Wzt,isMainThread:()=>$zt,join:()=>J2t,lookup:()=>Rzt,mkdir:()=>Pre,mkdirSync:()=>SBt,monitorEventLoopDelay:()=>Mzt,normalize:()=>oBt,ok:()=>lzt,open:()=>Mre,openSync:()=>bBt,parentPort:()=>Bzt,parse:()=>fzt,pathToFileURL:()=>bzt,performance:()=>Izt,pipeline:()=>dBt,platform:()=>zBt,posix:()=>nBt,promises:()=>z2t,promisify:()=>Tzt,randomBytes:()=>G2t,randomUUID:()=>V2t,readFile:()=>Py,readFileSync:()=>fBt,readdir:()=>PBt,readdirSync:()=>EBt,realpath:()=>qj,realpathSync:()=>yBt,relative:()=>eBt,release:()=>YBt,rename:()=>NBt,renameSync:()=>CBt,request:()=>XBt,resolve:()=>Y2t,rm:()=>DBt,rmSync:()=>RBt,rmdirSync:()=>kBt,sep:()=>rBt,serialize:()=>Lzt,setInterval:()=>tjt,setTimeout:()=>Qzt,spawn:()=>LBt,stat:()=>dM,statSync:()=>wBt,strict:()=>uzt,tmpdir:()=>GBt,toUSVString:()=>Czt,totalmem:()=>WBt,type:()=>KBt,types:()=>kzt,unlink:()=>MBt,unlinkSync:()=>_Bt,webcrypto:()=>q2t,workerData:()=>zzt,writeFile:()=>Ire,writeFileSync:()=>gBt});var _s,$o,B2t,z2t,hDe,j2t,G2t,V2t,q2t,H2t,W2t,K2t,J2t,Y2t,X2t,Z2t,Q2t,eBt,tBt,rBt,nBt,oBt,sBt,iBt,yDe,xDe,aBt,cBt,lBt,uBt,dBt,pBt,mBt,fBt,gBt,hBt,uM,yBt,xBt,bBt,vBt,TBt,SBt,wBt,EBt,_Bt,CBt,kBt,RBt,ABt,IBt,Py,Ire,Pre,dM,PBt,MBt,OBt,NBt,DBt,Mre,qj,LBt,FBt,UBt,$Bt,BBt,zBt,jBt,GBt,VBt,qBt,HBt,WBt,KBt,JBt,YBt,XBt,ZBt,QBt,ezt,tzt,rzt,nzt,ozt,szt,izt,azt,czt,lzt,uzt,dzt,pzt,mzt,fzt,gzt,hzt,yzt,xzt,bzt,vzt,Tzt,bDe,Szt,Hj,wzt,Ezt,_zt,Czt,kzt,vDe,Vj,Rzt,Azt,Izt,Pzt,Mzt,Ozt,Nzt,Dzt,Lzt,Fzt,Uzt,$zt,Bzt,zzt,jzt,Gzt,Vzt,qzt,Hzt,Wzt,Kzt,Jzt,Yzt,Xzt,Zzt,TDe,Qzt,ejt,tjt,rjt,njt,Iu=C(()=>{_s=()=>{},$o=async()=>{},B2t={},z2t={readFile:$o,writeFile:$o,mkdir:$o,stat:$o,readdir:$o,unlink:$o,access:$o,rm:$o,rename:$o},hDe=r=>{let e=[];return{update(t){return e.push(typeof t=="string"?new Vj().encode(t):t),this},digest(t){let n=0;for(let s of e)for(let i=0;i<s.length;i++)n=(n<<5)-n+s[i]|0;let o=(n>>>0).toString(16).padStart(8,"0");return t==="hex"?o:t==="base64"?btoa(o):o}}},j2t=(r,e)=>hDe(r),G2t=r=>new Uint8Array(r||32),V2t=()=>globalThis.crypto?.randomUUID?.()||Math.random().toString(36),q2t=globalThis.crypto,H2t=()=>{throw new Error("[NeuroLink:browser] fs.appendFileSync is not supported in browser runtime \u2014 use server-side execution")},W2t=()=>{throw new Error("[NeuroLink:browser] fs.cpSync is not supported in browser runtime \u2014 use server-side execution")},K2t=()=>({listen:_s,close:_s,on:_s}),J2t=(...r)=>r.join("/"),Y2t=(...r)=>r.join("/"),X2t=r=>r||"",Z2t=r=>r?.split?.("/")?.pop?.()||"",Q2t=r=>{let e=r?.match?.(/\.[^.]+$/);return e?e[0]:""},eBt=(r,e)=>e||"",tBt=()=>!1,rBt="/",nBt={normalize:r=>r,join:(...r)=>r.join("/"),resolve:(...r)=>r.join("/"),sep:"/"},oBt=r=>r,sBt=class{on(){return this}off(){return this}emit(){return this}once(){return this}removeListener(){return this}addListener(){return this}},iBt=class{getStore(){}run(r,e,...t){return e(...t)}enterWith(){}disable(){}},yDe=class{pipe(){return this}on(){return this}read(){return null}push(){}destroy(){}},xDe=class{write(){return!0}end(){}on(){return this}destroy(){}},aBt=class{push(){}on(){return this}},cBt=class{on(){return this}},lBt=class{pipe(){return this}on(){return this}},uBt=globalThis.ReadableStream||class{},dBt=_s,pBt=_s,mBt=()=>!1,fBt=()=>"",gBt=_s,hBt=_s,uM=$o,yBt=r=>r,xBt=_s,bBt=()=>0,vBt=_s,TBt=()=>({}),SBt=_s,wBt=()=>({}),EBt=()=>[],_Bt=_s,CBt=_s,kBt=_s,RBt=_s,ABt=()=>new xDe,IBt=()=>new yDe,Py=$o,Ire=$o,Pre=$o,dM=$o,PBt=$o,MBt=$o,OBt=$o,NBt=$o,DBt=$o,Mre=async()=>({stat:$o,readFile:$o,close:$o,read:$o,write:$o}),qj=async r=>r,LBt=()=>({on:_s,stdout:{on:_s},stderr:{on:_s},kill:_s}),FBt=(r,e)=>e?.(null,"",""),UBt=()=>"",$Bt=(r,e,t)=>{typeof e=="function"?e(null,"",""):t?.(null,"","")},BBt=()=>"",zBt="browser",jBt=()=>"/",GBt=()=>"/tmp",VBt=()=>"browser",qBt=()=>[{}],HBt=()=>0,WBt=()=>0,KBt=()=>"Browser",JBt=()=>"wasm",YBt=()=>"0",XBt=()=>({}),ZBt=()=>({}),QBt=()=>({}),ezt=()=>({}),tzt=()=>new Uint8Array,rzt=()=>new Uint8Array,nzt=()=>new Uint8Array,ozt=()=>new Uint8Array,szt=(r,e)=>e?.(null,r),izt=(r,e)=>e?.(null,r),azt=()=>({}),czt=()=>({}),lzt=_s,uzt={},dzt=()=>()=>({}),pzt=[],mzt=()=>!1,fzt=r=>({pathname:r||"",hostname:"",protocol:"",search:"",hash:""}),gzt=()=>"",hzt=globalThis.URL,yzt=globalThis.URLSearchParams,xzt=r=>typeof r=="string"?r.replace("file://",""):r,bzt=r=>new globalThis.URL("file://"+r),vzt=(r,e)=>{e&&(r.super_=e,Object.setPrototypeOf(r.prototype,e.prototype))},Tzt=r=>(...e)=>new Promise((t,n)=>r(...e,(o,s)=>o?n(o):t(s))),bDe=r=>{let e=(...t)=>{};return e.enabled=!1,e},Szt=bDe,Hj=r=>{try{return JSON.stringify(r,null,2)}catch{return String(r)}};Hj.custom=Symbol.for("nodejs.util.inspect.custom");Hj.colors={};Hj.styles={};wzt=r=>r,Ezt=r=>(...e)=>{let t=e.pop();r(...e).then(n=>t(null,n)).catch(t)},_zt=(r,e)=>JSON.stringify(r)===JSON.stringify(e),Czt=r=>String(r),kzt={isPromise:r=>r instanceof Promise,isDate:r=>r instanceof Date,isRegExp:r=>r instanceof RegExp,isNativeError:r=>r instanceof Error,isArrayBuffer:r=>r instanceof ArrayBuffer,isTypedArray:r=>ArrayBuffer.isView(r),isUint8Array:r=>r instanceof Uint8Array,isProxy:()=>!1},vDe=globalThis.TextDecoder,Vj=globalThis.TextEncoder,Rzt=(r,e)=>e?.(null,"127.0.0.1",4),Azt=class{},Izt=globalThis.performance||{now:()=>Date.now()},Pzt=class{observe(){}disconnect(){}},Mzt=()=>({enable:_s,disable:_s,percentile:()=>0}),Ozt=()=>({}),Nzt=class{},Dzt=()=>!1,Lzt=()=>new Uint8Array,Fzt=_s,Uzt=class{},$zt=!0,Bzt=null,zzt=null,jzt=()=>({}),Gzt=class{},Vzt=class{},qzt=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 Vj().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 Vj().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 vDe().decode(this)}},Hzt={F_OK:0,R_OK:4,W_OK:2,X_OK:1},Wzt=()=>!1,Kzt=()=>!1,Jzt=()=>0,Yzt=class{},Xzt=class{},Zzt=async()=>new ArrayBuffer(0),TDe=r=>({[Symbol.toPrimitive](){return r},ref(){return this},unref(){return this},hasRef(){return!1},refresh(){return this},close(){}}),Qzt=(...r)=>TDe(globalThis.setTimeout(...r)),ejt=globalThis.clearTimeout,tjt=(...r)=>TDe(globalThis.setInterval(...r)),rjt=globalThis.clearInterval,njt=class{constructor(r){this.type=r}toString(){return this.type}}});var Dre={};te(Dre,{Agent:()=>Nre,BedrockClient:()=>sjt,BedrockRuntimeClient:()=>ajt,Blob:()=>Gjt,Client:()=>qjt,ConverseCommand:()=>cjt,ConverseStreamCommand:()=>ljt,Cron:()=>Cjt,Dispatcher:()=>Hjt,File:()=>jjt,FlowProducer:()=>_jt,FormData:()=>zjt,GoogleAuth:()=>fjt,HTTPException:()=>Ojt,Headers:()=>Bjt,Hippocampus:()=>xjt,HippocampusConfig:()=>bjt,Hono:()=>Pjt,ImageFormat:()=>ujt,InvokeEndpointCommand:()=>pjt,InvokeEndpointWithResponseStreamCommand:()=>mjt,Job:()=>wjt,ListFoundationModelsCommand:()=>ijt,MockAgent:()=>Kjt,Pool:()=>Vjt,Queue:()=>Tjt,QueueScheduler:()=>Ejt,Request:()=>Ujt,Response:()=>$jt,SageMakerRuntimeClient:()=>djt,TextToSpeechClient:()=>hjt,VertexAI:()=>gjt,Webhook:()=>yjt,Worker:()=>Sjt,convertToHtml:()=>Ijt,cors:()=>Mjt,createClient:()=>vjt,default:()=>ojt,extractRawText:()=>Ajt,fetch:()=>Ore,getGlobalDispatcher:()=>Rv,interceptors:()=>Av,logger:()=>Njt,parseBuffer:()=>kjt,request:()=>Iv,secureHeaders:()=>Djt,selectCover:()=>Rjt,setGlobalDispatcher:()=>Wjt,streamSSE:()=>Ljt,timeout:()=>Fjt});var i_,Ri,ojt,sjt,ijt,ajt,cjt,ljt,ujt,djt,pjt,mjt,fjt,gjt,hjt,yjt,xjt,bjt,vjt,Tjt,Sjt,wjt,Ejt,_jt,Cjt,kjt,Rjt,Ajt,Ijt,Pjt,Mjt,Ojt,Njt,Djt,Ljt,Fjt,Ore,Ujt,$jt,Bjt,zjt,jjt,Gjt,Nre,Vjt,qjt,Hjt,Wjt,Rv,Kjt,Av,Iv,a_=C(()=>{i_={get(r,e){return e==="__esModule"?!0:e==="default"?new Proxy({},{get:i_.get}):new Proxy(function(...t){return new Proxy({},{get:i_.get})},{get:i_.get,apply(t,n,o){return new Proxy({},{get:i_.get})},construct(t,n){return new Proxy({},{get:i_.get})}})}},Ri=new Proxy({},i_),ojt=Ri,{BedrockClient:sjt,ListFoundationModelsCommand:ijt,BedrockRuntimeClient:ajt,ConverseCommand:cjt,ConverseStreamCommand:ljt,ImageFormat:ujt}=Ri,{SageMakerRuntimeClient:djt,InvokeEndpointCommand:pjt,InvokeEndpointWithResponseStreamCommand:mjt}=Ri,{GoogleAuth:fjt,VertexAI:gjt,TextToSpeechClient:hjt}=Ri,{Webhook:yjt}=Ri,{Hippocampus:xjt,HippocampusConfig:bjt}=Ri,{createClient:vjt}=Ri,{Queue:Tjt,Worker:Sjt,Job:wjt,QueueScheduler:Ejt,FlowProducer:_jt}=Ri,{Cron:Cjt}=Ri,{parseBuffer:kjt,selectCover:Rjt}=Ri,{extractRawText:Ajt,convertToHtml:Ijt}=Ri,{Hono:Pjt}=Ri,{cors:Mjt,HTTPException:Ojt,logger:Njt,secureHeaders:Djt,streamSSE:Ljt,timeout:Fjt}=Ri,Ore=globalThis.fetch,Ujt=globalThis.Request,$jt=globalThis.Response,Bjt=globalThis.Headers,zjt=globalThis.FormData,jjt=globalThis.File,Gjt=globalThis.Blob,Nre=Ri.Agent,Vjt=Ri.Pool,qjt=Ri.Client,Hjt=Ri.Dispatcher,Wjt=()=>{},Rv=()=>Ri,Kjt=Ri.MockAgent,Av={redirect:()=>r=>r,retry:()=>r=>r},Iv=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 pM={};te(pM,{AsyncLocalStorage:()=>pGt,Buffer:()=>oqt,Channel:()=>WVt,DatabaseSync:()=>nqt,Duplex:()=>fGt,EventEmitter:()=>dGt,Http2ServerRequest:()=>lqt,Http2ServerResponse:()=>uqt,Interface:()=>rqt,MIMEType:()=>hqt,PassThrough:()=>gGt,PerformanceObserver:()=>VVt,Readable:()=>SDe,ReadableStream:()=>hGt,Resolver:()=>jVt,TextDecoder:()=>_De,TextEncoder:()=>Wj,Transform:()=>mGt,URL:()=>AVt,URLSearchParams:()=>IVt,Worker:()=>XVt,Writable:()=>wDe,access:()=>VGt,appendFile:()=>wGt,appendFileSync:()=>Zjt,arch:()=>cVt,arrayBuffer:()=>dqt,basename:()=>oGt,builtinModules:()=>_Vt,callbackify:()=>FVt,channel:()=>HVt,chmodSync:()=>SGt,clearInterval:()=>gqt,clearTimeout:()=>mqt,closeSync:()=>kGt,connect:()=>pVt,constants:()=>sqt,copyFileSync:()=>_Gt,cpSync:()=>Qjt,cpus:()=>oVt,createConnection:()=>mVt,createGunzip:()=>vVt,createGzip:()=>TVt,createHash:()=>Xa,createHmac:()=>Lre,createInterface:()=>tqt,createReadStream:()=>FGt,createRequire:()=>EVt,createServer:()=>eGt,createWriteStream:()=>LGt,debug:()=>DVt,debuglog:()=>EDe,default:()=>Jjt,deflateSync:()=>gVt,deprecate:()=>LVt,deserialize:()=>YVt,dirname:()=>nGt,exec:()=>YGt,execFile:()=>ZGt,execFileSync:()=>QGt,execSync:()=>XGt,existsSync:()=>bGt,extname:()=>sGt,fileURLToPath:()=>PVt,finished:()=>xGt,format:()=>RVt,freemem:()=>sVt,fstatSync:()=>RGt,get:()=>dVt,gunzip:()=>bVt,gunzipSync:()=>hVt,gzip:()=>xVt,gzipSync:()=>yVt,hasSubscribers:()=>KVt,homedir:()=>tVt,hostname:()=>nVt,inflateSync:()=>fVt,inherits:()=>OVt,inspect:()=>Kj,isAbsolute:()=>aGt,isBuiltin:()=>CVt,isDeepStrictEqual:()=>UVt,isIP:()=>cqt,isIPv4:()=>aqt,isIPv6:()=>iqt,isMainThread:()=>ZVt,join:()=>tGt,lookup:()=>zVt,mkdir:()=>BGt,mkdirSync:()=>AGt,monitorEventLoopDelay:()=>qVt,normalize:()=>uGt,ok:()=>SVt,open:()=>WGt,openSync:()=>CGt,parentPort:()=>QVt,parse:()=>kVt,pathToFileURL:()=>MVt,performance:()=>GVt,pipeline:()=>yGt,platform:()=>eVt,posix:()=>lGt,promises:()=>Yjt,promisify:()=>NVt,randomBytes:()=>Pm,randomUUID:()=>We,readFile:()=>UGt,readFileSync:()=>vGt,readdir:()=>jGt,readdirSync:()=>PGt,realpath:()=>KGt,realpathSync:()=>EGt,relative:()=>iGt,release:()=>lVt,rename:()=>qGt,renameSync:()=>OGt,request:()=>uVt,resolve:()=>rGt,rm:()=>HGt,rmSync:()=>DGt,rmdirSync:()=>NGt,sep:()=>cGt,serialize:()=>JVt,setInterval:()=>fqt,setTimeout:()=>pqt,spawn:()=>JGt,stat:()=>zGt,statSync:()=>IGt,strict:()=>wVt,tmpdir:()=>rVt,toUSVString:()=>$Vt,totalmem:()=>iVt,type:()=>aVt,types:()=>BVt,unlink:()=>GGt,unlinkSync:()=>MGt,webcrypto:()=>Xjt,workerData:()=>eqt,writeFile:()=>$Gt,writeFileSync:()=>TGt});var Cs,Bo,Jjt,Yjt,Xa,Lre,Pm,We,Xjt,Zjt,Qjt,eGt,tGt,rGt,nGt,oGt,sGt,iGt,aGt,cGt,lGt,uGt,dGt,pGt,SDe,wDe,mGt,fGt,gGt,hGt,yGt,xGt,bGt,vGt,TGt,SGt,wGt,EGt,_Gt,CGt,kGt,RGt,AGt,IGt,PGt,MGt,OGt,NGt,DGt,LGt,FGt,UGt,$Gt,BGt,zGt,jGt,GGt,VGt,qGt,HGt,WGt,KGt,JGt,YGt,XGt,ZGt,QGt,eVt,tVt,rVt,nVt,oVt,sVt,iVt,aVt,cVt,lVt,uVt,dVt,pVt,mVt,fVt,gVt,hVt,yVt,xVt,bVt,vVt,TVt,SVt,wVt,EVt,_Vt,CVt,kVt,RVt,AVt,IVt,PVt,MVt,OVt,NVt,EDe,DVt,Kj,LVt,FVt,UVt,$Vt,BVt,_De,Wj,zVt,jVt,GVt,VVt,qVt,HVt,WVt,KVt,JVt,YVt,XVt,ZVt,QVt,eqt,tqt,rqt,nqt,oqt,sqt,iqt,aqt,cqt,lqt,uqt,dqt,CDe,pqt,mqt,fqt,gqt,hqt,yr=C(()=>{Cs=()=>{},Bo=async()=>{},Jjt={},Yjt={readFile:Bo,writeFile:Bo,mkdir:Bo,stat:Bo,readdir:Bo,unlink:Bo,access:Bo,rm:Bo,rename:Bo},Xa=r=>{let e=[];return{update(t){return e.push(typeof t=="string"?new Wj().encode(t):t),this},digest(t){let n=0;for(let s of e)for(let i=0;i<s.length;i++)n=(n<<5)-n+s[i]|0;let o=(n>>>0).toString(16).padStart(8,"0");return t==="hex"?o:t==="base64"?btoa(o):o}}},Lre=(r,e)=>Xa(r),Pm=r=>new Uint8Array(r||32),We=()=>globalThis.crypto?.randomUUID?.()||Math.random().toString(36),Xjt=globalThis.crypto,Zjt=()=>{throw new Error("[NeuroLink:browser] fs.appendFileSync is not supported in browser runtime \u2014 use server-side execution")},Qjt=()=>{throw new Error("[NeuroLink:browser] fs.cpSync is not supported in browser runtime \u2014 use server-side execution")},eGt=()=>({listen:Cs,close:Cs,on:Cs}),tGt=(...r)=>r.join("/"),rGt=(...r)=>r.join("/"),nGt=r=>r||"",oGt=r=>r?.split?.("/")?.pop?.()||"",sGt=r=>{let e=r?.match?.(/\.[^.]+$/);return e?e[0]:""},iGt=(r,e)=>e||"",aGt=()=>!1,cGt="/",lGt={normalize:r=>r,join:(...r)=>r.join("/"),resolve:(...r)=>r.join("/"),sep:"/"},uGt=r=>r,dGt=class{on(){return this}off(){return this}emit(){return this}once(){return this}removeListener(){return this}addListener(){return this}},pGt=class{getStore(){}run(r,e,...t){return e(...t)}enterWith(){}disable(){}},SDe=class{pipe(){return this}on(){return this}read(){return null}push(){}destroy(){}},wDe=class{write(){return!0}end(){}on(){return this}destroy(){}},mGt=class{push(){}on(){return this}},fGt=class{on(){return this}},gGt=class{pipe(){return this}on(){return this}},hGt=globalThis.ReadableStream||class{},yGt=Cs,xGt=Cs,bGt=()=>!1,vGt=()=>"",TGt=Cs,SGt=Cs,wGt=Bo,EGt=r=>r,_Gt=Cs,CGt=()=>0,kGt=Cs,RGt=()=>({}),AGt=Cs,IGt=()=>({}),PGt=()=>[],MGt=Cs,OGt=Cs,NGt=Cs,DGt=Cs,LGt=()=>new wDe,FGt=()=>new SDe,UGt=Bo,$Gt=Bo,BGt=Bo,zGt=Bo,jGt=Bo,GGt=Bo,VGt=Bo,qGt=Bo,HGt=Bo,WGt=async()=>({stat:Bo,readFile:Bo,close:Bo,read:Bo,write:Bo}),KGt=async r=>r,JGt=()=>({on:Cs,stdout:{on:Cs},stderr:{on:Cs},kill:Cs}),YGt=(r,e)=>e?.(null,"",""),XGt=()=>"",ZGt=(r,e,t)=>{typeof e=="function"?e(null,"",""):t?.(null,"","")},QGt=()=>"",eVt="browser",tVt=()=>"/",rVt=()=>"/tmp",nVt=()=>"browser",oVt=()=>[{}],sVt=()=>0,iVt=()=>0,aVt=()=>"Browser",cVt=()=>"wasm",lVt=()=>"0",uVt=()=>({}),dVt=()=>({}),pVt=()=>({}),mVt=()=>({}),fVt=()=>new Uint8Array,gVt=()=>new Uint8Array,hVt=()=>new Uint8Array,yVt=()=>new Uint8Array,xVt=(r,e)=>e?.(null,r),bVt=(r,e)=>e?.(null,r),vVt=()=>({}),TVt=()=>({}),SVt=Cs,wVt={},EVt=()=>()=>({}),_Vt=[],CVt=()=>!1,kVt=r=>({pathname:r||"",hostname:"",protocol:"",search:"",hash:""}),RVt=()=>"",AVt=globalThis.URL,IVt=globalThis.URLSearchParams,PVt=r=>typeof r=="string"?r.replace("file://",""):r,MVt=r=>new globalThis.URL("file://"+r),OVt=(r,e)=>{e&&(r.super_=e,Object.setPrototypeOf(r.prototype,e.prototype))},NVt=r=>(...e)=>new Promise((t,n)=>r(...e,(o,s)=>o?n(o):t(s))),EDe=r=>{let e=(...t)=>{};return e.enabled=!1,e},DVt=EDe,Kj=r=>{try{return JSON.stringify(r,null,2)}catch{return String(r)}};Kj.custom=Symbol.for("nodejs.util.inspect.custom");Kj.colors={};Kj.styles={};LVt=r=>r,FVt=r=>(...e)=>{let t=e.pop();r(...e).then(n=>t(null,n)).catch(t)},UVt=(r,e)=>JSON.stringify(r)===JSON.stringify(e),$Vt=r=>String(r),BVt={isPromise:r=>r instanceof Promise,isDate:r=>r instanceof Date,isRegExp:r=>r instanceof RegExp,isNativeError:r=>r instanceof Error,isArrayBuffer:r=>r instanceof ArrayBuffer,isTypedArray:r=>ArrayBuffer.isView(r),isUint8Array:r=>r instanceof Uint8Array,isProxy:()=>!1},_De=globalThis.TextDecoder,Wj=globalThis.TextEncoder,zVt=(r,e)=>e?.(null,"127.0.0.1",4),jVt=class{},GVt=globalThis.performance||{now:()=>Date.now()},VVt=class{observe(){}disconnect(){}},qVt=()=>({enable:Cs,disable:Cs,percentile:()=>0}),HVt=()=>({}),WVt=class{},KVt=()=>!1,JVt=()=>new Uint8Array,YVt=Cs,XVt=class{},ZVt=!0,QVt=null,eqt=null,tqt=()=>({}),rqt=class{},nqt=class{},oqt=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 Wj().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 Wj().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 _De().decode(this)}},sqt={F_OK:0,R_OK:4,W_OK:2,X_OK:1},iqt=()=>!1,aqt=()=>!1,cqt=()=>0,lqt=class{},uqt=class{},dqt=async()=>new ArrayBuffer(0),CDe=r=>({[Symbol.toPrimitive](){return r},ref(){return this},unref(){return this},hasRef(){return!1},refresh(){return this},close(){}}),pqt=(...r)=>CDe(globalThis.setTimeout(...r)),mqt=globalThis.clearTimeout,fqt=(...r)=>CDe(globalThis.setInterval(...r)),gqt=globalThis.clearInterval,hqt=class{constructor(r){this.type=r}toString(){return this.type}}});function ss(r,e=500){return r&&r.slice(0,e).replace(bqt,"***")}function Mm(r){if(typeof r=="string")return r;try{return JSON.stringify(r)??String(r)}catch{return"[content too large to serialize]"}}function c_(r,e=1e4){try{let t=JSON.stringify(r);return t===void 0?String(r):t.length>e?`${t.slice(0,e)}\u2026[truncated ${t.length-e} chars]`:t}catch(t){return`[unserializable: ${t instanceof Error?t.message:String(t)}]`}}function lr(r){return r.replace(/\/\/[^/\s"'<>]*@/g,"//***@").replace(/\/\/(?:(?!\/\/)[^\s"'<>])*@/g,"//***@")}function Za(r){let e=t=>t.length>200?`${t.slice(0,200)}\u2026`:t;try{let t=new URL(r);return e(`${t.protocol}//${t.host}${t.pathname}`)}catch{let t=r.split(/[?#]/)[0];return e(lr(t))}}function wqt(r){Sqt.forEach(e=>r.searchParams.delete(e))}function Eqt(r){let e=[],t=[];for(let[o,s]of r.searchParams.entries())Tqt.includes(o.toLowerCase())&&(e.push(`${o.toLowerCase()}=${s}`),t.push(o));return e.length===0?"":(t.forEach(o=>r.searchParams.delete(o)),e.sort(),`\0auth=${Xa("sha256").update(e.join("&")).digest("hex").slice(0,16)}`)}function Jj(r){try{let e=new URL(r);wqt(e);let t=Eqt(e);return e.toString()+t}catch{return r}}function Fre(r){return r.replace(/[a-zA-Z][a-zA-Z0-9+.-]*:\/\/[^\s"'<>)]+/g,e=>Za(e))}function Ure(r,e){let t=qs(e);return r.split(dd(e)).join(t).split(e).join(t)}function My(r,e){let t=s=>{let i=Fre(s);return e?.filePath?Ure(i,e.filePath):i};if(!(r instanceof Error))return new Error(t(String(r)));let n=new Error(t(r.message));n.name=r.name;let o=r.code;return o!==void 0&&(n.code=o),n}function l_(r,e=1e3){let t=new WeakSet,n=o=>{if(o==null)return o;if(typeof o=="string")return ss(o,e);if(typeof o!="object")return o;if(t.has(o))return"[Circular]";if(t.add(o),Array.isArray(o))return o.map(n);let s={};for(let[i,a]of Object.entries(o))vqt.some(c=>c.toLowerCase()===i.toLowerCase())?s[i]="***":s[i]=n(a);return s};return n(r)}var yqt,xqt,bqt,vqt,Tqt,Sqt,mn=C(()=>{"use strict";yr();dn();yqt=["sk","pk","r8","gsk","xai","tgp","fw","pplx","pa","jina","fish"],xqt=yqt.join("|"),bqt=new RegExp(`\\bBearer\\s+[A-Za-z0-9_\\-\\.]{8,}\\b|\\bToken\\s+[A-Za-z0-9_\\-\\.]{8,}\\b|\\bBasic\\s+[A-Za-z0-9+/=]{12,}\\b|\\b(?:${xqt})[_\\-][A-Za-z0-9_\\-\\.]{8,}\\b|\\b(?:api[_-]?key|access[_-]?token|secret[_-]?key|refresh[_-]?token)\\s*[:=]\\s*['"]?[^\\s,;'"&]+`,"gi"),vqt=["apikey","api_key","apiKey","access_token","accessToken","refresh_token","refreshToken","secret","secretkey","secret_key","secretKey","password","authorization","oauth","oauthToken","credentials","authContext","authToken","sessionToken","serviceAccountKey","secretAccessKey","userEmail"];Tqt=["token","signature","x-amz-signature","x-amz-credential","x-amz-security-token","awsaccesskeyid","expires","sig","se","sp","sr","sv","x-goog-signature","x-goog-credential","x-goog-algorithm","x-goog-date","x-goog-expires","x-goog-signedheaders"],Sqt=["utm_source","utm_medium","utm_campaign","utm_term","utm_content","fbclid","gclid","_ga"]});var _qt,$re,Yj,Bre=C(()=>{"use strict";H();kt();_qt={maxTokens:10,refillIntervalMs:1e3,tokensPerRefill:10,maxQueueSize:100,queueTimeoutMs:3e4},$re=class{tokens;config;queue=[];refillTimer=null;lastRefillTime;constructor(e={}){this.config={..._qt,...e},this.tokens=this.config.maxTokens,this.lastRefillTime=Date.now(),this.startRefillTimer()}startRefillTimer(){this.refillTimer||(this.refillTimer=setInterval(()=>{this.refillTokens(),this.processQueue()},this.config.refillIntervalMs),this.refillTimer.unref())}refillTokens(){let e=Date.now(),t=e-this.lastRefillTime,n=Math.floor(t/this.config.refillIntervalMs);if(n>0){let o=n*this.config.tokensPerRefill;this.tokens=Math.min(this.config.maxTokens,this.tokens+o),this.lastRefillTime=e}}processQueue(){let e=Date.now();for(;this.queue.length>0;){let t=this.queue[0];if(e-t.timestamp>this.config.queueTimeoutMs)this.queue.shift(),t.timeoutTimer&&clearTimeout(t.timeoutTimer),t.reject(de.rateLimiterQueueTimeout(this.config.queueTimeoutMs));else break}for(;this.tokens>0&&this.queue.length>0;){let t=this.queue.shift();t&&(t.timeoutTimer&&clearTimeout(t.timeoutTimer),this.tokens--,t.resolve())}}async acquire(){if(this.refillTokens(),this.tokens>0){this.tokens--;return}if(this.queue.length>=this.config.maxQueueSize)throw g.warn(`Rate limiter queue full (${this.config.maxQueueSize} requests pending)`),de.rateLimiterQueueFull(this.config.maxQueueSize);return new Promise((e,t)=>{let n=setTimeout(()=>{let o=this.queue.findIndex(s=>s.timeoutTimer===n);o!==-1&&(this.queue.splice(o,1),t(de.rateLimiterQueueTimeout(this.config.queueTimeoutMs)))},this.config.queueTimeoutMs);this.queue.push({resolve:e,reject:t,timestamp:Date.now(),timeoutTimer:n})})}getStats(){return{availableTokens:this.tokens,queueLength:this.queue.length,maxTokens:this.config.maxTokens,maxQueueSize:this.config.maxQueueSize}}reset(){for(this.tokens=this.config.maxTokens,this.lastRefillTime=Date.now();this.queue.length>0;){let e=this.queue.shift();e&&(e.timeoutTimer&&clearTimeout(e.timeoutTimer),e.reject(de.rateLimiterReset()))}}stop(){this.refillTimer&&(clearInterval(this.refillTimer),this.refillTimer=null),this.reset()}},Yj=new $re({maxTokens:10,refillIntervalMs:1e3,tokensPerRefill:10,maxQueueSize:100,queueTimeoutMs:3e4})});function Hre(r,e=Ta.DEFAULT_INITIAL_DELAY,t=Ta.DEFAULT_BACKOFF_MULTIPLIER,n=Ta.DEFAULT_MAX_DELAY,o=!0){let s=e*Math.pow(t,r-1),i=Math.min(s,n),a=o?Math.random()*Math.min(i*.1,1e3):0;return i+a}function Wre(r){return new Promise(e=>setTimeout(e,r))}async function kDe(r,e={}){let t={...Cqt,...e},n;for(let o=1;o<=t.maxAttempts;o++)try{return await r()}catch(s){if(n=s,o===t.maxAttempts||!t.retryCondition(s))break;t.onRetry(o,s);let i=Hre(o,t.initialDelay,t.backoffMultiplier,t.maxDelay,!0);await Wre(i)}throw n}var zre,jre,Cqt,Gre,Vre,qre,LPn,FPn,UPn,Kre=C(()=>{"use strict";H();ki();zre=class extends Error{constructor(t,n){super(t);this.cause=n;this.name="NetworkError"}cause},jre=class extends Error{constructor(t,n){super(t);this.cause=n;this.name="TemporaryError"}cause},Cqt={maxAttempts:Ta.DEFAULT_RETRY_ATTEMPTS,initialDelay:Ta.DEFAULT_INITIAL_DELAY,maxDelay:Ta.DEFAULT_MAX_DELAY,backoffMultiplier:Ta.DEFAULT_BACKOFF_MULTIPLIER,retryCondition:r=>{if(r instanceof zre||r instanceof jre||r&&typeof r=="object"&&(r.name==="TimeoutError"||r.code==="TIMEOUT")||r&&typeof r=="object"&&(r.code==="ECONNRESET"||r.code==="ENOTFOUND"||r.code==="ECONNREFUSED"||r.code==="ETIMEDOUT"))return!0;if(r&&typeof r=="object"&&r.status){let e=Number(r.status);return e>=500||e===429||e===408}return!1},onRetry:(r,e)=>{let t=e instanceof Error?e.message:String(e);g.warn(`\u26A0\uFE0F Retry attempt ${r}: ${t}`)}};Gre=class{constructor(e=5,t=6e4,n=6e5){this.threshold=e;this.timeout=t;this.monitorWindow=n}threshold;timeout;monitorWindow;failures=0;lastFailureTime=0;state="closed";async execute(e){if(this.state==="open")if(Date.now()-this.lastFailureTime>this.timeout)this.state="half-open";else throw new Error("Circuit breaker is open - operation rejected");try{let t=await e();return this.onSuccess(),t}catch(t){throw this.onFailure(),t}}onSuccess(){this.failures=0,this.state="closed"}onFailure(){this.failures++,this.lastFailureTime=Date.now(),this.failures>=this.threshold&&(this.state="open")}getState(){return this.state}reset(){this.failures=0,this.lastFailureTime=0,this.state="closed"}},Vre=class{constructor(e,t){this.maxRequests=e;this.windowMs=t}maxRequests;windowMs;requests=[];async acquire(){let e=Date.now();if(this.requests=this.requests.filter(t=>e-t<this.windowMs),this.requests.length>=this.maxRequests){let t=Math.min(...this.requests),n=this.windowMs-(e-t);if(n>0)return await Wre(n),this.acquire()}this.requests.push(e)}},qre=class{operations=new Set;shutdownPromise=null;track(e){return this.operations.add(e),e.finally(()=>{this.operations.delete(e)}),e}async shutdown(e=3e4){return this.shutdownPromise?this.shutdownPromise:(this.shutdownPromise=this.performShutdown(e),this.shutdownPromise)}async performShutdown(e){g.debug(`\u{1F504} Graceful shutdown: waiting for ${this.operations.size} operations...`);try{await Promise.race([Promise.all(this.operations),Wre(e).then(()=>{throw new Error(`Shutdown timeout: ${this.operations.size} operations still running`)})]),g.debug("\u2705 Graceful shutdown completed")}catch(t){g.warn(`\u26A0\uFE0F Shutdown warning: ${t instanceof Error?t.message:String(t)}`)}}},LPn=new qre,FPn=new Gre(3,3e4),UPn=new Vre(100,6e4)});var Jc,ig,Oy,Xj,RDe,Ai,Jre=C(()=>{"use strict";Jc={IMAGE_MAX_MB:10,PDF_MAX_MB:100,DOCUMENT_MAX_MB:100,WORD_MAX_MB:100,TEXT_MAX_MB:50,CSV_MAX_MB:50,EXCEL_MAX_MB:100,SOURCE_CODE_MAX_MB:20,JSON_MAX_MB:20,YAML_MAX_MB:20,XML_MAX_MB:20,VIDEO_MAX_MB:500,AUDIO_MAX_MB:500,ARCHIVE_MAX_MB:200,GENERAL_MAX_MB:200},ig={IMAGE_MAX:10*1024*1024,PDF_MAX:100*1024*1024,DOCUMENT_MAX:100*1024*1024,WORD_MAX:100*1024*1024,TEXT_MAX:50*1024*1024,CSV_MAX:50*1024*1024,EXCEL_MAX:100*1024*1024,SOURCE_CODE_MAX:20*1024*1024,JSON_MAX:20*1024*1024,YAML_MAX:20*1024*1024,XML_MAX:20*1024*1024,VIDEO_MAX:500*1024*1024,AUDIO_MAX:500*1024*1024,ARCHIVE_MAX:200*1024*1024,GENERAL_MAX:200*1024*1024},Oy={MAX_SOURCE_CODE_LINES:1e4,MAX_TEXT_LINES:1e4,MAX_TEXT_LENGTH:1e6,MAX_CSV_ROWS:1e4,MAX_EXCEL_ROWS:5e3,MAX_EXCEL_SHEETS:10,MAX_PDF_PAGES:100,MAX_OBJECT_DEPTH:50,MAX_ARRAY_LENGTH:1e4},Xj={MAX_DECOMPRESSED_SIZE:100*1024*1024,MAX_COMPRESSION_RATIO:100,MAX_ENTRIES:1e3,MAX_NESTING_DEPTH:5},RDe={MAX_ALIAS_COUNT:100,MAX_DOCUMENTS:10,MAX_ANCHORS:100},Ai={IMAGE_MAX_MB:Jc.IMAGE_MAX_MB,PDF_MAX_MB:Jc.PDF_MAX_MB,DOCUMENT_MAX_MB:Jc.DOCUMENT_MAX_MB,WORD_MAX_MB:Jc.WORD_MAX_MB,TEXT_MAX_MB:Jc.TEXT_MAX_MB,CSV_MAX_MB:Jc.CSV_MAX_MB,EXCEL_MAX_MB:Jc.EXCEL_MAX_MB,SOURCE_CODE_MAX_MB:Jc.SOURCE_CODE_MAX_MB,MAX_FILE_SIZE:ig.GENERAL_MAX,MAX_IMAGE_SIZE:ig.IMAGE_MAX,MAX_TEXT_SIZE:ig.TEXT_MAX,MAX_SOURCE_CODE_LINES:Oy.MAX_SOURCE_CODE_LINES,MAX_TEXT_LINES:Oy.MAX_TEXT_LINES,MAX_TEXT_LENGTH:Oy.MAX_TEXT_LENGTH,MAX_CSV_ROWS:Oy.MAX_CSV_ROWS,EXCEL_MAX_ROWS:Oy.MAX_EXCEL_ROWS,EXCEL_MAX_SHEETS:Oy.MAX_EXCEL_SHEETS,MAX_PDF_PAGES:Oy.MAX_PDF_PAGES,MAX_DECOMPRESSED_SIZE:Xj.MAX_DECOMPRESSED_SIZE,MAX_COMPRESSION_RATIO:Xj.MAX_COMPRESSION_RATIO,MAX_ZIP_ENTRIES:Xj.MAX_ENTRIES,YAML_MAX_ALIAS_COUNT:RDe.MAX_ALIAS_COUNT}});function Zj(r){return Yre||(Yre=new Xre(r)),Yre}var Xre,Yre,Zre=C(()=>{"use strict";yr();H();mn();Xre=class{cache=new Map;contentHashIndex=new Map;maxSize;ttlMs;maxImageSize;enabled;stats={hits:0,misses:0,evictions:0,expirations:0,totalRequests:0};constructor(e={}){let t=process.env.NEUROLINK_IMAGE_CACHE_ENABLED,n=process.env.NEUROLINK_IMAGE_CACHE_SIZE,o=process.env.NEUROLINK_IMAGE_CACHE_TTL_MS,s=process.env.NEUROLINK_IMAGE_MAX_SIZE;this.enabled=t!==void 0?t.toLowerCase()==="true":!1,this.maxSize=this.parseConfigValue(n,e.maxSize,100,1,1e3),this.ttlMs=this.parseConfigValue(o,e.ttlMs,1800*1e3,1e3,1440*60*1e3),this.maxImageSize=this.parseConfigValue(s,e.maxImageSize,10*1024*1024,1024,100*1024*1024),g.debug("ImageCache initialized",{enabled:this.enabled,maxSize:this.maxSize,ttlMs:this.ttlMs,maxImageSize:this.maxImageSize})}parseConfigValue(e,t,n,o,s){let i;if(e!==void 0){let a=parseInt(e,10);i=isNaN(a)?n:a}else t!==void 0?i=t:i=n;return i<o?(g.warn(`Cache config value ${i} below minimum ${o}, using min`),o):i>s?(g.warn(`Cache config value ${i} above maximum ${s}, using max`),s):i}normalizeUrl(e){return Jj(e)}generateContentHash(e){let t=typeof e=="string"?Buffer.from(e,"base64"):e;return Xa("sha256").update(t).digest("hex").substring(0,16)}isExpired(e){return Date.now()-e.createdAt>this.ttlMs}isEnabled(){return this.enabled}get(e){if(!this.enabled)return null;this.stats.totalRequests++;let t=this.normalizeUrl(e),n=this.cache.get(t);return n?this.isExpired(n)?(this.stats.expirations++,this.delete(t),g.debug("Image cache entry expired",{url:Za(t)}),null):(n.lastAccessedAt=Date.now(),n.accessCount++,this.cache.delete(t),this.cache.set(t,n),this.stats.hits++,g.debug("Image cache hit",{url:Za(t),accessCount:n.accessCount}),n):(this.stats.misses++,g.debug("Image cache miss",{url:Za(t)}),null)}getByContentHash(e){let t=this.contentHashIndex.get(e);if(!t)return null;let n=null;for(let o of[...t]){let s=this.cache.get(o);if(!s){t.delete(o);continue}if(this.isExpired(s)){this.cache.delete(o),t.delete(o);continue}n===null&&(n=o)}return t.size===0&&this.contentHashIndex.delete(e),n?this.get(n):null}set(e,t,n,o){if(!this.enabled){g.debug("Image caching disabled, skipping cache storage");return}let s=this.normalizeUrl(e),i=o.length;if(i>this.maxImageSize){g.debug("Image too large to cache",{url:Za(s),size:i,maxSize:this.maxImageSize});return}let a=this.generateContentHash(o),c=this.contentHashIndex.get(a);if(c)for(let p of c){if(p===s)continue;let f=this.cache.get(p);if(f&&!this.isExpired(f)){for(;this.cache.size>=this.maxSize&&this.cache.size>0;)this.evictOldest();this.cache.set(s,{...f});let h=this.contentHashIndex.get(a);h||(h=new Set,this.contentHashIndex.set(a,h)),h.add(s),g.debug("Image cache dedup hit",{newUrl:Za(s),existingUrl:Za(p)});return}}for(;this.cache.size>=this.maxSize;)this.evictOldest();let l=Date.now(),u={dataUri:t,contentType:n,size:i,contentHash:a,createdAt:l,lastAccessedAt:l,accessCount:1};this.cache.set(s,u);let d=this.contentHashIndex.get(a);d||(d=new Set,this.contentHashIndex.set(a,d)),d.add(s),g.debug("Image cached",{url:Za(s),size:i,contentHash:a.substring(0,8),cacheSize:this.cache.size})}delete(e){let t=this.normalizeUrl(e),n=this.cache.get(t);if(n){let o=this.contentHashIndex.get(n.contentHash);return o&&(o.delete(t),o.size===0&&this.contentHashIndex.delete(n.contentHash)),this.cache.delete(t),!0}return!1}evictOldest(){let e=this.cache.keys().next().value;if(e!==void 0){let t=this.cache.get(e);if(t){let n=this.contentHashIndex.get(t.contentHash);n&&(n.delete(e),n.size===0&&this.contentHashIndex.delete(t.contentHash))}this.cache.delete(e),this.stats.evictions++,g.debug("Image cache eviction",{url:Za(String(e))})}}evictExpired(){let e=0,t=Date.now();for(let[n,o]of this.cache.entries())t-o.createdAt>this.ttlMs&&(this.delete(n),e++,this.stats.expirations++);return e>0&&g.debug(`Evicted ${e} expired image cache entries`),e}clear(){let e=this.cache.size;this.cache.clear(),this.contentHashIndex.clear(),g.debug(`Image cache cleared (${e} entries removed)`)}getStats(){let e=0;for(let n of this.cache.values())e+=n.size;let t=this.stats.totalRequests>0?Number((this.stats.hits/this.stats.totalRequests*100).toFixed(2)):0;return{...this.stats,size:this.cache.size,totalBytes:e,hitRate:t}}has(e){let t=this.normalizeUrl(e),n=this.cache.get(t);return n!=null&&!this.isExpired(n)}getSize(){return this.cache.size}getConfig(){return{enabled:this.enabled,maxSize:this.maxSize,ttlMs:this.ttlMs,maxImageSize:this.maxImageSize}}},Yre=null});function Aqt(r){if(r&&typeof r=="object"){let e=r.code,t=r.name;if(Rqt.has(e||"")||t==="AbortError")return!0}if(r instanceof Error){let e=r.message,t=e.match(/HTTP (\d{3}):/);if(t){let n=parseInt(t[1],10);return n>=500||n===429||n===408}if(/\b(request timed out|operation timed out|connection timed out|timed out)\b/i.test(e)||/\bnetwork (error|failure|unreachable|down)\b/i.test(e))return!0}return!1}function Qre(r){if(r==="application/octet-stream")throw g.error("Unable to detect a supported image format from file content"),new Error("Unsupported or corrupted image: no known image signature (PNG/JPEG/GIF/WebP/BMP/TIFF/SVG/AVIF) was found in the file content.")}var ADe,kqt,Rqt,Pu,Iqt,Pqt,mM,Qj=C(()=>{"use strict";dn();H();mn();Bre();Kre();ki();Jre();Zre();kt();ADe=12,kqt={"image/png":67,"image/jpeg":125,"image/gif":43,"image/webp":20,"image/avif":100},Rqt=new Set(["ECONNRESET","ENOTFOUND","ECONNREFUSED","ETIMEDOUT","ERR_NETWORK"]);Pu=class r{static async process(e,t){let n=this.validateBufferNotEmpty(e);Qre(n);let o=r.safeBase64Convert(e,"image processing"),s=`data:${n};base64,${o}`;return this.validateProcessOutput(s,o,n),{type:"image",content:s,mimeType:n,metadata:{confidence:100,size:e.length}}}static hasStrictImageMagic(e,t){let n=e;switch(t){case"image/png":return n.length>=4&&n[0]===137&&n[1]===80&&n[2]===78&&n[3]===71;case"image/jpeg":return n.length>=3&&n[0]===255&&n[1]===216&&n[2]===255;case"image/gif":return n.length>=3&&n[0]===71&&n[1]===73&&n[2]===70;case"image/webp":return n.length>=12&&n.subarray(0,4).toString("latin1")==="RIFF"&&n.subarray(8,12).toString("latin1")==="WEBP";case"image/avif":return n.length>=12&&n.subarray(4,8).toString("latin1")==="ftyp"&&n.subarray(8,12).toString("latin1").startsWith("avif");default:return!1}}static validateBufferNotEmpty(e){if(e.length===0)throw g.error("Empty buffer provided"),de.imageBufferInvalid("Invalid image processing: buffer is empty");let t=this.detectImageType(e);if(t==="image/svg+xml")return t;if(e.length<ADe)throw de.imageBufferInvalid(`Invalid image processing: buffer too small (${e.length} bytes) \u2014 a minimum of ${ADe} bytes is required for a valid image.`);let n=kqt[t];if(n!==void 0&&e.length<n&&this.hasStrictImageMagic(e,t))throw de.imageBufferInvalid(`Invalid image processing: ${t} buffer is truncated (${e.length} bytes, minimum ${n} for a valid ${t}).`);return t}static validateProcessOutput(e,t,n){if(t.length===0)throw g.error("Empty base64 content generated"),new Error("Invalid image processing: base64 content is empty");if(!/^data:[^;]+;base64,[A-Za-z0-9+/]*={0,2}$/.test(e))throw g.error("Invalid data URI format generated",{dataUri:e}),new Error("Invalid data URI format: must be data:{mimeType};base64,{content}");if(!this.validateImageFormat(n))throw g.error("Invalid MIME type generated",{mediaType:n}),new Error(`Invalid MIME type: ${n} is not in allowed list`)}static processImageForOpenAI(e){try{return typeof e=="string"?e.startsWith("http")||e.startsWith("data:")?e:`data:image/jpeg;base64,${e}`:`data:image/jpeg;base64,${r.safeBase64Convert(e,"OpenAI image input")}`}catch(t){throw t instanceof Oe?t:(g.error("Failed to process image for OpenAI:",t),new Error(`Image processing failed for OpenAI: ${t instanceof Error?t.message:"Unknown error"}`,{cause:t}))}}static processImageForGoogle(e){try{let t,n="image/jpeg";if(typeof e=="string")if(e.startsWith("data:")){let o=e.match(/^data:([^;]+);base64,(.+)$/);o?(n=o[1],t=o[2]):t=e.split(",")[1]||e}else t=e;else t=r.safeBase64Convert(e,"provider image input");return{mimeType:n,data:t}}catch(t){throw t instanceof Oe?t:(g.error("Failed to process image for Google AI:",t),new Error(`Image processing failed for Google AI: ${t instanceof Error?t.message:"Unknown error"}`,{cause:t}))}}static processImageForAnthropic(e){try{let t,n="image/jpeg";if(typeof e=="string")if(e.startsWith("data:")){let o=e.match(/^data:([^;]+);base64,(.+)$/);o?(n=o[1],t=o[2]):t=e.split(",")[1]||e}else t=e;else t=r.safeBase64Convert(e,"provider image input");return{mediaType:n,data:t}}catch(t){throw t instanceof Oe?t:(g.error("Failed to process image for Anthropic:",t),new Error(`Image processing failed for Anthropic: ${t instanceof Error?t.message:"Unknown error"}`,{cause:t}))}}static processImageForVertex(e,t){try{return t.includes("gemini")?r.processImageForGoogle(e):t.includes("claude")?r.processImageForAnthropic(e):r.processImageForGoogle(e)}catch(n){throw n instanceof Oe?n:(g.error("Failed to process image for Vertex AI:",n),new Error(`Image processing failed for Vertex AI: ${n instanceof Error?n.message:"Unknown error"}`,{cause:n}))}}static detectImageType(e){try{if(typeof e=="string"){if(e.startsWith("data:")){let o=e.match(/^data:([^;]+);/);return o?o[1]:"image/jpeg"}let t=e.toLowerCase().split(".").pop();return{jpg:"image/jpeg",jpeg:"image/jpeg",png:"image/png",gif:"image/gif",webp:"image/webp",bmp:"image/bmp",tiff:"image/tiff",tif:"image/tiff",svg:"image/svg+xml",avif:"image/avif"}[t||""]||"image/jpeg"}if(e.length>=4){let t=e.subarray(0,4);if(t[0]===137&&t[1]===80&&t[2]===78&&t[3]===71)return"image/png";if(t[0]===255&&t[1]===216&&t[2]===255)return"image/jpeg";if(t[0]===71&&t[1]===73&&t[2]===70&&t[3]===56)return"image/gif";if(e.length>=12){let n=e.subarray(0,4),o=e.subarray(8,12);if(n.toString()==="RIFF"&&o.toString()==="WEBP")return"image/webp"}if(e.length>=4){let n=e.subarray(0,4).toString();if(n==="<svg"||n==="<?xm")return"image/svg+xml"}if(e.length>=12){let n=e[4]===102&&e[5]===116&&e[6]===121&&e[7]===112,o=String.fromCharCode(e[8],e[9],e[10],e[11]);if(n&&(o==="avif"||o==="avis"||o==="avio"))return"image/avif"}if(e[0]===66&&e[1]===77)return"image/bmp";if(e[0]===73&&e[1]===73&&e[2]===42&&e[3]===0||e[0]===77&&e[1]===77&&e[2]===0&&e[3]===42)return"image/tiff"}return g.warn("Could not detect image type from magic bytes; using application/octet-stream"),"application/octet-stream"}catch(t){return g.warn("Failed to detect image type, using default:",t),"application/octet-stream"}}static validateSize(e,t,n=ig.IMAGE_MAX){if(!Number.isFinite(n)||n<0)throw de.invalidConfiguration("maxSize","must be a finite, non-negative byte count",{maxSize:n,context:t});if(!Number.isFinite(e)||e<0)throw de.invalidImageSize(e);if(e>n){let o=(e/1048576).toFixed(1),s=(n/(1024*1024)).toFixed(0);throw de.imageTooLarge(o,s)}}static validateBufferSize(e,t,n=ig.IMAGE_MAX){r.validateSize(e.length,t,n)}static safeBase64Convert(e,t,n=ig.IMAGE_MAX){return r.validateBufferSize(e,t,n),e.toString("base64")}static validateImageFormat(e){return["image/jpeg","image/png","image/gif","image/webp","image/bmp","image/tiff","image/svg+xml","image/avif"].includes(e.toLowerCase())}static getImageDimensions(e){try{if(e.length>=24&&e.subarray(0,8).toString("hex")==="89504e470d0a1a0a"){let t=e.readUInt32BE(16),n=e.readUInt32BE(20);return{width:t,height:n}}if(e.length>=4&&e[0]===255&&e[1]===216){let t=2;for(;t<e.length-1;){if(e[t]!==255){t++;continue}for(;t<e.length&&e[t]===255;)t++;if(t>=e.length)break;let n=e[t];if(t++,n===192||n===194){if(t+7>e.length)break;let s=e.readUInt16BE(t+3);return{width:e.readUInt16BE(t+5),height:s}}if(n===208||n===209||n===210||n===211||n===212||n===213||n===214||n===215||n===216||n===217||n===1)continue;if(t+2>e.length)break;let o=e.readUInt16BE(t);t+=o}return null}return null}catch(t){return g.warn("Failed to extract image dimensions:",t),null}}static processImage(e,t,n){try{Buffer.isBuffer(e)&&r.validateBufferSize(e,"image processing");let o=r.detectImageType(e);Qre(o);let s=typeof e=="string"?Buffer.byteLength(e,"base64"):e.length,i,a;switch(t.toLowerCase()){case"openai":i=r.processImageForOpenAI(e),a="data_uri";break;case"google-ai":case"google":{i=r.processImageForGoogle(e).data,a="base64";break}case"anthropic":{i=r.processImageForAnthropic(e).data,a="base64";break}case"vertex":{i=r.processImageForVertex(e,n||"").data,a="base64";break}default:typeof e=="string"?i=e.startsWith("data:")&&e.split(",")[1]||e:i=r.safeBase64Convert(e,"image input"),a="base64"}return{data:i,mediaType:o,size:s,format:a}}catch(o){throw o instanceof Oe?o:(g.error(`Failed to process image for ${t}:`,o),new Error(`Image processing failed: ${o instanceof Error?o.message:"Unknown error"}`,{cause:o}))}}},Iqt=["jpg","jpeg","png","gif","webp","bmp","tiff","tif","svg","avif","ico","heic","heif"],Pqt=new Set(Iqt),mM={isDataUri:r=>typeof r=="string"&&r.startsWith("data:")&&r.includes("base64,"),isUrl:r=>{try{return new URL(r),r.startsWith("http://")||r.startsWith("https://")}catch{return!1}},isBase64:r=>mM.isValidBase64(r),getFileExtension:r=>{let t=r.split(/[?#]/)[0].match(/\.([^.]+)$/);if(!t)return null;let n=t[1].toLowerCase();return/^[a-z0-9]+$/.test(n)?n:null},isValidImageExtension:r=>{if(!r||typeof r!="string")return!1;let e=r.toLowerCase();return/^[a-z0-9]+$/.test(e)?Pqt.has(e):!1},getValidatedImageExtension:r=>{let e=mM.getFileExtension(r);return e&&mM.isValidImageExtension(e)?e:null},formatFileSize:r=>{if(r===0)return"0 Bytes";let e=1024,t=["Bytes","KB","MB","GB"],n=Math.floor(Math.log(r)/Math.log(e));return parseFloat((r/Math.pow(e,n)).toFixed(2))+" "+t[n]},bufferToBase64:(r,e=ig.IMAGE_MAX)=>Pu.safeBase64Convert(r,"buffer-to-base64",e),base64ToBuffer:r=>{let e=r.includes(",")?r.split(",")[1]:r;return Buffer.from(e,"base64")},redactPathFromMessage:Ure,fileToBase64DataUri:async(r,e=10*1024*1024)=>{try{let t=await Promise.resolve().then(()=>(Iu(),sg)),n=await t.stat(r);if(!n.isFile())throw new Error("Not a file");if(n.size>e)throw new Error(`File too large: ${n.size} bytes (max: ${e} bytes)`);let o=await t.readFile(r),s=Pu.detectImageType(o)||Pu.detectImageType(r);Qre(s);let i=o.toString("base64");return`data:${s};base64,${i}`}catch(t){g.debug("fileToBase64DataUri failed",{filePath:r,error:t});let n=qs(r),o=My(t,{filePath:r}),s=t instanceof Error?o.message:"Unknown error";throw new Error(`Failed to convert file to base64 (${n}): ${s}`,{cause:o})}},urlToBase64DataUri:async(r,{timeoutMs:e=15e3,maxBytes:t=10*1024*1024,maxAttempts:n=3}={})=>{let o=Zj(),s=o.get(r);if(s)return g.debug("Using cached image for URL",{url:Za(r)}),s.dataUri;if(await Yj.acquire(),!/^https?:\/\//i.test(r))throw new Error("Unsupported protocol");let i=async()=>{let a=new AbortController,c=setTimeout(()=>a.abort(),e);try{let l=await fetch(r,{signal:a.signal});if(!l.ok)throw new Error(`HTTP ${l.status}: ${l.statusText}`);let u=l.headers.get("content-type")||"";if(!/^image\//i.test(u))throw new Error(`Unsupported content-type: ${u||"unknown"}`);let d=l.headers.get("content-length"),p=Number(d||0);if(d!==null&&p===0)throw new Error("Empty response: content-length is 0");if(p&&p>t)throw new Error(`Content too large: ${p} bytes`);let f=await l.arrayBuffer();if(f.byteLength>t)throw new Error(`Downloaded content too large: ${f.byteLength} bytes`);let h=Buffer.from(f),y=h.toString("base64"),x=`data:${u||"image/jpeg"};base64,${y}`;return o.set(r,x,u||"image/jpeg",h),x}finally{clearTimeout(c)}};try{return await kDe(i,{maxAttempts:n,initialDelay:Ta.DEFAULT_INITIAL_DELAY,backoffMultiplier:Ta.DEFAULT_BACKOFF_MULTIPLIER,maxDelay:Ta.DEFAULT_MAX_DELAY,retryCondition:Aqt,onRetry:(a,c)=>{let l=Fre(c instanceof Error?c.message:String(c)),u=n-a;g.warn(`\u26A0\uFE0F Image download attempt ${a} failed for ${Za(r)}: ${l}. ${u} ${u===1?"attempt":"attempts"} remaining...`)}})}catch(a){let c=Za(r),l=My(a);throw new Error(`Failed to download and convert URL to base64 (${c}): ${l.message}`,{cause:l})}},extractBase64FromDataUri:r=>r.includes(",")?r.split(",")[1]:r,extractMimeTypeFromDataUri:r=>{let e=r.match(/^data:([^;]+);base64,/);return e?e[1]:"image/jpeg"},createDataUri:(r,e="image/jpeg")=>{let t=r.includes(",")?r.split(",")[1]:r;return`data:${e};base64,${t}`},isValidBase64:r=>{try{let e=r.includes(",")?r.split(",")[1]:r;if(!e||e.length===0||!/^[A-Za-z0-9+/]*={0,2}$/.test(e)||e.length%4!==0)return!1;let n=e.indexOf("=");if(n!==-1){if(n<e.length-2)return!1;let a=e.slice(n);if(!/^=+$/.test(a))return!1}let s=Buffer.from(e,"base64").toString("base64"),i=a=>a.replace(/=+$/,"");return i(e)===i(s)}catch{return!1}},getBase64Size:r=>{let e=r.includes(",")?r.split(",")[1]:r;return Buffer.byteLength(e,"base64")},compressBase64:(r,e=.8)=>(g.warn("Base64 compression not implemented - returning original"),r)}});function Oqt(r){let e=r.toLowerCase();switch(e.replace(/[^a-z]/g,"")){case"lmstudio":return"lm-studio";case"llamacpp":return"llamacpp";case"nvidianim":return"nvidia-nim";case"googleaistudio":return"google-ai";case"or":return"openrouter";default:return e}}var Ny,fM,Mqt,ene,u_,IDe=C(()=>{"use strict";Qj();H();Ny=class{static logError(e,t,n){g.error(`Multimodal ${e} failed: ${t.message}`),process.env.NODE_ENV==="development"&&(g.error("Context:",JSON.stringify(n,null,2)),g.error("Stack:",t.stack))}},fM={openai:10,azure:10,"google-ai":16,google:16,anthropic:20,vertex:{claude:20,gemini:16,default:16},ollama:10,litellm:10,mistral:10,bedrock:20,openrouter:10},Mqt=new Set(["litellm","openrouter"]);ene={openai:["gpt-5.4","gpt-5.4-mini","gpt-5.4-nano","gpt-5.4-pro","gpt-5.2","gpt-5.2-chat-latest","gpt-5.2-pro","gpt-5","gpt-5-2025-08-07","gpt-5-pro","gpt-5-mini","gpt-5-nano","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","o3","o3-mini","o3-pro","o4","o4-mini","o4-mini-deep-research","gpt-4o","gpt-4o-mini","gpt-4-turbo","gpt-4-vision-preview"],"google-ai":["gemini-3.1-pro-preview","gemini-3.1-flash-lite-preview","gemini-3.1-flash-image-preview","gemini-3.1-pro-preview-customtools","gemini-3-flash-preview","gemini-3-pro-image-preview","gemini-3-pro-preview","gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.5-flash-image","gemini-2.0-flash","gemini-2.0-flash-001","gemini-2.0-flash-lite","gemini-2.0-flash-preview-image-generation","gemini-1.5-pro","gemini-1.5-flash","gemini-pro-vision"],anthropic:["claude-opus-4-6","claude-sonnet-4-6","claude-sonnet-4-5","claude-sonnet-4-5-20250929","claude-opus-4-5","claude-opus-4-5-20251101","claude-haiku-4-5","claude-haiku-4-5-20251001","claude-opus-4-1","claude-opus-4-1-20250805","claude-opus-4","claude-opus-4-20250514","claude-sonnet-4","claude-sonnet-4-20250514","claude-3-7-sonnet","claude-3-7-sonnet-20250219","claude-3-5-sonnet","claude-3-5-sonnet-20241022","claude-3-opus","claude-3-sonnet","claude-3-haiku"],azure:["gpt-5.1","gpt-5.1-chat","gpt-5.1-codex","gpt-5","gpt-5-pro","gpt-5-turbo","gpt-5-chat","gpt-5-mini","gpt-4.1","gpt-4.1-mini","gpt-4.1-nano","o3","o3-mini","o3-pro","o4-mini","gpt-4o","gpt-4o-mini","gpt-4-turbo","gpt-4-vision-preview","gpt-4"],vertex:["gemini-3.1-pro-preview","gemini-3.1-flash-lite-preview","gemini-3.1-flash-image-preview","gemini-3.1-pro-preview-customtools","gemini-3-flash-preview","gemini-3-pro-image-preview","gemini-3-pro-preview","gemini-2.5-pro","gemini-2.5-flash","gemini-2.5-flash-lite","gemini-2.5-flash-image","gemini-2.0-flash-001","gemini-2.0-flash-lite","gemini-2.0-flash","gemini-1.5-pro","gemini-1.5-flash","claude-sonnet-4-5@","claude-opus-4-5@","claude-haiku-4-5@","claude-haiku-4-5","claude-sonnet-4@","claude-opus-4@","claude-opus-4-1@","claude-3-7-sonnet@","claude-3-5-sonnet@","claude-opus-3@","claude-haiku-3@","claude-3-7-sonnet","claude-3-5-sonnet","claude-3-opus","claude-3-sonnet","claude-3-haiku","claude-sonnet-4","claude-sonnet-3","claude-opus-3","claude-haiku-3","claude-haiku-4","claude-3.5-sonnet","claude-3.5-haiku","claude-4.5-sonnet","claude-4.5-opus","claude-4.5-haiku","claude-haiku-4-5","claude-3.0-sonnet","claude-3.0-opus"],litellm:["openai/gpt-5","openai/gpt-4o","openai/gpt-4o-mini","openai/gpt-4-turbo","gpt-5","gpt-4o","gpt-4.1","anthropic/claude-sonnet-4-5-20250929","anthropic/claude-opus-4-1-20250805","anthropic/claude-3-5-sonnet-20240620","claude-sonnet-4-5","claude-sonnet-4-5-20250929","claude-opus-4-5","claude-opus-4-5-20251101","claude-haiku-4-5-20251001","claude-sonnet-4","claude-opus-4-1","vertex_ai/gemini-2.5-pro","gemini/gemini-2.5-pro","gemini/gemini-2.0-flash","gemini-3.1-pro-preview","gemini-3-flash-preview","gemini-2.5-pro","gemini-2.5-flash","gemini-2.0-flash-lite","groq/llama-3.2-11b-vision-preview"],openrouter:["anthropic/claude-3.7-sonnet","anthropic/claude-3-5-haiku","anthropic/claude-3-opus","anthropic/claude-3-sonnet","anthropic/claude-3-haiku","openai/gpt-4o","openai/gpt-4o-mini","openai/gpt-4-turbo","openai/gpt-4-vision-preview","google/gemini-2.5-pro","google/gemini-2.5-flash","google/gemini-2.0-flash","google/gemini-2.0-flash-001","google/gemini-1.5-pro","google/gemini-1.5-flash","google/gemini-pro-vision","meta-llama/llama-3.2-90b-vision-instruct","meta-llama/llama-3.2-11b-vision-instruct","mistralai/pixtral-12b","mistralai/pixtral-large","qwen/qwen-2-vl-72b-instruct","qwen/qwen-2-vl-7b-instruct"],mistral:["mistral-large-latest","mistral-large-2512","mistral-small","mistral-small-latest","mistral-small-3.2","mistral-small-2506","mistral-medium","mistral-medium-latest","mistral-medium-3.1","mistral-medium-2508","magistral-small","magistral-small-latest","magistral-medium","magistral-medium-latest","pixtral-12b","pixtral-12b-latest","pixtral-large","pixtral-large-latest","pixtral-large-2502"],ollama:["llama4:scout","llama4:maverick","llama4:latest","llama4","llama3.2-vision","llama3.2-vision:11b","llama3.2-vision:90b","gemma3","gemma3:4b","gemma3:12b","gemma3:27b","gemma3:latest","qwen2.5-vl","qwen2.5-vl:72b","qwen2.5-vl:32b","mistral-small3.1","mistral-small3.1:large","mistral-small3.1:medium","mistral-small3.1:small","llava","llava:7b","llava:13b","llava:34b","llava-llama3","llava-llama3:8b"],bedrock:["amazon.nova-premier","amazon.nova-premier-v1:0","amazon.nova-pro","amazon.nova-pro-v1:0","amazon.nova-lite","amazon.nova-lite-v1:0","amazon.nova-2-lite-v1:0","nova-premier","nova-pro","nova-lite","claude-sonnet-4-5","claude-sonnet-4.5","anthropic.claude-sonnet-4-5","anthropic.claude-sonnet-4-5-20250929-v1:0","claude-opus-4-5","claude-opus-4.5","anthropic.claude-opus-4-5","anthropic.claude-opus-4-5-20251124-v1:0","claude-haiku-4-5","claude-haiku-4.5","anthropic.claude-haiku-4-5","anthropic.claude-haiku-4-5-20251001-v1:0","claude-sonnet-4","claude-sonnet-4@","anthropic.claude-sonnet-4","anthropic.claude-sonnet-4-20250514-v1:0","claude-opus-4","claude-opus-4-1","claude-opus-4@","anthropic.claude-opus-4","anthropic.claude-opus-4-1-20250805-v1:0","claude-3-7-sonnet","claude-3.7-sonnet","anthropic.claude-3-7-sonnet","anthropic.claude-3-7-sonnet-20250219-v1:0","claude-3-5-sonnet","claude-3.5-sonnet","anthropic.claude-3-5-sonnet","anthropic.claude-3-5-sonnet-20241022-v1:0","claude-3-opus","anthropic.claude-3-opus","claude-3-sonnet","anthropic.claude-3-sonnet","claude-3-haiku","anthropic.claude-3-haiku","meta.llama4-maverick-17b-instruct-v1:0","meta.llama4-scout-17b-instruct-v1:0","meta.llama3-2-90b-instruct-v1:0","meta.llama3-2-11b-instruct-v1:0","mistral.pixtral-large-2502-v1:0","anthropic.claude"],huggingface:["Qwen/Qwen2.5-VL-32B-Instruct","Qwen/Qwen2.5-VL-7B-Instruct","microsoft/Phi-3-vision-128k-instruct","llava-hf/llava-1.5-7b-hf","llava-hf/llava-v1.6-mistral-7b-hf"],sagemaker:["meta-llama-4-maverick-17b-128e-instruct","meta-llama-4-scout-17b-16e-instruct"],deepseek:[],"nvidia-nim":["meta/llama-3.2-90b-vision-instruct","meta/llama-3.2-11b-vision-instruct"],"lm-studio":["llava","llama-3.2-11b-vision","llama-3.2-90b-vision","vision-instruct","qwen2-vl","qwen2.5-vl","phi-3-vision"],llamacpp:["llava","llama-3.2-11b-vision","llama-3.2-90b-vision","vision-instruct","qwen2-vl","phi-3-vision"],xai:["grok-2-vision-latest"],groq:["llama-3.2-90b-vision-preview","llama-3.2-11b-vision-preview"],cohere:[],"together-ai":[],fireworks:["accounts/fireworks/models/phi-3-vision-128k-instruct","accounts/fireworks/models/llama-v3p2-90b-vision-instruct","accounts/fireworks/models/llama-v3p2-11b-vision-instruct"],perplexity:[],cloudflare:["@cf/meta/llama-3.2-11b-vision-instruct"],replicate:["llava","llama-3.2-vision","moondream","qwen2-vl"],voyage:[],jina:[],stability:[],ideogram:[],recraft:[]},u_=class{static validateImageCount(e,t,n){let o=t.toLowerCase(),s;if(o==="vertex"&&n)n.includes("claude")?s=fM.vertex.claude:n.includes("gemini")?s=fM.vertex.gemini:s=fM.vertex.default;else{let a=o in fM?fM[o]:void 0;a===void 0?(s=10,g.warn(`Image count limit not defined for provider ${t}. Using conservative default of 10 images.`)):s=a}let i=Math.floor(s*.8);if(e===i&&g.warn(`Image count (${e}) is approaching the limit for ${t}. Maximum allowed: ${s}. Please reduce the number of images.`),e>s)throw new Error(`Image count (${e}) exceeds the maximum limit for ${t}. Maximum allowed: ${s}. Please reduce the number of images.`)}static convertToContent(e,t){let n=[{type:"text",text:e}];return t&&t.length>0&&t.forEach(o=>{let s=typeof o=="object"&&"data"in o&&!Buffer.isBuffer(o)?o.data:o,i=typeof o=="object"&&"data"in o&&!Buffer.isBuffer(o)?o.altText:void 0;n.push({type:"image",data:s,altText:i,mediaType:Pu.detectImageType(s)})}),n}static supportsVision(e,t){try{let n=Oqt(e),o=ene[n];if(!o||o.length===0)return!1;if(!t)return!0;let s=o.some(i=>t.toLowerCase().includes(i.toLowerCase()));return!s&&Mqt.has(n)?!0:s}catch{return!1}}static getSupportedModels(e){let t=e.toLowerCase(),n=ene[t];return n?[...n]:[]}static getVisionProviders(){return Object.entries(ene).filter(([,e])=>e.length>0).map(([e])=>e)}static countImagesInMessage(e,t){return(e?.length||0)+(t??0)}static countImagesInPages(e){return!e||e.length===0?0:e.reduce((t,n)=>t+(n.pageCount??0),0)}}});function PDe(){return{enabled:process.env.NEUROLINK_MEMORY_ENABLED==="true",maxSessions:Number(process.env.NEUROLINK_MEMORY_MAX_SESSIONS)||50,enableSummarization:process.env.NEUROLINK_SUMMARIZATION_ENABLED!=="false",tokenThreshold:process.env.NEUROLINK_TOKEN_THRESHOLD?Number(process.env.NEUROLINK_TOKEN_THRESHOLD):void 0,summarizationProvider:process.env.NEUROLINK_SUMMARIZATION_PROVIDER||"vertex",summarizationModel:process.env.NEUROLINK_SUMMARIZATION_MODEL||"gemini-2.5-flash",maxTurnsPerSession:50}}var tne,rne,nne=C(()=>{"use strict";tne=`
820
820
 
821
821
  IMPORTANT: You are continuing an ongoing conversation. The previous messages in this conversation contain important context including:
822
822
  - Names, personal information, and preferences shared by the user
@@ -23,7 +23,11 @@ import { normalizeUrlForCache, redactUrlForError } from "./logSanitize.js";
23
23
  */
24
24
  export class ImageCache {
25
25
  cache = new Map();
26
- contentHashIndex = new Map(); // contentHash -> url
26
+ // contentHash -> set of normalized urls whose cache entry holds that
27
+ // content. A Set (not a single url) so that evicting/deleting one url
28
+ // doesn't drop the dedup mapping for other urls still caching the same
29
+ // content (#1213).
30
+ contentHashIndex = new Map();
27
31
  maxSize;
28
32
  ttlMs;
29
33
  maxImageSize;
@@ -164,11 +168,37 @@ export class ImageCache {
164
168
  * Useful for deduplication when the same image is accessed via different URLs
165
169
  */
166
170
  getByContentHash(contentHash) {
167
- const url = this.contentHashIndex.get(contentHash);
168
- if (!url) {
171
+ const urlSet = this.contentHashIndex.get(contentHash);
172
+ if (!urlSet) {
169
173
  return null;
170
174
  }
171
- return this.get(url);
175
+ // Find the first url whose cache entry is still live, pruning any url
176
+ // whose entry no longer exists in `this.cache` along the way. Entries
177
+ // that exist but are expired are left in the set (not "gone") - the
178
+ // normal TTL/get() path is responsible for reaping those.
179
+ let liveUrl = null;
180
+ // Iterate a copy so reaping below can mutate the set safely.
181
+ for (const url of [...urlSet]) {
182
+ const entry = this.cache.get(url);
183
+ if (!entry) {
184
+ urlSet.delete(url);
185
+ continue;
186
+ }
187
+ if (this.isExpired(entry)) {
188
+ // Reap expired entries here too (matching get() semantics) so stale
189
+ // urls don't accumulate when callers primarily use getByContentHash.
190
+ this.cache.delete(url);
191
+ urlSet.delete(url);
192
+ continue;
193
+ }
194
+ if (liveUrl === null) {
195
+ liveUrl = url;
196
+ }
197
+ }
198
+ if (urlSet.size === 0) {
199
+ this.contentHashIndex.delete(contentHash);
200
+ }
201
+ return liveUrl ? this.get(liveUrl) : null;
172
202
  }
173
203
  /**
174
204
  * Store an image in the cache
@@ -192,21 +222,42 @@ export class ImageCache {
192
222
  }
193
223
  // Generate content hash
194
224
  const contentHash = this.generateContentHash(imageData);
195
- // Check if same content already exists under different URL
196
- const existingUrl = this.contentHashIndex.get(contentHash);
197
- if (existingUrl && existingUrl !== normalizedUrl) {
198
- // Content already cached under different URL - create a shallow copy
199
- const existingEntry = this.cache.get(existingUrl);
200
- if (existingEntry && !this.isExpired(existingEntry)) {
201
- // Create a shallow copy for the new URL to avoid shared reference issues
202
- this.cache.set(normalizedUrl, { ...existingEntry });
203
- // Update content hash index to point to the new URL as well
204
- this.contentHashIndex.set(contentHash, normalizedUrl);
205
- logger.debug("Image cache dedup hit", {
206
- newUrl: redactUrlForError(normalizedUrl),
207
- existingUrl: redactUrlForError(existingUrl),
208
- });
209
- return;
225
+ // Check if same content already exists under a different URL
226
+ const existingUrls = this.contentHashIndex.get(contentHash);
227
+ if (existingUrls) {
228
+ for (const existingUrl of existingUrls) {
229
+ if (existingUrl === normalizedUrl) {
230
+ continue;
231
+ }
232
+ // Content already cached under a different URL - create a shallow copy
233
+ const existingEntry = this.cache.get(existingUrl);
234
+ if (existingEntry && !this.isExpired(existingEntry)) {
235
+ // A dedup hit still adds a cache entry for the new URL, so enforce
236
+ // capacity first — otherwise many URLs sharing one content hash could
237
+ // grow the cache past maxSize.
238
+ while (this.cache.size >= this.maxSize && this.cache.size > 0) {
239
+ this.evictOldest();
240
+ }
241
+ // Create a shallow copy for the new URL to avoid shared reference issues
242
+ this.cache.set(normalizedUrl, { ...existingEntry });
243
+ // Re-fetch (or re-create) the hash's URL set: the eviction above may
244
+ // have removed this hash's last url, emptying the set and deleting it
245
+ // from contentHashIndex — reusing the stale `existingUrls` reference
246
+ // would add the new url to an orphaned set that the index no longer
247
+ // points to, leaving a live entry unreachable by content hash
248
+ // (the exact #1213 failure mode). Never replace an existing mapping.
249
+ let hashUrls = this.contentHashIndex.get(contentHash);
250
+ if (!hashUrls) {
251
+ hashUrls = new Set();
252
+ this.contentHashIndex.set(contentHash, hashUrls);
253
+ }
254
+ hashUrls.add(normalizedUrl);
255
+ logger.debug("Image cache dedup hit", {
256
+ newUrl: redactUrlForError(normalizedUrl),
257
+ existingUrl: redactUrlForError(existingUrl),
258
+ });
259
+ return;
260
+ }
210
261
  }
211
262
  }
212
263
  // Evict if at capacity
@@ -224,7 +275,12 @@ export class ImageCache {
224
275
  accessCount: 1,
225
276
  };
226
277
  this.cache.set(normalizedUrl, entry);
227
- this.contentHashIndex.set(contentHash, normalizedUrl);
278
+ let urlSet = this.contentHashIndex.get(contentHash);
279
+ if (!urlSet) {
280
+ urlSet = new Set();
281
+ this.contentHashIndex.set(contentHash, urlSet);
282
+ }
283
+ urlSet.add(normalizedUrl);
228
284
  logger.debug("Image cached", {
229
285
  url: redactUrlForError(normalizedUrl),
230
286
  size,
@@ -239,9 +295,14 @@ export class ImageCache {
239
295
  const normalizedUrl = this.normalizeUrl(url);
240
296
  const entry = this.cache.get(normalizedUrl);
241
297
  if (entry) {
242
- // Remove from content hash index
243
- if (this.contentHashIndex.get(entry.contentHash) === normalizedUrl) {
244
- this.contentHashIndex.delete(entry.contentHash);
298
+ // Remove this URL from its content hash's URL set; only drop the
299
+ // hash entry once no URL maps to that content anymore (#1213).
300
+ const urlSet = this.contentHashIndex.get(entry.contentHash);
301
+ if (urlSet) {
302
+ urlSet.delete(normalizedUrl);
303
+ if (urlSet.size === 0) {
304
+ this.contentHashIndex.delete(entry.contentHash);
305
+ }
245
306
  }
246
307
  this.cache.delete(normalizedUrl);
247
308
  return true;
@@ -257,8 +318,15 @@ export class ImageCache {
257
318
  if (oldestKey !== undefined) {
258
319
  const entry = this.cache.get(oldestKey);
259
320
  if (entry) {
260
- if (this.contentHashIndex.get(entry.contentHash) === oldestKey) {
261
- this.contentHashIndex.delete(entry.contentHash);
321
+ // Remove only the evicted URL from its content hash's URL set; the
322
+ // hash entry is dropped only once no URL maps to it anymore
323
+ // (#1213).
324
+ const urlSet = this.contentHashIndex.get(entry.contentHash);
325
+ if (urlSet) {
326
+ urlSet.delete(oldestKey);
327
+ if (urlSet.size === 0) {
328
+ this.contentHashIndex.delete(entry.contentHash);
329
+ }
262
330
  }
263
331
  }
264
332
  this.cache.delete(oldestKey);
@@ -44,6 +44,7 @@ export declare const DEFAULT_TIMEOUTS: {
44
44
  huggingface: string;
45
45
  ollama: string;
46
46
  mistral: string;
47
+ litellm: string;
47
48
  };
48
49
  tools: {
49
50
  default: string;
@@ -88,6 +88,7 @@ export const DEFAULT_TIMEOUTS = {
88
88
  huggingface: "2m", // Open source models vary significantly
89
89
  ollama: "5m", // Local models need more time, especially large ones
90
90
  mistral: "45s", // Mistral AI moderate speed
91
+ litellm: "5m", // Self-hosted proxy over arbitrary backends, same variable-latency profile as ollama
91
92
  },
92
93
  tools: {
93
94
  default: "10s", // Default timeout for MCP tool execution
@@ -23,7 +23,11 @@ import { normalizeUrlForCache, redactUrlForError } from "./logSanitize.js";
23
23
  */
24
24
  export class ImageCache {
25
25
  cache = new Map();
26
- contentHashIndex = new Map(); // contentHash -> url
26
+ // contentHash -> set of normalized urls whose cache entry holds that
27
+ // content. A Set (not a single url) so that evicting/deleting one url
28
+ // doesn't drop the dedup mapping for other urls still caching the same
29
+ // content (#1213).
30
+ contentHashIndex = new Map();
27
31
  maxSize;
28
32
  ttlMs;
29
33
  maxImageSize;
@@ -164,11 +168,37 @@ export class ImageCache {
164
168
  * Useful for deduplication when the same image is accessed via different URLs
165
169
  */
166
170
  getByContentHash(contentHash) {
167
- const url = this.contentHashIndex.get(contentHash);
168
- if (!url) {
171
+ const urlSet = this.contentHashIndex.get(contentHash);
172
+ if (!urlSet) {
169
173
  return null;
170
174
  }
171
- return this.get(url);
175
+ // Find the first url whose cache entry is still live, pruning any url
176
+ // whose entry no longer exists in `this.cache` along the way. Entries
177
+ // that exist but are expired are left in the set (not "gone") - the
178
+ // normal TTL/get() path is responsible for reaping those.
179
+ let liveUrl = null;
180
+ // Iterate a copy so reaping below can mutate the set safely.
181
+ for (const url of [...urlSet]) {
182
+ const entry = this.cache.get(url);
183
+ if (!entry) {
184
+ urlSet.delete(url);
185
+ continue;
186
+ }
187
+ if (this.isExpired(entry)) {
188
+ // Reap expired entries here too (matching get() semantics) so stale
189
+ // urls don't accumulate when callers primarily use getByContentHash.
190
+ this.cache.delete(url);
191
+ urlSet.delete(url);
192
+ continue;
193
+ }
194
+ if (liveUrl === null) {
195
+ liveUrl = url;
196
+ }
197
+ }
198
+ if (urlSet.size === 0) {
199
+ this.contentHashIndex.delete(contentHash);
200
+ }
201
+ return liveUrl ? this.get(liveUrl) : null;
172
202
  }
173
203
  /**
174
204
  * Store an image in the cache
@@ -192,21 +222,42 @@ export class ImageCache {
192
222
  }
193
223
  // Generate content hash
194
224
  const contentHash = this.generateContentHash(imageData);
195
- // Check if same content already exists under different URL
196
- const existingUrl = this.contentHashIndex.get(contentHash);
197
- if (existingUrl && existingUrl !== normalizedUrl) {
198
- // Content already cached under different URL - create a shallow copy
199
- const existingEntry = this.cache.get(existingUrl);
200
- if (existingEntry && !this.isExpired(existingEntry)) {
201
- // Create a shallow copy for the new URL to avoid shared reference issues
202
- this.cache.set(normalizedUrl, { ...existingEntry });
203
- // Update content hash index to point to the new URL as well
204
- this.contentHashIndex.set(contentHash, normalizedUrl);
205
- logger.debug("Image cache dedup hit", {
206
- newUrl: redactUrlForError(normalizedUrl),
207
- existingUrl: redactUrlForError(existingUrl),
208
- });
209
- return;
225
+ // Check if same content already exists under a different URL
226
+ const existingUrls = this.contentHashIndex.get(contentHash);
227
+ if (existingUrls) {
228
+ for (const existingUrl of existingUrls) {
229
+ if (existingUrl === normalizedUrl) {
230
+ continue;
231
+ }
232
+ // Content already cached under a different URL - create a shallow copy
233
+ const existingEntry = this.cache.get(existingUrl);
234
+ if (existingEntry && !this.isExpired(existingEntry)) {
235
+ // A dedup hit still adds a cache entry for the new URL, so enforce
236
+ // capacity first — otherwise many URLs sharing one content hash could
237
+ // grow the cache past maxSize.
238
+ while (this.cache.size >= this.maxSize && this.cache.size > 0) {
239
+ this.evictOldest();
240
+ }
241
+ // Create a shallow copy for the new URL to avoid shared reference issues
242
+ this.cache.set(normalizedUrl, { ...existingEntry });
243
+ // Re-fetch (or re-create) the hash's URL set: the eviction above may
244
+ // have removed this hash's last url, emptying the set and deleting it
245
+ // from contentHashIndex — reusing the stale `existingUrls` reference
246
+ // would add the new url to an orphaned set that the index no longer
247
+ // points to, leaving a live entry unreachable by content hash
248
+ // (the exact #1213 failure mode). Never replace an existing mapping.
249
+ let hashUrls = this.contentHashIndex.get(contentHash);
250
+ if (!hashUrls) {
251
+ hashUrls = new Set();
252
+ this.contentHashIndex.set(contentHash, hashUrls);
253
+ }
254
+ hashUrls.add(normalizedUrl);
255
+ logger.debug("Image cache dedup hit", {
256
+ newUrl: redactUrlForError(normalizedUrl),
257
+ existingUrl: redactUrlForError(existingUrl),
258
+ });
259
+ return;
260
+ }
210
261
  }
211
262
  }
212
263
  // Evict if at capacity
@@ -224,7 +275,12 @@ export class ImageCache {
224
275
  accessCount: 1,
225
276
  };
226
277
  this.cache.set(normalizedUrl, entry);
227
- this.contentHashIndex.set(contentHash, normalizedUrl);
278
+ let urlSet = this.contentHashIndex.get(contentHash);
279
+ if (!urlSet) {
280
+ urlSet = new Set();
281
+ this.contentHashIndex.set(contentHash, urlSet);
282
+ }
283
+ urlSet.add(normalizedUrl);
228
284
  logger.debug("Image cached", {
229
285
  url: redactUrlForError(normalizedUrl),
230
286
  size,
@@ -239,9 +295,14 @@ export class ImageCache {
239
295
  const normalizedUrl = this.normalizeUrl(url);
240
296
  const entry = this.cache.get(normalizedUrl);
241
297
  if (entry) {
242
- // Remove from content hash index
243
- if (this.contentHashIndex.get(entry.contentHash) === normalizedUrl) {
244
- this.contentHashIndex.delete(entry.contentHash);
298
+ // Remove this URL from its content hash's URL set; only drop the
299
+ // hash entry once no URL maps to that content anymore (#1213).
300
+ const urlSet = this.contentHashIndex.get(entry.contentHash);
301
+ if (urlSet) {
302
+ urlSet.delete(normalizedUrl);
303
+ if (urlSet.size === 0) {
304
+ this.contentHashIndex.delete(entry.contentHash);
305
+ }
245
306
  }
246
307
  this.cache.delete(normalizedUrl);
247
308
  return true;
@@ -257,8 +318,15 @@ export class ImageCache {
257
318
  if (oldestKey !== undefined) {
258
319
  const entry = this.cache.get(oldestKey);
259
320
  if (entry) {
260
- if (this.contentHashIndex.get(entry.contentHash) === oldestKey) {
261
- this.contentHashIndex.delete(entry.contentHash);
321
+ // Remove only the evicted URL from its content hash's URL set; the
322
+ // hash entry is dropped only once no URL maps to it anymore
323
+ // (#1213).
324
+ const urlSet = this.contentHashIndex.get(entry.contentHash);
325
+ if (urlSet) {
326
+ urlSet.delete(oldestKey);
327
+ if (urlSet.size === 0) {
328
+ this.contentHashIndex.delete(entry.contentHash);
329
+ }
262
330
  }
263
331
  }
264
332
  this.cache.delete(oldestKey);
@@ -44,6 +44,7 @@ export declare const DEFAULT_TIMEOUTS: {
44
44
  huggingface: string;
45
45
  ollama: string;
46
46
  mistral: string;
47
+ litellm: string;
47
48
  };
48
49
  tools: {
49
50
  default: string;
@@ -88,6 +88,7 @@ export const DEFAULT_TIMEOUTS = {
88
88
  huggingface: "2m", // Open source models vary significantly
89
89
  ollama: "5m", // Local models need more time, especially large ones
90
90
  mistral: "45s", // Mistral AI moderate speed
91
+ litellm: "5m", // Self-hosted proxy over arbitrary backends, same variable-latency profile as ollama
91
92
  },
92
93
  tools: {
93
94
  default: "10s", // Default timeout for MCP tool execution
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@juspay/neurolink",
3
- "version": "10.1.0",
3
+ "version": "10.1.2",
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": {
@@ -621,7 +621,8 @@
621
621
  "esbuild@>=0.17.0 <0.28.1": ">=0.28.1",
622
622
  "rollup@>=4.0.0 <4.59.0": ">=4.59.0",
623
623
  "shell-quote@<1.8.4": ">=1.8.4",
624
- "undici@>=8.0.0": ">=7.24.0 <8.0.0"
624
+ "undici@>=8.0.0": ">=7.24.0 <8.0.0",
625
+ "pdfjs-dist": "5.4.624"
625
626
  },
626
627
  "patchedDependencies": {
627
628
  "mammoth@1.12.0": "patches/mammoth@1.12.0.patch"