@juspay/neurolink 9.86.5 → 9.87.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 +12 -0
- package/dist/adapters/video/replicateVideoHandler.js +27 -17
- package/dist/browser/neurolink.min.js +2 -2
- package/dist/lib/adapters/video/replicateVideoHandler.js +27 -17
- package/dist/lib/types/multimodal.d.ts +12 -0
- package/dist/lib/utils/safeFetch.js +11 -1
- package/dist/types/multimodal.d.ts +12 -0
- package/dist/utils/safeFetch.js +11 -1
- package/package.json +1 -1
|
@@ -2203,7 +2203,7 @@ IMPORTANT: You are a general-purpose AI assistant. Answer all requests directly
|
|
|
2203
2203
|
|
|
2204
2204
|
${A}`:d.text}}catch(k){if(!(e.input.text||""))throw k;g.warn(`[NeuroLink] Stream STT transcription failed, falling back to text: ${k instanceof Error?k.message:String(k)}`)}}let p=e.input?.text??"";e.fileRegistry=this.fileRegistry,await this.validateStreamRequestOptions(e,s),o4(t,e.context,n);let f=await this.maybeHandleWorkflowStreamRequest({options:e,startTime:s,streamSpan:t,spanStartTime:o});if(f)return f;let h=Tt.setSpan(wr.active(),t);await wr.with(h,()=>this.setLangfuseContextFromOptions(e,()=>this.applyToolRoutingExclusions(e,p))),await this.applyClassifierRouting(e,p,!e.disableTools&&(!!(e.tools&&Object.keys(e.tools).length>0)||this.getCustomTools().size>0),!!(e.input?.images&&e.input.images.length>0),e.thinking?.thinkingLevel),await this.applyRequestRouter(e,p,!e.disableTools&&(!!(e.tools&&Object.keys(e.tools).length>0)||this.getCustomTools().size>0),!!(e.input?.images&&e.input.images.length>0),e.thinking?.thinkingLevel);let y=e.tts,x=!!(y?.enabled&&y?.useAiResponse),b,T=x?new Promise(k=>{b=k}):void 0,w=await wr.with(h,()=>this.setLangfuseContextFromOptions(e,()=>this.runStandardStreamRequest({options:e,streamSpan:t,spanStartTime:o,startTime:s,hrTimeStart:i,streamId:a,originalPrompt:p,ttsResolver:b})));return d&&(w.transcription=d),T&&(w.audio=T),w}catch(s){throw t.setStatus({code:Ie.ERROR,message:s instanceof Error?s.message:String(s)}),s instanceof Error&&t.recordException(s),t.end(),s}}async applyToolRoutingExclusions(e,t){let n=this.toolRoutingConfig;if(!n?.enabled||e.disableTools)return;let o=n.servers??[];if(o.length!==0)try{let s=Array.from(this.getCustomTools().keys()),i=Zce(o,s);if(i.length===0)return;let a=await this.fetchRecentRoutingHistory(e),c=a.length>0?Qce(a,t):t,l=n.cache,u=l?.enabled===!0,d=n.stickiness?.enabled===!0;(u||d)&&!this.toolRoutingCacheInstance&&(this.toolRoutingCacheInstance=new IN({ttlMs:l?.ttlMs,maxEntries:l?.maxEntries,stickyTurns:n.stickiness?.turns}));let p=this.toolRoutingCacheInstance,f=e.context,h=typeof f?.sessionId=="string"?f.sessionId:"",y=u&&h?`${h}:${c}`:void 0,x=i.filter(P=>!(n.alwaysIncludeServerIds??[]).includes(P.id)).length,b=Date.now(),T=P=>{try{let R=Tt.getActiveSpan();if(!R)return;R.setAttribute("tool_routing.outcome",P.outcome),R.setAttribute("tool_routing.routable_server_count",P.routableServerCount),R.setAttribute("tool_routing.selected_server_ids",Do(P.selectedServerIds)),R.setAttribute("tool_routing.excluded_server_ids",Do(P.excludedServerIds)),R.setAttribute("tool_routing.hallucinated_ids",Do(P.hallucinatedIds)),R.setAttribute("tool_routing.excluded_tool_count",P.excludedToolCount),R.setAttribute("tool_routing.cache_hit",P.cacheHit),R.setAttribute("tool_routing.duration_ms",P.durationMs),P.embeddingActivated!==void 0&&R.setAttribute("tool_routing.embedding_activated",P.embeddingActivated),P.candidateToolCount!==void 0&&R.setAttribute("tool_routing.candidate_tool_count",P.candidateToolCount),P.granularity!==void 0&&R.setAttribute("tool_routing.granularity",P.granularity)}catch{}};if(u&&p&&y!==void 0){let P=p.get(y);if(P){let R=P.excludedToolNames;if(d&&h)try{let O=p.getStickyServerIds(h);O.length>0&&(R=R.filter(F=>!O.some(D=>F.startsWith(`${D}_`))))}catch{}let I=new Set(P.selectedServerIds),M=i.map(O=>O.id).filter(O=>!I.has(O));T({outcome:"cache-hit",selectedServerIds:P.selectedServerIds,excludedServerIds:M,hallucinatedIds:[],excludedToolCount:R.length,routableServerCount:x,cacheHit:!0,durationMs:Date.now()-b}),g.debug("[ToolRouting] Cache hit, skipping router LLM",{hasSessionId:!!h,routingQueryLength:c.length}),R.length>0&&(e.excludeTools=[...e.excludeTools??[],...R]);return}}let w=this._disableToolCacheForCurrentRequest,k,C;try{let P=M=>{C=M,T(M)},R,I=n.embedding;if(I?.enabled===!0)try{let M=I.provider??(e.provider&&e.provider!=="auto"?e.provider:void 0)??n.routerModel?.provider;if(M){let O=await dn.createProvider(M,I.model,!0,this,void 0,this.resolveCredentials(e.credentials));R=F=>Ke(O.embedMany(F,I.model),I.timeoutMs??1e4),this.toolRoutingVectorCache||(this.toolRoutingVectorCache=new Map)}}catch(M){g.debug("[ToolRouting] Embedding provider setup failed, L2 path disabled for this turn",{error:M instanceof Error?M.message:String(M)})}k=await ele({catalog:i,alwaysIncludeServerIds:n.alwaysIncludeServerIds??[],userQuery:c,routerPromptPrefix:n.routerPromptPrefix,routerModel:{provider:n.routerModel?.provider??e.provider,model:n.routerModel?.model??e.model,region:n.routerModel?.region??e.region,temperature:n.routerModel?.temperature},timeoutMs:n.timeoutMs??MX,generateFn:M=>this.generate({...M,abortSignal:e.abortSignal}),emitDecision:P,embedFn:R,embeddingConfig:I,granularity:n.granularity??"server",embeddingVectorCache:R!==void 0?this.toolRoutingVectorCache:void 0})}finally{this._disableToolCacheForCurrentRequest=w}if(e.abortSignal?.aborted)return;let A=k;if(d&&p&&h)try{let P=p.getStickyServerIds(h);if(P.length>0){let R=P.map(I=>`${I}_`);k=k.filter(I=>!R.some(M=>I.startsWith(M)))}}catch{}if(C?.outcome==="applied"&&p){if(u&&y!==void 0)try{p.set(y,{excludedToolNames:A,selectedServerIds:C.selectedServerIds})}catch{}if(d&&h)try{p.recordSelection(h,C.selectedServerIds)}catch{}}k.length>0&&(e.excludeTools=[...e.excludeTools??[],...k])}catch(s){if(Hr(s))throw s;g.warn("[ToolRouting] Routing setup failed, failing open",{error:s instanceof Error?s.message:String(s)})}}async fetchRecentRoutingHistory(e){try{let t=e.context;if(e.conversationMessages&&e.conversationMessages.length>0)return e.conversationMessages;let n=t?.sessionId;if(typeof n!="string"||!n)return[];await this.initializeConversationMemoryForGeneration(`tool-routing-${Date.now()}`,Date.now(),process.hrtime.bigint());let o=this.conversationMemory;if(!o)return[];let s=await Og(o,{...e,enableSummarization:!1});return g.debug("[ToolRouting] Loaded conversation history for router",{sessionId:n,messageCount:s.length}),s}catch(t){return g.debug("[ToolRouting] Failed to load conversation history; routing on current query only",{error:t instanceof Error?t.message:String(t)}),[]}}setToolRoutingServers(e){if(!this.toolRoutingConfig){g.warn("[ToolRouting] setToolRoutingServers called without toolRouting constructor config \u2014 servers stored but routing stays disabled"),this.toolRoutingConfig={enabled:!1,servers:e};return}this.toolRoutingConfig.servers=e,this.toolRoutingVectorCache=void 0,this.toolRoutingCacheInstance=void 0}async validateStreamRequestOptions(e,t){if(await this.validateStreamInput(e),e.inputValidation&&e.input?.text){let n=e.inputValidation;if(n.trimWhitespace&&(e.input.text=e.input.text.trim()),n.requireContent&&!e.input.text.trim())throw new Error("Input content is required but was empty or whitespace");if(n.minLength&&e.input.text.length<n.minLength)throw new Error(`Input text is too short (${e.input.text.length} < ${n.minLength})`);if(n.maxLength&&e.input.text.length>n.maxLength)throw new Error(`Input text is too long (${e.input.text.length} > ${n.maxLength})`)}if(e.piiDetection?.enabled&&e.input?.text){let n=await tW(e.input.text,{enabled:!0,action:e.piiDetection.action??"warn",detectTypes:e.piiDetection.detectTypes,customPatterns:e.piiDetection.customPatterns,allowList:e.piiDetection.allowList,redactionText:e.piiDetection.redactionText});if(n.action==="abort")throw new Error(n.feedback??"Request blocked: PII detected in input");e.input.text=n.text}this.enforceSessionBudget(e.maxBudgetUsd),await this.applyAuthenticatedRequestContext(e),this.emitStreamStartEvents(e,t),this.applyStreamLifecycleMiddleware(e)}async maybeHandleWorkflowStreamRequest(e){if(!e.options.workflow&&!e.options.workflowConfig)return null;let t=await this.streamWithWorkflow(e.options,e.startTime),n=t.stream,o=this;return t.stream=(async function*(){try{for await(let s of n)yield s;e.streamSpan.setStatus({code:Ie.OK})}catch(s){throw e.streamSpan.setStatus({code:Ie.ERROR,message:s instanceof Error?s.message:String(s)}),s}finally{o._disableToolCacheForCurrentRequest=!1,e.streamSpan.setAttribute("neurolink.response_time_ms",Date.now()-e.spanStartTime),e.streamSpan.end()}})(),t}async runStandardStreamRequest(e){let{options:t,streamSpan:n,spanStartTime:o,startTime:s,hrTimeStart:i,streamId:a,originalPrompt:c,ttsResolver:l}=e;g.debug("[NeuroLink] Running standard stream request",{streamId:a,provider:t.provider,model:t.model,inputLength:t.input?.text?.length||0,disableTools:t.disableTools,enableAnalytics:t.enableAnalytics,enableEvaluation:t.enableEvaluation,contextKeys:t.context?Object.keys(t.context):[],optionKeys:Object.keys(t),sessionId:t.context?.sessionId});try{let{enhancedOptions:u,factoryResult:d}=await this.prepareStreamOptions(t,a,s,i);g.debug("[NeuroLink] Stream options prepared",{streamId:a,options:u,factoryResult:d,sessionId:u.context?.sessionId});let{stream:p,provider:f,usage:h,model:y,finishReason:x,toolCalls:b,toolResults:T,analytics:w,metadata:k}=await this.createMCPStream(u),C={finishReason:x??"stop",toolCalls:b,toolResults:T};n.setAttribute(Se.NL_PROVIDER,f||"unknown");let A="",P=0,{eventSequence:R,cleanup:I}=this.setupStreamEventListeners(),M={fallbackAttempted:!1,guardrailsBlocked:!1,error:void 0,fallbackProvider:void 0,fallbackModel:void 0},O=this,F=Date.now(),D=u.context?.sessionId,j={providerEmitted:!1};u._streamDedupContext=j;let $=(async function*(){let V,B,K=0;try{for await(let q of p){P++;let pe=q!==null&&typeof q=="object"&&"metadata"in q&&q.metadata?.noOutput===!0,De=q&&"content"in q&&typeof q.content=="string"&&q.content.length>0,ne=q!==null&&typeof q=="object"&&"type"in q&&(q.type==="audio"||q.type==="tts_audio"||q.type==="image");!pe&&(De||ne)&&K++,q&&"content"in q&&typeof q.content=="string"&&(A+=q.content,O.emitter.emit("response:chunk",q.content),O.emitter.emit("stream:chunk",{type:"stream:chunk",content:q.content,metadata:{chunkIndex:P,totalLength:A.length,...pe&&{noOutput:!0}},timestamp:Date.now()})),yield q}K===0&&!M.fallbackAttempted&&!u.disableInternalFallback&&C.toolCalls.length===0&&C.toolResults.length===0&&(yield*O.handleStreamFallback(M,C,c,u,f,q=>{A+=q}));let te=await O.synthesizeStreamModeTwo({ttsOptions:u.tts,providerName:f,fallbackProvider:u.provider,accumulatedContent:A,ttsResolver:l});if(te.audioChunk&&(yield te.audioChunk),B=h,!B&&w)try{let q=await Promise.resolve(w);q?.tokenUsage&&(B=q.tokenUsage)}catch{}O.emitter.emit("stream:complete",{type:"stream:complete",content:A,provider:M.fallbackProvider??f,model:M.fallbackModel??y??u.model,finishReason:C.finishReason??"stop",prompt:u.input?.text||u.prompt,metadata:{chunkCount:P,totalLength:A.length,durationMs:Date.now()-F,sessionId:D,usage:B,finishReason:C.finishReason??"stop",...M.fallbackAttempted&&{primaryProvider:f,primaryModel:u.model,fallback:!0}},timestamp:Date.now()})}catch(te){throw g.debug("[NeuroLink.stream] Stream error occurred",{error:te instanceof Error?te.message:String(te),name:te instanceof Error?te.name:"UnknownError",provider:f,model:u.model,chunkCount:P,totalLength:A.length,durationMs:Date.now()-F,sessionId:D}),V=te,O.emitter.emit("stream:error",{type:"stream:error",content:te instanceof Error?te.message:String(te),provider:f,model:u.model,metadata:{chunkCount:P,totalLength:A.length,durationMs:Date.now()-F,errorName:te instanceof Error?te.name:"UnknownError",sessionId:D},timestamp:Date.now()}),te}finally{if(l?.(void 0),g.debug("[NeuroLink.stream] Stream finished, performing cleanup",{provider:f,model:u.model,totalChunks:P,totalLength:A.length,durationMs:Date.now()-F,fallbackAttempted:M.fallbackAttempted,guardrailsBlocked:M.guardrailsBlocked,error:M.error}),!j.providerEmitted)try{let q=M.fallbackProvider??f??"unknown",pe=M.fallbackModel??y??u.model??"unknown",De=V?"error":C.finishReason??"stop";O.emitter.emit("generation:end",{provider:q,model:pe,responseTime:Date.now()-F,toolsUsed:C.toolCalls?.map(ne=>ne.toolName),timestamp:Date.now(),result:{content:A,usage:B,model:pe,provider:q,finishReason:De},prompt:u.input?.text||u.prompt,temperature:u.temperature,maxTokens:u.maxTokens,success:!V,error:V?V instanceof Error?V.message:String(V):void 0,pipelineAHandled:!0})}catch(q){g.debug("[NeuroLink.stream] generation:end listener threw \u2014 ignored",{error:q instanceof Error?q.message:String(q)})}O._disableToolCacheForCurrentRequest=!1,I(),n.setAttribute("neurolink.response_time_ms",Date.now()-o),n.setAttribute(Se.NL_OUTPUT_LENGTH,A.length);let te=!!(M.error||V);n.setAttribute(Se.GEN_AI_FINISH_REASON,te?"error":"stop"),M.fallbackAttempted&&(n.setAttribute("neurolink.fallback_triggered",!0),M.fallbackProvider&&n.setAttribute("neurolink.fallback_provider",M.fallbackProvider)),te?n.setStatus({code:Ie.ERROR,message:M.error||(V instanceof Error?V.message:String(V))}):n.setStatus({code:Ie.OK}),n.end(),A.trim()&&g.info("[NeuroLink.stream] stream() - COMPLETE SUCCESS",{provider:f,model:u.model,responseTimeMs:Date.now()-s,contentLength:A.length,fallback:M.fallbackAttempted}),await O.storeStreamConversationMemory({enhancedOptions:u,providerName:f,originalPrompt:c,accumulatedContent:A,startTime:s,eventSequence:R})}})(),U=await this.processStreamResult($,u,d);return U.finishReason=C.finishReason||U.finishReason,U.toolCalls=C.toolCalls,U.toolResults=C.toolResults,U.usage||(U.usage=h),U.analytics||(U.analytics=w),Promise.resolve(U.analytics).then(V=>{V?.cost&&V.cost>0&&(this._sessionCostUsd+=V.cost)}).catch(()=>{}),this.emitStreamEndEvents(U),this.createStreamResponse(U,$,{providerName:f,options:t,startTime:s,responseTime:Date.now()-s,streamId:a,fallback:M.fallbackAttempted,guardrailsBlocked:M.guardrailsBlocked,error:M.error,events:R,providerMetadata:k})}catch(u){if(t.disableInternalFallback)throw u;return this.handleStreamError(u,t,s,a,void 0,void 0)}}async synthesizeStreamModeTwo(e){let{ttsOptions:t,providerName:n,fallbackProvider:o,accumulatedContent:s,ttsResolver:i}=e;if(!t?.enabled||!t.useAiResponse||s.trim().length===0)return i?.(void 0),{};try{let{TTSProcessor:a}=await Promise.resolve().then(()=>(ha(),py)),c=t.provider??o??n,l=c&&a.supports(c)?c:void 0;if(!l)throw new Error(`No TTS provider resolved for stream Mode 2 (set tts.provider explicitly \u2014 chat provider "${c??"<unset>"}" is not a registered TTS handler)`);let u=await a.synthesize(s,l,t);return i?.(u),{audioChunk:{type:"tts_audio",audio:{data:u.buffer,format:u.format,index:0,isFinal:!0,cumulativeSize:u.size,voice:u.voice,sampleRate:u.sampleRate}}}}catch(a){return g.warn(`[NeuroLink.stream] Stream TTS Mode 2 synthesis failed: ${a instanceof Error?a.message:String(a)}`),i?.(void 0),{}}}async prepareStreamOptions(e,t,n,o){if(await this.initializeConversationMemoryForGeneration(t,n,o),await this.initializeMCP(),this.shouldReadMemory(e.memory,e.context?.userId)&&e.context?.userId)try{e.input.text=await this.retrieveMemory(e.input.text??"",e.context.userId,e.memory?.additionalUsers),g.debug("Memory retrieval successful")}catch(a){g.warn("Memory retrieval failed:",a)}if(await this.applySkillsAugmentation(e),this.enableOrchestration&&!e.provider&&!e.model)try{let a=await this.applyStreamOrchestration(e);g.debug("Stream orchestration applied",{originalProvider:e.provider||"auto",orchestratedProvider:a.provider,orchestratedModel:a.model,prompt:e.input.text?.substring(0,100)}),e={...e,...a},a.model&&(e.model=Qk(e.model,this.modelAliasConfig))}catch(a){g.warn("Stream orchestration failed, continuing with original options",{error:a instanceof Error?a.message:String(a),originalProvider:e.provider||"auto"})}if(await this.autoDisableOllamaStreamTools(e),e.rag?.files?.length)try{let{prepareRAGTool:a}=await Promise.resolve().then(()=>(pW(),zpe)),c=await a(e.rag,e.provider);e.tools||(e.tools={}),e.tools[c.toolName]=c.tool;let l=[`
|
|
2205
2205
|
|
|
2206
|
-
IMPORTANT: You have a tool called "${c.toolName}" that searches through`,`${c.filesLoaded} loaded document(s) containing ${c.chunksIndexed} indexed chunks.`,`ALWAYS use the "${c.toolName}" tool FIRST to answer the user's question before using any other tools.`,"This tool searches your local knowledge base of pre-loaded documents and is the primary source of truth.","Do NOT use websearchGrounding or any web search tools when the answer can be found in the loaded documents."].join(" ");e.systemPrompt=(e.systemPrompt||"")+l,g.info("[RAG] Tool injected into stream()",{toolName:c.toolName,filesLoaded:c.filesLoaded,chunksIndexed:c.chunksIndexed})}catch(a){g.warn("[RAG] Failed to prepare RAG tool, continuing without RAG",{error:a instanceof Error?a.message:String(a)})}let s=U3e(e),i=F3e(e);if(e.input?.text){let{toolResults:a,enhancedPrompt:c}=await this.detectAndExecuteTools(e.input.text,void 0);c!==e.input.text&&(i.input.text=c)}return{enhancedOptions:i,factoryResult:s}}async autoDisableOllamaStreamTools(e){if((e.provider==="ollama"||e.provider?.toLowerCase().includes("ollama"))&&!e.disableTools){let{ModelConfigurationManager:t}=await Promise.resolve().then(()=>(Xy(),fUe)),s=t.getInstance().getProviderConfiguration("ollama")?.modelBehavior?.toolCapableModels||[],i=e.model;s.length>0&&i&&(s.some(c=>i.toLowerCase().includes(c.toLowerCase()))||(e.disableTools=!0,g.debug("Auto-disabled tools for Ollama model that doesn't support them (stream)",{model:e.model,toolCapableModels:s.slice(0,3)})))}}setupStreamEventListeners(){let e=[],t=0,n=(d,p)=>{e.push({type:d,seq:t++,timestamp:Date.now(),...p&&typeof p=="object"?p:{data:p}})},o=(...d)=>{let p=d[0];n("response:chunk",{content:p})},s=(...d)=>{let p=d[0];n("tool:start",{...p,toolName:p.toolName??p.tool})},i=(...d)=>{let p=d[0],f=p.toolName??p.tool,h=p.responseTime??p.duration,y=p.success??(p.error!==void 0?!1:void 0),x={...p,toolName:f,...h!==void 0?{responseTime:h}:{},...y!==void 0?{success:y}:{},...p.error!==void 0?{error:p.error}:{}};n("tool:end",x),x.result&&x.result.uiComponent===!0&&n("ui-component",{toolName:f,componentData:x.result,timestamp:Date.now(),...y!==void 0?{success:y}:{},...h!==void 0?{responseTime:h}:{}})},a=(...d)=>{n("ui-component",d[0])},c=(...d)=>{n("hitl:confirmation-request",d[0])},l=(...d)=>{n("hitl:confirmation-response",d[0])};return this.emitter.on("response:chunk",o),this.emitter.on("tool:start",s),this.emitter.on("tool:end",i),this.emitter.on("ui-component",a),this.emitter.on("hitl:confirmation-request",c),this.emitter.on("hitl:confirmation-response",l),{eventSequence:e,cleanup:()=>{this.emitter.off("response:chunk",o),this.emitter.off("tool:start",s),this.emitter.off("tool:end",i),this.emitter.off("ui-component",a),this.emitter.off("hitl:confirmation-request",c),this.emitter.off("hitl:confirmation-response",l)}}}async*handleStreamFallback(e,t,n,o,s,i){e.fallbackAttempted=!0;let a="Stream completed with 0 chunks (possible guardrails block)";e.error=a;try{let h=this._metricsTraceContext,y=xe.createGenerationSpan({provider:s,model:o.model||"unknown",name:`gen_ai.${s}.stream.failed`,traceId:h?.traceId,parentSpanId:h?.parentSpanId});y=xe.endSpan(y,2),y.statusMessage=a,y.durationMs=0,this.metricsAggregator.recordSpan(y),Ze().recordSpan(y)}catch{}let c=o.fallbackProvider?.trim()||void 0,l=o.fallbackModel?.trim()||void 0,u=process.env.FALLBACK_PROVIDER?.trim()||void 0,d=process.env.FALLBACK_MODEL?.trim()||void 0,p=tC.getFallbackRoute(n||o.input.text||"",{provider:s,model:o.model||"gpt-4o",reasoning:"primary failed",confidence:.5},{fallbackStrategy:"auto"}),f={...p,provider:c??u??p.provider,model:l??d??p.model};g.warn("Retrying with fallback provider",{originalProvider:s,fallbackProvider:f.provider,fallbackModel:f.model,fallbackSource:c||l?"options":u||d?"env":"model_config",reason:a});try{let h=await dn.createProvider(f.provider,f.model,!0,void 0,void 0,this.resolveCredentials(o.credentials));h.setupToolExecutor({customTools:this.getCustomTools(),executeTool:(C,A)=>this.executeTool(C,A,{disableToolCache:o.disableToolCache})},"NeuroLink.fallbackStream");let y=o.conversationMessages!==void 0?o.conversationMessages:await Og(this.conversationMemory,{prompt:o.input.text,context:o.context}),x=await h.stream({...o,model:f.model,conversationMessages:y}),b=x.toolCalls??[],T=x.toolResults??[];(b.length>0||T.length>0)&&(t.toolCalls=b,t.toolResults=T,t.finishReason=x.finishReason??t.finishReason);let w=0,k=0;for await(let C of x.stream){w++;let A=C!==null&&typeof C=="object"&&"metadata"in C&&C.metadata?.noOutput===!0,P=C&&"content"in C&&typeof C.content=="string"&&C.content.length>0,R=C!==null&&typeof C=="object"&&"type"in C&&(C.type==="audio"||C.type==="tts_audio"||C.type==="image");!A&&(P||R)&&k++,C&&"content"in C&&typeof C.content=="string"&&(i(C.content),this.emitter.emit("response:chunk",C.content)),yield C}if(k===0&&b.length===0&&T.length===0)throw new Error(`Fallback provider ${f.provider} also returned 0 real output chunks (chunkCount=${w}, sentinel-only or empty)`);e.fallbackProvider=f.provider,e.fallbackModel=f.model,e.guardrailsBlocked=!0}catch(h){let y=h instanceof Error?h.message:String(h);throw e.error=`${a}; Fallback failed: ${y}`,g.error("Fallback provider failed",{fallbackProvider:f.provider,error:y}),h}}async storeStreamConversationMemory(e){let{enhancedOptions:t,providerName:n,originalPrompt:o,accumulatedContent:s,startTime:i,eventSequence:a}=e;g.shouldLog("debug")&&g.debug("[NeuroLink.stream] Preparing to store conversation turn in memory",{options:m0(f0(t)),sessionId:t.context?.sessionId});let c=a.some(l=>l.type==="tool:start"||l.type==="tool:end");if(!s.trim()&&!c){g.warn("[NeuroLink.stream] Skipping conversation turn storage \u2014 no text content or tool activity",{sessionId:t.context?.sessionId});return}if(g.shouldLog("debug")&&g.debug("[NeuroLink.stream] Storing conversation turn in memory",{options:m0(f0(t)),sessionId:t.context?.sessionId,conversationMemoryExists:!!this.conversationMemory}),this.conversationMemory&&t.context?.sessionId){let l=t.context?.sessionId,u=t.context?.userId,d;t.model&&(d={provider:n,model:t.model});let p=Date.now();try{let f=this.drainPendingSkillMessages(l);await this.conversationMemory.storeConversationTurn({sessionId:l,userId:u,userMessage:o??"",aiResponse:s,startTimeStamp:new Date(i),providerDetails:d,enableSummarization:t.enableSummarization,events:a.length>0?a:void 0,requestId:t.context?.requestId,...f.length>0?{skillMessages:f}:{}}),this.recordMemorySpan("memory.store",{"memory.operation":"store","memory.path":"stream"},Date.now()-p,1),g.debug("[NeuroLink.stream] Stored conversation turn with events",{sessionId:l,eventCount:a.length,eventTypes:[...new Set(a.map(h=>h.type))]})}catch(f){this.recordMemorySpan("memory.store",{"memory.operation":"store","memory.path":"stream"},Date.now()-p,2,f instanceof Error?f.message:String(f)),g.warn("Failed to store stream conversation turn",{error:f instanceof Error?f.message:String(f)})}}this.shouldWriteMemory(t.memory,t.context?.userId,s)&&this.storeMemoryInBackground(o??"",s.trim(),t.context?.userId,t.memory?.additionalUsers,t.context)}async validateStreamInput(e){let t=process.hrtime.bigint();g.debug("[NeuroLink] \u{1F3AF} LOG_POINT_003_VALIDATION_START",{logPoint:"003_VALIDATION_START",validationStartTimeNs:t.toString(),message:"Starting comprehensive input validation process"});let n=typeof e?.input?.text=="string"&&e.input.text.trim().length>0,o=!!(e?.input?.audio&&e.input.audio.frames&&typeof e.input.audio.frames[Symbol.asyncIterator]=="function"),s=!!(e?.stt?.enabled&&e?.stt?.audio);if(!n&&!o&&!s)throw new Error("Stream options must include either input.text, input.audio, or stt.audio")}emitStreamStartEvents(e,t){this.emitter.emit("stream:start",{provider:e.provider||"auto",timestamp:t}),this.emitter.emit("response:start"),this.emitter.emit("message",`Starting ${e.provider||"auto"} stream...`)}async createMCPStream(e){let t=await Nx(e.provider),n=await dn.createProvider(t,e.model,!e.disableTools,this,e.region,this.resolveCredentials(e.credentials));n.setTraceContext(this._metricsTraceContext),n.setupToolExecutor({customTools:this.getCustomTools(),executeTool:(h,y)=>this.executeTool(h,y,{disableToolCache:e.disableToolCache})},"NeuroLink.createMCPStream");let o=await this.getAllAvailableTools();o=this.applyToolInfoFiltering(o,e);let s=e.skipToolPromptInjection?e.systemPrompt||"":this.createToolAwareSystemPrompt(e.systemPrompt,o),i=e.conversationMessages!==void 0,a=i?e.conversationMessages:await Og(this.conversationMemory,{...e,prompt:e.input.text,context:e.context});e.conversationMessages=a;let c=a,l=Qc({provider:t,model:e.model,maxTokens:e.maxTokens,systemPrompt:s,conversationMessages:c,currentPrompt:e.input.text,toolDefinitions:o}),u=c?.length||0,d=this.getCompactionSessionId(e),p=u>0;if(!l.withinBudget&&!p){try{this.emitter.emit("compaction.insufficient",{stagesAttempted:["pre-dispatch hard cap"],finalTokens:l.estimatedInputTokens,budget:l.availableInputTokens,provider:t,model:e.model,phase:"pre-dispatch-no-recovery",timestamp:Date.now()})}catch{}throw new ql(`Stream context exceeds model budget and no compaction is possible (no conversationMemory, no inline conversationMessages \u2014 only prompt + tools). Estimated: ${l.estimatedInputTokens} tokens, budget: ${l.availableInputTokens} tokens. Reduce prompt or tool-definition size, or trim the request.`,{estimatedTokens:l.estimatedInputTokens,availableTokens:l.availableInputTokens,stagesUsed:[],breakdown:l.breakdown})}if(l.shouldCompact&&(i||this.conversationMemory)&&u>(this.lastCompactionMessageCount.get(d)??0)){let y=await new bx({provider:t,summarizationProvider:this.conversationMemoryConfig?.conversationMemory?.summarizationProvider,summarizationModel:this.conversationMemoryConfig?.conversationMemory?.summarizationModel}).compact(c,l.availableInputTokens,this.conversationMemoryConfig?.conversationMemory,e.context?.requestId);y.compacted&&(c=xk(y.messages).messages,e.conversationMessages=c,this.lastCompactionMessageCount.set(d,c.length));let x=Qc({provider:t,model:e.model,maxTokens:e.maxTokens,systemPrompt:s,conversationMessages:c,currentPrompt:e.input.text,toolDefinitions:o});if(!x.withinBudget){g.warn("[NeuroLink] Stream: post-compaction still over budget, emergency truncation",{estimatedTokens:x.estimatedInputTokens,availableTokens:x.availableInputTokens,overagePercent:Math.round((x.usageRatio-1)*100)});try{this.emitter.emit("compaction.insufficient",{stagesAttempted:y.stagesUsed,finalTokens:x.estimatedInputTokens,budget:x.availableInputTokens,provider:t,model:e.model,phase:"mid-compaction",willEmergencyTruncate:!0,timestamp:Date.now()})}catch{}c=fH(c,x.availableInputTokens,x.breakdown,t),e.conversationMessages=c;let b=Qc({provider:t,model:e.model,maxTokens:e.maxTokens,systemPrompt:s,conversationMessages:c,currentPrompt:e.input.text,toolDefinitions:o});if(!b.withinBudget){this.lastCompactionMessageCount.delete(d);try{this.emitter.emit("compaction.insufficient",{stagesAttempted:y.stagesUsed,finalTokens:b.estimatedInputTokens,budget:b.availableInputTokens,provider:t,model:e.model,phase:"post-emergency-truncation",timestamp:Date.now()})}catch{}throw new ql(`Stream context exceeds model budget after all compaction stages. Estimated: ${b.estimatedInputTokens} tokens, Budget: ${b.availableInputTokens} tokens.`,{estimatedTokens:b.estimatedInputTokens,availableTokens:b.availableInputTokens,stagesUsed:y.stagesUsed,breakdown:b.breakdown})}}}if(this.modelPool){let h=this.modelPool,y=h.maxAttempts,x=new Set,b=null;for(let T=0;T<y;T++){if(e.abortSignal?.aborted)throw new DOMException("The operation was aborted","AbortError");let w=h.selectNext(x);if(!w)break;x.add(h.memberKey(w));let k=w.provider,C=w.model??void 0,A=w.region??void 0;g.debug(`[createMCPStream] ModelPool: attempting member ${k}`,{model:C,attempt:T});try{let P=await dn.createProvider(k,C,!e.disableTools,this,A,this.resolveCredentials(e.credentials));P.setTraceContext(this._metricsTraceContext),P.setupToolExecutor({customTools:this.getCustomTools(),executeTool:(O,F)=>this.executeTool(O,F,{disableToolCache:e.disableToolCache})},"NeuroLink.createMCPStream");let R=await P.stream({...e,provider:k,model:C,region:A,systemPrompt:s,conversationMessages:c});g.debug("[createMCPStream] ModelPool stream handle obtained",{provider:k});let I=w;return{stream:(async function*(){try{yield*R.stream,h.recordSuccess(I)}catch(O){throw h.recordFailure(I,Ux(O)),O}})(),provider:k,usage:R.usage,model:R.model||C,finishReason:R.finishReason,toolCalls:R.toolCalls??[],toolResults:R.toolResults??[],analytics:R.analytics,metadata:R.metadata}}catch(P){if(Hr(P))throw P;if(DW(P)){let R=P instanceof Error?P.message:String(P);throw h.recordFailure(w,Ux(P)),new Error(`[ModelPool] non-retryable: ${R}`,{cause:P})}h.recordFailure(w,Ux(P)),b=P instanceof Error?P:new Error(String(P)),g.warn(`[createMCPStream] ModelPool: member ${k} failed`,{error:b.message})}}throw new Error(`[ModelPool] all stream members failed: ${b?.message??"no stream members available"}`)}let f=await n.stream({...e,systemPrompt:s,conversationMessages:c});return g.debug("[createMCPStream] Stream created successfully",{provider:t,systemPromptPassedLength:s.length}),{stream:f.stream,provider:t,usage:f.usage,model:f.model||e.model,finishReason:f.finishReason,toolCalls:f.toolCalls??[],toolResults:f.toolResults??[],analytics:f.analytics,metadata:f.metadata}}async processStreamResult(e,t,n){return{content:"",usage:void 0,finishReason:"stop",toolCalls:[],toolResults:[],analytics:void 0,evaluation:void 0}}emitStreamEndEvents(e){this.emitter.emit("stream:end",{responseTime:Date.now(),timestamp:Date.now()}),this.emitter.emit("response:end",e.content||"")}createStreamResponse(e,t,n){return{stream:t,provider:n.providerName,model:n.options.model,usage:e.usage,finishReason:e.finishReason,toolCalls:e.toolCalls,toolResults:e.toolResults,analytics:e.analytics,evaluation:e.evaluation,events:n.events&&n.events.length>0?n.events:void 0,metadata:Object.assign(n.providerMetadata??{},{streamId:n.streamId,startTime:n.startTime,responseTime:n.responseTime,fallback:n.fallback||!1,guardrailsBlocked:n.guardrailsBlocked,error:n.error})}}async handleStreamError(e,t,n,o,s,i){if(e instanceof ql)throw e;g.error("Stream generation failed, attempting fallback",{error:e instanceof Error?e.message:String(e)});try{this.emitter.emit("stream:error",{content:e instanceof Error?e.message:String(e),metadata:{errorName:e instanceof Error?e.name:"UnknownError",durationMs:Date.now()-n,chunkCount:0},provider:t.provider||"unknown",model:t.model||"unknown"})}catch{}let a=t.input.text,c=Date.now()-n,l=await Nx(t.provider),d=await(await dn.createProvider(l,t.model,!0,void 0,void 0,this.resolveCredentials(t.credentials))).stream({input:{text:t.input.text},model:t.model,temperature:t.temperature,maxTokens:t.maxTokens,conversationMessages:t.conversationMessages}),p="";return{stream:(async function*(h){try{for await(let y of d.stream)y&&"content"in y&&typeof y.content=="string"&&(p+=y.content,h.emitter.emit("response:chunk",y.content)),yield y}finally{if(p.trim()){g.info("[NeuroLink.handleStreamError] stream() - COMPLETE SUCCESS (fallback)",{provider:l,model:t.model,responseTimeMs:Date.now()-n,contentLength:p.length});try{h.emitter.emit("stream:complete",{content:p,provider:l,model:t.model||"unknown",finishReason:"stop",metadata:{durationMs:Date.now()-n,chunkCount:0,totalLength:p.length,isFallback:!0,finishReason:"stop"}})}catch{}}if(h.conversationMemory&&s?.context?.sessionId&&p.trim()){let y=s?.context?.sessionId,x=s?.context?.userId,b;t.model&&(b={provider:l,model:t.model});let T=Date.now();try{let w=y||t.context?.sessionId,k=h.drainPendingSkillMessages(w);await h.conversationMemory.storeConversationTurn({sessionId:w,userId:x||t.context?.userId,userMessage:a??"",aiResponse:p,startTimeStamp:new Date(n),providerDetails:b,enableSummarization:s?.enableSummarization,requestId:s?.context?.requestId||t.context?.requestId,...k.length>0?{skillMessages:k}:{}}),h.recordMemorySpan("memory.store",{"memory.operation":"store","memory.path":"fallback-stream"},Date.now()-T,1)}catch(w){h.recordMemorySpan("memory.store",{"memory.operation":"store","memory.path":"fallback-stream"},Date.now()-T,2,w instanceof Error?w.message:String(w)),g.warn("Failed to store fallback stream conversation turn",{error:w instanceof Error?w.message:String(w)})}}}})(this),provider:l,model:t.model,usage:d.usage,finishReason:d.finishReason||"stop",toolCalls:d.toolCalls||[],toolResults:d.toolResults||[],analytics:d.analytics,evaluation:d.evaluation,metadata:{streamId:o,startTime:n,responseTime:c,fallback:!0}}}getEventEmitter(){return this.emitter}getToolDedupConfig(){return this.toolDedupConfig}async checkCredentials(e){let{provider:t,model:n}=e,o="ping";try{return await this.generate({provider:t,...n&&{model:n},input:{text:o},maxTokens:16,disableTools:!0}),{provider:t,status:"ok",detail:"credentials valid"}}catch(s){let i=s instanceof Error?s.message:String(s),a=i.toLowerCase();return s instanceof um?{provider:t,status:"denied",detail:i}:a.includes("authentication")||a.includes("401")||a.includes("invalid api key")||a.includes("incorrect api key")||a.includes("api_key_invalid")||a.includes("token has expired")||a.includes("expired credentials")?{provider:t,status:"expired",detail:i}:a.includes("not configured")||a.includes("missing api")||a.includes("api key is required")||a.includes("no api key")||a.includes("application default credentials")||a.includes("google_application_credentials")||a.includes("project_id")||a.includes("default credentials")||a.includes("service account")?{provider:t,status:"missing",detail:i}:a.includes("econnrefused")||a.includes("enotfound")||a.includes("could not resolve")||a.includes("timeout")||a.includes("network")||a.includes("cannot connect")?{provider:t,status:"network",detail:i}:{provider:t,status:"unknown",detail:i}}}emitToolStart(e,t,n=Date.now()){let o=`${e}-${n}-${Math.random().toString(36).substr(2,9)}`,s={executionId:o,tool:e,startTime:n,metadata:{inputType:typeof t,hasInput:t!=null}};return this.activeToolExecutions.set(o,s),this.currentStreamToolExecutions.push(s),this.emitter.emit("tool:start",Hf(e,{input:t,timestamp:n,executionId:o})),g.debug(`tool:start emitted for ${e}`,{toolName:e,executionId:o,timestamp:n,inputProvided:t!==void 0}),o}emitToolEnd(e,t,n,o,s=Date.now(),i){let a=o||s-1e3,c=s-a,l=!n,u;i?u=this.activeToolExecutions.get(i):u=Array.from(this.activeToolExecutions.values()).find(f=>f.tool===e&&!f.endTime);let d=i||u?.executionId||`${e}-${a}-fallback-${Math.random().toString(36).substr(2,9)}`;u&&(u.endTime=s,u.result=t,u.error=n,this.activeToolExecutions.delete(u.executionId));let p={tool:e,startTime:a,endTime:s,duration:c,success:l,result:t,error:n,executionId:d,metadata:{toolCategory:"custom"}};this.toolExecutionHistory.push(p),this.emitter.emit("tool:end",Hf(e,{result:t,error:n,success:l,responseTime:c,timestamp:s,duration:c,executionId:d})),g.debug(`tool:end emitted for ${e}`,{toolName:e,executionId:d,duration:c,success:l,hasResult:t!==void 0,hasError:!!n})}getCurrentToolExecutions(){return[...this.currentStreamToolExecutions]}getToolExecutionHistory(){return[...this.toolExecutionHistory]}clearCurrentStreamExecutions(){this.currentStreamToolExecutions=[]}registerTool(e,t,n){this.invalidateToolCache(),this.emitter.emit("tools-register:start",{toolName:e,timestamp:Date.now()});try{if(!e||typeof e!="string")throw new Error("Invalid tool name");if(!t||typeof t!="object")throw new Error(`Invalid tool object provided for tool: ${e}`);if(typeof t.execute!="function")throw new Error(`Tool '${e}' must have an execute method.`);if(e.trim()==="")throw new Error("Tool name cannot be empty");if(e.length>100)throw new Error("Tool name is too long (maximum 100 characters)");if(/[\x00-\x1F\x7F]/.test(e))throw new Error("Tool name contains invalid control characters");let o={name:t.name||e,description:t.description||e,execute:t.execute,inputSchema:"parameters"in t&&t.parameters&&(pP(t.parameters)||typeof t.parameters=="object")?t.parameters:t.inputSchema||{}};if(n?.timeout!==void 0&&n.timeout>0&&Number.isFinite(n.timeout)&&typeof o.execute=="function"){let i=o.execute,a=n.timeout,c=e;o.execute=async(...l)=>{let u=AbortSignal.timeout(a),d=l[1],p=d?.abortSignal,f=p?AbortSignal.any([p,u]):u,h={...d,abortSignal:f};return Promise.race([i(l[0],h),new Promise((y,x)=>{f.addEventListener("abort",()=>{u.aborted?x(me.toolTimeout(c,a)):x(new DOMException("The operation was aborted","AbortError"))},{once:!0})})])}}let s=Nqe(e,o,n?.timeout,n?.maxRetries);this.toolRegistry.registerServer(s),this.emitter.emit("tools-register:end",{toolName:e,success:!0,timestamp:Date.now(),timeoutMs:n?.timeout})}catch(o){throw g.error(`Failed to register tool ${e}:`,o),o}}setToolContext(e){this.toolExecutionContext={...e},g.debug("Tool execution context updated",{sessionId:e.sessionId,contextKeys:Object.keys(e),hasJuspayToken:!!e.juspayToken,hasShopId:!!e.shopId})}getToolContext(){return this.toolExecutionContext?{...this.toolExecutionContext}:void 0}clearToolContext(){this.toolExecutionContext=void 0,g.debug("Tool execution context cleared")}registerTools(e){if(Array.isArray(e))for(let{name:t,tool:n}of e)this.registerTool(t,n);else for(let[t,n]of Object.entries(e))this.registerTool(t,n)}unregisterTool(e){this.invalidateToolCache();let t=`custom-tool-${e}`,n=this.toolRegistry.unregisterServer(t);return n&&g.info(`Unregistered custom tool: ${e}`),n}useToolMiddleware(e){return this.mcpToolMiddlewares.push(e),g.debug(`[NeuroLink] Registered tool middleware (total: ${this.mcpToolMiddlewares.length})`),this}getToolMiddlewares(){return[...this.mcpToolMiddlewares]}async flushToolBatch(){this.mcpToolBatcher&&await this.mcpToolBatcher.flush()}getMCPEnhancementsConfig(){return this.mcpEnhancementsConfig}async updateAgenticLoopReport(e,t,n){if(!this.conversationMemory)throw new Tc("Conversation memory is not initialized. Enable conversationMemory in NeuroLink options.","CONFIG_ERROR");if(!("updateAgenticLoopReport"in this.conversationMemory)||typeof this.conversationMemory.updateAgenticLoopReport!="function")throw new Tc("updateAgenticLoopReport is only supported with Redis conversation memory.","CONFIG_ERROR");await Ke(this.conversationMemory.updateAgenticLoopReport(e,n,t),5e3)}getCustomTools(){let e=this.toolRegistry.getToolsByCategory(Aa({isCustomTool:!0})),t=new Map;for(let o of e){let s=o.inputSchema||o.parameters;g.debug("Processing tool schema for Claude",{toolName:o.name,hasDescription:!!o.description,description:o.description,hasParameters:!!o.parameters,parametersType:typeof o.parameters,parametersKeys:o.parameters&&typeof o.parameters=="object"?Object.keys(o.parameters):"NOT_OBJECT",hasInputSchema:!!o.inputSchema,inputSchemaType:typeof o.inputSchema,inputSchemaKeys:o.inputSchema&&typeof o.inputSchema=="object"?Object.keys(o.inputSchema):"NOT_OBJECT",hasEffectiveSchema:!!s,effectiveSchemaType:typeof s,effectiveSchemaHasProperties:!!s?.properties,effectiveSchemaHasRequired:!!s?.required,originalInputSchema:o.inputSchema,phase:"AFTER_SCHEMA_FIX",timestamp:Date.now()}),t.set(o.name,{name:o.name,description:o.description||"",inputSchema:typeof o.inputSchema=="object"&&o.inputSchema!==null?o.inputSchema:typeof o.parameters=="object"&&o.parameters!==null?o.parameters:{},execute:async(i,a)=>{let c=this.toolExecutionContext||{},l=a&&_r(a)?a:{},u={...c,...l,sessionId:l.sessionId||c.sessionId||`fallback-${Date.now()}`};return g.debug("Tool execution context merged",{toolName:o.name,storedContextKeys:Object.keys(c),runtimeContextKeys:Object.keys(l),finalContextKeys:Object.keys(u),hasJuspayToken:!!u.juspayToken,hasShopId:!!u.shopId,sessionId:u.sessionId}),await this.toolRegistry.executeTool(o.name,i,u)}})}this.cachedFileTools||(this.cachedFileTools=nle(this.fileRegistry));let n=this.cachedFileTools;for(let[o,s]of Object.entries(n))if(!t.has(o)){let i=s,a=i.inputSchema??i.parameters;t.set(o,{name:o,description:s.description||`File tool: ${o}`,inputSchema:typeof a=="object"&&a!==null?a:{type:"object",properties:{}},execute:async c=>await s.execute(c,{toolCallId:`file-tool-${Date.now()}`,messages:[]})})}return t}async addInMemoryMCPServer(e,t){this.invalidateToolCache();try{ie.debug(`[NeuroLink] Registering in-memory MCP server: ${e}`),t.tools||(t.tools=[]),await this.toolRegistry.registerServer(t),ie.info(`[NeuroLink] Successfully registered in-memory server: ${e}`,{category:t.metadata?.category,provider:t.metadata?.provider,version:t.metadata?.version})}catch(n){throw ie.error(`[NeuroLink] Failed to register in-memory server ${e}:`,n),n}}getInMemoryServers(){let e=this.getInMemoryServerInfos(),t=new Map;for(let n of e)t.set(n.id,n);return t}getInMemoryServerInfos(){return this.toolRegistry.getBuiltInServerInfos().filter(t=>Aa({existingCategory:t.metadata?.category,serverId:t.id})==="in-memory")}getAutoDiscoveredServerInfos(){return this.autoDiscoveredServerInfos}async executeTool(e,t={},n){if(this.mcpToolBatcher&&!n?.bypassBatcher)return this.mcpToolBatcher.execute(e,t);let o=this.createToolExecutionContext(e,t,n);return _e.mcp.startActiveSpan("neurolink.tool.execute",{attributes:{"tool.name":e,"tool.type":o.toolType,"tool.input_size":o.inputSize,"tool.input_preview":o.truncatedInput}},s=>this.executeToolWithSpan(e,t,n,o,s))}createToolExecutionContext(e,t,n){let o=this.externalServerManager.getAllTools().find(l=>l.name===e),s=o?"mcp":this.getCustomTools().has(e)?"custom":"external",i=t?jm(t):"",a=Date.now(),c=`${e}-${a}-${Math.random().toString(36).slice(2,11)}`;return{functionTag:"NeuroLink.executeTool",executionStartTime:a,executionId:c,externalTool:o,toolType:s,inputSize:i.length,truncatedInput:i.length>2048?i.substring(0,2048):i,options:n,hitlState:{triggered:!1}}}async executeToolWithSpan(e,t,n,o,s){try{let i=await this.prepareToolExecutionState(e,t,n,o);return await this.runPreparedToolExecution(e,t,i,o,s)}catch(i){if(!(i instanceof Fe)){let a=i instanceof Error?i.message:String(i);s.recordException(i instanceof Error?i:new Error(a)),s.setStatus({code:Ie.ERROR,message:a})}throw i}finally{s.end()}}async prepareToolExecutionState(e,t,n,o){g.debug(`[${o.functionTag}] Tool execution requested:`,{toolName:e,params:_r(t)?XB(t):t,hasExternalManager:!!this.externalServerManager}),g.debug("Tool execution detailed analysis",{toolName:e,executionStartTime:o.executionStartTime,paramsAnalysis:{type:typeof t,isNull:t===null,isUndefined:t===void 0,isEmpty:t&&typeof t=="object"&&Object.keys(t).length===0,keys:t&&typeof t=="object"?Object.keys(t):"NOT_OBJECT",keysLength:t&&typeof t=="object"?Object.keys(t).length:0},isTargetTool:e==="juspay-analytics_SuccessRateSRByTime",options:n,hasExternalManager:!!this.externalServerManager}),this.emitter.emit("tool:start",Hf(e,{timestamp:o.executionStartTime,input:t,executionId:o.executionId}));let s=this.toolRegistry.getToolInfo(e),i={timeout:n?.timeout??s?.tool?.timeoutMs??gl.EXECUTION_BATCH_MS,maxRetries:n?.maxRetries??s?.tool?.maxRetries??Ko.DEFAULT,retryDelayMs:n?.retryDelayMs||Qn.BASE_MS,authContext:n?.authContext,disableToolCache:n?.disableToolCache},{MemoryManager:a}=await Promise.resolve().then(()=>(dC(),uC)),c=a.getMemoryUsageMB(),u=`${o.externalTool?.serverId||s?.tool?.serverId||"unknown"}.${e}`,d=this.toolCircuitBreakers.get(u);d||(d=new mE(GI.FAILURE_THRESHOLD,j2),this.toolCircuitBreakers.set(u,d));let p=this.toolExecutionMetrics.get(e);return p||(p={totalExecutions:0,successfulExecutions:0,failedExecutions:0,averageExecutionTime:0,lastExecutionTime:0,errorCategories:{}},this.toolExecutionMetrics.set(e,p)),p.totalExecutions++,{finalOptions:i,startMemory:c,circuitBreaker:d,breakerKey:u,metrics:p}}async runPreparedToolExecution(e,t,n,o,s){let i=0;try{ie.debug(`[${o.functionTag}] Executing tool: ${e}`,{toolName:e,params:t,options:n.finalOptions,circuitBreakerState:n.circuitBreaker.getState()});let a=await n.circuitBreaker.execute(async()=>$Z(async()=>Ke(this.executeToolInternal(e,t,n.finalOptions,o.hitlState),n.finalOptions.timeout,me.toolTimeout(e,n.finalOptions.timeout)),{maxAttempts:n.finalOptions.maxRetries+1,delayMs:n.finalOptions.retryDelayMs,isRetriable:eB,onRetry:(c,l)=>{i=c,ie.warn(`[${o.functionTag}] Retrying tool execution (attempt ${c})`,{toolName:e,error:l.message,attempt:c})}}));return s.setAttribute("tool.retry_count",i),await this.handleSuccessfulToolExecution(e,a,n,o,s)}catch(a){return s.setAttribute("tool.retry_count",i),this.handleFailedToolExecution(e,t,a,n,o,s)}}async handleSuccessfulToolExecution(e,t,n,o,s){let i=Date.now()-o.executionStartTime;n.metrics.successfulExecutions++,n.metrics.lastExecutionTime=i,n.metrics.averageExecutionTime=(n.metrics.averageExecutionTime*(n.metrics.successfulExecutions-1)+i)/n.metrics.successfulExecutions;let{MemoryManager:a}=await Promise.resolve().then(()=>(dC(),uC)),l=a.getMemoryUsageMB().heapUsed-n.startMemory.heapUsed;l>20&&ie.warn(`Tool '${e}' used excessive memory: ${l}MB`,{toolName:e,memoryDelta:l,executionTime:i}),ie.debug(`[${o.functionTag}] Tool executed successfully`,{toolName:e,executionTime:i,memoryDelta:l,circuitBreakerState:n.circuitBreaker.getState()});let u=t&&typeof t=="object"?t:void 0,d=u&&"isError"in u&&u.isError===!0||u&&"success"in u&&u.success===!1,p=d?u?.content:void 0,f=d?p?.filter(h=>h.type==="text"&&h.text).map(h=>h.text).join(" ")||(typeof u?.error=="string"?u.error:"Unknown error"):void 0;if(d){try{await n.circuitBreaker.execute(async()=>{throw new Error(`Tool ${e} returned isError:true`)})}catch{}ie.debug(`[${o.functionTag}] Circuit breaker failure recorded for isError result`,{toolName:e,circuitBreakerState:n.circuitBreaker.getState(),circuitBreakerFailures:n.circuitBreaker.getFailureCount()});let h=WCr(f??"Unknown error"),y=`[TOOL_ERROR: ${e} failed (${h})] `;if(u&&Array.isArray(p)){let T=p.map(w=>({...w}));for(let w of T)if(w.type==="text"&&w.text){w.text=y+w.text;break}u.content=T}s.setAttribute("tool.error.message",(f??"Unknown error").substring(0,500)),s.setAttribute("tool.error.category",h),s.setStatus({code:Ie.ERROR,message:`MCP tool returned isError: ${(f??"Unknown error").substring(0,200)}`}),n.metrics.failedExecutions++;let x=n.metrics.successfulExecutions;n.metrics.successfulExecutions=Math.max(0,n.metrics.successfulExecutions-1),n.metrics.averageExecutionTime=x>1?(n.metrics.averageExecutionTime*x-i)/(x-1):0;let b=KCr(h);n.metrics.errorCategories[b]=(n.metrics.errorCategories[b]||0)+1}return this.emitToolEndEvent(e,o.executionStartTime,!d,t,d&&f?new Error(f):void 0,o.executionId),s.setAttribute("tool.result.status",d?"error":"success"),s.setAttribute("tool.duration_ms",i),t}async handleFailedToolExecution(e,t,n,o,s,i){o.metrics.failedExecutions++;let a=Date.now()-s.executionStartTime;if(n instanceof bc)return ie.warn(`[${s.functionTag}] Tool blocked by circuit breaker: ${e}`,{toolName:e,breakerState:n.breakerState,retryAfter:n.retryAfter,retryAfterMs:n.retryAfterMs,failureCount:n.failureCount,executionTime:a}),o.metrics.errorCategories.execution=(o.metrics.errorCategories.execution||0)+1,this.emitToolEndEvent(e,s.executionStartTime,!1,void 0,new Error(`Circuit breaker open for ${e} (state=${n.breakerState}, failures=${n.failureCount})`),s.executionId),i.setAttribute("tool.result.status","circuit_breaker_open"),i.setAttribute("tool.duration_ms",a),i.setAttribute("tool.circuit_breaker.state",n.breakerState),i.setAttribute("tool.circuit_breaker.retry_after_ms",n.retryAfterMs),i.setAttribute("tool.circuit_breaker.failure_count",n.failureCount),i.setStatus({code:Ie.ERROR,message:`Circuit breaker open for ${e}: ${n.message}`}),{isError:!0,content:[{type:"text",text:`TOOL TEMPORARILY UNAVAILABLE: "${e}" has been disabled after ${n.failureCount} failures. This is a circuit breaker protection \u2014 do NOT retry this tool. It will become available again after ${Math.ceil(n.retryAfterMs/1e3)} seconds (at ${n.retryAfter}). Instead, inform the user that the operation failed and suggest trying again later.`}]};let c;if(n instanceof Fe)c=n;else if(n instanceof Error)if(n.message.includes("timeout"))c=me.toolTimeout(e,o.finalOptions.timeout);else if(n.message.includes("not found")){let u=await this.getAllAvailableTools();c=me.toolNotFound(e,APe(u.map(d=>({name:d.name}))))}else n.message.includes("validation")||n.message.includes("parameter")?c=me.invalidParameters(e,n,t):n.message.includes("network")||n.message.includes("connection")?c=me.networkError(e,n):c=me.toolExecutionFailed(e,n);else c=me.toolExecutionFailed(e,new Error(String(n)));let l=c.category||"execution";throw o.metrics.errorCategories[l]=(o.metrics.errorCategories[l]||0)+1,this.emitToolEndEvent(e,s.executionStartTime,!1,void 0,c,s.executionId),this.emitter.listenerCount("error")>0&&this.emitter.emit("error",c),c=new Fe({...c,context:{...c.context,executionTime:a,params:t,options:o.finalOptions,circuitBreakerState:o.circuitBreaker.getState(),circuitBreakerFailures:o.circuitBreaker.getFailureCount(),metrics:{...o.metrics}}}),BZ(c),i.setAttribute("tool.result.status","error"),i.setAttribute("tool.duration_ms",a),i.recordException(c),i.setStatus({code:Ie.ERROR,message:c.message}),c}async executeToolInternal(e,t,n,o){let s="NeuroLink.executeToolInternal",i=this.getToolAnnotationsForExecution(e),a=this.mcpToolResultCache&&!n.disableToolCache&&!this._disableToolCacheForCurrentRequest&&!i?.destructiveHint,c=this.mcpToolResultCache,l=n.authContext||this.toolExecutionContext?{__args:t,__ctx:n.authContext??this.toolExecutionContext}:t;if(a&&c){let p=c.getCachedResult(e,l);if(p!==void 0)return g.debug(`[${s}] Cache HIT for tool: ${e}`),p}let u=async p=>{if(this.mcpToolMiddlewares.length===0)return p();let f=0,h=async()=>{if(f<this.mcpToolMiddlewares.length){let y=this.mcpToolMiddlewares[f++];return y({name:e,description:"",inputSchema:{},annotations:i,execute:async()=>({})},t,{toolMeta:{name:e,annotations:i}},h)}return p()};return await h()},d=async()=>{let p=this.externalServerManager.getAllTools(),f=p.filter(y=>y.name===e&&y.isAvailable),h;if(f.length>1&&this.mcpToolRouter)try{let y={name:e,description:f[0].description??"",serverId:f[0].serverId,inputSchema:{}},x=this.mcpToolRouter.route(y);h=f.find(b=>b.serverId===x.serverId)||f[0],g.debug(`[${s}] Router selected server: ${x.serverId}`,{strategy:x.strategy,confidence:x.confidence})}catch(y){g.warn(`[${s}] Router failed, falling back to first match`,{error:y}),h=f[0]}else h=f[0];if(g.debug(`[${s}] External MCP tool search:`,{toolName:e,externalToolsCount:p.length,foundTool:!!h,isAvailable:h?.isAvailable,serverId:h?.serverId}),h&&h.isAvailable)try{ie.debug(`[${s}] Executing external MCP tool: ${e} from ${h.serverId}`);let y=await this.externalServerManager.executeTool(h.serverId,e,t,{timeout:n.timeout});return g.debug(`[${s}] External MCP tool execution successful:`,{toolName:e,serverId:h.serverId,resultType:typeof y}),y}catch(y){throw g.error(`[${s}] External MCP tool execution failed:`,{toolName:e,serverId:h.serverId,error:y instanceof Error?y.message:String(y)}),me.toolExecutionFailed(e,y instanceof Error?y:new Error(String(y)),h.serverId)}try{let y=this.toolExecutionContext||{},x=n.authContext||{},b={...y,...x,hitlState:o};g.debug("[Using merged context for unified registry tool:",{toolName:e,storedContextKeys:Object.keys(y),finalContextKeys:Object.keys(b)});let T=await this.toolRegistry.executeTool(e,t,b);if(T&&typeof T=="object"&&"success"in T&&T.success===!1){let w=T.error||"Tool execution failed",k=new Error(w);this.emitter.listenerCount("error")>0&&this.emitter.emit("error",k)}return T}catch(y){let x=y instanceof Error?y:new Error(String(y));if(this.emitter.listenerCount("error")>0&&this.emitter.emit("error",x),y instanceof Error&&y.message.includes("not found")){let b=await this.getAllAvailableTools();throw me.toolNotFound(e,b.map(T=>T.name))}throw me.toolExecutionFailed(e,y instanceof Error?y:new Error(String(y)))}};try{let p=await u(d);return a&&c&&p!==void 0&&(c.cacheResult(e,l,p),g.debug(`[${s}] Cached result for tool: ${e}`)),p}catch(p){let f=i?{name:e,description:"",annotations:i,execute:async()=>({})}:void 0;if(f&&ON(f)&&p instanceof Error&&eB(p)){g.debug(`[${s}] Tool ${e} is safe to retry, attempting once more`);try{let h=await u(d);return a&&c&&h!==void 0&&c.cacheResult(e,l,h),h}catch{}}throw p}}getToolAnnotationsForExecution(e){if(this.toolCache?.tools){let t=this.toolCache.tools.find(n=>n.name===e);if(t?.annotations)return t.annotations}if(this.mcpEnhancementsConfig?.annotations?.autoInfer!==!1)return Du({name:e,description:""})}invalidateToolCache(){this.toolCache=null,g.debug("Tool cache invalidated")}async getAllAvailableTools(){if(this.toolCache&&Date.now()-this.toolCache.timestamp<this.toolCacheDuration)return g.debug("Returning available tools from cache"),this.toolCache.tools;let e=`get-all-tools-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,t=Date.now(),n=process.hrtime.bigint();g.debug("[NeuroLink] \u{1F6E0}\uFE0F LOG_POINT_A001_GET_ALL_TOOLS_START",{logPoint:"A001_GET_ALL_TOOLS_START",getAllToolsId:e,timestamp:new Date().toISOString(),getAllToolsStartTime:t,getAllToolsHrTimeStart:n.toString(),toolRegistryState:{hasToolRegistry:!!this.toolRegistry,toolRegistrySize:0,toolRegistryType:this.toolRegistry?.constructor?.name||"NOT_SET",hasExternalServerManager:!!this.externalServerManager,externalServerManagerType:this.externalServerManager?.constructor?.name||"NOT_SET"},mcpState:{mcpInitialized:this.mcpInitialized,hasProviderRegistry:!!dn,providerRegistrySize:0},message:"Starting comprehensive tool discovery across all sources"});let{MemoryManager:o}=await Promise.resolve().then(()=>(dC(),uC)),s=o.getMemoryUsageMB();try{let i=new Map,a=await this.toolRegistry.listTools();for(let y of a)if(!i.has(y.name)){let x=mP(y,{serverId:y.serverId==="direct"?"neurolink-direct":y.serverId});i.set(y.name,x)}let c=this.toolRegistry.getToolsByCategory(Aa({isCustomTool:!0}));for(let y of c)if(!i.has(y.name)){let x=mP(y,{description:"Custom tool",serverId:`custom-tool-${y.name}`,category:Aa({isCustomTool:!0,serverId:y.serverId}),inputSchema:{}});i.set(y.name,x)}let l=this.toolRegistry.getToolsByCategory("in-memory");for(let y of l)if(!i.has(y.name)){let x=mP(y,{description:"In-memory MCP tool",serverId:"unknown",category:"in-memory",inputSchema:{}});i.set(y.name,x)}let u=this.externalServerManager.getAllTools();for(let y of u)if(!i.has(y.name)){let x=mP(y,{category:Aa({existingCategory:typeof y.metadata?.category=="string"?y.metadata.category:void 0,isExternal:!0,serverId:y.serverId}),inputSchema:{}});i.set(y.name,x)}let d=Array.from(i.values());ie.debug("Tool discovery results",{mcpTools:a.length,customTools:c.length,inMemoryTools:l.length,externalMCPTools:u.length,total:d.length});let f=o.getMemoryUsageMB().heapUsed-s.heapUsed;if(f>cm.LOW_USAGE_MB&&(ie.debug(`\u{1F50D} Tool listing used ${f}MB memory (large tool registry detected)`),d.length>hZ.LARGE_TOOL_COLLECTION&&ie.debug("\u{1F4A1} Tool collection optimized for large sets. Memory usage reduced through efficient object reuse.")),this.mcpEnhancementsConfig?.annotations?.autoInfer!==!1)for(let y of d)y.annotations||(y.annotations=Du({name:y.name,description:y.description||""}));let h=d;return this.toolCache={tools:h,timestamp:Date.now()},h}catch(i){return ie.error("Failed to list available tools",{error:i}),[]}}async getProviderStatus(e){let{MemoryManager:t}=await Promise.resolve().then(()=>(dC(),uC)),n=t.getMemoryUsageMB();e?.quiet||ie.debug("\u{1F50D} DEBUG: Initializing MCP for provider status..."),await this.initializeMCP(),e?.quiet||ie.debug("\u{1F50D} DEBUG: MCP initialized:",this.mcpInitialized);let{AIProviderFactory:o}=await Promise.resolve().then(()=>(gu(),bW)),{hasProviderEnvVars:s}=await Promise.resolve().then(()=>(zg(),ID)),i=["openai","bedrock","vertex","googleVertex","anthropic","azure","google-ai","huggingface","ollama","mistral","litellm"],a=zm(fl.DEFAULT_CONCURRENCY_LIMIT),c=i.map(p=>a(async()=>{let f=Date.now();try{if(!await this.hasProviderEnvVars(p)&&p!=="ollama")return{provider:p,status:"not-configured",configured:!1,authenticated:!1,error:"Missing required environment variables",responseTime:Date.now()-f};if(p==="ollama")try{let T=await fetch("http://localhost:11434/api/tags",{method:"GET",signal:AbortSignal.timeout(hl.AUTH_MS)});if(!T.ok)throw new Error("Ollama service not responding");let w=await T.json(),k=w?.models;if(!Array.isArray(k))throw g.warn("Ollama API returned invalid models format in testProvider",{responseData:w,modelsType:typeof k}),new Error("Invalid models format from Ollama API");let C=k.filter(A=>A&&typeof A=="object"&&typeof A.name=="string");return C.length>0?{provider:p,status:"working",configured:!0,authenticated:!0,responseTime:Date.now()-f,model:C[0].name}:{provider:p,status:"failed",configured:!0,authenticated:!1,error:"Ollama service running but no models installed",responseTime:Date.now()-f}}catch(T){return{provider:p,status:"failed",configured:!1,authenticated:!1,error:T instanceof Error?T.message:"Ollama service not running",responseTime:Date.now()-f}}let y=5e3,x=this.testProviderConnection(p),b=new Promise((T,w)=>{setTimeout(()=>w(new Error("Provider test timeout (5s)")),y)});return await Promise.race([x,b]),{provider:p,status:"working",configured:!0,authenticated:!0,responseTime:Date.now()-f}}catch(h){let y=h instanceof Error?h.message:String(h);return{provider:p,status:"failed",configured:!0,authenticated:!1,error:y,responseTime:Date.now()-f}}})),l=await Promise.all(c),d=t.getMemoryUsageMB().heapUsed-n.heapUsed;return!e?.quiet&&d>20&&ie.debug(`\u{1F50D} Memory usage: +${d}MB (consider cleanup for large operations)`),d>50&&t.forceGC(),l}async testProvider(e){try{return await this.testProviderConnection(e),!0}catch{return!1}}async testProviderConnection(e){let{AIProviderFactory:t}=await Promise.resolve().then(()=>(gu(),bW));await(await t.createProvider(e,null)).generate({prompt:"test",maxTokens:1,disableTools:!0})}async getBestProvider(e){let{getBestProvider:t}=await Promise.resolve().then(()=>(zg(),ID));return t(e)}async getAvailableProviders(){let{getAvailableProviders:e}=await Promise.resolve().then(()=>(zg(),ID));return e()}async isValidProvider(e){let{isValidProvider:t}=await Promise.resolve().then(()=>(zg(),ID));return t(e)}async getMCPStatus(){try{await this.initializeMCP();let e=await this.toolRegistry.listTools(),t=this.externalServerManager.getStatistics(),n=this.externalServerManager.listServers(),o=this.getInMemoryServerInfos(),s=this.toolRegistry.getBuiltInServerInfos(),i=this.getAutoDiscoveredServerInfos(),a=n.length+o.length+s.length+i.length,c=t.connectedServers+o.length+s.length,l=e.length+t.totalTools;return{mcpInitialized:this.mcpInitialized,totalServers:a,availableServers:c,autoDiscoveredCount:i.length,totalTools:l,autoDiscoveredServers:i,customToolsCount:this.toolRegistry.getToolsByCategory(Aa({isCustomTool:!0})).length,inMemoryServersCount:o.length,externalMCPServersCount:n.length,externalMCPConnectedCount:t.connectedServers,externalMCPFailedCount:t.failedServers,externalMCPServers:n}}catch(e){return{mcpInitialized:!1,totalServers:0,availableServers:0,autoDiscoveredCount:0,totalTools:0,autoDiscoveredServers:[],customToolsCount:this.toolRegistry.getToolsByCategory(Aa({isCustomTool:!0})).length,inMemoryServersCount:0,externalMCPServersCount:0,externalMCPConnectedCount:0,externalMCPFailedCount:0,externalMCPServers:[],error:e instanceof Error?e.message:String(e)}}}async listMCPServers(){return[...this.externalServerManager.listServers(),...this.getInMemoryServerInfos(),...this.toolRegistry.getBuiltInServerInfos(),...this.getAutoDiscoveredServerInfos()]}async testMCPServer(e){try{if(e==="neurolink-direct")return(await this.toolRegistry.listTools()).length>0;let t=this.getInMemoryServers();if(t.has(e)){let o=t.get(e);return!!(o?.tools&&o.tools.length>0)}let n=this.externalServerManager.getServer(e);return n?n.status==="connected"&&n.client!==null:!1}catch(t){return ie.error(`[NeuroLink] Error testing MCP server ${e}:`,t),!1}}async hasProviderEnvVars(e){let{ProviderHealthChecker:t}=await Promise.resolve().then(()=>(Ox(),rC));try{let n=await t.checkProviderHealth(e,{includeConnectivityTest:!1,cacheResults:!1});return n.isConfigured&&n.hasApiKey}catch(n){return g.warn(`Provider env var check failed for ${e}`,{error:n instanceof Error?n.message:String(n)}),!1}}async checkProviderHealth(e,t={}){let{ProviderHealthChecker:n}=await Promise.resolve().then(()=>(Ox(),rC)),o=await n.checkProviderHealth(e,t);return{provider:o.provider,isHealthy:o.isHealthy,isConfigured:o.isConfigured,hasApiKey:o.hasApiKey,lastChecked:o.lastChecked,error:o.error,warning:o.warning,responseTime:o.responseTime,configurationIssues:o.configurationIssues,recommendations:o.recommendations}}async checkAllProvidersHealth(e={}){let{ProviderHealthChecker:t}=await Promise.resolve().then(()=>(Ox(),rC));return(await t.checkAllProvidersHealth(e)).map(o=>({provider:o.provider,isHealthy:o.isHealthy,isConfigured:o.isConfigured,hasApiKey:o.hasApiKey,lastChecked:o.lastChecked,error:o.error,warning:o.warning,responseTime:o.responseTime,configurationIssues:o.configurationIssues,recommendations:o.recommendations}))}async getProviderHealthSummary(){let{ProviderHealthChecker:e}=await Promise.resolve().then(()=>(Ox(),rC)),t=await e.checkAllProvidersHealth({cacheResults:!0,includeConnectivityTest:!1}),n=e.getHealthSummary(t),o=[];return n.healthy===0?o.push("No providers are healthy. Check your environment configuration."):n.healthy<2&&o.push("Consider configuring additional providers for better reliability."),n.hasIssues>0&&o.push("Some providers have configuration issues. Run checkAllProvidersHealth() for details."),{...n,recommendations:o}}async clearProviderHealthCache(e){let{ProviderHealthChecker:t}=await Promise.resolve().then(()=>(Ox(),rC));t.clearHealthCache(e)}getToolExecutionMetrics(){let e={};for(let[t,n]of this.toolExecutionMetrics.entries())e[t]={...n,errorCategories:{...n.errorCategories},successRate:n.totalExecutions>0?n.successfulExecutions/n.totalExecutions:0};return e}setModelAliasConfig(e){this.modelAliasConfig=e,g.info(`[ModelAlias] Configured ${Object.keys(e.aliases).length} model aliases`)}getToolCircuitBreakerStatus(){let e={};for(let[t,n]of this.toolCircuitBreakers.entries())e[t]={state:n.getState(),failureCount:n.getFailureCount(),isHealthy:n.getState()==="closed"};return e}resetToolCircuitBreaker(e){this.toolCircuitBreakers.has(e)&&(this.toolCircuitBreakers.set(e,new mE(GI.FAILURE_THRESHOLD,j2)),ie.info(`Circuit breaker reset for tool: ${e}`))}clearToolExecutionMetrics(){this.toolExecutionMetrics.clear(),ie.info("All tool execution metrics cleared")}async getToolHealthReport(){let e={},t=0,n=await this.toolRegistry.listTools(),o=new Set(n.map(i=>i.name)),s=new Map;for(let i of n)s.has(i.name)||s.set(i.name,i.serverId||"unknown");for(let i of o){let a=this.toolExecutionMetrics.get(i),c=`${s.get(i)||"unknown"}.${i}`,l=this.toolCircuitBreakers.get(c),u=a&&a.totalExecutions>0?a.successfulExecutions/a.totalExecutions:0,d=(!l||l.getState()==="closed")&&u>=.8;d&&t++;let p=[],f=[];if(l&&l.getState()==="open"&&(p.push("Circuit breaker is open due to repeated failures"),f.push("Check tool implementation and fix underlying issues")),u<.8&&a&&a.totalExecutions>0&&(p.push(`Low success rate: ${(u*100).toFixed(1)}%`),f.push("Review error logs and improve tool reliability")),a&&a.averageExecutionTime>1e4&&(p.push("High average execution time"),f.push("Optimize tool performance or increase timeout")),a&&a.errorCategories){let h=a.errorCategories;h.timeout>0&&(p.push(`Timeout errors: ${h.timeout}`),f.push("Consider increasing the tool timeout configuration")),h.validation>0&&(p.push(`Validation errors: ${h.validation}`),f.push("Review input schemas and parameter validation")),h.network>0&&(p.push(`Network errors: ${h.network}`),f.push("Check network connectivity and endpoint availability"))}e[i]={name:i,isHealthy:d,metrics:{totalExecutions:a?.totalExecutions||0,successRate:u,averageExecutionTime:a?.averageExecutionTime||0,lastExecutionTime:a?.lastExecutionTime||0,errorCategories:a?.errorCategories?{...a.errorCategories}:{}},circuitBreaker:{state:l?.getState()||"closed",failureCount:l?.getFailureCount()||0},issues:p,recommendations:f}}return{totalTools:o.size,healthyTools:t,unhealthyTools:o.size-t,tools:e}}async ensureConversationMemoryInitialized(){try{let e=`manual-init-${Date.now()}`;return await this.initializeConversationMemoryForGeneration(e,Date.now(),process.hrtime.bigint()),!!this.conversationMemory}catch(e){return g.error("Failed to initialize conversation memory",{error:e instanceof Error?e.message:String(e)}),!1}}async getConversationStats(){let e=`stats-init-${Date.now()}`;if(await this.initializeConversationMemoryForGeneration(e,Date.now(),process.hrtime.bigint()),!this.conversationMemory)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Conversation memory is not enabled",category:"validation",severity:"high",retriable:!1});return await this.conversationMemory.getStats()}async getConversationHistory(e){let t=`history-init-${Date.now()}`;if(await this.initializeConversationMemoryForGeneration(t,Date.now(),process.hrtime.bigint()),!this.conversationMemory)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Conversation memory is not enabled",category:"validation",severity:"high",retriable:!1});if(!e||typeof e!="string")throw new Fe({code:ut.INVALID_PARAMETERS,message:"Session ID must be a non-empty string",category:"validation",severity:"medium",retriable:!1,context:{sessionId:e}});try{let n=await this.conversationMemory.buildContextMessages(e);return g.debug("Retrieved conversation history",{sessionId:e,messageCount:n.length,turnCount:n.length/2}),n}catch(n){return g.error("Failed to retrieve conversation history",{sessionId:e,error:n instanceof Error?n.message:String(n)}),[]}}async clearConversationSession(e){let t=`clear-session-init-${Date.now()}`;if(await this.initializeConversationMemoryForGeneration(t,Date.now(),process.hrtime.bigint()),!this.conversationMemory)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Conversation memory is not enabled",category:"validation",severity:"high",retriable:!1});return this.lastCompactionMessageCount.delete(e),await this.conversationMemory.clearSession(e)}async clearAllConversations(){let e=`clear-all-init-${Date.now()}`;if(await this.initializeConversationMemoryForGeneration(e,Date.now(),process.hrtime.bigint()),!this.conversationMemory)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Conversation memory is not enabled",category:"validation",severity:"high",retriable:!1});this.lastCompactionMessageCount.clear(),await this.conversationMemory.clearAllSessions()}async storeToolExecutions(e,t,n,o,s){let i=n&&n.length>0||o&&o.length>0;if(!i){g.debug("Tool execution storage skipped",{hasToolData:i,toolCallsCount:n?.length||0,toolResultsCount:o?.length||0});return}let a=this.conversationMemory;try{await a.storeToolExecution(e,t,n,o,s)}catch(c){g.warn("Failed to store tool executions",{sessionId:e,userId:t,error:c instanceof Error?c.message:String(c)})}}isToolExecutionStorageAvailable(){let e=process.env.STORAGE_TYPE==="redis",t=this.conversationMemory&&this.conversationMemory.constructor.name==="RedisConversationMemoryManager";return!!(e&&t)}async getSessionMessages(e,t){let n=`get-msgs-init-${Date.now()}`;if(await this.initializeConversationMemoryForGeneration(n,Date.now(),process.hrtime.bigint()),!this.conversationMemory)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Conversation memory is not enabled",category:"validation",severity:"high",retriable:!1});if(!e||typeof e!="string")throw new Fe({code:ut.INVALID_PARAMETERS,message:"Session ID must be a non-empty string",category:"validation",severity:"medium",retriable:!1,context:{sessionId:e}});return await this.conversationMemory.getSessionMessages(e,t)}async setSessionMessages(e,t,n){let o=`set-msgs-init-${Date.now()}`;if(await this.initializeConversationMemoryForGeneration(o,Date.now(),process.hrtime.bigint()),!this.conversationMemory)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Conversation memory is not enabled",category:"validation",severity:"high",retriable:!1});if(!e||typeof e!="string")throw new Fe({code:ut.INVALID_PARAMETERS,message:"Session ID must be a non-empty string",category:"validation",severity:"medium",retriable:!1,context:{sessionId:e}});await this.conversationMemory.setSessionMessages(e,t,n)}async modifyLastAssistantMessage(e,t,n){let o=await this.getSessionMessages(e,n);for(let s=o.length-1;s>=0;s--)if(o[s].role==="assistant")return o[s]={...o[s],content:t(o[s].content)},await this.setSessionMessages(e,o,n),!0;return!1}async addExternalMCPServer(e,t){this.invalidateToolCache();try{ie.info(`[NeuroLink] Adding external MCP server: ${e}`,{command:t.command,transport:t.transport});let n=await this.externalServerManager.addServer(e,t);if(n.success){if(ie.info(`[NeuroLink] External MCP server added successfully: ${e}`,{toolsDiscovered:n.metadata?.toolsDiscovered||0,duration:n.duration}),this.mcpEnhancementsConfig?.router?.enabled!==!1){let o=this.externalServerManager.listServers();if(o.length>=2&&!this.mcpToolRouter){this.mcpToolRouter=new Ix({strategy:this.mcpEnhancementsConfig?.router?.strategy??"least-loaded",enableAffinity:this.mcpEnhancementsConfig?.router?.enableAffinity??!1});for(let s of o)this.mcpToolRouter.registerServer(s.id||e);g.debug("[NeuroLink] ToolRouter auto-initialized (2+ external servers)")}else this.mcpToolRouter&&this.mcpToolRouter.registerServer(e)}this.emitter.emit("externalMCP:serverAdded",{serverId:e,serverName:t.name||e,config:t,toolCount:n.metadata?.toolsDiscovered||0,timestamp:Date.now()})}else ie.error(`[NeuroLink] Failed to add external MCP server: ${e}`,{error:n.error,transport:t.transport,command:t.command,url:t.url?mr(t.url):void 0});return n}catch(n){throw ie.error(`[NeuroLink] Error adding external MCP server: ${e}`,n),n}}async removeExternalMCPServer(e){this.invalidateToolCache();try{ie.info(`[NeuroLink] Removing external MCP server: ${e}`);let t=this.externalServerManager.getServerName(e),n=await this.externalServerManager.removeServer(e);return n.success?(ie.info(`[NeuroLink] External MCP server removed successfully: ${e}`),this.emitter.emit("externalMCP:serverRemoved",{serverId:e,serverName:t,timestamp:Date.now()})):n.error?.includes("not found")?ie.debug(`[NeuroLink] Remove skipped \u2014 external MCP server not registered: ${e}`):ie.error(`[NeuroLink] Failed to remove external MCP server: ${e}`,{error:n.error}),n}catch(t){throw ie.error(`[NeuroLink] Error removing external MCP server: ${e}`,t),t}}listExternalMCPServers(){let e=this.externalServerManager.getServerStatuses(),t=this.externalServerManager.listServers();return e.map(n=>{let o=t.find(s=>s.id===n.serverId);return{serverId:n.serverId,status:n.status,toolCount:n.toolCount,uptime:n.performance.uptime,isHealthy:n.isHealthy,config:o||{}}})}getExternalMCPServer(e){return this.externalServerManager.getServer(e)}async executeExternalMCPTool(e,t,n,o){try{ie.debug(`[NeuroLink] Executing external MCP tool: ${t} on ${e}`);let s=this.getToolAnnotationsForExecution(t),i=!!this.mcpToolResultCache&&!this._disableToolCacheForCurrentRequest&&!s?.destructiveHint,a={__serverId:e,__args:n,...this.toolExecutionContext?{__ctx:this.toolExecutionContext}:{}};if(i&&this.mcpToolResultCache){let d=this.mcpToolResultCache.getCachedResult(t,a);if(d!==void 0)return ie.debug(`[NeuroLink] Tool result cache HIT: ${t} on ${e}`),d}let c=await this.externalServerManager.executeTool(e,t,n,o),l=c&&typeof c=="object"?c:void 0,u=!!(l&&"isError"in l&&l.isError===!0||l&&"success"in l&&l.success===!1);return i&&this.mcpToolResultCache&&!u&&c!==void 0&&this.mcpToolResultCache.cacheResult(t,a,c),ie.debug(`[NeuroLink] External MCP tool ${u?"returned error":"executed successfully"}: ${t}`),c}catch(s){throw ie.error(`[NeuroLink] External MCP tool execution failed: ${t}`,s),s}}getExternalMCPTools(){return this.externalServerManager.getAllTools()}getExternalMCPServerTools(e){return this.externalServerManager.getServerTools(e)}async testExternalMCPConnection(e){try{let{MCPClientFactory:t}=await Ke(Promise.resolve().then(()=>(r3(),Aqe)),1e4),n=await t.testConnection(e,1e4);return{success:n.success,error:n.error,toolCount:n.capabilities?1:0}}catch(t){return{success:!1,error:t instanceof Error?t.message:String(t)}}}getExternalMCPStatistics(){return this.externalServerManager.getStatistics()}async shutdownExternalMCPServers(){try{ie.info("[NeuroLink] Shutting down all external MCP servers..."),this.unregisterAllExternalMCPToolsFromRegistry(),await this.externalServerManager.shutdown(),ie.info("[NeuroLink] All external MCP servers shut down successfully")}catch(e){throw ie.error("[NeuroLink] Error shutting down external MCP servers:",e),e}}async getElicitationManager(){return(await Ke(Promise.resolve().then(()=>(pme(),mKe)),1e4)).globalElicitationManager}async registerElicitationHandler(e){(await this.getElicitationManager()).registerHandler(e)}async getMultiServerManager(){return(await Ke(Promise.resolve().then(()=>(SH(),$Ve)),1e4)).globalMultiServerManager}async getEnhancedToolDiscovery(){let e=await Ke(Promise.resolve().then(()=>(wH(),BVe)),1e4);return new e.EnhancedToolDiscovery(this.toolRegistry)}async getMCPRegistryClient(){return(await Ke(Promise.resolve().then(()=>(hme(),fKe)),1e4)).globalMCPRegistryClient}async exposeAgentAsTool(e,t){return(await Ke(Promise.resolve().then(()=>(CW(),bme)),1e4)).exposeAgentAsTool(e,t)}async exposeWorkflowAsTool(e,t){return(await Ke(Promise.resolve().then(()=>(CW(),bme)),1e4)).exposeWorkflowAsTool(e,t)}async getToolIntegrationManager(){return(await Ke(Promise.resolve().then(()=>(Rme(),gKe)),1e4)).globalToolIntegrationManager}async convertToolsToMCPFormat(e,t={}){let n=await Ke(Promise.resolve().then(()=>(PW(),Ume)),1e4),o=e.map(s=>({...s,execute:s.execute??(async()=>({success:!1,error:"No execute function provided"}))}));return n.batchConvertToMCP(o,t)}async convertToolsFromMCPFormat(e,t={}){return(await Ke(Promise.resolve().then(()=>(PW(),Ume)),1e4)).batchConvertToNeuroLink(e,t)}async getToolAnnotations(e){let{inferAnnotations:t,mergeAnnotations:n,getAnnotationSummary:o}=await Ke(Promise.resolve().then(()=>(Sk(),FVe)),1e4),s=this.toolRegistry.getToolInfo(e);if(!s)return null;let i=s.tool.annotations,a=t({name:s.tool.name,description:s.tool.description??""}),c=n(a,i);return{annotations:c,summary:o(c)}}convertExternalMCPToolsToAISDKFormat(){let e=this.externalServerManager.getAllTools(),t={};for(let n of e)if(n.isAvailable){let o={description:n.description,execute:async s=>{try{ie.debug(`[NeuroLink] Executing external MCP tool via AI SDK: ${n.name}`,{params:s});let i=await this.externalServerManager.executeTool(n.serverId,n.name,s,{timeout:3e4});return ie.debug(`[NeuroLink] External MCP tool execution result: ${n.name}`,{success:!!i,hasData:!!(i&&typeof i=="object"&&"content"in i)}),i}catch(i){throw ie.error(`[NeuroLink] External MCP tool execution failed: ${n.name}`,i),i}}};t[n.name]=o,ie.debug(`[NeuroLink] Converted external MCP tool to AI SDK format: ${n.name} from server ${n.serverId}`)}return ie.info(`[NeuroLink] Converted ${Object.keys(t).length} external MCP tools to AI SDK format`),t}convertJSONSchemaToAISDKFormat(e){}unregisterExternalMCPToolsFromRegistry(e){try{let t=this.externalServerManager.getServerTools(e);for(let n of t)this.toolRegistry.removeTool(n.name),ie.debug(`[NeuroLink] Unregistered external MCP tool from main registry: ${n.name}`)}catch(t){ie.error(`[NeuroLink] Failed to unregister external MCP tools from registry for server ${e}:`,t)}}unregisterExternalMCPToolFromRegistry(e){try{this.toolRegistry.removeTool(e),ie.debug(`[NeuroLink] Unregistered external MCP tool from main registry: ${e}`)}catch(t){ie.error(`[NeuroLink] Failed to unregister external MCP tool ${e} from registry:`,t)}}async lazyInitializeConversationMemory(e,t,n){try{let{initializeConversationMemory:o}=await TKe().then(()=>bKe),s=await o(this.conversationMemoryConfig);this.conversationMemory=s,this.conversationMemoryNeedsInit=!1}catch(o){throw g.error("[NeuroLink] \u274C LOG_POINT_G005_MEMORY_LAZY_INIT_ERROR",{logPoint:"G005_MEMORY_LAZY_INIT_ERROR",generateInternalId:e,timestamp:new Date().toISOString(),elapsedMs:Date.now()-t,elapsedNs:(process.hrtime.bigint()-n).toString(),error:o instanceof Error?o.message:String(o),errorName:o instanceof Error?o.name:"UnknownError",errorStack:o instanceof Error?o.stack:void 0,message:"Lazy conversation memory initialization failed"}),o}}unregisterAllExternalMCPToolsFromRegistry(){try{let e=this.externalServerManager.getAllTools();for(let t of e)this.toolRegistry.removeTool(t.name);ie.debug(`[NeuroLink] Unregistered ${e.length} external MCP tools from main registry`)}catch(e){ie.error("[NeuroLink] Failed to unregister all external MCP tools from registry:",e)}}async createEvaluationPipeline(e){let{EvaluationPipeline:t,getPreset:n}=await Ke(Promise.resolve().then(()=>(xE(),tP)),1e4,me.evaluationTimeout("evaluation module load",1e4)),o;typeof e=="string"?o=n(e):o=e;let s=new t(o);return await Ke(s.initialize(),3e4,me.evaluationTimeout("pipeline initialization",3e4)),g.debug(`[NeuroLink] Created evaluation pipeline: ${o.name??"custom"}`),s}async evaluate(e,t){let{EvaluationPipeline:n,getPreset:o}=await Ke(Promise.resolve().then(()=>(xE(),tP)),1e4,me.evaluationTimeout("evaluation module load",1e4)),s;if(t?.pipeline&&t?.scorers)throw new Error("Cannot specify both 'pipeline' and 'scorers' options. Use one or the other.");if(t?.scorers&&t.scorers.length===0)throw new Error("The 'scorers' array must not be empty. Provide at least one scorer ID or omit the option to use the default 'quality' preset.");t?.pipeline?s={...o(t.pipeline)}:t?.scorers&&t.scorers.length>0?s={name:"SDK Evaluation",description:"Evaluation from NeuroLink SDK",scorers:t.scorers.map(l=>({id:l})),executionMode:t.executionMode??"parallel",passThreshold:t.passThreshold??.7}:s=o("quality"),t?.passThreshold!==void 0&&(s.passThreshold=t.passThreshold),t?.executionMode!==void 0&&(s.executionMode=t.executionMode);let i=new n(s);await Ke(i.initialize(),3e4,me.evaluationTimeout("pipeline initialization",3e4));let a=t?.timeoutMs??6e4,c=await Ke(i.execute(e,{correlationId:t?.correlationId}),a,me.evaluationTimeout("pipeline execution",a));return g.debug("[NeuroLink] Evaluation completed",{pipeline:s.name,overallScore:c.overallScore,passed:c.passed,scorerCount:c.scores.length}),c}async score(e,t,n){let{ScorerRegistry:o}=await Ke(Promise.resolve().then(()=>(CB(),T7)),1e4,me.evaluationTimeout("scorer module load",1e4));await Ke(o.registerBuiltInScorers(),3e4,me.evaluationTimeout("scorer bootstrap",3e4));let s=await Ke(o.getScorer(e,n),3e4,me.evaluationTimeout(`scorer load: ${e}`,3e4));if(!s)throw me.scorerNotFound(e);let i=s.validateInput(t);if(!i.valid)throw me.evaluationValidationFailed(e,i.errors);let a=await Ke(s.score(t),6e4,me.evaluationTimeout("scorer execution",6e4));return g.debug("[NeuroLink] Scoring completed",{scorerId:e,score:a.score,passed:a.passed,computeTime:a.computeTime}),a}async getAvailableScorers(e){let{ScorerRegistry:t}=await Ke(Promise.resolve().then(()=>(CB(),T7)),1e4,me.evaluationTimeout("scorer module load",1e4));await Ke(t.registerBuiltInScorers(),3e4,me.evaluationTimeout("scorer bootstrap",3e4));let n=t.list();return e?.category&&(n=n.filter(o=>o.category===e.category)),e?.type&&(n=n.filter(o=>o.type===e.type)),n}async getEvaluationPresets(){let{getPresetNames:e}=await Ke(Promise.resolve().then(()=>(xE(),tP)),1e4,me.evaluationTimeout("evaluation module load",1e4));return e()}async getEvaluationPreset(e){let{getPreset:t}=await Ke(Promise.resolve().then(()=>(xE(),tP)),1e4,me.evaluationTimeout("evaluation module load",1e4));return t(e)}async createAgent(e){let{Agent:t}=await Promise.resolve().then(()=>(OW(),SKe));return g.debug("[NeuroLink] Creating agent",{id:e.id,name:e.name,tools:e.tools?.length||0}),new t(e,this)}async createNetwork(e){let{AgentNetwork:t}=await Promise.resolve().then(()=>(Bme(),wKe));return g.debug("[NeuroLink] Creating agent network",{name:e.name,agentCount:e.agents.length,workflowCount:e.workflows?.length||0,toolCount:e.tools?.length||0}),new t(e,this)}async executeNetwork(e,t,n){return g.debug("[NeuroLink] Executing agent network",{networkId:e.id,networkName:e.name,hasContext:!!t.context}),e.execute(t,n)}async*streamNetwork(e,t,n){g.debug("[NeuroLink] Streaming agent network",{networkId:e.id,networkName:e.name,hasContext:!!t.context}),yield*e.stream(t,n)}async createOrchestrator(e){let{NetworkOrchestrator:t}=await Promise.resolve().then(()=>(Gme(),kKe));return g.debug("[NeuroLink] Creating network orchestrator",{maxConcurrentExecutions:e?.maxConcurrentExecutions,defaultMode:e?.defaultMode}),new t(this,e)}async createCoordinator(e){let{AgentCoordinator:t}=await Promise.resolve().then(()=>(Vme(),AKe));return g.debug("[NeuroLink] Creating agent coordinator",{strategy:e?.strategy,maxConcurrency:e?.maxConcurrency}),new t(e)}async createMessageBus(e){let{MessageBus:t}=await Promise.resolve().then(()=>(qme(),IKe));return g.debug("[NeuroLink] Creating message bus",{maxHistorySize:e?.maxHistorySize}),new t(e)}async dispose(){g.debug("[NeuroLink] Starting disposal of resources..."),this.lastCompactionMessageCount.clear();let e=[];try{try{g.debug("[NeuroLink] Flushing and shutting down OpenTelemetry..."),await hO(),await yO(),g.debug("[NeuroLink] OpenTelemetry shutdown successfully")}catch(t){let n=t instanceof Error?t:new Error(`OpenTelemetry shutdown error: ${String(t)}`);e.push(n),g.warn("[NeuroLink] Error shutting down OpenTelemetry:",t)}if(this.externalServerManager)try{g.debug("[NeuroLink] Shutting down external MCP servers..."),await this.externalServerManager.shutdown(),g.debug("[NeuroLink] External MCP servers shutdown successfully")}catch(t){let n=t instanceof Error?t:new Error(`External server shutdown error: ${String(t)}`);e.push(n),g.warn("[NeuroLink] Error shutting down external MCP servers:",t)}if(this.emitter)try{g.debug("[NeuroLink] Removing all event listeners..."),this.emitter.removeAllListeners(),g.clearEventEmitter(),g.debug("[NeuroLink] Event listeners removed successfully")}catch(t){let n=t instanceof Error?t:new Error(`Event emitter cleanup error: ${String(t)}`);e.push(n),g.warn("[NeuroLink] Error removing event listeners:",t)}if(this.toolCircuitBreakers&&this.toolCircuitBreakers.size>0)try{g.debug(`[NeuroLink] Clearing ${this.toolCircuitBreakers.size} circuit breakers...`),this.toolCircuitBreakers.clear(),g.debug("[NeuroLink] Circuit breakers cleared successfully")}catch(t){let n=t instanceof Error?t:new Error(`Circuit breaker cleanup error: ${String(t)}`);e.push(n),g.warn("[NeuroLink] Error clearing circuit breakers:",t)}try{g.debug("[NeuroLink] Clearing maps and caches..."),this.toolExecutionMetrics&&this.toolExecutionMetrics.clear(),this.activeToolExecutions&&this.activeToolExecutions.clear(),this.currentStreamToolExecutions&&(this.currentStreamToolExecutions.length=0),this.toolExecutionHistory&&(this.toolExecutionHistory.length=0),this.toolCache&&(this.toolCache.tools=[],this.toolCache.timestamp=0),this.mcpToolResultCache?.destroy(),this.mcpToolRouter?.destroy(),this.mcpToolBatcher?.destroy(),this.mcpToolResultCache=void 0,this.mcpToolRouter=void 0,this.mcpToolBatcher=void 0,this.mcpEnhancedDiscovery=void 0,this.mcpToolMiddlewares=[],g.debug("[NeuroLink] Maps and caches cleared successfully")}catch(t){let n=t instanceof Error?t:new Error(`Cache cleanup error: ${String(t)}`);e.push(n),g.warn("[NeuroLink] Error clearing caches:",t)}if(this._taskManager)try{g.debug("[NeuroLink] Shutting down TaskManager..."),await Ke(this._taskManager.shutdown(),5e3,new Error("TaskManager shutdown timed out"))}catch(t){g.warn("[NeuroLink] TaskManager shutdown error:",t)}finally{this._taskManager=void 0}try{g.debug("[NeuroLink] Resetting initialization state..."),this.mcpInitialized=!1,this.mcpInitPromise=null,this.conversationMemoryNeedsInit=!1,this.credentials=void 0,g.debug("[NeuroLink] Initialization state reset successfully")}catch(t){let n=t instanceof Error?t:new Error(`State reset error: ${String(t)}`);e.push(n),g.warn("[NeuroLink] Error resetting state:",t)}e.length===0?g.debug("[NeuroLink] \u2705 Resource disposal completed successfully"):g.warn(`[NeuroLink] \u26A0\uFE0F Resource disposal completed with ${e.length} errors`,{errors:e.map(t=>t.message)})}catch(t){throw g.error("[NeuroLink] Critical error during disposal:",t),t}}getToolRegistry(){return this.toolRegistry}async compactSession(e,t){if(!this.conversationMemory)return null;let n=await this.conversationMemory.buildContextMessages(e);if(!n||n.length===0)return null;let o=new bx({...t,summarizationProvider:t?.summarizationProvider??this.conversationMemoryConfig?.conversationMemory?.summarizationProvider,summarizationModel:t?.summarizationModel??this.conversationMemoryConfig?.conversationMemory?.summarizationModel}),s=Qc({provider:t?.provider||"openai",conversationMessages:n}),i=Math.floor(s.availableInputTokens*.6),a=await o.compact(n,i,this.conversationMemoryConfig?.conversationMemory);return a.compacted&&xk(a.messages),a}async getContextStats(e,t,n){if(!this.conversationMemory)return null;let o=await this.conversationMemory.buildContextMessages(e);if(!o||o.length===0)return null;let s=Qc({provider:t||"openai",model:n,conversationMessages:o});return{estimatedInputTokens:s.estimatedInputTokens,availableInputTokens:s.availableInputTokens,usageRatio:s.usageRatio,shouldCompact:s.shouldCompact,messageCount:o.length}}needsCompaction(e,t,n){if(!this.conversationMemory)return!1;let o=this.conversationMemory.getSession?.(e);return o?Qc({provider:t||"openai",model:n,conversationMessages:o.messages}).shouldCompact:!1}async setAuthProvider(e){this.authInitPromise=void 0,await this.initializeAuthProviderFromConfig(e)}async initializeAuthProviderFromConfig(e){let t,n;if("authenticateToken"in e&&typeof e.authenticateToken=="function")t=e,n=t.type;else if("provider"in e)t=e.provider,n=t.type;else{let o=e,{AuthProviderFactory:s}=await Promise.resolve().then(()=>(JD(),PKe));t=await s.createProvider(o.type,o.config),n=o.type}this.authProvider=t,g.info(`Auth provider set: ${n}`),this.emitter.emit("auth:provider:set",{type:t.type,timestamp:Date.now()})}getAuthProvider(){return this.authProvider}async ensureAuthProvider(){if(this.authProvider||!this.pendingAuthConfig)return;let e=this.pendingAuthConfig;this.authInitPromise??=(async()=>{try{await this.initializeAuthProviderFromConfig(e),this.pendingAuthConfig=void 0}finally{this.authInitPromise&&(this.pendingAuthConfig===void 0||this.pendingAuthConfig===e)&&(this.authInitPromise=void 0)}})(),await this.authInitPromise}async setAuthContext(e){let{globalAuthContext:t}=await Promise.resolve().then(()=>(qk(),d3));t.set(e),g.debug("Auth context set",{userId:e.user.id,provider:e.provider,sessionId:e.session?.id})}async getAuthContext(){let{getAuthContext:e}=await Promise.resolve().then(()=>(qk(),d3));return e()}async clearAuthContext(){let{globalAuthContext:e}=await Promise.resolve().then(()=>(qk(),d3)),t=e.get()?.user.id;e.clear(),t&&g.debug(`Auth context cleared for user: ${t}`)}getExternalServerManager(){return this.externalServerManager}buildResolutionContext(e,t){return{requestContext:t||{},signal:e}}async resolveDynamicOptions(e){let t=["model","provider","temperature","maxTokens","systemPrompt","timeout","thinkingLevel","disableTools","enableAnalytics","enableEvaluation"];if(!(t.some(s=>typeof e[s]=="function")||typeof e.tools=="function"))return;let o=e.dynamicContext;await this.resolveDynamicFields(e,t,o)}async resolveDynamicFields(e,t,n){let o=this.buildResolutionContext(e.abortSignal,n);if(g.debug("[NeuroLink] Resolving dynamic arguments"),await Promise.all(t.map(async s=>{if(typeof e[s]=="function"){let i=await tde(e[s],o);e[s]=i.value,g.debug(`[NeuroLink] Resolved dynamic ${s}: ${i.resolutionType}`)}})),typeof e.tools=="function"){let s=await tde(e.tools,o);if(!Array.isArray(s.value))throw new TypeError(`Dynamic tools resolver must return string[] (tool names), got ${typeof s.value=="object"?"object":typeof s.value}`);e.enabledToolNames=s.value,delete e.tools}}},MKe=new rS,XCr=MKe});var NKe={};ee(NKe,{VoyageProvider:()=>UW,default:()=>eRr});var ZCr,OKe,QCr,Jme,UW,eRr,DKe=_(async()=>{"use strict";Cu();await $p();wo();Nt();It();W();po();ZCr="https://api.voyageai.com/v1",OKe=6e4,QCr=()=>Mr(D$e()),Jme=()=>Or("VOYAGE_MODEL","voyage-3.5"),UW=class extends uo{apiKey;baseURL;proxyFetch;constructor(e,t,n,o){let s=Bu(t)?t:void 0;super(e,"voyage",s);let i=o?.apiKey?.trim();this.apiKey=i&&i.length>0?i:QCr(),this.baseURL=o?.baseURL??process.env.VOYAGE_BASE_URL??ZCr,this.proxyFetch=vt(),g.debug("Voyage Provider initialized (embeddings only)",{modelName:this.modelName,baseURL:this.baseURL})}getProviderName(){return this.providerName}getDefaultModel(){return Jme()}supportsTools(){return!1}getDefaultEmbeddingModel(){return Jme()}getAISDKModel(){throw new Ve("Voyage AI is an embedding-only provider; chat completions are not available. Use `embed()` or `embedMany()` instead, or pick a different provider for `generate()` / `stream()`.","voyage")}async executeStream(e,t){throw new Ve("Voyage AI is an embedding-only provider; streaming chat is not available. Use `embed()` / `embedMany()`, or pick another provider for `stream()`.","voyage")}formatProviderError(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"Unknown error";return t.includes("401")||t.toLowerCase().includes("unauthorized")||t.includes("invalid_api_key")?new Mt("Invalid Voyage AI API key. Get one at https://dash.voyageai.com/api-keys","voyage"):t.includes("429")||t.toLowerCase().includes("rate limit")?new er("Voyage AI rate limit exceeded. Back off and retry.","voyage"):t.includes("404")||t.toLowerCase().includes("model_not_found")?new Zt(`Voyage AI model '${this.modelName}' not found. Browse https://docs.voyageai.com/docs/embeddings`,"voyage"):new Ve(`Voyage AI error: ${t}`,"voyage")}async embed(e,t){let n=await this.callEmbeddings([e],t);if(!n[0])throw new Ve("Voyage AI returned no embedding for the provided text","voyage");return n[0]}async embedMany(e,t){if(e.length===0)return[];let n=128,o=[];for(let s=0;s<e.length;s+=n){let i=e.slice(s,s+n),a=await this.callEmbeddings(i,t);o.push(...a)}return o}async callEmbeddings(e,t){let n=t??this.modelName,o;try{o=await Ke(this.proxyFetch(`${this.baseURL}/embeddings`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify({input:e,model:n})}),OKe,new Ve(`Voyage embeddings request timed out after ${OKe/1e3}s`,"voyage"))}catch(a){throw a instanceof Ve?a:this.formatProviderError(a)}if(!o.ok){let a=await o.text();throw this.formatProviderError(new Error(`Voyage embeddings failed: ${o.status} \u2014 ${a}`))}let s=await o.json();if(!s.data||s.data.length===0)throw new Ve("Voyage embeddings response missing data","voyage");if(s.data.length!==e.length)throw new Ve(`Voyage embeddings response count mismatch: expected ${e.length}, got ${s.data.length}`,"voyage");let i=s.data.slice().sort((a,c)=>a.index-c.index);for(let a=0;a<i.length;a++)if(i[a].index!==a)throw new Ve(`Voyage embeddings response has unexpected index ordering: position ${a} has index ${i[a].index}`,"voyage");return i.map(a=>a.embedding)}async validateConfiguration(){return typeof this.apiKey=="string"&&this.apiKey.trim().length>0}getConfiguration(){return{provider:this.providerName,model:this.modelName,defaultModel:Jme(),baseURL:this.baseURL}}},eRr=UW});var LKe={};ee(LKe,{JinaProvider:()=>$W,default:()=>nRr});var tRr,FW,rRr,Yme,$W,nRr,UKe=_(async()=>{"use strict";Cu();await $p();wo();Nt();W();po();tRr="https://api.jina.ai/v1",FW=6e4,rRr=()=>Mr(L$e()),Yme=()=>Or("JINA_MODEL","jina-embeddings-v3"),$W=class extends uo{apiKey;baseURL;proxyFetch;constructor(e,t,n,o){let s=Bu(t)?t:void 0;super(e,"jina",s);let i=o?.apiKey?.trim();this.apiKey=i&&i.length>0?i:rRr(),this.baseURL=o?.baseURL??process.env.JINA_BASE_URL??tRr,this.proxyFetch=vt(),g.debug("Jina Provider initialized (embeddings + reranking)",{modelName:this.modelName,baseURL:this.baseURL})}getProviderName(){return this.providerName}getDefaultModel(){return Yme()}supportsTools(){return!1}getDefaultEmbeddingModel(){return Yme()}getAISDKModel(){throw new Error("Jina AI is an embeddings + reranking provider; chat completions are not available. Use `embed()` / `embedMany()` / `rerank()`.")}async executeStream(e,t){throw new Error("Jina AI is an embeddings + reranking provider; streaming chat is not available.")}formatProviderError(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"Unknown error";return t.includes("401")||t.toLowerCase().includes("unauthorized")?new Mt("Invalid Jina AI API key. Get one at https://jina.ai/?sui=apikey","jina"):t.includes("429")||t.toLowerCase().includes("rate limit")?new er("Jina AI rate limit exceeded. Back off and retry.","jina"):t.includes("404")||t.toLowerCase().includes("model_not_found")?new Zt(`Jina AI model '${this.modelName}' not found. See https://jina.ai/embeddings/`,"jina"):new Ve(`Jina AI error: ${t}`,"jina")}async embed(e,t){let n=await this.callEmbeddings([e],t);if(!n[0])throw new Error("Jina AI returned no embedding for the provided text");return n[0]}async embedMany(e,t){return e.length===0?[]:this.callEmbeddings(e,t)}async rerank(e,t,n={}){if(t.length===0)return[];let o=n.model??"jina-reranker-v2-base-multilingual",s=n.credentials,i=s?.apiKey?.trim()||this.apiKey,a=s?.baseURL||this.baseURL,c=new AbortController,l=setTimeout(()=>c.abort(),FW),u;try{u=await this.proxyFetch(`${a}/rerank`,{method:"POST",headers:{Authorization:`Bearer ${i}`,"Content-Type":"application/json"},body:JSON.stringify({model:o,query:e,documents:t,top_n:n.topN??t.length}),signal:c.signal})}catch(p){throw p instanceof Error&&p.name==="AbortError"?this.formatProviderError(new Error(`Jina rerank request timed out after ${FW/1e3}s`)):this.formatProviderError(p)}finally{clearTimeout(l)}if(!u.ok){let p=await u.text();throw this.formatProviderError(new Error(`Jina rerank failed: ${u.status} \u2014 ${p}`))}return((await u.json()).results??[]).map(p=>({index:p.index,score:p.relevance_score,document:t[p.index]??p.document?.text??""}))}async callEmbeddings(e,t,n){let o=t??this.modelName,s=n?.apiKey?.trim()||this.apiKey,i=n?.baseURL||this.baseURL,a=new AbortController,c=setTimeout(()=>a.abort(),FW),l;try{l=await this.proxyFetch(`${i}/embeddings`,{method:"POST",headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},body:JSON.stringify({input:e,model:o}),signal:a.signal})}catch(p){throw p instanceof Error&&p.name==="AbortError"?this.formatProviderError(new Error(`Jina embeddings request timed out after ${FW/1e3}s`)):this.formatProviderError(p)}finally{clearTimeout(c)}if(!l.ok){let p=await l.text();throw this.formatProviderError(new Error(`Jina embeddings failed: ${l.status} \u2014 ${p}`))}let u=await l.json();if(!u.data||u.data.length===0)throw new Error("Jina embeddings response missing data");if(u.data.length!==e.length)throw new Error(`Jina embeddings response count mismatch: expected ${e.length}, got ${u.data.length}`);let d=u.data.slice().sort((p,f)=>p.index-f.index);for(let p=0;p<d.length;p++)if(d[p].index!==p)throw new Error(`Jina embeddings response has unexpected index ordering: position ${p} has index ${d[p].index}`);return d.map(p=>p.embedding)}async validateConfiguration(){return typeof this.apiKey=="string"&&this.apiKey.trim().length>0}getConfiguration(){return{provider:this.providerName,model:this.modelName,defaultModel:Yme(),baseURL:this.baseURL}}},nRr=$W});var BKe={};ee(BKe,{StabilityProvider:()=>BW,default:()=>iRr});var oRr,FKe,sRr,$Ke,BW,iRr,zKe=_(async()=>{"use strict";Cu();await $p();wo();Nt();W();po();oRr="https://api.stability.ai",FKe=12e4,sRr=()=>(process.env.STABILITY_API_KEY??process.env.STABILITY_AI_API_KEY??"").trim()||void 0,$Ke=()=>Or("STABILITY_MODEL","stable-image-ultra"),BW=class extends uo{apiKey;baseURL;proxyFetch;constructor(e,t,n,o){let s=Bu(t)?t:void 0;super(e,"stability",s);let i=o?.apiKey?.trim();this.apiKey=i&&i.length>0?i:sRr(),this.baseURL=o?.baseURL??process.env.STABILITY_BASE_URL??oRr,this.proxyFetch=vt(),g.debug("Stability AI Provider initialized (image-gen only)",{modelName:this.modelName,baseURL:this.baseURL})}getProviderName(){return this.providerName}getDefaultModel(){return $Ke()}supportsTools(){return!1}getAISDKModel(){throw new Error("Stability AI is an image-generation-only provider; chat completions are not available.")}async executeStream(e,t){throw new Error("Stability AI is an image-generation-only provider; streaming chat is not available. Use generate({output:{format:'binary'}}) with a Stable Image / SD 3.5 model.")}formatProviderError(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"Unknown error";return t.includes("401")||t.toLowerCase().includes("unauthorized")?new Mt("Invalid Stability AI API key. Get one at https://platform.stability.ai/account/keys","stability"):t.includes("429")||t.toLowerCase().includes("rate limit")?new er("Stability AI rate limit exceeded. Back off and retry.","stability"):t.includes("content_filtered")||t.includes("CONTENT_FILTERED")?new Ve("Stability AI declined the request due to content policy. Adjust the prompt and retry.","stability"):t.includes("404")?new Zt(`Stability AI model '${this.modelName}' not found. Use stable-image-ultra, stable-image-core, sd3.5-large, sd3.5-large-turbo, or sd3.5-medium.`,"stability"):new Ve(`Stability AI error: ${t}`,"stability")}async executeImageGeneration(e){let t=Date.now(),n=e.credentials?.stability,o=n?.apiKey?.trim()||this.apiKey;if(!o)throw new Error("Stability AI API key is required. Set STABILITY_API_KEY or pass credentials.stability.apiKey per-call.");let s=o,i=n?.baseURL||this.baseURL,a=e.prompt??e.input?.text??"";if(!a.trim())throw new Error("Stability AI image generation requires a prompt (input.text or prompt)");let c=this.modelName.startsWith("sd3.5-")?"sd3":this.modelName==="stable-image-ultra"?"ultra":this.modelName==="stable-image-core"?"core":this.modelName,l=e,u=new FormData;u.append("prompt",a),u.append("output_format","png"),l.aspectRatio&&u.append("aspect_ratio",String(l.aspectRatio)),l.negativePrompt&&u.append("negative_prompt",l.negativePrompt),this.modelName.startsWith("sd3.5-")&&u.append("model",this.modelName),l.seed!==void 0&&u.append("seed",String(l.seed));let d=new AbortController,p=setTimeout(()=>d.abort(),FKe),f;try{f=await this.proxyFetch(`${i}/v2beta/stable-image/generate/${c}`,{method:"POST",headers:{Authorization:`Bearer ${s}`,Accept:"application/json"},body:u,signal:d.signal})}catch(x){throw x instanceof Error&&x.name==="AbortError"?this.formatProviderError(new Error(`Stability image-gen request timed out after ${FKe/1e3}s`)):this.formatProviderError(x)}finally{clearTimeout(p)}if(!f.ok){let x=await f.text();throw this.formatProviderError(new Error(`Stability image-gen failed: ${f.status} \u2014 ${x}`))}let h=await f.json();if(!h.image)throw new Error(`Stability AI returned no image (finish_reason: ${h.finish_reason??"unknown"})`);let y=Date.now()-t;return g.info(`[StabilityProvider] Generated image (${h.image.length} base64 chars) in ${y}ms \u2014 model ${this.modelName}`),{content:a,provider:this.providerName,model:this.modelName,usage:{input:0,output:1e3,total:1e3},imageOutput:{base64:h.image}}}async validateConfiguration(){return this.apiKey!==void 0&&this.apiKey.trim().length>0}getConfiguration(){return{provider:this.providerName,model:this.modelName,defaultModel:$Ke(),baseURL:this.baseURL}}},iRr=BW});var VKe={};ee(VKe,{IdeogramProvider:()=>zW,default:()=>lRr});var aRr,jKe,cRr,GKe,zW,lRr,qKe=_(async()=>{"use strict";Cu();await $p();wo();Nt();W();po();aRr="https://api.ideogram.ai",jKe=12e4,cRr=()=>Mr(U$e()),GKe=()=>Or("IDEOGRAM_MODEL","V_3"),zW=class extends uo{apiKey;baseURL;proxyFetch;constructor(e,t,n,o){let s=Bu(t)?t:void 0;super(e,"ideogram",s);let i=o?.apiKey?.trim();this.apiKey=i&&i.length>0?i:cRr(),this.baseURL=o?.baseURL??process.env.IDEOGRAM_BASE_URL??aRr,this.proxyFetch=vt(),g.debug("Ideogram Provider initialized (image-gen only)",{modelName:this.modelName,baseURL:this.baseURL})}getProviderName(){return this.providerName}getDefaultModel(){return GKe()}supportsTools(){return!1}getAISDKModel(){throw new Error("Ideogram is an image-generation-only provider; chat completions are not available.")}async executeStream(e,t){throw new Error("Ideogram is an image-generation-only provider; streaming chat is not available.")}formatProviderError(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"Unknown error";return t.includes("401")||t.toLowerCase().includes("unauthorized")?new Mt("Invalid Ideogram API key. Get one at https://developer.ideogram.ai/","ideogram"):t.includes("429")||t.toLowerCase().includes("rate limit")?new er("Ideogram rate limit exceeded. Back off and retry.","ideogram"):t.includes("safety")||t.includes("is_image_safe")?new Ve("Ideogram declined the request due to safety filters. Adjust the prompt and retry.","ideogram"):new Ve(`Ideogram error: ${t}`,"ideogram")}async executeImageGeneration(e){let t=Date.now(),n=e.credentials?.ideogram,o=n?.apiKey?.trim()||this.apiKey,s=n?.baseURL||this.baseURL,i=e.prompt??e.input?.text??"";if(!i.trim())throw new Error("Ideogram image generation requires a prompt (input.text or prompt)");let a=e,c={prompt:i,model:this.modelName,magic_prompt:a.magicPrompt??"AUTO"};a.aspectRatio&&(c.aspect_ratio=a.aspectRatio),a.negativePrompt&&(c.negative_prompt=a.negativePrompt),a.seed!==void 0&&(c.seed=a.seed),a.style&&(c.style_type=a.style);let l=new AbortController,u=setTimeout(()=>l.abort(),jKe),d;try{d=await this.proxyFetch(`${s}/v1/ideogram-v3/generate`,{method:"POST",headers:{"Api-Key":o,"Content-Type":"application/json"},body:JSON.stringify(c),signal:l.signal})}catch(k){throw k instanceof Error&&k.name==="AbortError"?this.formatProviderError(new Error(`Ideogram image-gen request timed out after ${jKe/1e3}s`)):this.formatProviderError(k)}finally{clearTimeout(u)}if(!d.ok){let k=await d.text();throw this.formatProviderError(new Error(`Ideogram image-gen failed: ${d.status} \u2014 ${k}`))}let f=(await d.json()).data?.[0]?.url;if(!f)throw new Error("Ideogram returned no image URL");let h=new AbortController,y=setTimeout(()=>h.abort(),6e4),x;try{x=await this.proxyFetch(f,{signal:h.signal})}catch(k){throw k instanceof Error&&k.name==="AbortError"?new Error("Ideogram image download timed out after 60s",{cause:k}):k}finally{clearTimeout(y)}if(!x.ok)throw new Error(`Failed to download Ideogram image: ${x.status}`);let b=Buffer.from(await x.arrayBuffer()),T=b.toString("base64"),w=Date.now()-t;return g.info(`[IdeogramProvider] Generated image (${b.length} bytes) in ${w}ms \u2014 model ${this.modelName}`),{content:i,provider:this.providerName,model:this.modelName,usage:{input:0,output:1e3,total:1e3},imageOutput:{base64:T}}}async validateConfiguration(){return typeof this.apiKey=="string"&&this.apiKey.trim().length>0}getConfiguration(){return{provider:this.providerName,model:this.modelName,defaultModel:GKe(),baseURL:this.baseURL}}},lRr=zW});function Od(r){let e=(r?.apiToken??process.env.REPLICATE_API_TOKEN??"").trim();return e?{apiToken:e,baseUrl:(r?.baseUrl??process.env.REPLICATE_BASE_URL??uRr).replace(/\/$/,"")}:null}var uRr,YD=_(()=>{"use strict";uRr="https://api.replicate.com"});function pRr(r,e,t){return new Nte({connect:{lookup:(n,o,s)=>{if(n.toLowerCase()!==r.toLowerCase()){s(new Error(`safeFetch: refusing to resolve "${n}" \u2014 expected "${r}"`),"",0);return}s(null,e,t)}}})}async function zx(r,e){let{url:t,ip:n,family:o}=await Q$e(r),i=new URL(t).hostname.replace(/^\[|\]$/g,""),a=pRr(i,n,o),c=new AbortController,l=setTimeout(()=>c.abort(),e.timeoutMs??dRr),u=e.signal?AbortSignal.any([e.signal,c.signal]):c.signal,d;try{d=await Ote(t,{method:"GET",signal:u,redirect:"manual",dispatcher:a})}finally{clearTimeout(l),a.close().catch(()=>{})}if(d.status>=300&&d.status<400)throw new Error(`safeDownload(${e.label}): refused to follow redirect ${d.status} \u2192 ${d.headers.get("location")??"<no-location>"} (for ${r})`);if(!d.ok)throw new Error(`safeDownload(${e.label}) failed: HTTP ${d.status} for ${r}`);return Ha(d,e.maxBytes,e.label)}var dRr,XD=_(()=>{"use strict";zE();vg();cx();dRr=6e4});async function gRr(r,e){let t=r.baseUrl??"https://api.replicate.com",[n,o]=e.model.split(":",2),s=o?`${t}/v1/predictions`:`${t}/v1/models/${n}/predictions`,i=o?{version:o,input:e.input}:{input:e.input};e.webhook&&(i.webhook=e.webhook),e.webhookEventsFilter&&e.webhookEventsFilter.length>0&&(i.webhook_events_filter=e.webhookEventsFilter);let a=new AbortController,c=setTimeout(()=>a.abort(),ZD),l;try{l=await fetch(s,{method:"POST",headers:{Authorization:`Token ${r.apiToken}`,"Content-Type":"application/json",Prefer:"wait=60"},body:JSON.stringify(i),signal:a.signal})}catch(u){throw u instanceof Fe?u:u instanceof Error&&u.name==="AbortError"?new Fe({code:ut.OPERATION_ABORTED,message:`Replicate predictions submit timed out after ${ZD/1e3}s`,category:"timeout",severity:"high",retriable:!0,originalError:u}):u}finally{clearTimeout(c)}if(!l.ok){let u=await l.text();throw new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate predictions submit failed: ${l.status} \u2014 ${Ms(u,500)}`,category:"network",severity:"high",retriable:l.status>=500})}return await l.json()}async function hRr(r,e,t={}){let n=r.baseUrl??"https://api.replicate.com",o=Date.now(),s=t.timeoutMs??fRr,i=t.pollIntervalMs??mRr;for(;Date.now()-o<s;){if(t.abortSignal?.aborted)throw new Fe({code:ut.OPERATION_ABORTED,message:"Replicate poll aborted by caller",category:"abort",severity:"low",retriable:!1});let a=new AbortController,c=setTimeout(()=>a.abort(),ZD),l=()=>a.abort();t.abortSignal?.addEventListener("abort",l,{once:!0});let u;try{u=await fetch(`${n}/v1/predictions/${e}`,{method:"GET",headers:{Authorization:`Token ${r.apiToken}`},signal:a.signal})}catch(p){throw p instanceof Fe?p:p instanceof Error&&p.name==="AbortError"?t.abortSignal?.aborted?new Fe({code:ut.OPERATION_ABORTED,message:"Replicate poll aborted by caller",category:"abort",severity:"low",retriable:!1,originalError:p}):new Fe({code:ut.OPERATION_ABORTED,message:`Replicate poll request timed out after ${ZD/1e3}s`,category:"timeout",severity:"high",retriable:!0,originalError:p}):p}finally{t.abortSignal?.removeEventListener("abort",l),clearTimeout(c)}if(!u.ok){let p=await u.text();throw new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate poll failed: ${u.status} \u2014 ${Ms(p,500)}`,category:"network",severity:"high",retriable:u.status>=500})}let d=await u.json();if(d.status==="succeeded")return d;if(d.status==="failed"||d.status==="canceled")throw new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate prediction ${d.id} ${d.status}: ${d.error??"unknown"}`,category:"execution",severity:"high",retriable:d.status==="failed"});await new Promise((p,f)=>{let h=()=>{clearTimeout(y),f(new Fe({code:ut.OPERATION_ABORTED,message:"Replicate poll aborted by caller",category:"abort",severity:"low",retriable:!1}))},y=setTimeout(()=>{t.abortSignal?.removeEventListener("abort",h),p()},i);t.abortSignal?.addEventListener("abort",h,{once:!0})})}throw new Fe({code:ut.OPERATION_ABORTED,message:`Replicate prediction ${e} did not complete within ${Math.round(s/1e3)}s`,category:"timeout",severity:"high",retriable:!0})}async function Wg(r,e,t={}){let n=await gRr(r,e);if(n.status==="succeeded")return n;if(n.status==="failed"||n.status==="canceled")throw new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate prediction ${n.id} ${n.status} on submit: ${n.error??"unknown"}`,category:"execution",severity:"high",retriable:n.status==="failed"});return hRr(r,n.id,t)}async function jx(r,e=268435456){let t=r.output,n=Array.isArray(t)?t[0]:t;if(typeof n!="string")throw new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate prediction ${r.id} output is not a URL: ${typeof t}`,category:"execution",severity:"high",retriable:!1});try{let o=await zx(n,{maxBytes:e,label:`Replicate prediction ${r.id}`,timeoutMs:ZD});return g.debug(`[Replicate] Downloaded prediction ${r.id} output: ${o.length} bytes`),o}catch(o){if(o instanceof Fe)throw o;let s=o instanceof Error?o.message:String(o);throw new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate output download failed: ${s} \u2014 ${n}`,category:"network",severity:"high",retriable:!0,originalError:o instanceof Error?o:void 0})}}var ZD,mRr,fRr,QD=_(()=>{"use strict";W();It();Pn();XD();ZD=9e4,mRr=2e3,fRr=5*6e4});var WKe={};ee(WKe,{ReplicateProvider:()=>jW,default:()=>vRr});function yRr(r){let e=r,t=e.prompt??e.input?.text??"",n=e.systemPrompt;return n?`${n}
|
|
2206
|
+
IMPORTANT: You have a tool called "${c.toolName}" that searches through`,`${c.filesLoaded} loaded document(s) containing ${c.chunksIndexed} indexed chunks.`,`ALWAYS use the "${c.toolName}" tool FIRST to answer the user's question before using any other tools.`,"This tool searches your local knowledge base of pre-loaded documents and is the primary source of truth.","Do NOT use websearchGrounding or any web search tools when the answer can be found in the loaded documents."].join(" ");e.systemPrompt=(e.systemPrompt||"")+l,g.info("[RAG] Tool injected into stream()",{toolName:c.toolName,filesLoaded:c.filesLoaded,chunksIndexed:c.chunksIndexed})}catch(a){g.warn("[RAG] Failed to prepare RAG tool, continuing without RAG",{error:a instanceof Error?a.message:String(a)})}let s=U3e(e),i=F3e(e);if(e.input?.text){let{toolResults:a,enhancedPrompt:c}=await this.detectAndExecuteTools(e.input.text,void 0);c!==e.input.text&&(i.input.text=c)}return{enhancedOptions:i,factoryResult:s}}async autoDisableOllamaStreamTools(e){if((e.provider==="ollama"||e.provider?.toLowerCase().includes("ollama"))&&!e.disableTools){let{ModelConfigurationManager:t}=await Promise.resolve().then(()=>(Xy(),fUe)),s=t.getInstance().getProviderConfiguration("ollama")?.modelBehavior?.toolCapableModels||[],i=e.model;s.length>0&&i&&(s.some(c=>i.toLowerCase().includes(c.toLowerCase()))||(e.disableTools=!0,g.debug("Auto-disabled tools for Ollama model that doesn't support them (stream)",{model:e.model,toolCapableModels:s.slice(0,3)})))}}setupStreamEventListeners(){let e=[],t=0,n=(d,p)=>{e.push({type:d,seq:t++,timestamp:Date.now(),...p&&typeof p=="object"?p:{data:p}})},o=(...d)=>{let p=d[0];n("response:chunk",{content:p})},s=(...d)=>{let p=d[0];n("tool:start",{...p,toolName:p.toolName??p.tool})},i=(...d)=>{let p=d[0],f=p.toolName??p.tool,h=p.responseTime??p.duration,y=p.success??(p.error!==void 0?!1:void 0),x={...p,toolName:f,...h!==void 0?{responseTime:h}:{},...y!==void 0?{success:y}:{},...p.error!==void 0?{error:p.error}:{}};n("tool:end",x),x.result&&x.result.uiComponent===!0&&n("ui-component",{toolName:f,componentData:x.result,timestamp:Date.now(),...y!==void 0?{success:y}:{},...h!==void 0?{responseTime:h}:{}})},a=(...d)=>{n("ui-component",d[0])},c=(...d)=>{n("hitl:confirmation-request",d[0])},l=(...d)=>{n("hitl:confirmation-response",d[0])};return this.emitter.on("response:chunk",o),this.emitter.on("tool:start",s),this.emitter.on("tool:end",i),this.emitter.on("ui-component",a),this.emitter.on("hitl:confirmation-request",c),this.emitter.on("hitl:confirmation-response",l),{eventSequence:e,cleanup:()=>{this.emitter.off("response:chunk",o),this.emitter.off("tool:start",s),this.emitter.off("tool:end",i),this.emitter.off("ui-component",a),this.emitter.off("hitl:confirmation-request",c),this.emitter.off("hitl:confirmation-response",l)}}}async*handleStreamFallback(e,t,n,o,s,i){e.fallbackAttempted=!0;let a="Stream completed with 0 chunks (possible guardrails block)";e.error=a;try{let h=this._metricsTraceContext,y=xe.createGenerationSpan({provider:s,model:o.model||"unknown",name:`gen_ai.${s}.stream.failed`,traceId:h?.traceId,parentSpanId:h?.parentSpanId});y=xe.endSpan(y,2),y.statusMessage=a,y.durationMs=0,this.metricsAggregator.recordSpan(y),Ze().recordSpan(y)}catch{}let c=o.fallbackProvider?.trim()||void 0,l=o.fallbackModel?.trim()||void 0,u=process.env.FALLBACK_PROVIDER?.trim()||void 0,d=process.env.FALLBACK_MODEL?.trim()||void 0,p=tC.getFallbackRoute(n||o.input.text||"",{provider:s,model:o.model||"gpt-4o",reasoning:"primary failed",confidence:.5},{fallbackStrategy:"auto"}),f={...p,provider:c??u??p.provider,model:l??d??p.model};g.warn("Retrying with fallback provider",{originalProvider:s,fallbackProvider:f.provider,fallbackModel:f.model,fallbackSource:c||l?"options":u||d?"env":"model_config",reason:a});try{let h=await dn.createProvider(f.provider,f.model,!0,void 0,void 0,this.resolveCredentials(o.credentials));h.setupToolExecutor({customTools:this.getCustomTools(),executeTool:(C,A)=>this.executeTool(C,A,{disableToolCache:o.disableToolCache})},"NeuroLink.fallbackStream");let y=o.conversationMessages!==void 0?o.conversationMessages:await Og(this.conversationMemory,{prompt:o.input.text,context:o.context}),x=await h.stream({...o,model:f.model,conversationMessages:y}),b=x.toolCalls??[],T=x.toolResults??[];(b.length>0||T.length>0)&&(t.toolCalls=b,t.toolResults=T,t.finishReason=x.finishReason??t.finishReason);let w=0,k=0;for await(let C of x.stream){w++;let A=C!==null&&typeof C=="object"&&"metadata"in C&&C.metadata?.noOutput===!0,P=C&&"content"in C&&typeof C.content=="string"&&C.content.length>0,R=C!==null&&typeof C=="object"&&"type"in C&&(C.type==="audio"||C.type==="tts_audio"||C.type==="image");!A&&(P||R)&&k++,C&&"content"in C&&typeof C.content=="string"&&(i(C.content),this.emitter.emit("response:chunk",C.content)),yield C}if(k===0&&b.length===0&&T.length===0)throw new Error(`Fallback provider ${f.provider} also returned 0 real output chunks (chunkCount=${w}, sentinel-only or empty)`);e.fallbackProvider=f.provider,e.fallbackModel=f.model,e.guardrailsBlocked=!0}catch(h){let y=h instanceof Error?h.message:String(h);throw e.error=`${a}; Fallback failed: ${y}`,g.error("Fallback provider failed",{fallbackProvider:f.provider,error:y}),h}}async storeStreamConversationMemory(e){let{enhancedOptions:t,providerName:n,originalPrompt:o,accumulatedContent:s,startTime:i,eventSequence:a}=e;g.shouldLog("debug")&&g.debug("[NeuroLink.stream] Preparing to store conversation turn in memory",{options:m0(f0(t)),sessionId:t.context?.sessionId});let c=a.some(l=>l.type==="tool:start"||l.type==="tool:end");if(!s.trim()&&!c){g.warn("[NeuroLink.stream] Skipping conversation turn storage \u2014 no text content or tool activity",{sessionId:t.context?.sessionId});return}if(g.shouldLog("debug")&&g.debug("[NeuroLink.stream] Storing conversation turn in memory",{options:m0(f0(t)),sessionId:t.context?.sessionId,conversationMemoryExists:!!this.conversationMemory}),this.conversationMemory&&t.context?.sessionId){let l=t.context?.sessionId,u=t.context?.userId,d;t.model&&(d={provider:n,model:t.model});let p=Date.now();try{let f=this.drainPendingSkillMessages(l);await this.conversationMemory.storeConversationTurn({sessionId:l,userId:u,userMessage:o??"",aiResponse:s,startTimeStamp:new Date(i),providerDetails:d,enableSummarization:t.enableSummarization,events:a.length>0?a:void 0,requestId:t.context?.requestId,...f.length>0?{skillMessages:f}:{}}),this.recordMemorySpan("memory.store",{"memory.operation":"store","memory.path":"stream"},Date.now()-p,1),g.debug("[NeuroLink.stream] Stored conversation turn with events",{sessionId:l,eventCount:a.length,eventTypes:[...new Set(a.map(h=>h.type))]})}catch(f){this.recordMemorySpan("memory.store",{"memory.operation":"store","memory.path":"stream"},Date.now()-p,2,f instanceof Error?f.message:String(f)),g.warn("Failed to store stream conversation turn",{error:f instanceof Error?f.message:String(f)})}}this.shouldWriteMemory(t.memory,t.context?.userId,s)&&this.storeMemoryInBackground(o??"",s.trim(),t.context?.userId,t.memory?.additionalUsers,t.context)}async validateStreamInput(e){let t=process.hrtime.bigint();g.debug("[NeuroLink] \u{1F3AF} LOG_POINT_003_VALIDATION_START",{logPoint:"003_VALIDATION_START",validationStartTimeNs:t.toString(),message:"Starting comprehensive input validation process"});let n=typeof e?.input?.text=="string"&&e.input.text.trim().length>0,o=!!(e?.input?.audio&&e.input.audio.frames&&typeof e.input.audio.frames[Symbol.asyncIterator]=="function"),s=!!(e?.stt?.enabled&&e?.stt?.audio);if(!n&&!o&&!s)throw new Error("Stream options must include either input.text, input.audio, or stt.audio")}emitStreamStartEvents(e,t){this.emitter.emit("stream:start",{provider:e.provider||"auto",timestamp:t}),this.emitter.emit("response:start"),this.emitter.emit("message",`Starting ${e.provider||"auto"} stream...`)}async createMCPStream(e){let t=await Nx(e.provider),n=await dn.createProvider(t,e.model,!e.disableTools,this,e.region,this.resolveCredentials(e.credentials));n.setTraceContext(this._metricsTraceContext),n.setupToolExecutor({customTools:this.getCustomTools(),executeTool:(h,y)=>this.executeTool(h,y,{disableToolCache:e.disableToolCache})},"NeuroLink.createMCPStream");let o=await this.getAllAvailableTools();o=this.applyToolInfoFiltering(o,e);let s=e.skipToolPromptInjection?e.systemPrompt||"":this.createToolAwareSystemPrompt(e.systemPrompt,o),i=e.conversationMessages!==void 0,a=i?e.conversationMessages:await Og(this.conversationMemory,{...e,prompt:e.input.text,context:e.context});e.conversationMessages=a;let c=a,l=Qc({provider:t,model:e.model,maxTokens:e.maxTokens,systemPrompt:s,conversationMessages:c,currentPrompt:e.input.text,toolDefinitions:o}),u=c?.length||0,d=this.getCompactionSessionId(e),p=u>0;if(!l.withinBudget&&!p){try{this.emitter.emit("compaction.insufficient",{stagesAttempted:["pre-dispatch hard cap"],finalTokens:l.estimatedInputTokens,budget:l.availableInputTokens,provider:t,model:e.model,phase:"pre-dispatch-no-recovery",timestamp:Date.now()})}catch{}throw new ql(`Stream context exceeds model budget and no compaction is possible (no conversationMemory, no inline conversationMessages \u2014 only prompt + tools). Estimated: ${l.estimatedInputTokens} tokens, budget: ${l.availableInputTokens} tokens. Reduce prompt or tool-definition size, or trim the request.`,{estimatedTokens:l.estimatedInputTokens,availableTokens:l.availableInputTokens,stagesUsed:[],breakdown:l.breakdown})}if(l.shouldCompact&&(i||this.conversationMemory)&&u>(this.lastCompactionMessageCount.get(d)??0)){let y=await new bx({provider:t,summarizationProvider:this.conversationMemoryConfig?.conversationMemory?.summarizationProvider,summarizationModel:this.conversationMemoryConfig?.conversationMemory?.summarizationModel}).compact(c,l.availableInputTokens,this.conversationMemoryConfig?.conversationMemory,e.context?.requestId);y.compacted&&(c=xk(y.messages).messages,e.conversationMessages=c,this.lastCompactionMessageCount.set(d,c.length));let x=Qc({provider:t,model:e.model,maxTokens:e.maxTokens,systemPrompt:s,conversationMessages:c,currentPrompt:e.input.text,toolDefinitions:o});if(!x.withinBudget){g.warn("[NeuroLink] Stream: post-compaction still over budget, emergency truncation",{estimatedTokens:x.estimatedInputTokens,availableTokens:x.availableInputTokens,overagePercent:Math.round((x.usageRatio-1)*100)});try{this.emitter.emit("compaction.insufficient",{stagesAttempted:y.stagesUsed,finalTokens:x.estimatedInputTokens,budget:x.availableInputTokens,provider:t,model:e.model,phase:"mid-compaction",willEmergencyTruncate:!0,timestamp:Date.now()})}catch{}c=fH(c,x.availableInputTokens,x.breakdown,t),e.conversationMessages=c;let b=Qc({provider:t,model:e.model,maxTokens:e.maxTokens,systemPrompt:s,conversationMessages:c,currentPrompt:e.input.text,toolDefinitions:o});if(!b.withinBudget){this.lastCompactionMessageCount.delete(d);try{this.emitter.emit("compaction.insufficient",{stagesAttempted:y.stagesUsed,finalTokens:b.estimatedInputTokens,budget:b.availableInputTokens,provider:t,model:e.model,phase:"post-emergency-truncation",timestamp:Date.now()})}catch{}throw new ql(`Stream context exceeds model budget after all compaction stages. Estimated: ${b.estimatedInputTokens} tokens, Budget: ${b.availableInputTokens} tokens.`,{estimatedTokens:b.estimatedInputTokens,availableTokens:b.availableInputTokens,stagesUsed:y.stagesUsed,breakdown:b.breakdown})}}}if(this.modelPool){let h=this.modelPool,y=h.maxAttempts,x=new Set,b=null;for(let T=0;T<y;T++){if(e.abortSignal?.aborted)throw new DOMException("The operation was aborted","AbortError");let w=h.selectNext(x);if(!w)break;x.add(h.memberKey(w));let k=w.provider,C=w.model??void 0,A=w.region??void 0;g.debug(`[createMCPStream] ModelPool: attempting member ${k}`,{model:C,attempt:T});try{let P=await dn.createProvider(k,C,!e.disableTools,this,A,this.resolveCredentials(e.credentials));P.setTraceContext(this._metricsTraceContext),P.setupToolExecutor({customTools:this.getCustomTools(),executeTool:(O,F)=>this.executeTool(O,F,{disableToolCache:e.disableToolCache})},"NeuroLink.createMCPStream");let R=await P.stream({...e,provider:k,model:C,region:A,systemPrompt:s,conversationMessages:c});g.debug("[createMCPStream] ModelPool stream handle obtained",{provider:k});let I=w;return{stream:(async function*(){try{yield*R.stream,h.recordSuccess(I)}catch(O){throw h.recordFailure(I,Ux(O)),O}})(),provider:k,usage:R.usage,model:R.model||C,finishReason:R.finishReason,toolCalls:R.toolCalls??[],toolResults:R.toolResults??[],analytics:R.analytics,metadata:R.metadata}}catch(P){if(Hr(P))throw P;if(DW(P)){let R=P instanceof Error?P.message:String(P);throw h.recordFailure(w,Ux(P)),new Error(`[ModelPool] non-retryable: ${R}`,{cause:P})}h.recordFailure(w,Ux(P)),b=P instanceof Error?P:new Error(String(P)),g.warn(`[createMCPStream] ModelPool: member ${k} failed`,{error:b.message})}}throw new Error(`[ModelPool] all stream members failed: ${b?.message??"no stream members available"}`)}let f=await n.stream({...e,systemPrompt:s,conversationMessages:c});return g.debug("[createMCPStream] Stream created successfully",{provider:t,systemPromptPassedLength:s.length}),{stream:f.stream,provider:t,usage:f.usage,model:f.model||e.model,finishReason:f.finishReason,toolCalls:f.toolCalls??[],toolResults:f.toolResults??[],analytics:f.analytics,metadata:f.metadata}}async processStreamResult(e,t,n){return{content:"",usage:void 0,finishReason:"stop",toolCalls:[],toolResults:[],analytics:void 0,evaluation:void 0}}emitStreamEndEvents(e){this.emitter.emit("stream:end",{responseTime:Date.now(),timestamp:Date.now()}),this.emitter.emit("response:end",e.content||"")}createStreamResponse(e,t,n){return{stream:t,provider:n.providerName,model:n.options.model,usage:e.usage,finishReason:e.finishReason,toolCalls:e.toolCalls,toolResults:e.toolResults,analytics:e.analytics,evaluation:e.evaluation,events:n.events&&n.events.length>0?n.events:void 0,metadata:Object.assign(n.providerMetadata??{},{streamId:n.streamId,startTime:n.startTime,responseTime:n.responseTime,fallback:n.fallback||!1,guardrailsBlocked:n.guardrailsBlocked,error:n.error})}}async handleStreamError(e,t,n,o,s,i){if(e instanceof ql)throw e;g.error("Stream generation failed, attempting fallback",{error:e instanceof Error?e.message:String(e)});try{this.emitter.emit("stream:error",{content:e instanceof Error?e.message:String(e),metadata:{errorName:e instanceof Error?e.name:"UnknownError",durationMs:Date.now()-n,chunkCount:0},provider:t.provider||"unknown",model:t.model||"unknown"})}catch{}let a=t.input.text,c=Date.now()-n,l=await Nx(t.provider),d=await(await dn.createProvider(l,t.model,!0,void 0,void 0,this.resolveCredentials(t.credentials))).stream({input:{text:t.input.text},model:t.model,temperature:t.temperature,maxTokens:t.maxTokens,conversationMessages:t.conversationMessages}),p="";return{stream:(async function*(h){try{for await(let y of d.stream)y&&"content"in y&&typeof y.content=="string"&&(p+=y.content,h.emitter.emit("response:chunk",y.content)),yield y}finally{if(p.trim()){g.info("[NeuroLink.handleStreamError] stream() - COMPLETE SUCCESS (fallback)",{provider:l,model:t.model,responseTimeMs:Date.now()-n,contentLength:p.length});try{h.emitter.emit("stream:complete",{content:p,provider:l,model:t.model||"unknown",finishReason:"stop",metadata:{durationMs:Date.now()-n,chunkCount:0,totalLength:p.length,isFallback:!0,finishReason:"stop"}})}catch{}}if(h.conversationMemory&&s?.context?.sessionId&&p.trim()){let y=s?.context?.sessionId,x=s?.context?.userId,b;t.model&&(b={provider:l,model:t.model});let T=Date.now();try{let w=y||t.context?.sessionId,k=h.drainPendingSkillMessages(w);await h.conversationMemory.storeConversationTurn({sessionId:w,userId:x||t.context?.userId,userMessage:a??"",aiResponse:p,startTimeStamp:new Date(n),providerDetails:b,enableSummarization:s?.enableSummarization,requestId:s?.context?.requestId||t.context?.requestId,...k.length>0?{skillMessages:k}:{}}),h.recordMemorySpan("memory.store",{"memory.operation":"store","memory.path":"fallback-stream"},Date.now()-T,1)}catch(w){h.recordMemorySpan("memory.store",{"memory.operation":"store","memory.path":"fallback-stream"},Date.now()-T,2,w instanceof Error?w.message:String(w)),g.warn("Failed to store fallback stream conversation turn",{error:w instanceof Error?w.message:String(w)})}}}})(this),provider:l,model:t.model,usage:d.usage,finishReason:d.finishReason||"stop",toolCalls:d.toolCalls||[],toolResults:d.toolResults||[],analytics:d.analytics,evaluation:d.evaluation,metadata:{streamId:o,startTime:n,responseTime:c,fallback:!0}}}getEventEmitter(){return this.emitter}getToolDedupConfig(){return this.toolDedupConfig}async checkCredentials(e){let{provider:t,model:n}=e,o="ping";try{return await this.generate({provider:t,...n&&{model:n},input:{text:o},maxTokens:16,disableTools:!0}),{provider:t,status:"ok",detail:"credentials valid"}}catch(s){let i=s instanceof Error?s.message:String(s),a=i.toLowerCase();return s instanceof um?{provider:t,status:"denied",detail:i}:a.includes("authentication")||a.includes("401")||a.includes("invalid api key")||a.includes("incorrect api key")||a.includes("api_key_invalid")||a.includes("token has expired")||a.includes("expired credentials")?{provider:t,status:"expired",detail:i}:a.includes("not configured")||a.includes("missing api")||a.includes("api key is required")||a.includes("no api key")||a.includes("application default credentials")||a.includes("google_application_credentials")||a.includes("project_id")||a.includes("default credentials")||a.includes("service account")?{provider:t,status:"missing",detail:i}:a.includes("econnrefused")||a.includes("enotfound")||a.includes("could not resolve")||a.includes("timeout")||a.includes("network")||a.includes("cannot connect")?{provider:t,status:"network",detail:i}:{provider:t,status:"unknown",detail:i}}}emitToolStart(e,t,n=Date.now()){let o=`${e}-${n}-${Math.random().toString(36).substr(2,9)}`,s={executionId:o,tool:e,startTime:n,metadata:{inputType:typeof t,hasInput:t!=null}};return this.activeToolExecutions.set(o,s),this.currentStreamToolExecutions.push(s),this.emitter.emit("tool:start",Hf(e,{input:t,timestamp:n,executionId:o})),g.debug(`tool:start emitted for ${e}`,{toolName:e,executionId:o,timestamp:n,inputProvided:t!==void 0}),o}emitToolEnd(e,t,n,o,s=Date.now(),i){let a=o||s-1e3,c=s-a,l=!n,u;i?u=this.activeToolExecutions.get(i):u=Array.from(this.activeToolExecutions.values()).find(f=>f.tool===e&&!f.endTime);let d=i||u?.executionId||`${e}-${a}-fallback-${Math.random().toString(36).substr(2,9)}`;u&&(u.endTime=s,u.result=t,u.error=n,this.activeToolExecutions.delete(u.executionId));let p={tool:e,startTime:a,endTime:s,duration:c,success:l,result:t,error:n,executionId:d,metadata:{toolCategory:"custom"}};this.toolExecutionHistory.push(p),this.emitter.emit("tool:end",Hf(e,{result:t,error:n,success:l,responseTime:c,timestamp:s,duration:c,executionId:d})),g.debug(`tool:end emitted for ${e}`,{toolName:e,executionId:d,duration:c,success:l,hasResult:t!==void 0,hasError:!!n})}getCurrentToolExecutions(){return[...this.currentStreamToolExecutions]}getToolExecutionHistory(){return[...this.toolExecutionHistory]}clearCurrentStreamExecutions(){this.currentStreamToolExecutions=[]}registerTool(e,t,n){this.invalidateToolCache(),this.emitter.emit("tools-register:start",{toolName:e,timestamp:Date.now()});try{if(!e||typeof e!="string")throw new Error("Invalid tool name");if(!t||typeof t!="object")throw new Error(`Invalid tool object provided for tool: ${e}`);if(typeof t.execute!="function")throw new Error(`Tool '${e}' must have an execute method.`);if(e.trim()==="")throw new Error("Tool name cannot be empty");if(e.length>100)throw new Error("Tool name is too long (maximum 100 characters)");if(/[\x00-\x1F\x7F]/.test(e))throw new Error("Tool name contains invalid control characters");let o={name:t.name||e,description:t.description||e,execute:t.execute,inputSchema:"parameters"in t&&t.parameters&&(pP(t.parameters)||typeof t.parameters=="object")?t.parameters:t.inputSchema||{}};if(n?.timeout!==void 0&&n.timeout>0&&Number.isFinite(n.timeout)&&typeof o.execute=="function"){let i=o.execute,a=n.timeout,c=e;o.execute=async(...l)=>{let u=AbortSignal.timeout(a),d=l[1],p=d?.abortSignal,f=p?AbortSignal.any([p,u]):u,h={...d,abortSignal:f};return Promise.race([i(l[0],h),new Promise((y,x)=>{f.addEventListener("abort",()=>{u.aborted?x(me.toolTimeout(c,a)):x(new DOMException("The operation was aborted","AbortError"))},{once:!0})})])}}let s=Nqe(e,o,n?.timeout,n?.maxRetries);this.toolRegistry.registerServer(s),this.emitter.emit("tools-register:end",{toolName:e,success:!0,timestamp:Date.now(),timeoutMs:n?.timeout})}catch(o){throw g.error(`Failed to register tool ${e}:`,o),o}}setToolContext(e){this.toolExecutionContext={...e},g.debug("Tool execution context updated",{sessionId:e.sessionId,contextKeys:Object.keys(e),hasJuspayToken:!!e.juspayToken,hasShopId:!!e.shopId})}getToolContext(){return this.toolExecutionContext?{...this.toolExecutionContext}:void 0}clearToolContext(){this.toolExecutionContext=void 0,g.debug("Tool execution context cleared")}registerTools(e){if(Array.isArray(e))for(let{name:t,tool:n}of e)this.registerTool(t,n);else for(let[t,n]of Object.entries(e))this.registerTool(t,n)}unregisterTool(e){this.invalidateToolCache();let t=`custom-tool-${e}`,n=this.toolRegistry.unregisterServer(t);return n&&g.info(`Unregistered custom tool: ${e}`),n}useToolMiddleware(e){return this.mcpToolMiddlewares.push(e),g.debug(`[NeuroLink] Registered tool middleware (total: ${this.mcpToolMiddlewares.length})`),this}getToolMiddlewares(){return[...this.mcpToolMiddlewares]}async flushToolBatch(){this.mcpToolBatcher&&await this.mcpToolBatcher.flush()}getMCPEnhancementsConfig(){return this.mcpEnhancementsConfig}async updateAgenticLoopReport(e,t,n){if(!this.conversationMemory)throw new Tc("Conversation memory is not initialized. Enable conversationMemory in NeuroLink options.","CONFIG_ERROR");if(!("updateAgenticLoopReport"in this.conversationMemory)||typeof this.conversationMemory.updateAgenticLoopReport!="function")throw new Tc("updateAgenticLoopReport is only supported with Redis conversation memory.","CONFIG_ERROR");await Ke(this.conversationMemory.updateAgenticLoopReport(e,n,t),5e3)}getCustomTools(){let e=this.toolRegistry.getToolsByCategory(Aa({isCustomTool:!0})),t=new Map;for(let o of e){let s=o.inputSchema||o.parameters;g.debug("Processing tool schema for Claude",{toolName:o.name,hasDescription:!!o.description,description:o.description,hasParameters:!!o.parameters,parametersType:typeof o.parameters,parametersKeys:o.parameters&&typeof o.parameters=="object"?Object.keys(o.parameters):"NOT_OBJECT",hasInputSchema:!!o.inputSchema,inputSchemaType:typeof o.inputSchema,inputSchemaKeys:o.inputSchema&&typeof o.inputSchema=="object"?Object.keys(o.inputSchema):"NOT_OBJECT",hasEffectiveSchema:!!s,effectiveSchemaType:typeof s,effectiveSchemaHasProperties:!!s?.properties,effectiveSchemaHasRequired:!!s?.required,originalInputSchema:o.inputSchema,phase:"AFTER_SCHEMA_FIX",timestamp:Date.now()}),t.set(o.name,{name:o.name,description:o.description||"",inputSchema:typeof o.inputSchema=="object"&&o.inputSchema!==null?o.inputSchema:typeof o.parameters=="object"&&o.parameters!==null?o.parameters:{},execute:async(i,a)=>{let c=this.toolExecutionContext||{},l=a&&_r(a)?a:{},u={...c,...l,sessionId:l.sessionId||c.sessionId||`fallback-${Date.now()}`};return g.debug("Tool execution context merged",{toolName:o.name,storedContextKeys:Object.keys(c),runtimeContextKeys:Object.keys(l),finalContextKeys:Object.keys(u),hasJuspayToken:!!u.juspayToken,hasShopId:!!u.shopId,sessionId:u.sessionId}),await this.toolRegistry.executeTool(o.name,i,u)}})}this.cachedFileTools||(this.cachedFileTools=nle(this.fileRegistry));let n=this.cachedFileTools;for(let[o,s]of Object.entries(n))if(!t.has(o)){let i=s,a=i.inputSchema??i.parameters;t.set(o,{name:o,description:s.description||`File tool: ${o}`,inputSchema:typeof a=="object"&&a!==null?a:{type:"object",properties:{}},execute:async c=>await s.execute(c,{toolCallId:`file-tool-${Date.now()}`,messages:[]})})}return t}async addInMemoryMCPServer(e,t){this.invalidateToolCache();try{ie.debug(`[NeuroLink] Registering in-memory MCP server: ${e}`),t.tools||(t.tools=[]),await this.toolRegistry.registerServer(t),ie.info(`[NeuroLink] Successfully registered in-memory server: ${e}`,{category:t.metadata?.category,provider:t.metadata?.provider,version:t.metadata?.version})}catch(n){throw ie.error(`[NeuroLink] Failed to register in-memory server ${e}:`,n),n}}getInMemoryServers(){let e=this.getInMemoryServerInfos(),t=new Map;for(let n of e)t.set(n.id,n);return t}getInMemoryServerInfos(){return this.toolRegistry.getBuiltInServerInfos().filter(t=>Aa({existingCategory:t.metadata?.category,serverId:t.id})==="in-memory")}getAutoDiscoveredServerInfos(){return this.autoDiscoveredServerInfos}async executeTool(e,t={},n){if(this.mcpToolBatcher&&!n?.bypassBatcher)return this.mcpToolBatcher.execute(e,t);let o=this.createToolExecutionContext(e,t,n);return _e.mcp.startActiveSpan("neurolink.tool.execute",{attributes:{"tool.name":e,"tool.type":o.toolType,"tool.input_size":o.inputSize,"tool.input_preview":o.truncatedInput}},s=>this.executeToolWithSpan(e,t,n,o,s))}createToolExecutionContext(e,t,n){let o=this.externalServerManager.getAllTools().find(l=>l.name===e),s=o?"mcp":this.getCustomTools().has(e)?"custom":"external",i=t?jm(t):"",a=Date.now(),c=`${e}-${a}-${Math.random().toString(36).slice(2,11)}`;return{functionTag:"NeuroLink.executeTool",executionStartTime:a,executionId:c,externalTool:o,toolType:s,inputSize:i.length,truncatedInput:i.length>2048?i.substring(0,2048):i,options:n,hitlState:{triggered:!1}}}async executeToolWithSpan(e,t,n,o,s){try{let i=await this.prepareToolExecutionState(e,t,n,o);return await this.runPreparedToolExecution(e,t,i,o,s)}catch(i){if(!(i instanceof Fe)){let a=i instanceof Error?i.message:String(i);s.recordException(i instanceof Error?i:new Error(a)),s.setStatus({code:Ie.ERROR,message:a})}throw i}finally{s.end()}}async prepareToolExecutionState(e,t,n,o){g.debug(`[${o.functionTag}] Tool execution requested:`,{toolName:e,params:_r(t)?XB(t):t,hasExternalManager:!!this.externalServerManager}),g.debug("Tool execution detailed analysis",{toolName:e,executionStartTime:o.executionStartTime,paramsAnalysis:{type:typeof t,isNull:t===null,isUndefined:t===void 0,isEmpty:t&&typeof t=="object"&&Object.keys(t).length===0,keys:t&&typeof t=="object"?Object.keys(t):"NOT_OBJECT",keysLength:t&&typeof t=="object"?Object.keys(t).length:0},isTargetTool:e==="juspay-analytics_SuccessRateSRByTime",options:n,hasExternalManager:!!this.externalServerManager}),this.emitter.emit("tool:start",Hf(e,{timestamp:o.executionStartTime,input:t,executionId:o.executionId}));let s=this.toolRegistry.getToolInfo(e),i={timeout:n?.timeout??s?.tool?.timeoutMs??gl.EXECUTION_BATCH_MS,maxRetries:n?.maxRetries??s?.tool?.maxRetries??Ko.DEFAULT,retryDelayMs:n?.retryDelayMs||Qn.BASE_MS,authContext:n?.authContext,disableToolCache:n?.disableToolCache},{MemoryManager:a}=await Promise.resolve().then(()=>(dC(),uC)),c=a.getMemoryUsageMB(),u=`${o.externalTool?.serverId||s?.tool?.serverId||"unknown"}.${e}`,d=this.toolCircuitBreakers.get(u);d||(d=new mE(GI.FAILURE_THRESHOLD,j2),this.toolCircuitBreakers.set(u,d));let p=this.toolExecutionMetrics.get(e);return p||(p={totalExecutions:0,successfulExecutions:0,failedExecutions:0,averageExecutionTime:0,lastExecutionTime:0,errorCategories:{}},this.toolExecutionMetrics.set(e,p)),p.totalExecutions++,{finalOptions:i,startMemory:c,circuitBreaker:d,breakerKey:u,metrics:p}}async runPreparedToolExecution(e,t,n,o,s){let i=0;try{ie.debug(`[${o.functionTag}] Executing tool: ${e}`,{toolName:e,params:t,options:n.finalOptions,circuitBreakerState:n.circuitBreaker.getState()});let a=await n.circuitBreaker.execute(async()=>$Z(async()=>Ke(this.executeToolInternal(e,t,n.finalOptions,o.hitlState),n.finalOptions.timeout,me.toolTimeout(e,n.finalOptions.timeout)),{maxAttempts:n.finalOptions.maxRetries+1,delayMs:n.finalOptions.retryDelayMs,isRetriable:eB,onRetry:(c,l)=>{i=c,ie.warn(`[${o.functionTag}] Retrying tool execution (attempt ${c})`,{toolName:e,error:l.message,attempt:c})}}));return s.setAttribute("tool.retry_count",i),await this.handleSuccessfulToolExecution(e,a,n,o,s)}catch(a){return s.setAttribute("tool.retry_count",i),this.handleFailedToolExecution(e,t,a,n,o,s)}}async handleSuccessfulToolExecution(e,t,n,o,s){let i=Date.now()-o.executionStartTime;n.metrics.successfulExecutions++,n.metrics.lastExecutionTime=i,n.metrics.averageExecutionTime=(n.metrics.averageExecutionTime*(n.metrics.successfulExecutions-1)+i)/n.metrics.successfulExecutions;let{MemoryManager:a}=await Promise.resolve().then(()=>(dC(),uC)),l=a.getMemoryUsageMB().heapUsed-n.startMemory.heapUsed;l>20&&ie.warn(`Tool '${e}' used excessive memory: ${l}MB`,{toolName:e,memoryDelta:l,executionTime:i}),ie.debug(`[${o.functionTag}] Tool executed successfully`,{toolName:e,executionTime:i,memoryDelta:l,circuitBreakerState:n.circuitBreaker.getState()});let u=t&&typeof t=="object"?t:void 0,d=u&&"isError"in u&&u.isError===!0||u&&"success"in u&&u.success===!1,p=d?u?.content:void 0,f=d?p?.filter(h=>h.type==="text"&&h.text).map(h=>h.text).join(" ")||(typeof u?.error=="string"?u.error:"Unknown error"):void 0;if(d){try{await n.circuitBreaker.execute(async()=>{throw new Error(`Tool ${e} returned isError:true`)})}catch{}ie.debug(`[${o.functionTag}] Circuit breaker failure recorded for isError result`,{toolName:e,circuitBreakerState:n.circuitBreaker.getState(),circuitBreakerFailures:n.circuitBreaker.getFailureCount()});let h=WCr(f??"Unknown error"),y=`[TOOL_ERROR: ${e} failed (${h})] `;if(u&&Array.isArray(p)){let T=p.map(w=>({...w}));for(let w of T)if(w.type==="text"&&w.text){w.text=y+w.text;break}u.content=T}s.setAttribute("tool.error.message",(f??"Unknown error").substring(0,500)),s.setAttribute("tool.error.category",h),s.setStatus({code:Ie.ERROR,message:`MCP tool returned isError: ${(f??"Unknown error").substring(0,200)}`}),n.metrics.failedExecutions++;let x=n.metrics.successfulExecutions;n.metrics.successfulExecutions=Math.max(0,n.metrics.successfulExecutions-1),n.metrics.averageExecutionTime=x>1?(n.metrics.averageExecutionTime*x-i)/(x-1):0;let b=KCr(h);n.metrics.errorCategories[b]=(n.metrics.errorCategories[b]||0)+1}return this.emitToolEndEvent(e,o.executionStartTime,!d,t,d&&f?new Error(f):void 0,o.executionId),s.setAttribute("tool.result.status",d?"error":"success"),s.setAttribute("tool.duration_ms",i),t}async handleFailedToolExecution(e,t,n,o,s,i){o.metrics.failedExecutions++;let a=Date.now()-s.executionStartTime;if(n instanceof bc)return ie.warn(`[${s.functionTag}] Tool blocked by circuit breaker: ${e}`,{toolName:e,breakerState:n.breakerState,retryAfter:n.retryAfter,retryAfterMs:n.retryAfterMs,failureCount:n.failureCount,executionTime:a}),o.metrics.errorCategories.execution=(o.metrics.errorCategories.execution||0)+1,this.emitToolEndEvent(e,s.executionStartTime,!1,void 0,new Error(`Circuit breaker open for ${e} (state=${n.breakerState}, failures=${n.failureCount})`),s.executionId),i.setAttribute("tool.result.status","circuit_breaker_open"),i.setAttribute("tool.duration_ms",a),i.setAttribute("tool.circuit_breaker.state",n.breakerState),i.setAttribute("tool.circuit_breaker.retry_after_ms",n.retryAfterMs),i.setAttribute("tool.circuit_breaker.failure_count",n.failureCount),i.setStatus({code:Ie.ERROR,message:`Circuit breaker open for ${e}: ${n.message}`}),{isError:!0,content:[{type:"text",text:`TOOL TEMPORARILY UNAVAILABLE: "${e}" has been disabled after ${n.failureCount} failures. This is a circuit breaker protection \u2014 do NOT retry this tool. It will become available again after ${Math.ceil(n.retryAfterMs/1e3)} seconds (at ${n.retryAfter}). Instead, inform the user that the operation failed and suggest trying again later.`}]};let c;if(n instanceof Fe)c=n;else if(n instanceof Error)if(n.message.includes("timeout"))c=me.toolTimeout(e,o.finalOptions.timeout);else if(n.message.includes("not found")){let u=await this.getAllAvailableTools();c=me.toolNotFound(e,APe(u.map(d=>({name:d.name}))))}else n.message.includes("validation")||n.message.includes("parameter")?c=me.invalidParameters(e,n,t):n.message.includes("network")||n.message.includes("connection")?c=me.networkError(e,n):c=me.toolExecutionFailed(e,n);else c=me.toolExecutionFailed(e,new Error(String(n)));let l=c.category||"execution";throw o.metrics.errorCategories[l]=(o.metrics.errorCategories[l]||0)+1,this.emitToolEndEvent(e,s.executionStartTime,!1,void 0,c,s.executionId),this.emitter.listenerCount("error")>0&&this.emitter.emit("error",c),c=new Fe({...c,context:{...c.context,executionTime:a,params:t,options:o.finalOptions,circuitBreakerState:o.circuitBreaker.getState(),circuitBreakerFailures:o.circuitBreaker.getFailureCount(),metrics:{...o.metrics}}}),BZ(c),i.setAttribute("tool.result.status","error"),i.setAttribute("tool.duration_ms",a),i.recordException(c),i.setStatus({code:Ie.ERROR,message:c.message}),c}async executeToolInternal(e,t,n,o){let s="NeuroLink.executeToolInternal",i=this.getToolAnnotationsForExecution(e),a=this.mcpToolResultCache&&!n.disableToolCache&&!this._disableToolCacheForCurrentRequest&&!i?.destructiveHint,c=this.mcpToolResultCache,l=n.authContext||this.toolExecutionContext?{__args:t,__ctx:n.authContext??this.toolExecutionContext}:t;if(a&&c){let p=c.getCachedResult(e,l);if(p!==void 0)return g.debug(`[${s}] Cache HIT for tool: ${e}`),p}let u=async p=>{if(this.mcpToolMiddlewares.length===0)return p();let f=0,h=async()=>{if(f<this.mcpToolMiddlewares.length){let y=this.mcpToolMiddlewares[f++];return y({name:e,description:"",inputSchema:{},annotations:i,execute:async()=>({})},t,{toolMeta:{name:e,annotations:i}},h)}return p()};return await h()},d=async()=>{let p=this.externalServerManager.getAllTools(),f=p.filter(y=>y.name===e&&y.isAvailable),h;if(f.length>1&&this.mcpToolRouter)try{let y={name:e,description:f[0].description??"",serverId:f[0].serverId,inputSchema:{}},x=this.mcpToolRouter.route(y);h=f.find(b=>b.serverId===x.serverId)||f[0],g.debug(`[${s}] Router selected server: ${x.serverId}`,{strategy:x.strategy,confidence:x.confidence})}catch(y){g.warn(`[${s}] Router failed, falling back to first match`,{error:y}),h=f[0]}else h=f[0];if(g.debug(`[${s}] External MCP tool search:`,{toolName:e,externalToolsCount:p.length,foundTool:!!h,isAvailable:h?.isAvailable,serverId:h?.serverId}),h&&h.isAvailable)try{ie.debug(`[${s}] Executing external MCP tool: ${e} from ${h.serverId}`);let y=await this.externalServerManager.executeTool(h.serverId,e,t,{timeout:n.timeout});return g.debug(`[${s}] External MCP tool execution successful:`,{toolName:e,serverId:h.serverId,resultType:typeof y}),y}catch(y){throw g.error(`[${s}] External MCP tool execution failed:`,{toolName:e,serverId:h.serverId,error:y instanceof Error?y.message:String(y)}),me.toolExecutionFailed(e,y instanceof Error?y:new Error(String(y)),h.serverId)}try{let y=this.toolExecutionContext||{},x=n.authContext||{},b={...y,...x,hitlState:o};g.debug("[Using merged context for unified registry tool:",{toolName:e,storedContextKeys:Object.keys(y),finalContextKeys:Object.keys(b)});let T=await this.toolRegistry.executeTool(e,t,b);if(T&&typeof T=="object"&&"success"in T&&T.success===!1){let w=T.error||"Tool execution failed",k=new Error(w);this.emitter.listenerCount("error")>0&&this.emitter.emit("error",k)}return T}catch(y){let x=y instanceof Error?y:new Error(String(y));if(this.emitter.listenerCount("error")>0&&this.emitter.emit("error",x),y instanceof Error&&y.message.includes("not found")){let b=await this.getAllAvailableTools();throw me.toolNotFound(e,b.map(T=>T.name))}throw me.toolExecutionFailed(e,y instanceof Error?y:new Error(String(y)))}};try{let p=await u(d);return a&&c&&p!==void 0&&(c.cacheResult(e,l,p),g.debug(`[${s}] Cached result for tool: ${e}`)),p}catch(p){let f=i?{name:e,description:"",annotations:i,execute:async()=>({})}:void 0;if(f&&ON(f)&&p instanceof Error&&eB(p)){g.debug(`[${s}] Tool ${e} is safe to retry, attempting once more`);try{let h=await u(d);return a&&c&&h!==void 0&&c.cacheResult(e,l,h),h}catch{}}throw p}}getToolAnnotationsForExecution(e){if(this.toolCache?.tools){let t=this.toolCache.tools.find(n=>n.name===e);if(t?.annotations)return t.annotations}if(this.mcpEnhancementsConfig?.annotations?.autoInfer!==!1)return Du({name:e,description:""})}invalidateToolCache(){this.toolCache=null,g.debug("Tool cache invalidated")}async getAllAvailableTools(){if(this.toolCache&&Date.now()-this.toolCache.timestamp<this.toolCacheDuration)return g.debug("Returning available tools from cache"),this.toolCache.tools;let e=`get-all-tools-${Date.now()}-${Math.random().toString(36).substr(2,9)}`,t=Date.now(),n=process.hrtime.bigint();g.debug("[NeuroLink] \u{1F6E0}\uFE0F LOG_POINT_A001_GET_ALL_TOOLS_START",{logPoint:"A001_GET_ALL_TOOLS_START",getAllToolsId:e,timestamp:new Date().toISOString(),getAllToolsStartTime:t,getAllToolsHrTimeStart:n.toString(),toolRegistryState:{hasToolRegistry:!!this.toolRegistry,toolRegistrySize:0,toolRegistryType:this.toolRegistry?.constructor?.name||"NOT_SET",hasExternalServerManager:!!this.externalServerManager,externalServerManagerType:this.externalServerManager?.constructor?.name||"NOT_SET"},mcpState:{mcpInitialized:this.mcpInitialized,hasProviderRegistry:!!dn,providerRegistrySize:0},message:"Starting comprehensive tool discovery across all sources"});let{MemoryManager:o}=await Promise.resolve().then(()=>(dC(),uC)),s=o.getMemoryUsageMB();try{let i=new Map,a=await this.toolRegistry.listTools();for(let y of a)if(!i.has(y.name)){let x=mP(y,{serverId:y.serverId==="direct"?"neurolink-direct":y.serverId});i.set(y.name,x)}let c=this.toolRegistry.getToolsByCategory(Aa({isCustomTool:!0}));for(let y of c)if(!i.has(y.name)){let x=mP(y,{description:"Custom tool",serverId:`custom-tool-${y.name}`,category:Aa({isCustomTool:!0,serverId:y.serverId}),inputSchema:{}});i.set(y.name,x)}let l=this.toolRegistry.getToolsByCategory("in-memory");for(let y of l)if(!i.has(y.name)){let x=mP(y,{description:"In-memory MCP tool",serverId:"unknown",category:"in-memory",inputSchema:{}});i.set(y.name,x)}let u=this.externalServerManager.getAllTools();for(let y of u)if(!i.has(y.name)){let x=mP(y,{category:Aa({existingCategory:typeof y.metadata?.category=="string"?y.metadata.category:void 0,isExternal:!0,serverId:y.serverId}),inputSchema:{}});i.set(y.name,x)}let d=Array.from(i.values());ie.debug("Tool discovery results",{mcpTools:a.length,customTools:c.length,inMemoryTools:l.length,externalMCPTools:u.length,total:d.length});let f=o.getMemoryUsageMB().heapUsed-s.heapUsed;if(f>cm.LOW_USAGE_MB&&(ie.debug(`\u{1F50D} Tool listing used ${f}MB memory (large tool registry detected)`),d.length>hZ.LARGE_TOOL_COLLECTION&&ie.debug("\u{1F4A1} Tool collection optimized for large sets. Memory usage reduced through efficient object reuse.")),this.mcpEnhancementsConfig?.annotations?.autoInfer!==!1)for(let y of d)y.annotations||(y.annotations=Du({name:y.name,description:y.description||""}));let h=d;return this.toolCache={tools:h,timestamp:Date.now()},h}catch(i){return ie.error("Failed to list available tools",{error:i}),[]}}async getProviderStatus(e){let{MemoryManager:t}=await Promise.resolve().then(()=>(dC(),uC)),n=t.getMemoryUsageMB();e?.quiet||ie.debug("\u{1F50D} DEBUG: Initializing MCP for provider status..."),await this.initializeMCP(),e?.quiet||ie.debug("\u{1F50D} DEBUG: MCP initialized:",this.mcpInitialized);let{AIProviderFactory:o}=await Promise.resolve().then(()=>(gu(),bW)),{hasProviderEnvVars:s}=await Promise.resolve().then(()=>(zg(),ID)),i=["openai","bedrock","vertex","googleVertex","anthropic","azure","google-ai","huggingface","ollama","mistral","litellm"],a=zm(fl.DEFAULT_CONCURRENCY_LIMIT),c=i.map(p=>a(async()=>{let f=Date.now();try{if(!await this.hasProviderEnvVars(p)&&p!=="ollama")return{provider:p,status:"not-configured",configured:!1,authenticated:!1,error:"Missing required environment variables",responseTime:Date.now()-f};if(p==="ollama")try{let T=await fetch("http://localhost:11434/api/tags",{method:"GET",signal:AbortSignal.timeout(hl.AUTH_MS)});if(!T.ok)throw new Error("Ollama service not responding");let w=await T.json(),k=w?.models;if(!Array.isArray(k))throw g.warn("Ollama API returned invalid models format in testProvider",{responseData:w,modelsType:typeof k}),new Error("Invalid models format from Ollama API");let C=k.filter(A=>A&&typeof A=="object"&&typeof A.name=="string");return C.length>0?{provider:p,status:"working",configured:!0,authenticated:!0,responseTime:Date.now()-f,model:C[0].name}:{provider:p,status:"failed",configured:!0,authenticated:!1,error:"Ollama service running but no models installed",responseTime:Date.now()-f}}catch(T){return{provider:p,status:"failed",configured:!1,authenticated:!1,error:T instanceof Error?T.message:"Ollama service not running",responseTime:Date.now()-f}}let y=5e3,x=this.testProviderConnection(p),b=new Promise((T,w)=>{setTimeout(()=>w(new Error("Provider test timeout (5s)")),y)});return await Promise.race([x,b]),{provider:p,status:"working",configured:!0,authenticated:!0,responseTime:Date.now()-f}}catch(h){let y=h instanceof Error?h.message:String(h);return{provider:p,status:"failed",configured:!0,authenticated:!1,error:y,responseTime:Date.now()-f}}})),l=await Promise.all(c),d=t.getMemoryUsageMB().heapUsed-n.heapUsed;return!e?.quiet&&d>20&&ie.debug(`\u{1F50D} Memory usage: +${d}MB (consider cleanup for large operations)`),d>50&&t.forceGC(),l}async testProvider(e){try{return await this.testProviderConnection(e),!0}catch{return!1}}async testProviderConnection(e){let{AIProviderFactory:t}=await Promise.resolve().then(()=>(gu(),bW));await(await t.createProvider(e,null)).generate({prompt:"test",maxTokens:1,disableTools:!0})}async getBestProvider(e){let{getBestProvider:t}=await Promise.resolve().then(()=>(zg(),ID));return t(e)}async getAvailableProviders(){let{getAvailableProviders:e}=await Promise.resolve().then(()=>(zg(),ID));return e()}async isValidProvider(e){let{isValidProvider:t}=await Promise.resolve().then(()=>(zg(),ID));return t(e)}async getMCPStatus(){try{await this.initializeMCP();let e=await this.toolRegistry.listTools(),t=this.externalServerManager.getStatistics(),n=this.externalServerManager.listServers(),o=this.getInMemoryServerInfos(),s=this.toolRegistry.getBuiltInServerInfos(),i=this.getAutoDiscoveredServerInfos(),a=n.length+o.length+s.length+i.length,c=t.connectedServers+o.length+s.length,l=e.length+t.totalTools;return{mcpInitialized:this.mcpInitialized,totalServers:a,availableServers:c,autoDiscoveredCount:i.length,totalTools:l,autoDiscoveredServers:i,customToolsCount:this.toolRegistry.getToolsByCategory(Aa({isCustomTool:!0})).length,inMemoryServersCount:o.length,externalMCPServersCount:n.length,externalMCPConnectedCount:t.connectedServers,externalMCPFailedCount:t.failedServers,externalMCPServers:n}}catch(e){return{mcpInitialized:!1,totalServers:0,availableServers:0,autoDiscoveredCount:0,totalTools:0,autoDiscoveredServers:[],customToolsCount:this.toolRegistry.getToolsByCategory(Aa({isCustomTool:!0})).length,inMemoryServersCount:0,externalMCPServersCount:0,externalMCPConnectedCount:0,externalMCPFailedCount:0,externalMCPServers:[],error:e instanceof Error?e.message:String(e)}}}async listMCPServers(){return[...this.externalServerManager.listServers(),...this.getInMemoryServerInfos(),...this.toolRegistry.getBuiltInServerInfos(),...this.getAutoDiscoveredServerInfos()]}async testMCPServer(e){try{if(e==="neurolink-direct")return(await this.toolRegistry.listTools()).length>0;let t=this.getInMemoryServers();if(t.has(e)){let o=t.get(e);return!!(o?.tools&&o.tools.length>0)}let n=this.externalServerManager.getServer(e);return n?n.status==="connected"&&n.client!==null:!1}catch(t){return ie.error(`[NeuroLink] Error testing MCP server ${e}:`,t),!1}}async hasProviderEnvVars(e){let{ProviderHealthChecker:t}=await Promise.resolve().then(()=>(Ox(),rC));try{let n=await t.checkProviderHealth(e,{includeConnectivityTest:!1,cacheResults:!1});return n.isConfigured&&n.hasApiKey}catch(n){return g.warn(`Provider env var check failed for ${e}`,{error:n instanceof Error?n.message:String(n)}),!1}}async checkProviderHealth(e,t={}){let{ProviderHealthChecker:n}=await Promise.resolve().then(()=>(Ox(),rC)),o=await n.checkProviderHealth(e,t);return{provider:o.provider,isHealthy:o.isHealthy,isConfigured:o.isConfigured,hasApiKey:o.hasApiKey,lastChecked:o.lastChecked,error:o.error,warning:o.warning,responseTime:o.responseTime,configurationIssues:o.configurationIssues,recommendations:o.recommendations}}async checkAllProvidersHealth(e={}){let{ProviderHealthChecker:t}=await Promise.resolve().then(()=>(Ox(),rC));return(await t.checkAllProvidersHealth(e)).map(o=>({provider:o.provider,isHealthy:o.isHealthy,isConfigured:o.isConfigured,hasApiKey:o.hasApiKey,lastChecked:o.lastChecked,error:o.error,warning:o.warning,responseTime:o.responseTime,configurationIssues:o.configurationIssues,recommendations:o.recommendations}))}async getProviderHealthSummary(){let{ProviderHealthChecker:e}=await Promise.resolve().then(()=>(Ox(),rC)),t=await e.checkAllProvidersHealth({cacheResults:!0,includeConnectivityTest:!1}),n=e.getHealthSummary(t),o=[];return n.healthy===0?o.push("No providers are healthy. Check your environment configuration."):n.healthy<2&&o.push("Consider configuring additional providers for better reliability."),n.hasIssues>0&&o.push("Some providers have configuration issues. Run checkAllProvidersHealth() for details."),{...n,recommendations:o}}async clearProviderHealthCache(e){let{ProviderHealthChecker:t}=await Promise.resolve().then(()=>(Ox(),rC));t.clearHealthCache(e)}getToolExecutionMetrics(){let e={};for(let[t,n]of this.toolExecutionMetrics.entries())e[t]={...n,errorCategories:{...n.errorCategories},successRate:n.totalExecutions>0?n.successfulExecutions/n.totalExecutions:0};return e}setModelAliasConfig(e){this.modelAliasConfig=e,g.info(`[ModelAlias] Configured ${Object.keys(e.aliases).length} model aliases`)}getToolCircuitBreakerStatus(){let e={};for(let[t,n]of this.toolCircuitBreakers.entries())e[t]={state:n.getState(),failureCount:n.getFailureCount(),isHealthy:n.getState()==="closed"};return e}resetToolCircuitBreaker(e){this.toolCircuitBreakers.has(e)&&(this.toolCircuitBreakers.set(e,new mE(GI.FAILURE_THRESHOLD,j2)),ie.info(`Circuit breaker reset for tool: ${e}`))}clearToolExecutionMetrics(){this.toolExecutionMetrics.clear(),ie.info("All tool execution metrics cleared")}async getToolHealthReport(){let e={},t=0,n=await this.toolRegistry.listTools(),o=new Set(n.map(i=>i.name)),s=new Map;for(let i of n)s.has(i.name)||s.set(i.name,i.serverId||"unknown");for(let i of o){let a=this.toolExecutionMetrics.get(i),c=`${s.get(i)||"unknown"}.${i}`,l=this.toolCircuitBreakers.get(c),u=a&&a.totalExecutions>0?a.successfulExecutions/a.totalExecutions:0,d=(!l||l.getState()==="closed")&&u>=.8;d&&t++;let p=[],f=[];if(l&&l.getState()==="open"&&(p.push("Circuit breaker is open due to repeated failures"),f.push("Check tool implementation and fix underlying issues")),u<.8&&a&&a.totalExecutions>0&&(p.push(`Low success rate: ${(u*100).toFixed(1)}%`),f.push("Review error logs and improve tool reliability")),a&&a.averageExecutionTime>1e4&&(p.push("High average execution time"),f.push("Optimize tool performance or increase timeout")),a&&a.errorCategories){let h=a.errorCategories;h.timeout>0&&(p.push(`Timeout errors: ${h.timeout}`),f.push("Consider increasing the tool timeout configuration")),h.validation>0&&(p.push(`Validation errors: ${h.validation}`),f.push("Review input schemas and parameter validation")),h.network>0&&(p.push(`Network errors: ${h.network}`),f.push("Check network connectivity and endpoint availability"))}e[i]={name:i,isHealthy:d,metrics:{totalExecutions:a?.totalExecutions||0,successRate:u,averageExecutionTime:a?.averageExecutionTime||0,lastExecutionTime:a?.lastExecutionTime||0,errorCategories:a?.errorCategories?{...a.errorCategories}:{}},circuitBreaker:{state:l?.getState()||"closed",failureCount:l?.getFailureCount()||0},issues:p,recommendations:f}}return{totalTools:o.size,healthyTools:t,unhealthyTools:o.size-t,tools:e}}async ensureConversationMemoryInitialized(){try{let e=`manual-init-${Date.now()}`;return await this.initializeConversationMemoryForGeneration(e,Date.now(),process.hrtime.bigint()),!!this.conversationMemory}catch(e){return g.error("Failed to initialize conversation memory",{error:e instanceof Error?e.message:String(e)}),!1}}async getConversationStats(){let e=`stats-init-${Date.now()}`;if(await this.initializeConversationMemoryForGeneration(e,Date.now(),process.hrtime.bigint()),!this.conversationMemory)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Conversation memory is not enabled",category:"validation",severity:"high",retriable:!1});return await this.conversationMemory.getStats()}async getConversationHistory(e){let t=`history-init-${Date.now()}`;if(await this.initializeConversationMemoryForGeneration(t,Date.now(),process.hrtime.bigint()),!this.conversationMemory)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Conversation memory is not enabled",category:"validation",severity:"high",retriable:!1});if(!e||typeof e!="string")throw new Fe({code:ut.INVALID_PARAMETERS,message:"Session ID must be a non-empty string",category:"validation",severity:"medium",retriable:!1,context:{sessionId:e}});try{let n=await this.conversationMemory.buildContextMessages(e);return g.debug("Retrieved conversation history",{sessionId:e,messageCount:n.length,turnCount:n.length/2}),n}catch(n){return g.error("Failed to retrieve conversation history",{sessionId:e,error:n instanceof Error?n.message:String(n)}),[]}}async clearConversationSession(e){let t=`clear-session-init-${Date.now()}`;if(await this.initializeConversationMemoryForGeneration(t,Date.now(),process.hrtime.bigint()),!this.conversationMemory)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Conversation memory is not enabled",category:"validation",severity:"high",retriable:!1});return this.lastCompactionMessageCount.delete(e),await this.conversationMemory.clearSession(e)}async clearAllConversations(){let e=`clear-all-init-${Date.now()}`;if(await this.initializeConversationMemoryForGeneration(e,Date.now(),process.hrtime.bigint()),!this.conversationMemory)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Conversation memory is not enabled",category:"validation",severity:"high",retriable:!1});this.lastCompactionMessageCount.clear(),await this.conversationMemory.clearAllSessions()}async storeToolExecutions(e,t,n,o,s){let i=n&&n.length>0||o&&o.length>0;if(!i){g.debug("Tool execution storage skipped",{hasToolData:i,toolCallsCount:n?.length||0,toolResultsCount:o?.length||0});return}let a=this.conversationMemory;try{await a.storeToolExecution(e,t,n,o,s)}catch(c){g.warn("Failed to store tool executions",{sessionId:e,userId:t,error:c instanceof Error?c.message:String(c)})}}isToolExecutionStorageAvailable(){let e=process.env.STORAGE_TYPE==="redis",t=this.conversationMemory&&this.conversationMemory.constructor.name==="RedisConversationMemoryManager";return!!(e&&t)}async getSessionMessages(e,t){let n=`get-msgs-init-${Date.now()}`;if(await this.initializeConversationMemoryForGeneration(n,Date.now(),process.hrtime.bigint()),!this.conversationMemory)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Conversation memory is not enabled",category:"validation",severity:"high",retriable:!1});if(!e||typeof e!="string")throw new Fe({code:ut.INVALID_PARAMETERS,message:"Session ID must be a non-empty string",category:"validation",severity:"medium",retriable:!1,context:{sessionId:e}});return await this.conversationMemory.getSessionMessages(e,t)}async setSessionMessages(e,t,n){let o=`set-msgs-init-${Date.now()}`;if(await this.initializeConversationMemoryForGeneration(o,Date.now(),process.hrtime.bigint()),!this.conversationMemory)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Conversation memory is not enabled",category:"validation",severity:"high",retriable:!1});if(!e||typeof e!="string")throw new Fe({code:ut.INVALID_PARAMETERS,message:"Session ID must be a non-empty string",category:"validation",severity:"medium",retriable:!1,context:{sessionId:e}});await this.conversationMemory.setSessionMessages(e,t,n)}async modifyLastAssistantMessage(e,t,n){let o=await this.getSessionMessages(e,n);for(let s=o.length-1;s>=0;s--)if(o[s].role==="assistant")return o[s]={...o[s],content:t(o[s].content)},await this.setSessionMessages(e,o,n),!0;return!1}async addExternalMCPServer(e,t){this.invalidateToolCache();try{ie.info(`[NeuroLink] Adding external MCP server: ${e}`,{command:t.command,transport:t.transport});let n=await this.externalServerManager.addServer(e,t);if(n.success){if(ie.info(`[NeuroLink] External MCP server added successfully: ${e}`,{toolsDiscovered:n.metadata?.toolsDiscovered||0,duration:n.duration}),this.mcpEnhancementsConfig?.router?.enabled!==!1){let o=this.externalServerManager.listServers();if(o.length>=2&&!this.mcpToolRouter){this.mcpToolRouter=new Ix({strategy:this.mcpEnhancementsConfig?.router?.strategy??"least-loaded",enableAffinity:this.mcpEnhancementsConfig?.router?.enableAffinity??!1});for(let s of o)this.mcpToolRouter.registerServer(s.id||e);g.debug("[NeuroLink] ToolRouter auto-initialized (2+ external servers)")}else this.mcpToolRouter&&this.mcpToolRouter.registerServer(e)}this.emitter.emit("externalMCP:serverAdded",{serverId:e,serverName:t.name||e,config:t,toolCount:n.metadata?.toolsDiscovered||0,timestamp:Date.now()})}else ie.error(`[NeuroLink] Failed to add external MCP server: ${e}`,{error:n.error,transport:t.transport,command:t.command,url:t.url?mr(t.url):void 0});return n}catch(n){throw ie.error(`[NeuroLink] Error adding external MCP server: ${e}`,n),n}}async removeExternalMCPServer(e){this.invalidateToolCache();try{ie.info(`[NeuroLink] Removing external MCP server: ${e}`);let t=this.externalServerManager.getServerName(e),n=await this.externalServerManager.removeServer(e);return n.success?(ie.info(`[NeuroLink] External MCP server removed successfully: ${e}`),this.emitter.emit("externalMCP:serverRemoved",{serverId:e,serverName:t,timestamp:Date.now()})):n.error?.includes("not found")?ie.debug(`[NeuroLink] Remove skipped \u2014 external MCP server not registered: ${e}`):ie.error(`[NeuroLink] Failed to remove external MCP server: ${e}`,{error:n.error}),n}catch(t){throw ie.error(`[NeuroLink] Error removing external MCP server: ${e}`,t),t}}listExternalMCPServers(){let e=this.externalServerManager.getServerStatuses(),t=this.externalServerManager.listServers();return e.map(n=>{let o=t.find(s=>s.id===n.serverId);return{serverId:n.serverId,status:n.status,toolCount:n.toolCount,uptime:n.performance.uptime,isHealthy:n.isHealthy,config:o||{}}})}getExternalMCPServer(e){return this.externalServerManager.getServer(e)}async executeExternalMCPTool(e,t,n,o){try{ie.debug(`[NeuroLink] Executing external MCP tool: ${t} on ${e}`);let s=this.getToolAnnotationsForExecution(t),i=!!this.mcpToolResultCache&&!this._disableToolCacheForCurrentRequest&&!s?.destructiveHint,a={__serverId:e,__args:n,...this.toolExecutionContext?{__ctx:this.toolExecutionContext}:{}};if(i&&this.mcpToolResultCache){let d=this.mcpToolResultCache.getCachedResult(t,a);if(d!==void 0)return ie.debug(`[NeuroLink] Tool result cache HIT: ${t} on ${e}`),d}let c=await this.externalServerManager.executeTool(e,t,n,o),l=c&&typeof c=="object"?c:void 0,u=!!(l&&"isError"in l&&l.isError===!0||l&&"success"in l&&l.success===!1);return i&&this.mcpToolResultCache&&!u&&c!==void 0&&this.mcpToolResultCache.cacheResult(t,a,c),ie.debug(`[NeuroLink] External MCP tool ${u?"returned error":"executed successfully"}: ${t}`),c}catch(s){throw ie.error(`[NeuroLink] External MCP tool execution failed: ${t}`,s),s}}getExternalMCPTools(){return this.externalServerManager.getAllTools()}getExternalMCPServerTools(e){return this.externalServerManager.getServerTools(e)}async testExternalMCPConnection(e){try{let{MCPClientFactory:t}=await Ke(Promise.resolve().then(()=>(r3(),Aqe)),1e4),n=await t.testConnection(e,1e4);return{success:n.success,error:n.error,toolCount:n.capabilities?1:0}}catch(t){return{success:!1,error:t instanceof Error?t.message:String(t)}}}getExternalMCPStatistics(){return this.externalServerManager.getStatistics()}async shutdownExternalMCPServers(){try{ie.info("[NeuroLink] Shutting down all external MCP servers..."),this.unregisterAllExternalMCPToolsFromRegistry(),await this.externalServerManager.shutdown(),ie.info("[NeuroLink] All external MCP servers shut down successfully")}catch(e){throw ie.error("[NeuroLink] Error shutting down external MCP servers:",e),e}}async getElicitationManager(){return(await Ke(Promise.resolve().then(()=>(pme(),mKe)),1e4)).globalElicitationManager}async registerElicitationHandler(e){(await this.getElicitationManager()).registerHandler(e)}async getMultiServerManager(){return(await Ke(Promise.resolve().then(()=>(SH(),$Ve)),1e4)).globalMultiServerManager}async getEnhancedToolDiscovery(){let e=await Ke(Promise.resolve().then(()=>(wH(),BVe)),1e4);return new e.EnhancedToolDiscovery(this.toolRegistry)}async getMCPRegistryClient(){return(await Ke(Promise.resolve().then(()=>(hme(),fKe)),1e4)).globalMCPRegistryClient}async exposeAgentAsTool(e,t){return(await Ke(Promise.resolve().then(()=>(CW(),bme)),1e4)).exposeAgentAsTool(e,t)}async exposeWorkflowAsTool(e,t){return(await Ke(Promise.resolve().then(()=>(CW(),bme)),1e4)).exposeWorkflowAsTool(e,t)}async getToolIntegrationManager(){return(await Ke(Promise.resolve().then(()=>(Rme(),gKe)),1e4)).globalToolIntegrationManager}async convertToolsToMCPFormat(e,t={}){let n=await Ke(Promise.resolve().then(()=>(PW(),Ume)),1e4),o=e.map(s=>({...s,execute:s.execute??(async()=>({success:!1,error:"No execute function provided"}))}));return n.batchConvertToMCP(o,t)}async convertToolsFromMCPFormat(e,t={}){return(await Ke(Promise.resolve().then(()=>(PW(),Ume)),1e4)).batchConvertToNeuroLink(e,t)}async getToolAnnotations(e){let{inferAnnotations:t,mergeAnnotations:n,getAnnotationSummary:o}=await Ke(Promise.resolve().then(()=>(Sk(),FVe)),1e4),s=this.toolRegistry.getToolInfo(e);if(!s)return null;let i=s.tool.annotations,a=t({name:s.tool.name,description:s.tool.description??""}),c=n(a,i);return{annotations:c,summary:o(c)}}convertExternalMCPToolsToAISDKFormat(){let e=this.externalServerManager.getAllTools(),t={};for(let n of e)if(n.isAvailable){let o={description:n.description,execute:async s=>{try{ie.debug(`[NeuroLink] Executing external MCP tool via AI SDK: ${n.name}`,{params:s});let i=await this.externalServerManager.executeTool(n.serverId,n.name,s,{timeout:3e4});return ie.debug(`[NeuroLink] External MCP tool execution result: ${n.name}`,{success:!!i,hasData:!!(i&&typeof i=="object"&&"content"in i)}),i}catch(i){throw ie.error(`[NeuroLink] External MCP tool execution failed: ${n.name}`,i),i}}};t[n.name]=o,ie.debug(`[NeuroLink] Converted external MCP tool to AI SDK format: ${n.name} from server ${n.serverId}`)}return ie.info(`[NeuroLink] Converted ${Object.keys(t).length} external MCP tools to AI SDK format`),t}convertJSONSchemaToAISDKFormat(e){}unregisterExternalMCPToolsFromRegistry(e){try{let t=this.externalServerManager.getServerTools(e);for(let n of t)this.toolRegistry.removeTool(n.name),ie.debug(`[NeuroLink] Unregistered external MCP tool from main registry: ${n.name}`)}catch(t){ie.error(`[NeuroLink] Failed to unregister external MCP tools from registry for server ${e}:`,t)}}unregisterExternalMCPToolFromRegistry(e){try{this.toolRegistry.removeTool(e),ie.debug(`[NeuroLink] Unregistered external MCP tool from main registry: ${e}`)}catch(t){ie.error(`[NeuroLink] Failed to unregister external MCP tool ${e} from registry:`,t)}}async lazyInitializeConversationMemory(e,t,n){try{let{initializeConversationMemory:o}=await TKe().then(()=>bKe),s=await o(this.conversationMemoryConfig);this.conversationMemory=s,this.conversationMemoryNeedsInit=!1}catch(o){throw g.error("[NeuroLink] \u274C LOG_POINT_G005_MEMORY_LAZY_INIT_ERROR",{logPoint:"G005_MEMORY_LAZY_INIT_ERROR",generateInternalId:e,timestamp:new Date().toISOString(),elapsedMs:Date.now()-t,elapsedNs:(process.hrtime.bigint()-n).toString(),error:o instanceof Error?o.message:String(o),errorName:o instanceof Error?o.name:"UnknownError",errorStack:o instanceof Error?o.stack:void 0,message:"Lazy conversation memory initialization failed"}),o}}unregisterAllExternalMCPToolsFromRegistry(){try{let e=this.externalServerManager.getAllTools();for(let t of e)this.toolRegistry.removeTool(t.name);ie.debug(`[NeuroLink] Unregistered ${e.length} external MCP tools from main registry`)}catch(e){ie.error("[NeuroLink] Failed to unregister all external MCP tools from registry:",e)}}async createEvaluationPipeline(e){let{EvaluationPipeline:t,getPreset:n}=await Ke(Promise.resolve().then(()=>(xE(),tP)),1e4,me.evaluationTimeout("evaluation module load",1e4)),o;typeof e=="string"?o=n(e):o=e;let s=new t(o);return await Ke(s.initialize(),3e4,me.evaluationTimeout("pipeline initialization",3e4)),g.debug(`[NeuroLink] Created evaluation pipeline: ${o.name??"custom"}`),s}async evaluate(e,t){let{EvaluationPipeline:n,getPreset:o}=await Ke(Promise.resolve().then(()=>(xE(),tP)),1e4,me.evaluationTimeout("evaluation module load",1e4)),s;if(t?.pipeline&&t?.scorers)throw new Error("Cannot specify both 'pipeline' and 'scorers' options. Use one or the other.");if(t?.scorers&&t.scorers.length===0)throw new Error("The 'scorers' array must not be empty. Provide at least one scorer ID or omit the option to use the default 'quality' preset.");t?.pipeline?s={...o(t.pipeline)}:t?.scorers&&t.scorers.length>0?s={name:"SDK Evaluation",description:"Evaluation from NeuroLink SDK",scorers:t.scorers.map(l=>({id:l})),executionMode:t.executionMode??"parallel",passThreshold:t.passThreshold??.7}:s=o("quality"),t?.passThreshold!==void 0&&(s.passThreshold=t.passThreshold),t?.executionMode!==void 0&&(s.executionMode=t.executionMode);let i=new n(s);await Ke(i.initialize(),3e4,me.evaluationTimeout("pipeline initialization",3e4));let a=t?.timeoutMs??6e4,c=await Ke(i.execute(e,{correlationId:t?.correlationId}),a,me.evaluationTimeout("pipeline execution",a));return g.debug("[NeuroLink] Evaluation completed",{pipeline:s.name,overallScore:c.overallScore,passed:c.passed,scorerCount:c.scores.length}),c}async score(e,t,n){let{ScorerRegistry:o}=await Ke(Promise.resolve().then(()=>(CB(),T7)),1e4,me.evaluationTimeout("scorer module load",1e4));await Ke(o.registerBuiltInScorers(),3e4,me.evaluationTimeout("scorer bootstrap",3e4));let s=await Ke(o.getScorer(e,n),3e4,me.evaluationTimeout(`scorer load: ${e}`,3e4));if(!s)throw me.scorerNotFound(e);let i=s.validateInput(t);if(!i.valid)throw me.evaluationValidationFailed(e,i.errors);let a=await Ke(s.score(t),6e4,me.evaluationTimeout("scorer execution",6e4));return g.debug("[NeuroLink] Scoring completed",{scorerId:e,score:a.score,passed:a.passed,computeTime:a.computeTime}),a}async getAvailableScorers(e){let{ScorerRegistry:t}=await Ke(Promise.resolve().then(()=>(CB(),T7)),1e4,me.evaluationTimeout("scorer module load",1e4));await Ke(t.registerBuiltInScorers(),3e4,me.evaluationTimeout("scorer bootstrap",3e4));let n=t.list();return e?.category&&(n=n.filter(o=>o.category===e.category)),e?.type&&(n=n.filter(o=>o.type===e.type)),n}async getEvaluationPresets(){let{getPresetNames:e}=await Ke(Promise.resolve().then(()=>(xE(),tP)),1e4,me.evaluationTimeout("evaluation module load",1e4));return e()}async getEvaluationPreset(e){let{getPreset:t}=await Ke(Promise.resolve().then(()=>(xE(),tP)),1e4,me.evaluationTimeout("evaluation module load",1e4));return t(e)}async createAgent(e){let{Agent:t}=await Promise.resolve().then(()=>(OW(),SKe));return g.debug("[NeuroLink] Creating agent",{id:e.id,name:e.name,tools:e.tools?.length||0}),new t(e,this)}async createNetwork(e){let{AgentNetwork:t}=await Promise.resolve().then(()=>(Bme(),wKe));return g.debug("[NeuroLink] Creating agent network",{name:e.name,agentCount:e.agents.length,workflowCount:e.workflows?.length||0,toolCount:e.tools?.length||0}),new t(e,this)}async executeNetwork(e,t,n){return g.debug("[NeuroLink] Executing agent network",{networkId:e.id,networkName:e.name,hasContext:!!t.context}),e.execute(t,n)}async*streamNetwork(e,t,n){g.debug("[NeuroLink] Streaming agent network",{networkId:e.id,networkName:e.name,hasContext:!!t.context}),yield*e.stream(t,n)}async createOrchestrator(e){let{NetworkOrchestrator:t}=await Promise.resolve().then(()=>(Gme(),kKe));return g.debug("[NeuroLink] Creating network orchestrator",{maxConcurrentExecutions:e?.maxConcurrentExecutions,defaultMode:e?.defaultMode}),new t(this,e)}async createCoordinator(e){let{AgentCoordinator:t}=await Promise.resolve().then(()=>(Vme(),AKe));return g.debug("[NeuroLink] Creating agent coordinator",{strategy:e?.strategy,maxConcurrency:e?.maxConcurrency}),new t(e)}async createMessageBus(e){let{MessageBus:t}=await Promise.resolve().then(()=>(qme(),IKe));return g.debug("[NeuroLink] Creating message bus",{maxHistorySize:e?.maxHistorySize}),new t(e)}async dispose(){g.debug("[NeuroLink] Starting disposal of resources..."),this.lastCompactionMessageCount.clear();let e=[];try{try{g.debug("[NeuroLink] Flushing and shutting down OpenTelemetry..."),await hO(),await yO(),g.debug("[NeuroLink] OpenTelemetry shutdown successfully")}catch(t){let n=t instanceof Error?t:new Error(`OpenTelemetry shutdown error: ${String(t)}`);e.push(n),g.warn("[NeuroLink] Error shutting down OpenTelemetry:",t)}if(this.externalServerManager)try{g.debug("[NeuroLink] Shutting down external MCP servers..."),await this.externalServerManager.shutdown(),g.debug("[NeuroLink] External MCP servers shutdown successfully")}catch(t){let n=t instanceof Error?t:new Error(`External server shutdown error: ${String(t)}`);e.push(n),g.warn("[NeuroLink] Error shutting down external MCP servers:",t)}if(this.emitter)try{g.debug("[NeuroLink] Removing all event listeners..."),this.emitter.removeAllListeners(),g.clearEventEmitter(),g.debug("[NeuroLink] Event listeners removed successfully")}catch(t){let n=t instanceof Error?t:new Error(`Event emitter cleanup error: ${String(t)}`);e.push(n),g.warn("[NeuroLink] Error removing event listeners:",t)}if(this.toolCircuitBreakers&&this.toolCircuitBreakers.size>0)try{g.debug(`[NeuroLink] Clearing ${this.toolCircuitBreakers.size} circuit breakers...`),this.toolCircuitBreakers.clear(),g.debug("[NeuroLink] Circuit breakers cleared successfully")}catch(t){let n=t instanceof Error?t:new Error(`Circuit breaker cleanup error: ${String(t)}`);e.push(n),g.warn("[NeuroLink] Error clearing circuit breakers:",t)}try{g.debug("[NeuroLink] Clearing maps and caches..."),this.toolExecutionMetrics&&this.toolExecutionMetrics.clear(),this.activeToolExecutions&&this.activeToolExecutions.clear(),this.currentStreamToolExecutions&&(this.currentStreamToolExecutions.length=0),this.toolExecutionHistory&&(this.toolExecutionHistory.length=0),this.toolCache&&(this.toolCache.tools=[],this.toolCache.timestamp=0),this.mcpToolResultCache?.destroy(),this.mcpToolRouter?.destroy(),this.mcpToolBatcher?.destroy(),this.mcpToolResultCache=void 0,this.mcpToolRouter=void 0,this.mcpToolBatcher=void 0,this.mcpEnhancedDiscovery=void 0,this.mcpToolMiddlewares=[],g.debug("[NeuroLink] Maps and caches cleared successfully")}catch(t){let n=t instanceof Error?t:new Error(`Cache cleanup error: ${String(t)}`);e.push(n),g.warn("[NeuroLink] Error clearing caches:",t)}if(this._taskManager)try{g.debug("[NeuroLink] Shutting down TaskManager..."),await Ke(this._taskManager.shutdown(),5e3,new Error("TaskManager shutdown timed out"))}catch(t){g.warn("[NeuroLink] TaskManager shutdown error:",t)}finally{this._taskManager=void 0}try{g.debug("[NeuroLink] Resetting initialization state..."),this.mcpInitialized=!1,this.mcpInitPromise=null,this.conversationMemoryNeedsInit=!1,this.credentials=void 0,g.debug("[NeuroLink] Initialization state reset successfully")}catch(t){let n=t instanceof Error?t:new Error(`State reset error: ${String(t)}`);e.push(n),g.warn("[NeuroLink] Error resetting state:",t)}e.length===0?g.debug("[NeuroLink] \u2705 Resource disposal completed successfully"):g.warn(`[NeuroLink] \u26A0\uFE0F Resource disposal completed with ${e.length} errors`,{errors:e.map(t=>t.message)})}catch(t){throw g.error("[NeuroLink] Critical error during disposal:",t),t}}getToolRegistry(){return this.toolRegistry}async compactSession(e,t){if(!this.conversationMemory)return null;let n=await this.conversationMemory.buildContextMessages(e);if(!n||n.length===0)return null;let o=new bx({...t,summarizationProvider:t?.summarizationProvider??this.conversationMemoryConfig?.conversationMemory?.summarizationProvider,summarizationModel:t?.summarizationModel??this.conversationMemoryConfig?.conversationMemory?.summarizationModel}),s=Qc({provider:t?.provider||"openai",conversationMessages:n}),i=Math.floor(s.availableInputTokens*.6),a=await o.compact(n,i,this.conversationMemoryConfig?.conversationMemory);return a.compacted&&xk(a.messages),a}async getContextStats(e,t,n){if(!this.conversationMemory)return null;let o=await this.conversationMemory.buildContextMessages(e);if(!o||o.length===0)return null;let s=Qc({provider:t||"openai",model:n,conversationMessages:o});return{estimatedInputTokens:s.estimatedInputTokens,availableInputTokens:s.availableInputTokens,usageRatio:s.usageRatio,shouldCompact:s.shouldCompact,messageCount:o.length}}needsCompaction(e,t,n){if(!this.conversationMemory)return!1;let o=this.conversationMemory.getSession?.(e);return o?Qc({provider:t||"openai",model:n,conversationMessages:o.messages}).shouldCompact:!1}async setAuthProvider(e){this.authInitPromise=void 0,await this.initializeAuthProviderFromConfig(e)}async initializeAuthProviderFromConfig(e){let t,n;if("authenticateToken"in e&&typeof e.authenticateToken=="function")t=e,n=t.type;else if("provider"in e)t=e.provider,n=t.type;else{let o=e,{AuthProviderFactory:s}=await Promise.resolve().then(()=>(JD(),PKe));t=await s.createProvider(o.type,o.config),n=o.type}this.authProvider=t,g.info(`Auth provider set: ${n}`),this.emitter.emit("auth:provider:set",{type:t.type,timestamp:Date.now()})}getAuthProvider(){return this.authProvider}async ensureAuthProvider(){if(this.authProvider||!this.pendingAuthConfig)return;let e=this.pendingAuthConfig;this.authInitPromise??=(async()=>{try{await this.initializeAuthProviderFromConfig(e),this.pendingAuthConfig=void 0}finally{this.authInitPromise&&(this.pendingAuthConfig===void 0||this.pendingAuthConfig===e)&&(this.authInitPromise=void 0)}})(),await this.authInitPromise}async setAuthContext(e){let{globalAuthContext:t}=await Promise.resolve().then(()=>(qk(),d3));t.set(e),g.debug("Auth context set",{userId:e.user.id,provider:e.provider,sessionId:e.session?.id})}async getAuthContext(){let{getAuthContext:e}=await Promise.resolve().then(()=>(qk(),d3));return e()}async clearAuthContext(){let{globalAuthContext:e}=await Promise.resolve().then(()=>(qk(),d3)),t=e.get()?.user.id;e.clear(),t&&g.debug(`Auth context cleared for user: ${t}`)}getExternalServerManager(){return this.externalServerManager}buildResolutionContext(e,t){return{requestContext:t||{},signal:e}}async resolveDynamicOptions(e){let t=["model","provider","temperature","maxTokens","systemPrompt","timeout","thinkingLevel","disableTools","enableAnalytics","enableEvaluation"];if(!(t.some(s=>typeof e[s]=="function")||typeof e.tools=="function"))return;let o=e.dynamicContext;await this.resolveDynamicFields(e,t,o)}async resolveDynamicFields(e,t,n){let o=this.buildResolutionContext(e.abortSignal,n);if(g.debug("[NeuroLink] Resolving dynamic arguments"),await Promise.all(t.map(async s=>{if(typeof e[s]=="function"){let i=await tde(e[s],o);e[s]=i.value,g.debug(`[NeuroLink] Resolved dynamic ${s}: ${i.resolutionType}`)}})),typeof e.tools=="function"){let s=await tde(e.tools,o);if(!Array.isArray(s.value))throw new TypeError(`Dynamic tools resolver must return string[] (tool names), got ${typeof s.value=="object"?"object":typeof s.value}`);e.enabledToolNames=s.value,delete e.tools}}},MKe=new rS,XCr=MKe});var NKe={};ee(NKe,{VoyageProvider:()=>UW,default:()=>eRr});var ZCr,OKe,QCr,Jme,UW,eRr,DKe=_(async()=>{"use strict";Cu();await $p();wo();Nt();It();W();po();ZCr="https://api.voyageai.com/v1",OKe=6e4,QCr=()=>Mr(D$e()),Jme=()=>Or("VOYAGE_MODEL","voyage-3.5"),UW=class extends uo{apiKey;baseURL;proxyFetch;constructor(e,t,n,o){let s=Bu(t)?t:void 0;super(e,"voyage",s);let i=o?.apiKey?.trim();this.apiKey=i&&i.length>0?i:QCr(),this.baseURL=o?.baseURL??process.env.VOYAGE_BASE_URL??ZCr,this.proxyFetch=vt(),g.debug("Voyage Provider initialized (embeddings only)",{modelName:this.modelName,baseURL:this.baseURL})}getProviderName(){return this.providerName}getDefaultModel(){return Jme()}supportsTools(){return!1}getDefaultEmbeddingModel(){return Jme()}getAISDKModel(){throw new Ve("Voyage AI is an embedding-only provider; chat completions are not available. Use `embed()` or `embedMany()` instead, or pick a different provider for `generate()` / `stream()`.","voyage")}async executeStream(e,t){throw new Ve("Voyage AI is an embedding-only provider; streaming chat is not available. Use `embed()` / `embedMany()`, or pick another provider for `stream()`.","voyage")}formatProviderError(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"Unknown error";return t.includes("401")||t.toLowerCase().includes("unauthorized")||t.includes("invalid_api_key")?new Mt("Invalid Voyage AI API key. Get one at https://dash.voyageai.com/api-keys","voyage"):t.includes("429")||t.toLowerCase().includes("rate limit")?new er("Voyage AI rate limit exceeded. Back off and retry.","voyage"):t.includes("404")||t.toLowerCase().includes("model_not_found")?new Zt(`Voyage AI model '${this.modelName}' not found. Browse https://docs.voyageai.com/docs/embeddings`,"voyage"):new Ve(`Voyage AI error: ${t}`,"voyage")}async embed(e,t){let n=await this.callEmbeddings([e],t);if(!n[0])throw new Ve("Voyage AI returned no embedding for the provided text","voyage");return n[0]}async embedMany(e,t){if(e.length===0)return[];let n=128,o=[];for(let s=0;s<e.length;s+=n){let i=e.slice(s,s+n),a=await this.callEmbeddings(i,t);o.push(...a)}return o}async callEmbeddings(e,t){let n=t??this.modelName,o;try{o=await Ke(this.proxyFetch(`${this.baseURL}/embeddings`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify({input:e,model:n})}),OKe,new Ve(`Voyage embeddings request timed out after ${OKe/1e3}s`,"voyage"))}catch(a){throw a instanceof Ve?a:this.formatProviderError(a)}if(!o.ok){let a=await o.text();throw this.formatProviderError(new Error(`Voyage embeddings failed: ${o.status} \u2014 ${a}`))}let s=await o.json();if(!s.data||s.data.length===0)throw new Ve("Voyage embeddings response missing data","voyage");if(s.data.length!==e.length)throw new Ve(`Voyage embeddings response count mismatch: expected ${e.length}, got ${s.data.length}`,"voyage");let i=s.data.slice().sort((a,c)=>a.index-c.index);for(let a=0;a<i.length;a++)if(i[a].index!==a)throw new Ve(`Voyage embeddings response has unexpected index ordering: position ${a} has index ${i[a].index}`,"voyage");return i.map(a=>a.embedding)}async validateConfiguration(){return typeof this.apiKey=="string"&&this.apiKey.trim().length>0}getConfiguration(){return{provider:this.providerName,model:this.modelName,defaultModel:Jme(),baseURL:this.baseURL}}},eRr=UW});var LKe={};ee(LKe,{JinaProvider:()=>$W,default:()=>nRr});var tRr,FW,rRr,Yme,$W,nRr,UKe=_(async()=>{"use strict";Cu();await $p();wo();Nt();W();po();tRr="https://api.jina.ai/v1",FW=6e4,rRr=()=>Mr(L$e()),Yme=()=>Or("JINA_MODEL","jina-embeddings-v3"),$W=class extends uo{apiKey;baseURL;proxyFetch;constructor(e,t,n,o){let s=Bu(t)?t:void 0;super(e,"jina",s);let i=o?.apiKey?.trim();this.apiKey=i&&i.length>0?i:rRr(),this.baseURL=o?.baseURL??process.env.JINA_BASE_URL??tRr,this.proxyFetch=vt(),g.debug("Jina Provider initialized (embeddings + reranking)",{modelName:this.modelName,baseURL:this.baseURL})}getProviderName(){return this.providerName}getDefaultModel(){return Yme()}supportsTools(){return!1}getDefaultEmbeddingModel(){return Yme()}getAISDKModel(){throw new Error("Jina AI is an embeddings + reranking provider; chat completions are not available. Use `embed()` / `embedMany()` / `rerank()`.")}async executeStream(e,t){throw new Error("Jina AI is an embeddings + reranking provider; streaming chat is not available.")}formatProviderError(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"Unknown error";return t.includes("401")||t.toLowerCase().includes("unauthorized")?new Mt("Invalid Jina AI API key. Get one at https://jina.ai/?sui=apikey","jina"):t.includes("429")||t.toLowerCase().includes("rate limit")?new er("Jina AI rate limit exceeded. Back off and retry.","jina"):t.includes("404")||t.toLowerCase().includes("model_not_found")?new Zt(`Jina AI model '${this.modelName}' not found. See https://jina.ai/embeddings/`,"jina"):new Ve(`Jina AI error: ${t}`,"jina")}async embed(e,t){let n=await this.callEmbeddings([e],t);if(!n[0])throw new Error("Jina AI returned no embedding for the provided text");return n[0]}async embedMany(e,t){return e.length===0?[]:this.callEmbeddings(e,t)}async rerank(e,t,n={}){if(t.length===0)return[];let o=n.model??"jina-reranker-v2-base-multilingual",s=n.credentials,i=s?.apiKey?.trim()||this.apiKey,a=s?.baseURL||this.baseURL,c=new AbortController,l=setTimeout(()=>c.abort(),FW),u;try{u=await this.proxyFetch(`${a}/rerank`,{method:"POST",headers:{Authorization:`Bearer ${i}`,"Content-Type":"application/json"},body:JSON.stringify({model:o,query:e,documents:t,top_n:n.topN??t.length}),signal:c.signal})}catch(p){throw p instanceof Error&&p.name==="AbortError"?this.formatProviderError(new Error(`Jina rerank request timed out after ${FW/1e3}s`)):this.formatProviderError(p)}finally{clearTimeout(l)}if(!u.ok){let p=await u.text();throw this.formatProviderError(new Error(`Jina rerank failed: ${u.status} \u2014 ${p}`))}return((await u.json()).results??[]).map(p=>({index:p.index,score:p.relevance_score,document:t[p.index]??p.document?.text??""}))}async callEmbeddings(e,t,n){let o=t??this.modelName,s=n?.apiKey?.trim()||this.apiKey,i=n?.baseURL||this.baseURL,a=new AbortController,c=setTimeout(()=>a.abort(),FW),l;try{l=await this.proxyFetch(`${i}/embeddings`,{method:"POST",headers:{Authorization:`Bearer ${s}`,"Content-Type":"application/json"},body:JSON.stringify({input:e,model:o}),signal:a.signal})}catch(p){throw p instanceof Error&&p.name==="AbortError"?this.formatProviderError(new Error(`Jina embeddings request timed out after ${FW/1e3}s`)):this.formatProviderError(p)}finally{clearTimeout(c)}if(!l.ok){let p=await l.text();throw this.formatProviderError(new Error(`Jina embeddings failed: ${l.status} \u2014 ${p}`))}let u=await l.json();if(!u.data||u.data.length===0)throw new Error("Jina embeddings response missing data");if(u.data.length!==e.length)throw new Error(`Jina embeddings response count mismatch: expected ${e.length}, got ${u.data.length}`);let d=u.data.slice().sort((p,f)=>p.index-f.index);for(let p=0;p<d.length;p++)if(d[p].index!==p)throw new Error(`Jina embeddings response has unexpected index ordering: position ${p} has index ${d[p].index}`);return d.map(p=>p.embedding)}async validateConfiguration(){return typeof this.apiKey=="string"&&this.apiKey.trim().length>0}getConfiguration(){return{provider:this.providerName,model:this.modelName,defaultModel:Yme(),baseURL:this.baseURL}}},nRr=$W});var BKe={};ee(BKe,{StabilityProvider:()=>BW,default:()=>iRr});var oRr,FKe,sRr,$Ke,BW,iRr,zKe=_(async()=>{"use strict";Cu();await $p();wo();Nt();W();po();oRr="https://api.stability.ai",FKe=12e4,sRr=()=>(process.env.STABILITY_API_KEY??process.env.STABILITY_AI_API_KEY??"").trim()||void 0,$Ke=()=>Or("STABILITY_MODEL","stable-image-ultra"),BW=class extends uo{apiKey;baseURL;proxyFetch;constructor(e,t,n,o){let s=Bu(t)?t:void 0;super(e,"stability",s);let i=o?.apiKey?.trim();this.apiKey=i&&i.length>0?i:sRr(),this.baseURL=o?.baseURL??process.env.STABILITY_BASE_URL??oRr,this.proxyFetch=vt(),g.debug("Stability AI Provider initialized (image-gen only)",{modelName:this.modelName,baseURL:this.baseURL})}getProviderName(){return this.providerName}getDefaultModel(){return $Ke()}supportsTools(){return!1}getAISDKModel(){throw new Error("Stability AI is an image-generation-only provider; chat completions are not available.")}async executeStream(e,t){throw new Error("Stability AI is an image-generation-only provider; streaming chat is not available. Use generate({output:{format:'binary'}}) with a Stable Image / SD 3.5 model.")}formatProviderError(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"Unknown error";return t.includes("401")||t.toLowerCase().includes("unauthorized")?new Mt("Invalid Stability AI API key. Get one at https://platform.stability.ai/account/keys","stability"):t.includes("429")||t.toLowerCase().includes("rate limit")?new er("Stability AI rate limit exceeded. Back off and retry.","stability"):t.includes("content_filtered")||t.includes("CONTENT_FILTERED")?new Ve("Stability AI declined the request due to content policy. Adjust the prompt and retry.","stability"):t.includes("404")?new Zt(`Stability AI model '${this.modelName}' not found. Use stable-image-ultra, stable-image-core, sd3.5-large, sd3.5-large-turbo, or sd3.5-medium.`,"stability"):new Ve(`Stability AI error: ${t}`,"stability")}async executeImageGeneration(e){let t=Date.now(),n=e.credentials?.stability,o=n?.apiKey?.trim()||this.apiKey;if(!o)throw new Error("Stability AI API key is required. Set STABILITY_API_KEY or pass credentials.stability.apiKey per-call.");let s=o,i=n?.baseURL||this.baseURL,a=e.prompt??e.input?.text??"";if(!a.trim())throw new Error("Stability AI image generation requires a prompt (input.text or prompt)");let c=this.modelName.startsWith("sd3.5-")?"sd3":this.modelName==="stable-image-ultra"?"ultra":this.modelName==="stable-image-core"?"core":this.modelName,l=e,u=new FormData;u.append("prompt",a),u.append("output_format","png"),l.aspectRatio&&u.append("aspect_ratio",String(l.aspectRatio)),l.negativePrompt&&u.append("negative_prompt",l.negativePrompt),this.modelName.startsWith("sd3.5-")&&u.append("model",this.modelName),l.seed!==void 0&&u.append("seed",String(l.seed));let d=new AbortController,p=setTimeout(()=>d.abort(),FKe),f;try{f=await this.proxyFetch(`${i}/v2beta/stable-image/generate/${c}`,{method:"POST",headers:{Authorization:`Bearer ${s}`,Accept:"application/json"},body:u,signal:d.signal})}catch(x){throw x instanceof Error&&x.name==="AbortError"?this.formatProviderError(new Error(`Stability image-gen request timed out after ${FKe/1e3}s`)):this.formatProviderError(x)}finally{clearTimeout(p)}if(!f.ok){let x=await f.text();throw this.formatProviderError(new Error(`Stability image-gen failed: ${f.status} \u2014 ${x}`))}let h=await f.json();if(!h.image)throw new Error(`Stability AI returned no image (finish_reason: ${h.finish_reason??"unknown"})`);let y=Date.now()-t;return g.info(`[StabilityProvider] Generated image (${h.image.length} base64 chars) in ${y}ms \u2014 model ${this.modelName}`),{content:a,provider:this.providerName,model:this.modelName,usage:{input:0,output:1e3,total:1e3},imageOutput:{base64:h.image}}}async validateConfiguration(){return this.apiKey!==void 0&&this.apiKey.trim().length>0}getConfiguration(){return{provider:this.providerName,model:this.modelName,defaultModel:$Ke(),baseURL:this.baseURL}}},iRr=BW});var VKe={};ee(VKe,{IdeogramProvider:()=>zW,default:()=>lRr});var aRr,jKe,cRr,GKe,zW,lRr,qKe=_(async()=>{"use strict";Cu();await $p();wo();Nt();W();po();aRr="https://api.ideogram.ai",jKe=12e4,cRr=()=>Mr(U$e()),GKe=()=>Or("IDEOGRAM_MODEL","V_3"),zW=class extends uo{apiKey;baseURL;proxyFetch;constructor(e,t,n,o){let s=Bu(t)?t:void 0;super(e,"ideogram",s);let i=o?.apiKey?.trim();this.apiKey=i&&i.length>0?i:cRr(),this.baseURL=o?.baseURL??process.env.IDEOGRAM_BASE_URL??aRr,this.proxyFetch=vt(),g.debug("Ideogram Provider initialized (image-gen only)",{modelName:this.modelName,baseURL:this.baseURL})}getProviderName(){return this.providerName}getDefaultModel(){return GKe()}supportsTools(){return!1}getAISDKModel(){throw new Error("Ideogram is an image-generation-only provider; chat completions are not available.")}async executeStream(e,t){throw new Error("Ideogram is an image-generation-only provider; streaming chat is not available.")}formatProviderError(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"Unknown error";return t.includes("401")||t.toLowerCase().includes("unauthorized")?new Mt("Invalid Ideogram API key. Get one at https://developer.ideogram.ai/","ideogram"):t.includes("429")||t.toLowerCase().includes("rate limit")?new er("Ideogram rate limit exceeded. Back off and retry.","ideogram"):t.includes("safety")||t.includes("is_image_safe")?new Ve("Ideogram declined the request due to safety filters. Adjust the prompt and retry.","ideogram"):new Ve(`Ideogram error: ${t}`,"ideogram")}async executeImageGeneration(e){let t=Date.now(),n=e.credentials?.ideogram,o=n?.apiKey?.trim()||this.apiKey,s=n?.baseURL||this.baseURL,i=e.prompt??e.input?.text??"";if(!i.trim())throw new Error("Ideogram image generation requires a prompt (input.text or prompt)");let a=e,c={prompt:i,model:this.modelName,magic_prompt:a.magicPrompt??"AUTO"};a.aspectRatio&&(c.aspect_ratio=a.aspectRatio),a.negativePrompt&&(c.negative_prompt=a.negativePrompt),a.seed!==void 0&&(c.seed=a.seed),a.style&&(c.style_type=a.style);let l=new AbortController,u=setTimeout(()=>l.abort(),jKe),d;try{d=await this.proxyFetch(`${s}/v1/ideogram-v3/generate`,{method:"POST",headers:{"Api-Key":o,"Content-Type":"application/json"},body:JSON.stringify(c),signal:l.signal})}catch(k){throw k instanceof Error&&k.name==="AbortError"?this.formatProviderError(new Error(`Ideogram image-gen request timed out after ${jKe/1e3}s`)):this.formatProviderError(k)}finally{clearTimeout(u)}if(!d.ok){let k=await d.text();throw this.formatProviderError(new Error(`Ideogram image-gen failed: ${d.status} \u2014 ${k}`))}let f=(await d.json()).data?.[0]?.url;if(!f)throw new Error("Ideogram returned no image URL");let h=new AbortController,y=setTimeout(()=>h.abort(),6e4),x;try{x=await this.proxyFetch(f,{signal:h.signal})}catch(k){throw k instanceof Error&&k.name==="AbortError"?new Error("Ideogram image download timed out after 60s",{cause:k}):k}finally{clearTimeout(y)}if(!x.ok)throw new Error(`Failed to download Ideogram image: ${x.status}`);let b=Buffer.from(await x.arrayBuffer()),T=b.toString("base64"),w=Date.now()-t;return g.info(`[IdeogramProvider] Generated image (${b.length} bytes) in ${w}ms \u2014 model ${this.modelName}`),{content:i,provider:this.providerName,model:this.modelName,usage:{input:0,output:1e3,total:1e3},imageOutput:{base64:T}}}async validateConfiguration(){return typeof this.apiKey=="string"&&this.apiKey.trim().length>0}getConfiguration(){return{provider:this.providerName,model:this.modelName,defaultModel:GKe(),baseURL:this.baseURL}}},lRr=zW});function Od(r){let e=(r?.apiToken??process.env.REPLICATE_API_TOKEN??"").trim();return e?{apiToken:e,baseUrl:(r?.baseUrl??process.env.REPLICATE_BASE_URL??uRr).replace(/\/$/,"")}:null}var uRr,YD=_(()=>{"use strict";uRr="https://api.replicate.com"});function pRr(r,e,t){return new Nte({connect:{lookup:(n,o,s)=>{if(n.toLowerCase()!==r.toLowerCase()){s(new Error(`safeFetch: refusing to resolve "${n}" \u2014 expected "${r}"`),"",0);return}if(o?.all){s(null,[{address:e,family:t}]);return}s(null,e,t)}}})}async function zx(r,e){let{url:t,ip:n,family:o}=await Q$e(r),i=new URL(t).hostname.replace(/^\[|\]$/g,""),a=pRr(i,n,o),c=new AbortController,l=setTimeout(()=>c.abort(),e.timeoutMs??dRr),u=e.signal?AbortSignal.any([e.signal,c.signal]):c.signal,d;try{d=await Ote(t,{method:"GET",signal:u,redirect:"manual",dispatcher:a})}finally{clearTimeout(l),a.close().catch(()=>{})}if(d.status>=300&&d.status<400)throw new Error(`safeDownload(${e.label}): refused to follow redirect ${d.status} \u2192 ${d.headers.get("location")??"<no-location>"} (for ${r})`);if(!d.ok)throw new Error(`safeDownload(${e.label}) failed: HTTP ${d.status} for ${r}`);return Ha(d,e.maxBytes,e.label)}var dRr,XD=_(()=>{"use strict";zE();vg();cx();dRr=6e4});async function gRr(r,e){let t=r.baseUrl??"https://api.replicate.com",[n,o]=e.model.split(":",2),s=o?`${t}/v1/predictions`:`${t}/v1/models/${n}/predictions`,i=o?{version:o,input:e.input}:{input:e.input};e.webhook&&(i.webhook=e.webhook),e.webhookEventsFilter&&e.webhookEventsFilter.length>0&&(i.webhook_events_filter=e.webhookEventsFilter);let a=new AbortController,c=setTimeout(()=>a.abort(),ZD),l;try{l=await fetch(s,{method:"POST",headers:{Authorization:`Token ${r.apiToken}`,"Content-Type":"application/json",Prefer:"wait=60"},body:JSON.stringify(i),signal:a.signal})}catch(u){throw u instanceof Fe?u:u instanceof Error&&u.name==="AbortError"?new Fe({code:ut.OPERATION_ABORTED,message:`Replicate predictions submit timed out after ${ZD/1e3}s`,category:"timeout",severity:"high",retriable:!0,originalError:u}):u}finally{clearTimeout(c)}if(!l.ok){let u=await l.text();throw new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate predictions submit failed: ${l.status} \u2014 ${Ms(u,500)}`,category:"network",severity:"high",retriable:l.status>=500})}return await l.json()}async function hRr(r,e,t={}){let n=r.baseUrl??"https://api.replicate.com",o=Date.now(),s=t.timeoutMs??fRr,i=t.pollIntervalMs??mRr;for(;Date.now()-o<s;){if(t.abortSignal?.aborted)throw new Fe({code:ut.OPERATION_ABORTED,message:"Replicate poll aborted by caller",category:"abort",severity:"low",retriable:!1});let a=new AbortController,c=setTimeout(()=>a.abort(),ZD),l=()=>a.abort();t.abortSignal?.addEventListener("abort",l,{once:!0});let u;try{u=await fetch(`${n}/v1/predictions/${e}`,{method:"GET",headers:{Authorization:`Token ${r.apiToken}`},signal:a.signal})}catch(p){throw p instanceof Fe?p:p instanceof Error&&p.name==="AbortError"?t.abortSignal?.aborted?new Fe({code:ut.OPERATION_ABORTED,message:"Replicate poll aborted by caller",category:"abort",severity:"low",retriable:!1,originalError:p}):new Fe({code:ut.OPERATION_ABORTED,message:`Replicate poll request timed out after ${ZD/1e3}s`,category:"timeout",severity:"high",retriable:!0,originalError:p}):p}finally{t.abortSignal?.removeEventListener("abort",l),clearTimeout(c)}if(!u.ok){let p=await u.text();throw new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate poll failed: ${u.status} \u2014 ${Ms(p,500)}`,category:"network",severity:"high",retriable:u.status>=500})}let d=await u.json();if(d.status==="succeeded")return d;if(d.status==="failed"||d.status==="canceled")throw new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate prediction ${d.id} ${d.status}: ${d.error??"unknown"}`,category:"execution",severity:"high",retriable:d.status==="failed"});await new Promise((p,f)=>{let h=()=>{clearTimeout(y),f(new Fe({code:ut.OPERATION_ABORTED,message:"Replicate poll aborted by caller",category:"abort",severity:"low",retriable:!1}))},y=setTimeout(()=>{t.abortSignal?.removeEventListener("abort",h),p()},i);t.abortSignal?.addEventListener("abort",h,{once:!0})})}throw new Fe({code:ut.OPERATION_ABORTED,message:`Replicate prediction ${e} did not complete within ${Math.round(s/1e3)}s`,category:"timeout",severity:"high",retriable:!0})}async function Wg(r,e,t={}){let n=await gRr(r,e);if(n.status==="succeeded")return n;if(n.status==="failed"||n.status==="canceled")throw new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate prediction ${n.id} ${n.status} on submit: ${n.error??"unknown"}`,category:"execution",severity:"high",retriable:n.status==="failed"});return hRr(r,n.id,t)}async function jx(r,e=268435456){let t=r.output,n=Array.isArray(t)?t[0]:t;if(typeof n!="string")throw new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate prediction ${r.id} output is not a URL: ${typeof t}`,category:"execution",severity:"high",retriable:!1});try{let o=await zx(n,{maxBytes:e,label:`Replicate prediction ${r.id}`,timeoutMs:ZD});return g.debug(`[Replicate] Downloaded prediction ${r.id} output: ${o.length} bytes`),o}catch(o){if(o instanceof Fe)throw o;let s=o instanceof Error?o.message:String(o);throw new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate output download failed: ${s} \u2014 ${n}`,category:"network",severity:"high",retriable:!0,originalError:o instanceof Error?o:void 0})}}var ZD,mRr,fRr,QD=_(()=>{"use strict";W();It();Pn();XD();ZD=9e4,mRr=2e3,fRr=5*6e4});var WKe={};ee(WKe,{ReplicateProvider:()=>jW,default:()=>vRr});function yRr(r){let e=r,t=e.prompt??e.input?.text??"",n=e.systemPrompt;return n?`${n}
|
|
2207
2207
|
|
|
2208
2208
|
${t}`:t}function xRr(r){return typeof r=="string"?r:Array.isArray(r)?r.map(e=>typeof e=="string"?e:"").join(""):""}var HKe,jW,vRr,KKe=_(async()=>{"use strict";Cu();YD();QD();await $p();W();It();po();HKe=()=>Or("REPLICATE_MODEL","meta/meta-llama-3-70b-instruct");jW=class extends uo{apiToken;baseURL;constructor(e,t,n,o){let s=Bu(t)?t:void 0;super(e,"replicate",s);let i=o?.apiToken?.trim();this.apiToken=i&&i.length>0?i:Mr(P$e()),this.baseURL=o?.baseUrl,g.debug("Replicate Provider initialized",{modelName:this.modelName,baseURL:this.baseURL})}getProviderName(){return this.providerName}getDefaultModel(){return HKe()}supportsTools(){return!1}getAISDKModel(){throw new Error("Replicate routes through the predictions API, not the AI SDK chat models. Streaming uses the predict-then-stream path inside executeStream.")}async generate(e,t){let n=typeof e=="string"?{prompt:e}:e,{IMAGE_GENERATION_MODELS:o}=await Promise.resolve().then(()=>(ga(),Ike));if(n.output?.mode==="video"||n.output?.mode==="avatar"||n.output?.mode==="music")return super.generate(n,t);let s=o.some(p=>this.modelName.includes(p)),i=n.output?.format==="json"||n.output?.format==="structured"||n.output?.format==="text";if(s&&!i)return super.generate(n,t);if(n.output?.format==="json"||n.output?.format==="structured"||t!=null)throw new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:"Replicate models do not support structured-output / JSON schema. Remove output.format or _analysisSchema, or use a provider that implements the OpenAI chat-completions contract (e.g. openai, anthropic).",category:"validation",severity:"medium",retriable:!1});let a=n.prompt??n.input?.text??"",c=Date.now(),l=await this.executeStream({input:{text:a},systemPrompt:n.systemPrompt,maxTokens:n.maxTokens,temperature:n.temperature,abortSignal:n.abortSignal,timeout:n.timeout}),u="";for await(let p of l.stream)"content"in p&&typeof p.content=="string"&&(u+=p.content);let d={content:u,provider:this.providerName,model:this.modelName,usage:{input:0,output:0,total:0}};return g.info(`[ReplicateProvider] generate() complete in ${Date.now()-c}ms \u2014 ${u.length} chars`),d}async executeStream(e,t){let n=Date.now(),o=e.credentials?.replicate,s=o?.apiToken?.trim()||this.apiToken,i=o?.baseUrl||this.baseURL,a=Od({apiToken:s,baseUrl:i});if(!a)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Replicate auth could not be resolved (REPLICATE_API_TOKEN missing).",category:"configuration",severity:"high",retriable:!1});let c=yRr(e);if(!c.trim())throw new Fe({code:ut.INVALID_PARAMETERS,message:"Replicate predictions require a prompt (input.text or prompt)",category:"validation",severity:"medium",retriable:!1});let l={prompt:c,...e.maxTokens!==void 0&&{max_new_tokens:e.maxTokens},temperature:e.temperature,top_p:1},u;try{u=await Wg(a,{model:this.modelName,input:l},{abortSignal:e.abortSignal})}catch(f){throw this.handleProviderError(f)}let d=xRr(u.output);if(!d)throw new Error(`Replicate prediction ${u.id} returned empty output`);let p={async*[Symbol.asyncIterator](){yield{content:d}}};return g.info(`[ReplicateProvider] Generated ${d.length} chars in ${Date.now()-n}ms \u2014 model ${this.modelName} (prediction ${u.id})`),{stream:p,provider:this.providerName,model:this.modelName,finishReason:"stop",metadata:{startTime:n,streamId:`replicate-${u.id}`}}}async executeImageGeneration(e){let t=Date.now(),n=e.credentials?.replicate,o=n?.apiToken?.trim()||this.apiToken,s=n?.baseUrl||this.baseURL,i=Od({apiToken:o,baseUrl:s});if(!i)throw new Fe({code:ut.MISSING_CONFIGURATION,message:"Replicate auth could not be resolved (REPLICATE_API_TOKEN missing).",category:"configuration",severity:"high",retriable:!1});let a=e.prompt??e.input?.text??"";if(!a.trim())throw new Fe({code:ut.INVALID_PARAMETERS,message:"Replicate image-gen requires a prompt",category:"validation",severity:"medium",retriable:!1});let c=e,l={prompt:a,output_format:"png"};c.aspectRatio&&(l.aspect_ratio=c.aspectRatio),c.negativePrompt&&(l.negative_prompt=c.negativePrompt),c.seed!==void 0&&(l.seed=c.seed);let u;try{u=await Wg(i,{model:this.modelName,input:l},{abortSignal:e.abortSignal})}catch(f){throw this.handleProviderError(f)}let d;try{d=await jx(u,26214400)}catch(f){throw this.handleProviderError(f)}let p=d.toString("base64");return g.info(`[ReplicateProvider] Generated image (${d.length} bytes) in ${Date.now()-t}ms \u2014 model ${this.modelName}`),{content:a,provider:this.providerName,model:this.modelName,usage:{input:0,output:0,total:0},imageOutput:{base64:p}}}formatProviderError(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"Unknown error",n=e instanceof Error?e:void 0;return t.includes("401")||t.toLowerCase().includes("unauthorized")||t.toLowerCase().includes("invalid token")?new Fe({code:ut.PROVIDER_AUTH_FAILED,message:"Invalid Replicate API token. Get one at https://replicate.com/account/api-tokens",category:"configuration",severity:"high",retriable:!1,context:{provider:"replicate"},originalError:n}):t.includes("402")||t.toLowerCase().includes("insufficient credit")?new Fe({code:ut.PROVIDER_QUOTA_EXCEEDED,message:"Replicate insufficient credit. Top up at https://replicate.com/account/billing \u2014 most image/music models require a paid balance.",category:"resource",severity:"high",retriable:!1,context:{provider:"replicate"},originalError:n}):t.includes("429")||t.toLowerCase().includes("rate limit")?new Fe({code:ut.PROVIDER_QUOTA_EXCEEDED,message:"Replicate rate limit exceeded. Back off and retry.",category:"resource",severity:"high",retriable:!0,context:{provider:"replicate"},originalError:n}):t.toLowerCase().includes("not found")||t.includes("404")?new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate model '${this.modelName}' not found. Use owner/name or owner/name:version format. Browse https://replicate.com/explore`,category:"validation",severity:"medium",retriable:!1,context:{provider:"replicate",model:this.modelName},originalError:n}):new Fe({code:ut.PROVIDER_NOT_AVAILABLE,message:`Replicate error: ${t}`,category:"execution",severity:"high",retriable:!1,context:{provider:"replicate"},originalError:n})}async validateConfiguration(){return typeof this.apiToken=="string"&&this.apiToken.trim().length>0}getConfiguration(){return{provider:this.providerName,model:this.modelName,defaultModel:HKe(),baseURL:this.baseURL}}},vRr=jW});var XKe={};ee(XKe,{RecraftProvider:()=>GW,default:()=>SRr});var bRr,JKe,TRr,YKe,GW,SRr,ZKe=_(async()=>{"use strict";Cu();await $p();wo();Nt();W();po();vg();cx();bRr="https://external.api.recraft.ai/v1",JKe=12e4,TRr=()=>Mr(F$e()),YKe=()=>Or("RECRAFT_MODEL","recraftv3"),GW=class extends uo{apiKey;baseURL;proxyFetch;constructor(e,t,n,o){let s=Bu(t)?t:void 0;super(e,"recraft",s);let i=o?.apiKey?.trim();this.apiKey=i&&i.length>0?i:TRr(),this.baseURL=o?.baseURL??process.env.RECRAFT_BASE_URL??bRr,this.proxyFetch=vt(),g.debug("Recraft Provider initialized (image-gen only)",{modelName:this.modelName,baseURL:this.baseURL})}getProviderName(){return this.providerName}getDefaultModel(){return YKe()}supportsTools(){return!1}getAISDKModel(){throw new Error("Recraft is an image-generation-only provider; chat completions are not available.")}async executeStream(e,t){throw new Error("Recraft is an image-generation-only provider; streaming chat is not available.")}formatProviderError(e){let t=e instanceof Error?e.message:typeof e=="string"?e:"Unknown error";return t.includes("401")||t.toLowerCase().includes("unauthorized")?new Mt("Invalid Recraft API key. Get one at https://www.recraft.ai/api","recraft"):t.includes("429")||t.toLowerCase().includes("rate limit")?new er("Recraft rate limit exceeded. Back off and retry.","recraft"):t.includes("404")||t.includes("model_not_found")?new Zt(`Recraft model '${this.modelName}' not found. Use recraftv3, recraftv3-svg, or recraftv2.`,"recraft"):new Ve(`Recraft error: ${t}`,"recraft")}async executeImageGeneration(e){let t=Date.now(),n=e.credentials?.recraft,o=n?.apiKey?.trim()||this.apiKey,s=n?.baseURL||this.baseURL,i=e.prompt??e.input?.text??"";if(!i.trim())throw new Error("Recraft image generation requires a prompt (input.text or prompt)");let a=e,c={model:e.model??this.modelName,prompt:i,n:1,response_format:"b64_json"};a.negativePrompt&&(c.negative_prompt=a.negativePrompt),a.style&&(c.style=a.style),a.styleId&&(c.style_id=a.styleId),a.size&&(c.size=a.size);let l=new AbortController,u=setTimeout(()=>l.abort(),JKe),d;try{d=await this.proxyFetch(`${s}/images/generations`,{method:"POST",headers:{Authorization:`Bearer ${o}`,"Content-Type":"application/json"},body:JSON.stringify(c),signal:l.signal})}catch(x){throw x instanceof Error&&x.name==="AbortError"?this.formatProviderError(new Error(`Recraft image-gen request timed out after ${JKe/1e3}s`)):this.formatProviderError(x)}finally{clearTimeout(u)}if(!d.ok){let x=await d.text();throw this.formatProviderError(new Error(`Recraft image-gen failed: ${d.status} \u2014 ${x}`))}let f=(await d.json()).data?.[0];if(!f)throw new Error("Recraft returned no image data");let h;if(f.b64_json)h=f.b64_json;else if(f.url){await Bl(f.url);let x=new AbortController,b=setTimeout(()=>x.abort(),6e4),T;try{T=await this.proxyFetch(f.url,{signal:x.signal})}catch(k){throw k instanceof Error&&k.name==="AbortError"?new Error("Recraft image download timed out after 60s",{cause:k}):k}finally{clearTimeout(b)}if(!T.ok)throw new Error(`Failed to download Recraft image: ${T.status}`);h=(await Ha(T,26214400,"Recraft image")).toString("base64")}else throw new Error("Recraft response missing both b64_json and url");let y=Date.now()-t;return g.info(`[RecraftProvider] Generated image (${h.length} base64 chars) in ${y}ms \u2014 model ${this.modelName}`),{content:i,provider:this.providerName,model:this.modelName,usage:{input:0,output:1e3,total:1e3},imageOutput:{base64:h}}}async validateConfiguration(){return typeof this.apiKey=="string"&&this.apiKey.trim().length>0}getConfiguration(){return{provider:this.providerName,model:this.modelName,defaultModel:YKe(),baseURL:this.baseURL}}},SRr=GW});var kC,sc,efo,tfo,rfo,nfo,ofo,sfo,ifo,afo,cfo,lfo,ufo,QKe,dfo,pfo,mfo,ffo,gfo,hfo,yfo,xfo,vfo,bfo,Tfo,Sfo,wfo,Efo,_fo,kfo,Cfo,Rfo,Afo,Ifo,Pfo,Mfo,Ofo,Nfo,Dfo,Lfo,Ufo,Ffo,$fo,Bfo,zfo,jfo,Gfo,e6e=_(()=>{kC={get(r,e){return e==="__esModule"?!0:e==="default"?new Proxy({},{get:kC.get}):new Proxy(function(...t){return new Proxy({},{get:kC.get})},{get:kC.get,apply(t,n,o){return new Proxy({},{get:kC.get})},construct(t,n){return new Proxy({},{get:kC.get})}})}},sc=new Proxy({},kC),{BedrockClient:efo,ListFoundationModelsCommand:tfo,BedrockRuntimeClient:rfo,ConverseCommand:nfo,ConverseStreamCommand:ofo,ImageFormat:sfo}=sc,{SageMakerRuntimeClient:ifo,InvokeEndpointCommand:afo,InvokeEndpointWithResponseStreamCommand:cfo}=sc,{GoogleAuth:lfo,VertexAI:ufo,TextToSpeechClient:QKe}=sc,{Webhook:dfo}=sc,{Hippocampus:pfo,HippocampusConfig:mfo}=sc,{createClient:ffo}=sc,{Queue:gfo,Worker:hfo,Job:yfo,QueueScheduler:xfo,FlowProducer:vfo}=sc,{Cron:bfo}=sc,{parseBuffer:Tfo,selectCover:Sfo}=sc,{extractRawText:wfo,convertToHtml:Efo}=sc,{Hono:_fo}=sc,{cors:kfo,HTTPException:Cfo,logger:Rfo,secureHeaders:Afo,streamSSE:Ifo,timeout:Pfo}=sc,Mfo=globalThis.fetch,Ofo=globalThis.Request,Nfo=globalThis.Response,Dfo=globalThis.Headers,Lfo=globalThis.FormData,Ufo=globalThis.File,Ffo=globalThis.Blob,$fo=sc.Agent,Bfo=sc.Pool,zfo=sc.Client,jfo=sc.Dispatcher,Gfo=sc.MockAgent});var t6e={};ee(t6e,{GoogleTTSHandler:()=>sS});var sS,VW=_(()=>{"use strict";e6e();ha();W();yo();sS=class r{client=null;voicesCache=null;static CACHE_TTL_MS=300*1e3;static DEFAULT_MAX_TEXT_LENGTH=5e3;static DEFAULT_API_TIMEOUT_MS=30*1e3;maxTextLength=r.DEFAULT_MAX_TEXT_LENGTH;constructor(e){let t=e??process.env.GOOGLE_APPLICATION_CREDENTIALS;t&&(this.client=new QKe({keyFilename:t}))}isConfigured(){return this.client!==null}async getVoices(e){if(!this.client)throw new qt({code:pr.PROVIDER_NOT_CONFIGURED,message:"Google Cloud TTS client not initialized. Set GOOGLE_APPLICATION_CREDENTIALS or pass credentials path.",category:"configuration",severity:"high",retriable:!1});let t=xe.createSpan("tts","tts.google.listVoices",{"tts.operation":"listVoices","tts.provider":"google"});try{if(this.voicesCache&&Date.now()-this.voicesCache.timestamp<r.CACHE_TTL_MS&&!e){let i=xe.endSpan(t,1);return Ze().recordSpan(i),this.voicesCache.voices}let[n]=await this.client.listVoices(e?{languageCode:e}:{});if(!n.voices||n.voices.length===0){g.warn("Google Cloud TTS returned no voices");let i=xe.endSpan(t,1);return Ze().recordSpan(i),[]}let o=[];for(let i of n.voices??[]){if(!i.name||!Array.isArray(i.languageCodes)||i.languageCodes.length===0){g.warn("Skipping voice with missing required fields",{name:i.name,languageCodesCount:i.languageCodes?.length});continue}let a=i.name,c=i.languageCodes,l=c[0],u=this.detectVoiceType(a),d=i.ssmlGender==="MALE"?"male":i.ssmlGender==="FEMALE"?"female":"neutral";o.push({id:a,name:a,languageCode:l,languageCodes:c,gender:d,type:u,naturalSampleRateHertz:i.naturalSampleRateHertz??void 0})}e||(this.voicesCache={voices:o,timestamp:Date.now()});let s=xe.endSpan(t,1);return Ze().recordSpan(s),o}catch(n){let o=xe.endSpan(t,2,n instanceof Error?n.message:"Unknown error");Ze().recordSpan(o);let s=n instanceof Error?n.message:"Unknown error";return g.error(`Failed to fetch Google TTS voices: ${s}`),[]}}async synthesize(e,t){if(!this.client)throw new qt({code:pr.PROVIDER_NOT_CONFIGURED,message:"Google Cloud TTS client not initialized. Set GOOGLE_APPLICATION_CREDENTIALS or pass credentials path.",category:"configuration",severity:"high",retriable:!1});let n=t.voice??"en-US-Neural2-C",o=xe.createSpan("tts","tts.google.synthesize",{"tts.operation":"synthesize","tts.provider":"google","tts.voice":n,"tts.format":t.format??"mp3"}),s=Date.now();try{let i=e.startsWith("<speak>")&&e.endsWith("</speak>");if(e.startsWith("<speak>")&&!e.endsWith("</speak>")||!e.startsWith("<speak>")&&e.endsWith("</speak>"))throw new qt({code:pr.INVALID_INPUT,message:"Malformed SSML: missing opening <speak> or closing </speak> tag.",category:"validation",severity:"medium",retriable:!1});let a=this.extractLanguageCode(n),c=this.mapFormat(t.format??"mp3"),l={input:i?{ssml:e}:{text:e},voice:{name:n,languageCode:a},audioConfig:{audioEncoding:c,speakingRate:t.speed??1,pitch:t.pitch??0,volumeGainDb:t.volumeGainDb??0}},[u]=await this.client.synthesizeSpeech(l,{timeout:r.DEFAULT_API_TIMEOUT_MS}),d=u.audioContent;if(!d)throw new qt({code:pr.SYNTHESIS_FAILED,message:"Google TTS returned empty audio content",category:"execution",severity:"high",retriable:!0});let p=d instanceof Uint8Array?Buffer.from(d):typeof d=="string"?Buffer.from(d,"base64"):(()=>{throw new qt({code:pr.SYNTHESIS_FAILED,message:"Unsupported audioContent type returned by Google TTS",category:"execution",severity:"high",retriable:!0,context:{type:typeof d}})})(),f=Date.now()-s,h=xe.endSpan(o,1);return Ze().recordSpan(h),{buffer:p,format:t.format??"mp3",size:p.length,voice:n,metadata:{latency:f,provider:"google-ai"}}}catch(i){let a=xe.endSpan(o,2,i instanceof Error?i.message:String(i));if(Ze().recordSpan(a),i instanceof qt)throw i;let c=Date.now()-s,l=i instanceof Error?i.message:"Unknown error";throw new qt({code:pr.SYNTHESIS_FAILED,message:`Google TTS failed after ${c}ms: ${l}`,category:"execution",severity:"high",retriable:!0,context:{latency:c},originalError:i instanceof Error?i:void 0})}}extractLanguageCode(e){let t=e.split("-");if(t.length>=2)return`${t[0]}-${t[1]}`;throw new qt({code:pr.INVALID_INPUT,message:`Invalid Google TTS voiceId format: "${e}". Expected format like "en-US-Neural2-C".`,category:"validation",severity:"medium",retriable:!1,context:{voiceId:e}})}mapFormat(e){switch(e.toLowerCase()){case"mp3":return"MP3";case"wav":return"LINEAR16";case"ogg":case"opus":return"OGG_OPUS";default:throw new qt({code:pr.INVALID_INPUT,message:`Unsupported audio format: ${e}`,category:"validation",severity:"medium",retriable:!1,context:{format:e}})}}detectVoiceType(e){let t=e.toLowerCase().split("-");return t.some(n=>n.startsWith("chirp"))?"chirp":t.includes("neural2")?"neural":t.includes("wavenet")?"wavenet":t.includes("standard")?"standard":"unknown"}}});var r6e={};ee(r6e,{OpenAITTS:()=>Kg});var Kg,qW=_(()=>{"use strict";W();ha();Kg=class r{apiKey;baseUrl="https://api.openai.com/v1";maxTextLength=4096;static VOICES=[{id:"alloy",name:"Alloy",languageCode:"en",languageCodes:["en"],gender:"neutral",type:"neural"},{id:"echo",name:"Echo",languageCode:"en",languageCodes:["en"],gender:"male",type:"neural"},{id:"fable",name:"Fable",languageCode:"en",languageCodes:["en"],gender:"neutral",type:"neural"},{id:"onyx",name:"Onyx",languageCode:"en",languageCodes:["en"],gender:"male",type:"neural"},{id:"nova",name:"Nova",languageCode:"en",languageCodes:["en"],gender:"female",type:"neural"},{id:"shimmer",name:"Shimmer",languageCode:"en",languageCodes:["en"],gender:"female",type:"neural"}];constructor(e){let t=(e??process.env.OPENAI_API_KEY??"").trim();this.apiKey=t.length>0?t:null}isConfigured(){return this.apiKey!==null}async getVoices(e){return e&&!e.startsWith("en"),r.VOICES}async synthesize(e,t={}){if(!this.apiKey)throw new qt({code:pr.PROVIDER_NOT_CONFIGURED,message:"OpenAI TTS API key not configured",category:"configuration",severity:"high",retriable:!1});let n=Date.now(),o=t;try{let s=o.model??(t.quality==="hd"?"tts-1-hd":"tts-1"),i=t.voice??"alloy",a=this.mapFormat(t.format??"mp3"),c={model:s,input:e,voice:i,response_format:a,speed:t.speed??1},l=new AbortController,u=setTimeout(()=>l.abort(),3e4),d;try{d=await fetch(`${this.baseUrl}/audio/speech`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify(c),signal:l.signal})}catch(b){throw b instanceof Error&&b.name==="AbortError"?new qt({code:pr.SYNTHESIS_FAILED,message:"OpenAI TTS request timed out after 30 seconds",category:"network",severity:"high",retriable:!0,originalError:b}):b}finally{clearTimeout(u)}if(!d.ok){let T=(await d.json().catch(()=>Object.create(null))).error?.message||`HTTP ${d.status}`,w=d.status===408||d.status===429||d.status>=500;throw new qt({code:pr.SYNTHESIS_FAILED,message:T,category:w?"network":"execution",severity:"high",retriable:w,context:{status:d.status,model:s,responseFormat:a}})}let p=Date.now()-n,f=await d.arrayBuffer(),h=Buffer.from(f),y=this.effectiveFormat(a),x={buffer:h,format:y,size:h.length,voice:i,sampleRate:this.getSampleRate(y),metadata:{latency:p,provider:"openai-tts",model:s,requestedFormat:t.format,responseFormat:a}};return g.info(`[OpenAITTSHandler] Synthesized ${h.length} bytes in ${p}ms`),x}catch(s){if(s instanceof qt)throw s;let i=s instanceof Error?s.message:String(s||"Unknown error");throw g.error(`[OpenAITTSHandler] Synthesis failed: ${i}`),new qt({code:pr.SYNTHESIS_FAILED,message:`Synthesis failed: ${i}`,category:"execution",severity:"high",retriable:!0,context:{textLength:e.length},originalError:s instanceof Error?s:void 0})}}mapFormat(e){let n={mp3:"mp3",wav:"wav",ogg:"opus",opus:"opus",pcm16:"pcm"}[e];return n===void 0?(g.warn(`[OpenAITTSHandler] Unsupported format "${e}" \u2014 falling back to "mp3". Supported formats: mp3, wav, ogg, opus, pcm16.`),"mp3"):n}getSampleRate(e){switch(e){case"opus":case"ogg":return 48e3;default:return 24e3}}effectiveFormat(e){switch(e){case"mp3":return"mp3";case"wav":return"wav";case"opus":return"opus";case"pcm":return"pcm16";default:return"mp3"}}}});var n6e={};ee(n6e,{ElevenLabsTTS:()=>Jg});var Jg,HW=_(()=>{"use strict";W();ha();Jg=class r{apiKey;baseUrl="https://api.elevenlabs.io/v1";voicesCache=null;static CACHE_TTL_MS=300*1e3;maxTextLength=5e3;constructor(e){let t=(e??process.env.ELEVENLABS_API_KEY??"").trim();this.apiKey=t.length>0?t:null}isConfigured(){return this.apiKey!==null}async getVoices(e){if(!this.apiKey)throw new qt({code:pr.PROVIDER_NOT_CONFIGURED,message:"ElevenLabs API key not configured",category:"configuration",severity:"high",retriable:!1});if(this.voicesCache&&Date.now()-this.voicesCache.timestamp<r.CACHE_TTL_MS&&!e)return this.voicesCache.voices;try{let t=new AbortController,n=setTimeout(()=>t.abort(),3e4),o;try{o=await fetch(`${this.baseUrl}/voices`,{method:"GET",headers:{"xi-api-key":this.apiKey},signal:t.signal})}catch(a){throw a instanceof Error&&a.name==="AbortError"?new qt({code:pr.SYNTHESIS_FAILED,message:"ElevenLabs voices request timed out after 30 seconds",category:"network",severity:"medium",retriable:!0,originalError:a}):a}finally{clearTimeout(n)}if(!o.ok)throw new Error(`HTTP ${o.status}`);let i=(await o.json()).voices.map(a=>({id:a.voice_id,name:a.name,languageCode:"en",languageCodes:["en","es","fr","de","it","pt","pl","hi","ar","zh","ja","ko"],gender:this.mapGender(a.labels?.gender),type:"neural",description:a.labels?.description}));if(e){let a=e.toLowerCase(),c=a.split("-")[0];i=i.filter(l=>l.languageCodes?.some(u=>{let d=u.toLowerCase();return d===a||d===c||d.startsWith(c)}))}return e||(this.voicesCache={voices:i,timestamp:Date.now()}),i}catch(t){let n=t instanceof Error?t.message:String(t||"Unknown error");throw g.error(`[ElevenLabsTTSHandler] Failed to get voices: ${n}`),new qt({code:pr.SYNTHESIS_FAILED,message:`Failed to get voices: ${n}`,category:"network",severity:"medium",retriable:!0,originalError:t instanceof Error?t:void 0})}}async synthesize(e,t={}){if(!this.apiKey)throw new qt({code:pr.PROVIDER_NOT_CONFIGURED,message:"ElevenLabs API key not configured",category:"configuration",severity:"high",retriable:!1});let n=Date.now(),o=t;try{let s=t.voice??"21m00Tcm4TlvDq8ikWAM",i=o.model??"eleven_multilingual_v2",a={text:e,model_id:i,voice_settings:{stability:o.stability??.5,similarity_boost:o.similarityBoost??.75,style:o.style??0,use_speaker_boost:o.useSpeakerBoost??!0}},c=this.mapFormat(t.format??"mp3"),l=new AbortController,u=setTimeout(()=>l.abort(),3e4),d;try{d=await fetch(`${this.baseUrl}/text-to-speech/${s}?output_format=${c}`,{method:"POST",headers:{"xi-api-key":this.apiKey,"Content-Type":"application/json"},body:JSON.stringify(a),signal:l.signal})}catch(x){throw x instanceof Error&&x.name==="AbortError"?new qt({code:pr.SYNTHESIS_FAILED,message:"ElevenLabs TTS request timed out after 30 seconds",category:"network",severity:"high",retriable:!0,originalError:x}):x}finally{clearTimeout(u)}if(!d.ok){let b=(await d.json().catch(()=>Object.create(null))).detail?.message||`HTTP ${d.status}`;throw new Error(b)}let p=Date.now()-n,f=await d.arrayBuffer(),h=Buffer.from(f),y={buffer:h,format:this.effectiveFormat(c),size:h.length,voice:s,sampleRate:this.getSampleRate(c),metadata:{latency:p,provider:"elevenlabs-tts",model:i,requestedFormat:t.format,outputFormat:c}};return g.info(`[ElevenLabsTTSHandler] Synthesized ${h.length} bytes in ${p}ms`),y}catch(s){if(s instanceof qt)throw s;let i=s instanceof Error?s.message:String(s||"Unknown error");throw g.error(`[ElevenLabsTTSHandler] Synthesis failed: ${i}`),new qt({code:pr.SYNTHESIS_FAILED,message:`Synthesis failed: ${i}`,category:"execution",severity:"high",retriable:!0,context:{textLength:e.length},originalError:s instanceof Error?s:void 0})}}mapGender(e){if(!e)return"neutral";let t=e.toLowerCase();return t.includes("male")&&!t.includes("female")?"male":t.includes("female")?"female":"neutral"}mapFormat(e){return{mp3:"mp3_44100_128",wav:"pcm_44100",ogg:"ogg_22050",opus:"ogg_22050"}[e]??"mp3_44100_128"}getSampleRate(e){return e.includes("44100")?44100:e.includes("22050")?22050:e.includes("24000")?24e3:44100}effectiveFormat(e){return e.startsWith("mp3")?"mp3":e.startsWith("pcm")?"pcm16":e.startsWith("ogg")?"opus":"mp3"}}});var o6e={};ee(o6e,{AzureTTS:()=>Yg});var Yg,WW=_(()=>{"use strict";W();ha();Yg=class r{apiKey;region;voicesCache=null;static CACHE_TTL_MS=1800*1e3;maxTextLength=1e4;constructor(e,t){let n=(e??process.env.AZURE_SPEECH_KEY??"").trim();this.apiKey=n.length>0?n:null;let o=(t??process.env.AZURE_SPEECH_REGION??"").trim();this.region=o.length>0?o:"eastus"}isConfigured(){return this.apiKey!==null&&this.region.length>0}async getVoices(e){if(!this.apiKey)throw new qt({code:pr.PROVIDER_NOT_CONFIGURED,message:"Azure Speech key not configured",category:"configuration",severity:"high",retriable:!1});if(this.voicesCache&&Date.now()-this.voicesCache.timestamp<r.CACHE_TTL_MS&&!e)return this.voicesCache.voices;try{let t=new AbortController,n=setTimeout(()=>t.abort(),3e4),o;try{o=await fetch(`https://${this.region}.tts.speech.microsoft.com/cognitiveservices/voices/list`,{method:"GET",headers:{"Ocp-Apim-Subscription-Key":this.apiKey},signal:t.signal})}catch(a){throw a instanceof Error&&a.name==="AbortError"?new qt({code:pr.SYNTHESIS_FAILED,message:"Azure TTS voices request timed out after 30 seconds",category:"network",severity:"medium",retriable:!0,originalError:a}):a}finally{clearTimeout(n)}if(!o.ok)throw new Error(`HTTP ${o.status}`);let i=(await o.json()).map(a=>({id:a.ShortName,name:a.DisplayName,languageCode:a.Locale,languageCodes:[a.Locale],gender:this.mapGender(a.Gender),type:a.VoiceType.toLowerCase().includes("neural")?"neural":"standard",description:a.LocaleName}));return e&&(i=i.filter(a=>a.languageCode.toLowerCase().startsWith(e.toLowerCase())||a.languageCode.toLowerCase()===e.toLowerCase())),e||(this.voicesCache={voices:i,timestamp:Date.now()}),i}catch(t){if(t instanceof qt)throw t;let n=t instanceof Error?t.message:String(t||"Unknown error");throw g.error(`[AzureTTSHandler] Failed to get voices: ${n}`),new qt({code:pr.SYNTHESIS_FAILED,message:`Failed to get voices: ${n}`,category:"network",severity:"medium",retriable:!0,originalError:t instanceof Error?t:void 0})}}async synthesize(e,t={}){if(!this.apiKey)throw new qt({code:pr.PROVIDER_NOT_CONFIGURED,message:"Azure Speech key not configured",category:"configuration",severity:"high",retriable:!1});let n=Date.now(),o=t;try{let s=t.voice??"en-US-JennyNeural",i=o.outputFormat??this.mapFormat(t.format??"mp3"),a=this.buildSSML(e,s,t),c=new AbortController,l=setTimeout(()=>c.abort(),3e4),u;try{u=await fetch(`https://${this.region}.tts.speech.microsoft.com/cognitiveservices/v1`,{method:"POST",headers:{"Ocp-Apim-Subscription-Key":this.apiKey,"Content-Type":"application/ssml+xml","X-Microsoft-OutputFormat":i},body:a,signal:c.signal})}catch(y){throw y instanceof Error&&y.name==="AbortError"?new qt({code:pr.SYNTHESIS_FAILED,message:"Azure TTS request timed out after 30 seconds",category:"network",severity:"high",retriable:!0,originalError:y}):y}finally{clearTimeout(l)}if(!u.ok){let y=await u.text();throw new Error(`HTTP ${u.status}: ${y}`)}let d=Date.now()-n,p=await u.arrayBuffer(),f=Buffer.from(p),h={buffer:f,format:this.effectiveFormat(i),size:f.length,voice:s,sampleRate:this.getSampleRate(i),metadata:{latency:d,provider:"azure-tts",requestedFormat:t.format,outputFormat:i,region:this.region}};return g.info(`[AzureTTSHandler] Synthesized ${f.length} bytes in ${d}ms`),h}catch(s){if(s instanceof qt)throw s;let i=s instanceof Error?s.message:String(s||"Unknown error");throw g.error(`[AzureTTSHandler] Synthesis failed: ${i}`),new qt({code:pr.SYNTHESIS_FAILED,message:`Synthesis failed: ${i}`,category:"execution",severity:"high",retriable:!0,context:{textLength:e.length},originalError:s instanceof Error?s:void 0})}}buildSSML(e,t,n){let o=n;if(o.ssmlTemplate)return o.ssmlTemplate.replace("{text}",this.escapeXml(e)).replace("{voice}",this.escapeXml(t));if(o.allowRawSSML&&e.trim().startsWith("<speak"))return e;let s=n.speed?`${Math.round((n.speed-1)*100)}%`:"0%",i=n.pitch??0,a=i>=0?`+${Math.round(i)}st`:`${Math.round(i)}st`;return`<speak version="1.0" xmlns="http://www.w3.org/2001/10/synthesis" xml:lang="${this.escapeXml(this.extractLanguage(t))}">
|
|
2209
2209
|
<voice name="${this.escapeXml(t)}">
|
|
@@ -2217,7 +2217,7 @@ ${t}`:t}function xRr(r){return typeof r=="string"?r:Array.isArray(r)?r.map(e=>ty
|
|
|
2217
2217
|
`+Object.keys(n).map(o=>`${o}: ${n[o]}`).join(`\r
|
|
2218
2218
|
`)+`\r
|
|
2219
2219
|
\r
|
|
2220
|
-
`+t)}function uS(r,e,t,n,o,s){if(r.listenerCount("wsClientError")){let i=new Error(o);Error.captureStackTrace(i,uS),r.emit("wsClientError",i,t,e)}else iL(t,n,o,s)}});var T5={};ee(T5,{PerMessageDeflate:()=>eJe.default,Receiver:()=>tJe.default,Sender:()=>rJe.default,WebSocket:()=>Tfe.default,WebSocketServer:()=>oJe.default,createWebSocketStream:()=>Z8e.default,default:()=>eBr,extension:()=>Q8e.default,subprotocol:()=>nJe.default});var Z8e,Q8e,eJe,tJe,rJe,nJe,Tfe,oJe,eBr,S5=_(()=>{Z8e=Oo(G8e(),1),Q8e=Oo(g5(),1),eJe=Oo(AC(),1),tJe=Oo(ufe(),1),rJe=Oo(mfe(),1),nJe=Oo(vfe(),1),Tfe=Oo(v5(),1),oJe=Oo(X8e(),1),eBr=Tfe.default});var sJe={};ee(sJe,{DeepgramSTT:()=>nh});var nh,w5=_(()=>{"use strict";W();Qm();nh=class{apiKey;baseUrl="https://api.deepgram.com/v1";maxAudioDuration=7200;supportsStreaming=!0;constructor(e){let t=(e??process.env.DEEPGRAM_API_KEY??"").trim();this.apiKey=t.length>0?t:null}isConfigured(){return this.apiKey!==null}getSupportedFormats(){return["mp3","wav","ogg","opus"]}async getSupportedLanguages(){return[{code:"en",name:"English",supportsDiarization:!0,supportsPunctuation:!0},{code:"en-US",name:"English (US)",supportsDiarization:!0,supportsPunctuation:!0},{code:"en-GB",name:"English (UK)",supportsDiarization:!0,supportsPunctuation:!0},{code:"es",name:"Spanish",supportsDiarization:!0,supportsPunctuation:!0},{code:"fr",name:"French",supportsDiarization:!0,supportsPunctuation:!0},{code:"de",name:"German",supportsDiarization:!0,supportsPunctuation:!0},{code:"it",name:"Italian",supportsDiarization:!0,supportsPunctuation:!0},{code:"pt",name:"Portuguese",supportsDiarization:!0,supportsPunctuation:!0},{code:"nl",name:"Dutch",supportsDiarization:!0,supportsPunctuation:!0},{code:"ja",name:"Japanese",supportsDiarization:!0,supportsPunctuation:!0},{code:"ko",name:"Korean",supportsDiarization:!0,supportsPunctuation:!0},{code:"zh",name:"Chinese",supportsDiarization:!0,supportsPunctuation:!0},{code:"hi",name:"Hindi",supportsDiarization:!0,supportsPunctuation:!0},{code:"ru",name:"Russian",supportsDiarization:!0,supportsPunctuation:!0}]}async transcribe(e,t={}){if(!this.apiKey)throw gr.providerNotConfigured("deepgram");let n=Buffer.isBuffer(e)?e:Buffer.from(e);if(n.length===0)throw gr.audioEmpty("deepgram");let o=t,s=Date.now();try{let i=new URLSearchParams;if(i.set("model",o.model??"nova-2"),t.language&&i.set("language",t.language),t.punctuation!==!1&&i.set("punctuate","true"),t.speakerDiarization&&(i.set("diarize","true"),t.speakerCount&&i.set("diarize_version","latest")),o.smartFormat&&i.set("smart_format","true"),o.utterances&&(i.set("utterances","true"),o.uttSplit!==void 0&&i.set("utt_split",o.uttSplit.toString())),o.paragraphs&&i.set("paragraphs","true"),o.fillerWords&&i.set("filler_words","true"),o.keywords&&o.keywords.length>0){for(let x of o.keywords)i.append("keywords",x);o.keywordBoost&&i.set("keyword_boost",o.keywordBoost)}if(o.redact&&o.redact.length>0)for(let x of o.redact)i.append("redact",x);t.profanityFilter&&i.set("profanity_filter","true");let a=`${this.baseUrl}/listen?${i.toString()}`,c=new AbortController,l=setTimeout(()=>c.abort(),3e4),u;try{u=await fetch(a,{method:"POST",headers:{Authorization:`Token ${this.apiKey}`,"Content-Type":this.getMimeType(t.format??"wav")},body:new Uint8Array(n),signal:c.signal})}catch(x){throw x instanceof Error&&x.name==="AbortError"?gr.transcriptionFailed("Deepgram STT request timed out after 30 seconds","deepgram",x):x}finally{clearTimeout(l)}if(!u.ok){let b=(await u.json().catch(()=>Object.create(null))).err_msg||`HTTP ${u.status}`;throw gr.transcriptionFailed(b,"deepgram")}let d=await u.json(),p=Date.now()-s;if(!d.results?.channels||d.results.channels.length===0||!d.results.channels[0].alternatives||d.results.channels[0].alternatives.length===0)return{text:"",confidence:0,language:t.language,duration:d.metadata?.duration,metadata:{latency:p,provider:"deepgram",requestId:d.metadata?.request_id}};let h=d.results.channels[0].alternatives[0],y={text:h.transcript,confidence:h.confidence,language:t.language,duration:d.metadata?.duration,metadata:{latency:p,provider:"deepgram",model:o.model??"nova-2",requestId:d.metadata?.request_id}};if(h.words&&h.words.length>0){let x=new Set;y.words=h.words.map(b=>{let T={word:b.punctuated_word??b.word,startTime:b.start,endTime:b.end,confidence:b.confidence};return b.speaker!==void 0&&(T.speaker=`Speaker ${b.speaker}`,x.add(T.speaker)),T}),x.size>0&&(y.speakers=Array.from(x))}return d.results.utterances&&d.results.utterances.length>0&&(y.segments=d.results.utterances.map((x,b)=>({index:b,text:x.transcript,isFinal:!0,confidence:x.confidence,startTime:x.start,endTime:x.end,speaker:x.speaker!==void 0?`Speaker ${x.speaker}`:void 0}))),g.info(`[DeepgramSTTHandler] Transcribed ${d.metadata?.duration?.toFixed(1)??"?"}s audio in ${p}ms`),y}catch(i){if(i instanceof gr)throw i;let a=i instanceof Error?i.message:String(i||"Unknown error");throw g.error(`[DeepgramSTTHandler] Transcription failed: ${a}`),gr.transcriptionFailed(a,"deepgram",i instanceof Error?i:void 0)}}async*transcribeStream(e,t){if(!this.apiKey)throw gr.providerNotConfigured("deepgram");let n=t,o=new URLSearchParams;o.set("model",n.model??"nova-2"),t.language&&o.set("language",t.language),t.punctuation!==!1&&o.set("punctuate","true"),t.speakerDiarization&&o.set("diarize","true"),n.smartFormat&&o.set("smart_format","true"),o.set("interim_results","true");let s=`wss://api.deepgram.com/v1/listen?${o.toString()}`,i=(await Promise.resolve().then(()=>(S5(),T5))).default,a=new i(s,{headers:{Authorization:`Token ${this.apiKey}`}}),c=0,l=[],u=null,d=!1,p=null,f=T=>{try{let w=JSON.parse(T.toString());if(w.type==="Results"&&w.channel?.alternatives){let k=w.channel.alternatives[0];if(k&&k.transcript){let C={index:c++,text:k.transcript,isFinal:w.is_final??!1,confidence:k.confidence??0};u?(u({value:C,done:!1}),u=null):l.push(C)}}}catch{g.warn("[DeepgramSTTHandler] Failed to parse WebSocket message")}},h=T=>{p=T,u&&(u({value:void 0,done:!0}),u=null)},y=()=>{d=!0,u&&(u({value:void 0,done:!0}),u=null)};a.on("message",f),a.on("error",h),a.on("close",y),await new Promise((T,w)=>{let k=()=>{clearTimeout(A),a.off("error",C),T()},C=P=>{clearTimeout(A),a.off("open",k),w(P)},A=setTimeout(()=>{a.off("message",f),a.off("error",h),a.off("close",y),a.off("open",k),a.off("error",C),a.terminate(),w(gr.streamError("WebSocket connection to Deepgram timed out after 10 seconds","deepgram"))},1e4);a.on("open",k),a.on("error",C)}),(async()=>{try{for await(let T of e)a.readyState===i.OPEN&&a.send(T)}catch(T){g.error(`[DeepgramSTTHandler] Error sending audio: ${T instanceof Error?T.message:String(T)}`),p=T,u&&(u({value:void 0,done:!0}),u=null)}finally{if(a.readyState===i.OPEN)try{a.send(JSON.stringify({type:"CloseStream"}))}catch{}}})().catch(T=>{g.error(`[DeepgramSTTHandler] sendAudio rejected: ${T instanceof Error?T.message:String(T)}`)});let b=()=>{let T=e.return;if(typeof T=="function")try{Promise.resolve(T.call(e)).catch(()=>{})}catch{}};try{for(;!d;){if(p)throw gr.streamError(p.message,"deepgram");if(l.length>0){let T=l.shift();T!==void 0&&(yield T)}else{let T=await new Promise(w=>{u=w});!T.done&&T.value&&(yield T.value)}}for(;l.length>0;){let T=l.shift();T!==void 0&&(yield T)}}finally{if(b(),a.readyState===i.OPEN){try{a.send(JSON.stringify({type:"CloseStream"}))}catch{}a.close()}else(a.readyState===i.CONNECTING||a.readyState===i.CLOSING)&&a.terminate()}}getMimeType(e){return{mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",opus:"audio/opus"}[e]??"audio/wav"}}});var iJe={};ee(iJe,{GoogleSTT:()=>oh});var oh,E5=_(()=>{"use strict";W();Qm();oh=class{apiKey;credentialsPath;baseUrl="https://speech.googleapis.com/v1";maxAudioDuration=60;supportsStreaming=!1;constructor(e,t){let n=(e??process.env.GOOGLE_API_KEY??process.env.GOOGLE_AI_API_KEY??process.env.GEMINI_API_KEY??"").trim();this.apiKey=n.length>0?n:null;let o=(t??process.env.GOOGLE_APPLICATION_CREDENTIALS??"").trim();this.credentialsPath=o.length>0?o:null}isConfigured(){return this.apiKey!==null||this.credentialsPath!==null}getSupportedFormats(){return["mp3","wav","ogg","opus"]}async getSupportedLanguages(){return[{code:"en-US",name:"English (US)",supportsDiarization:!0,supportsPunctuation:!0},{code:"en-GB",name:"English (UK)",supportsDiarization:!0,supportsPunctuation:!0},{code:"es-ES",name:"Spanish (Spain)",supportsDiarization:!0,supportsPunctuation:!0},{code:"es-US",name:"Spanish (US)",supportsDiarization:!0,supportsPunctuation:!0},{code:"fr-FR",name:"French",supportsDiarization:!0,supportsPunctuation:!0},{code:"de-DE",name:"German",supportsDiarization:!0,supportsPunctuation:!0},{code:"it-IT",name:"Italian",supportsDiarization:!0,supportsPunctuation:!0},{code:"pt-BR",name:"Portuguese (Brazil)",supportsDiarization:!0,supportsPunctuation:!0},{code:"ja-JP",name:"Japanese",supportsDiarization:!0,supportsPunctuation:!0},{code:"ko-KR",name:"Korean",supportsDiarization:!0,supportsPunctuation:!0},{code:"zh-CN",name:"Chinese (Simplified)",supportsDiarization:!0,supportsPunctuation:!0},{code:"zh-TW",name:"Chinese (Traditional)",supportsDiarization:!0,supportsPunctuation:!0},{code:"ar-SA",name:"Arabic",supportsDiarization:!0,supportsPunctuation:!0},{code:"hi-IN",name:"Hindi",supportsDiarization:!0,supportsPunctuation:!0},{code:"ru-RU",name:"Russian",supportsDiarization:!0,supportsPunctuation:!0}]}async transcribe(e,t={}){if(!this.isConfigured())throw gr.providerNotConfigured("google-stt");let n=Buffer.isBuffer(e)?e:Buffer.from(e);if(n.length===0)throw gr.audioEmpty("google-stt");let o=t,s=Date.now();try{let i=t.format??"wav",a={encoding:this.getEncoding(i),...i!=="wav"&&i!=="flac"?{sampleRateHertz:t.sampleRate??16e3}:t.sampleRate?{sampleRateHertz:t.sampleRate}:{},languageCode:t.language??"en-US",enableAutomaticPunctuation:t.punctuation??!0,enableWordTimeOffsets:t.wordTimestamps??!1,enableWordConfidence:!0,profanityFilter:t.profanityFilter??!1};o.model&&(a.model=o.model),o.useEnhanced&&(a.useEnhanced=!0),t.speakerDiarization&&(a.enableSpeakerDiarization=!0,t.speakerCount&&(a.diarizationSpeakerCount=t.speakerCount)),o.maxAlternatives&&(a.maxAlternatives=o.maxAlternatives);let c={config:a,audio:{content:n.toString("base64")}},l=this.apiKey?`${this.baseUrl}/speech:recognize?key=${this.apiKey}`:`${this.baseUrl}/speech:recognize`,u=new AbortController,d=setTimeout(()=>u.abort(),3e4),p;try{p=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json",...this.credentialsPath&&!this.apiKey?{Authorization:`Bearer ${await this.getAccessToken()}`}:{}},body:JSON.stringify(c),signal:u.signal})}catch(T){throw T instanceof Error&&T.name==="AbortError"?gr.transcriptionFailed("Google STT request timed out after 30 seconds","google-stt",T):T}finally{clearTimeout(d)}if(!p.ok){let w=(await p.json().catch(()=>Object.create(null))).error?.message||`HTTP ${p.status}`;throw gr.transcriptionFailed(w,"google-stt")}let f=await p.json(),h=Date.now()-s;if(!f.results||f.results.length===0)return{text:"",confidence:0,language:t.language,metadata:{latency:h,provider:"google-stt"}};let y={text:f.results.map(T=>T.alternatives[0]?.transcript??"").join(" ").trim(),confidence:this.calculateAverageConfidence(f.results),language:f.results[0]?.languageCode??t.language,metadata:{latency:h,provider:"google-stt",billedTime:f.totalBilledTime}},x=[],b=new Set;for(let T of f.results){let w=T.alternatives[0];if(w?.words)for(let k of w.words){let C={word:k.word,startTime:this.parseDuration(k.startTime),endTime:this.parseDuration(k.endTime),confidence:k.confidence};k.speakerTag!==void 0&&(C.speaker=`Speaker ${k.speakerTag}`,b.add(C.speaker)),x.push(C)}}return x.length>0&&(y.words=x),b.size>0&&(y.speakers=Array.from(b)),y.segments=f.results.map((T,w)=>{let k=T.alternatives[0];return{index:w,text:k?.transcript??"",isFinal:!0,confidence:k?.confidence??0,language:T.languageCode}}),g.info(`[GoogleSTTHandler] Transcribed audio in ${h}ms`),y}catch(i){if(i instanceof gr)throw i;let a=i instanceof Error?i.message:String(i||"Unknown error");throw g.error(`[GoogleSTTHandler] Transcription failed: ${a}`),gr.transcriptionFailed(a,"google-stt",i instanceof Error?i:void 0)}}async*transcribeStream(e,t){let n=[],o=0;for await(let s of e){n.push(s);let i=16e3*2;if(n.reduce((c,l)=>c+l.length,0)>=i*5){let c=Buffer.concat(n);n.length=0;try{let l=await this.transcribe(c,t);yield{index:o++,text:l.text,isFinal:!1,confidence:l.confidence}}catch(l){let u=l instanceof Error?l.message:String(l);if(/\b(401|403|404|UNAUTHENTICATED|PERMISSION_DENIED|INVALID_ARGUMENT|UNAUTHORIZED|FORBIDDEN|invalid.*credential|invalid.*key)\b/i.test(u))throw g.error(`[GoogleSTTHandler] Permanent chunk error \u2014 terminating stream: ${u}`),l;g.warn(`[GoogleSTTHandler] Transient chunk failure (skipping): ${u}`)}}}if(n.length>0){let s=Buffer.concat(n);try{let i=await this.transcribe(s,t);yield{index:o,text:i.text,isFinal:!0,confidence:i.confidence}}catch(i){let a=i instanceof Error?i.message:String(i);if(/\b(401|403|404|Forbidden|Unauthorized|Invalid.*credential|Invalid.*key|Permission|PERMISSION_DENIED|UNAUTHENTICATED|INVALID_ARGUMENT)\b/i.test(a))throw g.error(`[GoogleSTTHandler] Permanent final-chunk error \u2014 surfacing: ${a}`),i;g.warn(`[GoogleSTTHandler] Final chunk transcription failed (transient): ${a}`)}}}getEncoding(e){return{mp3:"MP3",wav:"LINEAR16",ogg:"OGG_OPUS",opus:"OGG_OPUS"}[e]??"LINEAR16"}parseDuration(e){if(!e)return 0;let t=e.match(/^([\d.]+)s$/);return t?parseFloat(t[1]):0}calculateAverageConfidence(e){let t=e.map(n=>n.alternatives[0]?.confidence).filter(n=>typeof n=="number");return t.length===0?0:t.reduce((n,o)=>n+o,0)/t.length}async getAccessToken(){try{let{GoogleAuth:e}=await Promise.resolve().then(()=>(wO(),u4)),s=(await(await new e({...this.credentialsPath?{keyFilename:this.credentialsPath}:{},scopes:["https://www.googleapis.com/auth/cloud-platform"]}).getClient()).getAccessToken()).token;if(!s)throw gr.transcriptionFailed("Google access token returned empty \u2014 check GOOGLE_APPLICATION_CREDENTIALS path and service account permissions","google-stt");return s}catch(e){throw g.error(`[GoogleSTTHandler] Failed to acquire access token: ${e instanceof Error?e.message:String(e)}`),e instanceof gr?e:gr.transcriptionFailed(`Google access token acquisition failed: ${e instanceof Error?e.message:String(e)}`,"google-stt")}}}});var aJe={};ee(aJe,{AzureSTT:()=>sh});var sh,_5=_(()=>{"use strict";W();Qm();sh=class{apiKey;region;maxAudioDuration=60;supportsStreaming=!1;constructor(e,t){let n=(e??process.env.AZURE_SPEECH_KEY??"").trim();this.apiKey=n.length>0?n:null;let o=(t??process.env.AZURE_SPEECH_REGION??"").trim();this.region=o.length>0?o:"eastus"}isConfigured(){return this.apiKey!==null&&this.region.length>0}getSupportedFormats(){return["wav","ogg","opus"]}async getSupportedLanguages(){return[{code:"en-US",name:"English (US)",supportsDiarization:!0,supportsPunctuation:!0},{code:"en-GB",name:"English (UK)",supportsDiarization:!0,supportsPunctuation:!0},{code:"es-ES",name:"Spanish (Spain)",supportsDiarization:!0,supportsPunctuation:!0},{code:"es-MX",name:"Spanish (Mexico)",supportsDiarization:!0,supportsPunctuation:!0},{code:"fr-FR",name:"French",supportsDiarization:!0,supportsPunctuation:!0},{code:"de-DE",name:"German",supportsDiarization:!0,supportsPunctuation:!0},{code:"it-IT",name:"Italian",supportsDiarization:!0,supportsPunctuation:!0},{code:"pt-BR",name:"Portuguese (Brazil)",supportsDiarization:!0,supportsPunctuation:!0},{code:"ja-JP",name:"Japanese",supportsDiarization:!0,supportsPunctuation:!0},{code:"ko-KR",name:"Korean",supportsDiarization:!0,supportsPunctuation:!0},{code:"zh-CN",name:"Chinese (Simplified)",supportsDiarization:!0,supportsPunctuation:!0},{code:"hi-IN",name:"Hindi",supportsDiarization:!0,supportsPunctuation:!0},{code:"ar-SA",name:"Arabic",supportsDiarization:!0,supportsPunctuation:!0},{code:"ru-RU",name:"Russian",supportsDiarization:!0,supportsPunctuation:!0}]}async transcribe(e,t={}){if(!this.apiKey)throw gr.providerNotConfigured("azure-stt");let n=Buffer.isBuffer(e)?e:Buffer.from(e);if(n.length===0)throw gr.audioEmpty("azure-stt");let o=t,s=Date.now();try{let i=new URLSearchParams;i.set("language",t.language??"en-US"),(o.detailed||t.wordTimestamps)&&i.set("format","detailed"),o.profanityMode?i.set("profanity",o.profanityMode):t.profanityFilter&&i.set("profanity","masked");let a=`https://${this.region}.stt.speech.microsoft.com`;o.customEndpointId&&i.set("cid",o.customEndpointId);let c=`${a}/speech/recognition/conversation/cognitiveservices/v1?${i.toString()}`,l=new AbortController,u=setTimeout(()=>l.abort(),3e4),d;try{d=await fetch(c,{method:"POST",headers:{"Ocp-Apim-Subscription-Key":this.apiKey,"Content-Type":this.getContentType(t.format??"wav"),Accept:"application/json"},body:new Uint8Array(n),signal:l.signal})}catch(y){throw y instanceof Error&&y.name==="AbortError"?gr.transcriptionFailed("Azure STT request timed out after 30 seconds","azure-stt",y):y}finally{clearTimeout(u)}if(!d.ok){let y=await d.text();throw gr.transcriptionFailed(`HTTP ${d.status}: ${y}`,"azure-stt")}let p=await d.json(),f=Date.now()-s;if(p.RecognitionStatus!=="Success"){if(p.RecognitionStatus==="NoMatch")return{text:"",confidence:0,language:t.language,metadata:{latency:f,provider:"azure-stt",status:p.RecognitionStatus}};throw gr.transcriptionFailed(`Recognition failed: ${p.RecognitionStatus}`,"azure-stt")}let h={text:p.DisplayText??"",confidence:.9,language:t.language,duration:this.ticksToSeconds(p.Duration??0),metadata:{latency:f,provider:"azure-stt",status:p.RecognitionStatus}};if(p.NBest&&p.NBest.length>0){let y=p.NBest[0];h.text=y.Display,h.confidence=y.Confidence,y.Words&&y.Words.length>0&&(h.words=y.Words.map(x=>({word:x.Word,startTime:this.ticksToSeconds(x.Offset),endTime:this.ticksToSeconds(x.Offset+x.Duration),confidence:x.Confidence})))}return g.info(`[AzureSTTHandler] Transcribed audio in ${f}ms`),h}catch(i){if(i instanceof gr)throw i;let a=i instanceof Error?i.message:String(i||"Unknown error");throw g.error(`[AzureSTTHandler] Transcription failed: ${a}`),gr.transcriptionFailed(a,"azure-stt",i instanceof Error?i:void 0)}}async*transcribeStream(e,t){let n=[],o=0,s=0;for await(let i of e){n.push(i),s+=i.length;let a=(t.sampleRate??16e3)*2;if(s>=a*5){let c=Buffer.concat(n);n.length=0,s=0;try{let l=await this.transcribe(c,t);yield{index:o++,text:l.text,isFinal:!1,confidence:l.confidence}}catch(l){let u=l instanceof Error?l.message:String(l);if(/\b(401|403|404|Forbidden|Unauthorized|Invalid.*subscription|Invalid.*key|Wrong.*key|InvalidAudioFormat)\b/i.test(u))throw g.error(`[AzureSTTHandler] Permanent chunk error \u2014 terminating stream: ${u}`),l;g.warn(`[AzureSTTHandler] Transient chunk failure (skipping): ${u}`)}}}if(n.length>0){let i=Buffer.concat(n);try{let a=await this.transcribe(i,t);yield{index:o,text:a.text,isFinal:!0,confidence:a.confidence}}catch(a){let c=a instanceof Error?a.message:String(a);if(/\b(401|403|404|Forbidden|Unauthorized|Invalid.*subscription|Invalid.*key|Wrong.*key|InvalidAudioFormat)\b/i.test(c))throw g.error(`[AzureSTTHandler] Permanent final-chunk error \u2014 surfacing: ${c}`),a;g.warn(`[AzureSTTHandler] Final chunk transcription failed (transient): ${c}`)}}}getContentType(e){return{wav:"audio/wav; codecs=audio/pcm; samplerate=16000",ogg:"audio/ogg; codecs=opus",opus:"audio/ogg; codecs=opus"}[e]??"audio/wav"}ticksToSeconds(e){return e/1e7}}});var cJe={};ee(cJe,{BaseRealtimeHandler:()=>ah,RealtimeProcessor:()=>ih});var ih,ah,DC=_(()=>{"use strict";W();Qm();Nt();ih=class{static handlers=new Map;static sessions=new Map;static registerHandler(e,t){if(!e)throw new Error("Provider name is required");if(!t)throw new Error("Handler is required");let n=e.toLowerCase();this.handlers.has(n)&&g.warn(`[RealtimeProcessor] Overwriting existing handler for provider: ${n}`),this.handlers.set(n,t),g.debug(`[RealtimeProcessor] Registered Realtime handler for provider: ${n}`)}static getHandler(e){let t=e.toLowerCase();return this.handlers.get(t)}static supports(e){if(!e)return!1;let t=e.toLowerCase();return this.handlers.has(t)}static getProviders(){return Array.from(this.handlers.keys())}static async connect(e,t,n){let o=this.getHandler(e);if(!o)throw kr.providerNotSupported(e,Array.from(this.handlers.keys()));if(!o.isConfigured())throw kr.providerNotConfigured(e);if(o.isConnected())throw kr.sessionAlreadyActive(e);let s={...BRe,...t};n&&o.on(n);try{g.debug(`[RealtimeProcessor] Connecting to provider: ${e}`);let i=await o.connect(s);return this.sessions.set(e.toLowerCase(),i),g.info(`[RealtimeProcessor] Connected to ${e} session: ${i.id}`),i}catch(i){if(n&&o.off(),i instanceof kr)throw i;let a=i instanceof Error?i.message:String(i||"Unknown error");throw kr.connectionFailed(a,e,i instanceof Error?i:void 0)}}static async disconnect(e){let t=this.getHandler(e);if(!t)throw kr.providerNotSupported(e,Array.from(this.handlers.keys()));if(!t.isConnected()){g.warn(`[RealtimeProcessor] No active session for provider: ${e}`);return}try{await t.disconnect(),this.sessions.delete(e.toLowerCase()),t.off(),g.info(`[RealtimeProcessor] Disconnected from ${e}`)}catch(n){if(n instanceof kr)throw n;let o=n instanceof Error?n.message:String(n||"Unknown error");throw kr.protocolError(`Disconnect failed: ${o}`,e,n instanceof Error?n:void 0)}}static async sendAudio(e,t){let n=this.getHandler(e);if(!n)throw kr.providerNotSupported(e,Array.from(this.handlers.keys()));if(!n.isConnected())throw kr.sessionNotActive(e);try{await n.sendAudio(t)}catch(o){if(o instanceof kr)throw o;let s=o instanceof Error?o.message:String(o||"Unknown error");throw kr.audioStreamError(s,e)}}static async sendText(e,t){let n=this.getHandler(e);if(!n)throw kr.providerNotSupported(e,Array.from(this.handlers.keys()));if(!n.isConnected())throw kr.sessionNotActive(e);if(!n.sendText)throw new kr({code:za.PROTOCOL_ERROR,message:`Provider "${e}" does not support text input`,category:"validation",severity:"medium",context:{provider:e}});try{await n.sendText(t)}catch(o){throw o instanceof kr?o:new kr({code:za.PROTOCOL_ERROR,message:`sendText failed: ${o instanceof Error?o.message:String(o)}`,category:"network",severity:"medium",retriable:!0,context:{provider:e},originalError:o instanceof Error?o:void 0})}}static async triggerResponse(e){let t=this.getHandler(e);if(!t)throw kr.providerNotSupported(e,Array.from(this.handlers.keys()));if(!t.isConnected())throw kr.sessionNotActive(e);if(t.triggerResponse)try{await t.triggerResponse()}catch(n){throw n instanceof kr?n:new kr({code:za.PROTOCOL_ERROR,message:`triggerResponse failed: ${n instanceof Error?n.message:String(n)}`,category:"network",severity:"medium",retriable:!0,context:{provider:e},originalError:n instanceof Error?n:void 0})}}static async cancelResponse(e){let t=this.getHandler(e);if(!t)throw kr.providerNotSupported(e,Array.from(this.handlers.keys()));if(t.isConnected()&&t.cancelResponse)try{await t.cancelResponse()}catch(n){throw n instanceof kr?n:new kr({code:za.PROTOCOL_ERROR,message:`cancelResponse failed: ${n instanceof Error?n.message:String(n)}`,category:"network",severity:"medium",retriable:!0,context:{provider:e},originalError:n instanceof Error?n:void 0})}}static getSession(e){return this.getHandler(e)?.getSession()??null}static isConnected(e){return this.getHandler(e)?.isConnected()??!1}static getSupportedFormats(e){return this.getHandler(e)?.getSupportedFormats()??[]}static clearHandlers(){for(let[e]of this.sessions){let t=this.handlers.get(e);t?.isConnected()&&t.disconnect().catch(()=>{})}this.handlers.clear(),this.sessions.clear(),g.debug("[RealtimeProcessor] Cleared all handlers and sessions")}},ah=class{session=null;eventHandlers=null;state="disconnected";isConnected(){return this.state==="connected"}getSession(){return this.session}on(e){this.eventHandlers=e}off(){this.eventHandlers=null}emitStateChange(e){this.state=e,this.session&&(this.session.state=e,this.session.lastActivityAt=new Date),this.eventHandlers?.onStateChange?.(e)}emitAudio(e){this.eventHandlers?.onAudio?.(e)}emitTranscript(e,t){this.eventHandlers?.onTranscript?.(e,t)}emitText(e,t){this.eventHandlers?.onText?.(e,t)}async emitFunctionCall(e,t){if(this.eventHandlers?.onFunctionCall)return this.eventHandlers.onFunctionCall(e,t)}emitError(e){this.eventHandlers?.onError?.(e)}emitTurnStart(){this.eventHandlers?.onTurnStart?.()}emitTurnEnd(){this.eventHandlers?.onTurnEnd?.()}createSession(e,t){return{id:e,state:"connected",provider:this.name,model:t.model,createdAt:new Date,lastActivityAt:new Date,config:t}}}});var lJe={};ee(lJe,{OpenAIRealtime:()=>ch});var ch,k5=_(()=>{"use strict";W();Qm();DC();ch=class extends ah{name="openai-realtime";apiKey;ws=null;audioChunkIndex=0;constructor(e){super();let t=(e??process.env.OPENAI_API_KEY??"").trim();this.apiKey=t.length>0?t:null}isConfigured(){return this.apiKey!==null}getSupportedFormats(){return["pcm16"]}async connect(e){if(!this.apiKey)throw kr.providerNotConfigured("openai-realtime");if(this.isConnected())throw kr.sessionAlreadyActive("openai-realtime");this.emitStateChange("connecting");try{let{default:t}=await Promise.resolve().then(()=>(S5(),T5)),o=`wss://api.openai.com/v1/realtime?model=${e.model??"gpt-4o-realtime-preview-2024-12-17"}`;this.ws=new t(o,{headers:{Authorization:`Bearer ${this.apiKey}`,"OpenAI-Beta":"realtime=v1"}});let s=this.ws;await new Promise((a,c)=>{let l=setTimeout(()=>{c(new Error("Connection timeout"))},e.timeout??3e4);s.on("open",()=>{clearTimeout(l),a()}),s.on("error",u=>{clearTimeout(l),c(u)})}),this.ws.on("message",a=>{this.handleMessage(a)}),this.ws.on("close",()=>{this.emitStateChange("disconnected"),this.session=null}),this.ws.on("error",a=>{this.emitError(a)}),await this.sendSessionUpdate(e);let i=await this.waitForSessionCreated();return this.session=this.createSession(i,e),this.emitStateChange("connected"),g.info(`[OpenAIRealtimeHandler] Connected to session: ${i}`),this.session}catch(t){this.emitStateChange("error");let n=t instanceof Error?t.message:String(t||"Unknown error");throw kr.connectionFailed(n,"openai-realtime",t instanceof Error?t:void 0)}}async disconnect(){if(this.ws){this.emitStateChange("disconnecting");try{this.ws.close(),this.ws=null,this.session=null,this.audioChunkIndex=0,this.emitStateChange("disconnected"),g.info("[OpenAIRealtimeHandler] Disconnected")}catch(e){let t=e instanceof Error?e.message:String(e||"Unknown error");throw kr.protocolError(`Disconnect failed: ${t}`,"openai-realtime",e instanceof Error?e:void 0)}}}async sendAudio(e){if(!this.ws||!this.isConnected())throw kr.sessionNotActive("openai-realtime");let n={type:"input_audio_buffer.append",audio:(Buffer.isBuffer(e)?e:e.data).toString("base64")};this.ws.send(JSON.stringify(n))}async sendText(e){if(!this.ws||!this.isConnected())throw kr.sessionNotActive("openai-realtime");let t={type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:e}]}};this.ws.send(JSON.stringify(t)),await this.triggerResponse()}async triggerResponse(){if(!this.ws||!this.isConnected())throw kr.sessionNotActive("openai-realtime");this.ws.send(JSON.stringify({type:"input_audio_buffer.commit"})),this.ws.send(JSON.stringify({type:"response.create"}))}async cancelResponse(){!this.ws||!this.isConnected()||this.ws.send(JSON.stringify({type:"response.cancel"}))}async sendSessionUpdate(e){if(!this.ws)return;let t={modalities:["text","audio"],input_audio_format:"pcm16",output_audio_format:"pcm16",input_audio_transcription:{model:"whisper-1"}};e.voice&&(t.voice=e.voice),e.turnDetection&&(t.turn_detection={type:e.turnDetection,threshold:e.vadThreshold??.5,prefix_padding_ms:300,silence_duration_ms:500}),e.systemPrompt&&(t.instructions=e.systemPrompt),e.tools&&e.tools.length>0&&(t.tools=e.tools.map(o=>({type:"function",name:o.name,description:o.description,parameters:o.parameters})));let n={type:"session.update",session:t};this.ws.send(JSON.stringify(n))}waitForSessionCreated(){return new Promise((e,t)=>{let n=s=>{try{let i=JSON.parse(s.toString());i.type==="session.created"?(clearTimeout(o),this.ws?.off("message",n),e(i.session.id)):i.type==="error"&&(clearTimeout(o),this.ws?.off("message",n),t(new Error(i.error?.message??"Unknown error")))}catch{}},o=setTimeout(()=>{this.ws?.off("message",n),t(new Error("Timeout waiting for session.created"))},1e4);this.ws?.on("message",n)})}handleMessage(e){try{let t=JSON.parse(e.toString());switch(t.type){case"response.audio.delta":{let n=t,o=Buffer.from(n.delta,"base64");this.emitAudio({data:o,index:this.audioChunkIndex++,isFinal:!1,format:"pcm16",sampleRate:24e3});break}case"response.audio.done":{this.emitAudio({data:Buffer.alloc(0),index:this.audioChunkIndex++,isFinal:!0,format:"pcm16",sampleRate:24e3});break}case"response.audio_transcript.delta":{let n=t;n.delta&&this.emitText(n.delta,!1);break}case"response.audio_transcript.done":{let n=t;n.transcript&&this.emitText(n.transcript,!0);break}case"conversation.item.input_audio_transcription.completed":{let n=t;n.transcript&&this.emitTranscript(n.transcript,!0);break}case"response.function_call_arguments.done":{let n=t;if(n.name&&n.call_id&&n.arguments)try{let o=JSON.parse(n.arguments);this.handleFunctionCall(n.name,o,n.call_id).catch(s=>{g.error(`[OpenAIRealtimeHandler] handleFunctionCall failed: ${s instanceof Error?s.message:String(s)}`)})}catch{g.warn("[OpenAIRealtimeHandler] Failed to parse function arguments")}break}case"response.done":{this.emitTurnEnd(),this.audioChunkIndex=0;break}case"input_audio_buffer.speech_started":{this.emitTurnStart();break}case"error":{let o=t.error?.message??"Unknown error";this.emitError(new Error(o));break}default:g.debug(`[OpenAIRealtimeHandler] Unhandled event: ${t.type}`)}}catch(t){g.warn(`[OpenAIRealtimeHandler] Failed to parse message: ${t instanceof Error?t.message:String(t)}`)}}async handleFunctionCall(e,t,n){try{let o=await this.emitFunctionCall(e,t);this.ws&&this.isConnected()&&(this.ws.send(JSON.stringify({type:"conversation.item.create",item:{type:"function_call_output",call_id:n,output:JSON.stringify(o)}})),await this.triggerResponse())}catch(o){let s=o instanceof Error?o.message:String(o);if(g.error(`[OpenAIRealtimeHandler] Function call failed: ${s}`),this.ws&&this.isConnected())try{this.ws.send(JSON.stringify({type:"conversation.item.create",item:{type:"function_call_output",call_id:n,output:JSON.stringify({error:s})}})),await this.triggerResponse()}catch(i){g.error(`[OpenAIRealtimeHandler] Failed to send error result for ${n}: ${i instanceof Error?i.message:String(i)}`)}}}}});var uJe={};ee(uJe,{GeminiLive:()=>lh});var lh,C5=_(()=>{"use strict";W();Qm();DC();lh=class extends ah{name="gemini-live";apiKey;ws=null;audioChunkIndex=0;pendingFunctionCalls=new Map;constructor(e){super();let t=(e??process.env.GOOGLE_API_KEY??process.env.GOOGLE_AI_API_KEY??process.env.GEMINI_API_KEY??"").trim();this.apiKey=t.length>0?t:null}isConfigured(){return this.apiKey!==null}getSupportedFormats(){return["opus","wav"]}async connect(e){if(!this.apiKey)throw kr.providerNotConfigured("gemini-live");if(this.isConnected())throw kr.sessionAlreadyActive("gemini-live");this.emitStateChange("connecting");try{let{default:t}=await Promise.resolve().then(()=>(S5(),T5)),n=e.model??"gemini-2.5-flash-native-audio-preview-09-2025",o=`wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1alpha.GenerativeService.BidiGenerateContent?key=${this.apiKey}`;this.ws=new t(o);let s=this.ws;await new Promise((a,c)=>{let l=()=>{clearTimeout(d),s.off("error",u),a()},u=p=>{clearTimeout(d),s.off("open",l),c(p)},d=setTimeout(()=>{s.off("open",l),s.off("error",u),s.terminate(),this.ws=null,c(new Error("Connection timeout"))},e.timeout??3e4);s.on("open",l),s.on("error",u)}),this.ws.on("close",()=>{this.emitStateChange("disconnected"),this.session=null}),this.ws.on("error",a=>{this.emitError(a)}),await this.sendSetup(e,n),await this.waitForSetupComplete(),this.ws.on("message",a=>{this.handleMessage(a)});let i=`gemini-${Date.now()}`;return this.session=this.createSession(i,e),this.emitStateChange("connected"),g.info(`[GeminiLiveHandler] Connected to session: ${i}`),this.session}catch(t){this.emitStateChange("error");let n=t instanceof Error?t.message:String(t||"Unknown error");throw kr.connectionFailed(n,"gemini-live",t instanceof Error?t:void 0)}}async disconnect(){if(this.ws){this.emitStateChange("disconnecting");try{this.ws.close(),this.ws=null,this.session=null,this.audioChunkIndex=0,this.pendingFunctionCalls.clear(),this.emitStateChange("disconnected"),g.info("[GeminiLiveHandler] Disconnected")}catch(e){let t=e instanceof Error?e.message:String(e||"Unknown error");throw kr.protocolError(`Disconnect failed: ${t}`,"gemini-live",e instanceof Error?e:void 0)}}}async sendAudio(e){if(!this.ws||!this.isConnected())throw kr.sessionNotActive("gemini-live");let n={realtimeInput:{mediaChunks:[{mimeType:"audio/pcm;rate=16000",data:(Buffer.isBuffer(e)?e:e.data).toString("base64")}]}};this.ws.send(JSON.stringify(n))}async sendText(e){if(!this.ws||!this.isConnected())throw kr.sessionNotActive("gemini-live");let t={clientContent:{turns:[{role:"user",parts:[{text:e}]}],turnComplete:!0}};this.ws.send(JSON.stringify(t))}async triggerResponse(){}async cancelResponse(){if(this.ws&&this.isConnected()){let e={clientContent:{turns:[],turnComplete:!0}};this.ws.send(JSON.stringify(e))}}async sendSetup(e,t){if(!this.ws)return;let n={model:`models/${t}`,generationConfig:{responseModalities:["AUDIO","TEXT"],speechConfig:{voiceConfig:{prebuiltVoiceConfig:{voiceName:e.voice??"Puck"}}}}};e.systemPrompt&&(n.systemInstruction={parts:[{text:e.systemPrompt}]}),e.tools&&e.tools.length>0&&(n.tools=[{functionDeclarations:e.tools.map(s=>({name:s.name,description:s.description,parameters:s.parameters}))}]);let o={setup:n};this.ws.send(JSON.stringify(o))}waitForSetupComplete(){return new Promise((e,t)=>{let n=s=>{try{JSON.parse(s.toString()).setupComplete&&(clearTimeout(o),this.ws?.off("message",n),e())}catch{}},o=setTimeout(()=>{this.ws?.off("message",n),t(new Error("Timeout waiting for setup complete"))},1e4);this.ws?.on("message",n)})}handleMessage(e){try{let t=JSON.parse(e.toString());if(t.serverContent){let n=t.serverContent;if(n.modelTurn?.parts){for(let o of n.modelTurn.parts)if(o.text&&this.emitText(o.text,n.turnComplete??!1),o.inlineData){let s=Buffer.from(o.inlineData.data,"base64");this.emitAudio({data:s,index:this.audioChunkIndex++,isFinal:n.turnComplete??!1,format:this.parseAudioFormat(o.inlineData.mimeType),sampleRate:24e3})}}n.turnComplete&&(this.emitTurnEnd(),this.audioChunkIndex=0),n.interrupted&&(this.emitTurnEnd(),this.audioChunkIndex=0)}if(t.toolCall?.functionCalls)for(let n of t.toolCall.functionCalls)this.pendingFunctionCalls.set(n.id,n.name),this.handleFunctionCall(n.id,n.name,n.args);if(t.toolCallCancellation?.ids)for(let n of t.toolCallCancellation.ids)this.pendingFunctionCalls.delete(n)}catch(t){g.warn(`[GeminiLiveHandler] Failed to parse message: ${t instanceof Error?t.message:String(t)}`)}}parseAudioFormat(e){return e.includes("opus")?"opus":e.includes("wav")||e.includes("pcm")?"wav":e.includes("mp3")||e.includes("mpeg")?"mp3":"opus"}async handleFunctionCall(e,t,n){try{let o=await this.emitFunctionCall(t,n);if(this.ws&&this.isConnected()){let s={toolResponse:{functionResponses:[{id:e,name:t,response:{result:o}}]}};this.ws.send(JSON.stringify(s)),this.pendingFunctionCalls.delete(e)}}catch(o){let s=o instanceof Error?o:new Error(String(o||"Function call failed"));g.error(`[GeminiLiveHandler] Function call failed: ${s.message}`),this.emitError(s),this.pendingFunctionCalls.delete(e)}}}});var pJe={};ee(pJe,{KlingVideoHandler:()=>R5});var tBr,Sfe,rBr,dJe,R5,wfe=_(()=>{"use strict";lm();W();Pn();XD();nx();tBr="https://api.piapi.ai/api/kling/v1",Sfe=3e4,rBr=5e3,dJe=5*6e4,R5=class{maxDurationSeconds=10;supportedAspectRatios=["16:9","9:16","1:1"];supportedResolutions=["720p","1080p"];apiKey;baseUrl;constructor(e){let t=(e??process.env.KLING_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.KLING_BASE_URL??tBr).replace(/\/$/,"")}isConfigured(){return this.apiKey!==null}async generate(e,t,n){if(!this.apiKey)throw new it({code:st.PROVIDER_NOT_CONFIGURED,message:"KLING_API_KEY not configured",category:"configuration",severity:"high",retriable:!1});if(!n.imageUrl)throw new it({code:st.INVALID_INPUT,message:"KlingVideoHandler requires a publicly accessible image URL. Pass options.imageUrl with a URL string pointing to the input image. The PiAPI Kling API does not accept inline base64 image data.",category:"configuration",severity:"high",retriable:!1});let o=Date.now(),s=n.abortSignal,i=await this.submitJob(e,t,n),a=await this.pollUntilComplete(i,s),c=await this.downloadVideo(a),l=Date.now()-o;return g.info(`[KlingVideoHandler] Generated ${c.length} bytes in ${l}ms \u2014 task ${i}`),{data:c,mediaType:"video/mp4",metadata:{duration:n.length??4,dimensions:this.calculateDimensions(n),model:n.model??"kling",provider:"kling",aspectRatio:n.aspectRatio??"16:9",audioEnabled:!1,processingTime:l}}}async submitJob(e,t,n){let o={model:n.model??"kling",task_type:"video_generation",input:{image_url:n.imageUrl,prompt:t,duration:n.length??4,aspect_ratio:n.aspectRatio??"16:9",cfg_scale:.5}},s=await this.fetchWithTimeout(`${this.baseUrl}/image-to-video`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify(o)});if(!s.ok){let c=await s.text(),l=s.status===408||s.status===429||s.status>=500;throw new it({code:st.GENERATION_FAILED,message:`Kling submit failed: ${s.status} \u2014 ${Ms(c,500)}`,category:l?"network":"execution",severity:"high",retriable:l,context:{status:s.status}})}let i=await s.json(),a=i.task_id??i.data?.task_id;if(!a)throw new it({code:st.GENERATION_FAILED,message:"Kling submit response missing task_id",category:"execution",severity:"high",retriable:!1,context:{response:i}});return a}async pollUntilComplete(e,t){let n=Date.now();for(;Date.now()-n<dJe;){if(t?.aborted)throw new it({code:st.GENERATION_FAILED,message:`Kling poll for task ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{taskId:e}});let o=await this.fetchWithTimeout(`${this.baseUrl}/task/${e}`,{method:"GET",headers:{Authorization:`Bearer ${this.apiKey}`}},t);if(!o.ok){let i=await o.text();throw new it({code:st.GENERATION_FAILED,message:`Kling poll failed: ${o.status} \u2014 ${Ms(i,500)}`,category:"network",severity:"medium",retriable:o.status>=500,context:{status:o.status,taskId:e}})}let s=await o.json();if(s.status==="completed"||s.status==="succeeded"){let i=s.video_url??s.output?.video_url;if(!i)throw new it({code:st.GENERATION_FAILED,message:`Kling task ${e} completed but no video URL returned`,category:"execution",severity:"high",retriable:!1,context:{taskId:e,data:s}});return i}if(s.status==="failed")throw new it({code:st.GENERATION_FAILED,message:`Kling task ${e} failed: ${s.error??"unknown"}`,category:"execution",severity:"high",retriable:!1,context:{taskId:e,data:s}});await new Promise((i,a)=>{let c=()=>{clearTimeout(l),a(new it({code:st.GENERATION_FAILED,message:`Kling poll for task ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{taskId:e}}))},l=setTimeout(()=>{t?.removeEventListener("abort",c),i()},rBr);t?.addEventListener("abort",c,{once:!0})})}throw new it({code:st.POLL_TIMEOUT,message:`Kling task ${e} did not complete within ${dJe/1e3}s`,category:"timeout",severity:"medium",retriable:!0,context:{taskId:e}})}async downloadVideo(e){try{return await zx(e,{maxBytes:268435456,label:"Kling video",timeoutMs:Sfe})}catch(t){throw new it({code:st.GENERATION_FAILED,message:`Kling video download rejected: ${t instanceof Error?t.message:String(t)}`,category:"network",severity:"high",retriable:!1,context:{url:e},originalError:t instanceof Error?t:void 0})}}async fetchWithTimeout(e,t,n){let o=new AbortController,s=!1,i=setTimeout(()=>{s=!0,o.abort()},Sfe),a=()=>o.abort();n?.addEventListener("abort",a,{once:!0});try{return await fetch(e,{...t,signal:o.signal})}catch(c){throw c instanceof Error&&c.name==="AbortError"?s?new it({code:st.GENERATION_FAILED,message:`Kling request timed out after ${Sfe/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:c}):new it({code:st.GENERATION_FAILED,message:"Kling request aborted by caller",category:"network",severity:"medium",retriable:!1,originalError:c}):c}finally{n?.removeEventListener("abort",a),clearTimeout(i)}}calculateDimensions(e){let t=e.aspectRatio??"16:9";return(e.resolution??"720p")==="1080p"?t==="1:1"?{width:1080,height:1080}:t==="9:16"?{width:1080,height:1920}:{width:1920,height:1080}:t==="1:1"?{width:720,height:720}:t==="9:16"?{width:720,height:1280}:{width:1280,height:720}}}});var fJe={};ee(fJe,{RunwayVideoHandler:()=>A5});var nBr,Efe,oBr,mJe,A5,_fe=_(()=>{"use strict";lm();W();Pn();XD();nx();nBr="https://api.dev.runwayml.com/v1",Efe=3e4,oBr=5e3,mJe=5*6e4,A5=class{maxDurationSeconds=10;supportedAspectRatios=["16:9","9:16"];supportedResolutions=["720p","1080p"];apiKey;baseUrl;apiVersion;constructor(e){let t=(e??process.env.RUNWAY_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.RUNWAY_BASE_URL??nBr).replace(/\/$/,""),this.apiVersion=process.env.RUNWAY_API_VERSION??"2024-11-06"}isConfigured(){return this.apiKey!==null}async generate(e,t,n){if(!this.apiKey)throw new it({code:st.PROVIDER_NOT_CONFIGURED,message:"RUNWAY_API_KEY not configured",category:"configuration",severity:"high",retriable:!1});if(n.aspectRatio!==void 0&&!this.supportedAspectRatios.includes(n.aspectRatio))throw new it({code:st.INVALID_INPUT,message:`Unsupported aspect ratio for Runway: "${n.aspectRatio}". Supported: ${this.supportedAspectRatios.join(", ")}.`,category:"validation",severity:"medium",retriable:!1,context:{requested:n.aspectRatio,supported:this.supportedAspectRatios}});let o=Date.now(),s=n.abortSignal,i=await this.submitTask(e,t,n),a=await this.pollUntilComplete(i,s),c=await this.downloadVideo(a),l=Date.now()-o;return g.info(`[RunwayVideoHandler] Generated ${c.length} bytes in ${l}ms \u2014 task ${i}`),{data:c,mediaType:"video/mp4",metadata:{duration:n.length??4,dimensions:this.calculateDimensions(n),model:n.model??"gen3a_turbo",provider:"runway",aspectRatio:n.aspectRatio??"16:9",audioEnabled:!1,processingTime:l}}}async submitTask(e,t,n){let o=`data:image/${this.detectImageType(e)};base64,${e.toString("base64")}`,s={model:n.model??"gen3a_turbo",promptImage:o,promptText:t,duration:n.length??4,ratio:n.aspectRatio==="9:16"?"9:16":"16:9",seed:void 0},i=await this.fetchWithTimeout(`${this.baseUrl}/image_to_video`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json","X-Runway-Version":this.apiVersion},body:JSON.stringify(s)});if(!i.ok){let c=await i.text(),l=i.status===408||i.status===429||i.status>=500;throw new it({code:st.GENERATION_FAILED,message:`Runway submit failed: ${i.status} \u2014 ${Ms(c,500)}`,category:l?"network":"execution",severity:"high",retriable:l,context:{status:i.status}})}let a=await i.json();if(!a.id)throw new it({code:st.GENERATION_FAILED,message:"Runway submit response missing id",category:"execution",severity:"high",retriable:!1,context:{response:a}});return a.id}async pollUntilComplete(e,t){let n=Date.now();for(;Date.now()-n<mJe;){if(t?.aborted)throw new it({code:st.GENERATION_FAILED,message:`Runway poll for task ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{taskId:e}});let o=await this.fetchWithTimeout(`${this.baseUrl}/tasks/${e}`,{method:"GET",headers:{Authorization:`Bearer ${this.apiKey}`,"X-Runway-Version":this.apiVersion}},t);if(!o.ok){let i=await o.text();throw new it({code:st.GENERATION_FAILED,message:`Runway poll failed: ${o.status} \u2014 ${Ms(i,500)}`,category:"network",severity:"medium",retriable:o.status>=500})}let s=await o.json();if(s.status==="SUCCEEDED"||s.status==="succeeded"){let i=Array.isArray(s.output)?s.output[0]:s.output;if(typeof i!="string")throw new it({code:st.GENERATION_FAILED,message:`Runway task ${e} completed but no output URL`,category:"execution",severity:"high",retriable:!1,context:{taskId:e,data:s}});return i}if(s.status==="FAILED"||s.status==="failed")throw new it({code:st.GENERATION_FAILED,message:`Runway task ${e} failed: ${s.failure??s.error??"unknown"}`,category:"execution",severity:"high",retriable:!1,context:{taskId:e,data:s}});await new Promise((i,a)=>{let c=()=>{clearTimeout(l),a(new it({code:st.GENERATION_FAILED,message:`Runway poll for task ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{taskId:e}}))},l=setTimeout(()=>{t?.removeEventListener("abort",c),i()},oBr);t?.addEventListener("abort",c,{once:!0})})}throw new it({code:st.POLL_TIMEOUT,message:`Runway task ${e} did not complete within ${mJe/1e3}s`,category:"timeout",severity:"medium",retriable:!0,context:{taskId:e}})}async downloadVideo(e){try{return await zx(e,{maxBytes:268435456,label:"Runway video",timeoutMs:Efe})}catch(t){throw new it({code:st.GENERATION_FAILED,message:`Runway video download rejected: ${t instanceof Error?t.message:String(t)}`,category:"network",severity:"high",retriable:!1,context:{url:e},originalError:t instanceof Error?t:void 0})}}async fetchWithTimeout(e,t,n){let o=new AbortController,s=setTimeout(()=>o.abort(),Efe),i=()=>o.abort();n?.addEventListener("abort",i,{once:!0});try{return await fetch(e,{...t,signal:o.signal})}catch(a){throw a instanceof Error&&a.name==="AbortError"?new it({code:st.GENERATION_FAILED,message:`Runway request to ${e} timed out after ${Efe/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:a}):new it({code:st.GENERATION_FAILED,message:`Runway fetch failed: ${a instanceof Error?a.message:String(a)}`,category:"network",severity:"high",retriable:!0,originalError:a instanceof Error?a:void 0})}finally{n?.removeEventListener("abort",i),clearTimeout(s)}}detectImageType(e){return e.length<4?"jpeg":e[0]===137&&e[1]===80?"png":e[0]===255&&e[1]===216?"jpeg":e.length>=12&&e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70&&e[8]===87&&e[9]===69&&e[10]===66&&e[11]===80?"webp":"jpeg"}calculateDimensions(e){let t=e.aspectRatio??"16:9";return(e.resolution??"720p")==="1080p"?t==="9:16"?{width:1080,height:1920}:{width:1920,height:1080}:t==="9:16"?{width:720,height:1280}:{width:1280,height:720}}}});var gJe={};ee(gJe,{ReplicateVideoHandler:()=>I5});var sBr,I5,kfe=_(()=>{"use strict";lm();W();nx();YD();QD();sBr="atonamy/wan-alpha",I5=class{maxDurationSeconds=10;supportedAspectRatios=["9:16","16:9","1:1"];supportedResolutions=["720p","1080p"];instanceCredentials;constructor(e){this.instanceCredentials=e}isConfigured(){return Od(this.instanceCredentials)!==null}async generate(e,t,n){let o=n.credentials?.replicate,s=Od(o??this.instanceCredentials);if(!s)throw new it({code:st.PROVIDER_NOT_CONFIGURED,message:"REPLICATE_API_TOKEN not configured",category:"configuration",severity:"high",retriable:!1});let i=Date.now(),a=n.model??sBr,l={image:`data:image/${this.detectImageType(e)};base64,${e.toString("base64")}`,prompt:t,num_frames:(n.length??4)*24,fps:24,aspect_ratio:n.aspectRatio,...n.resolution!==void 0?{resolution:n.resolution}:{}},u;try{u=await Wg(s,{model:a,input:l},{abortSignal:n.abortSignal})}catch(f){throw new it({code:st.GENERATION_FAILED,message:`Replicate video generation failed: ${f instanceof Error?f.message:String(f)}`,category:"execution",severity:"high",retriable:!0,context:{model:a,options:n},originalError:f instanceof Error?f:void 0})}let d;try{d=await jx(u)}catch(f){throw new it({code:st.GENERATION_FAILED,message:`Replicate video download failed: ${f instanceof Error?f.message:String(f)}`,category:"network",severity:"medium",retriable:!0,context:{predictionId:u.id},originalError:f instanceof Error?f:void 0})}let p=Date.now()-i;return g.info(`[ReplicateVideoHandler] Generated ${d.length} bytes in ${p}ms \u2014 model ${a}`),{data:d,mediaType:"video/mp4",metadata:{duration:n.length??4,dimensions:this.calculateDimensions(n),model:a,provider:"replicate",aspectRatio:n.aspectRatio??"16:9",audioEnabled:!1,processingTime:p}}}detectImageType(e){return e.length<4?"jpeg":e[0]===137&&e[1]===80?"png":e[0]===255&&e[1]===216?"jpeg":e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70?"webp":"jpeg"}calculateDimensions(e){let t=e.aspectRatio??"16:9";return(e.resolution??"720p")==="1080p"?t==="1:1"?{width:1080,height:1080}:t==="9:16"?{width:1080,height:1920}:{width:1920,height:1080}:t==="1:1"?{width:720,height:720}:t==="9:16"?{width:720,height:1280}:{width:1280,height:720}}}});var yJe={};ee(yJe,{DIDAvatar:()=>uh});var iBr,hJe,aBr,cBr,uh,P5=_(()=>{"use strict";W();Pn();Hg();cx();vg();iBr="https://api.d-id.com",hJe=3e4,aBr=3e3,cBr=5*6e4,uh=class{maxAudioDurationSeconds=60;supportedFormats=["mp4"];apiKey;baseUrl;constructor(e){let t=(e??process.env.DID_API_KEY??process.env.D_ID_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.DID_BASE_URL??process.env.D_ID_BASE_URL??iBr).replace(/\/$/,"")}isConfigured(){return this.apiKey!==null}async generate(e){if(!this.apiKey)throw new $t({code:jt.PROVIDER_NOT_CONFIGURED,message:"DID_API_KEY not configured",category:"configuration",severity:"high",retriable:!1});if(!e.audio&&!e.text)throw new $t({code:jt.AUDIO_REQUIRED,message:"D-ID requires either `audio` (Buffer/path) or `text` (with voice id) to drive the talk",category:"validation",severity:"medium",retriable:!1});let t=Date.now(),n=await this.uploadImage(e.image),o=e.audio?await this.uploadAudio(e.audio):void 0,s=await this.submitTalk(e,n,o),i=await this.pollUntilDone(s,e.timeout??cBr,e.abortSignal);if(!i.result_url)throw new $t({code:jt.GENERATION_FAILED,message:`D-ID talk ${s} completed but no result_url returned`,category:"execution",severity:"high",retriable:!1,context:{talkId:s,completed:i}});try{await Bl(i.result_url)}catch(l){throw new $t({code:jt.GENERATION_FAILED,message:`D-ID result_url rejected as unsafe: ${l instanceof Error?l.message:String(l)}`,category:"validation",severity:"high",retriable:!1,context:{talkId:s,url:i.result_url}})}let a=await this.downloadResult(i.result_url),c=Date.now()-t;return g.info(`[DIDAvatar] Generated ${a.length} bytes in ${c}ms \u2014 talk ${s}`),{buffer:a,format:"mp4",size:a.length,duration:i.duration,provider:"d-id",metadata:{latency:c,provider:"d-id",jobId:s}}}async uploadImage(e){if(typeof e=="string"&&/^https:\/\//.test(e))return e;let t=await this.resolveBuffer(e),n=new FormData;n.append("image",new Blob([new Uint8Array(t)],{type:this.detectImageMime(t)}),"source.png");let o=await this.fetchWithTimeout(`${this.baseUrl}/images`,{method:"POST",headers:{Authorization:`Basic ${this.apiKey}`},body:n}),s=await this.assertOk(o,"image upload");if(!s.url)throw new $t({code:jt.GENERATION_FAILED,message:"D-ID image upload succeeded but returned no URL",category:"execution",severity:"high",retriable:!1});return s.url}async uploadAudio(e){if(typeof e=="string"&&/^https:\/\//.test(e))return e;let t=await this.resolveBuffer(e),n=this.detectAudioType(t),s={mp3:"mp3",mpeg:"mp3",wav:"wav",ogg:"ogg",mp4:"m4a"}[n]??"mp3",i=new FormData;i.append("audio",new Blob([new Uint8Array(t)],{type:`audio/${n}`}),`narration.${s}`);let a=await this.fetchWithTimeout(`${this.baseUrl}/audios`,{method:"POST",headers:{Authorization:`Basic ${this.apiKey}`},body:i}),c=await this.assertOk(a,"audio upload");if(!c.url)throw new $t({code:jt.GENERATION_FAILED,message:"D-ID audio upload succeeded but returned no URL",category:"execution",severity:"high",retriable:!1});return c.url}async submitTalk(e,t,n){let o=n?{type:"audio",audio_url:n}:{type:"text",input:e.text,provider:{type:"microsoft",voice_id:e.voice??"en-US-JennyNeural"}},s={source_url:t,script:o,config:{result_format:"mp4",stitch:!0}},i=await this.fetchWithTimeout(`${this.baseUrl}/talks`,{method:"POST",headers:{Authorization:`Basic ${this.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify(s)}),a=await this.assertOk(i,"talk submit");if(!a.id)throw new $t({code:jt.GENERATION_FAILED,message:"D-ID talk submit returned no id",category:"execution",severity:"high",retriable:!1});return a.id}async pollUntilDone(e,t,n){let o=Date.now();for(;Date.now()-o<t;){if(n?.aborted)throw new $t({code:jt.GENERATION_FAILED,message:`D-ID poll for talk ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{talkId:e}});let s=await this.fetchWithTimeout(`${this.baseUrl}/talks/${e}`,{method:"GET",headers:{Authorization:`Basic ${this.apiKey}`}},n),i=await this.assertOk(s,"talk status");if(i.status==="done")return i;if(i.status==="error"||i.status==="rejected")throw new $t({code:jt.GENERATION_FAILED,message:`D-ID talk ${e} ${i.status}: ${i.error?.description??"unknown"}`,category:"execution",severity:"high",retriable:!1,context:{talkId:e,status:i.status,error:i.error}});await new Promise((a,c)=>{let l=()=>{clearTimeout(u),c(new $t({code:jt.GENERATION_FAILED,message:`D-ID poll for talk ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{talkId:e}}))},u=setTimeout(()=>{n?.removeEventListener("abort",l),a()},aBr);n?.addEventListener("abort",l,{once:!0})})}throw new $t({code:jt.POLL_TIMEOUT,message:`D-ID talk ${e} did not complete within ${Math.round(t/1e3)}s`,category:"timeout",severity:"medium",retriable:!0,context:{talkId:e}})}async downloadResult(e){let t=await this.fetchWithTimeout(e,{method:"GET"});if(!t.ok)throw new $t({code:jt.GENERATION_FAILED,message:`D-ID result download failed: ${t.status}`,category:"network",severity:"medium",retriable:t.status>=500,context:{status:t.status,url:e}});try{return await Ha(t,268435456,"D-ID result")}catch(n){throw new $t({code:jt.GENERATION_FAILED,message:`D-ID result download rejected: ${n instanceof Error?n.message:String(n)}`,category:"network",severity:"high",retriable:!1,context:{url:e},originalError:n instanceof Error?n:void 0})}}async resolveBuffer(e){if(Buffer.isBuffer(e))return e;if(!/^https:\/\//.test(e))throw new $t({code:jt.INVALID_INPUT,message:`Invalid input: expected Buffer or HTTPS URL, got string "${e}". Local file reads are not supported.`,category:"validation",severity:"high",retriable:!1});try{await Bl(e)}catch(o){throw new $t({code:jt.INVALID_INPUT,message:`Unsafe URL rejected: ${o instanceof Error?o.message:String(o)}`,category:"validation",severity:"high",retriable:!1,context:{url:e}})}let t=await this.fetchWithTimeout(e,{method:"GET"});if(!t.ok)throw new $t({code:jt.INVALID_INPUT,message:`Failed to fetch input from ${e}: ${t.status}`,category:"network",severity:"medium",retriable:t.status>=500,context:{url:e,status:t.status}});let n=Math.max(52428800,26214400);try{return await Ha(t,n,"D-ID input")}catch(o){throw new $t({code:jt.INVALID_INPUT,message:`D-ID input download rejected: ${o instanceof Error?o.message:String(o)}`,category:"network",severity:"high",retriable:!1,context:{url:e},originalError:o instanceof Error?o:void 0})}}detectImageMime(e){return e.length<4?"image/jpeg":e[0]===137&&e[1]===80?"image/png":e[0]===255&&e[1]===216?"image/jpeg":e.length>=12&&e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70&&e[8]===87&&e[9]===69&&e[10]===66&&e[11]===80?"image/webp":"image/jpeg"}detectAudioType(e){return e.length<4?"mp3":e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70?"wav":e[0]===79&&e[1]===103&&e[2]===103&&e[3]===83?"ogg":e[0]===73&&e[1]===68&&e[2]===51?"mp3":e[0]===255&&(e[1]&224)===224?"mpeg":e.length>=8&&e[4]===102&&e[5]===116&&e[6]===121&&e[7]===112?"mp4":"mp3"}async fetchWithTimeout(e,t,n){let o=new AbortController,s=setTimeout(()=>o.abort(),hJe),i=()=>o.abort();n?.addEventListener("abort",i,{once:!0});try{return await fetch(e,{...t,signal:o.signal})}catch(a){throw a instanceof Error&&a.name==="AbortError"?n?.aborted?new $t({code:jt.GENERATION_FAILED,message:`D-ID request to ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,originalError:a}):new $t({code:jt.GENERATION_FAILED,message:`D-ID request to ${e} timed out after ${hJe/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:a}):a}finally{n?.removeEventListener("abort",i),clearTimeout(s)}}async assertOk(e,t){if(e.ok)return e.json();let n=await e.text(),o=e.status===408||e.status===429||e.status>=500;throw new $t({code:jt.GENERATION_FAILED,message:`D-ID ${t} failed: ${e.status} \u2014 ${Ms(n,500)}`,category:o?"network":"execution",severity:"high",retriable:o,context:{status:e.status,label:t}})}}});var xJe={};ee(xJe,{ReplicateAvatar:()=>dh});var lBr,dh,M5=_(()=>{"use strict";Hg();W();YD();QD();vg();cx();lBr="douwantech/musetalk:5501004e78525e4bbd9fa20d1e75ad51fddce5a274bec07b9b16d685e34eeaf8",dh=class{maxAudioDurationSeconds=60;supportedFormats=["mp4"];isConfigured(){return Od()!==null}async generate(e){let t=Od();if(!t)throw new $t({code:jt.PROVIDER_NOT_CONFIGURED,message:"REPLICATE_API_TOKEN not configured",category:"configuration",severity:"high",retriable:!1});if(!e.audio)throw new $t({code:jt.AUDIO_REQUIRED,message:"Replicate avatar handler (MuseTalk) requires `audio` (Buffer or path); text-only is not supported. Use D-ID for text-driven talks or chain TTS + Replicate.",category:"validation",severity:"medium",retriable:!1});let n=Date.now(),o=e.model??lBr,s=await this.resolveBuffer(e.image,26214400,"Replicate avatar reference image"),i=await this.resolveBuffer(e.audio,52428800,"Replicate avatar reference audio"),a=`data:image/${this.detectImageType(s)};base64,${s.toString("base64")}`,c=`data:audio/${this.detectAudioType(i)};base64,${i.toString("base64")}`,l;try{l=await Wg(t,{model:o,input:{image:a,audio:c,bbox_shift:0,fps:25}})}catch(p){throw new $t({code:jt.GENERATION_FAILED,message:`Replicate avatar generation failed: ${p instanceof Error?p.message:String(p)}`,category:"execution",severity:"high",retriable:!0,context:{model:o},originalError:p instanceof Error?p:void 0})}let u;try{u=await jx(l,268435456)}catch(p){throw new $t({code:jt.GENERATION_FAILED,message:`Replicate avatar download failed: ${p instanceof Error?p.message:String(p)}`,category:"network",severity:"medium",retriable:!0,context:{predictionId:l.id},originalError:p instanceof Error?p:void 0})}let d=Date.now()-n;return g.info(`[ReplicateAvatar] Generated ${u.length} bytes in ${d}ms \u2014 model ${o}`),{buffer:u,format:"mp4",size:u.length,provider:"replicate",metadata:{latency:d,provider:"replicate",model:o,jobId:l.id}}}async resolveBuffer(e,t=26214400,n="Replicate avatar input"){if(Buffer.isBuffer(e)){if(e.length>t)throw new $t({code:jt.INVALID_INPUT,message:`${n} too large: ${e.length} bytes exceeds ${t}`,category:"validation",severity:"high",retriable:!1});return e}if(!/^https:\/\//.test(e))throw new $t({code:jt.INVALID_INPUT,message:`Invalid input: expected Buffer or HTTPS URL, got string "${e}". Local file reads are not supported.`,category:"validation",severity:"high",retriable:!1});try{await Bl(e)}catch(c){throw new $t({code:jt.INVALID_INPUT,message:`Unsafe URL rejected: ${c instanceof Error?c.message:String(c)}`,category:"validation",severity:"high",retriable:!1,context:{url:e}})}let o=6e4,s=new AbortController,i=setTimeout(()=>s.abort(),o),a;try{a=await fetch(e,{signal:s.signal})}catch(c){throw c instanceof Error&&c.name==="AbortError"?new $t({code:jt.INVALID_INPUT,message:`Replicate avatar input fetch timed out after ${o/1e3}s: ${e}`,category:"network",severity:"medium",retriable:!0}):c}finally{clearTimeout(i)}if(!a.ok)throw new $t({code:jt.INVALID_INPUT,message:`Failed to fetch ${e}: ${a.status}`,category:"network",severity:"medium",retriable:a.status>=500});try{return await Ha(a,t,n)}catch(c){throw new $t({code:jt.INVALID_INPUT,message:`${n} too large: ${c instanceof Error?c.message:String(c)}`,category:"validation",severity:"high",retriable:!1,context:{url:e}})}}detectAudioType(e){return e.length<4?"mp3":e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70?"wav":e[0]===79&&e[1]===103&&e[2]===103&&e[3]===83?"ogg":e[0]===73&&e[1]===68&&e[2]===51?"mp3":e[0]===255&&(e[1]&224)===224?"mpeg":e.length>=8&&e[4]===102&&e[5]===116&&e[6]===121&&e[7]===112?"mp4":"mp3"}detectImageType(e){return e.length<4?"jpeg":e[0]===137&&e[1]===80?"png":e[0]===255&&e[1]===216?"jpeg":e.length>=12&&e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70&&e[8]===87&&e[9]===69&&e[10]===66&&e[11]===80?"webp":"jpeg"}}});var bJe={};ee(bJe,{HeyGenAvatar:()=>ph});var uBr,Cfe,dBr,vJe,ph,O5=_(()=>{"use strict";Hg();W();Pn();XD();uBr="https://api.heygen.com/v2",Cfe=3e4,dBr=5e3,vJe=5*6e4,ph=class{maxAudioDurationSeconds=300;supportedFormats=["mp4"];apiKey;baseUrl;constructor(e){let t=(e??process.env.HEYGEN_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.HEYGEN_BASE_URL??uBr).replace(/\/$/,"")}isConfigured(){return this.apiKey!==null}async generate(e){if(!this.apiKey)throw new $t({code:jt.PROVIDER_NOT_CONFIGURED,message:"HEYGEN_API_KEY not configured",category:"configuration",severity:"high",retriable:!1});if(!e.text&&!e.audio)throw new $t({code:jt.AUDIO_REQUIRED,message:"HeyGen requires either `text` or `audio` to drive the avatar",category:"validation",severity:"medium",retriable:!1});let t=Date.now(),n=e.abortSignal,o=await this.submitVideo(e),s=await this.pollUntilComplete(o,n),i=await this.download(s),a=Date.now()-t;return g.info(`[HeyGenAvatar] Generated ${i.length} bytes in ${a}ms \u2014 video ${o}`),{buffer:i,format:"mp4",size:i.length,provider:"heygen",metadata:{latency:a,provider:"heygen",jobId:o}}}async submitVideo(e){let t=e,n=t.avatarId??(typeof e.image=="string"&&/^[a-zA-Z0-9_-]{20,}$/.test(e.image)?e.image:void 0);if(!n)throw new $t({code:jt.INVALID_INPUT,message:"HeyGen requires `avatarId` (HeyGen avatar catalog id). Pass via options.avatarId or as options.image with a valid HeyGen id.",category:"validation",severity:"medium",retriable:!1});if(e.audio!==void 0){if(Buffer.isBuffer(e.audio))throw new $t({code:jt.INVALID_INPUT,message:"HeyGen requires a publicly accessible audio URL; got a binary Buffer. Upload the audio to a hosted location and pass the HTTPS URL instead.",category:"validation",severity:"medium",retriable:!1});if(typeof e.audio!="string"||!/^https?:\/\//i.test(e.audio))throw new $t({code:jt.INVALID_INPUT,message:"HeyGen requires a publicly accessible HTTPS audio URL; got an unsupported audio input type. Upload the audio to a hosted location and pass the HTTPS URL instead.",category:"validation",severity:"medium",retriable:!1})}let o=e.audio?{type:"audio",audio_url:e.audio}:{type:"text",input_text:e.text,voice_id:e.voice??"1bd001e7e50f421d891986aad5158bc8"},s={video_inputs:[{character:{type:"avatar",avatar_id:n,avatar_style:"normal"},voice:o,background:{type:"color",value:t.backgroundColor??"#FFFFFF"}}],dimension:{width:t.width??1280,height:t.height??720}},i=await this.fetchWithTimeout(`${this.baseUrl}/video/generate`,{method:"POST",headers:{"X-API-Key":this.apiKey,"Content-Type":"application/json"},body:JSON.stringify(s)});if(!i.ok){let l=await i.text(),u=i.status===408||i.status===429||i.status>=500;throw new $t({code:jt.GENERATION_FAILED,message:`HeyGen submit failed: ${i.status} \u2014 ${Ms(l,500)}`,category:u?"network":"execution",severity:"high",retriable:u,context:{status:i.status}})}let a=await i.json(),c=a.data?.video_id;if(!c)throw new $t({code:jt.GENERATION_FAILED,message:"HeyGen submit response missing video_id",category:"execution",severity:"high",retriable:!1,context:{response:a}});return c}async pollUntilComplete(e,t){let n=Date.now(),o=this.baseUrl.replace(/\/v2$/,"/v1");for(;Date.now()-n<vJe;){if(t?.aborted)throw new $t({code:jt.GENERATION_FAILED,message:`HeyGen poll for video ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{videoId:e}});let s=await this.fetchWithTimeout(`${o}/video_status.get?video_id=${e}`,{method:"GET",headers:{"X-API-Key":this.apiKey}},t);if(!s.ok){let a=await s.text();throw new $t({code:jt.GENERATION_FAILED,message:`HeyGen poll failed: ${s.status} \u2014 ${Ms(a,500)}`,category:"network",severity:"medium",retriable:s.status>=500,context:{status:s.status,videoId:e}})}let i=await s.json();if(i.data?.status==="completed"){let a=i.data.video_url;if(!a)throw new $t({code:jt.GENERATION_FAILED,message:`HeyGen video ${e} completed but no URL returned`,category:"execution",severity:"high",retriable:!1,context:{videoId:e,data:i}});return a}if(i.data?.status==="failed")throw new $t({code:jt.GENERATION_FAILED,message:`HeyGen video ${e} failed: ${i.data?.error?.message??"unknown"}`,category:"execution",severity:"high",retriable:!1,context:{videoId:e,data:i}});await new Promise((a,c)=>{let l=()=>{clearTimeout(u),c(new $t({code:jt.GENERATION_FAILED,message:`HeyGen poll for video ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{videoId:e}}))},u=setTimeout(()=>{t?.removeEventListener("abort",l),a()},dBr);t?.addEventListener("abort",l,{once:!0})})}throw new $t({code:jt.POLL_TIMEOUT,message:`HeyGen video ${e} did not complete within ${vJe/1e3}s`,category:"timeout",severity:"medium",retriable:!0,context:{videoId:e}})}async download(e){try{return await zx(e,{maxBytes:268435456,label:"HeyGen video",timeoutMs:Cfe})}catch(t){throw new $t({code:jt.GENERATION_FAILED,message:`HeyGen video download rejected: ${t instanceof Error?t.message:String(t)}`,category:"network",severity:"high",retriable:!1,context:{url:e},originalError:t instanceof Error?t:void 0})}}async fetchWithTimeout(e,t,n){let o=new AbortController,s=!1,i=setTimeout(()=>{s=!0,o.abort()},Cfe),a=()=>o.abort();n?.addEventListener("abort",a,{once:!0});try{return await fetch(e,{...t,signal:o.signal})}catch(c){throw c instanceof Error&&c.name==="AbortError"?n?.aborted?new $t({code:jt.GENERATION_FAILED,message:`HeyGen request to ${e} was aborted by the caller`,category:"network",severity:"medium",retriable:!1,originalError:c}):s?new $t({code:jt.GENERATION_FAILED,message:`HeyGen request to ${e} timed out after ${Cfe/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:c}):new $t({code:jt.GENERATION_FAILED,message:`HeyGen request to ${e} was aborted`,category:"network",severity:"high",retriable:!0,originalError:c}):c}finally{n?.removeEventListener("abort",a),clearTimeout(i)}}}});var TJe={};ee(TJe,{BeatovenMusic:()=>mh});var pBr,LC,mBr,fBr,mh,N5=_(()=>{"use strict";W();of();vg();cx();pBr="https://public-api.beatoven.ai",LC=3e4,mBr=3e3,fBr=5*6e4,mh=class{maxDurationSeconds=300;supportedFormats=["mp3","wav"];supportedGenres=["ambient","cinematic","corporate","lo-fi","rock","pop","electronic","orchestral","folk"];apiKey;baseUrl;constructor(e){let t=(e??process.env.BEATOVEN_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.BEATOVEN_BASE_URL??pBr).replace(/\/$/,"")}isConfigured(){return this.apiKey!==null}async generate(e){if(!this.apiKey)throw new lr({code:Sr.PROVIDER_NOT_CONFIGURED,message:"BEATOVEN_API_KEY not configured",category:"configuration",severity:"high",retriable:!1});let t=Date.now(),n=e.format??"mp3";this.supportedFormats.includes(n)||g.warn(`[BeatovenMusic] Format "${n}" not supported \u2014 falling back to "mp3"`);let o=this.supportedFormats.includes(n)?n:"mp3",i=(await this.submitCompose(e,o)).task_id,a=await this.pollUntilComposed(i,e.timeout??fBr),c=a.meta?.track_url;if(!c)throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven task ${i} completed but no track_url returned`,category:"execution",severity:"high",retriable:!1,context:{taskId:i,taskResult:a}});let l=await this.downloadTrack(c),u=Date.now()-t;return g.info(`[BeatovenMusic] Generated ${l.length} bytes (${o}) in ${u}ms \u2014 task ${i}`),{buffer:l,format:o,size:l.length,duration:a.meta?.duration,provider:"beatoven",metadata:{latency:u,provider:"beatoven",model:"beatoven-default",jobId:i,trackId:a.meta?.track_id,projectId:a.meta?.project_id,requestedFormat:e.format}}}async submitCompose(e,t){let n=(e.duration??60)*1e3,o=[e.prompt];e.genre&&o.push(`Genre: ${e.genre}`),e.mood&&o.push(`Mood: ${e.mood}`),e.tempo!==void 0&&o.push(`Tempo: ${e.tempo} BPM`);let s={prompt:{text:o.join(". ")},duration:n,format:t},i=new AbortController,a=setTimeout(()=>i.abort(),LC),c;try{c=await fetch(`${this.baseUrl}/api/v1/tracks/compose`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify(s),signal:i.signal})}catch(u){throw u instanceof Error&&u.name==="AbortError"?new lr({code:Sr.GENERATION_FAILED,message:`Beatoven compose request timed out after ${LC/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:u}):new lr({code:Sr.GENERATION_FAILED,message:`Beatoven compose network error: ${u instanceof Error?u.message:String(u)}`,category:"network",severity:"high",retriable:!0,originalError:u instanceof Error?u:void 0})}finally{clearTimeout(a)}if(!c.ok){let u=await c.text(),d=c.status===408||c.status===429||c.status>=500;throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven compose failed: ${c.status} \u2014 ${u}`,category:d?"network":"execution",severity:"high",retriable:d,context:{status:c.status,body:u}})}let l=await c.json();if(!l.task_id)throw new lr({code:Sr.GENERATION_FAILED,message:"Beatoven compose response missing task_id",category:"execution",severity:"high",retriable:!1,context:{response:l}});return l}async pollUntilComposed(e,t){let n=Date.now();for(;Date.now()-n<t;){let o=await this.fetchTaskStatus(e);if(o.status==="composed")return o;if(o.status==="failed")throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven task ${e} failed: ${o.message??"unknown"}`,category:"execution",severity:"high",retriable:!1,context:{taskId:e,status:o}});await new Promise(s=>setTimeout(s,mBr))}throw new lr({code:Sr.POLL_TIMEOUT,message:`Beatoven task ${e} did not complete within ${Math.round(t/1e3)}s`,category:"timeout",severity:"medium",retriable:!0,context:{taskId:e,totalTimeoutMs:t}})}async fetchTaskStatus(e){let t=new AbortController,n=setTimeout(()=>t.abort(),LC),o;try{o=await fetch(`${this.baseUrl}/api/v1/tasks/${e}`,{method:"GET",headers:{Authorization:`Bearer ${this.apiKey}`},signal:t.signal})}catch(s){throw s instanceof Error&&s.name==="AbortError"?new lr({code:Sr.GENERATION_FAILED,message:`Beatoven status poll timed out after ${LC/1e3}s`,category:"network",severity:"medium",retriable:!0,originalError:s}):new lr({code:Sr.GENERATION_FAILED,message:`Beatoven status poll network error: ${s instanceof Error?s.message:String(s)}`,category:"network",severity:"medium",retriable:!0,originalError:s instanceof Error?s:void 0,context:{taskId:e}})}finally{clearTimeout(n)}if(!o.ok){let s=await o.text();throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven status request failed: ${o.status} \u2014 ${s}`,category:"execution",severity:"medium",retriable:o.status>=500,context:{status:o.status,taskId:e}})}return await o.json()}async downloadTrack(e){try{await Bl(e)}catch(s){throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven track URL rejected: ${s instanceof Error?s.message:String(s)}`,category:"validation",severity:"high",retriable:!1,context:{url:e}})}let t=new AbortController,n=setTimeout(()=>t.abort(),LC),o;try{o=await fetch(e,{signal:t.signal})}catch(s){throw s instanceof Error&&s.name==="AbortError"?new lr({code:Sr.GENERATION_FAILED,message:`Beatoven track download timed out after ${LC/1e3}s`,category:"network",severity:"medium",retriable:!0,originalError:s}):new lr({code:Sr.GENERATION_FAILED,message:`Beatoven track download network error: ${s instanceof Error?s.message:String(s)}`,category:"network",severity:"medium",retriable:!0,originalError:s instanceof Error?s:void 0,context:{url:e}})}finally{clearTimeout(n)}if(!o.ok)throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven track download failed: ${o.status}`,category:"network",severity:"medium",retriable:o.status>=500,context:{status:o.status,url:e}});try{return await Ha(o,52428800,"Beatoven track")}catch(s){throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven track download exceeded size limit: ${s instanceof Error?s.message:String(s)}`,category:"execution",severity:"high",retriable:!1,context:{url:e}})}}}});var SJe={};ee(SJe,{ReplicateMusic:()=>fh});var gBr,fh,D5=_(()=>{"use strict";of();W();YD();QD();vg();cx();gBr="meta/musicgen:7be0f12c54a8d033a0fbd14418c9af98962da9a86f5ff7811f9b3423a1f0b7d7",fh=class{maxDurationSeconds=30;supportedFormats=["mp3","wav"];supportedGenres=["ambient","classical","electronic","rock","jazz","hip-hop","pop","lo-fi","cinematic","orchestral"];isConfigured(){return Od()!==null}async generate(e){let t=Od();if(!t)throw new lr({code:Sr.PROVIDER_NOT_CONFIGURED,message:"REPLICATE_API_TOKEN not configured",category:"configuration",severity:"high",retriable:!1});let n=Date.now(),o=e.model??gBr,s=e.format??"mp3",i=this.supportedFormats.includes(s)?s:"mp3",a=Math.min(e.duration??8,this.maxDurationSeconds),c={prompt:this.buildPrompt(e),duration:a,output_format:i,model_version:"stereo-large",normalization_strategy:"loudness"};if(e.tempo!==void 0&&(c.bpm=e.tempo),e.referenceAudio){let p=await this.resolveBuffer(e.referenceAudio);c.input_audio=`data:audio/${this.detectAudioType(p)};base64,${p.toString("base64")}`}let l;try{l=await Wg(t,{model:o,input:c})}catch(p){throw new lr({code:Sr.GENERATION_FAILED,message:`Replicate music generation failed: ${p instanceof Error?p.message:String(p)}`,category:"execution",severity:"high",retriable:!0,context:{model:o,duration:a,format:i,hasReferenceAudio:e.referenceAudio!==void 0},originalError:p instanceof Error?p:void 0})}let u;try{u=await jx(l,52428800)}catch(p){throw new lr({code:Sr.GENERATION_FAILED,message:`Replicate music download failed: ${p instanceof Error?p.message:String(p)}`,category:"network",severity:"medium",retriable:!0,context:{predictionId:l.id},originalError:p instanceof Error?p:void 0})}let d=Date.now()-n;return g.info(`[ReplicateMusic] Generated ${u.length} bytes in ${d}ms \u2014 model ${o}`),{buffer:u,format:i,size:u.length,duration:a,provider:"replicate",metadata:{latency:d,provider:"replicate",model:o,jobId:l.id}}}buildPrompt(e){let t=[e.prompt];return e.genre&&t.push(`Genre: ${e.genre}`),e.mood&&t.push(`Mood: ${e.mood}`),e.tempo!==void 0&&t.push(`${e.tempo} BPM`),t.join(". ")}async resolveBuffer(e){if(Buffer.isBuffer(e))return e;if(!/^https:\/\//.test(e))throw new lr({code:Sr.INVALID_INPUT,message:`Invalid input: expected Buffer or HTTPS URL, got string "${e}". Local file reads are not supported.`,category:"validation",severity:"high",retriable:!1});try{await Bl(e)}catch(i){throw new lr({code:Sr.INVALID_INPUT,message:`Unsafe URL rejected: ${i instanceof Error?i.message:String(i)}`,category:"validation",severity:"high",retriable:!1,context:{url:e}})}let t=6e4,n=new AbortController,o=setTimeout(()=>n.abort(),t),s;try{s=await fetch(e,{signal:n.signal})}catch(i){throw i instanceof Error&&i.name==="AbortError"?new lr({code:Sr.GENERATION_FAILED,message:`Replicate music reference-audio fetch timed out after ${t/1e3}s: ${e}`,category:"network",severity:"medium",retriable:!0}):i}finally{clearTimeout(o)}if(!s.ok)throw new lr({code:Sr.GENERATION_FAILED,message:`Failed to fetch reference audio: ${e}: ${s.status}`,category:"network",severity:"medium",retriable:s.status>=500});try{return await Ha(s,52428800,"Replicate reference audio")}catch(i){throw new lr({code:Sr.INVALID_INPUT,message:`Replicate reference audio too large: ${i instanceof Error?i.message:String(i)}`,category:"validation",severity:"high",retriable:!1,context:{url:e}})}}detectAudioType(e){return e.length<4?"mp3":e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70?"wav":e[0]===79&&e[1]===103&&e[2]===103&&e[3]===83?"ogg":e[0]===73&&e[1]===68&&e[2]===51?"mp3":e[0]===255&&(e[1]&224)===224?"mpeg":e.length>=8&&e[4]===102&&e[5]===116&&e[6]===121&&e[7]===112?"mp4":"mp3"}}});var EJe={};ee(EJe,{ElevenLabsMusic:()=>gh});var hBr,wJe,gh,L5=_(()=>{"use strict";of();W();vg();hBr="https://api.elevenlabs.io/v1",wJe=6e4,gh=class{maxDurationSeconds=22;supportedFormats=["mp3"];supportedGenres=["ambient","cinematic","lo-fi","electronic","orchestral","soundscape"];apiKey;baseUrl;constructor(e){let t=(e??process.env.ELEVENLABS_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.ELEVENLABS_BASE_URL??hBr).replace(/\/$/,"")}isConfigured(){return this.apiKey!==null}async generate(e){if(!this.apiKey)throw new lr({code:Sr.PROVIDER_NOT_CONFIGURED,message:"ELEVENLABS_API_KEY not configured (shared with ElevenLabs TTS \u2014 same account, different endpoint)",category:"configuration",severity:"high",retriable:!1});let t=e.prompt?.trim();if(!t)throw new lr({code:Sr.INVALID_INPUT,message:"ElevenLabs Music requires a non-empty prompt",category:"validation",severity:"low",retriable:!1});let n=e.duration??8;if(n<=0||n>this.maxDurationSeconds)throw new lr({code:Sr.INVALID_INPUT,message:`ElevenLabs Music duration must be between 1 and ${this.maxDurationSeconds} seconds; got ${n}`,category:"validation",severity:"low",retriable:!1,context:{requested:n,maximum:this.maxDurationSeconds}});let o=Date.now(),s=n,i={text:this.buildPrompt({...e,prompt:t}),duration_seconds:s,prompt_influence:.3},a=new AbortController,c=setTimeout(()=>a.abort(),wJe),l;try{l=await fetch(`${this.baseUrl}/sound-generation`,{method:"POST",headers:{"xi-api-key":this.apiKey,"Content-Type":"application/json",Accept:"audio/mpeg"},body:JSON.stringify(i),signal:a.signal})}catch(p){throw p instanceof Error&&p.name==="AbortError"?new lr({code:Sr.GENERATION_FAILED,message:`ElevenLabs Music request timed out after ${wJe/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:p}):new lr({code:Sr.GENERATION_FAILED,message:`ElevenLabs Music network error: ${p instanceof Error?p.message:String(p)}`,category:"network",severity:"high",retriable:!0,originalError:p instanceof Error?p:void 0})}finally{clearTimeout(c)}if(!l.ok){let p=await l.text(),f=l.status===408||l.status===429||l.status>=500;throw new lr({code:Sr.GENERATION_FAILED,message:`ElevenLabs Music synthesis failed: ${l.status} \u2014 ${p}`,category:f?"network":"execution",severity:"high",retriable:f,context:{status:l.status}})}let u=await Ha(l,52428800,"ElevenLabs music"),d=Date.now()-o;return g.info(`[ElevenLabsMusic] Generated ${u.length} bytes in ${d}ms`),{buffer:u,format:"mp3",size:u.length,duration:s,provider:"elevenlabs-music",metadata:{latency:d,provider:"elevenlabs-music",model:"elevenlabs-sound-v1"}}}buildPrompt(e){let t=[e.prompt];return e.genre&&t.push(`Genre: ${e.genre}`),e.mood&&t.push(`Mood: ${e.mood}`),e.tempo!==void 0&&t.push(`${e.tempo} BPM`),t.join(". ")}}});var kJe={};ee(kJe,{LyriaMusic:()=>hh});var yBr,xBr,_Je,hh,U5=_(()=>{"use strict";of();W();Pn();yBr="https://generativelanguage.googleapis.com/v1beta",xBr="lyria-3-pro-preview",_Je=12e4,hh=class{maxDurationSeconds=30;supportedFormats=["wav"];supportedGenres=["ambient","classical","electronic","jazz","rock","pop","lo-fi","cinematic","orchestral","world"];apiKey;baseUrl;model;constructor(e){let t=(e??process.env.GOOGLE_AI_LYRIA_API_KEY??process.env.GOOGLE_API_KEY??process.env.GOOGLE_AI_API_KEY??process.env.GEMINI_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.LYRIA_BASE_URL??yBr).replace(/\/$/,""),this.model=process.env.LYRIA_MODEL??xBr}isConfigured(){return this.apiKey!==null}async generate(e){if(!this.apiKey)throw new lr({code:Sr.PROVIDER_NOT_CONFIGURED,message:"Lyria requires one of: GOOGLE_API_KEY, GOOGLE_AI_LYRIA_API_KEY, GOOGLE_AI_API_KEY, or GEMINI_API_KEY",category:"configuration",severity:"high",retriable:!1});let t=Date.now(),n=Math.min(e.duration??16,this.maxDurationSeconds),s={contents:[{parts:[{text:`${this.buildPrompt(e)}. Duration: ${n} seconds`}]}],generationConfig:{responseModalities:["AUDIO"]}},i=new AbortController,a=setTimeout(()=>i.abort(),_Je),c;try{c=await fetch(`${this.baseUrl}/models/${this.model}:generateContent?key=${this.apiKey}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s),signal:i.signal})}catch(f){throw f instanceof Error&&f.name==="AbortError"?new lr({code:Sr.GENERATION_FAILED,message:`Lyria request timed out after ${_Je/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:f}):f}finally{clearTimeout(a)}if(!c.ok){let f=await c.text(),h=c.status===408||c.status===429||c.status>=500;throw new lr({code:Sr.GENERATION_FAILED,message:`Lyria generation failed: ${c.status} \u2014 ${Ms(f)}`,category:h?"network":"execution",severity:"high",retriable:h,context:{status:c.status}})}let l=await c.json(),u=l.candidates?.[0]?.content?.parts?.find(f=>f.inlineData?.mimeType?.startsWith("audio/"));if(!u?.inlineData?.data)throw new lr({code:Sr.GENERATION_FAILED,message:"Lyria response missing audio data",category:"execution",severity:"high",retriable:!1,context:{response:l}});let d=Buffer.from(u.inlineData.data,"base64"),p=Date.now()-t;return g.info(`[LyriaMusic] Generated ${d.length} bytes in ${p}ms \u2014 model ${this.model}`),{buffer:d,format:"wav",size:d.length,duration:n,provider:"lyria",metadata:{latency:p,provider:"lyria",model:this.model,sampleRate:48e3}}}buildPrompt(e){let t=[e.prompt];return e.genre&&t.push(`Genre: ${e.genre}`),e.mood&&t.push(`Mood: ${e.mood}`),e.tempo!==void 0&&t.push(`${e.tempo} BPM`),t.join(". ")}}});var bl,fE=_(()=>{"use strict";Xu();W();bl=class r{static registered=!1;static registrationPromise=null;static options={enableManualMCP:!1};static realtimeRegistration={};static getRegistrationReport(){return{realtime:{...this.realtimeRegistration}}}static async registerAllProviders(){if(!this.registered){if(this.registrationPromise)return this.registrationPromise;this.registrationPromise=this._doRegister();try{await this.registrationPromise}catch(e){throw this.registrationPromise=null,e}}}static async _doRegister(){try{let{ProviderFactory:e}=await Promise.resolve().then(()=>(Xu(),s8));e.registerProvider("google-ai",async(t,n,o,s,i)=>{let a=i,{GoogleAIStudioProvider:c}=await Promise.resolve().then(()=>(v$e(),x$e));return new c(t,o,a)},"gemini-2.5-flash",["googleAiStudio","google","gemini","google-ai","google-ai-studio"]),e.registerProvider("openai",async(t,n,o,s,i)=>{let a=i,{OpenAIProvider:c}=await Promise.resolve().then(()=>(p2e(),d2e));return new c(t,o,void 0,a)},"gpt-4o-mini",["gpt","chatgpt"]),e.registerProvider("anthropic",async(t,n,o,s,i)=>{let a=i,{AnthropicProvider:c}=await Promise.resolve().then(()=>(nje(),rje));return new c(t,o,void 0,a)},"claude-sonnet-4-6",["claude","anthropic"]),e.registerProvider("bedrock",async(t,n,o,s,i)=>{let a=i,{AmazonBedrockProvider:c}=await Promise.resolve().then(()=>(uje(),lje));return new c(t,o,s,a)},void 0,["bedrock","aws"]),e.registerProvider("azure",async(t,n,o,s,i)=>{let a=i,{AzureOpenAIProvider:c}=await Promise.resolve().then(()=>(pje(),dje));return new c(t,o,void 0,a)},process.env.AZURE_MODEL||process.env.AZURE_OPENAI_MODEL||process.env.AZURE_OPENAI_DEPLOYMENT||process.env.AZURE_OPENAI_DEPLOYMENT_ID||"gpt-4o-mini",["azure","azureOpenai"]),e.registerProvider("vertex",async(t,n,o,s,i)=>{let a=i,{GoogleVertexProvider:c}=await Promise.resolve().then(()=>(_je(),Eje));return new c(t,n,o,s,a)},"claude-sonnet-4-6",["vertex","googleVertex"]),e.registerProvider("huggingface",async(t,n,o,s,i)=>{let a=i,{HuggingFaceProvider:c}=await Promise.resolve().then(()=>(Cje(),kje));return new c(t,void 0,a)},process.env.HUGGINGFACE_MODEL||"Qwen/Qwen2.5-72B-Instruct",["huggingface","hf"]),e.registerProvider("mistral",async(t,n,o,s,i)=>{let a=i,{MistralProvider:c}=await Promise.resolve().then(()=>(Aje(),Rje));return new c(t,o,void 0,a)},"mistral-large-latest",["mistral"]),e.registerProvider("ollama",async(t,n,o,s,i)=>{let a=i,{OllamaProvider:c}=await Promise.resolve().then(()=>(Oje(),Mje));return new c(t,o,void 0,a)},process.env.OLLAMA_MODEL||"llama3.2:latest",["ollama","local"]),e.registerProvider("litellm",async(t,n,o,s,i)=>{let a=i,{LiteLLMProvider:c}=await Promise.resolve().then(()=>(Lje(),Dje));return new c(t,o,void 0,a)},process.env.LITELLM_MODEL||"openai/gpt-4o-mini",["litellm"]),e.registerProvider("openai-compatible",async(t,n,o,s,i)=>{let a=i,{OpenAICompatibleProvider:c}=await Promise.resolve().then(()=>($je(),Fje));return new c(t,o,void 0,a)},process.env.OPENAI_COMPATIBLE_MODEL||void 0,["openai-compatible","vllm","compatible"]),e.registerProvider("openrouter",async(t,n,o,s,i)=>{let a=i,{OpenRouterProvider:c}=await Promise.resolve().then(()=>(zje(),Bje));return new c(t,o,void 0,a)},process.env.OPENROUTER_MODEL||"anthropic/claude-sonnet-4.5",["openrouter","or"]),e.registerProvider("sagemaker",async(t,n,o,s,i)=>{let a=i,{AmazonSageMakerProvider:c}=await Promise.resolve().then(()=>(gGe(),fGe));return new c(t,void 0,s,void 0,a)},process.env.SAGEMAKER_MODEL||"sagemaker-model",["sagemaker","aws-sagemaker"]),e.registerProvider("deepseek",async(t,n,o,s,i)=>{let a=i,{DeepSeekProvider:c}=await Promise.resolve().then(()=>(yGe(),hGe));return new c(t,o,void 0,a)},process.env.DEEPSEEK_MODEL||"deepseek-chat",["deepseek","ds"]),e.registerProvider("nvidia-nim",async(t,n,o,s,i)=>{let a=i,{NvidiaNimProvider:c}=await Promise.resolve().then(()=>(EGe(),wGe));return new c(t,o,void 0,a)},process.env.NVIDIA_NIM_MODEL||"meta/llama-3.3-70b-instruct",["nvidia","nim","nvidia-nim"]),e.registerProvider("lm-studio",async(t,n,o,s,i)=>{let a=i,{LMStudioProvider:c}=await Promise.resolve().then(()=>(RGe(),CGe));return new c(t,o,void 0,a)},process.env.LM_STUDIO_MODEL||void 0,["lmstudio","lm-studio","lms"]),e.registerProvider("llamacpp",async(t,n,o,s,i)=>{let a=i,{LlamaCppProvider:c}=await Promise.resolve().then(()=>(IGe(),AGe));return new c(t,o,void 0,a)},process.env.LLAMACPP_MODEL||void 0,["llamacpp","llama.cpp","llama-cpp"]),e.registerProvider("xai",async(t,n,o,s,i)=>{let a=i,{XaiProvider:c}=await Promise.resolve().then(()=>(MGe(),PGe));return new c(t,o,void 0,a)},process.env.XAI_MODEL||"grok-3",["xai","grok"]),e.registerProvider("groq",async(t,n,o,s,i)=>{let a=i,{GroqProvider:c}=await Promise.resolve().then(()=>(NGe(),OGe));return new c(t,o,void 0,a)},process.env.GROQ_MODEL||"llama-3.3-70b-versatile",["groq"]),e.registerProvider("cohere",async(t,n,o,s,i)=>{let a=i,{CohereProvider:c}=await Promise.resolve().then(()=>(UGe(),LGe));return new c(t,o,void 0,a)},process.env.COHERE_MODEL||"command-r-plus-08-2024",["cohere"]),e.registerProvider("together-ai",async(t,n,o,s,i)=>{let a=i,{TogetherAIProvider:c}=await Promise.resolve().then(()=>($Ge(),FGe));return new c(t,o,void 0,a)},process.env.TOGETHER_MODEL||"meta-llama/Llama-3.3-70B-Instruct-Turbo",["together-ai","together"]),e.registerProvider("fireworks",async(t,n,o,s,i)=>{let a=i,{FireworksProvider:c}=await Promise.resolve().then(()=>(zGe(),BGe));return new c(t,o,void 0,a)},process.env.FIREWORKS_MODEL||"accounts/fireworks/models/deepseek-v4-pro",["fireworks"]),e.registerProvider("perplexity",async(t,n,o,s,i)=>{let a=i,{PerplexityProvider:c}=await Promise.resolve().then(()=>(GGe(),jGe));return new c(t,o,void 0,a)},process.env.PERPLEXITY_MODEL||"sonar",["perplexity","pplx"]),e.registerProvider("cloudflare",async(t,n,o,s,i)=>{let a=i,{CloudflareProvider:c}=await Promise.resolve().then(()=>(qGe(),VGe));return new c(t,o,void 0,a)},process.env.CLOUDFLARE_MODEL||"@cf/meta/llama-3.3-70b-instruct-fp8-fast",["cloudflare","workers-ai","cf-ai"]),e.registerProvider("voyage",async(t,n,o,s,i)=>{let a=i,{VoyageProvider:c}=await DKe().then(()=>NKe);return new c(t,o,void 0,a)},process.env.VOYAGE_MODEL||"voyage-3.5",["voyage","voyage-ai"]),e.registerProvider("jina",async(t,n,o,s,i)=>{let a=i,{JinaProvider:c}=await UKe().then(()=>LKe);return new c(t,o,void 0,a)},process.env.JINA_MODEL||"jina-embeddings-v3",["jina","jina-ai"]),e.registerProvider("stability",async(t,n,o,s,i)=>{let a=i,{StabilityProvider:c}=await zKe().then(()=>BKe);return new c(t,o,void 0,a)},process.env.STABILITY_MODEL||"stable-image-ultra",["stability","stability-ai","sd"]),e.registerProvider("ideogram",async(t,n,o,s,i)=>{let a=i,{IdeogramProvider:c}=await qKe().then(()=>VKe);return new c(t,o,void 0,a)},process.env.IDEOGRAM_MODEL||"V_3",["ideogram"]),e.registerProvider("replicate",async(t,n,o,s,i)=>{let a=i,{ReplicateProvider:c}=await KKe().then(()=>WKe);return new c(t,o,void 0,a)},process.env.REPLICATE_MODEL||"meta/meta-llama-3-70b-instruct",["replicate"]),e.registerProvider("recraft",async(t,n,o,s,i)=>{let a=i,{RecraftProvider:c}=await ZKe().then(()=>XKe);return new c(t,o,void 0,a)},process.env.RECRAFT_MODEL||"recraftv3",["recraft"]),g.debug("All AI providers registered successfully");try{let{GoogleTTSHandler:t}=await Promise.resolve().then(()=>(VW(),t6e)),{TTSProcessor:n}=await Promise.resolve().then(()=>(ha(),py)),o=new t;n.registerHandler("google-ai",o),n.registerHandler("vertex",o),g.debug("TTS handlers registered successfully",{providers:["google-ai","vertex"]})}catch(t){g.warn("Failed to register TTS handlers - TTS functionality will be unavailable",{error:t instanceof Error?t.message:String(t)})}try{let{TTSProcessor:t}=await Promise.resolve().then(()=>(ha(),py)),{OpenAITTS:n}=await Promise.resolve().then(()=>(qW(),r6e));t.registerHandler("openai-tts",new n)}catch(t){g.debug(`[ProviderRegistry] openai-tts registration skipped: ${t instanceof Error?t.message:String(t)}`)}try{let{TTSProcessor:t}=await Promise.resolve().then(()=>(ha(),py)),{ElevenLabsTTS:n}=await Promise.resolve().then(()=>(HW(),n6e)),o=new n;t.registerHandler("elevenlabs",o),t.registerHandler("elevenlabs-tts",o)}catch(t){g.debug(`[ProviderRegistry] elevenlabs registration skipped: ${t instanceof Error?t.message:String(t)}`)}try{let{TTSProcessor:t}=await Promise.resolve().then(()=>(ha(),py)),{AzureTTS:n}=await Promise.resolve().then(()=>(WW(),o6e));t.registerHandler("azure-tts",new n)}catch(t){g.debug(`[ProviderRegistry] azure-tts registration skipped: ${t instanceof Error?t.message:String(t)}`)}try{let{TTSProcessor:t}=await Promise.resolve().then(()=>(ha(),py));if(!t.supports("fish-audio")){let{FishAudioTTS:n}=await Promise.resolve().then(()=>(KW(),i6e));t.registerHandler("fish-audio",new n)}}catch(t){g.debug(`[ProviderRegistry] fish-audio registration skipped: ${t instanceof Error?t.message:String(t)}`)}try{let{TTSProcessor:t}=await Promise.resolve().then(()=>(ha(),py));if(!t.supports("cartesia")){let{CartesiaTTS:n}=await Promise.resolve().then(()=>(JW(),c6e));t.registerHandler("cartesia",new n)}}catch(t){g.debug(`[ProviderRegistry] cartesia registration skipped: ${t instanceof Error?t.message:String(t)}`)}try{let{STTProcessor:t}=await Promise.resolve().then(()=>(mC(),sW));try{let{OpenAISTT:n}=await Promise.resolve().then(()=>(YW(),l6e)),o=new n;t.registerHandler("whisper",o),t.registerHandler("openai-stt",o)}catch(n){g.debug(`[ProviderRegistry] whisper/openai-stt registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{DeepgramSTT:n}=await Promise.resolve().then(()=>(w5(),sJe));t.registerHandler("deepgram",new n)}catch(n){g.debug(`[ProviderRegistry] deepgram registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{GoogleSTT:n}=await Promise.resolve().then(()=>(E5(),iJe));t.registerHandler("google-stt",new n)}catch(n){g.debug(`[ProviderRegistry] google-stt registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{AzureSTT:n}=await Promise.resolve().then(()=>(_5(),aJe));t.registerHandler("azure-stt",new n)}catch(n){g.debug(`[ProviderRegistry] azure-stt registration skipped: ${n instanceof Error?n.message:String(n)}`)}g.debug("STT handlers registered successfully",{providers:["whisper","deepgram","google-stt","azure-stt"]})}catch(t){g.warn("Failed to register STT handlers - STT functionality will be unavailable",{error:t instanceof Error?t.message:String(t)})}try{let{RealtimeProcessor:t}=await Promise.resolve().then(()=>(DC(),cJe)),n={};try{let{OpenAIRealtime:s}=await Promise.resolve().then(()=>(k5(),lJe));t.registerHandler("openai-realtime",new s),n["openai-realtime"]="ok"}catch(s){let i=s instanceof Error?s.message:String(s);n["openai-realtime"]=i,g.error(`[ProviderRegistry] openai-realtime registration failed: ${i}`)}try{let{GeminiLive:s}=await Promise.resolve().then(()=>(C5(),uJe));t.registerHandler("gemini-live",new s),n["gemini-live"]="ok"}catch(s){let i=s instanceof Error?s.message:String(s);n["gemini-live"]=i,g.error(`[ProviderRegistry] gemini-live registration failed: ${i}`)}r.realtimeRegistration=n;let o=Object.entries(n).filter(([,s])=>s!=="ok");o.length===0?g.info("[ProviderRegistry] Realtime handlers registered: openai-realtime, gemini-live"):g.warn(`[ProviderRegistry] Realtime handlers partial: ${o.length} skipped`,{outcomes:n})}catch(t){g.warn("Failed to register Realtime handlers - Realtime functionality will be unavailable",{error:t instanceof Error?t.message:String(t)})}try{let{VideoProcessor:t}=await Promise.resolve().then(()=>(nx(),Xoe));try{let{VertexVideoHandler:n}=await Promise.resolve().then(()=>(tT(),_Fe));t.registerHandler("vertex",new n)}catch(n){g.debug(`[ProviderRegistry] vertex video registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{KlingVideoHandler:n}=await Promise.resolve().then(()=>(wfe(),pJe));t.registerHandler("kling",new n)}catch(n){g.debug(`[ProviderRegistry] kling video registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{RunwayVideoHandler:n}=await Promise.resolve().then(()=>(_fe(),fJe));t.registerHandler("runway",new n)}catch(n){g.debug(`[ProviderRegistry] runway video registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{ReplicateVideoHandler:n}=await Promise.resolve().then(()=>(kfe(),gJe));t.registerHandler("replicate",new n)}catch(n){g.debug(`[ProviderRegistry] replicate video registration skipped: ${n instanceof Error?n.message:String(n)}`)}g.debug("Video handlers registered")}catch(t){g.warn(`[ProviderRegistry] video registration block failed: ${t instanceof Error?t.message:String(t)}`)}try{let{AvatarProcessor:t}=await Promise.resolve().then(()=>(Hg(),dme));try{let{DIDAvatar:n}=await Promise.resolve().then(()=>(P5(),yJe));t.registerHandler("d-id",new n)}catch(n){g.debug(`[ProviderRegistry] d-id avatar registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{ReplicateAvatar:n}=await Promise.resolve().then(()=>(M5(),xJe)),o=new n;t.registerHandler("replicate",o),t.registerHandler("musetalk",o)}catch(n){g.debug(`[ProviderRegistry] replicate avatar registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{HeyGenAvatar:n}=await Promise.resolve().then(()=>(O5(),bJe));t.registerHandler("heygen",new n)}catch(n){g.debug(`[ProviderRegistry] heygen avatar registration skipped: ${n instanceof Error?n.message:String(n)}`)}g.debug("Avatar handlers registered")}catch(t){g.warn("Failed to register Avatar handlers - Avatar functionality will be unavailable",{error:t instanceof Error?t.message:String(t)})}try{let{MusicProcessor:t}=await Promise.resolve().then(()=>(of(),ume));try{let{BeatovenMusic:n}=await Promise.resolve().then(()=>(N5(),TJe));t.registerHandler("beatoven",new n)}catch(n){g.debug(`[ProviderRegistry] beatoven music registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{ReplicateMusic:n}=await Promise.resolve().then(()=>(D5(),SJe)),o=new n;t.registerHandler("replicate",o),t.registerHandler("musicgen",o)}catch(n){g.debug(`[ProviderRegistry] replicate music registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{ElevenLabsMusic:n}=await Promise.resolve().then(()=>(L5(),EJe)),o=new n;t.registerHandler("elevenlabs-music",o),t.registerHandler("elevenlabs-sound",o)}catch(n){g.debug(`[ProviderRegistry] elevenlabs-music registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{LyriaMusic:n}=await Promise.resolve().then(()=>(U5(),kJe));t.registerHandler("lyria",new n)}catch(n){g.debug(`[ProviderRegistry] lyria music registration skipped: ${n instanceof Error?n.message:String(n)}`)}g.debug("Music handlers registered")}catch(t){g.warn("Failed to register Music handlers - Music functionality will be unavailable",{error:t instanceof Error?t.message:String(t)})}this.registered=!0}catch(e){throw g.error("Failed to register providers:",e),e}}static isRegistered(){return this.registered}static clearRegistrations(){On.clearRegistrations(),this.registered=!1,this.registrationPromise=null,r.realtimeRegistration={}}static setOptions(e){this.options={...this.options,...e},g.debug("Provider registry options updated:",this.options)}static getOptions(){return{...this.options}}}});var bW={};ee(bW,{AIProviderFactory:()=>dn});var vBr,bBr,dn,gu=_(()=>{"use strict";Dr();Vr();Xu();fE();zg();W();mj();It();vBr="aiProviderFactory",bBr=_e.factory,dn=class{static normalizeProviderName(e){let t=On.normalizeProviderName(e);return t||e.toLowerCase()}static async initializeDynamicProviderWithTimeout(){let e="AIProviderFactory.initializeDynamicProviderWithTimeout";try{await Ke(qP.initialize(),1e4,me.toolTimeout("dynamic-provider-init",1e4)),g.debug(`[${e}] Dynamic model provider initialized successfully`)}catch(n){let o=n instanceof Error?n.message:String(n);g.warn(`[${e}] Dynamic model provider initialization failed`,{error:o,fallback:"Using static model defaults"})}}static resolveModelFromEnvironment(e,t,n){if(t&&t!=="default")return g.debug(`[${n}] Skipping environment variable check - explicit model provided: ${t}`),t;g.debug(`[${n}] Checking environment variables for provider: ${e}`);let o=e.toLowerCase(),i=[{match:["bedrock"],label:"Bedrock",vars:["BEDROCK_MODEL","BEDROCK_MODEL_ID"]},{match:["vertex"],label:"Vertex",vars:["VERTEX_MODEL"]},{match:["azure"],label:"Azure",vars:["AZURE_OPENAI_MODEL","AZURE_OPENAI_DEPLOYMENT","AZURE_OPENAI_DEPLOYMENT_ID"]},{match:["openai","gpt","chatgpt","openai-compat"],label:"OpenAI",vars:["OPENAI_MODEL"]},{match:["anthropic","claude","anthropic-claude"],label:"Anthropic",vars:["ANTHROPIC_MODEL"]},{match:["google","gemini"],label:"Google AI",vars:["GOOGLE_AI_MODEL"]},{match:["mistral"],label:"Mistral",vars:["MISTRAL_MODEL"]},{match:["ollama"],label:"Ollama",vars:["OLLAMA_MODEL"]},{match:["litellm"],label:"LiteLLM",vars:["LITELLM_MODEL"]}].find(l=>l.match.some(u=>o.includes(u)));if(!i)return g.debug(`[${n}] Provider ${e} - no environment variable check implemented`),t;let a=i.vars.find(l=>process.env[l]),c=a?process.env[a]:void 0;return c?(g.debug(`[${n}] Environment variable found for ${i.label}`,{envVariable:a,resolvedModel:c}),c):(g.debug(`[${n}] No ${i.label} environment variables found (${i.vars.join(", ")})`),t)}static async resolveDynamicModelName(e,t,n,o){if(n&&n!=="default"||t&&t!=="default")return g.debug(`[${o}] Skipping dynamic model resolution`,{resolvedModelName:n||"none",reason:"Model already resolved from environment variables or explicit parameter"}),n;g.debug(`[${o}] Attempting dynamic model resolution`,{currentResolvedModel:n||"none",reason:"No environment variable found and no explicit model provided"});try{let s=this.normalizeProviderName(e);qP.needsRefresh()&&(g.debug(`[${o}] Dynamic model provider needs refresh - initializing`),await this.initializeDynamicProviderWithTimeout());let i=qP.resolveModel(s,t||void 0);return i?(g.debug(`[${o}] Resolved dynamic model`,{provider:s,requestedModel:t||"default",resolvedModel:i.id,displayName:i.displayName,pricing:i.pricing.input}),i.id):(g.debug(`[${o}] Dynamic model resolution returned null`,{provider:s,requestedModel:t||"default"}),n)}catch(s){return g.debug(`[${o}] Dynamic model resolution failed, using static fallback`,{error:s instanceof Error?s.message:String(s)}),n}}static async createResolvedProvider(e,t,n,o,s,i){await Ke(bl.registerAllProviders(),3e4,me.toolTimeout("provider-registration",3e4));let a=this.normalizeProviderName(e),c=t==="default"||t===null?void 0:t;g.debug(`[${s}] Final provider configuration`,{originalProviderName:e,normalizedProviderName:a,resolvedModelName:t||"not resolved",finalModelName:c||"using provider default"});let l=await Ke(On.createProvider(a,c,n,o,i),3e4,me.toolTimeout(`provider-creation:${a}`,3e4));return{normalizedName:a,finalModelName:c,provider:l}}static async createProvider(e,t,n=!0,o,s,i){let a="AIProviderFactory.createProvider";return bBr.startActiveSpan("neurolink.factory.createProvider",{kind:Cr.INTERNAL,attributes:{"provider.name":e,"model.name":t||"default","mcp.enabled":n}},async c=>{g.debug(`[${a}] Provider creation started`,{providerName:e,modelName:t||"default",enableMCP:n,environmentVariables:{BEDROCK_MODEL:process.env.BEDROCK_MODEL||"not set",BEDROCK_MODEL_ID:process.env.BEDROCK_MODEL_ID||"not set",VERTEX_MODEL:process.env.VERTEX_MODEL||"not set",OPENAI_MODEL:process.env.OPENAI_MODEL||"not set"}});try{let l=this.resolveModelFromEnvironment(e,t,a);l=await this.resolveDynamicModelName(e,t,l,a);let{normalizedName:u,finalModelName:d,provider:p}=await this.createResolvedProvider(e,l,o,s,a,i);return g.debug(`[AIProviderFactory] Provider creation completed { providerName: '${u}', modelName: '${d}' }`),g.debug(`[AIProviderFactory] Resolved model: ${d}`),g.debug(vBr,"Pure factory pattern provider created",{providerName:u,modelName:d,factoryUsed:!0}),c.setAttribute("provider.resolved_name",u),d&&c.setAttribute("model.resolved_name",d),g.debug(`[${a}] Provider creation succeeded`,{providerName:e,modelName:d||"default",providerType:p.constructor.name,mcpEnabled:n}),c.setStatus({code:Ie.OK}),p}catch(l){let u=l instanceof Error?l.message:String(l);throw c.setStatus({code:Ie.ERROR,message:u}),c.recordException(l instanceof Error?l:new Error(String(l))),g.debug(`[${a}] Provider creation failed`,{providerName:e,modelName:t||"default",error:u}),l}finally{c.end()}})}static async createProviderWithModel(e,t){let n="AIProviderFactory.createProviderWithModel";g.debug(`[${n}] Provider model creation started`,{provider:e,model:t});try{let o=await this.createProvider(e,t);return g.debug(`[${n}] Provider model creation succeeded`,{provider:e,model:t,providerType:o.constructor.name}),o}catch(o){let s=o instanceof Error?o.message:String(o);throw g.debug(`[${n}] Provider model creation failed`,{provider:e,model:t,error:s}),o}}static async createBestProvider(e,t,n=!0,o){let s="AIProviderFactory.createBestProvider";try{let i=await Nx(e);return g.debug(`[${s}] Best provider selected`,{requestedProvider:e||"auto",selectedProvider:i,modelName:t||"default",enableMCP:n}),await this.createProvider(i,t,n,o)}catch(i){let a=i instanceof Error?i.message:String(i);throw g.debug(`[${s}] Best provider selection failed`,{requestedProvider:e||"auto",error:a}),i}}static async createProviderWithFallback(e,t,n,o=!0){let s="AIProviderFactory.createProviderWithFallback";g.debug(`[${s}] Fallback provider setup started`,{primaryProvider:e,fallbackProvider:t,modelName:n||"default",enableMCP:o});try{let i=await this.createProvider(e,n,o),a=await this.createProvider(t,n,o);return g.debug(`[${s}] Fallback provider setup succeeded`,{primaryProvider:e,fallbackProvider:t,modelName:n||"default",enableMCP:o}),{primary:i,fallback:a}}catch(i){let a=i instanceof Error?i.message:String(i);throw g.debug(`[${s}] Fallback provider setup failed`,{primaryProvider:e,fallbackProvider:t,error:a}),i}}}});function df(r,e,t,n){if(r instanceof zn)return r;let o=r instanceof Error?r.message:String(r),s=r instanceof Error?r:void 0;return new uL(o,s,e,t,n)}var zn,eK,tK,rK,Ld,xh,pS,FC,uf,nK,uL,oK,sK,qu,$C,qx,Ud,Fd,iK,dL,pL,mL,aK,YJe,Hu=_(()=>{"use strict";Nt();zn=class r extends Error{code;category;severity;retryable;retryAfterMs;requestId;path;method;details;cause;constructor(e,t,n={}){super(e),this.name="ServerAdapterError",this.code=t,this.category=n.category??an.EXECUTION,this.severity=n.severity??co.MEDIUM,this.retryable=n.retryable??!1,this.retryAfterMs=n.retryAfterMs,this.requestId=n.requestId,this.path=n.path,this.method=n.method,this.details=n.details,this.cause=n.cause,Error.captureStackTrace&&Error.captureStackTrace(this,r)}toJSON(){return{error:{code:this.code,message:this.message,category:this.category,requestId:this.requestId,details:this.details,retryAfter:this.retryAfterMs?Math.ceil(this.retryAfterMs/1e3):void 0}}}getHttpStatus(){switch(this.code){case en.VALIDATION_ERROR:case en.SCHEMA_ERROR:case en.INVALID_CONFIG:case en.INVALID_ROUTE:return 400;case en.AUTH_REQUIRED:case en.AUTH_INVALID:return 401;case en.FORBIDDEN:return 403;case en.ROUTE_NOT_FOUND:return 404;case en.RATE_LIMIT_EXCEEDED:return 429;case en.TIMEOUT:return 408;case en.STREAM_ABORTED:return 499;default:return 500}}},eK=class extends zn{constructor(e,t,n){super(e,en.INVALID_CONFIG,{category:an.CONFIG,severity:co.HIGH,retryable:!1,details:t,cause:n}),this.name="ConfigurationError"}},tK=class extends zn{constructor(e,t,n){super(`Route conflict: ${t} ${e} conflicts with existing route${n?`: ${n}`:""}`,en.ROUTE_CONFLICT,{category:an.CONFIG,severity:co.HIGH,retryable:!1,path:e,method:t,details:{existingRoute:n}}),this.name="RouteConflictError"}},rK=class extends zn{constructor(e,t,n){super(`Route not found: ${t} ${e}`,en.ROUTE_NOT_FOUND,{category:an.VALIDATION,severity:co.LOW,retryable:!1,path:e,method:t,requestId:n}),this.name="RouteNotFoundError"}},Ld=class extends zn{errors;constructor(e,t){super(`Validation failed: ${e.map(n=>n.message).join(", ")}`,en.VALIDATION_ERROR,{category:an.VALIDATION,severity:co.LOW,retryable:!1,requestId:t,details:{errors:e}}),this.name="ValidationError",this.errors=e}},xh=class extends zn{constructor(e="Authentication required",t){super(e,en.AUTH_REQUIRED,{category:an.AUTHENTICATION,severity:co.MEDIUM,retryable:!1,requestId:t}),this.name="AuthenticationError"}},pS=class extends zn{constructor(e="Invalid authentication credentials",t){super(e,en.AUTH_INVALID,{category:an.AUTHENTICATION,severity:co.MEDIUM,retryable:!1,requestId:t}),this.name="InvalidAuthenticationError"}},FC=class extends zn{constructor(e="Access forbidden",t,n){super(e,en.FORBIDDEN,{category:an.AUTHORIZATION,severity:co.MEDIUM,retryable:!1,requestId:t,details:{requiredPermissions:n}}),this.name="AuthorizationError"}},uf=class extends zn{constructor(e,t,n){super(t??"Too many requests, please try again later",en.RATE_LIMIT_EXCEEDED,{category:an.RATE_LIMIT,severity:co.MEDIUM,retryable:!0,retryAfterMs:e,requestId:n}),this.name="RateLimitError"}},nK=class extends zn{constructor(e,t,n){super(`Operation timed out after ${e}ms${t?`: ${t}`:""}`,en.TIMEOUT,{category:an.EXECUTION,severity:co.MEDIUM,retryable:!0,requestId:n,details:{timeoutMs:e,operation:t}}),this.name="TimeoutError"}},uL=class extends zn{constructor(e,t,n,o,s){super(e,en.HANDLER_ERROR,{category:an.EXECUTION,severity:co.HIGH,retryable:!1,cause:t,requestId:n,path:o,method:s}),this.name="HandlerError"}},oK=class extends zn{constructor(e,t,n){super(e,en.STREAM_ERROR,{category:an.STREAMING,severity:co.MEDIUM,retryable:!1,cause:t,requestId:n}),this.name="StreamingError"}},sK=class extends zn{constructor(e,t){super(`Stream aborted${e?`: ${e}`:""}`,en.STREAM_ABORTED,{category:an.STREAMING,severity:co.LOW,retryable:!1,requestId:t,details:{reason:e}}),this.name="StreamAbortedError"}},qu=class extends zn{constructor(e,t,n){super(e,en.WEBSOCKET_ERROR,{category:an.WEBSOCKET,severity:co.MEDIUM,retryable:!0,cause:t,details:{connectionId:n}}),this.name="WebSocketError"}},$C=class extends zn{constructor(e="WebSocket connection failed",t){super(e,en.WEBSOCKET_CONNECTION_FAILED,{category:an.WEBSOCKET,severity:co.HIGH,retryable:!0,cause:t}),this.name="WebSocketConnectionError"}},qx=class extends zn{constructor(e,t,n,o){super(e,en.START_FAILED,{category:an.CONFIG,severity:co.CRITICAL,retryable:!0,cause:t,details:{port:n,host:o}}),this.name="ServerStartError"}},Ud=class extends zn{constructor(e,t){super(e,en.STOP_FAILED,{category:an.EXECUTION,severity:co.HIGH,retryable:!1,cause:t}),this.name="ServerStopError"}},Fd=class extends zn{constructor(e,t){super(`Server is already running${e&&t?` on ${t}:${e}`:""}`,en.ALREADY_RUNNING,{category:an.CONFIG,severity:co.LOW,retryable:!1,details:{port:e,host:t}}),this.name="AlreadyRunningError"}},iK=class extends zn{constructor(){super("Server is not running",en.NOT_RUNNING,{category:an.CONFIG,severity:co.LOW,retryable:!1}),this.name="NotRunningError"}},dL=class extends zn{timeoutMs;remainingConnections;constructor(e,t){super(`Shutdown timed out after ${e}ms with ${t} active connection(s)`,en.STOP_FAILED,{category:an.EXECUTION,severity:co.HIGH,retryable:!1,details:{timeoutMs:e,remainingConnections:t}}),this.name="ShutdownTimeoutError",this.timeoutMs=e,this.remainingConnections=t}},pL=class extends zn{timeoutMs;remainingConnections;constructor(e,t){super(`Connection drain timed out after ${e}ms with ${t} active connection(s)`,en.STOP_FAILED,{category:an.EXECUTION,severity:co.MEDIUM,retryable:!1,details:{timeoutMs:e,remainingConnections:t}}),this.name="DrainTimeoutError",this.timeoutMs=e,this.remainingConnections=t}},mL=class extends zn{currentState;expectedStates;operation;constructor(e,t,n){super(`Cannot ${e}: server is in '${t}' state, expected one of [${n.join(", ")}]`,en.STOP_FAILED,{category:an.CONFIG,severity:co.MEDIUM,retryable:!1,details:{operation:e,currentState:t,expectedStates:n}}),this.name="InvalidLifecycleStateError",this.currentState=t,this.expectedStates=n,this.operation=e}},aK=class extends zn{constructor(e,t,n){super(`Missing dependency '${e}' for ${t} adapter. ${n?`Install with: ${n}`:""}`,en.MISSING_DEPENDENCY,{category:an.CONFIG,severity:co.CRITICAL,retryable:!1,details:{dependency:e,framework:t,installCommand:n}}),this.name="MissingDependencyError"}},YJe={[an.CONFIG]:{strategy:"fail",maxRetries:0,baseDelayMs:0},[an.VALIDATION]:{strategy:"fail",maxRetries:0,baseDelayMs:0},[an.EXECUTION]:{strategy:"retry",maxRetries:3,baseDelayMs:1e3},[an.EXTERNAL]:{strategy:"exponentialBackoff",maxRetries:5,baseDelayMs:1e3},[an.RATE_LIMIT]:{strategy:"exponentialBackoff",maxRetries:3,baseDelayMs:5e3},[an.AUTHENTICATION]:{strategy:"fail",maxRetries:0,baseDelayMs:0},[an.AUTHORIZATION]:{strategy:"fail",maxRetries:0,baseDelayMs:0},[an.STREAMING]:{strategy:"retry",maxRetries:2,baseDelayMs:500},[an.WEBSOCKET]:{strategy:"exponentialBackoff",maxRetries:5,baseDelayMs:1e3}}});var $d,BC=_(()=>{"use strict";lo();yo();It();W();Hu();$d=class extends dr{config;redactionConfig;neurolink;toolRegistry;externalServerManager;routes=new Map;middlewares=[];isRunning=!1;startTime;lifecycleState="uninitialized";activeConnections=new Map;shutdownConfig;constructor(e,t={}){super(),this.neurolink=e,this.toolRegistry=e.getToolRegistry(),this.externalServerManager=e.getExternalServerManager(),this.redactionConfig=t.redaction,this.shutdownConfig={gracefulShutdownTimeoutMs:t.shutdown?.gracefulShutdownTimeoutMs??3e4,drainTimeoutMs:t.shutdown?.drainTimeoutMs??15e3,forceClose:t.shutdown?.forceClose??!0},this.config={port:t.port??3e3,host:t.host??"0.0.0.0",basePath:t.basePath??"/api",cors:{enabled:t.cors?.enabled??!0,origins:t.cors?.origins??["*"],methods:t.cors?.methods??["GET","POST","PUT","DELETE","PATCH","OPTIONS"],headers:t.cors?.headers??["Content-Type","Authorization","X-Request-ID"],credentials:t.cors?.credentials??!1,maxAge:t.cors?.maxAge??86400},rateLimit:{enabled:t.rateLimit?.enabled??!0,windowMs:t.rateLimit?.windowMs??900*1e3,maxRequests:t.rateLimit?.maxRequests??100,message:t.rateLimit?.message??"Too many requests, please try again later",skipPaths:t.rateLimit?.skipPaths,keyGenerator:t.rateLimit?.keyGenerator},bodyParser:{enabled:t.bodyParser?.enabled??!0,maxSize:t.bodyParser?.maxSize??"10mb",jsonLimit:t.bodyParser?.jsonLimit??"10mb",urlEncoded:t.bodyParser?.urlEncoded??!0},logging:{enabled:t.logging?.enabled??!0,level:t.logging?.level??"info",includeBody:t.logging?.includeBody??!1,includeResponse:t.logging?.includeResponse??!1},timeout:t.timeout??3e4,enableMetrics:t.enableMetrics??!0,enableSwagger:t.enableSwagger??!1,disableBuiltInHealth:t.disableBuiltInHealth??!1,shutdown:this.shutdownConfig}}async initialize(){if(this.lifecycleState!=="uninitialized"&&this.lifecycleState!=="stopped")throw new mL("initialize",this.lifecycleState,["uninitialized","stopped"]);this.lifecycleState="initializing",g.info("[ServerAdapter] Initializing server adapter",{port:this.config.port,host:this.config.host,basePath:this.config.basePath});let e=xe.createSpan("server.request","server.initialize",{"server.operation":"initialize","server.port":this.config.port,"server.host":this.config.host}),t=Date.now();try{this.initializeFramework(),this.registerBuiltInMiddleware(),await this.registerBuiltInRoutes(),this.lifecycleState="initialized",this.emit("initialized",{config:this.config,routeCount:this.routes.size,middlewareCount:this.middlewares.length}),g.info("[ServerAdapter] Server adapter initialized",{routes:this.routes.size,middlewares:this.middlewares.length}),e.durationMs=Date.now()-t;let n=xe.endSpan(e,1);Ze().recordSpan(n)}catch(n){this.lifecycleState="error",e.durationMs=Date.now()-t;let o=xe.endSpan(e,2);throw o.statusMessage=n instanceof Error?n.message:String(n),Ze().recordSpan(o),n}}registerRoute(e){let t=`${e.method.toUpperCase()}:${e.path}`;this.routes.has(t)&&g.warn(`[ServerAdapter] Route ${t} already exists, replacing`),this.routes.set(t,e),this.registerFrameworkRoute(e),g.debug(`[ServerAdapter] Registered route: ${t}`,{description:e.description,streaming:e.streaming?.enabled,auth:e.auth})}registerRouteGroup(e){if(e.middleware)for(let t of e.middleware)this.registerMiddleware({...t,paths:t.paths??[e.prefix]});for(let t of e.routes){let n=!t.path.startsWith(e.prefix),o=this.normalizePath(n?`${e.prefix}${t.path}`:t.path),s={...t,path:o};this.registerRoute(s)}g.debug(`[ServerAdapter] Registered route group: ${e.prefix}`,{routes:e.routes.length,middleware:e.middleware?.length??0})}normalizePath(e){return"/"+e.split("/").filter(Boolean).join("/")}registerMiddleware(e){this.middlewares.push(e),this.registerFrameworkMiddleware(e),g.debug(`[ServerAdapter] Registered middleware: ${e.name}`,{order:e.order,paths:e.paths})}createContext(e){return{requestId:e.requestId,method:e.method,path:e.path,headers:e.headers,query:e.query??{},params:e.params??{},body:e.body,neurolink:this.neurolink,toolRegistry:this.toolRegistry,externalServerManager:this.externalServerManager,timestamp:Date.now(),metadata:{},redaction:this.redactionConfig}}registerBuiltInMiddleware(){this.registerMiddleware({name:"requestId",order:0,handler:async(e,t)=>(e.requestId=e.requestId||this.generateRequestId(),t())}),this.config.logging.enabled&&this.registerMiddleware({name:"logging",order:1,handler:async(e,t)=>{let n=Date.now();g.info(`[ServerAdapter] ${e.method} ${e.path}`,{requestId:e.requestId});let o=await t();return g.info(`[ServerAdapter] ${e.method} ${e.path} completed`,{requestId:e.requestId,duration:Date.now()-n}),o}})}async registerBuiltInRoutes(){this.config.disableBuiltInHealth||(this.registerRoute({method:"GET",path:`${this.config.basePath}/health`,handler:async()=>({status:"ok",timestamp:new Date().toISOString(),uptime:this.startTime?Date.now()-this.startTime.getTime():0,version:process.env.npm_package_version||"unknown"}),description:"Health check endpoint",tags:["system"]}),this.registerRoute({method:"GET",path:`${this.config.basePath}/ready`,handler:async e=>{let t=e.toolRegistry,n=this.config.timeout||5e3,o,s;try{o=await Ke(t.listTools(),n,new Error(`toolRegistry.listTools timed out after ${n}ms`)),s=o.length>0}catch(i){g.warn("[ServerAdapter] Tool registry check timed out",{timeout:n,error:i instanceof Error?i.message:String(i)}),s=!1}return{ready:!0,timestamp:new Date().toISOString(),services:{neurolink:!0,tools:s,externalServers:!!e.externalServerManager}}},description:"Readiness check endpoint",tags:["system"]})),this.config.enableMetrics&&this.registerRoute({method:"GET",path:`${this.config.basePath}/metrics`,handler:async()=>{let e=this.getStatus();return{server:{running:e.running,uptime:e.uptime,routes:e.routes,middlewares:e.middlewares},process:{memoryUsage:process.memoryUsage(),cpuUsage:process.cpuUsage(),pid:process.pid},timestamp:new Date().toISOString()}},description:"Server metrics endpoint",tags:["system"]})}generateRequestId(){return`req-${Date.now()}-${Math.random().toString(36).substring(2,11)}`}getLifecycleState(){return this.lifecycleState}trackConnection(e,t,n){this.activeConnections.set(e,{id:e,createdAt:Date.now(),socket:t,requestId:n,isActive:!0}),g.debug("[ServerAdapter] Connection tracked",{connectionId:e,activeConnections:this.activeConnections.size})}untrackConnection(e){this.activeConnections.delete(e)&&g.debug("[ServerAdapter] Connection untracked",{connectionId:e,activeConnections:this.activeConnections.size})}getActiveConnectionCount(){return this.activeConnections.size}async gracefulShutdown(){let{gracefulShutdownTimeoutMs:e,drainTimeoutMs:t,forceClose:n}=this.shutdownConfig;g.info("[ServerAdapter] Starting graceful shutdown",{activeConnections:this.activeConnections.size,gracefulShutdownTimeoutMs:e,drainTimeoutMs:t});let o=xe.createSpan("server.request","server.shutdown",{"server.operation":"gracefulShutdown","server.activeConnections":this.activeConnections.size}),s=Date.now(),i,a;try{this.lifecycleState="draining",await this.stopAcceptingConnections(),g.info("[ServerAdapter] Stopped accepting new connections");let c=this.drainConnections(),l=new Promise((f,h)=>{i=setTimeout(()=>{h(new dL(e,this.activeConnections.size))},e)}),u=new Promise(f=>{a=setTimeout(()=>{f("drain_timeout")},t)});if(await Promise.race([c,u])==="drain_timeout"&&this.activeConnections.size>0)if(g.warn("[ServerAdapter] Drain timeout reached",{remainingConnections:this.activeConnections.size}),n)g.info("[ServerAdapter] Force closing remaining connections"),await this.forceCloseConnections();else throw new pL(t,this.activeConnections.size);this.lifecycleState="stopping",await Promise.race([this.closeServer(),l]),g.info("[ServerAdapter] Server closed successfully"),o.durationMs=Date.now()-s;let p=xe.endSpan(o,1);Ze().recordSpan(p)}catch(c){if(n&&(c instanceof dL||c instanceof pL)){g.warn("[ServerAdapter] Timeout during shutdown, forcing close",{error:c.message}),await this.forceCloseConnections(),await this.closeServer(),o.durationMs=Date.now()-s;let l=xe.endSpan(o,1);Ze().recordSpan(l)}else{this.lifecycleState="error",o.durationMs=Date.now()-s;let l=xe.endSpan(o,2);throw l.statusMessage=c instanceof Error?c.message:String(c),Ze().recordSpan(l),c}}finally{i&&clearTimeout(i),a&&clearTimeout(a)}}async drainConnections(){if(this.activeConnections.size===0){g.debug("[ServerAdapter] No active connections to drain");return}return g.info("[ServerAdapter] Draining connections",{count:this.activeConnections.size}),new Promise(e=>{let t=setInterval(()=>{this.activeConnections.size===0&&(clearInterval(t),g.info("[ServerAdapter] All connections drained"),e())},100)})}resetServerState(){this.isRunning=!1,this.startTime=void 0,this.activeConnections.clear(),this.lifecycleState="stopped",g.debug("[ServerAdapter] Server state reset for restart capability")}validateLifecycleState(e,t){if(!t.includes(this.lifecycleState))throw new mL(e,this.lifecycleState,t)}getStatus(){return{running:this.isRunning,port:this.config.port,host:this.config.host,uptime:this.startTime?Date.now()-this.startTime.getTime():0,routes:this.routes.size,middlewares:this.middlewares.length,lifecycleState:this.lifecycleState,activeConnections:this.activeConnections.size}}listRoutes(){return Array.from(this.routes.values())}getConfig(){return{...this.config}}}});function vh(r){return typeof r=="object"&&r!==null&&"error"in r&&typeof r.error=="object"&&r.error!==null&&"code"in r.error&&"message"in r.error}function Mzr(r){return{VALIDATION_ERROR:400,SCHEMA_ERROR:400,TOOL_NOT_FOUND:404,SERVER_NOT_FOUND:404,SESSION_NOT_FOUND:404,NOT_FOUND:404,AUTH_REQUIRED:401,AUTH_INVALID:401,FORBIDDEN:403,RATE_LIMIT_EXCEEDED:429,MCP_UNAVAILABLE:503,MEMORY_UNAVAILABLE:503,SKILLS_UNAVAILABLE:503,EXECUTION_FAILED:500,INTERNAL_ERROR:500}[r]??500}function nr(r,e,t,n,o){return{error:{code:r,message:e,details:t},metadata:{timestamp:new Date().toISOString(),requestId:n},httpStatus:o??Mzr(r)}}function Yl(r,e,t){let n=r.safeParse(e);return n.success?{success:!0,data:n.data}:{success:!1,error:nr("VALIDATION_ERROR","Invalid request body",n.error.issues.map(o=>({path:o.path.join("."),message:o.message,code:o.code})),t)}}function t9e(r,e,t){let n=r.safeParse(e);return n.success?{success:!0,data:n.data}:{success:!1,error:nr("VALIDATION_ERROR","Invalid query parameters",n.error.issues.map(o=>({path:o.path.join("."),message:o.message,code:o.code})),t)}}function nl(r,e,t){let n=r.safeParse(e);return n.success?{success:!0,data:n.data}:{success:!1,error:nr("VALIDATION_ERROR","Invalid path parameters",n.error.issues.map(o=>({path:o.path.join("."),message:o.message,code:o.code})),t)}}var fL,cK,zC,lK,mS,gL,XJe,Qfe,aTo,cTo,ZJe,QJe,ege,e9e,pf=_(()=>{"use strict";ao();fL=m.object({input:m.union([m.string(),m.object({text:m.string(),images:m.array(m.string()).optional(),files:m.array(m.string()).optional()})]),provider:m.string().optional(),model:m.string().optional(),systemPrompt:m.string().optional(),temperature:m.number().min(0).max(2).optional(),maxTokens:m.number().positive().optional(),tools:m.array(m.string()).optional(),stream:m.boolean().optional(),sessionId:m.string().optional(),userId:m.string().optional()}),cK=m.object({name:m.string().min(1,"Tool name is required"),arguments:m.record(m.string(),m.unknown()).default({}),sessionId:m.string().optional(),userId:m.string().optional()}),zC=m.record(m.string(),m.unknown()),lK=m.object({sessionId:m.string().min(1,"Session ID is required")}),mS=m.object({name:m.string().min(1,"Server name is required")}),gL=m.object({name:m.string().min(1,"Tool name is required")}),XJe=m.object({q:m.string().optional(),source:m.string().optional(),limit:m.string().transform(r=>parseInt(r,10)).pipe(m.number().positive().max(100)).optional()}),Qfe=m.object({id:m.string().min(1,"Session ID is required")}),aTo=m.object({userId:m.string().optional(),limit:m.string().transform(r=>parseInt(r,10)).pipe(m.number().positive().max(100)).optional(),offset:m.string().transform(r=>parseInt(r,10)).pipe(m.number().nonnegative()).optional()}),cTo=m.object({limit:m.string().transform(r=>parseInt(r,10)).pipe(m.number().positive().max(100)).optional(),offset:m.string().transform(r=>parseInt(r,10)).pipe(m.number().nonnegative()).optional()}),ZJe=m.object({text:m.string().min(1,"Text is required"),provider:m.string().optional(),model:m.string().optional()}),QJe=m.object({texts:m.array(m.string().min(1)).min(1,"At least one text is required").max(2048,"Maximum 2048 texts per batch"),provider:m.string().optional(),model:m.string().optional()}),ege=m.object({name:m.string().min(1,"Name is required"),displayName:m.string().optional(),description:m.string().min(1,"Description is required"),instructions:m.string().min(1,"Instructions are required"),tags:m.array(m.string()).optional(),scope:m.enum(["global","scoped"]).optional(),scopeIds:m.array(m.string()).optional(),requestedBy:m.string().optional()}),e9e=ege.partial()});var r9e={};ee(r9e,{Agent:()=>bjr,BedrockClient:()=>Nzr,BedrockRuntimeClient:()=>Lzr,Blob:()=>vjr,Client:()=>Sjr,ConverseCommand:()=>Uzr,ConverseStreamCommand:()=>Fzr,Cron:()=>tjr,Dispatcher:()=>wjr,File:()=>xjr,FlowProducer:()=>ejr,FormData:()=>yjr,GoogleAuth:()=>Gzr,HTTPException:()=>cjr,Headers:()=>hjr,Hippocampus:()=>Wzr,HippocampusConfig:()=>Kzr,Hono:()=>ijr,ImageFormat:()=>$zr,InvokeEndpointCommand:()=>zzr,InvokeEndpointWithResponseStreamCommand:()=>jzr,Job:()=>Zzr,ListFoundationModelsCommand:()=>Dzr,MockAgent:()=>kjr,Pool:()=>Tjr,Queue:()=>Yzr,QueueScheduler:()=>Qzr,Request:()=>fjr,Response:()=>gjr,SageMakerRuntimeClient:()=>Bzr,TextToSpeechClient:()=>qzr,VertexAI:()=>Vzr,Webhook:()=>Hzr,Worker:()=>Xzr,convertToHtml:()=>sjr,cors:()=>ajr,createClient:()=>Jzr,default:()=>Ozr,extractRawText:()=>ojr,fetch:()=>mjr,getGlobalDispatcher:()=>_jr,interceptors:()=>Cjr,logger:()=>ljr,parseBuffer:()=>rjr,request:()=>Rjr,secureHeaders:()=>ujr,selectCover:()=>njr,setGlobalDispatcher:()=>Ejr,streamSSE:()=>djr,timeout:()=>pjr});var jC,Zi,Ozr,Nzr,Dzr,Lzr,Uzr,Fzr,$zr,Bzr,zzr,jzr,Gzr,Vzr,qzr,Hzr,Wzr,Kzr,Jzr,Yzr,Xzr,Zzr,Qzr,ejr,tjr,rjr,njr,ojr,sjr,ijr,ajr,cjr,ljr,ujr,djr,pjr,mjr,fjr,gjr,hjr,yjr,xjr,vjr,bjr,Tjr,Sjr,wjr,Ejr,_jr,kjr,Cjr,Rjr,n9e=_(()=>{jC={get(r,e){return e==="__esModule"?!0:e==="default"?new Proxy({},{get:jC.get}):new Proxy(function(...t){return new Proxy({},{get:jC.get})},{get:jC.get,apply(t,n,o){return new Proxy({},{get:jC.get})},construct(t,n){return new Proxy({},{get:jC.get})}})}},Zi=new Proxy({},jC),Ozr=Zi,{BedrockClient:Nzr,ListFoundationModelsCommand:Dzr,BedrockRuntimeClient:Lzr,ConverseCommand:Uzr,ConverseStreamCommand:Fzr,ImageFormat:$zr}=Zi,{SageMakerRuntimeClient:Bzr,InvokeEndpointCommand:zzr,InvokeEndpointWithResponseStreamCommand:jzr}=Zi,{GoogleAuth:Gzr,VertexAI:Vzr,TextToSpeechClient:qzr}=Zi,{Webhook:Hzr}=Zi,{Hippocampus:Wzr,HippocampusConfig:Kzr}=Zi,{createClient:Jzr}=Zi,{Queue:Yzr,Worker:Xzr,Job:Zzr,QueueScheduler:Qzr,FlowProducer:ejr}=Zi,{Cron:tjr}=Zi,{parseBuffer:rjr,selectCover:njr}=Zi,{extractRawText:ojr,convertToHtml:sjr}=Zi,{Hono:ijr}=Zi,{cors:ajr,HTTPException:cjr,logger:ljr,secureHeaders:ujr,streamSSE:djr,timeout:pjr}=Zi,mjr=globalThis.fetch,fjr=globalThis.Request,gjr=globalThis.Response,hjr=globalThis.Headers,yjr=globalThis.FormData,xjr=globalThis.File,vjr=globalThis.Blob,bjr=Zi.Agent,Tjr=Zi.Pool,Sjr=Zi.Client,wjr=Zi.Dispatcher,Ejr=()=>{},_jr=()=>Zi,kjr=Zi.MockAgent,Cjr={redirect:()=>r=>r,retry:()=>r=>r},Rjr=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 o9e={};ee(o9e,{Agent:()=>hGr,BedrockClient:()=>Ijr,BedrockRuntimeClient:()=>Mjr,Blob:()=>gGr,Client:()=>xGr,ConverseCommand:()=>Ojr,ConverseStreamCommand:()=>Njr,Cron:()=>Xjr,Dispatcher:()=>vGr,File:()=>fGr,FlowProducer:()=>Yjr,FormData:()=>mGr,GoogleAuth:()=>$jr,HTTPException:()=>oGr,Headers:()=>pGr,Hippocampus:()=>Gjr,HippocampusConfig:()=>Vjr,Hono:()=>rGr,ImageFormat:()=>Djr,InvokeEndpointCommand:()=>Ujr,InvokeEndpointWithResponseStreamCommand:()=>Fjr,Job:()=>Kjr,ListFoundationModelsCommand:()=>Pjr,MockAgent:()=>SGr,Pool:()=>yGr,Queue:()=>Hjr,QueueScheduler:()=>Jjr,Request:()=>uGr,Response:()=>dGr,SageMakerRuntimeClient:()=>Ljr,TextToSpeechClient:()=>zjr,VertexAI:()=>Bjr,Webhook:()=>jjr,Worker:()=>Wjr,convertToHtml:()=>tGr,cors:()=>nGr,createClient:()=>qjr,default:()=>Ajr,extractRawText:()=>eGr,fetch:()=>lGr,getGlobalDispatcher:()=>TGr,interceptors:()=>wGr,logger:()=>sGr,parseBuffer:()=>Zjr,request:()=>EGr,secureHeaders:()=>iGr,selectCover:()=>Qjr,setGlobalDispatcher:()=>bGr,streamSSE:()=>aGr,timeout:()=>cGr});var GC,Qi,Ajr,Ijr,Pjr,Mjr,Ojr,Njr,Djr,Ljr,Ujr,Fjr,$jr,Bjr,zjr,jjr,Gjr,Vjr,qjr,Hjr,Wjr,Kjr,Jjr,Yjr,Xjr,Zjr,Qjr,eGr,tGr,rGr,nGr,oGr,sGr,iGr,aGr,cGr,lGr,uGr,dGr,pGr,mGr,fGr,gGr,hGr,yGr,xGr,vGr,bGr,TGr,SGr,wGr,EGr,s9e=_(()=>{GC={get(r,e){return e==="__esModule"?!0:e==="default"?new Proxy({},{get:GC.get}):new Proxy(function(...t){return new Proxy({},{get:GC.get})},{get:GC.get,apply(t,n,o){return new Proxy({},{get:GC.get})},construct(t,n){return new Proxy({},{get:GC.get})}})}},Qi=new Proxy({},GC),Ajr=Qi,{BedrockClient:Ijr,ListFoundationModelsCommand:Pjr,BedrockRuntimeClient:Mjr,ConverseCommand:Ojr,ConverseStreamCommand:Njr,ImageFormat:Djr}=Qi,{SageMakerRuntimeClient:Ljr,InvokeEndpointCommand:Ujr,InvokeEndpointWithResponseStreamCommand:Fjr}=Qi,{GoogleAuth:$jr,VertexAI:Bjr,TextToSpeechClient:zjr}=Qi,{Webhook:jjr}=Qi,{Hippocampus:Gjr,HippocampusConfig:Vjr}=Qi,{createClient:qjr}=Qi,{Queue:Hjr,Worker:Wjr,Job:Kjr,QueueScheduler:Jjr,FlowProducer:Yjr}=Qi,{Cron:Xjr}=Qi,{parseBuffer:Zjr,selectCover:Qjr}=Qi,{extractRawText:eGr,convertToHtml:tGr}=Qi,{Hono:rGr}=Qi,{cors:nGr,HTTPException:oGr,logger:sGr,secureHeaders:iGr,streamSSE:aGr,timeout:cGr}=Qi,lGr=globalThis.fetch,uGr=globalThis.Request,dGr=globalThis.Response,pGr=globalThis.Headers,mGr=globalThis.FormData,fGr=globalThis.File,gGr=globalThis.Blob,hGr=Qi.Agent,yGr=Qi.Pool,xGr=Qi.Client,vGr=Qi.Dispatcher,bGr=()=>{},TGr=()=>Qi,SGr=Qi.MockAgent,wGr={redirect:()=>r=>r,retry:()=>r=>r},EGr=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 i9e={};ee(i9e,{Agent:()=>pVr,BedrockClient:()=>kGr,BedrockRuntimeClient:()=>RGr,Blob:()=>dVr,Client:()=>fVr,ConverseCommand:()=>AGr,ConverseStreamCommand:()=>IGr,Cron:()=>WGr,Dispatcher:()=>gVr,File:()=>uVr,FlowProducer:()=>HGr,FormData:()=>lVr,GoogleAuth:()=>DGr,HTTPException:()=>eVr,Headers:()=>cVr,Hippocampus:()=>$Gr,HippocampusConfig:()=>BGr,Hono:()=>ZGr,ImageFormat:()=>PGr,InvokeEndpointCommand:()=>OGr,InvokeEndpointWithResponseStreamCommand:()=>NGr,Job:()=>VGr,ListFoundationModelsCommand:()=>CGr,MockAgent:()=>xVr,Pool:()=>mVr,Queue:()=>jGr,QueueScheduler:()=>qGr,Request:()=>iVr,Response:()=>aVr,SageMakerRuntimeClient:()=>MGr,TextToSpeechClient:()=>UGr,VertexAI:()=>LGr,Webhook:()=>FGr,Worker:()=>GGr,convertToHtml:()=>XGr,cors:()=>QGr,createClient:()=>zGr,default:()=>_Gr,extractRawText:()=>YGr,fetch:()=>sVr,getGlobalDispatcher:()=>yVr,interceptors:()=>vVr,logger:()=>tVr,parseBuffer:()=>KGr,request:()=>bVr,secureHeaders:()=>rVr,selectCover:()=>JGr,setGlobalDispatcher:()=>hVr,streamSSE:()=>nVr,timeout:()=>oVr});var VC,ea,_Gr,kGr,CGr,RGr,AGr,IGr,PGr,MGr,OGr,NGr,DGr,LGr,UGr,FGr,$Gr,BGr,zGr,jGr,GGr,VGr,qGr,HGr,WGr,KGr,JGr,YGr,XGr,ZGr,QGr,eVr,tVr,rVr,nVr,oVr,sVr,iVr,aVr,cVr,lVr,uVr,dVr,pVr,mVr,fVr,gVr,hVr,yVr,xVr,vVr,bVr,a9e=_(()=>{VC={get(r,e){return e==="__esModule"?!0:e==="default"?new Proxy({},{get:VC.get}):new Proxy(function(...t){return new Proxy({},{get:VC.get})},{get:VC.get,apply(t,n,o){return new Proxy({},{get:VC.get})},construct(t,n){return new Proxy({},{get:VC.get})}})}},ea=new Proxy({},VC),_Gr=ea,{BedrockClient:kGr,ListFoundationModelsCommand:CGr,BedrockRuntimeClient:RGr,ConverseCommand:AGr,ConverseStreamCommand:IGr,ImageFormat:PGr}=ea,{SageMakerRuntimeClient:MGr,InvokeEndpointCommand:OGr,InvokeEndpointWithResponseStreamCommand:NGr}=ea,{GoogleAuth:DGr,VertexAI:LGr,TextToSpeechClient:UGr}=ea,{Webhook:FGr}=ea,{Hippocampus:$Gr,HippocampusConfig:BGr}=ea,{createClient:zGr}=ea,{Queue:jGr,Worker:GGr,Job:VGr,QueueScheduler:qGr,FlowProducer:HGr}=ea,{Cron:WGr}=ea,{parseBuffer:KGr,selectCover:JGr}=ea,{extractRawText:YGr,convertToHtml:XGr}=ea,{Hono:ZGr}=ea,{cors:QGr,HTTPException:eVr,logger:tVr,secureHeaders:rVr,streamSSE:nVr,timeout:oVr}=ea,sVr=globalThis.fetch,iVr=globalThis.Request,aVr=globalThis.Response,cVr=globalThis.Headers,lVr=globalThis.FormData,uVr=globalThis.File,dVr=globalThis.Blob,pVr=ea.Agent,mVr=ea.Pool,fVr=ea.Client,gVr=ea.Dispatcher,hVr=()=>{},yVr=()=>ea,xVr=ea.MockAgent,vVr={redirect:()=>r=>r,retry:()=>r=>r},bVr=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 c9e={};ee(c9e,{ExpressServerAdapter:()=>hL});var hL,tge=_(()=>{"use strict";W();Hu();BC();pf();hL=class extends $d{app;server;frameworkInitialized=!1;sockets=new Set;constructor(e,t={}){super(e,t)}initializeFramework(){}async initializeFrameworkAsync(){if(this.frameworkInitialized)return;let t=(await Promise.resolve().then(()=>(n9e(),r9e))).default;if(this.app=t(),this.config.bodyParser.enabled){let n=this.config.bodyParser.maxSize||this.config.bodyParser.jsonLimit||"10mb";this.app.use(t.json({limit:this.config.bodyParser.jsonLimit||n})),this.app.use(t.urlencoded({extended:!0,limit:n}))}if(this.config.cors.enabled){let o=(await Promise.resolve().then(()=>(s9e(),o9e))).default;this.app.use(o({origin:this.config.cors.origins,methods:this.config.cors.methods,allowedHeaders:this.config.cors.headers,credentials:this.config.cors.credentials,maxAge:this.config.cors.maxAge}))}if(this.config.rateLimit.enabled){let o=(await Promise.resolve().then(()=>(a9e(),i9e))).default,s=this.config.rateLimit.windowMs,i=o({windowMs:s,max:this.config.rateLimit.maxRequests,message:{error:{code:"RATE_LIMIT_EXCEEDED",message:this.config.rateLimit.message}},standardHeaders:!0,legacyHeaders:!1,handler:(a,c)=>{let l=Math.ceil(s/1e3);c.setHeader("Retry-After",String(l)),c.status(429).json({error:{code:"RATE_LIMIT_EXCEEDED",message:this.config.rateLimit.message},metadata:{timestamp:new Date().toISOString(),retryAfter:l}})}});this.app.use(i)}this.app.use((n,o,s)=>{let i=n.headers["x-request-id"]||this.generateRequestId();n.headers["x-request-id"]=i,o.setHeader("X-Request-ID",i),s()}),this.config.logging.enabled&&this.app.use((n,o,s)=>{let i=Date.now(),a=n.headers["x-request-id"];g.info(`[ExpressAdapter] ${n.method} ${n.path}`,{requestId:a}),o.on("finish",()=>{g.info(`[ExpressAdapter] ${n.method} ${n.path} ${o.statusCode}`,{requestId:a,duration:Date.now()-i})}),s()}),this.frameworkInitialized=!0}async initialize(){await this.initializeFrameworkAsync(),await super.initialize()}registerFrameworkRoute(e){let t=e.method.toLowerCase();this.app[t](e.path,async(n,o,s)=>{let i=n.headers["x-request-id"],a=Date.now(),c=this.createContext({requestId:i,method:n.method,path:n.path,headers:n.headers,query:n.query,params:n.params,body:n.body});o.locals.responseHeaders&&(c.responseHeaders={...o.locals.responseHeaders}),this.emit("request",{requestId:i,method:c.method,path:c.path,timestamp:new Date});try{if(e.streaming?.enabled)return this.handleStreamingResponse(o,c,e);let l=await e.handler(c),u=Date.now()-a;if(vh(l)){let d=l.httpStatus??500;if(this.emit("response",{requestId:i,statusCode:d,duration:u,timestamp:new Date}),c.responseHeaders)for(let[p,f]of Object.entries(c.responseHeaders))o.setHeader(p,f);o.status(d).json({error:l.error,metadata:{...l.metadata,requestId:i,timestamp:new Date().toISOString(),duration:u}});return}if(this.emit("response",{requestId:i,statusCode:200,duration:u,timestamp:new Date}),c.responseHeaders)for(let[d,p]of Object.entries(c.responseHeaders))o.setHeader(d,p);o.json({data:l,metadata:{requestId:i,timestamp:new Date().toISOString(),duration:u}})}catch(l){s(l)}}),this.setupErrorHandler()}errorHandlerRegistered=!1;setupErrorHandler(){this.errorHandlerRegistered||(this.errorHandlerRegistered=!0,this.app.use((e,t,n,o)=>{let s=t.headers["x-request-id"];g.error("[ExpressAdapter] Request error",{requestId:s,error:e.message,stack:e.stack}),this.emit("error",{requestId:s,error:e,timestamp:new Date});let i=e instanceof zn,a=i?e.getHttpStatus():500,c=i?e.code:"INTERNAL_ERROR",l=i?e.message:"An internal error occurred";n.status(a).json({error:{code:c,message:l},metadata:{requestId:s,timestamp:new Date().toISOString()}})}))}async handleStreamingResponse(e,t,n){e.setHeader("Content-Type","text/event-stream"),e.setHeader("Cache-Control","no-cache"),e.setHeader("Connection","keep-alive");try{let o=await n.handler(t);if(o&&typeof o=="object"&&Symbol.asyncIterator in o)for await(let s of o)e.write(`event: message
|
|
2220
|
+
`+t)}function uS(r,e,t,n,o,s){if(r.listenerCount("wsClientError")){let i=new Error(o);Error.captureStackTrace(i,uS),r.emit("wsClientError",i,t,e)}else iL(t,n,o,s)}});var T5={};ee(T5,{PerMessageDeflate:()=>eJe.default,Receiver:()=>tJe.default,Sender:()=>rJe.default,WebSocket:()=>Tfe.default,WebSocketServer:()=>oJe.default,createWebSocketStream:()=>Z8e.default,default:()=>eBr,extension:()=>Q8e.default,subprotocol:()=>nJe.default});var Z8e,Q8e,eJe,tJe,rJe,nJe,Tfe,oJe,eBr,S5=_(()=>{Z8e=Oo(G8e(),1),Q8e=Oo(g5(),1),eJe=Oo(AC(),1),tJe=Oo(ufe(),1),rJe=Oo(mfe(),1),nJe=Oo(vfe(),1),Tfe=Oo(v5(),1),oJe=Oo(X8e(),1),eBr=Tfe.default});var sJe={};ee(sJe,{DeepgramSTT:()=>nh});var nh,w5=_(()=>{"use strict";W();Qm();nh=class{apiKey;baseUrl="https://api.deepgram.com/v1";maxAudioDuration=7200;supportsStreaming=!0;constructor(e){let t=(e??process.env.DEEPGRAM_API_KEY??"").trim();this.apiKey=t.length>0?t:null}isConfigured(){return this.apiKey!==null}getSupportedFormats(){return["mp3","wav","ogg","opus"]}async getSupportedLanguages(){return[{code:"en",name:"English",supportsDiarization:!0,supportsPunctuation:!0},{code:"en-US",name:"English (US)",supportsDiarization:!0,supportsPunctuation:!0},{code:"en-GB",name:"English (UK)",supportsDiarization:!0,supportsPunctuation:!0},{code:"es",name:"Spanish",supportsDiarization:!0,supportsPunctuation:!0},{code:"fr",name:"French",supportsDiarization:!0,supportsPunctuation:!0},{code:"de",name:"German",supportsDiarization:!0,supportsPunctuation:!0},{code:"it",name:"Italian",supportsDiarization:!0,supportsPunctuation:!0},{code:"pt",name:"Portuguese",supportsDiarization:!0,supportsPunctuation:!0},{code:"nl",name:"Dutch",supportsDiarization:!0,supportsPunctuation:!0},{code:"ja",name:"Japanese",supportsDiarization:!0,supportsPunctuation:!0},{code:"ko",name:"Korean",supportsDiarization:!0,supportsPunctuation:!0},{code:"zh",name:"Chinese",supportsDiarization:!0,supportsPunctuation:!0},{code:"hi",name:"Hindi",supportsDiarization:!0,supportsPunctuation:!0},{code:"ru",name:"Russian",supportsDiarization:!0,supportsPunctuation:!0}]}async transcribe(e,t={}){if(!this.apiKey)throw gr.providerNotConfigured("deepgram");let n=Buffer.isBuffer(e)?e:Buffer.from(e);if(n.length===0)throw gr.audioEmpty("deepgram");let o=t,s=Date.now();try{let i=new URLSearchParams;if(i.set("model",o.model??"nova-2"),t.language&&i.set("language",t.language),t.punctuation!==!1&&i.set("punctuate","true"),t.speakerDiarization&&(i.set("diarize","true"),t.speakerCount&&i.set("diarize_version","latest")),o.smartFormat&&i.set("smart_format","true"),o.utterances&&(i.set("utterances","true"),o.uttSplit!==void 0&&i.set("utt_split",o.uttSplit.toString())),o.paragraphs&&i.set("paragraphs","true"),o.fillerWords&&i.set("filler_words","true"),o.keywords&&o.keywords.length>0){for(let x of o.keywords)i.append("keywords",x);o.keywordBoost&&i.set("keyword_boost",o.keywordBoost)}if(o.redact&&o.redact.length>0)for(let x of o.redact)i.append("redact",x);t.profanityFilter&&i.set("profanity_filter","true");let a=`${this.baseUrl}/listen?${i.toString()}`,c=new AbortController,l=setTimeout(()=>c.abort(),3e4),u;try{u=await fetch(a,{method:"POST",headers:{Authorization:`Token ${this.apiKey}`,"Content-Type":this.getMimeType(t.format??"wav")},body:new Uint8Array(n),signal:c.signal})}catch(x){throw x instanceof Error&&x.name==="AbortError"?gr.transcriptionFailed("Deepgram STT request timed out after 30 seconds","deepgram",x):x}finally{clearTimeout(l)}if(!u.ok){let b=(await u.json().catch(()=>Object.create(null))).err_msg||`HTTP ${u.status}`;throw gr.transcriptionFailed(b,"deepgram")}let d=await u.json(),p=Date.now()-s;if(!d.results?.channels||d.results.channels.length===0||!d.results.channels[0].alternatives||d.results.channels[0].alternatives.length===0)return{text:"",confidence:0,language:t.language,duration:d.metadata?.duration,metadata:{latency:p,provider:"deepgram",requestId:d.metadata?.request_id}};let h=d.results.channels[0].alternatives[0],y={text:h.transcript,confidence:h.confidence,language:t.language,duration:d.metadata?.duration,metadata:{latency:p,provider:"deepgram",model:o.model??"nova-2",requestId:d.metadata?.request_id}};if(h.words&&h.words.length>0){let x=new Set;y.words=h.words.map(b=>{let T={word:b.punctuated_word??b.word,startTime:b.start,endTime:b.end,confidence:b.confidence};return b.speaker!==void 0&&(T.speaker=`Speaker ${b.speaker}`,x.add(T.speaker)),T}),x.size>0&&(y.speakers=Array.from(x))}return d.results.utterances&&d.results.utterances.length>0&&(y.segments=d.results.utterances.map((x,b)=>({index:b,text:x.transcript,isFinal:!0,confidence:x.confidence,startTime:x.start,endTime:x.end,speaker:x.speaker!==void 0?`Speaker ${x.speaker}`:void 0}))),g.info(`[DeepgramSTTHandler] Transcribed ${d.metadata?.duration?.toFixed(1)??"?"}s audio in ${p}ms`),y}catch(i){if(i instanceof gr)throw i;let a=i instanceof Error?i.message:String(i||"Unknown error");throw g.error(`[DeepgramSTTHandler] Transcription failed: ${a}`),gr.transcriptionFailed(a,"deepgram",i instanceof Error?i:void 0)}}async*transcribeStream(e,t){if(!this.apiKey)throw gr.providerNotConfigured("deepgram");let n=t,o=new URLSearchParams;o.set("model",n.model??"nova-2"),t.language&&o.set("language",t.language),t.punctuation!==!1&&o.set("punctuate","true"),t.speakerDiarization&&o.set("diarize","true"),n.smartFormat&&o.set("smart_format","true"),o.set("interim_results","true");let s=`wss://api.deepgram.com/v1/listen?${o.toString()}`,i=(await Promise.resolve().then(()=>(S5(),T5))).default,a=new i(s,{headers:{Authorization:`Token ${this.apiKey}`}}),c=0,l=[],u=null,d=!1,p=null,f=T=>{try{let w=JSON.parse(T.toString());if(w.type==="Results"&&w.channel?.alternatives){let k=w.channel.alternatives[0];if(k&&k.transcript){let C={index:c++,text:k.transcript,isFinal:w.is_final??!1,confidence:k.confidence??0};u?(u({value:C,done:!1}),u=null):l.push(C)}}}catch{g.warn("[DeepgramSTTHandler] Failed to parse WebSocket message")}},h=T=>{p=T,u&&(u({value:void 0,done:!0}),u=null)},y=()=>{d=!0,u&&(u({value:void 0,done:!0}),u=null)};a.on("message",f),a.on("error",h),a.on("close",y),await new Promise((T,w)=>{let k=()=>{clearTimeout(A),a.off("error",C),T()},C=P=>{clearTimeout(A),a.off("open",k),w(P)},A=setTimeout(()=>{a.off("message",f),a.off("error",h),a.off("close",y),a.off("open",k),a.off("error",C),a.terminate(),w(gr.streamError("WebSocket connection to Deepgram timed out after 10 seconds","deepgram"))},1e4);a.on("open",k),a.on("error",C)}),(async()=>{try{for await(let T of e)a.readyState===i.OPEN&&a.send(T)}catch(T){g.error(`[DeepgramSTTHandler] Error sending audio: ${T instanceof Error?T.message:String(T)}`),p=T,u&&(u({value:void 0,done:!0}),u=null)}finally{if(a.readyState===i.OPEN)try{a.send(JSON.stringify({type:"CloseStream"}))}catch{}}})().catch(T=>{g.error(`[DeepgramSTTHandler] sendAudio rejected: ${T instanceof Error?T.message:String(T)}`)});let b=()=>{let T=e.return;if(typeof T=="function")try{Promise.resolve(T.call(e)).catch(()=>{})}catch{}};try{for(;!d;){if(p)throw gr.streamError(p.message,"deepgram");if(l.length>0){let T=l.shift();T!==void 0&&(yield T)}else{let T=await new Promise(w=>{u=w});!T.done&&T.value&&(yield T.value)}}for(;l.length>0;){let T=l.shift();T!==void 0&&(yield T)}}finally{if(b(),a.readyState===i.OPEN){try{a.send(JSON.stringify({type:"CloseStream"}))}catch{}a.close()}else(a.readyState===i.CONNECTING||a.readyState===i.CLOSING)&&a.terminate()}}getMimeType(e){return{mp3:"audio/mpeg",wav:"audio/wav",ogg:"audio/ogg",opus:"audio/opus"}[e]??"audio/wav"}}});var iJe={};ee(iJe,{GoogleSTT:()=>oh});var oh,E5=_(()=>{"use strict";W();Qm();oh=class{apiKey;credentialsPath;baseUrl="https://speech.googleapis.com/v1";maxAudioDuration=60;supportsStreaming=!1;constructor(e,t){let n=(e??process.env.GOOGLE_API_KEY??process.env.GOOGLE_AI_API_KEY??process.env.GEMINI_API_KEY??"").trim();this.apiKey=n.length>0?n:null;let o=(t??process.env.GOOGLE_APPLICATION_CREDENTIALS??"").trim();this.credentialsPath=o.length>0?o:null}isConfigured(){return this.apiKey!==null||this.credentialsPath!==null}getSupportedFormats(){return["mp3","wav","ogg","opus"]}async getSupportedLanguages(){return[{code:"en-US",name:"English (US)",supportsDiarization:!0,supportsPunctuation:!0},{code:"en-GB",name:"English (UK)",supportsDiarization:!0,supportsPunctuation:!0},{code:"es-ES",name:"Spanish (Spain)",supportsDiarization:!0,supportsPunctuation:!0},{code:"es-US",name:"Spanish (US)",supportsDiarization:!0,supportsPunctuation:!0},{code:"fr-FR",name:"French",supportsDiarization:!0,supportsPunctuation:!0},{code:"de-DE",name:"German",supportsDiarization:!0,supportsPunctuation:!0},{code:"it-IT",name:"Italian",supportsDiarization:!0,supportsPunctuation:!0},{code:"pt-BR",name:"Portuguese (Brazil)",supportsDiarization:!0,supportsPunctuation:!0},{code:"ja-JP",name:"Japanese",supportsDiarization:!0,supportsPunctuation:!0},{code:"ko-KR",name:"Korean",supportsDiarization:!0,supportsPunctuation:!0},{code:"zh-CN",name:"Chinese (Simplified)",supportsDiarization:!0,supportsPunctuation:!0},{code:"zh-TW",name:"Chinese (Traditional)",supportsDiarization:!0,supportsPunctuation:!0},{code:"ar-SA",name:"Arabic",supportsDiarization:!0,supportsPunctuation:!0},{code:"hi-IN",name:"Hindi",supportsDiarization:!0,supportsPunctuation:!0},{code:"ru-RU",name:"Russian",supportsDiarization:!0,supportsPunctuation:!0}]}async transcribe(e,t={}){if(!this.isConfigured())throw gr.providerNotConfigured("google-stt");let n=Buffer.isBuffer(e)?e:Buffer.from(e);if(n.length===0)throw gr.audioEmpty("google-stt");let o=t,s=Date.now();try{let i=t.format??"wav",a={encoding:this.getEncoding(i),...i!=="wav"&&i!=="flac"?{sampleRateHertz:t.sampleRate??16e3}:t.sampleRate?{sampleRateHertz:t.sampleRate}:{},languageCode:t.language??"en-US",enableAutomaticPunctuation:t.punctuation??!0,enableWordTimeOffsets:t.wordTimestamps??!1,enableWordConfidence:!0,profanityFilter:t.profanityFilter??!1};o.model&&(a.model=o.model),o.useEnhanced&&(a.useEnhanced=!0),t.speakerDiarization&&(a.enableSpeakerDiarization=!0,t.speakerCount&&(a.diarizationSpeakerCount=t.speakerCount)),o.maxAlternatives&&(a.maxAlternatives=o.maxAlternatives);let c={config:a,audio:{content:n.toString("base64")}},l=this.apiKey?`${this.baseUrl}/speech:recognize?key=${this.apiKey}`:`${this.baseUrl}/speech:recognize`,u=new AbortController,d=setTimeout(()=>u.abort(),3e4),p;try{p=await fetch(l,{method:"POST",headers:{"Content-Type":"application/json",...this.credentialsPath&&!this.apiKey?{Authorization:`Bearer ${await this.getAccessToken()}`}:{}},body:JSON.stringify(c),signal:u.signal})}catch(T){throw T instanceof Error&&T.name==="AbortError"?gr.transcriptionFailed("Google STT request timed out after 30 seconds","google-stt",T):T}finally{clearTimeout(d)}if(!p.ok){let w=(await p.json().catch(()=>Object.create(null))).error?.message||`HTTP ${p.status}`;throw gr.transcriptionFailed(w,"google-stt")}let f=await p.json(),h=Date.now()-s;if(!f.results||f.results.length===0)return{text:"",confidence:0,language:t.language,metadata:{latency:h,provider:"google-stt"}};let y={text:f.results.map(T=>T.alternatives[0]?.transcript??"").join(" ").trim(),confidence:this.calculateAverageConfidence(f.results),language:f.results[0]?.languageCode??t.language,metadata:{latency:h,provider:"google-stt",billedTime:f.totalBilledTime}},x=[],b=new Set;for(let T of f.results){let w=T.alternatives[0];if(w?.words)for(let k of w.words){let C={word:k.word,startTime:this.parseDuration(k.startTime),endTime:this.parseDuration(k.endTime),confidence:k.confidence};k.speakerTag!==void 0&&(C.speaker=`Speaker ${k.speakerTag}`,b.add(C.speaker)),x.push(C)}}return x.length>0&&(y.words=x),b.size>0&&(y.speakers=Array.from(b)),y.segments=f.results.map((T,w)=>{let k=T.alternatives[0];return{index:w,text:k?.transcript??"",isFinal:!0,confidence:k?.confidence??0,language:T.languageCode}}),g.info(`[GoogleSTTHandler] Transcribed audio in ${h}ms`),y}catch(i){if(i instanceof gr)throw i;let a=i instanceof Error?i.message:String(i||"Unknown error");throw g.error(`[GoogleSTTHandler] Transcription failed: ${a}`),gr.transcriptionFailed(a,"google-stt",i instanceof Error?i:void 0)}}async*transcribeStream(e,t){let n=[],o=0;for await(let s of e){n.push(s);let i=16e3*2;if(n.reduce((c,l)=>c+l.length,0)>=i*5){let c=Buffer.concat(n);n.length=0;try{let l=await this.transcribe(c,t);yield{index:o++,text:l.text,isFinal:!1,confidence:l.confidence}}catch(l){let u=l instanceof Error?l.message:String(l);if(/\b(401|403|404|UNAUTHENTICATED|PERMISSION_DENIED|INVALID_ARGUMENT|UNAUTHORIZED|FORBIDDEN|invalid.*credential|invalid.*key)\b/i.test(u))throw g.error(`[GoogleSTTHandler] Permanent chunk error \u2014 terminating stream: ${u}`),l;g.warn(`[GoogleSTTHandler] Transient chunk failure (skipping): ${u}`)}}}if(n.length>0){let s=Buffer.concat(n);try{let i=await this.transcribe(s,t);yield{index:o,text:i.text,isFinal:!0,confidence:i.confidence}}catch(i){let a=i instanceof Error?i.message:String(i);if(/\b(401|403|404|Forbidden|Unauthorized|Invalid.*credential|Invalid.*key|Permission|PERMISSION_DENIED|UNAUTHENTICATED|INVALID_ARGUMENT)\b/i.test(a))throw g.error(`[GoogleSTTHandler] Permanent final-chunk error \u2014 surfacing: ${a}`),i;g.warn(`[GoogleSTTHandler] Final chunk transcription failed (transient): ${a}`)}}}getEncoding(e){return{mp3:"MP3",wav:"LINEAR16",ogg:"OGG_OPUS",opus:"OGG_OPUS"}[e]??"LINEAR16"}parseDuration(e){if(!e)return 0;let t=e.match(/^([\d.]+)s$/);return t?parseFloat(t[1]):0}calculateAverageConfidence(e){let t=e.map(n=>n.alternatives[0]?.confidence).filter(n=>typeof n=="number");return t.length===0?0:t.reduce((n,o)=>n+o,0)/t.length}async getAccessToken(){try{let{GoogleAuth:e}=await Promise.resolve().then(()=>(wO(),u4)),s=(await(await new e({...this.credentialsPath?{keyFilename:this.credentialsPath}:{},scopes:["https://www.googleapis.com/auth/cloud-platform"]}).getClient()).getAccessToken()).token;if(!s)throw gr.transcriptionFailed("Google access token returned empty \u2014 check GOOGLE_APPLICATION_CREDENTIALS path and service account permissions","google-stt");return s}catch(e){throw g.error(`[GoogleSTTHandler] Failed to acquire access token: ${e instanceof Error?e.message:String(e)}`),e instanceof gr?e:gr.transcriptionFailed(`Google access token acquisition failed: ${e instanceof Error?e.message:String(e)}`,"google-stt")}}}});var aJe={};ee(aJe,{AzureSTT:()=>sh});var sh,_5=_(()=>{"use strict";W();Qm();sh=class{apiKey;region;maxAudioDuration=60;supportsStreaming=!1;constructor(e,t){let n=(e??process.env.AZURE_SPEECH_KEY??"").trim();this.apiKey=n.length>0?n:null;let o=(t??process.env.AZURE_SPEECH_REGION??"").trim();this.region=o.length>0?o:"eastus"}isConfigured(){return this.apiKey!==null&&this.region.length>0}getSupportedFormats(){return["wav","ogg","opus"]}async getSupportedLanguages(){return[{code:"en-US",name:"English (US)",supportsDiarization:!0,supportsPunctuation:!0},{code:"en-GB",name:"English (UK)",supportsDiarization:!0,supportsPunctuation:!0},{code:"es-ES",name:"Spanish (Spain)",supportsDiarization:!0,supportsPunctuation:!0},{code:"es-MX",name:"Spanish (Mexico)",supportsDiarization:!0,supportsPunctuation:!0},{code:"fr-FR",name:"French",supportsDiarization:!0,supportsPunctuation:!0},{code:"de-DE",name:"German",supportsDiarization:!0,supportsPunctuation:!0},{code:"it-IT",name:"Italian",supportsDiarization:!0,supportsPunctuation:!0},{code:"pt-BR",name:"Portuguese (Brazil)",supportsDiarization:!0,supportsPunctuation:!0},{code:"ja-JP",name:"Japanese",supportsDiarization:!0,supportsPunctuation:!0},{code:"ko-KR",name:"Korean",supportsDiarization:!0,supportsPunctuation:!0},{code:"zh-CN",name:"Chinese (Simplified)",supportsDiarization:!0,supportsPunctuation:!0},{code:"hi-IN",name:"Hindi",supportsDiarization:!0,supportsPunctuation:!0},{code:"ar-SA",name:"Arabic",supportsDiarization:!0,supportsPunctuation:!0},{code:"ru-RU",name:"Russian",supportsDiarization:!0,supportsPunctuation:!0}]}async transcribe(e,t={}){if(!this.apiKey)throw gr.providerNotConfigured("azure-stt");let n=Buffer.isBuffer(e)?e:Buffer.from(e);if(n.length===0)throw gr.audioEmpty("azure-stt");let o=t,s=Date.now();try{let i=new URLSearchParams;i.set("language",t.language??"en-US"),(o.detailed||t.wordTimestamps)&&i.set("format","detailed"),o.profanityMode?i.set("profanity",o.profanityMode):t.profanityFilter&&i.set("profanity","masked");let a=`https://${this.region}.stt.speech.microsoft.com`;o.customEndpointId&&i.set("cid",o.customEndpointId);let c=`${a}/speech/recognition/conversation/cognitiveservices/v1?${i.toString()}`,l=new AbortController,u=setTimeout(()=>l.abort(),3e4),d;try{d=await fetch(c,{method:"POST",headers:{"Ocp-Apim-Subscription-Key":this.apiKey,"Content-Type":this.getContentType(t.format??"wav"),Accept:"application/json"},body:new Uint8Array(n),signal:l.signal})}catch(y){throw y instanceof Error&&y.name==="AbortError"?gr.transcriptionFailed("Azure STT request timed out after 30 seconds","azure-stt",y):y}finally{clearTimeout(u)}if(!d.ok){let y=await d.text();throw gr.transcriptionFailed(`HTTP ${d.status}: ${y}`,"azure-stt")}let p=await d.json(),f=Date.now()-s;if(p.RecognitionStatus!=="Success"){if(p.RecognitionStatus==="NoMatch")return{text:"",confidence:0,language:t.language,metadata:{latency:f,provider:"azure-stt",status:p.RecognitionStatus}};throw gr.transcriptionFailed(`Recognition failed: ${p.RecognitionStatus}`,"azure-stt")}let h={text:p.DisplayText??"",confidence:.9,language:t.language,duration:this.ticksToSeconds(p.Duration??0),metadata:{latency:f,provider:"azure-stt",status:p.RecognitionStatus}};if(p.NBest&&p.NBest.length>0){let y=p.NBest[0];h.text=y.Display,h.confidence=y.Confidence,y.Words&&y.Words.length>0&&(h.words=y.Words.map(x=>({word:x.Word,startTime:this.ticksToSeconds(x.Offset),endTime:this.ticksToSeconds(x.Offset+x.Duration),confidence:x.Confidence})))}return g.info(`[AzureSTTHandler] Transcribed audio in ${f}ms`),h}catch(i){if(i instanceof gr)throw i;let a=i instanceof Error?i.message:String(i||"Unknown error");throw g.error(`[AzureSTTHandler] Transcription failed: ${a}`),gr.transcriptionFailed(a,"azure-stt",i instanceof Error?i:void 0)}}async*transcribeStream(e,t){let n=[],o=0,s=0;for await(let i of e){n.push(i),s+=i.length;let a=(t.sampleRate??16e3)*2;if(s>=a*5){let c=Buffer.concat(n);n.length=0,s=0;try{let l=await this.transcribe(c,t);yield{index:o++,text:l.text,isFinal:!1,confidence:l.confidence}}catch(l){let u=l instanceof Error?l.message:String(l);if(/\b(401|403|404|Forbidden|Unauthorized|Invalid.*subscription|Invalid.*key|Wrong.*key|InvalidAudioFormat)\b/i.test(u))throw g.error(`[AzureSTTHandler] Permanent chunk error \u2014 terminating stream: ${u}`),l;g.warn(`[AzureSTTHandler] Transient chunk failure (skipping): ${u}`)}}}if(n.length>0){let i=Buffer.concat(n);try{let a=await this.transcribe(i,t);yield{index:o,text:a.text,isFinal:!0,confidence:a.confidence}}catch(a){let c=a instanceof Error?a.message:String(a);if(/\b(401|403|404|Forbidden|Unauthorized|Invalid.*subscription|Invalid.*key|Wrong.*key|InvalidAudioFormat)\b/i.test(c))throw g.error(`[AzureSTTHandler] Permanent final-chunk error \u2014 surfacing: ${c}`),a;g.warn(`[AzureSTTHandler] Final chunk transcription failed (transient): ${c}`)}}}getContentType(e){return{wav:"audio/wav; codecs=audio/pcm; samplerate=16000",ogg:"audio/ogg; codecs=opus",opus:"audio/ogg; codecs=opus"}[e]??"audio/wav"}ticksToSeconds(e){return e/1e7}}});var cJe={};ee(cJe,{BaseRealtimeHandler:()=>ah,RealtimeProcessor:()=>ih});var ih,ah,DC=_(()=>{"use strict";W();Qm();Nt();ih=class{static handlers=new Map;static sessions=new Map;static registerHandler(e,t){if(!e)throw new Error("Provider name is required");if(!t)throw new Error("Handler is required");let n=e.toLowerCase();this.handlers.has(n)&&g.warn(`[RealtimeProcessor] Overwriting existing handler for provider: ${n}`),this.handlers.set(n,t),g.debug(`[RealtimeProcessor] Registered Realtime handler for provider: ${n}`)}static getHandler(e){let t=e.toLowerCase();return this.handlers.get(t)}static supports(e){if(!e)return!1;let t=e.toLowerCase();return this.handlers.has(t)}static getProviders(){return Array.from(this.handlers.keys())}static async connect(e,t,n){let o=this.getHandler(e);if(!o)throw kr.providerNotSupported(e,Array.from(this.handlers.keys()));if(!o.isConfigured())throw kr.providerNotConfigured(e);if(o.isConnected())throw kr.sessionAlreadyActive(e);let s={...BRe,...t};n&&o.on(n);try{g.debug(`[RealtimeProcessor] Connecting to provider: ${e}`);let i=await o.connect(s);return this.sessions.set(e.toLowerCase(),i),g.info(`[RealtimeProcessor] Connected to ${e} session: ${i.id}`),i}catch(i){if(n&&o.off(),i instanceof kr)throw i;let a=i instanceof Error?i.message:String(i||"Unknown error");throw kr.connectionFailed(a,e,i instanceof Error?i:void 0)}}static async disconnect(e){let t=this.getHandler(e);if(!t)throw kr.providerNotSupported(e,Array.from(this.handlers.keys()));if(!t.isConnected()){g.warn(`[RealtimeProcessor] No active session for provider: ${e}`);return}try{await t.disconnect(),this.sessions.delete(e.toLowerCase()),t.off(),g.info(`[RealtimeProcessor] Disconnected from ${e}`)}catch(n){if(n instanceof kr)throw n;let o=n instanceof Error?n.message:String(n||"Unknown error");throw kr.protocolError(`Disconnect failed: ${o}`,e,n instanceof Error?n:void 0)}}static async sendAudio(e,t){let n=this.getHandler(e);if(!n)throw kr.providerNotSupported(e,Array.from(this.handlers.keys()));if(!n.isConnected())throw kr.sessionNotActive(e);try{await n.sendAudio(t)}catch(o){if(o instanceof kr)throw o;let s=o instanceof Error?o.message:String(o||"Unknown error");throw kr.audioStreamError(s,e)}}static async sendText(e,t){let n=this.getHandler(e);if(!n)throw kr.providerNotSupported(e,Array.from(this.handlers.keys()));if(!n.isConnected())throw kr.sessionNotActive(e);if(!n.sendText)throw new kr({code:za.PROTOCOL_ERROR,message:`Provider "${e}" does not support text input`,category:"validation",severity:"medium",context:{provider:e}});try{await n.sendText(t)}catch(o){throw o instanceof kr?o:new kr({code:za.PROTOCOL_ERROR,message:`sendText failed: ${o instanceof Error?o.message:String(o)}`,category:"network",severity:"medium",retriable:!0,context:{provider:e},originalError:o instanceof Error?o:void 0})}}static async triggerResponse(e){let t=this.getHandler(e);if(!t)throw kr.providerNotSupported(e,Array.from(this.handlers.keys()));if(!t.isConnected())throw kr.sessionNotActive(e);if(t.triggerResponse)try{await t.triggerResponse()}catch(n){throw n instanceof kr?n:new kr({code:za.PROTOCOL_ERROR,message:`triggerResponse failed: ${n instanceof Error?n.message:String(n)}`,category:"network",severity:"medium",retriable:!0,context:{provider:e},originalError:n instanceof Error?n:void 0})}}static async cancelResponse(e){let t=this.getHandler(e);if(!t)throw kr.providerNotSupported(e,Array.from(this.handlers.keys()));if(t.isConnected()&&t.cancelResponse)try{await t.cancelResponse()}catch(n){throw n instanceof kr?n:new kr({code:za.PROTOCOL_ERROR,message:`cancelResponse failed: ${n instanceof Error?n.message:String(n)}`,category:"network",severity:"medium",retriable:!0,context:{provider:e},originalError:n instanceof Error?n:void 0})}}static getSession(e){return this.getHandler(e)?.getSession()??null}static isConnected(e){return this.getHandler(e)?.isConnected()??!1}static getSupportedFormats(e){return this.getHandler(e)?.getSupportedFormats()??[]}static clearHandlers(){for(let[e]of this.sessions){let t=this.handlers.get(e);t?.isConnected()&&t.disconnect().catch(()=>{})}this.handlers.clear(),this.sessions.clear(),g.debug("[RealtimeProcessor] Cleared all handlers and sessions")}},ah=class{session=null;eventHandlers=null;state="disconnected";isConnected(){return this.state==="connected"}getSession(){return this.session}on(e){this.eventHandlers=e}off(){this.eventHandlers=null}emitStateChange(e){this.state=e,this.session&&(this.session.state=e,this.session.lastActivityAt=new Date),this.eventHandlers?.onStateChange?.(e)}emitAudio(e){this.eventHandlers?.onAudio?.(e)}emitTranscript(e,t){this.eventHandlers?.onTranscript?.(e,t)}emitText(e,t){this.eventHandlers?.onText?.(e,t)}async emitFunctionCall(e,t){if(this.eventHandlers?.onFunctionCall)return this.eventHandlers.onFunctionCall(e,t)}emitError(e){this.eventHandlers?.onError?.(e)}emitTurnStart(){this.eventHandlers?.onTurnStart?.()}emitTurnEnd(){this.eventHandlers?.onTurnEnd?.()}createSession(e,t){return{id:e,state:"connected",provider:this.name,model:t.model,createdAt:new Date,lastActivityAt:new Date,config:t}}}});var lJe={};ee(lJe,{OpenAIRealtime:()=>ch});var ch,k5=_(()=>{"use strict";W();Qm();DC();ch=class extends ah{name="openai-realtime";apiKey;ws=null;audioChunkIndex=0;constructor(e){super();let t=(e??process.env.OPENAI_API_KEY??"").trim();this.apiKey=t.length>0?t:null}isConfigured(){return this.apiKey!==null}getSupportedFormats(){return["pcm16"]}async connect(e){if(!this.apiKey)throw kr.providerNotConfigured("openai-realtime");if(this.isConnected())throw kr.sessionAlreadyActive("openai-realtime");this.emitStateChange("connecting");try{let{default:t}=await Promise.resolve().then(()=>(S5(),T5)),o=`wss://api.openai.com/v1/realtime?model=${e.model??"gpt-4o-realtime-preview-2024-12-17"}`;this.ws=new t(o,{headers:{Authorization:`Bearer ${this.apiKey}`,"OpenAI-Beta":"realtime=v1"}});let s=this.ws;await new Promise((a,c)=>{let l=setTimeout(()=>{c(new Error("Connection timeout"))},e.timeout??3e4);s.on("open",()=>{clearTimeout(l),a()}),s.on("error",u=>{clearTimeout(l),c(u)})}),this.ws.on("message",a=>{this.handleMessage(a)}),this.ws.on("close",()=>{this.emitStateChange("disconnected"),this.session=null}),this.ws.on("error",a=>{this.emitError(a)}),await this.sendSessionUpdate(e);let i=await this.waitForSessionCreated();return this.session=this.createSession(i,e),this.emitStateChange("connected"),g.info(`[OpenAIRealtimeHandler] Connected to session: ${i}`),this.session}catch(t){this.emitStateChange("error");let n=t instanceof Error?t.message:String(t||"Unknown error");throw kr.connectionFailed(n,"openai-realtime",t instanceof Error?t:void 0)}}async disconnect(){if(this.ws){this.emitStateChange("disconnecting");try{this.ws.close(),this.ws=null,this.session=null,this.audioChunkIndex=0,this.emitStateChange("disconnected"),g.info("[OpenAIRealtimeHandler] Disconnected")}catch(e){let t=e instanceof Error?e.message:String(e||"Unknown error");throw kr.protocolError(`Disconnect failed: ${t}`,"openai-realtime",e instanceof Error?e:void 0)}}}async sendAudio(e){if(!this.ws||!this.isConnected())throw kr.sessionNotActive("openai-realtime");let n={type:"input_audio_buffer.append",audio:(Buffer.isBuffer(e)?e:e.data).toString("base64")};this.ws.send(JSON.stringify(n))}async sendText(e){if(!this.ws||!this.isConnected())throw kr.sessionNotActive("openai-realtime");let t={type:"conversation.item.create",item:{type:"message",role:"user",content:[{type:"input_text",text:e}]}};this.ws.send(JSON.stringify(t)),await this.triggerResponse()}async triggerResponse(){if(!this.ws||!this.isConnected())throw kr.sessionNotActive("openai-realtime");this.ws.send(JSON.stringify({type:"input_audio_buffer.commit"})),this.ws.send(JSON.stringify({type:"response.create"}))}async cancelResponse(){!this.ws||!this.isConnected()||this.ws.send(JSON.stringify({type:"response.cancel"}))}async sendSessionUpdate(e){if(!this.ws)return;let t={modalities:["text","audio"],input_audio_format:"pcm16",output_audio_format:"pcm16",input_audio_transcription:{model:"whisper-1"}};e.voice&&(t.voice=e.voice),e.turnDetection&&(t.turn_detection={type:e.turnDetection,threshold:e.vadThreshold??.5,prefix_padding_ms:300,silence_duration_ms:500}),e.systemPrompt&&(t.instructions=e.systemPrompt),e.tools&&e.tools.length>0&&(t.tools=e.tools.map(o=>({type:"function",name:o.name,description:o.description,parameters:o.parameters})));let n={type:"session.update",session:t};this.ws.send(JSON.stringify(n))}waitForSessionCreated(){return new Promise((e,t)=>{let n=s=>{try{let i=JSON.parse(s.toString());i.type==="session.created"?(clearTimeout(o),this.ws?.off("message",n),e(i.session.id)):i.type==="error"&&(clearTimeout(o),this.ws?.off("message",n),t(new Error(i.error?.message??"Unknown error")))}catch{}},o=setTimeout(()=>{this.ws?.off("message",n),t(new Error("Timeout waiting for session.created"))},1e4);this.ws?.on("message",n)})}handleMessage(e){try{let t=JSON.parse(e.toString());switch(t.type){case"response.audio.delta":{let n=t,o=Buffer.from(n.delta,"base64");this.emitAudio({data:o,index:this.audioChunkIndex++,isFinal:!1,format:"pcm16",sampleRate:24e3});break}case"response.audio.done":{this.emitAudio({data:Buffer.alloc(0),index:this.audioChunkIndex++,isFinal:!0,format:"pcm16",sampleRate:24e3});break}case"response.audio_transcript.delta":{let n=t;n.delta&&this.emitText(n.delta,!1);break}case"response.audio_transcript.done":{let n=t;n.transcript&&this.emitText(n.transcript,!0);break}case"conversation.item.input_audio_transcription.completed":{let n=t;n.transcript&&this.emitTranscript(n.transcript,!0);break}case"response.function_call_arguments.done":{let n=t;if(n.name&&n.call_id&&n.arguments)try{let o=JSON.parse(n.arguments);this.handleFunctionCall(n.name,o,n.call_id).catch(s=>{g.error(`[OpenAIRealtimeHandler] handleFunctionCall failed: ${s instanceof Error?s.message:String(s)}`)})}catch{g.warn("[OpenAIRealtimeHandler] Failed to parse function arguments")}break}case"response.done":{this.emitTurnEnd(),this.audioChunkIndex=0;break}case"input_audio_buffer.speech_started":{this.emitTurnStart();break}case"error":{let o=t.error?.message??"Unknown error";this.emitError(new Error(o));break}default:g.debug(`[OpenAIRealtimeHandler] Unhandled event: ${t.type}`)}}catch(t){g.warn(`[OpenAIRealtimeHandler] Failed to parse message: ${t instanceof Error?t.message:String(t)}`)}}async handleFunctionCall(e,t,n){try{let o=await this.emitFunctionCall(e,t);this.ws&&this.isConnected()&&(this.ws.send(JSON.stringify({type:"conversation.item.create",item:{type:"function_call_output",call_id:n,output:JSON.stringify(o)}})),await this.triggerResponse())}catch(o){let s=o instanceof Error?o.message:String(o);if(g.error(`[OpenAIRealtimeHandler] Function call failed: ${s}`),this.ws&&this.isConnected())try{this.ws.send(JSON.stringify({type:"conversation.item.create",item:{type:"function_call_output",call_id:n,output:JSON.stringify({error:s})}})),await this.triggerResponse()}catch(i){g.error(`[OpenAIRealtimeHandler] Failed to send error result for ${n}: ${i instanceof Error?i.message:String(i)}`)}}}}});var uJe={};ee(uJe,{GeminiLive:()=>lh});var lh,C5=_(()=>{"use strict";W();Qm();DC();lh=class extends ah{name="gemini-live";apiKey;ws=null;audioChunkIndex=0;pendingFunctionCalls=new Map;constructor(e){super();let t=(e??process.env.GOOGLE_API_KEY??process.env.GOOGLE_AI_API_KEY??process.env.GEMINI_API_KEY??"").trim();this.apiKey=t.length>0?t:null}isConfigured(){return this.apiKey!==null}getSupportedFormats(){return["opus","wav"]}async connect(e){if(!this.apiKey)throw kr.providerNotConfigured("gemini-live");if(this.isConnected())throw kr.sessionAlreadyActive("gemini-live");this.emitStateChange("connecting");try{let{default:t}=await Promise.resolve().then(()=>(S5(),T5)),n=e.model??"gemini-2.5-flash-native-audio-preview-09-2025",o=`wss://generativelanguage.googleapis.com/ws/google.ai.generativelanguage.v1alpha.GenerativeService.BidiGenerateContent?key=${this.apiKey}`;this.ws=new t(o);let s=this.ws;await new Promise((a,c)=>{let l=()=>{clearTimeout(d),s.off("error",u),a()},u=p=>{clearTimeout(d),s.off("open",l),c(p)},d=setTimeout(()=>{s.off("open",l),s.off("error",u),s.terminate(),this.ws=null,c(new Error("Connection timeout"))},e.timeout??3e4);s.on("open",l),s.on("error",u)}),this.ws.on("close",()=>{this.emitStateChange("disconnected"),this.session=null}),this.ws.on("error",a=>{this.emitError(a)}),await this.sendSetup(e,n),await this.waitForSetupComplete(),this.ws.on("message",a=>{this.handleMessage(a)});let i=`gemini-${Date.now()}`;return this.session=this.createSession(i,e),this.emitStateChange("connected"),g.info(`[GeminiLiveHandler] Connected to session: ${i}`),this.session}catch(t){this.emitStateChange("error");let n=t instanceof Error?t.message:String(t||"Unknown error");throw kr.connectionFailed(n,"gemini-live",t instanceof Error?t:void 0)}}async disconnect(){if(this.ws){this.emitStateChange("disconnecting");try{this.ws.close(),this.ws=null,this.session=null,this.audioChunkIndex=0,this.pendingFunctionCalls.clear(),this.emitStateChange("disconnected"),g.info("[GeminiLiveHandler] Disconnected")}catch(e){let t=e instanceof Error?e.message:String(e||"Unknown error");throw kr.protocolError(`Disconnect failed: ${t}`,"gemini-live",e instanceof Error?e:void 0)}}}async sendAudio(e){if(!this.ws||!this.isConnected())throw kr.sessionNotActive("gemini-live");let n={realtimeInput:{mediaChunks:[{mimeType:"audio/pcm;rate=16000",data:(Buffer.isBuffer(e)?e:e.data).toString("base64")}]}};this.ws.send(JSON.stringify(n))}async sendText(e){if(!this.ws||!this.isConnected())throw kr.sessionNotActive("gemini-live");let t={clientContent:{turns:[{role:"user",parts:[{text:e}]}],turnComplete:!0}};this.ws.send(JSON.stringify(t))}async triggerResponse(){}async cancelResponse(){if(this.ws&&this.isConnected()){let e={clientContent:{turns:[],turnComplete:!0}};this.ws.send(JSON.stringify(e))}}async sendSetup(e,t){if(!this.ws)return;let n={model:`models/${t}`,generationConfig:{responseModalities:["AUDIO","TEXT"],speechConfig:{voiceConfig:{prebuiltVoiceConfig:{voiceName:e.voice??"Puck"}}}}};e.systemPrompt&&(n.systemInstruction={parts:[{text:e.systemPrompt}]}),e.tools&&e.tools.length>0&&(n.tools=[{functionDeclarations:e.tools.map(s=>({name:s.name,description:s.description,parameters:s.parameters}))}]);let o={setup:n};this.ws.send(JSON.stringify(o))}waitForSetupComplete(){return new Promise((e,t)=>{let n=s=>{try{JSON.parse(s.toString()).setupComplete&&(clearTimeout(o),this.ws?.off("message",n),e())}catch{}},o=setTimeout(()=>{this.ws?.off("message",n),t(new Error("Timeout waiting for setup complete"))},1e4);this.ws?.on("message",n)})}handleMessage(e){try{let t=JSON.parse(e.toString());if(t.serverContent){let n=t.serverContent;if(n.modelTurn?.parts){for(let o of n.modelTurn.parts)if(o.text&&this.emitText(o.text,n.turnComplete??!1),o.inlineData){let s=Buffer.from(o.inlineData.data,"base64");this.emitAudio({data:s,index:this.audioChunkIndex++,isFinal:n.turnComplete??!1,format:this.parseAudioFormat(o.inlineData.mimeType),sampleRate:24e3})}}n.turnComplete&&(this.emitTurnEnd(),this.audioChunkIndex=0),n.interrupted&&(this.emitTurnEnd(),this.audioChunkIndex=0)}if(t.toolCall?.functionCalls)for(let n of t.toolCall.functionCalls)this.pendingFunctionCalls.set(n.id,n.name),this.handleFunctionCall(n.id,n.name,n.args);if(t.toolCallCancellation?.ids)for(let n of t.toolCallCancellation.ids)this.pendingFunctionCalls.delete(n)}catch(t){g.warn(`[GeminiLiveHandler] Failed to parse message: ${t instanceof Error?t.message:String(t)}`)}}parseAudioFormat(e){return e.includes("opus")?"opus":e.includes("wav")||e.includes("pcm")?"wav":e.includes("mp3")||e.includes("mpeg")?"mp3":"opus"}async handleFunctionCall(e,t,n){try{let o=await this.emitFunctionCall(t,n);if(this.ws&&this.isConnected()){let s={toolResponse:{functionResponses:[{id:e,name:t,response:{result:o}}]}};this.ws.send(JSON.stringify(s)),this.pendingFunctionCalls.delete(e)}}catch(o){let s=o instanceof Error?o:new Error(String(o||"Function call failed"));g.error(`[GeminiLiveHandler] Function call failed: ${s.message}`),this.emitError(s),this.pendingFunctionCalls.delete(e)}}}});var pJe={};ee(pJe,{KlingVideoHandler:()=>R5});var tBr,Sfe,rBr,dJe,R5,wfe=_(()=>{"use strict";lm();W();Pn();XD();nx();tBr="https://api.piapi.ai/api/kling/v1",Sfe=3e4,rBr=5e3,dJe=5*6e4,R5=class{maxDurationSeconds=10;supportedAspectRatios=["16:9","9:16","1:1"];supportedResolutions=["720p","1080p"];apiKey;baseUrl;constructor(e){let t=(e??process.env.KLING_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.KLING_BASE_URL??tBr).replace(/\/$/,"")}isConfigured(){return this.apiKey!==null}async generate(e,t,n){if(!this.apiKey)throw new it({code:st.PROVIDER_NOT_CONFIGURED,message:"KLING_API_KEY not configured",category:"configuration",severity:"high",retriable:!1});if(!n.imageUrl)throw new it({code:st.INVALID_INPUT,message:"KlingVideoHandler requires a publicly accessible image URL. Pass options.imageUrl with a URL string pointing to the input image. The PiAPI Kling API does not accept inline base64 image data.",category:"configuration",severity:"high",retriable:!1});let o=Date.now(),s=n.abortSignal,i=await this.submitJob(e,t,n),a=await this.pollUntilComplete(i,s),c=await this.downloadVideo(a),l=Date.now()-o;return g.info(`[KlingVideoHandler] Generated ${c.length} bytes in ${l}ms \u2014 task ${i}`),{data:c,mediaType:"video/mp4",metadata:{duration:n.length??4,dimensions:this.calculateDimensions(n),model:n.model??"kling",provider:"kling",aspectRatio:n.aspectRatio??"16:9",audioEnabled:!1,processingTime:l}}}async submitJob(e,t,n){let o={model:n.model??"kling",task_type:"video_generation",input:{image_url:n.imageUrl,prompt:t,duration:n.length??4,aspect_ratio:n.aspectRatio??"16:9",cfg_scale:.5}},s=await this.fetchWithTimeout(`${this.baseUrl}/image-to-video`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify(o)});if(!s.ok){let c=await s.text(),l=s.status===408||s.status===429||s.status>=500;throw new it({code:st.GENERATION_FAILED,message:`Kling submit failed: ${s.status} \u2014 ${Ms(c,500)}`,category:l?"network":"execution",severity:"high",retriable:l,context:{status:s.status}})}let i=await s.json(),a=i.task_id??i.data?.task_id;if(!a)throw new it({code:st.GENERATION_FAILED,message:"Kling submit response missing task_id",category:"execution",severity:"high",retriable:!1,context:{response:i}});return a}async pollUntilComplete(e,t){let n=Date.now();for(;Date.now()-n<dJe;){if(t?.aborted)throw new it({code:st.GENERATION_FAILED,message:`Kling poll for task ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{taskId:e}});let o=await this.fetchWithTimeout(`${this.baseUrl}/task/${e}`,{method:"GET",headers:{Authorization:`Bearer ${this.apiKey}`}},t);if(!o.ok){let i=await o.text();throw new it({code:st.GENERATION_FAILED,message:`Kling poll failed: ${o.status} \u2014 ${Ms(i,500)}`,category:"network",severity:"medium",retriable:o.status>=500,context:{status:o.status,taskId:e}})}let s=await o.json();if(s.status==="completed"||s.status==="succeeded"){let i=s.video_url??s.output?.video_url;if(!i)throw new it({code:st.GENERATION_FAILED,message:`Kling task ${e} completed but no video URL returned`,category:"execution",severity:"high",retriable:!1,context:{taskId:e,data:s}});return i}if(s.status==="failed")throw new it({code:st.GENERATION_FAILED,message:`Kling task ${e} failed: ${s.error??"unknown"}`,category:"execution",severity:"high",retriable:!1,context:{taskId:e,data:s}});await new Promise((i,a)=>{let c=()=>{clearTimeout(l),a(new it({code:st.GENERATION_FAILED,message:`Kling poll for task ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{taskId:e}}))},l=setTimeout(()=>{t?.removeEventListener("abort",c),i()},rBr);t?.addEventListener("abort",c,{once:!0})})}throw new it({code:st.POLL_TIMEOUT,message:`Kling task ${e} did not complete within ${dJe/1e3}s`,category:"timeout",severity:"medium",retriable:!0,context:{taskId:e}})}async downloadVideo(e){try{return await zx(e,{maxBytes:268435456,label:"Kling video",timeoutMs:Sfe})}catch(t){throw new it({code:st.GENERATION_FAILED,message:`Kling video download rejected: ${t instanceof Error?t.message:String(t)}`,category:"network",severity:"high",retriable:!1,context:{url:e},originalError:t instanceof Error?t:void 0})}}async fetchWithTimeout(e,t,n){let o=new AbortController,s=!1,i=setTimeout(()=>{s=!0,o.abort()},Sfe),a=()=>o.abort();n?.addEventListener("abort",a,{once:!0});try{return await fetch(e,{...t,signal:o.signal})}catch(c){throw c instanceof Error&&c.name==="AbortError"?s?new it({code:st.GENERATION_FAILED,message:`Kling request timed out after ${Sfe/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:c}):new it({code:st.GENERATION_FAILED,message:"Kling request aborted by caller",category:"network",severity:"medium",retriable:!1,originalError:c}):c}finally{n?.removeEventListener("abort",a),clearTimeout(i)}}calculateDimensions(e){let t=e.aspectRatio??"16:9";return(e.resolution??"720p")==="1080p"?t==="1:1"?{width:1080,height:1080}:t==="9:16"?{width:1080,height:1920}:{width:1920,height:1080}:t==="1:1"?{width:720,height:720}:t==="9:16"?{width:720,height:1280}:{width:1280,height:720}}}});var fJe={};ee(fJe,{RunwayVideoHandler:()=>A5});var nBr,Efe,oBr,mJe,A5,_fe=_(()=>{"use strict";lm();W();Pn();XD();nx();nBr="https://api.dev.runwayml.com/v1",Efe=3e4,oBr=5e3,mJe=5*6e4,A5=class{maxDurationSeconds=10;supportedAspectRatios=["16:9","9:16"];supportedResolutions=["720p","1080p"];apiKey;baseUrl;apiVersion;constructor(e){let t=(e??process.env.RUNWAY_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.RUNWAY_BASE_URL??nBr).replace(/\/$/,""),this.apiVersion=process.env.RUNWAY_API_VERSION??"2024-11-06"}isConfigured(){return this.apiKey!==null}async generate(e,t,n){if(!this.apiKey)throw new it({code:st.PROVIDER_NOT_CONFIGURED,message:"RUNWAY_API_KEY not configured",category:"configuration",severity:"high",retriable:!1});if(n.aspectRatio!==void 0&&!this.supportedAspectRatios.includes(n.aspectRatio))throw new it({code:st.INVALID_INPUT,message:`Unsupported aspect ratio for Runway: "${n.aspectRatio}". Supported: ${this.supportedAspectRatios.join(", ")}.`,category:"validation",severity:"medium",retriable:!1,context:{requested:n.aspectRatio,supported:this.supportedAspectRatios}});let o=Date.now(),s=n.abortSignal,i=await this.submitTask(e,t,n),a=await this.pollUntilComplete(i,s),c=await this.downloadVideo(a),l=Date.now()-o;return g.info(`[RunwayVideoHandler] Generated ${c.length} bytes in ${l}ms \u2014 task ${i}`),{data:c,mediaType:"video/mp4",metadata:{duration:n.length??4,dimensions:this.calculateDimensions(n),model:n.model??"gen3a_turbo",provider:"runway",aspectRatio:n.aspectRatio??"16:9",audioEnabled:!1,processingTime:l}}}async submitTask(e,t,n){let o=`data:image/${this.detectImageType(e)};base64,${e.toString("base64")}`,s={model:n.model??"gen3a_turbo",promptImage:o,promptText:t,duration:n.length??4,ratio:n.aspectRatio==="9:16"?"9:16":"16:9",seed:void 0},i=await this.fetchWithTimeout(`${this.baseUrl}/image_to_video`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json","X-Runway-Version":this.apiVersion},body:JSON.stringify(s)});if(!i.ok){let c=await i.text(),l=i.status===408||i.status===429||i.status>=500;throw new it({code:st.GENERATION_FAILED,message:`Runway submit failed: ${i.status} \u2014 ${Ms(c,500)}`,category:l?"network":"execution",severity:"high",retriable:l,context:{status:i.status}})}let a=await i.json();if(!a.id)throw new it({code:st.GENERATION_FAILED,message:"Runway submit response missing id",category:"execution",severity:"high",retriable:!1,context:{response:a}});return a.id}async pollUntilComplete(e,t){let n=Date.now();for(;Date.now()-n<mJe;){if(t?.aborted)throw new it({code:st.GENERATION_FAILED,message:`Runway poll for task ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{taskId:e}});let o=await this.fetchWithTimeout(`${this.baseUrl}/tasks/${e}`,{method:"GET",headers:{Authorization:`Bearer ${this.apiKey}`,"X-Runway-Version":this.apiVersion}},t);if(!o.ok){let i=await o.text();throw new it({code:st.GENERATION_FAILED,message:`Runway poll failed: ${o.status} \u2014 ${Ms(i,500)}`,category:"network",severity:"medium",retriable:o.status>=500})}let s=await o.json();if(s.status==="SUCCEEDED"||s.status==="succeeded"){let i=Array.isArray(s.output)?s.output[0]:s.output;if(typeof i!="string")throw new it({code:st.GENERATION_FAILED,message:`Runway task ${e} completed but no output URL`,category:"execution",severity:"high",retriable:!1,context:{taskId:e,data:s}});return i}if(s.status==="FAILED"||s.status==="failed")throw new it({code:st.GENERATION_FAILED,message:`Runway task ${e} failed: ${s.failure??s.error??"unknown"}`,category:"execution",severity:"high",retriable:!1,context:{taskId:e,data:s}});await new Promise((i,a)=>{let c=()=>{clearTimeout(l),a(new it({code:st.GENERATION_FAILED,message:`Runway poll for task ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{taskId:e}}))},l=setTimeout(()=>{t?.removeEventListener("abort",c),i()},oBr);t?.addEventListener("abort",c,{once:!0})})}throw new it({code:st.POLL_TIMEOUT,message:`Runway task ${e} did not complete within ${mJe/1e3}s`,category:"timeout",severity:"medium",retriable:!0,context:{taskId:e}})}async downloadVideo(e){try{return await zx(e,{maxBytes:268435456,label:"Runway video",timeoutMs:Efe})}catch(t){throw new it({code:st.GENERATION_FAILED,message:`Runway video download rejected: ${t instanceof Error?t.message:String(t)}`,category:"network",severity:"high",retriable:!1,context:{url:e},originalError:t instanceof Error?t:void 0})}}async fetchWithTimeout(e,t,n){let o=new AbortController,s=setTimeout(()=>o.abort(),Efe),i=()=>o.abort();n?.addEventListener("abort",i,{once:!0});try{return await fetch(e,{...t,signal:o.signal})}catch(a){throw a instanceof Error&&a.name==="AbortError"?new it({code:st.GENERATION_FAILED,message:`Runway request to ${e} timed out after ${Efe/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:a}):new it({code:st.GENERATION_FAILED,message:`Runway fetch failed: ${a instanceof Error?a.message:String(a)}`,category:"network",severity:"high",retriable:!0,originalError:a instanceof Error?a:void 0})}finally{n?.removeEventListener("abort",i),clearTimeout(s)}}detectImageType(e){return e.length<4?"jpeg":e[0]===137&&e[1]===80?"png":e[0]===255&&e[1]===216?"jpeg":e.length>=12&&e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70&&e[8]===87&&e[9]===69&&e[10]===66&&e[11]===80?"webp":"jpeg"}calculateDimensions(e){let t=e.aspectRatio??"16:9";return(e.resolution??"720p")==="1080p"?t==="9:16"?{width:1080,height:1920}:{width:1920,height:1080}:t==="9:16"?{width:720,height:1280}:{width:1280,height:720}}}});var gJe={};ee(gJe,{ReplicateVideoHandler:()=>I5});var sBr,I5,kfe=_(()=>{"use strict";lm();W();nx();YD();QD();sBr="atonamy/wan-alpha",I5=class{maxDurationSeconds=10;supportedAspectRatios=["9:16","16:9","1:1"];supportedResolutions=["720p","1080p"];instanceCredentials;constructor(e){this.instanceCredentials=e}isConfigured(){return Od(this.instanceCredentials)!==null}async generate(e,t,n){let o=n.credentials?.replicate,s=Od(o??this.instanceCredentials);if(!s)throw new it({code:st.PROVIDER_NOT_CONFIGURED,message:"REPLICATE_API_TOKEN not configured",category:"configuration",severity:"high",retriable:!1});let i=Date.now(),a=n.model??sBr,c=`data:image/${this.detectImageType(e)};base64,${e.toString("base64")}`,l=n.imageInputKey!==void 0?{[n.imageInputKey]:c,prompt:t,duration:n.length??4,...n.resolution!==void 0?{resolution:n.resolution}:{}}:{image:c,prompt:t,num_frames:(n.length??4)*24,fps:24,aspect_ratio:n.aspectRatio,...n.resolution!==void 0?{resolution:n.resolution}:{}},u;try{u=await Wg(s,{model:a,input:l},{abortSignal:n.abortSignal})}catch(f){throw new it({code:st.GENERATION_FAILED,message:`Replicate video generation failed: ${f instanceof Error?f.message:String(f)}`,category:"execution",severity:"high",retriable:!0,context:{model:a,options:n},originalError:f instanceof Error?f:void 0})}let d;try{d=await jx(u)}catch(f){throw new it({code:st.GENERATION_FAILED,message:`Replicate video download failed: ${f instanceof Error?f.message:String(f)}`,category:"network",severity:"medium",retriable:!0,context:{predictionId:u.id},originalError:f instanceof Error?f:void 0})}let p=Date.now()-i;return g.info(`[ReplicateVideoHandler] Generated ${d.length} bytes in ${p}ms \u2014 model ${a}`),{data:d,mediaType:"video/mp4",metadata:{duration:n.length??4,dimensions:this.calculateDimensions(n),model:a,provider:"replicate",aspectRatio:n.aspectRatio??"16:9",audioEnabled:!1,processingTime:p}}}detectImageType(e){return e.length<4?"jpeg":e[0]===137&&e[1]===80?"png":e[0]===255&&e[1]===216?"jpeg":e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70?"webp":"jpeg"}calculateDimensions(e){let t=e.aspectRatio??"16:9";return(e.resolution??"720p")==="1080p"?t==="1:1"?{width:1080,height:1080}:t==="9:16"?{width:1080,height:1920}:{width:1920,height:1080}:t==="1:1"?{width:720,height:720}:t==="9:16"?{width:720,height:1280}:{width:1280,height:720}}}});var yJe={};ee(yJe,{DIDAvatar:()=>uh});var iBr,hJe,aBr,cBr,uh,P5=_(()=>{"use strict";W();Pn();Hg();cx();vg();iBr="https://api.d-id.com",hJe=3e4,aBr=3e3,cBr=5*6e4,uh=class{maxAudioDurationSeconds=60;supportedFormats=["mp4"];apiKey;baseUrl;constructor(e){let t=(e??process.env.DID_API_KEY??process.env.D_ID_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.DID_BASE_URL??process.env.D_ID_BASE_URL??iBr).replace(/\/$/,"")}isConfigured(){return this.apiKey!==null}async generate(e){if(!this.apiKey)throw new $t({code:jt.PROVIDER_NOT_CONFIGURED,message:"DID_API_KEY not configured",category:"configuration",severity:"high",retriable:!1});if(!e.audio&&!e.text)throw new $t({code:jt.AUDIO_REQUIRED,message:"D-ID requires either `audio` (Buffer/path) or `text` (with voice id) to drive the talk",category:"validation",severity:"medium",retriable:!1});let t=Date.now(),n=await this.uploadImage(e.image),o=e.audio?await this.uploadAudio(e.audio):void 0,s=await this.submitTalk(e,n,o),i=await this.pollUntilDone(s,e.timeout??cBr,e.abortSignal);if(!i.result_url)throw new $t({code:jt.GENERATION_FAILED,message:`D-ID talk ${s} completed but no result_url returned`,category:"execution",severity:"high",retriable:!1,context:{talkId:s,completed:i}});try{await Bl(i.result_url)}catch(l){throw new $t({code:jt.GENERATION_FAILED,message:`D-ID result_url rejected as unsafe: ${l instanceof Error?l.message:String(l)}`,category:"validation",severity:"high",retriable:!1,context:{talkId:s,url:i.result_url}})}let a=await this.downloadResult(i.result_url),c=Date.now()-t;return g.info(`[DIDAvatar] Generated ${a.length} bytes in ${c}ms \u2014 talk ${s}`),{buffer:a,format:"mp4",size:a.length,duration:i.duration,provider:"d-id",metadata:{latency:c,provider:"d-id",jobId:s}}}async uploadImage(e){if(typeof e=="string"&&/^https:\/\//.test(e))return e;let t=await this.resolveBuffer(e),n=new FormData;n.append("image",new Blob([new Uint8Array(t)],{type:this.detectImageMime(t)}),"source.png");let o=await this.fetchWithTimeout(`${this.baseUrl}/images`,{method:"POST",headers:{Authorization:`Basic ${this.apiKey}`},body:n}),s=await this.assertOk(o,"image upload");if(!s.url)throw new $t({code:jt.GENERATION_FAILED,message:"D-ID image upload succeeded but returned no URL",category:"execution",severity:"high",retriable:!1});return s.url}async uploadAudio(e){if(typeof e=="string"&&/^https:\/\//.test(e))return e;let t=await this.resolveBuffer(e),n=this.detectAudioType(t),s={mp3:"mp3",mpeg:"mp3",wav:"wav",ogg:"ogg",mp4:"m4a"}[n]??"mp3",i=new FormData;i.append("audio",new Blob([new Uint8Array(t)],{type:`audio/${n}`}),`narration.${s}`);let a=await this.fetchWithTimeout(`${this.baseUrl}/audios`,{method:"POST",headers:{Authorization:`Basic ${this.apiKey}`},body:i}),c=await this.assertOk(a,"audio upload");if(!c.url)throw new $t({code:jt.GENERATION_FAILED,message:"D-ID audio upload succeeded but returned no URL",category:"execution",severity:"high",retriable:!1});return c.url}async submitTalk(e,t,n){let o=n?{type:"audio",audio_url:n}:{type:"text",input:e.text,provider:{type:"microsoft",voice_id:e.voice??"en-US-JennyNeural"}},s={source_url:t,script:o,config:{result_format:"mp4",stitch:!0}},i=await this.fetchWithTimeout(`${this.baseUrl}/talks`,{method:"POST",headers:{Authorization:`Basic ${this.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify(s)}),a=await this.assertOk(i,"talk submit");if(!a.id)throw new $t({code:jt.GENERATION_FAILED,message:"D-ID talk submit returned no id",category:"execution",severity:"high",retriable:!1});return a.id}async pollUntilDone(e,t,n){let o=Date.now();for(;Date.now()-o<t;){if(n?.aborted)throw new $t({code:jt.GENERATION_FAILED,message:`D-ID poll for talk ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{talkId:e}});let s=await this.fetchWithTimeout(`${this.baseUrl}/talks/${e}`,{method:"GET",headers:{Authorization:`Basic ${this.apiKey}`}},n),i=await this.assertOk(s,"talk status");if(i.status==="done")return i;if(i.status==="error"||i.status==="rejected")throw new $t({code:jt.GENERATION_FAILED,message:`D-ID talk ${e} ${i.status}: ${i.error?.description??"unknown"}`,category:"execution",severity:"high",retriable:!1,context:{talkId:e,status:i.status,error:i.error}});await new Promise((a,c)=>{let l=()=>{clearTimeout(u),c(new $t({code:jt.GENERATION_FAILED,message:`D-ID poll for talk ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{talkId:e}}))},u=setTimeout(()=>{n?.removeEventListener("abort",l),a()},aBr);n?.addEventListener("abort",l,{once:!0})})}throw new $t({code:jt.POLL_TIMEOUT,message:`D-ID talk ${e} did not complete within ${Math.round(t/1e3)}s`,category:"timeout",severity:"medium",retriable:!0,context:{talkId:e}})}async downloadResult(e){let t=await this.fetchWithTimeout(e,{method:"GET"});if(!t.ok)throw new $t({code:jt.GENERATION_FAILED,message:`D-ID result download failed: ${t.status}`,category:"network",severity:"medium",retriable:t.status>=500,context:{status:t.status,url:e}});try{return await Ha(t,268435456,"D-ID result")}catch(n){throw new $t({code:jt.GENERATION_FAILED,message:`D-ID result download rejected: ${n instanceof Error?n.message:String(n)}`,category:"network",severity:"high",retriable:!1,context:{url:e},originalError:n instanceof Error?n:void 0})}}async resolveBuffer(e){if(Buffer.isBuffer(e))return e;if(!/^https:\/\//.test(e))throw new $t({code:jt.INVALID_INPUT,message:`Invalid input: expected Buffer or HTTPS URL, got string "${e}". Local file reads are not supported.`,category:"validation",severity:"high",retriable:!1});try{await Bl(e)}catch(o){throw new $t({code:jt.INVALID_INPUT,message:`Unsafe URL rejected: ${o instanceof Error?o.message:String(o)}`,category:"validation",severity:"high",retriable:!1,context:{url:e}})}let t=await this.fetchWithTimeout(e,{method:"GET"});if(!t.ok)throw new $t({code:jt.INVALID_INPUT,message:`Failed to fetch input from ${e}: ${t.status}`,category:"network",severity:"medium",retriable:t.status>=500,context:{url:e,status:t.status}});let n=Math.max(52428800,26214400);try{return await Ha(t,n,"D-ID input")}catch(o){throw new $t({code:jt.INVALID_INPUT,message:`D-ID input download rejected: ${o instanceof Error?o.message:String(o)}`,category:"network",severity:"high",retriable:!1,context:{url:e},originalError:o instanceof Error?o:void 0})}}detectImageMime(e){return e.length<4?"image/jpeg":e[0]===137&&e[1]===80?"image/png":e[0]===255&&e[1]===216?"image/jpeg":e.length>=12&&e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70&&e[8]===87&&e[9]===69&&e[10]===66&&e[11]===80?"image/webp":"image/jpeg"}detectAudioType(e){return e.length<4?"mp3":e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70?"wav":e[0]===79&&e[1]===103&&e[2]===103&&e[3]===83?"ogg":e[0]===73&&e[1]===68&&e[2]===51?"mp3":e[0]===255&&(e[1]&224)===224?"mpeg":e.length>=8&&e[4]===102&&e[5]===116&&e[6]===121&&e[7]===112?"mp4":"mp3"}async fetchWithTimeout(e,t,n){let o=new AbortController,s=setTimeout(()=>o.abort(),hJe),i=()=>o.abort();n?.addEventListener("abort",i,{once:!0});try{return await fetch(e,{...t,signal:o.signal})}catch(a){throw a instanceof Error&&a.name==="AbortError"?n?.aborted?new $t({code:jt.GENERATION_FAILED,message:`D-ID request to ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,originalError:a}):new $t({code:jt.GENERATION_FAILED,message:`D-ID request to ${e} timed out after ${hJe/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:a}):a}finally{n?.removeEventListener("abort",i),clearTimeout(s)}}async assertOk(e,t){if(e.ok)return e.json();let n=await e.text(),o=e.status===408||e.status===429||e.status>=500;throw new $t({code:jt.GENERATION_FAILED,message:`D-ID ${t} failed: ${e.status} \u2014 ${Ms(n,500)}`,category:o?"network":"execution",severity:"high",retriable:o,context:{status:e.status,label:t}})}}});var xJe={};ee(xJe,{ReplicateAvatar:()=>dh});var lBr,dh,M5=_(()=>{"use strict";Hg();W();YD();QD();vg();cx();lBr="douwantech/musetalk:5501004e78525e4bbd9fa20d1e75ad51fddce5a274bec07b9b16d685e34eeaf8",dh=class{maxAudioDurationSeconds=60;supportedFormats=["mp4"];isConfigured(){return Od()!==null}async generate(e){let t=Od();if(!t)throw new $t({code:jt.PROVIDER_NOT_CONFIGURED,message:"REPLICATE_API_TOKEN not configured",category:"configuration",severity:"high",retriable:!1});if(!e.audio)throw new $t({code:jt.AUDIO_REQUIRED,message:"Replicate avatar handler (MuseTalk) requires `audio` (Buffer or path); text-only is not supported. Use D-ID for text-driven talks or chain TTS + Replicate.",category:"validation",severity:"medium",retriable:!1});let n=Date.now(),o=e.model??lBr,s=await this.resolveBuffer(e.image,26214400,"Replicate avatar reference image"),i=await this.resolveBuffer(e.audio,52428800,"Replicate avatar reference audio"),a=`data:image/${this.detectImageType(s)};base64,${s.toString("base64")}`,c=`data:audio/${this.detectAudioType(i)};base64,${i.toString("base64")}`,l;try{l=await Wg(t,{model:o,input:{image:a,audio:c,bbox_shift:0,fps:25}})}catch(p){throw new $t({code:jt.GENERATION_FAILED,message:`Replicate avatar generation failed: ${p instanceof Error?p.message:String(p)}`,category:"execution",severity:"high",retriable:!0,context:{model:o},originalError:p instanceof Error?p:void 0})}let u;try{u=await jx(l,268435456)}catch(p){throw new $t({code:jt.GENERATION_FAILED,message:`Replicate avatar download failed: ${p instanceof Error?p.message:String(p)}`,category:"network",severity:"medium",retriable:!0,context:{predictionId:l.id},originalError:p instanceof Error?p:void 0})}let d=Date.now()-n;return g.info(`[ReplicateAvatar] Generated ${u.length} bytes in ${d}ms \u2014 model ${o}`),{buffer:u,format:"mp4",size:u.length,provider:"replicate",metadata:{latency:d,provider:"replicate",model:o,jobId:l.id}}}async resolveBuffer(e,t=26214400,n="Replicate avatar input"){if(Buffer.isBuffer(e)){if(e.length>t)throw new $t({code:jt.INVALID_INPUT,message:`${n} too large: ${e.length} bytes exceeds ${t}`,category:"validation",severity:"high",retriable:!1});return e}if(!/^https:\/\//.test(e))throw new $t({code:jt.INVALID_INPUT,message:`Invalid input: expected Buffer or HTTPS URL, got string "${e}". Local file reads are not supported.`,category:"validation",severity:"high",retriable:!1});try{await Bl(e)}catch(c){throw new $t({code:jt.INVALID_INPUT,message:`Unsafe URL rejected: ${c instanceof Error?c.message:String(c)}`,category:"validation",severity:"high",retriable:!1,context:{url:e}})}let o=6e4,s=new AbortController,i=setTimeout(()=>s.abort(),o),a;try{a=await fetch(e,{signal:s.signal})}catch(c){throw c instanceof Error&&c.name==="AbortError"?new $t({code:jt.INVALID_INPUT,message:`Replicate avatar input fetch timed out after ${o/1e3}s: ${e}`,category:"network",severity:"medium",retriable:!0}):c}finally{clearTimeout(i)}if(!a.ok)throw new $t({code:jt.INVALID_INPUT,message:`Failed to fetch ${e}: ${a.status}`,category:"network",severity:"medium",retriable:a.status>=500});try{return await Ha(a,t,n)}catch(c){throw new $t({code:jt.INVALID_INPUT,message:`${n} too large: ${c instanceof Error?c.message:String(c)}`,category:"validation",severity:"high",retriable:!1,context:{url:e}})}}detectAudioType(e){return e.length<4?"mp3":e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70?"wav":e[0]===79&&e[1]===103&&e[2]===103&&e[3]===83?"ogg":e[0]===73&&e[1]===68&&e[2]===51?"mp3":e[0]===255&&(e[1]&224)===224?"mpeg":e.length>=8&&e[4]===102&&e[5]===116&&e[6]===121&&e[7]===112?"mp4":"mp3"}detectImageType(e){return e.length<4?"jpeg":e[0]===137&&e[1]===80?"png":e[0]===255&&e[1]===216?"jpeg":e.length>=12&&e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70&&e[8]===87&&e[9]===69&&e[10]===66&&e[11]===80?"webp":"jpeg"}}});var bJe={};ee(bJe,{HeyGenAvatar:()=>ph});var uBr,Cfe,dBr,vJe,ph,O5=_(()=>{"use strict";Hg();W();Pn();XD();uBr="https://api.heygen.com/v2",Cfe=3e4,dBr=5e3,vJe=5*6e4,ph=class{maxAudioDurationSeconds=300;supportedFormats=["mp4"];apiKey;baseUrl;constructor(e){let t=(e??process.env.HEYGEN_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.HEYGEN_BASE_URL??uBr).replace(/\/$/,"")}isConfigured(){return this.apiKey!==null}async generate(e){if(!this.apiKey)throw new $t({code:jt.PROVIDER_NOT_CONFIGURED,message:"HEYGEN_API_KEY not configured",category:"configuration",severity:"high",retriable:!1});if(!e.text&&!e.audio)throw new $t({code:jt.AUDIO_REQUIRED,message:"HeyGen requires either `text` or `audio` to drive the avatar",category:"validation",severity:"medium",retriable:!1});let t=Date.now(),n=e.abortSignal,o=await this.submitVideo(e),s=await this.pollUntilComplete(o,n),i=await this.download(s),a=Date.now()-t;return g.info(`[HeyGenAvatar] Generated ${i.length} bytes in ${a}ms \u2014 video ${o}`),{buffer:i,format:"mp4",size:i.length,provider:"heygen",metadata:{latency:a,provider:"heygen",jobId:o}}}async submitVideo(e){let t=e,n=t.avatarId??(typeof e.image=="string"&&/^[a-zA-Z0-9_-]{20,}$/.test(e.image)?e.image:void 0);if(!n)throw new $t({code:jt.INVALID_INPUT,message:"HeyGen requires `avatarId` (HeyGen avatar catalog id). Pass via options.avatarId or as options.image with a valid HeyGen id.",category:"validation",severity:"medium",retriable:!1});if(e.audio!==void 0){if(Buffer.isBuffer(e.audio))throw new $t({code:jt.INVALID_INPUT,message:"HeyGen requires a publicly accessible audio URL; got a binary Buffer. Upload the audio to a hosted location and pass the HTTPS URL instead.",category:"validation",severity:"medium",retriable:!1});if(typeof e.audio!="string"||!/^https?:\/\//i.test(e.audio))throw new $t({code:jt.INVALID_INPUT,message:"HeyGen requires a publicly accessible HTTPS audio URL; got an unsupported audio input type. Upload the audio to a hosted location and pass the HTTPS URL instead.",category:"validation",severity:"medium",retriable:!1})}let o=e.audio?{type:"audio",audio_url:e.audio}:{type:"text",input_text:e.text,voice_id:e.voice??"1bd001e7e50f421d891986aad5158bc8"},s={video_inputs:[{character:{type:"avatar",avatar_id:n,avatar_style:"normal"},voice:o,background:{type:"color",value:t.backgroundColor??"#FFFFFF"}}],dimension:{width:t.width??1280,height:t.height??720}},i=await this.fetchWithTimeout(`${this.baseUrl}/video/generate`,{method:"POST",headers:{"X-API-Key":this.apiKey,"Content-Type":"application/json"},body:JSON.stringify(s)});if(!i.ok){let l=await i.text(),u=i.status===408||i.status===429||i.status>=500;throw new $t({code:jt.GENERATION_FAILED,message:`HeyGen submit failed: ${i.status} \u2014 ${Ms(l,500)}`,category:u?"network":"execution",severity:"high",retriable:u,context:{status:i.status}})}let a=await i.json(),c=a.data?.video_id;if(!c)throw new $t({code:jt.GENERATION_FAILED,message:"HeyGen submit response missing video_id",category:"execution",severity:"high",retriable:!1,context:{response:a}});return c}async pollUntilComplete(e,t){let n=Date.now(),o=this.baseUrl.replace(/\/v2$/,"/v1");for(;Date.now()-n<vJe;){if(t?.aborted)throw new $t({code:jt.GENERATION_FAILED,message:`HeyGen poll for video ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{videoId:e}});let s=await this.fetchWithTimeout(`${o}/video_status.get?video_id=${e}`,{method:"GET",headers:{"X-API-Key":this.apiKey}},t);if(!s.ok){let a=await s.text();throw new $t({code:jt.GENERATION_FAILED,message:`HeyGen poll failed: ${s.status} \u2014 ${Ms(a,500)}`,category:"network",severity:"medium",retriable:s.status>=500,context:{status:s.status,videoId:e}})}let i=await s.json();if(i.data?.status==="completed"){let a=i.data.video_url;if(!a)throw new $t({code:jt.GENERATION_FAILED,message:`HeyGen video ${e} completed but no URL returned`,category:"execution",severity:"high",retriable:!1,context:{videoId:e,data:i}});return a}if(i.data?.status==="failed")throw new $t({code:jt.GENERATION_FAILED,message:`HeyGen video ${e} failed: ${i.data?.error?.message??"unknown"}`,category:"execution",severity:"high",retriable:!1,context:{videoId:e,data:i}});await new Promise((a,c)=>{let l=()=>{clearTimeout(u),c(new $t({code:jt.GENERATION_FAILED,message:`HeyGen poll for video ${e} aborted by caller`,category:"network",severity:"medium",retriable:!1,context:{videoId:e}}))},u=setTimeout(()=>{t?.removeEventListener("abort",l),a()},dBr);t?.addEventListener("abort",l,{once:!0})})}throw new $t({code:jt.POLL_TIMEOUT,message:`HeyGen video ${e} did not complete within ${vJe/1e3}s`,category:"timeout",severity:"medium",retriable:!0,context:{videoId:e}})}async download(e){try{return await zx(e,{maxBytes:268435456,label:"HeyGen video",timeoutMs:Cfe})}catch(t){throw new $t({code:jt.GENERATION_FAILED,message:`HeyGen video download rejected: ${t instanceof Error?t.message:String(t)}`,category:"network",severity:"high",retriable:!1,context:{url:e},originalError:t instanceof Error?t:void 0})}}async fetchWithTimeout(e,t,n){let o=new AbortController,s=!1,i=setTimeout(()=>{s=!0,o.abort()},Cfe),a=()=>o.abort();n?.addEventListener("abort",a,{once:!0});try{return await fetch(e,{...t,signal:o.signal})}catch(c){throw c instanceof Error&&c.name==="AbortError"?n?.aborted?new $t({code:jt.GENERATION_FAILED,message:`HeyGen request to ${e} was aborted by the caller`,category:"network",severity:"medium",retriable:!1,originalError:c}):s?new $t({code:jt.GENERATION_FAILED,message:`HeyGen request to ${e} timed out after ${Cfe/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:c}):new $t({code:jt.GENERATION_FAILED,message:`HeyGen request to ${e} was aborted`,category:"network",severity:"high",retriable:!0,originalError:c}):c}finally{n?.removeEventListener("abort",a),clearTimeout(i)}}}});var TJe={};ee(TJe,{BeatovenMusic:()=>mh});var pBr,LC,mBr,fBr,mh,N5=_(()=>{"use strict";W();of();vg();cx();pBr="https://public-api.beatoven.ai",LC=3e4,mBr=3e3,fBr=5*6e4,mh=class{maxDurationSeconds=300;supportedFormats=["mp3","wav"];supportedGenres=["ambient","cinematic","corporate","lo-fi","rock","pop","electronic","orchestral","folk"];apiKey;baseUrl;constructor(e){let t=(e??process.env.BEATOVEN_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.BEATOVEN_BASE_URL??pBr).replace(/\/$/,"")}isConfigured(){return this.apiKey!==null}async generate(e){if(!this.apiKey)throw new lr({code:Sr.PROVIDER_NOT_CONFIGURED,message:"BEATOVEN_API_KEY not configured",category:"configuration",severity:"high",retriable:!1});let t=Date.now(),n=e.format??"mp3";this.supportedFormats.includes(n)||g.warn(`[BeatovenMusic] Format "${n}" not supported \u2014 falling back to "mp3"`);let o=this.supportedFormats.includes(n)?n:"mp3",i=(await this.submitCompose(e,o)).task_id,a=await this.pollUntilComposed(i,e.timeout??fBr),c=a.meta?.track_url;if(!c)throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven task ${i} completed but no track_url returned`,category:"execution",severity:"high",retriable:!1,context:{taskId:i,taskResult:a}});let l=await this.downloadTrack(c),u=Date.now()-t;return g.info(`[BeatovenMusic] Generated ${l.length} bytes (${o}) in ${u}ms \u2014 task ${i}`),{buffer:l,format:o,size:l.length,duration:a.meta?.duration,provider:"beatoven",metadata:{latency:u,provider:"beatoven",model:"beatoven-default",jobId:i,trackId:a.meta?.track_id,projectId:a.meta?.project_id,requestedFormat:e.format}}}async submitCompose(e,t){let n=(e.duration??60)*1e3,o=[e.prompt];e.genre&&o.push(`Genre: ${e.genre}`),e.mood&&o.push(`Mood: ${e.mood}`),e.tempo!==void 0&&o.push(`Tempo: ${e.tempo} BPM`);let s={prompt:{text:o.join(". ")},duration:n,format:t},i=new AbortController,a=setTimeout(()=>i.abort(),LC),c;try{c=await fetch(`${this.baseUrl}/api/v1/tracks/compose`,{method:"POST",headers:{Authorization:`Bearer ${this.apiKey}`,"Content-Type":"application/json"},body:JSON.stringify(s),signal:i.signal})}catch(u){throw u instanceof Error&&u.name==="AbortError"?new lr({code:Sr.GENERATION_FAILED,message:`Beatoven compose request timed out after ${LC/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:u}):new lr({code:Sr.GENERATION_FAILED,message:`Beatoven compose network error: ${u instanceof Error?u.message:String(u)}`,category:"network",severity:"high",retriable:!0,originalError:u instanceof Error?u:void 0})}finally{clearTimeout(a)}if(!c.ok){let u=await c.text(),d=c.status===408||c.status===429||c.status>=500;throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven compose failed: ${c.status} \u2014 ${u}`,category:d?"network":"execution",severity:"high",retriable:d,context:{status:c.status,body:u}})}let l=await c.json();if(!l.task_id)throw new lr({code:Sr.GENERATION_FAILED,message:"Beatoven compose response missing task_id",category:"execution",severity:"high",retriable:!1,context:{response:l}});return l}async pollUntilComposed(e,t){let n=Date.now();for(;Date.now()-n<t;){let o=await this.fetchTaskStatus(e);if(o.status==="composed")return o;if(o.status==="failed")throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven task ${e} failed: ${o.message??"unknown"}`,category:"execution",severity:"high",retriable:!1,context:{taskId:e,status:o}});await new Promise(s=>setTimeout(s,mBr))}throw new lr({code:Sr.POLL_TIMEOUT,message:`Beatoven task ${e} did not complete within ${Math.round(t/1e3)}s`,category:"timeout",severity:"medium",retriable:!0,context:{taskId:e,totalTimeoutMs:t}})}async fetchTaskStatus(e){let t=new AbortController,n=setTimeout(()=>t.abort(),LC),o;try{o=await fetch(`${this.baseUrl}/api/v1/tasks/${e}`,{method:"GET",headers:{Authorization:`Bearer ${this.apiKey}`},signal:t.signal})}catch(s){throw s instanceof Error&&s.name==="AbortError"?new lr({code:Sr.GENERATION_FAILED,message:`Beatoven status poll timed out after ${LC/1e3}s`,category:"network",severity:"medium",retriable:!0,originalError:s}):new lr({code:Sr.GENERATION_FAILED,message:`Beatoven status poll network error: ${s instanceof Error?s.message:String(s)}`,category:"network",severity:"medium",retriable:!0,originalError:s instanceof Error?s:void 0,context:{taskId:e}})}finally{clearTimeout(n)}if(!o.ok){let s=await o.text();throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven status request failed: ${o.status} \u2014 ${s}`,category:"execution",severity:"medium",retriable:o.status>=500,context:{status:o.status,taskId:e}})}return await o.json()}async downloadTrack(e){try{await Bl(e)}catch(s){throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven track URL rejected: ${s instanceof Error?s.message:String(s)}`,category:"validation",severity:"high",retriable:!1,context:{url:e}})}let t=new AbortController,n=setTimeout(()=>t.abort(),LC),o;try{o=await fetch(e,{signal:t.signal})}catch(s){throw s instanceof Error&&s.name==="AbortError"?new lr({code:Sr.GENERATION_FAILED,message:`Beatoven track download timed out after ${LC/1e3}s`,category:"network",severity:"medium",retriable:!0,originalError:s}):new lr({code:Sr.GENERATION_FAILED,message:`Beatoven track download network error: ${s instanceof Error?s.message:String(s)}`,category:"network",severity:"medium",retriable:!0,originalError:s instanceof Error?s:void 0,context:{url:e}})}finally{clearTimeout(n)}if(!o.ok)throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven track download failed: ${o.status}`,category:"network",severity:"medium",retriable:o.status>=500,context:{status:o.status,url:e}});try{return await Ha(o,52428800,"Beatoven track")}catch(s){throw new lr({code:Sr.GENERATION_FAILED,message:`Beatoven track download exceeded size limit: ${s instanceof Error?s.message:String(s)}`,category:"execution",severity:"high",retriable:!1,context:{url:e}})}}}});var SJe={};ee(SJe,{ReplicateMusic:()=>fh});var gBr,fh,D5=_(()=>{"use strict";of();W();YD();QD();vg();cx();gBr="meta/musicgen:7be0f12c54a8d033a0fbd14418c9af98962da9a86f5ff7811f9b3423a1f0b7d7",fh=class{maxDurationSeconds=30;supportedFormats=["mp3","wav"];supportedGenres=["ambient","classical","electronic","rock","jazz","hip-hop","pop","lo-fi","cinematic","orchestral"];isConfigured(){return Od()!==null}async generate(e){let t=Od();if(!t)throw new lr({code:Sr.PROVIDER_NOT_CONFIGURED,message:"REPLICATE_API_TOKEN not configured",category:"configuration",severity:"high",retriable:!1});let n=Date.now(),o=e.model??gBr,s=e.format??"mp3",i=this.supportedFormats.includes(s)?s:"mp3",a=Math.min(e.duration??8,this.maxDurationSeconds),c={prompt:this.buildPrompt(e),duration:a,output_format:i,model_version:"stereo-large",normalization_strategy:"loudness"};if(e.tempo!==void 0&&(c.bpm=e.tempo),e.referenceAudio){let p=await this.resolveBuffer(e.referenceAudio);c.input_audio=`data:audio/${this.detectAudioType(p)};base64,${p.toString("base64")}`}let l;try{l=await Wg(t,{model:o,input:c})}catch(p){throw new lr({code:Sr.GENERATION_FAILED,message:`Replicate music generation failed: ${p instanceof Error?p.message:String(p)}`,category:"execution",severity:"high",retriable:!0,context:{model:o,duration:a,format:i,hasReferenceAudio:e.referenceAudio!==void 0},originalError:p instanceof Error?p:void 0})}let u;try{u=await jx(l,52428800)}catch(p){throw new lr({code:Sr.GENERATION_FAILED,message:`Replicate music download failed: ${p instanceof Error?p.message:String(p)}`,category:"network",severity:"medium",retriable:!0,context:{predictionId:l.id},originalError:p instanceof Error?p:void 0})}let d=Date.now()-n;return g.info(`[ReplicateMusic] Generated ${u.length} bytes in ${d}ms \u2014 model ${o}`),{buffer:u,format:i,size:u.length,duration:a,provider:"replicate",metadata:{latency:d,provider:"replicate",model:o,jobId:l.id}}}buildPrompt(e){let t=[e.prompt];return e.genre&&t.push(`Genre: ${e.genre}`),e.mood&&t.push(`Mood: ${e.mood}`),e.tempo!==void 0&&t.push(`${e.tempo} BPM`),t.join(". ")}async resolveBuffer(e){if(Buffer.isBuffer(e))return e;if(!/^https:\/\//.test(e))throw new lr({code:Sr.INVALID_INPUT,message:`Invalid input: expected Buffer or HTTPS URL, got string "${e}". Local file reads are not supported.`,category:"validation",severity:"high",retriable:!1});try{await Bl(e)}catch(i){throw new lr({code:Sr.INVALID_INPUT,message:`Unsafe URL rejected: ${i instanceof Error?i.message:String(i)}`,category:"validation",severity:"high",retriable:!1,context:{url:e}})}let t=6e4,n=new AbortController,o=setTimeout(()=>n.abort(),t),s;try{s=await fetch(e,{signal:n.signal})}catch(i){throw i instanceof Error&&i.name==="AbortError"?new lr({code:Sr.GENERATION_FAILED,message:`Replicate music reference-audio fetch timed out after ${t/1e3}s: ${e}`,category:"network",severity:"medium",retriable:!0}):i}finally{clearTimeout(o)}if(!s.ok)throw new lr({code:Sr.GENERATION_FAILED,message:`Failed to fetch reference audio: ${e}: ${s.status}`,category:"network",severity:"medium",retriable:s.status>=500});try{return await Ha(s,52428800,"Replicate reference audio")}catch(i){throw new lr({code:Sr.INVALID_INPUT,message:`Replicate reference audio too large: ${i instanceof Error?i.message:String(i)}`,category:"validation",severity:"high",retriable:!1,context:{url:e}})}}detectAudioType(e){return e.length<4?"mp3":e[0]===82&&e[1]===73&&e[2]===70&&e[3]===70?"wav":e[0]===79&&e[1]===103&&e[2]===103&&e[3]===83?"ogg":e[0]===73&&e[1]===68&&e[2]===51?"mp3":e[0]===255&&(e[1]&224)===224?"mpeg":e.length>=8&&e[4]===102&&e[5]===116&&e[6]===121&&e[7]===112?"mp4":"mp3"}}});var EJe={};ee(EJe,{ElevenLabsMusic:()=>gh});var hBr,wJe,gh,L5=_(()=>{"use strict";of();W();vg();hBr="https://api.elevenlabs.io/v1",wJe=6e4,gh=class{maxDurationSeconds=22;supportedFormats=["mp3"];supportedGenres=["ambient","cinematic","lo-fi","electronic","orchestral","soundscape"];apiKey;baseUrl;constructor(e){let t=(e??process.env.ELEVENLABS_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.ELEVENLABS_BASE_URL??hBr).replace(/\/$/,"")}isConfigured(){return this.apiKey!==null}async generate(e){if(!this.apiKey)throw new lr({code:Sr.PROVIDER_NOT_CONFIGURED,message:"ELEVENLABS_API_KEY not configured (shared with ElevenLabs TTS \u2014 same account, different endpoint)",category:"configuration",severity:"high",retriable:!1});let t=e.prompt?.trim();if(!t)throw new lr({code:Sr.INVALID_INPUT,message:"ElevenLabs Music requires a non-empty prompt",category:"validation",severity:"low",retriable:!1});let n=e.duration??8;if(n<=0||n>this.maxDurationSeconds)throw new lr({code:Sr.INVALID_INPUT,message:`ElevenLabs Music duration must be between 1 and ${this.maxDurationSeconds} seconds; got ${n}`,category:"validation",severity:"low",retriable:!1,context:{requested:n,maximum:this.maxDurationSeconds}});let o=Date.now(),s=n,i={text:this.buildPrompt({...e,prompt:t}),duration_seconds:s,prompt_influence:.3},a=new AbortController,c=setTimeout(()=>a.abort(),wJe),l;try{l=await fetch(`${this.baseUrl}/sound-generation`,{method:"POST",headers:{"xi-api-key":this.apiKey,"Content-Type":"application/json",Accept:"audio/mpeg"},body:JSON.stringify(i),signal:a.signal})}catch(p){throw p instanceof Error&&p.name==="AbortError"?new lr({code:Sr.GENERATION_FAILED,message:`ElevenLabs Music request timed out after ${wJe/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:p}):new lr({code:Sr.GENERATION_FAILED,message:`ElevenLabs Music network error: ${p instanceof Error?p.message:String(p)}`,category:"network",severity:"high",retriable:!0,originalError:p instanceof Error?p:void 0})}finally{clearTimeout(c)}if(!l.ok){let p=await l.text(),f=l.status===408||l.status===429||l.status>=500;throw new lr({code:Sr.GENERATION_FAILED,message:`ElevenLabs Music synthesis failed: ${l.status} \u2014 ${p}`,category:f?"network":"execution",severity:"high",retriable:f,context:{status:l.status}})}let u=await Ha(l,52428800,"ElevenLabs music"),d=Date.now()-o;return g.info(`[ElevenLabsMusic] Generated ${u.length} bytes in ${d}ms`),{buffer:u,format:"mp3",size:u.length,duration:s,provider:"elevenlabs-music",metadata:{latency:d,provider:"elevenlabs-music",model:"elevenlabs-sound-v1"}}}buildPrompt(e){let t=[e.prompt];return e.genre&&t.push(`Genre: ${e.genre}`),e.mood&&t.push(`Mood: ${e.mood}`),e.tempo!==void 0&&t.push(`${e.tempo} BPM`),t.join(". ")}}});var kJe={};ee(kJe,{LyriaMusic:()=>hh});var yBr,xBr,_Je,hh,U5=_(()=>{"use strict";of();W();Pn();yBr="https://generativelanguage.googleapis.com/v1beta",xBr="lyria-3-pro-preview",_Je=12e4,hh=class{maxDurationSeconds=30;supportedFormats=["wav"];supportedGenres=["ambient","classical","electronic","jazz","rock","pop","lo-fi","cinematic","orchestral","world"];apiKey;baseUrl;model;constructor(e){let t=(e??process.env.GOOGLE_AI_LYRIA_API_KEY??process.env.GOOGLE_API_KEY??process.env.GOOGLE_AI_API_KEY??process.env.GEMINI_API_KEY??"").trim();this.apiKey=t.length>0?t:null,this.baseUrl=(process.env.LYRIA_BASE_URL??yBr).replace(/\/$/,""),this.model=process.env.LYRIA_MODEL??xBr}isConfigured(){return this.apiKey!==null}async generate(e){if(!this.apiKey)throw new lr({code:Sr.PROVIDER_NOT_CONFIGURED,message:"Lyria requires one of: GOOGLE_API_KEY, GOOGLE_AI_LYRIA_API_KEY, GOOGLE_AI_API_KEY, or GEMINI_API_KEY",category:"configuration",severity:"high",retriable:!1});let t=Date.now(),n=Math.min(e.duration??16,this.maxDurationSeconds),s={contents:[{parts:[{text:`${this.buildPrompt(e)}. Duration: ${n} seconds`}]}],generationConfig:{responseModalities:["AUDIO"]}},i=new AbortController,a=setTimeout(()=>i.abort(),_Je),c;try{c=await fetch(`${this.baseUrl}/models/${this.model}:generateContent?key=${this.apiKey}`,{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(s),signal:i.signal})}catch(f){throw f instanceof Error&&f.name==="AbortError"?new lr({code:Sr.GENERATION_FAILED,message:`Lyria request timed out after ${_Je/1e3}s`,category:"network",severity:"high",retriable:!0,originalError:f}):f}finally{clearTimeout(a)}if(!c.ok){let f=await c.text(),h=c.status===408||c.status===429||c.status>=500;throw new lr({code:Sr.GENERATION_FAILED,message:`Lyria generation failed: ${c.status} \u2014 ${Ms(f)}`,category:h?"network":"execution",severity:"high",retriable:h,context:{status:c.status}})}let l=await c.json(),u=l.candidates?.[0]?.content?.parts?.find(f=>f.inlineData?.mimeType?.startsWith("audio/"));if(!u?.inlineData?.data)throw new lr({code:Sr.GENERATION_FAILED,message:"Lyria response missing audio data",category:"execution",severity:"high",retriable:!1,context:{response:l}});let d=Buffer.from(u.inlineData.data,"base64"),p=Date.now()-t;return g.info(`[LyriaMusic] Generated ${d.length} bytes in ${p}ms \u2014 model ${this.model}`),{buffer:d,format:"wav",size:d.length,duration:n,provider:"lyria",metadata:{latency:p,provider:"lyria",model:this.model,sampleRate:48e3}}}buildPrompt(e){let t=[e.prompt];return e.genre&&t.push(`Genre: ${e.genre}`),e.mood&&t.push(`Mood: ${e.mood}`),e.tempo!==void 0&&t.push(`${e.tempo} BPM`),t.join(". ")}}});var bl,fE=_(()=>{"use strict";Xu();W();bl=class r{static registered=!1;static registrationPromise=null;static options={enableManualMCP:!1};static realtimeRegistration={};static getRegistrationReport(){return{realtime:{...this.realtimeRegistration}}}static async registerAllProviders(){if(!this.registered){if(this.registrationPromise)return this.registrationPromise;this.registrationPromise=this._doRegister();try{await this.registrationPromise}catch(e){throw this.registrationPromise=null,e}}}static async _doRegister(){try{let{ProviderFactory:e}=await Promise.resolve().then(()=>(Xu(),s8));e.registerProvider("google-ai",async(t,n,o,s,i)=>{let a=i,{GoogleAIStudioProvider:c}=await Promise.resolve().then(()=>(v$e(),x$e));return new c(t,o,a)},"gemini-2.5-flash",["googleAiStudio","google","gemini","google-ai","google-ai-studio"]),e.registerProvider("openai",async(t,n,o,s,i)=>{let a=i,{OpenAIProvider:c}=await Promise.resolve().then(()=>(p2e(),d2e));return new c(t,o,void 0,a)},"gpt-4o-mini",["gpt","chatgpt"]),e.registerProvider("anthropic",async(t,n,o,s,i)=>{let a=i,{AnthropicProvider:c}=await Promise.resolve().then(()=>(nje(),rje));return new c(t,o,void 0,a)},"claude-sonnet-4-6",["claude","anthropic"]),e.registerProvider("bedrock",async(t,n,o,s,i)=>{let a=i,{AmazonBedrockProvider:c}=await Promise.resolve().then(()=>(uje(),lje));return new c(t,o,s,a)},void 0,["bedrock","aws"]),e.registerProvider("azure",async(t,n,o,s,i)=>{let a=i,{AzureOpenAIProvider:c}=await Promise.resolve().then(()=>(pje(),dje));return new c(t,o,void 0,a)},process.env.AZURE_MODEL||process.env.AZURE_OPENAI_MODEL||process.env.AZURE_OPENAI_DEPLOYMENT||process.env.AZURE_OPENAI_DEPLOYMENT_ID||"gpt-4o-mini",["azure","azureOpenai"]),e.registerProvider("vertex",async(t,n,o,s,i)=>{let a=i,{GoogleVertexProvider:c}=await Promise.resolve().then(()=>(_je(),Eje));return new c(t,n,o,s,a)},"claude-sonnet-4-6",["vertex","googleVertex"]),e.registerProvider("huggingface",async(t,n,o,s,i)=>{let a=i,{HuggingFaceProvider:c}=await Promise.resolve().then(()=>(Cje(),kje));return new c(t,void 0,a)},process.env.HUGGINGFACE_MODEL||"Qwen/Qwen2.5-72B-Instruct",["huggingface","hf"]),e.registerProvider("mistral",async(t,n,o,s,i)=>{let a=i,{MistralProvider:c}=await Promise.resolve().then(()=>(Aje(),Rje));return new c(t,o,void 0,a)},"mistral-large-latest",["mistral"]),e.registerProvider("ollama",async(t,n,o,s,i)=>{let a=i,{OllamaProvider:c}=await Promise.resolve().then(()=>(Oje(),Mje));return new c(t,o,void 0,a)},process.env.OLLAMA_MODEL||"llama3.2:latest",["ollama","local"]),e.registerProvider("litellm",async(t,n,o,s,i)=>{let a=i,{LiteLLMProvider:c}=await Promise.resolve().then(()=>(Lje(),Dje));return new c(t,o,void 0,a)},process.env.LITELLM_MODEL||"openai/gpt-4o-mini",["litellm"]),e.registerProvider("openai-compatible",async(t,n,o,s,i)=>{let a=i,{OpenAICompatibleProvider:c}=await Promise.resolve().then(()=>($je(),Fje));return new c(t,o,void 0,a)},process.env.OPENAI_COMPATIBLE_MODEL||void 0,["openai-compatible","vllm","compatible"]),e.registerProvider("openrouter",async(t,n,o,s,i)=>{let a=i,{OpenRouterProvider:c}=await Promise.resolve().then(()=>(zje(),Bje));return new c(t,o,void 0,a)},process.env.OPENROUTER_MODEL||"anthropic/claude-sonnet-4.5",["openrouter","or"]),e.registerProvider("sagemaker",async(t,n,o,s,i)=>{let a=i,{AmazonSageMakerProvider:c}=await Promise.resolve().then(()=>(gGe(),fGe));return new c(t,void 0,s,void 0,a)},process.env.SAGEMAKER_MODEL||"sagemaker-model",["sagemaker","aws-sagemaker"]),e.registerProvider("deepseek",async(t,n,o,s,i)=>{let a=i,{DeepSeekProvider:c}=await Promise.resolve().then(()=>(yGe(),hGe));return new c(t,o,void 0,a)},process.env.DEEPSEEK_MODEL||"deepseek-chat",["deepseek","ds"]),e.registerProvider("nvidia-nim",async(t,n,o,s,i)=>{let a=i,{NvidiaNimProvider:c}=await Promise.resolve().then(()=>(EGe(),wGe));return new c(t,o,void 0,a)},process.env.NVIDIA_NIM_MODEL||"meta/llama-3.3-70b-instruct",["nvidia","nim","nvidia-nim"]),e.registerProvider("lm-studio",async(t,n,o,s,i)=>{let a=i,{LMStudioProvider:c}=await Promise.resolve().then(()=>(RGe(),CGe));return new c(t,o,void 0,a)},process.env.LM_STUDIO_MODEL||void 0,["lmstudio","lm-studio","lms"]),e.registerProvider("llamacpp",async(t,n,o,s,i)=>{let a=i,{LlamaCppProvider:c}=await Promise.resolve().then(()=>(IGe(),AGe));return new c(t,o,void 0,a)},process.env.LLAMACPP_MODEL||void 0,["llamacpp","llama.cpp","llama-cpp"]),e.registerProvider("xai",async(t,n,o,s,i)=>{let a=i,{XaiProvider:c}=await Promise.resolve().then(()=>(MGe(),PGe));return new c(t,o,void 0,a)},process.env.XAI_MODEL||"grok-3",["xai","grok"]),e.registerProvider("groq",async(t,n,o,s,i)=>{let a=i,{GroqProvider:c}=await Promise.resolve().then(()=>(NGe(),OGe));return new c(t,o,void 0,a)},process.env.GROQ_MODEL||"llama-3.3-70b-versatile",["groq"]),e.registerProvider("cohere",async(t,n,o,s,i)=>{let a=i,{CohereProvider:c}=await Promise.resolve().then(()=>(UGe(),LGe));return new c(t,o,void 0,a)},process.env.COHERE_MODEL||"command-r-plus-08-2024",["cohere"]),e.registerProvider("together-ai",async(t,n,o,s,i)=>{let a=i,{TogetherAIProvider:c}=await Promise.resolve().then(()=>($Ge(),FGe));return new c(t,o,void 0,a)},process.env.TOGETHER_MODEL||"meta-llama/Llama-3.3-70B-Instruct-Turbo",["together-ai","together"]),e.registerProvider("fireworks",async(t,n,o,s,i)=>{let a=i,{FireworksProvider:c}=await Promise.resolve().then(()=>(zGe(),BGe));return new c(t,o,void 0,a)},process.env.FIREWORKS_MODEL||"accounts/fireworks/models/deepseek-v4-pro",["fireworks"]),e.registerProvider("perplexity",async(t,n,o,s,i)=>{let a=i,{PerplexityProvider:c}=await Promise.resolve().then(()=>(GGe(),jGe));return new c(t,o,void 0,a)},process.env.PERPLEXITY_MODEL||"sonar",["perplexity","pplx"]),e.registerProvider("cloudflare",async(t,n,o,s,i)=>{let a=i,{CloudflareProvider:c}=await Promise.resolve().then(()=>(qGe(),VGe));return new c(t,o,void 0,a)},process.env.CLOUDFLARE_MODEL||"@cf/meta/llama-3.3-70b-instruct-fp8-fast",["cloudflare","workers-ai","cf-ai"]),e.registerProvider("voyage",async(t,n,o,s,i)=>{let a=i,{VoyageProvider:c}=await DKe().then(()=>NKe);return new c(t,o,void 0,a)},process.env.VOYAGE_MODEL||"voyage-3.5",["voyage","voyage-ai"]),e.registerProvider("jina",async(t,n,o,s,i)=>{let a=i,{JinaProvider:c}=await UKe().then(()=>LKe);return new c(t,o,void 0,a)},process.env.JINA_MODEL||"jina-embeddings-v3",["jina","jina-ai"]),e.registerProvider("stability",async(t,n,o,s,i)=>{let a=i,{StabilityProvider:c}=await zKe().then(()=>BKe);return new c(t,o,void 0,a)},process.env.STABILITY_MODEL||"stable-image-ultra",["stability","stability-ai","sd"]),e.registerProvider("ideogram",async(t,n,o,s,i)=>{let a=i,{IdeogramProvider:c}=await qKe().then(()=>VKe);return new c(t,o,void 0,a)},process.env.IDEOGRAM_MODEL||"V_3",["ideogram"]),e.registerProvider("replicate",async(t,n,o,s,i)=>{let a=i,{ReplicateProvider:c}=await KKe().then(()=>WKe);return new c(t,o,void 0,a)},process.env.REPLICATE_MODEL||"meta/meta-llama-3-70b-instruct",["replicate"]),e.registerProvider("recraft",async(t,n,o,s,i)=>{let a=i,{RecraftProvider:c}=await ZKe().then(()=>XKe);return new c(t,o,void 0,a)},process.env.RECRAFT_MODEL||"recraftv3",["recraft"]),g.debug("All AI providers registered successfully");try{let{GoogleTTSHandler:t}=await Promise.resolve().then(()=>(VW(),t6e)),{TTSProcessor:n}=await Promise.resolve().then(()=>(ha(),py)),o=new t;n.registerHandler("google-ai",o),n.registerHandler("vertex",o),g.debug("TTS handlers registered successfully",{providers:["google-ai","vertex"]})}catch(t){g.warn("Failed to register TTS handlers - TTS functionality will be unavailable",{error:t instanceof Error?t.message:String(t)})}try{let{TTSProcessor:t}=await Promise.resolve().then(()=>(ha(),py)),{OpenAITTS:n}=await Promise.resolve().then(()=>(qW(),r6e));t.registerHandler("openai-tts",new n)}catch(t){g.debug(`[ProviderRegistry] openai-tts registration skipped: ${t instanceof Error?t.message:String(t)}`)}try{let{TTSProcessor:t}=await Promise.resolve().then(()=>(ha(),py)),{ElevenLabsTTS:n}=await Promise.resolve().then(()=>(HW(),n6e)),o=new n;t.registerHandler("elevenlabs",o),t.registerHandler("elevenlabs-tts",o)}catch(t){g.debug(`[ProviderRegistry] elevenlabs registration skipped: ${t instanceof Error?t.message:String(t)}`)}try{let{TTSProcessor:t}=await Promise.resolve().then(()=>(ha(),py)),{AzureTTS:n}=await Promise.resolve().then(()=>(WW(),o6e));t.registerHandler("azure-tts",new n)}catch(t){g.debug(`[ProviderRegistry] azure-tts registration skipped: ${t instanceof Error?t.message:String(t)}`)}try{let{TTSProcessor:t}=await Promise.resolve().then(()=>(ha(),py));if(!t.supports("fish-audio")){let{FishAudioTTS:n}=await Promise.resolve().then(()=>(KW(),i6e));t.registerHandler("fish-audio",new n)}}catch(t){g.debug(`[ProviderRegistry] fish-audio registration skipped: ${t instanceof Error?t.message:String(t)}`)}try{let{TTSProcessor:t}=await Promise.resolve().then(()=>(ha(),py));if(!t.supports("cartesia")){let{CartesiaTTS:n}=await Promise.resolve().then(()=>(JW(),c6e));t.registerHandler("cartesia",new n)}}catch(t){g.debug(`[ProviderRegistry] cartesia registration skipped: ${t instanceof Error?t.message:String(t)}`)}try{let{STTProcessor:t}=await Promise.resolve().then(()=>(mC(),sW));try{let{OpenAISTT:n}=await Promise.resolve().then(()=>(YW(),l6e)),o=new n;t.registerHandler("whisper",o),t.registerHandler("openai-stt",o)}catch(n){g.debug(`[ProviderRegistry] whisper/openai-stt registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{DeepgramSTT:n}=await Promise.resolve().then(()=>(w5(),sJe));t.registerHandler("deepgram",new n)}catch(n){g.debug(`[ProviderRegistry] deepgram registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{GoogleSTT:n}=await Promise.resolve().then(()=>(E5(),iJe));t.registerHandler("google-stt",new n)}catch(n){g.debug(`[ProviderRegistry] google-stt registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{AzureSTT:n}=await Promise.resolve().then(()=>(_5(),aJe));t.registerHandler("azure-stt",new n)}catch(n){g.debug(`[ProviderRegistry] azure-stt registration skipped: ${n instanceof Error?n.message:String(n)}`)}g.debug("STT handlers registered successfully",{providers:["whisper","deepgram","google-stt","azure-stt"]})}catch(t){g.warn("Failed to register STT handlers - STT functionality will be unavailable",{error:t instanceof Error?t.message:String(t)})}try{let{RealtimeProcessor:t}=await Promise.resolve().then(()=>(DC(),cJe)),n={};try{let{OpenAIRealtime:s}=await Promise.resolve().then(()=>(k5(),lJe));t.registerHandler("openai-realtime",new s),n["openai-realtime"]="ok"}catch(s){let i=s instanceof Error?s.message:String(s);n["openai-realtime"]=i,g.error(`[ProviderRegistry] openai-realtime registration failed: ${i}`)}try{let{GeminiLive:s}=await Promise.resolve().then(()=>(C5(),uJe));t.registerHandler("gemini-live",new s),n["gemini-live"]="ok"}catch(s){let i=s instanceof Error?s.message:String(s);n["gemini-live"]=i,g.error(`[ProviderRegistry] gemini-live registration failed: ${i}`)}r.realtimeRegistration=n;let o=Object.entries(n).filter(([,s])=>s!=="ok");o.length===0?g.info("[ProviderRegistry] Realtime handlers registered: openai-realtime, gemini-live"):g.warn(`[ProviderRegistry] Realtime handlers partial: ${o.length} skipped`,{outcomes:n})}catch(t){g.warn("Failed to register Realtime handlers - Realtime functionality will be unavailable",{error:t instanceof Error?t.message:String(t)})}try{let{VideoProcessor:t}=await Promise.resolve().then(()=>(nx(),Xoe));try{let{VertexVideoHandler:n}=await Promise.resolve().then(()=>(tT(),_Fe));t.registerHandler("vertex",new n)}catch(n){g.debug(`[ProviderRegistry] vertex video registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{KlingVideoHandler:n}=await Promise.resolve().then(()=>(wfe(),pJe));t.registerHandler("kling",new n)}catch(n){g.debug(`[ProviderRegistry] kling video registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{RunwayVideoHandler:n}=await Promise.resolve().then(()=>(_fe(),fJe));t.registerHandler("runway",new n)}catch(n){g.debug(`[ProviderRegistry] runway video registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{ReplicateVideoHandler:n}=await Promise.resolve().then(()=>(kfe(),gJe));t.registerHandler("replicate",new n)}catch(n){g.debug(`[ProviderRegistry] replicate video registration skipped: ${n instanceof Error?n.message:String(n)}`)}g.debug("Video handlers registered")}catch(t){g.warn(`[ProviderRegistry] video registration block failed: ${t instanceof Error?t.message:String(t)}`)}try{let{AvatarProcessor:t}=await Promise.resolve().then(()=>(Hg(),dme));try{let{DIDAvatar:n}=await Promise.resolve().then(()=>(P5(),yJe));t.registerHandler("d-id",new n)}catch(n){g.debug(`[ProviderRegistry] d-id avatar registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{ReplicateAvatar:n}=await Promise.resolve().then(()=>(M5(),xJe)),o=new n;t.registerHandler("replicate",o),t.registerHandler("musetalk",o)}catch(n){g.debug(`[ProviderRegistry] replicate avatar registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{HeyGenAvatar:n}=await Promise.resolve().then(()=>(O5(),bJe));t.registerHandler("heygen",new n)}catch(n){g.debug(`[ProviderRegistry] heygen avatar registration skipped: ${n instanceof Error?n.message:String(n)}`)}g.debug("Avatar handlers registered")}catch(t){g.warn("Failed to register Avatar handlers - Avatar functionality will be unavailable",{error:t instanceof Error?t.message:String(t)})}try{let{MusicProcessor:t}=await Promise.resolve().then(()=>(of(),ume));try{let{BeatovenMusic:n}=await Promise.resolve().then(()=>(N5(),TJe));t.registerHandler("beatoven",new n)}catch(n){g.debug(`[ProviderRegistry] beatoven music registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{ReplicateMusic:n}=await Promise.resolve().then(()=>(D5(),SJe)),o=new n;t.registerHandler("replicate",o),t.registerHandler("musicgen",o)}catch(n){g.debug(`[ProviderRegistry] replicate music registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{ElevenLabsMusic:n}=await Promise.resolve().then(()=>(L5(),EJe)),o=new n;t.registerHandler("elevenlabs-music",o),t.registerHandler("elevenlabs-sound",o)}catch(n){g.debug(`[ProviderRegistry] elevenlabs-music registration skipped: ${n instanceof Error?n.message:String(n)}`)}try{let{LyriaMusic:n}=await Promise.resolve().then(()=>(U5(),kJe));t.registerHandler("lyria",new n)}catch(n){g.debug(`[ProviderRegistry] lyria music registration skipped: ${n instanceof Error?n.message:String(n)}`)}g.debug("Music handlers registered")}catch(t){g.warn("Failed to register Music handlers - Music functionality will be unavailable",{error:t instanceof Error?t.message:String(t)})}this.registered=!0}catch(e){throw g.error("Failed to register providers:",e),e}}static isRegistered(){return this.registered}static clearRegistrations(){On.clearRegistrations(),this.registered=!1,this.registrationPromise=null,r.realtimeRegistration={}}static setOptions(e){this.options={...this.options,...e},g.debug("Provider registry options updated:",this.options)}static getOptions(){return{...this.options}}}});var bW={};ee(bW,{AIProviderFactory:()=>dn});var vBr,bBr,dn,gu=_(()=>{"use strict";Dr();Vr();Xu();fE();zg();W();mj();It();vBr="aiProviderFactory",bBr=_e.factory,dn=class{static normalizeProviderName(e){let t=On.normalizeProviderName(e);return t||e.toLowerCase()}static async initializeDynamicProviderWithTimeout(){let e="AIProviderFactory.initializeDynamicProviderWithTimeout";try{await Ke(qP.initialize(),1e4,me.toolTimeout("dynamic-provider-init",1e4)),g.debug(`[${e}] Dynamic model provider initialized successfully`)}catch(n){let o=n instanceof Error?n.message:String(n);g.warn(`[${e}] Dynamic model provider initialization failed`,{error:o,fallback:"Using static model defaults"})}}static resolveModelFromEnvironment(e,t,n){if(t&&t!=="default")return g.debug(`[${n}] Skipping environment variable check - explicit model provided: ${t}`),t;g.debug(`[${n}] Checking environment variables for provider: ${e}`);let o=e.toLowerCase(),i=[{match:["bedrock"],label:"Bedrock",vars:["BEDROCK_MODEL","BEDROCK_MODEL_ID"]},{match:["vertex"],label:"Vertex",vars:["VERTEX_MODEL"]},{match:["azure"],label:"Azure",vars:["AZURE_OPENAI_MODEL","AZURE_OPENAI_DEPLOYMENT","AZURE_OPENAI_DEPLOYMENT_ID"]},{match:["openai","gpt","chatgpt","openai-compat"],label:"OpenAI",vars:["OPENAI_MODEL"]},{match:["anthropic","claude","anthropic-claude"],label:"Anthropic",vars:["ANTHROPIC_MODEL"]},{match:["google","gemini"],label:"Google AI",vars:["GOOGLE_AI_MODEL"]},{match:["mistral"],label:"Mistral",vars:["MISTRAL_MODEL"]},{match:["ollama"],label:"Ollama",vars:["OLLAMA_MODEL"]},{match:["litellm"],label:"LiteLLM",vars:["LITELLM_MODEL"]}].find(l=>l.match.some(u=>o.includes(u)));if(!i)return g.debug(`[${n}] Provider ${e} - no environment variable check implemented`),t;let a=i.vars.find(l=>process.env[l]),c=a?process.env[a]:void 0;return c?(g.debug(`[${n}] Environment variable found for ${i.label}`,{envVariable:a,resolvedModel:c}),c):(g.debug(`[${n}] No ${i.label} environment variables found (${i.vars.join(", ")})`),t)}static async resolveDynamicModelName(e,t,n,o){if(n&&n!=="default"||t&&t!=="default")return g.debug(`[${o}] Skipping dynamic model resolution`,{resolvedModelName:n||"none",reason:"Model already resolved from environment variables or explicit parameter"}),n;g.debug(`[${o}] Attempting dynamic model resolution`,{currentResolvedModel:n||"none",reason:"No environment variable found and no explicit model provided"});try{let s=this.normalizeProviderName(e);qP.needsRefresh()&&(g.debug(`[${o}] Dynamic model provider needs refresh - initializing`),await this.initializeDynamicProviderWithTimeout());let i=qP.resolveModel(s,t||void 0);return i?(g.debug(`[${o}] Resolved dynamic model`,{provider:s,requestedModel:t||"default",resolvedModel:i.id,displayName:i.displayName,pricing:i.pricing.input}),i.id):(g.debug(`[${o}] Dynamic model resolution returned null`,{provider:s,requestedModel:t||"default"}),n)}catch(s){return g.debug(`[${o}] Dynamic model resolution failed, using static fallback`,{error:s instanceof Error?s.message:String(s)}),n}}static async createResolvedProvider(e,t,n,o,s,i){await Ke(bl.registerAllProviders(),3e4,me.toolTimeout("provider-registration",3e4));let a=this.normalizeProviderName(e),c=t==="default"||t===null?void 0:t;g.debug(`[${s}] Final provider configuration`,{originalProviderName:e,normalizedProviderName:a,resolvedModelName:t||"not resolved",finalModelName:c||"using provider default"});let l=await Ke(On.createProvider(a,c,n,o,i),3e4,me.toolTimeout(`provider-creation:${a}`,3e4));return{normalizedName:a,finalModelName:c,provider:l}}static async createProvider(e,t,n=!0,o,s,i){let a="AIProviderFactory.createProvider";return bBr.startActiveSpan("neurolink.factory.createProvider",{kind:Cr.INTERNAL,attributes:{"provider.name":e,"model.name":t||"default","mcp.enabled":n}},async c=>{g.debug(`[${a}] Provider creation started`,{providerName:e,modelName:t||"default",enableMCP:n,environmentVariables:{BEDROCK_MODEL:process.env.BEDROCK_MODEL||"not set",BEDROCK_MODEL_ID:process.env.BEDROCK_MODEL_ID||"not set",VERTEX_MODEL:process.env.VERTEX_MODEL||"not set",OPENAI_MODEL:process.env.OPENAI_MODEL||"not set"}});try{let l=this.resolveModelFromEnvironment(e,t,a);l=await this.resolveDynamicModelName(e,t,l,a);let{normalizedName:u,finalModelName:d,provider:p}=await this.createResolvedProvider(e,l,o,s,a,i);return g.debug(`[AIProviderFactory] Provider creation completed { providerName: '${u}', modelName: '${d}' }`),g.debug(`[AIProviderFactory] Resolved model: ${d}`),g.debug(vBr,"Pure factory pattern provider created",{providerName:u,modelName:d,factoryUsed:!0}),c.setAttribute("provider.resolved_name",u),d&&c.setAttribute("model.resolved_name",d),g.debug(`[${a}] Provider creation succeeded`,{providerName:e,modelName:d||"default",providerType:p.constructor.name,mcpEnabled:n}),c.setStatus({code:Ie.OK}),p}catch(l){let u=l instanceof Error?l.message:String(l);throw c.setStatus({code:Ie.ERROR,message:u}),c.recordException(l instanceof Error?l:new Error(String(l))),g.debug(`[${a}] Provider creation failed`,{providerName:e,modelName:t||"default",error:u}),l}finally{c.end()}})}static async createProviderWithModel(e,t){let n="AIProviderFactory.createProviderWithModel";g.debug(`[${n}] Provider model creation started`,{provider:e,model:t});try{let o=await this.createProvider(e,t);return g.debug(`[${n}] Provider model creation succeeded`,{provider:e,model:t,providerType:o.constructor.name}),o}catch(o){let s=o instanceof Error?o.message:String(o);throw g.debug(`[${n}] Provider model creation failed`,{provider:e,model:t,error:s}),o}}static async createBestProvider(e,t,n=!0,o){let s="AIProviderFactory.createBestProvider";try{let i=await Nx(e);return g.debug(`[${s}] Best provider selected`,{requestedProvider:e||"auto",selectedProvider:i,modelName:t||"default",enableMCP:n}),await this.createProvider(i,t,n,o)}catch(i){let a=i instanceof Error?i.message:String(i);throw g.debug(`[${s}] Best provider selection failed`,{requestedProvider:e||"auto",error:a}),i}}static async createProviderWithFallback(e,t,n,o=!0){let s="AIProviderFactory.createProviderWithFallback";g.debug(`[${s}] Fallback provider setup started`,{primaryProvider:e,fallbackProvider:t,modelName:n||"default",enableMCP:o});try{let i=await this.createProvider(e,n,o),a=await this.createProvider(t,n,o);return g.debug(`[${s}] Fallback provider setup succeeded`,{primaryProvider:e,fallbackProvider:t,modelName:n||"default",enableMCP:o}),{primary:i,fallback:a}}catch(i){let a=i instanceof Error?i.message:String(i);throw g.debug(`[${s}] Fallback provider setup failed`,{primaryProvider:e,fallbackProvider:t,error:a}),i}}}});function df(r,e,t,n){if(r instanceof zn)return r;let o=r instanceof Error?r.message:String(r),s=r instanceof Error?r:void 0;return new uL(o,s,e,t,n)}var zn,eK,tK,rK,Ld,xh,pS,FC,uf,nK,uL,oK,sK,qu,$C,qx,Ud,Fd,iK,dL,pL,mL,aK,YJe,Hu=_(()=>{"use strict";Nt();zn=class r extends Error{code;category;severity;retryable;retryAfterMs;requestId;path;method;details;cause;constructor(e,t,n={}){super(e),this.name="ServerAdapterError",this.code=t,this.category=n.category??an.EXECUTION,this.severity=n.severity??co.MEDIUM,this.retryable=n.retryable??!1,this.retryAfterMs=n.retryAfterMs,this.requestId=n.requestId,this.path=n.path,this.method=n.method,this.details=n.details,this.cause=n.cause,Error.captureStackTrace&&Error.captureStackTrace(this,r)}toJSON(){return{error:{code:this.code,message:this.message,category:this.category,requestId:this.requestId,details:this.details,retryAfter:this.retryAfterMs?Math.ceil(this.retryAfterMs/1e3):void 0}}}getHttpStatus(){switch(this.code){case en.VALIDATION_ERROR:case en.SCHEMA_ERROR:case en.INVALID_CONFIG:case en.INVALID_ROUTE:return 400;case en.AUTH_REQUIRED:case en.AUTH_INVALID:return 401;case en.FORBIDDEN:return 403;case en.ROUTE_NOT_FOUND:return 404;case en.RATE_LIMIT_EXCEEDED:return 429;case en.TIMEOUT:return 408;case en.STREAM_ABORTED:return 499;default:return 500}}},eK=class extends zn{constructor(e,t,n){super(e,en.INVALID_CONFIG,{category:an.CONFIG,severity:co.HIGH,retryable:!1,details:t,cause:n}),this.name="ConfigurationError"}},tK=class extends zn{constructor(e,t,n){super(`Route conflict: ${t} ${e} conflicts with existing route${n?`: ${n}`:""}`,en.ROUTE_CONFLICT,{category:an.CONFIG,severity:co.HIGH,retryable:!1,path:e,method:t,details:{existingRoute:n}}),this.name="RouteConflictError"}},rK=class extends zn{constructor(e,t,n){super(`Route not found: ${t} ${e}`,en.ROUTE_NOT_FOUND,{category:an.VALIDATION,severity:co.LOW,retryable:!1,path:e,method:t,requestId:n}),this.name="RouteNotFoundError"}},Ld=class extends zn{errors;constructor(e,t){super(`Validation failed: ${e.map(n=>n.message).join(", ")}`,en.VALIDATION_ERROR,{category:an.VALIDATION,severity:co.LOW,retryable:!1,requestId:t,details:{errors:e}}),this.name="ValidationError",this.errors=e}},xh=class extends zn{constructor(e="Authentication required",t){super(e,en.AUTH_REQUIRED,{category:an.AUTHENTICATION,severity:co.MEDIUM,retryable:!1,requestId:t}),this.name="AuthenticationError"}},pS=class extends zn{constructor(e="Invalid authentication credentials",t){super(e,en.AUTH_INVALID,{category:an.AUTHENTICATION,severity:co.MEDIUM,retryable:!1,requestId:t}),this.name="InvalidAuthenticationError"}},FC=class extends zn{constructor(e="Access forbidden",t,n){super(e,en.FORBIDDEN,{category:an.AUTHORIZATION,severity:co.MEDIUM,retryable:!1,requestId:t,details:{requiredPermissions:n}}),this.name="AuthorizationError"}},uf=class extends zn{constructor(e,t,n){super(t??"Too many requests, please try again later",en.RATE_LIMIT_EXCEEDED,{category:an.RATE_LIMIT,severity:co.MEDIUM,retryable:!0,retryAfterMs:e,requestId:n}),this.name="RateLimitError"}},nK=class extends zn{constructor(e,t,n){super(`Operation timed out after ${e}ms${t?`: ${t}`:""}`,en.TIMEOUT,{category:an.EXECUTION,severity:co.MEDIUM,retryable:!0,requestId:n,details:{timeoutMs:e,operation:t}}),this.name="TimeoutError"}},uL=class extends zn{constructor(e,t,n,o,s){super(e,en.HANDLER_ERROR,{category:an.EXECUTION,severity:co.HIGH,retryable:!1,cause:t,requestId:n,path:o,method:s}),this.name="HandlerError"}},oK=class extends zn{constructor(e,t,n){super(e,en.STREAM_ERROR,{category:an.STREAMING,severity:co.MEDIUM,retryable:!1,cause:t,requestId:n}),this.name="StreamingError"}},sK=class extends zn{constructor(e,t){super(`Stream aborted${e?`: ${e}`:""}`,en.STREAM_ABORTED,{category:an.STREAMING,severity:co.LOW,retryable:!1,requestId:t,details:{reason:e}}),this.name="StreamAbortedError"}},qu=class extends zn{constructor(e,t,n){super(e,en.WEBSOCKET_ERROR,{category:an.WEBSOCKET,severity:co.MEDIUM,retryable:!0,cause:t,details:{connectionId:n}}),this.name="WebSocketError"}},$C=class extends zn{constructor(e="WebSocket connection failed",t){super(e,en.WEBSOCKET_CONNECTION_FAILED,{category:an.WEBSOCKET,severity:co.HIGH,retryable:!0,cause:t}),this.name="WebSocketConnectionError"}},qx=class extends zn{constructor(e,t,n,o){super(e,en.START_FAILED,{category:an.CONFIG,severity:co.CRITICAL,retryable:!0,cause:t,details:{port:n,host:o}}),this.name="ServerStartError"}},Ud=class extends zn{constructor(e,t){super(e,en.STOP_FAILED,{category:an.EXECUTION,severity:co.HIGH,retryable:!1,cause:t}),this.name="ServerStopError"}},Fd=class extends zn{constructor(e,t){super(`Server is already running${e&&t?` on ${t}:${e}`:""}`,en.ALREADY_RUNNING,{category:an.CONFIG,severity:co.LOW,retryable:!1,details:{port:e,host:t}}),this.name="AlreadyRunningError"}},iK=class extends zn{constructor(){super("Server is not running",en.NOT_RUNNING,{category:an.CONFIG,severity:co.LOW,retryable:!1}),this.name="NotRunningError"}},dL=class extends zn{timeoutMs;remainingConnections;constructor(e,t){super(`Shutdown timed out after ${e}ms with ${t} active connection(s)`,en.STOP_FAILED,{category:an.EXECUTION,severity:co.HIGH,retryable:!1,details:{timeoutMs:e,remainingConnections:t}}),this.name="ShutdownTimeoutError",this.timeoutMs=e,this.remainingConnections=t}},pL=class extends zn{timeoutMs;remainingConnections;constructor(e,t){super(`Connection drain timed out after ${e}ms with ${t} active connection(s)`,en.STOP_FAILED,{category:an.EXECUTION,severity:co.MEDIUM,retryable:!1,details:{timeoutMs:e,remainingConnections:t}}),this.name="DrainTimeoutError",this.timeoutMs=e,this.remainingConnections=t}},mL=class extends zn{currentState;expectedStates;operation;constructor(e,t,n){super(`Cannot ${e}: server is in '${t}' state, expected one of [${n.join(", ")}]`,en.STOP_FAILED,{category:an.CONFIG,severity:co.MEDIUM,retryable:!1,details:{operation:e,currentState:t,expectedStates:n}}),this.name="InvalidLifecycleStateError",this.currentState=t,this.expectedStates=n,this.operation=e}},aK=class extends zn{constructor(e,t,n){super(`Missing dependency '${e}' for ${t} adapter. ${n?`Install with: ${n}`:""}`,en.MISSING_DEPENDENCY,{category:an.CONFIG,severity:co.CRITICAL,retryable:!1,details:{dependency:e,framework:t,installCommand:n}}),this.name="MissingDependencyError"}},YJe={[an.CONFIG]:{strategy:"fail",maxRetries:0,baseDelayMs:0},[an.VALIDATION]:{strategy:"fail",maxRetries:0,baseDelayMs:0},[an.EXECUTION]:{strategy:"retry",maxRetries:3,baseDelayMs:1e3},[an.EXTERNAL]:{strategy:"exponentialBackoff",maxRetries:5,baseDelayMs:1e3},[an.RATE_LIMIT]:{strategy:"exponentialBackoff",maxRetries:3,baseDelayMs:5e3},[an.AUTHENTICATION]:{strategy:"fail",maxRetries:0,baseDelayMs:0},[an.AUTHORIZATION]:{strategy:"fail",maxRetries:0,baseDelayMs:0},[an.STREAMING]:{strategy:"retry",maxRetries:2,baseDelayMs:500},[an.WEBSOCKET]:{strategy:"exponentialBackoff",maxRetries:5,baseDelayMs:1e3}}});var $d,BC=_(()=>{"use strict";lo();yo();It();W();Hu();$d=class extends dr{config;redactionConfig;neurolink;toolRegistry;externalServerManager;routes=new Map;middlewares=[];isRunning=!1;startTime;lifecycleState="uninitialized";activeConnections=new Map;shutdownConfig;constructor(e,t={}){super(),this.neurolink=e,this.toolRegistry=e.getToolRegistry(),this.externalServerManager=e.getExternalServerManager(),this.redactionConfig=t.redaction,this.shutdownConfig={gracefulShutdownTimeoutMs:t.shutdown?.gracefulShutdownTimeoutMs??3e4,drainTimeoutMs:t.shutdown?.drainTimeoutMs??15e3,forceClose:t.shutdown?.forceClose??!0},this.config={port:t.port??3e3,host:t.host??"0.0.0.0",basePath:t.basePath??"/api",cors:{enabled:t.cors?.enabled??!0,origins:t.cors?.origins??["*"],methods:t.cors?.methods??["GET","POST","PUT","DELETE","PATCH","OPTIONS"],headers:t.cors?.headers??["Content-Type","Authorization","X-Request-ID"],credentials:t.cors?.credentials??!1,maxAge:t.cors?.maxAge??86400},rateLimit:{enabled:t.rateLimit?.enabled??!0,windowMs:t.rateLimit?.windowMs??900*1e3,maxRequests:t.rateLimit?.maxRequests??100,message:t.rateLimit?.message??"Too many requests, please try again later",skipPaths:t.rateLimit?.skipPaths,keyGenerator:t.rateLimit?.keyGenerator},bodyParser:{enabled:t.bodyParser?.enabled??!0,maxSize:t.bodyParser?.maxSize??"10mb",jsonLimit:t.bodyParser?.jsonLimit??"10mb",urlEncoded:t.bodyParser?.urlEncoded??!0},logging:{enabled:t.logging?.enabled??!0,level:t.logging?.level??"info",includeBody:t.logging?.includeBody??!1,includeResponse:t.logging?.includeResponse??!1},timeout:t.timeout??3e4,enableMetrics:t.enableMetrics??!0,enableSwagger:t.enableSwagger??!1,disableBuiltInHealth:t.disableBuiltInHealth??!1,shutdown:this.shutdownConfig}}async initialize(){if(this.lifecycleState!=="uninitialized"&&this.lifecycleState!=="stopped")throw new mL("initialize",this.lifecycleState,["uninitialized","stopped"]);this.lifecycleState="initializing",g.info("[ServerAdapter] Initializing server adapter",{port:this.config.port,host:this.config.host,basePath:this.config.basePath});let e=xe.createSpan("server.request","server.initialize",{"server.operation":"initialize","server.port":this.config.port,"server.host":this.config.host}),t=Date.now();try{this.initializeFramework(),this.registerBuiltInMiddleware(),await this.registerBuiltInRoutes(),this.lifecycleState="initialized",this.emit("initialized",{config:this.config,routeCount:this.routes.size,middlewareCount:this.middlewares.length}),g.info("[ServerAdapter] Server adapter initialized",{routes:this.routes.size,middlewares:this.middlewares.length}),e.durationMs=Date.now()-t;let n=xe.endSpan(e,1);Ze().recordSpan(n)}catch(n){this.lifecycleState="error",e.durationMs=Date.now()-t;let o=xe.endSpan(e,2);throw o.statusMessage=n instanceof Error?n.message:String(n),Ze().recordSpan(o),n}}registerRoute(e){let t=`${e.method.toUpperCase()}:${e.path}`;this.routes.has(t)&&g.warn(`[ServerAdapter] Route ${t} already exists, replacing`),this.routes.set(t,e),this.registerFrameworkRoute(e),g.debug(`[ServerAdapter] Registered route: ${t}`,{description:e.description,streaming:e.streaming?.enabled,auth:e.auth})}registerRouteGroup(e){if(e.middleware)for(let t of e.middleware)this.registerMiddleware({...t,paths:t.paths??[e.prefix]});for(let t of e.routes){let n=!t.path.startsWith(e.prefix),o=this.normalizePath(n?`${e.prefix}${t.path}`:t.path),s={...t,path:o};this.registerRoute(s)}g.debug(`[ServerAdapter] Registered route group: ${e.prefix}`,{routes:e.routes.length,middleware:e.middleware?.length??0})}normalizePath(e){return"/"+e.split("/").filter(Boolean).join("/")}registerMiddleware(e){this.middlewares.push(e),this.registerFrameworkMiddleware(e),g.debug(`[ServerAdapter] Registered middleware: ${e.name}`,{order:e.order,paths:e.paths})}createContext(e){return{requestId:e.requestId,method:e.method,path:e.path,headers:e.headers,query:e.query??{},params:e.params??{},body:e.body,neurolink:this.neurolink,toolRegistry:this.toolRegistry,externalServerManager:this.externalServerManager,timestamp:Date.now(),metadata:{},redaction:this.redactionConfig}}registerBuiltInMiddleware(){this.registerMiddleware({name:"requestId",order:0,handler:async(e,t)=>(e.requestId=e.requestId||this.generateRequestId(),t())}),this.config.logging.enabled&&this.registerMiddleware({name:"logging",order:1,handler:async(e,t)=>{let n=Date.now();g.info(`[ServerAdapter] ${e.method} ${e.path}`,{requestId:e.requestId});let o=await t();return g.info(`[ServerAdapter] ${e.method} ${e.path} completed`,{requestId:e.requestId,duration:Date.now()-n}),o}})}async registerBuiltInRoutes(){this.config.disableBuiltInHealth||(this.registerRoute({method:"GET",path:`${this.config.basePath}/health`,handler:async()=>({status:"ok",timestamp:new Date().toISOString(),uptime:this.startTime?Date.now()-this.startTime.getTime():0,version:process.env.npm_package_version||"unknown"}),description:"Health check endpoint",tags:["system"]}),this.registerRoute({method:"GET",path:`${this.config.basePath}/ready`,handler:async e=>{let t=e.toolRegistry,n=this.config.timeout||5e3,o,s;try{o=await Ke(t.listTools(),n,new Error(`toolRegistry.listTools timed out after ${n}ms`)),s=o.length>0}catch(i){g.warn("[ServerAdapter] Tool registry check timed out",{timeout:n,error:i instanceof Error?i.message:String(i)}),s=!1}return{ready:!0,timestamp:new Date().toISOString(),services:{neurolink:!0,tools:s,externalServers:!!e.externalServerManager}}},description:"Readiness check endpoint",tags:["system"]})),this.config.enableMetrics&&this.registerRoute({method:"GET",path:`${this.config.basePath}/metrics`,handler:async()=>{let e=this.getStatus();return{server:{running:e.running,uptime:e.uptime,routes:e.routes,middlewares:e.middlewares},process:{memoryUsage:process.memoryUsage(),cpuUsage:process.cpuUsage(),pid:process.pid},timestamp:new Date().toISOString()}},description:"Server metrics endpoint",tags:["system"]})}generateRequestId(){return`req-${Date.now()}-${Math.random().toString(36).substring(2,11)}`}getLifecycleState(){return this.lifecycleState}trackConnection(e,t,n){this.activeConnections.set(e,{id:e,createdAt:Date.now(),socket:t,requestId:n,isActive:!0}),g.debug("[ServerAdapter] Connection tracked",{connectionId:e,activeConnections:this.activeConnections.size})}untrackConnection(e){this.activeConnections.delete(e)&&g.debug("[ServerAdapter] Connection untracked",{connectionId:e,activeConnections:this.activeConnections.size})}getActiveConnectionCount(){return this.activeConnections.size}async gracefulShutdown(){let{gracefulShutdownTimeoutMs:e,drainTimeoutMs:t,forceClose:n}=this.shutdownConfig;g.info("[ServerAdapter] Starting graceful shutdown",{activeConnections:this.activeConnections.size,gracefulShutdownTimeoutMs:e,drainTimeoutMs:t});let o=xe.createSpan("server.request","server.shutdown",{"server.operation":"gracefulShutdown","server.activeConnections":this.activeConnections.size}),s=Date.now(),i,a;try{this.lifecycleState="draining",await this.stopAcceptingConnections(),g.info("[ServerAdapter] Stopped accepting new connections");let c=this.drainConnections(),l=new Promise((f,h)=>{i=setTimeout(()=>{h(new dL(e,this.activeConnections.size))},e)}),u=new Promise(f=>{a=setTimeout(()=>{f("drain_timeout")},t)});if(await Promise.race([c,u])==="drain_timeout"&&this.activeConnections.size>0)if(g.warn("[ServerAdapter] Drain timeout reached",{remainingConnections:this.activeConnections.size}),n)g.info("[ServerAdapter] Force closing remaining connections"),await this.forceCloseConnections();else throw new pL(t,this.activeConnections.size);this.lifecycleState="stopping",await Promise.race([this.closeServer(),l]),g.info("[ServerAdapter] Server closed successfully"),o.durationMs=Date.now()-s;let p=xe.endSpan(o,1);Ze().recordSpan(p)}catch(c){if(n&&(c instanceof dL||c instanceof pL)){g.warn("[ServerAdapter] Timeout during shutdown, forcing close",{error:c.message}),await this.forceCloseConnections(),await this.closeServer(),o.durationMs=Date.now()-s;let l=xe.endSpan(o,1);Ze().recordSpan(l)}else{this.lifecycleState="error",o.durationMs=Date.now()-s;let l=xe.endSpan(o,2);throw l.statusMessage=c instanceof Error?c.message:String(c),Ze().recordSpan(l),c}}finally{i&&clearTimeout(i),a&&clearTimeout(a)}}async drainConnections(){if(this.activeConnections.size===0){g.debug("[ServerAdapter] No active connections to drain");return}return g.info("[ServerAdapter] Draining connections",{count:this.activeConnections.size}),new Promise(e=>{let t=setInterval(()=>{this.activeConnections.size===0&&(clearInterval(t),g.info("[ServerAdapter] All connections drained"),e())},100)})}resetServerState(){this.isRunning=!1,this.startTime=void 0,this.activeConnections.clear(),this.lifecycleState="stopped",g.debug("[ServerAdapter] Server state reset for restart capability")}validateLifecycleState(e,t){if(!t.includes(this.lifecycleState))throw new mL(e,this.lifecycleState,t)}getStatus(){return{running:this.isRunning,port:this.config.port,host:this.config.host,uptime:this.startTime?Date.now()-this.startTime.getTime():0,routes:this.routes.size,middlewares:this.middlewares.length,lifecycleState:this.lifecycleState,activeConnections:this.activeConnections.size}}listRoutes(){return Array.from(this.routes.values())}getConfig(){return{...this.config}}}});function vh(r){return typeof r=="object"&&r!==null&&"error"in r&&typeof r.error=="object"&&r.error!==null&&"code"in r.error&&"message"in r.error}function Mzr(r){return{VALIDATION_ERROR:400,SCHEMA_ERROR:400,TOOL_NOT_FOUND:404,SERVER_NOT_FOUND:404,SESSION_NOT_FOUND:404,NOT_FOUND:404,AUTH_REQUIRED:401,AUTH_INVALID:401,FORBIDDEN:403,RATE_LIMIT_EXCEEDED:429,MCP_UNAVAILABLE:503,MEMORY_UNAVAILABLE:503,SKILLS_UNAVAILABLE:503,EXECUTION_FAILED:500,INTERNAL_ERROR:500}[r]??500}function nr(r,e,t,n,o){return{error:{code:r,message:e,details:t},metadata:{timestamp:new Date().toISOString(),requestId:n},httpStatus:o??Mzr(r)}}function Yl(r,e,t){let n=r.safeParse(e);return n.success?{success:!0,data:n.data}:{success:!1,error:nr("VALIDATION_ERROR","Invalid request body",n.error.issues.map(o=>({path:o.path.join("."),message:o.message,code:o.code})),t)}}function t9e(r,e,t){let n=r.safeParse(e);return n.success?{success:!0,data:n.data}:{success:!1,error:nr("VALIDATION_ERROR","Invalid query parameters",n.error.issues.map(o=>({path:o.path.join("."),message:o.message,code:o.code})),t)}}function nl(r,e,t){let n=r.safeParse(e);return n.success?{success:!0,data:n.data}:{success:!1,error:nr("VALIDATION_ERROR","Invalid path parameters",n.error.issues.map(o=>({path:o.path.join("."),message:o.message,code:o.code})),t)}}var fL,cK,zC,lK,mS,gL,XJe,Qfe,aTo,cTo,ZJe,QJe,ege,e9e,pf=_(()=>{"use strict";ao();fL=m.object({input:m.union([m.string(),m.object({text:m.string(),images:m.array(m.string()).optional(),files:m.array(m.string()).optional()})]),provider:m.string().optional(),model:m.string().optional(),systemPrompt:m.string().optional(),temperature:m.number().min(0).max(2).optional(),maxTokens:m.number().positive().optional(),tools:m.array(m.string()).optional(),stream:m.boolean().optional(),sessionId:m.string().optional(),userId:m.string().optional()}),cK=m.object({name:m.string().min(1,"Tool name is required"),arguments:m.record(m.string(),m.unknown()).default({}),sessionId:m.string().optional(),userId:m.string().optional()}),zC=m.record(m.string(),m.unknown()),lK=m.object({sessionId:m.string().min(1,"Session ID is required")}),mS=m.object({name:m.string().min(1,"Server name is required")}),gL=m.object({name:m.string().min(1,"Tool name is required")}),XJe=m.object({q:m.string().optional(),source:m.string().optional(),limit:m.string().transform(r=>parseInt(r,10)).pipe(m.number().positive().max(100)).optional()}),Qfe=m.object({id:m.string().min(1,"Session ID is required")}),aTo=m.object({userId:m.string().optional(),limit:m.string().transform(r=>parseInt(r,10)).pipe(m.number().positive().max(100)).optional(),offset:m.string().transform(r=>parseInt(r,10)).pipe(m.number().nonnegative()).optional()}),cTo=m.object({limit:m.string().transform(r=>parseInt(r,10)).pipe(m.number().positive().max(100)).optional(),offset:m.string().transform(r=>parseInt(r,10)).pipe(m.number().nonnegative()).optional()}),ZJe=m.object({text:m.string().min(1,"Text is required"),provider:m.string().optional(),model:m.string().optional()}),QJe=m.object({texts:m.array(m.string().min(1)).min(1,"At least one text is required").max(2048,"Maximum 2048 texts per batch"),provider:m.string().optional(),model:m.string().optional()}),ege=m.object({name:m.string().min(1,"Name is required"),displayName:m.string().optional(),description:m.string().min(1,"Description is required"),instructions:m.string().min(1,"Instructions are required"),tags:m.array(m.string()).optional(),scope:m.enum(["global","scoped"]).optional(),scopeIds:m.array(m.string()).optional(),requestedBy:m.string().optional()}),e9e=ege.partial()});var r9e={};ee(r9e,{Agent:()=>bjr,BedrockClient:()=>Nzr,BedrockRuntimeClient:()=>Lzr,Blob:()=>vjr,Client:()=>Sjr,ConverseCommand:()=>Uzr,ConverseStreamCommand:()=>Fzr,Cron:()=>tjr,Dispatcher:()=>wjr,File:()=>xjr,FlowProducer:()=>ejr,FormData:()=>yjr,GoogleAuth:()=>Gzr,HTTPException:()=>cjr,Headers:()=>hjr,Hippocampus:()=>Wzr,HippocampusConfig:()=>Kzr,Hono:()=>ijr,ImageFormat:()=>$zr,InvokeEndpointCommand:()=>zzr,InvokeEndpointWithResponseStreamCommand:()=>jzr,Job:()=>Zzr,ListFoundationModelsCommand:()=>Dzr,MockAgent:()=>kjr,Pool:()=>Tjr,Queue:()=>Yzr,QueueScheduler:()=>Qzr,Request:()=>fjr,Response:()=>gjr,SageMakerRuntimeClient:()=>Bzr,TextToSpeechClient:()=>qzr,VertexAI:()=>Vzr,Webhook:()=>Hzr,Worker:()=>Xzr,convertToHtml:()=>sjr,cors:()=>ajr,createClient:()=>Jzr,default:()=>Ozr,extractRawText:()=>ojr,fetch:()=>mjr,getGlobalDispatcher:()=>_jr,interceptors:()=>Cjr,logger:()=>ljr,parseBuffer:()=>rjr,request:()=>Rjr,secureHeaders:()=>ujr,selectCover:()=>njr,setGlobalDispatcher:()=>Ejr,streamSSE:()=>djr,timeout:()=>pjr});var jC,Zi,Ozr,Nzr,Dzr,Lzr,Uzr,Fzr,$zr,Bzr,zzr,jzr,Gzr,Vzr,qzr,Hzr,Wzr,Kzr,Jzr,Yzr,Xzr,Zzr,Qzr,ejr,tjr,rjr,njr,ojr,sjr,ijr,ajr,cjr,ljr,ujr,djr,pjr,mjr,fjr,gjr,hjr,yjr,xjr,vjr,bjr,Tjr,Sjr,wjr,Ejr,_jr,kjr,Cjr,Rjr,n9e=_(()=>{jC={get(r,e){return e==="__esModule"?!0:e==="default"?new Proxy({},{get:jC.get}):new Proxy(function(...t){return new Proxy({},{get:jC.get})},{get:jC.get,apply(t,n,o){return new Proxy({},{get:jC.get})},construct(t,n){return new Proxy({},{get:jC.get})}})}},Zi=new Proxy({},jC),Ozr=Zi,{BedrockClient:Nzr,ListFoundationModelsCommand:Dzr,BedrockRuntimeClient:Lzr,ConverseCommand:Uzr,ConverseStreamCommand:Fzr,ImageFormat:$zr}=Zi,{SageMakerRuntimeClient:Bzr,InvokeEndpointCommand:zzr,InvokeEndpointWithResponseStreamCommand:jzr}=Zi,{GoogleAuth:Gzr,VertexAI:Vzr,TextToSpeechClient:qzr}=Zi,{Webhook:Hzr}=Zi,{Hippocampus:Wzr,HippocampusConfig:Kzr}=Zi,{createClient:Jzr}=Zi,{Queue:Yzr,Worker:Xzr,Job:Zzr,QueueScheduler:Qzr,FlowProducer:ejr}=Zi,{Cron:tjr}=Zi,{parseBuffer:rjr,selectCover:njr}=Zi,{extractRawText:ojr,convertToHtml:sjr}=Zi,{Hono:ijr}=Zi,{cors:ajr,HTTPException:cjr,logger:ljr,secureHeaders:ujr,streamSSE:djr,timeout:pjr}=Zi,mjr=globalThis.fetch,fjr=globalThis.Request,gjr=globalThis.Response,hjr=globalThis.Headers,yjr=globalThis.FormData,xjr=globalThis.File,vjr=globalThis.Blob,bjr=Zi.Agent,Tjr=Zi.Pool,Sjr=Zi.Client,wjr=Zi.Dispatcher,Ejr=()=>{},_jr=()=>Zi,kjr=Zi.MockAgent,Cjr={redirect:()=>r=>r,retry:()=>r=>r},Rjr=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 o9e={};ee(o9e,{Agent:()=>hGr,BedrockClient:()=>Ijr,BedrockRuntimeClient:()=>Mjr,Blob:()=>gGr,Client:()=>xGr,ConverseCommand:()=>Ojr,ConverseStreamCommand:()=>Njr,Cron:()=>Xjr,Dispatcher:()=>vGr,File:()=>fGr,FlowProducer:()=>Yjr,FormData:()=>mGr,GoogleAuth:()=>$jr,HTTPException:()=>oGr,Headers:()=>pGr,Hippocampus:()=>Gjr,HippocampusConfig:()=>Vjr,Hono:()=>rGr,ImageFormat:()=>Djr,InvokeEndpointCommand:()=>Ujr,InvokeEndpointWithResponseStreamCommand:()=>Fjr,Job:()=>Kjr,ListFoundationModelsCommand:()=>Pjr,MockAgent:()=>SGr,Pool:()=>yGr,Queue:()=>Hjr,QueueScheduler:()=>Jjr,Request:()=>uGr,Response:()=>dGr,SageMakerRuntimeClient:()=>Ljr,TextToSpeechClient:()=>zjr,VertexAI:()=>Bjr,Webhook:()=>jjr,Worker:()=>Wjr,convertToHtml:()=>tGr,cors:()=>nGr,createClient:()=>qjr,default:()=>Ajr,extractRawText:()=>eGr,fetch:()=>lGr,getGlobalDispatcher:()=>TGr,interceptors:()=>wGr,logger:()=>sGr,parseBuffer:()=>Zjr,request:()=>EGr,secureHeaders:()=>iGr,selectCover:()=>Qjr,setGlobalDispatcher:()=>bGr,streamSSE:()=>aGr,timeout:()=>cGr});var GC,Qi,Ajr,Ijr,Pjr,Mjr,Ojr,Njr,Djr,Ljr,Ujr,Fjr,$jr,Bjr,zjr,jjr,Gjr,Vjr,qjr,Hjr,Wjr,Kjr,Jjr,Yjr,Xjr,Zjr,Qjr,eGr,tGr,rGr,nGr,oGr,sGr,iGr,aGr,cGr,lGr,uGr,dGr,pGr,mGr,fGr,gGr,hGr,yGr,xGr,vGr,bGr,TGr,SGr,wGr,EGr,s9e=_(()=>{GC={get(r,e){return e==="__esModule"?!0:e==="default"?new Proxy({},{get:GC.get}):new Proxy(function(...t){return new Proxy({},{get:GC.get})},{get:GC.get,apply(t,n,o){return new Proxy({},{get:GC.get})},construct(t,n){return new Proxy({},{get:GC.get})}})}},Qi=new Proxy({},GC),Ajr=Qi,{BedrockClient:Ijr,ListFoundationModelsCommand:Pjr,BedrockRuntimeClient:Mjr,ConverseCommand:Ojr,ConverseStreamCommand:Njr,ImageFormat:Djr}=Qi,{SageMakerRuntimeClient:Ljr,InvokeEndpointCommand:Ujr,InvokeEndpointWithResponseStreamCommand:Fjr}=Qi,{GoogleAuth:$jr,VertexAI:Bjr,TextToSpeechClient:zjr}=Qi,{Webhook:jjr}=Qi,{Hippocampus:Gjr,HippocampusConfig:Vjr}=Qi,{createClient:qjr}=Qi,{Queue:Hjr,Worker:Wjr,Job:Kjr,QueueScheduler:Jjr,FlowProducer:Yjr}=Qi,{Cron:Xjr}=Qi,{parseBuffer:Zjr,selectCover:Qjr}=Qi,{extractRawText:eGr,convertToHtml:tGr}=Qi,{Hono:rGr}=Qi,{cors:nGr,HTTPException:oGr,logger:sGr,secureHeaders:iGr,streamSSE:aGr,timeout:cGr}=Qi,lGr=globalThis.fetch,uGr=globalThis.Request,dGr=globalThis.Response,pGr=globalThis.Headers,mGr=globalThis.FormData,fGr=globalThis.File,gGr=globalThis.Blob,hGr=Qi.Agent,yGr=Qi.Pool,xGr=Qi.Client,vGr=Qi.Dispatcher,bGr=()=>{},TGr=()=>Qi,SGr=Qi.MockAgent,wGr={redirect:()=>r=>r,retry:()=>r=>r},EGr=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 i9e={};ee(i9e,{Agent:()=>pVr,BedrockClient:()=>kGr,BedrockRuntimeClient:()=>RGr,Blob:()=>dVr,Client:()=>fVr,ConverseCommand:()=>AGr,ConverseStreamCommand:()=>IGr,Cron:()=>WGr,Dispatcher:()=>gVr,File:()=>uVr,FlowProducer:()=>HGr,FormData:()=>lVr,GoogleAuth:()=>DGr,HTTPException:()=>eVr,Headers:()=>cVr,Hippocampus:()=>$Gr,HippocampusConfig:()=>BGr,Hono:()=>ZGr,ImageFormat:()=>PGr,InvokeEndpointCommand:()=>OGr,InvokeEndpointWithResponseStreamCommand:()=>NGr,Job:()=>VGr,ListFoundationModelsCommand:()=>CGr,MockAgent:()=>xVr,Pool:()=>mVr,Queue:()=>jGr,QueueScheduler:()=>qGr,Request:()=>iVr,Response:()=>aVr,SageMakerRuntimeClient:()=>MGr,TextToSpeechClient:()=>UGr,VertexAI:()=>LGr,Webhook:()=>FGr,Worker:()=>GGr,convertToHtml:()=>XGr,cors:()=>QGr,createClient:()=>zGr,default:()=>_Gr,extractRawText:()=>YGr,fetch:()=>sVr,getGlobalDispatcher:()=>yVr,interceptors:()=>vVr,logger:()=>tVr,parseBuffer:()=>KGr,request:()=>bVr,secureHeaders:()=>rVr,selectCover:()=>JGr,setGlobalDispatcher:()=>hVr,streamSSE:()=>nVr,timeout:()=>oVr});var VC,ea,_Gr,kGr,CGr,RGr,AGr,IGr,PGr,MGr,OGr,NGr,DGr,LGr,UGr,FGr,$Gr,BGr,zGr,jGr,GGr,VGr,qGr,HGr,WGr,KGr,JGr,YGr,XGr,ZGr,QGr,eVr,tVr,rVr,nVr,oVr,sVr,iVr,aVr,cVr,lVr,uVr,dVr,pVr,mVr,fVr,gVr,hVr,yVr,xVr,vVr,bVr,a9e=_(()=>{VC={get(r,e){return e==="__esModule"?!0:e==="default"?new Proxy({},{get:VC.get}):new Proxy(function(...t){return new Proxy({},{get:VC.get})},{get:VC.get,apply(t,n,o){return new Proxy({},{get:VC.get})},construct(t,n){return new Proxy({},{get:VC.get})}})}},ea=new Proxy({},VC),_Gr=ea,{BedrockClient:kGr,ListFoundationModelsCommand:CGr,BedrockRuntimeClient:RGr,ConverseCommand:AGr,ConverseStreamCommand:IGr,ImageFormat:PGr}=ea,{SageMakerRuntimeClient:MGr,InvokeEndpointCommand:OGr,InvokeEndpointWithResponseStreamCommand:NGr}=ea,{GoogleAuth:DGr,VertexAI:LGr,TextToSpeechClient:UGr}=ea,{Webhook:FGr}=ea,{Hippocampus:$Gr,HippocampusConfig:BGr}=ea,{createClient:zGr}=ea,{Queue:jGr,Worker:GGr,Job:VGr,QueueScheduler:qGr,FlowProducer:HGr}=ea,{Cron:WGr}=ea,{parseBuffer:KGr,selectCover:JGr}=ea,{extractRawText:YGr,convertToHtml:XGr}=ea,{Hono:ZGr}=ea,{cors:QGr,HTTPException:eVr,logger:tVr,secureHeaders:rVr,streamSSE:nVr,timeout:oVr}=ea,sVr=globalThis.fetch,iVr=globalThis.Request,aVr=globalThis.Response,cVr=globalThis.Headers,lVr=globalThis.FormData,uVr=globalThis.File,dVr=globalThis.Blob,pVr=ea.Agent,mVr=ea.Pool,fVr=ea.Client,gVr=ea.Dispatcher,hVr=()=>{},yVr=()=>ea,xVr=ea.MockAgent,vVr={redirect:()=>r=>r,retry:()=>r=>r},bVr=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 c9e={};ee(c9e,{ExpressServerAdapter:()=>hL});var hL,tge=_(()=>{"use strict";W();Hu();BC();pf();hL=class extends $d{app;server;frameworkInitialized=!1;sockets=new Set;constructor(e,t={}){super(e,t)}initializeFramework(){}async initializeFrameworkAsync(){if(this.frameworkInitialized)return;let t=(await Promise.resolve().then(()=>(n9e(),r9e))).default;if(this.app=t(),this.config.bodyParser.enabled){let n=this.config.bodyParser.maxSize||this.config.bodyParser.jsonLimit||"10mb";this.app.use(t.json({limit:this.config.bodyParser.jsonLimit||n})),this.app.use(t.urlencoded({extended:!0,limit:n}))}if(this.config.cors.enabled){let o=(await Promise.resolve().then(()=>(s9e(),o9e))).default;this.app.use(o({origin:this.config.cors.origins,methods:this.config.cors.methods,allowedHeaders:this.config.cors.headers,credentials:this.config.cors.credentials,maxAge:this.config.cors.maxAge}))}if(this.config.rateLimit.enabled){let o=(await Promise.resolve().then(()=>(a9e(),i9e))).default,s=this.config.rateLimit.windowMs,i=o({windowMs:s,max:this.config.rateLimit.maxRequests,message:{error:{code:"RATE_LIMIT_EXCEEDED",message:this.config.rateLimit.message}},standardHeaders:!0,legacyHeaders:!1,handler:(a,c)=>{let l=Math.ceil(s/1e3);c.setHeader("Retry-After",String(l)),c.status(429).json({error:{code:"RATE_LIMIT_EXCEEDED",message:this.config.rateLimit.message},metadata:{timestamp:new Date().toISOString(),retryAfter:l}})}});this.app.use(i)}this.app.use((n,o,s)=>{let i=n.headers["x-request-id"]||this.generateRequestId();n.headers["x-request-id"]=i,o.setHeader("X-Request-ID",i),s()}),this.config.logging.enabled&&this.app.use((n,o,s)=>{let i=Date.now(),a=n.headers["x-request-id"];g.info(`[ExpressAdapter] ${n.method} ${n.path}`,{requestId:a}),o.on("finish",()=>{g.info(`[ExpressAdapter] ${n.method} ${n.path} ${o.statusCode}`,{requestId:a,duration:Date.now()-i})}),s()}),this.frameworkInitialized=!0}async initialize(){await this.initializeFrameworkAsync(),await super.initialize()}registerFrameworkRoute(e){let t=e.method.toLowerCase();this.app[t](e.path,async(n,o,s)=>{let i=n.headers["x-request-id"],a=Date.now(),c=this.createContext({requestId:i,method:n.method,path:n.path,headers:n.headers,query:n.query,params:n.params,body:n.body});o.locals.responseHeaders&&(c.responseHeaders={...o.locals.responseHeaders}),this.emit("request",{requestId:i,method:c.method,path:c.path,timestamp:new Date});try{if(e.streaming?.enabled)return this.handleStreamingResponse(o,c,e);let l=await e.handler(c),u=Date.now()-a;if(vh(l)){let d=l.httpStatus??500;if(this.emit("response",{requestId:i,statusCode:d,duration:u,timestamp:new Date}),c.responseHeaders)for(let[p,f]of Object.entries(c.responseHeaders))o.setHeader(p,f);o.status(d).json({error:l.error,metadata:{...l.metadata,requestId:i,timestamp:new Date().toISOString(),duration:u}});return}if(this.emit("response",{requestId:i,statusCode:200,duration:u,timestamp:new Date}),c.responseHeaders)for(let[d,p]of Object.entries(c.responseHeaders))o.setHeader(d,p);o.json({data:l,metadata:{requestId:i,timestamp:new Date().toISOString(),duration:u}})}catch(l){s(l)}}),this.setupErrorHandler()}errorHandlerRegistered=!1;setupErrorHandler(){this.errorHandlerRegistered||(this.errorHandlerRegistered=!0,this.app.use((e,t,n,o)=>{let s=t.headers["x-request-id"];g.error("[ExpressAdapter] Request error",{requestId:s,error:e.message,stack:e.stack}),this.emit("error",{requestId:s,error:e,timestamp:new Date});let i=e instanceof zn,a=i?e.getHttpStatus():500,c=i?e.code:"INTERNAL_ERROR",l=i?e.message:"An internal error occurred";n.status(a).json({error:{code:c,message:l},metadata:{requestId:s,timestamp:new Date().toISOString()}})}))}async handleStreamingResponse(e,t,n){e.setHeader("Content-Type","text/event-stream"),e.setHeader("Cache-Control","no-cache"),e.setHeader("Connection","keep-alive");try{let o=await n.handler(t);if(o&&typeof o=="object"&&Symbol.asyncIterator in o)for await(let s of o)e.write(`event: message
|
|
2221
2221
|
`),e.write(`data: ${JSON.stringify(s)}
|
|
2222
2222
|
|
|
2223
2223
|
`);else e.write(`event: complete
|