@robota-sdk/agent-core 3.0.0-beta.86 → 3.0.0-beta.88
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +36 -15
- package/README.md +56 -22
- package/dist/browser/{bounded-output-Bgx2Cgkx.js → bounded-output-BdWv9SX3.js} +2 -2
- package/dist/browser/bounded-output-BdWv9SX3.js.map +1 -0
- package/dist/browser/{command-executor-C0XXfBnt.js → command-executor-DIXaSMrr.js} +2 -2
- package/dist/{node/command-executor-d6DdfUTD.js.map → browser/command-executor-DIXaSMrr.js.map} +1 -1
- package/dist/browser/index.d.ts +140 -48
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +10 -9
- package/dist/browser/index.js.map +1 -1
- package/dist/node/{bounded-output-Bgx2Cgkx.js → bounded-output-BdWv9SX3.js} +2 -2
- package/dist/node/bounded-output-BdWv9SX3.js.map +1 -0
- package/dist/node/{command-executor-d6DdfUTD.js → command-executor-D_UBZHxh.js} +2 -2
- package/dist/{browser/command-executor-C0XXfBnt.js.map → node/command-executor-D_UBZHxh.js.map} +1 -1
- package/dist/node/{command-executor-CqAFpB-X.cjs → command-executor-wBgBdWXr.cjs} +1 -1
- package/dist/node/{http-executor-BFtXs8FP.cjs → http-executor-CeAAZotH.cjs} +1 -1
- package/dist/node/{index-CPwJEiFl.d.cts → index-CagopdzH.d.cts} +141 -49
- package/dist/node/index-CagopdzH.d.cts.map +1 -0
- package/dist/node/{index-DQrmrFn9.d.ts → index-CjyNzgQN.d.ts} +141 -49
- package/dist/node/index-CjyNzgQN.d.ts.map +1 -0
- package/dist/node/index.cjs +10 -9
- package/dist/node/index.d.cts +2 -2
- package/dist/node/index.d.ts +2 -2
- package/dist/node/index.js +12 -11
- package/dist/node/index.js.map +1 -1
- package/dist/node/node.cjs +1 -1
- package/dist/node/node.d.cts +13 -2
- package/dist/node/node.d.cts.map +1 -1
- package/dist/node/node.d.ts +13 -2
- package/dist/node/node.d.ts.map +1 -1
- package/dist/node/node.js +1 -1
- package/dist/node/node.js.map +1 -1
- package/dist/node/testing/index.d.cts +1 -1
- package/dist/node/testing/index.d.ts +1 -1
- package/dist/node/{verdict-decoder-DIHay1ul.cjs → verdict-decoder-DQqwwDE7.cjs} +1 -1
- package/package.json +10 -10
- package/dist/browser/bounded-output-Bgx2Cgkx.js.map +0 -1
- package/dist/node/bounded-output-Bgx2Cgkx.js.map +0 -1
- package/dist/node/index-CPwJEiFl.d.cts.map +0 -1
- package/dist/node/index-DQrmrFn9.d.ts.map +0 -1
package/dist/node/index.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
|
-
import{a as e,c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./project-tool-schema-_UKfY7yO.js";import{C as c,D as l,E as u,O as d,S as f,T as p,_ as m,a as h,b as g,c as _,d as v,f as y,g as b,h as x,i as S,l as C,m as w,n as ee,o as T,p as E,r as te,s as ne,t as re,u as ie,v as ae,w as oe,x as se,y as ce}from"./bounded-output-Bgx2Cgkx.js";import{n as le,r as ue,t as de}from"./verdict-decoder-Dz_rjoIZ.js";import fe from"jssha";const pe={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>pe.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>pe.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date||pe.isPrimitive(e)||pe.isArray(e)||pe.isObject(e)};function me(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 he(e,t,n){n?.webSearch===!0&&ge(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&ge(e,`web fetch`,t.nativeWebTools.webFetch)}function ge(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${_e(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${_e(n.reason)}`)}function _e(e){return e?` ${e}`:``}const ve=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function ye(e){return typeof e==`string`&&ve.includes(e)}function be(e,t){return{resolution:e,...t}}const xe=new Map(ve.map((e,t)=>[e,t]));function Se(e,t){return{selection:e,effective:null,disposition:`not-applied`,fingerprint:`${t}|${e}|not-applied`}}function Ce(e,t,n){let r=e?.models[t];if(!r)return Se(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`)}:Se(n,t);if(r.supportedEfforts.includes(n))return{selection:n,effective:n,disposition:`exact`,fingerprint:i(n,`exact`)};let a=xe.get(n),o=r.supportedEfforts.filter(e=>(xe.get(e)??1/0)<(a??-1)).at(-1);return o?{selection:n,effective:o,disposition:`clamped`,fingerprint:i(o,`clamped`)}:Se(n,t)}function we(e){let t=typeof e.supportsTools==`function`&&e.supportsTools();return e.getCapabilities?.()??me(t)}function Te(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function Ee(e){return e.map(e=>{if(!e.aliases||e.aliases.length===0)return e.type;let t=e.aliases.length===1?`alias`:`aliases`;return`${e.type} (${t}: ${e.aliases.join(`, `)})`}).join(`, `)}function De(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function Oe(e,t){if(e)return e.deviations?.[t]?.capabilities??e.vendorDefault}function ke(e,t,n){let r=Oe(e,t);if(!(!r||r.length===0))return r.includes(n)}function Ae(e,t,n,r){return ke(e,t,n)??r}function je(e){return`generateImage`in e&&typeof e.generateImage==`function`}function Me(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function Ne(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 Pe(e,t){return e.find(e=>e.type===t)}const Fe=`ToolSearch`,Ie=`yes`,Le=`no`,Re=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function ze(e,t,n){return{id:e,title:t,description:n?.description,options:Re,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function Be(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 Ve(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 He(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 Ue(e){return e.type===`answer`&&e.values.includes(`yes`)}function We(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function Ge(e,t){if(We(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function Ke(e,t){if(We(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function qe(e,t){return We(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}var Je=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}},Ye=class{initialized=!1;disposed=!1;constructor(e={}){this.initialized=e.readyOnConstruction===!0}async initialize(){this.initialized||(await this.doInitialize(),this.initialized=!0,this.disposed=!1)}async dispose(){await this.doDispose(),this.initialized=!1,this.disposed=!0}isInitialized(){return this.initialized}ensureInitialized(){if(this.disposed)throw Error(`${this.constructor.name} was disposed — re-initialize it before use, or build a new one`);if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function Xe(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 Ze(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 Qe(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*$e(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*et(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*$e(t,n,r,i)}function tt(e){return e.category===`chat`}function nt(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 rt(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function it(e){return e.filter(tt).map(nt)}function at(e){return e.role===`user`}function ot(e){return e.role===`assistant`}function st(e){return e.role===`system`}function ct(e){return e.role===`tool`}function lt(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:Ce(t?.(),s.model,s.effort)}}function ut(e,t,n){if(t)return;let r=e.effortResolution,i=e.onModelEffortOutcome;if(r===void 0||i===void 0)return;let a=be(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 dt(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 ft(e,t,n){let r,i=lt(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=ut(i,e.effortTable!==void 0,t),dt(e.name,i,r),{content:a.content??null,toolCalls:ot(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*pt(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=lt(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:ot(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=ut(i,e.effortTable!==void 0,t),dt(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const mt={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var ht=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}},gt=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??ht.getInstance().getGlobalSink()??mt}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),_t(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),_t(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),_t(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),_t(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||ht.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 _t(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function D(e,t={}){return new gt(e,t)}function vt(e){ht.getInstance().setGlobalLevel(e)}function yt(){return ht.getInstance().getGlobalLevel()}function bt(e){ht.getInstance().setGlobalSink(e)}function xt(){return ht.getInstance().getGlobalSink()}const O=D(`agents`),St=D(`ToolSchemaProjection`);var Ct=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=mt){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 wt(n,t);if(e.done||(await Tt(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return ft(this,this.logger,e)}async*generateStreamingResponse(e){yield*pt(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return me(this.supportsTools())}validateConfig(){return!0}validateMessages(e){Xe(e)}validateTools(e){Ze(e)}projectionProfile(){}projectTools(e,t){let n=this.projectionProfile();if(!n||!e)return e;let r=[];for(let a of e){let e=o(a,n);if(e.outcome!==`rejected`){r.push(e.tool);continue}let s=`${this.name}${t}${a.name}${i(a.parameters)}`;if(this.quarantinedToolSchemas.has(s))continue;this.quarantinedToolSchemas.set(s,!0);let{path:c,keyword:l,reason:u}=e.rejection??{path:``,keyword:``,reason:`rejected`};St.warn(`tool_schema_quarantined provider=${this.name} model=${t} tool=${a.name} path=${c} keyword=${l} reason=${u}`)}return r}validateNativeWebTools(e){he(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return Qe(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*et(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function wt(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 Tt(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let Et=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}({}),Dt=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 k={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},Ot=`agent`,A={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`},j=`execution`,M={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},kt=`tool`,At=`unknown_tool`,jt=`argument_decode_error`,N=(e,t)=>`${e}.${t}`,Mt={START:N(j,A.START),COMPLETE:N(j,A.COMPLETE),ERROR:N(j,A.ERROR)},Nt={CALL_START:N(kt,M.CALL_START),CALL_COMPLETE:N(kt,M.CALL_COMPLETE),CALL_ERROR:N(kt,M.CALL_ERROR)},Pt={EXECUTION_START:N(Ot,k.EXECUTION_START),EXECUTION_COMPLETE:N(Ot,k.EXECUTION_COMPLETE),EXECUTION_ERROR:N(Ot,k.EXECUTION_ERROR),CREATED:N(Ot,k.CREATED)},P={EXECUTION_START:Mt.START,EXECUTION_COMPLETE:Mt.COMPLETE,EXECUTION_ERROR:Mt.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:Nt.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:Pt.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Pt.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Pt.EXECUTION_ERROR,AGENT_CREATED:Pt.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 Ft=class{enabled=!0;category=`custom`;priority=Dt.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=D(`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}},It=class{logger;constructor(e=mt){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`)}},Lt=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??mt}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 zt(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 Bt(e=`aborted`,t){let n=t===void 0?Error(e):Error(e,{cause:t});return n.name=`AbortError`,n}var Vt=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`)}},Ht=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 Ut=Ht.validateAgentConfig,Wt=Ht.validateUserInput,Gt=Ht.validateProviderName,Kt=Ht.validateModelName,qt=Ht.validateApiKey;var Jt=class{static isRecoverable(e){return e instanceof c&&e.recoverable}static getErrorCode(e){return e instanceof c?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof c?e:e instanceof Error?new b(e.message||t):new b(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new se(`Failed to ${n}`,t,r,{operation:n})}},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 Yt(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 Xt=new Set([`rate_limit_error`]),Zt=new Set([`overloaded_error`]),Qt=new Set([`authentication_error`,`permission_error`]),$t=new Set([`model_not_found`]),en=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),tn=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]),nn=[/\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 rn(e){return nn.some(t=>t.test(e))}const an=`[^\\s,;)"]+`;function on(e){return e.replace(RegExp(`\\bauthorization(")?\\s*[:=]\\s*(")?(?:(?:bearer|basic)\\s+)?${an}`,`gi`),`Authorization$1: $2[REDACTED]`).replace(RegExp(`\\bbearer\\s+${an}`,`gi`),`Bearer [REDACTED]`).replace(RegExp(`\\b(api[-_]?key)(")?\\s*[:=]\\s*(")?${an}`,`gi`),`$1$2: $3[REDACTED]`).replace(RegExp(`\\bkey=${an}`,`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 sn(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function cn(e){let t=z(e);if(t===void 0)return{};let n=typeof t.status==`number`?t.status:void 0,r=z(t.error),i=z(r?.error),a=sn(r,`type`),o=sn(t,`type`)??sn(i,`type`)??(a===`error`?void 0:a)??(n!==void 0&&!(e instanceof c)?sn(t,`code`):void 0);return{...n!==void 0&&{status:n},...o!==void 0&&{type:o}}}function ln(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 un(e){return zt(e)||ln(e)===`APIUserAbortError`}function dn(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 fn(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 pn(e,t,n){if(e instanceof c||un(e))return e;let r=e instanceof Error?e:Error(typeof e==`string`?e:``),i=cn(e),a=on(r.message||`request failed`),o=fn(i);if(i.status===429||i.type!==void 0&&Xt.has(i.type))return new f(a||`${t} rate limit exceeded.`,dn(e),t,o);if(i.status===401||i.status===403||i.type!==void 0&&Qt.has(i.type))return new E(a,t,o);let s=i.status===void 0||i.status===400||i.status===404,l=_n(e)||i.type!==void 0&&$t.has(i.type)||rn(a);return s&&l?new ae(void 0,t,void 0,{...o,originalMessage:a}):mn(e)?new ce(a,r,o,t):new se(`${n}: ${a}`,t,r,void 0,i)}function mn(e){if(e instanceof ce)return!0;let t=z(e);if(t===void 0)return!1;let n=sn(t,`code`);if(n!==void 0&&en.has(n))return!0;let r=ln(e);if(r!==void 0&&tn.has(r))return!0;let i=sn(t,`name`);return i!==void 0&&tn.has(i)?!0:i===`TypeError`&&sn(t,`message`)===`fetch failed`}function hn(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 gn(e){return e instanceof se?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:cn(e)}function _n(e){if(e instanceof c)return!1;let t=sn(z(e),`code`);return t!==void 0&&$t.has(t)}function vn(e){if(e instanceof f)return B(!1,`rate-limit`);if(e instanceof E)return B(!1,`authentication`);if(e instanceof ae)return B(!0,`model-unavailable`);let{status:t,type:n}=gn(e);return t===429||n!==void 0&&Xt.has(n)?B(!1,`rate-limit`):t===401||t===403||n!==void 0&&Qt.has(n)?B(!1,`authentication`):t===402?B(!1,`billing`):(t===void 0||t===400||t===404)&&(_n(e)||n!==void 0&&$t.has(n))?B(!0,`model-unavailable`):mn(e)?B(!1,`network`):t===529||n!==void 0&&Zt.has(n)?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 yn(e,t){let n=hn(e);if(t?.aborted===!0||n.some(e=>un(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=vn(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 bn(e,t,n){return setInterval(()=>{(async()=>{try{await n()}catch(n){e.error(`Periodic task failed`,{task:t.name,error:n instanceof Error?n.message:String(n)})}})()},t.intervalMs)}function xn(e){e&&clearInterval(e)}async function V(e,t){try{await e.append(structuredClone(t))}catch(e){throw new F(t,e)}}function Sn(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 Cn(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:Sn(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 wn(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:return}}function Tn(e){let t=En(e);return t.typeName===`ZodObject`?t:void 0}function En(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=Dn(e,`${String(t.typeName)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function Dn(e,t){let n=e._def;if(!n)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function On(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 kn(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=Dn(n.schema,`ZodEffects inner type`);return n.typeName!==`ZodOptional`&&n.typeName!==`ZodNullable`&&n.typeName!==`ZodDefault`}function An(e){let t=Dn(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 jn(e){let t=Dn(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function Mn(e){let t=Dn(e,`Zod schema`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function Nn(e,t={}){let n=Dn(e,`Zod schema`),r=Tn(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 Pn(r,t.allowAdditionalProperties)}function Pn(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=Fn(a,t),kn(a)&&r.push(e);let a=wn(e,t);return{type:`object`,properties:n,required:r,...a!==void 0&&{additionalProperties:a}}}function Fn(e,t){let n=Dn(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:Fn(n.type,t),...r};case`ZodObject`:return{...Pn(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{...Ln(n.values),...r};case`ZodDate`:return{type:`string`,format:`date-time`,...r};case`ZodLiteral`:return{...In(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=>Fn(e,t)),...r}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...Fn(n.schema,t),...r};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[Fn(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{...Fn(n.innerType,t),...r};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:Fn(n.valueType,t),...r}:{type:`object`,additionalProperties:{type:`string`},...r};default:throw Error(zn(String(n.typeName)))}}function In(e){let t=On(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 Ln(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 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 zn(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 Bn(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function Vn(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 Hn(e){if(Bn(e))return{name:`structured_output`,jsonSchema:Nn(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:Vn(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=Un(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function Un(e,t,n){let r=[],i=e.type;if(e.anyOf)return Gn(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${Kn(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(...Un(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(Wn(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(...Un(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${Kn(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...Un(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 ${Kn(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${Kn(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 ${Kn(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${Kn(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function Wn(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function Gn(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>Un(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 Kn(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function qn(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 Jn(e,t){return ke(e,t,`json_schema`)===!0?`response_schema`:ke(e,t,`json_object`)===!0?`json_object`:`none`}function Yn(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=Jn(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 Xn=e=>process.env[e];function Zn(e){return t=>e[t]}function Qn(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function $n(e,t={},n=Xn){let r=e.credentialRequirement,i=t.baseUrl??Qn(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=Qn(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 er(e,t={},n=Xn){if(e.createImageProvider===void 0)return;let r=$n(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return je(t)?t:void 0}catch{return}}function tr(e,t={},n=Xn){if(e.createVideoProvider===void 0)return;let r=$n(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return Me(t)?t:void 0}catch{return}}const nr=`$ENV:`;function rr(e){return e.startsWith(nr)}function ir(e){return`${nr}${e}`}function ar(e,t=Xn){if(!rr(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function or(e,t=Xn){return e===void 0||e.length===0?!1:ar(e,t)!==void 0}function sr(e,t,n=Xn){let r=Te(t,e.name)?.defaults??{},i=e.model??r.model;if(!i)throw Error(`Provider ${e.name} requires model`);let a=e.apiKey??r.apiKey,o=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:ar(a,n),baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...o!==void 0&&{options:o}}}function cr(e,t){let n=Te(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${Ee(t)}`);let r=De(n);if(r!==void 0&&!lr(e,r))throw Error(`Provider ${e.name} requires ${dr(r)}`);return n.createProvider(e)}function lr(e,t){return t.anyOf.some(t=>ur(e,t))}function ur(e,t){let n=e[t];return n!==void 0&&n.length>0}function dr(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 fr(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 pr(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 mr(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 hr(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 gr=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(rt(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(fr(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(pr(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(mr(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>tt(e)&&st(nt(e)),i=this.entries.filter(e=>!r(e)),a=rt(mr(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(hr(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(tt).map(nt)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(tt).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(tt);if(e.length<=this.maxMessages)return;let t=e.map(nt),n=t.filter(st),r=t.filter(e=>!st(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=>!tt(e)||o.has(e.id))}},_r=class{history;pendingAssistant=null;constructor(e=0){this.history=new gr({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 ot(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
|
|
1
|
+
import{a as e,c as t,i as n,n as r,o as i,r as a,s as o,t as s}from"./project-tool-schema-_UKfY7yO.js";import{C as c,D as l,E as u,O as d,S as f,T as p,_ as m,a as h,b as g,c as _,d as v,f as y,g as b,h as x,i as S,l as C,m as w,n as T,o as E,p as D,r as ee,s as te,t as ne,u as re,v as ie,w as ae,x as oe,y as se}from"./bounded-output-BdWv9SX3.js";import{n as ce,r as le,t as ue}from"./verdict-decoder-Dz_rjoIZ.js";import de from"jssha";const fe={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>fe.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>fe.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date||fe.isPrimitive(e)||fe.isArray(e)||fe.isObject(e)};function pe(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 me(e,t,n){n?.webSearch===!0&&he(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&he(e,`web fetch`,t.nativeWebTools.webFetch)}function he(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${ge(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${ge(n.reason)}`)}function ge(e){return e?` ${e}`:``}const _e=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function ve(e){return typeof e==`string`&&_e.includes(e)}function ye(e,t){return{resolution:e,...t}}const be=new Map(_e.map((e,t)=>[e,t]));function xe(e,t){return{selection:e,effective:null,disposition:`not-applied`,fingerprint:`${t}|${e}|not-applied`}}function Se(e,t,n){let r=e?.models[t];if(!r)return xe(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`)}:xe(n,t);if(r.supportedEfforts.includes(n))return{selection:n,effective:n,disposition:`exact`,fingerprint:i(n,`exact`)};let a=be.get(n),o=r.supportedEfforts.filter(e=>(be.get(e)??1/0)<(a??-1)).at(-1);return o?{selection:n,effective:o,disposition:`clamped`,fingerprint:i(o,`clamped`)}:xe(n,t)}function Ce(e){let t=typeof e.supportsTools==`function`&&e.supportsTools();return e.getCapabilities?.()??pe(t)}function we(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function Te(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 Ee(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function De(e,t){if(e)return e.deviations?.[t]?.capabilities??e.vendorDefault}function Oe(e,t,n){let r=De(e,t);if(!(!r||r.length===0))return r.includes(n)}function ke(e,t,n,r){return Oe(e,t,n)??r}function Ae(e){return`generateImage`in e&&typeof e.generateImage==`function`}function je(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function Me(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 Ne(e,t){return e.find(e=>e.type===t)}const Pe=`ToolSearch`,Fe=`yes`,Ie=`no`,Le=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function Re(e,t,n){return{id:e,title:t,description:n?.description,options:Le,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function ze(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 Be(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 Ve(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 He(e){return e.type===`answer`&&e.values.includes(`yes`)}function Ue(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function We(e,t){if(Ue(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function Ge(e,t){if(Ue(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function Ke(e,t){return Ue(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}function qe(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 Je(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 Ye=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}},Xe=class{initialized=!1;disposed=!1;constructor(e={}){this.initialized=e.readyOnConstruction===!0}async initialize(){this.initialized||(await this.doInitialize(),this.initialized=!0,this.disposed=!1)}async dispose(){await this.doDispose(),this.initialized=!1,this.disposed=!0}isInitialized(){return this.initialized}ensureInitialized(){if(this.disposed)throw Error(`${this.constructor.name} was disposed — re-initialize it before use, or build a new one`);if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function Ze(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 Qe(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 $e(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*et(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*tt(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*et(t,n,r,i)}function nt(e){return e.category===`chat`}function rt(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 it(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function at(e){return e.filter(nt).map(rt)}function ot(e){return e.role===`user`}function st(e){return e.role===`assistant`}function ct(e){return e.role===`system`}function lt(e){return e.role===`tool`}function ut(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:Se(t?.(),s.model,s.effort)}}function dt(e,t,n){if(t)return;let r=e.effortResolution,i=e.onModelEffortOutcome;if(r===void 0||i===void 0)return;let a=ye(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 ft(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 pt(e,t,n){let r,i=ut(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=dt(i,e.effortTable!==void 0,t),ft(e.name,i,r),{content:a.content??null,toolCalls:st(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*mt(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=ut(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:st(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=dt(i,e.effortTable!==void 0,t),ft(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const ht={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var gt=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}},_t=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??gt.getInstance().getGlobalSink()??ht}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),vt(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),vt(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),vt(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),vt(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||gt.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 vt(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function O(e,t={}){return new _t(e,t)}function yt(e){gt.getInstance().setGlobalLevel(e)}function bt(){return gt.getInstance().getGlobalLevel()}function xt(e){gt.getInstance().setGlobalSink(e)}function St(){return gt.getInstance().getGlobalSink()}const k=O(`agents`),Ct=O(`ToolSchemaProjection`);var wt=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=ht){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 Tt(n,t);if(e.done||(await Et(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return pt(this,this.logger,e)}async*generateStreamingResponse(e){yield*mt(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return pe(this.supportsTools())}validateConfig(){return!0}validateMessages(e){Ze(e)}validateTools(e){Qe(e)}projectionProfile(){}projectTools(e,t){let n=this.projectionProfile();if(!n||!e)return e;let r=[];for(let a of e){let e=o(a,n);if(e.outcome!==`rejected`){r.push(e.tool);continue}let s=`${this.name}${t}${a.name}${i(a.parameters)}`;if(this.quarantinedToolSchemas.has(s))continue;this.quarantinedToolSchemas.set(s,!0);let{path:c,keyword:l,reason:u}=e.rejection??{path:``,keyword:``,reason:`rejected`};Ct.warn(`tool_schema_quarantined provider=${this.name} model=${t} tool=${a.name} path=${c} keyword=${l} reason=${u}`)}return r}validateNativeWebTools(e){me(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return $e(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*tt(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Tt(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 Et(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let Dt=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}({}),Ot=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`},kt=`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`},At=`execution`,M={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},jt=`tool`,Mt=`unknown_tool`,Nt=`argument_decode_error`,Pt=`tool_call_skipped`,N=(e,t)=>`${e}.${t}`,Ft={START:N(At,j.START),COMPLETE:N(At,j.COMPLETE),ERROR:N(At,j.ERROR)},It={CALL_START:N(jt,M.CALL_START),CALL_COMPLETE:N(jt,M.CALL_COMPLETE),CALL_ERROR:N(jt,M.CALL_ERROR)},Lt={EXECUTION_START:N(kt,A.EXECUTION_START),EXECUTION_COMPLETE:N(kt,A.EXECUTION_COMPLETE),EXECUTION_ERROR:N(kt,A.EXECUTION_ERROR),CREATED:N(kt,A.CREATED)},P={EXECUTION_START:Ft.START,EXECUTION_COMPLETE:Ft.COMPLETE,EXECUTION_ERROR:Ft.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:It.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:Lt.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Lt.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Lt.EXECUTION_ERROR,AGENT_CREATED:Lt.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 Rt=class{enabled=!0;category=`custom`;priority=Ot.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}},zt=class{logger;constructor(e=ht){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`)}},Bt=class{provenance;logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??ht}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 Vt(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function Ht(e,t){if(t?.aborted===!0)return!0;if(!Vt(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return Vt(n)&&n.name===`AbortError`}function Ut(e=`aborted`,t){let n=t===void 0?Error(e):Error(e,{cause:t});return n.name=`AbortError`,n}var Wt=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`)}},Gt=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 Kt=Gt.validateAgentConfig,qt=Gt.validateUserInput,Jt=Gt.validateProviderName,Yt=Gt.validateModelName,Xt=Gt.validateApiKey;var Zt=class{static isRecoverable(e){return e instanceof D&&e.recoverable}static getErrorCode(e){return e instanceof D?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof D?e:e instanceof Error?new m(e.message||t):new m(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new f(`Failed to ${n}`,t,r,{operation:n})}},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 Qt(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 $t=new Set([`rate_limit_error`]),en=new Set([`overloaded_error`]),tn=new Set([`authentication_error`,`permission_error`]),nn=new Set([`model_not_found`]),rn=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),an=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]),on=[/\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 sn(e){return on.some(t=>t.test(e))}const cn=`[^\\s,;)"]+`;function ln(e){return e.replace(RegExp(`\\bauthorization(")?\\s*[:=]\\s*(")?(?:(?:bearer|basic)\\s+)?${cn}`,`gi`),`Authorization$1: $2[REDACTED]`).replace(RegExp(`\\bbearer\\s+${cn}`,`gi`),`Bearer [REDACTED]`).replace(RegExp(`\\b(api[-_]?key)(")?\\s*[:=]\\s*(")?${cn}`,`gi`),`$1$2: $3[REDACTED]`).replace(RegExp(`\\bkey=${cn}`,`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 un(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function dn(e){let t=z(e);if(t===void 0)return{};let n=typeof t.status==`number`?t.status:void 0,r=z(t.error),i=z(r?.error),a=un(r,`type`),o=un(t,`type`)??un(i,`type`)??(a===`error`?void 0:a)??(n!==void 0&&!(e instanceof D)?un(t,`code`):void 0);return{...n!==void 0&&{status:n},...o!==void 0&&{type:o}}}function fn(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 pn(e){return Ht(e)||fn(e)===`APIUserAbortError`}function mn(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 hn(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 gn(e,t,n){if(e instanceof D||pn(e))return e;let r=e instanceof Error?e:Error(typeof e==`string`?e:``),i=dn(e),a=ln(r.message||`request failed`),o=hn(i);if(i.status===429||i.type!==void 0&&$t.has(i.type))return new c(a||`${t} rate limit exceeded.`,mn(e),t,o);if(i.status===401||i.status===403||i.type!==void 0&&tn.has(i.type))return new w(a,t,o);let s=i.status===void 0||i.status===400||i.status===404,l=bn(e)||i.type!==void 0&&nn.has(i.type)||sn(a);return s&&l?new se(void 0,t,void 0,{...o,originalMessage:a}):_n(e)?new g(a,r,o,t):new f(`${n}: ${a}`,t,r,void 0,i)}function _n(e){if(e instanceof g)return!0;let t=z(e);if(t===void 0)return!1;let n=un(t,`code`);if(n!==void 0&&rn.has(n))return!0;let r=fn(e);if(r!==void 0&&an.has(r))return!0;let i=un(t,`name`);return i!==void 0&&an.has(i)?!0:i===`TypeError`&&un(t,`message`)===`fetch failed`}function vn(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 yn(e){return e instanceof f?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:dn(e)}function bn(e){if(e instanceof D)return!1;let t=un(z(e),`code`);return t!==void 0&&nn.has(t)}function xn(e){if(e instanceof c)return B(!1,`rate-limit`);if(e instanceof w)return B(!1,`authentication`);if(e instanceof se)return B(!0,`model-unavailable`);let{status:t,type:n}=yn(e);return t===429||n!==void 0&&$t.has(n)?B(!1,`rate-limit`):t===401||t===403||n!==void 0&&tn.has(n)?B(!1,`authentication`):t===402?B(!1,`billing`):(t===void 0||t===400||t===404)&&(bn(e)||n!==void 0&&nn.has(n))?B(!0,`model-unavailable`):_n(e)?B(!1,`network`):t===529||n!==void 0&&en.has(n)?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 Sn(e,t){let n=vn(e);if(t?.aborted===!0||n.some(e=>pn(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=xn(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 Cn(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 wn(e){e&&clearInterval(e)}async function V(e,t){try{await e.append(structuredClone(t))}catch(e){throw new F(t,e)}}function Tn(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 En(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:Tn(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 Dn(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:return}}function On(e){let t=kn(e);return t.typeName===`ZodObject`?t:void 0}function kn(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=An(e,`${String(t.typeName)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function An(e,t){let n=e._def;if(!n)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function jn(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 Mn(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=An(n.schema,`ZodEffects inner type`);return n.typeName!==`ZodOptional`&&n.typeName!==`ZodNullable`&&n.typeName!==`ZodDefault`}function Nn(e){let t=An(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 Pn(e){let t=An(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function Fn(e){let t=An(e,`Zod schema`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function In(e,t={}){let n=An(e,`Zod schema`),r=On(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 Ln(r,t.allowAdditionalProperties)}function Ln(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=Rn(a,t),Mn(a)&&r.push(e);let a=Dn(e,t);return{type:`object`,properties:n,required:r,...a!==void 0&&{additionalProperties:a}}}function Rn(e,t){let n=An(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:Rn(n.type,t),...r};case`ZodObject`:return{...Ln(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{...Bn(n.values),...r};case`ZodDate`:return{type:`string`,format:`date-time`,...r};case`ZodLiteral`:return{...zn(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=>Rn(e,t)),...r}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...Rn(n.schema,t),...r};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[Rn(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{...Rn(n.innerType,t),...r};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:Rn(n.valueType,t),...r}:{type:`object`,additionalProperties:{type:`string`},...r};default:throw Error(Hn(String(n.typeName)))}}function zn(e){let t=jn(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 Bn(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 Vn={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 Hn(e){return`${e} cannot be carried by the universal JSON-schema subset: ${Vn[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 Un(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function Wn(e){if(e&&typeof e==`object`&&`issues`in e){let t=e.issues;if(Array.isArray(t))return t.map(e=>{if(e&&typeof e==`object`&&`message`in e){let t=Array.isArray(e.path)?e.path.join(`.`):``,n=String(e.message);return t?`${t}: ${n}`:n}return String(e)})}return[String(e)]}function Gn(e){if(Un(e))return{name:`structured_output`,jsonSchema:In(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:Wn(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=Kn(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function Kn(e,t,n){let r=[],i=e.type;if(e.anyOf)return Jn(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${Yn(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(...Kn(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(qn(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(...Kn(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${Yn(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...Kn(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 ${Yn(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${Yn(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 ${Yn(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${Yn(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function qn(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function Jn(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>Kn(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 Yn(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function Xn(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 Zn(e,t){return Oe(e,t,`json_schema`)===!0?`response_schema`:Oe(e,t,`json_object`)===!0?`json_object`:`none`}function Qn(e){let{table:t,model:n,endpointIsVendorDefault:r}=e;if(!t)return r===!1?{mechanism:`response_schema`,provenance:`unverified-endpoint`,reason:`a custom baseURL is configured and the provider declares no capability table, so nothing here can claim the endpoint enforces the schema`}:{mechanism:`response_schema`,provenance:`undeclared`,reason:`the provider declares no capability table, so the request is sent as asked — silence is not a denial`};let i=Zn(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 $n=e=>process.env[e];function er(e){return t=>e[t]}function tr(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function nr(e,t={},n=$n){let r=e.credentialRequirement,i=t.baseUrl??tr(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=tr(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 rr(e,t={},n=$n){if(e.createImageProvider===void 0)return;let r=nr(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return Ae(t)?t:void 0}catch{return}}function ir(e,t={},n=$n){if(e.createVideoProvider===void 0)return;let r=nr(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return je(t)?t:void 0}catch{return}}const ar=`$ENV:`;function or(e){return e.startsWith(ar)}function sr(e){return`${ar}${e}`}function cr(e,t=$n){if(!or(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function lr(e,t=$n){return e===void 0||e.length===0?!1:cr(e,t)!==void 0}function ur(e,t,n=$n){let r=we(t,e.name)?.defaults??{},i=e.model??r.model;if(!i)throw Error(`Provider ${e.name} requires model`);let a=e.apiKey??r.apiKey,o=a!==void 0&&or(a)?a.slice(5).trim():void 0,s=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:cr(a,n),...o?{apiKeyEnv:o}:{},baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...s!==void 0&&{options:s}}}function dr(e,t){let n=we(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${Te(t)}`);let r=Ee(n);if(r!==void 0&&!fr(e,r))throw Error(`Provider ${e.name} requires ${mr(r)}`);return n.createProvider(e)}function fr(e,t){return t.anyOf.some(t=>pr(e,t))}function pr(e,t){let n=e[t];return n!==void 0&&n.length>0}function mr(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 hr(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 gr(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 _r(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 vr(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 yr=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(it(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(hr(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(gr(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(_r(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>nt(e)&&ct(rt(e)),i=this.entries.filter(e=>!r(e)),a=it(_r(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(vr(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(nt).map(rt)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(nt).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(nt);if(e.length<=this.maxMessages)return;let t=e.map(rt),n=t.filter(ct),r=t.filter(e=>!ct(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=>!nt(e)||o.has(e.id))}},br=class{history;pendingAssistant=null;constructor(e=0){this.history=new yr({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 st(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
|
|
2
2
|
|
|
3
|
-
[This response was interrupted by the user]`),ot(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),ct(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},vr=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||0,this.maxConversations=e.maxConversations||50,this.logger=D(`ConversationHistory`)}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new _r(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 yr(){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 br(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 xr=class extends It{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=yr(),r=await this.withRetry(async()=>(n=yr(),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),br(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=yr(),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);br(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 Sr=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function Cr(e){return Sr.test(e)?e:void 0}var wr=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Tr(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new g(`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 g(`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 g(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function Er(e,t,n,r,i){try{await e.listener(t)}catch(a){if(n.incrementErrors(),!r)throw a instanceof Error?a:Error(String(a));i.error(`Event handler error`,{eventType:t.type,handlerId:e.id,error:a instanceof Error?a.message:String(a)})}}async function Dr(e,t,n,r,i){let a=t.get(e.type);if(!a||a.length===0)return;let o=a.filter(t=>!t.filter||t.filter(e));if(o.length!==0){for(let t of o.filter(e=>e.once))r(e.type,t.id);if(n){await Promise.all(o.map(t=>i(t,e)));return}for(let t of o)await i(t,e)}}function Or(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function kr(e,t,n,r){let{listenerCounts:i,totalListeners:a}=Or(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 Ar(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new g(`Maximum listeners (${a}) exceeded for event type: ${t}`,o,{eventType:t,currentListeners:s.length});s.push({id:n,listener:r,once:i?.once??!1,...i?.filter&&{filter:i.filter}})}function jr(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 Mr(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 Nr=class extends Ft{name=`EventEmitterPlugin`;version=`1.0.0`;pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=D(`EventEmitterPlugin`),this.metrics=e.metrics??new wr,Tr(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??Dt.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=Mr(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 Ar(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 jr(this.handlers,e,t)}async emit(e,t={}){if(!this.pluginOptions.events.includes(e))return;let n={type:e,timestamp:new Date,...t},r=this.pluginOptions.filters[e];if(!(r&&!r(n))){if(this.metrics.incrementEmitted(),this.pluginOptions.buffer.enabled){this.eventBuffer.push(n),this.eventBuffer.length>=this.pluginOptions.buffer.maxSize&&await this.flushBuffer();return}await this.processEvent(n)}}async processEvent(e){await Dr(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>Er(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 kr(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 Pr=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var Fr=class{tools=new Map;register(e){if(!e.schema?.name)throw new d(`Tool must have a valid schema with name`);let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&O.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),O.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)){O.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),O.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 O.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(),O.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 d(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new d(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new d(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new d(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))Ir(t,n);if(e.parameters.required){let t=e.parameters.properties||{};for(let n of e.parameters.required)if(!t[n])throw new d(`Required parameter "${n}" is not defined in properties`)}}};function Ir(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new d(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>Ir(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new d(`Parameter "${e}" must declare a type or anyOf`);if(!Pr.includes(t.type))throw new d(`Parameter "${e}" has invalid type "${t.type}"`);if(t.properties)for(let[n,r]of Object.entries(t.properties))Ir(`${e}.${n}`,r);t.items&&Ir(`${e}[]`,t.items)}function Lr(e,t,n){let r=Un(n,t,`$`);if(r.length>0)throw new l(`output does not match the declared outputSchema: ${r.join(`; `)}`,e,void 0,{outputSchemaIssues:r})}function Rr(e,t,n){let r=zr(e,t,n);return r?[r]:Un(n,t,`Parameter "${e}"`)}function zr(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 ${Br(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${Br(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${Br(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${Br(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${Br(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 Br(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function Vr(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 Hr(e,t,n,r){let i=Vr(e,t,n,r);return{isValid:i.length===0,errors:i}}var Ur=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)}},Wr=class extends Ur{emit(e,t,n){}};const Gr=new Wr;function Kr(e){return e===Gr||e instanceof Wr}function qr(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 Jr(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var Yr=class extends Ur{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??Jr()},i=qr(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 Yr(e,t)}function Xr(e,t){return U(e,t)}var Zr=class extends Ur{emit(e,t,n){this.notifyListeners(e,t,n)}};const Qr={COMPLETED:`span_completed`},$r={COMPLETED:`provider_call_completed`},ei={SWITCHED:`provider_fallback`};function ti(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 ni={COMPLETED:`tool_body_completed`},ri={DECIDED:`tool_permission_decided`},ii=`span`;var ai=class{schema;fn;eventService;constructor(e,t){this.schema=e,this.fn=t,this.validateConstructorInputs()}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(e,t){let n=this.schema.name;if(!this.validate(e))throw new d(`Invalid parameters for tool "${n}": ${Vr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let r=Date.now(),i;try{i=await this.fn(e,t)}catch(r){throw R(r)||r instanceof l||r instanceof d?r:new l(`Function tool execution failed: ${r instanceof Error?r.message:String(r)}`,n,r instanceof Error?r:Error(String(r)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let a=Date.now()-r;this.schema.outputSchema&&Lr(n,i,this.schema.outputSchema);let o=t?.instanceEventService??this.eventService;if(o){let e={timestamp:new Date,spanId:Jr(),durationMs:a,op:n};o.emit(Qr.COMPLETED,e)}return{success:!0,data:i,metadata:{executionTime:a,toolName:n,parameters:e}}}validate(e){return Vr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return Hr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new d(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new d(`Tool function is required and must be a function`);if(!this.schema.name)throw new d(`Tool schema must have a name`)}};const oi=`at least one tool must stay resident; all tools cannot be deferred`,si=`a tool schema was withheld but no ${Fe} tool is offered; register the loader or turn tool search off`;function ci(e){return e.deferLoading===!0}function li(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!ci(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(oi);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(si);return r}function ui(e){if(e.length>0&&e.every(ci))throw Error(oi)}var di=class extends Je{moduleManager;pluginManager;get name(){return this.config.name}addPlugin(e){this.pluginManager.addPlugin(e)}removePlugin(e){return this.pluginManager.removePlugin(e)}getPlugin(e){return this.pluginManager.getPlugin(e)}getPlugins(){return this.pluginManager.getPlugins()}getPluginNames(){return this.pluginManager.getPluginNames()}async registerModule(e,t){return this.moduleManager.registerModule(e,t)}async unregisterModule(e){return this.moduleManager.unregisterModule(e)}getModule(e){return this.moduleManager.getModule(e)}getModulesByType(e){return this.moduleManager.getModulesByType(e)}getModules(){return this.moduleManager.getModules()}getModuleNames(){return this.moduleManager.getModuleNames()}hasModule(e){return this.moduleManager.hasModule(e)}async executeModule(e,t){return this.moduleManager.executeModule(e,t)}getModuleStats(e){return this.moduleManager.getModuleStats(e)}};function fi(e,t){if(!t.success){let n=t.data===void 0?``:`; data: ${typeof t.data==`string`?t.data:JSON.stringify(t.data)}`;throw new l(`${t.error??`Tool execution failed`}${n}`,e)}if(t.data===void 0)throw new l(`Tool execution succeeded but returned no data`,e);return t.data}async function pi(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 mi(e){if(!e.name)throw new b(`Agent name is required`,{component:`Robota`});if(!e.aiProviders||e.aiProviders.length===0)throw new b(`At least one AI provider is required`,{component:`Robota`});if(!e.defaultModel)throw new b(`Default model configuration is required`,{component:`Robota`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new b(`Default model must specify both provider and model`,{component:`Robota`});let t=e.aiProviders.map(e=>e.name),n=t.filter((e,n)=>t.indexOf(e)!==n);if(n.length>0)throw new b(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`Robota`,duplicates:n});if(!t.includes(e.defaultModel.provider))throw new b(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`Robota`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var hi=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 b(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],n=this.getEventService();for(let r of e){n&&r.setEventService(n),this.getTools().addTool(r.schema,async(e,t)=>{if(!t)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let n=await pi(r,e,t);return fi(r.schema.name,n)});let e=r.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let r=this.getConfig();r.tools=e,this.setConfig(r);let i=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(k.CONFIG_UPDATED,{parameters:{tools:t,systemMessage:r.systemMessage,provider:r.defaultModel.provider,model:r.defaultModel.model,temperature:r.defaultModel.temperature,maxTokens:r.defaultModel.maxTokens},metadata:{version:i}}),{version:i}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);if(e.name!==void 0){this.setConfig({...this.getConfig(),name:e.name});let t=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),{version:t}}throw new 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 b(`Both provider and model are required`,{component:`Robota`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new b(`AI Provider '${e.provider}' not found. Available: ${n.join(`, `)}`,{component:`Robota`,provider:e.provider,availableProviders:n});t.setCurrentProvider(e.provider,e.model);let r=this.getConfig();this.setConfig({...r,defaultModel:{...r.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.effort!==void 0&&{effort:e.effort}}}),this.logger.debug(`Model configuration updated`,e)}getModel(){let e=this.getAIProviders().getCurrentProvider();if(!e)throw new b(`No provider is currently set`,{component:`Robota`});let t=this.getConfig();return{provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.effort!==void 0&&{effort:t.defaultModel.effort}}}setSystemMessage(e){let t=this.getConfig();t.systemMessage=e,this.setConfig(t),this.setConfigUpdatedAt(Date.now())}getSystemMessage(){return this.getConfig().systemMessage}registerTool(e,t){if(t.hasTool(e.schema.name))throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let r=await pi(e,t,n);return fi(e.schema.name,r)}),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},gi=class extends Ye{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new Fr,this.resolveToolSearchMode=e.resolveToolSearchMode,this.isToolVisible=e.isToolVisible??(()=>!0)}async doInitialize(){O.debug(`Tools initialized`)}async doDispose(){this.registry.clear(),this.loadedDeferredTools.clear(),delete this.allowedTools,O.debug(`Tools disposed`)}addTool(e,t){this.ensureInitialized();let n=new ai(e,t);this.registry.register(n),O.debug(`Tool "${e.name}" registered successfully`)}removeTool(e){this.ensureInitialized(),this.registry.unregister(e)}getTool(e){return this.ensureInitialized(),this.registry.get(e)}getToolSchema(e){return this.ensureInitialized(),this.registry.get(e)?.schema}getTools(){this.ensureInitialized();let e=this.registry.getSchemas().filter(e=>this.isToolVisible(e.name));return this.allowedTools?e.filter(e=>this.allowedTools.includes(e.name)):e}getOfferedTools(){return li(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=>ci(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 l(`Tool "${e}" is not registered, so it cannot be loaded`,e);return t});for(let e of t)ci(e)&&this.loadedDeferredTools.add(e.name);return t}async executeTool(e,t,n){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new l(`Tool "${e}" is not in the allowed tools list`,e);let r=this.registry.get(e);if(!r)throw new l(`Tool "${e}" is not registered`,e);let i;try{i=await r.execute(t,n)}catch(t){throw R(t)?t:t instanceof Error?new l(t.message,e,t):new l(String(t),e)}if(!i.success)throw new l(i.error||`Tool execution failed`,e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(i)});if(i.data===void 0)throw new l(`Tool execution succeeded but returned no data`,e);return i.data}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],O.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 _i(e){let t=vi(e.metadata),n=bi(e.usage);return t??n}function vi(e){if(!e)return;let t=bi({inputTokens:xi(e,`inputTokens`),outputTokens:xi(e,`outputTokens`),promptTokens:xi(e,`promptTokens`),completionTokens:xi(e,`completionTokens`),totalTokens:xi(e,`totalTokens`),cacheReadTokens:xi(e,`cacheReadTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return yi(n);if(Ci(n))return bi(n)}function yi(e){try{return bi(JSON.parse(e))}catch{return}}function bi(e){if(!e)return;let t=Si(e.inputTokens,e.promptTokens),n=Si(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=Si(e.totalTokens),i=Si(e.cacheReadTokens),a=i!==void 0&&i>=0&&i<=t;return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r},...a&&{cacheReadTokens:i}}}function xi(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Si(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function Ci(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}const wi=4;function Ti(e){return Math.ceil(JSON.stringify(e).length/4)}function Ei(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function Di(e,t={}){let n=Ti(e),r=Oi(e),i=r?.tokens,a=ki(t.usageFloorTokens);return{usedTokens:r?.index===e.length-1?Math.max(i??0,a??0):Math.max(n,i??0,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function Oi(e){for(let t=e.length-1;t>=0;t--){let n=_i(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function ki(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const Ai=D(`agent-core:models`),ji=new Set;function Mi(e,t,n){let r=`${e}:${t}`;ji.has(r)||(ji.add(r),Ai.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 Ni=2e5,Pi=new Map;function Fi(...e){for(let t of e){let e=Pi.get(t.id);e&&!Ii(e,t)&&Ai.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)`),Pi.set(t.id,t)}}function Ii(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function Li(e){return Pi.get(e)}function Ri(e){let t=Li(e)?.contextWindow;return t===void 0?(Mi(e,`context window`,Ni),Ni):t}const zi=16384;function Bi(e){let t=Li(e)?.maxOutput;return t===void 0?(Mi(e,`max output`,zi),zi):t}function Vi(e){return Li(e)?.name??e}function Hi(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 Ui(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(ci);return i.length===0?`off`:i.length>15||Ei(i)/Ri(t)>=.1?`on`:`off`}function Wi(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Gi(e){let t=new gi({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:Ui(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var Ki=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)}},qi=class{logger;isReady;getExecutionService;constructor(e,t,n){this.logger=e,this.isReady=t,this.getExecutionService=n}addPlugin(e){let t=this.getExecutionService();if(!this.isReady()||!t)throw new b(`Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.`,{pluginName:e.name});t.registerPlugin(e),this.logger.debug(`Plugin added`,{pluginName:e.name})}removePlugin(e){let t=this.getExecutionService();if(!t)return!1;let n=t.removePlugin(e);return n&&this.logger.debug(`Plugin removed`,{pluginName:e}),n}getPlugin(e){let t=this.getExecutionService();if(t)return t.getPlugin(e)}getPlugins(){let e=this.getExecutionService();return e?e.getPlugins():[]}getPluginNames(){let e=this.getExecutionService();return!this.isReady()||!e?[]:e.getPlugins().map(e=>e.name)}};function Ji(e){return{moduleManager:new Ki(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new qi(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new hi(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 Yi={ASSIGNED:`assigned`,COMPLETED:`completed`},Xi=`task`,Zi={MESSAGE:`message`,INPUT:`input`},Qi=`user`;function $i(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(k.CREATED,{parameters:{tools:n,systemMessage:e.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function ea(e,t,n,r,i){Kr(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:Ot,ownerId:t,ownerPath:na(t,n)})}function ta(){return new Nr({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 na(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function ra(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.driverId&&{driverId:t.driverId},...t.turnSource&&{turnSource:t.turnSource},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},awaitProviderSettlement:t.awaitProviderSettlement,...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.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 ia(e,t,n={},r){try{e.emitAgentEvent(k.EXECUTION_START,{}),e.logger.debug(`Starting Robota execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=await e.getExecutionService().execute(t,i,a,ra(e,n));if(e.logger.debug(`Robota execution completed`,{success:o.success,duration:o.duration,tokensUsed:o.tokensUsed,toolsExecuted:o.toolsExecuted,interrupted:o.interrupted}),o.interrupted)return e.emitAgentEvent(k.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(k.EXECUTION_COMPLETE,{}),o.response}catch(t){throw t instanceof I?t:(e.logger.error(`Robota execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(k.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}}async function*aa(e,t,n={},r){let i=!1;try{e.emitAgentEvent(k.EXECUTION_START,{}),e.logger.debug(`Starting Robota streaming execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=yield*e.getExecutionService().executeStream(t,i,a,ra(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(`Robota streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(k.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}finally{i||e.emitAgentEvent(k.EXECUTION_COMPLETE,{})}}function oa(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function sa(e,t){return[`Your previous response did not match the required JSON schema.`,`Validation issues:`,...t.map(e=>`- ${e}`),``,`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e.jsonSchema)].join(`
|
|
4
|
-
`)}async function
|
|
5
|
-
`||e[r]===`\r`;!i&&!n?(t++,n=!0):i&&(n=!1)}return t}function Ca(e,t,n,r,i,a,o){e.emitExecution(A.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 wa(e,t,n,r){e.emitExecution(A.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:Sa(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 Ta(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(A.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:Sa(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(Sa(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 Ea(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(A.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(A.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:i.length,round:s},metadata:{toolsExecuted:r.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:s}},d,f)}function Da(e){if(!e.executionId)throw new d(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new d(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new d(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function Oa(e,t){let n=Da(e),r=H(),i=e.traceContext?_(e.traceContext,r):void 0,a=C(`shell`,e.traceContext,T(r)),o=e.traceContext?C(`hooks`,e.traceContext,e.traceContext.parentSpanId):void 0;return{toolName:e.toolName,parameters:e.parameters,...t?{signal:t}:{},executionId:n.executionId,ownerType:n.ownerType,ownerId:n.ownerId,ownerPath:e.ownerPath,metadata:e.metadata,eventService:e.eventService,baseEventService:e.baseEventService,...e.ask?{ask:e.ask}:{},...e.deferredTools?{deferredTools:e.deferredTools}:{},toolBodyId:r,...i?{outboundTraceContext:i}:{},...a?{shellTraceEnv:a}:{},...o?{hookTraceEnv:o}:{}}}function ka(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null}}function Aa(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function ja(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:jt,requestedTool:e.toolName}}}function Ma(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function Na(e){return e!==void 0}function Pa(e){return e!==void 0}function Fa(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 Ba(e,t,i,r);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=Ma(a))}catch(e){if(R(e)){let t=Yt(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]=Aa(i,t)}}async function La(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 Ra(e,t){let n=new AbortController,r=e.journal?{...e,signal:e.signal?AbortSignal.any([e.signal,n.signal]):n.signal}:e,i={resultsByIndex:Array(e.requests.length),errorsByIndex:Array(e.requests.length),nextRequestIndex:0,abort:n},a=Fa(e.requests.length,e.maxConcurrency),o=Array.from({length:a},()=>La(r,t,i));if(await Promise.all(o),i.fatalError)throw i.fatalError;let s=i.resultsByIndex.filter(Na),c=i.errorsByIndex.filter(Pa);if(c.length>0&&!e.continueOnError)throw c[0];return{results:s,errors:c}}async function za(e,t){let n=[],r=[];for(let[i,a]of e.requests.entries())try{let o=await Ba(e,t,a,i);if(n.push(o),o.success||r.push(Ma(o)),!o.success&&!e.continueOnError)break}catch(t){if(R(t))throw t;let n=t instanceof Error?t:Error(String(t));if(r.push(n),!e.continueOnError)break}return{results:n,errors:r}}async function Ba(e,t,n,r){let i=e.recoveredResults?.get(r);if(i)return structuredClone(i);let a,o=e.journal;if(e.signal?.aborted)a=ka(n);else if(n.argumentDecodeError!==void 0)a=ja(n);else if(o&&await o.beforeDispatch(r),e.signal?.aborted)a=ka(n);else{let i={...Oa(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 Va(e,r,()=>t.executeTool(n.toolName,n.parameters,i))}catch(e){if(R(e))throw e;a=Aa(n,e instanceof Error?e:Error(String(e)))}e.lifecycle&&await e.lifecycle.onResult(r,i,a)}return await e.journal?.onResult(r,a),a}async function Va(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?Yt(r.error,e):e}}if(`error`in r)throw r.error;return r.result}async function Ha(e,t,n){return n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`),e.mode===`parallel`?Ra(e,t):za(e,t)}var Ua=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=mt){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,n,r=`offered`){this.logger.debug(`Executing tool: ${e}`);try{if(!n?.executionId)throw new d(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);n.signal?.throwIfAborted();let i=r===`offered`&&this.tools.getToolSchema(e)?.deferLoading===!0&&!this.tools.isToolOffered(e);if(!this.tools.hasTool(e)||i){let t=(r===`registered`?this.tools.getTools():this.tools.getOfferedTools()).map(e=>e.name).sort(),a=Ga(e,t,i),o=n.eventService;if(o){let t={timestamp:new Date,toolName:e,error:a};o.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:a,toolName:e,executionId:n.executionId,metadata:{errorCode:At,requestedTool:e,availableTools:t}}}let a=n.eventService;if(a){let n={timestamp:new Date,toolName:e,parameters:t};a.emit(M.CALL_START,n)}let{toolName:o,parameters:s,...c}=n,l={...c,deferredTools:this.deferredToolCatalog,toolName:e,parameters:t,executionId:n.executionId},u=await this.tools.executeTool(e,t,l);if(this.logger.debug(`Tool execution completed: ${e}`),a){let t={timestamp:new Date,toolName:e,result:u};a.emit(M.CALL_COMPLETE,t),a.emit(M.CALL_RESPONSE_READY,t)}return{success:!0,result:u,toolName:e,executionId:l.executionId}}catch(t){if(R(t))throw t;this.logger.error(`Tool execution failed: ${e}`);let r=t instanceof Error?t:Error(String(t)),i=n?.eventService;if(i&&n?.executionId){let t={timestamp:new Date,toolName:e,error:r.message};i.emit(M.CALL_ERROR,t)}return{success:!1,error:r.message,toolName:e,executionId:n?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=Wa(e.id,e.function.name,e.function.arguments);return{toolName:e.function.name,parameters:n.ok?n.parameters:{},executionId:e.id,ownerType:`tool`,ownerId:e.id,ownerPath:[...t.ownerPathBase,{type:`tool`,id:e.id}],metadata:t.metadataFactory?t.metadataFactory(e):void 0,...this.askHandler?{ask:this.askHandler}:{},deferredTools:this.deferredToolCatalog,...n.ok?{}:{argumentDecodeError:n.error}}})}async executeTools(e){return Ha(e,this,this.logger)}};function Wa(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 Ga(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 ${Fe} 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 Ka(e,t){try{e()}catch(e){if(t===void 0)throw e}}function qa(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function Ja(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:j,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=[...Ja(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:j,ownerId:r,ownerPath:o}}function Xa(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:kt,ownerId:i,ownerPath:[...Ja(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function Za(e,t,n,r,i,a){let o=Ya(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:j,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function Qa(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 $a=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=qa(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(Kr(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:kt,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 Ja(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 Xa(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return Za(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(Kr(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){Ca(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){wa(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){Ta(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){Ea(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function eo(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function to(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 no(e){return e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0}function ro(e,t,n,r,i,a){let o=e.getMessages(),s=to(o,i.turnMessageId),c=s.filter(no).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:eo(a,f)}:{}}}function io(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 ao(e,t,n){e.tools!==void 0&&(Ae(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function oo(e,t,n,r,i=!1){let a=so(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw Bt();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(Bt())};o?.addEventListener(`abort`,h,{once:!0});let g=n.onTextDelta,_={...n,signal:s.signal,...g===void 0?{}:{onTextDelta:e=>{m(),g(e)}}};m();try{let n=new Promise((e,t)=>{d=t});return u=(async()=>e(t,_))(),await Promise.race([u,n])}finally{l=!0,f(),o?.removeEventListener(`abort`,h),i&&u&&await u.then(()=>{},e=>{if(e instanceof F)throw e})}}function so(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function co(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 lo={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(co(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(co(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(co(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(co(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(co(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(co(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:`${j}.${A.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=lo[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 uo(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 fo(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function po(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 mo(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 ho(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 go(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 _o(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:xo(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(A.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function vo(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function yo(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function bo(e,t,n,r,i,a){return{messages:e,config:t,startTime:n,executionId:r,conversationId:i,...a?.sessionId&&{sessionId:a.sessionId},...a?.userId&&{userId:a.userId},...a?.metadata&&{metadata:a.metadata},...a?.signal&&{signal:a.signal},awaitProviderSettlement:a?.awaitProviderSettlement,...a?.onTextDelta&&{onTextDelta:a.onTextDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.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 xo(e){let t={conversationId:yo(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 So(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
|
|
6
|
-
`)}function Co(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=Yn({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:So(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 wo(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 To(e,t){e.current={provider:t.to.provider,model:t.to.model}}function Eo(e,t,n,r){if(e===void 0||e.allowedOrigins.length===0)return;let i=!1;try{i=t.canPropagateTraceContext?.()===!0}catch{i=!1}if(!i){try{e.onPropagationUnavailable?.(n)}catch{}return}return S(e,r)}function Do(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function Oo(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 ko(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function Ao(e,t,n,r){let i=uo(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 jo(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;ko(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let f=Ao(d,t,n,i);po(f.toolChoice,f.tools),ao(f,d,n);let{messages:p,outcome:m}=Co(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)=>Cn((e,t)=>(s?.(`invoked`,t.model??d),h(e,Do(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 oo(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 oo(g,p,f,t.timeout,o||!!u)}function Mo(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 Po(e){let t=0,n=0,r,i=!1;for(let a of e){if(a.role!==`assistant`)continue;let e=Lo(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 Fo(e){let t=Po(e.filter(e=>tt(e)&&e.data!==void 0).map(nt));if(t)return{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}function Io(){return H()}function Lo(e){let t=_i(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 Ro(e){let t=No(e).provenance,n=Lo(e);return n?{...n,totalTokens:n.inputTokens+n.outputTokens,usageProvenance:t===`complete`?`complete`:`partial`}:{usageProvenance:t}}const zo=/^peer:[A-Za-z0-9._:-]{1,128}$/,Bo=/<(\/?)(peer_message)/gi;function Vo(e){return e.replace(Bo,`<$1$2`)}function Ho(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 zo.test(e)?e:`peer:unverified`}function Wo(e){return e.map(e=>{if(e.type!==`text`)return e;let t=Vo(e.text);return t===e.text?e:{...e,text:t}})}function Go(e){if(e.role===`tool`){let t=Vo(e.content),n=e.parts?Wo(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=Ho(e),n=Vo(e.content),r=e.parts?Wo(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 Ko(e){return e.map(Go)}async function qo(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=[...Ko(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=wo(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},executionId:r,onModelFallback:e=>{To(u,e),o.onExecutionEvent?.(ei.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 oo((a,s)=>Cn((e,n)=>{b.invoked=!0,b.startedAtMs=Date.now();let r=Eo(o.traceContext,t.provider,t.currentInfo.provider,y);return t.provider.chat(e,Do(n,r))},a,s,o.executionJournal?{journal:o.executionJournal,executionId:r,callId:y,checkpoint:io(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:zt(e,o.signal)&&(x=`interrupted`),e}finally{let e=b.invoked?No(S):{provenance:`absent`};Ka(()=>{o.onExecutionEvent?.($r.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.`,ee={...S.metadata??{},round:i.currentRound,executionId:r,providerCallId:y,providerId:G(u,t),modelId:K(u,t.aiProviderInfo.model),...Ro(S)};e.addAssistantMessage(w,[],ee),d=!0,o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:w}),Qa(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(zt(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}),Qa(e,o,r,a,l)}}function Jo(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 Xo(e,t,n){let r=Di(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 Zo(e,t,n,r,i,a){let o=n.currentRound,s=Xo(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}),Qa(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function Qo(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=pr(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 $o(e,t,n,r,i,a,o,s,c,l,u,d,f,p=wo(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 jo(e,t,n,r,{signal:i.signal,onTextDelta:u,onProviderNativeRawPayload:d,...i.maxTokens!==void 0&&{maxTokens:i.maxTokens},...i.temperature!==void 0&&{temperature:i.temperature},...i.withholdHostedTools===!0&&{nativeWebTools:{webSearch:!1,webFetch:!1}},executionId:s,onModelFallback:e=>{To(p,e),_.model=e.to.model,i.onExecutionEvent?.(ei.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=fo(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())},()=>Eo(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(zt(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}),Qa(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`?No(v):{provenance:`absent`};Ka(()=>{i.onExecutionEvent?.($r.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 es(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function ts(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function ns(e,t,n,r,i,a){let o=!1,s=0,c=0;for(let l of e){if(!l.id)throw Error(`Tool call missing ID: ${JSON.stringify(l)}`);let e=l.function?.name;if(!e||e.length===0)throw Error(`[EXECUTION] Tool call "${l.id}" missing function name`);if(o){i.warn(`[ROUND] Skipping tool result due to context overflow`,{toolCallId:l.id,toolName:e,round:r}),n.addToolMessageWithId(`Error: Context window near capacity. Tool execution result skipped. Respond with available results and re-request skipped tools if needed.`,l.id,e,{round:r,success:!1,error:`context_overflow`,toolName:e}),c++;continue}let u=t.results.find(e=>e.executionId===l.id),d=t.errors.find(e=>xa(e)&&e.executionId===l.id),f,p={round:r};if(u&&u.success){if(u.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload`);f=typeof u.result==`string`?u.result:JSON.stringify(u.result),p.success=!0,u.toolName&&(p.toolName=u.toolName)}else if(u&&!u.success){if(!u.error||u.error.length===0)throw Error(`[EXECUTION] Tool result missing error message`);f=`Error: ${u.error}`,p.success=!1,p.error=u.error,u.toolName&&(p.toolName=u.toolName),u.metadata?.errorCode===`unknown_tool`&&(p.errorCode=At,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=jt,typeof u.metadata.requestedTool==`string`&&(p.requestedTool=u.metadata.requestedTool))}else if(d){let e=d,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message`);f=`Error: ${t}`,p.success=!1,p.error=t,e.toolName&&(p.toolName=e.toolName)}else throw Error(`No execution result found for tool call ID: ${l.id}`);if(i.debug(`Adding tool result to conversation`,{toolCallId:l.id,toolName:e,content:f.substring(0,100),round:r,currentHistoryLength:n.getMessages().length}),n.addToolMessageWithId(f,l.id,e,p),a){let e=Di(n.getMessages(),{usageFloorTokens:a.cumulativeInputTokens}).usedTokens;e>a.contextLimit*.8&&(i.warn(`[ROUND] Context budget exceeded after tool result — skipping remaining tools`,{estimatedTokens:e,contextLimit:a.contextLimit,toolCallId:l.id,round:r}),o=!0)}s++,i.debug(`Tool result added to history`,{toolCallId:l.id,newHistoryLength:n.getMessages().length,round:r})}return{contextOverflowed:o,addedCount:s,skippedCount:c,unknownToolFailureCount:0,unknownToolNames:[]}}function rs(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))&&as(),t.add(e);try{if(Array.isArray(e))return`[${Array.from(e,n).join(`,`)}]`;Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null&&as();let t=Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t));return t.length!==Reflect.ownKeys(e).length&&as(),`{${t.map(([e,t])=>`${JSON.stringify(e)}:${n(t)}`).join(`,`)}}`}finally{t.delete(e)}}return n(e)}function is(e){(!e||typeof e!=`object`||Array.isArray(e))&&as(),rs(e)}function as(){throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool continuations require finite plain JSON objects`)}function os(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`);is(n.data);let t=rs([n.kind,n.data]),c=i.find(e=>rs([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 ss(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`);is(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(rs(a.response)!==rs(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 cs(e,t,n){for(let r of e){let e=r.function?.name??`unknown`,i=`${e}::${typeof r.function?.arguments==`string`?r.function.arguments:JSON.stringify(r.function?.arguments??{})}`,a=(t.sameToolInputCounts.get(i)??0)+1;if(t.sameToolInputCounts.set(i,a),a>n)throw new oe(e,a,n)}}async function ls(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m){let{toolExecutionService:h,logger:g,eventEmitter:_}=c,v=f??l?.maxSameToolInputs;v!==void 0&&cs(e,s,v),g.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:i,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let y=_.buildThinkingOwnerContext(n,r,a,o).ownerPath,b=e.length,x=`${a}`,S=h.createExecutionRequestsWithContext(e,{ownerPathBase:y,metadataFactory:e=>({conversationId:n,round:i,directParentId:a,batchId:x,expectedCount:b,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:_.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:_.getBaseEventService(),...p?{traceContext:p}:{}}}),C={requests:S,mode:`parallel`,maxConcurrency:5,continueOnError:!0,signal:u};if(C.lifecycle={beforeDispatch:async(e,t)=>{let i=S[e];if(m?.recovery?.actions.get(i.executionId??``)?.dispatched)return;let a={toolData:t,executionContext:{executionId:r,sessionId:n}};await W(c.plugins,`beforeToolCall`,a,g),await W(c.plugins,`beforeToolExecution`,a,g)},onResult:async(e,t,i)=>{await W(c.plugins,`afterToolCall`,{toolData:t,toolResult:i,executionContext:{executionId:r,sessionId:n}},g)}},m){let{journal:e,parentCallId:t}=m,n=S.map(e=>m.recovery?.actions.get(e.executionId??``)),i=S.map(e=>({actionId:m.recovery?.actions.get(e.executionId??``)?.actionId??H(),parentCallId:t,executionId:r,toolCallId:e.executionId??``,toolName:e.toolName})),a=i.map((t,r)=>os(e,t,n[r]?.waits));for(let t=0;t<S.length;t++){let r=S[t];r.argumentDecodeError!==void 0||n[t]?.intent||n[t]?.result||await V(e,{kind:`tool-intent`,recordId:`${i[t].actionId}:intent`,...i[t],parameters:r.parameters})}C.journal={continuation:e=>a[e].continuation,settle:e=>a[e].settle(),beforeDispatch:t=>n[t]?.dispatched?Promise.resolve():V(e,{kind:`tool-dispatch`,recordId:`${i[t].actionId}:dispatch`,...i[t]}),onResult:(t,n)=>V(e,{kind:`tool-result`,recordId:`${i[t].actionId}:result`,...i[t],result:n,loadedDeferredTools:h.getLoadedDeferredTools()}),beforeEffect:(t,n)=>a[t].admit(()=>V(e,{kind:`tool-effect-start`,recordId:`${i[t].actionId}:effect-start`,...i[t],parameters:n}))},C.recoveredResults=new Map(n.flatMap((e,t)=>e?.result?[[t,e.result]]:[]))}d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:x,mode:C.mode,maxConcurrency:C.maxConcurrency,requestCount:S.length,tools:S.map(e=>e.toolName)}),S.forEach((e,t)=>{d?.(`tool_execution_request`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.argumentDecodeError===void 0?e.parameters:{argumentDecodeError:e.argumentDecodeError},ownerPath:e.ownerPath})});let w=await h.executeTools(C),ee=w.results.filter(es).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);w.results.forEach((e,t)=>{d?.(`tool_execution_result`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})});let T=w.results.filter(e=>!es(e)&&!ts(e));s.toolsExecuted.push(...T.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName})),s.toolCallOutcomes.push(...T.map(e=>({...e.executionId===void 0?{}:{id:e.executionId},name:e.toolName??``,success:e.success})));let E=m?.recovery?.checkpoint.contextLimit??Ri(l?.defaultModel?.model??``),te=t.getMessages().length,ne=ns(e,w,t,i,g,{contextLimit:E,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(te).forEach((e,t)=>{d?.(`tool_message_committed`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,message:e}),d?.(`history_mutation`,{executionId:r,conversationId:n,round:i,batchId:x,mutation:`append_message`,index:te+t,message:e})}),_.emitToolResultsEvents(e,w,s.toolsExecuted,n,r,i,a,o),_.clearToolEventServices(),{...ne,unknownToolFailureCount:ee.length,unknownToolNames:ee}}async function us(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=Ko(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,mr(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=Oo(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(A.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})}),Zo(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]`),st(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),lt(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},xr=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 br(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 Sr(){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 Cr(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 wr=class extends zt{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=Sr(),r=await this.withRetry(async()=>(n=Sr(),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),Cr(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=Sr(),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);Cr(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 Tr=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function Er(e){return Tr.test(e)?e:void 0}var Dr=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Or(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new oe(`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 oe(`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 oe(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function kr(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 Ar(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 jr(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Mr(e,t,n,r){let{listenerCounts:i,totalListeners:a}=jr(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 Nr(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new oe(`Maximum listeners (${a}) exceeded for event type: ${t}`,o,{eventType:t,currentListeners:s.length});s.push({id:n,listener:r,once:i?.once??!1,...i?.filter&&{filter:i.filter}})}function Pr(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 Fr(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 Ir=class extends Rt{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 Dr,Or(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??Ot.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=Fr(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 Nr(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 Pr(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 Ar(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>kr(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 Mr(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 Lr=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var Rr=class{tools=new Map;register(e){if(!e.schema?.name)throw new d(`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 d(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new d(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new d(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new d(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))zr(t,n);if(e.parameters.required){let t=e.parameters.properties||{};for(let n of e.parameters.required)if(!t[n])throw new d(`Required parameter "${n}" is not defined in properties`)}}};function zr(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new d(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>zr(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new d(`Parameter "${e}" must declare a type or anyOf`);if(!Lr.includes(t.type))throw new d(`Parameter "${e}" has invalid type "${t.type}"`);if(t.properties)for(let[n,r]of Object.entries(t.properties))zr(`${e}.${n}`,r);t.items&&zr(`${e}[]`,t.items)}function Br(e,t,n){let r=Kn(n,t,`$`);if(r.length>0)throw new l(`output does not match the declared outputSchema: ${r.join(`; `)}`,e,void 0,{outputSchemaIssues:r})}function Vr(e,t,n){let r=Hr(e,t,n);return r?[r]:Kn(n,t,`Parameter "${e}"`)}function Hr(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 ${Ur(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${Ur(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${Ur(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${Ur(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${Ur(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 Ur(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function Wr(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(...Vr(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...Vr(t,a,e))}return i}function Gr(e,t,n,r){let i=Wr(e,t,n,r);return{isValid:i.length===0,errors:i}}var Kr=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)}},qr=class extends Kr{emit(e,t,n){}};const Jr=new qr;function Yr(e){return e===Jr||e instanceof qr}function Xr(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 Zr(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var Qr=class extends Kr{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??Zr()},i=Xr(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 Qr(e,t)}function $r(e,t){return U(e,t)}var ei=class extends Kr{emit(e,t,n){this.notifyListeners(e,t,n)}};const ti={COMPLETED:`span_completed`},ni={COMPLETED:`provider_call_completed`},ri={SWITCHED:`provider_fallback`};function ii(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 ai={COMPLETED:`tool_body_completed`},oi={COMPLETED:`tool_queue_completed`},si={DECIDED:`tool_permission_decided`},ci=`span`;var li=class e{resultExecutor;schema;fn;eventService;constructor(e,t,n){this.resultExecutor=n,this.schema=e,this.fn=t,this.validateConstructorInputs()}static fromResult(t,n){return new e(t,async(e,r)=>{let i=await n(e,r);if(!i.success)throw new l(i.error??`Tool execution failed`,t.name);if(i.data===void 0)throw new l(`Tool execution succeeded but returned no data`,t.name);return i.data},n)}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(e,t){let n=this.schema.name;if(!this.validate(e))throw new d(`Invalid parameters for tool "${n}": ${Wr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let r=Date.now(),i,a;try{this.resultExecutor?(a=await this.resultExecutor(e,t),i=a.data):i=await this.fn(e,t)}catch(r){throw R(r)||r instanceof l||r instanceof d?r:new l(`Function tool execution failed: ${r instanceof Error?r.message:String(r)}`,n,r instanceof Error?r:Error(String(r)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let o=Date.now()-r;this.schema.outputSchema&&(!a||a.success)&&Br(n,i,this.schema.outputSchema);let s=t?.instanceEventService??this.eventService;if(s){let e={timestamp:new Date,spanId:Zr(),durationMs:o,op:n};s.emit(ti.COMPLETED,e)}return a||{success:!0,data:i,metadata:{executionTime:o,toolName:n,parameters:e}}}validate(e){return Wr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return Gr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new d(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new d(`Tool function is required and must be a function`);if(!this.schema.name)throw new d(`Tool schema must have a name`)}};const ui=`at least one tool must stay resident; all tools cannot be deferred`,di=`a tool schema was withheld but no ${Pe} tool is offered; register the loader or turn tool search off`;function fi(e){return e.deferLoading===!0}function pi(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!fi(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(ui);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(di);return r}function mi(e){if(e.length>0&&e.every(fi))throw Error(ui)}var hi=class extends Ye{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 gi(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 _i(e){if(!e.name)throw new m(`Agent name is required`,{component:`ConversationAgent`});if(!e.aiProviders||e.aiProviders.length===0)throw new m(`At least one AI provider is required`,{component:`ConversationAgent`});if(!e.defaultModel)throw new m(`Default model configuration is required`,{component:`ConversationAgent`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new m(`Default model must specify both provider and model`,{component:`ConversationAgent`});let t=e.aiProviders.map(e=>e.name),n=t.filter((e,n)=>t.indexOf(e)!==n);if(n.length>0)throw new m(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`ConversationAgent`,duplicates:n});if(!t.includes(e.defaultModel.provider))throw new m(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`ConversationAgent`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var vi=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 m(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],n=this.getEventService();for(let r of e){n&&r.setEventService(n),this.getTools().addResultTool(r.schema,async(e,t)=>{if(!t)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return gi(r,e,t)},r.provenance);let e=r.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let r=this.getConfig();r.tools=e,this.setConfig(r);let i=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(A.CONFIG_UPDATED,{parameters:{tools:t,systemMessage:r.systemMessage,provider:r.defaultModel.provider,model:r.defaultModel.model,temperature:r.defaultModel.temperature,maxTokens:r.defaultModel.maxTokens},metadata:{version:i}}),{version:i}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);if(e.name!==void 0){this.setConfig({...this.getConfig(),name:e.name});let t=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),{version:t}}throw new m("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 m(`Both provider and model are required`,{component:`ConversationAgent`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new m(`AI Provider '${e.provider}' not found. Available: ${n.join(`, `)}`,{component:`ConversationAgent`,provider:e.provider,availableProviders:n});t.setCurrentProvider(e.provider,e.model);let r=this.getConfig();this.setConfig({...r,defaultModel:{...r.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.effort!==void 0&&{effort:e.effort}}}),this.logger.debug(`Model configuration updated`,e)}getModel(){let e=this.getAIProviders().getCurrentProvider();if(!e)throw new m(`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 gi(e,t,n)},e.provenance),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},yi=class extends Xe{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new Rr,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 li(e,t);this.registry.register(n),k.debug(`Tool "${e.name}" registered successfully`)}addResultTool(e,t,n){this.ensureInitialized();let r=li.fromResult(e,t);Object.defineProperty(r,"provenance",{value:qe(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 pi(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=>fi(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 l(`Tool "${e}" is not registered, so it cannot be loaded`,e);return t});for(let e of t)fi(e)&&this.loadedDeferredTools.add(e.name);return t}async executeTool(e,t,n){let r=await this.executeToolResult(e,t,n);if(!r.success)throw new l(r.error||`Tool execution failed`,e);if(r.data===void 0)throw new l(`Tool execution succeeded but returned no data`,e);return r.data}async executeToolResult(e,t,n){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new l(`Tool "${e}" is not in the allowed tools list`,e);let r=this.registry.get(e);if(!r)throw new l(`Tool "${e}" is not registered`,e);let i=qe(r.provenance),a;try{a=await r.execute(t,n)}catch(t){throw R(t)?t:t instanceof Error?new l(t.message,e,t):new l(String(t),e)}return Je(a,i)}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 bi(e){let t=xi(e.metadata),n=Ci(e.usage);return t??n}function xi(e){if(!e)return;let t=Ci({inputTokens:wi(e,`inputTokens`),outputTokens:wi(e,`outputTokens`),promptTokens:wi(e,`promptTokens`),completionTokens:wi(e,`completionTokens`),totalTokens:wi(e,`totalTokens`),cacheReadTokens:wi(e,`cacheReadTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return Si(n);if(Ei(n))return Ci(n)}function Si(e){try{return Ci(JSON.parse(e))}catch{return}}function Ci(e){if(!e)return;let t=Ti(e.inputTokens,e.promptTokens),n=Ti(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=Ti(e.totalTokens),i=Ti(e.cacheReadTokens),a=i!==void 0&&i>=0&&i<=t;return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r},...a&&{cacheReadTokens:i}}}function wi(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Ti(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function Ei(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}const Di=4;function Oi(e){return Math.ceil(JSON.stringify(e).length/4)}function ki(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function Ai(e,t={}){let n=Oi(e),r=ji(e),i=r?.tokens,a=Mi(t.usageFloorTokens);return{usedTokens:r?.index===e.length-1?Math.max(i??0,a??0):Math.max(n,i??0,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function ji(e){for(let t=e.length-1;t>=0;t--){let n=bi(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function Mi(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const Ni=O(`agent-core:models`),Pi=new Set;function Fi(e,t,n){let r=`${e}:${t}`;Pi.has(r)||(Pi.add(r),Ni.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 Ii=2e5,Li=new Map;function Ri(...e){for(let t of e){let e=Li.get(t.id);e&&!zi(e,t)&&Ni.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)`),Li.set(t.id,t)}}function zi(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function Bi(e){return Li.get(e)}function Vi(e){let t=Bi(e)?.contextWindow;return t===void 0?(Fi(e,`context window`,Ii),Ii):t}const Hi=16384;function Ui(e){let t=Bi(e)?.maxOutput;return t===void 0?(Fi(e,`max output`,Hi),Hi):t}function Wi(e){return Bi(e)?.name??e}function Gi(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 Ki(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(fi);return i.length===0?`off`:i.length>15||ki(i)/Vi(t)>=.1?`on`:`off`}function qi(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Ji(e){let t=new yi({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:Ki(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var Yi=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)}},Xi=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 m(`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 Zi(e){return{moduleManager:new Yi(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new Xi(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new vi(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 Qi={ASSIGNED:`assigned`,COMPLETED:`completed`},$i=`task`,ea={MESSAGE:`message`,INPUT:`input`},ta=`user`;function na(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 ra(e,t,n,r,i){Yr(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:kt,ownerId:t,ownerPath:aa(t,n)})}function ia(){return new Ir({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 aa(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function oa(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.driverId&&{driverId:t.driverId},...t.turnSource&&{turnSource:t.turnSource},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},awaitProviderSettlement:t.awaitProviderSettlement,...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.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 sa(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,oa(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*ca(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,oa(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 la(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function ua(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 da(e,t,n,r){let i=(n.outputRetries??2)+1,a=la(r),o=t,s=[];for(let t=1;t<=i;t++){let c=pa(r,await sa(e,o,n,a));if(c.success)return c.value;s=c.issues,e.logger.debug(`Structured output validation failed`,{attempt:t,maxAttempts:i,issues:s}),t<i&&(o=ua(r,s))}throw new u(`response failed schema validation after ${i} attempt(s)`,s,i)}async function*fa(e,t,n,r){let i=(n.outputRetries??2)+1,a=la(r),o=t,s=[];for(let t=1;t<=i;t++){let c=pa(r,yield*ca(e,o,n,a));if(c.success)return c.value;s=c.issues,e.logger.debug(`Structured output validation failed (stream)`,{attempt:t,maxAttempts:i,issues:s}),t<i&&(o=ua(r,s))}throw new u(`response failed schema validation after ${i} attempt(s)`,s,i)}function pa(e,t){let n=Xn(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 ma(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 ha(e,t){return e.getConversationStore(t).getHistory()}function ga(e,t,n){e.getConversationStore(t).addEntry(n)}function _a(e,t){e.getConversationStore(t).clear()}function va(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 ya(e,t,n){e.getConversationStore(t).addMessage(n)}var ba=class extends Xe{providers=new Map;currentProvider;currentModel;constructor(){super({readyOnConstruction:!0})}async doInitialize(){k.debug(`AIProviders initialized`)}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),k.debug(`Closed AI provider: ${e}`)}catch(t){k.warn(`Failed to close AI provider ${e}`,{error:t instanceof Error?t.message:String(t)})}this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0,k.debug(`AIProviders disposed`)}addProvider(e,t){this.ensureInitialized();let n=Gt.validateProviderName(e);if(!n.isValid)throw new d(`Invalid provider name: ${n.errors.join(`, `)}`);if(!t||typeof t!=`object`||Array.isArray(t))throw new d(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new d(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new d(`Provider must have a chat method`);this.providers.has(e)&&k.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),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);t?.close&&t.close().catch(t=>{k.warn(`Failed to close provider ${e}`,{error:t.message})}),this.providers.delete(e),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)}getProviders(){return this.ensureInitialized(),Object.fromEntries(this.providers)}setCurrentProvider(e,t){if(this.ensureInitialized(),!this.providers.get(e))throw new m(`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)}getProviderNames(){return this.ensureInitialized(),Array.from(this.providers.keys())}getProvidersByPattern(e){this.ensureInitialized();let t=typeof e==`string`?new RegExp(e):e,n={};for(let[e,r]of this.providers)t.test(e)&&(n[e]=r);return n}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return!1;let n=this.providers.get(t);return!!(n&&typeof n.chatStream==`function`)}getProviderCount(){return this.ensureInitialized(),this.providers.size}},xa=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 de(`SHA-256`,`TEXT`);return t.update(e),t.getHash(`HEX`)}},Sa=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new xa;hits=0;misses=0;constructor(e){this.maxEntries=e.maxEntries,this.ttlMs=e.ttlMs}get(e){let t=this.cache.get(e);if(!t){this.misses++;return}if(Date.now()-t.timestamp>this.ttlMs){this.cache.delete(e),this.removeFromAccessOrder(e),this.misses++;return}let n=this.keyBuilder.computeIntegrityHash(t.response);if(t.integrityHash!==n)throw this.cache.delete(e),this.removeFromAccessOrder(e),new x(`Integrity check failed for cache entry ${e}`,{hash:e,expected:n,actual:t.integrityHash});return this.touchAccessOrder(e),this.hits++,t}set(e){let t=e.key.hash;!this.cache.has(t)&&this.cache.size>=this.maxEntries&&this.evictLRU(),this.cache.set(t,e),this.touchAccessOrder(t)}delete(e){return this.cache.has(e)?(this.cache.delete(e),this.removeFromAccessOrder(e),!0):!1}clear(){this.cache.clear(),this.accessOrder.length=0,this.hits=0,this.misses=0}getStats(){let e=this.hits+this.misses;return{hits:this.hits,misses:this.misses,entries:this.cache.size,hitRate:e===0?0:this.hits/e}}touchAccessOrder(e){this.removeFromAccessOrder(e),this.accessOrder.push(e)}removeFromAccessOrder(e){let t=this.accessOrder.indexOf(e);t!==-1&&this.accessOrder.splice(t,1)}evictLRU(){let e=this.accessOrder.shift();e&&this.cache.delete(e)}},Ca=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 wa(e){return`executionId`in e||`toolName`in e}function Ta(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 Ea(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 Da(e,t,n,r){e.emitExecution(j.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:Ta(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 Oa(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:Ta(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(Ta(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 ka(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 Aa=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(oi.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 ja(e){e.wake?.(),e.changed=new Promise(t=>{e.wake=t})}function Ma(e){let t=new Set;for(let n of e.requests){let{executionId:e}=La(n);if(t.has(e))throw new d(`Scheduling requires unique call IDs`);t.add(e)}let n=new Map;for(let[r,i]of e.scheduling){if(!t.has(r))throw new d(`Scheduling names an unknown call: ${r}`);let e=[...i.dependsOn??[]];for(let n of e)if(!t.has(n))throw new d(`Scheduling dependency is unknown: ${n}`);let a=i.resources?.map(e=>{if(typeof e.key!=`string`||!e.key.trim()||e.access!==`read`&&e.access!==`write`)throw new d(`Scheduling requires nonempty resource identities and read/write access`);return{key:e.key,access:e.access}});n.set(r,{dependsOn:e,...a===void 0?{}:{resources:a}})}let r=new Set;for(;r.size<t.size;){let e=r.size;for(let e of t)(n.get(e)?.dependsOn??[]).every(e=>r.has(e))&&r.add(e);if(r.size===e)throw new d(`Scheduling dependencies contain a cycle`)}return n}function Na(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 Pa(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 Fa(e,t,n){let r=e.requests[t];e.queue.end(r,`not-dispatched`),La(r);let i=Pa(r,{executionId:r.executionId,toolName:r.toolName,success:!1,result:null,error:n,metadata:{errorCode:Pt,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 Ia(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(Wa)&&!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=>Na(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 Fa(e,a,o);n.resultsByIndex[a]=t,n.errorsByIndex[a]=Ha(t)}else await Ka(e,t,n,a)}catch(e){if(!R(e))throw e;let t=Qt(n.fatalError,e);R(t)&&(n.fatalError=t),e instanceof I||n.abort.abort(e)}finally{n.active.delete(a),ja(n)}}}function La(e){if(!e.executionId)throw new d(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new d(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new d(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function Ra(e,t){let n=La(e),r=H(),i=e.traceContext?_(e.traceContext,r):void 0,a=C(`shell`,e.traceContext,E(r)),o=e.traceContext?C(`hooks`,e.traceContext,e.traceContext.parentSpanId):void 0;return{toolName:e.toolName,parameters:e.parameters,...t?{signal:t}:{},executionId:n.executionId,ownerType:n.ownerType,ownerId:n.ownerId,ownerPath:e.ownerPath,metadata:e.metadata,eventService:e.eventService,baseEventService:e.baseEventService,...e.ask?{ask:e.ask}:{},...e.deferredTools?{deferredTools:e.deferredTools}:{},toolBodyId:r,...i?{outboundTraceContext:i}:{},...a?{shellTraceEnv:a}:{},...o?{hookTraceEnv:o}:{}}}function za(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null,metadata:{dispatchStatus:`not-dispatched`}}}function Ba(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function Va(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:Nt,requestedTool:e.toolName,dispatchStatus:`not-dispatched`}}}function Ha(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function Ua(e){return e!==void 0}function Wa(e){return e!==void 0}function Ga(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 Ka(e,t,n,r){let i=e.requests[r];if(i)try{let a=await Xa(e,t,i,r);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=Ha(a))}catch(e){if(R(e)){let t=Qt(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]=Ba(i,t)}}async function qa(e,t,n){for(;!n.fatalError&&n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await Ka(e,t,n,r)}}async function Ja(e,t){let n=e;if(n.scheduling)try{n={...n,scheduling:Ma(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 Fa(n,e,`Invalid scheduling policy: ${t}; this call was not dispatched`))}return{results:r,errors:r.filter(e=>!e.success).map(Ha)}}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,ja(a);for(let[e,t]of n.recoveredResults??[])a.pending.delete(e)&&(a.resultsByIndex[e]=structuredClone(t),t.success||(a.errorsByIndex[e]=Ha(t)))}let o=Ga(n.requests.length,n.maxConcurrency),s=Array.from({length:o},()=>n.scheduling?Ia(i,t,a):qa(i,t,a));if(await Promise.all(s),a.fatalError)throw a.fatalError;let c=a.resultsByIndex.filter(Ua),l=a.errorsByIndex.filter(Wa);if(!n.scheduling&&l.length>0&&!n.continueOnError)throw l[0];return{results:c,errors:l}}async function Ya(e,t){let n=[],r=[],i=!1;for(let[a,o]of e.requests.entries()){if(i&&!e.recoveredResults?.has(a)){try{La(o)}catch(e){r.push(e instanceof Error?e:Error(String(e)));continue}let t=await Fa(e,a,`Skipped after an earlier call failed; this call was not dispatched`);n.push(t);continue}try{let s=await Xa(e,t,o,a);n.push(s),s.success||r.push(Ha(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 Xa(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=za(n);else if(n.argumentDecodeError!==void 0)a=Va(n);else if(o&&await o.beforeDispatch(r),e.signal?.aborted)a=za(n);else{let i={...Ra(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 Za(e,r,()=>t.executeTool(n.toolName,n.parameters,i))}catch(e){if(R(e))throw e;a=Ba(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=Pa(n,a),await e.journal?.onResult(r,a),a}async function Za(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?Qt(r.error,e):e}}if(`error`in r)throw r.error;return r.result}async function Qa(e,t,n){n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`);let r=new Aa(e.requests,e.recoveredResults),i={...e,queue:r};try{return e.scheduling||e.mode===`parallel`?await Ja(e.mode===`sequential`?{...i,maxConcurrency:1}:i,t):await Ya(i,t)}finally{r.finish()}}var $a=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=ht){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,n,r=`offered`){this.logger.debug(`Executing tool: ${e}`);let i;try{if(!n?.executionId)throw new d(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);i=qe(this.tools.getTool?.(e)?.provenance),n.signal?.throwIfAborted();let a=r===`offered`&&this.tools.getToolSchema(e)?.deferLoading===!0&&!this.tools.isToolOffered(e);if(!this.tools.hasTool(e)||a){let t=(r===`registered`?this.tools.getTools():this.tools.getOfferedTools()).map(e=>e.name).sort(),i=to(e,t,a),o=n.eventService;if(o){let t={timestamp:new Date,toolName:e,error:i};o.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:i,toolName:e,executionId:n.executionId,metadata:{errorCode:Mt,requestedTool:e,availableTools:t}}}let o=n.eventService;if(o){let n={timestamp:new Date,toolName:e,parameters:t};o.emit(M.CALL_START,n)}let{toolName:s,parameters:c,...l}=n,u={...l,deferredTools:this.deferredToolCatalog,toolName:e,parameters:t,executionId:n.executionId},f=Je(this.tools.executeToolResult?await this.tools.executeToolResult(e,t,u):{success:!0,data:await this.tools.executeTool(e,t,u)},i);if(!f.success){let t=f.error||`Tool execution failed`;return o?.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:u.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}`),o){let t={timestamp:new Date,toolName:e,result:p};o.emit(M.CALL_COMPLETE,t),o.emit(M.CALL_RESPONSE_READY,t)}return{success:!0,result:p,...f.parts?{parts:f.parts}:{},...f.metadata?{metadata:f.metadata}:{},toolName:e,executionId:u.executionId}}catch(t){if(R(t))throw t;this.logger.error(`Tool execution failed: ${e}`);let r=t instanceof Error?t:Error(String(t)),a=n?.eventService;if(a&&n?.executionId){let t={timestamp:new Date,toolName:e,error:r.message};a.emit(M.CALL_ERROR,t)}let o=Je({success:!1,error:r.message},i);return{success:!1,error:r.message,...o.parts?{parts:o.parts}:{},...o.metadata?{metadata:o.metadata}:{},toolName:e,executionId:n?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=eo(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:Je({success:!0,metadata:t.metadataFactory?.(e)},qe(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 Qa(e,this,this.logger)}};function eo(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 to(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 ${Pe} 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 no(e,t){try{e()}catch(e){if(t===void 0)throw e}}function ro(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function io(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:At,ownerId:r,ownerPath:i}}function ao(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...io(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:At,ownerId:r,ownerPath:o}}function oo(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:jt,ownerId:i,ownerPath:[...io(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function so(e,t,n,r,i,a){let o=ao(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:At,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function co(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 lo=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=ro(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(Yr(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:jt,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 io(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return ao(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return oo(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return so(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(Yr(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){Ea(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){Da(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){Oa(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){ka(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function uo(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function fo(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 po(e){return e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0}function mo(e,t,n,r,i,a){let o=e.getMessages(),s=fo(o,i.turnMessageId),c=s.filter(po).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:uo(a,f)}:{}}}function ho(e,t,n,r,i,a,o=`round`){return structuredClone({version:1,effectAdmission:`required`,messages:e,round:t.currentRound,contextLimit:Vi(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 go(e,t,n){e.tools!==void 0&&(ke(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function _o(e,t,n,r,i=!1){let a=vo(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw Ut();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(Ut())};o?.addEventListener(`abort`,h,{once:!0});let g=n.onTextDelta,_={...n,signal:s.signal,...g===void 0?{}:{onTextDelta:e=>{m(),g(e)}}};m();try{let n=new Promise((e,t)=>{d=t});return u=(async()=>e(t,_))(),await Promise.race([u,n])}finally{l=!0,f(),o?.removeEventListener(`abort`,h),i&&u&&await u.then(()=>{},e=>{if(e instanceof F)throw e})}}function vo(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function yo(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 bo={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(yo(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(yo(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(yo(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(yo(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(yo(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(yo(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:`${At}.${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=bo[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 xo(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 So(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function Co(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 wo(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 To(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 Eo(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 Do(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:jo(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 Oo(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function ko(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function Ao(e,t,n,r,i,a){return{messages:e,config:t,startTime:n,executionId:r,conversationId:i,...a?.sessionId&&{sessionId:a.sessionId},...a?.userId&&{userId:a.userId},...a?.metadata&&{metadata:a.metadata},...a?.signal&&{signal:a.signal},awaitProviderSettlement:a?.awaitProviderSettlement,...a?.onTextDelta&&{onTextDelta:a.onTextDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.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 jo(e){let t={conversationId:ko(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 Mo(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
|
|
6
|
+
`)}function No(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=Qn({table:r.provider.capabilityTable?.(),model:n,endpointIsVendorDefault:r.provider.endpointIsVendorDefault?.()});if(a.mechanism===`response_schema`)return{messages:t,outcome:{capability:a,sent:`json_schema`,schemaInPrompt:!1}};let o={role:`system`,content:Mo(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 Po(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 Fo(e,t){e.current={provider:t.to.provider,model:t.to.model}}function Io(e,t,n,r){if(e===void 0||e.allowedOrigins.length===0)return;let i=!1;try{i=t.canPropagateTraceContext?.()===!0}catch{i=!1}if(!i){try{e.onPropagationUnavailable?.(n)}catch{}return}return S(e,r)}function Lo(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function Ro(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 zo(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function Bo(e,t,n,r){let i=xo(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 Vo(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;zo(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let f=Bo(d,t,n,i);Co(f.toolChoice,f.tools),go(f,d,n);let{messages:p,outcome:m}=No(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)=>En((e,t)=>(s?.(`invoked`,t.model??d),h(e,Lo(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 _o(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 _o(g,p,f,t.timeout,o||!!u)}function Ho(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 Uo(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 Wo(e){let t=0,n=0,r,i=!1;for(let a of e){if(a.role!==`assistant`)continue;let e=qo(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 Go(e){let t=Wo(e.filter(e=>nt(e)&&e.data!==void 0).map(rt));if(t)return{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}function Ko(){return H()}function qo(e){let t=bi(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 Jo(e){let t=Uo(e).provenance,n=qo(e);return n?{...n,totalTokens:n.inputTokens+n.outputTokens,usageProvenance:t===`complete`?`complete`:`partial`}:{usageProvenance:t}}const Yo=/^peer:[A-Za-z0-9._:-]{1,128}$/,Xo=/<(\/?)(peer_message)/gi;function Zo(e){return e.replace(Xo,`<$1$2`)}function Qo(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function $o(e){return Yo.test(e)?e:`peer:unverified`}function es(e){return e.map(e=>{if(e.type!==`text`)return e;let t=Zo(e.text);return t===e.text?e:{...e,text:t}})}function ts(e){if(e.role===`tool`){let t=Zo(e.content),n=e.parts?es(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=Qo(e),n=Zo(e.content),r=e.parts?es(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="${$o(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function ns(e){return e.map(ts)}async function rs(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=[...ns(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=Po(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},executionId:r,onModelFallback:e=>{Fo(u,e),o.onExecutionEvent?.(ri.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 _o((a,s)=>En((e,n)=>{b.invoked=!0,b.startedAtMs=Date.now();let r=Io(o.traceContext,t.provider,t.currentInfo.provider,y);return t.provider.chat(e,Lo(n,r))},a,s,o.executionJournal?{journal:o.executionJournal,executionId:r,callId:y,checkpoint:ho(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:Ht(e,o.signal)&&(x=`interrupted`),e}finally{let e=b.invoked?Uo(S):{provenance:`absent`};no(()=>{o.onExecutionEvent?.(ni.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),...Jo(S)};e.addAssistantMessage(w,[],T),d=!0,o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:w}),co(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(Ht(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}),co(e,o,r,a,l)}}function is(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 as=.95;function os(e,t,n){let r=Ai(e,{usageFloorTokens:n}),i=Vi(t),a=i*as,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:as*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function ss(e,t,n,r,i,a){let o=n.currentRound,s=os(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}),co(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function cs(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=gr(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 ls(e,t,n,r,i,a,o,s,c,l,u,d,f,p=Po(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 Vo(e,t,n,r,{signal:i.signal,onTextDelta:u,onProviderNativeRawPayload:d,...i.maxTokens!==void 0&&{maxTokens:i.maxTokens},...i.temperature!==void 0&&{temperature:i.temperature},...i.withholdHostedTools===!0&&{nativeWebTools:{webSearch:!1,webFetch:!1}},executionId:s,onModelFallback:e=>{Fo(p,e),_.model=e.to.model,i.onExecutionEvent?.(ri.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=So(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())},()=>Io(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(Ht(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}),co(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`?Uo(v):{provenance:`absent`};no(()=>{i.onExecutionEvent?.(ni.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 us(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function ds(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function fs(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=>wa(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=Mt,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=Nt,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&&(us(u)||ds(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=Ai(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 ps(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))&&hs(),t.add(e);try{if(Array.isArray(e))return`[${Array.from(e,n).join(`,`)}]`;Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null&&hs();let t=Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t));return t.length!==Reflect.ownKeys(e).length&&hs(),`{${t.map(([e,t])=>`${JSON.stringify(e)}:${n(t)}`).join(`,`)}}`}finally{t.delete(e)}}return n(e)}function ms(e){(!e||typeof e!=`object`||Array.isArray(e))&&hs(),ps(e)}function hs(){throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool continuations require finite plain JSON objects`)}function gs(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`);ms(n.data);let t=ps([n.kind,n.data]),c=i.find(e=>ps([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 _s(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`);ms(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(ps(a.response)!==ps(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 vs(e,t,n){for(let r of e){let e=r.function?.name??`unknown`,i=`${e}::${typeof r.function?.arguments==`string`?r.function.arguments:JSON.stringify(r.function?.arguments??{})}`,a=(t.sameToolInputCounts.get(i)??0)+1;if(t.sameToolInputCounts.set(i,a),a>n)throw new ae(e,a,n)}}async function ys(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m){let{toolExecutionService:h,logger:g,eventEmitter:_}=c,v=f??l?.maxSameToolInputs;v!==void 0&&vs(e,s,v),g.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:i,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let y=_.buildThinkingOwnerContext(n,r,a,o).ownerPath,b=e.length,x=`${a}`,S=h.createExecutionRequestsWithContext(e,{ownerPathBase:y,metadataFactory:e=>({conversationId:n,round:i,directParentId:a,batchId:x,expectedCount:b,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:_.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:_.getBaseEventService(),...p?{traceContext:p}:{}}}),C=l?.toolExecutionPolicy?.(structuredClone(e)),w={requests:S,mode:C?.mode??`parallel`,maxConcurrency:C?.maxConcurrency??5,continueOnError:C?.continueOnError??!0,scheduling:C?.scheduling??new Map,signal:u};if(w.lifecycle={beforeDispatch:async(e,t)=>{let i=S[e];if(m?.recovery?.actions.get(i.executionId??``)?.dispatched)return;let a={toolData:t,executionContext:{executionId:r,sessionId:n}};await W(c.plugins,`beforeToolCall`,a,g),await W(c.plugins,`beforeToolExecution`,a,g)},onResult:async(e,t,i)=>{await W(c.plugins,`afterToolCall`,{toolData:t,toolResult:i,executionContext:{executionId:r,sessionId:n}},g)}},m){let{journal:e,parentCallId:t}=m,n=S.map(e=>m.recovery?.actions.get(e.executionId??``)),i=S.map(e=>({actionId:m.recovery?.actions.get(e.executionId??``)?.actionId??H(),parentCallId:t,executionId:r,toolCallId:e.executionId??``,toolName:e.toolName})),a=i.map((t,r)=>gs(e,t,n[r]?.waits));for(let t=0;t<S.length;t++){let r=S[t];r.argumentDecodeError!==void 0||n[t]?.intent||n[t]?.result||await V(e,{kind:`tool-intent`,recordId:`${i[t].actionId}:intent`,...i[t],parameters:r.parameters})}w.journal={continuation:e=>a[e].continuation,settle:e=>a[e].settle(),beforeDispatch:t=>n[t]?.dispatched?Promise.resolve():V(e,{kind:`tool-dispatch`,recordId:`${i[t].actionId}:dispatch`,...i[t]}),onResult:(t,n)=>V(e,{kind:`tool-result`,recordId:`${i[t].actionId}:result`,...i[t],result:n,loadedDeferredTools:h.getLoadedDeferredTools()}),beforeEffect:(t,n)=>a[t].admit(()=>V(e,{kind:`tool-effect-start`,recordId:`${i[t].actionId}:effect-start`,...i[t],parameters:n}))},w.recoveredResults=new Map(n.flatMap((e,t)=>e?.result?[[t,e.result]]:[]))}d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:x,mode:w.mode,maxConcurrency:w.maxConcurrency,requestCount:S.length,tools:S.map(e=>e.toolName)}),S.forEach((e,t)=>{d?.(`tool_execution_request`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.argumentDecodeError===void 0?e.parameters:{argumentDecodeError:e.argumentDecodeError},ownerPath:e.ownerPath})});let T=await h.executeTools(w),E=T.results.filter(us).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);T.results.forEach((e,t)=>{d?.(`tool_execution_result`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})});let D=T.results.filter(e=>!us(e)&&!ds(e));s.toolsExecuted.push(...D.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName})),s.toolCallOutcomes.push(...D.map(e=>({...e.executionId===void 0?{}:{id:e.executionId},name:e.toolName??``,success:e.success})));let ee=m?.recovery?.checkpoint.contextLimit??Vi(l?.defaultModel?.model??``),te=t.getMessages().length,ne=fs(e,T,t,i,g,{contextLimit:ee,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(te).forEach((e,t)=>{d?.(`tool_message_committed`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,message:e}),d?.(`history_mutation`,{executionId:r,conversationId:n,round:i,batchId:x,mutation:`append_message`,index:te+t,message:e})}),_.emitToolResultsEvents(e,T,s.toolsExecuted,n,r,i,a,o),_.clearToolEventServices(),{...ne,unknownToolFailureCount:E.length,unknownToolNames:E}}async function bs(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=ns(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,_r(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=Ro(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})}),ss(m,o,e,n,u,{fullContext:a,executionId:i,conversationId:r}))return!0;p>1&&a.onTextDelta?.(`
|
|
7
7
|
|
|
8
|
-
`),n.beginAssistant();let b=Io(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S,settleStreamingChunkHooks:C}=Qo(a,n,i,p,l,u),w=wo(s,o.defaultModel.model,i),ee=H(),T;try{T=await $o(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),w,ee,a.executionJournal?io(m,e,a,o,t,c.toolExecutionService.getLoadedDeferredTools()):void 0)}finally{await C()}if(T===null)return!0;let{assistantResponse:E,assistantToolCalls:te}=Mo(T,i,a.conversationId,p,u);if(te.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:T},u),await W(l,`onMessageAdded`,{message:T},u);let ne=typeof E.content==`string`&&E.content.trim().length>0;if(te.length===0&&!ne)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let re=Ro(E),ie=re.inputTokens??0;ie>0&&(e.cumulativeInputTokens=ie);for(let e of te)n.appendToolCall(e);let ae=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(ae,{round:p,usageObservationId:b,executionId:i,providerId:G(w,s),providerCallId:ee,modelId:K(w,s.aiProviderInfo.model),...re});let oe=n.getMessages().at(-1);return a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:E}),oe&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:oe}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=E,te.length===0?(u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(E,i,p,r,v,y),!0):Jo(await ls(te,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:ee}:void 0),e,u)?!0:(u.debug(`Round ${p} completed for agent ${a.conversationId}`),!1)}function ds(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 fs(e,t){return t===0||e<t}async function ps(e,t,n,r,i,a,o,s,c,l=!1){let u=ds(i,r);for(;!l&&!o.forcedSummaryInstruction&&fs(o.currentRound,u)&&!(s?.aborted||(o.currentRound++,await us(o,u,e,t,n,r,i,a,c))||s?.aborted););let d=e.getMessages(),f=d.length>0?d[d.length-1]:void 0,p=f?.role===`assistant`&&typeof f.content==`string`&&f.content.length>0&&(!(`toolCalls`in f)||f.toolCalls.length===0);if(!s?.aborted){if(r.allowToolOnlyCompletion===!0){let e=f?.role===`tool`;if(!p&&!e)throw new m(o.currentRound,{conversationId:t,executionId:n});return}p||await qo(e,a,i,n,o,t,r,c.logger,u,r.executionJournal?c.toolExecutionService.getLoadedDeferredTools():void 0)}}async function ms(e,t,n,r,i,a,o,s,c,l,u,d){let f={...ro(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(A.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 hs(e,t,n,r=!0){try{return gs(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 gs(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`),is(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`),is(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;(!i.intent&&t.metadata?.errorCode!==`argument_decode_error`||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 _s(e){throw new L(`EXECUTION_RECOVERY_CONFLICT`,e)}function vs(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,...Ro(e.response),executionId:t.executionId,providerCallId:t.callId,round:e.checkpoint.round}}}function ys(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 bs(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))&&_s(`Current history differs from the saved runtime checkpoint`);let a=e.slice(i.length);if(!a.length)return;ys(a[0],vs(t,n),n.callId,n.executionId)||_s(`Current assistant does not match the saved response`);let o=t.response.toolCalls??[];a.length>o.length+1&&_s(`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||_s(`History contains a tool result without durable settlement`),n}),l=new _r;for(let e of i)l.addMessage(e);l.addMessage(a[0]),ns(s,{results:c,errors:[]},l,t.checkpoint.round,r.logger,{contextLimit:t.checkpoint.contextLimit,cumulativeInputTokens:xs(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)&&_s(`Existing tool result conflicts with the durable result`)}}function xs(e){let t=Ro(e.response).inputTokens??0;return t>0?t:e.checkpoint.cumulativeInputTokens}async function Ss(e,t,n,r,i){let a=q(e.getMessages()),o=()=>{(a!==q(e.getMessages())||e.hasPendingAssistant())&&_s(`History changed during execution recovery`)};o();let s=i?.records??await n.journal.read(n.executionId),c=i?.batch??hs(s,n.executionId,n.callId);n.signal?.throwIfAborted(),o();let l=structuredClone(e.getMessages());bs(l,c,n,r);let u=await ss(s,n);u.length!==s.length&&(c=hs(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 _r;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(vs(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:xs(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=Jo(await ls(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())&&_s(`History changed while announcing execution recovery`);if(n.signal?.aborted)throw Bt(`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 Cs(e,t,n,r){let{executionId:i,callId:a,messages:o}=await Ss(e,t,n,r);return{executionId:i,callId:a,messages:o}}function X(e){throw new L(`EXECUTION_RECOVERY_INVALID`,e)}function ws(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 Ts(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=hs(s,n.executionId,c.callId,!1),u=ws(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 Ss(e,t,{...n,callId:c.callId},a,{batch:l,records:s}),h=bo(e.getMessages(),f,new Date(u.startedAt),n.executionId,t,{...u.options,signal:n.signal,executionJournal:n.journal,onTextDelta:n.onTextDelta,onExecutionEvent:n.onExecutionEvent,traceContext:n.traceContext});a.eventEmitter.prepareOwnerPathBases(t);try{if(await ps(e,t,n.executionId,h,f,p,m.state,n.signal,a,m.stop||u.kind===`summary`),n.signal?.aborted)throw Bt(`Execution continuation interrupted`,n.signal.reason);return ro(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*Es(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 Ds(e,t,n){return{executionId:e,...t===void 0?{}:{driverId:t},...n===void 0?{}:{turnSource:n}}}var Os=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new Ua(t),this.aiProviders=e,this.tools=t,this.conversationHistory=n,this.plugins=[],this.logger=D(`ExecutionService`),!r)throw Error(`[EXECUTION] EventService is required`);this.eventEmitter=new $a(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 Ts(this.conversationHistory.getConversationStore(e),e,t,n,e=>mo(this.aiProviders,this.tools,e),{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService})}resumeToolCalls(e,t){return Cs(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=vo(),a=new Date,o=yo(r,`execute`),s=bo(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=mo(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=go(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,Ds(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);ho(c);for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await ps(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),ms(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 zt(e,r?.signal)?{...ro(l,i,a,d.toolsExecuted,{turnMessageId:u,interrupted:!0}),interrupted:!0}:(await _o(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*Es(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 ks(e){let t=new _a;if(e.aiProviders)for(let n of e.aiProviders)t.addProvider(n.name,n);return e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),t}async function As(e){let{config:t,aiProviders:n,tools:r,agentFactory:i,conversationHistory:a,moduleRegistry:o,eventEmitter:s,eventService:c,logger:l}=e;if(l.debug(`Starting Robota initialization with independent managers`),await Promise.all([n.initialize(),r.initialize(),i.initialize()]),t.modules){for(let e of t.modules)await o.registerModule(e,{autoInitialize:!0,validateDependencies:!0});l.debug(`Modules registered and initialized`,{moduleCount:t.modules.length,moduleNames:t.modules.map(e=>e.name)})}if(t.tools)for(let e of t.tools)e instanceof Lt&&c&&e.setEventService(c),r.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let r=await pi(e,t,n);return fi(e.schema.name,r)}),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new ba(new ya({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new va));let d=new Os(n,r,a,c,t.executionContext,u);if(t.ask&&d.setAskHandler(t.ask),t.plugins)for(let e of t.plugins)d.registerPlugin(e),e.subscribeToModuleEvents&&(await e.subscribeToModuleEvents(s),l.debug(`Plugin subscribed to module events`,{pluginName:e.name}));return l.debug(`Robota initialization completed successfully with independent managers`),d}async function js(e){try{let t=await As(e.ctx);e.setExecutionService(t),e.setFullyInitialized(!0)}catch(t){throw e.ctx.logger.error(`Robota initialization failed`,{error:t instanceof Error?t.message:String(t)}),t}}function Ms(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 Robota instance`,{name:e.name});let t=[],n=async(n,r)=>{try{await r(),e.logger.debug(n)}catch(r){let i=r instanceof Error?r:Error(String(r));t.push(i),e.logger.error(`Error during Robota destruction step`,{step:n,error:i.message})}};if(e.isFullyInitialized&&e.moduleRegistry&&await n(`All modules disposed`,()=>e.moduleRegistry.disposeAllModules()),e.executionService){let t=e.executionService.getPlugins();for(let e of t)await n(`Plugin disposed: ${e.name}`,()=>e.dispose());e.logger.debug(`ExecutionService plugins cleaned up`)}return e.moduleRegistry&&await n(`ModuleRegistry cleared`,()=>e.moduleRegistry.clearAllModules()),e.eventEmitter&&await n(`EventEmitter disposed`,()=>e.eventEmitter.dispose()),await n(`Tools disposed`,()=>e.tools.dispose()),await n(`AIProviders disposed`,()=>e.aiProviders.dispose()),e.resetState(),t.length===0?e.logger.info(`Robota instance destroyed successfully`,{name:e.name}):e.logger.warn(`Robota instance destroyed with cleanup failures`,{name:e.name,failureCount:t.length}),{errors:t}}var Ps=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(),Fs(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 Fs(e,t){let n=e.reason;return zt(n)&&n.name===`AbortError`?n:Bt(t?`Run aborted while queued behind another run on this instance`:`Run aborted before it started`,n)}function Is(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??Rs,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function Ls(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new b(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel,r=n?.model??t.defaultModel;if(!r)throw new b(`No model specified: set config.defaultModel.model or the AgentFactory defaultModel option`);let i=n?.provider??e.aiProviders[0]?.name??t.defaultProvider;if(!i)throw new b(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||Rs(),name:e.name||`Unnamed Agent`,aiProviders:e.aiProviders,defaultModel:{provider:i,model:r,temperature:n?.temperature??.7,...n?.maxTokens!==void 0&&{maxTokens:n.maxTokens},...n?.topP!==void 0&&{topP:n.topP}},systemMessage:e.systemMessage??t.defaultSystemMessage,tools:e.tools||[],plugins:e.plugins||[],metadata:e.metadata||{},...e.logging&&{logging:e.logging},...e.conversationId&&{conversationId:e.conversationId},...e}}function Rs(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function zs(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var Bs=class{templates=new Map;logger;constructor(){this.logger=D(`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 Vs(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 Hs(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function Us(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 Ws(e,n.name,r)}t.push(n)}}function Ws(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 Bs,this.logger=D(`AgentFactory`),this.options=Is(e),this.activeAgents=new Map,this.creationStats={totalCreated:0,activeCount:0,fromTemplates:0,customConfigured:0,templateUsageRatio:0},this.lifecycleEvents=t,this.logger.debug(`AgentFactory initialized`,{maxConcurrentAgents:this.options.maxConcurrentAgents,strictValidation:this.options.strictValidation,hasDefaultModel:!!this.options.defaultModel,hasDefaultProvider:!!this.options.defaultProvider,hasLifecycleEvents:this.lifecycleEvents!==null})}async initialize(){this.initialized||(this.logger.debug(`Initializing AgentFactory`),this.initialized=!0,this.logger.debug(`AgentFactory initialization completed`))}async createAgent(e,t,n=!1){let r,i=this.admit();try{r=Ls(t,this.options);let a=r;if(this.options.strictValidation){let e=Ut(r);if(!e.isValid)throw new d(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let o;if(await Us([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(a)},{name:`construct`,run:()=>{o=new e(a)}},{name:`initialize`,run:()=>o?Vs(o)?.initialize?.():void 0,undo:()=>o?Vs(o)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!o)throw new b(`Agent was not constructed`);this.activeAgents.set(i,o),zs(this.creationStats,n)},undo:()=>{this.activeAgents.delete(i),this.creationStats.activeCount--,this.creationStats.totalCreated--,n?this.creationStats.fromTemplates--:this.creationStats.customConfigured--}},{name:`afterCreate`,run:()=>o?this.lifecycleEvents.afterCreate?.(o,a):void 0}]),this.pendingAgents.delete(i),!o)throw new b(`Agent was not constructed`);return this.logger.info(`Agent created successfully`,{agentId:i,model:r.defaultModel.model,provider:r.defaultModel.provider}),o}catch(e){this.pendingAgents.delete(i);let n=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&r&&await this.lifecycleEvents.onCreateError(n,r),this.logger.error(`Failed to create agent`,{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}admit(){if(this.activeAgents.size+this.pendingAgents.size>=this.options.maxConcurrentAgents)throw new 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 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,n={}){let r=this.agentTemplates.getTemplate(t);if(!r)throw new b(`Template not found: ${t}`);let i=this.applyTemplate(r,n);i.warnings.length>0&&this.logger.warn(`Template application warnings`,{templateId:t,warnings:i.warnings});let a=await this.createAgent(e,i.config,!0);return this.logger.info(`Agent created from template`,{templateId:t,modified:i.modified,warnings:i.warnings.length}),a}registerTemplate(e){this.agentTemplates.registerTemplate(e)}unregisterTemplate(e){return this.agentTemplates.unregisterTemplate(e)}getTemplates(){return this.agentTemplates.getTemplates()}getTemplate(e){return this.agentTemplates.getTemplate(e)}findTemplates(e){return this.agentTemplates.findTemplates(e)}applyTemplate(e,t={}){return this.agentTemplates.applyTemplate(e,t)}async destroyAgent(e){let t=this.activeAgents.get(e);if(!t)return!1;try{return await Vs(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 Ut(e)}};function Ks(e,t,n){if(!e.name||e.name.trim()===``)throw new b(`Module name is required`);if(!e.version||e.version.trim()===``)throw new b(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new b(`Invalid module type: ${i.errors.join(`, `)}`,{moduleName:e.name,errors:i.errors});i.warnings.length>0&&n.warn(`Module type validation warnings`,{moduleName:e.name,warnings:i.warnings})}async function qs(e,t,n,r){let i=e.getModuleType();if(!i.dependencies||i.dependencies.length===0)return;for(let n of i.dependencies)if(!t.hasType(n))throw new b(`Module '${e.name}' depends on unregistered type '${n}'`,{moduleName:e.name,dependencyType:n});let a=new Set;for(let e of n.values())a.add(e.getModuleType().type);let o=[];for(let e of i.dependencies)a.has(e)||o.push(e);o.length>0&&r.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:o})}function Js(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 Ys(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 Zs(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 Qs(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 $s(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 ec(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 tc=class{registeredTypes=new Map;logger;constructor(){this.logger=D(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new b(`Invalid module type descriptor: ${t.errors.join(`, `)}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let t=this.registeredTypes.get(e.type);this.logger.warn(`Overriding existing module type`,{type:e.type,previousCategory:t?.category||`unknown`,newCategory:e.category})}this.registeredTypes.set(e.type,e),this.logger.info(`Module type registered`,{type:e.type,category:e.category,layer:e.layer,dependencies:e.dependencies?.length||0,capabilities:e.capabilities?.length||0})}unregisterType(e){if(!this.registeredTypes.has(e))return!1;let t=this.findDependentTypes(e);if(t.length>0)throw new b(`Cannot unregister module type '${e}' - it is required by: ${t.join(`, `)}`,{type:e,dependentTypes:t});return this.registeredTypes.delete(e),this.logger.info(`Module type unregistered`,{type:e}),!0}getType(e){return this.registeredTypes.get(e)}getAllTypes(){return Array.from(this.registeredTypes.values())}getTypesByCategory(e){return Array.from(this.registeredTypes.values()).filter(t=>t.category===e)}getTypesByLayer(e){return Array.from(this.registeredTypes.values()).filter(t=>t.layer===e)}hasType(e){return this.registeredTypes.has(e)}validateTypeDescriptor(e){return Zs(e,e=>this.getType(e))}resolveDependencies(e){return Qs(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return $s(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 ec(this.registeredTypes)}};const nc={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var rc=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 tc,this.logger=D(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new b(`Cannot register modules during disposal`);if(Ks(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new b(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await qs(e,this.typeRegistry,this.modules,this.logger),this.modules.set(e.name,e),this.moduleOptions.set(e.name,t.initOptions||{}),this.registrationOrder.push(e.name);let n=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:n.type,enabled:e.isEnabled(),initialized:!1,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:n.dependencies||[],dependents:[]}),this.moduleStats.set(e.name,{totalExecutions:0,successfulExecutions:0,failedExecutions:0,averageExecutionTime:0,totalExecutionTime:0}),t.autoInitialize&&await this.initializeModule(e.name,t.initTimeout),this.eventEmitter&&await this.eventEmitter.emit(nc.REGISTERED,{data:{moduleName:e.name,moduleType:n.type},timestamp:new Date})}async unregisterModule(e){let t=this.modules.get(e);if(!t)return!1;let n=Js(e,this.modules);if(n.length>0)throw new b(`Cannot unregister module '${e}' - it is required by: ${n.join(`, `)}`,{moduleName:e,dependents:n});t.isInitialized()&&t.dispose&&await t.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let r=this.registrationOrder.indexOf(e);r!==-1&&this.registrationOrder.splice(r,1);let i=this.initializationOrder.indexOf(e);return i!==-1&&this.initializationOrder.splice(i,1),this.eventEmitter&&await this.eventEmitter.emit(nc.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new b(`Module '${e}' not found`);if(n.isInitialized())return;let r=this.moduleOptions.get(e),i=n.initialize(r,this.eventEmitter);if(t&&t>0){let n,r=new Promise((r,i)=>{n=setTimeout(()=>{i(Error(`Module '${e}' initialization timed out after ${t}ms`))},t)});await Promise.race([i.then(e=>(clearTimeout(n),e)),r])}else await i;let a=this.moduleStatuses.get(e);a&&(a.initialized=!0,a.initializationTime=new Date),this.initializationOrder.includes(e)||this.initializationOrder.push(e)}async initializeAllModules(e){let t=Array.from(this.modules.keys());if(t.length===0)return;let n=t.map(e=>this.modules.get(e).getModuleType().type),r=this.typeRegistry.resolveDependencies(n);if(!r.resolved){let e=[];throw r.missingDependencies.length>0&&e.push(`Missing dependencies: ${r.missingDependencies.join(`, `)}`),r.circularDependencies.length>0&&e.push(`Circular dependencies: ${r.circularDependencies.map(e=>e.join(` -> `)).join(`; `)}`),new b(`Cannot initialize modules: ${e.join(`; `)}`,{missingDependencies:r.missingDependencies,circularDependencies:r.circularDependencies.map(e=>e.join(` -> `))})}for(let n of r.order){let r=t.find(e=>this.modules.get(e).getModuleType().type===n);r&&await this.initializeModule(r,e)}}async executeModule(e,t){let n=this.modules.get(e);if(!n)throw new b(`Module '${e}' not found`);if(!n.isInitialized())throw new b(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new b(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new b(`Module '${e}' does not support execute()`);let a=await n.execute(t),o=Date.now()-i;r.totalExecutions++,r.successfulExecutions++,r.totalExecutionTime+=o,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date;let s=this.moduleStatuses.get(e);return s&&(s.lastActivity=new Date),a}catch(e){let t=Date.now()-i;throw r.totalExecutions++,r.failedExecutions++,r.totalExecutionTime+=t,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date,e}}getModule(e){return this.modules.get(e)}getModulesByType(e){return Array.from(this.modules.values()).filter(t=>t.getModuleType().type===e)}getAllModules(){return Array.from(this.modules.values())}getModuleNames(){return Array.from(this.modules.keys())}hasModule(e){return this.modules.has(e)}getModuleStatus(e){return this.moduleStatuses.get(e)}getAllModuleStatuses(){return Array.from(this.moduleStatuses.values())}getModuleStats(e){return this.moduleStats.get(e)}getAllModuleStats(){let e={};for(let[t,n]of this.moduleStats.entries())e[t]={...n};return e}async disposeAllModules(){this.isDisposing=!0;let e=[...this.initializationOrder].reverse();for(let t of e){let e=this.modules.get(t);if(e&&e.isInitialized())try{e.dispose&&await e.dispose();let n=this.moduleStatuses.get(t);n&&(n.initialized=!1)}catch(e){this.logger.error(`Failed to dispose module`,{name:t,error:e instanceof Error?e.message:String(e)})}}this.initializationOrder=[],this.isDisposing=!1}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=!1}getRegistryStats(){return Ys(this.modules,this.moduleStats)}},ic=class extends di{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=Wi(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=D(`Robota`,t?{level:t}:{}),this.startTime=Date.now(),mi(e),this.aiProviders=ks(e),this.tools=Gi(()=>this.config),this.agentFactory=new Gs,this.conversationHistory=new vr,this.eventEmitter=ta(),this.moduleRegistry=new rc(this.eventEmitter),this.eventService=e.eventService||Gr,this.agentEventService=U(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:na(this.conversationId,this.config.executionContext)});let n=Ji({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,$i(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=[...na(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=Hn(t.output);return await ca(this.executionDeps(),e,t,n)}return await ia(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=Hn(t.output);return yield*la(this.executionDeps(),e,t,n)}return yield*aa(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new Ps;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 da(this.conversationHistory,this.conversationId)}getFullHistory(){return fa(this.conversationHistory,this.conversationId)}addHistoryEntry(e){pa(this.conversationHistory,this.conversationId,e)}clearHistory(){ma(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){ha(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){ga(this.conversationHistory,this.conversationId,e)}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e)}getModel(){return this.configManager.getModel()}updateSystemPrompt(e){this.configManager.setSystemMessage(e),this.conversationHistory.getConversationStore(this.conversationId).setSystemPrompt(e)}getSystemPrompt(){return this.configManager.getSystemMessage()}registerTool(e){this.configManager.registerTool(e,this.tools)}unregisterTool(e){this.tools.removeTool(e)}getOfferedToolSchemas(){return this.tools.getOfferedTools()}getConfig(){return{...this.config}}swapDefaultProvider(e,t){this.aiProviders.addProvider(e.name,e),this.configManager.setModel({provider:e.name,model:t})}getStats(){return Ms({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 js({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){ea(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const ac=1e4,oc=25e3,sc=5e5,cc=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,lc=Symbol.for(`@robota-sdk/tool-result-admitted`);var uc=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function dc(e){return Object.getOwnPropertyDescriptor(e,lc)?.value===!0}function fc(e){return Object.defineProperty({...e},lc,{value:!0})}function pc(e){if(e.success)return typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;let t=e.data===void 0?``:typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;return`${e.error??``}${t}`}function mc(e){return Number.isSafeInteger(e)&&e>0}function hc(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!mc(n)||!mc(r)||!mc(i)||n>=r||r>i||i>5e5)throw new uc(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!mc(t))throw new uc(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function gc(e,t,n={},r){let{warningChars:i,hardChars:a}=hc(n,r),o=pc(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new uc(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new uc(`spill-write-failed`)}if(!cc.test(e)||e.length>a)throw new uc(`invalid-reference`);return fc(t.success?{success:!0,data:e}:{success:!1,error:`Tool failure details: ${e}`})}return fc(t)}var _c=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 vc={STARTED:`started`,STEP_STARTED:`step_started`,STEP_COMPLETED:`step_completed`,COMPLETED:`completed`,FAILED:`failed`},yc=`orchestration`;function Z(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function bc(e){return typeof e==`string`?e.length:0}var xc=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:k.EXECUTION_START,completeEvent:k.EXECUTION_COMPLETE,errorEvent:k.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:bc(n[0]),conversationId:e.conversationId,options:Z(n[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod(`runStream`,{startEvent:k.EXECUTION_START,completeEvent:k.EXECUTION_COMPLETE,errorEvent:k.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:bc(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 Sc(e,t){let n=new xc(t);return n.configureStandardMethods(),n.wrap(e)}function Cc(e,t,n){return function(r){return Sc(r,{eventService:e,sourceType:t,sourceId:n})}}const wc={safe:`plan`,moderate:`default`,full:`acceptEdits`},Tc=`inherit-allowlist`;function Ec(e){let t;for(let n=0;n<e.length;n+=1){let r=e[n];if(t===`'`){r===`'`&&(t=void 0);continue}if(r===`\\`){n+=1;continue}let i=e[n+1];if(r==="`"||r===`$`&&i===`(`)return!0;if(t===`"`){r===`"`&&(t=void 0);continue}if(r===`'`||r===`"`){t=r;continue}if(r===`;`||r===`|`||r===`
|
|
9
|
-
|
|
10
|
-
`||r===`&`&&Nc(t,n))return Oc(e),n}function Nc(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const Pc=/[.+^${}()|[\]\\]/g;function Fc(e){let t=e.replace(Pc,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function Ic(e,t,n){let r=Fc(e);return n===`deny`?r.test(t)||Dc(t).some(e=>r.test(e))?`match`:`no-match`:r.test(t)?e.includes(`*`)&&Ec(t)?`no-match`:`match`:`no-match`}function Lc(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(Pc,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function Rc(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function zc(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 Bc(e,t){let n=zc(e),r=zc(t);return Rc(n)&&!Rc(r)?`unevaluable`:Lc(n).test(r)?`match`:`no-match`}const Vc=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,Hc=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),Uc={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function Wc(e){return e.replace(/\.$/,``).toLowerCase()}function Gc(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function Kc(e){let t=Wc(e).replace(/\*\*(?:\.\*\*)+/g,`**`).split(`.`),n=[],r=`[^.]+(?:\\.[^.]+)*`;for(let[e,i]of t.entries()){let a=e===0,o=e===t.length-1;if(i===`**`){a&&o?n.push(r):o?n.push(`(?:\\.${r})?`):n.push(`${a?``:`\\.`}(?:${r}\\.)?`);continue}let s=!a&&t[e-1]===`**`,c=a||s?``:`\\.`;if(i===`*`)n.push(`${c}${r}`);else if(i.includes(`**`))return null;else if(i.includes(`*`))n.push(`${c}${i.replace(Pc,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=Gc(i);if(e===null)return null;n.push(`${c}${e.replace(Pc,`\\$&`)}`)}}return RegExp(`^${n.join(``)}$`)}function qc(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function Jc(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!Hc.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function Yc(e,t){if(e.includes(`*`)){let n=Kc(e);return n===null?`unevaluable`:n.test(t)?`match`:`no-match`}let n;try{n=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return Wc(n)===t?`match`:`no-match`}function Xc(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?Uc[n]:t.port)}function Zc(e,t){let n=qc(t),r=qc(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:Lc(r).test(n)?`match`:`no-match`}function Qc(e,t){let n=Vc.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=Jc(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=Yc(i,Wc(s.hostname));return l===`match`?Xc(a,s,c)?o===void 0?`match`:Zc(o,s.pathname):`no-match`:l}const $c={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`}},el={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},tl=[`.git`,`.robota`,`.claude`,`.agents`],nl=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function rl(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function il(e){let t=[];for(let n of rl(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function al(e){let t=il(e),n=t[t.length-1];if(n!==void 0&&nl.includes(n))return!0;for(let e=0;e<t.length;e+=1){let n=t[e];if(tl.includes(n)){if((n===`.robota`||n===`.claude`)&&t[e+1]===`worktrees`&&t[e+2]!==void 0){e+=2;continue}return!0}}return!1}function ol(e){let t=[];for(let n of rl(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function sl(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const cl=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function ll(e,t){let n=sl(e),r=cl.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=ol(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=ol(n);else{if(t.cwd===void 0)return!1;i=ol(`${t.cwd}/${n}`)}if(rl(i).length<=1||t.homeDirectory!==void 0&&i===ol(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=ol(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const ul=new Set([`rm`,`rmdir`]),dl=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 fl(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=dl.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 pl(e,t){return Dc(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=fl(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!ul.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:ll(e,t))})}const ml=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),hl=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),gl={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},_l=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,vl=[`--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 yl(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return vl.some(e=>e.startsWith(t))}function bl(e,t){if(Ml(t).some(e=>_l.test(e.text)||yl(e.text)))return!0;if(e===`find`)return Ml(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=gl[e];return n!==void 0&&Ml(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const xl=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),Sl=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),Cl=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),wl=new Set([`/dev/null`]),Tl=/[A-Za-z0-9_./:=@+,*?[\]~-]/,El=new Set([`$`,"`",`\\`,`!`]),Dl=new Set([`*`,`?`,`[`]);function Ol(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||kl(e)}function kl(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 Al(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 jl(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!wl.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||Ol(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:El.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(!Tl.test(l)){s=!0;break}Dl.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 Ml(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&&!hl.has(e.text))}function Pl(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>Sl.has(e.text));return t.every(e=>Sl.has(e.text)||Cl.has(e.text))&&(n||t.length===e.length)}function Fl(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!xl.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`?Pl(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function Il(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=>Ol(e.text))||bl(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:ml.has(t.text)?!0:t.text===`find`?Nl(n):t.text===`git`&&Fl(n)}const Ll=new Set([`echo`,`which`,`git`]);function Rl(e,t){let n;for(let[r,...i]of e)if(!Ll.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 zl(e,t={}){if(t.otherDirectory===!0||e.length>1e4||Al(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=Dc(e);if(n.length===0)return!1;let r=n.map(jl);if(r.some(e=>e.refused||!Il(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 Bl(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 Vl(e,t){Q.set(e,{...Q.get(e),...t})}function Hl(){Q.clear()}function Ul(e){return Q.get(e)??{}}function Wl(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=Fc(e);return n.some(e=>r.test(e))}function Gl(e,t){let n=/^([A-Za-z_]\w*):([\s\S]*)$/.exec(t);if(n===null)return;let r=n[1],i=Q.get(e);if(i?.argument?.key===r)return`primary`;if(i?.parameters?.includes(r)===!0)return{name:r,value:n[2]}}function Kl(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`:Fc(e.value).test(String(n))?`match`:`no-match`}function ql(e,t){return t.some(t=>{let n=Bl(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&Wl(n.toolName,e)})}function Jl(e){return Q.get(e)?.argument?.key}function Yl(e,t){let n=Jl(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function Xl(e,t,n,r=`allow`){return n.some(n=>Ql(e,t,n,r)===`match`)}function Zl(e,t,n){return n.some(n=>Ql(e,t,n,`deny`)===`unevaluable`)}function Ql(e,t,n,r){let i=Bl(n);if(!Wl(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=Gl(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?Kl(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=Yl(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return Qc(i.argPattern,s);case`path`:return Bc(i.argPattern,s);case`command`:return Ic(i.argPattern,s,r);case`text`:return Fc(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function $l(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`?pl(a,n):i.kind===`path`&&r?.riskClass===`modify`&&al(a):!1}function eu(e,t,n,r){return Xl(e,t,n,`deny`)||Zl(e,t,n)||$l(e,t,r)}function tu(e,t,n={},r={}){return Zl(e,t,n.deny??[])||eu(e,t,n.ask??[],r)}const nu=[`workingDirectory`,`cwd`];function ru(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`&&zl(i,{otherDirectory:nu.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function iu(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=ru(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return Xl(e,t,o,`deny`)||i.ceiling!==void 0&&!Xl(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0||Q.get(e)?.notInPeerTurn===!0&&i.peerTurn===!0?`deny`:Zl(e,t,o)?n===`plan`?`deny`:`approve`:eu(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||Xl(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?el[n]:$c[n][c]}function au(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 ou=/^[A-Za-z_]\w*:(?!\/\/)/;function su(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function cu(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}=Bl(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!su(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`&&ou.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=Gl(r,i);if(a!==void 0&&a!==`primary`)return t===`allow`?`matches a named parameter, which only deny and ask rules may do`:void 0;let o=Ul(r);if(!(o.parameters===void 0&&ou.test(i)&&Gl(r,i)===void 0)){if(o.argument===void 0)return o.riskClass===void 0?void 0:`tool "${r}" declares no argument key, so an argument-scoped pattern can never be evaluated`;if(o.argument.kind===`url`&&Qc(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path] that "${r}" is matched by`}}function lu(e,t=`deny`){let n=[];for(let r of e){let e=cu(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function uu(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=Bl(n.trim());if(r===void 0||e.includes(`*`))continue;let i=Ul(e),a=Gl(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&ou.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=Ul(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 du(e){return(e??[]).map(e=>`${e}(*)`)}function fu(e,t){let n=du(t.allowedTools),r=lu(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,...du(t.deniedTools)])]}}const pu=[`Bash`,`Shell`,`BackgroundProcess`],mu=[`Agent`],hu=[...pu,...mu,`ExecuteCommand`,`Computer`],gu=`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(`.`),_u=[`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(` `)),vu=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function yu(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function bu(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=yu(e[0]);if(gu.some(t=>n(t,r,e.length===1)))return!0;for(let i of _u){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(`-`)||vu.has(o[0]));)o=o.slice(1);return o.length===0||bu(o,t)}return!1}function xu(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return bu(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function Su(e){let{toolName:t,argPattern:n}=Bl(e),r=e=>e.some(e=>Wl(t,e));return r(mu)?!0:t.includes(`*`)?r(hu):hu.includes(t)||Ul(t).riskClass===`execute`?n===void 0||n.trim()===`*`||pu.includes(t)&&xu(n):!1}function Cu(e){return e.filter(e=>!Su(e))}const wu=1e6,Tu={"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}},Eu=[{pattern:/claude-opus/i,price:{inputPerMillion:15,outputPerMillion:75}},{pattern:/claude-sonnet/i,price:{inputPerMillion:3,outputPerMillion:15}},{pattern:/claude-haiku/i,price:{inputPerMillion:.8,outputPerMillion:4}},{pattern:/gpt-4o-mini/i,price:{inputPerMillion:.15,outputPerMillion:.6}},{pattern:/gpt-4/i,price:{inputPerMillion:2.5,outputPerMillion:10}},{pattern:/deepseek/i,price:{inputPerMillion:.14,outputPerMillion:.28}},{pattern:/gemini-2/i,price:{inputPerMillion:.1,outputPerMillion:.4}},{pattern:/gemini-1/i,price:{inputPerMillion:1.25,outputPerMillion:5}}];function Du(e){let t=Object.hasOwn(Tu,e)?Tu[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of Eu)if(t.test(e))return n}function Ou(e,t,n){let r=Du(e);if(r)return t/wu*r.inputPerMillion+n/wu*r.outputPerMillion}function ku(e){let t=Du(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function Au(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 ju(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 Mu(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([import(`./command-executor-d6DdfUTD.js`).then(e=>e.n),import(`./http-executor-ADn4locH.js`).then(e=>e.n)]);return[new e,new t]}async function Nu(e,t,n,r,i){if(!e)return{blocked:!1,stdout:``};let a=new Set,o=[],s=()=>({...a.size>0&&{unknownHookTypes:[...a].sort()},...o.length>0&&{errors:[...o]}}),c=e[t];if(!c||c.length===0)return{blocked:!1,stdout:``};let l=r??await Mu(),u=new Map;for(let e of l)u.set(e.type,e);let d=[],f=ju(n),p=-1,m,h;for(let e of c){if(!Au(e,f))continue;let r=e.env?{...n,env:{...n.env,...e.env}}:n;for(let n of e.hooks){let e=u.get(n.type);if(!e){a.add(n.type);continue}let c=n.type===`command`&&i!==void 0?await e.execute(n,r,i):await e.execute(n,r);if(c.outcome===`deny`)return{blocked:!0,reason:c.reason||`Blocked by hook`,stdout:d.join(`
|
|
11
|
-
`),...s()};if(c.outcome===`error`){o.push(c);continue}let l=ue(c.stdout,t);if(d.push(...l.context),l.blockReason!==void 0)return{blocked:!0,reason:l.blockReason,stdout:d.join(`
|
|
12
|
-
`),...
|
|
13
|
-
`)
|
|
8
|
+
`),n.beginAssistant();let b=Ko(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S,settleStreamingChunkHooks:C}=cs(a,n,i,p,l,u),w=Po(s,o.defaultModel.model,i),T=H(),E;try{E=await ls(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),w,T,a.executionJournal?ho(m,e,a,o,t,c.toolExecutionService.getLoadedDeferredTools()):void 0)}finally{await C()}if(E===null)return!0;let{assistantResponse:D,assistantToolCalls:ee}=Ho(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=Jo(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):is(await ys(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 xs(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 Ss(e,t){return t===0||e<t}async function Cs(e,t,n,r,i,a,o,s,c,l=!1){let u=xs(i,r);for(;!l&&!o.forcedSummaryInstruction&&Ss(o.currentRound,u)&&!(s?.aborted||(o.currentRound++,await bs(o,u,e,t,n,r,i,a,c))||s?.aborted););let d=e.getMessages(),f=d.length>0?d[d.length-1]:void 0,p=f?.role===`assistant`&&typeof f.content==`string`&&f.content.length>0&&(!(`toolCalls`in f)||f.toolCalls.length===0);if(!s?.aborted){if(r.allowToolOnlyCompletion===!0){let e=f?.role===`tool`;if(!p&&!e)throw new ie(o.currentRound,{conversationId:t,executionId:n});return}p||await rs(e,a,i,n,o,t,r,c.logger,u,r.executionJournal?c.toolExecutionService.getLoadedDeferredTools():void 0)}}async function ws(e,t,n,r,i,a,o,s,c,l,u,d){let f={...mo(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 Ts(e,t,n,r=!0){try{return Es(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 Es(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`),ms(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`),ms(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===Pt;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 Ds(e){throw new L(`EXECUTION_RECOVERY_CONFLICT`,e)}function Os(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,...Jo(e.response),executionId:t.executionId,providerCallId:t.callId,round:e.checkpoint.round}}}function ks(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 As(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))&&Ds(`Current history differs from the saved runtime checkpoint`);let a=e.slice(i.length);if(!a.length)return;ks(a[0],Os(t,n),n.callId,n.executionId)||Ds(`Current assistant does not match the saved response`);let o=t.response.toolCalls??[];a.length>o.length+1&&Ds(`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||Ds(`History contains a tool result without durable settlement`),n}),l=new br;for(let e of i)l.addMessage(e);l.addMessage(a[0]),fs(s,{results:c,errors:[]},l,t.checkpoint.round,r.logger,{contextLimit:t.checkpoint.contextLimit,cumulativeInputTokens:js(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)&&Ds(`Existing tool result conflicts with the durable result`)}}function js(e){let t=Jo(e.response).inputTokens??0;return t>0?t:e.checkpoint.cumulativeInputTokens}async function Ms(e,t,n,r,i){let a=q(e.getMessages()),o=()=>{(a!==q(e.getMessages())||e.hasPendingAssistant())&&Ds(`History changed during execution recovery`)};o();let s=i?.records??await n.journal.read(n.executionId),c=i?.batch??Ts(s,n.executionId,n.callId);n.signal?.throwIfAborted(),o();let l=structuredClone(e.getMessages());As(l,c,n,r);let u=await _s(s,n);u.length!==s.length&&(c=Ts(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 br;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(Os(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:js(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=is(await ys(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())&&Ds(`History changed while announcing execution recovery`);if(n.signal?.aborted)throw Ut(`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 Ns(e,t,n,r){let{executionId:i,callId:a,messages:o}=await Ms(e,t,n,r);return{executionId:i,callId:a,messages:o}}function X(e){throw new L(`EXECUTION_RECOVERY_INVALID`,e)}function Ps(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 Fs(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=Ts(s,n.executionId,c.callId,!1),u=Ps(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 Ms(e,t,{...n,callId:c.callId},a,{batch:l,records:s}),h=Ao(e.getMessages(),f,new Date(u.startedAt),n.executionId,t,{...u.options,signal:n.signal,executionJournal:n.journal,onTextDelta:n.onTextDelta,onExecutionEvent:n.onExecutionEvent,traceContext:n.traceContext});a.eventEmitter.prepareOwnerPathBases(t);try{if(await Cs(e,t,n.executionId,h,f,p,m.state,n.signal,a,m.stop||u.kind===`summary`),n.signal?.aborted)throw Ut(`Execution continuation interrupted`,n.signal.reason);return mo(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*Is(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 Ls(e,t,n){return{executionId:e,...t===void 0?{}:{driverId:t},...n===void 0?{}:{turnSource:n}}}var Rs=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new $a(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 lo(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 Fs(this.conversationHistory.getConversationStore(e),e,t,n,e=>wo(this.aiProviders,this.tools,e),{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService})}resumeToolCalls(e,t){return Ns(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=Oo(),a=new Date,o=ko(r,`execute`),s=Ao(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=wo(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=Eo(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,Ls(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);To(c);for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await Cs(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),ws(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 Ht(e,r?.signal)?{...mo(l,i,a,d.toolsExecuted,{turnMessageId:u,interrupted:!0}),interrupted:!0}:(await Do(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*Is(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 zs(e){let t=new ba;if(e.aiProviders)for(let n of e.aiProviders)t.addProvider(n.name,n);return e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),t}async function Bs(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 Bt&&c&&e.setEventService(c),r.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return gi(e,t,n)},e.provenance),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new Ca(new Sa({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new xa));let d=new Rs(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 Vs(e){try{let t=await Bs(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 Hs(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 Us(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 Ws=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(),Gs(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 Gs(e,t){let n=e.reason;return Ht(n)&&n.name===`AbortError`?n:Ut(t?`Run aborted while queued behind another run on this instance`:`Run aborted before it started`,n)}function Ks(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??Js,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function qs(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new m(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel,r=n?.model??t.defaultModel;if(!r)throw new m(`No model specified: set config.defaultModel.model or the AgentFactory defaultModel option`);let i=n?.provider??e.aiProviders[0]?.name??t.defaultProvider;if(!i)throw new m(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||Js(),name:e.name||`Unnamed Agent`,aiProviders:e.aiProviders,defaultModel:{provider:i,model:r,temperature:n?.temperature??.7,...n?.maxTokens!==void 0&&{maxTokens:n.maxTokens},...n?.topP!==void 0&&{topP:n.topP}},systemMessage:e.systemMessage??t.defaultSystemMessage,tools:e.tools||[],plugins:e.plugins||[],metadata:e.metadata||{},...e.logging&&{logging:e.logging},...e.conversationId&&{conversationId:e.conversationId},...e}}function Js(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function Ys(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var Xs=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 Zs(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 Qs(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function $s(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 ec(e,n.name,r)}t.push(n)}}function ec(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var tc=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new Xs,this.logger=O(`AgentFactory`),this.options=Ks(e),this.activeAgents=new Map,this.creationStats={totalCreated:0,activeCount:0,fromTemplates:0,customConfigured:0,templateUsageRatio:0},this.lifecycleEvents=t,this.logger.debug(`AgentFactory initialized`,{maxConcurrentAgents:this.options.maxConcurrentAgents,strictValidation:this.options.strictValidation,hasDefaultModel:!!this.options.defaultModel,hasDefaultProvider:!!this.options.defaultProvider,hasLifecycleEvents:this.lifecycleEvents!==null})}async initialize(){this.initialized||(this.logger.debug(`Initializing AgentFactory`),this.initialized=!0,this.logger.debug(`AgentFactory initialization completed`))}async createAgent(e,t,n=!1){let r,i=this.admit();try{r=qs(t,this.options);let a=r;if(this.options.strictValidation){let e=Kt(r);if(!e.isValid)throw new d(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let o;if(await $s([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(a)},{name:`construct`,run:()=>{o=new e(a)}},{name:`initialize`,run:()=>o?Zs(o)?.initialize?.():void 0,undo:()=>o?Zs(o)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!o)throw new m(`Agent was not constructed`);this.activeAgents.set(i,o),Ys(this.creationStats,n)},undo:()=>{this.activeAgents.delete(i),this.creationStats.activeCount--,this.creationStats.totalCreated--,n?this.creationStats.fromTemplates--:this.creationStats.customConfigured--}},{name:`afterCreate`,run:()=>o?this.lifecycleEvents.afterCreate?.(o,a):void 0}]),this.pendingAgents.delete(i),!o)throw new m(`Agent was not constructed`);return this.logger.info(`Agent created successfully`,{agentId:i,model:r.defaultModel.model,provider:r.defaultModel.provider}),o}catch(e){this.pendingAgents.delete(i);let n=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&r&&await this.lifecycleEvents.onCreateError(n,r),this.logger.error(`Failed to create agent`,{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}admit(){if(this.activeAgents.size+this.pendingAgents.size>=this.options.maxConcurrentAgents)throw new m(`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 m(`Agent id factory keeps returning ids that are already in use`);e=this.options.idFactory()}return this.pendingAgents.add(e),e}async createFromTemplate(e,t,n={}){let r=this.agentTemplates.getTemplate(t);if(!r)throw new m(`Template not found: ${t}`);let i=this.applyTemplate(r,n);i.warnings.length>0&&this.logger.warn(`Template application warnings`,{templateId:t,warnings:i.warnings});let a=await this.createAgent(e,i.config,!0);return this.logger.info(`Agent created from template`,{templateId:t,modified:i.modified,warnings:i.warnings.length}),a}registerTemplate(e){this.agentTemplates.registerTemplate(e)}unregisterTemplate(e){return this.agentTemplates.unregisterTemplate(e)}getTemplates(){return this.agentTemplates.getTemplates()}getTemplate(e){return this.agentTemplates.getTemplate(e)}findTemplates(e){return this.agentTemplates.findTemplates(e)}applyTemplate(e,t={}){return this.agentTemplates.applyTemplate(e,t)}async destroyAgent(e){let t=this.activeAgents.get(e);if(!t)return!1;try{return await Zs(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 Kt(e)}};function nc(e,t,n){if(!e.name||e.name.trim()===``)throw new m(`Module name is required`);if(!e.version||e.version.trim()===``)throw new m(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new m(`Invalid module type: ${i.errors.join(`, `)}`,{moduleName:e.name,errors:i.errors});i.warnings.length>0&&n.warn(`Module type validation warnings`,{moduleName:e.name,warnings:i.warnings})}async function rc(e,t,n,r){let i=e.getModuleType();if(!i.dependencies||i.dependencies.length===0)return;for(let n of i.dependencies)if(!t.hasType(n))throw new m(`Module '${e.name}' depends on unregistered type '${n}'`,{moduleName:e.name,dependencyType:n});let a=new Set;for(let e of n.values())a.add(e.getModuleType().type);let o=[];for(let e of i.dependencies)a.has(e)||o.push(e);o.length>0&&r.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:o})}function ic(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 ac(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 oc(){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 sc(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 cc(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 lc(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 uc(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 dc=class{registeredTypes=new Map;logger;constructor(){this.logger=O(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new m(`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 m(`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 sc(e,e=>this.getType(e))}resolveDependencies(e){return cc(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return lc(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 oc())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 uc(this.registeredTypes)}};const fc={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var pc=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 dc,this.logger=O(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new m(`Cannot register modules during disposal`);if(nc(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new m(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await rc(e,this.typeRegistry,this.modules,this.logger),this.modules.set(e.name,e),this.moduleOptions.set(e.name,t.initOptions||{}),this.registrationOrder.push(e.name);let n=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:n.type,enabled:e.isEnabled(),initialized:!1,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:n.dependencies||[],dependents:[]}),this.moduleStats.set(e.name,{totalExecutions:0,successfulExecutions:0,failedExecutions:0,averageExecutionTime:0,totalExecutionTime:0}),t.autoInitialize&&await this.initializeModule(e.name,t.initTimeout),this.eventEmitter&&await this.eventEmitter.emit(fc.REGISTERED,{data:{moduleName:e.name,moduleType:n.type},timestamp:new Date})}async unregisterModule(e){let t=this.modules.get(e);if(!t)return!1;let n=ic(e,this.modules);if(n.length>0)throw new m(`Cannot unregister module '${e}' - it is required by: ${n.join(`, `)}`,{moduleName:e,dependents:n});t.isInitialized()&&t.dispose&&await t.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let r=this.registrationOrder.indexOf(e);r!==-1&&this.registrationOrder.splice(r,1);let i=this.initializationOrder.indexOf(e);return i!==-1&&this.initializationOrder.splice(i,1),this.eventEmitter&&await this.eventEmitter.emit(fc.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new m(`Module '${e}' not found`);if(n.isInitialized())return;let r=this.moduleOptions.get(e),i=n.initialize(r,this.eventEmitter);if(t&&t>0){let n,r=new Promise((r,i)=>{n=setTimeout(()=>{i(Error(`Module '${e}' initialization timed out after ${t}ms`))},t)});await Promise.race([i.then(e=>(clearTimeout(n),e)),r])}else await i;let a=this.moduleStatuses.get(e);a&&(a.initialized=!0,a.initializationTime=new Date),this.initializationOrder.includes(e)||this.initializationOrder.push(e)}async initializeAllModules(e){let t=Array.from(this.modules.keys());if(t.length===0)return;let n=t.map(e=>this.modules.get(e).getModuleType().type),r=this.typeRegistry.resolveDependencies(n);if(!r.resolved){let e=[];throw r.missingDependencies.length>0&&e.push(`Missing dependencies: ${r.missingDependencies.join(`, `)}`),r.circularDependencies.length>0&&e.push(`Circular dependencies: ${r.circularDependencies.map(e=>e.join(` -> `)).join(`; `)}`),new m(`Cannot initialize modules: ${e.join(`; `)}`,{missingDependencies:r.missingDependencies,circularDependencies:r.circularDependencies.map(e=>e.join(` -> `))})}for(let n of r.order){let r=t.find(e=>this.modules.get(e).getModuleType().type===n);r&&await this.initializeModule(r,e)}}async executeModule(e,t){let n=this.modules.get(e);if(!n)throw new m(`Module '${e}' not found`);if(!n.isInitialized())throw new m(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new m(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new m(`Module '${e}' does not support execute()`);let a=await n.execute(t),o=Date.now()-i;r.totalExecutions++,r.successfulExecutions++,r.totalExecutionTime+=o,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date;let s=this.moduleStatuses.get(e);return s&&(s.lastActivity=new Date),a}catch(e){let t=Date.now()-i;throw r.totalExecutions++,r.failedExecutions++,r.totalExecutionTime+=t,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date,e}}getModule(e){return this.modules.get(e)}getModulesByType(e){return Array.from(this.modules.values()).filter(t=>t.getModuleType().type===e)}getAllModules(){return Array.from(this.modules.values())}getModuleNames(){return Array.from(this.modules.keys())}hasModule(e){return this.modules.has(e)}getModuleStatus(e){return this.moduleStatuses.get(e)}getAllModuleStatuses(){return Array.from(this.moduleStatuses.values())}getModuleStats(e){return this.moduleStats.get(e)}getAllModuleStats(){let e={};for(let[t,n]of this.moduleStats.entries())e[t]={...n};return e}async disposeAllModules(){this.isDisposing=!0;let e=[...this.initializationOrder].reverse();for(let t of e){let e=this.modules.get(t);if(e&&e.isInitialized())try{e.dispose&&await e.dispose();let n=this.moduleStatuses.get(t);n&&(n.initialized=!1)}catch(e){this.logger.error(`Failed to dispose module`,{name:t,error:e instanceof Error?e.message:String(e)})}}this.initializationOrder=[],this.isDisposing=!1}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=!1}getRegistryStats(){return ac(this.modules,this.moduleStats)}},mc=class extends hi{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=qi(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=O(`ConversationAgent`,t?{level:t}:{}),this.startTime=Date.now(),_i(e),this.aiProviders=zs(e),this.tools=Ji(()=>this.config),this.agentFactory=new tc,this.conversationHistory=new xr,this.eventEmitter=ia(),this.moduleRegistry=new pc(this.eventEmitter),this.eventService=e.eventService||Jr,this.agentEventService=U(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:aa(this.conversationId,this.config.executionContext)});let n=Zi({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,na(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=[...aa(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=Gn(t.output);return await da(this.executionDeps(),e,t,n)}return await sa(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=Gn(t.output);return yield*fa(this.executionDeps(),e,t,n)}return yield*ca(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new Ws;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 ma(this.conversationHistory,this.conversationId)}getFullHistory(){return ha(this.conversationHistory,this.conversationId)}addHistoryEntry(e){ga(this.conversationHistory,this.conversationId,e)}clearHistory(){_a(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){va(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){ya(this.conversationHistory,this.conversationId,e)}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e)}getModel(){return this.configManager.getModel()}updateSystemPrompt(e){this.configManager.setSystemMessage(e),this.conversationHistory.getConversationStore(this.conversationId).setSystemPrompt(e)}getSystemPrompt(){return this.configManager.getSystemMessage()}registerTool(e){this.configManager.registerTool(e,this.tools)}unregisterTool(e){this.tools.removeTool(e)}getOfferedToolSchemas(){return this.tools.getOfferedTools()}getConfig(){return{...this.config}}swapDefaultProvider(e,t){this.aiProviders.addProvider(e.name,e),this.configManager.setModel({provider:e.name,model:t})}getStats(){return Hs({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,Us({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 Vs({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){ra(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const hc=1e4,gc=25e3,_c=5e5,vc=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,yc=Symbol.for(`@robota-sdk/tool-result-admitted`);var bc=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function xc(e){return Object.getOwnPropertyDescriptor(e,yc)?.value===!0}function Sc(e){return Object.defineProperty({...e},yc,{value:!0})}function Cc(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 wc(e){return Number.isSafeInteger(e)&&e>0}function Tc(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!wc(n)||!wc(r)||!wc(i)||n>=r||r>i||i>5e5)throw new bc(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!wc(t))throw new bc(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function Ec(e,t,n={},r){let{warningChars:i,hardChars:a}=Tc(n,r),o=Cc(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new bc(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new bc(`spill-write-failed`)}if(!vc.test(e)||e.length>a)throw new bc(`invalid-reference`);return Sc(t.success?{success:!0,data:e}:{success:!1,error:`Tool failure details: ${e}`})}return Sc(t)}var Dc=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 Oc={STARTED:`started`,STEP_STARTED:`step_started`,STEP_COMPLETED:`step_completed`,COMPLETED:`completed`,FAILED:`failed`},kc=`orchestration`;function Z(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function Ac(e){return typeof e==`string`?e.length:0}var jc=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:Ac(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:Ac(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 Mc(e,t){let n=new jc(t);return n.configureStandardMethods(),n.wrap(e)}function Nc(e,t,n){return function(r){return Mc(r,{eventService:e,sourceType:t,sourceId:n})}}const Pc={safe:`plan`,moderate:`default`,full:`acceptEdits`},Fc=`inherit-allowlist`;function Ic(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 Lc(e){let t={segments:[],current:``,quote:void 0,substitutionDepth:0};for(let n=0;n<e.length;n+=1){let r=zc(t,e,n);if(r!==void 0){n=r;continue}let i=Bc(t,e,n);if(i!==void 0){n=i;continue}if(Vc(t,e[n]))continue;let a=Hc(t,e,n);if(a!==void 0){n=a;continue}t.current+=e[n]}return Rc(t),t.segments}function Rc(e){let t=e.current.trim();t!==``&&e.segments.push(t),e.current=``}function zc(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 Bc(e,t,n){let r=t[n];if(r==="`")return Rc(e),n;if(r===`$`&&t[n+1]===`(`)return Rc(e),e.substitutionDepth+=1,n+1}function Vc(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 Hc(e,t,n){let r=t[n];if((r===`<`||r===`>`)&&t[n+1]===`(`)return Rc(e),e.substitutionDepth+=1,n+1;if(r===`)`&&e.substitutionDepth>0)return Rc(e),--e.substitutionDepth,n;if(r===`;`||r===`|`||r===`
|
|
11
|
+
`||r===`&`&&Uc(t,n))return Rc(e),n}function Uc(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const Wc=/[.+^${}()|[\]\\]/g;function Gc(e){let t=e.replace(Wc,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function Kc(e,t,n){let r=Gc(e);return n===`deny`?r.test(t)||Lc(t).some(e=>r.test(e))?`match`:`no-match`:r.test(t)?e.includes(`*`)&&Ic(t)?`no-match`:`match`:`no-match`}function qc(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(Wc,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function Jc(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function Yc(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 Xc(e,t){let n=Yc(e),r=Yc(t);return Jc(n)&&!Jc(r)?`unevaluable`:qc(n).test(r)?`match`:`no-match`}const Zc=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,Qc=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),$c={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function el(e){return e.replace(/\.$/,``).toLowerCase()}function tl(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function nl(e,t=!1){let n=el(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(Wc,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=tl(a);if(e===null)return null;r.push(`${l}${e.replace(Wc,`\\$&`)}`)}}return RegExp(`^${r.join(``)}$`)}function rl(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function il(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!Qc.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function al(e,t,n=!1){if(e.includes(`*`)){let r=nl(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 el(r)===t?`match`:`no-match`}function ol(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?$c[n]:t.port)}function sl(e,t){let n=rl(t),r=rl(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:qc(r).test(n)?`match`:`no-match`}function cl(e,t){let n=Zc.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=il(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=al(i,el(s.hostname));return l===`match`?ol(a,s,c)?o===void 0?`match`:sl(o,s.pathname):`no-match`:l}function ll(e,t){if(!e.startsWith(`domain:`))return cl(e,t);let n=/^domain:([^/\\:?#@[\]\s]+)$/.exec(e);if(n===null)return`unevaluable`;let r=el(n[1]);if(r.includes(`**`)||r.split(`.`).some(e=>e===``))return`unevaluable`;let i=il(t);return i===null||i.protocol!==`http:`&&i.protocol!==`https:`?`unevaluable`:al(r,el(i.hostname),!0)}const ul={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`}},dl={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},fl=[`.git`,`.claude`,`.agents`],pl=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function ml(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function hl(e){let t=[];for(let n of ml(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function gl(e,t={}){let n=t.pathProtection,r=yl.exec(e),i=r!==null&&t.homeDirectory!==void 0?`${t.homeDirectory}/${r[1]??``}`:e,a=i.startsWith(`/`)?_l(i):t.cwd===void 0?void 0:_l(`${t.cwd}/${i}`);if(a!==void 0&&n?.protectedPaths.some(e=>{let t=_l(e);return a===t||a.startsWith(`${t}/`)}))return!0;let o=hl(i),s=o[o.length-1];if(s!==void 0&&pl.includes(s))return!0;let c=[...fl,...n?.protectedDirectoryNames??[]],l=[`.claude/worktrees`,...n?.writableWorktreeContainers??[]].map(hl);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 _l(e){let t=[];for(let n of ml(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function vl(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const yl=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function bl(e,t){let n=vl(e),r=yl.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=_l(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=_l(n);else{if(t.cwd===void 0)return!1;i=_l(`${t.cwd}/${n}`)}if(ml(i).length<=1||t.homeDirectory!==void 0&&i===_l(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=_l(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const xl=new Set([`rm`,`rmdir`]),Sl=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 Cl(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=Sl.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 wl(e,t){return Lc(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=Cl(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!xl.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:bl(e,t))})}const Tl=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),El=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),Dl={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},Ol=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,kl=[`--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 Al(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return kl.some(e=>e.startsWith(t))}function jl(e,t){if(Ul(t).some(e=>Ol.test(e.text)||Al(e.text)))return!0;if(e===`find`)return Ul(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=Dl[e];return n!==void 0&&Ul(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const Ml=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),Nl=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),Pl=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),Fl=new Set([`/dev/null`]),Il=/[A-Za-z0-9_./:=@+,*?[\]~-]/,Ll=new Set([`$`,"`",`\\`,`!`]),Rl=new Set([`*`,`?`,`[`]);function zl(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||Bl(e)}function Bl(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 Vl(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 Hl(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!Fl.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||zl(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:Ll.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(!Il.test(l)){s=!0;break}Rl.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 Ul(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function Wl(e){return e.every(e=>!e.expands&&!El.has(e.text))}function Gl(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>Nl.has(e.text));return t.every(e=>Nl.has(e.text)||Pl.has(e.text))&&(n||t.length===e.length)}function Kl(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!Ml.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`?Gl(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function ql(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=>zl(e.text))||jl(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:Tl.has(t.text)?!0:t.text===`find`?Wl(n):t.text===`git`&&Kl(n)}const Jl=new Set([`echo`,`which`,`git`]);function Yl(e,t){let n;for(let[r,...i]of e)if(!Jl.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 Xl(e,t={}){if(t.otherDirectory===!0||e.length>1e4||Vl(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=Lc(e);if(n.length===0)return!1;let r=n.map(Hl);if(r.some(e=>e.refused||!ql(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:Yl(r.map(e=>e.words),t.resolveInWorkspace)}function Zl(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 Ql(e,t){Q.set(e,{...Q.get(e),...t})}function $l(){Q.clear()}function eu(e){return Q.get(e)??{}}function tu(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=Gc(e);return n.some(e=>r.test(e))}function nu(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 ru(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`:Gc(e.value).test(String(n))?`match`:`no-match`}function iu(e,t){return t.some(t=>{let n=Zl(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&tu(n.toolName,e)})}function au(e){return Q.get(e)?.argument?.key}function ou(e,t){let n=au(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function su(e,t,n,r=`allow`){return n.some(n=>lu(e,t,n,r)===`match`)}function cu(e,t,n){return n.some(n=>lu(e,t,n,`deny`)===`unevaluable`)}function lu(e,t,n,r){let i=Zl(n);if(!tu(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=nu(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?ru(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=ou(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return e===`WebFetch`?ll(i.argPattern,s):cl(i.argPattern,s);case`path`:return Xc(i.argPattern,s);case`command`:return Kc(i.argPattern,s,r);case`text`:return Gc(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function uu(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`?wl(a,n):i.kind===`path`&&r?.riskClass===`modify`&&gl(a,n):!1}function du(e,t,n,r){return su(e,t,n,`deny`)||cu(e,t,n)||uu(e,t,r)}function fu(e,t,n={},r={}){return cu(e,t,n.deny??[])||du(e,t,n.ask??[],r)}const pu=[`workingDirectory`,`cwd`];function mu(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`&&Xl(i,{otherDirectory:pu.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function hu(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=mu(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return su(e,t,o,`deny`)||i.ceiling!==void 0&&!su(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0||Q.get(e)?.notInPeerTurn===!0&&i.peerTurn===!0?`deny`:cu(e,t,o)?n===`plan`?`deny`:`approve`:du(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||su(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?dl[n]:ul[n][c]}function gu(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 _u=/^[A-Za-z_]\w*:(?!\/\/)/;function vu(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function yu(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}=Zl(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!vu(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`&&_u.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=nu(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=eu(r);if(!(o.parameters===void 0&&_u.test(i)&&nu(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`?ll:cl)(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 bu(e,t=`deny`){let n=[];for(let r of e){let e=yu(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function xu(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=Zl(n.trim());if(r===void 0||e.includes(`*`))continue;let i=eu(e),a=nu(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&_u.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=eu(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 Su(e){return(e??[]).map(e=>`${e}(*)`)}function Cu(e,t){let n=Su(t.allowedTools),r=bu(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,...Su(t.deniedTools)])]}}const wu=[`Bash`,`Shell`,`BackgroundProcess`],Tu=[`Agent`],Eu=[...wu,...Tu,`ExecuteCommand`,`Computer`],Du=`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(`.`),Ou=[`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(` `)),ku=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function Au(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function ju(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=Au(e[0]);if(Du.some(t=>n(t,r,e.length===1)))return!0;for(let i of Ou){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(`-`)||ku.has(o[0]));)o=o.slice(1);return o.length===0||ju(o,t)}return!1}function Mu(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return ju(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function Nu(e){let{toolName:t,argPattern:n}=Zl(e),r=e=>e.some(e=>tu(t,e));return r(Tu)?!0:t.includes(`*`)?r(Eu):Eu.includes(t)||eu(t).riskClass===`execute`?n===void 0||n.trim()===`*`||wu.includes(t)&&Mu(n):!1}function Pu(e){return e.filter(e=>!Nu(e))}const Fu=1e6,Iu={"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}},Lu=[{pattern:/claude-opus/i,price:{inputPerMillion:15,outputPerMillion:75}},{pattern:/claude-sonnet/i,price:{inputPerMillion:3,outputPerMillion:15}},{pattern:/claude-haiku/i,price:{inputPerMillion:.8,outputPerMillion:4}},{pattern:/gpt-4o-mini/i,price:{inputPerMillion:.15,outputPerMillion:.6}},{pattern:/gpt-4/i,price:{inputPerMillion:2.5,outputPerMillion:10}},{pattern:/deepseek/i,price:{inputPerMillion:.14,outputPerMillion:.28}},{pattern:/gemini-2/i,price:{inputPerMillion:.1,outputPerMillion:.4}},{pattern:/gemini-1/i,price:{inputPerMillion:1.25,outputPerMillion:5}}];function Ru(e){let t=Object.hasOwn(Iu,e)?Iu[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of Lu)if(t.test(e))return n}function zu(e,t,n){let r=Ru(e);if(r)return t/Fu*r.inputPerMillion+n/Fu*r.outputPerMillion}function Bu(e){let t=Ru(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function Vu(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 Hu(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 Uu(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([import(`./command-executor-D_UBZHxh.js`).then(e=>e.n),import(`./http-executor-ADn4locH.js`).then(e=>e.n)]);return[new e,new t]}async function Wu(e,t,n,r,i){if(!e)return{blocked:!1,stdout:``};let a=new Set,o=[],s=()=>({...a.size>0&&{unknownHookTypes:[...a].sort()},...o.length>0&&{errors:[...o]}}),c=e[t];if(!c||c.length===0)return{blocked:!1,stdout:``};let l=r??await Uu(),u=new Map;for(let e of l)u.set(e.type,e);let d=[],f=Hu(n),p=-1,m,h;for(let e of c){if(!Vu(e,f))continue;let r=e.env?{...n,env:{...n.env,...e.env}}:n;for(let n of e.hooks){let e=u.get(n.type);if(!e){a.add(n.type);continue}let c=n.type===`command`&&i!==void 0?await e.execute(n,r,i):await e.execute(n,r);if(c.outcome===`deny`)return{blocked:!0,reason:c.reason||`Blocked by hook`,stdout:d.join(`
|
|
12
|
+
`),...s()};if(c.outcome===`error`){o.push(c);continue}let l=le(c.stdout,t);if(d.push(...l.context),l.blockReason!==void 0)return{blocked:!0,reason:l.blockReason,stdout:d.join(`
|
|
13
|
+
`),...l.permissionDecision===`deny`&&{permissionDecision:`deny`},...s()};if(l.permissionDecision!==void 0&&c.source===`command`){let e=ce[l.permissionDecision];e>p?(p=e,m=l.permissionDecision,h=l.updatedInput):e===p&&l.updatedInput!==void 0&&(h=l.updatedInput)}}}let g={blocked:!1,stdout:d.join(`
|
|
14
|
+
`)};m!==void 0&&(g.permissionDecision=m),h!==void 0&&(g.updatedInput=h);let{unknownHookTypes:_,errors:v}=s();return _!==void 0&&(g.unknownHookTypes=_),v!==void 0&&(g.errors=v),g}var Gu=class extends Error{guardrailName;guardrailReason;constructor(e,t){super(t),this.guardrailName=e,this.guardrailReason=t,this.name=`GuardrailBlock`}},Ku=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 Gu(e,`Guardrail "${e}" errored: ${t instanceof Error?t.message:String(t)}`)}if(!r.pass)throw new Gu(e,r.reason??`Guardrail "${e}" blocked the turn`)}))}catch(e){if(e instanceof Gu)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 qu(e,t){return{posture:`advisory`,enforcementReachable:!1,rationale:`Awaited at ${e} but only ${t} is read; \`blocked\` is never consulted.`}}function Ju(e){for(let t of Object.values(e))Object.freeze(t);return Object.freeze(e)}const Yu=Ju({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:qu(`session-lifecycle.ts`,`nothing`),PreCompact:qu(`compaction-orchestrator.ts`,`nothing`),UserPromptSubmit:qu(`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 Xu(e){return Yu[e].posture===`enforcing`}function Zu(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.`}export{A as AGENT_EVENTS,kt as AGENT_EVENT_PREFIX,wt as AbstractAIProvider,Ye as AbstractAgent,Kr as AbstractEventService,zt as AbstractExecutor,Xe as AbstractManager,Rt as AbstractPlugin,Bt as AbstractTool,tc as AgentFactory,D as AgentRuntimeError,Xs as AgentTemplates,w as AuthenticationError,Ie as CONFIRM_NO,Fe as CONFIRM_YES,Di as CONTEXT_ESTIMATE_CHARS_PER_TOKEN,x as CacheIntegrityError,b as CircuitBreakerOpenError,m as ConfigurationError,_t as ConsoleLogger,mc as ConversationAgent,mc as Robota,xr as ConversationHistory,br as ConversationStore,Jr as DEFAULT_ABSTRACT_EVENT_SERVICE,Fc as DEFAULT_BACKGROUND_PERMISSION_POLICY,Ii as DEFAULT_CONTEXT_WINDOW,Hi as DEFAULT_MAX_OUTPUT,gc as DEFAULT_TOOL_RESULT_HARD_CHARS,hc as DEFAULT_TOOL_RESULT_WARNING_CHARS,di as DEFERRED_WITHOUT_LOADER_MESSAGE,qr as DefaultEventService,ar as ENV_REFERENCE_PREFIX,P as EVENT_EMITTER_EVENTS,j as EXECUTION_EVENTS,At as EXECUTION_EVENT_PREFIX,ie as EmptyCompletionError,Zt as ErrorUtils,Ir as EventEmitterPlugin,Dc as EventHistoryModule,F as ExecutionJournalError,jc as ExecutionProxy,L as ExecutionRecoveryError,I as ExecutionSuspendedError,li as FunctionTool,Ku as GuardrailExecutor,Dr as InMemoryEventEmitterMetrics,wr as LocalExecutor,_c as MAX_TOOL_RESULT_CHARS,_e as MODEL_EFFORT_VALUES,Iu as MODEL_PRICES,Wt as MessageConverter,se as ModelNotAvailableError,g as NetworkError,Oc as ORCHESTRATION_EVENTS,kc as ORCHESTRATION_EVENT_PREFIX,ei as ObservableEventService,s as PARAMETER_SCHEMA_KEYWORDS,r as PERMISSIVE_TOOL_SCHEMA_PROFILE,fl as PROTECTED_DIRECTORY_NAMES,pl as PROTECTED_FILE_NAMES,ni as PROVIDER_CALL_EVENTS,ri as PROVIDER_FALLBACK_EVENTS,Dt as PluginCategory,oe as PluginError,Ot as PluginPriority,f as ProviderError,ul as RISK_CLASS_POLICY,c as RateLimitError,ti as SPAN_EVENTS,ci as SPAN_EVENT_PREFIX,a as STRICT_TOOL_SCHEMA_PROFILE,ae as SameToolInputLoopError,ht as SilentLogger,p as StorageError,Qr as StructuredEventService,u as StructuredOutputError,Qi as TASK_EVENTS,$i as TASK_EVENT_PREFIX,ai as TOOL_BODY_EVENTS,M as TOOL_EVENTS,jt as TOOL_EVENT_PREFIX,si as TOOL_PERMISSION_EVENTS,oi as TOOL_QUEUE_EVENTS,n as TOOL_SCHEMA_PROJECTION_MAX_DEPTH,e as TOOL_SCHEMA_PROJECTION_MAX_NODES,Pe as TOOL_SEARCH_TOOL_NAME,Pc as TRUST_TO_MODE,l as ToolExecutionError,Rr as ToolRegistry,bc as ToolResultAdmissionError,fe as TypeUtils,dl as UNCLASSIFIED_TOOL_FALLBACK,ea as USER_EVENTS,ta as USER_EVENT_PREFIX,v as UnsupportedShellError,d as ValidationError,Gt as Validator,Ec as admitToolResult,Pu as allowRulesForAutoMode,Cu as applyPresetToolLists,me as assertProviderNativeWebToolsAvailable,mi as assertResidentToolRemains,$r as bindEventServiceOwner,U as bindWithOwnerPath,T as buildTraceparent,zu as calculateModelCost,En as callJournaledProvider,rt as chatEntryToMessage,Sn as classifyProviderFailure,$l as clearRegisteredToolProfiles,t as closeObjectSchemas,qo as collectAssistantUsageMetadata,Xr as composeEventName,Re as confirmAction,gr as createAssistantMessage,ne as createBoundedOutput,pe as createDefaultProviderCapabilities,Mc as createExecutionProxy,rr as createImageProviderFromDefinition,O as createLogger,ye as createModelEffortOutcome,dr as createProviderFromConfig,er as createRecordEnvResolver,_r as createSystemMessage,vr as createToolMessage,hr as createUserMessage,ir as createVideoProviderFromDefinition,ue as decodeHookVerdict,Bu as estimateBlendedCostPer1000,Ai as estimateContextTokensFromMessages,Oi as estimateSerializedContextTokens,ki as estimateToolSchemaTokens,hu as evaluatePermission,Nn as extractEnumValues,bu as findInvalidPermissionPatterns,Ne as findMediaProviderDefinition,Bi as findModelDefinition,xu as findPermissionPatternWarnings,we as findProviderDefinition,sr as formatEnvReference,Te as formatSupportedProviderTypes,Gi as formatTokenCount,Zr as generateSpanId,bt as getGlobalLogLevel,St as getGlobalLoggerSink,at as getMessagesForAPI,Vi as getModelContextWindow,Ui as getModelMaxOutput,Wi as getModelName,Ce as getProviderCapabilities,Ee as getProviderCredentialRequirement,Fn as getSchemaTypeName,We as getToolEstimatedDuration,Ge as getToolExecutionSteps,eu as getToolPermissionProfile,lr as hasUsableSecretReference,Pn as hasValidationConstraints,i as hashToolSchema,Ht as isAbortFailure,st as isAssistantMessage,Nu as isBroadExecutionAllowRule,nt as isChatEntry,He as isConfirmed,Yr as isDefaultEventService,Xu as isEnforcing,or as isEnvReference,R as isExecutionControlError,Ae as isImageGenerationProvider,Me as isMediaProviderDefinition,ee as isMintedSpanId,ve as isModelEffort,Ue as isProgressReportingTool,gl as isProtectedPath,Xl as isReadOnlyCommandLine,Qs as isRegistryTransactionError,ct as isSystemMessage,iu as isToolDeniedOutright,lt as isToolMessage,ot as isUserMessage,je as isVideoGenerationProvider,Zs as lifecycleOf,k as logger,Ru as lookupModelPrice,su as matchesAnyPattern,it as messageToHistoryEntry,Oe as modelDeclaresCapability,Be as multiSelectAction,Zu as nonVisualObservationText,ur as normalizeProviderConfig,Gn as normalizeStructuredOutput,S as outboundTraceContextFor,nu as parseParameterRule,Xn as parseStructuredResponseText,Qo as peerDriverOf,$o as printablePeerDriver,$n as processEnvResolver,gu as projectPermissionPolicy,o as projectToolSchema,h as providerCallSpanId,ii as readModelFallbackNotice,dn as readProviderFailureDetails,bi as readTokenUsageFromMessage,xi as readTokenUsageFromMetadata,Ri as registerModelMetadata,Ql as registerToolPermissionProfile,wl as removesCriticalPath,fu as requiresFreshApproval,cr as resolveEnvReference,nr as resolveMediaProviderConfig,De as resolveModelCapabilities,ke as resolveModelCapability,Se as resolveModelEffort,y as resolvePlatformShell,Qn as resolveStructuredOutputCapability,Wu as runHooks,$s as runRegistryTransaction,ln as scrubSecrets,ze as selectAction,yt as setGlobalLogLevel,xt as setGlobalLoggerSink,Ke as setToolProgressCallback,Er as shellArgumentForDisplay,qe as snapshotToolProvenance,E as spanIdFromMintedId,Lc as splitCommandSegments,Cn as startPeriodicTask,wn as stopPeriodicTask,te as subprocessTraceEnvironment,Go as sumHistoryUsage,Wo as sumMessagesUsage,Ve as textAction,gn as toProviderError,tu as toolNameMatches,Su as toolNamesToPatterns,_ as toolTraceContextFor,C as traceEnvFor,re as traceHeadersFor,Kn as validateAgainstJsonSchema,Kt as validateAgentConfig,Xt as validateApiKey,Yt as validateModelName,yu as validatePermissionPattern,Jt as validateProviderName,qt as validateUserInput,Uo as verifiedProviderCallUsage,xc as wasToolResultAdmitted,Nc as withEventEmission,Je as withToolProvenance,In as zodToJsonSchema};
|
|
14
15
|
//# sourceMappingURL=index.js.map
|