From 95eed0739d9fd9652bb2a910213479ca8f4567b1 Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Sat, 7 Mar 2026 02:21:54 +0000 Subject: [PATCH] feat(wave3): @mosaic/prdy TypeScript PRD wizard (#7) Co-authored-by: Jason Woltje Co-committed-by: Jason Woltje --- packages/prdy/package.json | 29 ++++ packages/prdy/src/cli.ts | 103 +++++++++++++ packages/prdy/src/index.ts | 20 +++ packages/prdy/src/prd.ts | 199 ++++++++++++++++++++++++++ packages/prdy/src/templates.ts | 86 +++++++++++ packages/prdy/src/types.ts | 38 +++++ packages/prdy/src/wizard.ts | 121 ++++++++++++++++ packages/prdy/tests/prd.test.ts | 36 +++++ packages/prdy/tests/templates.test.ts | 22 +++ packages/prdy/tsconfig.json | 5 + pnpm-lock.yaml | 31 ++++ 11 files changed, 690 insertions(+) create mode 100644 packages/prdy/package.json create mode 100644 packages/prdy/src/cli.ts create mode 100644 packages/prdy/src/index.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 create mode 100644 packages/prdy/tests/prd.test.ts create mode 100644 packages/prdy/tests/templates.test.ts create mode 100644 packages/prdy/tsconfig.json diff --git a/packages/prdy/package.json b/packages/prdy/package.json new file mode 100644 index 0000000..3ecf9a8 --- /dev/null +++ b/packages/prdy/package.json @@ -0,0 +1,29 @@ +{ + "name": "@mosaic/prdy", + "version": "0.1.0", + "type": "module", + "description": "Mosaic PRD wizard — TypeScript rewrite", + "scripts": { + "build": "tsc -p tsconfig.json", + "typecheck": "tsc --noEmit", + "lint": "eslint src/", + "test": "vitest run" + }, + "dependencies": { + "@mosaic/types": "workspace:*", + "@clack/prompts": "^0.9", + "commander": "^13", + "js-yaml": "^4", + "zod": "^3.24" + }, + "devDependencies": { + "@types/node": "^22", + "@types/js-yaml": "^4", + "typescript": "^5", + "vitest": "^2" + }, + "publishConfig": { + "registry": "https://git.mosaicstack.dev/api/packages/mosaic/npm", + "access": "public" + } +} diff --git a/packages/prdy/src/cli.ts b/packages/prdy/src/cli.ts new file mode 100644 index 0000000..58f25c0 --- /dev/null +++ b/packages/prdy/src/cli.ts @@ -0,0 +1,103 @@ +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