@robota-sdk/agent-core 3.0.0-beta.61 → 3.0.0-beta.62
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 +11 -0
- package/dist/browser/index.d.ts +21 -9
- package/dist/browser/index.js +12 -8
- package/dist/node/index.cjs +12 -8
- package/dist/node/index.d.cts +21 -9
- package/dist/node/index.d.ts +21 -9
- package/dist/node/index.js +12 -8
- package/package.json +1 -1
package/dist/browser/index.js
CHANGED
|
@@ -1,10 +1,14 @@
|
|
|
1
|
-
import {randomUUID}from'crypto';import Wn from'jssha';import {spawn}from'child_process';var pe={isPrimitive:r=>r==null||typeof r=="string"||typeof r=="number"||typeof r=="boolean",isArray:r=>Array.isArray(r)&&r.every(e=>pe.isUniversalValue(e)),isObject:r=>typeof r=="object"&&r!==null&&!Array.isArray(r)&&!(r instanceof Date)&&Object.values(r).every(e=>pe.isUniversalValue(e)),isUniversalValue:r=>r instanceof Date?true:pe.isPrimitive(r)||pe.isArray(r)||pe.isObject(r)};var ko="Provider does not declare native web search support.",Ho="Provider does not declare native web fetch support.";function fe(r){return {functionCalling:{supported:r},nativeWebTools:{webSearch:{supported:false,enabled:false,reason:ko},webFetch:{supported:false,enabled:false,reason:Ho}}}}function Kt(r){let e=typeof r.supportsTools=="function"?r.supportsTools():false;return r.getCapabilities?.()??fe(e)}function He(r,e,t){t?.webSearch===true&&qt(r,"web search",e.nativeWebTools.webSearch),t?.webFetch===true&&qt(r,"web fetch",e.nativeWebTools.webFetch);}function qt(r,e,t){if(!t.supported)throw new Error(`Provider ${r} does not support native ${e}.${jt(t.reason)}`);if(!t.enabled)throw new Error(`Provider ${r} supports native ${e} but it is not enabled.${jt(t.reason)}`)}function jt(r){return r?` ${r}`:""}function Jt(r,e){return r.find(t=>t.type===e||t.aliases?.includes(e)===true)}function Yt(r){return r.map(e=>{if(!e.aliases||e.aliases.length===0)return e.type;let t=e.aliases.length===1?"alias":"aliases";return `${e.type} (${t}: ${e.aliases.join(", ")})`}).join(", ")}function Zt(r){if(r?.credentialRequirement!==void 0)return r.credentialRequirement;if(r?.requiresApiKey===true)return {anyOf:["apiKey"]}}function Qt(r){return "generateImage"in r&&typeof r.generateImage=="function"}function er(r){return "createVideo"in r&&"getVideoJob"in r&&"cancelVideoJob"in r&&typeof r.createVideo=="function"&&typeof r.getVideoJob=="function"&&typeof r.cancelVideoJob=="function"}function Ve(r){return "getEstimatedDuration"in r||"getExecutionSteps"in r||"setProgressCallback"in r}function Vo(r,e){if(Ve(r)&&r.getEstimatedDuration)return r.getEstimatedDuration(e)}function Fo(r,e){if(Ve(r)&&r.getExecutionSteps)return r.getExecutionSteps(e)}function $o(r,e){return Ve(r)&&r.setProgressCallback?(r.setProgressCallback(e),true):false}var Fe=class{history=[];isInitialized=false;config;async configure(e){this.config=e,await this.ensureInitialized();}getHistory(){return [...this.history]}clearHistory(){this.history=[];}addMessage(e){this.history.push(e);}validateInput(e){if(!e||typeof e!="string")throw new Error("Input must be a non-empty string")}async ensureInitialized(){this.isInitialized||(await this.initialize(),this.isInitialized=true);}async dispose(){this.clearHistory(),this.isInitialized=false;}};var ne=class{initialized=false;async initialize(){this.initialized||(await this.doInitialize(),this.initialized=true);}async dispose(){await this.doDispose(),this.initialized=false;}isInitialized(){return this.initialized}ensureInitialized(){if(!this.initialized)throw new Error(`${this.constructor.name} is not initialized`)}};function Q(r){return r.category==="chat"}function ve(r){let e=r.data;if(!e)throw new Error(`Chat entry ${r.id} has no data`);return {...e,id:r.id,timestamp:r.timestamp}}function vt(r){return {id:r.id,timestamp:r.timestamp,category:"chat",type:r.role,data:{...r}}}function zo(r){return r.filter(Q).map(ve)}function tr(r){return r.role==="user"}function J(r){return r.role==="assistant"}function Ee(r){return r.role==="system"}function $e(r){return r.role==="tool"}var z={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}},Ie=class r{static instance;globalLevel;constructor(){this.globalLevel="warn";}static getInstance(){return r.instance||(r.instance=new r),r.instance}getGlobalLevel(){return this.globalLevel}setGlobalLevel(e){this.globalLevel=e;}},Et=class{level;packageName;sinkLogger;constructor(e,t){this.packageName=e,this.sinkLogger=t||z;}debug(...e){if(this.shouldLog("debug")){let[t,o]=e;this.forward("debug",String(t??""),ze(o)?o:void 0);}}info(...e){if(this.shouldLog("info")){let[t,o]=e;this.forward("info",String(t??""),ze(o)?o:void 0);}}warn(...e){if(this.shouldLog("warn")){let[t,o]=e;this.forward("warn",String(t??""),ze(o)?o:void 0);}}error(...e){if(this.shouldLog("error")){let[t,o]=e;this.forward("error",String(t??""),ze(o)?o:void 0);}}log(...e){this.info(...e);}getLevel(){return this.level||Ie.getInstance().getGlobalLevel()}shouldLog(e){let t=this.getLevel();if(t==="silent")return false;let o=["debug","info","warn","error","silent"];return o.indexOf(e)>=o.indexOf(t)}forward(e,t,o){let n={timestamp:new Date().toISOString(),level:e,message:t,...o&&{context:o},packageName:this.packageName},i=`[${n.timestamp}] [${n.level.toUpperCase()}] [${n.packageName}] ${n.message}`;switch(e){case "debug":this.sinkLogger.debug(i,o??{});return;case "info":this.sinkLogger.info(i,o??{});return;case "warn":this.sinkLogger.warn(i,o??{});return;case "error":this.sinkLogger.error(i,o??{});return;case "silent":return}}};function ze(r){return typeof r=="object"&&r!==null&&!(r instanceof Error)&&!(r instanceof Date)&&!Array.isArray(r)}function A(r,e){return new Et(r,e)}function It(r){Ie.getInstance().setGlobalLevel(r);}function Mi(){return Ie.getInstance().getGlobalLevel()}var P=A("agents");function rr(r){if(!Array.isArray(r))throw new Error("Messages must be an array");if(r.length===0)throw new Error("Messages array cannot be empty");for(let e of r)if(!e.role||!["user","assistant","system","tool"].includes(e.role))throw new Error(`Invalid message role: ${e.role}`)}function or(r){if(r){if(!Array.isArray(r))throw new Error("Tools must be an array");for(let e of r){if(!e.name||typeof e.name!="string")throw new Error("Tool must have a valid name");if(!e.description||typeof e.description!="string")throw new Error("Tool must have a valid description");if(!e.parameters||typeof e.parameters!="object"||e.parameters===null||Array.isArray(e.parameters))throw new Error("Tool must have valid parameters")}}}async function nr(r,e,t,o){if(!r)throw new Error(`Executor is required for ${e} provider. Configure an executor or use direct execution path.`);if(!o?.model)throw new Error(`Model is required for executor execution in ${e} provider.`);return r.executeChat({messages:t,options:o,provider:e,model:o.model,...o.tools&&{tools:o.tools}})}async function*ir(r,e,t,o){if(!r||!r.executeChatStream)throw new Error(`Streaming executor is required for ${e} provider.`);if(!o?.model)throw new Error(`Model is required for executor streaming in ${e} provider.`);let n=r.executeChatStream({messages:t,options:o,provider:e,model:o.model,stream:true,...o.tools&&{tools:o.tools}});for await(let i of n)yield i;}var Tt=class{config;executor;logger;constructor(e=z){this.logger=e;}async configure(e){this.config=e,this.hasExecutor(e)&&e.executor&&(this.executor=e.executor);}hasExecutor(e){return typeof e=="object"&&e!==null&&"executor"in e}async*streamWithAbort(e,t){let o=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let n=await Bo(o,t);if(n.done||(await Xo(t),t?.aborted))break;yield n.value;}}finally{t?.aborted&&await o.return?.();}}async generateResponse(e){let t=await this.chat(e.messages,{...e.model!==void 0&&{model:e.model},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}});return {content:t.content??null,toolCalls:J(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata}}async*generateStreamingResponse(e){if(!this.chatStream)throw new Error(`[AI-PROVIDER] Streaming is not supported by provider "${this.name}"`);for await(let t of this.chatStream(e.messages,{...e.model!==void 0&&{model:e.model},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}}))yield {content:t.content??null,toolCalls:J(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata};}supportsTools(){return true}getCapabilities(){return fe(this.supportsTools())}validateConfig(){return true}validateMessages(e){rr(e);}validateTools(e){or(e);}validateNativeWebTools(e){He(this.name,this.getCapabilities(),e);}async executeViaExecutorOrDirect(e,t){return nr(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){this.logger.debug?.("\u{1F50D} [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request",{provider:this.name,model:t?.model,hasTools:!!t?.tools,toolsCount:t?.tools?.length||0,toolNames:t?.tools?.map(o=>o.name)||[]}),yield*ir(this.executor,this.name,e,t);}async dispose(){this.executor?.dispose&&await this.executor.dispose();}};async function Bo(r,e){if(!e)return r.next();if(e.aborted)return {done:true,value:void 0};let t,o=new Promise(n=>{t=()=>n({done:true,value:void 0}),e.addEventListener("abort",t,{once:true});});try{return await Promise.race([r.next(),o])}finally{t&&e.removeEventListener("abort",t);}}async function Xo(r){r?.aborted||await new Promise(e=>setTimeout(e,0));}var R={CREATED:"created",EXECUTION_START:"execution_start",EXECUTION_COMPLETE:"execution_complete",EXECUTION_ERROR:"execution_error",AGGREGATION_COMPLETE:"aggregation_complete",CONFIG_UPDATED:"config_updated"},Y="agent";var O=class extends Error{constructor(t,o){super(t);this.context=o;this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype);}},I=class extends O{code="CONFIGURATION_ERROR";category="user";recoverable=false;constructor(e,t){super(`Configuration Error: ${e}`,t);}},M=class extends O{constructor(t,o,n){super(`Validation Error: ${t}`,n);this.field=o;}code="VALIDATION_ERROR";category="user";recoverable=false},ht=class extends O{constructor(t,o,n,i){super(`Provider Error (${o}): ${t}`,i);this.provider=o;this.originalError=n;}code="PROVIDER_ERROR";category="provider";recoverable=true},sr=class extends O{constructor(t,o,n){super(`Authentication Error: ${t}`,n);this.provider=o;}code="AUTHENTICATION_ERROR";category="user";recoverable=false},ar=class extends O{constructor(t,o,n,i){super(`Rate Limit Error: ${t}`,i);this.retryAfter=o;this.provider=n;}code="RATE_LIMIT_ERROR";category="provider";recoverable=true},lr=class extends O{constructor(t,o,n){super(`Network Error: ${t}`,n);this.originalError=o;}code="NETWORK_ERROR";category="system";recoverable=true},F=class extends O{constructor(t,o,n,i){super(`Tool Execution Error (${o}): ${t}`,i);this.toolName=o;this.originalError=n;}code="TOOL_EXECUTION_ERROR";category="system";recoverable=false},ur=class extends O{constructor(t,o,n,i){super(`Model "${t}" is not available for provider "${o}"`,i);this.availableModels=n;}code="MODEL_NOT_AVAILABLE";category="user";recoverable=false},dr=class extends O{code="CIRCUIT_BREAKER_OPEN";category="system";recoverable=true;constructor(e="Circuit breaker is open",t){super(e,t);}},ee=class extends O{constructor(t,o,n){super(`Plugin Error (${o}): ${t}`,n);this.pluginName=o;}code="PLUGIN_ERROR";category="system";recoverable=false},cr=class extends O{code="STORAGE_ERROR";category="system";recoverable=true;constructor(e,t){super(`Storage Error: ${e}`,t);}},Be=class extends O{code="CACHE_INTEGRITY_ERROR";category="system";recoverable=false;constructor(e,t){super(`Cache Integrity Error: ${e}`,t);}},gr=class{static isRecoverable(e){return e instanceof O?e.recoverable:false}static getErrorCode(e){return e instanceof O?e.code:"UNKNOWN_ERROR"}static fromUnknown(e,t="An unknown error occurred"){if(e instanceof O)return e;if(e instanceof Error)return new I(e.message||t);let o=typeof e=="string"?e:t;return new I(o)}static wrapProviderError(e,t,o){let n=e instanceof Error?e:new Error(String(e));return new ht(`Failed to ${o}`,t,n,{operation:o})}};var mr=1;function Go(r){if(!r.executionId)throw new M("[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId");if(!r.ownerType)throw new M(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${r.executionId}`);if(!r.ownerId)throw new M(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${r.executionId}`);return {executionId:r.executionId,ownerType:r.ownerType,ownerId:r.ownerId}}function pr(r){let e=Go(r);return {toolName:r.toolName,parameters:r.parameters,executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:r.ownerPath,metadata:r.metadata,eventService:r.eventService,baseEventService:r.baseEventService}}function Wo(r){return {toolName:r.toolName,executionId:r.executionId??"",success:false,error:"Execution interrupted by user",result:null}}function qo(r,e){return {toolName:r.toolName,result:null,success:false,error:e.message,executionId:r.executionId}}function fr(r){return new Error(`Tool execution failed: toolName=${String(r.toolName)} executionId=${String(r.executionId)} error=${String(r.error||"Unknown error")}`)}function jo(r){return r!==void 0}function Ko(r){return r!==void 0}function Jo(r,e){if(r===0)return 0;if(e===void 0||!Number.isFinite(e))return r;let t=Math.floor(e);return t<mr?mr:Math.min(t,r)}async function Yo(r,e,t,o){let n=r.requests[o];if(n)try{let i=r.signal?.aborted?Wo(n):await e.executeTool(n.toolName,n.parameters,pr(n));t.resultsByIndex[o]=i,i.success||(t.errorsByIndex[o]=fr(i));}catch(i){let s=i instanceof Error?i:new Error(String(i));t.errorsByIndex[o]=s,t.resultsByIndex[o]=qo(n,s);}}async function Zo(r,e,t){for(;t.nextRequestIndex<r.requests.length;){let o=t.nextRequestIndex;t.nextRequestIndex+=1,await Yo(r,e,t,o);}}async function Qo(r,e){let t={resultsByIndex:new Array(r.requests.length),errorsByIndex:new Array(r.requests.length),nextRequestIndex:0},o=Jo(r.requests.length,r.maxConcurrency),n=Array.from({length:o},()=>Zo(r,e,t));await Promise.all(n);let i=t.resultsByIndex.filter(jo),s=t.errorsByIndex.filter(Ko);if(s.length>0&&!r.continueOnError)throw s[0];return {results:i,errors:s}}async function en(r,e){let t=[],o=[];for(let n of r.requests)try{let i=await e.executeTool(n.toolName,n.parameters,pr(n));if(t.push(i),i.success||o.push(fr(i)),!i.success&&!r.continueOnError)break}catch(i){let s=i instanceof Error?i:new Error(String(i));if(o.push(s),!r.continueOnError)break}return {results:t,errors:o}}async function vr(r,e,t){return t.debug(`Executing ${r.requests.length} tools in ${r.mode} mode`),r.mode==="parallel"?Qo(r,e):en(r,e)}var _={CALL_START:"call_start",CALL_COMPLETE:"call_complete",CALL_ERROR:"call_error",CALL_RESPONSE_READY:"call_response_ready"},W="tool",Te="unknown_tool",Xe=class{tools;logger;constructor(e,t=z){this.tools=e,this.logger=t;}async executeTool(e,t,o){this.logger.debug(`Executing tool: ${e}`);try{if(!o?.executionId)throw new M("ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext");if(!this.tools.hasTool(e)){let u=this.tools.getTools().map(m=>m.name).sort(),c=tn(e,u),g=o.eventService;if(g){let m={timestamp:new Date,toolName:e,error:c};g.emit(_.CALL_ERROR,m);}return this.logger.warn("Tool call skipped because requested tool is not registered",{toolName:e,availableTools:u}),{success:!1,error:c,toolName:e,executionId:o.executionId,metadata:{errorCode:Te,requestedTool:e,availableTools:u}}}let n=o.eventService;if(n){let u={timestamp:new Date,toolName:e,parameters:t};n.emit(_.CALL_START,u);}let{toolName:i,parameters:s,...a}=o,l={...a,toolName:e,parameters:t,executionId:o.executionId},d=await this.tools.executeTool(e,t,l);if(this.logger.debug(`Tool execution completed: ${e}`),n){let u={timestamp:new Date,toolName:e,result:d};n.emit(_.CALL_COMPLETE,u),n.emit(_.CALL_RESPONSE_READY,u);}return {success:!0,result:d,toolName:e,executionId:l.executionId}}catch(n){this.logger.error(`Tool execution failed: ${e}`);let i=n instanceof Error?n:new Error(String(n)),s=o?.eventService;if(s&&o?.executionId){let a={timestamp:new Date,toolName:e,error:i.message};s.emit(_.CALL_ERROR,a);}return {success:false,error:i.message,toolName:e,executionId:o?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(o=>{let n;try{n=JSON.parse(o.function.arguments);}catch{throw new M(`Failed to parse arguments for tool "${o.function.name}" (call ${o.id}): invalid JSON`)}return {toolName:o.function.name,parameters:n,executionId:o.id,ownerType:"tool",ownerId:o.id,ownerPath:[...t.ownerPathBase,{type:"tool",id:o.id}],metadata:t.metadataFactory?t.metadataFactory(o):void 0}})}async executeTools(e){return vr(e,this,this.logger)}};function tn(r,e){let t=e.length>0?e.join(", "):"no registered tools are available";return `Tool "${r}" is not registered, so the tool call was not executed. Available tools: ${t}.`}var C={START:"start",COMPLETE:"complete",ERROR:"error",ASSISTANT_MESSAGE_START:"assistant_message_start",ASSISTANT_MESSAGE_COMPLETE:"assistant_message_complete",USER_MESSAGE:"user_message",TOOL_RESULTS_TO_LLM:"tool_results_to_llm",TOOL_RESULTS_READY:"tool_results_ready"},$="execution";var te=class{listeners=new Set;subscribe(e){this.listeners.add(e);}unsubscribe(e){this.listeners.delete(e);}notifyListeners(e,t,o){for(let n of this.listeners)n(e,t,o);}},ie=class extends te{emit(e,t,o){}},ye=new ie;function re(r){return r===ye||r instanceof ie}function yt(r,e){if(!r||r.trim().length===0)throw new Error("[EVENTS] ownerType is required to compose event names.");if(r.includes("."))throw new Error(`[EVENTS] ownerType must not contain '.': "${r}"`);if(!e||e.trim().length===0)throw new Error("[EVENTS] local event name is required.");if(e.includes("."))throw new Error(`[EVENTS] Local event name must not contain '.': "${e}"`);return `${r}.${e}`}var Er=36,rn=10;function on(){return `span_${Date.now().toString(Er)}_${Math.random().toString(Er).slice(2,rn)}`}var he=class extends te{base;binding;constructor(e,t){super(),this.base=e,this.binding=t;}emit(e,t,o){if(e.includes("."))throw new Error(`[EVENTS] Local event name must not contain '.': "${e}"`);let n={...o,ownerType:this.binding.ownerType,ownerId:this.binding.ownerId,ownerPath:this.binding.ownerPath,depth:this.binding.ownerPath.length,spanId:o?.spanId??on()},i=yt(this.binding.ownerType,e);this.base.emit(i,t,n);}subscribe(e){this.base.subscribe(e);}unsubscribe(e){this.base.unsubscribe(e);}};function k(r,e){return new he(r,e)}function Ir(r,e){return k(r,e)}var Ge=class extends te{emit(e,t,o){this.notifyListeners(e,t,o);}};var xe={ASSIGNED:"assigned",COMPLETED:"completed"},Tr="task";var hr={MESSAGE:"message",INPUT:"input"},yr="user";function xr(r){return r?.ownerPath?.length?r.ownerPath.map(e=>({...e})):[]}function We(r,e,t,o){if(!t||t.length===0)throw new Error("[EXECUTION] Missing rootId for execution owner context");if(!o||o.length===0)throw new Error("[EXECUTION] Missing executionId for execution owner context");let i=[...r.length?r:e];return t&&!i.some(s=>s.type==="agent"&&s.id===t)&&i.push({type:"agent",id:t}),i.push({type:"execution",id:o}),{ownerType:$,ownerId:o,ownerPath:i}}function xt(r,e,t,o,n,i){if(!n||n.length===0)throw new Error("[EXECUTION] Missing thinkingNodeId for thinking owner context");let a=[...We(r,e,t,o).ownerPath];return i&&(a.push({type:"thinking",id:i}),a.push({type:"tool_result",id:`tool_result_${i}`})),a.push({type:"thinking",id:n}),{ownerType:$,ownerId:o,ownerPath:a}}function Mr(r,e,t,o,n){if(!n||n.length===0)throw new Error("[EXECUTION] Missing toolCallId for tool owner context");let s=[...We(r,e,t,o).ownerPath,{type:"tool",id:n}];return {ownerType:W,ownerId:n,ownerPath:s}}function br(r,e,t,o,n,i){let s=xt(r,e,t,o,n,i).ownerPath,a=`response_${n}`,l=[...s,{type:"response",id:a}];return {ownerType:$,ownerId:o,ownerPath:l}}function qe(r){return "executionId"in r||"toolName"in r}function je(r){let e=0,t=false;for(let o=0;o<r.length;o++){let n=r[o]===" "||r[o]===" "||r[o]===`
|
|
2
|
-
`||r[o]==="\r";!n&&!t?(e++,t=true):n&&(t=false);}return e}function Pr(r,e,t,o,n,i,s){r.emitExecution(
|
|
3
|
-
[Tool: ${p.function.name} executed successfully]`,isComplete:false};}else if(y){let
|
|
4
|
-
[Tool: ${p.function.name} failed: ${w}]`,isComplete:false};}else throw new Error(`[EXECUTION] Missing tool result for tool call "${p.id}" in streaming mode`);e.addToolMessageWithId(h,p.id,p.function.name,x);}let m=r.map(p=>{if(!p.id||p.id.length===0)throw new Error("[EXECUTION] Tool call missing id for streaming tool results ready payload");return p.id});if(m.length===0)throw new Error("[EXECUTION] Tool results ready requires toolCallIds in streaming mode");i.emitExecution(C.TOOL_RESULTS_READY,{parameters:{toolCallIds:m,round:1},metadata:{toolsExecuted:g.results.map(p=>{if(!p.toolName||p.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return p.toolName}),round:1}},t,o);}async function*Or(r,e,t,o,n){let{aiProviders:i,tools:s,conversationHistory:a,toolExecutionService:l,plugins:d,logger:u,eventEmitter:c}=n;u.debug("ExecutionService.executeStream called");let g=n.generateExecutionId(),m=Date.now();if(!o?.conversationId||o.conversationId.length===0)throw new Error("[EXECUTION] conversationId is required for streaming");let p=o.conversationId;c.prepareOwnerPathBases(p);try{let f=a.getConversationStore(o.conversationId);r&&f.addUserMessage(r,{executionId:g}),await H(d,"beforeRun",{input:r,...o?.metadata?{metadata:o.metadata}:{}},u);let y=i.getCurrentProvider();if(!y)throw new Error("No AI provider configured");let h=i.getProvider(y.provider);if(!h)throw new Error(`AI provider '${y.provider}' not found`);if(typeof h.chatStream!="function")throw new Error("Provider must have chatStream method to support streaming execution");u.debug("ExecutionService calling provider.chatStream");let x=f.getMessages(),S=Array.isArray(t.tools)?t.tools.length:void 0;u.debug("[EXECUTION-SERVICE] config.tools:",{length:S});let w=s.getTools(),D=Array.isArray(w)?w.length:void 0;u.debug("[EXECUTION-SERVICE] this.tools.getTools():",{length:D}),u.debug("[EXECUTION-SERVICE] config.tools exists:",{exists:!!t.tools}),u.debug("[EXECUTION-SERVICE] config.tools.length > 0:",{hasTools:t.tools&&t.tools.length>0});let G={model:t.defaultModel.model,...t.tools&&t.tools.length>0&&{tools:s.getTools()}};u.debug("[EXECUTION-SERVICE] Final chatOptions has tools:",{hasTools:!!G.tools});let ge=Array.isArray(G.tools)?G.tools.length:void 0;u.debug("[EXECUTION-SERVICE] Final chatOptions.tools length:",{length:ge});let N=h.chatStream;if(!N)throw new Error("Provider does not support streaming");let V=N.call(h,x,G),B="",v=[],U=-1;for await(let j of V)if(j.content&&(B+=j.content,yield {chunk:j.content,isComplete:!1}),j.role==="assistant"){let me=j;if(Array.isArray(me.toolCalls)&&me.toolCalls.length>0){for(let b of me.toolCalls)if(b.id&&b.id!==""){if(!b.type||b.type.length===0)throw new Error(`[EXECUTION] Tool call "${b.id}" missing type in stream`);if(!b.function?.name||b.function.name.length===0)throw new Error(`[EXECUTION] Tool call "${b.id}" missing function name in stream`);if(typeof b.function.arguments!="string")throw new Error(`[EXECUTION] Tool call "${b.id}" missing arguments in stream`);U=v.length,v.push({id:b.id,type:b.type,function:{name:b.function.name,arguments:b.function.arguments}}),u.debug(`[TOOL-STREAM] New tool call started: ${b.id} (${b.function?.name})`);}else if(U>=0){let K=typeof b.function?.name=="string"&&b.function.name.length>0,E=typeof b.function?.arguments=="string"&&b.function.arguments.length>0;if(!K&&!E)throw new Error(`[EXECUTION] Tool call fragment missing name/arguments for ${v[U].id}`);K&&(v[U].function.name+=b.function.name),E&&(v[U].function.arguments+=b.function.arguments);let Z=E?b.function.arguments:b.function.name;u.debug(`[TOOL-STREAM] Adding fragment to tool ${v[U].id}: "${Z}"`);}}}if(u.debug("[EXECUTION-SERVICE-STREAM] Stream completed, toolCalls detected:",{count:v.length}),typeof B!="string")throw new Error("[EXECUTION] Streaming response content is required");f.addAssistantMessage(B,v,{executionId:g}),v.length>0&&(yield*Ar(v,f,p,g,l,c,u)),await H(d,"afterRun",{input:r,response:B,...o?.metadata?{metadata:o.metadata}:{}},u),yield {chunk:"",isComplete:!0};}catch(f){throw u.error("ExecutionService streaming execution failed",{error:f instanceof Error?f.message:String(f),executionTime:Date.now()-m}),await H(d,"onError",{input:r,error:f instanceof Error?f:new Error(String(f)),...o?.metadata?{metadata:o.metadata}:{}},u),f}finally{c.resetOwnerPathBases();}}function Dr(r,e,t){let o=r.getCurrentProvider(),n=o?r.getProvider(o.provider):null;if(!o||!o.provider||!n)throw new Error("[EXECUTION] Provider is required");let i=e.getTools(),s={providerName:o.provider,model:t.defaultModel.model,temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens},a=i.map(l=>{let u=l.parameters?.properties;if(!l.description||l.description.length===0)throw new Error(`[EXECUTION] Tool "${l.name}" is missing description`);return {name:l.name,description:l.description,parameters:u&&typeof u=="object"?Object.keys(u):[]}});return {provider:n,currentInfo:o,aiProviderInfo:s,toolsInfo:a,availableTools:i}}function Ur(r){if(!r.currentInfo)throw new Error("No AI provider configured");if(!r.provider)throw new Error(`AI provider '${r.currentInfo.provider}' not found`);if(typeof r.provider.chat!="function")throw new Error("Provider must have chat method to support execution")}function Nr(r,e,t,o,n){let i=r.getConversationStore(e);if(i.getMessageCount()===0&&t.length>0){for(let s of t)if(s.role==="user")i.addUserMessage(s.content,s.metadata,s.parts);else if(s.role==="assistant")i.addAssistantMessage(s.content,s.toolCalls,s.metadata,s.parts);else if(s.role==="system")i.addSystemMessage(s.content,s.metadata,s.parts);else if(s.role==="tool"){let a=s.metadata?.toolName;if(typeof a!="string"||a.length===0)throw new Error("[EXECUTION] Tool message missing toolName metadata");i.addToolMessageWithId(s.content,s.toolCallId,a,s.metadata,s.parts);}}return o.systemMessage&&i.addSystemMessage(o.systemMessage,{executionId:n}),i}function _r(r,e,t,o){let n=r.getMessages(),i=n.filter(l=>l.role==="assistant"&&typeof l.content=="string"&&l.content.length>0).pop(),s=i?i.content:"No response received. The context window may be full.",a=Date.now()-t.getTime();return {response:s,messages:n.map(l=>{if(typeof l.content!="string")throw new Error("[EXECUTION] Message content is required");return {role:l.role,content:l.content,timestamp:l.timestamp,metadata:l.metadata,...l.role==="assistant"&&"toolCalls"in l?{toolCalls:l.toolCalls}:{},...l.role==="tool"&&"toolCallId"in l?{toolCallId:l.toolCallId}:{}}}),executionId:e,duration:a,tokensUsed:n.filter(l=>l.metadata?.usage).reduce((l,d)=>{let u=d.metadata?.usage;if(u&&typeof u=="object"&&"totalTokens"in u){let c=Number(u.totalTokens);if(Number.isNaN(c))throw new Error("[EXECUTION] totalTokens must be a number");return l+c}return l},0),toolsExecuted:o,success:!!i}}async function Lr(r,e,t,o,n,i,s,a){let l=Date.now()-t.getTime(),d=r instanceof Error?r:new Error(String(r));await H(i,"onError",{error:d,executionContext:mn(e)},s),s.error("Execution pipeline failed",{executionId:n,conversationId:o,duration:l,error:r instanceof Error?r.message:String(r)}),a.emitExecution(C.ERROR,{error:r instanceof Error?r.message:String(r),metadata:{method:"execute",success:false,duration:l}},o,n);}function Mt(){return `exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function bt(r,e){if(!r?.conversationId||r.conversationId.length===0)throw new Error(`[EXECUTION] conversationId is required for ${e}`);return r.conversationId}function mn(r){let t={conversationId:bt(r,"plugin-context"),executionId:r.executionId,startTime:r.startTime.toISOString(),messageCount:r.messages.length};return r.sessionId&&(t.sessionId=r.sessionId),r.userId&&(t.userId=r.userId),t}function se(r){let e=Pt(r.metadata),t=Je(r.usage);return e??t}function Pt(r){if(!r)return;let e=Je({inputTokens:be(r,"inputTokens"),outputTokens:be(r,"outputTokens"),promptTokens:be(r,"promptTokens"),completionTokens:be(r,"completionTokens"),totalTokens:be(r,"totalTokens")});if(e)return e;let t=r.usage;if(typeof t=="string")return pn(t);if(fn(t))return Je(t)}function pn(r){try{let e=JSON.parse(r);return Je(e)}catch{return}}function Je(r){if(!r)return;let e=Ct(r.inputTokens,r.promptTokens),t=Ct(r.outputTokens,r.completionTokens);if(e===void 0||t===void 0)return;let o=Ct(r.totalTokens);return {inputTokens:e,outputTokens:t,...o!==void 0&&{totalTokens:o}}}function be(r,e){let t=r[e];return typeof t=="number"&&Number.isFinite(t)?t:void 0}function Ct(...r){return r.find(e=>typeof e=="number"&&Number.isFinite(e))}function fn(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)&&Object.values(r).every(e=>typeof e=="number"&&Number.isFinite(e))}var Rt=4;function St(r){return Math.ceil(JSON.stringify(r).length/Rt)}function ae(r,e={}){let t=St(r),o=vn(r),n=o?.tokens,i=En(e.usageFloorTokens);return {usedTokens:o?.index===r.length-1?Math.max(n??0,i??0):Math.max(t,n??0,i??0),serializedTokens:t,...n!==void 0&&{providerTokens:n},...i!==void 0&&{usageFloorTokens:i}}}function vn(r){for(let e=r.length-1;e>=0;e--){let t=se(r[e]);if(t)return {tokens:t.totalTokens??t.inputTokens+t.outputTokens,index:e}}}function En(r){if(!(r===void 0||!Number.isFinite(r)||r<=0))return Math.ceil(r)}var Ce={"claude-opus-4-6":{name:"Claude Opus 4.6",id:"claude-opus-4-6",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-4-6":{name:"Claude Sonnet 4.6",id:"claude-sonnet-4-6",contextWindow:1e6,maxOutput:64e3},"claude-haiku-4-5":{name:"Claude Haiku 4.5",id:"claude-haiku-4-5",contextWindow:2e5,maxOutput:64e3},"claude-haiku-4-5-20251001":{name:"Claude Haiku 4.5",id:"claude-haiku-4-5-20251001",contextWindow:2e5,maxOutput:64e3},"claude-sonnet-4-5":{name:"Claude Sonnet 4.5",id:"claude-sonnet-4-5",contextWindow:2e5,maxOutput:64e3},"claude-sonnet-4-5-20250929":{name:"Claude Sonnet 4.5",id:"claude-sonnet-4-5-20250929",contextWindow:2e5,maxOutput:64e3},"claude-opus-4-5":{name:"Claude Opus 4.5",id:"claude-opus-4-5",contextWindow:2e5,maxOutput:64e3},"claude-opus-4-5-20251101":{name:"Claude Opus 4.5",id:"claude-opus-4-5-20251101",contextWindow:2e5,maxOutput:64e3}},wt=2e5;function le(r){return Ce[r]?.contextWindow??wt}var At=16384;function kr(r){return Ce[r]?.maxOutput??At}function Hr(r){return Ce[r]?.name??r}function Vr(r){if(r>=1e6){let t=r/1e6;return Number.isInteger(t)?`${t}M`:`${parseFloat(t.toFixed(1))}M`}if(r<=0)return "0K";if(r<1e3)return "<1K";let e=r/1e3;return Number.isInteger(e)?`${e}K`:`${parseFloat(e.toFixed(1))}K`}function Ot(r,e){let t=Array.isArray(e.lastTrackedAssistantMessage?.toolCalls)&&e.lastTrackedAssistantMessage.toolCalls.length>0,o=`thinking_${r}_round${e.runningAssistantCount+1}`,n=t?`thinking_${r}_round${e.runningAssistantCount}`:void 0;return {thinkingNodeId:o,previousThinkingNodeId:n}}async function Dt(r,e,t,o,n){if(!e.defaultModel?.model)throw new Error("Model is required in defaultModel configuration. Please specify a model.");if(typeof e.defaultModel.model!="string"||e.defaultModel.model.trim()==="")throw new Error("Model must be a non-empty string in defaultModel configuration.");let i={model:e.defaultModel.model,...e.defaultModel.maxTokens!==void 0&&{maxTokens:e.defaultModel.maxTokens},...e.defaultModel.temperature!==void 0&&{temperature:e.defaultModel.temperature},...t.availableTools.length>0&&{tools:t.availableTools},...n},s=t.provider.chat.bind(t.provider);if(o){let a=o.lookup(r,e.defaultModel.model,e.defaultModel.provider,{temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens});if(a)return {role:"assistant",content:a,timestamp:new Date,id:randomUUID(),state:"complete"};let l=await Fr(s,r,i,e.timeout);return typeof l.content=="string"&&o.store(r,e.defaultModel.model,e.defaultModel.provider,l.content,{temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}),l}return Fr(s,r,i,e.timeout)}async function Fr(r,e,t,o){let n=Tn(o),i=t.signal;if(n===void 0&&i===void 0)return r(e,t);if(i?.aborted)throw $r();let s=new AbortController,a,l=false,d,u=()=>{a!==void 0&&(clearTimeout(a),a=void 0);},c=y=>{l||(l=true,d?.(y),s.abort(y));},g=()=>{n===void 0||l||(u(),a=setTimeout(()=>{c(new Error(`Provider call idle timeout after ${n}ms`));},n));},m=()=>{c($r());};i?.addEventListener("abort",m,{once:true});let p=t.onTextDelta,f={...t,signal:s.signal,...p!==void 0?{onTextDelta:y=>{g(),p(y);}}:{}};g();try{return await Promise.race([r(e,f),new Promise((y,h)=>{d=h;})])}finally{l=true,u(),i?.removeEventListener("abort",m);}}function Tn(r){if(!(r===void 0||!Number.isFinite(r)||r<=0))return r}function $r(){let r=new Error("aborted");return r.name="AbortError",r}function Ut(r,e,t,o,n){let i=r.role==="assistant"?r.toolCalls:void 0,s=Array.isArray(i)&&i.length>0;if(typeof r.content!="string"&&!s)throw new Error("[EXECUTION] Provider response must have content or tool calls");if(i&&!Array.isArray(i))throw new Error("[EXECUTION] assistant toolCalls must be an array");let a=r.content??"";if(n.debug(`[ROUND-${o}] Provider response completed`,{executionId:e,conversationId:t,round:o,responseLength:a.length,hasToolCalls:Array.isArray(i)&&i.length>0,toolCallsCount:Array.isArray(i)?i.length:0}),r.role!=="assistant")throw new Error(`Unexpected response role: ${r.role}`);let l=r,d=l.toolCalls??[];if(!Array.isArray(d))throw new Error("[EXECUTION] assistantResponse.toolCalls must be an array");return {assistantResponse:l,assistantToolCalls:d}}var hn="Error: Context window near capacity. Tool execution result skipped. Respond with available results and re-request skipped tools if needed.";async function Nt(r,e,t,o,n,i,s,a,l,d,u,c){let{toolExecutionService:g,logger:m,eventEmitter:p}=l;m.debug("Tool calls detected, executing tools",{toolCallCount:r.length,round:n,toolCalls:r.map(v=>({id:v.id,name:v.function?.name}))});let f=p.buildThinkingOwnerContext(t,o,i,s).ownerPath,y=r.length,h=`${i}`,S=g.createExecutionRequestsWithContext(r,{ownerPathBase:f,metadataFactory:v=>({conversationId:t,round:n,directParentId:i,batchId:h,expectedCount:y,toolCallId:v.id})}).map(v=>{if(!v.ownerId)throw new Error("[EXECUTION] Tool request missing ownerId");return {...v,eventService:p.ensureToolEventService(v.ownerId,v.ownerPath),baseEventService:p.getBaseEventService()}}),w={requests:S,mode:"parallel",maxConcurrency:5,continueOnError:true,signal:u};c?.("tool_batch_started",{executionId:o,conversationId:t,round:n,batchId:h,mode:w.mode,maxConcurrency:w.maxConcurrency,requestCount:S.length,tools:S.map(v=>v.toolName)}),S.forEach((v,U)=>{c?.("tool_execution_request",{executionId:o,conversationId:t,round:n,batchId:h,index:U,toolName:v.toolName,toolCallId:v.executionId,parameters:v.parameters,ownerPath:v.ownerPath});});let D=await g.executeTools(w),G=D.results.filter(zr).map(v=>v.toolName).filter(v=>typeof v=="string"&&v.length>0);D.results.forEach((v,U)=>{c?.("tool_execution_result",{executionId:o,conversationId:t,round:n,batchId:h,index:U,toolName:v.toolName,toolCallId:v.executionId,success:v.success,result:v.result,error:v.error,metadata:v.metadata});}),a.toolsExecuted.push(...D.results.filter(v=>!zr(v)).map(v=>{if(!v.toolName||v.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return v.toolName}));let ge=le(d?.defaultModel?.model??""),N=e.getMessages().length,V=Br(r,D,e,n,m,{contextLimit:ge,cumulativeInputTokens:a.cumulativeInputTokens});return e.getMessages().slice(N).forEach((v,U)=>{c?.("tool_message_committed",{executionId:o,conversationId:t,round:n,batchId:h,index:U,message:v}),c?.("history_mutation",{executionId:o,conversationId:t,round:n,batchId:h,mutation:"append_message",index:N+U,message:v});}),p.emitToolResultsEvents(r,D,a.toolsExecuted,t,o,n,i,s),p.clearToolEventServices(),{...V,unknownToolFailureCount:G.length,unknownToolNames:G}}function Br(r,e,t,o,n,i){let a=false,l=0,d=0;for(let u of r){if(!u.id)throw new Error(`Tool call missing ID: ${JSON.stringify(u)}`);let c=u.function?.name;if(!c||c.length===0)throw new Error(`[EXECUTION] Tool call "${u.id}" missing function name`);if(a){n.warn("[ROUND] Skipping tool result due to context overflow",{toolCallId:u.id,toolName:c,round:o}),t.addToolMessageWithId(hn,u.id,c,{round:o,success:false,error:"context_overflow",toolName:c}),d++;continue}let g=e.results.find(y=>y.executionId===u.id),m=e.errors.find(y=>qe(y)&&y.executionId===u.id),p,f={round:o};if(g&&g.success){if(typeof g.result>"u")throw new Error("[EXECUTION] Tool result missing result payload");p=typeof g.result=="string"?g.result:JSON.stringify(g.result),f.success=true,g.toolName&&(f.toolName=g.toolName);}else if(g&&!g.success){if(!g.error||g.error.length===0)throw new Error("[EXECUTION] Tool result missing error message");p=`Error: ${g.error}`,f.success=false,f.error=g.error,g.toolName&&(f.toolName=g.toolName),g.metadata?.errorCode===Te&&(f.errorCode=Te,typeof g.metadata.requestedTool=="string"&&(f.requestedTool=g.metadata.requestedTool),Array.isArray(g.metadata.availableTools)&&(f.availableTools=g.metadata.availableTools.filter(y=>typeof y=="string")));}else if(m){let y=m,h=y.error?.message?y.error.message:y.message?y.message:"";if(!h||h.length===0)throw new Error("[EXECUTION] Tool execution error missing message");p=`Error: ${h}`,f.success=false,f.error=h,y.toolName&&(f.toolName=y.toolName);}else throw new Error(`No execution result found for tool call ID: ${u.id}`);if(n.debug("Adding tool result to conversation",{toolCallId:u.id,toolName:c,content:p.substring(0,100),round:o,currentHistoryLength:t.getMessages().length}),t.addToolMessageWithId(p,u.id,c,f),i){let h=ae(t.getMessages(),{usageFloorTokens:i.cumulativeInputTokens}).usedTokens;h>i.contextLimit*.8&&(n.warn("[ROUND] Context budget exceeded after tool result \u2014 skipping remaining tools",{estimatedTokens:h,contextLimit:i.contextLimit,toolCallId:u.id,round:o}),a=true);}l++,n.debug("Tool result added to history",{toolCallId:u.id,newHistoryLength:t.getMessages().length,round:o});}return {contextOverflowed:a,addedCount:l,skippedCount:d,unknownToolFailureCount:0,unknownToolNames:[]}}function zr(r){return !r.success&&r.metadata?.errorCode===Te}function _t(r){let e=se(r);if(!e)return;let t=e.totalTokens??e.inputTokens+e.outputTokens;return {inputTokens:e.inputTokens,outputTokens:e.outputTokens,usage:{totalTokens:t,inputTokens:e.inputTokens,outputTokens:e.outputTokens}}}var Xr=.95,Mn=2;function bn(r,e,t){let o=ae(r,{usageFloorTokens:t}),n=le(e),i=n*Xr,s=n>0?Math.round(o.usedTokens/n*1e4)/100:100;return {shouldBlock:o.usedTokens>i,estimatedTokens:o.usedTokens,contextLimit:n,thresholdTokens:i,thresholdPercentage:Xr*100,usedPercentage:s,serializedTokens:o.serializedTokens,...o.providerTokens!==void 0&&{providerTokens:o.providerTokens},...o.usageFloorTokens!==void 0&&{usageFloorTokens:o.usageFloorTokens}}}async function Gr(r,e,t,o,n,i,s,a,l){let{plugins:d,logger:u,eventEmitter:c,cacheService:g}=l,m=r.currentRound;u.debug(`[ROUND-${m}] Starting execution round ${m}`,{executionId:n,conversationId:i.conversationId,round:m,maxRounds:e});let p=t.getMessages();if(!Array.isArray(p))throw new Error("[EXECUTION] Conversation messages must be an array");let{thinkingNodeId:f,previousThinkingNodeId:y}=Ot(o,r),h=p;u.debug("Current conversation messages",{round:m,messageCount:h.length,fullHistory:h.map((E,Z)=>({index:Z,role:E.role,content:E.content?.substring(0,100),hasToolCalls:"toolCalls"in E?!!E.toolCalls?.length:false,toolCallId:"toolCallId"in E?E.toolCallId:void 0,toolCallsCount:"toolCalls"in E?E.toolCalls?.length:0}))}),await H(d,"beforeProviderCall",{messages:h},u),u.debug("Sending messages to AI provider",{round:m,messageCount:h.length,lastFewMessages:h.slice(-5).map(E=>({role:E.role,content:E.content?.substring(0,50),hasToolCalls:"toolCalls"in E?!!E.toolCalls?.length:false,toolCallId:"toolCallId"in E?E.toolCallId:void 0}))}),c.emitWithContext(C.ASSISTANT_MESSAGE_START,{parameters:{round:m,messageCount:h.length},metadata:{round:m,thinkingNodeId:f}},()=>c.buildThinkingOwnerContext(o,n,f,y),E=>{if(!E.ownerType||!E.ownerId)throw new Error("[EXECUTION] Missing owner context for thinking event");return k(c.getBaseEventService(),{ownerType:E.ownerType,ownerId:E.ownerId,ownerPath:E.ownerPath})});let x=bn(h,s.defaultModel.model,r.cumulativeInputTokens);if(x.shouldBlock){u.warn("[ROUND] Context hard-capacity prevention before provider call",{estimatedTokens:x.estimatedTokens,contextLimit:x.contextLimit,thresholdTokens:x.thresholdTokens,thresholdPercentage:x.thresholdPercentage,serializedTokens:x.serializedTokens,providerTokens:x.providerTokens??0,usageFloorTokens:x.usageFloorTokens??0,round:m});let E={round:m,contextOverflow:true,estimatedTokens:x.estimatedTokens,contextLimit:x.contextLimit,thresholdTokens:x.thresholdTokens,thresholdPercentage:x.thresholdPercentage,serializedTokens:x.serializedTokens,providerTokens:x.providerTokens??0,usageFloorTokens:x.usageFloorTokens??0,usedPercentage:x.usedPercentage};return t.addAssistantMessage(`Context window is near capacity. Cannot process further in this round. Estimated ${x.estimatedTokens.toLocaleString()} / ${x.contextLimit.toLocaleString()} tokens (${Math.round(x.usedPercentage)}%) exceeds the hard-block threshold ${Math.round(x.thresholdPercentage)}%. Run /compact and retry.`,[],E),true}let S=i.onTextDelta??a.provider.onTextDelta;m>1&&S?.(`
|
|
1
|
+
import {randomUUID}from'crypto';import jn from'jssha';import {spawn}from'child_process';var pe={isPrimitive:r=>r==null||typeof r=="string"||typeof r=="number"||typeof r=="boolean",isArray:r=>Array.isArray(r)&&r.every(e=>pe.isUniversalValue(e)),isObject:r=>typeof r=="object"&&r!==null&&!Array.isArray(r)&&!(r instanceof Date)&&Object.values(r).every(e=>pe.isUniversalValue(e)),isUniversalValue:r=>r instanceof Date?true:pe.isPrimitive(r)||pe.isArray(r)||pe.isObject(r)};var Ho="Provider does not declare native web search support.",Vo="Provider does not declare native web fetch support.";function fe(r){return {functionCalling:{supported:r},nativeWebTools:{webSearch:{supported:false,enabled:false,reason:Ho},webFetch:{supported:false,enabled:false,reason:Vo}}}}function Kt(r){let e=typeof r.supportsTools=="function"?r.supportsTools():false;return r.getCapabilities?.()??fe(e)}function He(r,e,t){t?.webSearch===true&&jt(r,"web search",e.nativeWebTools.webSearch),t?.webFetch===true&&jt(r,"web fetch",e.nativeWebTools.webFetch);}function jt(r,e,t){if(!t.supported)throw new Error(`Provider ${r} does not support native ${e}.${qt(t.reason)}`);if(!t.enabled)throw new Error(`Provider ${r} supports native ${e} but it is not enabled.${qt(t.reason)}`)}function qt(r){return r?` ${r}`:""}function Jt(r,e){return r.find(t=>t.type===e||t.aliases?.includes(e)===true)}function Yt(r){return r.map(e=>{if(!e.aliases||e.aliases.length===0)return e.type;let t=e.aliases.length===1?"alias":"aliases";return `${e.type} (${t}: ${e.aliases.join(", ")})`}).join(", ")}function Zt(r){if(r?.credentialRequirement!==void 0)return r.credentialRequirement;if(r?.requiresApiKey===true)return {anyOf:["apiKey"]}}function Qt(r){return "generateImage"in r&&typeof r.generateImage=="function"}function er(r){return "createVideo"in r&&"getVideoJob"in r&&"cancelVideoJob"in r&&typeof r.createVideo=="function"&&typeof r.getVideoJob=="function"&&typeof r.cancelVideoJob=="function"}function Ve(r){return "getEstimatedDuration"in r||"getExecutionSteps"in r||"setProgressCallback"in r}function Fo(r,e){if(Ve(r)&&r.getEstimatedDuration)return r.getEstimatedDuration(e)}function $o(r,e){if(Ve(r)&&r.getExecutionSteps)return r.getExecutionSteps(e)}function zo(r,e){return Ve(r)&&r.setProgressCallback?(r.setProgressCallback(e),true):false}var Fe=class{history=[];isInitialized=false;config;async configure(e){this.config=e,await this.ensureInitialized();}getHistory(){return [...this.history]}clearHistory(){this.history=[];}addMessage(e){this.history.push(e);}validateInput(e){if(!e||typeof e!="string")throw new Error("Input must be a non-empty string")}async ensureInitialized(){this.isInitialized||(await this.initialize(),this.isInitialized=true);}async dispose(){this.clearHistory(),this.isInitialized=false;}};var ne=class{initialized=false;async initialize(){this.initialized||(await this.doInitialize(),this.initialized=true);}async dispose(){await this.doDispose(),this.initialized=false;}isInitialized(){return this.initialized}ensureInitialized(){if(!this.initialized)throw new Error(`${this.constructor.name} is not initialized`)}};function Q(r){return r.category==="chat"}function ve(r){let e=r.data;if(!e)throw new Error(`Chat entry ${r.id} has no data`);return {...e,id:r.id,timestamp:r.timestamp}}function vt(r){return {id:r.id,timestamp:r.timestamp,category:"chat",type:r.role,data:{...r}}}function Bo(r){return r.filter(Q).map(ve)}function tr(r){return r.role==="user"}function J(r){return r.role==="assistant"}function Ee(r){return r.role==="system"}function $e(r){return r.role==="tool"}var B={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}},Ie=class r{static instance;globalLevel;constructor(){this.globalLevel="warn";}static getInstance(){return r.instance||(r.instance=new r),r.instance}getGlobalLevel(){return this.globalLevel}setGlobalLevel(e){this.globalLevel=e;}},Et=class{level;packageName;sinkLogger;constructor(e,t){this.packageName=e,this.sinkLogger=t||B;}debug(...e){if(this.shouldLog("debug")){let[t,o]=e;this.forward("debug",String(t??""),ze(o)?o:void 0);}}info(...e){if(this.shouldLog("info")){let[t,o]=e;this.forward("info",String(t??""),ze(o)?o:void 0);}}warn(...e){if(this.shouldLog("warn")){let[t,o]=e;this.forward("warn",String(t??""),ze(o)?o:void 0);}}error(...e){if(this.shouldLog("error")){let[t,o]=e;this.forward("error",String(t??""),ze(o)?o:void 0);}}log(...e){this.info(...e);}getLevel(){return this.level||Ie.getInstance().getGlobalLevel()}shouldLog(e){let t=this.getLevel();if(t==="silent")return false;let o=["debug","info","warn","error","silent"];return o.indexOf(e)>=o.indexOf(t)}forward(e,t,o){let n={timestamp:new Date().toISOString(),level:e,message:t,...o&&{context:o},packageName:this.packageName},i=`[${n.timestamp}] [${n.level.toUpperCase()}] [${n.packageName}] ${n.message}`;switch(e){case "debug":this.sinkLogger.debug(i,o??{});return;case "info":this.sinkLogger.info(i,o??{});return;case "warn":this.sinkLogger.warn(i,o??{});return;case "error":this.sinkLogger.error(i,o??{});return;case "silent":return}}};function ze(r){return typeof r=="object"&&r!==null&&!(r instanceof Error)&&!(r instanceof Date)&&!Array.isArray(r)}function O(r,e){return new Et(r,e)}function It(r){Ie.getInstance().setGlobalLevel(r);}function Ci(){return Ie.getInstance().getGlobalLevel()}var S=O("agents");function rr(r){if(!Array.isArray(r))throw new Error("Messages must be an array");if(r.length===0)throw new Error("Messages array cannot be empty");for(let e of r)if(!e.role||!["user","assistant","system","tool"].includes(e.role))throw new Error(`Invalid message role: ${e.role}`)}function or(r){if(r){if(!Array.isArray(r))throw new Error("Tools must be an array");for(let e of r){if(!e.name||typeof e.name!="string")throw new Error("Tool must have a valid name");if(!e.description||typeof e.description!="string")throw new Error("Tool must have a valid description");if(!e.parameters||typeof e.parameters!="object"||e.parameters===null||Array.isArray(e.parameters))throw new Error("Tool must have valid parameters")}}}async function nr(r,e,t,o){if(!r)throw new Error(`Executor is required for ${e} provider. Configure an executor or use direct execution path.`);if(!o?.model)throw new Error(`Model is required for executor execution in ${e} provider.`);return r.executeChat({messages:t,options:o,provider:e,model:o.model,...o.tools&&{tools:o.tools}})}async function*ir(r,e,t,o){if(!r||!r.executeChatStream)throw new Error(`Streaming executor is required for ${e} provider.`);if(!o?.model)throw new Error(`Model is required for executor streaming in ${e} provider.`);let n=r.executeChatStream({messages:t,options:o,provider:e,model:o.model,stream:true,...o.tools&&{tools:o.tools}});for await(let i of n)yield i;}var Tt=class{config;executor;logger;constructor(e=B){this.logger=e;}async configure(e){this.config=e,this.hasExecutor(e)&&e.executor&&(this.executor=e.executor);}hasExecutor(e){return typeof e=="object"&&e!==null&&"executor"in e}async*streamWithAbort(e,t){let o=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let n=await Xo(o,t);if(n.done||(await Go(t),t?.aborted))break;yield n.value;}}finally{t?.aborted&&await o.return?.();}}async generateResponse(e){let t=await this.chat(e.messages,{...e.model!==void 0&&{model:e.model},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}});return {content:t.content??null,toolCalls:J(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata}}async*generateStreamingResponse(e){if(!this.chatStream)throw new Error(`[AI-PROVIDER] Streaming is not supported by provider "${this.name}"`);for await(let t of this.chatStream(e.messages,{...e.model!==void 0&&{model:e.model},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}}))yield {content:t.content??null,toolCalls:J(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata};}supportsTools(){return true}getCapabilities(){return fe(this.supportsTools())}validateConfig(){return true}validateMessages(e){rr(e);}validateTools(e){or(e);}validateNativeWebTools(e){He(this.name,this.getCapabilities(),e);}async executeViaExecutorOrDirect(e,t){return nr(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){this.logger.debug?.("\u{1F50D} [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request",{provider:this.name,model:t?.model,hasTools:!!t?.tools,toolsCount:t?.tools?.length||0,toolNames:t?.tools?.map(o=>o.name)||[]}),yield*ir(this.executor,this.name,e,t);}async dispose(){this.executor?.dispose&&await this.executor.dispose();}};async function Xo(r,e){if(!e)return r.next();if(e.aborted)return {done:true,value:void 0};let t,o=new Promise(n=>{t=()=>n({done:true,value:void 0}),e.addEventListener("abort",t,{once:true});});try{return await Promise.race([r.next(),o])}finally{t&&e.removeEventListener("abort",t);}}async function Go(r){r?.aborted||await new Promise(e=>setTimeout(e,0));}var w={CREATED:"created",EXECUTION_START:"execution_start",EXECUTION_COMPLETE:"execution_complete",EXECUTION_ERROR:"execution_error",AGGREGATION_COMPLETE:"aggregation_complete",CONFIG_UPDATED:"config_updated"},Y="agent";var D=class extends Error{constructor(t,o){super(t);this.context=o;this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype);}},T=class extends D{code="CONFIGURATION_ERROR";category="user";recoverable=false;constructor(e,t){super(`Configuration Error: ${e}`,t);}},C=class extends D{constructor(t,o,n){super(`Validation Error: ${t}`,n);this.field=o;}code="VALIDATION_ERROR";category="user";recoverable=false},ht=class extends D{constructor(t,o,n,i){super(`Provider Error (${o}): ${t}`,i);this.provider=o;this.originalError=n;}code="PROVIDER_ERROR";category="provider";recoverable=true},sr=class extends D{constructor(t,o,n){super(`Authentication Error: ${t}`,n);this.provider=o;}code="AUTHENTICATION_ERROR";category="user";recoverable=false},ar=class extends D{constructor(t,o,n,i){super(`Rate Limit Error: ${t}`,i);this.retryAfter=o;this.provider=n;}code="RATE_LIMIT_ERROR";category="provider";recoverable=true},lr=class extends D{constructor(t,o,n){super(`Network Error: ${t}`,n);this.originalError=o;}code="NETWORK_ERROR";category="system";recoverable=true},$=class extends D{constructor(t,o,n,i){super(`Tool Execution Error (${o}): ${t}`,i);this.toolName=o;this.originalError=n;}code="TOOL_EXECUTION_ERROR";category="system";recoverable=false},ur=class extends D{constructor(t,o,n,i){super(`Model "${t}" is not available for provider "${o}"`,i);this.availableModels=n;}code="MODEL_NOT_AVAILABLE";category="user";recoverable=false},dr=class extends D{code="CIRCUIT_BREAKER_OPEN";category="system";recoverable=true;constructor(e="Circuit breaker is open",t){super(e,t);}},ee=class extends D{constructor(t,o,n){super(`Plugin Error (${o}): ${t}`,n);this.pluginName=o;}code="PLUGIN_ERROR";category="system";recoverable=false},cr=class extends D{code="STORAGE_ERROR";category="system";recoverable=true;constructor(e,t){super(`Storage Error: ${e}`,t);}},Be=class extends D{code="CACHE_INTEGRITY_ERROR";category="system";recoverable=false;constructor(e,t){super(`Cache Integrity Error: ${e}`,t);}},gr=class{static isRecoverable(e){return e instanceof D?e.recoverable:false}static getErrorCode(e){return e instanceof D?e.code:"UNKNOWN_ERROR"}static fromUnknown(e,t="An unknown error occurred"){if(e instanceof D)return e;if(e instanceof Error)return new T(e.message||t);let o=typeof e=="string"?e:t;return new T(o)}static wrapProviderError(e,t,o){let n=e instanceof Error?e:new Error(String(e));return new ht(`Failed to ${o}`,t,n,{operation:o})}};var mr=1;function Wo(r){if(!r.executionId)throw new C("[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId");if(!r.ownerType)throw new C(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${r.executionId}`);if(!r.ownerId)throw new C(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${r.executionId}`);return {executionId:r.executionId,ownerType:r.ownerType,ownerId:r.ownerId}}function pr(r){let e=Wo(r);return {toolName:r.toolName,parameters:r.parameters,executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:r.ownerPath,metadata:r.metadata,eventService:r.eventService,baseEventService:r.baseEventService}}function jo(r){return {toolName:r.toolName,executionId:r.executionId??"",success:false,error:"Execution interrupted by user",result:null}}function qo(r,e){return {toolName:r.toolName,result:null,success:false,error:e.message,executionId:r.executionId}}function fr(r){return new Error(`Tool execution failed: toolName=${String(r.toolName)} executionId=${String(r.executionId)} error=${String(r.error||"Unknown error")}`)}function Ko(r){return r!==void 0}function Jo(r){return r!==void 0}function Yo(r,e){if(r===0)return 0;if(e===void 0||!Number.isFinite(e))return r;let t=Math.floor(e);return t<mr?mr:Math.min(t,r)}async function Zo(r,e,t,o){let n=r.requests[o];if(n)try{let i=r.signal?.aborted?jo(n):await e.executeTool(n.toolName,n.parameters,pr(n));t.resultsByIndex[o]=i,i.success||(t.errorsByIndex[o]=fr(i));}catch(i){let s=i instanceof Error?i:new Error(String(i));t.errorsByIndex[o]=s,t.resultsByIndex[o]=qo(n,s);}}async function Qo(r,e,t){for(;t.nextRequestIndex<r.requests.length;){let o=t.nextRequestIndex;t.nextRequestIndex+=1,await Zo(r,e,t,o);}}async function en(r,e){let t={resultsByIndex:new Array(r.requests.length),errorsByIndex:new Array(r.requests.length),nextRequestIndex:0},o=Yo(r.requests.length,r.maxConcurrency),n=Array.from({length:o},()=>Qo(r,e,t));await Promise.all(n);let i=t.resultsByIndex.filter(Ko),s=t.errorsByIndex.filter(Jo);if(s.length>0&&!r.continueOnError)throw s[0];return {results:i,errors:s}}async function tn(r,e){let t=[],o=[];for(let n of r.requests)try{let i=await e.executeTool(n.toolName,n.parameters,pr(n));if(t.push(i),i.success||o.push(fr(i)),!i.success&&!r.continueOnError)break}catch(i){let s=i instanceof Error?i:new Error(String(i));if(o.push(s),!r.continueOnError)break}return {results:t,errors:o}}async function vr(r,e,t){return t.debug(`Executing ${r.requests.length} tools in ${r.mode} mode`),r.mode==="parallel"?en(r,e):tn(r,e)}var _={CALL_START:"call_start",CALL_COMPLETE:"call_complete",CALL_ERROR:"call_error",CALL_RESPONSE_READY:"call_response_ready"},W="tool",Te="unknown_tool",Xe=class{tools;logger;constructor(e,t=B){this.tools=e,this.logger=t;}async executeTool(e,t,o){this.logger.debug(`Executing tool: ${e}`);try{if(!o?.executionId)throw new C("ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext");if(!this.tools.hasTool(e)){let u=this.tools.getTools().map(m=>m.name).sort(),c=rn(e,u),g=o.eventService;if(g){let m={timestamp:new Date,toolName:e,error:c};g.emit(_.CALL_ERROR,m);}return this.logger.warn("Tool call skipped because requested tool is not registered",{toolName:e,availableTools:u}),{success:!1,error:c,toolName:e,executionId:o.executionId,metadata:{errorCode:Te,requestedTool:e,availableTools:u}}}let n=o.eventService;if(n){let u={timestamp:new Date,toolName:e,parameters:t};n.emit(_.CALL_START,u);}let{toolName:i,parameters:s,...a}=o,l={...a,toolName:e,parameters:t,executionId:o.executionId},d=await this.tools.executeTool(e,t,l);if(this.logger.debug(`Tool execution completed: ${e}`),n){let u={timestamp:new Date,toolName:e,result:d};n.emit(_.CALL_COMPLETE,u),n.emit(_.CALL_RESPONSE_READY,u);}return {success:!0,result:d,toolName:e,executionId:l.executionId}}catch(n){this.logger.error(`Tool execution failed: ${e}`);let i=n instanceof Error?n:new Error(String(n)),s=o?.eventService;if(s&&o?.executionId){let a={timestamp:new Date,toolName:e,error:i.message};s.emit(_.CALL_ERROR,a);}return {success:false,error:i.message,toolName:e,executionId:o?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(o=>{let n;try{n=JSON.parse(o.function.arguments);}catch{throw new C(`Failed to parse arguments for tool "${o.function.name}" (call ${o.id}): invalid JSON`)}return {toolName:o.function.name,parameters:n,executionId:o.id,ownerType:"tool",ownerId:o.id,ownerPath:[...t.ownerPathBase,{type:"tool",id:o.id}],metadata:t.metadataFactory?t.metadataFactory(o):void 0}})}async executeTools(e){return vr(e,this,this.logger)}};function rn(r,e){let t=e.length>0?e.join(", "):"no registered tools are available";return `Tool "${r}" is not registered, so the tool call was not executed. Available tools: ${t}.`}var R={START:"start",COMPLETE:"complete",ERROR:"error",ASSISTANT_MESSAGE_START:"assistant_message_start",ASSISTANT_MESSAGE_COMPLETE:"assistant_message_complete",USER_MESSAGE:"user_message",TOOL_RESULTS_TO_LLM:"tool_results_to_llm",TOOL_RESULTS_READY:"tool_results_ready"},z="execution";var te=class{listeners=new Set;subscribe(e){this.listeners.add(e);}unsubscribe(e){this.listeners.delete(e);}notifyListeners(e,t,o){for(let n of this.listeners)n(e,t,o);}},ie=class extends te{emit(e,t,o){}},ye=new ie;function re(r){return r===ye||r instanceof ie}function yt(r,e){if(!r||r.trim().length===0)throw new Error("[EVENTS] ownerType is required to compose event names.");if(r.includes("."))throw new Error(`[EVENTS] ownerType must not contain '.': "${r}"`);if(!e||e.trim().length===0)throw new Error("[EVENTS] local event name is required.");if(e.includes("."))throw new Error(`[EVENTS] Local event name must not contain '.': "${e}"`);return `${r}.${e}`}var Er=36,on=10;function nn(){return `span_${Date.now().toString(Er)}_${Math.random().toString(Er).slice(2,on)}`}var he=class extends te{base;binding;constructor(e,t){super(),this.base=e,this.binding=t;}emit(e,t,o){if(e.includes("."))throw new Error(`[EVENTS] Local event name must not contain '.': "${e}"`);let n={...o,ownerType:this.binding.ownerType,ownerId:this.binding.ownerId,ownerPath:this.binding.ownerPath,depth:this.binding.ownerPath.length,spanId:o?.spanId??nn()},i=yt(this.binding.ownerType,e);this.base.emit(i,t,n);}subscribe(e){this.base.subscribe(e);}unsubscribe(e){this.base.unsubscribe(e);}};function H(r,e){return new he(r,e)}function Ir(r,e){return H(r,e)}var Ge=class extends te{emit(e,t,o){this.notifyListeners(e,t,o);}};var xe={ASSIGNED:"assigned",COMPLETED:"completed"},Tr="task";var hr={MESSAGE:"message",INPUT:"input"},yr="user";function xr(r){return r?.ownerPath?.length?r.ownerPath.map(e=>({...e})):[]}function We(r,e,t,o){if(!t||t.length===0)throw new Error("[EXECUTION] Missing rootId for execution owner context");if(!o||o.length===0)throw new Error("[EXECUTION] Missing executionId for execution owner context");let i=[...r.length?r:e];return t&&!i.some(s=>s.type==="agent"&&s.id===t)&&i.push({type:"agent",id:t}),i.push({type:"execution",id:o}),{ownerType:z,ownerId:o,ownerPath:i}}function xt(r,e,t,o,n,i){if(!n||n.length===0)throw new Error("[EXECUTION] Missing thinkingNodeId for thinking owner context");let a=[...We(r,e,t,o).ownerPath];return i&&(a.push({type:"thinking",id:i}),a.push({type:"tool_result",id:`tool_result_${i}`})),a.push({type:"thinking",id:n}),{ownerType:z,ownerId:o,ownerPath:a}}function Mr(r,e,t,o,n){if(!n||n.length===0)throw new Error("[EXECUTION] Missing toolCallId for tool owner context");let s=[...We(r,e,t,o).ownerPath,{type:"tool",id:n}];return {ownerType:W,ownerId:n,ownerPath:s}}function br(r,e,t,o,n,i){let s=xt(r,e,t,o,n,i).ownerPath,a=`response_${n}`,l=[...s,{type:"response",id:a}];return {ownerType:z,ownerId:o,ownerPath:l}}function je(r){return "executionId"in r||"toolName"in r}function qe(r){let e=0,t=false;for(let o=0;o<r.length;o++){let n=r[o]===" "||r[o]===" "||r[o]===`
|
|
2
|
+
`||r[o]==="\r";!n&&!t?(e++,t=true):n&&(t=false);}return e}function Pr(r,e,t,o,n,i,s){r.emitExecution(R.START,{parameters:{input:e,agentConfiguration:n.aiProviderInfo,availableTools:n.toolsInfo,toolCount:n.toolsInfo.length,hasTools:n.toolsInfo.length>0,systemMessage:t.defaultModel.systemMessage,provider:t.defaultModel.provider,model:t.defaultModel.model,temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens},metadata:{method:"execute",inputLength:e.length,messageCount:o.length,aiProvider:n.aiProviderInfo.providerName,model:n.aiProviderInfo.model,toolsAvailable:n.toolsInfo.map(a=>a.name),agentCapabilities:{canUseTools:n.toolsInfo.length>0,supportedActions:n.toolsInfo.map(a=>a.name)}}},i,s);}function Rr(r,e,t,o){r.emitExecution(R.USER_MESSAGE,{parameters:{input:e,userPrompt:e,userMessageContent:e,messageLength:e.length,wordCount:qe(e),characterCount:e.length},metadata:{messageRole:"user",inputLength:e.length,messageType:"user_message",hasQuestions:e.includes("?"),containsUrgency:/urgent|asap|critical|emergency/i.test(e),estimatedComplexity:e.length>200?"high":e.length>50?"medium":"low"}},t,o);}function Sr(r,e,t,o,n,i,s,a){if(typeof t.content!="string"||t.content.length===0)throw new Error("[EXECUTION] assistant response must have content or tool calls");if(!(t.timestamp instanceof Date))throw new Error("[EXECUTION] assistant response timestamp is required");let l=t.content,d=t.timestamp,u=new Date().getTime()-d.getTime();r.emitWithContext(R.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:l,responseLength:l.length,wordCount:qe(l),responseTime:u,contentPreview:l.length>200?l.substring(0,200)+"...":l},result:{success:true,data:l.substring(0,100)+"...",fullResponse:l,responseMetrics:{length:l.length,estimatedReadTime:Math.ceil(qe(l)/200),hasCodeBlocks:/```/.test(l),hasLinks:/https?:\/\//.test(l),complexity:l.length>1e3?"high":l.length>300?"medium":"low"}},metadata:{executionId:o,round:n,completed:true,reason:"no_tool_calls",responseCharacteristics:{hasQuestions:l.includes("?"),isError:/error|fail|wrong/i.test(l),isComplete:/complete|done|finish/i.test(l),containsNumbers:/\d/.test(l)}}},()=>r.buildResponseOwnerContext(i,o,s,a),c=>{if(!c.ownerType||!c.ownerId)throw new Error("[EXECUTION] Missing owner context for response event");return H(e,{ownerType:c.ownerType,ownerId:c.ownerId,ownerPath:c.ownerPath})});}function wr(r,e,t,o,n,i,s,a,l,d){let u=t.map(m=>{if(!m.id||m.id.length===0)throw new Error("[EXECUTION] Tool call missing id for tool results ready payload");return m.id});if(u.length===0)throw new Error("[EXECUTION] Tool results ready requires toolCallIds");let c=()=>r.buildThinkingOwnerContext(i,s,l,d),g=m=>{if(!m.ownerType||!m.ownerId)throw new Error("[EXECUTION] Missing owner context for tool results event");return H(e,{ownerType:m.ownerType,ownerId:m.ownerId,ownerPath:m.ownerPath})};r.emitWithContext(R.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:a},metadata:{round:a}},c,g),r.emitWithContext(R.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:n.length,round:a},metadata:{toolsExecuted:o.results.map(m=>{if(!m.toolName||m.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return m.toolName}),round:a}},c,g);}var Ke=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,o){this.baseEventService=e,this.logger=t,this.ownerPathBase=xr(o),this.toolEventServices=new Map,this.agentOwnerPathBase=[];}prepareOwnerPathBases(e){this.toolEventServices.clear();let t=[...this.ownerPathBase,{type:"agent",id:e}];this.agentOwnerPathBase=t;}resetOwnerPathBases(){this.toolEventServices.clear(),this.agentOwnerPathBase=[];}ensureToolEventService(e,t){if(re(this.baseEventService))return this.baseEventService;if(!e)throw new Error("[EVENT-SERVICE] Missing ownerId for tool event context");if(!t||t.length===0)throw new Error("[EVENT-SERVICE] Missing ownerPath for tool event context");if(this.toolEventServices.has(e))return this.toolEventServices.get(e);let o=H(this.baseEventService,{ownerType:W,ownerId:e,ownerPath:t.map(n=>({...n}))});return this.toolEventServices.set(e,o),o}clearToolEventServices(){this.toolEventServices.clear();}getBaseEventService(){return this.baseEventService}buildExecutionOwnerContext(e,t){return We(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,o,n){return xt(this.agentOwnerPathBase,this.ownerPathBase,e,t,o,n)}buildToolOwnerContext(e,t,o){return Mr(this.agentOwnerPathBase,this.ownerPathBase,e,t,o)}buildResponseOwnerContext(e,t,o,n){return br(this.agentOwnerPathBase,this.ownerPathBase,e,t,o,n)}emitExecution(e,t,o,n){this.emitWithContext(e,t,()=>this.buildExecutionOwnerContext(o,n),i=>{if(!i.ownerType||!i.ownerId)throw new Error("[EXECUTION] Missing owner context for execution event");return H(this.baseEventService,{ownerType:i.ownerType,ownerId:i.ownerId,ownerPath:i.ownerPath})});}emitTool(e,t,o,n,i){this.emitWithContext(e,t,()=>this.buildToolOwnerContext(o,n,i),s=>this.ensureToolEventService(s.ownerId,s.ownerPath));}emitWithContext(e,t,o,n){if(re(this.baseEventService))return;let i=o(),s=n(i),a={timestamp:new Date,...t};s.emit(e,a,i);}emitExecutionStartEvent(e,t,o,n,i,s){Pr(this,e,t,o,n,i,s);}emitUserMessageEvent(e,t,o){Rr(this,e,t,o);}emitAssistantMessageComplete(e,t,o,n,i,s){Sr(this,this.baseEventService,e,t,o,n,i,s);}emitToolResultsEvents(e,t,o,n,i,s,a,l){wr(this,this.baseEventService,e,t,o,n,i,s,a,l);}};var cn={beforeRun:async(r,e)=>{r.beforeRun&&e.input&&await r.beforeRun(e.input,e.metadata);},afterRun:async(r,e)=>{r.afterRun&&e.input&&e.response&&await r.afterRun(e.input,e.response,e.metadata);},beforeProviderCall:async(r,e)=>{r.beforeProviderCall&&e.messages&&await r.beforeProviderCall(e.messages);},afterProviderCall:async(r,e)=>{r.afterProviderCall&&e.messages&&e.responseMessage&&await r.afterProviderCall(e.messages,e.responseMessage);},onError:async(r,e)=>{if(r.onError&&e.error){let t={action:`${z}.${R.ERROR}`,metadata:{}},o=e.executionContext?.executionId;typeof o=="string"&&o.length>0&&(t.executionId=o);let n=e.executionContext?.sessionId;typeof n=="string"&&n.length>0&&(t.sessionId=n);let i=e.executionContext?.userId;typeof i=="string"&&i.length>0&&(t.userId=i),await r.onError(e.error,t);}}};async function V(r,e,t,o){let n=cn[e];if(n)for(let i of r)try{await n(i,t);}catch(s){o.warn("Plugin hook failed",{pluginName:i.name,hookName:e,error:s instanceof Error?s.message:String(s)});}}async function*Ar(r,e,t,o,n,i,s){s.debug("[EXECUTION-SERVICE-STREAM] Executing tools:",{tools:r.map(p=>p.function.name)});let a=t,l=`thinking_${a}_${Date.now()}_${o}`,d=[...i.buildExecutionOwnerContext(a,o).ownerPath,{type:"thinking",id:l}],c={requests:n.createExecutionRequestsWithContext(r,{ownerPathBase:d}),mode:"parallel",maxConcurrency:5,continueOnError:true},g=await n.executeTools(c);for(let p of r){if(!p.id)throw new Error("[EXECUTION] Tool call missing id in streaming mode");if(!p.function?.name||p.function.name.length===0)throw new Error(`[EXECUTION] Tool call "${p.id}" missing function name in streaming mode`);let f=g.results.find(M=>M.executionId===p.id),y=g.errors.find(M=>je(M)&&M.executionId===p.id),I,h={executionId:o};if(f&&f.success){if(typeof f.result>"u")throw new Error("[EXECUTION] Tool result missing result payload in streaming mode");I=typeof f.result=="string"?f.result:JSON.stringify(f.result),h.success=true,f.toolName&&(h.toolName=f.toolName),yield {chunk:`
|
|
3
|
+
[Tool: ${p.function.name} executed successfully]`,isComplete:false};}else if(y){let M=y,b=M.error?.message?M.error.message:M.message?M.message:"";if(!b||b.length===0)throw new Error("[EXECUTION] Tool execution error missing message in streaming mode");I=`Error: ${b}`,h.success=false,h.error=b,M.toolName&&(h.toolName=M.toolName),yield {chunk:`
|
|
4
|
+
[Tool: ${p.function.name} failed: ${b}]`,isComplete:false};}else throw new Error(`[EXECUTION] Missing tool result for tool call "${p.id}" in streaming mode`);e.addToolMessageWithId(I,p.id,p.function.name,h);}let m=r.map(p=>{if(!p.id||p.id.length===0)throw new Error("[EXECUTION] Tool call missing id for streaming tool results ready payload");return p.id});if(m.length===0)throw new Error("[EXECUTION] Tool results ready requires toolCallIds in streaming mode");i.emitExecution(R.TOOL_RESULTS_READY,{parameters:{toolCallIds:m,round:1},metadata:{toolsExecuted:g.results.map(p=>{if(!p.toolName||p.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return p.toolName}),round:1}},t,o);}async function*Or(r,e,t,o,n){let{aiProviders:i,tools:s,conversationHistory:a,toolExecutionService:l,plugins:d,logger:u,eventEmitter:c}=n;u.debug("ExecutionService.executeStream called");let g=n.generateExecutionId(),m=Date.now();if(!o?.conversationId||o.conversationId.length===0)throw new Error("[EXECUTION] conversationId is required for streaming");let p=o.conversationId;c.prepareOwnerPathBases(p);try{let f=a.getConversationStore(o.conversationId);r&&f.addUserMessage(r,{executionId:g}),await V(d,"beforeRun",{input:r,...o?.metadata?{metadata:o.metadata}:{}},u);let y=i.getCurrentProvider();if(!y)throw new Error("No AI provider configured");let I=i.getProvider(y.provider);if(!I)throw new Error(`AI provider '${y.provider}' not found`);if(typeof I.chatStream!="function")throw new Error("Provider must have chatStream method to support streaming execution");u.debug("ExecutionService calling provider.chatStream");let h=f.getMessages(),M=Array.isArray(t.tools)?t.tools.length:void 0;u.debug("[EXECUTION-SERVICE] config.tools:",{length:M});let b=s.getTools(),A=Array.isArray(b)?b.length:void 0;u.debug("[EXECUTION-SERVICE] this.tools.getTools():",{length:A}),u.debug("[EXECUTION-SERVICE] config.tools exists:",{exists:!!t.tools}),u.debug("[EXECUTION-SERVICE] config.tools.length > 0:",{hasTools:t.tools&&t.tools.length>0});let k={model:t.defaultModel.model,...t.tools&&t.tools.length>0&&{tools:s.getTools()}};u.debug("[EXECUTION-SERVICE] Final chatOptions has tools:",{hasTools:!!k.tools});let ge=Array.isArray(k.tools)?k.tools.length:void 0;u.debug("[EXECUTION-SERVICE] Final chatOptions.tools length:",{length:ge});let N=I.chatStream;if(!N)throw new Error("Provider does not support streaming");let F=N.call(I,h,k),X="",v=[],U=-1;for await(let q of F)if(q.content&&(X+=q.content,yield {chunk:q.content,isComplete:!1}),q.role==="assistant"){let me=q;if(Array.isArray(me.toolCalls)&&me.toolCalls.length>0){for(let P of me.toolCalls)if(P.id&&P.id!==""){if(!P.type||P.type.length===0)throw new Error(`[EXECUTION] Tool call "${P.id}" missing type in stream`);if(!P.function?.name||P.function.name.length===0)throw new Error(`[EXECUTION] Tool call "${P.id}" missing function name in stream`);if(typeof P.function.arguments!="string")throw new Error(`[EXECUTION] Tool call "${P.id}" missing arguments in stream`);U=v.length,v.push({id:P.id,type:P.type,function:{name:P.function.name,arguments:P.function.arguments}}),u.debug(`[TOOL-STREAM] New tool call started: ${P.id} (${P.function?.name})`);}else if(U>=0){let K=typeof P.function?.name=="string"&&P.function.name.length>0,E=typeof P.function?.arguments=="string"&&P.function.arguments.length>0;if(!K&&!E)throw new Error(`[EXECUTION] Tool call fragment missing name/arguments for ${v[U].id}`);K&&(v[U].function.name+=P.function.name),E&&(v[U].function.arguments+=P.function.arguments);let Z=E?P.function.arguments:P.function.name;u.debug(`[TOOL-STREAM] Adding fragment to tool ${v[U].id}: "${Z}"`);}}}if(u.debug("[EXECUTION-SERVICE-STREAM] Stream completed, toolCalls detected:",{count:v.length}),typeof X!="string")throw new Error("[EXECUTION] Streaming response content is required");f.addAssistantMessage(X,v,{executionId:g}),v.length>0&&(yield*Ar(v,f,p,g,l,c,u)),await V(d,"afterRun",{input:r,response:X,...o?.metadata?{metadata:o.metadata}:{}},u),yield {chunk:"",isComplete:!0};}catch(f){throw u.error("ExecutionService streaming execution failed",{error:f instanceof Error?f.message:String(f),executionTime:Date.now()-m}),await V(d,"onError",{input:r,error:f instanceof Error?f:new Error(String(f)),...o?.metadata?{metadata:o.metadata}:{}},u),f}finally{c.resetOwnerPathBases();}}function Dr(r,e,t){let o=r.getCurrentProvider(),n=o?r.getProvider(o.provider):null;if(!o||!o.provider||!n)throw new Error("[EXECUTION] Provider is required");let i=e.getTools(),s={providerName:o.provider,model:t.defaultModel.model,temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens},a=i.map(l=>{let u=l.parameters?.properties;if(!l.description||l.description.length===0)throw new Error(`[EXECUTION] Tool "${l.name}" is missing description`);return {name:l.name,description:l.description,parameters:u&&typeof u=="object"?Object.keys(u):[]}});return {provider:n,currentInfo:o,aiProviderInfo:s,toolsInfo:a,availableTools:i}}function Ur(r){if(!r.currentInfo)throw new Error("No AI provider configured");if(!r.provider)throw new Error(`AI provider '${r.currentInfo.provider}' not found`);if(typeof r.provider.chat!="function")throw new Error("Provider must have chat method to support execution")}function Nr(r,e,t,o,n){let i=r.getConversationStore(e);if(i.getMessageCount()===0&&t.length>0){for(let s of t)if(s.role==="user")i.addUserMessage(s.content,s.metadata,s.parts);else if(s.role==="assistant")i.addAssistantMessage(s.content,s.toolCalls,s.metadata,s.parts);else if(s.role==="system")i.addSystemMessage(s.content,s.metadata,s.parts);else if(s.role==="tool"){let a=s.metadata?.toolName;if(typeof a!="string"||a.length===0)throw new Error("[EXECUTION] Tool message missing toolName metadata");i.addToolMessageWithId(s.content,s.toolCallId,a,s.metadata,s.parts);}}return o.systemMessage&&i.addSystemMessage(o.systemMessage,{executionId:n}),i}function _r(r,e,t,o){let n=r.getMessages(),i=n.filter(l=>l.role==="assistant"&&typeof l.content=="string"&&l.content.length>0).pop(),s=i?i.content:"No response received. The context window may be full.",a=Date.now()-t.getTime();return {response:s,messages:n.map(l=>{if(typeof l.content!="string")throw new Error("[EXECUTION] Message content is required");return {role:l.role,content:l.content,timestamp:l.timestamp,metadata:l.metadata,...l.role==="assistant"&&"toolCalls"in l?{toolCalls:l.toolCalls}:{},...l.role==="tool"&&"toolCallId"in l?{toolCallId:l.toolCallId}:{}}}),executionId:e,duration:a,tokensUsed:n.filter(l=>l.metadata?.usage).reduce((l,d)=>{let u=d.metadata?.usage;if(u&&typeof u=="object"&&"totalTokens"in u){let c=Number(u.totalTokens);if(Number.isNaN(c))throw new Error("[EXECUTION] totalTokens must be a number");return l+c}return l},0),toolsExecuted:o,success:!!i}}async function Lr(r,e,t,o,n,i,s,a){let l=Date.now()-t.getTime(),d=r instanceof Error?r:new Error(String(r));await V(i,"onError",{error:d,executionContext:pn(e)},s),s.error("Execution pipeline failed",{executionId:n,conversationId:o,duration:l,error:r instanceof Error?r.message:String(r)}),a.emitExecution(R.ERROR,{error:r instanceof Error?r.message:String(r),metadata:{method:"execute",success:false,duration:l}},o,n);}function Mt(){return `exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function bt(r,e){if(!r?.conversationId||r.conversationId.length===0)throw new Error(`[EXECUTION] conversationId is required for ${e}`);return r.conversationId}function pn(r){let t={conversationId:bt(r,"plugin-context"),executionId:r.executionId,startTime:r.startTime.toISOString(),messageCount:r.messages.length};return r.sessionId&&(t.sessionId=r.sessionId),r.userId&&(t.userId=r.userId),t}function se(r){let e=Pt(r.metadata),t=Je(r.usage);return e??t}function Pt(r){if(!r)return;let e=Je({inputTokens:be(r,"inputTokens"),outputTokens:be(r,"outputTokens"),promptTokens:be(r,"promptTokens"),completionTokens:be(r,"completionTokens"),totalTokens:be(r,"totalTokens")});if(e)return e;let t=r.usage;if(typeof t=="string")return fn(t);if(vn(t))return Je(t)}function fn(r){try{let e=JSON.parse(r);return Je(e)}catch{return}}function Je(r){if(!r)return;let e=Ct(r.inputTokens,r.promptTokens),t=Ct(r.outputTokens,r.completionTokens);if(e===void 0||t===void 0)return;let o=Ct(r.totalTokens);return {inputTokens:e,outputTokens:t,...o!==void 0&&{totalTokens:o}}}function be(r,e){let t=r[e];return typeof t=="number"&&Number.isFinite(t)?t:void 0}function Ct(...r){return r.find(e=>typeof e=="number"&&Number.isFinite(e))}function vn(r){return typeof r=="object"&&r!==null&&!Array.isArray(r)&&Object.values(r).every(e=>typeof e=="number"&&Number.isFinite(e))}var Rt=4;function St(r){return Math.ceil(JSON.stringify(r).length/Rt)}function ae(r,e={}){let t=St(r),o=En(r),n=o?.tokens,i=In(e.usageFloorTokens);return {usedTokens:o?.index===r.length-1?Math.max(n??0,i??0):Math.max(t,n??0,i??0),serializedTokens:t,...n!==void 0&&{providerTokens:n},...i!==void 0&&{usageFloorTokens:i}}}function En(r){for(let e=r.length-1;e>=0;e--){let t=se(r[e]);if(t)return {tokens:t.totalTokens??t.inputTokens+t.outputTokens,index:e}}}function In(r){if(!(r===void 0||!Number.isFinite(r)||r<=0))return Math.ceil(r)}var Ce={"claude-opus-4-6":{name:"Claude Opus 4.6",id:"claude-opus-4-6",contextWindow:1e6,maxOutput:128e3},"claude-sonnet-4-6":{name:"Claude Sonnet 4.6",id:"claude-sonnet-4-6",contextWindow:1e6,maxOutput:64e3},"claude-haiku-4-5":{name:"Claude Haiku 4.5",id:"claude-haiku-4-5",contextWindow:2e5,maxOutput:64e3},"claude-haiku-4-5-20251001":{name:"Claude Haiku 4.5",id:"claude-haiku-4-5-20251001",contextWindow:2e5,maxOutput:64e3},"claude-sonnet-4-5":{name:"Claude Sonnet 4.5",id:"claude-sonnet-4-5",contextWindow:2e5,maxOutput:64e3},"claude-sonnet-4-5-20250929":{name:"Claude Sonnet 4.5",id:"claude-sonnet-4-5-20250929",contextWindow:2e5,maxOutput:64e3},"claude-opus-4-5":{name:"Claude Opus 4.5",id:"claude-opus-4-5",contextWindow:2e5,maxOutput:64e3},"claude-opus-4-5-20251101":{name:"Claude Opus 4.5",id:"claude-opus-4-5-20251101",contextWindow:2e5,maxOutput:64e3}},wt=2e5;function le(r){return Ce[r]?.contextWindow??wt}var At=16384;function kr(r){return Ce[r]?.maxOutput??At}function Hr(r){return Ce[r]?.name??r}function Vr(r){if(r>=1e6){let t=r/1e6;return Number.isInteger(t)?`${t}M`:`${parseFloat(t.toFixed(1))}M`}if(r<=0)return "0K";if(r<1e3)return "<1K";let e=r/1e3;return Number.isInteger(e)?`${e}K`:`${parseFloat(e.toFixed(1))}K`}function Ot(r,e){let t=Array.isArray(e.lastTrackedAssistantMessage?.toolCalls)&&e.lastTrackedAssistantMessage.toolCalls.length>0,o=`thinking_${r}_round${e.runningAssistantCount+1}`,n=t?`thinking_${r}_round${e.runningAssistantCount}`:void 0;return {thinkingNodeId:o,previousThinkingNodeId:n}}async function Dt(r,e,t,o,n){if(!e.defaultModel?.model)throw new Error("Model is required in defaultModel configuration. Please specify a model.");if(typeof e.defaultModel.model!="string"||e.defaultModel.model.trim()==="")throw new Error("Model must be a non-empty string in defaultModel configuration.");let i={model:e.defaultModel.model,...e.defaultModel.maxTokens!==void 0&&{maxTokens:e.defaultModel.maxTokens},...e.defaultModel.temperature!==void 0&&{temperature:e.defaultModel.temperature},...t.availableTools.length>0&&{tools:t.availableTools},...n},s=t.provider.chat.bind(t.provider);if(o){let a=o.lookup(r,e.defaultModel.model,e.defaultModel.provider,{temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens});if(a)return {role:"assistant",content:a,timestamp:new Date,id:randomUUID(),state:"complete"};let l=await Fr(s,r,i,e.timeout);return typeof l.content=="string"&&o.store(r,e.defaultModel.model,e.defaultModel.provider,l.content,{temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}),l}return Fr(s,r,i,e.timeout)}async function Fr(r,e,t,o){let n=hn(o),i=t.signal;if(n===void 0&&i===void 0)return r(e,t);if(i?.aborted)throw $r();let s=new AbortController,a,l=false,d,u=()=>{a!==void 0&&(clearTimeout(a),a=void 0);},c=y=>{l||(l=true,d?.(y),s.abort(y));},g=()=>{n===void 0||l||(u(),a=setTimeout(()=>{c(new Error(`Provider call idle timeout after ${n}ms`));},n));},m=()=>{c($r());};i?.addEventListener("abort",m,{once:true});let p=t.onTextDelta,f={...t,signal:s.signal,...p!==void 0?{onTextDelta:y=>{g(),p(y);}}:{}};g();try{return await Promise.race([r(e,f),new Promise((y,I)=>{d=I;})])}finally{l=true,u(),i?.removeEventListener("abort",m);}}function hn(r){if(!(r===void 0||!Number.isFinite(r)||r<=0))return r}function $r(){let r=new Error("aborted");return r.name="AbortError",r}function Ut(r,e,t,o,n){let i=r.role==="assistant"?r.toolCalls:void 0,s=Array.isArray(i)&&i.length>0;if(typeof r.content!="string"&&!s)throw new Error("[EXECUTION] Provider response must have content or tool calls");if(i&&!Array.isArray(i))throw new Error("[EXECUTION] assistant toolCalls must be an array");let a=r.content??"";if(n.debug(`[ROUND-${o}] Provider response completed`,{executionId:e,conversationId:t,round:o,responseLength:a.length,hasToolCalls:Array.isArray(i)&&i.length>0,toolCallsCount:Array.isArray(i)?i.length:0}),r.role!=="assistant")throw new Error(`Unexpected response role: ${r.role}`);let l=r,d=l.toolCalls??[];if(!Array.isArray(d))throw new Error("[EXECUTION] assistantResponse.toolCalls must be an array");return {assistantResponse:l,assistantToolCalls:d}}var yn="Error: Context window near capacity. Tool execution result skipped. Respond with available results and re-request skipped tools if needed.";async function Nt(r,e,t,o,n,i,s,a,l,d,u,c){let{toolExecutionService:g,logger:m,eventEmitter:p}=l;m.debug("Tool calls detected, executing tools",{toolCallCount:r.length,round:n,toolCalls:r.map(v=>({id:v.id,name:v.function?.name}))});let f=p.buildThinkingOwnerContext(t,o,i,s).ownerPath,y=r.length,I=`${i}`,M=g.createExecutionRequestsWithContext(r,{ownerPathBase:f,metadataFactory:v=>({conversationId:t,round:n,directParentId:i,batchId:I,expectedCount:y,toolCallId:v.id})}).map(v=>{if(!v.ownerId)throw new Error("[EXECUTION] Tool request missing ownerId");return {...v,eventService:p.ensureToolEventService(v.ownerId,v.ownerPath),baseEventService:p.getBaseEventService()}}),b={requests:M,mode:"parallel",maxConcurrency:5,continueOnError:true,signal:u};c?.("tool_batch_started",{executionId:o,conversationId:t,round:n,batchId:I,mode:b.mode,maxConcurrency:b.maxConcurrency,requestCount:M.length,tools:M.map(v=>v.toolName)}),M.forEach((v,U)=>{c?.("tool_execution_request",{executionId:o,conversationId:t,round:n,batchId:I,index:U,toolName:v.toolName,toolCallId:v.executionId,parameters:v.parameters,ownerPath:v.ownerPath});});let A=await g.executeTools(b),k=A.results.filter(zr).map(v=>v.toolName).filter(v=>typeof v=="string"&&v.length>0);A.results.forEach((v,U)=>{c?.("tool_execution_result",{executionId:o,conversationId:t,round:n,batchId:I,index:U,toolName:v.toolName,toolCallId:v.executionId,success:v.success,result:v.result,error:v.error,metadata:v.metadata});}),a.toolsExecuted.push(...A.results.filter(v=>!zr(v)).map(v=>{if(!v.toolName||v.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return v.toolName}));let ge=le(d?.defaultModel?.model??""),N=e.getMessages().length,F=Br(r,A,e,n,m,{contextLimit:ge,cumulativeInputTokens:a.cumulativeInputTokens});return e.getMessages().slice(N).forEach((v,U)=>{c?.("tool_message_committed",{executionId:o,conversationId:t,round:n,batchId:I,index:U,message:v}),c?.("history_mutation",{executionId:o,conversationId:t,round:n,batchId:I,mutation:"append_message",index:N+U,message:v});}),p.emitToolResultsEvents(r,A,a.toolsExecuted,t,o,n,i,s),p.clearToolEventServices(),{...F,unknownToolFailureCount:k.length,unknownToolNames:k}}function Br(r,e,t,o,n,i){let a=false,l=0,d=0;for(let u of r){if(!u.id)throw new Error(`Tool call missing ID: ${JSON.stringify(u)}`);let c=u.function?.name;if(!c||c.length===0)throw new Error(`[EXECUTION] Tool call "${u.id}" missing function name`);if(a){n.warn("[ROUND] Skipping tool result due to context overflow",{toolCallId:u.id,toolName:c,round:o}),t.addToolMessageWithId(yn,u.id,c,{round:o,success:false,error:"context_overflow",toolName:c}),d++;continue}let g=e.results.find(y=>y.executionId===u.id),m=e.errors.find(y=>je(y)&&y.executionId===u.id),p,f={round:o};if(g&&g.success){if(typeof g.result>"u")throw new Error("[EXECUTION] Tool result missing result payload");p=typeof g.result=="string"?g.result:JSON.stringify(g.result),f.success=true,g.toolName&&(f.toolName=g.toolName);}else if(g&&!g.success){if(!g.error||g.error.length===0)throw new Error("[EXECUTION] Tool result missing error message");p=`Error: ${g.error}`,f.success=false,f.error=g.error,g.toolName&&(f.toolName=g.toolName),g.metadata?.errorCode===Te&&(f.errorCode=Te,typeof g.metadata.requestedTool=="string"&&(f.requestedTool=g.metadata.requestedTool),Array.isArray(g.metadata.availableTools)&&(f.availableTools=g.metadata.availableTools.filter(y=>typeof y=="string")));}else if(m){let y=m,I=y.error?.message?y.error.message:y.message?y.message:"";if(!I||I.length===0)throw new Error("[EXECUTION] Tool execution error missing message");p=`Error: ${I}`,f.success=false,f.error=I,y.toolName&&(f.toolName=y.toolName);}else throw new Error(`No execution result found for tool call ID: ${u.id}`);if(n.debug("Adding tool result to conversation",{toolCallId:u.id,toolName:c,content:p.substring(0,100),round:o,currentHistoryLength:t.getMessages().length}),t.addToolMessageWithId(p,u.id,c,f),i){let I=ae(t.getMessages(),{usageFloorTokens:i.cumulativeInputTokens}).usedTokens;I>i.contextLimit*.8&&(n.warn("[ROUND] Context budget exceeded after tool result \u2014 skipping remaining tools",{estimatedTokens:I,contextLimit:i.contextLimit,toolCallId:u.id,round:o}),a=true);}l++,n.debug("Tool result added to history",{toolCallId:u.id,newHistoryLength:t.getMessages().length,round:o});}return {contextOverflowed:a,addedCount:l,skippedCount:d,unknownToolFailureCount:0,unknownToolNames:[]}}function zr(r){return !r.success&&r.metadata?.errorCode===Te}function _t(r){let e=se(r);if(!e)return;let t=e.totalTokens??e.inputTokens+e.outputTokens;return {inputTokens:e.inputTokens,outputTokens:e.outputTokens,usage:{totalTokens:t,inputTokens:e.inputTokens,outputTokens:e.outputTokens}}}var Xr=.95,bn=2;function Cn(r,e,t){let o=ae(r,{usageFloorTokens:t}),n=le(e),i=n*Xr,s=n>0?Math.round(o.usedTokens/n*1e4)/100:100;return {shouldBlock:o.usedTokens>i,estimatedTokens:o.usedTokens,contextLimit:n,thresholdTokens:i,thresholdPercentage:Xr*100,usedPercentage:s,serializedTokens:o.serializedTokens,...o.providerTokens!==void 0&&{providerTokens:o.providerTokens},...o.usageFloorTokens!==void 0&&{usageFloorTokens:o.usageFloorTokens}}}async function Gr(r,e,t,o,n,i,s,a,l){let{plugins:d,logger:u,eventEmitter:c,cacheService:g}=l,m=r.currentRound;u.debug(`[ROUND-${m}] Starting execution round ${m}`,{executionId:n,conversationId:i.conversationId,round:m,maxRounds:e});let p=t.getMessages();if(!Array.isArray(p))throw new Error("[EXECUTION] Conversation messages must be an array");let{thinkingNodeId:f,previousThinkingNodeId:y}=Ot(o,r),I=p;u.debug("Current conversation messages",{round:m,messageCount:I.length,fullHistory:I.map((E,Z)=>({index:Z,role:E.role,content:E.content?.substring(0,100),hasToolCalls:"toolCalls"in E?!!E.toolCalls?.length:false,toolCallId:"toolCallId"in E?E.toolCallId:void 0,toolCallsCount:"toolCalls"in E?E.toolCalls?.length:0}))}),await V(d,"beforeProviderCall",{messages:I},u),u.debug("Sending messages to AI provider",{round:m,messageCount:I.length,lastFewMessages:I.slice(-5).map(E=>({role:E.role,content:E.content?.substring(0,50),hasToolCalls:"toolCalls"in E?!!E.toolCalls?.length:false,toolCallId:"toolCallId"in E?E.toolCallId:void 0}))}),c.emitWithContext(R.ASSISTANT_MESSAGE_START,{parameters:{round:m,messageCount:I.length},metadata:{round:m,thinkingNodeId:f}},()=>c.buildThinkingOwnerContext(o,n,f,y),E=>{if(!E.ownerType||!E.ownerId)throw new Error("[EXECUTION] Missing owner context for thinking event");return H(c.getBaseEventService(),{ownerType:E.ownerType,ownerId:E.ownerId,ownerPath:E.ownerPath})});let h=Cn(I,s.defaultModel.model,r.cumulativeInputTokens);if(h.shouldBlock){u.warn("[ROUND] Context hard-capacity prevention before provider call",{estimatedTokens:h.estimatedTokens,contextLimit:h.contextLimit,thresholdTokens:h.thresholdTokens,thresholdPercentage:h.thresholdPercentage,serializedTokens:h.serializedTokens,providerTokens:h.providerTokens??0,usageFloorTokens:h.usageFloorTokens??0,round:m});let E={round:m,contextOverflow:true,estimatedTokens:h.estimatedTokens,contextLimit:h.contextLimit,thresholdTokens:h.thresholdTokens,thresholdPercentage:h.thresholdPercentage,serializedTokens:h.serializedTokens,providerTokens:h.providerTokens??0,usageFloorTokens:h.usageFloorTokens??0,usedPercentage:h.usedPercentage};return t.addAssistantMessage(`Context window is near capacity. Cannot process further in this round. Estimated ${h.estimatedTokens.toLocaleString()} / ${h.contextLimit.toLocaleString()} tokens (${Math.round(h.usedPercentage)}%) exceeds the hard-block threshold ${Math.round(h.thresholdPercentage)}%. Run /compact and retry.`,[],E),true}let M=i.onTextDelta??a.provider.onTextDelta;m>1&&M?.(`
|
|
5
5
|
|
|
6
|
-
`),t.beginAssistant();let w=0,D=0,G=E=>{i.onExecutionEvent?.("provider_stream_raw_delta",{executionId:n,conversationId:i.conversationId,round:m,sequence:w,delta:E}),w++,t.appendStreaming(E),S?.(E);},ge=E=>{let Z=E.sequence??D;D=Math.max(D,Z+1),i.onExecutionEvent?.("provider_native_raw_payload",{executionId:n,conversationId:i.conversationId,round:m,...E,sequence:Z});},N;try{i.onExecutionEvent?.("provider_request",{executionId:n,conversationId:i.conversationId,round:m,provider:a.currentInfo.provider,model:s.defaultModel.model,messages:h,tools:a.availableTools}),N=await Dt(h,s,a,g,{signal:i.signal,onTextDelta:G,onProviderNativeRawPayload:ge}),i.onExecutionEvent?.("provider_response_raw",{executionId:n,conversationId:i.conversationId,round:m,response:N,responseKind:"provider-normalized-message"}),i.onExecutionEvent?.("provider_response_normalized",{executionId:n,conversationId:i.conversationId,round:m,response:N,toolCallsCount:N.role==="assistant"&&Array.isArray(N.toolCalls)?N.toolCalls.length:0});}catch(E){if(E instanceof Error&&(E.name==="AbortError"||E.message.includes("aborted")||E.message.includes("abort")))throw t.commitAssistant("interrupted",{round:m}),E;t.discardPending();let Wt=E instanceof Error?E.message:String(E);return u.error("[ROUND] Provider call failed",{error:Wt,round:m}),t.addAssistantMessage(`Request failed: ${Wt}`,[],{round:m,providerError:true}),true}let{assistantResponse:V,assistantToolCalls:B}=Ut(N,n,i.conversationId,m,u);await H(d,"afterProviderCall",{messages:h,responseMessage:N},u);let v=typeof V.content=="string"&&V.content.trim().length>0;if(B.length===0&&!v)return u.warn("[ROUND] Provider returned empty assistant response without tool calls",{executionId:n,conversationId:i.conversationId,round:m}),t.discardPending(),true;let U=_t(V),j=U?.inputTokens??0;j>0&&(r.cumulativeInputTokens=j),V.content&&!t.getPendingContent()&&t.appendStreaming(V.content);for(let E of B)t.appendToolCall(E);let me=i.signal?.aborted?"interrupted":"complete";t.commitAssistant(me,{round:m,...U??{}});let b=t.getMessages().at(-1);if(i.onExecutionEvent?.("assistant_message_committed",{executionId:n,conversationId:i.conversationId,round:m,message:V}),b&&i.onExecutionEvent?.("history_mutation",{executionId:n,conversationId:i.conversationId,round:m,mutation:"append_message",index:t.getMessages().length-1,message:b}),r.runningAssistantCount++,r.lastTrackedAssistantMessage=V,B.length===0)return u.debug(`[AGENT-FLOW-CONTROL] Round ${m} completed - no tool calls, execution finished for agent ${i.conversationId}`),c.emitAssistantMessageComplete(V,n,m,o,f,y),true;let K=await Nt(B,t,o,n,m,f,y,r,l,s,i.signal,i.onExecutionEvent);if(K.contextOverflowed&&u.warn("[ROUND] Tool results partially skipped due to context overflow \u2014 continuing to let AI respond",{added:K.addedCount,skipped:K.skippedCount,round:m}),K.unknownToolFailureCount>0?r.consecutiveUnknownToolFailureRounds+=1:r.consecutiveUnknownToolFailureRounds=0,r.consecutiveUnknownToolFailureRounds>=Mn){let E=[...new Set(K.unknownToolNames)].sort();return r.forcedSummaryInstruction=[`The model repeatedly requested unavailable tool(s): ${E.join(", ")}.`,"Those tool calls were not executed because they are not registered tools.","Respond to the user now with that reason and use the available tool results already in the conversation history."].join(" "),u.warn("[ROUND] Stopping repeated unavailable tool-call loop",{unavailableTools:E,consecutiveRounds:r.consecutiveUnknownToolFailureRounds,round:m}),true}return u.debug(`Round ${m} completed - continuing to next round for agent ${i.conversationId}`),false}var Wr=10,qr=0;function Pn(r,e){let t=e.maxExecutionRounds??r.maxExecutionRounds;if(t===void 0)return Wr;if(!Number.isInteger(t)||t<0)throw new Error("[EXECUTION] maxExecutionRounds must be a non-negative integer");return t}function Rn(r,e){return e===qr||r<e}async function jr(r,e,t,o,n,i,s,a,l){let d=Pn(n,o);for(;Rn(s.currentRound,d)&&!(a?.aborted||(s.currentRound++,await Gr(s,d,r,e,t,o,n,i,l))||a?.aborted););let u=r.getMessages(),c=u.length>0?u[u.length-1]:void 0;c?.role==="assistant"&&typeof c.content=="string"&&c.content.length>0&&(!("toolCalls"in c)||c.toolCalls.length===0)||await Sn(r,i,n,t,s,e,o,l.logger,d);}async function Sn(r,e,t,o,n,i,s,a,l=Wr){a.warn("No final text response \u2014 forcing summary call",{maxRounds:l===qr?"unlimited":l,currentRound:n.currentRound,conversationId:i});try{let d=n.forcedSummaryInstruction??"Tool round limit reached. Provide your response based on the information gathered so far. If results are incomplete, let the user know what was covered and what remains \u2014 the user can request additional analysis in a follow-up message.";r.addUserMessage(d);let u=r.getMessages(),c=t.systemMessage??"",g=u.some(w=>w.role==="system"&&w.content===c),m=c&&!g?[{id:randomUUID(),role:"system",content:c,state:"complete",timestamp:new Date},...u]:u,p={model:e.aiProviderInfo.model},f=s.onTextDelta??e.provider.onTextDelta;f&&(p.onTextDelta=f);let y=await e.provider.chat(m,p),h=r.getMessages();if(h.findIndex(w=>w.role==="user"&&w.content===d)!==-1){let w=h.filter(D=>!(D.role==="user"&&D.content===d));r.clear();for(let D of w)r.addMessage(D);}let S=typeof y.content=="string"?y.content:"";S?r.addAssistantMessage(S,[],y.metadata):r.addAssistantMessage("Maximum rounds reached. Partial results available in conversation history.");}catch(d){a.warn("Forced summary call failed",{error:d instanceof Error?d.message:String(d)});}}async function Kr(r,e,t,o,n,i,s,a,l,d,u){let c={..._r(e,t,o,n.toolsExecuted),interrupted:s};return await H(l,"afterRun",{input:r,response:c.response,metadata:a?.metadata},d),d.debug("Execution pipeline completed successfully",{executionId:t,conversationId:i,duration:c.duration,tokensUsed:c.tokensUsed,toolsExecuted:c.toolsExecuted.length,rounds:n.currentRound}),u.emitExecution(C.COMPLETE,{result:{success:true,data:c.response.substring(0,100)+"..."},metadata:{method:"execute",success:true,duration:c.duration,tokensUsed:c.tokensUsed,toolsExecuted:c.toolsExecuted}},i,t),c}function wn(r,e,t,o,n,i){return {messages:r,config:e,startTime:t,executionId:o,conversationId:n,...i?.sessionId&&{sessionId:i.sessionId},...i?.userId&&{userId:i.userId},...i?.metadata&&{metadata:i.metadata},...i?.signal&&{signal:i.signal},...i?.onTextDelta&&{onTextDelta:i.onTextDelta},...i?.onExecutionEvent&&{onExecutionEvent:i.onExecutionEvent},...i?.maxExecutionRounds!==void 0&&{maxExecutionRounds:i.maxExecutionRounds}}}var Ye=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,o,n,i,s){if(this.toolExecutionService=new Xe(t),this.aiProviders=e,this.tools=t,this.conversationHistory=o,this.plugins=[],this.logger=A("ExecutionService"),!n)throw new Error("[EXECUTION] EventService is required");this.eventEmitter=new Ke(n,this.logger,i),this.cacheService=s;}registerPlugin(e){let t=e.priority??0,o=this.plugins.findIndex(n=>(n.priority??0)<t);o===-1?this.plugins.push(e):this.plugins.splice(o,0,e),this.logger.debug("Plugin registered",{pluginName:e.name,priority:t,hasBeforeRun:typeof e.beforeRun,hasAfterRun:typeof e.afterRun,hasBeforeProviderCall:typeof e.beforeProviderCall,hasAfterProviderCall:typeof e.afterProviderCall});}removePlugin(e){let t=this.plugins.findIndex(o=>o.name===e);return t!==-1?(this.plugins.splice(t,1),this.logger.debug("Plugin removed",{pluginName:e}),true):false}getPlugin(e){return this.plugins.find(t=>t.name===e)}getPlugins(){return [...this.plugins]}async execute(e,t,o,n){let i=Mt(),s=new Date,a=bt(n,"execute"),l=wn(t,o,s,i,a,n);this.eventEmitter.prepareOwnerPathBases(a),this.logger.debug("Starting execution pipeline",{executionId:i,conversationId:a,messageCount:t.length,hasContext:!!n});let d=Dr(this.aiProviders,this.tools,o);this.eventEmitter.emitExecutionStartEvent(e,o,t,d,a,i);let u=Nr(this.conversationHistory,a,t,o,i);try{let c=u.getMessages().length;u.addUserMessage(e,{executionId:i});let g=u.getMessages()[c];g&&l.onExecutionEvent?.("history_mutation",{executionId:i,conversationId:a,mutation:"append_message",index:c,message:g}),this.eventEmitter.emitUserMessageEvent(e,a,i),await H(this.plugins,"beforeRun",{input:e,...n?.metadata?{metadata:n.metadata}:{}},this.logger),Ur(d);let m={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0};for(let p of u.getMessages())p.role==="assistant"&&(m.runningAssistantCount++,m.lastTrackedAssistantMessage=p);return await jr(u,a,i,l,o,d,m,n?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),Kr(e,u,i,s,m,a,n?.signal?.aborted??!1,n,this.plugins,this.logger,this.eventEmitter)}catch(c){return c instanceof Error&&(c.name==="AbortError"||c.message.includes("aborted")||c.message.includes("abort"))?{response:"",messages:u.getMessages(),executionId:i,duration:Date.now()-s.getTime(),toolsExecuted:[],success:true,interrupted:true}:(await Lr(c,l,s,a,i,this.plugins,this.logger,this.eventEmitter),{response:`Error: ${c instanceof Error?c.message:String(c)}`,messages:[],tokensUsed:0,toolsExecuted:[],duration:Date.now()-s.getTime(),executionId:i,success:false})}finally{this.eventEmitter.resetOwnerPathBases();}}async*executeStream(e,t,o,n){yield*Or(e,t,o,n,{aiProviders:this.aiProviders,tools:this.tools,conversationHistory:this.conversationHistory,toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,generateExecutionId:()=>Mt()});}async getStats(){return {pluginCount:this.plugins.length,pluginNames:this.plugins.map(e=>e.name),historyStats:this.conversationHistory.getStats()}}clearPlugins(){this.plugins=[],this.logger.debug("All plugins cleared");}};var X=(r,e)=>`${r}.${e}`,Lt={START:X($,C.START),COMPLETE:X($,C.COMPLETE),ERROR:X($,C.ERROR)},An={CALL_START:X(W,_.CALL_START),CALL_COMPLETE:X(W,_.CALL_COMPLETE),CALL_ERROR:X(W,_.CALL_ERROR)},Ze={EXECUTION_START:X(Y,R.EXECUTION_START),EXECUTION_COMPLETE:X(Y,R.EXECUTION_COMPLETE),EXECUTION_ERROR:X(Y,R.EXECUTION_ERROR),CREATED:X(Y,R.CREATED)},T={EXECUTION_START:Lt.START,EXECUTION_COMPLETE:Lt.COMPLETE,EXECUTION_ERROR:Lt.ERROR,TOOL_BEFORE_EXECUTE:"tool.beforeExecute",TOOL_AFTER_EXECUTE:"tool.afterExecute",TOOL_SUCCESS:"tool.success",TOOL_ERROR:An.CALL_ERROR,CONVERSATION_START:"conversation.start",CONVERSATION_COMPLETE:"conversation.complete",CONVERSATION_ERROR:"conversation.error",AGENT_EXECUTION_START:Ze.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Ze.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Ze.EXECUTION_ERROR,AGENT_CREATED:Ze.CREATED,AGENT_DESTROYED:"agent.destroyed",PLUGIN_LOADED:"plugin.loaded",PLUGIN_UNLOADED:"plugin.unloaded",PLUGIN_ERROR:"plugin.error",ERROR_OCCURRED:"error.occurred",WARNING_OCCURRED:"warning.occurred",MODULE_INITIALIZE_START:"module.initialize.start",MODULE_INITIALIZE_COMPLETE:"module.initialize.complete",MODULE_INITIALIZE_ERROR:"module.initialize.error",MODULE_EXECUTION_START:"module.execution.start",MODULE_EXECUTION_COMPLETE:"module.execution.complete",MODULE_EXECUTION_ERROR:"module.execution.error",MODULE_DISPOSE_START:"module.dispose.start",MODULE_DISPOSE_COMPLETE:"module.dispose.complete",MODULE_DISPOSE_ERROR:"module.dispose.error",MODULE_REGISTERED:"module.registered",MODULE_UNREGISTERED:"module.unregistered",EXECUTION_HIERARCHY:"execution.hierarchy",EXECUTION_REALTIME:"execution.realtime",TOOL_REALTIME:"tool.realtime",CUSTOM:"custom"};var kt=(u=>(u.MONITORING="monitoring",u.LOGGING="logging",u.STORAGE="storage",u.NOTIFICATION="notification",u.SECURITY="security",u.PERFORMANCE="performance",u.ERROR_HANDLING="error_handling",u.LIMITS="limits",u.EVENT_PROCESSING="event_processing",u.CUSTOM="custom",u))(kt||{}),On=1e3,Dn=800,Un=500,Nn=200,_n=100,Pe=(i=>(i[i.CRITICAL=On]="CRITICAL",i[i.HIGH=Dn]="HIGH",i[i.NORMAL=Un]="NORMAL",i[i.LOW=Nn]="LOW",i[i.MINIMAL=_n]="MINIMAL",i))(Pe||{});var Qe=class{enabled=true;category="custom";priority=Pe.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=A("AbstractPlugin");stats={calls:0,errors:0,moduleEventsReceived:0,lastActivity:void 0};async initialize(e){this.options=e,e&&"enabled"in e&&typeof e.enabled=="boolean"?this.enabled=e.enabled:this.enabled=true,e?.category&&(this.category=e.category),e?.priority!==void 0&&(this.priority=(typeof e.priority=="number",e.priority));}async subscribeToModuleEvents(e){if(this.eventEmitter=e,!this.options)return;let t=[];this.options.subscribeToAllModuleEvents&&t.push(T.MODULE_INITIALIZE_START,T.MODULE_INITIALIZE_COMPLETE,T.MODULE_INITIALIZE_ERROR,T.MODULE_EXECUTION_START,T.MODULE_EXECUTION_COMPLETE,T.MODULE_EXECUTION_ERROR,T.MODULE_DISPOSE_START,T.MODULE_DISPOSE_COMPLETE,T.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let o of t){let n=this.eventEmitter.on(o,async s=>{try{this.stats.moduleEventsReceived++,this.stats.lastActivity=new Date,await this.onModuleEvent?.(o,s);}catch(a){this.stats.errors++;let l=a instanceof Error?a:new Error(String(a));this.pluginLogger.error(`Plugin "${this.name}" failed to handle module event "${String(o)}"`,{plugin:this.name,eventType:String(o),error:l.message});}}),i=this.eventHandlers.get(o);i?i.push(n):this.eventHandlers.set(o,[n]),this.subscribedEvents.push(o);}}async unsubscribeFromModuleEvents(e){for(let[t,o]of this.eventHandlers.entries())for(let n of o)e.off(t,n);this.eventHandlers.clear(),this.subscribedEvents=[],this.eventEmitter=void 0;}async dispose(){this.eventEmitter&&await this.unsubscribeFromModuleEvents(this.eventEmitter);}enable(){this.enabled=true;}disable(){this.enabled=false;}isEnabled(){return this.enabled}getConfig(){return {}}updateConfig(e){}getData(){return {name:this.name,version:this.version,enabled:this.enabled,category:this.category,priority:this.priority,subscribedEvents:[...this.subscribedEvents],metadata:{moduleEventsReceived:this.stats.moduleEventsReceived,totalCalls:this.stats.calls,totalErrors:this.stats.errors}}}getStatus(){return {name:this.name,version:this.version,enabled:this.enabled,initialized:true,category:this.category,priority:this.priority,subscribedEventsCount:this.subscribedEvents.length,hasEventEmitter:!!this.eventEmitter}}getStats(){return {enabled:this.enabled,calls:this.stats.calls,errors:this.stats.errors,moduleEventsReceived:this.stats.moduleEventsReceived,...this.stats.lastActivity&&{lastActivity:this.stats.lastActivity}}}updateCallStats(){this.stats.calls++,this.stats.lastActivity=new Date;}updateErrorStats(){this.stats.errors++,this.stats.lastActivity=new Date;}};var Re=class{logger;constructor(e=z){this.logger=e;}supportsTools(){return false}validateConfig(){return true}async dispose(){}async withRetry(e,t=3,o=1e3){let n;for(let i=0;i<=t;i++)try{return await e()}catch(s){n=s instanceof Error?s:new Error(String(s)),i<t&&(this.logger.warn?.(`[${this.name}] Attempt ${i+1} failed, retrying in ${o}ms`,{error:n.message,attempt:i+1,maxRetries:t}),await this.delay(o));}throw n}withTimeout(e,t){let o;return Promise.race([e.then(n=>(clearTimeout(o),n)),new Promise((n,i)=>{o=setTimeout(()=>i(new Error(`Operation timed out after ${t}ms`)),t);})])}delay(e){return new Promise(t=>setTimeout(t,e))}logDebug(e,t){this.logger.debug?.(`[${this.name}] ${e}`,t);}logError(e,t,o){this.logger.error?.(`[${this.name}] ${e}`,{error:t.message,stack:t.stack,...o});}validateRequest(e){if(!e.messages||e.messages.length===0)throw new Error("Request must include at least one message");if(!e.provider)throw new Error("Request must specify a provider");if(!e.model)throw new Error("Request must specify a model")}validateResponse(e){if(!e.role)throw new Error("Response must have a role");let t=e.role==="assistant"&&"toolCalls"in e&&Array.isArray(e.toolCalls)&&e.toolCalls.length>0;if(!e.content&&!t)throw new Error("Response must have content or tool calls")}};var et=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??z;}setEventService(e){this.eventService=e;}getEventService(){return this.eventService}emitEvent(e,t){this.eventService&&this.eventService.emit(e,t);}async execute(e,t){return await this.executeImpl(e,t)}validate(e){return (this.schema.parameters.required||[]).every(o=>o in e)}validateParameters(e){let t=this.schema.parameters.required||[],o=[],n=e;for(let i of t)i in n||o.push(`Missing required parameter: ${i}`);return {isValid:o.length===0,errors:o}}getDescription(){return this.schema.description}getName(){return this.schema.name}};var Jr=class{static toProviderFormat(e,t,o={}){if(typeof t=="function")return t(e);if(typeof t=="string"){let n=o[t];if(n!==void 0)return n(e)}return this.toUniversalFormat(e)}static toUniversalFormat(e){return e}static extractSystemMessage(e){return e.find(o=>o.role==="system")?.content}static filterNonSystemMessages(e){return e.filter(t=>t.role!=="system")}};var q=class{static validateAgentConfig(e){let t=[],o=[];return e.name||t.push("name is required"),(!e.aiProviders||e.aiProviders.length===0)&&t.push("aiProviders array is required and must have at least one provider"),e.defaultModel?(e.defaultModel.provider||t.push("defaultModel.provider is required"),e.defaultModel.model||t.push("defaultModel.model is required")):t.push("defaultModel is required"),e.aiProviders&&e.defaultModel?.provider&&(e.aiProviders.map(i=>i.name).includes(e.defaultModel.provider)||t.push(`defaultModel.provider "${e.defaultModel.provider}" is not found in aiProviders list`)),e.defaultModel?.temperature!==void 0&&(typeof e.defaultModel.temperature!="number"||e.defaultModel.temperature<0||e.defaultModel.temperature>2)&&t.push("defaultModel.temperature must be a number between 0 and 2"),e.defaultModel?.maxTokens!==void 0&&(typeof e.defaultModel.maxTokens!="number"||e.defaultModel.maxTokens<=0)&&t.push("defaultModel.maxTokens must be a positive number"),e.systemMessage&&e.systemMessage.length>1e3&&o.push("systemMessage is quite long, consider keeping it concise for better performance"),e.tools&&e.tools.length>20&&o.push("Large number of tools may impact performance, consider grouping related tools"),{isValid:t.length===0,errors:t,warnings:o}}static validateUserInput(e){let t=[],o=[];return !e||typeof e!="string"?t.push("Input must be a non-empty string"):(e.trim().length===0&&t.push("Input cannot be only whitespace"),e.length>1e4&&o.push("Very long input may be truncated by AI providers")),{isValid:t.length===0,errors:t,warnings:o}}static validateProviderName(e){let t=[];return !e||typeof e!="string"?t.push("Provider name must be a non-empty string"):/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(e)||t.push("Provider name must start with a letter and contain only letters, numbers, underscores, and hyphens"),{isValid:t.length===0,errors:t}}static validateModelName(e){let t=[];return !e||typeof e!="string"?t.push("Model name must be a non-empty string"):e.trim().length===0&&t.push("Model name cannot be only whitespace"),{isValid:t.length===0,errors:t}}static validateApiKey(e){let t=[],o=[];return !e||typeof e!="string"?(t.push("API key must be a non-empty string"),{isValid:false,errors:t}):(e.length<10&&t.push("API key appears to be too short"),/\s/.test(e)&&t.push("API key should not contain whitespace"),{isValid:t.length===0,errors:t,warnings:o})}},Ht=q.validateAgentConfig,Pa=q.validateUserInput,Ra=q.validateProviderName,Sa=q.validateModelName,wa=q.validateApiKey;function Oa(r,e,t){return setInterval(()=>{(async()=>{try{await t();}catch(n){r.error("Periodic task failed",{task:e.name,error:n instanceof Error?n.message:String(n)});}})();},e.intervalMs)}function Da(r){r&&clearInterval(r);}function rt(r,e){let t={id:randomUUID(),role:"user",content:r,state:"complete",timestamp:new Date};return e?.name&&(t.name=e.name),e?.metadata&&(t.metadata=e.metadata),e?.parts&&(t.parts=e.parts),t}function ot(r,e){let t={id:randomUUID(),role:"assistant",content:r,state:e?.state??"complete",timestamp:new Date};return e?.toolCalls&&(t.toolCalls=e.toolCalls),e?.metadata&&(t.metadata=e.metadata),e?.parts&&(t.parts=e.parts),t}function nt(r,e){let t={id:randomUUID(),role:"system",content:r,state:"complete",timestamp:new Date};return e?.name&&(t.name=e.name),e?.metadata&&(t.metadata=e.metadata),e?.parts&&(t.parts=e.parts),t}function it(r,e){let t={id:randomUUID(),role:"tool",content:r,toolCallId:e.toolCallId,state:"complete",timestamp:new Date};return e.name&&(t.name=e.name),e.metadata&&(t.metadata=e.metadata),e.parts&&(t.parts=e.parts),t}var Se=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0;}addMessage(e){this.entries.push(vt(e)),this.applyMessageLimit();}addEntry(e){this.entries.push(e);}getHistory(){return [...this.entries]}addUserMessage(e,t,o){this.addMessage(rt(e,{...t&&{metadata:t},...o&&{parts:o}}));}addAssistantMessage(e,t,o,n){this.addMessage(ot(e,{...t&&{toolCalls:t},...o&&{metadata:o},...n&&{parts:n}}));}addSystemMessage(e,t,o){this.addMessage(nt(e,{...t&&{metadata:t},...o&&{parts:o}}));}addToolMessageWithId(e,t,o,n,i){this.addMessage(it(e,{toolCallId:t,name:o,...n&&{metadata:n},...i&&{parts:i}}));}getMessages(){return this.entries.filter(Q).map(ve)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(Q).length}clear(){this.entries=[];}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(Q);if(e.length<=this.maxMessages)return;let t=e.map(ve),o=t.filter(Ee),n=t.filter(l=>!Ee(l)),i=Math.max(0,this.maxMessages-o.length),s=[...o,...n.slice(-i)],a=new Set(s.map(l=>l.id));this.entries=this.entries.filter(l=>!Q(l)||a.has(l.id));}};var ue=class{history;pendingAssistant=null;constructor(e=100){this.history=new Se({maxMessages:e});}addMessage(e){this.history.addMessage(e);}addUserMessage(e,t,o){this.history.addUserMessage(e,t,o);}addAssistantMessage(e,t,o,n){this.history.addAssistantMessage(e,t,o,n);}addSystemMessage(e,t,o){this.history.addSystemMessage(e,t,o);}addToolMessage(e,t,o,n,i){this.history.addToolMessageWithId(e,t,o||"unknown",n,i);}addToolMessageWithId(e,t,o,n,i){this.history.addToolMessageWithId(e,t,o,n,i);}addEntry(e){this.history.addEntry(e);}getHistory(){return this.history.getHistory()}getMessages(){return this.history.getMessages()}getMessagesByRole(e){return this.history.getMessagesByRole(e)}getRecentMessages(e){return this.history.getRecentMessages(e)}getMessageCount(){return this.history.getMessageCount()}beginAssistant(){this.pendingAssistant||(this.pendingAssistant={id:randomUUID(),content:"",toolCalls:[]});}appendStreaming(e){this.pendingAssistant||(this.pendingAssistant={id:randomUUID(),content:"",toolCalls:[]}),this.pendingAssistant.content+=e;}appendToolCall(e){this.pendingAssistant||(this.pendingAssistant={id:randomUUID(),content:"",toolCalls:[]}),this.pendingAssistant.toolCalls.some(t=>t.id===e.id)||this.pendingAssistant.toolCalls.push(e);}commitAssistant(e,t){if(!this.pendingAssistant)return;let o=this.pendingAssistant,n=o.toolCalls.length>0,i=o.content,s={id:o.id,role:"assistant",content:i,state:e,timestamp:new Date,...n&&{toolCalls:o.toolCalls},...t&&{metadata:t}};this.history.addMessage(s),this.pendingAssistant=null;}discardPending(){this.pendingAssistant=null;}hasPendingAssistant(){return this.pendingAssistant!==null}getPendingContent(){return this.pendingAssistant?.content??""}getMessagesForAPI(){return this.history.getMessages().map(e=>{let t={role:e.role,content:e.content};return J(e)&&e.state==="interrupted"&&(t.content=(t.content||"")+`
|
|
6
|
+
`),t.beginAssistant();let b=0,A=0,k=E=>{i.onExecutionEvent?.("provider_stream_raw_delta",{executionId:n,conversationId:i.conversationId,round:m,sequence:b,delta:E}),b++,t.appendStreaming(E),M?.(E);},ge=E=>{let Z=E.sequence??A;A=Math.max(A,Z+1),i.onExecutionEvent?.("provider_native_raw_payload",{executionId:n,conversationId:i.conversationId,round:m,...E,sequence:Z});},N;try{i.onExecutionEvent?.("provider_request",{executionId:n,conversationId:i.conversationId,round:m,provider:a.currentInfo.provider,model:s.defaultModel.model,messages:I,tools:a.availableTools}),N=await Dt(I,s,a,g,{signal:i.signal,onTextDelta:k,onProviderNativeRawPayload:ge}),i.onExecutionEvent?.("provider_response_raw",{executionId:n,conversationId:i.conversationId,round:m,response:N,responseKind:"provider-normalized-message"}),i.onExecutionEvent?.("provider_response_normalized",{executionId:n,conversationId:i.conversationId,round:m,response:N,toolCallsCount:N.role==="assistant"&&Array.isArray(N.toolCalls)?N.toolCalls.length:0});}catch(E){if(E instanceof Error&&(E.name==="AbortError"||E.message.includes("aborted")||E.message.includes("abort")))throw t.commitAssistant("interrupted",{round:m}),E;t.discardPending();let Wt=E instanceof Error?E.message:String(E);return u.error("[ROUND] Provider call failed",{error:Wt,round:m}),t.addAssistantMessage(`Request failed: ${Wt}`,[],{round:m,providerError:true}),true}let{assistantResponse:F,assistantToolCalls:X}=Ut(N,n,i.conversationId,m,u);await V(d,"afterProviderCall",{messages:I,responseMessage:N},u);let v=typeof F.content=="string"&&F.content.trim().length>0;if(X.length===0&&!v)return u.warn("[ROUND] Provider returned empty assistant response without tool calls",{executionId:n,conversationId:i.conversationId,round:m}),t.discardPending(),true;let U=_t(F),q=U?.inputTokens??0;q>0&&(r.cumulativeInputTokens=q),F.content&&!t.getPendingContent()&&t.appendStreaming(F.content);for(let E of X)t.appendToolCall(E);let me=i.signal?.aborted?"interrupted":"complete";t.commitAssistant(me,{round:m,...U??{}});let P=t.getMessages().at(-1);if(i.onExecutionEvent?.("assistant_message_committed",{executionId:n,conversationId:i.conversationId,round:m,message:F}),P&&i.onExecutionEvent?.("history_mutation",{executionId:n,conversationId:i.conversationId,round:m,mutation:"append_message",index:t.getMessages().length-1,message:P}),r.runningAssistantCount++,r.lastTrackedAssistantMessage=F,X.length===0)return u.debug(`[AGENT-FLOW-CONTROL] Round ${m} completed - no tool calls, execution finished for agent ${i.conversationId}`),c.emitAssistantMessageComplete(F,n,m,o,f,y),true;let K=await Nt(X,t,o,n,m,f,y,r,l,s,i.signal,i.onExecutionEvent);if(K.contextOverflowed&&u.warn("[ROUND] Tool results partially skipped due to context overflow \u2014 continuing to let AI respond",{added:K.addedCount,skipped:K.skippedCount,round:m}),K.unknownToolFailureCount>0?r.consecutiveUnknownToolFailureRounds+=1:r.consecutiveUnknownToolFailureRounds=0,r.consecutiveUnknownToolFailureRounds>=bn){let E=[...new Set(K.unknownToolNames)].sort();return r.forcedSummaryInstruction=[`The model repeatedly requested unavailable tool(s): ${E.join(", ")}.`,"Those tool calls were not executed because they are not registered tools.","Respond to the user now with that reason and use the available tool results already in the conversation history."].join(" "),u.warn("[ROUND] Stopping repeated unavailable tool-call loop",{unavailableTools:E,consecutiveRounds:r.consecutiveUnknownToolFailureRounds,round:m}),true}return u.debug(`Round ${m} completed - continuing to next round for agent ${i.conversationId}`),false}var Wr=10,jr=0;function Rn(r,e){let t=e.maxExecutionRounds??r.maxExecutionRounds;if(t===void 0)return Wr;if(!Number.isInteger(t)||t<0)throw new Error("[EXECUTION] maxExecutionRounds must be a non-negative integer");return t}function Sn(r,e){return e===jr||r<e}async function qr(r,e,t,o,n,i,s,a,l){let d=Rn(n,o);for(;Sn(s.currentRound,d)&&!(a?.aborted||(s.currentRound++,await Gr(s,d,r,e,t,o,n,i,l))||a?.aborted););let u=r.getMessages(),c=u.length>0?u[u.length-1]:void 0;c?.role==="assistant"&&typeof c.content=="string"&&c.content.length>0&&(!("toolCalls"in c)||c.toolCalls.length===0)||await wn(r,i,n,t,s,e,o,l.logger,d);}async function wn(r,e,t,o,n,i,s,a,l=Wr){a.warn("No final text response \u2014 forcing summary call",{maxRounds:l===jr?"unlimited":l,currentRound:n.currentRound,conversationId:i});try{let d=n.forcedSummaryInstruction??"Tool round limit reached. Provide your response based on the information gathered so far. If results are incomplete, let the user know what was covered and what remains \u2014 the user can request additional analysis in a follow-up message.";r.addUserMessage(d);let u=r.getMessages(),c=t.systemMessage??"",g=u.some(b=>b.role==="system"&&b.content===c),m=c&&!g?[{id:randomUUID(),role:"system",content:c,state:"complete",timestamp:new Date},...u]:u,p={model:e.aiProviderInfo.model},f=s.onTextDelta??e.provider.onTextDelta;f&&(p.onTextDelta=f);let y=await e.provider.chat(m,p),I=r.getMessages();if(I.findIndex(b=>b.role==="user"&&b.content===d)!==-1){let b=I.filter(A=>!(A.role==="user"&&A.content===d));r.clear();for(let A of b)r.addMessage(A);}let M=typeof y.content=="string"?y.content:"";M?r.addAssistantMessage(M,[],y.metadata):r.addAssistantMessage("Maximum rounds reached. Partial results available in conversation history.");}catch(d){a.warn("Forced summary call failed",{error:d instanceof Error?d.message:String(d)});}}async function Kr(r,e,t,o,n,i,s,a,l,d,u){let c={..._r(e,t,o,n.toolsExecuted),interrupted:s};return await V(l,"afterRun",{input:r,response:c.response,metadata:a?.metadata},d),d.debug("Execution pipeline completed successfully",{executionId:t,conversationId:i,duration:c.duration,tokensUsed:c.tokensUsed,toolsExecuted:c.toolsExecuted.length,rounds:n.currentRound}),u.emitExecution(R.COMPLETE,{result:{success:true,data:c.response.substring(0,100)+"..."},metadata:{method:"execute",success:true,duration:c.duration,tokensUsed:c.tokensUsed,toolsExecuted:c.toolsExecuted}},i,t),c}function An(r,e,t,o,n,i){return {messages:r,config:e,startTime:t,executionId:o,conversationId:n,...i?.sessionId&&{sessionId:i.sessionId},...i?.userId&&{userId:i.userId},...i?.metadata&&{metadata:i.metadata},...i?.signal&&{signal:i.signal},...i?.onTextDelta&&{onTextDelta:i.onTextDelta},...i?.onExecutionEvent&&{onExecutionEvent:i.onExecutionEvent},...i?.maxExecutionRounds!==void 0&&{maxExecutionRounds:i.maxExecutionRounds}}}var Ye=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,o,n,i,s){if(this.toolExecutionService=new Xe(t),this.aiProviders=e,this.tools=t,this.conversationHistory=o,this.plugins=[],this.logger=O("ExecutionService"),!n)throw new Error("[EXECUTION] EventService is required");this.eventEmitter=new Ke(n,this.logger,i),this.cacheService=s;}registerPlugin(e){let t=e.priority??0,o=this.plugins.findIndex(n=>(n.priority??0)<t);o===-1?this.plugins.push(e):this.plugins.splice(o,0,e),this.logger.debug("Plugin registered",{pluginName:e.name,priority:t,hasBeforeRun:typeof e.beforeRun,hasAfterRun:typeof e.afterRun,hasBeforeProviderCall:typeof e.beforeProviderCall,hasAfterProviderCall:typeof e.afterProviderCall});}removePlugin(e){let t=this.plugins.findIndex(o=>o.name===e);return t!==-1?(this.plugins.splice(t,1),this.logger.debug("Plugin removed",{pluginName:e}),true):false}getPlugin(e){return this.plugins.find(t=>t.name===e)}getPlugins(){return [...this.plugins]}async execute(e,t,o,n){let i=Mt(),s=new Date,a=bt(n,"execute"),l=An(t,o,s,i,a,n);this.eventEmitter.prepareOwnerPathBases(a),this.logger.debug("Starting execution pipeline",{executionId:i,conversationId:a,messageCount:t.length,hasContext:!!n});let d=Dr(this.aiProviders,this.tools,o);this.eventEmitter.emitExecutionStartEvent(e,o,t,d,a,i);let u=Nr(this.conversationHistory,a,t,o,i);try{let c=u.getMessages().length;u.addUserMessage(e,{executionId:i});let g=u.getMessages()[c];g&&l.onExecutionEvent?.("history_mutation",{executionId:i,conversationId:a,mutation:"append_message",index:c,message:g}),this.eventEmitter.emitUserMessageEvent(e,a,i),await V(this.plugins,"beforeRun",{input:e,...n?.metadata?{metadata:n.metadata}:{}},this.logger),Ur(d);let m={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0};for(let p of u.getMessages())p.role==="assistant"&&(m.runningAssistantCount++,m.lastTrackedAssistantMessage=p);return await qr(u,a,i,l,o,d,m,n?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),Kr(e,u,i,s,m,a,n?.signal?.aborted??!1,n,this.plugins,this.logger,this.eventEmitter)}catch(c){return c instanceof Error&&(c.name==="AbortError"||c.message.includes("aborted")||c.message.includes("abort"))?{response:"",messages:u.getMessages(),executionId:i,duration:Date.now()-s.getTime(),toolsExecuted:[],success:true,interrupted:true}:(await Lr(c,l,s,a,i,this.plugins,this.logger,this.eventEmitter),{response:`Error: ${c instanceof Error?c.message:String(c)}`,messages:[],tokensUsed:0,toolsExecuted:[],duration:Date.now()-s.getTime(),executionId:i,success:false})}finally{this.eventEmitter.resetOwnerPathBases();}}async*executeStream(e,t,o,n){yield*Or(e,t,o,n,{aiProviders:this.aiProviders,tools:this.tools,conversationHistory:this.conversationHistory,toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,generateExecutionId:()=>Mt()});}async getStats(){return {pluginCount:this.plugins.length,pluginNames:this.plugins.map(e=>e.name),historyStats:this.conversationHistory.getStats()}}clearPlugins(){this.plugins=[],this.logger.debug("All plugins cleared");}};var G=(r,e)=>`${r}.${e}`,Lt={START:G(z,R.START),COMPLETE:G(z,R.COMPLETE),ERROR:G(z,R.ERROR)},On={CALL_START:G(W,_.CALL_START),CALL_COMPLETE:G(W,_.CALL_COMPLETE),CALL_ERROR:G(W,_.CALL_ERROR)},Ze={EXECUTION_START:G(Y,w.EXECUTION_START),EXECUTION_COMPLETE:G(Y,w.EXECUTION_COMPLETE),EXECUTION_ERROR:G(Y,w.EXECUTION_ERROR),CREATED:G(Y,w.CREATED)},x={EXECUTION_START:Lt.START,EXECUTION_COMPLETE:Lt.COMPLETE,EXECUTION_ERROR:Lt.ERROR,TOOL_BEFORE_EXECUTE:"tool.beforeExecute",TOOL_AFTER_EXECUTE:"tool.afterExecute",TOOL_SUCCESS:"tool.success",TOOL_ERROR:On.CALL_ERROR,CONVERSATION_START:"conversation.start",CONVERSATION_COMPLETE:"conversation.complete",CONVERSATION_ERROR:"conversation.error",AGENT_EXECUTION_START:Ze.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Ze.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Ze.EXECUTION_ERROR,AGENT_CREATED:Ze.CREATED,AGENT_DESTROYED:"agent.destroyed",PLUGIN_LOADED:"plugin.loaded",PLUGIN_UNLOADED:"plugin.unloaded",PLUGIN_ERROR:"plugin.error",ERROR_OCCURRED:"error.occurred",WARNING_OCCURRED:"warning.occurred",MODULE_INITIALIZE_START:"module.initialize.start",MODULE_INITIALIZE_COMPLETE:"module.initialize.complete",MODULE_INITIALIZE_ERROR:"module.initialize.error",MODULE_EXECUTION_START:"module.execution.start",MODULE_EXECUTION_COMPLETE:"module.execution.complete",MODULE_EXECUTION_ERROR:"module.execution.error",MODULE_DISPOSE_START:"module.dispose.start",MODULE_DISPOSE_COMPLETE:"module.dispose.complete",MODULE_DISPOSE_ERROR:"module.dispose.error",MODULE_REGISTERED:"module.registered",MODULE_UNREGISTERED:"module.unregistered",EXECUTION_HIERARCHY:"execution.hierarchy",EXECUTION_REALTIME:"execution.realtime",TOOL_REALTIME:"tool.realtime",CUSTOM:"custom"};var kt=(u=>(u.MONITORING="monitoring",u.LOGGING="logging",u.STORAGE="storage",u.NOTIFICATION="notification",u.SECURITY="security",u.PERFORMANCE="performance",u.ERROR_HANDLING="error_handling",u.LIMITS="limits",u.EVENT_PROCESSING="event_processing",u.CUSTOM="custom",u))(kt||{}),Dn=1e3,Un=800,Nn=500,_n=200,Ln=100,Pe=(i=>(i[i.CRITICAL=Dn]="CRITICAL",i[i.HIGH=Un]="HIGH",i[i.NORMAL=Nn]="NORMAL",i[i.LOW=_n]="LOW",i[i.MINIMAL=Ln]="MINIMAL",i))(Pe||{});var Qe=class{enabled=true;category="custom";priority=Pe.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=O("AbstractPlugin");stats={calls:0,errors:0,moduleEventsReceived:0,lastActivity:void 0};async initialize(e){this.options=e,e&&"enabled"in e&&typeof e.enabled=="boolean"?this.enabled=e.enabled:this.enabled=true,e?.category&&(this.category=e.category),e?.priority!==void 0&&(this.priority=(typeof e.priority=="number",e.priority));}async subscribeToModuleEvents(e){if(this.eventEmitter=e,!this.options)return;let t=[];this.options.subscribeToAllModuleEvents&&t.push(x.MODULE_INITIALIZE_START,x.MODULE_INITIALIZE_COMPLETE,x.MODULE_INITIALIZE_ERROR,x.MODULE_EXECUTION_START,x.MODULE_EXECUTION_COMPLETE,x.MODULE_EXECUTION_ERROR,x.MODULE_DISPOSE_START,x.MODULE_DISPOSE_COMPLETE,x.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let o of t){let n=this.eventEmitter.on(o,async s=>{try{this.stats.moduleEventsReceived++,this.stats.lastActivity=new Date,await this.onModuleEvent?.(o,s);}catch(a){this.stats.errors++;let l=a instanceof Error?a:new Error(String(a));this.pluginLogger.error(`Plugin "${this.name}" failed to handle module event "${String(o)}"`,{plugin:this.name,eventType:String(o),error:l.message});}}),i=this.eventHandlers.get(o);i?i.push(n):this.eventHandlers.set(o,[n]),this.subscribedEvents.push(o);}}async unsubscribeFromModuleEvents(e){for(let[t,o]of this.eventHandlers.entries())for(let n of o)e.off(t,n);this.eventHandlers.clear(),this.subscribedEvents=[],this.eventEmitter=void 0;}async dispose(){this.eventEmitter&&await this.unsubscribeFromModuleEvents(this.eventEmitter);}enable(){this.enabled=true;}disable(){this.enabled=false;}isEnabled(){return this.enabled}getConfig(){return {}}updateConfig(e){}getData(){return {name:this.name,version:this.version,enabled:this.enabled,category:this.category,priority:this.priority,subscribedEvents:[...this.subscribedEvents],metadata:{moduleEventsReceived:this.stats.moduleEventsReceived,totalCalls:this.stats.calls,totalErrors:this.stats.errors}}}getStatus(){return {name:this.name,version:this.version,enabled:this.enabled,initialized:true,category:this.category,priority:this.priority,subscribedEventsCount:this.subscribedEvents.length,hasEventEmitter:!!this.eventEmitter}}getStats(){return {enabled:this.enabled,calls:this.stats.calls,errors:this.stats.errors,moduleEventsReceived:this.stats.moduleEventsReceived,...this.stats.lastActivity&&{lastActivity:this.stats.lastActivity}}}updateCallStats(){this.stats.calls++,this.stats.lastActivity=new Date;}updateErrorStats(){this.stats.errors++,this.stats.lastActivity=new Date;}};var Re=class{logger;constructor(e=B){this.logger=e;}supportsTools(){return false}validateConfig(){return true}async dispose(){}async withRetry(e,t=3,o=1e3){let n;for(let i=0;i<=t;i++)try{return await e()}catch(s){n=s instanceof Error?s:new Error(String(s)),i<t&&(this.logger.warn?.(`[${this.name}] Attempt ${i+1} failed, retrying in ${o}ms`,{error:n.message,attempt:i+1,maxRetries:t}),await this.delay(o));}throw n}withTimeout(e,t){let o;return Promise.race([e.then(n=>(clearTimeout(o),n)),new Promise((n,i)=>{o=setTimeout(()=>i(new Error(`Operation timed out after ${t}ms`)),t);})])}delay(e){return new Promise(t=>setTimeout(t,e))}logDebug(e,t){this.logger.debug?.(`[${this.name}] ${e}`,t);}logError(e,t,o){this.logger.error?.(`[${this.name}] ${e}`,{error:t.message,stack:t.stack,...o});}validateRequest(e){if(!e.messages||e.messages.length===0)throw new Error("Request must include at least one message");if(!e.provider)throw new Error("Request must specify a provider");if(!e.model)throw new Error("Request must specify a model")}validateResponse(e){if(!e.role)throw new Error("Response must have a role");let t=e.role==="assistant"&&"toolCalls"in e&&Array.isArray(e.toolCalls)&&e.toolCalls.length>0;if(!e.content&&!t)throw new Error("Response must have content or tool calls")}};var et=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??B;}setEventService(e){this.eventService=e;}getEventService(){return this.eventService}emitEvent(e,t){this.eventService&&this.eventService.emit(e,t);}async execute(e,t){return await this.executeImpl(e,t)}validate(e){return (this.schema.parameters.required||[]).every(o=>o in e)}validateParameters(e){let t=this.schema.parameters.required||[],o=[],n=e;for(let i of t)i in n||o.push(`Missing required parameter: ${i}`);return {isValid:o.length===0,errors:o}}getDescription(){return this.schema.description}getName(){return this.schema.name}};var Jr=class{static toProviderFormat(e,t,o={}){if(typeof t=="function")return t(e);if(typeof t=="string"){let n=o[t];if(n!==void 0)return n(e)}return this.toUniversalFormat(e)}static toUniversalFormat(e){return e}static extractSystemMessage(e){return e.find(o=>o.role==="system")?.content}static filterNonSystemMessages(e){return e.filter(t=>t.role!=="system")}};var j=class{static validateAgentConfig(e){let t=[],o=[];return e.name||t.push("name is required"),(!e.aiProviders||e.aiProviders.length===0)&&t.push("aiProviders array is required and must have at least one provider"),e.defaultModel?(e.defaultModel.provider||t.push("defaultModel.provider is required"),e.defaultModel.model||t.push("defaultModel.model is required")):t.push("defaultModel is required"),e.aiProviders&&e.defaultModel?.provider&&(e.aiProviders.map(i=>i.name).includes(e.defaultModel.provider)||t.push(`defaultModel.provider "${e.defaultModel.provider}" is not found in aiProviders list`)),e.defaultModel?.temperature!==void 0&&(typeof e.defaultModel.temperature!="number"||e.defaultModel.temperature<0||e.defaultModel.temperature>2)&&t.push("defaultModel.temperature must be a number between 0 and 2"),e.defaultModel?.maxTokens!==void 0&&(typeof e.defaultModel.maxTokens!="number"||e.defaultModel.maxTokens<=0)&&t.push("defaultModel.maxTokens must be a positive number"),e.systemMessage&&e.systemMessage.length>1e3&&o.push("systemMessage is quite long, consider keeping it concise for better performance"),e.tools&&e.tools.length>20&&o.push("Large number of tools may impact performance, consider grouping related tools"),{isValid:t.length===0,errors:t,warnings:o}}static validateUserInput(e){let t=[],o=[];return !e||typeof e!="string"?t.push("Input must be a non-empty string"):(e.trim().length===0&&t.push("Input cannot be only whitespace"),e.length>1e4&&o.push("Very long input may be truncated by AI providers")),{isValid:t.length===0,errors:t,warnings:o}}static validateProviderName(e){let t=[];return !e||typeof e!="string"?t.push("Provider name must be a non-empty string"):/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(e)||t.push("Provider name must start with a letter and contain only letters, numbers, underscores, and hyphens"),{isValid:t.length===0,errors:t}}static validateModelName(e){let t=[];return !e||typeof e!="string"?t.push("Model name must be a non-empty string"):e.trim().length===0&&t.push("Model name cannot be only whitespace"),{isValid:t.length===0,errors:t}}static validateApiKey(e){let t=[],o=[];return !e||typeof e!="string"?(t.push("API key must be a non-empty string"),{isValid:false,errors:t}):(e.length<10&&t.push("API key appears to be too short"),/\s/.test(e)&&t.push("API key should not contain whitespace"),{isValid:t.length===0,errors:t,warnings:o})}},Ht=j.validateAgentConfig,Sa=j.validateUserInput,wa=j.validateProviderName,Aa=j.validateModelName,Oa=j.validateApiKey;function Ua(r,e,t){return setInterval(()=>{(async()=>{try{await t();}catch(n){r.error("Periodic task failed",{task:e.name,error:n instanceof Error?n.message:String(n)});}})();},e.intervalMs)}function Na(r){r&&clearInterval(r);}function rt(r,e){let t={id:randomUUID(),role:"user",content:r,state:"complete",timestamp:new Date};return e?.name&&(t.name=e.name),e?.metadata&&(t.metadata=e.metadata),e?.parts&&(t.parts=e.parts),t}function ot(r,e){let t={id:randomUUID(),role:"assistant",content:r,state:e?.state??"complete",timestamp:new Date};return e?.toolCalls&&(t.toolCalls=e.toolCalls),e?.metadata&&(t.metadata=e.metadata),e?.parts&&(t.parts=e.parts),t}function nt(r,e){let t={id:randomUUID(),role:"system",content:r,state:"complete",timestamp:new Date};return e?.name&&(t.name=e.name),e?.metadata&&(t.metadata=e.metadata),e?.parts&&(t.parts=e.parts),t}function it(r,e){let t={id:randomUUID(),role:"tool",content:r,toolCallId:e.toolCallId,state:"complete",timestamp:new Date};return e.name&&(t.name=e.name),e.metadata&&(t.metadata=e.metadata),e.parts&&(t.parts=e.parts),t}var Se=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0;}addMessage(e){this.entries.push(vt(e)),this.applyMessageLimit();}addEntry(e){this.entries.push(e);}getHistory(){return [...this.entries]}addUserMessage(e,t,o){this.addMessage(rt(e,{...t&&{metadata:t},...o&&{parts:o}}));}addAssistantMessage(e,t,o,n){this.addMessage(ot(e,{...t&&{toolCalls:t},...o&&{metadata:o},...n&&{parts:n}}));}addSystemMessage(e,t,o){this.addMessage(nt(e,{...t&&{metadata:t},...o&&{parts:o}}));}addToolMessageWithId(e,t,o,n,i){this.addMessage(it(e,{toolCallId:t,name:o,...n&&{metadata:n},...i&&{parts:i}}));}getMessages(){return this.entries.filter(Q).map(ve)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(Q).length}clear(){this.entries=[];}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(Q);if(e.length<=this.maxMessages)return;let t=e.map(ve),o=t.filter(Ee),n=t.filter(l=>!Ee(l)),i=Math.max(0,this.maxMessages-o.length),s=[...o,...n.slice(-i)],a=new Set(s.map(l=>l.id));this.entries=this.entries.filter(l=>!Q(l)||a.has(l.id));}};var ue=class{history;pendingAssistant=null;constructor(e=100){this.history=new Se({maxMessages:e});}addMessage(e){this.history.addMessage(e);}addUserMessage(e,t,o){this.history.addUserMessage(e,t,o);}addAssistantMessage(e,t,o,n){this.history.addAssistantMessage(e,t,o,n);}addSystemMessage(e,t,o){this.history.addSystemMessage(e,t,o);}addToolMessage(e,t,o,n,i){this.history.addToolMessageWithId(e,t,o||"unknown",n,i);}addToolMessageWithId(e,t,o,n,i){this.history.addToolMessageWithId(e,t,o,n,i);}addEntry(e){this.history.addEntry(e);}getHistory(){return this.history.getHistory()}getMessages(){return this.history.getMessages()}getMessagesByRole(e){return this.history.getMessagesByRole(e)}getRecentMessages(e){return this.history.getRecentMessages(e)}getMessageCount(){return this.history.getMessageCount()}beginAssistant(){this.pendingAssistant||(this.pendingAssistant={id:randomUUID(),content:"",toolCalls:[]});}appendStreaming(e){this.pendingAssistant||(this.pendingAssistant={id:randomUUID(),content:"",toolCalls:[]}),this.pendingAssistant.content+=e;}appendToolCall(e){this.pendingAssistant||(this.pendingAssistant={id:randomUUID(),content:"",toolCalls:[]}),this.pendingAssistant.toolCalls.some(t=>t.id===e.id)||this.pendingAssistant.toolCalls.push(e);}commitAssistant(e,t){if(!this.pendingAssistant)return;let o=this.pendingAssistant,n=o.toolCalls.length>0,i=o.content,s={id:o.id,role:"assistant",content:i,state:e,timestamp:new Date,...n&&{toolCalls:o.toolCalls},...t&&{metadata:t}};this.history.addMessage(s),this.pendingAssistant=null;}discardPending(){this.pendingAssistant=null;}hasPendingAssistant(){return this.pendingAssistant!==null}getPendingContent(){return this.pendingAssistant?.content??""}getMessagesForAPI(){return this.history.getMessages().map(e=>{let t={role:e.role,content:e.content};return J(e)&&e.state==="interrupted"&&(t.content=(t.content||"")+`
|
|
7
7
|
|
|
8
|
-
[This response was interrupted by the user]`),J(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),$e(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear();}};var Ln=100,kn=50,we=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||Ln,this.maxConversations=e.maxConversations||kn,this.logger=A("ConversationHistory");}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new ue(this.maxMessagesPerConversation))),this.conversations.get(e)}hasConversation(e){return this.conversations.has(e)}removeConversation(e){let t=this.conversations.delete(e);return t&&this.logger.debug("Removed conversation",{conversationId:e}),t}clearAll(){let e=this.conversations.size;this.conversations.clear(),this.logger.debug("Cleared all conversations",{removedCount:e});}getStats(){let e=Array.from(this.conversations.keys()),t=Array.from(this.conversations.values()).reduce((o,n)=>o+n.getMessageCount(),0);return {totalConversations:this.conversations.size,conversationIds:e,totalMessages:t}}cleanupOldConversations(){if(this.conversations.size===0)return;let e=this.conversations.keys().next().value;e&&this.conversations.delete(e);}};var Ft=class extends Re{name="local";version="1.0.0";providers=new Map;config;constructor(e={}){super(),this.config={timeout:3e4,maxRetries:3,retryDelay:1e3,enableLogging:false,...e};}registerProvider(e,t){this.providers.set(e,t);}unregisterProvider(e){this.providers.delete(e);}getProvider(e){return this.providers.get(e)}async executeChat(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw new Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chat)throw new Error(`Provider "${e.provider}" does not implement chat method`);this.config.enableLogging&&this.logDebug(`Executing chat with provider: ${e.provider}, model: ${e.model}`);try{let o=await this.withRetry(async()=>await this.withTimeout(t.chat(e.messages,{...e.options,model:e.model,tools:e.tools}),this.config.timeout),this.config.maxRetries,this.config.retryDelay);if(o.role!=="assistant")throw new Error(`Expected assistant message, got ${o.role}`);return this.validateResponse(o),o}catch(o){let n=o instanceof Error?o:new Error(String(o));throw this.logError("Chat execution failed",n,{provider:e.provider,model:e.model}),n}}async*executeChatStream(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw new Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chatStream)throw new Error(`Provider "${e.provider}" does not implement chatStream method`);this.config.enableLogging&&this.logDebug(`Executing streaming chat with provider: ${e.provider}, model: ${e.model}`);try{let o=t.chatStream(e.messages,{...e.options,model:e.model,tools:e.tools});for await(let n of o)this.validateResponse(n),yield n;}catch(o){let n=o instanceof Error?o:new Error(String(o));throw this.logError("Streaming chat execution failed",n,{provider:e.provider,model:e.model}),n}}supportsTools(){for(let e of this.providers.values())if(e.supportsTools&&e.supportsTools())return true;return false}validateConfig(){try{if(this.config.timeout<=0||this.config.maxRetries<0||this.config.retryDelay<0)return !1;for(let e of this.providers.values())if(e.validateConfig&&!e.validateConfig())return !1;return !0}catch{return false}}async dispose(){this.config.enableLogging&&this.logDebug(`Disposing ${this.providers.size} providers`);let e=[];for(let t of this.providers.values())t.dispose&&e.push(t.dispose());await Promise.all(e),this.providers.clear();}};var Ae=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1;}incrementErrors(){this.totalErrors+=1;}getSnapshot(){return {totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Yr(r,e){if(r.maxListeners!==void 0&&r.maxListeners<0)throw new ee(`Invalid maxListeners option: ${r.maxListeners}. Must be a non-negative number.`,e,{maxListeners:r.maxListeners});if(r.buffer!==void 0&&r.buffer.maxSize!==void 0&&r.buffer.maxSize<0)throw new ee(`Invalid buffer.maxSize option: ${r.buffer.maxSize}. Must be a non-negative number.`,e,{bufferMaxSize:r.buffer.maxSize});if(r.buffer!==void 0&&r.buffer.flushInterval!==void 0&&r.buffer.flushInterval<0)throw new ee(`Invalid buffer.flushInterval option: ${r.buffer.flushInterval}. Must be a non-negative number.`,e,{bufferFlushInterval:r.buffer.flushInterval})}async function Zr(r,e,t,o,n){try{await r.listener(e);}catch(i){throw t.incrementErrors(),o&&n.error("Event handler error",{eventType:e.type,handlerId:r.id,error:i instanceof Error?i.message:String(i)}),i instanceof Error?i:new Error(String(i))}}async function Qr(r,e,t,o,n){let i=e.get(r.type);if(!i||i.length===0)return;let s=i.filter(a=>!a.filter||a.filter(r));if(s.length!==0){for(let a of s.filter(l=>l.once))o(r.type,a.id);if(t){await Promise.all(s.map(a=>n(a,r)));return}for(let a of s)await n(a,r);}}function Hn(r){let e={},t=0;for(let[o,n]of r)e[o]=n.length,t+=n.length;return {listenerCounts:e,totalListeners:t}}function eo(r,e,t,o){let{listenerCounts:n,totalListeners:i}=Hn(e),s=o.getSnapshot(),a=r.enabled,l=r.calls,d=r.errors;return {enabled:a,calls:l,errors:d,eventTypes:Array.from(e.keys()),listenerCounts:n,totalListeners:i,bufferedEvents:t,totalEmitted:s.totalEmitted,totalErrors:s.totalErrors}}function to(r,e,t,o,n,i,s){r.has(e)||r.set(e,[]);let a=r.get(e);if(a.length>=i)throw new ee(`Maximum listeners (${i}) exceeded for event type: ${e}`,s,{eventType:e,currentListeners:a.length});a.push({id:t,listener:o,once:n?.once??false,...n?.filter&&{filter:n.filter}});}function ro(r,e,t){let o=r.get(e);if(!o)return false;let n=typeof t=="string"?o.findIndex(i=>i.id===t):o.findIndex(i=>i.listener===t);return n!==-1?(o.splice(n,1),true):false}var Vn=100,Oe=class extends Qe{name="EventEmitterPlugin";version="1.0.0";pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=A("EventEmitterPlugin"),this.metrics=e.metrics??new Ae,Yr(e,this.name),this.pluginOptions={enabled:e.enabled??true,events:e.events??[T.AGENT_EXECUTION_START,T.AGENT_EXECUTION_COMPLETE,T.AGENT_EXECUTION_ERROR,T.TOOL_BEFORE_EXECUTE,T.TOOL_AFTER_EXECUTE,T.TOOL_SUCCESS,T.TOOL_ERROR],maxListeners:e.maxListeners??Vn,async:e.async??true,catchErrors:e.catchErrors??true,filters:e.filters??{},buffer:e.buffer??{enabled:false,maxSize:1e3,flushInterval:5e3},category:e.category??"event_processing",priority:e.priority??Pe.HIGH,moduleEvents:e.moduleEvents??[],subscribeToAllModuleEvents:e.subscribeToAllModuleEvents??false},this.pluginOptions.buffer.enabled&&(this.bufferTimer=setInterval(()=>{this.flushBuffer();},this.pluginOptions.buffer.flushInterval));}async beforeExecution(e){await this.emit(T.AGENT_EXECUTION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messageCount:e.messages?.length||0,...e.config&&{config:e.config}}});}async afterExecution(e,t){await this.emit(T.AGENT_EXECUTION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{duration:t?.duration,tokensUsed:t?.tokensUsed,toolsExecuted:t?.toolsExecuted}});}async beforeConversation(e){await this.emit(T.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(t=>({role:t.role,content:t.content||"",timestamp:t.timestamp?t.timestamp.toISOString():new Date().toISOString()})),config:e.config}});}async afterConversation(e,t){await this.emit(T.CONVERSATION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{response:t.content||t.response,tokensUsed:t.usage?.totalTokens||t.tokensUsed,toolCalls:t.toolCalls?.map(o=>({id:o.id||"",name:o.name||"",arguments:JSON.stringify(o.arguments||{}),result:String(o.result||"")}))}});}async beforeToolExecution(e,t){t&&await this.emit(T.TOOL_BEFORE_EXECUTE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.toolName,toolId:t.executionId,arguments:JSON.stringify(t.parameters??{})}});}async afterToolExecution(e,t){if(!(!t.toolCalls||t.toolCalls.length===0))for(let o of t.toolCalls){let n=o.result===null?T.TOOL_ERROR:T.TOOL_SUCCESS,i={executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:o.name||"",toolId:o.id||"",toolResult:o.result!==null?String(o.result):void 0,duration:t.duration,success:o.result!==null}};await this.emit(n,i),await this.emit(T.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(o.result||"")}});}}async onError(e,t){await this.emit(T.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:new Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}});}on(e,t,o){let n=`handler_${this.nextHandlerId++}`;return to(this.handlers,e,n,t,o,this.pluginOptions.maxListeners,this.name),n}once(e,t,o){return this.on(e,t,{once:true,...o&&{filter:o}})}off(e,t){return ro(this.handlers,e,t)}async emit(e,t={}){if(!this.pluginOptions.events.includes(e))return;let o={type:e,timestamp:new Date,...t},n=this.pluginOptions.filters[e];if(!(n&&!n(o))){if(this.metrics.incrementEmitted(),this.pluginOptions.buffer.enabled){this.eventBuffer.push(o),this.eventBuffer.length>=this.pluginOptions.buffer.maxSize&&this.flushBuffer();return}await this.processEvent(o);}}async processEvent(e){await Qr(e,this.handlers,this.pluginOptions.async,(t,o)=>this.off(t,o),(t,o)=>Zr(t,o,this.metrics,this.pluginOptions.catchErrors,this.logger));}async flushBuffer(){if(this.eventBuffer.length===0)return;let e=[...this.eventBuffer];this.eventBuffer=[];for(let t of e)await this.processEvent(t);}getStats(){return eo(super.getStats(),this.handlers,this.eventBuffer.length,this.metrics)}clearAllListeners(){this.handlers.clear();}async destroy(){this.bufferTimer&&clearInterval(this.bufferTimer),await this.flushBuffer(),this.clearAllListeners();}};function oo(){return [{type:"storage",category:"storage",layer:"infrastructure",capabilities:["data-persistence","data-retrieval"]},{type:"memory-storage",category:"storage",layer:"infrastructure",dependencies:["storage"],capabilities:["in-memory-storage","fast-access"]},{type:"file-storage",category:"storage",layer:"infrastructure",dependencies:["storage"],capabilities:["persistent-storage","file-system-access"]},{type:"text-processing",category:"processing",layer:"application",capabilities:["text-analysis","content-transformation"]},{type:"file-processing",category:"processing",layer:"application",dependencies:["storage"],capabilities:["file-parsing","content-extraction"]},{type:"api-integration",category:"integration",layer:"application",capabilities:["external-api-access","data-synchronization"]},{type:"database-integration",category:"integration",layer:"infrastructure",dependencies:["storage"],capabilities:["database-access","query-execution"]},{type:"rag",category:"capability",layer:"domain",dependencies:["storage","text-processing"],capabilities:["document-search","context-retrieval","semantic-search"]},{type:"speech-processing",category:"capability",layer:"domain",capabilities:["speech-to-text","text-to-speech","audio-processing"]},{type:"image-analysis",category:"capability",layer:"domain",capabilities:["image-recognition","visual-analysis","content-extraction"]}]}function no(r,e){let t=[],o=[];if((!r.type||r.type.trim()==="")&&t.push("Module type is required and cannot be empty"),r.category||t.push("Module category is required"),r.layer||t.push("Module layer is required"),r.type&&!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(r.type)&&t.push("Module type must start with a letter and contain only letters, numbers, hyphens, and underscores"),r.dependencies){for(let n of r.dependencies)(!n||n.trim()==="")&&t.push("Dependencies cannot be empty");r.dependencies.includes(r.type)&&t.push("Module cannot depend on itself");}if(r.capabilities)for(let n of r.capabilities)(!n||n.trim()==="")&&t.push("Capabilities cannot be empty");if(r.dependencies){let n=["infrastructure","core","application","domain","presentation"],i=n.indexOf(r.layer);for(let s of r.dependencies){let a=e(s);a&&n.indexOf(a.layer)>i&&o.push(`Module '${r.type}' (${r.layer}) depends on '${s}' (${a.layer}) which is in a higher layer`);}}return {valid:t.length===0,errors:t,warnings:o}}function io(r,e,t){let o=new Set,n=new Set,i=[],s=[],a=[];for(let d of r){let u=e(d);if(!u){a.push(d);continue}if(u.dependencies)for(let c of u.dependencies)!t(c)&&!a.includes(c)&&a.push(c);}let l=(d,u=[])=>{if(n.has(d)){let m=u.indexOf(d);s.push(u.slice(m).concat([d]));return}if(o.has(d))return;let c=e(d);if(!c)return;n.add(d);let g=[...u,d];if(c.dependencies)for(let m of c.dependencies)(r.includes(m)||t(m))&&l(m,g);n.delete(d),o.add(d),i.push(d);};for(let d of r)o.has(d)||l(d);return {resolved:a.length===0&&s.length===0,order:i,circularDependencies:s,missingDependencies:a}}function so(r,e){let t=[],o=[],n=new Map;for(let s of r){let a=e(s);a&&(n.has(a.layer)||n.set(a.layer,[]),n.get(a.layer).push(s));}let i=new Map;for(let s of r){let a=e(s);if(a?.capabilities)for(let l of a.capabilities)i.has(l)||i.set(l,[]),i.get(l).push(s);}for(let[s,a]of Array.from(i.entries()))if(a.length>1)for(let l=0;l<a.length;l++)for(let d=l+1;d<a.length;d++){let u=a[l],c=a[d];u&&c&&t.push({module1:u,module2:c,reason:`Both modules provide capability '${s}'`});}return t.length>0&&(o.push("Consider using only one module per capability"),o.push("Check if modules can be configured to avoid conflicts")),!n.has("infrastructure")&&r.length>1&&o.push("Consider adding infrastructure modules for better foundation"),{compatible:t.length===0,conflicts:t,suggestions:o}}function ao(r){let e={core:0,storage:0,processing:0,integration:0,interface:0,capability:0},t={infrastructure:0,core:0,application:0,domain:0,presentation:0},o=0,n=0;for(let i of r.values())e[i.category]++,t[i.layer]++,i.dependencies&&i.dependencies.length>0&&o++,i.capabilities&&i.capabilities.length>0&&n++;return {totalTypes:r.size,typesByCategory:e,typesByLayer:t,typesWithDependencies:o,typesWithCapabilities:n}}var st=class{registeredTypes=new Map;logger;constructor(){this.logger=A("ModuleDescriptorRegistry"),this.registerBuiltinTypes();}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new I(`Invalid module type descriptor: ${t.errors.join(", ")}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let o=this.registeredTypes.get(e.type);this.logger.warn("Overriding existing module type",{type:e.type,previousCategory:o?.category||"unknown",newCategory:e.category});}this.registeredTypes.set(e.type,e),this.logger.info("Module type registered",{type:e.type,category:e.category,layer:e.layer,dependencies:e.dependencies?.length||0,capabilities:e.capabilities?.length||0});}unregisterType(e){if(!this.registeredTypes.has(e))return false;let t=this.findDependentTypes(e);if(t.length>0)throw new I(`Cannot unregister module type '${e}' - it is required by: ${t.join(", ")}`,{type:e,dependentTypes:t});return this.registeredTypes.delete(e),this.logger.info("Module type unregistered",{type:e}),true}getType(e){return this.registeredTypes.get(e)}getAllTypes(){return Array.from(this.registeredTypes.values())}getTypesByCategory(e){return Array.from(this.registeredTypes.values()).filter(t=>t.category===e)}getTypesByLayer(e){return Array.from(this.registeredTypes.values()).filter(t=>t.layer===e)}hasType(e){return this.registeredTypes.has(e)}validateTypeDescriptor(e){return no(e,t=>this.getType(t))}resolveDependencies(e){return io(e,t=>this.getType(t),t=>this.hasType(t))}checkCompatibility(e){return so(e,t=>this.getType(t))}findDependentTypes(e){let t=[];for(let[o,n]of this.registeredTypes)n.dependencies?.includes(e)&&t.push(o);return t}registerBuiltinTypes(){for(let e of oo())this.registerType(e);this.logger.info("Built-in module types registered",{totalTypes:this.registeredTypes.size});}clearAllTypes(){this.registeredTypes.clear(),this.logger.info("All module types cleared");}getStats(){return ao(this.registeredTypes)}};function lo(r,e,t){if(!r.name||r.name.trim()==="")throw new I("Module name is required");if(!r.version||r.version.trim()==="")throw new I("Module version is required");let o=r.getModuleType(),n=e.validateTypeDescriptor(o);if(!n.valid)throw new I(`Invalid module type: ${n.errors.join(", ")}`,{moduleName:r.name,errors:n.errors});n.warnings.length>0&&t.warn("Module type validation warnings",{moduleName:r.name,warnings:n.warnings});}async function uo(r,e,t,o){let n=r.getModuleType();if(!n.dependencies||n.dependencies.length===0)return;for(let a of n.dependencies)if(!e.hasType(a))throw new I(`Module '${r.name}' depends on unregistered type '${a}'`,{moduleName:r.name,dependencyType:a});let i=new Set;for(let a of t.values())i.add(a.getModuleType().type);let s=[];for(let a of n.dependencies)i.has(a)||s.push(a);s.length>0&&o.warn("Module has unmet dependencies",{moduleName:r.name,missingDependencies:s});}function co(r,e){let t=e.get(r);if(!t)return [];let o=t.getModuleType().type,n=[];for(let[i,s]of e.entries())i!==r&&s.getModuleType().dependencies?.includes(o)&&n.push(i);return n}function go(r,e){let t={},o=0,n=0,i=0,s=0,a=0,l=0;for(let d of r.values()){let u=d.getModuleType().type;t[u]=(t[u]||0)+1,d.isInitialized()&&o++,d.isEnabled()&&n++;}for(let d of e.values())i+=d.totalExecutions,s+=d.successfulExecutions,a+=d.failedExecutions,l+=d.totalExecutionTime;return {totalModules:r.size,initializedModules:o,enabledModules:n,modulesByType:t,totalExecutions:i,totalSuccessfulExecutions:s,totalFailedExecutions:a,averageExecutionTime:i>0?l/i:0}}var mo={REGISTERED:"module.registered",UNREGISTERED:"module.unregistered"},at=class{modules=new Map;moduleOptions=new Map;moduleStatuses=new Map;moduleStats=new Map;registrationOrder=[];initializationOrder=[];typeRegistry;eventEmitter;logger;isDisposing=false;constructor(e,t){this.eventEmitter=e,this.typeRegistry=t??new st,this.logger=A("ModuleRegistry");}async registerModule(e,t={}){if(this.isDisposing)throw new I("Cannot register modules during disposal");if(lo(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new I(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==false&&await uo(e,this.typeRegistry,this.modules,this.logger),this.modules.set(e.name,e),this.moduleOptions.set(e.name,t.initOptions||{}),this.registrationOrder.push(e.name);let o=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:o.type,enabled:e.isEnabled(),initialized:false,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:o.dependencies||[],dependents:[]}),this.moduleStats.set(e.name,{totalExecutions:0,successfulExecutions:0,failedExecutions:0,averageExecutionTime:0,totalExecutionTime:0}),t.autoInitialize&&await this.initializeModule(e.name,t.initTimeout),this.eventEmitter&&await this.eventEmitter.emit(mo.REGISTERED,{data:{moduleName:e.name,moduleType:o.type},timestamp:new Date});}async unregisterModule(e){let t=this.modules.get(e);if(!t)return false;let o=co(e,this.modules);if(o.length>0)throw new I(`Cannot unregister module '${e}' - it is required by: ${o.join(", ")}`,{moduleName:e,dependents:o});t.isInitialized()&&t.dispose&&await t.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let n=this.registrationOrder.indexOf(e);n!==-1&&this.registrationOrder.splice(n,1);let i=this.initializationOrder.indexOf(e);return i!==-1&&this.initializationOrder.splice(i,1),this.eventEmitter&&await this.eventEmitter.emit(mo.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),true}async initializeModule(e,t){let o=this.modules.get(e);if(!o)throw new I(`Module '${e}' not found`);if(o.isInitialized())return;let n=this.moduleOptions.get(e),i=o.initialize(n,this.eventEmitter);if(t&&t>0){let a,l=new Promise((d,u)=>{a=setTimeout(()=>{u(new Error(`Module '${e}' initialization timed out after ${t}ms`));},t);});await Promise.race([i.then(d=>(clearTimeout(a),d)),l]);}else await i;let s=this.moduleStatuses.get(e);s&&(s.initialized=true,s.initializationTime=new Date),this.initializationOrder.includes(e)||this.initializationOrder.push(e);}async initializeAllModules(e){let t=Array.from(this.modules.keys());if(t.length===0)return;let o=t.map(i=>this.modules.get(i).getModuleType().type),n=this.typeRegistry.resolveDependencies(o);if(!n.resolved){let i=[];throw n.missingDependencies.length>0&&i.push(`Missing dependencies: ${n.missingDependencies.join(", ")}`),n.circularDependencies.length>0&&i.push(`Circular dependencies: ${n.circularDependencies.map(s=>s.join(" -> ")).join("; ")}`),new I(`Cannot initialize modules: ${i.join("; ")}`,{missingDependencies:n.missingDependencies,circularDependencies:n.circularDependencies.map(s=>s.join(" -> "))})}for(let i of n.order){let s=t.find(a=>this.modules.get(a).getModuleType().type===i);s&&await this.initializeModule(s,e);}}async executeModule(e,t){let o=this.modules.get(e);if(!o)throw new I(`Module '${e}' not found`);if(!o.isInitialized())throw new I(`Module '${e}' is not initialized`);if(!o.isEnabled())throw new I(`Module '${e}' is disabled`);let n=this.moduleStats.get(e),i=Date.now();try{if(!o.execute)throw new I(`Module '${e}' does not support execute()`);let s=await o.execute(t),a=Date.now()-i;n.totalExecutions++,n.successfulExecutions++,n.totalExecutionTime+=a,n.averageExecutionTime=n.totalExecutionTime/n.totalExecutions,n.lastExecutionTime=new Date;let l=this.moduleStatuses.get(e);return l&&(l.lastActivity=new Date),s}catch(s){let a=Date.now()-i;throw n.totalExecutions++,n.failedExecutions++,n.totalExecutionTime+=a,n.averageExecutionTime=n.totalExecutionTime/n.totalExecutions,n.lastExecutionTime=new Date,s}}getModule(e){return this.modules.get(e)}getModulesByType(e){return Array.from(this.modules.values()).filter(t=>t.getModuleType().type===e)}getAllModules(){return Array.from(this.modules.values())}getModuleNames(){return Array.from(this.modules.keys())}hasModule(e){return this.modules.has(e)}getModuleStatus(e){return this.moduleStatuses.get(e)}getAllModuleStatuses(){return Array.from(this.moduleStatuses.values())}getModuleStats(e){return this.moduleStats.get(e)}getAllModuleStats(){let e={};for(let[t,o]of this.moduleStats.entries())e[t]={...o};return e}async disposeAllModules(){this.isDisposing=true;let e=[...this.initializationOrder].reverse();for(let t of e){let o=this.modules.get(t);if(o&&o.isInitialized())try{o.dispose&&await o.dispose();let n=this.moduleStatuses.get(t);n&&(n.initialized=!1);}catch(n){this.logger.error("Failed to dispose module",{name:t,error:n instanceof Error?n.message:String(n)});}}this.initializationOrder=[],this.isDisposing=false;}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=false;}getRegistryStats(){return go(this.modules,this.moduleStats)}};var lt=class extends ne{providers=new Map;currentProvider;currentModel;constructor(){super();}async doInitialize(){P.debug("AIProviders initialized");}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),P.debug(`Closed AI provider: ${e}`);}catch(o){P.warn(`Failed to close AI provider ${e}`,{error:o instanceof Error?o.message:String(o)});}this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0,P.debug("AIProviders disposed");}addProvider(e,t){this.ensureInitialized();let o=q.validateProviderName(e);if(!o.isValid)throw new M(`Invalid provider name: ${o.errors.join(", ")}`);if(!t||typeof t!="object"||t===null||Array.isArray(t))throw new M("Provider must be a valid object instance");if(!t.name||typeof t.name!="string")throw new M("Provider must have a valid name");if(typeof t.chat!="function")throw new M("Provider must have a chat method");this.providers.has(e)&&P.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),P.debug(`AI provider "${e}" registered successfully`,{providerName:e,version:t.version,supportsStreaming:typeof t.chatStream=="function"});}removeProvider(e){if(this.ensureInitialized(),!this.providers.has(e)){P.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(o=>{P.warn(`Failed to close provider ${e}`,{error:o.message});}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,P.debug(`Cleared current provider selection after removing "${e}"`)),P.debug(`AI provider "${e}" removed successfully`);}getProvider(e){return this.ensureInitialized(),this.providers.get(e)}getProviders(){return this.ensureInitialized(),Object.fromEntries(this.providers)}setCurrentProvider(e,t){if(this.ensureInitialized(),!this.providers.get(e))throw new I(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,P.debug(`Current AI provider set to "${e}" with model "${t}"`);}getCurrentProvider(){if(this.ensureInitialized(),!(!this.currentProvider||!this.currentModel))return {provider:this.currentProvider,model:this.currentModel}}isConfigured(){return this.ensureInitialized(),!!(this.currentProvider&&this.currentModel&&this.providers.has(this.currentProvider))}getAvailableModels(e){if(this.ensureInitialized(),!this.providers.get(e))throw new I(`Provider "${e}" is not registered`);return P.warn("getAvailableModels() is deprecated. Models are now handled by providers internally."),[]}getCurrentProviderInstance(){if(!(!this.isConfigured()||!this.currentProvider))return this.providers.get(this.currentProvider)}getProviderNames(){return this.ensureInitialized(),Array.from(this.providers.keys())}getProvidersByPattern(e){this.ensureInitialized();let t=typeof e=="string"?new RegExp(e):e,o={};for(let[n,i]of this.providers)t.test(n)&&(o[n]=i);return o}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return false;let o=this.providers.get(t);return !!(o&&typeof o.chatStream=="function")}getProviderCount(){return this.ensureInitialized(),this.providers.size}};var De=class{tools=new Map;register(e){if(!e.schema?.name)throw new M("Tool must have a valid schema with name");let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&P.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),P.debug(`Tool "${t}" registered successfully`,{toolName:t,toolType:e.constructor.name,parameters:Object.keys(e.schema.parameters?.properties||{})});}unregister(e){if(!this.tools.has(e)){P.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),P.debug(`Tool "${e}" unregistered successfully`);}get(e){return this.tools.get(e)}getAll(){return Array.from(this.tools.values())}getSchemas(){let e=this.getAll();return P.debug("[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction",{count:e.length,tools:e.map(t=>({name:t.schema?.name??"unnamed",hasSchema:!!t.schema,schemaType:typeof t.schema,toolType:t.constructor?.name||"unknown"}))}),this.getAll().map(t=>t.schema)}has(e){return this.tools.has(e)}clear(){let e=this.tools.size;this.tools.clear(),P.debug(`Cleared ${e} tools from registry`);}getToolNames(){return Array.from(this.tools.keys())}getToolsByPattern(e){let t=typeof e=="string"?new RegExp(e):e;return this.getAll().filter(o=>t.test(o.schema.name))}size(){return this.tools.size}validateToolSchema(e){if(!e.name||typeof e.name!="string")throw new M("Tool schema must have a valid name");if(!e.description||typeof e.description!="string")throw new M("Tool schema must have a description");if(!e.parameters||typeof e.parameters!="object"||e.parameters===null||Array.isArray(e.parameters))throw new M("Tool schema must have parameters object");if(e.parameters.type!=="object")throw new M('Tool parameters type must be "object"');if(e.parameters.properties)for(let t of Object.keys(e.parameters.properties)){let o=e.parameters.properties[t];if(!o?.type)throw new M(`Parameter "${t}" must have a type`);if(!["string","number","boolean","array","object"].includes(o.type))throw new M(`Parameter "${t}" has invalid type "${o.type}"`)}if(e.parameters.required){let t=e.parameters.properties||{};for(let o of e.parameters.required)if(!t[o])throw new M(`Required parameter "${o}" is not defined in properties`)}}};var Ue=class{schema;fn;eventService;constructor(e,t){this.schema=e,this.fn=t,this.validateConstructorInputs();}getName(){return this.schema.name}setEventService(e){this.eventService=e;}async execute(e,t){let o=this.schema.name;if(!this.validate(e)){let a=this.getValidationErrors(e);throw new M(`Invalid parameters for tool "${o}": ${a.join(", ")}`)}let n=Date.now(),i;try{i=await this.fn(e,t);}catch(a){throw a instanceof F||a instanceof M?a:new F(`Function tool execution failed: ${a instanceof Error?a.message:String(a)}`,o,a instanceof Error?a:new Error(String(a)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let s=Date.now()-n;return {success:true,data:i,metadata:{executionTime:s,toolName:o,parameters:e}}}validate(e){return this.getValidationErrors(e).length===0}validateParameters(e){let t=this.getValidationErrors(e);return {isValid:t.length===0,errors:t}}getDescription(){return this.schema.description}getValidationErrors(e){let t=[],o=this.schema.parameters.required||[],n=this.schema.parameters.properties||{};for(let i of o)i in e||t.push(`Missing required parameter: ${i}`);for(let[i,s]of Object.entries(e)){let a=n[i];if(!a){t.push(`Unknown parameter: ${i}`);continue}let l=this.validateParameterType(i,s,a);l&&t.push(l);}return t}validateParameterType(e,t,o){switch(o.type){case "string":if(typeof t!="string")return `Parameter "${e}" must be a string, got ${typeof t}`;break;case "number":if(typeof t!="number"||isNaN(t))return `Parameter "${e}" must be a number, got ${typeof t}`;break;case "boolean":if(typeof t!="boolean")return `Parameter "${e}" must be a boolean, got ${typeof t}`;break;case "array":if(!Array.isArray(t))return `Parameter "${e}" must be an array, got ${typeof t}`;if(o.items)for(let i=0;i<t.length;i++){let s=this.validateParameterType(`${e}[${i}]`,t[i],o.items);if(s)return s}break;case "object":if(typeof t!="object"||t===null||Array.isArray(t))return `Parameter "${e}" must be an object, got ${typeof t}`;break}if(o.enum&&o.enum.length>0){let i=o.enum,s=false;for(let a of i)if(t===a){s=true;break}if(!s)return `Parameter "${e}" must be one of: ${i.join(", ")}, got ${t}`}}validateConstructorInputs(){if(!this.schema)throw new M("Tool schema is required");if(!this.fn||typeof this.fn!="function")throw new M("Tool function is required and must be a function");if(!this.schema.name)throw new M("Tool schema must have a name")}};var ut=class extends ne{registry;allowedTools;constructor(){super(),this.registry=new De;}async doInitialize(){P.debug("Tools initialized");}async doDispose(){this.registry.clear(),delete this.allowedTools,P.debug("Tools disposed");}addTool(e,t){this.ensureInitialized();let o=new Ue(e,t);this.registry.register(o),P.debug(`Tool "${e.name}" registered successfully`);}removeTool(e){this.ensureInitialized(),this.registry.unregister(e);}getTool(e){return this.ensureInitialized(),this.registry.get(e)}getToolSchema(e){return this.ensureInitialized(),this.registry.get(e)?.schema}getTools(){this.ensureInitialized();let e=this.registry.getSchemas();return this.allowedTools?e.filter(t=>this.allowedTools.includes(t.name)):e}async executeTool(e,t,o){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new F(`Tool "${e}" is not in the allowed tools list`,e);let n=this.registry.get(e);if(!n)throw new F(`Tool "${e}" is not registered`,e);let i;try{i=await n.execute(t,o);}catch(s){throw s instanceof Error?new F(s.message,e,s):new F(String(s),e)}if(!i.success)throw new F(i.error||"Tool execution failed",e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(i)});if(typeof i.data>"u")throw new F("Tool execution succeeded but returned no data",e);return i.data}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],P.debug(`Set allowed tools: ${e.join(", ")}`);}getAllowedTools(){return this.ensureInitialized(),this.allowedTools?[...this.allowedTools]:void 0}getRegistry(){return this.ensureInitialized(),this.registry}getToolCount(){return this.ensureInitialized(),this.registry.size()}};var Ne=class{templates=new Map;logger;constructor(){this.logger=A("AgentTemplates"),this.logger.info("AgentTemplates initialized");}registerTemplate(e){if(!e.id)throw new Error("Template must have an ID");this.templates.has(e.id)&&this.logger.warn(`Template "${e.id}" is already registered, overriding`),this.templates.set(e.id,e),this.logger.info(`Template "${e.id}" registered successfully`,{templateId:e.id,category:e.category,tags:e.tags});}unregisterTemplate(e){let t=this.templates.delete(e);return t?this.logger.info(`Template "${e}" unregistered`):this.logger.warn(`Attempted to unregister non-existent template "${e}"`),t}getTemplates(){return Array.from(this.templates.values())}getTemplate(e){return this.templates.get(e)}findTemplates(e){return this.getTemplates().filter(t=>!(e.category&&t.category!==e.category||e.tags&&e.tags.length>0&&!e.tags.some(n=>t.tags?.includes(n))||e.provider&&t.config.defaultModel?.provider!==e.provider||e.model&&t.config.defaultModel?.model!==e.model))}applyTemplate(e,t={}){let o=[],n=false,i={...e.config},s={...i,...t},a=d=>{d in t&&i[d]!==t[d]&&(n=true,i[d]!==void 0&&o.push(`Override: ${d} changed from "${String(i[d])}" to "${String(t[d])}"`));};t.name!==void 0&&a("name"),t.systemMessage!==void 0&&a("systemMessage");let l=s;return this.logger.debug("Template applied",{templateId:e.id,overridesCount:Object.keys(t).length,warningsCount:o.length,modified:n}),{config:l,template:e,warnings:o,modified:n}}hasTemplate(e){return this.templates.has(e)}getTemplateCount(){return this.templates.size}clearAll(){this.templates.clear(),this.logger.info("All templates cleared");}getStats(){let e=this.getTemplates(),t=[...new Set(e.map(s=>s.category).filter(s=>typeof s=="string"&&s.length>0))],o=[...new Set(e.flatMap(s=>s.tags||[]))],n=[...new Set(e.map(s=>s.config.defaultModel?.provider).filter(s=>typeof s=="string"&&s.length>0))],i=[...new Set(e.map(s=>s.config.defaultModel?.model).filter(s=>typeof s=="string"&&s.length>0))];return {totalTemplates:e.length,categories:t,tags:o,providers:n,models:i}}};var zn=100,Bn=.7,Xn=36,Gn=8;function po(r){return {defaultModel:r.defaultModel||"gpt-4",defaultProvider:r.defaultProvider||"openai",maxConcurrentAgents:r.maxConcurrentAgents||zn,defaultSystemMessage:r.defaultSystemMessage||"You are a helpful AI assistant.",strictValidation:r.strictValidation??true}}function fo(r,e){if(!r.aiProviders||r.aiProviders.length===0)throw new I("At least one AI provider must be specified in aiProviders array");let t=r.defaultModel||{provider:r.aiProviders[0]?.name||e.defaultProvider,model:e.defaultModel,temperature:.7,systemMessage:e.defaultSystemMessage};return {id:r.id||$t(),name:r.name||"Unnamed Agent",aiProviders:r.aiProviders,defaultModel:{provider:t.provider,model:t.model,temperature:t.temperature??Bn,...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.topP!==void 0&&{topP:t.topP},systemMessage:t.systemMessage||e.defaultSystemMessage},tools:r.tools||[],plugins:r.plugins||[],metadata:r.metadata||{},...r.logging&&{logging:r.logging},...r.conversationId&&{conversationId:r.conversationId},...r}}function $t(){let r=Date.now(),e=Math.random().toString(Xn).substring(2,Gn);return `agent_${r}_${e}`}function vo(r,e){return r.totalCreated++,r.activeCount++,e?r.fromTemplates++:r.customConfigured++,r.templateUsageRatio=r.totalCreated>0?r.fromTemplates/r.totalCreated:0,r}var _e=class{agentTemplates;initialized=false;logger;options;activeAgents;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new Ne,this.logger=A("AgentFactory"),this.options=po(e),this.activeAgents=new Map,this.creationStats={totalCreated:0,activeCount:0,fromTemplates:0,customConfigured:0,templateUsageRatio:0},this.lifecycleEvents=t,this.logger.debug("AgentFactory initialized",{maxConcurrentAgents:this.options.maxConcurrentAgents,strictValidation:this.options.strictValidation,hasDefaultModel:!!this.options.defaultModel,hasDefaultProvider:!!this.options.defaultProvider,hasLifecycleEvents:this.lifecycleEvents!==null});}async initialize(){this.initialized||(this.logger.debug("Initializing AgentFactory"),this.initialized=true,this.logger.debug("AgentFactory initialization completed"));}async createAgent(e,t,o=false){let n;try{if(this.activeAgents.size>=this.options.maxConcurrentAgents)throw new I(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);if(n=fo(t,this.options),this.options.strictValidation){let l=Ht(n);if(!l.isValid)throw new M(`Invalid agent configuration: ${l.errors.join(", ")}`)}this.lifecycleEvents.beforeCreate&&await this.lifecycleEvents.beforeCreate(n);let i=new e(n),s=i;typeof s.initialize=="function"&&await s.initialize();let a=$t();return this.activeAgents.set(a,i),vo(this.creationStats,o),this.lifecycleEvents.afterCreate&&await this.lifecycleEvents.afterCreate(i,n),this.logger.info("Agent created successfully",{agentId:a,model:n.defaultModel.model,provider:n.defaultModel.provider}),i}catch(i){let s=i instanceof Error?i:new Error(String(i));throw this.lifecycleEvents.onCreateError&&n&&await this.lifecycleEvents.onCreateError(s,n),this.logger.error("Failed to create agent",{error:s.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),s}}async createFromTemplate(e,t,o={}){let n=this.agentTemplates.getTemplate(t);if(!n)throw new I(`Template not found: ${t}`);let i=this.applyTemplate(n,o);i.warnings.length>0&&this.logger.warn("Template application warnings",{templateId:t,warnings:i.warnings});let s=await this.createAgent(e,i.config,true);return this.logger.info("Agent created from template",{templateId:t,modified:i.modified,warnings:i.warnings.length}),s}registerTemplate(e){this.agentTemplates.registerTemplate(e);}unregisterTemplate(e){return this.agentTemplates.unregisterTemplate(e)}getTemplates(){return this.agentTemplates.getTemplates()}getTemplate(e){return this.agentTemplates.getTemplate(e)}findTemplates(e){return this.agentTemplates.findTemplates(e)}applyTemplate(e,t={}){return this.agentTemplates.applyTemplate(e,t)}async destroyAgent(e){let t=this.activeAgents.get(e);if(!t)return false;try{let o=t;return typeof o.cleanup=="function"&&await o.cleanup(),this.activeAgents.delete(e),this.creationStats.activeCount--,this.lifecycleEvents.onDestroy&&await this.lifecycleEvents.onDestroy(e),this.logger.info("Agent destroyed",{agentId:e}),!0}catch(o){throw this.logger.error("Error destroying agent",{agentId:e,error:o instanceof Error?o.message:String(o)}),o}}getCreationStats(){return {...this.creationStats}}getActiveAgents(){return new Map(this.activeAgents)}validateConfiguration(e){return Ht(e)}};function Eo(r){if(!r.name)throw new I("Agent name is required",{component:"Robota"});if(!r.aiProviders||r.aiProviders.length===0)throw new I("At least one AI provider is required",{component:"Robota"});if(!r.defaultModel)throw new I("Default model configuration is required",{component:"Robota"});if(!r.defaultModel.provider||!r.defaultModel.model)throw new I("Default model must specify both provider and model",{component:"Robota"});let e=r.aiProviders.map(o=>o.name),t=e.filter((o,n)=>e.indexOf(o)!==n);if(t.length>0)throw new I(`Duplicate AI provider names: ${t.join(", ")}`,{component:"Robota",duplicates:t});if(!e.includes(r.defaultModel.provider))throw new I(`Default provider '${r.defaultModel.provider}' not found in AI providers list. Available: ${e.join(", ")}`,{component:"Robota",defaultProvider:r.defaultModel.provider,availableProviders:e})}var dt=class{constructor(e,t,o,n,i,s,a,l,d,u,c,g,m){this.logger=e;this.getAIProviders=t;this.getTools=o;this.getEventService=n;this.isReady=i;this.ensureReady=s;this.getConfig=a;this.setConfig=l;this.getConfigVersion=d;this.bumpConfigVersion=u;this.getConfigUpdatedAt=c;this.setConfigUpdatedAt=g;this.emitAgentEvent=m;}async updateTools(e){if(await this.ensureReady(),!Array.isArray(e))throw new I("updateTools: next must be an array of tools");this.getTools().getRegistry().clear();let o=[],n=this.getEventService();for(let a of e){n&&a.setEventService(n);let l=async(u,c)=>{if(!c)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await a.execute(u,c)).data};this.getTools().addTool(a.schema,l);let d=a.schema.name;typeof d=="string"&&d.length>0&&o.push(d);}let i=this.getConfig();i.tools=e,this.setConfig(i);let s=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(R.CONFIG_UPDATED,{parameters:{tools:o,systemMessage:i.defaultModel.systemMessage,provider:i.defaultModel.provider,model:i.defaultModel.model,temperature:i.defaultModel.temperature,maxTokens:i.defaultModel.maxTokens},metadata:{version:s}}),{version:s}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);throw new I("updateConfiguration: only tools patch is supported at this time")}async getConfiguration(){await this.ensureReady();let t=this.getTools().getTools().map(o=>({name:o.name,parameters:(()=>{let i=o.parameters?.properties;return i&&typeof i=="object"?Object.keys(i):void 0})()}));return {version:this.getConfigVersion(),tools:t,updatedAt:this.getConfigUpdatedAt(),metadata:void 0}}setModel(e){if(!e.provider||!e.model)throw new I("Both provider and model are required",{component:"Robota"});if(!this.isReady())throw new I("Agent must be fully initialized before changing model configuration",{component:"Robota"});let t=this.getAIProviders(),o=t.getProviderNames();if(!o.includes(e.provider))throw new I(`AI Provider '${e.provider}' not found. Available: ${o.join(", ")}`,{component:"Robota",provider:e.provider,availableProviders:o});t.setCurrentProvider(e.provider,e.model);let n=this.getConfig();this.setConfig({...n,defaultModel:{...n.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.systemMessage!==void 0&&{systemMessage:e.systemMessage}}}),this.logger.debug("Model configuration updated",e);}getModel(){if(!this.isReady())throw new I("Agent must be fully initialized before getting model configuration",{component:"Robota"});let e=this.getAIProviders().getCurrentProvider();if(!e)throw new I("No provider is currently set",{component:"Robota"});let t=this.getConfig();return {provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.systemMessage!==void 0&&{systemMessage:t.defaultModel.systemMessage}}}registerTool(e,t){if(t.hasTool(e.schema.name))throw new Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);let o=async(n,i)=>{if(!i)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await e.execute(n,i)).data};t.addTool(e.schema,o),this.logger.debug("Tool registered",{toolName:e.schema.name});}};var ct=class{constructor(e,t,o,n,i){this.agentName=e;this.moduleRegistry=t;this.logger=o;this.isReady=n;this.ensureReady=i;}async registerModule(e,t){await this.ensureReady(),await this.moduleRegistry.registerModule(e,{autoInitialize:t?.autoInitialize??true,validateDependencies:t?.validateDependencies??true}),this.logger.info("Module registered",{moduleName:e.name,moduleType:e.getModuleType().type});}async unregisterModule(e){if(!this.isReady())return false;let t=await this.moduleRegistry.unregisterModule(e);return t&&this.logger.info("Module unregistered",{moduleName:e}),t}getModule(e){if(this.isReady())return this.moduleRegistry.getModule(e)}getModulesByType(e){return this.isReady()?this.moduleRegistry.getModulesByType(e):[]}getModules(){return this.isReady()?this.moduleRegistry.getAllModules():[]}getModuleNames(){return this.isReady()?this.moduleRegistry.getModuleNames():[]}hasModule(e){return this.isReady()?this.moduleRegistry.hasModule(e):false}async executeModule(e,t){await this.ensureReady();let o={agentName:this.agentName,...t.executionId&&{executionId:t.executionId},...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}};return await this.moduleRegistry.executeModule(e,o)}getModuleStats(e){if(this.isReady())return this.moduleRegistry.getModuleStats(e)}};var gt=class{constructor(e,t,o){this.logger=e;this.isReady=t;this.getExecutionService=o;}addPlugin(e){let t=this.getExecutionService();if(!this.isReady()||!t)throw new I("Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.",{pluginName:e.name});t.registerPlugin(e),this.logger.debug("Plugin added",{pluginName:e.name});}removePlugin(e){let t=this.getExecutionService();if(!t)return false;let o=t.removePlugin(e);return o&&this.logger.debug("Plugin removed",{pluginName:e}),o}getPlugin(e){let t=this.getExecutionService();if(t)return t.getPlugin(e)}getPlugins(){let e=this.getExecutionService();return e?e.getPlugins():[]}getPluginNames(){let e=this.getExecutionService();return !this.isReady()||!e?[]:e.getPlugins().map(t=>t.name)}};function Io(r){let e=new ct(r.getName(),r.getModuleRegistry(),r.getLogger(),r.getIsFullyInitialized,r.ensureFullyInitialized),t=new gt(r.getLogger(),r.getIsFullyInitialized,r.getExecutionService),o=new dt(r.getLogger(),r.getAiProviders,r.getTools,r.getEventService,r.getIsFullyInitialized,r.ensureFullyInitialized,r.getConfig,n=>r.setConfig(n),r.getConfigVersion,r.incrementConfigVersion,r.getConfigUpdatedAt,n=>r.setConfigUpdatedAt(n),(n,i)=>r.emitAgentEvent(n,i));return {moduleManager:e,pluginManager:t,configManager:o}}var oe=class{build(e,t,o,n){let i=e.map(a=>({role:a.role,content:a.content})),s=JSON.stringify({messages:i,model:t,provider:o,temperature:n?.temperature,maxTokens:n?.maxTokens});return {hash:this.sha256(s),model:t,provider:o}}computeIntegrityHash(e){return this.sha256(e)}sha256(e){let t=new Wn("SHA-256","TEXT");return t.update(e),t.getHash("HEX")}};var Le=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new oe;hits=0;misses=0;constructor(e){this.maxEntries=e.maxEntries,this.ttlMs=e.ttlMs;}get(e){let t=this.cache.get(e);if(!t){this.misses++;return}if(Date.now()-t.timestamp>this.ttlMs){this.cache.delete(e),this.removeFromAccessOrder(e),this.misses++;return}let o=this.keyBuilder.computeIntegrityHash(t.response);if(t.integrityHash!==o)throw this.cache.delete(e),this.removeFromAccessOrder(e),new Be(`Integrity check failed for cache entry ${e}`,{hash:e,expected:o,actual:t.integrityHash});return this.touchAccessOrder(e),this.hits++,t}set(e){let t=e.key.hash;!this.cache.has(t)&&this.cache.size>=this.maxEntries&&this.evictLRU(),this.cache.set(t,e),this.touchAccessOrder(t);}delete(e){return this.cache.has(e)?(this.cache.delete(e),this.removeFromAccessOrder(e),true):false}clear(){this.cache.clear(),this.accessOrder.length=0,this.hits=0,this.misses=0;}getStats(){let e=this.hits+this.misses;return {hits:this.hits,misses:this.misses,entries:this.cache.size,hitRate:e===0?0:this.hits/e}}touchAccessOrder(e){this.removeFromAccessOrder(e),this.accessOrder.push(e);}removeFromAccessOrder(e){let t=this.accessOrder.indexOf(e);t!==-1&&this.accessOrder.splice(t,1);}evictLRU(){let e=this.accessOrder.shift();e&&this.cache.delete(e);}};var ke=class{constructor(e,t){this.storage=e;this.keyBuilder=t;}lookup(e,t,o,n){let i=this.keyBuilder.build(e,t,o,n),s=this.storage.get(i.hash);return s?s.response:void 0}store(e,t,o,n,i){let s=this.keyBuilder.build(e,t,o,i);this.storage.set({key:s,response:n,timestamp:Date.now(),integrityHash:this.keyBuilder.computeIntegrityHash(n)});}getStats(){return this.storage.getStats()}};async function qn(r){let{config:e,aiProviders:t,tools:o,agentFactory:n,conversationHistory:i,moduleRegistry:s,eventEmitter:a,eventService:l,logger:d}=r;if(d.debug("Starting Robota initialization with independent managers"),await Promise.all([t.initialize(),o.initialize(),n.initialize()]),e.aiProviders)for(let g of e.aiProviders)t.addProvider(g.name,g);if(e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),e.modules){for(let g of e.modules)await s.registerModule(g,{autoInitialize:true,validateDependencies:true});d.debug("Modules registered and initialized",{moduleCount:e.modules.length,moduleNames:e.modules.map(g=>g.name)});}if(e.tools)for(let g of e.tools){g instanceof et&&l&&g.setEventService(l);let m=async(p,f)=>{if(!f)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await g.execute(p,f)).data};o.addTool(g.schema,m),d.debug("Tool registered during initialization",{toolName:g.schema.name});}let u;if(e.cache?.enabled){let g=new Le({maxEntries:e.cache.maxEntries,ttlMs:e.cache.ttlMs});u=new ke(g,new oe);}let c=new Ye(t,o,i,l,e.executionContext,u);if(e.plugins)for(let g of e.plugins)c.registerPlugin(g),g.subscribeToModuleEvents&&(await g.subscribeToModuleEvents(a),d.debug("Plugin subscribed to module events",{pluginName:g.name}));return d.debug("Robota initialization completed successfully with independent managers"),c}async function To(r){try{let e=await qn(r.ctx);r.setExecutionService(e),r.setFullyInitialized(!0);}catch(e){throw r.ctx.logger.error("Robota initialization failed",{error:e instanceof Error?e.message:String(e)}),e}}function jn(r,e){return {conversationId:r.conversationId,...e.sessionId&&{sessionId:e.sessionId},...e.userId&&{userId:e.userId},...e.metadata&&{metadata:e.metadata},...e.signal&&{signal:e.signal},...e.onTextDelta&&{onTextDelta:e.onTextDelta},...e.onExecutionEvent&&{onExecutionEvent:e.onExecutionEvent},...e.maxExecutionRounds!==void 0&&{maxExecutionRounds:e.maxExecutionRounds}}}async function ho(r,e,t={}){try{r.emitAgentEvent(R.EXECUTION_START,{}),r.logger.debug("Starting Robota execution",{inputLength:e.length,conversationId:r.conversationId,sessionId:t.sessionId||"none",userId:t.userId||"none",hasMetadata:!!t.metadata});let o=r.getHistory(),n={...r.config},i=await r.getExecutionService().execute(e,o,n,jn(r,t));if(r.logger.debug("Robota execution completed",{success:i.success,duration:i.duration,tokensUsed:i.tokensUsed,toolsExecuted:i.toolsExecuted,interrupted:i.interrupted}),i.interrupted)return r.emitAgentEvent(R.EXECUTION_COMPLETE,{}),i.response;if(!i.success&&i.error)throw i.error;return r.emitAgentEvent(R.EXECUTION_COMPLETE,{}),i.response}catch(o){throw r.logger.error("Robota execution failed",{error:o instanceof Error?o.message:String(o),conversationId:r.conversationId}),r.emitAgentEvent(R.EXECUTION_ERROR,{error:o instanceof Error?o.message:String(o)}),o}}async function*yo(r,e,t={}){try{r.emitAgentEvent(R.EXECUTION_START,{}),r.logger.debug("Starting Robota streaming execution",{inputLength:e.length,conversationId:r.conversationId,sessionId:t.sessionId||"none",userId:t.userId||"none",hasMetadata:!!t.metadata});let o=r.getHistory(),n={...r.config},i=r.getExecutionService().executeStream(e,o,n,{conversationId:r.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}});for await(let s of i)yield s.chunk;}catch(o){throw r.logger.error("Robota streaming execution failed",{error:o instanceof Error?o.message:String(o),conversationId:r.conversationId}),r.emitAgentEvent(R.EXECUTION_ERROR,{error:o instanceof Error?o.message:String(o)}),o}finally{r.emitAgentEvent(R.EXECUTION_COMPLETE,{});}}function xo(r){let e=r.isFullyInitialized?r.aiProviders.getProviderNames():[],t=r.isFullyInitialized?r.aiProviders.getCurrentProvider():null,o=t?t.provider:null,n=r.isFullyInitialized?r.tools.getTools().map(u=>u.name):[],i=r.getPluginNames(),s=r.getModuleNames(),a=r.getHistory(),l=Date.now()-r.startTime,d={user:0,assistant:0,system:0,tool:0};for(let u of a)u.role in d&&d[u.role]++;return {name:r.name,version:r.version,conversationId:r.conversationId,providers:e,currentProvider:o,tools:n,plugins:i,modules:s,historyLength:a.length,historyStats:{userMessages:d.user,assistantMessages:d.assistant,systemMessages:d.system,toolMessages:d.tool},uptime:l}}async function Mo(r){r.logger.debug("Destroying Robota instance",{name:r.name});try{if(r.isFullyInitialized&&r.moduleRegistry&&(await r.moduleRegistry.disposeAllModules(),r.logger.debug("All modules disposed")),r.executionService){let e=r.executionService.getPlugins();for(let t of e)t.unsubscribeFromModuleEvents&&r.eventEmitter&&await t.unsubscribeFromModuleEvents(r.eventEmitter);r.logger.debug("ExecutionService plugins cleaned up");}r.moduleRegistry&&(r.moduleRegistry.clearAllModules(),r.logger.debug("ModuleRegistry cleared")),r.eventEmitter&&(await r.eventEmitter.destroy(),r.logger.debug("EventEmitter disposed")),r.resetState(),r.logger.info("Robota instance destroyed successfully",{name:r.name});}catch(e){throw r.logger.error("Error during Robota destruction",{error:e instanceof Error?e.message:String(e)}),e}}function bo(r,e){return r.getConversationStore(e).getMessages().map(o=>({id:o.id,role:o.role,content:o.content,state:o.state,timestamp:o.timestamp,metadata:o.metadata,...o.role==="assistant"&&"toolCalls"in o?{toolCalls:o.toolCalls}:{},...o.role==="tool"&&"toolCallId"in o?{toolCallId:o.toolCallId}:{},...o.role==="tool"&&"name"in o?{name:o.name}:{}}))}function Co(r,e){return r.getConversationStore(e).getHistory()}function Po(r,e,t){r.getConversationStore(e).addEntry(t);}function Ro(r,e){r.getConversationStore(e).clear();}function So(r,e,t,o,n){let i=r.getConversationStore(e);t==="tool"&&n?.toolCallId?i.addToolMessageWithId(o,n.toolCallId,n.name??"unknown"):t==="assistant"?i.addAssistantMessage(o,[]):t==="system"?i.addSystemMessage(o):i.addUserMessage(o);}function wo(r,e){let t=Array.isArray(r.tools)?r.tools.map(o=>{let n=o?.schema?.name;if(typeof n=="string"&&n.length>0)return n;let i=o?.name;return typeof i=="string"&&i.length>0?i:""}).filter(o=>typeof o=="string"&&o.length>0):[];e(R.CREATED,{parameters:{tools:t,systemMessage:r.defaultModel.systemMessage,provider:r.defaultModel.provider,model:r.defaultModel.model,temperature:r.defaultModel.temperature,maxTokens:r.defaultModel.maxTokens}});}function Ao(r,e,t,o,n){re(r)||r.emit(o,{timestamp:new Date,...n},{ownerType:Y,ownerId:e,ownerPath:zt(e,t)});}function Oo(){return new Oe({enabled:true,events:[T.MODULE_INITIALIZE_START,T.MODULE_INITIALIZE_COMPLETE,T.MODULE_INITIALIZE_ERROR,T.MODULE_EXECUTION_START,T.MODULE_EXECUTION_COMPLETE,T.MODULE_EXECUTION_ERROR,T.MODULE_DISPOSE_START,T.MODULE_DISPOSE_COMPLETE,T.MODULE_DISPOSE_ERROR]})}function zt(r,e){return [...e?.ownerPath?.length?e.ownerPath.map(o=>({...o})):[],{type:"agent",id:r}]}var Kn=36,Jn=9,Bt=class extends Fe{name;version="1.0.0";aiProviders;tools;agentFactory;conversationHistory;moduleRegistry;eventEmitter;executionService;eventService;agentEventService;config;conversationId;logger;initializationPromise;isFullyInitialized=false;startTime;configVersion=1;configUpdatedAt=Date.now();moduleManager;pluginManager;configManager;constructor(e){super(),this.name=e.name,this.config=e,this.conversationId=e.conversationId||`conv_${Date.now()}_${Math.random().toString(Kn).substr(2,Jn)}`,this.logger=A("Robota"),this.startTime=Date.now(),e.logging&&(e.logging.level&&It(e.logging.level),e.logging.enabled===false&&It("silent")),Eo(e),this.aiProviders=new lt,this.tools=new ut,this.agentFactory=new _e,this.conversationHistory=new we,this.eventEmitter=Oo(),this.moduleRegistry=new at(this.eventEmitter),this.eventService=e.eventService||ye,this.agentEventService=k(this.eventService,{ownerType:"agent",ownerId:this.conversationId,ownerPath:zt(this.conversationId,this.config.executionContext)});let t=Io({getName:()=>this.name,getModuleRegistry:()=>this.moduleRegistry,getLogger:()=>this.logger,getIsFullyInitialized:()=>this.isFullyInitialized,ensureFullyInitialized:()=>this.ensureFullyInitialized(),getExecutionService:()=>this.executionService,getAiProviders:()=>this.aiProviders,getTools:()=>this.tools,getEventService:()=>this.eventService,getConfig:()=>this.config,setConfig:o=>{this.config=o;},getConfigVersion:()=>this.configVersion,incrementConfigVersion:()=>++this.configVersion,getConfigUpdatedAt:()=>this.configUpdatedAt,setConfigUpdatedAt:o=>{this.configUpdatedAt=o;},emitAgentEvent:(o,n)=>this.emitAgentEvent(o,n)});this.moduleManager=t.moduleManager,this.pluginManager=t.pluginManager,this.configManager=t.configManager,wo(this.config,(o,n)=>this.emitAgentEvent(o,n));}async run(e,t={}){return await this.ensureFullyInitialized(),ho(this.executionDeps(),e,t)}async*runStream(e,t={}){await this.ensureFullyInitialized(),yield*yo(this.executionDeps(),e,t);}executionDeps(){return {conversationId:this.conversationId,config:this.config,logger:this.logger,getHistory:()=>this.getHistory(),getExecutionService:()=>this.executionService,emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)}}getHistory(){return bo(this.conversationHistory,this.conversationId)}getFullHistory(){return Co(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Po(this.conversationHistory,this.conversationId,e);}clearHistory(){Ro(this.conversationHistory,this.conversationId);}injectMessage(e,t,o){So(this.conversationHistory,this.conversationId,e,t,o);}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e);}getModel(){return this.configManager.getModel()}registerTool(e){this.configManager.registerTool(e,this.tools);}unregisterTool(e){this.tools.removeTool(e);}getConfig(){return {...this.config}}addPlugin(e){this.pluginManager.addPlugin(e);}removePlugin(e){return this.pluginManager.removePlugin(e)}getPlugin(e){return this.pluginManager.getPlugin(e)}getPlugins(){return this.pluginManager.getPlugins()}getPluginNames(){return this.pluginManager.getPluginNames()}async registerModule(e,t){return this.moduleManager.registerModule(e,t)}async unregisterModule(e){return this.moduleManager.unregisterModule(e)}getModule(e){return this.moduleManager.getModule(e)}getModulesByType(e){return this.moduleManager.getModulesByType(e)}getModules(){return this.moduleManager.getModules()}getModuleNames(){return this.moduleManager.getModuleNames()}hasModule(e){return this.moduleManager.hasModule(e)}async executeModule(e,t){return this.moduleManager.executeModule(e,t)}getModuleStats(e){return this.moduleManager.getModuleStats(e)}getStats(){return xo({name:this.name,version:this.version,conversationId:this.conversationId,startTime:this.startTime,isFullyInitialized:this.isFullyInitialized,aiProviders:this.aiProviders,tools:this.tools,getPluginNames:()=>this.getPluginNames(),getModuleNames:()=>this.getModuleNames(),getHistory:()=>this.getHistory()})}async destroy(){await Mo({name:this.name,isFullyInitialized:this.isFullyInitialized,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,executionService:this.executionService,logger:this.logger,resetState:()=>{this.isFullyInitialized=false,this.initializationPromise=void 0;}});}async initialize(){await this.ensureFullyInitialized();}async ensureFullyInitialized(){this.isFullyInitialized||(this.initializationPromise||(this.initializationPromise=this.doAsyncInit()),await this.initializationPromise);}doAsyncInit(){return To({ctx:{config:this.config,aiProviders:this.aiProviders,tools:this.tools,agentFactory:this.agentFactory,conversationHistory:this.conversationHistory,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,eventService:this.eventService,logger:this.logger},setExecutionService:e=>{this.executionService=e;},setFullyInitialized:e=>{this.isFullyInitialized=e;}})}emitAgentEvent(e,t){Ao(this.agentEventService,this.conversationId,this.config.executionContext,e,t);}};var Xt=class{store;listener;sequenceId=0;constructor(e,t){this.store=e,this.listener=(o,n,i)=>{if(!i?.ownerPath?.length)throw new Error(`[HISTORY-MODULE] Missing ownerPath for ${o}`);let s={eventName:o,sequenceId:this.nextSequenceId(),timestamp:n.timestamp,eventData:n,context:i};this.store.append(s);},t.subscribe(this.listener);}append(e){this.store.append(e);}read(e,t){return this.store.read(e,t)}readStream(e,t){return this.store.readStream(e,t)}getSnapshot(){return this.store.getSnapshot?.()}detach(e){e.unsubscribe(this.listener);}nextSequenceId(){return this.sequenceId+=1,this.sequenceId}};function L(r){if(!(!r||typeof r!="object"||Array.isArray(r)||r instanceof Date))return r}function Gt(r){return typeof r=="string"?r.length:0}var Yn=36,Zn=9,mt=class{config;methodConfigs=new Map;constructor(e){this.config=e;}configureMethod(e,t){return this.methodConfigs.set(e,t),this}configureStandardMethods(){return this.config.sourceType==="agent"&&(this.configureMethod("run",{startEvent:R.EXECUTION_START,completeEvent:R.EXECUTION_COMPLETE,errorEvent:R.EXECUTION_ERROR,extractMetadata:(e,t,o)=>({inputLength:Gt(o[0]),conversationId:e.conversationId,options:L(o[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod("runStream",{startEvent:R.EXECUTION_START,completeEvent:R.EXECUTION_COMPLETE,errorEvent:R.EXECUTION_ERROR,extractMetadata:(e,t,o)=>({inputLength:Gt(o[0]),conversationId:e.conversationId,streaming:true,options:L(o[1])||{}})})),this.config.sourceType==="team"&&(this.configureMethod("assignTask",{startEvent:xe.ASSIGNED,completeEvent:xe.COMPLETED,errorEvent:C.ERROR,extractMetadata:(e,t,o)=>{let n=L(o[0]);return {taskDescription:n?.jobDescription,agentTemplate:n?.agentTemplate,priority:n?.priority,allowFurtherDelegation:n?.allowFurtherDelegation}},extractResult:e=>({result:L(e)?.result,agentId:L(e)?.agentId,metadata:L(e)?.metadata})}),this.configureMethod("execute",{startEvent:C.START,completeEvent:C.COMPLETE,errorEvent:C.ERROR,extractMetadata:(e,t,o)=>({taskDescription:o[0],teamMode:true}),extractResult:e=>({response:e})})),this.config.sourceType==="tool"&&this.configureMethod("execute",{startEvent:_.CALL_START,completeEvent:_.CALL_COMPLETE,errorEvent:_.CALL_ERROR,extractMetadata:(e,t,o)=>({toolName:L(e.schema)?.name||e.constructor.name,parameters:o[0],parametersCount:L(o[0])?Object.keys(L(o[0])||{}).length:0,context:o[1]}),extractResult:e=>({result:typeof L(e)?.data=="string"?L(e)?.data||"":JSON.stringify(L(e)?.data),success:L(e)?.success})}),this}wrap(e){return new Proxy(e,{get:(t,o,n)=>{let i=Reflect.get(t,o,n);if(typeof o!="string")return i;let s=o;if(typeof i=="function"&&this.methodConfigs.has(s)){let a=this.methodConfigs.get(s);return async(...l)=>{let d=Date.now(),u=this.generateExecutionId(),c=t;try{if(a.startEvent){let p=a.extractMetadata?.(c,s,l)||{};this.emitEvent(a.startEvent,{timestamp:new Date,metadata:{...p,executionId:u,methodName:s,phase:"start"}});}let g=await i.apply(t,l),m=Date.now()-d;if(a.completeEvent){let p=a.extractResult?.(g)||{},f=a.extractMetadata?.(c,s,l)||{};this.emitEvent(a.completeEvent,{timestamp:new Date,...p,metadata:{...f,executionId:u,methodName:s,duration:m,phase:"complete",success:!0}});}return g}catch(g){let m=Date.now()-d;if(a.errorEvent){let p=a.extractMetadata?.(c,s,l)||{};this.emitEvent(a.errorEvent,{timestamp:new Date,error:g instanceof Error?g.message:String(g),metadata:{...p,executionId:u,methodName:s,duration:m,phase:"error",errorName:g instanceof Error?g.name:"UnknownError",success:false}});}throw g}}}return i}})}emitEvent(e,t){let o={emitterSourceType:this.config.sourceType,emitterSourceId:this.config.sourceId},n={timestamp:new Date,...t.metadata?{metadata:{...o,...t.metadata}}:{metadata:o},...t};this.config.eventService.emit(e,n);}generateExecutionId(){return `${this.config.sourceType}-${this.config.sourceId}-${Date.now()}-${Math.random().toString(Yn).substr(2,Zn)}`}};function Do(r,e){let t=new mt(e);return t.configureStandardMethods(),t.wrap(r)}function Qn(r,e,t){return function(o){return Do(o,{eventService:r,sourceType:e,sourceId:t})}}var Uo={safe:"plan",moderate:"default",full:"acceptEdits"};var pt={plan:{Bash:"deny",Read:"auto",Write:"deny",Edit:"deny",Glob:"auto",Grep:"auto",WebFetch:"auto",WebSearch:"auto"},default:{Bash:"approve",Read:"auto",Write:"approve",Edit:"approve",Glob:"auto",Grep:"auto",WebFetch:"auto",WebSearch:"auto"},acceptEdits:{Bash:"approve",Read:"auto",Write:"auto",Edit:"auto",Glob:"auto",Grep:"auto",WebFetch:"auto",WebSearch:"auto"},bypassPermissions:{Bash:"auto",Read:"auto",Write:"auto",Edit:"auto",Glob:"auto",Grep:"auto",WebFetch:"auto",WebSearch:"auto"}},ft={plan:"deny",default:"approve",acceptEdits:"approve",bypassPermissions:"auto"};function ei(r){let e=r.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,".+").replace(/\*/g,".*");return new RegExp(`^${e}$`)}function ti(r){let e=r.indexOf("(");if(e===-1)return {toolName:r.trim(),argPattern:void 0};let t=r.slice(0,e).trim(),o=r.slice(e+1,r.lastIndexOf(")")).trim();return {toolName:t,argPattern:o}}function ri(r,e){switch(r){case "Bash":return typeof e.command=="string"?e.command:void 0;case "Read":case "Write":case "Edit":return typeof e.filePath=="string"?e.filePath:void 0;case "Glob":case "Grep":return typeof e.pattern=="string"?e.pattern:void 0;default:return}}function No(r,e,t){let o=ti(t);if(o.toolName!==r)return false;if(o.argPattern===void 0)return true;let n=ri(r,e);return n===void 0?false:ei(o.argPattern).test(n)}function _o(r,e,t,o={}){let{allow:n=[],deny:i=[]}=o;for(let l of i)if(No(r,e,l))return "deny";for(let l of n)if(No(r,e,l))return "auto";let a=pt[t][r];return a!==void 0?a:ft[t]}var ni=10,de=class{type="command";execute(e,t){let n=(e.timeout??ni)*1e3,i=JSON.stringify(t);return new Promise(s=>{let a=[],l=[],d=false,u=spawn("sh",["-c",e.command],{cwd:t.cwd,env:{...process.env,...t.env}});u.stdout.on("data",g=>a.push(g)),u.stderr.on("data",g=>l.push(g)),u.stdin.on("error",()=>{}),u.stdin.write(i),u.stdin.end();let c=setTimeout(()=>{d||(d=true,u.kill("SIGTERM"),s({exitCode:1,stdout:"",stderr:"Hook timed out"}));},n);u.on("close",g=>{d||(d=true,clearTimeout(c),s({exitCode:g??1,stdout:Buffer.concat(a).toString("utf8"),stderr:Buffer.concat(l).toString("utf8")}));}),u.on("error",g=>{d||(d=true,clearTimeout(c),s({exitCode:1,stdout:"",stderr:g.message}));});})}};function ii(r){return r.replace(/\$([A-Za-z_][A-Za-z0-9_]*)/g,(e,t)=>{let o=process.env[t];return o!==void 0?o:e})}var ce=class{type="http";async execute(e,t){let n=(e.timeout??10)*1e3,i={"Content-Type":"application/json"};if(e.headers)for(let[s,a]of Object.entries(e.headers))i[s]=ii(a);try{let s=await fetch(e.url,{method:"POST",headers:i,body:JSON.stringify(t),signal:AbortSignal.timeout(n)});if(!s.ok)return {exitCode:1,stdout:"",stderr:`HTTP ${s.status} ${s.statusText}`};let a=await s.json();return a.ok?{exitCode:0,stdout:JSON.stringify(a),stderr:""}:{exitCode:2,stdout:"",stderr:a.reason??"Blocked by HTTP hook"}}catch(s){return {exitCode:1,stdout:"",stderr:s instanceof Error?s.message:String(s)}}}};function si(){return [new de,new ce]}function ai(r,e){if(!r.matcher)return true;if(!e)return false;try{return new RegExp(r.matcher).test(e)}catch{return r.matcher===e}}function li(r){if(r.tool_name)return r.tool_name;if(r.hook_event_name==="SubagentStart"||r.hook_event_name==="SubagentStop")return r.agent_type??r.agent_id;if(r.hook_event_name==="SessionEnd")return r.reason}async function Lo(r,e,t,o){if(!r)return {blocked:false,stdout:""};let n=r[e];if(!n||n.length===0)return {blocked:false,stdout:""};let i=o??si(),s=new Map;for(let d of i)s.set(d.type,d);let a=[],l=li(t);for(let d of n){if(!ai(d,l))continue;let u=d.env?{...t,env:{...t.env,...d.env}}:t;for(let c of d.hooks){let g=s.get(c.type);if(!g)continue;let m=await g.execute(c,u);if(m.exitCode===0&&m.stdout.trim()&&a.push(m.stdout.trim()),m.exitCode===2)return {blocked:true,reason:m.stderr||"Blocked by hook",stdout:a.join(`
|
|
9
|
-
`)}
|
|
10
|
-
`)}
|
|
8
|
+
[This response was interrupted by the user]`),J(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),$e(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear();}};var kn=100,Hn=50,we=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||kn,this.maxConversations=e.maxConversations||Hn,this.logger=O("ConversationHistory");}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new ue(this.maxMessagesPerConversation))),this.conversations.get(e)}hasConversation(e){return this.conversations.has(e)}removeConversation(e){let t=this.conversations.delete(e);return t&&this.logger.debug("Removed conversation",{conversationId:e}),t}clearAll(){let e=this.conversations.size;this.conversations.clear(),this.logger.debug("Cleared all conversations",{removedCount:e});}getStats(){let e=Array.from(this.conversations.keys()),t=Array.from(this.conversations.values()).reduce((o,n)=>o+n.getMessageCount(),0);return {totalConversations:this.conversations.size,conversationIds:e,totalMessages:t}}cleanupOldConversations(){if(this.conversations.size===0)return;let e=this.conversations.keys().next().value;e&&this.conversations.delete(e);}};var Ft=class extends Re{name="local";version="1.0.0";providers=new Map;config;constructor(e={}){super(),this.config={timeout:3e4,maxRetries:3,retryDelay:1e3,enableLogging:false,...e};}registerProvider(e,t){this.providers.set(e,t);}unregisterProvider(e){this.providers.delete(e);}getProvider(e){return this.providers.get(e)}async executeChat(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw new Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chat)throw new Error(`Provider "${e.provider}" does not implement chat method`);this.config.enableLogging&&this.logDebug(`Executing chat with provider: ${e.provider}, model: ${e.model}`);try{let o=await this.withRetry(async()=>await this.withTimeout(t.chat(e.messages,{...e.options,model:e.model,tools:e.tools}),this.config.timeout),this.config.maxRetries,this.config.retryDelay);if(o.role!=="assistant")throw new Error(`Expected assistant message, got ${o.role}`);return this.validateResponse(o),o}catch(o){let n=o instanceof Error?o:new Error(String(o));throw this.logError("Chat execution failed",n,{provider:e.provider,model:e.model}),n}}async*executeChatStream(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw new Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chatStream)throw new Error(`Provider "${e.provider}" does not implement chatStream method`);this.config.enableLogging&&this.logDebug(`Executing streaming chat with provider: ${e.provider}, model: ${e.model}`);try{let o=t.chatStream(e.messages,{...e.options,model:e.model,tools:e.tools});for await(let n of o)this.validateResponse(n),yield n;}catch(o){let n=o instanceof Error?o:new Error(String(o));throw this.logError("Streaming chat execution failed",n,{provider:e.provider,model:e.model}),n}}supportsTools(){for(let e of this.providers.values())if(e.supportsTools&&e.supportsTools())return true;return false}validateConfig(){try{if(this.config.timeout<=0||this.config.maxRetries<0||this.config.retryDelay<0)return !1;for(let e of this.providers.values())if(e.validateConfig&&!e.validateConfig())return !1;return !0}catch{return false}}async dispose(){this.config.enableLogging&&this.logDebug(`Disposing ${this.providers.size} providers`);let e=[];for(let t of this.providers.values())t.dispose&&e.push(t.dispose());await Promise.all(e),this.providers.clear();}};var Ae=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1;}incrementErrors(){this.totalErrors+=1;}getSnapshot(){return {totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Yr(r,e){if(r.maxListeners!==void 0&&r.maxListeners<0)throw new ee(`Invalid maxListeners option: ${r.maxListeners}. Must be a non-negative number.`,e,{maxListeners:r.maxListeners});if(r.buffer!==void 0&&r.buffer.maxSize!==void 0&&r.buffer.maxSize<0)throw new ee(`Invalid buffer.maxSize option: ${r.buffer.maxSize}. Must be a non-negative number.`,e,{bufferMaxSize:r.buffer.maxSize});if(r.buffer!==void 0&&r.buffer.flushInterval!==void 0&&r.buffer.flushInterval<0)throw new ee(`Invalid buffer.flushInterval option: ${r.buffer.flushInterval}. Must be a non-negative number.`,e,{bufferFlushInterval:r.buffer.flushInterval})}async function Zr(r,e,t,o,n){try{await r.listener(e);}catch(i){throw t.incrementErrors(),o&&n.error("Event handler error",{eventType:e.type,handlerId:r.id,error:i instanceof Error?i.message:String(i)}),i instanceof Error?i:new Error(String(i))}}async function Qr(r,e,t,o,n){let i=e.get(r.type);if(!i||i.length===0)return;let s=i.filter(a=>!a.filter||a.filter(r));if(s.length!==0){for(let a of s.filter(l=>l.once))o(r.type,a.id);if(t){await Promise.all(s.map(a=>n(a,r)));return}for(let a of s)await n(a,r);}}function Vn(r){let e={},t=0;for(let[o,n]of r)e[o]=n.length,t+=n.length;return {listenerCounts:e,totalListeners:t}}function eo(r,e,t,o){let{listenerCounts:n,totalListeners:i}=Vn(e),s=o.getSnapshot(),a=r.enabled,l=r.calls,d=r.errors;return {enabled:a,calls:l,errors:d,eventTypes:Array.from(e.keys()),listenerCounts:n,totalListeners:i,bufferedEvents:t,totalEmitted:s.totalEmitted,totalErrors:s.totalErrors}}function to(r,e,t,o,n,i,s){r.has(e)||r.set(e,[]);let a=r.get(e);if(a.length>=i)throw new ee(`Maximum listeners (${i}) exceeded for event type: ${e}`,s,{eventType:e,currentListeners:a.length});a.push({id:t,listener:o,once:n?.once??false,...n?.filter&&{filter:n.filter}});}function ro(r,e,t){let o=r.get(e);if(!o)return false;let n=typeof t=="string"?o.findIndex(i=>i.id===t):o.findIndex(i=>i.listener===t);return n!==-1?(o.splice(n,1),true):false}var Fn=100,Oe=class extends Qe{name="EventEmitterPlugin";version="1.0.0";pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=O("EventEmitterPlugin"),this.metrics=e.metrics??new Ae,Yr(e,this.name),this.pluginOptions={enabled:e.enabled??true,events:e.events??[x.AGENT_EXECUTION_START,x.AGENT_EXECUTION_COMPLETE,x.AGENT_EXECUTION_ERROR,x.TOOL_BEFORE_EXECUTE,x.TOOL_AFTER_EXECUTE,x.TOOL_SUCCESS,x.TOOL_ERROR],maxListeners:e.maxListeners??Fn,async:e.async??true,catchErrors:e.catchErrors??true,filters:e.filters??{},buffer:e.buffer??{enabled:false,maxSize:1e3,flushInterval:5e3},category:e.category??"event_processing",priority:e.priority??Pe.HIGH,moduleEvents:e.moduleEvents??[],subscribeToAllModuleEvents:e.subscribeToAllModuleEvents??false},this.pluginOptions.buffer.enabled&&(this.bufferTimer=setInterval(()=>{this.flushBuffer();},this.pluginOptions.buffer.flushInterval));}async beforeExecution(e){await this.emit(x.AGENT_EXECUTION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messageCount:e.messages?.length||0,...e.config&&{config:e.config}}});}async afterExecution(e,t){await this.emit(x.AGENT_EXECUTION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{duration:t?.duration,tokensUsed:t?.tokensUsed,toolsExecuted:t?.toolsExecuted}});}async beforeConversation(e){await this.emit(x.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(t=>({role:t.role,content:t.content||"",timestamp:t.timestamp?t.timestamp.toISOString():new Date().toISOString()})),config:e.config}});}async afterConversation(e,t){await this.emit(x.CONVERSATION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{response:t.content||t.response,tokensUsed:t.usage?.totalTokens||t.tokensUsed,toolCalls:t.toolCalls?.map(o=>({id:o.id||"",name:o.name||"",arguments:JSON.stringify(o.arguments||{}),result:String(o.result||"")}))}});}async beforeToolExecution(e,t){t&&await this.emit(x.TOOL_BEFORE_EXECUTE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.toolName,toolId:t.executionId,arguments:JSON.stringify(t.parameters??{})}});}async afterToolExecution(e,t){if(!(!t.toolCalls||t.toolCalls.length===0))for(let o of t.toolCalls){let n=o.result===null?x.TOOL_ERROR:x.TOOL_SUCCESS,i={executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:o.name||"",toolId:o.id||"",toolResult:o.result!==null?String(o.result):void 0,duration:t.duration,success:o.result!==null}};await this.emit(n,i),await this.emit(x.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(o.result||"")}});}}async onError(e,t){await this.emit(x.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:new Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}});}on(e,t,o){let n=`handler_${this.nextHandlerId++}`;return to(this.handlers,e,n,t,o,this.pluginOptions.maxListeners,this.name),n}once(e,t,o){return this.on(e,t,{once:true,...o&&{filter:o}})}off(e,t){return ro(this.handlers,e,t)}async emit(e,t={}){if(!this.pluginOptions.events.includes(e))return;let o={type:e,timestamp:new Date,...t},n=this.pluginOptions.filters[e];if(!(n&&!n(o))){if(this.metrics.incrementEmitted(),this.pluginOptions.buffer.enabled){this.eventBuffer.push(o),this.eventBuffer.length>=this.pluginOptions.buffer.maxSize&&this.flushBuffer();return}await this.processEvent(o);}}async processEvent(e){await Qr(e,this.handlers,this.pluginOptions.async,(t,o)=>this.off(t,o),(t,o)=>Zr(t,o,this.metrics,this.pluginOptions.catchErrors,this.logger));}async flushBuffer(){if(this.eventBuffer.length===0)return;let e=[...this.eventBuffer];this.eventBuffer=[];for(let t of e)await this.processEvent(t);}getStats(){return eo(super.getStats(),this.handlers,this.eventBuffer.length,this.metrics)}clearAllListeners(){this.handlers.clear();}async destroy(){this.bufferTimer&&clearInterval(this.bufferTimer),await this.flushBuffer(),this.clearAllListeners();}};function oo(){return [{type:"storage",category:"storage",layer:"infrastructure",capabilities:["data-persistence","data-retrieval"]},{type:"memory-storage",category:"storage",layer:"infrastructure",dependencies:["storage"],capabilities:["in-memory-storage","fast-access"]},{type:"file-storage",category:"storage",layer:"infrastructure",dependencies:["storage"],capabilities:["persistent-storage","file-system-access"]},{type:"text-processing",category:"processing",layer:"application",capabilities:["text-analysis","content-transformation"]},{type:"file-processing",category:"processing",layer:"application",dependencies:["storage"],capabilities:["file-parsing","content-extraction"]},{type:"api-integration",category:"integration",layer:"application",capabilities:["external-api-access","data-synchronization"]},{type:"database-integration",category:"integration",layer:"infrastructure",dependencies:["storage"],capabilities:["database-access","query-execution"]},{type:"rag",category:"capability",layer:"domain",dependencies:["storage","text-processing"],capabilities:["document-search","context-retrieval","semantic-search"]},{type:"speech-processing",category:"capability",layer:"domain",capabilities:["speech-to-text","text-to-speech","audio-processing"]},{type:"image-analysis",category:"capability",layer:"domain",capabilities:["image-recognition","visual-analysis","content-extraction"]}]}function no(r,e){let t=[],o=[];if((!r.type||r.type.trim()==="")&&t.push("Module type is required and cannot be empty"),r.category||t.push("Module category is required"),r.layer||t.push("Module layer is required"),r.type&&!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(r.type)&&t.push("Module type must start with a letter and contain only letters, numbers, hyphens, and underscores"),r.dependencies){for(let n of r.dependencies)(!n||n.trim()==="")&&t.push("Dependencies cannot be empty");r.dependencies.includes(r.type)&&t.push("Module cannot depend on itself");}if(r.capabilities)for(let n of r.capabilities)(!n||n.trim()==="")&&t.push("Capabilities cannot be empty");if(r.dependencies){let n=["infrastructure","core","application","domain","presentation"],i=n.indexOf(r.layer);for(let s of r.dependencies){let a=e(s);a&&n.indexOf(a.layer)>i&&o.push(`Module '${r.type}' (${r.layer}) depends on '${s}' (${a.layer}) which is in a higher layer`);}}return {valid:t.length===0,errors:t,warnings:o}}function io(r,e,t){let o=new Set,n=new Set,i=[],s=[],a=[];for(let d of r){let u=e(d);if(!u){a.push(d);continue}if(u.dependencies)for(let c of u.dependencies)!t(c)&&!a.includes(c)&&a.push(c);}let l=(d,u=[])=>{if(n.has(d)){let m=u.indexOf(d);s.push(u.slice(m).concat([d]));return}if(o.has(d))return;let c=e(d);if(!c)return;n.add(d);let g=[...u,d];if(c.dependencies)for(let m of c.dependencies)(r.includes(m)||t(m))&&l(m,g);n.delete(d),o.add(d),i.push(d);};for(let d of r)o.has(d)||l(d);return {resolved:a.length===0&&s.length===0,order:i,circularDependencies:s,missingDependencies:a}}function so(r,e){let t=[],o=[],n=new Map;for(let s of r){let a=e(s);a&&(n.has(a.layer)||n.set(a.layer,[]),n.get(a.layer).push(s));}let i=new Map;for(let s of r){let a=e(s);if(a?.capabilities)for(let l of a.capabilities)i.has(l)||i.set(l,[]),i.get(l).push(s);}for(let[s,a]of Array.from(i.entries()))if(a.length>1)for(let l=0;l<a.length;l++)for(let d=l+1;d<a.length;d++){let u=a[l],c=a[d];u&&c&&t.push({module1:u,module2:c,reason:`Both modules provide capability '${s}'`});}return t.length>0&&(o.push("Consider using only one module per capability"),o.push("Check if modules can be configured to avoid conflicts")),!n.has("infrastructure")&&r.length>1&&o.push("Consider adding infrastructure modules for better foundation"),{compatible:t.length===0,conflicts:t,suggestions:o}}function ao(r){let e={core:0,storage:0,processing:0,integration:0,interface:0,capability:0},t={infrastructure:0,core:0,application:0,domain:0,presentation:0},o=0,n=0;for(let i of r.values())e[i.category]++,t[i.layer]++,i.dependencies&&i.dependencies.length>0&&o++,i.capabilities&&i.capabilities.length>0&&n++;return {totalTypes:r.size,typesByCategory:e,typesByLayer:t,typesWithDependencies:o,typesWithCapabilities:n}}var st=class{registeredTypes=new Map;logger;constructor(){this.logger=O("ModuleDescriptorRegistry"),this.registerBuiltinTypes();}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new T(`Invalid module type descriptor: ${t.errors.join(", ")}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let o=this.registeredTypes.get(e.type);this.logger.warn("Overriding existing module type",{type:e.type,previousCategory:o?.category||"unknown",newCategory:e.category});}this.registeredTypes.set(e.type,e),this.logger.info("Module type registered",{type:e.type,category:e.category,layer:e.layer,dependencies:e.dependencies?.length||0,capabilities:e.capabilities?.length||0});}unregisterType(e){if(!this.registeredTypes.has(e))return false;let t=this.findDependentTypes(e);if(t.length>0)throw new T(`Cannot unregister module type '${e}' - it is required by: ${t.join(", ")}`,{type:e,dependentTypes:t});return this.registeredTypes.delete(e),this.logger.info("Module type unregistered",{type:e}),true}getType(e){return this.registeredTypes.get(e)}getAllTypes(){return Array.from(this.registeredTypes.values())}getTypesByCategory(e){return Array.from(this.registeredTypes.values()).filter(t=>t.category===e)}getTypesByLayer(e){return Array.from(this.registeredTypes.values()).filter(t=>t.layer===e)}hasType(e){return this.registeredTypes.has(e)}validateTypeDescriptor(e){return no(e,t=>this.getType(t))}resolveDependencies(e){return io(e,t=>this.getType(t),t=>this.hasType(t))}checkCompatibility(e){return so(e,t=>this.getType(t))}findDependentTypes(e){let t=[];for(let[o,n]of this.registeredTypes)n.dependencies?.includes(e)&&t.push(o);return t}registerBuiltinTypes(){for(let e of oo())this.registerType(e);this.logger.info("Built-in module types registered",{totalTypes:this.registeredTypes.size});}clearAllTypes(){this.registeredTypes.clear(),this.logger.info("All module types cleared");}getStats(){return ao(this.registeredTypes)}};function lo(r,e,t){if(!r.name||r.name.trim()==="")throw new T("Module name is required");if(!r.version||r.version.trim()==="")throw new T("Module version is required");let o=r.getModuleType(),n=e.validateTypeDescriptor(o);if(!n.valid)throw new T(`Invalid module type: ${n.errors.join(", ")}`,{moduleName:r.name,errors:n.errors});n.warnings.length>0&&t.warn("Module type validation warnings",{moduleName:r.name,warnings:n.warnings});}async function uo(r,e,t,o){let n=r.getModuleType();if(!n.dependencies||n.dependencies.length===0)return;for(let a of n.dependencies)if(!e.hasType(a))throw new T(`Module '${r.name}' depends on unregistered type '${a}'`,{moduleName:r.name,dependencyType:a});let i=new Set;for(let a of t.values())i.add(a.getModuleType().type);let s=[];for(let a of n.dependencies)i.has(a)||s.push(a);s.length>0&&o.warn("Module has unmet dependencies",{moduleName:r.name,missingDependencies:s});}function co(r,e){let t=e.get(r);if(!t)return [];let o=t.getModuleType().type,n=[];for(let[i,s]of e.entries())i!==r&&s.getModuleType().dependencies?.includes(o)&&n.push(i);return n}function go(r,e){let t={},o=0,n=0,i=0,s=0,a=0,l=0;for(let d of r.values()){let u=d.getModuleType().type;t[u]=(t[u]||0)+1,d.isInitialized()&&o++,d.isEnabled()&&n++;}for(let d of e.values())i+=d.totalExecutions,s+=d.successfulExecutions,a+=d.failedExecutions,l+=d.totalExecutionTime;return {totalModules:r.size,initializedModules:o,enabledModules:n,modulesByType:t,totalExecutions:i,totalSuccessfulExecutions:s,totalFailedExecutions:a,averageExecutionTime:i>0?l/i:0}}var mo={REGISTERED:"module.registered",UNREGISTERED:"module.unregistered"},at=class{modules=new Map;moduleOptions=new Map;moduleStatuses=new Map;moduleStats=new Map;registrationOrder=[];initializationOrder=[];typeRegistry;eventEmitter;logger;isDisposing=false;constructor(e,t){this.eventEmitter=e,this.typeRegistry=t??new st,this.logger=O("ModuleRegistry");}async registerModule(e,t={}){if(this.isDisposing)throw new T("Cannot register modules during disposal");if(lo(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new T(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==false&&await uo(e,this.typeRegistry,this.modules,this.logger),this.modules.set(e.name,e),this.moduleOptions.set(e.name,t.initOptions||{}),this.registrationOrder.push(e.name);let o=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:o.type,enabled:e.isEnabled(),initialized:false,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:o.dependencies||[],dependents:[]}),this.moduleStats.set(e.name,{totalExecutions:0,successfulExecutions:0,failedExecutions:0,averageExecutionTime:0,totalExecutionTime:0}),t.autoInitialize&&await this.initializeModule(e.name,t.initTimeout),this.eventEmitter&&await this.eventEmitter.emit(mo.REGISTERED,{data:{moduleName:e.name,moduleType:o.type},timestamp:new Date});}async unregisterModule(e){let t=this.modules.get(e);if(!t)return false;let o=co(e,this.modules);if(o.length>0)throw new T(`Cannot unregister module '${e}' - it is required by: ${o.join(", ")}`,{moduleName:e,dependents:o});t.isInitialized()&&t.dispose&&await t.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let n=this.registrationOrder.indexOf(e);n!==-1&&this.registrationOrder.splice(n,1);let i=this.initializationOrder.indexOf(e);return i!==-1&&this.initializationOrder.splice(i,1),this.eventEmitter&&await this.eventEmitter.emit(mo.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),true}async initializeModule(e,t){let o=this.modules.get(e);if(!o)throw new T(`Module '${e}' not found`);if(o.isInitialized())return;let n=this.moduleOptions.get(e),i=o.initialize(n,this.eventEmitter);if(t&&t>0){let a,l=new Promise((d,u)=>{a=setTimeout(()=>{u(new Error(`Module '${e}' initialization timed out after ${t}ms`));},t);});await Promise.race([i.then(d=>(clearTimeout(a),d)),l]);}else await i;let s=this.moduleStatuses.get(e);s&&(s.initialized=true,s.initializationTime=new Date),this.initializationOrder.includes(e)||this.initializationOrder.push(e);}async initializeAllModules(e){let t=Array.from(this.modules.keys());if(t.length===0)return;let o=t.map(i=>this.modules.get(i).getModuleType().type),n=this.typeRegistry.resolveDependencies(o);if(!n.resolved){let i=[];throw n.missingDependencies.length>0&&i.push(`Missing dependencies: ${n.missingDependencies.join(", ")}`),n.circularDependencies.length>0&&i.push(`Circular dependencies: ${n.circularDependencies.map(s=>s.join(" -> ")).join("; ")}`),new T(`Cannot initialize modules: ${i.join("; ")}`,{missingDependencies:n.missingDependencies,circularDependencies:n.circularDependencies.map(s=>s.join(" -> "))})}for(let i of n.order){let s=t.find(a=>this.modules.get(a).getModuleType().type===i);s&&await this.initializeModule(s,e);}}async executeModule(e,t){let o=this.modules.get(e);if(!o)throw new T(`Module '${e}' not found`);if(!o.isInitialized())throw new T(`Module '${e}' is not initialized`);if(!o.isEnabled())throw new T(`Module '${e}' is disabled`);let n=this.moduleStats.get(e),i=Date.now();try{if(!o.execute)throw new T(`Module '${e}' does not support execute()`);let s=await o.execute(t),a=Date.now()-i;n.totalExecutions++,n.successfulExecutions++,n.totalExecutionTime+=a,n.averageExecutionTime=n.totalExecutionTime/n.totalExecutions,n.lastExecutionTime=new Date;let l=this.moduleStatuses.get(e);return l&&(l.lastActivity=new Date),s}catch(s){let a=Date.now()-i;throw n.totalExecutions++,n.failedExecutions++,n.totalExecutionTime+=a,n.averageExecutionTime=n.totalExecutionTime/n.totalExecutions,n.lastExecutionTime=new Date,s}}getModule(e){return this.modules.get(e)}getModulesByType(e){return Array.from(this.modules.values()).filter(t=>t.getModuleType().type===e)}getAllModules(){return Array.from(this.modules.values())}getModuleNames(){return Array.from(this.modules.keys())}hasModule(e){return this.modules.has(e)}getModuleStatus(e){return this.moduleStatuses.get(e)}getAllModuleStatuses(){return Array.from(this.moduleStatuses.values())}getModuleStats(e){return this.moduleStats.get(e)}getAllModuleStats(){let e={};for(let[t,o]of this.moduleStats.entries())e[t]={...o};return e}async disposeAllModules(){this.isDisposing=true;let e=[...this.initializationOrder].reverse();for(let t of e){let o=this.modules.get(t);if(o&&o.isInitialized())try{o.dispose&&await o.dispose();let n=this.moduleStatuses.get(t);n&&(n.initialized=!1);}catch(n){this.logger.error("Failed to dispose module",{name:t,error:n instanceof Error?n.message:String(n)});}}this.initializationOrder=[],this.isDisposing=false;}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=false;}getRegistryStats(){return go(this.modules,this.moduleStats)}};var lt=class extends ne{providers=new Map;currentProvider;currentModel;constructor(){super();}async doInitialize(){S.debug("AIProviders initialized");}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),S.debug(`Closed AI provider: ${e}`);}catch(o){S.warn(`Failed to close AI provider ${e}`,{error:o instanceof Error?o.message:String(o)});}this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0,S.debug("AIProviders disposed");}addProvider(e,t){this.ensureInitialized();let o=j.validateProviderName(e);if(!o.isValid)throw new C(`Invalid provider name: ${o.errors.join(", ")}`);if(!t||typeof t!="object"||t===null||Array.isArray(t))throw new C("Provider must be a valid object instance");if(!t.name||typeof t.name!="string")throw new C("Provider must have a valid name");if(typeof t.chat!="function")throw new C("Provider must have a chat method");this.providers.has(e)&&S.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),S.debug(`AI provider "${e}" registered successfully`,{providerName:e,version:t.version,supportsStreaming:typeof t.chatStream=="function"});}removeProvider(e){if(this.ensureInitialized(),!this.providers.has(e)){S.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(o=>{S.warn(`Failed to close provider ${e}`,{error:o.message});}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,S.debug(`Cleared current provider selection after removing "${e}"`)),S.debug(`AI provider "${e}" removed successfully`);}getProvider(e){return this.ensureInitialized(),this.providers.get(e)}getProviders(){return this.ensureInitialized(),Object.fromEntries(this.providers)}setCurrentProvider(e,t){if(this.ensureInitialized(),!this.providers.get(e))throw new T(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,S.debug(`Current AI provider set to "${e}" with model "${t}"`);}getCurrentProvider(){if(this.ensureInitialized(),!(!this.currentProvider||!this.currentModel))return {provider:this.currentProvider,model:this.currentModel}}isConfigured(){return this.ensureInitialized(),!!(this.currentProvider&&this.currentModel&&this.providers.has(this.currentProvider))}getAvailableModels(e){if(this.ensureInitialized(),!this.providers.get(e))throw new T(`Provider "${e}" is not registered`);return S.warn("getAvailableModels() is deprecated. Models are now handled by providers internally."),[]}getCurrentProviderInstance(){if(!(!this.isConfigured()||!this.currentProvider))return this.providers.get(this.currentProvider)}getProviderNames(){return this.ensureInitialized(),Array.from(this.providers.keys())}getProvidersByPattern(e){this.ensureInitialized();let t=typeof e=="string"?new RegExp(e):e,o={};for(let[n,i]of this.providers)t.test(n)&&(o[n]=i);return o}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return false;let o=this.providers.get(t);return !!(o&&typeof o.chatStream=="function")}getProviderCount(){return this.ensureInitialized(),this.providers.size}};var De=class{tools=new Map;register(e){if(!e.schema?.name)throw new C("Tool must have a valid schema with name");let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&S.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),S.debug(`Tool "${t}" registered successfully`,{toolName:t,toolType:e.constructor.name,parameters:Object.keys(e.schema.parameters?.properties||{})});}unregister(e){if(!this.tools.has(e)){S.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),S.debug(`Tool "${e}" unregistered successfully`);}get(e){return this.tools.get(e)}getAll(){return Array.from(this.tools.values())}getSchemas(){let e=this.getAll();return S.debug("[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction",{count:e.length,tools:e.map(t=>({name:t.schema?.name??"unnamed",hasSchema:!!t.schema,schemaType:typeof t.schema,toolType:t.constructor?.name||"unknown"}))}),this.getAll().map(t=>t.schema)}has(e){return this.tools.has(e)}clear(){let e=this.tools.size;this.tools.clear(),S.debug(`Cleared ${e} tools from registry`);}getToolNames(){return Array.from(this.tools.keys())}getToolsByPattern(e){let t=typeof e=="string"?new RegExp(e):e;return this.getAll().filter(o=>t.test(o.schema.name))}size(){return this.tools.size}validateToolSchema(e){if(!e.name||typeof e.name!="string")throw new C("Tool schema must have a valid name");if(!e.description||typeof e.description!="string")throw new C("Tool schema must have a description");if(!e.parameters||typeof e.parameters!="object"||e.parameters===null||Array.isArray(e.parameters))throw new C("Tool schema must have parameters object");if(e.parameters.type!=="object")throw new C('Tool parameters type must be "object"');if(e.parameters.properties)for(let t of Object.keys(e.parameters.properties)){let o=e.parameters.properties[t];if(!o?.type)throw new C(`Parameter "${t}" must have a type`);if(!["string","number","boolean","array","object"].includes(o.type))throw new C(`Parameter "${t}" has invalid type "${o.type}"`)}if(e.parameters.required){let t=e.parameters.properties||{};for(let o of e.parameters.required)if(!t[o])throw new C(`Required parameter "${o}" is not defined in properties`)}}};var Ue=class{schema;fn;eventService;constructor(e,t){this.schema=e,this.fn=t,this.validateConstructorInputs();}getName(){return this.schema.name}setEventService(e){this.eventService=e;}async execute(e,t){let o=this.schema.name;if(!this.validate(e)){let a=this.getValidationErrors(e);throw new C(`Invalid parameters for tool "${o}": ${a.join(", ")}`)}let n=Date.now(),i;try{i=await this.fn(e,t);}catch(a){throw a instanceof $||a instanceof C?a:new $(`Function tool execution failed: ${a instanceof Error?a.message:String(a)}`,o,a instanceof Error?a:new Error(String(a)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let s=Date.now()-n;return {success:true,data:i,metadata:{executionTime:s,toolName:o,parameters:e}}}validate(e){return this.getValidationErrors(e).length===0}validateParameters(e){let t=this.getValidationErrors(e);return {isValid:t.length===0,errors:t}}getDescription(){return this.schema.description}getValidationErrors(e){let t=[],o=this.schema.parameters.required||[],n=this.schema.parameters.properties||{};for(let i of o)i in e||t.push(`Missing required parameter: ${i}`);for(let[i,s]of Object.entries(e)){let a=n[i];if(!a){t.push(`Unknown parameter: ${i}`);continue}let l=this.validateParameterType(i,s,a);l&&t.push(l);}return t}validateParameterType(e,t,o){switch(o.type){case "string":if(typeof t!="string")return `Parameter "${e}" must be a string, got ${typeof t}`;break;case "number":if(typeof t!="number"||isNaN(t))return `Parameter "${e}" must be a number, got ${typeof t}`;break;case "boolean":if(typeof t!="boolean")return `Parameter "${e}" must be a boolean, got ${typeof t}`;break;case "array":if(!Array.isArray(t))return `Parameter "${e}" must be an array, got ${typeof t}`;if(o.items)for(let i=0;i<t.length;i++){let s=this.validateParameterType(`${e}[${i}]`,t[i],o.items);if(s)return s}break;case "object":if(typeof t!="object"||t===null||Array.isArray(t))return `Parameter "${e}" must be an object, got ${typeof t}`;break}if(o.enum&&o.enum.length>0){let i=o.enum,s=false;for(let a of i)if(t===a){s=true;break}if(!s)return `Parameter "${e}" must be one of: ${i.join(", ")}, got ${t}`}}validateConstructorInputs(){if(!this.schema)throw new C("Tool schema is required");if(!this.fn||typeof this.fn!="function")throw new C("Tool function is required and must be a function");if(!this.schema.name)throw new C("Tool schema must have a name")}};var ut=class extends ne{registry;allowedTools;constructor(){super(),this.registry=new De;}async doInitialize(){S.debug("Tools initialized");}async doDispose(){this.registry.clear(),delete this.allowedTools,S.debug("Tools disposed");}addTool(e,t){this.ensureInitialized();let o=new Ue(e,t);this.registry.register(o),S.debug(`Tool "${e.name}" registered successfully`);}removeTool(e){this.ensureInitialized(),this.registry.unregister(e);}getTool(e){return this.ensureInitialized(),this.registry.get(e)}getToolSchema(e){return this.ensureInitialized(),this.registry.get(e)?.schema}getTools(){this.ensureInitialized();let e=this.registry.getSchemas();return this.allowedTools?e.filter(t=>this.allowedTools.includes(t.name)):e}async executeTool(e,t,o){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new $(`Tool "${e}" is not in the allowed tools list`,e);let n=this.registry.get(e);if(!n)throw new $(`Tool "${e}" is not registered`,e);let i;try{i=await n.execute(t,o);}catch(s){throw s instanceof Error?new $(s.message,e,s):new $(String(s),e)}if(!i.success)throw new $(i.error||"Tool execution failed",e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(i)});if(typeof i.data>"u")throw new $("Tool execution succeeded but returned no data",e);return i.data}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],S.debug(`Set allowed tools: ${e.join(", ")}`);}getAllowedTools(){return this.ensureInitialized(),this.allowedTools?[...this.allowedTools]:void 0}getRegistry(){return this.ensureInitialized(),this.registry}getToolCount(){return this.ensureInitialized(),this.registry.size()}};var Ne=class{templates=new Map;logger;constructor(){this.logger=O("AgentTemplates"),this.logger.info("AgentTemplates initialized");}registerTemplate(e){if(!e.id)throw new Error("Template must have an ID");this.templates.has(e.id)&&this.logger.warn(`Template "${e.id}" is already registered, overriding`),this.templates.set(e.id,e),this.logger.info(`Template "${e.id}" registered successfully`,{templateId:e.id,category:e.category,tags:e.tags});}unregisterTemplate(e){let t=this.templates.delete(e);return t?this.logger.info(`Template "${e}" unregistered`):this.logger.warn(`Attempted to unregister non-existent template "${e}"`),t}getTemplates(){return Array.from(this.templates.values())}getTemplate(e){return this.templates.get(e)}findTemplates(e){return this.getTemplates().filter(t=>!(e.category&&t.category!==e.category||e.tags&&e.tags.length>0&&!e.tags.some(n=>t.tags?.includes(n))||e.provider&&t.config.defaultModel?.provider!==e.provider||e.model&&t.config.defaultModel?.model!==e.model))}applyTemplate(e,t={}){let o=[],n=false,i={...e.config},s={...i,...t},a=d=>{d in t&&i[d]!==t[d]&&(n=true,i[d]!==void 0&&o.push(`Override: ${d} changed from "${String(i[d])}" to "${String(t[d])}"`));};t.name!==void 0&&a("name"),t.systemMessage!==void 0&&a("systemMessage");let l=s;return this.logger.debug("Template applied",{templateId:e.id,overridesCount:Object.keys(t).length,warningsCount:o.length,modified:n}),{config:l,template:e,warnings:o,modified:n}}hasTemplate(e){return this.templates.has(e)}getTemplateCount(){return this.templates.size}clearAll(){this.templates.clear(),this.logger.info("All templates cleared");}getStats(){let e=this.getTemplates(),t=[...new Set(e.map(s=>s.category).filter(s=>typeof s=="string"&&s.length>0))],o=[...new Set(e.flatMap(s=>s.tags||[]))],n=[...new Set(e.map(s=>s.config.defaultModel?.provider).filter(s=>typeof s=="string"&&s.length>0))],i=[...new Set(e.map(s=>s.config.defaultModel?.model).filter(s=>typeof s=="string"&&s.length>0))];return {totalTemplates:e.length,categories:t,tags:o,providers:n,models:i}}};var Bn=100,Xn=.7,Gn=36,Wn=8;function po(r){return {defaultModel:r.defaultModel||"gpt-4",defaultProvider:r.defaultProvider||"openai",maxConcurrentAgents:r.maxConcurrentAgents||Bn,defaultSystemMessage:r.defaultSystemMessage||"You are a helpful AI assistant.",strictValidation:r.strictValidation??true}}function fo(r,e){if(!r.aiProviders||r.aiProviders.length===0)throw new T("At least one AI provider must be specified in aiProviders array");let t=r.defaultModel||{provider:r.aiProviders[0]?.name||e.defaultProvider,model:e.defaultModel,temperature:.7,systemMessage:e.defaultSystemMessage};return {id:r.id||$t(),name:r.name||"Unnamed Agent",aiProviders:r.aiProviders,defaultModel:{provider:t.provider,model:t.model,temperature:t.temperature??Xn,...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.topP!==void 0&&{topP:t.topP},systemMessage:t.systemMessage||e.defaultSystemMessage},tools:r.tools||[],plugins:r.plugins||[],metadata:r.metadata||{},...r.logging&&{logging:r.logging},...r.conversationId&&{conversationId:r.conversationId},...r}}function $t(){let r=Date.now(),e=Math.random().toString(Gn).substring(2,Wn);return `agent_${r}_${e}`}function vo(r,e){return r.totalCreated++,r.activeCount++,e?r.fromTemplates++:r.customConfigured++,r.templateUsageRatio=r.totalCreated>0?r.fromTemplates/r.totalCreated:0,r}var _e=class{agentTemplates;initialized=false;logger;options;activeAgents;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new Ne,this.logger=O("AgentFactory"),this.options=po(e),this.activeAgents=new Map,this.creationStats={totalCreated:0,activeCount:0,fromTemplates:0,customConfigured:0,templateUsageRatio:0},this.lifecycleEvents=t,this.logger.debug("AgentFactory initialized",{maxConcurrentAgents:this.options.maxConcurrentAgents,strictValidation:this.options.strictValidation,hasDefaultModel:!!this.options.defaultModel,hasDefaultProvider:!!this.options.defaultProvider,hasLifecycleEvents:this.lifecycleEvents!==null});}async initialize(){this.initialized||(this.logger.debug("Initializing AgentFactory"),this.initialized=true,this.logger.debug("AgentFactory initialization completed"));}async createAgent(e,t,o=false){let n;try{if(this.activeAgents.size>=this.options.maxConcurrentAgents)throw new T(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);if(n=fo(t,this.options),this.options.strictValidation){let l=Ht(n);if(!l.isValid)throw new C(`Invalid agent configuration: ${l.errors.join(", ")}`)}this.lifecycleEvents.beforeCreate&&await this.lifecycleEvents.beforeCreate(n);let i=new e(n),s=i;typeof s.initialize=="function"&&await s.initialize();let a=$t();return this.activeAgents.set(a,i),vo(this.creationStats,o),this.lifecycleEvents.afterCreate&&await this.lifecycleEvents.afterCreate(i,n),this.logger.info("Agent created successfully",{agentId:a,model:n.defaultModel.model,provider:n.defaultModel.provider}),i}catch(i){let s=i instanceof Error?i:new Error(String(i));throw this.lifecycleEvents.onCreateError&&n&&await this.lifecycleEvents.onCreateError(s,n),this.logger.error("Failed to create agent",{error:s.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),s}}async createFromTemplate(e,t,o={}){let n=this.agentTemplates.getTemplate(t);if(!n)throw new T(`Template not found: ${t}`);let i=this.applyTemplate(n,o);i.warnings.length>0&&this.logger.warn("Template application warnings",{templateId:t,warnings:i.warnings});let s=await this.createAgent(e,i.config,true);return this.logger.info("Agent created from template",{templateId:t,modified:i.modified,warnings:i.warnings.length}),s}registerTemplate(e){this.agentTemplates.registerTemplate(e);}unregisterTemplate(e){return this.agentTemplates.unregisterTemplate(e)}getTemplates(){return this.agentTemplates.getTemplates()}getTemplate(e){return this.agentTemplates.getTemplate(e)}findTemplates(e){return this.agentTemplates.findTemplates(e)}applyTemplate(e,t={}){return this.agentTemplates.applyTemplate(e,t)}async destroyAgent(e){let t=this.activeAgents.get(e);if(!t)return false;try{let o=t;return typeof o.cleanup=="function"&&await o.cleanup(),this.activeAgents.delete(e),this.creationStats.activeCount--,this.lifecycleEvents.onDestroy&&await this.lifecycleEvents.onDestroy(e),this.logger.info("Agent destroyed",{agentId:e}),!0}catch(o){throw this.logger.error("Error destroying agent",{agentId:e,error:o instanceof Error?o.message:String(o)}),o}}getCreationStats(){return {...this.creationStats}}getActiveAgents(){return new Map(this.activeAgents)}validateConfiguration(e){return Ht(e)}};function Eo(r){if(!r.name)throw new T("Agent name is required",{component:"Robota"});if(!r.aiProviders||r.aiProviders.length===0)throw new T("At least one AI provider is required",{component:"Robota"});if(!r.defaultModel)throw new T("Default model configuration is required",{component:"Robota"});if(!r.defaultModel.provider||!r.defaultModel.model)throw new T("Default model must specify both provider and model",{component:"Robota"});let e=r.aiProviders.map(o=>o.name),t=e.filter((o,n)=>e.indexOf(o)!==n);if(t.length>0)throw new T(`Duplicate AI provider names: ${t.join(", ")}`,{component:"Robota",duplicates:t});if(!e.includes(r.defaultModel.provider))throw new T(`Default provider '${r.defaultModel.provider}' not found in AI providers list. Available: ${e.join(", ")}`,{component:"Robota",defaultProvider:r.defaultModel.provider,availableProviders:e})}var dt=class{constructor(e,t,o,n,i,s,a,l,d,u,c,g,m){this.logger=e;this.getAIProviders=t;this.getTools=o;this.getEventService=n;this.isReady=i;this.ensureReady=s;this.getConfig=a;this.setConfig=l;this.getConfigVersion=d;this.bumpConfigVersion=u;this.getConfigUpdatedAt=c;this.setConfigUpdatedAt=g;this.emitAgentEvent=m;}async updateTools(e){if(await this.ensureReady(),!Array.isArray(e))throw new T("updateTools: next must be an array of tools");this.getTools().getRegistry().clear();let o=[],n=this.getEventService();for(let a of e){n&&a.setEventService(n);let l=async(u,c)=>{if(!c)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await a.execute(u,c)).data};this.getTools().addTool(a.schema,l);let d=a.schema.name;typeof d=="string"&&d.length>0&&o.push(d);}let i=this.getConfig();i.tools=e,this.setConfig(i);let s=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(w.CONFIG_UPDATED,{parameters:{tools:o,systemMessage:i.defaultModel.systemMessage,provider:i.defaultModel.provider,model:i.defaultModel.model,temperature:i.defaultModel.temperature,maxTokens:i.defaultModel.maxTokens},metadata:{version:s}}),{version:s}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);throw new T("updateConfiguration: only tools patch is supported at this time")}async getConfiguration(){await this.ensureReady();let t=this.getTools().getTools().map(o=>({name:o.name,parameters:(()=>{let i=o.parameters?.properties;return i&&typeof i=="object"?Object.keys(i):void 0})()}));return {version:this.getConfigVersion(),tools:t,updatedAt:this.getConfigUpdatedAt(),metadata:void 0}}setModel(e){if(!e.provider||!e.model)throw new T("Both provider and model are required",{component:"Robota"});if(!this.isReady())throw new T("Agent must be fully initialized before changing model configuration",{component:"Robota"});let t=this.getAIProviders(),o=t.getProviderNames();if(!o.includes(e.provider))throw new T(`AI Provider '${e.provider}' not found. Available: ${o.join(", ")}`,{component:"Robota",provider:e.provider,availableProviders:o});t.setCurrentProvider(e.provider,e.model);let n=this.getConfig();this.setConfig({...n,defaultModel:{...n.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.systemMessage!==void 0&&{systemMessage:e.systemMessage}}}),this.logger.debug("Model configuration updated",e);}getModel(){if(!this.isReady())throw new T("Agent must be fully initialized before getting model configuration",{component:"Robota"});let e=this.getAIProviders().getCurrentProvider();if(!e)throw new T("No provider is currently set",{component:"Robota"});let t=this.getConfig();return {provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.systemMessage!==void 0&&{systemMessage:t.defaultModel.systemMessage}}}registerTool(e,t){if(t.hasTool(e.schema.name))throw new Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);let o=async(n,i)=>{if(!i)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await e.execute(n,i)).data};t.addTool(e.schema,o),this.logger.debug("Tool registered",{toolName:e.schema.name});}};var ct=class{constructor(e,t,o,n,i){this.agentName=e;this.moduleRegistry=t;this.logger=o;this.isReady=n;this.ensureReady=i;}async registerModule(e,t){await this.ensureReady(),await this.moduleRegistry.registerModule(e,{autoInitialize:t?.autoInitialize??true,validateDependencies:t?.validateDependencies??true}),this.logger.info("Module registered",{moduleName:e.name,moduleType:e.getModuleType().type});}async unregisterModule(e){if(!this.isReady())return false;let t=await this.moduleRegistry.unregisterModule(e);return t&&this.logger.info("Module unregistered",{moduleName:e}),t}getModule(e){if(this.isReady())return this.moduleRegistry.getModule(e)}getModulesByType(e){return this.isReady()?this.moduleRegistry.getModulesByType(e):[]}getModules(){return this.isReady()?this.moduleRegistry.getAllModules():[]}getModuleNames(){return this.isReady()?this.moduleRegistry.getModuleNames():[]}hasModule(e){return this.isReady()?this.moduleRegistry.hasModule(e):false}async executeModule(e,t){await this.ensureReady();let o={agentName:this.agentName,...t.executionId&&{executionId:t.executionId},...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}};return await this.moduleRegistry.executeModule(e,o)}getModuleStats(e){if(this.isReady())return this.moduleRegistry.getModuleStats(e)}};var gt=class{constructor(e,t,o){this.logger=e;this.isReady=t;this.getExecutionService=o;}addPlugin(e){let t=this.getExecutionService();if(!this.isReady()||!t)throw new T("Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.",{pluginName:e.name});t.registerPlugin(e),this.logger.debug("Plugin added",{pluginName:e.name});}removePlugin(e){let t=this.getExecutionService();if(!t)return false;let o=t.removePlugin(e);return o&&this.logger.debug("Plugin removed",{pluginName:e}),o}getPlugin(e){let t=this.getExecutionService();if(t)return t.getPlugin(e)}getPlugins(){let e=this.getExecutionService();return e?e.getPlugins():[]}getPluginNames(){let e=this.getExecutionService();return !this.isReady()||!e?[]:e.getPlugins().map(t=>t.name)}};function Io(r){let e=new ct(r.getName(),r.getModuleRegistry(),r.getLogger(),r.getIsFullyInitialized,r.ensureFullyInitialized),t=new gt(r.getLogger(),r.getIsFullyInitialized,r.getExecutionService),o=new dt(r.getLogger(),r.getAiProviders,r.getTools,r.getEventService,r.getIsFullyInitialized,r.ensureFullyInitialized,r.getConfig,n=>r.setConfig(n),r.getConfigVersion,r.incrementConfigVersion,r.getConfigUpdatedAt,n=>r.setConfigUpdatedAt(n),(n,i)=>r.emitAgentEvent(n,i));return {moduleManager:e,pluginManager:t,configManager:o}}var oe=class{build(e,t,o,n){let i=e.map(a=>({role:a.role,content:a.content})),s=JSON.stringify({messages:i,model:t,provider:o,temperature:n?.temperature,maxTokens:n?.maxTokens});return {hash:this.sha256(s),model:t,provider:o}}computeIntegrityHash(e){return this.sha256(e)}sha256(e){let t=new jn("SHA-256","TEXT");return t.update(e),t.getHash("HEX")}};var Le=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new oe;hits=0;misses=0;constructor(e){this.maxEntries=e.maxEntries,this.ttlMs=e.ttlMs;}get(e){let t=this.cache.get(e);if(!t){this.misses++;return}if(Date.now()-t.timestamp>this.ttlMs){this.cache.delete(e),this.removeFromAccessOrder(e),this.misses++;return}let o=this.keyBuilder.computeIntegrityHash(t.response);if(t.integrityHash!==o)throw this.cache.delete(e),this.removeFromAccessOrder(e),new Be(`Integrity check failed for cache entry ${e}`,{hash:e,expected:o,actual:t.integrityHash});return this.touchAccessOrder(e),this.hits++,t}set(e){let t=e.key.hash;!this.cache.has(t)&&this.cache.size>=this.maxEntries&&this.evictLRU(),this.cache.set(t,e),this.touchAccessOrder(t);}delete(e){return this.cache.has(e)?(this.cache.delete(e),this.removeFromAccessOrder(e),true):false}clear(){this.cache.clear(),this.accessOrder.length=0,this.hits=0,this.misses=0;}getStats(){let e=this.hits+this.misses;return {hits:this.hits,misses:this.misses,entries:this.cache.size,hitRate:e===0?0:this.hits/e}}touchAccessOrder(e){this.removeFromAccessOrder(e),this.accessOrder.push(e);}removeFromAccessOrder(e){let t=this.accessOrder.indexOf(e);t!==-1&&this.accessOrder.splice(t,1);}evictLRU(){let e=this.accessOrder.shift();e&&this.cache.delete(e);}};var ke=class{constructor(e,t){this.storage=e;this.keyBuilder=t;}lookup(e,t,o,n){let i=this.keyBuilder.build(e,t,o,n),s=this.storage.get(i.hash);return s?s.response:void 0}store(e,t,o,n,i){let s=this.keyBuilder.build(e,t,o,i);this.storage.set({key:s,response:n,timestamp:Date.now(),integrityHash:this.keyBuilder.computeIntegrityHash(n)});}getStats(){return this.storage.getStats()}};async function qn(r){let{config:e,aiProviders:t,tools:o,agentFactory:n,conversationHistory:i,moduleRegistry:s,eventEmitter:a,eventService:l,logger:d}=r;if(d.debug("Starting Robota initialization with independent managers"),await Promise.all([t.initialize(),o.initialize(),n.initialize()]),e.aiProviders)for(let g of e.aiProviders)t.addProvider(g.name,g);if(e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),e.modules){for(let g of e.modules)await s.registerModule(g,{autoInitialize:true,validateDependencies:true});d.debug("Modules registered and initialized",{moduleCount:e.modules.length,moduleNames:e.modules.map(g=>g.name)});}if(e.tools)for(let g of e.tools){g instanceof et&&l&&g.setEventService(l);let m=async(p,f)=>{if(!f)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await g.execute(p,f)).data};o.addTool(g.schema,m),d.debug("Tool registered during initialization",{toolName:g.schema.name});}let u;if(e.cache?.enabled){let g=new Le({maxEntries:e.cache.maxEntries,ttlMs:e.cache.ttlMs});u=new ke(g,new oe);}let c=new Ye(t,o,i,l,e.executionContext,u);if(e.plugins)for(let g of e.plugins)c.registerPlugin(g),g.subscribeToModuleEvents&&(await g.subscribeToModuleEvents(a),d.debug("Plugin subscribed to module events",{pluginName:g.name}));return d.debug("Robota initialization completed successfully with independent managers"),c}async function To(r){try{let e=await qn(r.ctx);r.setExecutionService(e),r.setFullyInitialized(!0);}catch(e){throw r.ctx.logger.error("Robota initialization failed",{error:e instanceof Error?e.message:String(e)}),e}}function Kn(r,e){return {conversationId:r.conversationId,...e.sessionId&&{sessionId:e.sessionId},...e.userId&&{userId:e.userId},...e.metadata&&{metadata:e.metadata},...e.signal&&{signal:e.signal},...e.onTextDelta&&{onTextDelta:e.onTextDelta},...e.onExecutionEvent&&{onExecutionEvent:e.onExecutionEvent},...e.maxExecutionRounds!==void 0&&{maxExecutionRounds:e.maxExecutionRounds}}}async function ho(r,e,t={}){try{r.emitAgentEvent(w.EXECUTION_START,{}),r.logger.debug("Starting Robota execution",{inputLength:e.length,conversationId:r.conversationId,sessionId:t.sessionId||"none",userId:t.userId||"none",hasMetadata:!!t.metadata});let o=r.getHistory(),n={...r.config},i=await r.getExecutionService().execute(e,o,n,Kn(r,t));if(r.logger.debug("Robota execution completed",{success:i.success,duration:i.duration,tokensUsed:i.tokensUsed,toolsExecuted:i.toolsExecuted,interrupted:i.interrupted}),i.interrupted)return r.emitAgentEvent(w.EXECUTION_COMPLETE,{}),i.response;if(!i.success&&i.error)throw i.error;return r.emitAgentEvent(w.EXECUTION_COMPLETE,{}),i.response}catch(o){throw r.logger.error("Robota execution failed",{error:o instanceof Error?o.message:String(o),conversationId:r.conversationId}),r.emitAgentEvent(w.EXECUTION_ERROR,{error:o instanceof Error?o.message:String(o)}),o}}async function*yo(r,e,t={}){try{r.emitAgentEvent(w.EXECUTION_START,{}),r.logger.debug("Starting Robota streaming execution",{inputLength:e.length,conversationId:r.conversationId,sessionId:t.sessionId||"none",userId:t.userId||"none",hasMetadata:!!t.metadata});let o=r.getHistory(),n={...r.config},i=r.getExecutionService().executeStream(e,o,n,{conversationId:r.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}});for await(let s of i)yield s.chunk;}catch(o){throw r.logger.error("Robota streaming execution failed",{error:o instanceof Error?o.message:String(o),conversationId:r.conversationId}),r.emitAgentEvent(w.EXECUTION_ERROR,{error:o instanceof Error?o.message:String(o)}),o}finally{r.emitAgentEvent(w.EXECUTION_COMPLETE,{});}}function xo(r){let e=r.isFullyInitialized?r.aiProviders.getProviderNames():[],t=r.isFullyInitialized?r.aiProviders.getCurrentProvider():null,o=t?t.provider:null,n=r.isFullyInitialized?r.tools.getTools().map(u=>u.name):[],i=r.getPluginNames(),s=r.getModuleNames(),a=r.getHistory(),l=Date.now()-r.startTime,d={user:0,assistant:0,system:0,tool:0};for(let u of a)u.role in d&&d[u.role]++;return {name:r.name,version:r.version,conversationId:r.conversationId,providers:e,currentProvider:o,tools:n,plugins:i,modules:s,historyLength:a.length,historyStats:{userMessages:d.user,assistantMessages:d.assistant,systemMessages:d.system,toolMessages:d.tool},uptime:l}}async function Mo(r){r.logger.debug("Destroying Robota instance",{name:r.name});try{if(r.isFullyInitialized&&r.moduleRegistry&&(await r.moduleRegistry.disposeAllModules(),r.logger.debug("All modules disposed")),r.executionService){let e=r.executionService.getPlugins();for(let t of e)t.unsubscribeFromModuleEvents&&r.eventEmitter&&await t.unsubscribeFromModuleEvents(r.eventEmitter);r.logger.debug("ExecutionService plugins cleaned up");}r.moduleRegistry&&(r.moduleRegistry.clearAllModules(),r.logger.debug("ModuleRegistry cleared")),r.eventEmitter&&(await r.eventEmitter.destroy(),r.logger.debug("EventEmitter disposed")),r.resetState(),r.logger.info("Robota instance destroyed successfully",{name:r.name});}catch(e){throw r.logger.error("Error during Robota destruction",{error:e instanceof Error?e.message:String(e)}),e}}function bo(r,e){return r.getConversationStore(e).getMessages().map(o=>({id:o.id,role:o.role,content:o.content,state:o.state,timestamp:o.timestamp,metadata:o.metadata,...o.role==="assistant"&&"toolCalls"in o?{toolCalls:o.toolCalls}:{},...o.role==="tool"&&"toolCallId"in o?{toolCallId:o.toolCallId}:{},...o.role==="tool"&&"name"in o?{name:o.name}:{}}))}function Co(r,e){return r.getConversationStore(e).getHistory()}function Po(r,e,t){r.getConversationStore(e).addEntry(t);}function Ro(r,e){r.getConversationStore(e).clear();}function So(r,e,t,o,n){let i=r.getConversationStore(e);t==="tool"&&n?.toolCallId?i.addToolMessageWithId(o,n.toolCallId,n.name??"unknown"):t==="assistant"?i.addAssistantMessage(o,[]):t==="system"?i.addSystemMessage(o):i.addUserMessage(o);}function wo(r,e){let t=Array.isArray(r.tools)?r.tools.map(o=>{let n=o?.schema?.name;if(typeof n=="string"&&n.length>0)return n;let i=o?.name;return typeof i=="string"&&i.length>0?i:""}).filter(o=>typeof o=="string"&&o.length>0):[];e(w.CREATED,{parameters:{tools:t,systemMessage:r.defaultModel.systemMessage,provider:r.defaultModel.provider,model:r.defaultModel.model,temperature:r.defaultModel.temperature,maxTokens:r.defaultModel.maxTokens}});}function Ao(r,e,t,o,n){re(r)||r.emit(o,{timestamp:new Date,...n},{ownerType:Y,ownerId:e,ownerPath:zt(e,t)});}function Oo(){return new Oe({enabled:true,events:[x.MODULE_INITIALIZE_START,x.MODULE_INITIALIZE_COMPLETE,x.MODULE_INITIALIZE_ERROR,x.MODULE_EXECUTION_START,x.MODULE_EXECUTION_COMPLETE,x.MODULE_EXECUTION_ERROR,x.MODULE_DISPOSE_START,x.MODULE_DISPOSE_COMPLETE,x.MODULE_DISPOSE_ERROR]})}function zt(r,e){return [...e?.ownerPath?.length?e.ownerPath.map(o=>({...o})):[],{type:"agent",id:r}]}var Jn=36,Yn=9,Bt=class extends Fe{name;version="1.0.0";aiProviders;tools;agentFactory;conversationHistory;moduleRegistry;eventEmitter;executionService;eventService;agentEventService;config;conversationId;logger;initializationPromise;isFullyInitialized=false;startTime;configVersion=1;configUpdatedAt=Date.now();moduleManager;pluginManager;configManager;constructor(e){super(),this.name=e.name,this.config=e,this.conversationId=e.conversationId||`conv_${Date.now()}_${Math.random().toString(Jn).substr(2,Yn)}`,this.logger=O("Robota"),this.startTime=Date.now(),e.logging&&(e.logging.level&&It(e.logging.level),e.logging.enabled===false&&It("silent")),Eo(e),this.aiProviders=new lt,this.tools=new ut,this.agentFactory=new _e,this.conversationHistory=new we,this.eventEmitter=Oo(),this.moduleRegistry=new at(this.eventEmitter),this.eventService=e.eventService||ye,this.agentEventService=H(this.eventService,{ownerType:"agent",ownerId:this.conversationId,ownerPath:zt(this.conversationId,this.config.executionContext)});let t=Io({getName:()=>this.name,getModuleRegistry:()=>this.moduleRegistry,getLogger:()=>this.logger,getIsFullyInitialized:()=>this.isFullyInitialized,ensureFullyInitialized:()=>this.ensureFullyInitialized(),getExecutionService:()=>this.executionService,getAiProviders:()=>this.aiProviders,getTools:()=>this.tools,getEventService:()=>this.eventService,getConfig:()=>this.config,setConfig:o=>{this.config=o;},getConfigVersion:()=>this.configVersion,incrementConfigVersion:()=>++this.configVersion,getConfigUpdatedAt:()=>this.configUpdatedAt,setConfigUpdatedAt:o=>{this.configUpdatedAt=o;},emitAgentEvent:(o,n)=>this.emitAgentEvent(o,n)});this.moduleManager=t.moduleManager,this.pluginManager=t.pluginManager,this.configManager=t.configManager,wo(this.config,(o,n)=>this.emitAgentEvent(o,n));}async run(e,t={}){return await this.ensureFullyInitialized(),ho(this.executionDeps(),e,t)}async*runStream(e,t={}){await this.ensureFullyInitialized(),yield*yo(this.executionDeps(),e,t);}executionDeps(){return {conversationId:this.conversationId,config:this.config,logger:this.logger,getHistory:()=>this.getHistory(),getExecutionService:()=>this.executionService,emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)}}getHistory(){return bo(this.conversationHistory,this.conversationId)}getFullHistory(){return Co(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Po(this.conversationHistory,this.conversationId,e);}clearHistory(){Ro(this.conversationHistory,this.conversationId);}injectMessage(e,t,o){So(this.conversationHistory,this.conversationId,e,t,o);}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e);}getModel(){return this.configManager.getModel()}registerTool(e){this.configManager.registerTool(e,this.tools);}unregisterTool(e){this.tools.removeTool(e);}getConfig(){return {...this.config}}addPlugin(e){this.pluginManager.addPlugin(e);}removePlugin(e){return this.pluginManager.removePlugin(e)}getPlugin(e){return this.pluginManager.getPlugin(e)}getPlugins(){return this.pluginManager.getPlugins()}getPluginNames(){return this.pluginManager.getPluginNames()}async registerModule(e,t){return this.moduleManager.registerModule(e,t)}async unregisterModule(e){return this.moduleManager.unregisterModule(e)}getModule(e){return this.moduleManager.getModule(e)}getModulesByType(e){return this.moduleManager.getModulesByType(e)}getModules(){return this.moduleManager.getModules()}getModuleNames(){return this.moduleManager.getModuleNames()}hasModule(e){return this.moduleManager.hasModule(e)}async executeModule(e,t){return this.moduleManager.executeModule(e,t)}getModuleStats(e){return this.moduleManager.getModuleStats(e)}getStats(){return xo({name:this.name,version:this.version,conversationId:this.conversationId,startTime:this.startTime,isFullyInitialized:this.isFullyInitialized,aiProviders:this.aiProviders,tools:this.tools,getPluginNames:()=>this.getPluginNames(),getModuleNames:()=>this.getModuleNames(),getHistory:()=>this.getHistory()})}async destroy(){await Mo({name:this.name,isFullyInitialized:this.isFullyInitialized,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,executionService:this.executionService,logger:this.logger,resetState:()=>{this.isFullyInitialized=false,this.initializationPromise=void 0;}});}async initialize(){await this.ensureFullyInitialized();}async ensureFullyInitialized(){this.isFullyInitialized||(this.initializationPromise||(this.initializationPromise=this.doAsyncInit()),await this.initializationPromise);}doAsyncInit(){return To({ctx:{config:this.config,aiProviders:this.aiProviders,tools:this.tools,agentFactory:this.agentFactory,conversationHistory:this.conversationHistory,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,eventService:this.eventService,logger:this.logger},setExecutionService:e=>{this.executionService=e;},setFullyInitialized:e=>{this.isFullyInitialized=e;}})}emitAgentEvent(e,t){Ao(this.agentEventService,this.conversationId,this.config.executionContext,e,t);}};var Xt=class{store;listener;sequenceId=0;constructor(e,t){this.store=e,this.listener=(o,n,i)=>{if(!i?.ownerPath?.length)throw new Error(`[HISTORY-MODULE] Missing ownerPath for ${o}`);let s={eventName:o,sequenceId:this.nextSequenceId(),timestamp:n.timestamp,eventData:n,context:i};this.store.append(s);},t.subscribe(this.listener);}append(e){this.store.append(e);}read(e,t){return this.store.read(e,t)}readStream(e,t){return this.store.readStream(e,t)}getSnapshot(){return this.store.getSnapshot?.()}detach(e){e.unsubscribe(this.listener);}nextSequenceId(){return this.sequenceId+=1,this.sequenceId}};function L(r){if(!(!r||typeof r!="object"||Array.isArray(r)||r instanceof Date))return r}function Gt(r){return typeof r=="string"?r.length:0}var Zn=36,Qn=9,mt=class{config;methodConfigs=new Map;constructor(e){this.config=e;}configureMethod(e,t){return this.methodConfigs.set(e,t),this}configureStandardMethods(){return this.config.sourceType==="agent"&&(this.configureMethod("run",{startEvent:w.EXECUTION_START,completeEvent:w.EXECUTION_COMPLETE,errorEvent:w.EXECUTION_ERROR,extractMetadata:(e,t,o)=>({inputLength:Gt(o[0]),conversationId:e.conversationId,options:L(o[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod("runStream",{startEvent:w.EXECUTION_START,completeEvent:w.EXECUTION_COMPLETE,errorEvent:w.EXECUTION_ERROR,extractMetadata:(e,t,o)=>({inputLength:Gt(o[0]),conversationId:e.conversationId,streaming:true,options:L(o[1])||{}})})),this.config.sourceType==="team"&&(this.configureMethod("assignTask",{startEvent:xe.ASSIGNED,completeEvent:xe.COMPLETED,errorEvent:R.ERROR,extractMetadata:(e,t,o)=>{let n=L(o[0]);return {taskDescription:n?.jobDescription,agentTemplate:n?.agentTemplate,priority:n?.priority,allowFurtherDelegation:n?.allowFurtherDelegation}},extractResult:e=>({result:L(e)?.result,agentId:L(e)?.agentId,metadata:L(e)?.metadata})}),this.configureMethod("execute",{startEvent:R.START,completeEvent:R.COMPLETE,errorEvent:R.ERROR,extractMetadata:(e,t,o)=>({taskDescription:o[0],teamMode:true}),extractResult:e=>({response:e})})),this.config.sourceType==="tool"&&this.configureMethod("execute",{startEvent:_.CALL_START,completeEvent:_.CALL_COMPLETE,errorEvent:_.CALL_ERROR,extractMetadata:(e,t,o)=>({toolName:L(e.schema)?.name||e.constructor.name,parameters:o[0],parametersCount:L(o[0])?Object.keys(L(o[0])||{}).length:0,context:o[1]}),extractResult:e=>({result:typeof L(e)?.data=="string"?L(e)?.data||"":JSON.stringify(L(e)?.data),success:L(e)?.success})}),this}wrap(e){return new Proxy(e,{get:(t,o,n)=>{let i=Reflect.get(t,o,n);if(typeof o!="string")return i;let s=o;if(typeof i=="function"&&this.methodConfigs.has(s)){let a=this.methodConfigs.get(s);return async(...l)=>{let d=Date.now(),u=this.generateExecutionId(),c=t;try{if(a.startEvent){let p=a.extractMetadata?.(c,s,l)||{};this.emitEvent(a.startEvent,{timestamp:new Date,metadata:{...p,executionId:u,methodName:s,phase:"start"}});}let g=await i.apply(t,l),m=Date.now()-d;if(a.completeEvent){let p=a.extractResult?.(g)||{},f=a.extractMetadata?.(c,s,l)||{};this.emitEvent(a.completeEvent,{timestamp:new Date,...p,metadata:{...f,executionId:u,methodName:s,duration:m,phase:"complete",success:!0}});}return g}catch(g){let m=Date.now()-d;if(a.errorEvent){let p=a.extractMetadata?.(c,s,l)||{};this.emitEvent(a.errorEvent,{timestamp:new Date,error:g instanceof Error?g.message:String(g),metadata:{...p,executionId:u,methodName:s,duration:m,phase:"error",errorName:g instanceof Error?g.name:"UnknownError",success:false}});}throw g}}}return i}})}emitEvent(e,t){let o={emitterSourceType:this.config.sourceType,emitterSourceId:this.config.sourceId},n={timestamp:new Date,...t.metadata?{metadata:{...o,...t.metadata}}:{metadata:o},...t};this.config.eventService.emit(e,n);}generateExecutionId(){return `${this.config.sourceType}-${this.config.sourceId}-${Date.now()}-${Math.random().toString(Zn).substr(2,Qn)}`}};function Do(r,e){let t=new mt(e);return t.configureStandardMethods(),t.wrap(r)}function ei(r,e,t){return function(o){return Do(o,{eventService:r,sourceType:e,sourceId:t})}}var Uo={safe:"plan",moderate:"default",full:"acceptEdits"};var pt={plan:{Bash:"deny",Read:"auto",Write:"deny",Edit:"deny",Glob:"auto",Grep:"auto",WebFetch:"auto",WebSearch:"auto"},default:{Bash:"approve",Read:"auto",Write:"approve",Edit:"approve",Glob:"auto",Grep:"auto",WebFetch:"auto",WebSearch:"auto"},acceptEdits:{Bash:"approve",Read:"auto",Write:"auto",Edit:"auto",Glob:"auto",Grep:"auto",WebFetch:"auto",WebSearch:"auto"},bypassPermissions:{Bash:"auto",Read:"auto",Write:"auto",Edit:"auto",Glob:"auto",Grep:"auto",WebFetch:"auto",WebSearch:"auto"}},ft={plan:"deny",default:"approve",acceptEdits:"approve",bypassPermissions:"auto"};function ti(r){let e=r.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,".+").replace(/\*/g,".*");return new RegExp(`^${e}$`)}function ri(r){let e=r.indexOf("(");if(e===-1)return {toolName:r.trim(),argPattern:void 0};let t=r.slice(0,e).trim(),o=r.slice(e+1,r.lastIndexOf(")")).trim();return {toolName:t,argPattern:o}}function oi(r,e){switch(r){case "Bash":return typeof e.command=="string"?e.command:void 0;case "Read":case "Write":case "Edit":return typeof e.filePath=="string"?e.filePath:void 0;case "Glob":case "Grep":return typeof e.pattern=="string"?e.pattern:void 0;default:return}}function No(r,e,t){let o=ri(t);if(o.toolName!==r)return false;if(o.argPattern===void 0)return true;let n=oi(r,e);return n===void 0?false:ti(o.argPattern).test(n)}function _o(r,e,t,o={}){let{allow:n=[],deny:i=[]}=o;for(let l of i)if(No(r,e,l))return "deny";for(let l of n)if(No(r,e,l))return "auto";let a=pt[t][r];return a!==void 0?a:ft[t]}var ii=600,de=class{type="command";execute(e,t){let n=(e.timeout??ii)*1e3,i=JSON.stringify(t);return new Promise(s=>{let a=[],l=[],d=false,u=spawn("sh",["-c",e.command],{cwd:t.cwd,env:{...process.env,...t.env}});u.stdout.on("data",g=>a.push(g)),u.stderr.on("data",g=>l.push(g)),u.stdin.on("error",()=>{}),u.stdin.write(i),u.stdin.end();let c=setTimeout(()=>{d||(d=true,u.kill("SIGTERM"),s({exitCode:1,stdout:"",stderr:"Hook timed out"}));},n);u.on("close",g=>{d||(d=true,clearTimeout(c),s({exitCode:g??1,stdout:Buffer.concat(a).toString("utf8"),stderr:Buffer.concat(l).toString("utf8")}));}),u.on("error",g=>{d||(d=true,clearTimeout(c),s({exitCode:1,stdout:"",stderr:g.message}));});})}};function si(r){return r.replace(/\$([A-Za-z_][A-Za-z0-9_]*)/g,(e,t)=>{let o=process.env[t];return o!==void 0?o:e})}var ce=class{type="http";async execute(e,t){let n=(e.timeout??10)*1e3,i={"Content-Type":"application/json"};if(e.headers)for(let[s,a]of Object.entries(e.headers))i[s]=si(a);try{let s=await fetch(e.url,{method:"POST",headers:i,body:JSON.stringify(t),signal:AbortSignal.timeout(n)});if(!s.ok)return {exitCode:1,stdout:"",stderr:`HTTP ${s.status} ${s.statusText}`};let a=await s.json();return a.ok?{exitCode:0,stdout:JSON.stringify(a),stderr:""}:{exitCode:2,stdout:"",stderr:a.reason??"Blocked by HTTP hook"}}catch(s){return {exitCode:1,stdout:"",stderr:s instanceof Error?s.message:String(s)}}}};function ai(){return [new de,new ce]}var Lo={deny:3,defer:2,ask:1,allow:0};function li(r){let e=r.trim();if(!e.startsWith("{"))return null;try{return JSON.parse(e)}catch{return null}}function ui(r,e){if(!r.matcher)return true;if(!e)return false;try{return new RegExp(r.matcher).test(e)}catch{return r.matcher===e}}function di(r){if(r.tool_name)return r.tool_name;if(r.hook_event_name==="SubagentStart"||r.hook_event_name==="SubagentStop")return r.agent_type??r.agent_id;if(r.hook_event_name==="SessionEnd")return r.reason}async function ko(r,e,t,o){if(!r)return {blocked:false,stdout:""};let n=r[e];if(!n||n.length===0)return {blocked:false,stdout:""};let i=o??ai(),s=new Map;for(let m of i)s.set(m.type,m);let a=[],l=di(t),d=-1,u,c;for(let m of n){if(!ui(m,l))continue;let p=m.env?{...t,env:{...t.env,...m.env}}:t;for(let f of m.hooks){let y=s.get(f.type);if(!y)continue;let I=await y.execute(f,p);if(I.exitCode===2)return {blocked:true,reason:I.stderr||"Blocked by hook",stdout:a.join(`
|
|
9
|
+
`)};if(I.exitCode!==0)continue;let h=li(I.stdout);if(h!==null){if(h.continue===false)return {blocked:true,reason:typeof h.stopReason=="string"?h.stopReason:"Blocked by hook (continue: false)",stdout:a.join(`
|
|
10
|
+
`)};if(e==="UserPromptSubmit"&&h.decision==="block"){let M=h.hookSpecificOutput,b=M!==null&&typeof M=="object"&&"additionalContext"in M?String(M.additionalContext):void 0;return {blocked:true,reason:"Blocked by hook (decision: block)",stdout:b?[...a,b].join(`
|
|
11
|
+
`):a.join(`
|
|
12
|
+
`)}}if(e==="UserPromptSubmit"){let M=h.hookSpecificOutput;if(M!==null&&typeof M=="object"&&"additionalContext"in M){let b=String(M.additionalContext);b&&a.push(b);}}if(e==="PreToolUse"){let M=h.hookSpecificOutput;if(M!==null&&typeof M=="object"){let b=M,A=b.permissionDecision;if(typeof A=="string"&&A in Lo){let k=Lo[A];if(k>d&&(d=k,u=A),A==="deny")return {blocked:true,reason:"Blocked by hook (permissionDecision: deny)",stdout:a.join(`
|
|
13
|
+
`),permissionDecision:"deny"};k>=d&&b.updatedInput!==void 0&&(c=b.updatedInput);}}}typeof h.systemMessage=="string"&&h.systemMessage&&a.push(h.systemMessage);}else I.stdout.trim()&&a.push(I.stdout.trim());}}let g={blocked:false,stdout:a.join(`
|
|
14
|
+
`)};return u!==void 0&&(g.permissionDecision=u),c!==void 0&&(g.updatedInput=c),g}export{w as AGENT_EVENTS,Y as AGENT_EVENT_PREFIX,Tt as AbstractAIProvider,Fe as AbstractAgent,te as AbstractEventService,Re as AbstractExecutor,ne as AbstractManager,Qe as AbstractPlugin,et as AbstractTool,_e as AgentFactory,Ne as AgentTemplates,sr as AuthenticationError,Ce as CLAUDE_MODELS,Rt as CONTEXT_ESTIMATE_CHARS_PER_TOKEN,Be as CacheIntegrityError,dr as CircuitBreakerOpenError,T as ConfigurationError,Et as ConsoleLogger,we as ConversationHistory,ue as ConversationStore,ye as DEFAULT_ABSTRACT_EVENT_SERVICE,wt as DEFAULT_CONTEXT_WINDOW,At as DEFAULT_MAX_OUTPUT,ie as DefaultEventService,x as EVENT_EMITTER_EVENTS,R as EXECUTION_EVENTS,z as EXECUTION_EVENT_PREFIX,gr as ErrorUtils,Oe as EventEmitterPlugin,Xt as EventHistoryModule,mt as ExecutionProxy,Ae as InMemoryEventEmitterMetrics,Ft as LocalExecutor,pt as MODE_POLICY,Jr as MessageConverter,ur as ModelNotAvailableError,lr as NetworkError,Ge as ObservableEventService,kt as PluginCategory,ee as PluginError,Pe as PluginPriority,ht as ProviderError,ar as RateLimitError,Bt as Robota,D as RobotaError,B as SilentLogger,cr as StorageError,he as StructuredEventService,xe as TASK_EVENTS,Tr as TASK_EVENT_PREFIX,_ as TOOL_EVENTS,W as TOOL_EVENT_PREFIX,Uo as TRUST_TO_MODE,$ as ToolExecutionError,pe as TypeUtils,ft as UNKNOWN_TOOL_FALLBACK,hr as USER_EVENTS,yr as USER_EVENT_PREFIX,C as ValidationError,j as Validator,He as assertProviderNativeWebToolsAvailable,Ir as bindEventServiceOwner,H as bindWithOwnerPath,ve as chatEntryToMessage,_t as collectAssistantUsageMetadata,yt as composeEventName,ot as createAssistantMessage,fe as createDefaultProviderCapabilities,Do as createExecutionProxy,O as createLogger,nt as createSystemMessage,it as createToolMessage,rt as createUserMessage,ae as estimateContextTokensFromMessages,St as estimateSerializedContextTokens,_o as evaluatePermission,Jt as findProviderDefinition,Yt as formatSupportedProviderTypes,Vr as formatTokenCount,Ci as getGlobalLogLevel,Bo as getMessagesForAPI,le as getModelContextWindow,kr as getModelMaxOutput,Hr as getModelName,Kt as getProviderCapabilities,Zt as getProviderCredentialRequirement,Fo as getToolEstimatedDuration,$o as getToolExecutionSteps,J as isAssistantMessage,Q as isChatEntry,re as isDefaultEventService,Qt as isImageGenerationProvider,Ve as isProgressReportingTool,Ee as isSystemMessage,$e as isToolMessage,tr as isUserMessage,er as isVideoGenerationProvider,S as logger,vt as messageToHistoryEntry,se as readTokenUsageFromMessage,Pt as readTokenUsageFromMetadata,ko as runHooks,It as setGlobalLogLevel,zo as setToolProgressCallback,Ua as startPeriodicTask,Na as stopPeriodicTask,Ht as validateAgentConfig,Oa as validateApiKey,Aa as validateModelName,wa as validateProviderName,Sa as validateUserInput,ei as withEventEmission};
|