@robota-sdk/agent-core 3.0.0-beta.79 → 3.0.0-beta.81

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.
Files changed (59) hide show
  1. package/CHANGELOG.md +667 -0
  2. package/README.md +24 -4
  3. package/dist/browser/bounded-output-DpjpS98g.js +2 -0
  4. package/dist/browser/bounded-output-DpjpS98g.js.map +1 -0
  5. package/dist/browser/command-executor-cI7XJ374.js +2 -0
  6. package/dist/browser/command-executor-cI7XJ374.js.map +1 -0
  7. package/dist/browser/http-executor-CHy6UeBU.js +2 -0
  8. package/dist/browser/http-executor-CHy6UeBU.js.map +1 -0
  9. package/dist/browser/index.d.ts +3337 -1499
  10. package/dist/browser/index.d.ts.map +1 -1
  11. package/dist/browser/index.js +11 -11
  12. package/dist/browser/index.js.map +1 -1
  13. package/dist/browser/verdict-decoder-Dk_w2NG9.js +2 -0
  14. package/dist/browser/verdict-decoder-Dk_w2NG9.js.map +1 -0
  15. package/dist/node/bounded-output-DpjpS98g.js +2 -0
  16. package/dist/node/bounded-output-DpjpS98g.js.map +1 -0
  17. package/dist/node/command-executor-Aat_q7P2.cjs +1 -0
  18. package/dist/node/command-executor-DV-H2oD6.js +2 -0
  19. package/dist/node/command-executor-DV-H2oD6.js.map +1 -0
  20. package/dist/node/http-executor-71JiIdFP.cjs +1 -0
  21. package/dist/node/http-executor-cWzI2svn.js +2 -0
  22. package/dist/node/http-executor-cWzI2svn.js.map +1 -0
  23. package/dist/node/{index-BKIUt9pk.d.ts → index-CiFlpr7-.d.cts} +3289 -1783
  24. package/dist/node/index-CiFlpr7-.d.cts.map +1 -0
  25. package/dist/node/index-DFlMw376.d.ts +6893 -0
  26. package/dist/node/index-DFlMw376.d.ts.map +1 -0
  27. package/dist/node/index.cjs +11 -11
  28. package/dist/node/index.d.cts +3 -0
  29. package/dist/node/index.d.ts +3 -2
  30. package/dist/node/index.js +11 -11
  31. package/dist/node/index.js.map +1 -1
  32. package/dist/node/node.cjs +1 -0
  33. package/dist/node/node.d.cts +236 -0
  34. package/dist/node/node.d.cts.map +1 -0
  35. package/dist/node/node.d.ts +236 -0
  36. package/dist/node/node.d.ts.map +1 -0
  37. package/dist/node/node.js +2 -0
  38. package/dist/node/node.js.map +1 -0
  39. package/dist/node/project-tool-schema-DrDjGKnH.cjs +1 -0
  40. package/dist/node/project-tool-schema-_UKfY7yO.js +2 -0
  41. package/dist/node/project-tool-schema-_UKfY7yO.js.map +1 -0
  42. package/dist/node/rolldown-runtime-DK3Fl9T5.js +1 -0
  43. package/dist/node/rolldown-runtime-DWNI8pZO.cjs +1 -0
  44. package/dist/node/testing/index.cjs +1 -1
  45. package/dist/node/testing/index.d.cts +96 -0
  46. package/dist/node/testing/index.d.cts.map +1 -0
  47. package/dist/node/testing/index.d.ts +35 -4
  48. package/dist/node/testing/index.d.ts.map +1 -1
  49. package/dist/node/testing/index.js +1 -1
  50. package/dist/node/testing/index.js.map +1 -1
  51. package/dist/node/types-gNrckgFE.d.cts +335 -0
  52. package/dist/node/types-gNrckgFE.d.cts.map +1 -0
  53. package/dist/node/types-gNrckgFE.d.ts +335 -0
  54. package/dist/node/types-gNrckgFE.d.ts.map +1 -0
  55. package/dist/node/verdict-decoder-Dk_w2NG9.js +2 -0
  56. package/dist/node/verdict-decoder-Dk_w2NG9.js.map +1 -0
  57. package/dist/node/verdict-decoder-Estx9MtY.cjs +1 -0
  58. package/package.json +75 -24
  59. package/dist/node/index-BKIUt9pk.d.ts.map +0 -1
@@ -1,14 +1,14 @@
1
- import{randomUUID as e}from"node:crypto";import t from"jssha";import{spawn as n}from"node:child_process";const r={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>r.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>r.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date?!0:r.isPrimitive(e)||r.isArray(e)||r.isObject(e)};function i(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 a(e){let t=typeof e.supportsTools==`function`?e.supportsTools():!1;return e.getCapabilities?.()??i(t)}function o(e,t,n){n?.webSearch===!0&&s(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&s(e,`web fetch`,t.nativeWebTools.webFetch)}function s(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${c(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${c(n.reason)}`)}function c(e){return e?` ${e}`:``}function l(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function u(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 d(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function f(e){return`generateImage`in e&&typeof e.generateImage==`function`}function p(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}const m=`yes`,h=`no`,g=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function _(e,t,n){return{id:e,title:t,description:n?.description,options:g,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function ee(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 v(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 y(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 b(e){return e.type===`answer`&&e.values.includes(`yes`)}function x(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function S(e,t){if(x(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function C(e,t){if(x(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function w(e,t){return x(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}var T=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}},E=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 D(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 O(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 te(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*ne(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 k(e){return e.category===`chat`}function A(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 re(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function ie(e){return e.filter(k).map(A)}function ae(e){return e.role===`user`}function oe(e){return e.role===`assistant`}function se(e){return e.role===`system`}function ce(e){return e.role===`tool`}const j={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var le=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}},ue=class{level;packageName;sinkLogger;constructor(e,t){this.packageName=e,this.sinkLogger=t||j}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),de(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),de(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),de(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),de(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||le.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 de(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function M(e,t){return new ue(e,t)}function fe(e){le.getInstance().setGlobalLevel(e)}function pe(){return le.getInstance().getGlobalLevel()}const N=M(`agents`);var me=class{config;executor;logger;constructor(e=j){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:oe(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:oe(t)?t.toolCalls:void 0,model:e.model,metadata:e.metadata}}supportsTools(){return!0}getCapabilities(){return i(this.supportsTools())}validateConfig(){return!0}validateMessages(e){D(e)}validateTools(e){O(e)}validateNativeWebTools(e){o(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return te(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*ne(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 we(e){return e===Ce||e instanceof Se}function Te(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 Ee(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var De=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??Ee()},i=Te(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function R(e,t){return new De(e,t)}function Oe(e,t){return R(e,t)}var ke=class extends xe{emit(e,t,n){this.notifyListeners(e,t,n)}};const Ae={ASSIGNED:`assigned`,COMPLETED:`completed`},je=`task`,Me={MESSAGE:`message`,INPUT:`input`},Ne=`user`;function Pe(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.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 Fe(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 Ie(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 R(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function Le(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 R(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 z=class extends Error{context;constructor(e,t){super(e),this.context=t,this.name=this.constructor.name,Object.setPrototypeOf(this,new.target.prototype)}},B=class extends z{code=`CONFIGURATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t){super(`Configuration Error: ${e}`,t)}},V=class extends z{field;code=`VALIDATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t,n){super(`Validation Error: ${e}`,n),this.field=t}},Re=class extends z{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}},ze=class extends z{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}},Be=class extends z{provider;code=`AUTHENTICATION_ERROR`;category=`user`;recoverable=!1;constructor(e,t,n){super(`Authentication Error: ${e}`,n),this.provider=t}},Ve=class extends z{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}},He=class extends z{originalError;code=`NETWORK_ERROR`;category=`system`;recoverable=!0;constructor(e,t,n){super(`Network Error: ${e}`,n),this.originalError=t}},H=class extends z{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}},Ue=class extends z{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}},We=class extends z{code=`CIRCUIT_BREAKER_OPEN`;category=`system`;recoverable=!0;constructor(e=`Circuit breaker is open`,t){super(e,t)}},U=class extends z{pluginName;code=`PLUGIN_ERROR`;category=`system`;recoverable=!1;constructor(e,t,n){super(`Plugin Error (${t}): ${e}`,n),this.pluginName=t}},Ge=class extends z{code=`STORAGE_ERROR`;category=`system`;recoverable=!0;constructor(e,t){super(`Storage Error: ${e}`,t)}},Ke=class extends z{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 z?e.recoverable:!1}static getErrorCode(e){return e instanceof z?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof z?e:e instanceof Error?new B(e.message||t):new B(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new ze(`Failed to ${n}`,t,r,{operation:n})}};function Je(e){if(!e.executionId)throw new V(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new V(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new V(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function Ye(e,t){let n=Je(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 Xe(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null}}function Ze(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function Qe(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function $e(e){return e!==void 0}function et(e){return e!==void 0}function tt(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 nt(e,t,n,r){let i=e.requests[r];if(i)try{let a=e.signal?.aborted?Xe(i):await t.executeTool(i.toolName,i.parameters,Ye(i,e.signal));n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=Qe(a))}catch(e){let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=Ze(i,t)}}async function rt(e,t,n){for(;n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await nt(e,t,n,r)}}async function it(e,t){let n={resultsByIndex:Array(e.requests.length),errorsByIndex:Array(e.requests.length),nextRequestIndex:0},r=tt(e.requests.length,e.maxConcurrency),i=Array.from({length:r},()=>rt(e,t,n));await Promise.all(i);let a=n.resultsByIndex.filter($e),o=n.errorsByIndex.filter(et);if(o.length>0&&!e.continueOnError)throw o[0];return{results:a,errors:o}}async function at(e,t){let n=[],r=[];for(let i of e.requests)try{let a=e.signal?.aborted?Xe(i):await t.executeTool(i.toolName,i.parameters,Ye(i,e.signal));if(n.push(a),a.success||r.push(Qe(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 ot(e,t,n){return n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`),e.mode===`parallel`?it(e,t):at(e,t)}const W={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},G=`tool`,st=`unknown_tool`;var ct=class{tools;logger;askHandler;constructor(e,t=j){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 V(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);if(!this.tools.hasTool(e)){let t=this.tools.getTools().map(e=>e.name).sort(),r=lt(e,t),i=n.eventService;if(i){let t={timestamp:new Date,toolName:e,error:r};i.emit(W.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:st,requestedTool:e,availableTools:t}}}let r=n.eventService;if(r){let n={timestamp:new Date,toolName:e,parameters:t};r.emit(W.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(W.CALL_COMPLETE,t),r.emit(W.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(W.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 V(`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 ot(e,this,this.logger)}};function lt(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 ut(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function dt(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 ft(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...dt(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 pt(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:G,ownerId:i,ownerPath:[...dt(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function mt(e,t,n,r,i,a){let o=ft(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:L,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}var ht=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=ut(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(we(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=R(this.baseEventService,{ownerType:G,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 dt(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return ft(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return pt(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return mt(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 R(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(we(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){Pe(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){Fe(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){Ie(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){Le(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function gt(e){let t=_t(e.metadata),n=yt(e.usage);return t??n}function _t(e){if(!e)return;let t=yt({inputTokens:K(e,`inputTokens`),outputTokens:K(e,`outputTokens`),promptTokens:K(e,`promptTokens`),completionTokens:K(e,`completionTokens`),totalTokens:K(e,`totalTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return vt(n);if(xt(n))return yt(n)}function vt(e){try{return yt(JSON.parse(e))}catch{return}}function yt(e){if(!e)return;let t=bt(e.inputTokens,e.promptTokens),n=bt(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=bt(e.totalTokens);return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r}}}function K(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function bt(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function xt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}const St=4;function Ct(e){return Math.ceil(JSON.stringify(e).length/4)}function wt(e,t={}){let n=Ct(e),r=Tt(e),i=r?.tokens,a=Et(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 Tt(e){for(let t=e.length-1;t>=0;t--){let n=gt(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function Et(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const Dt={"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}},Ot=2e5;function kt(e){return Dt[e]?.contextWindow??2e5}const At=16384;function jt(e){return Dt[e]?.maxOutput??16384}function Mt(e){return Dt[e]?.name??e}function Nt(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 Pt=.95;function Ft(e,t,n){let r=wt(e,{usageFloorTokens:n}),i=kt(t),a=i*Pt,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:Pt*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function It(e,t,n,r,i,a){let o=Ft(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 Lt={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 q(e,t,n,r){let i=Lt[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 Rt(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 zt(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function Bt(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 Vt(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 Ht(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 Ut(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 Wt(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 Gt(e,t,n,r,i,a,o,s){let c=Date.now()-n.getTime();await q(a,`onError`,{error:e instanceof Error?e:Error(String(e)),executionContext:Yt(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 Kt(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function qt(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function Jt(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 Yt(e){let t={conversationId:qt(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 Xt(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 Zt(t,n,r,i,a){if(!n.defaultModel?.model)throw Error(`Model is required in defaultModel configuration. Please specify a model.`);if(typeof n.defaultModel.model!=`string`||n.defaultModel.model.trim()===``)throw Error(`Model must be a non-empty string in defaultModel configuration.`);let o={model:n.defaultModel.model,effort:n.defaultModel.effort??`high`,...n.defaultModel.maxTokens!==void 0&&{maxTokens:n.defaultModel.maxTokens},...n.defaultModel.temperature!==void 0&&{temperature:n.defaultModel.temperature},...n.defaultModel.toolChoice!==void 0&&{toolChoice:n.defaultModel.toolChoice},...r.availableTools.length>0&&{tools:r.availableTools},...(()=>{let e=Rt(n.responseFormat);return e?{responseFormat:e}:{}})(),...a};Bt(o.toolChoice,o.tools);let s=r.provider.chat.bind(r.provider);if(i){let r=i.lookup(t,n.defaultModel.model,n.defaultModel.provider,{temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens});if(r)return{role:`assistant`,content:r,timestamp:new Date,id:e(),state:`complete`};let a=await Qt(s,t,o,n.timeout);return typeof a.content==`string`&&i.store(t,n.defaultModel.model,n.defaultModel.provider,a.content,{temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens}),a}return Qt(s,t,o,n.timeout)}async function Qt(e,t,n,r){let i=$t(r),a=n.signal;if(i===void 0&&a===void 0)return e(t,n);if(a?.aborted)throw en();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(en())};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 $t(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function en(){let e=Error(`aborted`);return e.name=`AbortError`,e}function tn(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 nn(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 rn(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 Zt(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=zt(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 an(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function on(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=st,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=wt(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 sn(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 cn(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&&sn(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(an).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=>!an(e)).map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}));let C=kt(l?.defaultModel?.model??``),w=t.getMessages().length,T=on(e,x,t,i,m,{contextLimit:C,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(w).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:w+t,message:e})}),h.emitToolResultsEvents(e,x,s.toolsExecuted,n,r,i,a,o),h.clearToolEventServices(),{...T,unknownToolFailureCount:S.length,unknownToolNames:S}}function ln(e){let t=0,n=0,r=!1;for(let i of e){if(!k(i)||i.data===void 0)continue;let e=A(i);if(e.role!==`assistant`)continue;let a=un(e);a&&(r=!0,t+=a.inputTokens,n+=a.outputTokens)}if(r)return{promptTokens:t,completionTokens:n,totalTokens:t+n}}function un(e){let t=gt(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 dn(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}=Xt(r,e);if(await q(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 R(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),It(m,o,e,n,u,p))return!0;p>1&&a.onTextDelta?.(`
1
+ import{C as e,D as t,E as n,S as r,T as i,_ as a,a as o,b as s,c,d as l,f as u,g as d,h as f,i as p,l as m,m as h,n as g,o as _,p as v,r as y,s as b,t as x,u as ee,v as S,w as C,x as w,y as T}from"./bounded-output-DpjpS98g.js";import{n as te,r as ne,t as re}from"./verdict-decoder-Dk_w2NG9.js";import ie from"jssha";const E={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>E.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>E.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date||E.isPrimitive(e)||E.isArray(e)||E.isObject(e)};function D(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 ae(e,t,n){n?.webSearch===!0&&oe(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&oe(e,`web fetch`,t.nativeWebTools.webFetch)}function oe(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${se(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${se(n.reason)}`)}function se(e){return e?` ${e}`:``}const ce=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function le(e){return typeof e==`string`&&ce.includes(e)}function ue(e,t){return{resolution:e,...t}}const de=new Map(ce.map((e,t)=>[e,t]));function fe(e,t){return{selection:e,effective:null,disposition:`not-applied`,fingerprint:`${t}|${e}|not-applied`}}function pe(e,t,n){let r=e?.models[t];if(!r)return fe(n,t);let i=(i,a)=>`${t}|${n}|${i}|${a}|${r.nativeControlId}|${e.verifiedAt}`;if(n===`auto`)return r.supportedEfforts.includes(r.defaultEffort)?{selection:n,effective:r.defaultEffort,disposition:`model-default`,fingerprint:i(r.defaultEffort,`model-default`)}:fe(n,t);if(r.supportedEfforts.includes(n))return{selection:n,effective:n,disposition:`exact`,fingerprint:i(n,`exact`)};let a=de.get(n),o=r.supportedEfforts.filter(e=>(de.get(e)??1/0)<(a??-1)).at(-1);return o?{selection:n,effective:o,disposition:`clamped`,fingerprint:i(o,`clamped`)}:fe(n,t)}function me(e){let t=typeof e.supportsTools==`function`&&e.supportsTools();return e.getCapabilities?.()??D(t)}function he(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function ge(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 _e(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function ve(e,t){if(e)return e.deviations?.[t]?.capabilities??e.vendorDefault}function ye(e,t,n){let r=ve(e,t);if(!(!r||r.length===0))return r.includes(n)}function be(e,t,n,r){return ye(e,t,n)??r}function xe(e){return`generateImage`in e&&typeof e.generateImage==`function`}function Se(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function Ce(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.type==`string`&&t.type.length>0&&(typeof t.createImageProvider==`function`||typeof t.createVideoProvider==`function`)}function we(e,t){return e.find(e=>e.type===t)}const Te=`ToolSearch`,Ee=`yes`,De=`no`,Oe=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function ke(e,t,n){return{id:e,title:t,description:n?.description,options:Oe,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function Ae(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 je(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 Me(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 Ne(e){return e.type===`answer`&&e.values.includes(`yes`)}function Pe(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function Fe(e,t){if(Pe(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function Ie(e,t){if(Pe(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function Le(e,t){return Pe(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}var Re=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}},ze=class{initialized=!1;disposed=!1;constructor(e={}){this.initialized=e.readyOnConstruction===!0}async initialize(){this.initialized||(await this.doInitialize(),this.initialized=!0,this.disposed=!1)}async dispose(){await this.doDispose(),this.initialized=!1,this.disposed=!0}isInitialized(){return this.initialized}ensureInitialized(){if(this.disposed)throw Error(`${this.constructor.name} was disposed — re-initialize it before use, or build a new one`);if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function Be(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 Ve(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 He(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 await e.executeChat({messages:n,options:r,provider:t,model:r.model,...r.tools&&{tools:r.tools}})}async function*Ue(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}}),a=!1;for await(let e of i){if(e.kind===`terminal`){if(a)throw Error(`Executor "${t}" emitted more than one stream terminal result.`);a=!0}yield e}if(!a)throw Error(`Executor "${t}" ended a stream without a terminal result.`)}async function*We(e,t,n,r,i){e.debug?.(`🔍 [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request`,{provider:n,model:i?.model,hasTools:!!i?.tools,toolsCount:i?.tools?.length||0,toolNames:i?.tools?.map(e=>e.name)||[]}),yield*Ue(t,n,r,i)}function O(e){return e.category===`chat`}function Ge(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 Ke(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function qe(e){return e.filter(O).map(Ge)}function Je(e){return e.role===`user`}function Ye(e){return e.role===`assistant`}function Xe(e){return e.role===`system`}function Ze(e){return e.role===`tool`}function Qe(e,t,n,r){let i=e.effort!==void 0||e.effortResolution!==void 0,a=e.onModelEffortOutcome,o=i?e=>{if(r(e),a!==void 0)try{a(e)}catch(e){n.warn(`Model-effort outcome observer failed`,{error:e instanceof Error?e.message:String(e)})}}:a,s={...e.model!==void 0&&{model:e.model},...e.effort!==void 0&&{effort:e.effort},...e.effortResolution!==void 0&&{effortResolution:e.effortResolution},...o!==void 0&&{onModelEffortOutcome:o},...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.tools!==void 0&&{tools:e.tools}};return s.effort===void 0||s.effortResolution!==void 0||s.model===void 0?s:{...s,effortResolution:pe(t?.(),s.model,s.effort)}}function $e(e,t,n){if(t)return;let r=e.effortResolution,i=e.onModelEffortOutcome;if(r===void 0||i===void 0)return;let a=ue(r,{nativeControl:{state:`omitted`,reason:`model-effort-not-applied`},providerDispatch:{state:`sent`}});try{i(a)}catch(e){n.warn(`Model-effort outcome observer failed`,{error:e instanceof Error?e.message:String(e)})}return a}function et(e,t,n){if(t.effort!==void 0&&n===void 0)throw Error(`Provider "${e}" did not emit a model-effort terminal outcome for a selected generic request.`)}async function tt(e,t,n){let r,i=Qe(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=$e(i,e.effortTable!==void 0,t),et(e.name,i,r),{content:a.content??null,toolCalls:Ye(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*nt(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=Qe(n,e.effortTable?.bind(e),t,e=>{r=e});for await(let t of e.chatStream(n.messages,i))yield{content:t.content??null,toolCalls:Ye(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=$e(i,e.effortTable!==void 0,t),et(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const rt={type:`null`};function it(e){return e.type===`null`||Array.isArray(e.anyOf)&&e.anyOf.some(e=>typeof e==`object`&&!!e&&e.type===`null`)}function at(e){if(typeof e!=`object`||!e||Array.isArray(e))return e;let t=e;return it(t)?t:Array.isArray(t.anyOf)?{...t,anyOf:[...t.anyOf,rt]}:{anyOf:[t,rt]}}function ot(e,t={}){return st(e,t,``)}function st(e,t,n){if(Array.isArray(e))return e.map((e,r)=>st(e,t,`${n}/${r}`));if(typeof e!=`object`||!e)return e;let r=e,i={...r},a=r.type===`object`,o=r.properties&&typeof r.properties==`object`?r.properties:void 0;if(o){let e=new Set(Array.isArray(r.required)?r.required.map(String):[]);i.properties=Object.fromEntries(Object.entries(o).map(([r,i])=>{let a=`${n}/properties/${r}`,o=st(i,t,a),s=e.has(r);if(t.requireAllProperties===!0&&!s&&t.onChange?.({path:a,kind:`required-added`}),!(t.requireAllProperties===!0&&t.optionalAsNullable===!0&&!s))return[r,o];let c=typeof o==`object`&&o&&!Array.isArray(o)?it(o):!1,l=at(o);return c||t.onChange?.({path:a,kind:`nullable-added`}),[r,l]})),t.requireAllProperties===!0&&(i.required=Object.keys(o))}return r.items&&typeof r.items==`object`&&(i.items=st(r.items,t,`${n}/items`)),Array.isArray(r.anyOf)&&(i.anyOf=r.anyOf.map((e,r)=>st(e,t,`${n}/anyOf/${r}`))),r.additionalProperties&&typeof r.additionalProperties==`object`?i.additionalProperties=st(r.additionalProperties,t,`${n}/additionalProperties`):a&&(r.additionalProperties!==!1&&t.onChange?.({path:n,kind:`closed-object`}),i.additionalProperties=!1),i}const ct=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),lt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);function k(e,t){return e>>>t|e<<32-t}function ut(e){let t=new TextEncoder().encode(e),n=Math.ceil((t.length+9)/64)*64,r=new Uint8Array(n);r.set(t),r[t.length]=128;let i=new DataView(r.buffer),a=BigInt(t.length)*8n;i.setUint32(n-8,Number(a>>32n&4294967295n)),i.setUint32(n-4,Number(a&4294967295n));let o=new Uint32Array(lt),s=new Uint32Array(64);for(let e=0;e<n;e+=64){for(let t=0;t<16;t+=1)s[t]=i.getUint32(e+t*4);for(let e=16;e<64;e+=1){let t=s[e-15]??0,n=s[e-2]??0,r=k(t,7)^k(t,18)^t>>>3,i=k(n,17)^k(n,19)^n>>>10;s[e]=(s[e-16]??0)+r+(s[e-7]??0)+i>>>0}let t=o[0]??0,n=o[1]??0,r=o[2]??0,a=o[3]??0,c=o[4]??0,l=o[5]??0,u=o[6]??0,d=o[7]??0;for(let e=0;e<64;e+=1){let i=k(c,6)^k(c,11)^k(c,25),o=c&l^~c&u,f=d+i+o+(ct[e]??0)+(s[e]??0)>>>0,p=(k(t,2)^k(t,13)^k(t,22))+(t&n^t&r^n&r)>>>0;d=u,u=l,l=c,c=a+f>>>0,a=r,r=n,n=t,t=f+p>>>0}o[0]=(o[0]??0)+t>>>0,o[1]=(o[1]??0)+n>>>0,o[2]=(o[2]??0)+r>>>0,o[3]=(o[3]??0)+a>>>0,o[4]=(o[4]??0)+c>>>0,o[5]=(o[5]??0)+l>>>0,o[6]=(o[6]??0)+u>>>0,o[7]=(o[7]??0)+d>>>0}return[...o].map(e=>e.toString(16).padStart(8,`0`)).join(``)}const dt=32,ft=2e3,pt=Object.keys({type:!0,description:!0,enum:!0,items:!0,properties:!0,required:!0,anyOf:!0,additionalProperties:!0,minimum:!0,maximum:!0,pattern:!0,format:!0,default:!0}),mt=new Set(pt),ht=new Set([`__proto__`,`constructor`,`prototype`]),gt=new Set([`title`,`$schema`,`$comment`,`examples`,`default`]);function _t(){return{anyOf:[{type:`string`},{type:`number`},{type:`boolean`},{type:`object`},{type:`array`},{type:`null`}]}}const vt={closedObjects:!1,requireAllProperties:!1,optionalAsNullable:!1,unknownKeywords:`adopt`,unsupportedMembers:[],maxDepth:32,maxNodes:ft},yt={closedObjects:!0,requireAllProperties:!0,optionalAsNullable:!0,unknownKeywords:`strip`,unsupportedMembers:[],maxDepth:32,maxNodes:ft};function A(e,t){return`${e}/${t}`}function j(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function bt(e,t,n,r,i,a){if(!j(e))return;if(r.has(e))return{path:t,keyword:`cycle`,reason:`object graph revisits a node on its own ancestor chain (cycle)`};if(r.add(e),n>a.maxDepth)return{path:t,keyword:`maxDepth`,reason:`nesting depth exceeds maxDepth (${a.maxDepth})`};if(i.count+=1,i.count>a.maxNodes)return{path:t,keyword:`maxNodes`,reason:`node count exceeds maxNodes (${a.maxNodes})`};if(a.unknownKeywords===`reject`){for(let n of Object.keys(e))if(!mt.has(n))return{path:t,keyword:n,reason:`unknown keyword '${n}' is outside the IParameterSchema member set`}}let o=typeof e.type==`string`,s=Array.isArray(e.anyOf);if(o&&s)return{path:t,keyword:`anyOf`,reason:`a node must declare exactly one of 'type' or 'anyOf', not both`};if(!o&&!s&&!Object.keys(e).some(e=>!mt.has(e)))return{path:t,keyword:`type`,reason:`a node must declare exactly one of 'type' or 'anyOf'`};let c=e.properties;if(j(c)){for(let e of Object.keys(c))if(ht.has(e))return{path:A(A(t,`properties`),e),keyword:e,reason:`property name '${e}' is a prototype key`};for(let e of Object.keys(c)){let o=bt(c[e],A(A(t,`properties`),e),n+1,r,i,a);if(o)return o}}if(j(e.items)){let o=bt(e.items,A(t,`items`),n+1,r,i,a);if(o)return o}if(Array.isArray(e.anyOf))for(let o=0;o<e.anyOf.length;o+=1){let s=bt(e.anyOf[o],A(A(t,`anyOf`),String(o)),n+1,r,i,a);if(s)return s}r.delete(e)}function xt(e,t,n,r){let i={...e};for(let e of n.unsupportedMembers){let n=e;n in i&&(delete i[n],r.push({path:t,kind:`member-stripped`,keyword:n}))}if(n.unknownKeywords===`strip`){let e=Object.keys(i).filter(e=>!mt.has(e));for(let t of e)delete i[t];let n=typeof i.type==`string`,a=Array.isArray(i.anyOf);if(e.length>0&&!n&&!a){for(let n of e)r.push({path:t,kind:`keyword-replaced`,keyword:n});let n=_t();for(let e of Object.keys(i))e===`description`?n.description=i.description:r.push({path:t,kind:`member-stripped`,keyword:e});return n}for(let n of e)r.push({path:t,kind:`keyword-stripped`,keyword:n})}let a=i.properties;return j(a)&&(i.properties=Object.fromEntries(Object.keys(a).map(e=>{let i=a[e];return[e,j(i)?xt(i,A(A(t,`properties`),e),n,r):i]}))),j(i.items)&&(i.items=xt(i.items,A(t,`items`),n,r)),Array.isArray(i.anyOf)&&(i.anyOf=i.anyOf.map((e,i)=>j(e)?xt(e,A(A(t,`anyOf`),String(i)),n,r):e)),i}function St(e){if(Array.isArray(e))return e.map(St);if(j(e)){let t={};for(let n of Object.keys(e).sort())t[n]=St(e[n]);return t}return e}function Ct(e){return ut(JSON.stringify(St(e)))}function wt(e,t){let n=e.parameters;if(!j(n)||n.type!==`object`)return{outcome:`rejected`,tool:e,changes:[],rejection:{path:``,keyword:`type`,reason:`the parameters root must declare type: 'object' — no documented provider accepts another root`}};let r=bt(n,``,0,new Set,{count:0},t);if(r)return{outcome:`rejected`,tool:e,changes:[],rejection:r};let i=[],a=xt(n,``,t,i),o=t.closedObjects?ot(a,{requireAllProperties:t.requireAllProperties,optionalAsNullable:t.optionalAsNullable,onChange:e=>i.push(e)}):a;if(i.length===0)return{outcome:`adopted`,tool:e,changes:[]};let s=i.filter(e=>(e.kind===`keyword-stripped`||e.kind===`keyword-replaced`||e.kind===`member-stripped`)&&!gt.has(e.keyword??``)),c=s.length===0?e.description:`${e.description}\n\nSchema note: ${s.length} constraint(s) not shown to ${t.providerName}: ${s.map(e=>`${e.kind}@${e.path}`).join(`, `)}`;return{outcome:`adapted`,tool:{...e,parameters:o,description:c},changes:i}}const Tt={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var Et=class e{static instance;globalLevel;globalSink;constructor(){this.globalLevel=`warn`}static getInstance(){return e.instance||=new e,e.instance}getGlobalLevel(){return this.globalLevel}setGlobalLevel(e){this.globalLevel=e}getGlobalSink(){return this.globalSink}setGlobalSink(e){this.globalSink=e}},Dt=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??Et.getInstance().getGlobalSink()??Tt}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),Ot(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),Ot(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),Ot(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),Ot(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||Et.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 Ot(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function M(e,t={}){return new Dt(e,t)}function kt(e){Et.getInstance().setGlobalLevel(e)}function At(){return Et.getInstance().getGlobalLevel()}function jt(e){Et.getInstance().setGlobalSink(e)}function Mt(){return Et.getInstance().getGlobalSink()}const N=M(`agents`),Nt=M(`ToolSchemaProjection`);var Pt=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=Tt){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 Ft(n,t);if(e.done||(await It(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return tt(this,this.logger,e)}async*generateStreamingResponse(e){yield*nt(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return D(this.supportsTools())}validateConfig(){return!0}validateMessages(e){Be(e)}validateTools(e){Ve(e)}projectionProfile(){}projectTools(e,t){let n=this.projectionProfile();if(!n||!e)return e;let r=[];for(let i of e){let e=wt(i,n);if(e.outcome!==`rejected`){r.push(e.tool);continue}let a=`${this.name}${t}${i.name}${Ct(i.parameters)}`;if(this.quarantinedToolSchemas.has(a))continue;this.quarantinedToolSchemas.set(a,!0);let{path:o,keyword:s,reason:c}=e.rejection??{path:``,keyword:``,reason:`rejected`};Nt.warn(`tool_schema_quarantined provider=${this.name} model=${t} tool=${i.name} path=${o} keyword=${s} reason=${c}`)}return r}validateNativeWebTools(e){ae(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return He(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*We(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Ft(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 It(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let Lt=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}({}),Rt=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`},zt=`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`,L={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},Bt=`tool`,Vt=`unknown_tool`,Ht=`argument_decode_error`,R=(e,t)=>`${e}.${t}`,Ut={START:R(I,F.START),COMPLETE:R(I,F.COMPLETE),ERROR:R(I,F.ERROR)},Wt={CALL_START:R(Bt,L.CALL_START),CALL_COMPLETE:R(Bt,L.CALL_COMPLETE),CALL_ERROR:R(Bt,L.CALL_ERROR)},Gt={EXECUTION_START:R(zt,P.EXECUTION_START),EXECUTION_COMPLETE:R(zt,P.EXECUTION_COMPLETE),EXECUTION_ERROR:R(zt,P.EXECUTION_ERROR),CREATED:R(zt,P.CREATED)},z={EXECUTION_START:Ut.START,EXECUTION_COMPLETE:Ut.COMPLETE,EXECUTION_ERROR:Ut.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:Wt.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:Gt.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Gt.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Gt.EXECUTION_ERROR,AGENT_CREATED:Gt.CREATED,AGENT_DESTROYED:`agent.destroyed`,PLUGIN_LOADED:`plugin.loaded`,PLUGIN_UNLOADED:`plugin.unloaded`,PLUGIN_ERROR:`plugin.error`,ERROR_OCCURRED:`error.occurred`,WARNING_OCCURRED:`warning.occurred`,MODULE_INITIALIZE_START:`module.initialize.start`,MODULE_INITIALIZE_COMPLETE:`module.initialize.complete`,MODULE_INITIALIZE_ERROR:`module.initialize.error`,MODULE_EXECUTION_START:`module.execution.start`,MODULE_EXECUTION_COMPLETE:`module.execution.complete`,MODULE_EXECUTION_ERROR:`module.execution.error`,MODULE_DISPOSE_START:`module.dispose.start`,MODULE_DISPOSE_COMPLETE:`module.dispose.complete`,MODULE_DISPOSE_ERROR:`module.dispose.error`,MODULE_REGISTERED:`module.registered`,MODULE_UNREGISTERED:`module.unregistered`,EXECUTION_HIERARCHY:`execution.hierarchy`,EXECUTION_REALTIME:`execution.realtime`,TOOL_REALTIME:`tool.realtime`,CUSTOM:`custom`};var Kt=class{enabled=!0;category=`custom`;priority=Rt.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}},qt=class{logger;constructor(e=Tt){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`)}},Jt=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??Tt}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}};function Yt(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function Xt(e,t){if(t?.aborted===!0)return!0;if(!Yt(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return Yt(n)&&n.name===`AbortError`}var Zt=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`)}},B=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 Qt=B.validateAgentConfig,$t=B.validateUserInput,en=B.validateProviderName,tn=B.validateModelName,nn=B.validateApiKey;var rn=class{static isRecoverable(e){return e instanceof r&&e.recoverable}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 d(e.message||t):new d(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new s(`Failed to ${n}`,t,r,{operation:n})}};const an=new Set([`rate_limit_error`]),on=new Set([`overloaded_error`]),sn=new Set([`authentication_error`,`permission_error`]),cn=new Set([`model_not_found`]),ln=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),un=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]);function V(e){return typeof e==`object`&&e?e:void 0}function H(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function dn(e){let t=V(e);if(t===void 0)return{};let n=typeof t.status==`number`?t.status:void 0,i=V(t.error),a=V(i?.error),o=H(i,`type`),s=H(t,`type`)??H(a,`type`)??(o===`error`?void 0:o)??(n!==void 0&&!(e instanceof r)?H(t,`code`):void 0);return{...n!==void 0&&{status:n},...s!==void 0&&{type:s}}}function fn(e){let t=V(e)?.constructor;if(typeof t!=`function`)return;let n=t.name;return typeof n==`string`&&n.length>0?n:void 0}function pn(e){return Xt(e)||fn(e)===`APIUserAbortError`}function mn(e,t,n){if(e instanceof r||pn(e))return e;let i=e instanceof Error?e:Error(typeof e==`string`?e:``),a=dn(e);return a.status===429||a.type!==void 0&&an.has(a.type)?new w(i.message||`${t} rate limit exceeded.`,void 0,t):new s(`${n}: ${i.message||`request failed`}`,t,i,void 0,a)}function hn(e){if(e instanceof S)return!0;let t=V(e);if(t===void 0)return!1;let n=H(t,`code`);if(n!==void 0&&ln.has(n))return!0;let r=fn(e);if(r!==void 0&&un.has(r))return!0;let i=H(t,`name`);return i!==void 0&&un.has(i)?!0:i===`TypeError`&&H(t,`message`)===`fetch failed`}function gn(e){let t=[],n=new Set,r=[e];for(let e=0;e<=8&&r.length>0;e++){let e=[];for(let i of r){if(i==null||n.has(i))continue;n.add(i),t.push(i);let r=V(i);r!==void 0&&e.push(r.originalError,r.cause)}r=e}return t}const U=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function _n(e){return e instanceof s?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:dn(e)}function vn(e){if(e instanceof r)return!1;let t=H(V(e),`code`);return t!==void 0&&cn.has(t)}function yn(e){if(e instanceof w)return U(!1,`rate-limit`);if(e instanceof v)return U(!1,`authentication`);if(e instanceof a)return U(!0,`model-unavailable`);let{status:t,type:n}=_n(e);return t===429||n!==void 0&&an.has(n)?U(!1,`rate-limit`):t===401||t===403||n!==void 0&&sn.has(n)?U(!1,`authentication`):t===402?U(!1,`billing`):(t===void 0||t===400||t===404)&&(vn(e)||n!==void 0&&cn.has(n))?U(!0,`model-unavailable`):hn(e)?U(!1,`network`):t===529||n!==void 0&&on.has(n)?U(!0,`overloaded`):t===503?U(!0,`service-unavailable`):t===500||t===502||t===504?U(!0,`server-error`):t===404?{kind:`tentative`,classification:{switchable:!0,reason:`model-unavailable`}}:t===400||t===413?{kind:`tentative`,classification:{switchable:!1,reason:`invalid-request`}}:{kind:`none`}}function bn(e,t){let n=gn(e);if(t?.aborted===!0||n.some(e=>pn(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=yn(e);if(t.kind!==`none`){if(r===void 0&&t.kind===`definitive`)return t.classification;if(r===void 0){r=t.classification;continue}if(t.kind===`definitive`)return t.classification.reason===`model-unavailable`?t.classification:r}}return r??{switchable:!1,reason:`unknown`}}function xn(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 Sn(e){e&&clearInterval(e)}function Cn(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:return}}function wn(e){let t=Tn(e);return t.typeName===`ZodObject`?t:void 0}function Tn(e){let t=e;for(let e=0;e<=64;e+=1){let e=t.typeName===`ZodEffects`?t.schema:t.typeName===`ZodOptional`||t.typeName===`ZodNullable`||t.typeName===`ZodDefault`?t.innerType:void 0;if(!e)return t;t=En(e,`${String(t.typeName)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function En(e,t){let n=e._def;if(!n)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function Dn(e){if(typeof e==`string`)return`string`;if(typeof e==`number`)return`number`;if(typeof e==`boolean`)return`boolean`;if(e===null)return`null`}function On(e){let t=e._def;if(!t)throw Error(`Zod schema is missing _def; cannot determine required fields.`);let n=t;for(let e=0;n.typeName===`ZodEffects`&&e<=64&&n.schema;e+=1)n=En(n.schema,`ZodEffects inner type`);return n.typeName!==`ZodOptional`&&n.typeName!==`ZodNullable`&&n.typeName!==`ZodDefault`}function kn(e){let t=En(e,`Zod schema`);if(!t.values||!Array.isArray(t.values))throw Error(`ZodEnum schema is missing enum values; cannot extract enum values.`);return t.values}function An(e){let t=En(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function jn(e){let t=En(e,`Zod schema`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function Mn(e,t={}){let n=En(e,`Zod schema`),r=wn(n);if(!r)throw Error(`Zod schema root must be an object; got ${String(n.typeName)}. Wrap the fields in z.object({ … }) before converting.`);return Nn(r,t.allowAdditionalProperties)}function Nn(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=Pn(a,t),On(a)&&r.push(e);let a=Cn(e,t);return{type:`object`,properties:n,required:r,...a!==void 0&&{additionalProperties:a}}}function Pn(e,t){let n=En(e,`Zod type`),r={};switch(n.description&&(r.description=n.description),n.typeName){case`ZodString`:return{type:`string`,...r};case`ZodNumber`:return{type:`number`,...r};case`ZodBoolean`:return{type:`boolean`,...r};case`ZodArray`:if(!n.type)throw Error(`ZodArray is missing item type; cannot convert to JSON schema.`);return{type:`array`,items:Pn(n.type,t),...r};case`ZodObject`:return{...Nn(n,t),...r};case`ZodEnum`:{let e=n.values;if(!e||!Array.isArray(e))throw Error(`ZodEnum is missing enum values; cannot convert to JSON schema.`);return{type:`string`,enum:e,...r}}case`ZodNativeEnum`:return{...In(n.values),...r};case`ZodDate`:return{type:`string`,format:`date-time`,...r};case`ZodLiteral`:return{...Fn(n.value),...r};case`ZodUnion`:case`ZodDiscriminatedUnion`:{let e=n.options;if(!e||!Array.isArray(e)||e.length===0)throw Error(`${String(n.typeName)} is missing options; cannot convert to JSON schema.`);return{anyOf:e.map(e=>Pn(e,t)),...r}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...Pn(n.schema,t),...r};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[Pn(n.innerType,t),{type:`null`}],...r};case`ZodOptional`:case`ZodDefault`:if(!n.innerType)throw Error(`${String(n.typeName)} is missing innerType; cannot convert to JSON schema.`);return{...Pn(n.innerType,t),...r};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:Pn(n.valueType,t),...r}:{type:`object`,additionalProperties:{type:`string`},...r};default:throw Error(Rn(String(n.typeName)))}}function Fn(e){let t=Dn(e);if(!t)throw Error(`ZodLiteral value ${String(e)} is not a JSON primitive; cannot convert to JSON schema.`);return t===`null`?{type:`null`}:{type:t,enum:[e]}}function In(e){if(!e||typeof e!=`object`)throw Error(`ZodNativeEnum is missing enum values; cannot convert to JSON schema.`);let t=Array.isArray(e)?e:Object.values(e),n=t.filter(e=>typeof e==`number`),r=n.length>0?n:t;if(r.length===0)throw Error(`ZodNativeEnum declares no members; cannot convert to JSON schema.`);return{type:n.length>0?`number`:`string`,enum:r}}const Ln={ZodTuple:"a tuple needs positional `items`, and the subset models `items` as ONE schema — use `z.object({...})` for a fixed-shape record, or `z.array(z.union([...]))` if order genuinely does not matter",ZodIntersection:"an intersection needs `allOf` — merge the two object schemas yourself with `.merge()`, which produces a single object node the subset can carry",ZodLazy:"a recursive schema needs `$ref` — flatten the recursion to a fixed depth, or model the nested level as `z.record(...)`",ZodDate:"use `z.string()` (optionally with `.datetime()`), which is what a provider receives"};function Rn(e){return`${e} cannot be carried by the universal JSON-schema subset: ${Ln[e]??`it has no representation in the subset`}. The subset is the one language every provider mapper forwards intact; a construct outside it would be advertised to the model and enforced by nothing.`}function zn(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function Bn(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 Vn(e){if(zn(e))return{name:`structured_output`,jsonSchema:Mn(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:Bn(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=W(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function W(e,t,n){let r=[],i=e.type;if(e.anyOf)return Un(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${Wn(t)}`];let i=t,a=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(...W(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(Hn(e))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(...W(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${Wn(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...W(i,e,`${n}[${t}]`))}),r}case`string`:return typeof t==`string`?(e.enum&&!e.enum.some(e=>e===t)&&r.push(`${n}: value ${JSON.stringify(t)} is not one of the allowed enum values`),e.pattern&&!new RegExp(e.pattern).test(t)&&r.push(`${n}: value does not match pattern ${e.pattern}`),r):[`${n}: expected string, got ${Wn(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${Wn(t)}`]:(i===`integer`&&!Number.isInteger(t)&&r.push(`${n}: expected integer, got non-integer number`),e.minimum!==void 0&&t<e.minimum&&r.push(`${n}: value ${t} is below minimum ${e.minimum}`),e.maximum!==void 0&&t>e.maximum&&r.push(`${n}: value ${t} is above maximum ${e.maximum}`),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 ${Wn(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${Wn(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function Hn(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function Un(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>W(e,t,`${n}|anyOf[${r}]`));return r.some(e=>e.length===0)?[]:[`${n}: value matches none of the ${e.length} allowed shapes`,...r.flat()]}function Wn(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function Gn(e){let t=e.trim(),n=/^```(?:json)?[^\S\n]*\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 Kn(e,t){return ye(e,t,`json_schema`)===!0?`response_schema`:ye(e,t,`json_object`)===!0?`json_object`:`none`}function qn(e){let{table:t,model:n,endpointIsVendorDefault:r}=e;if(!t)return r===!1?{mechanism:`response_schema`,provenance:`unverified-endpoint`,reason:`a custom baseURL is configured and the provider declares no capability table, so nothing here can claim the endpoint enforces the schema`}:{mechanism:`response_schema`,provenance:`undeclared`,reason:`the provider declares no capability table, so the request is sent as asked — silence is not a denial`};let i=Kn(t,n),a=t.deviations?.[n]!==void 0;return r===!1?{mechanism:i,provenance:`unverified-endpoint`,reason:`a custom baseURL is configured, so the vendor capability table describes the protocol but not necessarily the endpoint serving it`}:{mechanism:i,provenance:a?`catalog`:`vendor-default`,...i===`none`&&{reason:`${n} declares no schema transport, so the schema travels in the prompt and is enforced by validation`},...i===`json_object`&&{reason:`${n} guarantees JSON but not its shape, so the schema travels in the prompt and is enforced by validation`}}}const G=e=>process.env[e];function Jn(e){return t=>e[t]}function Yn(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function Xn(e,t={},n=G){let r=e.credentialRequirement,i=t.baseUrl??Yn(r?.baseUrlEnvVars,n)??e.defaults?.baseUrl;if(r===void 0)return{ok:!0,config:{...i===void 0?{}:{baseUrl:i},...t.imageCapableModels===void 0?{}:{imageCapableModels:t.imageCapableModels}}};let a=Yn(r.credentialEnvVars,n),o=[];return a===void 0&&o.push(...r.credentialEnvVars),r.requiresBaseUrl===!0&&i===void 0&&o.push(...r.baseUrlEnvVars??[]),o.length>0?{ok:!1,missing:o}:{ok:!0,config:{...a===void 0?{}:{credential:a},...i===void 0?{}:{baseUrl:i},...t.imageCapableModels===void 0?{}:{imageCapableModels:t.imageCapableModels}}}}function Zn(e,t={},n=G){if(e.createImageProvider===void 0)return;let r=Xn(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return xe(t)?t:void 0}catch{return}}function Qn(e,t={},n=G){if(e.createVideoProvider===void 0)return;let r=Xn(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return Se(t)?t:void 0}catch{return}}const $n=`$ENV:`;function er(e){return e.startsWith($n)}function tr(e){return`${$n}${e}`}function nr(e,t=G){if(!er(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function rr(e,t=G){return e===void 0||e.length===0?!1:nr(e,t)!==void 0}function ir(e,t,n=G){let r=he(t,e.name)?.defaults??{},i=e.model??r.model;if(!i)throw Error(`Provider ${e.name} requires model`);let a=e.apiKey??r.apiKey,o=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:nr(a,n),baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...o!==void 0&&{options:o}}}function ar(e,t){let n=he(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${ge(t)}`);let r=_e(n);if(r!==void 0&&!or(e,r))throw Error(`Provider ${e.name} requires ${cr(r)}`);return n.createProvider(e)}function or(e,t){return t.anyOf.some(t=>sr(e,t))}function sr(e,t){let n=e[t];return n!==void 0&&n.length>0}function cr(e){return e.anyOf.map(e=>e===`apiKey`?`apiKey (API key)`:e).join(` or `)}function K(){let e=globalThis.crypto;if(typeof e?.randomUUID==`function`)return e.randomUUID();if(typeof e?.getRandomValues==`function`){let t=e.getRandomValues(new Uint8Array(16));t[6]=(t[6]??0)&15|64,t[8]=(t[8]??0)&63|128;let n=Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``);return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}throw Error(`No cryptographic randomness is available on this platform (globalThis.crypto is missing both randomUUID and getRandomValues), so a unique identifier cannot be generated. This is not something to substitute Math.random for.`)}function lr(e,t){let n={id:K(),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 ur(e,t){let n={id:K(),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 dr(e,t){let n={id:K(),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 fr(e,t){let n={id:K(),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 pr=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(Ke(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(lr(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(ur(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(dr(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>O(e)&&Xe(Ge(e)),i=this.entries.filter(e=>!r(e)),a=Ke(dr(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(fr(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(O).map(Ge)}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(Ge),n=t.filter(Xe),r=t.filter(e=>!Xe(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))}},mr=class{history;pendingAssistant=null;constructor(e=0){this.history=new pr({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:K(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:K(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:K(),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 Ye(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
3
2
 
4
- `),n.beginAssistant();let{wrappedOnTextDelta:_,wrappedOnProviderNativeRawPayload:ee}=nn(a,n,i,p),v=await rn(m,o,s,f,a,n,p,i,u,_,ee);if(v===null)return!0;let{assistantResponse:y,assistantToolCalls:b}=tn(v,i,a.conversationId,p,u);await q(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=un(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 w=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(w,{round:p,...S??{}});let T=n.getMessages().at(-1);if(a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:y}),T&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:T}),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 E=await cn(b,n,r,i,p,h,g,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs);if(E.contextOverflowed&&u.warn(`[ROUND] Tool results partially skipped due to context overflow — continuing to let AI respond`,{added:E.addedCount,skipped:E.skippedCount,round:p}),E.unknownToolFailureCount>0?e.consecutiveUnknownToolFailureRounds+=1:e.consecutiveUnknownToolFailureRounds=0,e.consecutiveUnknownToolFailureRounds>=2){let t=[...new Set(E.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 fn(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 pn(e,t){return t===0||e<t}async function mn(e,t,n,r,i,a,o,s,c){let l=fn(i,r);for(;pn(o.currentRound,l)&&!(s?.aborted||(o.currentRound++,await dn(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 hn(e,a,i,n,o,t,r,c.logger,l))}async function hn(t,n,r,i,a,o,s,c,l=10){c.warn(`No final text response — forcing summary call`,{maxRounds:l===0?`unlimited`:l,currentRound:a.currentRound,conversationId:o});try{let i=a.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.`;t.addUserMessage(i);let o=t.getMessages(),c=r.systemMessage??``,l=o.some(e=>e.role===`system`&&e.content===c),u=c&&!l?[{id:e(),role:`system`,content:c,state:`complete`,timestamp:new Date},...o]:o,d={model:n.aiProviderInfo.model};s.onTextDelta&&(d.onTextDelta=s.onTextDelta);let f=await n.provider.chat(u,d),p=t.getMessages();if(p.findIndex(e=>e.role===`user`&&e.content===i)!==-1){let e=p.filter(e=>!(e.role===`user`&&e.content===i));t.clear();for(let n of e)t.addMessage(n)}let m=typeof f.content==`string`?f.content:``;m?t.addAssistantMessage(m,[],f.metadata):t.addAssistantMessage(`Maximum rounds reached. Partial results available in conversation history.`)}catch(e){c.warn(`Forced summary call failed`,{error:e instanceof Error?e.message:String(e)})}}async function gn(e,t,n,r,i,a,o,s,c,l,u){let d={...Wt(t,n,r,i.toolsExecuted),interrupted:o};return await q(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*_n(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=>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 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(I.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*vn(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 q(l,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},u);let i=a.getCurrentProvider();if(!i)throw new B(`No AI provider configured`);let p=a.getProvider(i.provider);if(!p)throw new B(`AI provider '${i.provider}' not found`);if(typeof p.chatStream!=`function`)throw new B(`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=Rt(n.responseFormat);return e?{responseFormat:e}:{}})()};Bt(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 B(`Provider does not support streaming`);let w=C.call(p,h,x),T=``,E=!1,D=[],O=-1,te;for await(let e of w){let t=un(e);if(t&&(te=t),typeof e.content==`string`&&(E=!0),e.content&&(T+=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`);O=D.length,D.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(O>=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 ${D[O].id}`);t&&(D[O].function.name+=e.function.name),n&&(D[O].function.arguments+=e.function.arguments);let r=n?e.function.arguments:e.function.name;u.debug(`[TOOL-STREAM] Adding fragment to tool ${D[O].id}: "${r}"`)}}}}if(u.debug(`[EXECUTION-SERVICE-STREAM] Stream completed, toolCalls detected:`,{count:D.length}),typeof T!=`string`)throw Error(`[EXECUTION] Streaming response content is required`);if(!E&&D.length===0)throw Error(`[EXECUTION] Provider response must have content or tool calls`);t.addAssistantMessage(T,D,{executionId:f,...te??{}}),D.length>0&&(yield*_n(D,t,m,f,c,d,u,r?.signal)),await q(l,`afterRun`,{input:e,response:T,...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 q(l,`onError`,{input:e,error:t instanceof Error?t:Error(String(t)),...r?.metadata?{metadata:r.metadata}:{}},u),t}finally{d.resetOwnerPathBases()}}var yn=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new ct(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 ht(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=Kt(),a=new Date,o=qt(r,`execute`),s=Jt(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=Vt(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=Ut(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 q(this.plugins,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},this.logger),Ht(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 mn(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),gn(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 Gt(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*vn(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:()=>Kt()})}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 J=(e,t)=>`${e}.${t}`,bn={START:J(L,I.START),COMPLETE:J(L,I.COMPLETE),ERROR:J(L,I.ERROR)},xn={CALL_START:J(G,W.CALL_START),CALL_COMPLETE:J(G,W.CALL_COMPLETE),CALL_ERROR:J(G,W.CALL_ERROR)},Sn={EXECUTION_START:J(F,P.EXECUTION_START),EXECUTION_COMPLETE:J(F,P.EXECUTION_COMPLETE),EXECUTION_ERROR:J(F,P.EXECUTION_ERROR),CREATED:J(F,P.CREATED)},Y={EXECUTION_START:bn.START,EXECUTION_COMPLETE:bn.COMPLETE,EXECUTION_ERROR:bn.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:xn.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:Sn.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Sn.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Sn.EXECUTION_ERROR,AGENT_CREATED:Sn.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 Cn=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(Y.MODULE_INITIALIZE_START,Y.MODULE_INITIALIZE_COMPLETE,Y.MODULE_INITIALIZE_ERROR,Y.MODULE_EXECUTION_START,Y.MODULE_EXECUTION_COMPLETE,Y.MODULE_EXECUTION_ERROR,Y.MODULE_DISPOSE_START,Y.MODULE_DISPOSE_COMPLETE,Y.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}},wn=class{logger;constructor(e=j){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`)}},Tn=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??j}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}},En=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`)}},X=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 Dn=X.validateAgentConfig,On=X.validateUserInput,kn=X.validateProviderName,An=X.validateModelName,jn=X.validateApiKey;function Mn(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 Nn(e){e&&clearInterval(e)}function Pn(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 Fn(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:Pn(t)}}function In(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 Ln(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).`}:In(n):In(`powershell.exe`);if(n!==void 0&&n.length>0)return Fn(n,t);let r=e.SHELL?.trim();return Fn(r!==void 0&&r.length>0?r:`/bin/sh`,t)}function Rn(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]=Z(i),zn(i)&&r.push(t)}return{type:`object`,properties:n,required:r,...(t.allowAdditionalProperties||i.unknownKeys===`passthrough`)&&{additionalProperties:!0}}}function Z(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:Z(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{...Z(t.innerType),...n};throw Error(`ZodOptional is missing innerType; cannot convert to JSON schema.`);case`ZodNullable`:if(t.innerType)return{...Z(t.innerType),...n};throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);case`ZodDefault`:if(t.innerType)return{...Z(t.innerType),...n};throw Error(`ZodDefault is missing innerType; cannot convert to JSON schema.`);case`ZodRecord`:return t.valueType?{type:`object`,additionalProperties:Z(t.valueType),...n}:{type:`object`,additionalProperties:{type:`string`},...n};default:throw Error(`Unsupported Zod type: ${String(t.typeName)}`)}}function zn(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 Bn(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 Vn(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 Hn(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 Un(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function Wn(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 Gn(e){if(Un(e))return{name:`structured_output`,jsonSchema:Rn(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:Wn(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=Kn(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function Kn(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(...Kn(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(...Kn(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(...Kn(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 qn(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 Jn(t,n){let r={id:e(),role:`user`,content:t,state:`complete`,timestamp:new Date};return n?.name&&(r.name=n.name),n?.metadata&&(r.metadata=n.metadata),n?.parts&&(r.parts=n.parts),r}function Yn(t,n){let r={id:e(),role:`assistant`,content:t,state:n?.state??`complete`,timestamp:new Date};return n?.toolCalls&&(r.toolCalls=n.toolCalls),n?.metadata&&(r.metadata=n.metadata),n?.parts&&(r.parts=n.parts),r}function Xn(t,n){let r={id:e(),role:`system`,content:t,state:`complete`,timestamp:new Date};return n?.name&&(r.name=n.name),n?.metadata&&(r.metadata=n.metadata),n?.parts&&(r.parts=n.parts),r}function Zn(t,n){let r={id:e(),role:`tool`,content:t,toolCallId:n.toolCallId,state:`complete`,timestamp:new Date};return n.name&&(r.name=n.name),n.metadata&&(r.metadata=n.metadata),n.parts&&(r.parts=n.parts),r}var Qn=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(re(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(Jn(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(Yn(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(Xn(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>k(e)&&se(A(e)),i=this.entries.filter(e=>!r(e)),a=re(Xn(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(Zn(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(k).map(A)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(k).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(k);if(e.length<=this.maxMessages)return;let t=e.map(A),n=t.filter(se),r=t.filter(e=>!se(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=>!k(e)||o.has(e.id))}},$n=class{history;pendingAssistant=null;constructor(e=0){this.history=new Qn({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:e(),content:``,toolCalls:[]}}appendStreaming(t){this.pendingAssistant||={id:e(),content:``,toolCalls:[]},this.pendingAssistant.content+=t}appendToolCall(t){this.pendingAssistant||={id:e(),content:``,toolCalls:[]},this.pendingAssistant.toolCalls.some(e=>e.id===t.id)||this.pendingAssistant.toolCalls.push(t)}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 oe(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
3
+ [This response was interrupted by the user]`),Ye(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),Ze(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},hr=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 mr(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)}};function gr(){let e,t=0;return{observe(n){t+=1,t===1&&(e=n)},terminal(n){if(t>1)throw Error(`Provider "${n}" emitted ${t} model-effort outcomes`);return e}}}function _r(e,t,n){if(n!==void 0&&t?.onModelEffortOutcome!==void 0)try{t.onModelEffortOutcome(n)}catch(t){e.warn(`Model-effort outcome observer failed`,{error:t instanceof Error?t.message:String(t)})}}var vr=class extends qt{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.requireChatProvider(e);this.config.enableLogging&&this.logDebug(`Executing chat with provider: ${e.provider}, model: ${e.model}`);try{let n=gr(),r=await this.withRetry(async()=>(n=gr(),await this.withTimeout(t.chat(e.messages,{...e.options,model:e.model,tools:e.tools,onModelEffortOutcome:e=>{n.observe(e)}}),this.config.timeout)),this.config.maxRetries,this.config.retryDelay);if(r.role!==`assistant`)throw Error(`Expected assistant message, got ${r.role}`);let i=n.terminal(e.provider);return this.validateResponse(r),_r(this.logger,e.options,i),{message:r,...i!==void 0&&{modelEffortOutcome:i}}}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=gr(),r=t.chatStream(e.messages,{...e.options,model:e.model,tools:e.tools,onModelEffortOutcome:e=>{n.observe(e)}});for await(let e of r)this.validateResponse(e),yield{kind:`message`,message:e};let i=n.terminal(e.provider);_r(this.logger,e.options,i),yield{kind:`terminal`,...i!==void 0&&{modelEffortOutcome:i}}}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()}requireChatProvider(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`);return t}};const yr=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function br(e){return yr.test(e)?e:void 0}var xr=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Sr(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new T(`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 T(`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 T(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function Cr(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 wr(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 Tr(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Er(e,t,n,r){let{listenerCounts:i,totalListeners:a}=Tr(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 Dr(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new T(`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 Or(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 kr(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 Ar=class extends Kt{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 xr,Sr(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??Rt.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(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=kr(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 Dr(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 Or(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 wr(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>Cr(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 Er(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()}};const jr=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var Mr=class{tools=new Map;register(e){if(!e.schema?.name)throw new t(`Tool must have a valid schema with name`);let n=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(n)&&N.warn(`Tool "${n}" is already registered, overriding`,{toolName:n,existingTool:this.tools.get(n)?.constructor.name}),this.tools.set(n,e),N.debug(`Tool "${n}" registered successfully`,{toolName:n,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 t(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new t(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new t(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new t(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))Nr(t,n);if(e.parameters.required){let n=e.parameters.properties||{};for(let r of e.parameters.required)if(!n[r])throw new t(`Required parameter "${r}" is not defined in properties`)}}};function Nr(e,n){if(n?.anyOf){if(n.anyOf.length===0)throw new t(`Parameter "${e}" declares an empty anyOf`);n.anyOf.forEach((t,n)=>Nr(`${e}|anyOf[${n}]`,t));return}if(!n?.type)throw new t(`Parameter "${e}" must declare a type or anyOf`);if(!jr.includes(n.type))throw new t(`Parameter "${e}" has invalid type "${n.type}"`);if(n.properties)for(let[t,r]of Object.entries(n.properties))Nr(`${e}.${t}`,r);n.items&&Nr(`${e}[]`,n.items)}function Pr(e,t,r){let i=W(r,t,`$`);if(i.length>0)throw new n(`output does not match the declared outputSchema: ${i.join(`; `)}`,e,void 0,{outputSchemaIssues:i})}function Fr(e,t,n){let r=Ir(e,t,n);return r?[r]:W(n,t,`Parameter "${e}"`)}function Ir(e,t,n){if(n.anyOf)return;let r=n.type;switch(r){case`string`:return typeof t==`string`?void 0:`Parameter "${e}" must be a string, got ${Lr(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${Lr(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${Lr(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${Lr(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${Lr(t)}`;case`null`:return;case void 0:return`Parameter "${e}" declares neither a type nor anyOf`;default:return`Parameter "${e}" has unsupported schema type "${String(r)}"`}}function Lr(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function Rr(e,t,n,r){let i=[];for(let n of t)n in e||i.push(`Missing required parameter: ${n}`);for(let[t,a]of Object.entries(e)){let e=n[t];if(!e){if(r===!0)continue;if(r&&typeof r==`object`){i.push(...Fr(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...Fr(t,a,e))}return i}function zr(e,t,n,r){let i=Rr(e,t,n,r);return{isValid:i.length===0,errors:i}}var Br=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)}},Vr=class extends Br{emit(e,t,n){}};const Hr=new Vr;function Ur(e){return e===Hr||e instanceof Vr}function Wr(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 Gr(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var Kr=class extends Br{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??Gr()},i=Wr(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function q(e,t){return new Kr(e,t)}function qr(e,t){return q(e,t)}var Jr=class extends Br{emit(e,t,n){this.notifyListeners(e,t,n)}};const Yr={COMPLETED:`span_completed`},Xr={COMPLETED:`provider_call_completed`},Zr={SWITCHED:`provider_fallback`};function Qr(e){let{fromProvider:t,fromModel:n,toProvider:r,toModel:i,reason:a}=e;if(typeof t==`string`&&typeof n==`string`&&typeof r==`string`&&typeof i==`string`&&typeof a==`string`)return{from:{provider:t,model:n},to:{provider:r,model:i},reason:a}}const $r={COMPLETED:`tool_body_completed`},ei={DECIDED:`tool_permission_decided`},ti=`span`;var ni=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,r){let i=this.schema.name;if(!this.validate(e))throw new t(`Invalid parameters for tool "${i}": ${Rr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let a=Date.now(),o;try{o=await this.fn(e,r)}catch(a){throw a instanceof n||a instanceof t?a:new n(`Function tool execution failed: ${a instanceof Error?a.message:String(a)}`,i,a instanceof Error?a:Error(String(a)),{parameterCount:Object.keys(e||{}).length,hasContext:!!r})}let s=Date.now()-a;if(this.schema.outputSchema&&Pr(i,o,this.schema.outputSchema),this.eventService){let e={timestamp:new Date,spanId:Gr(),durationMs:s,op:i};this.eventService.emit(Yr.COMPLETED,e)}return{success:!0,data:o,metadata:{executionTime:s,toolName:i,parameters:e}}}validate(e){return Rr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return zr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new t(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new t(`Tool function is required and must be a function`);if(!this.schema.name)throw new t(`Tool schema must have a name`)}};const ri=`at least one tool must stay resident; all tools cannot be deferred`,ii=`a tool schema was withheld but no ${Te} tool is offered; register the loader or turn tool search off`;function ai(e){return e.deferLoading===!0}function oi(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!ai(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(ri);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(ii);return r}function si(e){if(e.length>0&&e.every(ai))throw Error(ri)}var ci=class extends Re{moduleManager;pluginManager;get name(){return this.config.name}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 li(e,t){if(!t.success){let r=t.data===void 0?``:`; data: ${typeof t.data==`string`?t.data:JSON.stringify(t.data)}`;throw new n(`${t.error??`Tool execution failed`}${r}`,e)}if(t.data===void 0)throw new n(`Tool execution succeeded but returned no data`,e);return t.data}function ui(e){if(!e.name)throw new d(`Agent name is required`,{component:`Robota`});if(!e.aiProviders||e.aiProviders.length===0)throw new d(`At least one AI provider is required`,{component:`Robota`});if(!e.defaultModel)throw new d(`Default model configuration is required`,{component:`Robota`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new d(`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 d(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`Robota`,duplicates:n});if(!t.includes(e.defaultModel.provider))throw new d(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`Robota`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var di=class{logger;getAIProviders;getTools;getEventService;ensureReady;getConfig;setConfig;getConfigVersion;bumpConfigVersion;getConfigUpdatedAt;setConfigUpdatedAt;emitAgentEvent;constructor(e,t,n,r,i,a,o,s,c,l,u,d){this.logger=e,this.getAIProviders=t,this.getTools=n,this.getEventService=r,this.ensureReady=i,this.getConfig=a,this.setConfig=o,this.getConfigVersion=s,this.bumpConfigVersion=c,this.getConfigUpdatedAt=l,this.setConfigUpdatedAt=u,this.emitAgentEvent=d}async updateTools(e){if(await this.ensureReady(),!Array.isArray(e))throw new d(`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`);let n=await r.execute(e,t);return li(r.schema.name,n)});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.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);if(e.name!==void 0){this.setConfig({...this.getConfig(),name:e.name});let t=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),{version:t}}throw new d("updateConfiguration: only `tools` and `name` are supported")}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 d(`Both provider and model are required`,{component:`Robota`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new d(`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(){let e=this.getAIProviders().getCurrentProvider();if(!e)throw new d(`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.effort!==void 0&&{effort:t.defaultModel.effort}}}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`);let r=await e.execute(t,n);return li(e.schema.name,r)}),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},fi=class extends ze{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new Mr,this.resolveToolSearchMode=e.resolveToolSearchMode,this.isToolVisible=e.isToolVisible??(()=>!0)}async doInitialize(){N.debug(`Tools initialized`)}async doDispose(){this.registry.clear(),this.loadedDeferredTools.clear(),delete this.allowedTools,N.debug(`Tools disposed`)}addTool(e,t){this.ensureInitialized();let n=new ni(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().filter(e=>this.isToolVisible(e.name));return this.allowedTools?e.filter(e=>this.allowedTools.includes(e.name)):e}getOfferedTools(){return oi(this.getTools(),this.loadedDeferredTools,this.resolveToolSearchMode())}isToolOffered(e){return this.getOfferedTools().some(t=>t.name===e)}listDeferredTools(){return this.resolveToolSearchMode()===`off`?[]:this.getTools().filter(e=>ai(e)&&!this.loadedDeferredTools.has(e.name))}loadDeferredTools(e){this.ensureInitialized();let t=e.map(e=>{let t=this.isToolVisible(e)?this.registry.get(e)?.schema:void 0;if(!t)throw new n(`Tool "${e}" is not registered, so it cannot be loaded`,e);return t});for(let e of t)ai(e)&&this.loadedDeferredTools.add(e.name);return t}async executeTool(e,t,r){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new n(`Tool "${e}" is not in the allowed tools list`,e);let i=this.registry.get(e);if(!i)throw new n(`Tool "${e}" is not registered`,e);let a;try{a=await i.execute(t,r)}catch(t){throw t instanceof Error?new n(t.message,e,t):new n(String(t),e)}if(!a.success)throw new n(a.error||`Tool execution failed`,e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(a)});if(a.data===void 0)throw new n(`Tool execution succeeded but returned no data`,e);return a.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()}};function pi(e){let t=mi(e.metadata),n=gi(e.usage);return t??n}function mi(e){if(!e)return;let t=gi({inputTokens:_i(e,`inputTokens`),outputTokens:_i(e,`outputTokens`),promptTokens:_i(e,`promptTokens`),completionTokens:_i(e,`completionTokens`),totalTokens:_i(e,`totalTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return hi(n);if(yi(n))return gi(n)}function hi(e){try{return gi(JSON.parse(e))}catch{return}}function gi(e){if(!e)return;let t=vi(e.inputTokens,e.promptTokens),n=vi(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=vi(e.totalTokens);return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r}}}function _i(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function vi(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function yi(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}const bi=4;function xi(e){return Math.ceil(JSON.stringify(e).length/4)}function Si(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function Ci(e,t={}){let n=xi(e),r=wi(e),i=r?.tokens,a=Ti(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 wi(e){for(let t=e.length-1;t>=0;t--){let n=pi(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function Ti(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const Ei=M(`agent-core:models`),Di=new Set;function Oi(e,t,n){let r=`${e}:${t}`;Di.has(r)||(Di.add(r),Ei.warn(`No metadata registered for model "${e}"; using the default ${t} of ${n}. This number belongs to a different vendor's models — register the model through registerModelMetadata() from the package that owns it. (NEUT-010)`))}const ki=2e5,Ai=new Map;function ji(...e){for(let t of e){let e=Ai.get(t.id);e&&!Mi(e,t)&&Ei.warn(`Model "${t.id}" was already registered with different metadata (context window ${e.contextWindow} -> ${t.contextWindow}, max output ${e.maxOutput} -> ${t.maxOutput}). The later registration wins; one of the two owners is wrong. (NEUT-010)`),Ai.set(t.id,t)}}function Mi(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function Ni(e){return Ai.get(e)}function Pi(e){let t=Ni(e)?.contextWindow;return t===void 0?(Oi(e,`context window`,ki),ki):t}const Fi=16384;function Ii(e){let t=Ni(e)?.maxOutput;return t===void 0?(Oi(e,`max output`,Fi),Fi):t}function Li(e){return Ni(e)?.name??e}function Ri(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`}function zi(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(ai);return i.length===0?`off`:i.length>15||Si(i)/Pi(t)>=.1?`on`:`off`}function Bi(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Vi(e){let t=new fi({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:zi(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var Hi=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)}},Ui=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 d(`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 Wi(e){return{moduleManager:new Hi(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new Ui(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new di(e.getLogger(),e.getAiProviders,e.getTools,e.getEventService,e.ensureFullyInitialized,e.getConfig,t=>e.setConfig(t),e.getConfigVersion,e.incrementConfigVersion,e.getConfigUpdatedAt,t=>e.setConfigUpdatedAt(t),(t,n)=>e.emitAgentEvent(t,n))}}const Gi={ASSIGNED:`assigned`,COMPLETED:`completed`},Ki=`task`,qi={MESSAGE:`message`,INPUT:`input`},Ji=`user`;function Yi(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.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function Xi(e,t,n,r,i){Ur(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:zt,ownerId:t,ownerPath:Qi(t,n)})}function Zi(){return new Ar({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 Qi(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function $i(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.driverId&&{driverId:t.driverId},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},awaitProviderSettlement:t.awaitProviderSettlement,...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},...t.withholdHostedTools===!0&&{withholdHostedTools:!0},...t.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:t.ephemeralSystemContext},...t.traceContext!==void 0&&{traceContext:t.traceContext}}}async function ea(e,t,n={},r){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 i=e.getHistory(),a={...e.config,...r},o=await e.getExecutionService().execute(t,i,a,$i(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(P.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(P.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(P.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}}async function*ta(e,t,n={},r){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 i=e.getHistory(),a={...e.config,...r},o=yield*e.getExecutionService().executeStream(t,i,a,$i(e,n));if(!o.success)throw o.error??Error(`[STRICT-POLICY] Failed execution result missing error field — every success:false result must carry error`);return o.response}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 na(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function ra(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(`
4
+ `)}async function ia(e,t,n,r){let a=(n.outputRetries??2)+1,o=na(r),s=t,c=[];for(let t=1;t<=a;t++){let i=oa(r,await ea(e,s,n,o));if(i.success)return i.value;c=i.issues,e.logger.debug(`Structured output validation failed`,{attempt:t,maxAttempts:a,issues:c}),t<a&&(s=ra(r,c))}throw new i(`response failed schema validation after ${a} attempt(s)`,c,a)}async function*aa(e,t,n,r){let a=(n.outputRetries??2)+1,o=na(r),s=t,c=[];for(let t=1;t<=a;t++){let i=oa(r,yield*ta(e,s,n,o));if(i.success)return i.value;c=i.issues,e.logger.debug(`Structured output validation failed (stream)`,{attempt:t,maxAttempts:a,issues:c}),t<a&&(s=ra(r,c))}throw new i(`response failed schema validation after ${a} attempt(s)`,c,a)}function oa(e,t){let n=Gn(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 sa(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 ca(e,t){return e.getConversationStore(t).getHistory()}function la(e,t,n){e.getConversationStore(t).addEntry(n)}function ua(e,t){e.getConversationStore(t).clear()}function da(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 fa(e,t,n){e.getConversationStore(t).addMessage(n)}var pa=class extends ze{providers=new Map;currentProvider;currentModel;constructor(){super({readyOnConstruction:!0})}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,n){this.ensureInitialized();let r=B.validateProviderName(e);if(!r.isValid)throw new t(`Invalid provider name: ${r.errors.join(`, `)}`);if(!n||typeof n!=`object`||!n||Array.isArray(n))throw new t(`Provider must be a valid object instance`);if(!n.name||typeof n.name!=`string`)throw new t(`Provider must have a valid name`);if(typeof n.chat!=`function`)throw new t(`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,n),N.debug(`AI provider "${e}" registered successfully`,{providerName:e,version:n.version,supportsStreaming:typeof n.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 d(`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))}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}},ma=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,effortCacheIdentity:r?.effortCacheIdentity??null});return{hash:this.sha256(a),model:t,provider:n}}computeIntegrityHash(e){return this.sha256(e)}sha256(e){let t=new ie(`SHA-256`,`TEXT`);return t.update(e),t.getHash(`HEX`)}},ha=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new ma;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 h(`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)}},ga=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()}};function _a(e){return`executionId`in e||`toolName`in e}function va(e){let t=0,n=!1;for(let r=0;r<e.length;r++){let i=e[r]===` `||e[r]===` `||e[r]===`
5
+ `||e[r]===`\r`;!i&&!n?(t++,n=!0):i&&(n=!1)}return t}function ya(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 ba(e,t,n,r){e.emitExecution(F.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:va(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 xa(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:va(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(va(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 q(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function Sa(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 q(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)}function Ca(e){if(!e.executionId)throw new t(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new t(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new t(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function wa(e,t){let n=Ca(e),r=K(),i=e.traceContext?c(e.traceContext,r):void 0,a=m(`shell`,e.traceContext,_(r)),o=e.traceContext?m(`hooks`,e.traceContext,e.traceContext.parentSpanId):void 0;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}:{},...e.deferredTools?{deferredTools:e.deferredTools}:{},toolBodyId:r,...i?{outboundTraceContext:i}:{},...a?{shellTraceEnv:a}:{},...o?{hookTraceEnv:o}:{}}}function Ta(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null}}function Ea(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function Da(e){let t=e.argumentDecodeError;if(e.eventService&&t!==void 0){let n={timestamp:new Date,toolName:e.toolName,error:t};e.eventService.emit(L.CALL_ERROR,n)}return{toolName:e.toolName,result:null,success:!1,error:t,executionId:e.executionId,metadata:{errorCode:Ht,requestedTool:e.toolName}}}function Oa(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function ka(e){return e!==void 0}function Aa(e){return e!==void 0}function ja(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 Ma(e,t,n,r){let i=e.requests[r];if(i)try{let a=e.signal?.aborted?Ta(i):i.argumentDecodeError===void 0?await t.executeTool(i.toolName,i.parameters,wa(i,e.signal)):Da(i);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=Oa(a))}catch(e){let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=Ea(i,t)}}async function Na(e,t,n){for(;n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await Ma(e,t,n,r)}}async function Pa(e,t){let n={resultsByIndex:Array(e.requests.length),errorsByIndex:Array(e.requests.length),nextRequestIndex:0},r=ja(e.requests.length,e.maxConcurrency),i=Array.from({length:r},()=>Na(e,t,n));await Promise.all(i);let a=n.resultsByIndex.filter(ka),o=n.errorsByIndex.filter(Aa);if(o.length>0&&!e.continueOnError)throw o[0];return{results:a,errors:o}}async function Fa(e,t){let n=[],r=[];for(let i of e.requests)try{let a=e.signal?.aborted?Ta(i):i.argumentDecodeError===void 0?await t.executeTool(i.toolName,i.parameters,wa(i,e.signal)):Da(i);if(n.push(a),a.success||r.push(Oa(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 Ia(e,t,n){return n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`),e.mode===`parallel`?Pa(e,t):Fa(e,t)}var La=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=Tt){this.tools=e,this.logger=t,this.deferredToolCatalog={listDeferredTools:()=>this.tools.listDeferredTools(),loadDeferredTools:e=>this.tools.loadDeferredTools(e)}}setAskHandler(e){this.askHandler=e}async executeTool(e,n,r,i=`offered`){this.logger.debug(`Executing tool: ${e}`);try{if(!r?.executionId)throw new t(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);r.signal?.throwIfAborted();let a=i===`offered`&&this.tools.getToolSchema(e)?.deferLoading===!0&&!this.tools.isToolOffered(e);if(!this.tools.hasTool(e)||a){let t=(i===`registered`?this.tools.getTools():this.tools.getOfferedTools()).map(e=>e.name).sort(),n=za(e,t,a),o=r.eventService;if(o){let t={timestamp:new Date,toolName:e,error:n};o.emit(L.CALL_ERROR,t)}return this.logger.warn(`Tool call skipped because requested tool is not registered`,{toolName:e,availableTools:t}),{success:!1,error:n,toolName:e,executionId:r.executionId,metadata:{errorCode:Vt,requestedTool:e,availableTools:t}}}let o=r.eventService;if(o){let t={timestamp:new Date,toolName:e,parameters:n};o.emit(L.CALL_START,t)}let{toolName:s,parameters:c,...l}=r,u={...l,deferredTools:this.deferredToolCatalog,toolName:e,parameters:n,executionId:r.executionId},d=await this.tools.executeTool(e,n,u);if(this.logger.debug(`Tool execution completed: ${e}`),o){let t={timestamp:new Date,toolName:e,result:d};o.emit(L.CALL_COMPLETE,t),o.emit(L.CALL_RESPONSE_READY,t)}return{success:!0,result:d,toolName:e,executionId:u.executionId}}catch(t){this.logger.error(`Tool execution failed: ${e}`);let n=t instanceof Error?t:Error(String(t)),i=r?.eventService;if(i&&r?.executionId){let t={timestamp:new Date,toolName:e,error:n.message};i.emit(L.CALL_ERROR,t)}return{success:!1,error:n.message,toolName:e,executionId:r?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=Ra(e.id,e.function.name,e.function.arguments);return{toolName:e.function.name,parameters:n.ok?n.parameters:{},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}:{},deferredTools:this.deferredToolCatalog,...n.ok?{}:{argumentDecodeError:n.error}}})}async executeTools(e){return Ia(e,this,this.logger)}};function Ra(e,t,n){let r;try{r=JSON.parse(n)}catch{return{ok:!1,error:`Failed to parse arguments for tool "${t}" (call ${e}): invalid JSON`}}return typeof r!=`object`||!r||Array.isArray(r)?{ok:!1,error:`Failed to parse arguments for tool "${t}" (call ${e}): expected a JSON object at the root, got ${r===null?`null`:Array.isArray(r)?`an array`:`a ${typeof r}`}`}:{ok:!0,parameters:r}}function za(e,t,n){let r=t.length>0?t.join(`, `):`no registered tools are available`;return n?`Tool "${e}" is registered but deferred and not yet loaded, so the tool call was not executed. Call ${Te} with names: ["${e}"] to load it, then call it again. Available tools: ${r}.`:`Tool "${e}" is not registered, so the tool call was not executed. Available tools: ${r}.`}function Ba(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function Va(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 Ha(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...Va(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 Ua(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:Bt,ownerId:i,ownerPath:[...Va(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function Wa(e,t,n,r,i,a){let o=Ha(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:I,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function Ga(e,t,n,r,i={}){if(t.onExecutionEvent===void 0)return;let a=e.getMessages(),o=a.at(-1);o!==void 0&&t.onExecutionEvent(`history_mutation`,{executionId:n,conversationId:r,...i,mutation:`append_message`,index:a.length-1,message:o})}var Ka=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=Ba(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(Ur(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=q(this.baseEventService,{ownerType:Bt,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 Va(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return Ha(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return Ua(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return Wa(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 q(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(Ur(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){ya(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){ba(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){xa(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){Sa(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function qa(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function Ja(e,t,n,r,i){let a=e.getMessages(),o=a.filter(e=>e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0).pop(),s=o?o.content:`No response received. The context window may be full.`,c=o?.metadata?.providerError===!0,l=Date.now()-n.getTime();return{response:s,messages:a.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:l,tokensUsed:a.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:!!o&&!c,...c?{error:qa(i,s)}:{}}}function Ya(e,t,n){e.tools!==void 0&&(be(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function Xa(e,t,n,r,i=!1){let a=Za(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw Qa();let s=new AbortController,c,l=!1,u,d,f=()=>{c!==void 0&&(clearTimeout(c),c=void 0)},p=e=>{l||(l=!0,d?.(e),s.abort(e))},m=()=>{a===void 0||l||(f(),c=setTimeout(()=>{p(Error(`Provider call idle timeout after ${a}ms`))},a))},h=()=>{p(Qa())};o?.addEventListener(`abort`,h,{once:!0});let g=n.onTextDelta,_={...n,signal:s.signal,...g===void 0?{}:{onTextDelta:e=>{m(),g(e)}}};m();try{let n=new Promise((e,t)=>{d=t});return u=(async()=>e(t,_))(),await Promise.race([u,n])}finally{l=!0,f(),o?.removeEventListener(`abort`,h),i&&u&&await u.then(()=>{},()=>{})}}function Za(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function Qa(){let e=Error(`aborted`);return e.name=`AbortError`,e}function $a(e){let t={};for(let n of[`executionId`,`sessionId`,`userId`]){let r=e.executionContext?.[n];typeof r==`string`&&r.length>0&&(t[n]=r)}return e.messages&&(t.messages=e.messages),t}const eo={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution($a(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution($a(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation($a(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution($a(t),t.executionResult)},onMessageAdded:async(e,t)=>{e.onMessageAdded&&t.message&&await e.onMessageAdded(t.message)},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 J(e,t,n,r){let i=eo[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 to(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 no(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function ro(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 io(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=>{if(!e.description||e.description.length===0)throw Error(`[EXECUTION] Tool "${e.name}" is missing description`);return{name:e.name,description:e.description,parameters:Object.keys(e.parameters.properties??{})}}),readAvailableTools:()=>t.getOfferedTools(),deferredTools:t}}function ao(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 oo(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}async function so(e,t,n,r,i,a,o,s){let c=Date.now()-n.getTime();await J(a,`onError`,{error:e instanceof Error?e:Error(String(e)),executionContext:fo(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 co(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function lo(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function uo(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},awaitProviderSettlement:a?.awaitProviderSettlement,...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},...a?.withholdHostedTools===!0&&{withholdHostedTools:!0},...a?.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:a.ephemeralSystemContext},...a?.traceContext!==void 0&&{traceContext:a.traceContext}}}function fo(e){let t={conversationId:lo(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 po(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
6
+ `)}function mo(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=qn({table:r.provider.capabilityTable?.(),model:n,endpointIsVendorDefault:r.provider.endpointIsVendorDefault?.()});if(a.mechanism===`response_schema`)return{messages:t,outcome:{capability:a,sent:`json_schema`,schemaInPrompt:!1}};let o={role:`system`,content:po(i.schema),id:K(),timestamp:new Date,state:`complete`},s=[...t,o];return a.mechanism===`json_object`?(e.responseFormat={type:`json_object`},{messages:s,outcome:{capability:a,sent:`json_object`,schemaInPrompt:!0}}):(delete e.responseFormat,{messages:s,outcome:{capability:a,sent:`omitted`,schemaInPrompt:!0}})}function ho(e,t,n){let r=e.provider.resolveModelRoute?.(t,n);return r===void 0||r.provider===e.currentInfo.provider&&r.model===t?{}:{current:r}}function Y(e,t){return e.current?.provider??t.currentInfo.provider}function X(e,t){return e.current?.model??t}function go(e,t){e.current={provider:t.to.provider,model:t.to.model}}function _o(e,t,n,r){if(e===void 0||e.allowedOrigins.length===0)return;let i=!1;try{i=t.canPropagateTraceContext?.()===!0}catch{i=!1}if(!i){try{e.onPropagationUnavailable?.(n)}catch{}return}return p(e,r)}function vo(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function yo(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}}function bo(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function xo(e,t,n,r){let i=to(t.responseFormat),a=(r?.toolChoice??t.defaultModel?.toolChoice)===`none`?[]:n.readAvailableTools();return{model:e,effort:t.defaultModel?.effort??`auto`,...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},...a.length>0&&{tools:a},...i?{responseFormat:i}:{},...r}}async function So(e,t,n,r,i,a,o,s,c,l={}){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 u=t.defaultModel.model;bo(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let d=xo(u,t,n,i);ro(d.toolChoice,d.tools),Ya(d,u,n);let{messages:f,outcome:p}=mo(d,e,u,n);a?.({messages:f,options:d,...p!==void 0&&{structuredOutput:p}});let m=n.provider.chat.bind(n.provider),h=(e,t)=>(s?.(`invoked`,t.model??u),m(e,vo(t,c?.()))),g=d.effort??`auto`;if(r){let e=r.lookup(f,X(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:g});if(e)return s?.(`cache-hit`,d.model??u),{role:`assistant`,content:e,timestamp:new Date,id:K(),state:`complete`};let n=await Xa(h,f,d,t.timeout,o);return typeof n.content==`string`&&r.store(f,X(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,n.content,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:g}),n}return Xa(h,f,d,t.timeout,o)}function Co(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 wo(e){let t=e?.metadata?.usageProvenance;if(t===`partial`)return{provenance:`partial`};if(t!==`complete`)return{provenance:`absent`};let n=e.usage,r=e?.metadata,i=n?.promptTokens??r?.promptTokens??r?.inputTokens,a=n?.completionTokens??r?.completionTokens??r?.outputTokens,o=n?.totalTokens??r?.totalTokens;return typeof i!=`number`||!Number.isSafeInteger(i)||i<0||typeof a!=`number`||!Number.isSafeInteger(a)||a<0||!Number.isSafeInteger(i+a)||o!==void 0&&o!==i+a?{provenance:`absent`}:{provenance:`complete`,promptTokens:i,completionTokens:a,totalTokens:i+a}}const To=/^peer:[A-Za-z0-9._:-]{1,128}$/,Eo=/<(\/?)(peer_message)/gi;function Do(e){return e.replace(Eo,`&lt;$1$2`)}function Oo(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function ko(e){return To.test(e)?e:`peer:unverified`}function Ao(e){return e.map(e=>{if(e.type!==`text`)return e;let t=Do(e.text);return t===e.text?e:{...e,text:t}})}function jo(e){if(e.role===`tool`){let t=Do(e.content),n=e.parts?Ao(e.parts):void 0,r=n?.some((t,n)=>t!==e.parts?.[n])??!1;return t===e.content&&!r?e:{...e,content:t,...n?{parts:n}:{}}}if(e.role!==`user`)return e;let t=Oo(e),n=Do(e.content),r=e.parts?Ao(e.parts):void 0;if(!t){let t=r?.some((t,n)=>t!==e.parts?.[n])??!1;return n===e.content&&!t?e:{...e,content:n,...r?{parts:r}:{}}}let i=`<peer_message from="${ko(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function Mo(e){return e.map(jo)}async function No(e,t,n,r,i,a,o,s,c=10){s.warn(`No final text response — forcing summary call`,{maxRounds:c===0?`unlimited`:c,currentRound:i.currentRound,conversationId:a});try{let s=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.`,c=[...Mo(e.getMessages()),{id:K(),role:`user`,content:s,state:`complete`,timestamp:new Date}],l=n.systemMessage??``,u=c.some(e=>e.role===`system`&&e.content===l),d=l&&!u?[{id:K(),role:`system`,content:l,state:`complete`,timestamp:new Date},...c]:c,f=ho(t,t.aiProviderInfo.model,r),p={model:t.aiProviderInfo.model,effort:n.defaultModel?.effort??`auto`,toolChoice:`none`,...n.defaultModel?.maxTokens!==void 0&&{maxTokens:n.defaultModel.maxTokens},...n.defaultModel?.temperature!==void 0&&{temperature:n.defaultModel.temperature},...o.signal&&{signal:o.signal},...o.onTextDelta&&{onTextDelta:o.onTextDelta},executionId:r,onModelFallback:e=>{go(f,e),o.onExecutionEvent?.(Zr.SWITCHED,{executionId:r,conversationId:a,round:i.currentRound,fromProvider:e.from.provider,fromModel:e.from.model,toProvider:e.to.provider,toModel:e.to.model,reason:e.reason}),m()}},m=()=>{o.onExecutionEvent?.(`provider_request`,{executionId:r,conversationId:a,round:i.currentRound,provider:Y(f,t),model:X(f,t.aiProviderInfo.model),messages:d,forcedSummary:!0})};m();let h=Date.now(),g=K(),_={invoked:!1},v=`failure`,y;try{y=await Xa((e,n)=>{_.invoked=!0,_.startedAtMs=Date.now();let r=_o(o.traceContext,t.provider,t.currentInfo.provider,g);return t.provider.chat(e,vo(n,r))},d,p,n.timeout,o.awaitProviderSettlement),v=`success`}catch(e){throw Xt(e,o.signal)&&(v=`interrupted`),e}finally{let e=_.invoked?wo(y):{provenance:`absent`};o.onExecutionEvent?.(Xr.COMPLETED,{executionId:r,conversationId:a,round:i.currentRound,startedAt:new Date(_.startedAtMs??h).toISOString(),endedAt:new Date(Math.max(Date.now(),_.startedAtMs??h)).toISOString(),outcome:v,callId:g,disposition:_.invoked?`invoked`:`preflight-refused`,..._.invoked&&{providerId:Y(f,t),modelId:X(f,t.aiProviderInfo.model),...typeof y?.metadata?.providerRequestId==`string`&&{providerRequestId:y.metadata.providerRequestId}},usageProvenance:e.provenance,...`promptTokens`in e&&e.promptTokens!==void 0&&{promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens}})}if(!y)throw Error(`Forced summary provider returned no response.`);let b=(typeof y.content==`string`?y.content:``)||`Maximum rounds reached. Partial results available in conversation history.`,x=wo(y),ee={...y.metadata??{},round:i.currentRound,providerId:Y(f,t),modelId:X(f,t.aiProviderInfo.model),usageProvenance:x.provenance,...x.provenance===`complete`&&{inputTokens:x.promptTokens,outputTokens:x.completionTokens,totalTokens:x.totalTokens}};e.addAssistantMessage(b,[],ee),o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:b}),Ga(e,o,r,a,{round:i.currentRound})}catch(e){s.warn(`Forced summary call failed`,{error:e instanceof Error?e.message:String(e)})}}const Po=.95;function Fo(e,t,n){let r=Ci(e,{usageFloorTokens:n}),i=Pi(t),a=i*Po,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:Po*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function Io(e,t,n,r,i,a){let o=n.currentRound,s=Fo(e,t.defaultModel.model,n.cumulativeInputTokens);if(!s.shouldBlock)return!1;i.warn(`[ROUND] Context hard-capacity prevention before provider call`,{estimatedTokens:s.estimatedTokens,contextLimit:s.contextLimit,thresholdTokens:s.thresholdTokens,thresholdPercentage:s.thresholdPercentage,serializedTokens:s.serializedTokens,providerTokens:s.providerTokens??0,usageFloorTokens:s.usageFloorTokens??0,round:o});let c=t.contextCapacityHint??`Reduce the conversation history (for example, compact or summarize it) and retry.`;return r.addAssistantMessage(`Context window is near capacity. Cannot process further in this round. Estimated ${s.estimatedTokens.toLocaleString()} / ${s.contextLimit.toLocaleString()} tokens (${Math.round(s.usedPercentage)}%) exceeds the hard-block threshold ${Math.round(s.thresholdPercentage)}%. ${c}`,[],{round:o,contextOverflow:!0,estimatedTokens:s.estimatedTokens,contextLimit:s.contextLimit,thresholdTokens:s.thresholdTokens,thresholdPercentage:s.thresholdPercentage,serializedTokens:s.serializedTokens,providerTokens:s.providerTokens??0,usageFloorTokens:s.usageFloorTokens??0,usedPercentage:s.usedPercentage}),Ga(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function Lo(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 Ro(e,t,n,r,i,a,o,s,c,l,u,d,f,p=ho(n,t.defaultModel.model,s)){let m=Date.now(),h=K(),g={disposition:`preflight-refused`},_,v=`failure`,y,b=e=>{i.onExecutionEvent?.(`provider_request`,{executionId:s,conversationId:i.conversationId,round:o,provider:Y(p,n),model:X(p,t.defaultModel.model),effort:e.options.effort,messages:e.messages,tools:e.options.tools})};try{let c=await So(e,t,n,r,{signal:i.signal,onTextDelta:u,onProviderNativeRawPayload:d,...i.maxTokens!==void 0&&{maxTokens:i.maxTokens},...i.temperature!==void 0&&{temperature:i.temperature},...i.withholdHostedTools===!0&&{nativeWebTools:{webSearch:!1,webFetch:!1}},executionId:s,onModelFallback:e=>{go(p,e),g.model=e.to.model,i.onExecutionEvent?.(Zr.SWITCHED,{executionId:s,conversationId:i.conversationId,round:o,fromProvider:e.from.provider,fromModel:e.from.model,toProvider:e.to.provider,toModel:e.to.model,reason:e.reason}),y!==void 0&&b(y)},...(()=>{let e=no(i.toolChoice??t.defaultModel.toolChoice,o);return e===void 0?{}:{toolChoice:e}})()},e=>{y=e,b(e);let r=e.structuredOutput;r!==void 0&&i.onExecutionEvent?.(`structured_output_transport`,{executionId:s,conversationId:i.conversationId,round:o,provider:n.currentInfo.provider,model:t.defaultModel.model,mechanism:r.capability.mechanism,provenance:r.capability.provenance,sent:r.sent,schemaInPrompt:r.schemaInPrompt,...r.capability.reason!==void 0&&{reason:r.capability.reason}})},i.awaitProviderSettlement,(e,t)=>{g.disposition=e,g.model=X(p,t),e===`invoked`&&(g.startedAtMs=Date.now())},()=>_o(i.traceContext,n.provider,n.currentInfo.provider,h),p);if(_=c,typeof c.content==`string`&&c.content.length>0){let e=a.getPendingContent();if(c.content.startsWith(e)){let t=c.content.slice(e.length);t.length>0&&u(t)}else l.warn(`Provider deltas are not a prefix of its assembled message — committing the streamed text`,{conversationId:i.conversationId,round:o,streamedLength:e.length,assembledLength:c.content.length})}return i.onExecutionEvent?.(`provider_response_raw`,{executionId:s,conversationId:i.conversationId,round:o,effort:t.defaultModel?.effort??`high`,response:c,responseKind:`provider-normalized-message`}),i.onExecutionEvent?.(`provider_response_normalized`,{executionId:s,conversationId:i.conversationId,round:o,response:c,toolCallsCount:c.role===`assistant`&&Array.isArray(c.toolCalls)?c.toolCalls.length:0}),v=`success`,c}catch(e){if(Xt(e,i.signal))throw v=`interrupted`,a.commitAssistant(`interrupted`,{round:o,usageObservationId:c,executionId:s,providerId:Y(p,n),modelId:X(p,n.aiProviderInfo.model)}),e;a.discardPending(),f?.(e);let t=e instanceof Error?e.message:String(e);return l.error(`[ROUND] Provider call failed`,{error:t,round:o}),a.addAssistantMessage(`Request failed: ${t}`,[],{round:o,usageObservationId:c,executionId:s,providerId:Y(p,n),modelId:X(p,n.aiProviderInfo.model),providerError:!0}),Ga(a,i,s,i.conversationId,{round:o,usageObservationId:c,executionId:s,providerId:Y(p,n),modelId:X(p,n.aiProviderInfo.model),providerError:!0}),null}finally{let e=g.disposition===`invoked`?wo(_):{provenance:`absent`};i.onExecutionEvent?.(Xr.COMPLETED,{executionId:s,conversationId:i.conversationId,round:o,startedAt:new Date(g.startedAtMs??m).toISOString(),endedAt:new Date(Math.max(Date.now(),g.startedAtMs??m)).toISOString(),outcome:v,callId:h,disposition:g.disposition,...g.disposition===`invoked`&&{providerId:Y(p,n),...g.model!==void 0&&{modelId:g.model},...typeof _?.metadata?.providerRequestId==`string`&&{providerRequestId:_.metadata.providerRequestId}},usageProvenance:e.provenance,...`promptTokens`in e&&e.promptTokens!==void 0&&{promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens}})}}function zo(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function Bo(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function Vo(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=>_a(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=Vt,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`))),u.metadata?.errorCode===`argument_decode_error`&&(p.errorCode=Ht,typeof u.metadata.requestedTool==`string`&&(p.requestedTool=u.metadata.requestedTool))}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=Ci(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 Ho(t,n,r){for(let i of t){let t=i.function?.name??`unknown`,a=`${t}::${typeof i.function?.arguments==`string`?i.function.arguments:JSON.stringify(i.function?.arguments??{})}`,o=(n.sameToolInputCounts.get(a)??0)+1;if(n.sameToolInputCounts.set(a,o),o>r)throw new e(t,o,r)}}async function Uo(e,t,n,r,i,a,o,s,c,l,u,d,f,p){let{toolExecutionService:m,logger:h,eventEmitter:g}=c,_=f??l?.maxSameToolInputs;_!==void 0&&Ho(e,s,_),h.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:i,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let v=g.buildThinkingOwnerContext(n,r,a,o).ownerPath,y=e.length,b=`${a}`,x=m.createExecutionRequestsWithContext(e,{ownerPathBase:v,metadataFactory:e=>({conversationId:n,round:i,directParentId:a,batchId:b,expectedCount:y,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:g.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:g.getBaseEventService(),...p?{traceContext:p}:{}}}),ee={requests:x,mode:`parallel`,maxConcurrency:5,continueOnError:!0,signal:u};d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:b,mode:ee.mode,maxConcurrency:ee.maxConcurrency,requestCount:x.length,tools:x.map(e=>e.toolName)}),x.forEach((e,t)=>{d?.(`tool_execution_request`,{executionId:r,conversationId:n,round:i,batchId:b,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.argumentDecodeError===void 0?e.parameters:{argumentDecodeError:e.argumentDecodeError},ownerPath:e.ownerPath})});let S=await m.executeTools(ee),C=S.results.filter(zo).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:b,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=>!zo(e)&&!Bo(e)).map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}));let w=Pi(l?.defaultModel?.model??``),T=t.getMessages().length,te=Vo(e,S,t,i,h,{contextLimit:w,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(T).forEach((e,t)=>{d?.(`tool_message_committed`,{executionId:r,conversationId:n,round:i,batchId:b,index:t,message:e}),d?.(`history_mutation`,{executionId:r,conversationId:n,round:i,batchId:b,mutation:`append_message`,index:T+t,message:e})}),g.emitToolResultsEvents(e,S,s.toolsExecuted,n,r,i,a,o),g.clearToolEventServices(),{...te,unknownToolFailureCount:C.length,unknownToolNames:C}}function Wo(e){let t=0,n=0,r=!1;for(let i of e){if(!O(i)||i.data===void 0)continue;let e=Ge(i);if(e.role!==`assistant`)continue;let a=Ko(e);a&&(r=!0,t+=a.inputTokens,n+=a.outputTokens)}if(r)return{promptTokens:t,completionTokens:n,totalTokens:t+n}}function Go(){return K()}function Ko(e){let t=pi(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 qo(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(),h=Mo(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,dr(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=yo(r,e);if(await J(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,toolCallId:`toolCallId`in e?e.toolCallId:void 0}))}),d.emitWithContext(F.ASSISTANT_MESSAGE_START,{parameters:{round:p,messageCount:m.length},metadata:{round:p,thinkingNodeId:v}},()=>d.buildThinkingOwnerContext(r,i,v,y),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for thinking event`);return q(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),Io(m,o,e,n,u,{fullContext:a,executionId:i,conversationId:r}))return!0;p>1&&a.onTextDelta?.(`
5
7
 
6
- [This response was interrupted by the user]`),oe(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),ce(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},er=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 $n(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)}},tr=class extends wn{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 nr=`$ENV:`;function rr(e){return e.startsWith(nr)}function ir(e){return`${nr}${e}`}function ar(e){if(!rr(e))return e;let t=e.slice(5).trim();if(t.length!==0)return process.env[t]}function or(e){return e===void 0||e.length===0?!1:ar(e)!==void 0}var sr=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function cr(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new U(`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 U(`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 U(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function lr(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 ur(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 dr(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function fr(e,t,n,r){let{listenerCounts:i,totalListeners:a}=dr(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 pr(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new U(`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 mr(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 hr(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 gr=class extends Cn{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 sr,cr(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[Y.AGENT_EXECUTION_START,Y.AGENT_EXECUTION_COMPLETE,Y.AGENT_EXECUTION_ERROR,Y.TOOL_BEFORE_EXECUTE,Y.TOOL_AFTER_EXECUTE,Y.TOOL_SUCCESS,Y.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().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(Y.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(Y.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(Y.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(Y.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(Y.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?Y.TOOL_ERROR:Y.TOOL_SUCCESS,i=hr(e,n,t.duration);await this.emit(r,i),await this.emit(Y.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(Y.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 pr(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 mr(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 ur(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>lr(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 fr(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()}},_r=class extends T{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 vr(e){if(!e.name)throw new B(`Agent name is required`,{component:`Robota`});if(!e.aiProviders||e.aiProviders.length===0)throw new B(`At least one AI provider is required`,{component:`Robota`});if(!e.defaultModel)throw new B(`Default model configuration is required`,{component:`Robota`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new B(`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 B(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`Robota`,duplicates:n});if(!t.includes(e.defaultModel.provider))throw new B(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`Robota`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var yr=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 B(`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.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 B(`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 B(`Both provider and model are required`,{component:`Robota`});if(!this.isReady())throw new B(`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 B(`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 B(`Agent must be fully initialized before getting model configuration`,{component:`Robota`});let e=this.getAIProviders().getCurrentProvider();if(!e)throw new B(`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})}},br=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)}},xr=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 B(`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 Sr(e){return{moduleManager:new br(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new xr(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new yr(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 Cr(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.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function wr(e,t,n,r,i){we(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:F,ownerId:t,ownerPath:Er(t,n)})}function Tr(){return new gr({enabled:!0,events:[Y.MODULE_INITIALIZE_START,Y.MODULE_INITIALIZE_COMPLETE,Y.MODULE_INITIALIZE_ERROR,Y.MODULE_EXECUTION_START,Y.MODULE_EXECUTION_COMPLETE,Y.MODULE_EXECUTION_ERROR,Y.MODULE_DISPOSE_START,Y.MODULE_DISPOSE_COMPLETE,Y.MODULE_DISPOSE_ERROR]})}function Er(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function Dr(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 Or(e,t,n={},r){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 i=e.getHistory(),a={...e.config,...r},o=await e.getExecutionService().execute(t,i,a,Dr(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(P.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(P.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(P.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}}async function*kr(e,t,n={},r){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 i=e.getHistory(),a={...e.config,...r},o=e.getExecutionService().executeStream(t,i,a,Dr(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(P.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}finally{e.emitAgentEvent(P.EXECUTION_COMPLETE,{})}}function Ar(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function jr(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 Mr(e,t,n,r){let i=(n.outputRetries??2)+1,a=Ar(r),o=t,s=[];for(let t=1;t<=i;t++){let c=Pr(r,await Or(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=jr(r,s))}throw new Re(`response failed schema validation after ${i} attempt(s)`,s,i)}async function*Nr(e,t,n,r){let i=(n.outputRetries??2)+1,a=Ar(r),o=t,s=[];for(let t=1;t<=i;t++){let c=``;for await(let t of kr(e,o,n,a))c+=t,yield t;let l=Pr(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=jr(r,s))}throw new Re(`response failed schema validation after ${i} attempt(s)`,s,i)}function Pr(e,t){let n=qn(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 Fr(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 Ir(e,t){return e.getConversationStore(t).getHistory()}function Lr(e,t,n){e.getConversationStore(t).addEntry(n)}function Rr(e,t){e.getConversationStore(t).clear()}function zr(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 Br(e,t,n){e.getConversationStore(t).addMessage(n)}var Vr=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 n=new t(`SHA-256`,`TEXT`);return n.update(e),n.getHash(`HEX`)}},Hr=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new Vr;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 Ke(`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)}},Ur=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 Wr(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 Tn&&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 Ur(new Hr({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new Vr));let d=new yn(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 Gr(e){try{let t=await Wr(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 Kr(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 qr(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 Jr(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 Yr(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new B(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel,r=n?.model??t.defaultModel;if(!r)throw new B(`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 B(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||Xr(),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 Xr(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function Zr(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var Qr=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}}},$r=class{agentTemplates;initialized=!1;logger;options;activeAgents;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new Qr,this.logger=M(`AgentFactory`),this.options=Jr(e),this.activeAgents=new Map,this.creationStats={totalCreated:0,activeCount:0,fromTemplates:0,customConfigured:0,templateUsageRatio:0},this.lifecycleEvents=t,this.logger.debug(`AgentFactory initialized`,{maxConcurrentAgents:this.options.maxConcurrentAgents,strictValidation:this.options.strictValidation,hasDefaultModel:!!this.options.defaultModel,hasDefaultProvider:!!this.options.defaultProvider,hasLifecycleEvents:this.lifecycleEvents!==null})}async initialize(){this.initialized||(this.logger.debug(`Initializing AgentFactory`),this.initialized=!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 B(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);if(r=Yr(t,this.options),this.options.strictValidation){let e=Dn(r);if(!e.isValid)throw new V(`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=Xr();return this.activeAgents.set(o,i),Zr(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 B(`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 Dn(e)}},ei=class extends E{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=X.validateProviderName(e);if(!n.isValid)throw new V(`Invalid provider name: ${n.errors.join(`, `)}`);if(!t||typeof t!=`object`||!t||Array.isArray(t))throw new V(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new V(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new V(`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 B(`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))}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 ti(e,t,n){if(!e.name||e.name.trim()===``)throw new B(`Module name is required`);if(!e.version||e.version.trim()===``)throw new B(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new B(`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 ni(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 B(`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 ri(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 ii(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 ai(){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 oi(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 si(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 ci(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 li(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 ui=class{registeredTypes=new Map;logger;constructor(){this.logger=M(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new B(`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 B(`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 oi(e,e=>this.getType(e))}resolveDependencies(e){return si(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return ci(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 ai())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 li(this.registeredTypes)}};const di={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var fi=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 ui,this.logger=M(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new B(`Cannot register modules during disposal`);if(ti(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new B(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await ni(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(di.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=ri(e,this.modules);if(n.length>0)throw new B(`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(di.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new B(`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 B(`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 B(`Module '${e}' not found`);if(!n.isInitialized())throw new B(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new B(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new B(`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 ii(this.modules,this.moduleStats)}},pi=class{tools=new Map;register(e){if(!e.schema?.name)throw new V(`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 V(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new V(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new V(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new V(`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 V(`Parameter "${t}" must have a type`);if(![`string`,`number`,`boolean`,`array`,`object`].includes(n.type))throw new V(`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 V(`Required parameter "${n}" is not defined in properties`)}}},mi=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 V(`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 H||r instanceof V?r:new H(`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 V(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new V(`Tool function is required and must be a function`);if(!this.schema.name)throw new V(`Tool schema must have a name`)}},hi=class extends E{registry;allowedTools;constructor(){super(),this.registry=new pi}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 mi(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 H(`Tool "${e}" is not in the allowed tools list`,e);let r=this.registry.get(e);if(!r)throw new H(`Tool "${e}" is not registered`,e);let i;try{i=await r.execute(t,n)}catch(t){throw t instanceof Error?new H(t.message,e,t):new H(String(t),e)}if(!i.success)throw new H(i.error||`Tool execution failed`,e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(i)});if(i.data===void 0)throw new H(`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()}},gi=class extends _r{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=M(`Robota`),this.startTime=Date.now(),e.logging&&(e.logging.level&&fe(e.logging.level),e.logging.enabled===!1&&fe(`silent`)),vr(e),this.aiProviders=new ei,this.tools=new hi,this.agentFactory=new $r,this.conversationHistory=new er,this.eventEmitter=Tr(),this.moduleRegistry=new fi(this.eventEmitter),this.eventService=e.eventService||Ce,this.agentEventService=R(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:Er(this.conversationId,this.config.executionContext)});let t=Sr({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,Cr(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=Gn(t.output);return await Mr(this.executionDeps(),e,t,n)}return await Or(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=Gn(t.output);return yield*Nr(this.executionDeps(),e,t,n)}return yield*kr(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 Fr(this.conversationHistory,this.conversationId)}getFullHistory(){return Ir(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Lr(this.conversationHistory,this.conversationId,e)}clearHistory(){Rr(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){zr(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){Br(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 Kr({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,qr({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 Gr({ctx:{config:this.config,aiProviders:this.aiProviders,tools:this.tools,agentFactory:this.agentFactory,conversationHistory:this.conversationHistory,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,eventService:this.eventService,logger:this.logger},setExecutionService:e=>{this.executionService=e},setFullyInitialized:e=>{this.isFullyInitialized=e}})}emitAgentEvent(e,t){wr(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}},_i=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 vi(e){return typeof e==`string`?e.length:0}var yi=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:vi(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:vi(n[0]),conversationId:e.conversationId,streaming:!0,options:$(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:W.CALL_START,completeEvent:W.CALL_COMPLETE,errorEvent:W.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 bi(e,t){let n=new yi(t);return n.configureStandardMethods(),n.wrap(e)}function xi(e,t,n){return function(r){return bi(r,{eventService:e,sourceType:t,sourceId:n})}}const Si={safe:`plan`,moderate:`default`,full:`acceptEdits`},Ci={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`}},wi={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`};function Ti(e){let t=e.replace(/[.+^${}()|[\]\\]/g,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function Ei(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 Di(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 Oi(e,t,n){let r=Ei(n);if(r.toolName!==e)return!1;if(r.argPattern===void 0)return!0;let i=Di(e,t);return i===void 0?!1:Ti(r.argPattern).test(i)}function ki(e,t,n,r={}){let{allow:i=[],deny:a=[]}=r;for(let n of a)if(Oi(e,t,n))return`deny`;for(let n of i)if(Oi(e,t,n))return`auto`;let o=Ci[n][e];return o===void 0?wi[n]:o}const Ai=1e6,ji={"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}},Mi=[{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 Ni(e){let t=ji[e];if(t)return t;for(let{pattern:t,price:n}of Mi)if(t.test(e))return n}function Pi(e,t,n){let r=Ni(e);if(r)return t/Ai*r.inputPerMillion+n/Ai*r.outputPerMillion}function Fi(e){let t=Ni(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}var Ii=class{type=`command`;execute(e,t){let r=(e.timeout??600)*1e3,i=JSON.stringify(t);return new Promise(a=>{let o=[],s=[],c=!1,l=Ln(),u=n(l.command,l.commandArgs(e.command),{cwd:t.cwd,env:{...process.env,...t.env}});u.stdout.on(`data`,e=>o.push(e)),u.stderr.on(`data`,e=>s.push(e)),u.stdin.on(`error`,()=>{}),u.stdin.write(i),u.stdin.end();let d=setTimeout(()=>{c||(c=!0,u.kill(`SIGTERM`),a({exitCode:1,stdout:``,stderr:`Hook timed out`}))},r);u.on(`close`,e=>{c||(c=!0,clearTimeout(d),a({exitCode:e??1,stdout:Buffer.concat(o).toString(`utf8`),stderr:Buffer.concat(s).toString(`utf8`)}))}),u.on(`error`,e=>{c||(c=!0,clearTimeout(d),a({exitCode:1,stdout:``,stderr:e.message}))})})}};function Li(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 Ri=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]=Li(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 zi(){return[new Ii,new Ri]}const Bi={deny:3,defer:2,ask:1,allow:0};function Vi(e){let t=e.trim();if(!t.startsWith(`{`))return null;try{return JSON.parse(t)}catch{return null}}function Hi(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 Ui(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 Wi(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??zi(),o=new Map;for(let e of a)o.set(e.type,e);let s=[],c=Ui(n),l=-1,u,d;for(let e of i){if(!Hi(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=Vi(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(`
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(`
10
- `):s.join(`
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 Bi){let e=Bi[n];if(e>l&&(l=e,u=n),n===`deny`)return{blocked:!0,reason:`Blocked by hook (permissionDecision: deny)`,stdout:s.join(`
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(`
13
- `)};return u!==void 0&&(f.permissionDecision=u),d!==void 0&&(f.updatedInput=d),f}export{P as AGENT_EVENTS,F as AGENT_EVENT_PREFIX,me as AbstractAIProvider,T as AbstractAgent,xe as AbstractEventService,wn as AbstractExecutor,E as AbstractManager,Cn as AbstractPlugin,Tn as AbstractTool,$r as AgentFactory,Qr as AgentTemplates,Be as AuthenticationError,Dt as CLAUDE_MODELS,h as CONFIRM_NO,m as CONFIRM_YES,St as CONTEXT_ESTIMATE_CHARS_PER_TOKEN,Ke as CacheIntegrityError,We as CircuitBreakerOpenError,B as ConfigurationError,ue as ConsoleLogger,er as ConversationHistory,$n as ConversationStore,Ce as DEFAULT_ABSTRACT_EVENT_SERVICE,Ot as DEFAULT_CONTEXT_WINDOW,At as DEFAULT_MAX_OUTPUT,Se as DefaultEventService,nr as ENV_REFERENCE_PREFIX,Y as EVENT_EMITTER_EVENTS,I as EXECUTION_EVENTS,L as EXECUTION_EVENT_PREFIX,qe as ErrorUtils,gr as EventEmitterPlugin,_i as EventHistoryModule,yi as ExecutionProxy,sr as InMemoryEventEmitterMetrics,tr as LocalExecutor,ji as MODEL_PRICES,Ci as MODE_POLICY,En as MessageConverter,Ue as ModelNotAvailableError,He as NetworkError,ke as ObservableEventService,_e as PluginCategory,U as PluginError,ve as PluginPriority,ze as ProviderError,Ve as RateLimitError,gi as Robota,z as RobotaError,j as SilentLogger,Ge as StorageError,De as StructuredEventService,Re as StructuredOutputError,Ae as TASK_EVENTS,je as TASK_EVENT_PREFIX,W as TOOL_EVENTS,G as TOOL_EVENT_PREFIX,Si as TRUST_TO_MODE,H as ToolExecutionError,r as TypeUtils,wi as UNKNOWN_TOOL_FALLBACK,Me as USER_EVENTS,Ne as USER_EVENT_PREFIX,V as ValidationError,X as Validator,o as assertProviderNativeWebToolsAvailable,Oe as bindEventServiceOwner,R as bindWithOwnerPath,Pi as calculateModelCost,A as chatEntryToMessage,un as collectAssistantUsageMetadata,Te as composeEventName,_ as confirmAction,Yn as createAssistantMessage,i as createDefaultProviderCapabilities,bi as createExecutionProxy,M as createLogger,Xn as createSystemMessage,Zn as createToolMessage,Jn as createUserMessage,Fi as estimateBlendedCostPer1000,wt as estimateContextTokensFromMessages,Ct as estimateSerializedContextTokens,ki as evaluatePermission,Bn as extractEnumValues,l as findProviderDefinition,ir as formatEnvReference,u as formatSupportedProviderTypes,Nt as formatTokenCount,pe as getGlobalLogLevel,ie as getMessagesForAPI,kt as getModelContextWindow,jt as getModelMaxOutput,Mt as getModelName,a as getProviderCapabilities,d as getProviderCredentialRequirement,Hn as getSchemaTypeName,S as getToolEstimatedDuration,C as getToolExecutionSteps,or as hasUsableSecretReference,Vn as hasValidationConstraints,oe as isAssistantMessage,k as isChatEntry,b as isConfirmed,we as isDefaultEventService,rr as isEnvReference,f as isImageGenerationProvider,x as isProgressReportingTool,se as isSystemMessage,ce as isToolMessage,ae as isUserMessage,p as isVideoGenerationProvider,N as logger,Ni as lookupModelPrice,re as messageToHistoryEntry,v as multiSelectAction,Gn as normalizeStructuredOutput,qn as parseStructuredResponseText,gt as readTokenUsageFromMessage,_t as readTokenUsageFromMetadata,ar as resolveEnvReference,Ln as resolvePlatformShell,Wi as runHooks,ee as selectAction,fe as setGlobalLogLevel,w as setToolProgressCallback,Mn as startPeriodicTask,Nn as stopPeriodicTask,ln as sumHistoryUsage,y as textAction,Kn as validateAgainstJsonSchema,Dn as validateAgentConfig,jn as validateApiKey,An as validateModelName,kn as validateProviderName,On as validateUserInput,xi as withEventEmission,Rn as zodToJsonSchema};
8
+ `),n.beginAssistant();let b=Go(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:ee}=Lo(a,n,i,p),S=ho(s,o.defaultModel.model,i),C=await Ro(_,o,s,f,a,n,p,i,b,u,x,ee,t=>void(e.providerFailure=t),S);if(C===null)return!0;let{assistantResponse:w,assistantToolCalls:T}=Co(C,i,a.conversationId,p,u);if(T.length>0&&(a.toolChoice??o.defaultModel?.toolChoice)===`none`)throw Error(`Provider returned tool calls despite toolChoice none; no tools were executed.`);await J(l,`afterProviderCall`,{messages:m,responseMessage:C},u),await J(l,`onMessageAdded`,{message:C},u);let te=typeof w.content==`string`&&w.content.trim().length>0;if(T.length===0&&!te)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let ne=Ko(w),re=ne?.inputTokens??0;re>0&&(e.cumulativeInputTokens=re);for(let e of T)n.appendToolCall(e);let ie=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(ie,{round:p,usageObservationId:b,executionId:i,providerId:Y(S,s),modelId:X(S,s.aiProviderInfo.model),...ne??{}});let E=n.getMessages().at(-1);if(a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:w}),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=w,T.length===0)return u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(w,i,p,r,v,y),!0;let D=await Uo(T,n,r,i,p,v,y,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs,a.traceContext);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 for agent ${a.conversationId}`),!1}function Jo(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 Yo(e,t){return t===0||e<t}async function Xo(e,t,n,r,i,a,o,s,c){let l=Jo(i,r);for(;Yo(o.currentRound,l)&&!(s?.aborted||(o.currentRound++,await qo(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 No(e,a,i,n,o,t,r,c.logger,l))}async function Zo(e,t,n,r,i,a,o,s,c,l,u){let d={...Ja(t,n,r,i.toolsExecuted,i.providerFailure),interrupted:o};await J(c,`afterRun`,{input:e,response:d.response,metadata:s?.metadata},l);let f={messages:d.messages,executionContext:{executionId:n,conversationId:a},executionResult:{response:d.response,duration:d.duration,...d.tokensUsed===void 0?{}:{tokensUsed:d.tokensUsed},toolsExecuted:d.toolsExecuted.length,success:d.success,toolCalls:d.toolsExecuted.map(e=>({name:e}))}};for(let e of[`afterExecution`,`afterConversation`,`afterToolExecution`])await J(c,e,f,l);return 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*Qo(e,t,n,r,i){let a=[],o=null,s=!1,c=null,l={result:null},u=new AbortController,d=r?.signal,f=d?AbortSignal.any([d,u.signal]):u.signal,p=r?.onTextDelta,m=e=>{a.push(e),p?.(e),o?.()},h=i(e,t,n,{...r,signal:f,onTextDelta:m}).then(e=>{l.result=e},e=>{c=e}).finally(()=>{s=!0,o?.()});try{for(;;){for(;a.length>0;)yield a.shift();if(s)break;await new Promise(e=>{o=()=>{o=null,e()}})}if(c!==null)throw c;if(l.result===null)throw Error(`[EXECUTION] streaming turn settled without a result`);return l.result}finally{u.abort(),await h}}function $o(e,t){return{executionId:e,...t===void 0?{}:{driverId:t}}}var es=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new La(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 Ka(r,this.logger,i),this.cacheService=a}setAskHandler(e){this.toolExecutionService.setAskHandler(e)}invokeRuntimeTool(e,t,n){return this.toolExecutionService.executeTool(e,t,n,`registered`)}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=co(),a=new Date,o=lo(r,`execute`),s=uo(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=io(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=oo(this.conversationHistory,o,t,n,i);try{let t=l.getMessages().length;l.addUserMessage(e,$o(i,r?.driverId));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 J(this.plugins,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},this.logger);let d={executionId:i,conversationId:o};u&&await J(this.plugins,`onMessageAdded`,{message:u,executionContext:d},this.logger),await J(this.plugins,`beforeExecution`,{messages:l.getMessages(),executionContext:d},this.logger),ao(c);let f={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};for(let e of l.getMessages())e.role===`assistant`&&(f.runningAssistantCount++,f.lastTrackedAssistantMessage=e);return await Xo(l,o,i,s,n,c,f,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),Zo(e,l,i,a,f,o,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){return Xt(e,r?.signal)?{response:``,messages:l.getMessages(),executionId:i,duration:Date.now()-a.getTime(),toolsExecuted:[],success:!0,interrupted:!0}:(await so(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){return yield*Qo(e,t,n,r,this.execute.bind(this))}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`)}};function ts(e){let t=new pa;if(e.aiProviders)for(let n of e.aiProviders)t.addProvider(n.name,n);return e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),t}async function ns(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.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 Jt&&c&&e.setEventService(c),r.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let r=await e.execute(t,n);return li(e.schema.name,r)}),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new ga(new ha({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new ma));let d=new es(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 rs(e){try{let t=await ns(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 is(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 as(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()),await n(`Tools disposed`,()=>e.tools.dispose()),await n(`AIProviders disposed`,()=>e.aiProviders.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}}var os=class{tail=Promise.resolve();async acquire(e){let t=this.tail,n=()=>{};if(this.tail=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 run(e,t){let n=await this.acquire(e);try{return await t()}finally{n()}}get drained(){return this.tail}};function ss(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??ls,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function cs(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new d(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel,r=n?.model??t.defaultModel;if(!r)throw new d(`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 d(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||ls(),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 ls(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function us(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var ds=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}}};function fs(e){let t=e,n=typeof t.initialize==`function`?t.initialize:void 0,r=typeof t.cleanup==`function`?t.cleanup:void 0;if(n!==void 0||r!==void 0)return{...n?{initialize:()=>n.call(e)}:{},...r?{cleanup:()=>r.call(e)}:{}}}function ps(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function ms(e){let t=[];for(let n of e){try{await n.run()}catch(e){let r=[];for(let e of t.reverse())if(e.undo!==void 0)try{await e.undo()}catch(t){r.push({step:e.name,error:t})}throw hs(e,n.name,r)}t.push(n)}}function hs(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var gs=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new ds,this.logger=M(`AgentFactory`),this.options=ss(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,n,r=!1){let i,a=this.admit();try{i=cs(n,this.options);let o=i;if(this.options.strictValidation){let e=Qt(i);if(!e.isValid)throw new t(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let s;if(await ms([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(o)},{name:`construct`,run:()=>{s=new e(o)}},{name:`initialize`,run:()=>s?fs(s)?.initialize?.():void 0,undo:()=>s?fs(s)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!s)throw new d(`Agent was not constructed`);this.activeAgents.set(a,s),us(this.creationStats,r)},undo:()=>{this.activeAgents.delete(a),this.creationStats.activeCount--,this.creationStats.totalCreated--,r?this.creationStats.fromTemplates--:this.creationStats.customConfigured--}},{name:`afterCreate`,run:()=>s?this.lifecycleEvents.afterCreate?.(s,o):void 0}]),this.pendingAgents.delete(a),!s)throw new d(`Agent was not constructed`);return this.logger.info(`Agent created successfully`,{agentId:a,model:i.defaultModel.model,provider:i.defaultModel.provider}),s}catch(e){this.pendingAgents.delete(a);let t=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&i&&await this.lifecycleEvents.onCreateError(t,i),this.logger.error(`Failed to create agent`,{error:t.message,model:n.defaultModel?.model,provider:n.defaultModel?.provider,hasTools:!!n.tools?.length}),t}}admit(){if(this.activeAgents.size+this.pendingAgents.size>=this.options.maxConcurrentAgents)throw new d(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);let e=this.options.idFactory(),t=0;for(;this.activeAgents.has(e)||this.pendingAgents.has(e);){if(t+=1,t>16)throw new d(`Agent id factory keeps returning ids that are already in use`);e=this.options.idFactory()}return this.pendingAgents.add(e),e}async createFromTemplate(e,t,n={}){let r=this.agentTemplates.getTemplate(t);if(!r)throw new d(`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{return await fs(t)?.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 Qt(e)}};function _s(e,t,n){if(!e.name||e.name.trim()===``)throw new d(`Module name is required`);if(!e.version||e.version.trim()===``)throw new d(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new d(`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 vs(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 d(`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 ys(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 bs(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 xs(){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 Ss(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 Cs(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 ws(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 Ts(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 Es=class{registeredTypes=new Map;logger;constructor(){this.logger=M(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new d(`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 d(`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 Ss(e,e=>this.getType(e))}resolveDependencies(e){return Cs(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return ws(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 xs())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 Ts(this.registeredTypes)}};const Ds={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var Os=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 Es,this.logger=M(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new d(`Cannot register modules during disposal`);if(_s(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new d(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await vs(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(Ds.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=ys(e,this.modules);if(n.length>0)throw new d(`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(Ds.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new d(`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 d(`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 d(`Module '${e}' not found`);if(!n.isInitialized())throw new d(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new d(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new d(`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 bs(this.modules,this.moduleStats)}},ks=class extends ci{version=`1.0.0`;aiProviders;tools;agentFactory;conversationHistory;moduleRegistry;eventEmitter;executionService;eventService;agentEventService;conversationId;logger;initializationPromise;destroyed=!1;isFullyInitialized=!1;startTime;configVersion=1;configUpdatedAt=Date.now();configManager;constructor(e){super(),this.config=e,this.conversationId=Bi(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=M(`Robota`,t?{level:t}:{}),this.startTime=Date.now(),ui(e),this.aiProviders=ts(e),this.tools=Vi(()=>this.config),this.agentFactory=new gs,this.conversationHistory=new hr,this.eventEmitter=Zi(),this.moduleRegistry=new Os(this.eventEmitter),this.eventService=e.eventService||Hr,this.agentEventService=q(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:Qi(this.conversationId,this.config.executionContext)});let n=Wi({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=n.moduleManager,this.pluginManager=n.pluginManager,this.configManager=n.configManager,Yi(this.config,(e,t)=>this.emitAgentEvent(e,t))}async ensureReady(){await this.ensureFullyInitialized()}async listRuntimeTools(){return await this.ensureReady(),this.tools.getTools()}async invokeRuntimeTool(e,t,n){await this.ensureReady();let r=[...Qi(this.conversationId,this.config.executionContext),{type:`tool`,id:n.executionId??e}];return this.executionService.invokeRuntimeTool(e,t,{...n,baseEventService:this.eventService,eventService:q(this.eventService,{ownerPath:r,ownerType:`tool`,ownerId:n.executionId??e}),ownerPath:r,ownerType:`tool`,ownerId:n.executionId})}async run(e,t={}){return this.assertNotDestroyed(),this.runQueue.run(t.signal,async()=>{await this.ensureFullyInitialized();try{if(t.output){let n=Vn(t.output);return await ia(this.executionDeps(),e,t,n)}return await ea(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory()}})}async*runStream(e,t={}){this.assertNotDestroyed();let n=await this.runQueue.acquire(t.signal);try{if(await this.ensureFullyInitialized(),t.output){let n=Vn(t.output);return yield*aa(this.executionDeps(),e,t,n)}return yield*ta(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new os;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 sa(this.conversationHistory,this.conversationId)}getFullHistory(){return ca(this.conversationHistory,this.conversationId)}addHistoryEntry(e){la(this.conversationHistory,this.conversationId,e)}clearHistory(){ua(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){da(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){fa(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)}getOfferedToolSchemas(){return this.tools.getOfferedTools()}getConfig(){return{...this.config}}swapDefaultProvider(e,t){this.aiProviders.addProvider(e.name,e),this.configManager.setModel({provider:e.name,model:t})}getStats(){return is({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.runQueue.drained,as({name:this.name,isFullyInitialized:this.isFullyInitialized,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,executionService:this.executionService,tools:this.tools,aiProviders:this.aiProviders,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 rs({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){Xi(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const As=1e4,js=25e3,Ms=5e5,Ns=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,Ps=Symbol.for(`@robota-sdk/tool-result-admitted`);var Fs=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function Is(e){return Object.getOwnPropertyDescriptor(e,Ps)?.value===!0}function Ls(e){return Object.defineProperty({...e},Ps,{value:!0})}function Rs(e){if(e.success)return typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;let t=e.data===void 0?``:typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;return`${e.error??``}${t}`}function zs(e){return Number.isSafeInteger(e)&&e>0}function Bs(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!zs(n)||!zs(r)||!zs(i)||n>=r||r>i||i>5e5)throw new Fs(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!zs(t))throw new Fs(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function Vs(e,t,n={},r){let{warningChars:i,hardChars:a}=Bs(n,r),o=Rs(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new Fs(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new Fs(`spill-write-failed`)}if(!Ns.test(e)||e.length>a)throw new Fs(`invalid-reference`);return Ls(t.success?{success:!0,data:e}:{success:!1,error:`Tool failure details: ${e}`})}return Ls(t)}var Hs=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}};const Us={STARTED:`started`,STEP_STARTED:`step_started`,STEP_COMPLETED:`step_completed`,COMPLETED:`completed`,FAILED:`failed`},Ws=`orchestration`;function Z(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function Gs(e){return typeof e==`string`?e.length:0}var Ks=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:Gs(n[0]),conversationId:e.conversationId,options:Z(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:Gs(n[0]),conversationId:e.conversationId,streaming:!0,options:Z(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:L.CALL_START,completeEvent:L.CALL_COMPLETE,errorEvent:L.CALL_ERROR,extractMetadata:(e,t,n)=>({toolName:Z(e.schema)?.name||e.constructor.name,parameters:n[0],parametersCount:Z(n[0])?Object.keys(Z(n[0])||{}).length:0,context:n[1]}),extractResult:e=>({result:typeof Z(e)?.data==`string`?Z(e)?.data||``:JSON.stringify(Z(e)?.data),success:Z(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 qs(e,t){let n=new Ks(t);return n.configureStandardMethods(),n.wrap(e)}function Js(e,t,n){return function(r){return qs(r,{eventService:e,sourceType:t,sourceId:n})}}const Ys={safe:`plan`,moderate:`default`,full:`acceptEdits`},Xs=`inherit-allowlist`;function Zs(e){let t;for(let n=0;n<e.length;n+=1){let r=e[n];if(t===`'`){r===`'`&&(t=void 0);continue}if(r===`\\`){n+=1;continue}let i=e[n+1];if(r==="`"||r===`$`&&i===`(`)return!0;if(t===`"`){r===`"`&&(t=void 0);continue}if(r===`'`||r===`"`){t=r;continue}if(r===`;`||r===`|`||r===`
9
+ `||(r===`<`||r===`>`)&&i===`(`)return!0;if(r===`&`){let t=e[n-1];if(t!==`>`&&t!==`<`&&i!==`>`)return!0}}return!1}function Qs(e){let t={segments:[],current:``,quote:void 0,substitutionDepth:0};for(let n=0;n<e.length;n+=1){let r=ec(t,e,n);if(r!==void 0){n=r;continue}let i=tc(t,e,n);if(i!==void 0){n=i;continue}if(nc(t,e[n]))continue;let a=rc(t,e,n);if(a!==void 0){n=a;continue}t.current+=e[n]}return $s(t),t.segments}function $s(e){let t=e.current.trim();t!==``&&e.segments.push(t),e.current=``}function ec(e,t,n){let r=t[n];if(e.quote===`'`)return e.current+=r,r===`'`&&(e.quote=void 0),n;if(r===`\\`){let i=t[n+1];return e.current+=i===void 0?r:r+i,n+1}}function tc(e,t,n){let r=t[n];if(r==="`")return $s(e),n;if(r===`$`&&t[n+1]===`(`)return $s(e),e.substitutionDepth+=1,n+1}function nc(e,t){return e.quote===`"`?(e.current+=t,t===`"`&&(e.quote=void 0),!0):t===`'`||t===`"`?(e.quote=t,e.current+=t,!0):!1}function rc(e,t,n){let r=t[n];if((r===`<`||r===`>`)&&t[n+1]===`(`)return $s(e),e.substitutionDepth+=1,n+1;if(r===`)`&&e.substitutionDepth>0)return $s(e),--e.substitutionDepth,n;if(r===`;`||r===`|`||r===`
10
+ `||r===`&`&&ic(t,n))return $s(e),n}function ic(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const ac=/[.+^${}()|[\]\\]/g;function oc(e){let t=e.replace(ac,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function sc(e,t,n){let r=oc(e);return n===`deny`?r.test(t)||Qs(t).some(e=>r.test(e))?`match`:`no-match`:r.test(t)?e.includes(`*`)&&Zs(t)?`no-match`:`match`:`no-match`}function cc(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(ac,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function lc(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function uc(e){let t=e.replace(/\\/g,`/`),n=t.startsWith(`/`),r=[];for(let e of t.split(`/`))if(e!==``&&e!==`.`){if(e===`..`){r.length>0&&r[r.length-1]!==`..`?r.pop():n||r.push(`..`);continue}r.push(e)}let i=(n?`/`:``)+r.join(`/`);return(i===``?`.`:i).replace(/^[A-Za-z]:(?=\/|$)/,e=>e.toLowerCase())}function dc(e,t){let n=uc(e),r=uc(t);return lc(n)&&!lc(r)?`unevaluable`:cc(n).test(r)?`match`:`no-match`}const fc=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,pc=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),mc={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function hc(e){return e.replace(/\.$/,``).toLowerCase()}function gc(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function _c(e){let t=hc(e).replace(/\*\*(?:\.\*\*)+/g,`**`).split(`.`),n=[],r=`[^.]+(?:\\.[^.]+)*`;for(let[e,i]of t.entries()){let a=e===0,o=e===t.length-1;if(i===`**`){a&&o?n.push(r):o?n.push(`(?:\\.${r})?`):n.push(`${a?``:`\\.`}(?:${r}\\.)?`);continue}let s=!a&&t[e-1]===`**`,c=a||s?``:`\\.`;if(i===`*`)n.push(`${c}${r}`);else if(i.includes(`**`))return null;else if(i.includes(`*`))n.push(`${c}${i.replace(ac,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=gc(i);if(e===null)return null;n.push(`${c}${e.replace(ac,`\\$&`)}`)}}return RegExp(`^${n.join(``)}$`)}function vc(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function yc(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!pc.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function bc(e,t){if(e.includes(`*`)){let n=_c(e);return n===null?`unevaluable`:n.test(t)?`match`:`no-match`}let n;try{n=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return hc(n)===t?`match`:`no-match`}function xc(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?mc[n]:t.port)}function Sc(e,t){let n=vc(t),r=vc(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:cc(r).test(n)?`match`:`no-match`}function Cc(e,t){let n=fc.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=yc(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=bc(i,hc(s.hostname));return l===`match`?xc(a,s,c)?o===void 0?`match`:Sc(o,s.pathname):`no-match`:l}const wc={plan:{inspect:`auto`,modify:`deny`,execute:`deny`},default:{inspect:`auto`,modify:`approve`,execute:`approve`},acceptEdits:{inspect:`auto`,modify:`auto`,execute:`approve`},bypassPermissions:{inspect:`auto`,modify:`auto`,execute:`auto`},auto:{inspect:`auto`,modify:`auto`,execute:`approve`}},Tc={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},Ec=[`.git`,`.robota`,`.claude`,`.agents`],Dc=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function Oc(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function kc(e){let t=[];for(let n of Oc(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function Ac(e){let t=kc(e),n=t[t.length-1];if(n!==void 0&&Dc.includes(n))return!0;for(let e=0;e<t.length;e+=1){let n=t[e];if(Ec.includes(n)){if((n===`.robota`||n===`.claude`)&&t[e+1]===`worktrees`&&t[e+2]!==void 0){e+=2;continue}return!0}}return!1}function jc(e){let t=[];for(let n of Oc(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function Mc(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const Nc=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function Pc(e,t){let n=Mc(e),r=Nc.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=jc(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=jc(n);else{if(t.cwd===void 0)return!1;i=jc(`${t.cwd}/${n}`)}if(Oc(i).length<=1||t.homeDirectory!==void 0&&i===jc(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=jc(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const Fc=new Set([`rm`,`rmdir`]),Ic=new Map([[`sudo`,new Set([`-u`,`-g`,`-h`,`-p`,`-C`,`-D`,`-r`,`-t`,`-U`,`-T`])],[`nice`,new Set([`-n`])],[`env`,new Set([`-u`,`-C`,`-S`])],[`command`,new Set],[`builtin`,new Set],[`nohup`,new Set],[`time`,new Set]]);function Lc(e){let t=0,n;for(;t<e.length;){let r=e[t];if(/^[A-Za-z_]\w*=/.test(r)){t+=1;continue}let i=Ic.get(r);if(i!==void 0){n=i,t+=1;continue}if(n!==void 0&&r.startsWith(`-`)){t+=n.has(r)?2:1;continue}return t}return t}function Rc(e,t){return Qs(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=Lc(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!Fc.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:Pc(e,t))})}const zc=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),Bc=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),Vc={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},Hc=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,Uc=[`--dereference`,`--dereference-recursive`,`--dereference-args`,`--dereference-command-line`,`--file`,`--files0-from`,`--exclude-from`,`--from-file`,`--to-file`,`--contents`,`--ignore-revs-file`,`--output`,`--output-directory`,`--ext-diff`,`--no-index`,`--open-files-in-pager`];function Wc(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return Uc.some(e=>e.startsWith(t))}function Gc(e,t){if(rl(t).some(e=>Hc.test(e.text)||Wc(e.text)))return!0;if(e===`find`)return rl(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=Vc[e];return n!==void 0&&rl(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const Kc=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),qc=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),Jc=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),Yc=new Set([`/dev/null`]),Xc=/[A-Za-z0-9_./:=@+,*?[\]~-]/,Zc=new Set([`$`,"`",`\\`,`!`]),Qc=new Set([`*`,`?`,`[`]);function $c(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||el(e)}function el(e){let t=e.split(`/`),n=e=>/[*?[]/.test(e);if(t.slice(0,-1).some(n))return!0;let r=t[t.length-1];return n(r)&&/^[.?[]/.test(r)}function tl(e){let t;for(let n of e){if(t===`'`){n===`'`&&(t=void 0);continue}if(n===`$`||n==="`"||n===`\\`)return!0;if(t===`"`){n===`"`&&(t=void 0);continue}if(n===`'`||n===`"`)t=n;else if(n===`(`||n===`)`||n===`{`||n===`}`)return!0}return!1}function nl(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!Yc.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||$c(n))&&(s=!0):t.push({text:n,expands:r}),o=void 0,n=``,r=!1,!1)};for(let t=0;t<e.length&&!s;t+=1){let l=e[t];if(a===`'`){l===`'`?a=void 0:n+=l;continue}if(a===`"`){l===`"`?a=void 0:Zc.has(l)?s=!0:n+=l;continue}if(l===`'`||l===`"`){a=l,i=!0;continue}if(l===` `||l===` `){c();continue}if(l===`>`||l===`<`||l===`&`&&e[t+1]===`>`){i&&!/^\d+$/.test(n)&&c(),n=``,r=!1,i=!1,l===`&`&&(t+=1);let a=l===`&`?`>`:l,u=e[t+1];if(a===`<`&&(u===`<`||u===`>`)){s=!0;break}if((u===a||u===`|`)&&(t+=1,u=e[t+1]),u===`&`&&l!==`&`){t+=1,o=`duplicate`;continue}o=a===`>`?`output`:`input`;continue}if(!Xc.test(l)){s=!0;break}Qc.has(l)&&(r=!0),n+=l,i=!0}return a!==void 0&&(s=!0),c(),o!==void 0&&(s=!0),{words:t,refused:s}}function rl(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function il(e){return e.every(e=>!e.expands&&!Bc.has(e.text))}function al(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>qc.has(e.text));return t.every(e=>qc.has(e.text)||Jc.has(e.text))&&(n||t.length===e.length)}function ol(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!Kc.has(t.text)||n.some(e=>e.expands)||n.some(e=>/^-[XO]/.test(e.text))||n.some(e=>/^--(output|ext-diff|open-files-in-pager|no-index)/.test(e.text))?!1:t.text===`branch`?al(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function sl(e){let[t,...n]=e;return t===void 0||t.expands||t.text.includes(`=`)||t.text.includes(`/`)||n.some(e=>/^[@=]/.test(e.text))||n.some(e=>e.expands)?!1:t.text===`echo`?!0:n.some(e=>$c(e.text))||Gc(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:zc.has(t.text)?!0:t.text===`find`?il(n):t.text===`git`&&ol(n)}const cl=new Set([`echo`,`which`,`git`]);function ll(e,t){let n;for(let[r,...i]of e)if(!cl.has(r.text))for(let e of i){if(e.text===`--`)continue;if(t===void 0)return!1;let i=t(n,e.text);if(i===void 0)return!1;r.text===`cd`&&(n=i)}return!0}function ul(e,t={}){if(t.otherDirectory===!0||e.length>1e4||tl(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=Qs(e);if(n.length===0)return!1;let r=n.map(nl);if(r.some(e=>e.refused||!sl(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:ll(r.map(e=>e.words),t.resolveInWorkspace)}function dl(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()}}const Q=new Map;function fl(e,t){Q.set(e,{...Q.get(e),...t})}function pl(){Q.clear()}function ml(e){return Q.get(e)??{}}function hl(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=oc(e);return n.some(e=>r.test(e))}function gl(e,t){let n=/^([A-Za-z_]\w*):([\s\S]*)$/.exec(t);if(n===null)return;let r=n[1],i=Q.get(e);if(i?.argument?.key===r)return`primary`;if(i?.parameters?.includes(r)===!0)return{name:r,value:n[2]}}function _l(e,t){if(!Object.prototype.hasOwnProperty.call(t,e.name))return`no-match`;let n=t[e.name];return n===void 0?`no-match`:typeof n!=`string`&&typeof n!=`number`&&typeof n!=`boolean`?`unevaluable`:oc(e.value).test(String(n))?`match`:`no-match`}function vl(e,t){return t.some(t=>{let n=dl(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&hl(n.toolName,e)})}function yl(e){return Q.get(e)?.argument?.key}function bl(e,t){let n=yl(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function xl(e,t,n,r=`allow`){return n.some(n=>Cl(e,t,n,r)===`match`)}function Sl(e,t,n){return n.some(n=>Cl(e,t,n,`deny`)===`unevaluable`)}function Cl(e,t,n,r){let i=dl(n);if(!hl(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=gl(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?_l(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=bl(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return Cc(i.argPattern,s);case`path`:return dc(i.argPattern,s);case`command`:return sc(i.argPattern,s,r);case`text`:return oc(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function wl(e,t,n){let r=Q.get(e),i=r?.argument;if(i===void 0)return!1;let a=t[i.key];return typeof a==`string`?i.kind===`command`?Rc(a,n):i.kind===`path`&&r?.riskClass===`modify`&&Ac(a):!1}function Tl(e,t,n,r){return xl(e,t,n,`deny`)||Sl(e,t,n)||wl(e,t,r)}function El(e,t,n={},r={}){return Sl(e,t,n.deny??[])||Tl(e,t,n.ask??[],r)}const Dl=[`workingDirectory`,`cwd`];function Ol(e,t,n){let r=Q.get(e);if(r?.riskClass!==`execute`||r.argument?.kind!==`command`)return r?.riskClass;let i=t[r.argument.key];return typeof i==`string`&&ul(i,{otherDirectory:Dl.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function kl(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=Ol(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return xl(e,t,o,`deny`)||i.ceiling!==void 0&&!xl(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0?`deny`:Sl(e,t,o)?n===`plan`?`deny`:`approve`:Tl(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||xl(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?Tc[n]:wc[n][c]}function Al(e,t={}){let n=t.taskDeny??[];switch(e){case`deny`:return{ceiling:[],askAll:!1,allow:[],deny:n};case`prompt`:return{askAll:!0,allow:[],deny:n};case`preapproved`:{let e=t.taskAllow??[];return{ceiling:e,askAll:!1,allow:e,deny:n}}case`inherit-allowlist`:return{ceiling:t.parentAllow??[],askAll:!1,allow:[],deny:n};default:throw Error(`unknown permission policy: ${String(e)}`)}}const jl=/^[A-Za-z_]\w*:(?!\/\/)/;function Ml(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function Nl(e,t=`deny`){let n=e.trim();if(n===``)return`is empty`;if(n.includes(`(`)&&!n.endsWith(`)`))return`opens "(" without closing it`;let{toolName:r,argPattern:i}=dl(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!Ml(r))return`globs the tool name without a literal "<server>__" prefix, which an allow rule may not do`;if(i===void 0||i===`*`||i===`**`)return;if(i===``)return`has an empty argument pattern; write Tool or Tool(*) instead`;if(r.includes(`*`))return t===`allow`&&jl.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=gl(r,i);if(a!==void 0&&a!==`primary`)return t===`allow`?`matches a named parameter, which only deny and ask rules may do`:void 0;let o=ml(r);if(!(o.parameters===void 0&&jl.test(i)&&gl(r,i)===void 0)){if(o.argument===void 0)return o.riskClass===void 0?void 0:`tool "${r}" declares no argument key, so an argument-scoped pattern can never be evaluated`;if(o.argument.kind===`url`&&Cc(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path] that "${r}" is matched by`}}function Pl(e,t=`deny`){let n=[];for(let r of e){let e=Nl(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function Fl(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=dl(n.trim());if(r===void 0||e.includes(`*`))continue;let i=ml(e),a=gl(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&jl.test(r)){t.push({pattern:n,reason:`names no parameter of "${e}" (${i.parameters.join(`, `)}), so it is read as an ordinary argument pattern`});continue}if(a!==`primary`)continue;let o=ml(e).argument?.key??``;t.push({pattern:n,reason:`names "${e}"'s primary field "${o}", so it asks on every call; write ${e}(${r.slice(o.length+1)}) instead`})}return t}function Il(e){return(e??[]).map(e=>`${e}(*)`)}function Ll(e,t){let n=Il(t.allowedTools),r=Pl(n,`allow`);if(r.length>0){let e=r.map(({pattern:e,reason:t})=>`"${e}" ${t}`).join(`; `);throw Error(`Invalid preset allowedTools: ${e}.`)}return{allow:[...e.allow,...n],deny:[...new Set([...e.deny,...Il(t.deniedTools)])]}}const Rl=[`Bash`,`Shell`,`BackgroundProcess`],zl=[`Agent`],Bl=[...Rl,...zl,`ExecuteCommand`,`Computer`],Vl=`python.node.deno.bun.ruby.perl.php.bash.sh.zsh.fish.pwsh.powershell.cmd.env.xargs.eval.exec.sudo.timeout.nohup.nice.time.command.setsid.stdbuf.watch.ssh.docker.podman.find`.split(`.`),Hl=[`npm run`,`npm run-script`,`npm exec`,`npm x`,`npx`,`pnpm`,`pnpx`,`yarn`,`bunx`,`uv run`,`uvx`,`pipx run`,`cargo run`,`go run`,`make`,`just`].map(e=>e.split(` `)),Ul=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function Wl(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function Gl(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=Wl(e[0]);if(Vl.some(t=>n(t,r,e.length===1)))return!0;for(let i of Hl){let a=Math.min(i.length,e.length);if(!i.slice(0,a).every((t,i)=>n(t,i===0?r:e[i],i===e.length-1)))continue;if(e.length<=i.length)return!0;let o=e.slice(i.length);for(;o.length>0&&(o[0].startsWith(`-`)||Ul.has(o[0]));)o=o.slice(1);return o.length===0||Gl(o,t)}return!1}function Kl(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return Gl(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function ql(e){let{toolName:t,argPattern:n}=dl(e),r=e=>e.some(e=>hl(t,e));return r(zl)?!0:t.includes(`*`)?r(Bl):Bl.includes(t)||ml(t).riskClass===`execute`?n===void 0||n.trim()===`*`||Rl.includes(t)&&Kl(n):!1}function Jl(e){return e.filter(e=>!ql(e))}const Yl=1e6,Xl={"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}},Zl=[{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 Ql(e){let t=Object.hasOwn(Xl,e)?Xl[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of Zl)if(t.test(e))return n}function $l(e,t,n){let r=Ql(e);if(r)return t/Yl*r.inputPerMillion+n/Yl*r.outputPerMillion}function eu(e){let t=Ql(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function tu(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 nu(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 ru(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([import(`./command-executor-cI7XJ374.js`),import(`./http-executor-CHy6UeBU.js`)]);return[new e,new t]}async function iu(e,t,n,r,i){if(!e)return{blocked:!1,stdout:``};let a=new Set,o=[],s=()=>({...a.size>0&&{unknownHookTypes:[...a].sort()},...o.length>0&&{errors:[...o]}}),c=e[t];if(!c||c.length===0)return{blocked:!1,stdout:``};let l=r??await ru(),u=new Map;for(let e of l)u.set(e.type,e);let d=[],f=nu(n),p=-1,m,h;for(let e of c){if(!tu(e,f))continue;let r=e.env?{...n,env:{...n.env,...e.env}}:n;for(let n of e.hooks){let e=u.get(n.type);if(!e){a.add(n.type);continue}let c=n.type===`command`&&i!==void 0?await e.execute(n,r,i):await e.execute(n,r);if(c.outcome===`deny`)return{blocked:!0,reason:c.reason||`Blocked by hook`,stdout:d.join(`
11
+ `),...s()};if(c.outcome===`error`){o.push(c);continue}let l=ne(c.stdout,t);if(d.push(...l.context),l.blockReason!==void 0)return{blocked:!0,reason:l.blockReason,stdout:d.join(`
12
+ `),...l.permissionDecision===`deny`&&{permissionDecision:`deny`},...s()};if(l.permissionDecision!==void 0){let e=te[l.permissionDecision];e>p&&(p=e,m=l.permissionDecision),e>=p&&l.updatedInput!==void 0&&(h=l.updatedInput)}}}let g={blocked:!1,stdout:d.join(`
13
+ `)};m!==void 0&&(g.permissionDecision=m),h!==void 0&&(g.updatedInput=h);let{unknownHookTypes:_,errors:v}=s();return _!==void 0&&(g.unknownHookTypes=_),v!==void 0&&(g.errors=v),g}var au=class extends Error{guardrailName;guardrailReason;constructor(e,t){super(t),this.guardrailName=e,this.guardrailReason=t,this.name=`GuardrailBlock`}},ou=class{type=`guardrail`;guardrails;constructor(e){this.guardrails=e instanceof Map?new Map(e):new Map(Object.entries(e))}async execute(e,t){if(e.type!==`guardrail`)return{outcome:`error`,source:`guardrail`,kind:`malformed-response`,reason:`GuardrailExecutor received a '${e.type}' definition`};if(e.guardrails){let t=e.guardrails.filter(e=>!this.guardrails.has(e));if(t.length>0)return{outcome:`deny`,source:`guardrail`,reason:`Unknown guardrail(s) referenced but not registered: ${t.join(`, `)}`}}let n=this.selectGuardrails(e.guardrails);if(n.length===0)return{outcome:`allow`,source:`guardrail`,stdout:``};try{await Promise.all(n.map(async([e,n])=>{let r;try{r=await n(t)}catch(t){throw new au(e,`Guardrail "${e}" errored: ${t instanceof Error?t.message:String(t)}`)}if(!r.pass)throw new au(e,r.reason??`Guardrail "${e}" blocked the turn`)}))}catch(e){if(e instanceof au)return{outcome:`deny`,source:`guardrail`,reason:e.guardrailReason};throw e}return{outcome:`allow`,source:`guardrail`,stdout:``}}selectGuardrails(e){if(!e)return[...this.guardrails.entries()];let t=[];for(let n of e){let e=this.guardrails.get(n);e&&t.push([n,e])}return t}};function $(e){return{posture:`advisory`,enforcementReachable:!1,rationale:`Fire-and-forget at ${e}: the result is never awaited, so no posture can be honoured here.`}}function su(e,t){return{posture:`advisory`,enforcementReachable:!1,rationale:`Awaited at ${e} but only ${t} is read; \`blocked\` is never consulted.`}}function cu(e){for(let t of Object.values(e))Object.freeze(t);return Object.freeze(e)}const lu=cu({PreToolUse:{posture:`enforcing`,enforcementReachable:!0,rationale:"The tool-execution gate. `runPreToolHook` awaits the result and turns `blocked` into a denial, so a hook that reached no verdict must not read as approval (tracker issue #2075)."},SessionEnd:su(`session-lifecycle.ts`,`nothing`),PreCompact:su(`compaction-orchestrator.ts`,`nothing`),UserPromptSubmit:su(`session-run.ts`,"`stdout`"),PostToolUse:$(`tool-hook-helpers.ts`),SessionStart:$(`session-lifecycle.ts`),PostCompact:$(`session-history-ops.ts`),Stop:$(`session-run.ts`),StopFailure:$(`session-run.ts`),SubagentStart:$(`background-task-hooks.ts`),SubagentStop:$(`background-task-hooks.ts`),WorktreeCreate:$(`worktree-subagent-runner.ts`),WorktreeRemove:$(`worktree-subagent-runner.ts`),PreModelCall:$(`session-run.ts`),PostModelCall:$(`session-run.ts`),PermissionDecision:$(`permission-enforcer.ts`)});function uu(e){return lu[e].posture===`enforcing`}export{P as AGENT_EVENTS,zt as AGENT_EVENT_PREFIX,Pt as AbstractAIProvider,Re as AbstractAgent,Br as AbstractEventService,qt as AbstractExecutor,ze as AbstractManager,Kt as AbstractPlugin,Jt as AbstractTool,gs as AgentFactory,ds as AgentTemplates,v as AuthenticationError,De as CONFIRM_NO,Ee as CONFIRM_YES,bi as CONTEXT_ESTIMATE_CHARS_PER_TOKEN,h as CacheIntegrityError,f as CircuitBreakerOpenError,d as ConfigurationError,Dt as ConsoleLogger,hr as ConversationHistory,mr as ConversationStore,Hr as DEFAULT_ABSTRACT_EVENT_SERVICE,Xs as DEFAULT_BACKGROUND_PERMISSION_POLICY,ki as DEFAULT_CONTEXT_WINDOW,Fi as DEFAULT_MAX_OUTPUT,js as DEFAULT_TOOL_RESULT_HARD_CHARS,As as DEFAULT_TOOL_RESULT_WARNING_CHARS,ii as DEFERRED_WITHOUT_LOADER_MESSAGE,Vr as DefaultEventService,$n as ENV_REFERENCE_PREFIX,z as EVENT_EMITTER_EVENTS,F as EXECUTION_EVENTS,I as EXECUTION_EVENT_PREFIX,rn as ErrorUtils,Ar as EventEmitterPlugin,Hs as EventHistoryModule,Ks as ExecutionProxy,ni as FunctionTool,ou as GuardrailExecutor,xr as InMemoryEventEmitterMetrics,vr as LocalExecutor,Ms as MAX_TOOL_RESULT_CHARS,ce as MODEL_EFFORT_VALUES,Xl as MODEL_PRICES,Zt as MessageConverter,a as ModelNotAvailableError,S as NetworkError,Us as ORCHESTRATION_EVENTS,Ws as ORCHESTRATION_EVENT_PREFIX,Jr as ObservableEventService,pt as PARAMETER_SCHEMA_KEYWORDS,vt as PERMISSIVE_TOOL_SCHEMA_PROFILE,Ec as PROTECTED_DIRECTORY_NAMES,Dc as PROTECTED_FILE_NAMES,Xr as PROVIDER_CALL_EVENTS,Zr as PROVIDER_FALLBACK_EVENTS,Lt as PluginCategory,T as PluginError,Rt as PluginPriority,s as ProviderError,wc as RISK_CLASS_POLICY,w as RateLimitError,ks as Robota,r as RobotaError,Yr as SPAN_EVENTS,ti as SPAN_EVENT_PREFIX,yt as STRICT_TOOL_SCHEMA_PROFILE,e as SameToolInputLoopError,Tt as SilentLogger,C as StorageError,Kr as StructuredEventService,i as StructuredOutputError,Gi as TASK_EVENTS,Ki as TASK_EVENT_PREFIX,$r as TOOL_BODY_EVENTS,L as TOOL_EVENTS,Bt as TOOL_EVENT_PREFIX,ei as TOOL_PERMISSION_EVENTS,dt as TOOL_SCHEMA_PROJECTION_MAX_DEPTH,ft as TOOL_SCHEMA_PROJECTION_MAX_NODES,Te as TOOL_SEARCH_TOOL_NAME,Ys as TRUST_TO_MODE,n as ToolExecutionError,Mr as ToolRegistry,Fs as ToolResultAdmissionError,E as TypeUtils,Tc as UNCLASSIFIED_TOOL_FALLBACK,qi as USER_EVENTS,Ji as USER_EVENT_PREFIX,l as UnsupportedShellError,t as ValidationError,B as Validator,Vs as admitToolResult,Jl as allowRulesForAutoMode,Ll as applyPresetToolLists,ae as assertProviderNativeWebToolsAvailable,si as assertResidentToolRemains,qr as bindEventServiceOwner,q as bindWithOwnerPath,g as buildTraceparent,$l as calculateModelCost,Ge as chatEntryToMessage,bn as classifyProviderFailure,pl as clearRegisteredToolProfiles,ot as closeObjectSchemas,Ko as collectAssistantUsageMetadata,Wr as composeEventName,ke as confirmAction,ur as createAssistantMessage,x as createBoundedOutput,D as createDefaultProviderCapabilities,qs as createExecutionProxy,Zn as createImageProviderFromDefinition,M as createLogger,ue as createModelEffortOutcome,ar as createProviderFromConfig,Jn as createRecordEnvResolver,dr as createSystemMessage,fr as createToolMessage,lr as createUserMessage,Qn as createVideoProviderFromDefinition,re as decodeHookVerdict,eu as estimateBlendedCostPer1000,Ci as estimateContextTokensFromMessages,xi as estimateSerializedContextTokens,Si as estimateToolSchemaTokens,kl as evaluatePermission,kn as extractEnumValues,Pl as findInvalidPermissionPatterns,we as findMediaProviderDefinition,Ni as findModelDefinition,Fl as findPermissionPatternWarnings,he as findProviderDefinition,tr as formatEnvReference,ge as formatSupportedProviderTypes,Ri as formatTokenCount,Gr as generateSpanId,At as getGlobalLogLevel,Mt as getGlobalLoggerSink,qe as getMessagesForAPI,Pi as getModelContextWindow,Ii as getModelMaxOutput,Li as getModelName,me as getProviderCapabilities,_e as getProviderCredentialRequirement,jn as getSchemaTypeName,Fe as getToolEstimatedDuration,Ie as getToolExecutionSteps,ml as getToolPermissionProfile,rr as hasUsableSecretReference,An as hasValidationConstraints,Ct as hashToolSchema,Xt as isAbortFailure,Ye as isAssistantMessage,ql as isBroadExecutionAllowRule,O as isChatEntry,Ne as isConfirmed,Ur as isDefaultEventService,uu as isEnforcing,er as isEnvReference,xe as isImageGenerationProvider,Ce as isMediaProviderDefinition,y as isMintedSpanId,le as isModelEffort,Pe as isProgressReportingTool,Ac as isProtectedPath,ul as isReadOnlyCommandLine,ps as isRegistryTransactionError,Xe as isSystemMessage,vl as isToolDeniedOutright,Ze as isToolMessage,Je as isUserMessage,Se as isVideoGenerationProvider,fs as lifecycleOf,N as logger,Ql as lookupModelPrice,xl as matchesAnyPattern,Ke as messageToHistoryEntry,ye as modelDeclaresCapability,je as multiSelectAction,ir as normalizeProviderConfig,Vn as normalizeStructuredOutput,p as outboundTraceContextFor,gl as parseParameterRule,Gn as parseStructuredResponseText,Oo as peerDriverOf,ko as printablePeerDriver,G as processEnvResolver,Al as projectPermissionPolicy,wt as projectToolSchema,o as providerCallSpanId,Qr as readModelFallbackNotice,dn as readProviderFailureDetails,pi as readTokenUsageFromMessage,mi as readTokenUsageFromMetadata,ji as registerModelMetadata,fl as registerToolPermissionProfile,Rc as removesCriticalPath,El as requiresFreshApproval,nr as resolveEnvReference,Xn as resolveMediaProviderConfig,ve as resolveModelCapabilities,be as resolveModelCapability,pe as resolveModelEffort,u as resolvePlatformShell,qn as resolveStructuredOutputCapability,iu as runHooks,ms as runRegistryTransaction,Ae as selectAction,kt as setGlobalLogLevel,jt as setGlobalLoggerSink,Le as setToolProgressCallback,br as shellArgumentForDisplay,_ as spanIdFromMintedId,Qs as splitCommandSegments,xn as startPeriodicTask,Sn as stopPeriodicTask,b as subprocessTraceEnvironment,Wo as sumHistoryUsage,Me as textAction,mn as toProviderError,hl as toolNameMatches,Il as toolNamesToPatterns,c as toolTraceContextFor,m as traceEnvFor,ee as traceHeadersFor,W as validateAgainstJsonSchema,Qt as validateAgentConfig,nn as validateApiKey,tn as validateModelName,Nl as validatePermissionPattern,en as validateProviderName,$t as validateUserInput,Is as wasToolResultAdmitted,Js as withEventEmission,Mn as zodToJsonSchema};
14
14
  //# sourceMappingURL=index.js.map