/**
 * ============================================================
 *  src/workflows/workflowState.ts —— workflow 运行状态持久化
 * ------------------------------------------------------------
 *  与 GoalState 类似的轻量目录模型，但只用于 debug / 中断恢复（P0 不实现
 *  恢复，只写出现场）。目录结构：
 *
 *    <cwd>/.minimal-agent-workflow/
 *      ├── current.json    # { name, startedAt }
 *      ├── inputs.json     # 用户传入的 inputs 快照
 *      ├── vars.json       # 最后一次成功 step 后的 VarStack.snapshot()
 *      └── progress.md     # 时间戳追加的 step 完成日志
 *
 *  init() 进 workflow 前 reset 一次；cleanup() 在 finally 把文件删掉
 *  + rmdir（保持 /new 扫描 .minimal-agent-* 子目录的语义一致）。
 *
 *  与 GoalState 的核心区别：workflow 不需要 PHASE / completion / learnings 文件，
 *  因为执行流程是确定性的，没有 LLM 自规划过程。
 * ============================================================
 */
import { mkdir, writeFile, appendFile, rm } from 'node:fs/promises';
import { join } from 'node:path';
const STATE_DIR = '.minimal-agent-workflow';
export class WorkflowState {
    dir;
    constructor(workingDir) {
        this.dir = join(workingDir, STATE_DIR);
    }
    async init(name, inputs) {
        await rm(this.dir, { recursive: true, force: true });
        await mkdir(this.dir, { recursive: true });
        await writeFile(join(this.dir, 'current.json'), JSON.stringify({ name, startedAt: new Date().toISOString() }, null, 2), 'utf8');
        await writeFile(join(this.dir, 'inputs.json'), JSON.stringify(inputs, null, 2), 'utf8');
        await writeFile(join(this.dir, 'progress.md'), `# ${name}\n\n`, 'utf8');
    }
    async appendProgress(line) {
        const ts = new Date().toISOString().replace('T', ' ').slice(0, 19);
        await appendFile(join(this.dir, 'progress.md'), `- ${ts} ${line}\n`, 'utf8').catch(() => { });
    }
    async writeVars(snapshot) {
        await writeFile(join(this.dir, 'vars.json'), JSON.stringify(snapshot, null, 2), 'utf8').catch(() => { });
    }
    async cleanup() {
        await rm(this.dir, { recursive: true, force: true }).catch(() => { });
    }
}
