@robota-sdk/agent-core 3.0.0-beta.82 → 3.0.0-beta.84
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 +122 -0
- package/README.md +160 -110
- package/dist/browser/bounded-output-D3cgiOrh.js +2 -0
- package/dist/browser/bounded-output-D3cgiOrh.js.map +1 -0
- package/dist/browser/{command-executor-cI7XJ374.js → command-executor-BsBTcghZ.js} +2 -2
- package/dist/browser/{command-executor-cI7XJ374.js.map → command-executor-BsBTcghZ.js.map} +1 -1
- package/dist/browser/index.d.ts +1265 -892
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +11 -11
- package/dist/browser/index.js.map +1 -1
- package/dist/node/bounded-output-D3cgiOrh.js +2 -0
- package/dist/node/bounded-output-D3cgiOrh.js.map +1 -0
- package/dist/node/{command-executor-DV-H2oD6.js → command-executor-BdE1zg3q.js} +2 -2
- package/dist/node/{command-executor-DV-H2oD6.js.map → command-executor-BdE1zg3q.js.map} +1 -1
- package/dist/node/{command-executor-Aat_q7P2.cjs → command-executor-CPGK8I8l.cjs} +1 -1
- package/dist/node/{http-executor-71JiIdFP.cjs → http-executor-BYiKn8h3.cjs} +1 -1
- package/dist/node/{index-BhfNtQJk.d.cts → index-DXZ-pyEr.d.ts} +1267 -893
- package/dist/node/index-DXZ-pyEr.d.ts.map +1 -0
- package/dist/node/{index-D2rky0wZ.d.ts → index-gEUh4G-t.d.cts} +1267 -893
- package/dist/node/index-gEUh4G-t.d.cts.map +1 -0
- package/dist/node/index.cjs +9 -9
- package/dist/node/index.d.cts +3 -3
- package/dist/node/index.d.ts +3 -3
- package/dist/node/index.js +9 -9
- package/dist/node/index.js.map +1 -1
- package/dist/node/node.cjs +1 -1
- package/dist/node/node.d.cts +1 -1
- package/dist/node/node.d.ts +1 -1
- package/dist/node/node.js +1 -1
- package/dist/node/testing/index.d.cts +1 -1
- package/dist/node/testing/index.d.ts +1 -1
- package/dist/node/{types-gNrckgFE.d.ts → types-BQ-sKCQS.d.cts} +3 -4
- package/dist/node/types-BQ-sKCQS.d.cts.map +1 -0
- package/dist/node/{types-gNrckgFE.d.cts → types-BQ-sKCQS.d.ts} +3 -4
- package/dist/node/types-BQ-sKCQS.d.ts.map +1 -0
- package/dist/node/verdict-decoder-D412SAGd.cjs +1 -0
- package/package.json +8 -4
- package/dist/browser/bounded-output-DpjpS98g.js +0 -2
- package/dist/browser/bounded-output-DpjpS98g.js.map +0 -1
- package/dist/node/bounded-output-DpjpS98g.js +0 -2
- package/dist/node/bounded-output-DpjpS98g.js.map +0 -1
- package/dist/node/index-BhfNtQJk.d.cts.map +0 -1
- package/dist/node/index-D2rky0wZ.d.ts.map +0 -1
- package/dist/node/types-gNrckgFE.d.cts.map +0 -1
- package/dist/node/types-gNrckgFE.d.ts.map +0 -1
- package/dist/node/verdict-decoder-Estx9MtY.cjs +0 -1
package/dist/node/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
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,S as d,T as f,_ as p,a as m,b as h,c as g,d as _,f as v,g as y,h as b,i as x,l as S,m as C,n as w,o as T,p as E,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-DpjpS98g.js";import{n as ce,r as le,t as ue}from"./verdict-decoder-Dk_w2NG9.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}var qe=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}},Je=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 Ye(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 Xe(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 Ze(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*Qe(e,t,n,r){if(!e||!e.executeChatStream)throw Error(`Streaming executor is required for ${t} provider.`);if(!r?.model)throw Error(`Model is required for executor streaming in ${t} provider.`);let i=e.executeChatStream({messages:n,options:r,provider:t,model:r.model,stream:!0,...r.tools&&{tools:r.tools}}),a=!1;for await(let e of i){if(e.kind===`terminal`){if(a)throw Error(`Executor "${t}" emitted more than one stream terminal result.`);a=!0}yield e}if(!a)throw Error(`Executor "${t}" ended a stream without a terminal result.`)}async function*$e(e,t,n,r,i){e.debug?.(`🔍 [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request`,{provider:n,model:i?.model,hasTools:!!i?.tools,toolsCount:i?.tools?.length||0,toolNames:i?.tools?.map(e=>e.name)||[]}),yield*Qe(t,n,r,i)}function D(e){return e.category===`chat`}function et(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 tt(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function nt(e){return e.filter(D).map(et)}function rt(e){return e.role===`user`}function it(e){return e.role===`assistant`}function at(e){return e.role===`system`}function ot(e){return e.role===`tool`}function st(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 ct(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 lt(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 ut(e,t,n){let r,i=st(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=ct(i,e.effortTable!==void 0,t),lt(e.name,i,r),{content:a.content??null,toolCalls:it(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*dt(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=st(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:it(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=ct(i,e.effortTable!==void 0,t),lt(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const ft={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var pt=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}},mt=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??pt.getInstance().getGlobalSink()??ft}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),ht(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),ht(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),ht(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),ht(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||pt.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 ht(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function O(e,t={}){return new mt(e,t)}function gt(e){pt.getInstance().setGlobalLevel(e)}function _t(){return pt.getInstance().getGlobalLevel()}function vt(e){pt.getInstance().setGlobalSink(e)}function yt(){return pt.getInstance().getGlobalSink()}const k=O(`agents`),bt=O(`ToolSchemaProjection`);var xt=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=ft){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 St(n,t);if(e.done||(await Ct(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return ut(this,this.logger,e)}async*generateStreamingResponse(e){yield*dt(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return pe(this.supportsTools())}validateConfig(){return!0}validateMessages(e){Ye(e)}validateTools(e){Xe(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`};bt.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 Ze(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*$e(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function St(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 Ct(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let wt=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}({}),Tt=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`},j=`agent`,M={START:`start`,COMPLETE:`complete`,ERROR:`error`,ASSISTANT_MESSAGE_START:`assistant_message_start`,ASSISTANT_MESSAGE_COMPLETE:`assistant_message_complete`,USER_MESSAGE:`user_message`,TOOL_RESULTS_TO_LLM:`tool_results_to_llm`,TOOL_RESULTS_READY:`tool_results_ready`},N=`execution`,P={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},F=`tool`,Et=`unknown_tool`,Dt=`argument_decode_error`,I=(e,t)=>`${e}.${t}`,Ot={START:I(N,M.START),COMPLETE:I(N,M.COMPLETE),ERROR:I(N,M.ERROR)},kt={CALL_START:I(F,P.CALL_START),CALL_COMPLETE:I(F,P.CALL_COMPLETE),CALL_ERROR:I(F,P.CALL_ERROR)},At={EXECUTION_START:I(j,A.EXECUTION_START),EXECUTION_COMPLETE:I(j,A.EXECUTION_COMPLETE),EXECUTION_ERROR:I(j,A.EXECUTION_ERROR),CREATED:I(j,A.CREATED)},L={EXECUTION_START:Ot.START,EXECUTION_COMPLETE:Ot.COMPLETE,EXECUTION_ERROR:Ot.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:kt.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:At.EXECUTION_START,AGENT_EXECUTION_COMPLETE:At.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:At.EXECUTION_ERROR,AGENT_CREATED:At.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 jt=class{enabled=!0;category=`custom`;priority=Tt.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(L.MODULE_INITIALIZE_START,L.MODULE_INITIALIZE_COMPLETE,L.MODULE_INITIALIZE_ERROR,L.MODULE_EXECUTION_START,L.MODULE_EXECUTION_COMPLETE,L.MODULE_EXECUTION_ERROR,L.MODULE_DISPOSE_START,L.MODULE_DISPOSE_COMPLETE,L.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}},Mt=class{logger;constructor(e=ft){this.logger=e}supportsTools(){return!1}validateConfig(){return!0}async dispose(){}async withRetry(e,t=3,n=1e3){let r;for(let i=0;i<=t;i++)try{return await e()}catch(e){r=e instanceof Error?e:Error(String(e)),i<t&&(this.logger.warn?.(`[${this.name}] Attempt ${i+1} failed, retrying in ${n}ms`,{error:r.message,attempt:i+1,maxRetries:t}),await this.delay(n))}throw r}withTimeout(e,t){let n;return Promise.race([e.then(e=>(clearTimeout(n),e)),new Promise((e,r)=>{n=setTimeout(()=>r(Error(`Operation timed out after ${t}ms`)),t)})])}delay(e){return new Promise(t=>setTimeout(t,e))}logDebug(e,t){this.logger.debug?.(`[${this.name}] ${e}`,t)}logError(e,t,n){this.logger.error?.(`[${this.name}] ${e}`,{error:t.message,stack:t.stack,...n})}validateRequest(e){if(!e.messages||e.messages.length===0)throw Error(`Request must include at least one message`);if(!e.provider)throw Error(`Request must specify a provider`);if(!e.model)throw Error(`Request must specify a model`)}validateResponse(e){if(!e.role)throw Error(`Response must have a role`);let t=e.role===`assistant`&&`toolCalls`in e&&Array.isArray(e.toolCalls)&&e.toolCalls.length>0;if(!e.content&&!t)throw Error(`Response must have content or tool calls`)}},Nt=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??ft}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 Pt(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function Ft(e,t){if(t?.aborted===!0)return!0;if(!Pt(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return Pt(n)&&n.name===`AbortError`}var It=class{static toProviderFormat(e,t,n={}){if(typeof t==`function`)return t(e);if(typeof t==`string`){let r=n[t];if(r!==void 0)return r(e)}return this.toUniversalFormat(e)}static toUniversalFormat(e){return e}static extractSystemMessage(e){return e.find(e=>e.role===`system`)?.content}static filterNonSystemMessages(e){return e.filter(e=>e.role!==`system`)}},R=class{static validateAgentConfig(e){let t=[],n=[];return e.name||t.push(`name is required`),(!e.aiProviders||e.aiProviders.length===0)&&t.push(`aiProviders array is required and must have at least one provider`),e.defaultModel?(e.defaultModel.provider||t.push(`defaultModel.provider is required`),e.defaultModel.model||t.push(`defaultModel.model is required`)):t.push(`defaultModel is required`),e.aiProviders&&e.defaultModel?.provider&&(e.aiProviders.map(e=>e.name).includes(e.defaultModel.provider)||t.push(`defaultModel.provider "${e.defaultModel.provider}" is not found in aiProviders list`)),e.defaultModel?.temperature!==void 0&&(typeof e.defaultModel.temperature!=`number`||e.defaultModel.temperature<0||e.defaultModel.temperature>2)&&t.push(`defaultModel.temperature must be a number between 0 and 2`),e.defaultModel?.maxTokens!==void 0&&(typeof e.defaultModel.maxTokens!=`number`||e.defaultModel.maxTokens<=0)&&t.push(`defaultModel.maxTokens must be a positive number`),e.systemMessage&&e.systemMessage.length>1e3&&n.push(`systemMessage is quite long, consider keeping it concise for better performance`),e.tools&&e.tools.length>20&&n.push(`Large number of tools may impact performance, consider grouping related tools`),{isValid:t.length===0,errors:t,warnings:n}}static validateUserInput(e){let t=[],n=[];return!e||typeof e!=`string`?t.push(`Input must be a non-empty string`):(e.trim().length===0&&t.push(`Input cannot be only whitespace`),e.length>1e4&&n.push(`Very long input may be truncated by AI providers`)),{isValid:t.length===0,errors:t,warnings:n}}static validateProviderName(e){let t=[];return!e||typeof e!=`string`?t.push(`Provider name must be a non-empty string`):/^[a-zA-Z][a-zA-Z0-9_-]*$/.test(e)||t.push(`Provider name must start with a letter and contain only letters, numbers, underscores, and hyphens`),{isValid:t.length===0,errors:t}}static validateModelName(e){let t=[];return!e||typeof e!=`string`?t.push(`Model name must be a non-empty string`):e.trim().length===0&&t.push(`Model name cannot be only whitespace`),{isValid:t.length===0,errors:t}}static validateApiKey(e){let t=[];return!e||typeof e!=`string`?(t.push(`API key must be a non-empty string`),{isValid:!1,errors:t}):(e.length<10&&t.push(`API key appears to be too short`),/\s/.test(e)&&t.push(`API key should not contain whitespace`),{isValid:t.length===0,errors:t,warnings:[]})}};const Lt=R.validateAgentConfig,Rt=R.validateUserInput,zt=R.validateProviderName,Bt=R.validateModelName,Vt=R.validateApiKey;var Ht=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 y(e.message||t):new y(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new h(`Failed to ${n}`,t,r,{operation:n})}};const Ut=new Set([`rate_limit_error`]),Wt=new Set([`overloaded_error`]),Gt=new Set([`authentication_error`,`permission_error`]),Kt=new Set([`model_not_found`]),qt=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),Jt=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]);function z(e){return typeof e==`object`&&e?e:void 0}function B(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function Yt(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=B(r,`type`),o=B(t,`type`)??B(i,`type`)??(a===`error`?void 0:a)??(n!==void 0&&!(e instanceof d)?B(t,`code`):void 0);return{...n!==void 0&&{status:n},...o!==void 0&&{type:o}}}function Xt(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 Zt(e){return Ft(e)||Xt(e)===`APIUserAbortError`}function Qt(e,t,n){if(e instanceof d||Zt(e))return e;let r=e instanceof Error?e:Error(typeof e==`string`?e:``),i=Yt(e);return i.status===429||i.type!==void 0&&Ut.has(i.type)?new oe(r.message||`${t} rate limit exceeded.`,void 0,t):new h(`${n}: ${r.message||`request failed`}`,t,r,void 0,i)}function $t(e){if(e instanceof ie)return!0;let t=z(e);if(t===void 0)return!1;let n=B(t,`code`);if(n!==void 0&&qt.has(n))return!0;let r=Xt(e);if(r!==void 0&&Jt.has(r))return!0;let i=B(t,`name`);return i!==void 0&&Jt.has(i)?!0:i===`TypeError`&&B(t,`message`)===`fetch failed`}function en(e){let t=[],n=new Set,r=[e];for(let e=0;e<=8&&r.length>0;e++){let e=[];for(let i of r){if(i==null||n.has(i))continue;n.add(i),t.push(i);let r=z(i);r!==void 0&&e.push(r.originalError,r.cause)}r=e}return t}const V=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function tn(e){return e instanceof h?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:Yt(e)}function nn(e){if(e instanceof d)return!1;let t=B(z(e),`code`);return t!==void 0&&Kt.has(t)}function rn(e){if(e instanceof oe)return V(!1,`rate-limit`);if(e instanceof E)return V(!1,`authentication`);if(e instanceof p)return V(!0,`model-unavailable`);let{status:t,type:n}=tn(e);return t===429||n!==void 0&&Ut.has(n)?V(!1,`rate-limit`):t===401||t===403||n!==void 0&&Gt.has(n)?V(!1,`authentication`):t===402?V(!1,`billing`):(t===void 0||t===400||t===404)&&(nn(e)||n!==void 0&&Kt.has(n))?V(!0,`model-unavailable`):$t(e)?V(!1,`network`):t===529||n!==void 0&&Wt.has(n)?V(!0,`overloaded`):t===503?V(!0,`service-unavailable`):t===500||t===502||t===504?V(!0,`server-error`):t===404?{kind:`tentative`,classification:{switchable:!0,reason:`model-unavailable`}}:t===400||t===413?{kind:`tentative`,classification:{switchable:!1,reason:`invalid-request`}}:{kind:`none`}}function an(e,t){let n=en(e);if(t?.aborted===!0||n.some(e=>Zt(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=rn(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 on(e,t,n){return setInterval(()=>{(async()=>{try{await n()}catch(n){e.error(`Periodic task failed`,{task:t.name,error:n instanceof Error?n.message:String(n)})}})()},t.intervalMs)}function sn(e){e&&clearInterval(e)}function cn(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:return}}function ln(e){let t=un(e);return t.typeName===`ZodObject`?t:void 0}function un(e){let t=e;for(let e=0;e<=64;e+=1){let e=t.typeName===`ZodEffects`?t.schema:t.typeName===`ZodOptional`||t.typeName===`ZodNullable`||t.typeName===`ZodDefault`?t.innerType:void 0;if(!e)return t;t=H(e,`${String(t.typeName)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function H(e,t){let n=e._def;if(!n)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function dn(e){if(typeof e==`string`)return`string`;if(typeof e==`number`)return`number`;if(typeof e==`boolean`)return`boolean`;if(e===null)return`null`}function fn(e){let t=e._def;if(!t)throw Error(`Zod schema is missing _def; cannot determine required fields.`);let n=t;for(let e=0;n.typeName===`ZodEffects`&&e<=64&&n.schema;e+=1)n=H(n.schema,`ZodEffects inner type`);return n.typeName!==`ZodOptional`&&n.typeName!==`ZodNullable`&&n.typeName!==`ZodDefault`}function pn(e){let t=H(e,`Zod schema`);if(!t.values||!Array.isArray(t.values))throw Error(`ZodEnum schema is missing enum values; cannot extract enum values.`);return t.values}function mn(e){let t=H(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function hn(e){let t=H(e,`Zod schema`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function gn(e,t={}){let n=H(e,`Zod schema`),r=ln(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 _n(r,t.allowAdditionalProperties)}function _n(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=U(a,t),fn(a)&&r.push(e);let a=cn(e,t);return{type:`object`,properties:n,required:r,...a!==void 0&&{additionalProperties:a}}}function U(e,t){let n=H(e,`Zod type`),r={};switch(n.description&&(r.description=n.description),n.typeName){case`ZodString`:return{type:`string`,...r};case`ZodNumber`:return{type:`number`,...r};case`ZodBoolean`:return{type:`boolean`,...r};case`ZodArray`:if(!n.type)throw Error(`ZodArray is missing item type; cannot convert to JSON schema.`);return{type:`array`,items:U(n.type,t),...r};case`ZodObject`:return{..._n(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{...yn(n.values),...r};case`ZodDate`:return{type:`string`,format:`date-time`,...r};case`ZodLiteral`:return{...vn(n.value),...r};case`ZodUnion`:case`ZodDiscriminatedUnion`:{let e=n.options;if(!e||!Array.isArray(e)||e.length===0)throw Error(`${String(n.typeName)} is missing options; cannot convert to JSON schema.`);return{anyOf:e.map(e=>U(e,t)),...r}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...U(n.schema,t),...r};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[U(n.innerType,t),{type:`null`}],...r};case`ZodOptional`:case`ZodDefault`:if(!n.innerType)throw Error(`${String(n.typeName)} is missing innerType; cannot convert to JSON schema.`);return{...U(n.innerType,t),...r};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:U(n.valueType,t),...r}:{type:`object`,additionalProperties:{type:`string`},...r};default:throw Error(xn(String(n.typeName)))}}function vn(e){let t=dn(e);if(!t)throw Error(`ZodLiteral value ${String(e)} is not a JSON primitive; cannot convert to JSON schema.`);return t===`null`?{type:`null`}:{type:t,enum:[e]}}function yn(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 bn={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 xn(e){return`${e} cannot be carried by the universal JSON-schema subset: ${bn[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 Sn(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function Cn(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 wn(e){if(Sn(e))return{name:`structured_output`,jsonSchema:gn(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:Cn(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=W(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function W(e,t,n){let r=[],i=e.type;if(e.anyOf)return En(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${Dn(t)}`];let i=t,a=e.required??[];for(let e of a)e in i||r.push(`${n}.${e}: required property missing`);let o=e.properties??{};for(let[e,t]of Object.entries(o))e in i&&r.push(...W(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(Tn(e))for(let e of Object.keys(i))e in o||r.push(`${n}.${e}: unexpected additional property`);else if(typeof s==`object`)for(let[e,t]of Object.entries(i))e in o||r.push(...W(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${Dn(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...W(i,e,`${n}[${t}]`))}),r}case`string`:return typeof t==`string`?(e.enum&&!e.enum.some(e=>e===t)&&r.push(`${n}: value ${JSON.stringify(t)} is not one of the allowed enum values`),e.pattern&&!new RegExp(e.pattern).test(t)&&r.push(`${n}: value does not match pattern ${e.pattern}`),r):[`${n}: expected string, got ${Dn(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${Dn(t)}`]:(i===`integer`&&!Number.isInteger(t)&&r.push(`${n}: expected integer, got non-integer number`),e.minimum!==void 0&&t<e.minimum&&r.push(`${n}: value ${t} is below minimum ${e.minimum}`),e.maximum!==void 0&&t>e.maximum&&r.push(`${n}: value ${t} is above maximum ${e.maximum}`),e.enum&&!e.enum.some(e=>e===t)&&r.push(`${n}: value ${t} is not one of the allowed enum values`),r);case`boolean`:return typeof t==`boolean`?r:[`${n}: expected boolean, got ${Dn(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${Dn(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function Tn(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function En(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>W(e,t,`${n}|anyOf[${r}]`));return r.some(e=>e.length===0)?[]:[`${n}: value matches none of the ${e.length} allowed shapes`,...r.flat()]}function Dn(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function On(e){let t=e.trim(),n=/^```(?:json)?[^\S\n]*\n([\s\S]*?)\n?```$/.exec(t),r=n?n[1]:t;try{return{success:!0,value:JSON.parse(r)}}catch(e){return{success:!1,issue:`response is not valid JSON: ${e instanceof Error?e.message:String(e)}`}}}function kn(e,t){return Oe(e,t,`json_schema`)===!0?`response_schema`:Oe(e,t,`json_object`)===!0?`json_object`:`none`}function An(e){let{table:t,model:n,endpointIsVendorDefault:r}=e;if(!t)return r===!1?{mechanism:`response_schema`,provenance:`unverified-endpoint`,reason:`a custom baseURL is configured and the provider declares no capability table, so nothing here can claim the endpoint enforces the schema`}:{mechanism:`response_schema`,provenance:`undeclared`,reason:`the provider declares no capability table, so the request is sent as asked — silence is not a denial`};let i=kn(t,n),a=t.deviations?.[n]!==void 0;return r===!1?{mechanism:i,provenance:`unverified-endpoint`,reason:`a custom baseURL is configured, so the vendor capability table describes the protocol but not necessarily the endpoint serving it`}:{mechanism:i,provenance:a?`catalog`:`vendor-default`,...i===`none`&&{reason:`${n} declares no schema transport, so the schema travels in the prompt and is enforced by validation`},...i===`json_object`&&{reason:`${n} guarantees JSON but not its shape, so the schema travels in the prompt and is enforced by validation`}}}const G=e=>process.env[e];function jn(e){return t=>e[t]}function Mn(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function Nn(e,t={},n=G){let r=e.credentialRequirement,i=t.baseUrl??Mn(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=Mn(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 Pn(e,t={},n=G){if(e.createImageProvider===void 0)return;let r=Nn(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return Ae(t)?t:void 0}catch{return}}function Fn(e,t={},n=G){if(e.createVideoProvider===void 0)return;let r=Nn(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return je(t)?t:void 0}catch{return}}const In=`$ENV:`;function Ln(e){return e.startsWith(In)}function Rn(e){return`${In}${e}`}function zn(e,t=G){if(!Ln(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function Bn(e,t=G){return e===void 0||e.length===0?!1:zn(e,t)!==void 0}function Vn(e,t,n=G){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=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:zn(a,n),baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...o!==void 0&&{options:o}}}function Hn(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&&!Un(e,r))throw Error(`Provider ${e.name} requires ${Gn(r)}`);return n.createProvider(e)}function Un(e,t){return t.anyOf.some(t=>Wn(e,t))}function Wn(e,t){let n=e[t];return n!==void 0&&n.length>0}function Gn(e){return e.anyOf.map(e=>e===`apiKey`?`apiKey (API key)`:e).join(` or `)}function K(){let e=globalThis.crypto;if(typeof e?.randomUUID==`function`)return e.randomUUID();if(typeof e?.getRandomValues==`function`){let t=e.getRandomValues(new Uint8Array(16));t[6]=(t[6]??0)&15|64,t[8]=(t[8]??0)&63|128;let n=Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``);return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}throw Error(`No cryptographic randomness is available on this platform (globalThis.crypto is missing both randomUUID and getRandomValues), so a unique identifier cannot be generated. This is not something to substitute Math.random for.`)}function Kn(e,t){let n={id:K(),role:`user`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function qn(e,t){let n={id:K(),role:`assistant`,content:e,state:t?.state??`complete`,timestamp:new Date};return t?.toolCalls&&(n.toolCalls=t.toolCalls),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Jn(e,t){let n={id:K(),role:`system`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Yn(e,t){let n={id:K(),role:`tool`,content:e,toolCallId:t.toolCallId,state:`complete`,timestamp:new Date};return t.name&&(n.name=t.name),t.metadata&&(n.metadata=t.metadata),t.parts&&(n.parts=t.parts),n}var Xn=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(tt(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(Kn(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(qn(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(Jn(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>D(e)&&at(et(e)),i=this.entries.filter(e=>!r(e)),a=tt(Jn(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(Yn(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(D).map(et)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(D).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(D);if(e.length<=this.maxMessages)return;let t=e.map(et),n=t.filter(at),r=t.filter(e=>!at(e)),i=Math.max(0,this.maxMessages-n.length),a=[...n,...r.slice(-i)],o=new Set(a.map(e=>e.id));this.entries=this.entries.filter(e=>!D(e)||o.has(e.id))}},Zn=class{history;pendingAssistant=null;constructor(e=0){this.history=new Xn({maxMessages:e})}addMessage(e){this.history.addMessage(e)}addUserMessage(e,t,n){this.history.addUserMessage(e,t,n)}addAssistantMessage(e,t,n,r){this.history.addAssistantMessage(e,t,n,r)}addSystemMessage(e,t,n){this.history.addSystemMessage(e,t,n)}setSystemPrompt(e,t,n){this.history.setSystemPrompt(e,t,n)}addToolMessage(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n||`unknown`,r,i)}addToolMessageWithId(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n,r,i)}addEntry(e){this.history.addEntry(e)}getHistory(){return this.history.getHistory()}getMessages(){return this.history.getMessages()}getMessagesByRole(e){return this.history.getMessagesByRole(e)}getRecentMessages(e){return this.history.getRecentMessages(e)}getMessageCount(){return this.history.getMessageCount()}beginAssistant(){this.pendingAssistant||={id:K(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:K(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:K(),content:``,toolCalls:[]},this.pendingAssistant.toolCalls.some(t=>t.id===e.id)||this.pendingAssistant.toolCalls.push(e)}commitAssistant(e,t){if(!this.pendingAssistant)return;let n=this.pendingAssistant,r=n.toolCalls.length>0,i=n.content,a={id:n.id,role:`assistant`,content:i,state:e,timestamp:new Date,...r&&{toolCalls:n.toolCalls},...t&&{metadata:t}};this.history.addMessage(a),this.pendingAssistant=null}discardPending(){this.pendingAssistant=null}hasPendingAssistant(){return this.pendingAssistant!==null}getPendingContent(){return this.pendingAssistant?.content??``}getMessagesForAPI(){return this.history.getMessages().map(e=>{let t={role:e.role,content:e.content};return it(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,S as d,T as f,_ as p,a as m,b as h,c as g,d as _,f as v,g as y,h as b,i as x,l as S,m as C,n as w,o as T,p as E,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-D3cgiOrh.js";import{n as ce,r as le,t as ue}from"./verdict-decoder-Dk_w2NG9.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}var qe=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}},Je=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 Ye(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 Xe(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 Ze(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*Qe(e,t,n,r){if(!e||!e.executeChatStream)throw Error(`Streaming executor is required for ${t} provider.`);if(!r?.model)throw Error(`Model is required for executor streaming in ${t} provider.`);let i=e.executeChatStream({messages:n,options:r,provider:t,model:r.model,stream:!0,...r.tools&&{tools:r.tools}}),a=!1;for await(let e of i){if(e.kind===`terminal`){if(a)throw Error(`Executor "${t}" emitted more than one stream terminal result.`);a=!0}yield e}if(!a)throw Error(`Executor "${t}" ended a stream without a terminal result.`)}async function*$e(e,t,n,r,i){e.debug?.(`🔍 [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request`,{provider:n,model:i?.model,hasTools:!!i?.tools,toolsCount:i?.tools?.length||0,toolNames:i?.tools?.map(e=>e.name)||[]}),yield*Qe(t,n,r,i)}function et(e){return e.category===`chat`}function tt(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 nt(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function rt(e){return e.filter(et).map(tt)}function it(e){return e.role===`user`}function at(e){return e.role===`assistant`}function ot(e){return e.role===`system`}function st(e){return e.role===`tool`}function ct(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 lt(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 ut(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 dt(e,t,n){let r,i=ct(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=lt(i,e.effortTable!==void 0,t),ut(e.name,i,r),{content:a.content??null,toolCalls:at(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*ft(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=ct(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:at(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=lt(i,e.effortTable!==void 0,t),ut(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const pt={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var mt=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}},ht=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??mt.getInstance().getGlobalSink()??pt}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),gt(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),gt(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),gt(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),gt(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||mt.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 gt(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function D(e,t={}){return new ht(e,t)}function _t(e){mt.getInstance().setGlobalLevel(e)}function vt(){return mt.getInstance().getGlobalLevel()}function yt(e){mt.getInstance().setGlobalSink(e)}function bt(){return mt.getInstance().getGlobalSink()}const O=D(`agents`),xt=D(`ToolSchemaProjection`);var St=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=pt){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 Ct(n,t);if(e.done||(await wt(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return dt(this,this.logger,e)}async*generateStreamingResponse(e){yield*ft(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return pe(this.supportsTools())}validateConfig(){return!0}validateMessages(e){Ye(e)}validateTools(e){Xe(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`};xt.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 Ze(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*$e(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Ct(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 wt(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let Tt=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}({}),Et=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`},Dt=`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`},Ot=`execution`,j={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`,M=(e,t)=>`${e}.${t}`,Mt={START:M(Ot,A.START),COMPLETE:M(Ot,A.COMPLETE),ERROR:M(Ot,A.ERROR)},Nt={CALL_START:M(kt,j.CALL_START),CALL_COMPLETE:M(kt,j.CALL_COMPLETE),CALL_ERROR:M(kt,j.CALL_ERROR)},Pt={EXECUTION_START:M(Dt,k.EXECUTION_START),EXECUTION_COMPLETE:M(Dt,k.EXECUTION_COMPLETE),EXECUTION_ERROR:M(Dt,k.EXECUTION_ERROR),CREATED:M(Dt,k.CREATED)},N={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=Et.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(N.MODULE_INITIALIZE_START,N.MODULE_INITIALIZE_COMPLETE,N.MODULE_INITIALIZE_ERROR,N.MODULE_EXECUTION_START,N.MODULE_EXECUTION_COMPLETE,N.MODULE_EXECUTION_ERROR,N.MODULE_DISPOSE_START,N.MODULE_DISPOSE_COMPLETE,N.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=pt){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??pt}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 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 y(e.message||t):new y(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new h(`Failed to ${n}`,t,r,{operation:n})}},P=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}},F=class extends Error{code=`EXECUTION_SUSPENDED`;requests;constructor(e){super(`Execution is waiting for correlated tool responses`),this.name=`ExecutionSuspendedError`,this.requests=structuredClone(e)}},I=class extends Error{code;actionIds;constructor(e,t,n=[]){super(t),this.code=e,this.actionIds=n,this.name=`ExecutionRecoveryError`}};function L(e){return e instanceof P||e instanceof I||e instanceof F}function Yt(e,t){return e instanceof P?e:t instanceof P?t:e instanceof I?e:t instanceof I?t:e instanceof F&&t instanceof F?new F([...new Map([...e.requests,...t.requests].map(e=>[e.requestId,e])).values()]):e instanceof F?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 R(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=R(e);if(t===void 0)return{};let n=typeof t.status==`number`?t.status:void 0,r=R(t.error),i=R(r?.error),a=sn(r,`type`),o=sn(t,`type`)??sn(i,`type`)??(a===`error`?void 0:a)??(n!==void 0&&!(e instanceof d)?sn(t,`code`):void 0);return{...n!==void 0&&{status:n},...o!==void 0&&{type:o}}}function ln(e){let t=R(e)?.constructor;if(typeof t!=`function`)return;let n=t.name;return typeof n==`string`&&n.length>0?n:void 0}function un(e){return zt(e)||ln(e)===`APIUserAbortError`}function dn(e){let t=R(e)?.headers,n=t instanceof Headers?t.get(`retry-after`):R(t)?.[`retry-after`]??R(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 d||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 oe(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,c=_n(e)||i.type!==void 0&&$t.has(i.type)||rn(a);return s&&c?new p(void 0,t,void 0,{...o,originalMessage:a}):mn(e)?new ie(a,r,o,t):new h(`${n}: ${a}`,t,r,void 0,i)}function mn(e){if(e instanceof ie)return!0;let t=R(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=R(i);r!==void 0&&e.push(r.originalError,r.cause)}r=e}return t}const z=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function gn(e){return e instanceof h?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:cn(e)}function _n(e){if(e instanceof d)return!1;let t=sn(R(e),`code`);return t!==void 0&&$t.has(t)}function vn(e){if(e instanceof oe)return z(!1,`rate-limit`);if(e instanceof E)return z(!1,`authentication`);if(e instanceof p)return z(!0,`model-unavailable`);let{status:t,type:n}=gn(e);return t===429||n!==void 0&&Xt.has(n)?z(!1,`rate-limit`):t===401||t===403||n!==void 0&&Qt.has(n)?z(!1,`authentication`):t===402?z(!1,`billing`):(t===void 0||t===400||t===404)&&(_n(e)||n!==void 0&&$t.has(n))?z(!0,`model-unavailable`):mn(e)?z(!1,`network`):t===529||n!==void 0&&Zt.has(n)?z(!0,`overloaded`):t===503?z(!0,`service-unavailable`):t===500||t===502||t===504?z(!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 B(e,t){try{await e.append(structuredClone(t))}catch(e){throw new P(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 B(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 B(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 B(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=V(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function V(e,t,n){let r=[],i=e.type;if(e.anyOf)return Wn(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${Gn(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(...V(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(Un(e))for(let e of Object.keys(i))e in o||r.push(`${n}.${e}: unexpected additional property`);else if(typeof s==`object`)for(let[e,t]of Object.entries(i))e in o||r.push(...V(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${Gn(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...V(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 ${Gn(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${Gn(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 ${Gn(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${Gn(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function Un(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function Wn(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>V(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 Gn(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function Kn(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 qn(e,t){return Oe(e,t,`json_schema`)===!0?`response_schema`:Oe(e,t,`json_object`)===!0?`json_object`:`none`}function Jn(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=qn(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 Yn=e=>process.env[e];function Xn(e){return t=>e[t]}function Zn(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function Qn(e,t={},n=Yn){let r=e.credentialRequirement,i=t.baseUrl??Zn(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=Zn(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 $n(e,t={},n=Yn){if(e.createImageProvider===void 0)return;let r=Qn(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return Ae(t)?t:void 0}catch{return}}function er(e,t={},n=Yn){if(e.createVideoProvider===void 0)return;let r=Qn(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return je(t)?t:void 0}catch{return}}const tr=`$ENV:`;function nr(e){return e.startsWith(tr)}function rr(e){return`${tr}${e}`}function ir(e,t=Yn){if(!nr(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function ar(e,t=Yn){return e===void 0||e.length===0?!1:ir(e,t)!==void 0}function or(e,t,n=Yn){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=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:ir(a,n),baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...o!==void 0&&{options:o}}}function sr(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&&!cr(e,r))throw Error(`Provider ${e.name} requires ${ur(r)}`);return n.createProvider(e)}function cr(e,t){return t.anyOf.some(t=>lr(e,t))}function lr(e,t){let n=e[t];return n!==void 0&&n.length>0}function ur(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 dr(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 fr(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 pr(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 mr(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 hr=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(nt(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(dr(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(fr(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(pr(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>et(e)&&ot(tt(e)),i=this.entries.filter(e=>!r(e)),a=nt(pr(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(mr(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(et).map(tt)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(et).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(et);if(e.length<=this.maxMessages)return;let t=e.map(tt),n=t.filter(ot),r=t.filter(e=>!ot(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=>!et(e)||o.has(e.id))}},gr=class{history;pendingAssistant=null;constructor(e=0){this.history=new hr({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 at(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
|
|
2
2
|
|
|
3
|
-
[This response was interrupted by the user]`),it(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),ot(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},Qn=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 Zn(this.maxMessagesPerConversation))),this.conversations.get(e)}hasConversation(e){return this.conversations.has(e)}removeConversation(e){let t=this.conversations.delete(e);return t&&this.logger.debug(`Removed conversation`,{conversationId:e}),t}clearAll(){let e=this.conversations.size;this.conversations.clear(),this.logger.debug(`Cleared all conversations`,{removedCount:e})}getStats(){let e=Array.from(this.conversations.keys()),t=Array.from(this.conversations.values()).reduce((e,t)=>e+t.getMessageCount(),0);return{totalConversations:this.conversations.size,conversationIds:e,totalMessages:t}}cleanupOldConversations(){if(this.conversations.size===0)return;let e=this.conversations.keys().next().value;e&&this.conversations.delete(e)}};function $n(){let e,t=0;return{observe(n){t+=1,t===1&&(e=n)},terminal(n){if(t>1)throw Error(`Provider "${n}" emitted ${t} model-effort outcomes`);return e}}}function er(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 tr=class extends Mt{name=`local`;version=`1.0.0`;providers=new Map;config;constructor(e={}){super(),this.config={timeout:3e4,maxRetries:3,retryDelay:1e3,enableLogging:!1,...e}}registerProvider(e,t){this.providers.set(e,t)}unregisterProvider(e){this.providers.delete(e)}getProvider(e){return this.providers.get(e)}async executeChat(e){this.validateRequest(e);let t=this.requireChatProvider(e);this.config.enableLogging&&this.logDebug(`Executing chat with provider: ${e.provider}, model: ${e.model}`);try{let n=$n(),r=await this.withRetry(async()=>(n=$n(),await this.withTimeout(t.chat(e.messages,{...e.options,model:e.model,tools:e.tools,onModelEffortOutcome:e=>{n.observe(e)}}),this.config.timeout)),this.config.maxRetries,this.config.retryDelay);if(r.role!==`assistant`)throw Error(`Expected assistant message, got ${r.role}`);let i=n.terminal(e.provider);return this.validateResponse(r),er(this.logger,e.options,i),{message:r,...i!==void 0&&{modelEffortOutcome:i}}}catch(t){let n=t instanceof Error?t:Error(String(t));throw this.logError(`Chat execution failed`,n,{provider:e.provider,model:e.model}),n}}async*executeChatStream(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chatStream)throw Error(`Provider "${e.provider}" does not implement chatStream method`);this.config.enableLogging&&this.logDebug(`Executing streaming chat with provider: ${e.provider}, model: ${e.model}`);try{let n=$n(),r=t.chatStream(e.messages,{...e.options,model:e.model,tools:e.tools,onModelEffortOutcome:e=>{n.observe(e)}});for await(let e of r)this.validateResponse(e),yield{kind:`message`,message:e};let i=n.terminal(e.provider);er(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 nr=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function rr(e){return nr.test(e)?e:void 0}var ir=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function ar(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new se(`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 se(`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 se(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function or(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 sr(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 cr(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function lr(e,t,n,r){let{listenerCounts:i,totalListeners:a}=cr(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 ur(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new se(`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 dr(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 pr=class extends jt{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 ir,ar(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[L.AGENT_EXECUTION_START,L.AGENT_EXECUTION_COMPLETE,L.AGENT_EXECUTION_ERROR,L.TOOL_BEFORE_EXECUTE,L.TOOL_AFTER_EXECUTE,L.TOOL_SUCCESS,L.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??Tt.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(L.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(L.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(L.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(L.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(L.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?L.TOOL_ERROR:L.TOOL_SUCCESS,i=fr(e,n,t.duration);await this.emit(r,i),await this.emit(L.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(L.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 ur(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 dr(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 sr(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>or(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 lr(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 mr=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var hr=class{tools=new Map;register(e){if(!e.schema?.name)throw new l(`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 l(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new l(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new l(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new l(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))gr(t,n);if(e.parameters.required){let t=e.parameters.properties||{};for(let n of e.parameters.required)if(!t[n])throw new l(`Required parameter "${n}" is not defined in properties`)}}};function gr(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new l(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>gr(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new l(`Parameter "${e}" must declare a type or anyOf`);if(!mr.includes(t.type))throw new l(`Parameter "${e}" has invalid type "${t.type}"`);if(t.properties)for(let[n,r]of Object.entries(t.properties))gr(`${e}.${n}`,r);t.items&&gr(`${e}[]`,t.items)}function _r(e,t,n){let r=W(n,t,`$`);if(r.length>0)throw new u(`output does not match the declared outputSchema: ${r.join(`; `)}`,e,void 0,{outputSchemaIssues:r})}function vr(e,t,n){let r=yr(e,t,n);return r?[r]:W(n,t,`Parameter "${e}"`)}function yr(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 xr(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 Sr(e,t,n,r){let i=xr(e,t,n,r);return{isValid:i.length===0,errors:i}}var Cr=class{listeners=new Set;subscribe(e){this.listeners.add(e)}unsubscribe(e){this.listeners.delete(e)}notifyListeners(e,t,n){for(let r of this.listeners)r(e,t,n)}},wr=class extends Cr{emit(e,t,n){}};const Tr=new wr;function Er(e){return e===Tr||e instanceof wr}function Dr(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 Or(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var kr=class extends Cr{base;binding;constructor(e,t){super(),this.base=e,this.binding=t}emit(e,t,n){if(e.includes(`.`))throw Error(`[EVENTS] Local event name must not contain '.': "${e}"`);let r={...n,ownerType:this.binding.ownerType,ownerId:this.binding.ownerId,ownerPath:this.binding.ownerPath,depth:this.binding.ownerPath.length,spanId:n?.spanId??Or()},i=Dr(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function q(e,t){return new kr(e,t)}function Ar(e,t){return q(e,t)}var jr=class extends Cr{emit(e,t,n){this.notifyListeners(e,t,n)}};const Mr={COMPLETED:`span_completed`},Nr={COMPLETED:`provider_call_completed`},Pr={SWITCHED:`provider_fallback`};function Fr(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 Ir={COMPLETED:`tool_body_completed`},Lr={DECIDED:`tool_permission_decided`},Rr=`span`;var zr=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 l(`Invalid parameters for tool "${n}": ${xr(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 instanceof u||r instanceof l?r:new u(`Function tool execution failed: ${r instanceof Error?r.message:String(r)}`,n,r instanceof Error?r:Error(String(r)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let a=Date.now()-r;if(this.schema.outputSchema&&_r(n,i,this.schema.outputSchema),this.eventService){let e={timestamp:new Date,spanId:Or(),durationMs:a,op:n};this.eventService.emit(Mr.COMPLETED,e)}return{success:!0,data:i,metadata:{executionTime:a,toolName:n,parameters:e}}}validate(e){return xr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return Sr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new l(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new l(`Tool function is required and must be a function`);if(!this.schema.name)throw new l(`Tool schema must have a name`)}};const Br=`at least one tool must stay resident; all tools cannot be deferred`,Vr=`a tool schema was withheld but no ${Pe} tool is offered; register the loader or turn tool search off`;function Hr(e){return e.deferLoading===!0}function Ur(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!Hr(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(Br);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(Vr);return r}function Wr(e){if(e.length>0&&e.every(Hr))throw Error(Br)}var Gr=class extends qe{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 Kr(e,t){if(!t.success){let n=t.data===void 0?``:`; data: ${typeof t.data==`string`?t.data:JSON.stringify(t.data)}`;throw new u(`${t.error??`Tool execution failed`}${n}`,e)}if(t.data===void 0)throw new u(`Tool execution succeeded but returned no data`,e);return t.data}function qr(e){if(!e.name)throw new y(`Agent name is required`,{component:`Robota`});if(!e.aiProviders||e.aiProviders.length===0)throw new y(`At least one AI provider is required`,{component:`Robota`});if(!e.defaultModel)throw new y(`Default model configuration is required`,{component:`Robota`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new y(`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 y(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`Robota`,duplicates:n});if(!t.includes(e.defaultModel.provider))throw new y(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`Robota`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var Jr=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 y(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],n=this.getEventService();for(let r of e){n&&r.setEventService(n),this.getTools().addTool(r.schema,async(e,t)=>{if(!t)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let n=await r.execute(e,t);return Kr(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(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 y("updateConfiguration: only `tools` and `name` are supported")}async getConfiguration(){await this.ensureReady();let e=this.getTools().getTools().map(e=>({name:e.name,parameters:(()=>{let t=e.parameters?.properties;return t&&typeof t==`object`?Object.keys(t):void 0})()}));return{version:this.getConfigVersion(),tools:e,updatedAt:this.getConfigUpdatedAt(),metadata:void 0}}setModel(e){if(!e.provider||!e.model)throw new y(`Both provider and model are required`,{component:`Robota`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new y(`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 y(`No provider is currently set`,{component:`Robota`});let t=this.getConfig();return{provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.effort!==void 0&&{effort:t.defaultModel.effort}}}setSystemMessage(e){let t=this.getConfig();t.systemMessage=e,this.setConfig(t),this.setConfigUpdatedAt(Date.now())}getSystemMessage(){return this.getConfig().systemMessage}registerTool(e,t){if(t.hasTool(e.schema.name))throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let r=await e.execute(t,n);return Kr(e.schema.name,r)}),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},Yr=class extends Je{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new hr,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 zr(e,t);this.registry.register(n),k.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 Ur(this.getTools(),this.loadedDeferredTools,this.resolveToolSearchMode())}isToolOffered(e){return this.getOfferedTools().some(t=>t.name===e)}listDeferredTools(){return this.resolveToolSearchMode()===`off`?[]:this.getTools().filter(e=>Hr(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 u(`Tool "${e}" is not registered, so it cannot be loaded`,e);return t});for(let e of t)Hr(e)&&this.loadedDeferredTools.add(e.name);return t}async executeTool(e,t,n){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new u(`Tool "${e}" is not in the allowed tools list`,e);let r=this.registry.get(e);if(!r)throw new u(`Tool "${e}" is not registered`,e);let i;try{i=await r.execute(t,n)}catch(t){throw t instanceof Error?new u(t.message,e,t):new u(String(t),e)}if(!i.success)throw new u(i.error||`Tool execution failed`,e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(i)});if(i.data===void 0)throw new u(`Tool execution succeeded but returned no data`,e);return i.data}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],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 Xr(e){let t=Zr(e.metadata),n=$r(e.usage);return t??n}function Zr(e){if(!e)return;let t=$r({inputTokens:ei(e,`inputTokens`),outputTokens:ei(e,`outputTokens`),promptTokens:ei(e,`promptTokens`),completionTokens:ei(e,`completionTokens`),totalTokens:ei(e,`totalTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return Qr(n);if(ni(n))return $r(n)}function Qr(e){try{return $r(JSON.parse(e))}catch{return}}function $r(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);return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r}}}function ei(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 ni(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}const ri=4;function ii(e){return Math.ceil(JSON.stringify(e).length/4)}function ai(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function oi(e,t={}){let n=ii(e),r=si(e),i=r?.tokens,a=ci(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 si(e){for(let t=e.length-1;t>=0;t--){let n=Xr(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function ci(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const li=O(`agent-core:models`),ui=new Set;function di(e,t,n){let r=`${e}:${t}`;ui.has(r)||(ui.add(r),li.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 fi=2e5,pi=new Map;function mi(...e){for(let t of e){let e=pi.get(t.id);e&&!hi(e,t)&&li.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 hi(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function gi(e){return pi.get(e)}function _i(e){let t=gi(e)?.contextWindow;return t===void 0?(di(e,`context window`,fi),fi):t}const vi=16384;function yi(e){let t=gi(e)?.maxOutput;return t===void 0?(di(e,`max output`,vi),vi):t}function bi(e){return gi(e)?.name??e}function xi(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 Si(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(Hr);return i.length===0?`off`:i.length>15||ai(i)/_i(t)>=.1?`on`:`off`}function Ci(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function wi(e){let t=new Yr({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:Si(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var Ti=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)}},Ei=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 y(`Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.`,{pluginName:e.name});t.registerPlugin(e),this.logger.debug(`Plugin added`,{pluginName:e.name})}removePlugin(e){let t=this.getExecutionService();if(!t)return!1;let n=t.removePlugin(e);return n&&this.logger.debug(`Plugin removed`,{pluginName:e}),n}getPlugin(e){let t=this.getExecutionService();if(t)return t.getPlugin(e)}getPlugins(){let e=this.getExecutionService();return e?e.getPlugins():[]}getPluginNames(){let e=this.getExecutionService();return!this.isReady()||!e?[]:e.getPlugins().map(e=>e.name)}};function Di(e){return{moduleManager:new Ti(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new Ei(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new Jr(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 Oi={ASSIGNED:`assigned`,COMPLETED:`completed`},ki=`task`,Ai={MESSAGE:`message`,INPUT:`input`},ji=`user`;function Mi(e,t){let n=Array.isArray(e.tools)?e.tools.map(e=>{let t=e?.schema?.name;if(typeof t==`string`&&t.length>0)return t;let n=e?.name;return typeof n==`string`&&n.length>0?n:``}).filter(e=>typeof e==`string`&&e.length>0):[];t(A.CREATED,{parameters:{tools:n,systemMessage:e.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function Ni(e,t,n,r,i){Er(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:j,ownerId:t,ownerPath:Fi(t,n)})}function Pi(){return new pr({enabled:!0,events:[L.MODULE_INITIALIZE_START,L.MODULE_INITIALIZE_COMPLETE,L.MODULE_INITIALIZE_ERROR,L.MODULE_EXECUTION_START,L.MODULE_EXECUTION_COMPLETE,L.MODULE_EXECUTION_ERROR,L.MODULE_DISPOSE_START,L.MODULE_DISPOSE_COMPLETE,L.MODULE_DISPOSE_ERROR]})}function Fi(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function Ii(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.driverId&&{driverId:t.driverId},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},awaitProviderSettlement:t.awaitProviderSettlement,...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.maxExecutionRounds!==void 0&&{maxExecutionRounds:t.maxExecutionRounds},...t.maxSameToolInputs!==void 0&&{maxSameToolInputs:t.maxSameToolInputs},...t.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:t.allowToolOnlyCompletion},...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.temperature!==void 0&&{temperature:t.temperature},...t.toolChoice!==void 0&&{toolChoice:t.toolChoice},...t.withholdHostedTools===!0&&{withholdHostedTools:!0},...t.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:t.ephemeralSystemContext},...t.traceContext!==void 0&&{traceContext:t.traceContext}}}async function Li(e,t,n={},r){try{e.emitAgentEvent(A.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,Ii(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(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 e.logger.error(`Robota 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*Ri(e,t,n={},r){try{e.emitAgentEvent(A.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,Ii(e,n));if(!o.success)throw o.error??Error(`[STRICT-POLICY] Failed execution result missing error field — every success:false result must carry error`);return o.response}catch(t){throw e.logger.error(`Robota streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(A.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t}finally{e.emitAgentEvent(A.EXECUTION_COMPLETE,{})}}function zi(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function Bi(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 na(e,t,n,r,i,a,o){e.emitExecution(M.START,{parameters:{input:t,agentConfiguration:i.aiProviderInfo,availableTools:i.toolsInfo,toolCount:i.toolsInfo.length,hasTools:i.toolsInfo.length>0,systemMessage:n.systemMessage,provider:n.defaultModel.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},metadata:{method:`execute`,inputLength:t.length,messageCount:r.length,aiProvider:i.aiProviderInfo.providerName,model:i.aiProviderInfo.model,toolsAvailable:i.toolsInfo.map(e=>e.name),agentCapabilities:{canUseTools:i.toolsInfo.length>0,supportedActions:i.toolsInfo.map(e=>e.name)}}},a,o)}function ra(e,t,n,r){e.emitExecution(M.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 ia(e,t,n,r,i,a,o,s){if(typeof n.content!=`string`||n.content.length===0)throw Error(`[EXECUTION] assistant response must have content or tool calls`);if(!(n.timestamp instanceof Date))throw Error(`[EXECUTION] assistant response timestamp is required`);let c=n.content,l=n.timestamp,u=new Date().getTime()-l.getTime();e.emitWithContext(M.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount: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 q(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function aa(e,t,n,r,i,a,o,s,c,l){let u=n.map(e=>{if(!e.id||e.id.length===0)throw Error(`[EXECUTION] Tool call missing id for tool results ready payload`);return e.id});if(u.length===0)throw Error(`[EXECUTION] Tool results ready requires toolCallIds`);let d=()=>e.buildThinkingOwnerContext(a,o,c,l),f=e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for tool results event`);return q(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})};e.emitWithContext(M.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(M.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:i.length,round:s},metadata:{toolsExecuted:r.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:s}},d,f)}function oa(e){if(!e.executionId)throw new l(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new l(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new l(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function sa(e,t){let n=oa(e),r=K(),i=e.traceContext?g(e.traceContext,r):void 0,a=S(`shell`,e.traceContext,T(r)),o=e.traceContext?S(`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 ca(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null}}function la(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function ua(e){let t=e.argumentDecodeError;if(e.eventService&&t!==void 0){let n={timestamp:new Date,toolName:e.toolName,error:t};e.eventService.emit(P.CALL_ERROR,n)}return{toolName:e.toolName,result:null,success:!1,error:t,executionId:e.executionId,metadata:{errorCode:Dt,requestedTool:e.toolName}}}function da(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function fa(e){return e!==void 0}function pa(e){return e!==void 0}function ma(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 ha(e,t,n,r){let i=e.requests[r];if(i)try{let a=e.signal?.aborted?ca(i):i.argumentDecodeError===void 0?await t.executeTool(i.toolName,i.parameters,sa(i,e.signal)):ua(i);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=da(a))}catch(e){let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=la(i,t)}}async function ga(e,t,n){for(;n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await ha(e,t,n,r)}}async function _a(e,t){let n={resultsByIndex:Array(e.requests.length),errorsByIndex:Array(e.requests.length),nextRequestIndex:0},r=ma(e.requests.length,e.maxConcurrency),i=Array.from({length:r},()=>ga(e,t,n));await Promise.all(i);let a=n.resultsByIndex.filter(fa),o=n.errorsByIndex.filter(pa);if(o.length>0&&!e.continueOnError)throw o[0];return{results:a,errors:o}}async function va(e,t){let n=[],r=[];for(let i of e.requests)try{let a=e.signal?.aborted?ca(i):i.argumentDecodeError===void 0?await t.executeTool(i.toolName,i.parameters,sa(i,e.signal)):ua(i);if(n.push(a),a.success||r.push(da(a)),!a.success&&!e.continueOnError)break}catch(t){let n=t instanceof Error?t:Error(String(t));if(r.push(n),!e.continueOnError)break}return{results:n,errors:r}}async function ya(e,t,n){return n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`),e.mode===`parallel`?_a(e,t):va(e,t)}var ba=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=ft){this.tools=e,this.logger=t,this.deferredToolCatalog={listDeferredTools:()=>this.tools.listDeferredTools(),loadDeferredTools:e=>this.tools.loadDeferredTools(e)}}setAskHandler(e){this.askHandler=e}async executeTool(e,t,n,r=`offered`){this.logger.debug(`Executing tool: ${e}`);try{if(!n?.executionId)throw new l(`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=Sa(e,t,i),o=n.eventService;if(o){let t={timestamp:new Date,toolName:e,error:a};o.emit(P.CALL_ERROR,t)}return this.logger.warn(`Tool call skipped because requested tool is not registered`,{toolName:e,availableTools:t}),{success:!1,error:a,toolName:e,executionId:n.executionId,metadata:{errorCode:Et,requestedTool:e,availableTools:t}}}let a=n.eventService;if(a){let n={timestamp:new Date,toolName:e,parameters:t};a.emit(P.CALL_START,n)}let{toolName:o,parameters:s,...c}=n,u={...c,deferredTools:this.deferredToolCatalog,toolName:e,parameters:t,executionId:n.executionId},d=await this.tools.executeTool(e,t,u);if(this.logger.debug(`Tool execution completed: ${e}`),a){let t={timestamp:new Date,toolName:e,result:d};a.emit(P.CALL_COMPLETE,t),a.emit(P.CALL_RESPONSE_READY,t)}return{success:!0,result:d,toolName:e,executionId:u.executionId}}catch(t){this.logger.error(`Tool execution failed: ${e}`);let 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(P.CALL_ERROR,t)}return{success:!1,error:r.message,toolName:e,executionId:n?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=xa(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 ya(e,this,this.logger)}};function xa(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 Sa(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 Ca(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function wa(e,t,n,r){if(!n||n.length===0)throw Error(`[EXECUTION] Missing rootId for execution owner context`);if(!r||r.length===0)throw Error(`[EXECUTION] Missing executionId for execution owner context`);let i=[...e.length?e:t];return n&&!i.some(e=>e.type===`agent`&&e.id===n)&&i.push({type:`agent`,id:n}),i.push({type:`execution`,id:r}),{ownerType:N,ownerId:r,ownerPath:i}}function Ta(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...wa(e,t,n,r).ownerPath];return a&&(o.push({type:`thinking`,id:a}),o.push({type:`tool_result`,id:`tool_result_${a}`})),o.push({type:`thinking`,id:i}),{ownerType:N,ownerId:r,ownerPath:o}}function Ea(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:F,ownerId:i,ownerPath:[...wa(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function Da(e,t,n,r,i,a){let o=Ta(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:N,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function Oa(e,t,n,r,i={}){if(t.onExecutionEvent===void 0)return;let a=e.getMessages(),o=a.at(-1);o!==void 0&&t.onExecutionEvent(`history_mutation`,{executionId:n,conversationId:r,...i,mutation:`append_message`,index:a.length-1,message:o})}var ka=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=Ca(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(Er(this.baseEventService))return this.baseEventService;if(!e)throw Error(`[EVENT-SERVICE] Missing ownerId for tool event context`);if(!t||t.length===0)throw Error(`[EVENT-SERVICE] Missing ownerPath for tool event context`);if(this.toolEventServices.has(e))return this.toolEventServices.get(e);let n=q(this.baseEventService,{ownerType:F,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 wa(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return Ta(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return Ea(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return Da(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}emitExecution(e,t,n,r){this.emitWithContext(e,t,()=>this.buildExecutionOwnerContext(n,r),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for execution event`);return q(this.baseEventService,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}emitTool(e,t,n,r,i){this.emitWithContext(e,t,()=>this.buildToolOwnerContext(n,r,i),e=>this.ensureToolEventService(e.ownerId,e.ownerPath))}emitWithContext(e,t,n,r){if(Er(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){na(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){ra(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){ia(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){aa(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function Aa(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function ja(e,t,n,r,i){let a=e.getMessages(),o=a.filter(e=>e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0).pop(),s=o?o.content:`No response received. The context window may be full.`,c=o?.metadata?.providerError===!0,l=Date.now()-n.getTime();return{response:s,messages:a.map(e=>{if(typeof e.content!=`string`)throw Error(`[EXECUTION] Message content is required`);return{role:e.role,content:e.content,timestamp:e.timestamp,metadata:e.metadata,...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{}}}),executionId:t,duration:l,tokensUsed:a.filter(e=>e.metadata?.usage).reduce((e,t)=>{let n=t.metadata?.usage;if(n&&typeof n==`object`&&`totalTokens`in n){let t=Number(n.totalTokens);if(Number.isNaN(t))throw Error(`[EXECUTION] totalTokens must be a number`);return e+t}return e},0),toolsExecuted:r,success:!!o&&!c,...c?{error:Aa(i,s)}:{}}}function Ma(e,t,n){e.tools!==void 0&&(ke(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function Na(e,t,n,r,i=!1){let a=Pa(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw Fa();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(Fa())};o?.addEventListener(`abort`,h,{once:!0});let g=n.onTextDelta,_={...n,signal:s.signal,...g===void 0?{}:{onTextDelta:e=>{m(),g(e)}}};m();try{let n=new Promise((e,t)=>{d=t});return u=(async()=>e(t,_))(),await Promise.race([u,n])}finally{l=!0,f(),o?.removeEventListener(`abort`,h),i&&u&&await u.then(()=>{},()=>{})}}function Pa(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function Fa(){let e=Error(`aborted`);return e.name=`AbortError`,e}function Ia(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 La={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(Ia(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(Ia(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(Ia(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(Ia(t),t.executionResult)},onMessageAdded:async(e,t)=>{e.onMessageAdded&&t.message&&await e.onMessageAdded(t.message)},beforeRun:async(e,t)=>{e.beforeRun&&t.input&&await e.beforeRun(t.input,t.metadata)},afterRun:async(e,t)=>{e.afterRun&&t.input&&t.response&&await e.afterRun(t.input,t.response,t.metadata)},beforeProviderCall:async(e,t)=>{e.beforeProviderCall&&t.messages&&await e.beforeProviderCall(t.messages)},afterProviderCall:async(e,t)=>{e.afterProviderCall&&t.messages&&t.responseMessage&&await e.afterProviderCall(t.messages,t.responseMessage)},onError:async(e,t)=>{if(e.onError&&t.error){let n={action:`${N}.${M.ERROR}`,metadata:{}},r=t.executionContext?.executionId;typeof r==`string`&&r.length>0&&(n.executionId=r);let i=t.executionContext?.sessionId;typeof i==`string`&&i.length>0&&(n.sessionId=i);let a=t.executionContext?.userId;typeof a==`string`&&a.length>0&&(n.userId=a),await e.onError(t.error,n)}}};async function J(e,t,n,r){let i=La[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 Ra(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 za(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function Ba(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 Va(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 Ha(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 Ua(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 Wa(e,t,n,r,i,a,o,s){let c=Date.now()-n.getTime();await J(a,`onError`,{error:e instanceof Error?e:Error(String(e)),executionContext:Ja(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(M.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function Ga(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Ka(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function qa(e,t,n,r,i,a){return{messages:e,config:t,startTime:n,executionId:r,conversationId:i,...a?.sessionId&&{sessionId:a.sessionId},...a?.userId&&{userId:a.userId},...a?.metadata&&{metadata:a.metadata},...a?.signal&&{signal:a.signal},awaitProviderSettlement:a?.awaitProviderSettlement,...a?.onTextDelta&&{onTextDelta:a.onTextDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.maxExecutionRounds!==void 0&&{maxExecutionRounds:a.maxExecutionRounds},...a?.maxSameToolInputs!==void 0&&{maxSameToolInputs:a.maxSameToolInputs},...a?.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:a.allowToolOnlyCompletion},...a?.maxTokens!==void 0&&{maxTokens:a.maxTokens},...a?.temperature!==void 0&&{temperature:a.temperature},...a?.toolChoice!==void 0&&{toolChoice:a.toolChoice},...a?.withholdHostedTools===!0&&{withholdHostedTools:!0},...a?.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:a.ephemeralSystemContext},...a?.traceContext!==void 0&&{traceContext:a.traceContext}}}function Ja(e){let t={conversationId:Ka(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 Ya(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
|
|
6
|
-
`)}function Xa(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=An({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:Ya(i.schema),id:K(),timestamp:new Date,state:`complete`},s=[...t,o];return a.mechanism===`json_object`?(e.responseFormat={type:`json_object`},{messages:s,outcome:{capability:a,sent:`json_object`,schemaInPrompt:!0}}):(delete e.responseFormat,{messages:s,outcome:{capability:a,sent:`omitted`,schemaInPrompt:!0}})}function Za(e,t,n){let r=e.provider.resolveModelRoute?.(t,n);return r===void 0||r.provider===e.currentInfo.provider&&r.model===t?{}:{current:r}}function Y(e,t){return e.current?.provider??t.currentInfo.provider}function X(e,t){return e.current?.model??t}function Qa(e,t){e.current={provider:t.to.provider,model:t.to.model}}function $a(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 x(e,r)}function eo(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function to(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 no(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function ro(e,t,n,r){let i=Ra(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 io(e,t,n,r,i,a,o,s,c,l={}){if(!t.defaultModel?.model)throw Error(`Model is required in defaultModel configuration. Please specify a model.`);if(typeof t.defaultModel.model!=`string`||t.defaultModel.model.trim()===``)throw Error(`Model must be a non-empty string in defaultModel configuration.`);let u=t.defaultModel.model;no(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let d=ro(u,t,n,i);Ba(d.toolChoice,d.tools),Ma(d,u,n);let{messages:f,outcome:p}=Xa(d,e,u,n);a?.({messages:f,options:d,...p!==void 0&&{structuredOutput:p}});let m=n.provider.chat.bind(n.provider),h=(e,t)=>(s?.(`invoked`,t.model??u),m(e,eo(t,c?.()))),g=d.effort??`auto`;if(r){let e=r.lookup(f,X(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:g});if(e)return s?.(`cache-hit`,d.model??u),{role:`assistant`,content:e,timestamp:new Date,id:K(),state:`complete`};let n=await Na(h,f,d,t.timeout,o);return typeof n.content==`string`&&r.store(f,X(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,n.content,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:g}),n}return Na(h,f,d,t.timeout,o)}function ao(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 oo(e){let t=e?.metadata?.usageProvenance;if(t===`partial`)return{provenance:`partial`};if(t!==`complete`)return{provenance:`absent`};let n=e.usage,r=e?.metadata,i=n?.promptTokens??r?.promptTokens??r?.inputTokens,a=n?.completionTokens??r?.completionTokens??r?.outputTokens,o=n?.totalTokens??r?.totalTokens;return typeof i!=`number`||!Number.isSafeInteger(i)||i<0||typeof a!=`number`||!Number.isSafeInteger(a)||a<0||!Number.isSafeInteger(i+a)||o!==void 0&&o!==i+a?{provenance:`absent`}:{provenance:`complete`,promptTokens:i,completionTokens:a,totalTokens:i+a}}const so=/^peer:[A-Za-z0-9._:-]{1,128}$/,co=/<(\/?)(peer_message)/gi;function lo(e){return e.replace(co,`<$1$2`)}function uo(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function fo(e){return so.test(e)?e:`peer:unverified`}function po(e){return e.map(e=>{if(e.type!==`text`)return e;let t=lo(e.text);return t===e.text?e:{...e,text:t}})}function mo(e){if(e.role===`tool`){let t=lo(e.content),n=e.parts?po(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=uo(e),n=lo(e.content),r=e.parts?po(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="${fo(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function ho(e){return e.map(mo)}async function go(e,t,n,r,i,a,o,s,c=10){s.warn(`No final text response — forcing summary call`,{maxRounds:c===0?`unlimited`:c,currentRound:i.currentRound,conversationId:a});try{let s=i.forcedSummaryInstruction??`Tool round limit reached. Provide your response based on the information gathered so far. If results are incomplete, let the user know what was covered and what remains — the user can request additional analysis in a follow-up message.`,c=[...ho(e.getMessages()),{id:K(),role:`user`,content:s,state:`complete`,timestamp:new Date}],l=n.systemMessage??``,u=c.some(e=>e.role===`system`&&e.content===l),d=l&&!u?[{id:K(),role:`system`,content:l,state:`complete`,timestamp:new Date},...c]:c,f=Za(t,t.aiProviderInfo.model,r),p={model:t.aiProviderInfo.model,effort:n.defaultModel?.effort??`auto`,toolChoice:`none`,...n.defaultModel?.maxTokens!==void 0&&{maxTokens:n.defaultModel.maxTokens},...n.defaultModel?.temperature!==void 0&&{temperature:n.defaultModel.temperature},...o.signal&&{signal:o.signal},...o.onTextDelta&&{onTextDelta:o.onTextDelta},executionId:r,onModelFallback:e=>{Qa(f,e),o.onExecutionEvent?.(Pr.SWITCHED,{executionId:r,conversationId:a,round:i.currentRound,fromProvider:e.from.provider,fromModel:e.from.model,toProvider:e.to.provider,toModel:e.to.model,reason:e.reason}),m()}},m=()=>{o.onExecutionEvent?.(`provider_request`,{executionId:r,conversationId:a,round:i.currentRound,provider:Y(f,t),model:X(f,t.aiProviderInfo.model),messages:d,forcedSummary:!0})};m();let h=Date.now(),g=K(),_={invoked:!1},v=`failure`,y;try{y=await Na((e,n)=>{_.invoked=!0,_.startedAtMs=Date.now();let r=$a(o.traceContext,t.provider,t.currentInfo.provider,g);return t.provider.chat(e,eo(n,r))},d,p,n.timeout,o.awaitProviderSettlement),v=`success`}catch(e){throw Ft(e,o.signal)&&(v=`interrupted`),e}finally{let e=_.invoked?oo(y):{provenance:`absent`};o.onExecutionEvent?.(Nr.COMPLETED,{executionId:r,conversationId:a,round:i.currentRound,startedAt:new Date(_.startedAtMs??h).toISOString(),endedAt:new Date(Math.max(Date.now(),_.startedAtMs??h)).toISOString(),outcome:v,callId:g,disposition:_.invoked?`invoked`:`preflight-refused`,..._.invoked&&{providerId:Y(f,t),modelId:X(f,t.aiProviderInfo.model),...typeof y?.metadata?.providerRequestId==`string`&&{providerRequestId:y.metadata.providerRequestId}},usageProvenance:e.provenance,...`promptTokens`in e&&e.promptTokens!==void 0&&{promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens}})}if(!y)throw Error(`Forced summary provider returned no response.`);let b=(typeof y.content==`string`?y.content:``)||`Maximum rounds reached. Partial results available in conversation history.`,x=oo(y),S={...y.metadata??{},round:i.currentRound,providerId:Y(f,t),modelId:X(f,t.aiProviderInfo.model),usageProvenance:x.provenance,...x.provenance===`complete`&&{inputTokens:x.promptTokens,outputTokens:x.completionTokens,totalTokens:x.totalTokens}};e.addAssistantMessage(b,[],S),o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:b}),Oa(e,o,r,a,{round:i.currentRound})}catch(e){s.warn(`Forced summary call failed`,{error:e instanceof Error?e.message:String(e)})}}const _o=.95;function vo(e,t,n){let r=oi(e,{usageFloorTokens:n}),i=_i(t),a=i*_o,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:_o*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function yo(e,t,n,r,i,a){let o=n.currentRound,s=vo(e,t.defaultModel.model,n.cumulativeInputTokens);if(!s.shouldBlock)return!1;i.warn(`[ROUND] Context hard-capacity prevention before provider call`,{estimatedTokens:s.estimatedTokens,contextLimit:s.contextLimit,thresholdTokens:s.thresholdTokens,thresholdPercentage:s.thresholdPercentage,serializedTokens:s.serializedTokens,providerTokens:s.providerTokens??0,usageFloorTokens:s.usageFloorTokens??0,round:o});let c=t.contextCapacityHint??`Reduce the conversation history (for example, compact or summarize it) and retry.`;return r.addAssistantMessage(`Context window is near capacity. Cannot process further in this round. Estimated ${s.estimatedTokens.toLocaleString()} / ${s.contextLimit.toLocaleString()} tokens (${Math.round(s.usedPercentage)}%) exceeds the hard-block threshold ${Math.round(s.thresholdPercentage)}%. ${c}`,[],{round:o,contextOverflow:!0,estimatedTokens:s.estimatedTokens,contextLimit:s.contextLimit,thresholdTokens:s.thresholdTokens,thresholdPercentage:s.thresholdPercentage,serializedTokens:s.serializedTokens,providerTokens:s.providerTokens??0,usageFloorTokens:s.usageFloorTokens??0,usedPercentage:s.usedPercentage}),Oa(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function bo(e,t,n,r){let i=0,a=0;return{wrappedOnTextDelta:a=>{e.onExecutionEvent?.(`provider_stream_raw_delta`,{executionId:n,conversationId:e.conversationId,round:r,sequence:i,delta:a}),i++,t.appendStreaming(a),e.onTextDelta?.(a)},wrappedOnProviderNativeRawPayload:t=>{let i=t.sequence??a;a=Math.max(a,i+1),e.onExecutionEvent?.(`provider_native_raw_payload`,{executionId:n,conversationId:e.conversationId,round:r,...t,sequence:i})}}}async function xo(e,t,n,r,i,a,o,s,c,l,u,d,f,p=Za(n,t.defaultModel.model,s)){let m=Date.now(),h=K(),g={disposition:`preflight-refused`},_,v=`failure`,y,b=e=>{i.onExecutionEvent?.(`provider_request`,{executionId:s,conversationId:i.conversationId,round:o,provider:Y(p,n),model:X(p,t.defaultModel.model),effort:e.options.effort,messages:e.messages,tools:e.options.tools})};try{let c=await io(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=>{Qa(p,e),g.model=e.to.model,i.onExecutionEvent?.(Pr.SWITCHED,{executionId:s,conversationId:i.conversationId,round:o,fromProvider:e.from.provider,fromModel:e.from.model,toProvider:e.to.provider,toModel:e.to.model,reason:e.reason}),y!==void 0&&b(y)},...(()=>{let e=za(i.toolChoice??t.defaultModel.toolChoice,o);return e===void 0?{}:{toolChoice:e}})()},e=>{y=e,b(e);let r=e.structuredOutput;r!==void 0&&i.onExecutionEvent?.(`structured_output_transport`,{executionId:s,conversationId:i.conversationId,round:o,provider:n.currentInfo.provider,model:t.defaultModel.model,mechanism:r.capability.mechanism,provenance:r.capability.provenance,sent:r.sent,schemaInPrompt:r.schemaInPrompt,...r.capability.reason!==void 0&&{reason:r.capability.reason}})},i.awaitProviderSettlement,(e,t)=>{g.disposition=e,g.model=X(p,t),e===`invoked`&&(g.startedAtMs=Date.now())},()=>$a(i.traceContext,n.provider,n.currentInfo.provider,h),p);if(_=c,typeof c.content==`string`&&c.content.length>0){let e=a.getPendingContent();if(c.content.startsWith(e)){let t=c.content.slice(e.length);t.length>0&&u(t)}else l.warn(`Provider deltas are not a prefix of its assembled message — committing the streamed text`,{conversationId:i.conversationId,round:o,streamedLength:e.length,assembledLength:c.content.length})}return i.onExecutionEvent?.(`provider_response_raw`,{executionId:s,conversationId:i.conversationId,round:o,effort:t.defaultModel?.effort??`high`,response:c,responseKind:`provider-normalized-message`}),i.onExecutionEvent?.(`provider_response_normalized`,{executionId:s,conversationId:i.conversationId,round:o,response:c,toolCallsCount:c.role===`assistant`&&Array.isArray(c.toolCalls)?c.toolCalls.length:0}),v=`success`,c}catch(e){if(Ft(e,i.signal))throw v=`interrupted`,a.commitAssistant(`interrupted`,{round:o,usageObservationId:c,executionId:s,providerId:Y(p,n),modelId:X(p,n.aiProviderInfo.model)}),e;a.discardPending(),f?.(e);let t=e instanceof Error?e.message:String(e);return l.error(`[ROUND] Provider call failed`,{error:t,round:o}),a.addAssistantMessage(`Request failed: ${t}`,[],{round:o,usageObservationId:c,executionId:s,providerId:Y(p,n),modelId:X(p,n.aiProviderInfo.model),providerError:!0}),Oa(a,i,s,i.conversationId,{round:o,usageObservationId:c,executionId:s,providerId:Y(p,n),modelId:X(p,n.aiProviderInfo.model),providerError:!0}),null}finally{let e=g.disposition===`invoked`?oo(_):{provenance:`absent`};i.onExecutionEvent?.(Nr.COMPLETED,{executionId:s,conversationId:i.conversationId,round:o,startedAt:new Date(g.startedAtMs??m).toISOString(),endedAt:new Date(Math.max(Date.now(),g.startedAtMs??m)).toISOString(),outcome:v,callId:h,disposition:g.disposition,...g.disposition===`invoked`&&{providerId:Y(p,n),...g.model!==void 0&&{modelId:g.model},...typeof _?.metadata?.providerRequestId==`string`&&{providerRequestId:_.metadata.providerRequestId}},usageProvenance:e.provenance,...`promptTokens`in e&&e.promptTokens!==void 0&&{promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens}})}}function So(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function Co(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function wo(e,t,n,r,i,a){let o=!1,s=0,c=0;for(let l of e){if(!l.id)throw Error(`Tool call missing ID: ${JSON.stringify(l)}`);let e=l.function?.name;if(!e||e.length===0)throw Error(`[EXECUTION] Tool call "${l.id}" missing function name`);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=>ea(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=Et,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=Dt,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=oi(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 To(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 c(e,a,n)}}async function Eo(e,t,n,r,i,a,o,s,c,l,u,d,f,p){let{toolExecutionService:m,logger:h,eventEmitter:g}=c,_=f??l?.maxSameToolInputs;_!==void 0&&To(e,s,_),h.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:i,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let v=g.buildThinkingOwnerContext(n,r,a,o).ownerPath,y=e.length,b=`${a}`,x=m.createExecutionRequestsWithContext(e,{ownerPathBase:v,metadataFactory:e=>({conversationId:n,round:i,directParentId:a,batchId:b,expectedCount:y,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:g.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:g.getBaseEventService(),...p?{traceContext:p}:{}}}),S={requests:x,mode:`parallel`,maxConcurrency:5,continueOnError:!0,signal:u};d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:b,mode:S.mode,maxConcurrency:S.maxConcurrency,requestCount:x.length,tools:x.map(e=>e.toolName)}),x.forEach((e,t)=>{d?.(`tool_execution_request`,{executionId:r,conversationId:n,round:i,batchId:b,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.argumentDecodeError===void 0?e.parameters:{argumentDecodeError:e.argumentDecodeError},ownerPath:e.ownerPath})});let C=await m.executeTools(S),w=C.results.filter(So).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);C.results.forEach((e,t)=>{d?.(`tool_execution_result`,{executionId:r,conversationId:n,round:i,batchId:b,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})}),s.toolsExecuted.push(...C.results.filter(e=>!So(e)&&!Co(e)).map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}));let T=_i(l?.defaultModel?.model??``),E=t.getMessages().length,ee=wo(e,C,t,i,h,{contextLimit:T,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(E).forEach((e,t)=>{d?.(`tool_message_committed`,{executionId:r,conversationId:n,round:i,batchId:b,index:t,message:e}),d?.(`history_mutation`,{executionId:r,conversationId:n,round:i,batchId:b,mutation:`append_message`,index:E+t,message:e})}),g.emitToolResultsEvents(e,C,s.toolsExecuted,n,r,i,a,o),g.clearToolEventServices(),{...ee,unknownToolFailureCount:w.length,unknownToolNames:w}}function Do(e){let t=0,n=0,r=!1;for(let i of e){if(!D(i)||i.data===void 0)continue;let e=et(i);if(e.role!==`assistant`)continue;let a=ko(e);a&&(r=!0,t+=a.inputTokens,n+=a.outputTokens)}if(r)return{promptTokens:t,completionTokens:n,totalTokens:t+n}}function Oo(){return K()}function ko(e){let t=Xr(e);if(!t)return;let n=t.totalTokens??t.inputTokens+t.outputTokens;return{inputTokens:t.inputTokens,outputTokens:t.outputTokens,usage:{totalTokens:n,inputTokens:t.inputTokens,outputTokens:t.outputTokens}}}async function Ao(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=ho(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,Jn(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=to(r,e);if(await J(l,`beforeProviderCall`,{messages:m},u),u.debug(`Sending messages to AI provider`,{round:p,messageCount:m.length,lastFewMessages:m.slice(-5).map(e=>({role:e.role,content:e.content?.substring(0,50),hasToolCalls:`toolCalls`in e&&!!e.toolCalls?.length,toolCallId:`toolCallId`in e?e.toolCallId:void 0}))}),d.emitWithContext(M.ASSISTANT_MESSAGE_START,{parameters:{round:p,messageCount:m.length},metadata:{round:p,thinkingNodeId:v}},()=>d.buildThinkingOwnerContext(r,i,v,y),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for thinking event`);return q(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),yo(m,o,e,n,u,{fullContext:a,executionId:i,conversationId:r}))return!0;p>1&&a.onTextDelta?.(`
|
|
3
|
+
[This response was interrupted by the user]`),at(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),st(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},_r=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 gr(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 vr(){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 yr(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 br=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=vr(),r=await this.withRetry(async()=>(n=vr(),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),yr(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=vr(),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);yr(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 xr=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function Sr(e){return xr.test(e)?e:void 0}var Cr=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function wr(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new se(`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 se(`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 se(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function Tr(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 Er(e,t,n,r,i){let a=t.get(e.type);if(!a||a.length===0)return;let o=a.filter(t=>!t.filter||t.filter(e));if(o.length!==0){for(let t of o.filter(e=>e.once))r(e.type,t.id);if(n){await Promise.all(o.map(t=>i(t,e)));return}for(let t of o)await i(t,e)}}function Dr(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Or(e,t,n,r){let{listenerCounts:i,totalListeners:a}=Dr(t),o=r.getSnapshot();return{enabled:e.enabled,calls:e.calls,errors:e.errors,eventTypes:Array.from(t.keys()),listenerCounts:i,totalListeners:a,bufferedEvents:n,totalEmitted:o.totalEmitted,totalErrors:o.totalErrors}}function kr(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new se(`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 Ar(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 jr(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 Mr=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 Cr,wr(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[N.AGENT_EXECUTION_START,N.AGENT_EXECUTION_COMPLETE,N.AGENT_EXECUTION_ERROR,N.TOOL_BEFORE_EXECUTE,N.TOOL_AFTER_EXECUTE,N.TOOL_SUCCESS,N.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??Et.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(N.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(N.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(N.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(N.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(N.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?N.TOOL_ERROR:N.TOOL_SUCCESS,i=jr(e,n,t.duration);await this.emit(r,i),await this.emit(N.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(N.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 kr(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 Ar(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 Er(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>Tr(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 Or(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 Nr=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var Pr=class{tools=new Map;register(e){if(!e.schema?.name)throw new l(`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 l(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new l(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new l(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new l(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))Fr(t,n);if(e.parameters.required){let t=e.parameters.properties||{};for(let n of e.parameters.required)if(!t[n])throw new l(`Required parameter "${n}" is not defined in properties`)}}};function Fr(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new l(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>Fr(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new l(`Parameter "${e}" must declare a type or anyOf`);if(!Nr.includes(t.type))throw new l(`Parameter "${e}" has invalid type "${t.type}"`);if(t.properties)for(let[n,r]of Object.entries(t.properties))Fr(`${e}.${n}`,r);t.items&&Fr(`${e}[]`,t.items)}function Ir(e,t,n){let r=V(n,t,`$`);if(r.length>0)throw new u(`output does not match the declared outputSchema: ${r.join(`; `)}`,e,void 0,{outputSchemaIssues:r})}function Lr(e,t,n){let r=Rr(e,t,n);return r?[r]:V(n,t,`Parameter "${e}"`)}function Rr(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 ${zr(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${zr(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${zr(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${zr(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${zr(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 zr(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function Br(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(...Lr(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...Lr(t,a,e))}return i}function Vr(e,t,n,r){let i=Br(e,t,n,r);return{isValid:i.length===0,errors:i}}var Hr=class{listeners=new Set;subscribe(e){this.listeners.add(e)}unsubscribe(e){this.listeners.delete(e)}notifyListeners(e,t,n){for(let r of this.listeners)r(e,t,n)}},Ur=class extends Hr{emit(e,t,n){}};const Wr=new Ur;function Gr(e){return e===Wr||e instanceof Ur}function Kr(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 qr(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var Jr=class extends Hr{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??qr()},i=Kr(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 Jr(e,t)}function Yr(e,t){return U(e,t)}var Xr=class extends Hr{emit(e,t,n){this.notifyListeners(e,t,n)}};const Zr={COMPLETED:`span_completed`},Qr={COMPLETED:`provider_call_completed`},$r={SWITCHED:`provider_fallback`};function ei(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 ti={COMPLETED:`tool_body_completed`},ni={DECIDED:`tool_permission_decided`},ri=`span`;var ii=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 l(`Invalid parameters for tool "${n}": ${Br(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 L(r)||r instanceof u||r instanceof l?r:new u(`Function tool execution failed: ${r instanceof Error?r.message:String(r)}`,n,r instanceof Error?r:Error(String(r)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let a=Date.now()-r;this.schema.outputSchema&&Ir(n,i,this.schema.outputSchema);let o=t?.instanceEventService??this.eventService;if(o){let e={timestamp:new Date,spanId:qr(),durationMs:a,op:n};o.emit(Zr.COMPLETED,e)}return{success:!0,data:i,metadata:{executionTime:a,toolName:n,parameters:e}}}validate(e){return Br(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return Vr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new l(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new l(`Tool function is required and must be a function`);if(!this.schema.name)throw new l(`Tool schema must have a name`)}};const ai=`at least one tool must stay resident; all tools cannot be deferred`,oi=`a tool schema was withheld but no ${Pe} tool is offered; register the loader or turn tool search off`;function si(e){return e.deferLoading===!0}function ci(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!si(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(ai);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(oi);return r}function li(e){if(e.length>0&&e.every(si))throw Error(ai)}var ui=class extends qe{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 di(e,t){if(!t.success){let n=t.data===void 0?``:`; data: ${typeof t.data==`string`?t.data:JSON.stringify(t.data)}`;throw new u(`${t.error??`Tool execution failed`}${n}`,e)}if(t.data===void 0)throw new u(`Tool execution succeeded but returned no data`,e);return t.data}async function fi(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 pi(e){if(!e.name)throw new y(`Agent name is required`,{component:`Robota`});if(!e.aiProviders||e.aiProviders.length===0)throw new y(`At least one AI provider is required`,{component:`Robota`});if(!e.defaultModel)throw new y(`Default model configuration is required`,{component:`Robota`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new y(`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 y(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`Robota`,duplicates:n});if(!t.includes(e.defaultModel.provider))throw new y(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`Robota`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var mi=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 y(`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 fi(r,e,t);return di(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 y("updateConfiguration: only `tools` and `name` are supported")}async getConfiguration(){await this.ensureReady();let e=this.getTools().getTools().map(e=>({name:e.name,parameters:(()=>{let t=e.parameters?.properties;return t&&typeof t==`object`?Object.keys(t):void 0})()}));return{version:this.getConfigVersion(),tools:e,updatedAt:this.getConfigUpdatedAt(),metadata:void 0}}setModel(e){if(!e.provider||!e.model)throw new y(`Both provider and model are required`,{component:`Robota`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new y(`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 y(`No provider is currently set`,{component:`Robota`});let t=this.getConfig();return{provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.effort!==void 0&&{effort:t.defaultModel.effort}}}setSystemMessage(e){let t=this.getConfig();t.systemMessage=e,this.setConfig(t),this.setConfigUpdatedAt(Date.now())}getSystemMessage(){return this.getConfig().systemMessage}registerTool(e,t){if(t.hasTool(e.schema.name))throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let r=await fi(e,t,n);return di(e.schema.name,r)}),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},hi=class extends Je{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new Pr,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 ii(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 ci(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=>si(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 u(`Tool "${e}" is not registered, so it cannot be loaded`,e);return t});for(let e of t)si(e)&&this.loadedDeferredTools.add(e.name);return t}async executeTool(e,t,n){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new u(`Tool "${e}" is not in the allowed tools list`,e);let r=this.registry.get(e);if(!r)throw new u(`Tool "${e}" is not registered`,e);let i;try{i=await r.execute(t,n)}catch(t){throw L(t)?t:t instanceof Error?new u(t.message,e,t):new u(String(t),e)}if(!i.success)throw new u(i.error||`Tool execution failed`,e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(i)});if(i.data===void 0)throw new u(`Tool execution succeeded but returned no data`,e);return i.data}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],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 gi(e){let t=_i(e.metadata),n=yi(e.usage);return t??n}function _i(e){if(!e)return;let t=yi({inputTokens:bi(e,`inputTokens`),outputTokens:bi(e,`outputTokens`),promptTokens:bi(e,`promptTokens`),completionTokens:bi(e,`completionTokens`),totalTokens:bi(e,`totalTokens`),cacheReadTokens:bi(e,`cacheReadTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return vi(n);if(Si(n))return yi(n)}function vi(e){try{return yi(JSON.parse(e))}catch{return}}function yi(e){if(!e)return;let t=xi(e.inputTokens,e.promptTokens),n=xi(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=xi(e.totalTokens),i=xi(e.cacheReadTokens),a=i!==void 0&&i>=0&&i<=t;return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r},...a&&{cacheReadTokens:i}}}function bi(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function xi(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function Si(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}const Ci=4;function wi(e){return Math.ceil(JSON.stringify(e).length/4)}function Ti(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function Ei(e,t={}){let n=wi(e),r=Di(e),i=r?.tokens,a=Oi(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 Di(e){for(let t=e.length-1;t>=0;t--){let n=gi(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function Oi(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const ki=D(`agent-core:models`),Ai=new Set;function ji(e,t,n){let r=`${e}:${t}`;Ai.has(r)||(Ai.add(r),ki.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 Mi=2e5,Ni=new Map;function Pi(...e){for(let t of e){let e=Ni.get(t.id);e&&!Fi(e,t)&&ki.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)`),Ni.set(t.id,t)}}function Fi(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function Ii(e){return Ni.get(e)}function Li(e){let t=Ii(e)?.contextWindow;return t===void 0?(ji(e,`context window`,Mi),Mi):t}const Ri=16384;function zi(e){let t=Ii(e)?.maxOutput;return t===void 0?(ji(e,`max output`,Ri),Ri):t}function Bi(e){return Ii(e)?.name??e}function Vi(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 Hi(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(si);return i.length===0?`off`:i.length>15||Ti(i)/Li(t)>=.1?`on`:`off`}function Ui(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Wi(e){let t=new hi({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:Hi(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var Gi=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)}},Ki=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 y(`Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.`,{pluginName:e.name});t.registerPlugin(e),this.logger.debug(`Plugin added`,{pluginName:e.name})}removePlugin(e){let t=this.getExecutionService();if(!t)return!1;let n=t.removePlugin(e);return n&&this.logger.debug(`Plugin removed`,{pluginName:e}),n}getPlugin(e){let t=this.getExecutionService();if(t)return t.getPlugin(e)}getPlugins(){let e=this.getExecutionService();return e?e.getPlugins():[]}getPluginNames(){let e=this.getExecutionService();return!this.isReady()||!e?[]:e.getPlugins().map(e=>e.name)}};function qi(e){return{moduleManager:new Gi(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new Ki(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new mi(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 Ji={ASSIGNED:`assigned`,COMPLETED:`completed`},Yi=`task`,Xi={MESSAGE:`message`,INPUT:`input`},Zi=`user`;function Qi(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 $i(e,t,n,r,i){Gr(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:Dt,ownerId:t,ownerPath:ta(t,n)})}function ea(){return new Mr({enabled:!0,events:[N.MODULE_INITIALIZE_START,N.MODULE_INITIALIZE_COMPLETE,N.MODULE_INITIALIZE_ERROR,N.MODULE_EXECUTION_START,N.MODULE_EXECUTION_COMPLETE,N.MODULE_EXECUTION_ERROR,N.MODULE_DISPOSE_START,N.MODULE_DISPOSE_COMPLETE,N.MODULE_DISPOSE_ERROR]})}function ta(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function na(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 ra(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,na(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 F?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*ia(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,na(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 F?(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 aa(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function oa(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 sa(e,t,n,r){let i=(n.outputRetries??2)+1,a=aa(r),o=t,s=[];for(let t=1;t<=i;t++){let c=la(r,await ra(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=oa(r,s))}throw new f(`response failed schema validation after ${i} attempt(s)`,s,i)}async function*ca(e,t,n,r){let i=(n.outputRetries??2)+1,a=aa(r),o=t,s=[];for(let t=1;t<=i;t++){let c=la(r,yield*ia(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=oa(r,s))}throw new f(`response failed schema validation after ${i} attempt(s)`,s,i)}function la(e,t){let n=Kn(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 ua(e,t){return e.getConversationStore(t).getMessages().map(e=>({id:e.id,role:e.role,content:e.content,state:e.state,timestamp:e.timestamp,metadata:e.metadata,...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{},...e.role===`tool`&&`name`in e?{name:e.name}:{}}))}function da(e,t){return e.getConversationStore(t).getHistory()}function fa(e,t,n){e.getConversationStore(t).addEntry(n)}function pa(e,t){e.getConversationStore(t).clear()}function ma(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 ha(e,t,n){e.getConversationStore(t).addMessage(n)}var ga=class extends Je{providers=new Map;currentProvider;currentModel;constructor(){super({readyOnConstruction:!0})}async doInitialize(){O.debug(`AIProviders initialized`)}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),O.debug(`Closed AI provider: ${e}`)}catch(t){O.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,O.debug(`AIProviders disposed`)}addProvider(e,t){this.ensureInitialized();let n=Ht.validateProviderName(e);if(!n.isValid)throw new l(`Invalid provider name: ${n.errors.join(`, `)}`);if(!t||typeof t!=`object`||Array.isArray(t))throw new l(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new l(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new l(`Provider must have a chat method`);this.providers.has(e)&&O.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),O.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)){O.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(t=>{O.warn(`Failed to close provider ${e}`,{error:t.message})}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,O.debug(`Cleared current provider selection after removing "${e}"`)),O.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 y(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,O.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}},_a=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`)}},va=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new _a;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 C(`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)}},ya=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 ba(e){return`executionId`in e||`toolName`in e}function xa(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 Sa(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 Ca(e,t,n,r){e.emitExecution(A.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:xa(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 wa(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:xa(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(xa(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 Ta(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 Ea(e){if(!e.executionId)throw new l(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new l(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new l(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function Da(e,t){let n=Ea(e),r=H(),i=e.traceContext?g(e.traceContext,r):void 0,a=S(`shell`,e.traceContext,T(r)),o=e.traceContext?S(`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 Oa(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null}}function ka(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function Aa(e){let t=e.argumentDecodeError;if(e.eventService&&t!==void 0){let n={timestamp:new Date,toolName:e.toolName,error:t};e.eventService.emit(j.CALL_ERROR,n)}return{toolName:e.toolName,result:null,success:!1,error:t,executionId:e.executionId,metadata:{errorCode:jt,requestedTool:e.toolName}}}function ja(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function Ma(e){return e!==void 0}function Na(e){return e!==void 0}function Pa(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 Fa(e,t,n,r){let i=e.requests[r];if(i)try{let a=await za(e,t,i,r);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=ja(a))}catch(e){if(L(e)){let t=Yt(n.fatalError,e);L(t)&&(n.fatalError=t),e instanceof F||n.abort.abort(e);return}let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=ka(i,t)}}async function Ia(e,t,n){for(;!n.fatalError&&n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await Fa(e,t,n,r)}}async function La(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=Pa(e.requests.length,e.maxConcurrency),o=Array.from({length:a},()=>Ia(r,t,i));if(await Promise.all(o),i.fatalError)throw i.fatalError;let s=i.resultsByIndex.filter(Ma),c=i.errorsByIndex.filter(Na);if(c.length>0&&!e.continueOnError)throw c[0];return{results:s,errors:c}}async function Ra(e,t){let n=[],r=[];for(let[i,a]of e.requests.entries())try{let o=await za(e,t,a,i);if(n.push(o),o.success||r.push(ja(o)),!o.success&&!e.continueOnError)break}catch(t){if(L(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 za(e,t,n,r){let i=e.recoveredResults?.get(r);if(i)return structuredClone(i);if(!e.journal)return e.signal?.aborted?Oa(n):n.argumentDecodeError===void 0?t.executeTool(n.toolName,n.parameters,Da(n,e.signal)):Aa(n);let a,o=e.journal;if(e.signal?.aborted)a=Oa(n);else if(n.argumentDecodeError!==void 0)a=Aa(n);else if(await o.beforeDispatch(r),e.signal?.aborted)a=Oa(n);else try{a=await Ba(e,r,()=>t.executeTool(n.toolName,n.parameters,{...Da(n,e.signal),...o.continuation?{continuation:o.continuation(r)}:{},...o.beforeEffect?{beforeToolEffect:e=>o.beforeEffect(r,e)}:{}}))}catch(e){if(L(e))throw e;a=ka(n,e instanceof Error?e:Error(String(e)))}return await e.journal?.onResult(r,a),a}async function Ba(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 Va(e,t,n){return n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`),e.mode===`parallel`?La(e,t):Ra(e,t)}var Ha=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=pt){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 I(`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 l(`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=Wa(e,t,i),o=n.eventService;if(o){let t={timestamp:new Date,toolName:e,error:a};o.emit(j.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(j.CALL_START,n)}let{toolName:o,parameters:s,...c}=n,u={...c,deferredTools:this.deferredToolCatalog,toolName:e,parameters:t,executionId:n.executionId},d=await this.tools.executeTool(e,t,u);if(this.logger.debug(`Tool execution completed: ${e}`),a){let t={timestamp:new Date,toolName:e,result:d};a.emit(j.CALL_COMPLETE,t),a.emit(j.CALL_RESPONSE_READY,t)}return{success:!0,result:d,toolName:e,executionId:u.executionId}}catch(t){if(L(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(j.CALL_ERROR,t)}return{success:!1,error:r.message,toolName:e,executionId:n?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=Ua(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 Va(e,this,this.logger)}};function Ua(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 Wa(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 Ga(e,t){try{e()}catch(e){if(t===void 0)throw e}}function Ka(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function qa(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:Ot,ownerId:r,ownerPath:i}}function Ja(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...qa(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:Ot,ownerId:r,ownerPath:o}}function Ya(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:[...qa(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function Xa(e,t,n,r,i,a){let o=Ja(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:Ot,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function Za(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 Qa=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=Ka(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(Gr(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 qa(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return Ja(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return Ya(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return Xa(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}emitExecution(e,t,n,r){this.emitWithContext(e,t,()=>this.buildExecutionOwnerContext(n,r),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for execution event`);return 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(Gr(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){Sa(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){Ca(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){wa(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){Ta(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function $a(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function eo(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 to(e){return e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0}function no(e,t,n,r,i,a){let o=e.getMessages(),s=eo(o,i.turnMessageId),c=s.filter(to).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:$a(a,f)}:{}}}function ro(e,t,n,r,i,a,o=`round`){return structuredClone({version:1,effectAdmission:`required`,messages:e,round:t.currentRound,contextLimit:Li(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 io(e,t,n){e.tools!==void 0&&(ke(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function ao(e,t,n,r,i=!1){let a=oo(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 P)throw e})}}function oo(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function so(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 co={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(so(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(so(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(so(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(so(t),t.executionResult)},onMessageAdded:async(e,t)=>{e.onMessageAdded&&t.message&&await e.onMessageAdded(t.message)},beforeRun:async(e,t)=>{e.beforeRun&&t.input&&await e.beforeRun(t.input,t.metadata)},afterRun:async(e,t)=>{e.afterRun&&t.input&&t.response&&await e.afterRun(t.input,t.response,t.metadata)},beforeProviderCall:async(e,t)=>{e.beforeProviderCall&&t.messages&&await e.beforeProviderCall(t.messages)},afterProviderCall:async(e,t)=>{e.afterProviderCall&&t.messages&&t.responseMessage&&await e.afterProviderCall(t.messages,t.responseMessage)},onError:async(e,t)=>{if(e.onError&&t.error){let n={action:`${Ot}.${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=co[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 lo(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 uo(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function fo(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 po(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 mo(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 ho(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 go(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:bo(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 _o(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function vo(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function yo(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 bo(e){let t={conversationId:vo(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 xo(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
|
|
6
|
+
`)}function So(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=Jn({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:xo(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 Co(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 wo(e,t){e.current={provider:t.to.provider,model:t.to.model}}function To(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 x(e,r)}function Eo(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function Do(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 Oo(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function ko(e,t,n,r){let i=lo(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 Ao(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;Oo(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let f=ko(d,t,n,i);fo(f.toolChoice,f.tools),io(f,d,n);let{messages:p,outcome:m}=So(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,Eo(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 B(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 ao(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 ao(g,p,f,t.timeout,o||!!u)}function jo(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 Mo(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 No(e){let t=0,n=0,r,i=!1;for(let a of e){if(a.role!==`assistant`)continue;let e=Io(a);e&&(i=!0,t+=e.inputTokens,n+=e.outputTokens,e.cacheReadTokens!==void 0&&(r=(r??0)+e.cacheReadTokens))}if(i)return{promptTokens:t,completionTokens:n,totalTokens:t+n,...r!==void 0&&{cacheReadTokens:r}}}function Po(e){let t=No(e.filter(e=>et(e)&&e.data!==void 0).map(tt));if(t)return{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}function Fo(){return H()}function Io(e){let t=gi(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 Lo(e){let t=Mo(e).provenance,n=Io(e);return n?{...n,totalTokens:n.inputTokens+n.outputTokens,usageProvenance:t===`complete`?`complete`:`partial`}:{usageProvenance:t}}const Ro=/^peer:[A-Za-z0-9._:-]{1,128}$/,zo=/<(\/?)(peer_message)/gi;function Bo(e){return e.replace(zo,`<$1$2`)}function Vo(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function Ho(e){return Ro.test(e)?e:`peer:unverified`}function Uo(e){return e.map(e=>{if(e.type!==`text`)return e;let t=Bo(e.text);return t===e.text?e:{...e,text:t}})}function Wo(e){if(e.role===`tool`){let t=Bo(e.content),n=e.parts?Uo(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=Vo(e),n=Bo(e.content),r=e.parts?Uo(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="${Ho(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function Go(e){return e.map(Wo)}async function Ko(e,t,n,r,i,a,o,s,c=10,l){s.warn(`No final text response — forcing summary call`,{maxRounds:c===0?`unlimited`:c,currentRound:i.currentRound,conversationId:a});let u={},d=!1;try{let s=i.forcedSummaryInstruction??`Tool round limit reached. Provide your response based on the information gathered so far. If results are incomplete, let the user know what was covered and what remains — the user can request additional analysis in a follow-up message.`,f=[...Go(e.getMessages()),{id: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=Co(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=>{wo(u,e),o.onExecutionEvent?.($r.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 ao((a,s)=>Cn((e,n)=>{b.invoked=!0,b.startedAtMs=Date.now();let r=To(o.traceContext,t.provider,t.currentInfo.provider,y);return t.provider.chat(e,Eo(n,r))},a,s,o.executionJournal?{journal:o.executionJournal,executionId:r,callId:y,checkpoint:ro(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 P?C=e:zt(e,o.signal)&&(x=`interrupted`),e}finally{let e=b.invoked?Mo(S):{provenance:`absent`};Ga(()=>{o.onExecutionEvent?.(Qr.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),...Lo(S)};e.addAssistantMessage(w,[],T),d=!0,o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:w}),Za(e,o,r,a,{round:i.currentRound})}catch(n){if(n instanceof P)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}),Za(e,o,r,a,l)}}function qo(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 Jo=.95;function Yo(e,t,n){let r=Ei(e,{usageFloorTokens:n}),i=Li(t),a=i*Jo,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:Jo*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function Xo(e,t,n,r,i,a){let o=n.currentRound,s=Yo(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}),Za(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function Zo(e,t,n,r){let i=0,a=0;return{wrappedOnTextDelta:a=>{e.onExecutionEvent?.(`provider_stream_raw_delta`,{executionId:n,conversationId:e.conversationId,round:r,sequence:i,delta:a}),i++,t.appendStreaming(a),e.onTextDelta?.(a)},wrappedOnProviderNativeRawPayload:t=>{let i=t.sequence??a;a=Math.max(a,i+1),e.onExecutionEvent?.(`provider_native_raw_payload`,{executionId:n,conversationId:e.conversationId,round:r,...t,sequence:i})}}}async function Qo(e,t,n,r,i,a,o,s,c,l,u,d,f,p=Co(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 Ao(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=>{wo(p,e),_.model=e.to.model,i.onExecutionEvent?.($r.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=uo(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())},()=>To(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 P)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}),Za(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`?Mo(v):{provenance:`absent`};Ga(()=>{i.onExecutionEvent?.(Qr.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 $o(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function es(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function ts(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=>ba(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=Ei(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 ns(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))&&is(),t.add(e);try{if(Array.isArray(e))return`[${Array.from(e,n).join(`,`)}]`;Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null&&is();let t=Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t));return t.length!==Reflect.ownKeys(e).length&&is(),`{${t.map(([e,t])=>`${JSON.stringify(e)}:${n(t)}`).join(`,`)}}`}finally{t.delete(e)}}return n(e)}function rs(e){(!e||typeof e!=`object`||Array.isArray(e))&&is(),ns(e)}function is(){throw new I(`EXECUTION_RECOVERY_INVALID`,`Tool continuations require finite plain JSON objects`)}function as(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 I(`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 I(`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 I(`EXECUTION_RECOVERY_INVALID`,`Continuation request kind is required`);rs(n.data);let t=ns([n.kind,n.data]),c=i.find(e=>ns([e.request.kind,e.request.data])===t);if(!c){let t={...r,requestId:H(),kind:n.kind,data:n.data};await B(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 F(i.filter(e=>!e.response).map(e=>e.request))});return l=u.catch(e=>{e instanceof F||(o=e)}),u}},settle:async()=>{if(c=!0,await l,o)throw o;if(s)throw new F(i.filter(e=>!e.response).map(e=>e.request))},admit:async e=>{if(c)throw new I(`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 F(t.map(e=>e.request));if(a)throw new I(`EXECUTION_RECOVERY_INVALID`,`Tool effect admission was repeated`);a=!0;try{await e()}catch(e){throw o=e,e}}}}async function os(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 I(`EXECUTION_RECOVERY_INVALID`,`Tool response identities are required`);rs(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(ns(a.response)!==ns(i))throw new I(`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 I(`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 B(t.journal,e);return r}function ss(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 c(e,a,n)}}async function cs(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&&ss(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(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)=>as(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 B(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():B(e,{kind:`tool-dispatch`,recordId:`${i[t].actionId}:dispatch`,...i[t]}),onResult:(t,n)=>B(e,{kind:`tool-result`,recordId:`${i[t].actionId}:result`,...i[t],result:n,loadedDeferredTools:h.getLoadedDeferredTools()}),beforeEffect:(t,n)=>a[t].admit(()=>B(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),T=w.results.filter($o).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})}),s.toolsExecuted.push(...w.results.filter(e=>!$o(e)&&!es(e)).map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}));let E=m?.recovery?.checkpoint.contextLimit??Li(l?.defaultModel?.model??``),ee=t.getMessages().length,te=ts(e,w,t,i,g,{contextLimit:E,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(ee).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:ee+t,message:e})}),_.emitToolResultsEvents(e,w,s.toolsExecuted,n,r,i,a,o),_.clearToolEventServices(),{...te,unknownToolFailureCount:T.length,unknownToolNames:T}}async function ls(e,t,n,r,i,a,o,s,c){let{plugins:l,logger:u,eventEmitter:d,cacheService:f}=c,p=e.currentRound;u.debug(`[ROUND-${p}] Starting execution round ${p}`,{executionId:i,conversationId:a.conversationId,round:p,maxRounds:t});let m=n.getMessages(),h=Go(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,pr(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=Do(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})}),Xo(m,o,e,n,u,{fullContext:a,executionId:i,conversationId:r}))return!0;p>1&&a.onTextDelta?.(`
|
|
7
7
|
|
|
8
|
-
`),n.beginAssistant();let b=Oo(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S}=bo(a,n,i,p),C=Za(s,o.defaultModel.model,i),w=await xo(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),C);if(w===null)return!0;let{assistantResponse:T,assistantToolCalls:E}=ao(w,i,a.conversationId,p,u);if(E.length>0&&(a.toolChoice??o.defaultModel?.toolChoice)===`none`)throw Error(`Provider returned tool calls despite toolChoice none; no tools were executed.`);await J(l,`afterProviderCall`,{messages:m,responseMessage:w},u),await J(l,`onMessageAdded`,{message:w},u);let ee=typeof T.content==`string`&&T.content.trim().length>0;if(E.length===0&&!ee)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let te=ko(T),ne=te?.inputTokens??0;ne>0&&(e.cumulativeInputTokens=ne);for(let e of E)n.appendToolCall(e);let re=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(re,{round:p,usageObservationId:b,executionId:i,providerId:Y(C,s),modelId:X(C,s.aiProviderInfo.model),...te??{}});let ie=n.getMessages().at(-1);if(a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:T}),ie&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:ie}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=T,E.length===0)return u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(T,i,p,r,v,y),!0;let ae=await Eo(E,n,r,i,p,v,y,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs,a.traceContext);if(ae.contextOverflowed&&u.warn(`[ROUND] Tool results partially skipped due to context overflow — continuing to let AI respond`,{added:ae.addedCount,skipped:ae.skippedCount,round:p}),ae.unknownToolFailureCount>0?e.consecutiveUnknownToolFailureRounds+=1:e.consecutiveUnknownToolFailureRounds=0,e.consecutiveUnknownToolFailureRounds>=2){let t=[...new Set(ae.unknownToolNames)].sort();return e.forcedSummaryInstruction=[`The model repeatedly requested unavailable tool(s): ${t.join(`, `)}.`,`Those tool calls were not executed because they are not registered tools.`,`Respond to the user now with that reason and use the available tool results already in the conversation history.`].join(` `),u.warn(`[ROUND] Stopping repeated unavailable tool-call loop`,{unavailableTools:t,consecutiveRounds:e.consecutiveUnknownToolFailureRounds,round:p}),!0}return u.debug(`Round ${p} completed for agent ${a.conversationId}`),!1}function jo(e,t){let n=t.maxExecutionRounds??e.maxExecutionRounds;if(n===void 0)return 10;if(!Number.isInteger(n)||n<0)throw Error(`[EXECUTION] maxExecutionRounds must be a non-negative integer`);return n}function Mo(e,t){return t===0||e<t}async function No(e,t,n,r,i,a,o,s,c){let l=jo(i,r);for(;Mo(o.currentRound,l)&&!(s?.aborted||(o.currentRound++,await Ao(o,l,e,t,n,r,i,a,c))||s?.aborted););let u=e.getMessages(),d=u.length>0?u[u.length-1]:void 0,f=d?.role===`assistant`&&typeof d.content==`string`&&d.content.length>0&&(!(`toolCalls`in d)||d.toolCalls.length===0);s?.aborted||r.allowToolOnlyCompletion!==!0&&(f||await go(e,a,i,n,o,t,r,c.logger,l))}async function Po(e,t,n,r,i,a,o,s,c,l,u){let d={...ja(t,n,r,i.toolsExecuted,i.providerFailure),interrupted:o};await J(c,`afterRun`,{input:e,response:d.response,metadata:s?.metadata},l);let f={messages:d.messages,executionContext:{executionId:n,conversationId:a},executionResult:{response:d.response,duration:d.duration,...d.tokensUsed===void 0?{}:{tokensUsed:d.tokensUsed},toolsExecuted:d.toolsExecuted.length,success:d.success,toolCalls:d.toolsExecuted.map(e=>({name:e}))}};for(let e of[`afterExecution`,`afterConversation`,`afterToolExecution`])await J(c,e,f,l);return l.debug(`Execution pipeline completed successfully`,{executionId:n,conversationId:a,duration:d.duration,tokensUsed:d.tokensUsed,toolsExecuted:d.toolsExecuted.length,rounds:i.currentRound}),u.emitExecution(M.COMPLETE,{result:{success:!0,data:d.response.substring(0,100)+`...`},metadata:{method:`execute`,success:!0,duration:d.duration,tokensUsed:d.tokensUsed,toolsExecuted:d.toolsExecuted}},a,n),d}async function*Fo(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 Io(e,t){return{executionId:e,...t===void 0?{}:{driverId:t}}}var Lo=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new ba(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 ka(r,this.logger,i),this.cacheService=a}setAskHandler(e){this.toolExecutionService.setAskHandler(e)}invokeRuntimeTool(e,t,n){return this.toolExecutionService.executeTool(e,t,n,`registered`)}registerPlugin(e){let t=e.priority??0,n=this.plugins.findIndex(e=>(e.priority??0)<t);n===-1?this.plugins.push(e):this.plugins.splice(n,0,e),this.logger.debug(`Plugin registered`,{pluginName:e.name,priority:t})}removePlugin(e){let t=this.plugins.findIndex(t=>t.name===e);return t===-1?!1:(this.plugins.splice(t,1),this.logger.debug(`Plugin removed`,{pluginName:e}),!0)}getPlugin(e){return this.plugins.find(t=>t.name===e)}getPlugins(){return[...this.plugins]}async execute(e,t,n,r){let i=Ga(),a=new Date,o=Ka(r,`execute`),s=qa(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=Va(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=Ua(this.conversationHistory,o,t,n,i);try{let t=l.getMessages().length;l.addUserMessage(e,Io(i,r?.driverId));let u=l.getMessages()[t];u&&s.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:o,mutation:`append_message`,index:t,message:u}),this.eventEmitter.emitUserMessageEvent(e,o,i),await J(this.plugins,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},this.logger);let d={executionId:i,conversationId:o};u&&await J(this.plugins,`onMessageAdded`,{message:u,executionContext:d},this.logger),await J(this.plugins,`beforeExecution`,{messages:l.getMessages(),executionContext:d},this.logger),Ha(c);let f={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};for(let e of l.getMessages())e.role===`assistant`&&(f.runningAssistantCount++,f.lastTrackedAssistantMessage=e);return await No(l,o,i,s,n,c,f,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),Po(e,l,i,a,f,o,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){return Ft(e,r?.signal)?{response:``,messages:l.getMessages(),executionId:i,duration:Date.now()-a.getTime(),toolsExecuted:[],success:!0,interrupted:!0}:(await Wa(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*Fo(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 Ro(e){let t=new Xi;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 zo(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 Nt&&c&&e.setEventService(c),r.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let r=await e.execute(t,n);return Kr(e.schema.name,r)}),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new $i(new Qi({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new Zi));let d=new Lo(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 Bo(e){try{let t=await zo(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 Vo(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 Ho(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 Uo=class{tail=Promise.resolve();async acquire(e){let t=this.tail,n=()=>{};if(this.tail=new Promise(e=>{n=e}),await t,e?.aborted)throw n(),Error(`Run aborted while queued behind another run on this instance`);return n}async run(e,t){let n=await this.acquire(e);try{return await t()}finally{n()}}get drained(){return this.tail}};function Wo(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??Ko,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function Go(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new y(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel,r=n?.model??t.defaultModel;if(!r)throw new y(`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 y(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||Ko(),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 Ko(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function qo(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var Jo=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 Yo(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 Xo(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function Zo(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 Qo(e,n.name,r)}t.push(n)}}function Qo(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var $o=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new Jo,this.logger=O(`AgentFactory`),this.options=Wo(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=Go(t,this.options);let a=r;if(this.options.strictValidation){let e=Lt(r);if(!e.isValid)throw new l(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let o;if(await Zo([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(a)},{name:`construct`,run:()=>{o=new e(a)}},{name:`initialize`,run:()=>o?Yo(o)?.initialize?.():void 0,undo:()=>o?Yo(o)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!o)throw new y(`Agent was not constructed`);this.activeAgents.set(i,o),qo(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 y(`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 y(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);let e=this.options.idFactory(),t=0;for(;this.activeAgents.has(e)||this.pendingAgents.has(e);){if(t+=1,t>16)throw new y(`Agent id factory keeps returning ids that are already in use`);e=this.options.idFactory()}return this.pendingAgents.add(e),e}async createFromTemplate(e,t,n={}){let r=this.agentTemplates.getTemplate(t);if(!r)throw new y(`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 Yo(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 Lt(e)}};function es(e,t,n){if(!e.name||e.name.trim()===``)throw new y(`Module name is required`);if(!e.version||e.version.trim()===``)throw new y(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new y(`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 ts(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 y(`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 ns(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 rs(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 is(){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 as(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 os(e,t,n){let r=new Set,i=new Set,a=[],o=[],s=[];for(let r of e){let e=t(r);if(!e){s.push(r);continue}if(e.dependencies)for(let t of e.dependencies)!n(t)&&!s.includes(t)&&s.push(t)}let c=(s,l=[])=>{if(i.has(s)){let e=l.indexOf(s);o.push(l.slice(e).concat([s]));return}if(r.has(s))return;let u=t(s);if(!u)return;i.add(s);let d=[...l,s];if(u.dependencies)for(let t of u.dependencies)(e.includes(t)||n(t))&&c(t,d);i.delete(s),r.add(s),a.push(s)};for(let t of e)r.has(t)||c(t);return{resolved:s.length===0&&o.length===0,order:a,circularDependencies:o,missingDependencies:s}}function ss(e,t){let n=[],r=[],i=new Map;for(let n of e){let e=t(n);e&&(i.has(e.layer)||i.set(e.layer,[]),i.get(e.layer).push(n))}let a=new Map;for(let n of e){let e=t(n);if(e?.capabilities)for(let t of e.capabilities)a.has(t)||a.set(t,[]),a.get(t).push(n)}for(let[e,t]of Array.from(a.entries()))if(t.length>1)for(let r=0;r<t.length;r++)for(let i=r+1;i<t.length;i++){let a=t[r],o=t[i];a&&o&&n.push({module1:a,module2:o,reason:`Both modules provide capability '${e}'`})}return n.length>0&&(r.push(`Consider using only one module per capability`),r.push(`Check if modules can be configured to avoid conflicts`)),!i.has(`infrastructure`)&&e.length>1&&r.push(`Consider adding infrastructure modules for better foundation`),{compatible:n.length===0,conflicts:n,suggestions:r}}function cs(e){let t={core:0,storage:0,processing:0,integration:0,interface:0,capability:0},n={infrastructure:0,core:0,application:0,domain:0,presentation:0},r=0,i=0;for(let a of e.values())t[a.category]++,n[a.layer]++,a.dependencies&&a.dependencies.length>0&&r++,a.capabilities&&a.capabilities.length>0&&i++;return{totalTypes:e.size,typesByCategory:t,typesByLayer:n,typesWithDependencies:r,typesWithCapabilities:i}}var ls=class{registeredTypes=new Map;logger;constructor(){this.logger=O(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new y(`Invalid module type descriptor: ${t.errors.join(`, `)}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let t=this.registeredTypes.get(e.type);this.logger.warn(`Overriding existing module type`,{type:e.type,previousCategory:t?.category||`unknown`,newCategory:e.category})}this.registeredTypes.set(e.type,e),this.logger.info(`Module type registered`,{type:e.type,category:e.category,layer:e.layer,dependencies:e.dependencies?.length||0,capabilities:e.capabilities?.length||0})}unregisterType(e){if(!this.registeredTypes.has(e))return!1;let t=this.findDependentTypes(e);if(t.length>0)throw new y(`Cannot unregister module type '${e}' - it is required by: ${t.join(`, `)}`,{type:e,dependentTypes:t});return this.registeredTypes.delete(e),this.logger.info(`Module type unregistered`,{type:e}),!0}getType(e){return this.registeredTypes.get(e)}getAllTypes(){return Array.from(this.registeredTypes.values())}getTypesByCategory(e){return Array.from(this.registeredTypes.values()).filter(t=>t.category===e)}getTypesByLayer(e){return Array.from(this.registeredTypes.values()).filter(t=>t.layer===e)}hasType(e){return this.registeredTypes.has(e)}validateTypeDescriptor(e){return as(e,e=>this.getType(e))}resolveDependencies(e){return os(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return ss(e,e=>this.getType(e))}findDependentTypes(e){let t=[];for(let[n,r]of this.registeredTypes)r.dependencies?.includes(e)&&t.push(n);return t}registerBuiltinTypes(){for(let e of is())this.registerType(e);this.logger.info(`Built-in module types registered`,{totalTypes:this.registeredTypes.size})}clearAllTypes(){this.registeredTypes.clear(),this.logger.info(`All module types cleared`)}getStats(){return cs(this.registeredTypes)}};const us={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var ds=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 ls,this.logger=O(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new y(`Cannot register modules during disposal`);if(es(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new y(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await ts(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(us.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=ns(e,this.modules);if(n.length>0)throw new y(`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(us.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new y(`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 y(`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 y(`Module '${e}' not found`);if(!n.isInitialized())throw new y(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new y(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new y(`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 rs(this.modules,this.moduleStats)}},fs=class extends Gr{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=Ci(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=O(`Robota`,t?{level:t}:{}),this.startTime=Date.now(),qr(e),this.aiProviders=Ro(e),this.tools=wi(()=>this.config),this.agentFactory=new $o,this.conversationHistory=new Qn,this.eventEmitter=Pi(),this.moduleRegistry=new ds(this.eventEmitter),this.eventService=e.eventService||Tr,this.agentEventService=q(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:Fi(this.conversationId,this.config.executionContext)});let n=Di({getName:()=>this.name,getModuleRegistry:()=>this.moduleRegistry,getLogger:()=>this.logger,getIsFullyInitialized:()=>this.isFullyInitialized,ensureFullyInitialized:()=>this.ensureFullyInitialized(),getExecutionService:()=>this.executionService,getAiProviders:()=>this.aiProviders,getTools:()=>this.tools,getEventService:()=>this.eventService,getConfig:()=>this.config,setConfig:e=>{this.config=e},getConfigVersion:()=>this.configVersion,incrementConfigVersion:()=>++this.configVersion,getConfigUpdatedAt:()=>this.configUpdatedAt,setConfigUpdatedAt:e=>{this.configUpdatedAt=e},emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)});this.moduleManager=n.moduleManager,this.pluginManager=n.pluginManager,this.configManager=n.configManager,Mi(this.config,(e,t)=>this.emitAgentEvent(e,t))}async ensureReady(){await this.ensureFullyInitialized()}async listRuntimeTools(){return await this.ensureReady(),this.tools.getTools()}async invokeRuntimeTool(e,t,n){await this.ensureReady();let r=[...Fi(this.conversationId,this.config.executionContext),{type:`tool`,id:n.executionId??e}];return this.executionService.invokeRuntimeTool(e,t,{...n,baseEventService:this.eventService,eventService:q(this.eventService,{ownerPath:r,ownerType:`tool`,ownerId:n.executionId??e}),ownerPath:r,ownerType:`tool`,ownerId:n.executionId})}async run(e,t={}){return this.assertNotDestroyed(),this.runQueue.run(t.signal,async()=>{await this.ensureFullyInitialized();try{if(t.output){let n=wn(t.output);return await Vi(this.executionDeps(),e,t,n)}return await Li(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=wn(t.output);return yield*Hi(this.executionDeps(),e,t,n)}return yield*Ri(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new Uo;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 Wi(this.conversationHistory,this.conversationId)}getFullHistory(){return Gi(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Ki(this.conversationHistory,this.conversationId,e)}clearHistory(){qi(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){Ji(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){Yi(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 Vo({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,Ho({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 Bo({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){Ni(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const ps=1e4,ms=25e3,hs=5e5,gs=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,_s=Symbol.for(`@robota-sdk/tool-result-admitted`);var vs=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function ys(e){return Object.getOwnPropertyDescriptor(e,_s)?.value===!0}function bs(e){return Object.defineProperty({...e},_s,{value:!0})}function xs(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 Ss(e){return Number.isSafeInteger(e)&&e>0}function Cs(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!Ss(n)||!Ss(r)||!Ss(i)||n>=r||r>i||i>5e5)throw new vs(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!Ss(t))throw new vs(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function ws(e,t,n={},r){let{warningChars:i,hardChars:a}=Cs(n,r),o=xs(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new vs(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new vs(`spill-write-failed`)}if(!gs.test(e)||e.length>a)throw new vs(`invalid-reference`);return bs(t.success?{success:!0,data:e}:{success:!1,error:`Tool failure details: ${e}`})}return bs(t)}var Ts=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 Es={STARTED:`started`,STEP_STARTED:`step_started`,STEP_COMPLETED:`step_completed`,COMPLETED:`completed`,FAILED:`failed`},Ds=`orchestration`;function Z(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function Os(e){return typeof e==`string`?e.length:0}var ks=class{config;methodConfigs=new Map;constructor(e){this.config=e}configureMethod(e,t){return this.methodConfigs.set(e,t),this}configureStandardMethods(){return this.config.sourceType===`agent`&&(this.configureMethod(`run`,{startEvent:A.EXECUTION_START,completeEvent:A.EXECUTION_COMPLETE,errorEvent:A.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Os(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:Os(n[0]),conversationId:e.conversationId,streaming:!0,options:Z(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:P.CALL_START,completeEvent:P.CALL_COMPLETE,errorEvent:P.CALL_ERROR,extractMetadata:(e,t,n)=>({toolName:Z(e.schema)?.name||e.constructor.name,parameters:n[0],parametersCount:Z(n[0])?Object.keys(Z(n[0])||{}).length:0,context:n[1]}),extractResult:e=>({result:typeof Z(e)?.data==`string`?Z(e)?.data||``:JSON.stringify(Z(e)?.data),success:Z(e)?.success})}),this}wrap(e){return new Proxy(e,{get:(e,t,n)=>{let r=Reflect.get(e,t,n);if(typeof t!=`string`)return r;let i=t;if(typeof r==`function`&&this.methodConfigs.has(i)){let t=this.methodConfigs.get(i);return async(...n)=>{let a=Date.now(),o=this.generateExecutionId(),s=e;try{if(t.startEvent){let e=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.startEvent,{timestamp:new Date,metadata:{...e,executionId:o,methodName:i,phase:`start`}})}let c=await r.apply(e,n),l=Date.now()-a;if(t.completeEvent){let e=t.extractResult?.(c)||{},r=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.completeEvent,{timestamp:new Date,...e,metadata:{...r,executionId:o,methodName:i,duration:l,phase:`complete`,success:!0}})}return c}catch(e){let r=Date.now()-a;if(t.errorEvent){let a=t.extractMetadata?.(s,i,n)||{};this.emitEvent(t.errorEvent,{timestamp:new Date,error:e instanceof Error?e.message:String(e),metadata:{...a,executionId:o,methodName:i,duration:r,phase:`error`,errorName:e instanceof Error?e.name:`UnknownError`,success:!1}})}throw e}}}return r}})}emitEvent(e,t){let n={emitterSourceType:this.config.sourceType,emitterSourceId:this.config.sourceId},r={timestamp:new Date,...t.metadata?{metadata:{...n,...t.metadata}}:{metadata:n},...t};this.config.eventService.emit(e,r)}generateExecutionId(){return`${this.config.sourceType}-${this.config.sourceId}-${Date.now()}-${Math.random().toString(36).substr(2,9)}`}};function As(e,t){let n=new ks(t);return n.configureStandardMethods(),n.wrap(e)}function js(e,t,n){return function(r){return As(r,{eventService:e,sourceType:t,sourceId:n})}}const Ms={safe:`plan`,moderate:`default`,full:`acceptEdits`},Ns=`inherit-allowlist`;function Ps(e){let t;for(let n=0;n<e.length;n+=1){let r=e[n];if(t===`'`){r===`'`&&(t=void 0);continue}if(r===`\\`){n+=1;continue}let i=e[n+1];if(r==="`"||r===`$`&&i===`(`)return!0;if(t===`"`){r===`"`&&(t=void 0);continue}if(r===`'`||r===`"`){t=r;continue}if(r===`;`||r===`|`||r===`
|
|
9
|
-
`||(r===`<`||r===`>`)&&i===`(`)return!0;if(r===`&`){let t=e[n-1];if(t!==`>`&&t!==`<`&&i!==`>`)return!0}}return!1}function
|
|
10
|
-
`||r===`&`&&Vs(t,n))return Is(e),n}function Vs(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const Hs=/[.+^${}()|[\]\\]/g;function Us(e){let t=e.replace(Hs,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function Ws(e,t,n){let r=Us(e);return n===`deny`?r.test(t)||Fs(t).some(e=>r.test(e))?`match`:`no-match`:r.test(t)?e.includes(`*`)&&Ps(t)?`no-match`:`match`:`no-match`}function Gs(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(Hs,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function Ks(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function qs(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 Js(e,t){let n=qs(e),r=qs(t);return Ks(n)&&!Ks(r)?`unevaluable`:Gs(n).test(r)?`match`:`no-match`}const Ys=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,Xs=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),Zs={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function Qs(e){return e.replace(/\.$/,``).toLowerCase()}function $s(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function ec(e){let t=Qs(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(Hs,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=$s(i);if(e===null)return null;n.push(`${c}${e.replace(Hs,`\\$&`)}`)}}return RegExp(`^${n.join(``)}$`)}function tc(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function nc(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!Xs.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function rc(e,t){if(e.includes(`*`)){let n=ec(e);return n===null?`unevaluable`:n.test(t)?`match`:`no-match`}let n;try{n=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return Qs(n)===t?`match`:`no-match`}function ic(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?Zs[n]:t.port)}function ac(e,t){let n=tc(t),r=tc(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:Gs(r).test(n)?`match`:`no-match`}function oc(e,t){let n=Ys.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=nc(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=rc(i,Qs(s.hostname));return l===`match`?ic(a,s,c)?o===void 0?`match`:ac(o,s.pathname):`no-match`:l}const sc={plan:{inspect:`auto`,modify:`deny`,execute:`deny`},default:{inspect:`auto`,modify:`approve`,execute:`approve`},acceptEdits:{inspect:`auto`,modify:`auto`,execute:`approve`},bypassPermissions:{inspect:`auto`,modify:`auto`,execute:`auto`},auto:{inspect:`auto`,modify:`auto`,execute:`approve`}},cc={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},lc=[`.git`,`.robota`,`.claude`,`.agents`],uc=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function dc(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function fc(e){let t=[];for(let n of dc(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function pc(e){let t=fc(e),n=t[t.length-1];if(n!==void 0&&uc.includes(n))return!0;for(let e=0;e<t.length;e+=1){let n=t[e];if(lc.includes(n)){if((n===`.robota`||n===`.claude`)&&t[e+1]===`worktrees`&&t[e+2]!==void 0){e+=2;continue}return!0}}return!1}function mc(e){let t=[];for(let n of dc(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function hc(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const gc=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function _c(e,t){let n=hc(e),r=gc.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=mc(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=mc(n);else{if(t.cwd===void 0)return!1;i=mc(`${t.cwd}/${n}`)}if(dc(i).length<=1||t.homeDirectory!==void 0&&i===mc(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=mc(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const vc=new Set([`rm`,`rmdir`]),yc=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 bc(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=yc.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 xc(e,t){return Fs(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=bc(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!vc.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:_c(e,t))})}const Sc=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),Cc=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),wc={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},Tc=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,Ec=[`--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 Dc(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return Ec.some(e=>e.startsWith(t))}function Oc(e,t){if(Bc(t).some(e=>Tc.test(e.text)||Dc(e.text)))return!0;if(e===`find`)return Bc(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=wc[e];return n!==void 0&&Bc(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const kc=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),Ac=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),jc=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),Mc=new Set([`/dev/null`]),Nc=/[A-Za-z0-9_./:=@+,*?[\]~-]/,Pc=new Set([`$`,"`",`\\`,`!`]),Fc=new Set([`*`,`?`,`[`]);function Ic(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||Lc(e)}function Lc(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 Rc(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 zc(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!Mc.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||Ic(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:Pc.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(!Nc.test(l)){s=!0;break}Fc.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 Bc(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function Vc(e){return e.every(e=>!e.expands&&!Cc.has(e.text))}function Hc(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>Ac.has(e.text));return t.every(e=>Ac.has(e.text)||jc.has(e.text))&&(n||t.length===e.length)}function Uc(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!kc.has(t.text)||n.some(e=>e.expands)||n.some(e=>/^-[XO]/.test(e.text))||n.some(e=>/^--(output|ext-diff|open-files-in-pager|no-index)/.test(e.text))?!1:t.text===`branch`?Hc(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function Wc(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=>Ic(e.text))||Oc(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:Sc.has(t.text)?!0:t.text===`find`?Vc(n):t.text===`git`&&Uc(n)}const Gc=new Set([`echo`,`which`,`git`]);function Kc(e,t){let n;for(let[r,...i]of e)if(!Gc.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 qc(e,t={}){if(t.otherDirectory===!0||e.length>1e4||Rc(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=Fs(e);if(n.length===0)return!1;let r=n.map(zc);if(r.some(e=>e.refused||!Wc(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:Kc(r.map(e=>e.words),t.resolveInWorkspace)}function Jc(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 Yc(e,t){Q.set(e,{...Q.get(e),...t})}function Xc(){Q.clear()}function Zc(e){return Q.get(e)??{}}function Qc(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=Us(e);return n.some(e=>r.test(e))}function $c(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 el(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`:Us(e.value).test(String(n))?`match`:`no-match`}function tl(e,t){return t.some(t=>{let n=Jc(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&Qc(n.toolName,e)})}function nl(e){return Q.get(e)?.argument?.key}function rl(e,t){let n=nl(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function il(e,t,n,r=`allow`){return n.some(n=>ol(e,t,n,r)===`match`)}function al(e,t,n){return n.some(n=>ol(e,t,n,`deny`)===`unevaluable`)}function ol(e,t,n,r){let i=Jc(n);if(!Qc(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=$c(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?el(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=rl(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return oc(i.argPattern,s);case`path`:return Js(i.argPattern,s);case`command`:return Ws(i.argPattern,s,r);case`text`:return Us(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function sl(e,t,n){let r=Q.get(e),i=r?.argument;if(i===void 0)return!1;let a=t[i.key];return typeof a==`string`?i.kind===`command`?xc(a,n):i.kind===`path`&&r?.riskClass===`modify`&&pc(a):!1}function cl(e,t,n,r){return il(e,t,n,`deny`)||al(e,t,n)||sl(e,t,r)}function ll(e,t,n={},r={}){return al(e,t,n.deny??[])||cl(e,t,n.ask??[],r)}const ul=[`workingDirectory`,`cwd`];function dl(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`&&qc(i,{otherDirectory:ul.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function fl(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=dl(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return il(e,t,o,`deny`)||i.ceiling!==void 0&&!il(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0||Q.get(e)?.notInPeerTurn===!0&&i.peerTurn===!0?`deny`:al(e,t,o)?n===`plan`?`deny`:`approve`:cl(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||il(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?cc[n]:sc[n][c]}function pl(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 ml=/^[A-Za-z_]\w*:(?!\/\/)/;function hl(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function gl(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}=Jc(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!hl(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`&&ml.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=$c(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=Zc(r);if(!(o.parameters===void 0&&ml.test(i)&&$c(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`&&oc(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path] that "${r}" is matched by`}}function _l(e,t=`deny`){let n=[];for(let r of e){let e=gl(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function vl(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=Jc(n.trim());if(r===void 0||e.includes(`*`))continue;let i=Zc(e),a=$c(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&ml.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=Zc(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 yl(e){return(e??[]).map(e=>`${e}(*)`)}function bl(e,t){let n=yl(t.allowedTools),r=_l(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,...yl(t.deniedTools)])]}}const xl=[`Bash`,`Shell`,`BackgroundProcess`],Sl=[`Agent`],Cl=[...xl,...Sl,`ExecuteCommand`,`Computer`],wl=`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(`.`),Tl=[`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(` `)),El=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function Dl(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function Ol(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=Dl(e[0]);if(wl.some(t=>n(t,r,e.length===1)))return!0;for(let i of Tl){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(`-`)||El.has(o[0]));)o=o.slice(1);return o.length===0||Ol(o,t)}return!1}function kl(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return Ol(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function Al(e){let{toolName:t,argPattern:n}=Jc(e),r=e=>e.some(e=>Qc(t,e));return r(Sl)?!0:t.includes(`*`)?r(Cl):Cl.includes(t)||Zc(t).riskClass===`execute`?n===void 0||n.trim()===`*`||xl.includes(t)&&kl(n):!1}function jl(e){return e.filter(e=>!Al(e))}const Ml=1e6,Nl={"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}},Pl=[{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 Fl(e){let t=Object.hasOwn(Nl,e)?Nl[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of Pl)if(t.test(e))return n}function Il(e,t,n){let r=Fl(e);if(r)return t/Ml*r.inputPerMillion+n/Ml*r.outputPerMillion}function Ll(e){let t=Fl(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function Rl(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 zl(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 Bl(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([import(`./command-executor-DV-H2oD6.js`).then(e=>e.n),import(`./http-executor-cWzI2svn.js`).then(e=>e.n)]);return[new e,new t]}async function Vl(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 Bl(),u=new Map;for(let e of l)u.set(e.type,e);let d=[],f=zl(n),p=-1,m,h;for(let e of c){if(!Rl(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(`
|
|
8
|
+
`),n.beginAssistant();let b=Fo(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S}=Zo(a,n,i,p),C=Co(s,o.defaultModel.model,i),w=H(),T=await Qo(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),C,w,a.executionJournal?ro(m,e,a,o,t,c.toolExecutionService.getLoadedDeferredTools()):void 0);if(T===null)return!0;let{assistantResponse:E,assistantToolCalls:ee}=jo(T,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:T},u),await W(l,`onMessageAdded`,{message:T},u);let te=typeof E.content==`string`&&E.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=Lo(E),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(C,s),providerCallId:w,modelId:K(C,s.aiProviderInfo.model),...ne});let ae=n.getMessages().at(-1);return a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:E}),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=E,ee.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):qo(await cs(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:w}:void 0),e,u)?!0:(u.debug(`Round ${p} completed for agent ${a.conversationId}`),!1)}function us(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 ds(e,t){return t===0||e<t}async function fs(e,t,n,r,i,a,o,s,c,l=!1){let u=us(i,r);for(;!l&&!o.forcedSummaryInstruction&&ds(o.currentRound,u)&&!(s?.aborted||(o.currentRound++,await ls(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);s?.aborted||r.allowToolOnlyCompletion!==!0&&(p||await Ko(e,a,i,n,o,t,r,c.logger,u,r.executionJournal?c.toolExecutionService.getLoadedDeferredTools():void 0))}async function ps(e,t,n,r,i,a,o,s,c,l,u,d){let f={...no(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:f.toolsExecuted.map(e=>({name:e}))}};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 I(`EXECUTION_RECOVERY_INVALID`,e)}function Y(e){return typeof e==`string`&&e.length>0}function ms(e,t,n,r=!0){try{return hs(structuredClone(e),t,n,r)}catch(e){if(e instanceof I)throw e;return J(`Execution journal is not a valid recoverable record prefix`)}}function hs(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`),rs(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`),rs(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 I(`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 gs(e){throw new I(`EXECUTION_RECOVERY_CONFLICT`,e)}function _s(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,...Lo(e.response),executionId:t.executionId,providerCallId:t.callId,round:e.checkpoint.round}}}function vs(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 ys(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))&&gs(`Current history differs from the saved runtime checkpoint`);let a=e.slice(i.length);if(!a.length)return;vs(a[0],_s(t,n),n.callId,n.executionId)||gs(`Current assistant does not match the saved response`);let o=t.response.toolCalls??[];a.length>o.length+1&&gs(`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||gs(`History contains a tool result without durable settlement`),n}),l=new gr;for(let e of i)l.addMessage(e);l.addMessage(a[0]),ts(s,{results:c,errors:[]},l,t.checkpoint.round,r.logger,{contextLimit:t.checkpoint.contextLimit,cumulativeInputTokens:bs(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)&&gs(`Existing tool result conflicts with the durable result`)}}function bs(e){let t=Lo(e.response).inputTokens??0;return t>0?t:e.checkpoint.cumulativeInputTokens}async function xs(e,t,n,r,i){let a=q(e.getMessages()),o=()=>{(a!==q(e.getMessages())||e.hasPendingAssistant())&&gs(`History changed during execution recovery`)};o();let s=i?.records??await n.journal.read(n.executionId),c=i?.batch??ms(s,n.executionId,n.callId);n.signal?.throwIfAborted(),o();let l=structuredClone(e.getMessages());ys(l,c,n,r);let u=await os(s,n);u.length!==s.length&&(c=ms(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 gr;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(_s(c,n));let h={toolsExecuted:[...c.checkpoint.continuation?.toolsExecuted??[]],currentRound:c.checkpoint.round,runningAssistantCount:f.getMessages().filter(e=>e.role===`assistant`).length,lastTrackedAssistantMessage:c.response,cumulativeInputTokens:bs(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=qo(await cs(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())&&gs(`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 Ss(e,t,n,r){let{executionId:i,callId:a,messages:o}=await xs(e,t,n,r);return{executionId:i,callId:a,messages:o}}function X(e){throw new I(`EXECUTION_RECOVERY_INVALID`,e)}function Cs(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 ws(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 I(`EXECUTION_RECOVERY_REQUIRED`,`The latest model invocation has no durable response; reconcile it before resuming`);let l=ms(s,n.executionId,c.callId,!1),u=Cs(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 I(`EXECUTION_RECOVERY_CONFLICT`,`History changed while reading the execution journal`);let m=await xs(e,t,{...n,callId:c.callId},a,{batch:l,records:s}),h=yo(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 fs(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 no(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*Ts(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 Es(e,t,n){return{executionId:e,...t===void 0?{}:{driverId:t},...n===void 0?{}:{turnSource:n}}}var Ds=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new Ha(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 Qa(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 ws(this.conversationHistory.getConversationStore(e),e,t,n,e=>po(this.aiProviders,this.tools,e),{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService})}resumeToolCalls(e,t){return Ss(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=_o(),a=new Date,o=vo(r,`execute`),s=yo(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=po(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=ho(this.conversationHistory,o,t,n,i),u,d={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};try{let t=l.getMessages().length;l.addUserMessage(e,Es(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),await W(this.plugins,`beforeExecution`,{messages:l.getMessages(),executionContext:p},this.logger),mo(c);for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await fs(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),ps(e,l,i,a,d,o,u,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){if(L(e))throw e;return zt(e,r?.signal)?{...no(l,i,a,d.toolsExecuted,{turnMessageId:u,interrupted:!0}),interrupted:!0}:(await go(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*Ts(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 Os(e){let t=new ga;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 ks(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 fi(e,t,n);return di(e.schema.name,r)}),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new ya(new va({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new _a));let d=new Ds(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 As(e){try{let t=await ks(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 js(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 Ms(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 Ns=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(),Ps(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 Ps(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 Fs(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??Ls,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function Is(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new y(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel,r=n?.model??t.defaultModel;if(!r)throw new y(`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 y(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||Ls(),name:e.name||`Unnamed Agent`,aiProviders:e.aiProviders,defaultModel:{provider:i,model:r,temperature:n?.temperature??.7,...n?.maxTokens!==void 0&&{maxTokens:n.maxTokens},...n?.topP!==void 0&&{topP:n.topP}},systemMessage:e.systemMessage??t.defaultSystemMessage,tools:e.tools||[],plugins:e.plugins||[],metadata:e.metadata||{},...e.logging&&{logging:e.logging},...e.conversationId&&{conversationId:e.conversationId},...e}}function Ls(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function Rs(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var zs=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 Bs(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 Vs(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function Hs(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 Us(e,n.name,r)}t.push(n)}}function Us(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var Ws=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new zs,this.logger=D(`AgentFactory`),this.options=Fs(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=Is(t,this.options);let a=r;if(this.options.strictValidation){let e=Ut(r);if(!e.isValid)throw new l(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let o;if(await Hs([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(a)},{name:`construct`,run:()=>{o=new e(a)}},{name:`initialize`,run:()=>o?Bs(o)?.initialize?.():void 0,undo:()=>o?Bs(o)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!o)throw new y(`Agent was not constructed`);this.activeAgents.set(i,o),Rs(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 y(`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 y(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);let e=this.options.idFactory(),t=0;for(;this.activeAgents.has(e)||this.pendingAgents.has(e);){if(t+=1,t>16)throw new y(`Agent id factory keeps returning ids that are already in use`);e=this.options.idFactory()}return this.pendingAgents.add(e),e}async createFromTemplate(e,t,n={}){let r=this.agentTemplates.getTemplate(t);if(!r)throw new y(`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 Bs(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 Gs(e,t,n){if(!e.name||e.name.trim()===``)throw new y(`Module name is required`);if(!e.version||e.version.trim()===``)throw new y(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new y(`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 Ks(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 y(`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 qs(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 Js(e,t){let n={},r=0,i=0,a=0,o=0,s=0,c=0;for(let t of e.values()){let e=t.getModuleType().type;n[e]=(n[e]||0)+1,t.isInitialized()&&r++,t.isEnabled()&&i++}for(let e of t.values())a+=e.totalExecutions,o+=e.successfulExecutions,s+=e.failedExecutions,c+=e.totalExecutionTime;return{totalModules:e.size,initializedModules:r,enabledModules:i,modulesByType:n,totalExecutions:a,totalSuccessfulExecutions:o,totalFailedExecutions:s,averageExecutionTime:a>0?c/a:0}}function Ys(){return[{type:`storage`,category:`storage`,layer:`infrastructure`,capabilities:[`data-persistence`,`data-retrieval`]},{type:`memory-storage`,category:`storage`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`in-memory-storage`,`fast-access`]},{type:`file-storage`,category:`storage`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`persistent-storage`,`file-system-access`]},{type:`text-processing`,category:`processing`,layer:`application`,capabilities:[`text-analysis`,`content-transformation`]},{type:`file-processing`,category:`processing`,layer:`application`,dependencies:[`storage`],capabilities:[`file-parsing`,`content-extraction`]},{type:`api-integration`,category:`integration`,layer:`application`,capabilities:[`external-api-access`,`data-synchronization`]},{type:`database-integration`,category:`integration`,layer:`infrastructure`,dependencies:[`storage`],capabilities:[`database-access`,`query-execution`]},{type:`rag`,category:`capability`,layer:`domain`,dependencies:[`storage`,`text-processing`],capabilities:[`document-search`,`context-retrieval`,`semantic-search`]},{type:`speech-processing`,category:`capability`,layer:`domain`,capabilities:[`speech-to-text`,`text-to-speech`,`audio-processing`]},{type:`image-analysis`,category:`capability`,layer:`domain`,capabilities:[`image-recognition`,`visual-analysis`,`content-extraction`]}]}function Xs(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 Zs(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 Qs(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 $s(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 ec=class{registeredTypes=new Map;logger;constructor(){this.logger=D(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new y(`Invalid module type descriptor: ${t.errors.join(`, `)}`,{type:e.type,errors:t.errors});if(this.registeredTypes.has(e.type)){let t=this.registeredTypes.get(e.type);this.logger.warn(`Overriding existing module type`,{type:e.type,previousCategory:t?.category||`unknown`,newCategory:e.category})}this.registeredTypes.set(e.type,e),this.logger.info(`Module type registered`,{type:e.type,category:e.category,layer:e.layer,dependencies:e.dependencies?.length||0,capabilities:e.capabilities?.length||0})}unregisterType(e){if(!this.registeredTypes.has(e))return!1;let t=this.findDependentTypes(e);if(t.length>0)throw new y(`Cannot unregister module type '${e}' - it is required by: ${t.join(`, `)}`,{type:e,dependentTypes:t});return this.registeredTypes.delete(e),this.logger.info(`Module type unregistered`,{type:e}),!0}getType(e){return this.registeredTypes.get(e)}getAllTypes(){return Array.from(this.registeredTypes.values())}getTypesByCategory(e){return Array.from(this.registeredTypes.values()).filter(t=>t.category===e)}getTypesByLayer(e){return Array.from(this.registeredTypes.values()).filter(t=>t.layer===e)}hasType(e){return this.registeredTypes.has(e)}validateTypeDescriptor(e){return Xs(e,e=>this.getType(e))}resolveDependencies(e){return Zs(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return Qs(e,e=>this.getType(e))}findDependentTypes(e){let t=[];for(let[n,r]of this.registeredTypes)r.dependencies?.includes(e)&&t.push(n);return t}registerBuiltinTypes(){for(let e of Ys())this.registerType(e);this.logger.info(`Built-in module types registered`,{totalTypes:this.registeredTypes.size})}clearAllTypes(){this.registeredTypes.clear(),this.logger.info(`All module types cleared`)}getStats(){return $s(this.registeredTypes)}};const tc={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var nc=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 ec,this.logger=D(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new y(`Cannot register modules during disposal`);if(Gs(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new y(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await Ks(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(tc.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=qs(e,this.modules);if(n.length>0)throw new y(`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(tc.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new y(`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 y(`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 y(`Module '${e}' not found`);if(!n.isInitialized())throw new y(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new y(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new y(`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 Js(this.modules,this.moduleStats)}},rc=class extends ui{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=Ui(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=D(`Robota`,t?{level:t}:{}),this.startTime=Date.now(),pi(e),this.aiProviders=Os(e),this.tools=Wi(()=>this.config),this.agentFactory=new Ws,this.conversationHistory=new _r,this.eventEmitter=ea(),this.moduleRegistry=new nc(this.eventEmitter),this.eventService=e.eventService||Wr,this.agentEventService=U(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:ta(this.conversationId,this.config.executionContext)});let n=qi({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,Qi(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=[...ta(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 sa(this.executionDeps(),e,t,n)}return await ra(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*ca(this.executionDeps(),e,t,n)}return yield*ia(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new Ns;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 ua(this.conversationHistory,this.conversationId)}getFullHistory(){return da(this.conversationHistory,this.conversationId)}addHistoryEntry(e){fa(this.conversationHistory,this.conversationId,e)}clearHistory(){pa(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){ma(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){ha(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 js({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,Ms({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 As({ctx:{config:this.config,aiProviders:this.aiProviders,tools:this.tools,agentFactory:this.agentFactory,conversationHistory:this.conversationHistory,moduleRegistry:this.moduleRegistry,eventEmitter:this.eventEmitter,eventService:this.eventService,logger:this.logger},setExecutionService:e=>{this.executionService=e},setFullyInitialized:e=>{this.isFullyInitialized=e}})}emitAgentEvent(e,t){$i(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const ic=1e4,ac=25e3,oc=5e5,sc=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,cc=Symbol.for(`@robota-sdk/tool-result-admitted`);var lc=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function uc(e){return Object.getOwnPropertyDescriptor(e,cc)?.value===!0}function dc(e){return Object.defineProperty({...e},cc,{value:!0})}function fc(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 pc(e){return Number.isSafeInteger(e)&&e>0}function mc(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!pc(n)||!pc(r)||!pc(i)||n>=r||r>i||i>5e5)throw new lc(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!pc(t))throw new lc(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function hc(e,t,n={},r){let{warningChars:i,hardChars:a}=mc(n,r),o=fc(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new lc(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new lc(`spill-write-failed`)}if(!sc.test(e)||e.length>a)throw new lc(`invalid-reference`);return dc(t.success?{success:!0,data:e}:{success:!1,error:`Tool failure details: ${e}`})}return dc(t)}var gc=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 _c={STARTED:`started`,STEP_STARTED:`step_started`,STEP_COMPLETED:`step_completed`,COMPLETED:`completed`,FAILED:`failed`},vc=`orchestration`;function Z(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function yc(e){return typeof e==`string`?e.length:0}var bc=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:yc(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:yc(n[0]),conversationId:e.conversationId,streaming:!0,options:Z(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:j.CALL_START,completeEvent:j.CALL_COMPLETE,errorEvent:j.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 xc(e,t){let n=new bc(t);return n.configureStandardMethods(),n.wrap(e)}function Sc(e,t,n){return function(r){return xc(r,{eventService:e,sourceType:t,sourceId:n})}}const Cc={safe:`plan`,moderate:`default`,full:`acceptEdits`},wc=`inherit-allowlist`;function Tc(e){let t;for(let n=0;n<e.length;n+=1){let r=e[n];if(t===`'`){r===`'`&&(t=void 0);continue}if(r===`\\`){n+=1;continue}let i=e[n+1];if(r==="`"||r===`$`&&i===`(`)return!0;if(t===`"`){r===`"`&&(t=void 0);continue}if(r===`'`||r===`"`){t=r;continue}if(r===`;`||r===`|`||r===`
|
|
9
|
+
`||(r===`<`||r===`>`)&&i===`(`)return!0;if(r===`&`){let t=e[n-1];if(t!==`>`&&t!==`<`&&i!==`>`)return!0}}return!1}function Ec(e){let t={segments:[],current:``,quote:void 0,substitutionDepth:0};for(let n=0;n<e.length;n+=1){let r=Oc(t,e,n);if(r!==void 0){n=r;continue}let i=kc(t,e,n);if(i!==void 0){n=i;continue}if(Ac(t,e[n]))continue;let a=jc(t,e,n);if(a!==void 0){n=a;continue}t.current+=e[n]}return Dc(t),t.segments}function Dc(e){let t=e.current.trim();t!==``&&e.segments.push(t),e.current=``}function Oc(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 kc(e,t,n){let r=t[n];if(r==="`")return Dc(e),n;if(r===`$`&&t[n+1]===`(`)return Dc(e),e.substitutionDepth+=1,n+1}function Ac(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 jc(e,t,n){let r=t[n];if((r===`<`||r===`>`)&&t[n+1]===`(`)return Dc(e),e.substitutionDepth+=1,n+1;if(r===`)`&&e.substitutionDepth>0)return Dc(e),--e.substitutionDepth,n;if(r===`;`||r===`|`||r===`
|
|
10
|
+
`||r===`&`&&Mc(t,n))return Dc(e),n}function Mc(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const Nc=/[.+^${}()|[\]\\]/g;function Pc(e){let t=e.replace(Nc,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function Fc(e,t,n){let r=Pc(e);return n===`deny`?r.test(t)||Ec(t).some(e=>r.test(e))?`match`:`no-match`:r.test(t)?e.includes(`*`)&&Tc(t)?`no-match`:`match`:`no-match`}function Ic(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(Nc,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function Lc(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function Rc(e){let t=e.replace(/\\/g,`/`),n=t.startsWith(`/`),r=[];for(let e of t.split(`/`))if(e!==``&&e!==`.`){if(e===`..`){r.length>0&&r[r.length-1]!==`..`?r.pop():n||r.push(`..`);continue}r.push(e)}let i=(n?`/`:``)+r.join(`/`);return(i===``?`.`:i).replace(/^[A-Za-z]:(?=\/|$)/,e=>e.toLowerCase())}function zc(e,t){let n=Rc(e),r=Rc(t);return Lc(n)&&!Lc(r)?`unevaluable`:Ic(n).test(r)?`match`:`no-match`}const Bc=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,Vc=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),Hc={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function Uc(e){return e.replace(/\.$/,``).toLowerCase()}function Wc(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function Gc(e){let t=Uc(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(Nc,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=Wc(i);if(e===null)return null;n.push(`${c}${e.replace(Nc,`\\$&`)}`)}}return RegExp(`^${n.join(``)}$`)}function Kc(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function qc(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!Vc.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function Jc(e,t){if(e.includes(`*`)){let n=Gc(e);return n===null?`unevaluable`:n.test(t)?`match`:`no-match`}let n;try{n=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return Uc(n)===t?`match`:`no-match`}function Yc(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?Hc[n]:t.port)}function Xc(e,t){let n=Kc(t),r=Kc(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:Ic(r).test(n)?`match`:`no-match`}function Zc(e,t){let n=Bc.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=qc(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=Jc(i,Uc(s.hostname));return l===`match`?Yc(a,s,c)?o===void 0?`match`:Xc(o,s.pathname):`no-match`:l}const Qc={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`}},$c={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},el=[`.git`,`.robota`,`.claude`,`.agents`],tl=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function nl(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function rl(e){let t=[];for(let n of nl(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function il(e){let t=rl(e),n=t[t.length-1];if(n!==void 0&&tl.includes(n))return!0;for(let e=0;e<t.length;e+=1){let n=t[e];if(el.includes(n)){if((n===`.robota`||n===`.claude`)&&t[e+1]===`worktrees`&&t[e+2]!==void 0){e+=2;continue}return!0}}return!1}function al(e){let t=[];for(let n of nl(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function ol(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const sl=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function cl(e,t){let n=ol(e),r=sl.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=al(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=al(n);else{if(t.cwd===void 0)return!1;i=al(`${t.cwd}/${n}`)}if(nl(i).length<=1||t.homeDirectory!==void 0&&i===al(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=al(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const ll=new Set([`rm`,`rmdir`]),ul=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 dl(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=ul.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 fl(e,t){return Ec(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=dl(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!ll.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:cl(e,t))})}const pl=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),ml=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),hl={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},gl=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,_l=[`--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 vl(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return _l.some(e=>e.startsWith(t))}function yl(e,t){if(jl(t).some(e=>gl.test(e.text)||vl(e.text)))return!0;if(e===`find`)return jl(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=hl[e];return n!==void 0&&jl(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const bl=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),xl=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),Sl=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),Cl=new Set([`/dev/null`]),wl=/[A-Za-z0-9_./:=@+,*?[\]~-]/,Tl=new Set([`$`,"`",`\\`,`!`]),El=new Set([`*`,`?`,`[`]);function Dl(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||Ol(e)}function Ol(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 kl(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 Al(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!Cl.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||Dl(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:Tl.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(!wl.test(l)){s=!0;break}El.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 jl(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function Ml(e){return e.every(e=>!e.expands&&!ml.has(e.text))}function Nl(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>xl.has(e.text));return t.every(e=>xl.has(e.text)||Sl.has(e.text))&&(n||t.length===e.length)}function Pl(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!bl.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`?Nl(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function Fl(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=>Dl(e.text))||yl(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:pl.has(t.text)?!0:t.text===`find`?Ml(n):t.text===`git`&&Pl(n)}const Il=new Set([`echo`,`which`,`git`]);function Ll(e,t){let n;for(let[r,...i]of e)if(!Il.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 Rl(e,t={}){if(t.otherDirectory===!0||e.length>1e4||kl(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=Ec(e);if(n.length===0)return!1;let r=n.map(Al);if(r.some(e=>e.refused||!Fl(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:Ll(r.map(e=>e.words),t.resolveInWorkspace)}function 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 Bl(e,t){Q.set(e,{...Q.get(e),...t})}function Vl(){Q.clear()}function Hl(e){return Q.get(e)??{}}function Ul(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=Pc(e);return n.some(e=>r.test(e))}function Wl(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 Gl(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`:Pc(e.value).test(String(n))?`match`:`no-match`}function Kl(e,t){return t.some(t=>{let n=zl(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&Ul(n.toolName,e)})}function ql(e){return Q.get(e)?.argument?.key}function Jl(e,t){let n=ql(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function Yl(e,t,n,r=`allow`){return n.some(n=>Zl(e,t,n,r)===`match`)}function Xl(e,t,n){return n.some(n=>Zl(e,t,n,`deny`)===`unevaluable`)}function Zl(e,t,n,r){let i=zl(n);if(!Ul(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=Wl(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?Gl(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=Jl(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return Zc(i.argPattern,s);case`path`:return zc(i.argPattern,s);case`command`:return Fc(i.argPattern,s,r);case`text`:return Pc(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function Ql(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`?fl(a,n):i.kind===`path`&&r?.riskClass===`modify`&&il(a):!1}function $l(e,t,n,r){return Yl(e,t,n,`deny`)||Xl(e,t,n)||Ql(e,t,r)}function eu(e,t,n={},r={}){return Xl(e,t,n.deny??[])||$l(e,t,n.ask??[],r)}const tu=[`workingDirectory`,`cwd`];function nu(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`&&Rl(i,{otherDirectory:tu.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function ru(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=nu(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return Yl(e,t,o,`deny`)||i.ceiling!==void 0&&!Yl(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0||Q.get(e)?.notInPeerTurn===!0&&i.peerTurn===!0?`deny`:Xl(e,t,o)?n===`plan`?`deny`:`approve`:$l(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||Yl(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?$c[n]:Qc[n][c]}function iu(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 au=/^[A-Za-z_]\w*:(?!\/\/)/;function ou(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function su(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(`*`)&&!ou(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`&&au.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=Wl(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=Hl(r);if(!(o.parameters===void 0&&au.test(i)&&Wl(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`&&Zc(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path] that "${r}" is matched by`}}function cu(e,t=`deny`){let n=[];for(let r of e){let e=su(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function lu(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=Hl(e),a=Wl(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&au.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=Hl(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 uu(e){return(e??[]).map(e=>`${e}(*)`)}function du(e,t){let n=uu(t.allowedTools),r=cu(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,...uu(t.deniedTools)])]}}const fu=[`Bash`,`Shell`,`BackgroundProcess`],pu=[`Agent`],mu=[...fu,...pu,`ExecuteCommand`,`Computer`],hu=`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(`.`),gu=[`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(` `)),_u=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function vu(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function yu(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=vu(e[0]);if(hu.some(t=>n(t,r,e.length===1)))return!0;for(let i of gu){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(`-`)||_u.has(o[0]));)o=o.slice(1);return o.length===0||yu(o,t)}return!1}function bu(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return yu(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function xu(e){let{toolName:t,argPattern:n}=zl(e),r=e=>e.some(e=>Ul(t,e));return r(pu)?!0:t.includes(`*`)?r(mu):mu.includes(t)||Hl(t).riskClass===`execute`?n===void 0||n.trim()===`*`||fu.includes(t)&&bu(n):!1}function Su(e){return e.filter(e=>!xu(e))}const Cu=1e6,wu={"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}},Tu=[{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 Eu(e){let t=Object.hasOwn(wu,e)?wu[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of Tu)if(t.test(e))return n}function Du(e,t,n){let r=Eu(e);if(r)return t/Cu*r.inputPerMillion+n/Cu*r.outputPerMillion}function Ou(e){let t=Eu(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function ku(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 Au(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 ju(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([import(`./command-executor-BdE1zg3q.js`).then(e=>e.n),import(`./http-executor-cWzI2svn.js`).then(e=>e.n)]);return[new e,new t]}async function Mu(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 ju(),u=new Map;for(let e of l)u.set(e.type,e);let d=[],f=Au(n),p=-1,m,h;for(let e of c){if(!ku(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
11
|
`),...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(`
|
|
12
12
|
`),...l.permissionDecision===`deny`&&{permissionDecision:`deny`},...s()};if(l.permissionDecision!==void 0){let e=ce[l.permissionDecision];e>p&&(p=e,m=l.permissionDecision),e>=p&&l.updatedInput!==void 0&&(h=l.updatedInput)}}}let g={blocked:!1,stdout:d.join(`
|
|
13
|
-
`)};m!==void 0&&(g.permissionDecision=m),h!==void 0&&(g.updatedInput=h);let{unknownHookTypes:_,errors:v}=s();return _!==void 0&&(g.unknownHookTypes=_),v!==void 0&&(g.errors=v),g}var
|
|
13
|
+
`)};m!==void 0&&(g.permissionDecision=m),h!==void 0&&(g.updatedInput=h);let{unknownHookTypes:_,errors:v}=s();return _!==void 0&&(g.unknownHookTypes=_),v!==void 0&&(g.errors=v),g}var Nu=class extends Error{guardrailName;guardrailReason;constructor(e,t){super(t),this.guardrailName=e,this.guardrailReason=t,this.name=`GuardrailBlock`}},Pu=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 Nu(e,`Guardrail "${e}" errored: ${t instanceof Error?t.message:String(t)}`)}if(!r.pass)throw new Nu(e,r.reason??`Guardrail "${e}" blocked the turn`)}))}catch(e){if(e instanceof Nu)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 Fu(e,t){return{posture:`advisory`,enforcementReachable:!1,rationale:`Awaited at ${e} but only ${t} is read; \`blocked\` is never consulted.`}}function Iu(e){for(let t of Object.values(e))Object.freeze(t);return Object.freeze(e)}const Lu=Iu({PreToolUse:{posture:`enforcing`,enforcementReachable:!0,rationale:"The tool-execution gate. `runPreToolHook` awaits the result and turns `blocked` into a denial, so a hook that reached no verdict must not read as approval (tracker issue #2075)."},SessionEnd:Fu(`session-lifecycle.ts`,`nothing`),PreCompact:Fu(`compaction-orchestrator.ts`,`nothing`),UserPromptSubmit:Fu(`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 Ru(e){return Lu[e].posture===`enforcing`}export{k as AGENT_EVENTS,Dt as AGENT_EVENT_PREFIX,St as AbstractAIProvider,qe as AbstractAgent,Hr as AbstractEventService,It as AbstractExecutor,Je as AbstractManager,Ft as AbstractPlugin,Lt as AbstractTool,Ws as AgentFactory,zs as AgentTemplates,E as AuthenticationError,Ie as CONFIRM_NO,Fe as CONFIRM_YES,Ci as CONTEXT_ESTIMATE_CHARS_PER_TOKEN,C as CacheIntegrityError,b as CircuitBreakerOpenError,y as ConfigurationError,ht as ConsoleLogger,_r as ConversationHistory,gr as ConversationStore,Wr as DEFAULT_ABSTRACT_EVENT_SERVICE,wc as DEFAULT_BACKGROUND_PERMISSION_POLICY,Mi as DEFAULT_CONTEXT_WINDOW,Ri as DEFAULT_MAX_OUTPUT,ac as DEFAULT_TOOL_RESULT_HARD_CHARS,ic as DEFAULT_TOOL_RESULT_WARNING_CHARS,oi as DEFERRED_WITHOUT_LOADER_MESSAGE,Ur as DefaultEventService,tr as ENV_REFERENCE_PREFIX,N as EVENT_EMITTER_EVENTS,A as EXECUTION_EVENTS,Ot as EXECUTION_EVENT_PREFIX,Jt as ErrorUtils,Mr as EventEmitterPlugin,gc as EventHistoryModule,P as ExecutionJournalError,bc as ExecutionProxy,I as ExecutionRecoveryError,F as ExecutionSuspendedError,ii as FunctionTool,Pu as GuardrailExecutor,Cr as InMemoryEventEmitterMetrics,br as LocalExecutor,oc as MAX_TOOL_RESULT_CHARS,_e as MODEL_EFFORT_VALUES,wu as MODEL_PRICES,Vt as MessageConverter,p as ModelNotAvailableError,ie as NetworkError,_c as ORCHESTRATION_EVENTS,vc as ORCHESTRATION_EVENT_PREFIX,Xr as ObservableEventService,s as PARAMETER_SCHEMA_KEYWORDS,r as PERMISSIVE_TOOL_SCHEMA_PROFILE,el as PROTECTED_DIRECTORY_NAMES,tl as PROTECTED_FILE_NAMES,Qr as PROVIDER_CALL_EVENTS,$r as PROVIDER_FALLBACK_EVENTS,Tt as PluginCategory,se as PluginError,Et as PluginPriority,h as ProviderError,Qc as RISK_CLASS_POLICY,oe as RateLimitError,rc as Robota,d as RobotaError,Zr as SPAN_EVENTS,ri as SPAN_EVENT_PREFIX,a as STRICT_TOOL_SCHEMA_PROFILE,c as SameToolInputLoopError,pt as SilentLogger,ae as StorageError,Jr as StructuredEventService,f as StructuredOutputError,Ji as TASK_EVENTS,Yi as TASK_EVENT_PREFIX,ti as TOOL_BODY_EVENTS,j as TOOL_EVENTS,kt as TOOL_EVENT_PREFIX,ni as TOOL_PERMISSION_EVENTS,n as TOOL_SCHEMA_PROJECTION_MAX_DEPTH,e as TOOL_SCHEMA_PROJECTION_MAX_NODES,Pe as TOOL_SEARCH_TOOL_NAME,Cc as TRUST_TO_MODE,u as ToolExecutionError,Pr as ToolRegistry,lc as ToolResultAdmissionError,fe as TypeUtils,$c as UNCLASSIFIED_TOOL_FALLBACK,Xi as USER_EVENTS,Zi as USER_EVENT_PREFIX,_ as UnsupportedShellError,l as ValidationError,Ht as Validator,hc as admitToolResult,Su as allowRulesForAutoMode,du as applyPresetToolLists,me as assertProviderNativeWebToolsAvailable,li as assertResidentToolRemains,Yr as bindEventServiceOwner,U as bindWithOwnerPath,w as buildTraceparent,Du as calculateModelCost,Cn as callJournaledProvider,tt as chatEntryToMessage,yn as classifyProviderFailure,Vl as clearRegisteredToolProfiles,t as closeObjectSchemas,Io as collectAssistantUsageMetadata,Kr as composeEventName,Re as confirmAction,fr as createAssistantMessage,ne as createBoundedOutput,pe as createDefaultProviderCapabilities,xc as createExecutionProxy,$n as createImageProviderFromDefinition,D as createLogger,ye as createModelEffortOutcome,sr as createProviderFromConfig,Xn as createRecordEnvResolver,pr as createSystemMessage,mr as createToolMessage,dr as createUserMessage,er as createVideoProviderFromDefinition,ue as decodeHookVerdict,Ou as estimateBlendedCostPer1000,Ei as estimateContextTokensFromMessages,wi as estimateSerializedContextTokens,Ti as estimateToolSchemaTokens,ru as evaluatePermission,An as extractEnumValues,cu as findInvalidPermissionPatterns,Ne as findMediaProviderDefinition,Ii as findModelDefinition,lu as findPermissionPatternWarnings,we as findProviderDefinition,rr as formatEnvReference,Te as formatSupportedProviderTypes,Vi as formatTokenCount,qr as generateSpanId,vt as getGlobalLogLevel,bt as getGlobalLoggerSink,rt as getMessagesForAPI,Li as getModelContextWindow,zi as getModelMaxOutput,Bi as getModelName,Ce as getProviderCapabilities,Ee as getProviderCredentialRequirement,Mn as getSchemaTypeName,We as getToolEstimatedDuration,Ge as getToolExecutionSteps,Hl as getToolPermissionProfile,ar as hasUsableSecretReference,jn as hasValidationConstraints,i as hashToolSchema,zt as isAbortFailure,at as isAssistantMessage,xu as isBroadExecutionAllowRule,et as isChatEntry,He as isConfirmed,Gr as isDefaultEventService,Ru as isEnforcing,nr as isEnvReference,L as isExecutionControlError,Ae as isImageGenerationProvider,Me as isMediaProviderDefinition,ee as isMintedSpanId,ve as isModelEffort,Ue as isProgressReportingTool,il as isProtectedPath,Rl as isReadOnlyCommandLine,Vs as isRegistryTransactionError,ot as isSystemMessage,Kl as isToolDeniedOutright,st as isToolMessage,it as isUserMessage,je as isVideoGenerationProvider,Bs as lifecycleOf,O as logger,Eu as lookupModelPrice,Yl as matchesAnyPattern,nt as messageToHistoryEntry,Oe as modelDeclaresCapability,Be as multiSelectAction,or as normalizeProviderConfig,Hn as normalizeStructuredOutput,x as outboundTraceContextFor,Wl as parseParameterRule,Kn as parseStructuredResponseText,Vo as peerDriverOf,Ho as printablePeerDriver,Yn as processEnvResolver,iu as projectPermissionPolicy,o as projectToolSchema,m as providerCallSpanId,ei as readModelFallbackNotice,cn as readProviderFailureDetails,gi as readTokenUsageFromMessage,_i as readTokenUsageFromMetadata,Pi as registerModelMetadata,Bl as registerToolPermissionProfile,fl as removesCriticalPath,eu as requiresFreshApproval,ir as resolveEnvReference,Qn as resolveMediaProviderConfig,De as resolveModelCapabilities,ke as resolveModelCapability,Se as resolveModelEffort,v as resolvePlatformShell,Jn as resolveStructuredOutputCapability,Mu as runHooks,Hs as runRegistryTransaction,on as scrubSecrets,ze as selectAction,_t as setGlobalLogLevel,yt as setGlobalLoggerSink,Ke as setToolProgressCallback,Sr as shellArgumentForDisplay,T as spanIdFromMintedId,Ec as splitCommandSegments,bn as startPeriodicTask,xn as stopPeriodicTask,te as subprocessTraceEnvironment,Po as sumHistoryUsage,No as sumMessagesUsage,Ve as textAction,pn as toProviderError,Ul as toolNameMatches,uu as toolNamesToPatterns,g as toolTraceContextFor,S as traceEnvFor,re as traceHeadersFor,V as validateAgainstJsonSchema,Ut as validateAgentConfig,qt as validateApiKey,Kt as validateModelName,su as validatePermissionPattern,Gt as validateProviderName,Wt as validateUserInput,Mo as verifiedProviderCallUsage,uc as wasToolResultAdmitted,Sc as withEventEmission,Nn as zodToJsonSchema};
|
|
14
14
|
//# sourceMappingURL=index.js.map
|