workflow-agent-cli 2.22.2 → 2.22.4
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/dist/{chunk-WXHRDBAB.js → chunk-G5L77VD5.js} +31 -1
- package/dist/chunk-G5L77VD5.js.map +1 -0
- package/dist/{chunk-WR3AL26Z.js → chunk-IWFUJ2DS.js} +13 -2
- package/dist/chunk-IWFUJ2DS.js.map +1 -0
- package/dist/cli/index.js +135 -81
- package/dist/cli/index.js.map +1 -1
- package/dist/scripts/postinstall.js +1 -1
- package/dist/sync-SOERVZT3.js +7 -0
- package/package.json +30 -31
- package/dist/chunk-WR3AL26Z.js.map +0 -1
- package/dist/chunk-WXHRDBAB.js.map +0 -1
- package/dist/sync-MNHQ6AIQ.js +0 -7
- /package/dist/{sync-MNHQ6AIQ.js.map → sync-SOERVZT3.js.map} +0 -0
package/dist/cli/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/cli/index.ts","../../src/cli/commands/init.ts","../../src/templates/renderer.ts","../../src/adapters/index.ts","../../src/cli/commands/validate.ts","../../src/cli/commands/config.ts","../../src/cli/commands/suggest.ts","../../src/cli/commands/doctor.ts","../../src/utils/hooks.ts","../../src/cli/commands/setup/index.ts","../../src/cli/commands/setup.ts","../../src/cli/commands/auto-setup-command.ts","../../src/cli/commands/scope-create.ts","../../src/cli/commands/scope-migrate.ts","../../src/cli/commands/pre-commit.ts","../../src/cli/commands/docs/index.ts","../../src/cli/commands/docs-validate.ts","../../src/cli/commands/docs/generate.ts","../../src/cli/commands/docs/update.ts","../../src/cli/commands/advisory.ts","../../src/utils/advisory-analyzer.ts","../../src/utils/question-generator.ts","../../src/utils/report-comparator.ts","../../src/cli/commands/hooks/index.ts","../../src/cli/commands/hooks.ts","../../src/cli/commands/solution/index.ts","../../src/cli/commands/solution.ts","../../src/cli/commands/learn/index.ts","../../src/cli/commands/learn.ts","../../src/cli/commands/scope/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { readFileSync } from \"fs\";\nimport { fileURLToPath } from \"url\";\nimport { dirname, join } from \"path\";\nimport { initCommand } from \"./commands/init.js\";\nimport { validateCommand } from \"./commands/validate.js\";\nimport { configCommand } from \"./commands/config.js\";\nimport { suggestCommand } from \"./commands/suggest.js\";\nimport { doctorCommand } from \"./commands/doctor.js\";\nimport { createSetupCommand } from \"./commands/setup/index.js\";\nimport { scopeCreateCommand } from \"./commands/scope-create.js\";\nimport { scopeMigrateCommand } from \"./commands/scope-migrate.js\";\nimport { verifyCommand } from \"./commands/verify.js\";\nimport { preCommitCommand } from \"./commands/pre-commit.js\";\nimport { autoSetupCommand } from \"./commands/auto-setup-command.js\";\n// Command groups\nimport { createDocsCommand, docsValidateCommand, docsGenerateCommand, docsUpdateCommand } from \"./commands/docs/index.js\";\nimport { hooksCommand } from \"./commands/hooks/index.js\";\nimport {\n createSolutionCommand,\n solutionCaptureCommand,\n solutionSearchCommand,\n solutionListCommand,\n solutionApplyCommand,\n solutionDeprecateCommand,\n solutionStatsCommand,\n} from \"./commands/solution/index.js\";\n// Legacy imports for backward compatibility\nimport { advisoryCommand } from \"./commands/advisory.js\";\n\n// Read version from package.json dynamically\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst packageJson = JSON.parse(\n readFileSync(join(__dirname, \"../../package.json\"), \"utf-8\")\n);\n\n/**\n * Show deprecation warning for old command syntax\n */\nfunction deprecationWarning(oldCmd: string, newCmd: string): void {\n console.warn(chalk.yellow(`⚠️ \"${oldCmd}\" is deprecated and will be removed in v2.0.`));\n console.warn(chalk.yellow(` Use: ${newCmd}\\n`));\n}\nimport {\n createLearnCommand,\n learnRecordCommand,\n learnListCommand,\n learnApplyCommand,\n learnConfigCommand,\n learnDeprecateCommand,\n learnStatsCommand,\n learnPublishCommand,\n learnValidateCommand,\n learnCaptureCommand,\n} from \"./commands/learn/index.js\";\nimport { syncCommand } from \"./commands/sync.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"workflow\")\n .description(\n \"A self-evolving workflow management system for AI agent development\",\n )\n .version(packageJson.version);\n\n// ============================================\n// Command Groups (New Subcommand Pattern)\n// ============================================\n\n// Register docs command group\nprogram.addCommand(createDocsCommand());\n\n// Register solution command group\nprogram.addCommand(createSolutionCommand());\n\n// Register learn command group\nprogram.addCommand(createLearnCommand());\n\n// Register scope command group (now includes hooks)\nimport { createScopeCommand } from \"./commands/scope/index.js\";\nprogram.addCommand(createScopeCommand());\n\n// Register unified sync command\nprogram\n .command(\"sync\")\n .description(\"Sync patterns and solutions with the community registry\")\n .option(\"--push\", \"Push local patterns to registry\")\n .option(\"--pull\", \"Pull patterns from registry\")\n .option(\"--solutions\", \"Include solution patterns\")\n .option(\"--learn\", \"Include learning patterns (default)\")\n .option(\"--scopes\", \"Sync custom scope packages\")\n .option(\"--all\", \"Sync everything\")\n .option(\"--dry-run\", \"Preview without syncing\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n ${chalk.dim(\"# Interactive sync (prompts for direction)\")}\n $ workflow sync\n\n ${chalk.dim(\"# Push local patterns to registry\")}\n $ workflow sync --push\n\n ${chalk.dim(\"# Pull patterns from registry\")}\n $ workflow sync --pull\n\n ${chalk.dim(\"# Sync solutions only\")}\n $ workflow sync --solutions --push\n\n ${chalk.dim(\"# Preview what would be synced\")}\n $ workflow sync --all --dry-run\n`,\n )\n .action(syncCommand);\n\n// ============================================\n// Core Commands\n// ============================================\n\nprogram\n .command(\"init\")\n .description(\"Initialize workflow in current project\")\n .option(\"--migrate\", \"Auto-detect existing patterns and migrate\")\n .option(\"--workspace\", \"Initialize for multiple repositories\")\n .option(\n \"--preset <preset>\",\n \"Preset to use (saas, library, api, ecommerce, cms, custom)\",\n )\n .option(\"--name <name>\", \"Project name\")\n .option(\"-y, --yes\", \"Skip confirmation prompts\")\n .action(initCommand);\n\nprogram\n .command(\"validate <type> [value]\")\n .description(\"Validate branch name, commit message, or PR title\")\n .option(\n \"--suggest-on-error\",\n \"Offer improvement suggestions on validation errors\",\n )\n .action(validateCommand);\n\nprogram\n .command(\"config <action> [key] [value]\")\n .description(\"Manage workflow configuration\")\n .action(configCommand);\n\nprogram\n .command(\"config:fix\")\n .description(\"Automatically fix common configuration validation issues\")\n .action(async () => {\n const chalk = (await import(\"chalk\")).default;\n const { autoFixConfigFile } = await import(\"../config/index.js\");\n\n console.log(chalk.bold.cyan(\"\\n🔧 Workflow Configuration Auto-Fix\\n\"));\n\n const result = await autoFixConfigFile();\n\n if (result.success) {\n if (result.changes.length === 0) {\n console.log(chalk.green(\"✓ Configuration is already valid!\"));\n } else {\n console.log(chalk.green(\"✓ Configuration fixed successfully!\\n\"));\n console.log(chalk.dim(\"Changes made:\"));\n for (const change of result.changes) {\n console.log(chalk.dim(` • ${change}`));\n }\n console.log();\n }\n process.exit(0);\n } else {\n if (result.configPath) {\n console.log(chalk.red(`✗ Failed to fix configuration: ${result.error}`));\n } else {\n console.log(chalk.red(\"✗ No workflow configuration file found\"));\n console.log(chalk.yellow(\" Run: workflow init\"));\n }\n process.exit(1);\n }\n });\n\nprogram\n .command(\"suggest\")\n .description(\"Submit an improvement suggestion\")\n .argument(\"<feedback>\", \"Your improvement suggestion\")\n .option(\"--author <author>\", \"Your name or username\")\n .option(\n \"--category <category>\",\n \"Category: feature, bug, documentation, performance, other\",\n )\n .action(suggestCommand);\n\n// Register setup command group (includes setup scripts, setup auto)\nprogram.addCommand(createSetupCommand());\n\nprogram\n .command(\"doctor\")\n .description(\"Run health check and get optimization suggestions\")\n .option(\"--check-guidelines-only\", \"Only check guidelines presence\")\n .option(\"--fix\", \"Automatically fix validation issues in configuration\")\n .action(doctorCommand);\n\n// ============================================\n// Deprecated Commands (Hidden, will be removed in v2.0)\n// ============================================\n\n// Legacy hooks command with action argument (replaced by scope hooks subcommands)\nprogram\n .command(\"hooks:install\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow scope hooks install\")\n .action(async () => {\n deprecationWarning(\"workflow hooks:install\", \"workflow scope hooks install\");\n return hooksCommand(\"install\");\n });\n\nprogram\n .command(\"hooks:uninstall\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow scope hooks uninstall\")\n .action(async () => {\n deprecationWarning(\"workflow hooks:uninstall\", \"workflow scope hooks uninstall\");\n return hooksCommand(\"uninstall\");\n });\n\nprogram\n .command(\"hooks:status\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow scope hooks status\")\n .action(async () => {\n deprecationWarning(\"workflow hooks:status\", \"workflow scope hooks status\");\n return hooksCommand(\"status\");\n });\n\nprogram\n .command(\"scope:create\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow scope create\")\n .option(\"--name <name>\", 'Package name (e.g., \"fintech\", \"gaming\")')\n .option(\n \"--scopes <scopes>\",\n \"Comma-separated scopes (format: name:description:emoji:category)\",\n )\n .option(\"--preset-name <preset>\", \"Preset display name\")\n .option(\"--output-dir <dir>\", \"Output directory\")\n .option(\"--no-test\", \"Skip test file generation\")\n .action(async (options) => {\n deprecationWarning(\"workflow scope:create\", \"workflow scope create\");\n return scopeCreateCommand(options);\n });\n\nprogram\n .command(\"scope:migrate\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow scope migrate\")\n .option(\"--name <name>\", \"Package name for the preset\")\n .option(\"--output-dir <dir>\", \"Output directory\")\n .option(\"--keep-config\", \"Keep inline scopes in config after migration\")\n .action(async (options) => {\n deprecationWarning(\"workflow scope:migrate\", \"workflow scope migrate\");\n return scopeMigrateCommand(options);\n });\n\nprogram\n .command(\"verify\")\n .description(\"Run all quality checks with fix-and-revalidate pattern\")\n .option(\"--fix\", \"Enable auto-fix for lint and format issues\")\n .option(\"--max-retries <n>\", \"Maximum retry cycles (default: 10)\", \"10\")\n .option(\"--commit\", \"Commit changes if all checks pass\")\n .option(\"--dry-run\", \"Preview fixes without applying them\")\n .option(\"--learn\", \"Record successful fixes as learning patterns\")\n .action(verifyCommand);\n\nprogram\n .command(\"pre-commit\")\n .description(\"Run pre-commit checks (alias for verify --fix --staged)\")\n .option(\"--dry-run\", \"Preview fixes without applying them\")\n .action(preCommitCommand);\n\n// Deprecated: auto-setup → setup auto\nprogram\n .command(\"auto-setup\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow setup auto\")\n .option(\"-y, --yes\", \"Auto-approve all prompts\")\n .option(\"--audit\", \"Show audit report without applying changes\")\n .action(async (options) => {\n deprecationWarning(\"workflow auto-setup\", \"workflow setup auto\");\n return autoSetupCommand(options);\n });\n\n// ============================================\n// Deprecated Commands (Removed in v2.0)\n// Use `workflow docs <subcommand>` instead\n// ============================================\n\nprogram\n .command(\"advisory\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow docs advisory\")\n .option(\"--depth <level>\", \"Analysis depth\")\n .option(\"--output <path>\", \"Output directory\")\n .option(\"--interactive\", \"Enable interactive mode\")\n .option(\"--dry-run\", \"Preview analysis without writing files\")\n .option(\"--format <type>\", \"Output format\")\n .option(\"--timestamp\", \"Append timestamp to filenames\")\n .option(\"--include-health\", \"Include code health metrics\")\n .option(\"--ci\", \"CI mode with exit codes\")\n .option(\"--compare <path>\", \"Compare with previous report\")\n .action(async (options) => {\n deprecationWarning(\"workflow advisory\", \"workflow docs advisory\");\n return advisoryCommand(options);\n });\n\nprogram\n .command(\"generate-instructions\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow docs generate\")\n .option(\"--force\", \"Regenerate without confirmation\")\n .action(async (options) => {\n deprecationWarning(\"workflow generate-instructions\", \"workflow docs generate\");\n return docsGenerateCommand(options);\n });\n\nprogram\n .command(\"update-templates\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow docs update\")\n .option(\"--force\", \"Overwrite existing template files\")\n .option(\"--skip\", \"Skip the update\")\n .action(async (options) => {\n deprecationWarning(\"workflow update-templates\", \"workflow docs update\");\n return docsUpdateCommand(options);\n });\n\nprogram\n .command(\"docs:validate\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow docs validate\")\n .option(\"--fix\", \"Interactively fix broken references\")\n .option(\"--patterns <patterns>\", \"Glob patterns to scan\")\n .option(\"--ignore <patterns>\", \"Glob patterns to ignore\")\n .action(async (options) => {\n deprecationWarning(\"workflow docs:validate\", \"workflow docs validate\");\n const patterns = options.patterns\n ? options.patterns.split(\",\").map((p: string) => p.trim())\n : undefined;\n const ignore = options.ignore\n ? options.ignore.split(\",\").map((p: string) => p.trim())\n : undefined;\n\n return docsValidateCommand({\n fix: options.fix,\n patterns,\n ignore,\n });\n });\n\n// ============================================\n// Deprecated Learning Commands (Removed in v2.0)\n// Use `workflow learn <subcommand>` instead\n// ============================================\n\nprogram\n .command(\"learn:record\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn record\")\n .option(\"--name <name>\", \"Pattern name\")\n .option(\"--description <desc>\", \"Pattern description\")\n .option(\"--category <cat>\", \"Category\")\n .option(\"--framework <fw>\", \"Framework\")\n .option(\"--version <ver>\", \"Framework version range\")\n .option(\"--tags <tags>\", \"Comma-separated tags\")\n .option(\"--type <type>\", \"Pattern type\")\n .action(async (options) => {\n deprecationWarning(\"workflow learn:record\", \"workflow learn record\");\n return learnRecordCommand(options);\n });\n\nprogram\n .command(\"learn:list\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn list\")\n .option(\"--type <type>\", \"Filter by type\")\n .option(\"--framework <fw>\", \"Filter by framework\")\n .option(\"--tag <tag>\", \"Filter by tag\")\n .option(\"--deprecated\", \"Include deprecated patterns\")\n .action(async (options) => {\n deprecationWarning(\"workflow learn:list\", \"workflow learn list\");\n return learnListCommand(options);\n });\n\nprogram\n .command(\"learn:apply <patternId>\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn apply\")\n .option(\"--framework <fw>\", \"Override framework\")\n .option(\"--version <ver>\", \"Override version\")\n .option(\"--dry-run\", \"Preview without applying\")\n .action(async (patternId, options) => {\n deprecationWarning(\"workflow learn:apply\", \"workflow learn apply\");\n return learnApplyCommand(patternId, options);\n });\n\nprogram\n .command(\"learn:capture <paths...>\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn capture\")\n .option(\"--name <name>\", \"Pattern name\")\n .option(\"--description <desc>\", \"Pattern description\")\n .option(\"--framework <fw>\", \"Override inferred framework\")\n .option(\"--tags <tags>\", \"Additional tags\")\n .option(\"--dry-run\", \"Preview capture\")\n .action(async (paths, options) => {\n deprecationWarning(\"workflow learn:capture\", \"workflow learn capture\");\n return learnCaptureCommand(paths, options);\n });\n\nprogram\n .command(\"learn:sync\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow sync\")\n .option(\"--push\", \"Push local patterns\")\n .option(\"--pull\", \"Pull patterns\")\n .option(\"--dry-run\", \"Preview without syncing\")\n .action(async (options) => {\n deprecationWarning(\"workflow learn:sync\", \"workflow sync\");\n return syncCommand({ ...options, learn: true });\n });\n\nprogram\n .command(\"learn:config\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn config\")\n .option(\"--enable-sync\", \"Enable pattern sync\")\n .option(\"--disable-sync\", \"Disable pattern sync\")\n .option(\"--enable-telemetry\", \"Enable telemetry\")\n .option(\"--disable-telemetry\", \"Disable telemetry\")\n .option(\"--reset-id\", \"Reset contributor ID\")\n .option(\"--show\", \"Show current configuration\")\n .action(async (options) => {\n deprecationWarning(\"workflow learn:config\", \"workflow learn config\");\n return learnConfigCommand(options);\n });\n\nprogram\n .command(\"learn:deprecate <patternId> <reason>\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn deprecate\")\n .action(async (patternId, reason) => {\n deprecationWarning(\"workflow learn:deprecate\", \"workflow learn deprecate\");\n return learnDeprecateCommand(patternId, reason);\n });\n\nprogram\n .command(\"learn:publish [patternId]\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn publish\")\n .option(\"--private\", \"Mark as private\")\n .option(\"--all\", \"Apply to all patterns\")\n .option(\"-y, --yes\", \"Skip confirmation prompts\")\n .action(async (patternId, options) => {\n deprecationWarning(\"workflow learn:publish\", \"workflow learn publish\");\n return learnPublishCommand(patternId, options);\n });\n\nprogram\n .command(\"learn:stats\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn stats\")\n .action(async () => {\n deprecationWarning(\"workflow learn:stats\", \"workflow learn stats\");\n return learnStatsCommand();\n });\n\nprogram\n .command(\"learn:validate\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn validate\")\n .option(\"-t, --type <type>\", \"Pattern type to validate\", \"all\")\n .option(\"-f, --file <path>\", \"Validate a specific file\")\n .option(\"--fix\", \"Automatically fix common issues\")\n .option(\"-v, --verbose\", \"Show detailed output\")\n .action(async (options) => {\n deprecationWarning(\"workflow learn:validate\", \"workflow learn validate\");\n return learnValidateCommand(options);\n });\n\n// ============================================\n// Deprecated Solution Commands (Removed in v2.0)\n// Use `workflow solution <subcommand>` instead\n// ============================================\n\nprogram\n .command(\"solution:capture\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow solution capture\")\n .option(\"--name <name>\", \"Solution name\")\n .option(\"--description <desc>\", \"Solution description\")\n .option(\"--category <cat>\", \"Category\")\n .option(\"--keywords <kw>\", \"Comma-separated keywords\")\n .option(\"--path <path>\", \"Path to the solution directory\")\n .option(\"--anonymize\", \"Anonymize sensitive data\")\n .option(\"--private\", \"Keep solution private\")\n .action(async (options) => {\n deprecationWarning(\"workflow solution:capture\", \"workflow solution capture\");\n return solutionCaptureCommand(options);\n });\n\nprogram\n .command(\"solution:search <query>\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow solution search\")\n .option(\"--category <cat>\", \"Filter by category\")\n .option(\"--framework <fw>\", \"Filter by framework\")\n .option(\"--limit <n>\", \"Maximum results\", \"10\")\n .action(async (query, options) => {\n deprecationWarning(\"workflow solution:search\", \"workflow solution search\");\n return solutionSearchCommand(query, options);\n });\n\nprogram\n .command(\"solution:list\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow solution list\")\n .option(\"--category <cat>\", \"Filter by category\")\n .option(\"--framework <fw>\", \"Filter by framework\")\n .option(\"--deprecated\", \"Include deprecated solutions\")\n .option(\"--limit <n>\", \"Maximum results\", \"20\")\n .action(async (options) => {\n deprecationWarning(\"workflow solution:list\", \"workflow solution list\");\n return solutionListCommand(options);\n });\n\nprogram\n .command(\"solution:apply <solutionId>\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow solution apply\")\n .option(\"--output <dir>\", \"Output directory\")\n .option(\"--dry-run\", \"Preview without applying\")\n .option(\"--include-tests\", \"Include test files\")\n .action(async (solutionId, options) => {\n deprecationWarning(\"workflow solution:apply\", \"workflow solution apply\");\n return solutionApplyCommand(solutionId, options);\n });\n\nprogram\n .command(\"solution:deprecate <solutionId> <reason>\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow solution deprecate\")\n .action(async (solutionId, reason) => {\n deprecationWarning(\"workflow solution:deprecate\", \"workflow solution deprecate\");\n return solutionDeprecateCommand(solutionId, reason);\n });\n\nprogram\n .command(\"solution:stats\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow solution stats\")\n .action(async () => {\n deprecationWarning(\"workflow solution:stats\", \"workflow solution stats\");\n return solutionStatsCommand();\n });\n\nprogram.parse();\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"fs\";\nimport { writeFile, mkdir } from \"fs/promises\";\nimport { join, dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { hasConfig } from \"../../config/index.js\";\nimport {\n buildTemplateContext,\n renderTemplateDirectory,\n validateTemplateDirectory,\n} from \"../../templates/renderer.js\";\nimport { runAllSetups, generateAuditReport } from \"../../utils/auto-setup.js\";\nimport { generateCopilotInstructions } from \"../../scripts/copilot-instructions-generator.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nexport async function initCommand(options: {\n migrate?: boolean;\n workspace?: boolean;\n preset?: string;\n name?: string;\n yes?: boolean;\n}) {\n console.log(chalk.bold.cyan(\"\\n🚀 Workflow Agent Initialization\\n\"));\n\n const cwd = process.cwd();\n const isNonInteractive = !!(options.preset && options.name);\n\n // Check if already initialized\n if (hasConfig(cwd) && !options.yes && !isNonInteractive) {\n const shouldContinue = await p.confirm({\n message: \"Workflow Agent is already configured. Continue and overwrite?\",\n initialValue: false,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Initialization cancelled\");\n process.exit(0);\n }\n }\n\n // Get project name\n const projectName = isNonInteractive\n ? options.name\n : await p.text({\n message: \"What is your project name?\",\n placeholder: \"my-awesome-project\",\n defaultValue: process.cwd().split(\"/\").pop() || \"my-project\",\n });\n\n if (!isNonInteractive && p.isCancel(projectName)) {\n p.cancel(\"Initialization cancelled\");\n process.exit(0);\n }\n\n // Select preset\n const preset = isNonInteractive\n ? options.preset\n : await p.select({\n message: \"Choose a scope preset for your project:\",\n options: [\n {\n value: \"saas\",\n label:\n \"📦 SaaS Application - 17 scopes (auth, tasks, boards, sprints, etc.)\",\n },\n {\n value: \"library\",\n label:\n \"📚 Library/Package - 10 scopes (types, build, docs, examples, etc.)\",\n },\n {\n value: \"api\",\n label:\n \"🔌 API/Backend - 13 scopes (auth, endpoints, models, services, etc.)\",\n },\n {\n value: \"ecommerce\",\n label:\n \"🛒 E-commerce - 12 scopes (cart, products, payments, orders, etc.)\",\n },\n {\n value: \"cms\",\n label: \"📝 CMS - 13 scopes (content, pages, media, editor, etc.)\",\n },\n {\n value: \"custom\",\n label: \"✨ Custom (define your own scopes manually)\",\n },\n ],\n });\n\n if (!isNonInteractive && p.isCancel(preset)) {\n p.cancel(\"Initialization cancelled\");\n process.exit(0);\n }\n\n // Load preset scopes\n let scopes: Array<{ name: string; description: string; emoji?: string }> = [];\n\n if (preset !== \"custom\") {\n // Import preset dynamically\n try {\n const presetModule = await import(`@workflow/scopes-${preset}`);\n scopes = presetModule.scopes || presetModule.default.scopes;\n\n const spinner = p.spinner();\n spinner.start(`Loading ${presetModule.default?.name || preset} preset`);\n await new Promise((resolve) => setTimeout(resolve, 500));\n spinner.stop(`✓ Loaded ${scopes.length} scopes from preset`);\n } catch (error) {\n console.log(\n chalk.yellow(\n `\\n⚠️ Could not load preset package. Using basic scopes.`,\n ),\n );\n scopes = [\n { name: \"feat\", description: \"New features\", emoji: \"✨\" },\n { name: \"fix\", description: \"Bug fixes\", emoji: \"🐛\" },\n { name: \"docs\", description: \"Documentation\", emoji: \"📚\" },\n ];\n }\n } else {\n scopes = [\n { name: \"feat\", description: \"New features\", emoji: \"✨\" },\n { name: \"fix\", description: \"Bug fixes\", emoji: \"🐛\" },\n { name: \"docs\", description: \"Documentation\", emoji: \"📚\" },\n ];\n console.log(\n chalk.dim(\n \"\\n💡 Tip: Edit workflow.config.json to add your custom scopes\",\n ),\n );\n }\n\n // Generate config\n const config = {\n projectName: projectName as string,\n scopes: scopes,\n enforcement: \"strict\" as const,\n language: \"en\",\n };\n\n // Write config file\n const configPath = join(cwd, \"workflow.config.json\");\n await writeFile(configPath, JSON.stringify(config, null, 2));\n\n // Create .workflow directory\n const workflowDir = join(cwd, \".workflow\");\n if (!existsSync(workflowDir)) {\n await mkdir(workflowDir, { recursive: true });\n }\n\n // Render guidelines from templates\n const shouldGenerateGuidelines =\n options.yes || isNonInteractive\n ? true\n : await p.confirm({\n message: \"Generate workflow guidelines from templates?\",\n initialValue: true,\n });\n\n if (!isNonInteractive && p.isCancel(shouldGenerateGuidelines)) {\n p.cancel(\"Initialization cancelled\");\n process.exit(0);\n }\n\n if (shouldGenerateGuidelines) {\n const spinner = p.spinner();\n spinner.start(\"Generating guidelines...\");\n\n try {\n // Find templates directory\n // When built and installed: dist/cli/index.js -> ../../templates\n // The templates are at the package root level\n const templatesDir = join(__dirname, \"../../templates\");\n\n // Validate templates exist\n await validateTemplateDirectory(templatesDir);\n\n // Build context for template rendering\n const context = await buildTemplateContext(config, cwd);\n\n // Create guidelines directory\n const guidelinesDir = join(cwd, \"guidelines\");\n await mkdir(guidelinesDir, { recursive: true });\n\n // Render all templates\n const renderedFiles = await renderTemplateDirectory(\n templatesDir,\n guidelinesDir,\n context,\n );\n\n spinner.stop(`✓ Generated ${renderedFiles.length} guideline documents`);\n\n // Generate .github/copilot-instructions.md from guidelines\n const instructionsSpinner = p.spinner();\n instructionsSpinner.start(\"Generating AI agent instructions...\");\n const result = generateCopilotInstructions(cwd, { silent: true });\n if (result.success) {\n instructionsSpinner.stop(`✓ Generated .github/copilot-instructions.md`);\n } else {\n instructionsSpinner.stop(\"⚠️ Could not generate copilot instructions\");\n }\n } catch (error) {\n spinner.stop(\"⚠️ Could not generate guidelines\");\n console.log(\n chalk.yellow(\n `\\nReason: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n console.log(\n chalk.dim(\"You can manually copy guidelines later if needed.\"),\n );\n }\n }\n\n // Offer auto-setup for development tools\n const shouldAutoSetup =\n options.yes || isNonInteractive\n ? true\n : await p.confirm({\n message: \"Set up linting, formatting, testing, and CI automatically?\",\n initialValue: true,\n });\n\n if (!isNonInteractive && p.isCancel(shouldAutoSetup)) {\n p.cancel(\"Initialization cancelled\");\n process.exit(0);\n }\n\n if (shouldAutoSetup) {\n const setupSpinner = p.spinner();\n setupSpinner.start(\"Running auto-setup...\");\n\n try {\n const report = await generateAuditReport(cwd);\n setupSpinner.stop(\n `✓ Found ${report.totalChanges} configurations to apply`,\n );\n\n if (report.totalChanges > 0 || report.allDevDependencies.length > 0) {\n const autoSetupSpinner = p.spinner();\n await runAllSetups(cwd, (step, status) => {\n if (status === \"start\") {\n autoSetupSpinner.start(step);\n } else if (status === \"done\") {\n autoSetupSpinner.stop(`✓ ${step}`);\n } else {\n autoSetupSpinner.stop(`✗ ${step}`);\n }\n });\n }\n } catch (error) {\n setupSpinner.stop(\"⚠️ Auto-setup encountered issues\");\n console.log(\n chalk.yellow(\n `\\nReason: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n console.log(\n chalk.dim(\"You can run 'workflow auto-setup' later to retry.\"),\n );\n }\n }\n\n p.outro(chalk.green(\"✓ Workflow Agent initialized successfully!\"));\n console.log(chalk.dim(\"\\nNext steps:\"));\n console.log(\n chalk.dim(\" 1. Review your configuration in workflow.config.json\"),\n );\n if (shouldGenerateGuidelines) {\n console.log(\n chalk.dim(\" 2. Review generated guidelines in guidelines/ directory\"),\n );\n console.log(chalk.dim(\" 3. Run: workflow verify (to check everything)\"));\n console.log(\n chalk.dim(\" 4. Run: workflow doctor (for optimization suggestions)\\n\"),\n );\n } else {\n console.log(chalk.dim(\" 2. Run: workflow verify (to check everything)\"));\n console.log(\n chalk.dim(\" 3. Run: workflow doctor (for optimization suggestions)\\n\"),\n );\n }\n}\n","import fs from \"fs/promises\";\nimport path from \"path\";\nimport { WorkflowConfig } from \"../config/schema.js\";\nimport { detectAdapter, getAdapter } from \"../adapters/index.js\";\n\nexport interface TemplateContext {\n projectName: string;\n framework: string;\n scopes: string;\n scopeList: string;\n pathStructure: string;\n enforcement: string;\n year: string;\n // Additional context for scope package scaffolding\n scopeName?: string;\n presetName?: string;\n scopeDefinitions?: string;\n packageDirectory?: string;\n isMonorepo?: string;\n testImports?: string;\n packageVersion?: string;\n [key: string]: string | undefined;\n}\n\n/**\n * Renders a template string with provided context using simple {{variable}} syntax\n */\nexport function renderTemplate(\n template: string,\n context: TemplateContext,\n): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key) => {\n return context[key] ?? match;\n });\n}\n\n/**\n * Builds template context from workflow config and detected framework\n */\nexport async function buildTemplateContext(\n config: WorkflowConfig,\n projectPath: string = process.cwd(),\n): Promise<TemplateContext> {\n // Detect framework\n const detectedFramework = await detectAdapter();\n const adapter = getAdapter(detectedFramework);\n\n // Build scope list as markdown\n const scopeList = config.scopes\n .map((s) => `- **${s.name}** - ${s.description}`)\n .join(\"\\n\");\n\n // Build scope names list (comma-separated)\n const scopes = config.scopes.map((s) => s.name).join(\", \");\n\n // Build path structure from adapter\n const pathStructure = adapter\n ? `\n### Path Structure\n\n\\`\\`\\`\n${adapter.paths.components}/ → UI components\n${adapter.paths.lib}/ → Utility functions and services\n${adapter.paths.hooks}/ → Custom React hooks\n${adapter.paths.types}/ → TypeScript type definitions\n\\`\\`\\`\n`.trim()\n : \"N/A\";\n\n // Get project name from package.json or directory name\n const projectName = await getProjectName(projectPath);\n\n return {\n projectName,\n framework: adapter?.name || \"unknown\",\n scopes,\n scopeList,\n pathStructure,\n enforcement: config.enforcement,\n year: new Date().getFullYear().toString(),\n };\n}\n\n/**\n * Renders a template file and writes output\n */\nexport async function renderTemplateFile(\n templatePath: string,\n outputPath: string,\n context: TemplateContext,\n): Promise<void> {\n const template = await fs.readFile(templatePath, \"utf-8\");\n const rendered = renderTemplate(template, context);\n await fs.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.writeFile(outputPath, rendered, \"utf-8\");\n}\n\n/**\n * Renders all template files from source directory to output directory\n * Supports .md, .ts, .json file extensions\n */\nexport async function renderTemplateDirectory(\n templateDir: string,\n outputDir: string,\n context: TemplateContext,\n): Promise<string[]> {\n const files = await fs.readdir(templateDir);\n const rendered: string[] = [];\n\n for (const file of files) {\n // Support .md, .ts, .json files\n if (!file.match(/\\.(md|ts|json)$/)) continue;\n\n const templatePath = path.join(templateDir, file);\n const outputPath = path.join(outputDir, file);\n\n await renderTemplateFile(templatePath, outputPath, context);\n rendered.push(file);\n }\n\n return rendered;\n}\n\n/**\n * Gets project name from package.json or directory name\n */\nasync function getProjectName(projectPath: string): Promise<string> {\n try {\n const pkgPath = path.join(projectPath, \"package.json\");\n const pkg = JSON.parse(await fs.readFile(pkgPath, \"utf-8\"));\n return pkg.name || path.basename(projectPath);\n } catch {\n return path.basename(projectPath);\n }\n}\n\n/**\n * Validates that template directory exists and contains markdown files\n */\nexport async function validateTemplateDirectory(\n templateDir: string,\n): Promise<void> {\n try {\n const stat = await fs.stat(templateDir);\n if (!stat.isDirectory()) {\n throw new Error(`Template path is not a directory: ${templateDir}`);\n }\n\n const files = await fs.readdir(templateDir);\n const templateFiles = files.filter((f) => f.match(/\\.(md|ts|json)$/));\n\n if (templateFiles.length === 0) {\n throw new Error(\n `No template files found in template directory: ${templateDir}`,\n );\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new Error(`Template directory not found: ${templateDir}`);\n }\n throw error;\n }\n}\n\n/**\n * Renders a scope package from templates\n * @param outputDir Directory to create package in\n * @param context Template context with scope-specific variables\n */\nexport async function renderScopePackage(\n outputDir: string,\n context: Required<\n Pick<\n TemplateContext,\n \"scopeName\" | \"presetName\" | \"scopeDefinitions\" | \"packageVersion\"\n >\n > &\n TemplateContext,\n): Promise<void> {\n // Ensure output directory exists\n await fs.mkdir(path.join(outputDir, \"src\"), { recursive: true });\n\n // Write package.json\n const packageJson = {\n name: `@workflow/scopes-${context.scopeName}`,\n version: context.packageVersion,\n description: `Scope preset for ${context.presetName}`,\n keywords: [\"workflow\", \"scopes\", context.scopeName, \"preset\"],\n repository: {\n type: \"git\",\n url: \"git+https://github.com/your-org/your-repo.git\",\n directory:\n context.packageDirectory || `packages/scopes-${context.scopeName}`,\n },\n license: \"MIT\",\n author: \"Your Name\",\n type: \"module\",\n exports: {\n \".\": {\n types: \"./dist/index.d.ts\",\n import: \"./dist/index.js\",\n },\n },\n files: [\"dist\"],\n scripts: {\n build: \"tsup\",\n dev: \"tsup --watch\",\n typecheck: \"tsc --noEmit\",\n test: \"vitest run\",\n },\n peerDependencies: {\n \"@hawkinside_out/workflow-agent\": \"^1.0.0\",\n },\n devDependencies: {\n \"@hawkinside_out/workflow-agent\": \"^1.0.0\",\n tsup: \"^8.0.1\",\n typescript: \"^5.3.3\",\n vitest: \"^1.0.0\",\n },\n publishConfig: {\n access: \"public\",\n },\n };\n\n await fs.writeFile(\n path.join(outputDir, \"package.json\"),\n JSON.stringify(packageJson, null, 2),\n \"utf-8\",\n );\n\n // Write tsconfig.json\n const tsconfig = {\n extends: \"../../tsconfig.json\",\n compilerOptions: {\n outDir: \"./dist\",\n rootDir: \"./src\",\n },\n include: [\"src/**/*\"],\n };\n\n await fs.writeFile(\n path.join(outputDir, \"tsconfig.json\"),\n JSON.stringify(tsconfig, null, 2),\n \"utf-8\",\n );\n\n // Write tsup.config.ts\n const tsupConfig = `import { defineConfig } from 'tsup';\n\nexport default defineConfig({\n entry: ['src/index.ts'],\n format: ['esm'],\n dts: true,\n clean: true,\n sourcemap: true,\n});\n`;\n\n await fs.writeFile(\n path.join(outputDir, \"tsup.config.ts\"),\n tsupConfig,\n \"utf-8\",\n );\n\n // Write src/index.ts\n const indexTs = `import type { Scope } from '@hawkinside_out/workflow-agent/config';\n\nexport const scopes: Scope[] = ${context.scopeDefinitions};\n\nexport const preset = {\n name: '${context.presetName}',\n description: 'Scope configuration for ${context.presetName}',\n scopes,\n version: '${context.packageVersion}',\n};\n\nexport default preset;\n`;\n\n await fs.writeFile(path.join(outputDir, \"src\", \"index.ts\"), indexTs, \"utf-8\");\n}\n","export interface Adapter {\n name: string;\n description: string;\n detect: () => Promise<boolean>;\n paths: {\n actions?: string;\n components?: string;\n lib?: string;\n hooks?: string;\n types?: string;\n tests?: string;\n config?: string;\n };\n}\n\nexport const adapters: Record<string, Adapter> = {\n \"nextjs-app-router\": {\n name: \"Next.js App Router\",\n description: \"Next.js 13+ with app directory\",\n detect: async () => {\n const fs = await import(\"fs\");\n return (\n (fs.existsSync(\"app\") && fs.existsSync(\"next.config.ts\")) ||\n fs.existsSync(\"next.config.js\")\n );\n },\n paths: {\n actions: \"app/actions\",\n components: \"components\",\n lib: \"lib\",\n hooks: \"hooks\",\n types: \"types\",\n tests: \"__tests__\",\n config: \"app\",\n },\n },\n\n \"nextjs-pages\": {\n name: \"Next.js Pages Router\",\n description: \"Next.js with pages directory\",\n detect: async () => {\n const fs = await import(\"fs\");\n return (\n fs.existsSync(\"pages\") &&\n (fs.existsSync(\"next.config.ts\") || fs.existsSync(\"next.config.js\"))\n );\n },\n paths: {\n components: \"components\",\n lib: \"lib\",\n hooks: \"hooks\",\n types: \"types\",\n tests: \"__tests__\",\n config: \"pages\",\n },\n },\n\n \"vite-react\": {\n name: \"Vite + React\",\n description: \"Vite-powered React application\",\n detect: async () => {\n const fs = await import(\"fs\");\n return fs.existsSync(\"vite.config.ts\") || fs.existsSync(\"vite.config.js\");\n },\n paths: {\n components: \"src/components\",\n lib: \"src/lib\",\n hooks: \"src/hooks\",\n types: \"src/types\",\n tests: \"src/__tests__\",\n config: \"src\",\n },\n },\n\n remix: {\n name: \"Remix\",\n description: \"Remix full-stack framework\",\n detect: async () => {\n const fs = await import(\"fs\");\n return (\n fs.existsSync(\"app/routes\") &&\n (fs.existsSync(\"remix.config.js\") || fs.existsSync(\"package.json\"))\n );\n },\n paths: {\n components: \"app/components\",\n lib: \"app/lib\",\n types: \"app/types\",\n tests: \"app/__tests__\",\n config: \"app/root.tsx\",\n },\n },\n\n astro: {\n name: \"Astro\",\n description: \"Astro static site framework\",\n detect: async () => {\n const fs = await import(\"fs\");\n return (\n fs.existsSync(\"astro.config.mjs\") || fs.existsSync(\"astro.config.ts\")\n );\n },\n paths: {\n components: \"src/components\",\n lib: \"src/lib\",\n types: \"src/types\",\n tests: \"src/__tests__\",\n config: \"src/pages\",\n },\n },\n\n sveltekit: {\n name: \"SvelteKit\",\n description: \"SvelteKit full-stack framework\",\n detect: async () => {\n const fs = await import(\"fs\");\n return fs.existsSync(\"svelte.config.js\") || fs.existsSync(\"src/routes\");\n },\n paths: {\n components: \"src/lib/components\",\n lib: \"src/lib\",\n types: \"src/lib/types\",\n tests: \"src/lib/__tests__\",\n config: \"src/routes\",\n },\n },\n\n generic: {\n name: \"Generic Project\",\n description: \"Standard project structure\",\n detect: async () => true, // Always matches as fallback\n paths: {\n components: \"src/components\",\n lib: \"src/lib\",\n types: \"src/types\",\n tests: \"tests\",\n config: \"src\",\n },\n },\n};\n\nexport async function detectAdapter(): Promise<string> {\n for (const [key, adapter] of Object.entries(adapters)) {\n if (key === \"generic\") continue; // Skip generic, it's the fallback\n\n try {\n if (await adapter.detect()) {\n return key;\n }\n } catch {\n // Continue to next adapter\n }\n }\n\n return \"generic\";\n}\n\nexport function getAdapter(name: string): Adapter | null {\n return adapters[name] || null;\n}\n","import chalk from \"chalk\";\nimport { execa } from \"execa\";\nimport { loadConfig } from \"../../config/index.js\";\nimport {\n validateBranchName,\n validateCommitMessage,\n validatePRTitle,\n} from \"../../validators/index.js\";\n\nexport async function validateCommand(\n type: string,\n value?: string,\n _options: { suggestOnError?: boolean } = {},\n) {\n const config = await loadConfig();\n\n if (!config) {\n console.error(\n chalk.red(\"✗ No workflow configuration found. Run: workflow init\"),\n );\n process.exit(1);\n }\n\n let targetValue = value;\n\n try {\n let result;\n switch (type) {\n case \"branch\": {\n if (!targetValue) {\n const { stdout } = await execa(\"git\", [\"branch\", \"--show-current\"]);\n targetValue = stdout.trim();\n }\n result = await validateBranchName(targetValue, config);\n break;\n }\n\n case \"commit\": {\n if (!targetValue) {\n const { stdout } = await execa(\"git\", [\"log\", \"-1\", \"--pretty=%s\"]);\n targetValue = stdout.trim();\n }\n result = await validateCommitMessage(targetValue, config);\n break;\n }\n\n case \"pr\":\n case \"pr-title\": {\n if (!targetValue) {\n console.error(chalk.red(\"✗ PR title must be provided as argument\"));\n process.exit(1);\n }\n result = await validatePRTitle(targetValue, config);\n break;\n }\n\n default:\n console.error(chalk.red(`✗ Unknown validation type: ${type}`));\n console.error(chalk.dim(\"Valid types: branch, commit, pr\"));\n process.exit(1);\n }\n\n if (result.valid) {\n console.log(chalk.green(`✓ ${type} is valid: ${targetValue}`));\n process.exit(0);\n } else {\n console.error(chalk.red(`✗ Invalid ${type}: ${targetValue}`));\n console.error(chalk.yellow(` ${result.error}`));\n if (result.suggestion) {\n console.error(chalk.cyan(` 💡 ${result.suggestion}`));\n }\n\n const enforcementLevel = config.enforcement;\n if (enforcementLevel === \"strict\") {\n process.exit(1);\n } else {\n console.log(\n chalk.yellow(\n `\\n⚠️ Advisory mode: validation failed but not blocking`,\n ),\n );\n process.exit(0);\n }\n }\n } catch (error) {\n console.error(chalk.red(`✗ Validation error: ${error}`));\n process.exit(1);\n }\n}\n","import chalk from \"chalk\";\n\nexport async function configCommand(\n action: string,\n key?: string,\n value?: string,\n) {\n console.log(chalk.yellow(\"Config command not yet implemented\"));\n console.log({ action, key, value });\n}\n","import chalk from \"chalk\";\nimport * as p from \"@clack/prompts\";\nimport { createTracker } from \"@hawkinside_out/workflow-improvement-tracker\";\n\nexport async function suggestCommand(\n feedback: string,\n options: { author?: string; category?: string } = {},\n) {\n console.log(chalk.cyan(\"💡 Submitting improvement suggestion...\\n\"));\n\n const tracker = createTracker();\n\n // Optionally get category if not provided\n let category = options.category;\n if (!category) {\n const categoryChoice = await p.select({\n message: \"What type of improvement is this?\",\n options: [\n { value: \"feature\", label: \"✨ Feature Request\" },\n { value: \"bug\", label: \"🐛 Bug Report\" },\n { value: \"documentation\", label: \"📚 Documentation\" },\n { value: \"performance\", label: \"⚡ Performance\" },\n { value: \"other\", label: \"💡 Other\" },\n ],\n });\n\n if (p.isCancel(categoryChoice)) {\n p.cancel(\"Suggestion cancelled\");\n process.exit(0);\n }\n\n category = categoryChoice as string;\n }\n\n // Submit suggestion\n const result = await tracker.submit(feedback, options.author, category);\n\n if (!result.success) {\n console.log(chalk.red(\"✗ Suggestion rejected\"));\n console.log(chalk.dim(` Reason: ${result.error}`));\n process.exit(1);\n }\n\n console.log(chalk.green(\"✓ Suggestion submitted successfully!\"));\n console.log(chalk.dim(` ID: ${result.suggestion?.id}`));\n console.log(chalk.dim(` Status: ${result.suggestion?.status}`));\n console.log(chalk.dim(` Category: ${result.suggestion?.category}`));\n console.log(chalk.dim(\"\\nYour suggestion will be:\"));\n console.log(chalk.dim(\" 1. Reviewed by the community\"));\n console.log(chalk.dim(\" 2. Prioritized based on impact\"));\n console.log(\n chalk.dim(\" 3. Incorporated into future releases if approved\\n\"),\n );\n}\n","import chalk from \"chalk\";\nimport { loadConfigSafe, autoFixConfigFile } from \"../../config/index.js\";\nimport { getMandatoryTemplateFilenames } from \"../../templates/metadata.js\";\nimport { existsSync } from \"fs\";\nimport { join } from \"path\";\nimport { hasGitRepo, getAllHooksStatus } from \"../../utils/hooks.js\";\n\nexport async function doctorCommand(options?: {\n checkGuidelinesOnly?: boolean;\n fix?: boolean;\n}) {\n console.log(chalk.bold.cyan(\"\\n🏥 Workflow Agent Health Check\\n\"));\n\n // Use safe loading to handle validation errors gracefully\n const result = await loadConfigSafe();\n\n // Handle missing config\n if (!result.configPath && !result.rawConfig) {\n console.error(chalk.red(\"✗ No workflow configuration found\"));\n console.log(chalk.yellow(\" Run: workflow init\"));\n process.exit(1);\n }\n\n // Handle validation errors\n if (!result.valid && result.issues.length > 0) {\n console.log(chalk.yellow(\"⚠ Configuration has validation issues:\\n\"));\n\n for (const issue of result.issues) {\n console.log(chalk.red(` ✗ ${issue.path}: ${issue.message}`));\n if (issue.currentValue !== undefined) {\n console.log(chalk.dim(` Current value: ${JSON.stringify(issue.currentValue)}`));\n }\n if (issue.suggestedFix) {\n console.log(chalk.green(` Suggested fix: ${issue.suggestedFix.description}`));\n console.log(chalk.dim(` New value: ${JSON.stringify(issue.suggestedFix.newValue)}`));\n }\n }\n\n // Check if auto-fix is available\n const hasAutoFixes = result.issues.some((i) => i.suggestedFix);\n\n if (hasAutoFixes) {\n if (options?.fix) {\n // Auto-fix was requested\n console.log(chalk.cyan(\"\\n🔧 Attempting to auto-fix issues...\\n\"));\n const fixResult = await autoFixConfigFile();\n\n if (fixResult.success) {\n console.log(chalk.green(\"✓ Configuration fixed successfully!\\n\"));\n for (const change of fixResult.changes) {\n console.log(chalk.dim(` • ${change}`));\n }\n console.log(chalk.cyan(\"\\n Run 'workflow doctor' again to verify.\\n\"));\n process.exit(0);\n } else {\n console.log(chalk.red(`✗ Auto-fix failed: ${fixResult.error}`));\n process.exit(1);\n }\n } else {\n console.log(chalk.cyan(\"\\n💡 Auto-fix available!\"));\n console.log(chalk.dim(\" Run: workflow doctor --fix\\n\"));\n }\n }\n\n process.exit(1);\n }\n\n const config = result.config!;\n\n console.log(chalk.green(\"✓ Configuration loaded successfully\"));\n console.log(chalk.dim(` Project: ${config.projectName}`));\n console.log(chalk.dim(` Scopes: ${config.scopes.length} configured`));\n console.log(chalk.dim(` Enforcement: ${config.enforcement}`));\n console.log(chalk.dim(` Language: ${config.language}`));\n\n // Check guidelines\n const cwd = process.cwd();\n const guidelinesDir = join(cwd, \"guidelines\");\n const mandatoryFiles = getMandatoryTemplateFilenames();\n const missingFiles: string[] = [];\n\n console.log(chalk.cyan(\"\\n📚 Guidelines Check:\\n\"));\n\n for (const filename of mandatoryFiles) {\n const filePath = join(guidelinesDir, filename);\n if (existsSync(filePath)) {\n console.log(chalk.green(`✓ ${filename}`));\n } else {\n console.log(chalk.red(`✗ ${filename} (missing)`));\n missingFiles.push(filename);\n }\n }\n\n if (missingFiles.length === 0) {\n console.log(\n chalk.green(`\\n✓ All ${mandatoryFiles.length} mandatory guidelines present`),\n );\n } else {\n console.log(\n chalk.red(\n `\\n✗ Missing ${missingFiles.length} mandatory guideline(s)`,\n ),\n );\n }\n\n // If check-guidelines-only flag is set, exit here\n if (options?.checkGuidelinesOnly) {\n process.exit(missingFiles.length > 0 ? 1 : 0);\n }\n\n // Check git hooks status\n console.log(chalk.cyan(\"\\n🔗 Git Hooks Check:\\n\"));\n\n if (!hasGitRepo(cwd)) {\n console.log(chalk.yellow(\"⚠ No git repository found\"));\n console.log(chalk.dim(\" Run: git init\"));\n } else {\n try {\n const hooksStatus = await getAllHooksStatus(cwd);\n \n for (const status of hooksStatus) {\n if (status.installed) {\n console.log(chalk.green(`✓ ${status.hookType}: installed`));\n } else {\n console.log(chalk.yellow(`⚠ ${status.hookType}: not installed`));\n }\n }\n\n const allInstalled = hooksStatus.every((s) => s.installed);\n if (!allInstalled) {\n console.log(chalk.dim(\"\\n Run: workflow hooks install\"));\n }\n } catch (error) {\n console.log(chalk.yellow(\"⚠ Could not check hooks status\"));\n console.log(chalk.dim(` ${error instanceof Error ? error.message : \"Unknown error\"}`));\n }\n }\n\n // Exit with error if guidelines are missing\n if (missingFiles.length > 0) {\n process.exit(1);\n }\n}\n","/**\n * Git hooks utility for installing, managing, and removing workflow hooks\n * Supports wrapping existing hooks and CI environment detection\n */\n\nimport { existsSync } from \"fs\";\nimport { readFile, writeFile, unlink, chmod, rename, mkdir } from \"fs/promises\";\nimport { join } from \"path\";\nimport type { HooksConfig } from \"../config/schema.js\";\n\nexport interface HookStatus {\n installed: boolean;\n hookType: \"pre-commit\" | \"commit-msg\";\n hasExistingHook: boolean;\n wrappedOriginal: boolean;\n}\n\nexport interface InstallResult {\n success: boolean;\n hookType: \"pre-commit\" | \"commit-msg\";\n wrappedExisting: boolean;\n error?: string;\n}\n\n/**\n * Check if running in a CI environment\n */\nexport function isCI(): boolean {\n return !!(\n process.env.CI ||\n process.env.GITHUB_ACTIONS ||\n process.env.GITLAB_CI ||\n process.env.CIRCLECI ||\n process.env.TRAVIS ||\n process.env.JENKINS_URL ||\n process.env.BUILDKITE ||\n process.env.TF_BUILD // Azure DevOps\n );\n}\n\n/**\n * Get the path to the .git/hooks directory\n */\nexport function getGitHooksDir(projectPath: string = process.cwd()): string {\n return join(projectPath, \".git\", \"hooks\");\n}\n\n/**\n * Check if a git repository exists\n */\nexport function hasGitRepo(projectPath: string = process.cwd()): boolean {\n return existsSync(join(projectPath, \".git\"));\n}\n\n/**\n * Generate the pre-commit hook script content\n */\nfunction generatePreCommitHook(config?: HooksConfig): string {\n const checks = config?.preCommit || [\"validate-branch\", \"check-guidelines\"];\n\n const checkCommands = checks\n .map((check: string) => {\n switch (check) {\n case \"validate-branch\":\n return \" workflow validate branch\";\n case \"validate-commit\":\n return \" workflow validate commit\";\n case \"check-guidelines\":\n return \" workflow doctor --check-guidelines-only 2>/dev/null || true\";\n case \"validate-scopes\":\n return \" workflow config validate\";\n default:\n return \"\";\n }\n })\n .filter(Boolean)\n .join(\"\\n\");\n\n return `#!/bin/sh\n# Workflow Agent pre-commit hook\n# Auto-generated - do not edit manually\n# To reinstall: workflow hooks install\n# To uninstall: workflow hooks uninstall\n\n# Skip in CI environment\nif [ -n \"\\${CI:-}\" ] || [ -n \"\\${GITHUB_ACTIONS:-}\" ] || [ -n \"\\${GITLAB_CI:-}\" ]; then\n exit 0\nfi\n\n# Run workflow checks\n${checkCommands}\n\n# Run original hook if it exists\nif [ -f \".git/hooks/pre-commit.original\" ]; then\n .git/hooks/pre-commit.original \"\\$@\"\nfi\n`;\n}\n\n/**\n * Generate the commit-msg hook script content\n */\nfunction generateCommitMsgHook(config?: HooksConfig): string {\n const checks = config?.commitMsg || [\"validate-commit\"];\n\n const checkCommands = checks\n .map((check: string) => {\n switch (check) {\n case \"validate-commit\":\n return ' workflow validate commit \"$(cat \"$1\")\"';\n default:\n return \"\";\n }\n })\n .filter(Boolean)\n .join(\"\\n\");\n\n return `#!/bin/sh\n# Workflow Agent commit-msg hook\n# Auto-generated - do not edit manually\n# To reinstall: workflow hooks install\n# To uninstall: workflow hooks uninstall\n\n# Skip in CI environment\nif [ -n \"\\${CI:-}\" ] || [ -n \"\\${GITHUB_ACTIONS:-}\" ] || [ -n \"\\${GITLAB_CI:-}\" ]; then\n exit 0\nfi\n\n# Run workflow checks\n${checkCommands}\n\n# Run original hook if it exists\nif [ -f \".git/hooks/commit-msg.original\" ]; then\n .git/hooks/commit-msg.original \"\\$@\"\nfi\n`;\n}\n\n/**\n * Check if a hook file is a workflow-managed hook\n */\nasync function isWorkflowHook(hookPath: string): Promise<boolean> {\n try {\n const content = await readFile(hookPath, \"utf-8\");\n return (\n content.includes(\"Workflow Agent\") && content.includes(\"Auto-generated\")\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Get the status of a specific hook\n */\nexport async function getHookStatus(\n hookType: \"pre-commit\" | \"commit-msg\",\n projectPath: string = process.cwd(),\n): Promise<HookStatus> {\n const hooksDir = getGitHooksDir(projectPath);\n const hookPath = join(hooksDir, hookType);\n const originalPath = join(hooksDir, `${hookType}.original`);\n\n const status: HookStatus = {\n installed: false,\n hookType,\n hasExistingHook: false,\n wrappedOriginal: false,\n };\n\n if (!existsSync(hookPath)) {\n return status;\n }\n\n status.hasExistingHook = true;\n\n if (await isWorkflowHook(hookPath)) {\n status.installed = true;\n status.wrappedOriginal = existsSync(originalPath);\n }\n\n return status;\n}\n\n/**\n * Get status of all hooks\n */\nexport async function getAllHooksStatus(\n projectPath: string = process.cwd(),\n): Promise<HookStatus[]> {\n return Promise.all([\n getHookStatus(\"pre-commit\", projectPath),\n getHookStatus(\"commit-msg\", projectPath),\n ]);\n}\n\n/**\n * Install a single hook, wrapping existing if present\n */\nasync function installSingleHook(\n hookType: \"pre-commit\" | \"commit-msg\",\n config?: HooksConfig,\n projectPath: string = process.cwd(),\n): Promise<InstallResult> {\n const hooksDir = getGitHooksDir(projectPath);\n const hookPath = join(hooksDir, hookType);\n const originalPath = join(hooksDir, `${hookType}.original`);\n\n const result: InstallResult = {\n success: false,\n hookType,\n wrappedExisting: false,\n };\n\n try {\n // Ensure hooks directory exists\n if (!existsSync(hooksDir)) {\n await mkdir(hooksDir, { recursive: true });\n }\n\n // Check for existing hook\n if (existsSync(hookPath)) {\n const isOurs = await isWorkflowHook(hookPath);\n\n if (!isOurs) {\n // Backup existing hook\n await rename(hookPath, originalPath);\n result.wrappedExisting = true;\n }\n }\n\n // Generate and write the hook\n const hookContent =\n hookType === \"pre-commit\"\n ? generatePreCommitHook(config)\n : generateCommitMsgHook(config);\n\n await writeFile(hookPath, hookContent, \"utf-8\");\n await chmod(hookPath, 0o755);\n\n result.success = true;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n}\n\n/**\n * Install all workflow hooks\n */\nexport async function installHooks(\n config?: HooksConfig,\n projectPath: string = process.cwd(),\n): Promise<InstallResult[]> {\n if (!hasGitRepo(projectPath)) {\n return [\n {\n success: false,\n hookType: \"pre-commit\",\n wrappedExisting: false,\n error: \"No git repository found. Run git init first.\",\n },\n ];\n }\n\n const results = await Promise.all([\n installSingleHook(\"pre-commit\", config, projectPath),\n installSingleHook(\"commit-msg\", config, projectPath),\n ]);\n\n return results;\n}\n\n/**\n * Uninstall a single hook, restoring original if it was wrapped\n */\nasync function uninstallSingleHook(\n hookType: \"pre-commit\" | \"commit-msg\",\n projectPath: string = process.cwd(),\n): Promise<InstallResult> {\n const hooksDir = getGitHooksDir(projectPath);\n const hookPath = join(hooksDir, hookType);\n const originalPath = join(hooksDir, `${hookType}.original`);\n\n const result: InstallResult = {\n success: false,\n hookType,\n wrappedExisting: false,\n };\n\n try {\n if (!existsSync(hookPath)) {\n result.success = true;\n return result;\n }\n\n const isOurs = await isWorkflowHook(hookPath);\n\n if (!isOurs) {\n result.error = \"Hook is not managed by Workflow Agent\";\n return result;\n }\n\n // Remove our hook\n await unlink(hookPath);\n\n // Restore original if it exists\n if (existsSync(originalPath)) {\n await rename(originalPath, hookPath);\n result.wrappedExisting = true;\n }\n\n result.success = true;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n}\n\n/**\n * Uninstall all workflow hooks\n */\nexport async function uninstallHooks(\n projectPath: string = process.cwd(),\n): Promise<InstallResult[]> {\n return Promise.all([\n uninstallSingleHook(\"pre-commit\", projectPath),\n uninstallSingleHook(\"commit-msg\", projectPath),\n ]);\n}\n","import { Command } from \"commander\";\nimport { setupCommand } from \"../setup.js\";\nimport { autoSetupCommand } from \"../auto-setup-command.js\";\n\n/**\n * Create the setup command group\n * Handles: setup, setup scripts, setup auto\n */\nexport function createSetupCommand(): Command {\n const setupCmd = new Command(\"setup\")\n .description(\"Setup and configuration commands\");\n\n // Default action - add workflow scripts\n setupCmd.action(setupCommand);\n\n // setup scripts - same as default\n setupCmd\n .command(\"scripts\")\n .description(\"Add workflow scripts to package.json\")\n .action(setupCommand);\n\n // setup auto - auto-configure linting, formatting, testing, and CI\n setupCmd\n .command(\"auto\")\n .description(\"Automatically configure linting, formatting, testing, and CI\")\n .option(\"-y, --yes\", \"Auto-approve all prompts\")\n .option(\"--audit\", \"Show audit report without applying changes\")\n .action(autoSetupCommand);\n\n return setupCmd;\n}\n\n// Export individual commands for direct access\nexport { setupCommand, autoSetupCommand };\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { readFileSync, writeFileSync, existsSync } from \"fs\";\nimport { join, dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport {\n WORKFLOW_SCRIPTS,\n DEPRECATED_SCRIPTS,\n WORKFLOW_SCRIPTS_VERSION,\n validateAllScripts,\n} from \"../../scripts/workflow-scripts.js\";\nimport { generateCopilotInstructions } from \"../../scripts/copilot-instructions-generator.js\";\nimport {\n installMandatoryTemplates,\n findTemplatesDirectory,\n} from \"../../scripts/template-installer.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nexport async function setupCommand(): Promise<void> {\n p.intro(chalk.bgBlue(\" workflow-agent setup \"));\n\n const cwd = process.cwd();\n const packageJsonPath = join(cwd, \"package.json\");\n\n if (!existsSync(packageJsonPath)) {\n p.cancel(\"No package.json found in current directory\");\n process.exit(1);\n }\n\n // Read package.json\n const packageJsonContent = readFileSync(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(packageJsonContent);\n\n // Initialize scripts if needed\n if (!packageJson.scripts) {\n packageJson.scripts = {};\n }\n\n // Track changes\n let scriptAdded = false;\n let scriptUpdated = false;\n const removedScripts: string[] = [];\n\n // Step 1: Remove deprecated scripts\n for (const deprecatedScript of DEPRECATED_SCRIPTS) {\n if (packageJson.scripts[deprecatedScript] !== undefined) {\n delete packageJson.scripts[deprecatedScript];\n removedScripts.push(deprecatedScript);\n }\n }\n\n // Also remove any remaining workflow:* or workflow-* scripts\n const oldScripts = validateAllScripts(packageJson.scripts);\n for (const oldScript of oldScripts) {\n if (packageJson.scripts[oldScript] !== undefined) {\n delete packageJson.scripts[oldScript];\n if (!removedScripts.includes(oldScript)) {\n removedScripts.push(oldScript);\n }\n }\n }\n\n // Step 2: Add the workflow script\n const scriptName = \"workflow\";\n const scriptCommand = WORKFLOW_SCRIPTS.workflow;\n\n if (!packageJson.scripts[scriptName]) {\n packageJson.scripts[scriptName] = scriptCommand;\n scriptAdded = true;\n } else if (packageJson.scripts[scriptName] !== scriptCommand) {\n packageJson.scripts[scriptName] = scriptCommand;\n scriptUpdated = true;\n }\n\n const hasChanges = scriptAdded || scriptUpdated || removedScripts.length > 0;\n\n if (!hasChanges) {\n p.outro(\n chalk.green(`✓ Workflow script is already configured!`)\n );\n return;\n }\n\n // Write back to package.json\n writeFileSync(\n packageJsonPath,\n JSON.stringify(packageJson, null, 2) + \"\\n\",\n \"utf-8\"\n );\n\n console.log(\n chalk.green(`\\n✓ Workflow Agent v${WORKFLOW_SCRIPTS_VERSION} configured`)\n );\n\n if (scriptAdded) {\n console.log(chalk.green(`\\n Added \"workflow\" script to package.json`));\n } else if (scriptUpdated) {\n console.log(chalk.green(`\\n Updated \"workflow\" script in package.json`));\n }\n\n // Log removed deprecated scripts\n if (removedScripts.length > 0) {\n console.log(\n chalk.yellow(`\\n ⚠️ Removed ${removedScripts.length} deprecated scripts`)\n );\n console.log(\n chalk.dim(\n ` (Old workflow:* scripts replaced by single \"workflow\" command)`\n )\n );\n }\n\n console.log(chalk.cyan(`\\n Usage:`));\n console.log(chalk.dim(` npm run workflow -- init`));\n console.log(chalk.dim(` npm run workflow -- solution list`));\n console.log(chalk.dim(` npm run workflow -- --help`));\n console.log(chalk.cyan(`\\n Or with pnpm:`));\n console.log(chalk.dim(` pnpm workflow init`));\n console.log(chalk.dim(` pnpm workflow solution list`));\n console.log(chalk.dim(` pnpm workflow --help`));\n\n p.outro(chalk.green(`✓ Workflow script ready!`));\n\n // Install mandatory templates if guidelines directory doesn't exist\n const guidelinesDir = join(cwd, \"guidelines\");\n if (!existsSync(guidelinesDir)) {\n const templatesDir = findTemplatesDirectory(__dirname);\n if (templatesDir) {\n const templateResult = installMandatoryTemplates(cwd, templatesDir, {\n silent: false,\n skipIfExists: true,\n mandatoryOnly: true,\n });\n if (templateResult.installed.length > 0) {\n console.log(\n chalk.green(\n `\\n✓ Installed ${templateResult.installed.length} mandatory guideline templates`\n )\n );\n }\n }\n }\n\n // Generate .github/copilot-instructions.md if guidelines exist\n if (existsSync(guidelinesDir)) {\n const result = generateCopilotInstructions(cwd, { silent: false });\n if (result.success) {\n const status = result.isNew ? \"Generated\" : \"Updated\";\n console.log(\n chalk.green(\n `✓ ${status} .github/copilot-instructions.md from ${result.guidelinesCount} guidelines`\n )\n );\n if (result.preservedCustomContent) {\n console.log(chalk.dim(\" (Custom content preserved)\"));\n }\n }\n }\n}\n","/**\n * Auto-Setup Command\n *\n * Analyzes the project, shows an audit report of what will change,\n * and applies all setup configurations with batched dependency installation.\n *\n * Usage:\n * workflow-agent auto-setup # Interactive mode\n * workflow-agent auto-setup --yes # Auto-approve all\n * workflow-agent auto-setup --audit # Show report only (dry run)\n */\n\nimport * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport {\n generateAuditReport,\n runAllSetups,\n type AuditReport,\n} from \"../../utils/auto-setup.js\";\n\nexport interface AutoSetupOptions {\n yes?: boolean;\n audit?: boolean;\n}\n\nexport async function autoSetupCommand(options: AutoSetupOptions) {\n console.log(chalk.bold.cyan(\"\\n🔧 Workflow Agent Auto-Setup\\n\"));\n\n const cwd = process.cwd();\n\n // Generate audit report\n const spinner = p.spinner();\n spinner.start(\"Analyzing project...\");\n\n let report: AuditReport;\n try {\n report = await generateAuditReport(cwd);\n spinner.stop(\"✓ Project analysis complete\");\n } catch (error) {\n spinner.stop(\"✗ Failed to analyze project\");\n console.error(\n chalk.red(\n `Error: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n process.exit(1);\n }\n\n // Display audit report\n console.log(\"\\n\" + formatAuditReportColored(report));\n\n // Exit early if audit mode\n if (options.audit) {\n console.log(chalk.dim(\"\\n--audit mode: No changes applied.\\n\"));\n return;\n }\n\n // Check if there are any changes to make\n if (report.totalChanges === 0 && report.allDevDependencies.length === 0) {\n p.outro(chalk.green(\"✓ Project is already fully configured!\"));\n return;\n }\n\n // Confirm unless --yes\n if (!options.yes) {\n const shouldProceed = await p.confirm({\n message: `Apply ${report.totalChanges} changes and install ${report.allDevDependencies.length} packages?`,\n initialValue: true,\n });\n\n if (p.isCancel(shouldProceed) || !shouldProceed) {\n p.cancel(\"Setup cancelled\");\n process.exit(0);\n }\n } else {\n console.log(chalk.dim(\"\\n--yes mode: Auto-approving all changes.\\n\"));\n }\n\n // Run all setups\n console.log(\"\");\n const setupSpinner = p.spinner();\n const stepMessages: string[] = [];\n\n const results = await runAllSetups(cwd, (step, status) => {\n if (status === \"start\") {\n setupSpinner.start(step);\n } else if (status === \"done\") {\n setupSpinner.stop(`✓ ${step}`);\n stepMessages.push(`✓ ${step}`);\n } else {\n setupSpinner.stop(`✗ ${step}`);\n stepMessages.push(`✗ ${step}`);\n }\n });\n\n // Summary\n const successCount = results.filter((r) => r.success).length;\n const failCount = results.filter((r) => !r.success).length;\n\n console.log(\"\");\n\n if (failCount === 0) {\n p.outro(\n chalk.green(\n `✓ Auto-setup complete! (${successCount} configurations applied)`,\n ),\n );\n } else {\n p.outro(\n chalk.yellow(\n `⚠ Setup completed with issues: ${successCount} succeeded, ${failCount} failed`,\n ),\n );\n }\n\n // Show next steps\n console.log(chalk.dim(\"\\nNext steps:\"));\n console.log(chalk.dim(\" 1. Review the generated configuration files\"));\n console.log(chalk.dim(\" 2. Run: pnpm verify (or npm/yarn)\"));\n console.log(chalk.dim(\" 3. Commit your changes\\n\"));\n}\n\n/**\n * Format audit report with colors for console display\n */\nfunction formatAuditReportColored(report: AuditReport): string {\n const lines: string[] = [];\n\n lines.push(chalk.bold(\"📋 Audit Report\\n\"));\n\n // Project info\n lines.push(chalk.dim(`Framework: ${report.analysis.framework}`));\n lines.push(chalk.dim(`Package Manager: ${report.analysis.packageManager}`));\n lines.push(\n chalk.dim(`TypeScript: ${report.analysis.isTypeScript ? \"Yes\" : \"No\"}`),\n );\n lines.push(\n chalk.dim(`Monorepo: ${report.analysis.isMonorepo ? \"Yes\" : \"No\"}`),\n );\n lines.push(\"\");\n\n // Plans\n for (const plan of report.plans) {\n const hasChanges = plan.changes.some((c) => c.type !== \"unchanged\");\n const icon = hasChanges ? \"🔧\" : \"✓\";\n const titleColor = hasChanges ? chalk.yellow : chalk.green;\n\n lines.push(\n titleColor(\n `${icon} ${plan.name.charAt(0).toUpperCase() + plan.name.slice(1)} - ${plan.description}`,\n ),\n );\n\n for (const change of plan.changes) {\n let symbol: string;\n let line: string;\n\n switch (change.type) {\n case \"add\":\n symbol = chalk.green(\"+\");\n line = chalk.green(change.description);\n break;\n case \"modify\":\n symbol = chalk.yellow(\"~\");\n line = chalk.yellow(change.description);\n if (\n change.key &&\n change.oldValue !== undefined &&\n change.newValue !== undefined\n ) {\n line += chalk.dim(\n ` (${String(change.oldValue)} → ${String(change.newValue)})`,\n );\n }\n break;\n case \"unchanged\":\n default:\n symbol = chalk.dim(\"=\");\n line = chalk.dim(change.description);\n }\n\n lines.push(` ${symbol} ${line}`);\n }\n\n if (plan.devDependencies.length > 0) {\n lines.push(\n chalk.blue(` 📦 Install: ${plan.devDependencies.join(\", \")}`),\n );\n }\n\n lines.push(\"\");\n }\n\n // Summary\n if (report.allDevDependencies.length > 0) {\n lines.push(chalk.bold(\"Dependencies to install (batched):\"));\n const pm = report.analysis.packageManager;\n const cmd =\n pm === \"npm\" ? \"npm install\" : pm === \"yarn\" ? \"yarn add\" : `${pm} add`;\n lines.push(\n chalk.cyan(` ${cmd} -D ${report.allDevDependencies.join(\" \")}`),\n );\n lines.push(\"\");\n }\n\n lines.push(\n chalk.bold(\n `Total: ${report.totalChanges} changes, ${report.allDevDependencies.length} packages`,\n ),\n );\n\n return lines.join(\"\\n\");\n}\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"fs\";\nimport { writeFile, mkdir, readFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport { validateScopeDefinitions, type Scope } from \"../../config/schema.js\";\n\ninterface ScopeCreateOptions {\n name?: string;\n scopes?: string;\n presetName?: string;\n outputDir?: string;\n noTest?: boolean;\n}\n\nexport async function scopeCreateCommand(options: ScopeCreateOptions) {\n console.log(chalk.bold.cyan(\"\\n🎨 Create Custom Scope Package\\n\"));\n\n const cwd = process.cwd();\n const isNonInteractive = !!(\n options.name &&\n options.scopes &&\n options.presetName\n );\n\n // Check for monorepo\n const isMonorepo = existsSync(join(cwd, \"pnpm-workspace.yaml\"));\n if (isMonorepo) {\n console.log(chalk.dim(\"✓ Detected monorepo workspace\\n\"));\n }\n\n // Get package name\n const packageNameInput = isNonInteractive\n ? options.name\n : await p.text({\n message:\n 'What is the package name? (e.g., \"fintech\", \"gaming\", \"healthcare\")',\n placeholder: \"my-custom-scope\",\n validate: (value) => {\n if (!value || value.length === 0) return \"Package name is required\";\n if (!/^[a-z0-9-]+$/.test(value))\n return \"Package name must be lowercase alphanumeric with hyphens\";\n if (value.length > 32)\n return \"Package name must be 32 characters or less\";\n return undefined;\n },\n });\n\n if (!isNonInteractive && p.isCancel(packageNameInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n const packageName = packageNameInput as string;\n\n // Get preset display name\n const presetNameInput = isNonInteractive\n ? options.presetName\n : await p.text({\n message:\n 'What is the preset display name? (e.g., \"FinTech Application\", \"Gaming Platform\")',\n placeholder: \"My Custom Preset\",\n validate: (value) => {\n if (!value || value.length === 0) return \"Preset name is required\";\n return undefined;\n },\n });\n\n if (!isNonInteractive && p.isCancel(presetNameInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n const presetName = presetNameInput as string;\n\n // Collect scopes\n const scopes: Scope[] = [];\n\n if (isNonInteractive && options.scopes) {\n // Parse scopes from command line (format: \"name:description:emoji:category,...\")\n const scopeParts = options.scopes.split(\",\");\n for (const part of scopeParts) {\n const [name, description, emoji, category] = part.split(\":\");\n scopes.push({\n name: name.trim(),\n description: description?.trim() || \"Scope description\",\n emoji: emoji?.trim(),\n category: category?.trim() as any,\n });\n }\n } else {\n console.log(\n chalk.dim(\"\\nAdd scopes to your preset (aim for 8-15 scopes):\\n\"),\n );\n\n let addMore = true;\n while (addMore) {\n const scopeName = await p.text({\n message: `Scope #${scopes.length + 1} - Name:`,\n placeholder: \"auth\",\n validate: (value) => {\n if (!value || value.length === 0) return \"Scope name is required\";\n if (!/^[a-z0-9-]+$/.test(value))\n return \"Must be lowercase alphanumeric with hyphens\";\n if (value.length > 32) return \"Must be 32 characters or less\";\n if (scopes.some((s) => s.name === value))\n return \"Scope name already exists\";\n return undefined;\n },\n });\n\n if (p.isCancel(scopeName)) {\n break;\n }\n\n const scopeDescription = await p.text({\n message: \"Description:\",\n placeholder: \"Authentication and authorization\",\n validate: (value) => {\n if (!value || value.length < 10)\n return \"Description must be at least 10 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(scopeDescription)) {\n break;\n }\n\n const scopeEmoji = await p.text({\n message: \"Emoji (optional):\",\n placeholder: \"🔐\",\n });\n\n if (p.isCancel(scopeEmoji)) {\n break;\n }\n\n const scopeCategory = await p.select({\n message: \"Category (optional):\",\n options: [\n { value: \"auth\", label: \"Authentication & Authorization\" },\n { value: \"features\", label: \"Features & Functionality\" },\n { value: \"infrastructure\", label: \"Infrastructure & DevOps\" },\n { value: \"documentation\", label: \"Documentation\" },\n { value: \"testing\", label: \"Testing & QA\" },\n { value: \"performance\", label: \"Performance & Optimization\" },\n { value: \"other\", label: \"Other\" },\n { value: \"\", label: \"None\" },\n ],\n });\n\n if (p.isCancel(scopeCategory)) {\n break;\n }\n\n scopes.push({\n name: scopeName as string,\n description: scopeDescription as string,\n emoji: scopeEmoji ? (scopeEmoji as string) : undefined,\n category: scopeCategory ? (scopeCategory as any) : undefined,\n });\n\n console.log(chalk.green(`\\n✓ Added scope: ${scopeName}\\n`));\n\n if (scopes.length >= 3) {\n addMore = (await p.confirm({\n message: `You have ${scopes.length} scopes. Add another?`,\n initialValue: scopes.length < 10,\n })) as boolean;\n\n if (p.isCancel(addMore)) {\n break;\n }\n\n if (!addMore) break;\n }\n }\n }\n\n if (scopes.length === 0) {\n p.cancel(\"No scopes defined. Operation cancelled.\");\n process.exit(1);\n }\n\n // Validate scopes\n const validation = validateScopeDefinitions(scopes);\n if (!validation.valid) {\n console.log(chalk.red(\"\\n✗ Scope validation failed:\\n\"));\n validation.errors.forEach((error) =>\n console.log(chalk.red(` • ${error}`)),\n );\n p.cancel(\"Operation cancelled\");\n process.exit(1);\n }\n\n console.log(\n chalk.green(`\\n✓ ${scopes.length} scopes validated successfully\\n`),\n );\n\n // Determine output directory\n let outputDir: string;\n if (options.outputDir) {\n outputDir = options.outputDir;\n } else if (isMonorepo) {\n outputDir = join(cwd, \"packages\", `scopes-${packageName}`);\n } else {\n const customDir = await p.text({\n message: \"Output directory:\",\n placeholder: `./scopes-${packageName}`,\n defaultValue: `./scopes-${packageName}`,\n });\n\n if (p.isCancel(customDir)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n outputDir = join(cwd, customDir as string);\n }\n\n // Check if directory exists\n if (existsSync(outputDir)) {\n const shouldOverwrite = await p.confirm({\n message: `Directory ${outputDir} already exists. Overwrite?`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n // Create package files\n const spinner = p.spinner();\n spinner.start(\"Creating package structure...\");\n\n try {\n // Create directories\n await mkdir(join(outputDir, \"src\"), { recursive: true });\n\n // Create package.json\n const packageJson = {\n name: `@workflow/scopes-${packageName}`,\n version: \"1.0.0\",\n description: `Scope preset for ${presetName}`,\n keywords: [\"workflow\", \"scopes\", packageName, \"preset\"],\n repository: {\n type: \"git\",\n url: \"git+https://github.com/your-org/your-repo.git\",\n directory: `packages/scopes-${packageName}`,\n },\n license: \"MIT\",\n author: \"Your Name\",\n type: \"module\",\n exports: {\n \".\": {\n types: \"./dist/index.d.ts\",\n import: \"./dist/index.js\",\n },\n },\n files: [\"dist\"],\n scripts: {\n build: \"tsup\",\n dev: \"tsup --watch\",\n typecheck: \"tsc --noEmit\",\n test: \"vitest run\",\n },\n peerDependencies: {\n \"@hawkinside_out/workflow-agent\": \"^1.0.0\",\n },\n devDependencies: {\n \"@hawkinside_out/workflow-agent\": \"^1.0.0\",\n tsup: \"^8.0.1\",\n typescript: \"^5.3.3\",\n vitest: \"^1.0.0\",\n },\n publishConfig: {\n access: \"public\",\n },\n };\n\n await writeFile(\n join(outputDir, \"package.json\"),\n JSON.stringify(packageJson, null, 2),\n \"utf-8\",\n );\n\n // Create tsconfig.json\n const tsconfig = {\n extends: \"../../tsconfig.json\",\n compilerOptions: {\n outDir: \"./dist\",\n rootDir: \"./src\",\n },\n include: [\"src/**/*\"],\n };\n\n await writeFile(\n join(outputDir, \"tsconfig.json\"),\n JSON.stringify(tsconfig, null, 2),\n \"utf-8\",\n );\n\n // Create tsup.config.ts\n const tsupConfig = `import { defineConfig } from 'tsup';\n\nexport default defineConfig({\n entry: ['src/index.ts'],\n format: ['esm'],\n dts: true,\n clean: true,\n sourcemap: true,\n});\n`;\n\n await writeFile(join(outputDir, \"tsup.config.ts\"), tsupConfig, \"utf-8\");\n\n // Create src/index.ts\n const indexTs = `import type { Scope } from '@hawkinside_out/workflow-agent/config';\n\nexport const scopes: Scope[] = ${JSON.stringify(scopes, null, 2)};\n\nexport const preset = {\n name: '${presetName}',\n description: 'Scope configuration for ${presetName}',\n scopes,\n version: '1.0.0',\n};\n\nexport default preset;\n`;\n\n await writeFile(join(outputDir, \"src\", \"index.ts\"), indexTs, \"utf-8\");\n\n // Create test file if not disabled\n if (!options.noTest) {\n const testFile = `import { describe, it, expect } from 'vitest';\nimport { scopes, preset } from './index.js';\nimport { ScopeSchema } from '@hawkinside_out/workflow-agent/config';\n\ndescribe('${presetName} Scope Preset', () => {\n it('should export valid scopes array', () => {\n expect(scopes).toBeDefined();\n expect(Array.isArray(scopes)).toBe(true);\n expect(scopes.length).toBeGreaterThan(0);\n });\n\n it('should have valid preset object', () => {\n expect(preset).toBeDefined();\n expect(preset.name).toBe('${presetName}');\n expect(preset.scopes).toBe(scopes);\n expect(preset.version).toBeDefined();\n });\n\n it('should have no duplicate scope names', () => {\n const names = scopes.map(s => s.name);\n const uniqueNames = new Set(names);\n expect(uniqueNames.size).toBe(names.length);\n });\n\n it('should have all scopes match schema', () => {\n scopes.forEach(scope => {\n const result = ScopeSchema.safeParse(scope);\n expect(result.success).toBe(true);\n });\n });\n\n it('should have descriptions for all scopes', () => {\n scopes.forEach(scope => {\n expect(scope.description).toBeDefined();\n expect(scope.description.length).toBeGreaterThan(0);\n });\n });\n});\n`;\n\n await writeFile(\n join(outputDir, \"src\", \"index.test.ts\"),\n testFile,\n \"utf-8\",\n );\n }\n\n spinner.stop(\"✓ Package structure created\");\n\n // Update pnpm-workspace.yaml if monorepo\n if (isMonorepo) {\n const workspaceFile = join(cwd, \"pnpm-workspace.yaml\");\n const workspaceContent = await readFile(workspaceFile, \"utf-8\");\n\n const packagePath = `packages/scopes-${packageName}`;\n if (\n !workspaceContent.includes(packagePath) &&\n !workspaceContent.includes(\"packages/*\")\n ) {\n console.log(\n chalk.yellow(\"\\n⚠️ Add the following to pnpm-workspace.yaml:\"),\n );\n console.log(chalk.dim(` - '${packagePath}'`));\n } else {\n console.log(chalk.green(\"\\n✓ Package will be included in workspace\"));\n }\n }\n\n // Success summary\n console.log(\n chalk.green.bold(\"\\n✨ Custom scope package created successfully!\\n\"),\n );\n console.log(chalk.bold(\"Package details:\"));\n console.log(chalk.dim(` Location: ${outputDir}`));\n console.log(chalk.dim(` Package: @workflow/scopes-${packageName}`));\n console.log(chalk.dim(` Scopes: ${scopes.length} defined\\n`));\n\n console.log(chalk.bold(\"Next steps:\\n\"));\n console.log(chalk.dim(` 1. cd ${outputDir}`));\n console.log(chalk.dim(` 2. pnpm install`));\n console.log(chalk.dim(` 3. pnpm build`));\n if (!options.noTest) {\n console.log(chalk.dim(` 4. pnpm test`));\n }\n console.log(\n chalk.dim(\n ` ${!options.noTest ? \"5\" : \"4\"}. Update repository URL in package.json`,\n ),\n );\n\n const shouldPublish = isNonInteractive\n ? false\n : await p.confirm({\n message: \"\\nWould you like instructions for publishing to npm?\",\n initialValue: false,\n });\n\n if (shouldPublish && !p.isCancel(shouldPublish)) {\n console.log(chalk.bold(\"\\n📦 Publishing instructions:\\n\"));\n console.log(\n chalk.dim(\" 1. npm login (or configure .npmrc with your registry)\"),\n );\n console.log(chalk.dim(\" 2. Update version in package.json as needed\"));\n console.log(chalk.dim(\" 3. pnpm publish --access public\"));\n console.log(\n chalk.dim(\n \" 4. Use in other projects: pnpm add @workflow/scopes-\" +\n packageName +\n \"\\n\",\n ),\n );\n }\n } catch (error) {\n spinner.stop(\"✗ Failed to create package\");\n console.error(chalk.red(\"\\nError:\"), error);\n process.exit(1);\n }\n}\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"fs\";\nimport { writeFile, mkdir, readFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport { loadConfig, hasConfig } from \"../../config/index.js\";\nimport {\n validateScopeDefinitions,\n type WorkflowConfig,\n} from \"../../config/schema.js\";\n\ninterface ScopeMigrateOptions {\n name?: string;\n outputDir?: string;\n keepConfig?: boolean;\n}\n\nexport async function scopeMigrateCommand(options: ScopeMigrateOptions) {\n console.log(chalk.bold.cyan(\"\\n🔄 Migrate Scopes to Custom Package\\n\"));\n\n const cwd = process.cwd();\n\n // Check for existing config\n if (!hasConfig(cwd)) {\n p.cancel(\"No workflow.config.json found in current directory\");\n process.exit(1);\n }\n\n // Load current config\n let config: WorkflowConfig | null = null;\n try {\n config = await loadConfig(cwd);\n } catch (error) {\n console.error(chalk.red(\"Failed to load config:\"), error);\n process.exit(1);\n }\n\n if (!config) {\n p.cancel(\"Failed to load configuration\");\n process.exit(1);\n }\n\n if (!config.scopes || config.scopes.length === 0) {\n p.cancel(\"No scopes found in workflow.config.json\");\n process.exit(1);\n }\n\n console.log(\n chalk.dim(`Found ${config.scopes.length} scopes in workflow.config.json\\n`),\n );\n\n // Display current scopes\n console.log(chalk.bold(\"Current scopes:\"));\n config.scopes.forEach((scope, i) => {\n console.log(\n chalk.dim(\n ` ${i + 1}. ${scope.emoji || \"•\"} ${scope.name} - ${scope.description}`,\n ),\n );\n });\n console.log();\n\n const shouldContinue = await p.confirm({\n message: \"Migrate these scopes to a custom package?\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Migration cancelled\");\n process.exit(0);\n }\n\n // Check for monorepo\n const isMonorepo = existsSync(join(cwd, \"pnpm-workspace.yaml\"));\n if (isMonorepo) {\n console.log(chalk.dim(\"\\n✓ Detected monorepo workspace\\n\"));\n }\n\n // Get package name\n const packageNameInput =\n options.name ||\n (await p.text({\n message: \"Package name for the scope preset:\",\n placeholder: config.projectName.toLowerCase().replace(/[^a-z0-9-]/g, \"-\"),\n validate: (value) => {\n if (!value || value.length === 0) return \"Package name is required\";\n if (!/^[a-z0-9-]+$/.test(value))\n return \"Package name must be lowercase alphanumeric with hyphens\";\n if (value.length > 32)\n return \"Package name must be 32 characters or less\";\n return undefined;\n },\n }));\n\n if (p.isCancel(packageNameInput)) {\n p.cancel(\"Migration cancelled\");\n process.exit(0);\n }\n\n const packageName = packageNameInput as string;\n\n // Get preset display name\n const presetNameInput = await p.text({\n message: \"Preset display name:\",\n placeholder: config.projectName,\n defaultValue: config.projectName,\n });\n\n if (p.isCancel(presetNameInput)) {\n p.cancel(\"Migration cancelled\");\n process.exit(0);\n }\n\n const presetName = presetNameInput as string;\n\n // Validate scopes\n const validation = validateScopeDefinitions(config.scopes);\n if (!validation.valid) {\n console.log(chalk.yellow(\"\\n⚠️ Scope validation warnings:\\n\"));\n validation.errors.forEach((error) =>\n console.log(chalk.yellow(` • ${error}`)),\n );\n\n const shouldFix = await p.confirm({\n message: \"Some scopes have validation issues. Continue anyway?\",\n initialValue: false,\n });\n\n if (p.isCancel(shouldFix) || !shouldFix) {\n p.cancel(\"Migration cancelled. Please fix validation errors first.\");\n process.exit(1);\n }\n }\n\n // Determine output directory\n let outputDir: string;\n if (options.outputDir) {\n outputDir = options.outputDir;\n } else if (isMonorepo) {\n outputDir = join(cwd, \"packages\", `scopes-${packageName}`);\n } else {\n const customDir = await p.text({\n message: \"Output directory:\",\n placeholder: `./scopes-${packageName}`,\n defaultValue: `./scopes-${packageName}`,\n });\n\n if (p.isCancel(customDir)) {\n p.cancel(\"Migration cancelled\");\n process.exit(0);\n }\n\n outputDir = join(cwd, customDir as string);\n }\n\n // Check if directory exists\n if (existsSync(outputDir)) {\n const shouldOverwrite = await p.confirm({\n message: `Directory ${outputDir} already exists. Overwrite?`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n p.cancel(\"Migration cancelled\");\n process.exit(0);\n }\n }\n\n // Create package files\n const spinner = p.spinner();\n spinner.start(\"Migrating scopes to package...\");\n\n try {\n // Create directories\n await mkdir(join(outputDir, \"src\"), { recursive: true });\n\n // Create package.json\n const packageJson = {\n name: `@workflow/scopes-${packageName}`,\n version: \"1.0.0\",\n description: `Migrated scope preset for ${presetName}`,\n keywords: [\"workflow\", \"scopes\", packageName, \"preset\", \"migrated\"],\n repository: {\n type: \"git\",\n url: \"git+https://github.com/your-org/your-repo.git\",\n directory: `packages/scopes-${packageName}`,\n },\n license: \"MIT\",\n author: \"Your Name\",\n type: \"module\",\n exports: {\n \".\": {\n types: \"./dist/index.d.ts\",\n import: \"./dist/index.js\",\n },\n },\n files: [\"dist\"],\n scripts: {\n build: \"tsup\",\n dev: \"tsup --watch\",\n typecheck: \"tsc --noEmit\",\n test: \"vitest run\",\n },\n peerDependencies: {\n \"@hawkinside_out/workflow-agent\": \"^1.0.0\",\n },\n devDependencies: {\n \"@hawkinside_out/workflow-agent\": \"^1.0.0\",\n tsup: \"^8.0.1\",\n typescript: \"^5.3.3\",\n vitest: \"^1.0.0\",\n },\n publishConfig: {\n access: \"public\",\n },\n };\n\n await writeFile(\n join(outputDir, \"package.json\"),\n JSON.stringify(packageJson, null, 2),\n \"utf-8\",\n );\n\n // Create tsconfig.json\n const tsconfig = {\n extends: \"../../tsconfig.json\",\n compilerOptions: {\n outDir: \"./dist\",\n rootDir: \"./src\",\n },\n include: [\"src/**/*\"],\n };\n\n await writeFile(\n join(outputDir, \"tsconfig.json\"),\n JSON.stringify(tsconfig, null, 2),\n \"utf-8\",\n );\n\n // Create tsup.config.ts\n const tsupConfig = `import { defineConfig } from 'tsup';\n\nexport default defineConfig({\n entry: ['src/index.ts'],\n format: ['esm'],\n dts: true,\n clean: true,\n sourcemap: true,\n});\n`;\n\n await writeFile(join(outputDir, \"tsup.config.ts\"), tsupConfig, \"utf-8\");\n\n // Create src/index.ts with migrated scopes\n const indexTs = `import type { Scope } from '@hawkinside_out/workflow-agent/config';\n\nexport const scopes: Scope[] = ${JSON.stringify(config.scopes, null, 2)};\n\nexport const preset = {\n name: '${presetName}',\n description: 'Migrated scope configuration for ${presetName}',\n scopes,\n version: '1.0.0',\n};\n\nexport default preset;\n`;\n\n await writeFile(join(outputDir, \"src\", \"index.ts\"), indexTs, \"utf-8\");\n\n // Create test file\n const testFile = `import { describe, it, expect } from 'vitest';\nimport { scopes, preset } from './index.js';\nimport { ScopeSchema } from '@hawkinside_out/workflow-agent/config';\n\ndescribe('${presetName} Scope Preset (Migrated)', () => {\n it('should export valid scopes array', () => {\n expect(scopes).toBeDefined();\n expect(Array.isArray(scopes)).toBe(true);\n expect(scopes.length).toBe(${config.scopes.length});\n });\n\n it('should have valid preset object', () => {\n expect(preset).toBeDefined();\n expect(preset.name).toBe('${presetName}');\n expect(preset.scopes).toBe(scopes);\n expect(preset.version).toBeDefined();\n });\n\n it('should have no duplicate scope names', () => {\n const names = scopes.map(s => s.name);\n const uniqueNames = new Set(names);\n expect(uniqueNames.size).toBe(names.length);\n });\n\n it('should have all scopes match schema', () => {\n scopes.forEach(scope => {\n const result = ScopeSchema.safeParse(scope);\n if (!result.success) {\n console.error(\\`Scope \"\\${scope.name}\" failed validation:\\`, result.error);\n }\n expect(result.success).toBe(true);\n });\n });\n\n it('should have descriptions for all scopes', () => {\n scopes.forEach(scope => {\n expect(scope.description).toBeDefined();\n expect(scope.description.length).toBeGreaterThan(0);\n });\n });\n});\n`;\n\n await writeFile(join(outputDir, \"src\", \"index.test.ts\"), testFile, \"utf-8\");\n\n spinner.stop(\"✓ Package created from migrated scopes\");\n\n // Update pnpm-workspace.yaml if monorepo\n if (isMonorepo) {\n const workspaceFile = join(cwd, \"pnpm-workspace.yaml\");\n const workspaceContent = await readFile(workspaceFile, \"utf-8\");\n\n const packagePath = `packages/scopes-${packageName}`;\n if (\n !workspaceContent.includes(packagePath) &&\n !workspaceContent.includes(\"packages/*\")\n ) {\n console.log(\n chalk.yellow(\"\\n⚠️ Add the following to pnpm-workspace.yaml:\"),\n );\n console.log(chalk.dim(` - '${packagePath}'`));\n } else {\n console.log(chalk.green(\"\\n✓ Package will be included in workspace\"));\n }\n }\n\n // Ask about updating config\n const keepConfig =\n options.keepConfig ??\n (await p.confirm({\n message: \"Remove migrated scopes from workflow.config.json?\",\n initialValue: false,\n }));\n\n if (!p.isCancel(keepConfig) && !keepConfig) {\n const configPath = join(cwd, \"workflow.config.json\");\n const updatedConfig = {\n ...config,\n scopes: [], // Clear inline scopes\n preset: `scopes-${packageName}`, // Reference the new package\n };\n\n await writeFile(\n configPath,\n JSON.stringify(updatedConfig, null, 2),\n \"utf-8\",\n );\n console.log(chalk.green(\"✓ Updated workflow.config.json\"));\n console.log(chalk.dim(\" • Cleared inline scopes\"));\n console.log(\n chalk.dim(` • Added preset reference: scopes-${packageName}\\n`),\n );\n }\n\n // Success summary\n console.log(chalk.green.bold(\"\\n✨ Migration completed successfully!\\n\"));\n console.log(chalk.bold(\"Package details:\"));\n console.log(chalk.dim(` Location: ${outputDir}`));\n console.log(chalk.dim(` Package: @workflow/scopes-${packageName}`));\n console.log(chalk.dim(` Scopes: ${config.scopes.length} migrated\\n`));\n\n console.log(chalk.bold(\"Next steps:\\n\"));\n console.log(chalk.dim(` 1. cd ${outputDir}`));\n console.log(chalk.dim(` 2. pnpm install`));\n console.log(chalk.dim(` 3. pnpm build`));\n console.log(chalk.dim(` 4. pnpm test`));\n console.log(chalk.dim(` 5. Update repository URL in package.json\\n`));\n\n if (!keepConfig) {\n console.log(chalk.bold(\"To use the migrated scopes:\\n\"));\n console.log(\n chalk.dim(\n ` 1. Install the package: pnpm add -w @workflow/scopes-${packageName}`,\n ),\n );\n console.log(\n chalk.dim(\n ` 2. The preset is already referenced in workflow.config.json\\n`,\n ),\n );\n }\n\n console.log(\n chalk.dim(\n \"💡 Tip: You can now reuse this scope package across multiple projects!\\n\",\n ),\n );\n } catch (error) {\n spinner.stop(\"✗ Migration failed\");\n console.error(chalk.red(\"\\nError:\"), error);\n process.exit(1);\n }\n}\n","/**\n * Pre-commit CLI command\n *\n * Alias for `verify --fix --staged` - designed for git pre-commit hooks.\n * Runs all quality checks with auto-fix on staged files only.\n */\n\nimport chalk from \"chalk\";\nimport { verifyCommand } from \"./verify.js\";\n\ninterface PreCommitOptions {\n stagedOnly?: boolean;\n dryRun?: boolean;\n maxRetries?: string;\n}\n\n/**\n * Pre-commit command - streamlined quality check for git hooks\n *\n * This is a convenience wrapper around verify that:\n * - Enables auto-fix by default\n * - Focuses on staged changes\n * - Optimized for speed in pre-commit context\n */\nexport async function preCommitCommand(options: PreCommitOptions): Promise<void> {\n const stagedOnly = options.stagedOnly ?? true;\n const dryRun = options.dryRun ?? false;\n const maxRetries = options.maxRetries ?? \"5\"; // Lower default for pre-commit speed\n\n console.log(chalk.bold.cyan(\"\\n🔒 Pre-Commit Quality Check\\n\"));\n\n if (dryRun) {\n console.log(chalk.yellow(\"📋 DRY-RUN MODE: No changes will be applied\\n\"));\n }\n\n if (stagedOnly) {\n console.log(chalk.dim(\" Checking staged files only...\\n\"));\n }\n\n // Delegate to verify with pre-commit-friendly defaults\n await verifyCommand({\n fix: true,\n maxRetries,\n commit: false, // Never auto-commit in pre-commit\n dryRun,\n learn: false, // Skip learning in pre-commit for speed\n });\n}\n","/**\n * Docs Command Group\n *\n * Consolidates documentation-related commands under `workflow docs <subcommand>`:\n * - validate: Validate document references in markdown files\n * - generate: Generate .github/copilot-instructions.md from guidelines\n * - update: Update guideline templates from the latest package version\n * - advisory: Generate advisory board analysis and documentation\n */\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { docsValidateCommand } from \"./validate.js\";\nimport { docsGenerateCommand } from \"./generate.js\";\nimport { docsUpdateCommand } from \"./update.js\";\nimport { advisoryCommand } from \"../advisory.js\";\n\n/**\n * Create the docs command group with all subcommands\n */\nexport function createDocsCommand(): Command {\n const docsCmd = new Command(\"docs\")\n .description(\"Manage documentation and guidelines\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow docs validate ${chalk.dim(\"# Check for broken references\")}\n $ workflow docs validate --fix ${chalk.dim(\"# Interactive fix mode\")}\n $ workflow docs generate ${chalk.dim(\"# Generate copilot-instructions.md\")}\n $ workflow docs generate --force ${chalk.dim(\"# Regenerate without confirmation\")}\n $ workflow docs update ${chalk.dim(\"# Update guideline templates\")}\n $ workflow docs update --force ${chalk.dim(\"# Overwrite existing templates\")}\n $ workflow docs advisory ${chalk.dim(\"# Generate advisory analysis\")}\n $ workflow docs advisory --depth quick ${chalk.dim(\"# Quick analysis scan\")}\n`,\n )\n .action(() => {\n // Show help if no subcommand provided\n docsCmd.help();\n });\n\n // validate subcommand\n docsCmd\n .command(\"validate\")\n .description(\"Validate document references in markdown files\")\n .option(\"--fix\", \"Interactively fix broken references\")\n .option(\n \"--patterns <patterns>\",\n \"Glob patterns to scan (comma-separated, default: **/*.md)\",\n )\n .option(\"--ignore <patterns>\", \"Glob patterns to ignore (comma-separated)\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow docs validate ${chalk.dim(\"# Scan all markdown files\")}\n $ workflow docs validate --fix ${chalk.dim(\"# Interactive fix mode\")}\n $ workflow docs validate --patterns \"docs/**\" ${chalk.dim(\"# Only scan docs folder\")}\n $ workflow docs validate --ignore \"node_modules\" ${chalk.dim(\"# Ignore patterns\")}\n`,\n )\n .action((options) => {\n const patterns = options.patterns\n ? options.patterns.split(\",\").map((p: string) => p.trim())\n : undefined;\n const ignore = options.ignore\n ? options.ignore.split(\",\").map((p: string) => p.trim())\n : undefined;\n\n return docsValidateCommand({\n fix: options.fix,\n patterns,\n ignore,\n });\n });\n\n // generate subcommand\n docsCmd\n .command(\"generate\")\n .description(\"Generate .github/copilot-instructions.md from guidelines\")\n .option(\"--force\", \"Regenerate without confirmation\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow docs generate ${chalk.dim(\"# Generate with confirmation if exists\")}\n $ workflow docs generate --force ${chalk.dim(\"# Force regeneration\")}\n`,\n )\n .action(docsGenerateCommand);\n\n // update subcommand\n docsCmd\n .command(\"update\")\n .description(\"Update guideline templates from the latest package version\")\n .option(\"--force\", \"Overwrite existing template files\")\n .option(\"--skip\", \"Skip the update (useful in CI)\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow docs update ${chalk.dim(\"# Update templates (skip existing)\")}\n $ workflow docs update --force ${chalk.dim(\"# Overwrite all templates\")}\n $ workflow docs update --skip ${chalk.dim(\"# Skip update in CI\")}\n`,\n )\n .action(docsUpdateCommand);\n\n // advisory subcommand\n docsCmd\n .command(\"advisory\")\n .description(\"Generate advisory board analysis and documentation\")\n .option(\n \"--depth <level>\",\n \"Analysis depth: executive, quick, standard, comprehensive\",\n )\n .option(\"--output <path>\", \"Output directory (default: docs/advisory)\")\n .option(\"--interactive\", \"Enable interactive mode\")\n .option(\"--dry-run\", \"Preview analysis without writing files\")\n .option(\"--format <type>\", \"Output format: markdown, json (default: markdown)\")\n .option(\"--timestamp\", \"Append timestamp to filenames\")\n .option(\"--include-health\", \"Include code health metrics from verify/doctor\")\n .option(\"--ci\", \"CI mode with exit codes on high-risk findings\")\n .option(\"--compare <path>\", \"Compare with previous report\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow docs advisory ${chalk.dim(\"# Interactive mode\")}\n $ workflow docs advisory --depth quick ${chalk.dim(\"# Quick scan\")}\n $ workflow docs advisory --depth executive ${chalk.dim(\"# Executive summary\")}\n $ workflow docs advisory --include-health ${chalk.dim(\"# Include health metrics\")}\n $ workflow docs advisory --compare docs/advisory/ ${chalk.dim(\"# Compare with previous\")}\n $ workflow docs advisory --ci ${chalk.dim(\"# CI mode with exit codes\")}\n`,\n )\n .action(advisoryCommand);\n\n return docsCmd;\n}\n\n// Re-export individual commands for backward compatibility\nexport { docsValidateCommand } from \"./validate.js\";\nexport { docsGenerateCommand } from \"./generate.js\";\nexport { docsUpdateCommand } from \"./update.js\";\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { relative } from \"path\";\nimport {\n validateDocumentReferences,\n applyReferenceFix,\n} from \"../../validators/document-references.js\";\n\nexport async function docsValidateCommand(options: {\n fix?: boolean;\n patterns?: string[];\n ignore?: string[];\n}): Promise<void> {\n const { fix = false, patterns, ignore } = options;\n\n p.intro(chalk.bgBlue(\" workflow-agent docs:validate \"));\n\n const cwd = process.cwd();\n\n // Show scanning status\n const spinner = p.spinner();\n spinner.start(\"Scanning markdown files for broken references...\");\n\n try {\n // Run validation\n const result = await validateDocumentReferences(cwd, {\n patterns,\n ignore,\n });\n\n spinner.stop(\"Scan complete\");\n\n // Display results\n console.log(\"\");\n console.log(\n chalk.cyan(\n `📄 Scanned ${result.scannedFiles} file(s), found ${result.totalReferences} reference(s)`,\n ),\n );\n\n if (result.errors.length > 0) {\n console.log(\"\");\n console.log(chalk.red(\"❌ Errors during validation:\"));\n for (const error of result.errors) {\n console.log(chalk.red(` ${error}`));\n }\n p.outro(chalk.red(\"Validation failed\"));\n process.exit(1);\n }\n\n if (result.valid) {\n console.log(\"\");\n console.log(chalk.green(\"✅ All document references are valid!\"));\n p.outro(chalk.green(\"No broken links found\"));\n return;\n }\n\n // Display broken references\n console.log(\"\");\n console.log(\n chalk.yellow(\n `⚠️ Found ${result.brokenReferences.length} broken reference(s):`,\n ),\n );\n console.log(\"\");\n\n for (const broken of result.brokenReferences) {\n const relativePath = relative(cwd, broken.file);\n console.log(\n chalk.red(\n ` ${relativePath}:${broken.line}:${broken.column} - ${broken.type}`,\n ),\n );\n console.log(chalk.dim(` ${broken.rawLink}`));\n console.log(chalk.dim(` Target: ${broken.targetPath}`));\n if (broken.suggestions.length > 0) {\n console.log(chalk.dim(` Suggestions: ${broken.suggestions.slice(0, 3).join(\", \")}`));\n }\n console.log(\"\");\n }\n\n // If not in fix mode, exit with error\n if (!fix) {\n console.log(\n chalk.yellow(\"💡 Run with --fix flag to interactively fix broken references\"),\n );\n p.outro(chalk.red(\"Validation failed\"));\n process.exit(1);\n }\n\n // Interactive fix mode\n console.log(chalk.cyan(\"🔧 Interactive fix mode\\n\"));\n\n let fixedCount = 0;\n let skippedCount = 0;\n\n for (const broken of result.brokenReferences) {\n const relativePath = relative(cwd, broken.file);\n console.log(chalk.bold(`\\n${relativePath}:${broken.line}`));\n console.log(chalk.dim(` ${broken.rawLink}`));\n console.log(chalk.yellow(` ❌ Broken: ${broken.targetPath}\\n`));\n\n // Build options for the select prompt\n const options: Array<{ value: string; label: string }> = [];\n\n // Add suggestions\n if (broken.suggestions.length > 0) {\n options.push(\n ...broken.suggestions.slice(0, 8).map((suggestion) => ({\n value: suggestion,\n label: `📄 ${suggestion}`,\n })),\n );\n }\n\n // Add custom path option\n options.push({\n value: \"__custom__\",\n label: \"✏️ Enter custom path\",\n });\n\n // Add skip option\n options.push({\n value: \"__skip__\",\n label: \"⏭️ Skip this reference\",\n });\n\n const choice = await p.select({\n message: \"Choose correct path:\",\n options,\n });\n\n if (p.isCancel(choice)) {\n console.log(\"\");\n p.cancel(\"Fix operation cancelled\");\n console.log(\n chalk.dim(`\\nFixed: ${fixedCount}, Skipped: ${skippedCount}`),\n );\n process.exit(0);\n }\n\n if (choice === \"__skip__\") {\n skippedCount++;\n continue;\n }\n\n let newPath: string;\n\n if (choice === \"__custom__\") {\n const customPath = await p.text({\n message: \"Enter the correct path:\",\n placeholder: broken.targetPath,\n validate: (value) => {\n if (!value || value.trim().length === 0) {\n return \"Path cannot be empty\";\n }\n return undefined;\n },\n });\n\n if (p.isCancel(customPath)) {\n console.log(\"\");\n p.cancel(\"Fix operation cancelled\");\n console.log(\n chalk.dim(`\\nFixed: ${fixedCount}, Skipped: ${skippedCount}`),\n );\n process.exit(0);\n }\n\n newPath = customPath as string;\n } else {\n newPath = choice as string;\n }\n\n // Apply the fix\n try {\n await applyReferenceFix(broken.file, broken.rawLink, newPath);\n console.log(chalk.green(` ✅ Fixed: ${broken.targetPath} → ${newPath}`));\n fixedCount++;\n } catch (error) {\n console.log(\n chalk.red(\n ` ❌ Failed to fix: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n ),\n );\n skippedCount++;\n }\n }\n\n console.log(\"\");\n console.log(chalk.cyan(`📊 Summary:`));\n console.log(chalk.green(` Fixed: ${fixedCount}`));\n if (skippedCount > 0) {\n console.log(chalk.yellow(` Skipped: ${skippedCount}`));\n }\n\n if (fixedCount > 0) {\n p.outro(chalk.green(\"Document references fixed!\"));\n } else {\n p.outro(chalk.yellow(\"No references were fixed\"));\n }\n } catch (error) {\n spinner.stop(\"Scan failed\");\n console.log(\"\");\n p.cancel(\n `Validation error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n );\n process.exit(1);\n }\n}\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"fs\";\nimport { join } from \"path\";\nimport { generateCopilotInstructions } from \"../../../scripts/copilot-instructions-generator.js\";\n\nexport interface DocsGenerateOptions {\n force?: boolean;\n}\n\nexport async function docsGenerateCommand(options: DocsGenerateOptions): Promise<void> {\n p.intro(chalk.bgBlue(\" workflow docs generate \"));\n\n const cwd = process.cwd();\n const guidelinesDir = join(cwd, \"guidelines\");\n const outputPath = join(cwd, \".github\", \"copilot-instructions.md\");\n\n // Check if guidelines directory exists\n if (!existsSync(guidelinesDir)) {\n p.cancel(\n \"No guidelines directory found. Run 'workflow init' first to generate guidelines.\",\n );\n process.exit(1);\n }\n\n // Check if file already exists and not forcing\n if (existsSync(outputPath) && !options.force) {\n const shouldRegenerate = await p.confirm({\n message:\n \".github/copilot-instructions.md already exists. Regenerate? (Custom content will be preserved)\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldRegenerate) || !shouldRegenerate) {\n p.cancel(\"Generation cancelled\");\n process.exit(0);\n }\n }\n\n const spinner = p.spinner();\n spinner.start(\"Generating AI agent instructions from guidelines...\");\n\n try {\n const result = generateCopilotInstructions(cwd, {\n force: true,\n silent: false,\n });\n\n if (result.success) {\n const status = result.isNew ? \"Generated\" : \"Regenerated\";\n spinner.stop(\n chalk.green(\n `✓ ${status} .github/copilot-instructions.md from ${result.guidelinesCount} guidelines`,\n ),\n );\n\n if (result.preservedCustomContent) {\n console.log(chalk.dim(\" Custom content between markers was preserved.\"));\n }\n\n console.log(chalk.dim(`\\n Output: ${result.filePath}`));\n console.log(\n chalk.dim(\n \"\\n 💡 Tip: Add project-specific instructions between the CUSTOM markers.\",\n ),\n );\n } else {\n spinner.stop(chalk.red(\"✗ Failed to generate instructions\"));\n console.log(chalk.yellow(`\\nReason: ${result.error}`));\n }\n } catch (error) {\n spinner.stop(chalk.red(\"✗ Error generating instructions\"));\n console.log(\n chalk.yellow(\n `\\nReason: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n process.exit(1);\n }\n\n p.outro(chalk.green(\"✓ AI agent instructions ready!\"));\n console.log(chalk.dim(\"\\nThe .github/copilot-instructions.md file:\"));\n console.log(chalk.dim(\" - Is read by GitHub Copilot and other AI agents\"));\n console.log(chalk.dim(\" - Summarizes all guidelines with links to full docs\"));\n console.log(chalk.dim(\" - Includes your project scopes and conventions\"));\n console.log(chalk.dim(\" - Preserves custom instructions you add between markers\\n\"));\n}\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"fs\";\nimport { join, dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport {\n updateTemplates,\n findTemplatesDirectory,\n type InstallTemplatesResult,\n} from \"../../../scripts/template-installer.js\";\nimport { generateCopilotInstructions } from \"../../../scripts/copilot-instructions-generator.js\";\nimport { getMandatoryTemplateFilenames } from \"../../../templates/metadata.js\";\nimport { templateMetadata } from \"../../../templates/metadata.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nexport interface DocsUpdateOptions {\n force?: boolean;\n skip?: boolean;\n}\n\nexport async function docsUpdateCommand(options: DocsUpdateOptions): Promise<void> {\n const { force = false, skip = false } = options;\n\n p.intro(chalk.bgBlue(\" workflow docs update \"));\n\n const cwd = process.cwd();\n const guidelinesDir = join(cwd, \"guidelines\");\n\n // Find templates directory\n const templatesDir = findTemplatesDirectory(__dirname);\n\n if (!templatesDir) {\n p.cancel(\"Could not find templates directory\");\n process.exit(1);\n }\n\n // Check if guidelines directory exists\n const guidelinesExist = existsSync(guidelinesDir);\n\n if (!guidelinesExist) {\n console.log(chalk.yellow(\"\\n⚠️ No guidelines directory found.\"));\n console.log(chalk.dim(\"Run 'workflow init' to set up guidelines.\\n\"));\n p.outro(chalk.yellow(\"No templates to update\"));\n return;\n }\n\n // Show what will be updated\n const mandatoryFiles = getMandatoryTemplateFilenames();\n const allTemplates = Object.keys(templateMetadata).filter(\n (f) => f !== \"_TEMPLATE_EXAMPLE.md\",\n );\n\n console.log(chalk.cyan(\"\\n📋 Available templates:\\n\"));\n\n console.log(chalk.bold(\" Mandatory templates:\"));\n for (const file of mandatoryFiles) {\n const meta = templateMetadata[file];\n console.log(chalk.dim(` - ${file}`));\n if (meta?.description) {\n console.log(chalk.dim(` ${meta.description}`));\n }\n }\n\n const optionalFiles = allTemplates.filter(\n (f) => !mandatoryFiles.includes(f),\n );\n if (optionalFiles.length > 0) {\n console.log(chalk.bold(\"\\n Optional templates:\"));\n for (const file of optionalFiles) {\n const meta = templateMetadata[file];\n console.log(chalk.dim(` - ${file}`));\n if (meta?.description) {\n console.log(chalk.dim(` ${meta.description}`));\n }\n }\n }\n\n console.log(\"\");\n\n // Handle skip option\n if (skip) {\n p.outro(chalk.yellow(\"Skipped template update (--skip flag)\"));\n return;\n }\n\n // If not forcing, ask for confirmation\n if (!force) {\n const shouldContinue = await p.confirm({\n message: force\n ? \"Force update all templates? (existing files will be overwritten)\"\n : \"Update templates? (existing files will be skipped unless --force is used)\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Template update cancelled\");\n process.exit(0);\n }\n }\n\n // Perform the update\n const spinner = p.spinner();\n spinner.start(\"Updating templates...\");\n\n let result: InstallTemplatesResult;\n\n try {\n result = updateTemplates(cwd, templatesDir, {\n force,\n silent: true,\n });\n } catch (error) {\n spinner.stop(\"❌ Failed to update templates\");\n console.log(\n chalk.red(\n `\\nError: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n process.exit(1);\n }\n\n // Report results\n const totalChanges = result.installed.length + result.updated.length;\n\n if (totalChanges === 0 && result.skipped.length > 0) {\n spinner.stop(\"No changes needed\");\n console.log(\n chalk.dim(\n `\\n ${result.skipped.length} files already up to date (use --force to overwrite)`,\n ),\n );\n } else {\n spinner.stop(`✓ Template update complete`);\n\n if (result.installed.length > 0) {\n console.log(chalk.green(`\\n New templates installed:`));\n for (const file of result.installed) {\n console.log(chalk.dim(` + ${file}`));\n }\n }\n\n if (result.updated.length > 0) {\n console.log(chalk.yellow(`\\n Templates updated:`));\n for (const file of result.updated) {\n console.log(chalk.dim(` ~ ${file}`));\n }\n }\n\n if (result.skipped.length > 0) {\n console.log(chalk.dim(`\\n Skipped (already exists):`));\n for (const file of result.skipped) {\n console.log(chalk.dim(` - ${file}`));\n }\n }\n }\n\n if (result.errors.length > 0) {\n console.log(chalk.red(`\\n Errors:`));\n for (const error of result.errors) {\n console.log(chalk.red(` ! ${error}`));\n }\n }\n\n // Regenerate copilot instructions if templates were changed\n if (totalChanges > 0) {\n console.log(\"\");\n const instructionsResult = generateCopilotInstructions(cwd, {\n silent: true,\n });\n if (instructionsResult.success) {\n console.log(\n chalk.green(\n `✓ Regenerated .github/copilot-instructions.md from ${instructionsResult.guidelinesCount} guidelines`,\n ),\n );\n }\n }\n\n p.outro(chalk.green(\"Done!\"));\n}\n","/**\n * Advisory Command\n *\n * Generates comprehensive advisory board analysis and documentation.\n *\n * Usage:\n * workflow-agent advisory # Interactive mode\n * workflow-agent advisory --depth quick # Quick analysis\n * workflow-agent advisory --depth executive # Executive summary only\n * workflow-agent advisory --include-health # Include code health metrics\n * workflow-agent advisory --compare docs/advisory/ # Compare with previous\n * workflow-agent advisory --ci # CI mode with exit codes\n * workflow-agent advisory --dry-run # Preview only\n */\n\nimport * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"fs\";\nimport { readFile, writeFile, mkdir } from \"fs/promises\";\nimport { join } from \"path\";\nimport { AdvisoryAnalyzer } from \"../../utils/advisory-analyzer.js\";\nimport { QuestionGenerator } from \"../../utils/question-generator.js\";\nimport { ReportComparator } from \"../../utils/report-comparator.js\";\nimport { loadConfig } from \"../../config/index.js\";\nimport type { AdvisoryDepth } from \"../../config/schema.js\";\n\nexport interface AdvisoryOptions {\n depth?: AdvisoryDepth;\n output?: string;\n interactive?: boolean;\n dryRun?: boolean;\n format?: \"markdown\" | \"json\";\n timestamp?: boolean;\n includeHealth?: boolean;\n ci?: boolean;\n compare?: string;\n}\n\nexport async function advisoryCommand(options: AdvisoryOptions) {\n console.log(chalk.bold.cyan(\"\\n🎯 Advisory Board Analysis\\n\"));\n\n const cwd = process.cwd();\n\n // Load config\n let config;\n try {\n config = await loadConfig(cwd);\n } catch (error) {\n // Config is optional for advisory\n config = undefined;\n }\n\n const advisoryConfig = config?.advisory;\n\n // Interactive mode: gather missing options\n const isInteractive = options.interactive || (!options.depth && !options.ci);\n\n let depth: AdvisoryDepth =\n options.depth || advisoryConfig?.defaultDepth || \"standard\";\n let outputDir =\n options.output || advisoryConfig?.outputDir || \"docs/advisory\";\n let includeHealth =\n options.includeHealth ?? advisoryConfig?.includeHealthMetrics ?? false;\n\n if (isInteractive && !options.depth) {\n const depthChoice = await p.select({\n message: \"Select analysis depth:\",\n options: [\n {\n value: \"executive\",\n label:\n \"📊 Executive - Business summary for non-technical stakeholders\",\n hint: \"High-level overview only\",\n },\n {\n value: \"quick\",\n label: \"⚡ Quick - Package scan and framework detection\",\n hint: \"~30 seconds\",\n },\n {\n value: \"standard\",\n label: \"🔍 Standard - Includes architecture analysis\",\n hint: \"~1-2 minutes (recommended)\",\n },\n {\n value: \"comprehensive\",\n label: \"🔬 Comprehensive - Full code-level pattern detection\",\n hint: \"~3-5 minutes\",\n },\n ],\n initialValue: \"standard\",\n });\n\n if (p.isCancel(depthChoice)) {\n p.cancel(\"Analysis cancelled\");\n process.exit(0);\n }\n\n depth = depthChoice as AdvisoryDepth;\n }\n\n if (isInteractive && !options.output) {\n const outputChoice = await p.text({\n message: \"Output directory:\",\n placeholder: \"docs/advisory\",\n defaultValue: outputDir,\n });\n\n if (p.isCancel(outputChoice)) {\n p.cancel(\"Analysis cancelled\");\n process.exit(0);\n }\n\n outputDir = outputChoice as string;\n }\n\n if (isInteractive && !options.includeHealth) {\n const healthChoice = await p.confirm({\n message: \"Include code health metrics?\",\n initialValue: includeHealth,\n });\n\n if (p.isCancel(healthChoice)) {\n p.cancel(\"Analysis cancelled\");\n process.exit(0);\n }\n\n includeHealth = healthChoice;\n }\n\n // Create analyzer\n const analyzer = new AdvisoryAnalyzer({\n depth,\n cwd,\n config,\n includeHealth,\n excludePatterns: advisoryConfig?.excludePatterns,\n });\n\n // Run analysis\n const spinner = p.spinner();\n const depthLabels = {\n executive: \"executive summary\",\n quick: \"quick scan\",\n standard: \"standard analysis\",\n comprehensive: \"comprehensive analysis\",\n };\n\n spinner.start(`Running ${depthLabels[depth]}...`);\n\n let analysis;\n try {\n analysis = await analyzer.analyze();\n spinner.stop(`✓ Analysis complete`);\n } catch (error) {\n spinner.stop(\"✗ Analysis failed\");\n console.error(\n chalk.red(\n `Error: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n process.exit(1);\n }\n\n // Generate questions\n const questionGenerator = new QuestionGenerator(analysis, advisoryConfig);\n const questions = questionGenerator.generate();\n\n // Display summary\n console.log(\"\");\n displaySummary(analysis, questions);\n\n // Handle comparison mode\n let comparisonReport;\n let comparator;\n if (options.compare) {\n // If the path ends with .json, use it directly; otherwise append analysis.json\n const comparisonPath = options.compare.endsWith(\".json\")\n ? join(cwd, options.compare)\n : join(cwd, options.compare, \"analysis.json\");\n if (existsSync(comparisonPath)) {\n spinner.start(\"Comparing with previous report...\");\n try {\n const previousContent = await readFile(comparisonPath, \"utf-8\");\n const previousAnalysis = JSON.parse(previousContent);\n\n comparator = new ReportComparator(previousAnalysis, analysis);\n comparisonReport = comparator.compare();\n\n spinner.stop(\"✓ Comparison complete\");\n console.log(\"\");\n displayComparisonSummary(comparisonReport);\n } catch (error) {\n spinner.stop(\"⚠ Comparison failed\");\n console.warn(chalk.yellow(`Could not compare reports: ${error}`));\n }\n } else {\n console.warn(\n chalk.yellow(\n `\\n⚠ No previous report found at ${comparisonPath}. Skipping comparison.\\n`,\n ),\n );\n }\n }\n\n // Check if dry-run\n if (options.dryRun) {\n console.log(chalk.dim(\"\\n--dry-run mode: No files written.\\n\"));\n return;\n }\n\n // Create output directory\n const fullOutputDir = join(cwd, outputDir);\n await mkdir(fullOutputDir, { recursive: true });\n\n // Write reports\n spinner.start(\"Generating reports...\");\n\n try {\n const timestamp = options.timestamp\n ? new Date().toISOString().split(\"T\")[0]\n : \"\";\n\n if (options.format === \"json\") {\n // JSON format\n await writeAnalysisJson(fullOutputDir, analysis, questions, timestamp);\n } else {\n // Markdown format (default)\n await writeMarkdownReports(\n fullOutputDir,\n analysis,\n questions,\n comparator,\n timestamp,\n );\n }\n\n spinner.stop(\"✓ Reports generated\");\n } catch (error) {\n spinner.stop(\"✗ Failed to write reports\");\n console.error(chalk.red(`Error: ${error}`));\n process.exit(1);\n }\n\n // Display file locations\n console.log(\"\");\n console.log(chalk.green(\"📝 Reports written to:\"));\n const suffix = options.timestamp\n ? `-${new Date().toISOString().split(\"T\")[0]}`\n : \"\";\n\n if (options.format === \"json\") {\n console.log(chalk.dim(` ${join(outputDir, `analysis${suffix}.json`)}`));\n console.log(chalk.dim(` ${join(outputDir, `questions${suffix}.json`)}`));\n } else {\n console.log(\n chalk.dim(` ${join(outputDir, `EXECUTIVE_SUMMARY${suffix}.md`)}`),\n );\n console.log(\n chalk.dim(` ${join(outputDir, `TECHNOLOGY_AUDIT${suffix}.md`)}`),\n );\n console.log(\n chalk.dim(` ${join(outputDir, `STRATEGIC_ROADMAP${suffix}.md`)}`),\n );\n console.log(\n chalk.dim(` ${join(outputDir, `BOARD_QUESTIONS${suffix}.md`)}`),\n );\n\n if (comparisonReport) {\n console.log(\n chalk.dim(` ${join(outputDir, `DIFF_REPORT${suffix}.md`)}`),\n );\n }\n }\n\n // CI mode: check thresholds and exit with code\n if (options.ci) {\n console.log(\"\");\n const exitCode = checkCIThresholds(analysis, advisoryConfig);\n\n if (exitCode !== 0) {\n console.log(chalk.red(`\\n❌ CI check failed (exit code ${exitCode})\\n`));\n process.exit(exitCode);\n } else {\n console.log(chalk.green(\"\\n✓ CI check passed\\n\"));\n }\n }\n\n p.outro(chalk.green(\"✓ Advisory analysis complete!\"));\n}\n\n/**\n * Display analysis summary\n */\nfunction displaySummary(analysis: any, questions: any) {\n console.log(chalk.bold(\"📊 Analysis Summary\\n\"));\n\n console.log(\n chalk.dim(`Project: ${analysis.project.name} v${analysis.project.version}`),\n );\n console.log(\n chalk.dim(\n `Framework: ${analysis.technology.framework || \"N/A\"} (${analysis.technology.language})`,\n ),\n );\n console.log(chalk.dim(`Total Packages: ${analysis.packages.total}`));\n console.log(chalk.dim(`Files Analyzed: ${analysis.project.fileCount}`));\n console.log(\"\");\n\n // Risk score\n const riskScore = (analysis.risks.overall * 100).toFixed(0);\n const riskColor =\n analysis.risks.overall > 0.7\n ? chalk.red\n : analysis.risks.overall > 0.4\n ? chalk.yellow\n : chalk.green;\n console.log(riskColor(`⚠️ Risk Score: ${riskScore}%`));\n\n // Opportunity score\n const oppScore = (analysis.opportunities.overall * 100).toFixed(0);\n const oppColor =\n analysis.opportunities.overall > 0.7\n ? chalk.green\n : analysis.opportunities.overall > 0.5\n ? chalk.yellow\n : chalk.dim;\n console.log(oppColor(`🌟 Opportunity Score: ${oppScore}%`));\n\n console.log(\"\");\n\n // Questions summary\n console.log(chalk.bold(\"❓ Advisory Questions\\n\"));\n console.log(\n chalk.dim(`Total Questions: ${questions.summary.totalQuestions}`),\n );\n console.log(chalk.red(` High Priority: ${questions.summary.highPriority}`));\n console.log(\n chalk.yellow(` Medium Priority: ${questions.summary.mediumPriority}`),\n );\n console.log(chalk.dim(` Low Priority: ${questions.summary.lowPriority}`));\n console.log(\"\");\n\n // Top 3 high-priority questions\n const highPriorityQuestions = questions.questions.filter(\n (q: any) => q.priority === \"high\",\n );\n\n if (highPriorityQuestions.length > 0) {\n console.log(chalk.bold.yellow(\"🔥 Top Priority Questions:\\n\"));\n highPriorityQuestions.slice(0, 3).forEach((q: any, i: number) => {\n console.log(chalk.yellow(`${i + 1}. ${q.question}`));\n console.log(chalk.dim(` Category: ${q.category}`));\n console.log(\"\");\n });\n }\n}\n\n/**\n * Display comparison summary\n */\nfunction displayComparisonSummary(comparison: any) {\n console.log(chalk.bold(\"📈 Changes Since Last Report\\n\"));\n\n const riskChange = comparison.changes.riskScoreChange;\n const riskEmoji = riskChange < 0 ? \"✅\" : riskChange > 0 ? \"⚠️\" : \"➖\";\n console.log(\n `${riskEmoji} Risk Score: ${(riskChange * 100).toFixed(0)}% change`,\n );\n\n const oppChange = comparison.changes.opportunityScoreChange;\n const oppEmoji = oppChange > 0 ? \"✅\" : oppChange < 0 ? \"⚠️\" : \"➖\";\n console.log(\n `${oppEmoji} Opportunity Score: ${(oppChange * 100).toFixed(0)}% change`,\n );\n\n console.log(\n `📦 Packages: ${comparison.changes.packageCountChange > 0 ? \"+\" : \"\"}${comparison.changes.packageCountChange}`,\n );\n\n if (comparison.changes.newHighRisks > 0) {\n console.log(\n chalk.red(\n `⚠️ ${comparison.changes.newHighRisks} new high-priority risks`,\n ),\n );\n }\n\n if (comparison.changes.resolvedHighRisks > 0) {\n console.log(\n chalk.green(\n `✅ ${comparison.changes.resolvedHighRisks} high-priority risks resolved`,\n ),\n );\n }\n\n console.log(\"\");\n}\n\n/**\n * Write analysis as JSON\n */\nasync function writeAnalysisJson(\n outputDir: string,\n analysis: any,\n questions: any,\n timestamp: string,\n) {\n const suffix = timestamp ? `-${timestamp}` : \"\";\n\n await writeFile(\n join(outputDir, `analysis${suffix}.json`),\n JSON.stringify(analysis, null, 2),\n \"utf-8\",\n );\n\n await writeFile(\n join(outputDir, `questions${suffix}.json`),\n JSON.stringify(questions, null, 2),\n \"utf-8\",\n );\n}\n\n/**\n * Write markdown reports\n */\nasync function writeMarkdownReports(\n outputDir: string,\n analysis: any,\n questions: any,\n comparator: any,\n timestamp: string,\n) {\n const suffix = timestamp ? `-${timestamp}` : \"\";\n\n // Also save JSON for future comparisons\n await writeFile(\n join(outputDir, `analysis.json`),\n JSON.stringify(analysis, null, 2),\n \"utf-8\",\n );\n\n // Generate each markdown report\n await writeFile(\n join(outputDir, `EXECUTIVE_SUMMARY${suffix}.md`),\n generateExecutiveSummary(analysis, questions),\n \"utf-8\",\n );\n\n await writeFile(\n join(outputDir, `TECHNOLOGY_AUDIT${suffix}.md`),\n generateTechnologyAudit(analysis),\n \"utf-8\",\n );\n\n await writeFile(\n join(outputDir, `STRATEGIC_ROADMAP${suffix}.md`),\n generateStrategicRoadmap(analysis, questions),\n \"utf-8\",\n );\n\n await writeFile(\n join(outputDir, `BOARD_QUESTIONS${suffix}.md`),\n generateBoardQuestions(questions),\n \"utf-8\",\n );\n\n if (comparator) {\n await writeFile(\n join(outputDir, `DIFF_REPORT${suffix}.md`),\n comparator.generateMarkdownSummary(),\n \"utf-8\",\n );\n }\n}\n\n/**\n * Generate Executive Summary markdown\n */\nfunction generateExecutiveSummary(analysis: any, questions: any): string {\n let md = `# Executive Summary\\n\\n`;\n md += `> **Generated:** ${new Date(analysis.timestamp).toLocaleDateString()}\\n\\n`;\n md += `---\\n\\n`;\n\n md += `## Project Overview\\n\\n`;\n md += `**${analysis.project.name}** is a ${analysis.technology.framework || \"modern\"} application `;\n md += `built with ${analysis.technology.language}. `;\n\n if (analysis.project.description) {\n md += `${analysis.project.description}\\n\\n`;\n } else {\n md += `\\n\\n`;\n }\n\n md += `### Key Metrics\\n\\n`;\n md += `| Metric | Value |\\n`;\n md += `|--------|-------|\\n`;\n md += `| Version | ${analysis.project.version} |\\n`;\n md += `| Dependencies | ${analysis.packages.total} packages |\\n`;\n md += `| Codebase Size | ${analysis.project.fileCount} files (~${(analysis.project.totalLines / 1000).toFixed(0)}K lines) |\\n`;\n md += `| Architecture | ${analysis.project.isMonorepo ? \"Monorepo\" : \"Single repository\"} |\\n`;\n md += `\\n`;\n\n // Risk/Opportunity Matrix\n md += `## Strategic Assessment\\n\\n`;\n\n const riskScore = analysis.risks.overall;\n const oppScore = analysis.opportunities.overall;\n\n md += `### Risk & Opportunity Matrix\\n\\n`;\n md += `| Category | Score | Status |\\n`;\n md += `|----------|-------|--------|\\n`;\n md += `| **Technical Risk** | ${(riskScore * 100).toFixed(0)}% | ${getRiskLabel(riskScore)} |\\n`;\n md += `| **Growth Opportunity** | ${(oppScore * 100).toFixed(0)}% | ${getOpportunityLabel(oppScore)} |\\n`;\n md += `\\n`;\n\n // Technology Stack (high-level)\n md += `### Technology Foundation\\n\\n`;\n md += `**Primary Stack:**\\n`;\n md += `- Framework: ${analysis.technology.framework || \"N/A\"}\\n`;\n md += `- Language: ${analysis.technology.language}\\n`;\n md += `- Runtime: ${analysis.technology.runtime}\\n`;\n if (analysis.technology.platforms.length > 0) {\n md += `- Platforms: ${analysis.technology.platforms.join(\", \")}\\n`;\n }\n md += `\\n`;\n\n if (analysis.technology.infrastructure.length > 0) {\n md += `**Infrastructure:** ${analysis.technology.infrastructure.join(\", \")}\\n\\n`;\n }\n\n // Key package categories\n if (analysis.packages.categories.length > 0) {\n md += `### Technology Categories\\n\\n`;\n const topCategories = analysis.packages.categories\n .sort((a: any, b: any) => b.count - a.count)\n .slice(0, 5);\n\n topCategories.forEach((cat: any) => {\n md += `- **${cat.name}** (${cat.count} packages) - ${cat.businessImpact}\\n`;\n });\n md += `\\n`;\n }\n\n // Top Priority Questions (Executive view)\n md += `## Key Strategic Questions\\n\\n`;\n\n const highPriorityQuestions = questions.questions.filter(\n (q: any) => q.priority === \"high\",\n );\n\n if (highPriorityQuestions.length > 0) {\n highPriorityQuestions.slice(0, 5).forEach((q: any, i: number) => {\n md += `### ${i + 1}. ${q.question}\\n\\n`;\n md += `**Context:** ${q.context}\\n\\n`;\n md += `**Business Impact:** ${q.businessImpact}\\n\\n`;\n });\n }\n\n // Critical Risks\n if (analysis.risks.critical && analysis.risks.critical.length > 0) {\n md += `## Critical Risks\\n\\n`;\n analysis.risks.critical.forEach((risk: string) => {\n md += `- ⚠️ ${risk}\\n`;\n });\n md += `\\n`;\n }\n\n // Top Opportunities\n if (\n analysis.opportunities.immediate &&\n analysis.opportunities.immediate.length > 0\n ) {\n md += `## Immediate Opportunities\\n\\n`;\n analysis.opportunities.immediate.slice(0, 5).forEach((opp: string) => {\n md += `- 🌟 ${opp}\\n`;\n });\n md += `\\n`;\n }\n\n md += `---\\n\\n`;\n md += `*For detailed technical analysis, see [TECHNOLOGY_AUDIT.md](TECHNOLOGY_AUDIT.md)*\\n`;\n md += `*For strategic recommendations, see [STRATEGIC_ROADMAP.md](STRATEGIC_ROADMAP.md)*\\n`;\n\n return md;\n}\n\n/**\n * Generate Technology Audit markdown\n */\nfunction generateTechnologyAudit(analysis: any): string {\n let md = `# Technology Audit\\n\\n`;\n md += `> **Generated:** ${new Date(analysis.timestamp).toLocaleDateString()}\\n`;\n md += `> **Analysis Depth:** ${analysis.depth}\\n\\n`;\n md += `---\\n\\n`;\n\n // Project Details\n md += `## Project Details\\n\\n`;\n md += `| Property | Value |\\n`;\n md += `|----------|-------|\\n`;\n md += `| Name | ${analysis.project.name} |\\n`;\n md += `| Version | ${analysis.project.version} |\\n`;\n md += `| Package Manager | ${analysis.project.packageManager} |\\n`;\n md += `| Repository Type | ${analysis.project.isMonorepo ? \"Monorepo\" : \"Single\"} |\\n`;\n if (analysis.project.workspaceCount) {\n md += `| Workspaces | ${analysis.project.workspaceCount} |\\n`;\n }\n md += `| Total Files | ${analysis.project.fileCount} |\\n`;\n md += `| Estimated Lines | ${analysis.project.totalLines.toLocaleString()} |\\n`;\n md += `\\n`;\n\n // Technology Stack\n md += `## Technology Stack\\n\\n`;\n md += `### Core Technologies\\n\\n`;\n md += `| Component | Technology |\\n`;\n md += `|-----------|------------|\\n`;\n md += `| Framework | ${analysis.technology.framework || \"N/A\"} ${analysis.technology.frameworkVersion || \"\"} |\\n`;\n md += `| Language | ${analysis.technology.language} |\\n`;\n md += `| Runtime | ${analysis.technology.runtime} |\\n`;\n md += `| Platforms | ${analysis.technology.platforms.join(\", \")} |\\n`;\n md += `\\n`;\n\n if (analysis.technology.buildTools.length > 0) {\n md += `### Build Tools\\n\\n`;\n analysis.technology.buildTools.forEach((tool: string) => {\n md += `- ${tool}\\n`;\n });\n md += `\\n`;\n }\n\n if (analysis.technology.infrastructure.length > 0) {\n md += `### Infrastructure\\n\\n`;\n analysis.technology.infrastructure.forEach((infra: string) => {\n md += `- ${infra}\\n`;\n });\n md += `\\n`;\n }\n\n // Package Analysis\n md += `## Dependency Analysis\\n\\n`;\n md += `### Overview\\n\\n`;\n md += `- **Total Packages:** ${analysis.packages.total}\\n`;\n md += `- **Production:** ${analysis.packages.production.length}\\n`;\n md += `- **Development:** ${analysis.packages.development.length}\\n`;\n md += `\\n`;\n\n // Categories\n if (analysis.packages.categories.length > 0) {\n md += `### Package Categories\\n\\n`;\n md += `| Category | Count | Business Impact |\\n`;\n md += `|----------|-------|----------------|\\n`;\n\n analysis.packages.categories\n .sort((a: any, b: any) => b.count - a.count)\n .forEach((cat: any) => {\n md += `| ${cat.name} | ${cat.count} | ${cat.businessImpact} |\\n`;\n });\n\n md += `\\n`;\n }\n\n // Top Production Dependencies\n if (analysis.packages.production.length > 0) {\n md += `### Key Production Dependencies\\n\\n`;\n md += `| Package | Version | Category | Purpose |\\n`;\n md += `|---------|---------|----------|--------|\\n`;\n\n analysis.packages.production.slice(0, 15).forEach((pkg: any) => {\n md += `| ${pkg.name} | \\`${pkg.version}\\` | ${pkg.category} | ${pkg.purpose} |\\n`;\n });\n\n if (analysis.packages.production.length > 15) {\n md += `\\n*...and ${analysis.packages.production.length - 15} more*\\n`;\n }\n\n md += `\\n`;\n }\n\n // Architecture (if available)\n if (analysis.architecture) {\n md += `## Architecture Overview\\n\\n`;\n md += `**Pattern:** ${analysis.architecture.pattern}\\n\\n`;\n\n md += `### Layers\\n\\n`;\n analysis.architecture.layers.forEach((layer: string) => {\n md += `- ${layer}\\n`;\n });\n md += `\\n`;\n\n md += `**Data Flow:** ${analysis.architecture.dataFlow}\\n\\n`;\n\n if (analysis.architecture.keyDecisions.length > 0) {\n md += `### Key Architecture Decisions\\n\\n`;\n analysis.architecture.keyDecisions.forEach((decision: string) => {\n md += `- ${decision}\\n`;\n });\n md += `\\n`;\n }\n }\n\n // Code Patterns (if comprehensive analysis)\n if (analysis.codePatterns) {\n md += `## Code Patterns\\n\\n`;\n\n if (analysis.codePatterns.components.length > 0) {\n md += `### Components\\n\\n`;\n analysis.codePatterns.components.forEach((comp: any) => {\n md += `**${comp.type}** (${comp.count})\\n`;\n md += `- Conventions: ${comp.conventions.join(\", \")}\\n`;\n md += `\\n`;\n });\n }\n\n if (analysis.codePatterns.tests) {\n md += `### Testing\\n\\n`;\n md += `- Framework: ${analysis.codePatterns.tests.framework}\\n`;\n md += `- Test Count: ${analysis.codePatterns.tests.count}\\n`;\n md += `- Types: ${analysis.codePatterns.tests.types.join(\", \")}\\n`;\n if (analysis.codePatterns.tests.coverage) {\n md += `- Coverage: ${analysis.codePatterns.tests.coverage}%\\n`;\n }\n md += `\\n`;\n }\n }\n\n // Health Metrics (if available)\n if (analysis.health) {\n md += `## Code Health\\n\\n`;\n md += `| Check | Status |\\n`;\n md += `|-------|--------|\\n`;\n md += `| TypeScript | ${analysis.health.typecheck ? \"✅ Passing\" : \"❌ Failing\"} |\\n`;\n md += `| Linting | ${analysis.health.lint ? \"✅ Passing\" : \"❌ Failing\"} |\\n`;\n md += `| Tests | ${analysis.health.tests ? \"✅ Passing\" : \"❌ Failing\"} |\\n`;\n md += `| Build | ${analysis.health.build ? \"✅ Passing\" : \"❌ Failing\"} |\\n`;\n if (analysis.health.coverage) {\n md += `| Coverage | ${analysis.health.coverage}% |\\n`;\n }\n md += `\\n`;\n }\n\n return md;\n}\n\n/**\n * Generate Strategic Roadmap markdown\n */\nfunction generateStrategicRoadmap(analysis: any, questions: any): string {\n let md = `# Strategic Roadmap\\n\\n`;\n md += `> **Generated:** ${new Date(analysis.timestamp).toLocaleDateString()}\\n\\n`;\n md += `---\\n\\n`;\n\n md += `## Overview\\n\\n`;\n md += `This roadmap outlines strategic recommendations based on the technical analysis of ${analysis.project.name}. `;\n md += `Recommendations are prioritized by business impact and feasibility.\\n\\n`;\n\n // Risk Management\n md += `## Risk Management\\n\\n`;\n\n if (analysis.risks.critical.length > 0) {\n md += `### 🔴 Critical Priorities\\n\\n`;\n analysis.risks.critical.forEach((risk: string, i: number) => {\n md += `${i + 1}. ${risk}\\n`;\n });\n md += `\\n`;\n }\n\n if (analysis.risks.high.length > 0) {\n md += `### 🟡 High Priority\\n\\n`;\n analysis.risks.high.forEach((risk: string, i: number) => {\n md += `${i + 1}. ${risk}\\n`;\n });\n md += `\\n`;\n }\n\n // Opportunities\n md += `## Growth Opportunities\\n\\n`;\n\n if (analysis.opportunities.immediate.length > 0) {\n md += `### ⚡ Immediate (0-30 days)\\n\\n`;\n analysis.opportunities.immediate.forEach((opp: string, i: number) => {\n md += `${i + 1}. ${opp}\\n`;\n });\n md += `\\n`;\n }\n\n if (analysis.opportunities.shortTerm.length > 0) {\n md += `### 📅 Short-term (1-3 months)\\n\\n`;\n analysis.opportunities.shortTerm.forEach((opp: string, i: number) => {\n md += `${i + 1}. ${opp}\\n`;\n });\n md += `\\n`;\n }\n\n if (analysis.opportunities.longTerm.length > 0) {\n md += `### 🎯 Long-term (3-12 months)\\n\\n`;\n analysis.opportunities.longTerm.forEach((opp: string, i: number) => {\n md += `${i + 1}. ${opp}\\n`;\n });\n md += `\\n`;\n }\n\n // Recommendations by Category\n md += `## Detailed Recommendations\\n\\n`;\n\n const categoryMap = new Map<string, any[]>();\n\n questions.questions.forEach((q: any) => {\n if (!categoryMap.has(q.category)) {\n categoryMap.set(q.category, []);\n }\n categoryMap.get(q.category)!.push(q);\n });\n\n for (const [category, qs] of categoryMap) {\n md += `### ${category}\\n\\n`;\n\n qs.forEach((q: any) => {\n md += `#### ${q.question}\\n\\n`;\n\n if (q.findings.length > 0) {\n md += `**Current State:**\\n`;\n q.findings.forEach((f: string) => {\n md += `- ${f}\\n`;\n });\n md += `\\n`;\n }\n\n if (q.recommendations.length > 0) {\n md += `**Recommendations:**\\n`;\n q.recommendations.forEach((r: string) => {\n md += `- ${r}\\n`;\n });\n md += `\\n`;\n }\n\n md += `**Business Impact:** ${q.businessImpact}\\n\\n`;\n md += `**Priority:** ${q.priority.toUpperCase()}\\n\\n`;\n md += `---\\n\\n`;\n });\n }\n\n return md;\n}\n\n/**\n * Generate Board Questions markdown\n */\nfunction generateBoardQuestions(questions: any): string {\n let md = `# Advisory Board Questions\\n\\n`;\n md += `> **Total Questions:** ${questions.summary.totalQuestions}\\n`;\n md += `> **High Priority:** ${questions.summary.highPriority} | `;\n md += `**Medium:** ${questions.summary.mediumPriority} | `;\n md += `**Low:** ${questions.summary.lowPriority}\\n\\n`;\n md += `---\\n\\n`;\n\n md += `## Table of Contents\\n\\n`;\n questions.summary.categories.forEach((cat: string) => {\n const slug = cat.toLowerCase().replace(/\\s+/g, \"-\");\n md += `- [${cat}](#${slug})\\n`;\n });\n md += `\\n---\\n\\n`;\n\n // Group by category\n const categoryMap = new Map<string, any[]>();\n\n questions.questions.forEach((q: any) => {\n if (!categoryMap.has(q.category)) {\n categoryMap.set(q.category, []);\n }\n categoryMap.get(q.category)!.push(q);\n });\n\n // Output by category\n for (const [category, qs] of categoryMap) {\n const slug = category.toLowerCase().replace(/\\s+/g, \"-\");\n md += `## ${category}\\n\\n`;\n md += `<a id=\"${slug}\"></a>\\n\\n`;\n\n qs.forEach((q: any, i: number) => {\n const priorityEmoji =\n q.priority === \"high\" ? \"🔴\" : q.priority === \"medium\" ? \"🟡\" : \"🟢\";\n\n md += `### ${i + 1}. ${priorityEmoji} ${q.question}\\n\\n`;\n md += `**Context:** ${q.context}\\n\\n`;\n\n if (q.findings.length > 0) {\n md += `**Findings:**\\n`;\n q.findings.forEach((f: string) => {\n md += `- ${f}\\n`;\n });\n md += `\\n`;\n }\n\n if (q.recommendations.length > 0) {\n md += `**Recommendations:**\\n`;\n q.recommendations.forEach((r: string) => {\n md += `- ${r}\\n`;\n });\n md += `\\n`;\n }\n\n md += `**Business Impact:** ${q.businessImpact}\\n\\n`;\n md += `---\\n\\n`;\n });\n }\n\n return md;\n}\n\n/**\n * Get risk label\n */\nfunction getRiskLabel(score: number): string {\n if (score > 0.7) return \"🔴 High Risk\";\n if (score > 0.4) return \"🟡 Moderate Risk\";\n return \"🟢 Low Risk\";\n}\n\n/**\n * Get opportunity label\n */\nfunction getOpportunityLabel(score: number): string {\n if (score > 0.7) return \"🌟 High Potential\";\n if (score > 0.5) return \"📈 Moderate Potential\";\n return \"💡 Identified\";\n}\n\n/**\n * Check CI thresholds and return exit code\n */\nfunction checkCIThresholds(analysis: any, config: any): number {\n const thresholds = config?.riskThresholds || {\n high: 0.7,\n medium: 0.4,\n };\n\n const riskScore = analysis.risks.overall;\n\n if (riskScore >= thresholds.high) {\n console.log(\n chalk.red(\n `High risk threshold exceeded: ${(riskScore * 100).toFixed(0)}%`,\n ),\n );\n return 1;\n }\n\n if (analysis.packages.security && analysis.packages.security.length > 0) {\n const criticalCount = analysis.packages.security.filter(\n (s: any) => s.severity === \"critical\",\n ).length;\n\n if (criticalCount > 0) {\n console.log(\n chalk.red(`Critical security vulnerabilities found: ${criticalCount}`),\n );\n return 1;\n }\n }\n\n return 0;\n}\n","/**\n * Advisory Board Analysis Utilities\n *\n * Performs comprehensive application audits at multiple depth levels:\n * - executive: High-level business summary for non-technical stakeholders\n * - quick: Package.json scan, framework detection\n * - standard: Adds file structure, adapter detection, scope identification\n * - comprehensive: Full code-level pattern detection\n */\n\nimport { existsSync } from \"fs\";\nimport { readFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport fg from \"fast-glob\";\nimport type { AdvisoryDepth, WorkflowConfig } from \"../config/schema.js\";\nimport { detectPackageManager, isMonorepo } from \"./git-repo.js\";\nimport { analyzeProject } from \"./auto-setup.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface AdvisoryAnalysis {\n depth: AdvisoryDepth;\n timestamp: string;\n project: ProjectOverview;\n technology: TechnologyStack;\n packages: PackageAnalysis;\n architecture?: ArchitectureOverview;\n codePatterns?: CodePatternAnalysis;\n risks: RiskAssessment;\n opportunities: OpportunityAssessment;\n health?: HealthMetrics;\n}\n\nexport interface ProjectOverview {\n name: string;\n version: string;\n description?: string;\n isMonorepo: boolean;\n packageManager: string;\n workspaceCount?: number;\n fileCount: number;\n totalLines: number;\n}\n\nexport interface TechnologyStack {\n framework?: string;\n frameworkVersion?: string;\n language: string;\n runtime: string;\n buildTools: string[];\n platforms: string[];\n infrastructure: string[];\n}\n\nexport interface PackageAnalysis {\n total: number;\n production: DependencyInfo[];\n development: DependencyInfo[];\n categories: PackageCategory[];\n outdated: OutdatedPackage[];\n security: SecurityIssue[];\n}\n\nexport interface DependencyInfo {\n name: string;\n version: string;\n category: string;\n purpose: string;\n businessValue: string;\n usagePatterns: string[];\n alternatives?: string[];\n}\n\nexport interface PackageCategory {\n name: string;\n count: number;\n packages: string[];\n businessImpact: string;\n}\n\nexport interface OutdatedPackage {\n name: string;\n current: string;\n latest: string;\n breaking: boolean;\n}\n\nexport interface SecurityIssue {\n package: string;\n severity: \"critical\" | \"high\" | \"medium\" | \"low\";\n issue: string;\n recommendation: string;\n}\n\nexport interface ArchitectureOverview {\n pattern: string;\n layers: string[];\n entryPoints: string[];\n dataFlow: string;\n keyDecisions: string[];\n}\n\nexport interface CodePatternAnalysis {\n components: ComponentPattern[];\n services: ServicePattern[];\n utilities: UtilityPattern[];\n tests: TestPattern;\n customPatterns: string[];\n}\n\nexport interface ComponentPattern {\n type: string;\n count: number;\n examples: string[];\n conventions: string[];\n}\n\nexport interface ServicePattern {\n name: string;\n purpose: string;\n integrations: string[];\n}\n\nexport interface UtilityPattern {\n category: string;\n count: number;\n usage: string;\n}\n\nexport interface TestPattern {\n framework: string;\n coverage?: number;\n types: string[];\n count: number;\n}\n\nexport interface RiskAssessment {\n overall: number; // 0-1 score\n categories: RiskCategory[];\n critical: string[];\n high: string[];\n medium: string[];\n low: string[];\n}\n\nexport interface RiskCategory {\n name: string;\n score: number;\n issues: string[];\n impact: string;\n}\n\nexport interface OpportunityAssessment {\n overall: number; // 0-1 score\n categories: OpportunityCategory[];\n immediate: string[];\n shortTerm: string[];\n longTerm: string[];\n}\n\nexport interface OpportunityCategory {\n name: string;\n potential: number;\n recommendations: string[];\n businessValue: string;\n}\n\nexport interface HealthMetrics {\n typecheck: boolean;\n lint: boolean;\n tests: boolean;\n build: boolean;\n coverage?: number;\n issues: number;\n}\n\nexport interface AdvisoryOptions {\n depth: AdvisoryDepth;\n cwd: string;\n config?: WorkflowConfig;\n includeHealth?: boolean;\n excludePatterns?: string[];\n}\n\n// ============================================================================\n// Advisory Analyzer Class\n// ============================================================================\n\nexport class AdvisoryAnalyzer {\n private options: AdvisoryOptions;\n\n constructor(options: AdvisoryOptions) {\n this.options = options;\n }\n\n /**\n * Run analysis at specified depth level\n */\n async analyze(): Promise<AdvisoryAnalysis> {\n const timestamp = new Date().toISOString();\n const { depth } = this.options;\n\n // All depths start with project overview\n const project = await this.analyzeProject();\n\n if (depth === \"executive\") {\n return this.analyzeExecutive(timestamp, project);\n }\n\n // Quick depth and above include technology and packages\n const technology = await this.analyzeTechnology();\n const packages = await this.analyzePackages();\n const risks = await this.assessRisks(project, technology, packages);\n const opportunities = await this.assessOpportunities(\n project,\n technology,\n packages,\n );\n\n if (depth === \"quick\") {\n return {\n depth,\n timestamp,\n project,\n technology,\n packages,\n risks,\n opportunities,\n };\n }\n\n // Standard depth adds architecture\n const architecture = await this.analyzeArchitecture();\n\n if (depth === \"standard\") {\n const health = this.options.includeHealth\n ? await this.analyzeHealth()\n : undefined;\n\n return {\n depth,\n timestamp,\n project,\n technology,\n packages,\n architecture,\n risks,\n opportunities,\n health,\n };\n }\n\n // Comprehensive depth includes everything\n const codePatterns = await this.analyzeCodePatterns();\n const health = this.options.includeHealth\n ? await this.analyzeHealth()\n : undefined;\n\n return {\n depth,\n timestamp,\n project,\n technology,\n packages,\n architecture,\n codePatterns,\n risks,\n opportunities,\n health,\n };\n }\n\n /**\n * Executive depth: High-level business summary only\n */\n private async analyzeExecutive(\n timestamp: string,\n project: ProjectOverview,\n ): Promise<AdvisoryAnalysis> {\n // Get minimal tech info for categorization\n const packageJson = await this.readPackageJson();\n const deps = packageJson.dependencies || {};\n const devDeps = packageJson.devDependencies || {};\n\n // Categorize at high level\n const techCategories = this.categorizeTechnologies(deps, devDeps);\n const risks = this.calculateExecutiveRisks(project, techCategories);\n const opportunities = this.calculateExecutiveOpportunities(\n project,\n techCategories,\n );\n\n return {\n depth: \"executive\",\n timestamp,\n project,\n technology: {\n language: this.detectLanguage(deps, devDeps),\n runtime: this.detectRuntime(deps, devDeps),\n buildTools: this.detectBuildTools(devDeps),\n platforms: this.detectPlatforms(deps),\n infrastructure: this.detectInfrastructure(deps, devDeps),\n },\n packages: {\n total: Object.keys(deps).length + Object.keys(devDeps).length,\n production: [],\n development: [],\n categories: techCategories,\n outdated: [],\n security: [],\n },\n risks,\n opportunities,\n };\n }\n\n /**\n * Analyze project overview\n */\n private async analyzeProject(): Promise<ProjectOverview> {\n const packageJson = await this.readPackageJson();\n const isMonorepoProject = await isMonorepo(this.options.cwd);\n const fileCount = await this.countFiles();\n const totalLines = await this.countTotalLines();\n\n let workspaceCount: number | undefined;\n if (isMonorepoProject && packageJson.workspaces) {\n workspaceCount = Array.isArray(packageJson.workspaces)\n ? packageJson.workspaces.length\n : 0;\n }\n\n return {\n name: packageJson.name || \"Unknown Project\",\n version: packageJson.version || \"0.0.0\",\n description: packageJson.description,\n isMonorepo: isMonorepoProject,\n packageManager: await detectPackageManager(this.options.cwd),\n workspaceCount,\n fileCount,\n totalLines,\n };\n }\n\n /**\n * Analyze technology stack\n */\n private async analyzeTechnology(): Promise<TechnologyStack> {\n const packageJson = await this.readPackageJson();\n const deps = packageJson.dependencies || {};\n const devDeps = packageJson.devDependencies || {};\n\n const projectAnalysis = await analyzeProject(this.options.cwd);\n\n return {\n framework: projectAnalysis.framework,\n frameworkVersion:\n deps[projectAnalysis.framework || \"\"] ||\n devDeps[projectAnalysis.framework || \"\"],\n language: this.detectLanguage(deps, devDeps),\n runtime: this.detectRuntime(deps, devDeps),\n buildTools: this.detectBuildTools(devDeps),\n platforms: this.detectPlatforms(deps),\n infrastructure: this.detectInfrastructure(deps, devDeps),\n };\n }\n\n /**\n * Analyze packages in detail\n */\n private async analyzePackages(): Promise<PackageAnalysis> {\n const packageJson = await this.readPackageJson();\n const deps = packageJson.dependencies || {};\n const devDeps = packageJson.devDependencies || {};\n\n const production = this.analyzeDependencies(deps, \"production\");\n const development = this.analyzeDependencies(devDeps, \"development\");\n const categories = this.categorizeTechnologies(deps, devDeps);\n\n return {\n total: Object.keys(deps).length + Object.keys(devDeps).length,\n production,\n development,\n categories,\n outdated: [], // TODO: Implement outdated check\n security: [], // TODO: Implement security audit\n };\n }\n\n /**\n * Analyze dependencies and categorize them\n */\n private analyzeDependencies(\n deps: Record<string, string>,\n _type: \"production\" | \"development\",\n ): DependencyInfo[] {\n return Object.entries(deps).map(([name, version]) => {\n const category = this.categorizeDependency(name);\n const info = this.getDependencyInfo(name, category);\n\n return {\n name,\n version,\n category,\n ...info,\n };\n });\n }\n\n /**\n * Categorize a dependency\n */\n private categorizeDependency(name: string): string {\n // UI Frameworks\n if (\n [\"react\", \"vue\", \"angular\", \"svelte\", \"solid-js\"].some((fw) =>\n name.includes(fw),\n )\n ) {\n return \"UI Framework\";\n }\n\n // Meta-frameworks\n if (\n [\"next\", \"nuxt\", \"remix\", \"sveltekit\", \"astro\"].some((fw) =>\n name.includes(fw),\n )\n ) {\n return \"Meta-Framework\";\n }\n\n // State Management\n if (\n [\"redux\", \"zustand\", \"jotai\", \"recoil\", \"mobx\", \"pinia\"].includes(name)\n ) {\n return \"State Management\";\n }\n\n // API/Data Fetching\n if (\n [\n \"axios\",\n \"fetch\",\n \"swr\",\n \"react-query\",\n \"@tanstack/react-query\",\n \"apollo\",\n \"urql\",\n ].some((lib) => name.includes(lib))\n ) {\n return \"API/Data Fetching\";\n }\n\n // Routing\n if (\n [\"react-router\", \"vue-router\", \"@tanstack/router\"].some((r) =>\n name.includes(r),\n )\n ) {\n return \"Routing\";\n }\n\n // Forms\n if (\n [\"formik\", \"react-hook-form\", \"final-form\"].some((f) => name.includes(f))\n ) {\n return \"Forms\";\n }\n\n // Styling\n if (\n [\n \"styled-components\",\n \"emotion\",\n \"tailwind\",\n \"sass\",\n \"less\",\n \"@mui\",\n \"antd\",\n \"chakra-ui\",\n ].some((s) => name.includes(s))\n ) {\n return \"Styling/UI Components\";\n }\n\n // Testing\n if (\n [\n \"vitest\",\n \"jest\",\n \"mocha\",\n \"chai\",\n \"testing-library\",\n \"playwright\",\n \"cypress\",\n ].some((t) => name.includes(t))\n ) {\n return \"Testing\";\n }\n\n // Build Tools\n if (\n [\"vite\", \"webpack\", \"rollup\", \"esbuild\", \"turbo\", \"tsup\"].includes(name)\n ) {\n return \"Build Tools\";\n }\n\n // Linting/Formatting\n if ([\"eslint\", \"prettier\", \"stylelint\"].some((l) => name.includes(l))) {\n return \"Code Quality\";\n }\n\n // Database\n if (\n [\"prisma\", \"drizzle\", \"mongoose\", \"sequelize\", \"typeorm\", \"knex\"].some(\n (db) => name.includes(db),\n )\n ) {\n return \"Database ORM\";\n }\n\n // Authentication\n if (\n [\"next-auth\", \"auth0\", \"supabase\", \"clerk\"].some((a) => name.includes(a))\n ) {\n return \"Authentication\";\n }\n\n // Deployment/Infrastructure\n if (\n [\"vercel\", \"netlify\", \"aws-sdk\", \"@google-cloud\"].some((d) =>\n name.includes(d),\n )\n ) {\n return \"Infrastructure\";\n }\n\n // Analytics\n if (\n [\"@analytics\", \"posthog\", \"mixpanel\", \"segment\"].some((a) =>\n name.includes(a),\n )\n ) {\n return \"Analytics\";\n }\n\n return \"Other\";\n }\n\n /**\n * Get detailed info about a dependency\n */\n private getDependencyInfo(\n name: string,\n category: string,\n ): Omit<DependencyInfo, \"name\" | \"version\" | \"category\"> {\n // TODO: This could be enhanced with a knowledge base or API lookup\n const defaultInfo = {\n purpose: `${category} library`,\n businessValue: \"Supports application functionality\",\n usagePatterns: [\"Used throughout the application\"],\n };\n\n // Enhanced info for common packages\n const knownPackages: Record<\n string,\n Omit<DependencyInfo, \"name\" | \"version\" | \"category\">\n > = {\n react: {\n purpose: \"Core UI library for building component-based interfaces\",\n businessValue:\n \"Enables fast, interactive user experiences with reusable components\",\n usagePatterns: [\n \"Component rendering\",\n \"State management\",\n \"Event handling\",\n ],\n alternatives: [\"Vue\", \"Svelte\", \"Solid\"],\n },\n next: {\n purpose: \"React meta-framework with SSR, routing, and optimization\",\n businessValue: \"Improves SEO, performance, and developer productivity\",\n usagePatterns: [\n \"Server-side rendering\",\n \"API routes\",\n \"File-based routing\",\n ],\n alternatives: [\"Remix\", \"Gatsby\"],\n },\n typescript: {\n purpose: \"Static type checking for JavaScript\",\n businessValue:\n \"Reduces bugs, improves code quality, and enhances developer experience\",\n usagePatterns: [\"Type definitions\", \"Compile-time checks\"],\n },\n // Add more as needed\n };\n\n return knownPackages[name] || defaultInfo;\n }\n\n /**\n * Categorize technologies at high level\n */\n private categorizeTechnologies(\n deps: Record<string, string>,\n devDeps: Record<string, string>,\n ): PackageCategory[] {\n const allDeps = { ...deps, ...devDeps };\n const categories = new Map<string, string[]>();\n\n Object.keys(allDeps).forEach((name) => {\n const category = this.categorizeDependency(name);\n if (!categories.has(category)) {\n categories.set(category, []);\n }\n categories.get(category)!.push(name);\n });\n\n return Array.from(categories.entries()).map(([name, packages]) => ({\n name,\n count: packages.length,\n packages,\n businessImpact: this.getCategoryBusinessImpact(name),\n }));\n }\n\n /**\n * Get business impact description for a category\n */\n private getCategoryBusinessImpact(category: string): string {\n const impacts: Record<string, string> = {\n \"UI Framework\":\n \"Core user experience - directly impacts customer satisfaction and engagement\",\n \"Meta-Framework\":\n \"Application performance and SEO - affects discoverability and user retention\",\n \"State Management\":\n \"Data consistency - ensures reliable application behavior\",\n \"API/Data Fetching\":\n \"Backend integration - enables core business functionality\",\n Routing: \"Navigation - affects user flow and conversion rates\",\n Forms: \"Data collection - critical for user onboarding and conversions\",\n \"Styling/UI Components\":\n \"Visual design - impacts brand perception and usability\",\n Testing: \"Quality assurance - reduces production bugs and support costs\",\n \"Build Tools\":\n \"Development efficiency - affects time-to-market for new features\",\n \"Code Quality\":\n \"Maintainability - reduces technical debt and long-term costs\",\n \"Database ORM\": \"Data persistence - ensures business data integrity\",\n Authentication:\n \"Security and user management - protects business and customer data\",\n Infrastructure:\n \"Hosting and scalability - affects uptime and operational costs\",\n Analytics: \"Business intelligence - enables data-driven decision making\",\n };\n\n return impacts[category] || \"Supports various application features\";\n }\n\n /**\n * Analyze architecture patterns\n */\n private async analyzeArchitecture(): Promise<ArchitectureOverview> {\n const files = await this.getProjectFiles();\n const entryPoints = this.detectEntryPoints(files);\n const pattern = this.detectArchitecturePattern(files);\n const layers = this.detectLayers(files);\n\n return {\n pattern,\n layers,\n entryPoints,\n dataFlow: this.analyzeDataFlow(files),\n keyDecisions: this.extractKeyDecisions(files),\n };\n }\n\n /**\n * Analyze code patterns in detail\n */\n private async analyzeCodePatterns(): Promise<CodePatternAnalysis> {\n const files = await this.getProjectFiles();\n\n return {\n components: await this.analyzeComponents(files),\n services: await this.analyzeServices(files),\n utilities: await this.analyzeUtilities(files),\n tests: await this.analyzeTests(files),\n customPatterns: await this.detectCustomPatterns(files),\n };\n }\n\n /**\n * Assess risks\n */\n private async assessRisks(\n project: ProjectOverview,\n technology: TechnologyStack,\n packages: PackageAnalysis,\n ): Promise<RiskAssessment> {\n const categories: RiskCategory[] = [];\n const critical: string[] = [];\n const high: string[] = [];\n const medium: string[] = [];\n const low: string[] = [];\n\n // Dependency risk\n const depRisk = this.assessDependencyRisk(packages);\n categories.push(depRisk);\n this.categorizeRiskItems(depRisk, critical, high, medium, low);\n\n // Technology obsolescence risk\n const techRisk = this.assessTechnologyRisk(technology);\n categories.push(techRisk);\n this.categorizeRiskItems(techRisk, critical, high, medium, low);\n\n // Project complexity risk\n const complexityRisk = this.assessComplexityRisk(project);\n categories.push(complexityRisk);\n this.categorizeRiskItems(complexityRisk, critical, high, medium, low);\n\n const overall =\n categories.reduce((sum, cat) => sum + cat.score, 0) / categories.length;\n\n return { overall, categories, critical, high, medium, low };\n }\n\n /**\n * Assess opportunities\n */\n private async assessOpportunities(\n project: ProjectOverview,\n technology: TechnologyStack,\n packages: PackageAnalysis,\n ): Promise<OpportunityAssessment> {\n const categories: OpportunityCategory[] = [];\n const immediate: string[] = [];\n const shortTerm: string[] = [];\n const longTerm: string[] = [];\n\n // Modernization opportunities\n const modernization = this.assessModernizationOpportunities(\n technology,\n packages,\n );\n categories.push(modernization);\n this.categorizeOpportunityItems(\n modernization,\n immediate,\n shortTerm,\n longTerm,\n );\n\n // Optimization opportunities\n const optimization = this.assessOptimizationOpportunities(project);\n categories.push(optimization);\n this.categorizeOpportunityItems(\n optimization,\n immediate,\n shortTerm,\n longTerm,\n );\n\n // Growth opportunities\n const growth = this.assessGrowthOpportunities(technology, packages);\n categories.push(growth);\n this.categorizeOpportunityItems(growth, immediate, shortTerm, longTerm);\n\n const overall =\n categories.reduce((sum, cat) => sum + cat.potential, 0) /\n categories.length;\n\n return { overall, categories, immediate, shortTerm, longTerm };\n }\n\n /**\n * Analyze health metrics\n */\n private async analyzeHealth(): Promise<HealthMetrics> {\n // TODO: Integrate with doctor and verify commands\n return {\n typecheck: false,\n lint: false,\n tests: false,\n build: false,\n issues: 0,\n };\n }\n\n // ============================================================================\n // Helper Methods\n // ============================================================================\n\n private async readPackageJson(): Promise<any> {\n const pkgPath = join(this.options.cwd, \"package.json\");\n if (!existsSync(pkgPath)) {\n throw new Error(\"package.json not found\");\n }\n const content = await readFile(pkgPath, \"utf-8\");\n return JSON.parse(content);\n }\n\n private async countFiles(): Promise<number> {\n const patterns = [\"**/*.{ts,tsx,js,jsx,py,go,rs,java}\"];\n const files = await fg(patterns, {\n cwd: this.options.cwd,\n ignore: [\n \"node_modules/**\",\n \"dist/**\",\n \"build/**\",\n \".next/**\",\n \"coverage/**\",\n ],\n });\n return files.length;\n }\n\n private async countTotalLines(): Promise<number> {\n // Quick estimate: avg 50 lines per file\n const fileCount = await this.countFiles();\n return fileCount * 50;\n }\n\n private detectLanguage(\n deps: Record<string, string>,\n devDeps: Record<string, string>,\n ): string {\n if (devDeps.typescript || deps.typescript) return \"TypeScript\";\n if (\n Object.keys(deps).some((d) => d.includes(\"react\") || d.includes(\"vue\"))\n ) {\n return \"JavaScript\";\n }\n return \"JavaScript\";\n }\n\n private detectRuntime(\n deps: Record<string, string>,\n devDeps: Record<string, string>,\n ): string {\n if (deps.next || devDeps.next) return \"Node.js (Next.js)\";\n if (Object.keys(deps).some((d) => d.includes(\"react\"))) {\n return \"Browser + Node.js\";\n }\n return \"Node.js\";\n }\n\n private detectBuildTools(devDeps: Record<string, string>): string[] {\n const tools: string[] = [];\n if (devDeps.vite) tools.push(\"Vite\");\n if (devDeps.webpack) tools.push(\"Webpack\");\n if (devDeps.rollup) tools.push(\"Rollup\");\n if (devDeps.esbuild) tools.push(\"esbuild\");\n if (devDeps.turbo || devDeps.turborepo) tools.push(\"Turborepo\");\n if (devDeps.tsup) tools.push(\"tsup\");\n return tools;\n }\n\n private detectPlatforms(deps: Record<string, string>): string[] {\n const platforms: string[] = [];\n if (deps.react || deps.next) platforms.push(\"Web\");\n if (deps[\"react-native\"]) platforms.push(\"Mobile (React Native)\");\n if (deps.electron) platforms.push(\"Desktop (Electron)\");\n return platforms.length > 0 ? platforms : [\"Web\"];\n }\n\n private detectInfrastructure(\n deps: Record<string, string>,\n devDeps: Record<string, string>,\n ): string[] {\n const infra: string[] = [];\n const allDeps = { ...deps, ...devDeps };\n\n if (allDeps.vercel || allDeps[\"@vercel/node\"]) infra.push(\"Vercel\");\n if (Object.keys(allDeps).some((d) => d.includes(\"aws-\"))) {\n infra.push(\"AWS\");\n }\n if (Object.keys(allDeps).some((d) => d.includes(\"@google-cloud\"))) {\n infra.push(\"Google Cloud\");\n }\n if (allDeps.netlify) infra.push(\"Netlify\");\n if (allDeps.supabase || allDeps[\"@supabase/supabase-js\"]) {\n infra.push(\"Supabase\");\n }\n if (allDeps.firebase || allDeps[\"firebase-admin\"]) infra.push(\"Firebase\");\n\n return infra;\n }\n\n private calculateExecutiveRisks(\n project: ProjectOverview,\n categories: PackageCategory[],\n ): RiskAssessment {\n const risks: string[] = [];\n let overallScore = 0;\n\n // Simple heuristics for executive view\n if (project.fileCount > 1000) {\n risks.push(\n \"Large codebase may require significant maintenance resources\",\n );\n overallScore += 0.3;\n }\n\n if (categories.length > 15) {\n risks.push(\n \"High number of technology categories indicates potential complexity\",\n );\n overallScore += 0.2;\n }\n\n const totalPackages = categories.reduce((sum, cat) => sum + cat.count, 0);\n if (totalPackages > 100) {\n risks.push(\n \"Large dependency footprint increases security and maintenance burden\",\n );\n overallScore += 0.3;\n }\n\n overallScore = Math.min(overallScore, 1);\n\n return {\n overall: overallScore,\n categories: [\n {\n name: \"Technical Complexity\",\n score: overallScore,\n issues: risks,\n impact: \"May affect development velocity and operational costs\",\n },\n ],\n critical: [],\n high: overallScore > 0.7 ? risks : [],\n medium: overallScore > 0.4 && overallScore <= 0.7 ? risks : [],\n low: overallScore <= 0.4 ? risks : [],\n };\n }\n\n private calculateExecutiveOpportunities(\n _project: ProjectOverview,\n categories: PackageCategory[],\n ): OpportunityAssessment {\n const opportunities: string[] = [];\n let overallScore = 0.5;\n\n // Modern stack indicates good foundation\n const hasModernFramework = categories.some((cat) =>\n cat.name.includes(\"Meta-Framework\"),\n );\n if (hasModernFramework) {\n opportunities.push(\n \"Modern framework provides foundation for rapid feature development\",\n );\n overallScore += 0.2;\n }\n\n // Testing infrastructure\n const hasTestingTools = categories.some((cat) => cat.name === \"Testing\");\n if (hasTestingTools) {\n opportunities.push(\n \"Testing infrastructure enables quality-driven expansion\",\n );\n overallScore += 0.1;\n }\n\n return {\n overall: Math.min(overallScore, 1),\n categories: [\n {\n name: \"Growth Potential\",\n potential: overallScore,\n recommendations: opportunities,\n businessValue:\n \"Strong foundation for scaling features and market reach\",\n },\n ],\n immediate: [],\n shortTerm: opportunities,\n longTerm: [],\n };\n }\n\n private assessDependencyRisk(packages: PackageAnalysis): RiskCategory {\n let score = 0;\n const issues: string[] = [];\n\n if (packages.total > 100) {\n score += 0.3;\n issues.push(`High dependency count (${packages.total} packages)`);\n }\n\n if (packages.outdated.length > 10) {\n score += 0.3;\n issues.push(`${packages.outdated.length} outdated packages`);\n }\n\n if (packages.security.length > 0) {\n score += 0.4;\n issues.push(`${packages.security.length} security vulnerabilities`);\n }\n\n return {\n name: \"Dependency Management\",\n score: Math.min(score, 1),\n issues,\n impact: \"Affects security, stability, and maintenance costs\",\n };\n }\n\n private assessTechnologyRisk(technology: TechnologyStack): RiskCategory {\n let score = 0;\n const issues: string[] = [];\n\n // Check for modern vs legacy frameworks\n const legacyFrameworks = [\"angular.js\", \"backbone\", \"ember\"];\n if (\n technology.framework &&\n legacyFrameworks.some((f) => technology.framework?.includes(f))\n ) {\n score += 0.5;\n issues.push(\"Legacy framework may limit future development\");\n }\n\n return {\n name: \"Technology Stack\",\n score,\n issues,\n impact: \"May affect ability to attract talent and adopt new features\",\n };\n }\n\n private assessComplexityRisk(project: ProjectOverview): RiskCategory {\n let score = 0;\n const issues: string[] = [];\n\n if (project.fileCount > 1000) {\n score += 0.2;\n issues.push(\"Large codebase requires careful management\");\n }\n\n if (project.isMonorepo && (project.workspaceCount || 0) > 10) {\n score += 0.2;\n issues.push(\"Complex monorepo structure\");\n }\n\n return {\n name: \"Project Complexity\",\n score,\n issues,\n impact: \"Affects onboarding time and development velocity\",\n };\n }\n\n private assessModernizationOpportunities(\n _technology: TechnologyStack,\n packages: PackageAnalysis,\n ): OpportunityCategory {\n const recommendations: string[] = [];\n let potential = 0.5;\n\n // Check for upgrade opportunities\n if (packages.outdated.length > 0) {\n recommendations.push(\n \"Upgrade dependencies to access new features and improvements\",\n );\n potential += 0.2;\n }\n\n return {\n name: \"Modernization\",\n potential: Math.min(potential, 1),\n recommendations,\n businessValue: \"Improved performance, security, and developer experience\",\n };\n }\n\n private assessOptimizationOpportunities(\n project: ProjectOverview,\n ): OpportunityCategory {\n const recommendations: string[] = [];\n\n if (project.fileCount > 500) {\n recommendations.push(\n \"Consider code splitting and lazy loading strategies\",\n );\n }\n\n return {\n name: \"Performance Optimization\",\n potential: 0.6,\n recommendations,\n businessValue: \"Faster load times and better user experience\",\n };\n }\n\n private assessGrowthOpportunities(\n _technology: TechnologyStack,\n packages: PackageAnalysis,\n ): OpportunityCategory {\n const recommendations: string[] = [];\n let potential = 0.5;\n\n const hasAnalytics = packages.categories.some((cat) =>\n cat.name.includes(\"Analytics\"),\n );\n if (!hasAnalytics) {\n recommendations.push(\"Add analytics to enable data-driven decisions\");\n potential += 0.2;\n }\n\n return {\n name: \"Growth & Expansion\",\n potential: Math.min(potential, 1),\n recommendations,\n businessValue: \"Data-driven growth and improved user insights\",\n };\n }\n\n private categorizeRiskItems(\n risk: RiskCategory,\n critical: string[],\n high: string[],\n medium: string[],\n low: string[],\n ): void {\n if (risk.score > 0.7) {\n critical.push(...risk.issues);\n } else if (risk.score > 0.5) {\n high.push(...risk.issues);\n } else if (risk.score > 0.3) {\n medium.push(...risk.issues);\n } else {\n low.push(...risk.issues);\n }\n }\n\n private categorizeOpportunityItems(\n opportunity: OpportunityCategory,\n immediate: string[],\n shortTerm: string[],\n longTerm: string[],\n ): void {\n if (opportunity.potential > 0.7) {\n immediate.push(...opportunity.recommendations);\n } else if (opportunity.potential > 0.5) {\n shortTerm.push(...opportunity.recommendations);\n } else {\n longTerm.push(...opportunity.recommendations);\n }\n }\n\n private async getProjectFiles(): Promise<string[]> {\n const patterns = [\"**/*.{ts,tsx,js,jsx}\"];\n return await fg(patterns, {\n cwd: this.options.cwd,\n ignore: this.options.excludePatterns || [\n \"node_modules/**\",\n \"dist/**\",\n \"build/**\",\n \".next/**\",\n \"coverage/**\",\n ],\n });\n }\n\n private detectEntryPoints(files: string[]): string[] {\n const entryPoints = files.filter(\n (f) =>\n f.includes(\"index.\") ||\n f.includes(\"main.\") ||\n f.includes(\"app.\") ||\n f.includes(\"_app.\") ||\n f.includes(\"layout.\"),\n );\n return entryPoints.slice(0, 5);\n }\n\n private detectArchitecturePattern(files: string[]): string {\n const hasComponents = files.some((f) => f.includes(\"components/\"));\n const hasPages = files.some(\n (f) => f.includes(\"pages/\") || f.includes(\"app/\"),\n );\n const hasServices = files.some((f) => f.includes(\"services/\"));\n\n if (hasComponents && hasPages && hasServices) {\n return \"Layered Architecture (Pages → Components → Services)\";\n }\n if (hasComponents && hasPages) {\n return \"Component-Based Architecture\";\n }\n return \"Standard Application Structure\";\n }\n\n private detectLayers(files: string[]): string[] {\n const layers: string[] = [];\n if (files.some((f) => f.includes(\"pages/\") || f.includes(\"app/\"))) {\n layers.push(\"Presentation (Pages/Routes)\");\n }\n if (files.some((f) => f.includes(\"components/\"))) {\n layers.push(\"UI Components\");\n }\n if (files.some((f) => f.includes(\"services/\") || f.includes(\"api/\"))) {\n layers.push(\"Business Logic/Services\");\n }\n if (files.some((f) => f.includes(\"lib/\") || f.includes(\"utils/\"))) {\n layers.push(\"Utilities/Helpers\");\n }\n if (files.some((f) => f.includes(\"models/\") || f.includes(\"types/\"))) {\n layers.push(\"Data Models\");\n }\n return layers;\n }\n\n private analyzeDataFlow(files: string[]): string {\n const hasStateManagement = files.some(\n (f) => f.includes(\"store\") || f.includes(\"context\"),\n );\n const hasApi = files.some(\n (f) => f.includes(\"api\") || f.includes(\"services\"),\n );\n\n if (hasStateManagement && hasApi) {\n return \"API → Services → State Management → Components\";\n }\n if (hasApi) {\n return \"API → Components (Direct)\";\n }\n return \"Props-based Component Communication\";\n }\n\n private extractKeyDecisions(files: string[]): string[] {\n const decisions: string[] = [];\n\n if (files.some((f) => f.includes(\".ts\") || f.includes(\".tsx\"))) {\n decisions.push(\"TypeScript for type safety\");\n }\n if (files.some((f) => f.includes(\"app/\") && !f.includes(\"pages/\"))) {\n decisions.push(\"App Router architecture (Next.js)\");\n }\n if (files.some((f) => f.includes(\"server\") || f.includes(\"api\"))) {\n decisions.push(\"API routes for backend functionality\");\n }\n\n return decisions;\n }\n\n private async analyzeComponents(\n files: string[],\n ): Promise<ComponentPattern[]> {\n const components = files.filter((f) => f.includes(\"components/\"));\n const patterns: ComponentPattern[] = [];\n\n // Detect component types\n const ui = components.filter(\n (f) => f.includes(\"/ui/\") || f.includes(\"/common/\"),\n );\n const feature = components.filter((f) =>\n [\"features/\", \"modules/\"].some((dir) => f.includes(dir)),\n );\n\n if (ui.length > 0) {\n patterns.push({\n type: \"UI Components\",\n count: ui.length,\n examples: ui.slice(0, 3),\n conventions: [\"Reusable\", \"Presentation-focused\"],\n });\n }\n\n if (feature.length > 0) {\n patterns.push({\n type: \"Feature Components\",\n count: feature.length,\n examples: feature.slice(0, 3),\n conventions: [\"Business logic\", \"Domain-specific\"],\n });\n }\n\n return patterns;\n }\n\n private async analyzeServices(files: string[]): Promise<ServicePattern[]> {\n const services = files.filter(\n (f) => f.includes(\"services/\") || f.includes(\"api/\"),\n );\n\n return services.slice(0, 5).map((file) => ({\n name: file,\n purpose: \"API integration or business logic\",\n integrations: [],\n }));\n }\n\n private async analyzeUtilities(files: string[]): Promise<UtilityPattern[]> {\n const utils = files.filter(\n (f) => f.includes(\"utils/\") || f.includes(\"lib/\"),\n );\n\n return [\n {\n category: \"Utilities\",\n count: utils.length,\n usage: \"Helper functions and shared utilities\",\n },\n ];\n }\n\n private async analyzeTests(files: string[]): Promise<TestPattern> {\n const tests = files.filter(\n (f) => f.includes(\".test.\") || f.includes(\".spec.\"),\n );\n\n const hasVitest = tests.some((f) => f.includes(\"vitest\"));\n const hasJest = tests.some((f) => f.includes(\"jest\"));\n\n return {\n framework: hasVitest ? \"Vitest\" : hasJest ? \"Jest\" : \"Unknown\",\n count: tests.length,\n types: [\"Unit tests\"],\n };\n }\n\n private async detectCustomPatterns(files: string[]): Promise<string[]> {\n const patterns: string[] = [];\n\n if (files.some((f) => f.includes(\"hooks/\"))) {\n patterns.push(\"Custom React Hooks\");\n }\n if (files.some((f) => f.includes(\"middleware\"))) {\n patterns.push(\"Middleware Pattern\");\n }\n if (files.some((f) => f.includes(\"providers\"))) {\n patterns.push(\"Context Providers\");\n }\n\n return patterns;\n }\n}\n","/**\n * Advisory Board Question Generator\n *\n * Transforms technical analysis findings into strategic questions\n * formatted for executive/advisory board presentation.\n *\n * Categories:\n * - Technology Decisions\n * - Package Utilization\n * - Platform Strategy\n * - Business Alignment\n * - Technical Debt\n * - Growth Opportunities\n */\n\nimport type { AdvisoryAnalysis, PackageCategory } from \"./advisory-analyzer.js\";\nimport type { AdvisoryConfig, AdvisoryQuestion } from \"../config/schema.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface BoardQuestion {\n category: string;\n question: string;\n context: string;\n findings: string[];\n recommendations: string[];\n priority: \"high\" | \"medium\" | \"low\";\n businessImpact: string;\n}\n\nexport interface QuestionSet {\n questions: BoardQuestion[];\n summary: QuestionSummary;\n}\n\nexport interface QuestionSummary {\n totalQuestions: number;\n highPriority: number;\n mediumPriority: number;\n lowPriority: number;\n categories: string[];\n}\n\n// ============================================================================\n// Question Generator Class\n// ============================================================================\n\nexport class QuestionGenerator {\n private analysis: AdvisoryAnalysis;\n private config?: AdvisoryConfig;\n\n constructor(analysis: AdvisoryAnalysis, config?: AdvisoryConfig) {\n this.analysis = analysis;\n this.config = config;\n }\n\n /**\n * Generate all advisory board questions\n */\n generate(): QuestionSet {\n const questions: BoardQuestion[] = [];\n\n // Generate questions for each category\n questions.push(...this.generateTechnologyQuestions());\n questions.push(...this.generatePackageQuestions());\n questions.push(...this.generatePlatformQuestions());\n questions.push(...this.generateBusinessQuestions());\n questions.push(...this.generateTechnicalDebtQuestions());\n questions.push(...this.generateGrowthQuestions());\n\n // Add custom questions from config\n if (this.config?.customQuestions) {\n questions.push(\n ...this.formatCustomQuestions(this.config.customQuestions),\n );\n }\n\n // Sort by priority\n const sorted = this.sortByPriority(questions);\n\n return {\n questions: sorted,\n summary: this.generateSummary(sorted),\n };\n }\n\n /**\n * Technology Decisions questions\n */\n private generateTechnologyQuestions(): BoardQuestion[] {\n const questions: BoardQuestion[] = [];\n const { technology, project } = this.analysis;\n\n if (technology.framework) {\n questions.push({\n category: \"Technology Decisions\",\n question: `Why was ${technology.framework} chosen as the primary framework, and does it still align with our strategic goals?`,\n context: `Project uses ${technology.framework}${technology.frameworkVersion ? ` v${technology.frameworkVersion}` : \"\"} as the foundation`,\n findings: [\n `Framework: ${technology.framework}`,\n `Language: ${technology.language}`,\n `Runtime: ${technology.runtime}`,\n ],\n recommendations: [\n \"Validate framework continues to meet performance and scalability needs\",\n \"Assess community support and long-term viability\",\n \"Consider migration costs vs. benefits if alternatives exist\",\n ],\n priority: \"high\",\n businessImpact:\n \"Framework choice affects development velocity, talent acquisition, and long-term maintenance costs\",\n });\n }\n\n if (technology.buildTools && technology.buildTools.length > 0) {\n questions.push({\n category: \"Technology Decisions\",\n question: `How are our build tools (${technology.buildTools.join(\", \")}) optimizing development workflow and deployment efficiency?`,\n context: `Build pipeline uses ${technology.buildTools.join(\", \")}`,\n findings: technology.buildTools.map(\n (tool) => `Using ${tool} for build process`,\n ),\n recommendations: [\n \"Measure build time impacts on CI/CD pipeline\",\n \"Evaluate if modern alternatives could improve developer experience\",\n \"Consider caching strategies to optimize build performance\",\n ],\n priority: \"medium\",\n businessImpact:\n \"Build efficiency directly impacts time-to-market for new features\",\n });\n }\n\n if (project.isMonorepo) {\n questions.push({\n category: \"Technology Decisions\",\n question: `Is the monorepo structure providing expected benefits in code sharing and deployment coordination?`,\n context: `Project uses monorepo with ${project.workspaceCount || \"multiple\"} workspaces`,\n findings: [\n `Monorepo with ${project.workspaceCount} packages`,\n `Total ${project.fileCount} files managed`,\n ],\n recommendations: [\n \"Assess if shared code is properly abstracted and reused\",\n \"Evaluate build caching and selective deployment strategies\",\n \"Consider workspace organization for scaling\",\n ],\n priority: \"medium\",\n businessImpact:\n \"Monorepo architecture affects team collaboration and deployment complexity\",\n });\n }\n\n return questions;\n }\n\n /**\n * Package Utilization questions\n */\n private generatePackageQuestions(): BoardQuestion[] {\n const questions: BoardQuestion[] = [];\n const { packages } = this.analysis;\n\n if (packages.total > 80) {\n questions.push({\n category: \"Package Utilization\",\n question: `With ${packages.total} dependencies, are we maintaining optimal balance between functionality and maintenance burden?`,\n context: `Project has ${packages.production.length} production and ${packages.development.length} development dependencies`,\n findings: [\n `Total packages: ${packages.total}`,\n `Production: ${packages.production.length}`,\n `Development: ${packages.development.length}`,\n ],\n recommendations: [\n \"Audit for unused or redundant packages\",\n \"Evaluate if critical functionality should be internalized\",\n \"Implement dependency update strategy\",\n ],\n priority: packages.total > 150 ? \"high\" : \"medium\",\n businessImpact:\n \"Dependency count affects security surface area and maintenance costs\",\n });\n }\n\n // Category-specific questions\n if (packages.categories.length > 0) {\n const topCategories = packages.categories\n .sort((a, b) => b.count - a.count)\n .slice(0, 3);\n\n topCategories.forEach((cat) => {\n if (cat.count > 5) {\n questions.push({\n category: \"Package Utilization\",\n question: `How are we leveraging our ${cat.count} ${cat.name} packages to deliver business value?`,\n context: `${cat.name}: ${cat.packages.slice(0, 3).join(\", \")}${cat.count > 3 ? `, +${cat.count - 3} more` : \"\"}`,\n findings: [\n `${cat.count} packages in ${cat.name} category`,\n cat.businessImpact,\n ],\n recommendations: this.getCategoryRecommendations(cat),\n priority: this.getCategoryPriority(cat),\n businessImpact: cat.businessImpact,\n });\n }\n });\n }\n\n // Security and outdated packages\n if (packages.security && packages.security.length > 0) {\n const criticalCount = packages.security.filter(\n (s) => s.severity === \"critical\",\n ).length;\n\n questions.push({\n category: \"Package Utilization\",\n question: `What is our strategy for addressing ${packages.security.length} identified security vulnerabilities${criticalCount > 0 ? ` (${criticalCount} critical)` : \"\"}?`,\n context: \"Security audit identified vulnerabilities in dependencies\",\n findings: packages.security.map(\n (s) => `${s.package}: ${s.severity} - ${s.issue}`,\n ),\n recommendations: packages.security.map((s) => s.recommendation),\n priority: criticalCount > 0 ? \"high\" : \"medium\",\n businessImpact:\n \"Security vulnerabilities pose risk to customer data and business operations\",\n });\n }\n\n return questions;\n }\n\n /**\n * Platform Strategy questions\n */\n private generatePlatformQuestions(): BoardQuestion[] {\n const questions: BoardQuestion[] = [];\n const { technology } = this.analysis;\n\n if (technology.platforms && technology.platforms.length > 0) {\n questions.push({\n category: \"Platform Strategy\",\n question: `Are our platform choices (${technology.platforms.join(\", \")}) aligned with target market and growth plans?`,\n context: `Currently deployed on ${technology.platforms.join(\" + \")}`,\n findings: technology.platforms.map((p) => `Supports ${p} platform`),\n recommendations: [\n \"Validate platform coverage matches user demographics\",\n \"Assess cross-platform development efficiency\",\n \"Consider platform-specific optimization opportunities\",\n ],\n priority: \"medium\",\n businessImpact:\n \"Platform strategy determines market reach and development costs\",\n });\n }\n\n if (technology.infrastructure && technology.infrastructure.length > 0) {\n questions.push({\n category: \"Platform Strategy\",\n question: `How is our infrastructure choice (${technology.infrastructure.join(\", \")}) supporting scalability and cost efficiency?`,\n context: `Infrastructure: ${technology.infrastructure.join(\", \")}`,\n findings: technology.infrastructure.map((i) => `Deployed on ${i}`),\n recommendations: [\n \"Monitor infrastructure costs vs. usage patterns\",\n \"Evaluate auto-scaling and redundancy capabilities\",\n \"Consider multi-region deployment for global users\",\n ],\n priority: \"high\",\n businessImpact:\n \"Infrastructure directly impacts operational costs, uptime, and scalability\",\n });\n }\n\n return questions;\n }\n\n /**\n * Business Alignment questions\n */\n private generateBusinessQuestions(): BoardQuestion[] {\n const questions: BoardQuestion[] = [];\n const { packages } = this.analysis;\n\n // Analytics\n const hasAnalytics = packages.categories.some((cat) =>\n cat.name.toLowerCase().includes(\"analytics\"),\n );\n\n if (!hasAnalytics) {\n questions.push({\n category: \"Business Alignment\",\n question:\n \"Why don't we have analytics infrastructure, and how are we making data-driven product decisions?\",\n context: \"No analytics packages detected in the project\",\n findings: [\"Missing analytics implementation\"],\n recommendations: [\n \"Implement analytics to track user behavior and feature adoption\",\n \"Set up conversion funnels and key metric tracking\",\n \"Enable A/B testing capabilities for product experiments\",\n ],\n priority: \"high\",\n businessImpact:\n \"Lack of analytics limits ability to measure ROI and optimize user experience\",\n });\n }\n\n // Authentication\n const hasAuth = packages.categories.some((cat) =>\n cat.name.toLowerCase().includes(\"auth\"),\n );\n\n if (hasAuth) {\n const authCat = packages.categories.find((cat) =>\n cat.name.toLowerCase().includes(\"auth\"),\n )!;\n questions.push({\n category: \"Business Alignment\",\n question: `How is our authentication solution (${authCat.packages.join(\", \")}) supporting user onboarding and security requirements?`,\n context: `Using ${authCat.packages.join(\" + \")} for authentication`,\n findings: authCat.packages.map((p) => `Auth provider: ${p}`),\n recommendations: [\n \"Measure authentication success rates and friction points\",\n \"Ensure compliance with security standards (SOC2, GDPR, etc.)\",\n \"Evaluate social login options to reduce signup friction\",\n ],\n priority: \"high\",\n businessImpact:\n \"Authentication affects conversion rates and security posture\",\n });\n }\n\n // Testing and Quality\n const hasTestingtools = packages.categories.some((cat) =>\n cat.name.toLowerCase().includes(\"testing\"),\n );\n\n if (hasTestingtools) {\n questions.push({\n category: \"Business Alignment\",\n question:\n \"How is our testing strategy contributing to product quality and customer satisfaction?\",\n context: \"Testing infrastructure is in place\",\n findings: [\"Testing tools available\"],\n recommendations: [\n \"Set coverage targets aligned with quality goals\",\n \"Implement testing in CI/CD for every release\",\n \"Track bugs-in-production as quality metric\",\n ],\n priority: \"medium\",\n businessImpact:\n \"Quality assurance directly affects customer satisfaction and support costs\",\n });\n }\n\n return questions;\n }\n\n /**\n * Technical Debt questions\n */\n private generateTechnicalDebtQuestions(): BoardQuestion[] {\n const questions: BoardQuestion[] = [];\n const { risks, packages } = this.analysis;\n\n // High-risk items\n if (risks.high && risks.high.length > 0) {\n questions.push({\n category: \"Technical Debt\",\n question: `What is our strategy for addressing ${risks.high.length} high-priority technical risks?`,\n context: \"Analysis identified significant technical risks\",\n findings: risks.high,\n recommendations: [\n \"Prioritize risks by business impact\",\n \"Allocate dedicated time for technical debt in sprints\",\n \"Track debt reduction as OKR/KPI\",\n ],\n priority: \"high\",\n businessImpact:\n \"Unaddressed technical debt slows feature velocity and increases costs\",\n });\n }\n\n // Outdated packages\n if (packages.outdated && packages.outdated.length > 10) {\n const breakingCount = packages.outdated.filter((p) => p.breaking).length;\n\n questions.push({\n category: \"Technical Debt\",\n question: `How should we prioritize updating ${packages.outdated.length} outdated packages${breakingCount > 0 ? ` (${breakingCount} with breaking changes)` : \"\"}?`,\n context: \"Dependency audit found outdated packages\",\n findings: packages.outdated\n .slice(0, 5)\n .map((p) => `${p.name}: ${p.current} → ${p.latest}`),\n recommendations: [\n \"Create update roadmap starting with non-breaking changes\",\n \"Test breaking changes in feature branches\",\n \"Consider automated dependency updates (Dependabot, Renovate)\",\n ],\n priority: breakingCount > 5 ? \"high\" : \"medium\",\n businessImpact:\n \"Outdated dependencies miss performance improvements and security patches\",\n });\n }\n\n // Complexity risks\n const complexityRisk = risks.categories.find((c) =>\n c.name.includes(\"Complexity\"),\n );\n if (complexityRisk && complexityRisk.score > 0.5) {\n questions.push({\n category: \"Technical Debt\",\n question:\n \"How are we managing codebase complexity to maintain development velocity?\",\n context: `Complexity score: ${(complexityRisk.score * 100).toFixed(0)}%`,\n findings: complexityRisk.issues,\n recommendations: [\n \"Implement code quality metrics and monitoring\",\n \"Establish refactoring goals for each sprint\",\n \"Consider modularization strategies\",\n ],\n priority: complexityRisk.score > 0.7 ? \"high\" : \"medium\",\n businessImpact:\n \"High complexity slows new feature development and increases bugs\",\n });\n }\n\n return questions;\n }\n\n /**\n * Growth Opportunities questions\n */\n private generateGrowthQuestions(): BoardQuestion[] {\n const questions: BoardQuestion[] = [];\n const { opportunities } = this.analysis;\n\n // Immediate opportunities\n if (opportunities.immediate && opportunities.immediate.length > 0) {\n questions.push({\n category: \"Growth Opportunities\",\n question:\n \"Which immediate technical opportunities should we prioritize for maximum business impact?\",\n context: `${opportunities.immediate.length} immediate opportunities identified`,\n findings: opportunities.immediate,\n recommendations: [\n \"Evaluate ROI and effort for each opportunity\",\n \"Align opportunities with business OKRs\",\n \"Quick wins can build momentum for larger initiatives\",\n ],\n priority: \"high\",\n businessImpact:\n \"Immediate opportunities can deliver quick ROI with minimal investment\",\n });\n }\n\n // Strategic opportunities\n opportunities.categories.forEach((cat) => {\n if (cat.potential > 0.6) {\n questions.push({\n category: \"Growth Opportunities\",\n question: `How can we capitalize on ${cat.name.toLowerCase()} opportunities to drive business growth?`,\n context: `Potential score: ${(cat.potential * 100).toFixed(0)}%`,\n findings: cat.recommendations,\n recommendations: [\n \"Develop roadmap for implementing recommendations\",\n \"Assign owners and timelines\",\n \"Define success metrics\",\n ],\n priority: cat.potential > 0.8 ? \"high\" : \"medium\",\n businessImpact: cat.businessValue,\n });\n }\n });\n\n return questions;\n }\n\n /**\n * Format custom questions from config\n */\n private formatCustomQuestions(\n customQuestions: AdvisoryQuestion[],\n ): BoardQuestion[] {\n return customQuestions.map((q) => ({\n category: q.category,\n question: q.question,\n context: q.context || \"Custom advisory question\",\n findings: [],\n recommendations: [],\n priority: q.priority || \"medium\",\n businessImpact: \"Custom question defined by organization\",\n }));\n }\n\n /**\n * Sort questions by priority\n */\n private sortByPriority(questions: BoardQuestion[]): BoardQuestion[] {\n const priorityOrder = { high: 0, medium: 1, low: 2 };\n return questions.sort(\n (a, b) => priorityOrder[a.priority] - priorityOrder[b.priority],\n );\n }\n\n /**\n * Generate summary of questions\n */\n private generateSummary(questions: BoardQuestion[]): QuestionSummary {\n const categories = Array.from(new Set(questions.map((q) => q.category)));\n\n return {\n totalQuestions: questions.length,\n highPriority: questions.filter((q) => q.priority === \"high\").length,\n mediumPriority: questions.filter((q) => q.priority === \"medium\").length,\n lowPriority: questions.filter((q) => q.priority === \"low\").length,\n categories,\n };\n }\n\n /**\n * Get recommendations for a package category\n */\n private getCategoryRecommendations(cat: PackageCategory): string[] {\n const recommendations: string[] = [];\n\n if (cat.name.includes(\"UI\") || cat.name.includes(\"Styling\")) {\n recommendations.push(\n \"Ensure design system consistency across components\",\n );\n recommendations.push(\"Consider component library optimization\");\n } else if (cat.name.includes(\"API\") || cat.name.includes(\"Data\")) {\n recommendations.push(\"Implement proper error handling and retry logic\");\n recommendations.push(\"Consider caching strategies for performance\");\n } else if (cat.name.includes(\"Testing\")) {\n recommendations.push(\"Increase test coverage for critical paths\");\n recommendations.push(\"Automate testing in CI/CD pipeline\");\n } else if (cat.name.includes(\"Database\") || cat.name.includes(\"ORM\")) {\n recommendations.push(\"Optimize queries and indexes\");\n recommendations.push(\"Implement database migration strategy\");\n }\n\n if (recommendations.length === 0) {\n recommendations.push(\"Review usage patterns for optimization\");\n recommendations.push(\"Consider if functionality meets current needs\");\n }\n\n return recommendations;\n }\n\n /**\n * Get priority for a package category\n */\n private getCategoryPriority(cat: PackageCategory): \"high\" | \"medium\" | \"low\" {\n // High priority for critical infrastructure\n if (\n [\"Authentication\", \"Database\", \"Infrastructure\", \"API\"].some((key) =>\n cat.name.includes(key),\n )\n ) {\n return \"high\";\n }\n\n // Medium for important but not critical\n if (\n [\"UI\", \"Testing\", \"State Management\", \"Forms\"].some((key) =>\n cat.name.includes(key),\n )\n ) {\n return \"medium\";\n }\n\n return \"low\";\n }\n}\n","/**\n * Report Comparator\n *\n * Compares two advisory reports to identify changes:\n * - New risks and opportunities\n * - Resolved issues\n * - Score changes\n * - Package changes (added, removed, updated)\n *\n * Useful for quarterly board reviews and tracking technical progress.\n */\n\nimport type { AdvisoryAnalysis } from \"./advisory-analyzer.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ReportComparison {\n timestamp: string;\n baseline: ReportSummary;\n current: ReportSummary;\n changes: ChangesSummary;\n details: DetailedChanges;\n}\n\nexport interface ReportSummary {\n timestamp: string;\n depth: string;\n projectName: string;\n overallRiskScore: number;\n overallOpportunityScore: number;\n packageCount: number;\n}\n\nexport interface ChangesSummary {\n riskScoreChange: number;\n opportunityScoreChange: number;\n packageCountChange: number;\n newHighRisks: number;\n resolvedHighRisks: number;\n newOpportunities: number;\n}\n\nexport interface DetailedChanges {\n risks: RiskChanges;\n opportunities: OpportunityChanges;\n packages: PackageChanges;\n technology: TechnologyChanges;\n}\n\nexport interface RiskChanges {\n new: string[];\n resolved: string[];\n changed: RiskScoreChange[];\n}\n\nexport interface RiskScoreChange {\n category: string;\n before: number;\n after: number;\n change: number;\n}\n\nexport interface OpportunityChanges {\n new: string[];\n completed: string[];\n changed: OpportunityScoreChange[];\n}\n\nexport interface OpportunityScoreChange {\n category: string;\n before: number;\n after: number;\n change: number;\n}\n\nexport interface PackageChanges {\n added: PackageChange[];\n removed: PackageChange[];\n updated: PackageChange[];\n}\n\nexport interface PackageChange {\n name: string;\n version?: string;\n previousVersion?: string;\n category: string;\n}\n\nexport interface TechnologyChanges {\n frameworkChanged: boolean;\n newBuildTools: string[];\n newInfrastructure: string[];\n removedTools: string[];\n}\n\n// ============================================================================\n// Report Comparator Class\n// ============================================================================\n\nexport class ReportComparator {\n private baseline: AdvisoryAnalysis;\n private current: AdvisoryAnalysis;\n\n constructor(baseline: AdvisoryAnalysis, current: AdvisoryAnalysis) {\n this.baseline = baseline;\n this.current = current;\n }\n\n /**\n * Compare two reports and generate diff\n */\n compare(): ReportComparison {\n const baselineSummary = this.extractSummary(this.baseline);\n const currentSummary = this.extractSummary(this.current);\n const changes = this.calculateChanges(baselineSummary, currentSummary);\n const details = this.analyzeDetailedChanges();\n\n return {\n timestamp: new Date().toISOString(),\n baseline: baselineSummary,\n current: currentSummary,\n changes,\n details,\n };\n }\n\n /**\n * Extract summary from analysis\n */\n private extractSummary(analysis: AdvisoryAnalysis): ReportSummary {\n return {\n timestamp: analysis.timestamp,\n depth: analysis.depth,\n projectName: analysis.project.name,\n overallRiskScore: analysis.risks.overall,\n overallOpportunityScore: analysis.opportunities.overall,\n packageCount: analysis.packages.total,\n };\n }\n\n /**\n * Calculate high-level changes\n */\n private calculateChanges(\n baseline: ReportSummary,\n current: ReportSummary,\n ): ChangesSummary {\n const riskScoreChange =\n current.overallRiskScore - baseline.overallRiskScore;\n const opportunityScoreChange =\n current.overallOpportunityScore - baseline.overallOpportunityScore;\n const packageCountChange = current.packageCount - baseline.packageCount;\n\n // Count new and resolved high-priority risks\n const baselineHighRisks = new Set(this.baseline.risks.high);\n const currentHighRisks = new Set(this.current.risks.high);\n\n const newHighRisks = Array.from(currentHighRisks).filter(\n (risk) => !baselineHighRisks.has(risk),\n ).length;\n\n const resolvedHighRisks = Array.from(baselineHighRisks).filter(\n (risk) => !currentHighRisks.has(risk),\n ).length;\n\n // Count new opportunities\n const baselineImmediate = new Set(this.baseline.opportunities.immediate);\n const currentImmediate = new Set(this.current.opportunities.immediate);\n\n const newOpportunities = Array.from(currentImmediate).filter(\n (opp) => !baselineImmediate.has(opp),\n ).length;\n\n return {\n riskScoreChange,\n opportunityScoreChange,\n packageCountChange,\n newHighRisks,\n resolvedHighRisks,\n newOpportunities,\n };\n }\n\n /**\n * Analyze detailed changes\n */\n private analyzeDetailedChanges(): DetailedChanges {\n return {\n risks: this.compareRisks(),\n opportunities: this.compareOpportunities(),\n packages: this.comparePackages(),\n technology: this.compareTechnology(),\n };\n }\n\n /**\n * Compare risks between reports\n */\n private compareRisks(): RiskChanges {\n const baselineRisks = new Set([\n ...this.baseline.risks.critical,\n ...this.baseline.risks.high,\n ...this.baseline.risks.medium,\n ]);\n\n const currentRisks = new Set([\n ...this.current.risks.critical,\n ...this.current.risks.high,\n ...this.current.risks.medium,\n ]);\n\n const newRisks = Array.from(currentRisks).filter(\n (risk) => !baselineRisks.has(risk),\n );\n\n const resolved = Array.from(baselineRisks).filter(\n (risk) => !currentRisks.has(risk),\n );\n\n // Compare risk category scores\n const changed: RiskScoreChange[] = [];\n const baselineCatMap = new Map(\n this.baseline.risks.categories.map((c) => [c.name, c]),\n );\n const currentCatMap = new Map(\n this.current.risks.categories.map((c) => [c.name, c]),\n );\n\n for (const [name, current] of currentCatMap) {\n const baseline = baselineCatMap.get(name);\n if (baseline && Math.abs(current.score - baseline.score) > 0.05) {\n changed.push({\n category: name,\n before: baseline.score,\n after: current.score,\n change: current.score - baseline.score,\n });\n }\n }\n\n return { new: newRisks, resolved, changed };\n }\n\n /**\n * Compare opportunities between reports\n */\n private compareOpportunities(): OpportunityChanges {\n const baselineOpps = new Set([\n ...this.baseline.opportunities.immediate,\n ...this.baseline.opportunities.shortTerm,\n ]);\n\n const currentOpps = new Set([\n ...this.current.opportunities.immediate,\n ...this.current.opportunities.shortTerm,\n ]);\n\n const newOpps = Array.from(currentOpps).filter(\n (opp) => !baselineOpps.has(opp),\n );\n\n const completed = Array.from(baselineOpps).filter(\n (opp) => !currentOpps.has(opp),\n );\n\n // Compare opportunity category scores\n const changed: OpportunityScoreChange[] = [];\n const baselineCatMap = new Map(\n this.baseline.opportunities.categories.map((c) => [c.name, c]),\n );\n const currentCatMap = new Map(\n this.current.opportunities.categories.map((c) => [c.name, c]),\n );\n\n for (const [name, current] of currentCatMap) {\n const baseline = baselineCatMap.get(name);\n if (baseline && Math.abs(current.potential - baseline.potential) > 0.05) {\n changed.push({\n category: name,\n before: baseline.potential,\n after: current.potential,\n change: current.potential - baseline.potential,\n });\n }\n }\n\n return { new: newOpps, completed, changed };\n }\n\n /**\n * Compare packages between reports\n */\n private comparePackages(): PackageChanges {\n const baselineProduction = new Map(\n this.baseline.packages.production.map((p) => [p.name, p]),\n );\n const currentProduction = new Map(\n this.current.packages.production.map((p) => [p.name, p]),\n );\n\n const added: PackageChange[] = [];\n const removed: PackageChange[] = [];\n const updated: PackageChange[] = [];\n\n // Find added packages\n for (const [name, pkg] of currentProduction) {\n if (!baselineProduction.has(name)) {\n added.push({\n name,\n version: pkg.version,\n category: pkg.category,\n });\n }\n }\n\n // Find removed and updated packages\n for (const [name, baselinePkg] of baselineProduction) {\n const currentPkg = currentProduction.get(name);\n\n if (!currentPkg) {\n removed.push({\n name,\n version: baselinePkg.version,\n category: baselinePkg.category,\n });\n } else if (baselinePkg.version !== currentPkg.version) {\n updated.push({\n name,\n version: currentPkg.version,\n previousVersion: baselinePkg.version,\n category: currentPkg.category,\n });\n }\n }\n\n // Also check dev dependencies\n const baselineDev = new Map(\n this.baseline.packages.development.map((p) => [p.name, p]),\n );\n const currentDev = new Map(\n this.current.packages.development.map((p) => [p.name, p]),\n );\n\n for (const [name, pkg] of currentDev) {\n if (!baselineDev.has(name)) {\n added.push({\n name,\n version: pkg.version,\n category: pkg.category,\n });\n }\n }\n\n for (const [name, baselinePkg] of baselineDev) {\n const currentPkg = currentDev.get(name);\n\n if (!currentPkg) {\n removed.push({\n name,\n version: baselinePkg.version,\n category: baselinePkg.category,\n });\n } else if (baselinePkg.version !== currentPkg.version) {\n updated.push({\n name,\n version: currentPkg.version,\n previousVersion: baselinePkg.version,\n category: currentPkg.category,\n });\n }\n }\n\n return { added, removed, updated };\n }\n\n /**\n * Compare technology stack between reports\n */\n private compareTechnology(): TechnologyChanges {\n const baselineTech = this.baseline.technology;\n const currentTech = this.current.technology;\n\n const frameworkChanged =\n baselineTech.framework !== currentTech.framework ||\n baselineTech.frameworkVersion !== currentTech.frameworkVersion;\n\n const baselineTools = new Set(baselineTech.buildTools);\n const currentTools = new Set(currentTech.buildTools);\n\n const newBuildTools = currentTech.buildTools.filter(\n (tool) => !baselineTools.has(tool),\n );\n const removedTools = baselineTech.buildTools.filter(\n (tool) => !currentTools.has(tool),\n );\n\n const baselineInfra = new Set(baselineTech.infrastructure);\n\n const newInfrastructure = currentTech.infrastructure.filter(\n (infra) => !baselineInfra.has(infra),\n );\n\n return {\n frameworkChanged,\n newBuildTools,\n newInfrastructure,\n removedTools,\n };\n }\n\n /**\n * Generate markdown summary of changes\n */\n generateMarkdownSummary(): string {\n const comparison = this.compare();\n const { changes, details } = comparison;\n\n let md = `# Advisory Report Comparison\\n\\n`;\n md += `**Baseline:** ${new Date(comparison.baseline.timestamp).toLocaleDateString()}\\n`;\n md += `**Current:** ${new Date(comparison.current.timestamp).toLocaleDateString()}\\n\\n`;\n\n md += `## Executive Summary\\n\\n`;\n\n // Risk score change\n const riskChange = changes.riskScoreChange;\n const riskEmoji = riskChange < 0 ? \"✅\" : riskChange > 0 ? \"⚠️\" : \"➖\";\n md += `${riskEmoji} **Risk Score:** ${(comparison.baseline.overallRiskScore * 100).toFixed(0)}% → ${(comparison.current.overallRiskScore * 100).toFixed(0)}% `;\n md += `(${riskChange > 0 ? \"+\" : \"\"}${(riskChange * 100).toFixed(0)}%)\\n`;\n\n // Opportunity score change\n const oppChange = changes.opportunityScoreChange;\n const oppEmoji = oppChange > 0 ? \"✅\" : oppChange < 0 ? \"⚠️\" : \"➖\";\n md += `${oppEmoji} **Opportunity Score:** ${(comparison.baseline.overallOpportunityScore * 100).toFixed(0)}% → ${(comparison.current.overallOpportunityScore * 100).toFixed(0)}% `;\n md += `(${oppChange > 0 ? \"+\" : \"\"}${(oppChange * 100).toFixed(0)}%)\\n`;\n\n // Package count change\n md += `📦 **Packages:** ${comparison.baseline.packageCount} → ${comparison.current.packageCount} `;\n md += `(${changes.packageCountChange > 0 ? \"+\" : \"\"}${changes.packageCountChange})\\n\\n`;\n\n // Key changes\n md += `## Key Changes\\n\\n`;\n\n if (changes.newHighRisks > 0) {\n md += `⚠️ **${changes.newHighRisks}** new high-priority risks identified\\n`;\n }\n\n if (changes.resolvedHighRisks > 0) {\n md += `✅ **${changes.resolvedHighRisks}** high-priority risks resolved\\n`;\n }\n\n if (changes.newOpportunities > 0) {\n md += `🌟 **${changes.newOpportunities}** new opportunities identified\\n`;\n }\n\n if (details.technology.frameworkChanged) {\n md += `🔄 Framework changed: ${comparison.baseline.projectName}\\n`;\n }\n\n md += `\\n---\\n\\n`;\n\n // Detailed risks\n if (details.risks.new.length > 0 || details.risks.resolved.length > 0) {\n md += `## Risk Changes\\n\\n`;\n\n if (details.risks.new.length > 0) {\n md += `### New Risks\\n\\n`;\n details.risks.new.forEach((risk) => {\n md += `- ${risk}\\n`;\n });\n md += `\\n`;\n }\n\n if (details.risks.resolved.length > 0) {\n md += `### Resolved Risks\\n\\n`;\n details.risks.resolved.forEach((risk) => {\n md += `- ~~${risk}~~\\n`;\n });\n md += `\\n`;\n }\n\n if (details.risks.changed.length > 0) {\n md += `### Risk Score Changes\\n\\n`;\n md += `| Category | Before | After | Change |\\n`;\n md += `|----------|--------|-------|--------|\\n`;\n details.risks.changed.forEach((change) => {\n const changeStr =\n change.change > 0\n ? `+${(change.change * 100).toFixed(0)}%`\n : `${(change.change * 100).toFixed(0)}%`;\n md += `| ${change.category} | ${(change.before * 100).toFixed(0)}% | ${(change.after * 100).toFixed(0)}% | ${changeStr} |\\n`;\n });\n md += `\\n`;\n }\n }\n\n // Package changes\n if (\n details.packages.added.length > 0 ||\n details.packages.removed.length > 0 ||\n details.packages.updated.length > 0\n ) {\n md += `## Package Changes\\n\\n`;\n\n if (details.packages.added.length > 0) {\n md += `### Added (${details.packages.added.length})\\n\\n`;\n details.packages.added.slice(0, 10).forEach((pkg) => {\n md += `- **${pkg.name}** \\`${pkg.version}\\` (${pkg.category})\\n`;\n });\n if (details.packages.added.length > 10) {\n md += `\\n_...and ${details.packages.added.length - 10} more_\\n`;\n }\n md += `\\n`;\n }\n\n if (details.packages.removed.length > 0) {\n md += `### Removed (${details.packages.removed.length})\\n\\n`;\n details.packages.removed.slice(0, 10).forEach((pkg) => {\n md += `- ~~${pkg.name}~~ \\`${pkg.version}\\`\\n`;\n });\n if (details.packages.removed.length > 10) {\n md += `\\n_...and ${details.packages.removed.length - 10} more_\\n`;\n }\n md += `\\n`;\n }\n\n if (details.packages.updated.length > 0) {\n md += `### Updated (${details.packages.updated.length})\\n\\n`;\n details.packages.updated.slice(0, 10).forEach((pkg) => {\n md += `- **${pkg.name}** \\`${pkg.previousVersion}\\` → \\`${pkg.version}\\`\\n`;\n });\n if (details.packages.updated.length > 10) {\n md += `\\n_...and ${details.packages.updated.length - 10} more_\\n`;\n }\n md += `\\n`;\n }\n }\n\n return md;\n }\n}\n","/**\n * Hooks Command Group\n *\n * Consolidates git hooks management under `workflow hooks <subcommand>`:\n * - install: Install git hooks for the project\n * - uninstall: Remove installed git hooks\n * - status: Show current hooks installation status\n */\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { hooksCommand } from \"../hooks.js\";\n\n// Re-export for backward compatibility\nexport { hooksCommand };\n\n/**\n * Create individual action wrappers\n */\nasync function installAction(): Promise<void> {\n return hooksCommand(\"install\");\n}\n\nasync function uninstallAction(): Promise<void> {\n return hooksCommand(\"uninstall\");\n}\n\nasync function statusAction(): Promise<void> {\n return hooksCommand(\"status\");\n}\n\n// Export individual actions for direct use\nexport { installAction as hooksInstallCommand };\nexport { uninstallAction as hooksUninstallCommand };\nexport { statusAction as hooksStatusCommand };\n\n/**\n * Create the hooks command group with all subcommands\n */\nexport function createHooksCommand(): Command {\n const hooksCmd = new Command(\"hooks\")\n .description(\"Manage git hooks for the project\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow hooks install ${chalk.dim(\"# Install git hooks\")}\n $ workflow hooks uninstall ${chalk.dim(\"# Remove git hooks\")}\n $ workflow hooks status ${chalk.dim(\"# Check hooks status\")}\n`,\n )\n .action(() => {\n // Show help if no subcommand provided\n hooksCmd.help();\n });\n\n // install subcommand\n hooksCmd\n .command(\"install\")\n .description(\"Install git hooks for the project\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Details:\")}\n Installs pre-commit and commit-msg hooks that:\n - Validate branch names\n - Validate commit message format\n - Run quality checks before commit\n\n If existing hooks are found, they will be wrapped\n so both the original and workflow hooks run.\n`,\n )\n .action(installAction);\n\n // uninstall subcommand\n hooksCmd\n .command(\"uninstall\")\n .description(\"Remove installed git hooks\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Details:\")}\n Removes workflow agent hooks from the project.\n If original hooks were wrapped, they will be restored.\n`,\n )\n .action(uninstallAction);\n\n // status subcommand\n hooksCmd\n .command(\"status\")\n .description(\"Show current hooks installation status\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Details:\")}\n Shows which git hooks are installed and whether\n they are managed by workflow agent.\n`,\n )\n .action(statusAction);\n\n return hooksCmd;\n}\n","/**\n * CLI command for managing git hooks\n * Provides install, uninstall, and status subcommands\n */\n\nimport chalk from \"chalk\";\nimport { loadConfig } from \"../../config/index.js\";\nimport {\n installHooks,\n uninstallHooks,\n getAllHooksStatus,\n hasGitRepo,\n} from \"../../utils/hooks.js\";\n\nexport async function hooksCommand(action: string) {\n const cwd = process.cwd();\n\n switch (action) {\n case \"install\":\n await installHooksAction(cwd);\n break;\n case \"uninstall\":\n await uninstallHooksAction(cwd);\n break;\n case \"status\":\n await statusHooksAction(cwd);\n break;\n default:\n console.error(chalk.red(`Unknown action: ${action}`));\n console.log(chalk.dim(\"Available actions: install, uninstall, status\"));\n process.exit(1);\n }\n}\n\nasync function installHooksAction(cwd: string) {\n console.log(chalk.bold.cyan(\"\\n🔗 Installing Workflow Agent Git Hooks\\n\"));\n\n // Check for git repo\n if (!hasGitRepo(cwd)) {\n console.error(chalk.red(\"✗ No git repository found\"));\n console.log(chalk.yellow(\" Run: git init\"));\n process.exit(1);\n }\n\n // Load config for hook settings\n const config = await loadConfig();\n const hooksConfig = config?.hooks;\n\n // Install hooks\n const results = await installHooks(hooksConfig, cwd);\n\n let hasErrors = false;\n for (const result of results) {\n if (result.success) {\n if (result.wrappedExisting) {\n console.log(\n chalk.green(\n `✓ Installed ${result.hookType} hook (wrapped existing hook)`,\n ),\n );\n } else {\n console.log(chalk.green(`✓ Installed ${result.hookType} hook`));\n }\n } else {\n console.error(\n chalk.red(`✗ Failed to install ${result.hookType}: ${result.error}`),\n );\n hasErrors = true;\n }\n }\n\n if (!hasErrors) {\n console.log(chalk.green(\"\\n✓ Git hooks installed successfully\"));\n console.log(chalk.dim(\"\\nHooks will run automatically on commit.\"));\n console.log(chalk.dim(\"They will be skipped in CI environments.\"));\n } else {\n process.exit(1);\n }\n}\n\nasync function uninstallHooksAction(cwd: string) {\n console.log(chalk.bold.cyan(\"\\n🔓 Uninstalling Workflow Agent Git Hooks\\n\"));\n\n // Check for git repo\n if (!hasGitRepo(cwd)) {\n console.error(chalk.red(\"✗ No git repository found\"));\n process.exit(1);\n }\n\n // Uninstall hooks\n const results = await uninstallHooks(cwd);\n\n let hasErrors = false;\n for (const result of results) {\n if (result.success) {\n if (result.wrappedExisting) {\n console.log(\n chalk.green(`✓ Removed ${result.hookType} hook (restored original)`),\n );\n } else {\n console.log(chalk.green(`✓ Removed ${result.hookType} hook`));\n }\n } else if (result.error) {\n console.error(\n chalk.red(`✗ Failed to remove ${result.hookType}: ${result.error}`),\n );\n hasErrors = true;\n }\n }\n\n if (!hasErrors) {\n console.log(chalk.green(\"\\n✓ Git hooks uninstalled successfully\"));\n } else {\n process.exit(1);\n }\n}\n\nasync function statusHooksAction(cwd: string) {\n console.log(chalk.bold.cyan(\"\\n📊 Workflow Agent Git Hooks Status\\n\"));\n\n // Check for git repo\n if (!hasGitRepo(cwd)) {\n console.error(chalk.red(\"✗ No git repository found\"));\n process.exit(1);\n }\n\n // Get hook status\n const statuses = await getAllHooksStatus(cwd);\n\n for (const status of statuses) {\n const icon = status.installed ? \"✓\" : \"✗\";\n const color = status.installed ? chalk.green : chalk.yellow;\n\n let message = `${icon} ${status.hookType}`;\n\n if (status.installed) {\n message += \" - installed\";\n if (status.wrappedOriginal) {\n message += \" (wrapping original hook)\";\n }\n } else if (status.hasExistingHook) {\n message += \" - existing hook (not managed by Workflow Agent)\";\n } else {\n message += \" - not installed\";\n }\n\n console.log(color(message));\n }\n\n const allInstalled = statuses.every((s) => s.installed);\n if (!allInstalled) {\n console.log(chalk.dim(\"\\nTo install hooks: workflow hooks install\"));\n }\n}\n","/**\n * Solution Command Group\n *\n * Consolidates solution pattern commands under `workflow solution <subcommand>`:\n * - capture: Capture a solution pattern from working code\n * - create: Create a new solution pattern manually\n * - show: Display details of a specific solution\n * - search: Search for solution patterns\n * - list: List all solution patterns\n * - apply: Apply a solution pattern to the current project\n * - export: Export solutions to a file\n * - import: Import solutions from a file\n * - analyze: Analyze codebase for potential solutions\n * - deprecate: Deprecate a solution pattern\n * - stats: Show solution pattern statistics\n */\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n solutionCaptureCommand,\n solutionCreateCommand,\n solutionShowCommand,\n solutionSearchCommand,\n solutionListCommand,\n solutionApplyCommand,\n solutionExportCommand,\n solutionImportCommand,\n solutionAnalyzeCommand,\n solutionDeprecateCommand,\n solutionStatsCommand,\n} from \"../solution.js\";\n\n/**\n * Create the solution command group with all subcommands\n */\nexport function createSolutionCommand(): Command {\n const solutionCmd = new Command(\"solution\")\n .description(\"Manage solution patterns for code reuse\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution capture --path ./src/auth ${chalk.dim(\"# Capture from path\")}\n $ workflow solution create --name \"My Auth\" ${chalk.dim(\"# Create manually\")}\n $ workflow solution show abc123 ${chalk.dim(\"# Show solution details\")}\n $ workflow solution search \"jwt auth\" ${chalk.dim(\"# Search solutions\")}\n $ workflow solution list ${chalk.dim(\"# List all solutions\")}\n $ workflow solution list --category auth ${chalk.dim(\"# List by category\")}\n $ workflow solution apply abc123 ${chalk.dim(\"# Apply a solution\")}\n $ workflow solution apply abc123 --dry-run ${chalk.dim(\"# Preview application\")}\n $ workflow solution export --format json ${chalk.dim(\"# Export solutions\")}\n $ workflow solution import solutions.json ${chalk.dim(\"# Import solutions\")}\n $ workflow solution analyze ${chalk.dim(\"# Find opportunities\")}\n $ workflow solution stats ${chalk.dim(\"# Show statistics\")}\n`,\n )\n .action(() => {\n // Show help if no subcommand provided\n solutionCmd.help();\n });\n\n // capture subcommand\n solutionCmd\n .command(\"capture\")\n .description(\"Capture a solution pattern from working code\")\n .option(\"--name <name>\", \"Solution name\")\n .option(\"--description <desc>\", \"Solution description\")\n .option(\n \"--category <cat>\",\n \"Category (auth, api, database, ui, testing, deployment, integrations, performance, security, other)\",\n )\n .option(\"--keywords <kw>\", \"Comma-separated keywords\")\n .option(\"--path <path>\", \"Path to the solution directory\")\n .option(\"--anonymize\", \"Anonymize sensitive data in code\")\n .option(\"--private\", \"Keep solution private (not synced)\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution capture ${chalk.dim(\"# Interactive mode\")}\n $ workflow solution capture --path ./src/auth ${chalk.dim(\"# Specify path\")}\n $ workflow solution capture --name \"JWT Auth\" \\\\\n --category auth --keywords jwt,login ${chalk.dim(\"# With metadata\")}\n $ workflow solution capture --anonymize ${chalk.dim(\"# Anonymize secrets\")}\n $ workflow solution capture --private ${chalk.dim(\"# Keep private\")}\n`,\n )\n .action(solutionCaptureCommand);\n\n // create subcommand\n solutionCmd\n .command(\"create\")\n .description(\"Create a new solution pattern manually\")\n .option(\"--name <name>\", \"Solution name\")\n .option(\"--description <desc>\", \"Solution description\")\n .option(\"--category <cat>\", \"Category\")\n .option(\"--keywords <kw>\", \"Comma-separated keywords\")\n .option(\"--framework <fw>\", \"Target framework\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution create ${chalk.dim(\"# Interactive mode\")}\n $ workflow solution create --name \"Custom Auth\" ${chalk.dim(\"# With name\")}\n`,\n )\n .action(solutionCreateCommand);\n\n // show subcommand\n solutionCmd\n .command(\"show <solutionId>\")\n .description(\"Display details of a specific solution pattern\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution show abc123 ${chalk.dim(\"# Show by ID\")}\n`,\n )\n .action(solutionShowCommand);\n\n // search subcommand\n solutionCmd\n .command(\"search <query>\")\n .description(\"Search for solution patterns\")\n .option(\"--category <cat>\", \"Filter by category\")\n .option(\"--framework <fw>\", \"Filter by framework\")\n .option(\"--limit <n>\", \"Maximum results\", \"10\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution search \"jwt authentication\" ${chalk.dim(\"# Search by keywords\")}\n $ workflow solution search auth --category security ${chalk.dim(\"# With category filter\")}\n $ workflow solution search api --framework next ${chalk.dim(\"# With framework filter\")}\n $ workflow solution search database --limit 5 ${chalk.dim(\"# Limit results\")}\n`,\n )\n .action(solutionSearchCommand);\n\n // list subcommand\n solutionCmd\n .command(\"list\")\n .description(\"List all solution patterns\")\n .option(\"--category <cat>\", \"Filter by category\")\n .option(\"--framework <fw>\", \"Filter by framework\")\n .option(\"--deprecated\", \"Include deprecated solutions\")\n .option(\"--limit <n>\", \"Maximum results\", \"20\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution list ${chalk.dim(\"# List all solutions\")}\n $ workflow solution list --category auth ${chalk.dim(\"# Filter by category\")}\n $ workflow solution list --deprecated ${chalk.dim(\"# Include deprecated\")}\n $ workflow solution list --limit 50 ${chalk.dim(\"# More results\")}\n`,\n )\n .action(solutionListCommand);\n\n // apply subcommand\n solutionCmd\n .command(\"apply <solutionId>\")\n .description(\"Apply a solution pattern to the current project\")\n .option(\"--output <dir>\", \"Output directory\")\n .option(\"--dry-run\", \"Preview without applying\")\n .option(\"--include-tests\", \"Include test files\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution apply abc123 ${chalk.dim(\"# Apply solution\")}\n $ workflow solution apply abc123 --dry-run ${chalk.dim(\"# Preview changes\")}\n $ workflow solution apply abc123 --output ./src ${chalk.dim(\"# Custom output dir\")}\n $ workflow solution apply abc123 --include-tests ${chalk.dim(\"# Include test files\")}\n`,\n )\n .action(solutionApplyCommand);\n\n // export subcommand\n solutionCmd\n .command(\"export\")\n .description(\"Export solution patterns to a file\")\n .option(\"-o, --output <path>\", \"Output file path\", \"solutions-export.json\")\n .option(\"-f, --format <format>\", \"Output format (json, yaml)\", \"json\")\n .option(\"--category <cat>\", \"Filter by category\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution export ${chalk.dim(\"# Export all as JSON\")}\n $ workflow solution export --format yaml ${chalk.dim(\"# Export as YAML\")}\n $ workflow solution export --category auth ${chalk.dim(\"# Export auth only\")}\n $ workflow solution export -o backup.json ${chalk.dim(\"# Custom output path\")}\n`,\n )\n .action(solutionExportCommand);\n\n // import subcommand\n solutionCmd\n .command(\"import <file>\")\n .description(\"Import solution patterns from a file\")\n .option(\"-f, --format <format>\", \"Input format (json, yaml)\", \"json\")\n .option(\"--dry-run\", \"Preview import without making changes\")\n .option(\"--no-merge\", \"Skip existing solutions instead of merging\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution import solutions.json ${chalk.dim(\"# Import from JSON\")}\n $ workflow solution import backup.json --dry-run ${chalk.dim(\"# Preview import\")}\n`,\n )\n .action(solutionImportCommand);\n\n // analyze subcommand\n solutionCmd\n .command(\"analyze\")\n .description(\"Analyze codebase for potential solution patterns\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Details:\")}\n Scans your codebase for common patterns that could be\n captured as reusable solutions, such as:\n - Authentication modules\n - API layers\n - Database utilities\n - UI component libraries\n`,\n )\n .action(solutionAnalyzeCommand);\n\n // deprecate subcommand\n solutionCmd\n .command(\"deprecate <solutionId> <reason>\")\n .description(\"Deprecate a solution pattern\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution deprecate abc123 \"Replaced by better approach\"\n $ workflow solution deprecate xyz789 \"Framework no longer supported\"\n`,\n )\n .action(solutionDeprecateCommand);\n\n // stats subcommand\n solutionCmd\n .command(\"stats\")\n .description(\"Show solution pattern statistics\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution stats ${chalk.dim(\"# Show all statistics\")}\n`,\n )\n .action(solutionStatsCommand);\n\n return solutionCmd;\n}\n\n// Re-export individual commands for backward compatibility\nexport {\n solutionCaptureCommand,\n solutionCreateCommand,\n solutionShowCommand,\n solutionSearchCommand,\n solutionListCommand,\n solutionApplyCommand,\n solutionExportCommand,\n solutionImportCommand,\n solutionAnalyzeCommand,\n solutionDeprecateCommand,\n solutionStatsCommand,\n} from \"../solution.js\";\n","import chalk from \"chalk\";\nimport * as p from \"@clack/prompts\";\nimport * as path from \"node:path\";\nimport {\n PatternStore,\n CodeAnalyzer,\n type SolutionPattern,\n type SolutionCategory,\n type SolutionFile,\n type DependencyVersion,\n} from \"@hawkinside_out/workflow-improvement-tracker\";\n\n// ============================================\n// Types\n// ============================================\n\ninterface SolutionCaptureOptions {\n name?: string;\n description?: string;\n category?: SolutionCategory;\n keywords?: string;\n path?: string;\n anonymize?: boolean;\n private?: boolean;\n}\n\ninterface SolutionSearchOptions {\n category?: SolutionCategory;\n framework?: string;\n limit?: number;\n}\n\ninterface SolutionListOptions {\n category?: SolutionCategory;\n framework?: string;\n deprecated?: boolean;\n limit?: number;\n}\n\ninterface SolutionApplyOptions {\n output?: string;\n dryRun?: boolean;\n includeTests?: boolean;\n}\n\n// ============================================\n// Helper Functions\n// ============================================\n\nfunction getWorkspacePath(): string {\n return process.cwd();\n}\n\nfunction formatDate(isoString: string): string {\n return new Date(isoString).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nfunction formatCategory(category: SolutionCategory): string {\n const icons: Record<SolutionCategory, string> = {\n auth: \"🔐\",\n api: \"🌐\",\n database: \"💾\",\n ui: \"🎨\",\n testing: \"🧪\",\n deployment: \"🚀\",\n integrations: \"🔗\",\n performance: \"⚡\",\n security: \"🛡️\",\n other: \"📦\",\n state: \"🔄\",\n forms: \"📝\",\n \"error-handling\": \"⚠️\",\n caching: \"💨\",\n };\n return `${icons[category]} ${category}`;\n}\n\nfunction truncate(str: string, maxLen: number): string {\n if (str.length <= maxLen) return str;\n return str.slice(0, maxLen - 3) + \"...\";\n}\n\n// ============================================\n// solution:capture Command\n// ============================================\n\n/**\n * Capture a solution pattern from working code\n */\nexport async function solutionCaptureCommand(options: SolutionCaptureOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n📦 Capture Solution Pattern\\n\"));\n\n // Get the directory to analyze\n let targetPath = options.path;\n if (!targetPath) {\n const pathInput = await p.text({\n message: \"Path to the solution directory:\",\n placeholder: \"./src/auth\",\n validate: (val) => {\n if (!val) return \"Path is required\";\n return undefined;\n },\n });\n\n if (p.isCancel(pathInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n targetPath = pathInput as string;\n }\n\n // Resolve to absolute path\n const absolutePath = path.isAbsolute(targetPath)\n ? targetPath\n : path.resolve(cwd, targetPath);\n\n // Get pattern name\n let name = options.name;\n if (!name) {\n const nameInput = await p.text({\n message: \"Solution name:\",\n placeholder: \"JWT Authentication\",\n validate: (val) => {\n if (!val || val.length < 3) return \"Name must be at least 3 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(nameInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n name = nameInput as string;\n }\n\n // Get description\n let description = options.description;\n if (!description) {\n const descInput = await p.text({\n message: \"Solution description:\",\n placeholder: \"Complete JWT-based authentication with refresh tokens\",\n validate: (val) => {\n if (!val || val.length < 10)\n return \"Description must be at least 10 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(descInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n description = descInput as string;\n }\n\n // Get category\n let category = options.category;\n if (!category) {\n const categoryChoice = await p.select({\n message: \"Solution category:\",\n options: [\n { value: \"auth\", label: \"🔐 Authentication\" },\n { value: \"api\", label: \"🌐 API\" },\n { value: \"database\", label: \"💾 Database\" },\n { value: \"ui\", label: \"🎨 UI/Components\" },\n { value: \"testing\", label: \"🧪 Testing\" },\n { value: \"deployment\", label: \"🚀 Deployment\" },\n { value: \"integrations\", label: \"🔗 Integrations\" },\n { value: \"performance\", label: \"⚡ Performance\" },\n { value: \"security\", label: \"🛡️ Security\" },\n { value: \"state\", label: \"🔄 State Management\" },\n { value: \"forms\", label: \"📝 Forms\" },\n { value: \"error-handling\", label: \"⚠️ Error Handling\" },\n { value: \"caching\", label: \"💨 Caching\" },\n { value: \"other\", label: \"📦 Other\" },\n ],\n });\n\n if (p.isCancel(categoryChoice)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n category = categoryChoice as SolutionCategory;\n }\n\n // Get keywords\n let keywords: string[] = [];\n if (options.keywords) {\n keywords = options.keywords.split(\",\").map((k) => k.trim());\n } else {\n const keywordsInput = await p.text({\n message: \"Keywords (comma-separated):\",\n placeholder: \"jwt, authentication, login, refresh-token\",\n });\n\n if (p.isCancel(keywordsInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n if (keywordsInput) {\n keywords = (keywordsInput as string).split(\",\").map((k) => k.trim());\n }\n }\n\n // Analyze the directory\n const spinner = p.spinner();\n spinner.start(\"Analyzing solution...\");\n\n const analyzer = new CodeAnalyzer({\n anonymize: options.anonymize ?? false,\n });\n\n try {\n const pattern = await analyzer.createSolutionPattern(\n absolutePath,\n name,\n description,\n category,\n keywords,\n { isPrivate: options.private ?? false },\n );\n\n spinner.stop(\"Solution analyzed\");\n\n // Show summary\n console.log(chalk.green(\"\\n✓ Solution captured successfully!\\n\"));\n console.log(chalk.dim(\"─\".repeat(50)));\n console.log(`${chalk.bold(\"Name:\")} ${pattern.name}`);\n console.log(\n `${chalk.bold(\"Category:\")} ${formatCategory(pattern.category)}`,\n );\n console.log(\n `${chalk.bold(\"Files:\")} ${pattern.implementation.files.length}`,\n );\n console.log(\n `${chalk.bold(\"Dependencies:\")} ${pattern.implementation.dependencies.length}`,\n );\n console.log(\n `${chalk.bold(\"Framework:\")} ${pattern.compatibility.framework || \"generic\"}`,\n );\n console.log(chalk.dim(\"─\".repeat(50)));\n\n // Confirm save\n const confirm = await p.confirm({\n message: \"Save this solution pattern?\",\n initialValue: true,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n p.cancel(\"Solution not saved\");\n process.exit(0);\n }\n\n // Save the pattern\n await store.saveSolution(pattern);\n console.log(chalk.green(`\\n✓ Solution saved with ID: ${pattern.id}\\n`));\n } catch (error) {\n spinner.stop(\"Analysis failed\");\n console.error(chalk.red(`\\n✗ Error: ${(error as Error).message}\\n`));\n process.exit(1);\n }\n}\n\n// ============================================\n// solution:search Command\n// ============================================\n\n/**\n * Search for solution patterns\n */\nexport async function solutionSearchCommand(\n query: string,\n options: SolutionSearchOptions,\n) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n🔍 Search Solution Patterns\\n\"));\n\n // Convert query to keywords array\n const keywords = query.split(/\\s+/).filter((k) => k.length > 0);\n\n const result = await store.searchSolutions(keywords, {\n category: options.category,\n framework: options.framework,\n limit: options.limit ?? 10,\n });\n\n if (!result.success || !result.data) {\n console.error(chalk.red(`\\n✗ Search failed: ${result.error}\\n`));\n return;\n }\n\n const solutions = result.data;\n\n if (solutions.length === 0) {\n console.log(chalk.yellow(\"No solutions found matching your query.\\n\"));\n console.log(chalk.dim(\"Try different keywords or fewer filters.\"));\n return;\n }\n\n console.log(chalk.green(`Found ${solutions.length} solution(s):\\n`));\n console.log(chalk.dim(\"─\".repeat(70)));\n\n for (const solution of solutions) {\n console.log(\n `${chalk.bold(solution.name)} ${chalk.dim(`(${solution.id.slice(0, 8)})`)}`,\n );\n console.log(` ${formatCategory(solution.category)}`);\n console.log(` ${chalk.dim(truncate(solution.description, 60))}`);\n console.log(\n ` Files: ${solution.implementation.files.length} | ` +\n `Framework: ${solution.compatibility.framework || \"generic\"} | ` +\n `Uses: ${solution.metrics.applications}`,\n );\n console.log(chalk.dim(\"─\".repeat(70)));\n }\n\n console.log(\n chalk.dim(\"\\nUse 'workflow solution:apply <id>' to apply a solution.\"),\n );\n}\n\n// ============================================\n// solution:list Command\n// ============================================\n\n/**\n * List all solution patterns\n */\nexport async function solutionListCommand(options: SolutionListOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n📋 Solution Patterns\\n\"));\n\n const result = await store.listSolutions({\n category: options.category,\n framework: options.framework,\n includeDeprecated: options.deprecated ?? false,\n limit: options.limit ?? 20,\n });\n\n if (!result.success || !result.data) {\n console.error(chalk.red(`\\n✗ List failed: ${result.error}\\n`));\n return;\n }\n\n const solutions = result.data;\n\n if (solutions.length === 0) {\n console.log(chalk.yellow(\"No solutions found.\\n\"));\n console.log(\n chalk.dim(\"Use 'workflow solution:capture' to capture a solution.\"),\n );\n return;\n }\n\n console.log(chalk.green(`${solutions.length} solution(s):\\n`));\n\n // Group by category\n const byCategory = new Map<SolutionCategory, SolutionPattern[]>();\n for (const solution of solutions) {\n const list = byCategory.get(solution.category) || [];\n list.push(solution);\n byCategory.set(solution.category, list);\n }\n\n for (const [category, items] of byCategory) {\n console.log(chalk.bold(`\\n${formatCategory(category)}`));\n console.log(chalk.dim(\"─\".repeat(50)));\n\n for (const solution of items) {\n const deprecated = solution.deprecatedAt\n ? chalk.red(\" [DEPRECATED]\")\n : \"\";\n console.log(\n ` ${chalk.cyan(solution.id.slice(0, 8))} ${solution.name}${deprecated}`,\n );\n console.log(` ${chalk.dim(truncate(solution.description, 50))}`);\n console.log(\n chalk.dim(\n ` Created: ${formatDate(solution.createdAt)} | Files: ${solution.implementation.files.length}`,\n ),\n );\n }\n }\n\n console.log(\n chalk.dim(\n \"\\nUse 'workflow solution:search <query>' to find specific solutions.\",\n ),\n );\n}\n\n// ============================================\n// solution:apply Command\n// ============================================\n\n/**\n * Apply a solution pattern to the current project\n */\nexport async function solutionApplyCommand(\n solutionId: string,\n options: SolutionApplyOptions,\n) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n🚀 Apply Solution Pattern\\n\"));\n\n // Get the solution\n const result = await store.getSolution(solutionId);\n if (!result.success || !result.data) {\n console.error(chalk.red(`\\n✗ Solution not found: ${solutionId}\\n`));\n process.exit(1);\n }\n\n const solution = result.data;\n\n // Check for deprecation\n if (solution.deprecatedAt) {\n console.log(\n chalk.yellow(\n `⚠️ This solution is deprecated: ${solution.deprecationReason || \"No reason provided\"}\\n`,\n ),\n );\n const proceed = await p.confirm({\n message: \"Do you want to continue?\",\n initialValue: false,\n });\n\n if (p.isCancel(proceed) || !proceed) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n // Show solution details\n console.log(chalk.bold(`Solution: ${solution.name}`));\n console.log(chalk.dim(solution.description));\n console.log();\n\n // Show files that will be created\n console.log(chalk.bold(\"Files to create:\"));\n const filesToApply: SolutionFile[] = options.includeTests\n ? solution.implementation.files\n : solution.implementation.files.filter(\n (f: SolutionFile) => f.role !== \"test\",\n );\n\n for (const file of filesToApply) {\n console.log(chalk.dim(` • ${file.path} (${file.role})`));\n }\n console.log();\n\n // Show dependencies\n if (solution.implementation.dependencies.length > 0) {\n console.log(chalk.bold(\"Dependencies to install:\"));\n for (const dep of solution.implementation.dependencies) {\n console.log(chalk.dim(` • ${dep.name}@${dep.version}`));\n }\n console.log();\n }\n\n // Show environment variables\n if (solution.implementation.envVars.length > 0) {\n console.log(chalk.bold(\"Environment variables needed:\"));\n for (const env of solution.implementation.envVars) {\n const required = env.required ? chalk.red(\"*\") : \"\";\n console.log(chalk.dim(` • ${env.name}${required}`));\n }\n console.log();\n }\n\n if (options.dryRun) {\n console.log(chalk.yellow(\"Dry run mode - no files were created.\\n\"));\n return;\n }\n\n // Confirm application\n const confirm = await p.confirm({\n message: \"Apply this solution?\",\n initialValue: true,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n // Apply the solution\n const spinner = p.spinner();\n spinner.start(\"Applying solution...\");\n\n try {\n const outputDir = options.output || cwd;\n const fs = await import(\"node:fs\");\n const pathModule = await import(\"node:path\");\n\n for (const file of filesToApply) {\n const filePath = pathModule.join(outputDir, file.path);\n const dir = pathModule.dirname(filePath);\n\n await fs.promises.mkdir(dir, { recursive: true });\n await fs.promises.writeFile(filePath, file.content);\n }\n\n // Update metrics\n await store.updateSolutionMetrics(solution.id, true);\n\n spinner.stop(\"Solution applied\");\n console.log(chalk.green(`\\n✓ Solution applied successfully!\\n`));\n console.log(chalk.dim(`Created ${filesToApply.length} file(s).`));\n\n // Show next steps\n if (solution.implementation.dependencies.length > 0) {\n console.log(chalk.cyan(\"\\nNext step: Install dependencies with:\"));\n const deps = solution.implementation.dependencies\n .map((d: DependencyVersion) => `${d.name}@${d.version}`)\n .join(\" \");\n console.log(chalk.dim(` npm install ${deps}`));\n }\n } catch (error) {\n spinner.stop(\"Application failed\");\n\n // Record failure\n await store.updateSolutionMetrics(solution.id, false);\n\n console.error(chalk.red(`\\n✗ Error: ${(error as Error).message}\\n`));\n process.exit(1);\n }\n}\n\n// ============================================\n// solution:deprecate Command\n// ============================================\n\n/**\n * Deprecate a solution pattern\n */\nexport async function solutionDeprecateCommand(\n solutionId: string,\n reason: string,\n) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n⚠️ Deprecate Solution Pattern\\n\"));\n\n const result = await store.getSolution(solutionId);\n if (!result.success || !result.data) {\n console.error(chalk.red(`\\n✗ Solution not found: ${solutionId}\\n`));\n process.exit(1);\n }\n\n const solution = result.data;\n\n console.log(`Solution: ${chalk.bold(solution.name)}`);\n console.log(`Reason: ${reason}\\n`);\n\n const confirm = await p.confirm({\n message: \"Deprecate this solution?\",\n initialValue: false,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n await store.deprecateSolution(solutionId, reason);\n console.log(chalk.green(`\\n✓ Solution deprecated.\\n`));\n}\n\n// ============================================\n// solution:stats Command\n// ============================================\n\n/**\n * Show solution pattern statistics\n */\nexport async function solutionStatsCommand() {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n📊 Solution Pattern Statistics\\n\"));\n\n const stats = await store.getStats();\n\n console.log(chalk.dim(\"─\".repeat(40)));\n console.log(`${chalk.bold(\"Solutions:\")} ${stats.totalSolutions}`);\n console.log(` Active: ${stats.totalSolutions - stats.deprecatedSolutions}`);\n console.log(` Deprecated: ${stats.deprecatedSolutions}`);\n console.log(` Private: ${stats.privateSolutions}`);\n console.log(` Synced: ${stats.syncedSolutions}`);\n console.log(chalk.dim(\"─\".repeat(40)));\n console.log(`${chalk.bold(\"Fixes:\")} ${stats.totalFixes}`);\n console.log(`${chalk.bold(\"Blueprints:\")} ${stats.totalBlueprints}`);\n console.log(chalk.dim(\"─\".repeat(40)));\n\n // Category breakdown\n console.log(`\\n${chalk.bold(\"By Category:\")}`);\n const listResult = await store.listSolutions({ limit: 1000 });\n\n if (listResult.success && listResult.data) {\n const categories = new Map<SolutionCategory, number>();\n\n for (const s of listResult.data) {\n categories.set(s.category, (categories.get(s.category) || 0) + 1);\n }\n\n for (const [category, count] of categories) {\n console.log(` ${formatCategory(category)}: ${count}`);\n }\n }\n\n console.log();\n}\n\n// ============================================\n// solution:create Command\n// ============================================\n\ninterface SolutionCreateOptions {\n name?: string;\n description?: string;\n category?: SolutionCategory;\n keywords?: string;\n framework?: string;\n}\n\n/**\n * Create a new solution pattern manually (without capturing from files)\n */\nexport async function solutionCreateCommand(options: SolutionCreateOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n✨ Create Solution Pattern\\n\"));\n\n // Get pattern name\n let name = options.name;\n if (!name) {\n const nameInput = await p.text({\n message: \"Solution name:\",\n placeholder: \"My Custom Solution\",\n validate: (val) => {\n if (!val || val.length < 3) return \"Name must be at least 3 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(nameInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n name = nameInput as string;\n }\n\n // Get description\n let description = options.description;\n if (!description) {\n const descInput = await p.text({\n message: \"Solution description:\",\n placeholder: \"A description of what this solution does\",\n validate: (val) => {\n if (!val || val.length < 10)\n return \"Description must be at least 10 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(descInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n description = descInput as string;\n }\n\n // Get category\n let category = options.category;\n if (!category) {\n const categoryChoice = await p.select({\n message: \"Solution category:\",\n options: [\n { value: \"auth\", label: \"🔐 Authentication\" },\n { value: \"api\", label: \"🌐 API\" },\n { value: \"database\", label: \"💾 Database\" },\n { value: \"ui\", label: \"🎨 UI/Components\" },\n { value: \"testing\", label: \"🧪 Testing\" },\n { value: \"deployment\", label: \"🚀 Deployment\" },\n { value: \"integrations\", label: \"🔗 Integrations\" },\n { value: \"performance\", label: \"⚡ Performance\" },\n { value: \"security\", label: \"🛡️ Security\" },\n { value: \"other\", label: \"📦 Other\" },\n ],\n });\n\n if (p.isCancel(categoryChoice)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n category = categoryChoice as SolutionCategory;\n }\n\n // Get keywords\n let keywords: string[] = [];\n if (options.keywords) {\n keywords = options.keywords.split(\",\").map((k) => k.trim());\n } else {\n const keywordsInput = await p.text({\n message: \"Keywords (comma-separated):\",\n placeholder: \"auth, jwt, login\",\n });\n\n if (p.isCancel(keywordsInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n if (keywordsInput) {\n keywords = (keywordsInput as string).split(\",\").map((k) => k.trim());\n }\n }\n\n const framework = options.framework || \"generic\";\n const now = new Date().toISOString();\n\n // Create the solution pattern\n const solution: SolutionPattern = {\n id: crypto.randomUUID(),\n name,\n description,\n category,\n keywords,\n implementation: {\n files: [],\n dependencies: [],\n devDependencies: [],\n envVars: [],\n },\n compatibility: {\n framework,\n frameworkVersion: \">=1.0.0\",\n runtime: \"node\",\n runtimeVersion: \">=18.0.0\",\n dependencies: [],\n },\n metrics: {\n applications: 0,\n successes: 0,\n failures: 0,\n successRate: 0,\n },\n isPrivate: true,\n createdAt: now,\n updatedAt: now,\n };\n\n // Save the pattern\n await store.saveSolution(solution);\n\n console.log(chalk.green(\"\\n✓ Solution pattern created!\\n\"));\n console.log(chalk.dim(` ID: ${solution.id}`));\n console.log(chalk.dim(` Name: ${name}`));\n console.log(chalk.dim(` Category: ${category}`));\n console.log(chalk.dim(`\\nAdd files using 'workflow solution capture --path <dir>'`));\n}\n\n// ============================================\n// solution:show Command\n// ============================================\n\n/**\n * Show details of a specific solution pattern\n */\nexport async function solutionShowCommand(solutionId: string) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n📋 Solution Details\\n\"));\n\n const result = await store.getSolution(solutionId);\n if (!result.success || !result.data) {\n console.error(chalk.red(`\\n✗ Solution not found: ${solutionId}\\n`));\n process.exit(1);\n }\n\n const solution = result.data;\n\n console.log(chalk.dim(\"─\".repeat(60)));\n console.log(chalk.bold(`Name: ${solution.name}`));\n console.log(`ID: ${chalk.dim(solution.id)}`);\n console.log(`Category: ${formatCategory(solution.category)}`);\n console.log(`Description: ${solution.description}`);\n console.log(chalk.dim(\"─\".repeat(60)));\n\n // Compatibility\n console.log(chalk.bold(\"\\nCompatibility:\"));\n console.log(` Framework: ${solution.compatibility.framework || \"generic\"}`);\n console.log(` Version: ${solution.compatibility.frameworkVersion}`);\n console.log(` Runtime: ${solution.compatibility.runtime} ${solution.compatibility.runtimeVersion}`);\n\n // Implementation\n console.log(chalk.bold(\"\\nImplementation:\"));\n console.log(` Files: ${solution.implementation.files.length}`);\n for (const file of solution.implementation.files) {\n console.log(chalk.dim(` • ${file.path} (${file.role})`));\n }\n\n if (solution.implementation.dependencies.length > 0) {\n console.log(` Dependencies: ${solution.implementation.dependencies.length}`);\n for (const dep of solution.implementation.dependencies) {\n console.log(chalk.dim(` • ${dep.name}@${dep.version}`));\n }\n }\n\n if (solution.implementation.envVars.length > 0) {\n console.log(` Environment Variables: ${solution.implementation.envVars.length}`);\n for (const env of solution.implementation.envVars) {\n const required = env.required ? chalk.red(\"*\") : \"\";\n console.log(chalk.dim(` • ${env.name}${required}`));\n }\n }\n\n // Metrics\n console.log(chalk.bold(\"\\nMetrics:\"));\n console.log(` Applications: ${solution.metrics.applications}`);\n console.log(` Success Rate: ${(solution.metrics.successRate * 100).toFixed(1)}%`);\n\n // Metadata\n console.log(chalk.bold(\"\\nMetadata:\"));\n console.log(` Created: ${formatDate(solution.createdAt)}`);\n console.log(` Updated: ${formatDate(solution.updatedAt)}`);\n console.log(` Private: ${solution.isPrivate ? \"Yes\" : \"No\"}`);\n if (solution.deprecatedAt) {\n console.log(chalk.red(` Deprecated: ${formatDate(solution.deprecatedAt)}`));\n console.log(chalk.dim(` Reason: ${solution.deprecationReason || \"No reason provided\"}`));\n }\n\n console.log();\n}\n\n// ============================================\n// solution:export Command\n// ============================================\n\ninterface SolutionExportOptions {\n output?: string;\n format?: \"json\" | \"yaml\";\n category?: SolutionCategory;\n}\n\n/**\n * Export solution patterns to a file\n */\nexport async function solutionExportCommand(options: SolutionExportOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const format = options.format ?? \"json\";\n const outputPath = options.output ?? `solutions-export.${format}`;\n\n console.log(chalk.cyan(\"\\n📤 Exporting Solution Patterns\\n\"));\n\n const result = await store.listSolutions({\n solutionCategory: options.category,\n limit: 1000,\n });\n\n if (!result.success || !result.data) {\n console.error(chalk.red(`\\n✗ Export failed: ${result.error}\\n`));\n process.exit(1);\n }\n\n const solutions = result.data;\n\n if (solutions.length === 0) {\n console.log(chalk.yellow(\" No solutions to export\"));\n return;\n }\n\n // Format output\n const fs = await import(\"node:fs\");\n const pathModule = await import(\"node:path\");\n\n let output: string;\n if (format === \"yaml\") {\n output = `# Workflow Agent Solutions Export\\n# Exported: ${new Date().toISOString()}\\n\\nsolutions:\\n`;\n for (const solution of solutions) {\n output += ` - id: ${solution.id}\\n`;\n output += ` name: \"${solution.name}\"\\n`;\n output += ` category: ${solution.category}\\n`;\n output += ` description: \"${solution.description}\"\\n\\n`;\n }\n } else {\n output = JSON.stringify(\n {\n version: \"1.0\",\n exportedAt: new Date().toISOString(),\n solutions,\n },\n null,\n 2,\n );\n }\n\n // Write file\n const fullOutputPath = pathModule.default.isAbsolute(outputPath)\n ? outputPath\n : pathModule.default.join(cwd, outputPath);\n\n await fs.promises.writeFile(fullOutputPath, output, \"utf-8\");\n\n console.log(chalk.green(` ✓ Exported ${solutions.length} solutions\\n`));\n console.log(chalk.dim(` Output: ${fullOutputPath}`));\n console.log(chalk.dim(` Format: ${format.toUpperCase()}`));\n}\n\n// ============================================\n// solution:import Command\n// ============================================\n\ninterface SolutionImportOptions {\n format?: \"json\" | \"yaml\";\n dryRun?: boolean;\n merge?: boolean;\n}\n\n/**\n * Import solution patterns from a file\n */\nexport async function solutionImportCommand(\n file: string,\n options: SolutionImportOptions,\n) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const dryRun = options.dryRun ?? false;\n const merge = options.merge ?? true;\n\n console.log(chalk.cyan(\"\\n📥 Importing Solution Patterns\\n\"));\n\n const fs = await import(\"node:fs\");\n const pathModule = await import(\"node:path\");\n\n const filePath = pathModule.default.isAbsolute(file) ? file : pathModule.default.join(cwd, file);\n\n if (!fs.existsSync(filePath)) {\n console.log(chalk.red(` ✗ File not found: ${filePath}`));\n process.exit(1);\n }\n\n const content = await fs.promises.readFile(filePath, \"utf-8\");\n\n let importData: { solutions?: SolutionPattern[] };\n\n try {\n if (file.endsWith(\".yaml\") || file.endsWith(\".yml\")) {\n console.log(chalk.yellow(\" YAML import not fully supported, treating as JSON\"));\n }\n importData = JSON.parse(content);\n } catch {\n console.log(chalk.red(\" ✗ Failed to parse import file\"));\n process.exit(1);\n }\n\n const solutions = importData.solutions || [];\n\n if (solutions.length === 0) {\n console.log(chalk.yellow(\" No solutions found in import file\"));\n return;\n }\n\n console.log(chalk.dim(` Found ${solutions.length} solutions\\n`));\n\n if (dryRun) {\n console.log(chalk.yellow(\" 🔍 Dry run - no changes will be made\\n\"));\n\n for (const solution of solutions) {\n console.log(chalk.dim(` Would import: ${solution.name} (${solution.id})`));\n }\n return;\n }\n\n // Import solutions\n let imported = 0;\n let skipped = 0;\n\n for (const solution of solutions) {\n const existing = await store.getSolution(solution.id);\n if (existing.success && existing.data && !merge) {\n console.log(chalk.yellow(` Skipped (exists): ${solution.name}`));\n skipped++;\n continue;\n }\n\n await store.saveSolution(solution);\n console.log(chalk.green(` ✓ Imported: ${solution.name}`));\n imported++;\n }\n\n console.log(chalk.green(`\\n ✓ Import complete`));\n console.log(chalk.dim(` Imported: ${imported}`));\n console.log(chalk.dim(` Skipped: ${skipped}`));\n}\n\n// ============================================\n// solution:analyze Command\n// ============================================\n\n/**\n * Analyze codebase for potential solution patterns\n */\nexport async function solutionAnalyzeCommand() {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const fs = await import(\"node:fs\");\n const pathModule = await import(\"node:path\");\n\n console.log(chalk.cyan(\"\\n🔍 Analyzing Codebase for Solution Patterns\\n\"));\n\n // Get existing solutions\n const existingResult = await store.listSolutions({ limit: 1000 });\n const existingNames = (existingResult.data || []).map((s) => s.name.toLowerCase());\n\n const opportunities: Array<{\n name: string;\n category: SolutionCategory;\n description: string;\n path: string;\n }> = [];\n\n // Check for common solution patterns\n const patterns = [\n { path: \"src/auth\", name: \"Authentication Module\", category: \"auth\" as SolutionCategory, desc: \"Authentication implementation\" },\n { path: \"src/lib/auth\", name: \"Auth Library\", category: \"auth\" as SolutionCategory, desc: \"Authentication utilities\" },\n { path: \"src/api\", name: \"API Layer\", category: \"api\" as SolutionCategory, desc: \"API routing structure\" },\n { path: \"app/api\", name: \"Next.js API Routes\", category: \"api\" as SolutionCategory, desc: \"Next.js API implementation\" },\n { path: \"src/db\", name: \"Database Layer\", category: \"database\" as SolutionCategory, desc: \"Database connection and queries\" },\n { path: \"src/lib/db\", name: \"Database Utilities\", category: \"database\" as SolutionCategory, desc: \"Database helper functions\" },\n { path: \"src/components/ui\", name: \"UI Components\", category: \"ui\" as SolutionCategory, desc: \"Reusable UI components\" },\n { path: \"src/hooks\", name: \"Custom Hooks\", category: \"ui\" as SolutionCategory, desc: \"React custom hooks\" },\n { path: \"__tests__\", name: \"Testing Setup\", category: \"testing\" as SolutionCategory, desc: \"Test configuration and utilities\" },\n { path: \".github/workflows\", name: \"CI/CD Pipeline\", category: \"deployment\" as SolutionCategory, desc: \"GitHub Actions workflows\" },\n { path: \"src/integrations\", name: \"Integrations\", category: \"integrations\" as SolutionCategory, desc: \"Third-party integrations\" },\n { path: \"src/middleware\", name: \"Middleware\", category: \"security\" as SolutionCategory, desc: \"Request middleware and guards\" },\n ];\n\n for (const pattern of patterns) {\n const fullPath = pathModule.default.join(cwd, pattern.path);\n if (fs.existsSync(fullPath) && !existingNames.includes(pattern.name.toLowerCase())) {\n opportunities.push({\n name: pattern.name,\n category: pattern.category,\n description: pattern.desc,\n path: pattern.path,\n });\n }\n }\n\n if (opportunities.length === 0) {\n console.log(chalk.green(\" ✓ No new solution opportunities found\"));\n console.log(chalk.dim(\"\\n Your solutions seem well-captured!\"));\n return;\n }\n\n console.log(chalk.bold(` Found ${opportunities.length} potential solutions:\\n`));\n\n for (const opp of opportunities) {\n console.log(` ${formatCategory(opp.category)}`);\n console.log(chalk.bold(` ${opp.name}`));\n console.log(chalk.dim(` ${opp.description}`));\n console.log(chalk.dim(` Path: ${opp.path}\\n`));\n }\n\n console.log(chalk.dim(\" To capture a solution:\"));\n console.log(chalk.cyan(\" workflow solution capture --path <path> --name <name>\"));\n}\n","/**\n * Learn Command Group\n *\n * Consolidates learning pattern commands under `workflow learn <subcommand>`:\n * - record: Record a new pattern from a successful implementation\n * - list: List recorded learning patterns\n * - apply: Apply a pattern to the current project\n * - capture: Capture files as a blueprint pattern\n * - analyze: Analyze codebase for learning opportunities\n * - export: Export patterns to a file\n * - import: Import patterns from a file\n * - sync: Sync patterns with remote registry\n * - config: Configure learning settings\n * - deprecate: Deprecate an outdated pattern\n * - publish: Mark pattern(s) as public for syncing\n * - stats: Show learning statistics\n * - clean: Clean old or stale patterns\n * - validate: Validate pattern files\n */\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n learnRecordCommand,\n learnListCommand,\n learnApplyCommand,\n learnCaptureCommand,\n learnConfigCommand,\n learnDeprecateCommand,\n learnPublishCommand,\n learnStatsCommand,\n learnValidateCommand,\n learnAnalyzeCommand,\n learnExportCommand,\n learnImportCommand,\n learnCleanCommand,\n} from \"../learn.js\";\n\n/**\n * Create the learn command group with all subcommands\n */\nexport function createLearnCommand(): Command {\n const learnCmd = new Command(\"learn\")\n .description(\"Manage learning patterns for AI-assisted development\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn record ${chalk.dim(\"# Interactive pattern recording\")}\n $ workflow learn list --type blueprint ${chalk.dim(\"# List blueprints only\")}\n $ workflow learn apply abc123 --dry-run ${chalk.dim(\"# Preview pattern application\")}\n $ workflow learn capture ./src/auth --name auth ${chalk.dim(\"# Capture as blueprint\")}\n $ workflow learn analyze ${chalk.dim(\"# Find learning opportunities\")}\n $ workflow learn export --format json ${chalk.dim(\"# Export patterns\")}\n $ workflow learn import patterns.json ${chalk.dim(\"# Import patterns\")}\n $ workflow learn sync --push ${chalk.dim(\"# Push patterns to registry\")}\n $ workflow learn config --show ${chalk.dim(\"# Show current configuration\")}\n $ workflow learn stats ${chalk.dim(\"# Show learning statistics\")}\n $ workflow learn clean --deprecated ${chalk.dim(\"# Clean deprecated patterns\")}\n $ workflow learn validate --fix ${chalk.dim(\"# Auto-fix pattern issues\")}\n`,\n )\n .action(() => {\n // Show help if no subcommand provided\n learnCmd.help();\n });\n\n // record subcommand\n learnCmd\n .command(\"record\")\n .description(\"Record a new pattern from a successful implementation\")\n .option(\"--name <name>\", \"Pattern name\")\n .option(\"--description <desc>\", \"Pattern description\")\n .option(\"--category <cat>\", \"Category (migration, security, performance, etc.)\")\n .option(\"--framework <fw>\", \"Framework (next, react, vue, etc.)\")\n .option(\"--version <ver>\", \"Framework version range\")\n .option(\"--tags <tags>\", \"Comma-separated tags (category:value)\")\n .option(\"--type <type>\", \"Pattern type (fix, blueprint)\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn record ${chalk.dim(\"# Interactive mode\")}\n $ workflow learn record --name \"Auth Fix\" \\\\\n --category security --type fix ${chalk.dim(\"# With metadata\")}\n $ workflow learn record --framework next \\\\\n --version \">=14.0.0\" ${chalk.dim(\"# With framework\")}\n`,\n )\n .action(learnRecordCommand);\n\n // list subcommand\n learnCmd\n .command(\"list\")\n .description(\"List recorded learning patterns\")\n .option(\"--type <type>\", \"Filter by type (fix, blueprint, all)\")\n .option(\"--framework <fw>\", \"Filter by framework\")\n .option(\"--tag <tag>\", \"Filter by tag\")\n .option(\"--deprecated\", \"Include deprecated patterns\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn list ${chalk.dim(\"# List all patterns\")}\n $ workflow learn list --type blueprint ${chalk.dim(\"# Only blueprints\")}\n $ workflow learn list --framework next ${chalk.dim(\"# Filter by framework\")}\n $ workflow learn list --deprecated ${chalk.dim(\"# Include deprecated\")}\n`,\n )\n .action(learnListCommand);\n\n // apply subcommand\n learnCmd\n .command(\"apply <patternId>\")\n .description(\"Apply a pattern to the current project\")\n .option(\"--framework <fw>\", \"Override framework\")\n .option(\"--version <ver>\", \"Override version\")\n .option(\"--dry-run\", \"Preview without applying\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn apply abc123 ${chalk.dim(\"# Apply pattern\")}\n $ workflow learn apply abc123 --dry-run ${chalk.dim(\"# Preview changes\")}\n $ workflow learn apply abc123 --framework react ${chalk.dim(\"# Override framework\")}\n`,\n )\n .action(learnApplyCommand);\n\n // capture subcommand\n learnCmd\n .command(\"capture <paths...>\")\n .description(\"Capture files as a blueprint pattern with auto-inferred metadata\")\n .option(\"--name <name>\", \"Pattern name (inferred from paths if omitted)\")\n .option(\"--description <desc>\", \"Pattern description\")\n .option(\"--framework <fw>\", \"Override inferred framework\")\n .option(\"--tags <tags>\", \"Additional tags (comma-separated)\")\n .option(\"--dry-run\", \"Preview what would be captured without saving\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn capture ./src/auth ${chalk.dim(\"# Capture auth module\")}\n $ workflow learn capture ./src/auth --name \"Auth\" ${chalk.dim(\"# With custom name\")}\n $ workflow learn capture ./components --dry-run ${chalk.dim(\"# Preview capture\")}\n $ workflow learn capture ./hooks --tags \"react,hooks\" ${chalk.dim(\"# With tags\")}\n`,\n )\n .action(learnCaptureCommand);\n\n // sync subcommand\n learnCmd\n .command(\"sync\")\n .description(\"Sync patterns with remote registry (alias for: workflow sync --learn)\")\n .option(\"--push\", \"Push local patterns to registry\")\n .option(\"--pull\", \"Pull patterns from registry\")\n .option(\"--dry-run\", \"Preview without syncing\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn sync ${chalk.dim(\"# Interactive sync\")}\n $ workflow learn sync --push ${chalk.dim(\"# Push to registry\")}\n $ workflow learn sync --pull ${chalk.dim(\"# Pull from registry\")}\n $ workflow learn sync --push --dry-run ${chalk.dim(\"# Preview push\")}\n\n${chalk.bold(\"Pro Tip:\")}\n For more options including solutions sync, use:\n $ workflow sync --all ${chalk.dim(\"# Sync everything\")}\n`,\n )\n .action(async (options) => {\n // Forward to unified sync with learn flag\n const { syncCommand } = await import(\"../sync.js\");\n return syncCommand({ ...options, learn: true });\n });\n\n // config subcommand\n learnCmd\n .command(\"config\")\n .description(\"Configure learning settings\")\n .option(\"--enable-sync\", \"Enable pattern sync\")\n .option(\"--disable-sync\", \"Disable pattern sync\")\n .option(\"--enable-telemetry\", \"Enable anonymous telemetry\")\n .option(\"--disable-telemetry\", \"Disable telemetry\")\n .option(\"--reset-id\", \"Reset contributor ID\")\n .option(\"--show\", \"Show current configuration\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn config --show ${chalk.dim(\"# Show current config\")}\n $ workflow learn config --enable-sync ${chalk.dim(\"# Enable sync\")}\n $ workflow learn config --disable-telemetry ${chalk.dim(\"# Disable telemetry\")}\n $ workflow learn config --reset-id ${chalk.dim(\"# Reset contributor ID\")}\n`,\n )\n .action(learnConfigCommand);\n\n // deprecate subcommand\n learnCmd\n .command(\"deprecate <patternId> <reason>\")\n .description(\"Deprecate an outdated pattern\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn deprecate abc123 \"Superseded by xyz789\"\n $ workflow learn deprecate def456 \"No longer compatible with latest version\"\n`,\n )\n .action(learnDeprecateCommand);\n\n // publish subcommand\n learnCmd\n .command(\"publish [patternId]\")\n .description(\"Mark pattern(s) as public for syncing\")\n .option(\"--private\", \"Mark as private instead of public\")\n .option(\"--all\", \"Apply to all patterns\")\n .option(\"-y, --yes\", \"Skip confirmation prompts\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn publish abc123 ${chalk.dim(\"# Publish one pattern\")}\n $ workflow learn publish --all ${chalk.dim(\"# Publish all patterns\")}\n $ workflow learn publish abc123 --private ${chalk.dim(\"# Make private\")}\n $ workflow learn publish --all -y ${chalk.dim(\"# Publish all, skip prompt\")}\n`,\n )\n .action(learnPublishCommand);\n\n // stats subcommand\n learnCmd\n .command(\"stats\")\n .description(\"Show learning statistics\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn stats ${chalk.dim(\"# Show all statistics\")}\n`,\n )\n .action(learnStatsCommand);\n\n // analyze subcommand\n learnCmd\n .command(\"analyze\")\n .description(\"Analyze codebase for learning opportunities\")\n .option(\"-v, --verbose\", \"Show detailed output including paths\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn analyze ${chalk.dim(\"# Find learning opportunities\")}\n $ workflow learn analyze --verbose ${chalk.dim(\"# Show paths and details\")}\n`,\n )\n .action(learnAnalyzeCommand);\n\n // export subcommand\n learnCmd\n .command(\"export\")\n .description(\"Export learning patterns to a file\")\n .option(\"-o, --output <path>\", \"Output file path\", \"patterns-export.json\")\n .option(\"-f, --format <format>\", \"Output format (json, yaml)\", \"json\")\n .option(\"-t, --type <type>\", \"Pattern type to export (fix, blueprint, all)\", \"all\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn export ${chalk.dim(\"# Export all as JSON\")}\n $ workflow learn export --format yaml ${chalk.dim(\"# Export as YAML\")}\n $ workflow learn export --type fix ${chalk.dim(\"# Export only fixes\")}\n $ workflow learn export -o backup.json ${chalk.dim(\"# Custom output path\")}\n`,\n )\n .action(learnExportCommand);\n\n // import subcommand\n learnCmd\n .command(\"import <file>\")\n .description(\"Import learning patterns from a file\")\n .option(\"-f, --format <format>\", \"Input format (json, yaml)\", \"json\")\n .option(\"--dry-run\", \"Preview import without making changes\")\n .option(\"--no-merge\", \"Skip existing patterns instead of merging\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn import patterns.json ${chalk.dim(\"# Import from JSON\")}\n $ workflow learn import backup.json --dry-run ${chalk.dim(\"# Preview import\")}\n $ workflow learn import patterns.yaml --format yaml ${chalk.dim(\"# Import from YAML\")}\n`,\n )\n .action(learnImportCommand);\n\n // clean subcommand\n learnCmd\n .command(\"clean\")\n .description(\"Clean old or stale learning patterns\")\n .option(\"--deprecated\", \"Remove deprecated patterns\")\n .option(\"--stale\", \"Remove patterns not used in 90+ days\")\n .option(\"--all\", \"Remove all patterns (use with caution!)\")\n .option(\"--dry-run\", \"Preview what would be removed\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn clean --deprecated ${chalk.dim(\"# Remove deprecated\")}\n $ workflow learn clean --stale ${chalk.dim(\"# Remove stale patterns\")}\n $ workflow learn clean --all --dry-run ${chalk.dim(\"# Preview full clean\")}\n`,\n )\n .action(learnCleanCommand);\n\n // validate subcommand\n learnCmd\n .command(\"validate\")\n .description(\"Validate pattern files and optionally auto-fix common issues\")\n .option(\"-t, --type <type>\", \"Pattern type to validate (fix, blueprint, solution, all)\", \"all\")\n .option(\"-f, --file <path>\", \"Validate a specific file by path\")\n .option(\"--fix\", \"Automatically fix common issues\")\n .option(\"-v, --verbose\", \"Show detailed validation output\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn validate ${chalk.dim(\"# Validate all patterns\")}\n $ workflow learn validate --type fix ${chalk.dim(\"# Only fix patterns\")}\n $ workflow learn validate --fix ${chalk.dim(\"# Auto-fix issues\")}\n $ workflow learn validate -f ./patterns/auth.json ${chalk.dim(\"# Validate specific file\")}\n $ workflow learn validate --verbose ${chalk.dim(\"# Detailed output\")}\n`,\n )\n .action(learnValidateCommand);\n\n return learnCmd;\n}\n\n// Re-export individual commands for backward compatibility\nexport {\n learnRecordCommand,\n learnListCommand,\n learnApplyCommand,\n learnCaptureCommand,\n learnSyncCommand,\n learnConfigCommand,\n learnDeprecateCommand,\n learnPublishCommand,\n learnStatsCommand,\n learnValidateCommand,\n learnAnalyzeCommand,\n learnExportCommand,\n learnImportCommand,\n learnCleanCommand,\n} from \"../learn.js\";\n","import chalk from \"chalk\";\nimport * as p from \"@clack/prompts\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n PatternStore,\n ContributorManager,\n PatternAnonymizer,\n TelemetryCollector,\n FixPatternSchema,\n BlueprintSchema,\n SolutionPatternSchema,\n type FixPattern,\n type Blueprint,\n type SolutionPattern,\n type PatternTag,\n} from \"@hawkinside_out/workflow-improvement-tracker\";\nimport {\n RegistryClient,\n RateLimitedException,\n RegistryError,\n} from \"../../sync/index.js\";\n\n// ============================================\n// Types\n// ============================================\n\ninterface LearnRecordOptions {\n name?: string;\n description?: string;\n category?: string;\n framework?: string;\n version?: string;\n tags?: string;\n type?: \"fix\" | \"blueprint\";\n}\n\ninterface LearnApplyOptions {\n framework?: string;\n version?: string;\n dryRun?: boolean;\n}\n\ninterface LearnListOptions {\n type?: \"fix\" | \"blueprint\" | \"all\";\n framework?: string;\n tag?: string;\n deprecated?: boolean;\n}\n\ninterface LearnSyncOptions {\n push?: boolean;\n pull?: boolean;\n dryRun?: boolean;\n}\n\ninterface LearnConfigOptions {\n enableSync?: boolean;\n disableSync?: boolean;\n enableTelemetry?: boolean;\n disableTelemetry?: boolean;\n resetId?: boolean;\n show?: boolean;\n}\n\ninterface LearnValidateOptions {\n type?: \"fix\" | \"blueprint\" | \"solution\" | \"all\";\n fix?: boolean;\n verbose?: boolean;\n file?: string;\n}\n\n// ============================================\n// Helper Functions\n// ============================================\n\nfunction getWorkspacePath(): string {\n return process.cwd();\n}\n\nfunction formatDate(isoString: string): string {\n return new Date(isoString).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nfunction formatTags(tags: PatternTag[]): string {\n return tags.map((t) => `${t.category}:${t.name}`).join(\", \");\n}\n\n// ============================================\n// learn:record Command\n// ============================================\n\n/**\n * Record a new pattern from a successful implementation\n */\nexport async function learnRecordCommand(options: LearnRecordOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n📚 Record a Learning Pattern\\n\"));\n\n // Get pattern type\n let patternType = options.type;\n if (!patternType) {\n const typeChoice = await p.select({\n message: \"What type of pattern are you recording?\",\n options: [\n {\n value: \"fix\",\n label: \"🔧 Fix Pattern - A specific solution to a problem\",\n },\n {\n value: \"blueprint\",\n label: \"📐 Blueprint - A project structure template\",\n },\n ],\n });\n\n if (p.isCancel(typeChoice)) {\n p.cancel(\"Recording cancelled\");\n process.exit(0);\n }\n patternType = typeChoice as \"fix\" | \"blueprint\";\n }\n\n // Get pattern name\n let name = options.name;\n if (!name) {\n const nameInput = await p.text({\n message: \"Pattern name:\",\n placeholder: \"e.g., Next.js App Router Migration\",\n validate: (value) => {\n if (!value || value.length < 3)\n return \"Name must be at least 3 characters\";\n if (value.length > 100) return \"Name must be less than 100 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(nameInput)) {\n p.cancel(\"Recording cancelled\");\n process.exit(0);\n }\n name = nameInput as string;\n }\n\n // Get description\n let description = options.description;\n if (!description) {\n const descInput = await p.text({\n message: \"Description:\",\n placeholder: \"What does this pattern solve?\",\n validate: (value) => {\n if (!value || value.length < 10)\n return \"Description must be at least 10 characters\";\n if (value.length > 500)\n return \"Description must be less than 500 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(descInput)) {\n p.cancel(\"Recording cancelled\");\n process.exit(0);\n }\n description = descInput as string;\n }\n\n // Get framework\n let framework = options.framework;\n if (!framework) {\n const fwInput = await p.text({\n message: \"Framework:\",\n placeholder: \"e.g., next, react, vue, express\",\n });\n\n if (p.isCancel(fwInput)) {\n p.cancel(\"Recording cancelled\");\n process.exit(0);\n }\n framework = fwInput as string;\n }\n\n // Get version\n let version = options.version;\n if (!version) {\n const versionInput = await p.text({\n message: \"Framework version (semver range):\",\n placeholder: \"e.g., >=14.0.0, ^18.0.0\",\n initialValue: \">=1.0.0\",\n });\n\n if (p.isCancel(versionInput)) {\n p.cancel(\"Recording cancelled\");\n process.exit(0);\n }\n version = versionInput as string;\n }\n\n // Get category for fix patterns\n let category = options.category;\n if (patternType === \"fix\" && !category) {\n const catChoice = await p.select({\n message: \"Category:\",\n options: [\n { value: \"migration\", label: \"🔄 Migration\" },\n { value: \"security\", label: \"🔒 Security\" },\n { value: \"performance\", label: \"⚡ Performance\" },\n { value: \"compatibility\", label: \"🔗 Compatibility\" },\n { value: \"deprecation\", label: \"⚠️ Deprecation\" },\n { value: \"configuration\", label: \"⚙️ Configuration\" },\n { value: \"best-practice\", label: \"✨ Best Practice\" },\n { value: \"error-handling\", label: \"🚨 Error Handling\" },\n { value: \"testing\", label: \"🧪 Testing\" },\n { value: \"other\", label: \"📦 Other\" },\n ],\n });\n\n if (p.isCancel(catChoice)) {\n p.cancel(\"Recording cancelled\");\n process.exit(0);\n }\n category = catChoice as string;\n }\n\n // Parse tags\n const tags: PatternTag[] = [];\n if (options.tags) {\n const tagPairs = options.tags.split(\",\").map((t) => t.trim());\n for (const pair of tagPairs) {\n const [cat, val] = pair.split(\":\");\n if (cat && val) {\n tags.push({\n category: cat as PatternTag[\"category\"],\n name: val,\n });\n }\n }\n }\n\n // Add framework tag\n tags.push({ category: \"framework\", name: framework });\n\n if (patternType === \"fix\") {\n // Create fix pattern\n const now = new Date().toISOString();\n const fixPattern: FixPattern = {\n id: crypto.randomUUID(),\n name,\n description,\n category: category as FixPattern[\"category\"],\n tags,\n trigger: {\n errorPattern: \".*\",\n errorMessage: \"Generic error pattern\",\n filePattern: \"**/*\",\n },\n solution: {\n type: \"command\",\n steps: [\n {\n order: 1,\n action: \"run\",\n target: \"npm run fix\",\n description: \"Follow the pattern instructions\",\n },\n ],\n },\n compatibility: {\n framework,\n frameworkVersion: version,\n runtime: \"node\",\n runtimeVersion: \">=18.0.0\",\n dependencies: [],\n },\n metrics: {\n applications: 0,\n successes: 0,\n failures: 0,\n successRate: 0,\n },\n source: \"manual\",\n isPrivate: true,\n createdAt: now,\n updatedAt: now,\n };\n\n const result = await store.saveFixPattern(fixPattern);\n\n if (result.success) {\n console.log(chalk.green(\"\\n✅ Fix pattern recorded successfully!\\n\"));\n console.log(chalk.dim(` ID: ${fixPattern.id}`));\n console.log(chalk.dim(` Name: ${name}`));\n console.log(chalk.dim(` Category: ${category}`));\n console.log(chalk.dim(` Framework: ${framework} ${version}`));\n } else {\n console.log(chalk.red(\"\\n❌ Failed to record pattern\"));\n console.log(chalk.dim(` Error: ${result.error}`));\n process.exit(1);\n }\n } else {\n // Create blueprint\n const now = new Date().toISOString();\n const blueprint: Blueprint = {\n id: crypto.randomUUID(),\n name,\n description,\n tags,\n stack: {\n framework,\n language: \"typescript\",\n runtime: \"node\",\n packageManager: \"pnpm\",\n dependencies: [],\n devDependencies: [],\n },\n structure: {\n directories: [],\n keyFiles: [],\n },\n setup: {\n prerequisites: [],\n steps: [],\n configs: [],\n },\n compatibility: {\n framework,\n frameworkVersion: version,\n runtime: \"node\",\n runtimeVersion: \">=18.0.0\",\n dependencies: [],\n },\n metrics: {\n applications: 0,\n successes: 0,\n failures: 0,\n successRate: 0,\n },\n relatedPatterns: [],\n isPrivate: true,\n createdAt: now,\n updatedAt: now,\n };\n\n const result = await store.saveBlueprint(blueprint);\n\n if (result.success) {\n console.log(chalk.green(\"\\n✅ Blueprint recorded successfully!\\n\"));\n console.log(chalk.dim(` ID: ${blueprint.id}`));\n console.log(chalk.dim(` Name: ${name}`));\n console.log(chalk.dim(` Framework: ${framework} ${version}`));\n } else {\n console.log(chalk.red(\"\\n❌ Failed to record blueprint\"));\n console.log(chalk.dim(` Error: ${result.error}`));\n process.exit(1);\n }\n }\n}\n\n// ============================================\n// learn:list Command\n// ============================================\n\n/**\n * List recorded patterns\n */\nexport async function learnListCommand(options: LearnListOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const patternType = options.type ?? \"all\";\n const showDeprecated = options.deprecated ?? false;\n\n console.log(chalk.cyan(\"\\n📚 Recorded Learning Patterns\\n\"));\n\n // List fix patterns\n if (patternType === \"all\" || patternType === \"fix\") {\n const fixResult = await store.listFixPatterns({\n tags: options.tag\n ? [{ category: \"framework\", name: options.tag }]\n : undefined,\n framework: options.framework,\n includeDeprecated: showDeprecated,\n });\n\n if (fixResult.success && fixResult.data && fixResult.data.length > 0) {\n console.log(chalk.bold.yellow(\"🔧 Fix Patterns:\\n\"));\n\n for (const pattern of fixResult.data) {\n const isDeprecated = pattern.deprecatedAt !== undefined;\n const statusIcon = isDeprecated ? \"⚠️\" : \"✓\";\n const nameColor = isDeprecated ? chalk.dim : chalk.white;\n\n console.log(` ${statusIcon} ${nameColor(pattern.name)}`);\n console.log(chalk.dim(` ID: ${pattern.id}`));\n console.log(chalk.dim(` Category: ${pattern.category}`));\n console.log(\n chalk.dim(` Created: ${formatDate(pattern.createdAt)}`),\n );\n console.log(\n chalk.dim(\n ` Success Rate: ${(pattern.metrics.successRate * 100).toFixed(0)}% (${pattern.metrics.successes}/${pattern.metrics.applications})`,\n ),\n );\n if (pattern.tags.length > 0) {\n console.log(chalk.dim(` Tags: ${formatTags(pattern.tags)}`));\n }\n console.log(\"\");\n }\n } else if (patternType === \"fix\") {\n console.log(chalk.dim(\" No fix patterns found.\\n\"));\n }\n }\n\n // List blueprints\n if (patternType === \"all\" || patternType === \"blueprint\") {\n const bpResult = await store.listBlueprints({\n tags: options.tag\n ? [{ category: \"framework\", name: options.tag }]\n : undefined,\n framework: options.framework,\n includeDeprecated: showDeprecated,\n });\n\n if (bpResult.success && bpResult.data && bpResult.data.length > 0) {\n console.log(chalk.bold.blue(\"📐 Blueprints:\\n\"));\n\n for (const blueprint of bpResult.data) {\n const isDeprecated = blueprint.deprecatedAt !== undefined;\n const statusIcon = isDeprecated ? \"⚠️\" : \"✓\";\n const nameColor = isDeprecated ? chalk.dim : chalk.white;\n\n console.log(` ${statusIcon} ${nameColor(blueprint.name)}`);\n console.log(chalk.dim(` ID: ${blueprint.id}`));\n console.log(chalk.dim(` Language: ${blueprint.stack.language}`));\n console.log(\n chalk.dim(` Created: ${formatDate(blueprint.createdAt)}`),\n );\n console.log(\n chalk.dim(\n ` Success Rate: ${(blueprint.metrics.successRate * 100).toFixed(0)}% (${blueprint.metrics.successes}/${blueprint.metrics.applications})`,\n ),\n );\n if (blueprint.tags.length > 0) {\n console.log(chalk.dim(` Tags: ${formatTags(blueprint.tags)}`));\n }\n console.log(\"\");\n }\n } else if (patternType === \"blueprint\") {\n console.log(chalk.dim(\" No blueprints found.\\n\"));\n }\n }\n\n // Show stats\n const stats = await store.getStats();\n const totalPatterns = stats.totalFixes + stats.totalBlueprints;\n const totalDeprecated = stats.deprecatedFixes + stats.deprecatedBlueprints;\n const totalInvalid =\n stats.invalidFixes + stats.invalidBlueprints + stats.invalidSolutions;\n\n console.log(chalk.dim(\"━\".repeat(40)));\n console.log(chalk.dim(`Total: ${totalPatterns} patterns`));\n console.log(chalk.dim(` Fix Patterns: ${stats.totalFixes}`));\n console.log(chalk.dim(` Blueprints: ${stats.totalBlueprints}`));\n console.log(chalk.dim(` Deprecated: ${totalDeprecated}`));\n\n // Show validation warnings if any patterns failed to load\n if (totalInvalid > 0) {\n console.log(\n chalk.yellow(\n `\\n⚠️ ${totalInvalid} pattern(s) failed schema validation and were skipped:`,\n ),\n );\n console.log(\n chalk.dim(` Fix patterns: ${stats.invalidFixes} invalid`),\n );\n console.log(\n chalk.dim(` Blueprints: ${stats.invalidBlueprints} invalid`),\n );\n console.log(\n chalk.dim(` Solutions: ${stats.invalidSolutions} invalid`),\n );\n\n // Show detailed validation errors\n const validationErrors = store.getValidationErrors();\n if (validationErrors.length > 0) {\n console.log(chalk.yellow(\"\\n Validation errors:\"));\n for (const err of validationErrors.slice(0, 5)) {\n console.log(chalk.dim(` • ${err.file}: ${err.error}`));\n if (err.details && err.details.length > 0) {\n for (const detail of err.details.slice(0, 3)) {\n console.log(chalk.dim(` - ${detail}`));\n }\n if (err.details.length > 3) {\n console.log(\n chalk.dim(` ... and ${err.details.length - 3} more`),\n );\n }\n }\n }\n if (validationErrors.length > 5) {\n console.log(\n chalk.dim(\n ` ... and ${validationErrors.length - 5} more errors`,\n ),\n );\n }\n }\n\n console.log(\n chalk.dim(\n \"\\n Tip: Invalid patterns may be missing required fields. Use the PatternStore API\",\n ),\n );\n console.log(\n chalk.dim(\n \" to create patterns instead of writing JSON files directly.\",\n ),\n );\n }\n console.log(\"\");\n}\n\n// ============================================\n// learn:apply Command\n// ============================================\n\n/**\n * Apply a pattern to current project\n */\nexport async function learnApplyCommand(\n patternId: string,\n options: LearnApplyOptions,\n) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const telemetry = new TelemetryCollector(cwd);\n\n console.log(chalk.cyan(\"\\n🔧 Apply Learning Pattern\\n\"));\n\n // Try to find the pattern\n let pattern = await store.getFixPattern(patternId);\n let patternType: \"fix\" | \"blueprint\" = \"fix\";\n\n if (!pattern.success || !pattern.data) {\n // Try as blueprint\n const bpResult = await store.getBlueprint(patternId);\n if (bpResult.success && bpResult.data) {\n pattern = bpResult as typeof pattern;\n patternType = \"blueprint\";\n } else {\n console.log(chalk.red(`\\n❌ Pattern not found: ${patternId}`));\n console.log(\n chalk.dim(\" Use 'workflow learn:list' to see available patterns\"),\n );\n process.exit(1);\n }\n }\n\n const patternData = pattern.data!;\n console.log(chalk.white(` Pattern: ${patternData.name}`));\n console.log(chalk.dim(` Type: ${patternType}`));\n console.log(chalk.dim(` Description: ${patternData.description}`));\n\n if (options.dryRun) {\n console.log(\n chalk.yellow(\"\\n📋 DRY-RUN MODE: No changes will be applied\\n\"),\n );\n }\n\n // Record telemetry for application attempt\n const framework =\n options.framework ??\n patternData.compatibility?.frameworks?.[0]?.name ??\n \"unknown\";\n const version =\n options.version ??\n patternData.compatibility?.frameworks?.[0]?.version ??\n \"0.0.0\";\n\n await telemetry.recordApplication(patternId, patternType, framework, version);\n\n // For now, just show the pattern details\n // In future, this could apply automated changes\n if (patternType === \"fix\") {\n const fixPattern = patternData as FixPattern;\n console.log(chalk.cyan(\"\\n📋 Solution Steps:\\n\"));\n\n if (fixPattern.solution.steps) {\n for (let i = 0; i < fixPattern.solution.steps.length; i++) {\n const step = fixPattern.solution.steps[i];\n console.log(\n chalk.white(` ${i + 1}. [${step.action}] ${step.description}`),\n );\n if (step.file) {\n console.log(chalk.dim(` File: ${step.file}`));\n }\n }\n }\n } else {\n const blueprint = patternData as Blueprint;\n console.log(chalk.cyan(\"\\n📋 Setup Steps:\\n\"));\n\n if (blueprint.setup.steps) {\n for (let i = 0; i < blueprint.setup.steps.length; i++) {\n const step = blueprint.setup.steps[i];\n console.log(chalk.white(` ${i + 1}. ${step.description}`));\n if (step.command) {\n console.log(chalk.dim(` Command: ${step.command}`));\n }\n }\n }\n }\n\n // Confirm application\n if (!options.dryRun) {\n const confirmed = await p.confirm({\n message: \"Mark this pattern as successfully applied?\",\n initialValue: true,\n });\n\n if (p.isCancel(confirmed)) {\n p.cancel(\"Application cancelled\");\n process.exit(0);\n }\n\n if (confirmed) {\n // Update metrics\n await store.updatePatternMetrics(patternId, patternType, true);\n await telemetry.recordSuccess(patternId, patternType, framework, version);\n console.log(chalk.green(\"\\n✅ Pattern marked as successfully applied!\"));\n } else {\n // Record failure\n await store.updatePatternMetrics(patternId, patternType, false);\n await telemetry.recordFailure(\n patternId,\n patternType,\n framework,\n version,\n \"unknown\",\n );\n console.log(\n chalk.yellow(\"\\n⚠️ Pattern application marked as unsuccessful.\"),\n );\n }\n }\n}\n\n// ============================================\n// learn:sync Command\n// ============================================\n\n/**\n * Sync patterns with remote registry\n */\nexport async function learnSyncCommand(options: LearnSyncOptions) {\n const cwd = getWorkspacePath();\n const contributorManager = new ContributorManager(cwd);\n\n console.log(chalk.cyan(\"\\n🔄 Sync Learning Patterns\\n\"));\n\n // Check if sync is enabled\n const config = await contributorManager.getConfig();\n if (!config.success || !config.data?.syncOptIn) {\n console.log(chalk.yellow(\"⚠️ Sync is not enabled.\\n\"));\n console.log(chalk.dim(\" To enable sync, run:\"));\n console.log(chalk.dim(\" workflow learn:config --enable-sync\\n\"));\n console.log(\n chalk.dim(\n \" This allows you to share anonymized patterns with the community.\",\n ),\n );\n process.exit(0);\n }\n\n if (options.dryRun) {\n console.log(chalk.yellow(\"📋 DRY-RUN MODE: No changes will be synced\\n\"));\n }\n\n const store = new PatternStore(cwd);\n await store.initialize();\n const anonymizer = new PatternAnonymizer();\n\n // Get patterns to sync\n const { fixes, blueprints, solutions } = await store.getPatternsForSync();\n\n console.log(\n chalk.dim(\n ` Patterns ready to sync: ${fixes.length} fixes, ${blueprints.length} blueprints, ${solutions.length} solutions`,\n ),\n );\n\n if (options.push) {\n console.log(chalk.cyan(\"\\n📤 Pushing patterns...\\n\"));\n\n // Anonymize patterns before sync\n const anonymizedPatterns: Array<{\n pattern: FixPattern | Blueprint | SolutionPattern;\n type: \"fix\" | \"blueprint\" | \"solution\";\n originalId: string;\n }> = [];\n\n for (const fix of fixes) {\n const result = anonymizer.anonymizeFixPattern(fix);\n if (result.success && result.data) {\n anonymizedPatterns.push({\n pattern: result.data,\n type: \"fix\",\n originalId: fix.id,\n });\n console.log(chalk.dim(` ✓ Anonymized: ${fix.name}`));\n }\n }\n\n for (const bp of blueprints) {\n const result = anonymizer.anonymizeBlueprint(bp);\n if (result.success && result.data) {\n anonymizedPatterns.push({\n pattern: result.data,\n type: \"blueprint\",\n originalId: bp.id,\n });\n console.log(chalk.dim(` ✓ Anonymized: ${bp.name}`));\n }\n }\n\n for (const solution of solutions) {\n const result = anonymizer.anonymizeSolution(solution);\n if (result.success && result.data) {\n anonymizedPatterns.push({\n pattern: result.data,\n type: \"solution\",\n originalId: solution.id,\n });\n console.log(chalk.dim(` ✓ Anonymized: ${solution.name}`));\n }\n }\n\n const fixCount = anonymizedPatterns.filter((p) => p.type === \"fix\").length;\n const bpCount = anonymizedPatterns.filter((p) => p.type === \"blueprint\").length;\n const solutionCount = anonymizedPatterns.filter((p) => p.type === \"solution\").length;\n\n if (anonymizedPatterns.length === 0) {\n console.log(chalk.yellow(\"\\n⚠️ No patterns to push\"));\n return;\n }\n\n console.log(\n chalk.dim(\n `\\n Ready to push ${fixCount} fixes, ${bpCount} blueprints, and ${solutionCount} solutions`,\n ),\n );\n\n if (options.dryRun) {\n console.log(chalk.yellow(\"\\n📋 DRY-RUN: Patterns would be pushed (no actual changes)\"));\n return;\n }\n\n // Get contributor ID\n const contributorResult = await contributorManager.getOrCreateId();\n if (!contributorResult.success || !contributorResult.data) {\n console.log(chalk.red(\"\\n❌ Failed to get contributor ID\"));\n return;\n }\n\n // Push to registry\n const registryClient = new RegistryClient();\n\n try {\n console.log(chalk.dim(\"\\n Connecting to registry...\"));\n\n const pushResult = await registryClient.push(\n anonymizedPatterns.map((p) => ({\n pattern: p.pattern,\n type: p.type,\n })),\n contributorResult.data,\n );\n\n // Mark pushed patterns as synced\n if (pushResult.pushed > 0) {\n const pushedFixIds = anonymizedPatterns\n .filter((p) => p.type === \"fix\")\n .map((p) => p.originalId);\n const pushedBpIds = anonymizedPatterns\n .filter((p) => p.type === \"blueprint\")\n .map((p) => p.originalId);\n const pushedSolutionIds = anonymizedPatterns\n .filter((p) => p.type === \"solution\")\n .map((p) => p.originalId);\n\n if (pushedFixIds.length > 0) {\n await store.markAsSynced(pushedFixIds, \"fix\");\n }\n if (pushedBpIds.length > 0) {\n await store.markAsSynced(pushedBpIds, \"blueprint\");\n }\n if (pushedSolutionIds.length > 0) {\n await store.markAsSynced(pushedSolutionIds, \"solution\");\n }\n }\n\n console.log(\n chalk.green(`\\n✅ Successfully pushed ${pushResult.pushed} patterns to registry`),\n );\n\n if (pushResult.skipped > 0) {\n console.log(\n chalk.dim(` (${pushResult.skipped} patterns already existed)`),\n );\n }\n\n if (pushResult.errors && pushResult.errors.length > 0) {\n console.log(chalk.yellow(`\\n⚠️ Some patterns had errors:`));\n for (const err of pushResult.errors) {\n console.log(chalk.dim(` - ${err}`));\n }\n }\n\n console.log(\n chalk.dim(\n `\\n Rate limit: ${pushResult.rateLimit.remaining} patterns remaining this hour`,\n ),\n );\n } catch (error) {\n if (error instanceof RateLimitedException) {\n console.log(chalk.red(\"\\n❌ Rate limit exceeded\"));\n console.log(\n chalk.dim(\n ` Try again in ${error.getTimeUntilReset()}`,\n ),\n );\n } else if (error instanceof RegistryError) {\n console.log(chalk.red(`\\n❌ Registry error: ${error.message}`));\n } else {\n console.log(\n chalk.red(\n `\\n❌ Failed to push: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n }\n process.exit(1);\n }\n }\n\n if (options.pull) {\n console.log(chalk.cyan(\"\\n📥 Pulling patterns from registry...\\n\"));\n\n if (options.dryRun) {\n console.log(chalk.yellow(\"📋 DRY-RUN: Would pull patterns (no actual changes)\\n\"));\n\n // Show what would be pulled\n const registryClient = new RegistryClient();\n try {\n const result = await registryClient.pull({ limit: 10 });\n console.log(chalk.dim(` Registry has ${result.pagination.total} patterns available`));\n if (result.patterns.length > 0) {\n console.log(chalk.dim(\"\\n First 10 patterns:\"));\n for (const p of result.patterns) {\n console.log(chalk.dim(` - [${p.type}] ${(p.data as { name?: string }).name || p.id}`));\n }\n if (result.pagination.hasMore) {\n console.log(chalk.dim(` ... and ${result.pagination.total - 10} more`));\n }\n }\n } catch (error) {\n console.log(\n chalk.red(\n ` Failed to connect: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n }\n return;\n }\n\n // Pull patterns from registry\n const registryClient = new RegistryClient();\n\n try {\n console.log(chalk.dim(\" Connecting to registry...\"));\n\n let totalPulled = 0;\n let totalSkipped = 0;\n let offset = 0;\n const limit = 50;\n\n // Paginate through all patterns\n while (true) {\n const result = await registryClient.pull({ limit, offset });\n\n if (result.patterns.length === 0) {\n break;\n }\n\n for (const pattern of result.patterns) {\n // Check if pattern already exists locally\n let exists = false;\n if (pattern.type === \"fix\") {\n const existingResult = await store.getFixPattern(pattern.id);\n exists = existingResult.success && !!existingResult.data;\n } else if (pattern.type === \"blueprint\") {\n const existingResult = await store.getBlueprint(pattern.id);\n exists = existingResult.success && !!existingResult.data;\n } else if (pattern.type === \"solution\") {\n const existingResult = await store.getSolution(pattern.id);\n exists = existingResult.success && !!existingResult.data;\n }\n\n if (exists) {\n totalSkipped++;\n continue;\n }\n\n // Save pattern locally\n if (pattern.type === \"fix\") {\n const fixData = pattern.data as unknown as FixPattern;\n await store.saveFixPattern({\n ...fixData,\n id: pattern.id,\n source: \"community\",\n isPrivate: true, // Keep pulled patterns private by default\n });\n totalPulled++;\n } else if (pattern.type === \"blueprint\") {\n const bpData = pattern.data as unknown as Blueprint;\n await store.saveBlueprint({\n ...bpData,\n id: pattern.id,\n source: \"community\",\n isPrivate: true,\n });\n totalPulled++;\n } else if (pattern.type === \"solution\") {\n const solutionData = pattern.data as unknown as SolutionPattern;\n await store.saveSolution({\n ...solutionData,\n id: pattern.id,\n source: \"community\",\n isPrivate: true,\n });\n totalPulled++;\n }\n }\n\n if (!result.pagination.hasMore) {\n break;\n }\n\n offset += limit;\n console.log(chalk.dim(` ... pulled ${offset} patterns so far`));\n }\n\n console.log(\n chalk.green(`\\n✅ Pulled ${totalPulled} new patterns from registry`),\n );\n\n if (totalSkipped > 0) {\n console.log(chalk.dim(` (${totalSkipped} patterns already existed locally)`));\n }\n } catch (error) {\n if (error instanceof RegistryError) {\n console.log(chalk.red(`\\n❌ Registry error: ${error.message}`));\n } else {\n console.log(\n chalk.red(\n `\\n❌ Failed to pull: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n }\n process.exit(1);\n }\n }\n\n if (!options.push && !options.pull) {\n console.log(\n chalk.dim(\" Specify --push to upload or --pull to download patterns.\\n\"),\n );\n }\n}\n\n// ============================================\n// learn:config Command\n// ============================================\n\n/**\n * Configure learning settings\n */\nexport async function learnConfigCommand(options: LearnConfigOptions) {\n const cwd = getWorkspacePath();\n const contributorManager = new ContributorManager(cwd);\n\n console.log(chalk.cyan(\"\\n⚙️ Learning Configuration\\n\"));\n\n if (options.enableSync) {\n const result = await contributorManager.enableSync();\n if (result.success) {\n console.log(chalk.green(\"✅ Sync enabled\"));\n console.log(\n chalk.dim(\" Your patterns will be anonymized before sharing.\"),\n );\n } else {\n console.log(chalk.red(`❌ Failed: ${result.error}`));\n }\n return;\n }\n\n if (options.disableSync) {\n const result = await contributorManager.disableSync();\n if (result.success) {\n console.log(chalk.green(\"✅ Sync disabled\"));\n } else {\n console.log(chalk.red(`❌ Failed: ${result.error}`));\n }\n return;\n }\n\n if (options.enableTelemetry) {\n const result = await contributorManager.enableTelemetry();\n if (result.success) {\n console.log(chalk.green(\"✅ Telemetry enabled\"));\n console.log(\n chalk.dim(\n \" Anonymous usage data helps improve pattern recommendations.\",\n ),\n );\n } else {\n console.log(chalk.red(`❌ Failed: ${result.error}`));\n }\n return;\n }\n\n if (options.disableTelemetry) {\n const result = await contributorManager.disableTelemetry();\n if (result.success) {\n console.log(chalk.green(\"✅ Telemetry disabled\"));\n } else {\n console.log(chalk.red(`❌ Failed: ${result.error}`));\n }\n return;\n }\n\n if (options.resetId) {\n const confirmed = await p.confirm({\n message:\n \"Are you sure you want to reset your contributor ID? This cannot be undone.\",\n initialValue: false,\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.cancel(\"Reset cancelled\");\n return;\n }\n\n const result = await contributorManager.resetId();\n if (result.success) {\n console.log(chalk.green(\"✅ Contributor ID reset\"));\n console.log(chalk.dim(` New ID: ${result.data?.id}`));\n } else {\n console.log(chalk.red(`❌ Failed: ${result.error}`));\n }\n return;\n }\n\n // Default: show current config\n const config = await contributorManager.getConfig();\n if (config.success && config.data) {\n console.log(chalk.white(\" Current Settings:\\n\"));\n console.log(chalk.dim(` Contributor ID: ${config.data.id}`));\n console.log(chalk.dim(` Created: ${formatDate(config.data.createdAt)}`));\n console.log(\n chalk.dim(` Sync Enabled: ${config.data.syncOptIn ? \"Yes\" : \"No\"}`),\n );\n console.log(\n chalk.dim(\n ` Telemetry Enabled: ${config.data.telemetryEnabled ? \"Yes\" : \"No\"}`,\n ),\n );\n if (config.data.syncEnabledAt) {\n console.log(\n chalk.dim(\n ` Sync Enabled At: ${formatDate(config.data.syncEnabledAt)}`,\n ),\n );\n }\n } else {\n console.log(\n chalk.dim(\n \" No configuration found. Settings will be created on first use.\\n\",\n ),\n );\n }\n}\n\n// ============================================\n// learn:publish Command\n// ============================================\n\ninterface LearnPublishOptions {\n private?: boolean;\n all?: boolean;\n yes?: boolean;\n}\n\n/**\n * Mark patterns as public (syncable) or private\n */\nexport async function learnPublishCommand(\n patternId: string | undefined,\n options: LearnPublishOptions,\n) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n const makePrivate = options.private ?? false;\n const actionWord = makePrivate ? \"private\" : \"public\";\n const emoji = makePrivate ? \"🔒\" : \"🌐\";\n\n console.log(chalk.cyan(`\\n${emoji} Mark Pattern(s) ${actionWord}\\n`));\n\n // Handle --all flag\n if (options.all) {\n const fixesResult = await store.listFixPatterns({});\n const blueprintsResult = await store.listBlueprints({});\n\n const allFixes = fixesResult.success && fixesResult.data ? fixesResult.data : [];\n const allBlueprints = blueprintsResult.success && blueprintsResult.data ? blueprintsResult.data : [];\n\n const fixesToUpdate = allFixes.filter((p) => p.isPrivate !== makePrivate);\n const blueprintsToUpdate = allBlueprints.filter(\n (p) => p.isPrivate !== makePrivate,\n );\n\n const totalToUpdate = fixesToUpdate.length + blueprintsToUpdate.length;\n\n if (totalToUpdate === 0) {\n console.log(\n chalk.yellow(` All patterns are already ${actionWord}. Nothing to do.`),\n );\n return;\n }\n\n console.log(\n chalk.white(\n ` Found ${totalToUpdate} pattern(s) to mark as ${actionWord}:`,\n ),\n );\n console.log(chalk.dim(` Fix Patterns: ${fixesToUpdate.length}`));\n console.log(chalk.dim(` Blueprints: ${blueprintsToUpdate.length}`));\n\n // Skip confirmation if --yes flag is passed\n if (!options.yes) {\n const confirmed = await p.confirm({\n message: `Mark all ${totalToUpdate} patterns as ${actionWord}?`,\n initialValue: false,\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.cancel(\"Cancelled\");\n return;\n }\n }\n\n let successCount = 0;\n let failCount = 0;\n\n for (const pattern of fixesToUpdate) {\n const result = await store.saveFixPattern({\n ...pattern,\n isPrivate: makePrivate,\n updatedAt: new Date().toISOString(),\n });\n if (result.success) {\n successCount++;\n } else {\n failCount++;\n }\n }\n\n for (const blueprint of blueprintsToUpdate) {\n const result = await store.saveBlueprint({\n ...blueprint,\n isPrivate: makePrivate,\n updatedAt: new Date().toISOString(),\n });\n if (result.success) {\n successCount++;\n } else {\n failCount++;\n }\n }\n\n console.log(\n chalk.green(`\\n✅ Updated ${successCount} pattern(s) to ${actionWord}`),\n );\n if (failCount > 0) {\n console.log(chalk.red(`❌ Failed to update ${failCount} pattern(s)`));\n }\n return;\n }\n\n // Single pattern mode - require patternId\n if (!patternId) {\n console.log(chalk.red(\"❌ Pattern ID is required\"));\n console.log(\n chalk.dim(\" Usage: workflow learn:publish <patternId> [--private]\"),\n );\n console.log(\n chalk.dim(\" workflow learn:publish --all [--private]\"),\n );\n process.exit(1);\n }\n\n // Try to find the pattern\n let patternType: \"fix\" | \"blueprint\" = \"fix\";\n let pattern = await store.getFixPattern(patternId);\n\n if (!pattern.success || !pattern.data) {\n const bpResult = await store.getBlueprint(patternId);\n if (bpResult.success && bpResult.data) {\n pattern = bpResult as typeof pattern;\n patternType = \"blueprint\";\n } else {\n console.log(chalk.red(`\\n❌ Pattern not found: ${patternId}`));\n console.log(\n chalk.dim(\" Use 'workflow learn:list' to see available patterns\"),\n );\n process.exit(1);\n }\n }\n\n const currentStatus = pattern.data!.isPrivate ? \"private\" : \"public\";\n\n if (pattern.data!.isPrivate === makePrivate) {\n console.log(\n chalk.yellow(` Pattern is already ${actionWord}. Nothing to do.`),\n );\n console.log(chalk.dim(` Name: ${pattern.data!.name}`));\n return;\n }\n\n console.log(chalk.white(` Pattern: ${pattern.data!.name}`));\n console.log(chalk.dim(` Type: ${patternType}`));\n console.log(chalk.dim(` Current: ${currentStatus} → ${actionWord}`));\n\n // Skip confirmation if --yes flag is passed\n if (!options.yes) {\n const confirmed = await p.confirm({\n message: `Mark this pattern as ${actionWord}?`,\n initialValue: true,\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.cancel(\"Cancelled\");\n return;\n }\n }\n\n const updatedPattern = {\n ...pattern.data!,\n isPrivate: makePrivate,\n updatedAt: new Date().toISOString(),\n };\n\n let result;\n if (patternType === \"fix\") {\n result = await store.saveFixPattern(updatedPattern as FixPattern);\n } else {\n result = await store.saveBlueprint(updatedPattern as Blueprint);\n }\n\n if (result.success) {\n console.log(chalk.green(`\\n✅ Pattern marked as ${actionWord}`));\n if (!makePrivate) {\n console.log(\n chalk.dim(\" Run 'workflow learn:sync --push' to upload to registry\"),\n );\n }\n } else {\n console.log(chalk.red(`\\n❌ Failed: ${result.error}`));\n process.exit(1);\n }\n}\n\n// ============================================\n// learn:deprecate Command\n// ============================================\n\n/**\n * Deprecate an old or outdated pattern\n */\nexport async function learnDeprecateCommand(patternId: string, reason: string) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n⚠️ Deprecate Pattern\\n\"));\n\n // Try to find the pattern\n let patternType: \"fix\" | \"blueprint\" = \"fix\";\n let pattern = await store.getFixPattern(patternId);\n\n if (!pattern.success || !pattern.data) {\n const bpResult = await store.getBlueprint(patternId);\n if (bpResult.success && bpResult.data) {\n pattern = bpResult as typeof pattern;\n patternType = \"blueprint\";\n } else {\n console.log(chalk.red(`\\n❌ Pattern not found: ${patternId}`));\n process.exit(1);\n }\n }\n\n console.log(chalk.white(` Pattern: ${pattern.data!.name}`));\n console.log(chalk.dim(` Reason: ${reason}`));\n\n const confirmed = await p.confirm({\n message: \"Are you sure you want to deprecate this pattern?\",\n initialValue: false,\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.cancel(\"Deprecation cancelled\");\n return;\n }\n\n const result = await store.deprecatePattern(patternId, patternType, reason);\n\n if (result.success) {\n console.log(chalk.green(\"\\n✅ Pattern deprecated successfully\"));\n } else {\n console.log(chalk.red(`\\n❌ Failed: ${result.error}`));\n process.exit(1);\n }\n}\n\n// ============================================\n// learn:stats Command\n// ============================================\n\n/**\n * Show learning statistics\n */\nexport async function learnStatsCommand() {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const telemetry = new TelemetryCollector(cwd);\n\n console.log(chalk.cyan(\"\\n📊 Learning Statistics\\n\"));\n\n // Pattern stats\n const storeStats = await store.getStats();\n const totalPatterns = storeStats.totalFixes + storeStats.totalBlueprints;\n const totalDeprecated =\n storeStats.deprecatedFixes + storeStats.deprecatedBlueprints;\n\n console.log(chalk.bold.white(\" Patterns:\\n\"));\n console.log(chalk.dim(` Total: ${totalPatterns}`));\n console.log(chalk.dim(` Fix Patterns: ${storeStats.totalFixes}`));\n console.log(chalk.dim(` Blueprints: ${storeStats.totalBlueprints}`));\n console.log(chalk.dim(` Deprecated: ${totalDeprecated}`));\n\n // Telemetry stats\n const telemetryStats = await telemetry.getStats();\n console.log(chalk.bold.white(\"\\n Telemetry:\\n\"));\n console.log(chalk.dim(` Pending Events: ${telemetryStats.pendingEvents}`));\n console.log(\n chalk.dim(` Total Events Sent: ${telemetryStats.totalEventsSent}`),\n );\n if (telemetryStats.lastFlushAt) {\n console.log(\n chalk.dim(` Last Flush: ${formatDate(telemetryStats.lastFlushAt)}`),\n );\n }\n\n console.log(\"\");\n}\n\n// ============================================\n// learn:validate Command\n// ============================================\n\ninterface ValidationResult {\n file: string;\n type: \"fix\" | \"blueprint\" | \"solution\";\n valid: boolean;\n errors: string[];\n fixable: boolean;\n fixedData?: FixPattern | Blueprint | unknown;\n}\n\n/**\n * Validate pattern files and optionally fix them\n */\nexport async function learnValidateCommand(options: LearnValidateOptions) {\n const cwd = getWorkspacePath();\n const patternsPath = path.join(cwd, \".workflow\", \"patterns\");\n const patternType = options.type ?? \"all\";\n const shouldFix = options.fix ?? false;\n const verbose = options.verbose ?? false;\n const specificFile = options.file;\n\n console.log(chalk.cyan(\"\\n🔍 Validating Pattern Files\\n\"));\n\n const results: ValidationResult[] = [];\n\n // If a specific file is provided, validate only that file\n if (specificFile) {\n const fileResult = await validateSingleFile(specificFile, verbose);\n if (fileResult) {\n results.push(fileResult);\n }\n } else {\n // Validate fix patterns\n if (patternType === \"all\" || patternType === \"fix\") {\n const fixesPath = path.join(patternsPath, \"fixes\");\n const fixResults = await validatePatternDirectory(\n fixesPath,\n \"fix\",\n FixPatternSchema,\n verbose,\n );\n results.push(...fixResults);\n }\n\n // Validate blueprints\n if (patternType === \"all\" || patternType === \"blueprint\") {\n const blueprintsPath = path.join(patternsPath, \"blueprints\");\n const bpResults = await validatePatternDirectory(\n blueprintsPath,\n \"blueprint\",\n BlueprintSchema,\n verbose,\n );\n results.push(...bpResults);\n }\n\n // Validate solutions\n if (patternType === \"all\" || patternType === \"solution\") {\n const solutionsPath = path.join(patternsPath, \"solutions\");\n const solResults = await validatePatternDirectory(\n solutionsPath,\n \"solution\",\n SolutionPatternSchema,\n verbose,\n );\n results.push(...solResults);\n }\n }\n\n // Summary\n const valid = results.filter((r) => r.valid);\n const invalid = results.filter((r) => !r.valid);\n const fixable = invalid.filter((r) => r.fixable);\n\n console.log(chalk.dim(\"━\".repeat(50)));\n console.log(chalk.bold(`\\n📊 Validation Summary\\n`));\n console.log(chalk.green(` ✓ Valid: ${valid.length}`));\n if (invalid.length > 0) {\n console.log(chalk.red(` ✗ Invalid: ${invalid.length}`));\n console.log(chalk.yellow(` 🔧 Auto-fixable: ${fixable.length}`));\n }\n\n // Show invalid patterns\n if (invalid.length > 0) {\n console.log(chalk.red(`\\n❌ Invalid Patterns:\\n`));\n for (const result of invalid) {\n console.log(chalk.white(` ${result.file} (${result.type})`));\n for (const err of result.errors.slice(0, 5)) {\n console.log(chalk.dim(` - ${err}`));\n }\n if (result.errors.length > 5) {\n console.log(chalk.dim(` ... and ${result.errors.length - 5} more`));\n }\n if (result.fixable) {\n console.log(chalk.yellow(` → Can be auto-fixed`));\n }\n }\n }\n\n // Auto-fix if requested\n if (shouldFix && fixable.length > 0) {\n console.log(chalk.cyan(`\\n🔧 Auto-fixing ${fixable.length} patterns...\\n`));\n\n let fixed = 0;\n for (const result of fixable) {\n if (result.fixedData) {\n const filePath = path.join(\n patternsPath,\n result.type === \"fix\"\n ? \"fixes\"\n : result.type === \"blueprint\"\n ? \"blueprints\"\n : \"solutions\",\n result.file,\n );\n\n try {\n await fs.promises.writeFile(\n filePath,\n JSON.stringify(result.fixedData, null, 2),\n );\n console.log(chalk.green(` ✓ Fixed: ${result.file}`));\n fixed++;\n } catch (error) {\n console.log(\n chalk.red(\n ` ✗ Failed to fix: ${result.file} - ${error instanceof Error ? error.message : \"Unknown error\"}`,\n ),\n );\n }\n }\n }\n\n console.log(chalk.green(`\\n✅ Fixed ${fixed}/${fixable.length} patterns`));\n } else if (fixable.length > 0 && !shouldFix) {\n console.log(\n chalk.yellow(\n `\\n💡 Run with --fix to auto-fix ${fixable.length} patterns`,\n ),\n );\n }\n\n console.log(\"\");\n\n // Exit with error code if there are unfixable invalid patterns\n const unfixable = invalid.filter((r) => !r.fixable);\n if (unfixable.length > 0 && !shouldFix) {\n process.exit(1);\n }\n if (invalid.length > 0 && !shouldFix) {\n process.exit(1);\n }\n}\n\n/**\n * Validate all JSON files in a pattern directory\n */\nasync function validatePatternDirectory(\n dirPath: string,\n type: \"fix\" | \"blueprint\" | \"solution\",\n schema: typeof FixPatternSchema | typeof BlueprintSchema | typeof SolutionPatternSchema,\n verbose: boolean,\n): Promise<ValidationResult[]> {\n const results: ValidationResult[] = [];\n\n try {\n const files = await fs.promises.readdir(dirPath);\n\n for (const file of files) {\n if (!file.endsWith(\".json\")) continue;\n\n const filePath = path.join(dirPath, file);\n const result = await validatePatternFile(filePath, file, type, schema, verbose);\n results.push(result);\n\n if (verbose) {\n if (result.valid) {\n console.log(chalk.green(` ✓ ${file}`));\n } else {\n console.log(chalk.red(` ✗ ${file}`));\n }\n }\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n console.log(\n chalk.yellow(` ⚠ Could not read ${type} directory: ${dirPath}`),\n );\n }\n }\n\n return results;\n}\n\n/**\n * Validate a single file by its absolute path, auto-detecting type from path\n */\nasync function validateSingleFile(\n filePath: string,\n verbose: boolean,\n): Promise<ValidationResult | null> {\n const fileName = path.basename(filePath);\n\n // Detect type from path\n let type: \"fix\" | \"blueprint\" | \"solution\";\n let schema: typeof FixPatternSchema | typeof BlueprintSchema | typeof SolutionPatternSchema;\n\n if (filePath.includes(\"/fixes/\") || filePath.includes(\"\\\\fixes\\\\\")) {\n type = \"fix\";\n schema = FixPatternSchema;\n } else if (filePath.includes(\"/blueprints/\") || filePath.includes(\"\\\\blueprints\\\\\")) {\n type = \"blueprint\";\n schema = BlueprintSchema;\n } else if (filePath.includes(\"/solutions/\") || filePath.includes(\"\\\\solutions\\\\\")) {\n type = \"solution\";\n schema = SolutionPatternSchema;\n } else {\n // Try to detect from content\n try {\n const content = await fs.promises.readFile(filePath, \"utf-8\");\n const data = JSON.parse(content);\n\n // Heuristics to detect type\n if (data.trigger && data.solution) {\n type = \"fix\";\n schema = FixPatternSchema;\n } else if (data.stack && data.structure) {\n type = \"blueprint\";\n schema = BlueprintSchema;\n } else if (data.context && data.approach) {\n type = \"solution\";\n schema = SolutionPatternSchema;\n } else {\n // Default to blueprint as it's most common\n type = \"blueprint\";\n schema = BlueprintSchema;\n }\n } catch {\n // Default to blueprint\n type = \"blueprint\";\n schema = BlueprintSchema;\n }\n }\n\n return validatePatternFile(filePath, fileName, type, schema, verbose);\n}\n\n/**\n * Validate a single pattern file\n */\nasync function validatePatternFile(\n filePath: string,\n fileName: string,\n type: \"fix\" | \"blueprint\" | \"solution\",\n schema: typeof FixPatternSchema | typeof BlueprintSchema | typeof SolutionPatternSchema,\n verbose: boolean,\n): Promise<ValidationResult> {\n try {\n const content = await fs.promises.readFile(filePath, \"utf-8\");\n const data = JSON.parse(content);\n\n const validation = schema.safeParse(data);\n\n if (validation.success) {\n return {\n file: fileName,\n type,\n valid: true,\n errors: [],\n fixable: false,\n };\n }\n\n // Collect errors\n const errors = validation.error.issues.map(\n (i) => `${i.path.join(\".\")}: ${i.message}`,\n );\n\n // Try to auto-fix common issues\n const { fixable, fixedData } = tryAutoFix(data, type, validation.error.issues);\n\n return {\n file: fileName,\n type,\n valid: false,\n errors,\n fixable,\n fixedData,\n };\n } catch (error) {\n return {\n file: fileName,\n type,\n valid: false,\n errors: [\n error instanceof Error ? error.message : \"Failed to parse JSON\",\n ],\n fixable: false,\n };\n }\n}\n\n/**\n * Try to auto-fix common validation issues\n */\nfunction tryAutoFix(\n data: Record<string, unknown>,\n type: \"fix\" | \"blueprint\" | \"solution\",\n issues: { path: (string | number)[]; message: string; code: string }[],\n): { fixable: boolean; fixedData?: Record<string, unknown> } {\n const fixedData = { ...data };\n let allFixable = true;\n\n for (const issue of issues) {\n const pathStr = issue.path.join(\".\");\n\n // Auto-fix missing metrics\n if (pathStr === \"metrics\" && issue.code === \"invalid_type\") {\n fixedData.metrics = createDefaultMetrics();\n continue;\n }\n\n // Auto-fix missing setup (for blueprints)\n if (pathStr === \"setup\" && issue.code === \"invalid_type\" && type === \"blueprint\") {\n fixedData.setup = {\n commands: [],\n envVars: [],\n dependencies: [],\n };\n continue;\n }\n\n // Auto-fix missing relatedPatterns\n if (pathStr === \"relatedPatterns\" && issue.code === \"invalid_type\") {\n fixedData.relatedPatterns = [];\n continue;\n }\n\n // Auto-fix missing tags\n if (pathStr === \"tags\" && issue.code === \"invalid_type\") {\n fixedData.tags = [];\n continue;\n }\n\n // Auto-fix missing errorSignatures (for fix patterns)\n if (pathStr === \"errorSignatures\" && issue.code === \"invalid_type\" && type === \"fix\") {\n fixedData.errorSignatures = [];\n continue;\n }\n\n // Auto-fix missing codeChanges (for fix patterns)\n if (pathStr === \"codeChanges\" && issue.code === \"invalid_type\" && type === \"fix\") {\n fixedData.codeChanges = [];\n continue;\n }\n\n // Auto-fix missing problemKeywords (for solutions)\n if (pathStr === \"problemKeywords\" && issue.code === \"invalid_type\" && type === \"solution\") {\n fixedData.problemKeywords = [];\n continue;\n }\n\n // Auto-fix missing implementations (for solutions)\n if (pathStr === \"implementations\" && issue.code === \"invalid_type\" && type === \"solution\") {\n fixedData.implementations = [];\n continue;\n }\n\n // Can't auto-fix this issue\n allFixable = false;\n }\n\n // Re-validate the fixed data\n let schema;\n if (type === \"fix\") {\n schema = FixPatternSchema;\n } else if (type === \"blueprint\") {\n schema = BlueprintSchema;\n } else {\n schema = SolutionPatternSchema;\n }\n\n const revalidation = schema.safeParse(fixedData);\n if (revalidation.success) {\n return { fixable: true, fixedData };\n }\n\n // If still invalid, check if we fixed some but not all\n if (allFixable) {\n return { fixable: true, fixedData };\n }\n\n return { fixable: false };\n}\n\n// ============================================\n// learn:capture Command\n// ============================================\n\n/**\n * Library to tag mapping for dependency-based tag inference\n */\nconst LIBRARY_TAG_MAP: Record<string, { category: PatternTag[\"category\"]; name: string }[]> = {\n // Frontend Frameworks\n \"react\": [{ category: \"framework\", name: \"react\" }],\n \"react-dom\": [{ category: \"framework\", name: \"react\" }],\n \"next\": [{ category: \"framework\", name: \"next\" }],\n \"vue\": [{ category: \"framework\", name: \"vue\" }],\n \"nuxt\": [{ category: \"framework\", name: \"nuxt\" }],\n \"svelte\": [{ category: \"framework\", name: \"svelte\" }],\n \"@sveltejs/kit\": [{ category: \"framework\", name: \"sveltekit\" }],\n \"solid-js\": [{ category: \"framework\", name: \"solid\" }],\n \"@angular/core\": [{ category: \"framework\", name: \"angular\" }],\n \"astro\": [{ category: \"framework\", name: \"astro\" }],\n \"remix\": [{ category: \"framework\", name: \"remix\" }],\n\n // Backend Frameworks\n \"express\": [{ category: \"framework\", name: \"express\" }],\n \"fastify\": [{ category: \"framework\", name: \"fastify\" }],\n \"hono\": [{ category: \"framework\", name: \"hono\" }],\n \"koa\": [{ category: \"framework\", name: \"koa\" }],\n \"@nestjs/core\": [{ category: \"framework\", name: \"nestjs\" }],\n \"hapi\": [{ category: \"framework\", name: \"hapi\" }],\n\n // Testing\n \"vitest\": [{ category: \"tooling\", name: \"vitest\" }, { category: \"category\", name: \"testing\" }],\n \"jest\": [{ category: \"tooling\", name: \"jest\" }, { category: \"category\", name: \"testing\" }],\n \"@testing-library/react\": [{ category: \"tooling\", name: \"testing-library\" }],\n \"playwright\": [{ category: \"tooling\", name: \"playwright\" }, { category: \"category\", name: \"e2e\" }],\n \"cypress\": [{ category: \"tooling\", name: \"cypress\" }, { category: \"category\", name: \"e2e\" }],\n\n // State Management\n \"zustand\": [{ category: \"tooling\", name: \"zustand\" }, { category: \"category\", name: \"state\" }],\n \"redux\": [{ category: \"tooling\", name: \"redux\" }, { category: \"category\", name: \"state\" }],\n \"@reduxjs/toolkit\": [{ category: \"tooling\", name: \"redux-toolkit\" }, { category: \"category\", name: \"state\" }],\n \"jotai\": [{ category: \"tooling\", name: \"jotai\" }, { category: \"category\", name: \"state\" }],\n \"recoil\": [{ category: \"tooling\", name: \"recoil\" }, { category: \"category\", name: \"state\" }],\n \"mobx\": [{ category: \"tooling\", name: \"mobx\" }, { category: \"category\", name: \"state\" }],\n \"pinia\": [{ category: \"tooling\", name: \"pinia\" }, { category: \"category\", name: \"state\" }],\n \"xstate\": [{ category: \"tooling\", name: \"xstate\" }, { category: \"category\", name: \"state-machine\" }],\n\n // Database & ORM\n \"prisma\": [{ category: \"tooling\", name: \"prisma\" }, { category: \"category\", name: \"database\" }],\n \"@prisma/client\": [{ category: \"tooling\", name: \"prisma\" }, { category: \"category\", name: \"database\" }],\n \"drizzle-orm\": [{ category: \"tooling\", name: \"drizzle\" }, { category: \"category\", name: \"database\" }],\n \"typeorm\": [{ category: \"tooling\", name: \"typeorm\" }, { category: \"category\", name: \"database\" }],\n \"mongoose\": [{ category: \"tooling\", name: \"mongoose\" }, { category: \"category\", name: \"mongodb\" }],\n \"knex\": [{ category: \"tooling\", name: \"knex\" }, { category: \"category\", name: \"database\" }],\n \"sequelize\": [{ category: \"tooling\", name: \"sequelize\" }, { category: \"category\", name: \"database\" }],\n\n // Authentication\n \"next-auth\": [{ category: \"tooling\", name: \"next-auth\" }, { category: \"category\", name: \"auth\" }],\n \"@auth/core\": [{ category: \"tooling\", name: \"authjs\" }, { category: \"category\", name: \"auth\" }],\n \"passport\": [{ category: \"tooling\", name: \"passport\" }, { category: \"category\", name: \"auth\" }],\n \"lucia\": [{ category: \"tooling\", name: \"lucia\" }, { category: \"category\", name: \"auth\" }],\n \"@clerk/nextjs\": [{ category: \"tooling\", name: \"clerk\" }, { category: \"category\", name: \"auth\" }],\n\n // UI Libraries\n \"@radix-ui/react-dialog\": [{ category: \"tooling\", name: \"radix-ui\" }],\n \"@radix-ui/react-dropdown-menu\": [{ category: \"tooling\", name: \"radix-ui\" }],\n \"@shadcn/ui\": [{ category: \"tooling\", name: \"shadcn\" }],\n \"@chakra-ui/react\": [{ category: \"tooling\", name: \"chakra-ui\" }],\n \"@mantine/core\": [{ category: \"tooling\", name: \"mantine\" }],\n \"@headlessui/react\": [{ category: \"tooling\", name: \"headlessui\" }],\n \"antd\": [{ category: \"tooling\", name: \"antd\" }],\n \"@mui/material\": [{ category: \"tooling\", name: \"material-ui\" }],\n\n // Styling\n \"tailwindcss\": [{ category: \"tooling\", name: \"tailwind\" }],\n \"styled-components\": [{ category: \"tooling\", name: \"styled-components\" }],\n \"@emotion/react\": [{ category: \"tooling\", name: \"emotion\" }],\n \"sass\": [{ category: \"tooling\", name: \"sass\" }],\n\n // API & Data Fetching\n \"@tanstack/react-query\": [{ category: \"tooling\", name: \"tanstack-query\" }, { category: \"category\", name: \"data-fetching\" }],\n \"swr\": [{ category: \"tooling\", name: \"swr\" }, { category: \"category\", name: \"data-fetching\" }],\n \"@trpc/server\": [{ category: \"tooling\", name: \"trpc\" }, { category: \"category\", name: \"api\" }],\n \"@trpc/client\": [{ category: \"tooling\", name: \"trpc\" }, { category: \"category\", name: \"api\" }],\n \"graphql\": [{ category: \"tooling\", name: \"graphql\" }, { category: \"category\", name: \"api\" }],\n \"@apollo/client\": [{ category: \"tooling\", name: \"apollo\" }, { category: \"category\", name: \"graphql\" }],\n \"axios\": [{ category: \"tooling\", name: \"axios\" }],\n\n // Form Libraries\n \"react-hook-form\": [{ category: \"tooling\", name: \"react-hook-form\" }, { category: \"category\", name: \"forms\" }],\n \"formik\": [{ category: \"tooling\", name: \"formik\" }, { category: \"category\", name: \"forms\" }],\n \"@tanstack/react-form\": [{ category: \"tooling\", name: \"tanstack-form\" }, { category: \"category\", name: \"forms\" }],\n\n // Validation\n \"zod\": [{ category: \"tooling\", name: \"zod\" }, { category: \"category\", name: \"validation\" }],\n \"yup\": [{ category: \"tooling\", name: \"yup\" }, { category: \"category\", name: \"validation\" }],\n \"valibot\": [{ category: \"tooling\", name: \"valibot\" }, { category: \"category\", name: \"validation\" }],\n\n // Build Tools\n \"vite\": [{ category: \"tooling\", name: \"vite\" }],\n \"esbuild\": [{ category: \"tooling\", name: \"esbuild\" }],\n \"tsup\": [{ category: \"tooling\", name: \"tsup\" }],\n \"webpack\": [{ category: \"tooling\", name: \"webpack\" }],\n \"turbo\": [{ category: \"tooling\", name: \"turborepo\" }],\n\n // Utilities\n \"lodash\": [{ category: \"tooling\", name: \"lodash\" }],\n \"date-fns\": [{ category: \"tooling\", name: \"date-fns\" }],\n \"dayjs\": [{ category: \"tooling\", name: \"dayjs\" }],\n \"uuid\": [{ category: \"tooling\", name: \"uuid\" }],\n \"nanoid\": [{ category: \"tooling\", name: \"nanoid\" }],\n\n // CLI & Developer Tools\n \"commander\": [{ category: \"tooling\", name: \"commander\" }, { category: \"category\", name: \"cli\" }],\n \"yargs\": [{ category: \"tooling\", name: \"yargs\" }, { category: \"category\", name: \"cli\" }],\n \"@clack/prompts\": [{ category: \"tooling\", name: \"clack\" }, { category: \"category\", name: \"cli\" }],\n \"inquirer\": [{ category: \"tooling\", name: \"inquirer\" }, { category: \"category\", name: \"cli\" }],\n \"chalk\": [{ category: \"tooling\", name: \"chalk\" }],\n\n // Runtime & Languages\n \"typescript\": [{ category: \"language\", name: \"typescript\" }],\n};\n\ninterface LearnCaptureOptions {\n name?: string;\n description?: string;\n framework?: string;\n tags?: string;\n dryRun?: boolean;\n}\n\n/**\n * Infer a pattern name from file paths\n */\nfunction inferPatternName(filePaths: string[]): string {\n // If single file, use filename without extension\n if (filePaths.length === 1) {\n const fileName = path.basename(filePaths[0]);\n const nameWithoutExt = fileName.replace(/\\.[^.]+$/, \"\");\n // Convert to title case\n return nameWithoutExt\n .replace(/[-_]/g, \" \")\n .replace(/([A-Z])/g, \" $1\")\n .trim()\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(\" \");\n }\n\n // Multiple files - find common directory or pattern\n const dirs = filePaths.map((p) => path.dirname(p));\n const uniqueDirs = [...new Set(dirs)];\n\n if (uniqueDirs.length === 1 && uniqueDirs[0] !== \".\") {\n // All in same directory\n const dirName = path.basename(uniqueDirs[0]);\n return dirName\n .replace(/[-_]/g, \" \")\n .replace(/([A-Z])/g, \" $1\")\n .trim()\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(\" \") + \" Pattern\";\n }\n\n // Find common prefix among filenames\n const fileNames = filePaths.map((p) => path.basename(p).replace(/\\.[^.]+$/, \"\"));\n if (fileNames.length > 0) {\n let commonPrefix = fileNames[0];\n for (const name of fileNames.slice(1)) {\n while (!name.startsWith(commonPrefix) && commonPrefix.length > 0) {\n commonPrefix = commonPrefix.slice(0, -1);\n }\n }\n if (commonPrefix.length > 2) {\n return commonPrefix\n .replace(/[-_]/g, \" \")\n .replace(/([A-Z])/g, \" $1\")\n .trim()\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(\" \") + \" Pattern\";\n }\n }\n\n // Default to file count\n return `Multi-file Pattern (${filePaths.length} files)`;\n}\n\n/**\n * Infer tags from package.json dependencies\n */\nasync function inferTagsFromDependencies(cwd: string): Promise<PatternTag[]> {\n const tags: PatternTag[] = [];\n const seenTags = new Set<string>();\n\n const packageJsonPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(packageJsonPath)) {\n return tags;\n }\n\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n for (const dep of Object.keys(allDeps)) {\n const mappedTags = LIBRARY_TAG_MAP[dep];\n if (mappedTags) {\n for (const tag of mappedTags) {\n const key = `${tag.category}:${tag.name}`;\n if (!seenTags.has(key)) {\n seenTags.add(key);\n tags.push(tag);\n }\n }\n }\n }\n } catch {\n // Ignore parse errors\n }\n\n return tags;\n}\n\n/**\n * Infer tags from file content and extensions\n */\nfunction inferTagsFromContent(filePaths: string[]): PatternTag[] {\n const tags: PatternTag[] = [];\n const seenTags = new Set<string>();\n\n const addTag = (category: PatternTag[\"category\"], name: string) => {\n const key = `${category}:${name}`;\n if (!seenTags.has(key)) {\n seenTags.add(key);\n tags.push({ category, name });\n }\n };\n\n for (const filePath of filePaths) {\n const ext = path.extname(filePath).toLowerCase();\n const fileName = path.basename(filePath).toLowerCase();\n\n // Language detection\n if (ext === \".ts\" || ext === \".tsx\") {\n addTag(\"language\", \"typescript\");\n } else if (ext === \".js\" || ext === \".jsx\" || ext === \".mjs\" || ext === \".cjs\") {\n addTag(\"language\", \"javascript\");\n } else if (ext === \".py\") {\n addTag(\"language\", \"python\");\n } else if (ext === \".go\") {\n addTag(\"language\", \"go\");\n } else if (ext === \".rs\") {\n addTag(\"language\", \"rust\");\n } else if (ext === \".css\" || ext === \".scss\" || ext === \".sass\") {\n addTag(\"tooling\", \"css\");\n }\n\n // React detection\n if (ext === \".tsx\" || ext === \".jsx\") {\n addTag(\"framework\", \"react\");\n }\n\n // Test file detection\n if (fileName.includes(\".test.\") || fileName.includes(\".spec.\") || fileName.startsWith(\"test_\")) {\n addTag(\"category\", \"testing\");\n }\n\n // Config file detection\n if (fileName.includes(\"config\") || fileName.startsWith(\".\")) {\n addTag(\"category\", \"configuration\");\n }\n\n // Component detection\n if (filePath.includes(\"/components/\") || filePath.includes(\"\\\\components\\\\\")) {\n addTag(\"category\", \"component\");\n }\n\n // Hook detection\n if (filePath.includes(\"/hooks/\") || filePath.includes(\"\\\\hooks\\\\\") || fileName.startsWith(\"use\")) {\n addTag(\"category\", \"hooks\");\n }\n\n // API/route detection\n if (filePath.includes(\"/api/\") || filePath.includes(\"\\\\api\\\\\") || filePath.includes(\"/routes/\")) {\n addTag(\"category\", \"api\");\n }\n\n // Utils detection\n if (filePath.includes(\"/utils/\") || filePath.includes(\"\\\\utils\\\\\") || filePath.includes(\"/lib/\")) {\n addTag(\"category\", \"utilities\");\n }\n }\n\n return tags;\n}\n\n/**\n * Capture files as a blueprint pattern with auto-inferred metadata\n */\nexport async function learnCaptureCommand(paths: string[], options: LearnCaptureOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n📸 Capture Files as Blueprint\\n\"));\n\n // Resolve all paths and validate they exist\n const resolvedPaths: string[] = [];\n const relativePaths: string[] = [];\n\n for (const inputPath of paths) {\n const absolutePath = path.isAbsolute(inputPath) ? inputPath : path.resolve(cwd, inputPath);\n \n if (!fs.existsSync(absolutePath)) {\n console.log(chalk.red(`✗ File not found: ${inputPath}`));\n process.exit(1);\n }\n\n const stat = fs.statSync(absolutePath);\n if (stat.isDirectory()) {\n // Recursively get all files in directory\n const files = getAllFilesInDir(absolutePath);\n for (const file of files) {\n resolvedPaths.push(file);\n relativePaths.push(path.relative(cwd, file));\n }\n } else {\n resolvedPaths.push(absolutePath);\n relativePaths.push(path.relative(cwd, absolutePath));\n }\n }\n\n if (resolvedPaths.length === 0) {\n console.log(chalk.red(\"✗ No files found to capture\"));\n process.exit(1);\n }\n\n console.log(chalk.dim(`Found ${resolvedPaths.length} file(s) to capture:\\n`));\n for (const relPath of relativePaths.slice(0, 10)) {\n console.log(chalk.dim(` • ${relPath}`));\n }\n if (relativePaths.length > 10) {\n console.log(chalk.dim(` ... and ${relativePaths.length - 10} more`));\n }\n console.log();\n\n // Infer tags from dependencies and content\n const depTags = await inferTagsFromDependencies(cwd);\n const contentTags = inferTagsFromContent(relativePaths);\n const allInferredTags = [...depTags, ...contentTags];\n\n // Deduplicate tags\n const seenTagKeys = new Set<string>();\n const uniqueTags: PatternTag[] = [];\n for (const tag of allInferredTags) {\n const key = `${tag.category}:${tag.name}`;\n if (!seenTagKeys.has(key)) {\n seenTagKeys.add(key);\n uniqueTags.push(tag);\n }\n }\n\n // Parse additional tags from options\n if (options.tags) {\n const tagPairs = options.tags.split(\",\").map((t) => t.trim());\n for (const pair of tagPairs) {\n const [cat, val] = pair.split(\":\");\n if (cat && val) {\n const key = `${cat}:${val}`;\n if (!seenTagKeys.has(key)) {\n seenTagKeys.add(key);\n uniqueTags.push({\n category: cat as PatternTag[\"category\"],\n name: val,\n });\n }\n }\n }\n }\n\n // Infer or get pattern name\n let name = options.name;\n if (!name) {\n const inferredName = inferPatternName(relativePaths);\n console.log(chalk.dim(`Inferred name: \"${inferredName}\"`));\n \n const nameInput = await p.text({\n message: \"Pattern name:\",\n placeholder: inferredName,\n initialValue: inferredName,\n validate: (value) => {\n if (!value || value.length < 3) return \"Name must be at least 3 characters\";\n if (value.length > 100) return \"Name must be less than 100 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(nameInput)) {\n p.cancel(\"Capture cancelled\");\n process.exit(0);\n }\n name = nameInput as string;\n }\n\n // Get description\n let description = options.description;\n if (!description) {\n const descInput = await p.text({\n message: \"Description:\",\n placeholder: \"What does this pattern provide?\",\n validate: (value) => {\n if (!value || value.length < 10) return \"Description must be at least 10 characters\";\n if (value.length > 500) return \"Description must be less than 500 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(descInput)) {\n p.cancel(\"Capture cancelled\");\n process.exit(0);\n }\n description = descInput as string;\n }\n\n // Determine framework\n let framework = options.framework;\n if (!framework) {\n // Try to get from inferred tags\n const frameworkTag = uniqueTags.find((t) => t.category === \"framework\");\n framework = frameworkTag?.name || \"general\";\n }\n\n // Show inferred tags and allow editing\n if (uniqueTags.length > 0) {\n console.log(chalk.dim(\"\\nInferred tags:\"));\n console.log(chalk.dim(` ${formatTags(uniqueTags)}`));\n }\n\n // Read file contents\n const files: Array<{ path: string; content: string; language: string }> = [];\n for (let i = 0; i < resolvedPaths.length; i++) {\n const absolutePath = resolvedPaths[i];\n const relativePath = relativePaths[i];\n const content = fs.readFileSync(absolutePath, \"utf-8\");\n const ext = path.extname(relativePath).slice(1);\n \n // Map extension to language\n const languageMap: Record<string, string> = {\n ts: \"typescript\",\n tsx: \"typescript\",\n js: \"javascript\",\n jsx: \"javascript\",\n mjs: \"javascript\",\n cjs: \"javascript\",\n py: \"python\",\n go: \"go\",\n rs: \"rust\",\n css: \"css\",\n scss: \"scss\",\n html: \"html\",\n json: \"json\",\n yaml: \"yaml\",\n yml: \"yaml\",\n md: \"markdown\",\n mdx: \"mdx\",\n sql: \"sql\",\n sh: \"bash\",\n bash: \"bash\",\n zsh: \"bash\",\n };\n\n files.push({\n path: relativePath,\n content,\n language: languageMap[ext] || ext || \"text\",\n });\n }\n\n // Determine the primary language from files\n const languageCounts: Record<string, number> = {};\n for (const file of files) {\n languageCounts[file.language] = (languageCounts[file.language] || 0) + 1;\n }\n const primaryLanguage = Object.entries(languageCounts)\n .sort((a, b) => b[1] - a[1])[0]?.[0] || \"typescript\";\n\n // Create blueprint with proper schema structure\n const now = new Date().toISOString();\n const contributorManager = new ContributorManager(cwd);\n const contributorResult = await contributorManager.getOrCreateId();\n const contributorId = contributorResult.success && contributorResult.data \n ? contributorResult.data \n : undefined;\n\n // Store file contents in structure.keyFiles\n const keyFiles = files.map((f) => ({\n path: f.path,\n purpose: `${f.language} file`,\n content: f.content,\n }));\n\n const blueprint: Blueprint = {\n id: crypto.randomUUID(),\n name,\n description,\n tags: uniqueTags,\n stack: {\n framework,\n language: primaryLanguage,\n runtime: \"node\",\n packageManager: \"pnpm\",\n dependencies: [],\n devDependencies: [],\n },\n structure: {\n directories: [...new Set(files.map((f) => path.dirname(f.path)).filter((d) => d !== \".\"))],\n keyFiles,\n },\n setup: {\n prerequisites: [],\n steps: [],\n configs: [],\n },\n compatibility: {\n framework,\n frameworkVersion: \">=1.0.0\",\n runtime: \"node\",\n runtimeVersion: \">=18.0.0\",\n dependencies: [],\n },\n metrics: {\n applications: 0,\n successes: 0,\n failures: 0,\n successRate: 0,\n },\n relatedPatterns: [],\n isPrivate: true,\n contributorId,\n createdAt: now,\n updatedAt: now,\n };\n\n // Dry run - just show what would be captured\n if (options.dryRun) {\n console.log(chalk.yellow(\"\\n🔍 Dry Run - Would capture:\\n\"));\n console.log(chalk.bold(`Name: ${name}`));\n console.log(chalk.dim(`Description: ${description}`));\n console.log(chalk.dim(`Framework: ${framework}`));\n console.log(chalk.dim(`Tags: ${formatTags(uniqueTags)}`));\n console.log(chalk.dim(`Files: ${files.length}`));\n console.log(chalk.dim(`ID: ${blueprint.id}`));\n console.log(chalk.yellow(\"\\n⚠️ No changes made (dry run)\"));\n return;\n }\n\n // Save blueprint\n const result = await store.saveBlueprint(blueprint);\n\n if (!result.success) {\n console.log(chalk.red(`\\n✗ Failed to save blueprint: ${result.error}`));\n process.exit(1);\n }\n\n console.log(chalk.green(\"\\n✓ Blueprint captured successfully!\\n\"));\n console.log(chalk.bold(`ID: ${blueprint.id}`));\n console.log(chalk.dim(`Name: ${name}`));\n console.log(chalk.dim(`Files: ${files.length}`));\n console.log(chalk.dim(`Tags: ${formatTags(uniqueTags)}`));\n console.log(chalk.dim(`\\nTo apply this pattern:`));\n console.log(chalk.cyan(` pnpm workflow:learn:apply ${blueprint.id}`));\n console.log(chalk.dim(`\\nTo publish to registry:`));\n console.log(chalk.cyan(` pnpm workflow:learn:publish ${blueprint.id}`));\n}\n\n/**\n * Recursively get all files in a directory\n */\nfunction getAllFilesInDir(dirPath: string): string[] {\n const files: string[] = [];\n const entries = fs.readdirSync(dirPath, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dirPath, entry.name);\n \n // Skip hidden files and common ignore patterns\n if (entry.name.startsWith(\".\") || \n entry.name === \"node_modules\" || \n entry.name === \"dist\" ||\n entry.name === \"build\" ||\n entry.name === \".git\") {\n continue;\n }\n\n if (entry.isDirectory()) {\n files.push(...getAllFilesInDir(fullPath));\n } else {\n files.push(fullPath);\n }\n }\n\n return files;\n}\n\n// ============================================\n// learn:analyze Command\n// ============================================\n\ninterface LearnAnalyzeOptions {\n verbose?: boolean;\n}\n\n/**\n * Analyze patterns in the codebase and suggest learnings\n */\nexport async function learnAnalyzeCommand(options: LearnAnalyzeOptions): Promise<void> {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const verbose = options.verbose ?? false;\n\n console.log(chalk.cyan(\"\\n🔍 Analyzing Codebase for Learning Opportunities\\n\"));\n\n // Get existing patterns\n const fixResult = await store.listFixPatterns({});\n const bpResult = await store.listBlueprints({});\n\n const existingPatterns = [\n ...(fixResult.data || []).map((p) => p.name.toLowerCase()),\n ...(bpResult.data || []).map((p) => p.name.toLowerCase()),\n ];\n\n // Scan for common patterns\n const opportunities: Array<{ type: string; name: string; description: string; path?: string }> = [];\n\n // Check for auth patterns\n const authPaths = [\"src/auth\", \"src/lib/auth\", \"lib/auth\", \"app/api/auth\"];\n for (const authPath of authPaths) {\n if (fs.existsSync(path.join(cwd, authPath))) {\n if (!existingPatterns.some((p) => p.includes(\"auth\"))) {\n opportunities.push({\n type: \"blueprint\",\n name: \"Authentication Module\",\n description: \"Capture your authentication implementation as a reusable pattern\",\n path: authPath,\n });\n }\n }\n }\n\n // Check for API route patterns\n const apiPaths = [\"src/api\", \"app/api\", \"pages/api\", \"src/routes\"];\n for (const apiPath of apiPaths) {\n if (fs.existsSync(path.join(cwd, apiPath))) {\n if (!existingPatterns.some((p) => p.includes(\"api\"))) {\n opportunities.push({\n type: \"blueprint\",\n name: \"API Structure\",\n description: \"Capture your API routing structure as a blueprint\",\n path: apiPath,\n });\n }\n }\n }\n\n // Check for component patterns\n const componentPaths = [\"src/components\", \"components\", \"src/ui\"];\n for (const compPath of componentPaths) {\n if (fs.existsSync(path.join(cwd, compPath))) {\n if (!existingPatterns.some((p) => p.includes(\"component\"))) {\n opportunities.push({\n type: \"blueprint\",\n name: \"Component Library\",\n description: \"Capture your component structure as a reusable pattern\",\n path: compPath,\n });\n }\n }\n }\n\n // Check for test patterns\n const testPaths = [\"__tests__\", \"test\", \"tests\", \"src/__tests__\"];\n for (const testPath of testPaths) {\n if (fs.existsSync(path.join(cwd, testPath))) {\n if (!existingPatterns.some((p) => p.includes(\"test\"))) {\n opportunities.push({\n type: \"blueprint\",\n name: \"Testing Structure\",\n description: \"Capture your testing setup as a blueprint\",\n path: testPath,\n });\n }\n }\n }\n\n // Display results\n if (opportunities.length === 0) {\n console.log(chalk.green(\" ✓ No new learning opportunities identified\"));\n console.log(chalk.dim(\"\\n Your patterns seem well-captured!\"));\n return;\n }\n\n console.log(chalk.bold(` Found ${opportunities.length} potential learning opportunities:\\n`));\n\n for (const opp of opportunities) {\n const icon = opp.type === \"blueprint\" ? \"📐\" : \"🔧\";\n console.log(` ${icon} ${chalk.green(opp.name)}`);\n console.log(chalk.dim(` ${opp.description}`));\n if (opp.path && verbose) {\n console.log(chalk.dim(` Path: ${opp.path}`));\n }\n console.log(\"\");\n }\n\n console.log(chalk.dim(\" To capture a pattern:\"));\n console.log(chalk.cyan(\" workflow learn capture <path> --name <name>\"));\n}\n\n// ============================================\n// learn:export Command\n// ============================================\n\ninterface LearnExportOptions {\n output?: string;\n format?: \"json\" | \"yaml\";\n type?: \"fix\" | \"blueprint\" | \"all\";\n}\n\n/**\n * Export learning patterns to a file\n */\nexport async function learnExportCommand(options: LearnExportOptions): Promise<void> {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const format = options.format ?? \"json\";\n const patternType = options.type ?? \"all\";\n const outputPath = options.output ?? `patterns-export.${format}`;\n\n console.log(chalk.cyan(\"\\n📤 Exporting Learning Patterns\\n\"));\n\n const exportData: { fixes: FixPattern[]; blueprints: Blueprint[] } = {\n fixes: [],\n blueprints: [],\n };\n\n // Export fix patterns\n if (patternType === \"all\" || patternType === \"fix\") {\n const fixResult = await store.listFixPatterns({});\n if (fixResult.success && fixResult.data) {\n exportData.fixes = fixResult.data;\n }\n }\n\n // Export blueprints\n if (patternType === \"all\" || patternType === \"blueprint\") {\n const bpResult = await store.listBlueprints({});\n if (bpResult.success && bpResult.data) {\n exportData.blueprints = bpResult.data;\n }\n }\n\n const totalCount = exportData.fixes.length + exportData.blueprints.length;\n\n if (totalCount === 0) {\n console.log(chalk.yellow(\" No patterns to export\"));\n return;\n }\n\n // Format output\n let output: string;\n if (format === \"yaml\") {\n // Simple YAML-like output (for actual YAML, would need a library)\n output = `# Workflow Agent Patterns Export\\n# Exported: ${new Date().toISOString()}\\n\\n`;\n output += `fixes:\\n`;\n for (const fix of exportData.fixes) {\n output += ` - id: ${fix.id}\\n`;\n output += ` name: \"${fix.name}\"\\n`;\n output += ` category: ${fix.category}\\n`;\n output += ` description: \"${fix.description}\"\\n\\n`;\n }\n output += `blueprints:\\n`;\n for (const bp of exportData.blueprints) {\n output += ` - id: ${bp.id}\\n`;\n output += ` name: \"${bp.name}\"\\n`;\n output += ` description: \"${bp.description}\"\\n\\n`;\n }\n } else {\n output = JSON.stringify(\n {\n version: \"1.0\",\n exportedAt: new Date().toISOString(),\n ...exportData,\n },\n null,\n 2,\n );\n }\n\n // Write file\n const fullOutputPath = path.isAbsolute(outputPath)\n ? outputPath\n : path.join(cwd, outputPath);\n\n await fs.promises.writeFile(fullOutputPath, output, \"utf-8\");\n\n console.log(chalk.green(` ✓ Exported ${totalCount} patterns\\n`));\n console.log(chalk.dim(` Fix patterns: ${exportData.fixes.length}`));\n console.log(chalk.dim(` Blueprints: ${exportData.blueprints.length}`));\n console.log(chalk.dim(` Output: ${fullOutputPath}`));\n console.log(chalk.dim(` Format: ${format.toUpperCase()}`));\n}\n\n// ============================================\n// learn:import Command\n// ============================================\n\ninterface LearnImportOptions {\n format?: \"json\" | \"yaml\";\n dryRun?: boolean;\n merge?: boolean;\n}\n\n/**\n * Import learning patterns from a file\n */\nexport async function learnImportCommand(\n file: string,\n options: LearnImportOptions,\n): Promise<void> {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const dryRun = options.dryRun ?? false;\n const merge = options.merge ?? true;\n\n console.log(chalk.cyan(\"\\n📥 Importing Learning Patterns\\n\"));\n\n const filePath = path.isAbsolute(file) ? file : path.join(cwd, file);\n\n if (!fs.existsSync(filePath)) {\n console.log(chalk.red(` ✗ File not found: ${filePath}`));\n process.exit(1);\n }\n\n const content = await fs.promises.readFile(filePath, \"utf-8\");\n\n let importData: { fixes?: FixPattern[]; blueprints?: Blueprint[] };\n\n try {\n // Detect format\n if (file.endsWith(\".yaml\") || file.endsWith(\".yml\")) {\n console.log(chalk.yellow(\" YAML import not fully supported, treating as JSON\"));\n }\n importData = JSON.parse(content);\n } catch {\n console.log(chalk.red(\" ✗ Failed to parse import file\"));\n process.exit(1);\n }\n\n const fixes = importData.fixes || [];\n const blueprints = importData.blueprints || [];\n const totalCount = fixes.length + blueprints.length;\n\n if (totalCount === 0) {\n console.log(chalk.yellow(\" No patterns found in import file\"));\n return;\n }\n\n console.log(chalk.dim(` Found ${fixes.length} fix patterns`));\n console.log(chalk.dim(` Found ${blueprints.length} blueprints\\n`));\n\n if (dryRun) {\n console.log(chalk.yellow(\" 🔍 Dry run - no changes will be made\\n\"));\n\n for (const fix of fixes) {\n console.log(chalk.dim(` Would import fix: ${fix.name} (${fix.id})`));\n }\n for (const bp of blueprints) {\n console.log(chalk.dim(` Would import blueprint: ${bp.name} (${bp.id})`));\n }\n return;\n }\n\n // Import patterns\n let imported = 0;\n let skipped = 0;\n\n for (const fix of fixes) {\n // Check if exists\n const existing = await store.getFixPattern(fix.id);\n if (existing.success && existing.data && !merge) {\n console.log(chalk.yellow(` Skipped (exists): ${fix.name}`));\n skipped++;\n continue;\n }\n\n const result = await store.saveFixPattern(fix);\n if (result.success) {\n console.log(chalk.green(` ✓ Imported: ${fix.name}`));\n imported++;\n } else {\n console.log(chalk.red(` ✗ Failed: ${fix.name}`));\n }\n }\n\n for (const bp of blueprints) {\n // Check if exists\n const existing = await store.getBlueprint(bp.id);\n if (existing.success && existing.data && !merge) {\n console.log(chalk.yellow(` Skipped (exists): ${bp.name}`));\n skipped++;\n continue;\n }\n\n const result = await store.saveBlueprint(bp);\n if (result.success) {\n console.log(chalk.green(` ✓ Imported: ${bp.name}`));\n imported++;\n } else {\n console.log(chalk.red(` ✗ Failed: ${bp.name}`));\n }\n }\n\n console.log(chalk.green(`\\n ✓ Import complete`));\n console.log(chalk.dim(` Imported: ${imported}`));\n console.log(chalk.dim(` Skipped: ${skipped}`));\n}\n\n// ============================================\n// learn:clean Command\n// ============================================\n\ninterface LearnCleanOptions {\n dryRun?: boolean;\n deprecated?: boolean;\n stale?: boolean;\n all?: boolean;\n}\n\n/**\n * Clean old or stale learning patterns\n */\nexport async function learnCleanCommand(options: LearnCleanOptions): Promise<void> {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const dryRun = options.dryRun ?? false;\n const cleanDeprecated = options.deprecated ?? false;\n const cleanStale = options.stale ?? false;\n const cleanAll = options.all ?? false;\n\n console.log(chalk.cyan(\"\\n🧹 Cleaning Learning Patterns\\n\"));\n\n if (!cleanDeprecated && !cleanStale && !cleanAll) {\n console.log(chalk.yellow(\" Specify what to clean:\"));\n console.log(chalk.dim(\" --deprecated Remove deprecated patterns\"));\n console.log(chalk.dim(\" --stale Remove patterns not used in 90+ days\"));\n console.log(chalk.dim(\" --all Remove all patterns (use with caution!)\"));\n return;\n }\n\n const toRemove: Array<{ id: string; name: string; type: \"fix\" | \"blueprint\"; reason: string }> = [];\n\n // Get all patterns\n const fixResult = await store.listFixPatterns({ includeDeprecated: true });\n const bpResult = await store.listBlueprints({ includeDeprecated: true });\n\n const fixes = fixResult.data || [];\n const blueprints = bpResult.data || [];\n\n const now = Date.now();\n const staleDays = 90;\n const staleThreshold = now - staleDays * 24 * 60 * 60 * 1000;\n\n // Identify patterns to remove\n for (const fix of fixes) {\n if (cleanAll) {\n toRemove.push({ id: fix.id, name: fix.name, type: \"fix\", reason: \"all\" });\n } else if (cleanDeprecated && fix.deprecatedAt) {\n toRemove.push({ id: fix.id, name: fix.name, type: \"fix\", reason: \"deprecated\" });\n } else if (cleanStale) {\n const lastUsed = new Date(fix.updatedAt).getTime();\n if (lastUsed < staleThreshold) {\n toRemove.push({ id: fix.id, name: fix.name, type: \"fix\", reason: \"stale\" });\n }\n }\n }\n\n for (const bp of blueprints) {\n if (cleanAll) {\n toRemove.push({ id: bp.id, name: bp.name, type: \"blueprint\", reason: \"all\" });\n } else if (cleanDeprecated && bp.deprecatedAt) {\n toRemove.push({ id: bp.id, name: bp.name, type: \"blueprint\", reason: \"deprecated\" });\n } else if (cleanStale) {\n const lastUsed = new Date(bp.updatedAt).getTime();\n if (lastUsed < staleThreshold) {\n toRemove.push({ id: bp.id, name: bp.name, type: \"blueprint\", reason: \"stale\" });\n }\n }\n }\n\n if (toRemove.length === 0) {\n console.log(chalk.green(\" ✓ Nothing to clean\"));\n return;\n }\n\n console.log(chalk.bold(` Found ${toRemove.length} patterns to remove:\\n`));\n\n for (const item of toRemove) {\n const icon = item.type === \"fix\" ? \"🔧\" : \"📐\";\n console.log(` ${icon} ${item.name} (${item.reason})`);\n }\n\n if (dryRun) {\n console.log(chalk.yellow(\"\\n 🔍 Dry run - no changes made\"));\n return;\n }\n\n // Confirm\n const confirmed = await p.confirm({\n message: `Remove ${toRemove.length} patterns? This cannot be undone.`,\n initialValue: false,\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.cancel(\"Clean cancelled\");\n return;\n }\n\n // Remove patterns\n let removed = 0;\n const patternsPath = path.join(cwd, \".workflow\", \"patterns\");\n\n for (const item of toRemove) {\n const dir = item.type === \"fix\" ? \"fixes\" : \"blueprints\";\n const filePath = path.join(patternsPath, dir, `${item.id}.json`);\n\n try {\n if (fs.existsSync(filePath)) {\n await fs.promises.unlink(filePath);\n removed++;\n }\n } catch {\n console.log(chalk.red(` ✗ Failed to remove: ${item.name}`));\n }\n }\n\n console.log(chalk.green(`\\n ✓ Removed ${removed} patterns`));\n}\n","/**\n * Scope Command Group\n *\n * Consolidates scope management commands under `workflow scope <subcommand>`:\n * - list: List available scopes\n * - create: Create a custom scope package\n * - migrate: Migrate inline scopes to a custom package\n * - add: Add a scope to the project\n * - remove: Remove a scope from the project\n * - sync: Sync scopes with the registry\n * - analyze: Analyze scope usage in the project\n * - hooks: Manage git hooks (install, uninstall, test)\n */\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { scopeCreateCommand } from \"../scope-create.js\";\nimport { scopeMigrateCommand } from \"../scope-migrate.js\";\nimport { hooksCommand } from \"../hooks.js\";\nimport { loadConfig } from \"../../../config/index.js\";\n\n// Re-export for backward compatibility\nexport { scopeCreateCommand, scopeMigrateCommand };\n\n/**\n * List available scopes from config and installed packages\n */\nasync function scopeListCommand(): Promise<void> {\n console.log(chalk.bold.cyan(\"\\n📋 Available Scopes\\n\"));\n\n const config = await loadConfig();\n const scopes = config?.scopes || [];\n\n if (scopes.length === 0) {\n console.log(chalk.yellow(\" No scopes configured.\"));\n console.log(chalk.dim(\"\\n Add scopes with: workflow scope add <name>\"));\n console.log(chalk.dim(\" Or create a custom scope: workflow scope create\"));\n return;\n }\n\n // Group by category\n const byCategory: Record<string, typeof scopes> = {};\n for (const scope of scopes) {\n const cat = scope.category || \"other\";\n if (!byCategory[cat]) byCategory[cat] = [];\n byCategory[cat].push(scope);\n }\n\n for (const [category, categoryScopes] of Object.entries(byCategory)) {\n console.log(chalk.bold(` ${category.charAt(0).toUpperCase() + category.slice(1)}:`));\n for (const scope of categoryScopes) {\n const emoji = scope.emoji || \"📦\";\n console.log(` ${emoji} ${chalk.green(scope.name)} - ${scope.description || \"No description\"}`);\n }\n console.log(\"\");\n }\n\n console.log(chalk.dim(` Total: ${scopes.length} scopes`));\n}\n\n/**\n * Add a scope to the project configuration\n */\nasync function scopeAddCommand(name: string, options: { description?: string; emoji?: string; category?: string }): Promise<void> {\n console.log(chalk.bold.cyan(`\\n➕ Adding Scope: ${name}\\n`));\n\n const fs = await import(\"fs\");\n const path = await import(\"path\");\n const cwd = process.cwd();\n\n // Find config file\n const configFiles = [\"workflow.config.json\", \"workflow.config.js\", \".workflowrc.json\"];\n let configPath: string | null = null;\n\n for (const file of configFiles) {\n const fullPath = path.join(cwd, file);\n if (fs.existsSync(fullPath)) {\n configPath = fullPath;\n break;\n }\n }\n\n if (!configPath) {\n console.log(chalk.red(\"✗ No workflow configuration file found\"));\n console.log(chalk.yellow(\" Run: workflow init\"));\n process.exit(1);\n }\n\n // Load and update config\n const configContent = fs.readFileSync(configPath, \"utf-8\");\n const config = JSON.parse(configContent);\n\n if (!config.scopes) {\n config.scopes = [];\n }\n\n // Check if scope already exists\n const existing = config.scopes.find((s: { name: string }) => s.name === name);\n if (existing) {\n console.log(chalk.yellow(` Scope \"${name}\" already exists`));\n process.exit(1);\n }\n\n // Add new scope\n const newScope = {\n name,\n description: options.description || `${name} related changes`,\n emoji: options.emoji || \"📦\",\n category: options.category || \"feature\",\n };\n\n config.scopes.push(newScope);\n\n // Write back\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + \"\\n\");\n\n console.log(chalk.green(`✓ Added scope: ${newScope.emoji} ${name}`));\n console.log(chalk.dim(` Description: ${newScope.description}`));\n console.log(chalk.dim(` Category: ${newScope.category}`));\n}\n\n/**\n * Remove a scope from the project configuration\n */\nasync function scopeRemoveCommand(name: string): Promise<void> {\n console.log(chalk.bold.cyan(`\\n➖ Removing Scope: ${name}\\n`));\n\n const fs = await import(\"fs\");\n const path = await import(\"path\");\n const cwd = process.cwd();\n\n // Find config file\n const configFiles = [\"workflow.config.json\", \"workflow.config.js\", \".workflowrc.json\"];\n let configPath: string | null = null;\n\n for (const file of configFiles) {\n const fullPath = path.join(cwd, file);\n if (fs.existsSync(fullPath)) {\n configPath = fullPath;\n break;\n }\n }\n\n if (!configPath) {\n console.log(chalk.red(\"✗ No workflow configuration file found\"));\n process.exit(1);\n }\n\n // Load and update config\n const configContent = fs.readFileSync(configPath, \"utf-8\");\n const config = JSON.parse(configContent);\n\n if (!config.scopes || config.scopes.length === 0) {\n console.log(chalk.yellow(\" No scopes configured\"));\n process.exit(1);\n }\n\n const index = config.scopes.findIndex((s: { name: string }) => s.name === name);\n if (index === -1) {\n console.log(chalk.yellow(` Scope \"${name}\" not found`));\n process.exit(1);\n }\n\n const removed = config.scopes.splice(index, 1)[0];\n\n // Write back\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + \"\\n\");\n\n console.log(chalk.green(`✓ Removed scope: ${removed.emoji || \"📦\"} ${name}`));\n}\n\n/**\n * Sync scopes with the community registry\n */\nasync function scopeSyncCommand(options: { push?: boolean; pull?: boolean; dryRun?: boolean }): Promise<void> {\n console.log(chalk.bold.cyan(\"\\n🔄 Syncing Scopes\\n\"));\n\n // Import and delegate to unified sync command\n const { syncCommand } = await import(\"../sync.js\");\n await syncCommand({\n ...options,\n scopes: true,\n learn: false,\n solutions: false,\n });\n}\n\n/**\n * Analyze scope usage in the project\n */\nasync function scopeAnalyzeCommand(): Promise<void> {\n console.log(chalk.bold.cyan(\"\\n🔍 Analyzing Scope Usage\\n\"));\n\n const { execa } = await import(\"execa\");\n const cwd = process.cwd();\n\n try {\n // Get recent commits and analyze scope usage\n const { stdout } = await execa(\"git\", [\"log\", \"--oneline\", \"-50\", \"--format=%s\"], { cwd });\n const commits = stdout.split(\"\\n\").filter(Boolean);\n\n const config = await loadConfig();\n const scopes = config?.scopes || [];\n const scopeNames = scopes.map((s: { name: string }) => s.name);\n\n // Count scope usage\n const usage: Record<string, number> = {};\n let unscoped = 0;\n let invalidScopes: string[] = [];\n\n for (const commit of commits) {\n const match = commit.match(/^\\w+\\(([^)]+)\\):/);\n if (match) {\n const scope = match[1];\n if (scopeNames.includes(scope)) {\n usage[scope] = (usage[scope] || 0) + 1;\n } else {\n if (!invalidScopes.includes(scope)) {\n invalidScopes.push(scope);\n }\n }\n } else if (commit.match(/^\\w+:/)) {\n unscoped++;\n }\n }\n\n // Display results\n console.log(chalk.bold(\" Scope Usage (last 50 commits):\"));\n console.log(\"\");\n\n const sortedUsage = Object.entries(usage).sort((a, b) => b[1] - a[1]);\n for (const [scope, count] of sortedUsage) {\n const scopeConfig = scopes.find((s: { name: string }) => s.name === scope);\n const emoji = scopeConfig?.emoji || \"📦\";\n const bar = \"█\".repeat(Math.min(count, 20));\n console.log(` ${emoji} ${chalk.green(scope.padEnd(15))} ${bar} ${count}`);\n }\n\n if (unscoped > 0) {\n console.log(` ${chalk.yellow(\"(unscoped)\".padEnd(17))} ${\"░\".repeat(Math.min(unscoped, 20))} ${unscoped}`);\n }\n\n // Suggest unused scopes\n const unusedScopes = scopeNames.filter((name: string) => !usage[name]);\n if (unusedScopes.length > 0) {\n console.log(chalk.yellow(\"\\n Unused scopes (consider removing):\"));\n for (const name of unusedScopes) {\n console.log(chalk.dim(` • ${name}`));\n }\n }\n\n // Suggest adding invalid scopes\n if (invalidScopes.length > 0) {\n console.log(chalk.yellow(\"\\n Unknown scopes (consider adding):\"));\n for (const name of invalidScopes) {\n console.log(chalk.dim(` • ${name}`));\n }\n }\n\n console.log(\"\");\n } catch {\n console.log(chalk.yellow(\" Unable to analyze git history\"));\n console.log(chalk.dim(\" Make sure you're in a git repository with commit history\"));\n }\n}\n\n/**\n * Hooks test command - validates hook installation with optional dry-run\n */\nasync function hooksTestCommand(options: { dryRun?: boolean }): Promise<void> {\n console.log(chalk.bold.cyan(\"\\n🧪 Testing Git Hooks\\n\"));\n\n const fs = await import(\"fs\");\n const path = await import(\"path\");\n const cwd = process.cwd();\n const gitDir = path.join(cwd, \".git\");\n const hooksDir = path.join(gitDir, \"hooks\");\n\n // Check git repo exists\n if (!fs.existsSync(gitDir)) {\n console.log(chalk.red(\"✗ Not a git repository\"));\n process.exit(1);\n }\n\n // Check hooks directory\n if (!fs.existsSync(hooksDir)) {\n console.log(chalk.yellow(\" No hooks directory found\"));\n console.log(chalk.dim(\" Run: workflow scope hooks install\"));\n process.exit(1);\n }\n\n const hookTypes = [\"pre-commit\", \"commit-msg\"];\n let allInstalled = true;\n\n for (const hookType of hookTypes) {\n const hookPath = path.join(hooksDir, hookType);\n const exists = fs.existsSync(hookPath);\n const isExecutable = exists && (fs.statSync(hookPath).mode & 0o111) !== 0;\n const isWorkflowHook = exists && fs.readFileSync(hookPath, \"utf-8\").includes(\"workflow-agent\");\n\n if (exists && isExecutable && isWorkflowHook) {\n console.log(chalk.green(` ✓ ${hookType} - installed and executable`));\n } else if (exists && !isWorkflowHook) {\n console.log(chalk.yellow(` ⚠ ${hookType} - exists but not managed by workflow-agent`));\n allInstalled = false;\n } else if (exists && !isExecutable) {\n console.log(chalk.red(` ✗ ${hookType} - exists but not executable`));\n allInstalled = false;\n } else {\n console.log(chalk.red(` ✗ ${hookType} - not installed`));\n allInstalled = false;\n }\n }\n\n // Optional dry-run: simulate hook execution\n if (options.dryRun) {\n console.log(chalk.bold.cyan(\"\\n Dry-run hook simulation:\\n\"));\n\n // Simulate pre-commit\n console.log(chalk.dim(\" Simulating pre-commit hook...\"));\n const { verifyCommand } = await import(\"../verify.js\");\n try {\n await verifyCommand({ fix: false, dryRun: true, maxRetries: \"1\" });\n } catch {\n // Expected to potentially fail, that's ok for dry-run\n }\n }\n\n if (!allInstalled) {\n console.log(chalk.yellow(\"\\n Some hooks are not properly installed\"));\n console.log(chalk.dim(\" Run: workflow scope hooks install\"));\n process.exit(1);\n }\n\n console.log(chalk.green(\"\\n✓ All hooks are properly installed\"));\n}\n\n/**\n * Create the scope command group with all subcommands\n */\nexport function createScopeCommand(): Command {\n const scopeCmd = new Command(\"scope\")\n .description(\"Manage custom scope packages and git hooks\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow scope list ${chalk.dim(\"# List available scopes\")}\n $ workflow scope create --name fintech ${chalk.dim(\"# Create fintech scope package\")}\n $ workflow scope migrate --name my-scopes ${chalk.dim(\"# Migrate inline to package\")}\n $ workflow scope add auth ${chalk.dim(\"# Add auth scope\")}\n $ workflow scope remove legacy ${chalk.dim(\"# Remove legacy scope\")}\n $ workflow scope analyze ${chalk.dim(\"# Analyze scope usage\")}\n $ workflow scope hooks install ${chalk.dim(\"# Install git hooks\")}\n`,\n )\n .action(() => {\n // Default action: list scopes\n scopeListCommand();\n });\n\n // list subcommand\n scopeCmd\n .command(\"list\")\n .description(\"List available scopes\")\n .action(scopeListCommand);\n\n // create subcommand\n scopeCmd\n .command(\"create\")\n .description(\"Create a custom scope package\")\n .option(\"--name <name>\", 'Package name (e.g., \"fintech\", \"gaming\")')\n .option(\n \"--scopes <scopes>\",\n \"Comma-separated scopes (format: name:description:emoji:category)\",\n )\n .option(\"--preset-name <preset>\", \"Preset display name\")\n .option(\"--output-dir <dir>\", \"Output directory\")\n .option(\"--no-test\", \"Skip test file generation\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow scope create --name fintech ${chalk.dim(\"# Interactive mode\")}\n $ workflow scope create --name fintech \\\\\n --scopes \"trading:Trade logic:📈:core,\\\\\n risk:Risk mgmt:⚠️:core\" ${chalk.dim(\"# With scopes\")}\n $ workflow scope create --name gaming \\\\\n --output-dir ./packages ${chalk.dim(\"# Custom output\")}\n`,\n )\n .action(scopeCreateCommand);\n\n // migrate subcommand\n scopeCmd\n .command(\"migrate\")\n .description(\"Migrate inline scopes to a custom package\")\n .option(\"--name <name>\", \"Package name for the preset\")\n .option(\"--output-dir <dir>\", \"Output directory\")\n .option(\"--keep-config\", \"Keep inline scopes in config after migration\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow scope migrate --name my-scopes ${chalk.dim(\"# Migrate to package\")}\n $ workflow scope migrate --keep-config ${chalk.dim(\"# Keep inline copy\")}\n`,\n )\n .action(scopeMigrateCommand);\n\n // add subcommand\n scopeCmd\n .command(\"add <name>\")\n .description(\"Add a scope to the project configuration\")\n .option(\"--description <desc>\", \"Scope description\")\n .option(\"--emoji <emoji>\", \"Scope emoji\")\n .option(\"--category <cat>\", \"Scope category (feature, fix, core, etc.)\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow scope add auth ${chalk.dim(\"# Add auth scope\")}\n $ workflow scope add payments --emoji 💳 ${chalk.dim(\"# With emoji\")}\n $ workflow scope add api --category core ${chalk.dim(\"# With category\")}\n`,\n )\n .action(scopeAddCommand);\n\n // remove subcommand\n scopeCmd\n .command(\"remove <name>\")\n .description(\"Remove a scope from the project configuration\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow scope remove legacy ${chalk.dim(\"# Remove scope\")}\n`,\n )\n .action(scopeRemoveCommand);\n\n // sync subcommand\n scopeCmd\n .command(\"sync\")\n .description(\"Sync scopes with the community registry\")\n .option(\"--push\", \"Push local scopes to registry\")\n .option(\"--pull\", \"Pull scopes from registry\")\n .option(\"--dry-run\", \"Preview without syncing\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow scope sync --push ${chalk.dim(\"# Push to registry\")}\n $ workflow scope sync --pull ${chalk.dim(\"# Pull from registry\")}\n $ workflow scope sync --dry-run ${chalk.dim(\"# Preview changes\")}\n`,\n )\n .action(scopeSyncCommand);\n\n // analyze subcommand\n scopeCmd\n .command(\"analyze\")\n .description(\"Analyze scope usage in the project\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Details:\")}\n Analyzes recent git commits to show:\n - Which scopes are used most frequently\n - Unused scopes that could be removed\n - Unknown scopes that could be added\n`,\n )\n .action(scopeAnalyzeCommand);\n\n // hooks subcommand group\n const hooksCmd = scopeCmd\n .command(\"hooks\")\n .description(\"Manage git hooks for the project\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow scope hooks install ${chalk.dim(\"# Install git hooks\")}\n $ workflow scope hooks uninstall ${chalk.dim(\"# Remove git hooks\")}\n $ workflow scope hooks test ${chalk.dim(\"# Verify installation\")}\n $ workflow scope hooks test --dry-run ${chalk.dim(\"# Test with simulation\")}\n`,\n )\n .action(() => {\n // Default: show status\n hooksCommand(\"status\");\n });\n\n hooksCmd\n .command(\"install\")\n .description(\"Install git hooks for the project\")\n .action(() => hooksCommand(\"install\"));\n\n hooksCmd\n .command(\"uninstall\")\n .description(\"Remove installed git hooks\")\n .action(() => hooksCommand(\"uninstall\"));\n\n hooksCmd\n .command(\"status\")\n .description(\"Show current hooks installation status\")\n .action(() => hooksCommand(\"status\"));\n\n hooksCmd\n .command(\"test\")\n .description(\"Test that hooks are properly installed\")\n .option(\"--dry-run\", \"Simulate hook execution without making changes\")\n .action(hooksTestCommand);\n\n return scopeCmd;\n}\n\n// Export individual commands for direct use\nexport {\n scopeListCommand,\n scopeAddCommand,\n scopeRemoveCommand,\n scopeSyncCommand,\n scopeAnalyzeCommand,\n hooksTestCommand,\n};\n"],"mappings":"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","names":["Command","chalk","readFileSync","fileURLToPath","dirname","join","fs","spinner","resolve","chalk","chalk","chalk","chalk","p","chalk","existsSync","join","existsSync","writeFile","mkdir","join","join","existsSync","mkdir","writeFile","chalk","join","existsSync","p","chalk","existsSync","join","dirname","fileURLToPath","__filename","fileURLToPath","__dirname","dirname","chalk","join","existsSync","packageJson","p","chalk","chalk","spinner","p","chalk","existsSync","writeFile","mkdir","readFile","join","chalk","isMonorepo","existsSync","join","spinner","mkdir","packageJson","writeFile","readFile","p","chalk","existsSync","writeFile","mkdir","readFile","join","chalk","isMonorepo","existsSync","join","spinner","mkdir","packageJson","writeFile","readFile","chalk","chalk","Command","chalk","p","chalk","chalk","spinner","options","p","chalk","existsSync","join","chalk","join","existsSync","spinner","p","chalk","existsSync","join","dirname","fileURLToPath","__filename","fileURLToPath","__dirname","dirname","chalk","join","existsSync","spinner","p","chalk","existsSync","readFile","writeFile","mkdir","join","existsSync","readFile","join","health","packageJson","join","existsSync","readFile","p","p","chalk","spinner","join","existsSync","readFile","mkdir","writeFile","Command","chalk","p","Command","chalk","chalk","chalk","Command","chalk","chalk","p","path","spinner","confirm","fs","Command","chalk","Command","chalk","chalk","p","fs","path","PatternStore","getWorkspacePath","formatDate","PatternStore","chalk","getWorkspacePath","chalk","formatDate","PatternStore","p","pattern","result","packageJson","files","Command","chalk","syncCommand","Command","chalk","chalk","fs","path","syncCommand","execa","isWorkflowHook","verifyCommand","Command","__filename","fileURLToPath","__dirname","dirname","readFileSync","join","chalk","Command","autoFixConfigFile","p"]}
|
|
1
|
+
{"version":3,"sources":["../../src/cli/index.ts","../../src/cli/commands/init.ts","../../src/templates/renderer.ts","../../src/adapters/index.ts","../../src/cli/commands/validate.ts","../../src/cli/commands/config.ts","../../src/cli/commands/suggest.ts","../../src/cli/commands/doctor.ts","../../src/utils/hooks.ts","../../src/cli/commands/setup/index.ts","../../src/cli/commands/setup.ts","../../src/cli/commands/auto-setup-command.ts","../../src/cli/commands/scope-create.ts","../../src/cli/commands/scope-migrate.ts","../../src/cli/commands/pre-commit.ts","../../src/cli/commands/docs/index.ts","../../src/cli/commands/docs-validate.ts","../../src/cli/commands/docs/generate.ts","../../src/cli/commands/docs/update.ts","../../src/cli/commands/advisory.ts","../../src/utils/advisory-analyzer.ts","../../src/utils/question-generator.ts","../../src/utils/report-comparator.ts","../../src/cli/commands/hooks/index.ts","../../src/cli/commands/hooks.ts","../../src/cli/commands/solution/index.ts","../../src/cli/commands/solution.ts","../../src/cli/commands/learn/index.ts","../../src/cli/commands/learn.ts","../../src/cli/commands/scope/index.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { readFileSync } from \"fs\";\nimport { fileURLToPath } from \"url\";\nimport { dirname, join } from \"path\";\nimport { initCommand } from \"./commands/init.js\";\nimport { validateCommand } from \"./commands/validate.js\";\nimport { configCommand } from \"./commands/config.js\";\nimport { suggestCommand } from \"./commands/suggest.js\";\nimport { doctorCommand } from \"./commands/doctor.js\";\nimport { createSetupCommand } from \"./commands/setup/index.js\";\nimport { scopeCreateCommand } from \"./commands/scope-create.js\";\nimport { scopeMigrateCommand } from \"./commands/scope-migrate.js\";\nimport { verifyCommand } from \"./commands/verify.js\";\nimport { preCommitCommand } from \"./commands/pre-commit.js\";\nimport { autoSetupCommand } from \"./commands/auto-setup-command.js\";\n// Command groups\nimport { createDocsCommand, docsValidateCommand, docsGenerateCommand, docsUpdateCommand } from \"./commands/docs/index.js\";\nimport { hooksCommand, createHooksCommand } from \"./commands/hooks/index.js\";\nimport {\n createSolutionCommand,\n solutionCaptureCommand,\n solutionSearchCommand,\n solutionListCommand,\n solutionApplyCommand,\n solutionDeprecateCommand,\n solutionStatsCommand,\n} from \"./commands/solution/index.js\";\n// Legacy imports for backward compatibility\nimport { advisoryCommand } from \"./commands/advisory.js\";\n\n// Read version from package.json dynamically\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\nconst packageJson = JSON.parse(\n readFileSync(join(__dirname, \"../../package.json\"), \"utf-8\")\n);\n\n/**\n * Show deprecation warning for old command syntax\n */\nfunction deprecationWarning(oldCmd: string, newCmd: string): void {\n console.warn(chalk.yellow(`⚠️ \"${oldCmd}\" is deprecated and will be removed in v2.0.`));\n console.warn(chalk.yellow(` Use: ${newCmd}\\n`));\n}\nimport {\n createLearnCommand,\n learnRecordCommand,\n learnListCommand,\n learnApplyCommand,\n learnConfigCommand,\n learnDeprecateCommand,\n learnStatsCommand,\n learnPublishCommand,\n learnValidateCommand,\n learnCaptureCommand,\n} from \"./commands/learn/index.js\";\nimport { syncCommand } from \"./commands/sync.js\";\n\nconst program = new Command();\n\nprogram\n .name(\"workflow\")\n .description(\n \"A self-evolving workflow management system for AI agent development\",\n )\n .version(packageJson.version);\n\n// ============================================\n// Command Groups (New Subcommand Pattern)\n// ============================================\n\n// Register docs command group\nprogram.addCommand(createDocsCommand());\n\n// Register solution command group\nprogram.addCommand(createSolutionCommand());\n\n// Register learn command group\nprogram.addCommand(createLearnCommand());\n\n// Register scope command group\nimport { createScopeCommand } from \"./commands/scope/index.js\";\nprogram.addCommand(createScopeCommand());\n\n// Register hooks command group (top-level access)\nprogram.addCommand(createHooksCommand());\n\n// Register unified sync command\nprogram\n .command(\"sync\")\n .description(\"Sync patterns and solutions with the community registry\")\n .option(\"--push\", \"Push local patterns to registry\")\n .option(\"--pull\", \"Pull patterns from registry\")\n .option(\"--solutions\", \"Include solution patterns\")\n .option(\"--learn\", \"Include learning patterns (default)\")\n .option(\"--scopes\", \"Sync custom scope packages\")\n .option(\"--all\", \"Sync everything\")\n .option(\"--dry-run\", \"Preview without syncing\")\n .option(\"--enable-sync\", \"Enable pattern sync\")\n .option(\"--disable-sync\", \"Disable pattern sync\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n ${chalk.dim(\"# Enable sync\")}\n $ workflow sync --enable-sync\n\n ${chalk.dim(\"# Disable sync\")}\n $ workflow sync --disable-sync\n\n ${chalk.dim(\"# Interactive sync (prompts for direction)\")}\n $ workflow sync\n\n ${chalk.dim(\"# Push local patterns to registry\")}\n $ workflow sync --push\n\n ${chalk.dim(\"# Pull patterns from registry\")}\n $ workflow sync --pull\n\n ${chalk.dim(\"# Sync solutions only\")}\n $ workflow sync --solutions --push\n\n ${chalk.dim(\"# Preview what would be synced\")}\n $ workflow sync --all --dry-run\n`,\n )\n .action(syncCommand);\n\n// ============================================\n// Core Commands\n// ============================================\n\nprogram\n .command(\"init\")\n .description(\"Initialize workflow in current project\")\n .option(\"--migrate\", \"Auto-detect existing patterns and migrate\")\n .option(\"--workspace\", \"Initialize for multiple repositories\")\n .option(\n \"--preset <preset>\",\n \"Preset to use (saas, library, api, ecommerce, cms, custom)\",\n )\n .option(\"--name <name>\", \"Project name\")\n .option(\"-y, --yes\", \"Skip confirmation prompts\")\n .action(initCommand);\n\nprogram\n .command(\"validate <type> [value]\")\n .description(\"Validate branch name, commit message, or PR title\")\n .option(\n \"--suggest-on-error\",\n \"Offer improvement suggestions on validation errors\",\n )\n .action(validateCommand);\n\nprogram\n .command(\"config <action> [key] [value]\")\n .description(\"Manage workflow configuration\")\n .action(configCommand);\n\nprogram\n .command(\"config:fix\")\n .description(\"Automatically fix common configuration validation issues\")\n .action(async () => {\n const chalk = (await import(\"chalk\")).default;\n const { autoFixConfigFile } = await import(\"../config/index.js\");\n\n console.log(chalk.bold.cyan(\"\\n🔧 Workflow Configuration Auto-Fix\\n\"));\n\n const result = await autoFixConfigFile();\n\n if (result.success) {\n if (result.changes.length === 0) {\n console.log(chalk.green(\"✓ Configuration is already valid!\"));\n } else {\n console.log(chalk.green(\"✓ Configuration fixed successfully!\\n\"));\n console.log(chalk.dim(\"Changes made:\"));\n for (const change of result.changes) {\n console.log(chalk.dim(` • ${change}`));\n }\n console.log();\n }\n process.exit(0);\n } else {\n if (result.configPath) {\n console.log(chalk.red(`✗ Failed to fix configuration: ${result.error}`));\n } else {\n console.log(chalk.red(\"✗ No workflow configuration file found\"));\n console.log(chalk.yellow(\" Run: workflow init\"));\n }\n process.exit(1);\n }\n });\n\nprogram\n .command(\"suggest\")\n .description(\"Submit an improvement suggestion\")\n .argument(\"<feedback>\", \"Your improvement suggestion\")\n .option(\"--author <author>\", \"Your name or username\")\n .option(\n \"--category <category>\",\n \"Category: feature, bug, documentation, performance, other\",\n )\n .action(suggestCommand);\n\n// Register setup command group (includes setup scripts, setup auto)\nprogram.addCommand(createSetupCommand());\n\nprogram\n .command(\"doctor\")\n .description(\"Run health check and get optimization suggestions\")\n .option(\"--check-guidelines-only\", \"Only check guidelines presence\")\n .option(\"--fix\", \"Automatically fix validation issues in configuration\")\n .action(doctorCommand);\n\n// ============================================\n// Deprecated Commands (Hidden, will be removed in v2.0)\n// ============================================\n\n// Legacy hooks command with action argument (replaced by top-level hooks subcommands)\nprogram\n .command(\"hooks:install\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow hooks install\")\n .action(async () => {\n deprecationWarning(\"workflow hooks:install\", \"workflow hooks install\");\n return hooksCommand(\"install\");\n });\n\nprogram\n .command(\"hooks:uninstall\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow hooks uninstall\")\n .action(async () => {\n deprecationWarning(\"workflow hooks:uninstall\", \"workflow hooks uninstall\");\n return hooksCommand(\"uninstall\");\n });\n\nprogram\n .command(\"hooks:status\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow hooks status\")\n .action(async () => {\n deprecationWarning(\"workflow hooks:status\", \"workflow hooks status\");\n return hooksCommand(\"status\");\n });\n\nprogram\n .command(\"scope:create\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow scope create\")\n .option(\"--name <name>\", 'Package name (e.g., \"fintech\", \"gaming\")')\n .option(\n \"--scopes <scopes>\",\n \"Comma-separated scopes (format: name:description:emoji:category)\",\n )\n .option(\"--preset-name <preset>\", \"Preset display name\")\n .option(\"--output-dir <dir>\", \"Output directory\")\n .option(\"--no-test\", \"Skip test file generation\")\n .action(async (options) => {\n deprecationWarning(\"workflow scope:create\", \"workflow scope create\");\n return scopeCreateCommand(options);\n });\n\nprogram\n .command(\"scope:migrate\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow scope migrate\")\n .option(\"--name <name>\", \"Package name for the preset\")\n .option(\"--output-dir <dir>\", \"Output directory\")\n .option(\"--keep-config\", \"Keep inline scopes in config after migration\")\n .action(async (options) => {\n deprecationWarning(\"workflow scope:migrate\", \"workflow scope migrate\");\n return scopeMigrateCommand(options);\n });\n\nprogram\n .command(\"verify\")\n .description(\"Run all quality checks with fix-and-revalidate pattern\")\n .option(\"--fix\", \"Enable auto-fix for lint and format issues\")\n .option(\"--max-retries <n>\", \"Maximum retry cycles (default: 10)\", \"10\")\n .option(\"--commit\", \"Commit changes if all checks pass\")\n .option(\"--dry-run\", \"Preview fixes without applying them\")\n .option(\"--learn\", \"Record successful fixes as learning patterns\")\n .action(verifyCommand);\n\nprogram\n .command(\"pre-commit\")\n .description(\"Run pre-commit checks (alias for verify --fix --staged)\")\n .option(\"--dry-run\", \"Preview fixes without applying them\")\n .action(preCommitCommand);\n\n// Deprecated: auto-setup → setup auto\nprogram\n .command(\"auto-setup\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow setup auto\")\n .option(\"-y, --yes\", \"Auto-approve all prompts\")\n .option(\"--audit\", \"Show audit report without applying changes\")\n .action(async (options) => {\n deprecationWarning(\"workflow auto-setup\", \"workflow setup auto\");\n return autoSetupCommand(options);\n });\n\n// ============================================\n// Deprecated Commands (Removed in v2.0)\n// Use `workflow docs <subcommand>` instead\n// ============================================\n\nprogram\n .command(\"advisory\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow docs advisory\")\n .option(\"--depth <level>\", \"Analysis depth\")\n .option(\"--output <path>\", \"Output directory\")\n .option(\"--interactive\", \"Enable interactive mode\")\n .option(\"--dry-run\", \"Preview analysis without writing files\")\n .option(\"--format <type>\", \"Output format\")\n .option(\"--timestamp\", \"Append timestamp to filenames\")\n .option(\"--include-health\", \"Include code health metrics\")\n .option(\"--ci\", \"CI mode with exit codes\")\n .option(\"--compare <path>\", \"Compare with previous report\")\n .action(async (options) => {\n deprecationWarning(\"workflow advisory\", \"workflow docs advisory\");\n return advisoryCommand(options);\n });\n\nprogram\n .command(\"generate-instructions\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow docs generate\")\n .option(\"--force\", \"Regenerate without confirmation\")\n .action(async (options) => {\n deprecationWarning(\"workflow generate-instructions\", \"workflow docs generate\");\n return docsGenerateCommand(options);\n });\n\nprogram\n .command(\"update-templates\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow docs update\")\n .option(\"--force\", \"Overwrite existing template files\")\n .option(\"--skip\", \"Skip the update\")\n .action(async (options) => {\n deprecationWarning(\"workflow update-templates\", \"workflow docs update\");\n return docsUpdateCommand(options);\n });\n\nprogram\n .command(\"docs:validate\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow docs validate\")\n .option(\"--fix\", \"Interactively fix broken references\")\n .option(\"--patterns <patterns>\", \"Glob patterns to scan\")\n .option(\"--ignore <patterns>\", \"Glob patterns to ignore\")\n .action(async (options) => {\n deprecationWarning(\"workflow docs:validate\", \"workflow docs validate\");\n const patterns = options.patterns\n ? options.patterns.split(\",\").map((p: string) => p.trim())\n : undefined;\n const ignore = options.ignore\n ? options.ignore.split(\",\").map((p: string) => p.trim())\n : undefined;\n\n return docsValidateCommand({\n fix: options.fix,\n patterns,\n ignore,\n });\n });\n\n// ============================================\n// Deprecated Learning Commands (Removed in v2.0)\n// Use `workflow learn <subcommand>` instead\n// ============================================\n\nprogram\n .command(\"learn:record\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn record\")\n .option(\"--name <name>\", \"Pattern name\")\n .option(\"--description <desc>\", \"Pattern description\")\n .option(\"--category <cat>\", \"Category\")\n .option(\"--framework <fw>\", \"Framework\")\n .option(\"--version <ver>\", \"Framework version range\")\n .option(\"--tags <tags>\", \"Comma-separated tags\")\n .option(\"--type <type>\", \"Pattern type\")\n .action(async (options) => {\n deprecationWarning(\"workflow learn:record\", \"workflow learn record\");\n return learnRecordCommand(options);\n });\n\nprogram\n .command(\"learn:list\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn list\")\n .option(\"--type <type>\", \"Filter by type\")\n .option(\"--framework <fw>\", \"Filter by framework\")\n .option(\"--tag <tag>\", \"Filter by tag\")\n .option(\"--deprecated\", \"Include deprecated patterns\")\n .action(async (options) => {\n deprecationWarning(\"workflow learn:list\", \"workflow learn list\");\n return learnListCommand(options);\n });\n\nprogram\n .command(\"learn:apply <patternId>\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn apply\")\n .option(\"--framework <fw>\", \"Override framework\")\n .option(\"--version <ver>\", \"Override version\")\n .option(\"--dry-run\", \"Preview without applying\")\n .action(async (patternId, options) => {\n deprecationWarning(\"workflow learn:apply\", \"workflow learn apply\");\n return learnApplyCommand(patternId, options);\n });\n\nprogram\n .command(\"learn:capture <paths...>\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn capture\")\n .option(\"--name <name>\", \"Pattern name\")\n .option(\"--description <desc>\", \"Pattern description\")\n .option(\"--framework <fw>\", \"Override inferred framework\")\n .option(\"--tags <tags>\", \"Additional tags\")\n .option(\"--dry-run\", \"Preview capture\")\n .action(async (paths, options) => {\n deprecationWarning(\"workflow learn:capture\", \"workflow learn capture\");\n return learnCaptureCommand(paths, options);\n });\n\nprogram\n .command(\"learn:sync\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow sync\")\n .option(\"--push\", \"Push local patterns\")\n .option(\"--pull\", \"Pull patterns\")\n .option(\"--dry-run\", \"Preview without syncing\")\n .action(async (options) => {\n deprecationWarning(\"workflow learn:sync\", \"workflow sync\");\n return syncCommand({ ...options, learn: true });\n });\n\nprogram\n .command(\"learn:config\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn config\")\n .option(\"--enable-sync\", \"Enable pattern sync\")\n .option(\"--disable-sync\", \"Disable pattern sync\")\n .option(\"--enable-telemetry\", \"Enable telemetry\")\n .option(\"--disable-telemetry\", \"Disable telemetry\")\n .option(\"--reset-id\", \"Reset contributor ID\")\n .option(\"--show\", \"Show current configuration\")\n .action(async (options) => {\n deprecationWarning(\"workflow learn:config\", \"workflow learn config\");\n return learnConfigCommand(options);\n });\n\nprogram\n .command(\"learn:deprecate <patternId> <reason>\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn deprecate\")\n .action(async (patternId, reason) => {\n deprecationWarning(\"workflow learn:deprecate\", \"workflow learn deprecate\");\n return learnDeprecateCommand(patternId, reason);\n });\n\nprogram\n .command(\"learn:publish [patternId]\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn publish\")\n .option(\"--private\", \"Mark as private\")\n .option(\"--all\", \"Apply to all patterns\")\n .option(\"-y, --yes\", \"Skip confirmation prompts\")\n .action(async (patternId, options) => {\n deprecationWarning(\"workflow learn:publish\", \"workflow learn publish\");\n return learnPublishCommand(patternId, options);\n });\n\nprogram\n .command(\"learn:stats\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn stats\")\n .action(async () => {\n deprecationWarning(\"workflow learn:stats\", \"workflow learn stats\");\n return learnStatsCommand();\n });\n\nprogram\n .command(\"learn:validate\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow learn validate\")\n .option(\"-t, --type <type>\", \"Pattern type to validate\", \"all\")\n .option(\"-f, --file <path>\", \"Validate a specific file\")\n .option(\"--fix\", \"Automatically fix common issues\")\n .option(\"-v, --verbose\", \"Show detailed output\")\n .action(async (options) => {\n deprecationWarning(\"workflow learn:validate\", \"workflow learn validate\");\n return learnValidateCommand(options);\n });\n\n// ============================================\n// Deprecated Solution Commands (Removed in v2.0)\n// Use `workflow solution <subcommand>` instead\n// ============================================\n\nprogram\n .command(\"solution:capture\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow solution capture\")\n .option(\"--name <name>\", \"Solution name\")\n .option(\"--description <desc>\", \"Solution description\")\n .option(\"--category <cat>\", \"Category\")\n .option(\"--keywords <kw>\", \"Comma-separated keywords\")\n .option(\"--path <path>\", \"Path to the solution directory\")\n .option(\"--anonymize\", \"Anonymize sensitive data\")\n .option(\"--private\", \"Keep solution private\")\n .action(async (options) => {\n deprecationWarning(\"workflow solution:capture\", \"workflow solution capture\");\n return solutionCaptureCommand(options);\n });\n\nprogram\n .command(\"solution:search <query>\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow solution search\")\n .option(\"--category <cat>\", \"Filter by category\")\n .option(\"--framework <fw>\", \"Filter by framework\")\n .option(\"--limit <n>\", \"Maximum results\", \"10\")\n .action(async (query, options) => {\n deprecationWarning(\"workflow solution:search\", \"workflow solution search\");\n return solutionSearchCommand(query, options);\n });\n\nprogram\n .command(\"solution:list\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow solution list\")\n .option(\"--category <cat>\", \"Filter by category\")\n .option(\"--framework <fw>\", \"Filter by framework\")\n .option(\"--deprecated\", \"Include deprecated solutions\")\n .option(\"--limit <n>\", \"Maximum results\", \"20\")\n .action(async (options) => {\n deprecationWarning(\"workflow solution:list\", \"workflow solution list\");\n return solutionListCommand(options);\n });\n\nprogram\n .command(\"solution:apply <solutionId>\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow solution apply\")\n .option(\"--output <dir>\", \"Output directory\")\n .option(\"--dry-run\", \"Preview without applying\")\n .option(\"--include-tests\", \"Include test files\")\n .action(async (solutionId, options) => {\n deprecationWarning(\"workflow solution:apply\", \"workflow solution apply\");\n return solutionApplyCommand(solutionId, options);\n });\n\nprogram\n .command(\"solution:deprecate <solutionId> <reason>\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow solution deprecate\")\n .action(async (solutionId, reason) => {\n deprecationWarning(\"workflow solution:deprecate\", \"workflow solution deprecate\");\n return solutionDeprecateCommand(solutionId, reason);\n });\n\nprogram\n .command(\"solution:stats\", { hidden: true })\n .description(\"[DEPRECATED] Use: workflow solution stats\")\n .action(async () => {\n deprecationWarning(\"workflow solution:stats\", \"workflow solution stats\");\n return solutionStatsCommand();\n });\n\nprogram.parse();\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"fs\";\nimport { writeFile, mkdir } from \"fs/promises\";\nimport { join, dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport { hasConfig } from \"../../config/index.js\";\nimport {\n buildTemplateContext,\n renderTemplateDirectory,\n validateTemplateDirectory,\n} from \"../../templates/renderer.js\";\nimport { runAllSetups, generateAuditReport } from \"../../utils/auto-setup.js\";\nimport { generateCopilotInstructions } from \"../../scripts/copilot-instructions-generator.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nexport async function initCommand(options: {\n migrate?: boolean;\n workspace?: boolean;\n preset?: string;\n name?: string;\n yes?: boolean;\n}) {\n console.log(chalk.bold.cyan(\"\\n🚀 Workflow Agent Initialization\\n\"));\n\n const cwd = process.cwd();\n const isNonInteractive = !!(options.preset && options.name);\n\n // Check if already initialized\n if (hasConfig(cwd) && !options.yes && !isNonInteractive) {\n const shouldContinue = await p.confirm({\n message: \"Workflow Agent is already configured. Continue and overwrite?\",\n initialValue: false,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Initialization cancelled\");\n process.exit(0);\n }\n }\n\n // Get project name\n const projectName = isNonInteractive\n ? options.name\n : await p.text({\n message: \"What is your project name?\",\n placeholder: \"my-awesome-project\",\n defaultValue: process.cwd().split(\"/\").pop() || \"my-project\",\n });\n\n if (!isNonInteractive && p.isCancel(projectName)) {\n p.cancel(\"Initialization cancelled\");\n process.exit(0);\n }\n\n // Select preset\n const preset = isNonInteractive\n ? options.preset\n : await p.select({\n message: \"Choose a scope preset for your project:\",\n options: [\n {\n value: \"saas\",\n label:\n \"📦 SaaS Application - 17 scopes (auth, tasks, boards, sprints, etc.)\",\n },\n {\n value: \"library\",\n label:\n \"📚 Library/Package - 10 scopes (types, build, docs, examples, etc.)\",\n },\n {\n value: \"api\",\n label:\n \"🔌 API/Backend - 13 scopes (auth, endpoints, models, services, etc.)\",\n },\n {\n value: \"ecommerce\",\n label:\n \"🛒 E-commerce - 12 scopes (cart, products, payments, orders, etc.)\",\n },\n {\n value: \"cms\",\n label: \"📝 CMS - 13 scopes (content, pages, media, editor, etc.)\",\n },\n {\n value: \"custom\",\n label: \"✨ Custom (define your own scopes manually)\",\n },\n ],\n });\n\n if (!isNonInteractive && p.isCancel(preset)) {\n p.cancel(\"Initialization cancelled\");\n process.exit(0);\n }\n\n // Load preset scopes\n let scopes: Array<{ name: string; description: string; emoji?: string }> = [];\n\n if (preset !== \"custom\") {\n // Import preset dynamically\n try {\n const presetModule = await import(`@workflow/scopes-${preset}`);\n scopes = presetModule.scopes || presetModule.default.scopes;\n\n const spinner = p.spinner();\n spinner.start(`Loading ${presetModule.default?.name || preset} preset`);\n await new Promise((resolve) => setTimeout(resolve, 500));\n spinner.stop(`✓ Loaded ${scopes.length} scopes from preset`);\n } catch (error) {\n console.log(\n chalk.yellow(\n `\\n⚠️ Could not load preset package. Using basic scopes.`,\n ),\n );\n scopes = [\n { name: \"feat\", description: \"New features\", emoji: \"✨\" },\n { name: \"fix\", description: \"Bug fixes\", emoji: \"🐛\" },\n { name: \"docs\", description: \"Documentation\", emoji: \"📚\" },\n ];\n }\n } else {\n scopes = [\n { name: \"feat\", description: \"New features\", emoji: \"✨\" },\n { name: \"fix\", description: \"Bug fixes\", emoji: \"🐛\" },\n { name: \"docs\", description: \"Documentation\", emoji: \"📚\" },\n ];\n console.log(\n chalk.dim(\n \"\\n💡 Tip: Edit workflow.config.json to add your custom scopes\",\n ),\n );\n }\n\n // Generate config\n const config = {\n projectName: projectName as string,\n scopes: scopes,\n enforcement: \"strict\" as const,\n language: \"en\",\n };\n\n // Write config file\n const configPath = join(cwd, \"workflow.config.json\");\n await writeFile(configPath, JSON.stringify(config, null, 2));\n\n // Create .workflow directory\n const workflowDir = join(cwd, \".workflow\");\n if (!existsSync(workflowDir)) {\n await mkdir(workflowDir, { recursive: true });\n }\n\n // Render guidelines from templates\n const shouldGenerateGuidelines =\n options.yes || isNonInteractive\n ? true\n : await p.confirm({\n message: \"Generate workflow guidelines from templates?\",\n initialValue: true,\n });\n\n if (!isNonInteractive && p.isCancel(shouldGenerateGuidelines)) {\n p.cancel(\"Initialization cancelled\");\n process.exit(0);\n }\n\n if (shouldGenerateGuidelines) {\n const spinner = p.spinner();\n spinner.start(\"Generating guidelines...\");\n\n try {\n // Find templates directory\n // When built and installed: dist/cli/index.js -> ../../templates\n // The templates are at the package root level\n const templatesDir = join(__dirname, \"../../templates\");\n\n // Validate templates exist\n await validateTemplateDirectory(templatesDir);\n\n // Build context for template rendering\n const context = await buildTemplateContext(config, cwd);\n\n // Create guidelines directory\n const guidelinesDir = join(cwd, \"guidelines\");\n await mkdir(guidelinesDir, { recursive: true });\n\n // Render all templates\n const renderedFiles = await renderTemplateDirectory(\n templatesDir,\n guidelinesDir,\n context,\n );\n\n spinner.stop(`✓ Generated ${renderedFiles.length} guideline documents`);\n\n // Generate .github/copilot-instructions.md from guidelines\n const instructionsSpinner = p.spinner();\n instructionsSpinner.start(\"Generating AI agent instructions...\");\n const result = generateCopilotInstructions(cwd, { silent: true });\n if (result.success) {\n instructionsSpinner.stop(`✓ Generated .github/copilot-instructions.md`);\n } else {\n instructionsSpinner.stop(\"⚠️ Could not generate copilot instructions\");\n }\n } catch (error) {\n spinner.stop(\"⚠️ Could not generate guidelines\");\n console.log(\n chalk.yellow(\n `\\nReason: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n console.log(\n chalk.dim(\"You can manually copy guidelines later if needed.\"),\n );\n }\n }\n\n // Offer auto-setup for development tools\n const shouldAutoSetup =\n options.yes || isNonInteractive\n ? true\n : await p.confirm({\n message: \"Set up linting, formatting, testing, and CI automatically?\",\n initialValue: true,\n });\n\n if (!isNonInteractive && p.isCancel(shouldAutoSetup)) {\n p.cancel(\"Initialization cancelled\");\n process.exit(0);\n }\n\n if (shouldAutoSetup) {\n const setupSpinner = p.spinner();\n setupSpinner.start(\"Running auto-setup...\");\n\n try {\n const report = await generateAuditReport(cwd);\n setupSpinner.stop(\n `✓ Found ${report.totalChanges} configurations to apply`,\n );\n\n if (report.totalChanges > 0 || report.allDevDependencies.length > 0) {\n const autoSetupSpinner = p.spinner();\n await runAllSetups(cwd, (step, status) => {\n if (status === \"start\") {\n autoSetupSpinner.start(step);\n } else if (status === \"done\") {\n autoSetupSpinner.stop(`✓ ${step}`);\n } else {\n autoSetupSpinner.stop(`✗ ${step}`);\n }\n });\n }\n } catch (error) {\n setupSpinner.stop(\"⚠️ Auto-setup encountered issues\");\n console.log(\n chalk.yellow(\n `\\nReason: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n console.log(\n chalk.dim(\"You can run 'workflow auto-setup' later to retry.\"),\n );\n }\n }\n\n p.outro(chalk.green(\"✓ Workflow Agent initialized successfully!\"));\n console.log(chalk.dim(\"\\nNext steps:\"));\n console.log(\n chalk.dim(\" 1. Review your configuration in workflow.config.json\"),\n );\n if (shouldGenerateGuidelines) {\n console.log(\n chalk.dim(\" 2. Review generated guidelines in guidelines/ directory\"),\n );\n console.log(chalk.dim(\" 3. Run: workflow verify (to check everything)\"));\n console.log(\n chalk.dim(\" 4. Run: workflow doctor (for optimization suggestions)\\n\"),\n );\n } else {\n console.log(chalk.dim(\" 2. Run: workflow verify (to check everything)\"));\n console.log(\n chalk.dim(\" 3. Run: workflow doctor (for optimization suggestions)\\n\"),\n );\n }\n}\n","import fs from \"fs/promises\";\nimport path from \"path\";\nimport { WorkflowConfig } from \"../config/schema.js\";\nimport { detectAdapter, getAdapter } from \"../adapters/index.js\";\n\nexport interface TemplateContext {\n projectName: string;\n framework: string;\n scopes: string;\n scopeList: string;\n pathStructure: string;\n enforcement: string;\n year: string;\n // Additional context for scope package scaffolding\n scopeName?: string;\n presetName?: string;\n scopeDefinitions?: string;\n packageDirectory?: string;\n isMonorepo?: string;\n testImports?: string;\n packageVersion?: string;\n [key: string]: string | undefined;\n}\n\n/**\n * Renders a template string with provided context using simple {{variable}} syntax\n */\nexport function renderTemplate(\n template: string,\n context: TemplateContext,\n): string {\n return template.replace(/\\{\\{(\\w+)\\}\\}/g, (match, key) => {\n return context[key] ?? match;\n });\n}\n\n/**\n * Builds template context from workflow config and detected framework\n */\nexport async function buildTemplateContext(\n config: WorkflowConfig,\n projectPath: string = process.cwd(),\n): Promise<TemplateContext> {\n // Detect framework\n const detectedFramework = await detectAdapter();\n const adapter = getAdapter(detectedFramework);\n\n // Build scope list as markdown\n const scopeList = config.scopes\n .map((s) => `- **${s.name}** - ${s.description}`)\n .join(\"\\n\");\n\n // Build scope names list (comma-separated)\n const scopes = config.scopes.map((s) => s.name).join(\", \");\n\n // Build path structure from adapter\n const pathStructure = adapter\n ? `\n### Path Structure\n\n\\`\\`\\`\n${adapter.paths.components}/ → UI components\n${adapter.paths.lib}/ → Utility functions and services\n${adapter.paths.hooks}/ → Custom React hooks\n${adapter.paths.types}/ → TypeScript type definitions\n\\`\\`\\`\n`.trim()\n : \"N/A\";\n\n // Get project name from package.json or directory name\n const projectName = await getProjectName(projectPath);\n\n return {\n projectName,\n framework: adapter?.name || \"unknown\",\n scopes,\n scopeList,\n pathStructure,\n enforcement: config.enforcement,\n year: new Date().getFullYear().toString(),\n };\n}\n\n/**\n * Renders a template file and writes output\n */\nexport async function renderTemplateFile(\n templatePath: string,\n outputPath: string,\n context: TemplateContext,\n): Promise<void> {\n const template = await fs.readFile(templatePath, \"utf-8\");\n const rendered = renderTemplate(template, context);\n await fs.mkdir(path.dirname(outputPath), { recursive: true });\n await fs.writeFile(outputPath, rendered, \"utf-8\");\n}\n\n/**\n * Renders all template files from source directory to output directory\n * Supports .md, .ts, .json file extensions\n */\nexport async function renderTemplateDirectory(\n templateDir: string,\n outputDir: string,\n context: TemplateContext,\n): Promise<string[]> {\n const files = await fs.readdir(templateDir);\n const rendered: string[] = [];\n\n for (const file of files) {\n // Support .md, .ts, .json files\n if (!file.match(/\\.(md|ts|json)$/)) continue;\n\n const templatePath = path.join(templateDir, file);\n const outputPath = path.join(outputDir, file);\n\n await renderTemplateFile(templatePath, outputPath, context);\n rendered.push(file);\n }\n\n return rendered;\n}\n\n/**\n * Gets project name from package.json or directory name\n */\nasync function getProjectName(projectPath: string): Promise<string> {\n try {\n const pkgPath = path.join(projectPath, \"package.json\");\n const pkg = JSON.parse(await fs.readFile(pkgPath, \"utf-8\"));\n return pkg.name || path.basename(projectPath);\n } catch {\n return path.basename(projectPath);\n }\n}\n\n/**\n * Validates that template directory exists and contains markdown files\n */\nexport async function validateTemplateDirectory(\n templateDir: string,\n): Promise<void> {\n try {\n const stat = await fs.stat(templateDir);\n if (!stat.isDirectory()) {\n throw new Error(`Template path is not a directory: ${templateDir}`);\n }\n\n const files = await fs.readdir(templateDir);\n const templateFiles = files.filter((f) => f.match(/\\.(md|ts|json)$/));\n\n if (templateFiles.length === 0) {\n throw new Error(\n `No template files found in template directory: ${templateDir}`,\n );\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code === \"ENOENT\") {\n throw new Error(`Template directory not found: ${templateDir}`);\n }\n throw error;\n }\n}\n\n/**\n * Renders a scope package from templates\n * @param outputDir Directory to create package in\n * @param context Template context with scope-specific variables\n */\nexport async function renderScopePackage(\n outputDir: string,\n context: Required<\n Pick<\n TemplateContext,\n \"scopeName\" | \"presetName\" | \"scopeDefinitions\" | \"packageVersion\"\n >\n > &\n TemplateContext,\n): Promise<void> {\n // Ensure output directory exists\n await fs.mkdir(path.join(outputDir, \"src\"), { recursive: true });\n\n // Write package.json\n const packageJson = {\n name: `@workflow/scopes-${context.scopeName}`,\n version: context.packageVersion,\n description: `Scope preset for ${context.presetName}`,\n keywords: [\"workflow\", \"scopes\", context.scopeName, \"preset\"],\n repository: {\n type: \"git\",\n url: \"git+https://github.com/your-org/your-repo.git\",\n directory:\n context.packageDirectory || `packages/scopes-${context.scopeName}`,\n },\n license: \"MIT\",\n author: \"Your Name\",\n type: \"module\",\n exports: {\n \".\": {\n types: \"./dist/index.d.ts\",\n import: \"./dist/index.js\",\n },\n },\n files: [\"dist\"],\n scripts: {\n build: \"tsup\",\n dev: \"tsup --watch\",\n typecheck: \"tsc --noEmit\",\n test: \"vitest run\",\n },\n peerDependencies: {\n \"@hawkinside_out/workflow-agent\": \"^1.0.0\",\n },\n devDependencies: {\n \"@hawkinside_out/workflow-agent\": \"^1.0.0\",\n tsup: \"^8.0.1\",\n typescript: \"^5.3.3\",\n vitest: \"^1.0.0\",\n },\n publishConfig: {\n access: \"public\",\n },\n };\n\n await fs.writeFile(\n path.join(outputDir, \"package.json\"),\n JSON.stringify(packageJson, null, 2),\n \"utf-8\",\n );\n\n // Write tsconfig.json\n const tsconfig = {\n extends: \"../../tsconfig.json\",\n compilerOptions: {\n outDir: \"./dist\",\n rootDir: \"./src\",\n },\n include: [\"src/**/*\"],\n };\n\n await fs.writeFile(\n path.join(outputDir, \"tsconfig.json\"),\n JSON.stringify(tsconfig, null, 2),\n \"utf-8\",\n );\n\n // Write tsup.config.ts\n const tsupConfig = `import { defineConfig } from 'tsup';\n\nexport default defineConfig({\n entry: ['src/index.ts'],\n format: ['esm'],\n dts: true,\n clean: true,\n sourcemap: true,\n});\n`;\n\n await fs.writeFile(\n path.join(outputDir, \"tsup.config.ts\"),\n tsupConfig,\n \"utf-8\",\n );\n\n // Write src/index.ts\n const indexTs = `import type { Scope } from '@hawkinside_out/workflow-agent/config';\n\nexport const scopes: Scope[] = ${context.scopeDefinitions};\n\nexport const preset = {\n name: '${context.presetName}',\n description: 'Scope configuration for ${context.presetName}',\n scopes,\n version: '${context.packageVersion}',\n};\n\nexport default preset;\n`;\n\n await fs.writeFile(path.join(outputDir, \"src\", \"index.ts\"), indexTs, \"utf-8\");\n}\n","export interface Adapter {\n name: string;\n description: string;\n detect: () => Promise<boolean>;\n paths: {\n actions?: string;\n components?: string;\n lib?: string;\n hooks?: string;\n types?: string;\n tests?: string;\n config?: string;\n };\n}\n\nexport const adapters: Record<string, Adapter> = {\n \"nextjs-app-router\": {\n name: \"Next.js App Router\",\n description: \"Next.js 13+ with app directory\",\n detect: async () => {\n const fs = await import(\"fs\");\n return (\n (fs.existsSync(\"app\") && fs.existsSync(\"next.config.ts\")) ||\n fs.existsSync(\"next.config.js\")\n );\n },\n paths: {\n actions: \"app/actions\",\n components: \"components\",\n lib: \"lib\",\n hooks: \"hooks\",\n types: \"types\",\n tests: \"__tests__\",\n config: \"app\",\n },\n },\n\n \"nextjs-pages\": {\n name: \"Next.js Pages Router\",\n description: \"Next.js with pages directory\",\n detect: async () => {\n const fs = await import(\"fs\");\n return (\n fs.existsSync(\"pages\") &&\n (fs.existsSync(\"next.config.ts\") || fs.existsSync(\"next.config.js\"))\n );\n },\n paths: {\n components: \"components\",\n lib: \"lib\",\n hooks: \"hooks\",\n types: \"types\",\n tests: \"__tests__\",\n config: \"pages\",\n },\n },\n\n \"vite-react\": {\n name: \"Vite + React\",\n description: \"Vite-powered React application\",\n detect: async () => {\n const fs = await import(\"fs\");\n return fs.existsSync(\"vite.config.ts\") || fs.existsSync(\"vite.config.js\");\n },\n paths: {\n components: \"src/components\",\n lib: \"src/lib\",\n hooks: \"src/hooks\",\n types: \"src/types\",\n tests: \"src/__tests__\",\n config: \"src\",\n },\n },\n\n remix: {\n name: \"Remix\",\n description: \"Remix full-stack framework\",\n detect: async () => {\n const fs = await import(\"fs\");\n return (\n fs.existsSync(\"app/routes\") &&\n (fs.existsSync(\"remix.config.js\") || fs.existsSync(\"package.json\"))\n );\n },\n paths: {\n components: \"app/components\",\n lib: \"app/lib\",\n types: \"app/types\",\n tests: \"app/__tests__\",\n config: \"app/root.tsx\",\n },\n },\n\n astro: {\n name: \"Astro\",\n description: \"Astro static site framework\",\n detect: async () => {\n const fs = await import(\"fs\");\n return (\n fs.existsSync(\"astro.config.mjs\") || fs.existsSync(\"astro.config.ts\")\n );\n },\n paths: {\n components: \"src/components\",\n lib: \"src/lib\",\n types: \"src/types\",\n tests: \"src/__tests__\",\n config: \"src/pages\",\n },\n },\n\n sveltekit: {\n name: \"SvelteKit\",\n description: \"SvelteKit full-stack framework\",\n detect: async () => {\n const fs = await import(\"fs\");\n return fs.existsSync(\"svelte.config.js\") || fs.existsSync(\"src/routes\");\n },\n paths: {\n components: \"src/lib/components\",\n lib: \"src/lib\",\n types: \"src/lib/types\",\n tests: \"src/lib/__tests__\",\n config: \"src/routes\",\n },\n },\n\n generic: {\n name: \"Generic Project\",\n description: \"Standard project structure\",\n detect: async () => true, // Always matches as fallback\n paths: {\n components: \"src/components\",\n lib: \"src/lib\",\n types: \"src/types\",\n tests: \"tests\",\n config: \"src\",\n },\n },\n};\n\nexport async function detectAdapter(): Promise<string> {\n for (const [key, adapter] of Object.entries(adapters)) {\n if (key === \"generic\") continue; // Skip generic, it's the fallback\n\n try {\n if (await adapter.detect()) {\n return key;\n }\n } catch {\n // Continue to next adapter\n }\n }\n\n return \"generic\";\n}\n\nexport function getAdapter(name: string): Adapter | null {\n return adapters[name] || null;\n}\n","import chalk from \"chalk\";\nimport { execa } from \"execa\";\nimport { loadConfig } from \"../../config/index.js\";\nimport {\n validateBranchName,\n validateCommitMessage,\n validatePRTitle,\n} from \"../../validators/index.js\";\n\nexport async function validateCommand(\n type: string,\n value?: string,\n _options: { suggestOnError?: boolean } = {},\n) {\n const config = await loadConfig();\n\n if (!config) {\n console.error(\n chalk.red(\"✗ No workflow configuration found. Run: workflow init\"),\n );\n process.exit(1);\n }\n\n let targetValue = value;\n\n try {\n let result;\n switch (type) {\n case \"branch\": {\n if (!targetValue) {\n const { stdout } = await execa(\"git\", [\"branch\", \"--show-current\"]);\n targetValue = stdout.trim();\n }\n result = await validateBranchName(targetValue, config);\n break;\n }\n\n case \"commit\": {\n if (!targetValue) {\n const { stdout } = await execa(\"git\", [\"log\", \"-1\", \"--pretty=%s\"]);\n targetValue = stdout.trim();\n }\n result = await validateCommitMessage(targetValue, config);\n break;\n }\n\n case \"pr\":\n case \"pr-title\": {\n if (!targetValue) {\n console.error(chalk.red(\"✗ PR title must be provided as argument\"));\n process.exit(1);\n }\n result = await validatePRTitle(targetValue, config);\n break;\n }\n\n default:\n console.error(chalk.red(`✗ Unknown validation type: ${type}`));\n console.error(chalk.dim(\"Valid types: branch, commit, pr\"));\n process.exit(1);\n }\n\n if (result.valid) {\n console.log(chalk.green(`✓ ${type} is valid: ${targetValue}`));\n process.exit(0);\n } else {\n console.error(chalk.red(`✗ Invalid ${type}: ${targetValue}`));\n console.error(chalk.yellow(` ${result.error}`));\n if (result.suggestion) {\n console.error(chalk.cyan(` 💡 ${result.suggestion}`));\n }\n\n const enforcementLevel = config.enforcement;\n if (enforcementLevel === \"strict\") {\n process.exit(1);\n } else {\n console.log(\n chalk.yellow(\n `\\n⚠️ Advisory mode: validation failed but not blocking`,\n ),\n );\n process.exit(0);\n }\n }\n } catch (error) {\n console.error(chalk.red(`✗ Validation error: ${error}`));\n process.exit(1);\n }\n}\n","import chalk from \"chalk\";\n\nexport async function configCommand(\n action: string,\n key?: string,\n value?: string,\n) {\n console.log(chalk.yellow(\"Config command not yet implemented\"));\n console.log({ action, key, value });\n}\n","import chalk from \"chalk\";\nimport * as p from \"@clack/prompts\";\nimport { createTracker } from \"@hawkinside_out/workflow-improvement-tracker\";\n\nexport async function suggestCommand(\n feedback: string,\n options: { author?: string; category?: string } = {},\n) {\n console.log(chalk.cyan(\"💡 Submitting improvement suggestion...\\n\"));\n\n const tracker = createTracker();\n\n // Optionally get category if not provided\n let category = options.category;\n if (!category) {\n const categoryChoice = await p.select({\n message: \"What type of improvement is this?\",\n options: [\n { value: \"feature\", label: \"✨ Feature Request\" },\n { value: \"bug\", label: \"🐛 Bug Report\" },\n { value: \"documentation\", label: \"📚 Documentation\" },\n { value: \"performance\", label: \"⚡ Performance\" },\n { value: \"other\", label: \"💡 Other\" },\n ],\n });\n\n if (p.isCancel(categoryChoice)) {\n p.cancel(\"Suggestion cancelled\");\n process.exit(0);\n }\n\n category = categoryChoice as string;\n }\n\n // Submit suggestion\n const result = await tracker.submit(feedback, options.author, category);\n\n if (!result.success) {\n console.log(chalk.red(\"✗ Suggestion rejected\"));\n console.log(chalk.dim(` Reason: ${result.error}`));\n process.exit(1);\n }\n\n console.log(chalk.green(\"✓ Suggestion submitted successfully!\"));\n console.log(chalk.dim(` ID: ${result.suggestion?.id}`));\n console.log(chalk.dim(` Status: ${result.suggestion?.status}`));\n console.log(chalk.dim(` Category: ${result.suggestion?.category}`));\n console.log(chalk.dim(\"\\nYour suggestion will be:\"));\n console.log(chalk.dim(\" 1. Reviewed by the community\"));\n console.log(chalk.dim(\" 2. Prioritized based on impact\"));\n console.log(\n chalk.dim(\" 3. Incorporated into future releases if approved\\n\"),\n );\n}\n","import chalk from \"chalk\";\nimport { loadConfigSafe, autoFixConfigFile } from \"../../config/index.js\";\nimport { getMandatoryTemplateFilenames } from \"../../templates/metadata.js\";\nimport { existsSync } from \"fs\";\nimport { join } from \"path\";\nimport { hasGitRepo, getAllHooksStatus } from \"../../utils/hooks.js\";\n\nexport async function doctorCommand(options?: {\n checkGuidelinesOnly?: boolean;\n fix?: boolean;\n}) {\n console.log(chalk.bold.cyan(\"\\n🏥 Workflow Agent Health Check\\n\"));\n\n // Use safe loading to handle validation errors gracefully\n const result = await loadConfigSafe();\n\n // Handle missing config\n if (!result.configPath && !result.rawConfig) {\n console.error(chalk.red(\"✗ No workflow configuration found\"));\n console.log(chalk.yellow(\" Run: workflow init\"));\n process.exit(1);\n }\n\n // Handle validation errors\n if (!result.valid && result.issues.length > 0) {\n console.log(chalk.yellow(\"⚠ Configuration has validation issues:\\n\"));\n\n for (const issue of result.issues) {\n console.log(chalk.red(` ✗ ${issue.path}: ${issue.message}`));\n if (issue.currentValue !== undefined) {\n console.log(chalk.dim(` Current value: ${JSON.stringify(issue.currentValue)}`));\n }\n if (issue.suggestedFix) {\n console.log(chalk.green(` Suggested fix: ${issue.suggestedFix.description}`));\n console.log(chalk.dim(` New value: ${JSON.stringify(issue.suggestedFix.newValue)}`));\n }\n }\n\n // Check if auto-fix is available\n const hasAutoFixes = result.issues.some((i) => i.suggestedFix);\n\n if (hasAutoFixes) {\n if (options?.fix) {\n // Auto-fix was requested\n console.log(chalk.cyan(\"\\n🔧 Attempting to auto-fix issues...\\n\"));\n const fixResult = await autoFixConfigFile();\n\n if (fixResult.success) {\n console.log(chalk.green(\"✓ Configuration fixed successfully!\\n\"));\n for (const change of fixResult.changes) {\n console.log(chalk.dim(` • ${change}`));\n }\n console.log(chalk.cyan(\"\\n Run 'workflow doctor' again to verify.\\n\"));\n process.exit(0);\n } else {\n console.log(chalk.red(`✗ Auto-fix failed: ${fixResult.error}`));\n process.exit(1);\n }\n } else {\n console.log(chalk.cyan(\"\\n💡 Auto-fix available!\"));\n console.log(chalk.dim(\" Run: workflow doctor --fix\\n\"));\n }\n }\n\n process.exit(1);\n }\n\n const config = result.config!;\n\n console.log(chalk.green(\"✓ Configuration loaded successfully\"));\n console.log(chalk.dim(` Project: ${config.projectName}`));\n console.log(chalk.dim(` Scopes: ${config.scopes.length} configured`));\n console.log(chalk.dim(` Enforcement: ${config.enforcement}`));\n console.log(chalk.dim(` Language: ${config.language}`));\n\n // Check guidelines\n const cwd = process.cwd();\n const guidelinesDir = join(cwd, \"guidelines\");\n const mandatoryFiles = getMandatoryTemplateFilenames();\n const missingFiles: string[] = [];\n\n console.log(chalk.cyan(\"\\n📚 Guidelines Check:\\n\"));\n\n for (const filename of mandatoryFiles) {\n const filePath = join(guidelinesDir, filename);\n if (existsSync(filePath)) {\n console.log(chalk.green(`✓ ${filename}`));\n } else {\n console.log(chalk.red(`✗ ${filename} (missing)`));\n missingFiles.push(filename);\n }\n }\n\n if (missingFiles.length === 0) {\n console.log(\n chalk.green(`\\n✓ All ${mandatoryFiles.length} mandatory guidelines present`),\n );\n } else {\n console.log(\n chalk.red(\n `\\n✗ Missing ${missingFiles.length} mandatory guideline(s)`,\n ),\n );\n }\n\n // If check-guidelines-only flag is set, exit here\n if (options?.checkGuidelinesOnly) {\n process.exit(missingFiles.length > 0 ? 1 : 0);\n }\n\n // Check git hooks status\n console.log(chalk.cyan(\"\\n🔗 Git Hooks Check:\\n\"));\n\n if (!hasGitRepo(cwd)) {\n console.log(chalk.yellow(\"⚠ No git repository found\"));\n console.log(chalk.dim(\" Run: git init\"));\n } else {\n try {\n const hooksStatus = await getAllHooksStatus(cwd);\n \n for (const status of hooksStatus) {\n if (status.installed) {\n console.log(chalk.green(`✓ ${status.hookType}: installed`));\n } else {\n console.log(chalk.yellow(`⚠ ${status.hookType}: not installed`));\n }\n }\n\n const allInstalled = hooksStatus.every((s) => s.installed);\n if (!allInstalled) {\n console.log(chalk.dim(\"\\n Run: workflow hooks install\"));\n }\n } catch (error) {\n console.log(chalk.yellow(\"⚠ Could not check hooks status\"));\n console.log(chalk.dim(` ${error instanceof Error ? error.message : \"Unknown error\"}`));\n }\n }\n\n // Exit with error if guidelines are missing\n if (missingFiles.length > 0) {\n process.exit(1);\n }\n}\n","/**\n * Git hooks utility for installing, managing, and removing workflow hooks\n * Supports wrapping existing hooks and CI environment detection\n */\n\nimport { existsSync } from \"fs\";\nimport { readFile, writeFile, unlink, chmod, rename, mkdir } from \"fs/promises\";\nimport { join } from \"path\";\nimport type { HooksConfig } from \"../config/schema.js\";\n\nexport interface HookStatus {\n installed: boolean;\n hookType: \"pre-commit\" | \"commit-msg\";\n hasExistingHook: boolean;\n wrappedOriginal: boolean;\n}\n\nexport interface InstallResult {\n success: boolean;\n hookType: \"pre-commit\" | \"commit-msg\";\n wrappedExisting: boolean;\n error?: string;\n}\n\n/**\n * Check if running in a CI environment\n */\nexport function isCI(): boolean {\n return !!(\n process.env.CI ||\n process.env.GITHUB_ACTIONS ||\n process.env.GITLAB_CI ||\n process.env.CIRCLECI ||\n process.env.TRAVIS ||\n process.env.JENKINS_URL ||\n process.env.BUILDKITE ||\n process.env.TF_BUILD // Azure DevOps\n );\n}\n\n/**\n * Get the path to the .git/hooks directory\n */\nexport function getGitHooksDir(projectPath: string = process.cwd()): string {\n return join(projectPath, \".git\", \"hooks\");\n}\n\n/**\n * Check if a git repository exists\n */\nexport function hasGitRepo(projectPath: string = process.cwd()): boolean {\n return existsSync(join(projectPath, \".git\"));\n}\n\n/**\n * Generate the pre-commit hook script content\n */\nfunction generatePreCommitHook(config?: HooksConfig): string {\n const checks = config?.preCommit || [\"validate-branch\", \"check-guidelines\"];\n\n const checkCommands = checks\n .map((check: string) => {\n switch (check) {\n case \"validate-branch\":\n return \" workflow validate branch\";\n case \"validate-commit\":\n return \" workflow validate commit\";\n case \"check-guidelines\":\n return \" workflow doctor --check-guidelines-only 2>/dev/null || true\";\n case \"validate-scopes\":\n return \" workflow config validate\";\n default:\n return \"\";\n }\n })\n .filter(Boolean)\n .join(\"\\n\");\n\n return `#!/bin/sh\n# Workflow Agent pre-commit hook\n# Auto-generated - do not edit manually\n# To reinstall: workflow hooks install\n# To uninstall: workflow hooks uninstall\n\n# Skip in CI environment\nif [ -n \"\\${CI:-}\" ] || [ -n \"\\${GITHUB_ACTIONS:-}\" ] || [ -n \"\\${GITLAB_CI:-}\" ]; then\n exit 0\nfi\n\n# Run workflow checks\n${checkCommands}\n\n# Run original hook if it exists\nif [ -f \".git/hooks/pre-commit.original\" ]; then\n .git/hooks/pre-commit.original \"\\$@\"\nfi\n`;\n}\n\n/**\n * Generate the commit-msg hook script content\n */\nfunction generateCommitMsgHook(config?: HooksConfig): string {\n const checks = config?.commitMsg || [\"validate-commit\"];\n\n const checkCommands = checks\n .map((check: string) => {\n switch (check) {\n case \"validate-commit\":\n return ' workflow validate commit \"$(cat \"$1\")\"';\n default:\n return \"\";\n }\n })\n .filter(Boolean)\n .join(\"\\n\");\n\n return `#!/bin/sh\n# Workflow Agent commit-msg hook\n# Auto-generated - do not edit manually\n# To reinstall: workflow hooks install\n# To uninstall: workflow hooks uninstall\n\n# Skip in CI environment\nif [ -n \"\\${CI:-}\" ] || [ -n \"\\${GITHUB_ACTIONS:-}\" ] || [ -n \"\\${GITLAB_CI:-}\" ]; then\n exit 0\nfi\n\n# Run workflow checks\n${checkCommands}\n\n# Run original hook if it exists\nif [ -f \".git/hooks/commit-msg.original\" ]; then\n .git/hooks/commit-msg.original \"\\$@\"\nfi\n`;\n}\n\n/**\n * Check if a hook file is a workflow-managed hook\n */\nasync function isWorkflowHook(hookPath: string): Promise<boolean> {\n try {\n const content = await readFile(hookPath, \"utf-8\");\n return (\n content.includes(\"Workflow Agent\") && content.includes(\"Auto-generated\")\n );\n } catch {\n return false;\n }\n}\n\n/**\n * Get the status of a specific hook\n */\nexport async function getHookStatus(\n hookType: \"pre-commit\" | \"commit-msg\",\n projectPath: string = process.cwd(),\n): Promise<HookStatus> {\n const hooksDir = getGitHooksDir(projectPath);\n const hookPath = join(hooksDir, hookType);\n const originalPath = join(hooksDir, `${hookType}.original`);\n\n const status: HookStatus = {\n installed: false,\n hookType,\n hasExistingHook: false,\n wrappedOriginal: false,\n };\n\n if (!existsSync(hookPath)) {\n return status;\n }\n\n status.hasExistingHook = true;\n\n if (await isWorkflowHook(hookPath)) {\n status.installed = true;\n status.wrappedOriginal = existsSync(originalPath);\n }\n\n return status;\n}\n\n/**\n * Get status of all hooks\n */\nexport async function getAllHooksStatus(\n projectPath: string = process.cwd(),\n): Promise<HookStatus[]> {\n return Promise.all([\n getHookStatus(\"pre-commit\", projectPath),\n getHookStatus(\"commit-msg\", projectPath),\n ]);\n}\n\n/**\n * Install a single hook, wrapping existing if present\n */\nasync function installSingleHook(\n hookType: \"pre-commit\" | \"commit-msg\",\n config?: HooksConfig,\n projectPath: string = process.cwd(),\n): Promise<InstallResult> {\n const hooksDir = getGitHooksDir(projectPath);\n const hookPath = join(hooksDir, hookType);\n const originalPath = join(hooksDir, `${hookType}.original`);\n\n const result: InstallResult = {\n success: false,\n hookType,\n wrappedExisting: false,\n };\n\n try {\n // Ensure hooks directory exists\n if (!existsSync(hooksDir)) {\n await mkdir(hooksDir, { recursive: true });\n }\n\n // Check for existing hook\n if (existsSync(hookPath)) {\n const isOurs = await isWorkflowHook(hookPath);\n\n if (!isOurs) {\n // Backup existing hook\n await rename(hookPath, originalPath);\n result.wrappedExisting = true;\n }\n }\n\n // Generate and write the hook\n const hookContent =\n hookType === \"pre-commit\"\n ? generatePreCommitHook(config)\n : generateCommitMsgHook(config);\n\n await writeFile(hookPath, hookContent, \"utf-8\");\n await chmod(hookPath, 0o755);\n\n result.success = true;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n}\n\n/**\n * Install all workflow hooks\n */\nexport async function installHooks(\n config?: HooksConfig,\n projectPath: string = process.cwd(),\n): Promise<InstallResult[]> {\n if (!hasGitRepo(projectPath)) {\n return [\n {\n success: false,\n hookType: \"pre-commit\",\n wrappedExisting: false,\n error: \"No git repository found. Run git init first.\",\n },\n ];\n }\n\n const results = await Promise.all([\n installSingleHook(\"pre-commit\", config, projectPath),\n installSingleHook(\"commit-msg\", config, projectPath),\n ]);\n\n return results;\n}\n\n/**\n * Uninstall a single hook, restoring original if it was wrapped\n */\nasync function uninstallSingleHook(\n hookType: \"pre-commit\" | \"commit-msg\",\n projectPath: string = process.cwd(),\n): Promise<InstallResult> {\n const hooksDir = getGitHooksDir(projectPath);\n const hookPath = join(hooksDir, hookType);\n const originalPath = join(hooksDir, `${hookType}.original`);\n\n const result: InstallResult = {\n success: false,\n hookType,\n wrappedExisting: false,\n };\n\n try {\n if (!existsSync(hookPath)) {\n result.success = true;\n return result;\n }\n\n const isOurs = await isWorkflowHook(hookPath);\n\n if (!isOurs) {\n result.error = \"Hook is not managed by Workflow Agent\";\n return result;\n }\n\n // Remove our hook\n await unlink(hookPath);\n\n // Restore original if it exists\n if (existsSync(originalPath)) {\n await rename(originalPath, hookPath);\n result.wrappedExisting = true;\n }\n\n result.success = true;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n}\n\n/**\n * Uninstall all workflow hooks\n */\nexport async function uninstallHooks(\n projectPath: string = process.cwd(),\n): Promise<InstallResult[]> {\n return Promise.all([\n uninstallSingleHook(\"pre-commit\", projectPath),\n uninstallSingleHook(\"commit-msg\", projectPath),\n ]);\n}\n","import { Command } from \"commander\";\nimport { setupCommand } from \"../setup.js\";\nimport { autoSetupCommand } from \"../auto-setup-command.js\";\n\n/**\n * Create the setup command group\n * Handles: setup, setup scripts, setup auto\n */\nexport function createSetupCommand(): Command {\n const setupCmd = new Command(\"setup\")\n .description(\"Setup and configuration commands\");\n\n // Default action - add workflow scripts\n setupCmd.action(setupCommand);\n\n // setup scripts - same as default\n setupCmd\n .command(\"scripts\")\n .description(\"Add workflow scripts to package.json\")\n .action(setupCommand);\n\n // setup auto - auto-configure linting, formatting, testing, and CI\n setupCmd\n .command(\"auto\")\n .description(\"Automatically configure linting, formatting, testing, and CI\")\n .option(\"-y, --yes\", \"Auto-approve all prompts\")\n .option(\"--audit\", \"Show audit report without applying changes\")\n .action(autoSetupCommand);\n\n return setupCmd;\n}\n\n// Export individual commands for direct access\nexport { setupCommand, autoSetupCommand };\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { readFileSync, writeFileSync, existsSync } from \"fs\";\nimport { join, dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport {\n WORKFLOW_SCRIPTS,\n DEPRECATED_SCRIPTS,\n WORKFLOW_SCRIPTS_VERSION,\n validateAllScripts,\n} from \"../../scripts/workflow-scripts.js\";\nimport { generateCopilotInstructions } from \"../../scripts/copilot-instructions-generator.js\";\nimport {\n installMandatoryTemplates,\n findTemplatesDirectory,\n} from \"../../scripts/template-installer.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nexport async function setupCommand(): Promise<void> {\n p.intro(chalk.bgBlue(\" workflow-agent setup \"));\n\n const cwd = process.cwd();\n const packageJsonPath = join(cwd, \"package.json\");\n\n if (!existsSync(packageJsonPath)) {\n p.cancel(\"No package.json found in current directory\");\n process.exit(1);\n }\n\n // Read package.json\n const packageJsonContent = readFileSync(packageJsonPath, \"utf-8\");\n const packageJson = JSON.parse(packageJsonContent);\n\n // Initialize scripts if needed\n if (!packageJson.scripts) {\n packageJson.scripts = {};\n }\n\n // Track changes\n let scriptAdded = false;\n let scriptUpdated = false;\n const removedScripts: string[] = [];\n\n // Step 1: Remove deprecated scripts\n for (const deprecatedScript of DEPRECATED_SCRIPTS) {\n if (packageJson.scripts[deprecatedScript] !== undefined) {\n delete packageJson.scripts[deprecatedScript];\n removedScripts.push(deprecatedScript);\n }\n }\n\n // Also remove any remaining workflow:* or workflow-* scripts\n const oldScripts = validateAllScripts(packageJson.scripts);\n for (const oldScript of oldScripts) {\n if (packageJson.scripts[oldScript] !== undefined) {\n delete packageJson.scripts[oldScript];\n if (!removedScripts.includes(oldScript)) {\n removedScripts.push(oldScript);\n }\n }\n }\n\n // Step 2: Add the workflow script\n const scriptName = \"workflow\";\n const scriptCommand = WORKFLOW_SCRIPTS.workflow;\n\n if (!packageJson.scripts[scriptName]) {\n packageJson.scripts[scriptName] = scriptCommand;\n scriptAdded = true;\n } else if (packageJson.scripts[scriptName] !== scriptCommand) {\n packageJson.scripts[scriptName] = scriptCommand;\n scriptUpdated = true;\n }\n\n const hasChanges = scriptAdded || scriptUpdated || removedScripts.length > 0;\n\n if (!hasChanges) {\n p.outro(\n chalk.green(`✓ Workflow script is already configured!`)\n );\n return;\n }\n\n // Write back to package.json\n writeFileSync(\n packageJsonPath,\n JSON.stringify(packageJson, null, 2) + \"\\n\",\n \"utf-8\"\n );\n\n console.log(\n chalk.green(`\\n✓ Workflow Agent v${WORKFLOW_SCRIPTS_VERSION} configured`)\n );\n\n if (scriptAdded) {\n console.log(chalk.green(`\\n Added \"workflow\" script to package.json`));\n } else if (scriptUpdated) {\n console.log(chalk.green(`\\n Updated \"workflow\" script in package.json`));\n }\n\n // Log removed deprecated scripts\n if (removedScripts.length > 0) {\n console.log(\n chalk.yellow(`\\n ⚠️ Removed ${removedScripts.length} deprecated scripts`)\n );\n console.log(\n chalk.dim(\n ` (Old workflow:* scripts replaced by single \"workflow\" command)`\n )\n );\n }\n\n console.log(chalk.cyan(`\\n Usage:`));\n console.log(chalk.dim(` npm run workflow -- init`));\n console.log(chalk.dim(` npm run workflow -- solution list`));\n console.log(chalk.dim(` npm run workflow -- --help`));\n console.log(chalk.cyan(`\\n Or with pnpm:`));\n console.log(chalk.dim(` pnpm workflow init`));\n console.log(chalk.dim(` pnpm workflow solution list`));\n console.log(chalk.dim(` pnpm workflow --help`));\n\n p.outro(chalk.green(`✓ Workflow script ready!`));\n\n // Install mandatory templates if guidelines directory doesn't exist\n const guidelinesDir = join(cwd, \"guidelines\");\n if (!existsSync(guidelinesDir)) {\n const templatesDir = findTemplatesDirectory(__dirname);\n if (templatesDir) {\n const templateResult = installMandatoryTemplates(cwd, templatesDir, {\n silent: false,\n skipIfExists: true,\n mandatoryOnly: true,\n });\n if (templateResult.installed.length > 0) {\n console.log(\n chalk.green(\n `\\n✓ Installed ${templateResult.installed.length} mandatory guideline templates`\n )\n );\n }\n }\n }\n\n // Generate .github/copilot-instructions.md if guidelines exist\n if (existsSync(guidelinesDir)) {\n const result = generateCopilotInstructions(cwd, { silent: false });\n if (result.success) {\n const status = result.isNew ? \"Generated\" : \"Updated\";\n console.log(\n chalk.green(\n `✓ ${status} .github/copilot-instructions.md from ${result.guidelinesCount} guidelines`\n )\n );\n if (result.preservedCustomContent) {\n console.log(chalk.dim(\" (Custom content preserved)\"));\n }\n }\n }\n}\n","/**\n * Auto-Setup Command\n *\n * Analyzes the project, shows an audit report of what will change,\n * and applies all setup configurations with batched dependency installation.\n *\n * Usage:\n * workflow-agent auto-setup # Interactive mode\n * workflow-agent auto-setup --yes # Auto-approve all\n * workflow-agent auto-setup --audit # Show report only (dry run)\n */\n\nimport * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport {\n generateAuditReport,\n runAllSetups,\n type AuditReport,\n} from \"../../utils/auto-setup.js\";\n\nexport interface AutoSetupOptions {\n yes?: boolean;\n audit?: boolean;\n}\n\nexport async function autoSetupCommand(options: AutoSetupOptions) {\n console.log(chalk.bold.cyan(\"\\n🔧 Workflow Agent Auto-Setup\\n\"));\n\n const cwd = process.cwd();\n\n // Generate audit report\n const spinner = p.spinner();\n spinner.start(\"Analyzing project...\");\n\n let report: AuditReport;\n try {\n report = await generateAuditReport(cwd);\n spinner.stop(\"✓ Project analysis complete\");\n } catch (error) {\n spinner.stop(\"✗ Failed to analyze project\");\n console.error(\n chalk.red(\n `Error: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n process.exit(1);\n }\n\n // Display audit report\n console.log(\"\\n\" + formatAuditReportColored(report));\n\n // Exit early if audit mode\n if (options.audit) {\n console.log(chalk.dim(\"\\n--audit mode: No changes applied.\\n\"));\n return;\n }\n\n // Check if there are any changes to make\n if (report.totalChanges === 0 && report.allDevDependencies.length === 0) {\n p.outro(chalk.green(\"✓ Project is already fully configured!\"));\n return;\n }\n\n // Confirm unless --yes\n if (!options.yes) {\n const shouldProceed = await p.confirm({\n message: `Apply ${report.totalChanges} changes and install ${report.allDevDependencies.length} packages?`,\n initialValue: true,\n });\n\n if (p.isCancel(shouldProceed) || !shouldProceed) {\n p.cancel(\"Setup cancelled\");\n process.exit(0);\n }\n } else {\n console.log(chalk.dim(\"\\n--yes mode: Auto-approving all changes.\\n\"));\n }\n\n // Run all setups\n console.log(\"\");\n const setupSpinner = p.spinner();\n const stepMessages: string[] = [];\n\n const results = await runAllSetups(cwd, (step, status) => {\n if (status === \"start\") {\n setupSpinner.start(step);\n } else if (status === \"done\") {\n setupSpinner.stop(`✓ ${step}`);\n stepMessages.push(`✓ ${step}`);\n } else {\n setupSpinner.stop(`✗ ${step}`);\n stepMessages.push(`✗ ${step}`);\n }\n });\n\n // Summary\n const successCount = results.filter((r) => r.success).length;\n const failCount = results.filter((r) => !r.success).length;\n\n console.log(\"\");\n\n if (failCount === 0) {\n p.outro(\n chalk.green(\n `✓ Auto-setup complete! (${successCount} configurations applied)`,\n ),\n );\n } else {\n p.outro(\n chalk.yellow(\n `⚠ Setup completed with issues: ${successCount} succeeded, ${failCount} failed`,\n ),\n );\n }\n\n // Show next steps\n console.log(chalk.dim(\"\\nNext steps:\"));\n console.log(chalk.dim(\" 1. Review the generated configuration files\"));\n console.log(chalk.dim(\" 2. Run: pnpm verify (or npm/yarn)\"));\n console.log(chalk.dim(\" 3. Commit your changes\\n\"));\n}\n\n/**\n * Format audit report with colors for console display\n */\nfunction formatAuditReportColored(report: AuditReport): string {\n const lines: string[] = [];\n\n lines.push(chalk.bold(\"📋 Audit Report\\n\"));\n\n // Project info\n lines.push(chalk.dim(`Framework: ${report.analysis.framework}`));\n lines.push(chalk.dim(`Package Manager: ${report.analysis.packageManager}`));\n lines.push(\n chalk.dim(`TypeScript: ${report.analysis.isTypeScript ? \"Yes\" : \"No\"}`),\n );\n lines.push(\n chalk.dim(`Monorepo: ${report.analysis.isMonorepo ? \"Yes\" : \"No\"}`),\n );\n lines.push(\"\");\n\n // Plans\n for (const plan of report.plans) {\n const hasChanges = plan.changes.some((c) => c.type !== \"unchanged\");\n const icon = hasChanges ? \"🔧\" : \"✓\";\n const titleColor = hasChanges ? chalk.yellow : chalk.green;\n\n lines.push(\n titleColor(\n `${icon} ${plan.name.charAt(0).toUpperCase() + plan.name.slice(1)} - ${plan.description}`,\n ),\n );\n\n for (const change of plan.changes) {\n let symbol: string;\n let line: string;\n\n switch (change.type) {\n case \"add\":\n symbol = chalk.green(\"+\");\n line = chalk.green(change.description);\n break;\n case \"modify\":\n symbol = chalk.yellow(\"~\");\n line = chalk.yellow(change.description);\n if (\n change.key &&\n change.oldValue !== undefined &&\n change.newValue !== undefined\n ) {\n line += chalk.dim(\n ` (${String(change.oldValue)} → ${String(change.newValue)})`,\n );\n }\n break;\n case \"unchanged\":\n default:\n symbol = chalk.dim(\"=\");\n line = chalk.dim(change.description);\n }\n\n lines.push(` ${symbol} ${line}`);\n }\n\n if (plan.devDependencies.length > 0) {\n lines.push(\n chalk.blue(` 📦 Install: ${plan.devDependencies.join(\", \")}`),\n );\n }\n\n lines.push(\"\");\n }\n\n // Summary\n if (report.allDevDependencies.length > 0) {\n lines.push(chalk.bold(\"Dependencies to install (batched):\"));\n const pm = report.analysis.packageManager;\n const cmd =\n pm === \"npm\" ? \"npm install\" : pm === \"yarn\" ? \"yarn add\" : `${pm} add`;\n lines.push(\n chalk.cyan(` ${cmd} -D ${report.allDevDependencies.join(\" \")}`),\n );\n lines.push(\"\");\n }\n\n lines.push(\n chalk.bold(\n `Total: ${report.totalChanges} changes, ${report.allDevDependencies.length} packages`,\n ),\n );\n\n return lines.join(\"\\n\");\n}\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"fs\";\nimport { writeFile, mkdir, readFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport { validateScopeDefinitions, type Scope } from \"../../config/schema.js\";\n\ninterface ScopeCreateOptions {\n name?: string;\n scopes?: string;\n presetName?: string;\n outputDir?: string;\n noTest?: boolean;\n}\n\nexport async function scopeCreateCommand(options: ScopeCreateOptions) {\n console.log(chalk.bold.cyan(\"\\n🎨 Create Custom Scope Package\\n\"));\n\n const cwd = process.cwd();\n const isNonInteractive = !!(\n options.name &&\n options.scopes &&\n options.presetName\n );\n\n // Check for monorepo\n const isMonorepo = existsSync(join(cwd, \"pnpm-workspace.yaml\"));\n if (isMonorepo) {\n console.log(chalk.dim(\"✓ Detected monorepo workspace\\n\"));\n }\n\n // Get package name\n const packageNameInput = isNonInteractive\n ? options.name\n : await p.text({\n message:\n 'What is the package name? (e.g., \"fintech\", \"gaming\", \"healthcare\")',\n placeholder: \"my-custom-scope\",\n validate: (value) => {\n if (!value || value.length === 0) return \"Package name is required\";\n if (!/^[a-z0-9-]+$/.test(value))\n return \"Package name must be lowercase alphanumeric with hyphens\";\n if (value.length > 32)\n return \"Package name must be 32 characters or less\";\n return undefined;\n },\n });\n\n if (!isNonInteractive && p.isCancel(packageNameInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n const packageName = packageNameInput as string;\n\n // Get preset display name\n const presetNameInput = isNonInteractive\n ? options.presetName\n : await p.text({\n message:\n 'What is the preset display name? (e.g., \"FinTech Application\", \"Gaming Platform\")',\n placeholder: \"My Custom Preset\",\n validate: (value) => {\n if (!value || value.length === 0) return \"Preset name is required\";\n return undefined;\n },\n });\n\n if (!isNonInteractive && p.isCancel(presetNameInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n const presetName = presetNameInput as string;\n\n // Collect scopes\n const scopes: Scope[] = [];\n\n if (isNonInteractive && options.scopes) {\n // Parse scopes from command line (format: \"name:description:emoji:category,...\")\n const scopeParts = options.scopes.split(\",\");\n for (const part of scopeParts) {\n const [name, description, emoji, category] = part.split(\":\");\n scopes.push({\n name: name.trim(),\n description: description?.trim() || \"Scope description\",\n emoji: emoji?.trim(),\n category: category?.trim() as any,\n });\n }\n } else {\n console.log(\n chalk.dim(\"\\nAdd scopes to your preset (aim for 8-15 scopes):\\n\"),\n );\n\n let addMore = true;\n while (addMore) {\n const scopeName = await p.text({\n message: `Scope #${scopes.length + 1} - Name:`,\n placeholder: \"auth\",\n validate: (value) => {\n if (!value || value.length === 0) return \"Scope name is required\";\n if (!/^[a-z0-9-]+$/.test(value))\n return \"Must be lowercase alphanumeric with hyphens\";\n if (value.length > 32) return \"Must be 32 characters or less\";\n if (scopes.some((s) => s.name === value))\n return \"Scope name already exists\";\n return undefined;\n },\n });\n\n if (p.isCancel(scopeName)) {\n break;\n }\n\n const scopeDescription = await p.text({\n message: \"Description:\",\n placeholder: \"Authentication and authorization\",\n validate: (value) => {\n if (!value || value.length < 10)\n return \"Description must be at least 10 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(scopeDescription)) {\n break;\n }\n\n const scopeEmoji = await p.text({\n message: \"Emoji (optional):\",\n placeholder: \"🔐\",\n });\n\n if (p.isCancel(scopeEmoji)) {\n break;\n }\n\n const scopeCategory = await p.select({\n message: \"Category (optional):\",\n options: [\n { value: \"auth\", label: \"Authentication & Authorization\" },\n { value: \"features\", label: \"Features & Functionality\" },\n { value: \"infrastructure\", label: \"Infrastructure & DevOps\" },\n { value: \"documentation\", label: \"Documentation\" },\n { value: \"testing\", label: \"Testing & QA\" },\n { value: \"performance\", label: \"Performance & Optimization\" },\n { value: \"other\", label: \"Other\" },\n { value: \"\", label: \"None\" },\n ],\n });\n\n if (p.isCancel(scopeCategory)) {\n break;\n }\n\n scopes.push({\n name: scopeName as string,\n description: scopeDescription as string,\n emoji: scopeEmoji ? (scopeEmoji as string) : undefined,\n category: scopeCategory ? (scopeCategory as any) : undefined,\n });\n\n console.log(chalk.green(`\\n✓ Added scope: ${scopeName}\\n`));\n\n if (scopes.length >= 3) {\n addMore = (await p.confirm({\n message: `You have ${scopes.length} scopes. Add another?`,\n initialValue: scopes.length < 10,\n })) as boolean;\n\n if (p.isCancel(addMore)) {\n break;\n }\n\n if (!addMore) break;\n }\n }\n }\n\n if (scopes.length === 0) {\n p.cancel(\"No scopes defined. Operation cancelled.\");\n process.exit(1);\n }\n\n // Validate scopes\n const validation = validateScopeDefinitions(scopes);\n if (!validation.valid) {\n console.log(chalk.red(\"\\n✗ Scope validation failed:\\n\"));\n validation.errors.forEach((error) =>\n console.log(chalk.red(` • ${error}`)),\n );\n p.cancel(\"Operation cancelled\");\n process.exit(1);\n }\n\n console.log(\n chalk.green(`\\n✓ ${scopes.length} scopes validated successfully\\n`),\n );\n\n // Determine output directory\n let outputDir: string;\n if (options.outputDir) {\n outputDir = options.outputDir;\n } else if (isMonorepo) {\n outputDir = join(cwd, \"packages\", `scopes-${packageName}`);\n } else {\n const customDir = await p.text({\n message: \"Output directory:\",\n placeholder: `./scopes-${packageName}`,\n defaultValue: `./scopes-${packageName}`,\n });\n\n if (p.isCancel(customDir)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n outputDir = join(cwd, customDir as string);\n }\n\n // Check if directory exists\n if (existsSync(outputDir)) {\n const shouldOverwrite = await p.confirm({\n message: `Directory ${outputDir} already exists. Overwrite?`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n // Create package files\n const spinner = p.spinner();\n spinner.start(\"Creating package structure...\");\n\n try {\n // Create directories\n await mkdir(join(outputDir, \"src\"), { recursive: true });\n\n // Create package.json\n const packageJson = {\n name: `@workflow/scopes-${packageName}`,\n version: \"1.0.0\",\n description: `Scope preset for ${presetName}`,\n keywords: [\"workflow\", \"scopes\", packageName, \"preset\"],\n repository: {\n type: \"git\",\n url: \"git+https://github.com/your-org/your-repo.git\",\n directory: `packages/scopes-${packageName}`,\n },\n license: \"MIT\",\n author: \"Your Name\",\n type: \"module\",\n exports: {\n \".\": {\n types: \"./dist/index.d.ts\",\n import: \"./dist/index.js\",\n },\n },\n files: [\"dist\"],\n scripts: {\n build: \"tsup\",\n dev: \"tsup --watch\",\n typecheck: \"tsc --noEmit\",\n test: \"vitest run\",\n },\n peerDependencies: {\n \"@hawkinside_out/workflow-agent\": \"^1.0.0\",\n },\n devDependencies: {\n \"@hawkinside_out/workflow-agent\": \"^1.0.0\",\n tsup: \"^8.0.1\",\n typescript: \"^5.3.3\",\n vitest: \"^1.0.0\",\n },\n publishConfig: {\n access: \"public\",\n },\n };\n\n await writeFile(\n join(outputDir, \"package.json\"),\n JSON.stringify(packageJson, null, 2),\n \"utf-8\",\n );\n\n // Create tsconfig.json\n const tsconfig = {\n extends: \"../../tsconfig.json\",\n compilerOptions: {\n outDir: \"./dist\",\n rootDir: \"./src\",\n },\n include: [\"src/**/*\"],\n };\n\n await writeFile(\n join(outputDir, \"tsconfig.json\"),\n JSON.stringify(tsconfig, null, 2),\n \"utf-8\",\n );\n\n // Create tsup.config.ts\n const tsupConfig = `import { defineConfig } from 'tsup';\n\nexport default defineConfig({\n entry: ['src/index.ts'],\n format: ['esm'],\n dts: true,\n clean: true,\n sourcemap: true,\n});\n`;\n\n await writeFile(join(outputDir, \"tsup.config.ts\"), tsupConfig, \"utf-8\");\n\n // Create src/index.ts\n const indexTs = `import type { Scope } from '@hawkinside_out/workflow-agent/config';\n\nexport const scopes: Scope[] = ${JSON.stringify(scopes, null, 2)};\n\nexport const preset = {\n name: '${presetName}',\n description: 'Scope configuration for ${presetName}',\n scopes,\n version: '1.0.0',\n};\n\nexport default preset;\n`;\n\n await writeFile(join(outputDir, \"src\", \"index.ts\"), indexTs, \"utf-8\");\n\n // Create test file if not disabled\n if (!options.noTest) {\n const testFile = `import { describe, it, expect } from 'vitest';\nimport { scopes, preset } from './index.js';\nimport { ScopeSchema } from '@hawkinside_out/workflow-agent/config';\n\ndescribe('${presetName} Scope Preset', () => {\n it('should export valid scopes array', () => {\n expect(scopes).toBeDefined();\n expect(Array.isArray(scopes)).toBe(true);\n expect(scopes.length).toBeGreaterThan(0);\n });\n\n it('should have valid preset object', () => {\n expect(preset).toBeDefined();\n expect(preset.name).toBe('${presetName}');\n expect(preset.scopes).toBe(scopes);\n expect(preset.version).toBeDefined();\n });\n\n it('should have no duplicate scope names', () => {\n const names = scopes.map(s => s.name);\n const uniqueNames = new Set(names);\n expect(uniqueNames.size).toBe(names.length);\n });\n\n it('should have all scopes match schema', () => {\n scopes.forEach(scope => {\n const result = ScopeSchema.safeParse(scope);\n expect(result.success).toBe(true);\n });\n });\n\n it('should have descriptions for all scopes', () => {\n scopes.forEach(scope => {\n expect(scope.description).toBeDefined();\n expect(scope.description.length).toBeGreaterThan(0);\n });\n });\n});\n`;\n\n await writeFile(\n join(outputDir, \"src\", \"index.test.ts\"),\n testFile,\n \"utf-8\",\n );\n }\n\n spinner.stop(\"✓ Package structure created\");\n\n // Update pnpm-workspace.yaml if monorepo\n if (isMonorepo) {\n const workspaceFile = join(cwd, \"pnpm-workspace.yaml\");\n const workspaceContent = await readFile(workspaceFile, \"utf-8\");\n\n const packagePath = `packages/scopes-${packageName}`;\n if (\n !workspaceContent.includes(packagePath) &&\n !workspaceContent.includes(\"packages/*\")\n ) {\n console.log(\n chalk.yellow(\"\\n⚠️ Add the following to pnpm-workspace.yaml:\"),\n );\n console.log(chalk.dim(` - '${packagePath}'`));\n } else {\n console.log(chalk.green(\"\\n✓ Package will be included in workspace\"));\n }\n }\n\n // Success summary\n console.log(\n chalk.green.bold(\"\\n✨ Custom scope package created successfully!\\n\"),\n );\n console.log(chalk.bold(\"Package details:\"));\n console.log(chalk.dim(` Location: ${outputDir}`));\n console.log(chalk.dim(` Package: @workflow/scopes-${packageName}`));\n console.log(chalk.dim(` Scopes: ${scopes.length} defined\\n`));\n\n console.log(chalk.bold(\"Next steps:\\n\"));\n console.log(chalk.dim(` 1. cd ${outputDir}`));\n console.log(chalk.dim(` 2. pnpm install`));\n console.log(chalk.dim(` 3. pnpm build`));\n if (!options.noTest) {\n console.log(chalk.dim(` 4. pnpm test`));\n }\n console.log(\n chalk.dim(\n ` ${!options.noTest ? \"5\" : \"4\"}. Update repository URL in package.json`,\n ),\n );\n\n const shouldPublish = isNonInteractive\n ? false\n : await p.confirm({\n message: \"\\nWould you like instructions for publishing to npm?\",\n initialValue: false,\n });\n\n if (shouldPublish && !p.isCancel(shouldPublish)) {\n console.log(chalk.bold(\"\\n📦 Publishing instructions:\\n\"));\n console.log(\n chalk.dim(\" 1. npm login (or configure .npmrc with your registry)\"),\n );\n console.log(chalk.dim(\" 2. Update version in package.json as needed\"));\n console.log(chalk.dim(\" 3. pnpm publish --access public\"));\n console.log(\n chalk.dim(\n \" 4. Use in other projects: pnpm add @workflow/scopes-\" +\n packageName +\n \"\\n\",\n ),\n );\n }\n } catch (error) {\n spinner.stop(\"✗ Failed to create package\");\n console.error(chalk.red(\"\\nError:\"), error);\n process.exit(1);\n }\n}\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"fs\";\nimport { writeFile, mkdir, readFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport { loadConfig, hasConfig } from \"../../config/index.js\";\nimport {\n validateScopeDefinitions,\n type WorkflowConfig,\n} from \"../../config/schema.js\";\n\ninterface ScopeMigrateOptions {\n name?: string;\n outputDir?: string;\n keepConfig?: boolean;\n}\n\nexport async function scopeMigrateCommand(options: ScopeMigrateOptions) {\n console.log(chalk.bold.cyan(\"\\n🔄 Migrate Scopes to Custom Package\\n\"));\n\n const cwd = process.cwd();\n\n // Check for existing config\n if (!hasConfig(cwd)) {\n p.cancel(\"No workflow.config.json found in current directory\");\n process.exit(1);\n }\n\n // Load current config\n let config: WorkflowConfig | null = null;\n try {\n config = await loadConfig(cwd);\n } catch (error) {\n console.error(chalk.red(\"Failed to load config:\"), error);\n process.exit(1);\n }\n\n if (!config) {\n p.cancel(\"Failed to load configuration\");\n process.exit(1);\n }\n\n if (!config.scopes || config.scopes.length === 0) {\n p.cancel(\"No scopes found in workflow.config.json\");\n process.exit(1);\n }\n\n console.log(\n chalk.dim(`Found ${config.scopes.length} scopes in workflow.config.json\\n`),\n );\n\n // Display current scopes\n console.log(chalk.bold(\"Current scopes:\"));\n config.scopes.forEach((scope, i) => {\n console.log(\n chalk.dim(\n ` ${i + 1}. ${scope.emoji || \"•\"} ${scope.name} - ${scope.description}`,\n ),\n );\n });\n console.log();\n\n const shouldContinue = await p.confirm({\n message: \"Migrate these scopes to a custom package?\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Migration cancelled\");\n process.exit(0);\n }\n\n // Check for monorepo\n const isMonorepo = existsSync(join(cwd, \"pnpm-workspace.yaml\"));\n if (isMonorepo) {\n console.log(chalk.dim(\"\\n✓ Detected monorepo workspace\\n\"));\n }\n\n // Get package name\n const packageNameInput =\n options.name ||\n (await p.text({\n message: \"Package name for the scope preset:\",\n placeholder: config.projectName.toLowerCase().replace(/[^a-z0-9-]/g, \"-\"),\n validate: (value) => {\n if (!value || value.length === 0) return \"Package name is required\";\n if (!/^[a-z0-9-]+$/.test(value))\n return \"Package name must be lowercase alphanumeric with hyphens\";\n if (value.length > 32)\n return \"Package name must be 32 characters or less\";\n return undefined;\n },\n }));\n\n if (p.isCancel(packageNameInput)) {\n p.cancel(\"Migration cancelled\");\n process.exit(0);\n }\n\n const packageName = packageNameInput as string;\n\n // Get preset display name\n const presetNameInput = await p.text({\n message: \"Preset display name:\",\n placeholder: config.projectName,\n defaultValue: config.projectName,\n });\n\n if (p.isCancel(presetNameInput)) {\n p.cancel(\"Migration cancelled\");\n process.exit(0);\n }\n\n const presetName = presetNameInput as string;\n\n // Validate scopes\n const validation = validateScopeDefinitions(config.scopes);\n if (!validation.valid) {\n console.log(chalk.yellow(\"\\n⚠️ Scope validation warnings:\\n\"));\n validation.errors.forEach((error) =>\n console.log(chalk.yellow(` • ${error}`)),\n );\n\n const shouldFix = await p.confirm({\n message: \"Some scopes have validation issues. Continue anyway?\",\n initialValue: false,\n });\n\n if (p.isCancel(shouldFix) || !shouldFix) {\n p.cancel(\"Migration cancelled. Please fix validation errors first.\");\n process.exit(1);\n }\n }\n\n // Determine output directory\n let outputDir: string;\n if (options.outputDir) {\n outputDir = options.outputDir;\n } else if (isMonorepo) {\n outputDir = join(cwd, \"packages\", `scopes-${packageName}`);\n } else {\n const customDir = await p.text({\n message: \"Output directory:\",\n placeholder: `./scopes-${packageName}`,\n defaultValue: `./scopes-${packageName}`,\n });\n\n if (p.isCancel(customDir)) {\n p.cancel(\"Migration cancelled\");\n process.exit(0);\n }\n\n outputDir = join(cwd, customDir as string);\n }\n\n // Check if directory exists\n if (existsSync(outputDir)) {\n const shouldOverwrite = await p.confirm({\n message: `Directory ${outputDir} already exists. Overwrite?`,\n initialValue: false,\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n p.cancel(\"Migration cancelled\");\n process.exit(0);\n }\n }\n\n // Create package files\n const spinner = p.spinner();\n spinner.start(\"Migrating scopes to package...\");\n\n try {\n // Create directories\n await mkdir(join(outputDir, \"src\"), { recursive: true });\n\n // Create package.json\n const packageJson = {\n name: `@workflow/scopes-${packageName}`,\n version: \"1.0.0\",\n description: `Migrated scope preset for ${presetName}`,\n keywords: [\"workflow\", \"scopes\", packageName, \"preset\", \"migrated\"],\n repository: {\n type: \"git\",\n url: \"git+https://github.com/your-org/your-repo.git\",\n directory: `packages/scopes-${packageName}`,\n },\n license: \"MIT\",\n author: \"Your Name\",\n type: \"module\",\n exports: {\n \".\": {\n types: \"./dist/index.d.ts\",\n import: \"./dist/index.js\",\n },\n },\n files: [\"dist\"],\n scripts: {\n build: \"tsup\",\n dev: \"tsup --watch\",\n typecheck: \"tsc --noEmit\",\n test: \"vitest run\",\n },\n peerDependencies: {\n \"@hawkinside_out/workflow-agent\": \"^1.0.0\",\n },\n devDependencies: {\n \"@hawkinside_out/workflow-agent\": \"^1.0.0\",\n tsup: \"^8.0.1\",\n typescript: \"^5.3.3\",\n vitest: \"^1.0.0\",\n },\n publishConfig: {\n access: \"public\",\n },\n };\n\n await writeFile(\n join(outputDir, \"package.json\"),\n JSON.stringify(packageJson, null, 2),\n \"utf-8\",\n );\n\n // Create tsconfig.json\n const tsconfig = {\n extends: \"../../tsconfig.json\",\n compilerOptions: {\n outDir: \"./dist\",\n rootDir: \"./src\",\n },\n include: [\"src/**/*\"],\n };\n\n await writeFile(\n join(outputDir, \"tsconfig.json\"),\n JSON.stringify(tsconfig, null, 2),\n \"utf-8\",\n );\n\n // Create tsup.config.ts\n const tsupConfig = `import { defineConfig } from 'tsup';\n\nexport default defineConfig({\n entry: ['src/index.ts'],\n format: ['esm'],\n dts: true,\n clean: true,\n sourcemap: true,\n});\n`;\n\n await writeFile(join(outputDir, \"tsup.config.ts\"), tsupConfig, \"utf-8\");\n\n // Create src/index.ts with migrated scopes\n const indexTs = `import type { Scope } from '@hawkinside_out/workflow-agent/config';\n\nexport const scopes: Scope[] = ${JSON.stringify(config.scopes, null, 2)};\n\nexport const preset = {\n name: '${presetName}',\n description: 'Migrated scope configuration for ${presetName}',\n scopes,\n version: '1.0.0',\n};\n\nexport default preset;\n`;\n\n await writeFile(join(outputDir, \"src\", \"index.ts\"), indexTs, \"utf-8\");\n\n // Create test file\n const testFile = `import { describe, it, expect } from 'vitest';\nimport { scopes, preset } from './index.js';\nimport { ScopeSchema } from '@hawkinside_out/workflow-agent/config';\n\ndescribe('${presetName} Scope Preset (Migrated)', () => {\n it('should export valid scopes array', () => {\n expect(scopes).toBeDefined();\n expect(Array.isArray(scopes)).toBe(true);\n expect(scopes.length).toBe(${config.scopes.length});\n });\n\n it('should have valid preset object', () => {\n expect(preset).toBeDefined();\n expect(preset.name).toBe('${presetName}');\n expect(preset.scopes).toBe(scopes);\n expect(preset.version).toBeDefined();\n });\n\n it('should have no duplicate scope names', () => {\n const names = scopes.map(s => s.name);\n const uniqueNames = new Set(names);\n expect(uniqueNames.size).toBe(names.length);\n });\n\n it('should have all scopes match schema', () => {\n scopes.forEach(scope => {\n const result = ScopeSchema.safeParse(scope);\n if (!result.success) {\n console.error(\\`Scope \"\\${scope.name}\" failed validation:\\`, result.error);\n }\n expect(result.success).toBe(true);\n });\n });\n\n it('should have descriptions for all scopes', () => {\n scopes.forEach(scope => {\n expect(scope.description).toBeDefined();\n expect(scope.description.length).toBeGreaterThan(0);\n });\n });\n});\n`;\n\n await writeFile(join(outputDir, \"src\", \"index.test.ts\"), testFile, \"utf-8\");\n\n spinner.stop(\"✓ Package created from migrated scopes\");\n\n // Update pnpm-workspace.yaml if monorepo\n if (isMonorepo) {\n const workspaceFile = join(cwd, \"pnpm-workspace.yaml\");\n const workspaceContent = await readFile(workspaceFile, \"utf-8\");\n\n const packagePath = `packages/scopes-${packageName}`;\n if (\n !workspaceContent.includes(packagePath) &&\n !workspaceContent.includes(\"packages/*\")\n ) {\n console.log(\n chalk.yellow(\"\\n⚠️ Add the following to pnpm-workspace.yaml:\"),\n );\n console.log(chalk.dim(` - '${packagePath}'`));\n } else {\n console.log(chalk.green(\"\\n✓ Package will be included in workspace\"));\n }\n }\n\n // Ask about updating config\n const keepConfig =\n options.keepConfig ??\n (await p.confirm({\n message: \"Remove migrated scopes from workflow.config.json?\",\n initialValue: false,\n }));\n\n if (!p.isCancel(keepConfig) && !keepConfig) {\n const configPath = join(cwd, \"workflow.config.json\");\n const updatedConfig = {\n ...config,\n scopes: [], // Clear inline scopes\n preset: `scopes-${packageName}`, // Reference the new package\n };\n\n await writeFile(\n configPath,\n JSON.stringify(updatedConfig, null, 2),\n \"utf-8\",\n );\n console.log(chalk.green(\"✓ Updated workflow.config.json\"));\n console.log(chalk.dim(\" • Cleared inline scopes\"));\n console.log(\n chalk.dim(` • Added preset reference: scopes-${packageName}\\n`),\n );\n }\n\n // Success summary\n console.log(chalk.green.bold(\"\\n✨ Migration completed successfully!\\n\"));\n console.log(chalk.bold(\"Package details:\"));\n console.log(chalk.dim(` Location: ${outputDir}`));\n console.log(chalk.dim(` Package: @workflow/scopes-${packageName}`));\n console.log(chalk.dim(` Scopes: ${config.scopes.length} migrated\\n`));\n\n console.log(chalk.bold(\"Next steps:\\n\"));\n console.log(chalk.dim(` 1. cd ${outputDir}`));\n console.log(chalk.dim(` 2. pnpm install`));\n console.log(chalk.dim(` 3. pnpm build`));\n console.log(chalk.dim(` 4. pnpm test`));\n console.log(chalk.dim(` 5. Update repository URL in package.json\\n`));\n\n if (!keepConfig) {\n console.log(chalk.bold(\"To use the migrated scopes:\\n\"));\n console.log(\n chalk.dim(\n ` 1. Install the package: pnpm add -w @workflow/scopes-${packageName}`,\n ),\n );\n console.log(\n chalk.dim(\n ` 2. The preset is already referenced in workflow.config.json\\n`,\n ),\n );\n }\n\n console.log(\n chalk.dim(\n \"💡 Tip: You can now reuse this scope package across multiple projects!\\n\",\n ),\n );\n } catch (error) {\n spinner.stop(\"✗ Migration failed\");\n console.error(chalk.red(\"\\nError:\"), error);\n process.exit(1);\n }\n}\n","/**\n * Pre-commit CLI command\n *\n * Alias for `verify --fix --staged` - designed for git pre-commit hooks.\n * Runs all quality checks with auto-fix on staged files only.\n */\n\nimport chalk from \"chalk\";\nimport { verifyCommand } from \"./verify.js\";\n\ninterface PreCommitOptions {\n stagedOnly?: boolean;\n dryRun?: boolean;\n maxRetries?: string;\n}\n\n/**\n * Pre-commit command - streamlined quality check for git hooks\n *\n * This is a convenience wrapper around verify that:\n * - Enables auto-fix by default\n * - Focuses on staged changes\n * - Optimized for speed in pre-commit context\n */\nexport async function preCommitCommand(options: PreCommitOptions): Promise<void> {\n const stagedOnly = options.stagedOnly ?? true;\n const dryRun = options.dryRun ?? false;\n const maxRetries = options.maxRetries ?? \"5\"; // Lower default for pre-commit speed\n\n console.log(chalk.bold.cyan(\"\\n🔒 Pre-Commit Quality Check\\n\"));\n\n if (dryRun) {\n console.log(chalk.yellow(\"📋 DRY-RUN MODE: No changes will be applied\\n\"));\n }\n\n if (stagedOnly) {\n console.log(chalk.dim(\" Checking staged files only...\\n\"));\n }\n\n // Delegate to verify with pre-commit-friendly defaults\n await verifyCommand({\n fix: true,\n maxRetries,\n commit: false, // Never auto-commit in pre-commit\n dryRun,\n learn: false, // Skip learning in pre-commit for speed\n });\n}\n","/**\n * Docs Command Group\n *\n * Consolidates documentation-related commands under `workflow docs <subcommand>`:\n * - validate: Validate document references in markdown files\n * - generate: Generate .github/copilot-instructions.md from guidelines\n * - update: Update guideline templates from the latest package version\n * - advisory: Generate advisory board analysis and documentation\n */\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { docsValidateCommand } from \"./validate.js\";\nimport { docsGenerateCommand } from \"./generate.js\";\nimport { docsUpdateCommand } from \"./update.js\";\nimport { advisoryCommand } from \"../advisory.js\";\n\n/**\n * Create the docs command group with all subcommands\n */\nexport function createDocsCommand(): Command {\n const docsCmd = new Command(\"docs\")\n .description(\"Manage documentation and guidelines\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow docs validate ${chalk.dim(\"# Check for broken references\")}\n $ workflow docs validate --fix ${chalk.dim(\"# Interactive fix mode\")}\n $ workflow docs generate ${chalk.dim(\"# Generate copilot-instructions.md\")}\n $ workflow docs generate --force ${chalk.dim(\"# Regenerate without confirmation\")}\n $ workflow docs update ${chalk.dim(\"# Update guideline templates\")}\n $ workflow docs update --force ${chalk.dim(\"# Overwrite existing templates\")}\n $ workflow docs advisory ${chalk.dim(\"# Generate advisory analysis\")}\n $ workflow docs advisory --depth quick ${chalk.dim(\"# Quick analysis scan\")}\n`,\n )\n .action(() => {\n // Show help if no subcommand provided\n docsCmd.help();\n });\n\n // validate subcommand\n docsCmd\n .command(\"validate\")\n .description(\"Validate document references in markdown files\")\n .option(\"--fix\", \"Interactively fix broken references\")\n .option(\n \"--patterns <patterns>\",\n \"Glob patterns to scan (comma-separated, default: **/*.md)\",\n )\n .option(\"--ignore <patterns>\", \"Glob patterns to ignore (comma-separated)\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow docs validate ${chalk.dim(\"# Scan all markdown files\")}\n $ workflow docs validate --fix ${chalk.dim(\"# Interactive fix mode\")}\n $ workflow docs validate --patterns \"docs/**\" ${chalk.dim(\"# Only scan docs folder\")}\n $ workflow docs validate --ignore \"node_modules\" ${chalk.dim(\"# Ignore patterns\")}\n`,\n )\n .action((options) => {\n const patterns = options.patterns\n ? options.patterns.split(\",\").map((p: string) => p.trim())\n : undefined;\n const ignore = options.ignore\n ? options.ignore.split(\",\").map((p: string) => p.trim())\n : undefined;\n\n return docsValidateCommand({\n fix: options.fix,\n patterns,\n ignore,\n });\n });\n\n // generate subcommand\n docsCmd\n .command(\"generate\")\n .description(\"Generate .github/copilot-instructions.md from guidelines\")\n .option(\"--force\", \"Regenerate without confirmation\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow docs generate ${chalk.dim(\"# Generate with confirmation if exists\")}\n $ workflow docs generate --force ${chalk.dim(\"# Force regeneration\")}\n`,\n )\n .action(docsGenerateCommand);\n\n // update subcommand\n docsCmd\n .command(\"update\")\n .description(\"Update guideline templates from the latest package version\")\n .option(\"--force\", \"Overwrite existing template files\")\n .option(\"--skip\", \"Skip the update (useful in CI)\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow docs update ${chalk.dim(\"# Update templates (skip existing)\")}\n $ workflow docs update --force ${chalk.dim(\"# Overwrite all templates\")}\n $ workflow docs update --skip ${chalk.dim(\"# Skip update in CI\")}\n`,\n )\n .action(docsUpdateCommand);\n\n // advisory subcommand\n docsCmd\n .command(\"advisory\")\n .description(\"Generate advisory board analysis and documentation\")\n .option(\n \"--depth <level>\",\n \"Analysis depth: executive, quick, standard, comprehensive\",\n )\n .option(\"--output <path>\", \"Output directory (default: docs/advisory)\")\n .option(\"--interactive\", \"Enable interactive mode\")\n .option(\"--dry-run\", \"Preview analysis without writing files\")\n .option(\"--format <type>\", \"Output format: markdown, json (default: markdown)\")\n .option(\"--timestamp\", \"Append timestamp to filenames\")\n .option(\"--include-health\", \"Include code health metrics from verify/doctor\")\n .option(\"--ci\", \"CI mode with exit codes on high-risk findings\")\n .option(\"--compare <path>\", \"Compare with previous report\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow docs advisory ${chalk.dim(\"# Interactive mode\")}\n $ workflow docs advisory --depth quick ${chalk.dim(\"# Quick scan\")}\n $ workflow docs advisory --depth executive ${chalk.dim(\"# Executive summary\")}\n $ workflow docs advisory --include-health ${chalk.dim(\"# Include health metrics\")}\n $ workflow docs advisory --compare docs/advisory/ ${chalk.dim(\"# Compare with previous\")}\n $ workflow docs advisory --ci ${chalk.dim(\"# CI mode with exit codes\")}\n`,\n )\n .action(advisoryCommand);\n\n return docsCmd;\n}\n\n// Re-export individual commands for backward compatibility\nexport { docsValidateCommand } from \"./validate.js\";\nexport { docsGenerateCommand } from \"./generate.js\";\nexport { docsUpdateCommand } from \"./update.js\";\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { relative } from \"path\";\nimport {\n validateDocumentReferences,\n applyReferenceFix,\n} from \"../../validators/document-references.js\";\n\nexport async function docsValidateCommand(options: {\n fix?: boolean;\n patterns?: string[];\n ignore?: string[];\n}): Promise<void> {\n const { fix = false, patterns, ignore } = options;\n\n p.intro(chalk.bgBlue(\" workflow-agent docs:validate \"));\n\n const cwd = process.cwd();\n\n // Show scanning status\n const spinner = p.spinner();\n spinner.start(\"Scanning markdown files for broken references...\");\n\n try {\n // Run validation\n const result = await validateDocumentReferences(cwd, {\n patterns,\n ignore,\n });\n\n spinner.stop(\"Scan complete\");\n\n // Display results\n console.log(\"\");\n console.log(\n chalk.cyan(\n `📄 Scanned ${result.scannedFiles} file(s), found ${result.totalReferences} reference(s)`,\n ),\n );\n\n if (result.errors.length > 0) {\n console.log(\"\");\n console.log(chalk.red(\"❌ Errors during validation:\"));\n for (const error of result.errors) {\n console.log(chalk.red(` ${error}`));\n }\n p.outro(chalk.red(\"Validation failed\"));\n process.exit(1);\n }\n\n if (result.valid) {\n console.log(\"\");\n console.log(chalk.green(\"✅ All document references are valid!\"));\n p.outro(chalk.green(\"No broken links found\"));\n return;\n }\n\n // Display broken references\n console.log(\"\");\n console.log(\n chalk.yellow(\n `⚠️ Found ${result.brokenReferences.length} broken reference(s):`,\n ),\n );\n console.log(\"\");\n\n for (const broken of result.brokenReferences) {\n const relativePath = relative(cwd, broken.file);\n console.log(\n chalk.red(\n ` ${relativePath}:${broken.line}:${broken.column} - ${broken.type}`,\n ),\n );\n console.log(chalk.dim(` ${broken.rawLink}`));\n console.log(chalk.dim(` Target: ${broken.targetPath}`));\n if (broken.suggestions.length > 0) {\n console.log(chalk.dim(` Suggestions: ${broken.suggestions.slice(0, 3).join(\", \")}`));\n }\n console.log(\"\");\n }\n\n // If not in fix mode, exit with error\n if (!fix) {\n console.log(\n chalk.yellow(\"💡 Run with --fix flag to interactively fix broken references\"),\n );\n p.outro(chalk.red(\"Validation failed\"));\n process.exit(1);\n }\n\n // Interactive fix mode\n console.log(chalk.cyan(\"🔧 Interactive fix mode\\n\"));\n\n let fixedCount = 0;\n let skippedCount = 0;\n\n for (const broken of result.brokenReferences) {\n const relativePath = relative(cwd, broken.file);\n console.log(chalk.bold(`\\n${relativePath}:${broken.line}`));\n console.log(chalk.dim(` ${broken.rawLink}`));\n console.log(chalk.yellow(` ❌ Broken: ${broken.targetPath}\\n`));\n\n // Build options for the select prompt\n const options: Array<{ value: string; label: string }> = [];\n\n // Add suggestions\n if (broken.suggestions.length > 0) {\n options.push(\n ...broken.suggestions.slice(0, 8).map((suggestion) => ({\n value: suggestion,\n label: `📄 ${suggestion}`,\n })),\n );\n }\n\n // Add custom path option\n options.push({\n value: \"__custom__\",\n label: \"✏️ Enter custom path\",\n });\n\n // Add skip option\n options.push({\n value: \"__skip__\",\n label: \"⏭️ Skip this reference\",\n });\n\n const choice = await p.select({\n message: \"Choose correct path:\",\n options,\n });\n\n if (p.isCancel(choice)) {\n console.log(\"\");\n p.cancel(\"Fix operation cancelled\");\n console.log(\n chalk.dim(`\\nFixed: ${fixedCount}, Skipped: ${skippedCount}`),\n );\n process.exit(0);\n }\n\n if (choice === \"__skip__\") {\n skippedCount++;\n continue;\n }\n\n let newPath: string;\n\n if (choice === \"__custom__\") {\n const customPath = await p.text({\n message: \"Enter the correct path:\",\n placeholder: broken.targetPath,\n validate: (value) => {\n if (!value || value.trim().length === 0) {\n return \"Path cannot be empty\";\n }\n return undefined;\n },\n });\n\n if (p.isCancel(customPath)) {\n console.log(\"\");\n p.cancel(\"Fix operation cancelled\");\n console.log(\n chalk.dim(`\\nFixed: ${fixedCount}, Skipped: ${skippedCount}`),\n );\n process.exit(0);\n }\n\n newPath = customPath as string;\n } else {\n newPath = choice as string;\n }\n\n // Apply the fix\n try {\n await applyReferenceFix(broken.file, broken.rawLink, newPath);\n console.log(chalk.green(` ✅ Fixed: ${broken.targetPath} → ${newPath}`));\n fixedCount++;\n } catch (error) {\n console.log(\n chalk.red(\n ` ❌ Failed to fix: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n ),\n );\n skippedCount++;\n }\n }\n\n console.log(\"\");\n console.log(chalk.cyan(`📊 Summary:`));\n console.log(chalk.green(` Fixed: ${fixedCount}`));\n if (skippedCount > 0) {\n console.log(chalk.yellow(` Skipped: ${skippedCount}`));\n }\n\n if (fixedCount > 0) {\n p.outro(chalk.green(\"Document references fixed!\"));\n } else {\n p.outro(chalk.yellow(\"No references were fixed\"));\n }\n } catch (error) {\n spinner.stop(\"Scan failed\");\n console.log(\"\");\n p.cancel(\n `Validation error: ${error instanceof Error ? error.message : \"Unknown error\"}`,\n );\n process.exit(1);\n }\n}\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"fs\";\nimport { join } from \"path\";\nimport { generateCopilotInstructions } from \"../../../scripts/copilot-instructions-generator.js\";\n\nexport interface DocsGenerateOptions {\n force?: boolean;\n}\n\nexport async function docsGenerateCommand(options: DocsGenerateOptions): Promise<void> {\n p.intro(chalk.bgBlue(\" workflow docs generate \"));\n\n const cwd = process.cwd();\n const guidelinesDir = join(cwd, \"guidelines\");\n const outputPath = join(cwd, \".github\", \"copilot-instructions.md\");\n\n // Check if guidelines directory exists\n if (!existsSync(guidelinesDir)) {\n p.cancel(\n \"No guidelines directory found. Run 'workflow init' first to generate guidelines.\",\n );\n process.exit(1);\n }\n\n // Check if file already exists and not forcing\n if (existsSync(outputPath) && !options.force) {\n const shouldRegenerate = await p.confirm({\n message:\n \".github/copilot-instructions.md already exists. Regenerate? (Custom content will be preserved)\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldRegenerate) || !shouldRegenerate) {\n p.cancel(\"Generation cancelled\");\n process.exit(0);\n }\n }\n\n const spinner = p.spinner();\n spinner.start(\"Generating AI agent instructions from guidelines...\");\n\n try {\n const result = generateCopilotInstructions(cwd, {\n force: true,\n silent: false,\n });\n\n if (result.success) {\n const status = result.isNew ? \"Generated\" : \"Regenerated\";\n spinner.stop(\n chalk.green(\n `✓ ${status} .github/copilot-instructions.md from ${result.guidelinesCount} guidelines`,\n ),\n );\n\n if (result.preservedCustomContent) {\n console.log(chalk.dim(\" Custom content between markers was preserved.\"));\n }\n\n console.log(chalk.dim(`\\n Output: ${result.filePath}`));\n console.log(\n chalk.dim(\n \"\\n 💡 Tip: Add project-specific instructions between the CUSTOM markers.\",\n ),\n );\n } else {\n spinner.stop(chalk.red(\"✗ Failed to generate instructions\"));\n console.log(chalk.yellow(`\\nReason: ${result.error}`));\n }\n } catch (error) {\n spinner.stop(chalk.red(\"✗ Error generating instructions\"));\n console.log(\n chalk.yellow(\n `\\nReason: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n process.exit(1);\n }\n\n p.outro(chalk.green(\"✓ AI agent instructions ready!\"));\n console.log(chalk.dim(\"\\nThe .github/copilot-instructions.md file:\"));\n console.log(chalk.dim(\" - Is read by GitHub Copilot and other AI agents\"));\n console.log(chalk.dim(\" - Summarizes all guidelines with links to full docs\"));\n console.log(chalk.dim(\" - Includes your project scopes and conventions\"));\n console.log(chalk.dim(\" - Preserves custom instructions you add between markers\\n\"));\n}\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"fs\";\nimport { join, dirname } from \"path\";\nimport { fileURLToPath } from \"url\";\nimport {\n updateTemplates,\n findTemplatesDirectory,\n type InstallTemplatesResult,\n} from \"../../../scripts/template-installer.js\";\nimport { generateCopilotInstructions } from \"../../../scripts/copilot-instructions-generator.js\";\nimport { getMandatoryTemplateFilenames } from \"../../../templates/metadata.js\";\nimport { templateMetadata } from \"../../../templates/metadata.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nexport interface DocsUpdateOptions {\n force?: boolean;\n skip?: boolean;\n}\n\nexport async function docsUpdateCommand(options: DocsUpdateOptions): Promise<void> {\n const { force = false, skip = false } = options;\n\n p.intro(chalk.bgBlue(\" workflow docs update \"));\n\n const cwd = process.cwd();\n const guidelinesDir = join(cwd, \"guidelines\");\n\n // Find templates directory\n const templatesDir = findTemplatesDirectory(__dirname);\n\n if (!templatesDir) {\n p.cancel(\"Could not find templates directory\");\n process.exit(1);\n }\n\n // Check if guidelines directory exists\n const guidelinesExist = existsSync(guidelinesDir);\n\n if (!guidelinesExist) {\n console.log(chalk.yellow(\"\\n⚠️ No guidelines directory found.\"));\n console.log(chalk.dim(\"Run 'workflow init' to set up guidelines.\\n\"));\n p.outro(chalk.yellow(\"No templates to update\"));\n return;\n }\n\n // Show what will be updated\n const mandatoryFiles = getMandatoryTemplateFilenames();\n const allTemplates = Object.keys(templateMetadata).filter(\n (f) => f !== \"_TEMPLATE_EXAMPLE.md\",\n );\n\n console.log(chalk.cyan(\"\\n📋 Available templates:\\n\"));\n\n console.log(chalk.bold(\" Mandatory templates:\"));\n for (const file of mandatoryFiles) {\n const meta = templateMetadata[file];\n console.log(chalk.dim(` - ${file}`));\n if (meta?.description) {\n console.log(chalk.dim(` ${meta.description}`));\n }\n }\n\n const optionalFiles = allTemplates.filter(\n (f) => !mandatoryFiles.includes(f),\n );\n if (optionalFiles.length > 0) {\n console.log(chalk.bold(\"\\n Optional templates:\"));\n for (const file of optionalFiles) {\n const meta = templateMetadata[file];\n console.log(chalk.dim(` - ${file}`));\n if (meta?.description) {\n console.log(chalk.dim(` ${meta.description}`));\n }\n }\n }\n\n console.log(\"\");\n\n // Handle skip option\n if (skip) {\n p.outro(chalk.yellow(\"Skipped template update (--skip flag)\"));\n return;\n }\n\n // If not forcing, ask for confirmation\n if (!force) {\n const shouldContinue = await p.confirm({\n message: force\n ? \"Force update all templates? (existing files will be overwritten)\"\n : \"Update templates? (existing files will be skipped unless --force is used)\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel(\"Template update cancelled\");\n process.exit(0);\n }\n }\n\n // Perform the update\n const spinner = p.spinner();\n spinner.start(\"Updating templates...\");\n\n let result: InstallTemplatesResult;\n\n try {\n result = updateTemplates(cwd, templatesDir, {\n force,\n silent: true,\n });\n } catch (error) {\n spinner.stop(\"❌ Failed to update templates\");\n console.log(\n chalk.red(\n `\\nError: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n process.exit(1);\n }\n\n // Report results\n const totalChanges = result.installed.length + result.updated.length;\n\n if (totalChanges === 0 && result.skipped.length > 0) {\n spinner.stop(\"No changes needed\");\n console.log(\n chalk.dim(\n `\\n ${result.skipped.length} files already up to date (use --force to overwrite)`,\n ),\n );\n } else {\n spinner.stop(`✓ Template update complete`);\n\n if (result.installed.length > 0) {\n console.log(chalk.green(`\\n New templates installed:`));\n for (const file of result.installed) {\n console.log(chalk.dim(` + ${file}`));\n }\n }\n\n if (result.updated.length > 0) {\n console.log(chalk.yellow(`\\n Templates updated:`));\n for (const file of result.updated) {\n console.log(chalk.dim(` ~ ${file}`));\n }\n }\n\n if (result.skipped.length > 0) {\n console.log(chalk.dim(`\\n Skipped (already exists):`));\n for (const file of result.skipped) {\n console.log(chalk.dim(` - ${file}`));\n }\n }\n }\n\n if (result.errors.length > 0) {\n console.log(chalk.red(`\\n Errors:`));\n for (const error of result.errors) {\n console.log(chalk.red(` ! ${error}`));\n }\n }\n\n // Regenerate copilot instructions if templates were changed\n if (totalChanges > 0) {\n console.log(\"\");\n const instructionsResult = generateCopilotInstructions(cwd, {\n silent: true,\n });\n if (instructionsResult.success) {\n console.log(\n chalk.green(\n `✓ Regenerated .github/copilot-instructions.md from ${instructionsResult.guidelinesCount} guidelines`,\n ),\n );\n }\n }\n\n p.outro(chalk.green(\"Done!\"));\n}\n","/**\n * Advisory Command\n *\n * Generates comprehensive advisory board analysis and documentation.\n *\n * Usage:\n * workflow-agent advisory # Interactive mode\n * workflow-agent advisory --depth quick # Quick analysis\n * workflow-agent advisory --depth executive # Executive summary only\n * workflow-agent advisory --include-health # Include code health metrics\n * workflow-agent advisory --compare docs/advisory/ # Compare with previous\n * workflow-agent advisory --ci # CI mode with exit codes\n * workflow-agent advisory --dry-run # Preview only\n */\n\nimport * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { existsSync } from \"fs\";\nimport { readFile, writeFile, mkdir } from \"fs/promises\";\nimport { join } from \"path\";\nimport { AdvisoryAnalyzer } from \"../../utils/advisory-analyzer.js\";\nimport { QuestionGenerator } from \"../../utils/question-generator.js\";\nimport { ReportComparator } from \"../../utils/report-comparator.js\";\nimport { loadConfig } from \"../../config/index.js\";\nimport type { AdvisoryDepth } from \"../../config/schema.js\";\n\nexport interface AdvisoryOptions {\n depth?: AdvisoryDepth;\n output?: string;\n interactive?: boolean;\n dryRun?: boolean;\n format?: \"markdown\" | \"json\";\n timestamp?: boolean;\n includeHealth?: boolean;\n ci?: boolean;\n compare?: string;\n}\n\nexport async function advisoryCommand(options: AdvisoryOptions) {\n console.log(chalk.bold.cyan(\"\\n🎯 Advisory Board Analysis\\n\"));\n\n const cwd = process.cwd();\n\n // Load config\n let config;\n try {\n config = await loadConfig(cwd);\n } catch (error) {\n // Config is optional for advisory\n config = undefined;\n }\n\n const advisoryConfig = config?.advisory;\n\n // Interactive mode: gather missing options\n const isInteractive = options.interactive || (!options.depth && !options.ci);\n\n let depth: AdvisoryDepth =\n options.depth || advisoryConfig?.defaultDepth || \"standard\";\n let outputDir =\n options.output || advisoryConfig?.outputDir || \"docs/advisory\";\n let includeHealth =\n options.includeHealth ?? advisoryConfig?.includeHealthMetrics ?? false;\n\n if (isInteractive && !options.depth) {\n const depthChoice = await p.select({\n message: \"Select analysis depth:\",\n options: [\n {\n value: \"executive\",\n label:\n \"📊 Executive - Business summary for non-technical stakeholders\",\n hint: \"High-level overview only\",\n },\n {\n value: \"quick\",\n label: \"⚡ Quick - Package scan and framework detection\",\n hint: \"~30 seconds\",\n },\n {\n value: \"standard\",\n label: \"🔍 Standard - Includes architecture analysis\",\n hint: \"~1-2 minutes (recommended)\",\n },\n {\n value: \"comprehensive\",\n label: \"🔬 Comprehensive - Full code-level pattern detection\",\n hint: \"~3-5 minutes\",\n },\n ],\n initialValue: \"standard\",\n });\n\n if (p.isCancel(depthChoice)) {\n p.cancel(\"Analysis cancelled\");\n process.exit(0);\n }\n\n depth = depthChoice as AdvisoryDepth;\n }\n\n if (isInteractive && !options.output) {\n const outputChoice = await p.text({\n message: \"Output directory:\",\n placeholder: \"docs/advisory\",\n defaultValue: outputDir,\n });\n\n if (p.isCancel(outputChoice)) {\n p.cancel(\"Analysis cancelled\");\n process.exit(0);\n }\n\n outputDir = outputChoice as string;\n }\n\n if (isInteractive && !options.includeHealth) {\n const healthChoice = await p.confirm({\n message: \"Include code health metrics?\",\n initialValue: includeHealth,\n });\n\n if (p.isCancel(healthChoice)) {\n p.cancel(\"Analysis cancelled\");\n process.exit(0);\n }\n\n includeHealth = healthChoice;\n }\n\n // Create analyzer\n const analyzer = new AdvisoryAnalyzer({\n depth,\n cwd,\n config,\n includeHealth,\n excludePatterns: advisoryConfig?.excludePatterns,\n });\n\n // Run analysis\n const spinner = p.spinner();\n const depthLabels = {\n executive: \"executive summary\",\n quick: \"quick scan\",\n standard: \"standard analysis\",\n comprehensive: \"comprehensive analysis\",\n };\n\n spinner.start(`Running ${depthLabels[depth]}...`);\n\n let analysis;\n try {\n analysis = await analyzer.analyze();\n spinner.stop(`✓ Analysis complete`);\n } catch (error) {\n spinner.stop(\"✗ Analysis failed\");\n console.error(\n chalk.red(\n `Error: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n process.exit(1);\n }\n\n // Generate questions\n const questionGenerator = new QuestionGenerator(analysis, advisoryConfig);\n const questions = questionGenerator.generate();\n\n // Display summary\n console.log(\"\");\n displaySummary(analysis, questions);\n\n // Handle comparison mode\n let comparisonReport;\n let comparator;\n if (options.compare) {\n // If the path ends with .json, use it directly; otherwise append analysis.json\n const comparisonPath = options.compare.endsWith(\".json\")\n ? join(cwd, options.compare)\n : join(cwd, options.compare, \"analysis.json\");\n if (existsSync(comparisonPath)) {\n spinner.start(\"Comparing with previous report...\");\n try {\n const previousContent = await readFile(comparisonPath, \"utf-8\");\n const previousAnalysis = JSON.parse(previousContent);\n\n comparator = new ReportComparator(previousAnalysis, analysis);\n comparisonReport = comparator.compare();\n\n spinner.stop(\"✓ Comparison complete\");\n console.log(\"\");\n displayComparisonSummary(comparisonReport);\n } catch (error) {\n spinner.stop(\"⚠ Comparison failed\");\n console.warn(chalk.yellow(`Could not compare reports: ${error}`));\n }\n } else {\n console.warn(\n chalk.yellow(\n `\\n⚠ No previous report found at ${comparisonPath}. Skipping comparison.\\n`,\n ),\n );\n }\n }\n\n // Check if dry-run\n if (options.dryRun) {\n console.log(chalk.dim(\"\\n--dry-run mode: No files written.\\n\"));\n return;\n }\n\n // Create output directory\n const fullOutputDir = join(cwd, outputDir);\n await mkdir(fullOutputDir, { recursive: true });\n\n // Write reports\n spinner.start(\"Generating reports...\");\n\n try {\n const timestamp = options.timestamp\n ? new Date().toISOString().split(\"T\")[0]\n : \"\";\n\n if (options.format === \"json\") {\n // JSON format\n await writeAnalysisJson(fullOutputDir, analysis, questions, timestamp);\n } else {\n // Markdown format (default)\n await writeMarkdownReports(\n fullOutputDir,\n analysis,\n questions,\n comparator,\n timestamp,\n );\n }\n\n spinner.stop(\"✓ Reports generated\");\n } catch (error) {\n spinner.stop(\"✗ Failed to write reports\");\n console.error(chalk.red(`Error: ${error}`));\n process.exit(1);\n }\n\n // Display file locations\n console.log(\"\");\n console.log(chalk.green(\"📝 Reports written to:\"));\n const suffix = options.timestamp\n ? `-${new Date().toISOString().split(\"T\")[0]}`\n : \"\";\n\n if (options.format === \"json\") {\n console.log(chalk.dim(` ${join(outputDir, `analysis${suffix}.json`)}`));\n console.log(chalk.dim(` ${join(outputDir, `questions${suffix}.json`)}`));\n } else {\n console.log(\n chalk.dim(` ${join(outputDir, `EXECUTIVE_SUMMARY${suffix}.md`)}`),\n );\n console.log(\n chalk.dim(` ${join(outputDir, `TECHNOLOGY_AUDIT${suffix}.md`)}`),\n );\n console.log(\n chalk.dim(` ${join(outputDir, `STRATEGIC_ROADMAP${suffix}.md`)}`),\n );\n console.log(\n chalk.dim(` ${join(outputDir, `BOARD_QUESTIONS${suffix}.md`)}`),\n );\n\n if (comparisonReport) {\n console.log(\n chalk.dim(` ${join(outputDir, `DIFF_REPORT${suffix}.md`)}`),\n );\n }\n }\n\n // CI mode: check thresholds and exit with code\n if (options.ci) {\n console.log(\"\");\n const exitCode = checkCIThresholds(analysis, advisoryConfig);\n\n if (exitCode !== 0) {\n console.log(chalk.red(`\\n❌ CI check failed (exit code ${exitCode})\\n`));\n process.exit(exitCode);\n } else {\n console.log(chalk.green(\"\\n✓ CI check passed\\n\"));\n }\n }\n\n p.outro(chalk.green(\"✓ Advisory analysis complete!\"));\n}\n\n/**\n * Display analysis summary\n */\nfunction displaySummary(analysis: any, questions: any) {\n console.log(chalk.bold(\"📊 Analysis Summary\\n\"));\n\n console.log(\n chalk.dim(`Project: ${analysis.project.name} v${analysis.project.version}`),\n );\n console.log(\n chalk.dim(\n `Framework: ${analysis.technology.framework || \"N/A\"} (${analysis.technology.language})`,\n ),\n );\n console.log(chalk.dim(`Total Packages: ${analysis.packages.total}`));\n console.log(chalk.dim(`Files Analyzed: ${analysis.project.fileCount}`));\n console.log(\"\");\n\n // Risk score\n const riskScore = (analysis.risks.overall * 100).toFixed(0);\n const riskColor =\n analysis.risks.overall > 0.7\n ? chalk.red\n : analysis.risks.overall > 0.4\n ? chalk.yellow\n : chalk.green;\n console.log(riskColor(`⚠️ Risk Score: ${riskScore}%`));\n\n // Opportunity score\n const oppScore = (analysis.opportunities.overall * 100).toFixed(0);\n const oppColor =\n analysis.opportunities.overall > 0.7\n ? chalk.green\n : analysis.opportunities.overall > 0.5\n ? chalk.yellow\n : chalk.dim;\n console.log(oppColor(`🌟 Opportunity Score: ${oppScore}%`));\n\n console.log(\"\");\n\n // Questions summary\n console.log(chalk.bold(\"❓ Advisory Questions\\n\"));\n console.log(\n chalk.dim(`Total Questions: ${questions.summary.totalQuestions}`),\n );\n console.log(chalk.red(` High Priority: ${questions.summary.highPriority}`));\n console.log(\n chalk.yellow(` Medium Priority: ${questions.summary.mediumPriority}`),\n );\n console.log(chalk.dim(` Low Priority: ${questions.summary.lowPriority}`));\n console.log(\"\");\n\n // Top 3 high-priority questions\n const highPriorityQuestions = questions.questions.filter(\n (q: any) => q.priority === \"high\",\n );\n\n if (highPriorityQuestions.length > 0) {\n console.log(chalk.bold.yellow(\"🔥 Top Priority Questions:\\n\"));\n highPriorityQuestions.slice(0, 3).forEach((q: any, i: number) => {\n console.log(chalk.yellow(`${i + 1}. ${q.question}`));\n console.log(chalk.dim(` Category: ${q.category}`));\n console.log(\"\");\n });\n }\n}\n\n/**\n * Display comparison summary\n */\nfunction displayComparisonSummary(comparison: any) {\n console.log(chalk.bold(\"📈 Changes Since Last Report\\n\"));\n\n const riskChange = comparison.changes.riskScoreChange;\n const riskEmoji = riskChange < 0 ? \"✅\" : riskChange > 0 ? \"⚠️\" : \"➖\";\n console.log(\n `${riskEmoji} Risk Score: ${(riskChange * 100).toFixed(0)}% change`,\n );\n\n const oppChange = comparison.changes.opportunityScoreChange;\n const oppEmoji = oppChange > 0 ? \"✅\" : oppChange < 0 ? \"⚠️\" : \"➖\";\n console.log(\n `${oppEmoji} Opportunity Score: ${(oppChange * 100).toFixed(0)}% change`,\n );\n\n console.log(\n `📦 Packages: ${comparison.changes.packageCountChange > 0 ? \"+\" : \"\"}${comparison.changes.packageCountChange}`,\n );\n\n if (comparison.changes.newHighRisks > 0) {\n console.log(\n chalk.red(\n `⚠️ ${comparison.changes.newHighRisks} new high-priority risks`,\n ),\n );\n }\n\n if (comparison.changes.resolvedHighRisks > 0) {\n console.log(\n chalk.green(\n `✅ ${comparison.changes.resolvedHighRisks} high-priority risks resolved`,\n ),\n );\n }\n\n console.log(\"\");\n}\n\n/**\n * Write analysis as JSON\n */\nasync function writeAnalysisJson(\n outputDir: string,\n analysis: any,\n questions: any,\n timestamp: string,\n) {\n const suffix = timestamp ? `-${timestamp}` : \"\";\n\n await writeFile(\n join(outputDir, `analysis${suffix}.json`),\n JSON.stringify(analysis, null, 2),\n \"utf-8\",\n );\n\n await writeFile(\n join(outputDir, `questions${suffix}.json`),\n JSON.stringify(questions, null, 2),\n \"utf-8\",\n );\n}\n\n/**\n * Write markdown reports\n */\nasync function writeMarkdownReports(\n outputDir: string,\n analysis: any,\n questions: any,\n comparator: any,\n timestamp: string,\n) {\n const suffix = timestamp ? `-${timestamp}` : \"\";\n\n // Also save JSON for future comparisons\n await writeFile(\n join(outputDir, `analysis.json`),\n JSON.stringify(analysis, null, 2),\n \"utf-8\",\n );\n\n // Generate each markdown report\n await writeFile(\n join(outputDir, `EXECUTIVE_SUMMARY${suffix}.md`),\n generateExecutiveSummary(analysis, questions),\n \"utf-8\",\n );\n\n await writeFile(\n join(outputDir, `TECHNOLOGY_AUDIT${suffix}.md`),\n generateTechnologyAudit(analysis),\n \"utf-8\",\n );\n\n await writeFile(\n join(outputDir, `STRATEGIC_ROADMAP${suffix}.md`),\n generateStrategicRoadmap(analysis, questions),\n \"utf-8\",\n );\n\n await writeFile(\n join(outputDir, `BOARD_QUESTIONS${suffix}.md`),\n generateBoardQuestions(questions),\n \"utf-8\",\n );\n\n if (comparator) {\n await writeFile(\n join(outputDir, `DIFF_REPORT${suffix}.md`),\n comparator.generateMarkdownSummary(),\n \"utf-8\",\n );\n }\n}\n\n/**\n * Generate Executive Summary markdown\n */\nfunction generateExecutiveSummary(analysis: any, questions: any): string {\n let md = `# Executive Summary\\n\\n`;\n md += `> **Generated:** ${new Date(analysis.timestamp).toLocaleDateString()}\\n\\n`;\n md += `---\\n\\n`;\n\n md += `## Project Overview\\n\\n`;\n md += `**${analysis.project.name}** is a ${analysis.technology.framework || \"modern\"} application `;\n md += `built with ${analysis.technology.language}. `;\n\n if (analysis.project.description) {\n md += `${analysis.project.description}\\n\\n`;\n } else {\n md += `\\n\\n`;\n }\n\n md += `### Key Metrics\\n\\n`;\n md += `| Metric | Value |\\n`;\n md += `|--------|-------|\\n`;\n md += `| Version | ${analysis.project.version} |\\n`;\n md += `| Dependencies | ${analysis.packages.total} packages |\\n`;\n md += `| Codebase Size | ${analysis.project.fileCount} files (~${(analysis.project.totalLines / 1000).toFixed(0)}K lines) |\\n`;\n md += `| Architecture | ${analysis.project.isMonorepo ? \"Monorepo\" : \"Single repository\"} |\\n`;\n md += `\\n`;\n\n // Risk/Opportunity Matrix\n md += `## Strategic Assessment\\n\\n`;\n\n const riskScore = analysis.risks.overall;\n const oppScore = analysis.opportunities.overall;\n\n md += `### Risk & Opportunity Matrix\\n\\n`;\n md += `| Category | Score | Status |\\n`;\n md += `|----------|-------|--------|\\n`;\n md += `| **Technical Risk** | ${(riskScore * 100).toFixed(0)}% | ${getRiskLabel(riskScore)} |\\n`;\n md += `| **Growth Opportunity** | ${(oppScore * 100).toFixed(0)}% | ${getOpportunityLabel(oppScore)} |\\n`;\n md += `\\n`;\n\n // Technology Stack (high-level)\n md += `### Technology Foundation\\n\\n`;\n md += `**Primary Stack:**\\n`;\n md += `- Framework: ${analysis.technology.framework || \"N/A\"}\\n`;\n md += `- Language: ${analysis.technology.language}\\n`;\n md += `- Runtime: ${analysis.technology.runtime}\\n`;\n if (analysis.technology.platforms.length > 0) {\n md += `- Platforms: ${analysis.technology.platforms.join(\", \")}\\n`;\n }\n md += `\\n`;\n\n if (analysis.technology.infrastructure.length > 0) {\n md += `**Infrastructure:** ${analysis.technology.infrastructure.join(\", \")}\\n\\n`;\n }\n\n // Key package categories\n if (analysis.packages.categories.length > 0) {\n md += `### Technology Categories\\n\\n`;\n const topCategories = analysis.packages.categories\n .sort((a: any, b: any) => b.count - a.count)\n .slice(0, 5);\n\n topCategories.forEach((cat: any) => {\n md += `- **${cat.name}** (${cat.count} packages) - ${cat.businessImpact}\\n`;\n });\n md += `\\n`;\n }\n\n // Top Priority Questions (Executive view)\n md += `## Key Strategic Questions\\n\\n`;\n\n const highPriorityQuestions = questions.questions.filter(\n (q: any) => q.priority === \"high\",\n );\n\n if (highPriorityQuestions.length > 0) {\n highPriorityQuestions.slice(0, 5).forEach((q: any, i: number) => {\n md += `### ${i + 1}. ${q.question}\\n\\n`;\n md += `**Context:** ${q.context}\\n\\n`;\n md += `**Business Impact:** ${q.businessImpact}\\n\\n`;\n });\n }\n\n // Critical Risks\n if (analysis.risks.critical && analysis.risks.critical.length > 0) {\n md += `## Critical Risks\\n\\n`;\n analysis.risks.critical.forEach((risk: string) => {\n md += `- ⚠️ ${risk}\\n`;\n });\n md += `\\n`;\n }\n\n // Top Opportunities\n if (\n analysis.opportunities.immediate &&\n analysis.opportunities.immediate.length > 0\n ) {\n md += `## Immediate Opportunities\\n\\n`;\n analysis.opportunities.immediate.slice(0, 5).forEach((opp: string) => {\n md += `- 🌟 ${opp}\\n`;\n });\n md += `\\n`;\n }\n\n md += `---\\n\\n`;\n md += `*For detailed technical analysis, see [TECHNOLOGY_AUDIT.md](TECHNOLOGY_AUDIT.md)*\\n`;\n md += `*For strategic recommendations, see [STRATEGIC_ROADMAP.md](STRATEGIC_ROADMAP.md)*\\n`;\n\n return md;\n}\n\n/**\n * Generate Technology Audit markdown\n */\nfunction generateTechnologyAudit(analysis: any): string {\n let md = `# Technology Audit\\n\\n`;\n md += `> **Generated:** ${new Date(analysis.timestamp).toLocaleDateString()}\\n`;\n md += `> **Analysis Depth:** ${analysis.depth}\\n\\n`;\n md += `---\\n\\n`;\n\n // Project Details\n md += `## Project Details\\n\\n`;\n md += `| Property | Value |\\n`;\n md += `|----------|-------|\\n`;\n md += `| Name | ${analysis.project.name} |\\n`;\n md += `| Version | ${analysis.project.version} |\\n`;\n md += `| Package Manager | ${analysis.project.packageManager} |\\n`;\n md += `| Repository Type | ${analysis.project.isMonorepo ? \"Monorepo\" : \"Single\"} |\\n`;\n if (analysis.project.workspaceCount) {\n md += `| Workspaces | ${analysis.project.workspaceCount} |\\n`;\n }\n md += `| Total Files | ${analysis.project.fileCount} |\\n`;\n md += `| Estimated Lines | ${analysis.project.totalLines.toLocaleString()} |\\n`;\n md += `\\n`;\n\n // Technology Stack\n md += `## Technology Stack\\n\\n`;\n md += `### Core Technologies\\n\\n`;\n md += `| Component | Technology |\\n`;\n md += `|-----------|------------|\\n`;\n md += `| Framework | ${analysis.technology.framework || \"N/A\"} ${analysis.technology.frameworkVersion || \"\"} |\\n`;\n md += `| Language | ${analysis.technology.language} |\\n`;\n md += `| Runtime | ${analysis.technology.runtime} |\\n`;\n md += `| Platforms | ${analysis.technology.platforms.join(\", \")} |\\n`;\n md += `\\n`;\n\n if (analysis.technology.buildTools.length > 0) {\n md += `### Build Tools\\n\\n`;\n analysis.technology.buildTools.forEach((tool: string) => {\n md += `- ${tool}\\n`;\n });\n md += `\\n`;\n }\n\n if (analysis.technology.infrastructure.length > 0) {\n md += `### Infrastructure\\n\\n`;\n analysis.technology.infrastructure.forEach((infra: string) => {\n md += `- ${infra}\\n`;\n });\n md += `\\n`;\n }\n\n // Package Analysis\n md += `## Dependency Analysis\\n\\n`;\n md += `### Overview\\n\\n`;\n md += `- **Total Packages:** ${analysis.packages.total}\\n`;\n md += `- **Production:** ${analysis.packages.production.length}\\n`;\n md += `- **Development:** ${analysis.packages.development.length}\\n`;\n md += `\\n`;\n\n // Categories\n if (analysis.packages.categories.length > 0) {\n md += `### Package Categories\\n\\n`;\n md += `| Category | Count | Business Impact |\\n`;\n md += `|----------|-------|----------------|\\n`;\n\n analysis.packages.categories\n .sort((a: any, b: any) => b.count - a.count)\n .forEach((cat: any) => {\n md += `| ${cat.name} | ${cat.count} | ${cat.businessImpact} |\\n`;\n });\n\n md += `\\n`;\n }\n\n // Top Production Dependencies\n if (analysis.packages.production.length > 0) {\n md += `### Key Production Dependencies\\n\\n`;\n md += `| Package | Version | Category | Purpose |\\n`;\n md += `|---------|---------|----------|--------|\\n`;\n\n analysis.packages.production.slice(0, 15).forEach((pkg: any) => {\n md += `| ${pkg.name} | \\`${pkg.version}\\` | ${pkg.category} | ${pkg.purpose} |\\n`;\n });\n\n if (analysis.packages.production.length > 15) {\n md += `\\n*...and ${analysis.packages.production.length - 15} more*\\n`;\n }\n\n md += `\\n`;\n }\n\n // Architecture (if available)\n if (analysis.architecture) {\n md += `## Architecture Overview\\n\\n`;\n md += `**Pattern:** ${analysis.architecture.pattern}\\n\\n`;\n\n md += `### Layers\\n\\n`;\n analysis.architecture.layers.forEach((layer: string) => {\n md += `- ${layer}\\n`;\n });\n md += `\\n`;\n\n md += `**Data Flow:** ${analysis.architecture.dataFlow}\\n\\n`;\n\n if (analysis.architecture.keyDecisions.length > 0) {\n md += `### Key Architecture Decisions\\n\\n`;\n analysis.architecture.keyDecisions.forEach((decision: string) => {\n md += `- ${decision}\\n`;\n });\n md += `\\n`;\n }\n }\n\n // Code Patterns (if comprehensive analysis)\n if (analysis.codePatterns) {\n md += `## Code Patterns\\n\\n`;\n\n if (analysis.codePatterns.components.length > 0) {\n md += `### Components\\n\\n`;\n analysis.codePatterns.components.forEach((comp: any) => {\n md += `**${comp.type}** (${comp.count})\\n`;\n md += `- Conventions: ${comp.conventions.join(\", \")}\\n`;\n md += `\\n`;\n });\n }\n\n if (analysis.codePatterns.tests) {\n md += `### Testing\\n\\n`;\n md += `- Framework: ${analysis.codePatterns.tests.framework}\\n`;\n md += `- Test Count: ${analysis.codePatterns.tests.count}\\n`;\n md += `- Types: ${analysis.codePatterns.tests.types.join(\", \")}\\n`;\n if (analysis.codePatterns.tests.coverage) {\n md += `- Coverage: ${analysis.codePatterns.tests.coverage}%\\n`;\n }\n md += `\\n`;\n }\n }\n\n // Health Metrics (if available)\n if (analysis.health) {\n md += `## Code Health\\n\\n`;\n md += `| Check | Status |\\n`;\n md += `|-------|--------|\\n`;\n md += `| TypeScript | ${analysis.health.typecheck ? \"✅ Passing\" : \"❌ Failing\"} |\\n`;\n md += `| Linting | ${analysis.health.lint ? \"✅ Passing\" : \"❌ Failing\"} |\\n`;\n md += `| Tests | ${analysis.health.tests ? \"✅ Passing\" : \"❌ Failing\"} |\\n`;\n md += `| Build | ${analysis.health.build ? \"✅ Passing\" : \"❌ Failing\"} |\\n`;\n if (analysis.health.coverage) {\n md += `| Coverage | ${analysis.health.coverage}% |\\n`;\n }\n md += `\\n`;\n }\n\n return md;\n}\n\n/**\n * Generate Strategic Roadmap markdown\n */\nfunction generateStrategicRoadmap(analysis: any, questions: any): string {\n let md = `# Strategic Roadmap\\n\\n`;\n md += `> **Generated:** ${new Date(analysis.timestamp).toLocaleDateString()}\\n\\n`;\n md += `---\\n\\n`;\n\n md += `## Overview\\n\\n`;\n md += `This roadmap outlines strategic recommendations based on the technical analysis of ${analysis.project.name}. `;\n md += `Recommendations are prioritized by business impact and feasibility.\\n\\n`;\n\n // Risk Management\n md += `## Risk Management\\n\\n`;\n\n if (analysis.risks.critical.length > 0) {\n md += `### 🔴 Critical Priorities\\n\\n`;\n analysis.risks.critical.forEach((risk: string, i: number) => {\n md += `${i + 1}. ${risk}\\n`;\n });\n md += `\\n`;\n }\n\n if (analysis.risks.high.length > 0) {\n md += `### 🟡 High Priority\\n\\n`;\n analysis.risks.high.forEach((risk: string, i: number) => {\n md += `${i + 1}. ${risk}\\n`;\n });\n md += `\\n`;\n }\n\n // Opportunities\n md += `## Growth Opportunities\\n\\n`;\n\n if (analysis.opportunities.immediate.length > 0) {\n md += `### ⚡ Immediate (0-30 days)\\n\\n`;\n analysis.opportunities.immediate.forEach((opp: string, i: number) => {\n md += `${i + 1}. ${opp}\\n`;\n });\n md += `\\n`;\n }\n\n if (analysis.opportunities.shortTerm.length > 0) {\n md += `### 📅 Short-term (1-3 months)\\n\\n`;\n analysis.opportunities.shortTerm.forEach((opp: string, i: number) => {\n md += `${i + 1}. ${opp}\\n`;\n });\n md += `\\n`;\n }\n\n if (analysis.opportunities.longTerm.length > 0) {\n md += `### 🎯 Long-term (3-12 months)\\n\\n`;\n analysis.opportunities.longTerm.forEach((opp: string, i: number) => {\n md += `${i + 1}. ${opp}\\n`;\n });\n md += `\\n`;\n }\n\n // Recommendations by Category\n md += `## Detailed Recommendations\\n\\n`;\n\n const categoryMap = new Map<string, any[]>();\n\n questions.questions.forEach((q: any) => {\n if (!categoryMap.has(q.category)) {\n categoryMap.set(q.category, []);\n }\n categoryMap.get(q.category)!.push(q);\n });\n\n for (const [category, qs] of categoryMap) {\n md += `### ${category}\\n\\n`;\n\n qs.forEach((q: any) => {\n md += `#### ${q.question}\\n\\n`;\n\n if (q.findings.length > 0) {\n md += `**Current State:**\\n`;\n q.findings.forEach((f: string) => {\n md += `- ${f}\\n`;\n });\n md += `\\n`;\n }\n\n if (q.recommendations.length > 0) {\n md += `**Recommendations:**\\n`;\n q.recommendations.forEach((r: string) => {\n md += `- ${r}\\n`;\n });\n md += `\\n`;\n }\n\n md += `**Business Impact:** ${q.businessImpact}\\n\\n`;\n md += `**Priority:** ${q.priority.toUpperCase()}\\n\\n`;\n md += `---\\n\\n`;\n });\n }\n\n return md;\n}\n\n/**\n * Generate Board Questions markdown\n */\nfunction generateBoardQuestions(questions: any): string {\n let md = `# Advisory Board Questions\\n\\n`;\n md += `> **Total Questions:** ${questions.summary.totalQuestions}\\n`;\n md += `> **High Priority:** ${questions.summary.highPriority} | `;\n md += `**Medium:** ${questions.summary.mediumPriority} | `;\n md += `**Low:** ${questions.summary.lowPriority}\\n\\n`;\n md += `---\\n\\n`;\n\n md += `## Table of Contents\\n\\n`;\n questions.summary.categories.forEach((cat: string) => {\n const slug = cat.toLowerCase().replace(/\\s+/g, \"-\");\n md += `- [${cat}](#${slug})\\n`;\n });\n md += `\\n---\\n\\n`;\n\n // Group by category\n const categoryMap = new Map<string, any[]>();\n\n questions.questions.forEach((q: any) => {\n if (!categoryMap.has(q.category)) {\n categoryMap.set(q.category, []);\n }\n categoryMap.get(q.category)!.push(q);\n });\n\n // Output by category\n for (const [category, qs] of categoryMap) {\n const slug = category.toLowerCase().replace(/\\s+/g, \"-\");\n md += `## ${category}\\n\\n`;\n md += `<a id=\"${slug}\"></a>\\n\\n`;\n\n qs.forEach((q: any, i: number) => {\n const priorityEmoji =\n q.priority === \"high\" ? \"🔴\" : q.priority === \"medium\" ? \"🟡\" : \"🟢\";\n\n md += `### ${i + 1}. ${priorityEmoji} ${q.question}\\n\\n`;\n md += `**Context:** ${q.context}\\n\\n`;\n\n if (q.findings.length > 0) {\n md += `**Findings:**\\n`;\n q.findings.forEach((f: string) => {\n md += `- ${f}\\n`;\n });\n md += `\\n`;\n }\n\n if (q.recommendations.length > 0) {\n md += `**Recommendations:**\\n`;\n q.recommendations.forEach((r: string) => {\n md += `- ${r}\\n`;\n });\n md += `\\n`;\n }\n\n md += `**Business Impact:** ${q.businessImpact}\\n\\n`;\n md += `---\\n\\n`;\n });\n }\n\n return md;\n}\n\n/**\n * Get risk label\n */\nfunction getRiskLabel(score: number): string {\n if (score > 0.7) return \"🔴 High Risk\";\n if (score > 0.4) return \"🟡 Moderate Risk\";\n return \"🟢 Low Risk\";\n}\n\n/**\n * Get opportunity label\n */\nfunction getOpportunityLabel(score: number): string {\n if (score > 0.7) return \"🌟 High Potential\";\n if (score > 0.5) return \"📈 Moderate Potential\";\n return \"💡 Identified\";\n}\n\n/**\n * Check CI thresholds and return exit code\n */\nfunction checkCIThresholds(analysis: any, config: any): number {\n const thresholds = config?.riskThresholds || {\n high: 0.7,\n medium: 0.4,\n };\n\n const riskScore = analysis.risks.overall;\n\n if (riskScore >= thresholds.high) {\n console.log(\n chalk.red(\n `High risk threshold exceeded: ${(riskScore * 100).toFixed(0)}%`,\n ),\n );\n return 1;\n }\n\n if (analysis.packages.security && analysis.packages.security.length > 0) {\n const criticalCount = analysis.packages.security.filter(\n (s: any) => s.severity === \"critical\",\n ).length;\n\n if (criticalCount > 0) {\n console.log(\n chalk.red(`Critical security vulnerabilities found: ${criticalCount}`),\n );\n return 1;\n }\n }\n\n return 0;\n}\n","/**\n * Advisory Board Analysis Utilities\n *\n * Performs comprehensive application audits at multiple depth levels:\n * - executive: High-level business summary for non-technical stakeholders\n * - quick: Package.json scan, framework detection\n * - standard: Adds file structure, adapter detection, scope identification\n * - comprehensive: Full code-level pattern detection\n */\n\nimport { existsSync } from \"fs\";\nimport { readFile } from \"fs/promises\";\nimport { join } from \"path\";\nimport fg from \"fast-glob\";\nimport type { AdvisoryDepth, WorkflowConfig } from \"../config/schema.js\";\nimport { detectPackageManager, isMonorepo } from \"./git-repo.js\";\nimport { analyzeProject } from \"./auto-setup.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface AdvisoryAnalysis {\n depth: AdvisoryDepth;\n timestamp: string;\n project: ProjectOverview;\n technology: TechnologyStack;\n packages: PackageAnalysis;\n architecture?: ArchitectureOverview;\n codePatterns?: CodePatternAnalysis;\n risks: RiskAssessment;\n opportunities: OpportunityAssessment;\n health?: HealthMetrics;\n}\n\nexport interface ProjectOverview {\n name: string;\n version: string;\n description?: string;\n isMonorepo: boolean;\n packageManager: string;\n workspaceCount?: number;\n fileCount: number;\n totalLines: number;\n}\n\nexport interface TechnologyStack {\n framework?: string;\n frameworkVersion?: string;\n language: string;\n runtime: string;\n buildTools: string[];\n platforms: string[];\n infrastructure: string[];\n}\n\nexport interface PackageAnalysis {\n total: number;\n production: DependencyInfo[];\n development: DependencyInfo[];\n categories: PackageCategory[];\n outdated: OutdatedPackage[];\n security: SecurityIssue[];\n}\n\nexport interface DependencyInfo {\n name: string;\n version: string;\n category: string;\n purpose: string;\n businessValue: string;\n usagePatterns: string[];\n alternatives?: string[];\n}\n\nexport interface PackageCategory {\n name: string;\n count: number;\n packages: string[];\n businessImpact: string;\n}\n\nexport interface OutdatedPackage {\n name: string;\n current: string;\n latest: string;\n breaking: boolean;\n}\n\nexport interface SecurityIssue {\n package: string;\n severity: \"critical\" | \"high\" | \"medium\" | \"low\";\n issue: string;\n recommendation: string;\n}\n\nexport interface ArchitectureOverview {\n pattern: string;\n layers: string[];\n entryPoints: string[];\n dataFlow: string;\n keyDecisions: string[];\n}\n\nexport interface CodePatternAnalysis {\n components: ComponentPattern[];\n services: ServicePattern[];\n utilities: UtilityPattern[];\n tests: TestPattern;\n customPatterns: string[];\n}\n\nexport interface ComponentPattern {\n type: string;\n count: number;\n examples: string[];\n conventions: string[];\n}\n\nexport interface ServicePattern {\n name: string;\n purpose: string;\n integrations: string[];\n}\n\nexport interface UtilityPattern {\n category: string;\n count: number;\n usage: string;\n}\n\nexport interface TestPattern {\n framework: string;\n coverage?: number;\n types: string[];\n count: number;\n}\n\nexport interface RiskAssessment {\n overall: number; // 0-1 score\n categories: RiskCategory[];\n critical: string[];\n high: string[];\n medium: string[];\n low: string[];\n}\n\nexport interface RiskCategory {\n name: string;\n score: number;\n issues: string[];\n impact: string;\n}\n\nexport interface OpportunityAssessment {\n overall: number; // 0-1 score\n categories: OpportunityCategory[];\n immediate: string[];\n shortTerm: string[];\n longTerm: string[];\n}\n\nexport interface OpportunityCategory {\n name: string;\n potential: number;\n recommendations: string[];\n businessValue: string;\n}\n\nexport interface HealthMetrics {\n typecheck: boolean;\n lint: boolean;\n tests: boolean;\n build: boolean;\n coverage?: number;\n issues: number;\n}\n\nexport interface AdvisoryOptions {\n depth: AdvisoryDepth;\n cwd: string;\n config?: WorkflowConfig;\n includeHealth?: boolean;\n excludePatterns?: string[];\n}\n\n// ============================================================================\n// Advisory Analyzer Class\n// ============================================================================\n\nexport class AdvisoryAnalyzer {\n private options: AdvisoryOptions;\n\n constructor(options: AdvisoryOptions) {\n this.options = options;\n }\n\n /**\n * Run analysis at specified depth level\n */\n async analyze(): Promise<AdvisoryAnalysis> {\n const timestamp = new Date().toISOString();\n const { depth } = this.options;\n\n // All depths start with project overview\n const project = await this.analyzeProject();\n\n if (depth === \"executive\") {\n return this.analyzeExecutive(timestamp, project);\n }\n\n // Quick depth and above include technology and packages\n const technology = await this.analyzeTechnology();\n const packages = await this.analyzePackages();\n const risks = await this.assessRisks(project, technology, packages);\n const opportunities = await this.assessOpportunities(\n project,\n technology,\n packages,\n );\n\n if (depth === \"quick\") {\n return {\n depth,\n timestamp,\n project,\n technology,\n packages,\n risks,\n opportunities,\n };\n }\n\n // Standard depth adds architecture\n const architecture = await this.analyzeArchitecture();\n\n if (depth === \"standard\") {\n const health = this.options.includeHealth\n ? await this.analyzeHealth()\n : undefined;\n\n return {\n depth,\n timestamp,\n project,\n technology,\n packages,\n architecture,\n risks,\n opportunities,\n health,\n };\n }\n\n // Comprehensive depth includes everything\n const codePatterns = await this.analyzeCodePatterns();\n const health = this.options.includeHealth\n ? await this.analyzeHealth()\n : undefined;\n\n return {\n depth,\n timestamp,\n project,\n technology,\n packages,\n architecture,\n codePatterns,\n risks,\n opportunities,\n health,\n };\n }\n\n /**\n * Executive depth: High-level business summary only\n */\n private async analyzeExecutive(\n timestamp: string,\n project: ProjectOverview,\n ): Promise<AdvisoryAnalysis> {\n // Get minimal tech info for categorization\n const packageJson = await this.readPackageJson();\n const deps = packageJson.dependencies || {};\n const devDeps = packageJson.devDependencies || {};\n\n // Categorize at high level\n const techCategories = this.categorizeTechnologies(deps, devDeps);\n const risks = this.calculateExecutiveRisks(project, techCategories);\n const opportunities = this.calculateExecutiveOpportunities(\n project,\n techCategories,\n );\n\n return {\n depth: \"executive\",\n timestamp,\n project,\n technology: {\n language: this.detectLanguage(deps, devDeps),\n runtime: this.detectRuntime(deps, devDeps),\n buildTools: this.detectBuildTools(devDeps),\n platforms: this.detectPlatforms(deps),\n infrastructure: this.detectInfrastructure(deps, devDeps),\n },\n packages: {\n total: Object.keys(deps).length + Object.keys(devDeps).length,\n production: [],\n development: [],\n categories: techCategories,\n outdated: [],\n security: [],\n },\n risks,\n opportunities,\n };\n }\n\n /**\n * Analyze project overview\n */\n private async analyzeProject(): Promise<ProjectOverview> {\n const packageJson = await this.readPackageJson();\n const isMonorepoProject = await isMonorepo(this.options.cwd);\n const fileCount = await this.countFiles();\n const totalLines = await this.countTotalLines();\n\n let workspaceCount: number | undefined;\n if (isMonorepoProject && packageJson.workspaces) {\n workspaceCount = Array.isArray(packageJson.workspaces)\n ? packageJson.workspaces.length\n : 0;\n }\n\n return {\n name: packageJson.name || \"Unknown Project\",\n version: packageJson.version || \"0.0.0\",\n description: packageJson.description,\n isMonorepo: isMonorepoProject,\n packageManager: await detectPackageManager(this.options.cwd),\n workspaceCount,\n fileCount,\n totalLines,\n };\n }\n\n /**\n * Analyze technology stack\n */\n private async analyzeTechnology(): Promise<TechnologyStack> {\n const packageJson = await this.readPackageJson();\n const deps = packageJson.dependencies || {};\n const devDeps = packageJson.devDependencies || {};\n\n const projectAnalysis = await analyzeProject(this.options.cwd);\n\n return {\n framework: projectAnalysis.framework,\n frameworkVersion:\n deps[projectAnalysis.framework || \"\"] ||\n devDeps[projectAnalysis.framework || \"\"],\n language: this.detectLanguage(deps, devDeps),\n runtime: this.detectRuntime(deps, devDeps),\n buildTools: this.detectBuildTools(devDeps),\n platforms: this.detectPlatforms(deps),\n infrastructure: this.detectInfrastructure(deps, devDeps),\n };\n }\n\n /**\n * Analyze packages in detail\n */\n private async analyzePackages(): Promise<PackageAnalysis> {\n const packageJson = await this.readPackageJson();\n const deps = packageJson.dependencies || {};\n const devDeps = packageJson.devDependencies || {};\n\n const production = this.analyzeDependencies(deps, \"production\");\n const development = this.analyzeDependencies(devDeps, \"development\");\n const categories = this.categorizeTechnologies(deps, devDeps);\n\n return {\n total: Object.keys(deps).length + Object.keys(devDeps).length,\n production,\n development,\n categories,\n outdated: [], // TODO: Implement outdated check\n security: [], // TODO: Implement security audit\n };\n }\n\n /**\n * Analyze dependencies and categorize them\n */\n private analyzeDependencies(\n deps: Record<string, string>,\n _type: \"production\" | \"development\",\n ): DependencyInfo[] {\n return Object.entries(deps).map(([name, version]) => {\n const category = this.categorizeDependency(name);\n const info = this.getDependencyInfo(name, category);\n\n return {\n name,\n version,\n category,\n ...info,\n };\n });\n }\n\n /**\n * Categorize a dependency\n */\n private categorizeDependency(name: string): string {\n // UI Frameworks\n if (\n [\"react\", \"vue\", \"angular\", \"svelte\", \"solid-js\"].some((fw) =>\n name.includes(fw),\n )\n ) {\n return \"UI Framework\";\n }\n\n // Meta-frameworks\n if (\n [\"next\", \"nuxt\", \"remix\", \"sveltekit\", \"astro\"].some((fw) =>\n name.includes(fw),\n )\n ) {\n return \"Meta-Framework\";\n }\n\n // State Management\n if (\n [\"redux\", \"zustand\", \"jotai\", \"recoil\", \"mobx\", \"pinia\"].includes(name)\n ) {\n return \"State Management\";\n }\n\n // API/Data Fetching\n if (\n [\n \"axios\",\n \"fetch\",\n \"swr\",\n \"react-query\",\n \"@tanstack/react-query\",\n \"apollo\",\n \"urql\",\n ].some((lib) => name.includes(lib))\n ) {\n return \"API/Data Fetching\";\n }\n\n // Routing\n if (\n [\"react-router\", \"vue-router\", \"@tanstack/router\"].some((r) =>\n name.includes(r),\n )\n ) {\n return \"Routing\";\n }\n\n // Forms\n if (\n [\"formik\", \"react-hook-form\", \"final-form\"].some((f) => name.includes(f))\n ) {\n return \"Forms\";\n }\n\n // Styling\n if (\n [\n \"styled-components\",\n \"emotion\",\n \"tailwind\",\n \"sass\",\n \"less\",\n \"@mui\",\n \"antd\",\n \"chakra-ui\",\n ].some((s) => name.includes(s))\n ) {\n return \"Styling/UI Components\";\n }\n\n // Testing\n if (\n [\n \"vitest\",\n \"jest\",\n \"mocha\",\n \"chai\",\n \"testing-library\",\n \"playwright\",\n \"cypress\",\n ].some((t) => name.includes(t))\n ) {\n return \"Testing\";\n }\n\n // Build Tools\n if (\n [\"vite\", \"webpack\", \"rollup\", \"esbuild\", \"turbo\", \"tsup\"].includes(name)\n ) {\n return \"Build Tools\";\n }\n\n // Linting/Formatting\n if ([\"eslint\", \"prettier\", \"stylelint\"].some((l) => name.includes(l))) {\n return \"Code Quality\";\n }\n\n // Database\n if (\n [\"prisma\", \"drizzle\", \"mongoose\", \"sequelize\", \"typeorm\", \"knex\"].some(\n (db) => name.includes(db),\n )\n ) {\n return \"Database ORM\";\n }\n\n // Authentication\n if (\n [\"next-auth\", \"auth0\", \"supabase\", \"clerk\"].some((a) => name.includes(a))\n ) {\n return \"Authentication\";\n }\n\n // Deployment/Infrastructure\n if (\n [\"vercel\", \"netlify\", \"aws-sdk\", \"@google-cloud\"].some((d) =>\n name.includes(d),\n )\n ) {\n return \"Infrastructure\";\n }\n\n // Analytics\n if (\n [\"@analytics\", \"posthog\", \"mixpanel\", \"segment\"].some((a) =>\n name.includes(a),\n )\n ) {\n return \"Analytics\";\n }\n\n return \"Other\";\n }\n\n /**\n * Get detailed info about a dependency\n */\n private getDependencyInfo(\n name: string,\n category: string,\n ): Omit<DependencyInfo, \"name\" | \"version\" | \"category\"> {\n // TODO: This could be enhanced with a knowledge base or API lookup\n const defaultInfo = {\n purpose: `${category} library`,\n businessValue: \"Supports application functionality\",\n usagePatterns: [\"Used throughout the application\"],\n };\n\n // Enhanced info for common packages\n const knownPackages: Record<\n string,\n Omit<DependencyInfo, \"name\" | \"version\" | \"category\">\n > = {\n react: {\n purpose: \"Core UI library for building component-based interfaces\",\n businessValue:\n \"Enables fast, interactive user experiences with reusable components\",\n usagePatterns: [\n \"Component rendering\",\n \"State management\",\n \"Event handling\",\n ],\n alternatives: [\"Vue\", \"Svelte\", \"Solid\"],\n },\n next: {\n purpose: \"React meta-framework with SSR, routing, and optimization\",\n businessValue: \"Improves SEO, performance, and developer productivity\",\n usagePatterns: [\n \"Server-side rendering\",\n \"API routes\",\n \"File-based routing\",\n ],\n alternatives: [\"Remix\", \"Gatsby\"],\n },\n typescript: {\n purpose: \"Static type checking for JavaScript\",\n businessValue:\n \"Reduces bugs, improves code quality, and enhances developer experience\",\n usagePatterns: [\"Type definitions\", \"Compile-time checks\"],\n },\n // Add more as needed\n };\n\n return knownPackages[name] || defaultInfo;\n }\n\n /**\n * Categorize technologies at high level\n */\n private categorizeTechnologies(\n deps: Record<string, string>,\n devDeps: Record<string, string>,\n ): PackageCategory[] {\n const allDeps = { ...deps, ...devDeps };\n const categories = new Map<string, string[]>();\n\n Object.keys(allDeps).forEach((name) => {\n const category = this.categorizeDependency(name);\n if (!categories.has(category)) {\n categories.set(category, []);\n }\n categories.get(category)!.push(name);\n });\n\n return Array.from(categories.entries()).map(([name, packages]) => ({\n name,\n count: packages.length,\n packages,\n businessImpact: this.getCategoryBusinessImpact(name),\n }));\n }\n\n /**\n * Get business impact description for a category\n */\n private getCategoryBusinessImpact(category: string): string {\n const impacts: Record<string, string> = {\n \"UI Framework\":\n \"Core user experience - directly impacts customer satisfaction and engagement\",\n \"Meta-Framework\":\n \"Application performance and SEO - affects discoverability and user retention\",\n \"State Management\":\n \"Data consistency - ensures reliable application behavior\",\n \"API/Data Fetching\":\n \"Backend integration - enables core business functionality\",\n Routing: \"Navigation - affects user flow and conversion rates\",\n Forms: \"Data collection - critical for user onboarding and conversions\",\n \"Styling/UI Components\":\n \"Visual design - impacts brand perception and usability\",\n Testing: \"Quality assurance - reduces production bugs and support costs\",\n \"Build Tools\":\n \"Development efficiency - affects time-to-market for new features\",\n \"Code Quality\":\n \"Maintainability - reduces technical debt and long-term costs\",\n \"Database ORM\": \"Data persistence - ensures business data integrity\",\n Authentication:\n \"Security and user management - protects business and customer data\",\n Infrastructure:\n \"Hosting and scalability - affects uptime and operational costs\",\n Analytics: \"Business intelligence - enables data-driven decision making\",\n };\n\n return impacts[category] || \"Supports various application features\";\n }\n\n /**\n * Analyze architecture patterns\n */\n private async analyzeArchitecture(): Promise<ArchitectureOverview> {\n const files = await this.getProjectFiles();\n const entryPoints = this.detectEntryPoints(files);\n const pattern = this.detectArchitecturePattern(files);\n const layers = this.detectLayers(files);\n\n return {\n pattern,\n layers,\n entryPoints,\n dataFlow: this.analyzeDataFlow(files),\n keyDecisions: this.extractKeyDecisions(files),\n };\n }\n\n /**\n * Analyze code patterns in detail\n */\n private async analyzeCodePatterns(): Promise<CodePatternAnalysis> {\n const files = await this.getProjectFiles();\n\n return {\n components: await this.analyzeComponents(files),\n services: await this.analyzeServices(files),\n utilities: await this.analyzeUtilities(files),\n tests: await this.analyzeTests(files),\n customPatterns: await this.detectCustomPatterns(files),\n };\n }\n\n /**\n * Assess risks\n */\n private async assessRisks(\n project: ProjectOverview,\n technology: TechnologyStack,\n packages: PackageAnalysis,\n ): Promise<RiskAssessment> {\n const categories: RiskCategory[] = [];\n const critical: string[] = [];\n const high: string[] = [];\n const medium: string[] = [];\n const low: string[] = [];\n\n // Dependency risk\n const depRisk = this.assessDependencyRisk(packages);\n categories.push(depRisk);\n this.categorizeRiskItems(depRisk, critical, high, medium, low);\n\n // Technology obsolescence risk\n const techRisk = this.assessTechnologyRisk(technology);\n categories.push(techRisk);\n this.categorizeRiskItems(techRisk, critical, high, medium, low);\n\n // Project complexity risk\n const complexityRisk = this.assessComplexityRisk(project);\n categories.push(complexityRisk);\n this.categorizeRiskItems(complexityRisk, critical, high, medium, low);\n\n const overall =\n categories.reduce((sum, cat) => sum + cat.score, 0) / categories.length;\n\n return { overall, categories, critical, high, medium, low };\n }\n\n /**\n * Assess opportunities\n */\n private async assessOpportunities(\n project: ProjectOverview,\n technology: TechnologyStack,\n packages: PackageAnalysis,\n ): Promise<OpportunityAssessment> {\n const categories: OpportunityCategory[] = [];\n const immediate: string[] = [];\n const shortTerm: string[] = [];\n const longTerm: string[] = [];\n\n // Modernization opportunities\n const modernization = this.assessModernizationOpportunities(\n technology,\n packages,\n );\n categories.push(modernization);\n this.categorizeOpportunityItems(\n modernization,\n immediate,\n shortTerm,\n longTerm,\n );\n\n // Optimization opportunities\n const optimization = this.assessOptimizationOpportunities(project);\n categories.push(optimization);\n this.categorizeOpportunityItems(\n optimization,\n immediate,\n shortTerm,\n longTerm,\n );\n\n // Growth opportunities\n const growth = this.assessGrowthOpportunities(technology, packages);\n categories.push(growth);\n this.categorizeOpportunityItems(growth, immediate, shortTerm, longTerm);\n\n const overall =\n categories.reduce((sum, cat) => sum + cat.potential, 0) /\n categories.length;\n\n return { overall, categories, immediate, shortTerm, longTerm };\n }\n\n /**\n * Analyze health metrics\n */\n private async analyzeHealth(): Promise<HealthMetrics> {\n // TODO: Integrate with doctor and verify commands\n return {\n typecheck: false,\n lint: false,\n tests: false,\n build: false,\n issues: 0,\n };\n }\n\n // ============================================================================\n // Helper Methods\n // ============================================================================\n\n private async readPackageJson(): Promise<any> {\n const pkgPath = join(this.options.cwd, \"package.json\");\n if (!existsSync(pkgPath)) {\n throw new Error(\"package.json not found\");\n }\n const content = await readFile(pkgPath, \"utf-8\");\n return JSON.parse(content);\n }\n\n private async countFiles(): Promise<number> {\n const patterns = [\"**/*.{ts,tsx,js,jsx,py,go,rs,java}\"];\n const files = await fg(patterns, {\n cwd: this.options.cwd,\n ignore: [\n \"node_modules/**\",\n \"dist/**\",\n \"build/**\",\n \".next/**\",\n \"coverage/**\",\n ],\n });\n return files.length;\n }\n\n private async countTotalLines(): Promise<number> {\n // Quick estimate: avg 50 lines per file\n const fileCount = await this.countFiles();\n return fileCount * 50;\n }\n\n private detectLanguage(\n deps: Record<string, string>,\n devDeps: Record<string, string>,\n ): string {\n if (devDeps.typescript || deps.typescript) return \"TypeScript\";\n if (\n Object.keys(deps).some((d) => d.includes(\"react\") || d.includes(\"vue\"))\n ) {\n return \"JavaScript\";\n }\n return \"JavaScript\";\n }\n\n private detectRuntime(\n deps: Record<string, string>,\n devDeps: Record<string, string>,\n ): string {\n if (deps.next || devDeps.next) return \"Node.js (Next.js)\";\n if (Object.keys(deps).some((d) => d.includes(\"react\"))) {\n return \"Browser + Node.js\";\n }\n return \"Node.js\";\n }\n\n private detectBuildTools(devDeps: Record<string, string>): string[] {\n const tools: string[] = [];\n if (devDeps.vite) tools.push(\"Vite\");\n if (devDeps.webpack) tools.push(\"Webpack\");\n if (devDeps.rollup) tools.push(\"Rollup\");\n if (devDeps.esbuild) tools.push(\"esbuild\");\n if (devDeps.turbo || devDeps.turborepo) tools.push(\"Turborepo\");\n if (devDeps.tsup) tools.push(\"tsup\");\n return tools;\n }\n\n private detectPlatforms(deps: Record<string, string>): string[] {\n const platforms: string[] = [];\n if (deps.react || deps.next) platforms.push(\"Web\");\n if (deps[\"react-native\"]) platforms.push(\"Mobile (React Native)\");\n if (deps.electron) platforms.push(\"Desktop (Electron)\");\n return platforms.length > 0 ? platforms : [\"Web\"];\n }\n\n private detectInfrastructure(\n deps: Record<string, string>,\n devDeps: Record<string, string>,\n ): string[] {\n const infra: string[] = [];\n const allDeps = { ...deps, ...devDeps };\n\n if (allDeps.vercel || allDeps[\"@vercel/node\"]) infra.push(\"Vercel\");\n if (Object.keys(allDeps).some((d) => d.includes(\"aws-\"))) {\n infra.push(\"AWS\");\n }\n if (Object.keys(allDeps).some((d) => d.includes(\"@google-cloud\"))) {\n infra.push(\"Google Cloud\");\n }\n if (allDeps.netlify) infra.push(\"Netlify\");\n if (allDeps.supabase || allDeps[\"@supabase/supabase-js\"]) {\n infra.push(\"Supabase\");\n }\n if (allDeps.firebase || allDeps[\"firebase-admin\"]) infra.push(\"Firebase\");\n\n return infra;\n }\n\n private calculateExecutiveRisks(\n project: ProjectOverview,\n categories: PackageCategory[],\n ): RiskAssessment {\n const risks: string[] = [];\n let overallScore = 0;\n\n // Simple heuristics for executive view\n if (project.fileCount > 1000) {\n risks.push(\n \"Large codebase may require significant maintenance resources\",\n );\n overallScore += 0.3;\n }\n\n if (categories.length > 15) {\n risks.push(\n \"High number of technology categories indicates potential complexity\",\n );\n overallScore += 0.2;\n }\n\n const totalPackages = categories.reduce((sum, cat) => sum + cat.count, 0);\n if (totalPackages > 100) {\n risks.push(\n \"Large dependency footprint increases security and maintenance burden\",\n );\n overallScore += 0.3;\n }\n\n overallScore = Math.min(overallScore, 1);\n\n return {\n overall: overallScore,\n categories: [\n {\n name: \"Technical Complexity\",\n score: overallScore,\n issues: risks,\n impact: \"May affect development velocity and operational costs\",\n },\n ],\n critical: [],\n high: overallScore > 0.7 ? risks : [],\n medium: overallScore > 0.4 && overallScore <= 0.7 ? risks : [],\n low: overallScore <= 0.4 ? risks : [],\n };\n }\n\n private calculateExecutiveOpportunities(\n _project: ProjectOverview,\n categories: PackageCategory[],\n ): OpportunityAssessment {\n const opportunities: string[] = [];\n let overallScore = 0.5;\n\n // Modern stack indicates good foundation\n const hasModernFramework = categories.some((cat) =>\n cat.name.includes(\"Meta-Framework\"),\n );\n if (hasModernFramework) {\n opportunities.push(\n \"Modern framework provides foundation for rapid feature development\",\n );\n overallScore += 0.2;\n }\n\n // Testing infrastructure\n const hasTestingTools = categories.some((cat) => cat.name === \"Testing\");\n if (hasTestingTools) {\n opportunities.push(\n \"Testing infrastructure enables quality-driven expansion\",\n );\n overallScore += 0.1;\n }\n\n return {\n overall: Math.min(overallScore, 1),\n categories: [\n {\n name: \"Growth Potential\",\n potential: overallScore,\n recommendations: opportunities,\n businessValue:\n \"Strong foundation for scaling features and market reach\",\n },\n ],\n immediate: [],\n shortTerm: opportunities,\n longTerm: [],\n };\n }\n\n private assessDependencyRisk(packages: PackageAnalysis): RiskCategory {\n let score = 0;\n const issues: string[] = [];\n\n if (packages.total > 100) {\n score += 0.3;\n issues.push(`High dependency count (${packages.total} packages)`);\n }\n\n if (packages.outdated.length > 10) {\n score += 0.3;\n issues.push(`${packages.outdated.length} outdated packages`);\n }\n\n if (packages.security.length > 0) {\n score += 0.4;\n issues.push(`${packages.security.length} security vulnerabilities`);\n }\n\n return {\n name: \"Dependency Management\",\n score: Math.min(score, 1),\n issues,\n impact: \"Affects security, stability, and maintenance costs\",\n };\n }\n\n private assessTechnologyRisk(technology: TechnologyStack): RiskCategory {\n let score = 0;\n const issues: string[] = [];\n\n // Check for modern vs legacy frameworks\n const legacyFrameworks = [\"angular.js\", \"backbone\", \"ember\"];\n if (\n technology.framework &&\n legacyFrameworks.some((f) => technology.framework?.includes(f))\n ) {\n score += 0.5;\n issues.push(\"Legacy framework may limit future development\");\n }\n\n return {\n name: \"Technology Stack\",\n score,\n issues,\n impact: \"May affect ability to attract talent and adopt new features\",\n };\n }\n\n private assessComplexityRisk(project: ProjectOverview): RiskCategory {\n let score = 0;\n const issues: string[] = [];\n\n if (project.fileCount > 1000) {\n score += 0.2;\n issues.push(\"Large codebase requires careful management\");\n }\n\n if (project.isMonorepo && (project.workspaceCount || 0) > 10) {\n score += 0.2;\n issues.push(\"Complex monorepo structure\");\n }\n\n return {\n name: \"Project Complexity\",\n score,\n issues,\n impact: \"Affects onboarding time and development velocity\",\n };\n }\n\n private assessModernizationOpportunities(\n _technology: TechnologyStack,\n packages: PackageAnalysis,\n ): OpportunityCategory {\n const recommendations: string[] = [];\n let potential = 0.5;\n\n // Check for upgrade opportunities\n if (packages.outdated.length > 0) {\n recommendations.push(\n \"Upgrade dependencies to access new features and improvements\",\n );\n potential += 0.2;\n }\n\n return {\n name: \"Modernization\",\n potential: Math.min(potential, 1),\n recommendations,\n businessValue: \"Improved performance, security, and developer experience\",\n };\n }\n\n private assessOptimizationOpportunities(\n project: ProjectOverview,\n ): OpportunityCategory {\n const recommendations: string[] = [];\n\n if (project.fileCount > 500) {\n recommendations.push(\n \"Consider code splitting and lazy loading strategies\",\n );\n }\n\n return {\n name: \"Performance Optimization\",\n potential: 0.6,\n recommendations,\n businessValue: \"Faster load times and better user experience\",\n };\n }\n\n private assessGrowthOpportunities(\n _technology: TechnologyStack,\n packages: PackageAnalysis,\n ): OpportunityCategory {\n const recommendations: string[] = [];\n let potential = 0.5;\n\n const hasAnalytics = packages.categories.some((cat) =>\n cat.name.includes(\"Analytics\"),\n );\n if (!hasAnalytics) {\n recommendations.push(\"Add analytics to enable data-driven decisions\");\n potential += 0.2;\n }\n\n return {\n name: \"Growth & Expansion\",\n potential: Math.min(potential, 1),\n recommendations,\n businessValue: \"Data-driven growth and improved user insights\",\n };\n }\n\n private categorizeRiskItems(\n risk: RiskCategory,\n critical: string[],\n high: string[],\n medium: string[],\n low: string[],\n ): void {\n if (risk.score > 0.7) {\n critical.push(...risk.issues);\n } else if (risk.score > 0.5) {\n high.push(...risk.issues);\n } else if (risk.score > 0.3) {\n medium.push(...risk.issues);\n } else {\n low.push(...risk.issues);\n }\n }\n\n private categorizeOpportunityItems(\n opportunity: OpportunityCategory,\n immediate: string[],\n shortTerm: string[],\n longTerm: string[],\n ): void {\n if (opportunity.potential > 0.7) {\n immediate.push(...opportunity.recommendations);\n } else if (opportunity.potential > 0.5) {\n shortTerm.push(...opportunity.recommendations);\n } else {\n longTerm.push(...opportunity.recommendations);\n }\n }\n\n private async getProjectFiles(): Promise<string[]> {\n const patterns = [\"**/*.{ts,tsx,js,jsx}\"];\n return await fg(patterns, {\n cwd: this.options.cwd,\n ignore: this.options.excludePatterns || [\n \"node_modules/**\",\n \"dist/**\",\n \"build/**\",\n \".next/**\",\n \"coverage/**\",\n ],\n });\n }\n\n private detectEntryPoints(files: string[]): string[] {\n const entryPoints = files.filter(\n (f) =>\n f.includes(\"index.\") ||\n f.includes(\"main.\") ||\n f.includes(\"app.\") ||\n f.includes(\"_app.\") ||\n f.includes(\"layout.\"),\n );\n return entryPoints.slice(0, 5);\n }\n\n private detectArchitecturePattern(files: string[]): string {\n const hasComponents = files.some((f) => f.includes(\"components/\"));\n const hasPages = files.some(\n (f) => f.includes(\"pages/\") || f.includes(\"app/\"),\n );\n const hasServices = files.some((f) => f.includes(\"services/\"));\n\n if (hasComponents && hasPages && hasServices) {\n return \"Layered Architecture (Pages → Components → Services)\";\n }\n if (hasComponents && hasPages) {\n return \"Component-Based Architecture\";\n }\n return \"Standard Application Structure\";\n }\n\n private detectLayers(files: string[]): string[] {\n const layers: string[] = [];\n if (files.some((f) => f.includes(\"pages/\") || f.includes(\"app/\"))) {\n layers.push(\"Presentation (Pages/Routes)\");\n }\n if (files.some((f) => f.includes(\"components/\"))) {\n layers.push(\"UI Components\");\n }\n if (files.some((f) => f.includes(\"services/\") || f.includes(\"api/\"))) {\n layers.push(\"Business Logic/Services\");\n }\n if (files.some((f) => f.includes(\"lib/\") || f.includes(\"utils/\"))) {\n layers.push(\"Utilities/Helpers\");\n }\n if (files.some((f) => f.includes(\"models/\") || f.includes(\"types/\"))) {\n layers.push(\"Data Models\");\n }\n return layers;\n }\n\n private analyzeDataFlow(files: string[]): string {\n const hasStateManagement = files.some(\n (f) => f.includes(\"store\") || f.includes(\"context\"),\n );\n const hasApi = files.some(\n (f) => f.includes(\"api\") || f.includes(\"services\"),\n );\n\n if (hasStateManagement && hasApi) {\n return \"API → Services → State Management → Components\";\n }\n if (hasApi) {\n return \"API → Components (Direct)\";\n }\n return \"Props-based Component Communication\";\n }\n\n private extractKeyDecisions(files: string[]): string[] {\n const decisions: string[] = [];\n\n if (files.some((f) => f.includes(\".ts\") || f.includes(\".tsx\"))) {\n decisions.push(\"TypeScript for type safety\");\n }\n if (files.some((f) => f.includes(\"app/\") && !f.includes(\"pages/\"))) {\n decisions.push(\"App Router architecture (Next.js)\");\n }\n if (files.some((f) => f.includes(\"server\") || f.includes(\"api\"))) {\n decisions.push(\"API routes for backend functionality\");\n }\n\n return decisions;\n }\n\n private async analyzeComponents(\n files: string[],\n ): Promise<ComponentPattern[]> {\n const components = files.filter((f) => f.includes(\"components/\"));\n const patterns: ComponentPattern[] = [];\n\n // Detect component types\n const ui = components.filter(\n (f) => f.includes(\"/ui/\") || f.includes(\"/common/\"),\n );\n const feature = components.filter((f) =>\n [\"features/\", \"modules/\"].some((dir) => f.includes(dir)),\n );\n\n if (ui.length > 0) {\n patterns.push({\n type: \"UI Components\",\n count: ui.length,\n examples: ui.slice(0, 3),\n conventions: [\"Reusable\", \"Presentation-focused\"],\n });\n }\n\n if (feature.length > 0) {\n patterns.push({\n type: \"Feature Components\",\n count: feature.length,\n examples: feature.slice(0, 3),\n conventions: [\"Business logic\", \"Domain-specific\"],\n });\n }\n\n return patterns;\n }\n\n private async analyzeServices(files: string[]): Promise<ServicePattern[]> {\n const services = files.filter(\n (f) => f.includes(\"services/\") || f.includes(\"api/\"),\n );\n\n return services.slice(0, 5).map((file) => ({\n name: file,\n purpose: \"API integration or business logic\",\n integrations: [],\n }));\n }\n\n private async analyzeUtilities(files: string[]): Promise<UtilityPattern[]> {\n const utils = files.filter(\n (f) => f.includes(\"utils/\") || f.includes(\"lib/\"),\n );\n\n return [\n {\n category: \"Utilities\",\n count: utils.length,\n usage: \"Helper functions and shared utilities\",\n },\n ];\n }\n\n private async analyzeTests(files: string[]): Promise<TestPattern> {\n const tests = files.filter(\n (f) => f.includes(\".test.\") || f.includes(\".spec.\"),\n );\n\n const hasVitest = tests.some((f) => f.includes(\"vitest\"));\n const hasJest = tests.some((f) => f.includes(\"jest\"));\n\n return {\n framework: hasVitest ? \"Vitest\" : hasJest ? \"Jest\" : \"Unknown\",\n count: tests.length,\n types: [\"Unit tests\"],\n };\n }\n\n private async detectCustomPatterns(files: string[]): Promise<string[]> {\n const patterns: string[] = [];\n\n if (files.some((f) => f.includes(\"hooks/\"))) {\n patterns.push(\"Custom React Hooks\");\n }\n if (files.some((f) => f.includes(\"middleware\"))) {\n patterns.push(\"Middleware Pattern\");\n }\n if (files.some((f) => f.includes(\"providers\"))) {\n patterns.push(\"Context Providers\");\n }\n\n return patterns;\n }\n}\n","/**\n * Advisory Board Question Generator\n *\n * Transforms technical analysis findings into strategic questions\n * formatted for executive/advisory board presentation.\n *\n * Categories:\n * - Technology Decisions\n * - Package Utilization\n * - Platform Strategy\n * - Business Alignment\n * - Technical Debt\n * - Growth Opportunities\n */\n\nimport type { AdvisoryAnalysis, PackageCategory } from \"./advisory-analyzer.js\";\nimport type { AdvisoryConfig, AdvisoryQuestion } from \"../config/schema.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface BoardQuestion {\n category: string;\n question: string;\n context: string;\n findings: string[];\n recommendations: string[];\n priority: \"high\" | \"medium\" | \"low\";\n businessImpact: string;\n}\n\nexport interface QuestionSet {\n questions: BoardQuestion[];\n summary: QuestionSummary;\n}\n\nexport interface QuestionSummary {\n totalQuestions: number;\n highPriority: number;\n mediumPriority: number;\n lowPriority: number;\n categories: string[];\n}\n\n// ============================================================================\n// Question Generator Class\n// ============================================================================\n\nexport class QuestionGenerator {\n private analysis: AdvisoryAnalysis;\n private config?: AdvisoryConfig;\n\n constructor(analysis: AdvisoryAnalysis, config?: AdvisoryConfig) {\n this.analysis = analysis;\n this.config = config;\n }\n\n /**\n * Generate all advisory board questions\n */\n generate(): QuestionSet {\n const questions: BoardQuestion[] = [];\n\n // Generate questions for each category\n questions.push(...this.generateTechnologyQuestions());\n questions.push(...this.generatePackageQuestions());\n questions.push(...this.generatePlatformQuestions());\n questions.push(...this.generateBusinessQuestions());\n questions.push(...this.generateTechnicalDebtQuestions());\n questions.push(...this.generateGrowthQuestions());\n\n // Add custom questions from config\n if (this.config?.customQuestions) {\n questions.push(\n ...this.formatCustomQuestions(this.config.customQuestions),\n );\n }\n\n // Sort by priority\n const sorted = this.sortByPriority(questions);\n\n return {\n questions: sorted,\n summary: this.generateSummary(sorted),\n };\n }\n\n /**\n * Technology Decisions questions\n */\n private generateTechnologyQuestions(): BoardQuestion[] {\n const questions: BoardQuestion[] = [];\n const { technology, project } = this.analysis;\n\n if (technology.framework) {\n questions.push({\n category: \"Technology Decisions\",\n question: `Why was ${technology.framework} chosen as the primary framework, and does it still align with our strategic goals?`,\n context: `Project uses ${technology.framework}${technology.frameworkVersion ? ` v${technology.frameworkVersion}` : \"\"} as the foundation`,\n findings: [\n `Framework: ${technology.framework}`,\n `Language: ${technology.language}`,\n `Runtime: ${technology.runtime}`,\n ],\n recommendations: [\n \"Validate framework continues to meet performance and scalability needs\",\n \"Assess community support and long-term viability\",\n \"Consider migration costs vs. benefits if alternatives exist\",\n ],\n priority: \"high\",\n businessImpact:\n \"Framework choice affects development velocity, talent acquisition, and long-term maintenance costs\",\n });\n }\n\n if (technology.buildTools && technology.buildTools.length > 0) {\n questions.push({\n category: \"Technology Decisions\",\n question: `How are our build tools (${technology.buildTools.join(\", \")}) optimizing development workflow and deployment efficiency?`,\n context: `Build pipeline uses ${technology.buildTools.join(\", \")}`,\n findings: technology.buildTools.map(\n (tool) => `Using ${tool} for build process`,\n ),\n recommendations: [\n \"Measure build time impacts on CI/CD pipeline\",\n \"Evaluate if modern alternatives could improve developer experience\",\n \"Consider caching strategies to optimize build performance\",\n ],\n priority: \"medium\",\n businessImpact:\n \"Build efficiency directly impacts time-to-market for new features\",\n });\n }\n\n if (project.isMonorepo) {\n questions.push({\n category: \"Technology Decisions\",\n question: `Is the monorepo structure providing expected benefits in code sharing and deployment coordination?`,\n context: `Project uses monorepo with ${project.workspaceCount || \"multiple\"} workspaces`,\n findings: [\n `Monorepo with ${project.workspaceCount} packages`,\n `Total ${project.fileCount} files managed`,\n ],\n recommendations: [\n \"Assess if shared code is properly abstracted and reused\",\n \"Evaluate build caching and selective deployment strategies\",\n \"Consider workspace organization for scaling\",\n ],\n priority: \"medium\",\n businessImpact:\n \"Monorepo architecture affects team collaboration and deployment complexity\",\n });\n }\n\n return questions;\n }\n\n /**\n * Package Utilization questions\n */\n private generatePackageQuestions(): BoardQuestion[] {\n const questions: BoardQuestion[] = [];\n const { packages } = this.analysis;\n\n if (packages.total > 80) {\n questions.push({\n category: \"Package Utilization\",\n question: `With ${packages.total} dependencies, are we maintaining optimal balance between functionality and maintenance burden?`,\n context: `Project has ${packages.production.length} production and ${packages.development.length} development dependencies`,\n findings: [\n `Total packages: ${packages.total}`,\n `Production: ${packages.production.length}`,\n `Development: ${packages.development.length}`,\n ],\n recommendations: [\n \"Audit for unused or redundant packages\",\n \"Evaluate if critical functionality should be internalized\",\n \"Implement dependency update strategy\",\n ],\n priority: packages.total > 150 ? \"high\" : \"medium\",\n businessImpact:\n \"Dependency count affects security surface area and maintenance costs\",\n });\n }\n\n // Category-specific questions\n if (packages.categories.length > 0) {\n const topCategories = packages.categories\n .sort((a, b) => b.count - a.count)\n .slice(0, 3);\n\n topCategories.forEach((cat) => {\n if (cat.count > 5) {\n questions.push({\n category: \"Package Utilization\",\n question: `How are we leveraging our ${cat.count} ${cat.name} packages to deliver business value?`,\n context: `${cat.name}: ${cat.packages.slice(0, 3).join(\", \")}${cat.count > 3 ? `, +${cat.count - 3} more` : \"\"}`,\n findings: [\n `${cat.count} packages in ${cat.name} category`,\n cat.businessImpact,\n ],\n recommendations: this.getCategoryRecommendations(cat),\n priority: this.getCategoryPriority(cat),\n businessImpact: cat.businessImpact,\n });\n }\n });\n }\n\n // Security and outdated packages\n if (packages.security && packages.security.length > 0) {\n const criticalCount = packages.security.filter(\n (s) => s.severity === \"critical\",\n ).length;\n\n questions.push({\n category: \"Package Utilization\",\n question: `What is our strategy for addressing ${packages.security.length} identified security vulnerabilities${criticalCount > 0 ? ` (${criticalCount} critical)` : \"\"}?`,\n context: \"Security audit identified vulnerabilities in dependencies\",\n findings: packages.security.map(\n (s) => `${s.package}: ${s.severity} - ${s.issue}`,\n ),\n recommendations: packages.security.map((s) => s.recommendation),\n priority: criticalCount > 0 ? \"high\" : \"medium\",\n businessImpact:\n \"Security vulnerabilities pose risk to customer data and business operations\",\n });\n }\n\n return questions;\n }\n\n /**\n * Platform Strategy questions\n */\n private generatePlatformQuestions(): BoardQuestion[] {\n const questions: BoardQuestion[] = [];\n const { technology } = this.analysis;\n\n if (technology.platforms && technology.platforms.length > 0) {\n questions.push({\n category: \"Platform Strategy\",\n question: `Are our platform choices (${technology.platforms.join(\", \")}) aligned with target market and growth plans?`,\n context: `Currently deployed on ${technology.platforms.join(\" + \")}`,\n findings: technology.platforms.map((p) => `Supports ${p} platform`),\n recommendations: [\n \"Validate platform coverage matches user demographics\",\n \"Assess cross-platform development efficiency\",\n \"Consider platform-specific optimization opportunities\",\n ],\n priority: \"medium\",\n businessImpact:\n \"Platform strategy determines market reach and development costs\",\n });\n }\n\n if (technology.infrastructure && technology.infrastructure.length > 0) {\n questions.push({\n category: \"Platform Strategy\",\n question: `How is our infrastructure choice (${technology.infrastructure.join(\", \")}) supporting scalability and cost efficiency?`,\n context: `Infrastructure: ${technology.infrastructure.join(\", \")}`,\n findings: technology.infrastructure.map((i) => `Deployed on ${i}`),\n recommendations: [\n \"Monitor infrastructure costs vs. usage patterns\",\n \"Evaluate auto-scaling and redundancy capabilities\",\n \"Consider multi-region deployment for global users\",\n ],\n priority: \"high\",\n businessImpact:\n \"Infrastructure directly impacts operational costs, uptime, and scalability\",\n });\n }\n\n return questions;\n }\n\n /**\n * Business Alignment questions\n */\n private generateBusinessQuestions(): BoardQuestion[] {\n const questions: BoardQuestion[] = [];\n const { packages } = this.analysis;\n\n // Analytics\n const hasAnalytics = packages.categories.some((cat) =>\n cat.name.toLowerCase().includes(\"analytics\"),\n );\n\n if (!hasAnalytics) {\n questions.push({\n category: \"Business Alignment\",\n question:\n \"Why don't we have analytics infrastructure, and how are we making data-driven product decisions?\",\n context: \"No analytics packages detected in the project\",\n findings: [\"Missing analytics implementation\"],\n recommendations: [\n \"Implement analytics to track user behavior and feature adoption\",\n \"Set up conversion funnels and key metric tracking\",\n \"Enable A/B testing capabilities for product experiments\",\n ],\n priority: \"high\",\n businessImpact:\n \"Lack of analytics limits ability to measure ROI and optimize user experience\",\n });\n }\n\n // Authentication\n const hasAuth = packages.categories.some((cat) =>\n cat.name.toLowerCase().includes(\"auth\"),\n );\n\n if (hasAuth) {\n const authCat = packages.categories.find((cat) =>\n cat.name.toLowerCase().includes(\"auth\"),\n )!;\n questions.push({\n category: \"Business Alignment\",\n question: `How is our authentication solution (${authCat.packages.join(\", \")}) supporting user onboarding and security requirements?`,\n context: `Using ${authCat.packages.join(\" + \")} for authentication`,\n findings: authCat.packages.map((p) => `Auth provider: ${p}`),\n recommendations: [\n \"Measure authentication success rates and friction points\",\n \"Ensure compliance with security standards (SOC2, GDPR, etc.)\",\n \"Evaluate social login options to reduce signup friction\",\n ],\n priority: \"high\",\n businessImpact:\n \"Authentication affects conversion rates and security posture\",\n });\n }\n\n // Testing and Quality\n const hasTestingtools = packages.categories.some((cat) =>\n cat.name.toLowerCase().includes(\"testing\"),\n );\n\n if (hasTestingtools) {\n questions.push({\n category: \"Business Alignment\",\n question:\n \"How is our testing strategy contributing to product quality and customer satisfaction?\",\n context: \"Testing infrastructure is in place\",\n findings: [\"Testing tools available\"],\n recommendations: [\n \"Set coverage targets aligned with quality goals\",\n \"Implement testing in CI/CD for every release\",\n \"Track bugs-in-production as quality metric\",\n ],\n priority: \"medium\",\n businessImpact:\n \"Quality assurance directly affects customer satisfaction and support costs\",\n });\n }\n\n return questions;\n }\n\n /**\n * Technical Debt questions\n */\n private generateTechnicalDebtQuestions(): BoardQuestion[] {\n const questions: BoardQuestion[] = [];\n const { risks, packages } = this.analysis;\n\n // High-risk items\n if (risks.high && risks.high.length > 0) {\n questions.push({\n category: \"Technical Debt\",\n question: `What is our strategy for addressing ${risks.high.length} high-priority technical risks?`,\n context: \"Analysis identified significant technical risks\",\n findings: risks.high,\n recommendations: [\n \"Prioritize risks by business impact\",\n \"Allocate dedicated time for technical debt in sprints\",\n \"Track debt reduction as OKR/KPI\",\n ],\n priority: \"high\",\n businessImpact:\n \"Unaddressed technical debt slows feature velocity and increases costs\",\n });\n }\n\n // Outdated packages\n if (packages.outdated && packages.outdated.length > 10) {\n const breakingCount = packages.outdated.filter((p) => p.breaking).length;\n\n questions.push({\n category: \"Technical Debt\",\n question: `How should we prioritize updating ${packages.outdated.length} outdated packages${breakingCount > 0 ? ` (${breakingCount} with breaking changes)` : \"\"}?`,\n context: \"Dependency audit found outdated packages\",\n findings: packages.outdated\n .slice(0, 5)\n .map((p) => `${p.name}: ${p.current} → ${p.latest}`),\n recommendations: [\n \"Create update roadmap starting with non-breaking changes\",\n \"Test breaking changes in feature branches\",\n \"Consider automated dependency updates (Dependabot, Renovate)\",\n ],\n priority: breakingCount > 5 ? \"high\" : \"medium\",\n businessImpact:\n \"Outdated dependencies miss performance improvements and security patches\",\n });\n }\n\n // Complexity risks\n const complexityRisk = risks.categories.find((c) =>\n c.name.includes(\"Complexity\"),\n );\n if (complexityRisk && complexityRisk.score > 0.5) {\n questions.push({\n category: \"Technical Debt\",\n question:\n \"How are we managing codebase complexity to maintain development velocity?\",\n context: `Complexity score: ${(complexityRisk.score * 100).toFixed(0)}%`,\n findings: complexityRisk.issues,\n recommendations: [\n \"Implement code quality metrics and monitoring\",\n \"Establish refactoring goals for each sprint\",\n \"Consider modularization strategies\",\n ],\n priority: complexityRisk.score > 0.7 ? \"high\" : \"medium\",\n businessImpact:\n \"High complexity slows new feature development and increases bugs\",\n });\n }\n\n return questions;\n }\n\n /**\n * Growth Opportunities questions\n */\n private generateGrowthQuestions(): BoardQuestion[] {\n const questions: BoardQuestion[] = [];\n const { opportunities } = this.analysis;\n\n // Immediate opportunities\n if (opportunities.immediate && opportunities.immediate.length > 0) {\n questions.push({\n category: \"Growth Opportunities\",\n question:\n \"Which immediate technical opportunities should we prioritize for maximum business impact?\",\n context: `${opportunities.immediate.length} immediate opportunities identified`,\n findings: opportunities.immediate,\n recommendations: [\n \"Evaluate ROI and effort for each opportunity\",\n \"Align opportunities with business OKRs\",\n \"Quick wins can build momentum for larger initiatives\",\n ],\n priority: \"high\",\n businessImpact:\n \"Immediate opportunities can deliver quick ROI with minimal investment\",\n });\n }\n\n // Strategic opportunities\n opportunities.categories.forEach((cat) => {\n if (cat.potential > 0.6) {\n questions.push({\n category: \"Growth Opportunities\",\n question: `How can we capitalize on ${cat.name.toLowerCase()} opportunities to drive business growth?`,\n context: `Potential score: ${(cat.potential * 100).toFixed(0)}%`,\n findings: cat.recommendations,\n recommendations: [\n \"Develop roadmap for implementing recommendations\",\n \"Assign owners and timelines\",\n \"Define success metrics\",\n ],\n priority: cat.potential > 0.8 ? \"high\" : \"medium\",\n businessImpact: cat.businessValue,\n });\n }\n });\n\n return questions;\n }\n\n /**\n * Format custom questions from config\n */\n private formatCustomQuestions(\n customQuestions: AdvisoryQuestion[],\n ): BoardQuestion[] {\n return customQuestions.map((q) => ({\n category: q.category,\n question: q.question,\n context: q.context || \"Custom advisory question\",\n findings: [],\n recommendations: [],\n priority: q.priority || \"medium\",\n businessImpact: \"Custom question defined by organization\",\n }));\n }\n\n /**\n * Sort questions by priority\n */\n private sortByPriority(questions: BoardQuestion[]): BoardQuestion[] {\n const priorityOrder = { high: 0, medium: 1, low: 2 };\n return questions.sort(\n (a, b) => priorityOrder[a.priority] - priorityOrder[b.priority],\n );\n }\n\n /**\n * Generate summary of questions\n */\n private generateSummary(questions: BoardQuestion[]): QuestionSummary {\n const categories = Array.from(new Set(questions.map((q) => q.category)));\n\n return {\n totalQuestions: questions.length,\n highPriority: questions.filter((q) => q.priority === \"high\").length,\n mediumPriority: questions.filter((q) => q.priority === \"medium\").length,\n lowPriority: questions.filter((q) => q.priority === \"low\").length,\n categories,\n };\n }\n\n /**\n * Get recommendations for a package category\n */\n private getCategoryRecommendations(cat: PackageCategory): string[] {\n const recommendations: string[] = [];\n\n if (cat.name.includes(\"UI\") || cat.name.includes(\"Styling\")) {\n recommendations.push(\n \"Ensure design system consistency across components\",\n );\n recommendations.push(\"Consider component library optimization\");\n } else if (cat.name.includes(\"API\") || cat.name.includes(\"Data\")) {\n recommendations.push(\"Implement proper error handling and retry logic\");\n recommendations.push(\"Consider caching strategies for performance\");\n } else if (cat.name.includes(\"Testing\")) {\n recommendations.push(\"Increase test coverage for critical paths\");\n recommendations.push(\"Automate testing in CI/CD pipeline\");\n } else if (cat.name.includes(\"Database\") || cat.name.includes(\"ORM\")) {\n recommendations.push(\"Optimize queries and indexes\");\n recommendations.push(\"Implement database migration strategy\");\n }\n\n if (recommendations.length === 0) {\n recommendations.push(\"Review usage patterns for optimization\");\n recommendations.push(\"Consider if functionality meets current needs\");\n }\n\n return recommendations;\n }\n\n /**\n * Get priority for a package category\n */\n private getCategoryPriority(cat: PackageCategory): \"high\" | \"medium\" | \"low\" {\n // High priority for critical infrastructure\n if (\n [\"Authentication\", \"Database\", \"Infrastructure\", \"API\"].some((key) =>\n cat.name.includes(key),\n )\n ) {\n return \"high\";\n }\n\n // Medium for important but not critical\n if (\n [\"UI\", \"Testing\", \"State Management\", \"Forms\"].some((key) =>\n cat.name.includes(key),\n )\n ) {\n return \"medium\";\n }\n\n return \"low\";\n }\n}\n","/**\n * Report Comparator\n *\n * Compares two advisory reports to identify changes:\n * - New risks and opportunities\n * - Resolved issues\n * - Score changes\n * - Package changes (added, removed, updated)\n *\n * Useful for quarterly board reviews and tracking technical progress.\n */\n\nimport type { AdvisoryAnalysis } from \"./advisory-analyzer.js\";\n\n// ============================================================================\n// Types\n// ============================================================================\n\nexport interface ReportComparison {\n timestamp: string;\n baseline: ReportSummary;\n current: ReportSummary;\n changes: ChangesSummary;\n details: DetailedChanges;\n}\n\nexport interface ReportSummary {\n timestamp: string;\n depth: string;\n projectName: string;\n overallRiskScore: number;\n overallOpportunityScore: number;\n packageCount: number;\n}\n\nexport interface ChangesSummary {\n riskScoreChange: number;\n opportunityScoreChange: number;\n packageCountChange: number;\n newHighRisks: number;\n resolvedHighRisks: number;\n newOpportunities: number;\n}\n\nexport interface DetailedChanges {\n risks: RiskChanges;\n opportunities: OpportunityChanges;\n packages: PackageChanges;\n technology: TechnologyChanges;\n}\n\nexport interface RiskChanges {\n new: string[];\n resolved: string[];\n changed: RiskScoreChange[];\n}\n\nexport interface RiskScoreChange {\n category: string;\n before: number;\n after: number;\n change: number;\n}\n\nexport interface OpportunityChanges {\n new: string[];\n completed: string[];\n changed: OpportunityScoreChange[];\n}\n\nexport interface OpportunityScoreChange {\n category: string;\n before: number;\n after: number;\n change: number;\n}\n\nexport interface PackageChanges {\n added: PackageChange[];\n removed: PackageChange[];\n updated: PackageChange[];\n}\n\nexport interface PackageChange {\n name: string;\n version?: string;\n previousVersion?: string;\n category: string;\n}\n\nexport interface TechnologyChanges {\n frameworkChanged: boolean;\n newBuildTools: string[];\n newInfrastructure: string[];\n removedTools: string[];\n}\n\n// ============================================================================\n// Report Comparator Class\n// ============================================================================\n\nexport class ReportComparator {\n private baseline: AdvisoryAnalysis;\n private current: AdvisoryAnalysis;\n\n constructor(baseline: AdvisoryAnalysis, current: AdvisoryAnalysis) {\n this.baseline = baseline;\n this.current = current;\n }\n\n /**\n * Compare two reports and generate diff\n */\n compare(): ReportComparison {\n const baselineSummary = this.extractSummary(this.baseline);\n const currentSummary = this.extractSummary(this.current);\n const changes = this.calculateChanges(baselineSummary, currentSummary);\n const details = this.analyzeDetailedChanges();\n\n return {\n timestamp: new Date().toISOString(),\n baseline: baselineSummary,\n current: currentSummary,\n changes,\n details,\n };\n }\n\n /**\n * Extract summary from analysis\n */\n private extractSummary(analysis: AdvisoryAnalysis): ReportSummary {\n return {\n timestamp: analysis.timestamp,\n depth: analysis.depth,\n projectName: analysis.project.name,\n overallRiskScore: analysis.risks.overall,\n overallOpportunityScore: analysis.opportunities.overall,\n packageCount: analysis.packages.total,\n };\n }\n\n /**\n * Calculate high-level changes\n */\n private calculateChanges(\n baseline: ReportSummary,\n current: ReportSummary,\n ): ChangesSummary {\n const riskScoreChange =\n current.overallRiskScore - baseline.overallRiskScore;\n const opportunityScoreChange =\n current.overallOpportunityScore - baseline.overallOpportunityScore;\n const packageCountChange = current.packageCount - baseline.packageCount;\n\n // Count new and resolved high-priority risks\n const baselineHighRisks = new Set(this.baseline.risks.high);\n const currentHighRisks = new Set(this.current.risks.high);\n\n const newHighRisks = Array.from(currentHighRisks).filter(\n (risk) => !baselineHighRisks.has(risk),\n ).length;\n\n const resolvedHighRisks = Array.from(baselineHighRisks).filter(\n (risk) => !currentHighRisks.has(risk),\n ).length;\n\n // Count new opportunities\n const baselineImmediate = new Set(this.baseline.opportunities.immediate);\n const currentImmediate = new Set(this.current.opportunities.immediate);\n\n const newOpportunities = Array.from(currentImmediate).filter(\n (opp) => !baselineImmediate.has(opp),\n ).length;\n\n return {\n riskScoreChange,\n opportunityScoreChange,\n packageCountChange,\n newHighRisks,\n resolvedHighRisks,\n newOpportunities,\n };\n }\n\n /**\n * Analyze detailed changes\n */\n private analyzeDetailedChanges(): DetailedChanges {\n return {\n risks: this.compareRisks(),\n opportunities: this.compareOpportunities(),\n packages: this.comparePackages(),\n technology: this.compareTechnology(),\n };\n }\n\n /**\n * Compare risks between reports\n */\n private compareRisks(): RiskChanges {\n const baselineRisks = new Set([\n ...this.baseline.risks.critical,\n ...this.baseline.risks.high,\n ...this.baseline.risks.medium,\n ]);\n\n const currentRisks = new Set([\n ...this.current.risks.critical,\n ...this.current.risks.high,\n ...this.current.risks.medium,\n ]);\n\n const newRisks = Array.from(currentRisks).filter(\n (risk) => !baselineRisks.has(risk),\n );\n\n const resolved = Array.from(baselineRisks).filter(\n (risk) => !currentRisks.has(risk),\n );\n\n // Compare risk category scores\n const changed: RiskScoreChange[] = [];\n const baselineCatMap = new Map(\n this.baseline.risks.categories.map((c) => [c.name, c]),\n );\n const currentCatMap = new Map(\n this.current.risks.categories.map((c) => [c.name, c]),\n );\n\n for (const [name, current] of currentCatMap) {\n const baseline = baselineCatMap.get(name);\n if (baseline && Math.abs(current.score - baseline.score) > 0.05) {\n changed.push({\n category: name,\n before: baseline.score,\n after: current.score,\n change: current.score - baseline.score,\n });\n }\n }\n\n return { new: newRisks, resolved, changed };\n }\n\n /**\n * Compare opportunities between reports\n */\n private compareOpportunities(): OpportunityChanges {\n const baselineOpps = new Set([\n ...this.baseline.opportunities.immediate,\n ...this.baseline.opportunities.shortTerm,\n ]);\n\n const currentOpps = new Set([\n ...this.current.opportunities.immediate,\n ...this.current.opportunities.shortTerm,\n ]);\n\n const newOpps = Array.from(currentOpps).filter(\n (opp) => !baselineOpps.has(opp),\n );\n\n const completed = Array.from(baselineOpps).filter(\n (opp) => !currentOpps.has(opp),\n );\n\n // Compare opportunity category scores\n const changed: OpportunityScoreChange[] = [];\n const baselineCatMap = new Map(\n this.baseline.opportunities.categories.map((c) => [c.name, c]),\n );\n const currentCatMap = new Map(\n this.current.opportunities.categories.map((c) => [c.name, c]),\n );\n\n for (const [name, current] of currentCatMap) {\n const baseline = baselineCatMap.get(name);\n if (baseline && Math.abs(current.potential - baseline.potential) > 0.05) {\n changed.push({\n category: name,\n before: baseline.potential,\n after: current.potential,\n change: current.potential - baseline.potential,\n });\n }\n }\n\n return { new: newOpps, completed, changed };\n }\n\n /**\n * Compare packages between reports\n */\n private comparePackages(): PackageChanges {\n const baselineProduction = new Map(\n this.baseline.packages.production.map((p) => [p.name, p]),\n );\n const currentProduction = new Map(\n this.current.packages.production.map((p) => [p.name, p]),\n );\n\n const added: PackageChange[] = [];\n const removed: PackageChange[] = [];\n const updated: PackageChange[] = [];\n\n // Find added packages\n for (const [name, pkg] of currentProduction) {\n if (!baselineProduction.has(name)) {\n added.push({\n name,\n version: pkg.version,\n category: pkg.category,\n });\n }\n }\n\n // Find removed and updated packages\n for (const [name, baselinePkg] of baselineProduction) {\n const currentPkg = currentProduction.get(name);\n\n if (!currentPkg) {\n removed.push({\n name,\n version: baselinePkg.version,\n category: baselinePkg.category,\n });\n } else if (baselinePkg.version !== currentPkg.version) {\n updated.push({\n name,\n version: currentPkg.version,\n previousVersion: baselinePkg.version,\n category: currentPkg.category,\n });\n }\n }\n\n // Also check dev dependencies\n const baselineDev = new Map(\n this.baseline.packages.development.map((p) => [p.name, p]),\n );\n const currentDev = new Map(\n this.current.packages.development.map((p) => [p.name, p]),\n );\n\n for (const [name, pkg] of currentDev) {\n if (!baselineDev.has(name)) {\n added.push({\n name,\n version: pkg.version,\n category: pkg.category,\n });\n }\n }\n\n for (const [name, baselinePkg] of baselineDev) {\n const currentPkg = currentDev.get(name);\n\n if (!currentPkg) {\n removed.push({\n name,\n version: baselinePkg.version,\n category: baselinePkg.category,\n });\n } else if (baselinePkg.version !== currentPkg.version) {\n updated.push({\n name,\n version: currentPkg.version,\n previousVersion: baselinePkg.version,\n category: currentPkg.category,\n });\n }\n }\n\n return { added, removed, updated };\n }\n\n /**\n * Compare technology stack between reports\n */\n private compareTechnology(): TechnologyChanges {\n const baselineTech = this.baseline.technology;\n const currentTech = this.current.technology;\n\n const frameworkChanged =\n baselineTech.framework !== currentTech.framework ||\n baselineTech.frameworkVersion !== currentTech.frameworkVersion;\n\n const baselineTools = new Set(baselineTech.buildTools);\n const currentTools = new Set(currentTech.buildTools);\n\n const newBuildTools = currentTech.buildTools.filter(\n (tool) => !baselineTools.has(tool),\n );\n const removedTools = baselineTech.buildTools.filter(\n (tool) => !currentTools.has(tool),\n );\n\n const baselineInfra = new Set(baselineTech.infrastructure);\n\n const newInfrastructure = currentTech.infrastructure.filter(\n (infra) => !baselineInfra.has(infra),\n );\n\n return {\n frameworkChanged,\n newBuildTools,\n newInfrastructure,\n removedTools,\n };\n }\n\n /**\n * Generate markdown summary of changes\n */\n generateMarkdownSummary(): string {\n const comparison = this.compare();\n const { changes, details } = comparison;\n\n let md = `# Advisory Report Comparison\\n\\n`;\n md += `**Baseline:** ${new Date(comparison.baseline.timestamp).toLocaleDateString()}\\n`;\n md += `**Current:** ${new Date(comparison.current.timestamp).toLocaleDateString()}\\n\\n`;\n\n md += `## Executive Summary\\n\\n`;\n\n // Risk score change\n const riskChange = changes.riskScoreChange;\n const riskEmoji = riskChange < 0 ? \"✅\" : riskChange > 0 ? \"⚠️\" : \"➖\";\n md += `${riskEmoji} **Risk Score:** ${(comparison.baseline.overallRiskScore * 100).toFixed(0)}% → ${(comparison.current.overallRiskScore * 100).toFixed(0)}% `;\n md += `(${riskChange > 0 ? \"+\" : \"\"}${(riskChange * 100).toFixed(0)}%)\\n`;\n\n // Opportunity score change\n const oppChange = changes.opportunityScoreChange;\n const oppEmoji = oppChange > 0 ? \"✅\" : oppChange < 0 ? \"⚠️\" : \"➖\";\n md += `${oppEmoji} **Opportunity Score:** ${(comparison.baseline.overallOpportunityScore * 100).toFixed(0)}% → ${(comparison.current.overallOpportunityScore * 100).toFixed(0)}% `;\n md += `(${oppChange > 0 ? \"+\" : \"\"}${(oppChange * 100).toFixed(0)}%)\\n`;\n\n // Package count change\n md += `📦 **Packages:** ${comparison.baseline.packageCount} → ${comparison.current.packageCount} `;\n md += `(${changes.packageCountChange > 0 ? \"+\" : \"\"}${changes.packageCountChange})\\n\\n`;\n\n // Key changes\n md += `## Key Changes\\n\\n`;\n\n if (changes.newHighRisks > 0) {\n md += `⚠️ **${changes.newHighRisks}** new high-priority risks identified\\n`;\n }\n\n if (changes.resolvedHighRisks > 0) {\n md += `✅ **${changes.resolvedHighRisks}** high-priority risks resolved\\n`;\n }\n\n if (changes.newOpportunities > 0) {\n md += `🌟 **${changes.newOpportunities}** new opportunities identified\\n`;\n }\n\n if (details.technology.frameworkChanged) {\n md += `🔄 Framework changed: ${comparison.baseline.projectName}\\n`;\n }\n\n md += `\\n---\\n\\n`;\n\n // Detailed risks\n if (details.risks.new.length > 0 || details.risks.resolved.length > 0) {\n md += `## Risk Changes\\n\\n`;\n\n if (details.risks.new.length > 0) {\n md += `### New Risks\\n\\n`;\n details.risks.new.forEach((risk) => {\n md += `- ${risk}\\n`;\n });\n md += `\\n`;\n }\n\n if (details.risks.resolved.length > 0) {\n md += `### Resolved Risks\\n\\n`;\n details.risks.resolved.forEach((risk) => {\n md += `- ~~${risk}~~\\n`;\n });\n md += `\\n`;\n }\n\n if (details.risks.changed.length > 0) {\n md += `### Risk Score Changes\\n\\n`;\n md += `| Category | Before | After | Change |\\n`;\n md += `|----------|--------|-------|--------|\\n`;\n details.risks.changed.forEach((change) => {\n const changeStr =\n change.change > 0\n ? `+${(change.change * 100).toFixed(0)}%`\n : `${(change.change * 100).toFixed(0)}%`;\n md += `| ${change.category} | ${(change.before * 100).toFixed(0)}% | ${(change.after * 100).toFixed(0)}% | ${changeStr} |\\n`;\n });\n md += `\\n`;\n }\n }\n\n // Package changes\n if (\n details.packages.added.length > 0 ||\n details.packages.removed.length > 0 ||\n details.packages.updated.length > 0\n ) {\n md += `## Package Changes\\n\\n`;\n\n if (details.packages.added.length > 0) {\n md += `### Added (${details.packages.added.length})\\n\\n`;\n details.packages.added.slice(0, 10).forEach((pkg) => {\n md += `- **${pkg.name}** \\`${pkg.version}\\` (${pkg.category})\\n`;\n });\n if (details.packages.added.length > 10) {\n md += `\\n_...and ${details.packages.added.length - 10} more_\\n`;\n }\n md += `\\n`;\n }\n\n if (details.packages.removed.length > 0) {\n md += `### Removed (${details.packages.removed.length})\\n\\n`;\n details.packages.removed.slice(0, 10).forEach((pkg) => {\n md += `- ~~${pkg.name}~~ \\`${pkg.version}\\`\\n`;\n });\n if (details.packages.removed.length > 10) {\n md += `\\n_...and ${details.packages.removed.length - 10} more_\\n`;\n }\n md += `\\n`;\n }\n\n if (details.packages.updated.length > 0) {\n md += `### Updated (${details.packages.updated.length})\\n\\n`;\n details.packages.updated.slice(0, 10).forEach((pkg) => {\n md += `- **${pkg.name}** \\`${pkg.previousVersion}\\` → \\`${pkg.version}\\`\\n`;\n });\n if (details.packages.updated.length > 10) {\n md += `\\n_...and ${details.packages.updated.length - 10} more_\\n`;\n }\n md += `\\n`;\n }\n }\n\n return md;\n }\n}\n","/**\n * Hooks Command Group\n *\n * Consolidates git hooks management under `workflow hooks <subcommand>`:\n * - install: Install git hooks for the project\n * - uninstall: Remove installed git hooks\n * - status: Show current hooks installation status\n * - test: Test that hooks are properly installed\n */\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { hooksCommand } from \"../hooks.js\";\n\n// Re-export for backward compatibility\nexport { hooksCommand };\n\n/**\n * Create individual action wrappers\n */\nasync function installAction(): Promise<void> {\n return hooksCommand(\"install\");\n}\n\nasync function uninstallAction(): Promise<void> {\n return hooksCommand(\"uninstall\");\n}\n\nasync function statusAction(): Promise<void> {\n return hooksCommand(\"status\");\n}\n\n/**\n * Hooks test command - validates hook installation with optional dry-run\n */\nasync function testAction(options: { dryRun?: boolean }): Promise<void> {\n console.log(chalk.bold.cyan(\"\\n🧪 Testing Git Hooks\\n\"));\n\n const fs = await import(\"fs\");\n const path = await import(\"path\");\n const cwd = process.cwd();\n const gitDir = path.join(cwd, \".git\");\n const hooksDir = path.join(gitDir, \"hooks\");\n\n // Check git repo exists\n if (!fs.existsSync(gitDir)) {\n console.log(chalk.red(\"✗ Not a git repository\"));\n process.exit(1);\n }\n\n // Check hooks directory\n if (!fs.existsSync(hooksDir)) {\n console.log(chalk.yellow(\" No hooks directory found\"));\n console.log(chalk.dim(\" Run: workflow hooks install\"));\n process.exit(1);\n }\n\n const hookTypes = [\"pre-commit\", \"commit-msg\"];\n let allInstalled = true;\n\n for (const hookType of hookTypes) {\n const hookPath = path.join(hooksDir, hookType);\n const exists = fs.existsSync(hookPath);\n const isExecutable = exists && (fs.statSync(hookPath).mode & 0o111) !== 0;\n // Check for \"workflow\" in hook content (covers \"Workflow Agent\" and \"workflow hooks\")\n const isWorkflowHook = exists && fs.readFileSync(hookPath, \"utf-8\").toLowerCase().includes(\"workflow\");\n\n if (exists && isExecutable && isWorkflowHook) {\n console.log(chalk.green(` ✓ ${hookType} - installed and executable`));\n } else if (exists && !isWorkflowHook) {\n console.log(chalk.yellow(` ⚠ ${hookType} - exists but not managed by workflow-agent`));\n allInstalled = false;\n } else if (exists && !isExecutable) {\n console.log(chalk.red(` ✗ ${hookType} - exists but not executable`));\n allInstalled = false;\n } else {\n console.log(chalk.red(` ✗ ${hookType} - not installed`));\n allInstalled = false;\n }\n }\n\n // Optional dry-run: simulate hook execution\n if (options.dryRun) {\n console.log(chalk.bold.cyan(\"\\n Dry-run hook simulation:\\n\"));\n\n // Simulate pre-commit\n console.log(chalk.dim(\" Simulating pre-commit hook...\"));\n const { verifyCommand } = await import(\"../verify.js\");\n try {\n await verifyCommand({ fix: false, dryRun: true, maxRetries: \"1\" });\n } catch {\n // Expected to potentially fail, that's ok for dry-run\n }\n }\n\n if (!allInstalled) {\n console.log(chalk.yellow(\"\\n Some hooks are not properly installed\"));\n console.log(chalk.dim(\" Run: workflow hooks install\"));\n process.exit(1);\n }\n\n console.log(chalk.green(\"\\n✓ All hooks are properly installed\"));\n}\n\n// Export individual actions for direct use\nexport { installAction as hooksInstallCommand };\nexport { uninstallAction as hooksUninstallCommand };\nexport { statusAction as hooksStatusCommand };\nexport { testAction as hooksTestCommand };\n\n/**\n * Create the hooks command group with all subcommands\n */\nexport function createHooksCommand(): Command {\n const hooksCmd = new Command(\"hooks\")\n .description(\"Manage git hooks for the project\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow hooks install ${chalk.dim(\"# Install git hooks\")}\n $ workflow hooks uninstall ${chalk.dim(\"# Remove git hooks\")}\n $ workflow hooks status ${chalk.dim(\"# Check hooks status\")}\n $ workflow hooks test ${chalk.dim(\"# Verify installation\")}\n $ workflow hooks test --dry-run ${chalk.dim(\"# Test with simulation\")}\n`,\n )\n .action(() => {\n // Show help if no subcommand provided\n hooksCmd.help();\n });\n\n // install subcommand\n hooksCmd\n .command(\"install\")\n .description(\"Install git hooks for the project\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Details:\")}\n Installs pre-commit and commit-msg hooks that:\n - Validate branch names\n - Validate commit message format\n - Run quality checks before commit\n\n If existing hooks are found, they will be wrapped\n so both the original and workflow hooks run.\n`,\n )\n .action(installAction);\n\n // uninstall subcommand\n hooksCmd\n .command(\"uninstall\")\n .description(\"Remove installed git hooks\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Details:\")}\n Removes workflow agent hooks from the project.\n If original hooks were wrapped, they will be restored.\n`,\n )\n .action(uninstallAction);\n\n // status subcommand\n hooksCmd\n .command(\"status\")\n .description(\"Show current hooks installation status\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Details:\")}\n Shows which git hooks are installed and whether\n they are managed by workflow agent.\n`,\n )\n .action(statusAction);\n\n // test subcommand\n hooksCmd\n .command(\"test\")\n .description(\"Test that hooks are properly installed\")\n .option(\"--dry-run\", \"Simulate hook execution without making changes\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Details:\")}\n Verifies that git hooks are properly installed and executable.\n Use --dry-run to simulate hook execution.\n`,\n )\n .action(testAction);\n\n return hooksCmd;\n}\n","/**\n * CLI command for managing git hooks\n * Provides install, uninstall, and status subcommands\n */\n\nimport chalk from \"chalk\";\nimport { loadConfig } from \"../../config/index.js\";\nimport {\n installHooks,\n uninstallHooks,\n getAllHooksStatus,\n hasGitRepo,\n} from \"../../utils/hooks.js\";\n\nexport async function hooksCommand(action: string) {\n const cwd = process.cwd();\n\n switch (action) {\n case \"install\":\n await installHooksAction(cwd);\n break;\n case \"uninstall\":\n await uninstallHooksAction(cwd);\n break;\n case \"status\":\n await statusHooksAction(cwd);\n break;\n default:\n console.error(chalk.red(`Unknown action: ${action}`));\n console.log(chalk.dim(\"Available actions: install, uninstall, status\"));\n process.exit(1);\n }\n}\n\nasync function installHooksAction(cwd: string) {\n console.log(chalk.bold.cyan(\"\\n🔗 Installing Workflow Agent Git Hooks\\n\"));\n\n // Check for git repo\n if (!hasGitRepo(cwd)) {\n console.error(chalk.red(\"✗ No git repository found\"));\n console.log(chalk.yellow(\" Run: git init\"));\n process.exit(1);\n }\n\n // Load config for hook settings\n const config = await loadConfig();\n const hooksConfig = config?.hooks;\n\n // Install hooks\n const results = await installHooks(hooksConfig, cwd);\n\n let hasErrors = false;\n for (const result of results) {\n if (result.success) {\n if (result.wrappedExisting) {\n console.log(\n chalk.green(\n `✓ Installed ${result.hookType} hook (wrapped existing hook)`,\n ),\n );\n } else {\n console.log(chalk.green(`✓ Installed ${result.hookType} hook`));\n }\n } else {\n console.error(\n chalk.red(`✗ Failed to install ${result.hookType}: ${result.error}`),\n );\n hasErrors = true;\n }\n }\n\n if (!hasErrors) {\n console.log(chalk.green(\"\\n✓ Git hooks installed successfully\"));\n console.log(chalk.dim(\"\\nHooks will run automatically on commit.\"));\n console.log(chalk.dim(\"They will be skipped in CI environments.\"));\n } else {\n process.exit(1);\n }\n}\n\nasync function uninstallHooksAction(cwd: string) {\n console.log(chalk.bold.cyan(\"\\n🔓 Uninstalling Workflow Agent Git Hooks\\n\"));\n\n // Check for git repo\n if (!hasGitRepo(cwd)) {\n console.error(chalk.red(\"✗ No git repository found\"));\n process.exit(1);\n }\n\n // Uninstall hooks\n const results = await uninstallHooks(cwd);\n\n let hasErrors = false;\n for (const result of results) {\n if (result.success) {\n if (result.wrappedExisting) {\n console.log(\n chalk.green(`✓ Removed ${result.hookType} hook (restored original)`),\n );\n } else {\n console.log(chalk.green(`✓ Removed ${result.hookType} hook`));\n }\n } else if (result.error) {\n console.error(\n chalk.red(`✗ Failed to remove ${result.hookType}: ${result.error}`),\n );\n hasErrors = true;\n }\n }\n\n if (!hasErrors) {\n console.log(chalk.green(\"\\n✓ Git hooks uninstalled successfully\"));\n } else {\n process.exit(1);\n }\n}\n\nasync function statusHooksAction(cwd: string) {\n console.log(chalk.bold.cyan(\"\\n📊 Workflow Agent Git Hooks Status\\n\"));\n\n // Check for git repo\n if (!hasGitRepo(cwd)) {\n console.error(chalk.red(\"✗ No git repository found\"));\n process.exit(1);\n }\n\n // Get hook status\n const statuses = await getAllHooksStatus(cwd);\n\n for (const status of statuses) {\n const icon = status.installed ? \"✓\" : \"✗\";\n const color = status.installed ? chalk.green : chalk.yellow;\n\n let message = `${icon} ${status.hookType}`;\n\n if (status.installed) {\n message += \" - installed\";\n if (status.wrappedOriginal) {\n message += \" (wrapping original hook)\";\n }\n } else if (status.hasExistingHook) {\n message += \" - existing hook (not managed by Workflow Agent)\";\n } else {\n message += \" - not installed\";\n }\n\n console.log(color(message));\n }\n\n const allInstalled = statuses.every((s) => s.installed);\n if (!allInstalled) {\n console.log(chalk.dim(\"\\nTo install hooks: workflow hooks install\"));\n }\n}\n","/**\n * Solution Command Group\n *\n * Consolidates solution pattern commands under `workflow solution <subcommand>`:\n * - capture: Capture a solution pattern from working code\n * - create: Create a new solution pattern manually\n * - show: Display details of a specific solution\n * - search: Search for solution patterns\n * - list: List all solution patterns\n * - apply: Apply a solution pattern to the current project\n * - export: Export solutions to a file\n * - import: Import solutions from a file\n * - analyze: Analyze codebase for potential solutions\n * - deprecate: Deprecate a solution pattern\n * - stats: Show solution pattern statistics\n */\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n solutionCaptureCommand,\n solutionCreateCommand,\n solutionShowCommand,\n solutionSearchCommand,\n solutionListCommand,\n solutionApplyCommand,\n solutionExportCommand,\n solutionImportCommand,\n solutionAnalyzeCommand,\n solutionDeprecateCommand,\n solutionStatsCommand,\n} from \"../solution.js\";\n\n/**\n * Create the solution command group with all subcommands\n */\nexport function createSolutionCommand(): Command {\n const solutionCmd = new Command(\"solution\")\n .description(\"Manage solution patterns for code reuse\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution capture --path ./src/auth ${chalk.dim(\"# Capture from path\")}\n $ workflow solution create --name \"My Auth\" ${chalk.dim(\"# Create manually\")}\n $ workflow solution show abc123 ${chalk.dim(\"# Show solution details\")}\n $ workflow solution search \"jwt auth\" ${chalk.dim(\"# Search solutions\")}\n $ workflow solution list ${chalk.dim(\"# List all solutions\")}\n $ workflow solution list --category auth ${chalk.dim(\"# List by category\")}\n $ workflow solution apply abc123 ${chalk.dim(\"# Apply a solution\")}\n $ workflow solution apply abc123 --dry-run ${chalk.dim(\"# Preview application\")}\n $ workflow solution export --format json ${chalk.dim(\"# Export solutions\")}\n $ workflow solution import solutions.json ${chalk.dim(\"# Import solutions\")}\n $ workflow solution analyze ${chalk.dim(\"# Find opportunities\")}\n $ workflow solution stats ${chalk.dim(\"# Show statistics\")}\n`,\n )\n .action(() => {\n // Show help if no subcommand provided\n solutionCmd.help();\n });\n\n // capture subcommand\n solutionCmd\n .command(\"capture\")\n .description(\"Capture a solution pattern from working code\")\n .option(\"--name <name>\", \"Solution name\")\n .option(\"--description <desc>\", \"Solution description\")\n .option(\n \"--category <cat>\",\n \"Category (auth, api, database, ui, testing, deployment, integrations, performance, security, other)\",\n )\n .option(\"--keywords <kw>\", \"Comma-separated keywords\")\n .option(\"--path <path>\", \"Path to the solution directory\")\n .option(\"--anonymize\", \"Anonymize sensitive data in code\")\n .option(\"--private\", \"Keep solution private (not synced)\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution capture ${chalk.dim(\"# Interactive mode\")}\n $ workflow solution capture --path ./src/auth ${chalk.dim(\"# Specify path\")}\n $ workflow solution capture --name \"JWT Auth\" \\\\\n --category auth --keywords jwt,login ${chalk.dim(\"# With metadata\")}\n $ workflow solution capture --anonymize ${chalk.dim(\"# Anonymize secrets\")}\n $ workflow solution capture --private ${chalk.dim(\"# Keep private\")}\n`,\n )\n .action(solutionCaptureCommand);\n\n // create subcommand\n solutionCmd\n .command(\"create\")\n .description(\"Create a new solution pattern manually\")\n .option(\"--name <name>\", \"Solution name\")\n .option(\"--description <desc>\", \"Solution description\")\n .option(\"--category <cat>\", \"Category\")\n .option(\"--keywords <kw>\", \"Comma-separated keywords\")\n .option(\"--framework <fw>\", \"Target framework\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution create ${chalk.dim(\"# Interactive mode\")}\n $ workflow solution create --name \"Custom Auth\" ${chalk.dim(\"# With name\")}\n`,\n )\n .action(solutionCreateCommand);\n\n // show subcommand\n solutionCmd\n .command(\"show <solutionId>\")\n .description(\"Display details of a specific solution pattern\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution show abc123 ${chalk.dim(\"# Show by ID\")}\n`,\n )\n .action(solutionShowCommand);\n\n // search subcommand\n solutionCmd\n .command(\"search <query>\")\n .description(\"Search for solution patterns\")\n .option(\"--category <cat>\", \"Filter by category\")\n .option(\"--framework <fw>\", \"Filter by framework\")\n .option(\"--limit <n>\", \"Maximum results\", \"10\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution search \"jwt authentication\" ${chalk.dim(\"# Search by keywords\")}\n $ workflow solution search auth --category security ${chalk.dim(\"# With category filter\")}\n $ workflow solution search api --framework next ${chalk.dim(\"# With framework filter\")}\n $ workflow solution search database --limit 5 ${chalk.dim(\"# Limit results\")}\n`,\n )\n .action(solutionSearchCommand);\n\n // list subcommand\n solutionCmd\n .command(\"list\")\n .description(\"List all solution patterns\")\n .option(\"--category <cat>\", \"Filter by category\")\n .option(\"--framework <fw>\", \"Filter by framework\")\n .option(\"--deprecated\", \"Include deprecated solutions\")\n .option(\"--limit <n>\", \"Maximum results\", \"20\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution list ${chalk.dim(\"# List all solutions\")}\n $ workflow solution list --category auth ${chalk.dim(\"# Filter by category\")}\n $ workflow solution list --deprecated ${chalk.dim(\"# Include deprecated\")}\n $ workflow solution list --limit 50 ${chalk.dim(\"# More results\")}\n`,\n )\n .action(solutionListCommand);\n\n // apply subcommand\n solutionCmd\n .command(\"apply <solutionId>\")\n .description(\"Apply a solution pattern to the current project\")\n .option(\"--output <dir>\", \"Output directory\")\n .option(\"--dry-run\", \"Preview without applying\")\n .option(\"--include-tests\", \"Include test files\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution apply abc123 ${chalk.dim(\"# Apply solution\")}\n $ workflow solution apply abc123 --dry-run ${chalk.dim(\"# Preview changes\")}\n $ workflow solution apply abc123 --output ./src ${chalk.dim(\"# Custom output dir\")}\n $ workflow solution apply abc123 --include-tests ${chalk.dim(\"# Include test files\")}\n`,\n )\n .action(solutionApplyCommand);\n\n // export subcommand\n solutionCmd\n .command(\"export\")\n .description(\"Export solution patterns to a file\")\n .option(\"-o, --output <path>\", \"Output file path\", \"solutions-export.json\")\n .option(\"-f, --format <format>\", \"Output format (json, yaml)\", \"json\")\n .option(\"--category <cat>\", \"Filter by category\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution export ${chalk.dim(\"# Export all as JSON\")}\n $ workflow solution export --format yaml ${chalk.dim(\"# Export as YAML\")}\n $ workflow solution export --category auth ${chalk.dim(\"# Export auth only\")}\n $ workflow solution export -o backup.json ${chalk.dim(\"# Custom output path\")}\n`,\n )\n .action(solutionExportCommand);\n\n // import subcommand\n solutionCmd\n .command(\"import <file>\")\n .description(\"Import solution patterns from a file\")\n .option(\"-f, --format <format>\", \"Input format (json, yaml)\", \"json\")\n .option(\"--dry-run\", \"Preview import without making changes\")\n .option(\"--no-merge\", \"Skip existing solutions instead of merging\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution import solutions.json ${chalk.dim(\"# Import from JSON\")}\n $ workflow solution import backup.json --dry-run ${chalk.dim(\"# Preview import\")}\n`,\n )\n .action(solutionImportCommand);\n\n // analyze subcommand\n solutionCmd\n .command(\"analyze\")\n .description(\"Analyze codebase for potential solution patterns\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Details:\")}\n Scans your codebase for common patterns that could be\n captured as reusable solutions, such as:\n - Authentication modules\n - API layers\n - Database utilities\n - UI component libraries\n`,\n )\n .action(solutionAnalyzeCommand);\n\n // deprecate subcommand\n solutionCmd\n .command(\"deprecate <solutionId> <reason>\")\n .description(\"Deprecate a solution pattern\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution deprecate abc123 \"Replaced by better approach\"\n $ workflow solution deprecate xyz789 \"Framework no longer supported\"\n`,\n )\n .action(solutionDeprecateCommand);\n\n // stats subcommand\n solutionCmd\n .command(\"stats\")\n .description(\"Show solution pattern statistics\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow solution stats ${chalk.dim(\"# Show all statistics\")}\n`,\n )\n .action(solutionStatsCommand);\n\n return solutionCmd;\n}\n\n// Re-export individual commands for backward compatibility\nexport {\n solutionCaptureCommand,\n solutionCreateCommand,\n solutionShowCommand,\n solutionSearchCommand,\n solutionListCommand,\n solutionApplyCommand,\n solutionExportCommand,\n solutionImportCommand,\n solutionAnalyzeCommand,\n solutionDeprecateCommand,\n solutionStatsCommand,\n} from \"../solution.js\";\n","import chalk from \"chalk\";\nimport * as p from \"@clack/prompts\";\nimport * as path from \"node:path\";\nimport {\n PatternStore,\n CodeAnalyzer,\n type SolutionPattern,\n type SolutionCategory,\n type SolutionFile,\n type DependencyVersion,\n} from \"@hawkinside_out/workflow-improvement-tracker\";\n\n// ============================================\n// Types\n// ============================================\n\ninterface SolutionCaptureOptions {\n name?: string;\n description?: string;\n category?: SolutionCategory;\n keywords?: string;\n path?: string;\n anonymize?: boolean;\n private?: boolean;\n}\n\ninterface SolutionSearchOptions {\n category?: SolutionCategory;\n framework?: string;\n limit?: number;\n}\n\ninterface SolutionListOptions {\n category?: SolutionCategory;\n framework?: string;\n deprecated?: boolean;\n limit?: number;\n}\n\ninterface SolutionApplyOptions {\n output?: string;\n dryRun?: boolean;\n includeTests?: boolean;\n}\n\n// ============================================\n// Helper Functions\n// ============================================\n\nfunction getWorkspacePath(): string {\n return process.cwd();\n}\n\nfunction formatDate(isoString: string): string {\n return new Date(isoString).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nfunction formatCategory(category: SolutionCategory): string {\n const icons: Record<SolutionCategory, string> = {\n auth: \"🔐\",\n api: \"🌐\",\n database: \"💾\",\n ui: \"🎨\",\n testing: \"🧪\",\n deployment: \"🚀\",\n integrations: \"🔗\",\n performance: \"⚡\",\n security: \"🛡️\",\n other: \"📦\",\n state: \"🔄\",\n forms: \"📝\",\n \"error-handling\": \"⚠️\",\n caching: \"💨\",\n };\n return `${icons[category]} ${category}`;\n}\n\nfunction truncate(str: string, maxLen: number): string {\n if (str.length <= maxLen) return str;\n return str.slice(0, maxLen - 3) + \"...\";\n}\n\n// ============================================\n// solution:capture Command\n// ============================================\n\n/**\n * Capture a solution pattern from working code\n */\nexport async function solutionCaptureCommand(options: SolutionCaptureOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n📦 Capture Solution Pattern\\n\"));\n\n // Get the directory to analyze\n let targetPath = options.path;\n if (!targetPath) {\n const pathInput = await p.text({\n message: \"Path to the solution directory:\",\n placeholder: \"./src/auth\",\n validate: (val) => {\n if (!val) return \"Path is required\";\n return undefined;\n },\n });\n\n if (p.isCancel(pathInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n targetPath = pathInput as string;\n }\n\n // Resolve to absolute path\n const absolutePath = path.isAbsolute(targetPath)\n ? targetPath\n : path.resolve(cwd, targetPath);\n\n // Get pattern name\n let name = options.name;\n if (!name) {\n const nameInput = await p.text({\n message: \"Solution name:\",\n placeholder: \"JWT Authentication\",\n validate: (val) => {\n if (!val || val.length < 3) return \"Name must be at least 3 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(nameInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n name = nameInput as string;\n }\n\n // Get description\n let description = options.description;\n if (!description) {\n const descInput = await p.text({\n message: \"Solution description:\",\n placeholder: \"Complete JWT-based authentication with refresh tokens\",\n validate: (val) => {\n if (!val || val.length < 10)\n return \"Description must be at least 10 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(descInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n description = descInput as string;\n }\n\n // Get category\n let category = options.category;\n if (!category) {\n const categoryChoice = await p.select({\n message: \"Solution category:\",\n options: [\n { value: \"auth\", label: \"🔐 Authentication\" },\n { value: \"api\", label: \"🌐 API\" },\n { value: \"database\", label: \"💾 Database\" },\n { value: \"ui\", label: \"🎨 UI/Components\" },\n { value: \"testing\", label: \"🧪 Testing\" },\n { value: \"deployment\", label: \"🚀 Deployment\" },\n { value: \"integrations\", label: \"🔗 Integrations\" },\n { value: \"performance\", label: \"⚡ Performance\" },\n { value: \"security\", label: \"🛡️ Security\" },\n { value: \"state\", label: \"🔄 State Management\" },\n { value: \"forms\", label: \"📝 Forms\" },\n { value: \"error-handling\", label: \"⚠️ Error Handling\" },\n { value: \"caching\", label: \"💨 Caching\" },\n { value: \"other\", label: \"📦 Other\" },\n ],\n });\n\n if (p.isCancel(categoryChoice)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n category = categoryChoice as SolutionCategory;\n }\n\n // Get keywords\n let keywords: string[] = [];\n if (options.keywords) {\n keywords = options.keywords.split(\",\").map((k) => k.trim());\n } else {\n const keywordsInput = await p.text({\n message: \"Keywords (comma-separated):\",\n placeholder: \"jwt, authentication, login, refresh-token\",\n });\n\n if (p.isCancel(keywordsInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n if (keywordsInput) {\n keywords = (keywordsInput as string).split(\",\").map((k) => k.trim());\n }\n }\n\n // Analyze the directory\n const spinner = p.spinner();\n spinner.start(\"Analyzing solution...\");\n\n const analyzer = new CodeAnalyzer({\n anonymize: options.anonymize ?? false,\n });\n\n try {\n const pattern = await analyzer.createSolutionPattern(\n absolutePath,\n name,\n description,\n category,\n keywords,\n { isPrivate: options.private ?? false },\n );\n\n spinner.stop(\"Solution analyzed\");\n\n // Show summary\n console.log(chalk.green(\"\\n✓ Solution captured successfully!\\n\"));\n console.log(chalk.dim(\"─\".repeat(50)));\n console.log(`${chalk.bold(\"Name:\")} ${pattern.name}`);\n console.log(\n `${chalk.bold(\"Category:\")} ${formatCategory(pattern.category)}`,\n );\n console.log(\n `${chalk.bold(\"Files:\")} ${pattern.implementation.files.length}`,\n );\n console.log(\n `${chalk.bold(\"Dependencies:\")} ${pattern.implementation.dependencies.length}`,\n );\n console.log(\n `${chalk.bold(\"Framework:\")} ${pattern.compatibility.framework || \"generic\"}`,\n );\n console.log(chalk.dim(\"─\".repeat(50)));\n\n // Confirm save\n const confirm = await p.confirm({\n message: \"Save this solution pattern?\",\n initialValue: true,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n p.cancel(\"Solution not saved\");\n process.exit(0);\n }\n\n // Save the pattern\n await store.saveSolution(pattern);\n console.log(chalk.green(`\\n✓ Solution saved with ID: ${pattern.id}\\n`));\n } catch (error) {\n spinner.stop(\"Analysis failed\");\n console.error(chalk.red(`\\n✗ Error: ${(error as Error).message}\\n`));\n process.exit(1);\n }\n}\n\n// ============================================\n// solution:search Command\n// ============================================\n\n/**\n * Search for solution patterns\n */\nexport async function solutionSearchCommand(\n query: string,\n options: SolutionSearchOptions,\n) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n🔍 Search Solution Patterns\\n\"));\n\n // Convert query to keywords array\n const keywords = query.split(/\\s+/).filter((k) => k.length > 0);\n\n const result = await store.searchSolutions(keywords, {\n category: options.category,\n framework: options.framework,\n limit: options.limit ?? 10,\n });\n\n if (!result.success || !result.data) {\n console.error(chalk.red(`\\n✗ Search failed: ${result.error}\\n`));\n return;\n }\n\n const solutions = result.data;\n\n if (solutions.length === 0) {\n console.log(chalk.yellow(\"No solutions found matching your query.\\n\"));\n console.log(chalk.dim(\"Try different keywords or fewer filters.\"));\n return;\n }\n\n console.log(chalk.green(`Found ${solutions.length} solution(s):\\n`));\n console.log(chalk.dim(\"─\".repeat(70)));\n\n for (const solution of solutions) {\n console.log(\n `${chalk.bold(solution.name)} ${chalk.dim(`(${solution.id.slice(0, 8)})`)}`,\n );\n console.log(` ${formatCategory(solution.category)}`);\n console.log(` ${chalk.dim(truncate(solution.description, 60))}`);\n console.log(\n ` Files: ${solution.implementation.files.length} | ` +\n `Framework: ${solution.compatibility.framework || \"generic\"} | ` +\n `Uses: ${solution.metrics.applications}`,\n );\n console.log(chalk.dim(\"─\".repeat(70)));\n }\n\n console.log(\n chalk.dim(\"\\nUse 'workflow solution:apply <id>' to apply a solution.\"),\n );\n}\n\n// ============================================\n// solution:list Command\n// ============================================\n\n/**\n * List all solution patterns\n */\nexport async function solutionListCommand(options: SolutionListOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n📋 Solution Patterns\\n\"));\n\n const result = await store.listSolutions({\n category: options.category,\n framework: options.framework,\n includeDeprecated: options.deprecated ?? false,\n limit: options.limit ?? 20,\n });\n\n if (!result.success || !result.data) {\n console.error(chalk.red(`\\n✗ List failed: ${result.error}\\n`));\n return;\n }\n\n const solutions = result.data;\n\n if (solutions.length === 0) {\n console.log(chalk.yellow(\"No solutions found.\\n\"));\n console.log(\n chalk.dim(\"Use 'workflow solution:capture' to capture a solution.\"),\n );\n return;\n }\n\n console.log(chalk.green(`${solutions.length} solution(s):\\n`));\n\n // Group by category\n const byCategory = new Map<SolutionCategory, SolutionPattern[]>();\n for (const solution of solutions) {\n const list = byCategory.get(solution.category) || [];\n list.push(solution);\n byCategory.set(solution.category, list);\n }\n\n for (const [category, items] of byCategory) {\n console.log(chalk.bold(`\\n${formatCategory(category)}`));\n console.log(chalk.dim(\"─\".repeat(50)));\n\n for (const solution of items) {\n const deprecated = solution.deprecatedAt\n ? chalk.red(\" [DEPRECATED]\")\n : \"\";\n console.log(\n ` ${chalk.cyan(solution.id.slice(0, 8))} ${solution.name}${deprecated}`,\n );\n console.log(` ${chalk.dim(truncate(solution.description, 50))}`);\n console.log(\n chalk.dim(\n ` Created: ${formatDate(solution.createdAt)} | Files: ${solution.implementation.files.length}`,\n ),\n );\n }\n }\n\n console.log(\n chalk.dim(\n \"\\nUse 'workflow solution:search <query>' to find specific solutions.\",\n ),\n );\n}\n\n// ============================================\n// solution:apply Command\n// ============================================\n\n/**\n * Apply a solution pattern to the current project\n */\nexport async function solutionApplyCommand(\n solutionId: string,\n options: SolutionApplyOptions,\n) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n🚀 Apply Solution Pattern\\n\"));\n\n // Get the solution\n const result = await store.getSolution(solutionId);\n if (!result.success || !result.data) {\n console.error(chalk.red(`\\n✗ Solution not found: ${solutionId}\\n`));\n process.exit(1);\n }\n\n const solution = result.data;\n\n // Check for deprecation\n if (solution.deprecatedAt) {\n console.log(\n chalk.yellow(\n `⚠️ This solution is deprecated: ${solution.deprecationReason || \"No reason provided\"}\\n`,\n ),\n );\n const proceed = await p.confirm({\n message: \"Do you want to continue?\",\n initialValue: false,\n });\n\n if (p.isCancel(proceed) || !proceed) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n }\n\n // Show solution details\n console.log(chalk.bold(`Solution: ${solution.name}`));\n console.log(chalk.dim(solution.description));\n console.log();\n\n // Show files that will be created\n console.log(chalk.bold(\"Files to create:\"));\n const filesToApply: SolutionFile[] = options.includeTests\n ? solution.implementation.files\n : solution.implementation.files.filter(\n (f: SolutionFile) => f.role !== \"test\",\n );\n\n for (const file of filesToApply) {\n console.log(chalk.dim(` • ${file.path} (${file.role})`));\n }\n console.log();\n\n // Show dependencies\n if (solution.implementation.dependencies.length > 0) {\n console.log(chalk.bold(\"Dependencies to install:\"));\n for (const dep of solution.implementation.dependencies) {\n console.log(chalk.dim(` • ${dep.name}@${dep.version}`));\n }\n console.log();\n }\n\n // Show environment variables\n if (solution.implementation.envVars.length > 0) {\n console.log(chalk.bold(\"Environment variables needed:\"));\n for (const env of solution.implementation.envVars) {\n const required = env.required ? chalk.red(\"*\") : \"\";\n console.log(chalk.dim(` • ${env.name}${required}`));\n }\n console.log();\n }\n\n if (options.dryRun) {\n console.log(chalk.yellow(\"Dry run mode - no files were created.\\n\"));\n return;\n }\n\n // Confirm application\n const confirm = await p.confirm({\n message: \"Apply this solution?\",\n initialValue: true,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n // Apply the solution\n const spinner = p.spinner();\n spinner.start(\"Applying solution...\");\n\n try {\n const outputDir = options.output || cwd;\n const fs = await import(\"node:fs\");\n const pathModule = await import(\"node:path\");\n\n for (const file of filesToApply) {\n const filePath = pathModule.join(outputDir, file.path);\n const dir = pathModule.dirname(filePath);\n\n await fs.promises.mkdir(dir, { recursive: true });\n await fs.promises.writeFile(filePath, file.content);\n }\n\n // Update metrics\n await store.updateSolutionMetrics(solution.id, true);\n\n spinner.stop(\"Solution applied\");\n console.log(chalk.green(`\\n✓ Solution applied successfully!\\n`));\n console.log(chalk.dim(`Created ${filesToApply.length} file(s).`));\n\n // Show next steps\n if (solution.implementation.dependencies.length > 0) {\n console.log(chalk.cyan(\"\\nNext step: Install dependencies with:\"));\n const deps = solution.implementation.dependencies\n .map((d: DependencyVersion) => `${d.name}@${d.version}`)\n .join(\" \");\n console.log(chalk.dim(` npm install ${deps}`));\n }\n } catch (error) {\n spinner.stop(\"Application failed\");\n\n // Record failure\n await store.updateSolutionMetrics(solution.id, false);\n\n console.error(chalk.red(`\\n✗ Error: ${(error as Error).message}\\n`));\n process.exit(1);\n }\n}\n\n// ============================================\n// solution:deprecate Command\n// ============================================\n\n/**\n * Deprecate a solution pattern\n */\nexport async function solutionDeprecateCommand(\n solutionId: string,\n reason: string,\n) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n⚠️ Deprecate Solution Pattern\\n\"));\n\n const result = await store.getSolution(solutionId);\n if (!result.success || !result.data) {\n console.error(chalk.red(`\\n✗ Solution not found: ${solutionId}\\n`));\n process.exit(1);\n }\n\n const solution = result.data;\n\n console.log(`Solution: ${chalk.bold(solution.name)}`);\n console.log(`Reason: ${reason}\\n`);\n\n const confirm = await p.confirm({\n message: \"Deprecate this solution?\",\n initialValue: false,\n });\n\n if (p.isCancel(confirm) || !confirm) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n\n await store.deprecateSolution(solutionId, reason);\n console.log(chalk.green(`\\n✓ Solution deprecated.\\n`));\n}\n\n// ============================================\n// solution:stats Command\n// ============================================\n\n/**\n * Show solution pattern statistics\n */\nexport async function solutionStatsCommand() {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n📊 Solution Pattern Statistics\\n\"));\n\n const stats = await store.getStats();\n\n console.log(chalk.dim(\"─\".repeat(40)));\n console.log(`${chalk.bold(\"Solutions:\")} ${stats.totalSolutions}`);\n console.log(` Active: ${stats.totalSolutions - stats.deprecatedSolutions}`);\n console.log(` Deprecated: ${stats.deprecatedSolutions}`);\n console.log(` Private: ${stats.privateSolutions}`);\n console.log(` Synced: ${stats.syncedSolutions}`);\n console.log(chalk.dim(\"─\".repeat(40)));\n console.log(`${chalk.bold(\"Fixes:\")} ${stats.totalFixes}`);\n console.log(`${chalk.bold(\"Blueprints:\")} ${stats.totalBlueprints}`);\n console.log(chalk.dim(\"─\".repeat(40)));\n\n // Category breakdown\n console.log(`\\n${chalk.bold(\"By Category:\")}`);\n const listResult = await store.listSolutions({ limit: 1000 });\n\n if (listResult.success && listResult.data) {\n const categories = new Map<SolutionCategory, number>();\n\n for (const s of listResult.data) {\n categories.set(s.category, (categories.get(s.category) || 0) + 1);\n }\n\n for (const [category, count] of categories) {\n console.log(` ${formatCategory(category)}: ${count}`);\n }\n }\n\n console.log();\n}\n\n// ============================================\n// solution:create Command\n// ============================================\n\ninterface SolutionCreateOptions {\n name?: string;\n description?: string;\n category?: SolutionCategory;\n keywords?: string;\n framework?: string;\n}\n\n/**\n * Create a new solution pattern manually (without capturing from files)\n */\nexport async function solutionCreateCommand(options: SolutionCreateOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n✨ Create Solution Pattern\\n\"));\n\n // Get pattern name\n let name = options.name;\n if (!name) {\n const nameInput = await p.text({\n message: \"Solution name:\",\n placeholder: \"My Custom Solution\",\n validate: (val) => {\n if (!val || val.length < 3) return \"Name must be at least 3 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(nameInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n name = nameInput as string;\n }\n\n // Get description\n let description = options.description;\n if (!description) {\n const descInput = await p.text({\n message: \"Solution description:\",\n placeholder: \"A description of what this solution does\",\n validate: (val) => {\n if (!val || val.length < 10)\n return \"Description must be at least 10 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(descInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n description = descInput as string;\n }\n\n // Get category\n let category = options.category;\n if (!category) {\n const categoryChoice = await p.select({\n message: \"Solution category:\",\n options: [\n { value: \"auth\", label: \"🔐 Authentication\" },\n { value: \"api\", label: \"🌐 API\" },\n { value: \"database\", label: \"💾 Database\" },\n { value: \"ui\", label: \"🎨 UI/Components\" },\n { value: \"testing\", label: \"🧪 Testing\" },\n { value: \"deployment\", label: \"🚀 Deployment\" },\n { value: \"integrations\", label: \"🔗 Integrations\" },\n { value: \"performance\", label: \"⚡ Performance\" },\n { value: \"security\", label: \"🛡️ Security\" },\n { value: \"other\", label: \"📦 Other\" },\n ],\n });\n\n if (p.isCancel(categoryChoice)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n category = categoryChoice as SolutionCategory;\n }\n\n // Get keywords\n let keywords: string[] = [];\n if (options.keywords) {\n keywords = options.keywords.split(\",\").map((k) => k.trim());\n } else {\n const keywordsInput = await p.text({\n message: \"Keywords (comma-separated):\",\n placeholder: \"auth, jwt, login\",\n });\n\n if (p.isCancel(keywordsInput)) {\n p.cancel(\"Operation cancelled\");\n process.exit(0);\n }\n if (keywordsInput) {\n keywords = (keywordsInput as string).split(\",\").map((k) => k.trim());\n }\n }\n\n const framework = options.framework || \"generic\";\n const now = new Date().toISOString();\n\n // Create the solution pattern\n const solution: SolutionPattern = {\n id: crypto.randomUUID(),\n name,\n description,\n category,\n keywords,\n implementation: {\n files: [],\n dependencies: [],\n devDependencies: [],\n envVars: [],\n },\n compatibility: {\n framework,\n frameworkVersion: \">=1.0.0\",\n runtime: \"node\",\n runtimeVersion: \">=18.0.0\",\n dependencies: [],\n },\n metrics: {\n applications: 0,\n successes: 0,\n failures: 0,\n successRate: 0,\n },\n isPrivate: true,\n createdAt: now,\n updatedAt: now,\n };\n\n // Save the pattern\n await store.saveSolution(solution);\n\n console.log(chalk.green(\"\\n✓ Solution pattern created!\\n\"));\n console.log(chalk.dim(` ID: ${solution.id}`));\n console.log(chalk.dim(` Name: ${name}`));\n console.log(chalk.dim(` Category: ${category}`));\n console.log(chalk.dim(`\\nAdd files using 'workflow solution capture --path <dir>'`));\n}\n\n// ============================================\n// solution:show Command\n// ============================================\n\n/**\n * Show details of a specific solution pattern\n */\nexport async function solutionShowCommand(solutionId: string) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n📋 Solution Details\\n\"));\n\n const result = await store.getSolution(solutionId);\n if (!result.success || !result.data) {\n console.error(chalk.red(`\\n✗ Solution not found: ${solutionId}\\n`));\n process.exit(1);\n }\n\n const solution = result.data;\n\n console.log(chalk.dim(\"─\".repeat(60)));\n console.log(chalk.bold(`Name: ${solution.name}`));\n console.log(`ID: ${chalk.dim(solution.id)}`);\n console.log(`Category: ${formatCategory(solution.category)}`);\n console.log(`Description: ${solution.description}`);\n console.log(chalk.dim(\"─\".repeat(60)));\n\n // Compatibility\n console.log(chalk.bold(\"\\nCompatibility:\"));\n console.log(` Framework: ${solution.compatibility.framework || \"generic\"}`);\n console.log(` Version: ${solution.compatibility.frameworkVersion}`);\n console.log(` Runtime: ${solution.compatibility.runtime} ${solution.compatibility.runtimeVersion}`);\n\n // Implementation\n console.log(chalk.bold(\"\\nImplementation:\"));\n console.log(` Files: ${solution.implementation.files.length}`);\n for (const file of solution.implementation.files) {\n console.log(chalk.dim(` • ${file.path} (${file.role})`));\n }\n\n if (solution.implementation.dependencies.length > 0) {\n console.log(` Dependencies: ${solution.implementation.dependencies.length}`);\n for (const dep of solution.implementation.dependencies) {\n console.log(chalk.dim(` • ${dep.name}@${dep.version}`));\n }\n }\n\n if (solution.implementation.envVars.length > 0) {\n console.log(` Environment Variables: ${solution.implementation.envVars.length}`);\n for (const env of solution.implementation.envVars) {\n const required = env.required ? chalk.red(\"*\") : \"\";\n console.log(chalk.dim(` • ${env.name}${required}`));\n }\n }\n\n // Metrics\n console.log(chalk.bold(\"\\nMetrics:\"));\n console.log(` Applications: ${solution.metrics.applications}`);\n console.log(` Success Rate: ${(solution.metrics.successRate * 100).toFixed(1)}%`);\n\n // Metadata\n console.log(chalk.bold(\"\\nMetadata:\"));\n console.log(` Created: ${formatDate(solution.createdAt)}`);\n console.log(` Updated: ${formatDate(solution.updatedAt)}`);\n console.log(` Private: ${solution.isPrivate ? \"Yes\" : \"No\"}`);\n if (solution.deprecatedAt) {\n console.log(chalk.red(` Deprecated: ${formatDate(solution.deprecatedAt)}`));\n console.log(chalk.dim(` Reason: ${solution.deprecationReason || \"No reason provided\"}`));\n }\n\n console.log();\n}\n\n// ============================================\n// solution:export Command\n// ============================================\n\ninterface SolutionExportOptions {\n output?: string;\n format?: \"json\" | \"yaml\";\n category?: SolutionCategory;\n}\n\n/**\n * Export solution patterns to a file\n */\nexport async function solutionExportCommand(options: SolutionExportOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const format = options.format ?? \"json\";\n const outputPath = options.output ?? `solutions-export.${format}`;\n\n console.log(chalk.cyan(\"\\n📤 Exporting Solution Patterns\\n\"));\n\n const result = await store.listSolutions({\n solutionCategory: options.category,\n limit: 1000,\n });\n\n if (!result.success || !result.data) {\n console.error(chalk.red(`\\n✗ Export failed: ${result.error}\\n`));\n process.exit(1);\n }\n\n const solutions = result.data;\n\n if (solutions.length === 0) {\n console.log(chalk.yellow(\" No solutions to export\"));\n return;\n }\n\n // Format output\n const fs = await import(\"node:fs\");\n const pathModule = await import(\"node:path\");\n\n let output: string;\n if (format === \"yaml\") {\n output = `# Workflow Agent Solutions Export\\n# Exported: ${new Date().toISOString()}\\n\\nsolutions:\\n`;\n for (const solution of solutions) {\n output += ` - id: ${solution.id}\\n`;\n output += ` name: \"${solution.name}\"\\n`;\n output += ` category: ${solution.category}\\n`;\n output += ` description: \"${solution.description}\"\\n\\n`;\n }\n } else {\n output = JSON.stringify(\n {\n version: \"1.0\",\n exportedAt: new Date().toISOString(),\n solutions,\n },\n null,\n 2,\n );\n }\n\n // Write file\n const fullOutputPath = pathModule.default.isAbsolute(outputPath)\n ? outputPath\n : pathModule.default.join(cwd, outputPath);\n\n await fs.promises.writeFile(fullOutputPath, output, \"utf-8\");\n\n console.log(chalk.green(` ✓ Exported ${solutions.length} solutions\\n`));\n console.log(chalk.dim(` Output: ${fullOutputPath}`));\n console.log(chalk.dim(` Format: ${format.toUpperCase()}`));\n}\n\n// ============================================\n// solution:import Command\n// ============================================\n\ninterface SolutionImportOptions {\n format?: \"json\" | \"yaml\";\n dryRun?: boolean;\n merge?: boolean;\n}\n\n/**\n * Import solution patterns from a file\n */\nexport async function solutionImportCommand(\n file: string,\n options: SolutionImportOptions,\n) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const dryRun = options.dryRun ?? false;\n const merge = options.merge ?? true;\n\n console.log(chalk.cyan(\"\\n📥 Importing Solution Patterns\\n\"));\n\n const fs = await import(\"node:fs\");\n const pathModule = await import(\"node:path\");\n\n const filePath = pathModule.default.isAbsolute(file) ? file : pathModule.default.join(cwd, file);\n\n if (!fs.existsSync(filePath)) {\n console.log(chalk.red(` ✗ File not found: ${filePath}`));\n process.exit(1);\n }\n\n const content = await fs.promises.readFile(filePath, \"utf-8\");\n\n let importData: { solutions?: SolutionPattern[] };\n\n try {\n if (file.endsWith(\".yaml\") || file.endsWith(\".yml\")) {\n console.log(chalk.yellow(\" YAML import not fully supported, treating as JSON\"));\n }\n importData = JSON.parse(content);\n } catch {\n console.log(chalk.red(\" ✗ Failed to parse import file\"));\n process.exit(1);\n }\n\n const solutions = importData.solutions || [];\n\n if (solutions.length === 0) {\n console.log(chalk.yellow(\" No solutions found in import file\"));\n return;\n }\n\n console.log(chalk.dim(` Found ${solutions.length} solutions\\n`));\n\n if (dryRun) {\n console.log(chalk.yellow(\" 🔍 Dry run - no changes will be made\\n\"));\n\n for (const solution of solutions) {\n console.log(chalk.dim(` Would import: ${solution.name} (${solution.id})`));\n }\n return;\n }\n\n // Import solutions\n let imported = 0;\n let skipped = 0;\n\n for (const solution of solutions) {\n const existing = await store.getSolution(solution.id);\n if (existing.success && existing.data && !merge) {\n console.log(chalk.yellow(` Skipped (exists): ${solution.name}`));\n skipped++;\n continue;\n }\n\n await store.saveSolution(solution);\n console.log(chalk.green(` ✓ Imported: ${solution.name}`));\n imported++;\n }\n\n console.log(chalk.green(`\\n ✓ Import complete`));\n console.log(chalk.dim(` Imported: ${imported}`));\n console.log(chalk.dim(` Skipped: ${skipped}`));\n}\n\n// ============================================\n// solution:analyze Command\n// ============================================\n\n/**\n * Analyze codebase for potential solution patterns\n */\nexport async function solutionAnalyzeCommand() {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const fs = await import(\"node:fs\");\n const pathModule = await import(\"node:path\");\n\n console.log(chalk.cyan(\"\\n🔍 Analyzing Codebase for Solution Patterns\\n\"));\n\n // Get existing solutions\n const existingResult = await store.listSolutions({ limit: 1000 });\n const existingNames = (existingResult.data || []).map((s) => s.name.toLowerCase());\n\n const opportunities: Array<{\n name: string;\n category: SolutionCategory;\n description: string;\n path: string;\n }> = [];\n\n // Check for common solution patterns\n const patterns = [\n { path: \"src/auth\", name: \"Authentication Module\", category: \"auth\" as SolutionCategory, desc: \"Authentication implementation\" },\n { path: \"src/lib/auth\", name: \"Auth Library\", category: \"auth\" as SolutionCategory, desc: \"Authentication utilities\" },\n { path: \"src/api\", name: \"API Layer\", category: \"api\" as SolutionCategory, desc: \"API routing structure\" },\n { path: \"app/api\", name: \"Next.js API Routes\", category: \"api\" as SolutionCategory, desc: \"Next.js API implementation\" },\n { path: \"src/db\", name: \"Database Layer\", category: \"database\" as SolutionCategory, desc: \"Database connection and queries\" },\n { path: \"src/lib/db\", name: \"Database Utilities\", category: \"database\" as SolutionCategory, desc: \"Database helper functions\" },\n { path: \"src/components/ui\", name: \"UI Components\", category: \"ui\" as SolutionCategory, desc: \"Reusable UI components\" },\n { path: \"src/hooks\", name: \"Custom Hooks\", category: \"ui\" as SolutionCategory, desc: \"React custom hooks\" },\n { path: \"__tests__\", name: \"Testing Setup\", category: \"testing\" as SolutionCategory, desc: \"Test configuration and utilities\" },\n { path: \".github/workflows\", name: \"CI/CD Pipeline\", category: \"deployment\" as SolutionCategory, desc: \"GitHub Actions workflows\" },\n { path: \"src/integrations\", name: \"Integrations\", category: \"integrations\" as SolutionCategory, desc: \"Third-party integrations\" },\n { path: \"src/middleware\", name: \"Middleware\", category: \"security\" as SolutionCategory, desc: \"Request middleware and guards\" },\n ];\n\n for (const pattern of patterns) {\n const fullPath = pathModule.default.join(cwd, pattern.path);\n if (fs.existsSync(fullPath) && !existingNames.includes(pattern.name.toLowerCase())) {\n opportunities.push({\n name: pattern.name,\n category: pattern.category,\n description: pattern.desc,\n path: pattern.path,\n });\n }\n }\n\n if (opportunities.length === 0) {\n console.log(chalk.green(\" ✓ No new solution opportunities found\"));\n console.log(chalk.dim(\"\\n Your solutions seem well-captured!\"));\n return;\n }\n\n console.log(chalk.bold(` Found ${opportunities.length} potential solutions:\\n`));\n\n for (const opp of opportunities) {\n console.log(` ${formatCategory(opp.category)}`);\n console.log(chalk.bold(` ${opp.name}`));\n console.log(chalk.dim(` ${opp.description}`));\n console.log(chalk.dim(` Path: ${opp.path}\\n`));\n }\n\n console.log(chalk.dim(\" To capture a solution:\"));\n console.log(chalk.cyan(\" workflow solution capture --path <path> --name <name>\"));\n}\n","/**\n * Learn Command Group\n *\n * Consolidates learning pattern commands under `workflow learn <subcommand>`:\n * - record: Record a new pattern from a successful implementation\n * - list: List recorded learning patterns\n * - apply: Apply a pattern to the current project\n * - capture: Capture files as a blueprint pattern\n * - analyze: Analyze codebase for learning opportunities\n * - export: Export patterns to a file\n * - import: Import patterns from a file\n * - sync: Sync patterns with remote registry\n * - config: Configure learning settings\n * - deprecate: Deprecate an outdated pattern\n * - publish: Mark pattern(s) as public for syncing\n * - stats: Show learning statistics\n * - clean: Clean old or stale patterns\n * - validate: Validate pattern files\n */\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport {\n learnRecordCommand,\n learnListCommand,\n learnApplyCommand,\n learnCaptureCommand,\n learnConfigCommand,\n learnDeprecateCommand,\n learnPublishCommand,\n learnStatsCommand,\n learnValidateCommand,\n learnAnalyzeCommand,\n learnExportCommand,\n learnImportCommand,\n learnCleanCommand,\n} from \"../learn.js\";\n\n/**\n * Create the learn command group with all subcommands\n */\nexport function createLearnCommand(): Command {\n const learnCmd = new Command(\"learn\")\n .description(\"Manage learning patterns for AI-assisted development\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn record ${chalk.dim(\"# Interactive pattern recording\")}\n $ workflow learn list --type blueprint ${chalk.dim(\"# List blueprints only\")}\n $ workflow learn apply abc123 --dry-run ${chalk.dim(\"# Preview pattern application\")}\n $ workflow learn capture ./src/auth --name auth ${chalk.dim(\"# Capture as blueprint\")}\n $ workflow learn analyze ${chalk.dim(\"# Find learning opportunities\")}\n $ workflow learn export --format json ${chalk.dim(\"# Export patterns\")}\n $ workflow learn import patterns.json ${chalk.dim(\"# Import patterns\")}\n $ workflow learn sync --push ${chalk.dim(\"# Push patterns to registry\")}\n $ workflow learn config --show ${chalk.dim(\"# Show current configuration\")}\n $ workflow learn stats ${chalk.dim(\"# Show learning statistics\")}\n $ workflow learn clean --deprecated ${chalk.dim(\"# Clean deprecated patterns\")}\n $ workflow learn validate --fix ${chalk.dim(\"# Auto-fix pattern issues\")}\n`,\n )\n .action(() => {\n // Show help if no subcommand provided\n learnCmd.help();\n });\n\n // record subcommand\n learnCmd\n .command(\"record\")\n .description(\"Record a new pattern from a successful implementation\")\n .option(\"--name <name>\", \"Pattern name\")\n .option(\"--description <desc>\", \"Pattern description\")\n .option(\"--category <cat>\", \"Category (migration, security, performance, etc.)\")\n .option(\"--framework <fw>\", \"Framework (next, react, vue, etc.)\")\n .option(\"--version <ver>\", \"Framework version range\")\n .option(\"--tags <tags>\", \"Comma-separated tags (category:value)\")\n .option(\"--type <type>\", \"Pattern type (fix, blueprint)\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn record ${chalk.dim(\"# Interactive mode\")}\n $ workflow learn record --name \"Auth Fix\" \\\\\n --category security --type fix ${chalk.dim(\"# With metadata\")}\n $ workflow learn record --framework next \\\\\n --version \">=14.0.0\" ${chalk.dim(\"# With framework\")}\n`,\n )\n .action(learnRecordCommand);\n\n // list subcommand\n learnCmd\n .command(\"list\")\n .description(\"List recorded learning patterns\")\n .option(\"--type <type>\", \"Filter by type (fix, blueprint, all)\")\n .option(\"--framework <fw>\", \"Filter by framework\")\n .option(\"--tag <tag>\", \"Filter by tag\")\n .option(\"--deprecated\", \"Include deprecated patterns\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn list ${chalk.dim(\"# List all patterns\")}\n $ workflow learn list --type blueprint ${chalk.dim(\"# Only blueprints\")}\n $ workflow learn list --framework next ${chalk.dim(\"# Filter by framework\")}\n $ workflow learn list --deprecated ${chalk.dim(\"# Include deprecated\")}\n`,\n )\n .action(learnListCommand);\n\n // apply subcommand\n learnCmd\n .command(\"apply <patternId>\")\n .description(\"Apply a pattern to the current project\")\n .option(\"--framework <fw>\", \"Override framework\")\n .option(\"--version <ver>\", \"Override version\")\n .option(\"--dry-run\", \"Preview without applying\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn apply abc123 ${chalk.dim(\"# Apply pattern\")}\n $ workflow learn apply abc123 --dry-run ${chalk.dim(\"# Preview changes\")}\n $ workflow learn apply abc123 --framework react ${chalk.dim(\"# Override framework\")}\n`,\n )\n .action(learnApplyCommand);\n\n // capture subcommand\n learnCmd\n .command(\"capture <paths...>\")\n .description(\"Capture files as a blueprint pattern with auto-inferred metadata\")\n .option(\"--name <name>\", \"Pattern name (inferred from paths if omitted)\")\n .option(\"--description <desc>\", \"Pattern description\")\n .option(\"--framework <fw>\", \"Override inferred framework\")\n .option(\"--tags <tags>\", \"Additional tags (comma-separated)\")\n .option(\"--dry-run\", \"Preview what would be captured without saving\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn capture ./src/auth ${chalk.dim(\"# Capture auth module\")}\n $ workflow learn capture ./src/auth --name \"Auth\" ${chalk.dim(\"# With custom name\")}\n $ workflow learn capture ./components --dry-run ${chalk.dim(\"# Preview capture\")}\n $ workflow learn capture ./hooks --tags \"react,hooks\" ${chalk.dim(\"# With tags\")}\n`,\n )\n .action(learnCaptureCommand);\n\n // sync subcommand\n learnCmd\n .command(\"sync\")\n .description(\"Sync patterns with remote registry (alias for: workflow sync --learn)\")\n .option(\"--push\", \"Push local patterns to registry\")\n .option(\"--pull\", \"Pull patterns from registry\")\n .option(\"--dry-run\", \"Preview without syncing\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn sync ${chalk.dim(\"# Interactive sync\")}\n $ workflow learn sync --push ${chalk.dim(\"# Push to registry\")}\n $ workflow learn sync --pull ${chalk.dim(\"# Pull from registry\")}\n $ workflow learn sync --push --dry-run ${chalk.dim(\"# Preview push\")}\n\n${chalk.bold(\"Pro Tip:\")}\n For more options including solutions sync, use:\n $ workflow sync --all ${chalk.dim(\"# Sync everything\")}\n`,\n )\n .action(async (options) => {\n // Forward to unified sync with learn flag\n const { syncCommand } = await import(\"../sync.js\");\n return syncCommand({ ...options, learn: true });\n });\n\n // config subcommand\n learnCmd\n .command(\"config\")\n .description(\"Configure learning settings\")\n .option(\"--enable-sync\", \"Enable pattern sync\")\n .option(\"--disable-sync\", \"Disable pattern sync\")\n .option(\"--enable-telemetry\", \"Enable anonymous telemetry\")\n .option(\"--disable-telemetry\", \"Disable telemetry\")\n .option(\"--reset-id\", \"Reset contributor ID\")\n .option(\"--show\", \"Show current configuration\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn config --show ${chalk.dim(\"# Show current config\")}\n $ workflow learn config --enable-sync ${chalk.dim(\"# Enable sync\")}\n $ workflow learn config --disable-telemetry ${chalk.dim(\"# Disable telemetry\")}\n $ workflow learn config --reset-id ${chalk.dim(\"# Reset contributor ID\")}\n`,\n )\n .action(learnConfigCommand);\n\n // deprecate subcommand\n learnCmd\n .command(\"deprecate <patternId> <reason>\")\n .description(\"Deprecate an outdated pattern\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn deprecate abc123 \"Superseded by xyz789\"\n $ workflow learn deprecate def456 \"No longer compatible with latest version\"\n`,\n )\n .action(learnDeprecateCommand);\n\n // publish subcommand\n learnCmd\n .command(\"publish [patternId]\")\n .description(\"Mark pattern(s) as public for syncing\")\n .option(\"--private\", \"Mark as private instead of public\")\n .option(\"--all\", \"Apply to all patterns\")\n .option(\"-y, --yes\", \"Skip confirmation prompts\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn publish abc123 ${chalk.dim(\"# Publish one pattern\")}\n $ workflow learn publish --all ${chalk.dim(\"# Publish all patterns\")}\n $ workflow learn publish abc123 --private ${chalk.dim(\"# Make private\")}\n $ workflow learn publish --all -y ${chalk.dim(\"# Publish all, skip prompt\")}\n`,\n )\n .action(learnPublishCommand);\n\n // stats subcommand\n learnCmd\n .command(\"stats\")\n .description(\"Show learning statistics\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn stats ${chalk.dim(\"# Show all statistics\")}\n`,\n )\n .action(learnStatsCommand);\n\n // analyze subcommand\n learnCmd\n .command(\"analyze\")\n .description(\"Analyze codebase for learning opportunities\")\n .option(\"-v, --verbose\", \"Show detailed output including paths\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn analyze ${chalk.dim(\"# Find learning opportunities\")}\n $ workflow learn analyze --verbose ${chalk.dim(\"# Show paths and details\")}\n`,\n )\n .action(learnAnalyzeCommand);\n\n // export subcommand\n learnCmd\n .command(\"export\")\n .description(\"Export learning patterns to a file\")\n .option(\"-o, --output <path>\", \"Output file path\", \"patterns-export.json\")\n .option(\"-f, --format <format>\", \"Output format (json, yaml)\", \"json\")\n .option(\"-t, --type <type>\", \"Pattern type to export (fix, blueprint, all)\", \"all\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn export ${chalk.dim(\"# Export all as JSON\")}\n $ workflow learn export --format yaml ${chalk.dim(\"# Export as YAML\")}\n $ workflow learn export --type fix ${chalk.dim(\"# Export only fixes\")}\n $ workflow learn export -o backup.json ${chalk.dim(\"# Custom output path\")}\n`,\n )\n .action(learnExportCommand);\n\n // import subcommand\n learnCmd\n .command(\"import <file>\")\n .description(\"Import learning patterns from a file\")\n .option(\"-f, --format <format>\", \"Input format (json, yaml)\", \"json\")\n .option(\"--dry-run\", \"Preview import without making changes\")\n .option(\"--no-merge\", \"Skip existing patterns instead of merging\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn import patterns.json ${chalk.dim(\"# Import from JSON\")}\n $ workflow learn import backup.json --dry-run ${chalk.dim(\"# Preview import\")}\n $ workflow learn import patterns.yaml --format yaml ${chalk.dim(\"# Import from YAML\")}\n`,\n )\n .action(learnImportCommand);\n\n // clean subcommand\n learnCmd\n .command(\"clean\")\n .description(\"Clean old or stale learning patterns\")\n .option(\"--deprecated\", \"Remove deprecated patterns\")\n .option(\"--stale\", \"Remove patterns not used in 90+ days\")\n .option(\"--all\", \"Remove all patterns (use with caution!)\")\n .option(\"--dry-run\", \"Preview what would be removed\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn clean --deprecated ${chalk.dim(\"# Remove deprecated\")}\n $ workflow learn clean --stale ${chalk.dim(\"# Remove stale patterns\")}\n $ workflow learn clean --all --dry-run ${chalk.dim(\"# Preview full clean\")}\n`,\n )\n .action(learnCleanCommand);\n\n // validate subcommand\n learnCmd\n .command(\"validate\")\n .description(\"Validate pattern files and optionally auto-fix common issues\")\n .option(\"-t, --type <type>\", \"Pattern type to validate (fix, blueprint, solution, all)\", \"all\")\n .option(\"-f, --file <path>\", \"Validate a specific file by path\")\n .option(\"--fix\", \"Automatically fix common issues\")\n .option(\"-v, --verbose\", \"Show detailed validation output\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow learn validate ${chalk.dim(\"# Validate all patterns\")}\n $ workflow learn validate --type fix ${chalk.dim(\"# Only fix patterns\")}\n $ workflow learn validate --fix ${chalk.dim(\"# Auto-fix issues\")}\n $ workflow learn validate -f ./patterns/auth.json ${chalk.dim(\"# Validate specific file\")}\n $ workflow learn validate --verbose ${chalk.dim(\"# Detailed output\")}\n`,\n )\n .action(learnValidateCommand);\n\n return learnCmd;\n}\n\n// Re-export individual commands for backward compatibility\nexport {\n learnRecordCommand,\n learnListCommand,\n learnApplyCommand,\n learnCaptureCommand,\n learnSyncCommand,\n learnConfigCommand,\n learnDeprecateCommand,\n learnPublishCommand,\n learnStatsCommand,\n learnValidateCommand,\n learnAnalyzeCommand,\n learnExportCommand,\n learnImportCommand,\n learnCleanCommand,\n} from \"../learn.js\";\n","import chalk from \"chalk\";\nimport * as p from \"@clack/prompts\";\nimport * as fs from \"node:fs\";\nimport * as path from \"node:path\";\nimport {\n PatternStore,\n ContributorManager,\n PatternAnonymizer,\n TelemetryCollector,\n FixPatternSchema,\n BlueprintSchema,\n SolutionPatternSchema,\n type FixPattern,\n type Blueprint,\n type SolutionPattern,\n type PatternTag,\n} from \"@hawkinside_out/workflow-improvement-tracker\";\nimport {\n RegistryClient,\n RateLimitedException,\n RegistryError,\n} from \"../../sync/index.js\";\n\n// ============================================\n// Types\n// ============================================\n\ninterface LearnRecordOptions {\n name?: string;\n description?: string;\n category?: string;\n framework?: string;\n version?: string;\n tags?: string;\n type?: \"fix\" | \"blueprint\";\n}\n\ninterface LearnApplyOptions {\n framework?: string;\n version?: string;\n dryRun?: boolean;\n}\n\ninterface LearnListOptions {\n type?: \"fix\" | \"blueprint\" | \"all\";\n framework?: string;\n tag?: string;\n deprecated?: boolean;\n}\n\ninterface LearnSyncOptions {\n push?: boolean;\n pull?: boolean;\n dryRun?: boolean;\n}\n\ninterface LearnConfigOptions {\n enableSync?: boolean;\n disableSync?: boolean;\n enableTelemetry?: boolean;\n disableTelemetry?: boolean;\n resetId?: boolean;\n show?: boolean;\n}\n\ninterface LearnValidateOptions {\n type?: \"fix\" | \"blueprint\" | \"solution\" | \"all\";\n fix?: boolean;\n verbose?: boolean;\n file?: string;\n}\n\n// ============================================\n// Helper Functions\n// ============================================\n\nfunction getWorkspacePath(): string {\n return process.cwd();\n}\n\nfunction formatDate(isoString: string): string {\n return new Date(isoString).toLocaleDateString(\"en-US\", {\n year: \"numeric\",\n month: \"short\",\n day: \"numeric\",\n });\n}\n\nfunction formatTags(tags: PatternTag[]): string {\n return tags.map((t) => `${t.category}:${t.name}`).join(\", \");\n}\n\n// ============================================\n// learn:record Command\n// ============================================\n\n/**\n * Record a new pattern from a successful implementation\n */\nexport async function learnRecordCommand(options: LearnRecordOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n📚 Record a Learning Pattern\\n\"));\n\n // Get pattern type\n let patternType = options.type;\n if (!patternType) {\n const typeChoice = await p.select({\n message: \"What type of pattern are you recording?\",\n options: [\n {\n value: \"fix\",\n label: \"🔧 Fix Pattern - A specific solution to a problem\",\n },\n {\n value: \"blueprint\",\n label: \"📐 Blueprint - A project structure template\",\n },\n ],\n });\n\n if (p.isCancel(typeChoice)) {\n p.cancel(\"Recording cancelled\");\n process.exit(0);\n }\n patternType = typeChoice as \"fix\" | \"blueprint\";\n }\n\n // Get pattern name\n let name = options.name;\n if (!name) {\n const nameInput = await p.text({\n message: \"Pattern name:\",\n placeholder: \"e.g., Next.js App Router Migration\",\n validate: (value) => {\n if (!value || value.length < 3)\n return \"Name must be at least 3 characters\";\n if (value.length > 100) return \"Name must be less than 100 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(nameInput)) {\n p.cancel(\"Recording cancelled\");\n process.exit(0);\n }\n name = nameInput as string;\n }\n\n // Get description\n let description = options.description;\n if (!description) {\n const descInput = await p.text({\n message: \"Description:\",\n placeholder: \"What does this pattern solve?\",\n validate: (value) => {\n if (!value || value.length < 10)\n return \"Description must be at least 10 characters\";\n if (value.length > 500)\n return \"Description must be less than 500 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(descInput)) {\n p.cancel(\"Recording cancelled\");\n process.exit(0);\n }\n description = descInput as string;\n }\n\n // Get framework\n let framework = options.framework;\n if (!framework) {\n const fwInput = await p.text({\n message: \"Framework:\",\n placeholder: \"e.g., next, react, vue, express\",\n });\n\n if (p.isCancel(fwInput)) {\n p.cancel(\"Recording cancelled\");\n process.exit(0);\n }\n framework = fwInput as string;\n }\n\n // Get version\n let version = options.version;\n if (!version) {\n const versionInput = await p.text({\n message: \"Framework version (semver range):\",\n placeholder: \"e.g., >=14.0.0, ^18.0.0\",\n initialValue: \">=1.0.0\",\n });\n\n if (p.isCancel(versionInput)) {\n p.cancel(\"Recording cancelled\");\n process.exit(0);\n }\n version = versionInput as string;\n }\n\n // Get category for fix patterns\n let category = options.category;\n if (patternType === \"fix\" && !category) {\n const catChoice = await p.select({\n message: \"Category:\",\n options: [\n { value: \"migration\", label: \"🔄 Migration\" },\n { value: \"security\", label: \"🔒 Security\" },\n { value: \"performance\", label: \"⚡ Performance\" },\n { value: \"compatibility\", label: \"🔗 Compatibility\" },\n { value: \"deprecation\", label: \"⚠️ Deprecation\" },\n { value: \"configuration\", label: \"⚙️ Configuration\" },\n { value: \"best-practice\", label: \"✨ Best Practice\" },\n { value: \"error-handling\", label: \"🚨 Error Handling\" },\n { value: \"testing\", label: \"🧪 Testing\" },\n { value: \"other\", label: \"📦 Other\" },\n ],\n });\n\n if (p.isCancel(catChoice)) {\n p.cancel(\"Recording cancelled\");\n process.exit(0);\n }\n category = catChoice as string;\n }\n\n // Parse tags\n const tags: PatternTag[] = [];\n if (options.tags) {\n const tagPairs = options.tags.split(\",\").map((t) => t.trim());\n for (const pair of tagPairs) {\n const [cat, val] = pair.split(\":\");\n if (cat && val) {\n tags.push({\n category: cat as PatternTag[\"category\"],\n name: val,\n });\n }\n }\n }\n\n // Add framework tag\n tags.push({ category: \"framework\", name: framework });\n\n if (patternType === \"fix\") {\n // Create fix pattern\n const now = new Date().toISOString();\n const fixPattern: FixPattern = {\n id: crypto.randomUUID(),\n name,\n description,\n category: category as FixPattern[\"category\"],\n tags,\n trigger: {\n errorPattern: \".*\",\n errorMessage: \"Generic error pattern\",\n filePattern: \"**/*\",\n },\n solution: {\n type: \"command\",\n steps: [\n {\n order: 1,\n action: \"run\",\n target: \"npm run fix\",\n description: \"Follow the pattern instructions\",\n },\n ],\n },\n compatibility: {\n framework,\n frameworkVersion: version,\n runtime: \"node\",\n runtimeVersion: \">=18.0.0\",\n dependencies: [],\n },\n metrics: {\n applications: 0,\n successes: 0,\n failures: 0,\n successRate: 0,\n },\n source: \"manual\",\n isPrivate: true,\n createdAt: now,\n updatedAt: now,\n };\n\n const result = await store.saveFixPattern(fixPattern);\n\n if (result.success) {\n console.log(chalk.green(\"\\n✅ Fix pattern recorded successfully!\\n\"));\n console.log(chalk.dim(` ID: ${fixPattern.id}`));\n console.log(chalk.dim(` Name: ${name}`));\n console.log(chalk.dim(` Category: ${category}`));\n console.log(chalk.dim(` Framework: ${framework} ${version}`));\n } else {\n console.log(chalk.red(\"\\n❌ Failed to record pattern\"));\n console.log(chalk.dim(` Error: ${result.error}`));\n process.exit(1);\n }\n } else {\n // Create blueprint\n const now = new Date().toISOString();\n const blueprint: Blueprint = {\n id: crypto.randomUUID(),\n name,\n description,\n tags,\n stack: {\n framework,\n language: \"typescript\",\n runtime: \"node\",\n packageManager: \"pnpm\",\n dependencies: [],\n devDependencies: [],\n },\n structure: {\n directories: [],\n keyFiles: [],\n },\n setup: {\n prerequisites: [],\n steps: [],\n configs: [],\n },\n compatibility: {\n framework,\n frameworkVersion: version,\n runtime: \"node\",\n runtimeVersion: \">=18.0.0\",\n dependencies: [],\n },\n metrics: {\n applications: 0,\n successes: 0,\n failures: 0,\n successRate: 0,\n },\n relatedPatterns: [],\n isPrivate: true,\n createdAt: now,\n updatedAt: now,\n };\n\n const result = await store.saveBlueprint(blueprint);\n\n if (result.success) {\n console.log(chalk.green(\"\\n✅ Blueprint recorded successfully!\\n\"));\n console.log(chalk.dim(` ID: ${blueprint.id}`));\n console.log(chalk.dim(` Name: ${name}`));\n console.log(chalk.dim(` Framework: ${framework} ${version}`));\n } else {\n console.log(chalk.red(\"\\n❌ Failed to record blueprint\"));\n console.log(chalk.dim(` Error: ${result.error}`));\n process.exit(1);\n }\n }\n}\n\n// ============================================\n// learn:list Command\n// ============================================\n\n/**\n * List recorded patterns\n */\nexport async function learnListCommand(options: LearnListOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const patternType = options.type ?? \"all\";\n const showDeprecated = options.deprecated ?? false;\n\n console.log(chalk.cyan(\"\\n📚 Recorded Learning Patterns\\n\"));\n\n // List fix patterns\n if (patternType === \"all\" || patternType === \"fix\") {\n const fixResult = await store.listFixPatterns({\n tags: options.tag\n ? [{ category: \"framework\", name: options.tag }]\n : undefined,\n framework: options.framework,\n includeDeprecated: showDeprecated,\n });\n\n if (fixResult.success && fixResult.data && fixResult.data.length > 0) {\n console.log(chalk.bold.yellow(\"🔧 Fix Patterns:\\n\"));\n\n for (const pattern of fixResult.data) {\n const isDeprecated = pattern.deprecatedAt !== undefined;\n const statusIcon = isDeprecated ? \"⚠️\" : \"✓\";\n const nameColor = isDeprecated ? chalk.dim : chalk.white;\n\n console.log(` ${statusIcon} ${nameColor(pattern.name)}`);\n console.log(chalk.dim(` ID: ${pattern.id}`));\n console.log(chalk.dim(` Category: ${pattern.category}`));\n console.log(\n chalk.dim(` Created: ${formatDate(pattern.createdAt)}`),\n );\n console.log(\n chalk.dim(\n ` Success Rate: ${(pattern.metrics.successRate * 100).toFixed(0)}% (${pattern.metrics.successes}/${pattern.metrics.applications})`,\n ),\n );\n if (pattern.tags.length > 0) {\n console.log(chalk.dim(` Tags: ${formatTags(pattern.tags)}`));\n }\n console.log(\"\");\n }\n } else if (patternType === \"fix\") {\n console.log(chalk.dim(\" No fix patterns found.\\n\"));\n }\n }\n\n // List blueprints\n if (patternType === \"all\" || patternType === \"blueprint\") {\n const bpResult = await store.listBlueprints({\n tags: options.tag\n ? [{ category: \"framework\", name: options.tag }]\n : undefined,\n framework: options.framework,\n includeDeprecated: showDeprecated,\n });\n\n if (bpResult.success && bpResult.data && bpResult.data.length > 0) {\n console.log(chalk.bold.blue(\"📐 Blueprints:\\n\"));\n\n for (const blueprint of bpResult.data) {\n const isDeprecated = blueprint.deprecatedAt !== undefined;\n const statusIcon = isDeprecated ? \"⚠️\" : \"✓\";\n const nameColor = isDeprecated ? chalk.dim : chalk.white;\n\n console.log(` ${statusIcon} ${nameColor(blueprint.name)}`);\n console.log(chalk.dim(` ID: ${blueprint.id}`));\n console.log(chalk.dim(` Language: ${blueprint.stack.language}`));\n console.log(\n chalk.dim(` Created: ${formatDate(blueprint.createdAt)}`),\n );\n console.log(\n chalk.dim(\n ` Success Rate: ${(blueprint.metrics.successRate * 100).toFixed(0)}% (${blueprint.metrics.successes}/${blueprint.metrics.applications})`,\n ),\n );\n if (blueprint.tags.length > 0) {\n console.log(chalk.dim(` Tags: ${formatTags(blueprint.tags)}`));\n }\n console.log(\"\");\n }\n } else if (patternType === \"blueprint\") {\n console.log(chalk.dim(\" No blueprints found.\\n\"));\n }\n }\n\n // Show stats\n const stats = await store.getStats();\n const totalPatterns = stats.totalFixes + stats.totalBlueprints;\n const totalDeprecated = stats.deprecatedFixes + stats.deprecatedBlueprints;\n const totalInvalid =\n stats.invalidFixes + stats.invalidBlueprints + stats.invalidSolutions;\n\n console.log(chalk.dim(\"━\".repeat(40)));\n console.log(chalk.dim(`Total: ${totalPatterns} patterns`));\n console.log(chalk.dim(` Fix Patterns: ${stats.totalFixes}`));\n console.log(chalk.dim(` Blueprints: ${stats.totalBlueprints}`));\n console.log(chalk.dim(` Deprecated: ${totalDeprecated}`));\n\n // Show validation warnings if any patterns failed to load\n if (totalInvalid > 0) {\n console.log(\n chalk.yellow(\n `\\n⚠️ ${totalInvalid} pattern(s) failed schema validation and were skipped:`,\n ),\n );\n console.log(\n chalk.dim(` Fix patterns: ${stats.invalidFixes} invalid`),\n );\n console.log(\n chalk.dim(` Blueprints: ${stats.invalidBlueprints} invalid`),\n );\n console.log(\n chalk.dim(` Solutions: ${stats.invalidSolutions} invalid`),\n );\n\n // Show detailed validation errors\n const validationErrors = store.getValidationErrors();\n if (validationErrors.length > 0) {\n console.log(chalk.yellow(\"\\n Validation errors:\"));\n for (const err of validationErrors.slice(0, 5)) {\n console.log(chalk.dim(` • ${err.file}: ${err.error}`));\n if (err.details && err.details.length > 0) {\n for (const detail of err.details.slice(0, 3)) {\n console.log(chalk.dim(` - ${detail}`));\n }\n if (err.details.length > 3) {\n console.log(\n chalk.dim(` ... and ${err.details.length - 3} more`),\n );\n }\n }\n }\n if (validationErrors.length > 5) {\n console.log(\n chalk.dim(\n ` ... and ${validationErrors.length - 5} more errors`,\n ),\n );\n }\n }\n\n console.log(\n chalk.dim(\n \"\\n Tip: Invalid patterns may be missing required fields. Use the PatternStore API\",\n ),\n );\n console.log(\n chalk.dim(\n \" to create patterns instead of writing JSON files directly.\",\n ),\n );\n }\n console.log(\"\");\n}\n\n// ============================================\n// learn:apply Command\n// ============================================\n\n/**\n * Apply a pattern to current project\n */\nexport async function learnApplyCommand(\n patternId: string,\n options: LearnApplyOptions,\n) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const telemetry = new TelemetryCollector(cwd);\n\n console.log(chalk.cyan(\"\\n🔧 Apply Learning Pattern\\n\"));\n\n // Try to find the pattern\n let pattern = await store.getFixPattern(patternId);\n let patternType: \"fix\" | \"blueprint\" = \"fix\";\n\n if (!pattern.success || !pattern.data) {\n // Try as blueprint\n const bpResult = await store.getBlueprint(patternId);\n if (bpResult.success && bpResult.data) {\n pattern = bpResult as typeof pattern;\n patternType = \"blueprint\";\n } else {\n console.log(chalk.red(`\\n❌ Pattern not found: ${patternId}`));\n console.log(\n chalk.dim(\" Use 'workflow learn:list' to see available patterns\"),\n );\n process.exit(1);\n }\n }\n\n const patternData = pattern.data!;\n console.log(chalk.white(` Pattern: ${patternData.name}`));\n console.log(chalk.dim(` Type: ${patternType}`));\n console.log(chalk.dim(` Description: ${patternData.description}`));\n\n if (options.dryRun) {\n console.log(\n chalk.yellow(\"\\n📋 DRY-RUN MODE: No changes will be applied\\n\"),\n );\n }\n\n // Record telemetry for application attempt\n const framework =\n options.framework ??\n patternData.compatibility?.frameworks?.[0]?.name ??\n \"unknown\";\n const version =\n options.version ??\n patternData.compatibility?.frameworks?.[0]?.version ??\n \"0.0.0\";\n\n await telemetry.recordApplication(patternId, patternType, framework, version);\n\n // For now, just show the pattern details\n // In future, this could apply automated changes\n if (patternType === \"fix\") {\n const fixPattern = patternData as FixPattern;\n console.log(chalk.cyan(\"\\n📋 Solution Steps:\\n\"));\n\n if (fixPattern.solution.steps) {\n for (let i = 0; i < fixPattern.solution.steps.length; i++) {\n const step = fixPattern.solution.steps[i];\n console.log(\n chalk.white(` ${i + 1}. [${step.action}] ${step.description}`),\n );\n if (step.file) {\n console.log(chalk.dim(` File: ${step.file}`));\n }\n }\n }\n } else {\n const blueprint = patternData as Blueprint;\n console.log(chalk.cyan(\"\\n📋 Setup Steps:\\n\"));\n\n if (blueprint.setup.steps) {\n for (let i = 0; i < blueprint.setup.steps.length; i++) {\n const step = blueprint.setup.steps[i];\n console.log(chalk.white(` ${i + 1}. ${step.description}`));\n if (step.command) {\n console.log(chalk.dim(` Command: ${step.command}`));\n }\n }\n }\n }\n\n // Confirm application\n if (!options.dryRun) {\n const confirmed = await p.confirm({\n message: \"Mark this pattern as successfully applied?\",\n initialValue: true,\n });\n\n if (p.isCancel(confirmed)) {\n p.cancel(\"Application cancelled\");\n process.exit(0);\n }\n\n if (confirmed) {\n // Update metrics\n await store.updatePatternMetrics(patternId, patternType, true);\n await telemetry.recordSuccess(patternId, patternType, framework, version);\n console.log(chalk.green(\"\\n✅ Pattern marked as successfully applied!\"));\n } else {\n // Record failure\n await store.updatePatternMetrics(patternId, patternType, false);\n await telemetry.recordFailure(\n patternId,\n patternType,\n framework,\n version,\n \"unknown\",\n );\n console.log(\n chalk.yellow(\"\\n⚠️ Pattern application marked as unsuccessful.\"),\n );\n }\n }\n}\n\n// ============================================\n// learn:sync Command\n// ============================================\n\n/**\n * Sync patterns with remote registry\n */\nexport async function learnSyncCommand(options: LearnSyncOptions) {\n const cwd = getWorkspacePath();\n const contributorManager = new ContributorManager(cwd);\n\n console.log(chalk.cyan(\"\\n🔄 Sync Learning Patterns\\n\"));\n\n // Check if sync is enabled\n const config = await contributorManager.getConfig();\n if (!config.success || !config.data?.syncOptIn) {\n console.log(chalk.yellow(\"⚠️ Sync is not enabled.\\n\"));\n console.log(chalk.dim(\" To enable sync, run:\"));\n console.log(chalk.dim(\" workflow learn:config --enable-sync\\n\"));\n console.log(\n chalk.dim(\n \" This allows you to share anonymized patterns with the community.\",\n ),\n );\n process.exit(0);\n }\n\n if (options.dryRun) {\n console.log(chalk.yellow(\"📋 DRY-RUN MODE: No changes will be synced\\n\"));\n }\n\n const store = new PatternStore(cwd);\n await store.initialize();\n const anonymizer = new PatternAnonymizer();\n\n // Get patterns to sync\n const { fixes, blueprints, solutions } = await store.getPatternsForSync();\n\n console.log(\n chalk.dim(\n ` Patterns ready to sync: ${fixes.length} fixes, ${blueprints.length} blueprints, ${solutions.length} solutions`,\n ),\n );\n\n if (options.push) {\n console.log(chalk.cyan(\"\\n📤 Pushing patterns...\\n\"));\n\n // Anonymize patterns before sync\n const anonymizedPatterns: Array<{\n pattern: FixPattern | Blueprint | SolutionPattern;\n type: \"fix\" | \"blueprint\" | \"solution\";\n originalId: string;\n }> = [];\n\n for (const fix of fixes) {\n const result = anonymizer.anonymizeFixPattern(fix);\n if (result.success && result.data) {\n anonymizedPatterns.push({\n pattern: result.data,\n type: \"fix\",\n originalId: fix.id,\n });\n console.log(chalk.dim(` ✓ Anonymized: ${fix.name}`));\n }\n }\n\n for (const bp of blueprints) {\n const result = anonymizer.anonymizeBlueprint(bp);\n if (result.success && result.data) {\n anonymizedPatterns.push({\n pattern: result.data,\n type: \"blueprint\",\n originalId: bp.id,\n });\n console.log(chalk.dim(` ✓ Anonymized: ${bp.name}`));\n }\n }\n\n for (const solution of solutions) {\n const result = anonymizer.anonymizeSolution(solution);\n if (result.success && result.data) {\n anonymizedPatterns.push({\n pattern: result.data,\n type: \"solution\",\n originalId: solution.id,\n });\n console.log(chalk.dim(` ✓ Anonymized: ${solution.name}`));\n }\n }\n\n const fixCount = anonymizedPatterns.filter((p) => p.type === \"fix\").length;\n const bpCount = anonymizedPatterns.filter((p) => p.type === \"blueprint\").length;\n const solutionCount = anonymizedPatterns.filter((p) => p.type === \"solution\").length;\n\n if (anonymizedPatterns.length === 0) {\n console.log(chalk.yellow(\"\\n⚠️ No patterns to push\"));\n return;\n }\n\n console.log(\n chalk.dim(\n `\\n Ready to push ${fixCount} fixes, ${bpCount} blueprints, and ${solutionCount} solutions`,\n ),\n );\n\n if (options.dryRun) {\n console.log(chalk.yellow(\"\\n📋 DRY-RUN: Patterns would be pushed (no actual changes)\"));\n return;\n }\n\n // Get contributor ID\n const contributorResult = await contributorManager.getOrCreateId();\n if (!contributorResult.success || !contributorResult.data) {\n console.log(chalk.red(\"\\n❌ Failed to get contributor ID\"));\n return;\n }\n\n // Push to registry\n const registryClient = new RegistryClient();\n\n try {\n console.log(chalk.dim(\"\\n Connecting to registry...\"));\n\n const pushResult = await registryClient.push(\n anonymizedPatterns.map((p) => ({\n pattern: p.pattern,\n type: p.type,\n })),\n contributorResult.data,\n );\n\n // Mark pushed patterns as synced\n if (pushResult.pushed > 0) {\n const pushedFixIds = anonymizedPatterns\n .filter((p) => p.type === \"fix\")\n .map((p) => p.originalId);\n const pushedBpIds = anonymizedPatterns\n .filter((p) => p.type === \"blueprint\")\n .map((p) => p.originalId);\n const pushedSolutionIds = anonymizedPatterns\n .filter((p) => p.type === \"solution\")\n .map((p) => p.originalId);\n\n if (pushedFixIds.length > 0) {\n await store.markAsSynced(pushedFixIds, \"fix\");\n }\n if (pushedBpIds.length > 0) {\n await store.markAsSynced(pushedBpIds, \"blueprint\");\n }\n if (pushedSolutionIds.length > 0) {\n await store.markAsSynced(pushedSolutionIds, \"solution\");\n }\n }\n\n console.log(\n chalk.green(`\\n✅ Successfully pushed ${pushResult.pushed} patterns to registry`),\n );\n\n if (pushResult.skipped > 0) {\n console.log(\n chalk.dim(` (${pushResult.skipped} patterns already existed)`),\n );\n }\n\n if (pushResult.errors && pushResult.errors.length > 0) {\n console.log(chalk.yellow(`\\n⚠️ Some patterns had errors:`));\n for (const err of pushResult.errors) {\n console.log(chalk.dim(` - ${err}`));\n }\n }\n\n console.log(\n chalk.dim(\n `\\n Rate limit: ${pushResult.rateLimit.remaining} patterns remaining this hour`,\n ),\n );\n } catch (error) {\n if (error instanceof RateLimitedException) {\n console.log(chalk.red(\"\\n❌ Rate limit exceeded\"));\n console.log(\n chalk.dim(\n ` Try again in ${error.getTimeUntilReset()}`,\n ),\n );\n } else if (error instanceof RegistryError) {\n console.log(chalk.red(`\\n❌ Registry error: ${error.message}`));\n } else {\n console.log(\n chalk.red(\n `\\n❌ Failed to push: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n }\n process.exit(1);\n }\n }\n\n if (options.pull) {\n console.log(chalk.cyan(\"\\n📥 Pulling patterns from registry...\\n\"));\n\n if (options.dryRun) {\n console.log(chalk.yellow(\"📋 DRY-RUN: Would pull patterns (no actual changes)\\n\"));\n\n // Show what would be pulled\n const registryClient = new RegistryClient();\n try {\n const result = await registryClient.pull({ limit: 10 });\n console.log(chalk.dim(` Registry has ${result.pagination.total} patterns available`));\n if (result.patterns.length > 0) {\n console.log(chalk.dim(\"\\n First 10 patterns:\"));\n for (const p of result.patterns) {\n console.log(chalk.dim(` - [${p.type}] ${(p.data as { name?: string }).name || p.id}`));\n }\n if (result.pagination.hasMore) {\n console.log(chalk.dim(` ... and ${result.pagination.total - 10} more`));\n }\n }\n } catch (error) {\n console.log(\n chalk.red(\n ` Failed to connect: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n }\n return;\n }\n\n // Pull patterns from registry\n const registryClient = new RegistryClient();\n\n try {\n console.log(chalk.dim(\" Connecting to registry...\"));\n\n let totalPulled = 0;\n let totalSkipped = 0;\n let offset = 0;\n const limit = 50;\n\n // Paginate through all patterns\n while (true) {\n const result = await registryClient.pull({ limit, offset });\n\n if (result.patterns.length === 0) {\n break;\n }\n\n for (const pattern of result.patterns) {\n // Check if pattern already exists locally\n let exists = false;\n if (pattern.type === \"fix\") {\n const existingResult = await store.getFixPattern(pattern.id);\n exists = existingResult.success && !!existingResult.data;\n } else if (pattern.type === \"blueprint\") {\n const existingResult = await store.getBlueprint(pattern.id);\n exists = existingResult.success && !!existingResult.data;\n } else if (pattern.type === \"solution\") {\n const existingResult = await store.getSolution(pattern.id);\n exists = existingResult.success && !!existingResult.data;\n }\n\n if (exists) {\n totalSkipped++;\n continue;\n }\n\n // Save pattern locally\n if (pattern.type === \"fix\") {\n const fixData = pattern.data as unknown as FixPattern;\n await store.saveFixPattern({\n ...fixData,\n id: pattern.id,\n source: \"community\",\n isPrivate: true, // Keep pulled patterns private by default\n });\n totalPulled++;\n } else if (pattern.type === \"blueprint\") {\n const bpData = pattern.data as unknown as Blueprint;\n await store.saveBlueprint({\n ...bpData,\n id: pattern.id,\n source: \"community\",\n isPrivate: true,\n });\n totalPulled++;\n } else if (pattern.type === \"solution\") {\n const solutionData = pattern.data as unknown as SolutionPattern;\n await store.saveSolution({\n ...solutionData,\n id: pattern.id,\n source: \"community\",\n isPrivate: true,\n });\n totalPulled++;\n }\n }\n\n if (!result.pagination.hasMore) {\n break;\n }\n\n offset += limit;\n console.log(chalk.dim(` ... pulled ${offset} patterns so far`));\n }\n\n console.log(\n chalk.green(`\\n✅ Pulled ${totalPulled} new patterns from registry`),\n );\n\n if (totalSkipped > 0) {\n console.log(chalk.dim(` (${totalSkipped} patterns already existed locally)`));\n }\n } catch (error) {\n if (error instanceof RegistryError) {\n console.log(chalk.red(`\\n❌ Registry error: ${error.message}`));\n } else {\n console.log(\n chalk.red(\n `\\n❌ Failed to pull: ${error instanceof Error ? error.message : String(error)}`,\n ),\n );\n }\n process.exit(1);\n }\n }\n\n if (!options.push && !options.pull) {\n console.log(\n chalk.dim(\" Specify --push to upload or --pull to download patterns.\\n\"),\n );\n }\n}\n\n// ============================================\n// learn:config Command\n// ============================================\n\n/**\n * Configure learning settings\n */\nexport async function learnConfigCommand(options: LearnConfigOptions) {\n const cwd = getWorkspacePath();\n const contributorManager = new ContributorManager(cwd);\n\n console.log(chalk.cyan(\"\\n⚙️ Learning Configuration\\n\"));\n\n if (options.enableSync) {\n const result = await contributorManager.enableSync();\n if (result.success) {\n console.log(chalk.green(\"✅ Sync enabled\"));\n console.log(\n chalk.dim(\" Your patterns will be anonymized before sharing.\"),\n );\n } else {\n console.log(chalk.red(`❌ Failed: ${result.error}`));\n }\n return;\n }\n\n if (options.disableSync) {\n const result = await contributorManager.disableSync();\n if (result.success) {\n console.log(chalk.green(\"✅ Sync disabled\"));\n } else {\n console.log(chalk.red(`❌ Failed: ${result.error}`));\n }\n return;\n }\n\n if (options.enableTelemetry) {\n const result = await contributorManager.enableTelemetry();\n if (result.success) {\n console.log(chalk.green(\"✅ Telemetry enabled\"));\n console.log(\n chalk.dim(\n \" Anonymous usage data helps improve pattern recommendations.\",\n ),\n );\n } else {\n console.log(chalk.red(`❌ Failed: ${result.error}`));\n }\n return;\n }\n\n if (options.disableTelemetry) {\n const result = await contributorManager.disableTelemetry();\n if (result.success) {\n console.log(chalk.green(\"✅ Telemetry disabled\"));\n } else {\n console.log(chalk.red(`❌ Failed: ${result.error}`));\n }\n return;\n }\n\n if (options.resetId) {\n const confirmed = await p.confirm({\n message:\n \"Are you sure you want to reset your contributor ID? This cannot be undone.\",\n initialValue: false,\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.cancel(\"Reset cancelled\");\n return;\n }\n\n const result = await contributorManager.resetId();\n if (result.success) {\n console.log(chalk.green(\"✅ Contributor ID reset\"));\n console.log(chalk.dim(` New ID: ${result.data?.id}`));\n } else {\n console.log(chalk.red(`❌ Failed: ${result.error}`));\n }\n return;\n }\n\n // Default: show current config\n const config = await contributorManager.getConfig();\n if (config.success && config.data) {\n console.log(chalk.white(\" Current Settings:\\n\"));\n console.log(chalk.dim(` Contributor ID: ${config.data.id}`));\n console.log(chalk.dim(` Created: ${formatDate(config.data.createdAt)}`));\n console.log(\n chalk.dim(` Sync Enabled: ${config.data.syncOptIn ? \"Yes\" : \"No\"}`),\n );\n console.log(\n chalk.dim(\n ` Telemetry Enabled: ${config.data.telemetryEnabled ? \"Yes\" : \"No\"}`,\n ),\n );\n if (config.data.syncEnabledAt) {\n console.log(\n chalk.dim(\n ` Sync Enabled At: ${formatDate(config.data.syncEnabledAt)}`,\n ),\n );\n }\n } else {\n console.log(\n chalk.dim(\n \" No configuration found. Settings will be created on first use.\\n\",\n ),\n );\n }\n}\n\n// ============================================\n// learn:publish Command\n// ============================================\n\ninterface LearnPublishOptions {\n private?: boolean;\n all?: boolean;\n yes?: boolean;\n}\n\n/**\n * Mark patterns as public (syncable) or private\n */\nexport async function learnPublishCommand(\n patternId: string | undefined,\n options: LearnPublishOptions,\n) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n const makePrivate = options.private ?? false;\n const actionWord = makePrivate ? \"private\" : \"public\";\n const emoji = makePrivate ? \"🔒\" : \"🌐\";\n\n console.log(chalk.cyan(`\\n${emoji} Mark Pattern(s) ${actionWord}\\n`));\n\n // Handle --all flag\n if (options.all) {\n const fixesResult = await store.listFixPatterns({});\n const blueprintsResult = await store.listBlueprints({});\n\n const allFixes = fixesResult.success && fixesResult.data ? fixesResult.data : [];\n const allBlueprints = blueprintsResult.success && blueprintsResult.data ? blueprintsResult.data : [];\n\n const fixesToUpdate = allFixes.filter((p) => p.isPrivate !== makePrivate);\n const blueprintsToUpdate = allBlueprints.filter(\n (p) => p.isPrivate !== makePrivate,\n );\n\n const totalToUpdate = fixesToUpdate.length + blueprintsToUpdate.length;\n\n if (totalToUpdate === 0) {\n console.log(\n chalk.yellow(` All patterns are already ${actionWord}. Nothing to do.`),\n );\n return;\n }\n\n console.log(\n chalk.white(\n ` Found ${totalToUpdate} pattern(s) to mark as ${actionWord}:`,\n ),\n );\n console.log(chalk.dim(` Fix Patterns: ${fixesToUpdate.length}`));\n console.log(chalk.dim(` Blueprints: ${blueprintsToUpdate.length}`));\n\n // Skip confirmation if --yes flag is passed\n if (!options.yes) {\n const confirmed = await p.confirm({\n message: `Mark all ${totalToUpdate} patterns as ${actionWord}?`,\n initialValue: false,\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.cancel(\"Cancelled\");\n return;\n }\n }\n\n let successCount = 0;\n let failCount = 0;\n\n for (const pattern of fixesToUpdate) {\n const result = await store.saveFixPattern({\n ...pattern,\n isPrivate: makePrivate,\n updatedAt: new Date().toISOString(),\n });\n if (result.success) {\n successCount++;\n } else {\n failCount++;\n }\n }\n\n for (const blueprint of blueprintsToUpdate) {\n const result = await store.saveBlueprint({\n ...blueprint,\n isPrivate: makePrivate,\n updatedAt: new Date().toISOString(),\n });\n if (result.success) {\n successCount++;\n } else {\n failCount++;\n }\n }\n\n console.log(\n chalk.green(`\\n✅ Updated ${successCount} pattern(s) to ${actionWord}`),\n );\n if (failCount > 0) {\n console.log(chalk.red(`❌ Failed to update ${failCount} pattern(s)`));\n }\n return;\n }\n\n // Single pattern mode - require patternId\n if (!patternId) {\n console.log(chalk.red(\"❌ Pattern ID is required\"));\n console.log(\n chalk.dim(\" Usage: workflow learn:publish <patternId> [--private]\"),\n );\n console.log(\n chalk.dim(\" workflow learn:publish --all [--private]\"),\n );\n process.exit(1);\n }\n\n // Try to find the pattern\n let patternType: \"fix\" | \"blueprint\" = \"fix\";\n let pattern = await store.getFixPattern(patternId);\n\n if (!pattern.success || !pattern.data) {\n const bpResult = await store.getBlueprint(patternId);\n if (bpResult.success && bpResult.data) {\n pattern = bpResult as typeof pattern;\n patternType = \"blueprint\";\n } else {\n console.log(chalk.red(`\\n❌ Pattern not found: ${patternId}`));\n console.log(\n chalk.dim(\" Use 'workflow learn:list' to see available patterns\"),\n );\n process.exit(1);\n }\n }\n\n const currentStatus = pattern.data!.isPrivate ? \"private\" : \"public\";\n\n if (pattern.data!.isPrivate === makePrivate) {\n console.log(\n chalk.yellow(` Pattern is already ${actionWord}. Nothing to do.`),\n );\n console.log(chalk.dim(` Name: ${pattern.data!.name}`));\n return;\n }\n\n console.log(chalk.white(` Pattern: ${pattern.data!.name}`));\n console.log(chalk.dim(` Type: ${patternType}`));\n console.log(chalk.dim(` Current: ${currentStatus} → ${actionWord}`));\n\n // Skip confirmation if --yes flag is passed\n if (!options.yes) {\n const confirmed = await p.confirm({\n message: `Mark this pattern as ${actionWord}?`,\n initialValue: true,\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.cancel(\"Cancelled\");\n return;\n }\n }\n\n const updatedPattern = {\n ...pattern.data!,\n isPrivate: makePrivate,\n updatedAt: new Date().toISOString(),\n };\n\n let result;\n if (patternType === \"fix\") {\n result = await store.saveFixPattern(updatedPattern as FixPattern);\n } else {\n result = await store.saveBlueprint(updatedPattern as Blueprint);\n }\n\n if (result.success) {\n console.log(chalk.green(`\\n✅ Pattern marked as ${actionWord}`));\n if (!makePrivate) {\n console.log(\n chalk.dim(\" Run 'workflow learn:sync --push' to upload to registry\"),\n );\n }\n } else {\n console.log(chalk.red(`\\n❌ Failed: ${result.error}`));\n process.exit(1);\n }\n}\n\n// ============================================\n// learn:deprecate Command\n// ============================================\n\n/**\n * Deprecate an old or outdated pattern\n */\nexport async function learnDeprecateCommand(patternId: string, reason: string) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n⚠️ Deprecate Pattern\\n\"));\n\n // Try to find the pattern\n let patternType: \"fix\" | \"blueprint\" = \"fix\";\n let pattern = await store.getFixPattern(patternId);\n\n if (!pattern.success || !pattern.data) {\n const bpResult = await store.getBlueprint(patternId);\n if (bpResult.success && bpResult.data) {\n pattern = bpResult as typeof pattern;\n patternType = \"blueprint\";\n } else {\n console.log(chalk.red(`\\n❌ Pattern not found: ${patternId}`));\n process.exit(1);\n }\n }\n\n console.log(chalk.white(` Pattern: ${pattern.data!.name}`));\n console.log(chalk.dim(` Reason: ${reason}`));\n\n const confirmed = await p.confirm({\n message: \"Are you sure you want to deprecate this pattern?\",\n initialValue: false,\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.cancel(\"Deprecation cancelled\");\n return;\n }\n\n const result = await store.deprecatePattern(patternId, patternType, reason);\n\n if (result.success) {\n console.log(chalk.green(\"\\n✅ Pattern deprecated successfully\"));\n } else {\n console.log(chalk.red(`\\n❌ Failed: ${result.error}`));\n process.exit(1);\n }\n}\n\n// ============================================\n// learn:stats Command\n// ============================================\n\n/**\n * Show learning statistics\n */\nexport async function learnStatsCommand() {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const telemetry = new TelemetryCollector(cwd);\n\n console.log(chalk.cyan(\"\\n📊 Learning Statistics\\n\"));\n\n // Pattern stats\n const storeStats = await store.getStats();\n const totalPatterns = storeStats.totalFixes + storeStats.totalBlueprints;\n const totalDeprecated =\n storeStats.deprecatedFixes + storeStats.deprecatedBlueprints;\n\n console.log(chalk.bold.white(\" Patterns:\\n\"));\n console.log(chalk.dim(` Total: ${totalPatterns}`));\n console.log(chalk.dim(` Fix Patterns: ${storeStats.totalFixes}`));\n console.log(chalk.dim(` Blueprints: ${storeStats.totalBlueprints}`));\n console.log(chalk.dim(` Deprecated: ${totalDeprecated}`));\n\n // Telemetry stats\n const telemetryStats = await telemetry.getStats();\n console.log(chalk.bold.white(\"\\n Telemetry:\\n\"));\n console.log(chalk.dim(` Pending Events: ${telemetryStats.pendingEvents}`));\n console.log(\n chalk.dim(` Total Events Sent: ${telemetryStats.totalEventsSent}`),\n );\n if (telemetryStats.lastFlushAt) {\n console.log(\n chalk.dim(` Last Flush: ${formatDate(telemetryStats.lastFlushAt)}`),\n );\n }\n\n console.log(\"\");\n}\n\n// ============================================\n// learn:validate Command\n// ============================================\n\ninterface ValidationResult {\n file: string;\n type: \"fix\" | \"blueprint\" | \"solution\";\n valid: boolean;\n errors: string[];\n fixable: boolean;\n fixedData?: FixPattern | Blueprint | unknown;\n}\n\n/**\n * Validate pattern files and optionally fix them\n */\nexport async function learnValidateCommand(options: LearnValidateOptions) {\n const cwd = getWorkspacePath();\n const patternsPath = path.join(cwd, \".workflow\", \"patterns\");\n const patternType = options.type ?? \"all\";\n const shouldFix = options.fix ?? false;\n const verbose = options.verbose ?? false;\n const specificFile = options.file;\n\n console.log(chalk.cyan(\"\\n🔍 Validating Pattern Files\\n\"));\n\n const results: ValidationResult[] = [];\n\n // If a specific file is provided, validate only that file\n if (specificFile) {\n const fileResult = await validateSingleFile(specificFile, verbose);\n if (fileResult) {\n results.push(fileResult);\n }\n } else {\n // Validate fix patterns\n if (patternType === \"all\" || patternType === \"fix\") {\n const fixesPath = path.join(patternsPath, \"fixes\");\n const fixResults = await validatePatternDirectory(\n fixesPath,\n \"fix\",\n FixPatternSchema,\n verbose,\n );\n results.push(...fixResults);\n }\n\n // Validate blueprints\n if (patternType === \"all\" || patternType === \"blueprint\") {\n const blueprintsPath = path.join(patternsPath, \"blueprints\");\n const bpResults = await validatePatternDirectory(\n blueprintsPath,\n \"blueprint\",\n BlueprintSchema,\n verbose,\n );\n results.push(...bpResults);\n }\n\n // Validate solutions\n if (patternType === \"all\" || patternType === \"solution\") {\n const solutionsPath = path.join(patternsPath, \"solutions\");\n const solResults = await validatePatternDirectory(\n solutionsPath,\n \"solution\",\n SolutionPatternSchema,\n verbose,\n );\n results.push(...solResults);\n }\n }\n\n // Summary\n const valid = results.filter((r) => r.valid);\n const invalid = results.filter((r) => !r.valid);\n const fixable = invalid.filter((r) => r.fixable);\n\n console.log(chalk.dim(\"━\".repeat(50)));\n console.log(chalk.bold(`\\n📊 Validation Summary\\n`));\n console.log(chalk.green(` ✓ Valid: ${valid.length}`));\n if (invalid.length > 0) {\n console.log(chalk.red(` ✗ Invalid: ${invalid.length}`));\n console.log(chalk.yellow(` 🔧 Auto-fixable: ${fixable.length}`));\n }\n\n // Show invalid patterns\n if (invalid.length > 0) {\n console.log(chalk.red(`\\n❌ Invalid Patterns:\\n`));\n for (const result of invalid) {\n console.log(chalk.white(` ${result.file} (${result.type})`));\n for (const err of result.errors.slice(0, 5)) {\n console.log(chalk.dim(` - ${err}`));\n }\n if (result.errors.length > 5) {\n console.log(chalk.dim(` ... and ${result.errors.length - 5} more`));\n }\n if (result.fixable) {\n console.log(chalk.yellow(` → Can be auto-fixed`));\n }\n }\n }\n\n // Auto-fix if requested\n if (shouldFix && fixable.length > 0) {\n console.log(chalk.cyan(`\\n🔧 Auto-fixing ${fixable.length} patterns...\\n`));\n\n let fixed = 0;\n for (const result of fixable) {\n if (result.fixedData) {\n const filePath = path.join(\n patternsPath,\n result.type === \"fix\"\n ? \"fixes\"\n : result.type === \"blueprint\"\n ? \"blueprints\"\n : \"solutions\",\n result.file,\n );\n\n try {\n await fs.promises.writeFile(\n filePath,\n JSON.stringify(result.fixedData, null, 2),\n );\n console.log(chalk.green(` ✓ Fixed: ${result.file}`));\n fixed++;\n } catch (error) {\n console.log(\n chalk.red(\n ` ✗ Failed to fix: ${result.file} - ${error instanceof Error ? error.message : \"Unknown error\"}`,\n ),\n );\n }\n }\n }\n\n console.log(chalk.green(`\\n✅ Fixed ${fixed}/${fixable.length} patterns`));\n } else if (fixable.length > 0 && !shouldFix) {\n console.log(\n chalk.yellow(\n `\\n💡 Run with --fix to auto-fix ${fixable.length} patterns`,\n ),\n );\n }\n\n console.log(\"\");\n\n // Exit with error code if there are unfixable invalid patterns\n const unfixable = invalid.filter((r) => !r.fixable);\n if (unfixable.length > 0 && !shouldFix) {\n process.exit(1);\n }\n if (invalid.length > 0 && !shouldFix) {\n process.exit(1);\n }\n}\n\n/**\n * Validate all JSON files in a pattern directory\n */\nasync function validatePatternDirectory(\n dirPath: string,\n type: \"fix\" | \"blueprint\" | \"solution\",\n schema: typeof FixPatternSchema | typeof BlueprintSchema | typeof SolutionPatternSchema,\n verbose: boolean,\n): Promise<ValidationResult[]> {\n const results: ValidationResult[] = [];\n\n try {\n const files = await fs.promises.readdir(dirPath);\n\n for (const file of files) {\n if (!file.endsWith(\".json\")) continue;\n\n const filePath = path.join(dirPath, file);\n const result = await validatePatternFile(filePath, file, type, schema, verbose);\n results.push(result);\n\n if (verbose) {\n if (result.valid) {\n console.log(chalk.green(` ✓ ${file}`));\n } else {\n console.log(chalk.red(` ✗ ${file}`));\n }\n }\n }\n } catch (error) {\n if ((error as NodeJS.ErrnoException).code !== \"ENOENT\") {\n console.log(\n chalk.yellow(` ⚠ Could not read ${type} directory: ${dirPath}`),\n );\n }\n }\n\n return results;\n}\n\n/**\n * Validate a single file by its absolute path, auto-detecting type from path\n */\nasync function validateSingleFile(\n filePath: string,\n verbose: boolean,\n): Promise<ValidationResult | null> {\n const fileName = path.basename(filePath);\n\n // Detect type from path\n let type: \"fix\" | \"blueprint\" | \"solution\";\n let schema: typeof FixPatternSchema | typeof BlueprintSchema | typeof SolutionPatternSchema;\n\n if (filePath.includes(\"/fixes/\") || filePath.includes(\"\\\\fixes\\\\\")) {\n type = \"fix\";\n schema = FixPatternSchema;\n } else if (filePath.includes(\"/blueprints/\") || filePath.includes(\"\\\\blueprints\\\\\")) {\n type = \"blueprint\";\n schema = BlueprintSchema;\n } else if (filePath.includes(\"/solutions/\") || filePath.includes(\"\\\\solutions\\\\\")) {\n type = \"solution\";\n schema = SolutionPatternSchema;\n } else {\n // Try to detect from content\n try {\n const content = await fs.promises.readFile(filePath, \"utf-8\");\n const data = JSON.parse(content);\n\n // Heuristics to detect type\n if (data.trigger && data.solution) {\n type = \"fix\";\n schema = FixPatternSchema;\n } else if (data.stack && data.structure) {\n type = \"blueprint\";\n schema = BlueprintSchema;\n } else if (data.context && data.approach) {\n type = \"solution\";\n schema = SolutionPatternSchema;\n } else {\n // Default to blueprint as it's most common\n type = \"blueprint\";\n schema = BlueprintSchema;\n }\n } catch {\n // Default to blueprint\n type = \"blueprint\";\n schema = BlueprintSchema;\n }\n }\n\n return validatePatternFile(filePath, fileName, type, schema, verbose);\n}\n\n/**\n * Validate a single pattern file\n */\nasync function validatePatternFile(\n filePath: string,\n fileName: string,\n type: \"fix\" | \"blueprint\" | \"solution\",\n schema: typeof FixPatternSchema | typeof BlueprintSchema | typeof SolutionPatternSchema,\n verbose: boolean,\n): Promise<ValidationResult> {\n try {\n const content = await fs.promises.readFile(filePath, \"utf-8\");\n const data = JSON.parse(content);\n\n const validation = schema.safeParse(data);\n\n if (validation.success) {\n return {\n file: fileName,\n type,\n valid: true,\n errors: [],\n fixable: false,\n };\n }\n\n // Collect errors\n const errors = validation.error.issues.map(\n (i) => `${i.path.join(\".\")}: ${i.message}`,\n );\n\n // Try to auto-fix common issues\n const { fixable, fixedData } = tryAutoFix(data, type, validation.error.issues);\n\n return {\n file: fileName,\n type,\n valid: false,\n errors,\n fixable,\n fixedData,\n };\n } catch (error) {\n return {\n file: fileName,\n type,\n valid: false,\n errors: [\n error instanceof Error ? error.message : \"Failed to parse JSON\",\n ],\n fixable: false,\n };\n }\n}\n\n/**\n * Try to auto-fix common validation issues\n */\nfunction tryAutoFix(\n data: Record<string, unknown>,\n type: \"fix\" | \"blueprint\" | \"solution\",\n issues: { path: (string | number)[]; message: string; code: string }[],\n): { fixable: boolean; fixedData?: Record<string, unknown> } {\n const fixedData = { ...data };\n let allFixable = true;\n\n for (const issue of issues) {\n const pathStr = issue.path.join(\".\");\n\n // Auto-fix missing metrics\n if (pathStr === \"metrics\" && issue.code === \"invalid_type\") {\n fixedData.metrics = createDefaultMetrics();\n continue;\n }\n\n // Auto-fix missing setup (for blueprints)\n if (pathStr === \"setup\" && issue.code === \"invalid_type\" && type === \"blueprint\") {\n fixedData.setup = {\n commands: [],\n envVars: [],\n dependencies: [],\n };\n continue;\n }\n\n // Auto-fix missing relatedPatterns\n if (pathStr === \"relatedPatterns\" && issue.code === \"invalid_type\") {\n fixedData.relatedPatterns = [];\n continue;\n }\n\n // Auto-fix missing tags\n if (pathStr === \"tags\" && issue.code === \"invalid_type\") {\n fixedData.tags = [];\n continue;\n }\n\n // Auto-fix missing errorSignatures (for fix patterns)\n if (pathStr === \"errorSignatures\" && issue.code === \"invalid_type\" && type === \"fix\") {\n fixedData.errorSignatures = [];\n continue;\n }\n\n // Auto-fix missing codeChanges (for fix patterns)\n if (pathStr === \"codeChanges\" && issue.code === \"invalid_type\" && type === \"fix\") {\n fixedData.codeChanges = [];\n continue;\n }\n\n // Auto-fix missing problemKeywords (for solutions)\n if (pathStr === \"problemKeywords\" && issue.code === \"invalid_type\" && type === \"solution\") {\n fixedData.problemKeywords = [];\n continue;\n }\n\n // Auto-fix missing implementations (for solutions)\n if (pathStr === \"implementations\" && issue.code === \"invalid_type\" && type === \"solution\") {\n fixedData.implementations = [];\n continue;\n }\n\n // Can't auto-fix this issue\n allFixable = false;\n }\n\n // Re-validate the fixed data\n let schema;\n if (type === \"fix\") {\n schema = FixPatternSchema;\n } else if (type === \"blueprint\") {\n schema = BlueprintSchema;\n } else {\n schema = SolutionPatternSchema;\n }\n\n const revalidation = schema.safeParse(fixedData);\n if (revalidation.success) {\n return { fixable: true, fixedData };\n }\n\n // If still invalid, check if we fixed some but not all\n if (allFixable) {\n return { fixable: true, fixedData };\n }\n\n return { fixable: false };\n}\n\n// ============================================\n// learn:capture Command\n// ============================================\n\n/**\n * Library to tag mapping for dependency-based tag inference\n */\nconst LIBRARY_TAG_MAP: Record<string, { category: PatternTag[\"category\"]; name: string }[]> = {\n // Frontend Frameworks\n \"react\": [{ category: \"framework\", name: \"react\" }],\n \"react-dom\": [{ category: \"framework\", name: \"react\" }],\n \"next\": [{ category: \"framework\", name: \"next\" }],\n \"vue\": [{ category: \"framework\", name: \"vue\" }],\n \"nuxt\": [{ category: \"framework\", name: \"nuxt\" }],\n \"svelte\": [{ category: \"framework\", name: \"svelte\" }],\n \"@sveltejs/kit\": [{ category: \"framework\", name: \"sveltekit\" }],\n \"solid-js\": [{ category: \"framework\", name: \"solid\" }],\n \"@angular/core\": [{ category: \"framework\", name: \"angular\" }],\n \"astro\": [{ category: \"framework\", name: \"astro\" }],\n \"remix\": [{ category: \"framework\", name: \"remix\" }],\n\n // Backend Frameworks\n \"express\": [{ category: \"framework\", name: \"express\" }],\n \"fastify\": [{ category: \"framework\", name: \"fastify\" }],\n \"hono\": [{ category: \"framework\", name: \"hono\" }],\n \"koa\": [{ category: \"framework\", name: \"koa\" }],\n \"@nestjs/core\": [{ category: \"framework\", name: \"nestjs\" }],\n \"hapi\": [{ category: \"framework\", name: \"hapi\" }],\n\n // Testing\n \"vitest\": [{ category: \"tooling\", name: \"vitest\" }, { category: \"category\", name: \"testing\" }],\n \"jest\": [{ category: \"tooling\", name: \"jest\" }, { category: \"category\", name: \"testing\" }],\n \"@testing-library/react\": [{ category: \"tooling\", name: \"testing-library\" }],\n \"playwright\": [{ category: \"tooling\", name: \"playwright\" }, { category: \"category\", name: \"e2e\" }],\n \"cypress\": [{ category: \"tooling\", name: \"cypress\" }, { category: \"category\", name: \"e2e\" }],\n\n // State Management\n \"zustand\": [{ category: \"tooling\", name: \"zustand\" }, { category: \"category\", name: \"state\" }],\n \"redux\": [{ category: \"tooling\", name: \"redux\" }, { category: \"category\", name: \"state\" }],\n \"@reduxjs/toolkit\": [{ category: \"tooling\", name: \"redux-toolkit\" }, { category: \"category\", name: \"state\" }],\n \"jotai\": [{ category: \"tooling\", name: \"jotai\" }, { category: \"category\", name: \"state\" }],\n \"recoil\": [{ category: \"tooling\", name: \"recoil\" }, { category: \"category\", name: \"state\" }],\n \"mobx\": [{ category: \"tooling\", name: \"mobx\" }, { category: \"category\", name: \"state\" }],\n \"pinia\": [{ category: \"tooling\", name: \"pinia\" }, { category: \"category\", name: \"state\" }],\n \"xstate\": [{ category: \"tooling\", name: \"xstate\" }, { category: \"category\", name: \"state-machine\" }],\n\n // Database & ORM\n \"prisma\": [{ category: \"tooling\", name: \"prisma\" }, { category: \"category\", name: \"database\" }],\n \"@prisma/client\": [{ category: \"tooling\", name: \"prisma\" }, { category: \"category\", name: \"database\" }],\n \"drizzle-orm\": [{ category: \"tooling\", name: \"drizzle\" }, { category: \"category\", name: \"database\" }],\n \"typeorm\": [{ category: \"tooling\", name: \"typeorm\" }, { category: \"category\", name: \"database\" }],\n \"mongoose\": [{ category: \"tooling\", name: \"mongoose\" }, { category: \"category\", name: \"mongodb\" }],\n \"knex\": [{ category: \"tooling\", name: \"knex\" }, { category: \"category\", name: \"database\" }],\n \"sequelize\": [{ category: \"tooling\", name: \"sequelize\" }, { category: \"category\", name: \"database\" }],\n\n // Authentication\n \"next-auth\": [{ category: \"tooling\", name: \"next-auth\" }, { category: \"category\", name: \"auth\" }],\n \"@auth/core\": [{ category: \"tooling\", name: \"authjs\" }, { category: \"category\", name: \"auth\" }],\n \"passport\": [{ category: \"tooling\", name: \"passport\" }, { category: \"category\", name: \"auth\" }],\n \"lucia\": [{ category: \"tooling\", name: \"lucia\" }, { category: \"category\", name: \"auth\" }],\n \"@clerk/nextjs\": [{ category: \"tooling\", name: \"clerk\" }, { category: \"category\", name: \"auth\" }],\n\n // UI Libraries\n \"@radix-ui/react-dialog\": [{ category: \"tooling\", name: \"radix-ui\" }],\n \"@radix-ui/react-dropdown-menu\": [{ category: \"tooling\", name: \"radix-ui\" }],\n \"@shadcn/ui\": [{ category: \"tooling\", name: \"shadcn\" }],\n \"@chakra-ui/react\": [{ category: \"tooling\", name: \"chakra-ui\" }],\n \"@mantine/core\": [{ category: \"tooling\", name: \"mantine\" }],\n \"@headlessui/react\": [{ category: \"tooling\", name: \"headlessui\" }],\n \"antd\": [{ category: \"tooling\", name: \"antd\" }],\n \"@mui/material\": [{ category: \"tooling\", name: \"material-ui\" }],\n\n // Styling\n \"tailwindcss\": [{ category: \"tooling\", name: \"tailwind\" }],\n \"styled-components\": [{ category: \"tooling\", name: \"styled-components\" }],\n \"@emotion/react\": [{ category: \"tooling\", name: \"emotion\" }],\n \"sass\": [{ category: \"tooling\", name: \"sass\" }],\n\n // API & Data Fetching\n \"@tanstack/react-query\": [{ category: \"tooling\", name: \"tanstack-query\" }, { category: \"category\", name: \"data-fetching\" }],\n \"swr\": [{ category: \"tooling\", name: \"swr\" }, { category: \"category\", name: \"data-fetching\" }],\n \"@trpc/server\": [{ category: \"tooling\", name: \"trpc\" }, { category: \"category\", name: \"api\" }],\n \"@trpc/client\": [{ category: \"tooling\", name: \"trpc\" }, { category: \"category\", name: \"api\" }],\n \"graphql\": [{ category: \"tooling\", name: \"graphql\" }, { category: \"category\", name: \"api\" }],\n \"@apollo/client\": [{ category: \"tooling\", name: \"apollo\" }, { category: \"category\", name: \"graphql\" }],\n \"axios\": [{ category: \"tooling\", name: \"axios\" }],\n\n // Form Libraries\n \"react-hook-form\": [{ category: \"tooling\", name: \"react-hook-form\" }, { category: \"category\", name: \"forms\" }],\n \"formik\": [{ category: \"tooling\", name: \"formik\" }, { category: \"category\", name: \"forms\" }],\n \"@tanstack/react-form\": [{ category: \"tooling\", name: \"tanstack-form\" }, { category: \"category\", name: \"forms\" }],\n\n // Validation\n \"zod\": [{ category: \"tooling\", name: \"zod\" }, { category: \"category\", name: \"validation\" }],\n \"yup\": [{ category: \"tooling\", name: \"yup\" }, { category: \"category\", name: \"validation\" }],\n \"valibot\": [{ category: \"tooling\", name: \"valibot\" }, { category: \"category\", name: \"validation\" }],\n\n // Build Tools\n \"vite\": [{ category: \"tooling\", name: \"vite\" }],\n \"esbuild\": [{ category: \"tooling\", name: \"esbuild\" }],\n \"tsup\": [{ category: \"tooling\", name: \"tsup\" }],\n \"webpack\": [{ category: \"tooling\", name: \"webpack\" }],\n \"turbo\": [{ category: \"tooling\", name: \"turborepo\" }],\n\n // Utilities\n \"lodash\": [{ category: \"tooling\", name: \"lodash\" }],\n \"date-fns\": [{ category: \"tooling\", name: \"date-fns\" }],\n \"dayjs\": [{ category: \"tooling\", name: \"dayjs\" }],\n \"uuid\": [{ category: \"tooling\", name: \"uuid\" }],\n \"nanoid\": [{ category: \"tooling\", name: \"nanoid\" }],\n\n // CLI & Developer Tools\n \"commander\": [{ category: \"tooling\", name: \"commander\" }, { category: \"category\", name: \"cli\" }],\n \"yargs\": [{ category: \"tooling\", name: \"yargs\" }, { category: \"category\", name: \"cli\" }],\n \"@clack/prompts\": [{ category: \"tooling\", name: \"clack\" }, { category: \"category\", name: \"cli\" }],\n \"inquirer\": [{ category: \"tooling\", name: \"inquirer\" }, { category: \"category\", name: \"cli\" }],\n \"chalk\": [{ category: \"tooling\", name: \"chalk\" }],\n\n // Runtime & Languages\n \"typescript\": [{ category: \"language\", name: \"typescript\" }],\n};\n\ninterface LearnCaptureOptions {\n name?: string;\n description?: string;\n framework?: string;\n tags?: string;\n dryRun?: boolean;\n}\n\n/**\n * Infer a pattern name from file paths\n */\nfunction inferPatternName(filePaths: string[]): string {\n // If single file, use filename without extension\n if (filePaths.length === 1) {\n const fileName = path.basename(filePaths[0]);\n const nameWithoutExt = fileName.replace(/\\.[^.]+$/, \"\");\n // Convert to title case\n return nameWithoutExt\n .replace(/[-_]/g, \" \")\n .replace(/([A-Z])/g, \" $1\")\n .trim()\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(\" \");\n }\n\n // Multiple files - find common directory or pattern\n const dirs = filePaths.map((p) => path.dirname(p));\n const uniqueDirs = [...new Set(dirs)];\n\n if (uniqueDirs.length === 1 && uniqueDirs[0] !== \".\") {\n // All in same directory\n const dirName = path.basename(uniqueDirs[0]);\n return dirName\n .replace(/[-_]/g, \" \")\n .replace(/([A-Z])/g, \" $1\")\n .trim()\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(\" \") + \" Pattern\";\n }\n\n // Find common prefix among filenames\n const fileNames = filePaths.map((p) => path.basename(p).replace(/\\.[^.]+$/, \"\"));\n if (fileNames.length > 0) {\n let commonPrefix = fileNames[0];\n for (const name of fileNames.slice(1)) {\n while (!name.startsWith(commonPrefix) && commonPrefix.length > 0) {\n commonPrefix = commonPrefix.slice(0, -1);\n }\n }\n if (commonPrefix.length > 2) {\n return commonPrefix\n .replace(/[-_]/g, \" \")\n .replace(/([A-Z])/g, \" $1\")\n .trim()\n .split(/\\s+/)\n .map((w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())\n .join(\" \") + \" Pattern\";\n }\n }\n\n // Default to file count\n return `Multi-file Pattern (${filePaths.length} files)`;\n}\n\n/**\n * Infer tags from package.json dependencies\n */\nasync function inferTagsFromDependencies(cwd: string): Promise<PatternTag[]> {\n const tags: PatternTag[] = [];\n const seenTags = new Set<string>();\n\n const packageJsonPath = path.join(cwd, \"package.json\");\n if (!fs.existsSync(packageJsonPath)) {\n return tags;\n }\n\n try {\n const packageJson = JSON.parse(fs.readFileSync(packageJsonPath, \"utf-8\"));\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n for (const dep of Object.keys(allDeps)) {\n const mappedTags = LIBRARY_TAG_MAP[dep];\n if (mappedTags) {\n for (const tag of mappedTags) {\n const key = `${tag.category}:${tag.name}`;\n if (!seenTags.has(key)) {\n seenTags.add(key);\n tags.push(tag);\n }\n }\n }\n }\n } catch {\n // Ignore parse errors\n }\n\n return tags;\n}\n\n/**\n * Infer tags from file content and extensions\n */\nfunction inferTagsFromContent(filePaths: string[]): PatternTag[] {\n const tags: PatternTag[] = [];\n const seenTags = new Set<string>();\n\n const addTag = (category: PatternTag[\"category\"], name: string) => {\n const key = `${category}:${name}`;\n if (!seenTags.has(key)) {\n seenTags.add(key);\n tags.push({ category, name });\n }\n };\n\n for (const filePath of filePaths) {\n const ext = path.extname(filePath).toLowerCase();\n const fileName = path.basename(filePath).toLowerCase();\n\n // Language detection\n if (ext === \".ts\" || ext === \".tsx\") {\n addTag(\"language\", \"typescript\");\n } else if (ext === \".js\" || ext === \".jsx\" || ext === \".mjs\" || ext === \".cjs\") {\n addTag(\"language\", \"javascript\");\n } else if (ext === \".py\") {\n addTag(\"language\", \"python\");\n } else if (ext === \".go\") {\n addTag(\"language\", \"go\");\n } else if (ext === \".rs\") {\n addTag(\"language\", \"rust\");\n } else if (ext === \".css\" || ext === \".scss\" || ext === \".sass\") {\n addTag(\"tooling\", \"css\");\n }\n\n // React detection\n if (ext === \".tsx\" || ext === \".jsx\") {\n addTag(\"framework\", \"react\");\n }\n\n // Test file detection\n if (fileName.includes(\".test.\") || fileName.includes(\".spec.\") || fileName.startsWith(\"test_\")) {\n addTag(\"category\", \"testing\");\n }\n\n // Config file detection\n if (fileName.includes(\"config\") || fileName.startsWith(\".\")) {\n addTag(\"category\", \"configuration\");\n }\n\n // Component detection\n if (filePath.includes(\"/components/\") || filePath.includes(\"\\\\components\\\\\")) {\n addTag(\"category\", \"component\");\n }\n\n // Hook detection\n if (filePath.includes(\"/hooks/\") || filePath.includes(\"\\\\hooks\\\\\") || fileName.startsWith(\"use\")) {\n addTag(\"category\", \"hooks\");\n }\n\n // API/route detection\n if (filePath.includes(\"/api/\") || filePath.includes(\"\\\\api\\\\\") || filePath.includes(\"/routes/\")) {\n addTag(\"category\", \"api\");\n }\n\n // Utils detection\n if (filePath.includes(\"/utils/\") || filePath.includes(\"\\\\utils\\\\\") || filePath.includes(\"/lib/\")) {\n addTag(\"category\", \"utilities\");\n }\n }\n\n return tags;\n}\n\n/**\n * Capture files as a blueprint pattern with auto-inferred metadata\n */\nexport async function learnCaptureCommand(paths: string[], options: LearnCaptureOptions) {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n\n console.log(chalk.cyan(\"\\n📸 Capture Files as Blueprint\\n\"));\n\n // Resolve all paths and validate they exist\n const resolvedPaths: string[] = [];\n const relativePaths: string[] = [];\n\n for (const inputPath of paths) {\n const absolutePath = path.isAbsolute(inputPath) ? inputPath : path.resolve(cwd, inputPath);\n \n if (!fs.existsSync(absolutePath)) {\n console.log(chalk.red(`✗ File not found: ${inputPath}`));\n process.exit(1);\n }\n\n const stat = fs.statSync(absolutePath);\n if (stat.isDirectory()) {\n // Recursively get all files in directory\n const files = getAllFilesInDir(absolutePath);\n for (const file of files) {\n resolvedPaths.push(file);\n relativePaths.push(path.relative(cwd, file));\n }\n } else {\n resolvedPaths.push(absolutePath);\n relativePaths.push(path.relative(cwd, absolutePath));\n }\n }\n\n if (resolvedPaths.length === 0) {\n console.log(chalk.red(\"✗ No files found to capture\"));\n process.exit(1);\n }\n\n console.log(chalk.dim(`Found ${resolvedPaths.length} file(s) to capture:\\n`));\n for (const relPath of relativePaths.slice(0, 10)) {\n console.log(chalk.dim(` • ${relPath}`));\n }\n if (relativePaths.length > 10) {\n console.log(chalk.dim(` ... and ${relativePaths.length - 10} more`));\n }\n console.log();\n\n // Infer tags from dependencies and content\n const depTags = await inferTagsFromDependencies(cwd);\n const contentTags = inferTagsFromContent(relativePaths);\n const allInferredTags = [...depTags, ...contentTags];\n\n // Deduplicate tags\n const seenTagKeys = new Set<string>();\n const uniqueTags: PatternTag[] = [];\n for (const tag of allInferredTags) {\n const key = `${tag.category}:${tag.name}`;\n if (!seenTagKeys.has(key)) {\n seenTagKeys.add(key);\n uniqueTags.push(tag);\n }\n }\n\n // Parse additional tags from options\n if (options.tags) {\n const tagPairs = options.tags.split(\",\").map((t) => t.trim());\n for (const pair of tagPairs) {\n const [cat, val] = pair.split(\":\");\n if (cat && val) {\n const key = `${cat}:${val}`;\n if (!seenTagKeys.has(key)) {\n seenTagKeys.add(key);\n uniqueTags.push({\n category: cat as PatternTag[\"category\"],\n name: val,\n });\n }\n }\n }\n }\n\n // Infer or get pattern name\n let name = options.name;\n if (!name) {\n const inferredName = inferPatternName(relativePaths);\n console.log(chalk.dim(`Inferred name: \"${inferredName}\"`));\n \n const nameInput = await p.text({\n message: \"Pattern name:\",\n placeholder: inferredName,\n initialValue: inferredName,\n validate: (value) => {\n if (!value || value.length < 3) return \"Name must be at least 3 characters\";\n if (value.length > 100) return \"Name must be less than 100 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(nameInput)) {\n p.cancel(\"Capture cancelled\");\n process.exit(0);\n }\n name = nameInput as string;\n }\n\n // Get description\n let description = options.description;\n if (!description) {\n const descInput = await p.text({\n message: \"Description:\",\n placeholder: \"What does this pattern provide?\",\n validate: (value) => {\n if (!value || value.length < 10) return \"Description must be at least 10 characters\";\n if (value.length > 500) return \"Description must be less than 500 characters\";\n return undefined;\n },\n });\n\n if (p.isCancel(descInput)) {\n p.cancel(\"Capture cancelled\");\n process.exit(0);\n }\n description = descInput as string;\n }\n\n // Determine framework\n let framework = options.framework;\n if (!framework) {\n // Try to get from inferred tags\n const frameworkTag = uniqueTags.find((t) => t.category === \"framework\");\n framework = frameworkTag?.name || \"general\";\n }\n\n // Show inferred tags and allow editing\n if (uniqueTags.length > 0) {\n console.log(chalk.dim(\"\\nInferred tags:\"));\n console.log(chalk.dim(` ${formatTags(uniqueTags)}`));\n }\n\n // Read file contents\n const files: Array<{ path: string; content: string; language: string }> = [];\n for (let i = 0; i < resolvedPaths.length; i++) {\n const absolutePath = resolvedPaths[i];\n const relativePath = relativePaths[i];\n const content = fs.readFileSync(absolutePath, \"utf-8\");\n const ext = path.extname(relativePath).slice(1);\n \n // Map extension to language\n const languageMap: Record<string, string> = {\n ts: \"typescript\",\n tsx: \"typescript\",\n js: \"javascript\",\n jsx: \"javascript\",\n mjs: \"javascript\",\n cjs: \"javascript\",\n py: \"python\",\n go: \"go\",\n rs: \"rust\",\n css: \"css\",\n scss: \"scss\",\n html: \"html\",\n json: \"json\",\n yaml: \"yaml\",\n yml: \"yaml\",\n md: \"markdown\",\n mdx: \"mdx\",\n sql: \"sql\",\n sh: \"bash\",\n bash: \"bash\",\n zsh: \"bash\",\n };\n\n files.push({\n path: relativePath,\n content,\n language: languageMap[ext] || ext || \"text\",\n });\n }\n\n // Determine the primary language from files\n const languageCounts: Record<string, number> = {};\n for (const file of files) {\n languageCounts[file.language] = (languageCounts[file.language] || 0) + 1;\n }\n const primaryLanguage = Object.entries(languageCounts)\n .sort((a, b) => b[1] - a[1])[0]?.[0] || \"typescript\";\n\n // Create blueprint with proper schema structure\n const now = new Date().toISOString();\n const contributorManager = new ContributorManager(cwd);\n const contributorResult = await contributorManager.getOrCreateId();\n const contributorId = contributorResult.success && contributorResult.data \n ? contributorResult.data \n : undefined;\n\n // Store file contents in structure.keyFiles\n const keyFiles = files.map((f) => ({\n path: f.path,\n purpose: `${f.language} file`,\n content: f.content,\n }));\n\n const blueprint: Blueprint = {\n id: crypto.randomUUID(),\n name,\n description,\n tags: uniqueTags,\n stack: {\n framework,\n language: primaryLanguage,\n runtime: \"node\",\n packageManager: \"pnpm\",\n dependencies: [],\n devDependencies: [],\n },\n structure: {\n directories: [...new Set(files.map((f) => path.dirname(f.path)).filter((d) => d !== \".\"))],\n keyFiles,\n },\n setup: {\n prerequisites: [],\n steps: [],\n configs: [],\n },\n compatibility: {\n framework,\n frameworkVersion: \">=1.0.0\",\n runtime: \"node\",\n runtimeVersion: \">=18.0.0\",\n dependencies: [],\n },\n metrics: {\n applications: 0,\n successes: 0,\n failures: 0,\n successRate: 0,\n },\n relatedPatterns: [],\n isPrivate: true,\n contributorId,\n createdAt: now,\n updatedAt: now,\n };\n\n // Dry run - just show what would be captured\n if (options.dryRun) {\n console.log(chalk.yellow(\"\\n🔍 Dry Run - Would capture:\\n\"));\n console.log(chalk.bold(`Name: ${name}`));\n console.log(chalk.dim(`Description: ${description}`));\n console.log(chalk.dim(`Framework: ${framework}`));\n console.log(chalk.dim(`Tags: ${formatTags(uniqueTags)}`));\n console.log(chalk.dim(`Files: ${files.length}`));\n console.log(chalk.dim(`ID: ${blueprint.id}`));\n console.log(chalk.yellow(\"\\n⚠️ No changes made (dry run)\"));\n return;\n }\n\n // Save blueprint\n const result = await store.saveBlueprint(blueprint);\n\n if (!result.success) {\n console.log(chalk.red(`\\n✗ Failed to save blueprint: ${result.error}`));\n process.exit(1);\n }\n\n console.log(chalk.green(\"\\n✓ Blueprint captured successfully!\\n\"));\n console.log(chalk.bold(`ID: ${blueprint.id}`));\n console.log(chalk.dim(`Name: ${name}`));\n console.log(chalk.dim(`Files: ${files.length}`));\n console.log(chalk.dim(`Tags: ${formatTags(uniqueTags)}`));\n console.log(chalk.dim(`\\nTo apply this pattern:`));\n console.log(chalk.cyan(` pnpm workflow:learn:apply ${blueprint.id}`));\n console.log(chalk.dim(`\\nTo publish to registry:`));\n console.log(chalk.cyan(` pnpm workflow:learn:publish ${blueprint.id}`));\n}\n\n/**\n * Recursively get all files in a directory\n */\nfunction getAllFilesInDir(dirPath: string): string[] {\n const files: string[] = [];\n const entries = fs.readdirSync(dirPath, { withFileTypes: true });\n\n for (const entry of entries) {\n const fullPath = path.join(dirPath, entry.name);\n \n // Skip hidden files and common ignore patterns\n if (entry.name.startsWith(\".\") || \n entry.name === \"node_modules\" || \n entry.name === \"dist\" ||\n entry.name === \"build\" ||\n entry.name === \".git\") {\n continue;\n }\n\n if (entry.isDirectory()) {\n files.push(...getAllFilesInDir(fullPath));\n } else {\n files.push(fullPath);\n }\n }\n\n return files;\n}\n\n// ============================================\n// learn:analyze Command\n// ============================================\n\ninterface LearnAnalyzeOptions {\n verbose?: boolean;\n}\n\n/**\n * Analyze patterns in the codebase and suggest learnings\n */\nexport async function learnAnalyzeCommand(options: LearnAnalyzeOptions): Promise<void> {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const verbose = options.verbose ?? false;\n\n console.log(chalk.cyan(\"\\n🔍 Analyzing Codebase for Learning Opportunities\\n\"));\n\n // Get existing patterns\n const fixResult = await store.listFixPatterns({});\n const bpResult = await store.listBlueprints({});\n\n const existingPatterns = [\n ...(fixResult.data || []).map((p) => p.name.toLowerCase()),\n ...(bpResult.data || []).map((p) => p.name.toLowerCase()),\n ];\n\n // Scan for common patterns\n const opportunities: Array<{ type: string; name: string; description: string; path?: string }> = [];\n\n // Check for auth patterns\n const authPaths = [\"src/auth\", \"src/lib/auth\", \"lib/auth\", \"app/api/auth\"];\n for (const authPath of authPaths) {\n if (fs.existsSync(path.join(cwd, authPath))) {\n if (!existingPatterns.some((p) => p.includes(\"auth\"))) {\n opportunities.push({\n type: \"blueprint\",\n name: \"Authentication Module\",\n description: \"Capture your authentication implementation as a reusable pattern\",\n path: authPath,\n });\n }\n }\n }\n\n // Check for API route patterns\n const apiPaths = [\"src/api\", \"app/api\", \"pages/api\", \"src/routes\"];\n for (const apiPath of apiPaths) {\n if (fs.existsSync(path.join(cwd, apiPath))) {\n if (!existingPatterns.some((p) => p.includes(\"api\"))) {\n opportunities.push({\n type: \"blueprint\",\n name: \"API Structure\",\n description: \"Capture your API routing structure as a blueprint\",\n path: apiPath,\n });\n }\n }\n }\n\n // Check for component patterns\n const componentPaths = [\"src/components\", \"components\", \"src/ui\"];\n for (const compPath of componentPaths) {\n if (fs.existsSync(path.join(cwd, compPath))) {\n if (!existingPatterns.some((p) => p.includes(\"component\"))) {\n opportunities.push({\n type: \"blueprint\",\n name: \"Component Library\",\n description: \"Capture your component structure as a reusable pattern\",\n path: compPath,\n });\n }\n }\n }\n\n // Check for test patterns\n const testPaths = [\"__tests__\", \"test\", \"tests\", \"src/__tests__\"];\n for (const testPath of testPaths) {\n if (fs.existsSync(path.join(cwd, testPath))) {\n if (!existingPatterns.some((p) => p.includes(\"test\"))) {\n opportunities.push({\n type: \"blueprint\",\n name: \"Testing Structure\",\n description: \"Capture your testing setup as a blueprint\",\n path: testPath,\n });\n }\n }\n }\n\n // Display results\n if (opportunities.length === 0) {\n console.log(chalk.green(\" ✓ No new learning opportunities identified\"));\n console.log(chalk.dim(\"\\n Your patterns seem well-captured!\"));\n return;\n }\n\n console.log(chalk.bold(` Found ${opportunities.length} potential learning opportunities:\\n`));\n\n for (const opp of opportunities) {\n const icon = opp.type === \"blueprint\" ? \"📐\" : \"🔧\";\n console.log(` ${icon} ${chalk.green(opp.name)}`);\n console.log(chalk.dim(` ${opp.description}`));\n if (opp.path && verbose) {\n console.log(chalk.dim(` Path: ${opp.path}`));\n }\n console.log(\"\");\n }\n\n console.log(chalk.dim(\" To capture a pattern:\"));\n console.log(chalk.cyan(\" workflow learn capture <path> --name <name>\"));\n}\n\n// ============================================\n// learn:export Command\n// ============================================\n\ninterface LearnExportOptions {\n output?: string;\n format?: \"json\" | \"yaml\";\n type?: \"fix\" | \"blueprint\" | \"all\";\n}\n\n/**\n * Export learning patterns to a file\n */\nexport async function learnExportCommand(options: LearnExportOptions): Promise<void> {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const format = options.format ?? \"json\";\n const patternType = options.type ?? \"all\";\n const outputPath = options.output ?? `patterns-export.${format}`;\n\n console.log(chalk.cyan(\"\\n📤 Exporting Learning Patterns\\n\"));\n\n const exportData: { fixes: FixPattern[]; blueprints: Blueprint[] } = {\n fixes: [],\n blueprints: [],\n };\n\n // Export fix patterns\n if (patternType === \"all\" || patternType === \"fix\") {\n const fixResult = await store.listFixPatterns({});\n if (fixResult.success && fixResult.data) {\n exportData.fixes = fixResult.data;\n }\n }\n\n // Export blueprints\n if (patternType === \"all\" || patternType === \"blueprint\") {\n const bpResult = await store.listBlueprints({});\n if (bpResult.success && bpResult.data) {\n exportData.blueprints = bpResult.data;\n }\n }\n\n const totalCount = exportData.fixes.length + exportData.blueprints.length;\n\n if (totalCount === 0) {\n console.log(chalk.yellow(\" No patterns to export\"));\n return;\n }\n\n // Format output\n let output: string;\n if (format === \"yaml\") {\n // Simple YAML-like output (for actual YAML, would need a library)\n output = `# Workflow Agent Patterns Export\\n# Exported: ${new Date().toISOString()}\\n\\n`;\n output += `fixes:\\n`;\n for (const fix of exportData.fixes) {\n output += ` - id: ${fix.id}\\n`;\n output += ` name: \"${fix.name}\"\\n`;\n output += ` category: ${fix.category}\\n`;\n output += ` description: \"${fix.description}\"\\n\\n`;\n }\n output += `blueprints:\\n`;\n for (const bp of exportData.blueprints) {\n output += ` - id: ${bp.id}\\n`;\n output += ` name: \"${bp.name}\"\\n`;\n output += ` description: \"${bp.description}\"\\n\\n`;\n }\n } else {\n output = JSON.stringify(\n {\n version: \"1.0\",\n exportedAt: new Date().toISOString(),\n ...exportData,\n },\n null,\n 2,\n );\n }\n\n // Write file\n const fullOutputPath = path.isAbsolute(outputPath)\n ? outputPath\n : path.join(cwd, outputPath);\n\n await fs.promises.writeFile(fullOutputPath, output, \"utf-8\");\n\n console.log(chalk.green(` ✓ Exported ${totalCount} patterns\\n`));\n console.log(chalk.dim(` Fix patterns: ${exportData.fixes.length}`));\n console.log(chalk.dim(` Blueprints: ${exportData.blueprints.length}`));\n console.log(chalk.dim(` Output: ${fullOutputPath}`));\n console.log(chalk.dim(` Format: ${format.toUpperCase()}`));\n}\n\n// ============================================\n// learn:import Command\n// ============================================\n\ninterface LearnImportOptions {\n format?: \"json\" | \"yaml\";\n dryRun?: boolean;\n merge?: boolean;\n}\n\n/**\n * Import learning patterns from a file\n */\nexport async function learnImportCommand(\n file: string,\n options: LearnImportOptions,\n): Promise<void> {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const dryRun = options.dryRun ?? false;\n const merge = options.merge ?? true;\n\n console.log(chalk.cyan(\"\\n📥 Importing Learning Patterns\\n\"));\n\n const filePath = path.isAbsolute(file) ? file : path.join(cwd, file);\n\n if (!fs.existsSync(filePath)) {\n console.log(chalk.red(` ✗ File not found: ${filePath}`));\n process.exit(1);\n }\n\n const content = await fs.promises.readFile(filePath, \"utf-8\");\n\n let importData: { fixes?: FixPattern[]; blueprints?: Blueprint[] };\n\n try {\n // Detect format\n if (file.endsWith(\".yaml\") || file.endsWith(\".yml\")) {\n console.log(chalk.yellow(\" YAML import not fully supported, treating as JSON\"));\n }\n importData = JSON.parse(content);\n } catch {\n console.log(chalk.red(\" ✗ Failed to parse import file\"));\n process.exit(1);\n }\n\n const fixes = importData.fixes || [];\n const blueprints = importData.blueprints || [];\n const totalCount = fixes.length + blueprints.length;\n\n if (totalCount === 0) {\n console.log(chalk.yellow(\" No patterns found in import file\"));\n return;\n }\n\n console.log(chalk.dim(` Found ${fixes.length} fix patterns`));\n console.log(chalk.dim(` Found ${blueprints.length} blueprints\\n`));\n\n if (dryRun) {\n console.log(chalk.yellow(\" 🔍 Dry run - no changes will be made\\n\"));\n\n for (const fix of fixes) {\n console.log(chalk.dim(` Would import fix: ${fix.name} (${fix.id})`));\n }\n for (const bp of blueprints) {\n console.log(chalk.dim(` Would import blueprint: ${bp.name} (${bp.id})`));\n }\n return;\n }\n\n // Import patterns\n let imported = 0;\n let skipped = 0;\n\n for (const fix of fixes) {\n // Check if exists\n const existing = await store.getFixPattern(fix.id);\n if (existing.success && existing.data && !merge) {\n console.log(chalk.yellow(` Skipped (exists): ${fix.name}`));\n skipped++;\n continue;\n }\n\n const result = await store.saveFixPattern(fix);\n if (result.success) {\n console.log(chalk.green(` ✓ Imported: ${fix.name}`));\n imported++;\n } else {\n console.log(chalk.red(` ✗ Failed: ${fix.name}`));\n }\n }\n\n for (const bp of blueprints) {\n // Check if exists\n const existing = await store.getBlueprint(bp.id);\n if (existing.success && existing.data && !merge) {\n console.log(chalk.yellow(` Skipped (exists): ${bp.name}`));\n skipped++;\n continue;\n }\n\n const result = await store.saveBlueprint(bp);\n if (result.success) {\n console.log(chalk.green(` ✓ Imported: ${bp.name}`));\n imported++;\n } else {\n console.log(chalk.red(` ✗ Failed: ${bp.name}`));\n }\n }\n\n console.log(chalk.green(`\\n ✓ Import complete`));\n console.log(chalk.dim(` Imported: ${imported}`));\n console.log(chalk.dim(` Skipped: ${skipped}`));\n}\n\n// ============================================\n// learn:clean Command\n// ============================================\n\ninterface LearnCleanOptions {\n dryRun?: boolean;\n deprecated?: boolean;\n stale?: boolean;\n all?: boolean;\n}\n\n/**\n * Clean old or stale learning patterns\n */\nexport async function learnCleanCommand(options: LearnCleanOptions): Promise<void> {\n const cwd = getWorkspacePath();\n const store = new PatternStore(cwd);\n await store.initialize();\n const dryRun = options.dryRun ?? false;\n const cleanDeprecated = options.deprecated ?? false;\n const cleanStale = options.stale ?? false;\n const cleanAll = options.all ?? false;\n\n console.log(chalk.cyan(\"\\n🧹 Cleaning Learning Patterns\\n\"));\n\n if (!cleanDeprecated && !cleanStale && !cleanAll) {\n console.log(chalk.yellow(\" Specify what to clean:\"));\n console.log(chalk.dim(\" --deprecated Remove deprecated patterns\"));\n console.log(chalk.dim(\" --stale Remove patterns not used in 90+ days\"));\n console.log(chalk.dim(\" --all Remove all patterns (use with caution!)\"));\n return;\n }\n\n const toRemove: Array<{ id: string; name: string; type: \"fix\" | \"blueprint\"; reason: string }> = [];\n\n // Get all patterns\n const fixResult = await store.listFixPatterns({ includeDeprecated: true });\n const bpResult = await store.listBlueprints({ includeDeprecated: true });\n\n const fixes = fixResult.data || [];\n const blueprints = bpResult.data || [];\n\n const now = Date.now();\n const staleDays = 90;\n const staleThreshold = now - staleDays * 24 * 60 * 60 * 1000;\n\n // Identify patterns to remove\n for (const fix of fixes) {\n if (cleanAll) {\n toRemove.push({ id: fix.id, name: fix.name, type: \"fix\", reason: \"all\" });\n } else if (cleanDeprecated && fix.deprecatedAt) {\n toRemove.push({ id: fix.id, name: fix.name, type: \"fix\", reason: \"deprecated\" });\n } else if (cleanStale) {\n const lastUsed = new Date(fix.updatedAt).getTime();\n if (lastUsed < staleThreshold) {\n toRemove.push({ id: fix.id, name: fix.name, type: \"fix\", reason: \"stale\" });\n }\n }\n }\n\n for (const bp of blueprints) {\n if (cleanAll) {\n toRemove.push({ id: bp.id, name: bp.name, type: \"blueprint\", reason: \"all\" });\n } else if (cleanDeprecated && bp.deprecatedAt) {\n toRemove.push({ id: bp.id, name: bp.name, type: \"blueprint\", reason: \"deprecated\" });\n } else if (cleanStale) {\n const lastUsed = new Date(bp.updatedAt).getTime();\n if (lastUsed < staleThreshold) {\n toRemove.push({ id: bp.id, name: bp.name, type: \"blueprint\", reason: \"stale\" });\n }\n }\n }\n\n if (toRemove.length === 0) {\n console.log(chalk.green(\" ✓ Nothing to clean\"));\n return;\n }\n\n console.log(chalk.bold(` Found ${toRemove.length} patterns to remove:\\n`));\n\n for (const item of toRemove) {\n const icon = item.type === \"fix\" ? \"🔧\" : \"📐\";\n console.log(` ${icon} ${item.name} (${item.reason})`);\n }\n\n if (dryRun) {\n console.log(chalk.yellow(\"\\n 🔍 Dry run - no changes made\"));\n return;\n }\n\n // Confirm\n const confirmed = await p.confirm({\n message: `Remove ${toRemove.length} patterns? This cannot be undone.`,\n initialValue: false,\n });\n\n if (p.isCancel(confirmed) || !confirmed) {\n p.cancel(\"Clean cancelled\");\n return;\n }\n\n // Remove patterns\n let removed = 0;\n const patternsPath = path.join(cwd, \".workflow\", \"patterns\");\n\n for (const item of toRemove) {\n const dir = item.type === \"fix\" ? \"fixes\" : \"blueprints\";\n const filePath = path.join(patternsPath, dir, `${item.id}.json`);\n\n try {\n if (fs.existsSync(filePath)) {\n await fs.promises.unlink(filePath);\n removed++;\n }\n } catch {\n console.log(chalk.red(` ✗ Failed to remove: ${item.name}`));\n }\n }\n\n console.log(chalk.green(`\\n ✓ Removed ${removed} patterns`));\n}\n","/**\n * Scope Command Group\n *\n * Consolidates scope management commands under `workflow scope <subcommand>`:\n * - list: List available scopes\n * - create: Create a custom scope package\n * - migrate: Migrate inline scopes to a custom package\n * - add: Add a scope to the project\n * - remove: Remove a scope from the project\n * - sync: Sync scopes with the registry\n * - analyze: Analyze scope usage in the project\n */\n\nimport { Command } from \"commander\";\nimport chalk from \"chalk\";\nimport { scopeCreateCommand } from \"../scope-create.js\";\nimport { scopeMigrateCommand } from \"../scope-migrate.js\";\nimport { loadConfig } from \"../../../config/index.js\";\n\n// Re-export for backward compatibility\nexport { scopeCreateCommand, scopeMigrateCommand };\n\n/**\n * List available scopes from config and installed packages\n */\nasync function scopeListCommand(): Promise<void> {\n console.log(chalk.bold.cyan(\"\\n📋 Available Scopes\\n\"));\n\n const config = await loadConfig();\n const scopes = config?.scopes || [];\n\n if (scopes.length === 0) {\n console.log(chalk.yellow(\" No scopes configured.\"));\n console.log(chalk.dim(\"\\n Add scopes with: workflow scope add <name>\"));\n console.log(chalk.dim(\" Or create a custom scope: workflow scope create\"));\n return;\n }\n\n // Group by category\n const byCategory: Record<string, typeof scopes> = {};\n for (const scope of scopes) {\n const cat = scope.category || \"other\";\n if (!byCategory[cat]) byCategory[cat] = [];\n byCategory[cat].push(scope);\n }\n\n for (const [category, categoryScopes] of Object.entries(byCategory)) {\n console.log(chalk.bold(` ${category.charAt(0).toUpperCase() + category.slice(1)}:`));\n for (const scope of categoryScopes) {\n const emoji = scope.emoji || \"📦\";\n console.log(` ${emoji} ${chalk.green(scope.name)} - ${scope.description || \"No description\"}`);\n }\n console.log(\"\");\n }\n\n console.log(chalk.dim(` Total: ${scopes.length} scopes`));\n}\n\n/**\n * Add a scope to the project configuration\n */\nasync function scopeAddCommand(name: string, options: { description?: string; emoji?: string; category?: string }): Promise<void> {\n console.log(chalk.bold.cyan(`\\n➕ Adding Scope: ${name}\\n`));\n\n const fs = await import(\"fs\");\n const path = await import(\"path\");\n const cwd = process.cwd();\n\n // Find config file\n const configFiles = [\"workflow.config.json\", \"workflow.config.js\", \".workflowrc.json\"];\n let configPath: string | null = null;\n\n for (const file of configFiles) {\n const fullPath = path.join(cwd, file);\n if (fs.existsSync(fullPath)) {\n configPath = fullPath;\n break;\n }\n }\n\n if (!configPath) {\n console.log(chalk.red(\"✗ No workflow configuration file found\"));\n console.log(chalk.yellow(\" Run: workflow init\"));\n process.exit(1);\n }\n\n // Load and update config\n const configContent = fs.readFileSync(configPath, \"utf-8\");\n const config = JSON.parse(configContent);\n\n if (!config.scopes) {\n config.scopes = [];\n }\n\n // Check if scope already exists\n const existing = config.scopes.find((s: { name: string }) => s.name === name);\n if (existing) {\n console.log(chalk.yellow(` Scope \"${name}\" already exists`));\n process.exit(1);\n }\n\n // Add new scope\n const newScope = {\n name,\n description: options.description || `${name} related changes`,\n emoji: options.emoji || \"📦\",\n category: options.category || \"feature\",\n };\n\n config.scopes.push(newScope);\n\n // Write back\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + \"\\n\");\n\n console.log(chalk.green(`✓ Added scope: ${newScope.emoji} ${name}`));\n console.log(chalk.dim(` Description: ${newScope.description}`));\n console.log(chalk.dim(` Category: ${newScope.category}`));\n}\n\n/**\n * Remove a scope from the project configuration\n */\nasync function scopeRemoveCommand(name: string): Promise<void> {\n console.log(chalk.bold.cyan(`\\n➖ Removing Scope: ${name}\\n`));\n\n const fs = await import(\"fs\");\n const path = await import(\"path\");\n const cwd = process.cwd();\n\n // Find config file\n const configFiles = [\"workflow.config.json\", \"workflow.config.js\", \".workflowrc.json\"];\n let configPath: string | null = null;\n\n for (const file of configFiles) {\n const fullPath = path.join(cwd, file);\n if (fs.existsSync(fullPath)) {\n configPath = fullPath;\n break;\n }\n }\n\n if (!configPath) {\n console.log(chalk.red(\"✗ No workflow configuration file found\"));\n process.exit(1);\n }\n\n // Load and update config\n const configContent = fs.readFileSync(configPath, \"utf-8\");\n const config = JSON.parse(configContent);\n\n if (!config.scopes || config.scopes.length === 0) {\n console.log(chalk.yellow(\" No scopes configured\"));\n process.exit(1);\n }\n\n const index = config.scopes.findIndex((s: { name: string }) => s.name === name);\n if (index === -1) {\n console.log(chalk.yellow(` Scope \"${name}\" not found`));\n process.exit(1);\n }\n\n const removed = config.scopes.splice(index, 1)[0];\n\n // Write back\n fs.writeFileSync(configPath, JSON.stringify(config, null, 2) + \"\\n\");\n\n console.log(chalk.green(`✓ Removed scope: ${removed.emoji || \"📦\"} ${name}`));\n}\n\n/**\n * Sync scopes with the community registry\n */\nasync function scopeSyncCommand(options: { push?: boolean; pull?: boolean; dryRun?: boolean }): Promise<void> {\n console.log(chalk.bold.cyan(\"\\n🔄 Syncing Scopes\\n\"));\n\n // Import and delegate to unified sync command\n const { syncCommand } = await import(\"../sync.js\");\n await syncCommand({\n ...options,\n scopes: true,\n learn: false,\n solutions: false,\n });\n}\n\n/**\n * Analyze scope usage in the project\n */\nasync function scopeAnalyzeCommand(): Promise<void> {\n console.log(chalk.bold.cyan(\"\\n🔍 Analyzing Scope Usage\\n\"));\n\n const { execa } = await import(\"execa\");\n const cwd = process.cwd();\n\n try {\n // Get recent commits and analyze scope usage\n const { stdout } = await execa(\"git\", [\"log\", \"--oneline\", \"-50\", \"--format=%s\"], { cwd });\n const commits = stdout.split(\"\\n\").filter(Boolean);\n\n const config = await loadConfig();\n const scopes = config?.scopes || [];\n const scopeNames = scopes.map((s: { name: string }) => s.name);\n\n // Count scope usage\n const usage: Record<string, number> = {};\n let unscoped = 0;\n let invalidScopes: string[] = [];\n\n for (const commit of commits) {\n const match = commit.match(/^\\w+\\(([^)]+)\\):/);\n if (match) {\n const scope = match[1];\n if (scopeNames.includes(scope)) {\n usage[scope] = (usage[scope] || 0) + 1;\n } else {\n if (!invalidScopes.includes(scope)) {\n invalidScopes.push(scope);\n }\n }\n } else if (commit.match(/^\\w+:/)) {\n unscoped++;\n }\n }\n\n // Display results\n console.log(chalk.bold(\" Scope Usage (last 50 commits):\"));\n console.log(\"\");\n\n const sortedUsage = Object.entries(usage).sort((a, b) => b[1] - a[1]);\n for (const [scope, count] of sortedUsage) {\n const scopeConfig = scopes.find((s: { name: string }) => s.name === scope);\n const emoji = scopeConfig?.emoji || \"📦\";\n const bar = \"█\".repeat(Math.min(count, 20));\n console.log(` ${emoji} ${chalk.green(scope.padEnd(15))} ${bar} ${count}`);\n }\n\n if (unscoped > 0) {\n console.log(` ${chalk.yellow(\"(unscoped)\".padEnd(17))} ${\"░\".repeat(Math.min(unscoped, 20))} ${unscoped}`);\n }\n\n // Suggest unused scopes\n const unusedScopes = scopeNames.filter((name: string) => !usage[name]);\n if (unusedScopes.length > 0) {\n console.log(chalk.yellow(\"\\n Unused scopes (consider removing):\"));\n for (const name of unusedScopes) {\n console.log(chalk.dim(` • ${name}`));\n }\n }\n\n // Suggest adding invalid scopes\n if (invalidScopes.length > 0) {\n console.log(chalk.yellow(\"\\n Unknown scopes (consider adding):\"));\n for (const name of invalidScopes) {\n console.log(chalk.dim(` • ${name}`));\n }\n }\n\n console.log(\"\");\n } catch {\n console.log(chalk.yellow(\" Unable to analyze git history\"));\n console.log(chalk.dim(\" Make sure you're in a git repository with commit history\"));\n }\n}\n\n/**\n * Create the scope command group with all subcommands\n */\nexport function createScopeCommand(): Command {\n const scopeCmd = new Command(\"scope\")\n .description(\"Manage custom scope packages\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow scope list ${chalk.dim(\"# List available scopes\")}\n $ workflow scope create --name fintech ${chalk.dim(\"# Create fintech scope package\")}\n $ workflow scope migrate --name my-scopes ${chalk.dim(\"# Migrate inline to package\")}\n $ workflow scope add auth ${chalk.dim(\"# Add auth scope\")}\n $ workflow scope remove legacy ${chalk.dim(\"# Remove legacy scope\")}\n $ workflow scope analyze ${chalk.dim(\"# Analyze scope usage\")}\n`,\n )\n .action(() => {\n // Default action: list scopes\n scopeListCommand();\n });\n\n // list subcommand\n scopeCmd\n .command(\"list\")\n .description(\"List available scopes\")\n .action(scopeListCommand);\n\n // create subcommand\n scopeCmd\n .command(\"create\")\n .description(\"Create a custom scope package\")\n .option(\"--name <name>\", 'Package name (e.g., \"fintech\", \"gaming\")')\n .option(\n \"--scopes <scopes>\",\n \"Comma-separated scopes (format: name:description:emoji:category)\",\n )\n .option(\"--preset-name <preset>\", \"Preset display name\")\n .option(\"--output-dir <dir>\", \"Output directory\")\n .option(\"--no-test\", \"Skip test file generation\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow scope create --name fintech ${chalk.dim(\"# Interactive mode\")}\n $ workflow scope create --name fintech \\\\\n --scopes \"trading:Trade logic:📈:core,\\\\\n risk:Risk mgmt:⚠️:core\" ${chalk.dim(\"# With scopes\")}\n $ workflow scope create --name gaming \\\\\n --output-dir ./packages ${chalk.dim(\"# Custom output\")}\n`,\n )\n .action(scopeCreateCommand);\n\n // migrate subcommand\n scopeCmd\n .command(\"migrate\")\n .description(\"Migrate inline scopes to a custom package\")\n .option(\"--name <name>\", \"Package name for the preset\")\n .option(\"--output-dir <dir>\", \"Output directory\")\n .option(\"--keep-config\", \"Keep inline scopes in config after migration\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow scope migrate --name my-scopes ${chalk.dim(\"# Migrate to package\")}\n $ workflow scope migrate --keep-config ${chalk.dim(\"# Keep inline copy\")}\n`,\n )\n .action(scopeMigrateCommand);\n\n // add subcommand\n scopeCmd\n .command(\"add <name>\")\n .description(\"Add a scope to the project configuration\")\n .option(\"--description <desc>\", \"Scope description\")\n .option(\"--emoji <emoji>\", \"Scope emoji\")\n .option(\"--category <cat>\", \"Scope category (feature, fix, core, etc.)\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow scope add auth ${chalk.dim(\"# Add auth scope\")}\n $ workflow scope add payments --emoji 💳 ${chalk.dim(\"# With emoji\")}\n $ workflow scope add api --category core ${chalk.dim(\"# With category\")}\n`,\n )\n .action(scopeAddCommand);\n\n // remove subcommand\n scopeCmd\n .command(\"remove <name>\")\n .description(\"Remove a scope from the project configuration\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow scope remove legacy ${chalk.dim(\"# Remove scope\")}\n`,\n )\n .action(scopeRemoveCommand);\n\n // sync subcommand\n scopeCmd\n .command(\"sync\")\n .description(\"Sync scopes with the community registry\")\n .option(\"--push\", \"Push local scopes to registry\")\n .option(\"--pull\", \"Pull scopes from registry\")\n .option(\"--dry-run\", \"Preview without syncing\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Examples:\")}\n $ workflow scope sync --push ${chalk.dim(\"# Push to registry\")}\n $ workflow scope sync --pull ${chalk.dim(\"# Pull from registry\")}\n $ workflow scope sync --dry-run ${chalk.dim(\"# Preview changes\")}\n`,\n )\n .action(scopeSyncCommand);\n\n // analyze subcommand\n scopeCmd\n .command(\"analyze\")\n .description(\"Analyze scope usage in the project\")\n .addHelpText(\n \"after\",\n `\n${chalk.bold(\"Details:\")}\n Analyzes recent git commits to show:\n - Which scopes are used most frequently\n - Unused scopes that could be removed\n - Unknown scopes that could be added\n`,\n )\n .action(scopeAnalyzeCommand);\n\n return scopeCmd;\n}\n\n// Export individual commands for direct use\nexport {\n scopeListCommand,\n scopeAddCommand,\n scopeRemoveCommand,\n scopeSyncCommand,\n scopeAnalyzeCommand,\n};\n"],"mappings":"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","names":["Command","chalk","readFileSync","fileURLToPath","dirname","join","fs","spinner","resolve","chalk","chalk","chalk","chalk","p","chalk","existsSync","join","existsSync","writeFile","mkdir","join","join","existsSync","mkdir","writeFile","chalk","join","existsSync","p","chalk","existsSync","join","dirname","fileURLToPath","__filename","fileURLToPath","__dirname","dirname","chalk","join","existsSync","packageJson","p","chalk","chalk","spinner","p","chalk","existsSync","writeFile","mkdir","readFile","join","chalk","isMonorepo","existsSync","join","spinner","mkdir","packageJson","writeFile","readFile","p","chalk","existsSync","writeFile","mkdir","readFile","join","chalk","isMonorepo","existsSync","join","spinner","mkdir","packageJson","writeFile","readFile","chalk","chalk","Command","chalk","p","chalk","chalk","spinner","options","p","chalk","existsSync","join","chalk","join","existsSync","spinner","p","chalk","existsSync","join","dirname","fileURLToPath","__filename","fileURLToPath","__dirname","dirname","chalk","join","existsSync","spinner","p","chalk","existsSync","readFile","writeFile","mkdir","join","existsSync","readFile","join","health","packageJson","join","existsSync","readFile","p","p","chalk","spinner","join","existsSync","readFile","mkdir","writeFile","Command","chalk","p","Command","chalk","chalk","chalk","chalk","fs","path","isWorkflowHook","verifyCommand","Command","chalk","Command","chalk","chalk","p","path","spinner","confirm","fs","Command","chalk","Command","chalk","chalk","p","fs","path","PatternStore","getWorkspacePath","formatDate","PatternStore","chalk","getWorkspacePath","chalk","formatDate","PatternStore","p","pattern","result","packageJson","files","Command","chalk","syncCommand","Command","chalk","chalk","fs","path","syncCommand","execa","Command","__filename","fileURLToPath","__dirname","dirname","readFileSync","join","chalk","Command","autoFixConfigFile","p"]}
|