export interface TaskState { id: string; name: string; type: string; status: 'pending' | 'in_progress' | 'completed' | 'archived'; assignee: string; dependencies: string[]; priority: 'high' | 'medium' | 'low'; progress: number; startDate?: string; endDate?: string; /** 预估工时(从 .meta/estimated-hours 读取) */ estimatedHours?: number; /** 所属端(子任务级别) */ platform?: string; /** 父任务 ID(子任务才有) */ parentTaskId?: string; /** v8.3.223+: 任务目录绝对路径(扫描时记录,供 retro/execute 直接定位, * 避免 TASK.md 内子任务 ID 与目录名不一致时解析失败) */ path?: string; /** v8.3.281+: 功能单元名(读自 .meta/feature,为 analyze/taskify 的对齐锚点), * 供 execute 上下文直显真实单元名,避免 AI 从 slug 目录名反推 */ feature?: string; } export interface IterationState { name: string; status: string; startDate: string; endDate: string; tasks: TaskState[]; completionRate: number; } /** * v8.3.291: 从 TASK.md 解析「依赖任务」字段,填充 TaskState.dependencies。 * 此前 scanTasks 对 dependencies 硬编码空数组,导致 plan 拓扑排期与 * execute 依赖分支合并(prepareTaskBranch)永远拿不到依赖。 * 支持两种格式: * - 子任务 TASK.md: `- **依赖任务**: Task-002-f1-booking` * - 父任务 TASK.md: `| 依赖任务 | Task-002-f1-booking |` */ declare function parseDepsFromTaskMd(taskMd: string): string[]; /** 供测试与外部调用(v8.3.291) */ export { parseDepsFromTaskMd }; export declare function readProjectGraph(iteration: string): Promise; export declare function scanTasks(iteration: string): Promise; /** * 解析子任务 ID(v8.3.384+: 目录名事实源优先) * - 新结构(isSubtaskDir=true,端目录下有子任务目录):目录名即 subtaskId。 * 用户手动改名后,TASK.md 内「子任务 ID」字段仍是旧名,不能覆盖实际目录名, * 否则 execute --skip/--task 用新目录名匹配不上,报「还在用旧任务名」。 * - 旧结构(端目录直铺 TASK.md,目录名是端名):回退 TASK.md 字段兜底。 */ export declare function resolveSubtaskId(dirName: string, taskId: string, platform: string, taskMdContent: string, isSubtaskDir: boolean): string; /** * 任务别名匹配(v8.3.384+):--skip/--only 输入与任务比对时, * 除完整 ID(=目录名)外,还接受 path 尾段与去 Task- 前缀的模块名, * 避免用户用「模块名」或「目录名不带 Task- 前缀」时匹配落空。 */ export declare function matchesTaskAlias(t: TaskState, specs: string[]): boolean; export declare function calculateCompletionRate(tasks: TaskState[]): number; export declare function buildDependencyGraph(tasks: TaskState[]): Map; /** v8.3.397+: 功能单元分组(两级拓扑的第一层)——任务按 feature 归模块,组内已拓扑排序。 */ export interface FeatureGroup { feature: string; tasks: TaskState[]; /** 本模块依赖的其它模块(feature 名,来自跨模块任务依赖) */ groupDeps: string[]; } /** * v8.3.397+: 以功能单元为大模块划分任务(两级拓扑)—— * 模块内按任务依赖拓扑排序;跨模块依赖聚合成模块间依赖(groupDeps); * 模块级 Kahn 拓扑排序(循环依赖时未入序模块按原顺序兜底追加)。 */ export declare function groupTasksByFeature(tasks: TaskState[]): FeatureGroup[]; export declare function topologicalSort(tasks: TaskState[]): TaskState[]; /** * 按模块多值模糊过滤任务(v8.3.339+)。 * --module 支持逗号分隔多值(如 "支付,订单"),任一命中即保留; * 匹配面 = 功能单元名(.meta/feature)+ 模块目录名(id)+ 任务名(name)的模糊包含。 */ export declare function filterTasksByModule(tasks: T[], moduleSpec?: string): T[]; //# sourceMappingURL=state.d.ts.map