#!/usr/bin/env node
import { initLoggerFromEnv, userInfo } from "../engine/core/logger.js";
import { cmdConfigResolve, cmdConfigExplain, cmdConfigConfirm, cmdConfigUnset, cmdConfigRepair, } from "./config_commands.js";
import { command, args } from "./args.js";
import { EXIT } from "../engine/core/exit_codes.js";
import { cmdInitAuto, cmdInitBlueprint, cmdInit } from "./commands/init.js";
import { cmdGenerateHooks, cmdGenerateClaudeMd, cmdGenerateTrae, cmdGenerateCodex } from "./commands/hooks.js";
import { cmdCheckWrite } from "./commands/check_write.js";
import { cmdCheckBash, cmdPostBash } from "./commands/check_bash.js";
import { cmdDoctor, cmdPrePrompt, cmdValidate, cmdValidateMechanisms } from "./commands/validate.js";
import { cmdAuditTemplateMechanisms, cmdAuditDesignArtifacts, cmdUpgradeDesignArtifacts, cmdAuditTemplateVisibility, cmdAuditProjectKnowledge, cmdValidateKnowledge, } from "./commands/audit.js";
import { cmdSyncTemplates, cmdSyncAdapters, cmdMigrate, cmdValidateReleaseGate, cmdValidateNewIssue, cmdValidateFoundation, } from "./commands/sync.js";
import { cmdStatus, cmdNext, cmdStage, cmdCleanup, cmdVersion } from "./commands/status.js";
async function main() {
    initLoggerFromEnv();
    // ── --help / -h 支持 ──
    if (command === "--help" || command === "-h" || command === "help") {
        userInfo(`SoloForge CLI

用法: soloforge <命令>

常用命令:
  init                在当前项目初始化 .soloforge/
  status              显示当前项目的 SoloForge 状态
  validate            验证项目配置和知识文件
  audit               审计模板与机制注册表
  mcp                 启动 MCP Server（供 IDE 适配器调用）
  config              配置管理（resolve / explain / confirm / unset / repair）
  sync                同步模板和适配器（templates / adapters）

完整命令列表: soloforge --list
版本信息: soloforge version
`);
        process.exit(0);
    }
    switch (command) {
        case "init":
            if (args.includes("--auto")) {
                await cmdInitAuto();
            }
            else if (args.includes("--blueprint")) {
                await cmdInitBlueprint();
            }
            else {
                await cmdInit();
            }
            break;
        case "generate-hooks":
            await cmdGenerateHooks();
            break;
        case "generate-claude-md":
            await cmdGenerateClaudeMd();
            break;
        case "mcp":
            await import("../index.js");
            break;
        case "check-write":
            await cmdCheckWrite();
            break;
        case "check-bash":
            await cmdCheckBash();
            break;
        case "post-bash":
            await cmdPostBash();
            break;
        case "pre-prompt":
            await cmdPrePrompt();
            break;
        case "validate":
            await cmdValidate();
            break;
        case "validate-mechanisms":
            await cmdValidateMechanisms();
            break;
        case "audit-template-mechanisms":
            await cmdAuditTemplateMechanisms();
            break;
        case "audit-design-artifacts":
            await cmdAuditDesignArtifacts();
            break;
        case "upgrade-design-artifacts":
            await cmdUpgradeDesignArtifacts();
            break;
        case "validate-release":
            await cmdValidateReleaseGate();
            break;
        case "doctor":
            await cmdDoctor();
            break;
        case "audit-template-visibility":
            await cmdAuditTemplateVisibility();
            break;
        case "audit-project-knowledge":
            await cmdAuditProjectKnowledge();
            break;
        case "sync-templates":
            await cmdSyncTemplates();
            break;
        case "sync-adapters":
            await cmdSyncAdapters();
            break;
        case "migrate":
            await cmdMigrate();
            break;
        case "validate-new-issue":
            await cmdValidateNewIssue();
            break;
        case "validate-knowledge":
            await cmdValidateKnowledge();
            break;
        case "validate-foundation":
            await cmdValidateFoundation();
            break;
        case "generate-trae":
            await cmdGenerateTrae();
            break;
        case "generate-codex":
            await cmdGenerateCodex();
            break;
        case "version":
        case "-v":
        case "--version":
            cmdVersion();
            break;
        case "config": {
            const subCommand = args[0];
            switch (subCommand) {
                case "resolve":
                    await cmdConfigResolve();
                    break;
                case "explain":
                    await cmdConfigExplain();
                    break;
                case "confirm":
                    await cmdConfigConfirm();
                    break;
                case "unset":
                    await cmdConfigUnset();
                    break;
                case "repair":
                    await cmdConfigRepair();
                    break;
                default:
                    userInfo("用法: soloforge config <resolve|explain|confirm|unset|repair> [options]");
                    userInfo("");
                    userInfo("  resolve  解析配置字段优先级（只读，显示所有候选来源）");
                    userInfo("  explain  解释指定字段的来源和优先级（只读，中文输出）");
                    userInfo("  confirm  确认配置字段值（写入 config + evidence）");
                    userInfo("  unset    移除指定字段的确认配置和 evidence");
                    userInfo("  repair   自动修复机械类型错误并重签 evidence（支持 --dry-run/--json）");
            }
            break;
        }
        case "status":
            await cmdStatus();
            break;
        case "next":
            await cmdNext();
            break;
        case "stage":
            await cmdStage();
            break;
        case "cleanup":
            await cmdCleanup();
            break;
        default:
            userInfo(`SoloForge CLI

用法: soloforge <命令>

命令:
  init                在当前项目初始化 .soloforge/（默认适配器: claude-code）
  init --adapter trae 初始化并生成 Trae IDE 配置
  init --adapter codex 初始化并生成 Codex App 配置
  init --adapter all  同时生成所有适配器配置
  mcp                 启动 MCP Server（供 IDE 适配器调用）
  generate-hooks      生成包含 hooks 的 .claude/settings.json
  generate-claude-md  生成包含工作流规则的 CLAUDE.md
  generate-trae       生成 .trae/mcp.json 和 .trae/rules/project_rules.md
  generate-codex      生成 .codex/ 配置和 AGENTS.md
  check-write         PreToolUse hook，用于范围检查（读取 stdin JSON）
  check-bash          PreToolUse hook，阻止 Bash 直接篡改 .soloforge/state 或绕过受控任务写业务实现
  doctor              审计 MCP 控制面、适配器 hook、状态可信和恢复路径
  post-bash           PostToolUse hook，用于跟踪 Bash 执行结果
  validate            验证项目配置和知识文件（config.yaml 可选，缺失时自动推断）
  validate-mechanisms 验证双层机制承载模型完整性（模板层 + 机制层）
  audit-template-mechanisms 扫描模板与机制注册表交叉校验（--json 输出完整报告，--changed-only 仅检查变更文件）
  audit-design-artifacts 审计架构/数据库/API 设计产物包（只读，--json 输出报告）
  audit-project-knowledge 审计用户项目 .soloforge/knowledge 自定义规则承载与消费
  upgrade-design-artifacts 生成存量设计资产升级计划（默认 dry-run，--apply --confirm 仅建立已归档迁移基线）
  validate-release    验证发布门禁（契约、场景矩阵、消费 trace、双层机制、回归基线）
  sync-templates      同步模板到项目（默认 dry-run，--apply 需 --confirm）
  sync-adapters       同步适配器 Prompt（默认 dry-run，--apply 需 --confirm）
  migrate             迁移项目 .soloforge/（默认 dry-run，--apply 需确认）
  version             显示 SoloForge 版本信息
  config resolve       解析配置字段优先级（只读）
  config explain        解释配置字段来源（只读，中文）
  config confirm <field> <value>  确认配置字段（写入 config + evidence）
  config repair                   自动修复机械类型错误并重签 evidence
  config unset <field>  移除确认配置
  status                显示当前项目的 SoloForge 状态
  next                  查询下一步操作和可执行工作包（默认只读）
  next --json           纯 JSON 输出（无日志污染）
  next --write-snapshot 将导航快照写入 .soloforge/navigation-snapshot.json
  stage                 显示当前项目阶段和任务阶段
  stage --explain       详细解释当前阶段（判断依据、必要条件、下一阶段）
  cleanup               清理过期任务和 evidence（默认 dry-run，--apply 执行实际清理）
  cleanup --stale       检测陈旧 current-task 指针（--apply 时受控归档）
`);
    }
}
main().catch((err) => {
    console.error("Fatal:", err);
    process.exit(EXIT.GENERAL);
});
//# sourceMappingURL=soloforge.js.map