/** * 并行代理分发器 * * 来自 Superpowers 的并行执行策略: * 当任务之间无依赖关系时,同时分发多个子代理并行执行。 * * 适用场景: * - 3+ 个独立测试失败(不同测试文件,无共享依赖) * - 多个子系统独立损坏 * - 多文件非依赖变更 * * 核心原则: * - 每个代理获得聚焦范围 + 明确约束 + 具体输出要求 * - 通过依赖图分析识别可并行的任务 * - 集成阶段:审查摘要 → 冲突检查 → 全量套件 * * 并行隔离策略(修复 P0-2): * - 每个任务在独立的 Git worktree 中执行 * - worktree 拥有独立的 HEAD / 工作目录,消除竞态条件 * - 所有任务完成后按序合并分支到主分支 * - 合并冲突作为并行代价显式报告,而非静默丢失 * * 集成状态: * - 已集成到 `specpow apply --parallel` 命令 * - 已集成到 `specpow execute --parallel` 命令 * - 已集成到 `specpow sdd run --parallel` 命令 */ import type { PlanTask } from '../sdd-engine/controller.js'; import type { TaskReport, ReviewResult, SDDConfig } from './types.js'; export interface TaskDependency { taskNumber: number; dependsOn: number[]; } /** * 分析任务依赖关系 * * 基于两个维度判断: * 1. 文件级:不同任务是否修改相同文件 * 2. 逻辑级:解析 tasks.md 中显式声明的依赖 */ export declare function analyzeDependencies(tasks: PlanTask[]): TaskDependency[]; /** * 构建任务依赖图(拓扑排序) * * 返回可并行执行的层: * 每层中的任务彼此独立,可以同时分发 */ export declare function buildParallelLayers(tasks: PlanTask[]): PlanTask[][]; export interface ParallelResult { taskNumber: number; outcome: 'complete' | 'blocked'; report: TaskReport; review: ReviewResult; commitRange: string; branchName: string; worktreePath?: string; } export interface ParallelDispatchResult { success: boolean; results: ParallelResult[]; conflicts: string[]; mergeFailures: number[]; retainedBranches: Array<{ taskNumber: number; branchName: string; worktreePath: string; }>; } /** * 并行分发执行器 * * 每个任务在独立的 Git worktree 中执行,消除并行竞态条件。 * 完成后按序将各分支合并回主分支。 */ export declare class ParallelDispatcher { private aiCaller; private workspaceDir; private specConstraints; private modelSelector; constructor(config: SDDConfig); /** * 并行分发生成层 * * 一层中的所有任务彼此独立: * 1. 为每个任务创建独立 worktree * 2. 在各自 worktree 中并行执行实现 + 审查 * 3. 所有任务完成后按序合并分支 * 4. 清理 worktree */ dispatchLayer(tasks: PlanTask[], projectContext: string): Promise; /** * 全图并行执行 * * 按层顺序执行,每层内部并行分发 * 层与层之间是串行的(前一层合并完成后才开始下一层) */ dispatchAll(tasks: PlanTask[], projectContext: string): Promise; /** * 创建任务简报,包含 worktree 路径和工作目录指令 */ private createBrief; } //# sourceMappingURL=parallel-dispatcher.d.ts.map