#!/usr/bin/env node /** * cli:efcore-list — List EF Core migrations for a worktree. * * Usage: * npx --prefer-offline tsx skills/efcore/cli/list/index.ts --spec '{"cwd":"D:/path/to/worktree"}' */ import { parseArgs } from 'node:util'; import { existsSync, readFileSync } from 'node:fs'; import { validate } from './validate.js'; import { execute } from './execute.js'; async function main(): Promise { const { values } = parseArgs({ options: { spec: { type: 'string' }, help: { type: 'boolean', short: 'h' }, }, }); if (values.help || !values.spec) { printHelp(); process.exit(values.help ? 0 : 1); } let raw: unknown; try { raw = existsSync(values.spec!) ? JSON.parse(readFileSync(values.spec!, 'utf-8')) : JSON.parse(values.spec!); } catch (err) { console.log(JSON.stringify({ success: false, errors: [`Invalid JSON spec: ${(err as Error).message}`], warnings: [] }, null, 2)); process.exit(1); } const validation = validate(raw); if (!validation.valid || !validation.data) { console.log(JSON.stringify({ success: false, errors: validation.blockers, warnings: validation.warnings }, null, 2)); process.exit(1); } const result = await execute(validation.data); console.log(JSON.stringify(result, null, 2)); process.exit(result.success ? 0 : 1); } function printHelp(): void { console.log(` cli:efcore-list — SmartStack Studio Lists EF Core migrations in a worktree, grouped by DbContext and migration assembly. Applied + pending status per migration. Usage: npx --prefer-offline tsx skills/efcore/cli/list/index.ts --spec '' Spec: { "cwd": "", "contextName"?: "", "assembly"?: "" } `); } void main();