@robota-sdk/agent-core 3.0.0-beta.84 → 3.0.0-beta.85
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 +56 -0
- package/dist/browser/bounded-output-Bgx2Cgkx.js +2 -0
- package/dist/browser/bounded-output-Bgx2Cgkx.js.map +1 -0
- package/dist/browser/{command-executor-BsBTcghZ.js → command-executor-C0XXfBnt.js} +2 -2
- package/dist/browser/{command-executor-BsBTcghZ.js.map → command-executor-C0XXfBnt.js.map} +1 -1
- package/dist/browser/{http-executor-CHy6UeBU.js → http-executor-B4YgCJg7.js} +2 -2
- package/dist/browser/{http-executor-CHy6UeBU.js.map → http-executor-B4YgCJg7.js.map} +1 -1
- package/dist/browser/index.d.ts +48 -19
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +11 -11
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/{verdict-decoder-Dk_w2NG9.js → verdict-decoder-Dz_rjoIZ.js} +2 -2
- package/dist/browser/verdict-decoder-Dz_rjoIZ.js.map +1 -0
- package/dist/node/bounded-output-Bgx2Cgkx.js +2 -0
- package/dist/node/bounded-output-Bgx2Cgkx.js.map +1 -0
- package/dist/node/{command-executor-CPGK8I8l.cjs → command-executor-CqAFpB-X.cjs} +1 -1
- package/dist/node/{command-executor-BdE1zg3q.js → command-executor-d6DdfUTD.js} +2 -2
- package/dist/node/{command-executor-BdE1zg3q.js.map → command-executor-d6DdfUTD.js.map} +1 -1
- package/dist/node/{http-executor-cWzI2svn.js → http-executor-ADn4locH.js} +2 -2
- package/dist/node/{http-executor-cWzI2svn.js.map → http-executor-ADn4locH.js.map} +1 -1
- package/dist/node/{http-executor-BYiKn8h3.cjs → http-executor-BFtXs8FP.cjs} +1 -1
- package/dist/node/{index-DXZ-pyEr.d.ts → index-CPwJEiFl.d.cts} +49 -20
- package/dist/node/index-CPwJEiFl.d.cts.map +1 -0
- package/dist/node/{index-gEUh4G-t.d.cts → index-DQrmrFn9.d.ts} +49 -20
- package/dist/node/index-DQrmrFn9.d.ts.map +1 -0
- package/dist/node/index.cjs +9 -9
- package/dist/node/index.d.cts +3 -3
- package/dist/node/index.d.ts +3 -3
- package/dist/node/index.js +11 -11
- package/dist/node/index.js.map +1 -1
- package/dist/node/node.cjs +1 -1
- package/dist/node/node.d.cts +1 -1
- package/dist/node/node.d.ts +1 -1
- package/dist/node/node.js +1 -1
- package/dist/node/testing/index.d.cts +1 -1
- package/dist/node/testing/index.d.ts +1 -1
- package/dist/node/{types-BQ-sKCQS.d.cts → types-Ge2XB-y-.d.cts} +2 -2
- package/dist/node/{types-BQ-sKCQS.d.cts.map → types-Ge2XB-y-.d.cts.map} +1 -1
- package/dist/node/{types-BQ-sKCQS.d.ts → types-Ge2XB-y-.d.ts} +2 -2
- package/dist/node/{types-BQ-sKCQS.d.ts.map → types-Ge2XB-y-.d.ts.map} +1 -1
- package/dist/node/verdict-decoder-DIHay1ul.cjs +1 -0
- package/dist/node/{verdict-decoder-Dk_w2NG9.js → verdict-decoder-Dz_rjoIZ.js} +2 -2
- package/dist/node/verdict-decoder-Dz_rjoIZ.js.map +1 -0
- package/package.json +1 -1
- package/dist/browser/bounded-output-D3cgiOrh.js +0 -2
- package/dist/browser/bounded-output-D3cgiOrh.js.map +0 -1
- package/dist/browser/verdict-decoder-Dk_w2NG9.js.map +0 -1
- package/dist/node/bounded-output-D3cgiOrh.js +0 -2
- package/dist/node/bounded-output-D3cgiOrh.js.map +0 -1
- package/dist/node/index-DXZ-pyEr.d.ts.map +0 -1
- package/dist/node/index-gEUh4G-t.d.cts.map +0 -1
- package/dist/node/verdict-decoder-D412SAGd.cjs +0 -1
- package/dist/node/verdict-decoder-Dk_w2NG9.js.map +0 -1
package/dist/browser/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
import{C as e,D as t,E as n,S as r,T as i,_ as a,a as o,b as s,c,d as l,f as u,g as d,h as f,i as p,l as m,m as h,n as g,o as _,p as v,r as y,s as b,t as x,u as S,v as C,w,x as T,y as E}from"./bounded-output-D3cgiOrh.js";import{n as ee,r as te,t as ne}from"./verdict-decoder-Dk_w2NG9.js";import re from"jssha";const ie={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>ie.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>ie.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date||ie.isPrimitive(e)||ie.isArray(e)||ie.isObject(e)};function ae(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 oe(e,t,n){n?.webSearch===!0&&se(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&se(e,`web fetch`,t.nativeWebTools.webFetch)}function se(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${ce(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${ce(n.reason)}`)}function ce(e){return e?` ${e}`:``}const le=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function ue(e){return typeof e==`string`&&le.includes(e)}function de(e,t){return{resolution:e,...t}}const fe=new Map(le.map((e,t)=>[e,t]));function pe(e,t){return{selection:e,effective:null,disposition:`not-applied`,fingerprint:`${t}|${e}|not-applied`}}function me(e,t,n){let r=e?.models[t];if(!r)return pe(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`)}:pe(n,t);if(r.supportedEfforts.includes(n))return{selection:n,effective:n,disposition:`exact`,fingerprint:i(n,`exact`)};let a=fe.get(n),o=r.supportedEfforts.filter(e=>(fe.get(e)??1/0)<(a??-1)).at(-1);return o?{selection:n,effective:o,disposition:`clamped`,fingerprint:i(o,`clamped`)}:pe(n,t)}function he(e){let t=typeof e.supportsTools==`function`&&e.supportsTools();return e.getCapabilities?.()??ae(t)}function ge(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function _e(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 ve(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function ye(e,t){if(e)return e.deviations?.[t]?.capabilities??e.vendorDefault}function be(e,t,n){let r=ye(e,t);if(!(!r||r.length===0))return r.includes(n)}function xe(e,t,n,r){return be(e,t,n)??r}function Se(e){return`generateImage`in e&&typeof e.generateImage==`function`}function Ce(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function we(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 Te(e,t){return e.find(e=>e.type===t)}const Ee=`ToolSearch`,De=`yes`,Oe=`no`,ke=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function Ae(e,t,n){return{id:e,title:t,description:n?.description,options:ke,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function je(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 Me(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 Ne(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 Pe(e){return e.type===`answer`&&e.values.includes(`yes`)}function Fe(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function Ie(e,t){if(Fe(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function Le(e,t){if(Fe(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function Re(e,t){return Fe(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}var ze=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}},Be=class{initialized=!1;disposed=!1;constructor(e={}){this.initialized=e.readyOnConstruction===!0}async initialize(){this.initialized||(await this.doInitialize(),this.initialized=!0,this.disposed=!1)}async dispose(){await this.doDispose(),this.initialized=!1,this.disposed=!0}isInitialized(){return this.initialized}ensureInitialized(){if(this.disposed)throw Error(`${this.constructor.name} was disposed — re-initialize it before use, or build a new one`);if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function Ve(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 He(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 Ue(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*We(e,t,n,r){if(!e||!e.executeChatStream)throw Error(`Streaming executor is required for ${t} provider.`);if(!r?.model)throw Error(`Model is required for executor streaming in ${t} provider.`);let i=e.executeChatStream({messages:n,options:r,provider:t,model:r.model,stream:!0,...r.tools&&{tools:r.tools}}),a=!1;for await(let e of i){if(e.kind===`terminal`){if(a)throw Error(`Executor "${t}" emitted more than one stream terminal result.`);a=!0}yield e}if(!a)throw Error(`Executor "${t}" ended a stream without a terminal result.`)}async function*Ge(e,t,n,r,i){e.debug?.(`🔍 [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request`,{provider:n,model:i?.model,hasTools:!!i?.tools,toolsCount:i?.tools?.length||0,toolNames:i?.tools?.map(e=>e.name)||[]}),yield*We(t,n,r,i)}function Ke(e){return e.category===`chat`}function qe(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 Je(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function Ye(e){return e.filter(Ke).map(qe)}function Xe(e){return e.role===`user`}function Ze(e){return e.role===`assistant`}function Qe(e){return e.role===`system`}function $e(e){return e.role===`tool`}function et(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:me(t?.(),s.model,s.effort)}}function tt(e,t,n){if(t)return;let r=e.effortResolution,i=e.onModelEffortOutcome;if(r===void 0||i===void 0)return;let a=de(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 nt(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 rt(e,t,n){let r,i=et(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=tt(i,e.effortTable!==void 0,t),nt(e.name,i,r),{content:a.content??null,toolCalls:Ze(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*it(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=et(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:Ze(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=tt(i,e.effortTable!==void 0,t),nt(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const at={type:`null`};function ot(e){return e.type===`null`||Array.isArray(e.anyOf)&&e.anyOf.some(e=>typeof e==`object`&&!!e&&e.type===`null`)}function st(e){if(typeof e!=`object`||!e||Array.isArray(e))return e;let t=e;return ot(t)?t:Array.isArray(t.anyOf)?{...t,anyOf:[...t.anyOf,at]}:{anyOf:[t,at]}}function ct(e,t={}){return lt(e,t,``)}function lt(e,t,n){if(Array.isArray(e))return e.map((e,r)=>lt(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=lt(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)?ot(o):!1,l=st(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=lt(r.items,t,`${n}/items`)),Array.isArray(r.anyOf)&&(i.anyOf=r.anyOf.map((e,r)=>lt(e,t,`${n}/anyOf/${r}`))),r.additionalProperties&&typeof r.additionalProperties==`object`?i.additionalProperties=lt(r.additionalProperties,t,`${n}/additionalProperties`):a&&(r.additionalProperties!==!1&&t.onChange?.({path:n,kind:`closed-object`}),i.additionalProperties=!1),i}const ut=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]),dt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);function D(e,t){return e>>>t|e<<32-t}function ft(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(dt),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=D(t,7)^D(t,18)^t>>>3,i=D(n,17)^D(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=D(c,6)^D(c,11)^D(c,25),o=c&l^~c&u,f=d+i+o+(ut[e]??0)+(s[e]??0)>>>0,p=(D(t,2)^D(t,13)^D(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 pt=32,mt=2e3,ht=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}),gt=new Set(ht),_t=new Set([`__proto__`,`constructor`,`prototype`]),vt=new Set([`title`,`$schema`,`$comment`,`examples`,`default`]);function yt(){return{anyOf:[{type:`string`},{type:`number`},{type:`boolean`},{type:`object`},{type:`array`},{type:`null`}]}}const bt={closedObjects:!1,requireAllProperties:!1,optionalAsNullable:!1,unknownKeywords:`adopt`,unsupportedMembers:[],maxDepth:32,maxNodes:mt},xt={closedObjects:!0,requireAllProperties:!0,optionalAsNullable:!0,unknownKeywords:`strip`,unsupportedMembers:[],maxDepth:32,maxNodes:mt};function O(e,t){return`${e}/${t}`}function k(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function St(e,t,n,r,i,a){if(!k(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(!gt.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=>!gt.has(e)))return{path:t,keyword:`type`,reason:`a node must declare exactly one of 'type' or 'anyOf'`};let c=e.properties;if(k(c)){for(let e of Object.keys(c))if(_t.has(e))return{path:O(O(t,`properties`),e),keyword:e,reason:`property name '${e}' is a prototype key`};for(let e of Object.keys(c)){let o=St(c[e],O(O(t,`properties`),e),n+1,r,i,a);if(o)return o}}if(k(e.items)){let o=St(e.items,O(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=St(e.anyOf[o],O(O(t,`anyOf`),String(o)),n+1,r,i,a);if(s)return s}r.delete(e)}function Ct(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=>!gt.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=yt();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 k(a)&&(i.properties=Object.fromEntries(Object.keys(a).map(e=>{let i=a[e];return[e,k(i)?Ct(i,O(O(t,`properties`),e),n,r):i]}))),k(i.items)&&(i.items=Ct(i.items,O(t,`items`),n,r)),Array.isArray(i.anyOf)&&(i.anyOf=i.anyOf.map((e,i)=>k(e)?Ct(e,O(O(t,`anyOf`),String(i)),n,r):e)),i}function wt(e){if(Array.isArray(e))return e.map(wt);if(k(e)){let t={};for(let n of Object.keys(e).sort())t[n]=wt(e[n]);return t}return e}function Tt(e){return ft(JSON.stringify(wt(e)))}function Et(e,t){let n=e.parameters;if(!k(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=St(n,``,0,new Set,{count:0},t);if(r)return{outcome:`rejected`,tool:e,changes:[],rejection:r};let i=[],a=Ct(n,``,t,i),o=t.closedObjects?ct(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`)&&!vt.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 Dt={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var Ot=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}},kt=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??Ot.getInstance().getGlobalSink()??Dt}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),At(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),At(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),At(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),At(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||Ot.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 At(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function A(e,t={}){return new kt(e,t)}function jt(e){Ot.getInstance().setGlobalLevel(e)}function Mt(){return Ot.getInstance().getGlobalLevel()}function Nt(e){Ot.getInstance().setGlobalSink(e)}function Pt(){return Ot.getInstance().getGlobalSink()}const j=A(`agents`),Ft=A(`ToolSchemaProjection`);var It=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=Dt){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 Lt(n,t);if(e.done||(await Rt(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return rt(this,this.logger,e)}async*generateStreamingResponse(e){yield*it(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return ae(this.supportsTools())}validateConfig(){return!0}validateMessages(e){Ve(e)}validateTools(e){He(e)}projectionProfile(){}projectTools(e,t){let n=this.projectionProfile();if(!n||!e)return e;let r=[];for(let i of e){let e=Et(i,n);if(e.outcome!==`rejected`){r.push(e.tool);continue}let a=`${this.name}${t}${i.name}${Tt(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`};Ft.warn(`tool_schema_quarantined provider=${this.name} model=${t} tool=${i.name} path=${o} keyword=${s} reason=${c}`)}return r}validateNativeWebTools(e){oe(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return Ue(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*Ge(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Lt(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 Rt(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let zt=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}({}),Bt=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 M={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},Vt=`agent`,N={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`},Ht=`execution`,P={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},Ut=`tool`,Wt=`unknown_tool`,Gt=`argument_decode_error`,F=(e,t)=>`${e}.${t}`,Kt={START:F(Ht,N.START),COMPLETE:F(Ht,N.COMPLETE),ERROR:F(Ht,N.ERROR)},qt={CALL_START:F(Ut,P.CALL_START),CALL_COMPLETE:F(Ut,P.CALL_COMPLETE),CALL_ERROR:F(Ut,P.CALL_ERROR)},Jt={EXECUTION_START:F(Vt,M.EXECUTION_START),EXECUTION_COMPLETE:F(Vt,M.EXECUTION_COMPLETE),EXECUTION_ERROR:F(Vt,M.EXECUTION_ERROR),CREATED:F(Vt,M.CREATED)},I={EXECUTION_START:Kt.START,EXECUTION_COMPLETE:Kt.COMPLETE,EXECUTION_ERROR:Kt.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:qt.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:Jt.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Jt.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Jt.EXECUTION_ERROR,AGENT_CREATED:Jt.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 Yt=class{enabled=!0;category=`custom`;priority=Bt.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=A(`AbstractPlugin`);stats={calls:0,errors:0,moduleEventsReceived:0,lastActivity:void 0};async initialize(e){this.options=e,e&&`enabled`in e&&typeof e.enabled==`boolean`?this.enabled=e.enabled:this.enabled=!0,e?.category&&(this.category=e.category),e?.priority!==void 0&&(this.priority=(e.priority,e.priority))}async subscribeToModuleEvents(e){if(this.eventEmitter=e,!this.options)return;let t=[];this.options.subscribeToAllModuleEvents&&t.push(I.MODULE_INITIALIZE_START,I.MODULE_INITIALIZE_COMPLETE,I.MODULE_INITIALIZE_ERROR,I.MODULE_EXECUTION_START,I.MODULE_EXECUTION_COMPLETE,I.MODULE_EXECUTION_ERROR,I.MODULE_DISPOSE_START,I.MODULE_DISPOSE_COMPLETE,I.MODULE_DISPOSE_ERROR),this.options.moduleEvents&&t.push(...this.options.moduleEvents);for(let e of t){let t=this.eventEmitter.on(e,async t=>{try{this.stats.moduleEventsReceived++,this.stats.lastActivity=new Date,await this.onModuleEvent?.(e,t)}catch(t){this.stats.errors++;let n=t instanceof Error?t:Error(String(t));this.pluginLogger.error(`Plugin "${this.name}" failed to handle module event "${String(e)}"`,{plugin:this.name,eventType:String(e),error:n.message})}}),n=this.eventHandlers.get(e);n?n.push(t):this.eventHandlers.set(e,[t]),this.subscribedEvents.push(e)}}async unsubscribeFromModuleEvents(e){for(let[t,n]of this.eventHandlers.entries())for(let r of n)e.off(t,r);this.eventHandlers.clear(),this.subscribedEvents=[],this.eventEmitter=void 0}async dispose(){this.eventEmitter&&await this.unsubscribeFromModuleEvents(this.eventEmitter)}enable(){this.enabled=!0}disable(){this.enabled=!1}isEnabled(){return this.enabled}getConfig(){return{}}updateConfig(e){}getData(){return{name:this.name,version:this.version,enabled:this.enabled,category:this.category,priority:this.priority,subscribedEvents:[...this.subscribedEvents],metadata:{moduleEventsReceived:this.stats.moduleEventsReceived,totalCalls:this.stats.calls,totalErrors:this.stats.errors}}}getStatus(){return{name:this.name,version:this.version,enabled:this.enabled,initialized:!0,category:this.category,priority:this.priority,subscribedEventsCount:this.subscribedEvents.length,hasEventEmitter:!!this.eventEmitter}}getStats(){return{enabled:this.enabled,calls:this.stats.calls,errors:this.stats.errors,moduleEventsReceived:this.stats.moduleEventsReceived,...this.stats.lastActivity&&{lastActivity:this.stats.lastActivity}}}updateCallStats(){this.stats.calls++,this.stats.lastActivity=new Date}updateErrorStats(){this.stats.errors++,this.stats.lastActivity=new Date}},Xt=class{logger;constructor(e=Dt){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`)}},Zt=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??Dt}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 Qt(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function $t(e,t){if(t?.aborted===!0)return!0;if(!Qt(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return Qt(n)&&n.name===`AbortError`}function en(e=`aborted`,t){let n=t===void 0?Error(e):Error(e,{cause:t});return n.name=`AbortError`,n}var tn=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`)}},nn=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 rn=nn.validateAgentConfig,an=nn.validateUserInput,on=nn.validateProviderName,sn=nn.validateModelName,cn=nn.validateApiKey;var ln=class{static isRecoverable(e){return e instanceof r&&e.recoverable}static getErrorCode(e){return e instanceof r?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof r?e:e instanceof Error?new d(e.message||t):new d(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new s(`Failed to ${n}`,t,r,{operation:n})}},L=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}},R=class extends Error{code=`EXECUTION_SUSPENDED`;requests;constructor(e){super(`Execution is waiting for correlated tool responses`),this.name=`ExecutionSuspendedError`,this.requests=structuredClone(e)}},z=class extends Error{code;actionIds;constructor(e,t,n=[]){super(t),this.code=e,this.actionIds=n,this.name=`ExecutionRecoveryError`}};function un(e){return e instanceof L||e instanceof z||e instanceof R}function dn(e,t){return e instanceof L?e:t instanceof L?t:e instanceof z?e:t instanceof z?t:e instanceof R&&t instanceof R?new R([...new Map([...e.requests,...t.requests].map(e=>[e.requestId,e])).values()]):e instanceof R?e:t}const fn=new Set([`rate_limit_error`]),pn=new Set([`overloaded_error`]),mn=new Set([`authentication_error`,`permission_error`]),hn=new Set([`model_not_found`]),gn=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),_n=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]),vn=[/\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 yn(e){return vn.some(t=>t.test(e))}const bn=`[^\\s,;)"]+`;function xn(e){return e.replace(RegExp(`\\bauthorization(")?\\s*[:=]\\s*(")?(?:(?:bearer|basic)\\s+)?${bn}`,`gi`),`Authorization$1: $2[REDACTED]`).replace(RegExp(`\\bbearer\\s+${bn}`,`gi`),`Bearer [REDACTED]`).replace(RegExp(`\\b(api[-_]?key)(")?\\s*[:=]\\s*(")?${bn}`,`gi`),`$1$2: $3[REDACTED]`).replace(RegExp(`\\bkey=${bn}`,`gi`),`key=[REDACTED]`).replace(/\bsk-[A-Za-z0-9_-]{8,}/gi,`[REDACTED]`).replace(/\bAIza[0-9A-Za-z_-]{35}\b/g,`[REDACTED]`)}function B(e){return typeof e==`object`&&e?e:void 0}function Sn(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function Cn(e){let t=B(e);if(t===void 0)return{};let n=typeof t.status==`number`?t.status:void 0,i=B(t.error),a=B(i?.error),o=Sn(i,`type`),s=Sn(t,`type`)??Sn(a,`type`)??(o===`error`?void 0:o)??(n!==void 0&&!(e instanceof r)?Sn(t,`code`):void 0);return{...n!==void 0&&{status:n},...s!==void 0&&{type:s}}}function wn(e){let t=B(e)?.constructor;if(typeof t!=`function`)return;let n=t.name;return typeof n==`string`&&n.length>0?n:void 0}function Tn(e){return $t(e)||wn(e)===`APIUserAbortError`}function En(e){let t=B(e)?.headers,n=t instanceof Headers?t.get(`retry-after`):B(t)?.[`retry-after`]??B(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 Dn(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 On(e,t,n){if(e instanceof r||Tn(e))return e;let i=e instanceof Error?e:Error(typeof e==`string`?e:``),o=Cn(e),c=xn(i.message||`request failed`),l=Dn(o);if(o.status===429||o.type!==void 0&&fn.has(o.type))return new T(c||`${t} rate limit exceeded.`,En(e),t,l);if(o.status===401||o.status===403||o.type!==void 0&&mn.has(o.type))return new v(c,t,l);let u=o.status===void 0||o.status===400||o.status===404,d=Mn(e)||o.type!==void 0&&hn.has(o.type)||yn(c);return u&&d?new a(void 0,t,void 0,{...l,originalMessage:c}):kn(e)?new C(c,i,l,t):new s(`${n}: ${c}`,t,i,void 0,o)}function kn(e){if(e instanceof C)return!0;let t=B(e);if(t===void 0)return!1;let n=Sn(t,`code`);if(n!==void 0&&gn.has(n))return!0;let r=wn(e);if(r!==void 0&&_n.has(r))return!0;let i=Sn(t,`name`);return i!==void 0&&_n.has(i)?!0:i===`TypeError`&&Sn(t,`message`)===`fetch failed`}function An(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=B(i);r!==void 0&&e.push(r.originalError,r.cause)}r=e}return t}const V=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function jn(e){return e instanceof s?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:Cn(e)}function Mn(e){if(e instanceof r)return!1;let t=Sn(B(e),`code`);return t!==void 0&&hn.has(t)}function Nn(e){if(e instanceof T)return V(!1,`rate-limit`);if(e instanceof v)return V(!1,`authentication`);if(e instanceof a)return V(!0,`model-unavailable`);let{status:t,type:n}=jn(e);return t===429||n!==void 0&&fn.has(n)?V(!1,`rate-limit`):t===401||t===403||n!==void 0&&mn.has(n)?V(!1,`authentication`):t===402?V(!1,`billing`):(t===void 0||t===400||t===404)&&(Mn(e)||n!==void 0&&hn.has(n))?V(!0,`model-unavailable`):kn(e)?V(!1,`network`):t===529||n!==void 0&&pn.has(n)?V(!0,`overloaded`):t===503?V(!0,`service-unavailable`):t===500||t===502||t===504?V(!0,`server-error`):t===404?{kind:`tentative`,classification:{switchable:!0,reason:`model-unavailable`}}:t===400||t===413?{kind:`tentative`,classification:{switchable:!1,reason:`invalid-request`}}:{kind:`none`}}function Pn(e,t){let n=An(e);if(t?.aborted===!0||n.some(e=>Tn(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=Nn(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 Fn(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 In(e){e&&clearInterval(e)}async function H(e,t){try{await e.append(structuredClone(t))}catch(e){throw new L(t,e)}}function Ln(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 Rn(e,t,n,r){if(!r)return e(t,n);let{journal:i,executionId:a,callId:o}=r;await H(i,{kind:`model-request`,recordId:`${o}:request`,executionId:a,callId:o,...r.route(),messages:t,options:Ln(n),...r.checkpoint&&{checkpoint:r.checkpoint}}),n.signal?.throwIfAborted();let s;try{s=await e(t,n)}catch(e){throw await H(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 H(i,{kind:`model-response`,recordId:`${o}:response`,executionId:a,callId:o,...r.route(),response:s}),s}function zn(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:return}}function Bn(e){let t=Vn(e);return t.typeName===`ZodObject`?t:void 0}function Vn(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=Hn(e,`${String(t.typeName)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function Hn(e,t){let n=e._def;if(!n)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function Un(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 Wn(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=Hn(n.schema,`ZodEffects inner type`);return n.typeName!==`ZodOptional`&&n.typeName!==`ZodNullable`&&n.typeName!==`ZodDefault`}function Gn(e){let t=Hn(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 Kn(e){let t=Hn(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function qn(e){let t=Hn(e,`Zod schema`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function Jn(e,t={}){let n=Hn(e,`Zod schema`),r=Bn(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 Yn(r,t.allowAdditionalProperties)}function Yn(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=Xn(a,t),Wn(a)&&r.push(e);let a=zn(e,t);return{type:`object`,properties:n,required:r,...a!==void 0&&{additionalProperties:a}}}function Xn(e,t){let n=Hn(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:Xn(n.type,t),...r};case`ZodObject`:return{...Yn(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{...Qn(n.values),...r};case`ZodDate`:return{type:`string`,format:`date-time`,...r};case`ZodLiteral`:return{...Zn(n.value),...r};case`ZodUnion`:case`ZodDiscriminatedUnion`:{let e=n.options;if(!e||!Array.isArray(e)||e.length===0)throw Error(`${String(n.typeName)} is missing options; cannot convert to JSON schema.`);return{anyOf:e.map(e=>Xn(e,t)),...r}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...Xn(n.schema,t),...r};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[Xn(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{...Xn(n.innerType,t),...r};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:Xn(n.valueType,t),...r}:{type:`object`,additionalProperties:{type:`string`},...r};default:throw Error(er(String(n.typeName)))}}function Zn(e){let t=Un(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 Qn(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 $n={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 er(e){return`${e} cannot be carried by the universal JSON-schema subset: ${$n[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 tr(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function nr(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 rr(e){if(tr(e))return{name:`structured_output`,jsonSchema:Jn(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:nr(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=ir(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function ir(e,t,n){let r=[],i=e.type;if(e.anyOf)return or(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${sr(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(...ir(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(ar(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(...ir(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${sr(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...ir(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 ${sr(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${sr(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 ${sr(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${sr(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function ar(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function or(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>ir(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 sr(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function cr(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 lr(e,t){return be(e,t,`json_schema`)===!0?`response_schema`:be(e,t,`json_object`)===!0?`json_object`:`none`}function ur(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=lr(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 dr=e=>process.env[e];function fr(e){return t=>e[t]}function pr(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function mr(e,t={},n=dr){let r=e.credentialRequirement,i=t.baseUrl??pr(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=pr(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 hr(e,t={},n=dr){if(e.createImageProvider===void 0)return;let r=mr(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return Se(t)?t:void 0}catch{return}}function gr(e,t={},n=dr){if(e.createVideoProvider===void 0)return;let r=mr(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return Ce(t)?t:void 0}catch{return}}const _r=`$ENV:`;function vr(e){return e.startsWith(_r)}function yr(e){return`${_r}${e}`}function br(e,t=dr){if(!vr(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function xr(e,t=dr){return e===void 0||e.length===0?!1:br(e,t)!==void 0}function Sr(e,t,n=dr){let r=ge(t,e.name)?.defaults??{},i=e.model??r.model;if(!i)throw Error(`Provider ${e.name} requires model`);let a=e.apiKey??r.apiKey,o=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:br(a,n),baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...o!==void 0&&{options:o}}}function Cr(e,t){let n=ge(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${_e(t)}`);let r=ve(n);if(r!==void 0&&!wr(e,r))throw Error(`Provider ${e.name} requires ${Er(r)}`);return n.createProvider(e)}function wr(e,t){return t.anyOf.some(t=>Tr(e,t))}function Tr(e,t){let n=e[t];return n!==void 0&&n.length>0}function Er(e){return e.anyOf.map(e=>e===`apiKey`?`apiKey (API key)`:e).join(` or `)}function U(){let e=globalThis.crypto;if(typeof e?.randomUUID==`function`)return e.randomUUID();if(typeof e?.getRandomValues==`function`){let t=e.getRandomValues(new Uint8Array(16));t[6]=(t[6]??0)&15|64,t[8]=(t[8]??0)&63|128;let n=Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``);return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}throw Error(`No cryptographic randomness is available on this platform (globalThis.crypto is missing both randomUUID and getRandomValues), so a unique identifier cannot be generated. This is not something to substitute Math.random for.`)}function Dr(e,t){let n={id:U(),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 Or(e,t){let n={id:U(),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 kr(e,t){let n={id:U(),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 Ar(e,t){let n={id:U(),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 jr=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(Je(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(Dr(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(Or(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(kr(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>Ke(e)&&Qe(qe(e)),i=this.entries.filter(e=>!r(e)),a=Je(kr(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(Ar(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(Ke).map(qe)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(Ke).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(Ke);if(e.length<=this.maxMessages)return;let t=e.map(qe),n=t.filter(Qe),r=t.filter(e=>!Qe(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=>!Ke(e)||o.has(e.id))}},Mr=class{history;pendingAssistant=null;constructor(e=0){this.history=new jr({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:U(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:U(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:U(),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 Ze(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 C,v as w,w as ee,x as T,y as E}from"./bounded-output-Bgx2Cgkx.js";import{n as te,r as ne,t as re}from"./verdict-decoder-Dz_rjoIZ.js";import ie from"jssha";const ae={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>ae.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>ae.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date||ae.isPrimitive(e)||ae.isArray(e)||ae.isObject(e)};function oe(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 se(e,t,n){n?.webSearch===!0&&ce(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&ce(e,`web fetch`,t.nativeWebTools.webFetch)}function ce(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${le(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${le(n.reason)}`)}function le(e){return e?` ${e}`:``}const ue=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function de(e){return typeof e==`string`&&ue.includes(e)}function fe(e,t){return{resolution:e,...t}}const pe=new Map(ue.map((e,t)=>[e,t]));function me(e,t){return{selection:e,effective:null,disposition:`not-applied`,fingerprint:`${t}|${e}|not-applied`}}function he(e,t,n){let r=e?.models[t];if(!r)return me(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`)}:me(n,t);if(r.supportedEfforts.includes(n))return{selection:n,effective:n,disposition:`exact`,fingerprint:i(n,`exact`)};let a=pe.get(n),o=r.supportedEfforts.filter(e=>(pe.get(e)??1/0)<(a??-1)).at(-1);return o?{selection:n,effective:o,disposition:`clamped`,fingerprint:i(o,`clamped`)}:me(n,t)}function ge(e){let t=typeof e.supportsTools==`function`&&e.supportsTools();return e.getCapabilities?.()??oe(t)}function _e(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function ve(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 ye(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function be(e,t){if(e)return e.deviations?.[t]?.capabilities??e.vendorDefault}function xe(e,t,n){let r=be(e,t);if(!(!r||r.length===0))return r.includes(n)}function Se(e,t,n,r){return xe(e,t,n)??r}function Ce(e){return`generateImage`in e&&typeof e.generateImage==`function`}function we(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function Te(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 Ee(e,t){return e.find(e=>e.type===t)}const De=`ToolSearch`,Oe=`yes`,ke=`no`,Ae=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function je(e,t,n){return{id:e,title:t,description:n?.description,options:Ae,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function Me(e,t,n,r){return{id:e,title:t,options:n,maxSelect:1,description:r?.description,allowFreeText:r?.allowFreeText,maxVisible:r?.maxVisible,default:r?.default}}function Ne(e,t,n,r){return{id:e,title:t,options:n,minSelect:r?.minSelect??1,maxSelect:r?.maxSelect??n.length,description:r?.description,maxVisible:r?.maxVisible,default:r?.default}}function Pe(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 Fe(e){return e.type===`answer`&&e.values.includes(`yes`)}function Ie(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function Le(e,t){if(Ie(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function Re(e,t){if(Ie(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function ze(e,t){return Ie(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}var Be=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}},Ve=class{initialized=!1;disposed=!1;constructor(e={}){this.initialized=e.readyOnConstruction===!0}async initialize(){this.initialized||(await this.doInitialize(),this.initialized=!0,this.disposed=!1)}async dispose(){await this.doDispose(),this.initialized=!1,this.disposed=!0}isInitialized(){return this.initialized}ensureInitialized(){if(this.disposed)throw Error(`${this.constructor.name} was disposed — re-initialize it before use, or build a new one`);if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function He(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 Ue(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 We(e,t,n,r){if(!e)throw Error(`Executor is required for ${t} provider. Configure an executor or use direct execution path.`);if(!r?.model)throw Error(`Model is required for executor execution in ${t} provider.`);return await e.executeChat({messages:n,options:r,provider:t,model:r.model,...r.tools&&{tools:r.tools}})}async function*Ge(e,t,n,r){if(!e||!e.executeChatStream)throw Error(`Streaming executor is required for ${t} provider.`);if(!r?.model)throw Error(`Model is required for executor streaming in ${t} provider.`);let i=e.executeChatStream({messages:n,options:r,provider:t,model:r.model,stream:!0,...r.tools&&{tools:r.tools}}),a=!1;for await(let e of i){if(e.kind===`terminal`){if(a)throw Error(`Executor "${t}" emitted more than one stream terminal result.`);a=!0}yield e}if(!a)throw Error(`Executor "${t}" ended a stream without a terminal result.`)}async function*Ke(e,t,n,r,i){e.debug?.(`🔍 [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request`,{provider:n,model:i?.model,hasTools:!!i?.tools,toolsCount:i?.tools?.length||0,toolNames:i?.tools?.map(e=>e.name)||[]}),yield*Ge(t,n,r,i)}function qe(e){return e.category===`chat`}function Je(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 Ye(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function Xe(e){return e.filter(qe).map(Je)}function Ze(e){return e.role===`user`}function Qe(e){return e.role===`assistant`}function $e(e){return e.role===`system`}function et(e){return e.role===`tool`}function tt(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:he(t?.(),s.model,s.effort)}}function nt(e,t,n){if(t)return;let r=e.effortResolution,i=e.onModelEffortOutcome;if(r===void 0||i===void 0)return;let a=fe(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 rt(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 it(e,t,n){let r,i=tt(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=nt(i,e.effortTable!==void 0,t),rt(e.name,i,r),{content:a.content??null,toolCalls:Qe(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*at(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=tt(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:Qe(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=nt(i,e.effortTable!==void 0,t),rt(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const ot={type:`null`};function st(e){return e.type===`null`||Array.isArray(e.anyOf)&&e.anyOf.some(e=>typeof e==`object`&&!!e&&e.type===`null`)}function ct(e){if(typeof e!=`object`||!e||Array.isArray(e))return e;let t=e;return st(t)?t:Array.isArray(t.anyOf)?{...t,anyOf:[...t.anyOf,ot]}:{anyOf:[t,ot]}}function lt(e,t={}){return ut(e,t,``)}function ut(e,t,n){if(Array.isArray(e))return e.map((e,r)=>ut(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=ut(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)?st(o):!1,l=ct(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=ut(r.items,t,`${n}/items`)),Array.isArray(r.anyOf)&&(i.anyOf=r.anyOf.map((e,r)=>ut(e,t,`${n}/anyOf/${r}`))),r.additionalProperties&&typeof r.additionalProperties==`object`?i.additionalProperties=ut(r.additionalProperties,t,`${n}/additionalProperties`):a&&(r.additionalProperties!==!1&&t.onChange?.({path:n,kind:`closed-object`}),i.additionalProperties=!1),i}const dt=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]),ft=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);function D(e,t){return e>>>t|e<<32-t}function pt(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(ft),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=D(t,7)^D(t,18)^t>>>3,i=D(n,17)^D(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=D(c,6)^D(c,11)^D(c,25),o=c&l^~c&u,f=d+i+o+(dt[e]??0)+(s[e]??0)>>>0,p=(D(t,2)^D(t,13)^D(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 mt=32,ht=2e3,gt=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}),_t=new Set(gt),vt=new Set([`__proto__`,`constructor`,`prototype`]),yt=new Set([`title`,`$schema`,`$comment`,`examples`,`default`]);function bt(){return{anyOf:[{type:`string`},{type:`number`},{type:`boolean`},{type:`object`},{type:`array`},{type:`null`}]}}const xt={closedObjects:!1,requireAllProperties:!1,optionalAsNullable:!1,unknownKeywords:`adopt`,unsupportedMembers:[],maxDepth:32,maxNodes:ht},St={closedObjects:!0,requireAllProperties:!0,optionalAsNullable:!0,unknownKeywords:`strip`,unsupportedMembers:[],maxDepth:32,maxNodes:ht};function O(e,t){return`${e}/${t}`}function Ct(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function wt(e,t,n,r,i,a){if(!Ct(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(!_t.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=>!_t.has(e)))return{path:t,keyword:`type`,reason:`a node must declare exactly one of 'type' or 'anyOf'`};let c=e.properties;if(Ct(c)){for(let e of Object.keys(c))if(vt.has(e))return{path:O(O(t,`properties`),e),keyword:e,reason:`property name '${e}' is a prototype key`};for(let e of Object.keys(c)){let o=wt(c[e],O(O(t,`properties`),e),n+1,r,i,a);if(o)return o}}if(Ct(e.items)){let o=wt(e.items,O(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=wt(e.anyOf[o],O(O(t,`anyOf`),String(o)),n+1,r,i,a);if(s)return s}r.delete(e)}function Tt(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=>!_t.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=bt();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 Ct(a)&&(i.properties=Object.fromEntries(Object.keys(a).map(e=>{let i=a[e];return[e,Ct(i)?Tt(i,O(O(t,`properties`),e),n,r):i]}))),Ct(i.items)&&(i.items=Tt(i.items,O(t,`items`),n,r)),Array.isArray(i.anyOf)&&(i.anyOf=i.anyOf.map((e,i)=>Ct(e)?Tt(e,O(O(t,`anyOf`),String(i)),n,r):e)),i}function Et(e){if(Array.isArray(e))return e.map(Et);if(Ct(e)){let t={};for(let n of Object.keys(e).sort())t[n]=Et(e[n]);return t}return e}function Dt(e){return pt(JSON.stringify(Et(e)))}function Ot(e,t){let n=e.parameters;if(!Ct(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=wt(n,``,0,new Set,{count:0},t);if(r)return{outcome:`rejected`,tool:e,changes:[],rejection:r};let i=[],a=Tt(n,``,t,i),o=t.closedObjects?lt(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`)&&!yt.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 kt={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var At=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}},jt=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??At.getInstance().getGlobalSink()??kt}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),Mt(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),Mt(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),Mt(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),Mt(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||At.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 Mt(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function k(e,t={}){return new jt(e,t)}function Nt(e){At.getInstance().setGlobalLevel(e)}function Pt(){return At.getInstance().getGlobalLevel()}function Ft(e){At.getInstance().setGlobalSink(e)}function It(){return At.getInstance().getGlobalSink()}const A=k(`agents`),Lt=k(`ToolSchemaProjection`);var Rt=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=kt){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 zt(n,t);if(e.done||(await Bt(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return it(this,this.logger,e)}async*generateStreamingResponse(e){yield*at(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return oe(this.supportsTools())}validateConfig(){return!0}validateMessages(e){He(e)}validateTools(e){Ue(e)}projectionProfile(){}projectTools(e,t){let n=this.projectionProfile();if(!n||!e)return e;let r=[];for(let i of e){let e=Ot(i,n);if(e.outcome!==`rejected`){r.push(e.tool);continue}let a=`${this.name}${t}${i.name}${Dt(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`};Lt.warn(`tool_schema_quarantined provider=${this.name} model=${t} tool=${i.name} path=${o} keyword=${s} reason=${c}`)}return r}validateNativeWebTools(e){se(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return We(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*Ke(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function zt(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 Bt(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let Vt=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}({}),Ht=function(e){return e[e.CRITICAL=1e3]=`CRITICAL`,e[e.HIGH=800]=`HIGH`,e[e.NORMAL=500]=`NORMAL`,e[e.LOW=200]=`LOW`,e[e.MINIMAL=100]=`MINIMAL`,e}({});const j={CREATED:`created`,EXECUTION_START:`execution_start`,EXECUTION_COMPLETE:`execution_complete`,EXECUTION_ERROR:`execution_error`,AGGREGATION_COMPLETE:`aggregation_complete`,CONFIG_UPDATED:`config_updated`},Ut=`agent`,M={START:`start`,COMPLETE:`complete`,ERROR:`error`,ASSISTANT_MESSAGE_START:`assistant_message_start`,ASSISTANT_MESSAGE_COMPLETE:`assistant_message_complete`,USER_MESSAGE:`user_message`,TOOL_RESULTS_TO_LLM:`tool_results_to_llm`,TOOL_RESULTS_READY:`tool_results_ready`},Wt=`execution`,N={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},Gt=`tool`,Kt=`unknown_tool`,qt=`argument_decode_error`,P=(e,t)=>`${e}.${t}`,Jt={START:P(Wt,M.START),COMPLETE:P(Wt,M.COMPLETE),ERROR:P(Wt,M.ERROR)},Yt={CALL_START:P(Gt,N.CALL_START),CALL_COMPLETE:P(Gt,N.CALL_COMPLETE),CALL_ERROR:P(Gt,N.CALL_ERROR)},Xt={EXECUTION_START:P(Ut,j.EXECUTION_START),EXECUTION_COMPLETE:P(Ut,j.EXECUTION_COMPLETE),EXECUTION_ERROR:P(Ut,j.EXECUTION_ERROR),CREATED:P(Ut,j.CREATED)},F={EXECUTION_START:Jt.START,EXECUTION_COMPLETE:Jt.COMPLETE,EXECUTION_ERROR:Jt.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:Yt.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:Xt.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Xt.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Xt.EXECUTION_ERROR,AGENT_CREATED:Xt.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 Zt=class{enabled=!0;category=`custom`;priority=Ht.NORMAL;options;eventEmitter;subscribedEvents=[];eventHandlers=new Map;pluginLogger=k(`AbstractPlugin`);stats={calls:0,errors:0,moduleEventsReceived:0,lastActivity:void 0};async initialize(e){this.options=e,e&&`enabled`in e&&typeof e.enabled==`boolean`?this.enabled=e.enabled:this.enabled=!0,e?.category&&(this.category=e.category),e?.priority!==void 0&&(this.priority=(e.priority,e.priority))}async subscribeToModuleEvents(e){if(this.eventEmitter=e,!this.options)return;let t=[];this.options.subscribeToAllModuleEvents&&t.push(F.MODULE_INITIALIZE_START,F.MODULE_INITIALIZE_COMPLETE,F.MODULE_INITIALIZE_ERROR,F.MODULE_EXECUTION_START,F.MODULE_EXECUTION_COMPLETE,F.MODULE_EXECUTION_ERROR,F.MODULE_DISPOSE_START,F.MODULE_DISPOSE_COMPLETE,F.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}},Qt=class{logger;constructor(e=kt){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`)}},$t=class{logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??kt}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 en(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function tn(e,t){if(t?.aborted===!0)return!0;if(!en(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return en(n)&&n.name===`AbortError`}function nn(e=`aborted`,t){let n=t===void 0?Error(e):Error(e,{cause:t});return n.name=`AbortError`,n}var rn=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`)}},an=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 on=an.validateAgentConfig,sn=an.validateUserInput,cn=an.validateProviderName,ln=an.validateModelName,un=an.validateApiKey;var dn=class{static isRecoverable(t){return t instanceof e&&t.recoverable}static getErrorCode(t){return t instanceof e?t.code:`UNKNOWN_ERROR`}static fromUnknown(t,n=`An unknown error occurred`){return t instanceof e?t:t instanceof Error?new f(t.message||n):new f(typeof t==`string`?t:n)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new T(`Failed to ${n}`,t,r,{operation:n})}},I=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}},L=class extends Error{code=`EXECUTION_SUSPENDED`;requests;constructor(e){super(`Execution is waiting for correlated tool responses`),this.name=`ExecutionSuspendedError`,this.requests=structuredClone(e)}},R=class extends Error{code;actionIds;constructor(e,t,n=[]){super(t),this.code=e,this.actionIds=n,this.name=`ExecutionRecoveryError`}};function z(e){return e instanceof I||e instanceof R||e instanceof L}function fn(e,t){return e instanceof I?e:t instanceof I?t:e instanceof R?e:t instanceof R?t:e instanceof L&&t instanceof L?new L([...new Map([...e.requests,...t.requests].map(e=>[e.requestId,e])).values()]):e instanceof L?e:t}const pn=new Set([`rate_limit_error`]),mn=new Set([`overloaded_error`]),hn=new Set([`authentication_error`,`permission_error`]),gn=new Set([`model_not_found`]),_n=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),vn=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]),yn=[/\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 bn(e){return yn.some(t=>t.test(e))}const xn=`[^\\s,;)"]+`;function Sn(e){return e.replace(RegExp(`\\bauthorization(")?\\s*[:=]\\s*(")?(?:(?:bearer|basic)\\s+)?${xn}`,`gi`),`Authorization$1: $2[REDACTED]`).replace(RegExp(`\\bbearer\\s+${xn}`,`gi`),`Bearer [REDACTED]`).replace(RegExp(`\\b(api[-_]?key)(")?\\s*[:=]\\s*(")?${xn}`,`gi`),`$1$2: $3[REDACTED]`).replace(RegExp(`\\bkey=${xn}`,`gi`),`key=[REDACTED]`).replace(/\bsk-[A-Za-z0-9_-]{8,}/gi,`[REDACTED]`).replace(/\bAIza[0-9A-Za-z_-]{35}\b/g,`[REDACTED]`)}function B(e){return typeof e==`object`&&e?e:void 0}function Cn(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function wn(t){let n=B(t);if(n===void 0)return{};let r=typeof n.status==`number`?n.status:void 0,i=B(n.error),a=B(i?.error),o=Cn(i,`type`),s=Cn(n,`type`)??Cn(a,`type`)??(o===`error`?void 0:o)??(r!==void 0&&!(t instanceof e)?Cn(n,`code`):void 0);return{...r!==void 0&&{status:r},...s!==void 0&&{type:s}}}function Tn(e){let t=B(e)?.constructor;if(typeof t!=`function`)return;let n=t.name;return typeof n==`string`&&n.length>0?n:void 0}function En(e){return tn(e)||Tn(e)===`APIUserAbortError`}function Dn(e){let t=B(e)?.headers,n=t instanceof Headers?t.get(`retry-after`):B(t)?.[`retry-after`]??B(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 On(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 kn(t,n,r){if(t instanceof e||En(t))return t;let a=t instanceof Error?t:Error(typeof t==`string`?t:``),o=wn(t),s=Sn(a.message||`request failed`),c=On(o);if(o.status===429||o.type!==void 0&&pn.has(o.type))return new i(s||`${n} rate limit exceeded.`,Dn(t),n,c);if(o.status===401||o.status===403||o.type!==void 0&&hn.has(o.type))return new y(s,n,c);let l=o.status===void 0||o.status===400||o.status===404,u=Nn(t)||o.type!==void 0&&gn.has(o.type)||bn(s);return l&&u?new w(void 0,n,void 0,{...c,originalMessage:s}):An(t)?new E(s,a,c,n):new T(`${r}: ${s}`,n,a,void 0,o)}function An(e){if(e instanceof E)return!0;let t=B(e);if(t===void 0)return!1;let n=Cn(t,`code`);if(n!==void 0&&_n.has(n))return!0;let r=Tn(e);if(r!==void 0&&vn.has(r))return!0;let i=Cn(t,`name`);return i!==void 0&&vn.has(i)?!0:i===`TypeError`&&Cn(t,`message`)===`fetch failed`}function jn(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=B(i);r!==void 0&&e.push(r.originalError,r.cause)}r=e}return t}const V=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function Mn(e){return e instanceof T?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:wn(e)}function Nn(t){if(t instanceof e)return!1;let n=Cn(B(t),`code`);return n!==void 0&&gn.has(n)}function Pn(e){if(e instanceof i)return V(!1,`rate-limit`);if(e instanceof y)return V(!1,`authentication`);if(e instanceof w)return V(!0,`model-unavailable`);let{status:t,type:n}=Mn(e);return t===429||n!==void 0&&pn.has(n)?V(!1,`rate-limit`):t===401||t===403||n!==void 0&&hn.has(n)?V(!1,`authentication`):t===402?V(!1,`billing`):(t===void 0||t===400||t===404)&&(Nn(e)||n!==void 0&&gn.has(n))?V(!0,`model-unavailable`):An(e)?V(!1,`network`):t===529||n!==void 0&&mn.has(n)?V(!0,`overloaded`):t===503?V(!0,`service-unavailable`):t===500||t===502||t===504?V(!0,`server-error`):t===404?{kind:`tentative`,classification:{switchable:!0,reason:`model-unavailable`}}:t===400||t===413?{kind:`tentative`,classification:{switchable:!1,reason:`invalid-request`}}:{kind:`none`}}function Fn(e,t){let n=jn(e);if(t?.aborted===!0||n.some(e=>En(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=Pn(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 In(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 Ln(e){e&&clearInterval(e)}async function H(e,t){try{await e.append(structuredClone(t))}catch(e){throw new I(t,e)}}function Rn(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 zn(e,t,n,r){if(!r)return e(t,n);let{journal:i,executionId:a,callId:o}=r;await H(i,{kind:`model-request`,recordId:`${o}:request`,executionId:a,callId:o,...r.route(),messages:t,options:Rn(n),...r.checkpoint&&{checkpoint:r.checkpoint}}),n.signal?.throwIfAborted();let s;try{s=await e(t,n)}catch(e){throw await H(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 H(i,{kind:`model-response`,recordId:`${o}:response`,executionId:a,callId:o,...r.route(),response:s}),s}function Bn(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:return}}function Vn(e){let t=Hn(e);return t.typeName===`ZodObject`?t:void 0}function Hn(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=Un(e,`${String(t.typeName)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function Un(e,t){let n=e._def;if(!n)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function Wn(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 Gn(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=Un(n.schema,`ZodEffects inner type`);return n.typeName!==`ZodOptional`&&n.typeName!==`ZodNullable`&&n.typeName!==`ZodDefault`}function Kn(e){let t=Un(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 qn(e){let t=Un(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function Jn(e){let t=Un(e,`Zod schema`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function Yn(e,t={}){let n=Un(e,`Zod schema`),r=Vn(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 Xn(r,t.allowAdditionalProperties)}function Xn(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=Zn(a,t),Gn(a)&&r.push(e);let a=Bn(e,t);return{type:`object`,properties:n,required:r,...a!==void 0&&{additionalProperties:a}}}function Zn(e,t){let n=Un(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:Zn(n.type,t),...r};case`ZodObject`:return{...Xn(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{...$n(n.values),...r};case`ZodDate`:return{type:`string`,format:`date-time`,...r};case`ZodLiteral`:return{...Qn(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=>Zn(e,t)),...r}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...Zn(n.schema,t),...r};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[Zn(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{...Zn(n.innerType,t),...r};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:Zn(n.valueType,t),...r}:{type:`object`,additionalProperties:{type:`string`},...r};default:throw Error(tr(String(n.typeName)))}}function Qn(e){let t=Wn(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 $n(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 er={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 tr(e){return`${e} cannot be carried by the universal JSON-schema subset: ${er[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 nr(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function rr(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 ir(e){if(nr(e))return{name:`structured_output`,jsonSchema:Yn(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:rr(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=ar(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function ar(e,t,n){let r=[],i=e.type;if(e.anyOf)return sr(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${cr(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(...ar(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(or(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(...ar(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${cr(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...ar(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 ${cr(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${cr(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 ${cr(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${cr(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function or(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function sr(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>ar(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 cr(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function lr(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 ur(e,t){return xe(e,t,`json_schema`)===!0?`response_schema`:xe(e,t,`json_object`)===!0?`json_object`:`none`}function dr(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=ur(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 fr=e=>process.env[e];function pr(e){return t=>e[t]}function mr(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function hr(e,t={},n=fr){let r=e.credentialRequirement,i=t.baseUrl??mr(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=mr(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 gr(e,t={},n=fr){if(e.createImageProvider===void 0)return;let r=hr(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return Ce(t)?t:void 0}catch{return}}function _r(e,t={},n=fr){if(e.createVideoProvider===void 0)return;let r=hr(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return we(t)?t:void 0}catch{return}}const vr=`$ENV:`;function yr(e){return e.startsWith(vr)}function br(e){return`${vr}${e}`}function xr(e,t=fr){if(!yr(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function Sr(e,t=fr){return e===void 0||e.length===0?!1:xr(e,t)!==void 0}function Cr(e,t,n=fr){let r=_e(t,e.name)?.defaults??{},i=e.model??r.model;if(!i)throw Error(`Provider ${e.name} requires model`);let a=e.apiKey??r.apiKey,o=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:xr(a,n),baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...o!==void 0&&{options:o}}}function wr(e,t){let n=_e(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${ve(t)}`);let r=ye(n);if(r!==void 0&&!Tr(e,r))throw Error(`Provider ${e.name} requires ${Dr(r)}`);return n.createProvider(e)}function Tr(e,t){return t.anyOf.some(t=>Er(e,t))}function Er(e,t){let n=e[t];return n!==void 0&&n.length>0}function Dr(e){return e.anyOf.map(e=>e===`apiKey`?`apiKey (API key)`:e).join(` or `)}function U(){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 Or(e,t){let n={id:U(),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 kr(e,t){let n={id:U(),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 Ar(e,t){let n={id:U(),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 jr(e,t){let n={id:U(),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 Mr=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(Ye(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(Or(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(kr(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(Ar(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>qe(e)&&$e(Je(e)),i=this.entries.filter(e=>!r(e)),a=Ye(Ar(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(jr(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(qe).map(Je)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(qe).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(qe);if(e.length<=this.maxMessages)return;let t=e.map(Je),n=t.filter($e),r=t.filter(e=>!$e(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=>!qe(e)||o.has(e.id))}},Nr=class{history;pendingAssistant=null;constructor(e=0){this.history=new Mr({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:U(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:U(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:U(),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 Qe(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
|
|
2
2
|
|
|
3
|
-
[This response was interrupted by the user]`),Ze(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),$e(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},Nr=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||0,this.maxConversations=e.maxConversations||50,this.logger=A(`ConversationHistory`)}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new Mr(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 Pr(){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 Fr(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 Ir=class extends Xt{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=Pr(),r=await this.withRetry(async()=>(n=Pr(),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),Fr(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=Pr(),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);Fr(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 Lr=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function Rr(e){return Lr.test(e)?e:void 0}var zr=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Br(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new E(`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 E(`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 E(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function Vr(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 Hr(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 Ur(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Wr(e,t,n,r){let{listenerCounts:i,totalListeners:a}=Ur(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 Gr(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new E(`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 Kr(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 Jr=class extends Yt{name=`EventEmitterPlugin`;version=`1.0.0`;pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=A(`EventEmitterPlugin`),this.metrics=e.metrics??new zr,Br(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[I.AGENT_EXECUTION_START,I.AGENT_EXECUTION_COMPLETE,I.AGENT_EXECUTION_ERROR,I.TOOL_BEFORE_EXECUTE,I.TOOL_AFTER_EXECUTE,I.TOOL_SUCCESS,I.TOOL_ERROR],maxListeners:e.maxListeners??100,async:e.async??!0,catchErrors:e.catchErrors??!0,filters:e.filters??{},buffer:e.buffer??{enabled:!1,maxSize:1e3,flushInterval:5e3},category:e.category??`event_processing`,priority:e.priority??Bt.HIGH,moduleEvents:e.moduleEvents??[],subscribeToAllModuleEvents:e.subscribeToAllModuleEvents??!1},this.pluginOptions.buffer.enabled&&(this.bufferTimer=setInterval(()=>{this.flushBuffer().catch(e=>{this.logger.error(`Buffered flush failed`,{error:e instanceof Error?e.message:String(e)})})},this.pluginOptions.buffer.flushInterval))}async beforeExecution(e){await this.emit(I.AGENT_EXECUTION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messageCount:e.messages?.length||0,...e.config&&{config:e.config}}})}async afterExecution(e,t){await this.emit(I.AGENT_EXECUTION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{duration:t?.duration,tokensUsed:t?.tokensUsed,toolsExecuted:t?.toolsExecuted}})}async beforeConversation(e){await this.emit(I.CONVERSATION_START,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{messages:e.messages?.map(e=>({role:e.role,content:e.content||``,timestamp:e.timestamp?e.timestamp.toISOString():new Date().toISOString()})),config:e.config}})}async afterConversation(e,t){await this.emit(I.CONVERSATION_COMPLETE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{response:t.content||t.response,tokensUsed:t.usage?.totalTokens||t.tokensUsed,toolCalls:t.toolCalls?.map(e=>({id:e.id||``,name:e.name||``,arguments:JSON.stringify(e.arguments||{}),result:String(e.result||``)}))}})}async beforeToolExecution(e,t){t&&await this.emit(I.TOOL_BEFORE_EXECUTE,{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.toolName,toolId:t.executionId,arguments:JSON.stringify(t.parameters??{})}})}async afterToolExecution(e,t){if(!(!t.toolCalls||t.toolCalls.length===0))for(let n of t.toolCalls){let r=n.result===null?I.TOOL_ERROR:I.TOOL_SUCCESS,i=qr(e,n,t.duration);await this.emit(r,i),await this.emit(I.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(I.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}})}on(e,t,n){let r=`handler_${this.nextHandlerId++}`;return Gr(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 Kr(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 Hr(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>Vr(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 Wr(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 Yr=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var Xr=class{tools=new Map;register(e){if(!e.schema?.name)throw new t(`Tool must have a valid schema with name`);let n=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(n)&&j.warn(`Tool "${n}" is already registered, overriding`,{toolName:n,existingTool:this.tools.get(n)?.constructor.name}),this.tools.set(n,e),j.debug(`Tool "${n}" registered successfully`,{toolName:n,toolType:e.constructor.name,parameters:Object.keys(e.schema.parameters?.properties||{})})}unregister(e){if(!this.tools.has(e)){j.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),j.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 j.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(),j.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 t(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new t(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new t(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new t(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))Zr(t,n);if(e.parameters.required){let n=e.parameters.properties||{};for(let r of e.parameters.required)if(!n[r])throw new t(`Required parameter "${r}" is not defined in properties`)}}};function Zr(e,n){if(n?.anyOf){if(n.anyOf.length===0)throw new t(`Parameter "${e}" declares an empty anyOf`);n.anyOf.forEach((t,n)=>Zr(`${e}|anyOf[${n}]`,t));return}if(!n?.type)throw new t(`Parameter "${e}" must declare a type or anyOf`);if(!Yr.includes(n.type))throw new t(`Parameter "${e}" has invalid type "${n.type}"`);if(n.properties)for(let[t,r]of Object.entries(n.properties))Zr(`${e}.${t}`,r);n.items&&Zr(`${e}[]`,n.items)}function Qr(e,t,r){let i=ir(r,t,`$`);if(i.length>0)throw new n(`output does not match the declared outputSchema: ${i.join(`; `)}`,e,void 0,{outputSchemaIssues:i})}function $r(e,t,n){let r=ei(e,t,n);return r?[r]:ir(n,t,`Parameter "${e}"`)}function ei(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 ${ti(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${ti(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${ti(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${ti(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${ti(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 ti(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function ni(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(...$r(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...$r(t,a,e))}return i}function ri(e,t,n,r){let i=ni(e,t,n,r);return{isValid:i.length===0,errors:i}}var ii=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)}},ai=class extends ii{emit(e,t,n){}};const oi=new ai;function si(e){return e===oi||e instanceof ai}function ci(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 li(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var ui=class extends ii{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??li()},i=ci(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function W(e,t){return new ui(e,t)}function di(e,t){return W(e,t)}var fi=class extends ii{emit(e,t,n){this.notifyListeners(e,t,n)}};const pi={COMPLETED:`span_completed`},mi={COMPLETED:`provider_call_completed`},hi={SWITCHED:`provider_fallback`};function gi(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 _i={COMPLETED:`tool_body_completed`},vi={DECIDED:`tool_permission_decided`},yi=`span`;var bi=class{schema;fn;eventService;constructor(e,t){this.schema=e,this.fn=t,this.validateConstructorInputs()}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(e,r){let i=this.schema.name;if(!this.validate(e))throw new t(`Invalid parameters for tool "${i}": ${ni(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let a=Date.now(),o;try{o=await this.fn(e,r)}catch(a){throw un(a)||a instanceof n||a instanceof t?a:new n(`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:!!r})}let s=Date.now()-a;this.schema.outputSchema&&Qr(i,o,this.schema.outputSchema);let c=r?.instanceEventService??this.eventService;if(c){let e={timestamp:new Date,spanId:li(),durationMs:s,op:i};c.emit(pi.COMPLETED,e)}return{success:!0,data:o,metadata:{executionTime:s,toolName:i,parameters:e}}}validate(e){return ni(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return ri(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new t(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new t(`Tool function is required and must be a function`);if(!this.schema.name)throw new t(`Tool schema must have a name`)}};const xi=`at least one tool must stay resident; all tools cannot be deferred`,Si=`a tool schema was withheld but no ${Ee} tool is offered; register the loader or turn tool search off`;function Ci(e){return e.deferLoading===!0}function wi(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!Ci(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(xi);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(Si);return r}function Ti(e){if(e.length>0&&e.every(Ci))throw Error(xi)}var Ei=class extends ze{moduleManager;pluginManager;get name(){return this.config.name}addPlugin(e){this.pluginManager.addPlugin(e)}removePlugin(e){return this.pluginManager.removePlugin(e)}getPlugin(e){return this.pluginManager.getPlugin(e)}getPlugins(){return this.pluginManager.getPlugins()}getPluginNames(){return this.pluginManager.getPluginNames()}async registerModule(e,t){return this.moduleManager.registerModule(e,t)}async unregisterModule(e){return this.moduleManager.unregisterModule(e)}getModule(e){return this.moduleManager.getModule(e)}getModulesByType(e){return this.moduleManager.getModulesByType(e)}getModules(){return this.moduleManager.getModules()}getModuleNames(){return this.moduleManager.getModuleNames()}hasModule(e){return this.moduleManager.hasModule(e)}async executeModule(e,t){return this.moduleManager.executeModule(e,t)}getModuleStats(e){return this.moduleManager.getModuleStats(e)}};function Di(e,t){if(!t.success){let r=t.data===void 0?``:`; data: ${typeof t.data==`string`?t.data:JSON.stringify(t.data)}`;throw new n(`${t.error??`Tool execution failed`}${r}`,e)}if(t.data===void 0)throw new n(`Tool execution succeeded but returned no data`,e);return t.data}async function Oi(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 ki(e){if(!e.name)throw new d(`Agent name is required`,{component:`Robota`});if(!e.aiProviders||e.aiProviders.length===0)throw new d(`At least one AI provider is required`,{component:`Robota`});if(!e.defaultModel)throw new d(`Default model configuration is required`,{component:`Robota`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new d(`Default model must specify both provider and model`,{component:`Robota`});let t=e.aiProviders.map(e=>e.name),n=t.filter((e,n)=>t.indexOf(e)!==n);if(n.length>0)throw new d(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`Robota`,duplicates:n});if(!t.includes(e.defaultModel.provider))throw new d(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`Robota`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var Ai=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 d(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],n=this.getEventService();for(let r of e){n&&r.setEventService(n),this.getTools().addTool(r.schema,async(e,t)=>{if(!t)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let n=await Oi(r,e,t);return Di(r.schema.name,n)});let e=r.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let r=this.getConfig();r.tools=e,this.setConfig(r);let i=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(M.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 d("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 d(`Both provider and model are required`,{component:`Robota`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new d(`AI Provider '${e.provider}' not found. Available: ${n.join(`, `)}`,{component:`Robota`,provider:e.provider,availableProviders:n});t.setCurrentProvider(e.provider,e.model);let r=this.getConfig();this.setConfig({...r,defaultModel:{...r.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.effort!==void 0&&{effort:e.effort}}}),this.logger.debug(`Model configuration updated`,e)}getModel(){let e=this.getAIProviders().getCurrentProvider();if(!e)throw new d(`No provider is currently set`,{component:`Robota`});let t=this.getConfig();return{provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.effort!==void 0&&{effort:t.defaultModel.effort}}}setSystemMessage(e){let t=this.getConfig();t.systemMessage=e,this.setConfig(t),this.setConfigUpdatedAt(Date.now())}getSystemMessage(){return this.getConfig().systemMessage}registerTool(e,t){if(t.hasTool(e.schema.name))throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let r=await Oi(e,t,n);return Di(e.schema.name,r)}),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},ji=class extends Be{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new Xr,this.resolveToolSearchMode=e.resolveToolSearchMode,this.isToolVisible=e.isToolVisible??(()=>!0)}async doInitialize(){j.debug(`Tools initialized`)}async doDispose(){this.registry.clear(),this.loadedDeferredTools.clear(),delete this.allowedTools,j.debug(`Tools disposed`)}addTool(e,t){this.ensureInitialized();let n=new bi(e,t);this.registry.register(n),j.debug(`Tool "${e.name}" registered successfully`)}removeTool(e){this.ensureInitialized(),this.registry.unregister(e)}getTool(e){return this.ensureInitialized(),this.registry.get(e)}getToolSchema(e){return this.ensureInitialized(),this.registry.get(e)?.schema}getTools(){this.ensureInitialized();let e=this.registry.getSchemas().filter(e=>this.isToolVisible(e.name));return this.allowedTools?e.filter(e=>this.allowedTools.includes(e.name)):e}getOfferedTools(){return wi(this.getTools(),this.loadedDeferredTools,this.resolveToolSearchMode())}isToolOffered(e){return this.getOfferedTools().some(t=>t.name===e)}getLoadedDeferredTools(){return[...this.loadedDeferredTools].sort()}listDeferredTools(){return this.resolveToolSearchMode()===`off`?[]:this.getTools().filter(e=>Ci(e)&&!this.loadedDeferredTools.has(e.name))}loadDeferredTools(e){this.ensureInitialized();let t=e.map(e=>{let t=this.isToolVisible(e)?this.registry.get(e)?.schema:void 0;if(!t)throw new n(`Tool "${e}" is not registered, so it cannot be loaded`,e);return t});for(let e of t)Ci(e)&&this.loadedDeferredTools.add(e.name);return t}async executeTool(e,t,r){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new n(`Tool "${e}" is not in the allowed tools list`,e);let i=this.registry.get(e);if(!i)throw new n(`Tool "${e}" is not registered`,e);let a;try{a=await i.execute(t,r)}catch(t){throw un(t)?t:t instanceof Error?new n(t.message,e,t):new n(String(t),e)}if(!a.success)throw new n(a.error||`Tool execution failed`,e,void 0,{parameters:JSON.stringify(t),result:JSON.stringify(a)});if(a.data===void 0)throw new n(`Tool execution succeeded but returned no data`,e);return a.data}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],j.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 Mi(e){let t=Ni(e.metadata),n=Fi(e.usage);return t??n}function Ni(e){if(!e)return;let t=Fi({inputTokens:Ii(e,`inputTokens`),outputTokens:Ii(e,`outputTokens`),promptTokens:Ii(e,`promptTokens`),completionTokens:Ii(e,`completionTokens`),totalTokens:Ii(e,`totalTokens`),cacheReadTokens:Ii(e,`cacheReadTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return Pi(n);if(Ri(n))return Fi(n)}function Pi(e){try{return Fi(JSON.parse(e))}catch{return}}function Fi(e){if(!e)return;let t=Li(e.inputTokens,e.promptTokens),n=Li(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=Li(e.totalTokens),i=Li(e.cacheReadTokens),a=i!==void 0&&i>=0&&i<=t;return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r},...a&&{cacheReadTokens:i}}}function Ii(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Li(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function Ri(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}const zi=4;function Bi(e){return Math.ceil(JSON.stringify(e).length/4)}function Vi(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function Hi(e,t={}){let n=Bi(e),r=Ui(e),i=r?.tokens,a=Wi(t.usageFloorTokens);return{usedTokens:r?.index===e.length-1?Math.max(i??0,a??0):Math.max(n,i??0,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function Ui(e){for(let t=e.length-1;t>=0;t--){let n=Mi(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function Wi(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const Gi=A(`agent-core:models`),Ki=new Set;function qi(e,t,n){let r=`${e}:${t}`;Ki.has(r)||(Ki.add(r),Gi.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 Ji=2e5,Yi=new Map;function Xi(...e){for(let t of e){let e=Yi.get(t.id);e&&!Zi(e,t)&&Gi.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)`),Yi.set(t.id,t)}}function Zi(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function Qi(e){return Yi.get(e)}function $i(e){let t=Qi(e)?.contextWindow;return t===void 0?(qi(e,`context window`,Ji),Ji):t}const ea=16384;function ta(e){let t=Qi(e)?.maxOutput;return t===void 0?(qi(e,`max output`,ea),ea):t}function na(e){return Qi(e)?.name??e}function ra(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 ia(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(Ci);return i.length===0?`off`:i.length>15||Vi(i)/$i(t)>=.1?`on`:`off`}function aa(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function oa(e){let t=new ji({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:ia(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var sa=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)}},ca=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 d(`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 la(e){return{moduleManager:new sa(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new ca(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new Ai(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 ua={ASSIGNED:`assigned`,COMPLETED:`completed`},da=`task`,fa={MESSAGE:`message`,INPUT:`input`},pa=`user`;function ma(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(M.CREATED,{parameters:{tools:n,systemMessage:e.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function ha(e,t,n,r,i){si(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:Vt,ownerId:t,ownerPath:_a(t,n)})}function ga(){return new Jr({enabled:!0,events:[I.MODULE_INITIALIZE_START,I.MODULE_INITIALIZE_COMPLETE,I.MODULE_INITIALIZE_ERROR,I.MODULE_EXECUTION_START,I.MODULE_EXECUTION_COMPLETE,I.MODULE_EXECUTION_ERROR,I.MODULE_DISPOSE_START,I.MODULE_DISPOSE_COMPLETE,I.MODULE_DISPOSE_ERROR]})}function _a(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function va(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.driverId&&{driverId:t.driverId},...t.turnSource&&{turnSource:t.turnSource},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},awaitProviderSettlement:t.awaitProviderSettlement,...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.executionJournal&&{executionJournal:t.executionJournal},...t.maxExecutionRounds!==void 0&&{maxExecutionRounds:t.maxExecutionRounds},...t.maxSameToolInputs!==void 0&&{maxSameToolInputs:t.maxSameToolInputs},...t.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:t.allowToolOnlyCompletion},...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.temperature!==void 0&&{temperature:t.temperature},...t.toolChoice!==void 0&&{toolChoice:t.toolChoice},...t.withholdHostedTools===!0&&{withholdHostedTools:!0},...t.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:t.ephemeralSystemContext},...t.traceContext!==void 0&&{traceContext:t.traceContext}}}async function ya(e,t,n={},r){try{e.emitAgentEvent(M.EXECUTION_START,{}),e.logger.debug(`Starting Robota execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=await e.getExecutionService().execute(t,i,a,va(e,n));if(e.logger.debug(`Robota execution completed`,{success:o.success,duration:o.duration,tokensUsed:o.tokensUsed,toolsExecuted:o.toolsExecuted,interrupted:o.interrupted}),o.interrupted)return e.emitAgentEvent(M.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(M.EXECUTION_COMPLETE,{}),o.response}catch(t){throw t instanceof R?t:(e.logger.error(`Robota execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(M.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}}async function*ba(e,t,n={},r){let i=!1;try{e.emitAgentEvent(M.EXECUTION_START,{}),e.logger.debug(`Starting Robota streaming execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=yield*e.getExecutionService().executeStream(t,i,a,va(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 R?(i=!0,t):(e.logger.error(`Robota streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(M.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}finally{i||e.emitAgentEvent(M.EXECUTION_COMPLETE,{})}}function xa(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function Sa(e,t){return[`Your previous response did not match the required JSON schema.`,`Validation issues:`,...t.map(e=>`- ${e}`),``,`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e.jsonSchema)].join(`
|
|
4
|
-
`)}async function
|
|
5
|
-
`||e[r]===`\r`;!i&&!n?(t++,n=!0):i&&(n=!1)}return t}function Ra(e,t,n,r,i,a,o){e.emitExecution(N.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 za(e,t,n,r){e.emitExecution(N.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:La(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 Ba(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(N.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:La(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(La(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 W(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function Va(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 W(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})};e.emitWithContext(N.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(N.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:i.length,round:s},metadata:{toolsExecuted:r.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:s}},d,f)}function Ha(e){if(!e.executionId)throw new t(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new t(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new t(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function Ua(e,t){let n=Ha(e),r=U(),i=e.traceContext?c(e.traceContext,r):void 0,a=m(`shell`,e.traceContext,_(r)),o=e.traceContext?m(`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 Wa(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null}}function Ga(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function Ka(e){let t=e.argumentDecodeError;if(e.eventService&&t!==void 0){let n={timestamp:new Date,toolName:e.toolName,error:t};e.eventService.emit(P.CALL_ERROR,n)}return{toolName:e.toolName,result:null,success:!1,error:t,executionId:e.executionId,metadata:{errorCode:Gt,requestedTool:e.toolName}}}function qa(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function Ja(e){return e!==void 0}function Ya(e){return e!==void 0}function Xa(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 Za(e,t,n,r){let i=e.requests[r];if(i)try{let a=await to(e,t,i,r);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=qa(a))}catch(e){if(un(e)){let t=dn(n.fatalError,e);un(t)&&(n.fatalError=t),e instanceof R||n.abort.abort(e);return}let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=Ga(i,t)}}async function Qa(e,t,n){for(;!n.fatalError&&n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await Za(e,t,n,r)}}async function $a(e,t){let n=new AbortController,r=e.journal?{...e,signal:e.signal?AbortSignal.any([e.signal,n.signal]):n.signal}:e,i={resultsByIndex:Array(e.requests.length),errorsByIndex:Array(e.requests.length),nextRequestIndex:0,abort:n},a=Xa(e.requests.length,e.maxConcurrency),o=Array.from({length:a},()=>Qa(r,t,i));if(await Promise.all(o),i.fatalError)throw i.fatalError;let s=i.resultsByIndex.filter(Ja),c=i.errorsByIndex.filter(Ya);if(c.length>0&&!e.continueOnError)throw c[0];return{results:s,errors:c}}async function eo(e,t){let n=[],r=[];for(let[i,a]of e.requests.entries())try{let o=await to(e,t,a,i);if(n.push(o),o.success||r.push(qa(o)),!o.success&&!e.continueOnError)break}catch(t){if(un(t))throw t;let n=t instanceof Error?t:Error(String(t));if(r.push(n),!e.continueOnError)break}return{results:n,errors:r}}async function to(e,t,n,r){let i=e.recoveredResults?.get(r);if(i)return structuredClone(i);if(!e.journal)return e.signal?.aborted?Wa(n):n.argumentDecodeError===void 0?t.executeTool(n.toolName,n.parameters,Ua(n,e.signal)):Ka(n);let a,o=e.journal;if(e.signal?.aborted)a=Wa(n);else if(n.argumentDecodeError!==void 0)a=Ka(n);else if(await o.beforeDispatch(r),e.signal?.aborted)a=Wa(n);else try{a=await no(e,r,()=>t.executeTool(n.toolName,n.parameters,{...Ua(n,e.signal),...o.continuation?{continuation:o.continuation(r)}:{},...o.beforeEffect?{beforeToolEffect:e=>o.beforeEffect(r,e)}:{}}))}catch(e){if(un(e))throw e;a=Ga(n,e instanceof Error?e:Error(String(e)))}return await e.journal?.onResult(r,a),a}async function no(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?dn(r.error,e):e}}if(`error`in r)throw r.error;return r.result}async function ro(e,t,n){return n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`),e.mode===`parallel`?$a(e,t):eo(e,t)}var io=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=Dt){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 z(`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,n,r,i=`offered`){this.logger.debug(`Executing tool: ${e}`);try{if(!r?.executionId)throw new t(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);r.signal?.throwIfAborted();let a=i===`offered`&&this.tools.getToolSchema(e)?.deferLoading===!0&&!this.tools.isToolOffered(e);if(!this.tools.hasTool(e)||a){let t=(i===`registered`?this.tools.getTools():this.tools.getOfferedTools()).map(e=>e.name).sort(),n=oo(e,t,a),o=r.eventService;if(o){let t={timestamp:new Date,toolName:e,error:n};o.emit(P.CALL_ERROR,t)}return this.logger.warn(`Tool call skipped because requested tool is not registered`,{toolName:e,availableTools:t}),{success:!1,error:n,toolName:e,executionId:r.executionId,metadata:{errorCode:Wt,requestedTool:e,availableTools:t}}}let o=r.eventService;if(o){let t={timestamp:new Date,toolName:e,parameters:n};o.emit(P.CALL_START,t)}let{toolName:s,parameters:c,...l}=r,u={...l,deferredTools:this.deferredToolCatalog,toolName:e,parameters:n,executionId:r.executionId},d=await this.tools.executeTool(e,n,u);if(this.logger.debug(`Tool execution completed: ${e}`),o){let t={timestamp:new Date,toolName:e,result:d};o.emit(P.CALL_COMPLETE,t),o.emit(P.CALL_RESPONSE_READY,t)}return{success:!0,result:d,toolName:e,executionId:u.executionId}}catch(t){if(un(t))throw t;this.logger.error(`Tool execution failed: ${e}`);let n=t instanceof Error?t:Error(String(t)),i=r?.eventService;if(i&&r?.executionId){let t={timestamp:new Date,toolName:e,error:n.message};i.emit(P.CALL_ERROR,t)}return{success:!1,error:n.message,toolName:e,executionId:r?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=ao(e.id,e.function.name,e.function.arguments);return{toolName:e.function.name,parameters:n.ok?n.parameters:{},executionId:e.id,ownerType:`tool`,ownerId:e.id,ownerPath:[...t.ownerPathBase,{type:`tool`,id:e.id}],metadata:t.metadataFactory?t.metadataFactory(e):void 0,...this.askHandler?{ask:this.askHandler}:{},deferredTools:this.deferredToolCatalog,...n.ok?{}:{argumentDecodeError:n.error}}})}async executeTools(e){return ro(e,this,this.logger)}};function ao(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 oo(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 ${Ee} 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 lo(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:Ht,ownerId:r,ownerPath:i}}function uo(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...lo(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:Ht,ownerId:r,ownerPath:o}}function fo(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:Ut,ownerId:i,ownerPath:[...lo(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function po(e,t,n,r,i,a){let o=uo(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:Ht,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function mo(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 ho=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(si(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=W(this.baseEventService,{ownerType:Ut,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 lo(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return uo(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return fo(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return po(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 W(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(si(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){Ra(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){za(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){Ba(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){Va(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function go(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function _o(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 vo(e){return e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0}function yo(e,t,n,r,i,a){let o=e.getMessages(),s=_o(o,i.turnMessageId),c=s.filter(vo).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:go(a,f)}:{}}}function bo(e,t,n,r,i,a,o=`round`){return structuredClone({version:1,effectAdmission:`required`,messages:e,round:t.currentRound,contextLimit:$i(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 xo(e,t,n){e.tools!==void 0&&(xe(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function So(e,t,n,r,i=!1){let a=Co(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw en();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(en())};o?.addEventListener(`abort`,h,{once:!0});let g=n.onTextDelta,_={...n,signal:s.signal,...g===void 0?{}:{onTextDelta:e=>{m(),g(e)}}};m();try{let n=new Promise((e,t)=>{d=t});return u=(async()=>e(t,_))(),await Promise.race([u,n])}finally{l=!0,f(),o?.removeEventListener(`abort`,h),i&&u&&await u.then(()=>{},e=>{if(e instanceof L)throw e})}}function Co(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function wo(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 To={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(wo(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(wo(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(wo(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(wo(t),t.executionResult)},onMessageAdded:async(e,t)=>{e.onMessageAdded&&t.message&&await e.onMessageAdded(t.message)},beforeRun:async(e,t)=>{e.beforeRun&&t.input&&await e.beforeRun(t.input,t.metadata)},afterRun:async(e,t)=>{e.afterRun&&t.input&&t.response&&await e.afterRun(t.input,t.response,t.metadata)},beforeProviderCall:async(e,t)=>{e.beforeProviderCall&&t.messages&&await e.beforeProviderCall(t.messages)},afterProviderCall:async(e,t)=>{e.afterProviderCall&&t.messages&&t.responseMessage&&await e.afterProviderCall(t.messages,t.responseMessage)},onError:async(e,t)=>{if(e.onError&&t.error){let n={action:`${Ht}.${N.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=To[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 Eo(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 Do(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function Oo(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 ko(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 Ao(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 jo(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 Mo(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:Io(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(N.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function No(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Po(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function Fo(e,t,n,r,i,a){return{messages:e,config:t,startTime:n,executionId:r,conversationId:i,...a?.sessionId&&{sessionId:a.sessionId},...a?.userId&&{userId:a.userId},...a?.metadata&&{metadata:a.metadata},...a?.signal&&{signal:a.signal},awaitProviderSettlement:a?.awaitProviderSettlement,...a?.onTextDelta&&{onTextDelta:a.onTextDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.executionJournal&&{executionJournal:a.executionJournal},...a?.maxExecutionRounds!==void 0&&{maxExecutionRounds:a.maxExecutionRounds},...a?.maxSameToolInputs!==void 0&&{maxSameToolInputs:a.maxSameToolInputs},...a?.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:a.allowToolOnlyCompletion},...a?.maxTokens!==void 0&&{maxTokens:a.maxTokens},...a?.temperature!==void 0&&{temperature:a.temperature},...a?.toolChoice!==void 0&&{toolChoice:a.toolChoice},...a?.withholdHostedTools===!0&&{withholdHostedTools:!0},...a?.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:a.ephemeralSystemContext},...a?.traceContext!==void 0&&{traceContext:a.traceContext}}}function Io(e){let t={conversationId:Po(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 Lo(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
|
|
6
|
-
`)}function Ro(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=ur({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:Lo(i.schema),id:U(),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 K(e,t){return e.current?.provider??t.currentInfo.provider}function q(e,t){return e.current?.model??t}function Bo(e,t){e.current={provider:t.to.provider,model:t.to.model}}function Vo(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 p(e,r)}function Ho(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function Uo(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 Wo(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function Go(e,t,n,r){let i=Eo(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 Ko(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;Wo(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let f=Go(d,t,n,i);Oo(f.toolChoice,f.tools),xo(f,d,n);let{messages:p,outcome:m}=Ro(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)=>Rn((e,t)=>(s?.(`invoked`,t.model??d),h(e,Ho(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:U(),state:`complete`};return u&&await H(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 So(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 So(g,p,f,t.timeout,o||!!u)}function qo(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 Jo(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 Yo(e){let t=0,n=0,r,i=!1;for(let a of e){if(a.role!==`assistant`)continue;let e=Qo(a);e&&(i=!0,t+=e.inputTokens,n+=e.outputTokens,e.cacheReadTokens!==void 0&&(r=(r??0)+e.cacheReadTokens))}if(i)return{promptTokens:t,completionTokens:n,totalTokens:t+n,...r!==void 0&&{cacheReadTokens:r}}}function Xo(e){let t=Yo(e.filter(e=>Ke(e)&&e.data!==void 0).map(qe));if(t)return{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}function Zo(){return U()}function Qo(e){let t=Mi(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 $o(e){let t=Jo(e).provenance,n=Qo(e);return n?{...n,totalTokens:n.inputTokens+n.outputTokens,usageProvenance:t===`complete`?`complete`:`partial`}:{usageProvenance:t}}const es=/^peer:[A-Za-z0-9._:-]{1,128}$/,ts=/<(\/?)(peer_message)/gi;function ns(e){return e.replace(ts,`<$1$2`)}function rs(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function is(e){return es.test(e)?e:`peer:unverified`}function as(e){return e.map(e=>{if(e.type!==`text`)return e;let t=ns(e.text);return t===e.text?e:{...e,text:t}})}function os(e){if(e.role===`tool`){let t=ns(e.content),n=e.parts?as(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=rs(e),n=ns(e.content),r=e.parts?as(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="${is(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function ss(e){return e.map(os)}async function cs(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=[...ss(e.getMessages()),{id:U(),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:U(),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},executionId:r,onModelFallback:e=>{Bo(u,e),o.onExecutionEvent?.(hi.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=U(),b={invoked:!1},x=`failure`,S,C;try{S=await So((a,s)=>Rn((e,n)=>{b.invoked=!0,b.startedAtMs=Date.now();let r=Vo(o.traceContext,t.provider,t.currentInfo.provider,y);return t.provider.chat(e,Ho(n,r))},a,s,o.executionJournal?{journal:o.executionJournal,executionId:r,callId:y,checkpoint:bo(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 L?C=e:$t(e,o.signal)&&(x=`interrupted`),e}finally{let e=b.invoked?Jo(S):{provenance:`absent`};so(()=>{o.onExecutionEvent?.(mi.COMPLETED,{executionId:r,conversationId:a,round:i.currentRound,startedAt:new Date(b.startedAtMs??v).toISOString(),endedAt:new Date(Math.max(Date.now(),b.startedAtMs??v)).toISOString(),outcome:x,callId:y,disposition:b.invoked?`invoked`:`preflight-refused`,...b.invoked&&{providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model),...typeof S?.metadata?.providerRequestId==`string`&&{providerRequestId:S.metadata.providerRequestId}},usageProvenance:e.provenance,...`promptTokens`in e&&e.promptTokens!==void 0&&{promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens,...e.cacheReadTokens!==void 0&&{cacheReadTokens:e.cacheReadTokens}}})},C)}if(!S)throw Error(`Forced summary provider returned no response.`);let w=(typeof S.content==`string`?S.content:``)||`Maximum rounds reached. Partial results available in conversation history.`,T={...S.metadata??{},round:i.currentRound,executionId:r,providerCallId:y,providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model),...$o(S)};e.addAssistantMessage(w,[],T),d=!0,o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:w}),mo(e,o,r,a,{round:i.currentRound})}catch(n){if(n instanceof L)throw n;if(d){s.warn(`Forced summary announcement failed`,{error:n instanceof Error?n.message:String(n)});return}if($t(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}),mo(e,o,r,a,l)}}function ls(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 us=.95;function ds(e,t,n){let r=Hi(e,{usageFloorTokens:n}),i=$i(t),a=i*us,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:us*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function fs(e,t,n,r,i,a){let o=n.currentRound,s=ds(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}),mo(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function ps(e,t,n,r){let i=0,a=0;return{wrappedOnTextDelta:a=>{e.onExecutionEvent?.(`provider_stream_raw_delta`,{executionId:n,conversationId:e.conversationId,round:r,sequence:i,delta:a}),i++,t.appendStreaming(a),e.onTextDelta?.(a)},wrappedOnProviderNativeRawPayload:t=>{let i=t.sequence??a;a=Math.max(a,i+1),e.onExecutionEvent?.(`provider_native_raw_payload`,{executionId:n,conversationId:e.conversationId,round:r,...t,sequence:i})}}}async function ms(e,t,n,r,i,a,o,s,c,l,u,d,f,p=zo(n,t.defaultModel.model,s),m=U(),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 Ko(e,t,n,r,{signal:i.signal,onTextDelta:u,onProviderNativeRawPayload:d,...i.maxTokens!==void 0&&{maxTokens:i.maxTokens},...i.temperature!==void 0&&{temperature:i.temperature},...i.withholdHostedTools===!0&&{nativeWebTools:{webSearch:!1,webFetch:!1}},executionId:s,onModelFallback:e=>{Bo(p,e),_.model=e.to.model,i.onExecutionEvent?.(hi.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=Do(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())},()=>Vo(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 L)throw y=e,a.discardPending(),e;if($t(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}),mo(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`?Jo(v):{provenance:`absent`};so(()=>{i.onExecutionEvent?.(mi.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 hs(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function gs(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function _s(e,t,n,r,i,a){let o=!1,s=0,c=0;for(let l of e){if(!l.id)throw Error(`Tool call missing ID: ${JSON.stringify(l)}`);let e=l.function?.name;if(!e||e.length===0)throw Error(`[EXECUTION] Tool call "${l.id}" missing function name`);if(o){i.warn(`[ROUND] Skipping tool result due to context overflow`,{toolCallId:l.id,toolName:e,round:r}),n.addToolMessageWithId(`Error: Context window near capacity. Tool execution result skipped. Respond with available results and re-request skipped tools if needed.`,l.id,e,{round:r,success:!1,error:`context_overflow`,toolName:e}),c++;continue}let u=t.results.find(e=>e.executionId===l.id),d=t.errors.find(e=>Ia(e)&&e.executionId===l.id),f,p={round:r};if(u&&u.success){if(u.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload`);f=typeof u.result==`string`?u.result:JSON.stringify(u.result),p.success=!0,u.toolName&&(p.toolName=u.toolName)}else if(u&&!u.success){if(!u.error||u.error.length===0)throw Error(`[EXECUTION] Tool result missing error message`);f=`Error: ${u.error}`,p.success=!1,p.error=u.error,u.toolName&&(p.toolName=u.toolName),u.metadata?.errorCode===`unknown_tool`&&(p.errorCode=Wt,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=Gt,typeof u.metadata.requestedTool==`string`&&(p.requestedTool=u.metadata.requestedTool))}else if(d){let e=d,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message`);f=`Error: ${t}`,p.success=!1,p.error=t,e.toolName&&(p.toolName=e.toolName)}else throw Error(`No execution result found for tool call ID: ${l.id}`);if(i.debug(`Adding tool result to conversation`,{toolCallId:l.id,toolName:e,content:f.substring(0,100),round:r,currentHistoryLength:n.getMessages().length}),n.addToolMessageWithId(f,l.id,e,p),a){let e=Hi(n.getMessages(),{usageFloorTokens:a.cumulativeInputTokens}).usedTokens;e>a.contextLimit*.8&&(i.warn(`[ROUND] Context budget exceeded after tool result — skipping remaining tools`,{estimatedTokens:e,contextLimit:a.contextLimit,toolCallId:l.id,round:r}),o=!0)}s++,i.debug(`Tool result added to history`,{toolCallId:l.id,newHistoryLength:n.getMessages().length,round:r})}return{contextOverflowed:o,addedCount:s,skippedCount:c,unknownToolFailureCount:0,unknownToolNames:[]}}function vs(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))&&bs(),t.add(e);try{if(Array.isArray(e))return`[${Array.from(e,n).join(`,`)}]`;Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null&&bs();let t=Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t));return t.length!==Reflect.ownKeys(e).length&&bs(),`{${t.map(([e,t])=>`${JSON.stringify(e)}:${n(t)}`).join(`,`)}}`}finally{t.delete(e)}}return n(e)}function ys(e){(!e||typeof e!=`object`||Array.isArray(e))&&bs(),vs(e)}function bs(){throw new z(`EXECUTION_RECOVERY_INVALID`,`Tool continuations require finite plain JSON objects`)}function xs(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 z(`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 z(`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 z(`EXECUTION_RECOVERY_INVALID`,`Continuation request kind is required`);ys(n.data);let t=vs([n.kind,n.data]),c=i.find(e=>vs([e.request.kind,e.request.data])===t);if(!c){let t={...r,requestId:U(),kind:n.kind,data:n.data};await H(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 R(i.filter(e=>!e.response).map(e=>e.request))});return l=u.catch(e=>{e instanceof R||(o=e)}),u}},settle:async()=>{if(c=!0,await l,o)throw o;if(s)throw new R(i.filter(e=>!e.response).map(e=>e.request))},admit:async e=>{if(c)throw new z(`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 R(t.map(e=>e.request));if(a)throw new z(`EXECUTION_RECOVERY_INVALID`,`Tool effect admission was repeated`);a=!0;try{await e()}catch(e){throw o=e,e}}}}async function Ss(e,t){let n=[],r=[...e];for(let e of t.toolResponses??[]){let i=structuredClone(e);if(!i||typeof i.requestId!=`string`||!i.requestId||typeof i.responseId!=`string`||!i.responseId)throw new z(`EXECUTION_RECOVERY_INVALID`,`Tool response identities are required`);ys(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(vs(a.response)!==vs(i))throw new z(`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 z(`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 H(t.journal,e);return r}function Cs(t,n,r){for(let i of t){let t=i.function?.name??`unknown`,a=`${t}::${typeof i.function?.arguments==`string`?i.function.arguments:JSON.stringify(i.function?.arguments??{})}`,o=(n.sameToolInputCounts.get(a)??0)+1;if(n.sameToolInputCounts.set(a,o),o>r)throw new e(t,o,r)}}async function ws(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m){let{toolExecutionService:h,logger:g,eventEmitter:_}=c,v=f??l?.maxSameToolInputs;v!==void 0&&Cs(e,s,v),g.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:i,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let y=_.buildThinkingOwnerContext(n,r,a,o).ownerPath,b=e.length,x=`${a}`,S=h.createExecutionRequestsWithContext(e,{ownerPathBase:y,metadataFactory:e=>({conversationId:n,round:i,directParentId:a,batchId:x,expectedCount:b,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:_.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:_.getBaseEventService(),...p?{traceContext:p}:{}}}),C={requests:S,mode:`parallel`,maxConcurrency:5,continueOnError:!0,signal:u};if(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??U(),parentCallId:t,executionId:r,toolCallId:e.executionId??``,toolName:e.toolName})),a=i.map((t,r)=>xs(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 H(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():H(e,{kind:`tool-dispatch`,recordId:`${i[t].actionId}:dispatch`,...i[t]}),onResult:(t,n)=>H(e,{kind:`tool-result`,recordId:`${i[t].actionId}:result`,...i[t],result:n,loadedDeferredTools:h.getLoadedDeferredTools()}),beforeEffect:(t,n)=>a[t].admit(()=>H(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(hs).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);w.results.forEach((e,t)=>{d?.(`tool_execution_result`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})}),s.toolsExecuted.push(...w.results.filter(e=>!hs(e)&&!gs(e)).map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}));let E=m?.recovery?.checkpoint.contextLimit??$i(l?.defaultModel?.model??``),ee=t.getMessages().length,te=_s(e,w,t,i,g,{contextLimit:E,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(ee).forEach((e,t)=>{d?.(`tool_message_committed`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,message:e}),d?.(`history_mutation`,{executionId:r,conversationId:n,round:i,batchId:x,mutation:`append_message`,index:ee+t,message:e})}),_.emitToolResultsEvents(e,w,s.toolsExecuted,n,r,i,a,o),_.clearToolEventServices(),{...te,unknownToolFailureCount:T.length,unknownToolNames:T}}async function Ts(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=ss(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,kr(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=Uo(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(N.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 W(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),fs(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]`),Qe(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),et(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},Pr=class{conversations=new Map;logger;maxMessagesPerConversation;maxConversations;constructor(e={}){this.maxMessagesPerConversation=e.maxMessagesPerConversation||0,this.maxConversations=e.maxConversations||50,this.logger=k(`ConversationHistory`)}getConversationStore(e){return this.conversations.has(e)||(this.conversations.size>=this.maxConversations&&this.cleanupOldConversations(),this.conversations.set(e,new Nr(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 Fr(){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 Ir(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 Lr=class extends Qt{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=Fr(),r=await this.withRetry(async()=>(n=Fr(),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),Ir(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=Fr(),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);Ir(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 Rr=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function zr(e){return Rr.test(e)?e:void 0}var Br=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Vr(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new c(`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 c(`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 c(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function Hr(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 Ur(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 Wr(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Gr(e,t,n,r){let{listenerCounts:i,totalListeners:a}=Wr(t),o=r.getSnapshot();return{enabled:e.enabled,calls:e.calls,errors:e.errors,eventTypes:Array.from(t.keys()),listenerCounts:i,totalListeners:a,bufferedEvents:n,totalEmitted:o.totalEmitted,totalErrors:o.totalErrors}}function Kr(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new c(`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 Jr(e,t,n){let r=t.result!==null&&t.result!==void 0;return{executionId:e.executionId,sessionId:e.sessionId,userId:e.userId,data:{toolName:t.name||``,toolId:t.id||``,toolResult:r?String(t.result):void 0,duration:n,success:r}}}var Yr=class extends Zt{name=`EventEmitterPlugin`;version=`1.0.0`;pluginOptions;logger;handlers=new Map;eventBuffer=[];nextHandlerId=1;bufferTimer;metrics;constructor(e={}){super(),this.logger=k(`EventEmitterPlugin`),this.metrics=e.metrics??new Br,Vr(e,this.name),this.pluginOptions={enabled:e.enabled??!0,events:e.events??[F.AGENT_EXECUTION_START,F.AGENT_EXECUTION_COMPLETE,F.AGENT_EXECUTION_ERROR,F.TOOL_BEFORE_EXECUTE,F.TOOL_AFTER_EXECUTE,F.TOOL_SUCCESS,F.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??Ht.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(F.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(F.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(F.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(F.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(F.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?F.TOOL_ERROR:F.TOOL_SUCCESS,i=Jr(e,n,t.duration);await this.emit(r,i),await this.emit(F.TOOL_AFTER_EXECUTE,{...i,data:{...i.data,toolResult:String(n.result||``)}})}}async onError(e,t){await this.emit(F.AGENT_EXECUTION_ERROR,{executionId:t?.executionId,sessionId:t?.sessionId,userId:t?.userId,error:e instanceof Error?e:Error(String(e)),data:{action:t?.action,tool:t?.tool,attempt:t?.attempt}})}on(e,t,n){let r=`handler_${this.nextHandlerId++}`;return Kr(this.handlers,e,r,t,n,this.pluginOptions.maxListeners,this.name),r}once(e,t,n){return this.on(e,t,{once:!0,...n&&{filter:n}})}off(e,t){return 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 Ur(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>Hr(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 Gr(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 Xr=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var Zr=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)&&A.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),A.debug(`Tool "${t}" registered successfully`,{toolName:t,toolType:e.constructor.name,parameters:Object.keys(e.schema.parameters?.properties||{})})}unregister(e){if(!this.tools.has(e)){A.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),A.debug(`Tool "${e}" unregistered successfully`)}get(e){return this.tools.get(e)}getAll(){return Array.from(this.tools.values())}getSchemas(){let e=this.getAll();return A.debug(`[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction`,{count:e.length,tools:e.map(e=>({name:e.schema?.name??`unnamed`,hasSchema:!!e.schema,schemaType:typeof e.schema,toolType:e.constructor?.name||`unknown`}))}),this.getAll().map(e=>e.schema)}has(e){return this.tools.has(e)}clear(){let e=this.tools.size;this.tools.clear(),A.debug(`Cleared ${e} tools from registry`)}getToolNames(){return Array.from(this.tools.keys())}getToolsByPattern(e){let t=typeof e==`string`?new RegExp(e):e;return this.getAll().filter(e=>t.test(e.schema.name))}size(){return this.tools.size}validateToolSchema(e){if(!e.name||typeof e.name!=`string`)throw new 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))Qr(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 Qr(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new r(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>Qr(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new r(`Parameter "${e}" must declare a type or anyOf`);if(!Xr.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))Qr(`${e}.${n}`,r);t.items&&Qr(`${e}[]`,t.items)}function $r(e,n,r){let i=ar(r,n,`$`);if(i.length>0)throw new t(`output does not match the declared outputSchema: ${i.join(`; `)}`,e,void 0,{outputSchemaIssues:i})}function ei(e,t,n){let r=ti(e,t,n);return r?[r]:ar(n,t,`Parameter "${e}"`)}function ti(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 ${ni(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${ni(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${ni(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${ni(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${ni(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 ni(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function ri(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(...ei(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...ei(t,a,e))}return i}function ii(e,t,n,r){let i=ri(e,t,n,r);return{isValid:i.length===0,errors:i}}var ai=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)}},oi=class extends ai{emit(e,t,n){}};const si=new oi;function ci(e){return e===si||e instanceof oi}function li(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 ui(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var di=class extends ai{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??ui()},i=li(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function W(e,t){return new di(e,t)}function fi(e,t){return W(e,t)}var pi=class extends ai{emit(e,t,n){this.notifyListeners(e,t,n)}};const mi={COMPLETED:`span_completed`},hi={COMPLETED:`provider_call_completed`},gi={SWITCHED:`provider_fallback`};function _i(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 vi={COMPLETED:`tool_body_completed`},yi={DECIDED:`tool_permission_decided`},bi=`span`;var xi=class{schema;fn;eventService;constructor(e,t){this.schema=e,this.fn=t,this.validateConstructorInputs()}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(e,n){let i=this.schema.name;if(!this.validate(e))throw new r(`Invalid parameters for tool "${i}": ${ri(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let a=Date.now(),o;try{o=await this.fn(e,n)}catch(a){throw z(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 s=Date.now()-a;this.schema.outputSchema&&$r(i,o,this.schema.outputSchema);let c=n?.instanceEventService??this.eventService;if(c){let e={timestamp:new Date,spanId:ui(),durationMs:s,op:i};c.emit(mi.COMPLETED,e)}return{success:!0,data:o,metadata:{executionTime:s,toolName:i,parameters:e}}}validate(e){return ri(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return ii(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 Si=`at least one tool must stay resident; all tools cannot be deferred`,Ci=`a tool schema was withheld but no ${De} tool is offered; register the loader or turn tool search off`;function wi(e){return e.deferLoading===!0}function Ti(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!wi(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(Si);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(Ci);return r}function Ei(e){if(e.length>0&&e.every(wi))throw Error(Si)}var Di=class extends Be{moduleManager;pluginManager;get name(){return this.config.name}addPlugin(e){this.pluginManager.addPlugin(e)}removePlugin(e){return this.pluginManager.removePlugin(e)}getPlugin(e){return this.pluginManager.getPlugin(e)}getPlugins(){return this.pluginManager.getPlugins()}getPluginNames(){return this.pluginManager.getPluginNames()}async registerModule(e,t){return this.moduleManager.registerModule(e,t)}async unregisterModule(e){return this.moduleManager.unregisterModule(e)}getModule(e){return this.moduleManager.getModule(e)}getModulesByType(e){return this.moduleManager.getModulesByType(e)}getModules(){return this.moduleManager.getModules()}getModuleNames(){return this.moduleManager.getModuleNames()}hasModule(e){return this.moduleManager.hasModule(e)}async executeModule(e,t){return this.moduleManager.executeModule(e,t)}getModuleStats(e){return this.moduleManager.getModuleStats(e)}};function Oi(e,n){if(!n.success){let r=n.data===void 0?``:`; data: ${typeof n.data==`string`?n.data:JSON.stringify(n.data)}`;throw new t(`${n.error??`Tool execution failed`}${r}`,e)}if(n.data===void 0)throw new t(`Tool execution succeeded but returned no data`,e);return n.data}async function ki(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 Ai(e){if(!e.name)throw new f(`Agent name is required`,{component:`Robota`});if(!e.aiProviders||e.aiProviders.length===0)throw new f(`At least one AI provider is required`,{component:`Robota`});if(!e.defaultModel)throw new f(`Default model configuration is required`,{component:`Robota`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new f(`Default model must specify both provider and model`,{component:`Robota`});let t=e.aiProviders.map(e=>e.name),n=t.filter((e,n)=>t.indexOf(e)!==n);if(n.length>0)throw new f(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`Robota`,duplicates:n});if(!t.includes(e.defaultModel.provider))throw new f(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`Robota`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var ji=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 f(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],n=this.getEventService();for(let r of e){n&&r.setEventService(n),this.getTools().addTool(r.schema,async(e,t)=>{if(!t)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let n=await ki(r,e,t);return Oi(r.schema.name,n)});let e=r.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let r=this.getConfig();r.tools=e,this.setConfig(r);let i=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(j.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 f("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 f(`Both provider and model are required`,{component:`Robota`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new f(`AI Provider '${e.provider}' not found. Available: ${n.join(`, `)}`,{component:`Robota`,provider:e.provider,availableProviders:n});t.setCurrentProvider(e.provider,e.model);let r=this.getConfig();this.setConfig({...r,defaultModel:{...r.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.effort!==void 0&&{effort:e.effort}}}),this.logger.debug(`Model configuration updated`,e)}getModel(){let e=this.getAIProviders().getCurrentProvider();if(!e)throw new f(`No provider is currently set`,{component:`Robota`});let t=this.getConfig();return{provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.effort!==void 0&&{effort:t.defaultModel.effort}}}setSystemMessage(e){let t=this.getConfig();t.systemMessage=e,this.setConfig(t),this.setConfigUpdatedAt(Date.now())}getSystemMessage(){return this.getConfig().systemMessage}registerTool(e,t){if(t.hasTool(e.schema.name))throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let r=await ki(e,t,n);return Oi(e.schema.name,r)}),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},Mi=class extends Ve{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new Zr,this.resolveToolSearchMode=e.resolveToolSearchMode,this.isToolVisible=e.isToolVisible??(()=>!0)}async doInitialize(){A.debug(`Tools initialized`)}async doDispose(){this.registry.clear(),this.loadedDeferredTools.clear(),delete this.allowedTools,A.debug(`Tools disposed`)}addTool(e,t){this.ensureInitialized();let n=new xi(e,t);this.registry.register(n),A.debug(`Tool "${e.name}" registered successfully`)}removeTool(e){this.ensureInitialized(),this.registry.unregister(e)}getTool(e){return this.ensureInitialized(),this.registry.get(e)}getToolSchema(e){return this.ensureInitialized(),this.registry.get(e)?.schema}getTools(){this.ensureInitialized();let e=this.registry.getSchemas().filter(e=>this.isToolVisible(e.name));return this.allowedTools?e.filter(e=>this.allowedTools.includes(e.name)):e}getOfferedTools(){return Ti(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=>wi(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)wi(e)&&this.loadedDeferredTools.add(e.name);return n}async executeTool(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;try{a=await i.execute(n,r)}catch(n){throw z(n)?n:n instanceof Error?new t(n.message,e,n):new t(String(n),e)}if(!a.success)throw new t(a.error||`Tool execution failed`,e,void 0,{parameters:JSON.stringify(n),result:JSON.stringify(a)});if(a.data===void 0)throw new t(`Tool execution succeeded but returned no data`,e);return a.data}hasTool(e){return this.ensureInitialized(),this.registry.has(e)}setAllowedTools(e){this.ensureInitialized(),this.allowedTools=[...e],A.debug(`Set allowed tools: ${e.join(`, `)}`)}getAllowedTools(){return this.ensureInitialized(),this.allowedTools?[...this.allowedTools]:void 0}getRegistry(){return this.ensureInitialized(),this.registry}getToolCount(){return this.ensureInitialized(),this.registry.size()}};function Ni(e){let t=Pi(e.metadata),n=Ii(e.usage);return t??n}function Pi(e){if(!e)return;let t=Ii({inputTokens:Li(e,`inputTokens`),outputTokens:Li(e,`outputTokens`),promptTokens:Li(e,`promptTokens`),completionTokens:Li(e,`completionTokens`),totalTokens:Li(e,`totalTokens`),cacheReadTokens:Li(e,`cacheReadTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return Fi(n);if(zi(n))return Ii(n)}function Fi(e){try{return Ii(JSON.parse(e))}catch{return}}function Ii(e){if(!e)return;let t=Ri(e.inputTokens,e.promptTokens),n=Ri(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=Ri(e.totalTokens),i=Ri(e.cacheReadTokens),a=i!==void 0&&i>=0&&i<=t;return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r},...a&&{cacheReadTokens:i}}}function Li(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Ri(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function zi(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}const Bi=4;function Vi(e){return Math.ceil(JSON.stringify(e).length/4)}function Hi(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function Ui(e,t={}){let n=Vi(e),r=Wi(e),i=r?.tokens,a=Gi(t.usageFloorTokens);return{usedTokens:r?.index===e.length-1?Math.max(i??0,a??0):Math.max(n,i??0,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function Wi(e){for(let t=e.length-1;t>=0;t--){let n=Ni(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function Gi(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const Ki=k(`agent-core:models`),qi=new Set;function Ji(e,t,n){let r=`${e}:${t}`;qi.has(r)||(qi.add(r),Ki.warn(`No metadata registered for model "${e}"; using the default ${t} of ${n}. This number belongs to a different vendor's models — register the model through registerModelMetadata() from the package that owns it. (NEUT-010)`))}const Yi=2e5,Xi=new Map;function Zi(...e){for(let t of e){let e=Xi.get(t.id);e&&!Qi(e,t)&&Ki.warn(`Model "${t.id}" was already registered with different metadata (context window ${e.contextWindow} -> ${t.contextWindow}, max output ${e.maxOutput} -> ${t.maxOutput}). The later registration wins; one of the two owners is wrong. (NEUT-010)`),Xi.set(t.id,t)}}function Qi(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function $i(e){return Xi.get(e)}function ea(e){let t=$i(e)?.contextWindow;return t===void 0?(Ji(e,`context window`,Yi),Yi):t}const ta=16384;function na(e){let t=$i(e)?.maxOutput;return t===void 0?(Ji(e,`max output`,ta),ta):t}function ra(e){return $i(e)?.name??e}function ia(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 aa(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(wi);return i.length===0?`off`:i.length>15||Hi(i)/ea(t)>=.1?`on`:`off`}function oa(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function sa(e){let t=new Mi({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:aa(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var ca=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)}},la=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 f(`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 ua(e){return{moduleManager:new ca(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new la(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new ji(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 da={ASSIGNED:`assigned`,COMPLETED:`completed`},fa=`task`,pa={MESSAGE:`message`,INPUT:`input`},ma=`user`;function ha(e,t){let n=Array.isArray(e.tools)?e.tools.map(e=>{let t=e?.schema?.name;if(typeof t==`string`&&t.length>0)return t;let n=e?.name;return typeof n==`string`&&n.length>0?n:``}).filter(e=>typeof e==`string`&&e.length>0):[];t(j.CREATED,{parameters:{tools:n,systemMessage:e.systemMessage,provider:e.defaultModel.provider,model:e.defaultModel.model,temperature:e.defaultModel.temperature,maxTokens:e.defaultModel.maxTokens}})}function ga(e,t,n,r,i){ci(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:Ut,ownerId:t,ownerPath:va(t,n)})}function _a(){return new Yr({enabled:!0,events:[F.MODULE_INITIALIZE_START,F.MODULE_INITIALIZE_COMPLETE,F.MODULE_INITIALIZE_ERROR,F.MODULE_EXECUTION_START,F.MODULE_EXECUTION_COMPLETE,F.MODULE_EXECUTION_ERROR,F.MODULE_DISPOSE_START,F.MODULE_DISPOSE_COMPLETE,F.MODULE_DISPOSE_ERROR]})}function va(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function ya(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.driverId&&{driverId:t.driverId},...t.turnSource&&{turnSource:t.turnSource},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},awaitProviderSettlement:t.awaitProviderSettlement,...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.executionJournal&&{executionJournal:t.executionJournal},...t.maxExecutionRounds!==void 0&&{maxExecutionRounds:t.maxExecutionRounds},...t.maxSameToolInputs!==void 0&&{maxSameToolInputs:t.maxSameToolInputs},...t.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:t.allowToolOnlyCompletion},...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.temperature!==void 0&&{temperature:t.temperature},...t.toolChoice!==void 0&&{toolChoice:t.toolChoice},...t.withholdHostedTools===!0&&{withholdHostedTools:!0},...t.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:t.ephemeralSystemContext},...t.traceContext!==void 0&&{traceContext:t.traceContext}}}async function ba(e,t,n={},r){try{e.emitAgentEvent(j.EXECUTION_START,{}),e.logger.debug(`Starting Robota execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=await e.getExecutionService().execute(t,i,a,ya(e,n));if(e.logger.debug(`Robota execution completed`,{success:o.success,duration:o.duration,tokensUsed:o.tokensUsed,toolsExecuted:o.toolsExecuted,interrupted:o.interrupted}),o.interrupted)return e.emitAgentEvent(j.EXECUTION_COMPLETE,{}),o.response;if(!o.success)throw o.error??Error(`[STRICT-POLICY] Failed execution result missing error field — every success:false result must carry error`);return e.emitAgentEvent(j.EXECUTION_COMPLETE,{}),o.response}catch(t){throw t instanceof L?t:(e.logger.error(`Robota execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(j.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}}async function*xa(e,t,n={},r){let i=!1;try{e.emitAgentEvent(j.EXECUTION_START,{}),e.logger.debug(`Starting Robota streaming execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=yield*e.getExecutionService().executeStream(t,i,a,ya(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 L?(i=!0,t):(e.logger.error(`Robota streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(j.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}finally{i||e.emitAgentEvent(j.EXECUTION_COMPLETE,{})}}function Sa(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function Ca(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 wa(e,t,r,i){let a=(r.outputRetries??2)+1,o=Sa(i),s=t,c=[];for(let t=1;t<=a;t++){let n=Ea(i,await ba(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=Ca(i,c))}throw new n(`response failed schema validation after ${a} attempt(s)`,c,a)}async function*Ta(e,t,r,i){let a=(r.outputRetries??2)+1,o=Sa(i),s=t,c=[];for(let t=1;t<=a;t++){let n=Ea(i,yield*xa(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=Ca(i,c))}throw new n(`response failed schema validation after ${a} attempt(s)`,c,a)}function Ea(e,t){let n=lr(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 Da(e,t){return e.getConversationStore(t).getMessages().map(e=>({id:e.id,role:e.role,content:e.content,state:e.state,timestamp:e.timestamp,metadata:e.metadata,...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{},...e.role===`tool`&&`name`in e?{name:e.name}:{}}))}function Oa(e,t){return e.getConversationStore(t).getHistory()}function ka(e,t,n){e.getConversationStore(t).addEntry(n)}function Aa(e,t){e.getConversationStore(t).clear()}function ja(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 Ma(e,t,n){e.getConversationStore(t).addMessage(n)}var Na=class extends Ve{providers=new Map;currentProvider;currentModel;constructor(){super({readyOnConstruction:!0})}async doInitialize(){A.debug(`AIProviders initialized`)}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),A.debug(`Closed AI provider: ${e}`)}catch(t){A.warn(`Failed to close AI provider ${e}`,{error:t instanceof Error?t.message:String(t)})}this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0,A.debug(`AIProviders disposed`)}addProvider(e,t){this.ensureInitialized();let n=an.validateProviderName(e);if(!n.isValid)throw new r(`Invalid provider name: ${n.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`);this.providers.has(e)&&A.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),A.debug(`AI provider "${e}" registered successfully`,{providerName:e,version:t.version,supportsStreaming:typeof t.chatStream==`function`})}removeProvider(e){if(this.ensureInitialized(),!this.providers.has(e)){A.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(t=>{A.warn(`Failed to close provider ${e}`,{error:t.message})}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,A.debug(`Cleared current provider selection after removing "${e}"`)),A.debug(`AI provider "${e}" removed successfully`)}getProvider(e){return this.ensureInitialized(),this.providers.get(e)}getProviders(){return this.ensureInitialized(),Object.fromEntries(this.providers)}setCurrentProvider(e,t){if(this.ensureInitialized(),!this.providers.get(e))throw new f(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,A.debug(`Current AI provider set to "${e}" with model "${t}"`)}getCurrentProvider(){if(this.ensureInitialized(),!(!this.currentProvider||!this.currentModel))return{provider:this.currentProvider,model:this.currentModel}}isConfigured(){return this.ensureInitialized(),!!(this.currentProvider&&this.currentModel&&this.providers.has(this.currentProvider))}getCurrentProviderInstance(){if(!(!this.isConfigured()||!this.currentProvider))return this.providers.get(this.currentProvider)}getProviderNames(){return this.ensureInitialized(),Array.from(this.providers.keys())}getProvidersByPattern(e){this.ensureInitialized();let t=typeof e==`string`?new RegExp(e):e,n={};for(let[e,r]of this.providers)t.test(e)&&(n[e]=r);return n}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return!1;let n=this.providers.get(t);return!!(n&&typeof n.chatStream==`function`)}getProviderCount(){return this.ensureInitialized(),this.providers.size}},Pa=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 ie(`SHA-256`,`TEXT`);return t.update(e),t.getHash(`HEX`)}},Fa=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new Pa;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 g(`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)}},Ia=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 La(e){return`executionId`in e||`toolName`in e}function Ra(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 za(e,t,n,r,i,a,o){e.emitExecution(M.START,{parameters:{input:t,agentConfiguration:i.aiProviderInfo,availableTools:i.toolsInfo,toolCount:i.toolsInfo.length,hasTools:i.toolsInfo.length>0,systemMessage:n.systemMessage,provider:n.defaultModel.provider,model:n.defaultModel.model,temperature:n.defaultModel.temperature,maxTokens:n.defaultModel.maxTokens},metadata:{method:`execute`,inputLength:t.length,messageCount:r.length,aiProvider:i.aiProviderInfo.providerName,model:i.aiProviderInfo.model,toolsAvailable:i.toolsInfo.map(e=>e.name),agentCapabilities:{canUseTools:i.toolsInfo.length>0,supportedActions:i.toolsInfo.map(e=>e.name)}}},a,o)}function Ba(e,t,n,r){e.emitExecution(M.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:Ra(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 Va(e,t,n,r,i,a,o,s){if(typeof n.content!=`string`||n.content.length===0)throw Error(`[EXECUTION] assistant response must have content or tool calls`);if(!(n.timestamp instanceof Date))throw Error(`[EXECUTION] assistant response timestamp is required`);let c=n.content,l=n.timestamp,u=new Date().getTime()-l.getTime();e.emitWithContext(M.ASSISTANT_MESSAGE_COMPLETE,{parameters:{assistantMessage:c,responseLength:c.length,wordCount:Ra(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(Ra(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 W(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function Ha(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 W(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})};e.emitWithContext(M.TOOL_RESULTS_READY,{parameters:{toolCallIds:u,round:s},metadata:{round:s}},d,f),e.emitWithContext(M.TOOL_RESULTS_TO_LLM,{parameters:{toolsExecuted:i.length,round:s},metadata:{toolsExecuted:r.results.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName}),round:s}},d,f)}function Ua(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 Wa(e,t){let n=Ua(e),r=U(),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 Ga(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null}}function Ka(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function qa(e){let t=e.argumentDecodeError;if(e.eventService&&t!==void 0){let n={timestamp:new Date,toolName:e.toolName,error:t};e.eventService.emit(N.CALL_ERROR,n)}return{toolName:e.toolName,result:null,success:!1,error:t,executionId:e.executionId,metadata:{errorCode:qt,requestedTool:e.toolName}}}function Ja(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function Ya(e){return e!==void 0}function Xa(e){return e!==void 0}function Za(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 Qa(e,t,n,r){let i=e.requests[r];if(i)try{let a=await no(e,t,i,r);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=Ja(a))}catch(e){if(z(e)){let t=fn(n.fatalError,e);z(t)&&(n.fatalError=t),e instanceof L||n.abort.abort(e);return}let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=Ka(i,t)}}async function $a(e,t,n){for(;!n.fatalError&&n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await Qa(e,t,n,r)}}async function eo(e,t){let n=new AbortController,r=e.journal?{...e,signal:e.signal?AbortSignal.any([e.signal,n.signal]):n.signal}:e,i={resultsByIndex:Array(e.requests.length),errorsByIndex:Array(e.requests.length),nextRequestIndex:0,abort:n},a=Za(e.requests.length,e.maxConcurrency),o=Array.from({length:a},()=>$a(r,t,i));if(await Promise.all(o),i.fatalError)throw i.fatalError;let s=i.resultsByIndex.filter(Ya),c=i.errorsByIndex.filter(Xa);if(c.length>0&&!e.continueOnError)throw c[0];return{results:s,errors:c}}async function to(e,t){let n=[],r=[];for(let[i,a]of e.requests.entries())try{let o=await no(e,t,a,i);if(n.push(o),o.success||r.push(Ja(o)),!o.success&&!e.continueOnError)break}catch(t){if(z(t))throw t;let n=t instanceof Error?t:Error(String(t));if(r.push(n),!e.continueOnError)break}return{results:n,errors:r}}async function no(e,t,n,r){let i=e.recoveredResults?.get(r);if(i)return structuredClone(i);let a,o=e.journal;if(e.signal?.aborted)a=Ga(n);else if(n.argumentDecodeError!==void 0)a=qa(n);else if(o&&await o.beforeDispatch(r),e.signal?.aborted)a=Ga(n);else{let i={...Wa(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 ro(e,r,()=>t.executeTool(n.toolName,n.parameters,i))}catch(e){if(z(e))throw e;a=Ka(n,e instanceof Error?e:Error(String(e)))}e.lifecycle&&await e.lifecycle.onResult(r,i,a)}return await e.journal?.onResult(r,a),a}async function ro(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?fn(r.error,e):e}}if(`error`in r)throw r.error;return r.result}async function io(e,t,n){return n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`),e.mode===`parallel`?eo(e,t):to(e,t)}var ao=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=kt){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 R(`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}`);try{if(!n?.executionId)throw new r(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);n.signal?.throwIfAborted();let a=i===`offered`&&this.tools.getToolSchema(e)?.deferLoading===!0&&!this.tools.isToolOffered(e);if(!this.tools.hasTool(e)||a){let t=(i===`registered`?this.tools.getTools():this.tools.getOfferedTools()).map(e=>e.name).sort(),r=so(e,t,a),o=n.eventService;if(o){let t={timestamp:new Date,toolName:e,error:r};o.emit(N.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:Kt,requestedTool:e,availableTools:t}}}let o=n.eventService;if(o){let n={timestamp:new Date,toolName:e,parameters:t};o.emit(N.CALL_START,n)}let{toolName:s,parameters:c,...l}=n,u={...l,deferredTools:this.deferredToolCatalog,toolName:e,parameters:t,executionId:n.executionId},d=await this.tools.executeTool(e,t,u);if(this.logger.debug(`Tool execution completed: ${e}`),o){let t={timestamp:new Date,toolName:e,result:d};o.emit(N.CALL_COMPLETE,t),o.emit(N.CALL_RESPONSE_READY,t)}return{success:!0,result:d,toolName:e,executionId:u.executionId}}catch(t){if(z(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(N.CALL_ERROR,t)}return{success:!1,error:r.message,toolName:e,executionId:n?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=oo(e.id,e.function.name,e.function.arguments);return{toolName:e.function.name,parameters:n.ok?n.parameters:{},executionId:e.id,ownerType:`tool`,ownerId:e.id,ownerPath:[...t.ownerPathBase,{type:`tool`,id:e.id}],metadata:t.metadataFactory?t.metadataFactory(e):void 0,...this.askHandler?{ask:this.askHandler}:{},deferredTools:this.deferredToolCatalog,...n.ok?{}:{argumentDecodeError:n.error}}})}async executeTools(e){return io(e,this,this.logger)}};function oo(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 so(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 ${De} 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 co(e,t){try{e()}catch(e){if(t===void 0)throw e}}function lo(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function uo(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:Wt,ownerId:r,ownerPath:i}}function fo(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...uo(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:Wt,ownerId:r,ownerPath:o}}function po(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:Gt,ownerId:i,ownerPath:[...uo(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function mo(e,t,n,r,i,a){let o=fo(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:Wt,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function ho(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 go=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=lo(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(ci(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=W(this.baseEventService,{ownerType:Gt,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 uo(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return fo(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return po(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return mo(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 W(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(ci(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){za(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){Ba(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){Va(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){Ha(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function _o(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function vo(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 yo(e){return e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0}function bo(e,t,n,r,i,a){let o=e.getMessages(),s=vo(o,i.turnMessageId),c=s.filter(yo).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:_o(a,f)}:{}}}function xo(e,t,n,r,i,a,o=`round`){return structuredClone({version:1,effectAdmission:`required`,messages:e,round:t.currentRound,contextLimit:ea(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 So(e,t,n){e.tools!==void 0&&(Se(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function Co(e,t,n,r,i=!1){let a=wo(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw nn();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(nn())};o?.addEventListener(`abort`,h,{once:!0});let g=n.onTextDelta,_={...n,signal:s.signal,...g===void 0?{}:{onTextDelta:e=>{m(),g(e)}}};m();try{let n=new Promise((e,t)=>{d=t});return u=(async()=>e(t,_))(),await Promise.race([u,n])}finally{l=!0,f(),o?.removeEventListener(`abort`,h),i&&u&&await u.then(()=>{},e=>{if(e instanceof I)throw e})}}function wo(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function To(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 Eo={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(To(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(To(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(To(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(To(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(To(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(To(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:`${Wt}.${M.ERROR}`,metadata:{}},r=t.executionContext?.executionId;typeof r==`string`&&r.length>0&&(n.executionId=r);let i=t.executionContext?.sessionId;typeof i==`string`&&i.length>0&&(n.sessionId=i);let a=t.executionContext?.userId;typeof a==`string`&&a.length>0&&(n.userId=a),await e.onError(t.error,n)}}};async function G(e,t,n,r){let i=Eo[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 Do(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 Oo(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function ko(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 Ao(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 jo(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 Mo(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 No(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:Lo(t)},o),o.error(`Execution pipeline failed`,{executionId:i,conversationId:r,duration:c,error:e instanceof Error?e.message:String(e)}),s.emitExecution(M.ERROR,{error:e instanceof Error?e.message:String(e),metadata:{method:`execute`,success:!1,duration:c}},r,i)}function Po(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Fo(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function Io(e,t,n,r,i,a){return{messages:e,config:t,startTime:n,executionId:r,conversationId:i,...a?.sessionId&&{sessionId:a.sessionId},...a?.userId&&{userId:a.userId},...a?.metadata&&{metadata:a.metadata},...a?.signal&&{signal:a.signal},awaitProviderSettlement:a?.awaitProviderSettlement,...a?.onTextDelta&&{onTextDelta:a.onTextDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.executionJournal&&{executionJournal:a.executionJournal},...a?.maxExecutionRounds!==void 0&&{maxExecutionRounds:a.maxExecutionRounds},...a?.maxSameToolInputs!==void 0&&{maxSameToolInputs:a.maxSameToolInputs},...a?.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:a.allowToolOnlyCompletion},...a?.maxTokens!==void 0&&{maxTokens:a.maxTokens},...a?.temperature!==void 0&&{temperature:a.temperature},...a?.toolChoice!==void 0&&{toolChoice:a.toolChoice},...a?.withholdHostedTools===!0&&{withholdHostedTools:!0},...a?.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:a.ephemeralSystemContext},...a?.traceContext!==void 0&&{traceContext:a.traceContext}}}function Lo(e){let t={conversationId:Fo(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 Ro(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
|
|
6
|
+
`)}function zo(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=dr({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:Ro(i.schema),id:U(),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 Bo(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 Vo(e,t){e.current={provider:t.to.provider,model:t.to.model}}function Ho(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 Uo(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function Wo(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 Go(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function Ko(e,t,n,r){let i=Do(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 qo(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;Go(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let f=Ko(d,t,n,i);ko(f.toolChoice,f.tools),So(f,d,n);let{messages:p,outcome:m}=zo(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)=>zn((e,t)=>(s?.(`invoked`,t.model??d),h(e,Uo(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:U(),state:`complete`};return u&&await H(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 Co(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 Co(g,p,f,t.timeout,o||!!u)}function Jo(e,t,n,r,i){let a=e.role===`assistant`?e.toolCalls:void 0,o=Array.isArray(a)&&a.length>0;if(typeof e.content!=`string`&&!o)throw Error(`[EXECUTION] Provider response must have content or tool calls`);if(a&&!Array.isArray(a))throw Error(`[EXECUTION] assistant toolCalls must be an array`);let s=e.content??``;if(i.debug(`[ROUND-${r}] Provider response completed`,{executionId:t,conversationId:n,round:r,responseLength:s.length,hasToolCalls:Array.isArray(a)&&a.length>0,toolCallsCount:Array.isArray(a)?a.length:0}),e.role!==`assistant`)throw Error(`Unexpected response role: ${e.role}`);let c=e,l=c.toolCalls??[];if(!Array.isArray(l))throw Error(`[EXECUTION] assistantResponse.toolCalls must be an array`);return{assistantResponse:c,assistantToolCalls:l}}function Yo(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 Xo(e){let t=0,n=0,r,i=!1;for(let a of e){if(a.role!==`assistant`)continue;let e=$o(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 Zo(e){let t=Xo(e.filter(e=>qe(e)&&e.data!==void 0).map(Je));if(t)return{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}function Qo(){return U()}function $o(e){let t=Ni(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 es(e){let t=Yo(e).provenance,n=$o(e);return n?{...n,totalTokens:n.inputTokens+n.outputTokens,usageProvenance:t===`complete`?`complete`:`partial`}:{usageProvenance:t}}const ts=/^peer:[A-Za-z0-9._:-]{1,128}$/,ns=/<(\/?)(peer_message)/gi;function rs(e){return e.replace(ns,`<$1$2`)}function is(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function as(e){return ts.test(e)?e:`peer:unverified`}function os(e){return e.map(e=>{if(e.type!==`text`)return e;let t=rs(e.text);return t===e.text?e:{...e,text:t}})}function ss(e){if(e.role===`tool`){let t=rs(e.content),n=e.parts?os(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=is(e),n=rs(e.content),r=e.parts?os(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="${as(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function cs(e){return e.map(ss)}async function ls(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=[...cs(e.getMessages()),{id:U(),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:U(),role:`system`,content:p,state:`complete`,timestamp:new Date},...f]:f;u=Bo(t,t.aiProviderInfo.model,r);let g={model:t.aiProviderInfo.model,effort:n.defaultModel?.effort??`auto`,toolChoice:`none`,...n.defaultModel?.maxTokens!==void 0&&{maxTokens:n.defaultModel.maxTokens},...n.defaultModel?.temperature!==void 0&&{temperature:n.defaultModel.temperature},...o.signal&&{signal:o.signal},...o.onTextDelta&&{onTextDelta:o.onTextDelta},executionId:r,onModelFallback:e=>{Vo(u,e),o.onExecutionEvent?.(gi.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=U(),b={invoked:!1},x=`failure`,S,C;try{S=await Co((a,s)=>zn((e,n)=>{b.invoked=!0,b.startedAtMs=Date.now();let r=Ho(o.traceContext,t.provider,t.currentInfo.provider,y);return t.provider.chat(e,Uo(n,r))},a,s,o.executionJournal?{journal:o.executionJournal,executionId:r,callId:y,checkpoint:xo(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 I?C=e:tn(e,o.signal)&&(x=`interrupted`),e}finally{let e=b.invoked?Yo(S):{provenance:`absent`};co(()=>{o.onExecutionEvent?.(hi.COMPLETED,{executionId:r,conversationId:a,round:i.currentRound,startedAt:new Date(b.startedAtMs??v).toISOString(),endedAt:new Date(Math.max(Date.now(),b.startedAtMs??v)).toISOString(),outcome:x,callId:y,disposition:b.invoked?`invoked`:`preflight-refused`,...b.invoked&&{providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model),...typeof S?.metadata?.providerRequestId==`string`&&{providerRequestId:S.metadata.providerRequestId}},usageProvenance:e.provenance,...`promptTokens`in e&&e.promptTokens!==void 0&&{promptTokens:e.promptTokens,completionTokens:e.completionTokens,totalTokens:e.totalTokens,...e.cacheReadTokens!==void 0&&{cacheReadTokens:e.cacheReadTokens}}})},C)}if(!S)throw Error(`Forced summary provider returned no response.`);let w=(typeof S.content==`string`?S.content:``)||`Maximum rounds reached. Partial results available in conversation history.`,ee={...S.metadata??{},round:i.currentRound,executionId:r,providerCallId:y,providerId:K(u,t),modelId:q(u,t.aiProviderInfo.model),...es(S)};e.addAssistantMessage(w,[],ee),d=!0,o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:w}),ho(e,o,r,a,{round:i.currentRound})}catch(n){if(n instanceof I)throw n;if(d){s.warn(`Forced summary announcement failed`,{error:n instanceof Error?n.message:String(n)});return}if(tn(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}),ho(e,o,r,a,l)}}function us(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 ds=.95;function fs(e,t,n){let r=Ui(e,{usageFloorTokens:n}),i=ea(t),a=i*ds,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:ds*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function ps(e,t,n,r,i,a){let o=n.currentRound,s=fs(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}),ho(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function ms(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=kr(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 hs(e,t,n,r,i,a,o,s,c,l,u,d,f,p=Bo(n,t.defaultModel.model,s),m=U(),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 qo(e,t,n,r,{signal:i.signal,onTextDelta:u,onProviderNativeRawPayload:d,...i.maxTokens!==void 0&&{maxTokens:i.maxTokens},...i.temperature!==void 0&&{temperature:i.temperature},...i.withholdHostedTools===!0&&{nativeWebTools:{webSearch:!1,webFetch:!1}},executionId:s,onModelFallback:e=>{Vo(p,e),_.model=e.to.model,i.onExecutionEvent?.(gi.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=Oo(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())},()=>Ho(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 I)throw y=e,a.discardPending(),e;if(tn(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}),ho(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`?Yo(v):{provenance:`absent`};co(()=>{i.onExecutionEvent?.(hi.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 gs(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function _s(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function vs(e,t,n,r,i,a){let o=!1,s=0,c=0;for(let l of e){if(!l.id)throw Error(`Tool call missing ID: ${JSON.stringify(l)}`);let e=l.function?.name;if(!e||e.length===0)throw Error(`[EXECUTION] Tool call "${l.id}" missing function name`);if(o){i.warn(`[ROUND] Skipping tool result due to context overflow`,{toolCallId:l.id,toolName:e,round:r}),n.addToolMessageWithId(`Error: Context window near capacity. Tool execution result skipped. Respond with available results and re-request skipped tools if needed.`,l.id,e,{round:r,success:!1,error:`context_overflow`,toolName:e}),c++;continue}let u=t.results.find(e=>e.executionId===l.id),d=t.errors.find(e=>La(e)&&e.executionId===l.id),f,p={round:r};if(u&&u.success){if(u.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload`);f=typeof u.result==`string`?u.result:JSON.stringify(u.result),p.success=!0,u.toolName&&(p.toolName=u.toolName)}else if(u&&!u.success){if(!u.error||u.error.length===0)throw Error(`[EXECUTION] Tool result missing error message`);f=`Error: ${u.error}`,p.success=!1,p.error=u.error,u.toolName&&(p.toolName=u.toolName),u.metadata?.errorCode===`unknown_tool`&&(p.errorCode=Kt,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=qt,typeof u.metadata.requestedTool==`string`&&(p.requestedTool=u.metadata.requestedTool))}else if(d){let e=d,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message`);f=`Error: ${t}`,p.success=!1,p.error=t,e.toolName&&(p.toolName=e.toolName)}else throw Error(`No execution result found for tool call ID: ${l.id}`);if(i.debug(`Adding tool result to conversation`,{toolCallId:l.id,toolName:e,content:f.substring(0,100),round:r,currentHistoryLength:n.getMessages().length}),n.addToolMessageWithId(f,l.id,e,p),a){let e=Ui(n.getMessages(),{usageFloorTokens:a.cumulativeInputTokens}).usedTokens;e>a.contextLimit*.8&&(i.warn(`[ROUND] Context budget exceeded after tool result — skipping remaining tools`,{estimatedTokens:e,contextLimit:a.contextLimit,toolCallId:l.id,round:r}),o=!0)}s++,i.debug(`Tool result added to history`,{toolCallId:l.id,newHistoryLength:n.getMessages().length,round:r})}return{contextOverflowed:o,addedCount:s,skippedCount:c,unknownToolFailureCount:0,unknownToolNames:[]}}function ys(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))&&xs(),t.add(e);try{if(Array.isArray(e))return`[${Array.from(e,n).join(`,`)}]`;Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null&&xs();let t=Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t));return t.length!==Reflect.ownKeys(e).length&&xs(),`{${t.map(([e,t])=>`${JSON.stringify(e)}:${n(t)}`).join(`,`)}}`}finally{t.delete(e)}}return n(e)}function bs(e){(!e||typeof e!=`object`||Array.isArray(e))&&xs(),ys(e)}function xs(){throw new R(`EXECUTION_RECOVERY_INVALID`,`Tool continuations require finite plain JSON objects`)}function Ss(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 R(`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 R(`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 R(`EXECUTION_RECOVERY_INVALID`,`Continuation request kind is required`);bs(n.data);let t=ys([n.kind,n.data]),c=i.find(e=>ys([e.request.kind,e.request.data])===t);if(!c){let t={...r,requestId:U(),kind:n.kind,data:n.data};await H(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 L(i.filter(e=>!e.response).map(e=>e.request))});return l=u.catch(e=>{e instanceof L||(o=e)}),u}},settle:async()=>{if(c=!0,await l,o)throw o;if(s)throw new L(i.filter(e=>!e.response).map(e=>e.request))},admit:async e=>{if(c)throw new R(`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 L(t.map(e=>e.request));if(a)throw new R(`EXECUTION_RECOVERY_INVALID`,`Tool effect admission was repeated`);a=!0;try{await e()}catch(e){throw o=e,e}}}}async function Cs(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 R(`EXECUTION_RECOVERY_INVALID`,`Tool response identities are required`);bs(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(ys(a.response)!==ys(i))throw new R(`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 R(`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 H(t.journal,e);return r}function ws(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 ee(e,a,n)}}async function Ts(e,t,n,r,i,a,o,s,c,l,u,d,f,p,m){let{toolExecutionService:h,logger:g,eventEmitter:_}=c,v=f??l?.maxSameToolInputs;v!==void 0&&ws(e,s,v),g.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:i,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let y=_.buildThinkingOwnerContext(n,r,a,o).ownerPath,b=e.length,x=`${a}`,S=h.createExecutionRequestsWithContext(e,{ownerPathBase:y,metadataFactory:e=>({conversationId:n,round:i,directParentId:a,batchId:x,expectedCount:b,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:_.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:_.getBaseEventService(),...p?{traceContext:p}:{}}}),C={requests:S,mode:`parallel`,maxConcurrency:5,continueOnError:!0,signal:u};if(C.lifecycle={beforeDispatch:async(e,t)=>{let i=S[e];if(m?.recovery?.actions.get(i.executionId??``)?.dispatched)return;let a={toolData:t,executionContext:{executionId:r,sessionId:n}};await 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??U(),parentCallId:t,executionId:r,toolCallId:e.executionId??``,toolName:e.toolName})),a=i.map((t,r)=>Ss(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 H(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():H(e,{kind:`tool-dispatch`,recordId:`${i[t].actionId}:dispatch`,...i[t]}),onResult:(t,n)=>H(e,{kind:`tool-result`,recordId:`${i[t].actionId}:result`,...i[t],result:n,loadedDeferredTools:h.getLoadedDeferredTools()}),beforeEffect:(t,n)=>a[t].admit(()=>H(e,{kind:`tool-effect-start`,recordId:`${i[t].actionId}:effect-start`,...i[t],parameters:n}))},C.recoveredResults=new Map(n.flatMap((e,t)=>e?.result?[[t,e.result]]:[]))}d?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:x,mode:C.mode,maxConcurrency:C.maxConcurrency,requestCount:S.length,tools:S.map(e=>e.toolName)}),S.forEach((e,t)=>{d?.(`tool_execution_request`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.argumentDecodeError===void 0?e.parameters:{argumentDecodeError:e.argumentDecodeError},ownerPath:e.ownerPath})});let w=await h.executeTools(C),ee=w.results.filter(gs).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);w.results.forEach((e,t)=>{d?.(`tool_execution_result`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})});let T=w.results.filter(e=>!gs(e)&&!_s(e));s.toolsExecuted.push(...T.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName})),s.toolCallOutcomes.push(...T.map(e=>({...e.executionId===void 0?{}:{id:e.executionId},name:e.toolName??``,success:e.success})));let E=m?.recovery?.checkpoint.contextLimit??ea(l?.defaultModel?.model??``),te=t.getMessages().length,ne=vs(e,w,t,i,g,{contextLimit:E,cumulativeInputTokens:s.cumulativeInputTokens});return t.getMessages().slice(te).forEach((e,t)=>{d?.(`tool_message_committed`,{executionId:r,conversationId:n,round:i,batchId:x,index:t,message:e}),d?.(`history_mutation`,{executionId:r,conversationId:n,round:i,batchId:x,mutation:`append_message`,index:te+t,message:e})}),_.emitToolResultsEvents(e,w,s.toolsExecuted,n,r,i,a,o),_.clearToolEventServices(),{...ne,unknownToolFailureCount:ee.length,unknownToolNames:ee}}async function Es(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=cs(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,Ar(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=Wo(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(M.ASSISTANT_MESSAGE_START,{parameters:{round:p,messageCount:m.length},metadata:{round:p,thinkingNodeId:v}},()=>d.buildThinkingOwnerContext(r,i,v,y),e=>{if(!e.ownerType||!e.ownerId)throw Error(`[EXECUTION] Missing owner context for thinking event`);return W(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),ps(m,o,e,n,u,{fullContext:a,executionId:i,conversationId:r}))return!0;p>1&&a.onTextDelta?.(`
|
|
7
7
|
|
|
8
|
-
`),n.beginAssistant();let b=Zo(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S}=ps(a,n,i,p),C=zo(s,o.defaultModel.model,i),w=U(),T=await ms(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),C,w,a.executionJournal?bo(m,e,a,o,t,c.toolExecutionService.getLoadedDeferredTools()):void 0);if(T===null)return!0;let{assistantResponse:E,assistantToolCalls:ee}=qo(T,i,a.conversationId,p,u);if(ee.length>0&&(a.toolChoice??o.defaultModel?.toolChoice)===`none`)throw Error(`Provider returned tool calls despite toolChoice none; no tools were executed.`);await G(l,`afterProviderCall`,{messages:m,responseMessage:T},u),await G(l,`onMessageAdded`,{message:T},u);let te=typeof E.content==`string`&&E.content.trim().length>0;if(ee.length===0&&!te)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let ne=$o(E),re=ne.inputTokens??0;re>0&&(e.cumulativeInputTokens=re);for(let e of ee)n.appendToolCall(e);let ie=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(ie,{round:p,usageObservationId:b,executionId:i,providerId:K(C,s),providerCallId:w,modelId:q(C,s.aiProviderInfo.model),...ne});let ae=n.getMessages().at(-1);return a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:E}),ae&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:ae}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=E,ee.length===0?(u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(E,i,p,r,v,y),!0):ls(await ws(ee,n,r,i,p,v,y,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs,a.traceContext,a.executionJournal?{journal:a.executionJournal,parentCallId:w}:void 0),e,u)?!0:(u.debug(`Round ${p} completed for agent ${a.conversationId}`),!1)}function Es(e,t){let n=t.maxExecutionRounds??e.maxExecutionRounds;if(n===void 0)return 10;if(!Number.isInteger(n)||n<0)throw Error(`[EXECUTION] maxExecutionRounds must be a non-negative integer`);return n}function Ds(e,t){return t===0||e<t}async function Os(e,t,n,r,i,a,o,s,c,l=!1){let u=Es(i,r);for(;!l&&!o.forcedSummaryInstruction&&Ds(o.currentRound,u)&&!(s?.aborted||(o.currentRound++,await Ts(o,u,e,t,n,r,i,a,c))||s?.aborted););let d=e.getMessages(),f=d.length>0?d[d.length-1]:void 0,p=f?.role===`assistant`&&typeof f.content==`string`&&f.content.length>0&&(!(`toolCalls`in f)||f.toolCalls.length===0);s?.aborted||r.allowToolOnlyCompletion!==!0&&(p||await cs(e,a,i,n,o,t,r,c.logger,u,r.executionJournal?c.toolExecutionService.getLoadedDeferredTools():void 0))}async function ks(e,t,n,r,i,a,o,s,c,l,u,d){let f={...yo(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:f.toolsExecuted.map(e=>({name:e}))}};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(N.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 z(`EXECUTION_RECOVERY_INVALID`,e)}function X(e){return typeof e==`string`&&e.length>0}function As(e,t,n,r=!0){try{return js(structuredClone(e),t,n,r)}catch(e){if(e instanceof z)throw e;return Y(`Execution journal is not a valid recoverable record prefix`)}}function js(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`),ys(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`),ys(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;(!i.intent&&t.metadata?.errorCode!==`argument_decode_error`||t.executionId!==r.id||t.toolName!==r.function.name||typeof t.success!=`boolean`||t.success&&(!i.effectStarted||t.result===void 0)||!t.success&&!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 z(`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 Ms(e){throw new z(`EXECUTION_RECOVERY_CONFLICT`,e)}function Ns(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,...$o(e.response),executionId:t.executionId,providerCallId:t.callId,round:e.checkpoint.round}}}function Ps(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 Fs(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))&&Ms(`Current history differs from the saved runtime checkpoint`);let a=e.slice(i.length);if(!a.length)return;Ps(a[0],Ns(t,n),n.callId,n.executionId)||Ms(`Current assistant does not match the saved response`);let o=t.response.toolCalls??[];a.length>o.length+1&&Ms(`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||Ms(`History contains a tool result without durable settlement`),n}),l=new Mr;for(let e of i)l.addMessage(e);l.addMessage(a[0]),_s(s,{results:c,errors:[]},l,t.checkpoint.round,r.logger,{contextLimit:t.checkpoint.contextLimit,cumulativeInputTokens:Is(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)&&Ms(`Existing tool result conflicts with the durable result`)}}function Is(e){let t=$o(e.response).inputTokens??0;return t>0?t:e.checkpoint.cumulativeInputTokens}async function Ls(e,t,n,r,i){let a=J(e.getMessages()),o=()=>{(a!==J(e.getMessages())||e.hasPendingAssistant())&&Ms(`History changed during execution recovery`)};o();let s=i?.records??await n.journal.read(n.executionId),c=i?.batch??As(s,n.executionId,n.callId);n.signal?.throwIfAborted(),o();let l=structuredClone(e.getMessages());Fs(l,c,n,r);let u=await Ss(s,n);u.length!==s.length&&(c=As(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 Mr;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(Ns(c,n));let h={toolsExecuted:[...c.checkpoint.continuation?.toolsExecuted??[]],currentRound:c.checkpoint.round,runningAssistantCount:f.getMessages().filter(e=>e.role===`assistant`).length,lastTrackedAssistantMessage:c.response,cumulativeInputTokens:Is(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=ls(await ws(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())&&Ms(`History changed while announcing execution recovery`);if(n.signal?.aborted)throw en(`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 Rs(e,t,n,r){let{executionId:i,callId:a,messages:o}=await Ls(e,t,n,r);return{executionId:i,callId:a,messages:o}}function Z(e){throw new z(`EXECUTION_RECOVERY_INVALID`,e)}function zs(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 Bs(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 z(`EXECUTION_RECOVERY_REQUIRED`,`The latest model invocation has no durable response; reconcile it before resuming`);let l=As(s,n.executionId,c.callId,!1),u=zs(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 z(`EXECUTION_RECOVERY_CONFLICT`,`History changed while reading the execution journal`);let m=await Ls(e,t,{...n,callId:c.callId},a,{batch:l,records:s}),h=Fo(e.getMessages(),f,new Date(u.startedAt),n.executionId,t,{...u.options,signal:n.signal,executionJournal:n.journal,onTextDelta:n.onTextDelta,onExecutionEvent:n.onExecutionEvent,traceContext:n.traceContext});a.eventEmitter.prepareOwnerPathBases(t);try{if(await Os(e,t,n.executionId,h,f,p,m.state,n.signal,a,m.stop||u.kind===`summary`),n.signal?.aborted)throw en(`Execution continuation interrupted`,n.signal.reason);return yo(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*Vs(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 Hs(e,t,n){return{executionId:e,...t===void 0?{}:{driverId:t},...n===void 0?{}:{turnSource:n}}}var Us=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new io(t),this.aiProviders=e,this.tools=t,this.conversationHistory=n,this.plugins=[],this.logger=A(`ExecutionService`),!r)throw Error(`[EXECUTION] EventService is required`);this.eventEmitter=new ho(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 Bs(this.conversationHistory.getConversationStore(e),e,t,n,e=>ko(this.aiProviders,this.tools,e),{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService})}resumeToolCalls(e,t){return Rs(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=No(),a=new Date,o=Po(r,`execute`),s=Fo(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=ko(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=jo(this.conversationHistory,o,t,n,i),u,d={toolsExecuted:[],currentRound:0,runningAssistantCount:0,lastTrackedAssistantMessage:void 0,cumulativeInputTokens:0,consecutiveUnknownToolFailureRounds:0,sameToolInputCounts:new Map};try{let t=l.getMessages().length;l.addUserMessage(e,Hs(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),await G(this.plugins,`beforeExecution`,{messages:l.getMessages(),executionContext:p},this.logger),Ao(c);for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await Os(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),ks(e,l,i,a,d,o,u,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){if(un(e))throw e;return $t(e,r?.signal)?{...yo(l,i,a,d.toolsExecuted,{turnMessageId:u,interrupted:!0}),interrupted:!0}:(await Mo(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*Vs(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 Ws(e){let t=new Ma;if(e.aiProviders)for(let n of e.aiProviders)t.addProvider(n.name,n);return e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),t}async function Gs(e){let{config:t,aiProviders:n,tools:r,agentFactory:i,conversationHistory:a,moduleRegistry:o,eventEmitter:s,eventService:c,logger:l}=e;if(l.debug(`Starting Robota initialization with independent managers`),await Promise.all([n.initialize(),r.initialize(),i.initialize()]),t.modules){for(let e of t.modules)await o.registerModule(e,{autoInitialize:!0,validateDependencies:!0});l.debug(`Modules registered and initialized`,{moduleCount:t.modules.length,moduleNames:t.modules.map(e=>e.name)})}if(t.tools)for(let e of t.tools)e instanceof Zt&&c&&e.setEventService(c),r.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let r=await Oi(e,t,n);return Di(e.schema.name,r)}),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new Fa(new Pa({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new Na));let d=new Us(n,r,a,c,t.executionContext,u);if(t.ask&&d.setAskHandler(t.ask),t.plugins)for(let e of t.plugins)d.registerPlugin(e),e.subscribeToModuleEvents&&(await e.subscribeToModuleEvents(s),l.debug(`Plugin subscribed to module events`,{pluginName:e.name}));return l.debug(`Robota initialization completed successfully with independent managers`),d}async function Ks(e){try{let t=await Gs(e.ctx);e.setExecutionService(t),e.setFullyInitialized(!0)}catch(t){throw e.ctx.logger.error(`Robota initialization failed`,{error:t instanceof Error?t.message:String(t)}),t}}function qs(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 Js(e){e.logger.debug(`Destroying Robota instance`,{name:e.name});let t=[],n=async(n,r)=>{try{await r(),e.logger.debug(n)}catch(r){let i=r instanceof Error?r:Error(String(r));t.push(i),e.logger.error(`Error during Robota destruction step`,{step:n,error:i.message})}};if(e.isFullyInitialized&&e.moduleRegistry&&await n(`All modules disposed`,()=>e.moduleRegistry.disposeAllModules()),e.executionService){let t=e.executionService.getPlugins();for(let e of t)await n(`Plugin disposed: ${e.name}`,()=>e.dispose());e.logger.debug(`ExecutionService plugins cleaned up`)}return e.moduleRegistry&&await n(`ModuleRegistry cleared`,()=>e.moduleRegistry.clearAllModules()),e.eventEmitter&&await n(`EventEmitter disposed`,()=>e.eventEmitter.dispose()),await n(`Tools disposed`,()=>e.tools.dispose()),await n(`AIProviders disposed`,()=>e.aiProviders.dispose()),e.resetState(),t.length===0?e.logger.info(`Robota instance destroyed successfully`,{name:e.name}):e.logger.warn(`Robota instance destroyed with cleanup failures`,{name:e.name,failureCount:t.length}),{errors:t}}var Ys=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(),Xs(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 Xs(e,t){let n=e.reason;return $t(n)&&n.name===`AbortError`?n:en(t?`Run aborted while queued behind another run on this instance`:`Run aborted before it started`,n)}function Zs(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??$s,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function Qs(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new d(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel,r=n?.model??t.defaultModel;if(!r)throw new d(`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 d(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||$s(),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 $s(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function ec(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var tc=class{templates=new Map;logger;constructor(){this.logger=A(`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 nc(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 rc(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function ic(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 ac(e,n.name,r)}t.push(n)}}function ac(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var oc=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new tc,this.logger=A(`AgentFactory`),this.options=Zs(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,n,r=!1){let i,a=this.admit();try{i=Qs(n,this.options);let o=i;if(this.options.strictValidation){let e=rn(i);if(!e.isValid)throw new t(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let s;if(await ic([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(o)},{name:`construct`,run:()=>{s=new e(o)}},{name:`initialize`,run:()=>s?nc(s)?.initialize?.():void 0,undo:()=>s?nc(s)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!s)throw new d(`Agent was not constructed`);this.activeAgents.set(a,s),ec(this.creationStats,r)},undo:()=>{this.activeAgents.delete(a),this.creationStats.activeCount--,this.creationStats.totalCreated--,r?this.creationStats.fromTemplates--:this.creationStats.customConfigured--}},{name:`afterCreate`,run:()=>s?this.lifecycleEvents.afterCreate?.(s,o):void 0}]),this.pendingAgents.delete(a),!s)throw new d(`Agent was not constructed`);return this.logger.info(`Agent created successfully`,{agentId:a,model:i.defaultModel.model,provider:i.defaultModel.provider}),s}catch(e){this.pendingAgents.delete(a);let t=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&i&&await this.lifecycleEvents.onCreateError(t,i),this.logger.error(`Failed to create agent`,{error:t.message,model:n.defaultModel?.model,provider:n.defaultModel?.provider,hasTools:!!n.tools?.length}),t}}admit(){if(this.activeAgents.size+this.pendingAgents.size>=this.options.maxConcurrentAgents)throw new d(`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 d(`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 d(`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 nc(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 rn(e)}};function sc(e,t,n){if(!e.name||e.name.trim()===``)throw new d(`Module name is required`);if(!e.version||e.version.trim()===``)throw new d(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new d(`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 d(`Module '${e.name}' depends on unregistered type '${n}'`,{moduleName:e.name,dependencyType:n});let a=new Set;for(let e of n.values())a.add(e.getModuleType().type);let o=[];for(let e of i.dependencies)a.has(e)||o.push(e);o.length>0&&r.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:o})}function lc(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 uc(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 dc(){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 fc(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 pc(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 mc(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 hc(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 gc=class{registeredTypes=new Map;logger;constructor(){this.logger=A(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new d(`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 d(`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 fc(e,e=>this.getType(e))}resolveDependencies(e){return pc(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return mc(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 dc())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 hc(this.registeredTypes)}};const _c={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var vc=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 gc,this.logger=A(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new d(`Cannot register modules during disposal`);if(sc(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new d(`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(_c.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=lc(e,this.modules);if(n.length>0)throw new d(`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(_c.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new d(`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 d(`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 d(`Module '${e}' not found`);if(!n.isInitialized())throw new d(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new d(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new d(`Module '${e}' does not support execute()`);let a=await n.execute(t),o=Date.now()-i;r.totalExecutions++,r.successfulExecutions++,r.totalExecutionTime+=o,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date;let s=this.moduleStatuses.get(e);return s&&(s.lastActivity=new Date),a}catch(e){let t=Date.now()-i;throw r.totalExecutions++,r.failedExecutions++,r.totalExecutionTime+=t,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date,e}}getModule(e){return this.modules.get(e)}getModulesByType(e){return Array.from(this.modules.values()).filter(t=>t.getModuleType().type===e)}getAllModules(){return Array.from(this.modules.values())}getModuleNames(){return Array.from(this.modules.keys())}hasModule(e){return this.modules.has(e)}getModuleStatus(e){return this.moduleStatuses.get(e)}getAllModuleStatuses(){return Array.from(this.moduleStatuses.values())}getModuleStats(e){return this.moduleStats.get(e)}getAllModuleStats(){let e={};for(let[t,n]of this.moduleStats.entries())e[t]={...n};return e}async disposeAllModules(){this.isDisposing=!0;let e=[...this.initializationOrder].reverse();for(let t of e){let e=this.modules.get(t);if(e&&e.isInitialized())try{e.dispose&&await e.dispose();let n=this.moduleStatuses.get(t);n&&(n.initialized=!1)}catch(e){this.logger.error(`Failed to dispose module`,{name:t,error:e instanceof Error?e.message:String(e)})}}this.initializationOrder=[],this.isDisposing=!1}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=!1}getRegistryStats(){return uc(this.modules,this.moduleStats)}},yc=class extends Ei{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=aa(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=A(`Robota`,t?{level:t}:{}),this.startTime=Date.now(),ki(e),this.aiProviders=Ws(e),this.tools=oa(()=>this.config),this.agentFactory=new oc,this.conversationHistory=new Nr,this.eventEmitter=ga(),this.moduleRegistry=new vc(this.eventEmitter),this.eventService=e.eventService||oi,this.agentEventService=W(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:_a(this.conversationId,this.config.executionContext)});let n=la({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,ma(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=[..._a(this.conversationId,this.config.executionContext),{type:`tool`,id:n.executionId??e}];return this.executionService.invokeRuntimeTool(e,t,{...n,baseEventService:this.eventService,eventService:W(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=rr(t.output);return await Ca(this.executionDeps(),e,t,n)}return await ya(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=rr(t.output);return yield*wa(this.executionDeps(),e,t,n)}return yield*ba(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new Ys;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 Ea(this.conversationHistory,this.conversationId)}getFullHistory(){return Da(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Oa(this.conversationHistory,this.conversationId,e)}clearHistory(){ka(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){Aa(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){ja(this.conversationHistory,this.conversationId,e)}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e)}getModel(){return this.configManager.getModel()}updateSystemPrompt(e){this.configManager.setSystemMessage(e),this.conversationHistory.getConversationStore(this.conversationId).setSystemPrompt(e)}getSystemPrompt(){return this.configManager.getSystemMessage()}registerTool(e){this.configManager.registerTool(e,this.tools)}unregisterTool(e){this.tools.removeTool(e)}getOfferedToolSchemas(){return this.tools.getOfferedTools()}getConfig(){return{...this.config}}swapDefaultProvider(e,t){this.aiProviders.addProvider(e.name,e),this.configManager.setModel({provider:e.name,model:t})}getStats(){return qs({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,Js({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 Ks({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){ha(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const bc=1e4,xc=25e3,Sc=5e5,Cc=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,wc=Symbol.for(`@robota-sdk/tool-result-admitted`);var Tc=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function Ec(e){return Object.getOwnPropertyDescriptor(e,wc)?.value===!0}function Dc(e){return Object.defineProperty({...e},wc,{value:!0})}function Oc(e){if(e.success)return typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;let t=e.data===void 0?``:typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;return`${e.error??``}${t}`}function kc(e){return Number.isSafeInteger(e)&&e>0}function Ac(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!kc(n)||!kc(r)||!kc(i)||n>=r||r>i||i>5e5)throw new Tc(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!kc(t))throw new Tc(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function jc(e,t,n={},r){let{warningChars:i,hardChars:a}=Ac(n,r),o=Oc(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new Tc(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new Tc(`spill-write-failed`)}if(!Cc.test(e)||e.length>a)throw new Tc(`invalid-reference`);return Dc(t.success?{success:!0,data:e}:{success:!1,error:`Tool failure details: ${e}`})}return Dc(t)}var Mc=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 Nc={STARTED:`started`,STEP_STARTED:`step_started`,STEP_COMPLETED:`step_completed`,COMPLETED:`completed`,FAILED:`failed`},Pc=`orchestration`;function Fc(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function Ic(e){return typeof e==`string`?e.length:0}var Lc=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:M.EXECUTION_START,completeEvent:M.EXECUTION_COMPLETE,errorEvent:M.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Ic(n[0]),conversationId:e.conversationId,options:Fc(n[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod(`runStream`,{startEvent:M.EXECUTION_START,completeEvent:M.EXECUTION_COMPLETE,errorEvent:M.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Ic(n[0]),conversationId:e.conversationId,streaming:!0,options:Fc(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:P.CALL_START,completeEvent:P.CALL_COMPLETE,errorEvent:P.CALL_ERROR,extractMetadata:(e,t,n)=>({toolName:Fc(e.schema)?.name||e.constructor.name,parameters:n[0],parametersCount:Fc(n[0])?Object.keys(Fc(n[0])||{}).length:0,context:n[1]}),extractResult:e=>({result:typeof Fc(e)?.data==`string`?Fc(e)?.data||``:JSON.stringify(Fc(e)?.data),success:Fc(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 Rc(e,t){let n=new Lc(t);return n.configureStandardMethods(),n.wrap(e)}function zc(e,t,n){return function(r){return Rc(r,{eventService:e,sourceType:t,sourceId:n})}}const Bc={safe:`plan`,moderate:`default`,full:`acceptEdits`},Vc=`inherit-allowlist`;function Hc(e){let t;for(let n=0;n<e.length;n+=1){let r=e[n];if(t===`'`){r===`'`&&(t=void 0);continue}if(r===`\\`){n+=1;continue}let i=e[n+1];if(r==="`"||r===`$`&&i===`(`)return!0;if(t===`"`){r===`"`&&(t=void 0);continue}if(r===`'`||r===`"`){t=r;continue}if(r===`;`||r===`|`||r===`
|
|
9
|
-
`||(r===`<`||r===`>`)&&i===`(`)return!0;if(r===`&`){let t=e[n-1];if(t!==`>`&&t!==`<`&&i!==`>`)return!0}}return!1}function
|
|
10
|
-
`||r===`&`&&Yc(t,n))return Wc(e),n}function Yc(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const Xc=/[.+^${}()|[\]\\]/g;function Zc(e){let t=e.replace(Xc,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function Qc(e,t,n){let r=Zc(e);return n===`deny`?r.test(t)||Uc(t).some(e=>r.test(e))?`match`:`no-match`:r.test(t)?e.includes(`*`)&&Hc(t)?`no-match`:`match`:`no-match`}function $c(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(Xc,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function el(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function tl(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 nl(e,t){let n=tl(e),r=tl(t);return el(n)&&!el(r)?`unevaluable`:$c(n).test(r)?`match`:`no-match`}const rl=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,il=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),al={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function ol(e){return e.replace(/\.$/,``).toLowerCase()}function sl(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function cl(e){let t=ol(e).replace(/\*\*(?:\.\*\*)+/g,`**`).split(`.`),n=[],r=`[^.]+(?:\\.[^.]+)*`;for(let[e,i]of t.entries()){let a=e===0,o=e===t.length-1;if(i===`**`){a&&o?n.push(r):o?n.push(`(?:\\.${r})?`):n.push(`${a?``:`\\.`}(?:${r}\\.)?`);continue}let s=!a&&t[e-1]===`**`,c=a||s?``:`\\.`;if(i===`*`)n.push(`${c}${r}`);else if(i.includes(`**`))return null;else if(i.includes(`*`))n.push(`${c}${i.replace(Xc,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=sl(i);if(e===null)return null;n.push(`${c}${e.replace(Xc,`\\$&`)}`)}}return RegExp(`^${n.join(``)}$`)}function ll(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function ul(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!il.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function dl(e,t){if(e.includes(`*`)){let n=cl(e);return n===null?`unevaluable`:n.test(t)?`match`:`no-match`}let n;try{n=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return ol(n)===t?`match`:`no-match`}function fl(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?al[n]:t.port)}function pl(e,t){let n=ll(t),r=ll(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:$c(r).test(n)?`match`:`no-match`}function ml(e,t){let n=rl.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=ul(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,ol(s.hostname));return l===`match`?fl(a,s,c)?o===void 0?`match`:pl(o,s.pathname):`no-match`:l}const hl={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`}},gl={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},_l=[`.git`,`.robota`,`.claude`,`.agents`],vl=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function yl(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function bl(e){let t=[];for(let n of yl(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function xl(e){let t=bl(e),n=t[t.length-1];if(n!==void 0&&vl.includes(n))return!0;for(let e=0;e<t.length;e+=1){let n=t[e];if(_l.includes(n)){if((n===`.robota`||n===`.claude`)&&t[e+1]===`worktrees`&&t[e+2]!==void 0){e+=2;continue}return!0}}return!1}function Sl(e){let t=[];for(let n of yl(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function Cl(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const wl=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function Tl(e,t){let n=Cl(e),r=wl.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=Sl(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=Sl(n);else{if(t.cwd===void 0)return!1;i=Sl(`${t.cwd}/${n}`)}if(yl(i).length<=1||t.homeDirectory!==void 0&&i===Sl(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=Sl(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const El=new Set([`rm`,`rmdir`]),Dl=new Map([[`sudo`,new Set([`-u`,`-g`,`-h`,`-p`,`-C`,`-D`,`-r`,`-t`,`-U`,`-T`])],[`nice`,new Set([`-n`])],[`env`,new Set([`-u`,`-C`,`-S`])],[`command`,new Set],[`builtin`,new Set],[`nohup`,new Set],[`time`,new Set]]);function Ol(e){let t=0,n;for(;t<e.length;){let r=e[t];if(/^[A-Za-z_]\w*=/.test(r)){t+=1;continue}let i=Dl.get(r);if(i!==void 0){n=i,t+=1;continue}if(n!==void 0&&r.startsWith(`-`)){t+=n.has(r)?2:1;continue}return t}return t}function kl(e,t){return Uc(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=Ol(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!El.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:Tl(e,t))})}const Al=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`]),Ml={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},Nl=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,Pl=[`--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 Fl(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return Pl.some(e=>e.startsWith(t))}function Il(e,t){if(Jl(t).some(e=>Nl.test(e.text)||Fl(e.text)))return!0;if(e===`find`)return Jl(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=Ml[e];return n!==void 0&&Jl(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const Ll=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),Rl=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),zl=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),Bl=new Set([`/dev/null`]),Vl=/[A-Za-z0-9_./:=@+,*?[\]~-]/,Hl=new Set([`$`,"`",`\\`,`!`]),Ul=new Set([`*`,`?`,`[`]);function Wl(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||Gl(e)}function Gl(e){let t=e.split(`/`),n=e=>/[*?[]/.test(e);if(t.slice(0,-1).some(n))return!0;let r=t[t.length-1];return n(r)&&/^[.?[]/.test(r)}function Kl(e){let t;for(let n of e){if(t===`'`){n===`'`&&(t=void 0);continue}if(n===`$`||n==="`"||n===`\\`)return!0;if(t===`"`){n===`"`&&(t=void 0);continue}if(n===`'`||n===`"`)t=n;else if(n===`(`||n===`)`||n===`{`||n===`}`)return!0}return!1}function ql(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!Bl.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||Wl(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:Hl.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(!Vl.test(l)){s=!0;break}Ul.has(l)&&(r=!0),n+=l,i=!0}return a!==void 0&&(s=!0),c(),o!==void 0&&(s=!0),{words:t,refused:s}}function Jl(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function Yl(e){return e.every(e=>!e.expands&&!jl.has(e.text))}function Xl(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>Rl.has(e.text));return t.every(e=>Rl.has(e.text)||zl.has(e.text))&&(n||t.length===e.length)}function Zl(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!Ll.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`?Xl(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function Ql(e){let[t,...n]=e;return t===void 0||t.expands||t.text.includes(`=`)||t.text.includes(`/`)||n.some(e=>/^[@=]/.test(e.text))||n.some(e=>e.expands)?!1:t.text===`echo`?!0:n.some(e=>Wl(e.text))||Il(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:Al.has(t.text)?!0:t.text===`find`?Yl(n):t.text===`git`&&Zl(n)}const $l=new Set([`echo`,`which`,`git`]);function eu(e,t){let n;for(let[r,...i]of e)if(!$l.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 tu(e,t={}){if(t.otherDirectory===!0||e.length>1e4||Kl(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=Uc(e);if(n.length===0)return!1;let r=n.map(ql);if(r.some(e=>e.refused||!Ql(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:eu(r.map(e=>e.words),t.resolveInWorkspace)}function nu(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 ru(e,t){Q.set(e,{...Q.get(e),...t})}function iu(){Q.clear()}function au(e){return Q.get(e)??{}}function ou(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=Zc(e);return n.some(e=>r.test(e))}function su(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 cu(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`:Zc(e.value).test(String(n))?`match`:`no-match`}function lu(e,t){return t.some(t=>{let n=nu(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&ou(n.toolName,e)})}function uu(e){return Q.get(e)?.argument?.key}function du(e,t){let n=uu(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function fu(e,t,n,r=`allow`){return n.some(n=>mu(e,t,n,r)===`match`)}function pu(e,t,n){return n.some(n=>mu(e,t,n,`deny`)===`unevaluable`)}function mu(e,t,n,r){let i=nu(n);if(!ou(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=su(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?cu(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=du(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return ml(i.argPattern,s);case`path`:return nl(i.argPattern,s);case`command`:return Qc(i.argPattern,s,r);case`text`:return Zc(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function hu(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`&&xl(a):!1}function gu(e,t,n,r){return fu(e,t,n,`deny`)||pu(e,t,n)||hu(e,t,r)}function _u(e,t,n={},r={}){return pu(e,t,n.deny??[])||gu(e,t,n.ask??[],r)}const vu=[`workingDirectory`,`cwd`];function yu(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`&&tu(i,{otherDirectory:vu.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function bu(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=yu(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return fu(e,t,o,`deny`)||i.ceiling!==void 0&&!fu(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0||Q.get(e)?.notInPeerTurn===!0&&i.peerTurn===!0?`deny`:pu(e,t,o)?n===`plan`?`deny`:`approve`:gu(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||fu(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?gl[n]:hl[n][c]}function xu(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 Su=/^[A-Za-z_]\w*:(?!\/\/)/;function Cu(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function wu(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}=nu(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!Cu(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`&&Su.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=su(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=au(r);if(!(o.parameters===void 0&&Su.test(i)&&su(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`&&ml(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path] that "${r}" is matched by`}}function Tu(e,t=`deny`){let n=[];for(let r of e){let e=wu(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function Eu(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=nu(n.trim());if(r===void 0||e.includes(`*`))continue;let i=au(e),a=su(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&Su.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=au(e).argument?.key??``;t.push({pattern:n,reason:`names "${e}"'s primary field "${o}", so it asks on every call; write ${e}(${r.slice(o.length+1)}) instead`})}return t}function Du(e){return(e??[]).map(e=>`${e}(*)`)}function Ou(e,t){let n=Du(t.allowedTools),r=Tu(n,`allow`);if(r.length>0){let e=r.map(({pattern:e,reason:t})=>`"${e}" ${t}`).join(`; `);throw Error(`Invalid preset allowedTools: ${e}.`)}return{allow:[...e.allow,...n],deny:[...new Set([...e.deny,...Du(t.deniedTools)])]}}const ku=[`Bash`,`Shell`,`BackgroundProcess`],Au=[`Agent`],ju=[...ku,...Au,`ExecuteCommand`,`Computer`],Mu=`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(`.`),Nu=[`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(` `)),Pu=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function Fu(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function Iu(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=Fu(e[0]);if(Mu.some(t=>n(t,r,e.length===1)))return!0;for(let i of Nu){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(`-`)||Pu.has(o[0]));)o=o.slice(1);return o.length===0||Iu(o,t)}return!1}function Lu(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return Iu(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function Ru(e){let{toolName:t,argPattern:n}=nu(e),r=e=>e.some(e=>ou(t,e));return r(Au)?!0:t.includes(`*`)?r(ju):ju.includes(t)||au(t).riskClass===`execute`?n===void 0||n.trim()===`*`||ku.includes(t)&&Lu(n):!1}function zu(e){return e.filter(e=>!Ru(e))}const Bu=1e6,Vu={"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}},Hu=[{pattern:/claude-opus/i,price:{inputPerMillion:15,outputPerMillion:75}},{pattern:/claude-sonnet/i,price:{inputPerMillion:3,outputPerMillion:15}},{pattern:/claude-haiku/i,price:{inputPerMillion:.8,outputPerMillion:4}},{pattern:/gpt-4o-mini/i,price:{inputPerMillion:.15,outputPerMillion:.6}},{pattern:/gpt-4/i,price:{inputPerMillion:2.5,outputPerMillion:10}},{pattern:/deepseek/i,price:{inputPerMillion:.14,outputPerMillion:.28}},{pattern:/gemini-2/i,price:{inputPerMillion:.1,outputPerMillion:.4}},{pattern:/gemini-1/i,price:{inputPerMillion:1.25,outputPerMillion:5}}];function Uu(e){let t=Object.hasOwn(Vu,e)?Vu[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of Hu)if(t.test(e))return n}function Wu(e,t,n){let r=Uu(e);if(r)return t/Bu*r.inputPerMillion+n/Bu*r.outputPerMillion}function Gu(e){let t=Uu(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function Ku(e,t){if(!e.matcher)return!0;if(!t)return!1;try{return new RegExp(e.matcher).test(t)}catch{return e.matcher===t}}function qu(e){if(e.tool_name)return e.tool_name;if(e.hook_event_name===`SubagentStart`||e.hook_event_name===`SubagentStop`)return e.agent_type??e.agent_id;if(e.hook_event_name===`SessionEnd`)return e.reason}async function Ju(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([import(`./command-executor-BsBTcghZ.js`),import(`./http-executor-CHy6UeBU.js`)]);return[new e,new t]}async function Yu(e,t,n,r,i){if(!e)return{blocked:!1,stdout:``};let a=new Set,o=[],s=()=>({...a.size>0&&{unknownHookTypes:[...a].sort()},...o.length>0&&{errors:[...o]}}),c=e[t];if(!c||c.length===0)return{blocked:!1,stdout:``};let l=r??await Ju(),u=new Map;for(let e of l)u.set(e.type,e);let d=[],f=qu(n),p=-1,m,h;for(let e of c){if(!Ku(e,f))continue;let r=e.env?{...n,env:{...n.env,...e.env}}:n;for(let n of e.hooks){let e=u.get(n.type);if(!e){a.add(n.type);continue}let c=n.type===`command`&&i!==void 0?await e.execute(n,r,i):await e.execute(n,r);if(c.outcome===`deny`)return{blocked:!0,reason:c.reason||`Blocked by hook`,stdout:d.join(`
|
|
11
|
-
`),...s()};if(c.outcome===`error`){o.push(c);continue}let l=
|
|
12
|
-
`),...l.permissionDecision===`deny`&&{permissionDecision:`deny`},...s()};if(l.permissionDecision!==void 0){let e=
|
|
13
|
-
`)};m!==void 0&&(g.permissionDecision=m),h!==void 0&&(g.updatedInput=h);let{unknownHookTypes:_,errors:v}=s();return _!==void 0&&(g.unknownHookTypes=_),v!==void 0&&(g.errors=v),g}var
|
|
8
|
+
`),n.beginAssistant();let b=Qo(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S,settleStreamingChunkHooks:C}=ms(a,n,i,p,l,u),w=Bo(s,o.defaultModel.model,i),ee=U(),T;try{T=await hs(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),w,ee,a.executionJournal?xo(m,e,a,o,t,c.toolExecutionService.getLoadedDeferredTools()):void 0)}finally{await C()}if(T===null)return!0;let{assistantResponse:E,assistantToolCalls:te}=Jo(T,i,a.conversationId,p,u);if(te.length>0&&(a.toolChoice??o.defaultModel?.toolChoice)===`none`)throw Error(`Provider returned tool calls despite toolChoice none; no tools were executed.`);await G(l,`afterProviderCall`,{messages:m,responseMessage:T},u),await G(l,`onMessageAdded`,{message:T},u);let ne=typeof E.content==`string`&&E.content.trim().length>0;if(te.length===0&&!ne)return u.warn(`[ROUND] Provider returned empty assistant response without tool calls`,{executionId:i,conversationId:a.conversationId,round:p}),n.discardPending(),!0;let re=es(E),ie=re.inputTokens??0;ie>0&&(e.cumulativeInputTokens=ie);for(let e of te)n.appendToolCall(e);let ae=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(ae,{round:p,usageObservationId:b,executionId:i,providerId:K(w,s),providerCallId:ee,modelId:q(w,s.aiProviderInfo.model),...re});let oe=n.getMessages().at(-1);return a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:E}),oe&&a.onExecutionEvent?.(`history_mutation`,{executionId:i,conversationId:a.conversationId,round:p,mutation:`append_message`,index:n.getMessages().length-1,message:oe}),e.runningAssistantCount++,e.lastTrackedAssistantMessage=E,te.length===0?(u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(E,i,p,r,v,y),!0):us(await Ts(te,n,r,i,p,v,y,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs,a.traceContext,a.executionJournal?{journal:a.executionJournal,parentCallId:ee}:void 0),e,u)?!0:(u.debug(`Round ${p} completed for agent ${a.conversationId}`),!1)}function Ds(e,t){let n=t.maxExecutionRounds??e.maxExecutionRounds;if(n===void 0)return 10;if(!Number.isInteger(n)||n<0)throw Error(`[EXECUTION] maxExecutionRounds must be a non-negative integer`);return n}function Os(e,t){return t===0||e<t}async function ks(e,t,n,r,i,a,s,c,l,u=!1){let d=Ds(i,r);for(;!u&&!s.forcedSummaryInstruction&&Os(s.currentRound,d)&&!(c?.aborted||(s.currentRound++,await Es(s,d,e,t,n,r,i,a,l))||c?.aborted););let f=e.getMessages(),p=f.length>0?f[f.length-1]:void 0,m=p?.role===`assistant`&&typeof p.content==`string`&&p.content.length>0&&(!(`toolCalls`in p)||p.toolCalls.length===0);if(!c?.aborted){if(r.allowToolOnlyCompletion===!0){let e=p?.role===`tool`;if(!m&&!e)throw new o(s.currentRound,{conversationId:t,executionId:n});return}m||await ls(e,a,i,n,s,t,r,l.logger,d,r.executionJournal?l.toolExecutionService.getLoadedDeferredTools():void 0)}}async function As(e,t,n,r,i,a,o,s,c,l,u,d){let f={...bo(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(M.COMPLETE,{result:{success:!0,data:f.response.substring(0,100)+`...`},metadata:{method:`execute`,success:!0,duration:f.duration,tokensUsed:f.tokensUsed,toolsExecuted:f.toolsExecuted}},a,n),f}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 R(`EXECUTION_RECOVERY_INVALID`,e)}function X(e){return typeof e==`string`&&e.length>0}function js(e,t,n,r=!0){try{return Ms(structuredClone(e),t,n,r)}catch(e){if(e instanceof R)throw e;return Y(`Execution journal is not a valid recoverable record prefix`)}}function Ms(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`),bs(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`),bs(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;(!i.intent&&t.metadata?.errorCode!==`argument_decode_error`||t.executionId!==r.id||t.toolName!==r.function.name||typeof t.success!=`boolean`||t.success&&(!i.effectStarted||t.result===void 0)||!t.success&&!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 R(`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 Ns(e){throw new R(`EXECUTION_RECOVERY_CONFLICT`,e)}function Ps(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,...es(e.response),executionId:t.executionId,providerCallId:t.callId,round:e.checkpoint.round}}}function Fs(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 Is(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))&&Ns(`Current history differs from the saved runtime checkpoint`);let a=e.slice(i.length);if(!a.length)return;Fs(a[0],Ps(t,n),n.callId,n.executionId)||Ns(`Current assistant does not match the saved response`);let o=t.response.toolCalls??[];a.length>o.length+1&&Ns(`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||Ns(`History contains a tool result without durable settlement`),n}),l=new Nr;for(let e of i)l.addMessage(e);l.addMessage(a[0]),vs(s,{results:c,errors:[]},l,t.checkpoint.round,r.logger,{contextLimit:t.checkpoint.contextLimit,cumulativeInputTokens:Ls(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)&&Ns(`Existing tool result conflicts with the durable result`)}}function Ls(e){let t=es(e.response).inputTokens??0;return t>0?t:e.checkpoint.cumulativeInputTokens}async function Rs(e,t,n,r,i){let a=J(e.getMessages()),o=()=>{(a!==J(e.getMessages())||e.hasPendingAssistant())&&Ns(`History changed during execution recovery`)};o();let s=i?.records??await n.journal.read(n.executionId),c=i?.batch??js(s,n.executionId,n.callId);n.signal?.throwIfAborted(),o();let l=structuredClone(e.getMessages());Is(l,c,n,r);let u=await Cs(s,n);u.length!==s.length&&(c=js(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 Nr;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(Ps(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:Ls(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=us(await Ts(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())&&Ns(`History changed while announcing execution recovery`);if(n.signal?.aborted)throw nn(`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 Rs(e,t,n,r);return{executionId:i,callId:a,messages:o}}function Z(e){throw new R(`EXECUTION_RECOVERY_INVALID`,e)}function Bs(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 Vs(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 R(`EXECUTION_RECOVERY_REQUIRED`,`The latest model invocation has no durable response; reconcile it before resuming`);let l=js(s,n.executionId,c.callId,!1),u=Bs(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 R(`EXECUTION_RECOVERY_CONFLICT`,`History changed while reading the execution journal`);let m=await Rs(e,t,{...n,callId:c.callId},a,{batch:l,records:s}),h=Io(e.getMessages(),f,new Date(u.startedAt),n.executionId,t,{...u.options,signal:n.signal,executionJournal:n.journal,onTextDelta:n.onTextDelta,onExecutionEvent:n.onExecutionEvent,traceContext:n.traceContext});a.eventEmitter.prepareOwnerPathBases(t);try{if(await ks(e,t,n.executionId,h,f,p,m.state,n.signal,a,m.stop||u.kind===`summary`),n.signal?.aborted)throw nn(`Execution continuation interrupted`,n.signal.reason);return bo(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*Hs(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 Us(e,t,n){return{executionId:e,...t===void 0?{}:{driverId:t},...n===void 0?{}:{turnSource:n}}}var Ws=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new ao(t),this.aiProviders=e,this.tools=t,this.conversationHistory=n,this.plugins=[],this.logger=k(`ExecutionService`),!r)throw Error(`[EXECUTION] EventService is required`);this.eventEmitter=new go(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 Vs(this.conversationHistory.getConversationStore(e),e,t,n,e=>Ao(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=Po(),a=new Date,o=Fo(r,`execute`),s=Io(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=Ao(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=Mo(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,Us(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);jo(c);for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await ks(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),As(e,l,i,a,d,o,u,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){if(z(e))throw e;return tn(e,r?.signal)?{...bo(l,i,a,d.toolsExecuted,{turnMessageId:u,interrupted:!0}),interrupted:!0}:(await No(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*Hs(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 Gs(e){let t=new Na;if(e.aiProviders)for(let n of e.aiProviders)t.addProvider(n.name,n);return e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),t}async function Ks(e){let{config:t,aiProviders:n,tools:r,agentFactory:i,conversationHistory:a,moduleRegistry:o,eventEmitter:s,eventService:c,logger:l}=e;if(l.debug(`Starting Robota initialization with independent managers`),await Promise.all([n.initialize(),r.initialize(),i.initialize()]),t.modules){for(let e of t.modules)await o.registerModule(e,{autoInitialize:!0,validateDependencies:!0});l.debug(`Modules registered and initialized`,{moduleCount:t.modules.length,moduleNames:t.modules.map(e=>e.name)})}if(t.tools)for(let e of t.tools)e instanceof $t&&c&&e.setEventService(c),r.addTool(e.schema,async(t,n)=>{if(!n)throw Error(`[ROBOTA] Missing ToolExecutionContext for tool execution`);let r=await ki(e,t,n);return Oi(e.schema.name,r)}),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new Ia(new Fa({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new Pa));let d=new Ws(n,r,a,c,t.executionContext,u);if(t.ask&&d.setAskHandler(t.ask),t.plugins)for(let e of t.plugins)d.registerPlugin(e),e.subscribeToModuleEvents&&(await e.subscribeToModuleEvents(s),l.debug(`Plugin subscribed to module events`,{pluginName:e.name}));return l.debug(`Robota initialization completed successfully with independent managers`),d}async function qs(e){try{let t=await Ks(e.ctx);e.setExecutionService(t),e.setFullyInitialized(!0)}catch(t){throw e.ctx.logger.error(`Robota initialization failed`,{error:t instanceof Error?t.message:String(t)}),t}}function Js(e){let t=e.isFullyInitialized?e.aiProviders.getProviderNames():[],n=e.isFullyInitialized?e.aiProviders.getCurrentProvider():null,r=n?n.provider:null,i=e.isFullyInitialized?e.tools.getTools().map(e=>e.name):[],a=e.getPluginNames(),o=e.getModuleNames(),s=e.getHistory(),c=Date.now()-e.startTime,l={user:0,assistant:0,system:0,tool:0};for(let e of s)e.role in l&&l[e.role]++;return{name:e.name,version:e.version,conversationId:e.conversationId,providers:t,currentProvider:r,tools:i,plugins:a,modules:o,historyLength:s.length,historyStats:{userMessages:l.user,assistantMessages:l.assistant,systemMessages:l.system,toolMessages:l.tool},uptime:c}}async function Ys(e){e.logger.debug(`Destroying Robota instance`,{name:e.name});let t=[],n=async(n,r)=>{try{await r(),e.logger.debug(n)}catch(r){let i=r instanceof Error?r:Error(String(r));t.push(i),e.logger.error(`Error during Robota destruction step`,{step:n,error:i.message})}};if(e.isFullyInitialized&&e.moduleRegistry&&await n(`All modules disposed`,()=>e.moduleRegistry.disposeAllModules()),e.executionService){let t=e.executionService.getPlugins();for(let e of t)await n(`Plugin disposed: ${e.name}`,()=>e.dispose());e.logger.debug(`ExecutionService plugins cleaned up`)}return e.moduleRegistry&&await n(`ModuleRegistry cleared`,()=>e.moduleRegistry.clearAllModules()),e.eventEmitter&&await n(`EventEmitter disposed`,()=>e.eventEmitter.dispose()),await n(`Tools disposed`,()=>e.tools.dispose()),await n(`AIProviders disposed`,()=>e.aiProviders.dispose()),e.resetState(),t.length===0?e.logger.info(`Robota instance destroyed successfully`,{name:e.name}):e.logger.warn(`Robota instance destroyed with cleanup failures`,{name:e.name,failureCount:t.length}),{errors:t}}var Xs=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(),Zs(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 Zs(e,t){let n=e.reason;return tn(n)&&n.name===`AbortError`?n:nn(t?`Run aborted while queued behind another run on this instance`:`Run aborted before it started`,n)}function Qs(e){return{maxConcurrentAgents:e.maxConcurrentAgents||100,defaultSystemMessage:e.defaultSystemMessage??``,strictValidation:e.strictValidation??!0,idFactory:e.idFactory??ec,...e.defaultModel!==void 0&&{defaultModel:e.defaultModel},...e.defaultProvider!==void 0&&{defaultProvider:e.defaultProvider}}}function $s(e,t){if(!e.aiProviders||e.aiProviders.length===0)throw new f(`At least one AI provider must be specified in aiProviders array`);let n=e.defaultModel,r=n?.model??t.defaultModel;if(!r)throw new f(`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 f(`No provider specified: set config.defaultModel.provider, an aiProviders entry, or the AgentFactory defaultProvider option`);return{id:e.id||ec(),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 ec(){return`agent_${Date.now()}_${Math.random().toString(36).substring(2,8)}`}function tc(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var nc=class{templates=new Map;logger;constructor(){this.logger=k(`AgentTemplates`),this.logger.info(`AgentTemplates initialized`)}registerTemplate(e){if(!e.id)throw Error(`Template must have an ID`);this.templates.has(e.id)&&this.logger.warn(`Template "${e.id}" is already registered, overriding`),this.templates.set(e.id,e),this.logger.info(`Template "${e.id}" registered successfully`,{templateId:e.id,category:e.category,tags:e.tags})}unregisterTemplate(e){let t=this.templates.delete(e);return t?this.logger.info(`Template "${e}" unregistered`):this.logger.warn(`Attempted to unregister non-existent template "${e}"`),t}getTemplates(){return Array.from(this.templates.values())}getTemplate(e){return this.templates.get(e)}findTemplates(e){return this.getTemplates().filter(t=>!(e.category&&t.category!==e.category||e.tags&&e.tags.length>0&&!e.tags.some(e=>t.tags?.includes(e))||e.provider&&t.config.defaultModel?.provider!==e.provider||e.model&&t.config.defaultModel?.model!==e.model))}applyTemplate(e,t={}){let n=[],r=!1,i={...e.config},a={...i,...t},o=e=>{e in t&&i[e]!==t[e]&&(r=!0,i[e]!==void 0&&n.push(`Override: ${e} changed from "${String(i[e])}" to "${String(t[e])}"`))};t.name!==void 0&&o(`name`),t.systemMessage!==void 0&&o(`systemMessage`);let s=a;return this.logger.debug(`Template applied`,{templateId:e.id,overridesCount:Object.keys(t).length,warningsCount:n.length,modified:r}),{config:s,template:e,warnings:n,modified:r}}hasTemplate(e){return this.templates.has(e)}getTemplateCount(){return this.templates.size}clearAll(){this.templates.clear(),this.logger.info(`All templates cleared`)}getStats(){let e=this.getTemplates(),t=[...new Set(e.map(e=>e.category).filter(e=>typeof e==`string`&&e.length>0))],n=[...new Set(e.flatMap(e=>e.tags||[]))],r=[...new Set(e.map(e=>e.config.defaultModel?.provider).filter(e=>typeof e==`string`&&e.length>0))],i=[...new Set(e.map(e=>e.config.defaultModel?.model).filter(e=>typeof e==`string`&&e.length>0))];return{totalTemplates:e.length,categories:t,tags:n,providers:r,models:i}}};function rc(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 ic(e){return e instanceof Error&&`failedStep`in e&&`rollbackErrors`in e}async function ac(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 oc(e,n.name,r)}t.push(n)}}function oc(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var sc=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new nc,this.logger=k(`AgentFactory`),this.options=Qs(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=$s(t,this.options);let o=i;if(this.options.strictValidation){let e=on(i);if(!e.isValid)throw new r(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let s;if(await ac([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(o)},{name:`construct`,run:()=>{s=new e(o)}},{name:`initialize`,run:()=>s?rc(s)?.initialize?.():void 0,undo:()=>s?rc(s)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!s)throw new f(`Agent was not constructed`);this.activeAgents.set(a,s),tc(this.creationStats,n)},undo:()=>{this.activeAgents.delete(a),this.creationStats.activeCount--,this.creationStats.totalCreated--,n?this.creationStats.fromTemplates--:this.creationStats.customConfigured--}},{name:`afterCreate`,run:()=>s?this.lifecycleEvents.afterCreate?.(s,o):void 0}]),this.pendingAgents.delete(a),!s)throw new f(`Agent was not constructed`);return this.logger.info(`Agent created successfully`,{agentId:a,model:i.defaultModel.model,provider:i.defaultModel.provider}),s}catch(e){this.pendingAgents.delete(a);let n=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&i&&await this.lifecycleEvents.onCreateError(n,i),this.logger.error(`Failed to create agent`,{error:n.message,model:t.defaultModel?.model,provider:t.defaultModel?.provider,hasTools:!!t.tools?.length}),n}}admit(){if(this.activeAgents.size+this.pendingAgents.size>=this.options.maxConcurrentAgents)throw new f(`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 f(`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 f(`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 rc(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 on(e)}};function cc(e,t,n){if(!e.name||e.name.trim()===``)throw new f(`Module name is required`);if(!e.version||e.version.trim()===``)throw new f(`Module version is required`);let r=e.getModuleType(),i=t.validateTypeDescriptor(r);if(!i.valid)throw new f(`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 lc(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 f(`Module '${e.name}' depends on unregistered type '${n}'`,{moduleName:e.name,dependencyType:n});let a=new Set;for(let e of n.values())a.add(e.getModuleType().type);let o=[];for(let e of i.dependencies)a.has(e)||o.push(e);o.length>0&&r.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:o})}function uc(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 dc(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 fc(){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 pc(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 mc(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 hc(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 gc(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 _c=class{registeredTypes=new Map;logger;constructor(){this.logger=k(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let t=this.validateTypeDescriptor(e);if(!t.valid)throw new f(`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 f(`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 pc(e,e=>this.getType(e))}resolveDependencies(e){return mc(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return hc(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 fc())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 gc(this.registeredTypes)}};const vc={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var yc=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 _c,this.logger=k(`ModuleRegistry`)}async registerModule(e,t={}){if(this.isDisposing)throw new f(`Cannot register modules during disposal`);if(cc(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new f(`Module with name '${e.name}' is already registered`,{moduleName:e.name});t.validateDependencies!==!1&&await lc(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(vc.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=uc(e,this.modules);if(n.length>0)throw new f(`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(vc.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,t){let n=this.modules.get(e);if(!n)throw new f(`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 f(`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 f(`Module '${e}' not found`);if(!n.isInitialized())throw new f(`Module '${e}' is not initialized`);if(!n.isEnabled())throw new f(`Module '${e}' is disabled`);let r=this.moduleStats.get(e),i=Date.now();try{if(!n.execute)throw new f(`Module '${e}' does not support execute()`);let a=await n.execute(t),o=Date.now()-i;r.totalExecutions++,r.successfulExecutions++,r.totalExecutionTime+=o,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date;let s=this.moduleStatuses.get(e);return s&&(s.lastActivity=new Date),a}catch(e){let t=Date.now()-i;throw r.totalExecutions++,r.failedExecutions++,r.totalExecutionTime+=t,r.averageExecutionTime=r.totalExecutionTime/r.totalExecutions,r.lastExecutionTime=new Date,e}}getModule(e){return this.modules.get(e)}getModulesByType(e){return Array.from(this.modules.values()).filter(t=>t.getModuleType().type===e)}getAllModules(){return Array.from(this.modules.values())}getModuleNames(){return Array.from(this.modules.keys())}hasModule(e){return this.modules.has(e)}getModuleStatus(e){return this.moduleStatuses.get(e)}getAllModuleStatuses(){return Array.from(this.moduleStatuses.values())}getModuleStats(e){return this.moduleStats.get(e)}getAllModuleStats(){let e={};for(let[t,n]of this.moduleStats.entries())e[t]={...n};return e}async disposeAllModules(){this.isDisposing=!0;let e=[...this.initializationOrder].reverse();for(let t of e){let e=this.modules.get(t);if(e&&e.isInitialized())try{e.dispose&&await e.dispose();let n=this.moduleStatuses.get(t);n&&(n.initialized=!1)}catch(e){this.logger.error(`Failed to dispose module`,{name:t,error:e instanceof Error?e.message:String(e)})}}this.initializationOrder=[],this.isDisposing=!1}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=!1}getRegistryStats(){return dc(this.modules,this.moduleStats)}},bc=class extends Di{version=`1.0.0`;aiProviders;tools;agentFactory;conversationHistory;moduleRegistry;eventEmitter;executionService;eventService;agentEventService;conversationId;logger;initializationPromise;destroyed=!1;isFullyInitialized=!1;startTime;configVersion=1;configUpdatedAt=Date.now();configManager;constructor(e){super(),this.config=e,this.conversationId=oa(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=k(`Robota`,t?{level:t}:{}),this.startTime=Date.now(),Ai(e),this.aiProviders=Gs(e),this.tools=sa(()=>this.config),this.agentFactory=new sc,this.conversationHistory=new Pr,this.eventEmitter=_a(),this.moduleRegistry=new yc(this.eventEmitter),this.eventService=e.eventService||si,this.agentEventService=W(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:va(this.conversationId,this.config.executionContext)});let n=ua({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,ha(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=[...va(this.conversationId,this.config.executionContext),{type:`tool`,id:n.executionId??e}];return this.executionService.invokeRuntimeTool(e,t,{...n,baseEventService:this.eventService,eventService:W(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=ir(t.output);return await wa(this.executionDeps(),e,t,n)}return await ba(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=ir(t.output);return yield*Ta(this.executionDeps(),e,t,n)}return yield*xa(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new Xs;executionDeps(){return{conversationId:this.conversationId,config:this.config,logger:this.logger,getHistory:()=>this.getHistory(),getExecutionService:()=>this.executionService,emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)}}getHistory(){return Da(this.conversationHistory,this.conversationId)}getFullHistory(){return Oa(this.conversationHistory,this.conversationId)}addHistoryEntry(e){ka(this.conversationHistory,this.conversationId,e)}clearHistory(){Aa(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){ja(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){Ma(this.conversationHistory,this.conversationId,e)}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e)}getModel(){return this.configManager.getModel()}updateSystemPrompt(e){this.configManager.setSystemMessage(e),this.conversationHistory.getConversationStore(this.conversationId).setSystemPrompt(e)}getSystemPrompt(){return this.configManager.getSystemMessage()}registerTool(e){this.configManager.registerTool(e,this.tools)}unregisterTool(e){this.tools.removeTool(e)}getOfferedToolSchemas(){return this.tools.getOfferedTools()}getConfig(){return{...this.config}}swapDefaultProvider(e,t){this.aiProviders.addProvider(e.name,e),this.configManager.setModel({provider:e.name,model:t})}getStats(){return Js({name:this.name,version:this.version,conversationId:this.conversationId,startTime:this.startTime,isFullyInitialized:this.isFullyInitialized,aiProviders:this.aiProviders,tools:this.tools,getPluginNames:()=>this.getPluginNames(),getModuleNames:()=>this.getModuleNames(),getHistory:()=>this.getHistory()})}async destroy(){return this.destroyed?{errors:[]}:(this.destroyed=!0,await this.runQueue.drained,Ys({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 qs({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){ga(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const xc=1e4,Sc=25e3,Cc=5e5,wc=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,Tc=Symbol.for(`@robota-sdk/tool-result-admitted`);var Ec=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function Dc(e){return Object.getOwnPropertyDescriptor(e,Tc)?.value===!0}function Oc(e){return Object.defineProperty({...e},Tc,{value:!0})}function kc(e){if(e.success)return typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;let t=e.data===void 0?``:typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;return`${e.error??``}${t}`}function Ac(e){return Number.isSafeInteger(e)&&e>0}function jc(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!Ac(n)||!Ac(r)||!Ac(i)||n>=r||r>i||i>5e5)throw new Ec(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!Ac(t))throw new Ec(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function Mc(e,t,n={},r){let{warningChars:i,hardChars:a}=jc(n,r),o=kc(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new Ec(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new Ec(`spill-write-failed`)}if(!wc.test(e)||e.length>a)throw new Ec(`invalid-reference`);return Oc(t.success?{success:!0,data:e}:{success:!1,error:`Tool failure details: ${e}`})}return Oc(t)}var Nc=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 Pc={STARTED:`started`,STEP_STARTED:`step_started`,STEP_COMPLETED:`step_completed`,COMPLETED:`completed`,FAILED:`failed`},Fc=`orchestration`;function Ic(e){if(!(!e||typeof e!=`object`||Array.isArray(e)||e instanceof Date))return e}function Lc(e){return typeof e==`string`?e.length:0}var Rc=class{config;methodConfigs=new Map;constructor(e){this.config=e}configureMethod(e,t){return this.methodConfigs.set(e,t),this}configureStandardMethods(){return this.config.sourceType===`agent`&&(this.configureMethod(`run`,{startEvent:j.EXECUTION_START,completeEvent:j.EXECUTION_COMPLETE,errorEvent:j.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Lc(n[0]),conversationId:e.conversationId,options:Ic(n[1])||{}}),extractResult:e=>({response:e})}),this.configureMethod(`runStream`,{startEvent:j.EXECUTION_START,completeEvent:j.EXECUTION_COMPLETE,errorEvent:j.EXECUTION_ERROR,extractMetadata:(e,t,n)=>({inputLength:Lc(n[0]),conversationId:e.conversationId,streaming:!0,options:Ic(n[1])||{}})})),this.config.sourceType===`tool`&&this.configureMethod(`execute`,{startEvent:N.CALL_START,completeEvent:N.CALL_COMPLETE,errorEvent:N.CALL_ERROR,extractMetadata:(e,t,n)=>({toolName:Ic(e.schema)?.name||e.constructor.name,parameters:n[0],parametersCount:Ic(n[0])?Object.keys(Ic(n[0])||{}).length:0,context:n[1]}),extractResult:e=>({result:typeof Ic(e)?.data==`string`?Ic(e)?.data||``:JSON.stringify(Ic(e)?.data),success:Ic(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 zc(e,t){let n=new Rc(t);return n.configureStandardMethods(),n.wrap(e)}function Bc(e,t,n){return function(r){return zc(r,{eventService:e,sourceType:t,sourceId:n})}}const Vc={safe:`plan`,moderate:`default`,full:`acceptEdits`},Hc=`inherit-allowlist`;function Uc(e){let t;for(let n=0;n<e.length;n+=1){let r=e[n];if(t===`'`){r===`'`&&(t=void 0);continue}if(r===`\\`){n+=1;continue}let i=e[n+1];if(r==="`"||r===`$`&&i===`(`)return!0;if(t===`"`){r===`"`&&(t=void 0);continue}if(r===`'`||r===`"`){t=r;continue}if(r===`;`||r===`|`||r===`
|
|
9
|
+
`||(r===`<`||r===`>`)&&i===`(`)return!0;if(r===`&`){let t=e[n-1];if(t!==`>`&&t!==`<`&&i!==`>`)return!0}}return!1}function Wc(e){let t={segments:[],current:``,quote:void 0,substitutionDepth:0};for(let n=0;n<e.length;n+=1){let r=Kc(t,e,n);if(r!==void 0){n=r;continue}let i=qc(t,e,n);if(i!==void 0){n=i;continue}if(Jc(t,e[n]))continue;let a=Yc(t,e,n);if(a!==void 0){n=a;continue}t.current+=e[n]}return Gc(t),t.segments}function Gc(e){let t=e.current.trim();t!==``&&e.segments.push(t),e.current=``}function Kc(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 qc(e,t,n){let r=t[n];if(r==="`")return Gc(e),n;if(r===`$`&&t[n+1]===`(`)return Gc(e),e.substitutionDepth+=1,n+1}function Jc(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 Yc(e,t,n){let r=t[n];if((r===`<`||r===`>`)&&t[n+1]===`(`)return Gc(e),e.substitutionDepth+=1,n+1;if(r===`)`&&e.substitutionDepth>0)return Gc(e),--e.substitutionDepth,n;if(r===`;`||r===`|`||r===`
|
|
10
|
+
`||r===`&`&&Xc(t,n))return Gc(e),n}function Xc(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const Zc=/[.+^${}()|[\]\\]/g;function Qc(e){let t=e.replace(Zc,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function $c(e,t,n){let r=Qc(e);return n===`deny`?r.test(t)||Wc(t).some(e=>r.test(e))?`match`:`no-match`:r.test(t)?e.includes(`*`)&&Uc(t)?`no-match`:`match`:`no-match`}function el(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(Zc,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function tl(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function nl(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 rl(e,t){let n=nl(e),r=nl(t);return tl(n)&&!tl(r)?`unevaluable`:el(n).test(r)?`match`:`no-match`}const il=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,al=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),ol={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 ll(e){let t=sl(e).replace(/\*\*(?:\.\*\*)+/g,`**`).split(`.`),n=[],r=`[^.]+(?:\\.[^.]+)*`;for(let[e,i]of t.entries()){let a=e===0,o=e===t.length-1;if(i===`**`){a&&o?n.push(r):o?n.push(`(?:\\.${r})?`):n.push(`${a?``:`\\.`}(?:${r}\\.)?`);continue}let s=!a&&t[e-1]===`**`,c=a||s?``:`\\.`;if(i===`*`)n.push(`${c}${r}`);else if(i.includes(`**`))return null;else if(i.includes(`*`))n.push(`${c}${i.replace(Zc,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=cl(i);if(e===null)return null;n.push(`${c}${e.replace(Zc,`\\$&`)}`)}}return RegExp(`^${n.join(``)}$`)}function ul(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function dl(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!al.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function fl(e,t){if(e.includes(`*`)){let n=ll(e);return n===null?`unevaluable`:n.test(t)?`match`:`no-match`}let n;try{n=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return sl(n)===t?`match`:`no-match`}function pl(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?ol[n]:t.port)}function ml(e,t){let n=ul(t),r=ul(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:el(r).test(n)?`match`:`no-match`}function hl(e,t){let n=il.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=dl(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=fl(i,sl(s.hostname));return l===`match`?pl(a,s,c)?o===void 0?`match`:ml(o,s.pathname):`no-match`:l}const gl={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`}},_l={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},vl=[`.git`,`.robota`,`.claude`,`.agents`],yl=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function bl(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function xl(e){let t=[];for(let n of bl(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function Sl(e){let t=xl(e),n=t[t.length-1];if(n!==void 0&&yl.includes(n))return!0;for(let e=0;e<t.length;e+=1){let n=t[e];if(vl.includes(n)){if((n===`.robota`||n===`.claude`)&&t[e+1]===`worktrees`&&t[e+2]!==void 0){e+=2;continue}return!0}}return!1}function Cl(e){let t=[];for(let n of bl(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function wl(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const Tl=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function El(e,t){let n=wl(e),r=Tl.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=Cl(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=Cl(n);else{if(t.cwd===void 0)return!1;i=Cl(`${t.cwd}/${n}`)}if(bl(i).length<=1||t.homeDirectory!==void 0&&i===Cl(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=Cl(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const Dl=new Set([`rm`,`rmdir`]),Ol=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 kl(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=Ol.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 Al(e,t){return Wc(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=kl(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!Dl.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:El(e,t))})}const jl=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),Ml=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),Nl={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},Pl=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,Fl=[`--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 Il(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return Fl.some(e=>e.startsWith(t))}function Ll(e,t){if(Yl(t).some(e=>Pl.test(e.text)||Il(e.text)))return!0;if(e===`find`)return Yl(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=Nl[e];return n!==void 0&&Yl(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const Rl=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),zl=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),Bl=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),Vl=new Set([`/dev/null`]),Hl=/[A-Za-z0-9_./:=@+,*?[\]~-]/,Ul=new Set([`$`,"`",`\\`,`!`]),Wl=new Set([`*`,`?`,`[`]);function Gl(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||Kl(e)}function Kl(e){let t=e.split(`/`),n=e=>/[*?[]/.test(e);if(t.slice(0,-1).some(n))return!0;let r=t[t.length-1];return n(r)&&/^[.?[]/.test(r)}function ql(e){let t;for(let n of e){if(t===`'`){n===`'`&&(t=void 0);continue}if(n===`$`||n==="`"||n===`\\`)return!0;if(t===`"`){n===`"`&&(t=void 0);continue}if(n===`'`||n===`"`)t=n;else if(n===`(`||n===`)`||n===`{`||n===`}`)return!0}return!1}function Jl(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!Vl.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||Gl(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:Ul.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(!Hl.test(l)){s=!0;break}Wl.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 Yl(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function Xl(e){return e.every(e=>!e.expands&&!Ml.has(e.text))}function Zl(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>zl.has(e.text));return t.every(e=>zl.has(e.text)||Bl.has(e.text))&&(n||t.length===e.length)}function Ql(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!Rl.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`?Zl(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function $l(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=>Gl(e.text))||Ll(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:jl.has(t.text)?!0:t.text===`find`?Xl(n):t.text===`git`&&Ql(n)}const eu=new Set([`echo`,`which`,`git`]);function tu(e,t){let n;for(let[r,...i]of e)if(!eu.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 nu(e,t={}){if(t.otherDirectory===!0||e.length>1e4||ql(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=Wc(e);if(n.length===0)return!1;let r=n.map(Jl);if(r.some(e=>e.refused||!$l(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:tu(r.map(e=>e.words),t.resolveInWorkspace)}function ru(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 iu(e,t){Q.set(e,{...Q.get(e),...t})}function au(){Q.clear()}function ou(e){return Q.get(e)??{}}function su(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=Qc(e);return n.some(e=>r.test(e))}function cu(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 lu(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`:Qc(e.value).test(String(n))?`match`:`no-match`}function uu(e,t){return t.some(t=>{let n=ru(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&su(n.toolName,e)})}function du(e){return Q.get(e)?.argument?.key}function fu(e,t){let n=du(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function pu(e,t,n,r=`allow`){return n.some(n=>hu(e,t,n,r)===`match`)}function mu(e,t,n){return n.some(n=>hu(e,t,n,`deny`)===`unevaluable`)}function hu(e,t,n,r){let i=ru(n);if(!su(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=cu(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?lu(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=fu(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return hl(i.argPattern,s);case`path`:return rl(i.argPattern,s);case`command`:return $c(i.argPattern,s,r);case`text`:return Qc(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function gu(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`?Al(a,n):i.kind===`path`&&r?.riskClass===`modify`&&Sl(a):!1}function _u(e,t,n,r){return pu(e,t,n,`deny`)||mu(e,t,n)||gu(e,t,r)}function vu(e,t,n={},r={}){return mu(e,t,n.deny??[])||_u(e,t,n.ask??[],r)}const yu=[`workingDirectory`,`cwd`];function bu(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`&&nu(i,{otherDirectory:yu.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function xu(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=bu(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return pu(e,t,o,`deny`)||i.ceiling!==void 0&&!pu(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0||Q.get(e)?.notInPeerTurn===!0&&i.peerTurn===!0?`deny`:mu(e,t,o)?n===`plan`?`deny`:`approve`:_u(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||pu(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?_l[n]:gl[n][c]}function Su(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 Cu=/^[A-Za-z_]\w*:(?!\/\/)/;function wu(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function Tu(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}=ru(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!wu(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`&&Cu.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=cu(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=ou(r);if(!(o.parameters===void 0&&Cu.test(i)&&cu(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`&&hl(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path] that "${r}" is matched by`}}function Eu(e,t=`deny`){let n=[];for(let r of e){let e=Tu(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function Du(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=ru(n.trim());if(r===void 0||e.includes(`*`))continue;let i=ou(e),a=cu(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&Cu.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=ou(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 Ou(e){return(e??[]).map(e=>`${e}(*)`)}function ku(e,t){let n=Ou(t.allowedTools),r=Eu(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,...Ou(t.deniedTools)])]}}const Au=[`Bash`,`Shell`,`BackgroundProcess`],ju=[`Agent`],Mu=[...Au,...ju,`ExecuteCommand`,`Computer`],Nu=`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(`.`),Pu=[`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(` `)),Fu=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function Iu(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function Lu(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=Iu(e[0]);if(Nu.some(t=>n(t,r,e.length===1)))return!0;for(let i of Pu){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(`-`)||Fu.has(o[0]));)o=o.slice(1);return o.length===0||Lu(o,t)}return!1}function Ru(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return Lu(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function zu(e){let{toolName:t,argPattern:n}=ru(e),r=e=>e.some(e=>su(t,e));return r(ju)?!0:t.includes(`*`)?r(Mu):Mu.includes(t)||ou(t).riskClass===`execute`?n===void 0||n.trim()===`*`||Au.includes(t)&&Ru(n):!1}function Bu(e){return e.filter(e=>!zu(e))}const Vu=1e6,Hu={"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}},Uu=[{pattern:/claude-opus/i,price:{inputPerMillion:15,outputPerMillion:75}},{pattern:/claude-sonnet/i,price:{inputPerMillion:3,outputPerMillion:15}},{pattern:/claude-haiku/i,price:{inputPerMillion:.8,outputPerMillion:4}},{pattern:/gpt-4o-mini/i,price:{inputPerMillion:.15,outputPerMillion:.6}},{pattern:/gpt-4/i,price:{inputPerMillion:2.5,outputPerMillion:10}},{pattern:/deepseek/i,price:{inputPerMillion:.14,outputPerMillion:.28}},{pattern:/gemini-2/i,price:{inputPerMillion:.1,outputPerMillion:.4}},{pattern:/gemini-1/i,price:{inputPerMillion:1.25,outputPerMillion:5}}];function Wu(e){let t=Object.hasOwn(Hu,e)?Hu[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of Uu)if(t.test(e))return n}function Gu(e,t,n){let r=Wu(e);if(r)return t/Vu*r.inputPerMillion+n/Vu*r.outputPerMillion}function Ku(e){let t=Wu(e);if(t)return(t.inputPerMillion+t.outputPerMillion)/2/1e3}function qu(e,t){if(!e.matcher)return!0;if(!t)return!1;try{return new RegExp(e.matcher).test(t)}catch{return e.matcher===t}}function Ju(e){if(e.tool_name)return e.tool_name;if(e.hook_event_name===`SubagentStart`||e.hook_event_name===`SubagentStop`)return e.agent_type??e.agent_id;if(e.hook_event_name===`SessionEnd`)return e.reason}async function Yu(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([import(`./command-executor-C0XXfBnt.js`),import(`./http-executor-B4YgCJg7.js`)]);return[new e,new t]}async function Xu(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 Yu(),u=new Map;for(let e of l)u.set(e.type,e);let d=[],f=Ju(n),p=-1,m,h;for(let e of c){if(!qu(e,f))continue;let r=e.env?{...n,env:{...n.env,...e.env}}:n;for(let n of e.hooks){let e=u.get(n.type);if(!e){a.add(n.type);continue}let c=n.type===`command`&&i!==void 0?await e.execute(n,r,i):await e.execute(n,r);if(c.outcome===`deny`)return{blocked:!0,reason:c.reason||`Blocked by hook`,stdout:d.join(`
|
|
11
|
+
`),...s()};if(c.outcome===`error`){o.push(c);continue}let l=ne(c.stdout,t);if(d.push(...l.context),l.blockReason!==void 0)return{blocked:!0,reason:l.blockReason,stdout:d.join(`
|
|
12
|
+
`),...l.permissionDecision===`deny`&&{permissionDecision:`deny`},...s()};if(l.permissionDecision!==void 0&&c.source===`command`){let e=te[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(`
|
|
13
|
+
`)};m!==void 0&&(g.permissionDecision=m),h!==void 0&&(g.updatedInput=h);let{unknownHookTypes:_,errors:v}=s();return _!==void 0&&(g.unknownHookTypes=_),v!==void 0&&(g.errors=v),g}var Zu=class extends Error{guardrailName;guardrailReason;constructor(e,t){super(t),this.guardrailName=e,this.guardrailReason=t,this.name=`GuardrailBlock`}},Qu=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 Zu(e,`Guardrail "${e}" errored: ${t instanceof Error?t.message:String(t)}`)}if(!r.pass)throw new Zu(e,r.reason??`Guardrail "${e}" blocked the turn`)}))}catch(e){if(e instanceof Zu)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 $u(e,t){return{posture:`advisory`,enforcementReachable:!1,rationale:`Awaited at ${e} but only ${t} is read; \`blocked\` is never consulted.`}}function ed(e){for(let t of Object.values(e))Object.freeze(t);return Object.freeze(e)}const td=ed({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:$u(`session-lifecycle.ts`,`nothing`),PreCompact:$u(`compaction-orchestrator.ts`,`nothing`),UserPromptSubmit:$u(`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 nd(e){return td[e].posture===`enforcing`}export{j as AGENT_EVENTS,Ut as AGENT_EVENT_PREFIX,Rt as AbstractAIProvider,Be as AbstractAgent,ai as AbstractEventService,Qt as AbstractExecutor,Ve as AbstractManager,Zt as AbstractPlugin,$t as AbstractTool,sc as AgentFactory,nc as AgentTemplates,y as AuthenticationError,ke as CONFIRM_NO,Oe as CONFIRM_YES,Bi as CONTEXT_ESTIMATE_CHARS_PER_TOKEN,g as CacheIntegrityError,p as CircuitBreakerOpenError,f as ConfigurationError,jt as ConsoleLogger,Pr as ConversationHistory,Nr as ConversationStore,si as DEFAULT_ABSTRACT_EVENT_SERVICE,Hc as DEFAULT_BACKGROUND_PERMISSION_POLICY,Yi as DEFAULT_CONTEXT_WINDOW,ta as DEFAULT_MAX_OUTPUT,Sc as DEFAULT_TOOL_RESULT_HARD_CHARS,xc as DEFAULT_TOOL_RESULT_WARNING_CHARS,Ci as DEFERRED_WITHOUT_LOADER_MESSAGE,oi as DefaultEventService,vr as ENV_REFERENCE_PREFIX,F as EVENT_EMITTER_EVENTS,M as EXECUTION_EVENTS,Wt as EXECUTION_EVENT_PREFIX,o as EmptyCompletionError,dn as ErrorUtils,Yr as EventEmitterPlugin,Nc as EventHistoryModule,I as ExecutionJournalError,Rc as ExecutionProxy,R as ExecutionRecoveryError,L as ExecutionSuspendedError,xi as FunctionTool,Qu as GuardrailExecutor,Br as InMemoryEventEmitterMetrics,Lr as LocalExecutor,Cc as MAX_TOOL_RESULT_CHARS,ue as MODEL_EFFORT_VALUES,Hu as MODEL_PRICES,rn as MessageConverter,w as ModelNotAvailableError,E as NetworkError,Pc as ORCHESTRATION_EVENTS,Fc as ORCHESTRATION_EVENT_PREFIX,pi as ObservableEventService,gt as PARAMETER_SCHEMA_KEYWORDS,xt as PERMISSIVE_TOOL_SCHEMA_PROFILE,vl as PROTECTED_DIRECTORY_NAMES,yl as PROTECTED_FILE_NAMES,hi as PROVIDER_CALL_EVENTS,gi as PROVIDER_FALLBACK_EVENTS,Vt as PluginCategory,c as PluginError,Ht as PluginPriority,T as ProviderError,gl as RISK_CLASS_POLICY,i as RateLimitError,bc as Robota,e as RobotaError,mi as SPAN_EVENTS,bi as SPAN_EVENT_PREFIX,St as STRICT_TOOL_SCHEMA_PROFILE,ee as SameToolInputLoopError,kt as SilentLogger,a as StorageError,di as StructuredEventService,n as StructuredOutputError,da as TASK_EVENTS,fa as TASK_EVENT_PREFIX,vi as TOOL_BODY_EVENTS,N as TOOL_EVENTS,Gt as TOOL_EVENT_PREFIX,yi as TOOL_PERMISSION_EVENTS,mt as TOOL_SCHEMA_PROJECTION_MAX_DEPTH,ht as TOOL_SCHEMA_PROJECTION_MAX_NODES,De as TOOL_SEARCH_TOOL_NAME,Vc as TRUST_TO_MODE,t as ToolExecutionError,Zr as ToolRegistry,Ec as ToolResultAdmissionError,ae as TypeUtils,_l as UNCLASSIFIED_TOOL_FALLBACK,pa as USER_EVENTS,ma as USER_EVENT_PREFIX,u as UnsupportedShellError,r as ValidationError,an as Validator,Mc as admitToolResult,Bu as allowRulesForAutoMode,ku as applyPresetToolLists,se as assertProviderNativeWebToolsAvailable,Ei as assertResidentToolRemains,fi as bindEventServiceOwner,W as bindWithOwnerPath,_ as buildTraceparent,Gu as calculateModelCost,zn as callJournaledProvider,Je as chatEntryToMessage,Fn as classifyProviderFailure,au as clearRegisteredToolProfiles,lt as closeObjectSchemas,$o as collectAssistantUsageMetadata,li as composeEventName,je as confirmAction,kr as createAssistantMessage,S as createBoundedOutput,oe as createDefaultProviderCapabilities,zc as createExecutionProxy,gr as createImageProviderFromDefinition,k as createLogger,fe as createModelEffortOutcome,wr as createProviderFromConfig,pr as createRecordEnvResolver,Ar as createSystemMessage,jr as createToolMessage,Or as createUserMessage,_r as createVideoProviderFromDefinition,re as decodeHookVerdict,Ku as estimateBlendedCostPer1000,Ui as estimateContextTokensFromMessages,Vi as estimateSerializedContextTokens,Hi as estimateToolSchemaTokens,xu as evaluatePermission,Kn as extractEnumValues,Eu as findInvalidPermissionPatterns,Ee as findMediaProviderDefinition,$i as findModelDefinition,Du as findPermissionPatternWarnings,_e as findProviderDefinition,br as formatEnvReference,ve as formatSupportedProviderTypes,ia as formatTokenCount,ui as generateSpanId,Pt as getGlobalLogLevel,It as getGlobalLoggerSink,Xe as getMessagesForAPI,ea as getModelContextWindow,na as getModelMaxOutput,ra as getModelName,ge as getProviderCapabilities,ye as getProviderCredentialRequirement,Jn as getSchemaTypeName,Le as getToolEstimatedDuration,Re as getToolExecutionSteps,ou as getToolPermissionProfile,Sr as hasUsableSecretReference,qn as hasValidationConstraints,Dt as hashToolSchema,tn as isAbortFailure,Qe as isAssistantMessage,zu as isBroadExecutionAllowRule,qe as isChatEntry,Fe as isConfirmed,ci as isDefaultEventService,nd as isEnforcing,yr as isEnvReference,z as isExecutionControlError,Ce as isImageGenerationProvider,Te as isMediaProviderDefinition,b as isMintedSpanId,de as isModelEffort,Ie as isProgressReportingTool,Sl as isProtectedPath,nu as isReadOnlyCommandLine,ic as isRegistryTransactionError,$e as isSystemMessage,uu as isToolDeniedOutright,et as isToolMessage,Ze as isUserMessage,we as isVideoGenerationProvider,rc as lifecycleOf,A as logger,Wu as lookupModelPrice,pu as matchesAnyPattern,Ye as messageToHistoryEntry,xe as modelDeclaresCapability,Ne as multiSelectAction,Cr as normalizeProviderConfig,ir as normalizeStructuredOutput,m as outboundTraceContextFor,cu as parseParameterRule,lr as parseStructuredResponseText,is as peerDriverOf,as as printablePeerDriver,fr as processEnvResolver,Su as projectPermissionPolicy,Ot as projectToolSchema,s as providerCallSpanId,_i as readModelFallbackNotice,wn as readProviderFailureDetails,Ni as readTokenUsageFromMessage,Pi as readTokenUsageFromMetadata,Zi as registerModelMetadata,iu as registerToolPermissionProfile,Al as removesCriticalPath,vu as requiresFreshApproval,xr as resolveEnvReference,hr as resolveMediaProviderConfig,be as resolveModelCapabilities,Se as resolveModelCapability,he as resolveModelEffort,d as resolvePlatformShell,dr as resolveStructuredOutputCapability,Xu as runHooks,ac as runRegistryTransaction,Sn as scrubSecrets,Me as selectAction,Nt as setGlobalLogLevel,Ft as setGlobalLoggerSink,ze as setToolProgressCallback,zr as shellArgumentForDisplay,v as spanIdFromMintedId,Wc as splitCommandSegments,In as startPeriodicTask,Ln as stopPeriodicTask,x as subprocessTraceEnvironment,Zo as sumHistoryUsage,Xo as sumMessagesUsage,Pe as textAction,kn as toProviderError,su as toolNameMatches,Ou as toolNamesToPatterns,l as toolTraceContextFor,h as traceEnvFor,C as traceHeadersFor,ar as validateAgainstJsonSchema,on as validateAgentConfig,un as validateApiKey,ln as validateModelName,Tu as validatePermissionPattern,cn as validateProviderName,sn as validateUserInput,Yo as verifiedProviderCallUsage,Dc as wasToolResultAdmitted,Bc as withEventEmission,Yn as zodToJsonSchema};
|
|
14
14
|
//# sourceMappingURL=index.js.map
|