@robota-sdk/agent-core 3.0.0-beta.75 → 3.0.0-beta.77
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 +21 -0
- package/LICENSE +661 -21
- package/README.md +94 -16
- package/dist/browser/index.d.ts +516 -44
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +8 -7
- package/dist/browser/index.js.map +1 -1
- package/dist/node/index-BKIUt9pk.d.ts +5387 -0
- package/dist/node/index-BKIUt9pk.d.ts.map +1 -0
- package/dist/node/index.cjs +8 -7
- package/dist/node/index.d.ts +2 -4915
- package/dist/node/index.js +8 -7
- package/dist/node/index.js.map +1 -1
- package/dist/node/testing/index.cjs +1 -0
- package/dist/node/testing/index.d.ts +65 -0
- package/dist/node/testing/index.d.ts.map +1 -0
- package/dist/node/testing/index.js +2 -0
- package/dist/node/testing/index.js.map +1 -0
- package/package.json +14 -2
- package/dist/node/index.d.ts.map +0 -1
package/dist/node/index.cjs
CHANGED
|
@@ -1,12 +1,13 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require("node:crypto"),l=require("jssha");l=s(l,1);let u=require("node:child_process");const d={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>d.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>d.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date?!0:d.isPrimitive(e)||d.isArray(e)||d.isObject(e)};function f(e){return{functionCalling:{supported:e},nativeWebTools:{webSearch:{supported:!1,enabled:!1,reason:`Provider does not declare native web search support.`},webFetch:{supported:!1,enabled:!1,reason:`Provider does not declare native web fetch support.`}}}}function p(e){let t=typeof e.supportsTools==`function`?e.supportsTools():!1;return e.getCapabilities?.()??f(t)}function m(e,t,n){n?.webSearch===!0&&h(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&h(e,`web fetch`,t.nativeWebTools.webFetch)}function h(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${g(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${g(n.reason)}`)}function g(e){return e?` ${e}`:``}function _(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function v(e){return e.map(e=>{if(!e.aliases||e.aliases.length===0)return e.type;let t=e.aliases.length===1?`alias`:`aliases`;return`${e.type} (${t}: ${e.aliases.join(`, `)})`}).join(`, `)}function y(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function b(e){return`generateImage`in e&&typeof e.generateImage==`function`}function x(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function S(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function C(e,t){if(S(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function w(e,t){if(S(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function T(e,t){return S(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}var E=class{history=[];isInitialized=!1;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 Error(`Input must be a non-empty string`)}async ensureInitialized(){this.isInitialized||=(await this.initialize(),!0)}async dispose(){this.clearHistory(),this.isInitialized=!1}},D=class{initialized=!1;async initialize(){this.initialized||=(await this.doInitialize(),!0)}async dispose(){await this.doDispose(),this.initialized=!1}isInitialized(){return this.initialized}ensureInitialized(){if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function ee(e){if(!Array.isArray(e))throw Error(`Messages must be an array`);if(e.length===0)throw Error(`Messages array cannot be empty`);for(let t of e)if(!t.role||![`user`,`assistant`,`system`,`tool`].includes(t.role))throw Error(`Invalid message role: ${t.role}`)}function te(e){if(e){if(!Array.isArray(e))throw Error(`Tools must be an array`);for(let t of e){if(!t.name||typeof t.name!=`string`)throw Error(`Tool must have a valid name`);if(!t.description||typeof t.description!=`string`)throw Error(`Tool must have a valid description`);if(!t.parameters||typeof t.parameters!=`object`||t.parameters===null||Array.isArray(t.parameters))throw Error(`Tool must have valid parameters`)}}}async function ne(e,t,n,r){if(!e)throw Error(`Executor is required for ${t} provider. Configure an executor or use direct execution path.`);if(!r?.model)throw Error(`Model is required for executor execution in ${t} provider.`);return e.executeChat({messages:n,options:r,provider:t,model:r.model,...r.tools&&{tools:r.tools}})}async function*re(e,t,n,r){if(!e||!e.executeChatStream)throw Error(`Streaming executor is required for ${t} provider.`);if(!r?.model)throw Error(`Model is required for executor streaming in ${t} provider.`);let i=e.executeChatStream({messages:n,options:r,provider:t,model:r.model,stream:!0,...r.tools&&{tools:r.tools}});for await(let e of i)yield e}function O(e){return e.category===`chat`}function ie(e){let t=e.data;if(!t)throw Error(`Chat entry ${e.id} has no data`);return{...t,id:e.id,timestamp:e.timestamp}}function ae(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function oe(e){return e.filter(O).map(ie)}function se(e){return e.role===`user`}function k(e){return e.role===`assistant`}function ce(e){return e.role===`system`}function le(e){return e.role===`tool`}const A={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var ue=class e{static instance;globalLevel;constructor(){this.globalLevel=`warn`}static getInstance(){return e.instance||=new e,e.instance}getGlobalLevel(){return this.globalLevel}setGlobalLevel(e){this.globalLevel=e}},de=class{level;packageName;sinkLogger;constructor(e,t){this.packageName=e,this.sinkLogger=t||A}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),j(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),j(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),j(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),j(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||ue.getInstance().getGlobalLevel()}shouldLog(e){let t=this.getLevel();if(t===`silent`)return!1;let n=[`debug`,`info`,`warn`,`error`,`silent`];return n.indexOf(e)>=n.indexOf(t)}forward(e,t,n){let r={timestamp:new Date().toISOString(),level:e,message:t,...n&&{context:n},packageName:this.packageName},i=`[${r.timestamp}] [${r.level.toUpperCase()}] [${r.packageName}] ${r.message}`;switch(e){case`debug`:this.sinkLogger.debug(i,n??{});return;case`info`:this.sinkLogger.info(i,n??{});return;case`warn`:this.sinkLogger.warn(i,n??{});return;case`error`:this.sinkLogger.error(i,n??{});return;case`silent`:return}}};function j(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function M(e,t){return new de(e,t)}function fe(e){ue.getInstance().setGlobalLevel(e)}function pe(){return ue.getInstance().getGlobalLevel()}const N=M(`agents`);var me=class{config;executor;logger;constructor(e=A){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&&`executor`in e}async*streamWithAbort(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await he(n,t);if(e.done||(await ge(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.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 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!0}getCapabilities(){return f(this.supportsTools())}validateConfig(){return!0}validateMessages(e){ee(e)}validateTools(e){te(e)}validateNativeWebTools(e){m(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return ne(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){this.logger.debug?.(`🔍 [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request`,{provider:this.name,model:t?.model,hasTools:!!t?.tools,toolsCount:t?.tools?.length||0,toolNames:t?.tools?.map(e=>e.name)||[]}),yield*re(this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function he(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}async function ge(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let _e=function(e){return e.MONITORING=`monitoring`,e.LOGGING=`logging`,e.STORAGE=`storage`,e.NOTIFICATION=`notification`,e.SECURITY=`security`,e.PERFORMANCE=`performance`,e.ERROR_HANDLING=`error_handling`,e.LIMITS=`limits`,e.EVENT_PROCESSING=`event_processing`,e.CUSTOM=`custom`,e}({}),ve=function(e){return e[e.CRITICAL=1e3]=`CRITICAL`,e[e.HIGH=800]=`HIGH`,e[e.NORMAL=500]=`NORMAL`,e[e.LOW=200]=`LOW`,e[e.MINIMAL=100]=`MINIMAL`,e}({});const P={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},F=`agent`,I={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`},L=`execution`;function ye(e){return`executionId`in e||`toolName`in e}function be(e){let t=0,n=!1;for(let r=0;r<e.length;r++){let i=e[r]===` `||e[r]===` `||e[r]===`
|
|
2
|
-
`||e[r]===`\r`;!i&&!n?(t++,n=!0):i&&(n=!1)}return t}var xe=class{listeners=new Set;subscribe(e){this.listeners.add(e)}unsubscribe(e){this.listeners.delete(e)}notifyListeners(e,t,n){for(let r of this.listeners)r(e,t,n)}},Se=class extends xe{emit(e,t,n){}};const Ce=new Se;function R(e){return e===Ce||e instanceof Se}function we(e,t){if(!e||e.trim().length===0)throw Error(`[EVENTS] ownerType is required to compose event names.`);if(e.includes(`.`))throw Error(`[EVENTS] ownerType must not contain '.': "${e}"`);if(!t||t.trim().length===0)throw Error(`[EVENTS] local event name is required.`);if(t.includes(`.`))throw Error(`[EVENTS] Local event name must not contain '.': "${t}"`);return`${e}.${t}`}function Te(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var Ee=class extends xe{base;binding;constructor(e,t){super(),this.base=e,this.binding=t}emit(e,t,n){if(e.includes(`.`))throw Error(`[EVENTS] Local event name must not contain '.': "${e}"`);let r={...n,ownerType:this.binding.ownerType,ownerId:this.binding.ownerId,ownerPath:this.binding.ownerPath,depth:this.binding.ownerPath.length,spanId:n?.spanId??Te()},i=we(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function z(e,t){return new Ee(e,t)}function De(e,t){return z(e,t)}var Oe=class extends xe{emit(e,t,n){this.notifyListeners(e,t,n)}};const ke={ASSIGNED:`assigned`,COMPLETED:`completed`},Ae={MESSAGE:`message`,INPUT:`input`};function je(e,t,n,r,i,a,o){e.emitExecution(I.START,{parameters:{input:t,agentConfiguration:i.aiProviderInfo,availableTools:i.toolsInfo,toolCount:i.toolsInfo.length,hasTools:i.toolsInfo.length>0,systemMessage:n.defaultModel.systemMessage,provider:n.defaultModel.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},metadata:{method:`execute`,inputLength:t.length,messageCount:r.length,aiProvider:i.aiProviderInfo.providerName,model:i.aiProviderInfo.model,toolsAvailable:i.toolsInfo.map(e=>e.name),agentCapabilities:{canUseTools:i.toolsInfo.length>0,supportedActions:i.toolsInfo.map(e=>e.name)}}},a,o)}function Me(e,t,n,r){e.emitExecution(I.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:be(t),characterCount:t.length},metadata:{messageRole:`user`,inputLength:t.length,messageType:`user_message`,hasQuestions:t.includes(`?`),containsUrgency:/urgent|asap|critical|emergency/i.test(t),estimatedComplexity:t.length>200?`high`:t.length>50?`medium`:`low`}},n,r)}function Ne(e,t,n,r,i,a,o,s){if(typeof n.content!=`string`||n.content.length===0)throw Error(`[EXECUTION] assistant response must have content or tool calls`);if(!(n.timestamp instanceof Date))throw Error(`[EXECUTION] assistant response timestamp is required`);let c=n.content,l=n.timestamp,u=new Date().getTime()-l.getTime();e.emitWithContext(I.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:be(c),responseTime:u,contentPreview:c.length>200?c.substring(0,200)+`...`:c},result:{success:!0,data:c.substring(0,100)+`...`,fullResponse:c,responseMetrics:{length:c.length,estimatedReadTime:Math.ceil(be(c)/200),hasCodeBlocks:/```/.test(c),hasLinks:/https?:\/\//.test(c),complexity:c.length>1e3?`high`:c.length>300?`medium`:`low`}},metadata:{executionId:r,round:i,completed:!0,reason:`no_tool_calls`,responseCharacteristics:{hasQuestions:c.includes(`?`),isError:/error|fail|wrong/i.test(c),isComplete:/complete|done|finish/i.test(c),containsNumbers:/\d/.test(c)}}},()=>e.buildResponseOwnerContext(a,r,o,s),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for response event`);return z(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function Pe(e,t,n,r,i,a,o,s,c,l){let u=n.map(e=>{if(!e.id||e.id.length===0)throw Error(`[EXECUTION] Tool call missing id for tool results ready payload`);return e.id});if(u.length===0)throw Error(`[EXECUTION] Tool results ready requires toolCallIds`);let d=()=>e.buildThinkingOwnerContext(a,o,c,l),f=e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for tool results event`);return z(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})};e.emitWithContext(I.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(I.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:i.length,round:s},metadata:{toolsExecuted:r.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:s}},d,f)}var B=class extends Error{context;constructor(e,t){super(e),this.context=t,this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype)}},V=class extends B{code=`CONFIGURATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t){super(`Configuration Error: ${e}`,t)}},H=class extends B{field;code=`VALIDATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t,n){super(`Validation Error: ${e}`,n),this.field=t}},Fe=class extends B{provider;originalError;code=`PROVIDER_ERROR`;category=`provider`;recoverable=!0;constructor(e,t,n,r){super(`Provider Error (${t}): ${e}`,r),this.provider=t,this.originalError=n}},Ie=class extends B{provider;code=`AUTHENTICATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t,n){super(`Authentication Error: ${e}`,n),this.provider=t}},Le=class extends B{retryAfter;provider;code=`RATE_LIMIT_ERROR`;category=`provider`;recoverable=!0;constructor(e,t,n,r){super(`Rate Limit Error: ${e}`,r),this.retryAfter=t,this.provider=n}},Re=class extends B{originalError;code=`NETWORK_ERROR`;category=`system`;recoverable=!0;constructor(e,t,n){super(`Network Error: ${e}`,n),this.originalError=t}},U=class extends B{toolName;originalError;code=`TOOL_EXECUTION_ERROR`;category=`system`;recoverable=!1;constructor(e,t,n,r){super(`Tool Execution Error (${t}): ${e}`,r),this.toolName=t,this.originalError=n}},ze=class extends B{availableModels;code=`MODEL_NOT_AVAILABLE`;category=`user`;recoverable=!1;constructor(e,t,n,r){super(`Model "${e}" is not available for provider "${t}"`,r),this.availableModels=n}},Be=class extends B{code=`CIRCUIT_BREAKER_OPEN`;category=`system`;recoverable=!0;constructor(e=`Circuit breaker is open`,t){super(e,t)}},W=class extends B{pluginName;code=`PLUGIN_ERROR`;category=`system`;recoverable=!1;constructor(e,t,n){super(`Plugin Error (${t}): ${e}`,n),this.pluginName=t}},Ve=class extends B{code=`STORAGE_ERROR`;category=`system`;recoverable=!0;constructor(e,t){super(`Storage Error: ${e}`,t)}},He=class extends B{code=`CACHE_INTEGRITY_ERROR`;category=`system`;recoverable=!1;constructor(e,t){super(`Cache Integrity Error: ${e}`,t)}},Ue=class{static isRecoverable(e){return e instanceof B?e.recoverable:!1}static getErrorCode(e){return e instanceof B?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof B?e:e instanceof Error?new V(e.message||t):new V(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new Fe(`Failed to ${n}`,t,r,{operation:n})}};function We(e){if(!e.executionId)throw new H(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new H(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new H(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function Ge(e){let t=We(e);return{toolName:e.toolName,parameters:e.parameters,executionId:t.executionId,ownerType:t.ownerType,ownerId:t.ownerId,ownerPath:e.ownerPath,metadata:e.metadata,eventService:e.eventService,baseEventService:e.baseEventService}}function Ke(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null}}function qe(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function Je(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function Ye(e){return e!==void 0}function Xe(e){return e!==void 0}function Ze(e,t){if(e===0)return 0;if(t===void 0||!Number.isFinite(t))return e;let n=Math.floor(t);return n<1?1:Math.min(n,e)}async function Qe(e,t,n,r){let i=e.requests[r];if(i)try{let a=e.signal?.aborted?Ke(i):await t.executeTool(i.toolName,i.parameters,Ge(i));n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=Je(a))}catch(e){let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=qe(i,t)}}async function $e(e,t,n){for(;n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await Qe(e,t,n,r)}}async function et(e,t){let n={resultsByIndex:Array(e.requests.length),errorsByIndex:Array(e.requests.length),nextRequestIndex:0},r=Ze(e.requests.length,e.maxConcurrency),i=Array.from({length:r},()=>$e(e,t,n));await Promise.all(i);let a=n.resultsByIndex.filter(Ye),o=n.errorsByIndex.filter(Xe);if(o.length>0&&!e.continueOnError)throw o[0];return{results:a,errors:o}}async function tt(e,t){let n=[],r=[];for(let i of e.requests)try{let a=await t.executeTool(i.toolName,i.parameters,Ge(i));if(n.push(a),a.success||r.push(Je(a)),!a.success&&!e.continueOnError)break}catch(t){let n=t instanceof Error?t:Error(String(t));if(r.push(n),!e.continueOnError)break}return{results:n,errors:r}}async function nt(e,t,n){return n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`),e.mode===`parallel`?et(e,t):tt(e,t)}const G={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},K=`tool`,rt=`unknown_tool`;var it=class{tools;logger;constructor(e,t=A){this.tools=e,this.logger=t}async executeTool(e,t,n){this.logger.debug(`Executing tool: ${e}`);try{if(!n?.executionId)throw new H(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);if(!this.tools.hasTool(e)){let t=this.tools.getTools().map(e=>e.name).sort(),r=at(e,t),i=n.eventService;if(i){let t={timestamp:new Date,toolName:e,error:r};i.emit(G.CALL_ERROR,t)}return this.logger.warn(`Tool call skipped because requested tool is not registered`,{toolName:e,availableTools:t}),{success:!1,error:r,toolName:e,executionId:n.executionId,metadata:{errorCode:rt,requestedTool:e,availableTools:t}}}let r=n.eventService;if(r){let n={timestamp:new Date,toolName:e,parameters:t};r.emit(G.CALL_START,n)}let{toolName:i,parameters:a,...o}=n,s={...o,toolName:e,parameters:t,executionId:n.executionId},c=await this.tools.executeTool(e,t,s);if(this.logger.debug(`Tool execution completed: ${e}`),r){let t={timestamp:new Date,toolName:e,result:c};r.emit(G.CALL_COMPLETE,t),r.emit(G.CALL_RESPONSE_READY,t)}return{success:!0,result:c,toolName:e,executionId:s.executionId}}catch(t){this.logger.error(`Tool execution failed: ${e}`);let r=t instanceof Error?t:Error(String(t)),i=n?.eventService;if(i&&n?.executionId){let t={timestamp:new Date,toolName:e,error:r.message};i.emit(G.CALL_ERROR,t)}return{success:!1,error:r.message,toolName:e,executionId:n?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n;try{n=JSON.parse(e.function.arguments)}catch{throw new H(`Failed to parse arguments for tool "${e.function.name}" (call ${e.id}): invalid JSON`)}return{toolName:e.function.name,parameters:n,executionId:e.id,ownerType:`tool`,ownerId:e.id,ownerPath:[...t.ownerPathBase,{type:`tool`,id:e.id}],metadata:t.metadataFactory?t.metadataFactory(e):void 0}})}async executeTools(e){return nt(e,this,this.logger)}};function at(e,t){return`Tool "${e}" is not registered, so the tool call was not executed. Available tools: ${t.length>0?t.join(`, `):`no registered tools are available`}.`}function ot(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function st(e,t,n,r){if(!n||n.length===0)throw Error(`[EXECUTION] Missing rootId for execution owner context`);if(!r||r.length===0)throw Error(`[EXECUTION] Missing executionId for execution owner context`);let i=[...e.length?e:t];return n&&!i.some(e=>e.type===`agent`&&e.id===n)&&i.push({type:`agent`,id:n}),i.push({type:`execution`,id:r}),{ownerType:L,ownerId:r,ownerPath:i}}function ct(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...st(e,t,n,r).ownerPath];return a&&(o.push({type:`thinking`,id:a}),o.push({type:`tool_result`,id:`tool_result_${a}`})),o.push({type:`thinking`,id:i}),{ownerType:L,ownerId:r,ownerPath:o}}function lt(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:K,ownerId:i,ownerPath:[...st(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function ut(e,t,n,r,i,a){let o=ct(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:L,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}var dt=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=ot(n),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(R(this.baseEventService))return this.baseEventService;if(!e)throw Error(`[EVENT-SERVICE] Missing ownerId for tool event context`);if(!t||t.length===0)throw Error(`[EVENT-SERVICE] Missing ownerPath for tool event context`);if(this.toolEventServices.has(e))return this.toolEventServices.get(e);let n=z(this.baseEventService,{ownerType:K,ownerId:e,ownerPath:t.map(e=>({...e}))});return this.toolEventServices.set(e,n),n}clearToolEventServices(){this.toolEventServices.clear()}getBaseEventService(){return this.baseEventService}buildExecutionOwnerContext(e,t){return st(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return ct(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return lt(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return ut(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}emitExecution(e,t,n,r){this.emitWithContext(e,t,()=>this.buildExecutionOwnerContext(n,r),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for execution event`);return z(this.baseEventService,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}emitTool(e,t,n,r,i){this.emitWithContext(e,t,()=>this.buildToolOwnerContext(n,r,i),e=>this.ensureToolEventService(e.ownerId,e.ownerPath))}emitWithContext(e,t,n,r){if(R(this.baseEventService))return;let i=n(),a=r(i),o={timestamp:new Date,...t};a.emit(e,o,i)}emitExecutionStartEvent(e,t,n,r,i,a){je(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){Me(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){Ne(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){Pe(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function ft(e){let t=pt(e.metadata),n=q(e.usage);return t??n}function pt(e){if(!e)return;let t=q({inputTokens:J(e,`inputTokens`),outputTokens:J(e,`outputTokens`),promptTokens:J(e,`promptTokens`),completionTokens:J(e,`completionTokens`),totalTokens:J(e,`totalTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return mt(n);if(gt(n))return q(n)}function mt(e){try{return q(JSON.parse(e))}catch{return}}function q(e){if(!e)return;let t=ht(e.inputTokens,e.promptTokens),n=ht(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=ht(e.totalTokens);return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r}}}function J(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function ht(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function gt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}function _t(e){return Math.ceil(JSON.stringify(e).length/4)}function vt(e,t={}){let n=_t(e),r=yt(e),i=r?.tokens,a=bt(t.usageFloorTokens);return{usedTokens:r?.index===e.length-1?Math.max(i??0,a??0):Math.max(n,i??0,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function yt(e){for(let t=e.length-1;t>=0;t--){let n=ft(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function bt(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const xt={"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}};function St(e){return xt[e]?.contextWindow??2e5}function Ct(e){return xt[e]?.maxOutput??16384}function wt(e){return xt[e]?.name??e}function Tt(e){if(e>=1e6){let t=e/1e6;return Number.isInteger(t)?`${t}M`:`${parseFloat(t.toFixed(1))}M`}if(e<=0)return`0K`;if(e<1e3)return`<1K`;let t=e/1e3;return Number.isInteger(t)?`${t}K`:`${parseFloat(t.toFixed(1))}K`}const Et=.95;function Dt(e,t,n){let r=vt(e,{usageFloorTokens:n}),i=St(t),a=i*Et,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:Et*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function Ot(e,t,n,r,i,a){let o=Dt(e,t.defaultModel.model,n.cumulativeInputTokens);return o.shouldBlock?(i.warn(`[ROUND] Context hard-capacity prevention before provider call`,{estimatedTokens:o.estimatedTokens,contextLimit:o.contextLimit,thresholdTokens:o.thresholdTokens,thresholdPercentage:o.thresholdPercentage,serializedTokens:o.serializedTokens,providerTokens:o.providerTokens??0,usageFloorTokens:o.usageFloorTokens??0,round:a}),r.addAssistantMessage(`Context window is near capacity. Cannot process further in this round. Estimated ${o.estimatedTokens.toLocaleString()} / ${o.contextLimit.toLocaleString()} tokens (${Math.round(o.usedPercentage)}%) exceeds the hard-block threshold ${Math.round(o.thresholdPercentage)}%. Run /compact and retry.`,[],{round:a,contextOverflow:!0,estimatedTokens:o.estimatedTokens,contextLimit:o.contextLimit,thresholdTokens:o.thresholdTokens,thresholdPercentage:o.thresholdPercentage,serializedTokens:o.serializedTokens,providerTokens:o.providerTokens??0,usageFloorTokens:o.usageFloorTokens??0,usedPercentage:o.usedPercentage}),!0):!1}function kt(e,t){let n=Array.isArray(t.lastTrackedAssistantMessage?.toolCalls)&&t.lastTrackedAssistantMessage.toolCalls.length>0;return{thinkingNodeId:`thinking_${e}_round${t.runningAssistantCount+1}`,previousThinkingNodeId:n?`thinking_${e}_round${t.runningAssistantCount}`:void 0}}async function At(e,t,n,r,i){if(!t.defaultModel?.model)throw Error(`Model is required in defaultModel configuration. Please specify a model.`);if(typeof t.defaultModel.model!=`string`||t.defaultModel.model.trim()===``)throw Error(`Model must be a non-empty string in defaultModel configuration.`);let a={model:t.defaultModel.model,effort:t.defaultModel.effort??`high`,...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...n.availableTools.length>0&&{tools:n.availableTools},...t.responseFormat?.type?{responseFormat:{type:t.responseFormat.type}}:{},...i},o=n.provider.chat.bind(n.provider);if(r){let n=r.lookup(e,t.defaultModel.model,t.defaultModel.provider,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens});if(n)return{role:`assistant`,content:n,timestamp:new Date,id:(0,c.randomUUID)(),state:`complete`};let i=await jt(o,e,a,t.timeout);return typeof i.content==`string`&&r.store(e,t.defaultModel.model,t.defaultModel.provider,i.content,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens}),i}return jt(o,e,a,t.timeout)}async function jt(e,t,n,r){let i=Mt(r),a=n.signal;if(i===void 0&&a===void 0)return e(t,n);if(a?.aborted)throw Nt();let o=new AbortController,s,c=!1,l,u=()=>{s!==void 0&&(clearTimeout(s),s=void 0)},d=e=>{c||(c=!0,l?.(e),o.abort(e))},f=()=>{i===void 0||c||(u(),s=setTimeout(()=>{d(Error(`Provider call idle timeout after ${i}ms`))},i))},p=()=>{d(Nt())};a?.addEventListener(`abort`,p,{once:!0});let m=n.onTextDelta,h={...n,signal:o.signal,...m===void 0?{}:{onTextDelta:e=>{f(),m(e)}}};f();try{return await Promise.race([e(t,h),new Promise((e,t)=>{l=t})])}finally{c=!0,u(),a?.removeEventListener(`abort`,p)}}function Mt(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function Nt(){let e=Error(`aborted`);return e.name=`AbortError`,e}function Pt(e,t,n,r,i){let a=e.role===`assistant`?e.toolCalls:void 0,o=Array.isArray(a)&&a.length>0;if(typeof e.content!=`string`&&!o)throw Error(`[EXECUTION] Provider response must have content or tool calls`);if(a&&!Array.isArray(a))throw Error(`[EXECUTION] assistant toolCalls must be an array`);let s=e.content??``;if(i.debug(`[ROUND-${r}] Provider response completed`,{executionId:t,conversationId:n,round:r,responseLength:s.length,hasToolCalls:Array.isArray(a)&&a.length>0,toolCallsCount:Array.isArray(a)?a.length:0}),e.role!==`assistant`)throw Error(`Unexpected response role: ${e.role}`);let c=e,l=c.toolCalls??[];if(!Array.isArray(l))throw Error(`[EXECUTION] assistantResponse.toolCalls must be an array`);return{assistantResponse:c,assistantToolCalls:l}}function Ft(e,t,n,r){let i=0,a=0;return{wrappedOnTextDelta:a=>{e.onExecutionEvent?.(`provider_stream_raw_delta`,{executionId:n,conversationId:e.conversationId,round:r,sequence:i,delta:a}),i++,t.appendStreaming(a),e.onTextDelta?.(a)},wrappedOnProviderNativeRawPayload:t=>{let i=t.sequence??a;a=Math.max(a,i+1),e.onExecutionEvent?.(`provider_native_raw_payload`,{executionId:n,conversationId:e.conversationId,round:r,...t,sequence:i})}}}async function It(e,t,n,r,i,a,o,s,c,l,u){try{i.onExecutionEvent?.(`provider_request`,{executionId:s,conversationId:i.conversationId,round:o,provider:n.currentInfo.provider,model:t.defaultModel.model,messages:e,tools:n.availableTools});let a=await At(e,t,n,r,{signal:i.signal,onTextDelta:l,onProviderNativeRawPayload:u});return i.onExecutionEvent?.(`provider_response_raw`,{executionId:s,conversationId:i.conversationId,round:o,response:a,responseKind:`provider-normalized-message`}),i.onExecutionEvent?.(`provider_response_normalized`,{executionId:s,conversationId:i.conversationId,round:o,response:a,toolCallsCount:a.role===`assistant`&&Array.isArray(a.toolCalls)?a.toolCalls.length:0}),a}catch(e){if(e instanceof Error&&(e.name===`AbortError`||e.message.includes(`aborted`)||e.message.includes(`abort`)))throw a.commitAssistant(`interrupted`,{round:o}),e;a.discardPending();let t=e instanceof Error?e.message:String(e);return c.error(`[ROUND] Provider call failed`,{error:t,round:o}),a.addAssistantMessage(`Request failed: ${t}`,[],{round:o,providerError:!0}),null}}function Lt(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function Rt(e,t,n,r,i,a){let o=!1,s=0,c=0;for(let l of e){if(!l.id)throw Error(`Tool call missing ID: ${JSON.stringify(l)}`);let e=l.function?.name;if(!e||e.length===0)throw Error(`[EXECUTION] Tool call "${l.id}" missing function name`);if(o){i.warn(`[ROUND] Skipping tool result due to context overflow`,{toolCallId:l.id,toolName:e,round:r}),n.addToolMessageWithId(`Error: Context window near capacity. Tool execution result skipped. Respond with available results and re-request skipped tools if needed.`,l.id,e,{round:r,success:!1,error:`context_overflow`,toolName:e}),c++;continue}let u=t.results.find(e=>e.executionId===l.id),d=t.errors.find(e=>ye(e)&&e.executionId===l.id),f,p={round:r};if(u&&u.success){if(u.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload`);f=typeof u.result==`string`?u.result:JSON.stringify(u.result),p.success=!0,u.toolName&&(p.toolName=u.toolName)}else if(u&&!u.success){if(!u.error||u.error.length===0)throw Error(`[EXECUTION] Tool result missing error message`);f=`Error: ${u.error}`,p.success=!1,p.error=u.error,u.toolName&&(p.toolName=u.toolName),u.metadata?.errorCode===`unknown_tool`&&(p.errorCode=rt,typeof u.metadata.requestedTool==`string`&&(p.requestedTool=u.metadata.requestedTool),Array.isArray(u.metadata.availableTools)&&(p.availableTools=u.metadata.availableTools.filter(e=>typeof e==`string`)))}else if(d){let e=d,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message`);f=`Error: ${t}`,p.success=!1,p.error=t,e.toolName&&(p.toolName=e.toolName)}else throw Error(`No execution result found for tool call ID: ${l.id}`);if(i.debug(`Adding tool result to conversation`,{toolCallId:l.id,toolName:e,content:f.substring(0,100),round:r,currentHistoryLength:n.getMessages().length}),n.addToolMessageWithId(f,l.id,e,p),a){let e=vt(n.getMessages(),{usageFloorTokens:a.cumulativeInputTokens}).usedTokens;e>a.contextLimit*.8&&(i.warn(`[ROUND] Context budget exceeded after tool result — skipping remaining tools`,{estimatedTokens:e,contextLimit:a.contextLimit,toolCallId:l.id,round:r}),o=!0)}s++,i.debug(`Tool result added to history`,{toolCallId:l.id,newHistoryLength:n.getMessages().length,round:r})}return{contextOverflowed:o,addedCount:s,skippedCount:c,unknownToolFailureCount:0,unknownToolNames:[]}}function zt(e,t,n){for(let r of e){let e=r.function?.name??`unknown`,i=`${e}::${typeof r.function?.arguments==`string`?r.function.arguments:JSON.stringify(r.function?.arguments??{})}`,a=(t.sameToolInputCounts.get(i)??0)+1;if(t.sameToolInputCounts.set(i,a),a>n)throw Error(`[EXECUTION] Tool "${e}" called with identical input ${a} times — aborting to prevent infinite loop`)}}async function Bt(e,t,n,r,i,a,o,s,c,l,u,d,f){let{toolExecutionService:p,logger:m,eventEmitter:h}=c,g=f??l?.maxSameToolInputs;g!==void 0&&zt(e,s,g),m.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:i,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let _=h.buildThinkingOwnerContext(n,r,a,o).ownerPath,v=e.length,y=`${a}`,b=p.createExecutionRequestsWithContext(e,{ownerPathBase:_,metadataFactory:e=>({conversationId:n,round:i,directParentId:a,batchId:y,expectedCount:v,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:h.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:h.getBaseEventService()}}),x={requests:b,mode:`parallel`,maxConcurrency:5,continueOnError:!0,signal:u};d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:y,mode:x.mode,maxConcurrency:x.maxConcurrency,requestCount:b.length,tools:b.map(e=>e.toolName)}),b.forEach((e,t)=>{d?.(`tool_execution_request`,{executionId:r,conversationId:n,round:i,batchId:y,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.parameters,ownerPath:e.ownerPath})});let S=await p.executeTools(x),C=S.results.filter(Lt).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);S.results.forEach((e,t)=>{d?.(`tool_execution_result`,{executionId:r,conversationId:n,round:i,batchId:y,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})}),s.toolsExecuted.push(...S.results.filter(e=>!Lt(e)).map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}));let w=St(l?.defaultModel?.model??``),T=t.getMessages().length,E=Rt(e,S,t,i,m,{contextLimit:w,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(T).forEach((e,t)=>{d?.(`tool_message_committed`,{executionId:r,conversationId:n,round:i,batchId:y,index:t,message:e}),d?.(`history_mutation`,{executionId:r,conversationId:n,round:i,batchId:y,mutation:`append_message`,index:T+t,message:e})}),h.emitToolResultsEvents(e,S,s.toolsExecuted,n,r,i,a,o),h.clearToolEventServices(),{...E,unknownToolFailureCount:C.length,unknownToolNames:C}}function Vt(e){let t=ft(e);if(!t)return;let n=t.totalTokens??t.inputTokens+t.outputTokens;return{inputTokens:t.inputTokens,outputTokens:t.outputTokens,usage:{totalTokens:n,inputTokens:t.inputTokens,outputTokens:t.outputTokens}}}const Ht={beforeRun:async(e,t)=>{e.beforeRun&&t.input&&await e.beforeRun(t.input,t.metadata)},afterRun:async(e,t)=>{e.afterRun&&t.input&&t.response&&await e.afterRun(t.input,t.response,t.metadata)},beforeProviderCall:async(e,t)=>{e.beforeProviderCall&&t.messages&&await e.beforeProviderCall(t.messages)},afterProviderCall:async(e,t)=>{e.afterProviderCall&&t.messages&&t.responseMessage&&await e.afterProviderCall(t.messages,t.responseMessage)},onError:async(e,t)=>{if(e.onError&&t.error){let n={action:`${L}.${I.ERROR}`,metadata:{}},r=t.executionContext?.executionId;typeof r==`string`&&r.length>0&&(n.executionId=r);let i=t.executionContext?.sessionId;typeof i==`string`&&i.length>0&&(n.sessionId=i);let a=t.executionContext?.userId;typeof a==`string`&&a.length>0&&(n.userId=a),await e.onError(t.error,n)}}};async function Y(e,t,n,r){let i=Ht[t];if(i)for(let a of e)try{await i(a,n)}catch(e){r.warn(`Plugin hook failed`,{pluginName:a.name,hookName:t,error:e instanceof Error?e.message:String(e)})}}async function Ut(e,t,n,r,i,a,o,s,c){let{plugins:l,logger:u,eventEmitter:d,cacheService:f}=c,p=e.currentRound;u.debug(`[ROUND-${p}] Starting execution round ${p}`,{executionId:i,conversationId:a.conversationId,round:p,maxRounds:t});let m=n.getMessages(),{thinkingNodeId:h,previousThinkingNodeId:g}=kt(r,e);if(await Y(l,`beforeProviderCall`,{messages:m},u),u.debug(`Sending messages to AI provider`,{round:p,messageCount:m.length,lastFewMessages:m.slice(-5).map(e=>({role:e.role,content:e.content?.substring(0,50),hasToolCalls:`toolCalls`in e?!!e.toolCalls?.length:!1,toolCallId:`toolCallId`in e?e.toolCallId:void 0}))}),d.emitWithContext(I.ASSISTANT_MESSAGE_START,{parameters:{round:p,messageCount:m.length},metadata:{round:p,thinkingNodeId:h}},()=>d.buildThinkingOwnerContext(r,i,h,g),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for thinking event`);return z(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),Ot(m,o,e,n,u,p))return!0;p>1&&a.onTextDelta?.(`
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});var e=Object.create,t=Object.defineProperty,n=Object.getOwnPropertyDescriptor,r=Object.getOwnPropertyNames,i=Object.getPrototypeOf,a=Object.prototype.hasOwnProperty,o=(e,i,o,s)=>{if(i&&typeof i==`object`||typeof i==`function`)for(var c=r(i),l=0,u=c.length,d;l<u;l++)d=c[l],!a.call(e,d)&&d!==o&&t(e,d,{get:(e=>i[e]).bind(null,d),enumerable:!(s=n(i,d))||s.enumerable});return e},s=(n,r,a)=>(a=n==null?{}:e(i(n)),o(r||!n||!n.__esModule?t(a,`default`,{value:n,enumerable:!0}):a,n));let c=require("node:crypto"),l=require("jssha");l=s(l,1);let u=require("node:child_process");const d={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>d.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>d.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date?!0:d.isPrimitive(e)||d.isArray(e)||d.isObject(e)};function f(e){return{functionCalling:{supported:e},nativeWebTools:{webSearch:{supported:!1,enabled:!1,reason:`Provider does not declare native web search support.`},webFetch:{supported:!1,enabled:!1,reason:`Provider does not declare native web fetch support.`}}}}function p(e){let t=typeof e.supportsTools==`function`?e.supportsTools():!1;return e.getCapabilities?.()??f(t)}function m(e,t,n){n?.webSearch===!0&&h(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&h(e,`web fetch`,t.nativeWebTools.webFetch)}function h(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${g(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${g(n.reason)}`)}function g(e){return e?` ${e}`:``}function _(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function ee(e){return e.map(e=>{if(!e.aliases||e.aliases.length===0)return e.type;let t=e.aliases.length===1?`alias`:`aliases`;return`${e.type} (${t}: ${e.aliases.join(`, `)})`}).join(`, `)}function v(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function y(e){return`generateImage`in e&&typeof e.generateImage==`function`}function b(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}const x=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function S(e,t,n){return{id:e,title:t,description:n?.description,options:x,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function C(e,t,n,r){return{id:e,title:t,options:n,maxSelect:1,description:r?.description,allowFreeText:r?.allowFreeText,maxVisible:r?.maxVisible,default:r?.default}}function te(e,t,n,r){return{id:e,title:t,options:n,minSelect:r?.minSelect??1,maxSelect:r?.maxSelect??n.length,description:r?.description,maxVisible:r?.maxVisible,default:r?.default}}function w(e,t,n){return{id:e,title:t,allowFreeText:!0,description:n?.description,masked:n?.masked,allowEmpty:n?.allowEmpty,placeholder:n?.placeholder,default:n?.default}}function T(e){return e.type===`answer`&&e.values.includes(`yes`)}function E(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function D(e,t){if(E(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function ne(e,t){if(E(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function re(e,t){return E(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}var ie=class{history=[];isInitialized=!1;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 Error(`Input must be a non-empty string`)}async ensureInitialized(){this.isInitialized||=(await this.initialize(),!0)}async dispose(){this.clearHistory(),this.isInitialized=!1}},ae=class{initialized=!1;async initialize(){this.initialized||=(await this.doInitialize(),!0)}async dispose(){await this.doDispose(),this.initialized=!1}isInitialized(){return this.initialized}ensureInitialized(){if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function oe(e){if(!Array.isArray(e))throw Error(`Messages must be an array`);if(e.length===0)throw Error(`Messages array cannot be empty`);for(let t of e)if(!t.role||![`user`,`assistant`,`system`,`tool`].includes(t.role))throw Error(`Invalid message role: ${t.role}`)}function se(e){if(e){if(!Array.isArray(e))throw Error(`Tools must be an array`);for(let t of e){if(!t.name||typeof t.name!=`string`)throw Error(`Tool must have a valid name`);if(!t.description||typeof t.description!=`string`)throw Error(`Tool must have a valid description`);if(!t.parameters||typeof t.parameters!=`object`||t.parameters===null||Array.isArray(t.parameters))throw Error(`Tool must have valid parameters`)}}}async function ce(e,t,n,r){if(!e)throw Error(`Executor is required for ${t} provider. Configure an executor or use direct execution path.`);if(!r?.model)throw Error(`Model is required for executor execution in ${t} provider.`);return e.executeChat({messages:n,options:r,provider:t,model:r.model,...r.tools&&{tools:r.tools}})}async function*le(e,t,n,r){if(!e||!e.executeChatStream)throw Error(`Streaming executor is required for ${t} provider.`);if(!r?.model)throw Error(`Model is required for executor streaming in ${t} provider.`);let i=e.executeChatStream({messages:n,options:r,provider:t,model:r.model,stream:!0,...r.tools&&{tools:r.tools}});for await(let e of i)yield e}function O(e){return e.category===`chat`}function k(e){let t=e.data;if(!t)throw Error(`Chat entry ${e.id} has no data`);return{...t,id:e.id,timestamp:e.timestamp}}function ue(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function de(e){return e.filter(O).map(k)}function fe(e){return e.role===`user`}function pe(e){return e.role===`assistant`}function me(e){return e.role===`system`}function he(e){return e.role===`tool`}const A={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var ge=class e{static instance;globalLevel;constructor(){this.globalLevel=`warn`}static getInstance(){return e.instance||=new e,e.instance}getGlobalLevel(){return this.globalLevel}setGlobalLevel(e){this.globalLevel=e}},_e=class{level;packageName;sinkLogger;constructor(e,t){this.packageName=e,this.sinkLogger=t||A}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),ve(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),ve(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),ve(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),ve(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||ge.getInstance().getGlobalLevel()}shouldLog(e){let t=this.getLevel();if(t===`silent`)return!1;let n=[`debug`,`info`,`warn`,`error`,`silent`];return n.indexOf(e)>=n.indexOf(t)}forward(e,t,n){let r={timestamp:new Date().toISOString(),level:e,message:t,...n&&{context:n},packageName:this.packageName},i=`[${r.timestamp}] [${r.level.toUpperCase()}] [${r.packageName}] ${r.message}`;switch(e){case`debug`:this.sinkLogger.debug(i,n??{});return;case`info`:this.sinkLogger.info(i,n??{});return;case`warn`:this.sinkLogger.warn(i,n??{});return;case`error`:this.sinkLogger.error(i,n??{});return;case`silent`:return}}};function ve(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function j(e,t){return new _e(e,t)}function ye(e){ge.getInstance().setGlobalLevel(e)}function be(){return ge.getInstance().getGlobalLevel()}const M=j(`agents`);var xe=class{config;executor;logger;constructor(e=A){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&&`executor`in e}async*streamWithAbort(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await Se(n,t);if(e.done||(await Ce(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.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:pe(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata}}async*generateStreamingResponse(e){if(!this.chatStream)throw 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:pe(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata}}supportsTools(){return!0}getCapabilities(){return f(this.supportsTools())}validateConfig(){return!0}validateMessages(e){oe(e)}validateTools(e){se(e)}validateNativeWebTools(e){m(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return ce(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){this.logger.debug?.(`🔍 [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request`,{provider:this.name,model:t?.model,hasTools:!!t?.tools,toolsCount:t?.tools?.length||0,toolNames:t?.tools?.map(e=>e.name)||[]}),yield*le(this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Se(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}async function Ce(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let we=function(e){return e.MONITORING=`monitoring`,e.LOGGING=`logging`,e.STORAGE=`storage`,e.NOTIFICATION=`notification`,e.SECURITY=`security`,e.PERFORMANCE=`performance`,e.ERROR_HANDLING=`error_handling`,e.LIMITS=`limits`,e.EVENT_PROCESSING=`event_processing`,e.CUSTOM=`custom`,e}({}),Te=function(e){return e[e.CRITICAL=1e3]=`CRITICAL`,e[e.HIGH=800]=`HIGH`,e[e.NORMAL=500]=`NORMAL`,e[e.LOW=200]=`LOW`,e[e.MINIMAL=100]=`MINIMAL`,e}({});const N={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},P=`agent`,F={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`},I=`execution`;function Ee(e){return`executionId`in e||`toolName`in e}function De(e){let t=0,n=!1;for(let r=0;r<e.length;r++){let i=e[r]===` `||e[r]===` `||e[r]===`
|
|
2
|
+
`||e[r]===`\r`;!i&&!n?(t++,n=!0):i&&(n=!1)}return t}var Oe=class{listeners=new Set;subscribe(e){this.listeners.add(e)}unsubscribe(e){this.listeners.delete(e)}notifyListeners(e,t,n){for(let r of this.listeners)r(e,t,n)}},ke=class extends Oe{emit(e,t,n){}};const Ae=new ke;function je(e){return e===Ae||e instanceof ke}function Me(e,t){if(!e||e.trim().length===0)throw Error(`[EVENTS] ownerType is required to compose event names.`);if(e.includes(`.`))throw Error(`[EVENTS] ownerType must not contain '.': "${e}"`);if(!t||t.trim().length===0)throw Error(`[EVENTS] local event name is required.`);if(t.includes(`.`))throw Error(`[EVENTS] Local event name must not contain '.': "${t}"`);return`${e}.${t}`}function Ne(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var Pe=class extends Oe{base;binding;constructor(e,t){super(),this.base=e,this.binding=t}emit(e,t,n){if(e.includes(`.`))throw Error(`[EVENTS] Local event name must not contain '.': "${e}"`);let r={...n,ownerType:this.binding.ownerType,ownerId:this.binding.ownerId,ownerPath:this.binding.ownerPath,depth:this.binding.ownerPath.length,spanId:n?.spanId??Ne()},i=Me(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function L(e,t){return new Pe(e,t)}function Fe(e,t){return L(e,t)}var Ie=class extends Oe{emit(e,t,n){this.notifyListeners(e,t,n)}};const Le={ASSIGNED:`assigned`,COMPLETED:`completed`},Re={MESSAGE:`message`,INPUT:`input`};function ze(e,t,n,r,i,a,o){e.emitExecution(F.START,{parameters:{input:t,agentConfiguration:i.aiProviderInfo,availableTools:i.toolsInfo,toolCount:i.toolsInfo.length,hasTools:i.toolsInfo.length>0,systemMessage:n.systemMessage,provider:n.defaultModel.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},metadata:{method:`execute`,inputLength:t.length,messageCount:r.length,aiProvider:i.aiProviderInfo.providerName,model:i.aiProviderInfo.model,toolsAvailable:i.toolsInfo.map(e=>e.name),agentCapabilities:{canUseTools:i.toolsInfo.length>0,supportedActions:i.toolsInfo.map(e=>e.name)}}},a,o)}function Be(e,t,n,r){e.emitExecution(F.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:De(t),characterCount:t.length},metadata:{messageRole:`user`,inputLength:t.length,messageType:`user_message`,hasQuestions:t.includes(`?`),containsUrgency:/urgent|asap|critical|emergency/i.test(t),estimatedComplexity:t.length>200?`high`:t.length>50?`medium`:`low`}},n,r)}function Ve(e,t,n,r,i,a,o,s){if(typeof n.content!=`string`||n.content.length===0)throw Error(`[EXECUTION] assistant response must have content or tool calls`);if(!(n.timestamp instanceof Date))throw Error(`[EXECUTION] assistant response timestamp is required`);let c=n.content,l=n.timestamp,u=new Date().getTime()-l.getTime();e.emitWithContext(F.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:De(c),responseTime:u,contentPreview:c.length>200?c.substring(0,200)+`...`:c},result:{success:!0,data:c.substring(0,100)+`...`,fullResponse:c,responseMetrics:{length:c.length,estimatedReadTime:Math.ceil(De(c)/200),hasCodeBlocks:/```/.test(c),hasLinks:/https?:\/\//.test(c),complexity:c.length>1e3?`high`:c.length>300?`medium`:`low`}},metadata:{executionId:r,round:i,completed:!0,reason:`no_tool_calls`,responseCharacteristics:{hasQuestions:c.includes(`?`),isError:/error|fail|wrong/i.test(c),isComplete:/complete|done|finish/i.test(c),containsNumbers:/\d/.test(c)}}},()=>e.buildResponseOwnerContext(a,r,o,s),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for response event`);return L(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function He(e,t,n,r,i,a,o,s,c,l){let u=n.map(e=>{if(!e.id||e.id.length===0)throw Error(`[EXECUTION] Tool call missing id for tool results ready payload`);return e.id});if(u.length===0)throw Error(`[EXECUTION] Tool results ready requires toolCallIds`);let d=()=>e.buildThinkingOwnerContext(a,o,c,l),f=e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for tool results event`);return L(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})};e.emitWithContext(F.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(F.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:i.length,round:s},metadata:{toolsExecuted:r.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:s}},d,f)}var R=class extends Error{context;constructor(e,t){super(e),this.context=t,this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype)}},z=class extends R{code=`CONFIGURATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t){super(`Configuration Error: ${e}`,t)}},B=class extends R{field;code=`VALIDATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t,n){super(`Validation Error: ${e}`,n),this.field=t}},Ue=class extends R{issues;attempts;code=`STRUCTURED_OUTPUT_ERROR`;category=`provider`;recoverable=!0;constructor(e,t,n,r){super(`Structured Output Error: ${e}`,r),this.issues=t,this.attempts=n}},We=class extends R{provider;originalError;code=`PROVIDER_ERROR`;category=`provider`;recoverable=!0;constructor(e,t,n,r){super(`Provider Error (${t}): ${e}`,r),this.provider=t,this.originalError=n}},Ge=class extends R{provider;code=`AUTHENTICATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t,n){super(`Authentication Error: ${e}`,n),this.provider=t}},Ke=class extends R{retryAfter;provider;code=`RATE_LIMIT_ERROR`;category=`provider`;recoverable=!0;constructor(e,t,n,r){super(`Rate Limit Error: ${e}`,r),this.retryAfter=t,this.provider=n}},qe=class extends R{originalError;code=`NETWORK_ERROR`;category=`system`;recoverable=!0;constructor(e,t,n){super(`Network Error: ${e}`,n),this.originalError=t}},V=class extends R{toolName;originalError;code=`TOOL_EXECUTION_ERROR`;category=`system`;recoverable=!1;constructor(e,t,n,r){super(`Tool Execution Error (${t}): ${e}`,r),this.toolName=t,this.originalError=n}},Je=class extends R{availableModels;code=`MODEL_NOT_AVAILABLE`;category=`user`;recoverable=!1;constructor(e,t,n,r){super(`Model "${e}" is not available for provider "${t}"`,r),this.availableModels=n}},Ye=class extends R{code=`CIRCUIT_BREAKER_OPEN`;category=`system`;recoverable=!0;constructor(e=`Circuit breaker is open`,t){super(e,t)}},H=class extends R{pluginName;code=`PLUGIN_ERROR`;category=`system`;recoverable=!1;constructor(e,t,n){super(`Plugin Error (${t}): ${e}`,n),this.pluginName=t}},Xe=class extends R{code=`STORAGE_ERROR`;category=`system`;recoverable=!0;constructor(e,t){super(`Storage Error: ${e}`,t)}},Ze=class extends R{code=`CACHE_INTEGRITY_ERROR`;category=`system`;recoverable=!1;constructor(e,t){super(`Cache Integrity Error: ${e}`,t)}},Qe=class{static isRecoverable(e){return e instanceof R?e.recoverable:!1}static getErrorCode(e){return e instanceof R?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof R?e:e instanceof Error?new z(e.message||t):new z(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new We(`Failed to ${n}`,t,r,{operation:n})}};function $e(e){if(!e.executionId)throw new B(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new B(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new B(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function et(e,t){let n=$e(e);return{toolName:e.toolName,parameters:e.parameters,...t?{signal:t}:{},executionId:n.executionId,ownerType:n.ownerType,ownerId:n.ownerId,ownerPath:e.ownerPath,metadata:e.metadata,eventService:e.eventService,baseEventService:e.baseEventService,...e.ask?{ask:e.ask}:{}}}function tt(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null}}function nt(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function rt(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function it(e){return e!==void 0}function at(e){return e!==void 0}function ot(e,t){if(e===0)return 0;if(t===void 0||!Number.isFinite(t))return e;let n=Math.floor(t);return n<1?1:Math.min(n,e)}async function st(e,t,n,r){let i=e.requests[r];if(i)try{let a=e.signal?.aborted?tt(i):await t.executeTool(i.toolName,i.parameters,et(i,e.signal));n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=rt(a))}catch(e){let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=nt(i,t)}}async function ct(e,t,n){for(;n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await st(e,t,n,r)}}async function lt(e,t){let n={resultsByIndex:Array(e.requests.length),errorsByIndex:Array(e.requests.length),nextRequestIndex:0},r=ot(e.requests.length,e.maxConcurrency),i=Array.from({length:r},()=>ct(e,t,n));await Promise.all(i);let a=n.resultsByIndex.filter(it),o=n.errorsByIndex.filter(at);if(o.length>0&&!e.continueOnError)throw o[0];return{results:a,errors:o}}async function ut(e,t){let n=[],r=[];for(let i of e.requests)try{let a=e.signal?.aborted?tt(i):await t.executeTool(i.toolName,i.parameters,et(i,e.signal));if(n.push(a),a.success||r.push(rt(a)),!a.success&&!e.continueOnError)break}catch(t){let n=t instanceof Error?t:Error(String(t));if(r.push(n),!e.continueOnError)break}return{results:n,errors:r}}async function dt(e,t,n){return n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`),e.mode===`parallel`?lt(e,t):ut(e,t)}const U={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},W=`tool`,ft=`unknown_tool`;var pt=class{tools;logger;askHandler;constructor(e,t=A){this.tools=e,this.logger=t}setAskHandler(e){this.askHandler=e}async executeTool(e,t,n){this.logger.debug(`Executing tool: ${e}`);try{if(!n?.executionId)throw new B(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);if(!this.tools.hasTool(e)){let t=this.tools.getTools().map(e=>e.name).sort(),r=mt(e,t),i=n.eventService;if(i){let t={timestamp:new Date,toolName:e,error:r};i.emit(U.CALL_ERROR,t)}return this.logger.warn(`Tool call skipped because requested tool is not registered`,{toolName:e,availableTools:t}),{success:!1,error:r,toolName:e,executionId:n.executionId,metadata:{errorCode:ft,requestedTool:e,availableTools:t}}}let r=n.eventService;if(r){let n={timestamp:new Date,toolName:e,parameters:t};r.emit(U.CALL_START,n)}let{toolName:i,parameters:a,...o}=n,s={...o,toolName:e,parameters:t,executionId:n.executionId},c=await this.tools.executeTool(e,t,s);if(this.logger.debug(`Tool execution completed: ${e}`),r){let t={timestamp:new Date,toolName:e,result:c};r.emit(U.CALL_COMPLETE,t),r.emit(U.CALL_RESPONSE_READY,t)}return{success:!0,result:c,toolName:e,executionId:s.executionId}}catch(t){this.logger.error(`Tool execution failed: ${e}`);let r=t instanceof Error?t:Error(String(t)),i=n?.eventService;if(i&&n?.executionId){let t={timestamp:new Date,toolName:e,error:r.message};i.emit(U.CALL_ERROR,t)}return{success:!1,error:r.message,toolName:e,executionId:n?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n;try{n=JSON.parse(e.function.arguments)}catch{throw new B(`Failed to parse arguments for tool "${e.function.name}" (call ${e.id}): invalid JSON`)}return{toolName:e.function.name,parameters:n,executionId:e.id,ownerType:`tool`,ownerId:e.id,ownerPath:[...t.ownerPathBase,{type:`tool`,id:e.id}],metadata:t.metadataFactory?t.metadataFactory(e):void 0,...this.askHandler?{ask:this.askHandler}:{}}})}async executeTools(e){return dt(e,this,this.logger)}};function mt(e,t){return`Tool "${e}" is not registered, so the tool call was not executed. Available tools: ${t.length>0?t.join(`, `):`no registered tools are available`}.`}function ht(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function gt(e,t,n,r){if(!n||n.length===0)throw Error(`[EXECUTION] Missing rootId for execution owner context`);if(!r||r.length===0)throw Error(`[EXECUTION] Missing executionId for execution owner context`);let i=[...e.length?e:t];return n&&!i.some(e=>e.type===`agent`&&e.id===n)&&i.push({type:`agent`,id:n}),i.push({type:`execution`,id:r}),{ownerType:I,ownerId:r,ownerPath:i}}function _t(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...gt(e,t,n,r).ownerPath];return a&&(o.push({type:`thinking`,id:a}),o.push({type:`tool_result`,id:`tool_result_${a}`})),o.push({type:`thinking`,id:i}),{ownerType:I,ownerId:r,ownerPath:o}}function vt(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:W,ownerId:i,ownerPath:[...gt(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function yt(e,t,n,r,i,a){let o=_t(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:I,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}var bt=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=ht(n),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(je(this.baseEventService))return this.baseEventService;if(!e)throw Error(`[EVENT-SERVICE] Missing ownerId for tool event context`);if(!t||t.length===0)throw Error(`[EVENT-SERVICE] Missing ownerPath for tool event context`);if(this.toolEventServices.has(e))return this.toolEventServices.get(e);let n=L(this.baseEventService,{ownerType:W,ownerId:e,ownerPath:t.map(e=>({...e}))});return this.toolEventServices.set(e,n),n}clearToolEventServices(){this.toolEventServices.clear()}getBaseEventService(){return this.baseEventService}buildExecutionOwnerContext(e,t){return gt(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return _t(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return vt(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return yt(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}emitExecution(e,t,n,r){this.emitWithContext(e,t,()=>this.buildExecutionOwnerContext(n,r),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for execution event`);return L(this.baseEventService,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}emitTool(e,t,n,r,i){this.emitWithContext(e,t,()=>this.buildToolOwnerContext(n,r,i),e=>this.ensureToolEventService(e.ownerId,e.ownerPath))}emitWithContext(e,t,n,r){if(je(this.baseEventService))return;let i=n(),a=r(i),o={timestamp:new Date,...t};a.emit(e,o,i)}emitExecutionStartEvent(e,t,n,r,i,a){ze(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){Be(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){Ve(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){He(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function xt(e){let t=St(e.metadata),n=wt(e.usage);return t??n}function St(e){if(!e)return;let t=wt({inputTokens:G(e,`inputTokens`),outputTokens:G(e,`outputTokens`),promptTokens:G(e,`promptTokens`),completionTokens:G(e,`completionTokens`),totalTokens:G(e,`totalTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return Ct(n);if(Et(n))return wt(n)}function Ct(e){try{return wt(JSON.parse(e))}catch{return}}function wt(e){if(!e)return;let t=Tt(e.inputTokens,e.promptTokens),n=Tt(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=Tt(e.totalTokens);return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r}}}function G(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Tt(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function Et(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}function Dt(e){return Math.ceil(JSON.stringify(e).length/4)}function Ot(e,t={}){let n=Dt(e),r=kt(e),i=r?.tokens,a=At(t.usageFloorTokens);return{usedTokens:r?.index===e.length-1?Math.max(i??0,a??0):Math.max(n,i??0,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function kt(e){for(let t=e.length-1;t>=0;t--){let n=xt(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function At(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const jt={"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}};function Mt(e){return jt[e]?.contextWindow??2e5}function Nt(e){return jt[e]?.maxOutput??16384}function Pt(e){return jt[e]?.name??e}function Ft(e){if(e>=1e6){let t=e/1e6;return Number.isInteger(t)?`${t}M`:`${parseFloat(t.toFixed(1))}M`}if(e<=0)return`0K`;if(e<1e3)return`<1K`;let t=e/1e3;return Number.isInteger(t)?`${t}K`:`${parseFloat(t.toFixed(1))}K`}const It=.95;function Lt(e,t,n){let r=Ot(e,{usageFloorTokens:n}),i=Mt(t),a=i*It,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:It*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function Rt(e,t,n,r,i,a){let o=Lt(e,t.defaultModel.model,n.cumulativeInputTokens);return o.shouldBlock?(i.warn(`[ROUND] Context hard-capacity prevention before provider call`,{estimatedTokens:o.estimatedTokens,contextLimit:o.contextLimit,thresholdTokens:o.thresholdTokens,thresholdPercentage:o.thresholdPercentage,serializedTokens:o.serializedTokens,providerTokens:o.providerTokens??0,usageFloorTokens:o.usageFloorTokens??0,round:a}),r.addAssistantMessage(`Context window is near capacity. Cannot process further in this round. Estimated ${o.estimatedTokens.toLocaleString()} / ${o.contextLimit.toLocaleString()} tokens (${Math.round(o.usedPercentage)}%) exceeds the hard-block threshold ${Math.round(o.thresholdPercentage)}%. Run /compact and retry.`,[],{round:a,contextOverflow:!0,estimatedTokens:o.estimatedTokens,contextLimit:o.contextLimit,thresholdTokens:o.thresholdTokens,thresholdPercentage:o.thresholdPercentage,serializedTokens:o.serializedTokens,providerTokens:o.providerTokens??0,usageFloorTokens:o.usageFloorTokens??0,usedPercentage:o.usedPercentage}),!0):!1}const zt={beforeRun:async(e,t)=>{e.beforeRun&&t.input&&await e.beforeRun(t.input,t.metadata)},afterRun:async(e,t)=>{e.afterRun&&t.input&&t.response&&await e.afterRun(t.input,t.response,t.metadata)},beforeProviderCall:async(e,t)=>{e.beforeProviderCall&&t.messages&&await e.beforeProviderCall(t.messages)},afterProviderCall:async(e,t)=>{e.afterProviderCall&&t.messages&&t.responseMessage&&await e.afterProviderCall(t.messages,t.responseMessage)},onError:async(e,t)=>{if(e.onError&&t.error){let n={action:`${I}.${F.ERROR}`,metadata:{}},r=t.executionContext?.executionId;typeof r==`string`&&r.length>0&&(n.executionId=r);let i=t.executionContext?.sessionId;typeof i==`string`&&i.length>0&&(n.sessionId=i);let a=t.executionContext?.userId;typeof a==`string`&&a.length>0&&(n.userId=a),await e.onError(t.error,n)}}};async function K(e,t,n,r){let i=zt[t];if(i)for(let a of e)try{await i(a,n)}catch(e){r.warn(`Plugin hook failed`,{pluginName:a.name,hookName:t,error:e instanceof Error?e.message:String(e)})}}function Bt(e){if(e?.type){if(e.type===`json_schema`){if(!e.schema)throw Error(`responseFormat.schema is required when type is 'json_schema'.`);return{type:`json_schema`,schema:e.schema,...e.name&&{name:e.name}}}return{type:e.type}}}function Vt(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function Ht(e,t){if(e===void 0||e===`auto`||e===`none`)return;let n=(t??[]).map(e=>e.name);if(e===`required`){if(n.length===0)throw Error(`toolChoice 'required' needs at least one tool, but the run has none.`);return}if(!n.includes(e.tool))throw Error(`toolChoice requests tool "${e.tool}" which is not available for this run. Available tools: ${n.length>0?n.join(`, `):`(none)`}`)}function Ut(e,t,n){let r=e.getCurrentProvider(),i=r?e.getProvider(r.provider):null;if(!r||!r.provider||!i)throw Error(`[EXECUTION] Provider is required`);let a=t.getTools();return{provider:i,currentInfo:r,aiProviderInfo:{providerName:r.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},toolsInfo:a.map(e=>{let t=e.parameters?.properties;if(!e.description||e.description.length===0)throw Error(`[EXECUTION] Tool "${e.name}" is missing description`);return{name:e.name,description:e.description,parameters:t&&typeof t==`object`?Object.keys(t):[]}}),availableTools:a}}function Wt(e){if(!e.currentInfo)throw Error(`No AI provider configured`);if(!e.provider)throw Error(`AI provider '${e.currentInfo.provider}' not found`);if(typeof e.provider.chat!=`function`)throw Error(`Provider must have chat method to support execution`)}function Gt(e,t,n,r,i){let a=e.getConversationStore(t);if(!a.getMessages().some(e=>e.role!==`system`)&&n.length>0){for(let e of n)if(e.role===`user`)a.addUserMessage(e.content,e.metadata,e.parts);else if(e.role===`assistant`)a.addAssistantMessage(e.content,e.toolCalls,e.metadata,e.parts);else if(e.role===`tool`){let t=e.metadata?.toolName;if(typeof t!=`string`||t.length===0)throw Error(`[EXECUTION] Tool message missing toolName metadata`);a.addToolMessageWithId(e.content,e.toolCallId,t,e.metadata,e.parts)}}let o=a.getMessages().some(e=>e.role===`system`);return r.systemMessage&&!o&&a.setSystemPrompt(r.systemMessage,{executionId:i}),a}function Kt(e,t,n,r){let i=e.getMessages(),a=i.filter(e=>e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0).pop(),o=a?a.content:`No response received. The context window may be full.`,s=a?.metadata?.providerError===!0,c=Date.now()-n.getTime();return{response:o,messages:i.map(e=>{if(typeof e.content!=`string`)throw Error(`[EXECUTION] Message content is required`);return{role:e.role,content:e.content,timestamp:e.timestamp,metadata:e.metadata,...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{}}}),executionId:t,duration:c,tokensUsed:i.filter(e=>e.metadata?.usage).reduce((e,t)=>{let n=t.metadata?.usage;if(n&&typeof n==`object`&&`totalTokens`in n){let t=Number(n.totalTokens);if(Number.isNaN(t))throw Error(`[EXECUTION] totalTokens must be a number`);return e+t}return e},0),toolsExecuted:r,success:!!a&&!s,...s?{error:Error(o)}:{}}}async function qt(e,t,n,r,i,a,o,s){let c=Date.now()-n.getTime();await K(a,`onError`,{error:e instanceof Error?e:Error(String(e)),executionContext:Zt(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(F.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function Jt(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Yt(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function Xt(e,t,n,r,i,a){return{messages:e,config:t,startTime:n,executionId:r,conversationId:i,...a?.sessionId&&{sessionId:a.sessionId},...a?.userId&&{userId:a.userId},...a?.metadata&&{metadata:a.metadata},...a?.signal&&{signal:a.signal},...a?.onTextDelta&&{onTextDelta:a.onTextDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.maxExecutionRounds!==void 0&&{maxExecutionRounds:a.maxExecutionRounds},...a?.maxSameToolInputs!==void 0&&{maxSameToolInputs:a.maxSameToolInputs},...a?.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:a.allowToolOnlyCompletion},...a?.maxTokens!==void 0&&{maxTokens:a.maxTokens},...a?.temperature!==void 0&&{temperature:a.temperature},...a?.toolChoice!==void 0&&{toolChoice:a.toolChoice}}}function Zt(e){let t={conversationId:Yt(e,`plugin-context`),executionId:e.executionId,startTime:e.startTime.toISOString(),messageCount:e.messages.length};return e.sessionId&&(t.sessionId=e.sessionId),e.userId&&(t.userId=e.userId),t}function Qt(e,t){let n=Array.isArray(t.lastTrackedAssistantMessage?.toolCalls)&&t.lastTrackedAssistantMessage.toolCalls.length>0;return{thinkingNodeId:`thinking_${e}_round${t.runningAssistantCount+1}`,previousThinkingNodeId:n?`thinking_${e}_round${t.runningAssistantCount}`:void 0}}async function $t(e,t,n,r,i){if(!t.defaultModel?.model)throw Error(`Model is required in defaultModel configuration. Please specify a model.`);if(typeof t.defaultModel.model!=`string`||t.defaultModel.model.trim()===``)throw Error(`Model must be a non-empty string in defaultModel configuration.`);let a={model:t.defaultModel.model,effort:t.defaultModel.effort??`high`,...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.toolChoice!==void 0&&{toolChoice:t.defaultModel.toolChoice},...n.availableTools.length>0&&{tools:n.availableTools},...(()=>{let e=Bt(t.responseFormat);return e?{responseFormat:e}:{}})(),...i};Ht(a.toolChoice,a.tools);let o=n.provider.chat.bind(n.provider);if(r){let n=r.lookup(e,t.defaultModel.model,t.defaultModel.provider,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens});if(n)return{role:`assistant`,content:n,timestamp:new Date,id:(0,c.randomUUID)(),state:`complete`};let i=await en(o,e,a,t.timeout);return typeof i.content==`string`&&r.store(e,t.defaultModel.model,t.defaultModel.provider,i.content,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens}),i}return en(o,e,a,t.timeout)}async function en(e,t,n,r){let i=tn(r),a=n.signal;if(i===void 0&&a===void 0)return e(t,n);if(a?.aborted)throw nn();let o=new AbortController,s,c=!1,l,u=()=>{s!==void 0&&(clearTimeout(s),s=void 0)},d=e=>{c||(c=!0,l?.(e),o.abort(e))},f=()=>{i===void 0||c||(u(),s=setTimeout(()=>{d(Error(`Provider call idle timeout after ${i}ms`))},i))},p=()=>{d(nn())};a?.addEventListener(`abort`,p,{once:!0});let m=n.onTextDelta,h={...n,signal:o.signal,...m===void 0?{}:{onTextDelta:e=>{f(),m(e)}}};f();try{return await Promise.race([e(t,h),new Promise((e,t)=>{l=t})])}finally{c=!0,u(),a?.removeEventListener(`abort`,p)}}function tn(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function nn(){let e=Error(`aborted`);return e.name=`AbortError`,e}function rn(e,t,n,r,i){let a=e.role===`assistant`?e.toolCalls:void 0,o=Array.isArray(a)&&a.length>0;if(typeof e.content!=`string`&&!o)throw Error(`[EXECUTION] Provider response must have content or tool calls`);if(a&&!Array.isArray(a))throw Error(`[EXECUTION] assistant toolCalls must be an array`);let s=e.content??``;if(i.debug(`[ROUND-${r}] Provider response completed`,{executionId:t,conversationId:n,round:r,responseLength:s.length,hasToolCalls:Array.isArray(a)&&a.length>0,toolCallsCount:Array.isArray(a)?a.length:0}),e.role!==`assistant`)throw Error(`Unexpected response role: ${e.role}`);let c=e,l=c.toolCalls??[];if(!Array.isArray(l))throw Error(`[EXECUTION] assistantResponse.toolCalls must be an array`);return{assistantResponse:c,assistantToolCalls:l}}function an(e,t,n,r){let i=0,a=0;return{wrappedOnTextDelta:a=>{e.onExecutionEvent?.(`provider_stream_raw_delta`,{executionId:n,conversationId:e.conversationId,round:r,sequence:i,delta:a}),i++,t.appendStreaming(a),e.onTextDelta?.(a)},wrappedOnProviderNativeRawPayload:t=>{let i=t.sequence??a;a=Math.max(a,i+1),e.onExecutionEvent?.(`provider_native_raw_payload`,{executionId:n,conversationId:e.conversationId,round:r,...t,sequence:i})}}}async function on(e,t,n,r,i,a,o,s,c,l,u){try{i.onExecutionEvent?.(`provider_request`,{executionId:s,conversationId:i.conversationId,round:o,provider:n.currentInfo.provider,model:t.defaultModel.model,messages:e,tools:n.availableTools});let a=await $t(e,t,n,r,{signal:i.signal,onTextDelta:l,onProviderNativeRawPayload:u,...i.maxTokens!==void 0&&{maxTokens:i.maxTokens},...i.temperature!==void 0&&{temperature:i.temperature},...(()=>{let e=Vt(i.toolChoice??t.defaultModel.toolChoice,o);return e===void 0?{}:{toolChoice:e}})()});return i.onExecutionEvent?.(`provider_response_raw`,{executionId:s,conversationId:i.conversationId,round:o,response:a,responseKind:`provider-normalized-message`}),i.onExecutionEvent?.(`provider_response_normalized`,{executionId:s,conversationId:i.conversationId,round:o,response:a,toolCallsCount:a.role===`assistant`&&Array.isArray(a.toolCalls)?a.toolCalls.length:0}),a}catch(e){if(e instanceof Error&&(e.name===`AbortError`||e.message.includes(`aborted`)||e.message.includes(`abort`)))throw a.commitAssistant(`interrupted`,{round:o}),e;a.discardPending();let t=e instanceof Error?e.message:String(e);return c.error(`[ROUND] Provider call failed`,{error:t,round:o}),a.addAssistantMessage(`Request failed: ${t}`,[],{round:o,providerError:!0}),null}}function sn(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function cn(e,t,n,r,i,a){let o=!1,s=0,c=0;for(let l of e){if(!l.id)throw Error(`Tool call missing ID: ${JSON.stringify(l)}`);let e=l.function?.name;if(!e||e.length===0)throw Error(`[EXECUTION] Tool call "${l.id}" missing function name`);if(o){i.warn(`[ROUND] Skipping tool result due to context overflow`,{toolCallId:l.id,toolName:e,round:r}),n.addToolMessageWithId(`Error: Context window near capacity. Tool execution result skipped. Respond with available results and re-request skipped tools if needed.`,l.id,e,{round:r,success:!1,error:`context_overflow`,toolName:e}),c++;continue}let u=t.results.find(e=>e.executionId===l.id),d=t.errors.find(e=>Ee(e)&&e.executionId===l.id),f,p={round:r};if(u&&u.success){if(u.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload`);f=typeof u.result==`string`?u.result:JSON.stringify(u.result),p.success=!0,u.toolName&&(p.toolName=u.toolName)}else if(u&&!u.success){if(!u.error||u.error.length===0)throw Error(`[EXECUTION] Tool result missing error message`);f=`Error: ${u.error}`,p.success=!1,p.error=u.error,u.toolName&&(p.toolName=u.toolName),u.metadata?.errorCode===`unknown_tool`&&(p.errorCode=ft,typeof u.metadata.requestedTool==`string`&&(p.requestedTool=u.metadata.requestedTool),Array.isArray(u.metadata.availableTools)&&(p.availableTools=u.metadata.availableTools.filter(e=>typeof e==`string`)))}else if(d){let e=d,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message`);f=`Error: ${t}`,p.success=!1,p.error=t,e.toolName&&(p.toolName=e.toolName)}else throw Error(`No execution result found for tool call ID: ${l.id}`);if(i.debug(`Adding tool result to conversation`,{toolCallId:l.id,toolName:e,content:f.substring(0,100),round:r,currentHistoryLength:n.getMessages().length}),n.addToolMessageWithId(f,l.id,e,p),a){let e=Ot(n.getMessages(),{usageFloorTokens:a.cumulativeInputTokens}).usedTokens;e>a.contextLimit*.8&&(i.warn(`[ROUND] Context budget exceeded after tool result — skipping remaining tools`,{estimatedTokens:e,contextLimit:a.contextLimit,toolCallId:l.id,round:r}),o=!0)}s++,i.debug(`Tool result added to history`,{toolCallId:l.id,newHistoryLength:n.getMessages().length,round:r})}return{contextOverflowed:o,addedCount:s,skippedCount:c,unknownToolFailureCount:0,unknownToolNames:[]}}function ln(e,t,n){for(let r of e){let e=r.function?.name??`unknown`,i=`${e}::${typeof r.function?.arguments==`string`?r.function.arguments:JSON.stringify(r.function?.arguments??{})}`,a=(t.sameToolInputCounts.get(i)??0)+1;if(t.sameToolInputCounts.set(i,a),a>n)throw Error(`[EXECUTION] Tool "${e}" called with identical input ${a} times — aborting to prevent infinite loop`)}}async function un(e,t,n,r,i,a,o,s,c,l,u,d,f){let{toolExecutionService:p,logger:m,eventEmitter:h}=c,g=f??l?.maxSameToolInputs;g!==void 0&&ln(e,s,g),m.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:i,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let _=h.buildThinkingOwnerContext(n,r,a,o).ownerPath,ee=e.length,v=`${a}`,y=p.createExecutionRequestsWithContext(e,{ownerPathBase:_,metadataFactory:e=>({conversationId:n,round:i,directParentId:a,batchId:v,expectedCount:ee,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:h.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:h.getBaseEventService()}}),b={requests:y,mode:`parallel`,maxConcurrency:5,continueOnError:!0,signal:u};d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:v,mode:b.mode,maxConcurrency:b.maxConcurrency,requestCount:y.length,tools:y.map(e=>e.toolName)}),y.forEach((e,t)=>{d?.(`tool_execution_request`,{executionId:r,conversationId:n,round:i,batchId:v,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.parameters,ownerPath:e.ownerPath})});let x=await p.executeTools(b),S=x.results.filter(sn).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);x.results.forEach((e,t)=>{d?.(`tool_execution_result`,{executionId:r,conversationId:n,round:i,batchId:v,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})}),s.toolsExecuted.push(...x.results.filter(e=>!sn(e)).map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}));let C=Mt(l?.defaultModel?.model??``),te=t.getMessages().length,w=cn(e,x,t,i,m,{contextLimit:C,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(te).forEach((e,t)=>{d?.(`tool_message_committed`,{executionId:r,conversationId:n,round:i,batchId:v,index:t,message:e}),d?.(`history_mutation`,{executionId:r,conversationId:n,round:i,batchId:v,mutation:`append_message`,index:te+t,message:e})}),h.emitToolResultsEvents(e,x,s.toolsExecuted,n,r,i,a,o),h.clearToolEventServices(),{...w,unknownToolFailureCount:S.length,unknownToolNames:S}}function dn(e){let t=0,n=0,r=!1;for(let i of e){if(!O(i)||i.data===void 0)continue;let e=k(i);if(e.role!==`assistant`)continue;let a=fn(e);a&&(r=!0,t+=a.inputTokens,n+=a.outputTokens)}if(r)return{promptTokens:t,completionTokens:n,totalTokens:t+n}}function fn(e){let t=xt(e);if(!t)return;let n=t.totalTokens??t.inputTokens+t.outputTokens;return{inputTokens:t.inputTokens,outputTokens:t.outputTokens,usage:{totalTokens:n,inputTokens:t.inputTokens,outputTokens:t.outputTokens}}}async function pn(e,t,n,r,i,a,o,s,c){let{plugins:l,logger:u,eventEmitter:d,cacheService:f}=c,p=e.currentRound;u.debug(`[ROUND-${p}] Starting execution round ${p}`,{executionId:i,conversationId:a.conversationId,round:p,maxRounds:t});let m=n.getMessages(),{thinkingNodeId:h,previousThinkingNodeId:g}=Qt(r,e);if(await K(l,`beforeProviderCall`,{messages:m},u),u.debug(`Sending messages to AI provider`,{round:p,messageCount:m.length,lastFewMessages:m.slice(-5).map(e=>({role:e.role,content:e.content?.substring(0,50),hasToolCalls:`toolCalls`in e?!!e.toolCalls?.length:!1,toolCallId:`toolCallId`in e?e.toolCallId:void 0}))}),d.emitWithContext(F.ASSISTANT_MESSAGE_START,{parameters:{round:p,messageCount:m.length},metadata:{round:p,thinkingNodeId:h}},()=>d.buildThinkingOwnerContext(r,i,h,g),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for thinking event`);return L(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),Rt(m,o,e,n,u,p))return!0;p>1&&a.onTextDelta?.(`
|
|
3
3
|
|
|
4
|
-
`),n.beginAssistant();let{wrappedOnTextDelta:_,wrappedOnProviderNativeRawPayload:v}=Ft(a,n,i,p),y=await It(m,o,s,f,a,n,p,i,u,_,v);if(y===null)return!0;let{assistantResponse:b,assistantToolCalls:x}=Pt(y,i,a.conversationId,p,u);await Y(l,`afterProviderCall`,{messages:m,responseMessage:y},u);let S=typeof b.content==`string`&&b.content.trim().length>0;if(x.length===0&&!S)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let C=Vt(b),w=C?.inputTokens??0;w>0&&(e.cumulativeInputTokens=w),b.content&&!n.getPendingContent()&&n.appendStreaming(b.content);for(let e of x)n.appendToolCall(e);let T=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(T,{round:p,...C??{}});let E=n.getMessages().at(-1);if(a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:b}),E&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:E}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=b,x.length===0)return u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(b,i,p,r,h,g),!0;let D=await Bt(x,n,r,i,p,h,g,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs);if(D.contextOverflowed&&u.warn(`[ROUND] Tool results partially skipped due to context overflow — continuing to let AI respond`,{added:D.addedCount,skipped:D.skippedCount,round:p}),D.unknownToolFailureCount>0?e.consecutiveUnknownToolFailureRounds+=1:e.consecutiveUnknownToolFailureRounds=0,e.consecutiveUnknownToolFailureRounds>=2){let t=[...new Set(D.unknownToolNames)].sort();return e.forcedSummaryInstruction=[`The model repeatedly requested unavailable tool(s): ${t.join(`, `)}.`,`Those tool calls were not executed because they are not registered tools.`,`Respond to the user now with that reason and use the available tool results already in the conversation history.`].join(` `),u.warn(`[ROUND] Stopping repeated unavailable tool-call loop`,{unavailableTools:t,consecutiveRounds:e.consecutiveUnknownToolFailureRounds,round:p}),!0}return u.debug(`Round ${p} completed - continuing to next round for agent ${a.conversationId}`),!1}function Wt(e,t,n){let r=e.getCurrentProvider(),i=r?e.getProvider(r.provider):null;if(!r||!r.provider||!i)throw Error(`[EXECUTION] Provider is required`);let a=t.getTools();return{provider:i,currentInfo:r,aiProviderInfo:{providerName:r.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},toolsInfo:a.map(e=>{let t=e.parameters?.properties;if(!e.description||e.description.length===0)throw Error(`[EXECUTION] Tool "${e.name}" is missing description`);return{name:e.name,description:e.description,parameters:t&&typeof t==`object`?Object.keys(t):[]}}),availableTools:a}}function Gt(e){if(!e.currentInfo)throw Error(`No AI provider configured`);if(!e.provider)throw Error(`AI provider '${e.currentInfo.provider}' not found`);if(typeof e.provider.chat!=`function`)throw Error(`Provider must have chat method to support execution`)}function Kt(e,t,n,r,i){let a=e.getConversationStore(t);if(a.getMessageCount()===0&&n.length>0){for(let e of n)if(e.role===`user`)a.addUserMessage(e.content,e.metadata,e.parts);else if(e.role===`assistant`)a.addAssistantMessage(e.content,e.toolCalls,e.metadata,e.parts);else if(e.role===`system`)a.addSystemMessage(e.content,e.metadata,e.parts);else if(e.role===`tool`){let t=e.metadata?.toolName;if(typeof t!=`string`||t.length===0)throw Error(`[EXECUTION] Tool message missing toolName metadata`);a.addToolMessageWithId(e.content,e.toolCallId,t,e.metadata,e.parts)}}return r.systemMessage&&a.addSystemMessage(r.systemMessage,{executionId:i}),a}function qt(e,t,n,r){let i=e.getMessages(),a=i.filter(e=>e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0).pop(),o=a?a.content:`No response received. The context window may be full.`,s=a?.metadata?.providerError===!0,c=Date.now()-n.getTime();return{response:o,messages:i.map(e=>{if(typeof e.content!=`string`)throw Error(`[EXECUTION] Message content is required`);return{role:e.role,content:e.content,timestamp:e.timestamp,metadata:e.metadata,...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{}}}),executionId:t,duration:c,tokensUsed:i.filter(e=>e.metadata?.usage).reduce((e,t)=>{let n=t.metadata?.usage;if(n&&typeof n==`object`&&`totalTokens`in n){let t=Number(n.totalTokens);if(Number.isNaN(t))throw Error(`[EXECUTION] totalTokens must be a number`);return e+t}return e},0),toolsExecuted:r,success:!!a&&!s,...s?{error:Error(o)}:{}}}async function Jt(e,t,n,r,i,a,o,s){let c=Date.now()-n.getTime();await Y(a,`onError`,{error:e instanceof Error?e:Error(String(e)),executionContext:Qt(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(I.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function Yt(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Xt(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function Zt(e,t,n,r,i,a){return{messages:e,config:t,startTime:n,executionId:r,conversationId:i,...a?.sessionId&&{sessionId:a.sessionId},...a?.userId&&{userId:a.userId},...a?.metadata&&{metadata:a.metadata},...a?.signal&&{signal:a.signal},...a?.onTextDelta&&{onTextDelta:a.onTextDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.maxExecutionRounds!==void 0&&{maxExecutionRounds:a.maxExecutionRounds},...a?.maxSameToolInputs!==void 0&&{maxSameToolInputs:a.maxSameToolInputs}}}function Qt(e){let t={conversationId:Xt(e,`plugin-context`),executionId:e.executionId,startTime:e.startTime.toISOString(),messageCount:e.messages.length};return e.sessionId&&(t.sessionId=e.sessionId),e.userId&&(t.userId=e.userId),t}function $t(e,t){let n=t.maxExecutionRounds??e.maxExecutionRounds;if(n===void 0)return 10;if(!Number.isInteger(n)||n<0)throw Error(`[EXECUTION] maxExecutionRounds must be a non-negative integer`);return n}function en(e,t){return t===0||e<t}async function tn(e,t,n,r,i,a,o,s,c){let l=$t(i,r);for(;en(o.currentRound,l)&&!(s?.aborted||(o.currentRound++,await Ut(o,l,e,t,n,r,i,a,c))||s?.aborted););let u=e.getMessages(),d=u.length>0?u[u.length-1]:void 0;d?.role===`assistant`&&typeof d.content==`string`&&d.content.length>0&&(!(`toolCalls`in d)||d.toolCalls.length===0)||await nn(e,a,i,n,o,t,r,c.logger,l)}async function nn(e,t,n,r,i,a,o,s,l=10){s.warn(`No final text response — forcing summary call`,{maxRounds:l===0?`unlimited`:l,currentRound:i.currentRound,conversationId:a});try{let r=i.forcedSummaryInstruction??`Tool round limit reached. Provide your response based on the information gathered so far. If results are incomplete, let the user know what was covered and what remains — the user can request additional analysis in a follow-up message.`;e.addUserMessage(r);let a=e.getMessages(),s=n.systemMessage??``,l=a.some(e=>e.role===`system`&&e.content===s),u=s&&!l?[{id:(0,c.randomUUID)(),role:`system`,content:s,state:`complete`,timestamp:new Date},...a]:a,d={model:t.aiProviderInfo.model};o.onTextDelta&&(d.onTextDelta=o.onTextDelta);let f=await t.provider.chat(u,d),p=e.getMessages();if(p.findIndex(e=>e.role===`user`&&e.content===r)!==-1){let t=p.filter(e=>!(e.role===`user`&&e.content===r));e.clear();for(let n of t)e.addMessage(n)}let m=typeof f.content==`string`?f.content:``;m?e.addAssistantMessage(m,[],f.metadata):e.addAssistantMessage(`Maximum rounds reached. Partial results available in conversation history.`)}catch(e){s.warn(`Forced summary call failed`,{error:e instanceof Error?e.message:String(e)})}}async function rn(e,t,n,r,i,a,o,s,c,l,u){let d={...qt(t,n,r,i.toolsExecuted),interrupted:o};return await Y(c,`afterRun`,{input:e,response:d.response,metadata:s?.metadata},l),l.debug(`Execution pipeline completed successfully`,{executionId:n,conversationId:a,duration:d.duration,tokensUsed:d.tokensUsed,toolsExecuted:d.toolsExecuted.length,rounds:i.currentRound}),u.emitExecution(I.COMPLETE,{result:{success:!0,data:d.response.substring(0,100)+`...`},metadata:{method:`execute`,success:!0,duration:d.duration,tokensUsed:d.tokensUsed,toolsExecuted:d.toolsExecuted}},a,n),d}async function*an(e,t,n,r,i,a,o){o.debug(`[EXECUTION-SERVICE-STREAM] Executing tools:`,{tools:e.map(e=>e.function.name)});let s=n,c=`thinking_${s}_${Date.now()}_${r}`,l=[...a.buildExecutionOwnerContext(s,r).ownerPath,{type:`thinking`,id:c}],u={requests:i.createExecutionRequestsWithContext(e,{ownerPathBase:l}),mode:`parallel`,maxConcurrency:5,continueOnError:!0},d=await i.executeTools(u);for(let n of e){if(!n.id)throw Error(`[EXECUTION] Tool call missing id in streaming mode`);if(!n.function?.name||n.function.name.length===0)throw Error(`[EXECUTION] Tool call "${n.id}" missing function name in streaming mode`);let e=d.results.find(e=>e.executionId===n.id),i=d.errors.find(e=>ye(e)&&e.executionId===n.id),a,o={executionId:r};if(e&&e.success){if(e.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload in streaming mode`);a=typeof e.result==`string`?e.result:JSON.stringify(e.result),o.success=!0,e.toolName&&(o.toolName=e.toolName),yield{chunk:`\n[Tool: ${n.function.name} executed successfully]`,isComplete:!1}}else if(i){let e=i,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message in streaming mode`);a=`Error: ${t}`,o.success=!1,o.error=t,e.toolName&&(o.toolName=e.toolName),yield{chunk:`\n[Tool: ${n.function.name} failed: ${t}]`,isComplete:!1}}else throw Error(`[EXECUTION] Missing tool result for tool call "${n.id}" in streaming mode`);t.addToolMessageWithId(a,n.id,n.function.name,o)}let f=e.map(e=>{if(!e.id||e.id.length===0)throw Error(`[EXECUTION] Tool call missing id for streaming tool results ready payload`);return e.id});if(f.length===0)throw Error(`[EXECUTION] Tool results ready requires toolCallIds in streaming mode`);a.emitExecution(I.TOOL_RESULTS_READY,{parameters:{toolCallIds:f,round:1},metadata:{toolsExecuted:d.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:1}},n,r)}async function*on(e,t,n,r,i){let{aiProviders:a,tools:o,conversationHistory:s,toolExecutionService:c,plugins:l,logger:u,eventEmitter:d}=i;u.debug(`ExecutionService.executeStream called`);let f=i.generateExecutionId(),p=Date.now();if(!r?.conversationId||r.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for streaming`);let m=r.conversationId;d.prepareOwnerPathBases(m);try{let t=s.getConversationStore(r.conversationId);e&&t.addUserMessage(e,{executionId:f}),await Y(l,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},u);let i=a.getCurrentProvider();if(!i)throw Error(`No AI provider configured`);let p=a.getProvider(i.provider);if(!p)throw Error(`AI provider '${i.provider}' not found`);if(typeof p.chatStream!=`function`)throw Error(`Provider must have chatStream method to support streaming execution`);u.debug(`ExecutionService calling provider.chatStream`);let h=t.getMessages(),g=Array.isArray(n.tools)?n.tools.length:void 0;u.debug(`[EXECUTION-SERVICE] config.tools:`,{length:g});let _=o.getTools(),v=Array.isArray(_)?_.length:void 0;u.debug(`[EXECUTION-SERVICE] this.tools.getTools():`,{length:v}),u.debug(`[EXECUTION-SERVICE] config.tools exists:`,{exists:!!n.tools}),u.debug(`[EXECUTION-SERVICE] config.tools.length > 0:`,{hasTools:n.tools&&n.tools.length>0});let y={model:n.defaultModel.model,...n.tools&&n.tools.length>0&&{tools:o.getTools()},...n.responseFormat?.type?{responseFormat:{type:n.responseFormat.type}}:{}};u.debug(`[EXECUTION-SERVICE] Final chatOptions has tools:`,{hasTools:!!y.tools});let b=Array.isArray(y.tools)?y.tools.length:void 0;u.debug(`[EXECUTION-SERVICE] Final chatOptions.tools length:`,{length:b});let x=p.chatStream;if(!x)throw Error(`Provider does not support streaming`);let S=x.call(p,h,y),C=``,w=[],T=-1;for await(let e of S)if(e.content&&(C+=e.content,yield{chunk:e.content,isComplete:!1}),e.role===`assistant`){let t=e;if(Array.isArray(t.toolCalls)&&t.toolCalls.length>0){for(let e of t.toolCalls)if(e.id&&e.id!==``){if(!e.type||e.type.length===0)throw Error(`[EXECUTION] Tool call "${e.id}" missing type in stream`);if(!e.function?.name||e.function.name.length===0)throw Error(`[EXECUTION] Tool call "${e.id}" missing function name in stream`);if(typeof e.function.arguments!=`string`)throw Error(`[EXECUTION] Tool call "${e.id}" missing arguments in stream`);T=w.length,w.push({id:e.id,type:e.type,function:{name:e.function.name,arguments:e.function.arguments}}),u.debug(`[TOOL-STREAM] New tool call started: ${e.id} (${e.function?.name})`)}else if(T>=0){let t=typeof e.function?.name==`string`&&e.function.name.length>0,n=typeof e.function?.arguments==`string`&&e.function.arguments.length>0;if(!t&&!n)throw Error(`[EXECUTION] Tool call fragment missing name/arguments for ${w[T].id}`);t&&(w[T].function.name+=e.function.name),n&&(w[T].function.arguments+=e.function.arguments);let r=n?e.function.arguments:e.function.name;u.debug(`[TOOL-STREAM] Adding fragment to tool ${w[T].id}: "${r}"`)}}}if(u.debug(`[EXECUTION-SERVICE-STREAM] Stream completed, toolCalls detected:`,{count:w.length}),typeof C!=`string`)throw Error(`[EXECUTION] Streaming response content is required`);t.addAssistantMessage(C,w,{executionId:f}),w.length>0&&(yield*an(w,t,m,f,c,d,u)),await Y(l,`afterRun`,{input:e,response:C,...r?.metadata?{metadata:r.metadata}:{}},u),yield{chunk:``,isComplete:!0}}catch(t){throw u.error(`ExecutionService streaming execution failed`,{error:t instanceof Error?t.message:String(t),executionTime:Date.now()-p}),await Y(l,`onError`,{input:e,error:t instanceof Error?t:Error(String(t)),...r?.metadata?{metadata:r.metadata}:{}},u),t}finally{d.resetOwnerPathBases()}}var sn=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new it(t),this.aiProviders=e,this.tools=t,this.conversationHistory=n,this.plugins=[],this.logger=M(`ExecutionService`),!r)throw Error(`[EXECUTION] EventService is required`);this.eventEmitter=new dt(r,this.logger,i),this.cacheService=a}registerPlugin(e){let t=e.priority??0,n=this.plugins.findIndex(e=>(e.priority??0)<t);n===-1?this.plugins.push(e):this.plugins.splice(n,0,e),this.logger.debug(`Plugin registered`,{pluginName:e.name,priority:t})}removePlugin(e){let t=this.plugins.findIndex(t=>t.name===e);return t===-1?!1:(this.plugins.splice(t,1),this.logger.debug(`Plugin removed`,{pluginName:e}),!0)}getPlugin(e){return this.plugins.find(t=>t.name===e)}getPlugins(){return[...this.plugins]}async execute(e,t,n,r){let i=Yt(),a=new Date,o=Xt(r,`execute`),s=Zt(t,n,a,i,o,r);this.eventEmitter.prepareOwnerPathBases(o),this.logger.debug(`Starting execution pipeline`,{executionId:i,conversationId:o,messageCount:t.length,hasContext:!!r});let c=Wt(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=Kt(this.conversationHistory,o,t,n,i);try{let t=l.getMessages().length;l.addUserMessage(e,{executionId:i});let u=l.getMessages()[t];u&&s.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:o,mutation:`append_message`,index:t,message:u}),this.eventEmitter.emitUserMessageEvent(e,o,i),await Y(this.plugins,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},this.logger),Gt(c);let d={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await tn(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),rn(e,l,i,a,d,o,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){return e instanceof Error&&(e.name===`AbortError`||e.message.includes(`aborted`)||e.message.includes(`abort`))?{response:``,messages:l.getMessages(),executionId:i,duration:Date.now()-a.getTime(),toolsExecuted:[],success:!0,interrupted:!0}:(await Jt(e,s,a,o,i,this.plugins,this.logger,this.eventEmitter),{response:`Error: ${e instanceof Error?e.message:String(e)}`,messages:[],tokensUsed:0,toolsExecuted:[],duration:Date.now()-a.getTime(),executionId:i,success:!1})}finally{this.eventEmitter.resetOwnerPathBases()}}async*executeStream(e,t,n,r){yield*on(e,t,n,r,{aiProviders:this.aiProviders,tools:this.tools,conversationHistory:this.conversationHistory,toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,generateExecutionId:()=>Yt()})}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`)}};const X=(e,t)=>`${e}.${t}`,cn={START:X(L,I.START),COMPLETE:X(L,I.COMPLETE),ERROR:X(L,I.ERROR)},ln={CALL_START:X(K,G.CALL_START),CALL_COMPLETE:X(K,G.CALL_COMPLETE),CALL_ERROR:X(K,G.CALL_ERROR)},un={EXECUTION_START:X(F,P.EXECUTION_START),EXECUTION_COMPLETE:X(F,P.EXECUTION_COMPLETE),EXECUTION_ERROR:X(F,P.EXECUTION_ERROR),CREATED:X(F,P.CREATED)},Z={EXECUTION_START:cn.START,EXECUTION_COMPLETE:cn.COMPLETE,EXECUTION_ERROR:cn.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:ln.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:un.EXECUTION_START,AGENT_EXECUTION_COMPLETE:un.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:un.EXECUTION_ERROR,AGENT_CREATED:un.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 dn=class{enabled=!0;category=`custom`;priority=ve.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=M(`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=!0,e?.category&&(this.category=e.category),e?.priority!==void 0&&(this.priority=(e.priority,e.priority))}async subscribeToModuleEvents(e){if(this.eventEmitter=e,!this.options)return;let t=[];this.options.subscribeToAllModuleEvents&&t.push(Z.MODULE_INITIALIZE_START,Z.MODULE_INITIALIZE_COMPLETE,Z.MODULE_INITIALIZE_ERROR,Z.MODULE_EXECUTION_START,Z.MODULE_EXECUTION_COMPLETE,Z.MODULE_EXECUTION_ERROR,Z.MODULE_DISPOSE_START,Z.MODULE_DISPOSE_COMPLETE,Z.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let e of t){let t=this.eventEmitter.on(e,async t=>{try{this.stats.moduleEventsReceived++,this.stats.lastActivity=new Date,await this.onModuleEvent?.(e,t)}catch(t){this.stats.errors++;let n=t instanceof Error?t:Error(String(t));this.pluginLogger.error(`Plugin "${this.name}" failed to handle module event "${String(e)}"`,{plugin:this.name,eventType:String(e),error:n.message})}}),n=this.eventHandlers.get(e);n?n.push(t):this.eventHandlers.set(e,[t]),this.subscribedEvents.push(e)}}async unsubscribeFromModuleEvents(e){for(let[t,n]of this.eventHandlers.entries())for(let r of n)e.off(t,r);this.eventHandlers.clear(),this.subscribedEvents=[],this.eventEmitter=void 0}async dispose(){this.eventEmitter&&await this.unsubscribeFromModuleEvents(this.eventEmitter)}enable(){this.enabled=!0}disable(){this.enabled=!1}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:!0,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}},fn=class{logger;constructor(e=A){this.logger=e}supportsTools(){return!1}validateConfig(){return!0}async dispose(){}async withRetry(e,t=3,n=1e3){let r;for(let i=0;i<=t;i++)try{return await e()}catch(e){r=e instanceof Error?e:Error(String(e)),i<t&&(this.logger.warn?.(`[${this.name}] Attempt ${i+1} failed, retrying in ${n}ms`,{error:r.message,attempt:i+1,maxRetries:t}),await this.delay(n))}throw r}withTimeout(e,t){let n;return Promise.race([e.then(e=>(clearTimeout(n),e)),new Promise((e,r)=>{n=setTimeout(()=>r(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,n){this.logger.error?.(`[${this.name}] ${e}`,{error:t.message,stack:t.stack,...n})}validateRequest(e){if(!e.messages||e.messages.length===0)throw Error(`Request must include at least one message`);if(!e.provider)throw Error(`Request must specify a provider`);if(!e.model)throw Error(`Request must specify a model`)}validateResponse(e){if(!e.role)throw 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 Error(`Response must have content or tool calls`)}},pn=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??A}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(t=>t in e)}validateParameters(e){let t=this.schema.parameters.required||[],n=[],r=e;for(let e of t)e in r||n.push(`Missing required parameter: ${e}`);return{isValid:n.length===0,errors:n}}getDescription(){return this.schema.description}getName(){return this.schema.name}},mn=class{static toProviderFormat(e,t,n={}){if(typeof t==`function`)return t(e);if(typeof t==`string`){let r=n[t];if(r!==void 0)return r(e)}return this.toUniversalFormat(e)}static toUniversalFormat(e){return e}static extractSystemMessage(e){return e.find(e=>e.role===`system`)?.content}static filterNonSystemMessages(e){return e.filter(e=>e.role!==`system`)}},Q=class{static validateAgentConfig(e){let t=[],n=[];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(e=>e.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&&n.push(`systemMessage is quite long, consider keeping it concise for better performance`),e.tools&&e.tools.length>20&&n.push(`Large number of tools may impact performance, consider grouping related tools`),{isValid:t.length===0,errors:t,warnings:n}}static validateUserInput(e){let t=[],n=[];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&&n.push(`Very long input may be truncated by AI providers`)),{isValid:t.length===0,errors:t,warnings:n}}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=[];return!e||typeof e!=`string`?(t.push(`API key must be a non-empty string`),{isValid:!1,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:[]})}};const hn=Q.validateAgentConfig,gn=Q.validateUserInput,_n=Q.validateProviderName,vn=Q.validateModelName,yn=Q.validateApiKey;function bn(e,t,n){return setInterval(()=>{(async()=>{try{await n()}catch(n){e.error(`Periodic task failed`,{task:t.name,error:n instanceof Error?n.message:String(n)})}})()},t.intervalMs)}function xn(e){e&&clearInterval(e)}function Sn(e,t){let n={id:(0,c.randomUUID)(),role:`user`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Cn(e,t){let n={id:(0,c.randomUUID)(),role:`assistant`,content:e,state:t?.state??`complete`,timestamp:new Date};return t?.toolCalls&&(n.toolCalls=t.toolCalls),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function wn(e,t){let n={id:(0,c.randomUUID)(),role:`system`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Tn(e,t){let n={id:(0,c.randomUUID)(),role:`tool`,content:e,toolCallId:t.toolCallId,state:`complete`,timestamp:new Date};return t.name&&(n.name=t.name),t.metadata&&(n.metadata=t.metadata),t.parts&&(n.parts=t.parts),n}var En=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(ae(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(Sn(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(Cn(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(wn(e,{...t&&{metadata:t},...n&&{parts:n}}))}addToolMessageWithId(e,t,n,r,i){this.addMessage(Tn(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(O).map(ie)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(O).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(O);if(e.length<=this.maxMessages)return;let t=e.map(ie),n=t.filter(ce),r=t.filter(e=>!ce(e)),i=Math.max(0,this.maxMessages-n.length),a=[...n,...r.slice(-i)],o=new Set(a.map(e=>e.id));this.entries=this.entries.filter(e=>!O(e)||o.has(e.id))}},Dn=class{history;pendingAssistant=null;constructor(e=0){this.history=new En({maxMessages:e})}addMessage(e){this.history.addMessage(e)}addUserMessage(e,t,n){this.history.addUserMessage(e,t,n)}addAssistantMessage(e,t,n,r){this.history.addAssistantMessage(e,t,n,r)}addSystemMessage(e,t,n){this.history.addSystemMessage(e,t,n)}addToolMessage(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n||`unknown`,r,i)}addToolMessageWithId(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n,r,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||={id:(0,c.randomUUID)(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:(0,c.randomUUID)(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:(0,c.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 n=this.pendingAssistant,r=n.toolCalls.length>0,i=n.content,a={id:n.id,role:`assistant`,content:i,state:e,timestamp:new Date,...r&&{toolCalls:n.toolCalls},...t&&{metadata:t}};this.history.addMessage(a),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||``)+`
|
|
4
|
+
`),n.beginAssistant();let{wrappedOnTextDelta:_,wrappedOnProviderNativeRawPayload:ee}=an(a,n,i,p),v=await on(m,o,s,f,a,n,p,i,u,_,ee);if(v===null)return!0;let{assistantResponse:y,assistantToolCalls:b}=rn(v,i,a.conversationId,p,u);await K(l,`afterProviderCall`,{messages:m,responseMessage:v},u);let x=typeof y.content==`string`&&y.content.trim().length>0;if(b.length===0&&!x)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let S=fn(y),C=S?.inputTokens??0;C>0&&(e.cumulativeInputTokens=C),y.content&&!n.getPendingContent()&&n.appendStreaming(y.content);for(let e of b)n.appendToolCall(e);let te=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(te,{round:p,...S??{}});let w=n.getMessages().at(-1);if(a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:y}),w&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:w}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=y,b.length===0)return u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(y,i,p,r,h,g),!0;let T=await un(b,n,r,i,p,h,g,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs);if(T.contextOverflowed&&u.warn(`[ROUND] Tool results partially skipped due to context overflow — continuing to let AI respond`,{added:T.addedCount,skipped:T.skippedCount,round:p}),T.unknownToolFailureCount>0?e.consecutiveUnknownToolFailureRounds+=1:e.consecutiveUnknownToolFailureRounds=0,e.consecutiveUnknownToolFailureRounds>=2){let t=[...new Set(T.unknownToolNames)].sort();return e.forcedSummaryInstruction=[`The model repeatedly requested unavailable tool(s): ${t.join(`, `)}.`,`Those tool calls were not executed because they are not registered tools.`,`Respond to the user now with that reason and use the available tool results already in the conversation history.`].join(` `),u.warn(`[ROUND] Stopping repeated unavailable tool-call loop`,{unavailableTools:t,consecutiveRounds:e.consecutiveUnknownToolFailureRounds,round:p}),!0}return u.debug(`Round ${p} completed - continuing to next round for agent ${a.conversationId}`),!1}function mn(e,t){let n=t.maxExecutionRounds??e.maxExecutionRounds;if(n===void 0)return 10;if(!Number.isInteger(n)||n<0)throw Error(`[EXECUTION] maxExecutionRounds must be a non-negative integer`);return n}function hn(e,t){return t===0||e<t}async function gn(e,t,n,r,i,a,o,s,c){let l=mn(i,r);for(;hn(o.currentRound,l)&&!(s?.aborted||(o.currentRound++,await pn(o,l,e,t,n,r,i,a,c))||s?.aborted););let u=e.getMessages(),d=u.length>0?u[u.length-1]:void 0,f=d?.role===`assistant`&&typeof d.content==`string`&&d.content.length>0&&(!(`toolCalls`in d)||d.toolCalls.length===0);s?.aborted||r.allowToolOnlyCompletion!==!0&&(f||await _n(e,a,i,n,o,t,r,c.logger,l))}async function _n(e,t,n,r,i,a,o,s,l=10){s.warn(`No final text response — forcing summary call`,{maxRounds:l===0?`unlimited`:l,currentRound:i.currentRound,conversationId:a});try{let r=i.forcedSummaryInstruction??`Tool round limit reached. Provide your response based on the information gathered so far. If results are incomplete, let the user know what was covered and what remains — the user can request additional analysis in a follow-up message.`;e.addUserMessage(r);let a=e.getMessages(),s=n.systemMessage??``,l=a.some(e=>e.role===`system`&&e.content===s),u=s&&!l?[{id:(0,c.randomUUID)(),role:`system`,content:s,state:`complete`,timestamp:new Date},...a]:a,d={model:t.aiProviderInfo.model};o.onTextDelta&&(d.onTextDelta=o.onTextDelta);let f=await t.provider.chat(u,d),p=e.getMessages();if(p.findIndex(e=>e.role===`user`&&e.content===r)!==-1){let t=p.filter(e=>!(e.role===`user`&&e.content===r));e.clear();for(let n of t)e.addMessage(n)}let m=typeof f.content==`string`?f.content:``;m?e.addAssistantMessage(m,[],f.metadata):e.addAssistantMessage(`Maximum rounds reached. Partial results available in conversation history.`)}catch(e){s.warn(`Forced summary call failed`,{error:e instanceof Error?e.message:String(e)})}}async function vn(e,t,n,r,i,a,o,s,c,l,u){let d={...Kt(t,n,r,i.toolsExecuted),interrupted:o};return await K(c,`afterRun`,{input:e,response:d.response,metadata:s?.metadata},l),l.debug(`Execution pipeline completed successfully`,{executionId:n,conversationId:a,duration:d.duration,tokensUsed:d.tokensUsed,toolsExecuted:d.toolsExecuted.length,rounds:i.currentRound}),u.emitExecution(F.COMPLETE,{result:{success:!0,data:d.response.substring(0,100)+`...`},metadata:{method:`execute`,success:!0,duration:d.duration,tokensUsed:d.tokensUsed,toolsExecuted:d.toolsExecuted}},a,n),d}async function*yn(e,t,n,r,i,a,o,s){o.debug(`[EXECUTION-SERVICE-STREAM] Executing tools:`,{tools:e.map(e=>e.function.name)});let c=n,l=`thinking_${c}_${Date.now()}_${r}`,u=[...a.buildExecutionOwnerContext(c,r).ownerPath,{type:`thinking`,id:l}],d={requests:i.createExecutionRequestsWithContext(e,{ownerPathBase:u}),mode:`parallel`,maxConcurrency:5,continueOnError:!0,...s?{signal:s}:{}},f=await i.executeTools(d);for(let n of e){if(!n.id)throw Error(`[EXECUTION] Tool call missing id in streaming mode`);if(!n.function?.name||n.function.name.length===0)throw Error(`[EXECUTION] Tool call "${n.id}" missing function name in streaming mode`);let e=f.results.find(e=>e.executionId===n.id),i=f.errors.find(e=>Ee(e)&&e.executionId===n.id),a,o={executionId:r};if(e&&e.success){if(e.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload in streaming mode`);a=typeof e.result==`string`?e.result:JSON.stringify(e.result),o.success=!0,e.toolName&&(o.toolName=e.toolName),yield{chunk:`\n[Tool: ${n.function.name} executed successfully]`,isComplete:!1}}else if(i){let e=i,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message in streaming mode`);a=`Error: ${t}`,o.success=!1,o.error=t,e.toolName&&(o.toolName=e.toolName),yield{chunk:`\n[Tool: ${n.function.name} failed: ${t}]`,isComplete:!1}}else throw Error(`[EXECUTION] Missing tool result for tool call "${n.id}" in streaming mode`);t.addToolMessageWithId(a,n.id,n.function.name,o)}let p=e.map(e=>{if(!e.id||e.id.length===0)throw Error(`[EXECUTION] Tool call missing id for streaming tool results ready payload`);return e.id});if(p.length===0)throw Error(`[EXECUTION] Tool results ready requires toolCallIds in streaming mode`);a.emitExecution(F.TOOL_RESULTS_READY,{parameters:{toolCallIds:p,round:1},metadata:{toolsExecuted:f.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:1}},n,r)}async function*bn(e,t,n,r,i){let{aiProviders:a,tools:o,conversationHistory:s,toolExecutionService:c,plugins:l,logger:u,eventEmitter:d}=i;u.debug(`ExecutionService.executeStream called`);let f=i.generateExecutionId(),p=Date.now();if(!r?.conversationId||r.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for streaming`);let m=r.conversationId;d.prepareOwnerPathBases(m);try{let t=s.getConversationStore(r.conversationId);e&&t.addUserMessage(e,{executionId:f}),await K(l,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},u);let i=a.getCurrentProvider();if(!i)throw new z(`No AI provider configured`);let p=a.getProvider(i.provider);if(!p)throw new z(`AI provider '${i.provider}' not found`);if(typeof p.chatStream!=`function`)throw new z(`Provider must have chatStream method to support streaming execution`);u.debug(`ExecutionService calling provider.chatStream`);let h=t.getMessages(),g=Array.isArray(n.tools)?n.tools.length:void 0;u.debug(`[EXECUTION-SERVICE] config.tools:`,{length:g});let _=o.getTools(),ee=Array.isArray(_)?_.length:void 0;u.debug(`[EXECUTION-SERVICE] this.tools.getTools():`,{length:ee}),u.debug(`[EXECUTION-SERVICE] config.tools exists:`,{exists:!!n.tools}),u.debug(`[EXECUTION-SERVICE] config.tools.length > 0:`,{hasTools:n.tools&&n.tools.length>0});let v=r?.maxTokens??n.defaultModel.maxTokens,y=r?.temperature??n.defaultModel.temperature,b=r?.toolChoice??n.defaultModel.toolChoice,x={model:n.defaultModel.model,effort:n.defaultModel.effort??`high`,...r?.signal&&{signal:r.signal},...v!==void 0&&{maxTokens:v},...y!==void 0&&{temperature:y},...b!==void 0&&{toolChoice:b},...n.tools&&n.tools.length>0&&{tools:o.getTools()},...(()=>{let e=Bt(n.responseFormat);return e?{responseFormat:e}:{}})()};Ht(x.toolChoice,x.tools),u.debug(`[EXECUTION-SERVICE] Final chatOptions has tools:`,{hasTools:!!x.tools});let S=Array.isArray(x.tools)?x.tools.length:void 0;u.debug(`[EXECUTION-SERVICE] Final chatOptions.tools length:`,{length:S});let C=p.chatStream;if(!C)throw new z(`Provider does not support streaming`);let te=C.call(p,h,x),w=``,T=!1,E=[],D=-1;for await(let e of te)if(typeof e.content==`string`&&(T=!0),e.content&&(w+=e.content,yield{chunk:e.content,isComplete:!1}),e.role===`assistant`){let t=e;if(Array.isArray(t.toolCalls)&&t.toolCalls.length>0){for(let e of t.toolCalls)if(e.id&&e.id!==``){if(!e.type||e.type.length===0)throw Error(`[EXECUTION] Tool call "${e.id}" missing type in stream`);if(!e.function?.name||e.function.name.length===0)throw Error(`[EXECUTION] Tool call "${e.id}" missing function name in stream`);if(typeof e.function.arguments!=`string`)throw Error(`[EXECUTION] Tool call "${e.id}" missing arguments in stream`);D=E.length,E.push({id:e.id,type:e.type,function:{name:e.function.name,arguments:e.function.arguments}}),u.debug(`[TOOL-STREAM] New tool call started: ${e.id} (${e.function?.name})`)}else if(D>=0){let t=typeof e.function?.name==`string`&&e.function.name.length>0,n=typeof e.function?.arguments==`string`&&e.function.arguments.length>0;if(!t&&!n)throw Error(`[EXECUTION] Tool call fragment missing name/arguments for ${E[D].id}`);t&&(E[D].function.name+=e.function.name),n&&(E[D].function.arguments+=e.function.arguments);let r=n?e.function.arguments:e.function.name;u.debug(`[TOOL-STREAM] Adding fragment to tool ${E[D].id}: "${r}"`)}}}if(u.debug(`[EXECUTION-SERVICE-STREAM] Stream completed, toolCalls detected:`,{count:E.length}),typeof w!=`string`)throw Error(`[EXECUTION] Streaming response content is required`);if(!T&&E.length===0)throw Error(`[EXECUTION] Provider response must have content or tool calls`);t.addAssistantMessage(w,E,{executionId:f}),E.length>0&&(yield*yn(E,t,m,f,c,d,u,r?.signal)),await K(l,`afterRun`,{input:e,response:w,...r?.metadata?{metadata:r.metadata}:{}},u),yield{chunk:``,isComplete:!0}}catch(t){throw u.error(`ExecutionService streaming execution failed`,{error:t instanceof Error?t.message:String(t),executionTime:Date.now()-p}),await K(l,`onError`,{input:e,error:t instanceof Error?t:Error(String(t)),...r?.metadata?{metadata:r.metadata}:{}},u),t}finally{d.resetOwnerPathBases()}}var xn=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new pt(t),this.aiProviders=e,this.tools=t,this.conversationHistory=n,this.plugins=[],this.logger=j(`ExecutionService`),!r)throw Error(`[EXECUTION] EventService is required`);this.eventEmitter=new bt(r,this.logger,i),this.cacheService=a}setAskHandler(e){this.toolExecutionService.setAskHandler(e)}registerPlugin(e){let t=e.priority??0,n=this.plugins.findIndex(e=>(e.priority??0)<t);n===-1?this.plugins.push(e):this.plugins.splice(n,0,e),this.logger.debug(`Plugin registered`,{pluginName:e.name,priority:t})}removePlugin(e){let t=this.plugins.findIndex(t=>t.name===e);return t===-1?!1:(this.plugins.splice(t,1),this.logger.debug(`Plugin removed`,{pluginName:e}),!0)}getPlugin(e){return this.plugins.find(t=>t.name===e)}getPlugins(){return[...this.plugins]}async execute(e,t,n,r){let i=Jt(),a=new Date,o=Yt(r,`execute`),s=Xt(t,n,a,i,o,r);this.eventEmitter.prepareOwnerPathBases(o),this.logger.debug(`Starting execution pipeline`,{executionId:i,conversationId:o,messageCount:t.length,hasContext:!!r});let c=Ut(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=Gt(this.conversationHistory,o,t,n,i);try{let t=l.getMessages().length;l.addUserMessage(e,{executionId:i});let u=l.getMessages()[t];u&&s.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:o,mutation:`append_message`,index:t,message:u}),this.eventEmitter.emitUserMessageEvent(e,o,i),await K(this.plugins,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},this.logger),Wt(c);let d={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await gn(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),vn(e,l,i,a,d,o,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){return e instanceof Error&&(e.name===`AbortError`||e.message.includes(`aborted`)||e.message.includes(`abort`))?{response:``,messages:l.getMessages(),executionId:i,duration:Date.now()-a.getTime(),toolsExecuted:[],success:!0,interrupted:!0}:(await qt(e,s,a,o,i,this.plugins,this.logger,this.eventEmitter),{response:``,messages:[],tokensUsed:0,toolsExecuted:[],duration:Date.now()-a.getTime(),executionId:i,success:!1,error:e instanceof Error?e:Error(String(e))})}finally{this.eventEmitter.resetOwnerPathBases()}}async*executeStream(e,t,n,r){yield*bn(e,t,n,r,{aiProviders:this.aiProviders,tools:this.tools,conversationHistory:this.conversationHistory,toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,generateExecutionId:()=>Jt()})}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`)}};const q=(e,t)=>`${e}.${t}`,Sn={START:q(I,F.START),COMPLETE:q(I,F.COMPLETE),ERROR:q(I,F.ERROR)},Cn={CALL_START:q(W,U.CALL_START),CALL_COMPLETE:q(W,U.CALL_COMPLETE),CALL_ERROR:q(W,U.CALL_ERROR)},wn={EXECUTION_START:q(P,N.EXECUTION_START),EXECUTION_COMPLETE:q(P,N.EXECUTION_COMPLETE),EXECUTION_ERROR:q(P,N.EXECUTION_ERROR),CREATED:q(P,N.CREATED)},J={EXECUTION_START:Sn.START,EXECUTION_COMPLETE:Sn.COMPLETE,EXECUTION_ERROR:Sn.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:Cn.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:wn.EXECUTION_START,AGENT_EXECUTION_COMPLETE:wn.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:wn.EXECUTION_ERROR,AGENT_CREATED:wn.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 Tn=class{enabled=!0;category=`custom`;priority=Te.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=j(`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=!0,e?.category&&(this.category=e.category),e?.priority!==void 0&&(this.priority=(e.priority,e.priority))}async subscribeToModuleEvents(e){if(this.eventEmitter=e,!this.options)return;let t=[];this.options.subscribeToAllModuleEvents&&t.push(J.MODULE_INITIALIZE_START,J.MODULE_INITIALIZE_COMPLETE,J.MODULE_INITIALIZE_ERROR,J.MODULE_EXECUTION_START,J.MODULE_EXECUTION_COMPLETE,J.MODULE_EXECUTION_ERROR,J.MODULE_DISPOSE_START,J.MODULE_DISPOSE_COMPLETE,J.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let e of t){let t=this.eventEmitter.on(e,async t=>{try{this.stats.moduleEventsReceived++,this.stats.lastActivity=new Date,await this.onModuleEvent?.(e,t)}catch(t){this.stats.errors++;let n=t instanceof Error?t:Error(String(t));this.pluginLogger.error(`Plugin "${this.name}" failed to handle module event "${String(e)}"`,{plugin:this.name,eventType:String(e),error:n.message})}}),n=this.eventHandlers.get(e);n?n.push(t):this.eventHandlers.set(e,[t]),this.subscribedEvents.push(e)}}async unsubscribeFromModuleEvents(e){for(let[t,n]of this.eventHandlers.entries())for(let r of n)e.off(t,r);this.eventHandlers.clear(),this.subscribedEvents=[],this.eventEmitter=void 0}async dispose(){this.eventEmitter&&await this.unsubscribeFromModuleEvents(this.eventEmitter)}enable(){this.enabled=!0}disable(){this.enabled=!1}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:!0,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}},En=class{logger;constructor(e=A){this.logger=e}supportsTools(){return!1}validateConfig(){return!0}async dispose(){}async withRetry(e,t=3,n=1e3){let r;for(let i=0;i<=t;i++)try{return await e()}catch(e){r=e instanceof Error?e:Error(String(e)),i<t&&(this.logger.warn?.(`[${this.name}] Attempt ${i+1} failed, retrying in ${n}ms`,{error:r.message,attempt:i+1,maxRetries:t}),await this.delay(n))}throw r}withTimeout(e,t){let n;return Promise.race([e.then(e=>(clearTimeout(n),e)),new Promise((e,r)=>{n=setTimeout(()=>r(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,n){this.logger.error?.(`[${this.name}] ${e}`,{error:t.message,stack:t.stack,...n})}validateRequest(e){if(!e.messages||e.messages.length===0)throw Error(`Request must include at least one message`);if(!e.provider)throw Error(`Request must specify a provider`);if(!e.model)throw Error(`Request must specify a model`)}validateResponse(e){if(!e.role)throw 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 Error(`Response must have content or tool calls`)}},Dn=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??A}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(t=>t in e)}validateParameters(e){let t=this.schema.parameters.required||[],n=[],r=e;for(let e of t)e in r||n.push(`Missing required parameter: ${e}`);return{isValid:n.length===0,errors:n}}getDescription(){return this.schema.description}getName(){return this.schema.name}},On=class{static toProviderFormat(e,t,n={}){if(typeof t==`function`)return t(e);if(typeof t==`string`){let r=n[t];if(r!==void 0)return r(e)}return this.toUniversalFormat(e)}static toUniversalFormat(e){return e}static extractSystemMessage(e){return e.find(e=>e.role===`system`)?.content}static filterNonSystemMessages(e){return e.filter(e=>e.role!==`system`)}},Y=class{static validateAgentConfig(e){let t=[],n=[];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(e=>e.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&&n.push(`systemMessage is quite long, consider keeping it concise for better performance`),e.tools&&e.tools.length>20&&n.push(`Large number of tools may impact performance, consider grouping related tools`),{isValid:t.length===0,errors:t,warnings:n}}static validateUserInput(e){let t=[],n=[];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&&n.push(`Very long input may be truncated by AI providers`)),{isValid:t.length===0,errors:t,warnings:n}}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=[];return!e||typeof e!=`string`?(t.push(`API key must be a non-empty string`),{isValid:!1,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:[]})}};const kn=Y.validateAgentConfig,An=Y.validateUserInput,jn=Y.validateProviderName,Mn=Y.validateModelName,Nn=Y.validateApiKey;function Pn(e,t,n){return setInterval(()=>{(async()=>{try{await n()}catch(n){e.error(`Periodic task failed`,{task:t.name,error:n instanceof Error?n.message:String(n)})}})()},t.intervalMs)}function Fn(e){e&&clearInterval(e)}function In(e){return e===`darwin`?'Host OS: macOS (POSIX, BSD userland). Use BSD-flavored utilities: `sed -i ""` needs an empty backup arg, `date`/`grep`/`stat` flags differ from GNU. Prefer portable POSIX flags; avoid Linux/GNU-only options.':e===`linux`?"Host OS: Linux (POSIX, usually GNU coreutils, but distro/user setup varies). Prefer portable POSIX flags; do not assume a specific distro, and probe with `command -v` before relying on a non-standard tool.":`Host OS: ${e} (POSIX). Write portable POSIX sh/bash syntax; avoid OS-specific flags.`}function Ln(e,t){let n=/(^|\/)bash$/.test(e)?`bash`:`sh`;return{command:e,kind:n,platform:t,commandArgs:e=>[`-c`,e],interactiveArgs:[],label:`${n} on ${t}`,syntaxHint:In(t)}}function Rn(e){return{command:e,kind:`powershell`,platform:`win32`,commandArgs:e=>[`-NoProfile`,`-Command`,e],interactiveArgs:[`-NoProfile`],label:`PowerShell (Windows)`,syntaxHint:"Write PowerShell syntax (not bash): e.g. `Get-ChildItem` not `ls -la`, `$env:VAR` not `$VAR`."}}function zn(e=process.env,t=process.platform){let n=e.ROBOTA_SHELL?.trim();if(t===`win32`)return n!==void 0&&n.length>0?/(^|\\)cmd(\.exe)?$/i.test(n)?{command:n,kind:`cmd`,platform:t,commandArgs:e=>[`/d`,`/s`,`/c`,e],interactiveArgs:[],label:`cmd.exe (Windows)`,syntaxHint:`Write Windows cmd.exe syntax (not bash).`}:Rn(n):Rn(`powershell.exe`);if(n!==void 0&&n.length>0)return Ln(n,t);let r=e.SHELL?.trim();return Ln(r!==void 0&&r.length>0?r:`/bin/sh`,t)}function Bn(e,t={}){let n={},r=[],i=e._def;if(!i)throw Error(`Zod schema is missing _def; cannot convert to JSON schema.`);if(i.typeName===`ZodObject`&&i.shape){let e=typeof i.shape==`function`?i.shape():i.shape;for(let[t,i]of Object.entries(e))n[t]=X(i),Vn(i)&&r.push(t)}return{type:`object`,properties:n,required:r,...(t.allowAdditionalProperties||i.unknownKeys===`passthrough`)&&{additionalProperties:!0}}}function X(e){let t=e._def;if(!t)throw Error(`Zod type is missing _def; cannot convert to JSON schema.`);let n={};switch(t.description&&(n.description=t.description),t.typeName){case`ZodString`:return{type:`string`,...n};case`ZodNumber`:return{type:`number`,...n};case`ZodBoolean`:return{type:`boolean`,...n};case`ZodArray`:if(!t.type)throw Error(`ZodArray is missing item type; cannot convert to JSON schema.`);return{type:`array`,items:X(t.type),...n};case`ZodObject`:return{type:`object`,...n};case`ZodEnum`:{let e=t.values;if(!e||!Array.isArray(e))throw Error(`ZodEnum is missing enum values; cannot convert to JSON schema.`);return{type:`string`,enum:e,...n}}case`ZodOptional`:if(t.innerType)return{...X(t.innerType),...n};throw Error(`ZodOptional is missing innerType; cannot convert to JSON schema.`);case`ZodNullable`:if(t.innerType)return{...X(t.innerType),...n};throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);case`ZodDefault`:if(t.innerType)return{...X(t.innerType),...n};throw Error(`ZodDefault is missing innerType; cannot convert to JSON schema.`);case`ZodRecord`:return t.valueType?{type:`object`,additionalProperties:X(t.valueType),...n}:{type:`object`,additionalProperties:{type:`string`},...n};default:throw Error(`Unsupported Zod type: ${String(t.typeName)}`)}}function Vn(e){let t=e._def;if(!t)throw Error(`Zod schema is missing _def; cannot determine required fields.`);return t.typeName!==`ZodOptional`&&t.typeName!==`ZodNullable`&&t.typeName!==`ZodDefault`}function Hn(e){let t=e._def;if(!t)throw Error(`Zod schema is missing _def; cannot extract enum values.`);if(!t.values||!Array.isArray(t.values))throw Error(`ZodEnum schema is missing enum values; cannot extract enum values.`);return t.values}function Un(e){let t=e._def;if(!t)throw Error(`Zod schema is missing _def; cannot determine validation constraints.`);return!!(t.checks&&t.checks.length>0)}function Wn(e){let t=e._def;if(!t)throw Error(`Zod schema is missing _def; cannot determine schema type name.`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function Gn(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function Kn(e){if(e&&typeof e==`object`&&`issues`in e){let t=e.issues;if(Array.isArray(t))return t.map(e=>{if(e&&typeof e==`object`&&`message`in e){let t=Array.isArray(e.path)?e.path.join(`.`):``,n=String(e.message);return t?`${t}: ${n}`:n}return String(e)})}return[String(e)]}function qn(e){if(Gn(e))return{name:`structured_output`,jsonSchema:Bn(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:Kn(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=Z(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function Z(e,t,n){let r=[],i=e.type;switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${Q(t)}`];let i=t,a=`required`in e?e.required??[]:[];for(let e of a)e in i||r.push(`${n}.${e}: required property missing`);let o=e.properties??{};for(let[e,t]of Object.entries(o))e in i&&r.push(...Z(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(s===void 0||s===!1)for(let e of Object.keys(i))e in o||r.push(`${n}.${e}: unexpected additional property`);else if(typeof s==`object`)for(let[e,t]of Object.entries(i))e in o||r.push(...Z(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${Q(t)}`];let i=`items`in e?e.items:void 0;return i&&t.forEach((e,t)=>{r.push(...Z(i,e,`${n}[${t}]`))}),r}case`string`:return typeof t==`string`?(`enum`in e&&e.enum&&!e.enum.some(e=>e===t)&&r.push(`${n}: value ${JSON.stringify(t)} is not one of the allowed enum values`),`pattern`in e&&e.pattern&&!new RegExp(e.pattern).test(t)&&r.push(`${n}: value does not match pattern ${e.pattern}`),r):[`${n}: expected string, got ${Q(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${Q(t)}`]:(i===`integer`&&!Number.isInteger(t)&&r.push(`${n}: expected integer, got non-integer number`),`minimum`in e&&e.minimum!==void 0&&t<e.minimum&&r.push(`${n}: value ${t} is below minimum ${e.minimum}`),`maximum`in e&&e.maximum!==void 0&&t>e.maximum&&r.push(`${n}: value ${t} is above maximum ${e.maximum}`),`enum`in e&&e.enum&&!e.enum.some(e=>e===t)&&r.push(`${n}: value ${t} is not one of the allowed enum values`),r);case`boolean`:return typeof t==`boolean`?r:[`${n}: expected boolean, got ${Q(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${Q(t)}`];default:return[`${n}: unsupported schema type ${String(i)}`]}}function Q(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function Jn(e){let t=e.trim(),n=/^```(?:json)?\s*\n([\s\S]*?)\n?```$/.exec(t),r=n?n[1]:t;try{return{success:!0,value:JSON.parse(r)}}catch(e){return{success:!1,issue:`response is not valid JSON: ${e instanceof Error?e.message:String(e)}`}}}function Yn(e,t){let n={id:(0,c.randomUUID)(),role:`user`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Xn(e,t){let n={id:(0,c.randomUUID)(),role:`assistant`,content:e,state:t?.state??`complete`,timestamp:new Date};return t?.toolCalls&&(n.toolCalls=t.toolCalls),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Zn(e,t){let n={id:(0,c.randomUUID)(),role:`system`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Qn(e,t){let n={id:(0,c.randomUUID)(),role:`tool`,content:e,toolCallId:t.toolCallId,state:`complete`,timestamp:new Date};return t.name&&(n.name=t.name),t.metadata&&(n.metadata=t.metadata),t.parts&&(n.parts=t.parts),n}var $n=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(ue(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(Yn(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(Xn(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(Zn(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>O(e)&&me(k(e)),i=this.entries.filter(e=>!r(e)),a=ue(Zn(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(Qn(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(O).map(k)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(O).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(O);if(e.length<=this.maxMessages)return;let t=e.map(k),n=t.filter(me),r=t.filter(e=>!me(e)),i=Math.max(0,this.maxMessages-n.length),a=[...n,...r.slice(-i)],o=new Set(a.map(e=>e.id));this.entries=this.entries.filter(e=>!O(e)||o.has(e.id))}},er=class{history;pendingAssistant=null;constructor(e=0){this.history=new $n({maxMessages:e})}addMessage(e){this.history.addMessage(e)}addUserMessage(e,t,n){this.history.addUserMessage(e,t,n)}addAssistantMessage(e,t,n,r){this.history.addAssistantMessage(e,t,n,r)}addSystemMessage(e,t,n){this.history.addSystemMessage(e,t,n)}setSystemPrompt(e,t,n){this.history.setSystemPrompt(e,t,n)}addToolMessage(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n||`unknown`,r,i)}addToolMessageWithId(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n,r,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||={id:(0,c.randomUUID)(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:(0,c.randomUUID)(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:(0,c.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 n=this.pendingAssistant,r=n.toolCalls.length>0,i=n.content,a={id:n.id,role:`assistant`,content:i,state:e,timestamp:new Date,...r&&{toolCalls:n.toolCalls},...t&&{metadata:t}};this.history.addMessage(a),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 pe(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
|
|
5
5
|
|
|
6
|
-
[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()}},On=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||0,this.maxConversations=e.maxConversations||50,this.logger=M(`ConversationHistory`)}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new Dn(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((e,t)=>e+t.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)}},kn=class extends fn{name=`local`;version=`1.0.0`;providers=new Map;config;constructor(e={}){super(),this.config={timeout:3e4,maxRetries:3,retryDelay:1e3,enableLogging:!1,...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 Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chat)throw 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 n=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(n.role!==`assistant`)throw Error(`Expected assistant message, got ${n.role}`);return this.validateResponse(n),n}catch(t){let n=t instanceof Error?t:Error(String(t));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 Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chatStream)throw 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 n=t.chatStream(e.messages,{...e.options,model:e.model,tools:e.tools});for await(let e of n)this.validateResponse(e),yield e}catch(t){let n=t instanceof Error?t:Error(String(t));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!0;return!1}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!1}}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()}};const An=`$ENV:`;function jn(e){return e.startsWith(An)}function Mn(e){return`${An}${e}`}function Nn(e){if(!jn(e))return e;let t=e.slice(5).trim();if(t.length!==0)return process.env[t]}function Pn(e){return e===void 0||e.length===0?!1:Nn(e)!==void 0}var Fn=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function In(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new W(`Invalid maxListeners option: ${e.maxListeners}. Must be a non-negative number.`,t,{maxListeners:e.maxListeners});if(e.buffer!==void 0&&e.buffer.maxSize!==void 0&&e.buffer.maxSize<0)throw new W(`Invalid buffer.maxSize option: ${e.buffer.maxSize}. Must be a non-negative number.`,t,{bufferMaxSize:e.buffer.maxSize});if(e.buffer!==void 0&&e.buffer.flushInterval!==void 0&&e.buffer.flushInterval<0)throw new W(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function Ln(e,t,n,r,i){try{await e.listener(t)}catch(a){throw n.incrementErrors(),r&&i.error(`Event handler error`,{eventType:t.type,handlerId:e.id,error:a instanceof Error?a.message:String(a)}),a instanceof Error?a:Error(String(a))}}async function Rn(e,t,n,r,i){let a=t.get(e.type);if(!a||a.length===0)return;let o=a.filter(t=>!t.filter||t.filter(e));if(o.length!==0){for(let t of o.filter(e=>e.once))r(e.type,t.id);if(n){await Promise.all(o.map(t=>i(t,e)));return}for(let t of o)await i(t,e)}}function zn(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Bn(e,t,n,r){let{listenerCounts:i,totalListeners:a}=zn(t),o=r.getSnapshot();return{enabled:e.enabled,calls:e.calls,errors:e.errors,eventTypes:Array.from(t.keys()),listenerCounts:i,totalListeners:a,bufferedEvents:n,totalEmitted:o.totalEmitted,totalErrors:o.totalErrors}}function Vn(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new W(`Maximum listeners (${a}) exceeded for event type: ${t}`,o,{eventType:t,currentListeners:s.length});s.push({id:n,listener:r,once:i?.once??!1,...i?.filter&&{filter:i.filter}})}function Hn(e,t,n){let r=e.get(t);if(!r)return!1;let i=typeof n==`string`?r.findIndex(e=>e.id===n):r.findIndex(e=>e.listener===n);return i===-1?!1:(r.splice(i,1),!0)}function Un(e,t,n){let r=t.result!==null&&t.result!==void 0;return{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.name||``,toolId:t.id||``,toolResult:r?String(t.result):void 0,duration:n,success:r}}}var Wn=class extends dn{name=`EventEmitterPlugin`;version=`1.0.0`;pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=M(`EventEmitterPlugin`),this.metrics=e.metrics??new Fn,In(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[Z.AGENT_EXECUTION_START,Z.AGENT_EXECUTION_COMPLETE,Z.AGENT_EXECUTION_ERROR,Z.TOOL_BEFORE_EXECUTE,Z.TOOL_AFTER_EXECUTE,Z.TOOL_SUCCESS,Z.TOOL_ERROR],maxListeners:e.maxListeners??100,async:e.async??!0,catchErrors:e.catchErrors??!0,filters:e.filters??{},buffer:e.buffer??{enabled:!1,maxSize:1e3,flushInterval:5e3},category:e.category??`event_processing`,priority:e.priority??ve.HIGH,moduleEvents:e.moduleEvents??[],subscribeToAllModuleEvents:e.subscribeToAllModuleEvents??!1},this.pluginOptions.buffer.enabled&&(this.bufferTimer=setInterval(()=>{this.flushBuffer()},this.pluginOptions.buffer.flushInterval))}async beforeExecution(e){await this.emit(Z.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(Z.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(Z.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(e=>({role:e.role,content:e.content||``,timestamp:e.timestamp?e.timestamp.toISOString():new Date().toISOString()})),config:e.config}})}async afterConversation(e,t){await this.emit(Z.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(e=>({id:e.id||``,name:e.name||``,arguments:JSON.stringify(e.arguments||{}),result:String(e.result||``)}))}})}async beforeToolExecution(e,t){t&&await this.emit(Z.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 n of t.toolCalls){let r=n.result===null?Z.TOOL_ERROR:Z.TOOL_SUCCESS,i=Un(e,n,t.duration);await this.emit(r,i),await this.emit(Z.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(Z.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}})}on(e,t,n){let r=`handler_${this.nextHandlerId++}`;return Vn(this.handlers,e,r,t,n,this.pluginOptions.maxListeners,this.name),r}once(e,t,n){return this.on(e,t,{once:!0,...n&&{filter:n}})}off(e,t){return Hn(this.handlers,e,t)}async emit(e,t={}){if(!this.pluginOptions.events.includes(e))return;let n={type:e,timestamp:new Date,...t},r=this.pluginOptions.filters[e];if(!(r&&!r(n))){if(this.metrics.incrementEmitted(),this.pluginOptions.buffer.enabled){this.eventBuffer.push(n),this.eventBuffer.length>=this.pluginOptions.buffer.maxSize&&this.flushBuffer();return}await this.processEvent(n)}}async processEvent(e){await Rn(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>Ln(e,t,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 Bn(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()}},Gn=class extends E{moduleManager;pluginManager;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)}};function Kn(e){if(!e.name)throw new V(`Agent name is required`,{component:`Robota`});if(!e.aiProviders||e.aiProviders.length===0)throw new V(`At least one AI provider is required`,{component:`Robota`});if(!e.defaultModel)throw new V(`Default model configuration is required`,{component:`Robota`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new V(`Default model must specify both provider and model`,{component:`Robota`});let t=e.aiProviders.map(e=>e.name),n=t.filter((e,n)=>t.indexOf(e)!==n);if(n.length>0)throw new V(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`Robota`,duplicates:n});if(!t.includes(e.defaultModel.provider))throw new V(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`Robota`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var qn=class{logger;getAIProviders;getTools;getEventService;isReady;ensureReady;getConfig;setConfig;getConfigVersion;bumpConfigVersion;getConfigUpdatedAt;setConfigUpdatedAt;emitAgentEvent;constructor(e,t,n,r,i,a,o,s,c,l,u,d,f){this.logger=e,this.getAIProviders=t,this.getTools=n,this.getEventService=r,this.isReady=i,this.ensureReady=a,this.getConfig=o,this.setConfig=s,this.getConfigVersion=c,this.bumpConfigVersion=l,this.getConfigUpdatedAt=u,this.setConfigUpdatedAt=d,this.emitAgentEvent=f}async updateTools(e){if(await this.ensureReady(),!Array.isArray(e))throw new V(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],n=this.getEventService();for(let r of e){n&&r.setEventService(n),this.getTools().addTool(r.schema,async(e,t)=>{if(!t)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);return(await r.execute(e,t)).data});let e=r.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let r=this.getConfig();r.tools=e,this.setConfig(r);let i=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(P.CONFIG_UPDATED,{parameters:{tools:t,systemMessage:r.defaultModel.systemMessage,provider:r.defaultModel.provider,model:r.defaultModel.model,temperature:r.defaultModel.temperature,maxTokens:r.defaultModel.maxTokens},metadata:{version:i}}),{version:i}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);throw new V(`updateConfiguration: only tools patch is supported at this time`)}async getConfiguration(){await this.ensureReady();let e=this.getTools().getTools().map(e=>({name:e.name,parameters:(()=>{let t=e.parameters?.properties;return t&&typeof t==`object`?Object.keys(t):void 0})()}));return{version:this.getConfigVersion(),tools:e,updatedAt:this.getConfigUpdatedAt(),metadata:void 0}}setModel(e){if(!e.provider||!e.model)throw new V(`Both provider and model are required`,{component:`Robota`});if(!this.isReady())throw new V(`Agent must be fully initialized before changing model configuration`,{component:`Robota`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new V(`AI Provider '${e.provider}' not found. Available: ${n.join(`, `)}`,{component:`Robota`,provider:e.provider,availableProviders:n});t.setCurrentProvider(e.provider,e.model);let r=this.getConfig();this.setConfig({...r,defaultModel:{...r.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},...e.effort!==void 0&&{effort:e.effort}}}),this.logger.debug(`Model configuration updated`,e)}getModel(){if(!this.isReady())throw new V(`Agent must be fully initialized before getting model configuration`,{component:`Robota`});let e=this.getAIProviders().getCurrentProvider();if(!e)throw new V(`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 Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);return(await e.execute(t,n)).data}),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},Jn=class{agentName;moduleRegistry;logger;isReady;ensureReady;constructor(e,t,n,r,i){this.agentName=e,this.moduleRegistry=t,this.logger=n,this.isReady=r,this.ensureReady=i}async registerModule(e,t){await this.ensureReady(),await this.moduleRegistry.registerModule(e,{autoInitialize:t?.autoInitialize??!0,validateDependencies:t?.validateDependencies??!0}),this.logger.info(`Module registered`,{moduleName:e.name,moduleType:e.getModuleType().type})}async unregisterModule(e){if(!this.isReady())return!1;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):!1}async executeModule(e,t){await this.ensureReady();let n={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,n)}getModuleStats(e){if(this.isReady())return this.moduleRegistry.getModuleStats(e)}},Yn=class{logger;isReady;getExecutionService;constructor(e,t,n){this.logger=e,this.isReady=t,this.getExecutionService=n}addPlugin(e){let t=this.getExecutionService();if(!this.isReady()||!t)throw new V(`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!1;let n=t.removePlugin(e);return n&&this.logger.debug(`Plugin removed`,{pluginName:e}),n}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(e=>e.name)}};function Xn(e){return{moduleManager:new Jn(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new Yn(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new qn(e.getLogger(),e.getAiProviders,e.getTools,e.getEventService,e.getIsFullyInitialized,e.ensureFullyInitialized,e.getConfig,t=>e.setConfig(t),e.getConfigVersion,e.incrementConfigVersion,e.getConfigUpdatedAt,t=>e.setConfigUpdatedAt(t),(t,n)=>e.emitAgentEvent(t,n))}}function Zn(e,t){let n=Array.isArray(e.tools)?e.tools.map(e=>{let t=e?.schema?.name;if(typeof t==`string`&&t.length>0)return t;let n=e?.name;return typeof n==`string`&&n.length>0?n:``}).filter(e=>typeof e==`string`&&e.length>0):[];t(P.CREATED,{parameters:{tools:n,systemMessage:e.defaultModel.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function Qn(e,t,n,r,i){R(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:F,ownerId:t,ownerPath:er(t,n)})}function $n(){return new Wn({enabled:!0,events:[Z.MODULE_INITIALIZE_START,Z.MODULE_INITIALIZE_COMPLETE,Z.MODULE_INITIALIZE_ERROR,Z.MODULE_EXECUTION_START,Z.MODULE_EXECUTION_COMPLETE,Z.MODULE_EXECUTION_ERROR,Z.MODULE_DISPOSE_START,Z.MODULE_DISPOSE_COMPLETE,Z.MODULE_DISPOSE_ERROR]})}function er(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function tr(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.maxExecutionRounds!==void 0&&{maxExecutionRounds:t.maxExecutionRounds},...t.maxSameToolInputs!==void 0&&{maxSameToolInputs:t.maxSameToolInputs}}}async function nr(e,t,n={}){try{e.emitAgentEvent(P.EXECUTION_START,{}),e.logger.debug(`Starting Robota execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let r=e.getHistory(),i={...e.config},a=await e.getExecutionService().execute(t,r,i,tr(e,n));if(e.logger.debug(`Robota execution completed`,{success:a.success,duration:a.duration,tokensUsed:a.tokensUsed,toolsExecuted:a.toolsExecuted,interrupted:a.interrupted}),a.interrupted)return e.emitAgentEvent(P.EXECUTION_COMPLETE,{}),a.response;if(!a.success&&a.error)throw a.error;return e.emitAgentEvent(P.EXECUTION_COMPLETE,{}),a.response}catch(t){throw e.logger.error(`Robota execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(P.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}}async function*rr(e,t,n={}){try{e.emitAgentEvent(P.EXECUTION_START,{}),e.logger.debug(`Starting Robota streaming execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let r=e.getHistory(),i={...e.config},a=e.getExecutionService().executeStream(t,r,i,{conversationId:e.conversationId,...n.sessionId&&{sessionId:n.sessionId},...n.userId&&{userId:n.userId},...n.metadata&&{metadata:n.metadata}});for await(let e of a)yield e.chunk}catch(t){throw e.logger.error(`Robota streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(P.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}finally{e.emitAgentEvent(P.EXECUTION_COMPLETE,{})}}function ir(e,t){return e.getConversationStore(t).getMessages().map(e=>({id:e.id,role:e.role,content:e.content,state:e.state,timestamp:e.timestamp,metadata:e.metadata,...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{},...e.role===`tool`&&`name`in e?{name:e.name}:{}}))}function ar(e,t){return e.getConversationStore(t).getHistory()}function or(e,t,n){e.getConversationStore(t).addEntry(n)}function sr(e,t){e.getConversationStore(t).clear()}function cr(e,t,n,r,i){let a=e.getConversationStore(t);n===`tool`&&i?.toolCallId?a.addToolMessageWithId(r,i.toolCallId,i.name??`unknown`):n===`assistant`?a.addAssistantMessage(r,[]):n===`system`?a.addSystemMessage(r):a.addUserMessage(r)}function lr(e,t,n){e.getConversationStore(t).addMessage(n)}var ur=class{build(e,t,n,r){let i=e.map(e=>({role:e.role,content:e.content})),a=JSON.stringify({messages:i,model:t,provider:n,temperature:r?.temperature,maxTokens:r?.maxTokens});return{hash:this.sha256(a),model:t,provider:n}}computeIntegrityHash(e){return this.sha256(e)}sha256(e){let t=new l.default(`SHA-256`,`TEXT`);return t.update(e),t.getHash(`HEX`)}},dr=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new ur;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 n=this.keyBuilder.computeIntegrityHash(t.response);if(t.integrityHash!==n)throw this.cache.delete(e),this.removeFromAccessOrder(e),new He(`Integrity check failed for cache entry ${e}`,{hash:e,expected:n,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),!0):!1}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)}},fr=class{storage;keyBuilder;constructor(e,t){this.storage=e,this.keyBuilder=t}lookup(e,t,n,r){let i=this.keyBuilder.build(e,t,n,r),a=this.storage.get(i.hash);return a?a.response:void 0}store(e,t,n,r,i){let a=this.keyBuilder.build(e,t,n,i);this.storage.set({key:a,response:r,timestamp:Date.now(),integrityHash:this.keyBuilder.computeIntegrityHash(r)})}getStats(){return this.storage.getStats()}};async function pr(e){let{config:t,aiProviders:n,tools:r,agentFactory:i,conversationHistory:a,moduleRegistry:o,eventEmitter:s,eventService:c,logger:l}=e;if(l.debug(`Starting Robota initialization with independent managers`),await Promise.all([n.initialize(),r.initialize(),i.initialize()]),t.aiProviders)for(let e of t.aiProviders)n.addProvider(e.name,e);if(t.defaultModel&&n.setCurrentProvider(t.defaultModel.provider,t.defaultModel.model),t.modules){for(let e of t.modules)await o.registerModule(e,{autoInitialize:!0,validateDependencies:!0});l.debug(`Modules registered and initialized`,{moduleCount:t.modules.length,moduleNames:t.modules.map(e=>e.name)})}if(t.tools)for(let e of t.tools)e instanceof pn&&c&&e.setEventService(c),r.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);return(await e.execute(t,n)).data}),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new fr(new dr({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new ur));let d=new sn(n,r,a,c,t.executionContext,u);if(t.plugins)for(let e of t.plugins)d.registerPlugin(e),e.subscribeToModuleEvents&&(await e.subscribeToModuleEvents(s),l.debug(`Plugin subscribed to module events`,{pluginName:e.name}));return l.debug(`Robota initialization completed successfully with independent managers`),d}async function mr(e){try{let t=await pr(e.ctx);e.setExecutionService(t),e.setFullyInitialized(!0)}catch(t){throw e.ctx.logger.error(`Robota initialization failed`,{error:t instanceof Error?t.message:String(t)}),t}}function hr(e){let t=e.isFullyInitialized?e.aiProviders.getProviderNames():[],n=e.isFullyInitialized?e.aiProviders.getCurrentProvider():null,r=n?n.provider:null,i=e.isFullyInitialized?e.tools.getTools().map(e=>e.name):[],a=e.getPluginNames(),o=e.getModuleNames(),s=e.getHistory(),c=Date.now()-e.startTime,l={user:0,assistant:0,system:0,tool:0};for(let e of s)e.role in l&&l[e.role]++;return{name:e.name,version:e.version,conversationId:e.conversationId,providers:t,currentProvider:r,tools:i,plugins:a,modules:o,historyLength:s.length,historyStats:{userMessages:l.user,assistantMessages:l.assistant,systemMessages:l.system,toolMessages:l.tool},uptime:c}}async function gr(e){e.logger.debug(`Destroying Robota instance`,{name:e.name});try{if(e.isFullyInitialized&&e.moduleRegistry&&(await e.moduleRegistry.disposeAllModules(),e.logger.debug(`All modules disposed`)),e.executionService){let t=e.executionService.getPlugins();for(let n of t)n.unsubscribeFromModuleEvents&&e.eventEmitter&&await n.unsubscribeFromModuleEvents(e.eventEmitter);e.logger.debug(`ExecutionService plugins cleaned up`)}e.moduleRegistry&&(e.moduleRegistry.clearAllModules(),e.logger.debug(`ModuleRegistry cleared`)),e.eventEmitter&&(await e.eventEmitter.destroy(),e.logger.debug(`EventEmitter disposed`)),e.resetState(),e.logger.info(`Robota instance destroyed successfully`,{name:e.name})}catch(t){throw e.logger.error(`Error during Robota destruction`,{error:t instanceof Error?t.message:String(t)}),t}}function _r(e){return{defaultModel:e.defaultModel||`gpt-4`,defaultProvider:e.defaultProvider||`openai`,maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage||`You are a helpful AI assistant.`,strictValidation:e.strictValidation??!0}}function vr(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new V(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel||{provider:e.aiProviders[0]?.name||t.defaultProvider,model:t.defaultModel,temperature:.7,systemMessage:t.defaultSystemMessage};return{id:e.id||yr(),name:e.name||`Unnamed Agent`,aiProviders:e.aiProviders,defaultModel:{provider:n.provider,model:n.model,temperature:n.temperature??.7,...n.maxTokens!==void 0&&{maxTokens:n.maxTokens},...n.topP!==void 0&&{topP:n.topP},systemMessage:n.systemMessage||t.defaultSystemMessage},tools:e.tools||[],plugins:e.plugins||[],metadata:e.metadata||{},...e.logging&&{logging:e.logging},...e.conversationId&&{conversationId:e.conversationId},...e}}function yr(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function br(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var xr=class{templates=new Map;logger;constructor(){this.logger=M(`AgentTemplates`),this.logger.info(`AgentTemplates initialized`)}registerTemplate(e){if(!e.id)throw 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(e=>t.tags?.includes(e))||e.provider&&t.config.defaultModel?.provider!==e.provider||e.model&&t.config.defaultModel?.model!==e.model))}applyTemplate(e,t={}){let n=[],r=!1,i={...e.config},a={...i,...t},o=e=>{e in t&&i[e]!==t[e]&&(r=!0,i[e]!==void 0&&n.push(`Override: ${e} changed from "${String(i[e])}" to "${String(t[e])}"`))};t.name!==void 0&&o(`name`),t.systemMessage!==void 0&&o(`systemMessage`);let s=a;return this.logger.debug(`Template applied`,{templateId:e.id,overridesCount:Object.keys(t).length,warningsCount:n.length,modified:r}),{config:s,template:e,warnings:n,modified:r}}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(e=>e.category).filter(e=>typeof e==`string`&&e.length>0))],n=[...new Set(e.flatMap(e=>e.tags||[]))],r=[...new Set(e.map(e=>e.config.defaultModel?.provider).filter(e=>typeof e==`string`&&e.length>0))],i=[...new Set(e.map(e=>e.config.defaultModel?.model).filter(e=>typeof e==`string`&&e.length>0))];return{totalTemplates:e.length,categories:t,tags:n,providers:r,models:i}}},Sr=class{agentTemplates;initialized=!1;logger;options;activeAgents;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new xr,this.logger=M(`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=!0,this.logger.debug(`AgentFactory initialization completed`))}async createAgent(e,t,n=!1){let r;try{if(this.activeAgents.size>=this.options.maxConcurrentAgents)throw new V(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);if(r=vr(t,this.options),this.options.strictValidation){let e=hn(r);if(!e.isValid)throw new H(`Invalid agent configuration: ${e.errors.join(`, `)}`)}this.lifecycleEvents.beforeCreate&&await this.lifecycleEvents.beforeCreate(r);let i=new e(r),a=i;typeof a.initialize==`function`&&await a.initialize();let o=yr();return this.activeAgents.set(o,i),br(this.creationStats,n),this.lifecycleEvents.afterCreate&&await this.lifecycleEvents.afterCreate(i,r),this.logger.info(`Agent created successfully`,{agentId:o,model:r.defaultModel.model,provider:r.defaultModel.provider}),i}catch(e){let n=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&r&&await this.lifecycleEvents.onCreateError(n,r),this.logger.error(`Failed to create agent`,{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}async createFromTemplate(e,t,n={}){let r=this.agentTemplates.getTemplate(t);if(!r)throw new V(`Template not found: ${t}`);let i=this.applyTemplate(r,n);i.warnings.length>0&&this.logger.warn(`Template application warnings`,{templateId:t,warnings:i.warnings});let a=await this.createAgent(e,i.config,!0);return this.logger.info(`Agent created from template`,{templateId:t,modified:i.modified,warnings:i.warnings.length}),a}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!1;try{let n=t;return typeof n.cleanup==`function`&&await n.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(t){throw this.logger.error(`Error destroying agent`,{agentId:e,error:t instanceof Error?t.message:String(t)}),t}}getCreationStats(){return{...this.creationStats}}getActiveAgents(){return new Map(this.activeAgents)}validateConfiguration(e){return hn(e)}},Cr=class extends D{providers=new Map;currentProvider;currentModel;constructor(){super()}async doInitialize(){N.debug(`AIProviders initialized`)}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),N.debug(`Closed AI provider: ${e}`)}catch(t){N.warn(`Failed to close AI provider ${e}`,{error:t instanceof Error?t.message:String(t)})}this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0,N.debug(`AIProviders disposed`)}addProvider(e,t){this.ensureInitialized();let n=Q.validateProviderName(e);if(!n.isValid)throw new H(`Invalid provider name: ${n.errors.join(`, `)}`);if(!t||typeof t!=`object`||!t||Array.isArray(t))throw new H(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new H(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new H(`Provider must have a chat method`);this.providers.has(e)&&N.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),N.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)){N.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(t=>{N.warn(`Failed to close provider ${e}`,{error:t.message})}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,N.debug(`Cleared current provider selection after removing "${e}"`)),N.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 V(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,N.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 V(`Provider "${e}" is not registered`);return N.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,n={};for(let[e,r]of this.providers)t.test(e)&&(n[e]=r);return n}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return!1;let n=this.providers.get(t);return!!(n&&typeof n.chatStream==`function`)}getProviderCount(){return this.ensureInitialized(),this.providers.size}};function wr(e,t,n){if(!e.name||e.name.trim()===``)throw new V(`Module name is required`);if(!e.version||e.version.trim()===``)throw new V(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new V(`Invalid module type: ${i.errors.join(`, `)}`,{moduleName:e.name,errors:i.errors});i.warnings.length>0&&n.warn(`Module type validation warnings`,{moduleName:e.name,warnings:i.warnings})}async function Tr(e,t,n,r){let i=e.getModuleType();if(!i.dependencies||i.dependencies.length===0)return;for(let n of i.dependencies)if(!t.hasType(n))throw new V(`Module '${e.name}' depends on unregistered type '${n}'`,{moduleName:e.name,dependencyType:n});let a=new Set;for(let e of n.values())a.add(e.getModuleType().type);let o=[];for(let e of i.dependencies)a.has(e)||o.push(e);o.length>0&&r.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:o})}function Er(e,t){let n=t.get(e);if(!n)return[];let r=n.getModuleType().type,i=[];for(let[n,a]of t.entries())n!==e&&a.getModuleType().dependencies?.includes(r)&&i.push(n);return i}function Dr(e,t){let n={},r=0,i=0,a=0,o=0,s=0,c=0;for(let t of e.values()){let e=t.getModuleType().type;n[e]=(n[e]||0)+1,t.isInitialized()&&r++,t.isEnabled()&&i++}for(let e of t.values())a+=e.totalExecutions,o+=e.successfulExecutions,s+=e.failedExecutions,c+=e.totalExecutionTime;return{totalModules:e.size,initializedModules:r,enabledModules:i,modulesByType:n,totalExecutions:a,totalSuccessfulExecutions:o,totalFailedExecutions:s,averageExecutionTime:a>0?c/a:0}}function Or(){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 kr(e,t){let n=[],r=[];if((!e.type||e.type.trim()===``)&&n.push(`Module type is required and cannot be empty`),e.category||n.push(`Module category is required`),e.layer||n.push(`Module layer is required`),e.type&&!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(e.type)&&n.push(`Module type must start with a letter and contain only letters, numbers, hyphens, and underscores`),e.dependencies){for(let t of e.dependencies)(!t||t.trim()===``)&&n.push(`Dependencies cannot be empty`);e.dependencies.includes(e.type)&&n.push(`Module cannot depend on itself`)}if(e.capabilities)for(let t of e.capabilities)(!t||t.trim()===``)&&n.push(`Capabilities cannot be empty`);if(e.dependencies){let n=[`infrastructure`,`core`,`application`,`domain`,`presentation`],i=n.indexOf(e.layer);for(let a of e.dependencies){let o=t(a);o&&n.indexOf(o.layer)>i&&r.push(`Module '${e.type}' (${e.layer}) depends on '${a}' (${o.layer}) which is in a higher layer`)}}return{valid:n.length===0,errors:n,warnings:r}}function Ar(e,t,n){let r=new Set,i=new Set,a=[],o=[],s=[];for(let r of e){let e=t(r);if(!e){s.push(r);continue}if(e.dependencies)for(let t of e.dependencies)!n(t)&&!s.includes(t)&&s.push(t)}let c=(s,l=[])=>{if(i.has(s)){let e=l.indexOf(s);o.push(l.slice(e).concat([s]));return}if(r.has(s))return;let u=t(s);if(!u)return;i.add(s);let d=[...l,s];if(u.dependencies)for(let t of u.dependencies)(e.includes(t)||n(t))&&c(t,d);i.delete(s),r.add(s),a.push(s)};for(let t of e)r.has(t)||c(t);return{resolved:s.length===0&&o.length===0,order:a,circularDependencies:o,missingDependencies:s}}function jr(e,t){let n=[],r=[],i=new Map;for(let n of e){let e=t(n);e&&(i.has(e.layer)||i.set(e.layer,[]),i.get(e.layer).push(n))}let a=new Map;for(let n of e){let e=t(n);if(e?.capabilities)for(let t of e.capabilities)a.has(t)||a.set(t,[]),a.get(t).push(n)}for(let[e,t]of Array.from(a.entries()))if(t.length>1)for(let r=0;r<t.length;r++)for(let i=r+1;i<t.length;i++){let a=t[r],o=t[i];a&&o&&n.push({module1:a,module2:o,reason:`Both modules provide capability '${e}'`})}return n.length>0&&(r.push(`Consider using only one module per capability`),r.push(`Check if modules can be configured to avoid conflicts`)),!i.has(`infrastructure`)&&e.length>1&&r.push(`Consider adding infrastructure modules for better foundation`),{compatible:n.length===0,conflicts:n,suggestions:r}}function Mr(e){let t={core:0,storage:0,processing:0,integration:0,interface:0,capability:0},n={infrastructure:0,core:0,application:0,domain:0,presentation:0},r=0,i=0;for(let a of e.values())t[a.category]++,n[a.layer]++,a.dependencies&&a.dependencies.length>0&&r++,a.capabilities&&a.capabilities.length>0&&i++;return{totalTypes:e.size,typesByCategory:t,typesByLayer:n,typesWithDependencies:r,typesWithCapabilities:i}}var Nr=class{registeredTypes=new Map;logger;constructor(){this.logger=M(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new V(`Invalid module type descriptor: ${t.errors.join(`, `)}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let t=this.registeredTypes.get(e.type);this.logger.warn(`Overriding existing module type`,{type:e.type,previousCategory:t?.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!1;let t=this.findDependentTypes(e);if(t.length>0)throw new V(`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}),!0}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 kr(e,e=>this.getType(e))}resolveDependencies(e){return Ar(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return jr(e,e=>this.getType(e))}findDependentTypes(e){let t=[];for(let[n,r]of this.registeredTypes)r.dependencies?.includes(e)&&t.push(n);return t}registerBuiltinTypes(){for(let e of Or())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 Mr(this.registeredTypes)}};const Pr={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var Fr=class{modules=new Map;moduleOptions=new Map;moduleStatuses=new Map;moduleStats=new Map;registrationOrder=[];initializationOrder=[];typeRegistry;eventEmitter;logger;isDisposing=!1;constructor(e,t){this.eventEmitter=e,this.typeRegistry=t??new Nr,this.logger=M(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new V(`Cannot register modules during disposal`);if(wr(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new V(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await Tr(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 n=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:n.type,enabled:e.isEnabled(),initialized:!1,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:n.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(Pr.REGISTERED,{data:{moduleName:e.name,moduleType:n.type},timestamp:new Date})}async unregisterModule(e){let t=this.modules.get(e);if(!t)return!1;let n=Er(e,this.modules);if(n.length>0)throw new V(`Cannot unregister module '${e}' - it is required by: ${n.join(`, `)}`,{moduleName:e,dependents:n});t.isInitialized()&&t.dispose&&await t.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let r=this.registrationOrder.indexOf(e);r!==-1&&this.registrationOrder.splice(r,1);let i=this.initializationOrder.indexOf(e);return i!==-1&&this.initializationOrder.splice(i,1),this.eventEmitter&&await this.eventEmitter.emit(Pr.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new V(`Module '${e}' not found`);if(n.isInitialized())return;let r=this.moduleOptions.get(e),i=n.initialize(r,this.eventEmitter);if(t&&t>0){let n,r=new Promise((r,i)=>{n=setTimeout(()=>{i(Error(`Module '${e}' initialization timed out after ${t}ms`))},t)});await Promise.race([i.then(e=>(clearTimeout(n),e)),r])}else await i;let a=this.moduleStatuses.get(e);a&&(a.initialized=!0,a.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 n=t.map(e=>this.modules.get(e).getModuleType().type),r=this.typeRegistry.resolveDependencies(n);if(!r.resolved){let e=[];throw r.missingDependencies.length>0&&e.push(`Missing dependencies: ${r.missingDependencies.join(`, `)}`),r.circularDependencies.length>0&&e.push(`Circular dependencies: ${r.circularDependencies.map(e=>e.join(` -> `)).join(`; `)}`),new V(`Cannot initialize modules: ${e.join(`; `)}`,{missingDependencies:r.missingDependencies,circularDependencies:r.circularDependencies.map(e=>e.join(` -> `))})}for(let n of r.order){let r=t.find(e=>this.modules.get(e).getModuleType().type===n);r&&await this.initializeModule(r,e)}}async executeModule(e,t){let n=this.modules.get(e);if(!n)throw new V(`Module '${e}' not found`);if(!n.isInitialized())throw new V(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new V(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new V(`Module '${e}' does not support execute()`);let a=await n.execute(t),o=Date.now()-i;r.totalExecutions++,r.successfulExecutions++,r.totalExecutionTime+=o,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date;let s=this.moduleStatuses.get(e);return s&&(s.lastActivity=new Date),a}catch(e){let t=Date.now()-i;throw r.totalExecutions++,r.failedExecutions++,r.totalExecutionTime+=t,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date,e}}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,n]of this.moduleStats.entries())e[t]={...n};return e}async disposeAllModules(){this.isDisposing=!0;let e=[...this.initializationOrder].reverse();for(let t of e){let e=this.modules.get(t);if(e&&e.isInitialized())try{e.dispose&&await e.dispose();let n=this.moduleStatuses.get(t);n&&(n.initialized=!1)}catch(e){this.logger.error(`Failed to dispose module`,{name:t,error:e instanceof Error?e.message:String(e)})}}this.initializationOrder=[],this.isDisposing=!1}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=!1}getRegistryStats(){return Dr(this.modules,this.moduleStats)}},Ir=class{tools=new Map;register(e){if(!e.schema?.name)throw new H(`Tool must have a valid schema with name`);let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&N.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),N.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)){N.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),N.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 N.debug(`[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction`,{count:e.length,tools:e.map(e=>({name:e.schema?.name??`unnamed`,hasSchema:!!e.schema,schemaType:typeof e.schema,toolType:e.constructor?.name||`unknown`}))}),this.getAll().map(e=>e.schema)}has(e){return this.tools.has(e)}clear(){let e=this.tools.size;this.tools.clear(),N.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(e=>t.test(e.schema.name))}size(){return this.tools.size}validateToolSchema(e){if(!e.name||typeof e.name!=`string`)throw new H(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new H(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new H(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new H(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let t of Object.keys(e.parameters.properties)){let n=e.parameters.properties[t];if(!n?.type)throw new H(`Parameter "${t}" must have a type`);if(![`string`,`number`,`boolean`,`array`,`object`].includes(n.type))throw new H(`Parameter "${t}" has invalid type "${n.type}"`)}if(e.parameters.required){let t=e.parameters.properties||{};for(let n of e.parameters.required)if(!t[n])throw new H(`Required parameter "${n}" is not defined in properties`)}}},Lr=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 n=this.schema.name;if(!this.validate(e))throw new H(`Invalid parameters for tool "${n}": ${this.getValidationErrors(e).join(`, `)}`);let r=Date.now(),i;try{i=await this.fn(e,t)}catch(r){throw r instanceof U||r instanceof H?r:new U(`Function tool execution failed: ${r instanceof Error?r.message:String(r)}`,n,r instanceof Error?r:Error(String(r)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let a=Date.now()-r;return{success:!0,data:i,metadata:{executionTime:a,toolName:n,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=[],n=this.schema.parameters.required||[],r=this.schema.parameters.properties||{};for(let r of n)r in e||t.push(`Missing required parameter: ${r}`);for(let[n,i]of Object.entries(e)){let e=r[n];if(!e){t.push(`Unknown parameter: ${n}`);continue}let a=this.validateParameterType(n,i,e);a&&t.push(a)}return t}validateParameterType(e,t,n){switch(n.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(n.items)for(let r=0;r<t.length;r++){let i=this.validateParameterType(`${e}[${r}]`,t[r],n.items);if(i)return i}break;case`object`:if(typeof t!=`object`||!t||Array.isArray(t))return`Parameter "${e}" must be an object, got ${typeof t}`;break}if(n.enum&&n.enum.length>0){let r=n.enum,i=!1;for(let e of r)if(t===e){i=!0;break}if(!i)return`Parameter "${e}" must be one of: ${r.join(`, `)}, got ${t}`}}validateConstructorInputs(){if(!this.schema)throw new H(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new H(`Tool function is required and must be a function`);if(!this.schema.name)throw new H(`Tool schema must have a name`)}},Rr=class extends D{registry;allowedTools;constructor(){super(),this.registry=new Ir}async doInitialize(){N.debug(`Tools initialized`)}async doDispose(){this.registry.clear(),delete this.allowedTools,N.debug(`Tools disposed`)}addTool(e,t){this.ensureInitialized();let n=new Lr(e,t);this.registry.register(n),N.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(e=>this.allowedTools.includes(e.name)):e}async executeTool(e,t,n){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new U(`Tool "${e}" is not in the allowed tools list`,e);let r=this.registry.get(e);if(!r)throw new U(`Tool "${e}" is not registered`,e);let i;try{i=await r.execute(t,n)}catch(t){throw t instanceof Error?new U(t.message,e,t):new U(String(t),e)}if(!i.success)throw new U(i.error||`Tool execution failed`,e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(i)});if(i.data===void 0)throw new U(`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],N.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()}},zr=class extends Gn{name;version=`1.0.0`;aiProviders;tools;agentFactory;conversationHistory;moduleRegistry;eventEmitter;executionService;eventService;agentEventService;config;conversationId;logger;initializationPromise;isFullyInitialized=!1;startTime;configVersion=1;configUpdatedAt=Date.now();configManager;constructor(e){super(),this.name=e.name,this.config=e,this.conversationId=e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,this.logger=M(`Robota`),this.startTime=Date.now(),e.logging&&(e.logging.level&&fe(e.logging.level),e.logging.enabled===!1&&fe(`silent`)),Kn(e),this.aiProviders=new Cr,this.tools=new Rr,this.agentFactory=new Sr,this.conversationHistory=new On,this.eventEmitter=$n(),this.moduleRegistry=new Fr(this.eventEmitter),this.eventService=e.eventService||Ce,this.agentEventService=z(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:er(this.conversationId,this.config.executionContext)});let t=Xn({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:e=>{this.config=e},getConfigVersion:()=>this.configVersion,incrementConfigVersion:()=>++this.configVersion,getConfigUpdatedAt:()=>this.configUpdatedAt,setConfigUpdatedAt:e=>{this.configUpdatedAt=e},emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)});this.moduleManager=t.moduleManager,this.pluginManager=t.pluginManager,this.configManager=t.configManager,Zn(this.config,(e,t)=>this.emitAgentEvent(e,t))}async run(e,t={}){return await this.ensureFullyInitialized(),nr(this.executionDeps(),e,t)}async*runStream(e,t={}){await this.ensureFullyInitialized(),yield*rr(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 ir(this.conversationHistory,this.conversationId)}getFullHistory(){return ar(this.conversationHistory,this.conversationId)}addHistoryEntry(e){or(this.conversationHistory,this.conversationId,e)}clearHistory(){sr(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){cr(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){lr(this.conversationHistory,this.conversationId,e)}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}}swapDefaultProvider(e,t){this.aiProviders.addProvider(e.name,e),this.configManager.setModel({provider:e.name,model:t})}getStats(){return hr({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 gr({name:this.name,isFullyInitialized:this.isFullyInitialized,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,executionService:this.executionService,logger:this.logger,resetState:()=>{this.isFullyInitialized=!1,this.initializationPromise=void 0}})}async initialize(){await this.ensureFullyInitialized()}async ensureFullyInitialized(){this.isFullyInitialized||(this.initializationPromise||=this.doAsyncInit(),await this.initializationPromise)}doAsyncInit(){return mr({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){Qn(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}},Br=class{store;listener;sequenceId=0;constructor(e,t){this.store=e,this.listener=(e,t,n)=>{if(!n?.ownerPath?.length)throw Error(`[HISTORY-MODULE] Missing ownerPath for ${e}`);let r={eventName:e,sequenceId:this.nextSequenceId(),timestamp:t.timestamp,eventData:t,context:n};this.store.append(r)},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 $(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function Vr(e){return typeof e==`string`?e.length:0}var Hr=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:P.EXECUTION_START,completeEvent:P.EXECUTION_COMPLETE,errorEvent:P.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Vr(n[0]),conversationId:e.conversationId,options:$(n[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod(`runStream`,{startEvent:P.EXECUTION_START,completeEvent:P.EXECUTION_COMPLETE,errorEvent:P.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Vr(n[0]),conversationId:e.conversationId,streaming:!0,options:$(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:G.CALL_START,completeEvent:G.CALL_COMPLETE,errorEvent:G.CALL_ERROR,extractMetadata:(e,t,n)=>({toolName:$(e.schema)?.name||e.constructor.name,parameters:n[0],parametersCount:$(n[0])?Object.keys($(n[0])||{}).length:0,context:n[1]}),extractResult:e=>({result:typeof $(e)?.data==`string`?$(e)?.data||``:JSON.stringify($(e)?.data),success:$(e)?.success})}),this}wrap(e){return new Proxy(e,{get:(e,t,n)=>{let r=Reflect.get(e,t,n);if(typeof t!=`string`)return r;let i=t;if(typeof r==`function`&&this.methodConfigs.has(i)){let t=this.methodConfigs.get(i);return async(...n)=>{let a=Date.now(),o=this.generateExecutionId(),s=e;try{if(t.startEvent){let e=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.startEvent,{timestamp:new Date,metadata:{...e,executionId:o,methodName:i,phase:`start`}})}let c=await r.apply(e,n),l=Date.now()-a;if(t.completeEvent){let e=t.extractResult?.(c)||{},r=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.completeEvent,{timestamp:new Date,...e,metadata:{...r,executionId:o,methodName:i,duration:l,phase:`complete`,success:!0}})}return c}catch(e){let r=Date.now()-a;if(t.errorEvent){let a=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.errorEvent,{timestamp:new Date,error:e instanceof Error?e.message:String(e),metadata:{...a,executionId:o,methodName:i,duration:r,phase:`error`,errorName:e instanceof Error?e.name:`UnknownError`,success:!1}})}throw e}}}return r}})}emitEvent(e,t){let n={emitterSourceType:this.config.sourceType,emitterSourceId:this.config.sourceId},r={timestamp:new Date,...t.metadata?{metadata:{...n,...t.metadata}}:{metadata:n},...t};this.config.eventService.emit(e,r)}generateExecutionId(){return`${this.config.sourceType}-${this.config.sourceId}-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}};function Ur(e,t){let n=new Hr(t);return n.configureStandardMethods(),n.wrap(e)}function Wr(e,t,n){return function(r){return Ur(r,{eventService:e,sourceType:t,sourceId:n})}}const Gr={safe:`plan`,moderate:`default`,full:`acceptEdits`},Kr={plan:{Bash:`deny`,Read:`auto`,Write:`deny`,Edit:`deny`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`},default:{Bash:`approve`,Read:`auto`,Write:`approve`,Edit:`approve`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`},acceptEdits:{Bash:`approve`,Read:`auto`,Write:`auto`,Edit:`auto`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`},bypassPermissions:{Bash:`auto`,Read:`auto`,Write:`auto`,Edit:`auto`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`}},qr={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`};function Jr(e){let t=e.replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function Yr(e){let t=e.indexOf(`(`);return t===-1?{toolName:e.trim(),argPattern:void 0}:{toolName:e.slice(0,t).trim(),argPattern:e.slice(t+1,e.lastIndexOf(`)`)).trim()}}function Xr(e,t){switch(e){case`Bash`:return typeof t.command==`string`?t.command:void 0;case`Read`:case`Write`:case`Edit`:return typeof t.filePath==`string`?t.filePath:void 0;case`Glob`:case`Grep`:return typeof t.pattern==`string`?t.pattern:void 0;default:return}}function Zr(e,t,n){let r=Yr(n);if(r.toolName!==e)return!1;if(r.argPattern===void 0)return!0;let i=Xr(e,t);return i===void 0?!1:Jr(r.argPattern).test(i)}function Qr(e,t,n,r={}){let{allow:i=[],deny:a=[]}=r;for(let n of a)if(Zr(e,t,n))return`deny`;for(let n of i)if(Zr(e,t,n))return`auto`;let o=Kr[n][e];return o===void 0?qr[n]:o}var $r=class{type=`command`;execute(e,t){let n=(e.timeout??600)*1e3,r=JSON.stringify(t);return new Promise(i=>{let a=[],o=[],s=!1,c=(0,u.spawn)(`sh`,[`-c`,e.command],{cwd:t.cwd,env:{...process.env,...t.env}});c.stdout.on(`data`,e=>a.push(e)),c.stderr.on(`data`,e=>o.push(e)),c.stdin.on(`error`,()=>{}),c.stdin.write(r),c.stdin.end();let l=setTimeout(()=>{s||(s=!0,c.kill(`SIGTERM`),i({exitCode:1,stdout:``,stderr:`Hook timed out`}))},n);c.on(`close`,e=>{s||(s=!0,clearTimeout(l),i({exitCode:e??1,stdout:Buffer.concat(a).toString(`utf8`),stderr:Buffer.concat(o).toString(`utf8`)}))}),c.on(`error`,e=>{s||(s=!0,clearTimeout(l),i({exitCode:1,stdout:``,stderr:e.message}))})})}};function ei(e){return e.replace(/\$([A-Za-z_][A-Za-z0-9_]*)/g,(e,t)=>{let n=process.env[t];return n===void 0?e:n})}var ti=class{type=`http`;async execute(e,t){let n=(e.timeout??10)*1e3,r={"Content-Type":`application/json`};if(e.headers)for(let[t,n]of Object.entries(e.headers))r[t]=ei(n);try{let i=await fetch(e.url,{method:`POST`,headers:r,body:JSON.stringify(t),signal:AbortSignal.timeout(n)});if(!i.ok)return{exitCode:1,stdout:``,stderr:`HTTP ${i.status} ${i.statusText}`};let a=await i.json();return a.ok?{exitCode:0,stdout:JSON.stringify(a),stderr:``}:{exitCode:2,stdout:``,stderr:a.reason??`Blocked by HTTP hook`}}catch(e){return{exitCode:1,stdout:``,stderr:e instanceof Error?e.message:String(e)}}}};function ni(){return[new $r,new ti]}const ri={deny:3,defer:2,ask:1,allow:0};function ii(e){let t=e.trim();if(!t.startsWith(`{`))return null;try{return JSON.parse(t)}catch{return null}}function ai(e,t){if(!e.matcher)return!0;if(!t)return!1;try{return new RegExp(e.matcher).test(t)}catch{return e.matcher===t}}function oi(e){if(e.tool_name)return e.tool_name;if(e.hook_event_name===`SubagentStart`||e.hook_event_name===`SubagentStop`)return e.agent_type??e.agent_id;if(e.hook_event_name===`SessionEnd`)return e.reason}async function si(e,t,n,r){if(!e)return{blocked:!1,stdout:``};let i=e[t];if(!i||i.length===0)return{blocked:!1,stdout:``};let a=r??ni(),o=new Map;for(let e of a)o.set(e.type,e);let s=[],c=oi(n),l=-1,u,d;for(let e of i){if(!ai(e,c))continue;let r=e.env?{...n,env:{...n.env,...e.env}}:n;for(let n of e.hooks){let e=o.get(n.type);if(!e)continue;let i=await e.execute(n,r);if(i.exitCode===2)return{blocked:!0,reason:i.stderr||`Blocked by hook`,stdout:s.join(`
|
|
7
|
-
`)};if(i.exitCode!==0)continue;let a=ii(i.stdout);if(a!==null){if(a.continue===!1)return{blocked:!0,reason:typeof a.stopReason==`string`?a.stopReason:`Blocked by hook (continue: false)`,stdout:s.join(`
|
|
6
|
+
[This response was interrupted by the user]`),pe(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),he(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},tr=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||0,this.maxConversations=e.maxConversations||50,this.logger=j(`ConversationHistory`)}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new er(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((e,t)=>e+t.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)}},nr=class extends En{name=`local`;version=`1.0.0`;providers=new Map;config;constructor(e={}){super(),this.config={timeout:3e4,maxRetries:3,retryDelay:1e3,enableLogging:!1,...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 Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chat)throw 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 n=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(n.role!==`assistant`)throw Error(`Expected assistant message, got ${n.role}`);return this.validateResponse(n),n}catch(t){let n=t instanceof Error?t:Error(String(t));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 Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chatStream)throw 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 n=t.chatStream(e.messages,{...e.options,model:e.model,tools:e.tools});for await(let e of n)this.validateResponse(e),yield e}catch(t){let n=t instanceof Error?t:Error(String(t));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!0;return!1}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!1}}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()}};const rr=`$ENV:`;function ir(e){return e.startsWith(rr)}function ar(e){return`${rr}${e}`}function or(e){if(!ir(e))return e;let t=e.slice(5).trim();if(t.length!==0)return process.env[t]}function sr(e){return e===void 0||e.length===0?!1:or(e)!==void 0}var cr=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function lr(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new H(`Invalid maxListeners option: ${e.maxListeners}. Must be a non-negative number.`,t,{maxListeners:e.maxListeners});if(e.buffer!==void 0&&e.buffer.maxSize!==void 0&&e.buffer.maxSize<0)throw new H(`Invalid buffer.maxSize option: ${e.buffer.maxSize}. Must be a non-negative number.`,t,{bufferMaxSize:e.buffer.maxSize});if(e.buffer!==void 0&&e.buffer.flushInterval!==void 0&&e.buffer.flushInterval<0)throw new H(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function ur(e,t,n,r,i){try{await e.listener(t)}catch(a){if(n.incrementErrors(),!r)throw a instanceof Error?a:Error(String(a));i.error(`Event handler error`,{eventType:t.type,handlerId:e.id,error:a instanceof Error?a.message:String(a)})}}async function dr(e,t,n,r,i){let a=t.get(e.type);if(!a||a.length===0)return;let o=a.filter(t=>!t.filter||t.filter(e));if(o.length!==0){for(let t of o.filter(e=>e.once))r(e.type,t.id);if(n){await Promise.all(o.map(t=>i(t,e)));return}for(let t of o)await i(t,e)}}function fr(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function pr(e,t,n,r){let{listenerCounts:i,totalListeners:a}=fr(t),o=r.getSnapshot();return{enabled:e.enabled,calls:e.calls,errors:e.errors,eventTypes:Array.from(t.keys()),listenerCounts:i,totalListeners:a,bufferedEvents:n,totalEmitted:o.totalEmitted,totalErrors:o.totalErrors}}function mr(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new H(`Maximum listeners (${a}) exceeded for event type: ${t}`,o,{eventType:t,currentListeners:s.length});s.push({id:n,listener:r,once:i?.once??!1,...i?.filter&&{filter:i.filter}})}function hr(e,t,n){let r=e.get(t);if(!r)return!1;let i=typeof n==`string`?r.findIndex(e=>e.id===n):r.findIndex(e=>e.listener===n);return i===-1?!1:(r.splice(i,1),!0)}function gr(e,t,n){let r=t.result!==null&&t.result!==void 0;return{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.name||``,toolId:t.id||``,toolResult:r?String(t.result):void 0,duration:n,success:r}}}var _r=class extends Tn{name=`EventEmitterPlugin`;version=`1.0.0`;pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=j(`EventEmitterPlugin`),this.metrics=e.metrics??new cr,lr(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[J.AGENT_EXECUTION_START,J.AGENT_EXECUTION_COMPLETE,J.AGENT_EXECUTION_ERROR,J.TOOL_BEFORE_EXECUTE,J.TOOL_AFTER_EXECUTE,J.TOOL_SUCCESS,J.TOOL_ERROR],maxListeners:e.maxListeners??100,async:e.async??!0,catchErrors:e.catchErrors??!0,filters:e.filters??{},buffer:e.buffer??{enabled:!1,maxSize:1e3,flushInterval:5e3},category:e.category??`event_processing`,priority:e.priority??Te.HIGH,moduleEvents:e.moduleEvents??[],subscribeToAllModuleEvents:e.subscribeToAllModuleEvents??!1},this.pluginOptions.buffer.enabled&&(this.bufferTimer=setInterval(()=>{this.flushBuffer().catch(e=>{this.logger.error(`Buffered flush failed`,{error:e instanceof Error?e.message:String(e)})})},this.pluginOptions.buffer.flushInterval))}async beforeExecution(e){await this.emit(J.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(J.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(J.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(e=>({role:e.role,content:e.content||``,timestamp:e.timestamp?e.timestamp.toISOString():new Date().toISOString()})),config:e.config}})}async afterConversation(e,t){await this.emit(J.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(e=>({id:e.id||``,name:e.name||``,arguments:JSON.stringify(e.arguments||{}),result:String(e.result||``)}))}})}async beforeToolExecution(e,t){t&&await this.emit(J.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 n of t.toolCalls){let r=n.result===null?J.TOOL_ERROR:J.TOOL_SUCCESS,i=gr(e,n,t.duration);await this.emit(r,i),await this.emit(J.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(J.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}})}on(e,t,n){let r=`handler_${this.nextHandlerId++}`;return mr(this.handlers,e,r,t,n,this.pluginOptions.maxListeners,this.name),r}once(e,t,n){return this.on(e,t,{once:!0,...n&&{filter:n}})}off(e,t){return hr(this.handlers,e,t)}async emit(e,t={}){if(!this.pluginOptions.events.includes(e))return;let n={type:e,timestamp:new Date,...t},r=this.pluginOptions.filters[e];if(!(r&&!r(n))){if(this.metrics.incrementEmitted(),this.pluginOptions.buffer.enabled){this.eventBuffer.push(n),this.eventBuffer.length>=this.pluginOptions.buffer.maxSize&&await this.flushBuffer();return}await this.processEvent(n)}}async processEvent(e){await dr(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>ur(e,t,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 pr(super.getStats(),this.handlers,this.eventBuffer.length,this.metrics)}clearAllListeners(){this.handlers.clear()}async dispose(){this.bufferTimer&&clearInterval(this.bufferTimer),await this.flushBuffer(),this.clearAllListeners(),await super.dispose()}},vr=class extends ie{moduleManager;pluginManager;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)}};function yr(e){if(!e.name)throw new z(`Agent name is required`,{component:`Robota`});if(!e.aiProviders||e.aiProviders.length===0)throw new z(`At least one AI provider is required`,{component:`Robota`});if(!e.defaultModel)throw new z(`Default model configuration is required`,{component:`Robota`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new z(`Default model must specify both provider and model`,{component:`Robota`});let t=e.aiProviders.map(e=>e.name),n=t.filter((e,n)=>t.indexOf(e)!==n);if(n.length>0)throw new z(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`Robota`,duplicates:n});if(!t.includes(e.defaultModel.provider))throw new z(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`Robota`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var br=class{logger;getAIProviders;getTools;getEventService;isReady;ensureReady;getConfig;setConfig;getConfigVersion;bumpConfigVersion;getConfigUpdatedAt;setConfigUpdatedAt;emitAgentEvent;constructor(e,t,n,r,i,a,o,s,c,l,u,d,f){this.logger=e,this.getAIProviders=t,this.getTools=n,this.getEventService=r,this.isReady=i,this.ensureReady=a,this.getConfig=o,this.setConfig=s,this.getConfigVersion=c,this.bumpConfigVersion=l,this.getConfigUpdatedAt=u,this.setConfigUpdatedAt=d,this.emitAgentEvent=f}async updateTools(e){if(await this.ensureReady(),!Array.isArray(e))throw new z(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],n=this.getEventService();for(let r of e){n&&r.setEventService(n),this.getTools().addTool(r.schema,async(e,t)=>{if(!t)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);return(await r.execute(e,t)).data});let e=r.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let r=this.getConfig();r.tools=e,this.setConfig(r);let i=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(N.CONFIG_UPDATED,{parameters:{tools:t,systemMessage:r.systemMessage,provider:r.defaultModel.provider,model:r.defaultModel.model,temperature:r.defaultModel.temperature,maxTokens:r.defaultModel.maxTokens},metadata:{version:i}}),{version:i}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);throw new z(`updateConfiguration: only tools patch is supported at this time`)}async getConfiguration(){await this.ensureReady();let e=this.getTools().getTools().map(e=>({name:e.name,parameters:(()=>{let t=e.parameters?.properties;return t&&typeof t==`object`?Object.keys(t):void 0})()}));return{version:this.getConfigVersion(),tools:e,updatedAt:this.getConfigUpdatedAt(),metadata:void 0}}setModel(e){if(!e.provider||!e.model)throw new z(`Both provider and model are required`,{component:`Robota`});if(!this.isReady())throw new z(`Agent must be fully initialized before changing model configuration`,{component:`Robota`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new z(`AI Provider '${e.provider}' not found. Available: ${n.join(`, `)}`,{component:`Robota`,provider:e.provider,availableProviders:n});t.setCurrentProvider(e.provider,e.model);let r=this.getConfig();this.setConfig({...r,defaultModel:{...r.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.effort!==void 0&&{effort:e.effort}}}),this.logger.debug(`Model configuration updated`,e)}getModel(){if(!this.isReady())throw new z(`Agent must be fully initialized before getting model configuration`,{component:`Robota`});let e=this.getAIProviders().getCurrentProvider();if(!e)throw new z(`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}}}setSystemMessage(e){let t=this.getConfig();t.systemMessage=e,this.setConfig(t),this.setConfigUpdatedAt(Date.now())}getSystemMessage(){return this.getConfig().systemMessage}registerTool(e,t){if(t.hasTool(e.schema.name))throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);return(await e.execute(t,n)).data}),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},xr=class{agentName;moduleRegistry;logger;isReady;ensureReady;constructor(e,t,n,r,i){this.agentName=e,this.moduleRegistry=t,this.logger=n,this.isReady=r,this.ensureReady=i}async registerModule(e,t){await this.ensureReady(),await this.moduleRegistry.registerModule(e,{autoInitialize:t?.autoInitialize??!0,validateDependencies:t?.validateDependencies??!0}),this.logger.info(`Module registered`,{moduleName:e.name,moduleType:e.getModuleType().type})}async unregisterModule(e){if(!this.isReady())return!1;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):!1}async executeModule(e,t){await this.ensureReady();let n={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,n)}getModuleStats(e){if(this.isReady())return this.moduleRegistry.getModuleStats(e)}},Sr=class{logger;isReady;getExecutionService;constructor(e,t,n){this.logger=e,this.isReady=t,this.getExecutionService=n}addPlugin(e){let t=this.getExecutionService();if(!this.isReady()||!t)throw new z(`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!1;let n=t.removePlugin(e);return n&&this.logger.debug(`Plugin removed`,{pluginName:e}),n}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(e=>e.name)}};function Cr(e){return{moduleManager:new xr(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new Sr(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new br(e.getLogger(),e.getAiProviders,e.getTools,e.getEventService,e.getIsFullyInitialized,e.ensureFullyInitialized,e.getConfig,t=>e.setConfig(t),e.getConfigVersion,e.incrementConfigVersion,e.getConfigUpdatedAt,t=>e.setConfigUpdatedAt(t),(t,n)=>e.emitAgentEvent(t,n))}}function wr(e,t){let n=Array.isArray(e.tools)?e.tools.map(e=>{let t=e?.schema?.name;if(typeof t==`string`&&t.length>0)return t;let n=e?.name;return typeof n==`string`&&n.length>0?n:``}).filter(e=>typeof e==`string`&&e.length>0):[];t(N.CREATED,{parameters:{tools:n,systemMessage:e.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function Tr(e,t,n,r,i){je(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:P,ownerId:t,ownerPath:Dr(t,n)})}function Er(){return new _r({enabled:!0,events:[J.MODULE_INITIALIZE_START,J.MODULE_INITIALIZE_COMPLETE,J.MODULE_INITIALIZE_ERROR,J.MODULE_EXECUTION_START,J.MODULE_EXECUTION_COMPLETE,J.MODULE_EXECUTION_ERROR,J.MODULE_DISPOSE_START,J.MODULE_DISPOSE_COMPLETE,J.MODULE_DISPOSE_ERROR]})}function Dr(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function Or(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.maxExecutionRounds!==void 0&&{maxExecutionRounds:t.maxExecutionRounds},...t.maxSameToolInputs!==void 0&&{maxSameToolInputs:t.maxSameToolInputs},...t.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:t.allowToolOnlyCompletion},...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.temperature!==void 0&&{temperature:t.temperature},...t.toolChoice!==void 0&&{toolChoice:t.toolChoice}}}async function kr(e,t,n={},r){try{e.emitAgentEvent(N.EXECUTION_START,{}),e.logger.debug(`Starting Robota execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=await e.getExecutionService().execute(t,i,a,Or(e,n));if(e.logger.debug(`Robota execution completed`,{success:o.success,duration:o.duration,tokensUsed:o.tokensUsed,toolsExecuted:o.toolsExecuted,interrupted:o.interrupted}),o.interrupted)return e.emitAgentEvent(N.EXECUTION_COMPLETE,{}),o.response;if(!o.success)throw o.error??Error(`[STRICT-POLICY] Failed execution result missing error field — every success:false result must carry error`);return e.emitAgentEvent(N.EXECUTION_COMPLETE,{}),o.response}catch(t){throw e.logger.error(`Robota execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(N.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}}async function*Ar(e,t,n={},r){try{e.emitAgentEvent(N.EXECUTION_START,{}),e.logger.debug(`Starting Robota streaming execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=e.getExecutionService().executeStream(t,i,a,Or(e,n));for await(let e of o)yield e.chunk}catch(t){throw e.logger.error(`Robota streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(N.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}finally{e.emitAgentEvent(N.EXECUTION_COMPLETE,{})}}function jr(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function Mr(e,t){return[`Your previous response did not match the required JSON schema.`,`Validation issues:`,...t.map(e=>`- ${e}`),``,`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e.jsonSchema)].join(`
|
|
7
|
+
`)}async function Nr(e,t,n,r){let i=(n.outputRetries??2)+1,a=jr(r),o=t,s=[];for(let t=1;t<=i;t++){let c=Fr(r,await kr(e,o,n,a));if(c.success)return c.value;s=c.issues,e.logger.debug(`Structured output validation failed`,{attempt:t,maxAttempts:i,issues:s}),t<i&&(o=Mr(r,s))}throw new Ue(`response failed schema validation after ${i} attempt(s)`,s,i)}async function*Pr(e,t,n,r){let i=(n.outputRetries??2)+1,a=jr(r),o=t,s=[];for(let t=1;t<=i;t++){let c=``;for await(let t of Ar(e,o,n,a))c+=t,yield t;let l=Fr(r,c);if(l.success)return l.value;s=l.issues,e.logger.debug(`Structured output validation failed (stream)`,{attempt:t,maxAttempts:i,issues:s}),t<i&&(o=Mr(r,s))}throw new Ue(`response failed schema validation after ${i} attempt(s)`,s,i)}function Fr(e,t){let n=Jn(t);if(!n.success)return{success:!1,issues:[n.issue]};let r=e.validate(n.value);return r.success?{success:!0,value:r.value}:{success:!1,issues:r.issues}}function Ir(e,t){return e.getConversationStore(t).getMessages().map(e=>({id:e.id,role:e.role,content:e.content,state:e.state,timestamp:e.timestamp,metadata:e.metadata,...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{},...e.role===`tool`&&`name`in e?{name:e.name}:{}}))}function Lr(e,t){return e.getConversationStore(t).getHistory()}function Rr(e,t,n){e.getConversationStore(t).addEntry(n)}function zr(e,t){e.getConversationStore(t).clear()}function Br(e,t,n,r,i){let a=e.getConversationStore(t);n===`tool`&&i?.toolCallId?a.addToolMessageWithId(r,i.toolCallId,i.name??`unknown`):n===`assistant`?a.addAssistantMessage(r,[]):n===`system`?a.addSystemMessage(r):a.addUserMessage(r)}function Vr(e,t,n){e.getConversationStore(t).addMessage(n)}var Hr=class{build(e,t,n,r){let i=e.map(e=>({role:e.role,content:e.content})),a=JSON.stringify({messages:i,model:t,provider:n,temperature:r?.temperature,maxTokens:r?.maxTokens});return{hash:this.sha256(a),model:t,provider:n}}computeIntegrityHash(e){return this.sha256(e)}sha256(e){let t=new l.default(`SHA-256`,`TEXT`);return t.update(e),t.getHash(`HEX`)}},Ur=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new Hr;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 n=this.keyBuilder.computeIntegrityHash(t.response);if(t.integrityHash!==n)throw this.cache.delete(e),this.removeFromAccessOrder(e),new Ze(`Integrity check failed for cache entry ${e}`,{hash:e,expected:n,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),!0):!1}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)}},Wr=class{storage;keyBuilder;constructor(e,t){this.storage=e,this.keyBuilder=t}lookup(e,t,n,r){let i=this.keyBuilder.build(e,t,n,r),a=this.storage.get(i.hash);return a?a.response:void 0}store(e,t,n,r,i){let a=this.keyBuilder.build(e,t,n,i);this.storage.set({key:a,response:r,timestamp:Date.now(),integrityHash:this.keyBuilder.computeIntegrityHash(r)})}getStats(){return this.storage.getStats()}};async function Gr(e){let{config:t,aiProviders:n,tools:r,agentFactory:i,conversationHistory:a,moduleRegistry:o,eventEmitter:s,eventService:c,logger:l}=e;if(l.debug(`Starting Robota initialization with independent managers`),await Promise.all([n.initialize(),r.initialize(),i.initialize()]),t.aiProviders)for(let e of t.aiProviders)n.addProvider(e.name,e);if(t.defaultModel&&n.setCurrentProvider(t.defaultModel.provider,t.defaultModel.model),t.modules){for(let e of t.modules)await o.registerModule(e,{autoInitialize:!0,validateDependencies:!0});l.debug(`Modules registered and initialized`,{moduleCount:t.modules.length,moduleNames:t.modules.map(e=>e.name)})}if(t.tools)for(let e of t.tools)e instanceof Dn&&c&&e.setEventService(c),r.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);return(await e.execute(t,n)).data}),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new Wr(new Ur({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new Hr));let d=new xn(n,r,a,c,t.executionContext,u);if(t.ask&&d.setAskHandler(t.ask),t.plugins)for(let e of t.plugins)d.registerPlugin(e),e.subscribeToModuleEvents&&(await e.subscribeToModuleEvents(s),l.debug(`Plugin subscribed to module events`,{pluginName:e.name}));return l.debug(`Robota initialization completed successfully with independent managers`),d}async function Kr(e){try{let t=await Gr(e.ctx);e.setExecutionService(t),e.setFullyInitialized(!0)}catch(t){throw e.ctx.logger.error(`Robota initialization failed`,{error:t instanceof Error?t.message:String(t)}),t}}function qr(e){let t=e.isFullyInitialized?e.aiProviders.getProviderNames():[],n=e.isFullyInitialized?e.aiProviders.getCurrentProvider():null,r=n?n.provider:null,i=e.isFullyInitialized?e.tools.getTools().map(e=>e.name):[],a=e.getPluginNames(),o=e.getModuleNames(),s=e.getHistory(),c=Date.now()-e.startTime,l={user:0,assistant:0,system:0,tool:0};for(let e of s)e.role in l&&l[e.role]++;return{name:e.name,version:e.version,conversationId:e.conversationId,providers:t,currentProvider:r,tools:i,plugins:a,modules:o,historyLength:s.length,historyStats:{userMessages:l.user,assistantMessages:l.assistant,systemMessages:l.system,toolMessages:l.tool},uptime:c}}async function Jr(e){e.logger.debug(`Destroying Robota instance`,{name:e.name});let t=[],n=async(n,r)=>{try{await r(),e.logger.debug(n)}catch(r){let i=r instanceof Error?r:Error(String(r));t.push(i),e.logger.error(`Error during Robota destruction step`,{step:n,error:i.message})}};if(e.isFullyInitialized&&e.moduleRegistry&&await n(`All modules disposed`,()=>e.moduleRegistry.disposeAllModules()),e.executionService){let t=e.executionService.getPlugins();for(let e of t)await n(`Plugin disposed: ${e.name}`,()=>e.dispose());e.logger.debug(`ExecutionService plugins cleaned up`)}return e.moduleRegistry&&await n(`ModuleRegistry cleared`,()=>e.moduleRegistry.clearAllModules()),e.eventEmitter&&await n(`EventEmitter disposed`,()=>e.eventEmitter.dispose()),e.resetState(),t.length===0?e.logger.info(`Robota instance destroyed successfully`,{name:e.name}):e.logger.warn(`Robota instance destroyed with cleanup failures`,{name:e.name,failureCount:t.length}),{errors:t}}function Yr(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage||`You are a helpful AI assistant.`,strictValidation:e.strictValidation??!0,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function Xr(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new z(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel,r=n?.model??t.defaultModel;if(!r)throw new z(`No model specified: set config.defaultModel.model or the AgentFactory defaultModel option`);let i=n?.provider??e.aiProviders[0]?.name??t.defaultProvider;if(!i)throw new z(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||Zr(),name:e.name||`Unnamed Agent`,aiProviders:e.aiProviders,defaultModel:{provider:i,model:r,temperature:n?.temperature??.7,...n?.maxTokens!==void 0&&{maxTokens:n.maxTokens},...n?.topP!==void 0&&{topP:n.topP}},systemMessage:e.systemMessage||t.defaultSystemMessage,tools:e.tools||[],plugins:e.plugins||[],metadata:e.metadata||{},...e.logging&&{logging:e.logging},...e.conversationId&&{conversationId:e.conversationId},...e}}function Zr(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function Qr(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var $r=class{templates=new Map;logger;constructor(){this.logger=j(`AgentTemplates`),this.logger.info(`AgentTemplates initialized`)}registerTemplate(e){if(!e.id)throw 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(e=>t.tags?.includes(e))||e.provider&&t.config.defaultModel?.provider!==e.provider||e.model&&t.config.defaultModel?.model!==e.model))}applyTemplate(e,t={}){let n=[],r=!1,i={...e.config},a={...i,...t},o=e=>{e in t&&i[e]!==t[e]&&(r=!0,i[e]!==void 0&&n.push(`Override: ${e} changed from "${String(i[e])}" to "${String(t[e])}"`))};t.name!==void 0&&o(`name`),t.systemMessage!==void 0&&o(`systemMessage`);let s=a;return this.logger.debug(`Template applied`,{templateId:e.id,overridesCount:Object.keys(t).length,warningsCount:n.length,modified:r}),{config:s,template:e,warnings:n,modified:r}}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(e=>e.category).filter(e=>typeof e==`string`&&e.length>0))],n=[...new Set(e.flatMap(e=>e.tags||[]))],r=[...new Set(e.map(e=>e.config.defaultModel?.provider).filter(e=>typeof e==`string`&&e.length>0))],i=[...new Set(e.map(e=>e.config.defaultModel?.model).filter(e=>typeof e==`string`&&e.length>0))];return{totalTemplates:e.length,categories:t,tags:n,providers:r,models:i}}},ei=class{agentTemplates;initialized=!1;logger;options;activeAgents;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new $r,this.logger=j(`AgentFactory`),this.options=Yr(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=!0,this.logger.debug(`AgentFactory initialization completed`))}async createAgent(e,t,n=!1){let r;try{if(this.activeAgents.size>=this.options.maxConcurrentAgents)throw new z(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);if(r=Xr(t,this.options),this.options.strictValidation){let e=kn(r);if(!e.isValid)throw new B(`Invalid agent configuration: ${e.errors.join(`, `)}`)}this.lifecycleEvents.beforeCreate&&await this.lifecycleEvents.beforeCreate(r);let i=new e(r),a=i;typeof a.initialize==`function`&&await a.initialize();let o=Zr();return this.activeAgents.set(o,i),Qr(this.creationStats,n),this.lifecycleEvents.afterCreate&&await this.lifecycleEvents.afterCreate(i,r),this.logger.info(`Agent created successfully`,{agentId:o,model:r.defaultModel.model,provider:r.defaultModel.provider}),i}catch(e){let n=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&r&&await this.lifecycleEvents.onCreateError(n,r),this.logger.error(`Failed to create agent`,{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}async createFromTemplate(e,t,n={}){let r=this.agentTemplates.getTemplate(t);if(!r)throw new z(`Template not found: ${t}`);let i=this.applyTemplate(r,n);i.warnings.length>0&&this.logger.warn(`Template application warnings`,{templateId:t,warnings:i.warnings});let a=await this.createAgent(e,i.config,!0);return this.logger.info(`Agent created from template`,{templateId:t,modified:i.modified,warnings:i.warnings.length}),a}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!1;try{let n=t;return typeof n.cleanup==`function`&&await n.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(t){throw this.logger.error(`Error destroying agent`,{agentId:e,error:t instanceof Error?t.message:String(t)}),t}}getCreationStats(){return{...this.creationStats}}getActiveAgents(){return new Map(this.activeAgents)}validateConfiguration(e){return kn(e)}},ti=class extends ae{providers=new Map;currentProvider;currentModel;constructor(){super()}async doInitialize(){M.debug(`AIProviders initialized`)}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),M.debug(`Closed AI provider: ${e}`)}catch(t){M.warn(`Failed to close AI provider ${e}`,{error:t instanceof Error?t.message:String(t)})}this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0,M.debug(`AIProviders disposed`)}addProvider(e,t){this.ensureInitialized();let n=Y.validateProviderName(e);if(!n.isValid)throw new B(`Invalid provider name: ${n.errors.join(`, `)}`);if(!t||typeof t!=`object`||!t||Array.isArray(t))throw new B(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new B(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new B(`Provider must have a chat method`);this.providers.has(e)&&M.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),M.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)){M.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(t=>{M.warn(`Failed to close provider ${e}`,{error:t.message})}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,M.debug(`Cleared current provider selection after removing "${e}"`)),M.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 z(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,M.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))}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,n={};for(let[e,r]of this.providers)t.test(e)&&(n[e]=r);return n}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return!1;let n=this.providers.get(t);return!!(n&&typeof n.chatStream==`function`)}getProviderCount(){return this.ensureInitialized(),this.providers.size}};function ni(e,t,n){if(!e.name||e.name.trim()===``)throw new z(`Module name is required`);if(!e.version||e.version.trim()===``)throw new z(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new z(`Invalid module type: ${i.errors.join(`, `)}`,{moduleName:e.name,errors:i.errors});i.warnings.length>0&&n.warn(`Module type validation warnings`,{moduleName:e.name,warnings:i.warnings})}async function ri(e,t,n,r){let i=e.getModuleType();if(!i.dependencies||i.dependencies.length===0)return;for(let n of i.dependencies)if(!t.hasType(n))throw new z(`Module '${e.name}' depends on unregistered type '${n}'`,{moduleName:e.name,dependencyType:n});let a=new Set;for(let e of n.values())a.add(e.getModuleType().type);let o=[];for(let e of i.dependencies)a.has(e)||o.push(e);o.length>0&&r.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:o})}function ii(e,t){let n=t.get(e);if(!n)return[];let r=n.getModuleType().type,i=[];for(let[n,a]of t.entries())n!==e&&a.getModuleType().dependencies?.includes(r)&&i.push(n);return i}function ai(e,t){let n={},r=0,i=0,a=0,o=0,s=0,c=0;for(let t of e.values()){let e=t.getModuleType().type;n[e]=(n[e]||0)+1,t.isInitialized()&&r++,t.isEnabled()&&i++}for(let e of t.values())a+=e.totalExecutions,o+=e.successfulExecutions,s+=e.failedExecutions,c+=e.totalExecutionTime;return{totalModules:e.size,initializedModules:r,enabledModules:i,modulesByType:n,totalExecutions:a,totalSuccessfulExecutions:o,totalFailedExecutions:s,averageExecutionTime:a>0?c/a:0}}function oi(){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 si(e,t){let n=[],r=[];if((!e.type||e.type.trim()===``)&&n.push(`Module type is required and cannot be empty`),e.category||n.push(`Module category is required`),e.layer||n.push(`Module layer is required`),e.type&&!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(e.type)&&n.push(`Module type must start with a letter and contain only letters, numbers, hyphens, and underscores`),e.dependencies){for(let t of e.dependencies)(!t||t.trim()===``)&&n.push(`Dependencies cannot be empty`);e.dependencies.includes(e.type)&&n.push(`Module cannot depend on itself`)}if(e.capabilities)for(let t of e.capabilities)(!t||t.trim()===``)&&n.push(`Capabilities cannot be empty`);if(e.dependencies){let n=[`infrastructure`,`core`,`application`,`domain`,`presentation`],i=n.indexOf(e.layer);for(let a of e.dependencies){let o=t(a);o&&n.indexOf(o.layer)>i&&r.push(`Module '${e.type}' (${e.layer}) depends on '${a}' (${o.layer}) which is in a higher layer`)}}return{valid:n.length===0,errors:n,warnings:r}}function ci(e,t,n){let r=new Set,i=new Set,a=[],o=[],s=[];for(let r of e){let e=t(r);if(!e){s.push(r);continue}if(e.dependencies)for(let t of e.dependencies)!n(t)&&!s.includes(t)&&s.push(t)}let c=(s,l=[])=>{if(i.has(s)){let e=l.indexOf(s);o.push(l.slice(e).concat([s]));return}if(r.has(s))return;let u=t(s);if(!u)return;i.add(s);let d=[...l,s];if(u.dependencies)for(let t of u.dependencies)(e.includes(t)||n(t))&&c(t,d);i.delete(s),r.add(s),a.push(s)};for(let t of e)r.has(t)||c(t);return{resolved:s.length===0&&o.length===0,order:a,circularDependencies:o,missingDependencies:s}}function li(e,t){let n=[],r=[],i=new Map;for(let n of e){let e=t(n);e&&(i.has(e.layer)||i.set(e.layer,[]),i.get(e.layer).push(n))}let a=new Map;for(let n of e){let e=t(n);if(e?.capabilities)for(let t of e.capabilities)a.has(t)||a.set(t,[]),a.get(t).push(n)}for(let[e,t]of Array.from(a.entries()))if(t.length>1)for(let r=0;r<t.length;r++)for(let i=r+1;i<t.length;i++){let a=t[r],o=t[i];a&&o&&n.push({module1:a,module2:o,reason:`Both modules provide capability '${e}'`})}return n.length>0&&(r.push(`Consider using only one module per capability`),r.push(`Check if modules can be configured to avoid conflicts`)),!i.has(`infrastructure`)&&e.length>1&&r.push(`Consider adding infrastructure modules for better foundation`),{compatible:n.length===0,conflicts:n,suggestions:r}}function ui(e){let t={core:0,storage:0,processing:0,integration:0,interface:0,capability:0},n={infrastructure:0,core:0,application:0,domain:0,presentation:0},r=0,i=0;for(let a of e.values())t[a.category]++,n[a.layer]++,a.dependencies&&a.dependencies.length>0&&r++,a.capabilities&&a.capabilities.length>0&&i++;return{totalTypes:e.size,typesByCategory:t,typesByLayer:n,typesWithDependencies:r,typesWithCapabilities:i}}var di=class{registeredTypes=new Map;logger;constructor(){this.logger=j(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new z(`Invalid module type descriptor: ${t.errors.join(`, `)}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let t=this.registeredTypes.get(e.type);this.logger.warn(`Overriding existing module type`,{type:e.type,previousCategory:t?.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!1;let t=this.findDependentTypes(e);if(t.length>0)throw new z(`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}),!0}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 si(e,e=>this.getType(e))}resolveDependencies(e){return ci(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return li(e,e=>this.getType(e))}findDependentTypes(e){let t=[];for(let[n,r]of this.registeredTypes)r.dependencies?.includes(e)&&t.push(n);return t}registerBuiltinTypes(){for(let e of oi())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 ui(this.registeredTypes)}};const fi={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var pi=class{modules=new Map;moduleOptions=new Map;moduleStatuses=new Map;moduleStats=new Map;registrationOrder=[];initializationOrder=[];typeRegistry;eventEmitter;logger;isDisposing=!1;constructor(e,t){this.eventEmitter=e,this.typeRegistry=t??new di,this.logger=j(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new z(`Cannot register modules during disposal`);if(ni(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new z(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await ri(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 n=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:n.type,enabled:e.isEnabled(),initialized:!1,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:n.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(fi.REGISTERED,{data:{moduleName:e.name,moduleType:n.type},timestamp:new Date})}async unregisterModule(e){let t=this.modules.get(e);if(!t)return!1;let n=ii(e,this.modules);if(n.length>0)throw new z(`Cannot unregister module '${e}' - it is required by: ${n.join(`, `)}`,{moduleName:e,dependents:n});t.isInitialized()&&t.dispose&&await t.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let r=this.registrationOrder.indexOf(e);r!==-1&&this.registrationOrder.splice(r,1);let i=this.initializationOrder.indexOf(e);return i!==-1&&this.initializationOrder.splice(i,1),this.eventEmitter&&await this.eventEmitter.emit(fi.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new z(`Module '${e}' not found`);if(n.isInitialized())return;let r=this.moduleOptions.get(e),i=n.initialize(r,this.eventEmitter);if(t&&t>0){let n,r=new Promise((r,i)=>{n=setTimeout(()=>{i(Error(`Module '${e}' initialization timed out after ${t}ms`))},t)});await Promise.race([i.then(e=>(clearTimeout(n),e)),r])}else await i;let a=this.moduleStatuses.get(e);a&&(a.initialized=!0,a.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 n=t.map(e=>this.modules.get(e).getModuleType().type),r=this.typeRegistry.resolveDependencies(n);if(!r.resolved){let e=[];throw r.missingDependencies.length>0&&e.push(`Missing dependencies: ${r.missingDependencies.join(`, `)}`),r.circularDependencies.length>0&&e.push(`Circular dependencies: ${r.circularDependencies.map(e=>e.join(` -> `)).join(`; `)}`),new z(`Cannot initialize modules: ${e.join(`; `)}`,{missingDependencies:r.missingDependencies,circularDependencies:r.circularDependencies.map(e=>e.join(` -> `))})}for(let n of r.order){let r=t.find(e=>this.modules.get(e).getModuleType().type===n);r&&await this.initializeModule(r,e)}}async executeModule(e,t){let n=this.modules.get(e);if(!n)throw new z(`Module '${e}' not found`);if(!n.isInitialized())throw new z(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new z(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new z(`Module '${e}' does not support execute()`);let a=await n.execute(t),o=Date.now()-i;r.totalExecutions++,r.successfulExecutions++,r.totalExecutionTime+=o,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date;let s=this.moduleStatuses.get(e);return s&&(s.lastActivity=new Date),a}catch(e){let t=Date.now()-i;throw r.totalExecutions++,r.failedExecutions++,r.totalExecutionTime+=t,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date,e}}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,n]of this.moduleStats.entries())e[t]={...n};return e}async disposeAllModules(){this.isDisposing=!0;let e=[...this.initializationOrder].reverse();for(let t of e){let e=this.modules.get(t);if(e&&e.isInitialized())try{e.dispose&&await e.dispose();let n=this.moduleStatuses.get(t);n&&(n.initialized=!1)}catch(e){this.logger.error(`Failed to dispose module`,{name:t,error:e instanceof Error?e.message:String(e)})}}this.initializationOrder=[],this.isDisposing=!1}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=!1}getRegistryStats(){return ai(this.modules,this.moduleStats)}},mi=class{tools=new Map;register(e){if(!e.schema?.name)throw new B(`Tool must have a valid schema with name`);let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&M.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),M.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)){M.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),M.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 M.debug(`[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction`,{count:e.length,tools:e.map(e=>({name:e.schema?.name??`unnamed`,hasSchema:!!e.schema,schemaType:typeof e.schema,toolType:e.constructor?.name||`unknown`}))}),this.getAll().map(e=>e.schema)}has(e){return this.tools.has(e)}clear(){let e=this.tools.size;this.tools.clear(),M.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(e=>t.test(e.schema.name))}size(){return this.tools.size}validateToolSchema(e){if(!e.name||typeof e.name!=`string`)throw new B(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new B(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new B(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new B(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let t of Object.keys(e.parameters.properties)){let n=e.parameters.properties[t];if(!n?.type)throw new B(`Parameter "${t}" must have a type`);if(![`string`,`number`,`boolean`,`array`,`object`].includes(n.type))throw new B(`Parameter "${t}" has invalid type "${n.type}"`)}if(e.parameters.required){let t=e.parameters.properties||{};for(let n of e.parameters.required)if(!t[n])throw new B(`Required parameter "${n}" is not defined in properties`)}}},hi=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 n=this.schema.name;if(!this.validate(e))throw new B(`Invalid parameters for tool "${n}": ${this.getValidationErrors(e).join(`, `)}`);let r=Date.now(),i;try{i=await this.fn(e,t)}catch(r){throw r instanceof V||r instanceof B?r:new V(`Function tool execution failed: ${r instanceof Error?r.message:String(r)}`,n,r instanceof Error?r:Error(String(r)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let a=Date.now()-r;return{success:!0,data:i,metadata:{executionTime:a,toolName:n,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=[],n=this.schema.parameters.required||[],r=this.schema.parameters.properties||{};for(let r of n)r in e||t.push(`Missing required parameter: ${r}`);for(let[n,i]of Object.entries(e)){let e=r[n];if(!e){t.push(`Unknown parameter: ${n}`);continue}let a=this.validateParameterType(n,i,e);a&&t.push(a)}return t}validateParameterType(e,t,n){switch(n.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(n.items)for(let r=0;r<t.length;r++){let i=this.validateParameterType(`${e}[${r}]`,t[r],n.items);if(i)return i}break;case`object`:if(typeof t!=`object`||!t||Array.isArray(t))return`Parameter "${e}" must be an object, got ${typeof t}`;break}if(n.enum&&n.enum.length>0){let r=n.enum,i=!1;for(let e of r)if(t===e){i=!0;break}if(!i)return`Parameter "${e}" must be one of: ${r.join(`, `)}, got ${t}`}}validateConstructorInputs(){if(!this.schema)throw new B(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new B(`Tool function is required and must be a function`);if(!this.schema.name)throw new B(`Tool schema must have a name`)}},gi=class extends ae{registry;allowedTools;constructor(){super(),this.registry=new mi}async doInitialize(){M.debug(`Tools initialized`)}async doDispose(){this.registry.clear(),delete this.allowedTools,M.debug(`Tools disposed`)}addTool(e,t){this.ensureInitialized();let n=new hi(e,t);this.registry.register(n),M.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(e=>this.allowedTools.includes(e.name)):e}async executeTool(e,t,n){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new V(`Tool "${e}" is not in the allowed tools list`,e);let r=this.registry.get(e);if(!r)throw new V(`Tool "${e}" is not registered`,e);let i;try{i=await r.execute(t,n)}catch(t){throw t instanceof Error?new V(t.message,e,t):new V(String(t),e)}if(!i.success)throw new V(i.error||`Tool execution failed`,e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(i)});if(i.data===void 0)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],M.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()}},_i=class extends vr{name;version=`1.0.0`;aiProviders;tools;agentFactory;conversationHistory;moduleRegistry;eventEmitter;executionService;eventService;agentEventService;config;conversationId;logger;initializationPromise;destroyed=!1;isFullyInitialized=!1;startTime;configVersion=1;configUpdatedAt=Date.now();configManager;constructor(e){super(),this.name=e.name,this.config=e,this.conversationId=e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`,this.logger=j(`Robota`),this.startTime=Date.now(),e.logging&&(e.logging.level&&ye(e.logging.level),e.logging.enabled===!1&&ye(`silent`)),yr(e),this.aiProviders=new ti,this.tools=new gi,this.agentFactory=new ei,this.conversationHistory=new tr,this.eventEmitter=Er(),this.moduleRegistry=new pi(this.eventEmitter),this.eventService=e.eventService||Ae,this.agentEventService=L(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:Dr(this.conversationId,this.config.executionContext)});let t=Cr({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:e=>{this.config=e},getConfigVersion:()=>this.configVersion,incrementConfigVersion:()=>++this.configVersion,getConfigUpdatedAt:()=>this.configUpdatedAt,setConfigUpdatedAt:e=>{this.configUpdatedAt=e},emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)});this.moduleManager=t.moduleManager,this.pluginManager=t.pluginManager,this.configManager=t.configManager,wr(this.config,(e,t)=>this.emitAgentEvent(e,t))}async ensureReady(){await this.ensureFullyInitialized()}async run(e,t={}){return this.assertNotDestroyed(),this.enqueueRun(t.signal,async()=>{await this.ensureFullyInitialized();try{if(t.output){let n=qn(t.output);return await Nr(this.executionDeps(),e,t,n)}return await kr(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory()}})}async*runStream(e,t={}){this.assertNotDestroyed();let n=await this.acquireRunSlot(t.signal);try{if(await this.ensureFullyInitialized(),t.output){let n=qn(t.output);return yield*Pr(this.executionDeps(),e,t,n)}return yield*Ar(this.executionDeps(),e,t),void 0}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueueTail=Promise.resolve();async acquireRunSlot(e){let t=this.runQueueTail,n=()=>{};if(this.runQueueTail=new Promise(e=>{n=e}),await t,e?.aborted)throw n(),Error(`Run aborted while queued behind another run on this instance`);return n}async enqueueRun(e,t){let n=await this.acquireRunSlot(e);try{return await t()}finally{n()}}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 Ir(this.conversationHistory,this.conversationId)}getFullHistory(){return Lr(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Rr(this.conversationHistory,this.conversationId,e)}clearHistory(){zr(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){Br(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){Vr(this.conversationHistory,this.conversationId,e)}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()}updateSystemPrompt(e){this.configManager.setSystemMessage(e),this.conversationHistory.getConversationStore(this.conversationId).setSystemPrompt(e)}getSystemPrompt(){return this.configManager.getSystemMessage()}registerTool(e){this.configManager.registerTool(e,this.tools)}unregisterTool(e){this.tools.removeTool(e)}getConfig(){return{...this.config}}swapDefaultProvider(e,t){this.aiProviders.addProvider(e.name,e),this.configManager.setModel({provider:e.name,model:t})}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(){return this.destroyed?{errors:[]}:(this.destroyed=!0,await this.runQueueTail,Jr({name:this.name,isFullyInitialized:this.isFullyInitialized,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,executionService:this.executionService,logger:this.logger,resetState:()=>{this.isFullyInitialized=!1,this.initializationPromise=void 0}}))}assertNotDestroyed(){if(this.destroyed)throw Error(`[LIFECYCLE] Agent "${this.name}" has been destroyed — create a new instance`)}async initialize(){await this.ensureFullyInitialized()}async ensureFullyInitialized(){this.assertNotDestroyed(),!this.isFullyInitialized&&(this.initializationPromise||=this.doAsyncInit().catch(e=>{throw this.initializationPromise=void 0,e}),await this.initializationPromise)}doAsyncInit(){return Kr({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){Tr(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}},vi=class{store;listener;sequenceId=0;constructor(e,t){this.store=e,this.listener=(e,t,n)=>{if(!n?.ownerPath?.length)throw Error(`[HISTORY-MODULE] Missing ownerPath for ${e}`);let r={eventName:e,sequenceId:this.nextSequenceId(),timestamp:t.timestamp,eventData:t,context:n};this.store.append(r)},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 $(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function yi(e){return typeof e==`string`?e.length:0}var bi=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:N.EXECUTION_START,completeEvent:N.EXECUTION_COMPLETE,errorEvent:N.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:yi(n[0]),conversationId:e.conversationId,options:$(n[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod(`runStream`,{startEvent:N.EXECUTION_START,completeEvent:N.EXECUTION_COMPLETE,errorEvent:N.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:yi(n[0]),conversationId:e.conversationId,streaming:!0,options:$(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:U.CALL_START,completeEvent:U.CALL_COMPLETE,errorEvent:U.CALL_ERROR,extractMetadata:(e,t,n)=>({toolName:$(e.schema)?.name||e.constructor.name,parameters:n[0],parametersCount:$(n[0])?Object.keys($(n[0])||{}).length:0,context:n[1]}),extractResult:e=>({result:typeof $(e)?.data==`string`?$(e)?.data||``:JSON.stringify($(e)?.data),success:$(e)?.success})}),this}wrap(e){return new Proxy(e,{get:(e,t,n)=>{let r=Reflect.get(e,t,n);if(typeof t!=`string`)return r;let i=t;if(typeof r==`function`&&this.methodConfigs.has(i)){let t=this.methodConfigs.get(i);return async(...n)=>{let a=Date.now(),o=this.generateExecutionId(),s=e;try{if(t.startEvent){let e=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.startEvent,{timestamp:new Date,metadata:{...e,executionId:o,methodName:i,phase:`start`}})}let c=await r.apply(e,n),l=Date.now()-a;if(t.completeEvent){let e=t.extractResult?.(c)||{},r=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.completeEvent,{timestamp:new Date,...e,metadata:{...r,executionId:o,methodName:i,duration:l,phase:`complete`,success:!0}})}return c}catch(e){let r=Date.now()-a;if(t.errorEvent){let a=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.errorEvent,{timestamp:new Date,error:e instanceof Error?e.message:String(e),metadata:{...a,executionId:o,methodName:i,duration:r,phase:`error`,errorName:e instanceof Error?e.name:`UnknownError`,success:!1}})}throw e}}}return r}})}emitEvent(e,t){let n={emitterSourceType:this.config.sourceType,emitterSourceId:this.config.sourceId},r={timestamp:new Date,...t.metadata?{metadata:{...n,...t.metadata}}:{metadata:n},...t};this.config.eventService.emit(e,r)}generateExecutionId(){return`${this.config.sourceType}-${this.config.sourceId}-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}};function xi(e,t){let n=new bi(t);return n.configureStandardMethods(),n.wrap(e)}function Si(e,t,n){return function(r){return xi(r,{eventService:e,sourceType:t,sourceId:n})}}const Ci={safe:`plan`,moderate:`default`,full:`acceptEdits`},wi={plan:{Shell:`deny`,Bash:`deny`,Read:`auto`,Write:`deny`,Edit:`deny`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`,AskUserQuestion:`auto`},default:{Shell:`approve`,Bash:`approve`,Read:`auto`,Write:`approve`,Edit:`approve`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`,AskUserQuestion:`auto`},acceptEdits:{Shell:`approve`,Bash:`approve`,Read:`auto`,Write:`auto`,Edit:`auto`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`,AskUserQuestion:`auto`},bypassPermissions:{Shell:`auto`,Bash:`auto`,Read:`auto`,Write:`auto`,Edit:`auto`,Glob:`auto`,Grep:`auto`,WebFetch:`auto`,WebSearch:`auto`,AskUserQuestion:`auto`}},Ti={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`};function Ei(e){let t=e.replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function Di(e){let t=e.indexOf(`(`);return t===-1?{toolName:e.trim(),argPattern:void 0}:{toolName:e.slice(0,t).trim(),argPattern:e.slice(t+1,e.lastIndexOf(`)`)).trim()}}function Oi(e,t){switch(e){case`Shell`:case`Bash`:return typeof t.command==`string`?t.command:void 0;case`Read`:case`Write`:case`Edit`:return typeof t.filePath==`string`?t.filePath:void 0;case`Glob`:case`Grep`:return typeof t.pattern==`string`?t.pattern:void 0;default:return}}function ki(e,t,n){let r=Di(n);if(r.toolName!==e)return!1;if(r.argPattern===void 0)return!0;let i=Oi(e,t);return i===void 0?!1:Ei(r.argPattern).test(i)}function Ai(e,t,n,r={}){let{allow:i=[],deny:a=[]}=r;for(let n of a)if(ki(e,t,n))return`deny`;for(let n of i)if(ki(e,t,n))return`auto`;let o=wi[n][e];return o===void 0?Ti[n]:o}const ji=1e6,Mi={"claude-opus-4-7":{inputPerMillion:15,outputPerMillion:75},"claude-opus-4-5":{inputPerMillion:15,outputPerMillion:75},"claude-sonnet-4-6":{inputPerMillion:3,outputPerMillion:15},"claude-sonnet-4-5":{inputPerMillion:3,outputPerMillion:15},"claude-haiku-4-5":{inputPerMillion:.8,outputPerMillion:4},"claude-3-5-sonnet-20241022":{inputPerMillion:3,outputPerMillion:15},"claude-3-5-haiku-20241022":{inputPerMillion:.8,outputPerMillion:4},"claude-3-opus-20240229":{inputPerMillion:15,outputPerMillion:75},"gpt-4o":{inputPerMillion:2.5,outputPerMillion:10},"gpt-4o-mini":{inputPerMillion:.15,outputPerMillion:.6},o1:{inputPerMillion:15,outputPerMillion:60},"o1-mini":{inputPerMillion:3,outputPerMillion:12},o3:{inputPerMillion:10,outputPerMillion:40},"o3-mini":{inputPerMillion:1.1,outputPerMillion:4.4},"deepseek-chat":{inputPerMillion:.14,outputPerMillion:.28},"deepseek-reasoner":{inputPerMillion:.55,outputPerMillion:2.19},"gemini-2.0-flash":{inputPerMillion:.1,outputPerMillion:.4},"gemini-2.0-flash-thinking":{inputPerMillion:.35,outputPerMillion:3.5},"gemini-1.5-pro":{inputPerMillion:1.25,outputPerMillion:5},"gemini-1.5-flash":{inputPerMillion:.075,outputPerMillion:.3}},Ni=[{pattern:/claude-opus/i,price:{inputPerMillion:15,outputPerMillion:75}},{pattern:/claude-sonnet/i,price:{inputPerMillion:3,outputPerMillion:15}},{pattern:/claude-haiku/i,price:{inputPerMillion:.8,outputPerMillion:4}},{pattern:/gpt-4o-mini/i,price:{inputPerMillion:.15,outputPerMillion:.6}},{pattern:/gpt-4/i,price:{inputPerMillion:2.5,outputPerMillion:10}},{pattern:/deepseek/i,price:{inputPerMillion:.14,outputPerMillion:.28}},{pattern:/gemini-2/i,price:{inputPerMillion:.1,outputPerMillion:.4}},{pattern:/gemini-1/i,price:{inputPerMillion:1.25,outputPerMillion:5}}];function Pi(e){let t=Mi[e];if(t)return t;for(let{pattern:t,price:n}of Ni)if(t.test(e))return n}function Fi(e,t,n){let r=Pi(e);if(r)return t/ji*r.inputPerMillion+n/ji*r.outputPerMillion}function Ii(e){let t=Pi(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}var Li=class{type=`command`;execute(e,t){let n=(e.timeout??600)*1e3,r=JSON.stringify(t);return new Promise(i=>{let a=[],o=[],s=!1,c=zn(),l=(0,u.spawn)(c.command,c.commandArgs(e.command),{cwd:t.cwd,env:{...process.env,...t.env}});l.stdout.on(`data`,e=>a.push(e)),l.stderr.on(`data`,e=>o.push(e)),l.stdin.on(`error`,()=>{}),l.stdin.write(r),l.stdin.end();let d=setTimeout(()=>{s||(s=!0,l.kill(`SIGTERM`),i({exitCode:1,stdout:``,stderr:`Hook timed out`}))},n);l.on(`close`,e=>{s||(s=!0,clearTimeout(d),i({exitCode:e??1,stdout:Buffer.concat(a).toString(`utf8`),stderr:Buffer.concat(o).toString(`utf8`)}))}),l.on(`error`,e=>{s||(s=!0,clearTimeout(d),i({exitCode:1,stdout:``,stderr:e.message}))})})}};function Ri(e){return e.replace(/\$([A-Za-z_][A-Za-z0-9_]*)/g,(e,t)=>{let n=process.env[t];return n===void 0?e:n})}var zi=class{type=`http`;async execute(e,t){let n=(e.timeout??10)*1e3,r={"Content-Type":`application/json`};if(e.headers)for(let[t,n]of Object.entries(e.headers))r[t]=Ri(n);try{let i=await fetch(e.url,{method:`POST`,headers:r,body:JSON.stringify(t),signal:AbortSignal.timeout(n)});if(!i.ok)return{exitCode:1,stdout:``,stderr:`HTTP ${i.status} ${i.statusText}`};let a=await i.json();return a.ok?{exitCode:0,stdout:JSON.stringify(a),stderr:``}:{exitCode:2,stdout:``,stderr:a.reason??`Blocked by HTTP hook`}}catch(e){return{exitCode:1,stdout:``,stderr:e instanceof Error?e.message:String(e)}}}};function Bi(){return[new Li,new zi]}const Vi={deny:3,defer:2,ask:1,allow:0};function Hi(e){let t=e.trim();if(!t.startsWith(`{`))return null;try{return JSON.parse(t)}catch{return null}}function Ui(e,t){if(!e.matcher)return!0;if(!t)return!1;try{return new RegExp(e.matcher).test(t)}catch{return e.matcher===t}}function Wi(e){if(e.tool_name)return e.tool_name;if(e.hook_event_name===`SubagentStart`||e.hook_event_name===`SubagentStop`)return e.agent_type??e.agent_id;if(e.hook_event_name===`SessionEnd`)return e.reason}async function Gi(e,t,n,r){if(!e)return{blocked:!1,stdout:``};let i=e[t];if(!i||i.length===0)return{blocked:!1,stdout:``};let a=r??Bi(),o=new Map;for(let e of a)o.set(e.type,e);let s=[],c=Wi(n),l=-1,u,d;for(let e of i){if(!Ui(e,c))continue;let r=e.env?{...n,env:{...n.env,...e.env}}:n;for(let n of e.hooks){let e=o.get(n.type);if(!e)continue;let i=await e.execute(n,r);if(i.exitCode===2)return{blocked:!0,reason:i.stderr||`Blocked by hook`,stdout:s.join(`
|
|
8
|
+
`)};if(i.exitCode!==0)continue;let a=Hi(i.stdout);if(a!==null){if(a.continue===!1)return{blocked:!0,reason:typeof a.stopReason==`string`?a.stopReason:`Blocked by hook (continue: false)`,stdout:s.join(`
|
|
8
9
|
`)};if(t===`UserPromptSubmit`&&a.decision===`block`){let e=a.hookSpecificOutput,t=typeof e==`object`&&e&&`additionalContext`in e?String(e.additionalContext):void 0;return{blocked:!0,reason:`Blocked by hook (decision: block)`,stdout:t?[...s,t].join(`
|
|
9
10
|
`):s.join(`
|
|
10
|
-
`)}}if(t===`UserPromptSubmit`){let e=a.hookSpecificOutput;if(typeof e==`object`&&e&&`additionalContext`in e){let t=String(e.additionalContext);t&&s.push(t)}}if(t===`PreToolUse`){let e=a.hookSpecificOutput;if(typeof e==`object`&&e){let t=e,n=t.permissionDecision;if(typeof n==`string`&&n in
|
|
11
|
+
`)}}if(t===`UserPromptSubmit`){let e=a.hookSpecificOutput;if(typeof e==`object`&&e&&`additionalContext`in e){let t=String(e.additionalContext);t&&s.push(t)}}if(t===`PreToolUse`){let e=a.hookSpecificOutput;if(typeof e==`object`&&e){let t=e,n=t.permissionDecision;if(typeof n==`string`&&n in Vi){let e=Vi[n];if(e>l&&(l=e,u=n),n===`deny`)return{blocked:!0,reason:`Blocked by hook (permissionDecision: deny)`,stdout:s.join(`
|
|
11
12
|
`),permissionDecision:`deny`};e>=l&&t.updatedInput!==void 0&&(d=t.updatedInput)}}}typeof a.systemMessage==`string`&&a.systemMessage&&s.push(a.systemMessage)}else i.stdout.trim()&&s.push(i.stdout.trim())}}let f={blocked:!1,stdout:s.join(`
|
|
12
|
-
`)};return u!==void 0&&(f.permissionDecision=u),d!==void 0&&(f.updatedInput=d),f}exports.AGENT_EVENTS=
|
|
13
|
+
`)};return u!==void 0&&(f.permissionDecision=u),d!==void 0&&(f.updatedInput=d),f}exports.AGENT_EVENTS=N,exports.AGENT_EVENT_PREFIX=P,exports.AbstractAIProvider=xe,exports.AbstractAgent=ie,exports.AbstractEventService=Oe,exports.AbstractExecutor=En,exports.AbstractManager=ae,exports.AbstractPlugin=Tn,exports.AbstractTool=Dn,exports.AgentFactory=ei,exports.AgentTemplates=$r,exports.AuthenticationError=Ge,exports.CLAUDE_MODELS=jt,exports.CONFIRM_NO=`no`,exports.CONFIRM_YES=`yes`,exports.CONTEXT_ESTIMATE_CHARS_PER_TOKEN=4,exports.CacheIntegrityError=Ze,exports.CircuitBreakerOpenError=Ye,exports.ConfigurationError=z,exports.ConsoleLogger=_e,exports.ConversationHistory=tr,exports.ConversationStore=er,exports.DEFAULT_ABSTRACT_EVENT_SERVICE=Ae,exports.DEFAULT_CONTEXT_WINDOW=2e5,exports.DEFAULT_MAX_OUTPUT=16384,exports.DefaultEventService=ke,exports.ENV_REFERENCE_PREFIX=rr,exports.EVENT_EMITTER_EVENTS=J,exports.EXECUTION_EVENTS=F,exports.EXECUTION_EVENT_PREFIX=I,exports.ErrorUtils=Qe,exports.EventEmitterPlugin=_r,exports.EventHistoryModule=vi,exports.ExecutionProxy=bi,exports.InMemoryEventEmitterMetrics=cr,exports.LocalExecutor=nr,exports.MODEL_PRICES=Mi,exports.MODE_POLICY=wi,exports.MessageConverter=On,exports.ModelNotAvailableError=Je,exports.NetworkError=qe,exports.ObservableEventService=Ie,exports.PluginCategory=we,exports.PluginError=H,exports.PluginPriority=Te,exports.ProviderError=We,exports.RateLimitError=Ke,exports.Robota=_i,exports.RobotaError=R,exports.SilentLogger=A,exports.StorageError=Xe,exports.StructuredEventService=Pe,exports.StructuredOutputError=Ue,exports.TASK_EVENTS=Le,exports.TASK_EVENT_PREFIX=`task`,exports.TOOL_EVENTS=U,exports.TOOL_EVENT_PREFIX=W,exports.TRUST_TO_MODE=Ci,exports.ToolExecutionError=V,exports.TypeUtils=d,exports.UNKNOWN_TOOL_FALLBACK=Ti,exports.USER_EVENTS=Re,exports.USER_EVENT_PREFIX=`user`,exports.ValidationError=B,exports.Validator=Y,exports.assertProviderNativeWebToolsAvailable=m,exports.bindEventServiceOwner=Fe,exports.bindWithOwnerPath=L,exports.calculateModelCost=Fi,exports.chatEntryToMessage=k,exports.collectAssistantUsageMetadata=fn,exports.composeEventName=Me,exports.confirmAction=S,exports.createAssistantMessage=Xn,exports.createDefaultProviderCapabilities=f,exports.createExecutionProxy=xi,exports.createLogger=j,exports.createSystemMessage=Zn,exports.createToolMessage=Qn,exports.createUserMessage=Yn,exports.estimateBlendedCostPer1000=Ii,exports.estimateContextTokensFromMessages=Ot,exports.estimateSerializedContextTokens=Dt,exports.evaluatePermission=Ai,exports.extractEnumValues=Hn,exports.findProviderDefinition=_,exports.formatEnvReference=ar,exports.formatSupportedProviderTypes=ee,exports.formatTokenCount=Ft,exports.getGlobalLogLevel=be,exports.getMessagesForAPI=de,exports.getModelContextWindow=Mt,exports.getModelMaxOutput=Nt,exports.getModelName=Pt,exports.getProviderCapabilities=p,exports.getProviderCredentialRequirement=v,exports.getSchemaTypeName=Wn,exports.getToolEstimatedDuration=D,exports.getToolExecutionSteps=ne,exports.hasUsableSecretReference=sr,exports.hasValidationConstraints=Un,exports.isAssistantMessage=pe,exports.isChatEntry=O,exports.isConfirmed=T,exports.isDefaultEventService=je,exports.isEnvReference=ir,exports.isImageGenerationProvider=y,exports.isProgressReportingTool=E,exports.isSystemMessage=me,exports.isToolMessage=he,exports.isUserMessage=fe,exports.isVideoGenerationProvider=b,exports.logger=M,exports.lookupModelPrice=Pi,exports.messageToHistoryEntry=ue,exports.multiSelectAction=te,exports.normalizeStructuredOutput=qn,exports.parseStructuredResponseText=Jn,exports.readTokenUsageFromMessage=xt,exports.readTokenUsageFromMetadata=St,exports.resolveEnvReference=or,exports.resolvePlatformShell=zn,exports.runHooks=Gi,exports.selectAction=C,exports.setGlobalLogLevel=ye,exports.setToolProgressCallback=re,exports.startPeriodicTask=Pn,exports.stopPeriodicTask=Fn,exports.sumHistoryUsage=dn,exports.textAction=w,exports.validateAgainstJsonSchema=Z,exports.validateAgentConfig=kn,exports.validateApiKey=Nn,exports.validateModelName=Mn,exports.validateProviderName=jn,exports.validateUserInput=An,exports.withEventEmission=Si,exports.zodToJsonSchema=Bn;
|