/** * Archive Engine — 移植自 OpenSpec archive.ts (82KB) * * 事务性归档引擎,核心特性: * - 三态决策:write / retire / skip * - 并发安全的指纹验证机制 * - 预览-验证-写入-移动-回滚多阶段流程 * - 支持批量归档和并行处理 * * **I/O 策略**: 当前全部使用 fs *Sync 变体。 * 对于 CLI 工具这是可接受的(单用户、阻塞主线程无副作用)。 * 如需迁移为 API/Server 模式,需将以下方法改为 async 并使用 fs.promises: * archive(), archiveBatch(), rollback(), captureSnapshot(), restoreSnapshot() */ export interface ArchiveOptions { /** 跳过交互式确认 */ yes?: boolean; /** 跳过 spec 合并 */ skipSpecs?: boolean; /** 跳过验证 */ noValidate?: boolean; /** 强制覆盖已存在的归档 */ force?: boolean; /** 存储注册路径 */ storePath?: string; } export type SpecOutcome = 'write' | 'retire' | 'skip'; export interface ArchiveResult { change: string; archivedAs: string; path: string; specsUpdated: number; totals: { added: number; modified: number; removed: number; total: number; }; warnings: string[]; } export interface SpecMutation { source: string; target: string; outcome: SpecOutcome; content: string; } export interface ArchiveSnapshot { files: Map; path: string; } export interface ArchiveClaim { handle: string; contents: string; } export declare class ArchiveEngine { private projectRoot; private warnings; constructor(projectRoot: string); /** * 执行归档 * * 六阶段事务流程: * 1. PREVIEW — 发现变更,预览操作 * 2. VALIDATE — 验证完整性 * 3. CONFIRM — 用户确认 * 4. WRITE — 写入合并结果 * 5. MOVE — 移动变更到归档 * 6. VERIFY — 最终验证 * * 注:当前实现为纯同步操作,保留 async 签名以确保 Promise 接口一致性 * (测试使用 .rejects.toThrow,调用方使用 await) */ archive(changeName: string, options?: ArchiveOptions): Promise; /** * 批量归档 * * 支持并行处理多个独立的变更 */ archiveBatch(changeNames: string[], options?: ArchiveOptions): Promise; /** * 回滚归档 * * 从归档目录恢复变更 */ rollback(archiveName: string): Promise; /** * 列出所有归档 */ listArchives(): { name: string; path: string; archivedAt: string; }[]; /** * 发现 spec 变更 * * 扫描 change/specs/ 目录中的 Delta 文件,按需求名称路由到对应的主规范文件。 * * 路由策略: * 1. 构建主规范名称索引:{ requirementName → specFileName } * 2. 解析 Delta 提取所有需求名称 * 3. 按名称匹配路由到目标主规范文件 * 4. ADDED 的新需求追加到主要目标文件 * 5. 无法路由的操作按原始路径写入 */ private findSpecMutations; /** * 构建主规范名称索引 * * 扫描 specs/ 目录下所有 .md 文件,提取 Requirement 名称, * 返回 { requirementName → specFileName } 映射和每文件需求计数。 */ private buildSpecNameIndex; /** * 路由 Delta 操作到目标主规范文件 * * 根据需求名称匹配,将每个操作分配到对应的目标文件。 * 如果没有现有主规范,ADDED 操作会创建新的目标文件。 * 返回 { routing, unrouted } — unrouted 包含名称未匹配的操作 */ private routeDeltaOperations; /** * 从完整 Delta 内容中提取指定操作的子集,构建子 Delta * * 解析完整 delta,只保留目标操作对应的需求块,重建 delta 文本。 * 这样 mergeDeltaSpec 只会处理与该目标相关的操作。 */ private buildSubDeltaContent; /** * 合并 delta 到已有内容 * * 使用结构化合并算法(移植自 OpenSpec),支持: * - 四阶段合并顺序:RENAMED → REMOVED → MODIFIED → ADDED * - 冲突检测与报告 * - 幂等性检查(已同步则跳过) * - 场景丢失守卫(默认启用) * - 能力退休(REMOVED 默认标记为 [RETIRED]) * - 未计入内容检测(默认启用) * - 代码围栏掩码(防止代码块内容被误匹配) */ private mergeDelta; /** * 将 spec 快照持久化到归档目录,供 rollback 使用 */ private saveSnapshotToArchive; /** * 从归档目录加载 spec 快照 */ private loadSnapshotFromArchive; /** * 捕获 spec 目录快照 * * 记录所有已有文件的内容,以及文件列表(用于回滚时删除新建文件) */ private captureSnapshot; /** * 恢复 spec 快照(回滚) * * 1. 恢复快照中已有文件的内容 * 2. 删除快照之后新建的文件(不在快照中的文件) */ private restoreSnapshot; } //# sourceMappingURL=engine.d.ts.map