UNPKG

eve

Version:

Filesystem-first framework for durable backend AI agents that run anywhere.

1 lines 1.72 kB
import{stat}from"node:fs/promises";import{join}from"node:path";import{execFile}from"node:child_process";import{promisify}from"node:util";const GIT_TIMEOUT_MS=5e3,runFile=promisify(execFile);async function commandSucceeds(e,t,n){try{let r={timeout:GIT_TIMEOUT_MS,windowsHide:!0};return n!==void 0&&(r.cwd=n),await runFile(e,[...t],r),!0}catch{return!1}}function isGitAvailable(){return commandSucceeds(`git`,[`--version`])}async function isInsideExistingRepository(e){return await commandSucceeds(`git`,[`rev-parse`,`--is-inside-work-tree`],e)||await commandSucceeds(`hg`,[`--cwd`,`.`,`root`],e)}function hasConfiguredDefaultBranch(e){return commandSucceeds(`git`,[`config`,`init.defaultBranch`],e)}async function runGit(e,t){await runFile(`git`,[...t],{cwd:e,timeout:GIT_TIMEOUT_MS,windowsHide:!0})}async function runGitStage(e,t,n,r){try{await runGit(e,n);return}catch(e){return{kind:`failed`,repositoryInitialized:r,reason:e instanceof Error?e.message:String(e),stage:t}}}async function tryInitializeGit(e){let t=join(e,`.git`);if(await stat(t).then(()=>!0,e=>{if(e.code===`ENOENT`)return!1;throw e}))return{kind:`skipped`,reason:`existing-metadata`};if(!await isGitAvailable())return{kind:`skipped`,reason:`git-unavailable`};if(await isInsideExistingRepository(e))return{kind:`skipped`,reason:`parent-repository`};let n=await runGitStage(e,`initialize`,[`init`],!1);if(n!==void 0)return n;if(!await hasConfiguredDefaultBranch(e)){let t=await runGitStage(e,`default-branch`,[`checkout`,`-b`,`main`],!0);if(t!==void 0)return t}let r=await runGitStage(e,`stage`,[`add`,`-A`],!0);return r===void 0?await runGitStage(e,`commit`,[`commit`,`-m`,`Initial commit from eve`],!0)??{kind:`initialized`}:r}export{tryInitializeGit};