import { Command } from "@gajae-code/utils/cli"; import { ensureWorkflowSettingsMigrated } from "../config/settings"; import { assertExplicitTargetGjcNotSymlinked, type RalplanCommandResult, resolveRalplanTargetRoot, runNativeRalplanCommand, } from "../gjc-runtime/ralplan-runtime"; import { CommandError } from "../gjc-runtime/workflow-cli-common"; /** Public CLI path: validate --worktree-root before any settings migration, then dispatch. */ export async function runRalplanCliCommand(args: string[], cwd: string): Promise { try { const target = await resolveRalplanTargetRoot(args, cwd); if (target.explicit) await assertExplicitTargetGjcNotSymlinked(target.root); await ensureWorkflowSettingsMigrated(target.root); } catch (error) { if (error instanceof CommandError) return { status: error.exitStatus, stderr: `${error.message}\n` }; throw error; } return await runNativeRalplanCommand(args, cwd); } export default class Ralplan extends Command { static description = "Run native GJC RALPLAN consensus planning workflow"; static strict = false; static examples = [ '$ gjc ralplan ""', '$ gjc ralplan --interactive --deliberate ""', '$ gjc ralplan --write --stage planner --stage_n 1 --artifact ""', "$ gjc ralplan --write --stage critic --stage_n 1 --artifact-env GJC_RALPLAN_ARTIFACT", '$ gjc ralplan --worktree-root /abs/path/to/target-worktree ""', "$ gjc ralplan --write --worktree-root /abs/path/to/target-worktree --session-id --run-id --stage critic --stage_n 1 --artifact-env GJC_RALPLAN_ARTIFACT", ]; async run(): Promise { const result = await runRalplanCliCommand(this.argv, process.cwd()); if (result.stdout) process.stdout.write(result.stdout); if (result.stderr) process.stderr.write(result.stderr); process.exitCode = result.status; } }