/**
 * 任务阶段检测器 — 问题六十五。
 *
 * 将 TaskContext 的内部状态映射到面向用户的丰富任务阶段模型。
 * 不只看 status 字段，综合 classification、expansion、execution、verification
 * 等子数据的存在性和状态。
 *
 * 新版阶段体系（8 个中文值）：
 *   需求分析 → 现有系统分析 → 架构设计 → 详细设计 → 任务规划 → 编码与单元测试 → 代码审查 → 联调验证
 * 其中"现有系统分析"仅对老系统管线激活。
 */
/**
 * 检测任务当前所处阶段。
 * 综合 TaskContext 的 status、子数据存在性和内容判断。
 *
 * 返回 8 个中文 TaskStage 值之一。
 */
export function detectTaskStage(ctx) {
    const status = ctx.status;
    // 已完成 → 联调验证（项目级交付概念已移除，任务完成即归入联调验证）
    if (status === "done") {
        return "联调验证";
    }
    // 已失败 → 按历史数据推断最近阶段
    if (status === "failed") {
        return detectTaskStageFromHistory(ctx);
    }
    // classifying → 需求分析（输入材料收集与需求明确化合并）
    if (status === "classifying") {
        return "需求分析";
    }
    // expanding / clarifying → 设计阶段细分
    if (status === "expanding" || status === "clarifying") {
        if (ctx.design_artifact_pack) {
            const packStatus = ctx.design_artifact_pack.status;
            // 设计产物包等待决策 → 现有系统分析（老系统管线）
            if (packStatus === "awaiting_decisions") {
                return "现有系统分析";
            }
            return "架构设计";
        }
        // 老系统管线且无设计产物包 → 现有系统分析
        const systemType = ctx.route_decision?.system_type ?? ctx.classification?.route_decision?.system_type;
        if (systemType === "老系统") {
            return "现有系统分析";
        }
        if (ctx.classification?.route_decision?.route === "artifact_generation") {
            return "架构设计";
        }
        return "需求分析";
    }
    // executing / retrying → 编码与单元测试
    if (status === "executing" || status === "retrying") {
        return "编码与单元测试";
    }
    // verifying → 编码与单元测试（修复重验合并到编码阶段）或联调验证
    if (status === "verifying") {
        if (ctx.phase_directive === "回退") {
            return "编码与单元测试";
        }
        return "联调验证";
    }
    // reworking → 回到设计或编码阶段
    if (status === "reworking") {
        if (ctx.design_artifact_pack && ctx.design_artifact_pack.status !== "implementation_ready") {
            return "架构设计";
        }
        return "编码与单元测试";
    }
    // learning → 代码审查或联调验证
    if (status === "learning") {
        if (ctx.code_review) {
            return "代码审查";
        }
        return "联调验证";
    }
    // 兜底
    return "需求分析";
}
/**
 * 从历史数据推断失败任务的最近阶段。
 * 映射到 8 个中文 TaskStage 值之一。
 */
function detectTaskStageFromHistory(ctx) {
    if (ctx.code_review)
        return "代码审查";
    if (ctx.verification || ctx.verification_result)
        return "联调验证";
    if (ctx.execution?.changed_files?.length)
        return "编码与单元测试";
    if (ctx.design_artifact_pack)
        return "架构设计";
    // 老系统管线检测 → 现有系统分析
    const systemType = ctx.route_decision?.system_type ?? ctx.classification?.route_decision?.system_type;
    if (systemType === "老系统" && ctx.expansion)
        return "现有系统分析";
    if (ctx.expansion)
        return "需求分析";
    if (ctx.classification)
        return "需求分析";
    return "需求分析";
}
/** 任务阶段中文标签（8 个新版阶段） */
const TASK_STAGE_LABELS = {
    "需求分析": "需求分析",
    "现有系统分析": "现有系统分析",
    "架构设计": "架构设计",
    "详细设计": "详细设计",
    "任务规划": "任务规划",
    "编码与单元测试": "编码与单元测试",
    "代码审查": "代码审查",
    "联调验证": "联调验证",
};
/** 任务阶段中文描述（8 个新版阶段） */
const TASK_STAGE_DESCRIPTIONS = {
    "需求分析": "正在收集输入材料、明确需求和意图",
    "现有系统分析": "正在分析现有系统架构与代码，为后续设计提供依据",
    "架构设计": "正在进行架构设计",
    "详细设计": "正在进行详细设计",
    "任务规划": "正在制定开发任务规划",
    "编码与单元测试": "正在编码实现和单元测试",
    "代码审查": "正在进行代码审查",
    "联调验证": "正在进行联调验证",
};
/** 任务阶段必要证据（8 个新版阶段） */
const TASK_STAGE_EVIDENCE = {
    "需求分析": ["TaskContext.status=classifying 或 classification/expansion 存在"],
    "现有系统分析": ["existing_system_analysis 存在 或 design_artifact_pack.status=awaiting_decisions"],
    "架构设计": ["design_artifact_pack 存在 且非 awaiting_decisions"],
    "详细设计": ["expansion.scope 详细设计完成"],
    "任务规划": ["planning 存在"],
    "编码与单元测试": ["TaskContext.status=executing/retrying/verifying(回退)"],
    "代码审查": ["code_review 存在"],
    "联调验证": ["TaskContext.status=verifying 或 status=done"],
};
/** 任务阶段可能的下一阶段（8 个新版阶段） */
const TASK_STAGE_NEXT = {
    "需求分析": ["现有系统分析", "架构设计"],
    "现有系统分析": ["架构设计"],
    "架构设计": ["详细设计"],
    "详细设计": ["任务规划"],
    "任务规划": ["编码与单元测试"],
    "编码与单元测试": ["代码审查", "联调验证"],
    "代码审查": ["编码与单元测试", "联调验证"],
    "联调验证": [],
};
/**
 * 获取任务阶段的中文解释。
 */
export function explainTaskStage(stage) {
    return {
        stage,
        level: "task",
        label_zh: TASK_STAGE_LABELS[stage],
        description_zh: TASK_STAGE_DESCRIPTIONS[stage],
        required_evidence: TASK_STAGE_EVIDENCE[stage],
        next_possible_stages: TASK_STAGE_NEXT[stage],
    };
}
//# sourceMappingURL=task_stage_detector.js.map