eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 3.8 kB
JavaScript
import{join,resolve}from"node:path";import{classifyAgentRootEntry}from"#discover/filesystem.js";import{createDiskProjectSource}from"#discover/project-source.js";import{createAgentSourceManifest}from"#discover/manifest.js";import{DISCOVER_CHANNELS_DIRECTORY_INVALID,DISCOVER_HOOKS_DIRECTORY_INVALID,DISCOVER_TOOLS_DIRECTORY_INVALID,createChannelNameDiagnostic,createHookNameDiagnostic,createToolNameDiagnostic,createUnsupportedRootDirectoryDiagnostics,discoverFlatModuleSource,discoverInstructionsSource,discoverNamedSourceDirectory,readSortedDirectoryEntries}from"#discover/grammar.js";import{discoverConnectionSources}from"#discover/connections.js";import{discoverSubagents}from"#discover/discover-subagent.js";import{discoverLibSources}from"#discover/lib.js";import{discoverSandboxSource}from"#discover/sandbox.js";import{discoverScheduleSources}from"#discover/schedules.js";import{discoverSkills}from"#discover/skills.js";import{stripNpmPackageScope}from"#shared/package-name.js";async function discoverAgent(a){let o=a.source??createDiskProjectSource(),s=resolve(a.appRoot),c=resolve(a.agentRoot),l=[],u=await tryReadPackageJsonName(o,s),d=await readSortedDirectoryEntries(o,c);l.push(...createUnsupportedRootDirectoryDiagnostics({classifyEntry:classifyAgentRootEntry,createUnsupportedDirectoryMessage(e){return`Ignoring unsupported directory "${e}/" in the agent root.`},rootEntries:d,rootPath:c}));let f=await discoverInstructionsSource({rootEntries:d,rootPath:c,source:o});l.push(...f.diagnostics);let p=discoverFlatModuleSource({rootEntries:d,rootPath:c,slotName:`agent`});l.push(...p.diagnostics);let m=await discoverNamedSourceDirectory({directoryName:`channels`,invalidDirectoryCode:DISCOVER_CHANNELS_DIRECTORY_INVALID,invalidDirectoryMessage:`Expected "${join(c,`channels`)}" to be a directory of authored channels.`,recursive:!0,rootEntries:d,rootPath:c,source:o,validateSegment:createChannelNameDiagnostic});l.push(...m.diagnostics);let h=await discoverLibSources({agentRoot:c,rootEntries:d,source:o});l.push(...h.diagnostics);let g=await discoverScheduleSources({agentRoot:c,rootEntries:d,source:o});l.push(...g.diagnostics);let _=await discoverConnectionSources({rootEntries:d,rootPath:c,source:o});l.push(..._.diagnostics);let v=await discoverSandboxSource({rootEntries:d,rootPath:c,source:o});l.push(...v.diagnostics);let y=await discoverNamedSourceDirectory({directoryName:`tools`,invalidDirectoryCode:DISCOVER_TOOLS_DIRECTORY_INVALID,invalidDirectoryMessage:`Expected "${join(c,`tools`)}" to be a directory of authored tools.`,recursive:!0,rootEntries:d,rootPath:c,source:o,validateSegment:createToolNameDiagnostic});l.push(...y.diagnostics);let b=await discoverNamedSourceDirectory({directoryName:`hooks`,invalidDirectoryCode:DISCOVER_HOOKS_DIRECTORY_INVALID,invalidDirectoryMessage:`Expected "${join(c,`hooks`)}" to be a directory of authored hooks.`,recursive:!0,rootEntries:d,rootPath:c,source:o,validateSegment:createHookNameDiagnostic});l.push(...b.diagnostics);let x=await discoverSkills({agentRoot:c,source:o});l.push(...x.diagnostics);let S=await discoverSubagents({agentRoot:c,appRoot:s,source:o});l.push(...S.diagnostics);let C={agentRoot:c,appRoot:s,channels:m.sources,connections:_.connections,packageName:u,diagnostics:l,hooks:b.sources,lib:h.lib,instructions:f.instructions,sandbox:v.sandbox,sandboxWorkspaces:v.sandboxWorkspace===null?[]:[v.sandboxWorkspace],schedules:g.schedules,skills:x.skills,tools:y.sources,subagents:S.subagents};return p.module!==void 0&&(C.configModule=p.module),{diagnostics:l,manifest:createAgentSourceManifest(C)}}async function tryReadPackageJsonName(t,n){try{let r=join(n,`package.json`),i=JSON.parse(await t.readTextFile(r)).name;return typeof i!=`string`||i.length===0?void 0:stripNpmPackageScope(i)}catch{return}}export{discoverAgent};