@juspay/neurolink 10.1.0 → 10.1.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/CHANGELOG.md CHANGED
@@ -1,3 +1,9 @@
1
+ ## [10.1.1](https://github.com/juspay/neurolink/compare/v10.1.0...v10.1.1) (2026-07-20)
2
+
3
+ ### Bug Fixes
4
+
5
+ - **(timeout):** add missing litellm entry to DEFAULT_TIMEOUTS.providers ([c24a54c](https://github.com/juspay/neurolink/commit/c24a54ca2fa96e7e9cfc5bcb2a82b32dd3d3eecf))
6
+
1
7
  ## [10.1.0](https://github.com/juspay/neurolink/compare/v10.0.1...v10.1.0) (2026-07-20)
2
8
 
3
9
  ### 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);
@@ -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
@@ -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.1",
4
4
  "packageManager": "pnpm@10.15.1",
5
5
  "description": "TypeScript AI SDK with 24+ LLM providers behind one consistent API. MCP-native (connect any MCP server), voice TTS/STT/realtime, RAG, agents, memory, context compaction. OpenAI · Anthropic · Gemini · Bedrock · Azure · Ollama · DeepSeek · NVIDIA NIM and more.",
6
6
  "author": {