@robota-sdk/agent-core 3.0.0-beta.101 → 3.0.0-beta.106
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 +16 -0
- package/dist/browser/index.d.ts +12 -7
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +10 -10
- package/dist/browser/index.js.map +1 -1
- package/dist/node/{index-KukO8qT-.d.ts → index-BHWuBVuS.d.ts} +13 -8
- package/dist/node/index-BHWuBVuS.d.ts.map +1 -0
- package/dist/node/{index-CU-S1l2D.d.cts → index-DTZWUDgg.d.cts} +13 -8
- package/dist/node/index-DTZWUDgg.d.cts.map +1 -0
- package/dist/node/index.cjs +10 -10
- package/dist/node/index.d.cts +1 -1
- package/dist/node/index.d.ts +1 -1
- package/dist/node/index.js +12 -12
- package/dist/node/index.js.map +1 -1
- package/dist/node/node.d.cts.map +1 -1
- package/dist/node/node.d.ts.map +1 -1
- package/dist/node/node.js.map +1 -1
- package/dist/node/testing/index.d.cts +1 -1
- package/dist/node/testing/index.d.ts +1 -1
- package/package.json +3 -3
- package/dist/node/index-CU-S1l2D.d.cts.map +0 -1
- package/dist/node/index-KukO8qT-.d.ts.map +0 -1
package/dist/browser/index.js
CHANGED
|
@@ -1,15 +1,15 @@
|
|
|
1
|
-
import{C as e,D as t,E as n,O as r,S as i,T as a,_ as o,a as s,b as c,c as l,d as u,f as d,g as f,h as p,i as m,l as h,m as g,n as _,o as v,p as y,r as b,s as x,t as S,u as ee,v as C,w as te,x as w,y as T}from"./bounded-output-BdWv9SX3.js";import{n as ne,r as re,t as ie}from"./verdict-decoder-Dz_rjoIZ.js";import ae from"jssha";const oe={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>oe.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>oe.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date||oe.isPrimitive(e)||oe.isArray(e)||oe.isObject(e)};function se(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 ce(e,t,n){n?.webSearch===!0&&le(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&le(e,`web fetch`,t.nativeWebTools.webFetch)}function le(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${ue(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${ue(n.reason)}`)}function ue(e){return e?` ${e}`:``}const de=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function fe(e){return typeof e==`string`&&de.includes(e)}function pe(e,t){return{resolution:e,...t}}const me=new Map(de.map((e,t)=>[e,t]));function he(e,t){return{selection:e,effective:null,disposition:`not-applied`,fingerprint:`${t}|${e}|not-applied`}}function ge(e,t,n){let r=e?.models[t];if(!r)return he(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`)}:he(n,t);if(r.supportedEfforts.includes(n))return{selection:n,effective:n,disposition:`exact`,fingerprint:i(n,`exact`)};let a=me.get(n),o=r.supportedEfforts.filter(e=>(me.get(e)??1/0)<(a??-1)).at(-1);return o?{selection:n,effective:o,disposition:`clamped`,fingerprint:i(o,`clamped`)}:he(n,t)}function _e(e){let t=typeof e.supportsTools==`function`&&e.supportsTools();return e.getCapabilities?.()??se(t)}function ve(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function ye(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 be(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function xe(e,t){if(e)return e.deviations?.[t]?.capabilities??e.vendorDefault}function Se(e,t,n){let r=xe(e,t);if(!(!r||r.length===0))return r.includes(n)}function Ce(e,t,n,r){return Se(e,t,n)??r}function we(e){return`generateImage`in e&&typeof e.generateImage==`function`}function Te(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function Ee(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 De(e,t){return e.find(e=>e.type===t)}const Oe=`ToolSearch`,ke=`yes`,Ae=`no`,je=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function Me(e,t,n){return{id:e,title:t,description:n?.description,options:je,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function Ne(e,t,n,r){return{id:e,title:t,options:n,maxSelect:1,description:r?.description,allowFreeText:r?.allowFreeText,maxVisible:r?.maxVisible,default:r?.default}}function Pe(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 Fe(e,t,n){return{id:e,title:t,allowFreeText:!0,description:n?.description,masked:n?.masked,allowEmpty:n?.allowEmpty,placeholder:n?.placeholder,default:n?.default}}function Ie(e){return e.type===`answer`&&e.values.includes(`yes`)}function Le(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function Re(e,t){if(Le(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function ze(e,t){if(Le(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function Be(e,t){return Le(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}function Ve(e){if(e)return Object.freeze({sourceId:e.sourceId,component:e.component,origin:e.origin,...e.version===void 0?{}:{version:e.version},...e.protocolVersion===void 0?{}:{protocolVersion:e.protocolVersion},...e.generation===void 0?{}:{generation:e.generation}})}function He(e,t){let{toolProvenance:n,...r}=e.metadata??{};if(!t)return n===void 0?e:{...e,metadata:r};let i=JSON.stringify(t),a=`Tool source (attribution only, not authority): ${i}`,o=e.parts??[];return{...e,metadata:{...r,toolProvenance:i},parts:o[0]?.type===`text`&&o[0].text===a?o:[{type:`text`,text:a},...o]}}var Ue=class{history=[];isInitialized=!1;config;async configure(e){this.config=e,await this.ensureInitialized()}getHistory(){return[...this.history]}clearHistory(){this.history=[]}addMessage(e){this.history.push(e)}validateInput(e){if(!e||typeof e!=`string`)throw Error(`Input must be a non-empty string`)}async ensureInitialized(){this.isInitialized||=(await this.initialize(),!0)}async dispose(){this.clearHistory(),this.isInitialized=!1}},We=class{initialized=!1;disposed=!1;initializationPromise;disposalPromise;constructor(e={}){this.initialized=e.readyOnConstruction===!0}async initialize(){for(;this.disposalPromise;)await this.disposalPromise;this.initialized||(this.initializationPromise??=Promise.resolve().then(()=>this.doInitialize()).then(()=>{this.disposalPromise||(this.initialized=!0,this.disposed=!1)}).finally(()=>{this.initializationPromise=void 0}),await this.initializationPromise)}async dispose(){if(this.disposalPromise)return this.disposalPromise;this.initialized=!1,this.disposed=!0;let e=()=>this.doDispose();this.disposalPromise=(this.initializationPromise??Promise.resolve()).then(e,e).finally(()=>{this.initialized=!1,this.disposed=!0,this.disposalPromise=void 0}),await this.disposalPromise}isInitialized(){return this.initialized}ensureInitialized(){if(this.disposed)throw Error(`${this.constructor.name} was disposed — re-initialize it before use, or build a new one`);if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function Ge(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 Ke(e){if(e){if(!Array.isArray(e))throw Error(`Tools must be an array`);for(let t of e){if(!t.name||typeof t.name!=`string`)throw Error(`Tool must have a valid name`);if(!t.description||typeof t.description!=`string`)throw Error(`Tool must have a valid description`);if(!t.parameters||typeof t.parameters!=`object`||t.parameters===null||Array.isArray(t.parameters))throw Error(`Tool must have valid parameters`)}}}async function qe(e,t,n,r){if(!e)throw Error(`Executor is required for ${t} provider. Configure an executor or use direct execution path.`);if(!r?.model)throw Error(`Model is required for executor execution in ${t} provider.`);return await e.executeChat({messages:n,options:r,provider:t,model:r.model,...r.tools&&{tools:r.tools}})}async function*Je(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*Ye(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*Je(t,n,r,i)}function Xe(e){return e.category===`chat`}function Ze(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 Qe(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function $e(e){return e.filter(Xe).map(Ze)}function et(e){return e.role===`user`}function tt(e){return e.role===`assistant`}function nt(e){return e.role===`system`}function rt(e){return e.role===`tool`}function it(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:ge(t?.(),s.model,s.effort)}}function at(e,t,n){if(t)return;let r=e.effortResolution,i=e.onModelEffortOutcome;if(r===void 0||i===void 0)return;let a=pe(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 ot(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 st(e,t,n){let r,i=it(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=at(i,e.effortTable!==void 0,t),ot(e.name,i,r),{content:a.content??null,toolCalls:tt(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*ct(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=it(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:tt(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=at(i,e.effortTable!==void 0,t),ot(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const lt={type:`null`};function ut(e){return e.type===`null`||Array.isArray(e.anyOf)&&e.anyOf.some(e=>typeof e==`object`&&!!e&&e.type===`null`)}function dt(e){if(typeof e!=`object`||!e||Array.isArray(e))return e;let t=e;return ut(t)?t:Array.isArray(t.anyOf)?{...t,anyOf:[...t.anyOf,lt]}:{anyOf:[t,lt]}}function ft(e,t={}){return pt(e,t,``)}function pt(e,t,n){if(Array.isArray(e))return e.map((e,r)=>pt(e,t,`${n}/${r}`));if(typeof e!=`object`||!e)return e;let r=e,i={...r},a=r.type===`object`,o=r.properties&&typeof r.properties==`object`?r.properties:void 0;if(o){let e=new Set(Array.isArray(r.required)?r.required.map(String):[]);i.properties=Object.fromEntries(Object.entries(o).map(([r,i])=>{let a=`${n}/properties/${r}`,o=pt(i,t,a),s=e.has(r);if(t.requireAllProperties===!0&&!s&&t.onChange?.({path:a,kind:`required-added`}),!(t.requireAllProperties===!0&&t.optionalAsNullable===!0&&!s))return[r,o];let c=typeof o==`object`&&o&&!Array.isArray(o)?ut(o):!1,l=dt(o);return c||t.onChange?.({path:a,kind:`nullable-added`}),[r,l]})),t.requireAllProperties===!0&&(i.required=Object.keys(o))}return r.items&&typeof r.items==`object`&&(i.items=pt(r.items,t,`${n}/items`)),Array.isArray(r.anyOf)&&(i.anyOf=r.anyOf.map((e,r)=>pt(e,t,`${n}/anyOf/${r}`))),r.additionalProperties&&typeof r.additionalProperties==`object`?i.additionalProperties=pt(r.additionalProperties,t,`${n}/additionalProperties`):a&&(r.additionalProperties!==!1&&t.onChange?.({path:n,kind:`closed-object`}),i.additionalProperties=!1),i}const mt=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),ht=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);function E(e,t){return e>>>t|e<<32-t}function gt(e){let t=new TextEncoder().encode(e),n=Math.ceil((t.length+9)/64)*64,r=new Uint8Array(n);r.set(t),r[t.length]=128;let i=new DataView(r.buffer),a=BigInt(t.length)*8n;i.setUint32(n-8,Number(a>>32n&4294967295n)),i.setUint32(n-4,Number(a&4294967295n));let o=new Uint32Array(ht),s=new Uint32Array(64);for(let e=0;e<n;e+=64){for(let t=0;t<16;t+=1)s[t]=i.getUint32(e+t*4);for(let e=16;e<64;e+=1){let t=s[e-15]??0,n=s[e-2]??0,r=E(t,7)^E(t,18)^t>>>3,i=E(n,17)^E(n,19)^n>>>10;s[e]=(s[e-16]??0)+r+(s[e-7]??0)+i>>>0}let t=o[0]??0,n=o[1]??0,r=o[2]??0,a=o[3]??0,c=o[4]??0,l=o[5]??0,u=o[6]??0,d=o[7]??0;for(let e=0;e<64;e+=1){let i=E(c,6)^E(c,11)^E(c,25),o=c&l^~c&u,f=d+i+o+(mt[e]??0)+(s[e]??0)>>>0,p=(E(t,2)^E(t,13)^E(t,22))+(t&n^t&r^n&r)>>>0;d=u,u=l,l=c,c=a+f>>>0,a=r,r=n,n=t,t=f+p>>>0}o[0]=(o[0]??0)+t>>>0,o[1]=(o[1]??0)+n>>>0,o[2]=(o[2]??0)+r>>>0,o[3]=(o[3]??0)+a>>>0,o[4]=(o[4]??0)+c>>>0,o[5]=(o[5]??0)+l>>>0,o[6]=(o[6]??0)+u>>>0,o[7]=(o[7]??0)+d>>>0}return[...o].map(e=>e.toString(16).padStart(8,`0`)).join(``)}const _t=32,vt=2e3,yt=Object.keys({type:!0,description:!0,enum:!0,items:!0,properties:!0,required:!0,anyOf:!0,additionalProperties:!0,minimum:!0,maximum:!0,pattern:!0,format:!0,default:!0}),bt=new Set(yt),xt=new Set([`__proto__`,`constructor`,`prototype`]),St=new Set([`title`,`$schema`,`$comment`,`examples`,`default`]);function Ct(){return{anyOf:[{type:`string`},{type:`number`},{type:`boolean`},{type:`object`},{type:`array`},{type:`null`}]}}const wt={closedObjects:!1,requireAllProperties:!1,optionalAsNullable:!1,unknownKeywords:`adopt`,unsupportedMembers:[],maxDepth:32,maxNodes:vt},Tt={closedObjects:!0,requireAllProperties:!0,optionalAsNullable:!0,unknownKeywords:`strip`,unsupportedMembers:[],maxDepth:32,maxNodes:vt};function D(e,t){return`${e}/${t}`}function Et(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Dt(e,t,n,r,i,a){if(!Et(e))return;if(r.has(e))return{path:t,keyword:`cycle`,reason:`object graph revisits a node on its own ancestor chain (cycle)`};if(r.add(e),n>a.maxDepth)return{path:t,keyword:`maxDepth`,reason:`nesting depth exceeds maxDepth (${a.maxDepth})`};if(i.count+=1,i.count>a.maxNodes)return{path:t,keyword:`maxNodes`,reason:`node count exceeds maxNodes (${a.maxNodes})`};if(a.unknownKeywords===`reject`){for(let n of Object.keys(e))if(!bt.has(n))return{path:t,keyword:n,reason:`unknown keyword '${n}' is outside the IParameterSchema member set`}}let o=typeof e.type==`string`,s=Array.isArray(e.anyOf);if(o&&s)return{path:t,keyword:`anyOf`,reason:`a node must declare exactly one of 'type' or 'anyOf', not both`};if(!o&&!s&&!Object.keys(e).some(e=>!bt.has(e)))return{path:t,keyword:`type`,reason:`a node must declare exactly one of 'type' or 'anyOf'`};let c=e.properties;if(Et(c)){for(let e of Object.keys(c))if(xt.has(e))return{path:D(D(t,`properties`),e),keyword:e,reason:`property name '${e}' is a prototype key`};for(let e of Object.keys(c)){let o=Dt(c[e],D(D(t,`properties`),e),n+1,r,i,a);if(o)return o}}if(Et(e.items)){let o=Dt(e.items,D(t,`items`),n+1,r,i,a);if(o)return o}if(Array.isArray(e.anyOf))for(let o=0;o<e.anyOf.length;o+=1){let s=Dt(e.anyOf[o],D(D(t,`anyOf`),String(o)),n+1,r,i,a);if(s)return s}r.delete(e)}function Ot(e,t,n,r){let i={...e};for(let e of n.unsupportedMembers){let n=e;n in i&&(delete i[n],r.push({path:t,kind:`member-stripped`,keyword:n}))}if(n.unknownKeywords===`strip`){let e=Object.keys(i).filter(e=>!bt.has(e));for(let t of e)delete i[t];let n=typeof i.type==`string`,a=Array.isArray(i.anyOf);if(e.length>0&&!n&&!a){for(let n of e)r.push({path:t,kind:`keyword-replaced`,keyword:n});let n=Ct();for(let e of Object.keys(i))e===`description`?n.description=i.description:r.push({path:t,kind:`member-stripped`,keyword:e});return n}for(let n of e)r.push({path:t,kind:`keyword-stripped`,keyword:n})}let a=i.properties;return Et(a)&&(i.properties=Object.fromEntries(Object.keys(a).map(e=>{let i=a[e];return[e,Et(i)?Ot(i,D(D(t,`properties`),e),n,r):i]}))),Et(i.items)&&(i.items=Ot(i.items,D(t,`items`),n,r)),Array.isArray(i.anyOf)&&(i.anyOf=i.anyOf.map((e,i)=>Et(e)?Ot(e,D(D(t,`anyOf`),String(i)),n,r):e)),i}function kt(e){if(Array.isArray(e))return e.map(kt);if(Et(e)){let t={};for(let n of Object.keys(e).sort())t[n]=kt(e[n]);return t}return e}function At(e){return gt(JSON.stringify(kt(e)))}function jt(e,t){let n=e.parameters;if(!Et(n)||n.type!==`object`)return{outcome:`rejected`,tool:e,changes:[],rejection:{path:``,keyword:`type`,reason:`the parameters root must declare type: 'object' — no documented provider accepts another root`}};let r=Dt(n,``,0,new Set,{count:0},t);if(r)return{outcome:`rejected`,tool:e,changes:[],rejection:r};let i=[],a=Ot(n,``,t,i),o=t.closedObjects?ft(a,{requireAllProperties:t.requireAllProperties,optionalAsNullable:t.optionalAsNullable,onChange:e=>i.push(e)}):a;if(i.length===0)return{outcome:`adopted`,tool:e,changes:[]};let s=i.filter(e=>(e.kind===`keyword-stripped`||e.kind===`keyword-replaced`||e.kind===`member-stripped`)&&!St.has(e.keyword??``)),c=s.length===0?e.description:`${e.description}\n\nSchema note: ${s.length} constraint(s) not shown to ${t.providerName}: ${s.map(e=>`${e.kind}@${e.path}`).join(`, `)}`;return{outcome:`adapted`,tool:{...e,parameters:o,description:c},changes:i}}const Mt={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var Nt=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}},Pt=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??Nt.getInstance().getGlobalSink()??Mt}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),Ft(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),Ft(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),Ft(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),Ft(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||Nt.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 Ft(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function O(e,t={}){return new Pt(e,t)}function It(e){Nt.getInstance().setGlobalLevel(e)}function Lt(){return Nt.getInstance().getGlobalLevel()}function Rt(e){Nt.getInstance().setGlobalSink(e)}function zt(){return Nt.getInstance().getGlobalSink()}const k=O(`agents`),Bt=O(`ToolSchemaProjection`);var Vt=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=Mt){this.logger=e}async configure(e){this.config=e,this.hasExecutor(e)&&e.executor&&(this.executor=e.executor)}hasExecutor(e){return typeof e==`object`&&!!e&&`executor`in e}async*streamWithAbort(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await Ht(n,t);if(e.done||(await Ut(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return st(this,this.logger,e)}async*generateStreamingResponse(e){yield*ct(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return se(this.supportsTools())}validateConfig(){return!0}validateMessages(e){Ge(e)}validateTools(e){Ke(e)}projectionProfile(){}projectTools(e,t){let n=this.projectionProfile();if(!n||!e)return e;let r=[];for(let i of e){let e=jt(i,n);if(e.outcome!==`rejected`){r.push(e.tool);continue}let a=`${this.name}${t}${i.name}${At(i.parameters)}`;if(this.quarantinedToolSchemas.has(a))continue;this.quarantinedToolSchemas.set(a,!0);let{path:o,keyword:s,reason:c}=e.rejection??{path:``,keyword:``,reason:`rejected`};Bt.warn(`tool_schema_quarantined provider=${this.name} model=${t} tool=${i.name} path=${o} keyword=${s} reason=${c}`)}return r}validateNativeWebTools(e){ce(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return qe(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*Ye(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Ht(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 Ut(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}({}),Gt=function(e){return e[e.CRITICAL=1e3]=`CRITICAL`,e[e.HIGH=800]=`HIGH`,e[e.NORMAL=500]=`NORMAL`,e[e.LOW=200]=`LOW`,e[e.MINIMAL=100]=`MINIMAL`,e}({});const A={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},Kt=`agent`,j={START:`start`,COMPLETE:`complete`,ERROR:`error`,ASSISTANT_MESSAGE_START:`assistant_message_start`,ASSISTANT_MESSAGE_COMPLETE:`assistant_message_complete`,USER_MESSAGE:`user_message`,TOOL_RESULTS_TO_LLM:`tool_results_to_llm`,TOOL_RESULTS_READY:`tool_results_ready`},qt=`execution`,M={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},Jt=`tool`,Yt=`unknown_tool`,Xt=`argument_decode_error`,Zt=`tool_call_skipped`,N=(e,t)=>`${e}.${t}`,Qt={START:N(qt,j.START),COMPLETE:N(qt,j.COMPLETE),ERROR:N(qt,j.ERROR)},$t={CALL_START:N(Jt,M.CALL_START),CALL_COMPLETE:N(Jt,M.CALL_COMPLETE),CALL_ERROR:N(Jt,M.CALL_ERROR)},en={EXECUTION_START:N(Kt,A.EXECUTION_START),EXECUTION_COMPLETE:N(Kt,A.EXECUTION_COMPLETE),EXECUTION_ERROR:N(Kt,A.EXECUTION_ERROR),CREATED:N(Kt,A.CREATED)},P={EXECUTION_START:Qt.START,EXECUTION_COMPLETE:Qt.COMPLETE,EXECUTION_ERROR:Qt.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:$t.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:en.EXECUTION_START,AGENT_EXECUTION_COMPLETE:en.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:en.EXECUTION_ERROR,AGENT_CREATED:en.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 tn=class{enabled=!0;category=`custom`;priority=Gt.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=O(`AbstractPlugin`);stats={calls:0,errors:0,moduleEventsReceived:0,lastActivity:void 0};async initialize(e){this.options=e,e&&`enabled`in e&&typeof e.enabled==`boolean`?this.enabled=e.enabled:this.enabled=!0,e?.category&&(this.category=e.category),e?.priority!==void 0&&(this.priority=(e.priority,e.priority))}async subscribeToModuleEvents(e){if(this.eventEmitter=e,!this.options)return;let t=[];this.options.subscribeToAllModuleEvents&&t.push(P.MODULE_INITIALIZE_START,P.MODULE_INITIALIZE_COMPLETE,P.MODULE_INITIALIZE_ERROR,P.MODULE_EXECUTION_START,P.MODULE_EXECUTION_COMPLETE,P.MODULE_EXECUTION_ERROR,P.MODULE_DISPOSE_START,P.MODULE_DISPOSE_COMPLETE,P.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let e of t){let t=this.eventEmitter.on(e,async t=>{try{this.stats.moduleEventsReceived++,this.stats.lastActivity=new Date,await this.onModuleEvent?.(e,t)}catch(t){this.stats.errors++;let n=t instanceof Error?t:Error(String(t));this.pluginLogger.error(`Plugin "${this.name}" failed to handle module event "${String(e)}"`,{plugin:this.name,eventType:String(e),error:n.message})}}),n=this.eventHandlers.get(e);n?n.push(t):this.eventHandlers.set(e,[t]),this.subscribedEvents.push(e)}}async unsubscribeFromModuleEvents(e){for(let[t,n]of this.eventHandlers.entries())for(let r of n)e.off(t,r);this.eventHandlers.clear(),this.subscribedEvents=[],this.eventEmitter=void 0}async dispose(){this.eventEmitter&&await this.unsubscribeFromModuleEvents(this.eventEmitter)}enable(){this.enabled=!0}disable(){this.enabled=!1}isEnabled(){return this.enabled}getConfig(){return{}}updateConfig(e){}getData(){return{name:this.name,version:this.version,enabled:this.enabled,category:this.category,priority:this.priority,subscribedEvents:[...this.subscribedEvents],metadata:{moduleEventsReceived:this.stats.moduleEventsReceived,totalCalls:this.stats.calls,totalErrors:this.stats.errors}}}getStatus(){return{name:this.name,version:this.version,enabled:this.enabled,initialized:!0,category:this.category,priority:this.priority,subscribedEventsCount:this.subscribedEvents.length,hasEventEmitter:!!this.eventEmitter}}getStats(){return{enabled:this.enabled,calls:this.stats.calls,errors:this.stats.errors,moduleEventsReceived:this.stats.moduleEventsReceived,...this.stats.lastActivity&&{lastActivity:this.stats.lastActivity}}}updateCallStats(){this.stats.calls++,this.stats.lastActivity=new Date}updateErrorStats(){this.stats.errors++,this.stats.lastActivity=new Date}},nn=class{logger;constructor(e=Mt){this.logger=e}supportsTools(){return!1}validateConfig(){return!0}async dispose(){}async withRetry(e,t=3,n=1e3){let r;for(let i=0;i<=t;i++)try{return await e()}catch(e){r=e instanceof Error?e:Error(String(e)),i<t&&(this.logger.warn?.(`[${this.name}] Attempt ${i+1} failed, retrying in ${n}ms`,{error:r.message,attempt:i+1,maxRetries:t}),await this.delay(n))}throw r}withTimeout(e,t){let n;return Promise.race([e.then(e=>(clearTimeout(n),e)),new Promise((e,r)=>{n=setTimeout(()=>r(Error(`Operation timed out after ${t}ms`)),t)})])}delay(e){return new Promise(t=>setTimeout(t,e))}logDebug(e,t){this.logger.debug?.(`[${this.name}] ${e}`,t)}logError(e,t,n){this.logger.error?.(`[${this.name}] ${e}`,{error:t.message,stack:t.stack,...n})}validateRequest(e){if(!e.messages||e.messages.length===0)throw Error(`Request must include at least one message`);if(!e.provider)throw Error(`Request must specify a provider`);if(!e.model)throw Error(`Request must specify a model`)}validateResponse(e){if(!e.role)throw Error(`Response must have a role`);let t=e.role===`assistant`&&`toolCalls`in e&&Array.isArray(e.toolCalls)&&e.toolCalls.length>0;if(!e.content&&!t)throw Error(`Response must have content or tool calls`)}},rn=class{provenance;logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??Mt}setEventService(e){this.eventService=e}getEventService(){return this.eventService}emitEvent(e,t){this.eventService&&this.eventService.emit(e,t)}async execute(e,t){return await this.executeImpl(e,t)}validate(e){return(this.schema.parameters.required||[]).every(t=>t in e)}validateParameters(e){let t=this.schema.parameters.required||[],n=[],r=e;for(let e of t)e in r||n.push(`Missing required parameter: ${e}`);return{isValid:n.length===0,errors:n}}getDescription(){return this.schema.description}getName(){return this.schema.name}};function an(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function on(e,t){if(t?.aborted===!0)return!0;if(!an(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return an(n)&&n.name===`AbortError`}function sn(e=`aborted`,t){let n=t===void 0?Error(e):Error(e,{cause:t});return n.name=`AbortError`,n}var cn=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`)}},ln=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 un=ln.validateAgentConfig,dn=ln.validateUserInput,fn=ln.validateProviderName,pn=ln.validateModelName,mn=ln.validateApiKey;var hn=class{static isRecoverable(e){return e instanceof y&&e.recoverable}static getErrorCode(e){return e instanceof y?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof y?e:e instanceof Error?new o(e.message||t):new o(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new i(`Failed to ${n}`,t,r,{operation:n})}},F=class extends Error{code=`EXECUTION_JOURNAL_FAILED`;recordId;kind;constructor(e,t){super(`Execution journal failed at ${e.kind}`,{cause:t}),this.name=`ExecutionJournalError`,this.recordId=e.recordId,this.kind=e.kind}},I=class extends Error{code=`EXECUTION_SUSPENDED`;requests;constructor(e){super(`Execution is waiting for correlated tool responses`),this.name=`ExecutionSuspendedError`,this.requests=structuredClone(e)}},L=class extends Error{code;actionIds;constructor(e,t,n=[]){super(t),this.code=e,this.actionIds=n,this.name=`ExecutionRecoveryError`}};function R(e){return e instanceof F||e instanceof L||e instanceof I}function gn(e,t){return e instanceof F?e:t instanceof F?t:e instanceof L?e:t instanceof L?t:e instanceof I&&t instanceof I?new I([...new Map([...e.requests,...t.requests].map(e=>[e.requestId,e])).values()]):e instanceof I?e:t}const _n=new Set([`rate_limit_error`]),vn=new Set([`overloaded_error`]),yn=new Set([`authentication_error`,`permission_error`]),bn=new Set([`model_not_found`]),xn=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),Sn=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]),Cn=[/\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 wn(e){return Cn.some(t=>t.test(e))}const Tn=`[^\\s,;)"]+`;function En(e){return e.replace(RegExp(`\\bauthorization(")?\\s*[:=]\\s*(")?(?:(?:bearer|basic)\\s+)?${Tn}`,`gi`),`Authorization$1: $2[REDACTED]`).replace(RegExp(`\\bbearer\\s+${Tn}`,`gi`),`Bearer [REDACTED]`).replace(RegExp(`\\b(api[-_]?key)(")?\\s*[:=]\\s*(")?${Tn}`,`gi`),`$1$2: $3[REDACTED]`).replace(RegExp(`\\bkey=${Tn}`,`gi`),`key=[REDACTED]`).replace(/\bsk-[A-Za-z0-9_-]{8,}/gi,`[REDACTED]`).replace(/\bAIza[0-9A-Za-z_-]{35}\b/g,`[REDACTED]`)}function z(e){return typeof e==`object`&&e?e:void 0}function Dn(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function On(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=Dn(r,`type`),o=Dn(t,`type`)??Dn(i,`type`)??(a===`error`?void 0:a)??(n!==void 0&&!(e instanceof y)?Dn(t,`code`):void 0);return{...n!==void 0&&{status:n},...o!==void 0&&{type:o}}}function kn(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 An(e){return on(e)||kn(e)===`APIUserAbortError`}function jn(e){let t=z(e)?.headers,n=t instanceof Headers?t.get(`retry-after`):z(t)?.[`retry-after`]??z(t)?.[`Retry-After`];if(n==null||n.trim().length===0)return;let r=Number(n);if(Number.isFinite(r))return Math.max(0,r);let i=Date.parse(n);return Number.isNaN(i)?void 0:Math.max(0,Math.round((i-Date.now())/1e3))}function Mn(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 Nn(t,n,r){if(t instanceof y||An(t))return t;let a=t instanceof Error?t:Error(typeof t==`string`?t:``),o=On(t),s=En(a.message||`request failed`),l=Mn(o);if(o.status===429||o.type!==void 0&&_n.has(o.type))return new e(s||`${n} rate limit exceeded.`,jn(t),n,l);if(o.status===401||o.status===403||o.type!==void 0&&yn.has(o.type))return new g(s,n,l);let u=o.status===void 0||o.status===400||o.status===404,d=Ln(t)||o.type!==void 0&&bn.has(o.type)||wn(s);return u&&d?new T(void 0,n,void 0,{...l,originalMessage:s}):Pn(t)?new c(s,a,l,n):new i(`${r}: ${s}`,n,a,void 0,o)}function Pn(e){if(e instanceof c)return!0;let t=z(e);if(t===void 0)return!1;let n=Dn(t,`code`);if(n!==void 0&&xn.has(n))return!0;let r=kn(e);if(r!==void 0&&Sn.has(r))return!0;let i=Dn(t,`name`);return i!==void 0&&Sn.has(i)?!0:i===`TypeError`&&Dn(t,`message`)===`fetch failed`}function Fn(e){let t=[],n=new Set,r=[e];for(let e=0;e<=8&&r.length>0;e++){let e=[];for(let i of r){if(i==null||n.has(i))continue;n.add(i),t.push(i);let r=z(i);r!==void 0&&e.push(r.originalError,r.cause)}r=e}return t}const B=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function In(e){return e instanceof i?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:On(e)}function Ln(e){if(e instanceof y)return!1;let t=Dn(z(e),`code`);return t!==void 0&&bn.has(t)}function Rn(t){if(t instanceof e)return B(!1,`rate-limit`);if(t instanceof g)return B(!1,`authentication`);if(t instanceof T)return B(!0,`model-unavailable`);let{status:n,type:r}=In(t);return n===429||r!==void 0&&_n.has(r)?B(!1,`rate-limit`):n===401||n===403||r!==void 0&&yn.has(r)?B(!1,`authentication`):n===402?B(!1,`billing`):(n===void 0||n===400||n===404)&&(Ln(t)||r!==void 0&&bn.has(r))?B(!0,`model-unavailable`):Pn(t)?B(!1,`network`):n===529||r!==void 0&&vn.has(r)?B(!0,`overloaded`):n===503?B(!0,`service-unavailable`):n===500||n===502||n===504?B(!0,`server-error`):n===404?{kind:`tentative`,classification:{switchable:!0,reason:`model-unavailable`}}:n===400||n===413?{kind:`tentative`,classification:{switchable:!1,reason:`invalid-request`}}:{kind:`none`}}function zn(e,t){let n=Fn(e);if(t?.aborted===!0||n.some(e=>An(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 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 Vn(e){e&&clearInterval(e)}async function V(e,t){try{await e.append(structuredClone(t))}catch(e){throw new F(t,e)}}function Hn(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 Un(e,t,n,r){if(!r)return e(t,n);let{journal:i,executionId:a,callId:o}=r;await V(i,{kind:`model-request`,recordId:`${o}:request`,executionId:a,callId:o,...r.route(),messages:t,options:Hn(n),...r.checkpoint&&{checkpoint:r.checkpoint}}),n.signal?.throwIfAborted();let s;try{s=await e(t,n)}catch(e){throw await V(i,{kind:`model-failure`,recordId:`${o}:failure`,executionId:a,callId:o,...r.route(),error:{name:e instanceof Error?e.name:`Error`,message:e instanceof Error?e.message:String(e)}}),e}return await V(i,{kind:`model-response`,recordId:`${o}:response`,executionId:a,callId:o,...r.route(),response:s}),s}function Wn(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:return}}function Gn(e){let t=Kn(e);return t.typeName===`ZodObject`?t:void 0}function Kn(e){let t=e;for(let e=0;e<=64;e+=1){let e=t.typeName===`ZodEffects`?t.schema:t.typeName===`ZodOptional`||t.typeName===`ZodNullable`||t.typeName===`ZodDefault`?t.innerType:void 0;if(!e)return t;t=qn(e,`${String(t.typeName)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function qn(e,t){let n=e._def;if(!n)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function Jn(e){if(typeof e==`string`)return`string`;if(typeof e==`number`)return`number`;if(typeof e==`boolean`)return`boolean`;if(e===null)return`null`}function Yn(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=qn(n.schema,`ZodEffects inner type`);return n.typeName!==`ZodOptional`&&n.typeName!==`ZodNullable`&&n.typeName!==`ZodDefault`}function Xn(e){let t=qn(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 Zn(e){let t=qn(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function Qn(e){let t=qn(e,`Zod schema`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function $n(e,t={}){let n=qn(e,`Zod schema`),r=Gn(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 er(r,t.allowAdditionalProperties)}function er(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=tr(a,t),Yn(a)&&r.push(e);let a=Wn(e,t);return{type:`object`,properties:n,required:r,...a!==void 0&&{additionalProperties:a}}}function tr(e,t){let n=qn(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:tr(n.type,t),...r};case`ZodObject`:return{...er(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{...rr(n.values),...r};case`ZodDate`:return{type:`string`,format:`date-time`,...r};case`ZodLiteral`:return{...nr(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=>tr(e,t)),...r}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...tr(n.schema,t),...r};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[tr(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{...tr(n.innerType,t),...r};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:tr(n.valueType,t),...r}:{type:`object`,additionalProperties:{type:`string`},...r};default:throw Error(ar(String(n.typeName)))}}function nr(e){let t=Jn(e);if(!t)throw Error(`ZodLiteral value ${String(e)} is not a JSON primitive; cannot convert to JSON schema.`);return t===`null`?{type:`null`}:{type:t,enum:[e]}}function rr(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 ir={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 ar(e){return`${e} cannot be carried by the universal JSON-schema subset: ${ir[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 or(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function sr(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 cr(e){if(or(e))return{name:`structured_output`,jsonSchema:$n(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:sr(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=lr(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function lr(e,t,n){let r=[],i=e.type;if(e.anyOf)return dr(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${fr(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(...lr(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(ur(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(...lr(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${fr(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...lr(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 ${fr(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${fr(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 ${fr(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${fr(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function ur(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function dr(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>lr(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 fr(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function pr(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 mr(e,t){return Se(e,t,`json_schema`)===!0?`response_schema`:Se(e,t,`json_object`)===!0?`json_object`:`none`}function hr(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=mr(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 gr=e=>process.env[e];function _r(e){return t=>e[t]}function vr(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function yr(e,t={},n=gr){let r=e.credentialRequirement,i=t.baseUrl??vr(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=vr(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 br(e,t={},n=gr){if(e.createImageProvider===void 0)return;let r=yr(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return we(t)?t:void 0}catch{return}}function xr(e,t={},n=gr){if(e.createVideoProvider===void 0)return;let r=yr(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return Te(t)?t:void 0}catch{return}}const Sr=`$ENV:`;function Cr(e){return e.startsWith(Sr)}function wr(e){return`${Sr}${e}`}function Tr(e,t=gr){if(!Cr(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function Er(e,t=gr){return e===void 0||e.length===0?!1:Tr(e,t)!==void 0}function Dr(e,t,n=gr){let r=ve(t,e.name)?.defaults??{},i=e.model??r.model;if(!i)throw Error(`Provider ${e.name} requires model`);if(e.apiKeyRef!==void 0&&e.apiKey!==void 0)throw Error(`Provider ${e.name} has conflicting credential origins`);if(e.apiKeyRef!==void 0&&(!e.apiKeyRef.service?.trim()||!e.apiKeyRef.account?.trim()))throw Error(`Provider ${e.name} has an invalid host credential reference`);let a=e.apiKeyRef===void 0?e.apiKey??r.apiKey:void 0,o=a!==void 0&&Cr(a)?a.slice(5).trim():void 0;if(o===``)throw Error(`Provider ${e.name} has an invalid API key environment reference; use $ENV:VARIABLE_NAME`);let s=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:Tr(a,n),...o?{apiKeyEnv:o}:{},...e.apiKeyRef===void 0?{}:{apiKeyRef:e.apiKeyRef},baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...s!==void 0&&{options:s}}}function Or(e,t){if(e.apiKeyRef!==void 0&&!e.apiKey)throw Error(`Provider ${e.name} requires host credential resolution before construction`);let n=ve(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${ye(t)}`);let r=be(n);if(r!==void 0&&!kr(e,r))throw Error(`Provider ${e.name} requires ${jr(r)}`);return n.createProvider(e)}function kr(e,t){return t.anyOf.some(t=>Ar(e,t))}function Ar(e,t){let n=e[t];return n!==void 0&&n.length>0}function jr(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 Mr(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 Nr(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 Fr(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 Ir=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(Qe(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(Mr(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(Nr(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=>Xe(e)&&nt(Ze(e)),i=this.entries.filter(e=>!r(e)),a=Qe(Pr(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(Fr(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(Xe).map(Ze)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(Xe).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(Xe);if(e.length<=this.maxMessages)return;let t=e.map(Ze),n=t.filter(nt),r=t.filter(e=>!nt(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=>!Xe(e)||o.has(e.id))}},Lr=class{history;pendingAssistant=null;constructor(e=0){this.history=new Ir({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 tt(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
|
|
1
|
+
import{C as e,D as t,E as n,O as r,S as i,T as a,_ as o,a as s,b as c,c as l,d as u,f as d,g as f,h as p,i as m,l as h,m as g,n as _,o as v,p as y,r as b,s as x,t as S,u as ee,v as C,w as te,x as w,y as T}from"./bounded-output-BdWv9SX3.js";import{n as ne,r as re,t as ie}from"./verdict-decoder-Dz_rjoIZ.js";import ae from"jssha";const oe={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>oe.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>oe.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date||oe.isPrimitive(e)||oe.isArray(e)||oe.isObject(e)};function se(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 ce(e,t,n){n?.webSearch===!0&&le(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&le(e,`web fetch`,t.nativeWebTools.webFetch)}function le(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${ue(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${ue(n.reason)}`)}function ue(e){return e?` ${e}`:``}const de=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function fe(e){return typeof e==`string`&&de.includes(e)}function pe(e,t){return{resolution:e,...t}}const me=new Map(de.map((e,t)=>[e,t]));function he(e,t){return{selection:e,effective:null,disposition:`not-applied`,fingerprint:`${t}|${e}|not-applied`}}function ge(e,t,n){let r=e?.models[t];if(!r)return he(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`)}:he(n,t);if(r.supportedEfforts.includes(n))return{selection:n,effective:n,disposition:`exact`,fingerprint:i(n,`exact`)};let a=me.get(n),o=r.supportedEfforts.filter(e=>(me.get(e)??1/0)<(a??-1)).at(-1);return o?{selection:n,effective:o,disposition:`clamped`,fingerprint:i(o,`clamped`)}:he(n,t)}function _e(e){let t=typeof e.supportsTools==`function`&&e.supportsTools();return e.getCapabilities?.()??se(t)}function ve(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function ye(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 be(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function xe(e,t){if(e)return e.deviations?.[t]?.capabilities??e.vendorDefault}function Se(e,t,n){let r=xe(e,t);if(!(!r||r.length===0))return r.includes(n)}function Ce(e,t,n,r){return Se(e,t,n)??r}function we(e){return`generateImage`in e&&typeof e.generateImage==`function`}function Te(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function Ee(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 De(e,t){return e.find(e=>e.type===t)}const Oe=`ToolSearch`,ke=`yes`,Ae=`no`,je=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function Me(e,t,n){return{id:e,title:t,description:n?.description,options:je,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function Ne(e,t,n,r){return{id:e,title:t,options:n,maxSelect:1,description:r?.description,allowFreeText:r?.allowFreeText,maxVisible:r?.maxVisible,default:r?.default}}function Pe(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 Fe(e,t,n){return{id:e,title:t,allowFreeText:!0,description:n?.description,masked:n?.masked,allowEmpty:n?.allowEmpty,placeholder:n?.placeholder,default:n?.default}}function Ie(e){return e.type===`answer`&&e.values.includes(`yes`)}function Le(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function Re(e,t){if(Le(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function ze(e,t){if(Le(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function Be(e,t){return Le(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}function Ve(e){if(e)return Object.freeze({sourceId:e.sourceId,component:e.component,origin:e.origin,...e.version===void 0?{}:{version:e.version},...e.protocolVersion===void 0?{}:{protocolVersion:e.protocolVersion},...e.generation===void 0?{}:{generation:e.generation}})}function He(e,t){let{toolProvenance:n,...r}=e.metadata??{};if(!t)return n===void 0?e:{...e,metadata:r};let i=JSON.stringify(t),a=`Tool source (attribution only, not authority): ${i}`,o=e.parts??[];return{...e,metadata:{...r,toolProvenance:i},parts:o[0]?.type===`text`&&o[0].text===a?o:[{type:`text`,text:a},...o]}}var Ue=class{history=[];isInitialized=!1;config;async configure(e){this.config=e,await this.ensureInitialized()}getHistory(){return[...this.history]}clearHistory(){this.history=[]}addMessage(e){this.history.push(e)}validateInput(e){if(!e||typeof e!=`string`)throw Error(`Input must be a non-empty string`)}async ensureInitialized(){this.isInitialized||=(await this.initialize(),!0)}async dispose(){this.clearHistory(),this.isInitialized=!1}},We=class{initialized=!1;disposed=!1;initializationPromise;disposalPromise;constructor(e={}){this.initialized=e.readyOnConstruction===!0}async initialize(){for(;this.disposalPromise;)await this.disposalPromise;this.initialized||(this.initializationPromise??=Promise.resolve().then(()=>this.doInitialize()).then(()=>{this.disposalPromise||(this.initialized=!0,this.disposed=!1)}).finally(()=>{this.initializationPromise=void 0}),await this.initializationPromise)}async dispose(){if(this.disposalPromise)return this.disposalPromise;this.initialized=!1,this.disposed=!0;let e=()=>this.doDispose();this.disposalPromise=(this.initializationPromise??Promise.resolve()).then(e,e).finally(()=>{this.initialized=!1,this.disposed=!0,this.disposalPromise=void 0}),await this.disposalPromise}isInitialized(){return this.initialized}ensureInitialized(){if(this.disposed)throw Error(`${this.constructor.name} was disposed — re-initialize it before use, or build a new one`);if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function Ge(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 Ke(e){if(e){if(!Array.isArray(e))throw Error(`Tools must be an array`);for(let t of e){if(!t.name||typeof t.name!=`string`)throw Error(`Tool must have a valid name`);if(!t.description||typeof t.description!=`string`)throw Error(`Tool must have a valid description`);if(!t.parameters||typeof t.parameters!=`object`||t.parameters===null||Array.isArray(t.parameters))throw Error(`Tool must have valid parameters`)}}}async function qe(e,t,n,r){if(!e)throw Error(`Executor is required for ${t} provider. Configure an executor or use direct execution path.`);if(!r?.model)throw Error(`Model is required for executor execution in ${t} provider.`);return await e.executeChat({messages:n,options:r,provider:t,model:r.model,...r.tools&&{tools:r.tools}})}async function*Je(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*Ye(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*Je(t,n,r,i)}function Xe(e){return e.category===`chat`}function Ze(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 Qe(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function $e(e){return e.filter(Xe).map(Ze)}function et(e){return e.role===`user`}function tt(e){return e.role===`assistant`}function nt(e){return e.role===`system`}function rt(e){return e.role===`tool`}function it(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:ge(t?.(),s.model,s.effort)}}function at(e,t,n){if(t)return;let r=e.effortResolution,i=e.onModelEffortOutcome;if(r===void 0||i===void 0)return;let a=pe(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 ot(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 st(e,t,n){let r,i=it(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=at(i,e.effortTable!==void 0,t),ot(e.name,i,r),{content:a.content??null,toolCalls:tt(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*ct(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=it(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:tt(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=at(i,e.effortTable!==void 0,t),ot(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const lt={type:`null`};function ut(e){return e.type===`null`||Array.isArray(e.anyOf)&&e.anyOf.some(e=>typeof e==`object`&&!!e&&e.type===`null`)}function dt(e){if(typeof e!=`object`||!e||Array.isArray(e))return e;let t=e;return ut(t)?t:Array.isArray(t.anyOf)?{...t,anyOf:[...t.anyOf,lt]}:{anyOf:[t,lt]}}function ft(e,t={}){return pt(e,t,``)}function pt(e,t,n){if(Array.isArray(e))return e.map((e,r)=>pt(e,t,`${n}/${r}`));if(typeof e!=`object`||!e)return e;let r=e,i={...r},a=r.type===`object`,o=r.properties&&typeof r.properties==`object`?r.properties:void 0;if(o){let e=new Set(Array.isArray(r.required)?r.required.map(String):[]);i.properties=Object.fromEntries(Object.entries(o).map(([r,i])=>{let a=`${n}/properties/${r}`,o=pt(i,t,a),s=e.has(r);if(t.requireAllProperties===!0&&!s&&t.onChange?.({path:a,kind:`required-added`}),!(t.requireAllProperties===!0&&t.optionalAsNullable===!0&&!s))return[r,o];let c=typeof o==`object`&&o&&!Array.isArray(o)?ut(o):!1,l=dt(o);return c||t.onChange?.({path:a,kind:`nullable-added`}),[r,l]})),t.requireAllProperties===!0&&(i.required=Object.keys(o))}return r.items&&typeof r.items==`object`&&(i.items=pt(r.items,t,`${n}/items`)),Array.isArray(r.anyOf)&&(i.anyOf=r.anyOf.map((e,r)=>pt(e,t,`${n}/anyOf/${r}`))),r.additionalProperties&&typeof r.additionalProperties==`object`?i.additionalProperties=pt(r.additionalProperties,t,`${n}/additionalProperties`):a&&(r.additionalProperties!==!1&&t.onChange?.({path:n,kind:`closed-object`}),i.additionalProperties=!1),i}const mt=new Uint32Array([1116352408,1899447441,3049323471,3921009573,961987163,1508970993,2453635748,2870763221,3624381080,310598401,607225278,1426881987,1925078388,2162078206,2614888103,3248222580,3835390401,4022224774,264347078,604807628,770255983,1249150122,1555081692,1996064986,2554220882,2821834349,2952996808,3210313671,3336571891,3584528711,113926993,338241895,666307205,773529912,1294757372,1396182291,1695183700,1986661051,2177026350,2456956037,2730485921,2820302411,3259730800,3345764771,3516065817,3600352804,4094571909,275423344,430227734,506948616,659060556,883997877,958139571,1322822218,1537002063,1747873779,1955562222,2024104815,2227730452,2361852424,2428436474,2756734187,3204031479,3329325298]),ht=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);function E(e,t){return e>>>t|e<<32-t}function gt(e){let t=new TextEncoder().encode(e),n=Math.ceil((t.length+9)/64)*64,r=new Uint8Array(n);r.set(t),r[t.length]=128;let i=new DataView(r.buffer),a=BigInt(t.length)*8n;i.setUint32(n-8,Number(a>>32n&4294967295n)),i.setUint32(n-4,Number(a&4294967295n));let o=new Uint32Array(ht),s=new Uint32Array(64);for(let e=0;e<n;e+=64){for(let t=0;t<16;t+=1)s[t]=i.getUint32(e+t*4);for(let e=16;e<64;e+=1){let t=s[e-15]??0,n=s[e-2]??0,r=E(t,7)^E(t,18)^t>>>3,i=E(n,17)^E(n,19)^n>>>10;s[e]=(s[e-16]??0)+r+(s[e-7]??0)+i>>>0}let t=o[0]??0,n=o[1]??0,r=o[2]??0,a=o[3]??0,c=o[4]??0,l=o[5]??0,u=o[6]??0,d=o[7]??0;for(let e=0;e<64;e+=1){let i=E(c,6)^E(c,11)^E(c,25),o=c&l^~c&u,f=d+i+o+(mt[e]??0)+(s[e]??0)>>>0,p=(E(t,2)^E(t,13)^E(t,22))+(t&n^t&r^n&r)>>>0;d=u,u=l,l=c,c=a+f>>>0,a=r,r=n,n=t,t=f+p>>>0}o[0]=(o[0]??0)+t>>>0,o[1]=(o[1]??0)+n>>>0,o[2]=(o[2]??0)+r>>>0,o[3]=(o[3]??0)+a>>>0,o[4]=(o[4]??0)+c>>>0,o[5]=(o[5]??0)+l>>>0,o[6]=(o[6]??0)+u>>>0,o[7]=(o[7]??0)+d>>>0}return[...o].map(e=>e.toString(16).padStart(8,`0`)).join(``)}const _t=32,vt=2e3,yt=Object.keys({type:!0,description:!0,enum:!0,items:!0,properties:!0,required:!0,anyOf:!0,additionalProperties:!0,minimum:!0,maximum:!0,pattern:!0,format:!0,default:!0}),bt=new Set(yt),xt=new Set([`__proto__`,`constructor`,`prototype`]),St=new Set([`title`,`$schema`,`$comment`,`examples`,`default`]);function Ct(){return{anyOf:[{type:`string`},{type:`number`},{type:`boolean`},{type:`object`},{type:`array`},{type:`null`}]}}const wt={closedObjects:!1,requireAllProperties:!1,optionalAsNullable:!1,unknownKeywords:`adopt`,unsupportedMembers:[],maxDepth:32,maxNodes:vt},Tt={closedObjects:!0,requireAllProperties:!0,optionalAsNullable:!0,unknownKeywords:`strip`,unsupportedMembers:[],maxDepth:32,maxNodes:vt};function D(e,t){return`${e}/${t}`}function Et(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Dt(e,t,n,r,i,a){if(!Et(e))return;if(r.has(e))return{path:t,keyword:`cycle`,reason:`object graph revisits a node on its own ancestor chain (cycle)`};if(r.add(e),n>a.maxDepth)return{path:t,keyword:`maxDepth`,reason:`nesting depth exceeds maxDepth (${a.maxDepth})`};if(i.count+=1,i.count>a.maxNodes)return{path:t,keyword:`maxNodes`,reason:`node count exceeds maxNodes (${a.maxNodes})`};if(a.unknownKeywords===`reject`){for(let n of Object.keys(e))if(!bt.has(n))return{path:t,keyword:n,reason:`unknown keyword '${n}' is outside the IParameterSchema member set`}}let o=typeof e.type==`string`,s=Array.isArray(e.anyOf);if(o&&s)return{path:t,keyword:`anyOf`,reason:`a node must declare exactly one of 'type' or 'anyOf', not both`};if(!o&&!s&&!Object.keys(e).some(e=>!bt.has(e)))return{path:t,keyword:`type`,reason:`a node must declare exactly one of 'type' or 'anyOf'`};let c=e.properties;if(Et(c)){for(let e of Object.keys(c))if(xt.has(e))return{path:D(D(t,`properties`),e),keyword:e,reason:`property name '${e}' is a prototype key`};for(let e of Object.keys(c)){let o=Dt(c[e],D(D(t,`properties`),e),n+1,r,i,a);if(o)return o}}if(Et(e.items)){let o=Dt(e.items,D(t,`items`),n+1,r,i,a);if(o)return o}if(Array.isArray(e.anyOf))for(let o=0;o<e.anyOf.length;o+=1){let s=Dt(e.anyOf[o],D(D(t,`anyOf`),String(o)),n+1,r,i,a);if(s)return s}r.delete(e)}function Ot(e,t,n,r){let i={...e};for(let e of n.unsupportedMembers){let n=e;n in i&&(delete i[n],r.push({path:t,kind:`member-stripped`,keyword:n}))}if(n.unknownKeywords===`strip`){let e=Object.keys(i).filter(e=>!bt.has(e));for(let t of e)delete i[t];let n=typeof i.type==`string`,a=Array.isArray(i.anyOf);if(e.length>0&&!n&&!a){for(let n of e)r.push({path:t,kind:`keyword-replaced`,keyword:n});let n=Ct();for(let e of Object.keys(i))e===`description`?n.description=i.description:r.push({path:t,kind:`member-stripped`,keyword:e});return n}for(let n of e)r.push({path:t,kind:`keyword-stripped`,keyword:n})}let a=i.properties;return Et(a)&&(i.properties=Object.fromEntries(Object.keys(a).map(e=>{let i=a[e];return[e,Et(i)?Ot(i,D(D(t,`properties`),e),n,r):i]}))),Et(i.items)&&(i.items=Ot(i.items,D(t,`items`),n,r)),Array.isArray(i.anyOf)&&(i.anyOf=i.anyOf.map((e,i)=>Et(e)?Ot(e,D(D(t,`anyOf`),String(i)),n,r):e)),i}function kt(e){if(Array.isArray(e))return e.map(kt);if(Et(e)){let t={};for(let n of Object.keys(e).sort())t[n]=kt(e[n]);return t}return e}function At(e){return gt(JSON.stringify(kt(e)))}function jt(e,t){let n=e.parameters;if(!Et(n)||n.type!==`object`)return{outcome:`rejected`,tool:e,changes:[],rejection:{path:``,keyword:`type`,reason:`the parameters root must declare type: 'object' — no documented provider accepts another root`}};let r=Dt(n,``,0,new Set,{count:0},t);if(r)return{outcome:`rejected`,tool:e,changes:[],rejection:r};let i=[],a=Ot(n,``,t,i),o=t.closedObjects?ft(a,{requireAllProperties:t.requireAllProperties,optionalAsNullable:t.optionalAsNullable,onChange:e=>i.push(e)}):a;if(i.length===0)return{outcome:`adopted`,tool:e,changes:[]};let s=i.filter(e=>(e.kind===`keyword-stripped`||e.kind===`keyword-replaced`||e.kind===`member-stripped`)&&!St.has(e.keyword??``)),c=s.length===0?e.description:`${e.description}\n\nSchema note: ${s.length} constraint(s) not shown to ${t.providerName}: ${s.map(e=>`${e.kind}@${e.path}`).join(`, `)}`;return{outcome:`adapted`,tool:{...e,parameters:o,description:c},changes:i}}const Mt={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var Nt=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}},Pt=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??Nt.getInstance().getGlobalSink()??Mt}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),Ft(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),Ft(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),Ft(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),Ft(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||Nt.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 Ft(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function O(e,t={}){return new Pt(e,t)}function It(e){Nt.getInstance().setGlobalLevel(e)}function Lt(){return Nt.getInstance().getGlobalLevel()}function Rt(e){Nt.getInstance().setGlobalSink(e)}function zt(){return Nt.getInstance().getGlobalSink()}const k=O(`agents`),Bt=O(`ToolSchemaProjection`);var Vt=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=Mt){this.logger=e}async configure(e){this.config=e,this.hasExecutor(e)&&e.executor&&(this.executor=e.executor)}hasExecutor(e){return typeof e==`object`&&!!e&&`executor`in e}async*streamWithAbort(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await Ht(n,t);if(e.done||(await Ut(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return st(this,this.logger,e)}async*generateStreamingResponse(e){yield*ct(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return se(this.supportsTools())}validateConfig(){return!0}validateMessages(e){Ge(e)}validateTools(e){Ke(e)}projectionProfile(){}projectTools(e,t){let n=this.projectionProfile();if(!n||!e)return e;let r=[];for(let i of e){let e=jt(i,n);if(e.outcome!==`rejected`){r.push(e.tool);continue}let a=`${this.name}${t}${i.name}${At(i.parameters)}`;if(this.quarantinedToolSchemas.has(a))continue;this.quarantinedToolSchemas.set(a,!0);let{path:o,keyword:s,reason:c}=e.rejection??{path:``,keyword:``,reason:`rejected`};Bt.warn(`tool_schema_quarantined provider=${this.name} model=${t} tool=${i.name} path=${o} keyword=${s} reason=${c}`)}return r}validateNativeWebTools(e){ce(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return qe(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*Ye(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Ht(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 Ut(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}({}),Gt=function(e){return e[e.CRITICAL=1e3]=`CRITICAL`,e[e.HIGH=800]=`HIGH`,e[e.NORMAL=500]=`NORMAL`,e[e.LOW=200]=`LOW`,e[e.MINIMAL=100]=`MINIMAL`,e}({});const A={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},Kt=`agent`,j={START:`start`,COMPLETE:`complete`,ERROR:`error`,ASSISTANT_MESSAGE_START:`assistant_message_start`,ASSISTANT_MESSAGE_COMPLETE:`assistant_message_complete`,USER_MESSAGE:`user_message`,TOOL_RESULTS_TO_LLM:`tool_results_to_llm`,TOOL_RESULTS_READY:`tool_results_ready`},qt=`execution`,M={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},Jt=`tool`,Yt=`unknown_tool`,Xt=`argument_decode_error`,Zt=`tool_call_skipped`,N=(e,t)=>`${e}.${t}`,Qt={START:N(qt,j.START),COMPLETE:N(qt,j.COMPLETE),ERROR:N(qt,j.ERROR)},$t={CALL_START:N(Jt,M.CALL_START),CALL_COMPLETE:N(Jt,M.CALL_COMPLETE),CALL_ERROR:N(Jt,M.CALL_ERROR)},en={EXECUTION_START:N(Kt,A.EXECUTION_START),EXECUTION_COMPLETE:N(Kt,A.EXECUTION_COMPLETE),EXECUTION_ERROR:N(Kt,A.EXECUTION_ERROR),CREATED:N(Kt,A.CREATED)},P={EXECUTION_START:Qt.START,EXECUTION_COMPLETE:Qt.COMPLETE,EXECUTION_ERROR:Qt.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:$t.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:en.EXECUTION_START,AGENT_EXECUTION_COMPLETE:en.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:en.EXECUTION_ERROR,AGENT_CREATED:en.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 tn=class{enabled=!0;category=`custom`;priority=Gt.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=O(`AbstractPlugin`);stats={calls:0,errors:0,moduleEventsReceived:0,lastActivity:void 0};async initialize(e){this.options=e,e&&`enabled`in e&&typeof e.enabled==`boolean`?this.enabled=e.enabled:this.enabled=!0,e?.category&&(this.category=e.category),e?.priority!==void 0&&(this.priority=(e.priority,e.priority))}async subscribeToModuleEvents(e){if(this.eventEmitter=e,!this.options)return;let t=[];this.options.subscribeToAllModuleEvents&&t.push(P.MODULE_INITIALIZE_START,P.MODULE_INITIALIZE_COMPLETE,P.MODULE_INITIALIZE_ERROR,P.MODULE_EXECUTION_START,P.MODULE_EXECUTION_COMPLETE,P.MODULE_EXECUTION_ERROR,P.MODULE_DISPOSE_START,P.MODULE_DISPOSE_COMPLETE,P.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let e of t){let t=this.eventEmitter.on(e,async t=>{try{this.stats.moduleEventsReceived++,this.stats.lastActivity=new Date,await this.onModuleEvent?.(e,t)}catch(t){this.stats.errors++;let n=t instanceof Error?t:Error(String(t));this.pluginLogger.error(`Plugin "${this.name}" failed to handle module event "${String(e)}"`,{plugin:this.name,eventType:String(e),error:n.message})}}),n=this.eventHandlers.get(e);n?n.push(t):this.eventHandlers.set(e,[t]),this.subscribedEvents.push(e)}}async unsubscribeFromModuleEvents(e){for(let[t,n]of this.eventHandlers.entries())for(let r of n)e.off(t,r);this.eventHandlers.clear(),this.subscribedEvents=[],this.eventEmitter=void 0}async dispose(){this.eventEmitter&&await this.unsubscribeFromModuleEvents(this.eventEmitter)}enable(){this.enabled=!0}disable(){this.enabled=!1}isEnabled(){return this.enabled}getConfig(){return{}}updateConfig(e){}getData(){return{name:this.name,version:this.version,enabled:this.enabled,category:this.category,priority:this.priority,subscribedEvents:[...this.subscribedEvents],metadata:{moduleEventsReceived:this.stats.moduleEventsReceived,totalCalls:this.stats.calls,totalErrors:this.stats.errors}}}getStatus(){return{name:this.name,version:this.version,enabled:this.enabled,initialized:!0,category:this.category,priority:this.priority,subscribedEventsCount:this.subscribedEvents.length,hasEventEmitter:!!this.eventEmitter}}getStats(){return{enabled:this.enabled,calls:this.stats.calls,errors:this.stats.errors,moduleEventsReceived:this.stats.moduleEventsReceived,...this.stats.lastActivity&&{lastActivity:this.stats.lastActivity}}}updateCallStats(){this.stats.calls++,this.stats.lastActivity=new Date}updateErrorStats(){this.stats.errors++,this.stats.lastActivity=new Date}},nn=class{logger;constructor(e=Mt){this.logger=e}supportsTools(){return!1}validateConfig(){return!0}async dispose(){}async withRetry(e,t=3,n=1e3){let r;for(let i=0;i<=t;i++)try{return await e()}catch(e){r=e instanceof Error?e:Error(String(e)),i<t&&(this.logger.warn?.(`[${this.name}] Attempt ${i+1} failed, retrying in ${n}ms`,{error:r.message,attempt:i+1,maxRetries:t}),await this.delay(n))}throw r}withTimeout(e,t){let n;return Promise.race([e.then(e=>(clearTimeout(n),e)),new Promise((e,r)=>{n=setTimeout(()=>r(Error(`Operation timed out after ${t}ms`)),t)})])}delay(e){return new Promise(t=>setTimeout(t,e))}logDebug(e,t){this.logger.debug?.(`[${this.name}] ${e}`,t)}logError(e,t,n){this.logger.error?.(`[${this.name}] ${e}`,{error:t.message,stack:t.stack,...n})}validateRequest(e){if(!e.messages||e.messages.length===0)throw Error(`Request must include at least one message`);if(!e.provider)throw Error(`Request must specify a provider`);if(!e.model)throw Error(`Request must specify a model`)}validateResponse(e){if(!e.role)throw Error(`Response must have a role`);let t=e.role===`assistant`&&`toolCalls`in e&&Array.isArray(e.toolCalls)&&e.toolCalls.length>0;if(!e.content&&!t)throw Error(`Response must have content or tool calls`)}},rn=class{provenance;logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??Mt}setEventService(e){this.eventService=e}getEventService(){return this.eventService}emitEvent(e,t){this.eventService&&this.eventService.emit(e,t)}async execute(e,t){return await this.executeImpl(e,t)}validate(e){return(this.schema.parameters.required||[]).every(t=>t in e)}validateParameters(e){let t=this.schema.parameters.required||[],n=[],r=e;for(let e of t)e in r||n.push(`Missing required parameter: ${e}`);return{isValid:n.length===0,errors:n}}getDescription(){return this.schema.description}getName(){return this.schema.name}};function an(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function on(e,t){if(t?.aborted===!0)return!0;if(!an(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return an(n)&&n.name===`AbortError`}function sn(e=`aborted`,t){let n=t===void 0?Error(e):Error(e,{cause:t});return n.name=`AbortError`,n}var cn=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`)}},ln=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 un=ln.validateAgentConfig,dn=ln.validateUserInput,fn=ln.validateProviderName,pn=ln.validateModelName,mn=ln.validateApiKey;var hn=class{static isRecoverable(e){return e instanceof y&&e.recoverable}static getErrorCode(e){return e instanceof y?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof y?e:e instanceof Error?new o(e.message||t):new o(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new i(`Failed to ${n}`,t,r,{operation:n})}},F=class extends Error{code=`EXECUTION_JOURNAL_FAILED`;recordId;kind;constructor(e,t){super(`Execution journal failed at ${e.kind}`,{cause:t}),this.name=`ExecutionJournalError`,this.recordId=e.recordId,this.kind=e.kind}},I=class extends Error{code=`EXECUTION_SUSPENDED`;requests;constructor(e){super(`Execution is waiting for correlated tool responses`),this.name=`ExecutionSuspendedError`,this.requests=structuredClone(e)}},L=class extends Error{code;actionIds;constructor(e,t,n=[]){super(t),this.code=e,this.actionIds=n,this.name=`ExecutionRecoveryError`}};function R(e){return e instanceof F||e instanceof L||e instanceof I}function gn(e,t){return e instanceof F?e:t instanceof F?t:e instanceof L?e:t instanceof L?t:e instanceof I&&t instanceof I?new I([...new Map([...e.requests,...t.requests].map(e=>[e.requestId,e])).values()]):e instanceof I?e:t}const _n=new Set([`rate_limit_error`]),vn=new Set([`overloaded_error`]),yn=new Set([`authentication_error`,`permission_error`]),bn=new Set([`model_not_found`]),xn=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),Sn=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]),Cn=[/\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 wn(e){return Cn.some(t=>t.test(e))}const Tn=`[^\\s,;)"]+`;function En(e){return e.replace(RegExp(`\\bauthorization(")?\\s*[:=]\\s*(")?(?:(?:bearer|basic)\\s+)?${Tn}`,`gi`),`Authorization$1: $2[REDACTED]`).replace(RegExp(`\\bbearer\\s+${Tn}`,`gi`),`Bearer [REDACTED]`).replace(RegExp(`\\b(api[-_]?key)(")?\\s*[:=]\\s*(")?${Tn}`,`gi`),`$1$2: $3[REDACTED]`).replace(RegExp(`\\bkey=${Tn}`,`gi`),`key=[REDACTED]`).replace(/\bsk-[A-Za-z0-9_-]{8,}/gi,`[REDACTED]`).replace(/\bAIza[0-9A-Za-z_-]{35}\b/g,`[REDACTED]`)}function z(e){return typeof e==`object`&&e?e:void 0}function Dn(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function On(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=Dn(r,`type`),o=Dn(t,`type`)??Dn(i,`type`)??(a===`error`?void 0:a)??(n!==void 0&&!(e instanceof y)?Dn(t,`code`):void 0);return{...n!==void 0&&{status:n},...o!==void 0&&{type:o}}}function kn(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 An(e){return on(e)||kn(e)===`APIUserAbortError`}function jn(e){let t=z(e)?.headers,n=t instanceof Headers?t.get(`retry-after`):z(t)?.[`retry-after`]??z(t)?.[`Retry-After`];if(n==null||n.trim().length===0)return;let r=Number(n);if(Number.isFinite(r))return Math.max(0,r);let i=Date.parse(n);return Number.isNaN(i)?void 0:Math.max(0,Math.round((i-Date.now())/1e3))}function Mn(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 Nn(t,n,r){if(t instanceof y||An(t))return t;let a=t instanceof Error?t:Error(typeof t==`string`?t:``),o=On(t),s=En(a.message||`request failed`),l=Mn(o);if(o.status===429||o.type!==void 0&&_n.has(o.type))return new e(s||`${n} rate limit exceeded.`,jn(t),n,l);if(o.status===401||o.status===403||o.type!==void 0&&yn.has(o.type))return new g(s,n,l);let u=o.status===void 0||o.status===400||o.status===404,d=Ln(t)||o.type!==void 0&&bn.has(o.type)||wn(s);return u&&d?new T(void 0,n,void 0,{...l,originalMessage:s}):Pn(t)?new c(s,a,l,n):new i(`${r}: ${s}`,n,a,void 0,o)}function Pn(e){if(e instanceof c)return!0;let t=z(e);if(t===void 0)return!1;let n=Dn(t,`code`);if(n!==void 0&&xn.has(n))return!0;let r=kn(e);if(r!==void 0&&Sn.has(r))return!0;let i=Dn(t,`name`);return i!==void 0&&Sn.has(i)?!0:i===`TypeError`&&Dn(t,`message`)===`fetch failed`}function Fn(e){let t=[],n=new Set,r=[e];for(let e=0;e<=8&&r.length>0;e++){let e=[];for(let i of r){if(i==null||n.has(i))continue;n.add(i),t.push(i);let r=z(i);r!==void 0&&e.push(r.originalError,r.cause)}r=e}return t}const B=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function In(e){return e instanceof i?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:On(e)}function Ln(e){if(e instanceof y)return!1;let t=Dn(z(e),`code`);return t!==void 0&&bn.has(t)}function Rn(t){if(t instanceof e)return B(!1,`rate-limit`);if(t instanceof g)return B(!1,`authentication`);if(t instanceof T)return B(!0,`model-unavailable`);let{status:n,type:r}=In(t);return n===429||r!==void 0&&_n.has(r)?B(!1,`rate-limit`):n===401||n===403||r!==void 0&&yn.has(r)?B(!1,`authentication`):n===402?B(!1,`billing`):(n===void 0||n===400||n===404)&&(Ln(t)||r!==void 0&&bn.has(r))?B(!0,`model-unavailable`):Pn(t)?B(!1,`network`):n===529||r!==void 0&&vn.has(r)?B(!0,`overloaded`):n===503?B(!0,`service-unavailable`):n===500||n===502||n===504?B(!0,`server-error`):n===404?{kind:`tentative`,classification:{switchable:!0,reason:`model-unavailable`}}:n===400||n===413?{kind:`tentative`,classification:{switchable:!1,reason:`invalid-request`}}:{kind:`none`}}function zn(e,t){let n=Fn(e);if(t?.aborted===!0||n.some(e=>An(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 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 Vn(e){e&&clearInterval(e)}async function V(e,t){try{await e.append(structuredClone(t))}catch(e){throw new F(t,e)}}function Hn(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 Un(e,t,n,r){if(!r)return e(t,n);let{journal:i,executionId:a,callId:o}=r;await V(i,{kind:`model-request`,recordId:`${o}:request`,executionId:a,callId:o,...r.route(),messages:t,options:Hn(n),...r.checkpoint&&{checkpoint:r.checkpoint}}),n.signal?.throwIfAborted();let s;try{s=await e(t,n)}catch(e){throw await V(i,{kind:`model-failure`,recordId:`${o}:failure`,executionId:a,callId:o,...r.route(),error:{name:e instanceof Error?e.name:`Error`,message:e instanceof Error?e.message:String(e)}}),e}return await V(i,{kind:`model-response`,recordId:`${o}:response`,executionId:a,callId:o,...r.route(),response:s}),s}function Wn(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:if(!e.catchall)return H(e)===`ZodObject`||void 0;switch(H(U(e.catchall,`Zod catchall`))){case`ZodNever`:return!1;case`ZodUnknown`:return!0;default:return e.catchall}}}function H(e){if(e.typeName)return e.typeName;if(typeof e.type==`string`)return`Zod${e.type[0]?.toUpperCase()+e.type.slice(1)}`}function Gn(e){let t=Kn(e);return H(t)===`ZodObject`?t:void 0}function Kn(e){let t=e;for(let e=0;e<=64;e+=1){let e=H(t),n=e===`ZodEffects`?t.schema:e===`ZodPipe`?t.in:e===`ZodOptional`||e===`ZodNullable`||e===`ZodDefault`?t.innerType:void 0;if(!n)return t;t=U(n,`${String(e)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function U(e,t){let n=e._def;if(!n||typeof n!=`object`)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function qn(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 Jn(e){let t=U(e,`Zod schema`);for(let e=0;(H(t)===`ZodEffects`||H(t)===`ZodPipe`)&&e<=64;e+=1){let e=H(t)===`ZodPipe`?t.in:t.schema;if(!e)break;t=U(e,`Zod effect inner type`)}let n=H(t);return n!==`ZodOptional`&&n!==`ZodNullable`&&n!==`ZodDefault`}function Yn(e){let t=U(e,`Zod schema`),n=t.values??t.entries;if(!n||typeof n!=`object`)throw Error(`ZodEnum schema is missing enum values; cannot extract enum values.`);return Xn(n)}function Xn(e){if(Array.isArray(e))return e;let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e])=>!t.includes(Number(e))).map(([,e])=>e)}function Zn(e){let t=U(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function Qn(e){let t=H(U(e,`Zod schema`));if(!t)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t}function $n(e,t={}){let n=U(e,`Zod schema`),r=Gn(n);if(!r)throw Error(`Zod schema root must be an object; got ${String(H(n))}. Wrap the fields in z.object({ … }) before converting.`);return er(r,t.allowAdditionalProperties)}function er(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=tr(a,t),Jn(a)&&r.push(e);let a=Wn(e,t),o=typeof a==`object`?tr(a,t):a;return{type:`object`,properties:n,required:r,...o!==void 0&&{additionalProperties:o}}}function tr(e,t){let n=U(e,`Zod type`),r=H(n),i={};switch((n.description??e.description)&&(i.description=n.description??e.description),r){case`ZodString`:return{type:`string`,...i};case`ZodNumber`:return{type:`number`,...i};case`ZodBoolean`:return{type:`boolean`,...i};case`ZodArray`:{let e=n.element??(typeof n.type==`object`?n.type:void 0);if(!e)throw Error(`ZodArray is missing item type; cannot convert to JSON schema.`);return{type:`array`,items:tr(e,t),...i}}case`ZodObject`:return{...er(n,t),...i};case`ZodEnum`:{let e=n.values??n.entries;if(!e)throw Error(`ZodEnum is missing enum values; cannot convert to JSON schema.`);return{...ir(e),...i}}case`ZodNativeEnum`:return{...ir(n.values),...i};case`ZodDate`:return{type:`string`,format:`date-time`,...i};case`ZodLiteral`:return{...nr(Array.isArray(n.values)?n.values:[n.value]),...i};case`ZodUnion`:case`ZodDiscriminatedUnion`:{let e=n.options;if(!e||!Array.isArray(e)||e.length===0)throw Error(`${String(r)} is missing options; cannot convert to JSON schema.`);return{anyOf:e.map(e=>tr(e,t)),...i}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...tr(n.schema,t),...i};case`ZodPipe`:if(!n.in)throw Error(`ZodPipe is missing input schema; cannot convert to JSON schema.`);return{...tr(n.in,t),...i};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[tr(n.innerType,t),{type:`null`}],...i};case`ZodOptional`:case`ZodDefault`:if(!n.innerType)throw Error(`${String(r)} is missing innerType; cannot convert to JSON schema.`);return{...tr(n.innerType,t),...i};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:tr(n.valueType,t),...i}:{type:`object`,additionalProperties:{type:`string`},...i};default:throw Error(or(String(r)))}}function nr(e){if(e.length===0)throw Error(`ZodLiteral declares no values; cannot convert to JSON schema.`);if(new Set(e.map(qn)).size!==1)return{anyOf:e.map(e=>rr(e))};let t=qn(e[0]);return t?t===`null`?{type:`null`}:{type:t,enum:e}:rr(e[0])}function rr(e){let t=qn(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 ir(e){if(!e||typeof e!=`object`)throw Error(`ZodNativeEnum is missing enum values; cannot convert to JSON schema.`);let t=Xn(e);if(t.length===0)throw Error(`ZodNativeEnum declares no members; cannot convert to JSON schema.`);let n=t.filter(e=>typeof e==`number`),r=t.filter(e=>typeof e==`string`);return n.length>0&&r.length>0?{anyOf:[{type:`string`,enum:r},{type:`number`,enum:n}]}:{type:n.length>0?`number`:`string`,enum:t}}const ar={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 or(e){return`${e} cannot be carried by the universal JSON-schema subset: ${ar[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 sr(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function cr(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 lr(e){if(sr(e))return{name:`structured_output`,jsonSchema:$n(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:cr(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=ur(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function ur(e,t,n){let r=[],i=e.type;if(e.anyOf)return fr(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${pr(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(...ur(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(dr(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(...ur(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${pr(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...ur(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 ${pr(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${pr(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 ${pr(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${pr(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function dr(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function fr(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>ur(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 pr(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function mr(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 hr(e,t){return Se(e,t,`json_schema`)===!0?`response_schema`:Se(e,t,`json_object`)===!0?`json_object`:`none`}function gr(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=hr(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 _r=e=>process.env[e];function vr(e){return t=>e[t]}function yr(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function br(e,t={},n=_r){let r=e.credentialRequirement,i=t.baseUrl??yr(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=yr(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 xr(e,t={},n=_r){if(e.createImageProvider===void 0)return;let r=br(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return we(t)?t:void 0}catch{return}}function Sr(e,t={},n=_r){if(e.createVideoProvider===void 0)return;let r=br(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return Te(t)?t:void 0}catch{return}}const Cr=`$ENV:`;function wr(e){return e.startsWith(Cr)}function Tr(e){return`${Cr}${e}`}function Er(e,t=_r){if(!wr(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function Dr(e,t=_r){return e===void 0||e.length===0?!1:Er(e,t)!==void 0}function Or(e,t,n=_r){let r=ve(t,e.name)?.defaults??{},i=e.model??r.model;if(!i)throw Error(`Provider ${e.name} requires model`);if(e.apiKeyRef!==void 0&&e.apiKey!==void 0)throw Error(`Provider ${e.name} has conflicting credential origins`);if(e.apiKeyRef!==void 0&&(!e.apiKeyRef.service?.trim()||!e.apiKeyRef.account?.trim()))throw Error(`Provider ${e.name} has an invalid host credential reference`);let a=e.apiKeyRef===void 0?e.apiKey??r.apiKey:void 0,o=a!==void 0&&wr(a)?a.slice(5).trim():void 0;if(o===``)throw Error(`Provider ${e.name} has an invalid API key environment reference; use $ENV:VARIABLE_NAME`);let s=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:Er(a,n),...o?{apiKeyEnv:o}:{},...e.apiKeyRef===void 0?{}:{apiKeyRef:e.apiKeyRef},baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...s!==void 0&&{options:s}}}function kr(e,t){if(e.apiKeyRef!==void 0&&!e.apiKey)throw Error(`Provider ${e.name} requires host credential resolution before construction`);let n=ve(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${ye(t)}`);let r=be(n);if(r!==void 0&&!Ar(e,r))throw Error(`Provider ${e.name} requires ${Mr(r)}`);return n.createProvider(e)}function Ar(e,t){return t.anyOf.some(t=>jr(e,t))}function jr(e,t){let n=e[t];return n!==void 0&&n.length>0}function Mr(e){return e.anyOf.map(e=>e===`apiKey`?`apiKey (API key)`:e).join(` or `)}function W(){let e=globalThis.crypto;if(typeof e?.randomUUID==`function`)return e.randomUUID();if(typeof e?.getRandomValues==`function`){let t=e.getRandomValues(new Uint8Array(16));t[6]=(t[6]??0)&15|64,t[8]=(t[8]??0)&63|128;let n=Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``);return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}throw Error(`No cryptographic randomness is available on this platform (globalThis.crypto is missing both randomUUID and getRandomValues), so a unique identifier cannot be generated. This is not something to substitute Math.random for.`)}function Nr(e,t){let n={id:W(),role:`user`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Pr(e,t){let n={id:W(),role:`assistant`,content:e,state:t?.state??`complete`,timestamp:new Date};return t?.toolCalls&&(n.toolCalls=t.toolCalls),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Fr(e,t){let n={id:W(),role:`system`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Ir(e,t){let n={id:W(),role:`tool`,content:e,toolCallId:t.toolCallId,state:`complete`,timestamp:new Date};return t.name&&(n.name=t.name),t.metadata&&(n.metadata=t.metadata),t.parts&&(n.parts=t.parts),n}var Lr=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(Qe(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(Nr(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(Pr(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(Fr(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>Xe(e)&&nt(Ze(e)),i=this.entries.filter(e=>!r(e)),a=Qe(Fr(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(Ir(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(Xe).map(Ze)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(Xe).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(Xe);if(e.length<=this.maxMessages)return;let t=e.map(Ze),n=t.filter(nt),r=t.filter(e=>!nt(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=>!Xe(e)||o.has(e.id))}},Rr=class{history;pendingAssistant=null;constructor(e=0){this.history=new Lr({maxMessages:e})}addMessage(e){this.history.addMessage(e)}addUserMessage(e,t,n){this.history.addUserMessage(e,t,n)}addAssistantMessage(e,t,n,r){this.history.addAssistantMessage(e,t,n,r)}addSystemMessage(e,t,n){this.history.addSystemMessage(e,t,n)}setSystemPrompt(e,t,n){this.history.setSystemPrompt(e,t,n)}addToolMessage(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n||`unknown`,r,i)}addToolMessageWithId(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n,r,i)}addEntry(e){this.history.addEntry(e)}getHistory(){return this.history.getHistory()}getMessages(){return this.history.getMessages()}getMessagesByRole(e){return this.history.getMessagesByRole(e)}getRecentMessages(e){return this.history.getRecentMessages(e)}getMessageCount(){return this.history.getMessageCount()}beginAssistant(){this.pendingAssistant||={id:W(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:W(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:W(),content:``,toolCalls:[]},this.pendingAssistant.toolCalls.some(t=>t.id===e.id)||this.pendingAssistant.toolCalls.push(e)}commitAssistant(e,t){if(!this.pendingAssistant)return;let n=this.pendingAssistant,r=n.toolCalls.length>0,i=n.content,a={id:n.id,role:`assistant`,content:i,state:e,timestamp:new Date,...r&&{toolCalls:n.toolCalls},...t&&{metadata:t}};this.history.addMessage(a),this.pendingAssistant=null}discardPending(){this.pendingAssistant=null}hasPendingAssistant(){return this.pendingAssistant!==null}getPendingContent(){return this.pendingAssistant?.content??``}getMessagesForAPI(){return this.history.getMessages().map(e=>{let t={role:e.role,content:e.content};return tt(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
|
|
2
2
|
|
|
3
|
-
[This response was interrupted by the user]`),tt(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),rt(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},Rr=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 Lr(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 zr(){let e,t=0;return{observe(n){t+=1,t===1&&(e=n)},terminal(n){if(t>1)throw Error(`Provider "${n}" emitted ${t} model-effort outcomes`);return e}}}function Br(e,t,n){if(n!==void 0&&t?.onModelEffortOutcome!==void 0)try{t.onModelEffortOutcome(n)}catch(t){e.warn(`Model-effort outcome observer failed`,{error:t instanceof Error?t.message:String(t)})}}var Vr=class extends nn{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=zr(),r=await this.withRetry(async()=>(n=zr(),await this.withTimeout(t.chat(e.messages,{...e.options,model:e.model,tools:e.tools,onModelEffortOutcome:e=>{n.observe(e)}}),this.config.timeout)),this.config.maxRetries,this.config.retryDelay);if(r.role!==`assistant`)throw Error(`Expected assistant message, got ${r.role}`);let i=n.terminal(e.provider);return this.validateResponse(r),Br(this.logger,e.options,i),{message:r,...i!==void 0&&{modelEffortOutcome:i}}}catch(t){let n=t instanceof Error?t:Error(String(t));throw this.logError(`Chat execution failed`,n,{provider:e.provider,model:e.model}),n}}async*executeChatStream(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chatStream)throw Error(`Provider "${e.provider}" does not implement chatStream method`);this.config.enableLogging&&this.logDebug(`Executing streaming chat with provider: ${e.provider}, model: ${e.model}`);try{let n=zr(),r=t.chatStream(e.messages,{...e.options,model:e.model,tools:e.tools,onModelEffortOutcome:e=>{n.observe(e)}});for await(let e of r)this.validateResponse(e),yield{kind:`message`,message:e};let i=n.terminal(e.provider);Br(this.logger,e.options,i),yield{kind:`terminal`,...i!==void 0&&{modelEffortOutcome:i}}}catch(t){let n=t instanceof Error?t:Error(String(t));throw this.logError(`Streaming chat execution failed`,n,{provider:e.provider,model:e.model}),n}}supportsTools(){for(let e of this.providers.values())if(e.supportsTools&&e.supportsTools())return!0;return!1}validateConfig(){try{if(this.config.timeout<=0||this.config.maxRetries<0||this.config.retryDelay<0)return!1;for(let e of this.providers.values())if(e.validateConfig&&!e.validateConfig())return!1;return!0}catch{return!1}}async dispose(){this.config.enableLogging&&this.logDebug(`Disposing ${this.providers.size} providers`);let e=[];for(let t of this.providers.values())t.dispose&&e.push(t.dispose());await Promise.all(e),this.providers.clear()}requireChatProvider(e){let t=this.providers.get(e.provider);if(!t)throw Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chat)throw Error(`Provider "${e.provider}" does not implement chat method`);return t}};const Hr=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function Ur(e){return Hr.test(e)?e:void 0}var Wr=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Gr(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new w(`Invalid maxListeners option: ${e.maxListeners}. Must be a non-negative number.`,t,{maxListeners:e.maxListeners});if(e.buffer!==void 0&&e.buffer.maxSize!==void 0&&e.buffer.maxSize<0)throw new w(`Invalid buffer.maxSize option: ${e.buffer.maxSize}. Must be a non-negative number.`,t,{bufferMaxSize:e.buffer.maxSize});if(e.buffer!==void 0&&e.buffer.flushInterval!==void 0&&e.buffer.flushInterval<0)throw new w(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function Kr(e,t,n,r,i){try{await e.listener(t)}catch(a){if(n.incrementErrors(),!r)throw a instanceof Error?a:Error(String(a));i.error(`Event handler error`,{eventType:t.type,handlerId:e.id,error:a instanceof Error?a.message:String(a)})}}async function qr(e,t,n,r,i){let a=t.get(e.type);if(!a||a.length===0)return;let o=a.filter(t=>!t.filter||t.filter(e));if(o.length!==0){for(let t of o.filter(e=>e.once))r(e.type,t.id);if(n){await Promise.all(o.map(t=>i(t,e)));return}for(let t of o)await i(t,e)}}function Jr(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Yr(e,t,n,r){let{listenerCounts:i,totalListeners:a}=Jr(t),o=r.getSnapshot();return{enabled:e.enabled,calls:e.calls,errors:e.errors,eventTypes:Array.from(t.keys()),listenerCounts:i,totalListeners:a,bufferedEvents:n,totalEmitted:o.totalEmitted,totalErrors:o.totalErrors}}function Xr(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new w(`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 Zr(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 Qr(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 $r=class extends tn{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 Wr,Gr(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[P.AGENT_EXECUTION_START,P.AGENT_EXECUTION_COMPLETE,P.AGENT_EXECUTION_ERROR,P.TOOL_BEFORE_EXECUTE,P.TOOL_AFTER_EXECUTE,P.TOOL_SUCCESS,P.TOOL_ERROR],maxListeners:e.maxListeners??100,async:e.async??!0,catchErrors:e.catchErrors??!0,filters:e.filters??{},buffer:e.buffer??{enabled:!1,maxSize:1e3,flushInterval:5e3},category:e.category??`event_processing`,priority:e.priority??Gt.HIGH,moduleEvents:e.moduleEvents??[],subscribeToAllModuleEvents:e.subscribeToAllModuleEvents??!1},this.pluginOptions.buffer.enabled&&(this.bufferTimer=setInterval(()=>{this.flushBuffer().catch(e=>{this.logger.error(`Buffered flush failed`,{error:e instanceof Error?e.message:String(e)})})},this.pluginOptions.buffer.flushInterval))}async beforeExecution(e){await this.emit(P.AGENT_EXECUTION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messageCount:e.messages?.length||0,...e.config&&{config:e.config}}})}async afterExecution(e,t){await this.emit(P.AGENT_EXECUTION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{duration:t?.duration,tokensUsed:t?.tokensUsed,toolsExecuted:t?.toolsExecuted}})}async beforeConversation(e){await this.emit(P.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(e=>({role:e.role,content:e.content||``,timestamp:e.timestamp?e.timestamp.toISOString():new Date().toISOString()})),config:e.config}})}async afterConversation(e,t){await this.emit(P.CONVERSATION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{response:t.content||t.response,tokensUsed:t.usage?.totalTokens||t.tokensUsed,toolCalls:t.toolCalls?.map(e=>({id:e.id||``,name:e.name||``,arguments:JSON.stringify(e.arguments||{}),result:String(e.result||``)}))}})}async beforeToolExecution(e,t){t&&await this.emit(P.TOOL_BEFORE_EXECUTE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.toolName,toolId:t.executionId,arguments:JSON.stringify(t.parameters??{})}})}async afterToolExecution(e,t){if(!(!t.toolCalls||t.toolCalls.length===0))for(let n of t.toolCalls){let r=n.result===null?P.TOOL_ERROR:P.TOOL_SUCCESS,i=Qr(e,n,t.duration);await this.emit(r,i),await this.emit(P.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(P.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}})}on(e,t,n){let r=`handler_${this.nextHandlerId++}`;return Xr(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 Zr(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 qr(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>Kr(e,t,this.metrics,this.pluginOptions.catchErrors,this.logger))}async flushBuffer(){if(this.eventBuffer.length===0)return;let e=[...this.eventBuffer];this.eventBuffer=[];for(let t of e)await this.processEvent(t)}getStats(){return Yr(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 ei=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var ti=class{tools=new Map;register(e){if(!e.schema?.name)throw new r(`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 r(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new r(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new r(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new r(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))ni(t,n);if(e.parameters.required){let t=e.parameters.properties||{};for(let n of e.parameters.required)if(!t[n])throw new r(`Required parameter "${n}" is not defined in properties`)}}};function ni(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new r(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>ni(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new r(`Parameter "${e}" must declare a type or anyOf`);if(!ei.includes(t.type))throw new r(`Parameter "${e}" has invalid type "${t.type}"`);if(t.properties)for(let[n,r]of Object.entries(t.properties))ni(`${e}.${n}`,r);t.items&&ni(`${e}[]`,t.items)}function ri(e,n,r){let i=lr(r,n,`$`);if(i.length>0)throw new t(`output does not match the declared outputSchema: ${i.join(`; `)}`,e,void 0,{outputSchemaIssues:i})}function ii(e,t,n){let r=ai(e,t,n);return r?[r]:lr(n,t,`Parameter "${e}"`)}function ai(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 ${oi(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${oi(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${oi(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${oi(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${oi(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 oi(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function si(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(...ii(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...ii(t,a,e))}return i}function ci(e,t,n,r){let i=si(e,t,n,r);return{isValid:i.length===0,errors:i}}var li=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)}},ui=class extends li{emit(e,t,n){}};const di=new ui;function fi(e){return e===di||e instanceof ui}function pi(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 mi(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var hi=class extends li{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??mi()},i=pi(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 hi(e,t)}function gi(e,t){return U(e,t)}var _i=class extends li{emit(e,t,n){this.notifyListeners(e,t,n)}};const vi={COMPLETED:`span_completed`},yi={COMPLETED:`provider_call_completed`},bi={SWITCHED:`provider_fallback`};function xi(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 Si={COMPLETED:`tool_body_completed`},Ci={COMPLETED:`tool_queue_completed`},wi={DECIDED:`tool_permission_decided`},Ti=`span`;var Ei=class e{resultExecutor;schema;fn;eventService;constructor(e,t,n){this.resultExecutor=n,this.schema=e,this.fn=t,this.validateConstructorInputs()}static fromResult(n,r){return new e(n,async(e,i)=>{let a=await r(e,i);if(!a.success)throw new t(a.error??`Tool execution failed`,n.name);if(a.data===void 0)throw new t(`Tool execution succeeded but returned no data`,n.name);return a.data},r)}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(e,n){let i=this.schema.name;if(!this.validate(e))throw new r(`Invalid parameters for tool "${i}": ${si(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let a=Date.now(),o,s;try{this.resultExecutor?(s=await this.resultExecutor(e,n),o=s.data):o=await this.fn(e,n)}catch(a){throw R(a)||a instanceof t||a instanceof r?a:new t(`Function tool execution failed: ${a instanceof Error?a.message:String(a)}`,i,a instanceof Error?a:Error(String(a)),{parameterCount:Object.keys(e||{}).length,hasContext:!!n})}let c=Date.now()-a;this.schema.outputSchema&&(!s||s.success)&&ri(i,o,this.schema.outputSchema);let l=n?.instanceEventService??this.eventService;if(l){let e={timestamp:new Date,spanId:mi(),durationMs:c,op:i};l.emit(vi.COMPLETED,e)}return s||{success:!0,data:o,metadata:{executionTime:c,toolName:i,parameters:e}}}validate(e){return si(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return ci(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new r(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new r(`Tool function is required and must be a function`);if(!this.schema.name)throw new r(`Tool schema must have a name`)}};const Di=`at least one tool must stay resident; all tools cannot be deferred`,Oi=`a tool schema was withheld but no ${Oe} tool is offered; register the loader or turn tool search off`;function ki(e){return e.deferLoading===!0}function Ai(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!ki(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(Di);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(Oi);return r}function ji(e){if(e.length>0&&e.every(ki))throw Error(Di)}var Mi=class extends Ue{moduleManager;pluginManager;get name(){return this.config.name}addPlugin(e){this.pluginManager.addPlugin(e)}removePlugin(e){return this.pluginManager.removePlugin(e)}getPlugin(e){return this.pluginManager.getPlugin(e)}getPlugins(){return this.pluginManager.getPlugins()}getPluginNames(){return this.pluginManager.getPluginNames()}async registerModule(e,t){return this.moduleManager.registerModule(e,t)}async unregisterModule(e){return this.moduleManager.unregisterModule(e)}getModule(e){return this.moduleManager.getModule(e)}getModulesByType(e){return this.moduleManager.getModulesByType(e)}getModules(){return this.moduleManager.getModules()}getModuleNames(){return this.moduleManager.getModuleNames()}hasModule(e){return this.moduleManager.hasModule(e)}async executeModule(e,t){return this.moduleManager.executeModule(e,t)}getModuleStats(e){return this.moduleManager.getModuleStats(e)}};async function Ni(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 o(`Agent name is required`,{component:`ConversationAgent`});if(!e.aiProviders||e.aiProviders.length===0)throw new o(`At least one AI provider is required`,{component:`ConversationAgent`});if(!e.defaultModel)throw new o(`Default model configuration is required`,{component:`ConversationAgent`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new o(`Default model must specify both provider and model`,{component:`ConversationAgent`});let t=e.aiProviders.map(e=>e.name),n=t.filter((e,n)=>t.indexOf(e)!==n);if(n.length>0)throw new o(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`ConversationAgent`,duplicates:n});if(e.providerOwnership!==void 0){if(!e.providerOwnership||typeof e.providerOwnership!=`object`||Object.getPrototypeOf(e.providerOwnership)!==Object.prototype&&Object.getPrototypeOf(e.providerOwnership)!==null)throw new o(`Provider ownership must be a registration-name record`);for(let[n,r]of Object.entries(e.providerOwnership))if(!t.includes(n)||r!==`owned`&&r!==`borrowed`)throw new o(`Invalid provider ownership for registration '${n}'`)}if(!t.includes(e.defaultModel.provider))throw new o(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`ConversationAgent`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var Fi=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 o(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],n=this.getEventService();for(let r of e){n&&r.setEventService(n),this.getTools().addResultTool(r.schema,async(e,t)=>{if(!t)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Ni(r,e,t)},r.provenance);let e=r.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let r=this.getConfig();r.tools=e,this.setConfig(r);let i=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(A.CONFIG_UPDATED,{parameters:{tools:t,systemMessage:r.systemMessage,provider:r.defaultModel.provider,model:r.defaultModel.model,temperature:r.defaultModel.temperature,maxTokens:r.defaultModel.maxTokens},metadata:{version:i}}),{version:i}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);if(e.name!==void 0){this.setConfig({...this.getConfig(),name:e.name});let t=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),{version:t}}throw new o("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 o(`Both provider and model are required`,{component:`ConversationAgent`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new o(`AI Provider '${e.provider}' not found. Available: ${n.join(`, `)}`,{component:`ConversationAgent`,provider:e.provider,availableProviders:n});t.setCurrentProvider(e.provider,e.model);let r=this.getConfig();this.setConfig({...r,defaultModel:{...r.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.effort!==void 0&&{effort:e.effort}}}),this.logger.debug(`Model configuration updated`,e)}getModel(){let e=this.getAIProviders().getCurrentProvider();if(!e)throw new o(`No provider is currently set`,{component:`ConversationAgent`});let t=this.getConfig();return{provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.effort!==void 0&&{effort:t.defaultModel.effort}}}setSystemMessage(e){let t=this.getConfig();t.systemMessage=e,this.setConfig(t),this.setConfigUpdatedAt(Date.now())}getSystemMessage(){return this.getConfig().systemMessage}registerTool(e,t){if(t.hasTool(e.schema.name))throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Ni(e,t,n)},e.provenance),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},Ii=class extends We{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new ti,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 Ei(e,t);this.registry.register(n),k.debug(`Tool "${e.name}" registered successfully`)}addResultTool(e,t,n){this.ensureInitialized();let r=Ei.fromResult(e,t);Object.defineProperty(r,"provenance",{value:Ve(n),enumerable:!0}),this.registry.register(r)}removeTool(e){this.ensureInitialized(),this.registry.unregister(e)}getTool(e){return this.ensureInitialized(),this.registry.get(e)}getToolSchema(e){return this.ensureInitialized(),this.registry.get(e)?.schema}getTools(){this.ensureInitialized();let e=this.registry.getSchemas().filter(e=>this.isToolVisible(e.name));return this.allowedTools?e.filter(e=>this.allowedTools.includes(e.name)):e}getOfferedTools(){return Ai(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=>ki(e)&&!this.loadedDeferredTools.has(e.name))}loadDeferredTools(e){this.ensureInitialized();let n=e.map(e=>{let n=this.isToolVisible(e)?this.registry.get(e)?.schema:void 0;if(!n)throw new t(`Tool "${e}" is not registered, so it cannot be loaded`,e);return n});for(let e of n)ki(e)&&this.loadedDeferredTools.add(e.name);return n}async executeTool(e,n,r){let i=await this.executeToolResult(e,n,r);if(!i.success)throw new t(i.error||`Tool execution failed`,e);if(i.data===void 0)throw new t(`Tool execution succeeded but returned no data`,e);return i.data}async executeToolResult(e,n,r){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new t(`Tool "${e}" is not in the allowed tools list`,e);let i=this.registry.get(e);if(!i)throw new t(`Tool "${e}" is not registered`,e);let a=Ve(i.provenance),o;try{o=await i.execute(n,r)}catch(n){throw R(n)?n:n instanceof Error?new t(n.message,e,n):new t(String(n),e)}return He(o,a)}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],k.debug(`Set allowed tools: ${e.join(`, `)}`)}getAllowedTools(){return this.ensureInitialized(),this.allowedTools?[...this.allowedTools]:void 0}getRegistry(){return this.ensureInitialized(),this.registry}getToolCount(){return this.ensureInitialized(),this.registry.size()}};function Li(e){let t=Ri(e.metadata),n=Bi(e.usage);return t??n}function Ri(e){if(!e)return;let t=Bi({inputTokens:Vi(e,`inputTokens`),outputTokens:Vi(e,`outputTokens`),promptTokens:Vi(e,`promptTokens`),completionTokens:Vi(e,`completionTokens`),totalTokens:Vi(e,`totalTokens`),cacheReadTokens:Vi(e,`cacheReadTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return zi(n);if(Ui(n))return Bi(n)}function zi(e){try{return Bi(JSON.parse(e))}catch{return}}function Bi(e){if(!e)return;let t=Hi(e.inputTokens,e.promptTokens),n=Hi(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=Hi(e.totalTokens),i=Hi(e.cacheReadTokens),a=i!==void 0&&i>=0&&i<=t;return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r},...a&&{cacheReadTokens:i}}}function Vi(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Hi(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function Ui(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}const Wi=4;function Gi(e){return Math.ceil(JSON.stringify(e).length/4)}function Ki(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function qi(e,t={}){let n=Gi(e),r=Ji(e),i=r?.tokens,a=Yi(t.usageFloorTokens),o=r?.index===e.length-1,s=r?r.tokens+(o?0:Gi(e.slice(r.index+1))):0;return{usedTokens:o?Math.max(i??0,a??0):Math.max(n,s,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function Ji(e){for(let t=e.length-1;t>=0;t--){let n=Li(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function Yi(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const Xi=O(`agent-core:models`),Zi=new Set;function Qi(e,t,n){let r=`${e}:${t}`;Zi.has(r)||(Zi.add(r),Xi.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 $i=2e5,ea=new Map;function ta(...e){for(let t of e){let e=ea.get(t.id);e&&!na(e,t)&&Xi.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)`),ea.set(t.id,t)}}function na(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function ra(e){return ea.get(e)}function ia(e){let t=ra(e)?.contextWindow;return t===void 0?(Qi(e,`context window`,$i),$i):t}const aa=16384;function oa(e){let t=ra(e)?.maxOutput;return t===void 0?(Qi(e,`max output`,aa),aa):t}function sa(e){return ra(e)?.name??e}function ca(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 la(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(ki);return i.length===0?`off`:i.length>15||Ki(i)/ia(t)>=.1?`on`:`off`}function ua(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function da(e){let t=new Ii({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:la(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var fa=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)}},pa=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 o(`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 ma(e){return{moduleManager:new fa(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new pa(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new Fi(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 ha={ASSIGNED:`assigned`,COMPLETED:`completed`},ga=`task`,_a={MESSAGE:`message`,INPUT:`input`},va=`user`;function ya(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 ba(e,t,n,r,i){fi(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:Kt,ownerId:t,ownerPath:Sa(t,n)})}function xa(){return new $r({enabled:!0,events:[P.MODULE_INITIALIZE_START,P.MODULE_INITIALIZE_COMPLETE,P.MODULE_INITIALIZE_ERROR,P.MODULE_EXECUTION_START,P.MODULE_EXECUTION_COMPLETE,P.MODULE_EXECUTION_ERROR,P.MODULE_DISPOSE_START,P.MODULE_DISPOSE_COMPLETE,P.MODULE_DISPOSE_ERROR]})}function Sa(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function Ca(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.driverId&&{driverId:t.driverId},...t.turnSource&&{turnSource:t.turnSource},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},awaitProviderSettlement:t.awaitProviderSettlement,...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onThinkingDelta&&{onThinkingDelta:t.onThinkingDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.executionJournal&&{executionJournal:t.executionJournal},...t.maxExecutionRounds!==void 0&&{maxExecutionRounds:t.maxExecutionRounds},...t.maxSameToolInputs!==void 0&&{maxSameToolInputs:t.maxSameToolInputs},...t.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:t.allowToolOnlyCompletion},...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.temperature!==void 0&&{temperature:t.temperature},...t.toolChoice!==void 0&&{toolChoice:t.toolChoice},...t.withholdHostedTools===!0&&{withholdHostedTools:!0},...t.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:t.ephemeralSystemContext},...t.traceContext!==void 0&&{traceContext:t.traceContext}}}async function wa(e,t,n={},r){try{e.emitAgentEvent(A.EXECUTION_START,{}),e.logger.debug(`Starting ConversationAgent execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=await e.getExecutionService().execute(t,i,a,Ca(e,n));if(e.logger.debug(`ConversationAgent execution completed`,{success:o.success,duration:o.duration,tokensUsed:o.tokensUsed,toolsExecuted:o.toolsExecuted,interrupted:o.interrupted}),o.interrupted)return e.emitAgentEvent(A.EXECUTION_COMPLETE,{}),o.response;if(!o.success)throw o.error??Error(`[STRICT-POLICY] Failed execution result missing error field — every success:false result must carry error`);return e.emitAgentEvent(A.EXECUTION_COMPLETE,{}),o.response}catch(t){throw t instanceof I?t:(e.logger.error(`ConversationAgent execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(A.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}}async function*Ta(e,t,n={},r){let i=!1;try{e.emitAgentEvent(A.EXECUTION_START,{}),e.logger.debug(`Starting ConversationAgent streaming execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=yield*e.getExecutionService().executeStream(t,i,a,Ca(e,n));if(!o.success)throw o.error??Error(`[STRICT-POLICY] Failed execution result missing error field — every success:false result must carry error`);return o.response}catch(t){throw t instanceof I?(i=!0,t):(e.logger.error(`ConversationAgent streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(A.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}finally{i||e.emitAgentEvent(A.EXECUTION_COMPLETE,{})}}function Ea(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function Da(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 Ua(e,t,n,r,i,a,o){e.emitExecution(j.START,{parameters:{input:t,agentConfiguration:i.aiProviderInfo,availableTools:i.toolsInfo,toolCount:i.toolsInfo.length,hasTools:i.toolsInfo.length>0,systemMessage:n.systemMessage,provider:n.defaultModel.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},metadata:{method:`execute`,inputLength:t.length,messageCount:r.length,aiProvider:i.aiProviderInfo.providerName,model:i.aiProviderInfo.model,toolsAvailable:i.toolsInfo.map(e=>e.name),agentCapabilities:{canUseTools:i.toolsInfo.length>0,supportedActions:i.toolsInfo.map(e=>e.name)}}},a,o)}function Wa(e,t,n,r){e.emitExecution(j.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:Ha(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 Ga(e,t,n,r,i,a,o,s){if(typeof n.content!=`string`||n.content.length===0)throw Error(`[EXECUTION] assistant response must have content or tool calls`);if(!(n.timestamp instanceof Date))throw Error(`[EXECUTION] assistant response timestamp is required`);let c=n.content,l=n.timestamp,u=new Date().getTime()-l.getTime();e.emitWithContext(j.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:Ha(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(Ha(c)/200),hasCodeBlocks:/```/.test(c),hasLinks:/https?:\/\//.test(c),complexity:c.length>1e3?`high`:c.length>300?`medium`:`low`}},metadata:{executionId:r,round:i,completed:!0,reason:`no_tool_calls`,responseCharacteristics:{hasQuestions:c.includes(`?`),isError:/error|fail|wrong/i.test(c),isComplete:/complete|done|finish/i.test(c),containsNumbers:/\d/.test(c)}}},()=>e.buildResponseOwnerContext(a,r,o,s),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for response event`);return U(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function Ka(e,t,n,r,i,a,o,s,c,l){let u=n.map(e=>{if(!e.id||e.id.length===0)throw Error(`[EXECUTION] Tool call missing id for tool results ready payload`);return e.id});if(u.length===0)throw Error(`[EXECUTION] Tool results ready requires toolCallIds`);let d=()=>e.buildThinkingOwnerContext(a,o,c,l),f=e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for tool results event`);return U(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})};e.emitWithContext(j.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(j.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:i.length,round:s},metadata:{toolsExecuted:r.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:s}},d,f)}var qa=class{queuedAt=new Date().toISOString();pending;constructor(e,t){this.pending=new Set(e.filter((e,n)=>!t?.has(n)))}end(e,t){if(this.pending.delete(e))try{let n=new Date,r=n.toISOString();Promise.resolve(e.eventService?.emit(Ci.COMPLETED,{executionId:e.executionId,queuedAt:this.queuedAt,timestamp:n,endedAt:r,disposition:t})).catch(()=>void 0)}catch{}}finish(){for(let e of this.pending)this.end(e,`not-dispatched`)}};function Ja(e){e.wake?.(),e.changed=new Promise(t=>{e.wake=t})}function Ya(e){let t=new Set;for(let n of e.requests){let{executionId:e}=eo(n);if(t.has(e))throw new r(`Scheduling requires unique call IDs`);t.add(e)}let n=new Map;for(let[i,a]of e.scheduling){if(!t.has(i))throw new r(`Scheduling names an unknown call: ${i}`);let e=[...a.dependsOn??[]];for(let n of e)if(!t.has(n))throw new r(`Scheduling dependency is unknown: ${n}`);let o=a.resources?.map(e=>{if(typeof e.key!=`string`||!e.key.trim()||e.access!==`read`&&e.access!==`write`)throw new r(`Scheduling requires nonempty resource identities and read/write access`);return{key:e.key,access:e.access}});n.set(i,{dependsOn:e,...o===void 0?{}:{resources:o}})}let i=new Set;for(;i.size<t.size;){let e=i.size;for(let e of t)(n.get(e)?.dependsOn??[]).every(e=>i.has(e))&&i.add(e);if(i.size===e)throw new r(`Scheduling dependencies contain a cycle`)}return n}function Xa(e,t){return e?.resources===void 0||t?.resources===void 0||e.resources.some(e=>t.resources.some(t=>e.key===t.key&&(e.access===`write`||t.access===`write`)))}function Za(e,t){let n=e.metadata?.toolProvenance;return typeof n!=`string`||typeof t.metadata?.toolProvenance==`string`?t:{...t,metadata:{...t.metadata,toolProvenance:n}}}async function Qa(e,t,n){let r=e.requests[t];e.queue.end(r,`not-dispatched`),eo(r);let i=Za(r,{executionId:r.executionId,toolName:r.toolName,success:!1,result:null,error:n,metadata:{errorCode:Zt,dispatchStatus:`not-dispatched`}});return r.eventService?.emit(M.CALL_ERROR,{timestamp:new Date,toolName:r.toolName,error:n}),await e.journal?.onResult(t,i),i}async function $a(e,t,n){let r=new Map(e.requests.map((e,t)=>[e.executionId,t]));for(;!n.fatalError&&n.pending.size>0;){let i=n.changed,a,o;for(let t of n.pending){let i=e.requests[t],s=e.scheduling.get(i.executionId),c=(s?.dependsOn??[]).map(e=>n.resultsByIndex[r.get(e)]);if(n.errorsByIndex.some(so)&&!e.continueOnError){a=t,o=`Skipped after an earlier call failed; this call was not dispatched`;break}if(c.some(e=>e!==void 0&&!e.success)){a=t,o=`Skipped because a required predecessor failed; this call was not dispatched`;break}if(!c.some(e=>e===void 0)&&![...n.active].some(t=>Xa(s,e.scheduling.get(e.requests[t].executionId)))){a=t;break}}if(a===void 0){await i;continue}n.pending.delete(a),n.active.add(a);try{if(o){let t=await Qa(e,a,o);n.resultsByIndex[a]=t,n.errorsByIndex[a]=ao(t)}else await lo(e,t,n,a)}catch(e){if(!R(e))throw e;let t=gn(n.fatalError,e);R(t)&&(n.fatalError=t),e instanceof I||n.abort.abort(e)}finally{n.active.delete(a),Ja(n)}}}function eo(e){if(!e.executionId)throw new r(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new r(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new r(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function to(e,t){let n=eo(e),r=H(),i=e.traceContext?l(e.traceContext,r):void 0,a=h(`shell`,e.traceContext,v(r)),o=e.traceContext?h(`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 no(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null,metadata:{dispatchStatus:`not-dispatched`}}}function ro(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function io(e){let t=e.argumentDecodeError;if(e.eventService&&t!==void 0){let n={timestamp:new Date,toolName:e.toolName,error:t};e.eventService.emit(M.CALL_ERROR,n)}return{toolName:e.toolName,result:null,success:!1,error:t,executionId:e.executionId,metadata:{errorCode:Xt,requestedTool:e.toolName,dispatchStatus:`not-dispatched`}}}function ao(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function oo(e){return e!==void 0}function so(e){return e!==void 0}function co(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 lo(e,t,n,r){let i=e.requests[r];if(i)try{let a=await mo(e,t,i,r);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=ao(a))}catch(e){if(R(e)){let t=gn(n.fatalError,e);R(t)&&(n.fatalError=t),e instanceof I||n.abort.abort(e);return}let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=ro(i,t)}}async function uo(e,t,n){for(;!n.fatalError&&n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await lo(e,t,n,r)}}async function fo(e,t){let n=e;if(n.scheduling)try{n={...n,scheduling:Ya(n)}}catch(e){let t=e instanceof Error?e.message:String(e),r=[];for(let[e]of n.requests.entries()){let i=n.recoveredResults?.get(e);r.push(i?structuredClone(i):await Qa(n,e,`Invalid scheduling policy: ${t}; this call was not dispatched`))}return{results:r,errors:r.filter(e=>!e.success).map(ao)}}let r=new AbortController,i=n.journal||n.scheduling?{...n,signal:n.signal?AbortSignal.any([n.signal,r.signal]):r.signal}:n,a={resultsByIndex:Array(n.requests.length),errorsByIndex:Array(n.requests.length),nextRequestIndex:0,abort:r};if(n.scheduling){a.pending=new Set(n.requests.map((e,t)=>t)),a.active=new Set,Ja(a);for(let[e,t]of n.recoveredResults??[])a.pending.delete(e)&&(a.resultsByIndex[e]=structuredClone(t),t.success||(a.errorsByIndex[e]=ao(t)))}let o=co(n.requests.length,n.maxConcurrency),s=Array.from({length:o},()=>n.scheduling?$a(i,t,a):uo(i,t,a));if(await Promise.all(s),a.fatalError)throw a.fatalError;let c=a.resultsByIndex.filter(oo),l=a.errorsByIndex.filter(so);if(!n.scheduling&&l.length>0&&!n.continueOnError)throw l[0];return{results:c,errors:l}}async function po(e,t){let n=[],r=[],i=!1;for(let[a,o]of e.requests.entries()){if(i&&!e.recoveredResults?.has(a)){try{eo(o)}catch(e){r.push(e instanceof Error?e:Error(String(e)));continue}let t=await Qa(e,a,`Skipped after an earlier call failed; this call was not dispatched`);n.push(t);continue}try{let s=await mo(e,t,o,a);n.push(s),s.success||r.push(ao(s)),!s.success&&!e.continueOnError&&(i=!0)}catch(t){if(R(t))throw t;let n=t instanceof Error?t:Error(String(t));r.push(n),e.continueOnError||(i=!0)}}return{results:n,errors:r}}async function mo(e,t,n,r){let i=e.recoveredResults?.get(r);if(i)return structuredClone(i);e.queue.end(n,e.signal?.aborted||n.argumentDecodeError!==void 0?`not-dispatched`:`admission-started`);let a,o=e.journal;if(e.signal?.aborted)a=no(n);else if(n.argumentDecodeError!==void 0)a=io(n);else if(o&&await o.beforeDispatch(r),e.signal?.aborted)a=no(n);else{let i={...to(n,e.signal),...o?.continuation?{continuation:o.continuation(r)}:{},...o?.beforeEffect?{beforeToolEffect:e=>o.beforeEffect(r,e)}:{}};e.lifecycle&&await e.lifecycle.beforeDispatch(r,i);try{a=await ho(e,r,()=>t.executeTool(n.toolName,n.parameters,i))}catch(e){if(R(e))throw e;a=ro(n,e instanceof Error?e:Error(String(e)))}if(a.metadata?.dispatchStatus!==void 0){let{dispatchStatus:e,...t}=a.metadata;a={...a,metadata:t}}e.lifecycle&&await e.lifecycle.onResult(r,i,a)}return a=Za(n,a),await e.journal?.onResult(r,a),a}async function ho(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?gn(r.error,e):e}}if(`error`in r)throw r.error;return r.result}async function go(e,t,n){n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`);let r=new qa(e.requests,e.recoveredResults),i={...e,queue:r};try{return e.scheduling||e.mode===`parallel`?await fo(e.mode===`sequential`?{...i,maxConcurrency:1}:i,t):await po(i,t)}finally{r.finish()}}var _o=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=Mt){this.tools=e,this.logger=t,this.deferredToolCatalog={listDeferredTools:()=>this.tools.listDeferredTools(),loadDeferredTools:e=>this.tools.loadDeferredTools(e)}}getLoadedDeferredTools(){return this.tools.getLoadedDeferredTools?.()}restoreLoadedDeferredTools(e){for(let t of e)if(!this.tools.hasTool(t))throw new L(`EXECUTION_RECOVERY_INVALID`,`Recovery tool is no longer registered: ${t}`);let t=new Set(this.tools.getTools().map(e=>e.name));this.tools.loadDeferredTools(e.filter(e=>t.has(e)))}setAskHandler(e){this.askHandler=e}async executeTool(e,t,n,i=`offered`){this.logger.debug(`Executing tool: ${e}`);let a;try{if(!n?.executionId)throw new r(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);a=Ve(this.tools.getTool?.(e)?.provenance),n.signal?.throwIfAborted();let o=i===`offered`&&this.tools.getToolSchema(e)?.deferLoading===!0&&!this.tools.isToolOffered(e);if(!this.tools.hasTool(e)||o){let t=(i===`registered`?this.tools.getTools():this.tools.getOfferedTools()).map(e=>e.name).sort(),r=yo(e,t,o),a=n.eventService;if(a){let t={timestamp:new Date,toolName:e,error:r};a.emit(M.CALL_ERROR,t)}return this.logger.warn(`Tool call skipped because requested tool is not registered`,{toolName:e,availableTools:t}),{success:!1,error:r,toolName:e,executionId:n.executionId,metadata:{errorCode:Yt,requestedTool:e,availableTools:t}}}let s=n.eventService;if(s){let n={timestamp:new Date,toolName:e,parameters:t};s.emit(M.CALL_START,n)}let{toolName:c,parameters:l,...u}=n,d={...u,deferredTools:this.deferredToolCatalog,toolName:e,parameters:t,executionId:n.executionId},f=He(this.tools.executeToolResult?await this.tools.executeToolResult(e,t,d):{success:!0,data:await this.tools.executeTool(e,t,d)},a);if(!f.success){let t=f.error||`Tool execution failed`;return s?.emit(M.CALL_ERROR,{timestamp:new Date,toolName:e,error:t}),{success:!1,error:t,result:f.data,parts:f.parts,metadata:f.metadata,toolName:e,executionId:d.executionId}}if(f.data===void 0)throw Error(`Tool execution succeeded but returned no data`);let p=f.data;if(this.logger.debug(`Tool execution completed: ${e}`),s){let t={timestamp:new Date,toolName:e,result:p};s.emit(M.CALL_COMPLETE,t),s.emit(M.CALL_RESPONSE_READY,t)}return{success:!0,result:p,...f.parts?{parts:f.parts}:{},...f.metadata?{metadata:f.metadata}:{},toolName:e,executionId:d.executionId}}catch(t){if(R(t))throw t;this.logger.error(`Tool execution failed: ${e}`);let r=t instanceof Error?t:Error(String(t)),i=n?.eventService;if(i&&n?.executionId){let t={timestamp:new Date,toolName:e,error:r.message};i.emit(M.CALL_ERROR,t)}let o=He({success:!1,error:r.message},a);return{success:!1,error:r.message,...o.parts?{parts:o.parts}:{},...o.metadata?{metadata:o.metadata}:{},toolName:e,executionId:n?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=vo(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:He({success:!0,metadata:t.metadataFactory?.(e)},Ve(this.tools.getTool?.(e.function.name)?.provenance)).metadata,...this.askHandler?{ask:this.askHandler}:{},deferredTools:this.deferredToolCatalog,...n.ok?{}:{argumentDecodeError:n.error}}})}async executeTools(e){return go(e,this,this.logger)}};function vo(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 yo(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 ${Oe} 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 bo(e,t){try{e()}catch(e){if(t===void 0)throw e}}function xo(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function So(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:qt,ownerId:r,ownerPath:i}}function Co(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...So(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:qt,ownerId:r,ownerPath:o}}function wo(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:Jt,ownerId:i,ownerPath:[...So(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function To(e,t,n,r,i,a){let o=Co(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:qt,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function Eo(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 Do=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=xo(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(fi(this.baseEventService))return this.baseEventService;if(!e)throw Error(`[EVENT-SERVICE] Missing ownerId for tool event context`);if(!t||t.length===0)throw Error(`[EVENT-SERVICE] Missing ownerPath for tool event context`);if(this.toolEventServices.has(e))return this.toolEventServices.get(e);let n=U(this.baseEventService,{ownerType:Jt,ownerId:e,ownerPath:t.map(e=>({...e}))});return this.toolEventServices.set(e,n),n}clearToolEventServices(){this.toolEventServices.clear()}getBaseEventService(){return this.baseEventService}buildExecutionOwnerContext(e,t){return So(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return Co(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return wo(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return To(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(fi(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){Ua(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){Wa(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){Ga(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){Ka(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function Oo(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function ko(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 Ao(e){return e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0}function jo(e,t,n,r,i,a){let o=e.getMessages(),s=ko(o,i.turnMessageId),c=s.filter(Ao).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:Oo(a,f)}:{}}}function Mo(e,t,n,r,i,a,o=`round`){return structuredClone({version:1,effectAdmission:`required`,messages:e,round:t.currentRound,contextLimit:ia(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 No(e,t,n){e.tools!==void 0&&(Ce(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function Po(e,t,n,r,i=!1){let a=Fo(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw sn();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(sn())};o?.addEventListener(`abort`,h,{once:!0});let g=n.onTextDelta,_=n.onThinkingDelta,v={...n,signal:s.signal,...g===void 0?{}:{onTextDelta:e=>{m(),g(e)}},onThinkingDelta:e=>{m(),_?.(e)}};m();try{let n=new Promise((e,t)=>{d=t});return u=(async()=>e(t,v))(),await Promise.race([u,n])}finally{l=!0,f(),o?.removeEventListener(`abort`,h),i&&u&&await u.then(()=>{},e=>{if(e instanceof F)throw e})}}function Fo(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function Io(e){let t={};for(let n of[`executionId`,`sessionId`,`userId`]){let r=e.executionContext?.[n];typeof r==`string`&&r.length>0&&(t[n]=r)}return e.messages&&(t.messages=e.messages),t}const Lo={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(Io(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(Io(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(Io(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(Io(t),t.executionResult)},onMessageAdded:async(e,t)=>{e.onMessageAdded&&t.message&&await e.onMessageAdded(t.message)},beforeToolCall:async(e,t)=>{e.beforeToolCall&&t.toolData&&await e.beforeToolCall(t.toolData.toolName,t.toolData.parameters,t.toolData)},beforeToolExecution:async(e,t)=>{e.beforeToolExecution&&t.toolData&&await e.beforeToolExecution(Io(t),t.toolData)},afterToolCall:async(e,t)=>{e.afterToolCall&&t.toolData&&t.toolResult&&await e.afterToolCall(t.toolData.toolName,t.toolData.parameters,t.toolResult)},beforeConversation:async(e,t)=>{e.beforeConversation&&await e.beforeConversation(Io(t))},onStreamingChunk:async(e,t)=>{e.onStreamingChunk&&t.message&&await e.onStreamingChunk(t.message)},beforeRun:async(e,t)=>{e.beforeRun&&t.input&&await e.beforeRun(t.input,t.metadata)},afterRun:async(e,t)=>{e.afterRun&&t.input&&t.response&&await e.afterRun(t.input,t.response,t.metadata)},beforeProviderCall:async(e,t)=>{e.beforeProviderCall&&t.messages&&await e.beforeProviderCall(t.messages)},afterProviderCall:async(e,t)=>{e.afterProviderCall&&t.messages&&t.responseMessage&&await e.afterProviderCall(t.messages,t.responseMessage)},onError:async(e,t)=>{if(e.onError&&t.error){let n={action:`${qt}.${j.ERROR}`,metadata:{}},r=t.executionContext?.executionId;typeof r==`string`&&r.length>0&&(n.executionId=r);let i=t.executionContext?.sessionId;typeof i==`string`&&i.length>0&&(n.sessionId=i);let a=t.executionContext?.userId;typeof a==`string`&&a.length>0&&(n.userId=a),await e.onError(t.error,n)}}};async function W(e,t,n,r){let i=Lo[t];if(i)for(let a of e)try{await i(a,n)}catch(e){r.warn(`Plugin hook failed`,{pluginName:a.name,hookName:t,error:e instanceof Error?e.message:String(e)})}}function Ro(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 zo(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function Bo(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 Vo(e,t,n){let r=e.getCurrentProvider(),i=r?e.getProvider(r.provider):null;if(!r||!r.provider||!i)throw Error(`[EXECUTION] Provider is required`);let a=t.getTools();return{provider:i,currentInfo:r,aiProviderInfo:{providerName:r.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},toolsInfo:a.map(e=>{if(!e.description||e.description.length===0)throw Error(`[EXECUTION] Tool "${e.name}" is missing description`);return{name:e.name,description:e.description,parameters:Object.keys(e.parameters.properties??{})}}),readAvailableTools:()=>t.getOfferedTools(),deferredTools:t}}function Ho(e){if(!e.currentInfo)throw Error(`No AI provider configured`);if(!e.provider)throw Error(`AI provider '${e.currentInfo.provider}' not found`);if(typeof e.provider.chat!=`function`)throw Error(`Provider must have chat method to support execution`)}function Uo(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 Wo(e,t,n,r,i,a,o,s){let c=Date.now()-n.getTime();await W(a,`onError`,{error:e instanceof Error?e:Error(String(e)),executionContext:Jo(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(j.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function Go(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Ko(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function qo(e,t,n,r,i,a){return{messages:e,config:t,startTime:n,executionId:r,conversationId:i,...a?.sessionId&&{sessionId:a.sessionId},...a?.userId&&{userId:a.userId},...a?.metadata&&{metadata:a.metadata},...a?.signal&&{signal:a.signal},awaitProviderSettlement:a?.awaitProviderSettlement,...a?.onTextDelta&&{onTextDelta:a.onTextDelta},...a?.onThinkingDelta&&{onThinkingDelta:a.onThinkingDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.executionJournal&&{executionJournal:a.executionJournal},...a?.maxExecutionRounds!==void 0&&{maxExecutionRounds:a.maxExecutionRounds},...a?.maxSameToolInputs!==void 0&&{maxSameToolInputs:a.maxSameToolInputs},...a?.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:a.allowToolOnlyCompletion},...a?.maxTokens!==void 0&&{maxTokens:a.maxTokens},...a?.temperature!==void 0&&{temperature:a.temperature},...a?.toolChoice!==void 0&&{toolChoice:a.toolChoice},...a?.withholdHostedTools===!0&&{withholdHostedTools:!0},...a?.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:a.ephemeralSystemContext},...a?.traceContext!==void 0&&{traceContext:a.traceContext}}}function Jo(e){let t={conversationId:Ko(e,`plugin-context`),executionId:e.executionId,startTime:e.startTime.toISOString(),messageCount:e.messages.length};return e.sessionId&&(t.sessionId=e.sessionId),e.userId&&(t.userId=e.userId),t}function Yo(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
|
|
6
|
-
`)}function Xo(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=hr({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:Yo(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 Zo(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 Qo(e,t){e.current={provider:t.to.provider,model:t.to.model}}function $o(e,t,n,r){if(e===void 0||e.allowedOrigins.length===0)return;let i=!1;try{i=t.canPropagateTraceContext?.()===!0}catch{i=!1}if(!i){try{e.onPropagationUnavailable?.(n)}catch{}return}return m(e,r)}function es(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function ts(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 ns(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function rs(e,t,n,r){let i=Ro(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 is(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;ns(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let f=rs(d,t,n,i);Bo(f.toolChoice,f.tools),No(f,d,n);let{messages:p,outcome:m}=Xo(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)=>Un((e,t)=>(s?.(`invoked`,t.model??d),h(e,es(t,c?.()))),e,t,u),_=f.effort??`auto`;if(r){let e=r.lookup(p,K(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:_});if(e){s?.(`cache-hit`,f.model??d);let t={role:`assistant`,content:e,timestamp:new Date,id:H(),state:`complete`};return u&&await V(u.journal,{kind:`model-cache-hit`,checkpoint:u.checkpoint,recordId:`${u.callId}:cache`,executionId:u.executionId,callId:u.callId,...u.route(),response:t}),t}let n=await Po(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 Po(g,p,f,t.timeout,o||!!u)}function as(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 os(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 ss(e){let t=0,n=0,r,i=!1;for(let a of e){if(a.role!==`assistant`)continue;let e=us(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 cs(e){let t=ss(e.filter(e=>Xe(e)&&e.data!==void 0).map(Ze));if(t)return{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}function ls(){return H()}function us(e){let t=Li(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 ds(e){let t=os(e).provenance,n=us(e);return n?{...n,totalTokens:n.inputTokens+n.outputTokens,usageProvenance:t===`complete`?`complete`:`partial`}:{usageProvenance:t}}const fs=/^peer:[A-Za-z0-9._:-]{1,128}$/,ps=/<(\/?)(peer_message)/gi;function ms(e){return e.replace(ps,`<$1$2`)}function hs(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function gs(e){return fs.test(e)?e:`peer:unverified`}function _s(e){return e.map(e=>{if(e.type!==`text`)return e;let t=ms(e.text);return t===e.text?e:{...e,text:t}})}function vs(e){if(e.role===`tool`){let t=ms(e.content),n=e.parts?_s(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=hs(e),n=ms(e.content),r=e.parts?_s(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="${gs(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function ys(e){return e.map(vs)}async function bs(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=[...ys(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=Zo(t,t.aiProviderInfo.model,r);let g={model:t.aiProviderInfo.model,effort:n.defaultModel?.effort??`auto`,toolChoice:`none`,...n.defaultModel?.maxTokens!==void 0&&{maxTokens:n.defaultModel.maxTokens},...n.defaultModel?.temperature!==void 0&&{temperature:n.defaultModel.temperature},...o.signal&&{signal:o.signal},...o.onTextDelta&&{onTextDelta:o.onTextDelta},...o.onThinkingDelta&&{onThinkingDelta:o.onThinkingDelta},executionId:r,onModelFallback:e=>{Qo(u,e),o.onExecutionEvent?.(bi.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,ee;try{S=await Po((a,s)=>Un((e,n)=>{b.invoked=!0,b.startedAtMs=Date.now();let r=$o(o.traceContext,t.provider,t.currentInfo.provider,y);return t.provider.chat(e,es(n,r))},a,s,o.executionJournal?{journal:o.executionJournal,executionId:r,callId:y,checkpoint:Mo(e.getMessages(),i,o,n,c,l,`summary`),route:()=>({providerId:G(u,t),modelId:K(u,t.aiProviderInfo.model)})}:void 0),h,g,n.timeout,o.awaitProviderSettlement||!!o.executionJournal),x=`success`}catch(e){throw e instanceof F?ee=e:on(e,o.signal)&&(x=`interrupted`),e}finally{let e=b.invoked?os(S):{provenance:`absent`};bo(()=>{o.onExecutionEvent?.(yi.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}}})},ee)}if(!S)throw Error(`Forced summary provider returned no response.`);let C=(typeof S.content==`string`?S.content:``)||`Maximum rounds reached. Partial results available in conversation history.`,te={...S.metadata??{},round:i.currentRound,executionId:r,providerCallId:y,providerId:G(u,t),modelId:K(u,t.aiProviderInfo.model),...ds(S)};e.addAssistantMessage(C,[],te),d=!0,o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:C}),Eo(e,o,r,a,{round:i.currentRound})}catch(n){if(n instanceof F)throw n;if(d){s.warn(`Forced summary announcement failed`,{error:n instanceof Error?n.message:String(n)});return}if(on(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}),Eo(e,o,r,a,l)}}function xs(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 Ss=.95;function Cs(e,t,n){let r=qi(e,{usageFloorTokens:n}),i=ia(t),a=i*Ss,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:Ss*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function ws(e,t,n,r,i,a){let o=n.currentRound,s=Cs(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}),Eo(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function Ts(e,t,n,r,i=[],a){let o=0,s=0,c=Promise.resolve();return{wrappedOnTextDelta:s=>{if(e.onExecutionEvent?.(`provider_stream_raw_delta`,{executionId:n,conversationId:e.conversationId,round:r,sequence:o,delta:s}),o++,t.appendStreaming(s),e.onTextDelta?.(s),i.length>0&&a!==void 0){let e=Nr(s);c=c.then(()=>W(i,`onStreamingChunk`,{message:e},a))}},wrappedOnProviderNativeRawPayload:t=>{let i=t.sequence??s;s=Math.max(s,i+1),e.onExecutionEvent?.(`provider_native_raw_payload`,{executionId:n,conversationId:e.conversationId,round:r,...t,sequence:i})},settleStreamingChunkHooks:()=>c}}async function Es(e,t,n,r,i,a,o,s,c,l,u,d,f,p=Zo(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 is(e,t,n,r,{signal:i.signal,onTextDelta:u,...i.onThinkingDelta&&{onThinkingDelta:i.onThinkingDelta},onProviderNativeRawPayload:d,...i.maxTokens!==void 0&&{maxTokens:i.maxTokens},...i.temperature!==void 0&&{temperature:i.temperature},...i.withholdHostedTools===!0&&{nativeWebTools:{webSearch:!1,webFetch:!1}},executionId:s,onModelFallback:e=>{Qo(p,e),_.model=e.to.model,i.onExecutionEvent?.(bi.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=zo(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())},()=>$o(i.traceContext,n.provider,n.currentInfo.provider,m),p,i.executionJournal?{journal:i.executionJournal,executionId:s,callId:m,checkpoint:h,route:()=>({providerId:G(p,n),modelId:K(p,t.defaultModel.model)})}:void 0);if(v=c,typeof c.content==`string`&&c.content.length>0){let e=a.getPendingContent();if(c.content.startsWith(e)){let t=c.content.slice(e.length);t.length>0&&u(t)}else l.warn(`Provider deltas are not a prefix of its assembled message — committing the streamed text`,{conversationId:i.conversationId,round:o,streamedLength:e.length,assembledLength:c.content.length})}return i.onExecutionEvent?.(`provider_response_raw`,{executionId:s,conversationId:i.conversationId,round:o,effort:t.defaultModel?.effort??`high`,response:c,responseKind:`provider-normalized-message`}),i.onExecutionEvent?.(`provider_response_normalized`,{executionId:s,conversationId:i.conversationId,round:o,response:c,toolCallsCount:c.role===`assistant`&&Array.isArray(c.toolCalls)?c.toolCalls.length:0}),b=`success`,c}catch(e){if(e instanceof F)throw y=e,a.discardPending(),e;if(on(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}),Eo(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`?os(v):{provenance:`absent`};bo(()=>{i.onExecutionEvent?.(yi.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 Ds(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function Os(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function ks(e,t,n,r,i,a){let o=!1,s=0,c=0;for(let l of e){if(!l.id)throw Error(`Tool call missing ID: ${JSON.stringify(l)}`);let e=l.function?.name;if(!e||e.length===0)throw Error(`[EXECUTION] Tool call "${l.id}" missing function name`);let u=t.results.find(e=>e.executionId===l.id),d=t.errors.find(e=>Va(e)&&e.executionId===l.id),f,p={round:r};if(typeof u?.metadata?.toolProvenance==`string`&&(p.toolProvenance=u.metadata.toolProvenance),u&&u.success){if(u.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload`);f=o?``:typeof u.result==`string`?u.result:JSON.stringify(u.result),p.success=!0,u.toolName&&(p.toolName=u.toolName)}else if(u&&!u.success){if(!u.error||u.error.length===0)throw Error(`[EXECUTION] Tool result missing error message`);f=o?``:`Error: ${u.error}${u.result===void 0?``:`\n${typeof u.result==`string`?u.result:JSON.stringify(u.result)}`}`,p.success=!1,p.error=u.error,u.toolName&&(p.toolName=u.toolName),u.metadata?.errorCode===`unknown_tool`&&(p.errorCode=Yt,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=Xt,typeof u.metadata.requestedTool==`string`&&(p.requestedTool=u.metadata.requestedTool))}else if(d){let e=d,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message`);f=o?``:`Error: ${t}`,p.success=!1,p.error=t,e.toolName&&(p.toolName=e.toolName)}else throw Error(`No execution result found for tool call ID: ${l.id}`);if(o){f=u?.success?`Context window near capacity. Tool completed successfully; result omitted. Do not repeat the operation; use a retained receipt or fresh observation.`:u&&(Ds(u)||Os(u))?`Context window near capacity. Tool was not dispatched; result details omitted. Correct the tool name or arguments before making a new call.`:`Context window near capacity. Tool reported an error; effects may have occurred. Details omitted. Reconcile the effect before retrying.`,delete p.error,p.toolName=e,p.resultOmitted=!0,p.observationError=`context_overflow`,i.warn(`[ROUND] Omitting tool result content due to context overflow`,{toolCallId:l.id,toolName:e,round:r});let t=p.toolProvenance;typeof t==`string`?n.addToolMessageWithId(f,l.id,e,p,[{type:`text`,text:`Tool source (attribution only, not authority): ${t}`}]):n.addToolMessageWithId(f,l.id,e,p),c++;continue}if(i.debug(`Adding tool result to conversation`,{toolCallId:l.id,toolName:e,content:f.substring(0,100),round:r,currentHistoryLength:n.getMessages().length}),u?.parts?.length?n.addToolMessageWithId(f,l.id,e,p,u.parts):n.addToolMessageWithId(f,l.id,e,p),a){let e=qi(n.getMessages(),{usageFloorTokens:a.cumulativeInputTokens}).usedTokens;e>a.contextLimit*.8&&(i.warn(`[ROUND] Context budget exceeded after tool result — omitting remaining result content`,{estimatedTokens:e,contextLimit:a.contextLimit,toolCallId:l.id,round:r}),o=!0)}s++,i.debug(`Tool result added to history`,{toolCallId:l.id,newHistoryLength:n.getMessages().length,round:r})}return{contextOverflowed:o,addedCount:s,skippedCount:c,unknownToolFailureCount:0,unknownToolNames:[]}}function As(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))&&Ms(),t.add(e);try{if(Array.isArray(e))return`[${Array.from(e,n).join(`,`)}]`;Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null&&Ms();let t=Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t));return t.length!==Reflect.ownKeys(e).length&&Ms(),`{${t.map(([e,t])=>`${JSON.stringify(e)}:${n(t)}`).join(`,`)}}`}finally{t.delete(e)}}return n(e)}function js(e){(!e||typeof e!=`object`||Array.isArray(e))&&Ms(),As(e)}function Ms(){throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool continuations require finite plain JSON objects`)}function Ns(e,t,n=[]){let r=structuredClone(t),i=structuredClone(n),a=!1,o,s=!1,c=!1,l=Promise.resolve();return{continuation:{get action(){return structuredClone(r)},get waits(){return structuredClone(i)},request:t=>{if(c)return Promise.reject(new L(`EXECUTION_RECOVERY_INVALID`,`The tool continuation has already settled`));let n=structuredClone(t),u=l.then(async()=>{if(o)throw o;if(a)throw new L(`EXECUTION_RECOVERY_REQUIRED`,`A started tool effect cannot become a pre-effect wait`,[r.actionId]);if(!n||typeof n.kind!=`string`||!n.kind)throw new L(`EXECUTION_RECOVERY_INVALID`,`Continuation request kind is required`);js(n.data);let t=As([n.kind,n.data]),c=i.find(e=>As([e.request.kind,e.request.data])===t);if(!c){let t={...r,requestId:H(),kind:n.kind,data:n.data};await V(e,{...r,kind:`tool-wait`,recordId:`${t.requestId}:wait`,request:{requestId:t.requestId,kind:t.kind,data:t.data}}),c={request:t},i.push(c)}if(c.response)return structuredClone(c.response.response);throw s=!0,new I(i.filter(e=>!e.response).map(e=>e.request))});return l=u.catch(e=>{e instanceof I||(o=e)}),u}},settle:async()=>{if(c=!0,await l,o)throw o;if(s)throw new I(i.filter(e=>!e.response).map(e=>e.request))},admit:async e=>{if(c)throw new L(`EXECUTION_RECOVERY_INVALID`,`The tool continuation has already settled`);if(await l,o)throw o;let t=i.filter(e=>!e.response);if(t.length)throw new I(t.map(e=>e.request));if(a)throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool effect admission was repeated`);a=!0;try{await e()}catch(e){throw o=e,e}}}}async function Ps(e,t){let n=[],r=[...e];for(let e of t.toolResponses??[]){let i=structuredClone(e);if(!i||typeof i.requestId!=`string`||!i.requestId||typeof i.responseId!=`string`||!i.responseId)throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool response identities are required`);js(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(As(a.response)!==As(i))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`Tool response identity was already used`);continue}let o=r.find(e=>e.kind===`tool-wait`&&e.request.requestId===i.requestId);if(!o||o.kind!==`tool-wait`||o.parentCallId!==t.callId||r.some(e=>`actionId`in e&&e.actionId===o.actionId&&(e.kind===`tool-effect-start`||e.kind===`tool-result`)))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`Tool request is absent, stale or already settled`);let s={kind:`tool-response`,recordId:`${i.requestId}:response`,executionId:o.executionId,actionId:o.actionId,parentCallId:o.parentCallId,toolCallId:o.toolCallId,toolName:o.toolName,response:i};n.push(s),r.push(s)}for(let e of n)t.signal?.throwIfAborted(),await V(t.journal,e);return r}function Fs(e,t,n,r){e.getMessages().slice(t).forEach((e,i)=>{r?.(`tool_message_committed`,{...n,index:i,message:e}),r?.(`history_mutation`,{...n,mutation:`append_message`,index:t+i,message:e})})}function Is(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 te(e,a,n)}}async function Ls(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m){let{toolExecutionService:h,logger:g,eventEmitter:_}=c,v=f??l?.maxSameToolInputs;if(v!==void 0)try{Is(e,s,v)}catch(o){if(!(o instanceof te)||m)throw o;let s=t.getMessages().length,c=`Tool batch was not dispatched because the repeated-input limit was reached.`,l=h.createExecutionRequestsWithContext(e,{ownerPathBase:[]});for(let[n,r]of e.entries()){let e=l[n].metadata?.toolProvenance;t.addToolMessageWithId(`Error: ${c}`,r.id,r.function.name,{round:i,success:!1,notDispatched:!0,errorCode:o.code,error:c,toolName:r.function.name,...typeof e==`string`?{toolProvenance:e}:{}},typeof e==`string`?[{type:`text`,text:`Tool source (attribution only, not authority): ${e}`}]:void 0)}try{Fs(t,s,{executionId:r,conversationId:n,round:i,batchId:a},d)}catch(e){g.warn(`Loop-guard history observer failed after the batch was settled`,{error:e instanceof Error?e.message:String(e)})}throw o}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}:{}}}),ee=l?.toolExecutionPolicy?.(structuredClone(e)),C={requests:S,mode:ee?.mode??`parallel`,maxConcurrency:ee?.maxConcurrency??5,continueOnError:ee?.continueOnError??!0,scheduling:ee?.scheduling??new Map,signal:u};if(C.lifecycle={beforeDispatch:async(e,t)=>{let i=S[e];if(m?.recovery?.actions.get(i.executionId??``)?.dispatched)return;let a={toolData:t,executionContext:{executionId:r,sessionId:n}};await W(c.plugins,`beforeToolCall`,a,g),await W(c.plugins,`beforeToolExecution`,a,g)},onResult:async(e,t,i)=>{await W(c.plugins,`afterToolCall`,{toolData:t,toolResult:i,executionContext:{executionId:r,sessionId:n}},g)}},m){let{journal:e,parentCallId:t}=m,n=S.map(e=>m.recovery?.actions.get(e.executionId??``)),i=S.map(e=>({actionId:m.recovery?.actions.get(e.executionId??``)?.actionId??H(),parentCallId:t,executionId:r,toolCallId:e.executionId??``,toolName:e.toolName})),a=i.map((t,r)=>Ns(e,t,n[r]?.waits));for(let t=0;t<S.length;t++){let r=S[t];r.argumentDecodeError!==void 0||n[t]?.intent||n[t]?.result||await V(e,{kind:`tool-intent`,recordId:`${i[t].actionId}:intent`,...i[t],parameters:r.parameters})}C.journal={continuation:e=>a[e].continuation,settle:e=>a[e].settle(),beforeDispatch:t=>n[t]?.dispatched?Promise.resolve():V(e,{kind:`tool-dispatch`,recordId:`${i[t].actionId}:dispatch`,...i[t]}),onResult:(t,n)=>V(e,{kind:`tool-result`,recordId:`${i[t].actionId}:result`,...i[t],result:n,loadedDeferredTools:h.getLoadedDeferredTools()}),beforeEffect:(t,n)=>a[t].admit(()=>V(e,{kind:`tool-effect-start`,recordId:`${i[t].actionId}:effect-start`,...i[t],parameters:n}))},C.recoveredResults=new Map(n.flatMap((e,t)=>e?.result?[[t,e.result]]:[]))}d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:x,mode:C.mode,maxConcurrency:C.maxConcurrency,requestCount:S.length,tools:S.map(e=>e.toolName)}),S.forEach((e,t)=>{d?.(`tool_execution_request`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.argumentDecodeError===void 0?e.parameters:{argumentDecodeError:e.argumentDecodeError},ownerPath:e.ownerPath})});let w=await h.executeTools(C),T=w.results.filter(Ds).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);w.results.forEach((e,t)=>{d?.(`tool_execution_result`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})});let ne=w.results.filter(e=>!Ds(e)&&!Os(e));s.toolsExecuted.push(...ne.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName})),s.toolCallOutcomes.push(...ne.map(e=>({...e.executionId===void 0?{}:{id:e.executionId},name:e.toolName??``,success:e.success})));let re=m?.recovery?.checkpoint.contextLimit??ia(l?.defaultModel?.model??``),ie=t.getMessages().length,ae=ks(e,w,t,i,g,{contextLimit:re,cumulativeInputTokens:s.cumulativeInputTokens});return Fs(t,ie,{executionId:r,conversationId:n,round:i,batchId:x},d),_.emitToolResultsEvents(e,w,s.toolsExecuted,n,r,i,a,o),_.clearToolEventServices(),{...ae,unknownToolFailureCount:T.length,unknownToolNames:T}}async function Rs(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=ys(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,Pr(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=ts(r,e);if(await W(l,`beforeProviderCall`,{messages:m},u),u.debug(`Sending messages to AI provider`,{round:p,messageCount:m.length,lastFewMessages:m.slice(-5).map(e=>({role:e.role,content:e.content?.substring(0,50),hasToolCalls:`toolCalls`in e&&!!e.toolCalls?.length,toolCallId:`toolCallId`in e?e.toolCallId:void 0}))}),d.emitWithContext(j.ASSISTANT_MESSAGE_START,{parameters:{round:p,messageCount:m.length},metadata:{round:p,thinkingNodeId:v}},()=>d.buildThinkingOwnerContext(r,i,v,y),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for thinking event`);return U(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),ws(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]`),tt(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),rt(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},zr=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 Rr(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 Br(){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 Vr(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 Hr=class extends nn{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=Br(),r=await this.withRetry(async()=>(n=Br(),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),Vr(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=Br(),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);Vr(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 Ur=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function Wr(e){return Ur.test(e)?e:void 0}var Gr=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Kr(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new w(`Invalid maxListeners option: ${e.maxListeners}. Must be a non-negative number.`,t,{maxListeners:e.maxListeners});if(e.buffer!==void 0&&e.buffer.maxSize!==void 0&&e.buffer.maxSize<0)throw new w(`Invalid buffer.maxSize option: ${e.buffer.maxSize}. Must be a non-negative number.`,t,{bufferMaxSize:e.buffer.maxSize});if(e.buffer!==void 0&&e.buffer.flushInterval!==void 0&&e.buffer.flushInterval<0)throw new w(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function qr(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 Jr(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 Yr(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Xr(e,t,n,r){let{listenerCounts:i,totalListeners:a}=Yr(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 Zr(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new w(`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 Qr(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 $r(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 ei=class extends tn{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 Gr,Kr(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[P.AGENT_EXECUTION_START,P.AGENT_EXECUTION_COMPLETE,P.AGENT_EXECUTION_ERROR,P.TOOL_BEFORE_EXECUTE,P.TOOL_AFTER_EXECUTE,P.TOOL_SUCCESS,P.TOOL_ERROR],maxListeners:e.maxListeners??100,async:e.async??!0,catchErrors:e.catchErrors??!0,filters:e.filters??{},buffer:e.buffer??{enabled:!1,maxSize:1e3,flushInterval:5e3},category:e.category??`event_processing`,priority:e.priority??Gt.HIGH,moduleEvents:e.moduleEvents??[],subscribeToAllModuleEvents:e.subscribeToAllModuleEvents??!1},this.pluginOptions.buffer.enabled&&(this.bufferTimer=setInterval(()=>{this.flushBuffer().catch(e=>{this.logger.error(`Buffered flush failed`,{error:e instanceof Error?e.message:String(e)})})},this.pluginOptions.buffer.flushInterval))}async beforeExecution(e){await this.emit(P.AGENT_EXECUTION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messageCount:e.messages?.length||0,...e.config&&{config:e.config}}})}async afterExecution(e,t){await this.emit(P.AGENT_EXECUTION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{duration:t?.duration,tokensUsed:t?.tokensUsed,toolsExecuted:t?.toolsExecuted}})}async beforeConversation(e){await this.emit(P.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(e=>({role:e.role,content:e.content||``,timestamp:e.timestamp?e.timestamp.toISOString():new Date().toISOString()})),config:e.config}})}async afterConversation(e,t){await this.emit(P.CONVERSATION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{response:t.content||t.response,tokensUsed:t.usage?.totalTokens||t.tokensUsed,toolCalls:t.toolCalls?.map(e=>({id:e.id||``,name:e.name||``,arguments:JSON.stringify(e.arguments||{}),result:String(e.result||``)}))}})}async beforeToolExecution(e,t){t&&await this.emit(P.TOOL_BEFORE_EXECUTE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.toolName,toolId:t.executionId,arguments:JSON.stringify(t.parameters??{})}})}async afterToolExecution(e,t){if(!(!t.toolCalls||t.toolCalls.length===0))for(let n of t.toolCalls){let r=n.result===null?P.TOOL_ERROR:P.TOOL_SUCCESS,i=$r(e,n,t.duration);await this.emit(r,i),await this.emit(P.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(P.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}})}on(e,t,n){let r=`handler_${this.nextHandlerId++}`;return Zr(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 Qr(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 Jr(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>qr(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 Xr(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 ti=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var ni=class{tools=new Map;register(e){if(!e.schema?.name)throw new r(`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 r(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new r(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new r(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new r(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))ri(t,n);if(e.parameters.required){let t=e.parameters.properties||{};for(let n of e.parameters.required)if(!t[n])throw new r(`Required parameter "${n}" is not defined in properties`)}}};function ri(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new r(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>ri(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new r(`Parameter "${e}" must declare a type or anyOf`);if(!ti.includes(t.type))throw new r(`Parameter "${e}" has invalid type "${t.type}"`);if(t.properties)for(let[n,r]of Object.entries(t.properties))ri(`${e}.${n}`,r);t.items&&ri(`${e}[]`,t.items)}function ii(e,n,r){let i=ur(r,n,`$`);if(i.length>0)throw new t(`output does not match the declared outputSchema: ${i.join(`; `)}`,e,void 0,{outputSchemaIssues:i})}function ai(e,t,n){let r=oi(e,t,n);return r?[r]:ur(n,t,`Parameter "${e}"`)}function oi(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 ${si(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${si(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${si(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${si(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${si(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 si(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function ci(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(...ai(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...ai(t,a,e))}return i}function li(e,t,n,r){let i=ci(e,t,n,r);return{isValid:i.length===0,errors:i}}var ui=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)}},di=class extends ui{emit(e,t,n){}};const fi=new di;function pi(e){return e===fi||e instanceof di}function mi(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 hi(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var gi=class extends ui{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??hi()},i=mi(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function _i(e,t){return new gi(e,t)}function vi(e,t){return _i(e,t)}var yi=class extends ui{emit(e,t,n){this.notifyListeners(e,t,n)}};const bi={COMPLETED:`span_completed`},xi={COMPLETED:`provider_call_completed`},Si={SWITCHED:`provider_fallback`};function Ci(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 wi={COMPLETED:`tool_body_completed`},Ti={COMPLETED:`tool_queue_completed`},Ei={DECIDED:`tool_permission_decided`},Di=`span`;var Oi=class e{resultExecutor;schema;fn;eventService;constructor(e,t,n){this.resultExecutor=n,this.schema=e,this.fn=t,this.validateConstructorInputs()}static fromResult(n,r){return new e(n,async(e,i)=>{let a=await r(e,i);if(!a.success)throw new t(a.error??`Tool execution failed`,n.name);if(a.data===void 0)throw new t(`Tool execution succeeded but returned no data`,n.name);return a.data},r)}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(e,n){let i=this.schema.name;if(!this.validate(e))throw new r(`Invalid parameters for tool "${i}": ${ci(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let a=Date.now(),o,s;try{this.resultExecutor?(s=await this.resultExecutor(e,n),o=s.data):o=await this.fn(e,n)}catch(a){throw R(a)||a instanceof t||a instanceof r?a:new t(`Function tool execution failed: ${a instanceof Error?a.message:String(a)}`,i,a instanceof Error?a:Error(String(a)),{parameterCount:Object.keys(e||{}).length,hasContext:!!n})}let c=Date.now()-a;this.schema.outputSchema&&(!s||s.success)&&ii(i,o,this.schema.outputSchema);let l=n?.instanceEventService??this.eventService;if(l){let e={timestamp:new Date,spanId:hi(),durationMs:c,op:i};l.emit(bi.COMPLETED,e)}return s||{success:!0,data:o,metadata:{executionTime:c,toolName:i,parameters:e}}}validate(e){return ci(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return li(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new r(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new r(`Tool function is required and must be a function`);if(!this.schema.name)throw new r(`Tool schema must have a name`)}};const ki=`at least one tool must stay resident; all tools cannot be deferred`,Ai=`a tool schema was withheld but no ${Oe} tool is offered; register the loader or turn tool search off`;function ji(e){return e.deferLoading===!0}function Mi(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!ji(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(ki);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(Ai);return r}function Ni(e){if(e.length>0&&e.every(ji))throw Error(ki)}var Pi=class extends Ue{moduleManager;pluginManager;get name(){return this.config.name}addPlugin(e){this.pluginManager.addPlugin(e)}removePlugin(e){return this.pluginManager.removePlugin(e)}getPlugin(e){return this.pluginManager.getPlugin(e)}getPlugins(){return this.pluginManager.getPlugins()}getPluginNames(){return this.pluginManager.getPluginNames()}async registerModule(e,t){return this.moduleManager.registerModule(e,t)}async unregisterModule(e){return this.moduleManager.unregisterModule(e)}getModule(e){return this.moduleManager.getModule(e)}getModulesByType(e){return this.moduleManager.getModulesByType(e)}getModules(){return this.moduleManager.getModules()}getModuleNames(){return this.moduleManager.getModuleNames()}hasModule(e){return this.moduleManager.hasModule(e)}async executeModule(e,t){return this.moduleManager.executeModule(e,t)}getModuleStats(e){return this.moduleManager.getModuleStats(e)}};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 Ii(e){if(!e.name)throw new o(`Agent name is required`,{component:`ConversationAgent`});if(!e.aiProviders||e.aiProviders.length===0)throw new o(`At least one AI provider is required`,{component:`ConversationAgent`});if(!e.defaultModel)throw new o(`Default model configuration is required`,{component:`ConversationAgent`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new o(`Default model must specify both provider and model`,{component:`ConversationAgent`});let t=e.aiProviders.map(e=>e.name),n=t.filter((e,n)=>t.indexOf(e)!==n);if(n.length>0)throw new o(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`ConversationAgent`,duplicates:n});if(e.providerOwnership!==void 0){if(!e.providerOwnership||typeof e.providerOwnership!=`object`||Object.getPrototypeOf(e.providerOwnership)!==Object.prototype&&Object.getPrototypeOf(e.providerOwnership)!==null)throw new o(`Provider ownership must be a registration-name record`);for(let[n,r]of Object.entries(e.providerOwnership))if(!t.includes(n)||r!==`owned`&&r!==`borrowed`)throw new o(`Invalid provider ownership for registration '${n}'`)}if(!t.includes(e.defaultModel.provider))throw new o(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`ConversationAgent`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var Li=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 o(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],n=this.getEventService();for(let r of e){n&&r.setEventService(n),this.getTools().addResultTool(r.schema,async(e,t)=>{if(!t)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Fi(r,e,t)},r.provenance);let e=r.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let r=this.getConfig();r.tools=e,this.setConfig(r);let i=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(A.CONFIG_UPDATED,{parameters:{tools:t,systemMessage:r.systemMessage,provider:r.defaultModel.provider,model:r.defaultModel.model,temperature:r.defaultModel.temperature,maxTokens:r.defaultModel.maxTokens},metadata:{version:i}}),{version:i}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);if(e.name!==void 0){this.setConfig({...this.getConfig(),name:e.name});let t=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),{version:t}}throw new o("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 o(`Both provider and model are required`,{component:`ConversationAgent`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new o(`AI Provider '${e.provider}' not found. Available: ${n.join(`, `)}`,{component:`ConversationAgent`,provider:e.provider,availableProviders:n});t.setCurrentProvider(e.provider,e.model);let r=this.getConfig();this.setConfig({...r,defaultModel:{...r.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.effort!==void 0&&{effort:e.effort}}}),this.logger.debug(`Model configuration updated`,e)}getModel(){let e=this.getAIProviders().getCurrentProvider();if(!e)throw new o(`No provider is currently set`,{component:`ConversationAgent`});let t=this.getConfig();return{provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.effort!==void 0&&{effort:t.defaultModel.effort}}}setSystemMessage(e){let t=this.getConfig();t.systemMessage=e,this.setConfig(t),this.setConfigUpdatedAt(Date.now())}getSystemMessage(){return this.getConfig().systemMessage}registerTool(e,t){if(t.hasTool(e.schema.name))throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Fi(e,t,n)},e.provenance),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},Ri=class extends We{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new ni,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 Oi(e,t);this.registry.register(n),k.debug(`Tool "${e.name}" registered successfully`)}addResultTool(e,t,n){this.ensureInitialized();let r=Oi.fromResult(e,t);Object.defineProperty(r,"provenance",{value:Ve(n),enumerable:!0}),this.registry.register(r)}removeTool(e){this.ensureInitialized(),this.registry.unregister(e)}getTool(e){return this.ensureInitialized(),this.registry.get(e)}getToolSchema(e){return this.ensureInitialized(),this.registry.get(e)?.schema}getTools(){this.ensureInitialized();let e=this.registry.getSchemas().filter(e=>this.isToolVisible(e.name));return this.allowedTools?e.filter(e=>this.allowedTools.includes(e.name)):e}getOfferedTools(){return Mi(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=>ji(e)&&!this.loadedDeferredTools.has(e.name))}loadDeferredTools(e){this.ensureInitialized();let n=e.map(e=>{let n=this.isToolVisible(e)?this.registry.get(e)?.schema:void 0;if(!n)throw new t(`Tool "${e}" is not registered, so it cannot be loaded`,e);return n});for(let e of n)ji(e)&&this.loadedDeferredTools.add(e.name);return n}async executeTool(e,n,r){let i=await this.executeToolResult(e,n,r);if(!i.success)throw new t(i.error||`Tool execution failed`,e);if(i.data===void 0)throw new t(`Tool execution succeeded but returned no data`,e);return i.data}async executeToolResult(e,n,r){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new t(`Tool "${e}" is not in the allowed tools list`,e);let i=this.registry.get(e);if(!i)throw new t(`Tool "${e}" is not registered`,e);let a=Ve(i.provenance),o;try{o=await i.execute(n,r)}catch(n){throw R(n)?n:n instanceof Error?new t(n.message,e,n):new t(String(n),e)}return He(o,a)}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],k.debug(`Set allowed tools: ${e.join(`, `)}`)}getAllowedTools(){return this.ensureInitialized(),this.allowedTools?[...this.allowedTools]:void 0}getRegistry(){return this.ensureInitialized(),this.registry}getToolCount(){return this.ensureInitialized(),this.registry.size()}};function zi(e){let t=Bi(e.metadata),n=Hi(e.usage);return t??n}function Bi(e){if(!e)return;let t=Hi({inputTokens:Ui(e,`inputTokens`),outputTokens:Ui(e,`outputTokens`),promptTokens:Ui(e,`promptTokens`),completionTokens:Ui(e,`completionTokens`),totalTokens:Ui(e,`totalTokens`),cacheReadTokens:Ui(e,`cacheReadTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return Vi(n);if(Gi(n))return Hi(n)}function Vi(e){try{return Hi(JSON.parse(e))}catch{return}}function Hi(e){if(!e)return;let t=Wi(e.inputTokens,e.promptTokens),n=Wi(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=Wi(e.totalTokens),i=Wi(e.cacheReadTokens),a=i!==void 0&&i>=0&&i<=t;return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r},...a&&{cacheReadTokens:i}}}function Ui(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Wi(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function Gi(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}const Ki=4;function qi(e){return Math.ceil(JSON.stringify(e).length/4)}function Ji(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function Yi(e,t={}){let n=qi(e),r=Xi(e),i=r?.tokens,a=Zi(t.usageFloorTokens),o=r?.index===e.length-1,s=r?r.tokens+(o?0:qi(e.slice(r.index+1))):0;return{usedTokens:o?Math.max(i??0,a??0):Math.max(n,s,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function Xi(e){for(let t=e.length-1;t>=0;t--){let n=zi(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function Zi(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const Qi=O(`agent-core:models`),$i=new Set;function ea(e,t,n){let r=`${e}:${t}`;$i.has(r)||($i.add(r),Qi.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 ta=2e5,na=new Map;function ra(...e){for(let t of e){let e=na.get(t.id);e&&!ia(e,t)&&Qi.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)`),na.set(t.id,t)}}function ia(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function aa(e){return na.get(e)}function oa(e){let t=aa(e)?.contextWindow;return t===void 0?(ea(e,`context window`,ta),ta):t}const sa=16384;function ca(e){let t=aa(e)?.maxOutput;return t===void 0?(ea(e,`max output`,sa),sa):t}function la(e){return aa(e)?.name??e}function ua(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 da(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(ji);return i.length===0?`off`:i.length>15||Ji(i)/oa(t)>=.1?`on`:`off`}function fa(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function pa(e){let t=new Ri({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:da(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var ma=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)}},ha=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 o(`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 ga(e){return{moduleManager:new ma(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new ha(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new Li(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 _a={ASSIGNED:`assigned`,COMPLETED:`completed`},va=`task`,ya={MESSAGE:`message`,INPUT:`input`},ba=`user`;function xa(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 Sa(e,t,n,r,i){pi(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:Kt,ownerId:t,ownerPath:wa(t,n)})}function Ca(){return new ei({enabled:!0,events:[P.MODULE_INITIALIZE_START,P.MODULE_INITIALIZE_COMPLETE,P.MODULE_INITIALIZE_ERROR,P.MODULE_EXECUTION_START,P.MODULE_EXECUTION_COMPLETE,P.MODULE_EXECUTION_ERROR,P.MODULE_DISPOSE_START,P.MODULE_DISPOSE_COMPLETE,P.MODULE_DISPOSE_ERROR]})}function wa(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function Ta(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.driverId&&{driverId:t.driverId},...t.turnSource&&{turnSource:t.turnSource},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},awaitProviderSettlement:t.awaitProviderSettlement,...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onThinkingDelta&&{onThinkingDelta:t.onThinkingDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.executionJournal&&{executionJournal:t.executionJournal},...t.maxExecutionRounds!==void 0&&{maxExecutionRounds:t.maxExecutionRounds},...t.maxSameToolInputs!==void 0&&{maxSameToolInputs:t.maxSameToolInputs},...t.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:t.allowToolOnlyCompletion},...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.temperature!==void 0&&{temperature:t.temperature},...t.toolChoice!==void 0&&{toolChoice:t.toolChoice},...t.withholdHostedTools===!0&&{withholdHostedTools:!0},...t.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:t.ephemeralSystemContext},...t.traceContext!==void 0&&{traceContext:t.traceContext}}}async function Ea(e,t,n={},r){try{e.emitAgentEvent(A.EXECUTION_START,{}),e.logger.debug(`Starting ConversationAgent execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=await e.getExecutionService().execute(t,i,a,Ta(e,n));if(e.logger.debug(`ConversationAgent execution completed`,{success:o.success,duration:o.duration,tokensUsed:o.tokensUsed,toolsExecuted:o.toolsExecuted,interrupted:o.interrupted}),o.interrupted)return e.emitAgentEvent(A.EXECUTION_COMPLETE,{}),o.response;if(!o.success)throw o.error??Error(`[STRICT-POLICY] Failed execution result missing error field — every success:false result must carry error`);return e.emitAgentEvent(A.EXECUTION_COMPLETE,{}),o.response}catch(t){throw t instanceof I?t:(e.logger.error(`ConversationAgent execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(A.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}}async function*Da(e,t,n={},r){let i=!1;try{e.emitAgentEvent(A.EXECUTION_START,{}),e.logger.debug(`Starting ConversationAgent streaming execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=yield*e.getExecutionService().executeStream(t,i,a,Ta(e,n));if(!o.success)throw o.error??Error(`[STRICT-POLICY] Failed execution result missing error field — every success:false result must carry error`);return o.response}catch(t){throw t instanceof I?(i=!0,t):(e.logger.error(`ConversationAgent streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(A.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}finally{i||e.emitAgentEvent(A.EXECUTION_COMPLETE,{})}}function Oa(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function ka(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 Aa(e,t,r,i){let a=(r.outputRetries??2)+1,o=Oa(i),s=t,c=[];for(let t=1;t<=a;t++){let n=Ma(i,await Ea(e,s,r,o));if(n.success)return n.value;c=n.issues,e.logger.debug(`Structured output validation failed`,{attempt:t,maxAttempts:a,issues:c}),t<a&&(s=ka(i,c))}throw new n(`response failed schema validation after ${a} attempt(s)`,c,a)}async function*ja(e,t,r,i){let a=(r.outputRetries??2)+1,o=Oa(i),s=t,c=[];for(let t=1;t<=a;t++){let n=Ma(i,yield*Da(e,s,r,o));if(n.success)return n.value;c=n.issues,e.logger.debug(`Structured output validation failed (stream)`,{attempt:t,maxAttempts:a,issues:c}),t<a&&(s=ka(i,c))}throw new n(`response failed schema validation after ${a} attempt(s)`,c,a)}function Ma(e,t){let n=mr(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 Na(e,t){return e.getConversationStore(t).getMessages().map(e=>({id:e.id,role:e.role,content:e.content,state:e.state,timestamp:e.timestamp,metadata:e.metadata,...e.parts===void 0?{}:{parts:structuredClone(e.parts)},...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{},...e.role===`tool`&&`name`in e?{name:e.name}:{}}))}function Pa(e,t){return e.getConversationStore(t).getHistory()}function Fa(e,t,n){e.getConversationStore(t).addEntry(n)}function Ia(e,t){e.getConversationStore(t).clear()}function La(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 Ra(e,t,n){e.getConversationStore(t).addMessage(n)}var za=class extends We{providers=new Map;retirements=new Set;closing=new WeakMap;currentProvider;currentModel;constructor(){super({readyOnConstruction:!0})}async doInitialize(){k.debug(`AIProviders initialized`)}async doDispose(){let e=[...this.providers.entries()];this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0;for(let[t,n]of e)n.ownership===`owned`&&this.retire(t,n.provider);await Promise.all(this.retirements),k.debug(`AIProviders disposed`)}retire(e,t){if(this.closing.has(t))return;let n=Promise.resolve().then(()=>t.close?.()).catch(t=>{k.warn(`Failed to close AI provider ${e}`,{error:t instanceof Error?t.message:String(t)})}).finally(()=>{this.retirements.delete(n),this.closing.delete(t)});this.closing.set(t,n),this.retirements.add(n)}addProvider(e,t,n={}){this.ensureInitialized();let i=ln.validateProviderName(e);if(!i.isValid)throw new r(`Invalid provider name: ${i.errors.join(`, `)}`);if(!t||typeof t!=`object`||Array.isArray(t))throw new r(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new r(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new r(`Provider must have a chat method`);let a=n.ownership===void 0?`owned`:n.ownership;if(a!==`owned`&&a!==`borrowed`)throw new r(`Provider ownership must be owned or borrowed`);this.providers.has(e)&&k.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.provider.name});let o=this.providers.get(e);this.providers.set(e,{provider:t,ownership:a}),o?.ownership===`owned`&&o.provider!==t&&this.retire(e,o.provider),k.debug(`AI provider "${e}" registered successfully`,{providerName:e,version:t.version,supportsStreaming:typeof t.chatStream==`function`})}removeProvider(e){if(this.ensureInitialized(),!this.providers.has(e)){k.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);this.providers.delete(e),t?.ownership===`owned`&&this.retire(e,t.provider),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,k.debug(`Cleared current provider selection after removing "${e}"`)),k.debug(`AI provider "${e}" removed successfully`)}getProvider(e){return this.ensureInitialized(),this.providers.get(e)?.provider}getProviders(){return this.ensureInitialized(),Object.fromEntries([...this.providers].map(([e,t])=>[e,t.provider]))}setCurrentProvider(e,t){if(this.ensureInitialized(),!this.providers.get(e))throw new o(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,k.debug(`Current AI provider set to "${e}" with model "${t}"`)}getCurrentProvider(){if(this.ensureInitialized(),!(!this.currentProvider||!this.currentModel))return{provider:this.currentProvider,model:this.currentModel}}isConfigured(){return this.ensureInitialized(),!!(this.currentProvider&&this.currentModel&&this.providers.has(this.currentProvider))}getCurrentProviderInstance(){if(!(!this.isConfigured()||!this.currentProvider))return this.providers.get(this.currentProvider)?.provider}getProviderNames(){return this.ensureInitialized(),Array.from(this.providers.keys())}getProvidersByPattern(e){this.ensureInitialized();let t=typeof e==`string`?new RegExp(e):e,n={};for(let[e,r]of this.providers)t.test(e)&&(n[e]=r.provider);return n}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return!1;let n=this.providers.get(t)?.provider;return!!(n&&typeof n.chatStream==`function`)}getProviderCount(){return this.ensureInitialized(),this.providers.size}},Ba=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 ae(`SHA-256`,`TEXT`);return t.update(e),t.getHash(`HEX`)}},Va=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new Ba;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 p(`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)}},Ha=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 Ua(e){return`executionId`in e||`toolName`in e}function Wa(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 Ga(e,t,n,r,i,a,o){e.emitExecution(j.START,{parameters:{input:t,agentConfiguration:i.aiProviderInfo,availableTools:i.toolsInfo,toolCount:i.toolsInfo.length,hasTools:i.toolsInfo.length>0,systemMessage:n.systemMessage,provider:n.defaultModel.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},metadata:{method:`execute`,inputLength:t.length,messageCount:r.length,aiProvider:i.aiProviderInfo.providerName,model:i.aiProviderInfo.model,toolsAvailable:i.toolsInfo.map(e=>e.name),agentCapabilities:{canUseTools:i.toolsInfo.length>0,supportedActions:i.toolsInfo.map(e=>e.name)}}},a,o)}function Ka(e,t,n,r){e.emitExecution(j.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:Wa(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 qa(e,t,n,r,i,a,o,s){if(typeof n.content!=`string`||n.content.length===0)throw Error(`[EXECUTION] assistant response must have content or tool calls`);if(!(n.timestamp instanceof Date))throw Error(`[EXECUTION] assistant response timestamp is required`);let c=n.content,l=n.timestamp,u=new Date().getTime()-l.getTime();e.emitWithContext(j.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:Wa(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(Wa(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 _i(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function Ja(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 _i(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})};e.emitWithContext(j.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(j.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:i.length,round:s},metadata:{toolsExecuted:r.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:s}},d,f)}var Ya=class{queuedAt=new Date().toISOString();pending;constructor(e,t){this.pending=new Set(e.filter((e,n)=>!t?.has(n)))}end(e,t){if(this.pending.delete(e))try{let n=new Date,r=n.toISOString();Promise.resolve(e.eventService?.emit(Ti.COMPLETED,{executionId:e.executionId,queuedAt:this.queuedAt,timestamp:n,endedAt:r,disposition:t})).catch(()=>void 0)}catch{}}finish(){for(let e of this.pending)this.end(e,`not-dispatched`)}};function Xa(e){e.wake?.(),e.changed=new Promise(t=>{e.wake=t})}function Za(e){let t=new Set;for(let n of e.requests){let{executionId:e}=no(n);if(t.has(e))throw new r(`Scheduling requires unique call IDs`);t.add(e)}let n=new Map;for(let[i,a]of e.scheduling){if(!t.has(i))throw new r(`Scheduling names an unknown call: ${i}`);let e=[...a.dependsOn??[]];for(let n of e)if(!t.has(n))throw new r(`Scheduling dependency is unknown: ${n}`);let o=a.resources?.map(e=>{if(typeof e.key!=`string`||!e.key.trim()||e.access!==`read`&&e.access!==`write`)throw new r(`Scheduling requires nonempty resource identities and read/write access`);return{key:e.key,access:e.access}});n.set(i,{dependsOn:e,...o===void 0?{}:{resources:o}})}let i=new Set;for(;i.size<t.size;){let e=i.size;for(let e of t)(n.get(e)?.dependsOn??[]).every(e=>i.has(e))&&i.add(e);if(i.size===e)throw new r(`Scheduling dependencies contain a cycle`)}return n}function Qa(e,t){return e?.resources===void 0||t?.resources===void 0||e.resources.some(e=>t.resources.some(t=>e.key===t.key&&(e.access===`write`||t.access===`write`)))}function $a(e,t){let n=e.metadata?.toolProvenance;return typeof n!=`string`||typeof t.metadata?.toolProvenance==`string`?t:{...t,metadata:{...t.metadata,toolProvenance:n}}}async function eo(e,t,n){let r=e.requests[t];e.queue.end(r,`not-dispatched`),no(r);let i=$a(r,{executionId:r.executionId,toolName:r.toolName,success:!1,result:null,error:n,metadata:{errorCode:Zt,dispatchStatus:`not-dispatched`}});return r.eventService?.emit(M.CALL_ERROR,{timestamp:new Date,toolName:r.toolName,error:n}),await e.journal?.onResult(t,i),i}async function to(e,t,n){let r=new Map(e.requests.map((e,t)=>[e.executionId,t]));for(;!n.fatalError&&n.pending.size>0;){let i=n.changed,a,o;for(let t of n.pending){let i=e.requests[t],s=e.scheduling.get(i.executionId),c=(s?.dependsOn??[]).map(e=>n.resultsByIndex[r.get(e)]);if(n.errorsByIndex.some(lo)&&!e.continueOnError){a=t,o=`Skipped after an earlier call failed; this call was not dispatched`;break}if(c.some(e=>e!==void 0&&!e.success)){a=t,o=`Skipped because a required predecessor failed; this call was not dispatched`;break}if(!c.some(e=>e===void 0)&&![...n.active].some(t=>Qa(s,e.scheduling.get(e.requests[t].executionId)))){a=t;break}}if(a===void 0){await i;continue}n.pending.delete(a),n.active.add(a);try{if(o){let t=await eo(e,a,o);n.resultsByIndex[a]=t,n.errorsByIndex[a]=so(t)}else await fo(e,t,n,a)}catch(e){if(!R(e))throw e;let t=gn(n.fatalError,e);R(t)&&(n.fatalError=t),e instanceof I||n.abort.abort(e)}finally{n.active.delete(a),Xa(n)}}}function no(e){if(!e.executionId)throw new r(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new r(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new r(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function ro(e,t){let n=no(e),r=W(),i=e.traceContext?l(e.traceContext,r):void 0,a=h(`shell`,e.traceContext,v(r)),o=e.traceContext?h(`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 io(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null,metadata:{dispatchStatus:`not-dispatched`}}}function ao(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function oo(e){let t=e.argumentDecodeError;if(e.eventService&&t!==void 0){let n={timestamp:new Date,toolName:e.toolName,error:t};e.eventService.emit(M.CALL_ERROR,n)}return{toolName:e.toolName,result:null,success:!1,error:t,executionId:e.executionId,metadata:{errorCode:Xt,requestedTool:e.toolName,dispatchStatus:`not-dispatched`}}}function so(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function co(e){return e!==void 0}function lo(e){return e!==void 0}function uo(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 fo(e,t,n,r){let i=e.requests[r];if(i)try{let a=await go(e,t,i,r);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=so(a))}catch(e){if(R(e)){let t=gn(n.fatalError,e);R(t)&&(n.fatalError=t),e instanceof I||n.abort.abort(e);return}let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=ao(i,t)}}async function po(e,t,n){for(;!n.fatalError&&n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await fo(e,t,n,r)}}async function mo(e,t){let n=e;if(n.scheduling)try{n={...n,scheduling:Za(n)}}catch(e){let t=e instanceof Error?e.message:String(e),r=[];for(let[e]of n.requests.entries()){let i=n.recoveredResults?.get(e);r.push(i?structuredClone(i):await eo(n,e,`Invalid scheduling policy: ${t}; this call was not dispatched`))}return{results:r,errors:r.filter(e=>!e.success).map(so)}}let r=new AbortController,i=n.journal||n.scheduling?{...n,signal:n.signal?AbortSignal.any([n.signal,r.signal]):r.signal}:n,a={resultsByIndex:Array(n.requests.length),errorsByIndex:Array(n.requests.length),nextRequestIndex:0,abort:r};if(n.scheduling){a.pending=new Set(n.requests.map((e,t)=>t)),a.active=new Set,Xa(a);for(let[e,t]of n.recoveredResults??[])a.pending.delete(e)&&(a.resultsByIndex[e]=structuredClone(t),t.success||(a.errorsByIndex[e]=so(t)))}let o=uo(n.requests.length,n.maxConcurrency),s=Array.from({length:o},()=>n.scheduling?to(i,t,a):po(i,t,a));if(await Promise.all(s),a.fatalError)throw a.fatalError;let c=a.resultsByIndex.filter(co),l=a.errorsByIndex.filter(lo);if(!n.scheduling&&l.length>0&&!n.continueOnError)throw l[0];return{results:c,errors:l}}async function ho(e,t){let n=[],r=[],i=!1;for(let[a,o]of e.requests.entries()){if(i&&!e.recoveredResults?.has(a)){try{no(o)}catch(e){r.push(e instanceof Error?e:Error(String(e)));continue}let t=await eo(e,a,`Skipped after an earlier call failed; this call was not dispatched`);n.push(t);continue}try{let s=await go(e,t,o,a);n.push(s),s.success||r.push(so(s)),!s.success&&!e.continueOnError&&(i=!0)}catch(t){if(R(t))throw t;let n=t instanceof Error?t:Error(String(t));r.push(n),e.continueOnError||(i=!0)}}return{results:n,errors:r}}async function go(e,t,n,r){let i=e.recoveredResults?.get(r);if(i)return structuredClone(i);e.queue.end(n,e.signal?.aborted||n.argumentDecodeError!==void 0?`not-dispatched`:`admission-started`);let a,o=e.journal;if(e.signal?.aborted)a=io(n);else if(n.argumentDecodeError!==void 0)a=oo(n);else if(o&&await o.beforeDispatch(r),e.signal?.aborted)a=io(n);else{let i={...ro(n,e.signal),...o?.continuation?{continuation:o.continuation(r)}:{},...o?.beforeEffect?{beforeToolEffect:e=>o.beforeEffect(r,e)}:{}};e.lifecycle&&await e.lifecycle.beforeDispatch(r,i);try{a=await _o(e,r,()=>t.executeTool(n.toolName,n.parameters,i))}catch(e){if(R(e))throw e;a=ao(n,e instanceof Error?e:Error(String(e)))}if(a.metadata?.dispatchStatus!==void 0){let{dispatchStatus:e,...t}=a.metadata;a={...a,metadata:t}}e.lifecycle&&await e.lifecycle.onResult(r,i,a)}return a=$a(n,a),await e.journal?.onResult(r,a),a}async function _o(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?gn(r.error,e):e}}if(`error`in r)throw r.error;return r.result}async function vo(e,t,n){n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`);let r=new Ya(e.requests,e.recoveredResults),i={...e,queue:r};try{return e.scheduling||e.mode===`parallel`?await mo(e.mode===`sequential`?{...i,maxConcurrency:1}:i,t):await ho(i,t)}finally{r.finish()}}var yo=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=Mt){this.tools=e,this.logger=t,this.deferredToolCatalog={listDeferredTools:()=>this.tools.listDeferredTools(),loadDeferredTools:e=>this.tools.loadDeferredTools(e)}}getLoadedDeferredTools(){return this.tools.getLoadedDeferredTools?.()}restoreLoadedDeferredTools(e){for(let t of e)if(!this.tools.hasTool(t))throw new L(`EXECUTION_RECOVERY_INVALID`,`Recovery tool is no longer registered: ${t}`);let t=new Set(this.tools.getTools().map(e=>e.name));this.tools.loadDeferredTools(e.filter(e=>t.has(e)))}setAskHandler(e){this.askHandler=e}async executeTool(e,t,n,i=`offered`){this.logger.debug(`Executing tool: ${e}`);let a;try{if(!n?.executionId)throw new r(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);a=Ve(this.tools.getTool?.(e)?.provenance),n.signal?.throwIfAborted();let o=i===`offered`&&this.tools.getToolSchema(e)?.deferLoading===!0&&!this.tools.isToolOffered(e);if(!this.tools.hasTool(e)||o){let t=(i===`registered`?this.tools.getTools():this.tools.getOfferedTools()).map(e=>e.name).sort(),r=xo(e,t,o),a=n.eventService;if(a){let t={timestamp:new Date,toolName:e,error:r};a.emit(M.CALL_ERROR,t)}return this.logger.warn(`Tool call skipped because requested tool is not registered`,{toolName:e,availableTools:t}),{success:!1,error:r,toolName:e,executionId:n.executionId,metadata:{errorCode:Yt,requestedTool:e,availableTools:t}}}let s=n.eventService;if(s){let n={timestamp:new Date,toolName:e,parameters:t};s.emit(M.CALL_START,n)}let{toolName:c,parameters:l,...u}=n,d={...u,deferredTools:this.deferredToolCatalog,toolName:e,parameters:t,executionId:n.executionId},f=He(this.tools.executeToolResult?await this.tools.executeToolResult(e,t,d):{success:!0,data:await this.tools.executeTool(e,t,d)},a);if(!f.success){let t=f.error||`Tool execution failed`;return s?.emit(M.CALL_ERROR,{timestamp:new Date,toolName:e,error:t}),{success:!1,error:t,result:f.data,parts:f.parts,metadata:f.metadata,toolName:e,executionId:d.executionId}}if(f.data===void 0)throw Error(`Tool execution succeeded but returned no data`);let p=f.data;if(this.logger.debug(`Tool execution completed: ${e}`),s){let t={timestamp:new Date,toolName:e,result:p};s.emit(M.CALL_COMPLETE,t),s.emit(M.CALL_RESPONSE_READY,t)}return{success:!0,result:p,...f.parts?{parts:f.parts}:{},...f.metadata?{metadata:f.metadata}:{},toolName:e,executionId:d.executionId}}catch(t){if(R(t))throw t;this.logger.error(`Tool execution failed: ${e}`);let r=t instanceof Error?t:Error(String(t)),i=n?.eventService;if(i&&n?.executionId){let t={timestamp:new Date,toolName:e,error:r.message};i.emit(M.CALL_ERROR,t)}let o=He({success:!1,error:r.message},a);return{success:!1,error:r.message,...o.parts?{parts:o.parts}:{},...o.metadata?{metadata:o.metadata}:{},toolName:e,executionId:n?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=bo(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:He({success:!0,metadata:t.metadataFactory?.(e)},Ve(this.tools.getTool?.(e.function.name)?.provenance)).metadata,...this.askHandler?{ask:this.askHandler}:{},deferredTools:this.deferredToolCatalog,...n.ok?{}:{argumentDecodeError:n.error}}})}async executeTools(e){return vo(e,this,this.logger)}};function bo(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 xo(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 ${Oe} 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 So(e,t){try{e()}catch(e){if(t===void 0)throw e}}function Co(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function wo(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:qt,ownerId:r,ownerPath:i}}function To(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...wo(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:qt,ownerId:r,ownerPath:o}}function Eo(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:Jt,ownerId:i,ownerPath:[...wo(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function Do(e,t,n,r,i,a){let o=To(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:qt,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function Oo(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 ko=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=Co(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(pi(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=_i(this.baseEventService,{ownerType:Jt,ownerId:e,ownerPath:t.map(e=>({...e}))});return this.toolEventServices.set(e,n),n}clearToolEventServices(){this.toolEventServices.clear()}getBaseEventService(){return this.baseEventService}buildExecutionOwnerContext(e,t){return wo(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return To(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return Eo(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return Do(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 _i(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(pi(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){Ga(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){Ka(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){qa(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){Ja(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function Ao(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function jo(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 Mo(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=jo(o,i.turnMessageId),c=s.filter(Mo).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:Ao(a,f)}:{}}}function Po(e,t,n,r,i,a,o=`round`){return structuredClone({version:1,effectAdmission:`required`,messages:e,round:t.currentRound,contextLimit:oa(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 Fo(e,t,n){e.tools!==void 0&&(Ce(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function Io(e,t,n,r,i=!1){let a=Lo(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw sn();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(sn())};o?.addEventListener(`abort`,h,{once:!0});let g=n.onTextDelta,_=n.onThinkingDelta,v={...n,signal:s.signal,...g===void 0?{}:{onTextDelta:e=>{m(),g(e)}},onThinkingDelta:e=>{m(),_?.(e)}};m();try{let n=new Promise((e,t)=>{d=t});return u=(async()=>e(t,v))(),await Promise.race([u,n])}finally{l=!0,f(),o?.removeEventListener(`abort`,h),i&&u&&await u.then(()=>{},e=>{if(e instanceof F)throw e})}}function Lo(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function Ro(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 zo={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(Ro(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(Ro(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(Ro(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(Ro(t),t.executionResult)},onMessageAdded:async(e,t)=>{e.onMessageAdded&&t.message&&await e.onMessageAdded(t.message)},beforeToolCall:async(e,t)=>{e.beforeToolCall&&t.toolData&&await e.beforeToolCall(t.toolData.toolName,t.toolData.parameters,t.toolData)},beforeToolExecution:async(e,t)=>{e.beforeToolExecution&&t.toolData&&await e.beforeToolExecution(Ro(t),t.toolData)},afterToolCall:async(e,t)=>{e.afterToolCall&&t.toolData&&t.toolResult&&await e.afterToolCall(t.toolData.toolName,t.toolData.parameters,t.toolResult)},beforeConversation:async(e,t)=>{e.beforeConversation&&await e.beforeConversation(Ro(t))},onStreamingChunk:async(e,t)=>{e.onStreamingChunk&&t.message&&await e.onStreamingChunk(t.message)},beforeRun:async(e,t)=>{e.beforeRun&&t.input&&await e.beforeRun(t.input,t.metadata)},afterRun:async(e,t)=>{e.afterRun&&t.input&&t.response&&await e.afterRun(t.input,t.response,t.metadata)},beforeProviderCall:async(e,t)=>{e.beforeProviderCall&&t.messages&&await e.beforeProviderCall(t.messages)},afterProviderCall:async(e,t)=>{e.afterProviderCall&&t.messages&&t.responseMessage&&await e.afterProviderCall(t.messages,t.responseMessage)},onError:async(e,t)=>{if(e.onError&&t.error){let n={action:`${qt}.${j.ERROR}`,metadata:{}},r=t.executionContext?.executionId;typeof r==`string`&&r.length>0&&(n.executionId=r);let i=t.executionContext?.sessionId;typeof i==`string`&&i.length>0&&(n.sessionId=i);let a=t.executionContext?.userId;typeof a==`string`&&a.length>0&&(n.userId=a),await e.onError(t.error,n)}}};async function G(e,t,n,r){let i=zo[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 Bo(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 Vo(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function Ho(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 Uo(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 Wo(e){if(!e.currentInfo)throw Error(`No AI provider configured`);if(!e.provider)throw Error(`AI provider '${e.currentInfo.provider}' not found`);if(typeof e.provider.chat!=`function`)throw Error(`Provider must have chat method to support execution`)}function Go(e,t,n,r,i){let a=e.getConversationStore(t);if(!a.getMessages().some(e=>e.role!==`system`)&&n.length>0){for(let e of n)if(e.role===`user`)a.addUserMessage(e.content,e.metadata,e.parts);else if(e.role===`assistant`)a.addAssistantMessage(e.content,e.toolCalls,e.metadata,e.parts);else if(e.role===`tool`){let t=e.metadata?.toolName;if(typeof t!=`string`||t.length===0)throw Error(`[EXECUTION] Tool message missing toolName metadata`);a.addToolMessageWithId(e.content,e.toolCallId,t,e.metadata,e.parts)}}let o=a.getMessages().some(e=>e.role===`system`);return r.systemMessage&&!o&&a.setSystemPrompt(r.systemMessage,{executionId:i}),a}async function Ko(e,t,n,r,i,a,o,s){let c=Date.now()-n.getTime();await G(a,`onError`,{error:e instanceof Error?e:Error(String(e)),executionContext:Xo(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(j.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function qo(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Jo(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?.onThinkingDelta&&{onThinkingDelta:a.onThinkingDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.executionJournal&&{executionJournal:a.executionJournal},...a?.maxExecutionRounds!==void 0&&{maxExecutionRounds:a.maxExecutionRounds},...a?.maxSameToolInputs!==void 0&&{maxSameToolInputs:a.maxSameToolInputs},...a?.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:a.allowToolOnlyCompletion},...a?.maxTokens!==void 0&&{maxTokens:a.maxTokens},...a?.temperature!==void 0&&{temperature:a.temperature},...a?.toolChoice!==void 0&&{toolChoice:a.toolChoice},...a?.withholdHostedTools===!0&&{withholdHostedTools:!0},...a?.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:a.ephemeralSystemContext},...a?.traceContext!==void 0&&{traceContext:a.traceContext}}}function Xo(e){let t={conversationId:Jo(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 Zo(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
|
|
6
|
+
`)}function Qo(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=gr({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:Zo(i.schema),id:W(),timestamp:new Date,state:`complete`},s=[...t,o];return a.mechanism===`json_object`?(e.responseFormat={type:`json_object`},{messages:s,outcome:{capability:a,sent:`json_object`,schemaInPrompt:!0}}):(delete e.responseFormat,{messages:s,outcome:{capability:a,sent:`omitted`,schemaInPrompt:!0}})}function $o(e,t,n){let r=e.provider.resolveModelRoute?.(t,n);return r===void 0||r.provider===e.currentInfo.provider&&r.model===t?{}:{current:r}}function K(e,t){return e.current?.provider??t.currentInfo.provider}function q(e,t){return e.current?.model??t}function es(e,t){e.current={provider:t.to.provider,model:t.to.model}}function ts(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 m(e,r)}function ns(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function rs(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 is(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function as(e,t,n,r){let i=Bo(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 os(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;is(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let f=as(d,t,n,i);Ho(f.toolChoice,f.tools),Fo(f,d,n);let{messages:p,outcome:m}=Qo(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)=>Un((e,t)=>(s?.(`invoked`,t.model??d),h(e,ns(t,c?.()))),e,t,u),_=f.effort??`auto`;if(r){let e=r.lookup(p,q(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:_});if(e){s?.(`cache-hit`,f.model??d);let t={role:`assistant`,content:e,timestamp:new Date,id:W(),state:`complete`};return u&&await V(u.journal,{kind:`model-cache-hit`,checkpoint:u.checkpoint,recordId:`${u.callId}:cache`,executionId:u.executionId,callId:u.callId,...u.route(),response:t}),t}let n=await Io(g,p,f,t.timeout,o||!!u);return typeof n.content==`string`&&r.store(p,q(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,n.content,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:_}),n}return Io(g,p,f,t.timeout,o||!!u)}function ss(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 cs(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 ls(e){let t=0,n=0,r,i=!1;for(let a of e){if(a.role!==`assistant`)continue;let e=fs(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 us(e){let t=ls(e.filter(e=>Xe(e)&&e.data!==void 0).map(Ze));if(t)return{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}function ds(){return W()}function fs(e){let t=zi(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 ps(e){let t=cs(e).provenance,n=fs(e);return n?{...n,totalTokens:n.inputTokens+n.outputTokens,usageProvenance:t===`complete`?`complete`:`partial`}:{usageProvenance:t}}const ms=/^peer:[A-Za-z0-9._:-]{1,128}$/,hs=/<(\/?)(peer_message)/gi;function gs(e){return e.replace(hs,`<$1$2`)}function _s(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function vs(e){return ms.test(e)?e:`peer:unverified`}function ys(e){return e.map(e=>{if(e.type!==`text`)return e;let t=gs(e.text);return t===e.text?e:{...e,text:t}})}function bs(e){if(e.role===`tool`){let t=gs(e.content),n=e.parts?ys(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=_s(e),n=gs(e.content),r=e.parts?ys(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="${vs(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function xs(e){return e.map(bs)}async function Ss(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=[...xs(e.getMessages()),{id:W(),role:`user`,content:s,state:`complete`,timestamp:new Date}],p=n.systemMessage??``,m=f.some(e=>e.role===`system`&&e.content===p),h=p&&!m?[{id:W(),role:`system`,content:p,state:`complete`,timestamp:new Date},...f]:f;u=$o(t,t.aiProviderInfo.model,r);let g={model:t.aiProviderInfo.model,effort:n.defaultModel?.effort??`auto`,toolChoice:`none`,...n.defaultModel?.maxTokens!==void 0&&{maxTokens:n.defaultModel.maxTokens},...n.defaultModel?.temperature!==void 0&&{temperature:n.defaultModel.temperature},...o.signal&&{signal:o.signal},...o.onTextDelta&&{onTextDelta:o.onTextDelta},...o.onThinkingDelta&&{onThinkingDelta:o.onThinkingDelta},executionId:r,onModelFallback:e=>{es(u,e),o.onExecutionEvent?.(Si.SWITCHED,{executionId:r,conversationId:a,round:i.currentRound,fromProvider:e.from.provider,fromModel:e.from.model,toProvider:e.to.provider,toModel:e.to.model,reason:e.reason}),_()}},_=()=>{o.onExecutionEvent?.(`provider_request`,{executionId:r,conversationId:a,round:i.currentRound,provider:K(u,t),model:q(u,t.aiProviderInfo.model),messages:h,forcedSummary:!0})};_();let v=Date.now(),y=W(),b={invoked:!1},x=`failure`,S,ee;try{S=await Io((a,s)=>Un((e,n)=>{b.invoked=!0,b.startedAtMs=Date.now();let r=ts(o.traceContext,t.provider,t.currentInfo.provider,y);return t.provider.chat(e,ns(n,r))},a,s,o.executionJournal?{journal:o.executionJournal,executionId:r,callId:y,checkpoint:Po(e.getMessages(),i,o,n,c,l,`summary`),route:()=>({providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model)})}:void 0),h,g,n.timeout,o.awaitProviderSettlement||!!o.executionJournal),x=`success`}catch(e){throw e instanceof F?ee=e:on(e,o.signal)&&(x=`interrupted`),e}finally{let e=b.invoked?cs(S):{provenance:`absent`};So(()=>{o.onExecutionEvent?.(xi.COMPLETED,{executionId:r,conversationId:a,round:i.currentRound,startedAt:new Date(b.startedAtMs??v).toISOString(),endedAt:new Date(Math.max(Date.now(),b.startedAtMs??v)).toISOString(),outcome:x,callId:y,disposition:b.invoked?`invoked`:`preflight-refused`,...b.invoked&&{providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model),...typeof S?.metadata?.providerRequestId==`string`&&{providerRequestId:S.metadata.providerRequestId}},usageProvenance:e.provenance,...`promptTokens`in e&&e.promptTokens!==void 0&&{promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens,...e.cacheReadTokens!==void 0&&{cacheReadTokens:e.cacheReadTokens}}})},ee)}if(!S)throw Error(`Forced summary provider returned no response.`);let C=(typeof S.content==`string`?S.content:``)||`Maximum rounds reached. Partial results available in conversation history.`,te={...S.metadata??{},round:i.currentRound,executionId:r,providerCallId:y,providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model),...ps(S)};e.addAssistantMessage(C,[],te),d=!0,o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:C}),Oo(e,o,r,a,{round:i.currentRound})}catch(n){if(n instanceof F)throw n;if(d){s.warn(`Forced summary announcement failed`,{error:n instanceof Error?n.message:String(n)});return}if(on(n,o.signal))throw n;i.providerFailure=n;let c=n instanceof Error?n.message:String(n);s.error(`Forced summary call failed`,{error:c,round:i.currentRound});let l={round:i.currentRound,executionId:r,providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model),providerError:!0};e.addAssistantMessage(`Request failed: ${c}`,[],{...l,forcedSummary:!0}),Oo(e,o,r,a,l)}}function Cs(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 ws=.95;function Ts(e,t,n){let r=Yi(e,{usageFloorTokens:n}),i=oa(t),a=i*ws,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:ws*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function Es(e,t,n,r,i,a){let o=n.currentRound,s=Ts(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}),Oo(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function Ds(e,t,n,r,i=[],a){let o=0,s=0,c=Promise.resolve();return{wrappedOnTextDelta:s=>{if(e.onExecutionEvent?.(`provider_stream_raw_delta`,{executionId:n,conversationId:e.conversationId,round:r,sequence:o,delta:s}),o++,t.appendStreaming(s),e.onTextDelta?.(s),i.length>0&&a!==void 0){let e=Pr(s);c=c.then(()=>G(i,`onStreamingChunk`,{message:e},a))}},wrappedOnProviderNativeRawPayload:t=>{let i=t.sequence??s;s=Math.max(s,i+1),e.onExecutionEvent?.(`provider_native_raw_payload`,{executionId:n,conversationId:e.conversationId,round:r,...t,sequence:i})},settleStreamingChunkHooks:()=>c}}async function Os(e,t,n,r,i,a,o,s,c,l,u,d,f,p=$o(n,t.defaultModel.model,s),m=W(),h){let g=Date.now(),_={disposition:`preflight-refused`},v,y,b=`failure`,x,S=e=>{i.onExecutionEvent?.(`provider_request`,{executionId:s,conversationId:i.conversationId,round:o,provider:K(p,n),model:q(p,t.defaultModel.model),effort:e.options.effort,messages:e.messages,tools:e.options.tools})};try{let c=await os(e,t,n,r,{signal:i.signal,onTextDelta:u,...i.onThinkingDelta&&{onThinkingDelta:i.onThinkingDelta},onProviderNativeRawPayload:d,...i.maxTokens!==void 0&&{maxTokens:i.maxTokens},...i.temperature!==void 0&&{temperature:i.temperature},...i.withholdHostedTools===!0&&{nativeWebTools:{webSearch:!1,webFetch:!1}},executionId:s,onModelFallback:e=>{es(p,e),_.model=e.to.model,i.onExecutionEvent?.(Si.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=Vo(i.toolChoice??t.defaultModel.toolChoice,o);return e===void 0?{}:{toolChoice:e}})()},e=>{x=e,S(e);let r=e.structuredOutput;r!==void 0&&i.onExecutionEvent?.(`structured_output_transport`,{executionId:s,conversationId:i.conversationId,round:o,provider:n.currentInfo.provider,model:t.defaultModel.model,mechanism:r.capability.mechanism,provenance:r.capability.provenance,sent:r.sent,schemaInPrompt:r.schemaInPrompt,...r.capability.reason!==void 0&&{reason:r.capability.reason}})},i.awaitProviderSettlement,(e,t)=>{_.disposition=e,_.model=q(p,t),e===`invoked`&&(_.startedAtMs=Date.now())},()=>ts(i.traceContext,n.provider,n.currentInfo.provider,m),p,i.executionJournal?{journal:i.executionJournal,executionId:s,callId:m,checkpoint:h,route:()=>({providerId:K(p,n),modelId:q(p,t.defaultModel.model)})}:void 0);if(v=c,typeof c.content==`string`&&c.content.length>0){let e=a.getPendingContent();if(c.content.startsWith(e)){let t=c.content.slice(e.length);t.length>0&&u(t)}else l.warn(`Provider deltas are not a prefix of its assembled message — committing the streamed text`,{conversationId:i.conversationId,round:o,streamedLength:e.length,assembledLength:c.content.length})}return i.onExecutionEvent?.(`provider_response_raw`,{executionId:s,conversationId:i.conversationId,round:o,effort:t.defaultModel?.effort??`high`,response:c,responseKind:`provider-normalized-message`}),i.onExecutionEvent?.(`provider_response_normalized`,{executionId:s,conversationId:i.conversationId,round:o,response:c,toolCallsCount:c.role===`assistant`&&Array.isArray(c.toolCalls)?c.toolCalls.length:0}),b=`success`,c}catch(e){if(e instanceof F)throw y=e,a.discardPending(),e;if(on(e,i.signal))throw b=`interrupted`,a.commitAssistant(`interrupted`,{round:o,usageObservationId:c,executionId:s,providerId:K(p,n),modelId:q(p,n.aiProviderInfo.model)}),e;a.discardPending(),f?.(e);let t=e instanceof Error?e.message:String(e);return l.error(`[ROUND] Provider call failed`,{error:t,round:o}),a.addAssistantMessage(`Request failed: ${t}`,[],{round:o,usageObservationId:c,executionId:s,providerId:K(p,n),modelId:q(p,n.aiProviderInfo.model),providerError:!0}),Oo(a,i,s,i.conversationId,{round:o,usageObservationId:c,executionId:s,providerId:K(p,n),modelId:q(p,n.aiProviderInfo.model),providerError:!0}),null}finally{let e=_.disposition===`invoked`?cs(v):{provenance:`absent`};So(()=>{i.onExecutionEvent?.(xi.COMPLETED,{executionId:s,conversationId:i.conversationId,round:o,startedAt:new Date(_.startedAtMs??g).toISOString(),endedAt:new Date(Math.max(Date.now(),_.startedAtMs??g)).toISOString(),outcome:b,callId:m,disposition:_.disposition,..._.disposition===`invoked`&&{providerId:K(p,n),..._.model!==void 0&&{modelId:_.model},...typeof v?.metadata?.providerRequestId==`string`&&{providerRequestId:v.metadata.providerRequestId}},usageProvenance:e.provenance,...`promptTokens`in e&&e.promptTokens!==void 0&&{promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens,...e.cacheReadTokens!==void 0&&{cacheReadTokens:e.cacheReadTokens}}})},y)}}function ks(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function As(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function js(e,t,n,r,i,a){let o=!1,s=0,c=0;for(let l of e){if(!l.id)throw Error(`Tool call missing ID: ${JSON.stringify(l)}`);let e=l.function?.name;if(!e||e.length===0)throw Error(`[EXECUTION] Tool call "${l.id}" missing function name`);let u=t.results.find(e=>e.executionId===l.id),d=t.errors.find(e=>Ua(e)&&e.executionId===l.id),f,p={round:r};if(typeof u?.metadata?.toolProvenance==`string`&&(p.toolProvenance=u.metadata.toolProvenance),u&&u.success){if(u.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload`);f=o?``:typeof u.result==`string`?u.result:JSON.stringify(u.result),p.success=!0,u.toolName&&(p.toolName=u.toolName)}else if(u&&!u.success){if(!u.error||u.error.length===0)throw Error(`[EXECUTION] Tool result missing error message`);f=o?``:`Error: ${u.error}${u.result===void 0?``:`\n${typeof u.result==`string`?u.result:JSON.stringify(u.result)}`}`,p.success=!1,p.error=u.error,u.toolName&&(p.toolName=u.toolName),u.metadata?.errorCode===`unknown_tool`&&(p.errorCode=Yt,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=Xt,typeof u.metadata.requestedTool==`string`&&(p.requestedTool=u.metadata.requestedTool))}else if(d){let e=d,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message`);f=o?``:`Error: ${t}`,p.success=!1,p.error=t,e.toolName&&(p.toolName=e.toolName)}else throw Error(`No execution result found for tool call ID: ${l.id}`);if(o){f=u?.success?`Context window near capacity. Tool completed successfully; result omitted. Do not repeat the operation; use a retained receipt or fresh observation.`:u&&(ks(u)||As(u))?`Context window near capacity. Tool was not dispatched; result details omitted. Correct the tool name or arguments before making a new call.`:`Context window near capacity. Tool reported an error; effects may have occurred. Details omitted. Reconcile the effect before retrying.`,delete p.error,p.toolName=e,p.resultOmitted=!0,p.observationError=`context_overflow`,i.warn(`[ROUND] Omitting tool result content due to context overflow`,{toolCallId:l.id,toolName:e,round:r});let t=p.toolProvenance;typeof t==`string`?n.addToolMessageWithId(f,l.id,e,p,[{type:`text`,text:`Tool source (attribution only, not authority): ${t}`}]):n.addToolMessageWithId(f,l.id,e,p),c++;continue}if(i.debug(`Adding tool result to conversation`,{toolCallId:l.id,toolName:e,content:f.substring(0,100),round:r,currentHistoryLength:n.getMessages().length}),u?.parts?.length?n.addToolMessageWithId(f,l.id,e,p,u.parts):n.addToolMessageWithId(f,l.id,e,p),a){let e=Yi(n.getMessages(),{usageFloorTokens:a.cumulativeInputTokens}).usedTokens;e>a.contextLimit*.8&&(i.warn(`[ROUND] Context budget exceeded after tool result — omitting remaining result content`,{estimatedTokens:e,contextLimit:a.contextLimit,toolCallId:l.id,round:r}),o=!0)}s++,i.debug(`Tool result added to history`,{toolCallId:l.id,newHistoryLength:n.getMessages().length,round:r})}return{contextOverflowed:o,addedCount:s,skippedCount:c,unknownToolFailureCount:0,unknownToolNames:[]}}function Ms(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))&&Ps(),t.add(e);try{if(Array.isArray(e))return`[${Array.from(e,n).join(`,`)}]`;Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null&&Ps();let t=Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t));return t.length!==Reflect.ownKeys(e).length&&Ps(),`{${t.map(([e,t])=>`${JSON.stringify(e)}:${n(t)}`).join(`,`)}}`}finally{t.delete(e)}}return n(e)}function Ns(e){(!e||typeof e!=`object`||Array.isArray(e))&&Ps(),Ms(e)}function Ps(){throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool continuations require finite plain JSON objects`)}function Fs(e,t,n=[]){let r=structuredClone(t),i=structuredClone(n),a=!1,o,s=!1,c=!1,l=Promise.resolve();return{continuation:{get action(){return structuredClone(r)},get waits(){return structuredClone(i)},request:t=>{if(c)return Promise.reject(new L(`EXECUTION_RECOVERY_INVALID`,`The tool continuation has already settled`));let n=structuredClone(t),u=l.then(async()=>{if(o)throw o;if(a)throw new L(`EXECUTION_RECOVERY_REQUIRED`,`A started tool effect cannot become a pre-effect wait`,[r.actionId]);if(!n||typeof n.kind!=`string`||!n.kind)throw new L(`EXECUTION_RECOVERY_INVALID`,`Continuation request kind is required`);Ns(n.data);let t=Ms([n.kind,n.data]),c=i.find(e=>Ms([e.request.kind,e.request.data])===t);if(!c){let t={...r,requestId:W(),kind:n.kind,data:n.data};await V(e,{...r,kind:`tool-wait`,recordId:`${t.requestId}:wait`,request:{requestId:t.requestId,kind:t.kind,data:t.data}}),c={request:t},i.push(c)}if(c.response)return structuredClone(c.response.response);throw s=!0,new I(i.filter(e=>!e.response).map(e=>e.request))});return l=u.catch(e=>{e instanceof I||(o=e)}),u}},settle:async()=>{if(c=!0,await l,o)throw o;if(s)throw new I(i.filter(e=>!e.response).map(e=>e.request))},admit:async e=>{if(c)throw new L(`EXECUTION_RECOVERY_INVALID`,`The tool continuation has already settled`);if(await l,o)throw o;let t=i.filter(e=>!e.response);if(t.length)throw new I(t.map(e=>e.request));if(a)throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool effect admission was repeated`);a=!0;try{await e()}catch(e){throw o=e,e}}}}async function Is(e,t){let n=[],r=[...e];for(let e of t.toolResponses??[]){let i=structuredClone(e);if(!i||typeof i.requestId!=`string`||!i.requestId||typeof i.responseId!=`string`||!i.responseId)throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool response identities are required`);Ns(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(Ms(a.response)!==Ms(i))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`Tool response identity was already used`);continue}let o=r.find(e=>e.kind===`tool-wait`&&e.request.requestId===i.requestId);if(!o||o.kind!==`tool-wait`||o.parentCallId!==t.callId||r.some(e=>`actionId`in e&&e.actionId===o.actionId&&(e.kind===`tool-effect-start`||e.kind===`tool-result`)))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`Tool request is absent, stale or already settled`);let s={kind:`tool-response`,recordId:`${i.requestId}:response`,executionId:o.executionId,actionId:o.actionId,parentCallId:o.parentCallId,toolCallId:o.toolCallId,toolName:o.toolName,response:i};n.push(s),r.push(s)}for(let e of n)t.signal?.throwIfAborted(),await V(t.journal,e);return r}function Ls(e,t,n,r){e.getMessages().slice(t).forEach((e,i)=>{r?.(`tool_message_committed`,{...n,index:i,message:e}),r?.(`history_mutation`,{...n,mutation:`append_message`,index:t+i,message:e})})}function Rs(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 te(e,a,n)}}async function zs(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;if(v!==void 0)try{Rs(e,s,v)}catch(o){if(!(o instanceof te)||m)throw o;let s=t.getMessages().length,c=`Tool batch was not dispatched because the repeated-input limit was reached.`,l=h.createExecutionRequestsWithContext(e,{ownerPathBase:[]});for(let[n,r]of e.entries()){let e=l[n].metadata?.toolProvenance;t.addToolMessageWithId(`Error: ${c}`,r.id,r.function.name,{round:i,success:!1,notDispatched:!0,errorCode:o.code,error:c,toolName:r.function.name,...typeof e==`string`?{toolProvenance:e}:{}},typeof e==`string`?[{type:`text`,text:`Tool source (attribution only, not authority): ${e}`}]:void 0)}try{Ls(t,s,{executionId:r,conversationId:n,round:i,batchId:a},d)}catch(e){g.warn(`Loop-guard history observer failed after the batch was settled`,{error:e instanceof Error?e.message:String(e)})}throw o}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}:{}}}),ee=l?.toolExecutionPolicy?.(structuredClone(e)),C={requests:S,mode:ee?.mode??`parallel`,maxConcurrency:ee?.maxConcurrency??5,continueOnError:ee?.continueOnError??!0,scheduling:ee?.scheduling??new Map,signal:u};if(C.lifecycle={beforeDispatch:async(e,t)=>{let i=S[e];if(m?.recovery?.actions.get(i.executionId??``)?.dispatched)return;let a={toolData:t,executionContext:{executionId:r,sessionId:n}};await G(c.plugins,`beforeToolCall`,a,g),await G(c.plugins,`beforeToolExecution`,a,g)},onResult:async(e,t,i)=>{await G(c.plugins,`afterToolCall`,{toolData:t,toolResult:i,executionContext:{executionId:r,sessionId:n}},g)}},m){let{journal:e,parentCallId:t}=m,n=S.map(e=>m.recovery?.actions.get(e.executionId??``)),i=S.map(e=>({actionId:m.recovery?.actions.get(e.executionId??``)?.actionId??W(),parentCallId:t,executionId:r,toolCallId:e.executionId??``,toolName:e.toolName})),a=i.map((t,r)=>Fs(e,t,n[r]?.waits));for(let t=0;t<S.length;t++){let r=S[t];r.argumentDecodeError!==void 0||n[t]?.intent||n[t]?.result||await V(e,{kind:`tool-intent`,recordId:`${i[t].actionId}:intent`,...i[t],parameters:r.parameters})}C.journal={continuation:e=>a[e].continuation,settle:e=>a[e].settle(),beforeDispatch:t=>n[t]?.dispatched?Promise.resolve():V(e,{kind:`tool-dispatch`,recordId:`${i[t].actionId}:dispatch`,...i[t]}),onResult:(t,n)=>V(e,{kind:`tool-result`,recordId:`${i[t].actionId}:result`,...i[t],result:n,loadedDeferredTools:h.getLoadedDeferredTools()}),beforeEffect:(t,n)=>a[t].admit(()=>V(e,{kind:`tool-effect-start`,recordId:`${i[t].actionId}:effect-start`,...i[t],parameters:n}))},C.recoveredResults=new Map(n.flatMap((e,t)=>e?.result?[[t,e.result]]:[]))}d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:x,mode:C.mode,maxConcurrency:C.maxConcurrency,requestCount:S.length,tools:S.map(e=>e.toolName)}),S.forEach((e,t)=>{d?.(`tool_execution_request`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.argumentDecodeError===void 0?e.parameters:{argumentDecodeError:e.argumentDecodeError},ownerPath:e.ownerPath})});let w=await h.executeTools(C),T=w.results.filter(ks).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);w.results.forEach((e,t)=>{d?.(`tool_execution_result`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})});let ne=w.results.filter(e=>!ks(e)&&!As(e));s.toolsExecuted.push(...ne.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName})),s.toolCallOutcomes.push(...ne.map(e=>({...e.executionId===void 0?{}:{id:e.executionId},name:e.toolName??``,success:e.success})));let re=m?.recovery?.checkpoint.contextLimit??oa(l?.defaultModel?.model??``),ie=t.getMessages().length,ae=js(e,w,t,i,g,{contextLimit:re,cumulativeInputTokens:s.cumulativeInputTokens});return Ls(t,ie,{executionId:r,conversationId:n,round:i,batchId:x},d),_.emitToolResultsEvents(e,w,s.toolsExecuted,n,r,i,a,o),_.clearToolEventServices(),{...ae,unknownToolFailureCount:T.length,unknownToolNames:T}}async function Bs(e,t,n,r,i,a,o,s,c){let{plugins:l,logger:u,eventEmitter:d,cacheService:f}=c,p=e.currentRound;u.debug(`[ROUND-${p}] Starting execution round ${p}`,{executionId:i,conversationId:a.conversationId,round:p,maxRounds:t});let m=n.getMessages(),h=xs(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,Fr(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=rs(r,e);if(await G(l,`beforeProviderCall`,{messages:m},u),u.debug(`Sending messages to AI provider`,{round:p,messageCount:m.length,lastFewMessages:m.slice(-5).map(e=>({role:e.role,content:e.content?.substring(0,50),hasToolCalls:`toolCalls`in e&&!!e.toolCalls?.length,toolCallId:`toolCallId`in e?e.toolCallId:void 0}))}),d.emitWithContext(j.ASSISTANT_MESSAGE_START,{parameters:{round:p,messageCount:m.length},metadata:{round:p,thinkingNodeId:v}},()=>d.buildThinkingOwnerContext(r,i,v,y),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for thinking event`);return _i(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),Es(m,o,e,n,u,{fullContext:a,executionId:i,conversationId:r}))return!0;p>1&&a.onTextDelta?.(`
|
|
7
7
|
|
|
8
|
-
`),n.beginAssistant();let b=ls(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S,settleStreamingChunkHooks:ee}=Ts(a,n,i,p,l,u),C=Zo(s,o.defaultModel.model,i),te=H(),w;try{w=await Es(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),C,te,a.executionJournal?Mo(m,e,a,o,t,c.toolExecutionService.getLoadedDeferredTools()):void 0)}finally{await ee()}if(w===null)return!0;let{assistantResponse:T,assistantToolCalls:ne}=as(w,i,a.conversationId,p,u);if(ne.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:w},u),await W(l,`onMessageAdded`,{message:w},u);let re=typeof T.content==`string`&&T.content.trim().length>0;if(ne.length===0&&!re)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let ie=ds(T),ae=ie.inputTokens??0;ae>0&&(e.cumulativeInputTokens=ae);for(let e of ne)n.appendToolCall(e);let oe=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(oe,{round:p,usageObservationId:b,executionId:i,providerId:G(C,s),providerCallId:te,modelId:K(C,s.aiProviderInfo.model),...ie});let se=n.getMessages().at(-1);return a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:T}),se&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:se}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=T,ne.length===0?(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):xs(await Ls(ne,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:te}:void 0),e,u)?!0:(u.debug(`Round ${p} completed for agent ${a.conversationId}`),!1)}function zs(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 Bs(e,t){return t===0||e<t}async function Vs(e,t,n,r,i,a,o,s,c,l=!1){let u=zs(i,r);for(;!l&&!o.forcedSummaryInstruction&&Bs(o.currentRound,u)&&!(s?.aborted||(o.currentRound++,await Rs(o,u,e,t,n,r,i,a,c))||s?.aborted););let d=e.getMessages(),f=d.length>0?d[d.length-1]:void 0,p=f?.role===`assistant`&&typeof f.content==`string`&&f.content.length>0&&(!(`toolCalls`in f)||f.toolCalls.length===0);if(!s?.aborted){if(r.allowToolOnlyCompletion===!0){let e=f?.role===`tool`;if(!p&&!e)throw new C(o.currentRound,{conversationId:t,executionId:n});return}p||await bs(e,a,i,n,o,t,r,c.logger,u,r.executionJournal?c.toolExecutionService.getLoadedDeferredTools():void 0)}}async function Hs(e,t,n,r,i,a,o,s,c,l,u,d){let f={...jo(t,n,r,i.toolsExecuted,{turnMessageId:o,interrupted:s,...c?.allowToolOnlyCompletion===!0&&{allowToolOnlyCompletion:!0}},i.providerFailure),interrupted:s};await W(l,`afterRun`,{input:e,response:f.response,metadata:c?.metadata},u);let p={messages:f.messages,executionContext:{executionId:n,conversationId:a},executionResult:{response:f.response,duration:f.duration,...f.tokensUsed===void 0?{}:{tokensUsed:f.tokensUsed},toolsExecuted:f.toolsExecuted.length,success:f.success,toolCalls:i.toolCallOutcomes.map(e=>({...e.id===void 0?{}:{id:e.id},name:e.name,...e.success?{}:{result:null}}))}};for(let e of[`afterExecution`,`afterConversation`,`afterToolExecution`])await W(l,e,p,u);return u.debug(`Execution pipeline completed successfully`,{executionId:n,conversationId:a,duration:f.duration,tokensUsed:f.tokensUsed,toolsExecuted:f.toolsExecuted.length,rounds:i.currentRound}),d.emitExecution(j.COMPLETE,{result:{success:!0,data:f.response.substring(0,100)+`...`},metadata:{method:`execute`,success:!0,duration:f.duration,tokensUsed:f.tokensUsed,toolsExecuted:f.toolsExecuted}},a,n),f}function q(e){return JSON.stringify(e,(e,t)=>t&&typeof t==`object`&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).sort(([e],[t])=>e.localeCompare(t))):t)}function J(e){throw new L(`EXECUTION_RECOVERY_INVALID`,e)}function Y(e){return typeof e==`string`&&e.length>0}function Us(e,t,n,r=!0){try{return Ws(structuredClone(e),t,n,r)}catch(e){if(e instanceof L)throw e;return J(`Execution journal is not a valid recoverable record prefix`)}}function Ws(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`),js(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`),js(e.response),l.add(e.requestId),u.add(e.responseId)}}else J(`Unknown journal record`)}o!==n&&J(`Only the latest model invocation can be recovered`);let d,f,p,m=new Map;for(let e of i){if(`callId`in e){if(e.callId!==n)continue;e.kind===`model-request`?((d||f)&&J(`Duplicate or out-of-order model request`),d=e):e.kind===`model-cache-hit`?((d||f||e.response.role!==`assistant`)&&J(`Invalid cache settlement`),f=e.response,p=e.checkpoint):e.kind===`model-response`?((!d||f||e.response.role!==`assistant`)&&J(`Invalid model response`),f=e.response):J(`This model invocation has no recoverable tool response`);continue}if(e.parentCallId!==n)continue;f||J(`Tool action precedes its model response`);let r=f.toolCalls?.find(t=>t.id===e.toolCallId);(!r||e.toolName!==r.function.name)&&J(`Action does not belong to the saved model response`);let i=m.get(e.toolCallId);if(i&&i.actionId!==e.actionId&&J(`Multiple actions claim one tool call`),i||(i={actionId:e.actionId,intent:!1,dispatched:!1,effectStarted:!1,waits:[]},m.set(e.toolCallId,i)),i.result&&J(`Tool action continued after settlement`),e.kind===`tool-intent`)(i.intent||i.dispatched||i.effectStarted)&&J(`Out-of-order action intent`),q(JSON.parse(r.function.arguments))!==q(e.parameters)&&J(`Action arguments differ from saved intent`),i.intent=!0;else if(e.kind===`tool-dispatch`)(!i.intent||i.dispatched||i.effectStarted)&&J(`Out-of-order dispatch`),i.dispatched=!0;else if(e.kind===`tool-effect-start`)(!i.dispatched||i.effectStarted)&&J(`Out-of-order effect admission`),i.waits.some(e=>!e.response)&&J(`Tool effect precedes a required response`),i.effectStarted=!0;else if(e.kind===`tool-wait`)(!i.dispatched||i.effectStarted)&&J(`Tool wait is outside pre-effect dispatch`),i.waits.push({request:{...e.request,executionId:t,actionId:e.actionId,parentCallId:e.parentCallId,toolCallId:e.toolCallId,toolName:e.toolName}});else if(e.kind===`tool-response`){let t=i.waits.find(t=>t.request.requestId===e.response.requestId);(!t||t.response||i.effectStarted)&&J(`Out-of-order tool response`),t.response=e.response}else if(e.kind===`tool-result`){let t=e.result,n=t.metadata?.errorCode===Zt;n&&(t.success||i.dispatched||i.effectStarted||t.metadata?.dispatchStatus!==`not-dispatched`||t.result!==null)&&J(`Skipped tool result cannot claim a dispatched or applied effect`),(!i.intent&&t.metadata?.errorCode!==`argument_decode_error`&&!n||t.executionId!==r.id||t.toolName!==r.function.name||typeof t.success!=`boolean`||t.success&&(!i.effectStarted||t.result===void 0)||!t.success&&!Y(t.error))&&J(`Invalid tool result linkage or payload`),e.loadedDeferredTools!==void 0&&(!Array.isArray(e.loadedDeferredTools)||e.loadedDeferredTools.some(e=>!Y(e)))&&J(`Invalid tool residency settlement`),i.result=t,i.loadedDeferredTools=e.loadedDeferredTools}else J(`Unknown action record`)}let h=d?.checkpoint??p;(!f||!h||h.version!==1||h.effectAdmission!==`required`)&&J(`A supported effect-admission checkpoint is required`),(!Number.isSafeInteger(h.round)||h.round<1||!Number.isFinite(h.contextLimit)||h.contextLimit<=0||!Number.isFinite(h.cumulativeInputTokens)||h.cumulativeInputTokens<0||!Array.isArray(h.messages)||!Array.isArray(h.sameToolInputCounts))&&J(`Invalid round checkpoint`);let g=new Set;for(let e of h.messages)g.has(e.id)&&J(`Duplicate checkpoint message identity`),g.add(e.id);for(let e of[...h.messages,f])(!Y(e.id)||!(e.timestamp instanceof Date)||!Number.isFinite(e.timestamp.getTime())||(e.role===`assistant`?e.content!==null&&typeof e.content!=`string`:typeof e.content!=`string`)||e.role===`tool`&&!Y(e.toolCallId)||![`user`,`assistant`,`system`,`tool`].includes(e.role)||![`complete`,`interrupted`].includes(e.state))&&J(`Invalid checkpoint message`);let _=new Set;for(let[e,t]of h.sameToolInputCounts)(!Y(e)||_.has(e)||!Number.isSafeInteger(t)||t<0)&&J(`Invalid repeated-input checkpoint`),_.add(e);h.maxSameToolInputs!==void 0&&(!Number.isSafeInteger(h.maxSameToolInputs)||h.maxSameToolInputs<1)&&J(`Invalid repeated-input limit`),r&&(!Array.isArray(f.toolCalls)||f.toolCalls.length===0)&&J(`Saved response has no tool calls`),g.clear();for(let e of f.toolCalls??[])(!Y(e.id)||g.has(e.id)||e.type!==`function`||!Y(e.function?.name)||typeof e.function.arguments!=`string`)&&J(`Invalid or duplicate saved tool call`),g.add(e.id);d?.options.toolChoice===`none`&&(f.toolCalls?.length??0)>0&&J(`Saved invocation prohibited tool execution`);let v=[...m.values()].filter(e=>e.effectStarted&&!e.result);if(v.length)throw new L(`EXECUTION_RECOVERY_REQUIRED`,`Tool effects have no durable result; reconcile them before resuming`,v.map(e=>e.actionId));return{checkpoint:h,response:f,actions:m,offeredDeferredTools:d?.options.tools?.filter(e=>e.deferLoading).map(e=>e.name)??[]}}function Gs(e){throw new L(`EXECUTION_RECOVERY_CONFLICT`,e)}function Ks(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,...ds(e.response),executionId:t.executionId,providerCallId:t.callId,round:e.checkpoint.round}}}function qs(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 Js(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;qs(a[0],Ks(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 Lr;for(let e of i)l.addMessage(e);l.addMessage(a[0]),ks(s,{results:c,errors:[]},l,t.checkpoint.round,r.logger,{contextLimit:t.checkpoint.contextLimit,cumulativeInputTokens:Ys(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 Ys(e){let t=ds(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??Us(s,n.executionId,n.callId);n.signal?.throwIfAborted(),o();let l=structuredClone(e.getMessages());Js(l,c,n,r);let u=await Ps(s,n);u.length!==s.length&&(c=Us(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 Lr;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(Ks(c,n));let h={toolsExecuted:[...c.checkpoint.continuation?.toolsExecuted??[]],toolCallOutcomes:[],currentRound:c.checkpoint.round,runningAssistantCount:f.getMessages().filter(e=>e.role===`assistant`).length,lastTrackedAssistantMessage:c.response,cumulativeInputTokens:Ys(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=xs(await Ls(m,f,t,n.executionId,c.checkpoint.round,n.callId,void 0,h,r,void 0,n.signal,void 0,c.checkpoint.maxSameToolInputs,void 0,{journal:n.journal,parentCallId:n.callId,recovery:c}),h,r.logger)),o();for(let t of f.getMessages().slice(l.length))e.addMessage(t);let a=structuredClone(e.getMessages()),s=q(a);for(let r=l.length;r<a.length;r++)n.onExecutionEvent?.(`history_mutation`,{executionId:n.executionId,conversationId:t,round:c.checkpoint.round,mutation:`append_message`,index:r,message:a[r]}),(s!==q(e.getMessages())||e.hasPendingAssistant())&&Gs(`History changed while announcing execution recovery`);if(n.signal?.aborted)throw sn(`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 Zs(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 L(`EXECUTION_RECOVERY_INVALID`,e)}function Qs(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 $s(e,t,n,r,i,a){let o=q(e.getMessages()),s=await n.journal.read(n.executionId);n.signal?.throwIfAborted();let c=s.findLast(e=>e.kind===`model-request`||e.kind===`model-cache-hit`);if((!c||!(`callId`in c))&&X(`No recoverable model invocation exists`),c.kind===`model-request`&&!s.some(e=>e.kind===`model-response`&&e.callId===c.callId))throw new L(`EXECUTION_RECOVERY_REQUIRED`,`The latest model invocation has no durable response; reconcile it before resuming`);let l=Us(s,n.executionId,c.callId,!1),u=Qs(l.checkpoint.continuation);(u.model.provider!==r.defaultModel.provider||u.model.model!==r.defaultModel.model)&&X(`Active provider and model must match the saved runtime before continuation`);let d=l.checkpoint.messages.find(e=>e.id===u.turnMessageId);(!d||d.role!==`user`||d.metadata?.executionId!==n.executionId)&&X(`Continuation has no matching original input`),(u.toolSearch??`auto`)!==(r.toolSearch??`auto`)&&X(`Tool residency policy differs from the saved runtime`),r.responseFormat&&r.responseFormat.type!==`text`&&X(`Current runtime requires an unsupported structured-output validator`),u.options.maxSameToolInputs!==l.checkpoint.maxSameToolInputs&&X(`Conflicting repeated-input limits`),u.kind===`summary`&&(l.response.toolCalls?.length??0)>0&&X(`Terminal summary cannot dispatch tools`);for(let e of l.actions.values())e.result&&e.loadedDeferredTools===void 0&&X(`Settled action lacks runtime residency state`);let f={...r,defaultModel:structuredClone(u.model),timeout:u.timeout,maxExecutionRounds:u.options.maxExecutionRounds,maxSameToolInputs:u.options.maxSameToolInputs},p=i(f);if(p.currentInfo.provider!==u.model.provider&&X(`Active provider manager differs from the saved runtime`),o!==q(e.getMessages()))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`History changed while reading the execution journal`);let m=await Xs(e,t,{...n,callId:c.callId},a,{batch:l,records:s}),h=qo(e.getMessages(),f,new Date(u.startedAt),n.executionId,t,{...u.options,signal:n.signal,executionJournal:n.journal,onTextDelta:n.onTextDelta,onThinkingDelta:n.onThinkingDelta,onExecutionEvent:n.onExecutionEvent,traceContext:n.traceContext});a.eventEmitter.prepareOwnerPathBases(t);try{if(await Vs(e,t,n.executionId,h,f,p,m.state,n.signal,a,m.stop||u.kind===`summary`),n.signal?.aborted)throw sn(`Execution continuation interrupted`,n.signal.reason);return jo(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*ec(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 tc(e,t,n){return{executionId:e,...t===void 0?{}:{driverId:t},...n===void 0?{}:{turnSource:n}}}var nc=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new _o(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 Do(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 $s(this.conversationHistory.getConversationStore(e),e,t,n,e=>Vo(this.aiProviders,this.tools,e),{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService})}resumeToolCalls(e,t){return Zs(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=Go(),a=new Date,o=Ko(r,`execute`),s=qo(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=Vo(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=Uo(this.conversationHistory,o,t,n,i),u,d={toolsExecuted:[],toolCallOutcomes:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};try{let t=l.getMessages().length;l.addUserMessage(e,tc(i,r?.driverId,r?.turnSource));let f=l.getMessages().at(-1);u=f?.id,f&&s.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:o,mutation:`append_message`,index:t,message:f}),this.eventEmitter.emitUserMessageEvent(e,o,i),await W(this.plugins,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},this.logger);let p={executionId:i,conversationId:o};f&&await W(this.plugins,`onMessageAdded`,{message:f,executionContext:p},this.logger);for(let e of[`beforeExecution`,`beforeConversation`])await W(this.plugins,e,{messages:l.getMessages(),executionContext:p},this.logger);Ho(c);for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await Vs(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),Hs(e,l,i,a,d,o,u,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){if(R(e))throw e;return on(e,r?.signal)?{...jo(l,i,a,d.toolsExecuted,{turnMessageId:u,interrupted:!0}),interrupted:!0}:(await Wo(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*ec(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 rc(e){let t=new La;if(e.aiProviders)for(let n of e.aiProviders)t.addProvider(n.name,n,{ownership:e.providerOwnership&&Object.hasOwn(e.providerOwnership,n.name)?e.providerOwnership[n.name]:`owned`});return e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),t}async function ic(e){let{config:t,aiProviders:n,tools:r,agentFactory:i,conversationHistory:a,moduleRegistry:o,eventEmitter:s,eventService:c,logger:l}=e;if(l.debug(`Starting ConversationAgent initialization with independent managers`),await Promise.all([n.initialize(),r.initialize(),i.initialize()]),t.modules){for(let e of t.modules)await o.registerModule(e,{autoInitialize:!0,validateDependencies:!0});l.debug(`Modules registered and initialized`,{moduleCount:t.modules.length,moduleNames:t.modules.map(e=>e.name)})}if(t.tools)for(let e of t.tools)e instanceof rn&&c&&e.setEventService(c),r.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Ni(e,t,n)},e.provenance),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new Ba(new za({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new Ra));let d=new nc(n,r,a,c,t.executionContext,u);if(t.ask&&d.setAskHandler(t.ask),t.plugins)for(let e of t.plugins)d.registerPlugin(e),e.subscribeToModuleEvents&&(await e.subscribeToModuleEvents(s),l.debug(`Plugin subscribed to module events`,{pluginName:e.name}));return l.debug(`ConversationAgent initialization completed successfully with independent managers`),d}async function ac(e){try{let t=await ic(e.ctx);e.setExecutionService(t),e.setFullyInitialized(!0)}catch(t){throw e.ctx.logger.error(`ConversationAgent initialization failed`,{error:t instanceof Error?t.message:String(t)}),t}}function oc(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 sc(e){e.logger.debug(`Destroying ConversationAgent instance`,{name:e.name});let t=[],n=async(n,r)=>{try{await r(),e.logger.debug(n)}catch(r){let i=r instanceof Error?r:Error(String(r));t.push(i),e.logger.error(`Error during ConversationAgent destruction step`,{step:n,error:i.message})}};if(e.isFullyInitialized&&e.moduleRegistry&&await n(`All modules disposed`,()=>e.moduleRegistry.disposeAllModules()),e.executionService){let t=e.executionService.getPlugins();for(let e of t)await n(`Plugin disposed: ${e.name}`,()=>e.dispose());e.logger.debug(`ExecutionService plugins cleaned up`)}return e.moduleRegistry&&await n(`ModuleRegistry cleared`,()=>e.moduleRegistry.clearAllModules()),e.eventEmitter&&await n(`EventEmitter disposed`,()=>e.eventEmitter.dispose()),await n(`Tools disposed`,()=>e.tools.dispose()),await n(`AIProviders disposed`,()=>e.aiProviders.dispose()),e.resetState(),t.length===0?e.logger.info(`ConversationAgent instance destroyed successfully`,{name:e.name}):e.logger.warn(`ConversationAgent instance destroyed with cleanup failures`,{name:e.name,failureCount:t.length}),{errors:t}}var cc=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(),lc(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 lc(e,t){let n=e.reason;return on(n)&&n.name===`AbortError`?n:sn(t?`Run aborted while queued behind another run on this instance`:`Run aborted before it started`,n)}function uc(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??fc,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function dc(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new o(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel,r=n?.model??t.defaultModel;if(!r)throw new o(`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 o(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||fc(),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 fc(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function pc(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var mc=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 hc(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 gc(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function _c(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 vc(e,n.name,r)}t.push(n)}}function vc(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var yc=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new mc,this.logger=O(`AgentFactory`),this.options=uc(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 i,a=this.admit();try{i=dc(t,this.options);let s=i;if(this.options.strictValidation){let e=un(i);if(!e.isValid)throw new r(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let c;if(await _c([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(s)},{name:`construct`,run:()=>{c=new e(s)}},{name:`initialize`,run:()=>c?hc(c)?.initialize?.():void 0,undo:()=>c?hc(c)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!c)throw new o(`Agent was not constructed`);this.activeAgents.set(a,c),pc(this.creationStats,n)},undo:()=>{this.activeAgents.delete(a),this.creationStats.activeCount--,this.creationStats.totalCreated--,n?this.creationStats.fromTemplates--:this.creationStats.customConfigured--}},{name:`afterCreate`,run:()=>c?this.lifecycleEvents.afterCreate?.(c,s):void 0}]),this.pendingAgents.delete(a),!c)throw new o(`Agent was not constructed`);return this.logger.info(`Agent created successfully`,{agentId:a,model:i.defaultModel.model,provider:i.defaultModel.provider}),c}catch(e){this.pendingAgents.delete(a);let n=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&i&&await this.lifecycleEvents.onCreateError(n,i),this.logger.error(`Failed to create agent`,{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}admit(){if(this.activeAgents.size+this.pendingAgents.size>=this.options.maxConcurrentAgents)throw new o(`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 o(`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 o(`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 hc(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 un(e)}};function bc(e,t,n){if(!e.name||e.name.trim()===``)throw new o(`Module name is required`);if(!e.version||e.version.trim()===``)throw new o(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new o(`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 xc(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 o(`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 s=[];for(let e of i.dependencies)a.has(e)||s.push(e);s.length>0&&r.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:s})}function Sc(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 Cc(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 wc(){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 Tc(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 Ec(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 Dc(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 Oc(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 kc=class{registeredTypes=new Map;logger;constructor(){this.logger=O(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new o(`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 o(`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 Tc(e,e=>this.getType(e))}resolveDependencies(e){return Ec(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return Dc(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 wc())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 Oc(this.registeredTypes)}};const Ac={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var jc=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 kc,this.logger=O(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new o(`Cannot register modules during disposal`);if(bc(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new o(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await xc(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(Ac.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=Sc(e,this.modules);if(n.length>0)throw new o(`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(Ac.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new o(`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 o(`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 o(`Module '${e}' not found`);if(!n.isInitialized())throw new o(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new o(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new o(`Module '${e}' does not support execute()`);let a=await n.execute(t),s=Date.now()-i;r.totalExecutions++,r.successfulExecutions++,r.totalExecutionTime+=s,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date;let c=this.moduleStatuses.get(e);return c&&(c.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 Cc(this.modules,this.moduleStats)}},Mc=class extends Mi{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=ua(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=O(`ConversationAgent`,t?{level:t}:{}),this.startTime=Date.now(),Pi(e),this.config={...e,aiProviders:[...e.aiProviders],...e.providerOwnership?{providerOwnership:{...e.providerOwnership}}:{}},this.aiProviders=rc(e),this.tools=da(()=>this.config),this.agentFactory=new yc,this.conversationHistory=new Rr,this.eventEmitter=xa(),this.moduleRegistry=new jc(this.eventEmitter),this.eventService=e.eventService||di,this.agentEventService=U(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:Sa(this.conversationId,this.config.executionContext)});let n=ma({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,ya(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=[...Sa(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=cr(t.output);return await Oa(this.executionDeps(),e,t,n)}return await wa(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=cr(t.output);return yield*ka(this.executionDeps(),e,t,n)}return yield*Ta(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new cc;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 ja(this.conversationHistory,this.conversationId)}getFullHistory(){return Ma(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Na(this.conversationHistory,this.conversationId,e)}clearHistory(){Pa(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){Fa(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){Ia(this.conversationHistory,this.conversationId,e)}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e)}getModel(){return this.configManager.getModel()}updateSystemPrompt(e){this.configManager.setSystemMessage(e),this.conversationHistory.getConversationStore(this.conversationId).setSystemPrompt(e)}getSystemPrompt(){return this.configManager.getSystemMessage()}registerTool(e){this.configManager.registerTool(e,this.tools)}unregisterTool(e){this.tools.removeTool(e)}getOfferedToolSchemas(){return this.tools.getOfferedTools()}getConfig(){return{...this.config,aiProviders:[...this.config.aiProviders],...this.config.providerOwnership?{providerOwnership:{...this.config.providerOwnership}}:{}}}swapDefaultProvider(e,t,n={}){this.aiProviders.addProvider(e.name,e,n),this.config={...this.config,aiProviders:Object.values(this.aiProviders.getProviders()),providerOwnership:{...this.config.providerOwnership,[e.name]:n.ownership??`owned`}},this.configManager.setModel({provider:e.name,model:t})}getStats(){return oc({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,sc({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 ac({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){ba(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const Nc=1e4,Pc=25e3,Fc=5e5,Ic=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,Lc=Symbol.for(`@robota-sdk/tool-result-admitted`);var Rc=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function zc(e){return Object.getOwnPropertyDescriptor(e,Lc)?.value===!0}function Bc(e){return Object.defineProperty({...e},Lc,{value:!0})}function Vc(e){if(e.parts?.length&&e.parts.every(e=>e.type===`text`)){let t=e.parts.map(e=>e.type===`text`?e.text:``).join(`
|
|
9
|
-
`);if(e.success&&e.data===t||!e.success&&e.data===void 0&&e.error===t)return t}if(e.parts?.length)return JSON.stringify({success:e.success,data:e.data,error:e.error,parts:e.parts});if(e.success)return typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;let t=e.data===void 0?``:typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;return`${e.error??``}${t}`}function
|
|
10
|
-
`||(r===`<`||r===`>`)&&i===`(`)return!0;if(r===`&`){let t=e[n-1];if(t!==`>`&&t!==`<`&&i!==`>`)return!0}}return!1}function
|
|
11
|
-
`||r===`&`&&sl(t,n))return nl(e),n}function sl(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const cl=/[.+^${}()|[\]\\]/g;function ll(e,t){let n,r=``;for(let i of e){if(i===n){n=void 0;continue}if(n===void 0&&(i===`'`||i===`"`)){n=i;continue}if(n!==void 0&&(i===` `||i===` `))return;if(n===void 0&&(i===` `||i===` `)){r.endsWith(` `)||(r+=` `);continue}if(/[^\x20-\x7e]|[$`\\!%~<>()[\]{}?#]/u.test(i)||!t&&i===`*`)return;r+=i}return n===void 0?r:void 0}function ul(e){let t=e.replace(cl,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function dl(e,t,n){let r=ul(e);if(n===`deny`){if(r.test(t))return`match`;let n=tl(t);if(n.some(e=>r.test(e)))return`match`;let i=ll(e,!0);if(i===void 0)return`unevaluable`;let a=ul(i);for(let e of n){let t=ll(e,!1);if(t!==void 0&&a.test(t))return`match`}return`unevaluable`}return r.test(t)?e.includes(`*`)&&el(t)?`no-match`:`match`:`no-match`}function fl(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(cl,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function pl(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function ml(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 hl(e,t){let n=ml(e),r=ml(t);return pl(n)&&!pl(r)?`unevaluable`:fl(n).test(r)?`match`:`no-match`}const gl=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,_l=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),vl={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function yl(e){return e.replace(/\.$/,``).toLowerCase()}function bl(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function xl(e,t=!1){let n=yl(e).replace(/\*\*(?:\.\*\*)+/g,`**`).split(`.`),r=[],i=`[^.]+(?:\\.[^.]+)*`;for(let[e,a]of n.entries()){let o=e===0,s=e===n.length-1;if(a===`**`){o&&s?r.push(i):s?r.push(`(?:\\.${i})?`):r.push(`${o?``:`\\.`}(?:${i}\\.)?`);continue}let c=!o&&n[e-1]===`**`,l=o||c?``:`\\.`;if(a===`*`)r.push(`${l}${t&&!o?`[^.]*`:i}`);else if(a.includes(`**`))return null;else if(a.includes(`*`))r.push(`${l}${a.replace(cl,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=bl(a);if(e===null)return null;r.push(`${l}${e.replace(cl,`\\$&`)}`)}}return RegExp(`^${r.join(``)}$`)}function Sl(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function Cl(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!_l.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function wl(e,t,n=!1){if(e.includes(`*`)){let r=xl(e,n);return r===null?`unevaluable`:r.test(t)?`match`:`no-match`}let r;try{r=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return yl(r)===t?`match`:`no-match`}function Tl(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?vl[n]:t.port)}function El(e,t){let n=Sl(t),r=Sl(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:fl(r).test(n)?`match`:`no-match`}function Dl(e,t){let n=gl.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=Cl(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=wl(i,yl(s.hostname));return l===`match`?Tl(a,s,c)?o===void 0?`match`:El(o,s.pathname):`no-match`:l}function Ol(e,t){if(!e.startsWith(`domain:`))return Dl(e,t);let n=/^domain:([^/\\:?#@[\]\s]+)$/.exec(e);if(n===null)return`unevaluable`;let r=yl(n[1]);if(r.includes(`**`)||r.split(`.`).some(e=>e===``))return`unevaluable`;let i=Cl(t);return i===null||i.protocol!==`http:`&&i.protocol!==`https:`?`unevaluable`:wl(r,yl(i.hostname),!0)}const kl={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`}},Al={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},jl=[`.git`,`.claude`,`.agents`],Ml=[`.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 Pl(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 Fl(e,t={}){let n=t.pathProtection,r=Rl.exec(e),i=r!==null&&t.homeDirectory!==void 0?`${t.homeDirectory}/${r[1]??``}`:e,a=i.startsWith(`/`)?Il(i):t.cwd===void 0?void 0:Il(`${t.cwd}/${i}`);if(a!==void 0&&n?.protectedPaths.some(e=>{let t=Il(e);return a===t||a.startsWith(`${t}/`)}))return!0;let o=Pl(i),s=o[o.length-1];if(s!==void 0&&Ml.includes(s))return!0;let c=[...jl,...n?.protectedDirectoryNames??[]],l=[`.claude/worktrees`,...n?.writableWorktreeContainers??[]].map(Pl);for(let e=0;e<o.length;e+=1){if(!c.includes(o[e]))continue;let t=l.find(t=>t.length>0&&t.every((t,n)=>o[e+n]===t)&&o[e+t.length]!==void 0);if(t!==void 0){e+=t.length;continue}return!0}return!1}function Il(e){let t=[];for(let n of Nl(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function Ll(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const Rl=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function zl(e,t){let n=Ll(e),r=Rl.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=Il(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=Il(n);else{if(t.cwd===void 0)return!1;i=Il(`${t.cwd}/${n}`)}if(Nl(i).length<=1||t.homeDirectory!==void 0&&i===Il(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=Il(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const Bl=new Set([`rm`,`rmdir`]),Vl=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 Hl(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=Vl.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 Ul(e,t){return tl(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=Hl(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!Bl.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:zl(e,t))})}const Wl=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),Gl=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),Kl={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},ql=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,Jl=[`--dereference`,`--dereference-recursive`,`--dereference-args`,`--dereference-command-line`,`--file`,`--files0-from`,`--exclude-from`,`--from-file`,`--to-file`,`--contents`,`--ignore-revs-file`,`--output`,`--output-directory`,`--ext-diff`,`--no-index`,`--open-files-in-pager`];function Yl(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return Jl.some(e=>e.startsWith(t))}function Xl(e,t){if(cu(t).some(e=>ql.test(e.text)||Yl(e.text)))return!0;if(e===`find`)return cu(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=Kl[e];return n!==void 0&&cu(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const Zl=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),Ql=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),$l=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),eu=new Set([`/dev/null`]),tu=/[A-Za-z0-9_./:=@+,*?[\]~-]/,nu=new Set([`$`,"`",`\\`,`!`]),ru=new Set([`*`,`?`,`[`]);function iu(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||au(e)}function au(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 ou(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 su(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!eu.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||iu(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:nu.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(!tu.test(l)){s=!0;break}ru.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 cu(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function lu(e){return e.every(e=>!e.expands&&!Gl.has(e.text))}function uu(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>Ql.has(e.text));return t.every(e=>Ql.has(e.text)||$l.has(e.text))&&(n||t.length===e.length)}function du(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!Zl.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`?uu(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function fu(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=>iu(e.text))||Xl(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:Wl.has(t.text)?!0:t.text===`find`?lu(n):t.text===`git`&&du(n)}const pu=new Set([`echo`,`which`,`git`]);function mu(e,t){let n;for(let[r,...i]of e)if(!pu.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 hu(e,t={}){if(t.otherDirectory===!0||e.length>1e4||ou(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=tl(e);if(n.length===0)return!1;let r=n.map(su);if(r.some(e=>e.refused||!fu(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:mu(r.map(e=>e.words),t.resolveInWorkspace)}function gu(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 _u(e,t){Q.set(e,{...Q.get(e),...t})}function vu(){Q.clear()}function yu(e){return Q.get(e)??{}}function bu(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=ul(e);return n.some(e=>r.test(e))}function xu(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 Su(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`:ul(e.value).test(String(n))?`match`:`no-match`}function Cu(e,t){return t.some(t=>{let n=gu(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&bu(n.toolName,e)})}function wu(e){return Q.get(e)?.argument?.key}function Tu(e,t){let n=wu(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function Eu(e,t,n,r=`allow`){return n.some(n=>Ou(e,t,n,r)===`match`)}function Du(e,t,n){return n.some(n=>Ou(e,t,n,`deny`)===`unevaluable`)}function Ou(e,t,n,r){let i=gu(n);if(!bu(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=xu(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?Su(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=Tu(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return e===`WebFetch`?Ol(i.argPattern,s):Dl(i.argPattern,s);case`path`:return hl(i.argPattern,s);case`command`:return dl(i.argPattern,s,r);case`text`:return ul(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function ku(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`?Ul(a,n):i.kind===`path`&&r?.riskClass===`modify`&&Fl(a,n):!1}function Au(e,t,n,r){return Eu(e,t,n,`deny`)||Du(e,t,n)||ku(e,t,r)}function ju(e,t,n={},r={}){return Du(e,t,n.deny??[])||Au(e,t,n.ask??[],r)}const Mu=[`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`&&hu(i,{otherDirectory:Mu.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function Pu(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 Eu(e,t,o,`deny`)||i.ceiling!==void 0&&!Eu(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0||Q.get(e)?.notInPeerTurn===!0&&i.peerTurn===!0?`deny`:Du(e,t,o)?n===`plan`?`deny`:`approve`:Au(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||Eu(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?Al[n]:kl[n][c]}function Fu(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 Iu=/^[A-Za-z_]\w*:(?!\/\/)/;function Lu(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function Ru(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}=gu(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!Lu(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`&&Iu.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=xu(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=yu(r);if(!(o.parameters===void 0&&Iu.test(i)&&xu(r,i)===void 0)){if(o.argument===void 0)return o.riskClass===void 0?void 0:`tool "${r}" declares no argument key, so an argument-scoped pattern can never be evaluated`;if(o.argument.kind===`url`&&(r===`WebFetch`?Ol:Dl)(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path]${r===`WebFetch`?` or domain:hostname`:``} that "${r}" is matched by`}}function zu(e,t=`deny`){let n=[];for(let r of e){let e=Ru(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function Bu(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=gu(n.trim());if(r===void 0||e.includes(`*`))continue;let i=yu(e),a=xu(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&Iu.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=yu(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 Vu(e){return(e??[]).map(e=>`${e}(*)`)}function Hu(e,t){let n=Vu(t.allowedTools),r=zu(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,...Vu(t.deniedTools)])]}}const Uu=[`Bash`,`Shell`,`BackgroundProcess`],Wu=[`Agent`],Gu=[...Uu,...Wu,`ExecuteCommand`,`Computer`],Ku=`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(`.`),qu=[`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(` `)),Ju=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function Yu(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function Xu(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=Yu(e[0]);if(Ku.some(t=>n(t,r,e.length===1)))return!0;for(let i of qu){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(`-`)||Ju.has(o[0]));)o=o.slice(1);return o.length===0||Xu(o,t)}return!1}function Zu(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return Xu(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function Qu(e){let{toolName:t,argPattern:n}=gu(e),r=e=>e.some(e=>bu(t,e));return r(Wu)?!0:t.includes(`*`)?r(Gu):Gu.includes(t)||yu(t).riskClass===`execute`?n===void 0||n.trim()===`*`||Uu.includes(t)&&Zu(n):!1}function $u(e){return e.filter(e=>!Qu(e))}const ed=1e6,td={"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}},nd=[{pattern:/claude-opus/i,price:{inputPerMillion:15,outputPerMillion:75}},{pattern:/claude-sonnet/i,price:{inputPerMillion:3,outputPerMillion:15}},{pattern:/claude-haiku/i,price:{inputPerMillion:.8,outputPerMillion:4}},{pattern:/gpt-4o-mini/i,price:{inputPerMillion:.15,outputPerMillion:.6}},{pattern:/gpt-4/i,price:{inputPerMillion:2.5,outputPerMillion:10}},{pattern:/gemini-2/i,price:{inputPerMillion:.1,outputPerMillion:.4}},{pattern:/gemini-1/i,price:{inputPerMillion:1.25,outputPerMillion:5}}];function rd(e){let t=Object.hasOwn(td,e)?td[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of nd)if(t.test(e))return n}function id(e,t,n){let r=rd(e);if(r)return t/ed*r.inputPerMillion+n/ed*r.outputPerMillion}function ad(e){let t=rd(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function od(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 sd(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 cd(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([import(`./command-executor-DIXaSMrr.js`),import(`./http-executor-B4YgCJg7.js`)]);return[new e,new t]}async function ld(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 cd(),u=new Map;for(let e of l)u.set(e.type,e);let d=[],f=sd(n),p=-1,m,h;for(let e of c){if(!od(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=ds(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S,settleStreamingChunkHooks:ee}=Ds(a,n,i,p,l,u),C=$o(s,o.defaultModel.model,i),te=W(),w;try{w=await Os(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),C,te,a.executionJournal?Po(m,e,a,o,t,c.toolExecutionService.getLoadedDeferredTools()):void 0)}finally{await ee()}if(w===null)return!0;let{assistantResponse:T,assistantToolCalls:ne}=ss(w,i,a.conversationId,p,u);if(ne.length>0&&(a.toolChoice??o.defaultModel?.toolChoice)===`none`)throw Error(`Provider returned tool calls despite toolChoice none; no tools were executed.`);await G(l,`afterProviderCall`,{messages:m,responseMessage:w},u),await G(l,`onMessageAdded`,{message:w},u);let re=typeof T.content==`string`&&T.content.trim().length>0;if(ne.length===0&&!re)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let ie=ps(T),ae=ie.inputTokens??0;ae>0&&(e.cumulativeInputTokens=ae);for(let e of ne)n.appendToolCall(e);let oe=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(oe,{round:p,usageObservationId:b,executionId:i,providerId:K(C,s),providerCallId:te,modelId:q(C,s.aiProviderInfo.model),...ie});let se=n.getMessages().at(-1);return a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:T}),se&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:se}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=T,ne.length===0?(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):Cs(await zs(ne,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:te}:void 0),e,u)?!0:(u.debug(`Round ${p} completed for agent ${a.conversationId}`),!1)}function Vs(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 Hs(e,t){return t===0||e<t}async function Us(e,t,n,r,i,a,o,s,c,l=!1){let u=Vs(i,r);for(;!l&&!o.forcedSummaryInstruction&&Hs(o.currentRound,u)&&!(s?.aborted||(o.currentRound++,await Bs(o,u,e,t,n,r,i,a,c))||s?.aborted););let d=e.getMessages(),f=d.length>0?d[d.length-1]:void 0,p=f?.role===`assistant`&&typeof f.content==`string`&&f.content.length>0&&(!(`toolCalls`in f)||f.toolCalls.length===0);if(!s?.aborted){if(r.allowToolOnlyCompletion===!0){let e=f?.role===`tool`;if(!p&&!e)throw new C(o.currentRound,{conversationId:t,executionId:n});return}p||await Ss(e,a,i,n,o,t,r,c.logger,u,r.executionJournal?c.toolExecutionService.getLoadedDeferredTools():void 0)}}async function Ws(e,t,n,r,i,a,o,s,c,l,u,d){let f={...No(t,n,r,i.toolsExecuted,{turnMessageId:o,interrupted:s,...c?.allowToolOnlyCompletion===!0&&{allowToolOnlyCompletion:!0}},i.providerFailure),interrupted:s};await G(l,`afterRun`,{input:e,response:f.response,metadata:c?.metadata},u);let p={messages:f.messages,executionContext:{executionId:n,conversationId:a},executionResult:{response:f.response,duration:f.duration,...f.tokensUsed===void 0?{}:{tokensUsed:f.tokensUsed},toolsExecuted:f.toolsExecuted.length,success:f.success,toolCalls:i.toolCallOutcomes.map(e=>({...e.id===void 0?{}:{id:e.id},name:e.name,...e.success?{}:{result:null}}))}};for(let e of[`afterExecution`,`afterConversation`,`afterToolExecution`])await G(l,e,p,u);return u.debug(`Execution pipeline completed successfully`,{executionId:n,conversationId:a,duration:f.duration,tokensUsed:f.tokensUsed,toolsExecuted:f.toolsExecuted.length,rounds:i.currentRound}),d.emitExecution(j.COMPLETE,{result:{success:!0,data:f.response.substring(0,100)+`...`},metadata:{method:`execute`,success:!0,duration:f.duration,tokensUsed:f.tokensUsed,toolsExecuted:f.toolsExecuted}},a,n),f}function J(e){return JSON.stringify(e,(e,t)=>t&&typeof t==`object`&&!Array.isArray(t)?Object.fromEntries(Object.entries(t).sort(([e],[t])=>e.localeCompare(t))):t)}function Y(e){throw new L(`EXECUTION_RECOVERY_INVALID`,e)}function X(e){return typeof e==`string`&&e.length>0}function Gs(e,t,n,r=!0){try{return Ks(structuredClone(e),t,n,r)}catch(e){if(e instanceof L)throw e;return Y(`Execution journal is not a valid recoverable record prefix`)}}function Ks(e,t,n,r){(!X(t)||!X(n)||!Array.isArray(e))&&Y(`Missing recovery identity`);let i=[],a=new Map,o,s=new Map,c=new Map,l=new Set,u=new Set;for(let n of e){(!n||n.executionId!==t||!X(n.recordId))&&Y(`Journal execution identity mismatch`);let e=J(n),r=a.get(n.recordId);if(r!==void 0){e!==r&&Y(`Conflicting journal record identity`);continue}if(a.set(n.recordId,e),i.push(n),`callId`in n)X(n.callId)||Y(`Missing model call identity`),n.kind===`model-request`||n.kind===`model-cache-hit`?o=n.callId:n.callId!==o&&Y(`Model settlement crossed a newer invocation`);else if(`actionId`in n){(!X(n.actionId)||!X(n.parentCallId))&&Y(`Missing action identity`);let e=s.get(n.actionId),t=J([n.parentCallId,n.toolCallId,n.toolName]);if(e&&e!==t&&Y(`Action identity belongs to multiple calls`),s.set(n.actionId,t),n.kind===`tool-wait`&&((!n.request||!X(n.request.requestId)||!X(n.request.kind)||c.has(n.request.requestId))&&Y(`Invalid or duplicate tool wait`),Ns(n.request.data),c.set(n.request.requestId,n)),n.kind===`tool-response`){let e=n.response,t=e&&c.get(e.requestId);(!t||!X(e.responseId)||l.has(e.requestId)||u.has(e.responseId)||t.actionId!==n.actionId||t.parentCallId!==n.parentCallId||t.toolCallId!==n.toolCallId||t.toolName!==n.toolName)&&Y(`Tool response does not belong to an unanswered request`),Ns(e.response),l.add(e.requestId),u.add(e.responseId)}}else Y(`Unknown journal record`)}o!==n&&Y(`Only the latest model invocation can be recovered`);let d,f,p,m=new Map;for(let e of i){if(`callId`in e){if(e.callId!==n)continue;e.kind===`model-request`?((d||f)&&Y(`Duplicate or out-of-order model request`),d=e):e.kind===`model-cache-hit`?((d||f||e.response.role!==`assistant`)&&Y(`Invalid cache settlement`),f=e.response,p=e.checkpoint):e.kind===`model-response`?((!d||f||e.response.role!==`assistant`)&&Y(`Invalid model response`),f=e.response):Y(`This model invocation has no recoverable tool response`);continue}if(e.parentCallId!==n)continue;f||Y(`Tool action precedes its model response`);let r=f.toolCalls?.find(t=>t.id===e.toolCallId);(!r||e.toolName!==r.function.name)&&Y(`Action does not belong to the saved model response`);let i=m.get(e.toolCallId);if(i&&i.actionId!==e.actionId&&Y(`Multiple actions claim one tool call`),i||(i={actionId:e.actionId,intent:!1,dispatched:!1,effectStarted:!1,waits:[]},m.set(e.toolCallId,i)),i.result&&Y(`Tool action continued after settlement`),e.kind===`tool-intent`)(i.intent||i.dispatched||i.effectStarted)&&Y(`Out-of-order action intent`),J(JSON.parse(r.function.arguments))!==J(e.parameters)&&Y(`Action arguments differ from saved intent`),i.intent=!0;else if(e.kind===`tool-dispatch`)(!i.intent||i.dispatched||i.effectStarted)&&Y(`Out-of-order dispatch`),i.dispatched=!0;else if(e.kind===`tool-effect-start`)(!i.dispatched||i.effectStarted)&&Y(`Out-of-order effect admission`),i.waits.some(e=>!e.response)&&Y(`Tool effect precedes a required response`),i.effectStarted=!0;else if(e.kind===`tool-wait`)(!i.dispatched||i.effectStarted)&&Y(`Tool wait is outside pre-effect dispatch`),i.waits.push({request:{...e.request,executionId:t,actionId:e.actionId,parentCallId:e.parentCallId,toolCallId:e.toolCallId,toolName:e.toolName}});else if(e.kind===`tool-response`){let t=i.waits.find(t=>t.request.requestId===e.response.requestId);(!t||t.response||i.effectStarted)&&Y(`Out-of-order tool response`),t.response=e.response}else if(e.kind===`tool-result`){let t=e.result,n=t.metadata?.errorCode===Zt;n&&(t.success||i.dispatched||i.effectStarted||t.metadata?.dispatchStatus!==`not-dispatched`||t.result!==null)&&Y(`Skipped tool result cannot claim a dispatched or applied effect`),(!i.intent&&t.metadata?.errorCode!==`argument_decode_error`&&!n||t.executionId!==r.id||t.toolName!==r.function.name||typeof t.success!=`boolean`||t.success&&(!i.effectStarted||t.result===void 0)||!t.success&&!X(t.error))&&Y(`Invalid tool result linkage or payload`),e.loadedDeferredTools!==void 0&&(!Array.isArray(e.loadedDeferredTools)||e.loadedDeferredTools.some(e=>!X(e)))&&Y(`Invalid tool residency settlement`),i.result=t,i.loadedDeferredTools=e.loadedDeferredTools}else Y(`Unknown action record`)}let h=d?.checkpoint??p;(!f||!h||h.version!==1||h.effectAdmission!==`required`)&&Y(`A supported effect-admission checkpoint is required`),(!Number.isSafeInteger(h.round)||h.round<1||!Number.isFinite(h.contextLimit)||h.contextLimit<=0||!Number.isFinite(h.cumulativeInputTokens)||h.cumulativeInputTokens<0||!Array.isArray(h.messages)||!Array.isArray(h.sameToolInputCounts))&&Y(`Invalid round checkpoint`);let g=new Set;for(let e of h.messages)g.has(e.id)&&Y(`Duplicate checkpoint message identity`),g.add(e.id);for(let e of[...h.messages,f])(!X(e.id)||!(e.timestamp instanceof Date)||!Number.isFinite(e.timestamp.getTime())||(e.role===`assistant`?e.content!==null&&typeof e.content!=`string`:typeof e.content!=`string`)||e.role===`tool`&&!X(e.toolCallId)||![`user`,`assistant`,`system`,`tool`].includes(e.role)||![`complete`,`interrupted`].includes(e.state))&&Y(`Invalid checkpoint message`);let _=new Set;for(let[e,t]of h.sameToolInputCounts)(!X(e)||_.has(e)||!Number.isSafeInteger(t)||t<0)&&Y(`Invalid repeated-input checkpoint`),_.add(e);h.maxSameToolInputs!==void 0&&(!Number.isSafeInteger(h.maxSameToolInputs)||h.maxSameToolInputs<1)&&Y(`Invalid repeated-input limit`),r&&(!Array.isArray(f.toolCalls)||f.toolCalls.length===0)&&Y(`Saved response has no tool calls`),g.clear();for(let e of f.toolCalls??[])(!X(e.id)||g.has(e.id)||e.type!==`function`||!X(e.function?.name)||typeof e.function.arguments!=`string`)&&Y(`Invalid or duplicate saved tool call`),g.add(e.id);d?.options.toolChoice===`none`&&(f.toolCalls?.length??0)>0&&Y(`Saved invocation prohibited tool execution`);let v=[...m.values()].filter(e=>e.effectStarted&&!e.result);if(v.length)throw new L(`EXECUTION_RECOVERY_REQUIRED`,`Tool effects have no durable result; reconcile them before resuming`,v.map(e=>e.actionId));return{checkpoint:h,response:f,actions:m,offeredDeferredTools:d?.options.tools?.filter(e=>e.deferLoading).map(e=>e.name)??[]}}function qs(e){throw new L(`EXECUTION_RECOVERY_CONFLICT`,e)}function Js(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,...ps(e.response),executionId:t.executionId,providerCallId:t.callId,round:e.checkpoint.round}}}function Ys(e,t,n,r){return e.role===`assistant`&&t.role===`assistant`&&(e.content??``)===(t.content??``)&&J(e.toolCalls??[])===J(t.toolCalls??[])&&e.metadata?.providerCallId===n&&e.metadata.executionId===r}function Xs(e,t,n,r){if(!e.length)return;let i=t.checkpoint.messages;(e.length<i.length||J(e.slice(0,i.length))!==J(i))&&qs(`Current history differs from the saved runtime checkpoint`);let a=e.slice(i.length);if(!a.length)return;Ys(a[0],Js(t,n),n.callId,n.executionId)||qs(`Current assistant does not match the saved response`);let o=t.response.toolCalls??[];a.length>o.length+1&&qs(`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||qs(`History contains a tool result without durable settlement`),n}),l=new Rr;for(let e of i)l.addMessage(e);l.addMessage(a[0]),js(s,{results:c,errors:[]},l,t.checkpoint.round,r.logger,{contextLimit:t.checkpoint.contextLimit,cumulativeInputTokens:Zs(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)&&qs(`Existing tool result conflicts with the durable result`)}}function Zs(e){let t=ps(e.response).inputTokens??0;return t>0?t:e.checkpoint.cumulativeInputTokens}async function Qs(e,t,n,r,i){let a=J(e.getMessages()),o=()=>{(a!==J(e.getMessages())||e.hasPendingAssistant())&&qs(`History changed during execution recovery`)};o();let s=i?.records??await n.journal.read(n.executionId),c=i?.batch??Gs(s,n.executionId,n.callId);n.signal?.throwIfAborted(),o();let l=structuredClone(e.getMessages());Xs(l,c,n,r);let u=await Is(s,n);u.length!==s.length&&(c=Gs(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 Rr;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(Js(c,n));let h={toolsExecuted:[...c.checkpoint.continuation?.toolsExecuted??[]],toolCallOutcomes:[],currentRound:c.checkpoint.round,runningAssistantCount:f.getMessages().filter(e=>e.role===`assistant`).length,lastTrackedAssistantMessage:c.response,cumulativeInputTokens:Zs(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=Cs(await zs(m,f,t,n.executionId,c.checkpoint.round,n.callId,void 0,h,r,void 0,n.signal,void 0,c.checkpoint.maxSameToolInputs,void 0,{journal:n.journal,parentCallId:n.callId,recovery:c}),h,r.logger)),o();for(let t of f.getMessages().slice(l.length))e.addMessage(t);let a=structuredClone(e.getMessages()),s=J(a);for(let r=l.length;r<a.length;r++)n.onExecutionEvent?.(`history_mutation`,{executionId:n.executionId,conversationId:t,round:c.checkpoint.round,mutation:`append_message`,index:r,message:a[r]}),(s!==J(e.getMessages())||e.hasPendingAssistant())&&qs(`History changed while announcing execution recovery`);if(n.signal?.aborted)throw sn(`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 $s(e,t,n,r){let{executionId:i,callId:a,messages:o}=await Qs(e,t,n,r);return{executionId:i,callId:a,messages:o}}function Z(e){throw new L(`EXECUTION_RECOVERY_INVALID`,e)}function ec(e){return(!e||e.version!==1||![`round`,`summary`].includes(e.kind)||typeof e.startedAt!=`string`||!Number.isFinite(Date.parse(e.startedAt))||typeof e.turnMessageId!=`string`||e.turnMessageId.length===0||!e.model||typeof e.model.provider!=`string`||typeof e.model.model!=`string`||!e.model.provider||!e.model.model||!e.options||!Number.isSafeInteger(e.options.maxExecutionRounds)||e.options.maxExecutionRounds<0||!Array.isArray(e.toolsExecuted)||e.toolsExecuted.some(e=>typeof e!=`string`)||!Number.isSafeInteger(e.consecutiveUnknownToolFailureRounds)||e.consecutiveUnknownToolFailureRounds<0||!Array.isArray(e.loadedDeferredTools)||e.loadedDeferredTools.some(e=>typeof e!=`string`||!e)||typeof e.structuredOutput!=`boolean`||typeof e.options.allowToolOnlyCompletion!=`boolean`||typeof e.options.withholdHostedTools!=`boolean`)&&Z(`Unsupported runtime continuation checkpoint`),e.structuredOutput&&Z(`Structured-output validators do not yet support execution continuation`),e}async function tc(e,t,n,r,i,a){let o=J(e.getMessages()),s=await n.journal.read(n.executionId);n.signal?.throwIfAborted();let c=s.findLast(e=>e.kind===`model-request`||e.kind===`model-cache-hit`);if((!c||!(`callId`in c))&&Z(`No recoverable model invocation exists`),c.kind===`model-request`&&!s.some(e=>e.kind===`model-response`&&e.callId===c.callId))throw new L(`EXECUTION_RECOVERY_REQUIRED`,`The latest model invocation has no durable response; reconcile it before resuming`);let l=Gs(s,n.executionId,c.callId,!1),u=ec(l.checkpoint.continuation);(u.model.provider!==r.defaultModel.provider||u.model.model!==r.defaultModel.model)&&Z(`Active provider and model must match the saved runtime before continuation`);let d=l.checkpoint.messages.find(e=>e.id===u.turnMessageId);(!d||d.role!==`user`||d.metadata?.executionId!==n.executionId)&&Z(`Continuation has no matching original input`),(u.toolSearch??`auto`)!==(r.toolSearch??`auto`)&&Z(`Tool residency policy differs from the saved runtime`),r.responseFormat&&r.responseFormat.type!==`text`&&Z(`Current runtime requires an unsupported structured-output validator`),u.options.maxSameToolInputs!==l.checkpoint.maxSameToolInputs&&Z(`Conflicting repeated-input limits`),u.kind===`summary`&&(l.response.toolCalls?.length??0)>0&&Z(`Terminal summary cannot dispatch tools`);for(let e of l.actions.values())e.result&&e.loadedDeferredTools===void 0&&Z(`Settled action lacks runtime residency state`);let f={...r,defaultModel:structuredClone(u.model),timeout:u.timeout,maxExecutionRounds:u.options.maxExecutionRounds,maxSameToolInputs:u.options.maxSameToolInputs},p=i(f);if(p.currentInfo.provider!==u.model.provider&&Z(`Active provider manager differs from the saved runtime`),o!==J(e.getMessages()))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`History changed while reading the execution journal`);let m=await Qs(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,onThinkingDelta:n.onThinkingDelta,onExecutionEvent:n.onExecutionEvent,traceContext:n.traceContext});a.eventEmitter.prepareOwnerPathBases(t);try{if(await Us(e,t,n.executionId,h,f,p,m.state,n.signal,a,m.stop||u.kind===`summary`),n.signal?.aborted)throw sn(`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*nc(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 rc(e,t,n){return{executionId:e,...t===void 0?{}:{driverId:t},...n===void 0?{}:{turnSource:n}}}var ic=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new yo(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 ko(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 tc(this.conversationHistory.getConversationStore(e),e,t,n,e=>Uo(this.aiProviders,this.tools,e),{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService})}resumeToolCalls(e,t){return $s(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=qo(),a=new Date,o=Jo(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=Uo(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=Go(this.conversationHistory,o,t,n,i),u,d={toolsExecuted:[],toolCallOutcomes:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};try{let t=l.getMessages().length;l.addUserMessage(e,rc(i,r?.driverId,r?.turnSource));let f=l.getMessages().at(-1);u=f?.id,f&&s.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:o,mutation:`append_message`,index:t,message:f}),this.eventEmitter.emitUserMessageEvent(e,o,i),await G(this.plugins,`beforeRun`,{input:e,...r?.metadata?{metadata:r.metadata}:{}},this.logger);let p={executionId:i,conversationId:o};f&&await G(this.plugins,`onMessageAdded`,{message:f,executionContext:p},this.logger);for(let e of[`beforeExecution`,`beforeConversation`])await G(this.plugins,e,{messages:l.getMessages(),executionContext:p},this.logger);Wo(c);for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await Us(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),Ws(e,l,i,a,d,o,u,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){if(R(e))throw e;return on(e,r?.signal)?{...No(l,i,a,d.toolsExecuted,{turnMessageId:u,interrupted:!0}),interrupted:!0}:(await Ko(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*nc(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 ac(e){let t=new za;if(e.aiProviders)for(let n of e.aiProviders)t.addProvider(n.name,n,{ownership:e.providerOwnership&&Object.hasOwn(e.providerOwnership,n.name)?e.providerOwnership[n.name]:`owned`});return e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),t}async function oc(e){let{config:t,aiProviders:n,tools:r,agentFactory:i,conversationHistory:a,moduleRegistry:o,eventEmitter:s,eventService:c,logger:l}=e;if(l.debug(`Starting ConversationAgent initialization with independent managers`),await Promise.all([n.initialize(),r.initialize(),i.initialize()]),t.modules){for(let e of t.modules)await o.registerModule(e,{autoInitialize:!0,validateDependencies:!0});l.debug(`Modules registered and initialized`,{moduleCount:t.modules.length,moduleNames:t.modules.map(e=>e.name)})}if(t.tools)for(let e of t.tools)e instanceof rn&&c&&e.setEventService(c),r.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Fi(e,t,n)},e.provenance),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new Ha(new Va({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new Ba));let d=new ic(n,r,a,c,t.executionContext,u);if(t.ask&&d.setAskHandler(t.ask),t.plugins)for(let e of t.plugins)d.registerPlugin(e),e.subscribeToModuleEvents&&(await e.subscribeToModuleEvents(s),l.debug(`Plugin subscribed to module events`,{pluginName:e.name}));return l.debug(`ConversationAgent initialization completed successfully with independent managers`),d}async function sc(e){try{let t=await oc(e.ctx);e.setExecutionService(t),e.setFullyInitialized(!0)}catch(t){throw e.ctx.logger.error(`ConversationAgent initialization failed`,{error:t instanceof Error?t.message:String(t)}),t}}function cc(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 lc(e){e.logger.debug(`Destroying ConversationAgent instance`,{name:e.name});let t=[],n=async(n,r)=>{try{await r(),e.logger.debug(n)}catch(r){let i=r instanceof Error?r:Error(String(r));t.push(i),e.logger.error(`Error during ConversationAgent destruction step`,{step:n,error:i.message})}};if(e.isFullyInitialized&&e.moduleRegistry&&await n(`All modules disposed`,()=>e.moduleRegistry.disposeAllModules()),e.executionService){let t=e.executionService.getPlugins();for(let e of t)await n(`Plugin disposed: ${e.name}`,()=>e.dispose());e.logger.debug(`ExecutionService plugins cleaned up`)}return e.moduleRegistry&&await n(`ModuleRegistry cleared`,()=>e.moduleRegistry.clearAllModules()),e.eventEmitter&&await n(`EventEmitter disposed`,()=>e.eventEmitter.dispose()),await n(`Tools disposed`,()=>e.tools.dispose()),await n(`AIProviders disposed`,()=>e.aiProviders.dispose()),e.resetState(),t.length===0?e.logger.info(`ConversationAgent instance destroyed successfully`,{name:e.name}):e.logger.warn(`ConversationAgent instance destroyed with cleanup failures`,{name:e.name,failureCount:t.length}),{errors:t}}var uc=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(),dc(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 dc(e,t){let n=e.reason;return on(n)&&n.name===`AbortError`?n:sn(t?`Run aborted while queued behind another run on this instance`:`Run aborted before it started`,n)}function fc(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??mc,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function pc(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new o(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel,r=n?.model??t.defaultModel;if(!r)throw new o(`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 o(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||mc(),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 mc(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function hc(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var gc=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 _c(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 vc(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function yc(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 bc(e,n.name,r)}t.push(n)}}function bc(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var xc=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new gc,this.logger=O(`AgentFactory`),this.options=fc(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 i,a=this.admit();try{i=pc(t,this.options);let s=i;if(this.options.strictValidation){let e=un(i);if(!e.isValid)throw new r(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let c;if(await yc([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(s)},{name:`construct`,run:()=>{c=new e(s)}},{name:`initialize`,run:()=>c?_c(c)?.initialize?.():void 0,undo:()=>c?_c(c)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!c)throw new o(`Agent was not constructed`);this.activeAgents.set(a,c),hc(this.creationStats,n)},undo:()=>{this.activeAgents.delete(a),this.creationStats.activeCount--,this.creationStats.totalCreated--,n?this.creationStats.fromTemplates--:this.creationStats.customConfigured--}},{name:`afterCreate`,run:()=>c?this.lifecycleEvents.afterCreate?.(c,s):void 0}]),this.pendingAgents.delete(a),!c)throw new o(`Agent was not constructed`);return this.logger.info(`Agent created successfully`,{agentId:a,model:i.defaultModel.model,provider:i.defaultModel.provider}),c}catch(e){this.pendingAgents.delete(a);let n=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&i&&await this.lifecycleEvents.onCreateError(n,i),this.logger.error(`Failed to create agent`,{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}admit(){if(this.activeAgents.size+this.pendingAgents.size>=this.options.maxConcurrentAgents)throw new o(`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 o(`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 o(`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 _c(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 un(e)}};function Sc(e,t,n){if(!e.name||e.name.trim()===``)throw new o(`Module name is required`);if(!e.version||e.version.trim()===``)throw new o(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new o(`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 Cc(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 o(`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 s=[];for(let e of i.dependencies)a.has(e)||s.push(e);s.length>0&&r.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:s})}function wc(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 Tc(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 Ec(){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 Dc(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 Oc(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 kc(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 Ac(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 jc=class{registeredTypes=new Map;logger;constructor(){this.logger=O(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new o(`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 o(`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 Dc(e,e=>this.getType(e))}resolveDependencies(e){return Oc(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return kc(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 Ec())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 Ac(this.registeredTypes)}};const Mc={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 jc,this.logger=O(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new o(`Cannot register modules during disposal`);if(Sc(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new o(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await Cc(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(Mc.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=wc(e,this.modules);if(n.length>0)throw new o(`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(Mc.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new o(`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 o(`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 o(`Module '${e}' not found`);if(!n.isInitialized())throw new o(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new o(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new o(`Module '${e}' does not support execute()`);let a=await n.execute(t),s=Date.now()-i;r.totalExecutions++,r.successfulExecutions++,r.totalExecutionTime+=s,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date;let c=this.moduleStatuses.get(e);return c&&(c.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 Tc(this.modules,this.moduleStats)}},Pc=class extends Pi{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=fa(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=O(`ConversationAgent`,t?{level:t}:{}),this.startTime=Date.now(),Ii(e),this.config={...e,aiProviders:[...e.aiProviders],...e.providerOwnership?{providerOwnership:{...e.providerOwnership}}:{}},this.aiProviders=ac(e),this.tools=pa(()=>this.config),this.agentFactory=new xc,this.conversationHistory=new zr,this.eventEmitter=Ca(),this.moduleRegistry=new Nc(this.eventEmitter),this.eventService=e.eventService||fi,this.agentEventService=_i(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:wa(this.conversationId,this.config.executionContext)});let n=ga({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,xa(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=[...wa(this.conversationId,this.config.executionContext),{type:`tool`,id:n.executionId??e}];return this.executionService.invokeRuntimeTool(e,t,{...n,baseEventService:this.eventService,eventService:_i(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=lr(t.output);return await Aa(this.executionDeps(),e,t,n)}return await Ea(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory()}})}async*runStream(e,t={}){this.assertNotDestroyed();let n=await this.runQueue.acquire(t.signal);try{if(await this.ensureFullyInitialized(),t.output){let n=lr(t.output);return yield*ja(this.executionDeps(),e,t,n)}return yield*Da(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new uc;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 Na(this.conversationHistory,this.conversationId)}getFullHistory(){return Pa(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Fa(this.conversationHistory,this.conversationId,e)}clearHistory(){Ia(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){La(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){Ra(this.conversationHistory,this.conversationId,e)}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e)}getModel(){return this.configManager.getModel()}updateSystemPrompt(e){this.configManager.setSystemMessage(e),this.conversationHistory.getConversationStore(this.conversationId).setSystemPrompt(e)}getSystemPrompt(){return this.configManager.getSystemMessage()}registerTool(e){this.configManager.registerTool(e,this.tools)}unregisterTool(e){this.tools.removeTool(e)}getOfferedToolSchemas(){return this.tools.getOfferedTools()}getConfig(){return{...this.config,aiProviders:[...this.config.aiProviders],...this.config.providerOwnership?{providerOwnership:{...this.config.providerOwnership}}:{}}}swapDefaultProvider(e,t,n={}){this.aiProviders.addProvider(e.name,e,n),this.config={...this.config,aiProviders:Object.values(this.aiProviders.getProviders()),providerOwnership:{...this.config.providerOwnership,[e.name]:n.ownership??`owned`}},this.configManager.setModel({provider:e.name,model:t})}getStats(){return cc({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,lc({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 sc({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){Sa(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const Fc=1e4,Ic=25e3,Lc=5e5,Rc=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,zc=Symbol.for(`@robota-sdk/tool-result-admitted`);var Bc=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function Vc(e){return Object.getOwnPropertyDescriptor(e,zc)?.value===!0}function Hc(e){return Object.defineProperty({...e},zc,{value:!0})}function Uc(e){if(e.parts?.length&&e.parts.every(e=>e.type===`text`)){let t=e.parts.map(e=>e.type===`text`?e.text:``).join(`
|
|
9
|
+
`);if(e.success&&e.data===t||!e.success&&e.data===void 0&&e.error===t)return t}if(e.parts?.length)return JSON.stringify({success:e.success,data:e.data,error:e.error,parts:e.parts});if(e.success)return typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;let t=e.data===void 0?``:typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;return`${e.error??``}${t}`}function Wc(e){return Number.isSafeInteger(e)&&e>0}function Gc(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!Wc(n)||!Wc(r)||!Wc(i)||n>=r||r>i||i>5e5)throw new Bc(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!Wc(t))throw new Bc(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function Kc(e,t,n={},r){let{warningChars:i,hardChars:a}=Gc(n,r),o=Uc(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new Bc(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new Bc(`spill-write-failed`)}if(!Rc.test(e)||e.length>a)throw new Bc(`invalid-reference`);let r=t.view?{view:t.view}:{};return Hc(t.success?{success:!0,data:e,...r}:{success:!1,error:`Tool failure details: ${e}`,...r})}return Hc(t)}var qc=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 Jc={STARTED:`started`,STEP_STARTED:`step_started`,STEP_COMPLETED:`step_completed`,COMPLETED:`completed`,FAILED:`failed`},Yc=`orchestration`;function Xc(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function Zc(e){return typeof e==`string`?e.length:0}var Qc=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:Zc(n[0]),conversationId:e.conversationId,options:Xc(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:Zc(n[0]),conversationId:e.conversationId,streaming:!0,options:Xc(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:M.CALL_START,completeEvent:M.CALL_COMPLETE,errorEvent:M.CALL_ERROR,extractMetadata:(e,t,n)=>({toolName:Xc(e.schema)?.name||e.constructor.name,parameters:n[0],parametersCount:Xc(n[0])?Object.keys(Xc(n[0])||{}).length:0,context:n[1]}),extractResult:e=>({result:typeof Xc(e)?.data==`string`?Xc(e)?.data||``:JSON.stringify(Xc(e)?.data),success:Xc(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 $c(e,t){let n=new Qc(t);return n.configureStandardMethods(),n.wrap(e)}function el(e,t,n){return function(r){return $c(r,{eventService:e,sourceType:t,sourceId:n})}}const tl={safe:`plan`,moderate:`default`,full:`acceptEdits`},nl=`inherit-allowlist`;function rl(e){let t;for(let n=0;n<e.length;n+=1){let r=e[n];if(t===`'`){r===`'`&&(t=void 0);continue}if(r===`\\`){n+=1;continue}let i=e[n+1];if(r==="`"||r===`$`&&i===`(`)return!0;if(t===`"`){r===`"`&&(t=void 0);continue}if(r===`'`||r===`"`){t=r;continue}if(r===`;`||r===`|`||r===`
|
|
10
|
+
`||(r===`<`||r===`>`)&&i===`(`)return!0;if(r===`&`){let t=e[n-1];if(t!==`>`&&t!==`<`&&i!==`>`)return!0}}return!1}function il(e){let t={segments:[],current:``,quote:void 0,substitutionDepth:0};for(let n=0;n<e.length;n+=1){let r=ol(t,e,n);if(r!==void 0){n=r;continue}let i=sl(t,e,n);if(i!==void 0){n=i;continue}if(cl(t,e[n]))continue;let a=ll(t,e,n);if(a!==void 0){n=a;continue}t.current+=e[n]}return al(t),t.segments}function al(e){let t=e.current.trim();t!==``&&e.segments.push(t),e.current=``}function ol(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 sl(e,t,n){let r=t[n];if(r==="`")return al(e),n;if(r===`$`&&t[n+1]===`(`)return al(e),e.substitutionDepth+=1,n+1}function cl(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 ll(e,t,n){let r=t[n];if((r===`<`||r===`>`)&&t[n+1]===`(`)return al(e),e.substitutionDepth+=1,n+1;if(r===`)`&&e.substitutionDepth>0)return al(e),--e.substitutionDepth,n;if(r===`;`||r===`|`||r===`
|
|
11
|
+
`||r===`&`&&ul(t,n))return al(e),n}function ul(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const dl=/[.+^${}()|[\]\\]/g;function fl(e,t){let n,r=``;for(let i of e){if(i===n){n=void 0;continue}if(n===void 0&&(i===`'`||i===`"`)){n=i;continue}if(n!==void 0&&(i===` `||i===` `))return;if(n===void 0&&(i===` `||i===` `)){r.endsWith(` `)||(r+=` `);continue}if(/[^\x20-\x7e]|[$`\\!%~<>()[\]{}?#]/u.test(i)||!t&&i===`*`)return;r+=i}return n===void 0?r:void 0}function pl(e){let t=e.replace(dl,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function ml(e,t,n){let r=pl(e);if(n===`deny`){if(r.test(t))return`match`;let n=il(t);if(n.some(e=>r.test(e)))return`match`;let i=fl(e,!0);if(i===void 0)return`unevaluable`;let a=pl(i);for(let e of n){let t=fl(e,!1);if(t!==void 0&&a.test(t))return`match`}return`unevaluable`}return r.test(t)?e.includes(`*`)&&rl(t)?`no-match`:`match`:`no-match`}function hl(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(dl,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function gl(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function _l(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 vl(e,t){let n=_l(e),r=_l(t);return gl(n)&&!gl(r)?`unevaluable`:hl(n).test(r)?`match`:`no-match`}const yl=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,bl=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),xl={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function Sl(e){return e.replace(/\.$/,``).toLowerCase()}function Cl(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function wl(e,t=!1){let n=Sl(e).replace(/\*\*(?:\.\*\*)+/g,`**`).split(`.`),r=[],i=`[^.]+(?:\\.[^.]+)*`;for(let[e,a]of n.entries()){let o=e===0,s=e===n.length-1;if(a===`**`){o&&s?r.push(i):s?r.push(`(?:\\.${i})?`):r.push(`${o?``:`\\.`}(?:${i}\\.)?`);continue}let c=!o&&n[e-1]===`**`,l=o||c?``:`\\.`;if(a===`*`)r.push(`${l}${t&&!o?`[^.]*`:i}`);else if(a.includes(`**`))return null;else if(a.includes(`*`))r.push(`${l}${a.replace(dl,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=Cl(a);if(e===null)return null;r.push(`${l}${e.replace(dl,`\\$&`)}`)}}return RegExp(`^${r.join(``)}$`)}function Tl(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function El(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!bl.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function Dl(e,t,n=!1){if(e.includes(`*`)){let r=wl(e,n);return r===null?`unevaluable`:r.test(t)?`match`:`no-match`}let r;try{r=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return Sl(r)===t?`match`:`no-match`}function Ol(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?xl[n]:t.port)}function kl(e,t){let n=Tl(t),r=Tl(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:hl(r).test(n)?`match`:`no-match`}function Al(e,t){let n=yl.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=El(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=Dl(i,Sl(s.hostname));return l===`match`?Ol(a,s,c)?o===void 0?`match`:kl(o,s.pathname):`no-match`:l}function jl(e,t){if(!e.startsWith(`domain:`))return Al(e,t);let n=/^domain:([^/\\:?#@[\]\s]+)$/.exec(e);if(n===null)return`unevaluable`;let r=Sl(n[1]);if(r.includes(`**`)||r.split(`.`).some(e=>e===``))return`unevaluable`;let i=El(t);return i===null||i.protocol!==`http:`&&i.protocol!==`https:`?`unevaluable`:Dl(r,Sl(i.hostname),!0)}const Ml={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`}},Nl={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},Pl=[`.git`,`.claude`,`.agents`],Fl=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function Il(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function Ll(e){let t=[];for(let n of Il(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function Rl(e,t={}){let n=t.pathProtection,r=Vl.exec(e),i=r!==null&&t.homeDirectory!==void 0?`${t.homeDirectory}/${r[1]??``}`:e,a=i.startsWith(`/`)?zl(i):t.cwd===void 0?void 0:zl(`${t.cwd}/${i}`);if(a!==void 0&&n?.protectedPaths.some(e=>{let t=zl(e);return a===t||a.startsWith(`${t}/`)}))return!0;let o=Ll(i),s=o[o.length-1];if(s!==void 0&&Fl.includes(s))return!0;let c=[...Pl,...n?.protectedDirectoryNames??[]],l=[`.claude/worktrees`,...n?.writableWorktreeContainers??[]].map(Ll);for(let e=0;e<o.length;e+=1){if(!c.includes(o[e]))continue;let t=l.find(t=>t.length>0&&t.every((t,n)=>o[e+n]===t)&&o[e+t.length]!==void 0);if(t!==void 0){e+=t.length;continue}return!0}return!1}function zl(e){let t=[];for(let n of Il(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function Bl(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const Vl=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function Hl(e,t){let n=Bl(e),r=Vl.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=zl(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=zl(n);else{if(t.cwd===void 0)return!1;i=zl(`${t.cwd}/${n}`)}if(Il(i).length<=1||t.homeDirectory!==void 0&&i===zl(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=zl(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const Ul=new Set([`rm`,`rmdir`]),Wl=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 Gl(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=Wl.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 Kl(e,t){return il(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=Gl(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!Ul.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:Hl(e,t))})}const ql=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),Jl=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),Yl={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},Xl=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,Zl=[`--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 Ql(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return Zl.some(e=>e.startsWith(t))}function $l(e,t){if(du(t).some(e=>Xl.test(e.text)||Ql(e.text)))return!0;if(e===`find`)return du(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=Yl[e];return n!==void 0&&du(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const eu=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),tu=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),nu=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),ru=new Set([`/dev/null`]),iu=/[A-Za-z0-9_./:=@+,*?[\]~-]/,au=new Set([`$`,"`",`\\`,`!`]),ou=new Set([`*`,`?`,`[`]);function su(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||cu(e)}function cu(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 lu(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 uu(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!ru.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||su(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:au.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(!iu.test(l)){s=!0;break}ou.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 du(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function fu(e){return e.every(e=>!e.expands&&!Jl.has(e.text))}function pu(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>tu.has(e.text));return t.every(e=>tu.has(e.text)||nu.has(e.text))&&(n||t.length===e.length)}function mu(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!eu.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`?pu(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function hu(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=>su(e.text))||$l(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:ql.has(t.text)?!0:t.text===`find`?fu(n):t.text===`git`&&mu(n)}const gu=new Set([`echo`,`which`,`git`]);function _u(e,t){let n;for(let[r,...i]of e)if(!gu.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 vu(e,t={}){if(t.otherDirectory===!0||e.length>1e4||lu(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=il(e);if(n.length===0)return!1;let r=n.map(uu);if(r.some(e=>e.refused||!hu(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:_u(r.map(e=>e.words),t.resolveInWorkspace)}function yu(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 bu(e,t){Q.set(e,{...Q.get(e),...t})}function xu(){Q.clear()}function Su(e){return Q.get(e)??{}}function Cu(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=pl(e);return n.some(e=>r.test(e))}function wu(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 Tu(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`:pl(e.value).test(String(n))?`match`:`no-match`}function Eu(e,t){return t.some(t=>{let n=yu(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&Cu(n.toolName,e)})}function Du(e){return Q.get(e)?.argument?.key}function Ou(e,t){let n=Du(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function ku(e,t,n,r=`allow`){return n.some(n=>ju(e,t,n,r)===`match`)}function Au(e,t,n){return n.some(n=>ju(e,t,n,`deny`)===`unevaluable`)}function ju(e,t,n,r){let i=yu(n);if(!Cu(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=wu(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?Tu(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=Ou(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return e===`WebFetch`?jl(i.argPattern,s):Al(i.argPattern,s);case`path`:return vl(i.argPattern,s);case`command`:return ml(i.argPattern,s,r);case`text`:return pl(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function Mu(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`?Kl(a,n):i.kind===`path`&&r?.riskClass===`modify`&&Rl(a,n):!1}function Nu(e,t,n,r){return ku(e,t,n,`deny`)||Au(e,t,n)||Mu(e,t,r)}function Pu(e,t,n={},r={}){return Au(e,t,n.deny??[])||Nu(e,t,n.ask??[],r)}const Fu=[`workingDirectory`,`cwd`];function Iu(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`&&vu(i,{otherDirectory:Fu.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function Lu(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=Iu(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return ku(e,t,o,`deny`)||i.ceiling!==void 0&&!ku(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0||Q.get(e)?.notInPeerTurn===!0&&i.peerTurn===!0?`deny`:Au(e,t,o)?n===`plan`?`deny`:`approve`:Nu(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||ku(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?Nl[n]:Ml[n][c]}function Ru(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 zu=/^[A-Za-z_]\w*:(?!\/\/)/;function Bu(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function Vu(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}=yu(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!Bu(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`&&zu.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=wu(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=Su(r);if(!(o.parameters===void 0&&zu.test(i)&&wu(r,i)===void 0)){if(o.argument===void 0)return o.riskClass===void 0?void 0:`tool "${r}" declares no argument key, so an argument-scoped pattern can never be evaluated`;if(o.argument.kind===`url`&&(r===`WebFetch`?jl:Al)(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path]${r===`WebFetch`?` or domain:hostname`:``} that "${r}" is matched by`}}function Hu(e,t=`deny`){let n=[];for(let r of e){let e=Vu(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function Uu(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=yu(n.trim());if(r===void 0||e.includes(`*`))continue;let i=Su(e),a=wu(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&zu.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=Su(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 Wu(e){return(e??[]).map(e=>`${e}(*)`)}function Gu(e,t){let n=Wu(t.allowedTools),r=Hu(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,...Wu(t.deniedTools)])]}}const Ku=[`Bash`,`Shell`,`BackgroundProcess`],qu=[`Agent`],Ju=[...Ku,...qu,`ExecuteCommand`,`Computer`],Yu=`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(`.`),Xu=[`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(` `)),Zu=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function Qu(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function $u(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=Qu(e[0]);if(Yu.some(t=>n(t,r,e.length===1)))return!0;for(let i of Xu){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(`-`)||Zu.has(o[0]));)o=o.slice(1);return o.length===0||$u(o,t)}return!1}function ed(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return $u(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function td(e){let{toolName:t,argPattern:n}=yu(e),r=e=>e.some(e=>Cu(t,e));return r(qu)?!0:t.includes(`*`)?r(Ju):Ju.includes(t)||Su(t).riskClass===`execute`?n===void 0||n.trim()===`*`||Ku.includes(t)&&ed(n):!1}function nd(e){return e.filter(e=>!td(e))}const rd=1e6,id={"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}},ad=[{pattern:/claude-opus/i,price:{inputPerMillion:15,outputPerMillion:75}},{pattern:/claude-sonnet/i,price:{inputPerMillion:3,outputPerMillion:15}},{pattern:/claude-haiku/i,price:{inputPerMillion:.8,outputPerMillion:4}},{pattern:/gpt-4o-mini/i,price:{inputPerMillion:.15,outputPerMillion:.6}},{pattern:/gpt-4/i,price:{inputPerMillion:2.5,outputPerMillion:10}},{pattern:/gemini-2/i,price:{inputPerMillion:.1,outputPerMillion:.4}},{pattern:/gemini-1/i,price:{inputPerMillion:1.25,outputPerMillion:5}}];function od(e){let t=Object.hasOwn(id,e)?id[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of ad)if(t.test(e))return n}function sd(e,t,n){let r=od(e);if(r)return t/rd*r.inputPerMillion+n/rd*r.outputPerMillion}function cd(e){let t=od(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function ld(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 ud(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 dd(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([import(`./command-executor-DIXaSMrr.js`),import(`./http-executor-B4YgCJg7.js`)]);return[new e,new t]}async function fd(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 dd(),u=new Map;for(let e of l)u.set(e.type,e);let d=[],f=ud(n),p=-1,m,h;for(let e of c){if(!ld(e,f))continue;let r=e.env?{...n,env:{...n.env,...e.env}}:n;for(let n of e.hooks){let e=u.get(n.type);if(!e){a.add(n.type);continue}let c=n.type===`command`&&i!==void 0?await e.execute(n,r,i):await e.execute(n,r);if(c.outcome===`deny`)return{blocked:!0,reason:c.reason||`Blocked by hook`,stdout:d.join(`
|
|
12
12
|
`),...s()};if(c.outcome===`error`){o.push(c);continue}let l=re(c.stdout,t);if(d.push(...l.context),l.blockReason!==void 0)return{blocked:!0,reason:l.blockReason,stdout:d.join(`
|
|
13
13
|
`),...l.permissionDecision===`deny`&&{permissionDecision:`deny`},...s()};if(l.permissionDecision!==void 0&&c.source===`command`){let e=ne[l.permissionDecision];e>p?(p=e,m=l.permissionDecision,h=l.updatedInput):e===p&&l.updatedInput!==void 0&&(h=l.updatedInput)}}}let g={blocked:!1,stdout:d.join(`
|
|
14
|
-
`)};m!==void 0&&(g.permissionDecision=m),h!==void 0&&(g.updatedInput=h);let{unknownHookTypes:_,errors:v}=s();return _!==void 0&&(g.unknownHookTypes=_),v!==void 0&&(g.errors=v),g}var
|
|
14
|
+
`)};m!==void 0&&(g.permissionDecision=m),h!==void 0&&(g.updatedInput=h);let{unknownHookTypes:_,errors:v}=s();return _!==void 0&&(g.unknownHookTypes=_),v!==void 0&&(g.errors=v),g}var pd=class extends Error{guardrailName;guardrailReason;constructor(e,t){super(t),this.guardrailName=e,this.guardrailReason=t,this.name=`GuardrailBlock`}},md=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 pd(e,`Guardrail "${e}" errored: ${t instanceof Error?t.message:String(t)}`)}if(!r.pass)throw new pd(e,r.reason??`Guardrail "${e}" blocked the turn`)}))}catch(e){if(e instanceof pd)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 hd(e,t){return{posture:`advisory`,enforcementReachable:!1,rationale:`Awaited at ${e} but only ${t} is read; \`blocked\` is never consulted.`}}function gd(e){for(let t of Object.values(e))Object.freeze(t);return Object.freeze(e)}const _d=gd({PreToolUse:{posture:`enforcing`,enforcementReachable:!0,rationale:"The tool-execution gate. `runPreToolGate` awaits the result and turns `blocked` into a denial, so a hook that reached no verdict must not read as approval (tracker issue #2075)."},SessionEnd:hd(`session-lifecycle.ts`,`nothing`),PreCompact:hd(`compaction-orchestrator.ts`,`nothing`),UserPromptSubmit:hd(`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 vd(e){return _d[e].posture===`enforcing`}function yd(e){if(e.type===`resource_link`)return`Resource reference (not fetched): ${JSON.stringify(e)}`;if(e.type===`resource_embedded`){let t=`${JSON.stringify(e.uri)}${e.mimeType?` (${e.mimeType})`:``}`;return e.text===void 0?`Embedded binary resource ${t}; binary content retained but not transmitted by this adapter.`:`Embedded resource ${t}:\n${e.text}`}if(e.type===`audio_inline`)return`Audio observation (${e.mimeType}); this adapter does not transmit audio payloads.`}export{A as AGENT_EVENTS,Kt as AGENT_EVENT_PREFIX,Vt as AbstractAIProvider,Ue as AbstractAgent,ui as AbstractEventService,nn as AbstractExecutor,We as AbstractManager,tn as AbstractPlugin,rn as AbstractTool,xc as AgentFactory,y as AgentRuntimeError,gc as AgentTemplates,g as AuthenticationError,Ae as CONFIRM_NO,ke as CONFIRM_YES,Ki as CONTEXT_ESTIMATE_CHARS_PER_TOKEN,p as CacheIntegrityError,f as CircuitBreakerOpenError,o as ConfigurationError,Pt as ConsoleLogger,Pc as ConversationAgent,Pc as Robota,zr as ConversationHistory,Rr as ConversationStore,fi as DEFAULT_ABSTRACT_EVENT_SERVICE,nl as DEFAULT_BACKGROUND_PERMISSION_POLICY,ta as DEFAULT_CONTEXT_WINDOW,sa as DEFAULT_MAX_OUTPUT,Ic as DEFAULT_TOOL_RESULT_HARD_CHARS,Fc as DEFAULT_TOOL_RESULT_WARNING_CHARS,Ai as DEFERRED_WITHOUT_LOADER_MESSAGE,di as DefaultEventService,Cr as ENV_REFERENCE_PREFIX,P as EVENT_EMITTER_EVENTS,j as EXECUTION_EVENTS,qt as EXECUTION_EVENT_PREFIX,C as EmptyCompletionError,hn as ErrorUtils,ei as EventEmitterPlugin,qc as EventHistoryModule,F as ExecutionJournalError,Qc as ExecutionProxy,L as ExecutionRecoveryError,I as ExecutionSuspendedError,Oi as FunctionTool,md as GuardrailExecutor,Gr as InMemoryEventEmitterMetrics,Hr as LocalExecutor,Lc as MAX_TOOL_RESULT_CHARS,de as MODEL_EFFORT_VALUES,id as MODEL_PRICES,cn as MessageConverter,T as ModelNotAvailableError,c as NetworkError,Jc as ORCHESTRATION_EVENTS,Yc as ORCHESTRATION_EVENT_PREFIX,yi as ObservableEventService,yt as PARAMETER_SCHEMA_KEYWORDS,wt as PERMISSIVE_TOOL_SCHEMA_PROFILE,Pl as PROTECTED_DIRECTORY_NAMES,Fl as PROTECTED_FILE_NAMES,xi as PROVIDER_CALL_EVENTS,Si as PROVIDER_FALLBACK_EVENTS,Wt as PluginCategory,w as PluginError,Gt as PluginPriority,i as ProviderError,Ml as RISK_CLASS_POLICY,e as RateLimitError,bi as SPAN_EVENTS,Di as SPAN_EVENT_PREFIX,Tt as STRICT_TOOL_SCHEMA_PROFILE,te as SameToolInputLoopError,Mt as SilentLogger,a as StorageError,gi as StructuredEventService,n as StructuredOutputError,_a as TASK_EVENTS,va as TASK_EVENT_PREFIX,wi as TOOL_BODY_EVENTS,M as TOOL_EVENTS,Jt as TOOL_EVENT_PREFIX,Ei as TOOL_PERMISSION_EVENTS,Ti as TOOL_QUEUE_EVENTS,_t as TOOL_SCHEMA_PROJECTION_MAX_DEPTH,vt as TOOL_SCHEMA_PROJECTION_MAX_NODES,Oe as TOOL_SEARCH_TOOL_NAME,tl as TRUST_TO_MODE,t as ToolExecutionError,ni as ToolRegistry,Bc as ToolResultAdmissionError,oe as TypeUtils,Nl as UNCLASSIFIED_TOOL_FALLBACK,ya as USER_EVENTS,ba as USER_EVENT_PREFIX,u as UnsupportedShellError,r as ValidationError,ln as Validator,Kc as admitToolResult,nd as allowRulesForAutoMode,Gu as applyPresetToolLists,ce as assertProviderNativeWebToolsAvailable,Ni as assertResidentToolRemains,vi as bindEventServiceOwner,_i as bindWithOwnerPath,_ as buildTraceparent,sd as calculateModelCost,Un as callJournaledProvider,Ze as chatEntryToMessage,zn as classifyProviderFailure,xu as clearRegisteredToolProfiles,ft as closeObjectSchemas,fs as collectAssistantUsageMetadata,mi as composeEventName,Me as confirmAction,sn as createAbortError,Pr as createAssistantMessage,S as createBoundedOutput,se as createDefaultProviderCapabilities,$c as createExecutionProxy,xr as createImageProviderFromDefinition,O as createLogger,pe as createModelEffortOutcome,kr as createProviderFromConfig,vr as createRecordEnvResolver,Fr as createSystemMessage,Ir as createToolMessage,Nr as createUserMessage,Sr as createVideoProviderFromDefinition,ie as decodeHookVerdict,cd as estimateBlendedCostPer1000,Yi as estimateContextTokensFromMessages,qi as estimateSerializedContextTokens,Ji as estimateToolSchemaTokens,Lu as evaluatePermission,Yn as extractEnumValues,Hu as findInvalidPermissionPatterns,De as findMediaProviderDefinition,aa as findModelDefinition,Uu as findPermissionPatternWarnings,ve as findProviderDefinition,Tr as formatEnvReference,ye as formatSupportedProviderTypes,ua as formatTokenCount,hi as generateSpanId,Lt as getGlobalLogLevel,zt as getGlobalLoggerSink,$e as getMessagesForAPI,oa as getModelContextWindow,ca as getModelMaxOutput,la as getModelName,_e as getProviderCapabilities,be as getProviderCredentialRequirement,Qn as getSchemaTypeName,Re as getToolEstimatedDuration,ze as getToolExecutionSteps,Su as getToolPermissionProfile,Au as hasUnevaluableArgumentPattern,Dr as hasUsableSecretReference,Zn as hasValidationConstraints,At as hashToolSchema,on as isAbortFailure,tt as isAssistantMessage,td as isBroadExecutionAllowRule,Xe as isChatEntry,Ie as isConfirmed,pi as isDefaultEventService,vd as isEnforcing,wr as isEnvReference,R as isExecutionControlError,we as isImageGenerationProvider,Ee as isMediaProviderDefinition,b as isMintedSpanId,fe as isModelEffort,Le as isProgressReportingTool,Rl as isProtectedPath,vu as isReadOnlyCommandLine,vc as isRegistryTransactionError,nt as isSystemMessage,Eu as isToolDeniedOutright,rt as isToolMessage,et as isUserMessage,Te as isVideoGenerationProvider,_c as lifecycleOf,k as logger,od as lookupModelPrice,ku as matchesAnyPattern,Qe as messageToHistoryEntry,Se as modelDeclaresCapability,Pe as multiSelectAction,yd as nonVisualObservationText,Or as normalizeProviderConfig,lr as normalizeStructuredOutput,m as outboundTraceContextFor,wu as parseParameterRule,mr as parseStructuredResponseText,_s as peerDriverOf,vs as printablePeerDriver,_r as processEnvResolver,Ru as projectPermissionPolicy,jt as projectToolSchema,s as providerCallSpanId,Ci as readModelFallbackNotice,On as readProviderFailureDetails,zi as readTokenUsageFromMessage,Bi as readTokenUsageFromMetadata,ra as registerModelMetadata,bu as registerToolPermissionProfile,Kl as removesCriticalPath,Pu as requiresFreshApproval,Er as resolveEnvReference,br as resolveMediaProviderConfig,xe as resolveModelCapabilities,Ce as resolveModelCapability,ge as resolveModelEffort,d as resolvePlatformShell,gr as resolveStructuredOutputCapability,fd as runHooks,yc as runRegistryTransaction,En as scrubSecrets,Ne as selectAction,It as setGlobalLogLevel,Rt as setGlobalLoggerSink,Be as setToolProgressCallback,Wr as shellArgumentForDisplay,Ve as snapshotToolProvenance,v as spanIdFromMintedId,il as splitCommandSegments,Bn as startPeriodicTask,Vn as stopPeriodicTask,x as subprocessTraceEnvironment,us as sumHistoryUsage,ls as sumMessagesUsage,Fe as textAction,Nn as toProviderError,Cu as toolNameMatches,Wu as toolNamesToPatterns,l as toolTraceContextFor,h as traceEnvFor,ee as traceHeadersFor,ur as validateAgainstJsonSchema,un as validateAgentConfig,mn as validateApiKey,pn as validateModelName,Vu as validatePermissionPattern,fn as validateProviderName,dn as validateUserInput,cs as verifiedProviderCallUsage,Vc as wasToolResultAdmitted,el as withEventEmission,He as withToolProvenance,$n as zodToJsonSchema};
|
|
15
15
|
//# sourceMappingURL=index.js.map
|