/**
 * 类型迁移兼容层 — 将旧版英文类型值迁移为中文语义值。
 *
 * 核心职责:
 * - 提供旧 TaskStage / NavigationAction / PhaseDirective / 机制ID 的完整迁移映射
 * - 提供 migrateTaskContext() 用于磁盘加载时的自动迁移
 * - 确保升级后旧的持久化 TaskContext JSON 仍可正常加载
 */
// SystemType 通过 re-export 导出，不在此文件直接使用
// ── 新类型值常量（供全项目统一引用） ──
/** 新版 TaskStage 值 */
export const NEW_TASK_STAGES = [
    "需求分析",
    "现有系统分析",
    "架构设计",
    "详细设计",
    "任务规划",
    "编码与单元测试",
    "代码审查",
    "联调验证",
];
/** 新版 NavigationAction 值 */
export const NEW_NAV_ACTIONS = [
    "初始化",
    "需求分析",
    "现有系统分析",
    "架构设计",
    "详细设计",
    "任务规划",
    "编码与单元测试",
    "代码审查",
    "联调验证",
    "回退",
    "门禁校验",
    "学习沉淀",
    "过期状态解决",
];
/** 新版 PhaseDirective 值 */
export const NEW_PHASE_DIRECTIVES = [
    "推进下一阶段",
    "门禁阻断",
    "回退",
    "回退并标注",
    "完成",
    "停止升级",
];
/** 系统类型常量（向后兼容） */
export const SYSTEM_TYPES = ["新系统", "老系统"];
// ── MCP 工具名 ↔ NavigationAction 映射 ──
/** MCP 工具名（英文 ASCII） → NavigationAction（中文） */
export const TOOL_NAME_TO_NAV_ACTION = {
    sf_classify: "需求分析",
    sf_expand: "架构设计",
    sf_verify: "联调验证",
    sf_review: "代码审查",
    sf_learn: "学习沉淀",
    sf_deliver: "联调验证",
    sf_navigation: "需求分析",
};
/** NavigationAction（中文） → MCP 工具名（英文 ASCII），多值取第一个 */
export const NAV_ACTION_TO_TOOL_NAME = {
    需求分析: "sf_classify",
    架构设计: "sf_expand",
    联调验证: "sf_verify",
    代码审查: "sf_review",
    学习沉淀: "sf_learn",
};
/** 判断字符串是否为 MCP 工具名（sf_ 前缀） */
export function isMcpToolName(value) {
    return value.startsWith("sf_");
}
/** MCP 工具名 → NavigationAction，非工具名原样返回 */
export function toolNameToNavAction(toolName) {
    return TOOL_NAME_TO_NAV_ACTION[toolName] ?? toolName;
}
// ── 旧值 → 新值 映射表 ──
/** TaskStage 迁移映射：旧英文值 → 新中文值 */
export const TASK_STAGE_MIGRATION = {
    input_material_collection: "需求分析",
    requirement_clarification: "需求分析",
    decision_workshop: null, // 已移除，无对应阶段
    architecture_design: "架构设计",
    detailed_design: "详细设计",
    database_design: "详细设计",
    api_design: "详细设计",
    slice_planning: "任务规划",
    coding: "编码与单元测试",
    local_verification: "联调验证",
    testing: "编码与单元测试",
    code_review: "代码审查",
    repair_reverify: "编码与单元测试", // 回滚操作，映射到编码阶段
    delivery_acceptance: null, // 项目级概念，已移除
    release_preparation: null, // 项目级概念，已移除
    post_release_observation: null, // 项目级概念，已移除
};
/** NavigationAction 迁移映射 */
export const NAV_ACTION_MIGRATION = {
    sf_init: "初始化",
    config_confirm: "初始化",
    knowledge_sync: "初始化",
    sf_classify: "需求分析",
    sf_expand: "架构设计",
    sf_execute: "编码与单元测试",
    sf_verify: "联调验证",
    sf_learn: "学习沉淀",
    sf_deliver: "联调验证",
    sf_review: "代码审查",
    sf_navigation: "需求分析",
    human_decision: "门禁校验",
    wait: "过期状态解决",
    resolve_stale: "过期状态解决",
    slice_planning: "任务规划",
};
/** PhaseDirective 迁移映射 */
export const PHASE_DIRECTIVE_MIGRATION = {
    continue_current: "门禁阻断", // "继续当前"语义 → "被门禁挡住"
    advance_next: "推进下一阶段",
    repair_reverify: "回退", // 修复重验 → 回退到编码阶段
    rework_upstream: "回退并标注", // 回退上游 → 回退并标注问题
    stop_escalate: "停止升级",
    completed: "完成",
};
/** 机制ID迁移映射 */
export const MECHANISM_ID_MIGRATION = {
    "mc-knowledge-injection-boundary": "模板引擎",
    "mc-intent-router": "意图路由器",
    "mc-intent-expander": "意图扩展器",
    "mc-verifier": "验证器",
    "mc-task-context-lifecycle": "任务上下文生命周期",
    "mc-core-engineering-principles": "核心工程原则",
    // 已弃用机制 — 映射为 null 表示已移除
    "mc-classifier": "意图路由器", // 功能合并到意图路由器
    "mc-knowledge-matching": "模板引擎", // 功能合并到模板引擎
    "mc-workspace-resumer": "任务上下文生命周期", // 功能合并到任务上下文生命周期
};
// ── 新值 → 旧值 反向映射（用于需要输出旧格式的场景） ──
/** TaskStage 反向映射：新中文值 → 代表性旧英文值 */
export const TASK_STAGE_REVERSE = {};
for (const [oldVal, newVal] of Object.entries(TASK_STAGE_MIGRATION)) {
    if (newVal && !TASK_STAGE_REVERSE[newVal]) {
        TASK_STAGE_REVERSE[newVal] = oldVal;
    }
}
/** NavigationAction 反向映射 */
export const NAV_ACTION_REVERSE = {};
for (const [oldVal, newVal] of Object.entries(NAV_ACTION_MIGRATION)) {
    if (!NAV_ACTION_REVERSE[newVal]) {
        NAV_ACTION_REVERSE[newVal] = oldVal;
    }
}
/** PhaseDirective 反向映射 */
export const PHASE_DIRECTIVE_REVERSE = {};
for (const [oldVal, newVal] of Object.entries(PHASE_DIRECTIVE_MIGRATION)) {
    if (!PHASE_DIRECTIVE_REVERSE[newVal]) {
        PHASE_DIRECTIVE_REVERSE[newVal] = oldVal;
    }
}
// ── 辅助迁移函数 ──
/** 迁移 TaskStage 旧值到新值，无法映射时返回原值 */
export function migrateTaskStage(oldValue) {
    if (Object.hasOwn(TASK_STAGE_MIGRATION, oldValue)) {
        const mapped = TASK_STAGE_MIGRATION[oldValue];
        return mapped ?? oldValue; // null 表示已移除，保留原值让上层处理
    }
    // 已经是新值，直接返回
    return oldValue;
}
/** 迁移 NavigationAction 旧值到新值 */
export function migrateNavigationAction(oldValue) {
    if (Object.hasOwn(NAV_ACTION_MIGRATION, oldValue)) {
        return NAV_ACTION_MIGRATION[oldValue];
    }
    return oldValue;
}
/** 迁移 PhaseDirective 旧值到新值 */
export function migratePhaseDirective(oldValue) {
    if (Object.hasOwn(PHASE_DIRECTIVE_MIGRATION, oldValue)) {
        return PHASE_DIRECTIVE_MIGRATION[oldValue];
    }
    return oldValue;
}
/** 迁移机制ID旧值到新值 */
export function migrateMechanismId(oldValue) {
    if (Object.hasOwn(MECHANISM_ID_MIGRATION, oldValue)) {
        return MECHANISM_ID_MIGRATION[oldValue];
    }
    return oldValue;
}
/**
 * 迁移整个 TaskContext（用于磁盘加载时自动升级旧格式）。
 * 原地修改并返回，不创建新对象。
 */
export function migrateTaskContext(ctx) {
    // 迁移阶段指令
    if (ctx.phase_directive) {
        const migrated = migratePhaseDirective(ctx.phase_directive);
        if (migrated !== ctx.phase_directive) {
            ctx.phase_directive = migrated;
        }
    }
    // 迁移修复重验指令中的 contract_id 如果包含旧机制ID
    if (ctx.repair_reverify_directive) {
        const dir = ctx.repair_reverify_directive;
        const migratedContractId = migrateMechanismId(dir.contract_id);
        if (migratedContractId !== dir.contract_id) {
            dir.contract_id = migratedContractId;
        }
    }
    // 注意：TaskStage 不直接存储在 TaskContext 中，
    // 它是通过 task_stage_detector 根据 TaskContext 状态实时检测的。
    // 因此磁盘上的旧 TaskContext 不需要迁移 TaskStage 值，
    // 只需在下次检测时自动映射到新阶段。
    return ctx;
}
/**
 * 判断给定的 TaskStage 值是否为新版中文值。
 * 用于区分新旧格式，决定是否需要迁移。
 */
export function isNewTaskStage(value) {
    return NEW_TASK_STAGES.includes(value);
}
/**
 * 判断给定的 PhaseDirective 值是否为新版中文值。
 */
export function isNewPhaseDirective(value) {
    return NEW_PHASE_DIRECTIVES.includes(value);
}
//# sourceMappingURL=legacy_type_migration.js.map