workflow-agent-cli 2.4.0 → 2.4.2

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.
@@ -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/cli/commands/setup.ts","../../src/cli/commands/scope-create.ts","../../src/cli/commands/scope-migrate.ts","../../src/cli/commands/verify.ts","../../src/cli/commands/auto-setup-command.ts","../../src/cli/commands/learn.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from \"commander\";\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 { setupCommand } from \"./commands/setup.js\";\nimport { scopeCreateCommand } from \"./commands/scope-create.js\";\nimport { scopeMigrateCommand } from \"./commands/scope-migrate.js\";\nimport { verifyCommand } from \"./commands/verify.js\";\nimport { autoSetupCommand } from \"./commands/auto-setup-command.js\";\nimport {\n learnRecordCommand,\n learnListCommand,\n learnApplyCommand,\n learnSyncCommand,\n learnConfigCommand,\n learnDeprecateCommand,\n learnStatsCommand,\n} from \"./commands/learn.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(\"1.0.0\");\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>\")\n .description(\"Validate branch name, commit message, or PR title\")\n .argument(\"<type>\", \"What to validate: branch, commit, or pr\")\n .argument(\n \"[value]\",\n \"Value to validate (defaults to current branch/HEAD commit)\",\n )\n .option(\n \"--suggest-on-error\",\n \"Offer improvement suggestions on validation errors\",\n )\n .action(validateCommand);\n\nprogram\n .command(\"config <action>\")\n .description(\"Manage workflow configuration\")\n .argument(\"<action>\", \"Action: get, set, add, remove\")\n .argument(\"[key]\", \"Config key\")\n .argument(\"[value]\", \"Config value\")\n .action(configCommand);\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\nprogram\n .command(\"setup\")\n .description(\"Add workflow scripts to package.json\")\n .action(setupCommand);\n\nprogram\n .command(\"doctor\")\n .description(\"Run health check and get optimization suggestions\")\n .action(doctorCommand);\n\nprogram\n .command(\"scope: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 .action(scopeCreateCommand);\n\nprogram\n .command(\"scope: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 .action(scopeMigrateCommand);\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(\"auto-setup\")\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// ============================================\n// Learning System Commands\n// ============================================\n\nprogram\n .command(\"learn: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 .action(learnRecordCommand);\n\nprogram\n .command(\"learn: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 .action(learnListCommand);\n\nprogram\n .command(\"learn:apply <patternId>\")\n .description(\"Apply a pattern to the current project\")\n .argument(\"<patternId>\", \"Pattern ID to apply\")\n .option(\"--framework <fw>\", \"Override framework\")\n .option(\"--version <ver>\", \"Override version\")\n .option(\"--dry-run\", \"Preview without applying\")\n .action(learnApplyCommand);\n\nprogram\n .command(\"learn:sync\")\n .description(\"Sync patterns with remote registry\")\n .option(\"--push\", \"Push local patterns to registry\")\n .option(\"--pull\", \"Pull patterns from registry\")\n .option(\"--dry-run\", \"Preview without syncing\")\n .action(learnSyncCommand);\n\nprogram\n .command(\"learn: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 .action(learnConfigCommand);\n\nprogram\n .command(\"learn:deprecate <patternId> <reason>\")\n .description(\"Deprecate an outdated pattern\")\n .argument(\"<patternId>\", \"Pattern ID to deprecate\")\n .argument(\"<reason>\", \"Reason for deprecation\")\n .action(learnDeprecateCommand);\n\nprogram\n .command(\"learn:stats\")\n .description(\"Show learning statistics\")\n .action(learnStatsCommand);\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\";\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 = await p.confirm({\n message: \"Generate workflow guidelines from templates?\",\n initialValue: true,\n });\n\n if (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 } 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 = options.yes\n ? true\n : await p.confirm({\n message: \"Set up linting, formatting, testing, and CI automatically?\",\n initialValue: true,\n });\n\n if (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 { loadConfig } from \"../../config/index.js\";\n\nexport async function doctorCommand() {\n console.log(chalk.bold.cyan(\"\\nšŸ„ Workflow Agent Health Check\\n\"));\n\n const config = await loadConfig();\n\n if (!config) {\n console.error(chalk.red(\"āœ— No workflow configuration found\"));\n console.log(chalk.yellow(\" Run: workflow init\"));\n process.exit(1);\n }\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 console.log(chalk.cyan(\"\\nšŸ’” Suggestions:\\n\"));\n console.log(chalk.dim(\" • Health check analysis coming soon\"));\n console.log(chalk.dim(\" • Git history analysis coming soon\"));\n console.log(chalk.dim(\" • Optimization recommendations coming soon\"));\n}\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { readFileSync, writeFileSync, existsSync } from \"fs\";\nimport { join } from \"path\";\n\nconst WORKFLOW_SCRIPTS = {\n \"workflow:init\": \"workflow-agent init\",\n \"workflow:validate\": \"workflow-agent validate\",\n \"workflow:suggest\": \"workflow-agent suggest\",\n \"workflow:doctor\": \"workflow-agent doctor\",\n};\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 // Check which scripts already exist\n const existingScripts: string[] = [];\n const scriptsToAdd: Record<string, string> = {};\n\n for (const [scriptName, scriptCommand] of Object.entries(WORKFLOW_SCRIPTS)) {\n if (packageJson.scripts[scriptName]) {\n existingScripts.push(scriptName);\n } else {\n scriptsToAdd[scriptName] = scriptCommand;\n }\n }\n\n if (Object.keys(scriptsToAdd).length === 0) {\n p.outro(chalk.green(\"āœ“ All workflow scripts are already configured!\"));\n return;\n }\n\n // Show what will be added\n console.log(chalk.dim(\"\\nScripts to add:\"));\n for (const [scriptName, scriptCommand] of Object.entries(scriptsToAdd)) {\n console.log(chalk.dim(` ${scriptName}: ${scriptCommand}`));\n }\n\n if (existingScripts.length > 0) {\n console.log(chalk.yellow(\"\\nExisting scripts (will be skipped):\"));\n existingScripts.forEach((name) => {\n console.log(chalk.yellow(` ${name}`));\n });\n }\n\n const shouldAdd = await p.confirm({\n message: \"Add these scripts to package.json?\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldAdd) || !shouldAdd) {\n p.cancel(\"Setup cancelled\");\n process.exit(0);\n }\n\n // Add scripts\n for (const [scriptName, scriptCommand] of Object.entries(scriptsToAdd)) {\n packageJson.scripts[scriptName] = scriptCommand;\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 p.outro(\n chalk.green(\n `āœ“ Added ${Object.keys(scriptsToAdd).length} workflow scripts to package.json!`,\n ),\n );\n console.log(chalk.dim(\"\\nRun them with:\"));\n console.log(chalk.dim(\" pnpm run workflow:init\"));\n console.log(chalk.dim(\" npm run workflow:init\\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","import chalk from \"chalk\";\nimport {\n runAllChecks,\n hasUncommittedChanges,\n stageAllChanges,\n type RunAllChecksResult,\n} from \"../../utils/check-runner.js\";\nimport { execa } from \"execa\";\nimport {\n PatternStore,\n TelemetryCollector,\n ContributorManager,\n type FixPattern,\n} from \"@hawkinside_out/workflow-improvement-tracker\";\n\ninterface VerifyOptions {\n fix?: boolean;\n maxRetries?: string;\n commit?: boolean;\n dryRun?: boolean;\n learn?: boolean;\n}\n\n/**\n * Verify command - Run all quality checks with fix-and-revalidate pattern\n *\n * Pattern: Run check → If fails, fix → Re-run ALL checks from start\n * This ensures fixes don't introduce new issues in earlier checks.\n */\nexport async function verifyCommand(options: VerifyOptions) {\n const cwd = process.cwd();\n const maxRetries = options.maxRetries ? parseInt(options.maxRetries, 10) : 10;\n const autoFix = options.fix ?? false;\n const shouldCommit = options.commit ?? false;\n const dryRun = options.dryRun ?? false;\n const learnFromFixes = options.learn ?? false;\n\n console.log(chalk.bold.cyan(\"\\nšŸ” Workflow Agent Quality Verification\\n\"));\n\n if (dryRun) {\n console.log(chalk.yellow(\"šŸ“‹ DRY-RUN MODE: No changes will be applied\\n\"));\n }\n\n console.log(chalk.dim(` Auto-fix: ${autoFix ? \"enabled\" : \"disabled\"}`));\n console.log(chalk.dim(` Max retries: ${maxRetries}`));\n console.log(chalk.dim(` Commit on success: ${shouldCommit ? \"yes\" : \"no\"}`));\n console.log(chalk.dim(` Dry-run: ${dryRun ? \"yes\" : \"no\"}`));\n console.log(chalk.dim(` Learn from fixes: ${learnFromFixes ? \"yes\" : \"no\"}`));\n\n const startTime = Date.now();\n\n const result = await runAllChecks(cwd, {\n maxRetries,\n autoFix,\n dryRun,\n });\n\n const totalTime = ((Date.now() - startTime) / 1000).toFixed(2);\n\n console.log(`\\n${\"━\".repeat(50)}`);\n\n if (result.success) {\n console.log(chalk.bold.green(\"\\nāœ… ALL QUALITY CHECKS PASSED!\\n\"));\n console.log(chalk.dim(` Total time: ${totalTime}s`));\n console.log(chalk.dim(` Validation cycles: ${result.totalAttempts}`));\n console.log(chalk.dim(` Fixes applied: ${result.fixesApplied}`));\n\n // Auto-record successful fix patterns if learning is enabled\n if (learnFromFixes && result.fixesApplied > 0 && !dryRun) {\n await recordSuccessfulFixes(cwd, result);\n }\n\n // Handle commit if requested\n if (shouldCommit) {\n const hasChanges = await hasUncommittedChanges(cwd);\n\n if (hasChanges) {\n console.log(chalk.cyan(\"\\nšŸ“¦ Staging and committing changes...\\n\"));\n\n const staged = await stageAllChanges(cwd);\n if (!staged) {\n console.log(chalk.red(\"āŒ Failed to stage changes\"));\n process.exit(1);\n }\n\n try {\n await execa(\n \"git\",\n [\"commit\", \"-m\", \"chore: auto-fix quality issues\"],\n { cwd },\n );\n console.log(chalk.green(\"āœ… Changes committed successfully\"));\n } catch (error) {\n console.log(chalk.red(\"āŒ Failed to commit changes\"));\n console.log(chalk.dim((error as Error).message));\n process.exit(1);\n }\n } else {\n console.log(chalk.dim(\"\\n No changes to commit.\"));\n }\n }\n\n console.log(chalk.cyan(\"\\nšŸ’” Next steps:\\n\"));\n console.log(chalk.dim(\" 1. git add .\"));\n console.log(\n chalk.dim(' 2. git commit -m \"<type>(<scope>): <description>\"'),\n );\n console.log(chalk.dim(\" 3. git push origin <branch-name>\"));\n console.log(\"\");\n\n process.exit(0);\n } else {\n console.log(chalk.bold.red(\"\\nāŒ QUALITY CHECKS FAILED\\n\"));\n console.log(chalk.dim(` Total time: ${totalTime}s`));\n console.log(chalk.dim(` Validation cycles: ${result.totalAttempts}`));\n console.log(chalk.dim(` Fixes applied: ${result.fixesApplied}`));\n\n if (result.pendingFixes && result.pendingFixes.length > 0) {\n console.log(chalk.yellow(\"\\nšŸ“‹ Pending fixes (dry-run):\"));\n for (const fix of result.pendingFixes) {\n console.log(chalk.dim(` • ${fix.check.displayName}: ${fix.command}`));\n }\n }\n\n console.log(\n chalk.yellow(\"\\nāš ļø Please fix the errors above and run again.\"),\n );\n console.log(\n chalk.dim(\" Run with --fix to auto-fix lint and format issues.\"),\n );\n console.log(\"\");\n\n process.exit(1);\n }\n}\n\n// ============================================\n// Auto-Record Learning Pattern\n// ============================================\n\ninterface CheckResult {\n success: boolean;\n totalAttempts: number;\n fixesApplied: number;\n appliedFixes?: Array<{\n checkName: string;\n displayName: string;\n command: string;\n timestamp: Date;\n }>;\n pendingFixes?: Array<{\n check: { name: string; displayName: string };\n command: string;\n }>;\n}\n\n/**\n * Record successful fix patterns for learning\n * Called after verify succeeds with auto-fixes applied\n */\nasync function recordSuccessfulFixes(\n cwd: string,\n result: RunAllChecksResult,\n): Promise<void> {\n try {\n // Check if telemetry is enabled\n const contributorManager = new ContributorManager(cwd);\n const telemetryEnabled = await contributorManager.isTelemetryEnabled();\n\n if (!telemetryEnabled) {\n // Silently skip if telemetry is disabled\n return;\n }\n\n const store = new PatternStore(cwd);\n const telemetry = new TelemetryCollector(cwd);\n\n // Get package.json to determine framework\n let framework = \"unknown\";\n let frameworkVersion = \"0.0.0\";\n\n try {\n const fs = await import(\"node:fs\");\n const path = await import(\"node:path\");\n const packageJsonPath = path.join(cwd, \"package.json\");\n const packageJson = JSON.parse(\n await fs.promises.readFile(packageJsonPath, \"utf-8\"),\n );\n\n // Detect framework from dependencies\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n if (deps[\"next\"]) {\n framework = \"next\";\n frameworkVersion = deps[\"next\"].replace(/[\\^~]/, \"\");\n } else if (deps[\"react\"]) {\n framework = \"react\";\n frameworkVersion = deps[\"react\"].replace(/[\\^~]/, \"\");\n } else if (deps[\"vue\"]) {\n framework = \"vue\";\n frameworkVersion = deps[\"vue\"].replace(/[\\^~]/, \"\");\n } else if (deps[\"express\"]) {\n framework = \"express\";\n frameworkVersion = deps[\"express\"].replace(/[\\^~]/, \"\");\n }\n } catch {\n // Ignore package.json read errors\n }\n\n // Record telemetry for each fix applied\n if (result.appliedFixes && result.appliedFixes.length > 0) {\n console.log(chalk.cyan(\"\\nšŸ“š Recording successful fixes for learning...\\n\"));\n\n for (const fix of result.appliedFixes) {\n // Create or find existing pattern for this fix type\n const patternName = `Auto-fix: ${fix.displayName}`;\n const patternId = crypto.randomUUID();\n\n // Check if we already have a pattern for this fix type\n const existingPatterns = await store.listFixPatterns({\n tags: [{ category: \"tool\", name: fix.checkName }],\n });\n\n if (existingPatterns.success && existingPatterns.data && existingPatterns.data.length > 0) {\n // Update metrics on existing pattern\n const existingPattern = existingPatterns.data[0];\n await store.updateFixMetrics(existingPattern.id, true);\n await telemetry.recordSuccess(\n existingPattern.id,\n \"fix\",\n framework,\n frameworkVersion,\n );\n console.log(chalk.dim(` āœ“ Updated: ${existingPattern.name}`));\n } else {\n // Create new pattern\n const now = new Date().toISOString();\n const newPattern: FixPattern = {\n id: patternId,\n name: patternName,\n description: `Auto-fix pattern for ${fix.displayName} using command: ${fix.command}`,\n category: \"config\",\n tags: [\n { category: \"tool\", name: fix.checkName },\n { category: \"framework\", name: framework },\n ],\n trigger: {\n errorPattern: fix.checkName,\n errorMessage: `${fix.checkName} check failed`,\n filePattern: \"**/*\",\n },\n solution: {\n type: \"command\",\n steps: [\n {\n order: 1,\n action: \"run\",\n target: fix.command,\n description: `Run ${fix.command}`,\n },\n ],\n },\n compatibility: {\n framework,\n frameworkVersion: `>=${frameworkVersion}`,\n runtime: \"node\",\n runtimeVersion: \">=18.0.0\",\n dependencies: [],\n },\n metrics: {\n applications: 1,\n successes: 1,\n failures: 0,\n successRate: 100,\n lastUsed: now,\n lastSuccessful: now,\n },\n source: \"verify-fix\",\n isPrivate: true,\n createdAt: now,\n updatedAt: now,\n };\n\n const saveResult = await store.saveFixPattern(newPattern);\n if (saveResult.success) {\n await telemetry.recordSuccess(\n patternId,\n \"fix\",\n framework,\n frameworkVersion,\n );\n console.log(chalk.dim(` āœ“ Recorded: ${patternName}`));\n }\n }\n }\n\n console.log(\n chalk.dim(`\\n Use 'workflow learn:list' to see recorded patterns.`),\n );\n }\n } catch (error) {\n // Don't fail the verify command if learning fails\n console.log(\n chalk.dim(`\\n Note: Could not record learning patterns: ${(error as Error).message}`),\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 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 type FixPattern,\n type Blueprint,\n type PatternTag,\n} from \"@hawkinside_out/workflow-improvement-tracker\";\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\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\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) 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) 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(\"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 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(chalk.dim(` Created: ${formatDate(pattern.createdAt)}`));\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(chalk.dim(` Created: ${formatDate(blueprint.createdAt)}`));\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 \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 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 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(chalk.dim(\" Use 'workflow learn:list' to see available patterns\"));\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(chalk.yellow(\"\\nšŸ“‹ DRY-RUN MODE: No changes will be applied\\n\"));\n }\n\n // Record telemetry for application attempt\n const framework = options.framework ?? patternData.compatibility.frameworks[0]?.name ?? \"unknown\";\n const version = options.version ?? patternData.compatibility.frameworks[0]?.version ?? \"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(chalk.white(` ${i + 1}. [${step.action}] ${step.description}`));\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(patternId, patternType, framework, version, \"unknown\");\n console.log(chalk.yellow(\"\\nāš ļø Pattern application marked as unsuccessful.\"));\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(chalk.dim(\" This allows you to share anonymized patterns with the community.\"));\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 const anonymizer = new PatternAnonymizer();\n\n // Get patterns to sync\n const { fixes, blueprints } = await store.getPatternsForSync();\n\n console.log(chalk.dim(` Patterns ready to sync: ${fixes.length} fixes, ${blueprints.length} blueprints`));\n\n if (options.push) {\n console.log(chalk.cyan(\"\\nšŸ“¤ Pushing patterns...\\n\"));\n\n // Anonymize patterns before sync\n let anonymizedFixes = 0;\n let anonymizedBlueprints = 0;\n\n for (const fix of fixes) {\n const result = anonymizer.anonymizeFixPattern(fix);\n if (result.success) {\n anonymizedFixes++;\n if (!options.dryRun) {\n // TODO: Actually push to registry when implemented\n console.log(chalk.dim(` āœ“ Anonymized: ${fix.name}`));\n }\n }\n }\n\n for (const bp of blueprints) {\n const result = anonymizer.anonymizeBlueprint(bp);\n if (result.success) {\n anonymizedBlueprints++;\n if (!options.dryRun) {\n // TODO: Actually push to registry when implemented\n console.log(chalk.dim(` āœ“ Anonymized: ${bp.name}`));\n }\n }\n }\n\n console.log(\n chalk.green(`\\nāœ… Ready to push ${anonymizedFixes} fixes and ${anonymizedBlueprints} blueprints`),\n );\n console.log(chalk.dim(\" (Registry push not yet implemented)\"));\n }\n\n if (options.pull) {\n console.log(chalk.cyan(\"\\nšŸ“„ Pulling patterns from registry...\\n\"));\n console.log(chalk.dim(\" (Registry pull not yet implemented)\"));\n }\n\n if (!options.push && !options.pull) {\n console.log(chalk.dim(\" Specify --push to upload or --pull to download patterns.\\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(chalk.dim(\" Your patterns will be anonymized before sharing.\"));\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(chalk.dim(\" Anonymous usage data helps improve pattern recommendations.\"));\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: \"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(chalk.dim(` Sync Enabled: ${config.data.syncOptIn ? \"Yes\" : \"No\"}`));\n console.log(chalk.dim(` Telemetry Enabled: ${config.data.telemetryEnabled ? \"Yes\" : \"No\"}`));\n if (config.data.syncEnabledAt) {\n console.log(chalk.dim(` Sync Enabled At: ${formatDate(config.data.syncEnabledAt)}`));\n }\n } else {\n console.log(chalk.dim(\" No configuration found. Settings will be created on first use.\\n\"));\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\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 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 = 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(chalk.dim(` Total Events Sent: ${telemetryStats.totalEventsSent}`));\n if (telemetryStats.lastFlushAt) {\n console.log(chalk.dim(` Last Flush: ${formatDate(telemetryStats.lastFlushAt)}`));\n }\n\n console.log(\"\");\n}\n"],"mappings":"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","names":["fs","spinner","chalk","chalk","chalk","chalk","p","chalk","chalk","p","chalk","existsSync","join","p","chalk","existsSync","writeFile","mkdir","join","chalk","existsSync","join","spinner","mkdir","writeFile","p","chalk","existsSync","writeFile","mkdir","readFile","join","chalk","existsSync","join","spinner","mkdir","writeFile","readFile","chalk","execa","chalk","fs","path","p","chalk","chalk","spinner","chalk","p","PatternStore","ContributorManager","TelemetryCollector"]}
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/cli/commands/setup.ts","../../src/cli/commands/scope-create.ts","../../src/cli/commands/scope-migrate.ts","../../src/cli/commands/verify.ts","../../src/cli/commands/auto-setup-command.ts","../../src/cli/commands/learn.ts","../../src/cli/commands/solution.ts"],"sourcesContent":["#!/usr/bin/env node\n\nimport { Command } from \"commander\";\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 { setupCommand } from \"./commands/setup.js\";\nimport { scopeCreateCommand } from \"./commands/scope-create.js\";\nimport { scopeMigrateCommand } from \"./commands/scope-migrate.js\";\nimport { verifyCommand } from \"./commands/verify.js\";\nimport { autoSetupCommand } from \"./commands/auto-setup-command.js\";\nimport {\n learnRecordCommand,\n learnListCommand,\n learnApplyCommand,\n learnSyncCommand,\n learnConfigCommand,\n learnDeprecateCommand,\n learnStatsCommand,\n} from \"./commands/learn.js\";\nimport {\n solutionCaptureCommand,\n solutionSearchCommand,\n solutionListCommand,\n solutionApplyCommand,\n solutionDeprecateCommand,\n solutionStatsCommand,\n} from \"./commands/solution.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(\"1.0.0\");\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>\")\n .description(\"Validate branch name, commit message, or PR title\")\n .argument(\"<type>\", \"What to validate: branch, commit, or pr\")\n .argument(\n \"[value]\",\n \"Value to validate (defaults to current branch/HEAD commit)\",\n )\n .option(\n \"--suggest-on-error\",\n \"Offer improvement suggestions on validation errors\",\n )\n .action(validateCommand);\n\nprogram\n .command(\"config <action>\")\n .description(\"Manage workflow configuration\")\n .argument(\"<action>\", \"Action: get, set, add, remove\")\n .argument(\"[key]\", \"Config key\")\n .argument(\"[value]\", \"Config value\")\n .action(configCommand);\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\nprogram\n .command(\"setup\")\n .description(\"Add workflow scripts to package.json\")\n .action(setupCommand);\n\nprogram\n .command(\"doctor\")\n .description(\"Run health check and get optimization suggestions\")\n .action(doctorCommand);\n\nprogram\n .command(\"scope: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 .action(scopeCreateCommand);\n\nprogram\n .command(\"scope: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 .action(scopeMigrateCommand);\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(\"auto-setup\")\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// ============================================\n// Learning System Commands\n// ============================================\n\nprogram\n .command(\"learn: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 .action(learnRecordCommand);\n\nprogram\n .command(\"learn: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 .action(learnListCommand);\n\nprogram\n .command(\"learn:apply <patternId>\")\n .description(\"Apply a pattern to the current project\")\n .argument(\"<patternId>\", \"Pattern ID to apply\")\n .option(\"--framework <fw>\", \"Override framework\")\n .option(\"--version <ver>\", \"Override version\")\n .option(\"--dry-run\", \"Preview without applying\")\n .action(learnApplyCommand);\n\nprogram\n .command(\"learn:sync\")\n .description(\"Sync patterns with remote registry\")\n .option(\"--push\", \"Push local patterns to registry\")\n .option(\"--pull\", \"Pull patterns from registry\")\n .option(\"--dry-run\", \"Preview without syncing\")\n .action(learnSyncCommand);\n\nprogram\n .command(\"learn: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 .action(learnConfigCommand);\n\nprogram\n .command(\"learn:deprecate <patternId> <reason>\")\n .description(\"Deprecate an outdated pattern\")\n .argument(\"<patternId>\", \"Pattern ID to deprecate\")\n .argument(\"<reason>\", \"Reason for deprecation\")\n .action(learnDeprecateCommand);\n\nprogram\n .command(\"learn:stats\")\n .description(\"Show learning statistics\")\n .action(learnStatsCommand);\n\n// ============================================\n// Solution Pattern Commands\n// ============================================\n\nprogram\n .command(\"solution:capture\")\n .description(\"Capture a solution pattern from working code\")\n .option(\"--name <name>\", \"Solution name\")\n .option(\"--description <desc>\", \"Solution description\")\n .option(\"--category <cat>\", \"Category (auth, api, database, ui, testing, deployment, integration, performance, security, other)\")\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 .action(solutionCaptureCommand);\n\nprogram\n .command(\"solution:search <query>\")\n .description(\"Search for solution patterns\")\n .argument(\"<query>\", \"Search query (keywords, problem description)\")\n .option(\"--category <cat>\", \"Filter by category\")\n .option(\"--framework <fw>\", \"Filter by framework\")\n .option(\"--limit <n>\", \"Maximum results\", \"10\")\n .action(solutionSearchCommand);\n\nprogram\n .command(\"solution: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 .action(solutionListCommand);\n\nprogram\n .command(\"solution:apply <solutionId>\")\n .description(\"Apply a solution pattern to the current project\")\n .argument(\"<solutionId>\", \"Solution ID to apply\")\n .option(\"--output <dir>\", \"Output directory\")\n .option(\"--dry-run\", \"Preview without applying\")\n .option(\"--include-tests\", \"Include test files\")\n .action(solutionApplyCommand);\n\nprogram\n .command(\"solution:deprecate <solutionId> <reason>\")\n .description(\"Deprecate a solution pattern\")\n .argument(\"<solutionId>\", \"Solution ID to deprecate\")\n .argument(\"<reason>\", \"Reason for deprecation\")\n .action(solutionDeprecateCommand);\n\nprogram\n .command(\"solution:stats\")\n .description(\"Show solution pattern statistics\")\n .action(solutionStatsCommand);\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\";\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 = await p.confirm({\n message: \"Generate workflow guidelines from templates?\",\n initialValue: true,\n });\n\n if (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 } 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 = options.yes\n ? true\n : await p.confirm({\n message: \"Set up linting, formatting, testing, and CI automatically?\",\n initialValue: true,\n });\n\n if (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 { loadConfig } from \"../../config/index.js\";\n\nexport async function doctorCommand() {\n console.log(chalk.bold.cyan(\"\\nšŸ„ Workflow Agent Health Check\\n\"));\n\n const config = await loadConfig();\n\n if (!config) {\n console.error(chalk.red(\"āœ— No workflow configuration found\"));\n console.log(chalk.yellow(\" Run: workflow init\"));\n process.exit(1);\n }\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 console.log(chalk.cyan(\"\\nšŸ’” Suggestions:\\n\"));\n console.log(chalk.dim(\" • Health check analysis coming soon\"));\n console.log(chalk.dim(\" • Git history analysis coming soon\"));\n console.log(chalk.dim(\" • Optimization recommendations coming soon\"));\n}\n","import * as p from \"@clack/prompts\";\nimport chalk from \"chalk\";\nimport { readFileSync, writeFileSync, existsSync } from \"fs\";\nimport { join } from \"path\";\n\nconst WORKFLOW_SCRIPTS = {\n \"workflow:init\": \"workflow-agent init\",\n \"workflow:validate\": \"workflow-agent validate\",\n \"workflow:suggest\": \"workflow-agent suggest\",\n \"workflow:doctor\": \"workflow-agent doctor\",\n};\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 // Check which scripts already exist\n const existingScripts: string[] = [];\n const scriptsToAdd: Record<string, string> = {};\n\n for (const [scriptName, scriptCommand] of Object.entries(WORKFLOW_SCRIPTS)) {\n if (packageJson.scripts[scriptName]) {\n existingScripts.push(scriptName);\n } else {\n scriptsToAdd[scriptName] = scriptCommand;\n }\n }\n\n if (Object.keys(scriptsToAdd).length === 0) {\n p.outro(chalk.green(\"āœ“ All workflow scripts are already configured!\"));\n return;\n }\n\n // Show what will be added\n console.log(chalk.dim(\"\\nScripts to add:\"));\n for (const [scriptName, scriptCommand] of Object.entries(scriptsToAdd)) {\n console.log(chalk.dim(` ${scriptName}: ${scriptCommand}`));\n }\n\n if (existingScripts.length > 0) {\n console.log(chalk.yellow(\"\\nExisting scripts (will be skipped):\"));\n existingScripts.forEach((name) => {\n console.log(chalk.yellow(` ${name}`));\n });\n }\n\n const shouldAdd = await p.confirm({\n message: \"Add these scripts to package.json?\",\n initialValue: true,\n });\n\n if (p.isCancel(shouldAdd) || !shouldAdd) {\n p.cancel(\"Setup cancelled\");\n process.exit(0);\n }\n\n // Add scripts\n for (const [scriptName, scriptCommand] of Object.entries(scriptsToAdd)) {\n packageJson.scripts[scriptName] = scriptCommand;\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 p.outro(\n chalk.green(\n `āœ“ Added ${Object.keys(scriptsToAdd).length} workflow scripts to package.json!`,\n ),\n );\n console.log(chalk.dim(\"\\nRun them with:\"));\n console.log(chalk.dim(\" pnpm run workflow:init\"));\n console.log(chalk.dim(\" npm run workflow:init\\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","import chalk from \"chalk\";\nimport {\n runAllChecks,\n hasUncommittedChanges,\n stageAllChanges,\n type RunAllChecksResult,\n} from \"../../utils/check-runner.js\";\nimport { execa } from \"execa\";\nimport {\n PatternStore,\n TelemetryCollector,\n ContributorManager,\n type FixPattern,\n} from \"@hawkinside_out/workflow-improvement-tracker\";\n\ninterface VerifyOptions {\n fix?: boolean;\n maxRetries?: string;\n commit?: boolean;\n dryRun?: boolean;\n learn?: boolean;\n}\n\n/**\n * Verify command - Run all quality checks with fix-and-revalidate pattern\n *\n * Pattern: Run check → If fails, fix → Re-run ALL checks from start\n * This ensures fixes don't introduce new issues in earlier checks.\n */\nexport async function verifyCommand(options: VerifyOptions) {\n const cwd = process.cwd();\n const maxRetries = options.maxRetries ? parseInt(options.maxRetries, 10) : 10;\n const autoFix = options.fix ?? false;\n const shouldCommit = options.commit ?? false;\n const dryRun = options.dryRun ?? false;\n const learnFromFixes = options.learn ?? false;\n\n console.log(chalk.bold.cyan(\"\\nšŸ” Workflow Agent Quality Verification\\n\"));\n\n if (dryRun) {\n console.log(chalk.yellow(\"šŸ“‹ DRY-RUN MODE: No changes will be applied\\n\"));\n }\n\n console.log(chalk.dim(` Auto-fix: ${autoFix ? \"enabled\" : \"disabled\"}`));\n console.log(chalk.dim(` Max retries: ${maxRetries}`));\n console.log(chalk.dim(` Commit on success: ${shouldCommit ? \"yes\" : \"no\"}`));\n console.log(chalk.dim(` Dry-run: ${dryRun ? \"yes\" : \"no\"}`));\n console.log(chalk.dim(` Learn from fixes: ${learnFromFixes ? \"yes\" : \"no\"}`));\n\n const startTime = Date.now();\n\n const result = await runAllChecks(cwd, {\n maxRetries,\n autoFix,\n dryRun,\n });\n\n const totalTime = ((Date.now() - startTime) / 1000).toFixed(2);\n\n console.log(`\\n${\"━\".repeat(50)}`);\n\n if (result.success) {\n console.log(chalk.bold.green(\"\\nāœ… ALL QUALITY CHECKS PASSED!\\n\"));\n console.log(chalk.dim(` Total time: ${totalTime}s`));\n console.log(chalk.dim(` Validation cycles: ${result.totalAttempts}`));\n console.log(chalk.dim(` Fixes applied: ${result.fixesApplied}`));\n\n // Auto-record successful fix patterns if learning is enabled\n if (learnFromFixes && result.fixesApplied > 0 && !dryRun) {\n await recordSuccessfulFixes(cwd, result);\n }\n\n // Handle commit if requested\n if (shouldCommit) {\n const hasChanges = await hasUncommittedChanges(cwd);\n\n if (hasChanges) {\n console.log(chalk.cyan(\"\\nšŸ“¦ Staging and committing changes...\\n\"));\n\n const staged = await stageAllChanges(cwd);\n if (!staged) {\n console.log(chalk.red(\"āŒ Failed to stage changes\"));\n process.exit(1);\n }\n\n try {\n await execa(\n \"git\",\n [\"commit\", \"-m\", \"chore: auto-fix quality issues\"],\n { cwd },\n );\n console.log(chalk.green(\"āœ… Changes committed successfully\"));\n } catch (error) {\n console.log(chalk.red(\"āŒ Failed to commit changes\"));\n console.log(chalk.dim((error as Error).message));\n process.exit(1);\n }\n } else {\n console.log(chalk.dim(\"\\n No changes to commit.\"));\n }\n }\n\n console.log(chalk.cyan(\"\\nšŸ’” Next steps:\\n\"));\n console.log(chalk.dim(\" 1. git add .\"));\n console.log(\n chalk.dim(' 2. git commit -m \"<type>(<scope>): <description>\"'),\n );\n console.log(chalk.dim(\" 3. git push origin <branch-name>\"));\n console.log(\"\");\n\n process.exit(0);\n } else {\n console.log(chalk.bold.red(\"\\nāŒ QUALITY CHECKS FAILED\\n\"));\n console.log(chalk.dim(` Total time: ${totalTime}s`));\n console.log(chalk.dim(` Validation cycles: ${result.totalAttempts}`));\n console.log(chalk.dim(` Fixes applied: ${result.fixesApplied}`));\n\n if (result.pendingFixes && result.pendingFixes.length > 0) {\n console.log(chalk.yellow(\"\\nšŸ“‹ Pending fixes (dry-run):\"));\n for (const fix of result.pendingFixes) {\n console.log(chalk.dim(` • ${fix.check.displayName}: ${fix.command}`));\n }\n }\n\n console.log(\n chalk.yellow(\"\\nāš ļø Please fix the errors above and run again.\"),\n );\n console.log(\n chalk.dim(\" Run with --fix to auto-fix lint and format issues.\"),\n );\n console.log(\"\");\n\n process.exit(1);\n }\n}\n\n// ============================================\n// Auto-Record Learning Pattern\n// ============================================\n\ninterface CheckResult {\n success: boolean;\n totalAttempts: number;\n fixesApplied: number;\n appliedFixes?: Array<{\n checkName: string;\n displayName: string;\n command: string;\n timestamp: Date;\n }>;\n pendingFixes?: Array<{\n check: { name: string; displayName: string };\n command: string;\n }>;\n}\n\n/**\n * Record successful fix patterns for learning\n * Called after verify succeeds with auto-fixes applied\n */\nasync function recordSuccessfulFixes(\n cwd: string,\n result: RunAllChecksResult,\n): Promise<void> {\n try {\n // Check if telemetry is enabled\n const contributorManager = new ContributorManager(cwd);\n const telemetryEnabled = await contributorManager.isTelemetryEnabled();\n\n if (!telemetryEnabled) {\n // Silently skip if telemetry is disabled\n return;\n }\n\n const store = new PatternStore(cwd);\n const telemetry = new TelemetryCollector(cwd);\n\n // Get package.json to determine framework\n let framework = \"unknown\";\n let frameworkVersion = \"0.0.0\";\n\n try {\n const fs = await import(\"node:fs\");\n const path = await import(\"node:path\");\n const packageJsonPath = path.join(cwd, \"package.json\");\n const packageJson = JSON.parse(\n await fs.promises.readFile(packageJsonPath, \"utf-8\"),\n );\n\n // Detect framework from dependencies\n const deps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n if (deps[\"next\"]) {\n framework = \"next\";\n frameworkVersion = deps[\"next\"].replace(/[\\^~]/, \"\");\n } else if (deps[\"react\"]) {\n framework = \"react\";\n frameworkVersion = deps[\"react\"].replace(/[\\^~]/, \"\");\n } else if (deps[\"vue\"]) {\n framework = \"vue\";\n frameworkVersion = deps[\"vue\"].replace(/[\\^~]/, \"\");\n } else if (deps[\"express\"]) {\n framework = \"express\";\n frameworkVersion = deps[\"express\"].replace(/[\\^~]/, \"\");\n }\n } catch {\n // Ignore package.json read errors\n }\n\n // Record telemetry for each fix applied\n if (result.appliedFixes && result.appliedFixes.length > 0) {\n console.log(chalk.cyan(\"\\nšŸ“š Recording successful fixes for learning...\\n\"));\n\n for (const fix of result.appliedFixes) {\n // Create or find existing pattern for this fix type\n const patternName = `Auto-fix: ${fix.displayName}`;\n const patternId = crypto.randomUUID();\n\n // Check if we already have a pattern for this fix type\n const existingPatterns = await store.listFixPatterns({\n tags: [{ category: \"tool\", name: fix.checkName }],\n });\n\n if (existingPatterns.success && existingPatterns.data && existingPatterns.data.length > 0) {\n // Update metrics on existing pattern\n const existingPattern = existingPatterns.data[0];\n await store.updateFixMetrics(existingPattern.id, true);\n await telemetry.recordSuccess(\n existingPattern.id,\n \"fix\",\n framework,\n frameworkVersion,\n );\n console.log(chalk.dim(` āœ“ Updated: ${existingPattern.name}`));\n } else {\n // Create new pattern\n const now = new Date().toISOString();\n const newPattern: FixPattern = {\n id: patternId,\n name: patternName,\n description: `Auto-fix pattern for ${fix.displayName} using command: ${fix.command}`,\n category: \"config\",\n tags: [\n { category: \"tool\", name: fix.checkName },\n { category: \"framework\", name: framework },\n ],\n trigger: {\n errorPattern: fix.checkName,\n errorMessage: `${fix.checkName} check failed`,\n filePattern: \"**/*\",\n },\n solution: {\n type: \"command\",\n steps: [\n {\n order: 1,\n action: \"run\",\n target: fix.command,\n description: `Run ${fix.command}`,\n },\n ],\n },\n compatibility: {\n framework,\n frameworkVersion: `>=${frameworkVersion}`,\n runtime: \"node\",\n runtimeVersion: \">=18.0.0\",\n dependencies: [],\n },\n metrics: {\n applications: 1,\n successes: 1,\n failures: 0,\n successRate: 100,\n lastUsed: now,\n lastSuccessful: now,\n },\n source: \"verify-fix\",\n isPrivate: true,\n createdAt: now,\n updatedAt: now,\n };\n\n const saveResult = await store.saveFixPattern(newPattern);\n if (saveResult.success) {\n await telemetry.recordSuccess(\n patternId,\n \"fix\",\n framework,\n frameworkVersion,\n );\n console.log(chalk.dim(` āœ“ Recorded: ${patternName}`));\n }\n }\n }\n\n console.log(\n chalk.dim(`\\n Use 'workflow learn:list' to see recorded patterns.`),\n );\n }\n } catch (error) {\n // Don't fail the verify command if learning fails\n console.log(\n chalk.dim(`\\n Note: Could not record learning patterns: ${(error as Error).message}`),\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 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 type FixPattern,\n type Blueprint,\n type PatternTag,\n} from \"@hawkinside_out/workflow-improvement-tracker\";\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\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\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) 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) 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(\"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 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(chalk.dim(` Created: ${formatDate(pattern.createdAt)}`));\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(chalk.dim(` Created: ${formatDate(blueprint.createdAt)}`));\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 \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 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 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(chalk.dim(\" Use 'workflow learn:list' to see available patterns\"));\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(chalk.yellow(\"\\nšŸ“‹ DRY-RUN MODE: No changes will be applied\\n\"));\n }\n\n // Record telemetry for application attempt\n const framework = options.framework ?? patternData.compatibility.frameworks[0]?.name ?? \"unknown\";\n const version = options.version ?? patternData.compatibility.frameworks[0]?.version ?? \"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(chalk.white(` ${i + 1}. [${step.action}] ${step.description}`));\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(patternId, patternType, framework, version, \"unknown\");\n console.log(chalk.yellow(\"\\nāš ļø Pattern application marked as unsuccessful.\"));\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(chalk.dim(\" This allows you to share anonymized patterns with the community.\"));\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 const anonymizer = new PatternAnonymizer();\n\n // Get patterns to sync\n const { fixes, blueprints } = await store.getPatternsForSync();\n\n console.log(chalk.dim(` Patterns ready to sync: ${fixes.length} fixes, ${blueprints.length} blueprints`));\n\n if (options.push) {\n console.log(chalk.cyan(\"\\nšŸ“¤ Pushing patterns...\\n\"));\n\n // Anonymize patterns before sync\n let anonymizedFixes = 0;\n let anonymizedBlueprints = 0;\n\n for (const fix of fixes) {\n const result = anonymizer.anonymizeFixPattern(fix);\n if (result.success) {\n anonymizedFixes++;\n if (!options.dryRun) {\n // TODO: Actually push to registry when implemented\n console.log(chalk.dim(` āœ“ Anonymized: ${fix.name}`));\n }\n }\n }\n\n for (const bp of blueprints) {\n const result = anonymizer.anonymizeBlueprint(bp);\n if (result.success) {\n anonymizedBlueprints++;\n if (!options.dryRun) {\n // TODO: Actually push to registry when implemented\n console.log(chalk.dim(` āœ“ Anonymized: ${bp.name}`));\n }\n }\n }\n\n console.log(\n chalk.green(`\\nāœ… Ready to push ${anonymizedFixes} fixes and ${anonymizedBlueprints} blueprints`),\n );\n console.log(chalk.dim(\" (Registry push not yet implemented)\"));\n }\n\n if (options.pull) {\n console.log(chalk.cyan(\"\\nšŸ“„ Pulling patterns from registry...\\n\"));\n console.log(chalk.dim(\" (Registry pull not yet implemented)\"));\n }\n\n if (!options.push && !options.pull) {\n console.log(chalk.dim(\" Specify --push to upload or --pull to download patterns.\\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(chalk.dim(\" Your patterns will be anonymized before sharing.\"));\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(chalk.dim(\" Anonymous usage data helps improve pattern recommendations.\"));\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: \"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(chalk.dim(` Sync Enabled: ${config.data.syncOptIn ? \"Yes\" : \"No\"}`));\n console.log(chalk.dim(` Telemetry Enabled: ${config.data.telemetryEnabled ? \"Yes\" : \"No\"}`));\n if (config.data.syncEnabledAt) {\n console.log(chalk.dim(` Sync Enabled At: ${formatDate(config.data.syncEnabledAt)}`));\n }\n } else {\n console.log(chalk.dim(\" No configuration found. Settings will be created on first use.\\n\"));\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\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 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 = 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(chalk.dim(` Total Events Sent: ${telemetryStats.totalEventsSent}`));\n if (telemetryStats.lastFlushAt) {\n console.log(chalk.dim(` Last Flush: ${formatDate(telemetryStats.lastFlushAt)}`));\n }\n\n console.log(\"\");\n}\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}\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\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 );\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(`${chalk.bold(\"Category:\")} ${formatCategory(pattern.category)}`);\n console.log(`${chalk.bold(\"Files:\")} ${pattern.implementation.files.length}`);\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\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(chalk.dim(\"\\nUse 'workflow solution:apply <id>' to apply a solution.\"));\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\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(chalk.dim(\"Use 'workflow solution:capture' to capture a solution.\"));\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(\"\\nUse 'workflow solution:search <query>' to find specific solutions.\"),\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\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((f: SolutionFile) => f.role !== \"test\");\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(\n chalk.cyan(\"\\nNext step: Install dependencies with:\"),\n );\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\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\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"],"mappings":"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","names":["fs","spinner","resolve","chalk","chalk","chalk","chalk","p","chalk","chalk","p","chalk","existsSync","join","p","chalk","existsSync","writeFile","mkdir","join","chalk","existsSync","join","spinner","mkdir","writeFile","p","chalk","existsSync","writeFile","mkdir","readFile","join","chalk","existsSync","join","spinner","mkdir","writeFile","readFile","chalk","execa","chalk","fs","path","p","chalk","chalk","spinner","chalk","p","PatternStore","ContributorManager","TelemetryCollector","chalk","p","path","PatternStore","getWorkspacePath","formatDate","spinner","confirm","fs"]}