UNPKG

@every-env/cli

Version:

Multi-agent orchestrator for AI-powered development workflows

67 lines 2.6 kB
import { promises as fs } from 'fs'; import { join } from 'path'; const STATE_DIR = '.every-env'; const STATE_FILE = 'workflow-state.json'; export class StatePersistence { statePath; saveTimeout = null; constructor(projectRoot = process.cwd()) { this.statePath = join(projectRoot, STATE_DIR, STATE_FILE); } async ensureStateDir() { const dir = join(process.cwd(), STATE_DIR); try { await fs.mkdir(dir, { recursive: true }); } catch (error) { // Directory may already exist } } async loadState() { try { await this.ensureStateDir(); const data = await fs.readFile(this.statePath, 'utf-8'); const serialized = JSON.parse(data); // Convert dates back from strings const state = { ...serialized, tasks: { plan: serialized.tasks.plan.map(t => ({ ...t, createdAt: new Date(t.createdAt) })), delegate: serialized.tasks.delegate.map(t => ({ ...t, createdAt: new Date(t.createdAt) })), assess: serialized.tasks.assess.map(t => ({ ...t, createdAt: new Date(t.createdAt) })), codify: serialized.tasks.codify.map(t => ({ ...t, createdAt: new Date(t.createdAt) })) } }; return state; } catch (error) { // File doesn't exist or is invalid return null; } } async saveState(state) { await this.ensureStateDir(); // Convert dates to strings for serialization const serialized = { ...state, tasks: { plan: state.tasks.plan.map(t => ({ ...t, createdAt: t.createdAt.toISOString() })), delegate: state.tasks.delegate.map(t => ({ ...t, createdAt: t.createdAt.toISOString() })), assess: state.tasks.assess.map(t => ({ ...t, createdAt: t.createdAt.toISOString() })), codify: state.tasks.codify.map(t => ({ ...t, createdAt: t.createdAt.toISOString() })) } }; await fs.writeFile(this.statePath, JSON.stringify(serialized, null, 2)); } saveStateDebounced(state, delay = 500) { if (this.saveTimeout) { clearTimeout(this.saveTimeout); } this.saveTimeout = setTimeout(() => { this.saveState(state).catch(error => { console.error('Error saving state:', error); }); }, delay); } } //# sourceMappingURL=persistence.js.map