@robota-sdk/agent-core 3.0.0-beta.53 → 3.0.0-beta.55
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 +16 -0
- package/dist/browser/index.d.ts +114 -45
- package/dist/browser/index.js +7 -7
- package/dist/node/index.cjs +7 -7
- package/dist/node/index.d.cts +114 -45
- package/dist/node/index.d.ts +114 -45
- package/dist/node/index.js +7 -7
- package/package.json +5 -2
package/dist/browser/index.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {randomUUID}from'crypto';import qo from'jssha';import {spawn}from'child_process';var de={isPrimitive:r=>r==null||typeof r=="string"||typeof r=="number"||typeof r=="boolean",isArray:r=>Array.isArray(r)&&r.every(e=>de.isUniversalValue(e)),isObject:r=>typeof r=="object"&&r!==null&&!Array.isArray(r)&&!(r instanceof Date)&&Object.values(r).every(e=>de.isUniversalValue(e)),isUniversalValue:r=>r instanceof Date?true:de.isPrimitive(r)||de.isArray(r)||de.isObject(r)};function Nt(r){return "generateImage"in r&&typeof r.generateImage=="function"}function Lt(r){return "createVideo"in r&&"getVideoJob"in r&&"cancelVideoJob"in r&&typeof r.createVideo=="function"&&typeof r.getVideoJob=="function"&&typeof r.cancelVideoJob=="function"}function Ue(r){return "getEstimatedDuration"in r||"getExecutionSteps"in r||"setProgressCallback"in r}function uo(r,e){if(Ue(r)&&r.getEstimatedDuration)return r.getEstimatedDuration(e)}function co(r,e){if(Ue(r)&&r.getExecutionSteps)return r.getExecutionSteps(e)}function go(r,e){return Ue(r)&&r.setProgressCallback?(r.setProgressCallback(e),true):false}var Ne=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 re=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 K(r){return r.category==="chat"}function ce(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 ut(r){return {id:r.id,timestamp:r.timestamp,category:"chat",type:r.role,data:{...r}}}function mo(r){return r.filter(K).map(ce)}function _t(r){return r.role==="user"}function j(r){return r.role==="assistant"}function ge(r){return r.role==="system"}function Le(r){return r.role==="tool"}var F={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}},me=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;}},dt=class{level;packageName;sinkLogger;constructor(e,t){this.packageName=e,this.sinkLogger=t||F;}debug(...e){if(this.shouldLog("debug")){let[t,o]=e;this.forward("debug",String(t??""),_e(o)?o:void 0);}}info(...e){if(this.shouldLog("info")){let[t,o]=e;this.forward("info",String(t??""),_e(o)?o:void 0);}}warn(...e){if(this.shouldLog("warn")){let[t,o]=e;this.forward("warn",String(t??""),_e(o)?o:void 0);}}error(...e){if(this.shouldLog("error")){let[t,o]=e;this.forward("error",String(t??""),_e(o)?o:void 0);}}log(...e){this.info(...e);}getLevel(){return this.level||me.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 _e(r){return typeof r=="object"&&r!==null&&!(r instanceof Error)&&!(r instanceof Date)&&!Array.isArray(r)}function R(r,e){return new dt(r,e)}function ct(r){me.getInstance().setGlobalLevel(r);}function Tn(){return me.getInstance().getGlobalLevel()}var C=R("agents");function kt(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 Ht(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 Vt(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*$t(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 gt=class{config;executor;logger;constructor(e=F){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){for await(let o of e){if(t?.aborted||(await new Promise(n=>setTimeout(n,0)),t?.aborted))break;yield o;}}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}validateConfig(){return true}validateMessages(e){kt(e);}validateTools(e){Ht(e);}async executeViaExecutorOrDirect(e,t){return Vt(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*$t(this.executor,this.name,e,t);}async dispose(){this.executor?.dispose&&await this.executor.dispose();}};var b={CREATED:"created",EXECUTION_START:"execution_start",EXECUTION_COMPLETE:"execution_complete",EXECUTION_ERROR:"execution_error",AGGREGATION_COMPLETE:"aggregation_complete",CONFIG_UPDATED:"config_updated"},q="agent";var A=class extends Error{constructor(t,o){super(t);this.context=o;this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype);}},p=class extends A{code="CONFIGURATION_ERROR";category="user";recoverable=false;constructor(e,t){super(`Configuration Error: ${e}`,t);}},T=class extends A{constructor(t,o,n){super(`Validation Error: ${t}`,n);this.field=o;}code="VALIDATION_ERROR";category="user";recoverable=false},mt=class extends A{constructor(t,o,n,i){super(`Provider Error (${o}): ${t}`,i);this.provider=o;this.originalError=n;}code="PROVIDER_ERROR";category="provider";recoverable=true},zt=class extends A{constructor(t,o,n){super(`Authentication Error: ${t}`,n);this.provider=o;}code="AUTHENTICATION_ERROR";category="user";recoverable=false},Ft=class extends A{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},Bt=class extends A{constructor(t,o,n){super(`Network Error: ${t}`,n);this.originalError=o;}code="NETWORK_ERROR";category="system";recoverable=true},V=class extends A{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},Xt=class extends A{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},Gt=class extends A{code="CIRCUIT_BREAKER_OPEN";category="system";recoverable=true;constructor(e="Circuit breaker is open",t){super(e,t);}},J=class extends A{constructor(t,o,n){super(`Plugin Error (${o}): ${t}`,n);this.pluginName=o;}code="PLUGIN_ERROR";category="system";recoverable=false},Wt=class extends A{code="STORAGE_ERROR";category="system";recoverable=true;constructor(e,t){super(`Storage Error: ${e}`,t);}},ke=class extends A{code="CACHE_INTEGRITY_ERROR";category="system";recoverable=false;constructor(e,t){super(`Cache Integrity Error: ${e}`,t);}},jt=class{static isRecoverable(e){return e instanceof A?e.recoverable:false}static getErrorCode(e){return e instanceof A?e.code:"UNKNOWN_ERROR"}static fromUnknown(e,t="An unknown error occurred"){if(e instanceof A)return e;if(e instanceof Error)return new p(e.message||t);let o=typeof e=="string"?e:t;return new p(o)}static wrapProviderError(e,t,o){let n=e instanceof Error?e:new Error(String(e));return new mt(`Failed to ${o}`,t,n,{operation:o})}};function qt(r){if(!r.executionId)throw new T("[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId");if(!r.ownerType)throw new T(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${r.executionId}`);if(!r.ownerId)throw new T(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${r.executionId}`);return {executionId:r.executionId,ownerType:r.ownerType,ownerId:r.ownerId}}async function po(r,e){let t=[],o=[],n=r.requests.map(s=>(()=>{if(r.signal?.aborted)return Promise.resolve({toolName:s.toolName,executionId:s.executionId??"",success:false,error:"Execution interrupted by user",result:null});let a=qt(s);return e.executeTool(s.toolName,s.parameters,{toolName:s.toolName,parameters:s.parameters,executionId:a.executionId,ownerType:a.ownerType,ownerId:a.ownerId,ownerPath:s.ownerPath,metadata:s.metadata,eventService:s.eventService,baseEventService:s.baseEventService})})());if((await Promise.allSettled(n)).forEach((s,a)=>{let l=r.requests[a];if(!l)return;if(s.status==="fulfilled"){let u=s.value;t.push(u),u.success||o.push(new Error(`Tool execution failed: toolName=${String(u.toolName)} executionId=${String(u.executionId)} error=${String(u.error||"Unknown error")}`));return}let d=s.reason instanceof Error?s.reason:new Error(String(s.reason));o.push(d),t.push({toolName:l.toolName,result:null,success:false,error:d.message,executionId:l.executionId});}),o.length>0&&!r.continueOnError)throw o[0];return {results:t,errors:o}}async function fo(r,e){let t=[],o=[];for(let n of r.requests)try{let i=qt(n),s=await e.executeTool(n.toolName,n.parameters,{toolName:n.toolName,parameters:n.parameters,executionId:i.executionId,ownerType:i.ownerType,ownerId:i.ownerId,ownerPath:n.ownerPath,metadata:n.metadata,eventService:n.eventService,baseEventService:n.baseEventService});if(t.push(s),s.success||o.push(new Error(`Tool execution failed: toolName=${String(s.toolName)} executionId=${String(s.executionId)} error=${String(s.error||"Unknown error")}`)),!s.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 Kt(r,e,t){return t.debug(`Executing ${r.requests.length} tools in ${r.mode} mode`),r.mode==="parallel"?po(r,e):fo(r,e)}var _={CALL_START:"call_start",CALL_COMPLETE:"call_complete",CALL_ERROR:"call_error",CALL_RESPONSE_READY:"call_response_ready"},G="tool",He=class{tools;logger;constructor(e,t=F){this.tools=e,this.logger=t;}async executeTool(e,t,o){this.logger.debug(`Executing tool: ${e}`);try{if(!o?.executionId)throw new T("ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext");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 T(`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 Kt(e,this,this.logger)}};var M={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 Y=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);}},oe=class extends Y{emit(e,t,o){}},fe=new oe;function Z(r){return r===fe||r instanceof oe}function pt(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 Jt=36,Eo=10;function vo(){return `span_${Date.now().toString(Jt)}_${Math.random().toString(Jt).slice(2,Eo)}`}var pe=class extends Y{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??vo()},i=pt(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 pe(r,e)}function Yt(r,e){return k(r,e)}var Ve=class extends Y{emit(e,t,o){this.notifyListeners(e,t,o);}};var Ee={ASSIGNED:"assigned",COMPLETED:"completed"},Zt="task";var Qt={MESSAGE:"message",INPUT:"input"},er="user";function tr(r){return r?.ownerPath?.length?r.ownerPath.map(e=>({...e})):[]}function $e(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 ft(r,e,t,o,n,i){if(!n||n.length===0)throw new Error("[EXECUTION] Missing thinkingNodeId for thinking owner context");let a=[...$e(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 rr(r,e,t,o,n){if(!n||n.length===0)throw new Error("[EXECUTION] Missing toolCallId for tool owner context");let s=[...$e(r,e,t,o).ownerPath,{type:"tool",id:n}];return {ownerType:G,ownerId:n,ownerPath:s}}function or(r,e,t,o,n,i){let s=ft(r,e,t,o,n,i).ownerPath,a=`response_${n}`,l=[...s,{type:"response",id:a}];return {ownerType:$,ownerId:o,ownerPath:l}}function ze(r){return "executionId"in r||"toolName"in r}function Fe(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
|
|
3
|
-
[Tool: ${
|
|
4
|
-
[Tool: ${f.function.name} failed: ${O}]`,isComplete:false};}else throw new Error(`[EXECUTION] Missing tool result for tool call "${f.id}" in streaming mode`);e.addToolMessageWithId(h,f.id,f.function.name,x);}let g=r.map(f=>{if(!f.id||f.id.length===0)throw new Error("[EXECUTION] Tool call missing id for streaming tool results ready payload");return f.id});if(g.length===0)throw new Error("[EXECUTION] Tool results ready requires toolCallIds in streaming mode");i.emitExecution(M.TOOL_RESULTS_READY,{parameters:{toolCallIds:g,round:1},metadata:{toolsExecuted:m.results.map(f=>{if(!f.toolName||f.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return f.toolName}),round:1}},t,o);}async function*dr(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 m=n.generateExecutionId(),g=Date.now();if(!o?.conversationId||o.conversationId.length===0)throw new Error("[EXECUTION] conversationId is required for streaming");let f=o.conversationId;c.prepareOwnerPathBases(f);try{let E=a.getConversationStore(o.conversationId);r&&E.addUserMessage(r,{executionId:m}),await H(d,"beforeRun",{input:r,...o?.metadata?{metadata:o.metadata}:{}},u);let P=i.getCurrentProvider();if(!P)throw new Error("No AI provider configured");let h=i.getProvider(P.provider);if(!h)throw new Error(`AI provider '${P.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=E.getMessages(),S=Array.isArray(t.tools)?t.tools.length:void 0;u.debug("[EXECUTION-SERVICE] config.tools:",{length:S});let O=s.getTools(),ee=Array.isArray(O)?O.length:void 0;u.debug("[EXECUTION-SERVICE] this.tools.getTools():",{length:ee}),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 X={model:t.defaultModel.model,...t.tools&&t.tools.length>0&&{tools:s.getTools()}};u.debug("[EXECUTION-SERVICE] Final chatOptions has tools:",{hasTools:!!X.tools});let w=Array.isArray(X.tools)?X.tools.length:void 0;u.debug("[EXECUTION-SERVICE] Final chatOptions.tools length:",{length:w});let Oe=h.chatStream;if(!Oe)throw new Error("Provider does not support streaming");let le=Oe.call(h,x,X),L="",D=[],U=-1;for await(let z of le)if(z.content&&(L+=z.content,yield {chunk:z.content,isComplete:!1}),z.role==="assistant"){let ue=z;if(Array.isArray(ue.toolCalls)&&ue.toolCalls.length>0){for(let y of ue.toolCalls)if(y.id&&y.id!==""){if(!y.type||y.type.length===0)throw new Error(`[EXECUTION] Tool call "${y.id}" missing type in stream`);if(!y.function?.name||y.function.name.length===0)throw new Error(`[EXECUTION] Tool call "${y.id}" missing function name in stream`);if(typeof y.function.arguments!="string")throw new Error(`[EXECUTION] Tool call "${y.id}" missing arguments in stream`);U=D.length,D.push({id:y.id,type:y.type,function:{name:y.function.name,arguments:y.function.arguments}}),u.debug(`[TOOL-STREAM] New tool call started: ${y.id} (${y.function?.name})`);}else if(U>=0){let v=typeof y.function?.name=="string"&&y.function.name.length>0,te=typeof y.function?.arguments=="string"&&y.function.arguments.length>0;if(!v&&!te)throw new Error(`[EXECUTION] Tool call fragment missing name/arguments for ${D[U].id}`);v&&(D[U].function.name+=y.function.name),te&&(D[U].function.arguments+=y.function.arguments);let De=te?y.function.arguments:y.function.name;u.debug(`[TOOL-STREAM] Adding fragment to tool ${D[U].id}: "${De}"`);}}}if(u.debug("[EXECUTION-SERVICE-STREAM] Stream completed, toolCalls detected:",{count:D.length}),typeof L!="string")throw new Error("[EXECUTION] Streaming response content is required");E.addAssistantMessage(L,D,{executionId:m}),D.length>0&&(yield*ur(D,E,f,m,l,c,u)),await H(d,"afterRun",{input:r,response:L,...o?.metadata?{metadata:o.metadata}:{}},u),yield {chunk:"",isComplete:!0};}catch(E){throw u.error("ExecutionService streaming execution failed",{error:E instanceof Error?E.message:String(E),executionTime:Date.now()-g}),await H(d,"onError",{input:r,error:E instanceof Error?E:new Error(String(E)),...o?.metadata?{metadata:o.metadata}:{}},u),E}finally{c.resetOwnerPathBases();}}function cr(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 gr(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 mr(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 pr(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 fr(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:Po(e)},s),s.error("Execution pipeline failed",{executionId:n,conversationId:o,duration:l,error:r instanceof Error?r.message:String(r)}),a.emitExecution(M.ERROR,{error:r instanceof Error?r.message:String(r),metadata:{method:"execute",success:false,duration:l}},o,n);}function Et(){return `exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function vt(r,e){if(!r?.conversationId||r.conversationId.length===0)throw new Error(`[EXECUTION] conversationId is required for ${e}`);return r.conversationId}function Po(r){let t={conversationId:vt(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}var Ie={"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}},It=2e5;function ne(r){return Ie[r]?.contextWindow??It}var ht=16384;function Er(r){return Ie[r]?.maxOutput??ht}function vr(r){return Ie[r]?.name??r}function Ir(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 Tt(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 yt(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};if(o){let s=o.lookup(r,e.defaultModel.model,e.defaultModel.provider,{temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens});if(s)return {role:"assistant",content:s,timestamp:new Date};let a=await t.provider.chat(r,i);return typeof a.content=="string"&&o.store(r,e.defaultModel.model,e.defaultModel.provider,a.content,{temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}),a}return t.provider.chat(r,i)}function xt(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 So="Error: Context window near capacity. Tool execution result skipped. Respond with available results and re-request skipped tools if needed.";async function Mt(r,e,t,o,n,i,s,a,l,d,u){let{toolExecutionService:c,logger:m,eventEmitter:g}=l;m.debug("Tool calls detected, executing tools",{toolCallCount:r.length,round:n,toolCalls:r.map(w=>({id:w.id,name:w.function?.name}))});let f=g.buildThinkingOwnerContext(t,o,i,s).ownerPath,E=r.length,P=`${i}`,S={requests:c.createExecutionRequestsWithContext(r,{ownerPathBase:f,metadataFactory:w=>({conversationId:t,round:n,directParentId:i,batchId:P,expectedCount:E,toolCallId:w.id})}).map(w=>{if(!w.ownerId)throw new Error("[EXECUTION] Tool request missing ownerId");return {...w,eventService:g.ensureToolEventService(w.ownerId,w.ownerPath),baseEventService:g.getBaseEventService()}}),mode:"parallel",maxConcurrency:5,continueOnError:true,signal:u},O=await c.executeTools(S);a.toolsExecuted.push(...O.results.map(w=>{if(!w.toolName||w.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return w.toolName}));let ee=ne(d?.defaultModel?.model??""),X=hr(r,O,e,n,m,{contextLimit:ee,cumulativeInputTokens:a.cumulativeInputTokens});return g.emitToolResultsEvents(r,O,a.toolsExecuted,t,o,n,i,s),g.clearToolEventServices(),X}function hr(r,e,t,o,n,i){let l=false,d=0,u=0;for(let c of r){if(!c.id)throw new Error(`Tool call missing ID: ${JSON.stringify(c)}`);let m=c.function?.name;if(!m||m.length===0)throw new Error(`[EXECUTION] Tool call "${c.id}" missing function name`);if(l){n.warn("[ROUND] Skipping tool result due to context overflow",{toolCallId:c.id,toolName:m,round:o}),t.addToolMessageWithId(So,c.id,m,{round:o,success:false,error:"context_overflow",toolName:m}),u++;continue}let g=e.results.find(h=>h.executionId===c.id),f=e.errors.find(h=>ze(h)&&h.executionId===c.id),E,P={round:o};if(g&&g.success){if(typeof g.result>"u")throw new Error("[EXECUTION] Tool result missing result payload");E=typeof g.result=="string"?g.result:JSON.stringify(g.result),P.success=true,g.toolName&&(P.toolName=g.toolName);}else if(g&&!g.success){if(!g.error||g.error.length===0)throw new Error("[EXECUTION] Tool result missing error message");E=`Error: ${g.error}`,P.success=false,P.error=g.error,g.toolName&&(P.toolName=g.toolName);}else if(f){let h=f,x=h.error?.message?h.error.message:h.message?h.message:"";if(!x||x.length===0)throw new Error("[EXECUTION] Tool execution error missing message");E=`Error: ${x}`,P.success=false,P.error=x,h.toolName&&(P.toolName=h.toolName);}else throw new Error(`No execution result found for tool call ID: ${c.id}`);if(n.debug("Adding tool result to conversation",{toolCallId:c.id,toolName:m,content:E.substring(0,100),round:o,currentHistoryLength:t.getMessages().length}),t.addToolMessageWithId(E,c.id,m,P),i){let h=JSON.stringify(t.getMessages()).length,x=Math.max(i.cumulativeInputTokens,Math.ceil(h/2));x>i.contextLimit*.8&&(n.warn("[ROUND] Context budget exceeded after tool result \u2014 skipping remaining tools",{estimatedTokens:x,contextLimit:i.contextLimit,toolCallId:c.id,round:o}),l=true);}d++,n.debug("Tool result added to history",{toolCallId:c.id,newHistoryLength:t.getMessages().length,round:o});}return {contextOverflowed:l,addedCount:d,skippedCount:u}}async function Tr(r,e,t,o,n,i,s,a,l){let{plugins:d,logger:u,eventEmitter:c,cacheService:m}=l,g=r.currentRound;u.debug(`[ROUND-${g}] Starting execution round ${g}`,{executionId:n,conversationId:i.conversationId,round:g,maxRounds:e});let f=t.getMessages();if(!Array.isArray(f))throw new Error("[EXECUTION] Conversation messages must be an array");let{thinkingNodeId:E,previousThinkingNodeId:P}=Tt(o,r),h=f;u.debug("Current conversation messages",{round:g,messageCount:h.length,fullHistory:h.map((v,te)=>({index:te,role:v.role,content:v.content?.substring(0,100),hasToolCalls:"toolCalls"in v?!!v.toolCalls?.length:false,toolCallId:"toolCallId"in v?v.toolCallId:void 0,toolCallsCount:"toolCalls"in v?v.toolCalls?.length:0}))}),await H(d,"beforeProviderCall",{messages:h},u),u.debug("Sending messages to AI provider",{round:g,messageCount:h.length,lastFewMessages:h.slice(-5).map(v=>({role:v.role,content:v.content?.substring(0,50),hasToolCalls:"toolCalls"in v?!!v.toolCalls?.length:false,toolCallId:"toolCallId"in v?v.toolCallId:void 0}))}),c.emitWithContext(M.ASSISTANT_MESSAGE_START,{parameters:{round:g,messageCount:h.length},metadata:{round:g,thinkingNodeId:E}},()=>c.buildThinkingOwnerContext(o,n,E,P),v=>{if(!v.ownerType||!v.ownerId)throw new Error("[EXECUTION] Missing owner context for thinking event");return k(c.getBaseEventService(),{ownerType:v.ownerType,ownerId:v.ownerId,ownerPath:v.ownerPath})});let x=2,S=.835,O=Math.ceil(JSON.stringify(h).length/x),ee=Math.max(r.cumulativeInputTokens,O),X=ne(s.defaultModel.model);if(ee>X*S)return u.warn("[ROUND] Context overflow prevention \u2014 tokens exceed 83.5% of context window",{estimatedTokens:ee,contextLimit:X,round:g}),t.addAssistantMessage("Context window is near capacity. Cannot process further in this round.",[],{round:g,contextOverflow:true}),true;if(g>1&&"onTextDelta"in a.provider){let v=a.provider.onTextDelta;v&&v(`
|
|
1
|
+
import {randomUUID}from'crypto';import fn from'jssha';import {spawn}from'child_process';var de={isPrimitive:r=>r==null||typeof r=="string"||typeof r=="number"||typeof r=="boolean",isArray:r=>Array.isArray(r)&&r.every(e=>de.isUniversalValue(e)),isObject:r=>typeof r=="object"&&r!==null&&!Array.isArray(r)&&!(r instanceof Date)&&Object.values(r).every(e=>de.isUniversalValue(e)),isUniversalValue:r=>r instanceof Date?true:de.isPrimitive(r)||de.isArray(r)||de.isObject(r)};function Lt(r,e){return r.find(t=>t.type===e)}function _t(r){return r.map(e=>e.type).join(", ")}function kt(r){return "generateImage"in r&&typeof r.generateImage=="function"}function Ht(r){return "createVideo"in r&&"getVideoJob"in r&&"cancelVideoJob"in r&&typeof r.createVideo=="function"&&typeof r.getVideoJob=="function"&&typeof r.cancelVideoJob=="function"}function Ue(r){return "getEstimatedDuration"in r||"getExecutionSteps"in r||"setProgressCallback"in r}function Eo(r,e){if(Ue(r)&&r.getEstimatedDuration)return r.getEstimatedDuration(e)}function Io(r,e){if(Ue(r)&&r.getExecutionSteps)return r.getExecutionSteps(e)}function To(r,e){return Ue(r)&&r.setProgressCallback?(r.setProgressCallback(e),true):false}var Ne=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 oe=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 Y(r){return r.category==="chat"}function ce(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 ut(r){return {id:r.id,timestamp:r.timestamp,category:"chat",type:r.role,data:{...r}}}function ho(r){return r.filter(Y).map(ce)}function Vt(r){return r.role==="user"}function K(r){return r.role==="assistant"}function ge(r){return r.role==="system"}function Le(r){return r.role==="tool"}var F={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}},me=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;}},dt=class{level;packageName;sinkLogger;constructor(e,t){this.packageName=e,this.sinkLogger=t||F;}debug(...e){if(this.shouldLog("debug")){let[t,o]=e;this.forward("debug",String(t??""),_e(o)?o:void 0);}}info(...e){if(this.shouldLog("info")){let[t,o]=e;this.forward("info",String(t??""),_e(o)?o:void 0);}}warn(...e){if(this.shouldLog("warn")){let[t,o]=e;this.forward("warn",String(t??""),_e(o)?o:void 0);}}error(...e){if(this.shouldLog("error")){let[t,o]=e;this.forward("error",String(t??""),_e(o)?o:void 0);}}log(...e){this.info(...e);}getLevel(){return this.level||me.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 _e(r){return typeof r=="object"&&r!==null&&!(r instanceof Error)&&!(r instanceof Date)&&!Array.isArray(r)}function w(r,e){return new dt(r,e)}function ct(r){me.getInstance().setGlobalLevel(r);}function Xn(){return me.getInstance().getGlobalLevel()}var C=w("agents");function zt(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 $t(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 Ft(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*Bt(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 gt=class{config;executor;logger;constructor(e=F){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 yo(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:K(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:K(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata};}supportsTools(){return true}validateConfig(){return true}validateMessages(e){zt(e);}validateTools(e){$t(e);}async executeViaExecutorOrDirect(e,t){return Ft(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*Bt(this.executor,this.name,e,t);}async dispose(){this.executor?.dispose&&await this.executor.dispose();}};async function yo(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 b={CREATED:"created",EXECUTION_START:"execution_start",EXECUTION_COMPLETE:"execution_complete",EXECUTION_ERROR:"execution_error",AGGREGATION_COMPLETE:"aggregation_complete",CONFIG_UPDATED:"config_updated"},J="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);}},f=class extends O{code="CONFIGURATION_ERROR";category="user";recoverable=false;constructor(e,t){super(`Configuration Error: ${e}`,t);}},y=class extends O{constructor(t,o,n){super(`Validation Error: ${t}`,n);this.field=o;}code="VALIDATION_ERROR";category="user";recoverable=false},mt=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},Xt=class extends O{constructor(t,o,n){super(`Authentication Error: ${t}`,n);this.provider=o;}code="AUTHENTICATION_ERROR";category="user";recoverable=false},Gt=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},Wt=class extends O{constructor(t,o,n){super(`Network Error: ${t}`,n);this.originalError=o;}code="NETWORK_ERROR";category="system";recoverable=true},V=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},jt=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},qt=class extends O{code="CIRCUIT_BREAKER_OPEN";category="system";recoverable=true;constructor(e="Circuit breaker is open",t){super(e,t);}},Z=class extends O{constructor(t,o,n){super(`Plugin Error (${o}): ${t}`,n);this.pluginName=o;}code="PLUGIN_ERROR";category="system";recoverable=false},Kt=class extends O{code="STORAGE_ERROR";category="system";recoverable=true;constructor(e,t){super(`Storage Error: ${e}`,t);}},ke=class extends O{code="CACHE_INTEGRITY_ERROR";category="system";recoverable=false;constructor(e,t){super(`Cache Integrity Error: ${e}`,t);}},Jt=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 f(e.message||t);let o=typeof e=="string"?e:t;return new f(o)}static wrapProviderError(e,t,o){let n=e instanceof Error?e:new Error(String(e));return new mt(`Failed to ${o}`,t,n,{operation:o})}};var Yt=1;function Mo(r){if(!r.executionId)throw new y("[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId");if(!r.ownerType)throw new y(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${r.executionId}`);if(!r.ownerId)throw new y(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${r.executionId}`);return {executionId:r.executionId,ownerType:r.ownerType,ownerId:r.ownerId}}function Zt(r){let e=Mo(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 Co(r){return {toolName:r.toolName,executionId:r.executionId??"",success:false,error:"Execution interrupted by user",result:null}}function bo(r,e){return {toolName:r.toolName,result:null,success:false,error:e.message,executionId:r.executionId}}function Qt(r){return new Error(`Tool execution failed: toolName=${String(r.toolName)} executionId=${String(r.executionId)} error=${String(r.error||"Unknown error")}`)}function Po(r){return r!==void 0}function Ro(r){return r!==void 0}function So(r,e){if(r===0)return 0;if(e===void 0||!Number.isFinite(e))return r;let t=Math.floor(e);return t<Yt?Yt:Math.min(t,r)}async function wo(r,e,t,o){let n=r.requests[o];if(n)try{let i=r.signal?.aborted?Co(n):await e.executeTool(n.toolName,n.parameters,Zt(n));t.resultsByIndex[o]=i,i.success||(t.errorsByIndex[o]=Qt(i));}catch(i){let s=i instanceof Error?i:new Error(String(i));t.errorsByIndex[o]=s,t.resultsByIndex[o]=bo(n,s);}}async function Ao(r,e,t){for(;t.nextRequestIndex<r.requests.length;){let o=t.nextRequestIndex;t.nextRequestIndex+=1,await wo(r,e,t,o);}}async function Oo(r,e){let t={resultsByIndex:new Array(r.requests.length),errorsByIndex:new Array(r.requests.length),nextRequestIndex:0},o=So(r.requests.length,r.maxConcurrency),n=Array.from({length:o},()=>Ao(r,e,t));await Promise.all(n);let i=t.resultsByIndex.filter(Po),s=t.errorsByIndex.filter(Ro);if(s.length>0&&!r.continueOnError)throw s[0];return {results:i,errors:s}}async function Do(r,e){let t=[],o=[];for(let n of r.requests)try{let i=await e.executeTool(n.toolName,n.parameters,Zt(n));if(t.push(i),i.success||o.push(Qt(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 er(r,e,t){return t.debug(`Executing ${r.requests.length} tools in ${r.mode} mode`),r.mode==="parallel"?Oo(r,e):Do(r,e)}var _={CALL_START:"call_start",CALL_COMPLETE:"call_complete",CALL_ERROR:"call_error",CALL_RESPONSE_READY:"call_response_ready"},W="tool",He=class{tools;logger;constructor(e,t=F){this.tools=e,this.logger=t;}async executeTool(e,t,o){this.logger.debug(`Executing tool: ${e}`);try{if(!o?.executionId)throw new y("ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext");let n=o.eventService;if(n){let d={timestamp:new Date,toolName:e,parameters:t};n.emit(_.CALL_START,d);}let{toolName:i,parameters:s,...a}=o,l={...a,toolName:e,parameters:t,executionId:o.executionId},u=await this.tools.executeTool(e,t,l);if(this.logger.debug(`Tool execution completed: ${e}`),n){let d={timestamp:new Date,toolName:e,result:u};n.emit(_.CALL_COMPLETE,d),n.emit(_.CALL_RESPONSE_READY,d);}return {success:!0,result:u,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 y(`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 er(e,this,this.logger)}};var x={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 Q=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);}},ne=class extends Q{emit(e,t,o){}},fe=new ne;function ee(r){return r===fe||r instanceof ne}function pt(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 tr=36,Uo=10;function No(){return `span_${Date.now().toString(tr)}_${Math.random().toString(tr).slice(2,Uo)}`}var pe=class extends Q{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??No()},i=pt(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 pe(r,e)}function rr(r,e){return k(r,e)}var Ve=class extends Q{emit(e,t,o){this.notifyListeners(e,t,o);}};var ve={ASSIGNED:"assigned",COMPLETED:"completed"},or="task";var nr={MESSAGE:"message",INPUT:"input"},ir="user";function sr(r){return r?.ownerPath?.length?r.ownerPath.map(e=>({...e})):[]}function ze(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 ft(r,e,t,o,n,i){if(!n||n.length===0)throw new Error("[EXECUTION] Missing thinkingNodeId for thinking owner context");let a=[...ze(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 ar(r,e,t,o,n){if(!n||n.length===0)throw new Error("[EXECUTION] Missing toolCallId for tool owner context");let s=[...ze(r,e,t,o).ownerPath,{type:"tool",id:n}];return {ownerType:W,ownerId:n,ownerPath:s}}function lr(r,e,t,o,n,i){let s=ft(r,e,t,o,n,i).ownerPath,a=`response_${n}`,l=[...s,{type:"response",id:a}];return {ownerType:z,ownerId:o,ownerPath:l}}function $e(r){return "executionId"in r||"toolName"in r}function Fe(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 dr(r,e,t,o,n,i,s){r.emitExecution(x.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 cr(r,e,t,o){r.emitExecution(x.USER_MESSAGE,{parameters:{input:e,userPrompt:e,userMessageContent:e,messageLength:e.length,wordCount:Fe(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 gr(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,u=t.timestamp,d=new Date().getTime()-u.getTime();r.emitWithContext(x.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:l,responseLength:l.length,wordCount:Fe(l),responseTime:d,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(Fe(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 k(e,{ownerType:c.ownerType,ownerId:c.ownerId,ownerPath:c.ownerPath})});}function mr(r,e,t,o,n,i,s,a,l,u){let d=t.map(g=>{if(!g.id||g.id.length===0)throw new Error("[EXECUTION] Tool call missing id for tool results ready payload");return g.id});if(d.length===0)throw new Error("[EXECUTION] Tool results ready requires toolCallIds");let c=()=>r.buildThinkingOwnerContext(i,s,l,u),m=g=>{if(!g.ownerType||!g.ownerId)throw new Error("[EXECUTION] Missing owner context for tool results event");return k(e,{ownerType:g.ownerType,ownerId:g.ownerId,ownerPath:g.ownerPath})};r.emitWithContext(x.TOOL_RESULTS_READY,{parameters:{toolCallIds:d,round:a},metadata:{round:a}},c,m),r.emitWithContext(x.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:n.length,round:a},metadata:{toolsExecuted:o.results.map(g=>{if(!g.toolName||g.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return g.toolName}),round:a}},c,m);}var Be=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,o){this.baseEventService=e,this.logger=t,this.ownerPathBase=sr(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(ee(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=k(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 ze(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,o,n){return ft(this.agentOwnerPathBase,this.ownerPathBase,e,t,o,n)}buildToolOwnerContext(e,t,o){return ar(this.agentOwnerPathBase,this.ownerPathBase,e,t,o)}buildResponseOwnerContext(e,t,o,n){return lr(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 k(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(ee(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){dr(this,e,t,o,n,i,s);}emitUserMessageEvent(e,t,o){cr(this,e,t,o);}emitAssistantMessageComplete(e,t,o,n,i,s){gr(this,this.baseEventService,e,t,o,n,i,s);}emitToolResultsEvents(e,t,o,n,i,s,a,l){mr(this,this.baseEventService,e,t,o,n,i,s,a,l);}};var zo={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}.${x.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 H(r,e,t,o){let n=zo[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*pr(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}`,u=[...i.buildExecutionOwnerContext(a,o).ownerPath,{type:"thinking",id:l}],c={requests:n.createExecutionRequestsWithContext(r,{ownerPathBase:u}),mode:"parallel",maxConcurrency:5,continueOnError:true},m=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 v=m.results.find(S=>S.executionId===p.id),h=m.errors.find(S=>$e(S)&&S.executionId===p.id),T,R={executionId:o};if(v&&v.success){if(typeof v.result>"u")throw new Error("[EXECUTION] Tool result missing result payload in streaming mode");T=typeof v.result=="string"?v.result:JSON.stringify(v.result),R.success=true,v.toolName&&(R.toolName=v.toolName),yield {chunk:`
|
|
3
|
+
[Tool: ${p.function.name} executed successfully]`,isComplete:false};}else if(h){let S=h,P=S.error?.message?S.error.message:S.message?S.message:"";if(!P||P.length===0)throw new Error("[EXECUTION] Tool execution error missing message in streaming mode");T=`Error: ${P}`,R.success=false,R.error=P,S.toolName&&(R.toolName=S.toolName),yield {chunk:`
|
|
4
|
+
[Tool: ${p.function.name} failed: ${P}]`,isComplete:false};}else throw new Error(`[EXECUTION] Missing tool result for tool call "${p.id}" in streaming mode`);e.addToolMessageWithId(T,p.id,p.function.name,R);}let g=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(g.length===0)throw new Error("[EXECUTION] Tool results ready requires toolCallIds in streaming mode");i.emitExecution(x.TOOL_RESULTS_READY,{parameters:{toolCallIds:g,round:1},metadata:{toolsExecuted:m.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*fr(r,e,t,o,n){let{aiProviders:i,tools:s,conversationHistory:a,toolExecutionService:l,plugins:u,logger:d,eventEmitter:c}=n;d.debug("ExecutionService.executeStream called");let m=n.generateExecutionId(),g=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 v=a.getConversationStore(o.conversationId);r&&v.addUserMessage(r,{executionId:m}),await H(u,"beforeRun",{input:r,...o?.metadata?{metadata:o.metadata}:{}},d);let h=i.getCurrentProvider();if(!h)throw new Error("No AI provider configured");let T=i.getProvider(h.provider);if(!T)throw new Error(`AI provider '${h.provider}' not found`);if(typeof T.chatStream!="function")throw new Error("Provider must have chatStream method to support streaming execution");d.debug("ExecutionService calling provider.chatStream");let R=v.getMessages(),S=Array.isArray(t.tools)?t.tools.length:void 0;d.debug("[EXECUTION-SERVICE] config.tools:",{length:S});let P=s.getTools(),$=Array.isArray(P)?P.length:void 0;d.debug("[EXECUTION-SERVICE] this.tools.getTools():",{length:$}),d.debug("[EXECUTION-SERVICE] config.tools exists:",{exists:!!t.tools}),d.debug("[EXECUTION-SERVICE] config.tools.length > 0:",{hasTools:t.tools&&t.tools.length>0});let X={model:t.defaultModel.model,...t.tools&&t.tools.length>0&&{tools:s.getTools()}};d.debug("[EXECUTION-SERVICE] Final chatOptions has tools:",{hasTools:!!X.tools});let A=Array.isArray(X.tools)?X.tools.length:void 0;d.debug("[EXECUTION-SERVICE] Final chatOptions.tools length:",{length:A});let Oe=T.chatStream;if(!Oe)throw new Error("Provider does not support streaming");let ue=Oe.call(T,R,X),D="",U=[],q=-1;for await(let L of ue)if(L.content&&(D+=L.content,yield {chunk:L.content,isComplete:!1}),L.role==="assistant"){let G=L;if(Array.isArray(G.toolCalls)&&G.toolCalls.length>0){for(let M of G.toolCalls)if(M.id&&M.id!==""){if(!M.type||M.type.length===0)throw new Error(`[EXECUTION] Tool call "${M.id}" missing type in stream`);if(!M.function?.name||M.function.name.length===0)throw new Error(`[EXECUTION] Tool call "${M.id}" missing function name in stream`);if(typeof M.function.arguments!="string")throw new Error(`[EXECUTION] Tool call "${M.id}" missing arguments in stream`);q=U.length,U.push({id:M.id,type:M.type,function:{name:M.function.name,arguments:M.function.arguments}}),d.debug(`[TOOL-STREAM] New tool call started: ${M.id} (${M.function?.name})`);}else if(q>=0){let re=typeof M.function?.name=="string"&&M.function.name.length>0,I=typeof M.function?.arguments=="string"&&M.function.arguments.length>0;if(!re&&!I)throw new Error(`[EXECUTION] Tool call fragment missing name/arguments for ${U[q].id}`);re&&(U[q].function.name+=M.function.name),I&&(U[q].function.arguments+=M.function.arguments);let De=I?M.function.arguments:M.function.name;d.debug(`[TOOL-STREAM] Adding fragment to tool ${U[q].id}: "${De}"`);}}}if(d.debug("[EXECUTION-SERVICE-STREAM] Stream completed, toolCalls detected:",{count:U.length}),typeof D!="string")throw new Error("[EXECUTION] Streaming response content is required");v.addAssistantMessage(D,U,{executionId:m}),U.length>0&&(yield*pr(U,v,p,m,l,c,d)),await H(u,"afterRun",{input:r,response:D,...o?.metadata?{metadata:o.metadata}:{}},d),yield {chunk:"",isComplete:!0};}catch(v){throw d.error("ExecutionService streaming execution failed",{error:v instanceof Error?v.message:String(v),executionTime:Date.now()-g}),await H(u,"onError",{input:r,error:v instanceof Error?v:new Error(String(v)),...o?.metadata?{metadata:o.metadata}:{}},d),v}finally{c.resetOwnerPathBases();}}function vr(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 d=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:d&&typeof d=="object"?Object.keys(d):[]}});return {provider:n,currentInfo:o,aiProviderInfo:s,toolsInfo:a,availableTools:i}}function Er(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 Ir(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 Tr(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,u)=>{let d=u.metadata?.usage;if(d&&typeof d=="object"&&"totalTokens"in d){let c=Number(d.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 hr(r,e,t,o,n,i,s,a){let l=Date.now()-t.getTime(),u=r instanceof Error?r:new Error(String(r));await H(i,"onError",{error:u,executionContext:Bo(e)},s),s.error("Execution pipeline failed",{executionId:n,conversationId:o,duration:l,error:r instanceof Error?r.message:String(r)}),a.emitExecution(x.ERROR,{error:r instanceof Error?r.message:String(r),metadata:{method:"execute",success:false,duration:l}},o,n);}function vt(){return `exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Et(r,e){if(!r?.conversationId||r.conversationId.length===0)throw new Error(`[EXECUTION] conversationId is required for ${e}`);return r.conversationId}function Bo(r){let t={conversationId:Et(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}var Ie={"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}},It=2e5;function ie(r){return Ie[r]?.contextWindow??It}var Tt=16384;function yr(r){return Ie[r]?.maxOutput??Tt}function xr(r){return Ie[r]?.name??r}function Mr(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 ht(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 yt(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 Cr(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 Cr(s,r,i,e.timeout)}async function Cr(r,e,t,o){let n=Go(o),i=t.signal;if(n===void 0&&i===void 0)return r(e,t);if(i?.aborted)throw br();let s=new AbortController,a,l=false,u,d=()=>{a!==void 0&&(clearTimeout(a),a=void 0);},c=h=>{l||(l=true,u?.(h),s.abort(h));},m=()=>{n===void 0||l||(d(),a=setTimeout(()=>{c(new Error(`Provider call idle timeout after ${n}ms`));},n));},g=()=>{c(br());};i?.addEventListener("abort",g,{once:true});let p=t.onTextDelta,v={...t,signal:s.signal,...p!==void 0?{onTextDelta:h=>{m(),p(h);}}:{}};m();try{return await Promise.race([r(e,v),new Promise((h,T)=>{u=T;})])}finally{l=true,d(),i?.removeEventListener("abort",g);}}function Go(r){if(!(r===void 0||!Number.isFinite(r)||r<=0))return r}function br(){let r=new Error("aborted");return r.name="AbortError",r}function xt(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,u=l.toolCalls??[];if(!Array.isArray(u))throw new Error("[EXECUTION] assistantResponse.toolCalls must be an array");return {assistantResponse:l,assistantToolCalls:u}}var Wo="Error: Context window near capacity. Tool execution result skipped. Respond with available results and re-request skipped tools if needed.";async function Mt(r,e,t,o,n,i,s,a,l,u,d){let{toolExecutionService:c,logger:m,eventEmitter:g}=l;m.debug("Tool calls detected, executing tools",{toolCallCount:r.length,round:n,toolCalls:r.map(A=>({id:A.id,name:A.function?.name}))});let p=g.buildThinkingOwnerContext(t,o,i,s).ownerPath,v=r.length,h=`${i}`,S={requests:c.createExecutionRequestsWithContext(r,{ownerPathBase:p,metadataFactory:A=>({conversationId:t,round:n,directParentId:i,batchId:h,expectedCount:v,toolCallId:A.id})}).map(A=>{if(!A.ownerId)throw new Error("[EXECUTION] Tool request missing ownerId");return {...A,eventService:g.ensureToolEventService(A.ownerId,A.ownerPath),baseEventService:g.getBaseEventService()}}),mode:"parallel",maxConcurrency:5,continueOnError:true,signal:d},P=await c.executeTools(S);a.toolsExecuted.push(...P.results.map(A=>{if(!A.toolName||A.toolName.length===0)throw new Error("[EXECUTION] Tool result missing toolName");return A.toolName}));let $=ie(u?.defaultModel?.model??""),X=Pr(r,P,e,n,m,{contextLimit:$,cumulativeInputTokens:a.cumulativeInputTokens});return g.emitToolResultsEvents(r,P,a.toolsExecuted,t,o,n,i,s),g.clearToolEventServices(),X}function Pr(r,e,t,o,n,i){let l=false,u=0,d=0;for(let c of r){if(!c.id)throw new Error(`Tool call missing ID: ${JSON.stringify(c)}`);let m=c.function?.name;if(!m||m.length===0)throw new Error(`[EXECUTION] Tool call "${c.id}" missing function name`);if(l){n.warn("[ROUND] Skipping tool result due to context overflow",{toolCallId:c.id,toolName:m,round:o}),t.addToolMessageWithId(Wo,c.id,m,{round:o,success:false,error:"context_overflow",toolName:m}),d++;continue}let g=e.results.find(T=>T.executionId===c.id),p=e.errors.find(T=>$e(T)&&T.executionId===c.id),v,h={round:o};if(g&&g.success){if(typeof g.result>"u")throw new Error("[EXECUTION] Tool result missing result payload");v=typeof g.result=="string"?g.result:JSON.stringify(g.result),h.success=true,g.toolName&&(h.toolName=g.toolName);}else if(g&&!g.success){if(!g.error||g.error.length===0)throw new Error("[EXECUTION] Tool result missing error message");v=`Error: ${g.error}`,h.success=false,h.error=g.error,g.toolName&&(h.toolName=g.toolName);}else if(p){let T=p,R=T.error?.message?T.error.message:T.message?T.message:"";if(!R||R.length===0)throw new Error("[EXECUTION] Tool execution error missing message");v=`Error: ${R}`,h.success=false,h.error=R,T.toolName&&(h.toolName=T.toolName);}else throw new Error(`No execution result found for tool call ID: ${c.id}`);if(n.debug("Adding tool result to conversation",{toolCallId:c.id,toolName:m,content:v.substring(0,100),round:o,currentHistoryLength:t.getMessages().length}),t.addToolMessageWithId(v,c.id,m,h),i){let T=JSON.stringify(t.getMessages()).length,R=Math.max(i.cumulativeInputTokens,Math.ceil(T/2));R>i.contextLimit*.8&&(n.warn("[ROUND] Context budget exceeded after tool result \u2014 skipping remaining tools",{estimatedTokens:R,contextLimit:i.contextLimit,toolCallId:c.id,round:o}),l=true);}u++,n.debug("Tool result added to history",{toolCallId:c.id,newHistoryLength:t.getMessages().length,round:o});}return {contextOverflowed:l,addedCount:u,skippedCount:d}}async function Rr(r,e,t,o,n,i,s,a,l){let{plugins:u,logger:d,eventEmitter:c,cacheService:m}=l,g=r.currentRound;d.debug(`[ROUND-${g}] Starting execution round ${g}`,{executionId:n,conversationId:i.conversationId,round:g,maxRounds:e});let p=t.getMessages();if(!Array.isArray(p))throw new Error("[EXECUTION] Conversation messages must be an array");let{thinkingNodeId:v,previousThinkingNodeId:h}=ht(o,r),T=p;d.debug("Current conversation messages",{round:g,messageCount:T.length,fullHistory:T.map((I,De)=>({index:De,role:I.role,content:I.content?.substring(0,100),hasToolCalls:"toolCalls"in I?!!I.toolCalls?.length:false,toolCallId:"toolCallId"in I?I.toolCallId:void 0,toolCallsCount:"toolCalls"in I?I.toolCalls?.length:0}))}),await H(u,"beforeProviderCall",{messages:T},d),d.debug("Sending messages to AI provider",{round:g,messageCount:T.length,lastFewMessages:T.slice(-5).map(I=>({role:I.role,content:I.content?.substring(0,50),hasToolCalls:"toolCalls"in I?!!I.toolCalls?.length:false,toolCallId:"toolCallId"in I?I.toolCallId:void 0}))}),c.emitWithContext(x.ASSISTANT_MESSAGE_START,{parameters:{round:g,messageCount:T.length},metadata:{round:g,thinkingNodeId:v}},()=>c.buildThinkingOwnerContext(o,n,v,h),I=>{if(!I.ownerType||!I.ownerId)throw new Error("[EXECUTION] Missing owner context for thinking event");return k(c.getBaseEventService(),{ownerType:I.ownerType,ownerId:I.ownerId,ownerPath:I.ownerPath})});let R=2,S=.835,P=Math.ceil(JSON.stringify(T).length/R),$=Math.max(r.cumulativeInputTokens,P),X=ie(s.defaultModel.model);if($>X*S)return d.warn("[ROUND] Context overflow prevention \u2014 tokens exceed 83.5% of context window",{estimatedTokens:$,contextLimit:X,round:g}),t.addAssistantMessage("Context window is near capacity. Cannot process further in this round.",[],{round:g,contextOverflow:true}),true;let A=i.onTextDelta??a.provider.onTextDelta;g>1&&A?.(`
|
|
5
5
|
|
|
6
|
-
`);}t.beginAssistant();let w=a.provider.onTextDelta,Oe=v=>{t.appendStreaming(v),w?.call(a.provider,v);},le;try{le=await yt(h,s,a,m,{signal:i.signal,onTextDelta:Oe});}catch(v){if(v instanceof Error&&(v.name==="AbortError"||v.message.includes("aborted")||v.message.includes("abort")))throw t.commitAssistant("interrupted",{round:g}),v;t.discardPending();let De=v instanceof Error?v.message:String(v);return u.error("[ROUND] Provider call failed",{error:De,round:g}),t.addAssistantMessage(`Request failed: ${De}`,[],{round:g,providerError:true}),true}let{assistantResponse:L,assistantToolCalls:D}=xt(le,n,i.conversationId,g,u);await H(d,"afterProviderCall",{messages:h,responseMessage:le},u);let U=typeof L.metadata?.inputTokens=="number"?L.metadata.inputTokens:0,z=typeof L.metadata?.outputTokens=="number"?L.metadata.outputTokens:0;U>0&&(r.cumulativeInputTokens=U),L.content&&!t.getPendingContent()&&t.appendStreaming(L.content);for(let v of D)t.appendToolCall(v);let ue=i.signal?.aborted?"interrupted":"complete";if(t.commitAssistant(ue,{round:g,...U>0&&{inputTokens:U},...z>0&&{outputTokens:z},...(U>0||z>0)&&{usage:{totalTokens:U+z,inputTokens:U,outputTokens:z}}}),r.runningAssistantCount++,r.lastTrackedAssistantMessage=L,D.length===0)return u.debug(`[AGENT-FLOW-CONTROL] Round ${g} completed - no tool calls, execution finished for agent ${i.conversationId}`),c.emitAssistantMessageComplete(L,n,g,o,E,P),true;let y=await Mt(D,t,o,n,g,E,P,r,l,s,i.signal);return y.contextOverflowed&&u.warn("[ROUND] Tool results partially skipped due to context overflow \u2014 continuing to let AI respond",{added:y.addedCount,skipped:y.skippedCount,round:g}),u.debug(`Round ${g} completed - continuing to next round for agent ${i.conversationId}`),false}async function yr(r,e,t,o,n,i,s,a,l){for(;s.currentRound<10&&!(a?.aborted||(s.currentRound++,await Tr(s,10,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 Oo(r,i,n,t,s,e,l.logger);}async function Oo(r,e,t,o,n,i,s){s.warn("No final text response \u2014 forcing summary call",{maxRounds:10,currentRound:n.currentRound,conversationId:i});try{let l="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(l);let d=r.getMessages(),u=t.systemMessage??"",c=d.some(x=>x.role==="system"&&x.content===u),m=u&&!c?[{id:randomUUID(),role:"system",content:u,state:"complete",timestamp:new Date},...d]:d,g={model:e.aiProviderInfo.model};"onTextDelta"in e.provider&&typeof e.provider.onTextDelta=="function"&&(g.onTextDelta=e.provider.onTextDelta);let f=await e.provider.chat(m,g),E=r.getMessages();if(E.findIndex(x=>x.role==="user"&&x.content===l)!==-1){let x=E.filter(S=>!(S.role==="user"&&S.content===l));r.clear();for(let S of x)r.addMessage(S);}let h=typeof f.content=="string"?f.content:"";h?r.addAssistantMessage(h,[],f.metadata):r.addAssistantMessage("Maximum rounds reached. Partial results available in conversation history.");}catch(l){s.warn("Forced summary call failed",{error:l instanceof Error?l.message:String(l)});}}async function xr(r,e,t,o,n,i,s,a,l,d,u){let c={...pr(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(M.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}var Xe=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,o,n,i,s){if(this.toolExecutionService=new He(t),this.aiProviders=e,this.tools=t,this.conversationHistory=o,this.plugins=[],this.logger=R("ExecutionService"),!n)throw new Error("[EXECUTION] EventService is required");this.eventEmitter=new Be(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=Et(),s=new Date,a=vt(n,"execute"),l={messages:t,config:o,startTime:s,executionId:i,conversationId:a,...n?.sessionId&&{sessionId:n.sessionId},...n?.userId&&{userId:n.userId},...n?.metadata&&{metadata:n.metadata},...n?.signal&&{signal:n.signal}};this.eventEmitter.prepareOwnerPathBases(a),this.logger.debug("Starting execution pipeline",{executionId:i,conversationId:a,messageCount:t.length,hasContext:!!n});let d=cr(this.aiProviders,this.tools,o);this.eventEmitter.emitExecutionStartEvent(e,o,t,d,a,i);let u=mr(this.conversationHistory,a,t,o,i);try{u.addUserMessage(e,{executionId:i}),this.eventEmitter.emitUserMessageEvent(e,a,i),await H(this.plugins,"beforeRun",{input:e,...n?.metadata?{metadata:n.metadata}:{}},this.logger),gr(d);let c={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0};for(let m of u.getMessages())m.role==="assistant"&&(c.runningAssistantCount++,c.lastTrackedAssistantMessage=m);return await yr(u,a,i,l,o,d,c,n?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),xr(e,u,i,s,c,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 fr(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*dr(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:()=>Et()});}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 B=(r,e)=>`${r}.${e}`,Ct={START:B($,M.START),COMPLETE:B($,M.COMPLETE),ERROR:B($,M.ERROR)},Do={CALL_START:B(G,_.CALL_START),CALL_COMPLETE:B(G,_.CALL_COMPLETE),CALL_ERROR:B(G,_.CALL_ERROR)},Ge={EXECUTION_START:B(q,b.EXECUTION_START),EXECUTION_COMPLETE:B(q,b.EXECUTION_COMPLETE),EXECUTION_ERROR:B(q,b.EXECUTION_ERROR),CREATED:B(q,b.CREATED)},I={EXECUTION_START:Ct.START,EXECUTION_COMPLETE:Ct.COMPLETE,EXECUTION_ERROR:Ct.ERROR,TOOL_BEFORE_EXECUTE:"tool.beforeExecute",TOOL_AFTER_EXECUTE:"tool.afterExecute",TOOL_SUCCESS:"tool.success",TOOL_ERROR:Do.CALL_ERROR,CONVERSATION_START:"conversation.start",CONVERSATION_COMPLETE:"conversation.complete",CONVERSATION_ERROR:"conversation.error",AGENT_EXECUTION_START:Ge.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Ge.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Ge.EXECUTION_ERROR,AGENT_CREATED:Ge.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 bt=(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))(bt||{}),Uo=1e3,No=800,Lo=500,_o=200,ko=100,he=(i=>(i[i.CRITICAL=Uo]="CRITICAL",i[i.HIGH=No]="HIGH",i[i.NORMAL=Lo]="NORMAL",i[i.LOW=_o]="LOW",i[i.MINIMAL=ko]="MINIMAL",i))(he||{});var We=class{enabled=true;category="custom";priority=he.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=R("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(I.MODULE_INITIALIZE_START,I.MODULE_INITIALIZE_COMPLETE,I.MODULE_INITIALIZE_ERROR,I.MODULE_EXECUTION_START,I.MODULE_EXECUTION_COMPLETE,I.MODULE_EXECUTION_ERROR,I.MODULE_DISPOSE_START,I.MODULE_DISPOSE_COMPLETE,I.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 Te=class{logger;constructor(e=F){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 je=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??F;}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 Mr=class{static toProviderFormat(e,t){switch(t.toLowerCase()){case "openai":return this.toOpenAIFormat(e);case "anthropic":return this.toAnthropicFormat(e);case "google":return this.toGoogleFormat(e);default:return this.toUniversalFormat(e)}}static toOpenAIFormat(e){return e.map(t=>{let o={role:t.role,content:t.content};return t.role==="assistant"&&"toolCalls"in t&&t.toolCalls&&(o.tool_calls=t.toolCalls.map(n=>({id:n.id,type:n.type,function:n.function}))),t.role==="tool"&&"toolCallId"in t&&(o.tool_call_id=t.toolCallId,o.name=t.name),o})}static toAnthropicFormat(e){return e.filter(t=>t.role!=="system").map(t=>({role:t.role==="assistant"?"assistant":"user",content:t.content||""}))}static toGoogleFormat(e){return e.map(t=>({role:t.role==="assistant"?"model":"user",parts:[{text:t.content||""}]}))}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 W=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,t){let o=[],n=[];if(!e||typeof e!="string")return o.push("API key must be a non-empty string"),{isValid:false,errors:o};switch(t?.toLowerCase()){case "openai":e.startsWith("sk-")||n.push('OpenAI API keys typically start with "sk-"');break;case "anthropic":e.startsWith("sk-ant-")||n.push('Anthropic API keys typically start with "sk-ant-"');break}return e.length<10&&o.push("API key appears to be too short"),/\s/.test(e)&&o.push("API key should not contain whitespace"),{isValid:o.length===0,errors:o,warnings:n}}},Pt=W.validateAgentConfig,gs=W.validateUserInput,ms=W.validateProviderName,ps=W.validateModelName,fs=W.validateApiKey;function vs(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 Is(r){r&&clearInterval(r);}function Ke(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 Je(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 Ye(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 Ze(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 ye=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0;}addMessage(e){this.entries.push(ut(e)),this.applyMessageLimit();}addEntry(e){this.entries.push(e);}getHistory(){return [...this.entries]}addUserMessage(e,t,o){this.addMessage(Ke(e,{...t&&{metadata:t},...o&&{parts:o}}));}addAssistantMessage(e,t,o,n){this.addMessage(Je(e,{...t&&{toolCalls:t},...o&&{metadata:o},...n&&{parts:n}}));}addSystemMessage(e,t,o){this.addMessage(Ye(e,{...t&&{metadata:t},...o&&{parts:o}}));}addToolMessageWithId(e,t,o,n,i){this.addMessage(Ze(e,{toolCallId:t,name:o,...n&&{metadata:n},...i&&{parts:i}}));}getMessages(){return this.entries.filter(K).map(ce)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(K).length}clear(){this.entries=[];}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(K);if(e.length<=this.maxMessages)return;let t=e.map(ce),o=t.filter(ge),n=t.filter(l=>!ge(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=>!K(l)||a.has(l.id));}};var ie=class{history;toolCallIds=new Set;pendingAssistant=null;constructor(e=100){this.history=new ye({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){if(this.toolCallIds.has(t))throw new Error(`Duplicate tool message detected for toolCallId: ${t}. Tool messages must have unique toolCallIds.`);this.toolCallIds.add(t),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 Oe=I=>{t.appendStreaming(I),A?.(I);},ue;try{ue=await yt(T,s,a,m,{signal:i.signal,onTextDelta:Oe});}catch(I){if(I instanceof Error&&(I.name==="AbortError"||I.message.includes("aborted")||I.message.includes("abort")))throw t.commitAssistant("interrupted",{round:g}),I;t.discardPending();let Nt=I instanceof Error?I.message:String(I);return d.error("[ROUND] Provider call failed",{error:Nt,round:g}),t.addAssistantMessage(`Request failed: ${Nt}`,[],{round:g,providerError:true}),true}let{assistantResponse:D,assistantToolCalls:U}=xt(ue,n,i.conversationId,g,d);await H(u,"afterProviderCall",{messages:T,responseMessage:ue},d);let q=typeof D.content=="string"&&D.content.trim().length>0;if(U.length===0&&!q)return d.warn("[ROUND] Provider returned empty assistant response without tool calls",{executionId:n,conversationId:i.conversationId,round:g}),t.discardPending(),true;let L=typeof D.metadata?.inputTokens=="number"?D.metadata.inputTokens:0,G=typeof D.metadata?.outputTokens=="number"?D.metadata.outputTokens:0;L>0&&(r.cumulativeInputTokens=L),D.content&&!t.getPendingContent()&&t.appendStreaming(D.content);for(let I of U)t.appendToolCall(I);let M=i.signal?.aborted?"interrupted":"complete";if(t.commitAssistant(M,{round:g,...L>0&&{inputTokens:L},...G>0&&{outputTokens:G},...(L>0||G>0)&&{usage:{totalTokens:L+G,inputTokens:L,outputTokens:G}}}),r.runningAssistantCount++,r.lastTrackedAssistantMessage=D,U.length===0)return d.debug(`[AGENT-FLOW-CONTROL] Round ${g} completed - no tool calls, execution finished for agent ${i.conversationId}`),c.emitAssistantMessageComplete(D,n,g,o,v,h),true;let re=await Mt(U,t,o,n,g,v,h,r,l,s,i.signal);return re.contextOverflowed&&d.warn("[ROUND] Tool results partially skipped due to context overflow \u2014 continuing to let AI respond",{added:re.addedCount,skipped:re.skippedCount,round:g}),d.debug(`Round ${g} completed - continuing to next round for agent ${i.conversationId}`),false}async function Sr(r,e,t,o,n,i,s,a,l){for(;s.currentRound<10&&!(a?.aborted||(s.currentRound++,await Rr(s,10,r,e,t,o,n,i,l))||a?.aborted););let d=r.getMessages(),c=d.length>0?d[d.length-1]:void 0;c?.role==="assistant"&&typeof c.content=="string"&&c.content.length>0&&(!("toolCalls"in c)||c.toolCalls.length===0)||await Jo(r,i,n,t,s,e,o,l.logger);}async function Jo(r,e,t,o,n,i,s,a){a.warn("No final text response \u2014 forcing summary call",{maxRounds:10,currentRound:n.currentRound,conversationId:i});try{let u="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(u);let d=r.getMessages(),c=t.systemMessage??"",m=d.some(P=>P.role==="system"&&P.content===c),g=c&&!m?[{id:randomUUID(),role:"system",content:c,state:"complete",timestamp:new Date},...d]:d,p={model:e.aiProviderInfo.model},v=s.onTextDelta??e.provider.onTextDelta;v&&(p.onTextDelta=v);let h=await e.provider.chat(g,p),T=r.getMessages();if(T.findIndex(P=>P.role==="user"&&P.content===u)!==-1){let P=T.filter($=>!($.role==="user"&&$.content===u));r.clear();for(let $ of P)r.addMessage($);}let S=typeof h.content=="string"?h.content:"";S?r.addAssistantMessage(S,[],h.metadata):r.addAssistantMessage("Maximum rounds reached. Partial results available in conversation history.");}catch(u){a.warn("Forced summary call failed",{error:u instanceof Error?u.message:String(u)});}}async function wr(r,e,t,o,n,i,s,a,l,u,d){let c={...Tr(e,t,o,n.toolsExecuted),interrupted:s};return await H(l,"afterRun",{input:r,response:c.response,metadata:a?.metadata},u),u.debug("Execution pipeline completed successfully",{executionId:t,conversationId:i,duration:c.duration,tokensUsed:c.tokensUsed,toolsExecuted:c.toolsExecuted.length,rounds:n.currentRound}),d.emitExecution(x.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 Yo(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}}}var Xe=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,o,n,i,s){if(this.toolExecutionService=new He(t),this.aiProviders=e,this.tools=t,this.conversationHistory=o,this.plugins=[],this.logger=w("ExecutionService"),!n)throw new Error("[EXECUTION] EventService is required");this.eventEmitter=new Be(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=vt(),s=new Date,a=Et(n,"execute"),l=Yo(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 u=vr(this.aiProviders,this.tools,o);this.eventEmitter.emitExecutionStartEvent(e,o,t,u,a,i);let d=Ir(this.conversationHistory,a,t,o,i);try{d.addUserMessage(e,{executionId:i}),this.eventEmitter.emitUserMessageEvent(e,a,i),await H(this.plugins,"beforeRun",{input:e,...n?.metadata?{metadata:n.metadata}:{}},this.logger),Er(u);let c={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0};for(let m of d.getMessages())m.role==="assistant"&&(c.runningAssistantCount++,c.lastTrackedAssistantMessage=m);return await Sr(d,a,i,l,o,u,c,n?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),wr(e,d,i,s,c,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:d.getMessages(),executionId:i,duration:Date.now()-s.getTime(),toolsExecuted:[],success:true,interrupted:true}:(await hr(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*fr(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:()=>vt()});}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 B=(r,e)=>`${r}.${e}`,Ct={START:B(z,x.START),COMPLETE:B(z,x.COMPLETE),ERROR:B(z,x.ERROR)},Zo={CALL_START:B(W,_.CALL_START),CALL_COMPLETE:B(W,_.CALL_COMPLETE),CALL_ERROR:B(W,_.CALL_ERROR)},Ge={EXECUTION_START:B(J,b.EXECUTION_START),EXECUTION_COMPLETE:B(J,b.EXECUTION_COMPLETE),EXECUTION_ERROR:B(J,b.EXECUTION_ERROR),CREATED:B(J,b.CREATED)},E={EXECUTION_START:Ct.START,EXECUTION_COMPLETE:Ct.COMPLETE,EXECUTION_ERROR:Ct.ERROR,TOOL_BEFORE_EXECUTE:"tool.beforeExecute",TOOL_AFTER_EXECUTE:"tool.afterExecute",TOOL_SUCCESS:"tool.success",TOOL_ERROR:Zo.CALL_ERROR,CONVERSATION_START:"conversation.start",CONVERSATION_COMPLETE:"conversation.complete",CONVERSATION_ERROR:"conversation.error",AGENT_EXECUTION_START:Ge.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Ge.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Ge.EXECUTION_ERROR,AGENT_CREATED:Ge.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 bt=(d=>(d.MONITORING="monitoring",d.LOGGING="logging",d.STORAGE="storage",d.NOTIFICATION="notification",d.SECURITY="security",d.PERFORMANCE="performance",d.ERROR_HANDLING="error_handling",d.LIMITS="limits",d.EVENT_PROCESSING="event_processing",d.CUSTOM="custom",d))(bt||{}),Qo=1e3,en=800,tn=500,rn=200,on=100,Te=(i=>(i[i.CRITICAL=Qo]="CRITICAL",i[i.HIGH=en]="HIGH",i[i.NORMAL=tn]="NORMAL",i[i.LOW=rn]="LOW",i[i.MINIMAL=on]="MINIMAL",i))(Te||{});var We=class{enabled=true;category="custom";priority=Te.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=w("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(E.MODULE_INITIALIZE_START,E.MODULE_INITIALIZE_COMPLETE,E.MODULE_INITIALIZE_ERROR,E.MODULE_EXECUTION_START,E.MODULE_EXECUTION_COMPLETE,E.MODULE_EXECUTION_ERROR,E.MODULE_DISPOSE_START,E.MODULE_DISPOSE_COMPLETE,E.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 he=class{logger;constructor(e=F){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 je=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??F;}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 Ar=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})}},Pt=j.validateAgentConfig,ks=j.validateUserInput,Hs=j.validateProviderName,Vs=j.validateModelName,zs=j.validateApiKey;function Fs(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 Bs(r){r&&clearInterval(r);}function Ke(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 Je(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 Ye(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 Ze(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 ye=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0;}addMessage(e){this.entries.push(ut(e)),this.applyMessageLimit();}addEntry(e){this.entries.push(e);}getHistory(){return [...this.entries]}addUserMessage(e,t,o){this.addMessage(Ke(e,{...t&&{metadata:t},...o&&{parts:o}}));}addAssistantMessage(e,t,o,n){this.addMessage(Je(e,{...t&&{toolCalls:t},...o&&{metadata:o},...n&&{parts:n}}));}addSystemMessage(e,t,o){this.addMessage(Ye(e,{...t&&{metadata:t},...o&&{parts:o}}));}addToolMessageWithId(e,t,o,n,i){this.addMessage(Ze(e,{toolCallId:t,name:o,...n&&{metadata:n},...i&&{parts:i}}));}getMessages(){return this.entries.filter(Y).map(ce)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(Y).length}clear(){this.entries=[];}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(Y);if(e.length<=this.maxMessages)return;let t=e.map(ce),o=t.filter(ge),n=t.filter(l=>!ge(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=>!Y(l)||a.has(l.id));}};var se=class{history;toolCallIds=new Set;pendingAssistant=null;constructor(e=100){this.history=new ye({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){if(this.toolCallIds.has(t))throw new Error(`Duplicate tool message detected for toolCallId: ${t}. Tool messages must have unique toolCallIds.`);this.toolCallIds.add(t),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 K(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),Le(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear(),this.toolCallIds.clear();}};var Ho=100,Vo=50,xe=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||Ho,this.maxConversations=e.maxConversations||Vo,this.logger=R("ConversationHistory");}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new ie(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 Rt=class extends Te{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 Me=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1;}incrementErrors(){this.totalErrors+=1;}getSnapshot(){return {totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Cr(r,e){if(r.maxListeners!==void 0&&r.maxListeners<0)throw new J(`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 J(`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 J(`Invalid buffer.flushInterval option: ${r.buffer.flushInterval}. Must be a non-negative number.`,e,{bufferFlushInterval:r.buffer.flushInterval})}async function br(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 Pr(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 $o(r){let e={},t=0;for(let[o,n]of r)e[o]=n.length,t+=n.length;return {listenerCounts:e,totalListeners:t}}function Sr(r,e,t,o){let{listenerCounts:n,totalListeners:i}=$o(e),s=o.getSnapshot();return {...r,eventTypes:Array.from(e.keys()),listenerCounts:n,totalListeners:i,bufferedEvents:t,totalEmitted:s.totalEmitted,totalErrors:s.totalErrors}}function Rr(r,e,t,o,n,i,s){r.has(e)||r.set(e,[]);let a=r.get(e);if(a.length>=i)throw new J(`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 wr(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 zo=100,Ce=class extends We{name="EventEmitterPlugin";version="1.0.0";pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=R("EventEmitterPlugin"),this.metrics=e.metrics??new Me,Cr(e,this.name),this.pluginOptions={enabled:e.enabled??true,events:e.events??[I.AGENT_EXECUTION_START,I.AGENT_EXECUTION_COMPLETE,I.AGENT_EXECUTION_ERROR,I.TOOL_BEFORE_EXECUTE,I.TOOL_AFTER_EXECUTE,I.TOOL_SUCCESS,I.TOOL_ERROR],maxListeners:e.maxListeners??zo,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??he.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(I.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(I.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(I.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(I.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(I.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?I.TOOL_ERROR:I.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(I.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(o.result||"")}});}}async onError(e,t){await this.emit(I.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 Rr(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 wr(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 Pr(e,this.handlers,this.pluginOptions.async,(t,o)=>this.off(t,o),(t,o)=>br(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 Sr(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 Ar(){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 Or(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 Dr(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 g=u.indexOf(d);s.push(u.slice(g).concat([d]));return}if(o.has(d))return;let c=e(d);if(!c)return;n.add(d);let m=[...u,d];if(c.dependencies)for(let g of c.dependencies)(r.includes(g)||t(g))&&l(g,m);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 Ur(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 Nr(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 Qe=class{registeredTypes=new Map;logger;constructor(){this.logger=R("ModuleDescriptorRegistry"),this.registerBuiltinTypes();}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new p(`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 p(`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 Or(e,t=>this.getType(t))}resolveDependencies(e){return Dr(e,t=>this.getType(t),t=>this.hasType(t))}checkCompatibility(e){return Ur(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 Ar())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 Nr(this.registeredTypes)}};function Lr(r,e,t){if(!r.name||r.name.trim()==="")throw new p("Module name is required");if(!r.version||r.version.trim()==="")throw new p("Module version is required");let o=r.getModuleType(),n=e.validateTypeDescriptor(o);if(!n.valid)throw new p(`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 _r(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 p(`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 kr(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 Hr(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 Vr={REGISTERED:"module.registered",UNREGISTERED:"module.unregistered"},et=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 Qe,this.logger=R("ModuleRegistry");}async registerModule(e,t={}){if(this.isDisposing)throw new p("Cannot register modules during disposal");if(Lr(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new p(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==false&&await _r(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(Vr.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=kr(e,this.modules);if(o.length>0)throw new p(`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(Vr.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),true}async initializeModule(e,t){let o=this.modules.get(e);if(!o)throw new p(`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 p(`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 p(`Module '${e}' not found`);if(!o.isInitialized())throw new p(`Module '${e}' is not initialized`);if(!o.isEnabled())throw new p(`Module '${e}' is disabled`);let n=this.moduleStats.get(e),i=Date.now();try{if(!o.execute)throw new p(`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 Hr(this.modules,this.moduleStats)}};var tt=class extends re{providers=new Map;currentProvider;currentModel;constructor(){super();}async doInitialize(){C.debug("AIProviders initialized");}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),C.debug(`Closed AI provider: ${e}`);}catch(o){C.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,C.debug("AIProviders disposed");}addProvider(e,t){this.ensureInitialized();let o=W.validateProviderName(e);if(!o.isValid)throw new T(`Invalid provider name: ${o.errors.join(", ")}`);if(!t||typeof t!="object"||t===null||Array.isArray(t))throw new T("Provider must be a valid object instance");if(!t.name||typeof t.name!="string")throw new T("Provider must have a valid name");if(typeof t.chat!="function")throw new T("Provider must have a chat method");this.providers.has(e)&&C.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),C.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)){C.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(o=>{C.warn(`Failed to close provider ${e}`,{error:o.message});}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,C.debug(`Cleared current provider selection after removing "${e}"`)),C.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 p(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,C.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 p(`Provider "${e}" is not registered`);return C.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 be=class{tools=new Map;register(e){if(!e.schema?.name)throw new T("Tool must have a valid schema with name");let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&C.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),C.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)){C.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),C.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 C.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(),C.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 T("Tool schema must have a valid name");if(!e.description||typeof e.description!="string")throw new T("Tool schema must have a description");if(!e.parameters||typeof e.parameters!="object"||e.parameters===null||Array.isArray(e.parameters))throw new T("Tool schema must have parameters object");if(e.parameters.type!=="object")throw new T('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 T(`Parameter "${t}" must have a type`);if(!["string","number","boolean","array","object"].includes(o.type))throw new T(`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 T(`Required parameter "${o}" is not defined in properties`)}}};var Pe=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 T(`Invalid parameters for tool "${o}": ${a.join(", ")}`)}let n=Date.now(),i;try{i=await this.fn(e,t);}catch(a){throw a instanceof V||a instanceof T?a:new V(`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 T("Tool schema is required");if(!this.fn||typeof this.fn!="function")throw new T("Tool function is required and must be a function");if(!this.schema.name)throw new T("Tool schema must have a name")}};var rt=class extends re{registry;allowedTools;constructor(){super(),this.registry=new be;}async doInitialize(){C.debug("Tools initialized");}async doDispose(){this.registry.clear(),delete this.allowedTools,C.debug("Tools disposed");}addTool(e,t){this.ensureInitialized();let o=new Pe(e,t);this.registry.register(o),C.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 V(`Tool "${e}" is not in the allowed tools list`,e);let n=this.registry.get(e);if(!n)throw new V(`Tool "${e}" is not registered`,e);let i;try{i=await n.execute(t,o);}catch(s){throw s instanceof Error?new V(s.message,e,s):new V(String(s),e)}if(!i.success)throw new V(i.error||"Tool execution failed",e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(i)});if(typeof i.data>"u")throw new V("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],C.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 Se=class{templates=new Map;logger;constructor(){this.logger=R("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 Xo=100,Go=.7,Wo=36,jo=8;function $r(r){return {defaultModel:r.defaultModel||"gpt-4",defaultProvider:r.defaultProvider||"openai",maxConcurrentAgents:r.maxConcurrentAgents||Xo,defaultSystemMessage:r.defaultSystemMessage||"You are a helpful AI assistant.",strictValidation:r.strictValidation??true}}function zr(r,e){if(!r.aiProviders||r.aiProviders.length===0)throw new p("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||wt(),name:r.name||"Unnamed Agent",aiProviders:r.aiProviders,defaultModel:{provider:t.provider,model:t.model,temperature:t.temperature??Go,...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 wt(){let r=Date.now(),e=Math.random().toString(Wo).substring(2,jo);return `agent_${r}_${e}`}function Fr(r,e){return r.totalCreated++,r.activeCount++,e?r.fromTemplates++:r.customConfigured++,r.templateUsageRatio=r.totalCreated>0?r.fromTemplates/r.totalCreated:0,r}var Re=class{agentTemplates;initialized=false;logger;options;activeAgents;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new Se,this.logger=R("AgentFactory"),this.options=$r(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 p(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);if(n=zr(t,this.options),this.options.strictValidation){let l=Pt(n);if(!l.isValid)throw new T(`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=wt();return this.activeAgents.set(a,i),Fr(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 p(`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 Pt(e)}};function Br(r){if(!r.name)throw new p("Agent name is required",{component:"Robota"});if(!r.aiProviders||r.aiProviders.length===0)throw new p("At least one AI provider is required",{component:"Robota"});if(!r.defaultModel)throw new p("Default model configuration is required",{component:"Robota"});if(!r.defaultModel.provider||!r.defaultModel.model)throw new p("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 p(`Duplicate AI provider names: ${t.join(", ")}`,{component:"Robota",duplicates:t});if(!e.includes(r.defaultModel.provider))throw new p(`Default provider '${r.defaultModel.provider}' not found in AI providers list. Available: ${e.join(", ")}`,{component:"Robota",defaultProvider:r.defaultModel.provider,availableProviders:e})}var ot=class{constructor(e,t,o,n,i,s,a,l,d,u,c,m,g){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=m;this.emitAgentEvent=g;}async updateTools(e){if(await this.ensureReady(),!Array.isArray(e))throw new p("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(b.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 p("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 p("Both provider and model are required",{component:"Robota"});if(!this.isReady())throw new p("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 p(`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 p("Agent must be fully initialized before getting model configuration",{component:"Robota"});let e=this.getAIProviders().getCurrentProvider();if(!e)throw new p("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 nt=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 it=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 p("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 Xr(r){let e=new nt(r.getName(),r.getModuleRegistry(),r.getLogger(),r.getIsFullyInitialized,r.ensureFullyInitialized),t=new it(r.getLogger(),r.getIsFullyInitialized,r.getExecutionService),o=new ot(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 Q=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 qo("SHA-256","TEXT");return t.update(e),t.getHash("HEX")}};var we=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new Q;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 ke(`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 Ae=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 Ko(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 m of e.aiProviders)t.addProvider(m.name,m);if(e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),e.modules){for(let m of e.modules)await s.registerModule(m,{autoInitialize:true,validateDependencies:true});d.debug("Modules registered and initialized",{moduleCount:e.modules.length,moduleNames:e.modules.map(m=>m.name)});}if(e.tools)for(let m of e.tools){m instanceof je&&l&&m.setEventService(l);let g=async(f,E)=>{if(!E)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await m.execute(f,E)).data};o.addTool(m.schema,g),d.debug("Tool registered during initialization",{toolName:m.schema.name});}let u;if(e.cache?.enabled){let m=new we({maxEntries:e.cache.maxEntries,ttlMs:e.cache.ttlMs});u=new Ae(m,new Q);}let c=new Xe(t,o,i,l,e.executionContext,u);if(e.plugins)for(let m of e.plugins)c.registerPlugin(m),m.subscribeToModuleEvents&&(await m.subscribeToModuleEvents(a),d.debug("Plugin subscribed to module events",{pluginName:m.name}));return d.debug("Robota initialization completed successfully with independent managers"),c}async function Gr(r){try{let e=await Ko(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}}async function Wr(r,e,t={}){try{r.emitAgentEvent(b.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,{conversationId:r.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal}});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(b.EXECUTION_COMPLETE,{}),i.response;if(!i.success&&i.error)throw i.error;return r.emitAgentEvent(b.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(b.EXECUTION_ERROR,{error:o instanceof Error?o.message:String(o)}),o}}async function*jr(r,e,t={}){try{r.emitAgentEvent(b.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(b.EXECUTION_ERROR,{error:o instanceof Error?o.message:String(o)}),o}finally{r.emitAgentEvent(b.EXECUTION_COMPLETE,{});}}function qr(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 Kr(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 Jr(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 Yr(r,e){return r.getConversationStore(e).getHistory()}function Zr(r,e,t){r.getConversationStore(e).addEntry(t);}function Qr(r,e){r.getConversationStore(e).clear();}function eo(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 to(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(b.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 ro(r,e,t,o,n){Z(r)||r.emit(o,{timestamp:new Date,...n},{ownerType:q,ownerId:e,ownerPath:At(e,t)});}function oo(){return new Ce({enabled:true,events:[I.MODULE_INITIALIZE_START,I.MODULE_INITIALIZE_COMPLETE,I.MODULE_INITIALIZE_ERROR,I.MODULE_EXECUTION_START,I.MODULE_EXECUTION_COMPLETE,I.MODULE_EXECUTION_ERROR,I.MODULE_DISPOSE_START,I.MODULE_DISPOSE_COMPLETE,I.MODULE_DISPOSE_ERROR]})}function At(r,e){return [...e?.ownerPath?.length?e.ownerPath.map(o=>({...o})):[],{type:"agent",id:r}]}var Jo=36,Yo=9,Ot=class extends Ne{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(Jo).substr(2,Yo)}`,this.logger=R("Robota"),this.startTime=Date.now(),e.logging&&(e.logging.level&&ct(e.logging.level),e.logging.enabled===false&&ct("silent")),Br(e),this.aiProviders=new tt,this.tools=new rt,this.agentFactory=new Re,this.conversationHistory=new xe,this.eventEmitter=oo(),this.moduleRegistry=new et(this.eventEmitter),this.eventService=e.eventService||fe,this.agentEventService=k(this.eventService,{ownerType:"agent",ownerId:this.conversationId,ownerPath:At(this.conversationId,this.config.executionContext)});let t=Xr({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,to(this.config,(o,n)=>this.emitAgentEvent(o,n));}async run(e,t={}){return await this.ensureFullyInitialized(),Wr(this.executionDeps(),e,t)}async*runStream(e,t={}){await this.ensureFullyInitialized(),yield*jr(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 Jr(this.conversationHistory,this.conversationId)}getFullHistory(){return Yr(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Zr(this.conversationHistory,this.conversationId,e);}clearHistory(){Qr(this.conversationHistory,this.conversationId);}injectMessage(e,t,o){eo(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 qr({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 Kr({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 Gr({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){ro(this.agentEventService,this.conversationId,this.config.executionContext,e,t);}};var Dt=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 N(r){if(!(!r||typeof r!="object"||Array.isArray(r)||r instanceof Date))return r}function Ut(r){return typeof r=="string"?r.length:0}var Zo=36,Qo=9,st=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:b.EXECUTION_START,completeEvent:b.EXECUTION_COMPLETE,errorEvent:b.EXECUTION_ERROR,extractMetadata:(e,t,o)=>({inputLength:Ut(o[0]),conversationId:e.conversationId,options:N(o[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod("runStream",{startEvent:b.EXECUTION_START,completeEvent:b.EXECUTION_COMPLETE,errorEvent:b.EXECUTION_ERROR,extractMetadata:(e,t,o)=>({inputLength:Ut(o[0]),conversationId:e.conversationId,streaming:true,options:N(o[1])||{}})})),this.config.sourceType==="team"&&(this.configureMethod("assignTask",{startEvent:Ee.ASSIGNED,completeEvent:Ee.COMPLETED,errorEvent:M.ERROR,extractMetadata:(e,t,o)=>{let n=N(o[0]);return {taskDescription:n?.jobDescription,agentTemplate:n?.agentTemplate,priority:n?.priority,allowFurtherDelegation:n?.allowFurtherDelegation}},extractResult:e=>({result:N(e)?.result,agentId:N(e)?.agentId,metadata:N(e)?.metadata})}),this.configureMethod("execute",{startEvent:M.START,completeEvent:M.COMPLETE,errorEvent:M.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:N(e.schema)?.name||e.constructor.name,parameters:o[0],parametersCount:N(o[0])?Object.keys(N(o[0])||{}).length:0,context:o[1]}),extractResult:e=>({result:typeof N(e)?.data=="string"?N(e)?.data||"":JSON.stringify(N(e)?.data),success:N(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 f=a.extractMetadata?.(c,s,l)||{};this.emitEvent(a.startEvent,{timestamp:new Date,metadata:{...f,executionId:u,methodName:s,phase:"start"}});}let m=await i.apply(t,l),g=Date.now()-d;if(a.completeEvent){let f=a.extractResult?.(m)||{},E=a.extractMetadata?.(c,s,l)||{};this.emitEvent(a.completeEvent,{timestamp:new Date,...f,metadata:{...E,executionId:u,methodName:s,duration:g,phase:"complete",success:!0}});}return m}catch(m){let g=Date.now()-d;if(a.errorEvent){let f=a.extractMetadata?.(c,s,l)||{};this.emitEvent(a.errorEvent,{timestamp:new Date,error:m instanceof Error?m.message:String(m),metadata:{...f,executionId:u,methodName:s,duration:g,phase:"error",errorName:m instanceof Error?m.name:"UnknownError",success:false}});}throw m}}}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(Zo).substr(2,Qo)}`}};function no(r,e){let t=new st(e);return t.configureStandardMethods(),t.wrap(r)}function en(r,e,t){return function(o){return no(o,{eventService:r,sourceType:e,sourceId:t})}}var io={safe:"plan",moderate:"default",full:"acceptEdits"};var at={plan:{Bash:"deny",Read:"auto",Write:"deny",Edit:"deny",Glob:"auto",Grep:"auto"},default:{Bash:"approve",Read:"auto",Write:"approve",Edit:"approve",Glob:"auto",Grep:"auto"},acceptEdits:{Bash:"approve",Read:"auto",Write:"auto",Edit:"auto",Glob:"auto",Grep:"auto"},bypassPermissions:{Bash:"auto",Read:"auto",Write:"auto",Edit:"auto",Glob:"auto",Grep:"auto"}},lt={plan:"deny",default:"approve",acceptEdits:"approve",bypassPermissions:"auto"};function tn(r){let e=r.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,".+").replace(/\*/g,".*");return new RegExp(`^${e}$`)}function rn(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 on(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 so(r,e,t){let o=rn(t);if(o.toolName!==r)return false;if(o.argPattern===void 0)return true;let n=on(r,e);return n===void 0?false:tn(o.argPattern).test(n)}function ao(r,e,t,o={}){let{allow:n=[],deny:i=[]}=o;for(let l of i)if(so(r,e,l))return "deny";for(let l of n)if(so(r,e,l))return "auto";let a=at[t][r];return a!==void 0?a:lt[t]}var sn=10,se=class{type="command";execute(e,t){let n=(e.timeout??sn)*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",m=>a.push(m)),u.stderr.on("data",m=>l.push(m)),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",m=>{d||(d=true,clearTimeout(c),s({exitCode:m??1,stdout:Buffer.concat(a).toString("utf8"),stderr:Buffer.concat(l).toString("utf8")}));}),u.on("error",m=>{d||(d=true,clearTimeout(c),s({exitCode:1,stdout:"",stderr:m.message}));});})}};function an(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 ae=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]=an(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 ln(){return [new se,new ae]}function un(r,e){if(!r.matcher)return true;if(!e)return false;try{return new RegExp(r.matcher).test(e)}catch{return r.matcher===e}}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??ln(),s=new Map;for(let l of i)s.set(l.type,l);let a=[];for(let l of n){if(!un(l,t.tool_name))continue;let d=l.env?{...t,env:{...t.env,...l.env}}:t;for(let u of l.hooks){let c=s.get(u.type);if(!c)continue;let m=await c.execute(u,d);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(`
|
|
8
|
+
[This response was interrupted by the user]`),K(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),Le(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear(),this.toolCallIds.clear();}};var nn=100,sn=50,xe=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||nn,this.maxConversations=e.maxConversations||sn,this.logger=w("ConversationHistory");}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new se(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 St=class extends he{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 Me=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1;}incrementErrors(){this.totalErrors+=1;}getSnapshot(){return {totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Or(r,e){if(r.maxListeners!==void 0&&r.maxListeners<0)throw new Z(`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 Z(`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 Z(`Invalid buffer.flushInterval option: ${r.buffer.flushInterval}. Must be a non-negative number.`,e,{bufferFlushInterval:r.buffer.flushInterval})}async function Dr(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 Ur(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 an(r){let e={},t=0;for(let[o,n]of r)e[o]=n.length,t+=n.length;return {listenerCounts:e,totalListeners:t}}function Nr(r,e,t,o){let{listenerCounts:n,totalListeners:i}=an(e),s=o.getSnapshot(),a=r.enabled,l=r.calls,u=r.errors;return {enabled:a,calls:l,errors:u,eventTypes:Array.from(e.keys()),listenerCounts:n,totalListeners:i,bufferedEvents:t,totalEmitted:s.totalEmitted,totalErrors:s.totalErrors}}function Lr(r,e,t,o,n,i,s){r.has(e)||r.set(e,[]);let a=r.get(e);if(a.length>=i)throw new Z(`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 _r(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 ln=100,Ce=class extends We{name="EventEmitterPlugin";version="1.0.0";pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=w("EventEmitterPlugin"),this.metrics=e.metrics??new Me,Or(e,this.name),this.pluginOptions={enabled:e.enabled??true,events:e.events??[E.AGENT_EXECUTION_START,E.AGENT_EXECUTION_COMPLETE,E.AGENT_EXECUTION_ERROR,E.TOOL_BEFORE_EXECUTE,E.TOOL_AFTER_EXECUTE,E.TOOL_SUCCESS,E.TOOL_ERROR],maxListeners:e.maxListeners??ln,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??Te.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(E.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(E.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(E.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(E.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(E.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?E.TOOL_ERROR:E.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(E.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(o.result||"")}});}}async onError(e,t){await this.emit(E.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 Lr(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 _r(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 Ur(e,this.handlers,this.pluginOptions.async,(t,o)=>this.off(t,o),(t,o)=>Dr(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 Nr(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 kr(){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 Hr(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 Vr(r,e,t){let o=new Set,n=new Set,i=[],s=[],a=[];for(let u of r){let d=e(u);if(!d){a.push(u);continue}if(d.dependencies)for(let c of d.dependencies)!t(c)&&!a.includes(c)&&a.push(c);}let l=(u,d=[])=>{if(n.has(u)){let g=d.indexOf(u);s.push(d.slice(g).concat([u]));return}if(o.has(u))return;let c=e(u);if(!c)return;n.add(u);let m=[...d,u];if(c.dependencies)for(let g of c.dependencies)(r.includes(g)||t(g))&&l(g,m);n.delete(u),o.add(u),i.push(u);};for(let u of r)o.has(u)||l(u);return {resolved:a.length===0&&s.length===0,order:i,circularDependencies:s,missingDependencies:a}}function zr(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 u=l+1;u<a.length;u++){let d=a[l],c=a[u];d&&c&&t.push({module1:d,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 $r(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 Qe=class{registeredTypes=new Map;logger;constructor(){this.logger=w("ModuleDescriptorRegistry"),this.registerBuiltinTypes();}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new f(`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 f(`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 Hr(e,t=>this.getType(t))}resolveDependencies(e){return Vr(e,t=>this.getType(t),t=>this.hasType(t))}checkCompatibility(e){return zr(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 kr())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 $r(this.registeredTypes)}};function Fr(r,e,t){if(!r.name||r.name.trim()==="")throw new f("Module name is required");if(!r.version||r.version.trim()==="")throw new f("Module version is required");let o=r.getModuleType(),n=e.validateTypeDescriptor(o);if(!n.valid)throw new f(`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 Br(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 f(`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 Xr(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 Gr(r,e){let t={},o=0,n=0,i=0,s=0,a=0,l=0;for(let u of r.values()){let d=u.getModuleType().type;t[d]=(t[d]||0)+1,u.isInitialized()&&o++,u.isEnabled()&&n++;}for(let u of e.values())i+=u.totalExecutions,s+=u.successfulExecutions,a+=u.failedExecutions,l+=u.totalExecutionTime;return {totalModules:r.size,initializedModules:o,enabledModules:n,modulesByType:t,totalExecutions:i,totalSuccessfulExecutions:s,totalFailedExecutions:a,averageExecutionTime:i>0?l/i:0}}var Wr={REGISTERED:"module.registered",UNREGISTERED:"module.unregistered"},et=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 Qe,this.logger=w("ModuleRegistry");}async registerModule(e,t={}){if(this.isDisposing)throw new f("Cannot register modules during disposal");if(Fr(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new f(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==false&&await Br(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(Wr.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=Xr(e,this.modules);if(o.length>0)throw new f(`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(Wr.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),true}async initializeModule(e,t){let o=this.modules.get(e);if(!o)throw new f(`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((u,d)=>{a=setTimeout(()=>{d(new Error(`Module '${e}' initialization timed out after ${t}ms`));},t);});await Promise.race([i.then(u=>(clearTimeout(a),u)),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 f(`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 f(`Module '${e}' not found`);if(!o.isInitialized())throw new f(`Module '${e}' is not initialized`);if(!o.isEnabled())throw new f(`Module '${e}' is disabled`);let n=this.moduleStats.get(e),i=Date.now();try{if(!o.execute)throw new f(`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 Gr(this.modules,this.moduleStats)}};var tt=class extends oe{providers=new Map;currentProvider;currentModel;constructor(){super();}async doInitialize(){C.debug("AIProviders initialized");}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),C.debug(`Closed AI provider: ${e}`);}catch(o){C.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,C.debug("AIProviders disposed");}addProvider(e,t){this.ensureInitialized();let o=j.validateProviderName(e);if(!o.isValid)throw new y(`Invalid provider name: ${o.errors.join(", ")}`);if(!t||typeof t!="object"||t===null||Array.isArray(t))throw new y("Provider must be a valid object instance");if(!t.name||typeof t.name!="string")throw new y("Provider must have a valid name");if(typeof t.chat!="function")throw new y("Provider must have a chat method");this.providers.has(e)&&C.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),C.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)){C.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(o=>{C.warn(`Failed to close provider ${e}`,{error:o.message});}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,C.debug(`Cleared current provider selection after removing "${e}"`)),C.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 f(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,C.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 f(`Provider "${e}" is not registered`);return C.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 be=class{tools=new Map;register(e){if(!e.schema?.name)throw new y("Tool must have a valid schema with name");let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&C.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),C.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)){C.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),C.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 C.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(),C.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 y("Tool schema must have a valid name");if(!e.description||typeof e.description!="string")throw new y("Tool schema must have a description");if(!e.parameters||typeof e.parameters!="object"||e.parameters===null||Array.isArray(e.parameters))throw new y("Tool schema must have parameters object");if(e.parameters.type!=="object")throw new y('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 y(`Parameter "${t}" must have a type`);if(!["string","number","boolean","array","object"].includes(o.type))throw new y(`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 y(`Required parameter "${o}" is not defined in properties`)}}};var Pe=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 y(`Invalid parameters for tool "${o}": ${a.join(", ")}`)}let n=Date.now(),i;try{i=await this.fn(e,t);}catch(a){throw a instanceof V||a instanceof y?a:new V(`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 y("Tool schema is required");if(!this.fn||typeof this.fn!="function")throw new y("Tool function is required and must be a function");if(!this.schema.name)throw new y("Tool schema must have a name")}};var rt=class extends oe{registry;allowedTools;constructor(){super(),this.registry=new be;}async doInitialize(){C.debug("Tools initialized");}async doDispose(){this.registry.clear(),delete this.allowedTools,C.debug("Tools disposed");}addTool(e,t){this.ensureInitialized();let o=new Pe(e,t);this.registry.register(o),C.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 V(`Tool "${e}" is not in the allowed tools list`,e);let n=this.registry.get(e);if(!n)throw new V(`Tool "${e}" is not registered`,e);let i;try{i=await n.execute(t,o);}catch(s){throw s instanceof Error?new V(s.message,e,s):new V(String(s),e)}if(!i.success)throw new V(i.error||"Tool execution failed",e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(i)});if(typeof i.data>"u")throw new V("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],C.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 Re=class{templates=new Map;logger;constructor(){this.logger=w("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=u=>{u in t&&i[u]!==t[u]&&(n=true,i[u]!==void 0&&o.push(`Override: ${u} changed from "${String(i[u])}" to "${String(t[u])}"`));};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 cn=100,gn=.7,mn=36,pn=8;function jr(r){return {defaultModel:r.defaultModel||"gpt-4",defaultProvider:r.defaultProvider||"openai",maxConcurrentAgents:r.maxConcurrentAgents||cn,defaultSystemMessage:r.defaultSystemMessage||"You are a helpful AI assistant.",strictValidation:r.strictValidation??true}}function qr(r,e){if(!r.aiProviders||r.aiProviders.length===0)throw new f("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||wt(),name:r.name||"Unnamed Agent",aiProviders:r.aiProviders,defaultModel:{provider:t.provider,model:t.model,temperature:t.temperature??gn,...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 wt(){let r=Date.now(),e=Math.random().toString(mn).substring(2,pn);return `agent_${r}_${e}`}function Kr(r,e){return r.totalCreated++,r.activeCount++,e?r.fromTemplates++:r.customConfigured++,r.templateUsageRatio=r.totalCreated>0?r.fromTemplates/r.totalCreated:0,r}var Se=class{agentTemplates;initialized=false;logger;options;activeAgents;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new Re,this.logger=w("AgentFactory"),this.options=jr(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 f(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);if(n=qr(t,this.options),this.options.strictValidation){let l=Pt(n);if(!l.isValid)throw new y(`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=wt();return this.activeAgents.set(a,i),Kr(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 f(`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 Pt(e)}};function Jr(r){if(!r.name)throw new f("Agent name is required",{component:"Robota"});if(!r.aiProviders||r.aiProviders.length===0)throw new f("At least one AI provider is required",{component:"Robota"});if(!r.defaultModel)throw new f("Default model configuration is required",{component:"Robota"});if(!r.defaultModel.provider||!r.defaultModel.model)throw new f("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 f(`Duplicate AI provider names: ${t.join(", ")}`,{component:"Robota",duplicates:t});if(!e.includes(r.defaultModel.provider))throw new f(`Default provider '${r.defaultModel.provider}' not found in AI providers list. Available: ${e.join(", ")}`,{component:"Robota",defaultProvider:r.defaultModel.provider,availableProviders:e})}var ot=class{constructor(e,t,o,n,i,s,a,l,u,d,c,m,g){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=u;this.bumpConfigVersion=d;this.getConfigUpdatedAt=c;this.setConfigUpdatedAt=m;this.emitAgentEvent=g;}async updateTools(e){if(await this.ensureReady(),!Array.isArray(e))throw new f("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(d,c)=>{if(!c)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await a.execute(d,c)).data};this.getTools().addTool(a.schema,l);let u=a.schema.name;typeof u=="string"&&u.length>0&&o.push(u);}let i=this.getConfig();i.tools=e,this.setConfig(i);let s=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(b.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 f("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 f("Both provider and model are required",{component:"Robota"});if(!this.isReady())throw new f("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 f(`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 f("Agent must be fully initialized before getting model configuration",{component:"Robota"});let e=this.getAIProviders().getCurrentProvider();if(!e)throw new f("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 nt=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 it=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 f("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 Yr(r){let e=new nt(r.getName(),r.getModuleRegistry(),r.getLogger(),r.getIsFullyInitialized,r.ensureFullyInitialized),t=new it(r.getLogger(),r.getIsFullyInitialized,r.getExecutionService),o=new ot(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 te=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 fn("SHA-256","TEXT");return t.update(e),t.getHash("HEX")}};var we=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new te;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 ke(`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 Ae=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 vn(r){let{config:e,aiProviders:t,tools:o,agentFactory:n,conversationHistory:i,moduleRegistry:s,eventEmitter:a,eventService:l,logger:u}=r;if(u.debug("Starting Robota initialization with independent managers"),await Promise.all([t.initialize(),o.initialize(),n.initialize()]),e.aiProviders)for(let m of e.aiProviders)t.addProvider(m.name,m);if(e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),e.modules){for(let m of e.modules)await s.registerModule(m,{autoInitialize:true,validateDependencies:true});u.debug("Modules registered and initialized",{moduleCount:e.modules.length,moduleNames:e.modules.map(m=>m.name)});}if(e.tools)for(let m of e.tools){m instanceof je&&l&&m.setEventService(l);let g=async(p,v)=>{if(!v)throw new Error("[ROBOTA] Missing ToolExecutionContext for tool execution");return (await m.execute(p,v)).data};o.addTool(m.schema,g),u.debug("Tool registered during initialization",{toolName:m.schema.name});}let d;if(e.cache?.enabled){let m=new we({maxEntries:e.cache.maxEntries,ttlMs:e.cache.ttlMs});d=new Ae(m,new te);}let c=new Xe(t,o,i,l,e.executionContext,d);if(e.plugins)for(let m of e.plugins)c.registerPlugin(m),m.subscribeToModuleEvents&&(await m.subscribeToModuleEvents(a),u.debug("Plugin subscribed to module events",{pluginName:m.name}));return u.debug("Robota initialization completed successfully with independent managers"),c}async function Zr(r){try{let e=await vn(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 En(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}}}async function Qr(r,e,t={}){try{r.emitAgentEvent(b.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,En(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(b.EXECUTION_COMPLETE,{}),i.response;if(!i.success&&i.error)throw i.error;return r.emitAgentEvent(b.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(b.EXECUTION_ERROR,{error:o instanceof Error?o.message:String(o)}),o}}async function*eo(r,e,t={}){try{r.emitAgentEvent(b.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(b.EXECUTION_ERROR,{error:o instanceof Error?o.message:String(o)}),o}finally{r.emitAgentEvent(b.EXECUTION_COMPLETE,{});}}function to(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(d=>d.name):[],i=r.getPluginNames(),s=r.getModuleNames(),a=r.getHistory(),l=Date.now()-r.startTime,u={user:0,assistant:0,system:0,tool:0};for(let d of a)d.role in u&&u[d.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:u.user,assistantMessages:u.assistant,systemMessages:u.system,toolMessages:u.tool},uptime:l}}async function ro(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 oo(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 no(r,e){return r.getConversationStore(e).getHistory()}function io(r,e,t){r.getConversationStore(e).addEntry(t);}function so(r,e){r.getConversationStore(e).clear();}function ao(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 lo(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(b.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 uo(r,e,t,o,n){ee(r)||r.emit(o,{timestamp:new Date,...n},{ownerType:J,ownerId:e,ownerPath:At(e,t)});}function co(){return new Ce({enabled:true,events:[E.MODULE_INITIALIZE_START,E.MODULE_INITIALIZE_COMPLETE,E.MODULE_INITIALIZE_ERROR,E.MODULE_EXECUTION_START,E.MODULE_EXECUTION_COMPLETE,E.MODULE_EXECUTION_ERROR,E.MODULE_DISPOSE_START,E.MODULE_DISPOSE_COMPLETE,E.MODULE_DISPOSE_ERROR]})}function At(r,e){return [...e?.ownerPath?.length?e.ownerPath.map(o=>({...o})):[],{type:"agent",id:r}]}var In=36,Tn=9,Ot=class extends Ne{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(In).substr(2,Tn)}`,this.logger=w("Robota"),this.startTime=Date.now(),e.logging&&(e.logging.level&&ct(e.logging.level),e.logging.enabled===false&&ct("silent")),Jr(e),this.aiProviders=new tt,this.tools=new rt,this.agentFactory=new Se,this.conversationHistory=new xe,this.eventEmitter=co(),this.moduleRegistry=new et(this.eventEmitter),this.eventService=e.eventService||fe,this.agentEventService=k(this.eventService,{ownerType:"agent",ownerId:this.conversationId,ownerPath:At(this.conversationId,this.config.executionContext)});let t=Yr({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,lo(this.config,(o,n)=>this.emitAgentEvent(o,n));}async run(e,t={}){return await this.ensureFullyInitialized(),Qr(this.executionDeps(),e,t)}async*runStream(e,t={}){await this.ensureFullyInitialized(),yield*eo(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 oo(this.conversationHistory,this.conversationId)}getFullHistory(){return no(this.conversationHistory,this.conversationId)}addHistoryEntry(e){io(this.conversationHistory,this.conversationId,e);}clearHistory(){so(this.conversationHistory,this.conversationId);}injectMessage(e,t,o){ao(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 to({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 ro({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 Zr({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){uo(this.agentEventService,this.conversationId,this.config.executionContext,e,t);}};var Dt=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 N(r){if(!(!r||typeof r!="object"||Array.isArray(r)||r instanceof Date))return r}function Ut(r){return typeof r=="string"?r.length:0}var hn=36,yn=9,st=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:b.EXECUTION_START,completeEvent:b.EXECUTION_COMPLETE,errorEvent:b.EXECUTION_ERROR,extractMetadata:(e,t,o)=>({inputLength:Ut(o[0]),conversationId:e.conversationId,options:N(o[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod("runStream",{startEvent:b.EXECUTION_START,completeEvent:b.EXECUTION_COMPLETE,errorEvent:b.EXECUTION_ERROR,extractMetadata:(e,t,o)=>({inputLength:Ut(o[0]),conversationId:e.conversationId,streaming:true,options:N(o[1])||{}})})),this.config.sourceType==="team"&&(this.configureMethod("assignTask",{startEvent:ve.ASSIGNED,completeEvent:ve.COMPLETED,errorEvent:x.ERROR,extractMetadata:(e,t,o)=>{let n=N(o[0]);return {taskDescription:n?.jobDescription,agentTemplate:n?.agentTemplate,priority:n?.priority,allowFurtherDelegation:n?.allowFurtherDelegation}},extractResult:e=>({result:N(e)?.result,agentId:N(e)?.agentId,metadata:N(e)?.metadata})}),this.configureMethod("execute",{startEvent:x.START,completeEvent:x.COMPLETE,errorEvent:x.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:N(e.schema)?.name||e.constructor.name,parameters:o[0],parametersCount:N(o[0])?Object.keys(N(o[0])||{}).length:0,context:o[1]}),extractResult:e=>({result:typeof N(e)?.data=="string"?N(e)?.data||"":JSON.stringify(N(e)?.data),success:N(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 u=Date.now(),d=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:d,methodName:s,phase:"start"}});}let m=await i.apply(t,l),g=Date.now()-u;if(a.completeEvent){let p=a.extractResult?.(m)||{},v=a.extractMetadata?.(c,s,l)||{};this.emitEvent(a.completeEvent,{timestamp:new Date,...p,metadata:{...v,executionId:d,methodName:s,duration:g,phase:"complete",success:!0}});}return m}catch(m){let g=Date.now()-u;if(a.errorEvent){let p=a.extractMetadata?.(c,s,l)||{};this.emitEvent(a.errorEvent,{timestamp:new Date,error:m instanceof Error?m.message:String(m),metadata:{...p,executionId:d,methodName:s,duration:g,phase:"error",errorName:m instanceof Error?m.name:"UnknownError",success:false}});}throw m}}}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(hn).substr(2,yn)}`}};function go(r,e){let t=new st(e);return t.configureStandardMethods(),t.wrap(r)}function xn(r,e,t){return function(o){return go(o,{eventService:r,sourceType:e,sourceId:t})}}var mo={safe:"plan",moderate:"default",full:"acceptEdits"};var at={plan:{Bash:"deny",Read:"auto",Write:"deny",Edit:"deny",Glob:"auto",Grep:"auto"},default:{Bash:"approve",Read:"auto",Write:"approve",Edit:"approve",Glob:"auto",Grep:"auto"},acceptEdits:{Bash:"approve",Read:"auto",Write:"auto",Edit:"auto",Glob:"auto",Grep:"auto"},bypassPermissions:{Bash:"auto",Read:"auto",Write:"auto",Edit:"auto",Glob:"auto",Grep:"auto"}},lt={plan:"deny",default:"approve",acceptEdits:"approve",bypassPermissions:"auto"};function Mn(r){let e=r.replace(/[.+^${}()|[\]\\]/g,"\\$&").replace(/\*\*/g,".+").replace(/\*/g,".*");return new RegExp(`^${e}$`)}function Cn(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 bn(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 po(r,e,t){let o=Cn(t);if(o.toolName!==r)return false;if(o.argPattern===void 0)return true;let n=bn(r,e);return n===void 0?false:Mn(o.argPattern).test(n)}function fo(r,e,t,o={}){let{allow:n=[],deny:i=[]}=o;for(let l of i)if(po(r,e,l))return "deny";for(let l of n)if(po(r,e,l))return "auto";let a=at[t][r];return a!==void 0?a:lt[t]}var Rn=10,ae=class{type="command";execute(e,t){let n=(e.timeout??Rn)*1e3,i=JSON.stringify(t);return new Promise(s=>{let a=[],l=[],u=false,d=spawn("sh",["-c",e.command],{cwd:t.cwd,env:{...process.env,...t.env}});d.stdout.on("data",m=>a.push(m)),d.stderr.on("data",m=>l.push(m)),d.stdin.on("error",()=>{}),d.stdin.write(i),d.stdin.end();let c=setTimeout(()=>{u||(u=true,d.kill("SIGTERM"),s({exitCode:1,stdout:"",stderr:"Hook timed out"}));},n);d.on("close",m=>{u||(u=true,clearTimeout(c),s({exitCode:m??1,stdout:Buffer.concat(a).toString("utf8"),stderr:Buffer.concat(l).toString("utf8")}));}),d.on("error",m=>{u||(u=true,clearTimeout(c),s({exitCode:1,stdout:"",stderr:m.message}));});})}};function Sn(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 le=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]=Sn(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 wn(){return [new ae,new le]}function An(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 On(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 vo(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??wn(),s=new Map;for(let u of i)s.set(u.type,u);let a=[],l=On(t);for(let u of n){if(!An(u,l))continue;let d=u.env?{...t,env:{...t.env,...u.env}}:t;for(let c of u.hooks){let m=s.get(c.type);if(!m)continue;let g=await m.execute(c,d);if(g.exitCode===0&&g.stdout.trim()&&a.push(g.stdout.trim()),g.exitCode===2)return {blocked:true,reason:g.stderr||"Blocked by hook",stdout:a.join(`
|
|
9
9
|
`)}}}return {blocked:false,stdout:a.join(`
|
|
10
|
-
`)}}export{b as AGENT_EVENTS,
|
|
10
|
+
`)}}export{b as AGENT_EVENTS,J as AGENT_EVENT_PREFIX,gt as AbstractAIProvider,Ne as AbstractAgent,Q as AbstractEventService,he as AbstractExecutor,oe as AbstractManager,We as AbstractPlugin,je as AbstractTool,Se as AgentFactory,Re as AgentTemplates,Xt as AuthenticationError,Ie as CLAUDE_MODELS,ke as CacheIntegrityError,qt as CircuitBreakerOpenError,f as ConfigurationError,dt as ConsoleLogger,xe as ConversationHistory,se as ConversationStore,fe as DEFAULT_ABSTRACT_EVENT_SERVICE,It as DEFAULT_CONTEXT_WINDOW,Tt as DEFAULT_MAX_OUTPUT,ne as DefaultEventService,E as EVENT_EMITTER_EVENTS,x as EXECUTION_EVENTS,z as EXECUTION_EVENT_PREFIX,Jt as ErrorUtils,Ce as EventEmitterPlugin,Dt as EventHistoryModule,st as ExecutionProxy,Me as InMemoryEventEmitterMetrics,St as LocalExecutor,at as MODE_POLICY,Ar as MessageConverter,jt as ModelNotAvailableError,Wt as NetworkError,Ve as ObservableEventService,bt as PluginCategory,Z as PluginError,Te as PluginPriority,mt as ProviderError,Gt as RateLimitError,Ot as Robota,O as RobotaError,F as SilentLogger,Kt as StorageError,pe as StructuredEventService,ve as TASK_EVENTS,or as TASK_EVENT_PREFIX,_ as TOOL_EVENTS,W as TOOL_EVENT_PREFIX,mo as TRUST_TO_MODE,V as ToolExecutionError,de as TypeUtils,lt as UNKNOWN_TOOL_FALLBACK,nr as USER_EVENTS,ir as USER_EVENT_PREFIX,y as ValidationError,j as Validator,rr as bindEventServiceOwner,k as bindWithOwnerPath,ce as chatEntryToMessage,pt as composeEventName,Je as createAssistantMessage,go as createExecutionProxy,w as createLogger,Ye as createSystemMessage,Ze as createToolMessage,Ke as createUserMessage,fo as evaluatePermission,Lt as findProviderDefinition,_t as formatSupportedProviderTypes,Mr as formatTokenCount,Xn as getGlobalLogLevel,ho as getMessagesForAPI,ie as getModelContextWindow,yr as getModelMaxOutput,xr as getModelName,Eo as getToolEstimatedDuration,Io as getToolExecutionSteps,K as isAssistantMessage,Y as isChatEntry,ee as isDefaultEventService,kt as isImageGenerationProvider,Ue as isProgressReportingTool,ge as isSystemMessage,Le as isToolMessage,Vt as isUserMessage,Ht as isVideoGenerationProvider,C as logger,ut as messageToHistoryEntry,vo as runHooks,ct as setGlobalLogLevel,To as setToolProgressCallback,Fs as startPeriodicTask,Bs as stopPeriodicTask,Pt as validateAgentConfig,zs as validateApiKey,Vs as validateModelName,Hs as validateProviderName,ks as validateUserInput,xn as withEventEmission};
|