From 3106ca8cf8d479ff28747787344a88d748c1d2fe Mon Sep 17 00:00:00 2001 From: Jason Woltje Date: Fri, 6 Mar 2026 20:21:39 -0600 Subject: [PATCH] =?UTF-8?q?feat(wave3):=20add=20@mosaic/prdy=20=E2=80=94?= =?UTF-8?q?=20TypeScript=20PRD=20wizard?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - PRD CRUD: createPrd, loadPrd, savePrd, listPrds - Interactive wizard using @clack/prompts - Built-in templates: software, feature, spike - CLI: prdy init | list | show - Depends on @mosaic/types workspace:* --- 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