From b086825edbe3771f722b58d91affee94e969087c Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Sat, 14 Mar 2026 19:23:21 -0500 Subject: [PATCH] feat(prdy): migrate @mosaic/prdy from v0 to v1 Port full PRD wizard implementation: types, YAML persistence (js-yaml), built-in templates (software/feature/spike), @clack/prompts interactive wizard, and Commander.js CLI (init/list/show). Adapted for v1 conventions: ESM .js imports, NodeNext resolution, noUncheckedIndexedAccess-safe lookups, and consistent-type-imports lint rule. Co-Authored-By: Claude Sonnet 4.6 --- packages/prdy/package.json | 8 ++ packages/prdy/src/cli.ts | 100 +++++++++++++++++ packages/prdy/src/index.ts | 13 ++- packages/prdy/src/prd.ts | 199 +++++++++++++++++++++++++++++++++ packages/prdy/src/templates.ts | 93 +++++++++++++++ packages/prdy/src/types.ts | 38 +++++++ packages/prdy/src/wizard.ts | 103 +++++++++++++++++ pnpm-lock.yaml | 34 +++--- 8 files changed, 572 insertions(+), 16 deletions(-) create mode 100644 packages/prdy/src/cli.ts create mode 100644 packages/prdy/src/prd.ts create mode 100644 packages/prdy/src/templates.ts create mode 100644 packages/prdy/src/types.ts create mode 100644 packages/prdy/src/wizard.ts diff --git a/packages/prdy/package.json b/packages/prdy/package.json index e0c9a7d..7280f81 100644 --- a/packages/prdy/package.json +++ b/packages/prdy/package.json @@ -15,7 +15,15 @@ "typecheck": "tsc --noEmit", "test": "vitest run --passWithNoTests" }, + "dependencies": { + "@clack/prompts": "^0.9.0", + "commander": "^12.0.0", + "js-yaml": "^4.1.0", + "zod": "^3.22.0" + }, "devDependencies": { + "@types/js-yaml": "^4.0.9", + "@types/node": "^22.0.0", "typescript": "^5.8.0", "vitest": "^2.0.0" } diff --git a/packages/prdy/src/cli.ts b/packages/prdy/src/cli.ts new file mode 100644 index 0000000..1850e39 --- /dev/null +++ b/packages/prdy/src/cli.ts @@ -0,0 +1,100 @@ +import { Command } from 'commander'; + +import { createPrd, listPrds, loadPrd } from './prd.js'; +import { runPrdWizard } from './wizard.js'; + +interface InitCommandOptions { + readonly name: string; + readonly project: string; + readonly template?: 'software' | 'feature' | 'spike'; +} + +interface ListCommandOptions { + readonly project: string; +} + +interface ShowCommandOptions { + readonly project: string; + readonly id?: string; +} + +export function buildPrdyCli(): Command { + const program = new Command(); + program.name('mosaic').description('Mosaic CLI').exitOverride(); + + const prdy = program.command('prdy').description('PRD wizard commands'); + + prdy + .command('init') + .description('Create a PRD document') + .requiredOption('--name ', 'PRD name') + .requiredOption('--project ', 'Project path') + .option('--template