@robota-sdk/agent-core 3.0.0-beta.97 → 3.0.0

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.
@@ -1,14 +1,14 @@
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-DQqwwDE7.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`,D=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function ee(e,t,n){return{id:e,title:t,description:n?.description,options:D,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function te(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 ne(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 re(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 ie(e){return e.type===`answer`&&e.values.includes(`yes`)}function ae(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function oe(e,t){if(ae(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function se(e,t){if(ae(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function ce(e,t){return ae(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}function le(e){if(e)return Object.freeze({sourceId:e.sourceId,component:e.component,origin:e.origin,...e.version===void 0?{}:{version:e.version},...e.protocolVersion===void 0?{}:{protocolVersion:e.protocolVersion},...e.generation===void 0?{}:{generation:e.generation}})}function ue(e,t){let{toolProvenance:n,...r}=e.metadata??{};if(!t)return n===void 0?e:{...e,metadata:r};let i=JSON.stringify(t),a=`Tool source (attribution only, not authority): ${i}`,o=e.parts??[];return{...e,metadata:{...r,toolProvenance:i},parts:o[0]?.type===`text`&&o[0].text===a?o:[{type:`text`,text:a},...o]}}var de=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}},fe=class{initialized=!1;disposed=!1;initializationPromise;disposalPromise;constructor(e={}){this.initialized=e.readyOnConstruction===!0}async initialize(){for(;this.disposalPromise;)await this.disposalPromise;this.initialized||(this.initializationPromise??=Promise.resolve().then(()=>this.doInitialize()).then(()=>{this.disposalPromise||(this.initialized=!0,this.disposed=!1)}).finally(()=>{this.initializationPromise=void 0}),await this.initializationPromise)}async dispose(){if(this.disposalPromise)return this.disposalPromise;this.initialized=!1,this.disposed=!0;let e=()=>this.doDispose();this.disposalPromise=(this.initializationPromise??Promise.resolve()).then(e,e).finally(()=>{this.initialized=!1,this.disposed=!0,this.disposalPromise=void 0}),await this.disposalPromise}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 pe(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 me(e){if(e){if(!Array.isArray(e))throw Error(`Tools must be an array`);for(let t of e){if(!t.name||typeof t.name!=`string`)throw Error(`Tool must have a valid name`);if(!t.description||typeof t.description!=`string`)throw Error(`Tool must have a valid description`);if(!t.parameters||typeof t.parameters!=`object`||t.parameters===null||Array.isArray(t.parameters))throw Error(`Tool must have valid parameters`)}}}async function he(e,t,n,r){if(!e)throw Error(`Executor is required for ${t} provider. Configure an executor or use direct execution path.`);if(!r?.model)throw Error(`Model is required for executor execution in ${t} provider.`);return await e.executeChat({messages:n,options:r,provider:t,model:r.model,...r.tools&&{tools:r.tools}})}async function*ge(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*_e(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*ge(t,n,r,i)}function ve(e){return e.category===`chat`}function ye(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 be(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function xe(e){return e.filter(ve).map(ye)}function Se(e){return e.role===`user`}function Ce(e){return e.role===`assistant`}function we(e){return e.role===`system`}function Te(e){return e.role===`tool`}function Ee(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 De(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 Oe(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 ke(e,t,n){let r,i=Ee(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=De(i,e.effortTable!==void 0,t),Oe(e.name,i,r),{content:a.content??null,toolCalls:Ce(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*Ae(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=Ee(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:Ce(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=De(i,e.effortTable!==void 0,t),Oe(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const je={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var Me=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}},Ne=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??Me.getInstance().getGlobalSink()??je}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),Pe(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),Pe(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),Pe(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),Pe(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||Me.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 Pe(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function O(e,t={}){return new Ne(e,t)}function Fe(e){Me.getInstance().setGlobalLevel(e)}function Ie(){return Me.getInstance().getGlobalLevel()}function Le(e){Me.getInstance().setGlobalSink(e)}function Re(){return Me.getInstance().getGlobalSink()}const k=O(`agents`),ze=O(`ToolSchemaProjection`);var Be=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=je){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 Ve(n,t);if(e.done||(await He(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return ke(this,this.logger,e)}async*generateStreamingResponse(e){yield*Ae(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return a(this.supportsTools())}validateConfig(){return!0}validateMessages(e){pe(e)}validateTools(e){me(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`};ze.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 he(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*_e(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Ve(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 He(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let Ue=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}({}),We=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 A={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},Ge=`agent`,j={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`},Ke=`execution`,M={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},qe=`tool`,Je=`unknown_tool`,Ye=`argument_decode_error`,Xe=`tool_call_skipped`,N=(e,t)=>`${e}.${t}`,Ze={START:N(Ke,j.START),COMPLETE:N(Ke,j.COMPLETE),ERROR:N(Ke,j.ERROR)},Qe={CALL_START:N(qe,M.CALL_START),CALL_COMPLETE:N(qe,M.CALL_COMPLETE),CALL_ERROR:N(qe,M.CALL_ERROR)},$e={EXECUTION_START:N(Ge,A.EXECUTION_START),EXECUTION_COMPLETE:N(Ge,A.EXECUTION_COMPLETE),EXECUTION_ERROR:N(Ge,A.EXECUTION_ERROR),CREATED:N(Ge,A.CREATED)},P={EXECUTION_START:Ze.START,EXECUTION_COMPLETE:Ze.COMPLETE,EXECUTION_ERROR:Ze.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:$e.EXECUTION_START,AGENT_EXECUTION_COMPLETE:$e.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:$e.EXECUTION_ERROR,AGENT_CREATED:$e.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 et=class{enabled=!0;category=`custom`;priority=We.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=O(`AbstractPlugin`);stats={calls:0,errors:0,moduleEventsReceived:0,lastActivity:void 0};async initialize(e){this.options=e,e&&`enabled`in e&&typeof e.enabled==`boolean`?this.enabled=e.enabled:this.enabled=!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(P.MODULE_INITIALIZE_START,P.MODULE_INITIALIZE_COMPLETE,P.MODULE_INITIALIZE_ERROR,P.MODULE_EXECUTION_START,P.MODULE_EXECUTION_COMPLETE,P.MODULE_EXECUTION_ERROR,P.MODULE_DISPOSE_START,P.MODULE_DISPOSE_COMPLETE,P.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}},tt=class{logger;constructor(e=je){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`)}},nt=class{provenance;logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??je}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 rt(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function it(e,t){if(t?.aborted===!0)return!0;if(!rt(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return rt(n)&&n.name===`AbortError`}function at(e=`aborted`,t){let n=t===void 0?Error(e):Error(e,{cause:t});return n.name=`AbortError`,n}var ot=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`)}},st=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 ct=st.validateAgentConfig,lt=st.validateUserInput,ut=st.validateProviderName,dt=st.validateModelName,ft=st.validateApiKey;var pt=class{static isRecoverable(e){return e instanceof n.g&&e.recoverable}static getErrorCode(e){return e instanceof n.g?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof n.g?e:e instanceof Error?new n.b(e.message||t):new n.b(typeof e==`string`?e:t)}static wrapProviderError(e,t,r){let i=e instanceof Error?e:Error(String(e));return new n.T(`Failed to ${r}`,t,i,{operation:r})}},F=class extends Error{code=`EXECUTION_JOURNAL_FAILED`;recordId;kind;constructor(e,t){super(`Execution journal failed at ${e.kind}`,{cause:t}),this.name=`ExecutionJournalError`,this.recordId=e.recordId,this.kind=e.kind}},I=class extends Error{code=`EXECUTION_SUSPENDED`;requests;constructor(e){super(`Execution is waiting for correlated tool responses`),this.name=`ExecutionSuspendedError`,this.requests=structuredClone(e)}},L=class extends Error{code;actionIds;constructor(e,t,n=[]){super(t),this.code=e,this.actionIds=n,this.name=`ExecutionRecoveryError`}};function R(e){return e instanceof F||e instanceof L||e instanceof I}function mt(e,t){return e instanceof F?e:t instanceof F?t:e instanceof L?e:t instanceof L?t:e instanceof I&&t instanceof I?new I([...new Map([...e.requests,...t.requests].map(e=>[e.requestId,e])).values()]):e instanceof I?e:t}const ht=new Set([`rate_limit_error`]),gt=new Set([`overloaded_error`]),_t=new Set([`authentication_error`,`permission_error`]),vt=new Set([`model_not_found`]),yt=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),bt=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]),xt=[/\bmodel:\s*\S/i,/\bmodels?\b[^.\n]{0,80}\b(?:not found|does not exist|doesn't exist|is not available|not available|unavailable|unrecognized|not recognized|unknown)\b/i,/\b(?:no such model|unknown model|invalid model|unrecognized model|model not found)\b/i];function St(e){return xt.some(t=>t.test(e))}const Ct=`[^\\s,;)"]+`;function wt(e){return e.replace(RegExp(`\\bauthorization(")?\\s*[:=]\\s*(")?(?:(?:bearer|basic)\\s+)?${Ct}`,`gi`),`Authorization$1: $2[REDACTED]`).replace(RegExp(`\\bbearer\\s+${Ct}`,`gi`),`Bearer [REDACTED]`).replace(RegExp(`\\b(api[-_]?key)(")?\\s*[:=]\\s*(")?${Ct}`,`gi`),`$1$2: $3[REDACTED]`).replace(RegExp(`\\bkey=${Ct}`,`gi`),`key=[REDACTED]`).replace(/\bsk-[A-Za-z0-9_-]{8,}/gi,`[REDACTED]`).replace(/\bAIza[0-9A-Za-z_-]{35}\b/g,`[REDACTED]`)}function z(e){return typeof e==`object`&&e?e:void 0}function Tt(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function Et(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=Tt(i,`type`),s=Tt(t,`type`)??Tt(a,`type`)??(o===`error`?void 0:o)??(r!==void 0&&!(e instanceof n.g)?Tt(t,`code`):void 0);return{...r!==void 0&&{status:r},...s!==void 0&&{type:s}}}function Dt(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 Ot(e){return it(e)||Dt(e)===`APIUserAbortError`}function kt(e){let t=z(e)?.headers,n=t instanceof Headers?t.get(`retry-after`):z(t)?.[`retry-after`]??z(t)?.[`Retry-After`];if(n==null||n.trim().length===0)return;let r=Number(n);if(Number.isFinite(r))return Math.max(0,r);let i=Date.parse(n);return Number.isNaN(i)?void 0:Math.max(0,Math.round((i-Date.now())/1e3))}function At(e){if(e.status!==void 0||e.type!==void 0)return{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}}function jt(e,t,r){if(e instanceof n.g||Ot(e))return e;let i=e instanceof Error?e:Error(typeof e==`string`?e:``),a=Et(e),o=wt(i.message||`request failed`),s=At(a);if(a.status===429||a.type!==void 0&&ht.has(a.type))return new n.E(o||`${t} rate limit exceeded.`,kt(e),t,s);if(a.status===401||a.status===403||a.type!==void 0&&_t.has(a.type))return new n._(o,t,s);let c=a.status===void 0||a.status===400||a.status===404,l=Ft(e)||a.type!==void 0&&vt.has(a.type)||St(o);return c&&l?new n.S(void 0,t,void 0,{...s,originalMessage:o}):Mt(e)?new n.C(o,i,s,t):new n.T(`${r}: ${o}`,t,i,void 0,a)}function Mt(e){if(e instanceof n.C)return!0;let t=z(e);if(t===void 0)return!1;let r=Tt(t,`code`);if(r!==void 0&&yt.has(r))return!0;let i=Dt(e);if(i!==void 0&&bt.has(i))return!0;let a=Tt(t,`name`);return a!==void 0&&bt.has(a)?!0:a===`TypeError`&&Tt(t,`message`)===`fetch failed`}function Nt(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 B=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function Pt(e){return e instanceof n.T?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:Et(e)}function Ft(e){if(e instanceof n.g)return!1;let t=Tt(z(e),`code`);return t!==void 0&&vt.has(t)}function It(e){if(e instanceof n.E)return B(!1,`rate-limit`);if(e instanceof n._)return B(!1,`authentication`);if(e instanceof n.S)return B(!0,`model-unavailable`);let{status:t,type:r}=Pt(e);return t===429||r!==void 0&&ht.has(r)?B(!1,`rate-limit`):t===401||t===403||r!==void 0&&_t.has(r)?B(!1,`authentication`):t===402?B(!1,`billing`):(t===void 0||t===400||t===404)&&(Ft(e)||r!==void 0&&vt.has(r))?B(!0,`model-unavailable`):Mt(e)?B(!1,`network`):t===529||r!==void 0&&gt.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 Lt(e,t){let n=Nt(e);if(t?.aborted===!0||n.some(e=>Ot(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=It(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 Rt(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 zt(e){e&&clearInterval(e)}async function V(e,t){try{await e.append(structuredClone(t))}catch(e){throw new F(t,e)}}function Bt(e){return{...e.model!==void 0&&{model:e.model},...e.tools!==void 0&&{tools:e.tools},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.temperature!==void 0&&{temperature:e.temperature},...e.effort!==void 0&&{effort:e.effort},...e.toolChoice!==void 0&&{toolChoice:e.toolChoice},...e.nativeWebTools!==void 0&&{nativeWebTools:e.nativeWebTools},...e.responseFormat!==void 0&&{responseFormat:e.responseFormat}}}async function Vt(e,t,n,r){if(!r)return e(t,n);let{journal:i,executionId:a,callId:o}=r;await V(i,{kind:`model-request`,recordId:`${o}:request`,executionId:a,callId:o,...r.route(),messages:t,options:Bt(n),...r.checkpoint&&{checkpoint:r.checkpoint}}),n.signal?.throwIfAborted();let s;try{s=await e(t,n)}catch(e){throw await V(i,{kind:`model-failure`,recordId:`${o}:failure`,executionId:a,callId:o,...r.route(),error:{name:e instanceof Error?e.name:`Error`,message:e instanceof Error?e.message:String(e)}}),e}return await V(i,{kind:`model-response`,recordId:`${o}:response`,executionId:a,callId:o,...r.route(),response:s}),s}function Ht(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:return}}function Ut(e){let t=Wt(e);return t.typeName===`ZodObject`?t:void 0}function Wt(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=Gt(e,`${String(t.typeName)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function Gt(e,t){let n=e._def;if(!n)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function Kt(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 qt(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=Gt(n.schema,`ZodEffects inner type`);return n.typeName!==`ZodOptional`&&n.typeName!==`ZodNullable`&&n.typeName!==`ZodDefault`}function Jt(e){let t=Gt(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 Yt(e){let t=Gt(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function Xt(e){let t=Gt(e,`Zod schema`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function Zt(e,t={}){let n=Gt(e,`Zod schema`),r=Ut(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 Qt(r,t.allowAdditionalProperties)}function Qt(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=$t(a,t),qt(a)&&r.push(e);let a=Ht(e,t);return{type:`object`,properties:n,required:r,...a!==void 0&&{additionalProperties:a}}}function $t(e,t){let n=Gt(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:$t(n.type,t),...r};case`ZodObject`:return{...Qt(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{...tn(n.values),...r};case`ZodDate`:return{type:`string`,format:`date-time`,...r};case`ZodLiteral`:return{...en(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=>$t(e,t)),...r}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...$t(n.schema,t),...r};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[$t(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{...$t(n.innerType,t),...r};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:$t(n.valueType,t),...r}:{type:`object`,additionalProperties:{type:`string`},...r};default:throw Error(rn(String(n.typeName)))}}function en(e){let t=Kt(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 tn(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 nn={ZodTuple:"a tuple needs positional `items`, and the subset models `items` as ONE schema — use `z.object({...})` for a fixed-shape record, or `z.array(z.union([...]))` if order genuinely does not matter",ZodIntersection:"an intersection needs `allOf` — merge the two object schemas yourself with `.merge()`, which produces a single object node the subset can carry",ZodLazy:"a recursive schema needs `$ref` — flatten the recursion to a fixed depth, or model the nested level as `z.record(...)`",ZodDate:"use `z.string()` (optionally with `.datetime()`), which is what a provider receives"};function rn(e){return`${e} cannot be carried by the universal JSON-schema subset: ${nn[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 an(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function on(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 sn(e){if(an(e))return{name:`structured_output`,jsonSchema:Zt(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:on(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=cn(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function cn(e,t,n){let r=[],i=e.type;if(e.anyOf)return un(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${dn(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(...cn(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(ln(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(...cn(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${dn(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...cn(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 ${dn(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${dn(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 ${dn(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${dn(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function ln(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function un(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>cn(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 dn(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function fn(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 pn(e,t){return b(e,t,`json_schema`)===!0?`response_schema`:b(e,t,`json_object`)===!0?`json_object`:`none`}function mn(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=pn(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 hn=e=>process.env[e];function gn(e){return t=>e[t]}function _n(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function vn(e,t={},n=hn){let r=e.credentialRequirement,i=t.baseUrl??_n(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=_n(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 yn(e,t={},n=hn){if(e.createImageProvider===void 0)return;let r=vn(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return S(t)?t:void 0}catch{return}}function bn(e,t={},n=hn){if(e.createVideoProvider===void 0)return;let r=vn(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return C(t)?t:void 0}catch{return}}const xn=`$ENV:`;function Sn(e){return e.startsWith(xn)}function Cn(e){return`${xn}${e}`}function wn(e,t=hn){if(!Sn(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function Tn(e,t=hn){return e===void 0||e.length===0?!1:wn(e,t)!==void 0}function En(e,t,n=hn){let r=g(t,e.name)?.defaults??{},i=e.model??r.model;if(!i)throw Error(`Provider ${e.name} requires model`);if(e.apiKeyRef!==void 0&&e.apiKey!==void 0)throw Error(`Provider ${e.name} has conflicting credential origins`);if(e.apiKeyRef!==void 0&&(!e.apiKeyRef.service?.trim()||!e.apiKeyRef.account?.trim()))throw Error(`Provider ${e.name} has an invalid host credential reference`);let a=e.apiKeyRef===void 0?e.apiKey??r.apiKey:void 0,o=a!==void 0&&Sn(a)?a.slice(5).trim():void 0;if(o===``)throw Error(`Provider ${e.name} has an invalid API key environment reference; use $ENV:VARIABLE_NAME`);let s=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:wn(a,n),...o?{apiKeyEnv:o}:{},...e.apiKeyRef===void 0?{}:{apiKeyRef:e.apiKeyRef},baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...s!==void 0&&{options:s}}}function Dn(e,t){if(e.apiKeyRef!==void 0&&!e.apiKey)throw Error(`Provider ${e.name} requires host credential resolution before construction`);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 ${An(r)}`);return n.createProvider(e)}function On(e,t){return t.anyOf.some(t=>kn(e,t))}function kn(e,t){let n=e[t];return n!==void 0&&n.length>0}function An(e){return e.anyOf.map(e=>e===`apiKey`?`apiKey (API key)`:e).join(` or `)}function H(){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 jn(e,t){let n={id:H(),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 Mn(e,t){let n={id:H(),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 Nn(e,t){let n={id:H(),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:H(),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 Fn=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(be(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(jn(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(Mn(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(Nn(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>ve(e)&&we(ye(e)),i=this.entries.filter(e=>!r(e)),a=be(Nn(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(ve).map(ye)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(ve).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(ve);if(e.length<=this.maxMessages)return;let t=e.map(ye),n=t.filter(we),r=t.filter(e=>!we(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=>!ve(e)||o.has(e.id))}},In=class{history;pendingAssistant=null;constructor(e=0){this.history=new Fn({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:H(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:H(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:H(),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 Ce(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-DQqwwDE7.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`,D=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function ee(e,t,n){return{id:e,title:t,description:n?.description,options:D,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function te(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 ne(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 re(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 ie(e){return e.type===`answer`&&e.values.includes(`yes`)}function ae(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function oe(e,t){if(ae(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function se(e,t){if(ae(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function ce(e,t){return ae(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}function le(e){if(e)return Object.freeze({sourceId:e.sourceId,component:e.component,origin:e.origin,...e.version===void 0?{}:{version:e.version},...e.protocolVersion===void 0?{}:{protocolVersion:e.protocolVersion},...e.generation===void 0?{}:{generation:e.generation}})}function ue(e,t){let{toolProvenance:n,...r}=e.metadata??{};if(!t)return n===void 0?e:{...e,metadata:r};let i=JSON.stringify(t),a=`Tool source (attribution only, not authority): ${i}`,o=e.parts??[];return{...e,metadata:{...r,toolProvenance:i},parts:o[0]?.type===`text`&&o[0].text===a?o:[{type:`text`,text:a},...o]}}var de=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}},fe=class{initialized=!1;disposed=!1;initializationPromise;disposalPromise;constructor(e={}){this.initialized=e.readyOnConstruction===!0}async initialize(){for(;this.disposalPromise;)await this.disposalPromise;this.initialized||(this.initializationPromise??=Promise.resolve().then(()=>this.doInitialize()).then(()=>{this.disposalPromise||(this.initialized=!0,this.disposed=!1)}).finally(()=>{this.initializationPromise=void 0}),await this.initializationPromise)}async dispose(){if(this.disposalPromise)return this.disposalPromise;this.initialized=!1,this.disposed=!0;let e=()=>this.doDispose();this.disposalPromise=(this.initializationPromise??Promise.resolve()).then(e,e).finally(()=>{this.initialized=!1,this.disposed=!0,this.disposalPromise=void 0}),await this.disposalPromise}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 pe(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 me(e){if(e){if(!Array.isArray(e))throw Error(`Tools must be an array`);for(let t of e){if(!t.name||typeof t.name!=`string`)throw Error(`Tool must have a valid name`);if(!t.description||typeof t.description!=`string`)throw Error(`Tool must have a valid description`);if(!t.parameters||typeof t.parameters!=`object`||t.parameters===null||Array.isArray(t.parameters))throw Error(`Tool must have valid parameters`)}}}async function he(e,t,n,r){if(!e)throw Error(`Executor is required for ${t} provider. Configure an executor or use direct execution path.`);if(!r?.model)throw Error(`Model is required for executor execution in ${t} provider.`);return await e.executeChat({messages:n,options:r,provider:t,model:r.model,...r.tools&&{tools:r.tools}})}async function*ge(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*_e(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*ge(t,n,r,i)}function ve(e){return e.category===`chat`}function ye(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 be(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function xe(e){return e.filter(ve).map(ye)}function Se(e){return e.role===`user`}function Ce(e){return e.role===`assistant`}function we(e){return e.role===`system`}function Te(e){return e.role===`tool`}function Ee(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 De(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 Oe(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 ke(e,t,n){let r,i=Ee(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=De(i,e.effortTable!==void 0,t),Oe(e.name,i,r),{content:a.content??null,toolCalls:Ce(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*Ae(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=Ee(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:Ce(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=De(i,e.effortTable!==void 0,t),Oe(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const je={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var Me=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}},Ne=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??Me.getInstance().getGlobalSink()??je}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),Pe(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),Pe(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),Pe(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),Pe(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||Me.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 Pe(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function O(e,t={}){return new Ne(e,t)}function Fe(e){Me.getInstance().setGlobalLevel(e)}function Ie(){return Me.getInstance().getGlobalLevel()}function Le(e){Me.getInstance().setGlobalSink(e)}function Re(){return Me.getInstance().getGlobalSink()}const k=O(`agents`),ze=O(`ToolSchemaProjection`);var Be=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=je){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 Ve(n,t);if(e.done||(await He(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return ke(this,this.logger,e)}async*generateStreamingResponse(e){yield*Ae(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return a(this.supportsTools())}validateConfig(){return!0}validateMessages(e){pe(e)}validateTools(e){me(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`};ze.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 he(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*_e(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Ve(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 He(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let Ue=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}({}),We=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 A={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},Ge=`agent`,j={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`},Ke=`execution`,M={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},qe=`tool`,Je=`unknown_tool`,Ye=`argument_decode_error`,Xe=`tool_call_skipped`,N=(e,t)=>`${e}.${t}`,Ze={START:N(Ke,j.START),COMPLETE:N(Ke,j.COMPLETE),ERROR:N(Ke,j.ERROR)},Qe={CALL_START:N(qe,M.CALL_START),CALL_COMPLETE:N(qe,M.CALL_COMPLETE),CALL_ERROR:N(qe,M.CALL_ERROR)},$e={EXECUTION_START:N(Ge,A.EXECUTION_START),EXECUTION_COMPLETE:N(Ge,A.EXECUTION_COMPLETE),EXECUTION_ERROR:N(Ge,A.EXECUTION_ERROR),CREATED:N(Ge,A.CREATED)},P={EXECUTION_START:Ze.START,EXECUTION_COMPLETE:Ze.COMPLETE,EXECUTION_ERROR:Ze.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:$e.EXECUTION_START,AGENT_EXECUTION_COMPLETE:$e.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:$e.EXECUTION_ERROR,AGENT_CREATED:$e.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 et=class{enabled=!0;category=`custom`;priority=We.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=O(`AbstractPlugin`);stats={calls:0,errors:0,moduleEventsReceived:0,lastActivity:void 0};async initialize(e){this.options=e,e&&`enabled`in e&&typeof e.enabled==`boolean`?this.enabled=e.enabled:this.enabled=!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(P.MODULE_INITIALIZE_START,P.MODULE_INITIALIZE_COMPLETE,P.MODULE_INITIALIZE_ERROR,P.MODULE_EXECUTION_START,P.MODULE_EXECUTION_COMPLETE,P.MODULE_EXECUTION_ERROR,P.MODULE_DISPOSE_START,P.MODULE_DISPOSE_COMPLETE,P.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}},tt=class{logger;constructor(e=je){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`)}},nt=class{provenance;logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??je}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 rt(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function it(e,t){if(t?.aborted===!0)return!0;if(!rt(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return rt(n)&&n.name===`AbortError`}function at(e=`aborted`,t){let n=t===void 0?Error(e):Error(e,{cause:t});return n.name=`AbortError`,n}var ot=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`)}},st=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 ct=st.validateAgentConfig,lt=st.validateUserInput,ut=st.validateProviderName,dt=st.validateModelName,ft=st.validateApiKey;var pt=class{static isRecoverable(e){return e instanceof n.g&&e.recoverable}static getErrorCode(e){return e instanceof n.g?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof n.g?e:e instanceof Error?new n.b(e.message||t):new n.b(typeof e==`string`?e:t)}static wrapProviderError(e,t,r){let i=e instanceof Error?e:Error(String(e));return new n.T(`Failed to ${r}`,t,i,{operation:r})}},F=class extends Error{code=`EXECUTION_JOURNAL_FAILED`;recordId;kind;constructor(e,t){super(`Execution journal failed at ${e.kind}`,{cause:t}),this.name=`ExecutionJournalError`,this.recordId=e.recordId,this.kind=e.kind}},I=class extends Error{code=`EXECUTION_SUSPENDED`;requests;constructor(e){super(`Execution is waiting for correlated tool responses`),this.name=`ExecutionSuspendedError`,this.requests=structuredClone(e)}},L=class extends Error{code;actionIds;constructor(e,t,n=[]){super(t),this.code=e,this.actionIds=n,this.name=`ExecutionRecoveryError`}};function R(e){return e instanceof F||e instanceof L||e instanceof I}function mt(e,t){return e instanceof F?e:t instanceof F?t:e instanceof L?e:t instanceof L?t:e instanceof I&&t instanceof I?new I([...new Map([...e.requests,...t.requests].map(e=>[e.requestId,e])).values()]):e instanceof I?e:t}const ht=new Set([`rate_limit_error`]),gt=new Set([`overloaded_error`]),_t=new Set([`authentication_error`,`permission_error`]),vt=new Set([`model_not_found`]),yt=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),bt=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]),xt=[/\bmodel:\s*\S/i,/\bmodels?\b[^.\n]{0,80}\b(?:not found|does not exist|doesn't exist|is not available|not available|unavailable|unrecognized|not recognized|unknown)\b/i,/\b(?:no such model|unknown model|invalid model|unrecognized model|model not found)\b/i];function St(e){return xt.some(t=>t.test(e))}const Ct=`[^\\s,;)"]+`;function wt(e){return e.replace(RegExp(`\\bauthorization(")?\\s*[:=]\\s*(")?(?:(?:bearer|basic)\\s+)?${Ct}`,`gi`),`Authorization$1: $2[REDACTED]`).replace(RegExp(`\\bbearer\\s+${Ct}`,`gi`),`Bearer [REDACTED]`).replace(RegExp(`\\b(api[-_]?key)(")?\\s*[:=]\\s*(")?${Ct}`,`gi`),`$1$2: $3[REDACTED]`).replace(RegExp(`\\bkey=${Ct}`,`gi`),`key=[REDACTED]`).replace(/\bsk-[A-Za-z0-9_-]{8,}/gi,`[REDACTED]`).replace(/\bAIza[0-9A-Za-z_-]{35}\b/g,`[REDACTED]`)}function z(e){return typeof e==`object`&&e?e:void 0}function Tt(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function Et(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=Tt(i,`type`),s=Tt(t,`type`)??Tt(a,`type`)??(o===`error`?void 0:o)??(r!==void 0&&!(e instanceof n.g)?Tt(t,`code`):void 0);return{...r!==void 0&&{status:r},...s!==void 0&&{type:s}}}function Dt(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 Ot(e){return it(e)||Dt(e)===`APIUserAbortError`}function kt(e){let t=z(e)?.headers,n=t instanceof Headers?t.get(`retry-after`):z(t)?.[`retry-after`]??z(t)?.[`Retry-After`];if(n==null||n.trim().length===0)return;let r=Number(n);if(Number.isFinite(r))return Math.max(0,r);let i=Date.parse(n);return Number.isNaN(i)?void 0:Math.max(0,Math.round((i-Date.now())/1e3))}function At(e){if(e.status!==void 0||e.type!==void 0)return{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}}function jt(e,t,r){if(e instanceof n.g||Ot(e))return e;let i=e instanceof Error?e:Error(typeof e==`string`?e:``),a=Et(e),o=wt(i.message||`request failed`),s=At(a);if(a.status===429||a.type!==void 0&&ht.has(a.type))return new n.E(o||`${t} rate limit exceeded.`,kt(e),t,s);if(a.status===401||a.status===403||a.type!==void 0&&_t.has(a.type))return new n._(o,t,s);let c=a.status===void 0||a.status===400||a.status===404,l=Ft(e)||a.type!==void 0&&vt.has(a.type)||St(o);return c&&l?new n.S(void 0,t,void 0,{...s,originalMessage:o}):Mt(e)?new n.C(o,i,s,t):new n.T(`${r}: ${o}`,t,i,void 0,a)}function Mt(e){if(e instanceof n.C)return!0;let t=z(e);if(t===void 0)return!1;let r=Tt(t,`code`);if(r!==void 0&&yt.has(r))return!0;let i=Dt(e);if(i!==void 0&&bt.has(i))return!0;let a=Tt(t,`name`);return a!==void 0&&bt.has(a)?!0:a===`TypeError`&&Tt(t,`message`)===`fetch failed`}function Nt(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 B=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function Pt(e){return e instanceof n.T?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:Et(e)}function Ft(e){if(e instanceof n.g)return!1;let t=Tt(z(e),`code`);return t!==void 0&&vt.has(t)}function It(e){if(e instanceof n.E)return B(!1,`rate-limit`);if(e instanceof n._)return B(!1,`authentication`);if(e instanceof n.S)return B(!0,`model-unavailable`);let{status:t,type:r}=Pt(e);return t===429||r!==void 0&&ht.has(r)?B(!1,`rate-limit`):t===401||t===403||r!==void 0&&_t.has(r)?B(!1,`authentication`):t===402?B(!1,`billing`):(t===void 0||t===400||t===404)&&(Ft(e)||r!==void 0&&vt.has(r))?B(!0,`model-unavailable`):Mt(e)?B(!1,`network`):t===529||r!==void 0&&gt.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 Lt(e,t){let n=Nt(e);if(t?.aborted===!0||n.some(e=>Ot(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=It(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 Rt(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 zt(e){e&&clearInterval(e)}async function V(e,t){try{await e.append(structuredClone(t))}catch(e){throw new F(t,e)}}function Bt(e){return{...e.model!==void 0&&{model:e.model},...e.tools!==void 0&&{tools:e.tools},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.temperature!==void 0&&{temperature:e.temperature},...e.effort!==void 0&&{effort:e.effort},...e.toolChoice!==void 0&&{toolChoice:e.toolChoice},...e.nativeWebTools!==void 0&&{nativeWebTools:e.nativeWebTools},...e.responseFormat!==void 0&&{responseFormat:e.responseFormat}}}async function Vt(e,t,n,r){if(!r)return e(t,n);let{journal:i,executionId:a,callId:o}=r;await V(i,{kind:`model-request`,recordId:`${o}:request`,executionId:a,callId:o,...r.route(),messages:t,options:Bt(n),...r.checkpoint&&{checkpoint:r.checkpoint}}),n.signal?.throwIfAborted();let s;try{s=await e(t,n)}catch(e){throw await V(i,{kind:`model-failure`,recordId:`${o}:failure`,executionId:a,callId:o,...r.route(),error:{name:e instanceof Error?e.name:`Error`,message:e instanceof Error?e.message:String(e)}}),e}return await V(i,{kind:`model-response`,recordId:`${o}:response`,executionId:a,callId:o,...r.route(),response:s}),s}function Ht(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:if(!e.catchall)return H(e)===`ZodObject`||void 0;switch(H(U(e.catchall,`Zod catchall`))){case`ZodNever`:return!1;case`ZodUnknown`:return!0;default:return e.catchall}}}function H(e){if(e.typeName)return e.typeName;if(typeof e.type==`string`)return`Zod${e.type[0]?.toUpperCase()+e.type.slice(1)}`}function Ut(e){let t=Wt(e);return H(t)===`ZodObject`?t:void 0}function Wt(e){let t=e;for(let e=0;e<=64;e+=1){let e=H(t),n=e===`ZodEffects`?t.schema:e===`ZodPipe`?t.in:e===`ZodOptional`||e===`ZodNullable`||e===`ZodDefault`?t.innerType:void 0;if(!n)return t;t=U(n,`${String(e)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function U(e,t){let n=e._def;if(!n||typeof n!=`object`)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function Gt(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=U(e,`Zod schema`);for(let e=0;(H(t)===`ZodEffects`||H(t)===`ZodPipe`)&&e<=64;e+=1){let e=H(t)===`ZodPipe`?t.in:t.schema;if(!e)break;t=U(e,`Zod effect inner type`)}let n=H(t);return n!==`ZodOptional`&&n!==`ZodNullable`&&n!==`ZodDefault`}function qt(e){let t=U(e,`Zod schema`),n=t.values??t.entries;if(!n||typeof n!=`object`)throw Error(`ZodEnum schema is missing enum values; cannot extract enum values.`);return Jt(n)}function Jt(e){if(Array.isArray(e))return e;let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e])=>!t.includes(Number(e))).map(([,e])=>e)}function Yt(e){let t=U(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function Xt(e){let t=H(U(e,`Zod schema`));if(!t)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t}function Zt(e,t={}){let n=U(e,`Zod schema`),r=Ut(n);if(!r)throw Error(`Zod schema root must be an object; got ${String(H(n))}. Wrap the fields in z.object({ … }) before converting.`);return Qt(r,t.allowAdditionalProperties)}function Qt(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=$t(a,t),Kt(a)&&r.push(e);let a=Ht(e,t),o=typeof a==`object`?$t(a,t):a;return{type:`object`,properties:n,required:r,...o!==void 0&&{additionalProperties:o}}}function $t(e,t){let n=U(e,`Zod type`),r=H(n),i={};switch((n.description??e.description)&&(i.description=n.description??e.description),r){case`ZodString`:return{type:`string`,...i};case`ZodNumber`:return{type:`number`,...i};case`ZodBoolean`:return{type:`boolean`,...i};case`ZodArray`:{let e=n.element??(typeof n.type==`object`?n.type:void 0);if(!e)throw Error(`ZodArray is missing item type; cannot convert to JSON schema.`);return{type:`array`,items:$t(e,t),...i}}case`ZodObject`:return{...Qt(n,t),...i};case`ZodEnum`:{let e=n.values??n.entries;if(!e)throw Error(`ZodEnum is missing enum values; cannot convert to JSON schema.`);return{...nn(e),...i}}case`ZodNativeEnum`:return{...nn(n.values),...i};case`ZodDate`:return{type:`string`,format:`date-time`,...i};case`ZodLiteral`:return{...en(Array.isArray(n.values)?n.values:[n.value]),...i};case`ZodUnion`:case`ZodDiscriminatedUnion`:{let e=n.options;if(!e||!Array.isArray(e)||e.length===0)throw Error(`${String(r)} is missing options; cannot convert to JSON schema.`);return{anyOf:e.map(e=>$t(e,t)),...i}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...$t(n.schema,t),...i};case`ZodPipe`:if(!n.in)throw Error(`ZodPipe is missing input schema; cannot convert to JSON schema.`);return{...$t(n.in,t),...i};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[$t(n.innerType,t),{type:`null`}],...i};case`ZodOptional`:case`ZodDefault`:if(!n.innerType)throw Error(`${String(r)} is missing innerType; cannot convert to JSON schema.`);return{...$t(n.innerType,t),...i};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:$t(n.valueType,t),...i}:{type:`object`,additionalProperties:{type:`string`},...i};default:throw Error(an(String(r)))}}function en(e){if(e.length===0)throw Error(`ZodLiteral declares no values; cannot convert to JSON schema.`);if(new Set(e.map(Gt)).size!==1)return{anyOf:e.map(e=>tn(e))};let t=Gt(e[0]);return t?t===`null`?{type:`null`}:{type:t,enum:e}:tn(e[0])}function tn(e){let t=Gt(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 nn(e){if(!e||typeof e!=`object`)throw Error(`ZodNativeEnum is missing enum values; cannot convert to JSON schema.`);let t=Jt(e);if(t.length===0)throw Error(`ZodNativeEnum declares no members; cannot convert to JSON schema.`);let n=t.filter(e=>typeof e==`number`),r=t.filter(e=>typeof e==`string`);return n.length>0&&r.length>0?{anyOf:[{type:`string`,enum:r},{type:`number`,enum:n}]}:{type:n.length>0?`number`:`string`,enum:t}}const rn={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 an(e){return`${e} cannot be carried by the universal JSON-schema subset: ${rn[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 on(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function sn(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 cn(e){if(on(e))return{name:`structured_output`,jsonSchema:Zt(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:sn(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=ln(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function ln(e,t,n){let r=[],i=e.type;if(e.anyOf)return dn(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${fn(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(...ln(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(un(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(...ln(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${fn(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...ln(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 ${fn(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${fn(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 ${fn(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${fn(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function un(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function dn(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>ln(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 fn(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function pn(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 mn(e,t){return b(e,t,`json_schema`)===!0?`response_schema`:b(e,t,`json_object`)===!0?`json_object`:`none`}function hn(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=mn(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 gn=e=>process.env[e];function _n(e){return t=>e[t]}function vn(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function yn(e,t={},n=gn){let r=e.credentialRequirement,i=t.baseUrl??vn(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=vn(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 bn(e,t={},n=gn){if(e.createImageProvider===void 0)return;let r=yn(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return S(t)?t:void 0}catch{return}}function xn(e,t={},n=gn){if(e.createVideoProvider===void 0)return;let r=yn(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return C(t)?t:void 0}catch{return}}const Sn=`$ENV:`;function Cn(e){return e.startsWith(Sn)}function wn(e){return`${Sn}${e}`}function Tn(e,t=gn){if(!Cn(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function En(e,t=gn){return e===void 0||e.length===0?!1:Tn(e,t)!==void 0}function Dn(e,t,n=gn){let r=g(t,e.name)?.defaults??{},i=e.model??r.model;if(!i)throw Error(`Provider ${e.name} requires model`);if(e.apiKeyRef!==void 0&&e.apiKey!==void 0)throw Error(`Provider ${e.name} has conflicting credential origins`);if(e.apiKeyRef!==void 0&&(!e.apiKeyRef.service?.trim()||!e.apiKeyRef.account?.trim()))throw Error(`Provider ${e.name} has an invalid host credential reference`);let a=e.apiKeyRef===void 0?e.apiKey??r.apiKey:void 0,o=a!==void 0&&Cn(a)?a.slice(5).trim():void 0;if(o===``)throw Error(`Provider ${e.name} has an invalid API key environment reference; use $ENV:VARIABLE_NAME`);let s=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:Tn(a,n),...o?{apiKeyEnv:o}:{},...e.apiKeyRef===void 0?{}:{apiKeyRef:e.apiKeyRef},baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...s!==void 0&&{options:s}}}function On(e,t){if(e.apiKeyRef!==void 0&&!e.apiKey)throw Error(`Provider ${e.name} requires host credential resolution before construction`);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&&!kn(e,r))throw Error(`Provider ${e.name} requires ${jn(r)}`);return n.createProvider(e)}function kn(e,t){return t.anyOf.some(t=>An(e,t))}function An(e,t){let n=e[t];return n!==void 0&&n.length>0}function jn(e){return e.anyOf.map(e=>e===`apiKey`?`apiKey (API key)`:e).join(` or `)}function W(){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 Mn(e,t){let n={id:W(),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 Nn(e,t){let n={id:W(),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 Pn(e,t){let n={id:W(),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:W(),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 In=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(be(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(Mn(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(Nn(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(Pn(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>ve(e)&&we(ye(e)),i=this.entries.filter(e=>!r(e)),a=be(Pn(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(ve).map(ye)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(ve).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(ve);if(e.length<=this.maxMessages)return;let t=e.map(ye),n=t.filter(we),r=t.filter(e=>!we(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=>!ve(e)||o.has(e.id))}},Ln=class{history;pendingAssistant=null;constructor(e=0){this.history=new In({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:W(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:W(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:W(),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 Ce(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
2
2
 
3
- [This response was interrupted by the user]`),Ce(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),Te(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},Ln=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||0,this.maxConversations=e.maxConversations||50,this.logger=O(`ConversationHistory`)}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new In(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 Rn(){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 zn(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 Bn=class extends tt{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=Rn(),r=await this.withRetry(async()=>(n=Rn(),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),zn(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=Rn(),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);zn(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 Vn=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function Hn(e){return Vn.test(e)?e:void 0}var Un=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Wn(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new n.w(`Invalid maxListeners option: ${e.maxListeners}. Must be a non-negative number.`,t,{maxListeners:e.maxListeners});if(e.buffer!==void 0&&e.buffer.maxSize!==void 0&&e.buffer.maxSize<0)throw new n.w(`Invalid buffer.maxSize option: ${e.buffer.maxSize}. Must be a non-negative number.`,t,{bufferMaxSize:e.buffer.maxSize});if(e.buffer!==void 0&&e.buffer.flushInterval!==void 0&&e.buffer.flushInterval<0)throw new n.w(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function Gn(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 Kn(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 qn(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Jn(e,t,n,r){let{listenerCounts:i,totalListeners:a}=qn(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 Yn(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.w(`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 Xn(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 Zn(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 Qn=class extends et{name=`EventEmitterPlugin`;version=`1.0.0`;pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=O(`EventEmitterPlugin`),this.metrics=e.metrics??new Un,Wn(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[P.AGENT_EXECUTION_START,P.AGENT_EXECUTION_COMPLETE,P.AGENT_EXECUTION_ERROR,P.TOOL_BEFORE_EXECUTE,P.TOOL_AFTER_EXECUTE,P.TOOL_SUCCESS,P.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??We.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(P.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(P.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(P.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(P.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(P.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?P.TOOL_ERROR:P.TOOL_SUCCESS,i=Zn(e,n,t.duration);await this.emit(r,i),await this.emit(P.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(P.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 Yn(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 Xn(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 Kn(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>Gn(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 Jn(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 $n=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var er=class{tools=new Map;register(e){if(!e.schema?.name)throw new n.j(`Tool must have a valid schema with name`);let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&k.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),k.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)){k.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),k.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 k.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(),k.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.j(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new n.j(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new n.j(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new n.j(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))tr(t,n);if(e.parameters.required){let t=e.parameters.properties||{};for(let r of e.parameters.required)if(!t[r])throw new n.j(`Required parameter "${r}" is not defined in properties`)}}};function tr(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new n.j(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>tr(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new n.j(`Parameter "${e}" must declare a type or anyOf`);if(!$n.includes(t.type))throw new n.j(`Parameter "${e}" has invalid type "${t.type}"`);if(t.properties)for(let[n,r]of Object.entries(t.properties))tr(`${e}.${n}`,r);t.items&&tr(`${e}[]`,t.items)}function nr(e,t,r){let i=cn(r,t,`$`);if(i.length>0)throw new n.A(`output does not match the declared outputSchema: ${i.join(`; `)}`,e,void 0,{outputSchemaIssues:i})}function rr(e,t,n){let r=ir(e,t,n);return r?[r]:cn(n,t,`Parameter "${e}"`)}function ir(e,t,n){if(n.anyOf)return;let r=n.type;switch(r){case`string`:return typeof t==`string`?void 0:`Parameter "${e}" must be a string, got ${ar(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${ar(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${ar(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${ar(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${ar(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 ar(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function or(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(...rr(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...rr(t,a,e))}return i}function sr(e,t,n,r){let i=or(e,t,n,r);return{isValid:i.length===0,errors:i}}var cr=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)}},lr=class extends cr{emit(e,t,n){}};const ur=new lr;function dr(e){return e===ur||e instanceof lr}function fr(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 pr(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var mr=class extends cr{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??pr()},i=fr(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function U(e,t){return new mr(e,t)}function hr(e,t){return U(e,t)}var gr=class extends cr{emit(e,t,n){this.notifyListeners(e,t,n)}};const _r={COMPLETED:`span_completed`},vr={COMPLETED:`provider_call_completed`},yr={SWITCHED:`provider_fallback`};function br(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 xr={COMPLETED:`tool_body_completed`},Sr={COMPLETED:`tool_queue_completed`},Cr={DECIDED:`tool_permission_decided`};var wr=class e{resultExecutor;schema;fn;eventService;constructor(e,t,n){this.resultExecutor=n,this.schema=e,this.fn=t,this.validateConstructorInputs()}static fromResult(t,r){return new e(t,async(e,i)=>{let a=await r(e,i);if(!a.success)throw new n.A(a.error??`Tool execution failed`,t.name);if(a.data===void 0)throw new n.A(`Tool execution succeeded but returned no data`,t.name);return a.data},r)}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.j(`Invalid parameters for tool "${r}": ${or(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let i=Date.now(),a,o;try{this.resultExecutor?(o=await this.resultExecutor(e,t),a=o.data):a=await this.fn(e,t)}catch(i){throw R(i)||i instanceof n.A||i instanceof n.j?i:new n.A(`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 s=Date.now()-i;this.schema.outputSchema&&(!o||o.success)&&nr(r,a,this.schema.outputSchema);let c=t?.instanceEventService??this.eventService;if(c){let e={timestamp:new Date,spanId:pr(),durationMs:s,op:r};c.emit(_r.COMPLETED,e)}return o||{success:!0,data:a,metadata:{executionTime:s,toolName:r,parameters:e}}}validate(e){return or(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return sr(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.j(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new n.j(`Tool function is required and must be a function`);if(!this.schema.name)throw new n.j(`Tool schema must have a name`)}};const Tr=`at least one tool must stay resident; all tools cannot be deferred`,Er=`a tool schema was withheld but no ${E} tool is offered; register the loader or turn tool search off`;function Dr(e){return e.deferLoading===!0}function Or(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!Dr(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(Tr);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(Er);return r}function kr(e){if(e.length>0&&e.every(Dr))throw Error(Tr)}var Ar=class extends de{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)}};async function jr(e,t,n){let{beforeToolEffect:r,...i}=n;return r?e.executeWithAdmission?e.executeWithAdmission(t,i,r):(await r(t),i.signal?.throwIfAborted(),e.execute(t,i)):e.execute(t,n)}function Mr(e){if(!e.name)throw new n.b(`Agent name is required`,{component:`ConversationAgent`});if(!e.aiProviders||e.aiProviders.length===0)throw new n.b(`At least one AI provider is required`,{component:`ConversationAgent`});if(!e.defaultModel)throw new n.b(`Default model configuration is required`,{component:`ConversationAgent`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new n.b(`Default model must specify both provider and model`,{component:`ConversationAgent`});let t=e.aiProviders.map(e=>e.name),r=t.filter((e,n)=>t.indexOf(e)!==n);if(r.length>0)throw new n.b(`Duplicate AI provider names: ${r.join(`, `)}`,{component:`ConversationAgent`,duplicates:r});if(e.providerOwnership!==void 0){if(!e.providerOwnership||typeof e.providerOwnership!=`object`||Object.getPrototypeOf(e.providerOwnership)!==Object.prototype&&Object.getPrototypeOf(e.providerOwnership)!==null)throw new n.b(`Provider ownership must be a registration-name record`);for(let[r,i]of Object.entries(e.providerOwnership))if(!t.includes(r)||i!==`owned`&&i!==`borrowed`)throw new n.b(`Invalid provider ownership for registration '${r}'`)}if(!t.includes(e.defaultModel.provider))throw new n.b(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`ConversationAgent`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var Nr=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.b(`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().addResultTool(n.schema,async(e,t)=>{if(!t)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return jr(n,e,t)},n.provenance);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(A.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.b("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.b(`Both provider and model are required`,{component:`ConversationAgent`});let t=this.getAIProviders(),r=t.getProviderNames();if(!r.includes(e.provider))throw new n.b(`AI Provider '${e.provider}' not found. Available: ${r.join(`, `)}`,{component:`ConversationAgent`,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.b(`No provider is currently set`,{component:`ConversationAgent`});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.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return jr(e,t,n)},e.provenance),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},Pr=class extends fe{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new er,this.resolveToolSearchMode=e.resolveToolSearchMode,this.isToolVisible=e.isToolVisible??(()=>!0)}async doInitialize(){k.debug(`Tools initialized`)}async doDispose(){this.registry.clear(),this.loadedDeferredTools.clear(),delete this.allowedTools,k.debug(`Tools disposed`)}addTool(e,t){this.ensureInitialized();let n=new wr(e,t);this.registry.register(n),k.debug(`Tool "${e.name}" registered successfully`)}addResultTool(e,t,n){this.ensureInitialized();let r=wr.fromResult(e,t);Object.defineProperty(r,"provenance",{value:le(n),enumerable:!0}),this.registry.register(r)}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)}getLoadedDeferredTools(){return[...this.loadedDeferredTools].sort()}listDeferredTools(){return this.resolveToolSearchMode()===`off`?[]:this.getTools().filter(e=>Dr(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.A(`Tool "${e}" is not registered, so it cannot be loaded`,e);return t});for(let e of t)Dr(e)&&this.loadedDeferredTools.add(e.name);return t}async executeTool(e,t,r){let i=await this.executeToolResult(e,t,r);if(!i.success)throw new n.A(i.error||`Tool execution failed`,e);if(i.data===void 0)throw new n.A(`Tool execution succeeded but returned no data`,e);return i.data}async executeToolResult(e,t,r){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new n.A(`Tool "${e}" is not in the allowed tools list`,e);let i=this.registry.get(e);if(!i)throw new n.A(`Tool "${e}" is not registered`,e);let a=le(i.provenance),o;try{o=await i.execute(t,r)}catch(t){throw R(t)?t:t instanceof Error?new n.A(t.message,e,t):new n.A(String(t),e)}return ue(o,a)}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],k.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=Ir(e.metadata),n=Rr(e.usage);return t??n}function Ir(e){if(!e)return;let t=Rr({inputTokens:zr(e,`inputTokens`),outputTokens:zr(e,`outputTokens`),promptTokens:zr(e,`promptTokens`),completionTokens:zr(e,`completionTokens`),totalTokens:zr(e,`totalTokens`),cacheReadTokens:zr(e,`cacheReadTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return Lr(n);if(Vr(n))return Rr(n)}function Lr(e){try{return Rr(JSON.parse(e))}catch{return}}function Rr(e){if(!e)return;let t=Br(e.inputTokens,e.promptTokens),n=Br(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=Br(e.totalTokens),i=Br(e.cacheReadTokens),a=i!==void 0&&i>=0&&i<=t;return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r},...a&&{cacheReadTokens:i}}}function zr(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Br(...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 Hr(e){return Math.ceil(JSON.stringify(e).length/4)}function Ur(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function Wr(e,t={}){let n=Hr(e),r=Gr(e),i=r?.tokens,a=Kr(t.usageFloorTokens),o=r?.index===e.length-1,s=r?r.tokens+(o?0:Hr(e.slice(r.index+1))):0;return{usedTokens:o?Math.max(i??0,a??0):Math.max(n,s,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function Gr(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 Kr(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const qr=O(`agent-core:models`),Jr=new Set;function Yr(e,t,n){let r=`${e}:${t}`;Jr.has(r)||(Jr.add(r),qr.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 Xr=2e5,Zr=new Map;function Qr(...e){for(let t of e){let e=Zr.get(t.id);e&&!$r(e,t)&&qr.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)`),Zr.set(t.id,t)}}function $r(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function ei(e){return Zr.get(e)}function ti(e){let t=ei(e)?.contextWindow;return t===void 0?(Yr(e,`context window`,Xr),Xr):t}const ni=16384;function ri(e){let t=ei(e)?.maxOutput;return t===void 0?(Yr(e,`max output`,ni),ni):t}function ii(e){return ei(e)?.name??e}function ai(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 oi(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(Dr);return i.length===0?`off`:i.length>15||Ur(i)/ti(t)>=.1?`on`:`off`}function si(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function ci(e){let t=new Pr({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:oi(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var li=class{agentName;moduleRegistry;logger;isReady;ensureReady;constructor(e,t,n,r,i){this.agentName=e,this.moduleRegistry=t,this.logger=n,this.isReady=r,this.ensureReady=i}async registerModule(e,t){await this.ensureReady(),await this.moduleRegistry.registerModule(e,{autoInitialize:t?.autoInitialize??!0,validateDependencies:t?.validateDependencies??!0}),this.logger.info(`Module registered`,{moduleName:e.name,moduleType:e.getModuleType().type})}async unregisterModule(e){if(!this.isReady())return!1;let t=await this.moduleRegistry.unregisterModule(e);return t&&this.logger.info(`Module unregistered`,{moduleName:e}),t}getModule(e){if(this.isReady())return this.moduleRegistry.getModule(e)}getModulesByType(e){return this.isReady()?this.moduleRegistry.getModulesByType(e):[]}getModules(){return this.isReady()?this.moduleRegistry.getAllModules():[]}getModuleNames(){return this.isReady()?this.moduleRegistry.getModuleNames():[]}hasModule(e){return this.isReady()?this.moduleRegistry.hasModule(e):!1}async executeModule(e,t){await this.ensureReady();let n={agentName:this.agentName,...t.executionId&&{executionId:t.executionId},...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.metadata&&{metadata:t.metadata}};return await this.moduleRegistry.executeModule(e,n)}getModuleStats(e){if(this.isReady())return this.moduleRegistry.getModuleStats(e)}},ui=class{logger;isReady;getExecutionService;constructor(e,t,n){this.logger=e,this.isReady=t,this.getExecutionService=n}addPlugin(e){let t=this.getExecutionService();if(!this.isReady()||!t)throw new n.b(`Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.`,{pluginName:e.name});t.registerPlugin(e),this.logger.debug(`Plugin added`,{pluginName:e.name})}removePlugin(e){let t=this.getExecutionService();if(!t)return!1;let n=t.removePlugin(e);return n&&this.logger.debug(`Plugin removed`,{pluginName:e}),n}getPlugin(e){let t=this.getExecutionService();if(t)return t.getPlugin(e)}getPlugins(){let e=this.getExecutionService();return e?e.getPlugins():[]}getPluginNames(){let e=this.getExecutionService();return!this.isReady()||!e?[]:e.getPlugins().map(e=>e.name)}};function di(e){return{moduleManager:new li(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new ui(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new Nr(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 fi={ASSIGNED:`assigned`,COMPLETED:`completed`},pi={MESSAGE:`message`,INPUT:`input`};function mi(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(A.CREATED,{parameters:{tools:n,systemMessage:e.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function hi(e,t,n,r,i){dr(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:Ge,ownerId:t,ownerPath:_i(t,n)})}function gi(){return new Qn({enabled:!0,events:[P.MODULE_INITIALIZE_START,P.MODULE_INITIALIZE_COMPLETE,P.MODULE_INITIALIZE_ERROR,P.MODULE_EXECUTION_START,P.MODULE_EXECUTION_COMPLETE,P.MODULE_EXECUTION_ERROR,P.MODULE_DISPOSE_START,P.MODULE_DISPOSE_COMPLETE,P.MODULE_DISPOSE_ERROR]})}function _i(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function vi(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.onThinkingDelta&&{onThinkingDelta:t.onThinkingDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.executionJournal&&{executionJournal:t.executionJournal},...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 yi(e,t,n={},r){try{e.emitAgentEvent(A.EXECUTION_START,{}),e.logger.debug(`Starting ConversationAgent 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,vi(e,n));if(e.logger.debug(`ConversationAgent execution completed`,{success:o.success,duration:o.duration,tokensUsed:o.tokensUsed,toolsExecuted:o.toolsExecuted,interrupted:o.interrupted}),o.interrupted)return e.emitAgentEvent(A.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(A.EXECUTION_COMPLETE,{}),o.response}catch(t){throw t instanceof I?t:(e.logger.error(`ConversationAgent execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(A.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}}async function*bi(e,t,n={},r){let i=!1;try{e.emitAgentEvent(A.EXECUTION_START,{}),e.logger.debug(`Starting ConversationAgent 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,vi(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 t instanceof I?(i=!0,t):(e.logger.error(`ConversationAgent streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(A.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}finally{i||e.emitAgentEvent(A.EXECUTION_COMPLETE,{})}}function xi(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function Si(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 Ci(e,t,r,i){let a=(r.outputRetries??2)+1,o=xi(i),s=t,c=[];for(let t=1;t<=a;t++){let n=Ti(i,await yi(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=Si(i,c))}throw new n.k(`response failed schema validation after ${a} attempt(s)`,c,a)}async function*wi(e,t,r,i){let a=(r.outputRetries??2)+1,o=xi(i),s=t,c=[];for(let t=1;t<=a;t++){let n=Ti(i,yield*bi(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=Si(i,c))}throw new n.k(`response failed schema validation after ${a} attempt(s)`,c,a)}function Ti(e,t){let n=fn(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 Ei(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.parts===void 0?{}:{parts:structuredClone(e.parts)},...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 Di(e,t){return e.getConversationStore(t).getHistory()}function Oi(e,t,n){e.getConversationStore(t).addEntry(n)}function ki(e,t){e.getConversationStore(t).clear()}function Ai(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 ji(e,t,n){e.getConversationStore(t).addMessage(n)}var Mi=class extends fe{providers=new Map;retirements=new Set;closing=new WeakMap;currentProvider;currentModel;constructor(){super({readyOnConstruction:!0})}async doInitialize(){k.debug(`AIProviders initialized`)}async doDispose(){let e=[...this.providers.entries()];this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0;for(let[t,n]of e)n.ownership===`owned`&&this.retire(t,n.provider);await Promise.all(this.retirements),k.debug(`AIProviders disposed`)}retire(e,t){if(this.closing.has(t))return;let n=Promise.resolve().then(()=>t.close?.()).catch(t=>{k.warn(`Failed to close AI provider ${e}`,{error:t instanceof Error?t.message:String(t)})}).finally(()=>{this.retirements.delete(n),this.closing.delete(t)});this.closing.set(t,n),this.retirements.add(n)}addProvider(e,t,r={}){this.ensureInitialized();let i=st.validateProviderName(e);if(!i.isValid)throw new n.j(`Invalid provider name: ${i.errors.join(`, `)}`);if(!t||typeof t!=`object`||Array.isArray(t))throw new n.j(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new n.j(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new n.j(`Provider must have a chat method`);let a=r.ownership===void 0?`owned`:r.ownership;if(a!==`owned`&&a!==`borrowed`)throw new n.j(`Provider ownership must be owned or borrowed`);this.providers.has(e)&&k.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.provider.name});let o=this.providers.get(e);this.providers.set(e,{provider:t,ownership:a}),o?.ownership===`owned`&&o.provider!==t&&this.retire(e,o.provider),k.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)){k.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);this.providers.delete(e),t?.ownership===`owned`&&this.retire(e,t.provider),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,k.debug(`Cleared current provider selection after removing "${e}"`)),k.debug(`AI provider "${e}" removed successfully`)}getProvider(e){return this.ensureInitialized(),this.providers.get(e)?.provider}getProviders(){return this.ensureInitialized(),Object.fromEntries([...this.providers].map(([e,t])=>[e,t.provider]))}setCurrentProvider(e,t){if(this.ensureInitialized(),!this.providers.get(e))throw new n.b(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,k.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)?.provider}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.provider);return n}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return!1;let n=this.providers.get(t)?.provider;return!!(n&&typeof n.chatStream==`function`)}getProviderCount(){return this.ensureInitialized(),this.providers.size}},Ni=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`)}},Pi=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new Ni;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.v(`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)}},Fi=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 Ii(e){return`executionId`in e||`toolName`in e}function Li(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 Ri(e,t,n,r,i,a,o){e.emitExecution(j.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 zi(e,t,n,r){e.emitExecution(j.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:Li(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 Bi(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(j.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:Li(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(Li(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 U(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 U(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})};e.emitWithContext(j.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(j.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:i.length,round:s},metadata:{toolsExecuted:r.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:s}},d,f)}var Hi=class{queuedAt=new Date().toISOString();pending;constructor(e,t){this.pending=new Set(e.filter((e,n)=>!t?.has(n)))}end(e,t){if(this.pending.delete(e))try{let n=new Date,r=n.toISOString();Promise.resolve(e.eventService?.emit(Sr.COMPLETED,{executionId:e.executionId,queuedAt:this.queuedAt,timestamp:n,endedAt:r,disposition:t})).catch(()=>void 0)}catch{}}finish(){for(let e of this.pending)this.end(e,`not-dispatched`)}};function Ui(e){e.wake?.(),e.changed=new Promise(t=>{e.wake=t})}function Wi(e){let t=new Set;for(let r of e.requests){let{executionId:e}=Yi(r);if(t.has(e))throw new n.j(`Scheduling requires unique call IDs`);t.add(e)}let r=new Map;for(let[i,a]of e.scheduling){if(!t.has(i))throw new n.j(`Scheduling names an unknown call: ${i}`);let e=[...a.dependsOn??[]];for(let r of e)if(!t.has(r))throw new n.j(`Scheduling dependency is unknown: ${r}`);let o=a.resources?.map(e=>{if(typeof e.key!=`string`||!e.key.trim()||e.access!==`read`&&e.access!==`write`)throw new n.j(`Scheduling requires nonempty resource identities and read/write access`);return{key:e.key,access:e.access}});r.set(i,{dependsOn:e,...o===void 0?{}:{resources:o}})}let i=new Set;for(;i.size<t.size;){let e=i.size;for(let e of t)(r.get(e)?.dependsOn??[]).every(e=>i.has(e))&&i.add(e);if(i.size===e)throw new n.j(`Scheduling dependencies contain a cycle`)}return r}function Gi(e,t){return e?.resources===void 0||t?.resources===void 0||e.resources.some(e=>t.resources.some(t=>e.key===t.key&&(e.access===`write`||t.access===`write`)))}function Ki(e,t){let n=e.metadata?.toolProvenance;return typeof n!=`string`||typeof t.metadata?.toolProvenance==`string`?t:{...t,metadata:{...t.metadata,toolProvenance:n}}}async function qi(e,t,n){let r=e.requests[t];e.queue.end(r,`not-dispatched`),Yi(r);let i=Ki(r,{executionId:r.executionId,toolName:r.toolName,success:!1,result:null,error:n,metadata:{errorCode:Xe,dispatchStatus:`not-dispatched`}});return r.eventService?.emit(M.CALL_ERROR,{timestamp:new Date,toolName:r.toolName,error:n}),await e.journal?.onResult(t,i),i}async function Ji(e,t,n){let r=new Map(e.requests.map((e,t)=>[e.executionId,t]));for(;!n.fatalError&&n.pending.size>0;){let i=n.changed,a,o;for(let t of n.pending){let i=e.requests[t],s=e.scheduling.get(i.executionId),c=(s?.dependsOn??[]).map(e=>n.resultsByIndex[r.get(e)]);if(n.errorsByIndex.some(na)&&!e.continueOnError){a=t,o=`Skipped after an earlier call failed; this call was not dispatched`;break}if(c.some(e=>e!==void 0&&!e.success)){a=t,o=`Skipped because a required predecessor failed; this call was not dispatched`;break}if(!c.some(e=>e===void 0)&&![...n.active].some(t=>Gi(s,e.scheduling.get(e.requests[t].executionId)))){a=t;break}}if(a===void 0){await i;continue}n.pending.delete(a),n.active.add(a);try{if(o){let t=await qi(e,a,o);n.resultsByIndex[a]=t,n.errorsByIndex[a]=ea(t)}else await ia(e,t,n,a)}catch(e){if(!R(e))throw e;let t=mt(n.fatalError,e);R(t)&&(n.fatalError=t),e instanceof I||n.abort.abort(e)}finally{n.active.delete(a),Ui(n)}}}function Yi(e){if(!e.executionId)throw new n.j(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new n.j(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new n.j(`[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=Yi(e),i=H(),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 Zi(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null,metadata:{dispatchStatus:`not-dispatched`}}}function Qi(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function $i(e){let t=e.argumentDecodeError;if(e.eventService&&t!==void 0){let n={timestamp:new Date,toolName:e.toolName,error:t};e.eventService.emit(M.CALL_ERROR,n)}return{toolName:e.toolName,result:null,success:!1,error:t,executionId:e.executionId,metadata:{errorCode:Ye,requestedTool:e.toolName,dispatchStatus:`not-dispatched`}}}function ea(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function ta(e){return e!==void 0}function na(e){return e!==void 0}function ra(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 ia(e,t,n,r){let i=e.requests[r];if(i)try{let a=await ca(e,t,i,r);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=ea(a))}catch(e){if(R(e)){let t=mt(n.fatalError,e);R(t)&&(n.fatalError=t),e instanceof I||n.abort.abort(e);return}let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=Qi(i,t)}}async function aa(e,t,n){for(;!n.fatalError&&n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await ia(e,t,n,r)}}async function oa(e,t){let n=e;if(n.scheduling)try{n={...n,scheduling:Wi(n)}}catch(e){let t=e instanceof Error?e.message:String(e),r=[];for(let[e]of n.requests.entries()){let i=n.recoveredResults?.get(e);r.push(i?structuredClone(i):await qi(n,e,`Invalid scheduling policy: ${t}; this call was not dispatched`))}return{results:r,errors:r.filter(e=>!e.success).map(ea)}}let r=new AbortController,i=n.journal||n.scheduling?{...n,signal:n.signal?AbortSignal.any([n.signal,r.signal]):r.signal}:n,a={resultsByIndex:Array(n.requests.length),errorsByIndex:Array(n.requests.length),nextRequestIndex:0,abort:r};if(n.scheduling){a.pending=new Set(n.requests.map((e,t)=>t)),a.active=new Set,Ui(a);for(let[e,t]of n.recoveredResults??[])a.pending.delete(e)&&(a.resultsByIndex[e]=structuredClone(t),t.success||(a.errorsByIndex[e]=ea(t)))}let o=ra(n.requests.length,n.maxConcurrency),s=Array.from({length:o},()=>n.scheduling?Ji(i,t,a):aa(i,t,a));if(await Promise.all(s),a.fatalError)throw a.fatalError;let c=a.resultsByIndex.filter(ta),l=a.errorsByIndex.filter(na);if(!n.scheduling&&l.length>0&&!n.continueOnError)throw l[0];return{results:c,errors:l}}async function sa(e,t){let n=[],r=[],i=!1;for(let[a,o]of e.requests.entries()){if(i&&!e.recoveredResults?.has(a)){try{Yi(o)}catch(e){r.push(e instanceof Error?e:Error(String(e)));continue}let t=await qi(e,a,`Skipped after an earlier call failed; this call was not dispatched`);n.push(t);continue}try{let s=await ca(e,t,o,a);n.push(s),s.success||r.push(ea(s)),!s.success&&!e.continueOnError&&(i=!0)}catch(t){if(R(t))throw t;let n=t instanceof Error?t:Error(String(t));r.push(n),e.continueOnError||(i=!0)}}return{results:n,errors:r}}async function ca(e,t,n,r){let i=e.recoveredResults?.get(r);if(i)return structuredClone(i);e.queue.end(n,e.signal?.aborted||n.argumentDecodeError!==void 0?`not-dispatched`:`admission-started`);let a,o=e.journal;if(e.signal?.aborted)a=Zi(n);else if(n.argumentDecodeError!==void 0)a=$i(n);else if(o&&await o.beforeDispatch(r),e.signal?.aborted)a=Zi(n);else{let i={...Xi(n,e.signal),...o?.continuation?{continuation:o.continuation(r)}:{},...o?.beforeEffect?{beforeToolEffect:e=>o.beforeEffect(r,e)}:{}};e.lifecycle&&await e.lifecycle.beforeDispatch(r,i);try{a=await la(e,r,()=>t.executeTool(n.toolName,n.parameters,i))}catch(e){if(R(e))throw e;a=Qi(n,e instanceof Error?e:Error(String(e)))}if(a.metadata?.dispatchStatus!==void 0){let{dispatchStatus:e,...t}=a.metadata;a={...a,metadata:t}}e.lifecycle&&await e.lifecycle.onResult(r,i,a)}return a=Ki(n,a),await e.journal?.onResult(r,a),a}async function la(e,t,n){let r;try{r={result:await n()}}catch(e){r={error:e}}try{await e.journal?.settle?.(t)}catch(e){r={error:`error`in r?mt(r.error,e):e}}if(`error`in r)throw r.error;return r.result}async function ua(e,t,n){n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`);let r=new Hi(e.requests,e.recoveredResults),i={...e,queue:r};try{return e.scheduling||e.mode===`parallel`?await oa(e.mode===`sequential`?{...i,maxConcurrency:1}:i,t):await sa(i,t)}finally{r.finish()}}var da=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=je){this.tools=e,this.logger=t,this.deferredToolCatalog={listDeferredTools:()=>this.tools.listDeferredTools(),loadDeferredTools:e=>this.tools.loadDeferredTools(e)}}getLoadedDeferredTools(){return this.tools.getLoadedDeferredTools?.()}restoreLoadedDeferredTools(e){for(let t of e)if(!this.tools.hasTool(t))throw new L(`EXECUTION_RECOVERY_INVALID`,`Recovery tool is no longer registered: ${t}`);let t=new Set(this.tools.getTools().map(e=>e.name));this.tools.loadDeferredTools(e.filter(e=>t.has(e)))}setAskHandler(e){this.askHandler=e}async executeTool(e,t,r,i=`offered`){this.logger.debug(`Executing tool: ${e}`);let a;try{if(!r?.executionId)throw new n.j(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);a=le(this.tools.getTool?.(e)?.provenance),r.signal?.throwIfAborted();let o=i===`offered`&&this.tools.getToolSchema(e)?.deferLoading===!0&&!this.tools.isToolOffered(e);if(!this.tools.hasTool(e)||o){let t=(i===`registered`?this.tools.getTools():this.tools.getOfferedTools()).map(e=>e.name).sort(),n=pa(e,t,o),a=r.eventService;if(a){let t={timestamp:new Date,toolName:e,error:n};a.emit(M.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:Je,requestedTool:e,availableTools:t}}}let s=r.eventService;if(s){let n={timestamp:new Date,toolName:e,parameters:t};s.emit(M.CALL_START,n)}let{toolName:c,parameters:l,...u}=r,d={...u,deferredTools:this.deferredToolCatalog,toolName:e,parameters:t,executionId:r.executionId},f=ue(this.tools.executeToolResult?await this.tools.executeToolResult(e,t,d):{success:!0,data:await this.tools.executeTool(e,t,d)},a);if(!f.success){let t=f.error||`Tool execution failed`;return s?.emit(M.CALL_ERROR,{timestamp:new Date,toolName:e,error:t}),{success:!1,error:t,result:f.data,parts:f.parts,metadata:f.metadata,toolName:e,executionId:d.executionId}}if(f.data===void 0)throw Error(`Tool execution succeeded but returned no data`);let p=f.data;if(this.logger.debug(`Tool execution completed: ${e}`),s){let t={timestamp:new Date,toolName:e,result:p};s.emit(M.CALL_COMPLETE,t),s.emit(M.CALL_RESPONSE_READY,t)}return{success:!0,result:p,...f.parts?{parts:f.parts}:{},...f.metadata?{metadata:f.metadata}:{},toolName:e,executionId:d.executionId}}catch(t){if(R(t))throw 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(M.CALL_ERROR,t)}let o=ue({success:!1,error:n.message},a);return{success:!1,error:n.message,...o.parts?{parts:o.parts}:{},...o.metadata?{metadata:o.metadata}:{},toolName:e,executionId:r?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=fa(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:ue({success:!0,metadata:t.metadataFactory?.(e)},le(this.tools.getTool?.(e.function.name)?.provenance)).metadata,...this.askHandler?{ask:this.askHandler}:{},deferredTools:this.deferredToolCatalog,...n.ok?{}:{argumentDecodeError:n.error}}})}async executeTools(e){return ua(e,this,this.logger)}};function fa(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 pa(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 ma(e,t){try{e()}catch(e){if(t===void 0)throw e}}function ha(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function ga(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:Ke,ownerId:r,ownerPath:i}}function _a(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...ga(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:Ke,ownerId:r,ownerPath:o}}function va(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:qe,ownerId:i,ownerPath:[...ga(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function ya(e,t,n,r,i,a){let o=_a(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:Ke,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function ba(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 xa=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=ha(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(dr(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=U(this.baseEventService,{ownerType:qe,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 ga(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return _a(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return va(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return ya(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 U(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(dr(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){Ri(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){zi(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){Bi(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 Sa(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function Ca(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 wa(e){return e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0}function Ta(e,t,n,r,i,a){let o=e.getMessages(),s=Ca(o,i.turnMessageId),c=s.filter(wa).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:Sa(a,f)}:{}}}function Ea(e,t,n,r,i,a,o=`round`){return structuredClone({version:1,effectAdmission:`required`,messages:e,round:t.currentRound,contextLimit:ti(r.defaultModel.model),cumulativeInputTokens:t.cumulativeInputTokens,sameToolInputCounts:[...t.sameToolInputCounts],maxSameToolInputs:n.maxSameToolInputs??r.maxSameToolInputs,continuation:{version:1,kind:o,startedAt:n.startTime.toISOString(),turnMessageId:e.find(e=>e.role===`user`&&e.metadata?.executionId===n.executionId)?.id??``,model:r.defaultModel,timeout:r.timeout,toolSearch:r.toolSearch,structuredOutput:r.responseFormat!==void 0&&r.responseFormat.type!==`text`,options:{maxExecutionRounds:i,maxSameToolInputs:n.maxSameToolInputs??r.maxSameToolInputs,allowToolOnlyCompletion:n.allowToolOnlyCompletion??!1,maxTokens:n.maxTokens,temperature:n.temperature,toolChoice:n.toolChoice??r.defaultModel.toolChoice,withholdHostedTools:n.withholdHostedTools??!1,ephemeralSystemContext:n.ephemeralSystemContext,sessionId:n.sessionId,userId:n.userId,metadata:n.metadata},toolsExecuted:t.toolsExecuted,consecutiveUnknownToolFailureRounds:t.consecutiveUnknownToolFailureRounds,forcedSummaryInstruction:t.forcedSummaryInstruction,loadedDeferredTools:a}})}function Da(e,t,n){e.tools!==void 0&&(x(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function Oa(e,t,n,r,i=!1){let a=ka(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw at();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(at())};o?.addEventListener(`abort`,h,{once:!0});let g=n.onTextDelta,_=n.onThinkingDelta,v={...n,signal:s.signal,...g===void 0?{}:{onTextDelta:e=>{m(),g(e)}},onThinkingDelta:e=>{m(),_?.(e)}};m();try{let n=new Promise((e,t)=>{d=t});return u=(async()=>e(t,v))(),await Promise.race([u,n])}finally{l=!0,f(),o?.removeEventListener(`abort`,h),i&&u&&await u.then(()=>{},e=>{if(e instanceof F)throw e})}}function ka(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function Aa(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 ja={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(Aa(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(Aa(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(Aa(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(Aa(t),t.executionResult)},onMessageAdded:async(e,t)=>{e.onMessageAdded&&t.message&&await e.onMessageAdded(t.message)},beforeToolCall:async(e,t)=>{e.beforeToolCall&&t.toolData&&await e.beforeToolCall(t.toolData.toolName,t.toolData.parameters,t.toolData)},beforeToolExecution:async(e,t)=>{e.beforeToolExecution&&t.toolData&&await e.beforeToolExecution(Aa(t),t.toolData)},afterToolCall:async(e,t)=>{e.afterToolCall&&t.toolData&&t.toolResult&&await e.afterToolCall(t.toolData.toolName,t.toolData.parameters,t.toolResult)},beforeConversation:async(e,t)=>{e.beforeConversation&&await e.beforeConversation(Aa(t))},onStreamingChunk:async(e,t)=>{e.onStreamingChunk&&t.message&&await e.onStreamingChunk(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:`${Ke}.${j.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 W(e,t,n,r){let i=ja[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 Ma(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 Na(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function Pa(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 Fa(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 Ia(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 La(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 W(a,`onError`,{error:e instanceof Error?e:Error(String(e)),executionContext:Ha(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(j.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function za(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Ba(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function Va(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?.onThinkingDelta&&{onThinkingDelta:a.onThinkingDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.executionJournal&&{executionJournal:a.executionJournal},...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 Ha(e){let t={conversationId:Ba(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 Wa(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=mn({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:H(),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 Ga(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 G(e,t){return e.current?.provider??t.currentInfo.provider}function K(e,t){return e.current?.model??t}function Ka(e,t){e.current={provider:t.to.provider,model:t.to.model}}function qa(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 Ja(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function Ya(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 Xa(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function Za(e,t,n,r){let i=Ma(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 Qa(e,t,n,r,i,a,o,s,c,l={},u){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 d=t.defaultModel.model;Xa(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let f=Za(d,t,n,i);Pa(f.toolChoice,f.tools),Da(f,d,n);let{messages:p,outcome:m}=Wa(f,e,d,n);a?.({messages:p,options:f,...m!==void 0&&{structuredOutput:m}});let h=n.provider.chat.bind(n.provider),g=(e,t)=>Vt((e,t)=>(s?.(`invoked`,t.model??d),h(e,Ja(t,c?.()))),e,t,u),_=f.effort??`auto`;if(r){let e=r.lookup(p,K(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:_});if(e){s?.(`cache-hit`,f.model??d);let t={role:`assistant`,content:e,timestamp:new Date,id:H(),state:`complete`};return u&&await V(u.journal,{kind:`model-cache-hit`,checkpoint:u.checkpoint,recordId:`${u.callId}:cache`,executionId:u.executionId,callId:u.callId,...u.route(),response:t}),t}let n=await Oa(g,p,f,t.timeout,o||!!u);return typeof n.content==`string`&&r.store(p,K(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,n.content,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:_}),n}return Oa(g,p,f,t.timeout,o||!!u)}function $a(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 eo(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 to(e){let t=0,n=0,r,i=!1;for(let a of e){if(a.role!==`assistant`)continue;let e=io(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 no(e){let t=to(e.filter(e=>ve(e)&&e.data!==void 0).map(ye));if(t)return{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}function ro(){return H()}function io(e){let t=Fr(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 ao(e){let t=eo(e).provenance,n=io(e);return n?{...n,totalTokens:n.inputTokens+n.outputTokens,usageProvenance:t===`complete`?`complete`:`partial`}:{usageProvenance:t}}const oo=/^peer:[A-Za-z0-9._:-]{1,128}$/,so=/<(\/?)(peer_message)/gi;function co(e){return e.replace(so,`&lt;$1$2`)}function lo(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function uo(e){return oo.test(e)?e:`peer:unverified`}function fo(e){return e.map(e=>{if(e.type!==`text`)return e;let t=co(e.text);return t===e.text?e:{...e,text:t}})}function po(e){if(e.role===`tool`){let t=co(e.content),n=e.parts?fo(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=lo(e),n=co(e.content),r=e.parts?fo(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="${uo(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function mo(e){return e.map(po)}async function ho(e,t,n,r,i,a,o,s,c=10,l){s.warn(`No final text response — forcing summary call`,{maxRounds:c===0?`unlimited`:c,currentRound:i.currentRound,conversationId:a});let u={},d=!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.`,f=[...mo(e.getMessages()),{id:H(),role:`user`,content:s,state:`complete`,timestamp:new Date}],p=n.systemMessage??``,m=f.some(e=>e.role===`system`&&e.content===p),h=p&&!m?[{id:H(),role:`system`,content:p,state:`complete`,timestamp:new Date},...f]:f;u=Ga(t,t.aiProviderInfo.model,r);let g={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},...o.onThinkingDelta&&{onThinkingDelta:o.onThinkingDelta},executionId:r,onModelFallback:e=>{Ka(u,e),o.onExecutionEvent?.(yr.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}),_()}},_=()=>{o.onExecutionEvent?.(`provider_request`,{executionId:r,conversationId:a,round:i.currentRound,provider:G(u,t),model:K(u,t.aiProviderInfo.model),messages:h,forcedSummary:!0})};_();let v=Date.now(),y=H(),b={invoked:!1},x=`failure`,S,C;try{S=await Oa((a,s)=>Vt((e,n)=>{b.invoked=!0,b.startedAtMs=Date.now();let r=qa(o.traceContext,t.provider,t.currentInfo.provider,y);return t.provider.chat(e,Ja(n,r))},a,s,o.executionJournal?{journal:o.executionJournal,executionId:r,callId:y,checkpoint:Ea(e.getMessages(),i,o,n,c,l,`summary`),route:()=>({providerId:G(u,t),modelId:K(u,t.aiProviderInfo.model)})}:void 0),h,g,n.timeout,o.awaitProviderSettlement||!!o.executionJournal),x=`success`}catch(e){throw e instanceof F?C=e:it(e,o.signal)&&(x=`interrupted`),e}finally{let e=b.invoked?eo(S):{provenance:`absent`};ma(()=>{o.onExecutionEvent?.(vr.COMPLETED,{executionId:r,conversationId:a,round:i.currentRound,startedAt:new Date(b.startedAtMs??v).toISOString(),endedAt:new Date(Math.max(Date.now(),b.startedAtMs??v)).toISOString(),outcome:x,callId:y,disposition:b.invoked?`invoked`:`preflight-refused`,...b.invoked&&{providerId:G(u,t),modelId:K(u,t.aiProviderInfo.model),...typeof S?.metadata?.providerRequestId==`string`&&{providerRequestId:S.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}}})},C)}if(!S)throw Error(`Forced summary provider returned no response.`);let w=(typeof S.content==`string`?S.content:``)||`Maximum rounds reached. Partial results available in conversation history.`,T={...S.metadata??{},round:i.currentRound,executionId:r,providerCallId:y,providerId:G(u,t),modelId:K(u,t.aiProviderInfo.model),...ao(S)};e.addAssistantMessage(w,[],T),d=!0,o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:w}),ba(e,o,r,a,{round:i.currentRound})}catch(n){if(n instanceof F)throw n;if(d){s.warn(`Forced summary announcement failed`,{error:n instanceof Error?n.message:String(n)});return}if(it(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 l={round:i.currentRound,executionId:r,providerId:G(u,t),modelId:K(u,t.aiProviderInfo.model),providerError:!0};e.addAssistantMessage(`Request failed: ${c}`,[],{...l,forcedSummary:!0}),ba(e,o,r,a,l)}}function go(e,t,n){if(e.contextOverflowed&&n.warn(`[ROUND] Tool results partially skipped due to context overflow — continuing to let AI respond`,{added:e.addedCount,skipped:e.skippedCount,round:t.currentRound}),e.unknownToolFailureCount>0?t.consecutiveUnknownToolFailureRounds+=1:t.consecutiveUnknownToolFailureRounds=0,t.consecutiveUnknownToolFailureRounds>=2){let r=[...new Set(e.unknownToolNames)].sort();return t.forcedSummaryInstruction=[`The model repeatedly requested unavailable tool(s): ${r.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(` `),n.warn(`[ROUND] Stopping repeated unavailable tool-call loop`,{unavailableTools:r,consecutiveRounds:t.consecutiveUnknownToolFailureRounds,round:t.currentRound}),!0}return!1}const _o=.95;function vo(e,t,n){let r=Wr(e,{usageFloorTokens:n}),i=ti(t),a=i*_o,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:_o*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function yo(e,t,n,r,i,a){let o=n.currentRound,s=vo(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}),ba(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function bo(e,t,n,r,i=[],a){let o=0,s=0,c=Promise.resolve();return{wrappedOnTextDelta:s=>{if(e.onExecutionEvent?.(`provider_stream_raw_delta`,{executionId:n,conversationId:e.conversationId,round:r,sequence:o,delta:s}),o++,t.appendStreaming(s),e.onTextDelta?.(s),i.length>0&&a!==void 0){let e=Mn(s);c=c.then(()=>W(i,`onStreamingChunk`,{message:e},a))}},wrappedOnProviderNativeRawPayload:t=>{let i=t.sequence??s;s=Math.max(s,i+1),e.onExecutionEvent?.(`provider_native_raw_payload`,{executionId:n,conversationId:e.conversationId,round:r,...t,sequence:i})},settleStreamingChunkHooks:()=>c}}async function xo(e,t,n,r,i,a,o,s,c,l,u,d,f,p=Ga(n,t.defaultModel.model,s),m=H(),h){let g=Date.now(),_={disposition:`preflight-refused`},v,y,b=`failure`,x,S=e=>{i.onExecutionEvent?.(`provider_request`,{executionId:s,conversationId:i.conversationId,round:o,provider:G(p,n),model:K(p,t.defaultModel.model),effort:e.options.effort,messages:e.messages,tools:e.options.tools})};try{let c=await Qa(e,t,n,r,{signal:i.signal,onTextDelta:u,...i.onThinkingDelta&&{onThinkingDelta:i.onThinkingDelta},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=>{Ka(p,e),_.model=e.to.model,i.onExecutionEvent?.(yr.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}),x!==void 0&&S(x)},...(()=>{let e=Na(i.toolChoice??t.defaultModel.toolChoice,o);return e===void 0?{}:{toolChoice:e}})()},e=>{x=e,S(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)=>{_.disposition=e,_.model=K(p,t),e===`invoked`&&(_.startedAtMs=Date.now())},()=>qa(i.traceContext,n.provider,n.currentInfo.provider,m),p,i.executionJournal?{journal:i.executionJournal,executionId:s,callId:m,checkpoint:h,route:()=>({providerId:G(p,n),modelId:K(p,t.defaultModel.model)})}:void 0);if(v=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}),b=`success`,c}catch(e){if(e instanceof F)throw y=e,a.discardPending(),e;if(it(e,i.signal))throw b=`interrupted`,a.commitAssistant(`interrupted`,{round:o,usageObservationId:c,executionId:s,providerId:G(p,n),modelId:K(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:G(p,n),modelId:K(p,n.aiProviderInfo.model),providerError:!0}),ba(a,i,s,i.conversationId,{round:o,usageObservationId:c,executionId:s,providerId:G(p,n),modelId:K(p,n.aiProviderInfo.model),providerError:!0}),null}finally{let e=_.disposition===`invoked`?eo(v):{provenance:`absent`};ma(()=>{i.onExecutionEvent?.(vr.COMPLETED,{executionId:s,conversationId:i.conversationId,round:o,startedAt:new Date(_.startedAtMs??g).toISOString(),endedAt:new Date(Math.max(Date.now(),_.startedAtMs??g)).toISOString(),outcome:b,callId:m,disposition:_.disposition,..._.disposition===`invoked`&&{providerId:G(p,n),..._.model!==void 0&&{modelId:_.model},...typeof v?.metadata?.providerRequestId==`string`&&{providerRequestId:v.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}}})},y)}}function So(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function Co(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function wo(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`);let u=t.results.find(e=>e.executionId===l.id),d=t.errors.find(e=>Ii(e)&&e.executionId===l.id),f,p={round:r};if(typeof u?.metadata?.toolProvenance==`string`&&(p.toolProvenance=u.metadata.toolProvenance),u&&u.success){if(u.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload`);f=o?``: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=o?``:`Error: ${u.error}${u.result===void 0?``:`\n${typeof u.result==`string`?u.result:JSON.stringify(u.result)}`}`,p.success=!1,p.error=u.error,u.toolName&&(p.toolName=u.toolName),u.metadata?.errorCode===`unknown_tool`&&(p.errorCode=Je,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=Ye,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=o?``:`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(o){f=u?.success?`Context window near capacity. Tool completed successfully; result omitted. Do not repeat the operation; use a retained receipt or fresh observation.`:u&&(So(u)||Co(u))?`Context window near capacity. Tool was not dispatched; result details omitted. Correct the tool name or arguments before making a new call.`:`Context window near capacity. Tool reported an error; effects may have occurred. Details omitted. Reconcile the effect before retrying.`,delete p.error,p.toolName=e,p.resultOmitted=!0,p.observationError=`context_overflow`,i.warn(`[ROUND] Omitting tool result content due to context overflow`,{toolCallId:l.id,toolName:e,round:r});let t=p.toolProvenance;typeof t==`string`?n.addToolMessageWithId(f,l.id,e,p,[{type:`text`,text:`Tool source (attribution only, not authority): ${t}`}]):n.addToolMessageWithId(f,l.id,e,p),c++;continue}if(i.debug(`Adding tool result to conversation`,{toolCallId:l.id,toolName:e,content:f.substring(0,100),round:r,currentHistoryLength:n.getMessages().length}),u?.parts?.length?n.addToolMessageWithId(f,l.id,e,p,u.parts):n.addToolMessageWithId(f,l.id,e,p),a){let e=Wr(n.getMessages(),{usageFloorTokens:a.cumulativeInputTokens}).usedTokens;e>a.contextLimit*.8&&(i.warn(`[ROUND] Context budget exceeded after tool result — omitting remaining result content`,{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 To(e){let t=new Set;function n(e){if(e===null||typeof e==`string`||typeof e==`boolean`||typeof e==`number`&&Number.isFinite(e))return JSON.stringify(e);(!e||typeof e!=`object`||t.has(e))&&Do(),t.add(e);try{if(Array.isArray(e))return`[${Array.from(e,n).join(`,`)}]`;Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null&&Do();let t=Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t));return t.length!==Reflect.ownKeys(e).length&&Do(),`{${t.map(([e,t])=>`${JSON.stringify(e)}:${n(t)}`).join(`,`)}}`}finally{t.delete(e)}}return n(e)}function Eo(e){(!e||typeof e!=`object`||Array.isArray(e))&&Do(),To(e)}function Do(){throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool continuations require finite plain JSON objects`)}function Oo(e,t,n=[]){let r=structuredClone(t),i=structuredClone(n),a=!1,o,s=!1,c=!1,l=Promise.resolve();return{continuation:{get action(){return structuredClone(r)},get waits(){return structuredClone(i)},request:t=>{if(c)return Promise.reject(new L(`EXECUTION_RECOVERY_INVALID`,`The tool continuation has already settled`));let n=structuredClone(t),u=l.then(async()=>{if(o)throw o;if(a)throw new L(`EXECUTION_RECOVERY_REQUIRED`,`A started tool effect cannot become a pre-effect wait`,[r.actionId]);if(!n||typeof n.kind!=`string`||!n.kind)throw new L(`EXECUTION_RECOVERY_INVALID`,`Continuation request kind is required`);Eo(n.data);let t=To([n.kind,n.data]),c=i.find(e=>To([e.request.kind,e.request.data])===t);if(!c){let t={...r,requestId:H(),kind:n.kind,data:n.data};await V(e,{...r,kind:`tool-wait`,recordId:`${t.requestId}:wait`,request:{requestId:t.requestId,kind:t.kind,data:t.data}}),c={request:t},i.push(c)}if(c.response)return structuredClone(c.response.response);throw s=!0,new I(i.filter(e=>!e.response).map(e=>e.request))});return l=u.catch(e=>{e instanceof I||(o=e)}),u}},settle:async()=>{if(c=!0,await l,o)throw o;if(s)throw new I(i.filter(e=>!e.response).map(e=>e.request))},admit:async e=>{if(c)throw new L(`EXECUTION_RECOVERY_INVALID`,`The tool continuation has already settled`);if(await l,o)throw o;let t=i.filter(e=>!e.response);if(t.length)throw new I(t.map(e=>e.request));if(a)throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool effect admission was repeated`);a=!0;try{await e()}catch(e){throw o=e,e}}}}async function ko(e,t){let n=[],r=[...e];for(let e of t.toolResponses??[]){let i=structuredClone(e);if(!i||typeof i.requestId!=`string`||!i.requestId||typeof i.responseId!=`string`||!i.responseId)throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool response identities are required`);Eo(i.response);let a=r.find(e=>e.kind===`tool-response`&&(e.response.requestId===i.requestId||e.response.responseId===i.responseId));if(a?.kind===`tool-response`){if(To(a.response)!==To(i))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`Tool response identity was already used`);continue}let o=r.find(e=>e.kind===`tool-wait`&&e.request.requestId===i.requestId);if(!o||o.kind!==`tool-wait`||o.parentCallId!==t.callId||r.some(e=>`actionId`in e&&e.actionId===o.actionId&&(e.kind===`tool-effect-start`||e.kind===`tool-result`)))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`Tool request is absent, stale or already settled`);let s={kind:`tool-response`,recordId:`${i.requestId}:response`,executionId:o.executionId,actionId:o.actionId,parentCallId:o.parentCallId,toolCallId:o.toolCallId,toolName:o.toolName,response:i};n.push(s),r.push(s)}for(let e of n)t.signal?.throwIfAborted(),await V(t.journal,e);return r}function Ao(e,t,n,r){e.getMessages().slice(t).forEach((e,i)=>{r?.(`tool_message_committed`,{...n,index:i,message:e}),r?.(`history_mutation`,{...n,mutation:`append_message`,index:t+i,message:e})})}function jo(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.D(e,o,r)}}async function Mo(e,t,r,i,a,o,s,c,l,u,d,f,p,m,h){let{toolExecutionService:g,logger:_,eventEmitter:v}=l,y=p??u?.maxSameToolInputs;if(y!==void 0)try{jo(e,c,y)}catch(s){if(!(s instanceof n.D)||h)throw s;let c=t.getMessages().length,l=`Tool batch was not dispatched because the repeated-input limit was reached.`,u=g.createExecutionRequestsWithContext(e,{ownerPathBase:[]});for(let[n,r]of e.entries()){let e=u[n].metadata?.toolProvenance;t.addToolMessageWithId(`Error: ${l}`,r.id,r.function.name,{round:a,success:!1,notDispatched:!0,errorCode:s.code,error:l,toolName:r.function.name,...typeof e==`string`?{toolProvenance:e}:{}},typeof e==`string`?[{type:`text`,text:`Tool source (attribution only, not authority): ${e}`}]:void 0)}try{Ao(t,c,{executionId:i,conversationId:r,round:a,batchId:o},f)}catch(e){_.warn(`Loop-guard history observer failed after the batch was settled`,{error:e instanceof Error?e.message:String(e)})}throw s}_.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:a,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let b=v.buildThinkingOwnerContext(r,i,o,s).ownerPath,x=e.length,S=`${o}`,C=g.createExecutionRequestsWithContext(e,{ownerPathBase:b,metadataFactory:e=>({conversationId:r,round:a,directParentId:o,batchId:S,expectedCount:x,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:v.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:v.getBaseEventService(),...m?{traceContext:m}:{}}}),w=u?.toolExecutionPolicy?.(structuredClone(e)),T={requests:C,mode:w?.mode??`parallel`,maxConcurrency:w?.maxConcurrency??5,continueOnError:w?.continueOnError??!0,scheduling:w?.scheduling??new Map,signal:d};if(T.lifecycle={beforeDispatch:async(e,t)=>{let n=C[e];if(h?.recovery?.actions.get(n.executionId??``)?.dispatched)return;let a={toolData:t,executionContext:{executionId:i,sessionId:r}};await W(l.plugins,`beforeToolCall`,a,_),await W(l.plugins,`beforeToolExecution`,a,_)},onResult:async(e,t,n)=>{await W(l.plugins,`afterToolCall`,{toolData:t,toolResult:n,executionContext:{executionId:i,sessionId:r}},_)}},h){let{journal:e,parentCallId:t}=h,n=C.map(e=>h.recovery?.actions.get(e.executionId??``)),r=C.map(e=>({actionId:h.recovery?.actions.get(e.executionId??``)?.actionId??H(),parentCallId:t,executionId:i,toolCallId:e.executionId??``,toolName:e.toolName})),a=r.map((t,r)=>Oo(e,t,n[r]?.waits));for(let t=0;t<C.length;t++){let i=C[t];i.argumentDecodeError!==void 0||n[t]?.intent||n[t]?.result||await V(e,{kind:`tool-intent`,recordId:`${r[t].actionId}:intent`,...r[t],parameters:i.parameters})}T.journal={continuation:e=>a[e].continuation,settle:e=>a[e].settle(),beforeDispatch:t=>n[t]?.dispatched?Promise.resolve():V(e,{kind:`tool-dispatch`,recordId:`${r[t].actionId}:dispatch`,...r[t]}),onResult:(t,n)=>V(e,{kind:`tool-result`,recordId:`${r[t].actionId}:result`,...r[t],result:n,loadedDeferredTools:g.getLoadedDeferredTools()}),beforeEffect:(t,n)=>a[t].admit(()=>V(e,{kind:`tool-effect-start`,recordId:`${r[t].actionId}:effect-start`,...r[t],parameters:n}))},T.recoveredResults=new Map(n.flatMap((e,t)=>e?.result?[[t,e.result]]:[]))}f?.(`tool_batch_started`,{executionId:i,conversationId:r,round:a,batchId:S,mode:T.mode,maxConcurrency:T.maxConcurrency,requestCount:C.length,tools:C.map(e=>e.toolName)}),C.forEach((e,t)=>{f?.(`tool_execution_request`,{executionId:i,conversationId:r,round:a,batchId:S,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.argumentDecodeError===void 0?e.parameters:{argumentDecodeError:e.argumentDecodeError},ownerPath:e.ownerPath})});let E=await g.executeTools(T),D=E.results.filter(So).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);E.results.forEach((e,t)=>{f?.(`tool_execution_result`,{executionId:i,conversationId:r,round:a,batchId:S,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})});let ee=E.results.filter(e=>!So(e)&&!Co(e));c.toolsExecuted.push(...ee.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName})),c.toolCallOutcomes.push(...ee.map(e=>({...e.executionId===void 0?{}:{id:e.executionId},name:e.toolName??``,success:e.success})));let te=h?.recovery?.checkpoint.contextLimit??ti(u?.defaultModel?.model??``),ne=t.getMessages().length,re=wo(e,E,t,a,_,{contextLimit:te,cumulativeInputTokens:c.cumulativeInputTokens});return Ao(t,ne,{executionId:i,conversationId:r,round:a,batchId:S},f),v.emitToolResultsEvents(e,E,c.toolsExecuted,r,i,a,o,s),v.clearToolEventServices(),{...re,unknownToolFailureCount:D.length,unknownToolNames:D}}async function No(e,t,n,r,i,a,o,s,c){let{plugins:l,logger:u,eventEmitter:d,cacheService:f}=c,p=e.currentRound;u.debug(`[ROUND-${p}] Starting execution round ${p}`,{executionId:i,conversationId:a.conversationId,round:p,maxRounds:t});let m=n.getMessages(),h=mo(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,Nn(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=Ya(r,e);if(await W(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(j.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 U(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),yo(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]`),Ce(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),Te(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},Rn=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||0,this.maxConversations=e.maxConversations||50,this.logger=O(`ConversationHistory`)}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new Ln(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 zn(){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 Bn(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 tt{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=zn(),r=await this.withRetry(async()=>(n=zn(),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),Bn(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=zn(),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);Bn(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 Hn=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function Un(e){return Hn.test(e)?e:void 0}var Wn=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Gn(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new n.w(`Invalid maxListeners option: ${e.maxListeners}. Must be a non-negative number.`,t,{maxListeners:e.maxListeners});if(e.buffer!==void 0&&e.buffer.maxSize!==void 0&&e.buffer.maxSize<0)throw new n.w(`Invalid buffer.maxSize option: ${e.buffer.maxSize}. Must be a non-negative number.`,t,{bufferMaxSize:e.buffer.maxSize});if(e.buffer!==void 0&&e.buffer.flushInterval!==void 0&&e.buffer.flushInterval<0)throw new n.w(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function Kn(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 qn(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 Jn(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Yn(e,t,n,r){let{listenerCounts:i,totalListeners:a}=Jn(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 Xn(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.w(`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 Zn(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 Qn(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 $n=class extends et{name=`EventEmitterPlugin`;version=`1.0.0`;pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=O(`EventEmitterPlugin`),this.metrics=e.metrics??new Wn,Gn(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[P.AGENT_EXECUTION_START,P.AGENT_EXECUTION_COMPLETE,P.AGENT_EXECUTION_ERROR,P.TOOL_BEFORE_EXECUTE,P.TOOL_AFTER_EXECUTE,P.TOOL_SUCCESS,P.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??We.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(P.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(P.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(P.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(P.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(P.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?P.TOOL_ERROR:P.TOOL_SUCCESS,i=Qn(e,n,t.duration);await this.emit(r,i),await this.emit(P.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(P.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 Xn(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 Zn(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 qn(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>Kn(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 Yn(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 er=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var tr=class{tools=new Map;register(e){if(!e.schema?.name)throw new n.j(`Tool must have a valid schema with name`);let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&k.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),k.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)){k.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),k.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 k.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(),k.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.j(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new n.j(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new n.j(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new n.j(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))nr(t,n);if(e.parameters.required){let t=e.parameters.properties||{};for(let r of e.parameters.required)if(!t[r])throw new n.j(`Required parameter "${r}" is not defined in properties`)}}};function nr(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new n.j(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>nr(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new n.j(`Parameter "${e}" must declare a type or anyOf`);if(!er.includes(t.type))throw new n.j(`Parameter "${e}" has invalid type "${t.type}"`);if(t.properties)for(let[n,r]of Object.entries(t.properties))nr(`${e}.${n}`,r);t.items&&nr(`${e}[]`,t.items)}function rr(e,t,r){let i=ln(r,t,`$`);if(i.length>0)throw new n.A(`output does not match the declared outputSchema: ${i.join(`; `)}`,e,void 0,{outputSchemaIssues:i})}function ir(e,t,n){let r=ar(e,t,n);return r?[r]:ln(n,t,`Parameter "${e}"`)}function ar(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 ${or(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${or(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${or(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${or(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${or(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 or(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function sr(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(...ir(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...ir(t,a,e))}return i}function cr(e,t,n,r){let i=sr(e,t,n,r);return{isValid:i.length===0,errors:i}}var lr=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)}},ur=class extends lr{emit(e,t,n){}};const dr=new ur;function fr(e){return e===dr||e instanceof ur}function pr(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 mr(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var hr=class extends lr{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??mr()},i=pr(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function gr(e,t){return new hr(e,t)}function _r(e,t){return gr(e,t)}var vr=class extends lr{emit(e,t,n){this.notifyListeners(e,t,n)}};const yr={COMPLETED:`span_completed`},br={COMPLETED:`provider_call_completed`},xr={SWITCHED:`provider_fallback`};function Sr(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 Cr={COMPLETED:`tool_body_completed`},wr={COMPLETED:`tool_queue_completed`},Tr={DECIDED:`tool_permission_decided`};var Er=class e{resultExecutor;schema;fn;eventService;constructor(e,t,n){this.resultExecutor=n,this.schema=e,this.fn=t,this.validateConstructorInputs()}static fromResult(t,r){return new e(t,async(e,i)=>{let a=await r(e,i);if(!a.success)throw new n.A(a.error??`Tool execution failed`,t.name);if(a.data===void 0)throw new n.A(`Tool execution succeeded but returned no data`,t.name);return a.data},r)}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.j(`Invalid parameters for tool "${r}": ${sr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let i=Date.now(),a,o;try{this.resultExecutor?(o=await this.resultExecutor(e,t),a=o.data):a=await this.fn(e,t)}catch(i){throw R(i)||i instanceof n.A||i instanceof n.j?i:new n.A(`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 s=Date.now()-i;this.schema.outputSchema&&(!o||o.success)&&rr(r,a,this.schema.outputSchema);let c=t?.instanceEventService??this.eventService;if(c){let e={timestamp:new Date,spanId:mr(),durationMs:s,op:r};c.emit(yr.COMPLETED,e)}return o||{success:!0,data:a,metadata:{executionTime:s,toolName:r,parameters:e}}}validate(e){return sr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return cr(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.j(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new n.j(`Tool function is required and must be a function`);if(!this.schema.name)throw new n.j(`Tool schema must have a name`)}};const Dr=`at least one tool must stay resident; all tools cannot be deferred`,Or=`a tool schema was withheld but no ${E} tool is offered; register the loader or turn tool search off`;function kr(e){return e.deferLoading===!0}function Ar(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!kr(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(Dr);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(Or);return r}function jr(e){if(e.length>0&&e.every(kr))throw Error(Dr)}var Mr=class extends de{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)}};async function Nr(e,t,n){let{beforeToolEffect:r,...i}=n;return r?e.executeWithAdmission?e.executeWithAdmission(t,i,r):(await r(t),i.signal?.throwIfAborted(),e.execute(t,i)):e.execute(t,n)}function Pr(e){if(!e.name)throw new n.b(`Agent name is required`,{component:`ConversationAgent`});if(!e.aiProviders||e.aiProviders.length===0)throw new n.b(`At least one AI provider is required`,{component:`ConversationAgent`});if(!e.defaultModel)throw new n.b(`Default model configuration is required`,{component:`ConversationAgent`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new n.b(`Default model must specify both provider and model`,{component:`ConversationAgent`});let t=e.aiProviders.map(e=>e.name),r=t.filter((e,n)=>t.indexOf(e)!==n);if(r.length>0)throw new n.b(`Duplicate AI provider names: ${r.join(`, `)}`,{component:`ConversationAgent`,duplicates:r});if(e.providerOwnership!==void 0){if(!e.providerOwnership||typeof e.providerOwnership!=`object`||Object.getPrototypeOf(e.providerOwnership)!==Object.prototype&&Object.getPrototypeOf(e.providerOwnership)!==null)throw new n.b(`Provider ownership must be a registration-name record`);for(let[r,i]of Object.entries(e.providerOwnership))if(!t.includes(r)||i!==`owned`&&i!==`borrowed`)throw new n.b(`Invalid provider ownership for registration '${r}'`)}if(!t.includes(e.defaultModel.provider))throw new n.b(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`ConversationAgent`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var Fr=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.b(`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().addResultTool(n.schema,async(e,t)=>{if(!t)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Nr(n,e,t)},n.provenance);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(A.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.b("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.b(`Both provider and model are required`,{component:`ConversationAgent`});let t=this.getAIProviders(),r=t.getProviderNames();if(!r.includes(e.provider))throw new n.b(`AI Provider '${e.provider}' not found. Available: ${r.join(`, `)}`,{component:`ConversationAgent`,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.b(`No provider is currently set`,{component:`ConversationAgent`});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.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Nr(e,t,n)},e.provenance),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},Ir=class extends fe{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new tr,this.resolveToolSearchMode=e.resolveToolSearchMode,this.isToolVisible=e.isToolVisible??(()=>!0)}async doInitialize(){k.debug(`Tools initialized`)}async doDispose(){this.registry.clear(),this.loadedDeferredTools.clear(),delete this.allowedTools,k.debug(`Tools disposed`)}addTool(e,t){this.ensureInitialized();let n=new Er(e,t);this.registry.register(n),k.debug(`Tool "${e.name}" registered successfully`)}addResultTool(e,t,n){this.ensureInitialized();let r=Er.fromResult(e,t);Object.defineProperty(r,"provenance",{value:le(n),enumerable:!0}),this.registry.register(r)}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)}getLoadedDeferredTools(){return[...this.loadedDeferredTools].sort()}listDeferredTools(){return this.resolveToolSearchMode()===`off`?[]:this.getTools().filter(e=>kr(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.A(`Tool "${e}" is not registered, so it cannot be loaded`,e);return t});for(let e of t)kr(e)&&this.loadedDeferredTools.add(e.name);return t}async executeTool(e,t,r){let i=await this.executeToolResult(e,t,r);if(!i.success)throw new n.A(i.error||`Tool execution failed`,e);if(i.data===void 0)throw new n.A(`Tool execution succeeded but returned no data`,e);return i.data}async executeToolResult(e,t,r){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new n.A(`Tool "${e}" is not in the allowed tools list`,e);let i=this.registry.get(e);if(!i)throw new n.A(`Tool "${e}" is not registered`,e);let a=le(i.provenance),o;try{o=await i.execute(t,r)}catch(t){throw R(t)?t:t instanceof Error?new n.A(t.message,e,t):new n.A(String(t),e)}return ue(o,a)}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],k.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 Lr(e){let t=Rr(e.metadata),n=Br(e.usage);return t??n}function Rr(e){if(!e)return;let t=Br({inputTokens:Vr(e,`inputTokens`),outputTokens:Vr(e,`outputTokens`),promptTokens:Vr(e,`promptTokens`),completionTokens:Vr(e,`completionTokens`),totalTokens:Vr(e,`totalTokens`),cacheReadTokens:Vr(e,`cacheReadTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return zr(n);if(Ur(n))return Br(n)}function zr(e){try{return Br(JSON.parse(e))}catch{return}}function Br(e){if(!e)return;let t=Hr(e.inputTokens,e.promptTokens),n=Hr(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=Hr(e.totalTokens),i=Hr(e.cacheReadTokens),a=i!==void 0&&i>=0&&i<=t;return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r},...a&&{cacheReadTokens:i}}}function Vr(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Hr(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function Ur(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}function Wr(e){return Math.ceil(JSON.stringify(e).length/4)}function Gr(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function Kr(e,t={}){let n=Wr(e),r=qr(e),i=r?.tokens,a=Jr(t.usageFloorTokens),o=r?.index===e.length-1,s=r?r.tokens+(o?0:Wr(e.slice(r.index+1))):0;return{usedTokens:o?Math.max(i??0,a??0):Math.max(n,s,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function qr(e){for(let t=e.length-1;t>=0;t--){let n=Lr(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function Jr(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const Yr=O(`agent-core:models`),Xr=new Set;function Zr(e,t,n){let r=`${e}:${t}`;Xr.has(r)||(Xr.add(r),Yr.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 Qr=2e5,$r=new Map;function ei(...e){for(let t of e){let e=$r.get(t.id);e&&!ti(e,t)&&Yr.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)`),$r.set(t.id,t)}}function ti(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function ni(e){return $r.get(e)}function ri(e){let t=ni(e)?.contextWindow;return t===void 0?(Zr(e,`context window`,Qr),Qr):t}const ii=16384;function ai(e){let t=ni(e)?.maxOutput;return t===void 0?(Zr(e,`max output`,ii),ii):t}function oi(e){return ni(e)?.name??e}function si(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 ci(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(kr);return i.length===0?`off`:i.length>15||Gr(i)/ri(t)>=.1?`on`:`off`}function li(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function ui(e){let t=new Ir({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:ci(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var di=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)}},fi=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.b(`Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.`,{pluginName:e.name});t.registerPlugin(e),this.logger.debug(`Plugin added`,{pluginName:e.name})}removePlugin(e){let t=this.getExecutionService();if(!t)return!1;let n=t.removePlugin(e);return n&&this.logger.debug(`Plugin removed`,{pluginName:e}),n}getPlugin(e){let t=this.getExecutionService();if(t)return t.getPlugin(e)}getPlugins(){let e=this.getExecutionService();return e?e.getPlugins():[]}getPluginNames(){let e=this.getExecutionService();return!this.isReady()||!e?[]:e.getPlugins().map(e=>e.name)}};function pi(e){return{moduleManager:new di(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new fi(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new Fr(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 mi={ASSIGNED:`assigned`,COMPLETED:`completed`},hi={MESSAGE:`message`,INPUT:`input`};function gi(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(A.CREATED,{parameters:{tools:n,systemMessage:e.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function _i(e,t,n,r,i){fr(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:Ge,ownerId:t,ownerPath:yi(t,n)})}function vi(){return new $n({enabled:!0,events:[P.MODULE_INITIALIZE_START,P.MODULE_INITIALIZE_COMPLETE,P.MODULE_INITIALIZE_ERROR,P.MODULE_EXECUTION_START,P.MODULE_EXECUTION_COMPLETE,P.MODULE_EXECUTION_ERROR,P.MODULE_DISPOSE_START,P.MODULE_DISPOSE_COMPLETE,P.MODULE_DISPOSE_ERROR]})}function yi(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function bi(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.onThinkingDelta&&{onThinkingDelta:t.onThinkingDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.executionJournal&&{executionJournal:t.executionJournal},...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 xi(e,t,n={},r){try{e.emitAgentEvent(A.EXECUTION_START,{}),e.logger.debug(`Starting ConversationAgent 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,bi(e,n));if(e.logger.debug(`ConversationAgent execution completed`,{success:o.success,duration:o.duration,tokensUsed:o.tokensUsed,toolsExecuted:o.toolsExecuted,interrupted:o.interrupted}),o.interrupted)return e.emitAgentEvent(A.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(A.EXECUTION_COMPLETE,{}),o.response}catch(t){throw t instanceof I?t:(e.logger.error(`ConversationAgent execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(A.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}}async function*Si(e,t,n={},r){let i=!1;try{e.emitAgentEvent(A.EXECUTION_START,{}),e.logger.debug(`Starting ConversationAgent 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,bi(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 t instanceof I?(i=!0,t):(e.logger.error(`ConversationAgent streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(A.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}finally{i||e.emitAgentEvent(A.EXECUTION_COMPLETE,{})}}function Ci(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function wi(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=Ci(i),s=t,c=[];for(let t=1;t<=a;t++){let n=Di(i,await xi(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=wi(i,c))}throw new n.k(`response failed schema validation after ${a} attempt(s)`,c,a)}async function*Ei(e,t,r,i){let a=(r.outputRetries??2)+1,o=Ci(i),s=t,c=[];for(let t=1;t<=a;t++){let n=Di(i,yield*Si(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=wi(i,c))}throw new n.k(`response failed schema validation after ${a} attempt(s)`,c,a)}function Di(e,t){let n=pn(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 Oi(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.parts===void 0?{}:{parts:structuredClone(e.parts)},...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 ki(e,t){return e.getConversationStore(t).getHistory()}function Ai(e,t,n){e.getConversationStore(t).addEntry(n)}function ji(e,t){e.getConversationStore(t).clear()}function Mi(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 Ni(e,t,n){e.getConversationStore(t).addMessage(n)}var Pi=class extends fe{providers=new Map;retirements=new Set;closing=new WeakMap;currentProvider;currentModel;constructor(){super({readyOnConstruction:!0})}async doInitialize(){k.debug(`AIProviders initialized`)}async doDispose(){let e=[...this.providers.entries()];this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0;for(let[t,n]of e)n.ownership===`owned`&&this.retire(t,n.provider);await Promise.all(this.retirements),k.debug(`AIProviders disposed`)}retire(e,t){if(this.closing.has(t))return;let n=Promise.resolve().then(()=>t.close?.()).catch(t=>{k.warn(`Failed to close AI provider ${e}`,{error:t instanceof Error?t.message:String(t)})}).finally(()=>{this.retirements.delete(n),this.closing.delete(t)});this.closing.set(t,n),this.retirements.add(n)}addProvider(e,t,r={}){this.ensureInitialized();let i=st.validateProviderName(e);if(!i.isValid)throw new n.j(`Invalid provider name: ${i.errors.join(`, `)}`);if(!t||typeof t!=`object`||Array.isArray(t))throw new n.j(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new n.j(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new n.j(`Provider must have a chat method`);let a=r.ownership===void 0?`owned`:r.ownership;if(a!==`owned`&&a!==`borrowed`)throw new n.j(`Provider ownership must be owned or borrowed`);this.providers.has(e)&&k.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.provider.name});let o=this.providers.get(e);this.providers.set(e,{provider:t,ownership:a}),o?.ownership===`owned`&&o.provider!==t&&this.retire(e,o.provider),k.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)){k.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);this.providers.delete(e),t?.ownership===`owned`&&this.retire(e,t.provider),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,k.debug(`Cleared current provider selection after removing "${e}"`)),k.debug(`AI provider "${e}" removed successfully`)}getProvider(e){return this.ensureInitialized(),this.providers.get(e)?.provider}getProviders(){return this.ensureInitialized(),Object.fromEntries([...this.providers].map(([e,t])=>[e,t.provider]))}setCurrentProvider(e,t){if(this.ensureInitialized(),!this.providers.get(e))throw new n.b(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,k.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)?.provider}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.provider);return n}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return!1;let n=this.providers.get(t)?.provider;return!!(n&&typeof n.chatStream==`function`)}getProviderCount(){return this.ensureInitialized(),this.providers.size}},Fi=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`)}},Ii=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new Fi;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.v(`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)}},Li=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 Ri(e){return`executionId`in e||`toolName`in e}function zi(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 Bi(e,t,n,r,i,a,o){e.emitExecution(j.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 Vi(e,t,n,r){e.emitExecution(j.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:zi(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 Hi(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(j.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:zi(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(zi(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 gr(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function Ui(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 gr(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})};e.emitWithContext(j.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(j.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:i.length,round:s},metadata:{toolsExecuted:r.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:s}},d,f)}var Wi=class{queuedAt=new Date().toISOString();pending;constructor(e,t){this.pending=new Set(e.filter((e,n)=>!t?.has(n)))}end(e,t){if(this.pending.delete(e))try{let n=new Date,r=n.toISOString();Promise.resolve(e.eventService?.emit(wr.COMPLETED,{executionId:e.executionId,queuedAt:this.queuedAt,timestamp:n,endedAt:r,disposition:t})).catch(()=>void 0)}catch{}}finish(){for(let e of this.pending)this.end(e,`not-dispatched`)}};function Gi(e){e.wake?.(),e.changed=new Promise(t=>{e.wake=t})}function Ki(e){let t=new Set;for(let r of e.requests){let{executionId:e}=Zi(r);if(t.has(e))throw new n.j(`Scheduling requires unique call IDs`);t.add(e)}let r=new Map;for(let[i,a]of e.scheduling){if(!t.has(i))throw new n.j(`Scheduling names an unknown call: ${i}`);let e=[...a.dependsOn??[]];for(let r of e)if(!t.has(r))throw new n.j(`Scheduling dependency is unknown: ${r}`);let o=a.resources?.map(e=>{if(typeof e.key!=`string`||!e.key.trim()||e.access!==`read`&&e.access!==`write`)throw new n.j(`Scheduling requires nonempty resource identities and read/write access`);return{key:e.key,access:e.access}});r.set(i,{dependsOn:e,...o===void 0?{}:{resources:o}})}let i=new Set;for(;i.size<t.size;){let e=i.size;for(let e of t)(r.get(e)?.dependsOn??[]).every(e=>i.has(e))&&i.add(e);if(i.size===e)throw new n.j(`Scheduling dependencies contain a cycle`)}return r}function qi(e,t){return e?.resources===void 0||t?.resources===void 0||e.resources.some(e=>t.resources.some(t=>e.key===t.key&&(e.access===`write`||t.access===`write`)))}function Ji(e,t){let n=e.metadata?.toolProvenance;return typeof n!=`string`||typeof t.metadata?.toolProvenance==`string`?t:{...t,metadata:{...t.metadata,toolProvenance:n}}}async function Yi(e,t,n){let r=e.requests[t];e.queue.end(r,`not-dispatched`),Zi(r);let i=Ji(r,{executionId:r.executionId,toolName:r.toolName,success:!1,result:null,error:n,metadata:{errorCode:Xe,dispatchStatus:`not-dispatched`}});return r.eventService?.emit(M.CALL_ERROR,{timestamp:new Date,toolName:r.toolName,error:n}),await e.journal?.onResult(t,i),i}async function Xi(e,t,n){let r=new Map(e.requests.map((e,t)=>[e.executionId,t]));for(;!n.fatalError&&n.pending.size>0;){let i=n.changed,a,o;for(let t of n.pending){let i=e.requests[t],s=e.scheduling.get(i.executionId),c=(s?.dependsOn??[]).map(e=>n.resultsByIndex[r.get(e)]);if(n.errorsByIndex.some(ia)&&!e.continueOnError){a=t,o=`Skipped after an earlier call failed; this call was not dispatched`;break}if(c.some(e=>e!==void 0&&!e.success)){a=t,o=`Skipped because a required predecessor failed; this call was not dispatched`;break}if(!c.some(e=>e===void 0)&&![...n.active].some(t=>qi(s,e.scheduling.get(e.requests[t].executionId)))){a=t;break}}if(a===void 0){await i;continue}n.pending.delete(a),n.active.add(a);try{if(o){let t=await Yi(e,a,o);n.resultsByIndex[a]=t,n.errorsByIndex[a]=na(t)}else await oa(e,t,n,a)}catch(e){if(!R(e))throw e;let t=mt(n.fatalError,e);R(t)&&(n.fatalError=t),e instanceof I||n.abort.abort(e)}finally{n.active.delete(a),Gi(n)}}}function Zi(e){if(!e.executionId)throw new n.j(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new n.j(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new n.j(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function Qi(e,t){let r=Zi(e),i=W(),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 $i(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null,metadata:{dispatchStatus:`not-dispatched`}}}function ea(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function ta(e){let t=e.argumentDecodeError;if(e.eventService&&t!==void 0){let n={timestamp:new Date,toolName:e.toolName,error:t};e.eventService.emit(M.CALL_ERROR,n)}return{toolName:e.toolName,result:null,success:!1,error:t,executionId:e.executionId,metadata:{errorCode:Ye,requestedTool:e.toolName,dispatchStatus:`not-dispatched`}}}function na(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function ra(e){return e!==void 0}function ia(e){return e!==void 0}function aa(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 oa(e,t,n,r){let i=e.requests[r];if(i)try{let a=await ua(e,t,i,r);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=na(a))}catch(e){if(R(e)){let t=mt(n.fatalError,e);R(t)&&(n.fatalError=t),e instanceof I||n.abort.abort(e);return}let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=ea(i,t)}}async function sa(e,t,n){for(;!n.fatalError&&n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await oa(e,t,n,r)}}async function ca(e,t){let n=e;if(n.scheduling)try{n={...n,scheduling:Ki(n)}}catch(e){let t=e instanceof Error?e.message:String(e),r=[];for(let[e]of n.requests.entries()){let i=n.recoveredResults?.get(e);r.push(i?structuredClone(i):await Yi(n,e,`Invalid scheduling policy: ${t}; this call was not dispatched`))}return{results:r,errors:r.filter(e=>!e.success).map(na)}}let r=new AbortController,i=n.journal||n.scheduling?{...n,signal:n.signal?AbortSignal.any([n.signal,r.signal]):r.signal}:n,a={resultsByIndex:Array(n.requests.length),errorsByIndex:Array(n.requests.length),nextRequestIndex:0,abort:r};if(n.scheduling){a.pending=new Set(n.requests.map((e,t)=>t)),a.active=new Set,Gi(a);for(let[e,t]of n.recoveredResults??[])a.pending.delete(e)&&(a.resultsByIndex[e]=structuredClone(t),t.success||(a.errorsByIndex[e]=na(t)))}let o=aa(n.requests.length,n.maxConcurrency),s=Array.from({length:o},()=>n.scheduling?Xi(i,t,a):sa(i,t,a));if(await Promise.all(s),a.fatalError)throw a.fatalError;let c=a.resultsByIndex.filter(ra),l=a.errorsByIndex.filter(ia);if(!n.scheduling&&l.length>0&&!n.continueOnError)throw l[0];return{results:c,errors:l}}async function la(e,t){let n=[],r=[],i=!1;for(let[a,o]of e.requests.entries()){if(i&&!e.recoveredResults?.has(a)){try{Zi(o)}catch(e){r.push(e instanceof Error?e:Error(String(e)));continue}let t=await Yi(e,a,`Skipped after an earlier call failed; this call was not dispatched`);n.push(t);continue}try{let s=await ua(e,t,o,a);n.push(s),s.success||r.push(na(s)),!s.success&&!e.continueOnError&&(i=!0)}catch(t){if(R(t))throw t;let n=t instanceof Error?t:Error(String(t));r.push(n),e.continueOnError||(i=!0)}}return{results:n,errors:r}}async function ua(e,t,n,r){let i=e.recoveredResults?.get(r);if(i)return structuredClone(i);e.queue.end(n,e.signal?.aborted||n.argumentDecodeError!==void 0?`not-dispatched`:`admission-started`);let a,o=e.journal;if(e.signal?.aborted)a=$i(n);else if(n.argumentDecodeError!==void 0)a=ta(n);else if(o&&await o.beforeDispatch(r),e.signal?.aborted)a=$i(n);else{let i={...Qi(n,e.signal),...o?.continuation?{continuation:o.continuation(r)}:{},...o?.beforeEffect?{beforeToolEffect:e=>o.beforeEffect(r,e)}:{}};e.lifecycle&&await e.lifecycle.beforeDispatch(r,i);try{a=await da(e,r,()=>t.executeTool(n.toolName,n.parameters,i))}catch(e){if(R(e))throw e;a=ea(n,e instanceof Error?e:Error(String(e)))}if(a.metadata?.dispatchStatus!==void 0){let{dispatchStatus:e,...t}=a.metadata;a={...a,metadata:t}}e.lifecycle&&await e.lifecycle.onResult(r,i,a)}return a=Ji(n,a),await e.journal?.onResult(r,a),a}async function da(e,t,n){let r;try{r={result:await n()}}catch(e){r={error:e}}try{await e.journal?.settle?.(t)}catch(e){r={error:`error`in r?mt(r.error,e):e}}if(`error`in r)throw r.error;return r.result}async function fa(e,t,n){n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`);let r=new Wi(e.requests,e.recoveredResults),i={...e,queue:r};try{return e.scheduling||e.mode===`parallel`?await ca(e.mode===`sequential`?{...i,maxConcurrency:1}:i,t):await la(i,t)}finally{r.finish()}}var pa=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=je){this.tools=e,this.logger=t,this.deferredToolCatalog={listDeferredTools:()=>this.tools.listDeferredTools(),loadDeferredTools:e=>this.tools.loadDeferredTools(e)}}getLoadedDeferredTools(){return this.tools.getLoadedDeferredTools?.()}restoreLoadedDeferredTools(e){for(let t of e)if(!this.tools.hasTool(t))throw new L(`EXECUTION_RECOVERY_INVALID`,`Recovery tool is no longer registered: ${t}`);let t=new Set(this.tools.getTools().map(e=>e.name));this.tools.loadDeferredTools(e.filter(e=>t.has(e)))}setAskHandler(e){this.askHandler=e}async executeTool(e,t,r,i=`offered`){this.logger.debug(`Executing tool: ${e}`);let a;try{if(!r?.executionId)throw new n.j(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);a=le(this.tools.getTool?.(e)?.provenance),r.signal?.throwIfAborted();let o=i===`offered`&&this.tools.getToolSchema(e)?.deferLoading===!0&&!this.tools.isToolOffered(e);if(!this.tools.hasTool(e)||o){let t=(i===`registered`?this.tools.getTools():this.tools.getOfferedTools()).map(e=>e.name).sort(),n=ha(e,t,o),a=r.eventService;if(a){let t={timestamp:new Date,toolName:e,error:n};a.emit(M.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:Je,requestedTool:e,availableTools:t}}}let s=r.eventService;if(s){let n={timestamp:new Date,toolName:e,parameters:t};s.emit(M.CALL_START,n)}let{toolName:c,parameters:l,...u}=r,d={...u,deferredTools:this.deferredToolCatalog,toolName:e,parameters:t,executionId:r.executionId},f=ue(this.tools.executeToolResult?await this.tools.executeToolResult(e,t,d):{success:!0,data:await this.tools.executeTool(e,t,d)},a);if(!f.success){let t=f.error||`Tool execution failed`;return s?.emit(M.CALL_ERROR,{timestamp:new Date,toolName:e,error:t}),{success:!1,error:t,result:f.data,parts:f.parts,metadata:f.metadata,toolName:e,executionId:d.executionId}}if(f.data===void 0)throw Error(`Tool execution succeeded but returned no data`);let p=f.data;if(this.logger.debug(`Tool execution completed: ${e}`),s){let t={timestamp:new Date,toolName:e,result:p};s.emit(M.CALL_COMPLETE,t),s.emit(M.CALL_RESPONSE_READY,t)}return{success:!0,result:p,...f.parts?{parts:f.parts}:{},...f.metadata?{metadata:f.metadata}:{},toolName:e,executionId:d.executionId}}catch(t){if(R(t))throw 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(M.CALL_ERROR,t)}let o=ue({success:!1,error:n.message},a);return{success:!1,error:n.message,...o.parts?{parts:o.parts}:{},...o.metadata?{metadata:o.metadata}:{},toolName:e,executionId:r?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=ma(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:ue({success:!0,metadata:t.metadataFactory?.(e)},le(this.tools.getTool?.(e.function.name)?.provenance)).metadata,...this.askHandler?{ask:this.askHandler}:{},deferredTools:this.deferredToolCatalog,...n.ok?{}:{argumentDecodeError:n.error}}})}async executeTools(e){return fa(e,this,this.logger)}};function ma(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 ha(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 ga(e,t){try{e()}catch(e){if(t===void 0)throw e}}function _a(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function va(e,t,n,r){if(!n||n.length===0)throw Error(`[EXECUTION] Missing rootId for execution owner context`);if(!r||r.length===0)throw Error(`[EXECUTION] Missing executionId for execution owner context`);let i=[...e.length?e:t];return n&&!i.some(e=>e.type===`agent`&&e.id===n)&&i.push({type:`agent`,id:n}),i.push({type:`execution`,id:r}),{ownerType:Ke,ownerId:r,ownerPath:i}}function ya(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...va(e,t,n,r).ownerPath];return a&&(o.push({type:`thinking`,id:a}),o.push({type:`tool_result`,id:`tool_result_${a}`})),o.push({type:`thinking`,id:i}),{ownerType:Ke,ownerId:r,ownerPath:o}}function ba(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:qe,ownerId:i,ownerPath:[...va(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function xa(e,t,n,r,i,a){let o=ya(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:Ke,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function Sa(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 Ca=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=_a(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(fr(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=gr(this.baseEventService,{ownerType:qe,ownerId:e,ownerPath:t.map(e=>({...e}))});return this.toolEventServices.set(e,n),n}clearToolEventServices(){this.toolEventServices.clear()}getBaseEventService(){return this.baseEventService}buildExecutionOwnerContext(e,t){return va(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return ya(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return ba(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return xa(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 gr(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(fr(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){Bi(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){Vi(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){Hi(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){Ui(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function wa(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function Ta(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 Ea(e){return e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0}function Da(e,t,n,r,i,a){let o=e.getMessages(),s=Ta(o,i.turnMessageId),c=s.filter(Ea).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:wa(a,f)}:{}}}function Oa(e,t,n,r,i,a,o=`round`){return structuredClone({version:1,effectAdmission:`required`,messages:e,round:t.currentRound,contextLimit:ri(r.defaultModel.model),cumulativeInputTokens:t.cumulativeInputTokens,sameToolInputCounts:[...t.sameToolInputCounts],maxSameToolInputs:n.maxSameToolInputs??r.maxSameToolInputs,continuation:{version:1,kind:o,startedAt:n.startTime.toISOString(),turnMessageId:e.find(e=>e.role===`user`&&e.metadata?.executionId===n.executionId)?.id??``,model:r.defaultModel,timeout:r.timeout,toolSearch:r.toolSearch,structuredOutput:r.responseFormat!==void 0&&r.responseFormat.type!==`text`,options:{maxExecutionRounds:i,maxSameToolInputs:n.maxSameToolInputs??r.maxSameToolInputs,allowToolOnlyCompletion:n.allowToolOnlyCompletion??!1,maxTokens:n.maxTokens,temperature:n.temperature,toolChoice:n.toolChoice??r.defaultModel.toolChoice,withholdHostedTools:n.withholdHostedTools??!1,ephemeralSystemContext:n.ephemeralSystemContext,sessionId:n.sessionId,userId:n.userId,metadata:n.metadata},toolsExecuted:t.toolsExecuted,consecutiveUnknownToolFailureRounds:t.consecutiveUnknownToolFailureRounds,forcedSummaryInstruction:t.forcedSummaryInstruction,loadedDeferredTools:a}})}function ka(e,t,n){e.tools!==void 0&&(x(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function Aa(e,t,n,r,i=!1){let a=ja(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw at();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(at())};o?.addEventListener(`abort`,h,{once:!0});let g=n.onTextDelta,_=n.onThinkingDelta,v={...n,signal:s.signal,...g===void 0?{}:{onTextDelta:e=>{m(),g(e)}},onThinkingDelta:e=>{m(),_?.(e)}};m();try{let n=new Promise((e,t)=>{d=t});return u=(async()=>e(t,v))(),await Promise.race([u,n])}finally{l=!0,f(),o?.removeEventListener(`abort`,h),i&&u&&await u.then(()=>{},e=>{if(e instanceof F)throw e})}}function ja(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function Ma(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 Na={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(Ma(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(Ma(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(Ma(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(Ma(t),t.executionResult)},onMessageAdded:async(e,t)=>{e.onMessageAdded&&t.message&&await e.onMessageAdded(t.message)},beforeToolCall:async(e,t)=>{e.beforeToolCall&&t.toolData&&await e.beforeToolCall(t.toolData.toolName,t.toolData.parameters,t.toolData)},beforeToolExecution:async(e,t)=>{e.beforeToolExecution&&t.toolData&&await e.beforeToolExecution(Ma(t),t.toolData)},afterToolCall:async(e,t)=>{e.afterToolCall&&t.toolData&&t.toolResult&&await e.afterToolCall(t.toolData.toolName,t.toolData.parameters,t.toolResult)},beforeConversation:async(e,t)=>{e.beforeConversation&&await e.beforeConversation(Ma(t))},onStreamingChunk:async(e,t)=>{e.onStreamingChunk&&t.message&&await e.onStreamingChunk(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:`${Ke}.${j.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 G(e,t,n,r){let i=Na[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 Pa(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 Fa(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function Ia(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 La(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 za(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 Ba(e,t,n,r,i,a,o,s){let c=Date.now()-n.getTime();await G(a,`onError`,{error:e instanceof Error?e:Error(String(e)),executionContext:Wa(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(j.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function Va(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Ha(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function Ua(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?.onThinkingDelta&&{onThinkingDelta:a.onThinkingDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.executionJournal&&{executionJournal:a.executionJournal},...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 Wa(e){let t={conversationId:Ha(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 Ga(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
6
+ `)}function Ka(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=hn({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:Ga(i.schema),id:W(),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 qa(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 K(e,t){return e.current?.provider??t.currentInfo.provider}function q(e,t){return e.current?.model??t}function Ja(e,t){e.current={provider:t.to.provider,model:t.to.model}}function Ya(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 Xa(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function Za(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 Qa(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function $a(e,t,n,r){let i=Pa(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 eo(e,t,n,r,i,a,o,s,c,l={},u){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 d=t.defaultModel.model;Qa(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let f=$a(d,t,n,i);Ia(f.toolChoice,f.tools),ka(f,d,n);let{messages:p,outcome:m}=Ka(f,e,d,n);a?.({messages:p,options:f,...m!==void 0&&{structuredOutput:m}});let h=n.provider.chat.bind(n.provider),g=(e,t)=>Vt((e,t)=>(s?.(`invoked`,t.model??d),h(e,Xa(t,c?.()))),e,t,u),_=f.effort??`auto`;if(r){let e=r.lookup(p,q(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:_});if(e){s?.(`cache-hit`,f.model??d);let t={role:`assistant`,content:e,timestamp:new Date,id:W(),state:`complete`};return u&&await V(u.journal,{kind:`model-cache-hit`,checkpoint:u.checkpoint,recordId:`${u.callId}:cache`,executionId:u.executionId,callId:u.callId,...u.route(),response:t}),t}let n=await Aa(g,p,f,t.timeout,o||!!u);return typeof n.content==`string`&&r.store(p,q(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,n.content,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:_}),n}return Aa(g,p,f,t.timeout,o||!!u)}function to(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 no(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 ro(e){let t=0,n=0,r,i=!1;for(let a of e){if(a.role!==`assistant`)continue;let e=oo(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 io(e){let t=ro(e.filter(e=>ve(e)&&e.data!==void 0).map(ye));if(t)return{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}function ao(){return W()}function oo(e){let t=Lr(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 so(e){let t=no(e).provenance,n=oo(e);return n?{...n,totalTokens:n.inputTokens+n.outputTokens,usageProvenance:t===`complete`?`complete`:`partial`}:{usageProvenance:t}}const co=/^peer:[A-Za-z0-9._:-]{1,128}$/,lo=/<(\/?)(peer_message)/gi;function uo(e){return e.replace(lo,`&lt;$1$2`)}function fo(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function po(e){return co.test(e)?e:`peer:unverified`}function mo(e){return e.map(e=>{if(e.type!==`text`)return e;let t=uo(e.text);return t===e.text?e:{...e,text:t}})}function ho(e){if(e.role===`tool`){let t=uo(e.content),n=e.parts?mo(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=fo(e),n=uo(e.content),r=e.parts?mo(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="${po(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function go(e){return e.map(ho)}async function _o(e,t,n,r,i,a,o,s,c=10,l){s.warn(`No final text response — forcing summary call`,{maxRounds:c===0?`unlimited`:c,currentRound:i.currentRound,conversationId:a});let u={},d=!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.`,f=[...go(e.getMessages()),{id:W(),role:`user`,content:s,state:`complete`,timestamp:new Date}],p=n.systemMessage??``,m=f.some(e=>e.role===`system`&&e.content===p),h=p&&!m?[{id:W(),role:`system`,content:p,state:`complete`,timestamp:new Date},...f]:f;u=qa(t,t.aiProviderInfo.model,r);let g={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},...o.onThinkingDelta&&{onThinkingDelta:o.onThinkingDelta},executionId:r,onModelFallback:e=>{Ja(u,e),o.onExecutionEvent?.(xr.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}),_()}},_=()=>{o.onExecutionEvent?.(`provider_request`,{executionId:r,conversationId:a,round:i.currentRound,provider:K(u,t),model:q(u,t.aiProviderInfo.model),messages:h,forcedSummary:!0})};_();let v=Date.now(),y=W(),b={invoked:!1},x=`failure`,S,C;try{S=await Aa((a,s)=>Vt((e,n)=>{b.invoked=!0,b.startedAtMs=Date.now();let r=Ya(o.traceContext,t.provider,t.currentInfo.provider,y);return t.provider.chat(e,Xa(n,r))},a,s,o.executionJournal?{journal:o.executionJournal,executionId:r,callId:y,checkpoint:Oa(e.getMessages(),i,o,n,c,l,`summary`),route:()=>({providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model)})}:void 0),h,g,n.timeout,o.awaitProviderSettlement||!!o.executionJournal),x=`success`}catch(e){throw e instanceof F?C=e:it(e,o.signal)&&(x=`interrupted`),e}finally{let e=b.invoked?no(S):{provenance:`absent`};ga(()=>{o.onExecutionEvent?.(br.COMPLETED,{executionId:r,conversationId:a,round:i.currentRound,startedAt:new Date(b.startedAtMs??v).toISOString(),endedAt:new Date(Math.max(Date.now(),b.startedAtMs??v)).toISOString(),outcome:x,callId:y,disposition:b.invoked?`invoked`:`preflight-refused`,...b.invoked&&{providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model),...typeof S?.metadata?.providerRequestId==`string`&&{providerRequestId:S.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}}})},C)}if(!S)throw Error(`Forced summary provider returned no response.`);let w=(typeof S.content==`string`?S.content:``)||`Maximum rounds reached. Partial results available in conversation history.`,T={...S.metadata??{},round:i.currentRound,executionId:r,providerCallId:y,providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model),...so(S)};e.addAssistantMessage(w,[],T),d=!0,o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:w}),Sa(e,o,r,a,{round:i.currentRound})}catch(n){if(n instanceof F)throw n;if(d){s.warn(`Forced summary announcement failed`,{error:n instanceof Error?n.message:String(n)});return}if(it(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 l={round:i.currentRound,executionId:r,providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model),providerError:!0};e.addAssistantMessage(`Request failed: ${c}`,[],{...l,forcedSummary:!0}),Sa(e,o,r,a,l)}}function vo(e,t,n){if(e.contextOverflowed&&n.warn(`[ROUND] Tool results partially skipped due to context overflow — continuing to let AI respond`,{added:e.addedCount,skipped:e.skippedCount,round:t.currentRound}),e.unknownToolFailureCount>0?t.consecutiveUnknownToolFailureRounds+=1:t.consecutiveUnknownToolFailureRounds=0,t.consecutiveUnknownToolFailureRounds>=2){let r=[...new Set(e.unknownToolNames)].sort();return t.forcedSummaryInstruction=[`The model repeatedly requested unavailable tool(s): ${r.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(` `),n.warn(`[ROUND] Stopping repeated unavailable tool-call loop`,{unavailableTools:r,consecutiveRounds:t.consecutiveUnknownToolFailureRounds,round:t.currentRound}),!0}return!1}const yo=.95;function bo(e,t,n){let r=Kr(e,{usageFloorTokens:n}),i=ri(t),a=i*yo,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:yo*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function xo(e,t,n,r,i,a){let o=n.currentRound,s=bo(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}),Sa(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function So(e,t,n,r,i=[],a){let o=0,s=0,c=Promise.resolve();return{wrappedOnTextDelta:s=>{if(e.onExecutionEvent?.(`provider_stream_raw_delta`,{executionId:n,conversationId:e.conversationId,round:r,sequence:o,delta:s}),o++,t.appendStreaming(s),e.onTextDelta?.(s),i.length>0&&a!==void 0){let e=Nn(s);c=c.then(()=>G(i,`onStreamingChunk`,{message:e},a))}},wrappedOnProviderNativeRawPayload:t=>{let i=t.sequence??s;s=Math.max(s,i+1),e.onExecutionEvent?.(`provider_native_raw_payload`,{executionId:n,conversationId:e.conversationId,round:r,...t,sequence:i})},settleStreamingChunkHooks:()=>c}}async function Co(e,t,n,r,i,a,o,s,c,l,u,d,f,p=qa(n,t.defaultModel.model,s),m=W(),h){let g=Date.now(),_={disposition:`preflight-refused`},v,y,b=`failure`,x,S=e=>{i.onExecutionEvent?.(`provider_request`,{executionId:s,conversationId:i.conversationId,round:o,provider:K(p,n),model:q(p,t.defaultModel.model),effort:e.options.effort,messages:e.messages,tools:e.options.tools})};try{let c=await eo(e,t,n,r,{signal:i.signal,onTextDelta:u,...i.onThinkingDelta&&{onThinkingDelta:i.onThinkingDelta},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=>{Ja(p,e),_.model=e.to.model,i.onExecutionEvent?.(xr.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}),x!==void 0&&S(x)},...(()=>{let e=Fa(i.toolChoice??t.defaultModel.toolChoice,o);return e===void 0?{}:{toolChoice:e}})()},e=>{x=e,S(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)=>{_.disposition=e,_.model=q(p,t),e===`invoked`&&(_.startedAtMs=Date.now())},()=>Ya(i.traceContext,n.provider,n.currentInfo.provider,m),p,i.executionJournal?{journal:i.executionJournal,executionId:s,callId:m,checkpoint:h,route:()=>({providerId:K(p,n),modelId:q(p,t.defaultModel.model)})}:void 0);if(v=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}),b=`success`,c}catch(e){if(e instanceof F)throw y=e,a.discardPending(),e;if(it(e,i.signal))throw b=`interrupted`,a.commitAssistant(`interrupted`,{round:o,usageObservationId:c,executionId:s,providerId:K(p,n),modelId:q(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:K(p,n),modelId:q(p,n.aiProviderInfo.model),providerError:!0}),Sa(a,i,s,i.conversationId,{round:o,usageObservationId:c,executionId:s,providerId:K(p,n),modelId:q(p,n.aiProviderInfo.model),providerError:!0}),null}finally{let e=_.disposition===`invoked`?no(v):{provenance:`absent`};ga(()=>{i.onExecutionEvent?.(br.COMPLETED,{executionId:s,conversationId:i.conversationId,round:o,startedAt:new Date(_.startedAtMs??g).toISOString(),endedAt:new Date(Math.max(Date.now(),_.startedAtMs??g)).toISOString(),outcome:b,callId:m,disposition:_.disposition,..._.disposition===`invoked`&&{providerId:K(p,n),..._.model!==void 0&&{modelId:_.model},...typeof v?.metadata?.providerRequestId==`string`&&{providerRequestId:v.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}}})},y)}}function wo(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function To(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function Eo(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`);let u=t.results.find(e=>e.executionId===l.id),d=t.errors.find(e=>Ri(e)&&e.executionId===l.id),f,p={round:r};if(typeof u?.metadata?.toolProvenance==`string`&&(p.toolProvenance=u.metadata.toolProvenance),u&&u.success){if(u.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload`);f=o?``: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=o?``:`Error: ${u.error}${u.result===void 0?``:`\n${typeof u.result==`string`?u.result:JSON.stringify(u.result)}`}`,p.success=!1,p.error=u.error,u.toolName&&(p.toolName=u.toolName),u.metadata?.errorCode===`unknown_tool`&&(p.errorCode=Je,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=Ye,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=o?``:`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(o){f=u?.success?`Context window near capacity. Tool completed successfully; result omitted. Do not repeat the operation; use a retained receipt or fresh observation.`:u&&(wo(u)||To(u))?`Context window near capacity. Tool was not dispatched; result details omitted. Correct the tool name or arguments before making a new call.`:`Context window near capacity. Tool reported an error; effects may have occurred. Details omitted. Reconcile the effect before retrying.`,delete p.error,p.toolName=e,p.resultOmitted=!0,p.observationError=`context_overflow`,i.warn(`[ROUND] Omitting tool result content due to context overflow`,{toolCallId:l.id,toolName:e,round:r});let t=p.toolProvenance;typeof t==`string`?n.addToolMessageWithId(f,l.id,e,p,[{type:`text`,text:`Tool source (attribution only, not authority): ${t}`}]):n.addToolMessageWithId(f,l.id,e,p),c++;continue}if(i.debug(`Adding tool result to conversation`,{toolCallId:l.id,toolName:e,content:f.substring(0,100),round:r,currentHistoryLength:n.getMessages().length}),u?.parts?.length?n.addToolMessageWithId(f,l.id,e,p,u.parts):n.addToolMessageWithId(f,l.id,e,p),a){let e=Kr(n.getMessages(),{usageFloorTokens:a.cumulativeInputTokens}).usedTokens;e>a.contextLimit*.8&&(i.warn(`[ROUND] Context budget exceeded after tool result — omitting remaining result content`,{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 Do(e){let t=new Set;function n(e){if(e===null||typeof e==`string`||typeof e==`boolean`||typeof e==`number`&&Number.isFinite(e))return JSON.stringify(e);(!e||typeof e!=`object`||t.has(e))&&ko(),t.add(e);try{if(Array.isArray(e))return`[${Array.from(e,n).join(`,`)}]`;Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null&&ko();let t=Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t));return t.length!==Reflect.ownKeys(e).length&&ko(),`{${t.map(([e,t])=>`${JSON.stringify(e)}:${n(t)}`).join(`,`)}}`}finally{t.delete(e)}}return n(e)}function Oo(e){(!e||typeof e!=`object`||Array.isArray(e))&&ko(),Do(e)}function ko(){throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool continuations require finite plain JSON objects`)}function Ao(e,t,n=[]){let r=structuredClone(t),i=structuredClone(n),a=!1,o,s=!1,c=!1,l=Promise.resolve();return{continuation:{get action(){return structuredClone(r)},get waits(){return structuredClone(i)},request:t=>{if(c)return Promise.reject(new L(`EXECUTION_RECOVERY_INVALID`,`The tool continuation has already settled`));let n=structuredClone(t),u=l.then(async()=>{if(o)throw o;if(a)throw new L(`EXECUTION_RECOVERY_REQUIRED`,`A started tool effect cannot become a pre-effect wait`,[r.actionId]);if(!n||typeof n.kind!=`string`||!n.kind)throw new L(`EXECUTION_RECOVERY_INVALID`,`Continuation request kind is required`);Oo(n.data);let t=Do([n.kind,n.data]),c=i.find(e=>Do([e.request.kind,e.request.data])===t);if(!c){let t={...r,requestId:W(),kind:n.kind,data:n.data};await V(e,{...r,kind:`tool-wait`,recordId:`${t.requestId}:wait`,request:{requestId:t.requestId,kind:t.kind,data:t.data}}),c={request:t},i.push(c)}if(c.response)return structuredClone(c.response.response);throw s=!0,new I(i.filter(e=>!e.response).map(e=>e.request))});return l=u.catch(e=>{e instanceof I||(o=e)}),u}},settle:async()=>{if(c=!0,await l,o)throw o;if(s)throw new I(i.filter(e=>!e.response).map(e=>e.request))},admit:async e=>{if(c)throw new L(`EXECUTION_RECOVERY_INVALID`,`The tool continuation has already settled`);if(await l,o)throw o;let t=i.filter(e=>!e.response);if(t.length)throw new I(t.map(e=>e.request));if(a)throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool effect admission was repeated`);a=!0;try{await e()}catch(e){throw o=e,e}}}}async function jo(e,t){let n=[],r=[...e];for(let e of t.toolResponses??[]){let i=structuredClone(e);if(!i||typeof i.requestId!=`string`||!i.requestId||typeof i.responseId!=`string`||!i.responseId)throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool response identities are required`);Oo(i.response);let a=r.find(e=>e.kind===`tool-response`&&(e.response.requestId===i.requestId||e.response.responseId===i.responseId));if(a?.kind===`tool-response`){if(Do(a.response)!==Do(i))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`Tool response identity was already used`);continue}let o=r.find(e=>e.kind===`tool-wait`&&e.request.requestId===i.requestId);if(!o||o.kind!==`tool-wait`||o.parentCallId!==t.callId||r.some(e=>`actionId`in e&&e.actionId===o.actionId&&(e.kind===`tool-effect-start`||e.kind===`tool-result`)))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`Tool request is absent, stale or already settled`);let s={kind:`tool-response`,recordId:`${i.requestId}:response`,executionId:o.executionId,actionId:o.actionId,parentCallId:o.parentCallId,toolCallId:o.toolCallId,toolName:o.toolName,response:i};n.push(s),r.push(s)}for(let e of n)t.signal?.throwIfAborted(),await V(t.journal,e);return r}function Mo(e,t,n,r){e.getMessages().slice(t).forEach((e,i)=>{r?.(`tool_message_committed`,{...n,index:i,message:e}),r?.(`history_mutation`,{...n,mutation:`append_message`,index:t+i,message:e})})}function No(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.D(e,o,r)}}async function Po(e,t,r,i,a,o,s,c,l,u,d,f,p,m,h){let{toolExecutionService:g,logger:_,eventEmitter:v}=l,y=p??u?.maxSameToolInputs;if(y!==void 0)try{No(e,c,y)}catch(s){if(!(s instanceof n.D)||h)throw s;let c=t.getMessages().length,l=`Tool batch was not dispatched because the repeated-input limit was reached.`,u=g.createExecutionRequestsWithContext(e,{ownerPathBase:[]});for(let[n,r]of e.entries()){let e=u[n].metadata?.toolProvenance;t.addToolMessageWithId(`Error: ${l}`,r.id,r.function.name,{round:a,success:!1,notDispatched:!0,errorCode:s.code,error:l,toolName:r.function.name,...typeof e==`string`?{toolProvenance:e}:{}},typeof e==`string`?[{type:`text`,text:`Tool source (attribution only, not authority): ${e}`}]:void 0)}try{Mo(t,c,{executionId:i,conversationId:r,round:a,batchId:o},f)}catch(e){_.warn(`Loop-guard history observer failed after the batch was settled`,{error:e instanceof Error?e.message:String(e)})}throw s}_.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:a,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let b=v.buildThinkingOwnerContext(r,i,o,s).ownerPath,x=e.length,S=`${o}`,C=g.createExecutionRequestsWithContext(e,{ownerPathBase:b,metadataFactory:e=>({conversationId:r,round:a,directParentId:o,batchId:S,expectedCount:x,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:v.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:v.getBaseEventService(),...m?{traceContext:m}:{}}}),w=u?.toolExecutionPolicy?.(structuredClone(e)),T={requests:C,mode:w?.mode??`parallel`,maxConcurrency:w?.maxConcurrency??5,continueOnError:w?.continueOnError??!0,scheduling:w?.scheduling??new Map,signal:d};if(T.lifecycle={beforeDispatch:async(e,t)=>{let n=C[e];if(h?.recovery?.actions.get(n.executionId??``)?.dispatched)return;let a={toolData:t,executionContext:{executionId:i,sessionId:r}};await G(l.plugins,`beforeToolCall`,a,_),await G(l.plugins,`beforeToolExecution`,a,_)},onResult:async(e,t,n)=>{await G(l.plugins,`afterToolCall`,{toolData:t,toolResult:n,executionContext:{executionId:i,sessionId:r}},_)}},h){let{journal:e,parentCallId:t}=h,n=C.map(e=>h.recovery?.actions.get(e.executionId??``)),r=C.map(e=>({actionId:h.recovery?.actions.get(e.executionId??``)?.actionId??W(),parentCallId:t,executionId:i,toolCallId:e.executionId??``,toolName:e.toolName})),a=r.map((t,r)=>Ao(e,t,n[r]?.waits));for(let t=0;t<C.length;t++){let i=C[t];i.argumentDecodeError!==void 0||n[t]?.intent||n[t]?.result||await V(e,{kind:`tool-intent`,recordId:`${r[t].actionId}:intent`,...r[t],parameters:i.parameters})}T.journal={continuation:e=>a[e].continuation,settle:e=>a[e].settle(),beforeDispatch:t=>n[t]?.dispatched?Promise.resolve():V(e,{kind:`tool-dispatch`,recordId:`${r[t].actionId}:dispatch`,...r[t]}),onResult:(t,n)=>V(e,{kind:`tool-result`,recordId:`${r[t].actionId}:result`,...r[t],result:n,loadedDeferredTools:g.getLoadedDeferredTools()}),beforeEffect:(t,n)=>a[t].admit(()=>V(e,{kind:`tool-effect-start`,recordId:`${r[t].actionId}:effect-start`,...r[t],parameters:n}))},T.recoveredResults=new Map(n.flatMap((e,t)=>e?.result?[[t,e.result]]:[]))}f?.(`tool_batch_started`,{executionId:i,conversationId:r,round:a,batchId:S,mode:T.mode,maxConcurrency:T.maxConcurrency,requestCount:C.length,tools:C.map(e=>e.toolName)}),C.forEach((e,t)=>{f?.(`tool_execution_request`,{executionId:i,conversationId:r,round:a,batchId:S,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.argumentDecodeError===void 0?e.parameters:{argumentDecodeError:e.argumentDecodeError},ownerPath:e.ownerPath})});let E=await g.executeTools(T),D=E.results.filter(wo).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);E.results.forEach((e,t)=>{f?.(`tool_execution_result`,{executionId:i,conversationId:r,round:a,batchId:S,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})});let ee=E.results.filter(e=>!wo(e)&&!To(e));c.toolsExecuted.push(...ee.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName})),c.toolCallOutcomes.push(...ee.map(e=>({...e.executionId===void 0?{}:{id:e.executionId},name:e.toolName??``,success:e.success})));let te=h?.recovery?.checkpoint.contextLimit??ri(u?.defaultModel?.model??``),ne=t.getMessages().length,re=Eo(e,E,t,a,_,{contextLimit:te,cumulativeInputTokens:c.cumulativeInputTokens});return Mo(t,ne,{executionId:i,conversationId:r,round:a,batchId:S},f),v.emitToolResultsEvents(e,E,c.toolsExecuted,r,i,a,o,s),v.clearToolEventServices(),{...re,unknownToolFailureCount:D.length,unknownToolNames:D}}async function Fo(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=go(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,Pn(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=Za(r,e);if(await G(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(j.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 gr(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),xo(m,o,e,n,u,{fullContext:a,executionId:i,conversationId:r}))return!0;p>1&&a.onTextDelta?.(`
7
7
 
8
- `),n.beginAssistant();let b=ro(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S,settleStreamingChunkHooks:C}=bo(a,n,i,p,l,u),w=Ga(s,o.defaultModel.model,i),T=H(),E;try{E=await xo(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),w,T,a.executionJournal?Ea(m,e,a,o,t,c.toolExecutionService.getLoadedDeferredTools()):void 0)}finally{await C()}if(E===null)return!0;let{assistantResponse:D,assistantToolCalls:ee}=$a(E,i,a.conversationId,p,u);if(ee.length>0&&(a.toolChoice??o.defaultModel?.toolChoice)===`none`)throw Error(`Provider returned tool calls despite toolChoice none; no tools were executed.`);await W(l,`afterProviderCall`,{messages:m,responseMessage:E},u),await W(l,`onMessageAdded`,{message:E},u);let te=typeof D.content==`string`&&D.content.trim().length>0;if(ee.length===0&&!te)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let ne=ao(D),re=ne.inputTokens??0;re>0&&(e.cumulativeInputTokens=re);for(let e of ee)n.appendToolCall(e);let ie=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(ie,{round:p,usageObservationId:b,executionId:i,providerId:G(w,s),providerCallId:T,modelId:K(w,s.aiProviderInfo.model),...ne});let ae=n.getMessages().at(-1);return a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:D}),ae&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:ae}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=D,ee.length===0?(u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(D,i,p,r,v,y),!0):go(await Mo(ee,n,r,i,p,v,y,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs,a.traceContext,a.executionJournal?{journal:a.executionJournal,parentCallId:T}:void 0),e,u)?!0:(u.debug(`Round ${p} completed for agent ${a.conversationId}`),!1)}function Po(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 Fo(e,t){return t===0||e<t}async function Io(e,t,r,i,a,o,s,c,l,u=!1){let d=Po(a,i);for(;!u&&!s.forcedSummaryInstruction&&Fo(s.currentRound,d)&&!(c?.aborted||(s.currentRound++,await No(s,d,e,t,r,i,a,o,l))||c?.aborted););let f=e.getMessages(),p=f.length>0?f[f.length-1]:void 0,m=p?.role===`assistant`&&typeof p.content==`string`&&p.content.length>0&&(!(`toolCalls`in p)||p.toolCalls.length===0);if(!c?.aborted){if(i.allowToolOnlyCompletion===!0){let e=p?.role===`tool`;if(!m&&!e)throw new n.x(s.currentRound,{conversationId:t,executionId:r});return}m||await ho(e,o,a,r,s,t,i,l.logger,d,i.executionJournal?l.toolExecutionService.getLoadedDeferredTools():void 0)}}async function Lo(e,t,n,r,i,a,o,s,c,l,u,d){let f={...Ta(t,n,r,i.toolsExecuted,{turnMessageId:o,interrupted:s,...c?.allowToolOnlyCompletion===!0&&{allowToolOnlyCompletion:!0}},i.providerFailure),interrupted:s};await W(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:i.toolCallOutcomes.map(e=>({...e.id===void 0?{}:{id:e.id},name:e.name,...e.success?{}:{result:null}}))}};for(let e of[`afterExecution`,`afterConversation`,`afterToolExecution`])await W(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(j.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}function q(e){return JSON.stringify(e,(e,t)=>t&&typeof t==`object`&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).sort(([e],[t])=>e.localeCompare(t))):t)}function J(e){throw new L(`EXECUTION_RECOVERY_INVALID`,e)}function Y(e){return typeof e==`string`&&e.length>0}function Ro(e,t,n,r=!0){try{return zo(structuredClone(e),t,n,r)}catch(e){if(e instanceof L)throw e;return J(`Execution journal is not a valid recoverable record prefix`)}}function zo(e,t,n,r){(!Y(t)||!Y(n)||!Array.isArray(e))&&J(`Missing recovery identity`);let i=[],a=new Map,o,s=new Map,c=new Map,l=new Set,u=new Set;for(let n of e){(!n||n.executionId!==t||!Y(n.recordId))&&J(`Journal execution identity mismatch`);let e=q(n),r=a.get(n.recordId);if(r!==void 0){e!==r&&J(`Conflicting journal record identity`);continue}if(a.set(n.recordId,e),i.push(n),`callId`in n)Y(n.callId)||J(`Missing model call identity`),n.kind===`model-request`||n.kind===`model-cache-hit`?o=n.callId:n.callId!==o&&J(`Model settlement crossed a newer invocation`);else if(`actionId`in n){(!Y(n.actionId)||!Y(n.parentCallId))&&J(`Missing action identity`);let e=s.get(n.actionId),t=q([n.parentCallId,n.toolCallId,n.toolName]);if(e&&e!==t&&J(`Action identity belongs to multiple calls`),s.set(n.actionId,t),n.kind===`tool-wait`&&((!n.request||!Y(n.request.requestId)||!Y(n.request.kind)||c.has(n.request.requestId))&&J(`Invalid or duplicate tool wait`),Eo(n.request.data),c.set(n.request.requestId,n)),n.kind===`tool-response`){let e=n.response,t=e&&c.get(e.requestId);(!t||!Y(e.responseId)||l.has(e.requestId)||u.has(e.responseId)||t.actionId!==n.actionId||t.parentCallId!==n.parentCallId||t.toolCallId!==n.toolCallId||t.toolName!==n.toolName)&&J(`Tool response does not belong to an unanswered request`),Eo(e.response),l.add(e.requestId),u.add(e.responseId)}}else J(`Unknown journal record`)}o!==n&&J(`Only the latest model invocation can be recovered`);let d,f,p,m=new Map;for(let e of i){if(`callId`in e){if(e.callId!==n)continue;e.kind===`model-request`?((d||f)&&J(`Duplicate or out-of-order model request`),d=e):e.kind===`model-cache-hit`?((d||f||e.response.role!==`assistant`)&&J(`Invalid cache settlement`),f=e.response,p=e.checkpoint):e.kind===`model-response`?((!d||f||e.response.role!==`assistant`)&&J(`Invalid model response`),f=e.response):J(`This model invocation has no recoverable tool response`);continue}if(e.parentCallId!==n)continue;f||J(`Tool action precedes its model response`);let r=f.toolCalls?.find(t=>t.id===e.toolCallId);(!r||e.toolName!==r.function.name)&&J(`Action does not belong to the saved model response`);let i=m.get(e.toolCallId);if(i&&i.actionId!==e.actionId&&J(`Multiple actions claim one tool call`),i||(i={actionId:e.actionId,intent:!1,dispatched:!1,effectStarted:!1,waits:[]},m.set(e.toolCallId,i)),i.result&&J(`Tool action continued after settlement`),e.kind===`tool-intent`)(i.intent||i.dispatched||i.effectStarted)&&J(`Out-of-order action intent`),q(JSON.parse(r.function.arguments))!==q(e.parameters)&&J(`Action arguments differ from saved intent`),i.intent=!0;else if(e.kind===`tool-dispatch`)(!i.intent||i.dispatched||i.effectStarted)&&J(`Out-of-order dispatch`),i.dispatched=!0;else if(e.kind===`tool-effect-start`)(!i.dispatched||i.effectStarted)&&J(`Out-of-order effect admission`),i.waits.some(e=>!e.response)&&J(`Tool effect precedes a required response`),i.effectStarted=!0;else if(e.kind===`tool-wait`)(!i.dispatched||i.effectStarted)&&J(`Tool wait is outside pre-effect dispatch`),i.waits.push({request:{...e.request,executionId:t,actionId:e.actionId,parentCallId:e.parentCallId,toolCallId:e.toolCallId,toolName:e.toolName}});else if(e.kind===`tool-response`){let t=i.waits.find(t=>t.request.requestId===e.response.requestId);(!t||t.response||i.effectStarted)&&J(`Out-of-order tool response`),t.response=e.response}else if(e.kind===`tool-result`){let t=e.result,n=t.metadata?.errorCode===Xe;n&&(t.success||i.dispatched||i.effectStarted||t.metadata?.dispatchStatus!==`not-dispatched`||t.result!==null)&&J(`Skipped tool result cannot claim a dispatched or applied effect`),(!i.intent&&t.metadata?.errorCode!==`argument_decode_error`&&!n||t.executionId!==r.id||t.toolName!==r.function.name||typeof t.success!=`boolean`||t.success&&(!i.effectStarted||t.result===void 0)||!t.success&&!Y(t.error))&&J(`Invalid tool result linkage or payload`),e.loadedDeferredTools!==void 0&&(!Array.isArray(e.loadedDeferredTools)||e.loadedDeferredTools.some(e=>!Y(e)))&&J(`Invalid tool residency settlement`),i.result=t,i.loadedDeferredTools=e.loadedDeferredTools}else J(`Unknown action record`)}let h=d?.checkpoint??p;(!f||!h||h.version!==1||h.effectAdmission!==`required`)&&J(`A supported effect-admission checkpoint is required`),(!Number.isSafeInteger(h.round)||h.round<1||!Number.isFinite(h.contextLimit)||h.contextLimit<=0||!Number.isFinite(h.cumulativeInputTokens)||h.cumulativeInputTokens<0||!Array.isArray(h.messages)||!Array.isArray(h.sameToolInputCounts))&&J(`Invalid round checkpoint`);let g=new Set;for(let e of h.messages)g.has(e.id)&&J(`Duplicate checkpoint message identity`),g.add(e.id);for(let e of[...h.messages,f])(!Y(e.id)||!(e.timestamp instanceof Date)||!Number.isFinite(e.timestamp.getTime())||(e.role===`assistant`?e.content!==null&&typeof e.content!=`string`:typeof e.content!=`string`)||e.role===`tool`&&!Y(e.toolCallId)||![`user`,`assistant`,`system`,`tool`].includes(e.role)||![`complete`,`interrupted`].includes(e.state))&&J(`Invalid checkpoint message`);let _=new Set;for(let[e,t]of h.sameToolInputCounts)(!Y(e)||_.has(e)||!Number.isSafeInteger(t)||t<0)&&J(`Invalid repeated-input checkpoint`),_.add(e);h.maxSameToolInputs!==void 0&&(!Number.isSafeInteger(h.maxSameToolInputs)||h.maxSameToolInputs<1)&&J(`Invalid repeated-input limit`),r&&(!Array.isArray(f.toolCalls)||f.toolCalls.length===0)&&J(`Saved response has no tool calls`),g.clear();for(let e of f.toolCalls??[])(!Y(e.id)||g.has(e.id)||e.type!==`function`||!Y(e.function?.name)||typeof e.function.arguments!=`string`)&&J(`Invalid or duplicate saved tool call`),g.add(e.id);d?.options.toolChoice===`none`&&(f.toolCalls?.length??0)>0&&J(`Saved invocation prohibited tool execution`);let v=[...m.values()].filter(e=>e.effectStarted&&!e.result);if(v.length)throw new L(`EXECUTION_RECOVERY_REQUIRED`,`Tool effects have no durable result; reconcile them before resuming`,v.map(e=>e.actionId));return{checkpoint:h,response:f,actions:m,offeredDeferredTools:d?.options.tools?.filter(e=>e.deferLoading).map(e=>e.name)??[]}}function Bo(e){throw new L(`EXECUTION_RECOVERY_CONFLICT`,e)}function Vo(e,t){return{...structuredClone(e.response),id:`recovery:${t.executionId}:${t.callId}:assistant`,...e.checkpoint.continuation?.kind===`summary`&&{content:e.response.content||`Maximum rounds reached. Partial results available in conversation history.`,toolCalls:[]},metadata:{...e.response.metadata,...ao(e.response),executionId:t.executionId,providerCallId:t.callId,round:e.checkpoint.round}}}function Ho(e,t,n,r){return e.role===`assistant`&&t.role===`assistant`&&(e.content??``)===(t.content??``)&&q(e.toolCalls??[])===q(t.toolCalls??[])&&e.metadata?.providerCallId===n&&e.metadata.executionId===r}function Uo(e,t,n,r){if(!e.length)return;let i=t.checkpoint.messages;(e.length<i.length||q(e.slice(0,i.length))!==q(i))&&Bo(`Current history differs from the saved runtime checkpoint`);let a=e.slice(i.length);if(!a.length)return;Ho(a[0],Vo(t,n),n.callId,n.executionId)||Bo(`Current assistant does not match the saved response`);let o=t.response.toolCalls??[];a.length>o.length+1&&Bo(`History has advanced beyond the recovered tool batch`);let s=o.slice(0,a.length-1),c=s.map(e=>{let n=t.actions.get(e.id)?.result;return n||Bo(`History contains a tool result without durable settlement`),n}),l=new In;for(let e of i)l.addMessage(e);l.addMessage(a[0]),wo(s,{results:c,errors:[]},l,t.checkpoint.round,r.logger,{contextLimit:t.checkpoint.contextLimit,cumulativeInputTokens:Wo(t)});for(let e=1;e<a.length;e++){let t=l.getMessages()[i.length+e],n=a[e];(n.role!==`tool`||t.role!==`tool`||n.toolCallId!==t.toolCallId||n.name!==t.name||n.content!==t.content)&&Bo(`Existing tool result conflicts with the durable result`)}}function Wo(e){let t=ao(e.response).inputTokens??0;return t>0?t:e.checkpoint.cumulativeInputTokens}async function Go(e,t,n,r,i){let a=q(e.getMessages()),o=()=>{(a!==q(e.getMessages())||e.hasPendingAssistant())&&Bo(`History changed during execution recovery`)};o();let s=i?.records??await n.journal.read(n.executionId),c=i?.batch??Ro(s,n.executionId,n.callId);n.signal?.throwIfAborted(),o();let l=structuredClone(e.getMessages());Uo(l,c,n,r);let u=await ko(s,n);u.length!==s.length&&(c=Ro(u,n.executionId,n.callId,!1)),n.signal?.throwIfAborted(),o();let d=new Set([...c.checkpoint.continuation?.loadedDeferredTools??[],...c.offeredDeferredTools]);for(let e of c.actions.values())for(let t of e.loadedDeferredTools??[])d.add(t);r.toolExecutionService.restoreLoadedDeferredTools([...d]);let f=new In;for(let e of c.checkpoint.messages)f.addMessage(structuredClone(e));let p=c.checkpoint.continuation?.kind===`summary`,m=c.response.toolCalls??[];(p||m.length>0||(c.response.content?.trim().length??0)>0)&&f.addMessage(Vo(c,n));let h={toolsExecuted:[...c.checkpoint.continuation?.toolsExecuted??[]],toolCallOutcomes:[],currentRound:c.checkpoint.round,runningAssistantCount:f.getMessages().filter(e=>e.role===`assistant`).length,lastTrackedAssistantMessage:c.response,cumulativeInputTokens:Wo(c),consecutiveUnknownToolFailureRounds:c.checkpoint.continuation?.consecutiveUnknownToolFailureRounds??0,forcedSummaryInstruction:c.checkpoint.continuation?.forcedSummaryInstruction,sameToolInputCounts:new Map(c.checkpoint.sameToolInputCounts)};r.eventEmitter.prepareOwnerPathBases(t);try{let i=m.length===0;m.length>0&&(i=go(await Mo(m,f,t,n.executionId,c.checkpoint.round,n.callId,void 0,h,r,void 0,n.signal,void 0,c.checkpoint.maxSameToolInputs,void 0,{journal:n.journal,parentCallId:n.callId,recovery:c}),h,r.logger)),o();for(let t of f.getMessages().slice(l.length))e.addMessage(t);let a=structuredClone(e.getMessages()),s=q(a);for(let r=l.length;r<a.length;r++)n.onExecutionEvent?.(`history_mutation`,{executionId:n.executionId,conversationId:t,round:c.checkpoint.round,mutation:`append_message`,index:r,message:a[r]}),(s!==q(e.getMessages())||e.hasPendingAssistant())&&Bo(`History changed while announcing execution recovery`);if(n.signal?.aborted)throw at(`Execution recovery interrupted`,n.signal.reason);return{executionId:n.executionId,callId:n.callId,messages:structuredClone(e.getMessages()),batch:c,state:h,stop:i}}finally{r.eventEmitter.clearToolEventServices(),r.eventEmitter.resetOwnerPathBases()}}async function Ko(e,t,n,r){let{executionId:i,callId:a,messages:o}=await Go(e,t,n,r);return{executionId:i,callId:a,messages:o}}function X(e){throw new L(`EXECUTION_RECOVERY_INVALID`,e)}function qo(e){return(!e||e.version!==1||![`round`,`summary`].includes(e.kind)||typeof e.startedAt!=`string`||!Number.isFinite(Date.parse(e.startedAt))||typeof e.turnMessageId!=`string`||e.turnMessageId.length===0||!e.model||typeof e.model.provider!=`string`||typeof e.model.model!=`string`||!e.model.provider||!e.model.model||!e.options||!Number.isSafeInteger(e.options.maxExecutionRounds)||e.options.maxExecutionRounds<0||!Array.isArray(e.toolsExecuted)||e.toolsExecuted.some(e=>typeof e!=`string`)||!Number.isSafeInteger(e.consecutiveUnknownToolFailureRounds)||e.consecutiveUnknownToolFailureRounds<0||!Array.isArray(e.loadedDeferredTools)||e.loadedDeferredTools.some(e=>typeof e!=`string`||!e)||typeof e.structuredOutput!=`boolean`||typeof e.options.allowToolOnlyCompletion!=`boolean`||typeof e.options.withholdHostedTools!=`boolean`)&&X(`Unsupported runtime continuation checkpoint`),e.structuredOutput&&X(`Structured-output validators do not yet support execution continuation`),e}async function Jo(e,t,n,r,i,a){let o=q(e.getMessages()),s=await n.journal.read(n.executionId);n.signal?.throwIfAborted();let c=s.findLast(e=>e.kind===`model-request`||e.kind===`model-cache-hit`);if((!c||!(`callId`in c))&&X(`No recoverable model invocation exists`),c.kind===`model-request`&&!s.some(e=>e.kind===`model-response`&&e.callId===c.callId))throw new L(`EXECUTION_RECOVERY_REQUIRED`,`The latest model invocation has no durable response; reconcile it before resuming`);let l=Ro(s,n.executionId,c.callId,!1),u=qo(l.checkpoint.continuation);(u.model.provider!==r.defaultModel.provider||u.model.model!==r.defaultModel.model)&&X(`Active provider and model must match the saved runtime before continuation`);let d=l.checkpoint.messages.find(e=>e.id===u.turnMessageId);(!d||d.role!==`user`||d.metadata?.executionId!==n.executionId)&&X(`Continuation has no matching original input`),(u.toolSearch??`auto`)!==(r.toolSearch??`auto`)&&X(`Tool residency policy differs from the saved runtime`),r.responseFormat&&r.responseFormat.type!==`text`&&X(`Current runtime requires an unsupported structured-output validator`),u.options.maxSameToolInputs!==l.checkpoint.maxSameToolInputs&&X(`Conflicting repeated-input limits`),u.kind===`summary`&&(l.response.toolCalls?.length??0)>0&&X(`Terminal summary cannot dispatch tools`);for(let e of l.actions.values())e.result&&e.loadedDeferredTools===void 0&&X(`Settled action lacks runtime residency state`);let f={...r,defaultModel:structuredClone(u.model),timeout:u.timeout,maxExecutionRounds:u.options.maxExecutionRounds,maxSameToolInputs:u.options.maxSameToolInputs},p=i(f);if(p.currentInfo.provider!==u.model.provider&&X(`Active provider manager differs from the saved runtime`),o!==q(e.getMessages()))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`History changed while reading the execution journal`);let m=await Go(e,t,{...n,callId:c.callId},a,{batch:l,records:s}),h=Va(e.getMessages(),f,new Date(u.startedAt),n.executionId,t,{...u.options,signal:n.signal,executionJournal:n.journal,onTextDelta:n.onTextDelta,onThinkingDelta:n.onThinkingDelta,onExecutionEvent:n.onExecutionEvent,traceContext:n.traceContext});a.eventEmitter.prepareOwnerPathBases(t);try{if(await Io(e,t,n.executionId,h,f,p,m.state,n.signal,a,m.stop||u.kind===`summary`),n.signal?.aborted)throw at(`Execution continuation interrupted`,n.signal.reason);return Ta(e,n.executionId,h.startTime,m.state.toolsExecuted,{turnMessageId:u.turnMessageId,allowToolOnlyCompletion:u.options.allowToolOnlyCompletion},m.state.providerFailure)}finally{a.eventEmitter.clearToolEventServices(),a.eventEmitter.resetOwnerPathBases()}}async function*Yo(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 Xo(e,t,n){return{executionId:e,...t===void 0?{}:{driverId:t},...n===void 0?{}:{turnSource:n}}}var Zo=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new da(t),this.aiProviders=e,this.tools=t,this.conversationHistory=n,this.plugins=[],this.logger=O(`ExecutionService`),!r)throw Error(`[EXECUTION] EventService is required`);this.eventEmitter=new xa(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`)}resume(e,t,n){return Jo(this.conversationHistory.getConversationStore(e),e,t,n,e=>Fa(this.aiProviders,this.tools,e),{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService})}resumeToolCalls(e,t){return Ko(this.conversationHistory.getConversationStore(e),e,t,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter})}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=za(),a=new Date,o=Ba(r,`execute`),s=Va(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=Fa(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=La(this.conversationHistory,o,t,n,i),u,d={toolsExecuted:[],toolCallOutcomes:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};try{let t=l.getMessages().length;l.addUserMessage(e,Xo(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 W(this.plugins,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},this.logger);let p={executionId:i,conversationId:o};f&&await W(this.plugins,`onMessageAdded`,{message:f,executionContext:p},this.logger);for(let e of[`beforeExecution`,`beforeConversation`])await W(this.plugins,e,{messages:l.getMessages(),executionContext:p},this.logger);Ia(c);for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await Io(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),Lo(e,l,i,a,d,o,u,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){if(R(e))throw e;return it(e,r?.signal)?{...Ta(l,i,a,d.toolsExecuted,{turnMessageId:u,interrupted:!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*Yo(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 Qo(e){let t=new Mi;if(e.aiProviders)for(let n of e.aiProviders)t.addProvider(n.name,n,{ownership:e.providerOwnership&&Object.hasOwn(e.providerOwnership,n.name)?e.providerOwnership[n.name]:`owned`});return e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),t}async function $o(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 ConversationAgent 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 nt&&c&&e.setEventService(c),r.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return jr(e,t,n)},e.provenance),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new Fi(new Pi({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new Ni));let d=new Zo(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(`ConversationAgent initialization completed successfully with independent managers`),d}async function es(e){try{let t=await $o(e.ctx);e.setExecutionService(t),e.setFullyInitialized(!0)}catch(t){throw e.ctx.logger.error(`ConversationAgent initialization failed`,{error:t instanceof Error?t.message:String(t)}),t}}function ts(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 ns(e){e.logger.debug(`Destroying ConversationAgent 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 ConversationAgent 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(`ConversationAgent instance destroyed successfully`,{name:e.name}):e.logger.warn(`ConversationAgent instance destroyed with cleanup failures`,{name:e.name,failureCount:t.length}),{errors:t}}var rs=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(),is(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 is(e,t){let n=e.reason;return it(n)&&n.name===`AbortError`?n:at(t?`Run aborted while queued behind another run on this instance`:`Run aborted before it started`,n)}function as(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??ss,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function os(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new n.b(`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.b(`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.b(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||ss(),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 ss(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function cs(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var ls=class{templates=new Map;logger;constructor(){this.logger=O(`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 us(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 ds(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function fs(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 ps(e,n.name,r)}t.push(n)}}function ps(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var ms=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new ls,this.logger=O(`AgentFactory`),this.options=as(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=os(t,this.options);let o=i;if(this.options.strictValidation){let e=ct(i);if(!e.isValid)throw new n.j(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let s;if(await fs([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(o)},{name:`construct`,run:()=>{s=new e(o)}},{name:`initialize`,run:()=>s?us(s)?.initialize?.():void 0,undo:()=>s?us(s)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!s)throw new n.b(`Agent was not constructed`);this.activeAgents.set(a,s),cs(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.b(`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.b(`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.b(`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.b(`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 us(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 ct(e)}};function hs(e,t,r){if(!e.name||e.name.trim()===``)throw new n.b(`Module name is required`);if(!e.version||e.version.trim()===``)throw new n.b(`Module version is required`);let i=e.getModuleType(),a=t.validateTypeDescriptor(i);if(!a.valid)throw new n.b(`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 gs(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.b(`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 _s(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 vs(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 ys(){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 bs(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 xs(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 Ss(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 Cs(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 ws=class{registeredTypes=new Map;logger;constructor(){this.logger=O(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new n.b(`Invalid module type descriptor: ${t.errors.join(`, `)}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let t=this.registeredTypes.get(e.type);this.logger.warn(`Overriding existing module type`,{type:e.type,previousCategory:t?.category||`unknown`,newCategory:e.category})}this.registeredTypes.set(e.type,e),this.logger.info(`Module type registered`,{type:e.type,category:e.category,layer:e.layer,dependencies:e.dependencies?.length||0,capabilities:e.capabilities?.length||0})}unregisterType(e){if(!this.registeredTypes.has(e))return!1;let t=this.findDependentTypes(e);if(t.length>0)throw new n.b(`Cannot unregister module type '${e}' - it is required by: ${t.join(`, `)}`,{type:e,dependentTypes:t});return this.registeredTypes.delete(e),this.logger.info(`Module type unregistered`,{type:e}),!0}getType(e){return this.registeredTypes.get(e)}getAllTypes(){return Array.from(this.registeredTypes.values())}getTypesByCategory(e){return Array.from(this.registeredTypes.values()).filter(t=>t.category===e)}getTypesByLayer(e){return Array.from(this.registeredTypes.values()).filter(t=>t.layer===e)}hasType(e){return this.registeredTypes.has(e)}validateTypeDescriptor(e){return bs(e,e=>this.getType(e))}resolveDependencies(e){return xs(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return Ss(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 ys())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 Cs(this.registeredTypes)}};const Ts={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var Es=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 ws,this.logger=O(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new n.b(`Cannot register modules during disposal`);if(hs(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new n.b(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await gs(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(Ts.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=_s(e,this.modules);if(r.length>0)throw new n.b(`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(Ts.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let r=this.modules.get(e);if(!r)throw new n.b(`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.b(`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.b(`Module '${e}' not found`);if(!r.isInitialized())throw new n.b(`Module '${e}' is not initialized`);if(!r.isEnabled())throw new n.b(`Module '${e}' is disabled`);let i=this.moduleStats.get(e),a=Date.now();try{if(!r.execute)throw new n.b(`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 vs(this.modules,this.moduleStats)}},Ds=class extends Ar{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=si(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=O(`ConversationAgent`,t?{level:t}:{}),this.startTime=Date.now(),Mr(e),this.config={...e,aiProviders:[...e.aiProviders],...e.providerOwnership?{providerOwnership:{...e.providerOwnership}}:{}},this.aiProviders=Qo(e),this.tools=ci(()=>this.config),this.agentFactory=new ms,this.conversationHistory=new Ln,this.eventEmitter=gi(),this.moduleRegistry=new Es(this.eventEmitter),this.eventService=e.eventService||ur,this.agentEventService=U(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:_i(this.conversationId,this.config.executionContext)});let n=di({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,mi(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=[..._i(this.conversationId,this.config.executionContext),{type:`tool`,id:n.executionId??e}];return this.executionService.invokeRuntimeTool(e,t,{...n,baseEventService:this.eventService,eventService:U(this.eventService,{ownerPath:r,ownerType:`tool`,ownerId:n.executionId??e}),ownerPath:r,ownerType:`tool`,ownerId:n.executionId})}async resume(e){let t={...e,toolResponses:structuredClone(e.toolResponses)};return this.assertNotDestroyed(),this.runQueue.run(t.signal,async()=>{await this.ensureFullyInitialized();let e=await this.executionService.resume(this.conversationId,t,this.config);if(!e.success)throw e.error??Error(`Execution continuation failed`);return e.response})}async resumeToolCalls(e){let t={...e,toolResponses:structuredClone(e.toolResponses)};return this.assertNotDestroyed(),this.runQueue.run(t.signal,async()=>(await this.ensureFullyInitialized(),this.executionService.resumeToolCalls(this.conversationId,t)))}async run(e,t={}){return this.assertNotDestroyed(),this.runQueue.run(t.signal,async()=>{await this.ensureFullyInitialized();try{if(t.output){let n=sn(t.output);return await Ci(this.executionDeps(),e,t,n)}return await yi(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=sn(t.output);return yield*wi(this.executionDeps(),e,t,n)}return yield*bi(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new rs;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 Ei(this.conversationHistory,this.conversationId)}getFullHistory(){return Di(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Oi(this.conversationHistory,this.conversationId,e)}clearHistory(){ki(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){Ai(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){ji(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,aiProviders:[...this.config.aiProviders],...this.config.providerOwnership?{providerOwnership:{...this.config.providerOwnership}}:{}}}swapDefaultProvider(e,t,n={}){this.aiProviders.addProvider(e.name,e,n),this.config={...this.config,aiProviders:Object.values(this.aiProviders.getProviders()),providerOwnership:{...this.config.providerOwnership,[e.name]:n.ownership??`owned`}},this.configManager.setModel({provider:e.name,model:t})}getStats(){return ts({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,ns({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 es({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){hi(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const Os=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,ks=Symbol.for(`@robota-sdk/tool-result-admitted`);var As=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function js(e){return Object.getOwnPropertyDescriptor(e,ks)?.value===!0}function Ms(e){return Object.defineProperty({...e},ks,{value:!0})}function Ns(e){if(e.parts?.length&&e.parts.every(e=>e.type===`text`)){let t=e.parts.map(e=>e.type===`text`?e.text:``).join(`
9
- `);if(e.success&&e.data===t||!e.success&&e.data===void 0&&e.error===t)return t}if(e.parts?.length)return JSON.stringify({success:e.success,data:e.data,error:e.error,parts:e.parts});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 Ps(e){return Number.isSafeInteger(e)&&e>0}function Fs(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!Ps(n)||!Ps(r)||!Ps(i)||n>=r||r>i||i>5e5)throw new As(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!Ps(t))throw new As(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function Is(e,t,n={},r){let{warningChars:i,hardChars:a}=Fs(n,r),o=Ns(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new As(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new As(`spill-write-failed`)}if(!Os.test(e)||e.length>a)throw new As(`invalid-reference`);let r=t.view?{view:t.view}:{};return Ms(t.success?{success:!0,data:e,...r}:{success:!1,error:`Tool failure details: ${e}`,...r})}return Ms(t)}var Ls=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 Rs={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 zs(e){return typeof e==`string`?e.length:0}var Bs=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:A.EXECUTION_START,completeEvent:A.EXECUTION_COMPLETE,errorEvent:A.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:zs(n[0]),conversationId:e.conversationId,options:Z(n[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod(`runStream`,{startEvent:A.EXECUTION_START,completeEvent:A.EXECUTION_COMPLETE,errorEvent:A.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:zs(n[0]),conversationId:e.conversationId,streaming:!0,options:Z(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:M.CALL_START,completeEvent:M.CALL_COMPLETE,errorEvent:M.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 Vs(e,t){let n=new Bs(t);return n.configureStandardMethods(),n.wrap(e)}function Hs(e,t,n){return function(r){return Vs(r,{eventService:e,sourceType:t,sourceId:n})}}const Us={safe:`plan`,moderate:`default`,full:`acceptEdits`};function Ws(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===`
10
- `||(r===`<`||r===`>`)&&i===`(`)return!0;if(r===`&`){let t=e[n-1];if(t!==`>`&&t!==`<`&&i!==`>`)return!0}}return!1}function Gs(e){let t={segments:[],current:``,quote:void 0,substitutionDepth:0};for(let n=0;n<e.length;n+=1){let r=qs(t,e,n);if(r!==void 0){n=r;continue}let i=Js(t,e,n);if(i!==void 0){n=i;continue}if(Ys(t,e[n]))continue;let a=Xs(t,e,n);if(a!==void 0){n=a;continue}t.current+=e[n]}return Ks(t),t.segments}function Ks(e){let t=e.current.trim();t!==``&&e.segments.push(t),e.current=``}function qs(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 Js(e,t,n){let r=t[n];if(r==="`")return Ks(e),n;if(r===`$`&&t[n+1]===`(`)return Ks(e),e.substitutionDepth+=1,n+1}function Ys(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 Xs(e,t,n){let r=t[n];if((r===`<`||r===`>`)&&t[n+1]===`(`)return Ks(e),e.substitutionDepth+=1,n+1;if(r===`)`&&e.substitutionDepth>0)return Ks(e),--e.substitutionDepth,n;if(r===`;`||r===`|`||r===`
11
- `||r===`&`&&Zs(t,n))return Ks(e),n}function Zs(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const Qs=/[.+^${}()|[\]\\]/g;function $s(e){let t=e.replace(Qs,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function ec(e,t,n){let r=$s(e);return n===`deny`?r.test(t)||Gs(t).some(e=>r.test(e))?`match`:`no-match`:r.test(t)?e.includes(`*`)&&Ws(t)?`no-match`:`match`:`no-match`}function tc(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(Qs,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function nc(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function rc(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 ic(e,t){let n=rc(e),r=rc(t);return nc(n)&&!nc(r)?`unevaluable`:tc(n).test(r)?`match`:`no-match`}const ac=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,oc=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),sc={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function cc(e){return e.replace(/\.$/,``).toLowerCase()}function lc(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function uc(e,t=!1){let n=cc(e).replace(/\*\*(?:\.\*\*)+/g,`**`).split(`.`),r=[],i=`[^.]+(?:\\.[^.]+)*`;for(let[e,a]of n.entries()){let o=e===0,s=e===n.length-1;if(a===`**`){o&&s?r.push(i):s?r.push(`(?:\\.${i})?`):r.push(`${o?``:`\\.`}(?:${i}\\.)?`);continue}let c=!o&&n[e-1]===`**`,l=o||c?``:`\\.`;if(a===`*`)r.push(`${l}${t&&!o?`[^.]*`:i}`);else if(a.includes(`**`))return null;else if(a.includes(`*`))r.push(`${l}${a.replace(Qs,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=lc(a);if(e===null)return null;r.push(`${l}${e.replace(Qs,`\\$&`)}`)}}return RegExp(`^${r.join(``)}$`)}function dc(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function fc(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!oc.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function pc(e,t,n=!1){if(e.includes(`*`)){let r=uc(e,n);return r===null?`unevaluable`:r.test(t)?`match`:`no-match`}let r;try{r=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return cc(r)===t?`match`:`no-match`}function mc(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?sc[n]:t.port)}function hc(e,t){let n=dc(t),r=dc(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:tc(r).test(n)?`match`:`no-match`}function gc(e,t){let n=ac.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=fc(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=pc(i,cc(s.hostname));return l===`match`?mc(a,s,c)?o===void 0?`match`:hc(o,s.pathname):`no-match`:l}function _c(e,t){if(!e.startsWith(`domain:`))return gc(e,t);let n=/^domain:([^/\\:?#@[\]\s]+)$/.exec(e);if(n===null)return`unevaluable`;let r=cc(n[1]);if(r.includes(`**`)||r.split(`.`).some(e=>e===``))return`unevaluable`;let i=fc(t);return i===null||i.protocol!==`http:`&&i.protocol!==`https:`?`unevaluable`:pc(r,cc(i.hostname),!0)}const vc={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`}},yc={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},bc=[`.git`,`.claude`,`.agents`],xc=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function Sc(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function Cc(e){let t=[];for(let n of Sc(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function wc(e,t={}){let n=t.pathProtection,r=Dc.exec(e),i=r!==null&&t.homeDirectory!==void 0?`${t.homeDirectory}/${r[1]??``}`:e,a=i.startsWith(`/`)?Tc(i):t.cwd===void 0?void 0:Tc(`${t.cwd}/${i}`);if(a!==void 0&&n?.protectedPaths.some(e=>{let t=Tc(e);return a===t||a.startsWith(`${t}/`)}))return!0;let o=Cc(i),s=o[o.length-1];if(s!==void 0&&xc.includes(s))return!0;let c=[...bc,...n?.protectedDirectoryNames??[]],l=[`.claude/worktrees`,...n?.writableWorktreeContainers??[]].map(Cc);for(let e=0;e<o.length;e+=1){if(!c.includes(o[e]))continue;let t=l.find(t=>t.length>0&&t.every((t,n)=>o[e+n]===t)&&o[e+t.length]!==void 0);if(t!==void 0){e+=t.length;continue}return!0}return!1}function Tc(e){let t=[];for(let n of Sc(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function Ec(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const Dc=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function Oc(e,t){let n=Ec(e),r=Dc.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=Tc(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=Tc(n);else{if(t.cwd===void 0)return!1;i=Tc(`${t.cwd}/${n}`)}if(Sc(i).length<=1||t.homeDirectory!==void 0&&i===Tc(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=Tc(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const kc=new Set([`rm`,`rmdir`]),Ac=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 jc(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=Ac.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 Mc(e,t){return Gs(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=jc(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!kc.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:Oc(e,t))})}const Nc=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),Pc=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),Fc={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},Ic=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,Lc=[`--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 Rc(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return Lc.some(e=>e.startsWith(t))}function zc(e,t){if(Zc(t).some(e=>Ic.test(e.text)||Rc(e.text)))return!0;if(e===`find`)return Zc(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=Fc[e];return n!==void 0&&Zc(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const Bc=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),Vc=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),Hc=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),Uc=new Set([`/dev/null`]),Wc=/[A-Za-z0-9_./:=@+,*?[\]~-]/,Gc=new Set([`$`,"`",`\\`,`!`]),Kc=new Set([`*`,`?`,`[`]);function qc(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||Jc(e)}function Jc(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 Yc(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 Xc(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!Uc.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||qc(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:Gc.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(!Wc.test(l)){s=!0;break}Kc.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 Zc(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function Qc(e){return e.every(e=>!e.expands&&!Pc.has(e.text))}function $c(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>Vc.has(e.text));return t.every(e=>Vc.has(e.text)||Hc.has(e.text))&&(n||t.length===e.length)}function el(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!Bc.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`?$c(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function tl(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=>qc(e.text))||zc(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:Nc.has(t.text)?!0:t.text===`find`?Qc(n):t.text===`git`&&el(n)}const nl=new Set([`echo`,`which`,`git`]);function rl(e,t){let n;for(let[r,...i]of e)if(!nl.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 il(e,t={}){if(t.otherDirectory===!0||e.length>1e4||Yc(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=Gs(e);if(n.length===0)return!1;let r=n.map(Xc);if(r.some(e=>e.refused||!tl(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:rl(r.map(e=>e.words),t.resolveInWorkspace)}function al(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 ol(e,t){Q.set(e,{...Q.get(e),...t})}function sl(){Q.clear()}function cl(e){return Q.get(e)??{}}function ll(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=$s(e);return n.some(e=>r.test(e))}function ul(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 dl(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`:$s(e.value).test(String(n))?`match`:`no-match`}function fl(e,t){return t.some(t=>{let n=al(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&ll(n.toolName,e)})}function pl(e){return Q.get(e)?.argument?.key}function ml(e,t){let n=pl(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function hl(e,t,n,r=`allow`){return n.some(n=>_l(e,t,n,r)===`match`)}function gl(e,t,n){return n.some(n=>_l(e,t,n,`deny`)===`unevaluable`)}function _l(e,t,n,r){let i=al(n);if(!ll(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=ul(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?dl(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=ml(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return e===`WebFetch`?_c(i.argPattern,s):gc(i.argPattern,s);case`path`:return ic(i.argPattern,s);case`command`:return ec(i.argPattern,s,r);case`text`:return $s(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function vl(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`?Mc(a,n):i.kind===`path`&&r?.riskClass===`modify`&&wc(a,n):!1}function yl(e,t,n,r){return hl(e,t,n,`deny`)||gl(e,t,n)||vl(e,t,r)}function bl(e,t,n={},r={}){return gl(e,t,n.deny??[])||yl(e,t,n.ask??[],r)}const xl=[`workingDirectory`,`cwd`];function Sl(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`&&il(i,{otherDirectory:xl.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function Cl(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=Sl(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return hl(e,t,o,`deny`)||i.ceiling!==void 0&&!hl(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0||Q.get(e)?.notInPeerTurn===!0&&i.peerTurn===!0?`deny`:gl(e,t,o)?n===`plan`?`deny`:`approve`:yl(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||hl(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?yc[n]:vc[n][c]}function wl(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 Tl=/^[A-Za-z_]\w*:(?!\/\/)/;function El(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function Dl(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}=al(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!El(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`&&Tl.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=ul(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=cl(r);if(!(o.parameters===void 0&&Tl.test(i)&&ul(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`&&(r===`WebFetch`?_c:gc)(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path]${r===`WebFetch`?` or domain:hostname`:``} that "${r}" is matched by`}}function Ol(e,t=`deny`){let n=[];for(let r of e){let e=Dl(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function kl(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=al(n.trim());if(r===void 0||e.includes(`*`))continue;let i=cl(e),a=ul(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&Tl.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=cl(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 Al(e){return(e??[]).map(e=>`${e}(*)`)}function jl(e,t){let n=Al(t.allowedTools),r=Ol(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,...Al(t.deniedTools)])]}}const Ml=[`Bash`,`Shell`,`BackgroundProcess`],Nl=[`Agent`],Pl=[...Ml,...Nl,`ExecuteCommand`,`Computer`],Fl=`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(`.`),Il=[`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(` `)),Ll=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function Rl(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function zl(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=Rl(e[0]);if(Fl.some(t=>n(t,r,e.length===1)))return!0;for(let i of Il){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(`-`)||Ll.has(o[0]));)o=o.slice(1);return o.length===0||zl(o,t)}return!1}function Bl(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return zl(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function Vl(e){let{toolName:t,argPattern:n}=al(e),r=e=>e.some(e=>ll(t,e));return r(Nl)?!0:t.includes(`*`)?r(Pl):Pl.includes(t)||cl(t).riskClass===`execute`?n===void 0||n.trim()===`*`||Ml.includes(t)&&Bl(n):!1}function Hl(e){return e.filter(e=>!Vl(e))}const Ul=1e6,Wl={"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}},Gl=[{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:/gemini-2/i,price:{inputPerMillion:.1,outputPerMillion:.4}},{pattern:/gemini-1/i,price:{inputPerMillion:1.25,outputPerMillion:5}}];function Kl(e){let t=Object.hasOwn(Wl,e)?Wl[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of Gl)if(t.test(e))return n}function ql(e,t,n){let r=Kl(e);if(r)return t/Ul*r.inputPerMillion+n/Ul*r.outputPerMillion}function Jl(e){let t=Kl(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function Yl(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 Xl(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 Zl(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([Promise.resolve().then(()=>require("./command-executor-wBgBdWXr.cjs")).then(e=>e.n),Promise.resolve().then(()=>require("./http-executor-CeAAZotH.cjs")).then(e=>e.n)]);return[new e,new t]}async function Ql(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 Zl(),d=new Map;for(let e of u)d.set(e.type,e);let f=[],p=Xl(r),m=-1,h,g;for(let e of l){if(!Yl(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=ao(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S,settleStreamingChunkHooks:C}=So(a,n,i,p,l,u),w=qa(s,o.defaultModel.model,i),T=W(),E;try{E=await Co(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),w,T,a.executionJournal?Oa(m,e,a,o,t,c.toolExecutionService.getLoadedDeferredTools()):void 0)}finally{await C()}if(E===null)return!0;let{assistantResponse:D,assistantToolCalls:ee}=to(E,i,a.conversationId,p,u);if(ee.length>0&&(a.toolChoice??o.defaultModel?.toolChoice)===`none`)throw Error(`Provider returned tool calls despite toolChoice none; no tools were executed.`);await G(l,`afterProviderCall`,{messages:m,responseMessage:E},u),await G(l,`onMessageAdded`,{message:E},u);let te=typeof D.content==`string`&&D.content.trim().length>0;if(ee.length===0&&!te)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let ne=so(D),re=ne.inputTokens??0;re>0&&(e.cumulativeInputTokens=re);for(let e of ee)n.appendToolCall(e);let ie=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(ie,{round:p,usageObservationId:b,executionId:i,providerId:K(w,s),providerCallId:T,modelId:q(w,s.aiProviderInfo.model),...ne});let ae=n.getMessages().at(-1);return a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:D}),ae&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:ae}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=D,ee.length===0?(u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(D,i,p,r,v,y),!0):vo(await Po(ee,n,r,i,p,v,y,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs,a.traceContext,a.executionJournal?{journal:a.executionJournal,parentCallId:T}:void 0),e,u)?!0:(u.debug(`Round ${p} completed for agent ${a.conversationId}`),!1)}function Io(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 Lo(e,t){return t===0||e<t}async function Ro(e,t,r,i,a,o,s,c,l,u=!1){let d=Io(a,i);for(;!u&&!s.forcedSummaryInstruction&&Lo(s.currentRound,d)&&!(c?.aborted||(s.currentRound++,await Fo(s,d,e,t,r,i,a,o,l))||c?.aborted););let f=e.getMessages(),p=f.length>0?f[f.length-1]:void 0,m=p?.role===`assistant`&&typeof p.content==`string`&&p.content.length>0&&(!(`toolCalls`in p)||p.toolCalls.length===0);if(!c?.aborted){if(i.allowToolOnlyCompletion===!0){let e=p?.role===`tool`;if(!m&&!e)throw new n.x(s.currentRound,{conversationId:t,executionId:r});return}m||await _o(e,o,a,r,s,t,i,l.logger,d,i.executionJournal?l.toolExecutionService.getLoadedDeferredTools():void 0)}}async function zo(e,t,n,r,i,a,o,s,c,l,u,d){let f={...Da(t,n,r,i.toolsExecuted,{turnMessageId:o,interrupted:s,...c?.allowToolOnlyCompletion===!0&&{allowToolOnlyCompletion:!0}},i.providerFailure),interrupted:s};await G(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:i.toolCallOutcomes.map(e=>({...e.id===void 0?{}:{id:e.id},name:e.name,...e.success?{}:{result:null}}))}};for(let e of[`afterExecution`,`afterConversation`,`afterToolExecution`])await G(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(j.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}function J(e){return JSON.stringify(e,(e,t)=>t&&typeof t==`object`&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).sort(([e],[t])=>e.localeCompare(t))):t)}function Y(e){throw new L(`EXECUTION_RECOVERY_INVALID`,e)}function X(e){return typeof e==`string`&&e.length>0}function Bo(e,t,n,r=!0){try{return Vo(structuredClone(e),t,n,r)}catch(e){if(e instanceof L)throw e;return Y(`Execution journal is not a valid recoverable record prefix`)}}function Vo(e,t,n,r){(!X(t)||!X(n)||!Array.isArray(e))&&Y(`Missing recovery identity`);let i=[],a=new Map,o,s=new Map,c=new Map,l=new Set,u=new Set;for(let n of e){(!n||n.executionId!==t||!X(n.recordId))&&Y(`Journal execution identity mismatch`);let e=J(n),r=a.get(n.recordId);if(r!==void 0){e!==r&&Y(`Conflicting journal record identity`);continue}if(a.set(n.recordId,e),i.push(n),`callId`in n)X(n.callId)||Y(`Missing model call identity`),n.kind===`model-request`||n.kind===`model-cache-hit`?o=n.callId:n.callId!==o&&Y(`Model settlement crossed a newer invocation`);else if(`actionId`in n){(!X(n.actionId)||!X(n.parentCallId))&&Y(`Missing action identity`);let e=s.get(n.actionId),t=J([n.parentCallId,n.toolCallId,n.toolName]);if(e&&e!==t&&Y(`Action identity belongs to multiple calls`),s.set(n.actionId,t),n.kind===`tool-wait`&&((!n.request||!X(n.request.requestId)||!X(n.request.kind)||c.has(n.request.requestId))&&Y(`Invalid or duplicate tool wait`),Oo(n.request.data),c.set(n.request.requestId,n)),n.kind===`tool-response`){let e=n.response,t=e&&c.get(e.requestId);(!t||!X(e.responseId)||l.has(e.requestId)||u.has(e.responseId)||t.actionId!==n.actionId||t.parentCallId!==n.parentCallId||t.toolCallId!==n.toolCallId||t.toolName!==n.toolName)&&Y(`Tool response does not belong to an unanswered request`),Oo(e.response),l.add(e.requestId),u.add(e.responseId)}}else Y(`Unknown journal record`)}o!==n&&Y(`Only the latest model invocation can be recovered`);let d,f,p,m=new Map;for(let e of i){if(`callId`in e){if(e.callId!==n)continue;e.kind===`model-request`?((d||f)&&Y(`Duplicate or out-of-order model request`),d=e):e.kind===`model-cache-hit`?((d||f||e.response.role!==`assistant`)&&Y(`Invalid cache settlement`),f=e.response,p=e.checkpoint):e.kind===`model-response`?((!d||f||e.response.role!==`assistant`)&&Y(`Invalid model response`),f=e.response):Y(`This model invocation has no recoverable tool response`);continue}if(e.parentCallId!==n)continue;f||Y(`Tool action precedes its model response`);let r=f.toolCalls?.find(t=>t.id===e.toolCallId);(!r||e.toolName!==r.function.name)&&Y(`Action does not belong to the saved model response`);let i=m.get(e.toolCallId);if(i&&i.actionId!==e.actionId&&Y(`Multiple actions claim one tool call`),i||(i={actionId:e.actionId,intent:!1,dispatched:!1,effectStarted:!1,waits:[]},m.set(e.toolCallId,i)),i.result&&Y(`Tool action continued after settlement`),e.kind===`tool-intent`)(i.intent||i.dispatched||i.effectStarted)&&Y(`Out-of-order action intent`),J(JSON.parse(r.function.arguments))!==J(e.parameters)&&Y(`Action arguments differ from saved intent`),i.intent=!0;else if(e.kind===`tool-dispatch`)(!i.intent||i.dispatched||i.effectStarted)&&Y(`Out-of-order dispatch`),i.dispatched=!0;else if(e.kind===`tool-effect-start`)(!i.dispatched||i.effectStarted)&&Y(`Out-of-order effect admission`),i.waits.some(e=>!e.response)&&Y(`Tool effect precedes a required response`),i.effectStarted=!0;else if(e.kind===`tool-wait`)(!i.dispatched||i.effectStarted)&&Y(`Tool wait is outside pre-effect dispatch`),i.waits.push({request:{...e.request,executionId:t,actionId:e.actionId,parentCallId:e.parentCallId,toolCallId:e.toolCallId,toolName:e.toolName}});else if(e.kind===`tool-response`){let t=i.waits.find(t=>t.request.requestId===e.response.requestId);(!t||t.response||i.effectStarted)&&Y(`Out-of-order tool response`),t.response=e.response}else if(e.kind===`tool-result`){let t=e.result,n=t.metadata?.errorCode===Xe;n&&(t.success||i.dispatched||i.effectStarted||t.metadata?.dispatchStatus!==`not-dispatched`||t.result!==null)&&Y(`Skipped tool result cannot claim a dispatched or applied effect`),(!i.intent&&t.metadata?.errorCode!==`argument_decode_error`&&!n||t.executionId!==r.id||t.toolName!==r.function.name||typeof t.success!=`boolean`||t.success&&(!i.effectStarted||t.result===void 0)||!t.success&&!X(t.error))&&Y(`Invalid tool result linkage or payload`),e.loadedDeferredTools!==void 0&&(!Array.isArray(e.loadedDeferredTools)||e.loadedDeferredTools.some(e=>!X(e)))&&Y(`Invalid tool residency settlement`),i.result=t,i.loadedDeferredTools=e.loadedDeferredTools}else Y(`Unknown action record`)}let h=d?.checkpoint??p;(!f||!h||h.version!==1||h.effectAdmission!==`required`)&&Y(`A supported effect-admission checkpoint is required`),(!Number.isSafeInteger(h.round)||h.round<1||!Number.isFinite(h.contextLimit)||h.contextLimit<=0||!Number.isFinite(h.cumulativeInputTokens)||h.cumulativeInputTokens<0||!Array.isArray(h.messages)||!Array.isArray(h.sameToolInputCounts))&&Y(`Invalid round checkpoint`);let g=new Set;for(let e of h.messages)g.has(e.id)&&Y(`Duplicate checkpoint message identity`),g.add(e.id);for(let e of[...h.messages,f])(!X(e.id)||!(e.timestamp instanceof Date)||!Number.isFinite(e.timestamp.getTime())||(e.role===`assistant`?e.content!==null&&typeof e.content!=`string`:typeof e.content!=`string`)||e.role===`tool`&&!X(e.toolCallId)||![`user`,`assistant`,`system`,`tool`].includes(e.role)||![`complete`,`interrupted`].includes(e.state))&&Y(`Invalid checkpoint message`);let _=new Set;for(let[e,t]of h.sameToolInputCounts)(!X(e)||_.has(e)||!Number.isSafeInteger(t)||t<0)&&Y(`Invalid repeated-input checkpoint`),_.add(e);h.maxSameToolInputs!==void 0&&(!Number.isSafeInteger(h.maxSameToolInputs)||h.maxSameToolInputs<1)&&Y(`Invalid repeated-input limit`),r&&(!Array.isArray(f.toolCalls)||f.toolCalls.length===0)&&Y(`Saved response has no tool calls`),g.clear();for(let e of f.toolCalls??[])(!X(e.id)||g.has(e.id)||e.type!==`function`||!X(e.function?.name)||typeof e.function.arguments!=`string`)&&Y(`Invalid or duplicate saved tool call`),g.add(e.id);d?.options.toolChoice===`none`&&(f.toolCalls?.length??0)>0&&Y(`Saved invocation prohibited tool execution`);let v=[...m.values()].filter(e=>e.effectStarted&&!e.result);if(v.length)throw new L(`EXECUTION_RECOVERY_REQUIRED`,`Tool effects have no durable result; reconcile them before resuming`,v.map(e=>e.actionId));return{checkpoint:h,response:f,actions:m,offeredDeferredTools:d?.options.tools?.filter(e=>e.deferLoading).map(e=>e.name)??[]}}function Ho(e){throw new L(`EXECUTION_RECOVERY_CONFLICT`,e)}function Uo(e,t){return{...structuredClone(e.response),id:`recovery:${t.executionId}:${t.callId}:assistant`,...e.checkpoint.continuation?.kind===`summary`&&{content:e.response.content||`Maximum rounds reached. Partial results available in conversation history.`,toolCalls:[]},metadata:{...e.response.metadata,...so(e.response),executionId:t.executionId,providerCallId:t.callId,round:e.checkpoint.round}}}function Wo(e,t,n,r){return e.role===`assistant`&&t.role===`assistant`&&(e.content??``)===(t.content??``)&&J(e.toolCalls??[])===J(t.toolCalls??[])&&e.metadata?.providerCallId===n&&e.metadata.executionId===r}function Go(e,t,n,r){if(!e.length)return;let i=t.checkpoint.messages;(e.length<i.length||J(e.slice(0,i.length))!==J(i))&&Ho(`Current history differs from the saved runtime checkpoint`);let a=e.slice(i.length);if(!a.length)return;Wo(a[0],Uo(t,n),n.callId,n.executionId)||Ho(`Current assistant does not match the saved response`);let o=t.response.toolCalls??[];a.length>o.length+1&&Ho(`History has advanced beyond the recovered tool batch`);let s=o.slice(0,a.length-1),c=s.map(e=>{let n=t.actions.get(e.id)?.result;return n||Ho(`History contains a tool result without durable settlement`),n}),l=new Ln;for(let e of i)l.addMessage(e);l.addMessage(a[0]),Eo(s,{results:c,errors:[]},l,t.checkpoint.round,r.logger,{contextLimit:t.checkpoint.contextLimit,cumulativeInputTokens:Ko(t)});for(let e=1;e<a.length;e++){let t=l.getMessages()[i.length+e],n=a[e];(n.role!==`tool`||t.role!==`tool`||n.toolCallId!==t.toolCallId||n.name!==t.name||n.content!==t.content)&&Ho(`Existing tool result conflicts with the durable result`)}}function Ko(e){let t=so(e.response).inputTokens??0;return t>0?t:e.checkpoint.cumulativeInputTokens}async function qo(e,t,n,r,i){let a=J(e.getMessages()),o=()=>{(a!==J(e.getMessages())||e.hasPendingAssistant())&&Ho(`History changed during execution recovery`)};o();let s=i?.records??await n.journal.read(n.executionId),c=i?.batch??Bo(s,n.executionId,n.callId);n.signal?.throwIfAborted(),o();let l=structuredClone(e.getMessages());Go(l,c,n,r);let u=await jo(s,n);u.length!==s.length&&(c=Bo(u,n.executionId,n.callId,!1)),n.signal?.throwIfAborted(),o();let d=new Set([...c.checkpoint.continuation?.loadedDeferredTools??[],...c.offeredDeferredTools]);for(let e of c.actions.values())for(let t of e.loadedDeferredTools??[])d.add(t);r.toolExecutionService.restoreLoadedDeferredTools([...d]);let f=new Ln;for(let e of c.checkpoint.messages)f.addMessage(structuredClone(e));let p=c.checkpoint.continuation?.kind===`summary`,m=c.response.toolCalls??[];(p||m.length>0||(c.response.content?.trim().length??0)>0)&&f.addMessage(Uo(c,n));let h={toolsExecuted:[...c.checkpoint.continuation?.toolsExecuted??[]],toolCallOutcomes:[],currentRound:c.checkpoint.round,runningAssistantCount:f.getMessages().filter(e=>e.role===`assistant`).length,lastTrackedAssistantMessage:c.response,cumulativeInputTokens:Ko(c),consecutiveUnknownToolFailureRounds:c.checkpoint.continuation?.consecutiveUnknownToolFailureRounds??0,forcedSummaryInstruction:c.checkpoint.continuation?.forcedSummaryInstruction,sameToolInputCounts:new Map(c.checkpoint.sameToolInputCounts)};r.eventEmitter.prepareOwnerPathBases(t);try{let i=m.length===0;m.length>0&&(i=vo(await Po(m,f,t,n.executionId,c.checkpoint.round,n.callId,void 0,h,r,void 0,n.signal,void 0,c.checkpoint.maxSameToolInputs,void 0,{journal:n.journal,parentCallId:n.callId,recovery:c}),h,r.logger)),o();for(let t of f.getMessages().slice(l.length))e.addMessage(t);let a=structuredClone(e.getMessages()),s=J(a);for(let r=l.length;r<a.length;r++)n.onExecutionEvent?.(`history_mutation`,{executionId:n.executionId,conversationId:t,round:c.checkpoint.round,mutation:`append_message`,index:r,message:a[r]}),(s!==J(e.getMessages())||e.hasPendingAssistant())&&Ho(`History changed while announcing execution recovery`);if(n.signal?.aborted)throw at(`Execution recovery interrupted`,n.signal.reason);return{executionId:n.executionId,callId:n.callId,messages:structuredClone(e.getMessages()),batch:c,state:h,stop:i}}finally{r.eventEmitter.clearToolEventServices(),r.eventEmitter.resetOwnerPathBases()}}async function Jo(e,t,n,r){let{executionId:i,callId:a,messages:o}=await qo(e,t,n,r);return{executionId:i,callId:a,messages:o}}function Z(e){throw new L(`EXECUTION_RECOVERY_INVALID`,e)}function Yo(e){return(!e||e.version!==1||![`round`,`summary`].includes(e.kind)||typeof e.startedAt!=`string`||!Number.isFinite(Date.parse(e.startedAt))||typeof e.turnMessageId!=`string`||e.turnMessageId.length===0||!e.model||typeof e.model.provider!=`string`||typeof e.model.model!=`string`||!e.model.provider||!e.model.model||!e.options||!Number.isSafeInteger(e.options.maxExecutionRounds)||e.options.maxExecutionRounds<0||!Array.isArray(e.toolsExecuted)||e.toolsExecuted.some(e=>typeof e!=`string`)||!Number.isSafeInteger(e.consecutiveUnknownToolFailureRounds)||e.consecutiveUnknownToolFailureRounds<0||!Array.isArray(e.loadedDeferredTools)||e.loadedDeferredTools.some(e=>typeof e!=`string`||!e)||typeof e.structuredOutput!=`boolean`||typeof e.options.allowToolOnlyCompletion!=`boolean`||typeof e.options.withholdHostedTools!=`boolean`)&&Z(`Unsupported runtime continuation checkpoint`),e.structuredOutput&&Z(`Structured-output validators do not yet support execution continuation`),e}async function Xo(e,t,n,r,i,a){let o=J(e.getMessages()),s=await n.journal.read(n.executionId);n.signal?.throwIfAborted();let c=s.findLast(e=>e.kind===`model-request`||e.kind===`model-cache-hit`);if((!c||!(`callId`in c))&&Z(`No recoverable model invocation exists`),c.kind===`model-request`&&!s.some(e=>e.kind===`model-response`&&e.callId===c.callId))throw new L(`EXECUTION_RECOVERY_REQUIRED`,`The latest model invocation has no durable response; reconcile it before resuming`);let l=Bo(s,n.executionId,c.callId,!1),u=Yo(l.checkpoint.continuation);(u.model.provider!==r.defaultModel.provider||u.model.model!==r.defaultModel.model)&&Z(`Active provider and model must match the saved runtime before continuation`);let d=l.checkpoint.messages.find(e=>e.id===u.turnMessageId);(!d||d.role!==`user`||d.metadata?.executionId!==n.executionId)&&Z(`Continuation has no matching original input`),(u.toolSearch??`auto`)!==(r.toolSearch??`auto`)&&Z(`Tool residency policy differs from the saved runtime`),r.responseFormat&&r.responseFormat.type!==`text`&&Z(`Current runtime requires an unsupported structured-output validator`),u.options.maxSameToolInputs!==l.checkpoint.maxSameToolInputs&&Z(`Conflicting repeated-input limits`),u.kind===`summary`&&(l.response.toolCalls?.length??0)>0&&Z(`Terminal summary cannot dispatch tools`);for(let e of l.actions.values())e.result&&e.loadedDeferredTools===void 0&&Z(`Settled action lacks runtime residency state`);let f={...r,defaultModel:structuredClone(u.model),timeout:u.timeout,maxExecutionRounds:u.options.maxExecutionRounds,maxSameToolInputs:u.options.maxSameToolInputs},p=i(f);if(p.currentInfo.provider!==u.model.provider&&Z(`Active provider manager differs from the saved runtime`),o!==J(e.getMessages()))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`History changed while reading the execution journal`);let m=await qo(e,t,{...n,callId:c.callId},a,{batch:l,records:s}),h=Ua(e.getMessages(),f,new Date(u.startedAt),n.executionId,t,{...u.options,signal:n.signal,executionJournal:n.journal,onTextDelta:n.onTextDelta,onThinkingDelta:n.onThinkingDelta,onExecutionEvent:n.onExecutionEvent,traceContext:n.traceContext});a.eventEmitter.prepareOwnerPathBases(t);try{if(await Ro(e,t,n.executionId,h,f,p,m.state,n.signal,a,m.stop||u.kind===`summary`),n.signal?.aborted)throw at(`Execution continuation interrupted`,n.signal.reason);return Da(e,n.executionId,h.startTime,m.state.toolsExecuted,{turnMessageId:u.turnMessageId,allowToolOnlyCompletion:u.options.allowToolOnlyCompletion},m.state.providerFailure)}finally{a.eventEmitter.clearToolEventServices(),a.eventEmitter.resetOwnerPathBases()}}async function*Zo(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 Qo(e,t,n){return{executionId:e,...t===void 0?{}:{driverId:t},...n===void 0?{}:{turnSource:n}}}var $o=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new pa(t),this.aiProviders=e,this.tools=t,this.conversationHistory=n,this.plugins=[],this.logger=O(`ExecutionService`),!r)throw Error(`[EXECUTION] EventService is required`);this.eventEmitter=new Ca(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`)}resume(e,t,n){return Xo(this.conversationHistory.getConversationStore(e),e,t,n,e=>La(this.aiProviders,this.tools,e),{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService})}resumeToolCalls(e,t){return Jo(this.conversationHistory.getConversationStore(e),e,t,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter})}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=Va(),a=new Date,o=Ha(r,`execute`),s=Ua(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=La(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=za(this.conversationHistory,o,t,n,i),u,d={toolsExecuted:[],toolCallOutcomes:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};try{let t=l.getMessages().length;l.addUserMessage(e,Qo(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 G(this.plugins,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},this.logger);let p={executionId:i,conversationId:o};f&&await G(this.plugins,`onMessageAdded`,{message:f,executionContext:p},this.logger);for(let e of[`beforeExecution`,`beforeConversation`])await G(this.plugins,e,{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 Ro(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),zo(e,l,i,a,d,o,u,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){if(R(e))throw e;return it(e,r?.signal)?{...Da(l,i,a,d.toolsExecuted,{turnMessageId:u,interrupted:!0}),interrupted:!0}:(await Ba(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*Zo(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 es(e){let t=new Pi;if(e.aiProviders)for(let n of e.aiProviders)t.addProvider(n.name,n,{ownership:e.providerOwnership&&Object.hasOwn(e.providerOwnership,n.name)?e.providerOwnership[n.name]:`owned`});return e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),t}async function ts(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 ConversationAgent 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 nt&&c&&e.setEventService(c),r.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Nr(e,t,n)},e.provenance),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new Li(new Ii({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new Fi));let d=new $o(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(`ConversationAgent initialization completed successfully with independent managers`),d}async function ns(e){try{let t=await ts(e.ctx);e.setExecutionService(t),e.setFullyInitialized(!0)}catch(t){throw e.ctx.logger.error(`ConversationAgent initialization failed`,{error:t instanceof Error?t.message:String(t)}),t}}function rs(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 is(e){e.logger.debug(`Destroying ConversationAgent 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 ConversationAgent 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(`ConversationAgent instance destroyed successfully`,{name:e.name}):e.logger.warn(`ConversationAgent instance destroyed with cleanup failures`,{name:e.name,failureCount:t.length}),{errors:t}}var as=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(),os(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 os(e,t){let n=e.reason;return it(n)&&n.name===`AbortError`?n:at(t?`Run aborted while queued behind another run on this instance`:`Run aborted before it started`,n)}function ss(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??ls,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function cs(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new n.b(`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.b(`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.b(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||ls(),name:e.name||`Unnamed Agent`,aiProviders:e.aiProviders,defaultModel:{provider: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 ls(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function us(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var ds=class{templates=new Map;logger;constructor(){this.logger=O(`AgentTemplates`),this.logger.info(`AgentTemplates initialized`)}registerTemplate(e){if(!e.id)throw Error(`Template must have an ID`);this.templates.has(e.id)&&this.logger.warn(`Template "${e.id}" is already registered, overriding`),this.templates.set(e.id,e),this.logger.info(`Template "${e.id}" registered successfully`,{templateId:e.id,category:e.category,tags:e.tags})}unregisterTemplate(e){let t=this.templates.delete(e);return t?this.logger.info(`Template "${e}" unregistered`):this.logger.warn(`Attempted to unregister non-existent template "${e}"`),t}getTemplates(){return Array.from(this.templates.values())}getTemplate(e){return this.templates.get(e)}findTemplates(e){return this.getTemplates().filter(t=>!(e.category&&t.category!==e.category||e.tags&&e.tags.length>0&&!e.tags.some(e=>t.tags?.includes(e))||e.provider&&t.config.defaultModel?.provider!==e.provider||e.model&&t.config.defaultModel?.model!==e.model))}applyTemplate(e,t={}){let n=[],r=!1,i={...e.config},a={...i,...t},o=e=>{e in t&&i[e]!==t[e]&&(r=!0,i[e]!==void 0&&n.push(`Override: ${e} changed from "${String(i[e])}" to "${String(t[e])}"`))};t.name!==void 0&&o(`name`),t.systemMessage!==void 0&&o(`systemMessage`);let s=a;return this.logger.debug(`Template applied`,{templateId:e.id,overridesCount:Object.keys(t).length,warningsCount:n.length,modified:r}),{config:s,template:e,warnings:n,modified:r}}hasTemplate(e){return this.templates.has(e)}getTemplateCount(){return this.templates.size}clearAll(){this.templates.clear(),this.logger.info(`All templates cleared`)}getStats(){let e=this.getTemplates(),t=[...new Set(e.map(e=>e.category).filter(e=>typeof e==`string`&&e.length>0))],n=[...new Set(e.flatMap(e=>e.tags||[]))],r=[...new Set(e.map(e=>e.config.defaultModel?.provider).filter(e=>typeof e==`string`&&e.length>0))],i=[...new Set(e.map(e=>e.config.defaultModel?.model).filter(e=>typeof e==`string`&&e.length>0))];return{totalTemplates:e.length,categories:t,tags:n,providers:r,models:i}}};function fs(e){let t=e,n=typeof t.initialize==`function`?t.initialize:void 0,r=typeof t.cleanup==`function`?t.cleanup:void 0;if(n!==void 0||r!==void 0)return{...n?{initialize:()=>n.call(e)}:{},...r?{cleanup:()=>r.call(e)}:{}}}function ps(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function ms(e){let t=[];for(let n of e){try{await n.run()}catch(e){let r=[];for(let e of t.reverse())if(e.undo!==void 0)try{await e.undo()}catch(t){r.push({step:e.name,error:t})}throw hs(e,n.name,r)}t.push(n)}}function hs(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var gs=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new ds,this.logger=O(`AgentFactory`),this.options=ss(e),this.activeAgents=new Map,this.creationStats={totalCreated:0,activeCount:0,fromTemplates:0,customConfigured:0,templateUsageRatio:0},this.lifecycleEvents=t,this.logger.debug(`AgentFactory initialized`,{maxConcurrentAgents:this.options.maxConcurrentAgents,strictValidation:this.options.strictValidation,hasDefaultModel:!!this.options.defaultModel,hasDefaultProvider:!!this.options.defaultProvider,hasLifecycleEvents:this.lifecycleEvents!==null})}async initialize(){this.initialized||(this.logger.debug(`Initializing AgentFactory`),this.initialized=!0,this.logger.debug(`AgentFactory initialization completed`))}async createAgent(e,t,r=!1){let i,a=this.admit();try{i=cs(t,this.options);let o=i;if(this.options.strictValidation){let e=ct(i);if(!e.isValid)throw new n.j(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let s;if(await ms([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(o)},{name:`construct`,run:()=>{s=new e(o)}},{name:`initialize`,run:()=>s?fs(s)?.initialize?.():void 0,undo:()=>s?fs(s)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!s)throw new n.b(`Agent was not constructed`);this.activeAgents.set(a,s),us(this.creationStats,r)},undo:()=>{this.activeAgents.delete(a),this.creationStats.activeCount--,this.creationStats.totalCreated--,r?this.creationStats.fromTemplates--:this.creationStats.customConfigured--}},{name:`afterCreate`,run:()=>s?this.lifecycleEvents.afterCreate?.(s,o):void 0}]),this.pendingAgents.delete(a),!s)throw new n.b(`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.b(`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.b(`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.b(`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 fs(t)?.cleanup?.(),this.activeAgents.delete(e),this.creationStats.activeCount--,this.lifecycleEvents.onDestroy&&await this.lifecycleEvents.onDestroy(e),this.logger.info(`Agent destroyed`,{agentId:e}),!0}catch(t){throw this.logger.error(`Error destroying agent`,{agentId:e,error:t instanceof Error?t.message:String(t)}),t}}getCreationStats(){return{...this.creationStats}}getActiveAgents(){return new Map(this.activeAgents)}validateConfiguration(e){return ct(e)}};function _s(e,t,r){if(!e.name||e.name.trim()===``)throw new n.b(`Module name is required`);if(!e.version||e.version.trim()===``)throw new n.b(`Module version is required`);let i=e.getModuleType(),a=t.validateTypeDescriptor(i);if(!a.valid)throw new n.b(`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 vs(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.b(`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 ys(e,t){let n=t.get(e);if(!n)return[];let r=n.getModuleType().type,i=[];for(let[n,a]of t.entries())n!==e&&a.getModuleType().dependencies?.includes(r)&&i.push(n);return i}function bs(e,t){let n={},r=0,i=0,a=0,o=0,s=0,c=0;for(let t of e.values()){let e=t.getModuleType().type;n[e]=(n[e]||0)+1,t.isInitialized()&&r++,t.isEnabled()&&i++}for(let e of t.values())a+=e.totalExecutions,o+=e.successfulExecutions,s+=e.failedExecutions,c+=e.totalExecutionTime;return{totalModules:e.size,initializedModules:r,enabledModules:i,modulesByType:n,totalExecutions:a,totalSuccessfulExecutions:o,totalFailedExecutions:s,averageExecutionTime:a>0?c/a:0}}function xs(){return[{type:`storage`,category:`storage`,layer:`infrastructure`,capabilities:[`data-persistence`,`data-retrieval`]},{type:`memory-storage`,category:`storage`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`in-memory-storage`,`fast-access`]},{type:`file-storage`,category:`storage`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`persistent-storage`,`file-system-access`]},{type:`text-processing`,category:`processing`,layer:`application`,capabilities:[`text-analysis`,`content-transformation`]},{type:`file-processing`,category:`processing`,layer:`application`,dependencies:[`storage`],capabilities:[`file-parsing`,`content-extraction`]},{type:`api-integration`,category:`integration`,layer:`application`,capabilities:[`external-api-access`,`data-synchronization`]},{type:`database-integration`,category:`integration`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`database-access`,`query-execution`]},{type:`rag`,category:`capability`,layer:`domain`,dependencies:[`storage`,`text-processing`],capabilities:[`document-search`,`context-retrieval`,`semantic-search`]},{type:`speech-processing`,category:`capability`,layer:`domain`,capabilities:[`speech-to-text`,`text-to-speech`,`audio-processing`]},{type:`image-analysis`,category:`capability`,layer:`domain`,capabilities:[`image-recognition`,`visual-analysis`,`content-extraction`]}]}function Ss(e,t){let n=[],r=[];if((!e.type||e.type.trim()===``)&&n.push(`Module type is required and cannot be empty`),e.category||n.push(`Module category is required`),e.layer||n.push(`Module layer is required`),e.type&&!/^[a-zA-Z][a-zA-Z0-9-_]*$/.test(e.type)&&n.push(`Module type must start with a letter and contain only letters, numbers, hyphens, and underscores`),e.dependencies){for(let t of e.dependencies)(!t||t.trim()===``)&&n.push(`Dependencies cannot be empty`);e.dependencies.includes(e.type)&&n.push(`Module cannot depend on itself`)}if(e.capabilities)for(let t of e.capabilities)(!t||t.trim()===``)&&n.push(`Capabilities cannot be empty`);if(e.dependencies){let n=[`infrastructure`,`core`,`application`,`domain`,`presentation`],i=n.indexOf(e.layer);for(let a of e.dependencies){let o=t(a);o&&n.indexOf(o.layer)>i&&r.push(`Module '${e.type}' (${e.layer}) depends on '${a}' (${o.layer}) which is in a higher layer`)}}return{valid:n.length===0,errors:n,warnings:r}}function Cs(e,t,n){let r=new Set,i=new Set,a=[],o=[],s=[];for(let r of e){let e=t(r);if(!e){s.push(r);continue}if(e.dependencies)for(let t of e.dependencies)!n(t)&&!s.includes(t)&&s.push(t)}let c=(s,l=[])=>{if(i.has(s)){let e=l.indexOf(s);o.push(l.slice(e).concat([s]));return}if(r.has(s))return;let u=t(s);if(!u)return;i.add(s);let d=[...l,s];if(u.dependencies)for(let t of u.dependencies)(e.includes(t)||n(t))&&c(t,d);i.delete(s),r.add(s),a.push(s)};for(let t of e)r.has(t)||c(t);return{resolved:s.length===0&&o.length===0,order:a,circularDependencies:o,missingDependencies:s}}function ws(e,t){let n=[],r=[],i=new Map;for(let n of e){let e=t(n);e&&(i.has(e.layer)||i.set(e.layer,[]),i.get(e.layer).push(n))}let a=new Map;for(let n of e){let e=t(n);if(e?.capabilities)for(let t of e.capabilities)a.has(t)||a.set(t,[]),a.get(t).push(n)}for(let[e,t]of Array.from(a.entries()))if(t.length>1)for(let r=0;r<t.length;r++)for(let i=r+1;i<t.length;i++){let a=t[r],o=t[i];a&&o&&n.push({module1:a,module2:o,reason:`Both modules provide capability '${e}'`})}return n.length>0&&(r.push(`Consider using only one module per capability`),r.push(`Check if modules can be configured to avoid conflicts`)),!i.has(`infrastructure`)&&e.length>1&&r.push(`Consider adding infrastructure modules for better foundation`),{compatible:n.length===0,conflicts:n,suggestions:r}}function Ts(e){let t={core:0,storage:0,processing:0,integration:0,interface:0,capability:0},n={infrastructure:0,core:0,application:0,domain:0,presentation:0},r=0,i=0;for(let a of e.values())t[a.category]++,n[a.layer]++,a.dependencies&&a.dependencies.length>0&&r++,a.capabilities&&a.capabilities.length>0&&i++;return{totalTypes:e.size,typesByCategory:t,typesByLayer:n,typesWithDependencies:r,typesWithCapabilities:i}}var Es=class{registeredTypes=new Map;logger;constructor(){this.logger=O(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new n.b(`Invalid module type descriptor: ${t.errors.join(`, `)}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let t=this.registeredTypes.get(e.type);this.logger.warn(`Overriding existing module type`,{type:e.type,previousCategory:t?.category||`unknown`,newCategory:e.category})}this.registeredTypes.set(e.type,e),this.logger.info(`Module type registered`,{type:e.type,category:e.category,layer:e.layer,dependencies:e.dependencies?.length||0,capabilities:e.capabilities?.length||0})}unregisterType(e){if(!this.registeredTypes.has(e))return!1;let t=this.findDependentTypes(e);if(t.length>0)throw new n.b(`Cannot unregister module type '${e}' - it is required by: ${t.join(`, `)}`,{type:e,dependentTypes:t});return this.registeredTypes.delete(e),this.logger.info(`Module type unregistered`,{type:e}),!0}getType(e){return this.registeredTypes.get(e)}getAllTypes(){return Array.from(this.registeredTypes.values())}getTypesByCategory(e){return Array.from(this.registeredTypes.values()).filter(t=>t.category===e)}getTypesByLayer(e){return Array.from(this.registeredTypes.values()).filter(t=>t.layer===e)}hasType(e){return this.registeredTypes.has(e)}validateTypeDescriptor(e){return Ss(e,e=>this.getType(e))}resolveDependencies(e){return Cs(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return ws(e,e=>this.getType(e))}findDependentTypes(e){let t=[];for(let[n,r]of this.registeredTypes)r.dependencies?.includes(e)&&t.push(n);return t}registerBuiltinTypes(){for(let e of xs())this.registerType(e);this.logger.info(`Built-in module types registered`,{totalTypes:this.registeredTypes.size})}clearAllTypes(){this.registeredTypes.clear(),this.logger.info(`All module types cleared`)}getStats(){return Ts(this.registeredTypes)}};const Ds={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var Os=class{modules=new Map;moduleOptions=new Map;moduleStatuses=new Map;moduleStats=new Map;registrationOrder=[];initializationOrder=[];typeRegistry;eventEmitter;logger;isDisposing=!1;constructor(e,t){this.eventEmitter=e,this.typeRegistry=t??new Es,this.logger=O(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new n.b(`Cannot register modules during disposal`);if(_s(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new n.b(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await vs(e,this.typeRegistry,this.modules,this.logger),this.modules.set(e.name,e),this.moduleOptions.set(e.name,t.initOptions||{}),this.registrationOrder.push(e.name);let 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(Ds.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=ys(e,this.modules);if(r.length>0)throw new n.b(`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(Ds.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let r=this.modules.get(e);if(!r)throw new n.b(`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.b(`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.b(`Module '${e}' not found`);if(!r.isInitialized())throw new n.b(`Module '${e}' is not initialized`);if(!r.isEnabled())throw new n.b(`Module '${e}' is disabled`);let i=this.moduleStats.get(e),a=Date.now();try{if(!r.execute)throw new n.b(`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 bs(this.modules,this.moduleStats)}},ks=class extends Mr{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=li(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=O(`ConversationAgent`,t?{level:t}:{}),this.startTime=Date.now(),Pr(e),this.config={...e,aiProviders:[...e.aiProviders],...e.providerOwnership?{providerOwnership:{...e.providerOwnership}}:{}},this.aiProviders=es(e),this.tools=ui(()=>this.config),this.agentFactory=new gs,this.conversationHistory=new Rn,this.eventEmitter=vi(),this.moduleRegistry=new Os(this.eventEmitter),this.eventService=e.eventService||dr,this.agentEventService=gr(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:yi(this.conversationId,this.config.executionContext)});let n=pi({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,gi(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=[...yi(this.conversationId,this.config.executionContext),{type:`tool`,id:n.executionId??e}];return this.executionService.invokeRuntimeTool(e,t,{...n,baseEventService:this.eventService,eventService:gr(this.eventService,{ownerPath:r,ownerType:`tool`,ownerId:n.executionId??e}),ownerPath:r,ownerType:`tool`,ownerId:n.executionId})}async resume(e){let t={...e,toolResponses:structuredClone(e.toolResponses)};return this.assertNotDestroyed(),this.runQueue.run(t.signal,async()=>{await this.ensureFullyInitialized();let e=await this.executionService.resume(this.conversationId,t,this.config);if(!e.success)throw e.error??Error(`Execution continuation failed`);return e.response})}async resumeToolCalls(e){let t={...e,toolResponses:structuredClone(e.toolResponses)};return this.assertNotDestroyed(),this.runQueue.run(t.signal,async()=>(await this.ensureFullyInitialized(),this.executionService.resumeToolCalls(this.conversationId,t)))}async run(e,t={}){return this.assertNotDestroyed(),this.runQueue.run(t.signal,async()=>{await this.ensureFullyInitialized();try{if(t.output){let n=cn(t.output);return await Ti(this.executionDeps(),e,t,n)}return await xi(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=cn(t.output);return yield*Ei(this.executionDeps(),e,t,n)}return yield*Si(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new as;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 Oi(this.conversationHistory,this.conversationId)}getFullHistory(){return ki(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Ai(this.conversationHistory,this.conversationId,e)}clearHistory(){ji(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){Mi(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){Ni(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,aiProviders:[...this.config.aiProviders],...this.config.providerOwnership?{providerOwnership:{...this.config.providerOwnership}}:{}}}swapDefaultProvider(e,t,n={}){this.aiProviders.addProvider(e.name,e,n),this.config={...this.config,aiProviders:Object.values(this.aiProviders.getProviders()),providerOwnership:{...this.config.providerOwnership,[e.name]:n.ownership??`owned`}},this.configManager.setModel({provider:e.name,model:t})}getStats(){return rs({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,is({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 ns({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){_i(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const As=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,js=Symbol.for(`@robota-sdk/tool-result-admitted`);var Ms=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function Ns(e){return Object.getOwnPropertyDescriptor(e,js)?.value===!0}function Ps(e){return Object.defineProperty({...e},js,{value:!0})}function Fs(e){if(e.parts?.length&&e.parts.every(e=>e.type===`text`)){let t=e.parts.map(e=>e.type===`text`?e.text:``).join(`
9
+ `);if(e.success&&e.data===t||!e.success&&e.data===void 0&&e.error===t)return t}if(e.parts?.length)return JSON.stringify({success:e.success,data:e.data,error:e.error,parts:e.parts});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 Is(e){return Number.isSafeInteger(e)&&e>0}function Ls(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!Is(n)||!Is(r)||!Is(i)||n>=r||r>i||i>5e5)throw new Ms(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!Is(t))throw new Ms(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function Rs(e,t,n={},r){let{warningChars:i,hardChars:a}=Ls(n,r),o=Fs(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new Ms(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new Ms(`spill-write-failed`)}if(!As.test(e)||e.length>a)throw new Ms(`invalid-reference`);let r=t.view?{view:t.view}:{};return Ps(t.success?{success:!0,data:e,...r}:{success:!1,error:`Tool failure details: ${e}`,...r})}return Ps(t)}var zs=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 Bs={STARTED:`started`,STEP_STARTED:`step_started`,STEP_COMPLETED:`step_completed`,COMPLETED:`completed`,FAILED:`failed`};function Vs(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function Hs(e){return typeof e==`string`?e.length:0}var Us=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:A.EXECUTION_START,completeEvent:A.EXECUTION_COMPLETE,errorEvent:A.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Hs(n[0]),conversationId:e.conversationId,options:Vs(n[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod(`runStream`,{startEvent:A.EXECUTION_START,completeEvent:A.EXECUTION_COMPLETE,errorEvent:A.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Hs(n[0]),conversationId:e.conversationId,streaming:!0,options:Vs(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:M.CALL_START,completeEvent:M.CALL_COMPLETE,errorEvent:M.CALL_ERROR,extractMetadata:(e,t,n)=>({toolName:Vs(e.schema)?.name||e.constructor.name,parameters:n[0],parametersCount:Vs(n[0])?Object.keys(Vs(n[0])||{}).length:0,context:n[1]}),extractResult:e=>({result:typeof Vs(e)?.data==`string`?Vs(e)?.data||``:JSON.stringify(Vs(e)?.data),success:Vs(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 Ws(e,t){let n=new Us(t);return n.configureStandardMethods(),n.wrap(e)}function Gs(e,t,n){return function(r){return Ws(r,{eventService:e,sourceType:t,sourceId:n})}}const Ks={safe:`plan`,moderate:`default`,full:`acceptEdits`};function qs(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===`
10
+ `||(r===`<`||r===`>`)&&i===`(`)return!0;if(r===`&`){let t=e[n-1];if(t!==`>`&&t!==`<`&&i!==`>`)return!0}}return!1}function Js(e){let t={segments:[],current:``,quote:void 0,substitutionDepth:0};for(let n=0;n<e.length;n+=1){let r=Xs(t,e,n);if(r!==void 0){n=r;continue}let i=Zs(t,e,n);if(i!==void 0){n=i;continue}if(Qs(t,e[n]))continue;let a=$s(t,e,n);if(a!==void 0){n=a;continue}t.current+=e[n]}return Ys(t),t.segments}function Ys(e){let t=e.current.trim();t!==``&&e.segments.push(t),e.current=``}function Xs(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 Zs(e,t,n){let r=t[n];if(r==="`")return Ys(e),n;if(r===`$`&&t[n+1]===`(`)return Ys(e),e.substitutionDepth+=1,n+1}function Qs(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 $s(e,t,n){let r=t[n];if((r===`<`||r===`>`)&&t[n+1]===`(`)return Ys(e),e.substitutionDepth+=1,n+1;if(r===`)`&&e.substitutionDepth>0)return Ys(e),--e.substitutionDepth,n;if(r===`;`||r===`|`||r===`
11
+ `||r===`&`&&ec(t,n))return Ys(e),n}function ec(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const tc=/[.+^${}()|[\]\\]/g;function nc(e,t){let n,r=``;for(let i of e){if(i===n){n=void 0;continue}if(n===void 0&&(i===`'`||i===`"`)){n=i;continue}if(n!==void 0&&(i===` `||i===` `))return;if(n===void 0&&(i===` `||i===` `)){r.endsWith(` `)||(r+=` `);continue}if(/[^\x20-\x7e]|[$`\\!%~<>()[\]{}?#]/u.test(i)||!t&&i===`*`)return;r+=i}return n===void 0?r:void 0}function rc(e){let t=e.replace(tc,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function ic(e,t,n){let r=rc(e);if(n===`deny`){if(r.test(t))return`match`;let n=Js(t);if(n.some(e=>r.test(e)))return`match`;let i=nc(e,!0);if(i===void 0)return`unevaluable`;let a=rc(i);for(let e of n){let t=nc(e,!1);if(t!==void 0&&a.test(t))return`match`}return`unevaluable`}return r.test(t)?e.includes(`*`)&&qs(t)?`no-match`:`match`:`no-match`}function ac(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(tc,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function oc(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function sc(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 cc(e,t){let n=sc(e),r=sc(t);return oc(n)&&!oc(r)?`unevaluable`:ac(n).test(r)?`match`:`no-match`}const lc=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,uc=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),dc={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function fc(e){return e.replace(/\.$/,``).toLowerCase()}function pc(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function mc(e,t=!1){let n=fc(e).replace(/\*\*(?:\.\*\*)+/g,`**`).split(`.`),r=[],i=`[^.]+(?:\\.[^.]+)*`;for(let[e,a]of n.entries()){let o=e===0,s=e===n.length-1;if(a===`**`){o&&s?r.push(i):s?r.push(`(?:\\.${i})?`):r.push(`${o?``:`\\.`}(?:${i}\\.)?`);continue}let c=!o&&n[e-1]===`**`,l=o||c?``:`\\.`;if(a===`*`)r.push(`${l}${t&&!o?`[^.]*`:i}`);else if(a.includes(`**`))return null;else if(a.includes(`*`))r.push(`${l}${a.replace(tc,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=pc(a);if(e===null)return null;r.push(`${l}${e.replace(tc,`\\$&`)}`)}}return RegExp(`^${r.join(``)}$`)}function hc(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function gc(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!uc.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function _c(e,t,n=!1){if(e.includes(`*`)){let r=mc(e,n);return r===null?`unevaluable`:r.test(t)?`match`:`no-match`}let r;try{r=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return fc(r)===t?`match`:`no-match`}function vc(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?dc[n]:t.port)}function yc(e,t){let n=hc(t),r=hc(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:ac(r).test(n)?`match`:`no-match`}function bc(e,t){let n=lc.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=gc(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=_c(i,fc(s.hostname));return l===`match`?vc(a,s,c)?o===void 0?`match`:yc(o,s.pathname):`no-match`:l}function xc(e,t){if(!e.startsWith(`domain:`))return bc(e,t);let n=/^domain:([^/\\:?#@[\]\s]+)$/.exec(e);if(n===null)return`unevaluable`;let r=fc(n[1]);if(r.includes(`**`)||r.split(`.`).some(e=>e===``))return`unevaluable`;let i=gc(t);return i===null||i.protocol!==`http:`&&i.protocol!==`https:`?`unevaluable`:_c(r,fc(i.hostname),!0)}const Sc={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`}},Cc={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},wc=[`.git`,`.claude`,`.agents`],Tc=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function Ec(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function Dc(e){let t=[];for(let n of Ec(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function Oc(e,t={}){let n=t.pathProtection,r=jc.exec(e),i=r!==null&&t.homeDirectory!==void 0?`${t.homeDirectory}/${r[1]??``}`:e,a=i.startsWith(`/`)?kc(i):t.cwd===void 0?void 0:kc(`${t.cwd}/${i}`);if(a!==void 0&&n?.protectedPaths.some(e=>{let t=kc(e);return a===t||a.startsWith(`${t}/`)}))return!0;let o=Dc(i),s=o[o.length-1];if(s!==void 0&&Tc.includes(s))return!0;let c=[...wc,...n?.protectedDirectoryNames??[]],l=[`.claude/worktrees`,...n?.writableWorktreeContainers??[]].map(Dc);for(let e=0;e<o.length;e+=1){if(!c.includes(o[e]))continue;let t=l.find(t=>t.length>0&&t.every((t,n)=>o[e+n]===t)&&o[e+t.length]!==void 0);if(t!==void 0){e+=t.length;continue}return!0}return!1}function kc(e){let t=[];for(let n of Ec(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function Ac(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const jc=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function Mc(e,t){let n=Ac(e),r=jc.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=kc(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=kc(n);else{if(t.cwd===void 0)return!1;i=kc(`${t.cwd}/${n}`)}if(Ec(i).length<=1||t.homeDirectory!==void 0&&i===kc(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=kc(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const Nc=new Set([`rm`,`rmdir`]),Pc=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 Fc(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=Pc.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 Ic(e,t){return Js(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=Fc(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!Nc.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:Mc(e,t))})}const Lc=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),Rc=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),zc={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},Bc=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,Vc=[`--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 Hc(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return Vc.some(e=>e.startsWith(t))}function Uc(e,t){if(tl(t).some(e=>Bc.test(e.text)||Hc(e.text)))return!0;if(e===`find`)return tl(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=zc[e];return n!==void 0&&tl(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const Wc=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),Gc=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),Kc=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),qc=new Set([`/dev/null`]),Jc=/[A-Za-z0-9_./:=@+,*?[\]~-]/,Yc=new Set([`$`,"`",`\\`,`!`]),Xc=new Set([`*`,`?`,`[`]);function Zc(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||Qc(e)}function Qc(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 $c(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 el(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!qc.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||Zc(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:Yc.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(!Jc.test(l)){s=!0;break}Xc.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 tl(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function nl(e){return e.every(e=>!e.expands&&!Rc.has(e.text))}function rl(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>Gc.has(e.text));return t.every(e=>Gc.has(e.text)||Kc.has(e.text))&&(n||t.length===e.length)}function il(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!Wc.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`?rl(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function al(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=>Zc(e.text))||Uc(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:Lc.has(t.text)?!0:t.text===`find`?nl(n):t.text===`git`&&il(n)}const ol=new Set([`echo`,`which`,`git`]);function sl(e,t){let n;for(let[r,...i]of e)if(!ol.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 cl(e,t={}){if(t.otherDirectory===!0||e.length>1e4||$c(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=Js(e);if(n.length===0)return!1;let r=n.map(el);if(r.some(e=>e.refused||!al(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:sl(r.map(e=>e.words),t.resolveInWorkspace)}function ll(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 ul(e,t){Q.set(e,{...Q.get(e),...t})}function dl(){Q.clear()}function fl(e){return Q.get(e)??{}}function pl(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=rc(e);return n.some(e=>r.test(e))}function ml(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 hl(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`:rc(e.value).test(String(n))?`match`:`no-match`}function gl(e,t){return t.some(t=>{let n=ll(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&pl(n.toolName,e)})}function _l(e){return Q.get(e)?.argument?.key}function vl(e,t){let n=_l(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function yl(e,t,n,r=`allow`){return n.some(n=>xl(e,t,n,r)===`match`)}function bl(e,t,n){return n.some(n=>xl(e,t,n,`deny`)===`unevaluable`)}function xl(e,t,n,r){let i=ll(n);if(!pl(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=ml(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?hl(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=vl(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return e===`WebFetch`?xc(i.argPattern,s):bc(i.argPattern,s);case`path`:return cc(i.argPattern,s);case`command`:return ic(i.argPattern,s,r);case`text`:return rc(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function Sl(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`?Ic(a,n):i.kind===`path`&&r?.riskClass===`modify`&&Oc(a,n):!1}function Cl(e,t,n,r){return yl(e,t,n,`deny`)||bl(e,t,n)||Sl(e,t,r)}function wl(e,t,n={},r={}){return bl(e,t,n.deny??[])||Cl(e,t,n.ask??[],r)}const Tl=[`workingDirectory`,`cwd`];function El(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`&&cl(i,{otherDirectory:Tl.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function Dl(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=El(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return yl(e,t,o,`deny`)||i.ceiling!==void 0&&!yl(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0||Q.get(e)?.notInPeerTurn===!0&&i.peerTurn===!0?`deny`:bl(e,t,o)?n===`plan`?`deny`:`approve`:Cl(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||yl(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?Cc[n]:Sc[n][c]}function Ol(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 kl=/^[A-Za-z_]\w*:(?!\/\/)/;function Al(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function jl(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}=ll(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!Al(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`&&kl.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=ml(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=fl(r);if(!(o.parameters===void 0&&kl.test(i)&&ml(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`&&(r===`WebFetch`?xc:bc)(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path]${r===`WebFetch`?` or domain:hostname`:``} that "${r}" is matched by`}}function Ml(e,t=`deny`){let n=[];for(let r of e){let e=jl(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function Nl(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=ll(n.trim());if(r===void 0||e.includes(`*`))continue;let i=fl(e),a=ml(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&kl.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=fl(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 Pl(e){return(e??[]).map(e=>`${e}(*)`)}function Fl(e,t){let n=Pl(t.allowedTools),r=Ml(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,...Pl(t.deniedTools)])]}}const Il=[`Bash`,`Shell`,`BackgroundProcess`],Ll=[`Agent`],Rl=[...Il,...Ll,`ExecuteCommand`,`Computer`],zl=`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(`.`),Bl=[`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(` `)),Vl=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function Hl(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function Ul(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=Hl(e[0]);if(zl.some(t=>n(t,r,e.length===1)))return!0;for(let i of Bl){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(`-`)||Vl.has(o[0]));)o=o.slice(1);return o.length===0||Ul(o,t)}return!1}function Wl(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return Ul(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function Gl(e){let{toolName:t,argPattern:n}=ll(e),r=e=>e.some(e=>pl(t,e));return r(Ll)?!0:t.includes(`*`)?r(Rl):Rl.includes(t)||fl(t).riskClass===`execute`?n===void 0||n.trim()===`*`||Il.includes(t)&&Wl(n):!1}function Kl(e){return e.filter(e=>!Gl(e))}const ql=1e6,Jl={"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}},Yl=[{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:/gemini-2/i,price:{inputPerMillion:.1,outputPerMillion:.4}},{pattern:/gemini-1/i,price:{inputPerMillion:1.25,outputPerMillion:5}}];function Xl(e){let t=Object.hasOwn(Jl,e)?Jl[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of Yl)if(t.test(e))return n}function Zl(e,t,n){let r=Xl(e);if(r)return t/ql*r.inputPerMillion+n/ql*r.outputPerMillion}function Ql(e){let t=Xl(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function $l(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 eu(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 tu(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([Promise.resolve().then(()=>require("./command-executor-wBgBdWXr.cjs")).then(e=>e.n),Promise.resolve().then(()=>require("./http-executor-CeAAZotH.cjs")).then(e=>e.n)]);return[new e,new t]}async function nu(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 tu(),d=new Map;for(let e of u)d.set(e.type,e);let f=[],p=eu(r),m=-1,h,g;for(let e of l){if(!$l(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(`
12
12
  `),...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(`
13
13
  `),...u.permissionDecision===`deny`&&{permissionDecision:`deny`},...c()};if(u.permissionDecision!==void 0&&l.source===`command`){let e=n.n[u.permissionDecision];e>m?(m=e,h=u.permissionDecision,g=u.updatedInput):e===m&&u.updatedInput!==void 0&&(g=u.updatedInput)}}}let _={blocked:!1,stdout:f.join(`
14
- `)};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 $l=class extends Error{guardrailName;guardrailReason;constructor(e,t){super(t),this.guardrailName=e,this.guardrailReason=t,this.name=`GuardrailBlock`}},eu=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 $l(e,`Guardrail "${e}" errored: ${t instanceof Error?t.message:String(t)}`)}if(!r.pass)throw new $l(e,r.reason??`Guardrail "${e}" blocked the turn`)}))}catch(e){if(e instanceof $l)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 tu(e,t){return{posture:`advisory`,enforcementReachable:!1,rationale:`Awaited at ${e} but only ${t} is read; \`blocked\` is never consulted.`}}function nu(e){for(let t of Object.values(e))Object.freeze(t);return Object.freeze(e)}const ru=nu({PreToolUse:{posture:`enforcing`,enforcementReachable:!0,rationale:"The tool-execution gate. `runPreToolGate` 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:tu(`session-lifecycle.ts`,`nothing`),PreCompact:tu(`compaction-orchestrator.ts`,`nothing`),UserPromptSubmit:tu(`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 iu(e){return ru[e].posture===`enforcing`}function au(e){if(e.type===`resource_link`)return`Resource reference (not fetched): ${JSON.stringify(e)}`;if(e.type===`resource_embedded`){let t=`${JSON.stringify(e.uri)}${e.mimeType?` (${e.mimeType})`:``}`;return e.text===void 0?`Embedded binary resource ${t}; binary content retained but not transmitted by this adapter.`:`Embedded resource ${t}:\n${e.text}`}if(e.type===`audio_inline`)return`Audio observation (${e.mimeType}); this adapter does not transmit audio payloads.`}exports.AGENT_EVENTS=A,exports.AGENT_EVENT_PREFIX=Ge,exports.AbstractAIProvider=Be,exports.AbstractAgent=de,exports.AbstractEventService=cr,exports.AbstractExecutor=tt,exports.AbstractManager=fe,exports.AbstractPlugin=et,exports.AbstractTool=nt,exports.AgentFactory=ms,exports.AgentRuntimeError=n.g,exports.AgentTemplates=ls,exports.AuthenticationError=n._,exports.CONFIRM_NO=`no`,exports.CONFIRM_YES=`yes`,exports.CONTEXT_ESTIMATE_CHARS_PER_TOKEN=4,exports.CacheIntegrityError=n.v,exports.CircuitBreakerOpenError=n.y,exports.ConfigurationError=n.b,exports.ConsoleLogger=Ne,exports.ConversationAgent=Ds,exports.Robota=Ds,exports.ConversationHistory=Ln,exports.ConversationStore=In,exports.DEFAULT_ABSTRACT_EVENT_SERVICE=ur,exports.DEFAULT_BACKGROUND_PERMISSION_POLICY=`inherit-allowlist`,exports.DEFAULT_CONTEXT_WINDOW=Xr,exports.DEFAULT_MAX_OUTPUT=ni,exports.DEFAULT_TOOL_RESULT_HARD_CHARS=25e3,exports.DEFAULT_TOOL_RESULT_WARNING_CHARS=1e4,exports.DEFERRED_WITHOUT_LOADER_MESSAGE=Er,exports.DefaultEventService=lr,exports.ENV_REFERENCE_PREFIX=xn,exports.EVENT_EMITTER_EVENTS=P,exports.EXECUTION_EVENTS=j,exports.EXECUTION_EVENT_PREFIX=Ke,exports.EmptyCompletionError=n.x,exports.ErrorUtils=pt,exports.EventEmitterPlugin=Qn,exports.EventHistoryModule=Ls,exports.ExecutionJournalError=F,exports.ExecutionProxy=Bs,exports.ExecutionRecoveryError=L,exports.ExecutionSuspendedError=I,exports.FunctionTool=wr,exports.GuardrailExecutor=eu,exports.InMemoryEventEmitterMetrics=Un,exports.LocalExecutor=Bn,exports.MAX_TOOL_RESULT_CHARS=5e5,exports.MODEL_EFFORT_VALUES=l,exports.MODEL_PRICES=Wl,exports.MessageConverter=ot,exports.ModelNotAvailableError=n.S,exports.NetworkError=n.C,exports.ORCHESTRATION_EVENTS=Rs,exports.ORCHESTRATION_EVENT_PREFIX=`orchestration`,exports.ObservableEventService=gr,exports.PARAMETER_SCHEMA_KEYWORDS=t.t,exports.PERMISSIVE_TOOL_SCHEMA_PROFILE=t.n,exports.PROTECTED_DIRECTORY_NAMES=bc,exports.PROTECTED_FILE_NAMES=xc,exports.PROVIDER_CALL_EVENTS=vr,exports.PROVIDER_FALLBACK_EVENTS=yr,exports.PluginCategory=Ue,exports.PluginError=n.w,exports.PluginPriority=We,exports.ProviderError=n.T,exports.RISK_CLASS_POLICY=vc,exports.RateLimitError=n.E,exports.SPAN_EVENTS=_r,exports.SPAN_EVENT_PREFIX=`span`,exports.STRICT_TOOL_SCHEMA_PROFILE=t.r,exports.SameToolInputLoopError=n.D,exports.SilentLogger=je,exports.StorageError=n.O,exports.StructuredEventService=mr,exports.StructuredOutputError=n.k,exports.TASK_EVENTS=fi,exports.TASK_EVENT_PREFIX=`task`,exports.TOOL_BODY_EVENTS=xr,exports.TOOL_EVENTS=M,exports.TOOL_EVENT_PREFIX=qe,exports.TOOL_PERMISSION_EVENTS=Cr,exports.TOOL_QUEUE_EVENTS=Sr,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=Us,exports.ToolExecutionError=n.A,exports.ToolRegistry=er,exports.ToolResultAdmissionError=As,exports.TypeUtils=i,exports.UNCLASSIFIED_TOOL_FALLBACK=yc,exports.USER_EVENTS=pi,exports.USER_EVENT_PREFIX=`user`,exports.UnsupportedShellError=n.m,exports.ValidationError=n.j,exports.Validator=st,exports.admitToolResult=Is,exports.allowRulesForAutoMode=Hl,exports.applyPresetToolLists=jl,exports.assertProviderNativeWebToolsAvailable=o,exports.assertResidentToolRemains=kr,exports.bindEventServiceOwner=hr,exports.bindWithOwnerPath=U,exports.buildTraceparent=n.a,exports.calculateModelCost=ql,exports.callJournaledProvider=Vt,exports.chatEntryToMessage=ye,exports.classifyProviderFailure=Lt,exports.clearRegisteredToolProfiles=sl,exports.closeObjectSchemas=t.c,exports.collectAssistantUsageMetadata=io,exports.composeEventName=fr,exports.confirmAction=ee,exports.createAbortError=at,exports.createAssistantMessage=Mn,exports.createBoundedOutput=n.i,exports.createDefaultProviderCapabilities=a,exports.createExecutionProxy=Vs,exports.createImageProviderFromDefinition=yn,exports.createLogger=O,exports.createModelEffortOutcome=d,exports.createProviderFromConfig=Dn,exports.createRecordEnvResolver=gn,exports.createSystemMessage=Nn,exports.createToolMessage=Pn,exports.createUserMessage=jn,exports.createVideoProviderFromDefinition=bn,exports.decodeHookVerdict=n.t,exports.estimateBlendedCostPer1000=Jl,exports.estimateContextTokensFromMessages=Wr,exports.estimateSerializedContextTokens=Hr,exports.estimateToolSchemaTokens=Ur,exports.evaluatePermission=Cl,exports.extractEnumValues=Jt,exports.findInvalidPermissionPatterns=Ol,exports.findMediaProviderDefinition=T,exports.findModelDefinition=ei,exports.findPermissionPatternWarnings=kl,exports.findProviderDefinition=g,exports.formatEnvReference=Cn,exports.formatSupportedProviderTypes=_,exports.formatTokenCount=ai,exports.generateSpanId=pr,exports.getGlobalLogLevel=Ie,exports.getGlobalLoggerSink=Re,exports.getMessagesForAPI=xe,exports.getModelContextWindow=ti,exports.getModelMaxOutput=ri,exports.getModelName=ii,exports.getProviderCapabilities=h,exports.getProviderCredentialRequirement=v,exports.getSchemaTypeName=Xt,exports.getToolEstimatedDuration=oe,exports.getToolExecutionSteps=se,exports.getToolPermissionProfile=cl,exports.hasUsableSecretReference=Tn,exports.hasValidationConstraints=Yt,exports.hashToolSchema=t.o,exports.isAbortFailure=it,exports.isAssistantMessage=Ce,exports.isBroadExecutionAllowRule=Vl,exports.isChatEntry=ve,exports.isConfirmed=ie,exports.isDefaultEventService=dr,exports.isEnforcing=iu,exports.isEnvReference=Sn,exports.isExecutionControlError=R,exports.isImageGenerationProvider=S,exports.isMediaProviderDefinition=w,exports.isMintedSpanId=n.o,exports.isModelEffort=u,exports.isProgressReportingTool=ae,exports.isProtectedPath=wc,exports.isReadOnlyCommandLine=il,exports.isRegistryTransactionError=ds,exports.isSystemMessage=we,exports.isToolDeniedOutright=fl,exports.isToolMessage=Te,exports.isUserMessage=Se,exports.isVideoGenerationProvider=C,exports.lifecycleOf=us,exports.logger=k,exports.lookupModelPrice=Kl,exports.matchesAnyPattern=hl,exports.messageToHistoryEntry=be,exports.modelDeclaresCapability=b,exports.multiSelectAction=ne,exports.nonVisualObservationText=au,exports.normalizeProviderConfig=En,exports.normalizeStructuredOutput=sn,exports.outboundTraceContextFor=n.s,exports.parseParameterRule=ul,exports.parseStructuredResponseText=fn,exports.peerDriverOf=lo,exports.printablePeerDriver=uo,exports.processEnvResolver=hn,exports.projectPermissionPolicy=wl,exports.projectToolSchema=t.s,exports.providerCallSpanId=n.c,exports.readModelFallbackNotice=br,exports.readProviderFailureDetails=Et,exports.readTokenUsageFromMessage=Fr,exports.readTokenUsageFromMetadata=Ir,exports.registerModelMetadata=Qr,exports.registerToolPermissionProfile=ol,exports.removesCriticalPath=Mc,exports.requiresFreshApproval=bl,exports.resolveEnvReference=wn,exports.resolveMediaProviderConfig=vn,exports.resolveModelCapabilities=y,exports.resolveModelCapability=x,exports.resolveModelEffort=m,exports.resolvePlatformShell=n.h,exports.resolveStructuredOutputCapability=mn,exports.runHooks=Ql,exports.runRegistryTransaction=fs,exports.scrubSecrets=wt,exports.selectAction=te,exports.setGlobalLogLevel=Fe,exports.setGlobalLoggerSink=Le,exports.setToolProgressCallback=ce,exports.shellArgumentForDisplay=Hn,exports.snapshotToolProvenance=le,exports.spanIdFromMintedId=n.l,exports.splitCommandSegments=Gs,exports.startPeriodicTask=Rt,exports.stopPeriodicTask=zt,exports.subprocessTraceEnvironment=n.u,exports.sumHistoryUsage=no,exports.sumMessagesUsage=to,exports.textAction=re,exports.toProviderError=jt,exports.toolNameMatches=ll,exports.toolNamesToPatterns=Al,exports.toolTraceContextFor=n.d,exports.traceEnvFor=n.f,exports.traceHeadersFor=n.p,exports.validateAgainstJsonSchema=cn,exports.validateAgentConfig=ct,exports.validateApiKey=ft,exports.validateModelName=dt,exports.validatePermissionPattern=Dl,exports.validateProviderName=ut,exports.validateUserInput=lt,exports.verifiedProviderCallUsage=eo,exports.wasToolResultAdmitted=js,exports.withEventEmission=Hs,exports.withToolProvenance=ue,exports.zodToJsonSchema=Zt;
14
+ `)};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 ru=class extends Error{guardrailName;guardrailReason;constructor(e,t){super(t),this.guardrailName=e,this.guardrailReason=t,this.name=`GuardrailBlock`}},iu=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 ru(e,`Guardrail "${e}" errored: ${t instanceof Error?t.message:String(t)}`)}if(!r.pass)throw new ru(e,r.reason??`Guardrail "${e}" blocked the turn`)}))}catch(e){if(e instanceof ru)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 au(e,t){return{posture:`advisory`,enforcementReachable:!1,rationale:`Awaited at ${e} but only ${t} is read; \`blocked\` is never consulted.`}}function ou(e){for(let t of Object.values(e))Object.freeze(t);return Object.freeze(e)}const su=ou({PreToolUse:{posture:`enforcing`,enforcementReachable:!0,rationale:"The tool-execution gate. `runPreToolGate` 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:au(`session-lifecycle.ts`,`nothing`),PreCompact:au(`compaction-orchestrator.ts`,`nothing`),UserPromptSubmit:au(`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 cu(e){return su[e].posture===`enforcing`}function lu(e){if(e.type===`resource_link`)return`Resource reference (not fetched): ${JSON.stringify(e)}`;if(e.type===`resource_embedded`){let t=`${JSON.stringify(e.uri)}${e.mimeType?` (${e.mimeType})`:``}`;return e.text===void 0?`Embedded binary resource ${t}; binary content retained but not transmitted by this adapter.`:`Embedded resource ${t}:\n${e.text}`}if(e.type===`audio_inline`)return`Audio observation (${e.mimeType}); this adapter does not transmit audio payloads.`}exports.AGENT_EVENTS=A,exports.AGENT_EVENT_PREFIX=Ge,exports.AbstractAIProvider=Be,exports.AbstractAgent=de,exports.AbstractEventService=lr,exports.AbstractExecutor=tt,exports.AbstractManager=fe,exports.AbstractPlugin=et,exports.AbstractTool=nt,exports.AgentFactory=gs,exports.AgentRuntimeError=n.g,exports.AgentTemplates=ds,exports.AuthenticationError=n._,exports.CONFIRM_NO=`no`,exports.CONFIRM_YES=`yes`,exports.CONTEXT_ESTIMATE_CHARS_PER_TOKEN=4,exports.CacheIntegrityError=n.v,exports.CircuitBreakerOpenError=n.y,exports.ConfigurationError=n.b,exports.ConsoleLogger=Ne,exports.ConversationAgent=ks,exports.Robota=ks,exports.ConversationHistory=Rn,exports.ConversationStore=Ln,exports.DEFAULT_ABSTRACT_EVENT_SERVICE=dr,exports.DEFAULT_BACKGROUND_PERMISSION_POLICY=`inherit-allowlist`,exports.DEFAULT_CONTEXT_WINDOW=Qr,exports.DEFAULT_MAX_OUTPUT=ii,exports.DEFAULT_TOOL_RESULT_HARD_CHARS=25e3,exports.DEFAULT_TOOL_RESULT_WARNING_CHARS=1e4,exports.DEFERRED_WITHOUT_LOADER_MESSAGE=Or,exports.DefaultEventService=ur,exports.ENV_REFERENCE_PREFIX=Sn,exports.EVENT_EMITTER_EVENTS=P,exports.EXECUTION_EVENTS=j,exports.EXECUTION_EVENT_PREFIX=Ke,exports.EmptyCompletionError=n.x,exports.ErrorUtils=pt,exports.EventEmitterPlugin=$n,exports.EventHistoryModule=zs,exports.ExecutionJournalError=F,exports.ExecutionProxy=Us,exports.ExecutionRecoveryError=L,exports.ExecutionSuspendedError=I,exports.FunctionTool=Er,exports.GuardrailExecutor=iu,exports.InMemoryEventEmitterMetrics=Wn,exports.LocalExecutor=Vn,exports.MAX_TOOL_RESULT_CHARS=5e5,exports.MODEL_EFFORT_VALUES=l,exports.MODEL_PRICES=Jl,exports.MessageConverter=ot,exports.ModelNotAvailableError=n.S,exports.NetworkError=n.C,exports.ORCHESTRATION_EVENTS=Bs,exports.ORCHESTRATION_EVENT_PREFIX=`orchestration`,exports.ObservableEventService=vr,exports.PARAMETER_SCHEMA_KEYWORDS=t.t,exports.PERMISSIVE_TOOL_SCHEMA_PROFILE=t.n,exports.PROTECTED_DIRECTORY_NAMES=wc,exports.PROTECTED_FILE_NAMES=Tc,exports.PROVIDER_CALL_EVENTS=br,exports.PROVIDER_FALLBACK_EVENTS=xr,exports.PluginCategory=Ue,exports.PluginError=n.w,exports.PluginPriority=We,exports.ProviderError=n.T,exports.RISK_CLASS_POLICY=Sc,exports.RateLimitError=n.E,exports.SPAN_EVENTS=yr,exports.SPAN_EVENT_PREFIX=`span`,exports.STRICT_TOOL_SCHEMA_PROFILE=t.r,exports.SameToolInputLoopError=n.D,exports.SilentLogger=je,exports.StorageError=n.O,exports.StructuredEventService=hr,exports.StructuredOutputError=n.k,exports.TASK_EVENTS=mi,exports.TASK_EVENT_PREFIX=`task`,exports.TOOL_BODY_EVENTS=Cr,exports.TOOL_EVENTS=M,exports.TOOL_EVENT_PREFIX=qe,exports.TOOL_PERMISSION_EVENTS=Tr,exports.TOOL_QUEUE_EVENTS=wr,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=Ks,exports.ToolExecutionError=n.A,exports.ToolRegistry=tr,exports.ToolResultAdmissionError=Ms,exports.TypeUtils=i,exports.UNCLASSIFIED_TOOL_FALLBACK=Cc,exports.USER_EVENTS=hi,exports.USER_EVENT_PREFIX=`user`,exports.UnsupportedShellError=n.m,exports.ValidationError=n.j,exports.Validator=st,exports.admitToolResult=Rs,exports.allowRulesForAutoMode=Kl,exports.applyPresetToolLists=Fl,exports.assertProviderNativeWebToolsAvailable=o,exports.assertResidentToolRemains=jr,exports.bindEventServiceOwner=_r,exports.bindWithOwnerPath=gr,exports.buildTraceparent=n.a,exports.calculateModelCost=Zl,exports.callJournaledProvider=Vt,exports.chatEntryToMessage=ye,exports.classifyProviderFailure=Lt,exports.clearRegisteredToolProfiles=dl,exports.closeObjectSchemas=t.c,exports.collectAssistantUsageMetadata=oo,exports.composeEventName=pr,exports.confirmAction=ee,exports.createAbortError=at,exports.createAssistantMessage=Nn,exports.createBoundedOutput=n.i,exports.createDefaultProviderCapabilities=a,exports.createExecutionProxy=Ws,exports.createImageProviderFromDefinition=bn,exports.createLogger=O,exports.createModelEffortOutcome=d,exports.createProviderFromConfig=On,exports.createRecordEnvResolver=_n,exports.createSystemMessage=Pn,exports.createToolMessage=Fn,exports.createUserMessage=Mn,exports.createVideoProviderFromDefinition=xn,exports.decodeHookVerdict=n.t,exports.estimateBlendedCostPer1000=Ql,exports.estimateContextTokensFromMessages=Kr,exports.estimateSerializedContextTokens=Wr,exports.estimateToolSchemaTokens=Gr,exports.evaluatePermission=Dl,exports.extractEnumValues=qt,exports.findInvalidPermissionPatterns=Ml,exports.findMediaProviderDefinition=T,exports.findModelDefinition=ni,exports.findPermissionPatternWarnings=Nl,exports.findProviderDefinition=g,exports.formatEnvReference=wn,exports.formatSupportedProviderTypes=_,exports.formatTokenCount=si,exports.generateSpanId=mr,exports.getGlobalLogLevel=Ie,exports.getGlobalLoggerSink=Re,exports.getMessagesForAPI=xe,exports.getModelContextWindow=ri,exports.getModelMaxOutput=ai,exports.getModelName=oi,exports.getProviderCapabilities=h,exports.getProviderCredentialRequirement=v,exports.getSchemaTypeName=Xt,exports.getToolEstimatedDuration=oe,exports.getToolExecutionSteps=se,exports.getToolPermissionProfile=fl,exports.hasUnevaluableArgumentPattern=bl,exports.hasUsableSecretReference=En,exports.hasValidationConstraints=Yt,exports.hashToolSchema=t.o,exports.isAbortFailure=it,exports.isAssistantMessage=Ce,exports.isBroadExecutionAllowRule=Gl,exports.isChatEntry=ve,exports.isConfirmed=ie,exports.isDefaultEventService=fr,exports.isEnforcing=cu,exports.isEnvReference=Cn,exports.isExecutionControlError=R,exports.isImageGenerationProvider=S,exports.isMediaProviderDefinition=w,exports.isMintedSpanId=n.o,exports.isModelEffort=u,exports.isProgressReportingTool=ae,exports.isProtectedPath=Oc,exports.isReadOnlyCommandLine=cl,exports.isRegistryTransactionError=ps,exports.isSystemMessage=we,exports.isToolDeniedOutright=gl,exports.isToolMessage=Te,exports.isUserMessage=Se,exports.isVideoGenerationProvider=C,exports.lifecycleOf=fs,exports.logger=k,exports.lookupModelPrice=Xl,exports.matchesAnyPattern=yl,exports.messageToHistoryEntry=be,exports.modelDeclaresCapability=b,exports.multiSelectAction=ne,exports.nonVisualObservationText=lu,exports.normalizeProviderConfig=Dn,exports.normalizeStructuredOutput=cn,exports.outboundTraceContextFor=n.s,exports.parseParameterRule=ml,exports.parseStructuredResponseText=pn,exports.peerDriverOf=fo,exports.printablePeerDriver=po,exports.processEnvResolver=gn,exports.projectPermissionPolicy=Ol,exports.projectToolSchema=t.s,exports.providerCallSpanId=n.c,exports.readModelFallbackNotice=Sr,exports.readProviderFailureDetails=Et,exports.readTokenUsageFromMessage=Lr,exports.readTokenUsageFromMetadata=Rr,exports.registerModelMetadata=ei,exports.registerToolPermissionProfile=ul,exports.removesCriticalPath=Ic,exports.requiresFreshApproval=wl,exports.resolveEnvReference=Tn,exports.resolveMediaProviderConfig=yn,exports.resolveModelCapabilities=y,exports.resolveModelCapability=x,exports.resolveModelEffort=m,exports.resolvePlatformShell=n.h,exports.resolveStructuredOutputCapability=hn,exports.runHooks=nu,exports.runRegistryTransaction=ms,exports.scrubSecrets=wt,exports.selectAction=te,exports.setGlobalLogLevel=Fe,exports.setGlobalLoggerSink=Le,exports.setToolProgressCallback=ce,exports.shellArgumentForDisplay=Un,exports.snapshotToolProvenance=le,exports.spanIdFromMintedId=n.l,exports.splitCommandSegments=Js,exports.startPeriodicTask=Rt,exports.stopPeriodicTask=zt,exports.subprocessTraceEnvironment=n.u,exports.sumHistoryUsage=io,exports.sumMessagesUsage=ro,exports.textAction=re,exports.toProviderError=jt,exports.toolNameMatches=pl,exports.toolNamesToPatterns=Pl,exports.toolTraceContextFor=n.d,exports.traceEnvFor=n.f,exports.traceHeadersFor=n.p,exports.validateAgainstJsonSchema=ln,exports.validateAgentConfig=ct,exports.validateApiKey=ft,exports.validateModelName=dt,exports.validatePermissionPattern=jl,exports.validateProviderName=ut,exports.validateUserInput=lt,exports.verifiedProviderCallUsage=no,exports.wasToolResultAdmitted=Ns,exports.withEventEmission=Gs,exports.withToolProvenance=ue,exports.zodToJsonSchema=Zt;