eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.92 kB
JavaScript
import{expectFunction,expectObjectRecord}from"#internal/authored-module.js";import{toErrorMessage}from"#shared/errors.js";import{isDynamicSentinel}from"#dynamic/definition.js";import{registerDefinitionSource,stampDefinitionKey}from"#internal/authored-definition/source-identity.js";import{ResolveAgentError,loadResolvedModuleExport}from"#runtime/resolve-helpers.js";async function resolveDynamicToolDefinition(e,t,n){try{return resolveLoadedDynamicToolDefinition(await loadResolvedModuleExport({definition:e,kindLabel:`dynamic-tool`,moduleMap:t,nodeId:n}),e,e.eventNames)}catch(t){throw t instanceof ResolveAgentError?t:new ResolveAgentError(`Failed to resolve dynamic tool from "${e.logicalPath}": ${toErrorMessage(t)}`,{logicalPath:e.logicalPath,sourceId:e.sourceId})}}function resolveLoadedDynamicToolDefinition(e,t,n){let r=expectDynamicToolValue(e,t);return createResolvedDynamicToolResolver(r,t,n??Object.keys(r.events))}function createResolvedDynamicToolResolver(e,t,n){let r={};for(let i of n)r[i]=expectFunction(e.events[i],describe(t,`to provide a handler for event "${i}"`));let i=`dynamic-tool-source:${t.sourceId}`;return stampDefinitionKey(e,i),registerDefinitionSource(i,{kind:`tool`,logicalPath:t.logicalPath,name:t.slug}),{eventNames:[...n],events:r,exportName:t.exportName,extensionNamespace:t.extensionNamespace,logicalPath:t.logicalPath,rebindMissingCallbacks:t.rebindMissingCallbacks,slug:t.slug,sourceId:t.sourceId,sourceKind:`module`}}function expectDynamicToolValue(e,t){let n=expectObjectRecord(e,describe(t,`to return an object`));if(!isDynamicSentinel(n))throw Error(describe(t,`to be created by defineDynamic()`));return expectObjectRecord(n.events,describe(t,`to provide an events object`)),n}function describe(e,t){return`Expected the dynamic tool export "${e.exportName??`default`}" from "${e.logicalPath}" ${t}.`}export{resolveDynamicToolDefinition,resolveLoadedDynamicToolDefinition};