@robota-sdk/agent-core 3.0.0-beta.90 → 3.0.0-beta.92
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/CHANGELOG.md +7 -0
- package/dist/browser/index.d.ts +2 -0
- package/dist/browser/index.d.ts.map +1 -1
- package/dist/browser/index.js +1 -1
- package/dist/browser/index.js.map +1 -1
- package/dist/node/{index-CjyNzgQN.d.ts → index-CrXqOyiE.d.ts} +3 -1
- package/dist/node/index-CrXqOyiE.d.ts.map +1 -0
- package/dist/node/{index-CagopdzH.d.cts → index-_C864Ezv.d.cts} +3 -1
- package/dist/node/index-_C864Ezv.d.cts.map +1 -0
- package/dist/node/index.cjs +1 -1
- package/dist/node/index.d.cts +1 -1
- package/dist/node/index.d.ts +1 -1
- package/dist/node/index.js +1 -1
- package/dist/node/index.js.map +1 -1
- package/dist/node/testing/index.d.cts +1 -1
- package/dist/node/testing/index.d.ts +1 -1
- package/package.json +1 -1
- package/dist/node/index-CagopdzH.d.cts.map +0 -1
- package/dist/node/index-CjyNzgQN.d.ts.map +0 -1
package/dist/browser/index.js
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
import{C as e,D as t,E as n,O as r,S as i,T as a,_ as o,a as s,b as c,c as l,d as u,f as d,g as f,h as p,i as m,l as h,m as g,n as _,o as v,p as y,r as b,s as x,t as S,u as ee,v as C,w,x as T,y as E}from"./bounded-output-BdWv9SX3.js";import{n as te,r as ne,t as re}from"./verdict-decoder-Dz_rjoIZ.js";import ie from"jssha";const ae={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>ae.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>ae.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date||ae.isPrimitive(e)||ae.isArray(e)||ae.isObject(e)};function oe(e){return{functionCalling:{supported:e},nativeWebTools:{webSearch:{supported:!1,enabled:!1,reason:`Provider does not declare native web search support.`},webFetch:{supported:!1,enabled:!1,reason:`Provider does not declare native web fetch support.`}}}}function se(e,t,n){n?.webSearch===!0&&ce(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&ce(e,`web fetch`,t.nativeWebTools.webFetch)}function ce(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${le(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${le(n.reason)}`)}function le(e){return e?` ${e}`:``}const ue=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function de(e){return typeof e==`string`&&ue.includes(e)}function fe(e,t){return{resolution:e,...t}}const pe=new Map(ue.map((e,t)=>[e,t]));function me(e,t){return{selection:e,effective:null,disposition:`not-applied`,fingerprint:`${t}|${e}|not-applied`}}function he(e,t,n){let r=e?.models[t];if(!r)return me(n,t);let i=(i,a)=>`${t}|${n}|${i}|${a}|${r.nativeControlId}|${e.verifiedAt}`;if(n===`auto`)return r.supportedEfforts.includes(r.defaultEffort)?{selection:n,effective:r.defaultEffort,disposition:`model-default`,fingerprint:i(r.defaultEffort,`model-default`)}:me(n,t);if(r.supportedEfforts.includes(n))return{selection:n,effective:n,disposition:`exact`,fingerprint:i(n,`exact`)};let a=pe.get(n),o=r.supportedEfforts.filter(e=>(pe.get(e)??1/0)<(a??-1)).at(-1);return o?{selection:n,effective:o,disposition:`clamped`,fingerprint:i(o,`clamped`)}:me(n,t)}function ge(e){let t=typeof e.supportsTools==`function`&&e.supportsTools();return e.getCapabilities?.()??oe(t)}function _e(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function ve(e){return e.map(e=>{if(!e.aliases||e.aliases.length===0)return e.type;let t=e.aliases.length===1?`alias`:`aliases`;return`${e.type} (${t}: ${e.aliases.join(`, `)})`}).join(`, `)}function ye(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function be(e,t){if(e)return e.deviations?.[t]?.capabilities??e.vendorDefault}function xe(e,t,n){let r=be(e,t);if(!(!r||r.length===0))return r.includes(n)}function Se(e,t,n,r){return xe(e,t,n)??r}function Ce(e){return`generateImage`in e&&typeof e.generateImage==`function`}function we(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function Te(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.type==`string`&&t.type.length>0&&(typeof t.createImageProvider==`function`||typeof t.createVideoProvider==`function`)}function Ee(e,t){return e.find(e=>e.type===t)}const De=`ToolSearch`,Oe=`yes`,ke=`no`,Ae=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function je(e,t,n){return{id:e,title:t,description:n?.description,options:Ae,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function Me(e,t,n,r){return{id:e,title:t,options:n,maxSelect:1,description:r?.description,allowFreeText:r?.allowFreeText,maxVisible:r?.maxVisible,default:r?.default}}function Ne(e,t,n,r){return{id:e,title:t,options:n,minSelect:r?.minSelect??1,maxSelect:r?.maxSelect??n.length,description:r?.description,maxVisible:r?.maxVisible,default:r?.default}}function Pe(e,t,n){return{id:e,title:t,allowFreeText:!0,description:n?.description,masked:n?.masked,allowEmpty:n?.allowEmpty,placeholder:n?.placeholder,default:n?.default}}function Fe(e){return e.type===`answer`&&e.values.includes(`yes`)}function Ie(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function Le(e,t){if(Ie(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function Re(e,t){if(Ie(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function ze(e,t){return Ie(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}function Be(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 Ve(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 He=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}},Ue=class{initialized=!1;disposed=!1;constructor(e={}){this.initialized=e.readyOnConstruction===!0}async initialize(){this.initialized||(await this.doInitialize(),this.initialized=!0,this.disposed=!1)}async dispose(){await this.doDispose(),this.initialized=!1,this.disposed=!0}isInitialized(){return this.initialized}ensureInitialized(){if(this.disposed)throw Error(`${this.constructor.name} was disposed — re-initialize it before use, or build a new one`);if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function We(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 Ge(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 Ke(e,t,n,r){if(!e)throw Error(`Executor is required for ${t} provider. Configure an executor or use direct execution path.`);if(!r?.model)throw Error(`Model is required for executor execution in ${t} provider.`);return await e.executeChat({messages:n,options:r,provider:t,model:r.model,...r.tools&&{tools:r.tools}})}async function*qe(e,t,n,r){if(!e||!e.executeChatStream)throw Error(`Streaming executor is required for ${t} provider.`);if(!r?.model)throw Error(`Model is required for executor streaming in ${t} provider.`);let i=e.executeChatStream({messages:n,options:r,provider:t,model:r.model,stream:!0,...r.tools&&{tools:r.tools}}),a=!1;for await(let e of i){if(e.kind===`terminal`){if(a)throw Error(`Executor "${t}" emitted more than one stream terminal result.`);a=!0}yield e}if(!a)throw Error(`Executor "${t}" ended a stream without a terminal result.`)}async function*Je(e,t,n,r,i){e.debug?.(`🔍 [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request`,{provider:n,model:i?.model,hasTools:!!i?.tools,toolsCount:i?.tools?.length||0,toolNames:i?.tools?.map(e=>e.name)||[]}),yield*qe(t,n,r,i)}function Ye(e){return e.category===`chat`}function Xe(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 Ze(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function Qe(e){return e.filter(Ye).map(Xe)}function $e(e){return e.role===`user`}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:he(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=fe(r,{nativeControl:{state:`omitted`,reason:`model-effort-not-applied`},providerDispatch:{state:`sent`}});try{i(a)}catch(e){n.warn(`Model-effort outcome observer failed`,{error:e instanceof Error?e.message:String(e)})}return a}function 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={type:`null`};function lt(e){return e.type===`null`||Array.isArray(e.anyOf)&&e.anyOf.some(e=>typeof e==`object`&&!!e&&e.type===`null`)}function ut(e){if(typeof e!=`object`||!e||Array.isArray(e))return e;let t=e;return lt(t)?t:Array.isArray(t.anyOf)?{...t,anyOf:[...t.anyOf,ct]}:{anyOf:[t,ct]}}function dt(e,t={}){return ft(e,t,``)}function ft(e,t,n){if(Array.isArray(e))return e.map((e,r)=>ft(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=ft(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)?lt(o):!1,l=ut(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=ft(r.items,t,`${n}/items`)),Array.isArray(r.anyOf)&&(i.anyOf=r.anyOf.map((e,r)=>ft(e,t,`${n}/anyOf/${r}`))),r.additionalProperties&&typeof r.additionalProperties==`object`?i.additionalProperties=ft(r.additionalProperties,t,`${n}/additionalProperties`):a&&(r.additionalProperties!==!1&&t.onChange?.({path:n,kind:`closed-object`}),i.additionalProperties=!1),i}const pt=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]),mt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);function D(e,t){return e>>>t|e<<32-t}function ht(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(mt),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+(pt[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 gt=32,_t=2e3,vt=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}),yt=new Set(vt),bt=new Set([`__proto__`,`constructor`,`prototype`]),xt=new Set([`title`,`$schema`,`$comment`,`examples`,`default`]);function St(){return{anyOf:[{type:`string`},{type:`number`},{type:`boolean`},{type:`object`},{type:`array`},{type:`null`}]}}const Ct={closedObjects:!1,requireAllProperties:!1,optionalAsNullable:!1,unknownKeywords:`adopt`,unsupportedMembers:[],maxDepth:32,maxNodes:_t},wt={closedObjects:!0,requireAllProperties:!0,optionalAsNullable:!0,unknownKeywords:`strip`,unsupportedMembers:[],maxDepth:32,maxNodes:_t};function O(e,t){return`${e}/${t}`}function Tt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Et(e,t,n,r,i,a){if(!Tt(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(!yt.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=>!yt.has(e)))return{path:t,keyword:`type`,reason:`a node must declare exactly one of 'type' or 'anyOf'`};let c=e.properties;if(Tt(c)){for(let e of Object.keys(c))if(bt.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=Et(c[e],O(O(t,`properties`),e),n+1,r,i,a);if(o)return o}}if(Tt(e.items)){let o=Et(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=Et(e.anyOf[o],O(O(t,`anyOf`),String(o)),n+1,r,i,a);if(s)return s}r.delete(e)}function Dt(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=>!yt.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=St();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 Tt(a)&&(i.properties=Object.fromEntries(Object.keys(a).map(e=>{let i=a[e];return[e,Tt(i)?Dt(i,O(O(t,`properties`),e),n,r):i]}))),Tt(i.items)&&(i.items=Dt(i.items,O(t,`items`),n,r)),Array.isArray(i.anyOf)&&(i.anyOf=i.anyOf.map((e,i)=>Tt(e)?Dt(e,O(O(t,`anyOf`),String(i)),n,r):e)),i}function Ot(e){if(Array.isArray(e))return e.map(Ot);if(Tt(e)){let t={};for(let n of Object.keys(e).sort())t[n]=Ot(e[n]);return t}return e}function kt(e){return ht(JSON.stringify(Ot(e)))}function At(e,t){let n=e.parameters;if(!Tt(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=Et(n,``,0,new Set,{count:0},t);if(r)return{outcome:`rejected`,tool:e,changes:[],rejection:r};let i=[],a=Dt(n,``,t,i),o=t.closedObjects?dt(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`)&&!xt.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 jt={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var Mt=class e{static instance;globalLevel;globalSink;constructor(){this.globalLevel=`warn`}static getInstance(){return e.instance||=new e,e.instance}getGlobalLevel(){return this.globalLevel}setGlobalLevel(e){this.globalLevel=e}getGlobalSink(){return this.globalSink}setGlobalSink(e){this.globalSink=e}},Nt=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??Mt.getInstance().getGlobalSink()??jt}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),Pt(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),Pt(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),Pt(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),Pt(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||Mt.getInstance().getGlobalLevel()}shouldLog(e){let t=this.getLevel();if(t===`silent`)return!1;let n=[`debug`,`info`,`warn`,`error`,`silent`];return n.indexOf(e)>=n.indexOf(t)}forward(e,t,n){let r={timestamp:new Date().toISOString(),level:e,message:t,...n&&{context:n},packageName:this.packageName},i=`[${r.timestamp}] [${r.level.toUpperCase()}] [${r.packageName}] ${r.message}`;switch(e){case`debug`:this.sinkLogger.debug(i,n??{});return;case`info`:this.sinkLogger.info(i,n??{});return;case`warn`:this.sinkLogger.warn(i,n??{});return;case`error`:this.sinkLogger.error(i,n??{});return;case`silent`:return}}};function Pt(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function k(e,t={}){return new Nt(e,t)}function Ft(e){Mt.getInstance().setGlobalLevel(e)}function It(){return Mt.getInstance().getGlobalLevel()}function Lt(e){Mt.getInstance().setGlobalSink(e)}function Rt(){return Mt.getInstance().getGlobalSink()}const A=k(`agents`),zt=k(`ToolSchemaProjection`);var Bt=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=jt){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 Vt(n,t);if(e.done||(await Ht(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 oe(this.supportsTools())}validateConfig(){return!0}validateMessages(e){We(e)}validateTools(e){Ge(e)}projectionProfile(){}projectTools(e,t){let n=this.projectionProfile();if(!n||!e)return e;let r=[];for(let i of e){let e=At(i,n);if(e.outcome!==`rejected`){r.push(e.tool);continue}let a=`${this.name}${t}${i.name}${kt(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`};zt.warn(`tool_schema_quarantined provider=${this.name} model=${t} tool=${i.name} path=${o} keyword=${s} reason=${c}`)}return r}validateNativeWebTools(e){se(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return Ke(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*Je(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Vt(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 Ht(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let Ut=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}({}),Wt=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`},Gt=`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`},Kt=`execution`,N={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},qt=`tool`,Jt=`unknown_tool`,Yt=`argument_decode_error`,Xt=`tool_call_skipped`,P=(e,t)=>`${e}.${t}`,Zt={START:P(Kt,M.START),COMPLETE:P(Kt,M.COMPLETE),ERROR:P(Kt,M.ERROR)},Qt={CALL_START:P(qt,N.CALL_START),CALL_COMPLETE:P(qt,N.CALL_COMPLETE),CALL_ERROR:P(qt,N.CALL_ERROR)},$t={EXECUTION_START:P(Gt,j.EXECUTION_START),EXECUTION_COMPLETE:P(Gt,j.EXECUTION_COMPLETE),EXECUTION_ERROR:P(Gt,j.EXECUTION_ERROR),CREATED:P(Gt,j.CREATED)},F={EXECUTION_START:Zt.START,EXECUTION_COMPLETE:Zt.COMPLETE,EXECUTION_ERROR:Zt.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:Qt.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:$t.EXECUTION_START,AGENT_EXECUTION_COMPLETE:$t.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:$t.EXECUTION_ERROR,AGENT_CREATED:$t.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 en=class{enabled=!0;category=`custom`;priority=Wt.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}},tn=class{logger;constructor(e=jt){this.logger=e}supportsTools(){return!1}validateConfig(){return!0}async dispose(){}async withRetry(e,t=3,n=1e3){let r;for(let i=0;i<=t;i++)try{return await e()}catch(e){r=e instanceof Error?e:Error(String(e)),i<t&&(this.logger.warn?.(`[${this.name}] Attempt ${i+1} failed, retrying in ${n}ms`,{error:r.message,attempt:i+1,maxRetries:t}),await this.delay(n))}throw r}withTimeout(e,t){let n;return Promise.race([e.then(e=>(clearTimeout(n),e)),new Promise((e,r)=>{n=setTimeout(()=>r(Error(`Operation timed out after ${t}ms`)),t)})])}delay(e){return new Promise(t=>setTimeout(t,e))}logDebug(e,t){this.logger.debug?.(`[${this.name}] ${e}`,t)}logError(e,t,n){this.logger.error?.(`[${this.name}] ${e}`,{error:t.message,stack:t.stack,...n})}validateRequest(e){if(!e.messages||e.messages.length===0)throw Error(`Request must include at least one message`);if(!e.provider)throw Error(`Request must specify a provider`);if(!e.model)throw Error(`Request must specify a model`)}validateResponse(e){if(!e.role)throw Error(`Response must have a role`);let t=e.role===`assistant`&&`toolCalls`in e&&Array.isArray(e.toolCalls)&&e.toolCalls.length>0;if(!e.content&&!t)throw Error(`Response must have content or tool calls`)}},nn=class{provenance;logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??jt}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 rn(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function an(e,t){if(t?.aborted===!0)return!0;if(!rn(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return rn(n)&&n.name===`AbortError`}function on(e=`aborted`,t){let n=t===void 0?Error(e):Error(e,{cause:t});return n.name=`AbortError`,n}var sn=class{static toProviderFormat(e,t,n={}){if(typeof t==`function`)return t(e);if(typeof t==`string`){let r=n[t];if(r!==void 0)return r(e)}return this.toUniversalFormat(e)}static toUniversalFormat(e){return e}static extractSystemMessage(e){return e.find(e=>e.role===`system`)?.content}static filterNonSystemMessages(e){return e.filter(e=>e.role!==`system`)}},cn=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 ln=cn.validateAgentConfig,un=cn.validateUserInput,dn=cn.validateProviderName,fn=cn.validateModelName,pn=cn.validateApiKey;var mn=class{static isRecoverable(e){return e instanceof y&&e.recoverable}static getErrorCode(e){return e instanceof y?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof y?e:e instanceof Error?new o(e.message||t):new o(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new i(`Failed to ${n}`,t,r,{operation:n})}},I=class extends Error{code=`EXECUTION_JOURNAL_FAILED`;recordId;kind;constructor(e,t){super(`Execution journal failed at ${e.kind}`,{cause:t}),this.name=`ExecutionJournalError`,this.recordId=e.recordId,this.kind=e.kind}},L=class extends Error{code=`EXECUTION_SUSPENDED`;requests;constructor(e){super(`Execution is waiting for correlated tool responses`),this.name=`ExecutionSuspendedError`,this.requests=structuredClone(e)}},R=class extends Error{code;actionIds;constructor(e,t,n=[]){super(t),this.code=e,this.actionIds=n,this.name=`ExecutionRecoveryError`}};function z(e){return e instanceof I||e instanceof R||e instanceof L}function hn(e,t){return e instanceof I?e:t instanceof I?t:e instanceof R?e:t instanceof R?t:e instanceof L&&t instanceof L?new L([...new Map([...e.requests,...t.requests].map(e=>[e.requestId,e])).values()]):e instanceof L?e:t}const gn=new Set([`rate_limit_error`]),_n=new Set([`overloaded_error`]),vn=new Set([`authentication_error`,`permission_error`]),yn=new Set([`model_not_found`]),bn=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),xn=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]),Sn=[/\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 Cn(e){return Sn.some(t=>t.test(e))}const wn=`[^\\s,;)"]+`;function Tn(e){return e.replace(RegExp(`\\bauthorization(")?\\s*[:=]\\s*(")?(?:(?:bearer|basic)\\s+)?${wn}`,`gi`),`Authorization$1: $2[REDACTED]`).replace(RegExp(`\\bbearer\\s+${wn}`,`gi`),`Bearer [REDACTED]`).replace(RegExp(`\\b(api[-_]?key)(")?\\s*[:=]\\s*(")?${wn}`,`gi`),`$1$2: $3[REDACTED]`).replace(RegExp(`\\bkey=${wn}`,`gi`),`key=[REDACTED]`).replace(/\bsk-[A-Za-z0-9_-]{8,}/gi,`[REDACTED]`).replace(/\bAIza[0-9A-Za-z_-]{35}\b/g,`[REDACTED]`)}function B(e){return typeof e==`object`&&e?e:void 0}function En(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function Dn(e){let t=B(e);if(t===void 0)return{};let n=typeof t.status==`number`?t.status:void 0,r=B(t.error),i=B(r?.error),a=En(r,`type`),o=En(t,`type`)??En(i,`type`)??(a===`error`?void 0:a)??(n!==void 0&&!(e instanceof y)?En(t,`code`):void 0);return{...n!==void 0&&{status:n},...o!==void 0&&{type:o}}}function On(e){let t=B(e)?.constructor;if(typeof t!=`function`)return;let n=t.name;return typeof n==`string`&&n.length>0?n:void 0}function kn(e){return an(e)||On(e)===`APIUserAbortError`}function An(e){let t=B(e)?.headers,n=t instanceof Headers?t.get(`retry-after`):B(t)?.[`retry-after`]??B(t)?.[`Retry-After`];if(n==null||n.trim().length===0)return;let r=Number(n);if(Number.isFinite(r))return Math.max(0,r);let i=Date.parse(n);return Number.isNaN(i)?void 0:Math.max(0,Math.round((i-Date.now())/1e3))}function jn(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 Mn(t,n,r){if(t instanceof y||kn(t))return t;let a=t instanceof Error?t:Error(typeof t==`string`?t:``),o=Dn(t),s=Tn(a.message||`request failed`),l=jn(o);if(o.status===429||o.type!==void 0&&gn.has(o.type))return new e(s||`${n} rate limit exceeded.`,An(t),n,l);if(o.status===401||o.status===403||o.type!==void 0&&vn.has(o.type))return new g(s,n,l);let u=o.status===void 0||o.status===400||o.status===404,d=In(t)||o.type!==void 0&&yn.has(o.type)||Cn(s);return u&&d?new E(void 0,n,void 0,{...l,originalMessage:s}):Nn(t)?new c(s,a,l,n):new i(`${r}: ${s}`,n,a,void 0,o)}function Nn(e){if(e instanceof c)return!0;let t=B(e);if(t===void 0)return!1;let n=En(t,`code`);if(n!==void 0&&bn.has(n))return!0;let r=On(e);if(r!==void 0&&xn.has(r))return!0;let i=En(t,`name`);return i!==void 0&&xn.has(i)?!0:i===`TypeError`&&En(t,`message`)===`fetch failed`}function Pn(e){let t=[],n=new Set,r=[e];for(let e=0;e<=8&&r.length>0;e++){let e=[];for(let i of r){if(i==null||n.has(i))continue;n.add(i),t.push(i);let r=B(i);r!==void 0&&e.push(r.originalError,r.cause)}r=e}return t}const V=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function Fn(e){return e instanceof i?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:Dn(e)}function In(e){if(e instanceof y)return!1;let t=En(B(e),`code`);return t!==void 0&&yn.has(t)}function Ln(t){if(t instanceof e)return V(!1,`rate-limit`);if(t instanceof g)return V(!1,`authentication`);if(t instanceof E)return V(!0,`model-unavailable`);let{status:n,type:r}=Fn(t);return n===429||r!==void 0&&gn.has(r)?V(!1,`rate-limit`):n===401||n===403||r!==void 0&&vn.has(r)?V(!1,`authentication`):n===402?V(!1,`billing`):(n===void 0||n===400||n===404)&&(In(t)||r!==void 0&&yn.has(r))?V(!0,`model-unavailable`):Nn(t)?V(!1,`network`):n===529||r!==void 0&&_n.has(r)?V(!0,`overloaded`):n===503?V(!0,`service-unavailable`):n===500||n===502||n===504?V(!0,`server-error`):n===404?{kind:`tentative`,classification:{switchable:!0,reason:`model-unavailable`}}:n===400||n===413?{kind:`tentative`,classification:{switchable:!1,reason:`invalid-request`}}:{kind:`none`}}function Rn(e,t){let n=Pn(e);if(t?.aborted===!0||n.some(e=>kn(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=Ln(e);if(t.kind!==`none`){if(r===void 0&&t.kind===`definitive`)return t.classification;if(r===void 0){r=t.classification;continue}if(t.kind===`definitive`)return t.classification.reason===`model-unavailable`?t.classification:r}}return r??{switchable:!1,reason:`unknown`}}function zn(e,t,n){return setInterval(()=>{(async()=>{try{await n()}catch(n){e.error(`Periodic task failed`,{task:t.name,error:n instanceof Error?n.message:String(n)})}})()},t.intervalMs)}function Bn(e){e&&clearInterval(e)}async function H(e,t){try{await e.append(structuredClone(t))}catch(e){throw new I(t,e)}}function Vn(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 Hn(e,t,n,r){if(!r)return e(t,n);let{journal:i,executionId:a,callId:o}=r;await H(i,{kind:`model-request`,recordId:`${o}:request`,executionId:a,callId:o,...r.route(),messages:t,options:Vn(n),...r.checkpoint&&{checkpoint:r.checkpoint}}),n.signal?.throwIfAborted();let s;try{s=await e(t,n)}catch(e){throw await H(i,{kind:`model-failure`,recordId:`${o}:failure`,executionId:a,callId:o,...r.route(),error:{name:e instanceof Error?e.name:`Error`,message:e instanceof Error?e.message:String(e)}}),e}return await H(i,{kind:`model-response`,recordId:`${o}:response`,executionId:a,callId:o,...r.route(),response:s}),s}function Un(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:return}}function Wn(e){let t=Gn(e);return t.typeName===`ZodObject`?t:void 0}function Gn(e){let t=e;for(let e=0;e<=64;e+=1){let e=t.typeName===`ZodEffects`?t.schema:t.typeName===`ZodOptional`||t.typeName===`ZodNullable`||t.typeName===`ZodDefault`?t.innerType:void 0;if(!e)return t;t=Kn(e,`${String(t.typeName)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function Kn(e,t){let n=e._def;if(!n)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function qn(e){if(typeof e==`string`)return`string`;if(typeof e==`number`)return`number`;if(typeof e==`boolean`)return`boolean`;if(e===null)return`null`}function Jn(e){let t=e._def;if(!t)throw Error(`Zod schema is missing _def; cannot determine required fields.`);let n=t;for(let e=0;n.typeName===`ZodEffects`&&e<=64&&n.schema;e+=1)n=Kn(n.schema,`ZodEffects inner type`);return n.typeName!==`ZodOptional`&&n.typeName!==`ZodNullable`&&n.typeName!==`ZodDefault`}function Yn(e){let t=Kn(e,`Zod schema`);if(!t.values||!Array.isArray(t.values))throw Error(`ZodEnum schema is missing enum values; cannot extract enum values.`);return t.values}function Xn(e){let t=Kn(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function Zn(e){let t=Kn(e,`Zod schema`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function Qn(e,t={}){let n=Kn(e,`Zod schema`),r=Wn(n);if(!r)throw Error(`Zod schema root must be an object; got ${String(n.typeName)}. Wrap the fields in z.object({ … }) before converting.`);return $n(r,t.allowAdditionalProperties)}function $n(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=er(a,t),Jn(a)&&r.push(e);let a=Un(e,t);return{type:`object`,properties:n,required:r,...a!==void 0&&{additionalProperties:a}}}function er(e,t){let n=Kn(e,`Zod type`),r={};switch(n.description&&(r.description=n.description),n.typeName){case`ZodString`:return{type:`string`,...r};case`ZodNumber`:return{type:`number`,...r};case`ZodBoolean`:return{type:`boolean`,...r};case`ZodArray`:if(!n.type)throw Error(`ZodArray is missing item type; cannot convert to JSON schema.`);return{type:`array`,items:er(n.type,t),...r};case`ZodObject`:return{...$n(n,t),...r};case`ZodEnum`:{let e=n.values;if(!e||!Array.isArray(e))throw Error(`ZodEnum is missing enum values; cannot convert to JSON schema.`);return{type:`string`,enum:e,...r}}case`ZodNativeEnum`:return{...nr(n.values),...r};case`ZodDate`:return{type:`string`,format:`date-time`,...r};case`ZodLiteral`:return{...tr(n.value),...r};case`ZodUnion`:case`ZodDiscriminatedUnion`:{let e=n.options;if(!e||!Array.isArray(e)||e.length===0)throw Error(`${String(n.typeName)} is missing options; cannot convert to JSON schema.`);return{anyOf:e.map(e=>er(e,t)),...r}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...er(n.schema,t),...r};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[er(n.innerType,t),{type:`null`}],...r};case`ZodOptional`:case`ZodDefault`:if(!n.innerType)throw Error(`${String(n.typeName)} is missing innerType; cannot convert to JSON schema.`);return{...er(n.innerType,t),...r};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:er(n.valueType,t),...r}:{type:`object`,additionalProperties:{type:`string`},...r};default:throw Error(ir(String(n.typeName)))}}function tr(e){let t=qn(e);if(!t)throw Error(`ZodLiteral value ${String(e)} is not a JSON primitive; cannot convert to JSON schema.`);return t===`null`?{type:`null`}:{type:t,enum:[e]}}function nr(e){if(!e||typeof e!=`object`)throw Error(`ZodNativeEnum is missing enum values; cannot convert to JSON schema.`);let t=Array.isArray(e)?e:Object.values(e),n=t.filter(e=>typeof e==`number`),r=n.length>0?n:t;if(r.length===0)throw Error(`ZodNativeEnum declares no members; cannot convert to JSON schema.`);return{type:n.length>0?`number`:`string`,enum:r}}const rr={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 ir(e){return`${e} cannot be carried by the universal JSON-schema subset: ${rr[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 ar(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function or(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 sr(e){if(ar(e))return{name:`structured_output`,jsonSchema:Qn(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:or(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=cr(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function cr(e,t,n){let r=[],i=e.type;if(e.anyOf)return ur(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${dr(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(...cr(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(lr(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(...cr(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${dr(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...cr(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 ${dr(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${dr(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 ${dr(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${dr(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function lr(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function ur(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>cr(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 dr(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function fr(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 pr(e,t){return xe(e,t,`json_schema`)===!0?`response_schema`:xe(e,t,`json_object`)===!0?`json_object`:`none`}function mr(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=pr(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 hr=e=>process.env[e];function gr(e){return t=>e[t]}function _r(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function vr(e,t={},n=hr){let r=e.credentialRequirement,i=t.baseUrl??_r(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=_r(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 yr(e,t={},n=hr){if(e.createImageProvider===void 0)return;let r=vr(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return Ce(t)?t:void 0}catch{return}}function br(e,t={},n=hr){if(e.createVideoProvider===void 0)return;let r=vr(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return we(t)?t:void 0}catch{return}}const xr=`$ENV:`;function Sr(e){return e.startsWith(xr)}function Cr(e){return`${xr}${e}`}function wr(e,t=hr){if(!Sr(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function Tr(e,t=hr){return e===void 0||e.length===0?!1:wr(e,t)!==void 0}function Er(e,t,n=hr){let r=_e(t,e.name)?.defaults??{},i=e.model??r.model;if(!i)throw Error(`Provider ${e.name} requires model`);let a=e.apiKey??r.apiKey,o=a!==void 0&&Sr(a)?a.slice(5).trim():void 0,s=e.options??r.options;return{name:e.name,model:i,apiKey:a===void 0?void 0:wr(a,n),...o?{apiKeyEnv:o}:{},baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...s!==void 0&&{options:s}}}function Dr(e,t){let n=_e(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${ve(t)}`);let r=ye(n);if(r!==void 0&&!Or(e,r))throw Error(`Provider ${e.name} requires ${Ar(r)}`);return n.createProvider(e)}function Or(e,t){return t.anyOf.some(t=>kr(e,t))}function kr(e,t){let n=e[t];return n!==void 0&&n.length>0}function Ar(e){return e.anyOf.map(e=>e===`apiKey`?`apiKey (API key)`:e).join(` or `)}function U(){let e=globalThis.crypto;if(typeof e?.randomUUID==`function`)return e.randomUUID();if(typeof e?.getRandomValues==`function`){let t=e.getRandomValues(new Uint8Array(16));t[6]=(t[6]??0)&15|64,t[8]=(t[8]??0)&63|128;let n=Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``);return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}throw Error(`No cryptographic randomness is available on this platform (globalThis.crypto is missing both randomUUID and getRandomValues), so a unique identifier cannot be generated. This is not something to substitute Math.random for.`)}function jr(e,t){let n={id:U(),role:`user`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Mr(e,t){let n={id:U(),role:`assistant`,content:e,state:t?.state??`complete`,timestamp:new Date};return t?.toolCalls&&(n.toolCalls=t.toolCalls),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Nr(e,t){let n={id:U(),role:`system`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Pr(e,t){let n={id:U(),role:`tool`,content:e,toolCallId:t.toolCallId,state:`complete`,timestamp:new Date};return t.name&&(n.name=t.name),t.metadata&&(n.metadata=t.metadata),t.parts&&(n.parts=t.parts),n}var Fr=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(Ze(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(jr(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(Mr(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(Nr(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>Ye(e)&&tt(Xe(e)),i=this.entries.filter(e=>!r(e)),a=Ze(Nr(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(Pr(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(Ye).map(Xe)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(Ye).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(Ye);if(e.length<=this.maxMessages)return;let t=e.map(Xe),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=>!Ye(e)||o.has(e.id))}},Ir=class{history;pendingAssistant=null;constructor(e=0){this.history=new Fr({maxMessages:e})}addMessage(e){this.history.addMessage(e)}addUserMessage(e,t,n){this.history.addUserMessage(e,t,n)}addAssistantMessage(e,t,n,r){this.history.addAssistantMessage(e,t,n,r)}addSystemMessage(e,t,n){this.history.addSystemMessage(e,t,n)}setSystemPrompt(e,t,n){this.history.setSystemPrompt(e,t,n)}addToolMessage(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n||`unknown`,r,i)}addToolMessageWithId(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n,r,i)}addEntry(e){this.history.addEntry(e)}getHistory(){return this.history.getHistory()}getMessages(){return this.history.getMessages()}getMessagesByRole(e){return this.history.getMessagesByRole(e)}getRecentMessages(e){return this.history.getRecentMessages(e)}getMessageCount(){return this.history.getMessageCount()}beginAssistant(){this.pendingAssistant||={id:U(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:U(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:U(),content:``,toolCalls:[]},this.pendingAssistant.toolCalls.some(t=>t.id===e.id)||this.pendingAssistant.toolCalls.push(e)}commitAssistant(e,t){if(!this.pendingAssistant)return;let n=this.pendingAssistant,r=n.toolCalls.length>0,i=n.content,a={id:n.id,role:`assistant`,content:i,state:e,timestamp:new Date,...r&&{toolCalls:n.toolCalls},...t&&{metadata:t}};this.history.addMessage(a),this.pendingAssistant=null}discardPending(){this.pendingAssistant=null}hasPendingAssistant(){return this.pendingAssistant!==null}getPendingContent(){return this.pendingAssistant?.content??``}getMessagesForAPI(){return this.history.getMessages().map(e=>{let t={role:e.role,content:e.content};return et(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
|
|
1
|
+
import{C as e,D as t,E as n,O as r,S as i,T as a,_ as o,a as s,b as c,c as l,d as u,f as d,g as f,h as p,i as m,l as h,m as g,n as _,o as v,p as y,r as b,s as x,t as S,u as ee,v as C,w,x as T,y as E}from"./bounded-output-BdWv9SX3.js";import{n as te,r as ne,t as re}from"./verdict-decoder-Dz_rjoIZ.js";import ie from"jssha";const ae={isPrimitive:e=>e==null||typeof e==`string`||typeof e==`number`||typeof e==`boolean`,isArray:e=>Array.isArray(e)&&e.every(e=>ae.isUniversalValue(e)),isObject:e=>typeof e==`object`&&!!e&&!Array.isArray(e)&&!(e instanceof Date)&&Object.values(e).every(e=>ae.isUniversalValue(e)),isUniversalValue:e=>e instanceof Date||ae.isPrimitive(e)||ae.isArray(e)||ae.isObject(e)};function oe(e){return{functionCalling:{supported:e},nativeWebTools:{webSearch:{supported:!1,enabled:!1,reason:`Provider does not declare native web search support.`},webFetch:{supported:!1,enabled:!1,reason:`Provider does not declare native web fetch support.`}}}}function se(e,t,n){n?.webSearch===!0&&ce(e,`web search`,t.nativeWebTools.webSearch),n?.webFetch===!0&&ce(e,`web fetch`,t.nativeWebTools.webFetch)}function ce(e,t,n){if(!n.supported)throw Error(`Provider ${e} does not support native ${t}.${le(n.reason)}`);if(!n.enabled)throw Error(`Provider ${e} supports native ${t} but it is not enabled.${le(n.reason)}`)}function le(e){return e?` ${e}`:``}const ue=[`none`,`minimal`,`low`,`medium`,`high`,`xhigh`,`max`];function de(e){return typeof e==`string`&&ue.includes(e)}function fe(e,t){return{resolution:e,...t}}const pe=new Map(ue.map((e,t)=>[e,t]));function me(e,t){return{selection:e,effective:null,disposition:`not-applied`,fingerprint:`${t}|${e}|not-applied`}}function he(e,t,n){let r=e?.models[t];if(!r)return me(n,t);let i=(i,a)=>`${t}|${n}|${i}|${a}|${r.nativeControlId}|${e.verifiedAt}`;if(n===`auto`)return r.supportedEfforts.includes(r.defaultEffort)?{selection:n,effective:r.defaultEffort,disposition:`model-default`,fingerprint:i(r.defaultEffort,`model-default`)}:me(n,t);if(r.supportedEfforts.includes(n))return{selection:n,effective:n,disposition:`exact`,fingerprint:i(n,`exact`)};let a=pe.get(n),o=r.supportedEfforts.filter(e=>(pe.get(e)??1/0)<(a??-1)).at(-1);return o?{selection:n,effective:o,disposition:`clamped`,fingerprint:i(o,`clamped`)}:me(n,t)}function ge(e){let t=typeof e.supportsTools==`function`&&e.supportsTools();return e.getCapabilities?.()??oe(t)}function _e(e,t){return e.find(e=>e.type===t||e.aliases?.includes(t)===!0)}function ve(e){return e.map(e=>{if(!e.aliases||e.aliases.length===0)return e.type;let t=e.aliases.length===1?`alias`:`aliases`;return`${e.type} (${t}: ${e.aliases.join(`, `)})`}).join(`, `)}function ye(e){if(e?.credentialRequirement!==void 0)return e.credentialRequirement;if(e?.requiresApiKey===!0)return{anyOf:[`apiKey`]}}function be(e,t){if(e)return e.deviations?.[t]?.capabilities??e.vendorDefault}function xe(e,t,n){let r=be(e,t);if(!(!r||r.length===0))return r.includes(n)}function Se(e,t,n,r){return xe(e,t,n)??r}function Ce(e){return`generateImage`in e&&typeof e.generateImage==`function`}function we(e){return`createVideo`in e&&`getVideoJob`in e&&`cancelVideoJob`in e&&typeof e.createVideo==`function`&&typeof e.getVideoJob==`function`&&typeof e.cancelVideoJob==`function`}function Te(e){if(typeof e!=`object`||!e)return!1;let t=e;return typeof t.type==`string`&&t.type.length>0&&(typeof t.createImageProvider==`function`||typeof t.createVideoProvider==`function`)}function Ee(e,t){return e.find(e=>e.type===t)}const De=`ToolSearch`,Oe=`yes`,ke=`no`,Ae=[{value:`yes`,label:`Yes`},{value:`no`,label:`No`}];function je(e,t,n){return{id:e,title:t,description:n?.description,options:Ae,maxSelect:1,default:n?.defaultYes===void 0?void 0:{values:[n.defaultYes?`yes`:`no`]}}}function Me(e,t,n,r){return{id:e,title:t,options:n,maxSelect:1,description:r?.description,allowFreeText:r?.allowFreeText,maxVisible:r?.maxVisible,default:r?.default}}function Ne(e,t,n,r){return{id:e,title:t,options:n,minSelect:r?.minSelect??1,maxSelect:r?.maxSelect??n.length,description:r?.description,maxVisible:r?.maxVisible,default:r?.default}}function Pe(e,t,n){return{id:e,title:t,allowFreeText:!0,description:n?.description,masked:n?.masked,allowEmpty:n?.allowEmpty,placeholder:n?.placeholder,default:n?.default}}function Fe(e){return e.type===`answer`&&e.values.includes(`yes`)}function Ie(e){return`getEstimatedDuration`in e||`getExecutionSteps`in e||`setProgressCallback`in e}function Le(e,t){if(Ie(e)&&e.getEstimatedDuration)return e.getEstimatedDuration(t)}function Re(e,t){if(Ie(e)&&e.getExecutionSteps)return e.getExecutionSteps(t)}function ze(e,t){return Ie(e)&&e.setProgressCallback?(e.setProgressCallback(t),!0):!1}function Be(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 Ve(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 He=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}},Ue=class{initialized=!1;disposed=!1;constructor(e={}){this.initialized=e.readyOnConstruction===!0}async initialize(){this.initialized||(await this.doInitialize(),this.initialized=!0,this.disposed=!1)}async dispose(){await this.doDispose(),this.initialized=!1,this.disposed=!0}isInitialized(){return this.initialized}ensureInitialized(){if(this.disposed)throw Error(`${this.constructor.name} was disposed — re-initialize it before use, or build a new one`);if(!this.initialized)throw Error(`${this.constructor.name} is not initialized`)}};function We(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 Ge(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 Ke(e,t,n,r){if(!e)throw Error(`Executor is required for ${t} provider. Configure an executor or use direct execution path.`);if(!r?.model)throw Error(`Model is required for executor execution in ${t} provider.`);return await e.executeChat({messages:n,options:r,provider:t,model:r.model,...r.tools&&{tools:r.tools}})}async function*qe(e,t,n,r){if(!e||!e.executeChatStream)throw Error(`Streaming executor is required for ${t} provider.`);if(!r?.model)throw Error(`Model is required for executor streaming in ${t} provider.`);let i=e.executeChatStream({messages:n,options:r,provider:t,model:r.model,stream:!0,...r.tools&&{tools:r.tools}}),a=!1;for await(let e of i){if(e.kind===`terminal`){if(a)throw Error(`Executor "${t}" emitted more than one stream terminal result.`);a=!0}yield e}if(!a)throw Error(`Executor "${t}" ended a stream without a terminal result.`)}async function*Je(e,t,n,r,i){e.debug?.(`🔍 [TOOL-FLOW] AbstractAIProvider.executeStreamViaExecutorOrDirect() - Executor request`,{provider:n,model:i?.model,hasTools:!!i?.tools,toolsCount:i?.tools?.length||0,toolNames:i?.tools?.map(e=>e.name)||[]}),yield*qe(t,n,r,i)}function Ye(e){return e.category===`chat`}function Xe(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 Ze(e){return{id:e.id,timestamp:e.timestamp,category:`chat`,type:e.role,data:{...e}}}function Qe(e){return e.filter(Ye).map(Xe)}function $e(e){return e.role===`user`}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:he(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=fe(r,{nativeControl:{state:`omitted`,reason:`model-effort-not-applied`},providerDispatch:{state:`sent`}});try{i(a)}catch(e){n.warn(`Model-effort outcome observer failed`,{error:e instanceof Error?e.message:String(e)})}return a}function 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={type:`null`};function lt(e){return e.type===`null`||Array.isArray(e.anyOf)&&e.anyOf.some(e=>typeof e==`object`&&!!e&&e.type===`null`)}function ut(e){if(typeof e!=`object`||!e||Array.isArray(e))return e;let t=e;return lt(t)?t:Array.isArray(t.anyOf)?{...t,anyOf:[...t.anyOf,ct]}:{anyOf:[t,ct]}}function dt(e,t={}){return ft(e,t,``)}function ft(e,t,n){if(Array.isArray(e))return e.map((e,r)=>ft(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=ft(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)?lt(o):!1,l=ut(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=ft(r.items,t,`${n}/items`)),Array.isArray(r.anyOf)&&(i.anyOf=r.anyOf.map((e,r)=>ft(e,t,`${n}/anyOf/${r}`))),r.additionalProperties&&typeof r.additionalProperties==`object`?i.additionalProperties=ft(r.additionalProperties,t,`${n}/additionalProperties`):a&&(r.additionalProperties!==!1&&t.onChange?.({path:n,kind:`closed-object`}),i.additionalProperties=!1),i}const pt=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]),mt=new Uint32Array([1779033703,3144134277,1013904242,2773480762,1359893119,2600822924,528734635,1541459225]);function D(e,t){return e>>>t|e<<32-t}function ht(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(mt),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+(pt[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 gt=32,_t=2e3,vt=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}),yt=new Set(vt),bt=new Set([`__proto__`,`constructor`,`prototype`]),xt=new Set([`title`,`$schema`,`$comment`,`examples`,`default`]);function St(){return{anyOf:[{type:`string`},{type:`number`},{type:`boolean`},{type:`object`},{type:`array`},{type:`null`}]}}const Ct={closedObjects:!1,requireAllProperties:!1,optionalAsNullable:!1,unknownKeywords:`adopt`,unsupportedMembers:[],maxDepth:32,maxNodes:_t},wt={closedObjects:!0,requireAllProperties:!0,optionalAsNullable:!0,unknownKeywords:`strip`,unsupportedMembers:[],maxDepth:32,maxNodes:_t};function O(e,t){return`${e}/${t}`}function Tt(e){return typeof e==`object`&&!!e&&!Array.isArray(e)}function Et(e,t,n,r,i,a){if(!Tt(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(!yt.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=>!yt.has(e)))return{path:t,keyword:`type`,reason:`a node must declare exactly one of 'type' or 'anyOf'`};let c=e.properties;if(Tt(c)){for(let e of Object.keys(c))if(bt.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=Et(c[e],O(O(t,`properties`),e),n+1,r,i,a);if(o)return o}}if(Tt(e.items)){let o=Et(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=Et(e.anyOf[o],O(O(t,`anyOf`),String(o)),n+1,r,i,a);if(s)return s}r.delete(e)}function Dt(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=>!yt.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=St();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 Tt(a)&&(i.properties=Object.fromEntries(Object.keys(a).map(e=>{let i=a[e];return[e,Tt(i)?Dt(i,O(O(t,`properties`),e),n,r):i]}))),Tt(i.items)&&(i.items=Dt(i.items,O(t,`items`),n,r)),Array.isArray(i.anyOf)&&(i.anyOf=i.anyOf.map((e,i)=>Tt(e)?Dt(e,O(O(t,`anyOf`),String(i)),n,r):e)),i}function Ot(e){if(Array.isArray(e))return e.map(Ot);if(Tt(e)){let t={};for(let n of Object.keys(e).sort())t[n]=Ot(e[n]);return t}return e}function kt(e){return ht(JSON.stringify(Ot(e)))}function At(e,t){let n=e.parameters;if(!Tt(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=Et(n,``,0,new Set,{count:0},t);if(r)return{outcome:`rejected`,tool:e,changes:[],rejection:r};let i=[],a=Dt(n,``,t,i),o=t.closedObjects?dt(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`)&&!xt.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 jt={debug:()=>{},info:()=>{},warn:()=>{},error:()=>{},log:()=>{},group:()=>{},groupEnd:()=>{}};var Mt=class e{static instance;globalLevel;globalSink;constructor(){this.globalLevel=`warn`}static getInstance(){return e.instance||=new e,e.instance}getGlobalLevel(){return this.globalLevel}setGlobalLevel(e){this.globalLevel=e}getGlobalSink(){return this.globalSink}setGlobalSink(e){this.globalSink=e}},Nt=class{level;packageName;explicitSink;constructor(e,t={}){this.packageName=e,this.explicitSink=t.sink,this.level=t.level}get sinkLogger(){return this.explicitSink??Mt.getInstance().getGlobalSink()??jt}debug(...e){if(this.shouldLog(`debug`)){let[t,n]=e;this.forward(`debug`,String(t??``),Pt(n)?n:void 0)}}info(...e){if(this.shouldLog(`info`)){let[t,n]=e;this.forward(`info`,String(t??``),Pt(n)?n:void 0)}}warn(...e){if(this.shouldLog(`warn`)){let[t,n]=e;this.forward(`warn`,String(t??``),Pt(n)?n:void 0)}}error(...e){if(this.shouldLog(`error`)){let[t,n]=e;this.forward(`error`,String(t??``),Pt(n)?n:void 0)}}log(...e){this.info(...e)}getLevel(){return this.level||Mt.getInstance().getGlobalLevel()}shouldLog(e){let t=this.getLevel();if(t===`silent`)return!1;let n=[`debug`,`info`,`warn`,`error`,`silent`];return n.indexOf(e)>=n.indexOf(t)}forward(e,t,n){let r={timestamp:new Date().toISOString(),level:e,message:t,...n&&{context:n},packageName:this.packageName},i=`[${r.timestamp}] [${r.level.toUpperCase()}] [${r.packageName}] ${r.message}`;switch(e){case`debug`:this.sinkLogger.debug(i,n??{});return;case`info`:this.sinkLogger.info(i,n??{});return;case`warn`:this.sinkLogger.warn(i,n??{});return;case`error`:this.sinkLogger.error(i,n??{});return;case`silent`:return}}};function Pt(e){return typeof e==`object`&&!!e&&!(e instanceof Error)&&!(e instanceof Date)&&!Array.isArray(e)}function k(e,t={}){return new Nt(e,t)}function Ft(e){Mt.getInstance().setGlobalLevel(e)}function It(){return Mt.getInstance().getGlobalLevel()}function Lt(e){Mt.getInstance().setGlobalSink(e)}function Rt(){return Mt.getInstance().getGlobalSink()}const A=k(`agents`),zt=k(`ToolSchemaProjection`);var Bt=class{config;executor;logger;quarantinedToolSchemas=new Map;constructor(e=jt){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 Vt(n,t);if(e.done||(await Ht(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 oe(this.supportsTools())}validateConfig(){return!0}validateMessages(e){We(e)}validateTools(e){Ge(e)}projectionProfile(){}projectTools(e,t){let n=this.projectionProfile();if(!n||!e)return e;let r=[];for(let i of e){let e=At(i,n);if(e.outcome!==`rejected`){r.push(e.tool);continue}let a=`${this.name}${t}${i.name}${kt(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`};zt.warn(`tool_schema_quarantined provider=${this.name} model=${t} tool=${i.name} path=${o} keyword=${s} reason=${c}`)}return r}validateNativeWebTools(e){se(this.name,this.getCapabilities(),e)}async executeViaExecutorOrDirect(e,t){return Ke(this.executor,this.name,e,t)}async*executeStreamViaExecutorOrDirect(e,t){yield*Je(this.logger,this.executor,this.name,e,t)}async dispose(){this.executor?.dispose&&await this.executor.dispose()}};async function Vt(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 Ht(e){e?.aborted||await new Promise(e=>setTimeout(e,0))}let Ut=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}({}),Wt=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`},Gt=`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`},Kt=`execution`,N={CALL_START:`call_start`,CALL_COMPLETE:`call_complete`,CALL_ERROR:`call_error`,CALL_RESPONSE_READY:`call_response_ready`},qt=`tool`,Jt=`unknown_tool`,Yt=`argument_decode_error`,Xt=`tool_call_skipped`,P=(e,t)=>`${e}.${t}`,Zt={START:P(Kt,M.START),COMPLETE:P(Kt,M.COMPLETE),ERROR:P(Kt,M.ERROR)},Qt={CALL_START:P(qt,N.CALL_START),CALL_COMPLETE:P(qt,N.CALL_COMPLETE),CALL_ERROR:P(qt,N.CALL_ERROR)},$t={EXECUTION_START:P(Gt,j.EXECUTION_START),EXECUTION_COMPLETE:P(Gt,j.EXECUTION_COMPLETE),EXECUTION_ERROR:P(Gt,j.EXECUTION_ERROR),CREATED:P(Gt,j.CREATED)},F={EXECUTION_START:Zt.START,EXECUTION_COMPLETE:Zt.COMPLETE,EXECUTION_ERROR:Zt.ERROR,TOOL_BEFORE_EXECUTE:`tool.beforeExecute`,TOOL_AFTER_EXECUTE:`tool.afterExecute`,TOOL_SUCCESS:`tool.success`,TOOL_ERROR:Qt.CALL_ERROR,CONVERSATION_START:`conversation.start`,CONVERSATION_COMPLETE:`conversation.complete`,CONVERSATION_ERROR:`conversation.error`,AGENT_EXECUTION_START:$t.EXECUTION_START,AGENT_EXECUTION_COMPLETE:$t.EXECUTION_COMPLETE,AGENT_EXECUTION_ERROR:$t.EXECUTION_ERROR,AGENT_CREATED:$t.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 en=class{enabled=!0;category=`custom`;priority=Wt.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}},tn=class{logger;constructor(e=jt){this.logger=e}supportsTools(){return!1}validateConfig(){return!0}async dispose(){}async withRetry(e,t=3,n=1e3){let r;for(let i=0;i<=t;i++)try{return await e()}catch(e){r=e instanceof Error?e:Error(String(e)),i<t&&(this.logger.warn?.(`[${this.name}] Attempt ${i+1} failed, retrying in ${n}ms`,{error:r.message,attempt:i+1,maxRetries:t}),await this.delay(n))}throw r}withTimeout(e,t){let n;return Promise.race([e.then(e=>(clearTimeout(n),e)),new Promise((e,r)=>{n=setTimeout(()=>r(Error(`Operation timed out after ${t}ms`)),t)})])}delay(e){return new Promise(t=>setTimeout(t,e))}logDebug(e,t){this.logger.debug?.(`[${this.name}] ${e}`,t)}logError(e,t,n){this.logger.error?.(`[${this.name}] ${e}`,{error:t.message,stack:t.stack,...n})}validateRequest(e){if(!e.messages||e.messages.length===0)throw Error(`Request must include at least one message`);if(!e.provider)throw Error(`Request must specify a provider`);if(!e.model)throw Error(`Request must specify a model`)}validateResponse(e){if(!e.role)throw Error(`Response must have a role`);let t=e.role===`assistant`&&`toolCalls`in e&&Array.isArray(e.toolCalls)&&e.toolCalls.length>0;if(!e.content&&!t)throw Error(`Response must have content or tool calls`)}},nn=class{provenance;logger;eventService;constructor(e={}){this.eventService=e.eventService,this.logger=e.logger??jt}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 rn(e){return typeof e==`object`&&!!e&&typeof e.name==`string`&&typeof e.message==`string`}function an(e,t){if(t?.aborted===!0)return!0;if(!rn(e))return!1;if(e.name===`AbortError`)return!0;let n=e.cause;return rn(n)&&n.name===`AbortError`}function on(e=`aborted`,t){let n=t===void 0?Error(e):Error(e,{cause:t});return n.name=`AbortError`,n}var sn=class{static toProviderFormat(e,t,n={}){if(typeof t==`function`)return t(e);if(typeof t==`string`){let r=n[t];if(r!==void 0)return r(e)}return this.toUniversalFormat(e)}static toUniversalFormat(e){return e}static extractSystemMessage(e){return e.find(e=>e.role===`system`)?.content}static filterNonSystemMessages(e){return e.filter(e=>e.role!==`system`)}},cn=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 ln=cn.validateAgentConfig,un=cn.validateUserInput,dn=cn.validateProviderName,fn=cn.validateModelName,pn=cn.validateApiKey;var mn=class{static isRecoverable(e){return e instanceof y&&e.recoverable}static getErrorCode(e){return e instanceof y?e.code:`UNKNOWN_ERROR`}static fromUnknown(e,t=`An unknown error occurred`){return e instanceof y?e:e instanceof Error?new o(e.message||t):new o(typeof e==`string`?e:t)}static wrapProviderError(e,t,n){let r=e instanceof Error?e:Error(String(e));return new i(`Failed to ${n}`,t,r,{operation:n})}},I=class extends Error{code=`EXECUTION_JOURNAL_FAILED`;recordId;kind;constructor(e,t){super(`Execution journal failed at ${e.kind}`,{cause:t}),this.name=`ExecutionJournalError`,this.recordId=e.recordId,this.kind=e.kind}},L=class extends Error{code=`EXECUTION_SUSPENDED`;requests;constructor(e){super(`Execution is waiting for correlated tool responses`),this.name=`ExecutionSuspendedError`,this.requests=structuredClone(e)}},R=class extends Error{code;actionIds;constructor(e,t,n=[]){super(t),this.code=e,this.actionIds=n,this.name=`ExecutionRecoveryError`}};function z(e){return e instanceof I||e instanceof R||e instanceof L}function hn(e,t){return e instanceof I?e:t instanceof I?t:e instanceof R?e:t instanceof R?t:e instanceof L&&t instanceof L?new L([...new Map([...e.requests,...t.requests].map(e=>[e.requestId,e])).values()]):e instanceof L?e:t}const gn=new Set([`rate_limit_error`]),_n=new Set([`overloaded_error`]),vn=new Set([`authentication_error`,`permission_error`]),yn=new Set([`model_not_found`]),bn=new Set([`ECONNRESET`,`ECONNREFUSED`,`ENOTFOUND`,`ETIMEDOUT`,`EPIPE`,`EAI_AGAIN`,`UND_ERR_SOCKET`,`UND_ERR_CONNECT_TIMEOUT`]),xn=new Set([`APIConnectionError`,`APIConnectionTimeoutError`]),Sn=[/\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 Cn(e){return Sn.some(t=>t.test(e))}const wn=`[^\\s,;)"]+`;function Tn(e){return e.replace(RegExp(`\\bauthorization(")?\\s*[:=]\\s*(")?(?:(?:bearer|basic)\\s+)?${wn}`,`gi`),`Authorization$1: $2[REDACTED]`).replace(RegExp(`\\bbearer\\s+${wn}`,`gi`),`Bearer [REDACTED]`).replace(RegExp(`\\b(api[-_]?key)(")?\\s*[:=]\\s*(")?${wn}`,`gi`),`$1$2: $3[REDACTED]`).replace(RegExp(`\\bkey=${wn}`,`gi`),`key=[REDACTED]`).replace(/\bsk-[A-Za-z0-9_-]{8,}/gi,`[REDACTED]`).replace(/\bAIza[0-9A-Za-z_-]{35}\b/g,`[REDACTED]`)}function B(e){return typeof e==`object`&&e?e:void 0}function En(e,t){let n=e?.[t];return typeof n==`string`&&n.length>0?n:void 0}function Dn(e){let t=B(e);if(t===void 0)return{};let n=typeof t.status==`number`?t.status:void 0,r=B(t.error),i=B(r?.error),a=En(r,`type`),o=En(t,`type`)??En(i,`type`)??(a===`error`?void 0:a)??(n!==void 0&&!(e instanceof y)?En(t,`code`):void 0);return{...n!==void 0&&{status:n},...o!==void 0&&{type:o}}}function On(e){let t=B(e)?.constructor;if(typeof t!=`function`)return;let n=t.name;return typeof n==`string`&&n.length>0?n:void 0}function kn(e){return an(e)||On(e)===`APIUserAbortError`}function An(e){let t=B(e)?.headers,n=t instanceof Headers?t.get(`retry-after`):B(t)?.[`retry-after`]??B(t)?.[`Retry-After`];if(n==null||n.trim().length===0)return;let r=Number(n);if(Number.isFinite(r))return Math.max(0,r);let i=Date.parse(n);return Number.isNaN(i)?void 0:Math.max(0,Math.round((i-Date.now())/1e3))}function jn(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 Mn(t,n,r){if(t instanceof y||kn(t))return t;let a=t instanceof Error?t:Error(typeof t==`string`?t:``),o=Dn(t),s=Tn(a.message||`request failed`),l=jn(o);if(o.status===429||o.type!==void 0&&gn.has(o.type))return new e(s||`${n} rate limit exceeded.`,An(t),n,l);if(o.status===401||o.status===403||o.type!==void 0&&vn.has(o.type))return new g(s,n,l);let u=o.status===void 0||o.status===400||o.status===404,d=In(t)||o.type!==void 0&&yn.has(o.type)||Cn(s);return u&&d?new E(void 0,n,void 0,{...l,originalMessage:s}):Nn(t)?new c(s,a,l,n):new i(`${r}: ${s}`,n,a,void 0,o)}function Nn(e){if(e instanceof c)return!0;let t=B(e);if(t===void 0)return!1;let n=En(t,`code`);if(n!==void 0&&bn.has(n))return!0;let r=On(e);if(r!==void 0&&xn.has(r))return!0;let i=En(t,`name`);return i!==void 0&&xn.has(i)?!0:i===`TypeError`&&En(t,`message`)===`fetch failed`}function Pn(e){let t=[],n=new Set,r=[e];for(let e=0;e<=8&&r.length>0;e++){let e=[];for(let i of r){if(i==null||n.has(i))continue;n.add(i),t.push(i);let r=B(i);r!==void 0&&e.push(r.originalError,r.cause)}r=e}return t}const V=(e,t)=>({kind:`definitive`,classification:{switchable:e,reason:t}});function Fn(e){return e instanceof i?{...e.status!==void 0&&{status:e.status},...e.type!==void 0&&{type:e.type}}:Dn(e)}function In(e){if(e instanceof y)return!1;let t=En(B(e),`code`);return t!==void 0&&yn.has(t)}function Ln(t){if(t instanceof e)return V(!1,`rate-limit`);if(t instanceof g)return V(!1,`authentication`);if(t instanceof E)return V(!0,`model-unavailable`);let{status:n,type:r}=Fn(t);return n===429||r!==void 0&&gn.has(r)?V(!1,`rate-limit`):n===401||n===403||r!==void 0&&vn.has(r)?V(!1,`authentication`):n===402?V(!1,`billing`):(n===void 0||n===400||n===404)&&(In(t)||r!==void 0&&yn.has(r))?V(!0,`model-unavailable`):Nn(t)?V(!1,`network`):n===529||r!==void 0&&_n.has(r)?V(!0,`overloaded`):n===503?V(!0,`service-unavailable`):n===500||n===502||n===504?V(!0,`server-error`):n===404?{kind:`tentative`,classification:{switchable:!0,reason:`model-unavailable`}}:n===400||n===413?{kind:`tentative`,classification:{switchable:!1,reason:`invalid-request`}}:{kind:`none`}}function Rn(e,t){let n=Pn(e);if(t?.aborted===!0||n.some(e=>kn(e)))return{switchable:!1,reason:`aborted`};let r;for(let e of n){let t=Ln(e);if(t.kind!==`none`){if(r===void 0&&t.kind===`definitive`)return t.classification;if(r===void 0){r=t.classification;continue}if(t.kind===`definitive`)return t.classification.reason===`model-unavailable`?t.classification:r}}return r??{switchable:!1,reason:`unknown`}}function zn(e,t,n){return setInterval(()=>{(async()=>{try{await n()}catch(n){e.error(`Periodic task failed`,{task:t.name,error:n instanceof Error?n.message:String(n)})}})()},t.intervalMs)}function Bn(e){e&&clearInterval(e)}async function H(e,t){try{await e.append(structuredClone(t))}catch(e){throw new I(t,e)}}function Vn(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 Hn(e,t,n,r){if(!r)return e(t,n);let{journal:i,executionId:a,callId:o}=r;await H(i,{kind:`model-request`,recordId:`${o}:request`,executionId:a,callId:o,...r.route(),messages:t,options:Vn(n),...r.checkpoint&&{checkpoint:r.checkpoint}}),n.signal?.throwIfAborted();let s;try{s=await e(t,n)}catch(e){throw await H(i,{kind:`model-failure`,recordId:`${o}:failure`,executionId:a,callId:o,...r.route(),error:{name:e instanceof Error?e.name:`Error`,message:e instanceof Error?e.message:String(e)}}),e}return await H(i,{kind:`model-response`,recordId:`${o}:response`,executionId:a,callId:o,...r.route(),response:s}),s}function Un(e,t){if(t)return!0;switch(e.unknownKeys){case`passthrough`:case`strip`:return!0;case`strict`:return!1;default:return}}function Wn(e){let t=Gn(e);return t.typeName===`ZodObject`?t:void 0}function Gn(e){let t=e;for(let e=0;e<=64;e+=1){let e=t.typeName===`ZodEffects`?t.schema:t.typeName===`ZodOptional`||t.typeName===`ZodNullable`||t.typeName===`ZodDefault`?t.innerType:void 0;if(!e)return t;t=Kn(e,`${String(t.typeName)} inner type`)}throw Error(`Zod wrapper chain exceeds 64 levels; refusing to unwrap further (cyclic schema?).`)}function Kn(e,t){let n=e._def;if(!n)throw Error(`${t} is missing _def; cannot convert to JSON schema.`);return n}function qn(e){if(typeof e==`string`)return`string`;if(typeof e==`number`)return`number`;if(typeof e==`boolean`)return`boolean`;if(e===null)return`null`}function Jn(e){let t=e._def;if(!t)throw Error(`Zod schema is missing _def; cannot determine required fields.`);let n=t;for(let e=0;n.typeName===`ZodEffects`&&e<=64&&n.schema;e+=1)n=Kn(n.schema,`ZodEffects inner type`);return n.typeName!==`ZodOptional`&&n.typeName!==`ZodNullable`&&n.typeName!==`ZodDefault`}function Yn(e){let t=Kn(e,`Zod schema`);if(!t.values||!Array.isArray(t.values))throw Error(`ZodEnum schema is missing enum values; cannot extract enum values.`);return t.values}function Xn(e){let t=Kn(e,`Zod schema`);return!!(t.checks&&t.checks.length>0)}function Zn(e){let t=Kn(e,`Zod schema`);if(!t.typeName)throw Error(`Zod schema has empty typeName; cannot determine schema type name.`);return t.typeName}function Qn(e,t={}){let n=Kn(e,`Zod schema`),r=Wn(n);if(!r)throw Error(`Zod schema root must be an object; got ${String(n.typeName)}. Wrap the fields in z.object({ … }) before converting.`);return $n(r,t.allowAdditionalProperties)}function $n(e,t){let n={},r=[],i=typeof e.shape==`function`?e.shape():e.shape;for(let[e,a]of Object.entries(i??{}))n[e]=er(a,t),Jn(a)&&r.push(e);let a=Un(e,t);return{type:`object`,properties:n,required:r,...a!==void 0&&{additionalProperties:a}}}function er(e,t){let n=Kn(e,`Zod type`),r={};switch(n.description&&(r.description=n.description),n.typeName){case`ZodString`:return{type:`string`,...r};case`ZodNumber`:return{type:`number`,...r};case`ZodBoolean`:return{type:`boolean`,...r};case`ZodArray`:if(!n.type)throw Error(`ZodArray is missing item type; cannot convert to JSON schema.`);return{type:`array`,items:er(n.type,t),...r};case`ZodObject`:return{...$n(n,t),...r};case`ZodEnum`:{let e=n.values;if(!e||!Array.isArray(e))throw Error(`ZodEnum is missing enum values; cannot convert to JSON schema.`);return{type:`string`,enum:e,...r}}case`ZodNativeEnum`:return{...nr(n.values),...r};case`ZodDate`:return{type:`string`,format:`date-time`,...r};case`ZodLiteral`:return{...tr(n.value),...r};case`ZodUnion`:case`ZodDiscriminatedUnion`:{let e=n.options;if(!e||!Array.isArray(e)||e.length===0)throw Error(`${String(n.typeName)} is missing options; cannot convert to JSON schema.`);return{anyOf:e.map(e=>er(e,t)),...r}}case`ZodEffects`:if(!n.schema)throw Error(`ZodEffects is missing schema; cannot convert to JSON schema.`);return{...er(n.schema,t),...r};case`ZodNullable`:if(!n.innerType)throw Error(`ZodNullable is missing innerType; cannot convert to JSON schema.`);return{anyOf:[er(n.innerType,t),{type:`null`}],...r};case`ZodOptional`:case`ZodDefault`:if(!n.innerType)throw Error(`${String(n.typeName)} is missing innerType; cannot convert to JSON schema.`);return{...er(n.innerType,t),...r};case`ZodRecord`:return n.valueType?{type:`object`,additionalProperties:er(n.valueType,t),...r}:{type:`object`,additionalProperties:{type:`string`},...r};default:throw Error(ir(String(n.typeName)))}}function tr(e){let t=qn(e);if(!t)throw Error(`ZodLiteral value ${String(e)} is not a JSON primitive; cannot convert to JSON schema.`);return t===`null`?{type:`null`}:{type:t,enum:[e]}}function nr(e){if(!e||typeof e!=`object`)throw Error(`ZodNativeEnum is missing enum values; cannot convert to JSON schema.`);let t=Array.isArray(e)?e:Object.values(e),n=t.filter(e=>typeof e==`number`),r=n.length>0?n:t;if(r.length===0)throw Error(`ZodNativeEnum declares no members; cannot convert to JSON schema.`);return{type:n.length>0?`number`:`string`,enum:r}}const rr={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 ir(e){return`${e} cannot be carried by the universal JSON-schema subset: ${rr[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 ar(e){return typeof e.safeParse==`function`&&typeof e.parse==`function`}function or(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 sr(e){if(ar(e))return{name:`structured_output`,jsonSchema:Qn(e),validate:t=>{let n=e.safeParse(t);return n.success?{success:!0,value:n.data}:{success:!1,issues:or(n.error)}}};let{jsonSchema:t,name:n}=e;return{name:n??`structured_output`,jsonSchema:t,validate:e=>{let n=cr(t,e,`$`);return n.length===0?{success:!0,value:e}:{success:!1,issues:n}}}}function cr(e,t,n){let r=[],i=e.type;if(e.anyOf)return ur(e.anyOf,t,n);switch(i){case`object`:{if(typeof t!=`object`||!t||Array.isArray(t))return[`${n}: expected object, got ${dr(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(...cr(t,i[e],`${n}.${e}`));let s=e.additionalProperties;if(lr(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(...cr(s,t,`${n}.${e}`));return r}case`array`:{if(!Array.isArray(t))return[`${n}: expected array, got ${dr(t)}`];let i=e.items;return i&&t.forEach((e,t)=>{r.push(...cr(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 ${dr(t)}`];case`number`:case`integer`:return typeof t!=`number`||Number.isNaN(t)?[`${n}: expected number, got ${dr(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 ${dr(t)}`];case`null`:return t===null?r:[`${n}: expected null, got ${dr(t)}`];default:return i===void 0?[`${n}: schema node declares neither a type nor anyOf`]:[`${n}: unsupported schema type ${String(i)}`]}}function lr(e){let t=e.additionalProperties;return t===!1||t===void 0&&e.properties!==void 0}function ur(e,t,n){if(e.length===0)return[`${n}: anyOf declares no members`];let r=e.map((e,r)=>cr(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 dr(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function fr(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 pr(e,t){return xe(e,t,`json_schema`)===!0?`response_schema`:xe(e,t,`json_object`)===!0?`json_object`:`none`}function mr(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=pr(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 hr=e=>process.env[e];function gr(e){return t=>e[t]}function _r(e,t){for(let n of e??[]){let e=t(n);if(typeof e==`string`&&e.trim().length>0)return e.trim()}}function vr(e,t={},n=hr){let r=e.credentialRequirement,i=t.baseUrl??_r(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=_r(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 yr(e,t={},n=hr){if(e.createImageProvider===void 0)return;let r=vr(e,t,n);if(r.ok)try{let t=e.createImageProvider(r.config);return Ce(t)?t:void 0}catch{return}}function br(e,t={},n=hr){if(e.createVideoProvider===void 0)return;let r=vr(e,t,n);if(r.ok)try{let t=e.createVideoProvider(r.config);return we(t)?t:void 0}catch{return}}const xr=`$ENV:`;function Sr(e){return e.startsWith(xr)}function Cr(e){return`${xr}${e}`}function wr(e,t=hr){if(!Sr(e))return e;let n=e.slice(5).trim();if(n.length!==0)return t(n)}function Tr(e,t=hr){return e===void 0||e.length===0?!1:wr(e,t)!==void 0}function Er(e,t,n=hr){let r=_e(t,e.name)?.defaults??{},i=e.model??r.model;if(!i)throw Error(`Provider ${e.name} requires model`);let a=e.apiKey??r.apiKey,o=a!==void 0&&Sr(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:wr(a,n),...o?{apiKeyEnv:o}:{},baseURL:e.baseURL??r.baseURL,timeout:e.timeout,...s!==void 0&&{options:s}}}function Dr(e,t){let n=_e(t,e.name);if(n===void 0)throw Error(`Unknown provider: ${e.name}. Currently supported: ${ve(t)}`);let r=ye(n);if(r!==void 0&&!Or(e,r))throw Error(`Provider ${e.name} requires ${Ar(r)}`);return n.createProvider(e)}function Or(e,t){return t.anyOf.some(t=>kr(e,t))}function kr(e,t){let n=e[t];return n!==void 0&&n.length>0}function Ar(e){return e.anyOf.map(e=>e===`apiKey`?`apiKey (API key)`:e).join(` or `)}function U(){let e=globalThis.crypto;if(typeof e?.randomUUID==`function`)return e.randomUUID();if(typeof e?.getRandomValues==`function`){let t=e.getRandomValues(new Uint8Array(16));t[6]=(t[6]??0)&15|64,t[8]=(t[8]??0)&63|128;let n=Array.from(t,e=>e.toString(16).padStart(2,`0`)).join(``);return`${n.slice(0,8)}-${n.slice(8,12)}-${n.slice(12,16)}-${n.slice(16,20)}-${n.slice(20)}`}throw Error(`No cryptographic randomness is available on this platform (globalThis.crypto is missing both randomUUID and getRandomValues), so a unique identifier cannot be generated. This is not something to substitute Math.random for.`)}function jr(e,t){let n={id:U(),role:`user`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Mr(e,t){let n={id:U(),role:`assistant`,content:e,state:t?.state??`complete`,timestamp:new Date};return t?.toolCalls&&(n.toolCalls=t.toolCalls),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Nr(e,t){let n={id:U(),role:`system`,content:e,state:`complete`,timestamp:new Date};return t?.name&&(n.name=t.name),t?.metadata&&(n.metadata=t.metadata),t?.parts&&(n.parts=t.parts),n}function Pr(e,t){let n={id:U(),role:`tool`,content:e,toolCallId:t.toolCallId,state:`complete`,timestamp:new Date};return t.name&&(n.name=t.name),t.metadata&&(n.metadata=t.metadata),t.parts&&(n.parts=t.parts),n}var Fr=class{maxMessages;entries=[];constructor(e){this.maxMessages=e?.maxMessages||0}addMessage(e){this.entries.push(Ze(e)),this.applyMessageLimit()}addEntry(e){this.entries.push(e)}getHistory(){return[...this.entries]}addUserMessage(e,t,n){this.addMessage(jr(e,{...t&&{metadata:t},...n&&{parts:n}}))}addAssistantMessage(e,t,n,r){this.addMessage(Mr(e,{...t&&{toolCalls:t},...n&&{metadata:n},...r&&{parts:r}}))}addSystemMessage(e,t,n){this.addMessage(Nr(e,{...t&&{metadata:t},...n&&{parts:n}}))}setSystemPrompt(e,t,n){let r=e=>Ye(e)&&tt(Xe(e)),i=this.entries.filter(e=>!r(e)),a=Ze(Nr(e,{...t&&{metadata:t},...n&&{parts:n}}));i.unshift(a),this.entries=i}addToolMessageWithId(e,t,n,r,i){this.addMessage(Pr(e,{toolCallId:t,name:n,...r&&{metadata:r},...i&&{parts:i}}))}getMessages(){return this.entries.filter(Ye).map(Xe)}getMessagesByRole(e){return this.getMessages().filter(t=>t.role===e)}getRecentMessages(e){return this.getMessages().slice(-e)}getMessageCount(){return this.entries.filter(Ye).length}clear(){this.entries=[]}applyMessageLimit(){if(this.maxMessages<=0)return;let e=this.entries.filter(Ye);if(e.length<=this.maxMessages)return;let t=e.map(Xe),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=>!Ye(e)||o.has(e.id))}},Ir=class{history;pendingAssistant=null;constructor(e=0){this.history=new Fr({maxMessages:e})}addMessage(e){this.history.addMessage(e)}addUserMessage(e,t,n){this.history.addUserMessage(e,t,n)}addAssistantMessage(e,t,n,r){this.history.addAssistantMessage(e,t,n,r)}addSystemMessage(e,t,n){this.history.addSystemMessage(e,t,n)}setSystemPrompt(e,t,n){this.history.setSystemPrompt(e,t,n)}addToolMessage(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n||`unknown`,r,i)}addToolMessageWithId(e,t,n,r,i){this.history.addToolMessageWithId(e,t,n,r,i)}addEntry(e){this.history.addEntry(e)}getHistory(){return this.history.getHistory()}getMessages(){return this.history.getMessages()}getMessagesByRole(e){return this.history.getMessagesByRole(e)}getRecentMessages(e){return this.history.getRecentMessages(e)}getMessageCount(){return this.history.getMessageCount()}beginAssistant(){this.pendingAssistant||={id:U(),content:``,toolCalls:[]}}appendStreaming(e){this.pendingAssistant||={id:U(),content:``,toolCalls:[]},this.pendingAssistant.content+=e}appendToolCall(e){this.pendingAssistant||={id:U(),content:``,toolCalls:[]},this.pendingAssistant.toolCalls.some(t=>t.id===e.id)||this.pendingAssistant.toolCalls.push(e)}commitAssistant(e,t){if(!this.pendingAssistant)return;let n=this.pendingAssistant,r=n.toolCalls.length>0,i=n.content,a={id:n.id,role:`assistant`,content:i,state:e,timestamp:new Date,...r&&{toolCalls:n.toolCalls},...t&&{metadata:t}};this.history.addMessage(a),this.pendingAssistant=null}discardPending(){this.pendingAssistant=null}hasPendingAssistant(){return this.pendingAssistant!==null}getPendingContent(){return this.pendingAssistant?.content??``}getMessagesForAPI(){return this.history.getMessages().map(e=>{let t={role:e.role,content:e.content};return et(e)&&e.state===`interrupted`&&(t.content=(t.content||``)+`
|
|
2
2
|
|
|
3
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()}},Lr=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 Ir(this.maxMessagesPerConversation))),this.conversations.get(e)}hasConversation(e){return this.conversations.has(e)}removeConversation(e){let t=this.conversations.delete(e);return t&&this.logger.debug(`Removed conversation`,{conversationId:e}),t}clearAll(){let e=this.conversations.size;this.conversations.clear(),this.logger.debug(`Cleared all conversations`,{removedCount:e})}getStats(){let e=Array.from(this.conversations.keys()),t=Array.from(this.conversations.values()).reduce((e,t)=>e+t.getMessageCount(),0);return{totalConversations:this.conversations.size,conversationIds:e,totalMessages:t}}cleanupOldConversations(){if(this.conversations.size===0)return;let e=this.conversations.keys().next().value;e&&this.conversations.delete(e)}};function Rr(){let e,t=0;return{observe(n){t+=1,t===1&&(e=n)},terminal(n){if(t>1)throw Error(`Provider "${n}" emitted ${t} model-effort outcomes`);return e}}}function zr(e,t,n){if(n!==void 0&&t?.onModelEffortOutcome!==void 0)try{t.onModelEffortOutcome(n)}catch(t){e.warn(`Model-effort outcome observer failed`,{error:t instanceof Error?t.message:String(t)})}}var Br=class extends tn{name=`local`;version=`1.0.0`;providers=new Map;config;constructor(e={}){super(),this.config={timeout:3e4,maxRetries:3,retryDelay:1e3,enableLogging:!1,...e}}registerProvider(e,t){this.providers.set(e,t)}unregisterProvider(e){this.providers.delete(e)}getProvider(e){return this.providers.get(e)}async executeChat(e){this.validateRequest(e);let t=this.requireChatProvider(e);this.config.enableLogging&&this.logDebug(`Executing chat with provider: ${e.provider}, model: ${e.model}`);try{let n=Rr(),r=await this.withRetry(async()=>(n=Rr(),await this.withTimeout(t.chat(e.messages,{...e.options,model:e.model,tools:e.tools,onModelEffortOutcome:e=>{n.observe(e)}}),this.config.timeout)),this.config.maxRetries,this.config.retryDelay);if(r.role!==`assistant`)throw Error(`Expected assistant message, got ${r.role}`);let i=n.terminal(e.provider);return this.validateResponse(r),zr(this.logger,e.options,i),{message:r,...i!==void 0&&{modelEffortOutcome:i}}}catch(t){let n=t instanceof Error?t:Error(String(t));throw this.logError(`Chat execution failed`,n,{provider:e.provider,model:e.model}),n}}async*executeChatStream(e){this.validateRequest(e);let t=this.providers.get(e.provider);if(!t)throw Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chatStream)throw Error(`Provider "${e.provider}" does not implement chatStream method`);this.config.enableLogging&&this.logDebug(`Executing streaming chat with provider: ${e.provider}, model: ${e.model}`);try{let n=Rr(),r=t.chatStream(e.messages,{...e.options,model:e.model,tools:e.tools,onModelEffortOutcome:e=>{n.observe(e)}});for await(let e of r)this.validateResponse(e),yield{kind:`message`,message:e};let i=n.terminal(e.provider);zr(this.logger,e.options,i),yield{kind:`terminal`,...i!==void 0&&{modelEffortOutcome:i}}}catch(t){let n=t instanceof Error?t:Error(String(t));throw this.logError(`Streaming chat execution failed`,n,{provider:e.provider,model:e.model}),n}}supportsTools(){for(let e of this.providers.values())if(e.supportsTools&&e.supportsTools())return!0;return!1}validateConfig(){try{if(this.config.timeout<=0||this.config.maxRetries<0||this.config.retryDelay<0)return!1;for(let e of this.providers.values())if(e.validateConfig&&!e.validateConfig())return!1;return!0}catch{return!1}}async dispose(){this.config.enableLogging&&this.logDebug(`Disposing ${this.providers.size} providers`);let e=[];for(let t of this.providers.values())t.dispose&&e.push(t.dispose());await Promise.all(e),this.providers.clear()}requireChatProvider(e){let t=this.providers.get(e.provider);if(!t)throw Error(`Provider "${e.provider}" not registered with LocalExecutor`);if(!t.chat)throw Error(`Provider "${e.provider}" does not implement chat method`);return t}};const Vr=/^[A-Za-z0-9_@%+:,./][A-Za-z0-9_@%+=:,./-]*$/;function Hr(e){return Vr.test(e)?e:void 0}var Ur=class{totalEmitted=0;totalErrors=0;incrementEmitted(){this.totalEmitted+=1}incrementErrors(){this.totalErrors+=1}getSnapshot(){return{totalEmitted:this.totalEmitted,totalErrors:this.totalErrors}}};function Wr(e,t){if(e.maxListeners!==void 0&&e.maxListeners<0)throw new T(`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 T(`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 T(`Invalid buffer.flushInterval option: ${e.buffer.flushInterval}. Must be a non-negative number.`,t,{bufferFlushInterval:e.buffer.flushInterval})}async function Gr(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 Kr(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 qr(e){let t={},n=0;for(let[r,i]of e)t[r]=i.length,n+=i.length;return{listenerCounts:t,totalListeners:n}}function Jr(e,t,n,r){let{listenerCounts:i,totalListeners:a}=qr(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 Yr(e,t,n,r,i,a,o){e.has(t)||e.set(t,[]);let s=e.get(t);if(s.length>=a)throw new T(`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 Xr(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 Zr(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 Qr=class extends en{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 Ur,Wr(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??Wt.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=Zr(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 Yr(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 Xr(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 Kr(e,this.handlers,this.pluginOptions.async,(e,t)=>this.off(e,t),(e,t)=>Gr(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 Jr(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 $r=[`string`,`number`,`integer`,`boolean`,`array`,`object`,`null`];var ei=class{tools=new Map;register(e){if(!e.schema?.name)throw new r(`Tool must have a valid schema with name`);let t=e.schema.name;this.validateToolSchema(e.schema),this.tools.has(t)&&A.warn(`Tool "${t}" is already registered, overriding`,{toolName:t,existingTool:this.tools.get(t)?.constructor.name}),this.tools.set(t,e),A.debug(`Tool "${t}" registered successfully`,{toolName:t,toolType:e.constructor.name,parameters:Object.keys(e.schema.parameters?.properties||{})})}unregister(e){if(!this.tools.has(e)){A.warn(`Attempted to unregister non-existent tool "${e}"`);return}this.tools.delete(e),A.debug(`Tool "${e}" unregistered successfully`)}get(e){return this.tools.get(e)}getAll(){return Array.from(this.tools.values())}getSchemas(){let e=this.getAll();return A.debug(`[TOOL-FLOW] ToolRegistry.getSchemas() - Tools before schema extraction`,{count:e.length,tools:e.map(e=>({name:e.schema?.name??`unnamed`,hasSchema:!!e.schema,schemaType:typeof e.schema,toolType:e.constructor?.name||`unknown`}))}),this.getAll().map(e=>e.schema)}has(e){return this.tools.has(e)}clear(){let e=this.tools.size;this.tools.clear(),A.debug(`Cleared ${e} tools from registry`)}getToolNames(){return Array.from(this.tools.keys())}getToolsByPattern(e){let t=typeof e==`string`?new RegExp(e):e;return this.getAll().filter(e=>t.test(e.schema.name))}size(){return this.tools.size}validateToolSchema(e){if(!e.name||typeof e.name!=`string`)throw new r(`Tool schema must have a valid name`);if(!e.description||typeof e.description!=`string`)throw new r(`Tool schema must have a description`);if(!e.parameters||typeof e.parameters!=`object`||e.parameters===null||Array.isArray(e.parameters))throw new r(`Tool schema must have parameters object`);if(e.parameters.type!==`object`)throw new r(`Tool parameters type must be "object"`);if(e.parameters.properties)for(let[t,n]of Object.entries(e.parameters.properties))ti(t,n);if(e.parameters.required){let t=e.parameters.properties||{};for(let n of e.parameters.required)if(!t[n])throw new r(`Required parameter "${n}" is not defined in properties`)}}};function ti(e,t){if(t?.anyOf){if(t.anyOf.length===0)throw new r(`Parameter "${e}" declares an empty anyOf`);t.anyOf.forEach((t,n)=>ti(`${e}|anyOf[${n}]`,t));return}if(!t?.type)throw new r(`Parameter "${e}" must declare a type or anyOf`);if(!$r.includes(t.type))throw new r(`Parameter "${e}" has invalid type "${t.type}"`);if(t.properties)for(let[n,r]of Object.entries(t.properties))ti(`${e}.${n}`,r);t.items&&ti(`${e}[]`,t.items)}function ni(e,n,r){let i=cr(r,n,`$`);if(i.length>0)throw new t(`output does not match the declared outputSchema: ${i.join(`; `)}`,e,void 0,{outputSchemaIssues:i})}function ri(e,t,n){let r=ii(e,t,n);return r?[r]:cr(n,t,`Parameter "${e}"`)}function ii(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 ${ai(t)}`;case`number`:case`integer`:return typeof t==`number`&&!isNaN(t)?void 0:`Parameter "${e}" must be a number, got ${ai(t)}`;case`boolean`:return typeof t==`boolean`?void 0:`Parameter "${e}" must be a boolean, got ${ai(t)}`;case`array`:return Array.isArray(t)?void 0:`Parameter "${e}" must be an array, got ${ai(t)}`;case`object`:return typeof t==`object`&&t&&!Array.isArray(t)?void 0:`Parameter "${e}" must be an object, got ${ai(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 ai(e){return e===null?`null`:Array.isArray(e)?`array`:typeof e}function oi(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(...ri(t,a,r));continue}i.push(`Unknown parameter: ${t}`);continue}i.push(...ri(t,a,e))}return i}function si(e,t,n,r){let i=oi(e,t,n,r);return{isValid:i.length===0,errors:i}}var ci=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)}},li=class extends ci{emit(e,t,n){}};const ui=new li;function di(e){return e===ui||e instanceof li}function fi(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 pi(){return`span_${Date.now().toString(36)}_${Math.random().toString(36).slice(2,10)}`}var mi=class extends ci{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??pi()},i=fi(this.binding.ownerType,e);this.base.emit(i,t,r)}subscribe(e){this.base.subscribe(e)}unsubscribe(e){this.base.unsubscribe(e)}};function W(e,t){return new mi(e,t)}function hi(e,t){return W(e,t)}var gi=class extends ci{emit(e,t,n){this.notifyListeners(e,t,n)}};const _i={COMPLETED:`span_completed`},vi={COMPLETED:`provider_call_completed`},yi={SWITCHED:`provider_fallback`};function bi(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 xi={COMPLETED:`tool_body_completed`},Si={COMPLETED:`tool_queue_completed`},Ci={DECIDED:`tool_permission_decided`},wi=`span`;var Ti=class e{resultExecutor;schema;fn;eventService;constructor(e,t,n){this.resultExecutor=n,this.schema=e,this.fn=t,this.validateConstructorInputs()}static fromResult(n,r){return new e(n,async(e,i)=>{let a=await r(e,i);if(!a.success)throw new t(a.error??`Tool execution failed`,n.name);if(a.data===void 0)throw new t(`Tool execution succeeded but returned no data`,n.name);return a.data},r)}getName(){return this.schema.name}setEventService(e){this.eventService=e}async execute(e,n){let i=this.schema.name;if(!this.validate(e))throw new r(`Invalid parameters for tool "${i}": ${oi(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).join(`, `)}`);let a=Date.now(),o,s;try{this.resultExecutor?(s=await this.resultExecutor(e,n),o=s.data):o=await this.fn(e,n)}catch(a){throw z(a)||a instanceof t||a instanceof r?a:new t(`Function tool execution failed: ${a instanceof Error?a.message:String(a)}`,i,a instanceof Error?a:Error(String(a)),{parameterCount:Object.keys(e||{}).length,hasContext:!!n})}let c=Date.now()-a;this.schema.outputSchema&&(!s||s.success)&&ni(i,o,this.schema.outputSchema);let l=n?.instanceEventService??this.eventService;if(l){let e={timestamp:new Date,spanId:pi(),durationMs:c,op:i};l.emit(_i.COMPLETED,e)}return s||{success:!0,data:o,metadata:{executionTime:c,toolName:i,parameters:e}}}validate(e){return oi(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties).length===0}validateParameters(e){return si(e,this.schema.parameters.required||[],this.schema.parameters.properties||{},this.schema.parameters.additionalProperties)}getDescription(){return this.schema.description}validateConstructorInputs(){if(!this.schema)throw new r(`Tool schema is required`);if(!this.fn||typeof this.fn!=`function`)throw new r(`Tool function is required and must be a function`);if(!this.schema.name)throw new r(`Tool schema must have a name`)}};const Ei=`at least one tool must stay resident; all tools cannot be deferred`,Di=`a tool schema was withheld but no ${De} tool is offered; register the loader or turn tool search off`;function Oi(e){return e.deferLoading===!0}function ki(e,t,n){if(n===`off`)return[...e];let r=e.filter(e=>!Oi(e)||t.has(e.name));if(e.length>0&&r.length===0)throw Error(Ei);if(r.length<e.length&&!r.some(e=>e.name===`ToolSearch`))throw Error(Di);return r}function Ai(e){if(e.length>0&&e.every(Oi))throw Error(Ei)}var ji=class extends He{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 Mi(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 Ni(e){if(!e.name)throw new o(`Agent name is required`,{component:`ConversationAgent`});if(!e.aiProviders||e.aiProviders.length===0)throw new o(`At least one AI provider is required`,{component:`ConversationAgent`});if(!e.defaultModel)throw new o(`Default model configuration is required`,{component:`ConversationAgent`});if(!e.defaultModel.provider||!e.defaultModel.model)throw new o(`Default model must specify both provider and model`,{component:`ConversationAgent`});let t=e.aiProviders.map(e=>e.name),n=t.filter((e,n)=>t.indexOf(e)!==n);if(n.length>0)throw new o(`Duplicate AI provider names: ${n.join(`, `)}`,{component:`ConversationAgent`,duplicates:n});if(!t.includes(e.defaultModel.provider))throw new o(`Default provider '${e.defaultModel.provider}' not found in AI providers list. Available: ${t.join(`, `)}`,{component:`ConversationAgent`,defaultProvider:e.defaultModel.provider,availableProviders:t})}var Pi=class{logger;getAIProviders;getTools;getEventService;ensureReady;getConfig;setConfig;getConfigVersion;bumpConfigVersion;getConfigUpdatedAt;setConfigUpdatedAt;emitAgentEvent;constructor(e,t,n,r,i,a,o,s,c,l,u,d){this.logger=e,this.getAIProviders=t,this.getTools=n,this.getEventService=r,this.ensureReady=i,this.getConfig=a,this.setConfig=o,this.getConfigVersion=s,this.bumpConfigVersion=c,this.getConfigUpdatedAt=l,this.setConfigUpdatedAt=u,this.emitAgentEvent=d}async updateTools(e){if(await this.ensureReady(),!Array.isArray(e))throw new o(`updateTools: next must be an array of tools`);this.getTools().getRegistry().clear();let t=[],n=this.getEventService();for(let r of e){n&&r.setEventService(n),this.getTools().addResultTool(r.schema,async(e,t)=>{if(!t)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Mi(r,e,t)},r.provenance);let e=r.schema.name;typeof e==`string`&&e.length>0&&t.push(e)}let r=this.getConfig();r.tools=e,this.setConfig(r);let i=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),this.emitAgentEvent(j.CONFIG_UPDATED,{parameters:{tools:t,systemMessage:r.systemMessage,provider:r.defaultModel.provider,model:r.defaultModel.model,temperature:r.defaultModel.temperature,maxTokens:r.defaultModel.maxTokens},metadata:{version:i}}),{version:i}}async updateConfiguration(e){if(e.tools)return this.updateTools(e.tools);if(e.name!==void 0){this.setConfig({...this.getConfig(),name:e.name});let t=this.bumpConfigVersion();return this.setConfigUpdatedAt(Date.now()),{version:t}}throw new o("updateConfiguration: only `tools` and `name` are supported")}async getConfiguration(){await this.ensureReady();let e=this.getTools().getTools().map(e=>({name:e.name,parameters:(()=>{let t=e.parameters?.properties;return t&&typeof t==`object`?Object.keys(t):void 0})()}));return{version:this.getConfigVersion(),tools:e,updatedAt:this.getConfigUpdatedAt(),metadata:void 0}}setModel(e){if(!e.provider||!e.model)throw new o(`Both provider and model are required`,{component:`ConversationAgent`});let t=this.getAIProviders(),n=t.getProviderNames();if(!n.includes(e.provider))throw new o(`AI Provider '${e.provider}' not found. Available: ${n.join(`, `)}`,{component:`ConversationAgent`,provider:e.provider,availableProviders:n});t.setCurrentProvider(e.provider,e.model);let r=this.getConfig();this.setConfig({...r,defaultModel:{...r.defaultModel,provider:e.provider,model:e.model,...e.temperature!==void 0&&{temperature:e.temperature},...e.maxTokens!==void 0&&{maxTokens:e.maxTokens},...e.topP!==void 0&&{topP:e.topP},...e.effort!==void 0&&{effort:e.effort}}}),this.logger.debug(`Model configuration updated`,e)}getModel(){let e=this.getAIProviders().getCurrentProvider();if(!e)throw new o(`No provider is currently set`,{component:`ConversationAgent`});let t=this.getConfig();return{provider:e.provider,model:e.model,...t.defaultModel.temperature!==void 0&&{temperature:t.defaultModel.temperature},...t.defaultModel.maxTokens!==void 0&&{maxTokens:t.defaultModel.maxTokens},...t.defaultModel.topP!==void 0&&{topP:t.defaultModel.topP},...t.defaultModel.effort!==void 0&&{effort:t.defaultModel.effort}}}setSystemMessage(e){let t=this.getConfig();t.systemMessage=e,this.setConfig(t),this.setConfigUpdatedAt(Date.now())}getSystemMessage(){return this.getConfig().systemMessage}registerTool(e,t){if(t.hasTool(e.schema.name))throw Error(`[STRICT-POLICY][EMITTER-CONTRACT] Duplicate tool registration attempted: ${e.schema.name}. Tool registration flow must provide a single authoritative registration path.`);t.addResultTool(e.schema,async(t,n)=>{if(!n)throw Error(`[AGENT] Missing ToolExecutionContext for tool execution`);return Mi(e,t,n)},e.provenance),this.logger.debug(`Tool registered`,{toolName:e.schema.name})}},Fi=class extends Ue{registry;allowedTools;resolveToolSearchMode;isToolVisible;loadedDeferredTools=new Set;constructor(e){super({readyOnConstruction:!0}),this.registry=new ei,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 Ti(e,t);this.registry.register(n),A.debug(`Tool "${e.name}" registered successfully`)}addResultTool(e,t,n){this.ensureInitialized();let r=Ti.fromResult(e,t);Object.defineProperty(r,"provenance",{value:Be(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 ki(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=>Oi(e)&&!this.loadedDeferredTools.has(e.name))}loadDeferredTools(e){this.ensureInitialized();let n=e.map(e=>{let n=this.isToolVisible(e)?this.registry.get(e)?.schema:void 0;if(!n)throw new t(`Tool "${e}" is not registered, so it cannot be loaded`,e);return n});for(let e of n)Oi(e)&&this.loadedDeferredTools.add(e.name);return n}async executeTool(e,n,r){let i=await this.executeToolResult(e,n,r);if(!i.success)throw new t(i.error||`Tool execution failed`,e);if(i.data===void 0)throw new t(`Tool execution succeeded but returned no data`,e);return i.data}async executeToolResult(e,n,r){if(this.ensureInitialized(),this.allowedTools&&!this.allowedTools.includes(e))throw new t(`Tool "${e}" is not in the allowed tools list`,e);let i=this.registry.get(e);if(!i)throw new t(`Tool "${e}" is not registered`,e);let a=Be(i.provenance),o;try{o=await i.execute(n,r)}catch(n){throw z(n)?n:n instanceof Error?new t(n.message,e,n):new t(String(n),e)}return Ve(o,a)}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 Ii(e){let t=Li(e.metadata),n=zi(e.usage);return t??n}function Li(e){if(!e)return;let t=zi({inputTokens:Bi(e,`inputTokens`),outputTokens:Bi(e,`outputTokens`),promptTokens:Bi(e,`promptTokens`),completionTokens:Bi(e,`completionTokens`),totalTokens:Bi(e,`totalTokens`),cacheReadTokens:Bi(e,`cacheReadTokens`)});if(t)return t;let n=e.usage;if(typeof n==`string`)return Ri(n);if(Hi(n))return zi(n)}function Ri(e){try{return zi(JSON.parse(e))}catch{return}}function zi(e){if(!e)return;let t=Vi(e.inputTokens,e.promptTokens),n=Vi(e.outputTokens,e.completionTokens);if(t===void 0||n===void 0)return;let r=Vi(e.totalTokens),i=Vi(e.cacheReadTokens),a=i!==void 0&&i>=0&&i<=t;return{inputTokens:t,outputTokens:n,...r!==void 0&&{totalTokens:r},...a&&{cacheReadTokens:i}}}function Bi(e,t){let n=e[t];return typeof n==`number`&&Number.isFinite(n)?n:void 0}function Vi(...e){return e.find(e=>typeof e==`number`&&Number.isFinite(e))}function Hi(e){return typeof e==`object`&&!!e&&!Array.isArray(e)&&Object.values(e).every(e=>typeof e==`number`&&Number.isFinite(e))}const Ui=4;function Wi(e){return Math.ceil(JSON.stringify(e).length/4)}function Gi(e){return e.length===0?0:Math.ceil(JSON.stringify(e).length/4)}function Ki(e,t={}){let n=Wi(e),r=qi(e),i=r?.tokens,a=Ji(t.usageFloorTokens);return{usedTokens:r?.index===e.length-1?Math.max(i??0,a??0):Math.max(n,i??0,a??0),serializedTokens:n,...i!==void 0&&{providerTokens:i},...a!==void 0&&{usageFloorTokens:a}}}function qi(e){for(let t=e.length-1;t>=0;t--){let n=Ii(e[t]);if(n)return{tokens:n.totalTokens??n.inputTokens+n.outputTokens,index:t}}}function Ji(e){if(!(e===void 0||!Number.isFinite(e)||e<=0))return Math.ceil(e)}const Yi=k(`agent-core:models`),Xi=new Set;function Zi(e,t,n){let r=`${e}:${t}`;Xi.has(r)||(Xi.add(r),Yi.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 Qi=2e5,$i=new Map;function ea(...e){for(let t of e){let e=$i.get(t.id);e&&!ta(e,t)&&Yi.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)`),$i.set(t.id,t)}}function ta(e,t){return e.name===t.name&&e.contextWindow===t.contextWindow&&e.maxOutput===t.maxOutput}function na(e){return $i.get(e)}function ra(e){let t=na(e)?.contextWindow;return t===void 0?(Zi(e,`context window`,Qi),Qi):t}const ia=16384;function aa(e){let t=na(e)?.maxOutput;return t===void 0?(Zi(e,`max output`,ia),ia):t}function oa(e){return na(e)?.name??e}function sa(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 ca(e,t,n){let r=e.toolSearch??`auto`;if(r!==`auto`)return r;let i=n.filter(Oi);return i.length===0?`off`:i.length>15||Gi(i)/ra(t)>=.1?`on`:`off`}function la(e){return e.conversationId||`conv_${Date.now()}_${Math.random().toString(36).substr(2,9)}`}function ua(e){let t=new Fi({resolveToolSearchMode:()=>{let n=e();return n.isToolVisible?.(`ToolSearch`)===!1?`off`:ca(n,n.defaultModel.model,t.getTools())},isToolVisible:t=>e().isToolVisible?.(t)??!0});return t}var da=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)}},fa=class{logger;isReady;getExecutionService;constructor(e,t,n){this.logger=e,this.isReady=t,this.getExecutionService=n}addPlugin(e){let t=this.getExecutionService();if(!this.isReady()||!t)throw new o(`Cannot add plugin before agent is fully initialized. Await an operation like run() first, or pass plugins via the constructor config.`,{pluginName:e.name});t.registerPlugin(e),this.logger.debug(`Plugin added`,{pluginName:e.name})}removePlugin(e){let t=this.getExecutionService();if(!t)return!1;let n=t.removePlugin(e);return n&&this.logger.debug(`Plugin removed`,{pluginName:e}),n}getPlugin(e){let t=this.getExecutionService();if(t)return t.getPlugin(e)}getPlugins(){let e=this.getExecutionService();return e?e.getPlugins():[]}getPluginNames(){let e=this.getExecutionService();return!this.isReady()||!e?[]:e.getPlugins().map(e=>e.name)}};function pa(e){return{moduleManager:new da(e.getName(),e.getModuleRegistry(),e.getLogger(),e.getIsFullyInitialized,e.ensureFullyInitialized),pluginManager:new fa(e.getLogger(),e.getIsFullyInitialized,e.getExecutionService),configManager:new Pi(e.getLogger(),e.getAiProviders,e.getTools,e.getEventService,e.ensureFullyInitialized,e.getConfig,t=>e.setConfig(t),e.getConfigVersion,e.incrementConfigVersion,e.getConfigUpdatedAt,t=>e.setConfigUpdatedAt(t),(t,n)=>e.emitAgentEvent(t,n))}}const ma={ASSIGNED:`assigned`,COMPLETED:`completed`},ha=`task`,ga={MESSAGE:`message`,INPUT:`input`},_a=`user`;function va(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 ya(e,t,n,r,i){di(e)||e.emit(r,{timestamp:new Date,...i},{ownerType:Gt,ownerId:t,ownerPath:xa(t,n)})}function ba(){return new Qr({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 xa(e,t){return[...t?.ownerPath?.length?t.ownerPath.map(e=>({...e})):[],{type:`agent`,id:e}]}function Sa(e,t){return{conversationId:e.conversationId,...t.sessionId&&{sessionId:t.sessionId},...t.userId&&{userId:t.userId},...t.driverId&&{driverId:t.driverId},...t.turnSource&&{turnSource:t.turnSource},...t.metadata&&{metadata:t.metadata},...t.signal&&{signal:t.signal},awaitProviderSettlement:t.awaitProviderSettlement,...t.onTextDelta&&{onTextDelta:t.onTextDelta},...t.onExecutionEvent&&{onExecutionEvent:t.onExecutionEvent},...t.executionJournal&&{executionJournal:t.executionJournal},...t.maxExecutionRounds!==void 0&&{maxExecutionRounds:t.maxExecutionRounds},...t.maxSameToolInputs!==void 0&&{maxSameToolInputs:t.maxSameToolInputs},...t.allowToolOnlyCompletion!==void 0&&{allowToolOnlyCompletion:t.allowToolOnlyCompletion},...t.maxTokens!==void 0&&{maxTokens:t.maxTokens},...t.temperature!==void 0&&{temperature:t.temperature},...t.toolChoice!==void 0&&{toolChoice:t.toolChoice},...t.withholdHostedTools===!0&&{withholdHostedTools:!0},...t.ephemeralSystemContext!==void 0&&{ephemeralSystemContext:t.ephemeralSystemContext},...t.traceContext!==void 0&&{traceContext:t.traceContext}}}async function Ca(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,Sa(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 L?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*wa(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,Sa(e,n));if(!o.success)throw o.error??Error(`[STRICT-POLICY] Failed execution result missing error field — every success:false result must carry error`);return o.response}catch(t){throw t instanceof L?(i=!0,t):(e.logger.error(`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 Ta(e){return{responseFormat:{type:`json_schema`,schema:e.jsonSchema,name:e.name}}}function Ea(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
4
|
`)}async function Da(e,t,r,i){let a=(r.outputRetries??2)+1,o=Ta(i),s=t,c=[];for(let t=1;t<=a;t++){let n=ka(i,await Ca(e,s,r,o));if(n.success)return n.value;c=n.issues,e.logger.debug(`Structured output validation failed`,{attempt:t,maxAttempts:a,issues:c}),t<a&&(s=Ea(i,c))}throw new n(`response failed schema validation after ${a} attempt(s)`,c,a)}async function*Oa(e,t,r,i){let a=(r.outputRetries??2)+1,o=Ta(i),s=t,c=[];for(let t=1;t<=a;t++){let n=ka(i,yield*wa(e,s,r,o));if(n.success)return n.value;c=n.issues,e.logger.debug(`Structured output validation failed (stream)`,{attempt:t,maxAttempts:a,issues:c}),t<a&&(s=Ea(i,c))}throw new n(`response failed schema validation after ${a} attempt(s)`,c,a)}function ka(e,t){let n=fr(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 Aa(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 ja(e,t){return e.getConversationStore(t).getHistory()}function Ma(e,t,n){e.getConversationStore(t).addEntry(n)}function Na(e,t){e.getConversationStore(t).clear()}function Pa(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 Fa(e,t,n){e.getConversationStore(t).addMessage(n)}var Ia=class extends Ue{providers=new Map;currentProvider;currentModel;constructor(){super({readyOnConstruction:!0})}async doInitialize(){A.debug(`AIProviders initialized`)}async doDispose(){for(let[e,t]of this.providers)try{t.close&&await t.close(),A.debug(`Closed AI provider: ${e}`)}catch(t){A.warn(`Failed to close AI provider ${e}`,{error:t instanceof Error?t.message:String(t)})}this.providers.clear(),this.currentProvider=void 0,this.currentModel=void 0,A.debug(`AIProviders disposed`)}addProvider(e,t){this.ensureInitialized();let n=cn.validateProviderName(e);if(!n.isValid)throw new r(`Invalid provider name: ${n.errors.join(`, `)}`);if(!t||typeof t!=`object`||Array.isArray(t))throw new r(`Provider must be a valid object instance`);if(!t.name||typeof t.name!=`string`)throw new r(`Provider must have a valid name`);if(typeof t.chat!=`function`)throw new r(`Provider must have a chat method`);this.providers.has(e)&&A.warn(`Provider "${e}" is already registered, overriding`,{providerName:e,existingProvider:this.providers.get(e)?.name}),this.providers.set(e,t),A.debug(`AI provider "${e}" registered successfully`,{providerName:e,version:t.version,supportsStreaming:typeof t.chatStream==`function`})}removeProvider(e){if(this.ensureInitialized(),!this.providers.has(e)){A.warn(`Attempted to remove non-existent provider "${e}"`);return}let t=this.providers.get(e);t?.close&&t.close().catch(t=>{A.warn(`Failed to close provider ${e}`,{error:t.message})}),this.providers.delete(e),this.currentProvider===e&&(this.currentProvider=void 0,this.currentModel=void 0,A.debug(`Cleared current provider selection after removing "${e}"`)),A.debug(`AI provider "${e}" removed successfully`)}getProvider(e){return this.ensureInitialized(),this.providers.get(e)}getProviders(){return this.ensureInitialized(),Object.fromEntries(this.providers)}setCurrentProvider(e,t){if(this.ensureInitialized(),!this.providers.get(e))throw new o(`Provider "${e}" is not registered`);this.currentProvider=e,this.currentModel=t,A.debug(`Current AI provider set to "${e}" with model "${t}"`)}getCurrentProvider(){if(this.ensureInitialized(),!(!this.currentProvider||!this.currentModel))return{provider:this.currentProvider,model:this.currentModel}}isConfigured(){return this.ensureInitialized(),!!(this.currentProvider&&this.currentModel&&this.providers.has(this.currentProvider))}getCurrentProviderInstance(){if(!(!this.isConfigured()||!this.currentProvider))return this.providers.get(this.currentProvider)}getProviderNames(){return this.ensureInitialized(),Array.from(this.providers.keys())}getProvidersByPattern(e){this.ensureInitialized();let t=typeof e==`string`?new RegExp(e):e,n={};for(let[e,r]of this.providers)t.test(e)&&(n[e]=r);return n}supportsStreaming(e){this.ensureInitialized();let t=e||this.currentProvider;if(!t)return!1;let n=this.providers.get(t);return!!(n&&typeof n.chatStream==`function`)}getProviderCount(){return this.ensureInitialized(),this.providers.size}},La=class{build(e,t,n,r){let i=e.map(e=>({role:e.role,content:e.content})),a=JSON.stringify({messages:i,model:t,provider:n,temperature:r?.temperature,maxTokens:r?.maxTokens,effortCacheIdentity:r?.effortCacheIdentity??null});return{hash:this.sha256(a),model:t,provider:n}}computeIntegrityHash(e){return this.sha256(e)}sha256(e){let t=new ie(`SHA-256`,`TEXT`);return t.update(e),t.getHash(`HEX`)}},Ra=class{cache=new Map;accessOrder=[];maxEntries;ttlMs;keyBuilder=new La;hits=0;misses=0;constructor(e){this.maxEntries=e.maxEntries,this.ttlMs=e.ttlMs}get(e){let t=this.cache.get(e);if(!t){this.misses++;return}if(Date.now()-t.timestamp>this.ttlMs){this.cache.delete(e),this.removeFromAccessOrder(e),this.misses++;return}let n=this.keyBuilder.computeIntegrityHash(t.response);if(t.integrityHash!==n)throw this.cache.delete(e),this.removeFromAccessOrder(e),new p(`Integrity check failed for cache entry ${e}`,{hash:e,expected:n,actual:t.integrityHash});return this.touchAccessOrder(e),this.hits++,t}set(e){let t=e.key.hash;!this.cache.has(t)&&this.cache.size>=this.maxEntries&&this.evictLRU(),this.cache.set(t,e),this.touchAccessOrder(t)}delete(e){return this.cache.has(e)?(this.cache.delete(e),this.removeFromAccessOrder(e),!0):!1}clear(){this.cache.clear(),this.accessOrder.length=0,this.hits=0,this.misses=0}getStats(){let e=this.hits+this.misses;return{hits:this.hits,misses:this.misses,entries:this.cache.size,hitRate:e===0?0:this.hits/e}}touchAccessOrder(e){this.removeFromAccessOrder(e),this.accessOrder.push(e)}removeFromAccessOrder(e){let t=this.accessOrder.indexOf(e);t!==-1&&this.accessOrder.splice(t,1)}evictLRU(){let e=this.accessOrder.shift();e&&this.cache.delete(e)}},za=class{storage;keyBuilder;constructor(e,t){this.storage=e,this.keyBuilder=t}lookup(e,t,n,r){let i=this.keyBuilder.build(e,t,n,r),a=this.storage.get(i.hash);return a?a.response:void 0}store(e,t,n,r,i){let a=this.keyBuilder.build(e,t,n,i);this.storage.set({key:a,response:r,timestamp:Date.now(),integrityHash:this.keyBuilder.computeIntegrityHash(r)})}getStats(){return this.storage.getStats()}};function Ba(e){return`executionId`in e||`toolName`in e}function Va(e){let t=0,n=!1;for(let r=0;r<e.length;r++){let i=e[r]===` `||e[r]===` `||e[r]===`
|