eve
Version:
Filesystem-first framework for durable backend AI agents that run anywhere.
1 lines • 1.55 kB
JavaScript
import{readFile,readdir}from"node:fs/promises";import{join,posix}from"node:path";import{MODEL_SKILL_ROOT}from"#shared/skill-paths.js";import{WORKSPACE_ROOT}from"#runtime/workspace/types.js";const RESOURCE_WORKSPACE_DIRECTORY=`workspace`,RESOURCE_SKILLS_DIRECTORY=`skills`;async function materializeWorkspaceDirectory(e){let t=[],n=await readdir(e,{withFileTypes:!0}),r=n.find(e=>e.name===RESOURCE_WORKSPACE_DIRECTORY&&e.isDirectory()),i=n.find(e=>e.name===RESOURCE_SKILLS_DIRECTORY&&e.isDirectory());return r!==void 0||i!==void 0?(r!==void 0&&await addMaterializedDirectoryFiles({files:t,logicalDirectoryPath:`.`,sourceDirectoryPath:join(e,RESOURCE_WORKSPACE_DIRECTORY),targetRoot:WORKSPACE_ROOT}),i!==void 0&&await addMaterializedDirectoryFiles({files:t,logicalDirectoryPath:`.`,sourceDirectoryPath:join(e,RESOURCE_SKILLS_DIRECTORY),targetRoot:MODEL_SKILL_ROOT})):await addMaterializedDirectoryFiles({files:t,logicalDirectoryPath:`.`,sourceDirectoryPath:e,targetRoot:WORKSPACE_ROOT}),t.sort((e,t)=>e.path.localeCompare(t.path)),t}async function addMaterializedDirectoryFiles(e){let t=await readdir(e.sourceDirectoryPath,{withFileTypes:!0});for(let n of t){if(!n.isDirectory()&&!n.isFile())continue;let t=join(e.sourceDirectoryPath,n.name),r=posix.join(e.logicalDirectoryPath,n.name);if(n.isDirectory()){await addMaterializedDirectoryFiles({files:e.files,logicalDirectoryPath:r,sourceDirectoryPath:t,targetRoot:e.targetRoot});continue}e.files.push({content:await readFile(t),path:posix.join(e.targetRoot,r)})}}export{materializeWorkspaceDirectory};