eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 6.47 kB
JavaScript
import{join,relative,resolve}from"node:path";import{discoverExtensionMountDeclarations,resolveExtensionMounts}from"#discover/discover-agent.js";import{classifyLocalSubagentEntry,getDirectoryEntryType,getSupportedModuleBaseName,normalizeLogicalPath}from"#discover/filesystem.js";import{createDiscoverErrorDiagnostic}from"#discover/diagnostics.js";import{createDiskProjectSource}from"#discover/project-source.js";import{createAgentSourceManifest,createLocalSubagentSourceRef,createModuleSourceRef}from"#discover/manifest.js";import{DISCOVER_HOOKS_DIRECTORY_INVALID,DISCOVER_TOOLS_DIRECTORY_INVALID,createHookNameDiagnostic,createToolNameDiagnostic,createUnsupportedRootDirectoryDiagnostics,discoverFlatModuleSource,discoverInstructionsSource,discoverNamedSourceDirectory,readSortedDirectoryEntries}from"#discover/grammar.js";import{discoverConnectionSources}from"#discover/connections.js";import{discoverLibSources}from"#discover/lib.js";import{discoverMemorySources}from"#discover/memory.js";import{discoverSandboxSource}from"#discover/sandbox.js";import{discoverSkills}from"#discover/skills.js";const DISCOVER_LOCAL_SUBAGENT_SCHEDULES_INVALID=`discover/local-subagent-schedules-invalid`,DISCOVER_REQUIRED_SUBAGENT_CONFIG_MODULE_MISSING=`discover/required-subagent-config-module-missing`,DISCOVER_SUBAGENTS_DIRECTORY_INVALID=`discover/subagents-directory-invalid`;async function discoverSubagents(e){let t=e.source??createDiskProjectSource(),n=resolve(e.agentRoot),r=resolve(e.subagentsDirectoryPath??join(n,`subagents`)),i=normalizeLogicalPath(e.subagentsLogicalPath??relative(n,r)),a=await t.stat(r);if(a===`missing`)return{diagnostics:[],subagents:[]};if(a!==`directory`)return{diagnostics:[createDiscoverErrorDiagnostic({code:DISCOVER_SUBAGENTS_DIRECTORY_INVALID,message:`Expected "${r}" to be a directory of authored subagents.`,sourcePath:r})],subagents:[]};let o=await readSortedDirectoryEntries(t,r),s=[],c=[];for(let a of o){if(a.isFile()){let t=getSupportedModuleBaseName(a.name);if(t===null)continue;c.push(discoverSingleFileSubagent({agentRoot:n,appRoot:e.appRoot,subagentId:t,subagentLogicalPath:join(i,a.name),subagentPath:join(r,a.name)}));continue}if(!a.isDirectory())continue;let o=await discoverLocalSubagentPackage({appRoot:e.appRoot,source:t,subagentId:a.name,subagentLogicalPath:join(i,a.name),subagentRoot:join(r,a.name)});s.push(...o.diagnostics),c.push(o.subagent)}return{diagnostics:s,subagents:c}}function discoverSingleFileSubagent(e){let t=createModuleSourceRef({logicalPath:e.subagentLogicalPath}),n=createAgentSourceManifest({agentId:e.subagentId,agentRoot:e.agentRoot,appRoot:e.appRoot,configModule:t});return createLocalSubagentSourceRef({entryPath:e.subagentPath,logicalPath:e.subagentLogicalPath,manifest:n,rootPath:e.agentRoot,subagentId:e.subagentId})}async function discoverLocalSubagentPackage(e){let t=[],n=await readSortedDirectoryEntries(e.source,e.subagentRoot);t.push(...createUnsupportedRootDirectoryDiagnostics({classifyEntry:classifyLocalSubagentEntry,createUnsupportedDirectoryMessage(e){return`Ignoring unsupported directory "${e}/" in the local subagent root.`},rootEntries:n,rootPath:e.subagentRoot}));let r=await discoverInstructionsSource({required:!1,rootEntries:n,rootPath:e.subagentRoot,source:e.source});t.push(...r.diagnostics);let i=discoverFlatModuleSource({missingDiagnostic:{code:DISCOVER_REQUIRED_SUBAGENT_CONFIG_MODULE_MISSING,message:`Expected one authored subagent config module at "agent.ts", "agent.cts", "agent.mts", "agent.js", "agent.cjs", or "agent.mjs".`},rootEntries:n,rootPath:e.subagentRoot,slotName:`agent`});t.push(...i.diagnostics);let a=await discoverConnectionSources({rootEntries:n,rootPath:e.subagentRoot,source:e.source});t.push(...a.diagnostics);let o=await discoverMemorySources({rootEntries:n,rootPath:e.subagentRoot,source:e.source});t.push(...o.diagnostics);let s=await discoverSandboxSource({rootEntries:n,rootPath:e.subagentRoot,source:e.source});t.push(...s.diagnostics);let c=await discoverNamedSourceDirectory({directoryName:`tools`,invalidDirectoryCode:DISCOVER_TOOLS_DIRECTORY_INVALID,invalidDirectoryMessage:`Expected "${join(e.subagentRoot,`tools`)}" to be a directory of authored tools.`,recursive:!0,rootEntries:n,rootPath:e.subagentRoot,source:e.source,validateSegment:createToolNameDiagnostic});t.push(...c.diagnostics);let l=await discoverNamedSourceDirectory({directoryName:`hooks`,invalidDirectoryCode:DISCOVER_HOOKS_DIRECTORY_INVALID,invalidDirectoryMessage:`Expected "${join(e.subagentRoot,`hooks`)}" to be a directory of authored hooks.`,recursive:!0,rootEntries:n,rootPath:e.subagentRoot,source:e.source,validateSegment:createHookNameDiagnostic});t.push(...l.diagnostics);let u=await discoverLibSources({agentRoot:e.subagentRoot,rootEntries:n,source:e.source});t.push(...u.diagnostics),t.push(...createLocalSubagentScheduleDiagnostics(e.subagentRoot,n));let d=await discoverSkills({agentRoot:e.subagentRoot,source:e.source});t.push(...d.diagnostics);let f=await discoverSubagents({agentRoot:e.subagentRoot,appRoot:e.appRoot,source:e.source});t.push(...f.diagnostics);let p=await discoverExtensionMountDeclarations({agentRoot:e.subagentRoot,source:e.source});t.push(...p.diagnostics);let m=await resolveExtensionMounts({agentRoot:e.subagentRoot,appRoot:e.appRoot,mounts:p.mounts,source:e.source});t.push(...m.diagnostics);let h={agentRoot:e.subagentRoot,appRoot:e.appRoot,connections:a.connections,diagnostics:t,extensions:p.mounts.map(e=>e.mountRef),resolvedExtensions:m.mounts,hooks:l.sources,memories:o.memories,lib:u.lib,instructions:r.instructions,sandbox:s.sandbox,sandboxWorkspaces:s.sandboxWorkspace===null?[]:[s.sandboxWorkspace],skills:d.skills,tools:c.sources,subagents:f.subagents};i.module!==void 0&&(h.configModule=i.module);let g=createAgentSourceManifest(h);return{diagnostics:t,subagent:createLocalSubagentSourceRef({entryPath:e.subagentRoot,logicalPath:e.subagentLogicalPath,manifest:g,rootPath:e.subagentRoot,subagentId:e.subagentId})}}function createLocalSubagentScheduleDiagnostics(e,t){return t.flatMap(t=>classifyLocalSubagentEntry(t.name,getDirectoryEntryType(t))===`invalid-schedules-directory`?[createDiscoverErrorDiagnostic({code:DISCOVER_LOCAL_SUBAGENT_SCHEDULES_INVALID,message:`Local subagent packages cannot define schedules at "${join(e,t.name)}".`,sourcePath:join(e,t.name)})]:[])}export{DISCOVER_LOCAL_SUBAGENT_SCHEDULES_INVALID,DISCOVER_REQUIRED_SUBAGENT_CONFIG_MODULE_MISSING,DISCOVER_SUBAGENTS_DIRECTORY_INVALID,discoverSubagents};