@robota-sdk/agent-cli 3.0.0-beta.99 → 3.0.1

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.
Files changed (47) hide show
  1. package/CHANGELOG.md +2181 -8
  2. package/dist/node/bin.js +22 -22
  3. package/dist/node/cli-core-Cus9ebuT.js +2920 -0
  4. package/dist/node/desktop-host.js +1 -1
  5. package/dist/node/headless.js +2 -2
  6. package/dist/node/host.d.ts +1 -1
  7. package/dist/node/host.js +1 -1
  8. package/dist/node/index.d.ts +1 -1
  9. package/dist/node/index.js +2 -2
  10. package/dist/node/index.js.map +1 -1
  11. package/dist/node/node-BsDZQcvi.js +67 -0
  12. package/dist/node/node-Ct446qHg.js +15 -0
  13. package/dist/node/node-Ct446qHg.js.map +1 -0
  14. package/dist/node/node-DdB-oeq6.js +100 -0
  15. package/dist/node/node-DdB-oeq6.js.map +1 -0
  16. package/dist/node/node-PhNl8kvo.js +15 -0
  17. package/dist/node/node-gdZ0H7su.js +100 -0
  18. package/dist/node/node-oHeP4vDn.js +67 -0
  19. package/dist/node/node-oHeP4vDn.js.map +1 -0
  20. package/dist/node/product-host-C-IQQ6ph.js +2954 -0
  21. package/dist/node/product-host-C-IQQ6ph.js.map +1 -0
  22. package/dist/node/{product-host-DYR8lHfh.d.ts → product-host-SaMRTzxB.d.ts} +3 -3
  23. package/dist/node/{product-host-DYR8lHfh.d.ts.map → product-host-SaMRTzxB.d.ts.map} +1 -1
  24. package/dist/node/src-B9UMvThT-C1A4E6i9.js +2 -0
  25. package/dist/node/src-B9UMvThT-C1A4E6i9.js.map +1 -0
  26. package/dist/node/src-B9UMvThT-fOIUDLqp.js +2 -0
  27. package/dist/node/src-BzaNFPZx-Cn-T7595.js +2 -0
  28. package/dist/node/src-BzaNFPZx-Cn-T7595.js.map +1 -0
  29. package/dist/node/src-BzaNFPZx-Df7aFS3N.js +2 -0
  30. package/dist/node/src-DwAfU-9z-B8gxThPt.js +2 -0
  31. package/dist/node/{node-BIcfIxK2.js → src-DwAfU-9z-DU29KIpt.js} +2 -2
  32. package/dist/node/src-DwAfU-9z-DU29KIpt.js.map +1 -0
  33. package/dist/node/src-UPsd6jNY-B387swGC.js +2 -0
  34. package/dist/node/src-UPsd6jNY-DPPw_--T.js +2 -0
  35. package/dist/node/src-UPsd6jNY-DPPw_--T.js.map +1 -0
  36. package/package.json +43 -43
  37. package/dist/node/cli-core-CrauPvKn.js +0 -2920
  38. package/dist/node/node-BIcfIxK2.js.map +0 -1
  39. package/dist/node/node-BRvqhy29.js +0 -165
  40. package/dist/node/node-BRvqhy29.js.map +0 -1
  41. package/dist/node/node-BTKWbzr0.js +0 -15
  42. package/dist/node/node-BZfTvzcV.js +0 -15
  43. package/dist/node/node-BZfTvzcV.js.map +0 -1
  44. package/dist/node/node-CI_NCC-t.js +0 -2
  45. package/dist/node/node-zABT8WBL.js +0 -165
  46. package/dist/node/product-host-DmP4TgQl.js +0 -2954
  47. package/dist/node/product-host-DmP4TgQl.js.map +0 -1
@@ -0,0 +1,15 @@
1
+ import{C as e,S as t,_ as n,a as r,b as i,c as a,d as o,f as s,g as c,i as l,l as u,m as d,p as f,t as p,u as m,v as h,x as g,y as _}from"./bounded-output-BdWv9SX3-28em7iHq.js";import{n as v,t as y}from"./verdict-decoder-Dz_rjoIZ-DA8BKB83.js";import b from"jssha";const x={type:`null`};function S(e){return e.type===`null`||Array.isArray(e.anyOf)&&e.anyOf.some(e=>typeof e==`object`&&!!e&&e.type===`null`)}function C(e){if(typeof e!=`object`||!e||Array.isArray(e))return e;let t=e;return S(t)?t:Array.isArray(t.anyOf)?{...t,anyOf:[...t.anyOf,x]}:{anyOf:[t,x]}}function w(e,t={}){return T(e,t,``)}function T(e,t,n){if(Array.isArray(e))return e.map((e,r)=>T(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=T(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)?S(o):!1,l=C(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=T(r.items,t,`${n}/items`)),Array.isArray(r.anyOf)&&(i.anyOf=r.anyOf.map((e,r)=>T(e,t,`${n}/anyOf/${r}`))),r.additionalProperties&&typeof r.additionalProperties==`object`?i.additionalProperties=T(r.additionalProperties,t,`${n}/additionalProperties`):a&&(r.additionalProperties!==!1&&t.onChange?.({path:n,kind:`closed-object`}),i.additionalProperties=!1),i}const E=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]),ee=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);function D(e,t){return e>>>t|e<<32-t}function te(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(ee),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+(E[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 ne=2e3,re=new Set(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})),ie=new Set([`__proto__`,`constructor`,`prototype`]),ae=new Set([`title`,`$schema`,`$comment`,`examples`,`default`]);function oe(){return{anyOf:[{type:`string`},{type:`number`},{type:`boolean`},{type:`object`},{type:`array`},{type:`null`}]}}const se={closedObjects:!1,requireAllProperties:!1,optionalAsNullable:!1,unknownKeywords:`adopt`,unsupportedMembers:[],maxDepth:32,maxNodes:ne},ce={closedObjects:!0,requireAllProperties:!0,optionalAsNullable:!0,unknownKeywords:`strip`,unsupportedMembers:[],maxDepth:32,maxNodes:ne};function O(e,t){return`${e}/${t}`}function le(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function ue(e,t,n,r,i,a){if(!le(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(!re.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=>!re.has(e)))return{path:t,keyword:`type`,reason:`a node must declare exactly one of 'type' or 'anyOf'`};let c=e.properties;if(le(c)){for(let e of Object.keys(c))if(ie.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=ue(c[e],O(O(t,`properties`),e),n+1,r,i,a);if(o)return o}}if(le(e.items)){let o=ue(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=ue(e.anyOf[o],O(O(t,`anyOf`),String(o)),n+1,r,i,a);if(s)return s}r.delete(e)}function de(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=>!re.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=oe();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 le(a)&&(i.properties=Object.fromEntries(Object.keys(a).map(e=>{let i=a[e];return[e,le(i)?de(i,O(O(t,`properties`),e),n,r):i]}))),le(i.items)&&(i.items=de(i.items,O(t,`items`),n,r)),Array.isArray(i.anyOf)&&(i.anyOf=i.anyOf.map((e,i)=>le(e)?de(e,O(O(t,`anyOf`),String(i)),n,r):e)),i}function fe(e){if(Array.isArray(e))return e.map(fe);if(le(e)){let t={};for(let n of Object.keys(e).sort())t[n]=fe(e[n]);return t}return e}function pe(e){return te(JSON.stringify(fe(e)))}function me(e,t){let n=e.parameters;if(!le(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=ue(n,``,0,new Set,{count:0},t);if(r)return{outcome:`rejected`,tool:e,changes:[],rejection:r};let i=[],a=de(n,``,t,i),o=t.closedObjects?w(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`)&&!ae.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 he={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>he.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>he.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date||he.isPrimitive(e)||he.isArray(e)||he.isObject(e)};function ge(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 _e(e,t,n){n?.webSearch===!0&&ve(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&ve(e,`web fetch`,t.nativeWebTools.webFetch)}function ve(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${ye(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${ye(n.reason)}`)}function ye(e){return e?` ${e}`:``}const be=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function xe(e){return typeof e==`string`&&be.includes(e)}function Se(e,t){return{resolution:e,...t}}const Ce=new Map(be.map((e,t)=>[e,t]));function we(e,t){return{selection:e,effective:null,disposition:`not-applied`,fingerprint:`${t}|${e}|not-applied`}}function Te(e,t,n){let r=e?.models[t];if(!r)return we(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`)}:we(n,t);if(r.supportedEfforts.includes(n))return{selection:n,effective:n,disposition:`exact`,fingerprint:i(n,`exact`)};let a=Ce.get(n),o=r.supportedEfforts.filter(e=>(Ce.get(e)??1/0)<(a??-1)).at(-1);return o?{selection:n,effective:o,disposition:`clamped`,fingerprint:i(o,`clamped`)}:we(n,t)}function Ee(e){let t=typeof e.supportsTools==`function`&&e.supportsTools();return e.getCapabilities?.()??ge(t)}function De(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function Oe(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 ke(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function Ae(e,t){if(e)return e.deviations?.[t]?.capabilities??e.vendorDefault}function je(e,t,n){let r=Ae(e,t);if(!(!r||r.length===0))return r.includes(n)}function Me(e,t,n,r){return je(e,t,n)??r}function Ne(e){return`generateImage`in e&&typeof e.generateImage==`function`}function Pe(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function Fe(e,t){return e.find(e=>e.type===t)}const Ie=`ToolSearch`,Le=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function Re(e,t,n){return{id:e,title:t,description:n?.description,options:Le,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function ze(e,t,n,r){return{id:e,title:t,options:n,maxSelect:1,description:r?.description,allowFreeText:r?.allowFreeText,maxVisible:r?.maxVisible,default:r?.default}}function Be(e,t,n){return{id:e,title:t,allowFreeText:!0,description:n?.description,masked:n?.masked,allowEmpty:n?.allowEmpty,placeholder:n?.placeholder,default:n?.default}}function Ve(e){return e.type===`answer`&&e.values.includes(`yes`)}function He(e){if(e)return Object.freeze({sourceId:e.sourceId,component:e.component,origin:e.origin,...e.version===void 0?{}:{version:e.version},...e.protocolVersion===void 0?{}:{protocolVersion:e.protocolVersion},...e.generation===void 0?{}:{generation:e.generation}})}function Ue(e,t){let{toolProvenance:n,...r}=e.metadata??{};if(!t)return n===void 0?e:{...e,metadata:r};let i=JSON.stringify(t),a=`Tool source (attribution only, not authority): ${i}`,o=e.parts??[];return{...e,metadata:{...r,toolProvenance:i},parts:o[0]?.type===`text`&&o[0].text===a?o:[{type:`text`,text:a},...o]}}var We=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}},Ge=class{initialized=!1;disposed=!1;initializationPromise;disposalPromise;constructor(e={}){this.initialized=e.readyOnConstruction===!0}async initialize(){for(;this.disposalPromise;)await this.disposalPromise;this.initialized||(this.initializationPromise??=Promise.resolve().then(()=>this.doInitialize()).then(()=>{this.disposalPromise||(this.initialized=!0,this.disposed=!1)}).finally(()=>{this.initializationPromise=void 0}),await this.initializationPromise)}async dispose(){if(this.disposalPromise)return this.disposalPromise;this.initialized=!1,this.disposed=!0;let e=()=>this.doDispose();this.disposalPromise=(this.initializationPromise??Promise.resolve()).then(e,e).finally(()=>{this.initialized=!1,this.disposed=!0,this.disposalPromise=void 0}),await this.disposalPromise}isInitialized(){return this.initialized}ensureInitialized(){if(this.disposed)throw Error(`${this.constructor.name} was disposed — re-initialize it before use, or build a new one`);if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function Ke(e){if(!Array.isArray(e))throw Error(`Messages must be an array`);if(e.length===0)throw Error(`Messages array cannot be empty`);for(let t of e)if(!t.role||![`user`,`assistant`,`system`,`tool`].includes(t.role))throw Error(`Invalid message role: ${t.role}`)}function qe(e){if(e){if(!Array.isArray(e))throw Error(`Tools must be an array`);for(let t of e){if(!t.name||typeof t.name!=`string`)throw Error(`Tool must have a valid name`);if(!t.description||typeof t.description!=`string`)throw Error(`Tool must have a valid description`);if(!t.parameters||typeof t.parameters!=`object`||t.parameters===null||Array.isArray(t.parameters))throw Error(`Tool must have valid parameters`)}}}async function Je(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*Ye(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*Xe(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*Ye(t,n,r,i)}function Ze(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 $e(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function et(e){return e.role===`assistant`}function tt(e){return e.role===`system`}function nt(e){return e.role===`tool`}function rt(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:Te(t?.(),s.model,s.effort)}}function it(e,t,n){if(t)return;let r=e.effortResolution,i=e.onModelEffortOutcome;if(r===void 0||i===void 0)return;let a=Se(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 at(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 ot(e,t,n){let r,i=rt(n,e.effortTable?.bind(e),t,e=>{r=e}),a=await e.chat(n.messages,i);return r??=it(i,e.effortTable!==void 0,t),at(e.name,i,r),{content:a.content??null,toolCalls:et(a)?a.toolCalls:void 0,model:n.model,metadata:n.metadata,...r!==void 0&&{modelEffortOutcome:r}}}async function*st(e,t,n){if(!e.chatStream)throw Error(`[AI-PROVIDER] Streaming is not supported by provider "${e.name}"`);let r,i=rt(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:et(t)?t.toolCalls:void 0,model:n.model,metadata:n.metadata};r??=it(i,e.effortTable!==void 0,t),at(e.name,i,r),r!==void 0&&(yield{content:null,model:n.model,metadata:n.metadata,modelEffortOutcome:r})}const ct={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var lt=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}},ut=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??lt.getInstance().getGlobalSink()??ct}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),dt(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),dt(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),dt(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),dt(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||lt.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 dt(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function k(e,t={}){return new ut(e,t)}function ft(e){lt.getInstance().setGlobalSink(e)}const A=k(`agents`),pt=k(`ToolSchemaProjection`);var mt=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=ct){this.logger=e}async configure(e){this.config=e,this.hasExecutor(e)&&e.executor&&(this.executor=e.executor)}hasExecutor(e){return typeof e==`object`&&!!e&&`executor`in e}async*streamWithAbort(e,t){let n=e[Symbol.asyncIterator]();try{for(;!t?.aborted;){let e=await ht(n,t);if(e.done||(await gt(t),t?.aborted))break;yield e.value}}finally{t?.aborted&&await n.return?.()}}async generateResponse(e){return ot(this,this.logger,e)}async*generateStreamingResponse(e){yield*st(this,this.logger,e)}supportsTools(){return!0}getCapabilities(){return ge(this.supportsTools())}validateConfig(){return!0}validateMessages(e){Ke(e)}validateTools(e){qe(e)}projectionProfile(){}projectTools(e,t){let n=this.projectionProfile();if(!n||!e)return e;let r=[];for(let i of e){let e=me(i,n);if(e.outcome!==`rejected`){r.push(e.tool);continue}let a=`${this.name}${t}${i.name}${pe(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`};pt.warn(`tool_schema_quarantined provider=${this.name} model=${t} tool=${i.name} path=${o} keyword=${s} reason=${c}`)}return r}validateNativeWebTools(e){_e(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return Je(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*Xe(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function ht(e,t){if(!t)return e.next();if(t.aborted)return{done:!0,value:void 0};let n,r=new Promise(e=>{n=()=>e({done:!0,value:void 0}),t.addEventListener(`abort`,n,{once:!0})});try{return await Promise.race([e.next(),r])}finally{n&&t.removeEventListener(`abort`,n)}}async function gt(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}(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})({});let _t=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`},vt=`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`},yt=`execution`,N={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},bt=`tool`,xt=`unknown_tool`,St=`argument_decode_error`,Ct=`tool_call_skipped`,P=(e,t)=>`${e}.${t}`,wt={START:P(yt,M.START),COMPLETE:P(yt,M.COMPLETE),ERROR:P(yt,M.ERROR)},Tt={CALL_START:P(bt,N.CALL_START),CALL_COMPLETE:P(bt,N.CALL_COMPLETE),CALL_ERROR:P(bt,N.CALL_ERROR)},Et={EXECUTION_START:P(vt,j.EXECUTION_START),EXECUTION_COMPLETE:P(vt,j.EXECUTION_COMPLETE),EXECUTION_ERROR:P(vt,j.EXECUTION_ERROR),CREATED:P(vt,j.CREATED)},F={EXECUTION_START:wt.START,EXECUTION_COMPLETE:wt.COMPLETE,EXECUTION_ERROR:wt.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:Tt.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:Et.EXECUTION_START,AGENT_EXECUTION_COMPLETE:Et.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:Et.EXECUTION_ERROR,AGENT_CREATED:Et.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 Dt=class{enabled=!0;category=`custom`;priority=_t.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}},Ot=class{provenance;logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??ct}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 kt(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function At(e,t){if(t?.aborted===!0)return!0;if(!kt(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return kt(n)&&n.name===`AbortError`}function jt(e=`aborted`,t){let n=t===void 0?Error(e):Error(e,{cause:t});return n.name=`AbortError`,n}var Mt=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 Nt=Mt.validateAgentConfig;Mt.validateUserInput,Mt.validateProviderName,Mt.validateModelName,Mt.validateApiKey;var Pt=class extends Error{code=`EXECUTION_JOURNAL_FAILED`;recordId;kind;constructor(e,t){super(`Execution journal failed at ${e.kind}`,{cause:t}),this.name=`ExecutionJournalError`,this.recordId=e.recordId,this.kind=e.kind}},I=class extends Error{code=`EXECUTION_SUSPENDED`;requests;constructor(e){super(`Execution is waiting for correlated tool responses`),this.name=`ExecutionSuspendedError`,this.requests=structuredClone(e)}},L=class extends Error{code;actionIds;constructor(e,t,n=[]){super(t),this.code=e,this.actionIds=n,this.name=`ExecutionRecoveryError`}};function R(e){return e instanceof Pt||e instanceof L||e instanceof I}function Ft(e,t){return e instanceof Pt?e:t instanceof Pt?t:e instanceof L?e:t instanceof L?t:e instanceof I&&t instanceof I?new I([...new Map([...e.requests,...t.requests].map(e=>[e.requestId,e])).values()]):e instanceof I?e:t}const It=new Set([`rate_limit_error`]),Lt=new Set([`overloaded_error`]),Rt=new Set([`authentication_error`,`permission_error`]),zt=new Set([`model_not_found`]),Bt=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),Vt=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]),Ht=[/\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 Ut(e){return Ht.some(t=>t.test(e))}const Wt=`[^\\s,;)"]+`;function Gt(e){return e.replace(RegExp(`\\bauthorization(")?\\s*[:=]\\s*(")?(?:(?:bearer|basic)\\s+)?${Wt}`,`gi`),`Authorization$1: $2[REDACTED]`).replace(RegExp(`\\bbearer\\s+${Wt}`,`gi`),`Bearer [REDACTED]`).replace(RegExp(`\\b(api[-_]?key)(")?\\s*[:=]\\s*(")?${Wt}`,`gi`),`$1$2: $3[REDACTED]`).replace(RegExp(`\\bkey=${Wt}`,`gi`),`key=[REDACTED]`).replace(/\bsk-[A-Za-z0-9_-]{8,}/gi,`[REDACTED]`).replace(/\bAIza[0-9A-Za-z_-]{35}\b/g,`[REDACTED]`)}function z(e){return typeof e==`object`&&e?e:void 0}function Kt(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function qt(e){let t=z(e);if(t===void 0)return{};let n=typeof t.status==`number`?t.status:void 0,r=z(t.error),i=z(r?.error),a=Kt(r,`type`),s=Kt(t,`type`)??Kt(i,`type`)??(a===`error`?void 0:a)??(n!==void 0&&!(e instanceof o)?Kt(t,`code`):void 0);return{...n!==void 0&&{status:n},...s!==void 0&&{type:s}}}function Jt(e){let t=z(e)?.constructor;if(typeof t!=`function`)return;let n=t.name;return typeof n==`string`&&n.length>0?n:void 0}function Yt(e){return At(e)||Jt(e)===`APIUserAbortError`}function Xt(e){let t=z(e)?.headers,n=t instanceof Headers?t.get(`retry-after`):z(t)?.[`retry-after`]??z(t)?.[`Retry-After`];if(n==null||n.trim().length===0)return;let r=Number(n);if(Number.isFinite(r))return Math.max(0,r);let i=Date.parse(n);return Number.isNaN(i)?void 0:Math.max(0,Math.round((i-Date.now())/1e3))}function Zt(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 Qt(e,t,n){if(e instanceof o||Yt(e))return e;let r=e instanceof Error?e:Error(typeof e==`string`?e:``),i=qt(e),s=Gt(r.message||`request failed`),c=Zt(i);if(i.status===429||i.type!==void 0&&It.has(i.type))return new h(s||`${t} rate limit exceeded.`,Xt(e),t,c);if(i.status===401||i.status===403||i.type!==void 0&&Rt.has(i.type))return new a(s,t,c);let l=i.status===void 0||i.status===400||i.status===404,u=nn(e)||i.type!==void 0&&zt.has(i.type)||Ut(s);return l&&u?new m(void 0,t,void 0,{...c,originalMessage:s}):$t(e)?new g(s,r,c,t):new f(`${n}: ${s}`,t,r,void 0,i)}function $t(e){if(e instanceof g)return!0;let t=z(e);if(t===void 0)return!1;let n=Kt(t,`code`);if(n!==void 0&&Bt.has(n))return!0;let r=Jt(e);if(r!==void 0&&Vt.has(r))return!0;let i=Kt(t,`name`);return i!==void 0&&Vt.has(i)?!0:i===`TypeError`&&Kt(t,`message`)===`fetch failed`}function en(e){let t=[],n=new Set,r=[e];for(let e=0;e<=8&&r.length>0;e++){let e=[];for(let i of r){if(i==null||n.has(i))continue;n.add(i),t.push(i);let r=z(i);r!==void 0&&e.push(r.originalError,r.cause)}r=e}return t}const B=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function tn(e){return e instanceof f?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:qt(e)}function nn(e){if(e instanceof o)return!1;let t=Kt(z(e),`code`);return t!==void 0&&zt.has(t)}function rn(e){if(e instanceof h)return B(!1,`rate-limit`);if(e instanceof a)return B(!1,`authentication`);if(e instanceof m)return B(!0,`model-unavailable`);let{status:t,type:n}=tn(e);return t===429||n!==void 0&&It.has(n)?B(!1,`rate-limit`):t===401||t===403||n!==void 0&&Rt.has(n)?B(!1,`authentication`):t===402?B(!1,`billing`):(t===void 0||t===400||t===404)&&(nn(e)||n!==void 0&&zt.has(n))?B(!0,`model-unavailable`):$t(e)?B(!1,`network`):t===529||n!==void 0&&Lt.has(n)?B(!0,`overloaded`):t===503?B(!0,`service-unavailable`):t===500||t===502||t===504?B(!0,`server-error`):t===404?{kind:`tentative`,classification:{switchable:!0,reason:`model-unavailable`}}:t===400||t===413?{kind:`tentative`,classification:{switchable:!1,reason:`invalid-request`}}:{kind:`none`}}function an(e,t){let n=en(e);if(t?.aborted===!0||n.some(e=>Yt(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=rn(e);if(t.kind!==`none`){if(r===void 0&&t.kind===`definitive`)return t.classification;if(r===void 0){r=t.classification;continue}if(t.kind===`definitive`)return t.classification.reason===`model-unavailable`?t.classification:r}}return r??{switchable:!1,reason:`unknown`}}async function V(e,t){try{await e.append(structuredClone(t))}catch(e){throw new Pt(t,e)}}function on(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 sn(e,t,n,r){if(!r)return e(t,n);let{journal:i,executionId:a,callId:o}=r;await V(i,{kind:`model-request`,recordId:`${o}:request`,executionId:a,callId:o,...r.route(),messages:t,options:on(n),...r.checkpoint&&{checkpoint:r.checkpoint}}),n.signal?.throwIfAborted();let s;try{s=await e(t,n)}catch(e){throw await V(i,{kind:`model-failure`,recordId:`${o}:failure`,executionId:a,callId:o,...r.route(),error:{name:e instanceof Error?e.name:`Error`,message:e instanceof Error?e.message:String(e)}}),e}return await V(i,{kind:`model-response`,recordId:`${o}:response`,executionId:a,callId:o,...r.route(),response:s}),s}function cn(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:if(!e.catchall)return H(e)===`ZodObject`||void 0;switch(H(dn(e.catchall,`Zod catchall`))){case`ZodNever`:return!1;case`ZodUnknown`:return!0;default:return e.catchall}}}function H(e){if(e.typeName)return e.typeName;if(typeof e.type==`string`)return`Zod${e.type[0]?.toUpperCase()+e.type.slice(1)}`}function ln(e){let t=un(e);return H(t)===`ZodObject`?t:void 0}function un(e){let t=e;for(let e=0;e<=64;e+=1){let e=H(t),n=e===`ZodEffects`?t.schema:e===`ZodPipe`?t.in:e===`ZodOptional`||e===`ZodNullable`||e===`ZodDefault`?t.innerType:void 0;if(!n)return t;t=dn(n,`${String(e)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function dn(e,t){let n=e._def;if(!n||typeof n!=`object`)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function fn(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 pn(e){let t=dn(e,`Zod schema`);for(let e=0;(H(t)===`ZodEffects`||H(t)===`ZodPipe`)&&e<=64;e+=1){let e=H(t)===`ZodPipe`?t.in:t.schema;if(!e)break;t=dn(e,`Zod effect inner type`)}let n=H(t);return n!==`ZodOptional`&&n!==`ZodNullable`&&n!==`ZodDefault`}function mn(e){if(Array.isArray(e))return e;let t=Object.values(e).filter(e=>typeof e==`number`);return Object.entries(e).filter(([e])=>!t.includes(Number(e))).map(([,e])=>e)}function hn(e,t={}){let n=dn(e,`Zod schema`),r=ln(n);if(!r)throw Error(`Zod schema root must be an object; got ${String(H(n))}. Wrap the fields in z.object({ … }) before converting.`);return gn(r,t.allowAdditionalProperties)}function gn(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=U(a,t),pn(a)&&r.push(e);let a=cn(e,t),o=typeof a==`object`?U(a,t):a;return{type:`object`,properties:n,required:r,...o!==void 0&&{additionalProperties:o}}}function U(e,t){let n=dn(e,`Zod type`),r=H(n),i={};switch((n.description??e.description)&&(i.description=n.description??e.description),r){case`ZodString`:return{type:`string`,...i};case`ZodNumber`:return{type:`number`,...i};case`ZodBoolean`:return{type:`boolean`,...i};case`ZodArray`:{let e=n.element??(typeof n.type==`object`?n.type:void 0);if(!e)throw Error(`ZodArray is missing item type; cannot convert to JSON schema.`);return{type:`array`,items:U(e,t),...i}}case`ZodObject`:return{...gn(n,t),...i};case`ZodEnum`:{let e=n.values??n.entries;if(!e)throw Error(`ZodEnum is missing enum values; cannot convert to JSON schema.`);return{...yn(e),...i}}case`ZodNativeEnum`:return{...yn(n.values),...i};case`ZodDate`:return{type:`string`,format:`date-time`,...i};case`ZodLiteral`:return{..._n(Array.isArray(n.values)?n.values:[n.value]),...i};case`ZodUnion`:case`ZodDiscriminatedUnion`:{let e=n.options;if(!e||!Array.isArray(e)||e.length===0)throw Error(`${String(r)} is missing options; cannot convert to JSON schema.`);return{anyOf:e.map(e=>U(e,t)),...i}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...U(n.schema,t),...i};case`ZodPipe`:if(!n.in)throw Error(`ZodPipe is missing input schema; cannot convert to JSON schema.`);return{...U(n.in,t),...i};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[U(n.innerType,t),{type:`null`}],...i};case`ZodOptional`:case`ZodDefault`:if(!n.innerType)throw Error(`${String(r)} is missing innerType; cannot convert to JSON schema.`);return{...U(n.innerType,t),...i};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:U(n.valueType,t),...i}:{type:`object`,additionalProperties:{type:`string`},...i};default:throw Error(xn(String(r)))}}function _n(e){if(e.length===0)throw Error(`ZodLiteral declares no values; cannot convert to JSON schema.`);if(new Set(e.map(fn)).size!==1)return{anyOf:e.map(e=>vn(e))};let t=fn(e[0]);return t?t===`null`?{type:`null`}:{type:t,enum:e}:vn(e[0])}function vn(e){let t=fn(e);if(!t)throw Error(`ZodLiteral value ${String(e)} is not a JSON primitive; cannot convert to JSON schema.`);return t===`null`?{type:`null`}:{type:t,enum:[e]}}function yn(e){if(!e||typeof e!=`object`)throw Error(`ZodNativeEnum is missing enum values; cannot convert to JSON schema.`);let t=mn(e);if(t.length===0)throw Error(`ZodNativeEnum declares no members; cannot convert to JSON schema.`);let n=t.filter(e=>typeof e==`number`),r=t.filter(e=>typeof e==`string`);return n.length>0&&r.length>0?{anyOf:[{type:`string`,enum:r},{type:`number`,enum:n}]}:{type:n.length>0?`number`:`string`,enum:t}}const bn={ZodTuple:"a tuple needs positional `items`, and the subset models `items` as ONE schema — use `z.object({...})` for a fixed-shape record, or `z.array(z.union([...]))` if order genuinely does not matter",ZodIntersection:"an intersection needs `allOf` — merge the two object schemas yourself with `.merge()`, which produces a single object node the subset can carry",ZodLazy:"a recursive schema needs `$ref` — flatten the recursion to a fixed depth, or model the nested level as `z.record(...)`",ZodDate:"use `z.string()` (optionally with `.datetime()`), which is what a provider receives"};function xn(e){return`${e} cannot be carried by the universal JSON-schema subset: ${bn[e]??`it has no representation in the subset`}. The subset is the one language every provider mapper forwards intact; a construct outside it would be advertised to the model and enforced by nothing.`}function Sn(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function Cn(e){if(e&&typeof e==`object`&&`issues`in e){let t=e.issues;if(Array.isArray(t))return t.map(e=>{if(e&&typeof e==`object`&&`message`in e){let t=Array.isArray(e.path)?e.path.join(`.`):``,n=String(e.message);return t?`${t}: ${n}`:n}return String(e)})}return[String(e)]}function wn(e){if(Sn(e))return{name:`structured_output`,jsonSchema:hn(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:Cn(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=Tn(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function Tn(e,t,n){let r=[],i=e.type;if(e.anyOf)return Dn(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${On(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(...Tn(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(En(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(...Tn(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${On(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...Tn(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 ${On(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${On(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 ${On(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${On(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function En(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function Dn(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>Tn(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 On(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function kn(e){let t=e.trim(),n=/^```(?:json)?[^\S\n]*\n([\s\S]*?)\n?```$/.exec(t),r=n?n[1]:t;try{return{success:!0,value:JSON.parse(r)}}catch(e){return{success:!1,issue:`response is not valid JSON: ${e instanceof Error?e.message:String(e)}`}}}function An(e,t){return je(e,t,`json_schema`)===!0?`response_schema`:je(e,t,`json_object`)===!0?`json_object`:`none`}function jn(e){let{table:t,model:n,endpointIsVendorDefault:r}=e;if(!t)return r===!1?{mechanism:`response_schema`,provenance:`unverified-endpoint`,reason:`a custom baseURL is configured and the provider declares no capability table, so nothing here can claim the endpoint enforces the schema`}:{mechanism:`response_schema`,provenance:`undeclared`,reason:`the provider declares no capability table, so the request is sent as asked — silence is not a denial`};let i=An(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 Mn=e=>process.env[e];function Nn(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function Pn(e,t={},n=Mn){let r=e.credentialRequirement,i=t.baseUrl??Nn(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=Nn(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 Fn(e,t={},n=Mn){if(e.createImageProvider===void 0)return;let r=Pn(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return Ne(t)?t:void 0}catch{return}}function In(e,t={},n=Mn){if(e.createVideoProvider===void 0)return;let r=Pn(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return Pe(t)?t:void 0}catch{return}}const Ln=`$ENV:`;function Rn(e){return e.startsWith(Ln)}function zn(e){return`${Ln}${e}`}function Bn(e,t=Mn){if(!Rn(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function Vn(e,t=Mn){return e===void 0||e.length===0?!1:Bn(e,t)!==void 0}function Hn(e,t,n=Mn){let r=De(t,e.name)?.defaults??{},i=e.model??r.model;if(!i)throw Error(`Provider ${e.name} requires model`);if(e.apiKeyRef!==void 0&&e.apiKey!==void 0)throw Error(`Provider ${e.name} has conflicting credential origins`);if(e.apiKeyRef!==void 0&&(!e.apiKeyRef.service?.trim()||!e.apiKeyRef.account?.trim()))throw Error(`Provider ${e.name} has an invalid host credential reference`);let a=e.apiKeyRef===void 0?e.apiKey??r.apiKey:void 0,o=a!==void 0&&Rn(a)?a.slice(5).trim():void 0;if(o===``)throw Error(`Provider ${e.name} has an invalid API key environment reference; use $ENV:VARIABLE_NAME`);let s=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:Bn(a,n),...o?{apiKeyEnv:o}:{},...e.apiKeyRef===void 0?{}:{apiKeyRef:e.apiKeyRef},baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...s!==void 0&&{options:s}}}function Un(e,t){if(e.apiKeyRef!==void 0&&!e.apiKey)throw Error(`Provider ${e.name} requires host credential resolution before construction`);let n=De(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${Oe(t)}`);let r=ke(n);if(r!==void 0&&!Wn(e,r))throw Error(`Provider ${e.name} requires ${Kn(r)}`);return n.createProvider(e)}function Wn(e,t){return t.anyOf.some(t=>Gn(e,t))}function Gn(e,t){let n=e[t];return n!==void 0&&n.length>0}function Kn(e){return e.anyOf.map(e=>e===`apiKey`?`apiKey (API key)`:e).join(` or `)}function W(){let e=globalThis.crypto;if(typeof e?.randomUUID==`function`)return e.randomUUID();if(typeof e?.getRandomValues==`function`){let t=e.getRandomValues(new Uint8Array(16));t[6]=(t[6]??0)&15|64,t[8]=(t[8]??0)&63|128;let n=Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``);return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}throw Error(`No cryptographic randomness is available on this platform (globalThis.crypto is missing both randomUUID and getRandomValues), so a unique identifier cannot be generated. This is not something to substitute Math.random for.`)}function qn(e,t){let n={id:W(),role:`user`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Jn(e,t){let n={id:W(),role:`assistant`,content:e,state:t?.state??`complete`,timestamp:new Date};return t?.toolCalls&&(n.toolCalls=t.toolCalls),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Yn(e,t){let n={id:W(),role:`system`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Xn(e,t){let n={id:W(),role:`tool`,content:e,toolCallId:t.toolCallId,state:`complete`,timestamp:new Date};return t.name&&(n.name=t.name),t.metadata&&(n.metadata=t.metadata),t.parts&&(n.parts=t.parts),n}var Zn=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push($e(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(qn(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(Jn(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(Yn(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>Ze(e)&&tt(Qe(e)),i=this.entries.filter(e=>!r(e)),a=$e(Yn(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(Xn(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(Ze).map(Qe)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(Ze).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(Ze);if(e.length<=this.maxMessages)return;let t=e.map(Qe),n=t.filter(tt),r=t.filter(e=>!tt(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=>!Ze(e)||o.has(e.id))}},Qn=class{history;pendingAssistant=null;constructor(e=0){this.history=new Zn({maxMessages:e})}addMessage(e){this.history.addMessage(e)}addUserMessage(e,t,n){this.history.addUserMessage(e,t,n)}addAssistantMessage(e,t,n,r){this.history.addAssistantMessage(e,t,n,r)}addSystemMessage(e,t,n){this.history.addSystemMessage(e,t,n)}setSystemPrompt(e,t,n){this.history.setSystemPrompt(e,t,n)}addToolMessage(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n||`unknown`,r,i)}addToolMessageWithId(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n,r,i)}addEntry(e){this.history.addEntry(e)}getHistory(){return this.history.getHistory()}getMessages(){return this.history.getMessages()}getMessagesByRole(e){return this.history.getMessagesByRole(e)}getRecentMessages(e){return this.history.getRecentMessages(e)}getMessageCount(){return this.history.getMessageCount()}beginAssistant(){this.pendingAssistant||={id:W(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:W(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:W(),content:``,toolCalls:[]},this.pendingAssistant.toolCalls.some(t=>t.id===e.id)||this.pendingAssistant.toolCalls.push(e)}commitAssistant(e,t){if(!this.pendingAssistant)return;let n=this.pendingAssistant,r=n.toolCalls.length>0,i=n.content,a={id:n.id,role:`assistant`,content:i,state:e,timestamp:new Date,...r&&{toolCalls:n.toolCalls},...t&&{metadata:t}};this.history.addMessage(a),this.pendingAssistant=null}discardPending(){this.pendingAssistant=null}hasPendingAssistant(){return this.pendingAssistant!==null}getPendingContent(){return this.pendingAssistant?.content??``}getMessagesForAPI(){return this.history.getMessages().map(e=>{let t={role:e.role,content:e.content};return et(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
2
+
3
+ [This response was interrupted by the user]`),et(e)&&e.toolCalls&&(t.tool_calls=e.toolCalls),nt(e)&&(t.tool_call_id=e.toolCallId),t})}clear(){this.history.clear()}},$n=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 Qn(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)}};const er=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function tr(e){return er.test(e)?e:void 0}var nr=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function rr(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new _(`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 _(`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 _(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function ir(e,t,n,r,i){try{await e.listener(t)}catch(a){if(n.incrementErrors(),!r)throw a instanceof Error?a:Error(String(a));i.error(`Event handler error`,{eventType:t.type,handlerId:e.id,error:a instanceof Error?a.message:String(a)})}}async function ar(e,t,n,r,i){let a=t.get(e.type);if(!a||a.length===0)return;let o=a.filter(t=>!t.filter||t.filter(e));if(o.length!==0){for(let t of o.filter(e=>e.once))r(e.type,t.id);if(n){await Promise.all(o.map(t=>i(t,e)));return}for(let t of o)await i(t,e)}}function or(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function sr(e,t,n,r){let{listenerCounts:i,totalListeners:a}=or(t),o=r.getSnapshot();return{enabled:e.enabled,calls:e.calls,errors:e.errors,eventTypes:Array.from(t.keys()),listenerCounts:i,totalListeners:a,bufferedEvents:n,totalEmitted:o.totalEmitted,totalErrors:o.totalErrors}}function cr(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new _(`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 lr(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 ur(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 dr=class extends Dt{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 nr,rr(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??_t.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=ur(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 cr(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 lr(this.handlers,e,t)}async emit(e,t={}){if(!this.pluginOptions.events.includes(e))return;let n={type:e,timestamp:new Date,...t},r=this.pluginOptions.filters[e];if(!(r&&!r(n))){if(this.metrics.incrementEmitted(),this.pluginOptions.buffer.enabled){this.eventBuffer.push(n),this.eventBuffer.length>=this.pluginOptions.buffer.maxSize&&await this.flushBuffer();return}await this.processEvent(n)}}async processEvent(e){await ar(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>ir(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 sr(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 fr=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var pr=class{tools=new Map;register(e){if(!e.schema?.name)throw new n(`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 n(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new n(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new n(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new n(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))mr(t,n);if(e.parameters.required){let t=e.parameters.properties||{};for(let r of e.parameters.required)if(!t[r])throw new n(`Required parameter "${r}" is not defined in properties`)}}};function mr(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new n(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>mr(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new n(`Parameter "${e}" must declare a type or anyOf`);if(!fr.includes(t.type))throw new n(`Parameter "${e}" has invalid type "${t.type}"`);if(t.properties)for(let[n,r]of Object.entries(t.properties))mr(`${e}.${n}`,r);t.items&&mr(`${e}[]`,t.items)}function hr(e,t,n){let r=Tn(n,t,`$`);if(r.length>0)throw new u(`output does not match the declared outputSchema: ${r.join(`; `)}`,e,void 0,{outputSchemaIssues:r})}function gr(e,t,n){let r=_r(e,t,n);return r?[r]:Tn(n,t,`Parameter "${e}"`)}function _r(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 ${vr(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${vr(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${vr(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${vr(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${vr(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 vr(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function yr(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(...gr(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...gr(t,a,e))}return i}function br(e,t,n,r){let i=yr(e,t,n,r);return{isValid:i.length===0,errors:i}}var xr=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)}},Sr=class extends xr{emit(e,t,n){}};const Cr=new Sr;function wr(e){return e===Cr||e instanceof Sr}function Tr(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 Er(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var Dr=class extends xr{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??Er()},i=Tr(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function Or(e,t){return new Dr(e,t)}var kr=class extends xr{emit(e,t,n){this.notifyListeners(e,t,n)}};const Ar={COMPLETED:`span_completed`},jr={COMPLETED:`provider_call_completed`},Mr={SWITCHED:`provider_fallback`};function Nr(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 Pr={COMPLETED:`tool_body_completed`},Fr={COMPLETED:`tool_queue_completed`},Ir={DECIDED:`tool_permission_decided`};var Lr=class e{resultExecutor;schema;fn;eventService;constructor(e,t,n){this.resultExecutor=n,this.schema=e,this.fn=t,this.validateConstructorInputs()}static fromResult(t,n){return new e(t,async(e,r)=>{let i=await n(e,r);if(!i.success)throw new u(i.error??`Tool execution failed`,t.name);if(i.data===void 0)throw new u(`Tool execution succeeded but returned no data`,t.name);return i.data},n)}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(e,t){let r=this.schema.name;if(!this.validate(e))throw new n(`Invalid parameters for tool "${r}": ${yr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let i=Date.now(),a,o;try{this.resultExecutor?(o=await this.resultExecutor(e,t),a=o.data):a=await this.fn(e,t)}catch(i){throw R(i)||i instanceof u||i instanceof n?i:new u(`Function tool execution failed: ${i instanceof Error?i.message:String(i)}`,r,i instanceof Error?i:Error(String(i)),{parameterCount:Object.keys(e||{}).length,hasContext:!!t})}let s=Date.now()-i;this.schema.outputSchema&&(!o||o.success)&&hr(r,a,this.schema.outputSchema);let c=t?.instanceEventService??this.eventService;if(c){let e={timestamp:new Date,spanId:Er(),durationMs:s,op:r};c.emit(Ar.COMPLETED,e)}return o||{success:!0,data:a,metadata:{executionTime:s,toolName:r,parameters:e}}}validate(e){return yr(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return br(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new n(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new n(`Tool function is required and must be a function`);if(!this.schema.name)throw new n(`Tool schema must have a name`)}};const Rr=`at least one tool must stay resident; all tools cannot be deferred`,zr=`a tool schema was withheld but no ${Ie} tool is offered; register the loader or turn tool search off`;function Br(e){return e.deferLoading===!0}function Vr(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!Br(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(Rr);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(zr);return r}function Hr(e){if(e.length>0&&e.every(Br))throw Error(Rr)}var Ur=class extends We{moduleManager;pluginManager;get name(){return this.config.name}addPlugin(e){this.pluginManager.addPlugin(e)}removePlugin(e){return this.pluginManager.removePlugin(e)}getPlugin(e){return this.pluginManager.getPlugin(e)}getPlugins(){return this.pluginManager.getPlugins()}getPluginNames(){return this.pluginManager.getPluginNames()}async registerModule(e,t){return this.moduleManager.registerModule(e,t)}async unregisterModule(e){return this.moduleManager.unregisterModule(e)}getModule(e){return this.moduleManager.getModule(e)}getModulesByType(e){return this.moduleManager.getModulesByType(e)}getModules(){return this.moduleManager.getModules()}getModuleNames(){return this.moduleManager.getModuleNames()}hasModule(e){return this.moduleManager.hasModule(e)}async executeModule(e,t){return this.moduleManager.executeModule(e,t)}getModuleStats(e){return this.moduleManager.getModuleStats(e)}};async function Wr(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 Gr(e){if(!e.name)throw new t(`Agent name is required`,{component:`ConversationAgent`});if(!e.aiProviders||e.aiProviders.length===0)throw new t(`At least one AI provider is required`,{component:`ConversationAgent`});if(!e.defaultModel)throw new t(`Default model configuration is required`,{component:`ConversationAgent`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new t(`Default model must specify both provider and model`,{component:`ConversationAgent`});let n=e.aiProviders.map(e=>e.name),r=n.filter((e,t)=>n.indexOf(e)!==t);if(r.length>0)throw new t(`Duplicate AI provider names: ${r.join(`, `)}`,{component:`ConversationAgent`,duplicates:r});if(e.providerOwnership!==void 0){if(!e.providerOwnership||typeof e.providerOwnership!=`object`||Object.getPrototypeOf(e.providerOwnership)!==Object.prototype&&Object.getPrototypeOf(e.providerOwnership)!==null)throw new t(`Provider ownership must be a registration-name record`);for(let[r,i]of Object.entries(e.providerOwnership))if(!n.includes(r)||i!==`owned`&&i!==`borrowed`)throw new t(`Invalid provider ownership for registration '${r}'`)}if(!n.includes(e.defaultModel.provider))throw new t(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${n.join(`, `)}`,{component:`ConversationAgent`,defaultProvider:e.defaultModel.provider,availableProviders:n})}var Kr=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 t(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let n=[],r=this.getEventService();for(let t of e){r&&t.setEventService(r),this.getTools().addResultTool(t.schema,async(e,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Wr(t,e,n)},t.provenance);let e=t.schema.name;typeof e==`string`&&e.length>0&&n.push(e)}let i=this.getConfig();i.tools=e,this.setConfig(i);let a=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(j.CONFIG_UPDATED,{parameters:{tools:n,systemMessage:i.systemMessage,provider:i.defaultModel.provider,model:i.defaultModel.model,temperature:i.defaultModel.temperature,maxTokens:i.defaultModel.maxTokens},metadata:{version:a}}),{version:a}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);if(e.name!==void 0){this.setConfig({...this.getConfig(),name:e.name});let t=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),{version:t}}throw new t("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 t(`Both provider and model are required`,{component:`ConversationAgent`});let n=this.getAIProviders(),r=n.getProviderNames();if(!r.includes(e.provider))throw new t(`AI Provider '${e.provider}' not found. Available: ${r.join(`, `)}`,{component:`ConversationAgent`,provider:e.provider,availableProviders:r});n.setCurrentProvider(e.provider,e.model);let i=this.getConfig();this.setConfig({...i,defaultModel:{...i.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.effort!==void 0&&{effort:e.effort}}}),this.logger.debug(`Model configuration updated`,e)}getModel(){let e=this.getAIProviders().getCurrentProvider();if(!e)throw new t(`No provider is currently set`,{component:`ConversationAgent`});let n=this.getConfig();return{provider:e.provider,model:e.model,...n.defaultModel.temperature!==void 0&&{temperature:n.defaultModel.temperature},...n.defaultModel.maxTokens!==void 0&&{maxTokens:n.defaultModel.maxTokens},...n.defaultModel.topP!==void 0&&{topP:n.defaultModel.topP},...n.defaultModel.effort!==void 0&&{effort:n.defaultModel.effort}}}setSystemMessage(e){let t=this.getConfig();t.systemMessage=e,this.setConfig(t),this.setConfigUpdatedAt(Date.now())}getSystemMessage(){return this.getConfig().systemMessage}registerTool(e,t){if(t.hasTool(e.schema.name))throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Wr(e,t,n)},e.provenance),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},qr=class extends Ge{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new pr,this.resolveToolSearchMode=e.resolveToolSearchMode,this.isToolVisible=e.isToolVisible??(()=>!0)}async doInitialize(){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 Lr(e,t);this.registry.register(n),A.debug(`Tool "${e.name}" registered successfully`)}addResultTool(e,t,n){this.ensureInitialized();let r=Lr.fromResult(e,t);Object.defineProperty(r,"provenance",{value:He(n),enumerable:!0}),this.registry.register(r)}removeTool(e){this.ensureInitialized(),this.registry.unregister(e)}getTool(e){return this.ensureInitialized(),this.registry.get(e)}getToolSchema(e){return this.ensureInitialized(),this.registry.get(e)?.schema}getTools(){this.ensureInitialized();let e=this.registry.getSchemas().filter(e=>this.isToolVisible(e.name));return this.allowedTools?e.filter(e=>this.allowedTools.includes(e.name)):e}getOfferedTools(){return Vr(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=>Br(e)&&!this.loadedDeferredTools.has(e.name))}loadDeferredTools(e){this.ensureInitialized();let t=e.map(e=>{let t=this.isToolVisible(e)?this.registry.get(e)?.schema:void 0;if(!t)throw new u(`Tool "${e}" is not registered, so it cannot be loaded`,e);return t});for(let e of t)Br(e)&&this.loadedDeferredTools.add(e.name);return t}async executeTool(e,t,n){let r=await this.executeToolResult(e,t,n);if(!r.success)throw new u(r.error||`Tool execution failed`,e);if(r.data===void 0)throw new u(`Tool execution succeeded but returned no data`,e);return r.data}async executeToolResult(e,t,n){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new u(`Tool "${e}" is not in the allowed tools list`,e);let r=this.registry.get(e);if(!r)throw new u(`Tool "${e}" is not registered`,e);let i=He(r.provenance),a;try{a=await r.execute(t,n)}catch(t){throw R(t)?t:t instanceof Error?new u(t.message,e,t):new u(String(t),e)}return Ue(a,i)}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 Jr(e){let t=Yr(e.metadata),n=Zr(e.usage);return t??n}function Yr(e){if(!e)return;let t=Zr({inputTokens:Qr(e,`inputTokens`),outputTokens:Qr(e,`outputTokens`),promptTokens:Qr(e,`promptTokens`),completionTokens:Qr(e,`completionTokens`),totalTokens:Qr(e,`totalTokens`),cacheReadTokens:Qr(e,`cacheReadTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return Xr(n);if(ei(n))return Zr(n)}function Xr(e){try{return Zr(JSON.parse(e))}catch{return}}function Zr(e){if(!e)return;let t=$r(e.inputTokens,e.promptTokens),n=$r(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=$r(e.totalTokens),i=$r(e.cacheReadTokens),a=i!==void 0&&i>=0&&i<=t;return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r},...a&&{cacheReadTokens:i}}}function Qr(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function $r(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function ei(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}function ti(e){return Math.ceil(JSON.stringify(e).length/4)}function ni(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function ri(e,t={}){let n=ti(e),r=ii(e),i=r?.tokens,a=ai(t.usageFloorTokens),o=r?.index===e.length-1,s=r?r.tokens+(o?0:ti(e.slice(r.index+1))):0;return{usedTokens:o?Math.max(i??0,a??0):Math.max(n,s,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function ii(e){for(let t=e.length-1;t>=0;t--){let n=Jr(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function ai(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const oi=k(`agent-core:models`),si=new Set;function ci(e,t,n){let r=`${e}:${t}`;si.has(r)||(si.add(r),oi.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 li=2e5,ui=new Map;function di(...e){for(let t of e){let e=ui.get(t.id);e&&!fi(e,t)&&oi.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)`),ui.set(t.id,t)}}function fi(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function pi(e){return ui.get(e)}function mi(e){let t=pi(e)?.contextWindow;return t===void 0?(ci(e,`context window`,li),li):t}const hi=16384;function gi(e){let t=pi(e)?.maxOutput;return t===void 0?(ci(e,`max output`,hi),hi):t}function _i(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 vi(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(Br);return i.length===0?`off`:i.length>15||ni(i)/mi(t)>=.1?`on`:`off`}function yi(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function bi(e){let t=new qr({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:vi(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var xi=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)}},Si=class{logger;isReady;getExecutionService;constructor(e,t,n){this.logger=e,this.isReady=t,this.getExecutionService=n}addPlugin(e){let n=this.getExecutionService();if(!this.isReady()||!n)throw new t(`Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.`,{pluginName:e.name});n.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 Ci(e){return{moduleManager:new xi(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new Si(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new Kr(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))}}function wi(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 Ti(e,t,n,r,i){wr(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:vt,ownerId:t,ownerPath:Di(t,n)})}function Ei(){return new dr({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 Di(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function Oi(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.driverId&&{driverId:t.driverId},...t.turnSource&&{turnSource:t.turnSource},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},awaitProviderSettlement:t.awaitProviderSettlement,...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onThinkingDelta&&{onThinkingDelta:t.onThinkingDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.executionJournal&&{executionJournal:t.executionJournal},...t.maxExecutionRounds!==void 0&&{maxExecutionRounds:t.maxExecutionRounds},...t.maxSameToolInputs!==void 0&&{maxSameToolInputs:t.maxSameToolInputs},...t.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:t.allowToolOnlyCompletion},...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.temperature!==void 0&&{temperature:t.temperature},...t.toolChoice!==void 0&&{toolChoice:t.toolChoice},...t.withholdHostedTools===!0&&{withholdHostedTools:!0},...t.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:t.ephemeralSystemContext},...t.traceContext!==void 0&&{traceContext:t.traceContext}}}async function ki(e,t,n={},r){try{e.emitAgentEvent(j.EXECUTION_START,{}),e.logger.debug(`Starting ConversationAgent execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=await e.getExecutionService().execute(t,i,a,Oi(e,n));if(e.logger.debug(`ConversationAgent execution completed`,{success:o.success,duration:o.duration,tokensUsed:o.tokensUsed,toolsExecuted:o.toolsExecuted,interrupted:o.interrupted}),o.interrupted)return e.emitAgentEvent(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 I?t:(e.logger.error(`ConversationAgent 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*Ai(e,t,n={},r){let i=!1;try{e.emitAgentEvent(j.EXECUTION_START,{}),e.logger.debug(`Starting ConversationAgent streaming execution`,{inputLength:t.length,conversationId:e.conversationId,sessionId:n.sessionId||`none`,userId:n.userId||`none`,hasMetadata:!!n.metadata});let i=e.getHistory(),a={...e.config,...r},o=yield*e.getExecutionService().executeStream(t,i,a,Oi(e,n));if(!o.success)throw o.error??Error(`[STRICT-POLICY] Failed execution result missing error field — every success:false result must carry error`);return o.response}catch(t){throw t instanceof I?(i=!0,t):(e.logger.error(`ConversationAgent streaming execution failed`,{error:t instanceof Error?t.message:String(t),conversationId:e.conversationId}),e.emitAgentEvent(j.EXECUTION_ERROR,{error:t instanceof Error?t.message:String(t)}),t)}finally{i||e.emitAgentEvent(j.EXECUTION_COMPLETE,{})}}function ji(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function Mi(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 Ni(e,t,n,r){let a=(n.outputRetries??2)+1,o=ji(r),s=t,c=[];for(let t=1;t<=a;t++){let i=Fi(r,await ki(e,s,n,o));if(i.success)return i.value;c=i.issues,e.logger.debug(`Structured output validation failed`,{attempt:t,maxAttempts:a,issues:c}),t<a&&(s=Mi(r,c))}throw new i(`response failed schema validation after ${a} attempt(s)`,c,a)}async function*Pi(e,t,n,r){let a=(n.outputRetries??2)+1,o=ji(r),s=t,c=[];for(let t=1;t<=a;t++){let i=Fi(r,yield*Ai(e,s,n,o));if(i.success)return i.value;c=i.issues,e.logger.debug(`Structured output validation failed (stream)`,{attempt:t,maxAttempts:a,issues:c}),t<a&&(s=Mi(r,c))}throw new i(`response failed schema validation after ${a} attempt(s)`,c,a)}function Fi(e,t){let n=kn(t);if(!n.success)return{success:!1,issues:[n.issue]};let r=e.validate(n.value);return r.success?{success:!0,value:r.value}:{success:!1,issues:r.issues}}function Ii(e,t){return e.getConversationStore(t).getMessages().map(e=>({id:e.id,role:e.role,content:e.content,state:e.state,timestamp:e.timestamp,metadata:e.metadata,...e.parts===void 0?{}:{parts:structuredClone(e.parts)},...e.role===`assistant`&&`toolCalls`in e?{toolCalls:e.toolCalls}:{},...e.role===`tool`&&`toolCallId`in e?{toolCallId:e.toolCallId}:{},...e.role===`tool`&&`name`in e?{name:e.name}:{}}))}function Li(e,t){return e.getConversationStore(t).getHistory()}function Ri(e,t,n){e.getConversationStore(t).addEntry(n)}function zi(e,t){e.getConversationStore(t).clear()}function Bi(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 Vi(e,t,n){e.getConversationStore(t).addMessage(n)}var Hi=class extends Ge{providers=new Map;retirements=new Set;closing=new WeakMap;currentProvider;currentModel;constructor(){super({readyOnConstruction:!0})}async doInitialize(){A.debug(`AIProviders initialized`)}async doDispose(){let e=[...this.providers.entries()];this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0;for(let[t,n]of e)n.ownership===`owned`&&this.retire(t,n.provider);await Promise.all(this.retirements),A.debug(`AIProviders disposed`)}retire(e,t){if(this.closing.has(t))return;let n=Promise.resolve().then(()=>t.close?.()).catch(t=>{A.warn(`Failed to close AI provider ${e}`,{error:t instanceof Error?t.message:String(t)})}).finally(()=>{this.retirements.delete(n),this.closing.delete(t)});this.closing.set(t,n),this.retirements.add(n)}addProvider(e,t,r={}){this.ensureInitialized();let i=Mt.validateProviderName(e);if(!i.isValid)throw new n(`Invalid provider name: ${i.errors.join(`, `)}`);if(!t||typeof t!=`object`||Array.isArray(t))throw new n(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new n(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new n(`Provider must have a chat method`);let a=r.ownership===void 0?`owned`:r.ownership;if(a!==`owned`&&a!==`borrowed`)throw new n(`Provider ownership must be owned or borrowed`);this.providers.has(e)&&A.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.provider.name});let o=this.providers.get(e);this.providers.set(e,{provider:t,ownership:a}),o?.ownership===`owned`&&o.provider!==t&&this.retire(e,o.provider),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);this.providers.delete(e),t?.ownership===`owned`&&this.retire(e,t.provider),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)?.provider}getProviders(){return this.ensureInitialized(),Object.fromEntries([...this.providers].map(([e,t])=>[e,t.provider]))}setCurrentProvider(e,n){if(this.ensureInitialized(),!this.providers.get(e))throw new t(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=n,A.debug(`Current AI provider set to "${e}" with model "${n}"`)}getCurrentProvider(){if(this.ensureInitialized(),!(!this.currentProvider||!this.currentModel))return{provider:this.currentProvider,model:this.currentModel}}isConfigured(){return this.ensureInitialized(),!!(this.currentProvider&&this.currentModel&&this.providers.has(this.currentProvider))}getCurrentProviderInstance(){if(!(!this.isConfigured()||!this.currentProvider))return this.providers.get(this.currentProvider)?.provider}getProviderNames(){return this.ensureInitialized(),Array.from(this.providers.keys())}getProvidersByPattern(e){this.ensureInitialized();let t=typeof e==`string`?new RegExp(e):e,n={};for(let[e,r]of this.providers)t.test(e)&&(n[e]=r.provider);return n}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return!1;let n=this.providers.get(t)?.provider;return!!(n&&typeof n.chatStream==`function`)}getProviderCount(){return this.ensureInitialized(),this.providers.size}},Ui=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 b(`SHA-256`,`TEXT`);return t.update(e),t.getHash(`HEX`)}},Wi=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new Ui;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 s(`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)}},Gi=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 Ki(e){return`executionId`in e||`toolName`in e}function qi(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 Ji(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 Yi(e,t,n,r){e.emitExecution(M.USER_MESSAGE,{parameters:{input:t,userPrompt:t,userMessageContent:t,messageLength:t.length,wordCount:qi(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 Xi(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:qi(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(qi(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 Or(t,{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})})}function Zi(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 Or(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)}var Qi=class{queuedAt=new Date().toISOString();pending;constructor(e,t){this.pending=new Set(e.filter((e,n)=>!t?.has(n)))}end(e,t){if(this.pending.delete(e))try{let n=new Date,r=n.toISOString();Promise.resolve(e.eventService?.emit(Fr.COMPLETED,{executionId:e.executionId,queuedAt:this.queuedAt,timestamp:n,endedAt:r,disposition:t})).catch(()=>void 0)}catch{}}finish(){for(let e of this.pending)this.end(e,`not-dispatched`)}};function $i(e){e.wake?.(),e.changed=new Promise(t=>{e.wake=t})}function ea(e){let t=new Set;for(let r of e.requests){let{executionId:e}=aa(r);if(t.has(e))throw new n(`Scheduling requires unique call IDs`);t.add(e)}let r=new Map;for(let[i,a]of e.scheduling){if(!t.has(i))throw new n(`Scheduling names an unknown call: ${i}`);let e=[...a.dependsOn??[]];for(let r of e)if(!t.has(r))throw new n(`Scheduling dependency is unknown: ${r}`);let o=a.resources?.map(e=>{if(typeof e.key!=`string`||!e.key.trim()||e.access!==`read`&&e.access!==`write`)throw new n(`Scheduling requires nonempty resource identities and read/write access`);return{key:e.key,access:e.access}});r.set(i,{dependsOn:e,...o===void 0?{}:{resources:o}})}let i=new Set;for(;i.size<t.size;){let e=i.size;for(let e of t)(r.get(e)?.dependsOn??[]).every(e=>i.has(e))&&i.add(e);if(i.size===e)throw new n(`Scheduling dependencies contain a cycle`)}return r}function ta(e,t){return e?.resources===void 0||t?.resources===void 0||e.resources.some(e=>t.resources.some(t=>e.key===t.key&&(e.access===`write`||t.access===`write`)))}function na(e,t){let n=e.metadata?.toolProvenance;return typeof n!=`string`||typeof t.metadata?.toolProvenance==`string`?t:{...t,metadata:{...t.metadata,toolProvenance:n}}}async function ra(e,t,n){let r=e.requests[t];e.queue.end(r,`not-dispatched`),aa(r);let i=na(r,{executionId:r.executionId,toolName:r.toolName,success:!1,result:null,error:n,metadata:{errorCode:Ct,dispatchStatus:`not-dispatched`}});return r.eventService?.emit(N.CALL_ERROR,{timestamp:new Date,toolName:r.toolName,error:n}),await e.journal?.onResult(t,i),i}async function ia(e,t,n){let r=new Map(e.requests.map((e,t)=>[e.executionId,t]));for(;!n.fatalError&&n.pending.size>0;){let i=n.changed,a,o;for(let t of n.pending){let i=e.requests[t],s=e.scheduling.get(i.executionId),c=(s?.dependsOn??[]).map(e=>n.resultsByIndex[r.get(e)]);if(n.errorsByIndex.some(fa)&&!e.continueOnError){a=t,o=`Skipped after an earlier call failed; this call was not dispatched`;break}if(c.some(e=>e!==void 0&&!e.success)){a=t,o=`Skipped because a required predecessor failed; this call was not dispatched`;break}if(!c.some(e=>e===void 0)&&![...n.active].some(t=>ta(s,e.scheduling.get(e.requests[t].executionId)))){a=t;break}}if(a===void 0){await i;continue}n.pending.delete(a),n.active.add(a);try{if(o){let t=await ra(e,a,o);n.resultsByIndex[a]=t,n.errorsByIndex[a]=ua(t)}else await ma(e,t,n,a)}catch(e){if(!R(e))throw e;let t=Ft(n.fatalError,e);R(t)&&(n.fatalError=t),e instanceof I||n.abort.abort(e)}finally{n.active.delete(a),$i(n)}}}function aa(e){if(!e.executionId)throw new n(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing executionId`);if(!e.ownerType)throw new n(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerType: executionId=${e.executionId}`);if(!e.ownerId)throw new n(`[STRICT-POLICY][EMITTER-CONTRACT] Tool execution request missing ownerId: executionId=${e.executionId}`);return{executionId:e.executionId,ownerType:e.ownerType,ownerId:e.ownerId}}function oa(e,t){let n=aa(e),i=W(),a=e.traceContext?l(e.traceContext,i):void 0,o=r(`shell`,e.traceContext,p(i)),s=e.traceContext?r(`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:i,...a?{outboundTraceContext:a}:{},...o?{shellTraceEnv:o}:{},...s?{hookTraceEnv:s}:{}}}function sa(e){return{toolName:e.toolName,executionId:e.executionId??``,success:!1,error:`Execution interrupted by user`,result:null,metadata:{dispatchStatus:`not-dispatched`}}}function ca(e,t){return{toolName:e.toolName,result:null,success:!1,error:t.message,executionId:e.executionId}}function la(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:St,requestedTool:e.toolName,dispatchStatus:`not-dispatched`}}}function ua(e){return Error(`Tool execution failed: toolName=${String(e.toolName)} executionId=${String(e.executionId)} error=${String(e.error||`Unknown error`)}`)}function da(e){return e!==void 0}function fa(e){return e!==void 0}function pa(e,t){if(e===0)return 0;if(t===void 0||!Number.isFinite(t))return e;let n=Math.floor(t);return n<1?1:Math.min(n,e)}async function ma(e,t,n,r){let i=e.requests[r];if(i)try{let a=await va(e,t,i,r);n.resultsByIndex[r]=a,a.success||(n.errorsByIndex[r]=ua(a))}catch(e){if(R(e)){let t=Ft(n.fatalError,e);R(t)&&(n.fatalError=t),e instanceof I||n.abort.abort(e);return}let t=e instanceof Error?e:Error(String(e));n.errorsByIndex[r]=t,n.resultsByIndex[r]=ca(i,t)}}async function ha(e,t,n){for(;!n.fatalError&&n.nextRequestIndex<e.requests.length;){let r=n.nextRequestIndex;n.nextRequestIndex+=1,await ma(e,t,n,r)}}async function ga(e,t){let n=e;if(n.scheduling)try{n={...n,scheduling:ea(n)}}catch(e){let t=e instanceof Error?e.message:String(e),r=[];for(let[e]of n.requests.entries()){let i=n.recoveredResults?.get(e);r.push(i?structuredClone(i):await ra(n,e,`Invalid scheduling policy: ${t}; this call was not dispatched`))}return{results:r,errors:r.filter(e=>!e.success).map(ua)}}let r=new AbortController,i=n.journal||n.scheduling?{...n,signal:n.signal?AbortSignal.any([n.signal,r.signal]):r.signal}:n,a={resultsByIndex:Array(n.requests.length),errorsByIndex:Array(n.requests.length),nextRequestIndex:0,abort:r};if(n.scheduling){a.pending=new Set(n.requests.map((e,t)=>t)),a.active=new Set,$i(a);for(let[e,t]of n.recoveredResults??[])a.pending.delete(e)&&(a.resultsByIndex[e]=structuredClone(t),t.success||(a.errorsByIndex[e]=ua(t)))}let o=pa(n.requests.length,n.maxConcurrency),s=Array.from({length:o},()=>n.scheduling?ia(i,t,a):ha(i,t,a));if(await Promise.all(s),a.fatalError)throw a.fatalError;let c=a.resultsByIndex.filter(da),l=a.errorsByIndex.filter(fa);if(!n.scheduling&&l.length>0&&!n.continueOnError)throw l[0];return{results:c,errors:l}}async function _a(e,t){let n=[],r=[],i=!1;for(let[a,o]of e.requests.entries()){if(i&&!e.recoveredResults?.has(a)){try{aa(o)}catch(e){r.push(e instanceof Error?e:Error(String(e)));continue}let t=await ra(e,a,`Skipped after an earlier call failed; this call was not dispatched`);n.push(t);continue}try{let s=await va(e,t,o,a);n.push(s),s.success||r.push(ua(s)),!s.success&&!e.continueOnError&&(i=!0)}catch(t){if(R(t))throw t;let n=t instanceof Error?t:Error(String(t));r.push(n),e.continueOnError||(i=!0)}}return{results:n,errors:r}}async function va(e,t,n,r){let i=e.recoveredResults?.get(r);if(i)return structuredClone(i);e.queue.end(n,e.signal?.aborted||n.argumentDecodeError!==void 0?`not-dispatched`:`admission-started`);let a,o=e.journal;if(e.signal?.aborted)a=sa(n);else if(n.argumentDecodeError!==void 0)a=la(n);else if(o&&await o.beforeDispatch(r),e.signal?.aborted)a=sa(n);else{let i={...oa(n,e.signal),...o?.continuation?{continuation:o.continuation(r)}:{},...o?.beforeEffect?{beforeToolEffect:e=>o.beforeEffect(r,e)}:{}};e.lifecycle&&await e.lifecycle.beforeDispatch(r,i);try{a=await ya(e,r,()=>t.executeTool(n.toolName,n.parameters,i))}catch(e){if(R(e))throw e;a=ca(n,e instanceof Error?e:Error(String(e)))}if(a.metadata?.dispatchStatus!==void 0){let{dispatchStatus:e,...t}=a.metadata;a={...a,metadata:t}}e.lifecycle&&await e.lifecycle.onResult(r,i,a)}return a=na(n,a),await e.journal?.onResult(r,a),a}async function ya(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?Ft(r.error,e):e}}if(`error`in r)throw r.error;return r.result}async function ba(e,t,n){n.debug(`Executing ${e.requests.length} tools in ${e.mode} mode`);let r=new Qi(e.requests,e.recoveredResults),i={...e,queue:r};try{return e.scheduling||e.mode===`parallel`?await ga(e.mode===`sequential`?{...i,maxConcurrency:1}:i,t):await _a(i,t)}finally{r.finish()}}var xa=class{tools;logger;askHandler;deferredToolCatalog;constructor(e,t=ct){this.tools=e,this.logger=t,this.deferredToolCatalog={listDeferredTools:()=>this.tools.listDeferredTools(),loadDeferredTools:e=>this.tools.loadDeferredTools(e)}}getLoadedDeferredTools(){return this.tools.getLoadedDeferredTools?.()}restoreLoadedDeferredTools(e){for(let t of e)if(!this.tools.hasTool(t))throw new L(`EXECUTION_RECOVERY_INVALID`,`Recovery tool is no longer registered: ${t}`);let t=new Set(this.tools.getTools().map(e=>e.name));this.tools.loadDeferredTools(e.filter(e=>t.has(e)))}setAskHandler(e){this.askHandler=e}async executeTool(e,t,r,i=`offered`){this.logger.debug(`Executing tool: ${e}`);let a;try{if(!r?.executionId)throw new n(`ToolExecutionService requires executionId (toolCallId) in ToolExecutionContext`);a=He(this.tools.getTool?.(e)?.provenance),r.signal?.throwIfAborted();let o=i===`offered`&&this.tools.getToolSchema(e)?.deferLoading===!0&&!this.tools.isToolOffered(e);if(!this.tools.hasTool(e)||o){let t=(i===`registered`?this.tools.getTools():this.tools.getOfferedTools()).map(e=>e.name).sort(),n=Ca(e,t,o),a=r.eventService;if(a){let t={timestamp:new Date,toolName:e,error:n};a.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:n,toolName:e,executionId:r.executionId,metadata:{errorCode:xt,requestedTool:e,availableTools:t}}}let s=r.eventService;if(s){let n={timestamp:new Date,toolName:e,parameters:t};s.emit(N.CALL_START,n)}let{toolName:c,parameters:l,...u}=r,d={...u,deferredTools:this.deferredToolCatalog,toolName:e,parameters:t,executionId:r.executionId},f=Ue(this.tools.executeToolResult?await this.tools.executeToolResult(e,t,d):{success:!0,data:await this.tools.executeTool(e,t,d)},a);if(!f.success){let t=f.error||`Tool execution failed`;return s?.emit(N.CALL_ERROR,{timestamp:new Date,toolName:e,error:t}),{success:!1,error:t,result:f.data,parts:f.parts,metadata:f.metadata,toolName:e,executionId:d.executionId}}if(f.data===void 0)throw Error(`Tool execution succeeded but returned no data`);let p=f.data;if(this.logger.debug(`Tool execution completed: ${e}`),s){let t={timestamp:new Date,toolName:e,result:p};s.emit(N.CALL_COMPLETE,t),s.emit(N.CALL_RESPONSE_READY,t)}return{success:!0,result:p,...f.parts?{parts:f.parts}:{},...f.metadata?{metadata:f.metadata}:{},toolName:e,executionId:d.executionId}}catch(t){if(R(t))throw t;this.logger.error(`Tool execution failed: ${e}`);let n=t instanceof Error?t:Error(String(t)),i=r?.eventService;if(i&&r?.executionId){let t={timestamp:new Date,toolName:e,error:n.message};i.emit(N.CALL_ERROR,t)}let o=Ue({success:!1,error:n.message},a);return{success:!1,error:n.message,...o.parts?{parts:o.parts}:{},...o.metadata?{metadata:o.metadata}:{},toolName:e,executionId:r?.executionId}}}createExecutionRequestsWithContext(e,t){return e.map(e=>{let n=Sa(e.id,e.function.name,e.function.arguments);return{toolName:e.function.name,parameters:n.ok?n.parameters:{},executionId:e.id,ownerType:`tool`,ownerId:e.id,ownerPath:[...t.ownerPathBase,{type:`tool`,id:e.id}],metadata:Ue({success:!0,metadata:t.metadataFactory?.(e)},He(this.tools.getTool?.(e.function.name)?.provenance)).metadata,...this.askHandler?{ask:this.askHandler}:{},deferredTools:this.deferredToolCatalog,...n.ok?{}:{argumentDecodeError:n.error}}})}async executeTools(e){return ba(e,this,this.logger)}};function Sa(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 Ca(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 ${Ie} 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 wa(e,t){try{e()}catch(e){if(t===void 0)throw e}}function Ta(e){return e?.ownerPath?.length?e.ownerPath.map(e=>({...e})):[]}function Ea(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:yt,ownerId:r,ownerPath:i}}function Da(e,t,n,r,i,a){if(!i||i.length===0)throw Error(`[EXECUTION] Missing thinkingNodeId for thinking owner context`);let o=[...Ea(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:yt,ownerId:r,ownerPath:o}}function Oa(e,t,n,r,i){if(!i||i.length===0)throw Error(`[EXECUTION] Missing toolCallId for tool owner context`);return{ownerType:bt,ownerId:i,ownerPath:[...Ea(e,t,n,r).ownerPath,{type:`tool`,id:i}]}}function ka(e,t,n,r,i,a){let o=Da(e,t,n,r,i,a).ownerPath,s=`response_${i}`;return{ownerType:yt,ownerId:r,ownerPath:[...o,{type:`response`,id:s}]}}function Aa(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 ja=class{baseEventService;logger;ownerPathBase;toolEventServices;agentOwnerPathBase;constructor(e,t,n){this.baseEventService=e,this.logger=t,this.ownerPathBase=Ta(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(wr(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=Or(this.baseEventService,{ownerType:bt,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 Ea(this.agentOwnerPathBase,this.ownerPathBase,e,t)}buildThinkingOwnerContext(e,t,n,r){return Da(this.agentOwnerPathBase,this.ownerPathBase,e,t,n,r)}buildToolOwnerContext(e,t,n){return Oa(this.agentOwnerPathBase,this.ownerPathBase,e,t,n)}buildResponseOwnerContext(e,t,n,r){return ka(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 Or(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(wr(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){Ji(this,e,t,n,r,i,a)}emitUserMessageEvent(e,t,n){Yi(this,e,t,n)}emitAssistantMessageComplete(e,t,n,r,i,a){Xi(this,this.baseEventService,e,t,n,r,i,a)}emitToolResultsEvents(e,t,n,r,i,a,o,s){Zi(this,this.baseEventService,e,t,n,r,i,a,o,s)}};function Ma(e,t){return e instanceof Error?e:Error(e===void 0?t:String(e))}function Na(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 Pa(e){return e.role===`assistant`&&typeof e.content==`string`&&e.content.length>0}function Fa(e,t,n,r,i,a){let o=e.getMessages(),s=Na(o,i.turnMessageId),c=s.filter(Pa).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:Ma(a,f)}:{}}}function Ia(e,t,n,r,i,a,o=`round`){return structuredClone({version:1,effectAdmission:`required`,messages:e,round:t.currentRound,contextLimit:mi(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 La(e,t,n){e.tools!==void 0&&(Me(n.provider.capabilityTable?.(),t,`tools`,!0)||(delete e.tools,delete e.toolChoice))}async function Ra(e,t,n,r,i=!1){let a=za(r),o=n.signal;if(a===void 0&&o===void 0)return e(t,n);if(o?.aborted)throw jt();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(jt())};o?.addEventListener(`abort`,h,{once:!0});let g=n.onTextDelta,_=n.onThinkingDelta,v={...n,signal:s.signal,...g===void 0?{}:{onTextDelta:e=>{m(),g(e)}},onThinkingDelta:e=>{m(),_?.(e)}};m();try{let n=new Promise((e,t)=>{d=t});return u=(async()=>e(t,v))(),await Promise.race([u,n])}finally{l=!0,f(),o?.removeEventListener(`abort`,h),i&&u&&await u.then(()=>{},e=>{if(e instanceof Pt)throw e})}}function za(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return e}function Ba(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 Va={beforeExecution:async(e,t)=>{e.beforeExecution&&await e.beforeExecution(Ba(t))},afterExecution:async(e,t)=>{e.afterExecution&&t.executionResult&&await e.afterExecution(Ba(t),t.executionResult)},afterConversation:async(e,t)=>{e.afterConversation&&t.executionResult&&await e.afterConversation(Ba(t),t.executionResult)},afterToolExecution:async(e,t)=>{e.afterToolExecution&&t.executionResult?.toolCalls?.length&&await e.afterToolExecution(Ba(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(Ba(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(Ba(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:`${yt}.${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=Va[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 Ha(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 Ua(e,t){return e===void 0||t<=1?e:e===`required`||typeof e==`object`?`auto`:e}function Wa(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 Ga(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 Ka(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 qa(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 Ja(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:Qa(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 Ya(){return`exec_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function Xa(e,t){if(!e?.conversationId||e.conversationId.length===0)throw Error(`[EXECUTION] conversationId is required for ${t}`);return e.conversationId}function Za(e,t,n,r,i,a){return{messages:e,config:t,startTime:n,executionId:r,conversationId:i,...a?.sessionId&&{sessionId:a.sessionId},...a?.userId&&{userId:a.userId},...a?.metadata&&{metadata:a.metadata},...a?.signal&&{signal:a.signal},awaitProviderSettlement:a?.awaitProviderSettlement,...a?.onTextDelta&&{onTextDelta:a.onTextDelta},...a?.onThinkingDelta&&{onThinkingDelta:a.onThinkingDelta},...a?.onExecutionEvent&&{onExecutionEvent:a.onExecutionEvent},...a?.executionJournal&&{executionJournal:a.executionJournal},...a?.maxExecutionRounds!==void 0&&{maxExecutionRounds:a.maxExecutionRounds},...a?.maxSameToolInputs!==void 0&&{maxSameToolInputs:a.maxSameToolInputs},...a?.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:a.allowToolOnlyCompletion},...a?.maxTokens!==void 0&&{maxTokens:a.maxTokens},...a?.temperature!==void 0&&{temperature:a.temperature},...a?.toolChoice!==void 0&&{toolChoice:a.toolChoice},...a?.withholdHostedTools===!0&&{withholdHostedTools:!0},...a?.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:a.ephemeralSystemContext},...a?.traceContext!==void 0&&{traceContext:a.traceContext}}}function Qa(e){let t={conversationId:Xa(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 $a(e){return[`Respond with ONLY a JSON object (no prose, no code fences) matching this JSON schema:`,JSON.stringify(e)].join(`
6
+ `)}function eo(e,t,n,r){let i=e.responseFormat;if(i?.type!==`json_schema`)return{messages:t,outcome:void 0};let a=jn({table:r.provider.capabilityTable?.(),model:n,endpointIsVendorDefault:r.provider.endpointIsVendorDefault?.()});if(a.mechanism===`response_schema`)return{messages:t,outcome:{capability:a,sent:`json_schema`,schemaInPrompt:!1}};let o={role:`system`,content:$a(i.schema),id:W(),timestamp:new Date,state:`complete`},s=[...t,o];return a.mechanism===`json_object`?(e.responseFormat={type:`json_object`},{messages:s,outcome:{capability:a,sent:`json_object`,schemaInPrompt:!0}}):(delete e.responseFormat,{messages:s,outcome:{capability:a,sent:`omitted`,schemaInPrompt:!0}})}function to(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 no(e,t){e.current={provider:t.to.provider,model:t.to.model}}function ro(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 d(e,r)}function io(e,t){return t===void 0?e:{...e,outboundTraceContext:t}}function ao(e,t){let n=Array.isArray(t.lastTrackedAssistantMessage?.toolCalls)&&t.lastTrackedAssistantMessage.toolCalls.length>0;return{thinkingNodeId:`thinking_${e}_round${t.runningAssistantCount+1}`,previousThinkingNodeId:n?`thinking_${e}_round${t.runningAssistantCount}`:void 0}}function oo(e,t){e!==void 0&&typeof e==`object`&&t.listDeferredTools().some(t=>t.name===e.tool)&&t.loadDeferredTools([e.tool])}function so(e,t,n,r){let i=Ha(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 co(e,t,n,r,i,a,o,s,c,l={},u){if(!t.defaultModel?.model)throw Error(`Model is required in defaultModel configuration. Please specify a model.`);if(typeof t.defaultModel.model!=`string`||t.defaultModel.model.trim()===``)throw Error(`Model must be a non-empty string in defaultModel configuration.`);let d=t.defaultModel.model;oo(i?.toolChoice??t.defaultModel.toolChoice,n.deferredTools);let f=so(d,t,n,i);Wa(f.toolChoice,f.tools),La(f,d,n);let{messages:p,outcome:m}=eo(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)=>sn((e,t)=>(s?.(`invoked`,t.model??d),h(e,io(t,c?.()))),e,t,u),_=f.effort??`auto`;if(r){let e=r.lookup(p,q(l,t.defaultModel.model),l.current?.provider??t.defaultModel.provider,{temperature:t.defaultModel.temperature,maxTokens:t.defaultModel.maxTokens,effortCacheIdentity:_});if(e){s?.(`cache-hit`,f.model??d);let t={role:`assistant`,content:e,timestamp:new Date,id:W(),state:`complete`};return u&&await V(u.journal,{kind:`model-cache-hit`,checkpoint:u.checkpoint,recordId:`${u.callId}:cache`,executionId:u.executionId,callId:u.callId,...u.route(),response:t}),t}let n=await Ra(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 Ra(g,p,f,t.timeout,o||!!u)}function lo(e,t,n,r,i){let a=e.role===`assistant`?e.toolCalls:void 0,o=Array.isArray(a)&&a.length>0;if(typeof e.content!=`string`&&!o)throw Error(`[EXECUTION] Provider response must have content or tool calls`);if(a&&!Array.isArray(a))throw Error(`[EXECUTION] assistant toolCalls must be an array`);let s=e.content??``;if(i.debug(`[ROUND-${r}] Provider response completed`,{executionId:t,conversationId:n,round:r,responseLength:s.length,hasToolCalls:Array.isArray(a)&&a.length>0,toolCallsCount:Array.isArray(a)?a.length:0}),e.role!==`assistant`)throw Error(`Unexpected response role: ${e.role}`);let c=e,l=c.toolCalls??[];if(!Array.isArray(l))throw Error(`[EXECUTION] assistantResponse.toolCalls must be an array`);return{assistantResponse:c,assistantToolCalls:l}}function uo(e){let t=e?.metadata?.usageProvenance;if(t===`partial`)return{provenance:`partial`};if(t!==`complete`)return{provenance:`absent`};let n=e.usage,r=e?.metadata,i=n?.promptTokens??r?.promptTokens??r?.inputTokens,a=n?.completionTokens??r?.completionTokens??r?.outputTokens,o=n?.totalTokens??r?.totalTokens,s=n?.cacheReadTokens??r?.cacheReadTokens;return typeof i!=`number`||!Number.isSafeInteger(i)||i<0||typeof a!=`number`||!Number.isSafeInteger(a)||a<0||!Number.isSafeInteger(i+a)||o!==void 0&&o!==i+a?{provenance:`absent`}:{provenance:`complete`,promptTokens:i,completionTokens:a,totalTokens:i+a,...typeof s==`number`&&Number.isSafeInteger(s)&&s>=0&&s<=i&&{cacheReadTokens:s}}}function fo(e){let t=0,n=0,r,i=!1;for(let a of e){if(a.role!==`assistant`)continue;let e=ho(a);e&&(i=!0,t+=e.inputTokens,n+=e.outputTokens,e.cacheReadTokens!==void 0&&(r=(r??0)+e.cacheReadTokens))}if(i)return{promptTokens:t,completionTokens:n,totalTokens:t+n,...r!==void 0&&{cacheReadTokens:r}}}function po(e){let t=fo(e.filter(e=>Ze(e)&&e.data!==void 0).map(Qe));if(t)return{promptTokens:t.promptTokens,completionTokens:t.completionTokens,totalTokens:t.totalTokens}}function mo(){return W()}function ho(e){let t=Jr(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 go(e){let t=uo(e).provenance,n=ho(e);return n?{...n,totalTokens:n.inputTokens+n.outputTokens,usageProvenance:t===`complete`?`complete`:`partial`}:{usageProvenance:t}}const _o=/^peer:[A-Za-z0-9._:-]{1,128}$/,vo=/<(\/?)(peer_message)/gi;function yo(e){return e.replace(vo,`&lt;$1$2`)}function bo(e){if(e.role!==`user`)return;let t=e.metadata?.driverId;return typeof t==`string`&&t.startsWith(`peer:`)?t:void 0}function xo(e){return _o.test(e)?e:`peer:unverified`}function So(e){return e.map(e=>{if(e.type!==`text`)return e;let t=yo(e.text);return t===e.text?e:{...e,text:t}})}function Co(e){if(e.role===`tool`){let t=yo(e.content),n=e.parts?So(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=bo(e),n=yo(e.content),r=e.parts?So(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="${xo(t)}">`,a=`</peer_message>`;return{...e,content:`${i}\n${n}\n${a}`,...r?{parts:[{type:`text`,text:i},...r,{type:`text`,text:a}]}:{}}}function wo(e){return e.map(Co)}async function To(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=[...wo(e.getMessages()),{id:W(),role:`user`,content:s,state:`complete`,timestamp:new Date}],p=n.systemMessage??``,m=f.some(e=>e.role===`system`&&e.content===p),h=p&&!m?[{id:W(),role:`system`,content:p,state:`complete`,timestamp:new Date},...f]:f;u=to(t,t.aiProviderInfo.model,r);let g={model:t.aiProviderInfo.model,effort:n.defaultModel?.effort??`auto`,toolChoice:`none`,...n.defaultModel?.maxTokens!==void 0&&{maxTokens:n.defaultModel.maxTokens},...n.defaultModel?.temperature!==void 0&&{temperature:n.defaultModel.temperature},...o.signal&&{signal:o.signal},...o.onTextDelta&&{onTextDelta:o.onTextDelta},...o.onThinkingDelta&&{onThinkingDelta:o.onThinkingDelta},executionId:r,onModelFallback:e=>{no(u,e),o.onExecutionEvent?.(Mr.SWITCHED,{executionId:r,conversationId:a,round:i.currentRound,fromProvider:e.from.provider,fromModel:e.from.model,toProvider:e.to.provider,toModel:e.to.model,reason:e.reason}),_()}},_=()=>{o.onExecutionEvent?.(`provider_request`,{executionId:r,conversationId:a,round:i.currentRound,provider:K(u,t),model:q(u,t.aiProviderInfo.model),messages:h,forcedSummary:!0})};_();let v=Date.now(),y=W(),b={invoked:!1},x=`failure`,S,C;try{S=await Ra((a,s)=>sn((e,n)=>{b.invoked=!0,b.startedAtMs=Date.now();let r=ro(o.traceContext,t.provider,t.currentInfo.provider,y);return t.provider.chat(e,io(n,r))},a,s,o.executionJournal?{journal:o.executionJournal,executionId:r,callId:y,checkpoint:Ia(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 Pt?C=e:At(e,o.signal)&&(x=`interrupted`),e}finally{let e=b.invoked?uo(S):{provenance:`absent`};wa(()=>{o.onExecutionEvent?.(jr.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),...go(S)};e.addAssistantMessage(w,[],T),d=!0,o.onExecutionEvent?.(`assistant_message_committed`,{executionId:r,conversationId:a,round:i.currentRound,message:w}),Aa(e,o,r,a,{round:i.currentRound})}catch(n){if(n instanceof Pt)throw n;if(d){s.warn(`Forced summary announcement failed`,{error:n instanceof Error?n.message:String(n)});return}if(At(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}),Aa(e,o,r,a,l)}}function Eo(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 Do=.95;function Oo(e,t,n){let r=ri(e,{usageFloorTokens:n}),i=mi(t),a=i*Do,o=i>0?Math.round(r.usedTokens/i*1e4)/100:100;return{shouldBlock:r.usedTokens>a,estimatedTokens:r.usedTokens,contextLimit:i,thresholdTokens:a,thresholdPercentage:Do*100,usedPercentage:o,serializedTokens:r.serializedTokens,...r.providerTokens!==void 0&&{providerTokens:r.providerTokens},...r.usageFloorTokens!==void 0&&{usageFloorTokens:r.usageFloorTokens}}}function ko(e,t,n,r,i,a){let o=n.currentRound,s=Oo(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}),Aa(r,a.fullContext,a.executionId,a.conversationId,{round:o,contextOverflow:!0}),!0}function Ao(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=Jn(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 jo(e,t,n,r,i,a,o,s,c,l,u,d,f,p=to(n,t.defaultModel.model,s),m=W(),h){let g=Date.now(),_={disposition:`preflight-refused`},v,y,b=`failure`,x,S=e=>{i.onExecutionEvent?.(`provider_request`,{executionId:s,conversationId:i.conversationId,round:o,provider:K(p,n),model:q(p,t.defaultModel.model),effort:e.options.effort,messages:e.messages,tools:e.options.tools})};try{let c=await co(e,t,n,r,{signal:i.signal,onTextDelta:u,...i.onThinkingDelta&&{onThinkingDelta:i.onThinkingDelta},onProviderNativeRawPayload:d,...i.maxTokens!==void 0&&{maxTokens:i.maxTokens},...i.temperature!==void 0&&{temperature:i.temperature},...i.withholdHostedTools===!0&&{nativeWebTools:{webSearch:!1,webFetch:!1}},executionId:s,onModelFallback:e=>{no(p,e),_.model=e.to.model,i.onExecutionEvent?.(Mr.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=Ua(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())},()=>ro(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 Pt)throw y=e,a.discardPending(),e;if(At(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}),Aa(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`?uo(v):{provenance:`absent`};wa(()=>{i.onExecutionEvent?.(jr.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 Mo(e){return!e.success&&e.metadata?.errorCode===`unknown_tool`}function No(e){return!e.success&&e.metadata?.errorCode===`argument_decode_error`}function Po(e,t,n,r,i,a){let o=!1,s=0,c=0;for(let l of e){if(!l.id)throw Error(`Tool call missing ID: ${JSON.stringify(l)}`);let e=l.function?.name;if(!e||e.length===0)throw Error(`[EXECUTION] Tool call "${l.id}" missing function name`);let u=t.results.find(e=>e.executionId===l.id),d=t.errors.find(e=>Ki(e)&&e.executionId===l.id),f,p={round:r};if(typeof u?.metadata?.toolProvenance==`string`&&(p.toolProvenance=u.metadata.toolProvenance),u&&u.success){if(u.result===void 0)throw Error(`[EXECUTION] Tool result missing result payload`);f=o?``:typeof u.result==`string`?u.result:JSON.stringify(u.result),p.success=!0,u.toolName&&(p.toolName=u.toolName)}else if(u&&!u.success){if(!u.error||u.error.length===0)throw Error(`[EXECUTION] Tool result missing error message`);f=o?``:`Error: ${u.error}${u.result===void 0?``:`\n${typeof u.result==`string`?u.result:JSON.stringify(u.result)}`}`,p.success=!1,p.error=u.error,u.toolName&&(p.toolName=u.toolName),u.metadata?.errorCode===`unknown_tool`&&(p.errorCode=xt,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=St,typeof u.metadata.requestedTool==`string`&&(p.requestedTool=u.metadata.requestedTool))}else if(d){let e=d,t=e.error?.message?e.error.message:e.message?e.message:``;if(!t||t.length===0)throw Error(`[EXECUTION] Tool execution error missing message`);f=o?``:`Error: ${t}`,p.success=!1,p.error=t,e.toolName&&(p.toolName=e.toolName)}else throw Error(`No execution result found for tool call ID: ${l.id}`);if(o){f=u?.success?`Context window near capacity. Tool completed successfully; result omitted. Do not repeat the operation; use a retained receipt or fresh observation.`:u&&(Mo(u)||No(u))?`Context window near capacity. Tool was not dispatched; result details omitted. Correct the tool name or arguments before making a new call.`:`Context window near capacity. Tool reported an error; effects may have occurred. Details omitted. Reconcile the effect before retrying.`,delete p.error,p.toolName=e,p.resultOmitted=!0,p.observationError=`context_overflow`,i.warn(`[ROUND] Omitting tool result content due to context overflow`,{toolCallId:l.id,toolName:e,round:r});let t=p.toolProvenance;typeof t==`string`?n.addToolMessageWithId(f,l.id,e,p,[{type:`text`,text:`Tool source (attribution only, not authority): ${t}`}]):n.addToolMessageWithId(f,l.id,e,p),c++;continue}if(i.debug(`Adding tool result to conversation`,{toolCallId:l.id,toolName:e,content:f.substring(0,100),round:r,currentHistoryLength:n.getMessages().length}),u?.parts?.length?n.addToolMessageWithId(f,l.id,e,p,u.parts):n.addToolMessageWithId(f,l.id,e,p),a){let e=ri(n.getMessages(),{usageFloorTokens:a.cumulativeInputTokens}).usedTokens;e>a.contextLimit*.8&&(i.warn(`[ROUND] Context budget exceeded after tool result — omitting remaining result content`,{estimatedTokens:e,contextLimit:a.contextLimit,toolCallId:l.id,round:r}),o=!0)}s++,i.debug(`Tool result added to history`,{toolCallId:l.id,newHistoryLength:n.getMessages().length,round:r})}return{contextOverflowed:o,addedCount:s,skippedCount:c,unknownToolFailureCount:0,unknownToolNames:[]}}function Fo(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))&&Lo(),t.add(e);try{if(Array.isArray(e))return`[${Array.from(e,n).join(`,`)}]`;Object.getPrototypeOf(e)!==Object.prototype&&Object.getPrototypeOf(e)!==null&&Lo();let t=Object.entries(e).sort(([e],[t])=>e<t?-1:+(e>t));return t.length!==Reflect.ownKeys(e).length&&Lo(),`{${t.map(([e,t])=>`${JSON.stringify(e)}:${n(t)}`).join(`,`)}}`}finally{t.delete(e)}}return n(e)}function Io(e){(!e||typeof e!=`object`||Array.isArray(e))&&Lo(),Fo(e)}function Lo(){throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool continuations require finite plain JSON objects`)}function Ro(e,t,n=[]){let r=structuredClone(t),i=structuredClone(n),a=!1,o,s=!1,c=!1,l=Promise.resolve();return{continuation:{get action(){return structuredClone(r)},get waits(){return structuredClone(i)},request:t=>{if(c)return Promise.reject(new L(`EXECUTION_RECOVERY_INVALID`,`The tool continuation has already settled`));let n=structuredClone(t),u=l.then(async()=>{if(o)throw o;if(a)throw new L(`EXECUTION_RECOVERY_REQUIRED`,`A started tool effect cannot become a pre-effect wait`,[r.actionId]);if(!n||typeof n.kind!=`string`||!n.kind)throw new L(`EXECUTION_RECOVERY_INVALID`,`Continuation request kind is required`);Io(n.data);let t=Fo([n.kind,n.data]),c=i.find(e=>Fo([e.request.kind,e.request.data])===t);if(!c){let t={...r,requestId:W(),kind:n.kind,data:n.data};await V(e,{...r,kind:`tool-wait`,recordId:`${t.requestId}:wait`,request:{requestId:t.requestId,kind:t.kind,data:t.data}}),c={request:t},i.push(c)}if(c.response)return structuredClone(c.response.response);throw s=!0,new I(i.filter(e=>!e.response).map(e=>e.request))});return l=u.catch(e=>{e instanceof I||(o=e)}),u}},settle:async()=>{if(c=!0,await l,o)throw o;if(s)throw new I(i.filter(e=>!e.response).map(e=>e.request))},admit:async e=>{if(c)throw new L(`EXECUTION_RECOVERY_INVALID`,`The tool continuation has already settled`);if(await l,o)throw o;let t=i.filter(e=>!e.response);if(t.length)throw new I(t.map(e=>e.request));if(a)throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool effect admission was repeated`);a=!0;try{await e()}catch(e){throw o=e,e}}}}async function zo(e,t){let n=[],r=[...e];for(let e of t.toolResponses??[]){let i=structuredClone(e);if(!i||typeof i.requestId!=`string`||!i.requestId||typeof i.responseId!=`string`||!i.responseId)throw new L(`EXECUTION_RECOVERY_INVALID`,`Tool response identities are required`);Io(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(Fo(a.response)!==Fo(i))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`Tool response identity was already used`);continue}let o=r.find(e=>e.kind===`tool-wait`&&e.request.requestId===i.requestId);if(!o||o.kind!==`tool-wait`||o.parentCallId!==t.callId||r.some(e=>`actionId`in e&&e.actionId===o.actionId&&(e.kind===`tool-effect-start`||e.kind===`tool-result`)))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`Tool request is absent, stale or already settled`);let s={kind:`tool-response`,recordId:`${i.requestId}:response`,executionId:o.executionId,actionId:o.actionId,parentCallId:o.parentCallId,toolCallId:o.toolCallId,toolName:o.toolName,response:i};n.push(s),r.push(s)}for(let e of n)t.signal?.throwIfAborted(),await V(t.journal,e);return r}function Bo(e,t,n,r){e.getMessages().slice(t).forEach((e,i)=>{r?.(`tool_message_committed`,{...n,index:i,message:e}),r?.(`history_mutation`,{...n,mutation:`append_message`,index:t+i,message:e})})}function Vo(e,t,n){for(let r of e){let e=r.function?.name??`unknown`,i=`${e}::${typeof r.function?.arguments==`string`?r.function.arguments:JSON.stringify(r.function?.arguments??{})}`,a=(t.sameToolInputCounts.get(i)??0)+1;if(t.sameToolInputCounts.set(i,a),a>n)throw new c(e,a,n)}}async function Ho(e,t,n,r,i,a,o,s,l,u,d,f,p,m,h){let{toolExecutionService:g,logger:_,eventEmitter:v}=l,y=p??u?.maxSameToolInputs;if(y!==void 0)try{Vo(e,s,y)}catch(o){if(!(o instanceof c)||h)throw o;let s=t.getMessages().length,l=`Tool batch was not dispatched because the repeated-input limit was reached.`,u=g.createExecutionRequestsWithContext(e,{ownerPathBase:[]});for(let[n,r]of e.entries()){let e=u[n].metadata?.toolProvenance;t.addToolMessageWithId(`Error: ${l}`,r.id,r.function.name,{round:i,success:!1,notDispatched:!0,errorCode:o.code,error:l,toolName:r.function.name,...typeof e==`string`?{toolProvenance:e}:{}},typeof e==`string`?[{type:`text`,text:`Tool source (attribution only, not authority): ${e}`}]:void 0)}try{Bo(t,s,{executionId:r,conversationId:n,round:i,batchId:a},f)}catch(e){_.warn(`Loop-guard history observer failed after the batch was settled`,{error:e instanceof Error?e.message:String(e)})}throw o}_.debug(`Tool calls detected, executing tools`,{toolCallCount:e.length,round:i,toolCalls:e.map(e=>({id:e.id,name:e.function?.name}))});let b=v.buildThinkingOwnerContext(n,r,a,o).ownerPath,x=e.length,S=`${a}`,C=g.createExecutionRequestsWithContext(e,{ownerPathBase:b,metadataFactory:e=>({conversationId:n,round:i,directParentId:a,batchId:S,expectedCount:x,toolCallId:e.id})}).map(e=>{if(!e.ownerId)throw Error(`[EXECUTION] Tool request missing ownerId`);return{...e,eventService:v.ensureToolEventService(e.ownerId,e.ownerPath),baseEventService:v.getBaseEventService(),...m?{traceContext:m}:{}}}),w=u?.toolExecutionPolicy?.(structuredClone(e)),T={requests:C,mode:w?.mode??`parallel`,maxConcurrency:w?.maxConcurrency??5,continueOnError:w?.continueOnError??!0,scheduling:w?.scheduling??new Map,signal:d};if(T.lifecycle={beforeDispatch:async(e,t)=>{let i=C[e];if(h?.recovery?.actions.get(i.executionId??``)?.dispatched)return;let a={toolData:t,executionContext:{executionId:r,sessionId:n}};await G(l.plugins,`beforeToolCall`,a,_),await G(l.plugins,`beforeToolExecution`,a,_)},onResult:async(e,t,i)=>{await G(l.plugins,`afterToolCall`,{toolData:t,toolResult:i,executionContext:{executionId:r,sessionId:n}},_)}},h){let{journal:e,parentCallId:t}=h,n=C.map(e=>h.recovery?.actions.get(e.executionId??``)),i=C.map(e=>({actionId:h.recovery?.actions.get(e.executionId??``)?.actionId??W(),parentCallId:t,executionId:r,toolCallId:e.executionId??``,toolName:e.toolName})),a=i.map((t,r)=>Ro(e,t,n[r]?.waits));for(let t=0;t<C.length;t++){let r=C[t];r.argumentDecodeError!==void 0||n[t]?.intent||n[t]?.result||await V(e,{kind:`tool-intent`,recordId:`${i[t].actionId}:intent`,...i[t],parameters:r.parameters})}T.journal={continuation:e=>a[e].continuation,settle:e=>a[e].settle(),beforeDispatch:t=>n[t]?.dispatched?Promise.resolve():V(e,{kind:`tool-dispatch`,recordId:`${i[t].actionId}:dispatch`,...i[t]}),onResult:(t,n)=>V(e,{kind:`tool-result`,recordId:`${i[t].actionId}:result`,...i[t],result:n,loadedDeferredTools:g.getLoadedDeferredTools()}),beforeEffect:(t,n)=>a[t].admit(()=>V(e,{kind:`tool-effect-start`,recordId:`${i[t].actionId}:effect-start`,...i[t],parameters:n}))},T.recoveredResults=new Map(n.flatMap((e,t)=>e?.result?[[t,e.result]]:[]))}f?.(`tool_batch_started`,{executionId:r,conversationId:n,round:i,batchId:S,mode:T.mode,maxConcurrency:T.maxConcurrency,requestCount:C.length,tools:C.map(e=>e.toolName)}),C.forEach((e,t)=>{f?.(`tool_execution_request`,{executionId:r,conversationId:n,round:i,batchId:S,index:t,toolName:e.toolName,toolCallId:e.executionId,parameters:e.argumentDecodeError===void 0?e.parameters:{argumentDecodeError:e.argumentDecodeError},ownerPath:e.ownerPath})});let E=await g.executeTools(T),ee=E.results.filter(Mo).map(e=>e.toolName).filter(e=>typeof e==`string`&&e.length>0);E.results.forEach((e,t)=>{f?.(`tool_execution_result`,{executionId:r,conversationId:n,round:i,batchId:S,index:t,toolName:e.toolName,toolCallId:e.executionId,success:e.success,result:e.result,error:e.error,metadata:e.metadata})});let D=E.results.filter(e=>!Mo(e)&&!No(e));s.toolsExecuted.push(...D.map(e=>{if(!e.toolName||e.toolName.length===0)throw Error(`[EXECUTION] Tool result missing toolName`);return e.toolName})),s.toolCallOutcomes.push(...D.map(e=>({...e.executionId===void 0?{}:{id:e.executionId},name:e.toolName??``,success:e.success})));let te=h?.recovery?.checkpoint.contextLimit??mi(u?.defaultModel?.model??``),ne=t.getMessages().length,re=Po(e,E,t,i,_,{contextLimit:te,cumulativeInputTokens:s.cumulativeInputTokens});return Bo(t,ne,{executionId:r,conversationId:n,round:i,batchId:S},f),v.emitToolResultsEvents(e,E,s.toolsExecuted,n,r,i,a,o),v.clearToolEventServices(),{...re,unknownToolFailureCount:ee.length,unknownToolNames:ee}}async function Uo(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=wo(m),g=a.ephemeralSystemContext,_=g&&g.trim().length>0?[...h,Yn(g)]:h,{thinkingNodeId:v,previousThinkingNodeId:y}=ao(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 Or(d.getBaseEventService(),{ownerType:e.ownerType,ownerId:e.ownerId,ownerPath:e.ownerPath})}),ko(m,o,e,n,u,{fullContext:a,executionId:i,conversationId:r}))return!0;p>1&&a.onTextDelta?.(`
7
+
8
+ `),n.beginAssistant();let b=mo(),{wrappedOnTextDelta:x,wrappedOnProviderNativeRawPayload:S,settleStreamingChunkHooks:C}=Ao(a,n,i,p,l,u),w=to(s,o.defaultModel.model,i),T=W(),E;try{E=await jo(_,o,s,f,a,n,p,i,b,u,x,S,t=>void(e.providerFailure=t),w,T,a.executionJournal?Ia(m,e,a,o,t,c.toolExecutionService.getLoadedDeferredTools()):void 0)}finally{await C()}if(E===null)return!0;let{assistantResponse:ee,assistantToolCalls:D}=lo(E,i,a.conversationId,p,u);if(D.length>0&&(a.toolChoice??o.defaultModel?.toolChoice)===`none`)throw Error(`Provider returned tool calls despite toolChoice none; no tools were executed.`);await G(l,`afterProviderCall`,{messages:m,responseMessage:E},u),await G(l,`onMessageAdded`,{message:E},u);let te=typeof ee.content==`string`&&ee.content.trim().length>0;if(D.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=go(ee),re=ne.inputTokens??0;re>0&&(e.cumulativeInputTokens=re);for(let e of D)n.appendToolCall(e);let ie=a.signal?.aborted?`interrupted`:`complete`;n.commitAssistant(ie,{round:p,usageObservationId:b,executionId:i,providerId:K(w,s),providerCallId:T,modelId:q(w,s.aiProviderInfo.model),...ne});let ae=n.getMessages().at(-1);return a.onExecutionEvent?.(`assistant_message_committed`,{executionId:i,conversationId:a.conversationId,round:p,message:ee}),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=ee,D.length===0?(u.debug(`[AGENT-FLOW-CONTROL] Round ${p} completed - no tool calls, execution finished for agent ${a.conversationId}`),d.emitAssistantMessageComplete(ee,i,p,r,v,y),!0):Eo(await Ho(D,n,r,i,p,v,y,e,c,o,a.signal,a.onExecutionEvent,a.maxSameToolInputs??o.maxSameToolInputs,a.traceContext,a.executionJournal?{journal:a.executionJournal,parentCallId:T}:void 0),e,u)?!0:(u.debug(`Round ${p} completed for agent ${a.conversationId}`),!1)}function Wo(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 Go(e,t){return t===0||e<t}async function Ko(t,n,r,i,a,o,s,c,l,u=!1){let d=Wo(a,i);for(;!u&&!s.forcedSummaryInstruction&&Go(s.currentRound,d)&&!(c?.aborted||(s.currentRound++,await Uo(s,d,t,n,r,i,a,o,l))||c?.aborted););let f=t.getMessages(),p=f.length>0?f[f.length-1]:void 0,m=p?.role===`assistant`&&typeof p.content==`string`&&p.content.length>0&&(!(`toolCalls`in p)||p.toolCalls.length===0);if(!c?.aborted){if(i.allowToolOnlyCompletion===!0){let t=p?.role===`tool`;if(!m&&!t)throw new e(s.currentRound,{conversationId:n,executionId:r});return}m||await To(t,o,a,r,s,n,i,l.logger,d,i.executionJournal?l.toolExecutionService.getLoadedDeferredTools():void 0)}}async function qo(e,t,n,r,i,a,o,s,c,l,u,d){let f={...Fa(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 L(`EXECUTION_RECOVERY_INVALID`,e)}function X(e){return typeof e==`string`&&e.length>0}function Jo(e,t,n,r=!0){try{return Yo(structuredClone(e),t,n,r)}catch(e){if(e instanceof L)throw e;return Y(`Execution journal is not a valid recoverable record prefix`)}}function Yo(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`),Io(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`),Io(e.response),l.add(e.requestId),u.add(e.responseId)}}else Y(`Unknown journal record`)}o!==n&&Y(`Only the latest model invocation can be recovered`);let d,f,p,m=new Map;for(let e of i){if(`callId`in e){if(e.callId!==n)continue;e.kind===`model-request`?((d||f)&&Y(`Duplicate or out-of-order model request`),d=e):e.kind===`model-cache-hit`?((d||f||e.response.role!==`assistant`)&&Y(`Invalid cache settlement`),f=e.response,p=e.checkpoint):e.kind===`model-response`?((!d||f||e.response.role!==`assistant`)&&Y(`Invalid model response`),f=e.response):Y(`This model invocation has no recoverable tool response`);continue}if(e.parentCallId!==n)continue;f||Y(`Tool action precedes its model response`);let r=f.toolCalls?.find(t=>t.id===e.toolCallId);(!r||e.toolName!==r.function.name)&&Y(`Action does not belong to the saved model response`);let i=m.get(e.toolCallId);if(i&&i.actionId!==e.actionId&&Y(`Multiple actions claim one tool call`),i||(i={actionId:e.actionId,intent:!1,dispatched:!1,effectStarted:!1,waits:[]},m.set(e.toolCallId,i)),i.result&&Y(`Tool action continued after settlement`),e.kind===`tool-intent`)(i.intent||i.dispatched||i.effectStarted)&&Y(`Out-of-order action intent`),J(JSON.parse(r.function.arguments))!==J(e.parameters)&&Y(`Action arguments differ from saved intent`),i.intent=!0;else if(e.kind===`tool-dispatch`)(!i.intent||i.dispatched||i.effectStarted)&&Y(`Out-of-order dispatch`),i.dispatched=!0;else if(e.kind===`tool-effect-start`)(!i.dispatched||i.effectStarted)&&Y(`Out-of-order effect admission`),i.waits.some(e=>!e.response)&&Y(`Tool effect precedes a required response`),i.effectStarted=!0;else if(e.kind===`tool-wait`)(!i.dispatched||i.effectStarted)&&Y(`Tool wait is outside pre-effect dispatch`),i.waits.push({request:{...e.request,executionId:t,actionId:e.actionId,parentCallId:e.parentCallId,toolCallId:e.toolCallId,toolName:e.toolName}});else if(e.kind===`tool-response`){let t=i.waits.find(t=>t.request.requestId===e.response.requestId);(!t||t.response||i.effectStarted)&&Y(`Out-of-order tool response`),t.response=e.response}else if(e.kind===`tool-result`){let t=e.result,n=t.metadata?.errorCode===Ct;n&&(t.success||i.dispatched||i.effectStarted||t.metadata?.dispatchStatus!==`not-dispatched`||t.result!==null)&&Y(`Skipped tool result cannot claim a dispatched or applied effect`),(!i.intent&&t.metadata?.errorCode!==`argument_decode_error`&&!n||t.executionId!==r.id||t.toolName!==r.function.name||typeof t.success!=`boolean`||t.success&&(!i.effectStarted||t.result===void 0)||!t.success&&!X(t.error))&&Y(`Invalid tool result linkage or payload`),e.loadedDeferredTools!==void 0&&(!Array.isArray(e.loadedDeferredTools)||e.loadedDeferredTools.some(e=>!X(e)))&&Y(`Invalid tool residency settlement`),i.result=t,i.loadedDeferredTools=e.loadedDeferredTools}else Y(`Unknown action record`)}let h=d?.checkpoint??p;(!f||!h||h.version!==1||h.effectAdmission!==`required`)&&Y(`A supported effect-admission checkpoint is required`),(!Number.isSafeInteger(h.round)||h.round<1||!Number.isFinite(h.contextLimit)||h.contextLimit<=0||!Number.isFinite(h.cumulativeInputTokens)||h.cumulativeInputTokens<0||!Array.isArray(h.messages)||!Array.isArray(h.sameToolInputCounts))&&Y(`Invalid round checkpoint`);let g=new Set;for(let e of h.messages)g.has(e.id)&&Y(`Duplicate checkpoint message identity`),g.add(e.id);for(let e of[...h.messages,f])(!X(e.id)||!(e.timestamp instanceof Date)||!Number.isFinite(e.timestamp.getTime())||(e.role===`assistant`?e.content!==null&&typeof e.content!=`string`:typeof e.content!=`string`)||e.role===`tool`&&!X(e.toolCallId)||![`user`,`assistant`,`system`,`tool`].includes(e.role)||![`complete`,`interrupted`].includes(e.state))&&Y(`Invalid checkpoint message`);let _=new Set;for(let[e,t]of h.sameToolInputCounts)(!X(e)||_.has(e)||!Number.isSafeInteger(t)||t<0)&&Y(`Invalid repeated-input checkpoint`),_.add(e);h.maxSameToolInputs!==void 0&&(!Number.isSafeInteger(h.maxSameToolInputs)||h.maxSameToolInputs<1)&&Y(`Invalid repeated-input limit`),r&&(!Array.isArray(f.toolCalls)||f.toolCalls.length===0)&&Y(`Saved response has no tool calls`),g.clear();for(let e of f.toolCalls??[])(!X(e.id)||g.has(e.id)||e.type!==`function`||!X(e.function?.name)||typeof e.function.arguments!=`string`)&&Y(`Invalid or duplicate saved tool call`),g.add(e.id);d?.options.toolChoice===`none`&&(f.toolCalls?.length??0)>0&&Y(`Saved invocation prohibited tool execution`);let v=[...m.values()].filter(e=>e.effectStarted&&!e.result);if(v.length)throw new L(`EXECUTION_RECOVERY_REQUIRED`,`Tool effects have no durable result; reconcile them before resuming`,v.map(e=>e.actionId));return{checkpoint:h,response:f,actions:m,offeredDeferredTools:d?.options.tools?.filter(e=>e.deferLoading).map(e=>e.name)??[]}}function Xo(e){throw new L(`EXECUTION_RECOVERY_CONFLICT`,e)}function Zo(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,...go(e.response),executionId:t.executionId,providerCallId:t.callId,round:e.checkpoint.round}}}function Qo(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 $o(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))&&Xo(`Current history differs from the saved runtime checkpoint`);let a=e.slice(i.length);if(!a.length)return;Qo(a[0],Zo(t,n),n.callId,n.executionId)||Xo(`Current assistant does not match the saved response`);let o=t.response.toolCalls??[];a.length>o.length+1&&Xo(`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||Xo(`History contains a tool result without durable settlement`),n}),l=new Qn;for(let e of i)l.addMessage(e);l.addMessage(a[0]),Po(s,{results:c,errors:[]},l,t.checkpoint.round,r.logger,{contextLimit:t.checkpoint.contextLimit,cumulativeInputTokens:es(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)&&Xo(`Existing tool result conflicts with the durable result`)}}function es(e){let t=go(e.response).inputTokens??0;return t>0?t:e.checkpoint.cumulativeInputTokens}async function ts(e,t,n,r,i){let a=J(e.getMessages()),o=()=>{(a!==J(e.getMessages())||e.hasPendingAssistant())&&Xo(`History changed during execution recovery`)};o();let s=i?.records??await n.journal.read(n.executionId),c=i?.batch??Jo(s,n.executionId,n.callId);n.signal?.throwIfAborted(),o();let l=structuredClone(e.getMessages());$o(l,c,n,r);let u=await zo(s,n);u.length!==s.length&&(c=Jo(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 Qn;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(Zo(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:es(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=Eo(await Ho(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())&&Xo(`History changed while announcing execution recovery`);if(n.signal?.aborted)throw jt(`Execution recovery interrupted`,n.signal.reason);return{executionId:n.executionId,callId:n.callId,messages:structuredClone(e.getMessages()),batch:c,state:h,stop:i}}finally{r.eventEmitter.clearToolEventServices(),r.eventEmitter.resetOwnerPathBases()}}async function ns(e,t,n,r){let{executionId:i,callId:a,messages:o}=await ts(e,t,n,r);return{executionId:i,callId:a,messages:o}}function Z(e){throw new L(`EXECUTION_RECOVERY_INVALID`,e)}function rs(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 is(e,t,n,r,i,a){let o=J(e.getMessages()),s=await n.journal.read(n.executionId);n.signal?.throwIfAborted();let c=s.findLast(e=>e.kind===`model-request`||e.kind===`model-cache-hit`);if((!c||!(`callId`in c))&&Z(`No recoverable model invocation exists`),c.kind===`model-request`&&!s.some(e=>e.kind===`model-response`&&e.callId===c.callId))throw new L(`EXECUTION_RECOVERY_REQUIRED`,`The latest model invocation has no durable response; reconcile it before resuming`);let l=Jo(s,n.executionId,c.callId,!1),u=rs(l.checkpoint.continuation);(u.model.provider!==r.defaultModel.provider||u.model.model!==r.defaultModel.model)&&Z(`Active provider and model must match the saved runtime before continuation`);let d=l.checkpoint.messages.find(e=>e.id===u.turnMessageId);(!d||d.role!==`user`||d.metadata?.executionId!==n.executionId)&&Z(`Continuation has no matching original input`),(u.toolSearch??`auto`)!==(r.toolSearch??`auto`)&&Z(`Tool residency policy differs from the saved runtime`),r.responseFormat&&r.responseFormat.type!==`text`&&Z(`Current runtime requires an unsupported structured-output validator`),u.options.maxSameToolInputs!==l.checkpoint.maxSameToolInputs&&Z(`Conflicting repeated-input limits`),u.kind===`summary`&&(l.response.toolCalls?.length??0)>0&&Z(`Terminal summary cannot dispatch tools`);for(let e of l.actions.values())e.result&&e.loadedDeferredTools===void 0&&Z(`Settled action lacks runtime residency state`);let f={...r,defaultModel:structuredClone(u.model),timeout:u.timeout,maxExecutionRounds:u.options.maxExecutionRounds,maxSameToolInputs:u.options.maxSameToolInputs},p=i(f);if(p.currentInfo.provider!==u.model.provider&&Z(`Active provider manager differs from the saved runtime`),o!==J(e.getMessages()))throw new L(`EXECUTION_RECOVERY_CONFLICT`,`History changed while reading the execution journal`);let m=await ts(e,t,{...n,callId:c.callId},a,{batch:l,records:s}),h=Za(e.getMessages(),f,new Date(u.startedAt),n.executionId,t,{...u.options,signal:n.signal,executionJournal:n.journal,onTextDelta:n.onTextDelta,onThinkingDelta:n.onThinkingDelta,onExecutionEvent:n.onExecutionEvent,traceContext:n.traceContext});a.eventEmitter.prepareOwnerPathBases(t);try{if(await Ko(e,t,n.executionId,h,f,p,m.state,n.signal,a,m.stop||u.kind===`summary`),n.signal?.aborted)throw jt(`Execution continuation interrupted`,n.signal.reason);return Fa(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*as(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 os(e,t,n){return{executionId:e,...t===void 0?{}:{driverId:t},...n===void 0?{}:{turnSource:n}}}var ss=class{toolExecutionService;aiProviders;tools;conversationHistory;plugins=[];logger;eventEmitter;cacheService;constructor(e,t,n,r,i,a){if(this.toolExecutionService=new xa(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 ja(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 is(this.conversationHistory.getConversationStore(e),e,t,n,e=>Ga(this.aiProviders,this.tools,e),{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService})}resumeToolCalls(e,t){return ns(this.conversationHistory.getConversationStore(e),e,t,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter})}registerPlugin(e){let t=e.priority??0,n=this.plugins.findIndex(e=>(e.priority??0)<t);n===-1?this.plugins.push(e):this.plugins.splice(n,0,e),this.logger.debug(`Plugin registered`,{pluginName:e.name,priority:t})}removePlugin(e){let t=this.plugins.findIndex(t=>t.name===e);return t===-1?!1:(this.plugins.splice(t,1),this.logger.debug(`Plugin removed`,{pluginName:e}),!0)}getPlugin(e){return this.plugins.find(t=>t.name===e)}getPlugins(){return[...this.plugins]}async execute(e,t,n,r){let i=Ya(),a=new Date,o=Xa(r,`execute`),s=Za(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=Ga(this.aiProviders,this.tools,n);this.eventEmitter.emitExecutionStartEvent(e,n,t,c,o,i);let l=qa(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,os(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);Ka(c);for(let e of l.getMessages())e.role===`assistant`&&(d.runningAssistantCount++,d.lastTrackedAssistantMessage=e);return await Ko(l,o,i,s,n,c,d,r?.signal,{toolExecutionService:this.toolExecutionService,plugins:this.plugins,logger:this.logger,eventEmitter:this.eventEmitter,cacheService:this.cacheService}),qo(e,l,i,a,d,o,u,r?.signal?.aborted??!1,r,this.plugins,this.logger,this.eventEmitter)}catch(e){if(R(e))throw e;return At(e,r?.signal)?{...Fa(l,i,a,d.toolsExecuted,{turnMessageId:u,interrupted:!0}),interrupted:!0}:(await Ja(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*as(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 cs(e){let t=new Hi;if(e.aiProviders)for(let n of e.aiProviders)t.addProvider(n.name,n,{ownership:e.providerOwnership&&Object.hasOwn(e.providerOwnership,n.name)?e.providerOwnership[n.name]:`owned`});return e.defaultModel&&t.setCurrentProvider(e.defaultModel.provider,e.defaultModel.model),t}async function ls(e){let{config:t,aiProviders:n,tools:r,agentFactory:i,conversationHistory:a,moduleRegistry:o,eventEmitter:s,eventService:c,logger:l}=e;if(l.debug(`Starting ConversationAgent initialization with independent managers`),await Promise.all([n.initialize(),r.initialize(),i.initialize()]),t.modules){for(let e of t.modules)await o.registerModule(e,{autoInitialize:!0,validateDependencies:!0});l.debug(`Modules registered and initialized`,{moduleCount:t.modules.length,moduleNames:t.modules.map(e=>e.name)})}if(t.tools)for(let e of t.tools)e instanceof Ot&&c&&e.setEventService(c),r.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Wr(e,t,n)},e.provenance),l.debug(`Tool registered during initialization`,{toolName:e.schema.name});let u;t.cache?.enabled&&(u=new Gi(new Wi({maxEntries:t.cache.maxEntries,ttlMs:t.cache.ttlMs}),new Ui));let d=new ss(n,r,a,c,t.executionContext,u);if(t.ask&&d.setAskHandler(t.ask),t.plugins)for(let e of t.plugins)d.registerPlugin(e),e.subscribeToModuleEvents&&(await e.subscribeToModuleEvents(s),l.debug(`Plugin subscribed to module events`,{pluginName:e.name}));return l.debug(`ConversationAgent initialization completed successfully with independent managers`),d}async function us(e){try{let t=await ls(e.ctx);e.setExecutionService(t),e.setFullyInitialized(!0)}catch(t){throw e.ctx.logger.error(`ConversationAgent initialization failed`,{error:t instanceof Error?t.message:String(t)}),t}}function ds(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 fs(e){e.logger.debug(`Destroying ConversationAgent instance`,{name:e.name});let t=[],n=async(n,r)=>{try{await r(),e.logger.debug(n)}catch(r){let i=r instanceof Error?r:Error(String(r));t.push(i),e.logger.error(`Error during ConversationAgent destruction step`,{step:n,error:i.message})}};if(e.isFullyInitialized&&e.moduleRegistry&&await n(`All modules disposed`,()=>e.moduleRegistry.disposeAllModules()),e.executionService){let t=e.executionService.getPlugins();for(let e of t)await n(`Plugin disposed: ${e.name}`,()=>e.dispose());e.logger.debug(`ExecutionService plugins cleaned up`)}return e.moduleRegistry&&await n(`ModuleRegistry cleared`,()=>e.moduleRegistry.clearAllModules()),e.eventEmitter&&await n(`EventEmitter disposed`,()=>e.eventEmitter.dispose()),await n(`Tools disposed`,()=>e.tools.dispose()),await n(`AIProviders disposed`,()=>e.aiProviders.dispose()),e.resetState(),t.length===0?e.logger.info(`ConversationAgent instance destroyed successfully`,{name:e.name}):e.logger.warn(`ConversationAgent instance destroyed with cleanup failures`,{name:e.name,failureCount:t.length}),{errors:t}}var ps=class{tail=Promise.resolve();claimed=0;async acquire(e){let t=this.claimed>0;this.claimed+=1;let n=this.tail,r=()=>{};this.tail=new Promise(e=>{r=e});let i=!1,a=()=>{i||(i=!0,--this.claimed,r())};if(await n,e?.aborted)throw a(),ms(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 ms(e,t){let n=e.reason;return At(n)&&n.name===`AbortError`?n:jt(t?`Run aborted while queued behind another run on this instance`:`Run aborted before it started`,n)}function hs(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 gs(e,n){if(!e.aiProviders||e.aiProviders.length===0)throw new t(`At least one AI provider must be specified in aiProviders array`);let r=e.defaultModel,i=r?.model??n.defaultModel;if(!i)throw new t(`No model specified: set config.defaultModel.model or the AgentFactory defaultModel option`);let a=r?.provider??e.aiProviders[0]?.name??n.defaultProvider;if(!a)throw new t(`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:a,model:i,temperature:r?.temperature??.7,...r?.maxTokens!==void 0&&{maxTokens:r.maxTokens},...r?.topP!==void 0&&{topP:r.topP}},systemMessage:e.systemMessage??n.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 vs(e,t){return e.totalCreated++,e.activeCount++,t?e.fromTemplates++:e.customConfigured++,e.templateUsageRatio=e.totalCreated>0?e.fromTemplates/e.totalCreated:0,e}var ys=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 bs(e){let t=e,n=typeof t.initialize==`function`?t.initialize:void 0,r=typeof t.cleanup==`function`?t.cleanup:void 0;if(n!==void 0||r!==void 0)return{...n?{initialize:()=>n.call(e)}:{},...r?{cleanup:()=>r.call(e)}:{}}}async function xs(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 Ss(e,n.name,r)}t.push(n)}}function Ss(e,t,n){let r=e instanceof Error?e:Error(String(e));return Object.assign(r,{failedStep:t,rollbackErrors:n})}var Cs=class{agentTemplates;initialized=!1;logger;options;activeAgents;pendingAgents=new Set;creationStats;lifecycleEvents;constructor(e={},t={}){this.agentTemplates=new ys,this.logger=k(`AgentFactory`),this.options=hs(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,r,i=!1){let a,o=this.admit();try{a=gs(r,this.options);let s=a;if(this.options.strictValidation){let e=Nt(a);if(!e.isValid)throw new n(`Invalid agent configuration: ${e.errors.join(`, `)}`)}let c;if(await xs([{name:`beforeCreate`,run:()=>this.lifecycleEvents.beforeCreate?.(s)},{name:`construct`,run:()=>{c=new e(s)}},{name:`initialize`,run:()=>c?bs(c)?.initialize?.():void 0,undo:()=>c?bs(c)?.cleanup?.():void 0},{name:`commit`,run:()=>{if(!c)throw new t(`Agent was not constructed`);this.activeAgents.set(o,c),vs(this.creationStats,i)},undo:()=>{this.activeAgents.delete(o),this.creationStats.activeCount--,this.creationStats.totalCreated--,i?this.creationStats.fromTemplates--:this.creationStats.customConfigured--}},{name:`afterCreate`,run:()=>c?this.lifecycleEvents.afterCreate?.(c,s):void 0}]),this.pendingAgents.delete(o),!c)throw new t(`Agent was not constructed`);return this.logger.info(`Agent created successfully`,{agentId:o,model:a.defaultModel.model,provider:a.defaultModel.provider}),c}catch(e){this.pendingAgents.delete(o);let t=e instanceof Error?e:Error(String(e));throw this.lifecycleEvents.onCreateError&&a&&await this.lifecycleEvents.onCreateError(t,a),this.logger.error(`Failed to create agent`,{error:t.message,model:r.defaultModel?.model,provider:r.defaultModel?.provider,hasTools:!!r.tools?.length}),t}}admit(){if(this.activeAgents.size+this.pendingAgents.size>=this.options.maxConcurrentAgents)throw new t(`Maximum concurrent agents limit reached: ${this.options.maxConcurrentAgents}`);let e=this.options.idFactory(),n=0;for(;this.activeAgents.has(e)||this.pendingAgents.has(e);){if(n+=1,n>16)throw new t(`Agent id factory keeps returning ids that are already in use`);e=this.options.idFactory()}return this.pendingAgents.add(e),e}async createFromTemplate(e,n,r={}){let i=this.agentTemplates.getTemplate(n);if(!i)throw new t(`Template not found: ${n}`);let a=this.applyTemplate(i,r);a.warnings.length>0&&this.logger.warn(`Template application warnings`,{templateId:n,warnings:a.warnings});let o=await this.createAgent(e,a.config,!0);return this.logger.info(`Agent created from template`,{templateId:n,modified:a.modified,warnings:a.warnings.length}),o}registerTemplate(e){this.agentTemplates.registerTemplate(e)}unregisterTemplate(e){return this.agentTemplates.unregisterTemplate(e)}getTemplates(){return this.agentTemplates.getTemplates()}getTemplate(e){return this.agentTemplates.getTemplate(e)}findTemplates(e){return this.agentTemplates.findTemplates(e)}applyTemplate(e,t={}){return this.agentTemplates.applyTemplate(e,t)}async destroyAgent(e){let t=this.activeAgents.get(e);if(!t)return!1;try{return await bs(t)?.cleanup?.(),this.activeAgents.delete(e),this.creationStats.activeCount--,this.lifecycleEvents.onDestroy&&await this.lifecycleEvents.onDestroy(e),this.logger.info(`Agent destroyed`,{agentId:e}),!0}catch(t){throw this.logger.error(`Error destroying agent`,{agentId:e,error:t instanceof Error?t.message:String(t)}),t}}getCreationStats(){return{...this.creationStats}}getActiveAgents(){return new Map(this.activeAgents)}validateConfiguration(e){return Nt(e)}};function ws(e,n,r){if(!e.name||e.name.trim()===``)throw new t(`Module name is required`);if(!e.version||e.version.trim()===``)throw new t(`Module version is required`);let i=e.getModuleType(),a=n.validateTypeDescriptor(i);if(!a.valid)throw new t(`Invalid module type: ${a.errors.join(`, `)}`,{moduleName:e.name,errors:a.errors});a.warnings.length>0&&r.warn(`Module type validation warnings`,{moduleName:e.name,warnings:a.warnings})}async function Ts(e,n,r,i){let a=e.getModuleType();if(!a.dependencies||a.dependencies.length===0)return;for(let r of a.dependencies)if(!n.hasType(r))throw new t(`Module '${e.name}' depends on unregistered type '${r}'`,{moduleName:e.name,dependencyType:r});let o=new Set;for(let e of r.values())o.add(e.getModuleType().type);let s=[];for(let e of a.dependencies)o.has(e)||s.push(e);s.length>0&&i.warn(`Module has unmet dependencies`,{moduleName:e.name,missingDependencies:s})}function Es(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 Ds(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 Os(){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 ks(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 As(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 js(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 Ms(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 Ns=class{registeredTypes=new Map;logger;constructor(){this.logger=k(`ModuleDescriptorRegistry`),this.registerBuiltinTypes()}registerType(e){let n=this.validateTypeDescriptor(e);if(!n.valid)throw new t(`Invalid module type descriptor: ${n.errors.join(`, `)}`,{type:e.type,errors:n.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 n=this.findDependentTypes(e);if(n.length>0)throw new t(`Cannot unregister module type '${e}' - it is required by: ${n.join(`, `)}`,{type:e,dependentTypes:n});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 ks(e,e=>this.getType(e))}resolveDependencies(e){return As(e,e=>this.getType(e),e=>this.hasType(e))}checkCompatibility(e){return js(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 Os())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 Ms(this.registeredTypes)}};const Ps={REGISTERED:`module.registered`,UNREGISTERED:`module.unregistered`};var Fs=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 Ns,this.logger=k(`ModuleRegistry`)}async registerModule(e,n={}){if(this.isDisposing)throw new t(`Cannot register modules during disposal`);if(ws(e,this.typeRegistry,this.logger),this.modules.has(e.name))throw new t(`Module with name '${e.name}' is already registered`,{moduleName:e.name});n.validateDependencies!==!1&&await Ts(e,this.typeRegistry,this.modules,this.logger),this.modules.set(e.name,e),this.moduleOptions.set(e.name,n.initOptions||{}),this.registrationOrder.push(e.name);let r=e.getModuleType();this.moduleStatuses.set(e.name,{name:e.name,type:r.type,enabled:e.isEnabled(),initialized:!1,hasEventEmitter:!!this.eventEmitter,registrationTime:new Date,dependencies:r.dependencies||[],dependents:[]}),this.moduleStats.set(e.name,{totalExecutions:0,successfulExecutions:0,failedExecutions:0,averageExecutionTime:0,totalExecutionTime:0}),n.autoInitialize&&await this.initializeModule(e.name,n.initTimeout),this.eventEmitter&&await this.eventEmitter.emit(Ps.REGISTERED,{data:{moduleName:e.name,moduleType:r.type},timestamp:new Date})}async unregisterModule(e){let n=this.modules.get(e);if(!n)return!1;let r=Es(e,this.modules);if(r.length>0)throw new t(`Cannot unregister module '${e}' - it is required by: ${r.join(`, `)}`,{moduleName:e,dependents:r});n.isInitialized()&&n.dispose&&await n.dispose(),this.modules.delete(e),this.moduleOptions.delete(e),this.moduleStatuses.delete(e),this.moduleStats.delete(e);let i=this.registrationOrder.indexOf(e);i!==-1&&this.registrationOrder.splice(i,1);let a=this.initializationOrder.indexOf(e);return a!==-1&&this.initializationOrder.splice(a,1),this.eventEmitter&&await this.eventEmitter.emit(Ps.UNREGISTERED,{data:{moduleName:e},timestamp:new Date}),!0}async initializeModule(e,n){let r=this.modules.get(e);if(!r)throw new t(`Module '${e}' not found`);if(r.isInitialized())return;let i=this.moduleOptions.get(e),a=r.initialize(i,this.eventEmitter);if(n&&n>0){let t,r=new Promise((r,i)=>{t=setTimeout(()=>{i(Error(`Module '${e}' initialization timed out after ${n}ms`))},n)});await Promise.race([a.then(e=>(clearTimeout(t),e)),r])}else await a;let o=this.moduleStatuses.get(e);o&&(o.initialized=!0,o.initializationTime=new Date),this.initializationOrder.includes(e)||this.initializationOrder.push(e)}async initializeAllModules(e){let n=Array.from(this.modules.keys());if(n.length===0)return;let r=n.map(e=>this.modules.get(e).getModuleType().type),i=this.typeRegistry.resolveDependencies(r);if(!i.resolved){let e=[];throw i.missingDependencies.length>0&&e.push(`Missing dependencies: ${i.missingDependencies.join(`, `)}`),i.circularDependencies.length>0&&e.push(`Circular dependencies: ${i.circularDependencies.map(e=>e.join(` -> `)).join(`; `)}`),new t(`Cannot initialize modules: ${e.join(`; `)}`,{missingDependencies:i.missingDependencies,circularDependencies:i.circularDependencies.map(e=>e.join(` -> `))})}for(let t of i.order){let r=n.find(e=>this.modules.get(e).getModuleType().type===t);r&&await this.initializeModule(r,e)}}async executeModule(e,n){let r=this.modules.get(e);if(!r)throw new t(`Module '${e}' not found`);if(!r.isInitialized())throw new t(`Module '${e}' is not initialized`);if(!r.isEnabled())throw new t(`Module '${e}' is disabled`);let i=this.moduleStats.get(e),a=Date.now();try{if(!r.execute)throw new t(`Module '${e}' does not support execute()`);let o=await r.execute(n),s=Date.now()-a;i.totalExecutions++,i.successfulExecutions++,i.totalExecutionTime+=s,i.averageExecutionTime=i.totalExecutionTime/i.totalExecutions,i.lastExecutionTime=new Date;let c=this.moduleStatuses.get(e);return c&&(c.lastActivity=new Date),o}catch(e){let t=Date.now()-a;throw i.totalExecutions++,i.failedExecutions++,i.totalExecutionTime+=t,i.averageExecutionTime=i.totalExecutionTime/i.totalExecutions,i.lastExecutionTime=new Date,e}}getModule(e){return this.modules.get(e)}getModulesByType(e){return Array.from(this.modules.values()).filter(t=>t.getModuleType().type===e)}getAllModules(){return Array.from(this.modules.values())}getModuleNames(){return Array.from(this.modules.keys())}hasModule(e){return this.modules.has(e)}getModuleStatus(e){return this.moduleStatuses.get(e)}getAllModuleStatuses(){return Array.from(this.moduleStatuses.values())}getModuleStats(e){return this.moduleStats.get(e)}getAllModuleStats(){let e={};for(let[t,n]of this.moduleStats.entries())e[t]={...n};return e}async disposeAllModules(){this.isDisposing=!0;let e=[...this.initializationOrder].reverse();for(let t of e){let e=this.modules.get(t);if(e&&e.isInitialized())try{e.dispose&&await e.dispose();let n=this.moduleStatuses.get(t);n&&(n.initialized=!1)}catch(e){this.logger.error(`Failed to dispose module`,{name:t,error:e instanceof Error?e.message:String(e)})}}this.initializationOrder=[],this.isDisposing=!1}clearAllModules(){this.modules.clear(),this.moduleOptions.clear(),this.moduleStatuses.clear(),this.moduleStats.clear(),this.registrationOrder=[],this.initializationOrder=[],this.isDisposing=!1}getRegistryStats(){return Ds(this.modules,this.moduleStats)}},Is=class extends Ur{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=yi(e);let t=e.logging?.enabled===!1?`silent`:e.logging?.level;this.logger=k(`ConversationAgent`,t?{level:t}:{}),this.startTime=Date.now(),Gr(e),this.config={...e,aiProviders:[...e.aiProviders],...e.providerOwnership?{providerOwnership:{...e.providerOwnership}}:{}},this.aiProviders=cs(e),this.tools=bi(()=>this.config),this.agentFactory=new Cs,this.conversationHistory=new $n,this.eventEmitter=Ei(),this.moduleRegistry=new Fs(this.eventEmitter),this.eventService=e.eventService||Cr,this.agentEventService=Or(this.eventService,{ownerType:`agent`,ownerId:this.conversationId,ownerPath:Di(this.conversationId,this.config.executionContext)});let n=Ci({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,wi(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=[...Di(this.conversationId,this.config.executionContext),{type:`tool`,id:n.executionId??e}];return this.executionService.invokeRuntimeTool(e,t,{...n,baseEventService:this.eventService,eventService:Or(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=wn(t.output);return await Ni(this.executionDeps(),e,t,n)}return await ki(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory()}})}async*runStream(e,t={}){this.assertNotDestroyed();let n=await this.runQueue.acquire(t.signal);try{if(await this.ensureFullyInitialized(),t.output){let n=wn(t.output);return yield*Pi(this.executionDeps(),e,t,n)}return yield*Ai(this.executionDeps(),e,t)}finally{this.resetEphemeralHistory(),n()}}resetEphemeralHistory(){this.config.retainHistory===!1&&this.clearHistory()}runQueue=new ps;executionDeps(){return{conversationId:this.conversationId,config:this.config,logger:this.logger,getHistory:()=>this.getHistory(),getExecutionService:()=>this.executionService,emitAgentEvent:(e,t)=>this.emitAgentEvent(e,t)}}getHistory(){return Ii(this.conversationHistory,this.conversationId)}getFullHistory(){return Li(this.conversationHistory,this.conversationId)}addHistoryEntry(e){Ri(this.conversationHistory,this.conversationId,e)}clearHistory(){zi(this.conversationHistory,this.conversationId)}injectMessage(e,t,n){Bi(this.conversationHistory,this.conversationId,e,t,n)}injectRawMessage(e){Vi(this.conversationHistory,this.conversationId,e)}async updateTools(e){return this.configManager.updateTools(e)}async updateConfiguration(e){return this.configManager.updateConfiguration(e)}async getConfiguration(){return this.configManager.getConfiguration()}setModel(e){this.configManager.setModel(e)}getModel(){return this.configManager.getModel()}updateSystemPrompt(e){this.configManager.setSystemMessage(e),this.conversationHistory.getConversationStore(this.conversationId).setSystemPrompt(e)}getSystemPrompt(){return this.configManager.getSystemMessage()}registerTool(e){this.configManager.registerTool(e,this.tools)}unregisterTool(e){this.tools.removeTool(e)}getOfferedToolSchemas(){return this.tools.getOfferedTools()}getConfig(){return{...this.config,aiProviders:[...this.config.aiProviders],...this.config.providerOwnership?{providerOwnership:{...this.config.providerOwnership}}:{}}}swapDefaultProvider(e,t,n={}){this.aiProviders.addProvider(e.name,e,n),this.config={...this.config,aiProviders:Object.values(this.aiProviders.getProviders()),providerOwnership:{...this.config.providerOwnership,[e.name]:n.ownership??`owned`}},this.configManager.setModel({provider:e.name,model:t})}getStats(){return ds({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,fs({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 us({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){Ti(this.agentEventService,this.conversationId,this.config.executionContext,e,t)}};const Ls=25e3,Rs=5e5,zs=/^tool-result:[A-Za-z0-9_-]{22,64}$/u,Bs=Symbol.for(`@robota-sdk/tool-result-admitted`);var Vs=class extends Error{code;constructor(e){super(`Tool result admission failed (${e})`),this.code=e,this.name=`ToolResultAdmissionError`}};function Hs(e){return Object.getOwnPropertyDescriptor(e,Bs)?.value===!0}function Us(e){return Object.defineProperty({...e},Bs,{value:!0})}function Ws(e){if(e.parts?.length&&e.parts.every(e=>e.type===`text`)){let t=e.parts.map(e=>e.type===`text`?e.text:``).join(`
9
+ `);if(e.success&&e.data===t||!e.success&&e.data===void 0&&e.error===t)return t}if(e.parts?.length)return JSON.stringify({success:e.success,data:e.data,error:e.error,parts:e.parts});if(e.success)return typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;let t=e.data===void 0?``:typeof e.data==`string`?e.data:JSON.stringify(e.data)??``;return`${e.error??``}${t}`}function Gs(e){return Number.isSafeInteger(e)&&e>0}function Ks(e,t){let n=e.warningChars??1e4,r=e.hardChars??25e3,i=e.repositoryMaxChars??5e5;if(!Gs(n)||!Gs(r)||!Gs(i)||n>=r||r>i||i>5e5)throw new Vs(`invalid-policy`);if(t===void 0)return{warningChars:n,hardChars:r};if(!Gs(t))throw new Vs(`invalid-override`);return{warningChars:n,hardChars:Math.max(r,Math.min(t,i))}}async function qs(e,t,n={},r){let{warningChars:i,hardChars:a}=Ks(n,r),o=Ws(t),s=o.length;if(s>i&&n.onWarning?.({toolName:e,resultChars:s,warningChars:i}),s>a){if(!n.spillStore)throw new Vs(`spill-unavailable`);let e;try{e=(await n.spillStore.write(o)).reference}catch{throw new Vs(`spill-write-failed`)}if(!zs.test(e)||e.length>a)throw new Vs(`invalid-reference`);let r=t.view?{view:t.view}:{};return Us(t.success?{success:!0,data:e,...r}:{success:!1,error:`Tool failure details: ${e}`,...r})}return Us(t)}const Js={safe:`plan`,moderate:`default`,full:`acceptEdits`},Ys=`inherit-allowlist`;function Xs(e){let t;for(let n=0;n<e.length;n+=1){let r=e[n];if(t===`'`){r===`'`&&(t=void 0);continue}if(r===`\\`){n+=1;continue}let i=e[n+1];if(r==="`"||r===`$`&&i===`(`)return!0;if(t===`"`){r===`"`&&(t=void 0);continue}if(r===`'`||r===`"`){t=r;continue}if(r===`;`||r===`|`||r===`
10
+ `||(r===`<`||r===`>`)&&i===`(`)return!0;if(r===`&`){let t=e[n-1];if(t!==`>`&&t!==`<`&&i!==`>`)return!0}}return!1}function Zs(e){let t={segments:[],current:``,quote:void 0,substitutionDepth:0};for(let n=0;n<e.length;n+=1){let r=$s(t,e,n);if(r!==void 0){n=r;continue}let i=ec(t,e,n);if(i!==void 0){n=i;continue}if(tc(t,e[n]))continue;let a=nc(t,e,n);if(a!==void 0){n=a;continue}t.current+=e[n]}return Qs(t),t.segments}function Qs(e){let t=e.current.trim();t!==``&&e.segments.push(t),e.current=``}function $s(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 ec(e,t,n){let r=t[n];if(r==="`")return Qs(e),n;if(r===`$`&&t[n+1]===`(`)return Qs(e),e.substitutionDepth+=1,n+1}function tc(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 nc(e,t,n){let r=t[n];if((r===`<`||r===`>`)&&t[n+1]===`(`)return Qs(e),e.substitutionDepth+=1,n+1;if(r===`)`&&e.substitutionDepth>0)return Qs(e),--e.substitutionDepth,n;if(r===`;`||r===`|`||r===`
11
+ `||r===`&`&&rc(t,n))return Qs(e),n}function rc(e,t){let n=e[t-1];return n!==`>`&&n!==`<`&&e[t+1]!==`>`}const ic=/[.+^${}()|[\]\\]/g;function ac(e,t){let n,r=``;for(let i of e){if(i===n){n=void 0;continue}if(n===void 0&&(i===`'`||i===`"`)){n=i;continue}if(n!==void 0&&(i===` `||i===` `))return;if(n===void 0&&(i===` `||i===` `)){r.endsWith(` `)||(r+=` `);continue}if(/[^\x20-\x7e]|[$`\\!%~<>()[\]{}?#]/u.test(i)||!t&&i===`*`)return;r+=i}return n===void 0?r:void 0}function oc(e){let t=e.replace(ic,`\\$&`).replace(/\*\*/g,`.+`).replace(/\*/g,`.*`);return RegExp(`^${t}$`)}function sc(e,t,n){let r=oc(e);if(n===`deny`){if(r.test(t))return`match`;let n=Zs(t);if(n.some(e=>r.test(e)))return`match`;let i=ac(e,!0);if(i===void 0)return`unevaluable`;let a=oc(i);for(let e of n){let t=ac(e,!1);if(t!==void 0&&a.test(t))return`match`}return`unevaluable`}return r.test(t)?e.includes(`*`)&&Xs(t)?`no-match`:`match`:`no-match`}function cc(e){let t=e.replace(/\*\*(?:\/\*\*)+/g,`**`).split(/(\/\*\*\/|\/\*\*$|^\*\*\/|\*\*)/).map(e=>e===`/**/`?`(?:/.*)?/`:e===`/**`?`(?:/.*)?`:e===`**/`?`(?:.*/)?`:e===`**`?`.*`:e.replace(ic,`\\$&`).replace(/\*/g,`[^/]*`).replace(/\uE000/g,`\\*`)).join(``);return RegExp(`^${t}$`)}function lc(e){return e.startsWith(`/`)||/^[A-Za-z]:(?=\/|$)/.test(e)}function uc(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 dc(e,t){let n=uc(e),r=uc(t);return lc(n)&&!lc(r)?`unevaluable`:cc(n).test(r)?`match`:`no-match`}const fc=/^(\*|[a-z][a-z0-9+.-]*):\/\/(\[[0-9a-fA-F:.]+\]|[^/\\:?#@[\]]+)(?::(\d+|\*))?(\/[^?#]*)?$/i,pc=new Set([`http`,`https`,`ws`,`wss`,`ftp`]),mc={http:`80`,https:`443`,ws:`80`,wss:`443`,ftp:`21`};function hc(e){return e.replace(/\.$/,``).toLowerCase()}function gc(e){try{let t=new URL(`http://${e}/`).hostname;return t===``||t.includes(`.`)?null:t}catch{return null}}function _c(e,t=!1){let n=hc(e).replace(/\*\*(?:\.\*\*)+/g,`**`).split(`.`),r=[],i=`[^.]+(?:\\.[^.]+)*`;for(let[e,a]of n.entries()){let o=e===0,s=e===n.length-1;if(a===`**`){o&&s?r.push(i):s?r.push(`(?:\\.${i})?`):r.push(`${o?``:`\\.`}(?:${i}\\.)?`);continue}let c=!o&&n[e-1]===`**`,l=o||c?``:`\\.`;if(a===`*`)r.push(`${l}${t&&!o?`[^.]*`:i}`);else if(a.includes(`**`))return null;else if(a.includes(`*`))r.push(`${l}${a.replace(ic,`\\$&`).replace(/\*/g,`[^.]*`)}`);else{let e=gc(a);if(e===null)return null;r.push(`${l}${e.replace(ic,`\\$&`)}`)}}return RegExp(`^${r.join(``)}$`)}function vc(e){try{let t=e.split(`/`).map(e=>decodeURIComponent(e));return t.some(e=>e.includes(`/`))?null:t.join(`/`)}catch{return null}}function yc(e){let t;try{t=new URL(e)}catch{return null}let n=t.protocol.slice(0,-1).toLowerCase();return!pc.has(n)||t.hostname===``||t.username!==``||t.password!==``?null:t}function bc(e,t,n=!1){if(e.includes(`*`)){let r=_c(e,n);return r===null?`unevaluable`:r.test(t)?`match`:`no-match`}let r;try{r=new URL(`http://${e}/`).hostname}catch{return`unevaluable`}return hc(r)===t?`match`:`no-match`}function xc(e,t,n){return e===void 0?t.port===``:e===`*`||e===(t.port===``?mc[n]:t.port)}function Sc(e,t){let n=vc(t),r=vc(e.replace(/%2a/gi,``));return n===null||r===null?`unevaluable`:cc(r).test(n)?`match`:`no-match`}function Cc(e,t){let n=fc.exec(e);if(n===null)return`unevaluable`;let[,r,i,a,o]=n,s=yc(t);if(s===null)return`unevaluable`;let c=s.protocol.slice(0,-1).toLowerCase();if(r!==`*`&&r.toLowerCase()!==c)return`no-match`;let l=bc(i,hc(s.hostname));return l===`match`?xc(a,s,c)?o===void 0?`match`:Sc(o,s.pathname):`no-match`:l}function wc(e,t){if(!e.startsWith(`domain:`))return Cc(e,t);let n=/^domain:([^/\\:?#@[\]\s]+)$/.exec(e);if(n===null)return`unevaluable`;let r=hc(n[1]);if(r.includes(`**`)||r.split(`.`).some(e=>e===``))return`unevaluable`;let i=yc(t);return i===null||i.protocol!==`http:`&&i.protocol!==`https:`?`unevaluable`:bc(r,hc(i.hostname),!0)}const Tc={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`}},Ec={plan:`deny`,default:`approve`,acceptEdits:`approve`,bypassPermissions:`auto`,auto:`approve`},Dc=[`.git`,`.claude`,`.agents`],Oc=[`.mcp.json`,`.gitconfig`,`.npmrc`,`.bashrc`,`.bash_profile`,`.bash_login`,`.zshrc`,`.zshenv`,`.zprofile`,`.profile`];function kc(e){return e.replace(/\\/g,`/`).split(`/`).filter(e=>e!==``&&e!==`.`)}function Ac(e){let t=[];for(let n of kc(e))n===`..`&&t.length>0&&t[t.length-1]!==`..`?t.pop():t.push(n);return t}function jc(e,t={}){let n=t.pathProtection,r=Pc.exec(e),i=r!==null&&t.homeDirectory!==void 0?`${t.homeDirectory}/${r[1]??``}`:e,a=i.startsWith(`/`)?Mc(i):t.cwd===void 0?void 0:Mc(`${t.cwd}/${i}`);if(a!==void 0&&n?.protectedPaths.some(e=>{let t=Mc(e);return a===t||a.startsWith(`${t}/`)}))return!0;let o=Ac(i),s=o[o.length-1];if(s!==void 0&&Oc.includes(s))return!0;let c=[...Dc,...n?.protectedDirectoryNames??[]],l=[`.claude/worktrees`,...n?.writableWorktreeContainers??[]].map(Ac);for(let e=0;e<o.length;e+=1){if(!c.includes(o[e]))continue;let t=l.find(t=>t.length>0&&t.every((t,n)=>o[e+n]===t)&&o[e+t.length]!==void 0);if(t!==void 0){e+=t.length;continue}return!0}return!1}function Mc(e){let t=[];for(let n of kc(e))n===`..`?t.pop():t.push(n);return`/${t.join(`/`)}`}function Nc(e){return e.replace(/^(['"])(.*)\1$/,`$2`)}const Pc=/^(?:~|\$HOME|\$\{HOME\})(?=\/|$)(.*)$/;function Fc(e,t){let n=Nc(e),r=Pc.exec(n),i;if(r!==null){let e=r[1]??``;if(t.homeDirectory===void 0)return e.replace(/\/+/g,``)===``;i=Mc(`${t.homeDirectory}/${e}`)}else if(n===``||n.startsWith(`$`))return!1;else if(n.startsWith(`/`))i=Mc(n);else{if(t.cwd===void 0)return!1;i=Mc(`${t.cwd}/${n}`)}if(kc(i).length<=1||t.homeDirectory!==void 0&&i===Mc(t.homeDirectory))return!0;if(t.cwd!==void 0){let e=Mc(t.cwd);if(e===i||e.startsWith(`${i}/`))return!0}return!1}const Ic=new Set([`rm`,`rmdir`]),Lc=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 Rc(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=Lc.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 zc(e,t){return Zs(e).some(e=>{let n=e.split(/\s+/).filter(e=>e!==``),r=Rc(n),i=n[r];if(i===void 0)return!1;let a=i.slice(i.lastIndexOf(`/`)+1);if(!Ic.has(a))return!1;let o=!1;return n.slice(r+1).some(e=>!o&&e===`--`?(o=!0,!1):!o&&e.startsWith(`-`)?!1:Fc(e,t))})}const Bc=new Set([`ls`,`cat`,`echo`,`pwd`,`head`,`tail`,`grep`,`wc`,`which`,`stat`,`du`,`cd`]),Vc=new Set([`-exec`,`-execdir`,`-ok`,`-okdir`,`-delete`,`-fprint`,`-fprint0`,`-fprintf`,`-fls`]),Hc={ls:`aAlhtrSR1dFGinpsucCgmoQvx`,cat:`nbsvetAE`,head:`nqvc`,tail:`nqvcfF`,grep:`rinlLvcwxEFGPHhoqsABCmz`,wc:`lwcmL`,stat:`cftx`,du:`hsacdkmx`,which:`a`,pwd:`LP`,cd:`LP`},Uc=/^--?[A-Za-z0-9-]*(file|from|contents)(=|$)/,Wc=[`--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 Gc(e){if(!e.startsWith(`--`)||e.length<=2)return!1;let t=e.split(`=`,1)[0];return Wc.some(e=>e.startsWith(t))}function Kc(e,t){if(il(t).some(e=>Uc.test(e.text)||Gc(e.text)))return!0;if(e===`find`)return il(t).some(e=>e.text===`-L`||e.text===`-follow`);let n=Hc[e];return n!==void 0&&il(t).some(({text:e})=>e.startsWith(`--`)||!/^-[A-Za-z]/.test(e)?!1:[...e.slice(1)].some(e=>!/\d/.test(e)&&!n.includes(e)))}const qc=new Set([`status`,`log`,`diff`,`show`,`rev-parse`,`ls-files`,`describe`,`branch`,`remote`]),Jc=new Set([`-l`,`--list`,`--show-current`,`--merged`,`--no-merged`,`--contains`,`--no-contains`,`--points-at`]),Yc=new Set([`-a`,`--all`,`-r`,`--remotes`,`-v`,`-vv`,`--verbose`,`--color`,`--no-color`]),Xc=new Set([`/dev/null`]),Zc=/[A-Za-z0-9_./:=@+,*?[\]~-]/,Qc=new Set([`$`,"`",`\\`,`!`]),$c=new Set([`*`,`?`,`[`]);function el(e){return/(^|[=,:])[/~]/.test(e)||/^-[A-Za-z]+[/~]/.test(e)||/(^|[/=,:]|^-[A-Za-z]+)\.\.(\/|$)/.test(e)||/(^|[=,])[A-Za-z][A-Za-z0-9]*:/.test(e)||tl(e)}function tl(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 nl(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 rl(e){let t=[],n=``,r=!1,i=!1,a,o,s=!1,c=()=>{i&&=(o===`output`?(!Xc.has(n)||r)&&(s=!0):o===`duplicate`?/^(\d+|-)$/.test(n)||(s=!0):o===`input`?(r||el(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:Qc.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(!Zc.test(l)){s=!0;break}$c.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 il(e){let t=e.findIndex(e=>e.text===`--`);return(t<0?e:e.slice(0,t)).filter(e=>e.text.startsWith(`-`))}function al(e){return e.every(e=>!e.expands&&!Vc.has(e.text))}function ol(e){let t=e.filter(e=>e.text.startsWith(`-`)),n=t.some(e=>Jc.has(e.text));return t.every(e=>Jc.has(e.text)||Yc.has(e.text))&&(n||t.length===e.length)}function sl(e){let[t,...n]=e[0]?.text===`--no-pager`?e.slice(1):e;return t===void 0||t.expands||!qc.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`?ol(n):t.text!==`remote`||n.every(e=>e.text===`-v`||e.text===`--verbose`)}function cl(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=>el(e.text))||Kc(t.text,n)?!1:t.text===`cd`?n.length===1&&n[0].text!==`-`&&!n[0].expands:Bc.has(t.text)?!0:t.text===`find`?al(n):t.text===`git`&&sl(n)}const ll=new Set([`echo`,`which`,`git`]);function ul(e,t){let n;for(let[r,...i]of e)if(!ll.has(r.text))for(let e of i){if(e.text===`--`)continue;if(t===void 0)return!1;let i=t(n,e.text);if(i===void 0)return!1;r.text===`cd`&&(n=i)}return!0}function dl(e,t={}){if(t.otherDirectory===!0||e.length>1e4||nl(e)||/[^\t\n\x20-\x7e]/.test(e))return!1;let n=Zs(e);if(n.length===0)return!1;let r=n.map(rl);if(r.some(e=>e.refused||!cl(e.words)))return!1;let i=r.map(e=>e.words[0].text);return i.includes(`git`)&&i.includes(`cd`)?!1:ul(r.map(e=>e.words),t.resolveInWorkspace)}function fl(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 pl(e,t){Q.set(e,{...Q.get(e),...t})}function ml(e){return Q.get(e)??{}}function hl(e,t){let n=[t,...Q.get(t)?.aliases??[]];if(!e.includes(`*`))return n.includes(e);let r=oc(e);return n.some(e=>r.test(e))}function gl(e,t){let n=/^([A-Za-z_]\w*):([\s\S]*)$/.exec(t);if(n===null)return;let r=n[1],i=Q.get(e);if(i?.argument?.key===r)return`primary`;if(i?.parameters?.includes(r)===!0)return{name:r,value:n[2]}}function _l(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`:oc(e.value).test(String(n))?`match`:`no-match`}function vl(e,t){return t.some(t=>{let n=fl(t);return(n.argPattern===void 0||n.argPattern===`*`||n.argPattern===`**`)&&hl(n.toolName,e)})}function yl(e){return Q.get(e)?.argument?.key}function bl(e,t){let n=yl(e);if(n===void 0)return;let r=t[n];return typeof r==`string`?r:void 0}function xl(e,t,n,r=`allow`){return n.some(n=>Cl(e,t,n,r)===`match`)}function Sl(e,t,n){return n.some(n=>Cl(e,t,n,`deny`)===`unevaluable`)}function Cl(e,t,n,r){let i=fl(n);if(!hl(i.toolName,e))return`no-match`;if(i.argPattern===void 0||i.argPattern===`*`||i.argPattern===`**`)return`match`;let a=gl(e,i.argPattern);if(a===`primary`)return`unevaluable`;if(a!==void 0)return r===`deny`?_l(a,t):`no-match`;let o=Q.get(e)?.argument;if(o===void 0)return`unevaluable`;let s=bl(e,t);if(s===void 0)return`no-match`;switch(o.kind){case`url`:return e===`WebFetch`?wc(i.argPattern,s):Cc(i.argPattern,s);case`path`:return dc(i.argPattern,s);case`command`:return sc(i.argPattern,s,r);case`text`:return oc(i.argPattern).test(s)?`match`:`no-match`;default:{let e=o.kind;throw Error(`unknown argument kind: ${String(e)}`)}}}function wl(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`?zc(a,n):i.kind===`path`&&r?.riskClass===`modify`&&jc(a,n):!1}function Tl(e,t,n,r){return xl(e,t,n,`deny`)||Sl(e,t,n)||wl(e,t,r)}function El(e,t,n={},r={}){return Sl(e,t,n.deny??[])||Tl(e,t,n.ask??[],r)}const Dl=[`workingDirectory`,`cwd`];function Ol(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`&&dl(i,{otherDirectory:Dl.some(e=>t[e]!==void 0),...n.resolveInWorkspace===void 0?{}:{resolveInWorkspace:n.resolveInWorkspace}})?`inspect`:r.riskClass}function kl(e,t,n,r={},i={}){let{allow:a=[],deny:o=[],ask:s=[]}=r,c=Ol(e,t,i),l=n===`plan`&&c!==`inspect`?`deny`:`approve`;return xl(e,t,o,`deny`)||i.ceiling!==void 0&&!xl(e,t,i.ceiling)||Q.get(e)?.repliesToPeer===!0&&i.peerTurn!==!0||Q.get(e)?.notInPeerTurn===!0&&i.peerTurn===!0?`deny`:Sl(e,t,o)?n===`plan`?`deny`:`approve`:Tl(e,t,s,i)||i.askAll===!0?l:n===`bypassPermissions`||xl(e,t,a)||i.sandboxAutoApproved===!0&&c===`execute`&&(n==="default"||n===`acceptEdits`||n===`auto`)?`auto`:c===void 0?Ec[n]:Tc[n][c]}function Al(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 jl=/^[A-Za-z_]\w*:(?!\/\/)/;function Ml(e){return e.slice(0,e.indexOf(`*`)).includes(`__`)}function Nl(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}=fl(n);if(r===``)return`names no tool`;if(t===`allow`&&r.includes(`*`)&&!Ml(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`&&jl.test(i)?`matches a named parameter, which only deny and ask rules may do`:void 0;let a=gl(r,i);if(a!==void 0&&a!==`primary`)return t===`allow`?`matches a named parameter, which only deny and ask rules may do`:void 0;let o=ml(r);if(!(o.parameters===void 0&&jl.test(i)&&gl(r,i)===void 0)){if(o.argument===void 0)return o.riskClass===void 0?void 0:`tool "${r}" declares no argument key, so an argument-scoped pattern can never be evaluated`;if(o.argument.kind===`url`&&(r===`WebFetch`?wc:Cc)(i,`https://probe.invalid/`)===`unevaluable`)return`does not fit the URL pattern grammar scheme://host[:port][/path]${r===`WebFetch`?` or domain:hostname`:``} that "${r}" is matched by`}}function Pl(e,t=`deny`){let n=[];for(let r of e){let e=Nl(r,t);e!==void 0&&n.push({pattern:r,reason:e})}return n}function Fl(e){let t=[];for(let n of e){let{toolName:e,argPattern:r}=fl(n.trim());if(r===void 0||e.includes(`*`))continue;let i=ml(e),a=gl(e,r);if(a===void 0&&i.parameters!==void 0&&i.argument?.kind!==`url`&&jl.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=ml(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 Il(e){return(e??[]).map(e=>`${e}(*)`)}function Ll(e,t){let n=Il(t.allowedTools),r=Pl(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,...Il(t.deniedTools)])]}}const Rl=[`Bash`,`Shell`,`BackgroundProcess`],zl=[`Agent`],Bl=[...Rl,...zl,`ExecuteCommand`,`Computer`],Vl=`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(`.`),Hl=[`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(` `)),Ul=new Set([`run`,`run-script`,`exec`,`dlx`,`x`,`--`]);function Wl(e){return(e.split(/[\\/]/).pop()??e).replace(/(\.exe)?$/i,``).replace(/[\d.]+$/,``)}function Gl(e,t){if(e.length===0)return!0;let n=(e,n,r)=>t&&r?e.startsWith(n):e===n,r=Wl(e[0]);if(Vl.some(t=>n(t,r,e.length===1)))return!0;for(let i of Hl){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(`-`)||Ul.has(o[0]));)o=o.slice(1);return o.length===0||Gl(o,t)}return!1}function Kl(e){let t=e.trim();if(!t.includes(`*`))return!1;let n=t.slice(0,t.indexOf(`*`));return Gl(n.trim().split(/\s+/).filter(e=>e.length>0),n.length>0&&!/\s$/.test(n))}function ql(e){let{toolName:t,argPattern:n}=fl(e),r=e=>e.some(e=>hl(t,e));return r(zl)?!0:t.includes(`*`)?r(Bl):Bl.includes(t)||ml(t).riskClass===`execute`?n===void 0||n.trim()===`*`||Rl.includes(t)&&Kl(n):!1}function Jl(e){return e.filter(e=>!ql(e))}const Yl=1e6,Xl={"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}},Zl=[{pattern:/claude-opus/i,price:{inputPerMillion:15,outputPerMillion:75}},{pattern:/claude-sonnet/i,price:{inputPerMillion:3,outputPerMillion:15}},{pattern:/claude-haiku/i,price:{inputPerMillion:.8,outputPerMillion:4}},{pattern:/gpt-4o-mini/i,price:{inputPerMillion:.15,outputPerMillion:.6}},{pattern:/gpt-4/i,price:{inputPerMillion:2.5,outputPerMillion:10}},{pattern:/gemini-2/i,price:{inputPerMillion:.1,outputPerMillion:.4}},{pattern:/gemini-1/i,price:{inputPerMillion:1.25,outputPerMillion:5}}];function Ql(e){let t=Object.hasOwn(Xl,e)?Xl[e]:void 0;if(t)return t;for(let{pattern:t,price:n}of Zl)if(t.test(e))return n}function $l(e,t,n){let r=Ql(e);if(r)return t/Yl*r.inputPerMillion+n/Yl*r.outputPerMillion}function eu(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 tu(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 nu(){let[{CommandExecutor:e},{HttpExecutor:t}]=await Promise.all([import(`./command-executor-D_UBZHxh-CVZipoOV.js`).then(e=>e.t).then(e=>e.n),import(`./http-executor-ADn4locH-D-8crzF8.js`).then(e=>e.t).then(e=>e.n)]);return[new e,new t]}async function ru(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 nu(),u=new Map;for(let e of l)u.set(e.type,e);let d=[],f=tu(n),p=-1,m,h;for(let e of c){if(!eu(e,f))continue;let r=e.env?{...n,env:{...n.env,...e.env}}:n;for(let n of e.hooks){let e=u.get(n.type);if(!e){a.add(n.type);continue}let c=n.type===`command`&&i!==void 0?await e.execute(n,r,i):await e.execute(n,r);if(c.outcome===`deny`)return{blocked:!0,reason:c.reason||`Blocked by hook`,stdout:d.join(`
12
+ `),...s()};if(c.outcome===`error`){o.push(c);continue}let l=v(c.stdout,t);if(d.push(...l.context),l.blockReason!==void 0)return{blocked:!0,reason:l.blockReason,stdout:d.join(`
13
+ `),...l.permissionDecision===`deny`&&{permissionDecision:`deny`},...s()};if(l.permissionDecision!==void 0&&c.source===`command`){let e=y[l.permissionDecision];e>p?(p=e,m=l.permissionDecision,h=l.updatedInput):e===p&&l.updatedInput!==void 0&&(h=l.updatedInput)}}}let g={blocked:!1,stdout:d.join(`
14
+ `)};m!==void 0&&(g.permissionDecision=m),h!==void 0&&(g.updatedInput=h);let{unknownHookTypes:_,errors:b}=s();return _!==void 0&&(g.unknownHookTypes=_),b!==void 0&&(g.errors=b),g}var iu=class extends Error{guardrailName;guardrailReason;constructor(e,t){super(t),this.guardrailName=e,this.guardrailReason=t,this.name=`GuardrailBlock`}},au=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 iu(e,`Guardrail "${e}" errored: ${t instanceof Error?t.message:String(t)}`)}if(!r.pass)throw new iu(e,r.reason??`Guardrail "${e}" blocked the turn`)}))}catch(e){if(e instanceof iu)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 ou(e,t){return{posture:`advisory`,enforcementReachable:!1,rationale:`Awaited at ${e} but only ${t} is read; \`blocked\` is never consulted.`}}function su(e){for(let t of Object.values(e))Object.freeze(t);return Object.freeze(e)}const cu=su({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:ou(`session-lifecycle.ts`,`nothing`),PreCompact:ou(`compaction-orchestrator.ts`,`nothing`),UserPromptSubmit:ou(`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 lu(e){return cu[e].posture===`enforcing`}function uu(e){if(e.type===`resource_link`)return`Resource reference (not fetched): ${JSON.stringify(e)}`;if(e.type===`resource_embedded`){let t=`${JSON.stringify(e.uri)}${e.mimeType?` (${e.mimeType})`:``}`;return e.text===void 0?`Embedded binary resource ${t}; binary content retained but not transmitted by this adapter.`:`Embedded resource ${t}:\n${e.text}`}if(e.type===`audio_inline`)return`Audio observation (${e.mimeType}); this adapter does not transmit audio payloads.`}export{kl as $,w as $t,Ve as A,Ze as At,ru as B,Oc as Bt,Fe as C,Ln as Ct,De as D,Tn as Dt,ft as E,_i as Et,jt as F,xo as Ft,Jn as G,Ls as Gt,Is as H,Hs as Ht,$l as I,Gt as It,In as J,Ys as Jt,El as K,xe as Kt,Ue as L,Vn as Lt,At as M,Pr as Mt,Zs as N,Rn as Nt,mt as O,po as Ot,Xl as P,lu as Pt,Se as Q,se as Qt,ho as R,nt as Rt,Ll as S,Nr as St,Jr as T,zr as Tt,Dc as U,Ee as Ut,au as V,Yn as Vt,Qt as W,Al as Wt,ml as X,Jl as Xt,$e as Y,Re as Yt,Rs as Z,ce as Zt,L as _,Ir as _t,k as a,Mn as at,hn as b,uu as bt,tr as c,xl as ct,Fl as d,ct as dt,Fr as et,I as f,jr as ft,pi as g,je as gt,Be as h,qs as ht,an as i,Hn as it,mi as j,pl as jt,Pl as k,Ar as kt,Il as l,Hr as lt,gi as m,ni as mt,di as n,et as nt,ke as o,bo as ot,Ie as p,Fn as pt,Mr as q,Xn as qt,Te as r,Lr as rt,sn as s,Un as st,ze as t,zn as tt,Oe as u,qn as ut,He as v,Bn as vt,Js as w,he as wt,ri as x,kr as xt,R as y,vl as yt,Cr as z,be as zt};
15
+ //# sourceMappingURL=node-Ct446qHg.js.map