@robota-sdk/agent-core 3.0.0-beta.81 → 3.0.0-beta.83
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +109 -0
- package/README.md +14 -2
- package/dist/browser/index.d.ts +78 -4
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +9 -9
- package/dist/browser/index.js.map +1 -1
- package/dist/node/{index-CiFlpr7-.d.cts → index-D1_Mak-n.d.cts} +79 -5
- package/dist/node/index-D1_Mak-n.d.cts.map +1 -0
- package/dist/node/{index-DFlMw376.d.ts → index-D4iJ5IsN.d.ts} +79 -5
- package/dist/node/index-D4iJ5IsN.d.ts.map +1 -0
- package/dist/node/index.cjs +9 -9
- package/dist/node/index.d.cts +2 -2
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.js +9 -9
- package/dist/node/index.js.map +1 -1
- package/dist/node/testing/index.d.cts +1 -1
- package/dist/node/testing/index.d.ts +1 -1
- package/package.json +6 -2
- package/dist/node/index-CiFlpr7-.d.cts.map +0 -1
- package/dist/node/index-DFlMw376.d.ts.map +0 -1
package/dist/node/index.cjs
CHANGED
|
@@ -1,13 +1,13 @@
|
|
|
1
|
-
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-DWNI8pZO.cjs"),t=require("./project-tool-schema-DrDjGKnH.cjs"),n=require("./verdict-decoder-Estx9MtY.cjs");let r=require("jssha");r=e.n(r,1);const i={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>i.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>i.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date||i.isPrimitive(e)||i.isArray(e)||i.isObject(e)};function a(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 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}`:``}const l=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function u(e){return typeof e==`string`&&l.includes(e)}function d(e,t){return{resolution:e,...t}}const f=new Map(l.map((e,t)=>[e,t]));function p(e,t){return{selection:e,effective:null,disposition:`not-applied`,fingerprint:`${t}|${e}|not-applied`}}function m(e,t,n){let r=e?.models[t];if(!r)return p(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`)}:p(n,t);if(r.supportedEfforts.includes(n))return{selection:n,effective:n,disposition:`exact`,fingerprint:i(n,`exact`)};let a=f.get(n),o=r.supportedEfforts.filter(e=>(f.get(e)??1/0)<(a??-1)).at(-1);return o?{selection:n,effective:o,disposition:`clamped`,fingerprint:i(o,`clamped`)}:p(n,t)}function h(e){let t=typeof e.supportsTools==`function`&&e.supportsTools();return e.getCapabilities?.()??a(t)}function g(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function _(e){return e.map(e=>{if(!e.aliases||e.aliases.length===0)return e.type;let t=e.aliases.length===1?`alias`:`aliases`;return`${e.type} (${t}: ${e.aliases.join(`, `)})`}).join(`, `)}function v(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function y(e,t){if(e)return e.deviations?.[t]?.capabilities??e.vendorDefault}function b(e,t,n){let r=y(e,t);if(!(!r||r.length===0))return r.includes(n)}function x(e,t,n,r){return b(e,t,n)??r}function S(e){return`generateImage`in e&&typeof e.generateImage==`function`}function C(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function w(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 T(e,t){return e.find(e=>e.type===t)}const E=`ToolSearch`,ee=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function te(e,t,n){return{id:e,title:t,description:n?.description,options:ee,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function ne(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 re(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 ie(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 ae(e){return e.type===`answer`&&e.values.includes(`yes`)}function oe(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function se(e,t){if(oe(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function ce(e,t){if(oe(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function le(e,t){return oe(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}var ue=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}},de=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 fe(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 pe(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 me(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*he(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*ge(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*he(t,n,r,i)}function D(e){return e.category===`chat`}function O(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 _e(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function ve(e){return e.filter(D).map(O)}function ye(e){return e.role===`user`}function be(e){return e.role===`assistant`}function xe(e){return e.role===`system`}function Se(e){return e.role===`tool`}function Ce(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:m(t?.(),s.model,s.effort)}}function we(e,t,n){if(t)return;let r=e.effortResolution,i=e.onModelEffortOutcome;if(r===void 0||i===void 0)return;let a=d(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 Te(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 Ee(e,t,n){let r,i=Ce(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=we(i,e.effortTable!==void 0,t),Te(e.name,i,r),{content:a.content??null,toolCalls:be(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*De(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=Ce(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:be(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=we(i,e.effortTable!==void 0,t),Te(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const Oe={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var ke=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}},Ae=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??ke.getInstance().getGlobalSink()??Oe}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),je(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),je(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),je(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),je(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||ke.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 je(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function k(e,t={}){return new Ae(e,t)}function Me(e){ke.getInstance().setGlobalLevel(e)}function Ne(){return ke.getInstance().getGlobalLevel()}function Pe(e){ke.getInstance().setGlobalSink(e)}function Fe(){return ke.getInstance().getGlobalSink()}const A=k(`agents`),Ie=k(`ToolSchemaProjection`);var Le=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=Oe){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 Re(n,t);if(e.done||(await ze(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return Ee(this,this.logger,e)}async*generateStreamingResponse(e){yield*De(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return a(this.supportsTools())}validateConfig(){return!0}validateMessages(e){fe(e)}validateTools(e){pe(e)}projectionProfile(){}projectTools(e,n){let r=this.projectionProfile();if(!r||!e)return e;let i=[];for(let a of e){let e=t.s(a,r);if(e.outcome!==`rejected`){i.push(e.tool);continue}let o=`${this.name}${n}${a.name}${t.o(a.parameters)}`;if(this.quarantinedToolSchemas.has(o))continue;this.quarantinedToolSchemas.set(o,!0);let{path:s,keyword:c,reason:l}=e.rejection??{path:``,keyword:``,reason:`rejected`};Ie.warn(`tool_schema_quarantined provider=${this.name} model=${n} tool=${a.name} path=${s} keyword=${c} reason=${l}`)}return i}validateNativeWebTools(e){o(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return me(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*ge(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Re(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 ze(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let Be=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 j={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},He=`agent`,M={START:`start`,COMPLETE:`complete`,ERROR:`error`,ASSISTANT_MESSAGE_START:`assistant_message_start`,ASSISTANT_MESSAGE_COMPLETE:`assistant_message_complete`,USER_MESSAGE:`user_message`,TOOL_RESULTS_TO_LLM:`tool_results_to_llm`,TOOL_RESULTS_READY:`tool_results_ready`},N=`execution`,P={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},Ue=`tool`,We=`unknown_tool`,Ge=`argument_decode_error`,F=(e,t)=>`${e}.${t}`,Ke={START:F(N,M.START),COMPLETE:F(N,M.COMPLETE),ERROR:F(N,M.ERROR)},qe={CALL_START:F(Ue,P.CALL_START),CALL_COMPLETE:F(Ue,P.CALL_COMPLETE),CALL_ERROR:F(Ue,P.CALL_ERROR)},Je={EXECUTION_START:F(He,j.EXECUTION_START),EXECUTION_COMPLETE:F(He,j.EXECUTION_COMPLETE),EXECUTION_ERROR:F(He,j.EXECUTION_ERROR),CREATED:F(He,j.CREATED)},I={EXECUTION_START:Ke.START,EXECUTION_COMPLETE:Ke.COMPLETE,EXECUTION_ERROR:Ke.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:qe.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:Je.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Je.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Je.EXECUTION_ERROR,AGENT_CREATED:Je.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 Ye=class{enabled=!0;category=`custom`;priority=Ve.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=k(`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(I.MODULE_INITIALIZE_START,I.MODULE_INITIALIZE_COMPLETE,I.MODULE_INITIALIZE_ERROR,I.MODULE_EXECUTION_START,I.MODULE_EXECUTION_COMPLETE,I.MODULE_EXECUTION_ERROR,I.MODULE_DISPOSE_START,I.MODULE_DISPOSE_COMPLETE,I.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let 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}},Xe=class{logger;constructor(e=Oe){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`)}},Ze=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??Oe}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 Qe(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function $e(e,t){if(t?.aborted===!0)return!0;if(!Qe(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return Qe(n)&&n.name===`AbortError`}var et=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`)}},L=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 tt=L.validateAgentConfig,nt=L.validateUserInput,rt=L.validateProviderName,it=L.validateModelName,at=L.validateApiKey;var ot=class{static isRecoverable(e){return e instanceof n.T&&e.recoverable}static getErrorCode(e){return e instanceof n.T?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof n.T?e:e instanceof Error?new n.y(e.message||t):new n.y(typeof e==`string`?e:t)}static wrapProviderError(e,t,r){let i=e instanceof Error?e:Error(String(e));return new n.C(`Failed to ${r}`,t,i,{operation:r})}};const st=new Set([`rate_limit_error`]),ct=new Set([`overloaded_error`]),lt=new Set([`authentication_error`,`permission_error`]),ut=new Set([`model_not_found`]),dt=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),ft=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]);function R(e){return typeof e==`object`&&e?e:void 0}function z(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function pt(e){let t=R(e);if(t===void 0)return{};let r=typeof t.status==`number`?t.status:void 0,i=R(t.error),a=R(i?.error),o=z(i,`type`),s=z(t,`type`)??z(a,`type`)??(o===`error`?void 0:o)??(r!==void 0&&!(e instanceof n.T)?z(t,`code`):void 0);return{...r!==void 0&&{status:r},...s!==void 0&&{type:s}}}function mt(e){let t=R(e)?.constructor;if(typeof t!=`function`)return;let n=t.name;return typeof n==`string`&&n.length>0?n:void 0}function ht(e){return $e(e)||mt(e)===`APIUserAbortError`}function gt(e,t,r){if(e instanceof n.T||ht(e))return e;let i=e instanceof Error?e:Error(typeof e==`string`?e:``),a=pt(e);return a.status===429||a.type!==void 0&&st.has(a.type)?new n.w(i.message||`${t} rate limit exceeded.`,void 0,t):new n.C(`${r}: ${i.message||`request failed`}`,t,i,void 0,a)}function _t(e){if(e instanceof n.x)return!0;let t=R(e);if(t===void 0)return!1;let r=z(t,`code`);if(r!==void 0&&dt.has(r))return!0;let i=mt(e);if(i!==void 0&&ft.has(i))return!0;let a=z(t,`name`);return a!==void 0&&ft.has(a)?!0:a===`TypeError`&&z(t,`message`)===`fetch failed`}function vt(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=R(i);r!==void 0&&e.push(r.originalError,r.cause)}r=e}return t}const B=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function yt(e){return e instanceof n.C?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:pt(e)}function bt(e){if(e instanceof n.T)return!1;let t=z(R(e),`code`);return t!==void 0&&ut.has(t)}function xt(e){if(e instanceof n.w)return B(!1,`rate-limit`);if(e instanceof n.g)return B(!1,`authentication`);if(e instanceof n.b)return B(!0,`model-unavailable`);let{status:t,type:r}=yt(e);return t===429||r!==void 0&&st.has(r)?B(!1,`rate-limit`):t===401||t===403||r!==void 0&<.has(r)?B(!1,`authentication`):t===402?B(!1,`billing`):(t===void 0||t===400||t===404)&&(bt(e)||r!==void 0&&ut.has(r))?B(!0,`model-unavailable`):_t(e)?B(!1,`network`):t===529||r!==void 0&&ct.has(r)?B(!0,`overloaded`):t===503?B(!0,`service-unavailable`):t===500||t===502||t===504?B(!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 St(e,t){let n=vt(e);if(t?.aborted===!0||n.some(e=>ht(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=xt(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 Ct(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 wt(e){e&&clearInterval(e)}function Tt(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:return}}function Et(e){let t=Dt(e);return t.typeName===`ZodObject`?t:void 0}function Dt(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=V(e,`${String(t.typeName)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function V(e,t){let n=e._def;if(!n)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function Ot(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 kt(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=V(n.schema,`ZodEffects inner type`);return n.typeName!==`ZodOptional`&&n.typeName!==`ZodNullable`&&n.typeName!==`ZodDefault`}function At(e){let t=V(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 jt(e){let t=V(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function Mt(e){let t=V(e,`Zod schema`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function Nt(e,t={}){let n=V(e,`Zod schema`),r=Et(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 Pt(r,t.allowAdditionalProperties)}function Pt(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=H(a,t),kt(a)&&r.push(e);let a=Tt(e,t);return{type:`object`,properties:n,required:r,...a!==void 0&&{additionalProperties:a}}}function H(e,t){let n=V(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:H(n.type,t),...r};case`ZodObject`:return{...Pt(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{...It(n.values),...r};case`ZodDate`:return{type:`string`,format:`date-time`,...r};case`ZodLiteral`:return{...Ft(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=>H(e,t)),...r}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...H(n.schema,t),...r};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[H(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{...H(n.innerType,t),...r};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:H(n.valueType,t),...r}:{type:`object`,additionalProperties:{type:`string`},...r};default:throw Error(Rt(String(n.typeName)))}}function Ft(e){let t=Ot(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 It(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 Lt={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 Rt(e){return`${e} cannot be carried by the universal JSON-schema subset: ${Lt[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 zt(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function Bt(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 Vt(e){if(zt(e))return{name:`structured_output`,jsonSchema:Nt(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:Bt(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=U(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function U(e,t,n){let r=[],i=e.type;if(e.anyOf)return Ut(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${W(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(...U(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(Ht(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(...U(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${W(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...U(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 ${W(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${W(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 ${W(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${W(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function Ht(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function Ut(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>U(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 W(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function Wt(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 Gt(e,t){return b(e,t,`json_schema`)===!0?`response_schema`:b(e,t,`json_object`)===!0?`json_object`:`none`}function Kt(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=Gt(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 qt(e){return t=>e[t]}function Jt(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function Yt(e,t={},n=G){let r=e.credentialRequirement,i=t.baseUrl??Jt(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=Jt(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 Xt(e,t={},n=G){if(e.createImageProvider===void 0)return;let r=Yt(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return S(t)?t:void 0}catch{return}}function Zt(e,t={},n=G){if(e.createVideoProvider===void 0)return;let r=Yt(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return C(t)?t:void 0}catch{return}}const Qt=`$ENV:`;function $t(e){return e.startsWith(Qt)}function en(e){return`${Qt}${e}`}function tn(e,t=G){if(!$t(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function nn(e,t=G){return e===void 0||e.length===0?!1:tn(e,t)!==void 0}function rn(e,t,n=G){let r=g(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:tn(a,n),baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...o!==void 0&&{options:o}}}function an(e,t){let n=g(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${_(t)}`);let r=v(n);if(r!==void 0&&!on(e,r))throw Error(`Provider ${e.name} requires ${cn(r)}`);return n.createProvider(e)}function on(e,t){return t.anyOf.some(t=>sn(e,t))}function sn(e,t){let n=e[t];return n!==void 0&&n.length>0}function cn(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 ln(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 un(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 dn(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 fn(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 pn=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(_e(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(ln(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(un(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(dn(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>D(e)&&xe(O(e)),i=this.entries.filter(e=>!r(e)),a=_e(dn(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(fn(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(D).map(O)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(D).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(D);if(e.length<=this.maxMessages)return;let t=e.map(O),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=>!D(e)||o.has(e.id))}},mn=class{history;pendingAssistant=null;constructor(e=0){this.history=new pn({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 be(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
|
|
1
|
+
Object.defineProperty(exports,Symbol.toStringTag,{value:`Module`});const e=require("./rolldown-runtime-DWNI8pZO.cjs"),t=require("./project-tool-schema-DrDjGKnH.cjs"),n=require("./verdict-decoder-Estx9MtY.cjs");let r=require("jssha");r=e.n(r,1);const i={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>i.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>i.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date||i.isPrimitive(e)||i.isArray(e)||i.isObject(e)};function a(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 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}`:``}const l=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function u(e){return typeof e==`string`&&l.includes(e)}function d(e,t){return{resolution:e,...t}}const f=new Map(l.map((e,t)=>[e,t]));function p(e,t){return{selection:e,effective:null,disposition:`not-applied`,fingerprint:`${t}|${e}|not-applied`}}function m(e,t,n){let r=e?.models[t];if(!r)return p(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`)}:p(n,t);if(r.supportedEfforts.includes(n))return{selection:n,effective:n,disposition:`exact`,fingerprint:i(n,`exact`)};let a=f.get(n),o=r.supportedEfforts.filter(e=>(f.get(e)??1/0)<(a??-1)).at(-1);return o?{selection:n,effective:o,disposition:`clamped`,fingerprint:i(o,`clamped`)}:p(n,t)}function h(e){let t=typeof e.supportsTools==`function`&&e.supportsTools();return e.getCapabilities?.()??a(t)}function g(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function _(e){return e.map(e=>{if(!e.aliases||e.aliases.length===0)return e.type;let t=e.aliases.length===1?`alias`:`aliases`;return`${e.type} (${t}: ${e.aliases.join(`, `)})`}).join(`, `)}function v(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function y(e,t){if(e)return e.deviations?.[t]?.capabilities??e.vendorDefault}function b(e,t,n){let r=y(e,t);if(!(!r||r.length===0))return r.includes(n)}function x(e,t,n,r){return b(e,t,n)??r}function S(e){return`generateImage`in e&&typeof e.generateImage==`function`}function C(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function w(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 T(e,t){return e.find(e=>e.type===t)}const E=`ToolSearch`,ee=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function te(e,t,n){return{id:e,title:t,description:n?.description,options:ee,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function ne(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 re(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 ie(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 ae(e){return e.type===`answer`&&e.values.includes(`yes`)}function oe(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function se(e,t){if(oe(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function ce(e,t){if(oe(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function le(e,t){return oe(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}var ue=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}},de=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 fe(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 pe(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 me(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*he(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*ge(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*he(t,n,r,i)}function D(e){return e.category===`chat`}function O(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 _e(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function ve(e){return e.filter(D).map(O)}function ye(e){return e.role===`user`}function be(e){return e.role===`assistant`}function xe(e){return e.role===`system`}function Se(e){return e.role===`tool`}function Ce(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:m(t?.(),s.model,s.effort)}}function we(e,t,n){if(t)return;let r=e.effortResolution,i=e.onModelEffortOutcome;if(r===void 0||i===void 0)return;let a=d(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 Te(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 Ee(e,t,n){let r,i=Ce(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=we(i,e.effortTable!==void 0,t),Te(e.name,i,r),{content:a.content??null,toolCalls:be(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*De(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=Ce(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:be(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=we(i,e.effortTable!==void 0,t),Te(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const Oe={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var ke=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}},Ae=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??ke.getInstance().getGlobalSink()??Oe}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),je(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),je(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),je(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),je(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||ke.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 je(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function k(e,t={}){return new Ae(e,t)}function Me(e){ke.getInstance().setGlobalLevel(e)}function Ne(){return ke.getInstance().getGlobalLevel()}function Pe(e){ke.getInstance().setGlobalSink(e)}function Fe(){return ke.getInstance().getGlobalSink()}const A=k(`agents`),Ie=k(`ToolSchemaProjection`);var Le=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=Oe){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 Re(n,t);if(e.done||(await ze(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return Ee(this,this.logger,e)}async*generateStreamingResponse(e){yield*De(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return a(this.supportsTools())}validateConfig(){return!0}validateMessages(e){fe(e)}validateTools(e){pe(e)}projectionProfile(){}projectTools(e,n){let r=this.projectionProfile();if(!r||!e)return e;let i=[];for(let a of e){let e=t.s(a,r);if(e.outcome!==`rejected`){i.push(e.tool);continue}let o=`${this.name}${n}${a.name}${t.o(a.parameters)}`;if(this.quarantinedToolSchemas.has(o))continue;this.quarantinedToolSchemas.set(o,!0);let{path:s,keyword:c,reason:l}=e.rejection??{path:``,keyword:``,reason:`rejected`};Ie.warn(`tool_schema_quarantined provider=${this.name} model=${n} tool=${a.name} path=${s} keyword=${c} reason=${l}`)}return i}validateNativeWebTools(e){o(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return me(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*ge(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Re(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 ze(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let Be=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 j={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},He=`agent`,M={START:`start`,COMPLETE:`complete`,ERROR:`error`,ASSISTANT_MESSAGE_START:`assistant_message_start`,ASSISTANT_MESSAGE_COMPLETE:`assistant_message_complete`,USER_MESSAGE:`user_message`,TOOL_RESULTS_TO_LLM:`tool_results_to_llm`,TOOL_RESULTS_READY:`tool_results_ready`},N=`execution`,P={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},Ue=`tool`,We=`unknown_tool`,Ge=`argument_decode_error`,F=(e,t)=>`${e}.${t}`,Ke={START:F(N,M.START),COMPLETE:F(N,M.COMPLETE),ERROR:F(N,M.ERROR)},qe={CALL_START:F(Ue,P.CALL_START),CALL_COMPLETE:F(Ue,P.CALL_COMPLETE),CALL_ERROR:F(Ue,P.CALL_ERROR)},Je={EXECUTION_START:F(He,j.EXECUTION_START),EXECUTION_COMPLETE:F(He,j.EXECUTION_COMPLETE),EXECUTION_ERROR:F(He,j.EXECUTION_ERROR),CREATED:F(He,j.CREATED)},I={EXECUTION_START:Ke.START,EXECUTION_COMPLETE:Ke.COMPLETE,EXECUTION_ERROR:Ke.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:qe.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:Je.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Je.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Je.EXECUTION_ERROR,AGENT_CREATED:Je.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 Ye=class{enabled=!0;category=`custom`;priority=Ve.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=k(`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(I.MODULE_INITIALIZE_START,I.MODULE_INITIALIZE_COMPLETE,I.MODULE_INITIALIZE_ERROR,I.MODULE_EXECUTION_START,I.MODULE_EXECUTION_COMPLETE,I.MODULE_EXECUTION_ERROR,I.MODULE_DISPOSE_START,I.MODULE_DISPOSE_COMPLETE,I.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let 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}},Xe=class{logger;constructor(e=Oe){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`)}},Ze=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??Oe}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 Qe(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function L(e,t){if(t?.aborted===!0)return!0;if(!Qe(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return Qe(n)&&n.name===`AbortError`}function $e(e=`aborted`,t){let n=t===void 0?Error(e):Error(e,{cause:t});return n.name=`AbortError`,n}var et=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`)}},R=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 tt=R.validateAgentConfig,nt=R.validateUserInput,rt=R.validateProviderName,it=R.validateModelName,at=R.validateApiKey;var ot=class{static isRecoverable(e){return e instanceof n.T&&e.recoverable}static getErrorCode(e){return e instanceof n.T?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof n.T?e:e instanceof Error?new n.y(e.message||t):new n.y(typeof e==`string`?e:t)}static wrapProviderError(e,t,r){let i=e instanceof Error?e:Error(String(e));return new n.C(`Failed to ${r}`,t,i,{operation:r})}};const st=new Set([`rate_limit_error`]),ct=new Set([`overloaded_error`]),lt=new Set([`authentication_error`,`permission_error`]),ut=new Set([`model_not_found`]),dt=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),ft=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]);function z(e){return typeof e==`object`&&e?e:void 0}function B(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function pt(e){let t=z(e);if(t===void 0)return{};let r=typeof t.status==`number`?t.status:void 0,i=z(t.error),a=z(i?.error),o=B(i,`type`),s=B(t,`type`)??B(a,`type`)??(o===`error`?void 0:o)??(r!==void 0&&!(e instanceof n.T)?B(t,`code`):void 0);return{...r!==void 0&&{status:r},...s!==void 0&&{type:s}}}function mt(e){let t=z(e)?.constructor;if(typeof t!=`function`)return;let n=t.name;return typeof n==`string`&&n.length>0?n:void 0}function ht(e){return L(e)||mt(e)===`APIUserAbortError`}function gt(e,t,r){if(e instanceof n.T||ht(e))return e;let i=e instanceof Error?e:Error(typeof e==`string`?e:``),a=pt(e);return a.status===429||a.type!==void 0&&st.has(a.type)?new n.w(i.message||`${t} rate limit exceeded.`,void 0,t):new n.C(`${r}: ${i.message||`request failed`}`,t,i,void 0,a)}function _t(e){if(e instanceof n.x)return!0;let t=z(e);if(t===void 0)return!1;let r=B(t,`code`);if(r!==void 0&&dt.has(r))return!0;let i=mt(e);if(i!==void 0&&ft.has(i))return!0;let a=B(t,`name`);return a!==void 0&&ft.has(a)?!0:a===`TypeError`&&B(t,`message`)===`fetch failed`}function vt(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=z(i);r!==void 0&&e.push(r.originalError,r.cause)}r=e}return t}const V=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function yt(e){return e instanceof n.C?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:pt(e)}function bt(e){if(e instanceof n.T)return!1;let t=B(z(e),`code`);return t!==void 0&&ut.has(t)}function xt(e){if(e instanceof n.w)return V(!1,`rate-limit`);if(e instanceof n.g)return V(!1,`authentication`);if(e instanceof n.b)return V(!0,`model-unavailable`);let{status:t,type:r}=yt(e);return t===429||r!==void 0&&st.has(r)?V(!1,`rate-limit`):t===401||t===403||r!==void 0&<.has(r)?V(!1,`authentication`):t===402?V(!1,`billing`):(t===void 0||t===400||t===404)&&(bt(e)||r!==void 0&&ut.has(r))?V(!0,`model-unavailable`):_t(e)?V(!1,`network`):t===529||r!==void 0&&ct.has(r)?V(!0,`overloaded`):t===503?V(!0,`service-unavailable`):t===500||t===502||t===504?V(!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 St(e,t){let n=vt(e);if(t?.aborted===!0||n.some(e=>ht(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=xt(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 Ct(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 wt(e){e&&clearInterval(e)}function Tt(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:return}}function Et(e){let t=Dt(e);return t.typeName===`ZodObject`?t:void 0}function Dt(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=H(e,`${String(t.typeName)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function H(e,t){let n=e._def;if(!n)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function Ot(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 kt(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=H(n.schema,`ZodEffects inner type`);return n.typeName!==`ZodOptional`&&n.typeName!==`ZodNullable`&&n.typeName!==`ZodDefault`}function At(e){let t=H(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 jt(e){let t=H(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function Mt(e){let t=H(e,`Zod schema`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function Nt(e,t={}){let n=H(e,`Zod schema`),r=Et(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 Pt(r,t.allowAdditionalProperties)}function Pt(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=U(a,t),kt(a)&&r.push(e);let a=Tt(e,t);return{type:`object`,properties:n,required:r,...a!==void 0&&{additionalProperties:a}}}function U(e,t){let n=H(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:U(n.type,t),...r};case`ZodObject`:return{...Pt(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{...It(n.values),...r};case`ZodDate`:return{type:`string`,format:`date-time`,...r};case`ZodLiteral`:return{...Ft(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=>U(e,t)),...r}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...U(n.schema,t),...r};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[U(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{...U(n.innerType,t),...r};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:U(n.valueType,t),...r}:{type:`object`,additionalProperties:{type:`string`},...r};default:throw Error(Rt(String(n.typeName)))}}function Ft(e){let t=Ot(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 It(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 Lt={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 Rt(e){return`${e} cannot be carried by the universal JSON-schema subset: ${Lt[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 zt(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function Bt(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 Vt(e){if(zt(e))return{name:`structured_output`,jsonSchema:Nt(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:Bt(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 Ut(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${Wt(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(Ht(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 ${Wt(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 ${Wt(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${Wt(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 ${Wt(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${Wt(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function Ht(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function Ut(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 Wt(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function Gt(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 Kt(e,t){return b(e,t,`json_schema`)===!0?`response_schema`:b(e,t,`json_object`)===!0?`json_object`:`none`}function qt(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=Kt(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 Jt(e){return t=>e[t]}function Yt(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function Xt(e,t={},n=G){let r=e.credentialRequirement,i=t.baseUrl??Yt(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=Yt(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 Zt(e,t={},n=G){if(e.createImageProvider===void 0)return;let r=Xt(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return S(t)?t:void 0}catch{return}}function Qt(e,t={},n=G){if(e.createVideoProvider===void 0)return;let r=Xt(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return C(t)?t:void 0}catch{return}}const $t=`$ENV:`;function en(e){return e.startsWith($t)}function tn(e){return`${$t}${e}`}function nn(e,t=G){if(!en(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function rn(e,t=G){return e===void 0||e.length===0?!1:nn(e,t)!==void 0}function an(e,t,n=G){let r=g(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:nn(a,n),baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...o!==void 0&&{options:o}}}function on(e,t){let n=g(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${_(t)}`);let r=v(n);if(r!==void 0&&!sn(e,r))throw Error(`Provider ${e.name} requires ${ln(r)}`);return n.createProvider(e)}function sn(e,t){return t.anyOf.some(t=>cn(e,t))}function cn(e,t){let n=e[t];return n!==void 0&&n.length>0}function ln(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 un(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 dn(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 fn(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 pn(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 mn=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(_e(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(un(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(dn(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(fn(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>D(e)&&xe(O(e)),i=this.entries.filter(e=>!r(e)),a=_e(fn(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(pn(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(D).map(O)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(D).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(D);if(e.length<=this.maxMessages)return;let t=e.map(O),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=>!D(e)||o.has(e.id))}},hn=class{history;pendingAssistant=null;constructor(e=0){this.history=new mn({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 be(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
|
|
2
2
|
|
|
3
|
-
[This response was interrupted by the user]`),be(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),Se(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},hn=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||0,this.maxConversations=e.maxConversations||50,this.logger=k(`ConversationHistory`)}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new mn(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 gn(){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 _n(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 vn=class extends Xe{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=gn(),r=await this.withRetry(async()=>(n=gn(),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),_n(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=gn(),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);_n(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 yn=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function bn(e){return yn.test(e)?e:void 0}var xn=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Sn(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new n.S(`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 n.S(`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 n.S(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function Cn(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 wn(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 Tn(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function En(e,t,n,r){let{listenerCounts:i,totalListeners:a}=Tn(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 Dn(e,t,r,i,a,o,s){e.has(t)||e.set(t,[]);let c=e.get(t);if(c.length>=o)throw new n.S(`Maximum listeners (${o}) exceeded for event type: ${t}`,s,{eventType:t,currentListeners:c.length});c.push({id:r,listener:i,once:a?.once??!1,...a?.filter&&{filter:a.filter}})}function On(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 kn(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 An=class extends Ye{name=`EventEmitterPlugin`;version=`1.0.0`;pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=k(`EventEmitterPlugin`),this.metrics=e.metrics??new xn,Sn(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[I.AGENT_EXECUTION_START,I.AGENT_EXECUTION_COMPLETE,I.AGENT_EXECUTION_ERROR,I.TOOL_BEFORE_EXECUTE,I.TOOL_AFTER_EXECUTE,I.TOOL_SUCCESS,I.TOOL_ERROR],maxListeners:e.maxListeners??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(I.AGENT_EXECUTION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messageCount:e.messages?.length||0,...e.config&&{config:e.config}}})}async afterExecution(e,t){await this.emit(I.AGENT_EXECUTION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{duration:t?.duration,tokensUsed:t?.tokensUsed,toolsExecuted:t?.toolsExecuted}})}async beforeConversation(e){await this.emit(I.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(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(I.CONVERSATION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{response:t.content||t.response,tokensUsed:t.usage?.totalTokens||t.tokensUsed,toolCalls:t.toolCalls?.map(e=>({id:e.id||``,name:e.name||``,arguments:JSON.stringify(e.arguments||{}),result:String(e.result||``)}))}})}async beforeToolExecution(e,t){t&&await this.emit(I.TOOL_BEFORE_EXECUTE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.toolName,toolId:t.executionId,arguments:JSON.stringify(t.parameters??{})}})}async afterToolExecution(e,t){if(!(!t.toolCalls||t.toolCalls.length===0))for(let n of t.toolCalls){let r=n.result===null?I.TOOL_ERROR:I.TOOL_SUCCESS,i=kn(e,n,t.duration);await this.emit(r,i),await this.emit(I.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(I.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}})}on(e,t,n){let r=`handler_${this.nextHandlerId++}`;return Dn(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 On(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 wn(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>Cn(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 En(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 jn=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var Mn=class{tools=new Map;register(e){if(!e.schema?.name)throw new n.A(`Tool must have a valid schema with name`);let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&A.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),A.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)){A.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),A.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 A.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(),A.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 n.A(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new n.A(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new n.A(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new n.A(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))Nn(t,n);if(e.parameters.required){let t=e.parameters.properties||{};for(let r of e.parameters.required)if(!t[r])throw new n.A(`Required parameter "${r}" is not defined in properties`)}}};function Nn(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new n.A(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>Nn(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new n.A(`Parameter "${e}" must declare a type or anyOf`);if(!jn.includes(t.type))throw new n.A(`Parameter "${e}" has invalid type "${t.type}"`);if(t.properties)for(let[n,r]of Object.entries(t.properties))Nn(`${e}.${n}`,r);t.items&&Nn(`${e}[]`,t.items)}function Pn(e,t,r){let i=U(r,t,`$`);if(i.length>0)throw new n.k(`output does not match the declared outputSchema: ${i.join(`; `)}`,e,void 0,{outputSchemaIssues:i})}function Fn(e,t,n){let r=In(e,t,n);return r?[r]:U(n,t,`Parameter "${e}"`)}function In(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 ${Ln(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${Ln(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${Ln(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${Ln(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${Ln(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 Ln(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function Rn(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(...Fn(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...Fn(t,a,e))}return i}function zn(e,t,n,r){let i=Rn(e,t,n,r);return{isValid:i.length===0,errors:i}}var Bn=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)}},Vn=class extends Bn{emit(e,t,n){}};const Hn=new Vn;function Un(e){return e===Hn||e instanceof Vn}function Wn(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 Gn(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var Kn=class extends Bn{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??Gn()},i=Wn(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 Kn(e,t)}function qn(e,t){return q(e,t)}var Jn=class extends Bn{emit(e,t,n){this.notifyListeners(e,t,n)}};const Yn={COMPLETED:`span_completed`},Xn={COMPLETED:`provider_call_completed`},Zn={SWITCHED:`provider_fallback`};function Qn(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 $n={COMPLETED:`tool_body_completed`},er={DECIDED:`tool_permission_decided`};var tr=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 r=this.schema.name;if(!this.validate(e))throw new n.A(`Invalid parameters for tool "${r}": ${Rn(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let i=Date.now(),a;try{a=await this.fn(e,t)}catch(i){throw i instanceof n.k||i instanceof n.A?i:new n.k(`Function tool execution failed: ${i instanceof Error?i.message:String(i)}`,r,i instanceof Error?i:Error(String(i)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let o=Date.now()-i;if(this.schema.outputSchema&&Pn(r,a,this.schema.outputSchema),this.eventService){let e={timestamp:new Date,spanId:Gn(),durationMs:o,op:r};this.eventService.emit(Yn.COMPLETED,e)}return{success:!0,data:a,metadata:{executionTime:o,toolName:r,parameters:e}}}validate(e){return Rn(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return zn(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new n.A(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new n.A(`Tool function is required and must be a function`);if(!this.schema.name)throw new n.A(`Tool schema must have a name`)}};const nr=`at least one tool must stay resident; all tools cannot be deferred`,rr=`a tool schema was withheld but no ${E} tool is offered; register the loader or turn tool search off`;function ir(e){return e.deferLoading===!0}function ar(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!ir(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(nr);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(rr);return r}function or(e){if(e.length>0&&e.every(ir))throw Error(nr)}var sr=class extends ue{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 cr(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.k(`${t.error??`Tool execution failed`}${r}`,e)}if(t.data===void 0)throw new n.k(`Tool execution succeeded but returned no data`,e);return t.data}function lr(e){if(!e.name)throw new n.y(`Agent name is required`,{component:`Robota`});if(!e.aiProviders||e.aiProviders.length===0)throw new n.y(`At least one AI provider is required`,{component:`Robota`});if(!e.defaultModel)throw new n.y(`Default model configuration is required`,{component:`Robota`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new n.y(`Default model must specify both provider and model`,{component:`Robota`});let t=e.aiProviders.map(e=>e.name),r=t.filter((e,n)=>t.indexOf(e)!==n);if(r.length>0)throw new n.y(`Duplicate AI provider names: ${r.join(`, `)}`,{component:`Robota`,duplicates:r});if(!t.includes(e.defaultModel.provider))throw new n.y(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`Robota`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var ur=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 n.y(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],r=this.getEventService();for(let n of e){r&&n.setEventService(r),this.getTools().addTool(n.schema,async(e,t)=>{if(!t)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let r=await n.execute(e,t);return cr(n.schema.name,r)});let e=n.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let i=this.getConfig();i.tools=e,this.setConfig(i);let a=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(j.CONFIG_UPDATED,{parameters:{tools:t,systemMessage:i.systemMessage,provider:i.defaultModel.provider,model:i.defaultModel.model,temperature:i.defaultModel.temperature,maxTokens:i.defaultModel.maxTokens},metadata:{version:a}}),{version:a}}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 n.y("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 n.y(`Both provider and model are required`,{component:`Robota`});let t=this.getAIProviders(),r=t.getProviderNames();if(!r.includes(e.provider))throw new n.y(`AI Provider '${e.provider}' not found. Available: ${r.join(`, `)}`,{component:`Robota`,provider:e.provider,availableProviders:r});t.setCurrentProvider(e.provider,e.model);let i=this.getConfig();this.setConfig({...i,defaultModel:{...i.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 n.y(`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 cr(e.schema.name,r)}),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},dr=class extends de{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new Mn,this.resolveToolSearchMode=e.resolveToolSearchMode,this.isToolVisible=e.isToolVisible??(()=>!0)}async doInitialize(){A.debug(`Tools initialized`)}async doDispose(){this.registry.clear(),this.loadedDeferredTools.clear(),delete this.allowedTools,A.debug(`Tools disposed`)}addTool(e,t){this.ensureInitialized();let n=new tr(e,t);this.registry.register(n),A.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 ar(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=>ir(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.k(`Tool "${e}" is not registered, so it cannot be loaded`,e);return t});for(let e of t)ir(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.k(`Tool "${e}" is not in the allowed tools list`,e);let i=this.registry.get(e);if(!i)throw new n.k(`Tool "${e}" is not registered`,e);let a;try{a=await i.execute(t,r)}catch(t){throw t instanceof Error?new n.k(t.message,e,t):new n.k(String(t),e)}if(!a.success)throw new n.k(a.error||`Tool execution failed`,e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(a)});if(a.data===void 0)throw new n.k(`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],A.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 fr(e){let t=pr(e.metadata),n=hr(e.usage);return t??n}function pr(e){if(!e)return;let t=hr({inputTokens:gr(e,`inputTokens`),outputTokens:gr(e,`outputTokens`),promptTokens:gr(e,`promptTokens`),completionTokens:gr(e,`completionTokens`),totalTokens:gr(e,`totalTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return mr(n);if(vr(n))return hr(n)}function mr(e){try{return hr(JSON.parse(e))}catch{return}}function hr(e){if(!e)return;let t=_r(e.inputTokens,e.promptTokens),n=_r(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=_r(e.totalTokens);return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r}}}function gr(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function _r(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function vr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}function yr(e){return Math.ceil(JSON.stringify(e).length/4)}function br(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function xr(e,t={}){let n=yr(e),r=Sr(e),i=r?.tokens,a=Cr(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 Sr(e){for(let t=e.length-1;t>=0;t--){let n=fr(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function Cr(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const wr=k(`agent-core:models`),Tr=new Set;function Er(e,t,n){let r=`${e}:${t}`;Tr.has(r)||(Tr.add(r),wr.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 Dr=2e5,Or=new Map;function kr(...e){for(let t of e){let e=Or.get(t.id);e&&!Ar(e,t)&&wr.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)`),Or.set(t.id,t)}}function Ar(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function jr(e){return Or.get(e)}function Mr(e){let t=jr(e)?.contextWindow;return t===void 0?(Er(e,`context window`,Dr),Dr):t}const Nr=16384;function Pr(e){let t=jr(e)?.maxOutput;return t===void 0?(Er(e,`max output`,Nr),Nr):t}function Fr(e){return jr(e)?.name??e}function Ir(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 Lr(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(ir);return i.length===0?`off`:i.length>15||br(i)/Mr(t)>=.1?`on`:`off`}function Rr(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function zr(e){let t=new dr({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:Lr(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var 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)}},Vr=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 n.y(`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 Hr(e){return{moduleManager:new Br(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new Vr(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new ur(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 Ur={ASSIGNED:`assigned`,COMPLETED:`completed`},Wr={MESSAGE:`message`,INPUT:`input`};function Gr(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(j.CREATED,{parameters:{tools:n,systemMessage:e.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function Kr(e,t,n,r,i){Un(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:He,ownerId:t,ownerPath:Jr(t,n)})}function qr(){return new An({enabled:!0,events:[I.MODULE_INITIALIZE_START,I.MODULE_INITIALIZE_COMPLETE,I.MODULE_INITIALIZE_ERROR,I.MODULE_EXECUTION_START,I.MODULE_EXECUTION_COMPLETE,I.MODULE_EXECUTION_ERROR,I.MODULE_DISPOSE_START,I.MODULE_DISPOSE_COMPLETE,I.MODULE_DISPOSE_ERROR]})}function Jr(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function Yr(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 Xr(e,t,n={},r){try{e.emitAgentEvent(j.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,Yr(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(j.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(j.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(j.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}}async function*Zr(e,t,n={},r){try{e.emitAgentEvent(j.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,Yr(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(j.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}finally{e.emitAgentEvent(j.EXECUTION_COMPLETE,{})}}function Qr(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function $r(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
|
|
5
|
-
`||e[r]===`\r`;!i&&!n?(t++,n=!0):i&&(n=!1)}return t}function hi(e,t,n,r,i,a,o){e.emitExecution(M.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 gi(e,t,n,r){e.emitExecution(M.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:mi(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 _i(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(M.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:mi(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(mi(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 vi(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(M.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(M.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 yi(e){if(!e.executionId)throw new n.A(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new n.A(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new n.A(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function bi(e,t){let r=yi(e),i=K(),a=e.traceContext?n.d(e.traceContext,i):void 0,o=n.f(`shell`,e.traceContext,n.l(i)),s=e.traceContext?n.f(`hooks`,e.traceContext,e.traceContext.parentSpanId):void 0;return{toolName:e.toolName,parameters:e.parameters,...t?{signal:t}:{},executionId:r.executionId,ownerType:r.ownerType,ownerId:r.ownerId,ownerPath:e.ownerPath,metadata:e.metadata,eventService:e.eventService,baseEventService:e.baseEventService,...e.ask?{ask:e.ask}:{},...e.deferredTools?{deferredTools:e.deferredTools}:{},toolBodyId:i,...a?{outboundTraceContext:a}:{},...o?{shellTraceEnv:o}:{},...s?{hookTraceEnv:s}:{}}}function xi(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null}}function Si(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function Ci(e){let t=e.argumentDecodeError;if(e.eventService&&t!==void 0){let n={timestamp:new Date,toolName:e.toolName,error:t};e.eventService.emit(P.CALL_ERROR,n)}return{toolName:e.toolName,result:null,success:!1,error:t,executionId:e.executionId,metadata:{errorCode:Ge,requestedTool:e.toolName}}}function wi(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function Ti(e){return e!==void 0}function Ei(e){return e!==void 0}function Di(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 Oi(e,t,n,r){let i=e.requests[r];if(i)try{let a=e.signal?.aborted?xi(i):i.argumentDecodeError===void 0?await t.executeTool(i.toolName,i.parameters,bi(i,e.signal)):Ci(i);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=wi(a))}catch(e){let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=Si(i,t)}}async function ki(e,t,n){for(;n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await Oi(e,t,n,r)}}async function Ai(e,t){let n={resultsByIndex:Array(e.requests.length),errorsByIndex:Array(e.requests.length),nextRequestIndex:0},r=Di(e.requests.length,e.maxConcurrency),i=Array.from({length:r},()=>ki(e,t,n));await Promise.all(i);let a=n.resultsByIndex.filter(Ti),o=n.errorsByIndex.filter(Ei);if(o.length>0&&!e.continueOnError)throw o[0];return{results:a,errors:o}}async function ji(e,t){let n=[],r=[];for(let i of e.requests)try{let a=e.signal?.aborted?xi(i):i.argumentDecodeError===void 0?await t.executeTool(i.toolName,i.parameters,bi(i,e.signal)):Ci(i);if(n.push(a),a.success||r.push(wi(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 Mi(e,t,n){return n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`),e.mode===`parallel`?Ai(e,t):ji(e,t)}var Ni=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=Oe){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,t,r,i=`offered`){this.logger.debug(`Executing tool: ${e}`);try{if(!r?.executionId)throw new n.A(`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=Fi(e,t,a),o=r.eventService;if(o){let t={timestamp:new Date,toolName:e,error:n};o.emit(P.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:We,requestedTool:e,availableTools:t}}}let o=r.eventService;if(o){let n={timestamp:new Date,toolName:e,parameters:t};o.emit(P.CALL_START,n)}let{toolName:s,parameters:c,...l}=r,u={...l,deferredTools:this.deferredToolCatalog,toolName:e,parameters:t,executionId:r.executionId},d=await this.tools.executeTool(e,t,u);if(this.logger.debug(`Tool execution completed: ${e}`),o){let t={timestamp:new Date,toolName:e,result:d};o.emit(P.CALL_COMPLETE,t),o.emit(P.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(P.CALL_ERROR,t)}return{success:!1,error:n.message,toolName:e,executionId:r?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=Pi(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 Mi(e,this,this.logger)}};function Pi(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 Fi(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 ${E} 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 Ii(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function Li(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:N,ownerId:r,ownerPath:i}}function Ri(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...Li(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:N,ownerId:r,ownerPath:o}}function zi(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:Ue,ownerId:i,ownerPath:[...Li(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function Bi(e,t,n,r,i,a){let o=Ri(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:N,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function Vi(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 Hi=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=Ii(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(Un(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:Ue,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 Li(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return Ri(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return zi(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return Bi(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(Un(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){hi(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){gi(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){_i(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){vi(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function Ui(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function Wi(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:Ui(i,s)}:{}}}function Gi(e,t,n){e.tools!==void 0&&(x(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function Ki(e,t,n,r,i=!1){let a=qi(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw Ji();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(Ji())};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 qi(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function Ji(){let e=Error(`aborted`);return e.name=`AbortError`,e}function Yi(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 Xi={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(Yi(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(Yi(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(Yi(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(Yi(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:`${N}.${M.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=Xi[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 Zi(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 Qi(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function $i(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 ea(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 ta(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 na(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 ra(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:sa(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(M.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function ia(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function aa(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function oa(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 sa(e){let t={conversationId:aa(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 ca(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
|
|
6
|
-
`)}function la(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=Kt({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:ca(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 ua(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 da(e,t){e.current={provider:t.to.provider,model:t.to.model}}function fa(e,t,r,i){if(e===void 0||e.allowedOrigins.length===0)return;let a=!1;try{a=t.canPropagateTraceContext?.()===!0}catch{a=!1}if(!a){try{e.onPropagationUnavailable?.(r)}catch{}return}return n.s(e,i)}function pa(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function ma(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 ha(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function ga(e,t,n,r){let i=Zi(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 _a(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;ha(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let d=ga(u,t,n,i);$i(d.toolChoice,d.tools),Gi(d,u,n);let{messages:f,outcome:p}=la(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,pa(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 Ki(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 Ki(h,f,d,t.timeout,o)}function va(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 ya(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 ba=/^peer:[A-Za-z0-9._:-]{1,128}$/,xa=/<(\/?)(peer_message)/gi;function Sa(e){return e.replace(xa,`<$1$2`)}function Ca(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function wa(e){return ba.test(e)?e:`peer:unverified`}function Ta(e){return e.map(e=>{if(e.type!==`text`)return e;let t=Sa(e.text);return t===e.text?e:{...e,text:t}})}function Ea(e){if(e.role===`tool`){let t=Sa(e.content),n=e.parts?Ta(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=Ca(e),n=Sa(e.content),r=e.parts?Ta(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="${wa(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function Da(e){return e.map(Ea)}async function Oa(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=[...Da(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=ua(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=>{da(f,e),o.onExecutionEvent?.(Zn.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 Ki((e,n)=>{_.invoked=!0,_.startedAtMs=Date.now();let r=fa(o.traceContext,t.provider,t.currentInfo.provider,g);return t.provider.chat(e,pa(n,r))},d,p,n.timeout,o.awaitProviderSettlement),v=`success`}catch(e){throw $e(e,o.signal)&&(v=`interrupted`),e}finally{let e=_.invoked?ya(y):{provenance:`absent`};o.onExecutionEvent?.(Xn.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=ya(y),S={...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,[],S),o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:b}),Vi(e,o,r,a,{round:i.currentRound})}catch(e){s.warn(`Forced summary call failed`,{error:e instanceof Error?e.message:String(e)})}}const ka=.95;function Aa(e,t,n){let r=xr(e,{usageFloorTokens:n}),i=Mr(t),a=i*ka,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:ka*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function ja(e,t,n,r,i,a){let o=n.currentRound,s=Aa(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}),Vi(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function Ma(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 Na(e,t,n,r,i,a,o,s,c,l,u,d,f,p=ua(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 _a(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=>{da(p,e),g.model=e.to.model,i.onExecutionEvent?.(Zn.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=Qi(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())},()=>fa(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($e(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}),Vi(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`?ya(_):{provenance:`absent`};i.onExecutionEvent?.(Xn.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 Pa(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function Fa(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function Ia(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=>pi(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=We,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=Ge,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=xr(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 La(e,t,r){for(let i of e){let e=i.function?.name??`unknown`,a=`${e}::${typeof i.function?.arguments==`string`?i.function.arguments:JSON.stringify(i.function?.arguments??{})}`,o=(t.sameToolInputCounts.get(a)??0)+1;if(t.sameToolInputCounts.set(a,o),o>r)throw new n.E(e,o,r)}}async function Ra(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&&La(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}:{}}}),S={requests:x,mode:`parallel`,maxConcurrency:5,continueOnError:!0,signal:u};d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:b,mode:S.mode,maxConcurrency:S.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 C=await m.executeTools(S),w=C.results.filter(Pa).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);C.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(...C.results.filter(e=>!Pa(e)&&!Fa(e)).map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}));let T=Mr(l?.defaultModel?.model??``),E=t.getMessages().length,ee=Ia(e,C,t,i,h,{contextLimit:T,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(E).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:E+t,message:e})}),g.emitToolResultsEvents(e,C,s.toolsExecuted,n,r,i,a,o),g.clearToolEventServices(),{...ee,unknownToolFailureCount:w.length,unknownToolNames:w}}function za(e){let t=0,n=0,r=!1;for(let i of e){if(!D(i)||i.data===void 0)continue;let e=O(i);if(e.role!==`assistant`)continue;let a=Va(e);a&&(r=!0,t+=a.inputTokens,n+=a.outputTokens)}if(r)return{promptTokens:t,completionTokens:n,totalTokens:t+n}}function Ba(){return K()}function Va(e){let t=fr(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 Ha(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=Da(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,dn(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=ma(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(M.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})}),ja(m,o,e,n,u,{fullContext:a,executionId:i,conversationId:r}))return!0;p>1&&a.onTextDelta?.(`
|
|
3
|
+
[This response was interrupted by the user]`),be(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),Se(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},gn=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||0,this.maxConversations=e.maxConversations||50,this.logger=k(`ConversationHistory`)}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new hn(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 _n(){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 vn(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 yn=class extends Xe{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=_n(),r=await this.withRetry(async()=>(n=_n(),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),vn(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=_n(),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);vn(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 bn=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function xn(e){return bn.test(e)?e:void 0}var Sn=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Cn(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new n.S(`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 n.S(`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 n.S(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function wn(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 Tn(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 En(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Dn(e,t,n,r){let{listenerCounts:i,totalListeners:a}=En(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 On(e,t,r,i,a,o,s){e.has(t)||e.set(t,[]);let c=e.get(t);if(c.length>=o)throw new n.S(`Maximum listeners (${o}) exceeded for event type: ${t}`,s,{eventType:t,currentListeners:c.length});c.push({id:r,listener:i,once:a?.once??!1,...a?.filter&&{filter:a.filter}})}function kn(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 An(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 jn=class extends Ye{name=`EventEmitterPlugin`;version=`1.0.0`;pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=k(`EventEmitterPlugin`),this.metrics=e.metrics??new Sn,Cn(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[I.AGENT_EXECUTION_START,I.AGENT_EXECUTION_COMPLETE,I.AGENT_EXECUTION_ERROR,I.TOOL_BEFORE_EXECUTE,I.TOOL_AFTER_EXECUTE,I.TOOL_SUCCESS,I.TOOL_ERROR],maxListeners:e.maxListeners??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(I.AGENT_EXECUTION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messageCount:e.messages?.length||0,...e.config&&{config:e.config}}})}async afterExecution(e,t){await this.emit(I.AGENT_EXECUTION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{duration:t?.duration,tokensUsed:t?.tokensUsed,toolsExecuted:t?.toolsExecuted}})}async beforeConversation(e){await this.emit(I.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(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(I.CONVERSATION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{response:t.content||t.response,tokensUsed:t.usage?.totalTokens||t.tokensUsed,toolCalls:t.toolCalls?.map(e=>({id:e.id||``,name:e.name||``,arguments:JSON.stringify(e.arguments||{}),result:String(e.result||``)}))}})}async beforeToolExecution(e,t){t&&await this.emit(I.TOOL_BEFORE_EXECUTE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.toolName,toolId:t.executionId,arguments:JSON.stringify(t.parameters??{})}})}async afterToolExecution(e,t){if(!(!t.toolCalls||t.toolCalls.length===0))for(let n of t.toolCalls){let r=n.result===null?I.TOOL_ERROR:I.TOOL_SUCCESS,i=An(e,n,t.duration);await this.emit(r,i),await this.emit(I.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(I.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}})}on(e,t,n){let r=`handler_${this.nextHandlerId++}`;return On(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 kn(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 Tn(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>wn(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 Dn(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 Mn=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var Nn=class{tools=new Map;register(e){if(!e.schema?.name)throw new n.A(`Tool must have a valid schema with name`);let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&A.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),A.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)){A.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),A.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 A.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(),A.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 n.A(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new n.A(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new n.A(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new n.A(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))Pn(t,n);if(e.parameters.required){let t=e.parameters.properties||{};for(let r of e.parameters.required)if(!t[r])throw new n.A(`Required parameter "${r}" is not defined in properties`)}}};function Pn(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new n.A(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>Pn(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new n.A(`Parameter "${e}" must declare a type or anyOf`);if(!Mn.includes(t.type))throw new n.A(`Parameter "${e}" has invalid type "${t.type}"`);if(t.properties)for(let[n,r]of Object.entries(t.properties))Pn(`${e}.${n}`,r);t.items&&Pn(`${e}[]`,t.items)}function Fn(e,t,r){let i=W(r,t,`$`);if(i.length>0)throw new n.k(`output does not match the declared outputSchema: ${i.join(`; `)}`,e,void 0,{outputSchemaIssues:i})}function In(e,t,n){let r=Ln(e,t,n);return r?[r]:W(n,t,`Parameter "${e}"`)}function Ln(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 ${Rn(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${Rn(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${Rn(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${Rn(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${Rn(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 Rn(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function zn(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(...In(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...In(t,a,e))}return i}function Bn(e,t,n,r){let i=zn(e,t,n,r);return{isValid:i.length===0,errors:i}}var Vn=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)}},Hn=class extends Vn{emit(e,t,n){}};const Un=new Hn;function Wn(e){return e===Un||e instanceof Hn}function Gn(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 Kn(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var qn=class extends Vn{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??Kn()},i=Gn(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 qn(e,t)}function Jn(e,t){return q(e,t)}var Yn=class extends Vn{emit(e,t,n){this.notifyListeners(e,t,n)}};const Xn={COMPLETED:`span_completed`},Zn={COMPLETED:`provider_call_completed`},Qn={SWITCHED:`provider_fallback`};function $n(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 er={COMPLETED:`tool_body_completed`},tr={DECIDED:`tool_permission_decided`};var nr=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 r=this.schema.name;if(!this.validate(e))throw new n.A(`Invalid parameters for tool "${r}": ${zn(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let i=Date.now(),a;try{a=await this.fn(e,t)}catch(i){throw i instanceof n.k||i instanceof n.A?i:new n.k(`Function tool execution failed: ${i instanceof Error?i.message:String(i)}`,r,i instanceof Error?i:Error(String(i)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let o=Date.now()-i;this.schema.outputSchema&&Fn(r,a,this.schema.outputSchema);let s=t?.instanceEventService??this.eventService;if(s){let e={timestamp:new Date,spanId:Kn(),durationMs:o,op:r};s.emit(Xn.COMPLETED,e)}return{success:!0,data:a,metadata:{executionTime:o,toolName:r,parameters:e}}}validate(e){return zn(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return Bn(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new n.A(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new n.A(`Tool function is required and must be a function`);if(!this.schema.name)throw new n.A(`Tool schema must have a name`)}};const rr=`at least one tool must stay resident; all tools cannot be deferred`,ir=`a tool schema was withheld but no ${E} tool is offered; register the loader or turn tool search off`;function ar(e){return e.deferLoading===!0}function or(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!ar(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(rr);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(ir);return r}function sr(e){if(e.length>0&&e.every(ar))throw Error(rr)}var cr=class extends ue{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 lr(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.k(`${t.error??`Tool execution failed`}${r}`,e)}if(t.data===void 0)throw new n.k(`Tool execution succeeded but returned no data`,e);return t.data}function ur(e){if(!e.name)throw new n.y(`Agent name is required`,{component:`Robota`});if(!e.aiProviders||e.aiProviders.length===0)throw new n.y(`At least one AI provider is required`,{component:`Robota`});if(!e.defaultModel)throw new n.y(`Default model configuration is required`,{component:`Robota`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new n.y(`Default model must specify both provider and model`,{component:`Robota`});let t=e.aiProviders.map(e=>e.name),r=t.filter((e,n)=>t.indexOf(e)!==n);if(r.length>0)throw new n.y(`Duplicate AI provider names: ${r.join(`, `)}`,{component:`Robota`,duplicates:r});if(!t.includes(e.defaultModel.provider))throw new n.y(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`Robota`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var dr=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 n.y(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],r=this.getEventService();for(let n of e){r&&n.setEventService(r),this.getTools().addTool(n.schema,async(e,t)=>{if(!t)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let r=await n.execute(e,t);return lr(n.schema.name,r)});let e=n.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let i=this.getConfig();i.tools=e,this.setConfig(i);let a=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(j.CONFIG_UPDATED,{parameters:{tools:t,systemMessage:i.systemMessage,provider:i.defaultModel.provider,model:i.defaultModel.model,temperature:i.defaultModel.temperature,maxTokens:i.defaultModel.maxTokens},metadata:{version:a}}),{version:a}}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 n.y("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 n.y(`Both provider and model are required`,{component:`Robota`});let t=this.getAIProviders(),r=t.getProviderNames();if(!r.includes(e.provider))throw new n.y(`AI Provider '${e.provider}' not found. Available: ${r.join(`, `)}`,{component:`Robota`,provider:e.provider,availableProviders:r});t.setCurrentProvider(e.provider,e.model);let i=this.getConfig();this.setConfig({...i,defaultModel:{...i.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 n.y(`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 lr(e.schema.name,r)}),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},fr=class extends de{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new Nn,this.resolveToolSearchMode=e.resolveToolSearchMode,this.isToolVisible=e.isToolVisible??(()=>!0)}async doInitialize(){A.debug(`Tools initialized`)}async doDispose(){this.registry.clear(),this.loadedDeferredTools.clear(),delete this.allowedTools,A.debug(`Tools disposed`)}addTool(e,t){this.ensureInitialized();let n=new nr(e,t);this.registry.register(n),A.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 or(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=>ar(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.k(`Tool "${e}" is not registered, so it cannot be loaded`,e);return t});for(let e of t)ar(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.k(`Tool "${e}" is not in the allowed tools list`,e);let i=this.registry.get(e);if(!i)throw new n.k(`Tool "${e}" is not registered`,e);let a;try{a=await i.execute(t,r)}catch(t){throw t instanceof Error?new n.k(t.message,e,t):new n.k(String(t),e)}if(!a.success)throw new n.k(a.error||`Tool execution failed`,e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(a)});if(a.data===void 0)throw new n.k(`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],A.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 pr(e){let t=mr(e.metadata),n=gr(e.usage);return t??n}function mr(e){if(!e)return;let t=gr({inputTokens:_r(e,`inputTokens`),outputTokens:_r(e,`outputTokens`),promptTokens:_r(e,`promptTokens`),completionTokens:_r(e,`completionTokens`),totalTokens:_r(e,`totalTokens`),cacheReadTokens:_r(e,`cacheReadTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return hr(n);if(yr(n))return gr(n)}function hr(e){try{return gr(JSON.parse(e))}catch{return}}function gr(e){if(!e)return;let t=vr(e.inputTokens,e.promptTokens),n=vr(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=vr(e.totalTokens),i=vr(e.cacheReadTokens),a=i!==void 0&&i>=0&&i<=t;return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r},...a&&{cacheReadTokens:i}}}function _r(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function vr(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function yr(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}function br(e){return Math.ceil(JSON.stringify(e).length/4)}function xr(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function Sr(e,t={}){let n=br(e),r=Cr(e),i=r?.tokens,a=wr(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 Cr(e){for(let t=e.length-1;t>=0;t--){let n=pr(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function wr(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const Tr=k(`agent-core:models`),Er=new Set;function Dr(e,t,n){let r=`${e}:${t}`;Er.has(r)||(Er.add(r),Tr.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 Or=2e5,kr=new Map;function Ar(...e){for(let t of e){let e=kr.get(t.id);e&&!jr(e,t)&&Tr.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)`),kr.set(t.id,t)}}function jr(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function Mr(e){return kr.get(e)}function Nr(e){let t=Mr(e)?.contextWindow;return t===void 0?(Dr(e,`context window`,Or),Or):t}const Pr=16384;function Fr(e){let t=Mr(e)?.maxOutput;return t===void 0?(Dr(e,`max output`,Pr),Pr):t}function Ir(e){return Mr(e)?.name??e}function Lr(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 Rr(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(ar);return i.length===0?`off`:i.length>15||xr(i)/Nr(t)>=.1?`on`:`off`}function zr(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Br(e){let t=new fr({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:Rr(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var Vr=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)}},Hr=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 n.y(`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 Ur(e){return{moduleManager:new Vr(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new Hr(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new dr(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 Wr={ASSIGNED:`assigned`,COMPLETED:`completed`},Gr={MESSAGE:`message`,INPUT:`input`};function Kr(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(j.CREATED,{parameters:{tools:n,systemMessage:e.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function qr(e,t,n,r,i){Wn(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:He,ownerId:t,ownerPath:Yr(t,n)})}function Jr(){return new jn({enabled:!0,events:[I.MODULE_INITIALIZE_START,I.MODULE_INITIALIZE_COMPLETE,I.MODULE_INITIALIZE_ERROR,I.MODULE_EXECUTION_START,I.MODULE_EXECUTION_COMPLETE,I.MODULE_EXECUTION_ERROR,I.MODULE_DISPOSE_START,I.MODULE_DISPOSE_COMPLETE,I.MODULE_DISPOSE_ERROR]})}function Yr(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function Xr(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.driverId&&{driverId:t.driverId},...t.turnSource&&{turnSource:t.turnSource},...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 Zr(e,t,n={},r){try{e.emitAgentEvent(j.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,Xr(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(j.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(j.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(j.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}}async function*Qr(e,t,n={},r){try{e.emitAgentEvent(j.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,Xr(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(j.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}finally{e.emitAgentEvent(j.EXECUTION_COMPLETE,{})}}function $r(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function ei(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 ti(e,t,r,i){let a=(r.outputRetries??2)+1,o=$r(i),s=t,c=[];for(let t=1;t<=a;t++){let n=ri(i,await Zr(e,s,r,o));if(n.success)return n.value;c=n.issues,e.logger.debug(`Structured output validation failed`,{attempt:t,maxAttempts:a,issues:c}),t<a&&(s=ei(i,c))}throw new n.O(`response failed schema validation after ${a} attempt(s)`,c,a)}async function*ni(e,t,r,i){let a=(r.outputRetries??2)+1,o=$r(i),s=t,c=[];for(let t=1;t<=a;t++){let n=ri(i,yield*Qr(e,s,r,o));if(n.success)return n.value;c=n.issues,e.logger.debug(`Structured output validation failed (stream)`,{attempt:t,maxAttempts:a,issues:c}),t<a&&(s=ei(i,c))}throw new n.O(`response failed schema validation after ${a} attempt(s)`,c,a)}function ri(e,t){let n=Gt(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 ii(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 ai(e,t){return e.getConversationStore(t).getHistory()}function oi(e,t,n){e.getConversationStore(t).addEntry(n)}function si(e,t){e.getConversationStore(t).clear()}function ci(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 li(e,t,n){e.getConversationStore(t).addMessage(n)}var ui=class extends de{providers=new Map;currentProvider;currentModel;constructor(){super({readyOnConstruction:!0})}async doInitialize(){A.debug(`AIProviders initialized`)}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),A.debug(`Closed AI provider: ${e}`)}catch(t){A.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,A.debug(`AIProviders disposed`)}addProvider(e,t){this.ensureInitialized();let r=R.validateProviderName(e);if(!r.isValid)throw new n.A(`Invalid provider name: ${r.errors.join(`, `)}`);if(!t||typeof t!=`object`||Array.isArray(t))throw new n.A(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new n.A(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new n.A(`Provider must have a chat method`);this.providers.has(e)&&A.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),A.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)){A.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(t=>{A.warn(`Failed to close provider ${e}`,{error:t.message})}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,A.debug(`Cleared current provider selection after removing "${e}"`)),A.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 n.y(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,A.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}},di=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 r.default(`SHA-256`,`TEXT`);return t.update(e),t.getHash(`HEX`)}},fi=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new di;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 r=this.keyBuilder.computeIntegrityHash(t.response);if(t.integrityHash!==r)throw this.cache.delete(e),this.removeFromAccessOrder(e),new n._(`Integrity check failed for cache entry ${e}`,{hash:e,expected:r,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)}},pi=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 mi(e){return`executionId`in e||`toolName`in e}function hi(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 gi(e,t,n,r,i,a,o){e.emitExecution(M.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 _i(e,t,n,r){e.emitExecution(M.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:hi(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 vi(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(M.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:hi(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(hi(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 yi(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(M.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(M.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 bi(e){if(!e.executionId)throw new n.A(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new n.A(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new n.A(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function xi(e,t){let r=bi(e),i=K(),a=e.traceContext?n.d(e.traceContext,i):void 0,o=n.f(`shell`,e.traceContext,n.l(i)),s=e.traceContext?n.f(`hooks`,e.traceContext,e.traceContext.parentSpanId):void 0;return{toolName:e.toolName,parameters:e.parameters,...t?{signal:t}:{},executionId:r.executionId,ownerType:r.ownerType,ownerId:r.ownerId,ownerPath:e.ownerPath,metadata:e.metadata,eventService:e.eventService,baseEventService:e.baseEventService,...e.ask?{ask:e.ask}:{},...e.deferredTools?{deferredTools:e.deferredTools}:{},toolBodyId:i,...a?{outboundTraceContext:a}:{},...o?{shellTraceEnv:o}:{},...s?{hookTraceEnv:s}:{}}}function Si(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null}}function Ci(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function wi(e){let t=e.argumentDecodeError;if(e.eventService&&t!==void 0){let n={timestamp:new Date,toolName:e.toolName,error:t};e.eventService.emit(P.CALL_ERROR,n)}return{toolName:e.toolName,result:null,success:!1,error:t,executionId:e.executionId,metadata:{errorCode:Ge,requestedTool:e.toolName}}}function Ti(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function Ei(e){return e!==void 0}function Di(e){return e!==void 0}function Oi(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 ki(e,t,n,r){let i=e.requests[r];if(i)try{let a=e.signal?.aborted?Si(i):i.argumentDecodeError===void 0?await t.executeTool(i.toolName,i.parameters,xi(i,e.signal)):wi(i);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=Ti(a))}catch(e){let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=Ci(i,t)}}async function Ai(e,t,n){for(;n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await ki(e,t,n,r)}}async function ji(e,t){let n={resultsByIndex:Array(e.requests.length),errorsByIndex:Array(e.requests.length),nextRequestIndex:0},r=Oi(e.requests.length,e.maxConcurrency),i=Array.from({length:r},()=>Ai(e,t,n));await Promise.all(i);let a=n.resultsByIndex.filter(Ei),o=n.errorsByIndex.filter(Di);if(o.length>0&&!e.continueOnError)throw o[0];return{results:a,errors:o}}async function Mi(e,t){let n=[],r=[];for(let i of e.requests)try{let a=e.signal?.aborted?Si(i):i.argumentDecodeError===void 0?await t.executeTool(i.toolName,i.parameters,xi(i,e.signal)):wi(i);if(n.push(a),a.success||r.push(Ti(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 Ni(e,t,n){return n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`),e.mode===`parallel`?ji(e,t):Mi(e,t)}var Pi=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=Oe){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,t,r,i=`offered`){this.logger.debug(`Executing tool: ${e}`);try{if(!r?.executionId)throw new n.A(`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=Ii(e,t,a),o=r.eventService;if(o){let t={timestamp:new Date,toolName:e,error:n};o.emit(P.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:We,requestedTool:e,availableTools:t}}}let o=r.eventService;if(o){let n={timestamp:new Date,toolName:e,parameters:t};o.emit(P.CALL_START,n)}let{toolName:s,parameters:c,...l}=r,u={...l,deferredTools:this.deferredToolCatalog,toolName:e,parameters:t,executionId:r.executionId},d=await this.tools.executeTool(e,t,u);if(this.logger.debug(`Tool execution completed: ${e}`),o){let t={timestamp:new Date,toolName:e,result:d};o.emit(P.CALL_COMPLETE,t),o.emit(P.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(P.CALL_ERROR,t)}return{success:!1,error:n.message,toolName:e,executionId:r?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=Fi(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 Ni(e,this,this.logger)}};function Fi(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 Ii(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 ${E} 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 Li(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function Ri(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:N,ownerId:r,ownerPath:i}}function zi(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...Ri(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:N,ownerId:r,ownerPath:o}}function Bi(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:Ue,ownerId:i,ownerPath:[...Ri(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function Vi(e,t,n,r,i,a){let o=zi(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:N,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function Hi(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 Ui=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=Li(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(Wn(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:Ue,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 Ri(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return zi(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return Bi(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return Vi(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(Wn(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){gi(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){_i(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){vi(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){yi(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function Wi(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function Gi(e,t){if(t===void 0)return[];for(let n=e.length-1;n>=0;n--)if(e[n]?.id===t)return e.slice(n);return[]}function Ki(e){return e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0}function qi(e,t,n,r,i,a){let o=e.getMessages(),s=Gi(o,i.turnMessageId),c=s.filter(Ki).pop(),l=c?.metadata?.providerError===!0,u=s[s.length-1]?.role===`tool`,d=i.allowToolOnlyCompletion===!0&&u&&!c,f=c?c.content:d||i.interrupted===!0?``:`No response received. The context window may be full.`,p=i.interrupted!==!0&&(l||!c&&!d),m=Date.now()-n.getTime();return{response:f,messages:o.map(e=>{if(typeof e.content!=`string`&&(e.role!==`assistant`||e.content!==null))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:m,tokensUsed:s.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:!p,...p&&l?{error:Wi(a,f)}:{}}}function Ji(e,t,n){e.tools!==void 0&&(x(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function Yi(e,t,n,r,i=!1){let a=Xi(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw $e();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($e())};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 Xi(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function Zi(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 Qi={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(Zi(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(Zi(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(Zi(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(Zi(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:`${N}.${M.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=Qi[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 $i(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 ea(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function ta(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 na(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 ra(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 ia(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 aa(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:la(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(M.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function oa(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function sa(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function ca(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 la(e){let t={conversationId:sa(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 ua(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
|
|
6
|
+
`)}function da(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=qt({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:ua(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 fa(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 pa(e,t){e.current={provider:t.to.provider,model:t.to.model}}function ma(e,t,r,i){if(e===void 0||e.allowedOrigins.length===0)return;let a=!1;try{a=t.canPropagateTraceContext?.()===!0}catch{a=!1}if(!a){try{e.onPropagationUnavailable?.(r)}catch{}return}return n.s(e,i)}function ha(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function ga(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 _a(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function va(e,t,n,r){let i=$i(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 ya(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;_a(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let d=va(u,t,n,i);ta(d.toolChoice,d.tools),Ji(d,u,n);let{messages:f,outcome:p}=da(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,ha(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 Yi(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 Yi(h,f,d,t.timeout,o)}function ba(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 xa(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,s=n?.cacheReadTokens??r?.cacheReadTokens;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,...typeof s==`number`&&Number.isSafeInteger(s)&&s>=0&&s<=i&&{cacheReadTokens:s}}}function Sa(e){let t=0,n=0,r,i=!1;for(let a of e){if(a.role!==`assistant`)continue;let e=Ta(a);e&&(i=!0,t+=e.inputTokens,n+=e.outputTokens,e.cacheReadTokens!==void 0&&(r=(r??0)+e.cacheReadTokens))}if(i)return{promptTokens:t,completionTokens:n,totalTokens:t+n,...r!==void 0&&{cacheReadTokens:r}}}function Ca(e){let t=Sa(e.filter(e=>D(e)&&e.data!==void 0).map(O));if(t)return{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}function wa(){return K()}function Ta(e){let t=pr(e);if(!t)return;let n=t.totalTokens??t.inputTokens+t.outputTokens,r=t.cacheReadTokens===void 0?{}:{cacheReadTokens:t.cacheReadTokens};return{inputTokens:t.inputTokens,outputTokens:t.outputTokens,...r,usage:{totalTokens:n,inputTokens:t.inputTokens,outputTokens:t.outputTokens,...r}}}function Ea(e){let t=xa(e).provenance,n=Ta(e);return n?{...n,totalTokens:n.inputTokens+n.outputTokens,usageProvenance:t===`complete`?`complete`:`partial`}:{usageProvenance:t}}const Da=/^peer:[A-Za-z0-9._:-]{1,128}$/,Oa=/<(\/?)(peer_message)/gi;function ka(e){return e.replace(Oa,`<$1$2`)}function Aa(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function ja(e){return Da.test(e)?e:`peer:unverified`}function Ma(e){return e.map(e=>{if(e.type!==`text`)return e;let t=ka(e.text);return t===e.text?e:{...e,text:t}})}function Na(e){if(e.role===`tool`){let t=ka(e.content),n=e.parts?Ma(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=Aa(e),n=ka(e.content),r=e.parts?Ma(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="${ja(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function Pa(e){return e.map(Na)}async function Fa(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});let l={},u=!1;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=[...Pa(e.getMessages()),{id:K(),role:`user`,content:s,state:`complete`,timestamp:new Date}],d=n.systemMessage??``,f=c.some(e=>e.role===`system`&&e.content===d),p=d&&!f?[{id:K(),role:`system`,content:d,state:`complete`,timestamp:new Date},...c]:c;l=fa(t,t.aiProviderInfo.model,r);let m={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=>{pa(l,e),o.onExecutionEvent?.(Qn.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}),h()}},h=()=>{o.onExecutionEvent?.(`provider_request`,{executionId:r,conversationId:a,round:i.currentRound,provider:Y(l,t),model:X(l,t.aiProviderInfo.model),messages:p,forcedSummary:!0})};h();let g=Date.now(),_=K(),v={invoked:!1},y=`failure`,b;try{b=await Yi((e,n)=>{v.invoked=!0,v.startedAtMs=Date.now();let r=ma(o.traceContext,t.provider,t.currentInfo.provider,_);return t.provider.chat(e,ha(n,r))},p,m,n.timeout,o.awaitProviderSettlement),y=`success`}catch(e){throw L(e,o.signal)&&(y=`interrupted`),e}finally{let e=v.invoked?xa(b):{provenance:`absent`};o.onExecutionEvent?.(Zn.COMPLETED,{executionId:r,conversationId:a,round:i.currentRound,startedAt:new Date(v.startedAtMs??g).toISOString(),endedAt:new Date(Math.max(Date.now(),v.startedAtMs??g)).toISOString(),outcome:y,callId:_,disposition:v.invoked?`invoked`:`preflight-refused`,...v.invoked&&{providerId:Y(l,t),modelId:X(l,t.aiProviderInfo.model),...typeof b?.metadata?.providerRequestId==`string`&&{providerRequestId:b.metadata.providerRequestId}},usageProvenance:e.provenance,...`promptTokens`in e&&e.promptTokens!==void 0&&{promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens,...e.cacheReadTokens!==void 0&&{cacheReadTokens:e.cacheReadTokens}}})}if(!b)throw Error(`Forced summary provider returned no response.`);let x=(typeof b.content==`string`?b.content:``)||`Maximum rounds reached. Partial results available in conversation history.`,S={...b.metadata??{},round:i.currentRound,providerId:Y(l,t),modelId:X(l,t.aiProviderInfo.model),...Ea(b)};e.addAssistantMessage(x,[],S),u=!0,o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:x}),Hi(e,o,r,a,{round:i.currentRound})}catch(n){if(u){s.warn(`Forced summary announcement failed`,{error:n instanceof Error?n.message:String(n)});return}if(L(n,o.signal))throw n;i.providerFailure=n;let c=n instanceof Error?n.message:String(n);s.error(`Forced summary call failed`,{error:c,round:i.currentRound});let d={round:i.currentRound,executionId:r,providerId:Y(l,t),modelId:X(l,t.aiProviderInfo.model),providerError:!0};e.addAssistantMessage(`Request failed: ${c}`,[],{...d,forcedSummary:!0}),Hi(e,o,r,a,d)}}const Ia=.95;function La(e,t,n){let r=Sr(e,{usageFloorTokens:n}),i=Nr(t),a=i*Ia,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:Ia*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function Ra(e,t,n,r,i,a){let o=n.currentRound,s=La(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}),Hi(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function za(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 Ba(e,t,n,r,i,a,o,s,c,l,u,d,f,p=fa(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 ya(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=>{pa(p,e),g.model=e.to.model,i.onExecutionEvent?.(Qn.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=ea(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())},()=>ma(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(L(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}),Hi(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`?xa(_):{provenance:`absent`};i.onExecutionEvent?.(Zn.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,...e.cacheReadTokens!==void 0&&{cacheReadTokens:e.cacheReadTokens}}})}}function Va(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function Ha(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function Ua(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=>mi(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=We,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=Ge,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=Sr(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 Wa(e,t,r){for(let i of e){let e=i.function?.name??`unknown`,a=`${e}::${typeof i.function?.arguments==`string`?i.function.arguments:JSON.stringify(i.function?.arguments??{})}`,o=(t.sameToolInputCounts.get(a)??0)+1;if(t.sameToolInputCounts.set(a,o),o>r)throw new n.E(e,o,r)}}async function Ga(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&&Wa(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}:{}}}),S={requests:x,mode:`parallel`,maxConcurrency:5,continueOnError:!0,signal:u};d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:b,mode:S.mode,maxConcurrency:S.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 C=await m.executeTools(S),w=C.results.filter(Va).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);C.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(...C.results.filter(e=>!Va(e)&&!Ha(e)).map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}));let T=Nr(l?.defaultModel?.model??``),E=t.getMessages().length,ee=Ua(e,C,t,i,h,{contextLimit:T,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(E).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:E+t,message:e})}),g.emitToolResultsEvents(e,C,s.toolsExecuted,n,r,i,a,o),g.clearToolEventServices(),{...ee,unknownToolFailureCount:w.length,unknownToolNames:w}}async function Ka(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=Pa(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,fn(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=ga(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(M.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})}),Ra(m,o,e,n,u,{fullContext:a,executionId:i,conversationId:r}))return!0;p>1&&a.onTextDelta?.(`
|
|
7
7
|
|
|
8
|
-
`),n.beginAssistant();let b=Ba(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S}=Ma(a,n,i,p),C=ua(s,o.defaultModel.model,i),w=await Na(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),C);if(w===null)return!0;let{assistantResponse:T,assistantToolCalls:E}=va(w,i,a.conversationId,p,u);if(E.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:w},u),await J(l,`onMessageAdded`,{message:w},u);let ee=typeof T.content==`string`&&T.content.trim().length>0;if(E.length===0&&!ee)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let te=Va(T),ne=te?.inputTokens??0;ne>0&&(e.cumulativeInputTokens=ne);for(let e of E)n.appendToolCall(e);let re=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(re,{round:p,usageObservationId:b,executionId:i,providerId:Y(C,s),modelId:X(C,s.aiProviderInfo.model),...te??{}});let ie=n.getMessages().at(-1);if(a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:T}),ie&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:ie}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=T,E.length===0)return u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(T,i,p,r,v,y),!0;let ae=await Ra(E,n,r,i,p,v,y,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs,a.traceContext);if(ae.contextOverflowed&&u.warn(`[ROUND] Tool results partially skipped due to context overflow — continuing to let AI respond`,{added:ae.addedCount,skipped:ae.skippedCount,round:p}),ae.unknownToolFailureCount>0?e.consecutiveUnknownToolFailureRounds+=1:e.consecutiveUnknownToolFailureRounds=0,e.consecutiveUnknownToolFailureRounds>=2){let t=[...new Set(ae.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 Ua(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 Wa(e,t){return t===0||e<t}async function Ga(e,t,n,r,i,a,o,s,c){let l=Ua(i,r);for(;Wa(o.currentRound,l)&&!(s?.aborted||(o.currentRound++,await Ha(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 Oa(e,a,i,n,o,t,r,c.logger,l))}async function Ka(e,t,n,r,i,a,o,s,c,l,u){let d={...Wi(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(M.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*qa(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 Ja(e,t){return{executionId:e,...t===void 0?{}:{driverId:t}}}var Ya=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new Ni(t),this.aiProviders=e,this.tools=t,this.conversationHistory=n,this.plugins=[],this.logger=k(`ExecutionService`),!r)throw Error(`[EXECUTION] EventService is required`);this.eventEmitter=new Hi(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=ia(),a=new Date,o=aa(r,`execute`),s=oa(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=ea(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=na(this.conversationHistory,o,t,n,i);try{let t=l.getMessages().length;l.addUserMessage(e,Ja(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),ta(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 Ga(l,o,i,s,n,c,f,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),Ka(e,l,i,a,f,o,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){return $e(e,r?.signal)?{response:``,messages:l.getMessages(),executionId:i,duration:Date.now()-a.getTime(),toolsExecuted:[],success:!0,interrupted:!0}:(await ra(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*qa(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 Xa(e){let t=new li;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 Za(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 Ze&&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 cr(e.schema.name,r)}),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new fi(new di({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new ui));let d=new Ya(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 Qa(e){try{let t=await Za(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 $a(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 eo(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 to=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 no(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??io,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function ro(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new n.y(`At least one AI provider must be specified in aiProviders array`);let r=e.defaultModel,i=r?.model??t.defaultModel;if(!i)throw new n.y(`No model specified: set config.defaultModel.model or the AgentFactory defaultModel option`);let a=r?.provider??e.aiProviders[0]?.name??t.defaultProvider;if(!a)throw new n.y(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||io(),name:e.name||`Unnamed Agent`,aiProviders:e.aiProviders,defaultModel:{provider:a,model:i,temperature:r?.temperature??.7,...r?.maxTokens!==void 0&&{maxTokens:r.maxTokens},...r?.topP!==void 0&&{topP:r.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 io(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function ao(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var oo=class{templates=new Map;logger;constructor(){this.logger=k(`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 so(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 co(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function lo(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 uo(e,n.name,r)}t.push(n)}}function uo(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var fo=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new oo,this.logger=k(`AgentFactory`),this.options=no(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,r=!1){let i,a=this.admit();try{i=ro(t,this.options);let o=i;if(this.options.strictValidation){let e=tt(i);if(!e.isValid)throw new n.A(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let s;if(await lo([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(o)},{name:`construct`,run:()=>{s=new e(o)}},{name:`initialize`,run:()=>s?so(s)?.initialize?.():void 0,undo:()=>s?so(s)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!s)throw new n.y(`Agent was not constructed`);this.activeAgents.set(a,s),ao(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 n.y(`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 n=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&i&&await this.lifecycleEvents.onCreateError(n,i),this.logger.error(`Failed to create agent`,{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}admit(){if(this.activeAgents.size+this.pendingAgents.size>=this.options.maxConcurrentAgents)throw new n.y(`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 n.y(`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,r={}){let i=this.agentTemplates.getTemplate(t);if(!i)throw new n.y(`Template not found: ${t}`);let a=this.applyTemplate(i,r);a.warnings.length>0&&this.logger.warn(`Template application warnings`,{templateId:t,warnings:a.warnings});let o=await this.createAgent(e,a.config,!0);return this.logger.info(`Agent created from template`,{templateId:t,modified:a.modified,warnings:a.warnings.length}),o}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 so(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 tt(e)}};function po(e,t,r){if(!e.name||e.name.trim()===``)throw new n.y(`Module name is required`);if(!e.version||e.version.trim()===``)throw new n.y(`Module version is required`);let i=e.getModuleType(),a=t.validateTypeDescriptor(i);if(!a.valid)throw new n.y(`Invalid module type: ${a.errors.join(`, `)}`,{moduleName:e.name,errors:a.errors});a.warnings.length>0&&r.warn(`Module type validation warnings`,{moduleName:e.name,warnings:a.warnings})}async function mo(e,t,r,i){let a=e.getModuleType();if(!a.dependencies||a.dependencies.length===0)return;for(let r of a.dependencies)if(!t.hasType(r))throw new n.y(`Module '${e.name}' depends on unregistered type '${r}'`,{moduleName:e.name,dependencyType:r});let o=new Set;for(let e of r.values())o.add(e.getModuleType().type);let s=[];for(let e of a.dependencies)o.has(e)||s.push(e);s.length>0&&i.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:s})}function ho(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 go(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 _o(){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 vo(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 yo(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 bo(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 xo(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 So=class{registeredTypes=new Map;logger;constructor(){this.logger=k(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new n.y(`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 n.y(`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 vo(e,e=>this.getType(e))}resolveDependencies(e){return yo(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return bo(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 _o())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 xo(this.registeredTypes)}};const Co={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var wo=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 So,this.logger=k(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new n.y(`Cannot register modules during disposal`);if(po(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new n.y(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await mo(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 r=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:r.type,enabled:e.isEnabled(),initialized:!1,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:r.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(Co.REGISTERED,{data:{moduleName:e.name,moduleType:r.type},timestamp:new Date})}async unregisterModule(e){let t=this.modules.get(e);if(!t)return!1;let r=ho(e,this.modules);if(r.length>0)throw new n.y(`Cannot unregister module '${e}' - it is required by: ${r.join(`, `)}`,{moduleName:e,dependents:r});t.isInitialized()&&t.dispose&&await t.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let i=this.registrationOrder.indexOf(e);i!==-1&&this.registrationOrder.splice(i,1);let a=this.initializationOrder.indexOf(e);return a!==-1&&this.initializationOrder.splice(a,1),this.eventEmitter&&await this.eventEmitter.emit(Co.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let r=this.modules.get(e);if(!r)throw new n.y(`Module '${e}' not found`);if(r.isInitialized())return;let i=this.moduleOptions.get(e),a=r.initialize(i,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([a.then(e=>(clearTimeout(n),e)),r])}else await a;let o=this.moduleStatuses.get(e);o&&(o.initialized=!0,o.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 r=t.map(e=>this.modules.get(e).getModuleType().type),i=this.typeRegistry.resolveDependencies(r);if(!i.resolved){let e=[];throw i.missingDependencies.length>0&&e.push(`Missing dependencies: ${i.missingDependencies.join(`, `)}`),i.circularDependencies.length>0&&e.push(`Circular dependencies: ${i.circularDependencies.map(e=>e.join(` -> `)).join(`; `)}`),new n.y(`Cannot initialize modules: ${e.join(`; `)}`,{missingDependencies:i.missingDependencies,circularDependencies:i.circularDependencies.map(e=>e.join(` -> `))})}for(let n of i.order){let r=t.find(e=>this.modules.get(e).getModuleType().type===n);r&&await this.initializeModule(r,e)}}async executeModule(e,t){let r=this.modules.get(e);if(!r)throw new n.y(`Module '${e}' not found`);if(!r.isInitialized())throw new n.y(`Module '${e}' is not initialized`);if(!r.isEnabled())throw new n.y(`Module '${e}' is disabled`);let i=this.moduleStats.get(e),a=Date.now();try{if(!r.execute)throw new n.y(`Module '${e}' does not support execute()`);let o=await r.execute(t),s=Date.now()-a;i.totalExecutions++,i.successfulExecutions++,i.totalExecutionTime+=s,i.averageExecutionTime=i.totalExecutionTime/i.totalExecutions,i.lastExecutionTime=new Date;let c=this.moduleStatuses.get(e);return c&&(c.lastActivity=new Date),o}catch(e){let t=Date.now()-a;throw i.totalExecutions++,i.failedExecutions++,i.totalExecutionTime+=t,i.averageExecutionTime=i.totalExecutionTime/i.totalExecutions,i.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 go(this.modules,this.moduleStats)}},To=class extends sr{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=Rr(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=k(`Robota`,t?{level:t}:{}),this.startTime=Date.now(),lr(e),this.aiProviders=Xa(e),this.tools=zr(()=>this.config),this.agentFactory=new fo,this.conversationHistory=new hn,this.eventEmitter=qr(),this.moduleRegistry=new wo(this.eventEmitter),this.eventService=e.eventService||Hn,this.agentEventService=q(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:Jr(this.conversationId,this.config.executionContext)});let n=Hr({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,Gr(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=[...Jr(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=Vt(t.output);return await ei(this.executionDeps(),e,t,n)}return await Xr(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=Vt(t.output);return yield*ti(this.executionDeps(),e,t,n)}return yield*Zr(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new to;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 ri(this.conversationHistory,this.conversationId)}getFullHistory(){return ii(this.conversationHistory,this.conversationId)}addHistoryEntry(e){ai(this.conversationHistory,this.conversationId,e)}clearHistory(){oi(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){si(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){ci(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 $a({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,eo({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 Qa({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){Kr(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const Eo=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,Do=Symbol.for(`@robota-sdk/tool-result-admitted`);var Oo=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function ko(e){return Object.getOwnPropertyDescriptor(e,Do)?.value===!0}function Ao(e){return Object.defineProperty({...e},Do,{value:!0})}function jo(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 Mo(e){return Number.isSafeInteger(e)&&e>0}function No(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!Mo(n)||!Mo(r)||!Mo(i)||n>=r||r>i||i>5e5)throw new Oo(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!Mo(t))throw new Oo(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function Po(e,t,n={},r){let{warningChars:i,hardChars:a}=No(n,r),o=jo(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new Oo(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new Oo(`spill-write-failed`)}if(!Eo.test(e)||e.length>a)throw new Oo(`invalid-reference`);return Ao(t.success?{success:!0,data:e}:{success:!1,error:`Tool failure details: ${e}`})}return Ao(t)}var Fo=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 Io={STARTED:`started`,STEP_STARTED:`step_started`,STEP_COMPLETED:`step_completed`,COMPLETED:`completed`,FAILED:`failed`};function Z(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function Lo(e){return typeof e==`string`?e.length:0}var Ro=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:j.EXECUTION_START,completeEvent:j.EXECUTION_COMPLETE,errorEvent:j.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Lo(n[0]),conversationId:e.conversationId,options:Z(n[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod(`runStream`,{startEvent:j.EXECUTION_START,completeEvent:j.EXECUTION_COMPLETE,errorEvent:j.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Lo(n[0]),conversationId:e.conversationId,streaming:!0,options:Z(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:P.CALL_START,completeEvent:P.CALL_COMPLETE,errorEvent:P.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 zo(e,t){let n=new Ro(t);return n.configureStandardMethods(),n.wrap(e)}function Bo(e,t,n){return function(r){return zo(r,{eventService:e,sourceType:t,sourceId:n})}}const Vo={safe:`plan`,moderate:`default`,full:`acceptEdits`};function Ho(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
|
|
10
|
-
`||r===`&`&&Yo(t,n))return Wo(e),n}function Yo(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const Xo=/[.+^${}()|[\]\\]/g;function Zo(e){let t=e.replace(Xo,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function Qo(e,t,n){let r=Zo(e);return n===`deny`?r.test(t)||Uo(t).some(e=>r.test(e))?`match`:`no-match`:r.test(t)?e.includes(`*`)&&Ho(t)?`no-match`:`match`:`no-match`}function $o(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(Xo,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function es(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function ts(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 ns(e,t){let n=ts(e),r=ts(t);return es(n)&&!es(r)?`unevaluable`:$o(n).test(r)?`match`:`no-match`}const rs=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,is=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),as={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function os(e){return e.replace(/\.$/,``).toLowerCase()}function ss(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function cs(e){let t=os(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(Xo,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=ss(i);if(e===null)return null;n.push(`${c}${e.replace(Xo,`\\$&`)}`)}}return RegExp(`^${n.join(``)}$`)}function ls(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function us(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!is.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function ds(e,t){if(e.includes(`*`)){let n=cs(e);return n===null?`unevaluable`:n.test(t)?`match`:`no-match`}let n;try{n=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return os(n)===t?`match`:`no-match`}function fs(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?as[n]:t.port)}function ps(e,t){let n=ls(t),r=ls(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:$o(r).test(n)?`match`:`no-match`}function ms(e,t){let n=rs.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=us(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=ds(i,os(s.hostname));return l===`match`?fs(a,s,c)?o===void 0?`match`:ps(o,s.pathname):`no-match`:l}const hs={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`}},gs={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},_s=[`.git`,`.robota`,`.claude`,`.agents`],vs=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function ys(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function bs(e){let t=[];for(let n of ys(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function xs(e){let t=bs(e),n=t[t.length-1];if(n!==void 0&&vs.includes(n))return!0;for(let e=0;e<t.length;e+=1){let n=t[e];if(_s.includes(n)){if((n===`.robota`||n===`.claude`)&&t[e+1]===`worktrees`&&t[e+2]!==void 0){e+=2;continue}return!0}}return!1}function Ss(e){let t=[];for(let n of ys(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function Cs(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const ws=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function Ts(e,t){let n=Cs(e),r=ws.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=Ss(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=Ss(n);else{if(t.cwd===void 0)return!1;i=Ss(`${t.cwd}/${n}`)}if(ys(i).length<=1||t.homeDirectory!==void 0&&i===Ss(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=Ss(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const Es=new Set([`rm`,`rmdir`]),Ds=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 Os(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=Ds.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 ks(e,t){return Uo(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=Os(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!Es.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:Ts(e,t))})}const As=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),js=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),Ms={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},Ns=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,Ps=[`--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 Fs(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return Ps.some(e=>e.startsWith(t))}function Is(e,t){if(Js(t).some(e=>Ns.test(e.text)||Fs(e.text)))return!0;if(e===`find`)return Js(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=Ms[e];return n!==void 0&&Js(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const Ls=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),Rs=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),zs=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),Bs=new Set([`/dev/null`]),Vs=/[A-Za-z0-9_./:=@+,*?[\]~-]/,Hs=new Set([`$`,"`",`\\`,`!`]),Us=new Set([`*`,`?`,`[`]);function Ws(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||Gs(e)}function Gs(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 Ks(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 qs(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!Bs.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||Ws(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:Hs.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(!Vs.test(l)){s=!0;break}Us.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 Js(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function Ys(e){return e.every(e=>!e.expands&&!js.has(e.text))}function Xs(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>Rs.has(e.text));return t.every(e=>Rs.has(e.text)||zs.has(e.text))&&(n||t.length===e.length)}function Zs(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!Ls.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`?Xs(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function Qs(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=>Ws(e.text))||Is(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:As.has(t.text)?!0:t.text===`find`?Ys(n):t.text===`git`&&Zs(n)}const $s=new Set([`echo`,`which`,`git`]);function ec(e,t){let n;for(let[r,...i]of e)if(!$s.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 tc(e,t={}){if(t.otherDirectory===!0||e.length>1e4||Ks(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=Uo(e);if(n.length===0)return!1;let r=n.map(qs);if(r.some(e=>e.refused||!Qs(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:ec(r.map(e=>e.words),t.resolveInWorkspace)}function nc(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 rc(e,t){Q.set(e,{...Q.get(e),...t})}function ic(){Q.clear()}function ac(e){return Q.get(e)??{}}function oc(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=Zo(e);return n.some(e=>r.test(e))}function sc(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 cc(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`:Zo(e.value).test(String(n))?`match`:`no-match`}function lc(e,t){return t.some(t=>{let n=nc(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&oc(n.toolName,e)})}function uc(e){return Q.get(e)?.argument?.key}function dc(e,t){let n=uc(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function fc(e,t,n,r=`allow`){return n.some(n=>mc(e,t,n,r)===`match`)}function pc(e,t,n){return n.some(n=>mc(e,t,n,`deny`)===`unevaluable`)}function mc(e,t,n,r){let i=nc(n);if(!oc(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=sc(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?cc(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=dc(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return ms(i.argPattern,s);case`path`:return ns(i.argPattern,s);case`command`:return Qo(i.argPattern,s,r);case`text`:return Zo(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function hc(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`?ks(a,n):i.kind===`path`&&r?.riskClass===`modify`&&xs(a):!1}function gc(e,t,n,r){return fc(e,t,n,`deny`)||pc(e,t,n)||hc(e,t,r)}function _c(e,t,n={},r={}){return pc(e,t,n.deny??[])||gc(e,t,n.ask??[],r)}const vc=[`workingDirectory`,`cwd`];function yc(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`&&tc(i,{otherDirectory:vc.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function bc(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=yc(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return fc(e,t,o,`deny`)||i.ceiling!==void 0&&!fc(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0?`deny`:pc(e,t,o)?n===`plan`?`deny`:`approve`:gc(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||fc(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?gs[n]:hs[n][c]}function xc(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 Sc=/^[A-Za-z_]\w*:(?!\/\/)/;function Cc(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function wc(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}=nc(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!Cc(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`&&Sc.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=sc(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=ac(r);if(!(o.parameters===void 0&&Sc.test(i)&&sc(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`&&ms(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path] that "${r}" is matched by`}}function Tc(e,t=`deny`){let n=[];for(let r of e){let e=wc(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function Ec(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=nc(n.trim());if(r===void 0||e.includes(`*`))continue;let i=ac(e),a=sc(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&Sc.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=ac(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 Dc(e){return(e??[]).map(e=>`${e}(*)`)}function Oc(e,t){let n=Dc(t.allowedTools),r=Tc(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,...Dc(t.deniedTools)])]}}const kc=[`Bash`,`Shell`,`BackgroundProcess`],Ac=[`Agent`],jc=[...kc,...Ac,`ExecuteCommand`,`Computer`],Mc=`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(`.`),Nc=[`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(` `)),Pc=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function Fc(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function Ic(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=Fc(e[0]);if(Mc.some(t=>n(t,r,e.length===1)))return!0;for(let i of Nc){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(`-`)||Pc.has(o[0]));)o=o.slice(1);return o.length===0||Ic(o,t)}return!1}function Lc(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return Ic(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function Rc(e){let{toolName:t,argPattern:n}=nc(e),r=e=>e.some(e=>oc(t,e));return r(Ac)?!0:t.includes(`*`)?r(jc):jc.includes(t)||ac(t).riskClass===`execute`?n===void 0||n.trim()===`*`||kc.includes(t)&&Lc(n):!1}function zc(e){return e.filter(e=>!Rc(e))}const Bc=1e6,Vc={"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}},Hc=[{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 Uc(e){let t=Object.hasOwn(Vc,e)?Vc[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of Hc)if(t.test(e))return n}function Wc(e,t,n){let r=Uc(e);if(r)return t/Bc*r.inputPerMillion+n/Bc*r.outputPerMillion}function Gc(e){let t=Uc(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function Kc(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 qc(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 Jc(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([Promise.resolve().then(()=>require("./command-executor-Aat_q7P2.cjs")).then(e=>e.n),Promise.resolve().then(()=>require("./http-executor-71JiIdFP.cjs")).then(e=>e.n)]);return[new e,new t]}async function Yc(e,t,r,i,a){if(!e)return{blocked:!1,stdout:``};let o=new Set,s=[],c=()=>({...o.size>0&&{unknownHookTypes:[...o].sort()},...s.length>0&&{errors:[...s]}}),l=e[t];if(!l||l.length===0)return{blocked:!1,stdout:``};let u=i??await Jc(),d=new Map;for(let e of u)d.set(e.type,e);let f=[],p=qc(r),m=-1,h,g;for(let e of l){if(!Kc(e,p))continue;let i=e.env?{...r,env:{...r.env,...e.env}}:r;for(let r of e.hooks){let e=d.get(r.type);if(!e){o.add(r.type);continue}let l=r.type===`command`&&a!==void 0?await e.execute(r,i,a):await e.execute(r,i);if(l.outcome===`deny`)return{blocked:!0,reason:l.reason||`Blocked by hook`,stdout:f.join(`
|
|
8
|
+
`),n.beginAssistant();let b=wa(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S}=za(a,n,i,p),C=fa(s,o.defaultModel.model,i),w=await Ba(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),C);if(w===null)return!0;let{assistantResponse:T,assistantToolCalls:E}=ba(w,i,a.conversationId,p,u);if(E.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:w},u),await J(l,`onMessageAdded`,{message:w},u);let ee=typeof T.content==`string`&&T.content.trim().length>0;if(E.length===0&&!ee)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let te=Ea(T),ne=te.inputTokens??0;ne>0&&(e.cumulativeInputTokens=ne);for(let e of E)n.appendToolCall(e);let re=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(re,{round:p,usageObservationId:b,executionId:i,providerId:Y(C,s),modelId:X(C,s.aiProviderInfo.model),...te});let ie=n.getMessages().at(-1);if(a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:T}),ie&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:ie}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=T,E.length===0)return u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(T,i,p,r,v,y),!0;let ae=await Ga(E,n,r,i,p,v,y,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs,a.traceContext);if(ae.contextOverflowed&&u.warn(`[ROUND] Tool results partially skipped due to context overflow — continuing to let AI respond`,{added:ae.addedCount,skipped:ae.skippedCount,round:p}),ae.unknownToolFailureCount>0?e.consecutiveUnknownToolFailureRounds+=1:e.consecutiveUnknownToolFailureRounds=0,e.consecutiveUnknownToolFailureRounds>=2){let t=[...new Set(ae.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 qa(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 Ja(e,t){return t===0||e<t}async function Ya(e,t,n,r,i,a,o,s,c){let l=qa(i,r);for(;Ja(o.currentRound,l)&&!(s?.aborted||(o.currentRound++,await Ka(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 Fa(e,a,i,n,o,t,r,c.logger,l))}async function Xa(e,t,n,r,i,a,o,s,c,l,u,d){let f={...qi(t,n,r,i.toolsExecuted,{turnMessageId:o,interrupted:s,...c?.allowToolOnlyCompletion===!0&&{allowToolOnlyCompletion:!0}},i.providerFailure),interrupted:s};await J(l,`afterRun`,{input:e,response:f.response,metadata:c?.metadata},u);let p={messages:f.messages,executionContext:{executionId:n,conversationId:a},executionResult:{response:f.response,duration:f.duration,...f.tokensUsed===void 0?{}:{tokensUsed:f.tokensUsed},toolsExecuted:f.toolsExecuted.length,success:f.success,toolCalls:f.toolsExecuted.map(e=>({name:e}))}};for(let e of[`afterExecution`,`afterConversation`,`afterToolExecution`])await J(l,e,p,u);return u.debug(`Execution pipeline completed successfully`,{executionId:n,conversationId:a,duration:f.duration,tokensUsed:f.tokensUsed,toolsExecuted:f.toolsExecuted.length,rounds:i.currentRound}),d.emitExecution(M.COMPLETE,{result:{success:!0,data:f.response.substring(0,100)+`...`},metadata:{method:`execute`,success:!0,duration:f.duration,tokensUsed:f.tokensUsed,toolsExecuted:f.toolsExecuted}},a,n),f}async function*Za(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 Qa(e,t,n){return{executionId:e,...t===void 0?{}:{driverId:t},...n===void 0?{}:{turnSource:n}}}var $a=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new Pi(t),this.aiProviders=e,this.tools=t,this.conversationHistory=n,this.plugins=[],this.logger=k(`ExecutionService`),!r)throw Error(`[EXECUTION] EventService is required`);this.eventEmitter=new Ui(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=oa(),a=new Date,o=sa(r,`execute`),s=ca(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=na(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=ia(this.conversationHistory,o,t,n,i),u,d={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};try{let t=l.getMessages().length;l.addUserMessage(e,Qa(i,r?.driverId,r?.turnSource));let f=l.getMessages().at(-1);u=f?.id,f&&s.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:o,mutation:`append_message`,index:t,message:f}),this.eventEmitter.emitUserMessageEvent(e,o,i),await J(this.plugins,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},this.logger);let p={executionId:i,conversationId:o};f&&await J(this.plugins,`onMessageAdded`,{message:f,executionContext:p},this.logger),await J(this.plugins,`beforeExecution`,{messages:l.getMessages(),executionContext:p},this.logger),ra(c);for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await Ya(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),Xa(e,l,i,a,d,o,u,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){return L(e,r?.signal)?{...qi(l,i,a,d.toolsExecuted,{turnMessageId:u,interrupted:!0}),interrupted:!0}:(await aa(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*Za(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 eo(e){let t=new ui;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 to(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 Ze&&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 lr(e.schema.name,r)}),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new pi(new fi({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new di));let d=new $a(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 no(e){try{let t=await to(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 ro(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 io(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 ao=class{tail=Promise.resolve();claimed=0;async acquire(e){let t=this.claimed>0;this.claimed+=1;let n=this.tail,r=()=>{};this.tail=new Promise(e=>{r=e});let i=!1,a=()=>{i||(i=!0,--this.claimed,r())};if(await n,e?.aborted)throw a(),oo(e,t);return a}async run(e,t){let n=await this.acquire(e);try{return await t()}finally{n()}}get drained(){return this.tail}};function oo(e,t){let n=e.reason;return L(n)&&n.name===`AbortError`?n:$e(t?`Run aborted while queued behind another run on this instance`:`Run aborted before it started`,n)}function so(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??lo,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function co(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new n.y(`At least one AI provider must be specified in aiProviders array`);let r=e.defaultModel,i=r?.model??t.defaultModel;if(!i)throw new n.y(`No model specified: set config.defaultModel.model or the AgentFactory defaultModel option`);let a=r?.provider??e.aiProviders[0]?.name??t.defaultProvider;if(!a)throw new n.y(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||lo(),name:e.name||`Unnamed Agent`,aiProviders:e.aiProviders,defaultModel:{provider:a,model:i,temperature:r?.temperature??.7,...r?.maxTokens!==void 0&&{maxTokens:r.maxTokens},...r?.topP!==void 0&&{topP:r.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 lo(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function uo(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var fo=class{templates=new Map;logger;constructor(){this.logger=k(`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 po(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 mo(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function ho(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 go(e,n.name,r)}t.push(n)}}function go(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var _o=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new fo,this.logger=k(`AgentFactory`),this.options=so(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,r=!1){let i,a=this.admit();try{i=co(t,this.options);let o=i;if(this.options.strictValidation){let e=tt(i);if(!e.isValid)throw new n.A(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let s;if(await ho([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(o)},{name:`construct`,run:()=>{s=new e(o)}},{name:`initialize`,run:()=>s?po(s)?.initialize?.():void 0,undo:()=>s?po(s)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!s)throw new n.y(`Agent was not constructed`);this.activeAgents.set(a,s),uo(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 n.y(`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 n=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&i&&await this.lifecycleEvents.onCreateError(n,i),this.logger.error(`Failed to create agent`,{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}admit(){if(this.activeAgents.size+this.pendingAgents.size>=this.options.maxConcurrentAgents)throw new n.y(`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 n.y(`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,r={}){let i=this.agentTemplates.getTemplate(t);if(!i)throw new n.y(`Template not found: ${t}`);let a=this.applyTemplate(i,r);a.warnings.length>0&&this.logger.warn(`Template application warnings`,{templateId:t,warnings:a.warnings});let o=await this.createAgent(e,a.config,!0);return this.logger.info(`Agent created from template`,{templateId:t,modified:a.modified,warnings:a.warnings.length}),o}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 po(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 tt(e)}};function vo(e,t,r){if(!e.name||e.name.trim()===``)throw new n.y(`Module name is required`);if(!e.version||e.version.trim()===``)throw new n.y(`Module version is required`);let i=e.getModuleType(),a=t.validateTypeDescriptor(i);if(!a.valid)throw new n.y(`Invalid module type: ${a.errors.join(`, `)}`,{moduleName:e.name,errors:a.errors});a.warnings.length>0&&r.warn(`Module type validation warnings`,{moduleName:e.name,warnings:a.warnings})}async function yo(e,t,r,i){let a=e.getModuleType();if(!a.dependencies||a.dependencies.length===0)return;for(let r of a.dependencies)if(!t.hasType(r))throw new n.y(`Module '${e.name}' depends on unregistered type '${r}'`,{moduleName:e.name,dependencyType:r});let o=new Set;for(let e of r.values())o.add(e.getModuleType().type);let s=[];for(let e of a.dependencies)o.has(e)||s.push(e);s.length>0&&i.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:s})}function bo(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 xo(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 So(){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 Co(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 wo(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 To(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 Eo(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 Do=class{registeredTypes=new Map;logger;constructor(){this.logger=k(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new n.y(`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 n.y(`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 Co(e,e=>this.getType(e))}resolveDependencies(e){return wo(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return To(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 So())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 Eo(this.registeredTypes)}};const Oo={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var ko=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 Do,this.logger=k(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new n.y(`Cannot register modules during disposal`);if(vo(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new n.y(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await yo(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 r=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:r.type,enabled:e.isEnabled(),initialized:!1,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:r.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(Oo.REGISTERED,{data:{moduleName:e.name,moduleType:r.type},timestamp:new Date})}async unregisterModule(e){let t=this.modules.get(e);if(!t)return!1;let r=bo(e,this.modules);if(r.length>0)throw new n.y(`Cannot unregister module '${e}' - it is required by: ${r.join(`, `)}`,{moduleName:e,dependents:r});t.isInitialized()&&t.dispose&&await t.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let i=this.registrationOrder.indexOf(e);i!==-1&&this.registrationOrder.splice(i,1);let a=this.initializationOrder.indexOf(e);return a!==-1&&this.initializationOrder.splice(a,1),this.eventEmitter&&await this.eventEmitter.emit(Oo.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let r=this.modules.get(e);if(!r)throw new n.y(`Module '${e}' not found`);if(r.isInitialized())return;let i=this.moduleOptions.get(e),a=r.initialize(i,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([a.then(e=>(clearTimeout(n),e)),r])}else await a;let o=this.moduleStatuses.get(e);o&&(o.initialized=!0,o.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 r=t.map(e=>this.modules.get(e).getModuleType().type),i=this.typeRegistry.resolveDependencies(r);if(!i.resolved){let e=[];throw i.missingDependencies.length>0&&e.push(`Missing dependencies: ${i.missingDependencies.join(`, `)}`),i.circularDependencies.length>0&&e.push(`Circular dependencies: ${i.circularDependencies.map(e=>e.join(` -> `)).join(`; `)}`),new n.y(`Cannot initialize modules: ${e.join(`; `)}`,{missingDependencies:i.missingDependencies,circularDependencies:i.circularDependencies.map(e=>e.join(` -> `))})}for(let n of i.order){let r=t.find(e=>this.modules.get(e).getModuleType().type===n);r&&await this.initializeModule(r,e)}}async executeModule(e,t){let r=this.modules.get(e);if(!r)throw new n.y(`Module '${e}' not found`);if(!r.isInitialized())throw new n.y(`Module '${e}' is not initialized`);if(!r.isEnabled())throw new n.y(`Module '${e}' is disabled`);let i=this.moduleStats.get(e),a=Date.now();try{if(!r.execute)throw new n.y(`Module '${e}' does not support execute()`);let o=await r.execute(t),s=Date.now()-a;i.totalExecutions++,i.successfulExecutions++,i.totalExecutionTime+=s,i.averageExecutionTime=i.totalExecutionTime/i.totalExecutions,i.lastExecutionTime=new Date;let c=this.moduleStatuses.get(e);return c&&(c.lastActivity=new Date),o}catch(e){let t=Date.now()-a;throw i.totalExecutions++,i.failedExecutions++,i.totalExecutionTime+=t,i.averageExecutionTime=i.totalExecutionTime/i.totalExecutions,i.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 xo(this.modules,this.moduleStats)}},Ao=class extends cr{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=zr(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=k(`Robota`,t?{level:t}:{}),this.startTime=Date.now(),ur(e),this.aiProviders=eo(e),this.tools=Br(()=>this.config),this.agentFactory=new _o,this.conversationHistory=new gn,this.eventEmitter=Jr(),this.moduleRegistry=new ko(this.eventEmitter),this.eventService=e.eventService||Un,this.agentEventService=q(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:Yr(this.conversationId,this.config.executionContext)});let n=Ur({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,Kr(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=[...Yr(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=Vt(t.output);return await ti(this.executionDeps(),e,t,n)}return await Zr(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=Vt(t.output);return yield*ni(this.executionDeps(),e,t,n)}return yield*Qr(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new ao;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 ii(this.conversationHistory,this.conversationId)}getFullHistory(){return ai(this.conversationHistory,this.conversationId)}addHistoryEntry(e){oi(this.conversationHistory,this.conversationId,e)}clearHistory(){si(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){ci(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){li(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 ro({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,io({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 no({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){qr(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const jo=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,Mo=Symbol.for(`@robota-sdk/tool-result-admitted`);var No=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function Po(e){return Object.getOwnPropertyDescriptor(e,Mo)?.value===!0}function Fo(e){return Object.defineProperty({...e},Mo,{value:!0})}function Io(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 Lo(e){return Number.isSafeInteger(e)&&e>0}function Ro(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!Lo(n)||!Lo(r)||!Lo(i)||n>=r||r>i||i>5e5)throw new No(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!Lo(t))throw new No(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function zo(e,t,n={},r){let{warningChars:i,hardChars:a}=Ro(n,r),o=Io(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new No(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new No(`spill-write-failed`)}if(!jo.test(e)||e.length>a)throw new No(`invalid-reference`);return Fo(t.success?{success:!0,data:e}:{success:!1,error:`Tool failure details: ${e}`})}return Fo(t)}var Bo=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 Vo={STARTED:`started`,STEP_STARTED:`step_started`,STEP_COMPLETED:`step_completed`,COMPLETED:`completed`,FAILED:`failed`};function Z(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function Ho(e){return typeof e==`string`?e.length:0}var Uo=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:j.EXECUTION_START,completeEvent:j.EXECUTION_COMPLETE,errorEvent:j.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Ho(n[0]),conversationId:e.conversationId,options:Z(n[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod(`runStream`,{startEvent:j.EXECUTION_START,completeEvent:j.EXECUTION_COMPLETE,errorEvent:j.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Ho(n[0]),conversationId:e.conversationId,streaming:!0,options:Z(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:P.CALL_START,completeEvent:P.CALL_COMPLETE,errorEvent:P.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 Wo(e,t){let n=new Uo(t);return n.configureStandardMethods(),n.wrap(e)}function Go(e,t,n){return function(r){return Wo(r,{eventService:e,sourceType:t,sourceId:n})}}const Ko={safe:`plan`,moderate:`default`,full:`acceptEdits`};function qo(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 Jo(e){let t={segments:[],current:``,quote:void 0,substitutionDepth:0};for(let n=0;n<e.length;n+=1){let r=Xo(t,e,n);if(r!==void 0){n=r;continue}let i=Zo(t,e,n);if(i!==void 0){n=i;continue}if(Qo(t,e[n]))continue;let a=$o(t,e,n);if(a!==void 0){n=a;continue}t.current+=e[n]}return Yo(t),t.segments}function Yo(e){let t=e.current.trim();t!==``&&e.segments.push(t),e.current=``}function Xo(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 Zo(e,t,n){let r=t[n];if(r==="`")return Yo(e),n;if(r===`$`&&t[n+1]===`(`)return Yo(e),e.substitutionDepth+=1,n+1}function Qo(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 $o(e,t,n){let r=t[n];if((r===`<`||r===`>`)&&t[n+1]===`(`)return Yo(e),e.substitutionDepth+=1,n+1;if(r===`)`&&e.substitutionDepth>0)return Yo(e),--e.substitutionDepth,n;if(r===`;`||r===`|`||r===`
|
|
10
|
+
`||r===`&`&&es(t,n))return Yo(e),n}function es(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const ts=/[.+^${}()|[\]\\]/g;function ns(e){let t=e.replace(ts,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function rs(e,t,n){let r=ns(e);return n===`deny`?r.test(t)||Jo(t).some(e=>r.test(e))?`match`:`no-match`:r.test(t)?e.includes(`*`)&&qo(t)?`no-match`:`match`:`no-match`}function is(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(ts,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function as(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function os(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 ss(e,t){let n=os(e),r=os(t);return as(n)&&!as(r)?`unevaluable`:is(n).test(r)?`match`:`no-match`}const cs=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,ls=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),us={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function ds(e){return e.replace(/\.$/,``).toLowerCase()}function fs(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function ps(e){let t=ds(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(ts,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=fs(i);if(e===null)return null;n.push(`${c}${e.replace(ts,`\\$&`)}`)}}return RegExp(`^${n.join(``)}$`)}function ms(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function hs(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!ls.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function gs(e,t){if(e.includes(`*`)){let n=ps(e);return n===null?`unevaluable`:n.test(t)?`match`:`no-match`}let n;try{n=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return ds(n)===t?`match`:`no-match`}function _s(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?us[n]:t.port)}function vs(e,t){let n=ms(t),r=ms(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:is(r).test(n)?`match`:`no-match`}function ys(e,t){let n=cs.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=hs(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=gs(i,ds(s.hostname));return l===`match`?_s(a,s,c)?o===void 0?`match`:vs(o,s.pathname):`no-match`:l}const bs={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`}},xs={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},Ss=[`.git`,`.robota`,`.claude`,`.agents`],Cs=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function ws(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function Ts(e){let t=[];for(let n of ws(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function Es(e){let t=Ts(e),n=t[t.length-1];if(n!==void 0&&Cs.includes(n))return!0;for(let e=0;e<t.length;e+=1){let n=t[e];if(Ss.includes(n)){if((n===`.robota`||n===`.claude`)&&t[e+1]===`worktrees`&&t[e+2]!==void 0){e+=2;continue}return!0}}return!1}function Ds(e){let t=[];for(let n of ws(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function Os(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const ks=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function As(e,t){let n=Os(e),r=ks.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=Ds(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=Ds(n);else{if(t.cwd===void 0)return!1;i=Ds(`${t.cwd}/${n}`)}if(ws(i).length<=1||t.homeDirectory!==void 0&&i===Ds(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=Ds(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const js=new Set([`rm`,`rmdir`]),Ms=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 Ns(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=Ms.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 Ps(e,t){return Jo(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=Ns(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!js.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:As(e,t))})}const Fs=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),Is=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),Ls={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},Rs=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,zs=[`--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 Bs(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return zs.some(e=>e.startsWith(t))}function Vs(e,t){if($s(t).some(e=>Rs.test(e.text)||Bs(e.text)))return!0;if(e===`find`)return $s(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=Ls[e];return n!==void 0&&$s(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const Hs=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),Us=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),Ws=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),Gs=new Set([`/dev/null`]),Ks=/[A-Za-z0-9_./:=@+,*?[\]~-]/,qs=new Set([`$`,"`",`\\`,`!`]),Js=new Set([`*`,`?`,`[`]);function Ys(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||Xs(e)}function Xs(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 Zs(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 Qs(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!Gs.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||Ys(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:qs.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(!Ks.test(l)){s=!0;break}Js.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 $s(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function ec(e){return e.every(e=>!e.expands&&!Is.has(e.text))}function tc(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>Us.has(e.text));return t.every(e=>Us.has(e.text)||Ws.has(e.text))&&(n||t.length===e.length)}function nc(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!Hs.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`?tc(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function rc(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=>Ys(e.text))||Vs(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:Fs.has(t.text)?!0:t.text===`find`?ec(n):t.text===`git`&&nc(n)}const ic=new Set([`echo`,`which`,`git`]);function ac(e,t){let n;for(let[r,...i]of e)if(!ic.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 oc(e,t={}){if(t.otherDirectory===!0||e.length>1e4||Zs(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=Jo(e);if(n.length===0)return!1;let r=n.map(Qs);if(r.some(e=>e.refused||!rc(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:ac(r.map(e=>e.words),t.resolveInWorkspace)}function sc(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 cc(e,t){Q.set(e,{...Q.get(e),...t})}function lc(){Q.clear()}function uc(e){return Q.get(e)??{}}function dc(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=ns(e);return n.some(e=>r.test(e))}function fc(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 pc(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`:ns(e.value).test(String(n))?`match`:`no-match`}function mc(e,t){return t.some(t=>{let n=sc(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&dc(n.toolName,e)})}function hc(e){return Q.get(e)?.argument?.key}function gc(e,t){let n=hc(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function _c(e,t,n,r=`allow`){return n.some(n=>yc(e,t,n,r)===`match`)}function vc(e,t,n){return n.some(n=>yc(e,t,n,`deny`)===`unevaluable`)}function yc(e,t,n,r){let i=sc(n);if(!dc(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=fc(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?pc(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=gc(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return ys(i.argPattern,s);case`path`:return ss(i.argPattern,s);case`command`:return rs(i.argPattern,s,r);case`text`:return ns(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function bc(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`?Ps(a,n):i.kind===`path`&&r?.riskClass===`modify`&&Es(a):!1}function xc(e,t,n,r){return _c(e,t,n,`deny`)||vc(e,t,n)||bc(e,t,r)}function Sc(e,t,n={},r={}){return vc(e,t,n.deny??[])||xc(e,t,n.ask??[],r)}const Cc=[`workingDirectory`,`cwd`];function wc(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`&&oc(i,{otherDirectory:Cc.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function Tc(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=wc(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return _c(e,t,o,`deny`)||i.ceiling!==void 0&&!_c(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0||Q.get(e)?.notInPeerTurn===!0&&i.peerTurn===!0?`deny`:vc(e,t,o)?n===`plan`?`deny`:`approve`:xc(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||_c(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?xs[n]:bs[n][c]}function Ec(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 Dc=/^[A-Za-z_]\w*:(?!\/\/)/;function Oc(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function kc(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}=sc(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!Oc(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`&&Dc.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=fc(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=uc(r);if(!(o.parameters===void 0&&Dc.test(i)&&fc(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`&&ys(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path] that "${r}" is matched by`}}function Ac(e,t=`deny`){let n=[];for(let r of e){let e=kc(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function jc(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=sc(n.trim());if(r===void 0||e.includes(`*`))continue;let i=uc(e),a=fc(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&Dc.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=uc(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 Mc(e){return(e??[]).map(e=>`${e}(*)`)}function Nc(e,t){let n=Mc(t.allowedTools),r=Ac(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,...Mc(t.deniedTools)])]}}const Pc=[`Bash`,`Shell`,`BackgroundProcess`],Fc=[`Agent`],Ic=[...Pc,...Fc,`ExecuteCommand`,`Computer`],Lc=`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(`.`),Rc=[`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(` `)),zc=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function Bc(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function Vc(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=Bc(e[0]);if(Lc.some(t=>n(t,r,e.length===1)))return!0;for(let i of Rc){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(`-`)||zc.has(o[0]));)o=o.slice(1);return o.length===0||Vc(o,t)}return!1}function Hc(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return Vc(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function Uc(e){let{toolName:t,argPattern:n}=sc(e),r=e=>e.some(e=>dc(t,e));return r(Fc)?!0:t.includes(`*`)?r(Ic):Ic.includes(t)||uc(t).riskClass===`execute`?n===void 0||n.trim()===`*`||Pc.includes(t)&&Hc(n):!1}function Wc(e){return e.filter(e=>!Uc(e))}const Gc=1e6,Kc={"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}},qc=[{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 Jc(e){let t=Object.hasOwn(Kc,e)?Kc[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of qc)if(t.test(e))return n}function Yc(e,t,n){let r=Jc(e);if(r)return t/Gc*r.inputPerMillion+n/Gc*r.outputPerMillion}function Xc(e){let t=Jc(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function Zc(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 Qc(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 $c(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([Promise.resolve().then(()=>require("./command-executor-Aat_q7P2.cjs")).then(e=>e.n),Promise.resolve().then(()=>require("./http-executor-71JiIdFP.cjs")).then(e=>e.n)]);return[new e,new t]}async function el(e,t,r,i,a){if(!e)return{blocked:!1,stdout:``};let o=new Set,s=[],c=()=>({...o.size>0&&{unknownHookTypes:[...o].sort()},...s.length>0&&{errors:[...s]}}),l=e[t];if(!l||l.length===0)return{blocked:!1,stdout:``};let u=i??await $c(),d=new Map;for(let e of u)d.set(e.type,e);let f=[],p=Qc(r),m=-1,h,g;for(let e of l){if(!Zc(e,p))continue;let i=e.env?{...r,env:{...r.env,...e.env}}:r;for(let r of e.hooks){let e=d.get(r.type);if(!e){o.add(r.type);continue}let l=r.type===`command`&&a!==void 0?await e.execute(r,i,a):await e.execute(r,i);if(l.outcome===`deny`)return{blocked:!0,reason:l.reason||`Blocked by hook`,stdout:f.join(`
|
|
11
11
|
`),...c()};if(l.outcome===`error`){s.push(l);continue}let u=n.r(l.stdout,t);if(f.push(...u.context),u.blockReason!==void 0)return{blocked:!0,reason:u.blockReason,stdout:f.join(`
|
|
12
12
|
`),...u.permissionDecision===`deny`&&{permissionDecision:`deny`},...c()};if(u.permissionDecision!==void 0){let e=n.n[u.permissionDecision];e>m&&(m=e,h=u.permissionDecision),e>=m&&u.updatedInput!==void 0&&(g=u.updatedInput)}}}let _={blocked:!1,stdout:f.join(`
|
|
13
|
-
`)};h!==void 0&&(_.permissionDecision=h),g!==void 0&&(_.updatedInput=g);let{unknownHookTypes:v,errors:y}=c();return v!==void 0&&(_.unknownHookTypes=v),y!==void 0&&(_.errors=y),_}var Xc=class extends Error{guardrailName;guardrailReason;constructor(e,t){super(t),this.guardrailName=e,this.guardrailReason=t,this.name=`GuardrailBlock`}},Zc=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 Xc(e,`Guardrail "${e}" errored: ${t instanceof Error?t.message:String(t)}`)}if(!r.pass)throw new Xc(e,r.reason??`Guardrail "${e}" blocked the turn`)}))}catch(e){if(e instanceof Xc)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 Qc(e,t){return{posture:`advisory`,enforcementReachable:!1,rationale:`Awaited at ${e} but only ${t} is read; \`blocked\` is never consulted.`}}function $c(e){for(let t of Object.values(e))Object.freeze(t);return Object.freeze(e)}const el=$c({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:Qc(`session-lifecycle.ts`,`nothing`),PreCompact:Qc(`compaction-orchestrator.ts`,`nothing`),UserPromptSubmit:Qc(`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 tl(e){return el[e].posture===`enforcing`}exports.AGENT_EVENTS=j,exports.AGENT_EVENT_PREFIX=He,exports.AbstractAIProvider=Le,exports.AbstractAgent=ue,exports.AbstractEventService=Bn,exports.AbstractExecutor=Xe,exports.AbstractManager=de,exports.AbstractPlugin=Ye,exports.AbstractTool=Ze,exports.AgentFactory=fo,exports.AgentTemplates=oo,exports.AuthenticationError=n.g,exports.CONFIRM_NO=`no`,exports.CONFIRM_YES=`yes`,exports.CONTEXT_ESTIMATE_CHARS_PER_TOKEN=4,exports.CacheIntegrityError=n._,exports.CircuitBreakerOpenError=n.v,exports.ConfigurationError=n.y,exports.ConsoleLogger=Ae,exports.ConversationHistory=hn,exports.ConversationStore=mn,exports.DEFAULT_ABSTRACT_EVENT_SERVICE=Hn,exports.DEFAULT_BACKGROUND_PERMISSION_POLICY=`inherit-allowlist`,exports.DEFAULT_CONTEXT_WINDOW=Dr,exports.DEFAULT_MAX_OUTPUT=Nr,exports.DEFAULT_TOOL_RESULT_HARD_CHARS=25e3,exports.DEFAULT_TOOL_RESULT_WARNING_CHARS=1e4,exports.DEFERRED_WITHOUT_LOADER_MESSAGE=rr,exports.DefaultEventService=Vn,exports.ENV_REFERENCE_PREFIX=Qt,exports.EVENT_EMITTER_EVENTS=I,exports.EXECUTION_EVENTS=M,exports.EXECUTION_EVENT_PREFIX=N,exports.ErrorUtils=ot,exports.EventEmitterPlugin=An,exports.EventHistoryModule=Fo,exports.ExecutionProxy=Ro,exports.FunctionTool=tr,exports.GuardrailExecutor=Zc,exports.InMemoryEventEmitterMetrics=xn,exports.LocalExecutor=vn,exports.MAX_TOOL_RESULT_CHARS=5e5,exports.MODEL_EFFORT_VALUES=l,exports.MODEL_PRICES=Vc,exports.MessageConverter=et,exports.ModelNotAvailableError=n.b,exports.NetworkError=n.x,exports.ORCHESTRATION_EVENTS=Io,exports.ORCHESTRATION_EVENT_PREFIX=`orchestration`,exports.ObservableEventService=Jn,exports.PARAMETER_SCHEMA_KEYWORDS=t.t,exports.PERMISSIVE_TOOL_SCHEMA_PROFILE=t.n,exports.PROTECTED_DIRECTORY_NAMES=_s,exports.PROTECTED_FILE_NAMES=vs,exports.PROVIDER_CALL_EVENTS=Xn,exports.PROVIDER_FALLBACK_EVENTS=Zn,exports.PluginCategory=Be,exports.PluginError=n.S,exports.PluginPriority=Ve,exports.ProviderError=n.C,exports.RISK_CLASS_POLICY=hs,exports.RateLimitError=n.w,exports.Robota=To,exports.RobotaError=n.T,exports.SPAN_EVENTS=Yn,exports.SPAN_EVENT_PREFIX=`span`,exports.STRICT_TOOL_SCHEMA_PROFILE=t.r,exports.SameToolInputLoopError=n.E,exports.SilentLogger=Oe,exports.StorageError=n.D,exports.StructuredEventService=Kn,exports.StructuredOutputError=n.O,exports.TASK_EVENTS=Ur,exports.TASK_EVENT_PREFIX=`task`,exports.TOOL_BODY_EVENTS=$n,exports.TOOL_EVENTS=P,exports.TOOL_EVENT_PREFIX=Ue,exports.TOOL_PERMISSION_EVENTS=er,exports.TOOL_SCHEMA_PROJECTION_MAX_DEPTH=t.i,exports.TOOL_SCHEMA_PROJECTION_MAX_NODES=t.a,exports.TOOL_SEARCH_TOOL_NAME=E,exports.TRUST_TO_MODE=Vo,exports.ToolExecutionError=n.k,exports.ToolRegistry=Mn,exports.ToolResultAdmissionError=Oo,exports.TypeUtils=i,exports.UNCLASSIFIED_TOOL_FALLBACK=gs,exports.USER_EVENTS=Wr,exports.USER_EVENT_PREFIX=`user`,exports.UnsupportedShellError=n.m,exports.ValidationError=n.A,exports.Validator=L,exports.admitToolResult=Po,exports.allowRulesForAutoMode=zc,exports.applyPresetToolLists=Oc,exports.assertProviderNativeWebToolsAvailable=o,exports.assertResidentToolRemains=or,exports.bindEventServiceOwner=qn,exports.bindWithOwnerPath=q,exports.buildTraceparent=n.a,exports.calculateModelCost=Wc,exports.chatEntryToMessage=O,exports.classifyProviderFailure=St,exports.clearRegisteredToolProfiles=ic,exports.closeObjectSchemas=t.c,exports.collectAssistantUsageMetadata=Va,exports.composeEventName=Wn,exports.confirmAction=te,exports.createAssistantMessage=un,exports.createBoundedOutput=n.i,exports.createDefaultProviderCapabilities=a,exports.createExecutionProxy=zo,exports.createImageProviderFromDefinition=Xt,exports.createLogger=k,exports.createModelEffortOutcome=d,exports.createProviderFromConfig=an,exports.createRecordEnvResolver=qt,exports.createSystemMessage=dn,exports.createToolMessage=fn,exports.createUserMessage=ln,exports.createVideoProviderFromDefinition=Zt,exports.decodeHookVerdict=n.t,exports.estimateBlendedCostPer1000=Gc,exports.estimateContextTokensFromMessages=xr,exports.estimateSerializedContextTokens=yr,exports.estimateToolSchemaTokens=br,exports.evaluatePermission=bc,exports.extractEnumValues=At,exports.findInvalidPermissionPatterns=Tc,exports.findMediaProviderDefinition=T,exports.findModelDefinition=jr,exports.findPermissionPatternWarnings=Ec,exports.findProviderDefinition=g,exports.formatEnvReference=en,exports.formatSupportedProviderTypes=_,exports.formatTokenCount=Ir,exports.generateSpanId=Gn,exports.getGlobalLogLevel=Ne,exports.getGlobalLoggerSink=Fe,exports.getMessagesForAPI=ve,exports.getModelContextWindow=Mr,exports.getModelMaxOutput=Pr,exports.getModelName=Fr,exports.getProviderCapabilities=h,exports.getProviderCredentialRequirement=v,exports.getSchemaTypeName=Mt,exports.getToolEstimatedDuration=se,exports.getToolExecutionSteps=ce,exports.getToolPermissionProfile=ac,exports.hasUsableSecretReference=nn,exports.hasValidationConstraints=jt,exports.hashToolSchema=t.o,exports.isAbortFailure=$e,exports.isAssistantMessage=be,exports.isBroadExecutionAllowRule=Rc,exports.isChatEntry=D,exports.isConfirmed=ae,exports.isDefaultEventService=Un,exports.isEnforcing=tl,exports.isEnvReference=$t,exports.isImageGenerationProvider=S,exports.isMediaProviderDefinition=w,exports.isMintedSpanId=n.o,exports.isModelEffort=u,exports.isProgressReportingTool=oe,exports.isProtectedPath=xs,exports.isReadOnlyCommandLine=tc,exports.isRegistryTransactionError=co,exports.isSystemMessage=xe,exports.isToolDeniedOutright=lc,exports.isToolMessage=Se,exports.isUserMessage=ye,exports.isVideoGenerationProvider=C,exports.lifecycleOf=so,exports.logger=A,exports.lookupModelPrice=Uc,exports.matchesAnyPattern=fc,exports.messageToHistoryEntry=_e,exports.modelDeclaresCapability=b,exports.multiSelectAction=re,exports.normalizeProviderConfig=rn,exports.normalizeStructuredOutput=Vt,exports.outboundTraceContextFor=n.s,exports.parseParameterRule=sc,exports.parseStructuredResponseText=Wt,exports.peerDriverOf=Ca,exports.printablePeerDriver=wa,exports.processEnvResolver=G,exports.projectPermissionPolicy=xc,exports.projectToolSchema=t.s,exports.providerCallSpanId=n.c,exports.readModelFallbackNotice=Qn,exports.readProviderFailureDetails=pt,exports.readTokenUsageFromMessage=fr,exports.readTokenUsageFromMetadata=pr,exports.registerModelMetadata=kr,exports.registerToolPermissionProfile=rc,exports.removesCriticalPath=ks,exports.requiresFreshApproval=_c,exports.resolveEnvReference=tn,exports.resolveMediaProviderConfig=Yt,exports.resolveModelCapabilities=y,exports.resolveModelCapability=x,exports.resolveModelEffort=m,exports.resolvePlatformShell=n.h,exports.resolveStructuredOutputCapability=Kt,exports.runHooks=Yc,exports.runRegistryTransaction=lo,exports.selectAction=ne,exports.setGlobalLogLevel=Me,exports.setGlobalLoggerSink=Pe,exports.setToolProgressCallback=le,exports.shellArgumentForDisplay=bn,exports.spanIdFromMintedId=n.l,exports.splitCommandSegments=Uo,exports.startPeriodicTask=Ct,exports.stopPeriodicTask=wt,exports.subprocessTraceEnvironment=n.u,exports.sumHistoryUsage=za,exports.textAction=ie,exports.toProviderError=gt,exports.toolNameMatches=oc,exports.toolNamesToPatterns=Dc,exports.toolTraceContextFor=n.d,exports.traceEnvFor=n.f,exports.traceHeadersFor=n.p,exports.validateAgainstJsonSchema=U,exports.validateAgentConfig=tt,exports.validateApiKey=at,exports.validateModelName=it,exports.validatePermissionPattern=wc,exports.validateProviderName=rt,exports.validateUserInput=nt,exports.wasToolResultAdmitted=ko,exports.withEventEmission=Bo,exports.zodToJsonSchema=Nt;
|
|
13
|
+
`)};h!==void 0&&(_.permissionDecision=h),g!==void 0&&(_.updatedInput=g);let{unknownHookTypes:v,errors:y}=c();return v!==void 0&&(_.unknownHookTypes=v),y!==void 0&&(_.errors=y),_}var tl=class extends Error{guardrailName;guardrailReason;constructor(e,t){super(t),this.guardrailName=e,this.guardrailReason=t,this.name=`GuardrailBlock`}},nl=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 tl(e,`Guardrail "${e}" errored: ${t instanceof Error?t.message:String(t)}`)}if(!r.pass)throw new tl(e,r.reason??`Guardrail "${e}" blocked the turn`)}))}catch(e){if(e instanceof tl)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 rl(e,t){return{posture:`advisory`,enforcementReachable:!1,rationale:`Awaited at ${e} but only ${t} is read; \`blocked\` is never consulted.`}}function il(e){for(let t of Object.values(e))Object.freeze(t);return Object.freeze(e)}const al=il({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:rl(`session-lifecycle.ts`,`nothing`),PreCompact:rl(`compaction-orchestrator.ts`,`nothing`),UserPromptSubmit:rl(`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 ol(e){return al[e].posture===`enforcing`}exports.AGENT_EVENTS=j,exports.AGENT_EVENT_PREFIX=He,exports.AbstractAIProvider=Le,exports.AbstractAgent=ue,exports.AbstractEventService=Vn,exports.AbstractExecutor=Xe,exports.AbstractManager=de,exports.AbstractPlugin=Ye,exports.AbstractTool=Ze,exports.AgentFactory=_o,exports.AgentTemplates=fo,exports.AuthenticationError=n.g,exports.CONFIRM_NO=`no`,exports.CONFIRM_YES=`yes`,exports.CONTEXT_ESTIMATE_CHARS_PER_TOKEN=4,exports.CacheIntegrityError=n._,exports.CircuitBreakerOpenError=n.v,exports.ConfigurationError=n.y,exports.ConsoleLogger=Ae,exports.ConversationHistory=gn,exports.ConversationStore=hn,exports.DEFAULT_ABSTRACT_EVENT_SERVICE=Un,exports.DEFAULT_BACKGROUND_PERMISSION_POLICY=`inherit-allowlist`,exports.DEFAULT_CONTEXT_WINDOW=Or,exports.DEFAULT_MAX_OUTPUT=Pr,exports.DEFAULT_TOOL_RESULT_HARD_CHARS=25e3,exports.DEFAULT_TOOL_RESULT_WARNING_CHARS=1e4,exports.DEFERRED_WITHOUT_LOADER_MESSAGE=ir,exports.DefaultEventService=Hn,exports.ENV_REFERENCE_PREFIX=$t,exports.EVENT_EMITTER_EVENTS=I,exports.EXECUTION_EVENTS=M,exports.EXECUTION_EVENT_PREFIX=N,exports.ErrorUtils=ot,exports.EventEmitterPlugin=jn,exports.EventHistoryModule=Bo,exports.ExecutionProxy=Uo,exports.FunctionTool=nr,exports.GuardrailExecutor=nl,exports.InMemoryEventEmitterMetrics=Sn,exports.LocalExecutor=yn,exports.MAX_TOOL_RESULT_CHARS=5e5,exports.MODEL_EFFORT_VALUES=l,exports.MODEL_PRICES=Kc,exports.MessageConverter=et,exports.ModelNotAvailableError=n.b,exports.NetworkError=n.x,exports.ORCHESTRATION_EVENTS=Vo,exports.ORCHESTRATION_EVENT_PREFIX=`orchestration`,exports.ObservableEventService=Yn,exports.PARAMETER_SCHEMA_KEYWORDS=t.t,exports.PERMISSIVE_TOOL_SCHEMA_PROFILE=t.n,exports.PROTECTED_DIRECTORY_NAMES=Ss,exports.PROTECTED_FILE_NAMES=Cs,exports.PROVIDER_CALL_EVENTS=Zn,exports.PROVIDER_FALLBACK_EVENTS=Qn,exports.PluginCategory=Be,exports.PluginError=n.S,exports.PluginPriority=Ve,exports.ProviderError=n.C,exports.RISK_CLASS_POLICY=bs,exports.RateLimitError=n.w,exports.Robota=Ao,exports.RobotaError=n.T,exports.SPAN_EVENTS=Xn,exports.SPAN_EVENT_PREFIX=`span`,exports.STRICT_TOOL_SCHEMA_PROFILE=t.r,exports.SameToolInputLoopError=n.E,exports.SilentLogger=Oe,exports.StorageError=n.D,exports.StructuredEventService=qn,exports.StructuredOutputError=n.O,exports.TASK_EVENTS=Wr,exports.TASK_EVENT_PREFIX=`task`,exports.TOOL_BODY_EVENTS=er,exports.TOOL_EVENTS=P,exports.TOOL_EVENT_PREFIX=Ue,exports.TOOL_PERMISSION_EVENTS=tr,exports.TOOL_SCHEMA_PROJECTION_MAX_DEPTH=t.i,exports.TOOL_SCHEMA_PROJECTION_MAX_NODES=t.a,exports.TOOL_SEARCH_TOOL_NAME=E,exports.TRUST_TO_MODE=Ko,exports.ToolExecutionError=n.k,exports.ToolRegistry=Nn,exports.ToolResultAdmissionError=No,exports.TypeUtils=i,exports.UNCLASSIFIED_TOOL_FALLBACK=xs,exports.USER_EVENTS=Gr,exports.USER_EVENT_PREFIX=`user`,exports.UnsupportedShellError=n.m,exports.ValidationError=n.A,exports.Validator=R,exports.admitToolResult=zo,exports.allowRulesForAutoMode=Wc,exports.applyPresetToolLists=Nc,exports.assertProviderNativeWebToolsAvailable=o,exports.assertResidentToolRemains=sr,exports.bindEventServiceOwner=Jn,exports.bindWithOwnerPath=q,exports.buildTraceparent=n.a,exports.calculateModelCost=Yc,exports.chatEntryToMessage=O,exports.classifyProviderFailure=St,exports.clearRegisteredToolProfiles=lc,exports.closeObjectSchemas=t.c,exports.collectAssistantUsageMetadata=Ta,exports.composeEventName=Gn,exports.confirmAction=te,exports.createAssistantMessage=dn,exports.createBoundedOutput=n.i,exports.createDefaultProviderCapabilities=a,exports.createExecutionProxy=Wo,exports.createImageProviderFromDefinition=Zt,exports.createLogger=k,exports.createModelEffortOutcome=d,exports.createProviderFromConfig=on,exports.createRecordEnvResolver=Jt,exports.createSystemMessage=fn,exports.createToolMessage=pn,exports.createUserMessage=un,exports.createVideoProviderFromDefinition=Qt,exports.decodeHookVerdict=n.t,exports.estimateBlendedCostPer1000=Xc,exports.estimateContextTokensFromMessages=Sr,exports.estimateSerializedContextTokens=br,exports.estimateToolSchemaTokens=xr,exports.evaluatePermission=Tc,exports.extractEnumValues=At,exports.findInvalidPermissionPatterns=Ac,exports.findMediaProviderDefinition=T,exports.findModelDefinition=Mr,exports.findPermissionPatternWarnings=jc,exports.findProviderDefinition=g,exports.formatEnvReference=tn,exports.formatSupportedProviderTypes=_,exports.formatTokenCount=Lr,exports.generateSpanId=Kn,exports.getGlobalLogLevel=Ne,exports.getGlobalLoggerSink=Fe,exports.getMessagesForAPI=ve,exports.getModelContextWindow=Nr,exports.getModelMaxOutput=Fr,exports.getModelName=Ir,exports.getProviderCapabilities=h,exports.getProviderCredentialRequirement=v,exports.getSchemaTypeName=Mt,exports.getToolEstimatedDuration=se,exports.getToolExecutionSteps=ce,exports.getToolPermissionProfile=uc,exports.hasUsableSecretReference=rn,exports.hasValidationConstraints=jt,exports.hashToolSchema=t.o,exports.isAbortFailure=L,exports.isAssistantMessage=be,exports.isBroadExecutionAllowRule=Uc,exports.isChatEntry=D,exports.isConfirmed=ae,exports.isDefaultEventService=Wn,exports.isEnforcing=ol,exports.isEnvReference=en,exports.isImageGenerationProvider=S,exports.isMediaProviderDefinition=w,exports.isMintedSpanId=n.o,exports.isModelEffort=u,exports.isProgressReportingTool=oe,exports.isProtectedPath=Es,exports.isReadOnlyCommandLine=oc,exports.isRegistryTransactionError=mo,exports.isSystemMessage=xe,exports.isToolDeniedOutright=mc,exports.isToolMessage=Se,exports.isUserMessage=ye,exports.isVideoGenerationProvider=C,exports.lifecycleOf=po,exports.logger=A,exports.lookupModelPrice=Jc,exports.matchesAnyPattern=_c,exports.messageToHistoryEntry=_e,exports.modelDeclaresCapability=b,exports.multiSelectAction=re,exports.normalizeProviderConfig=an,exports.normalizeStructuredOutput=Vt,exports.outboundTraceContextFor=n.s,exports.parseParameterRule=fc,exports.parseStructuredResponseText=Gt,exports.peerDriverOf=Aa,exports.printablePeerDriver=ja,exports.processEnvResolver=G,exports.projectPermissionPolicy=Ec,exports.projectToolSchema=t.s,exports.providerCallSpanId=n.c,exports.readModelFallbackNotice=$n,exports.readProviderFailureDetails=pt,exports.readTokenUsageFromMessage=pr,exports.readTokenUsageFromMetadata=mr,exports.registerModelMetadata=Ar,exports.registerToolPermissionProfile=cc,exports.removesCriticalPath=Ps,exports.requiresFreshApproval=Sc,exports.resolveEnvReference=nn,exports.resolveMediaProviderConfig=Xt,exports.resolveModelCapabilities=y,exports.resolveModelCapability=x,exports.resolveModelEffort=m,exports.resolvePlatformShell=n.h,exports.resolveStructuredOutputCapability=qt,exports.runHooks=el,exports.runRegistryTransaction=ho,exports.selectAction=ne,exports.setGlobalLogLevel=Me,exports.setGlobalLoggerSink=Pe,exports.setToolProgressCallback=le,exports.shellArgumentForDisplay=xn,exports.spanIdFromMintedId=n.l,exports.splitCommandSegments=Jo,exports.startPeriodicTask=Ct,exports.stopPeriodicTask=wt,exports.subprocessTraceEnvironment=n.u,exports.sumHistoryUsage=Ca,exports.sumMessagesUsage=Sa,exports.textAction=ie,exports.toProviderError=gt,exports.toolNameMatches=dc,exports.toolNamesToPatterns=Mc,exports.toolTraceContextFor=n.d,exports.traceEnvFor=n.f,exports.traceHeadersFor=n.p,exports.validateAgainstJsonSchema=W,exports.validateAgentConfig=tt,exports.validateApiKey=at,exports.validateModelName=it,exports.validatePermissionPattern=kc,exports.validateProviderName=rt,exports.validateUserInput=nt,exports.wasToolResultAdmitted=Po,exports.withEventEmission=Go,exports.zodToJsonSchema=Nt;
|