workflow-agent-cli 2.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/dist/cli/index.js CHANGED
@@ -924,16 +924,16 @@ async function initCommand(options) {
924
924
  console.log(chalk.yellow(`
925
925
  \u26A0\uFE0F Could not load preset package. Using basic scopes.`));
926
926
  scopes = [
927
- { name: "feat", description: "New features", emoji: "\u2728" },
928
- { name: "fix", description: "Bug fixes", emoji: "\u{1F41B}" },
929
- { name: "docs", description: "Documentation", emoji: "\u{1F4DA}" }
927
+ { name: "feat", description: "New features and enhancements", emoji: "\u2728" },
928
+ { name: "fix", description: "Bug fixes and patches", emoji: "\u{1F41B}" },
929
+ { name: "documentation", description: "Documentation updates and improvements", emoji: "\u{1F4DA}" }
930
930
  ];
931
931
  }
932
932
  } else {
933
933
  scopes = [
934
- { name: "feat", description: "New features", emoji: "\u2728" },
935
- { name: "fix", description: "Bug fixes", emoji: "\u{1F41B}" },
936
- { name: "docs", description: "Documentation", emoji: "\u{1F4DA}" }
934
+ { name: "feat", description: "New features and enhancements", emoji: "\u2728" },
935
+ { name: "fix", description: "Bug fixes and patches", emoji: "\u{1F41B}" },
936
+ { name: "documentation", description: "Documentation updates and improvements", emoji: "\u{1F4DA}" }
937
937
  ];
938
938
  console.log(chalk.dim("\n\u{1F4A1} Tip: Edit workflow.config.json to add your custom scopes"));
939
939
  }
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/cli/index.ts","../../src/cli/commands/init.ts","../../src/templates/renderer.ts","../../src/adapters/index.ts","../../src/templates/metadata.ts","../../src/utils/hooks.ts","../../src/utils/git-repo.ts","../../src/utils/github-actions.ts","../../src/cli/commands/validate.ts","../../src/cli/commands/config.ts","../../src/cli/commands/suggest.ts","../../src/cli/commands/doctor.ts","../../src/validators/guidelines.ts","../../src/cli/commands/setup.ts","../../src/cli/commands/scope-create.ts","../../src/cli/commands/scope-migrate.ts","../../src/cli/commands/hooks.ts","../../src/cli/commands/github-actions.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 { hooksCommand } from './commands/hooks.js';\nimport { githubCommand } from './commands/github-actions.js';\n\nconst program = new Command();\n\nprogram\n .name('workflow')\n .description('A self-evolving workflow management system for AI agent development')\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('--preset <preset>', 'Preset to use (saas, library, api, ecommerce, cms, custom)')\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('[value]', 'Value to validate (defaults to current branch/HEAD commit)')\n .option('--suggest-on-error', 'Offer improvement suggestions on validation errors')\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('--category <category>', 'Category: feature, bug, documentation, performance, other')\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 .option('--check-guidelines-only', 'Only check mandatory guidelines exist (exits 0 or 1)')\n .action(doctorCommand);\n\nprogram\n .command('hooks')\n .description('Manage git hooks (install, uninstall, status)')\n .argument('<action>', 'Action: install, uninstall, status')\n .action(hooksCommand);\n\nprogram\n .command('github')\n .description('Manage GitHub Actions CI (setup, check)')\n .argument('<action>', 'Action: setup, check')\n .action(githubCommand);\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('--scopes <scopes>', 'Comma-separated scopes (format: name:description:emoji:category)')\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.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 { buildTemplateContext, renderTemplateDirectory, validateTemplateDirectory, renderTemplateFile } from '../../templates/renderer.js';\nimport { getMandatoryTemplates, getOptionalTemplates } from '../../templates/metadata.js';\nimport { installHooks, hasGitRepo } from '../../utils/hooks.js';\nimport { getRepoInfo, getProjectInfo } from '../../utils/git-repo.js';\nimport { createCIWorkflow, hasCIWorkflow } from '../../utils/github-actions.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nexport async function initCommand(options: { migrate?: boolean; workspace?: boolean; preset?: string; name?: string; yes?: boolean }) {\n console.log(chalk.bold.cyan('\\nšŸš€ Workflow Agent Initialization\\n'));\n\n const cwd = process.cwd();\n const isNonInteractive = !!(options.preset && options.name) || !!options.yes;\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 ? options.name : 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 ? options.preset : await p.select({\n message: 'Choose a scope preset for your project:',\n options: [\n { value: 'saas', label: 'šŸ“¦ SaaS Application - 17 scopes (auth, tasks, boards, sprints, etc.)' },\n { value: 'library', label: 'šŸ“š Library/Package - 10 scopes (types, build, docs, examples, etc.)' },\n { value: 'api', label: 'šŸ”Œ API/Backend - 13 scopes (auth, endpoints, models, services, etc.)' },\n { value: 'ecommerce', label: 'šŸ›’ E-commerce - 12 scopes (cart, products, payments, orders, etc.)' },\n { value: 'cms', label: 'šŸ“ CMS - 13 scopes (content, pages, media, editor, etc.)' },\n { value: 'custom', label: '✨ Custom (define your own scopes manually)' },\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(chalk.yellow(`\\nāš ļø Could not load preset package. Using basic scopes.`));\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(chalk.dim('\\nšŸ’” Tip: Edit workflow.config.json to add your custom scopes'));\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 // Get repository and project info for CI setup\n const repoInfo = await getRepoInfo(cwd);\n const projectInfo = await getProjectInfo(cwd);\n\n // Always generate mandatory guidelines (no prompt)\n const mandatoryTemplates = getMandatoryTemplates();\n const optionalTemplates = getOptionalTemplates();\n \n console.log(chalk.dim(`\\nšŸ“‹ Generating ${mandatoryTemplates.length} mandatory guidelines...`));\n\n const guidelinesDir = join(cwd, 'guidelines');\n const templatesDir = join(__dirname, '../../templates');\n let mandatoryGenerated = 0;\n let optionalGenerated = 0;\n\n try {\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 await mkdir(guidelinesDir, { recursive: true });\n\n // Generate mandatory templates first (no prompt)\n for (const template of mandatoryTemplates) {\n try {\n const templatePath = join(templatesDir, template.filename);\n const outputPath = join(guidelinesDir, template.filename);\n await renderTemplateFile(templatePath, outputPath, context);\n mandatoryGenerated++;\n } catch (error) {\n console.log(chalk.yellow(` āš ļø Could not generate ${template.filename}`));\n }\n }\n console.log(chalk.green(`āœ“ Generated ${mandatoryGenerated} mandatory guidelines`));\n\n // Prompt for optional guidelines (skip in non-interactive mode with defaults)\n let shouldGenerateOptional = isNonInteractive;\n if (!isNonInteractive) {\n const response = await p.confirm({\n message: `Generate ${optionalTemplates.length} optional guidelines (deployment, library inventory, etc.)?`,\n initialValue: true,\n });\n shouldGenerateOptional = !p.isCancel(response) && response;\n }\n\n if (shouldGenerateOptional) {\n for (const template of optionalTemplates) {\n try {\n const templatePath = join(templatesDir, template.filename);\n const outputPath = join(guidelinesDir, template.filename);\n await renderTemplateFile(templatePath, outputPath, context);\n optionalGenerated++;\n } catch {\n // Silently skip optional templates that fail\n }\n }\n console.log(chalk.green(`āœ“ Generated ${optionalGenerated} optional guidelines`));\n }\n } catch (error) {\n console.log(chalk.yellow(`\\nāš ļø Could not generate guidelines: ${error instanceof Error ? error.message : String(error)}`));\n console.log(chalk.dim('You can manually copy guidelines later if needed.'));\n }\n\n // Install git hooks (skip prompt in non-interactive mode, default to yes)\n if (hasGitRepo(cwd)) {\n let shouldInstallHooks = isNonInteractive;\n if (!isNonInteractive) {\n const response = await p.confirm({\n message: 'Install git hooks for pre-commit validation?',\n initialValue: true,\n });\n shouldInstallHooks = !p.isCancel(response) && response;\n }\n\n if (shouldInstallHooks) {\n const hookSpinner = p.spinner();\n hookSpinner.start('Installing git hooks...');\n \n const hookResults = await installHooks(config.hooks, cwd);\n const allSuccess = hookResults.every(r => r.success);\n \n if (allSuccess) {\n hookSpinner.stop('āœ“ Installed git hooks');\n } else {\n hookSpinner.stop('āš ļø Some hooks could not be installed');\n }\n }\n }\n\n // Setup GitHub Actions CI (mandatory for GitHub repos)\n if (repoInfo.isGitHub) {\n const existingCI = hasCIWorkflow(cwd);\n \n if (!existingCI) {\n console.log(chalk.dim('\\nšŸ”§ Setting up GitHub Actions CI (mandatory for GitHub repos)...'));\n \n const ciResult = await createCIWorkflow({\n projectPath: cwd,\n packageManager: projectInfo.packageManager,\n isMonorepo: projectInfo.isMonorepo,\n ciConfig: config.ci,\n defaultBranch: repoInfo.defaultBranch || 'main',\n });\n\n if (ciResult.success) {\n console.log(chalk.green('āœ“ Created GitHub Actions CI workflow'));\n console.log(chalk.dim(` File: .github/workflows/ci.yml`));\n } else {\n console.log(chalk.yellow(`āš ļø Could not create CI workflow: ${ciResult.error}`));\n }\n } else {\n console.log(chalk.dim('\\nāœ“ GitHub Actions CI workflow already exists'));\n }\n } else if (repoInfo.isGitRepo) {\n // Non-GitHub git repo - offer to create workflow anyway (skip in non-interactive mode)\n let shouldSetupCI = false;\n if (!isNonInteractive) {\n const response = await p.confirm({\n message: 'No GitHub remote detected. Create CI workflow anyway?',\n initialValue: false,\n });\n shouldSetupCI = !p.isCancel(response) && response;\n }\n\n if (shouldSetupCI) {\n const ciResult = await createCIWorkflow({\n projectPath: cwd,\n packageManager: projectInfo.packageManager,\n isMonorepo: projectInfo.isMonorepo,\n defaultBranch: repoInfo.defaultBranch || 'main',\n });\n\n if (ciResult.success) {\n console.log(chalk.green('āœ“ Created CI workflow'));\n }\n }\n }\n\n p.outro(chalk.green('āœ“ Workflow Agent initialized successfully!'));\n console.log(chalk.dim('\\nNext steps:'));\n console.log(chalk.dim(' 1. Review your configuration in workflow.config.json'));\n console.log(chalk.dim(' 2. Review generated guidelines in guidelines/ directory'));\n console.log(chalk.dim(' 3. Run: workflow validate branch'));\n console.log(chalk.dim(' 4. Run: workflow doctor (for health check)\\n'));\n \n if (repoInfo.isGitHub) {\n console.log(chalk.cyan('šŸ’” Recommended: Enable branch protection on GitHub'));\n console.log(chalk.dim(' Settings → Branches → Add rule → Require status checks\\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(template: string, context: TemplateContext): 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### 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/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(templateDir: string): 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(`No template files found in template directory: ${templateDir}`);\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<Pick<TemplateContext, 'scopeName' | 'presetName' | 'scopeDefinitions' | 'packageVersion'>> & 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: 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(path.join(outputDir, 'tsup.config.ts'), tsupConfig, 'utf-8');\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 fs.existsSync('app') && fs.existsSync('next.config.ts') || fs.existsSync('next.config.js');\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 fs.existsSync('pages') && (fs.existsSync('next.config.ts') || fs.existsSync('next.config.js'));\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 fs.existsSync('app/routes') && (fs.existsSync('remix.config.js') || fs.existsSync('package.json'));\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 fs.existsSync('astro.config.mjs') || fs.existsSync('astro.config.ts');\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","/**\n * Template metadata defining mandatory vs optional guidelines\n * and their associated validators for enforcement\n * \n * @fileoverview This module defines which guidelines are mandatory for projects\n * using the workflow agent. Mandatory guidelines MUST be present and cannot be\n * skipped during project initialization.\n * \n * TODO: Ensure all new templates have associated unit tests in metadata.test.ts\n */\n\nexport type TemplateCategory = 'workflow' | 'documentation' | 'development';\n\nexport type ValidatorType = \n | 'branch-name'\n | 'commit-message'\n | 'pr-title'\n | 'implementation-plan'\n | 'test-coverage'\n | 'file-exists';\n\nexport interface TemplateMetadata {\n /** Template filename */\n filename: string;\n /** Human-readable name */\n displayName: string;\n /** Whether this template is mandatory (cannot be skipped during init) */\n mandatory: boolean;\n /** Category for grouping */\n category: TemplateCategory;\n /** Associated validators that enforce this template's rules */\n validators: ValidatorType[];\n /** Brief description of what this template covers */\n description: string;\n}\n\n/**\n * Metadata for all available templates\n * Templates marked as mandatory will be auto-generated during init\n * and checked by the doctor command\n */\nexport const templateMetadata: Record<string, TemplateMetadata> = {\n 'AGENT_EDITING_INSTRUCTIONS.md': {\n filename: 'AGENT_EDITING_INSTRUCTIONS.md',\n displayName: 'Agent Editing Instructions',\n mandatory: true,\n category: 'workflow',\n validators: ['implementation-plan'],\n description: 'Core rules for AI agents: implementation plans, coding standards, architecture',\n },\n 'BRANCHING_STRATEGY.md': {\n filename: 'BRANCHING_STRATEGY.md',\n displayName: 'Branching Strategy',\n mandatory: true,\n category: 'workflow',\n validators: ['branch-name', 'pr-title'],\n description: 'Git branch naming conventions, PR requirements, merge policies',\n },\n 'TESTING_STRATEGY.md': {\n filename: 'TESTING_STRATEGY.md',\n displayName: 'Testing Strategy',\n mandatory: true,\n category: 'development',\n validators: ['test-coverage'],\n description: 'Testing pyramid, Vitest/Playwright patterns, when tests are required',\n },\n 'SELF_IMPROVEMENT_MANDATE.md': {\n filename: 'SELF_IMPROVEMENT_MANDATE.md',\n displayName: 'Self-Improvement Mandate',\n mandatory: true,\n category: 'workflow',\n validators: [],\n description: 'Continuous improvement tracking, changelog requirements',\n },\n 'SINGLE_SOURCE_OF_TRUTH.md': {\n filename: 'SINGLE_SOURCE_OF_TRUTH.md',\n displayName: 'Single Source of Truth',\n mandatory: true,\n category: 'workflow',\n validators: [],\n description: 'Canonical code locations, service patterns, avoiding duplication',\n },\n 'COMPONENT_LIBRARY.md': {\n filename: 'COMPONENT_LIBRARY.md',\n displayName: 'Component Library',\n mandatory: false,\n category: 'development',\n validators: [],\n description: 'UI component patterns, design tokens, decision tree',\n },\n 'DEPLOYMENT_STRATEGY.md': {\n filename: 'DEPLOYMENT_STRATEGY.md',\n displayName: 'Deployment Strategy',\n mandatory: false,\n category: 'development',\n validators: [],\n description: 'Deployment workflow, environments, migrations, rollback',\n },\n 'LIBRARY_INVENTORY.md': {\n filename: 'LIBRARY_INVENTORY.md',\n displayName: 'Library Inventory',\n mandatory: false,\n category: 'development',\n validators: [],\n description: 'Dependency catalog, approved libraries, new library process',\n },\n 'SCOPE_CREATION_WORKFLOW.md': {\n filename: 'SCOPE_CREATION_WORKFLOW.md',\n displayName: 'Scope Creation Workflow',\n mandatory: false,\n category: 'workflow',\n validators: [],\n description: 'Workflow for AI agents creating custom scopes',\n },\n 'CUSTOM_SCOPE_TEMPLATE.md': {\n filename: 'CUSTOM_SCOPE_TEMPLATE.md',\n displayName: 'Custom Scope Template',\n mandatory: false,\n category: 'workflow',\n validators: [],\n description: 'Template for defining custom scope packages',\n },\n 'PROJECT_TEMPLATE_README.md': {\n filename: 'PROJECT_TEMPLATE_README.md',\n displayName: 'Project Template README',\n mandatory: false,\n category: 'documentation',\n validators: [],\n description: 'Meta-document describing project structure',\n },\n 'Guidelines.md': {\n filename: 'Guidelines.md',\n displayName: 'Custom Guidelines',\n mandatory: false,\n category: 'documentation',\n validators: [],\n description: 'Placeholder for custom user guidelines',\n },\n};\n\n/**\n * Get all mandatory templates\n */\nexport function getMandatoryTemplates(): TemplateMetadata[] {\n return Object.values(templateMetadata).filter(t => t.mandatory);\n}\n\n/**\n * Get all optional templates\n */\nexport function getOptionalTemplates(): TemplateMetadata[] {\n return Object.values(templateMetadata).filter(t => !t.mandatory);\n}\n\n/**\n * Get templates by category\n */\nexport function getTemplatesByCategory(category: TemplateCategory): TemplateMetadata[] {\n return Object.values(templateMetadata).filter(t => t.category === category);\n}\n\n/**\n * Get template metadata by filename\n */\nexport function getTemplateMetadata(filename: string): TemplateMetadata | undefined {\n return templateMetadata[filename];\n}\n\n/**\n * Check if a template is mandatory\n */\nexport function isTemplateMandatory(filename: string): boolean {\n return templateMetadata[filename]?.mandatory ?? false;\n}\n\n/**\n * Get mandatory template filenames\n */\nexport function getMandatoryTemplateFilenames(): string[] {\n return getMandatoryTemplates().map(t => t.filename);\n}\n","/**\n * Git hooks utility for installing, managing, and removing workflow hooks\n * Supports wrapping existing hooks and CI environment detection\n */\n\nimport { existsSync } from 'fs';\nimport { readFile, writeFile, unlink, chmod, rename, mkdir } from 'fs/promises';\nimport { join } from 'path';\nimport type { HooksConfig } from '../config/schema.js';\n\nexport interface HookStatus {\n installed: boolean;\n hookType: 'pre-commit' | 'commit-msg';\n hasExistingHook: boolean;\n wrappedOriginal: boolean;\n}\n\nexport interface InstallResult {\n success: boolean;\n hookType: 'pre-commit' | 'commit-msg';\n wrappedExisting: boolean;\n error?: string;\n}\n\n/**\n * Check if running in a CI environment\n */\nexport function isCI(): boolean {\n return !!(\n process.env.CI ||\n process.env.GITHUB_ACTIONS ||\n process.env.GITLAB_CI ||\n process.env.CIRCLECI ||\n process.env.TRAVIS ||\n process.env.JENKINS_URL ||\n process.env.BUILDKITE ||\n process.env.TF_BUILD // Azure DevOps\n );\n}\n\n/**\n * Get the path to the .git/hooks directory\n */\nexport function getGitHooksDir(projectPath: string = process.cwd()): string {\n return join(projectPath, '.git', 'hooks');\n}\n\n/**\n * Check if a git repository exists\n */\nexport function hasGitRepo(projectPath: string = process.cwd()): boolean {\n return existsSync(join(projectPath, '.git'));\n}\n\n/**\n * Generate the pre-commit hook script content\n */\nfunction generatePreCommitHook(config?: HooksConfig): string {\n const checks = config?.preCommit || ['validate-branch', 'check-guidelines'];\n \n const checkCommands = checks.map(check => {\n switch (check) {\n case 'validate-branch':\n return ' workflow validate branch';\n case 'validate-commit':\n return ' workflow validate commit';\n case 'check-guidelines':\n return ' workflow doctor --check-guidelines-only 2>/dev/null || true';\n default:\n return '';\n }\n }).filter(Boolean).join('\\n');\n\n return `#!/bin/sh\n# Workflow Agent pre-commit hook\n# Auto-generated - do not edit manually\n# To reinstall: workflow hooks install\n# To uninstall: workflow hooks uninstall\n\n# Skip in CI environment\nif [ -n \"\\${CI:-}\" ] || [ -n \"\\${GITHUB_ACTIONS:-}\" ] || [ -n \"\\${GITLAB_CI:-}\" ]; then\n exit 0\nfi\n\n# Run workflow checks\n${checkCommands}\n\n# Run original hook if it exists\nif [ -f \".git/hooks/pre-commit.original\" ]; then\n .git/hooks/pre-commit.original \"\\$@\"\nfi\n`;\n}\n\n/**\n * Generate the commit-msg hook script content\n */\nfunction generateCommitMsgHook(config?: HooksConfig): string {\n const checks = config?.commitMsg || ['validate-commit'];\n \n const checkCommands = checks.map(check => {\n switch (check) {\n case 'validate-commit':\n return ' workflow validate commit \"$(cat \"$1\")\"';\n default:\n return '';\n }\n }).filter(Boolean).join('\\n');\n\n return `#!/bin/sh\n# Workflow Agent commit-msg hook\n# Auto-generated - do not edit manually\n# To reinstall: workflow hooks install\n# To uninstall: workflow hooks uninstall\n\n# Skip in CI environment\nif [ -n \"\\${CI:-}\" ] || [ -n \"\\${GITHUB_ACTIONS:-}\" ] || [ -n \"\\${GITLAB_CI:-}\" ]; then\n exit 0\nfi\n\n# Run workflow checks\n${checkCommands}\n\n# Run original hook if it exists\nif [ -f \".git/hooks/commit-msg.original\" ]; then\n .git/hooks/commit-msg.original \"\\$@\"\nfi\n`;\n}\n\n/**\n * Check if a hook file is a workflow-managed hook\n */\nasync function isWorkflowHook(hookPath: string): Promise<boolean> {\n try {\n const content = await readFile(hookPath, 'utf-8');\n return content.includes('Workflow Agent') && content.includes('Auto-generated');\n } catch {\n return false;\n }\n}\n\n/**\n * Get the status of a specific hook\n */\nexport async function getHookStatus(\n hookType: 'pre-commit' | 'commit-msg',\n projectPath: string = process.cwd()\n): Promise<HookStatus> {\n const hooksDir = getGitHooksDir(projectPath);\n const hookPath = join(hooksDir, hookType);\n const originalPath = join(hooksDir, `${hookType}.original`);\n\n const status: HookStatus = {\n installed: false,\n hookType,\n hasExistingHook: false,\n wrappedOriginal: false,\n };\n\n if (!existsSync(hookPath)) {\n return status;\n }\n\n status.hasExistingHook = true;\n\n if (await isWorkflowHook(hookPath)) {\n status.installed = true;\n status.wrappedOriginal = existsSync(originalPath);\n }\n\n return status;\n}\n\n/**\n * Get status of all hooks\n */\nexport async function getAllHooksStatus(\n projectPath: string = process.cwd()\n): Promise<HookStatus[]> {\n return Promise.all([\n getHookStatus('pre-commit', projectPath),\n getHookStatus('commit-msg', projectPath),\n ]);\n}\n\n/**\n * Install a single hook, wrapping existing if present\n */\nasync function installSingleHook(\n hookType: 'pre-commit' | 'commit-msg',\n config?: HooksConfig,\n projectPath: string = process.cwd()\n): Promise<InstallResult> {\n const hooksDir = getGitHooksDir(projectPath);\n const hookPath = join(hooksDir, hookType);\n const originalPath = join(hooksDir, `${hookType}.original`);\n\n const result: InstallResult = {\n success: false,\n hookType,\n wrappedExisting: false,\n };\n\n try {\n // Ensure hooks directory exists\n if (!existsSync(hooksDir)) {\n await mkdir(hooksDir, { recursive: true });\n }\n\n // Check for existing hook\n if (existsSync(hookPath)) {\n const isOurs = await isWorkflowHook(hookPath);\n \n if (!isOurs) {\n // Backup existing hook\n await rename(hookPath, originalPath);\n result.wrappedExisting = true;\n }\n }\n\n // Generate and write the hook\n const hookContent = hookType === 'pre-commit' \n ? generatePreCommitHook(config)\n : generateCommitMsgHook(config);\n\n await writeFile(hookPath, hookContent, 'utf-8');\n await chmod(hookPath, 0o755);\n\n result.success = true;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n}\n\n/**\n * Install all workflow hooks\n */\nexport async function installHooks(\n config?: HooksConfig,\n projectPath: string = process.cwd()\n): Promise<InstallResult[]> {\n if (!hasGitRepo(projectPath)) {\n return [{\n success: false,\n hookType: 'pre-commit',\n wrappedExisting: false,\n error: 'No git repository found. Run git init first.',\n }];\n }\n\n const results = await Promise.all([\n installSingleHook('pre-commit', config, projectPath),\n installSingleHook('commit-msg', config, projectPath),\n ]);\n\n return results;\n}\n\n/**\n * Uninstall a single hook, restoring original if it was wrapped\n */\nasync function uninstallSingleHook(\n hookType: 'pre-commit' | 'commit-msg',\n projectPath: string = process.cwd()\n): Promise<InstallResult> {\n const hooksDir = getGitHooksDir(projectPath);\n const hookPath = join(hooksDir, hookType);\n const originalPath = join(hooksDir, `${hookType}.original`);\n\n const result: InstallResult = {\n success: false,\n hookType,\n wrappedExisting: false,\n };\n\n try {\n if (!existsSync(hookPath)) {\n result.success = true;\n return result;\n }\n\n const isOurs = await isWorkflowHook(hookPath);\n \n if (!isOurs) {\n result.error = 'Hook is not managed by Workflow Agent';\n return result;\n }\n\n // Remove our hook\n await unlink(hookPath);\n\n // Restore original if it exists\n if (existsSync(originalPath)) {\n await rename(originalPath, hookPath);\n result.wrappedExisting = true;\n }\n\n result.success = true;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n}\n\n/**\n * Uninstall all workflow hooks\n */\nexport async function uninstallHooks(\n projectPath: string = process.cwd()\n): Promise<InstallResult[]> {\n return Promise.all([\n uninstallSingleHook('pre-commit', projectPath),\n uninstallSingleHook('commit-msg', projectPath),\n ]);\n}\n","/**\n * Git repository utilities for detecting repository info,\n * package manager, monorepo setup, and GitHub remote\n */\n\nimport { execa, type ExecaError } from 'execa';\nimport { existsSync } from 'fs';\nimport { readFile } from 'fs/promises';\nimport { join } from 'path';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nexport interface GitHubInfo {\n owner: string;\n repo: string;\n}\n\nexport interface RepoInfo {\n isGitRepo: boolean;\n remoteUrl: string | null;\n isGitHub: boolean;\n github: GitHubInfo | null;\n defaultBranch: string | null;\n}\n\nexport interface ProjectInfo {\n packageManager: PackageManager;\n isMonorepo: boolean;\n hasLintScript: boolean;\n hasTypecheckScript: boolean;\n hasFormatScript: boolean;\n hasTestScript: boolean;\n hasBuildScript: boolean;\n}\n\n/**\n * Check if the current directory is a git repository\n */\nexport async function isGitRepo(projectPath: string = process.cwd()): Promise<boolean> {\n try {\n await execa('git', ['rev-parse', '--git-dir'], { cwd: projectPath });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the git remote URL for origin\n */\nexport async function getGitRemoteUrl(projectPath: string = process.cwd()): Promise<string | null> {\n try {\n const { stdout } = await execa('git', ['remote', 'get-url', 'origin'], { cwd: projectPath });\n return stdout.trim() || null;\n } catch {\n return null;\n }\n}\n\n/**\n * Check if the remote URL is a GitHub repository\n */\nexport function isGitHubRemote(remoteUrl: string | null): boolean {\n if (!remoteUrl) return false;\n return remoteUrl.includes('github.com');\n}\n\n/**\n * Parse GitHub owner and repo from remote URL\n * Supports both SSH (git@github.com:owner/repo.git) and HTTPS (https://github.com/owner/repo.git)\n */\nexport function parseGitHubUrl(remoteUrl: string | null): GitHubInfo | null {\n if (!remoteUrl || !isGitHubRemote(remoteUrl)) return null;\n\n // Match: git@github.com:owner/repo.git or https://github.com/owner/repo.git\n const match = remoteUrl.match(/github\\.com[:/]([^/]+)\\/([^/.]+)/);\n \n if (match) {\n return {\n owner: match[1],\n repo: match[2].replace(/\\.git$/, ''),\n };\n }\n \n return null;\n}\n\n/**\n * Get the default branch name\n */\nexport async function getDefaultBranch(projectPath: string = process.cwd()): Promise<string | null> {\n try {\n // Try to get from remote\n const { stdout } = await execa('git', ['symbolic-ref', 'refs/remotes/origin/HEAD'], { \n cwd: projectPath \n });\n return stdout.trim().replace('refs/remotes/origin/', '') || 'main';\n } catch {\n // Fallback: try HEAD\n try {\n const { stdout } = await execa('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { \n cwd: projectPath \n });\n return stdout.trim() || 'main';\n } catch {\n return 'main';\n }\n }\n}\n\n/**\n * Get comprehensive repository information\n */\nexport async function getRepoInfo(projectPath: string = process.cwd()): Promise<RepoInfo> {\n const isRepo = await isGitRepo(projectPath);\n \n if (!isRepo) {\n return {\n isGitRepo: false,\n remoteUrl: null,\n isGitHub: false,\n github: null,\n defaultBranch: null,\n };\n }\n\n const remoteUrl = await getGitRemoteUrl(projectPath);\n const isGitHub = isGitHubRemote(remoteUrl);\n const github = parseGitHubUrl(remoteUrl);\n const defaultBranch = await getDefaultBranch(projectPath);\n\n return {\n isGitRepo: true,\n remoteUrl,\n isGitHub,\n github,\n defaultBranch,\n };\n}\n\n/**\n * Detect the package manager used in the project\n */\nexport async function detectPackageManager(projectPath: string = process.cwd()): Promise<PackageManager> {\n // Check for lockfiles in order of preference\n if (existsSync(join(projectPath, 'pnpm-lock.yaml'))) {\n return 'pnpm';\n }\n if (existsSync(join(projectPath, 'yarn.lock'))) {\n return 'yarn';\n }\n if (existsSync(join(projectPath, 'bun.lockb'))) {\n return 'bun';\n }\n if (existsSync(join(projectPath, 'package-lock.json'))) {\n return 'npm';\n }\n\n // Check packageManager field in package.json\n try {\n const pkgPath = join(projectPath, 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));\n if (pkg.packageManager) {\n if (pkg.packageManager.startsWith('pnpm')) return 'pnpm';\n if (pkg.packageManager.startsWith('yarn')) return 'yarn';\n if (pkg.packageManager.startsWith('bun')) return 'bun';\n }\n }\n } catch {\n // Ignore parse errors\n }\n\n // Default to npm\n return 'npm';\n}\n\n/**\n * Check if the project is a monorepo\n */\nexport async function isMonorepo(projectPath: string = process.cwd()): Promise<boolean> {\n // Check for pnpm workspace\n if (existsSync(join(projectPath, 'pnpm-workspace.yaml'))) {\n return true;\n }\n\n // Check for yarn/npm workspaces in package.json\n try {\n const pkgPath = join(projectPath, 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));\n if (pkg.workspaces) {\n return true;\n }\n }\n } catch {\n // Ignore parse errors\n }\n\n // Check for lerna.json\n if (existsSync(join(projectPath, 'lerna.json'))) {\n return true;\n }\n\n // Check for nx.json\n if (existsSync(join(projectPath, 'nx.json'))) {\n return true;\n }\n\n // Check for turbo.json\n if (existsSync(join(projectPath, 'turbo.json'))) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Get available scripts from package.json\n */\nexport async function getPackageScripts(projectPath: string = process.cwd()): Promise<Record<string, string>> {\n try {\n const pkgPath = join(projectPath, 'package.json');\n if (!existsSync(pkgPath)) {\n return {};\n }\n const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));\n return pkg.scripts || {};\n } catch {\n return {};\n }\n}\n\n/**\n * Get comprehensive project information\n */\nexport async function getProjectInfo(projectPath: string = process.cwd()): Promise<ProjectInfo> {\n const packageManager = await detectPackageManager(projectPath);\n const monorepo = await isMonorepo(projectPath);\n const scripts = await getPackageScripts(projectPath);\n\n return {\n packageManager,\n isMonorepo: monorepo,\n hasLintScript: 'lint' in scripts,\n hasTypecheckScript: 'typecheck' in scripts || 'type-check' in scripts,\n hasFormatScript: 'format' in scripts || 'format:check' in scripts,\n hasTestScript: 'test' in scripts,\n hasBuildScript: 'build' in scripts,\n };\n}\n\n/**\n * Get the install command for a package manager\n */\nexport function getInstallCommand(packageManager: PackageManager): string {\n switch (packageManager) {\n case 'pnpm':\n return 'pnpm install --frozen-lockfile';\n case 'yarn':\n return 'yarn install --frozen-lockfile';\n case 'bun':\n return 'bun install --frozen-lockfile';\n case 'npm':\n default:\n return 'npm ci';\n }\n}\n\n/**\n * Get the run command for a package manager (handles monorepo -r flag for pnpm)\n */\nexport function getRunCommand(\n packageManager: PackageManager, \n script: string, \n isMonorepo: boolean = false\n): string {\n switch (packageManager) {\n case 'pnpm':\n return isMonorepo ? `pnpm -r run ${script}` : `pnpm run ${script}`;\n case 'yarn':\n return isMonorepo ? `yarn workspaces run ${script}` : `yarn run ${script}`;\n case 'bun':\n return `bun run ${script}`;\n case 'npm':\n default:\n return isMonorepo ? `npm run ${script} --workspaces --if-present` : `npm run ${script}`;\n }\n}\n","/**\n * GitHub Actions workflow generator\n * Creates CI workflow with lint, typecheck, format, build, and test checks\n */\n\nimport { existsSync } from 'fs';\nimport { writeFile, mkdir } from 'fs/promises';\nimport { join } from 'path';\nimport type { CIConfig } from '../config/schema.js';\nimport { \n type PackageManager, \n getInstallCommand, \n getRunCommand,\n detectPackageManager,\n isMonorepo as checkMonorepo,\n getProjectInfo,\n} from './git-repo.js';\n\nexport interface WorkflowGeneratorOptions {\n /** Project path */\n projectPath?: string;\n /** Package manager to use */\n packageManager?: PackageManager;\n /** Whether it's a monorepo */\n isMonorepo?: boolean;\n /** CI configuration */\n ciConfig?: CIConfig;\n /** Node.js versions to test against */\n nodeVersions?: string[];\n /** Default branch name */\n defaultBranch?: string;\n}\n\nexport interface GenerateResult {\n success: boolean;\n filePath: string;\n error?: string;\n}\n\n/**\n * Generate the CI workflow YAML content\n */\nexport function generateCIWorkflowContent(options: {\n packageManager: PackageManager;\n isMonorepo: boolean;\n checks: string[];\n nodeVersions: string[];\n defaultBranch: string;\n hasLintScript: boolean;\n hasTypecheckScript: boolean;\n hasFormatScript: boolean;\n hasTestScript: boolean;\n hasBuildScript: boolean;\n}): string {\n const {\n packageManager,\n isMonorepo,\n checks,\n nodeVersions,\n defaultBranch,\n hasLintScript,\n hasTypecheckScript,\n hasFormatScript,\n hasTestScript,\n hasBuildScript,\n } = options;\n\n const installCmd = getInstallCommand(packageManager);\n \n // Build steps based on available scripts and checks\n const steps: string[] = [];\n\n // Checkout\n steps.push(` - name: Checkout\n uses: actions/checkout@v4`);\n\n // Setup package manager cache based on type\n let cacheType = packageManager;\n if (packageManager === 'bun') {\n cacheType = 'npm'; // fallback for bun\n }\n\n // Setup Node.js (using matrix for multiple versions)\n const useMatrix = nodeVersions.length > 1;\n const nodeVersionValue = useMatrix ? `\\${{ matrix.node-version }}` : nodeVersions[0] || '20';\n\n steps.push(`\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '${nodeVersionValue}'\n cache: '${cacheType}'`);\n\n // Setup pnpm if needed\n if (packageManager === 'pnpm') {\n steps.push(`\n - name: Setup pnpm\n uses: pnpm/action-setup@v4\n with:\n version: 9`);\n }\n\n // Install dependencies\n steps.push(`\n - name: Install dependencies\n run: ${installCmd}`);\n\n // Lint check\n if (checks.includes('lint')) {\n if (hasLintScript) {\n const lintCmd = getRunCommand(packageManager, 'lint', isMonorepo);\n steps.push(`\n - name: Lint\n run: ${lintCmd}`);\n } else {\n steps.push(`\n - name: Lint\n run: echo \"No lint script configured - add 'lint' to package.json scripts\"`);\n }\n }\n\n // Typecheck\n if (checks.includes('typecheck')) {\n if (hasTypecheckScript) {\n const typecheckCmd = getRunCommand(packageManager, 'typecheck', isMonorepo);\n steps.push(`\n - name: Type check\n run: ${typecheckCmd}`);\n } else {\n steps.push(`\n - name: Type check\n run: npx tsc --noEmit`);\n }\n }\n\n // Format check\n if (checks.includes('format')) {\n if (hasFormatScript) {\n // Check if there's a format:check script, otherwise use prettier directly\n const formatCmd = getRunCommand(packageManager, 'format:check', isMonorepo);\n steps.push(`\n - name: Format check\n run: ${formatCmd} || npx prettier --check \"**/*.{ts,tsx,js,jsx,json,md}\"`);\n } else {\n steps.push(`\n - name: Format check\n run: npx prettier --check \"**/*.{ts,tsx,js,jsx,json,md}\"`);\n }\n }\n\n // Build\n if (checks.includes('build')) {\n if (hasBuildScript) {\n const buildCmd = getRunCommand(packageManager, 'build', isMonorepo);\n steps.push(`\n - name: Build\n run: ${buildCmd}`);\n } else {\n steps.push(`\n - name: Build\n run: echo \"No build script configured - add 'build' to package.json scripts\"`);\n }\n }\n\n // Test\n if (checks.includes('test')) {\n if (hasTestScript) {\n const testCmd = getRunCommand(packageManager, 'test', isMonorepo);\n steps.push(`\n - name: Test\n run: ${testCmd}`);\n } else {\n steps.push(`\n - name: Test\n run: echo \"No test script configured - add 'test' to package.json scripts\"`);\n }\n }\n\n // Build the matrix strategy if using multiple Node versions\n let matrixStrategy = '';\n if (useMatrix) {\n matrixStrategy = `\n strategy:\n matrix:\n node-version: [${nodeVersions.map(v => `'${v}'`).join(', ')}]`;\n }\n\n const workflow = `# Workflow Agent CI Pipeline\n# Auto-generated - modifications will be preserved on regeneration\n# To regenerate: workflow github:setup\n\nname: CI\n\non:\n push:\n branches: [${defaultBranch}, develop]\n pull_request:\n branches: [${defaultBranch}, develop]\n\njobs:\n ci:\n runs-on: ubuntu-latest${matrixStrategy}\n\n steps:\n${steps.join('\\n')}\n`;\n\n return workflow;\n}\n\n/**\n * Create the GitHub Actions CI workflow file\n */\nexport async function createCIWorkflow(\n options: WorkflowGeneratorOptions = {}\n): Promise<GenerateResult> {\n const projectPath = options.projectPath || process.cwd();\n const workflowsDir = join(projectPath, '.github', 'workflows');\n const workflowPath = join(workflowsDir, 'ci.yml');\n\n const result: GenerateResult = {\n success: false,\n filePath: workflowPath,\n };\n\n try {\n // Get project info if not provided\n const projectInfo = await getProjectInfo(projectPath);\n const packageManager = options.packageManager || projectInfo.packageManager;\n const isMonorepo = options.isMonorepo ?? projectInfo.isMonorepo;\n\n // Get CI checks from config or use defaults\n const checks = options.ciConfig?.checks || ['lint', 'typecheck', 'format', 'build', 'test'];\n const nodeVersions = options.nodeVersions || ['20'];\n const defaultBranch = options.defaultBranch || 'main';\n\n // Ensure .github/workflows directory exists\n if (!existsSync(workflowsDir)) {\n await mkdir(workflowsDir, { recursive: true });\n }\n\n // Generate workflow content\n const content = generateCIWorkflowContent({\n packageManager,\n isMonorepo,\n checks,\n nodeVersions,\n defaultBranch,\n hasLintScript: projectInfo.hasLintScript,\n hasTypecheckScript: projectInfo.hasTypecheckScript,\n hasFormatScript: projectInfo.hasFormatScript,\n hasTestScript: projectInfo.hasTestScript,\n hasBuildScript: projectInfo.hasBuildScript,\n });\n\n // Write workflow file\n await writeFile(workflowPath, content, 'utf-8');\n\n result.success = true;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n}\n\n/**\n * Check if a CI workflow already exists\n */\nexport function hasCIWorkflow(projectPath: string = process.cwd()): boolean {\n const workflowsDir = join(projectPath, '.github', 'workflows');\n const possibleNames = ['ci.yml', 'ci.yaml', 'main.yml', 'main.yaml'];\n \n return possibleNames.some(name => existsSync(join(workflowsDir, name)));\n}\n","import chalk from 'chalk';\nimport { execa } from 'execa';\nimport { loadConfig } from '../../config/index.js';\nimport { validateBranchName, validateCommitMessage, validatePRTitle } 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(chalk.red('āœ— No workflow configuration found. Run: workflow init'));\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(chalk.yellow(`\\nāš ļø Advisory mode: validation failed but not blocking`));\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(action: string, key?: string, value?: string) {\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(feedback: string, options: { author?: string; category?: string } = {}) {\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(chalk.dim(' 3. Incorporated into future releases if approved\\n'));\n}\n","import chalk from 'chalk';\nimport { loadConfig } from '../../config/index.js';\nimport { getAllHooksStatus, hasGitRepo } from '../../utils/hooks.js';\nimport { getRepoInfo } from '../../utils/git-repo.js';\nimport { validateGuidelinesExist, validateGitHubActionsSetup } from '../../validators/guidelines.js';\nimport { hasCIWorkflow } from '../../utils/github-actions.js';\n\ninterface DoctorOptions {\n checkGuidelinesOnly?: boolean;\n}\n\nexport async function doctorCommand(options: DoctorOptions = {}) {\n const cwd = process.cwd();\n \n // Quick guidelines check mode (for pre-commit hook)\n if (options.checkGuidelinesOnly) {\n const result = await validateGuidelinesExist(cwd);\n if (!result.valid) {\n console.error(chalk.red('āœ— Missing mandatory guidelines'));\n for (const missing of result.missingMandatory) {\n console.error(chalk.red(` • ${missing}`));\n }\n process.exit(1);\n }\n process.exit(0);\n }\n\n console.log(chalk.bold.cyan('\\nšŸ„ Workflow Agent Health Check\\n'));\n\n const config = await loadConfig();\n let hasErrors = false;\n let hasWarnings = false;\n\n // 1. Configuration check\n console.log(chalk.bold('šŸ“‹ Configuration'));\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 // 2. Guidelines check\n console.log(chalk.bold('\\nšŸ“š Guidelines'));\n const guidelinesResult = await validateGuidelinesExist(cwd, config);\n \n if (guidelinesResult.valid) {\n console.log(chalk.green(` āœ“ All ${guidelinesResult.presentMandatory.length} mandatory guidelines present`));\n if (guidelinesResult.presentOptional.length > 0) {\n console.log(chalk.dim(` + ${guidelinesResult.presentOptional.length} optional guidelines`));\n }\n } else {\n hasErrors = true;\n console.log(chalk.red(` āœ— Missing ${guidelinesResult.missingMandatory.length} mandatory guidelines:`));\n for (const missing of guidelinesResult.missingMandatory) {\n console.log(chalk.red(` • ${missing}`));\n }\n console.log(chalk.yellow(' Run: workflow init'));\n }\n\n // 3. Git hooks check\n console.log(chalk.bold('\\nšŸ”— Git Hooks'));\n if (!hasGitRepo(cwd)) {\n console.log(chalk.yellow(' ⚠ No git repository found'));\n hasWarnings = true;\n } else {\n const hookStatuses = await getAllHooksStatus(cwd);\n const installedHooks = hookStatuses.filter(h => h.installed);\n \n if (installedHooks.length === hookStatuses.length) {\n console.log(chalk.green(` āœ“ All ${installedHooks.length} hooks installed`));\n for (const hook of hookStatuses) {\n const extra = hook.wrappedOriginal ? ' (wrapping original)' : '';\n console.log(chalk.dim(` • ${hook.hookType}${extra}`));\n }\n } else if (installedHooks.length > 0) {\n hasWarnings = true;\n console.log(chalk.yellow(` ⚠ ${installedHooks.length}/${hookStatuses.length} hooks installed`));\n for (const hook of hookStatuses) {\n if (hook.installed) {\n console.log(chalk.green(` āœ“ ${hook.hookType}`));\n } else {\n console.log(chalk.yellow(` āœ— ${hook.hookType}`));\n }\n }\n console.log(chalk.yellow(' Run: workflow hooks install'));\n } else {\n hasWarnings = true;\n console.log(chalk.yellow(' ⚠ No hooks installed'));\n console.log(chalk.yellow(' Run: workflow hooks install'));\n }\n }\n\n // 4. GitHub Actions CI check\n console.log(chalk.bold('\\nšŸš€ CI/CD Pipeline'));\n const repoInfo = await getRepoInfo(cwd);\n \n if (!repoInfo.isGitRepo) {\n console.log(chalk.dim(' ā—‹ No git repository (CI check skipped)'));\n } else if (!repoInfo.isGitHub) {\n console.log(chalk.dim(' ā—‹ Not a GitHub repository (CI check skipped)'));\n console.log(chalk.dim(` Remote: ${repoInfo.remoteUrl || 'none'}`));\n } else {\n console.log(chalk.dim(` Repository: ${repoInfo.github?.owner}/${repoInfo.github?.repo}`));\n \n const ciResult = await validateGitHubActionsSetup(cwd);\n \n if (ciResult.valid) {\n console.log(chalk.green(' āœ“ GitHub Actions CI configured correctly'));\n const checks = [\n ciResult.hasLintCheck && 'lint',\n ciResult.hasTypecheckCheck && 'typecheck',\n ciResult.hasFormatCheck && 'format',\n ciResult.hasBuildCheck && 'build',\n ciResult.hasTestCheck && 'test',\n ].filter(Boolean);\n console.log(chalk.dim(` Checks: ${checks.join(', ')}`));\n } else if (!ciResult.hasWorkflowFile) {\n hasErrors = true;\n console.log(chalk.red(' āœ— No CI workflow found'));\n console.log(chalk.yellow(' Run: workflow github:setup'));\n } else {\n hasWarnings = true;\n console.log(chalk.yellow(' ⚠ CI workflow may be incomplete'));\n for (const warning of ciResult.warnings) {\n console.log(chalk.yellow(` • ${warning}`));\n }\n console.log(chalk.yellow(' Run: workflow github:setup to regenerate'));\n }\n }\n\n // 5. Advisory suggestions\n console.log(chalk.bold('\\nšŸ’” Suggestions'));\n \n // Branch protection advisory (for GitHub repos)\n if (repoInfo.isGitHub && hasCIWorkflow(cwd)) {\n console.log(chalk.cyan(' → Enable branch protection on GitHub'));\n console.log(chalk.dim(' Settings → Branches → Add rule'));\n console.log(chalk.dim(' ā˜‘ Require status checks to pass before merging'));\n console.log(chalk.dim(' ā˜‘ Require branches to be up to date before merging'));\n }\n\n // Enforcement level suggestion\n if (config.enforcement !== 'strict') {\n console.log(chalk.cyan(` → Consider switching to 'strict' enforcement`));\n console.log(chalk.dim(` Current: ${config.enforcement}`));\n }\n\n // Scope count suggestion\n if (config.scopes.length < 5) {\n console.log(chalk.cyan(' → Consider adding more scopes for better organization'));\n console.log(chalk.dim(' Run: workflow config add scope <name>'));\n }\n\n // Summary\n console.log(chalk.bold('\\nšŸ“Š Summary'));\n if (hasErrors) {\n console.log(chalk.red(' āœ— Health check failed - issues found'));\n process.exit(1);\n } else if (hasWarnings) {\n console.log(chalk.yellow(' ⚠ Health check passed with warnings'));\n } else {\n console.log(chalk.green(' āœ“ All checks passed'));\n }\n console.log('');\n}\n","/**\n * Guideline validators for checking mandatory guidelines\n * and GitHub Actions CI setup\n */\n\nimport { existsSync } from 'fs';\nimport { readFile, readdir } from 'fs/promises';\nimport { join } from 'path';\nimport type { WorkflowConfig, GuidelinesConfig } from '../config/schema.js';\nimport { getMandatoryTemplateFilenames, templateMetadata } from '../templates/metadata.js';\n\nexport interface GuidelineValidationResult {\n valid: boolean;\n missingMandatory: string[];\n presentMandatory: string[];\n presentOptional: string[];\n errors: string[];\n}\n\nexport interface CIValidationResult {\n valid: boolean;\n hasWorkflowFile: boolean;\n hasLintCheck: boolean;\n hasTypecheckCheck: boolean;\n hasFormatCheck: boolean;\n hasBuildCheck: boolean;\n hasTestCheck: boolean;\n errors: string[];\n warnings: string[];\n}\n\n/**\n * Get the effective list of mandatory templates considering user overrides\n */\nexport function getEffectiveMandatoryTemplates(guidelinesConfig?: GuidelinesConfig): string[] {\n const coreMandatory = getMandatoryTemplateFilenames();\n \n if (!guidelinesConfig) {\n return coreMandatory;\n }\n\n let mandatory = [...coreMandatory];\n\n // Add additional mandatory templates from user config\n if (guidelinesConfig.additionalMandatory) {\n for (const template of guidelinesConfig.additionalMandatory) {\n if (!mandatory.includes(template) && templateMetadata[template]) {\n mandatory.push(template);\n }\n }\n }\n\n // Remove templates that user has overridden as optional\n if (guidelinesConfig.optionalOverrides) {\n mandatory = mandatory.filter(t => !guidelinesConfig.optionalOverrides!.includes(t));\n }\n\n return mandatory;\n}\n\n/**\n * Validate that all mandatory guidelines exist in the project\n */\nexport async function validateGuidelinesExist(\n projectPath: string = process.cwd(),\n config?: WorkflowConfig\n): Promise<GuidelineValidationResult> {\n const guidelinesDir = join(projectPath, 'guidelines');\n const result: GuidelineValidationResult = {\n valid: true,\n missingMandatory: [],\n presentMandatory: [],\n presentOptional: [],\n errors: [],\n };\n\n // Check if guidelines directory exists\n if (!existsSync(guidelinesDir)) {\n const mandatory = getEffectiveMandatoryTemplates(config?.guidelines);\n result.valid = false;\n result.missingMandatory = mandatory;\n result.errors.push('Guidelines directory does not exist. Run: workflow init');\n return result;\n }\n\n // Get list of files in guidelines directory\n let existingFiles: string[] = [];\n try {\n existingFiles = await readdir(guidelinesDir);\n } catch (error) {\n result.valid = false;\n result.errors.push(`Cannot read guidelines directory: ${error instanceof Error ? error.message : String(error)}`);\n return result;\n }\n\n // Get mandatory templates\n const mandatory = getEffectiveMandatoryTemplates(config?.guidelines);\n\n // Check each mandatory template\n for (const template of mandatory) {\n if (existingFiles.includes(template)) {\n result.presentMandatory.push(template);\n } else {\n result.missingMandatory.push(template);\n }\n }\n\n // Track optional templates that are present\n const allTemplateNames = Object.keys(templateMetadata);\n for (const file of existingFiles) {\n if (allTemplateNames.includes(file) && !mandatory.includes(file)) {\n result.presentOptional.push(file);\n }\n }\n\n if (result.missingMandatory.length > 0) {\n result.valid = false;\n result.errors.push(\n `Missing mandatory guidelines: ${result.missingMandatory.join(', ')}. Run: workflow init`\n );\n }\n\n return result;\n}\n\n/**\n * Validate GitHub Actions CI workflow setup\n */\nexport async function validateGitHubActionsSetup(\n projectPath: string = process.cwd()\n): Promise<CIValidationResult> {\n const workflowsDir = join(projectPath, '.github', 'workflows');\n const result: CIValidationResult = {\n valid: true,\n hasWorkflowFile: false,\n hasLintCheck: false,\n hasTypecheckCheck: false,\n hasFormatCheck: false,\n hasBuildCheck: false,\n hasTestCheck: false,\n errors: [],\n warnings: [],\n };\n\n // Check if .github/workflows directory exists\n if (!existsSync(workflowsDir)) {\n result.valid = false;\n result.errors.push('GitHub Actions workflows directory does not exist. Run: workflow github:setup');\n return result;\n }\n\n // Look for CI workflow files\n let workflowFiles: string[] = [];\n try {\n workflowFiles = await readdir(workflowsDir);\n } catch (error) {\n result.valid = false;\n result.errors.push(`Cannot read workflows directory: ${error instanceof Error ? error.message : String(error)}`);\n return result;\n }\n\n // Find CI-related workflow files\n const ciWorkflowNames = ['ci.yml', 'ci.yaml', 'main.yml', 'main.yaml', 'build.yml', 'build.yaml', 'test.yml', 'test.yaml'];\n const ciWorkflows = workflowFiles.filter(f => ciWorkflowNames.includes(f.toLowerCase()));\n\n if (ciWorkflows.length === 0) {\n result.valid = false;\n result.errors.push('No CI workflow file found. Run: workflow github:setup');\n return result;\n }\n\n result.hasWorkflowFile = true;\n\n // Parse the first CI workflow file and check for required checks\n const workflowPath = join(workflowsDir, ciWorkflows[0]);\n let workflowContent = '';\n \n try {\n workflowContent = await readFile(workflowPath, 'utf-8');\n } catch (error) {\n result.warnings.push(`Cannot read workflow file: ${error instanceof Error ? error.message : String(error)}`);\n return result;\n }\n\n // Check for each required check (simple string matching)\n const contentLower = workflowContent.toLowerCase();\n\n // Check for lint\n if (contentLower.includes('lint') || contentLower.includes('eslint')) {\n result.hasLintCheck = true;\n } else {\n result.warnings.push('CI workflow may be missing lint check');\n }\n\n // Check for typecheck\n if (contentLower.includes('typecheck') || contentLower.includes('type-check') || contentLower.includes('tsc')) {\n result.hasTypecheckCheck = true;\n } else {\n result.warnings.push('CI workflow may be missing typecheck');\n }\n\n // Check for format/prettier\n if (contentLower.includes('format') || contentLower.includes('prettier')) {\n result.hasFormatCheck = true;\n } else {\n result.warnings.push('CI workflow may be missing format check');\n }\n\n // Check for build\n if (contentLower.includes('build')) {\n result.hasBuildCheck = true;\n } else {\n result.warnings.push('CI workflow may be missing build step');\n }\n\n // Check for test\n if (contentLower.includes('test') && !contentLower.includes('typecheck')) {\n result.hasTestCheck = true;\n } else {\n result.warnings.push('CI workflow may be missing test step');\n }\n\n // Determine overall validity based on mandatory checks\n const mandatoryChecks = [result.hasLintCheck, result.hasTypecheckCheck, result.hasFormatCheck];\n if (!mandatoryChecks.every(Boolean)) {\n result.valid = false;\n result.errors.push('CI workflow is missing mandatory checks (lint, typecheck, format)');\n }\n\n return result;\n}\n\n/**\n * Quick check if guidelines are valid (for pre-commit hook)\n */\nexport async function quickGuidelinesCheck(\n projectPath: string = process.cwd(),\n config?: WorkflowConfig\n): Promise<{ valid: boolean; message: string }> {\n const result = await validateGuidelinesExist(projectPath, config);\n \n if (result.valid) {\n return { valid: true, message: 'All mandatory guidelines present' };\n }\n\n return {\n valid: false,\n message: `Missing guidelines: ${result.missingMandatory.join(', ')}`,\n };\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(chalk.green(`āœ“ Added ${Object.keys(scriptsToAdd).length} workflow scripts to package.json!`));\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 = !!(options.name && options.scopes && options.presetName);\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 ? options.name : await p.text({\n message: '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)) return 'Package name must be lowercase alphanumeric with hyphens';\n if (value.length > 32) 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 ? options.presetName : await p.text({\n message: '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(chalk.dim('\\nAdd scopes to your preset (aim for 8-15 scopes):\\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)) 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)) 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) 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 => console.log(chalk.red(` • ${error}`)));\n p.cancel('Operation cancelled');\n process.exit(1);\n }\n\n console.log(chalk.green(`\\nāœ“ ${scopes.length} scopes validated successfully\\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(join(outputDir, 'src', 'index.test.ts'), testFile, 'utf-8');\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 (!workspaceContent.includes(packagePath) && !workspaceContent.includes('packages/*')) {\n console.log(chalk.yellow('\\nāš ļø Add the following to pnpm-workspace.yaml:'));\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(chalk.green.bold('\\n✨ Custom scope package created 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: ${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(chalk.dim(` ${!options.noTest ? '5' : '4'}. Update repository URL in package.json`));\n \n const shouldPublish = isNonInteractive ? false : 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(chalk.dim(' 1. npm login (or configure .npmrc with your registry)'));\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(chalk.dim(' 4. Use in other projects: pnpm add @workflow/scopes-' + packageName + '\\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 { validateScopeDefinitions, type WorkflowConfig } 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(chalk.dim(`Found ${config.scopes.length} scopes in workflow.config.json\\n`));\n\n // Display current scopes\n console.log(chalk.bold('Current scopes:'));\n config.scopes.forEach((scope, i) => {\n console.log(chalk.dim(` ${i + 1}. ${scope.emoji || '•'} ${scope.name} - ${scope.description}`));\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 = options.name || 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)) return 'Package name must be lowercase alphanumeric with hyphens';\n if (value.length > 32) 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 => console.log(chalk.yellow(` • ${error}`)));\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 (!workspaceContent.includes(packagePath) && !workspaceContent.includes('packages/*')) {\n console.log(chalk.yellow('\\nāš ļø Add the following to pnpm-workspace.yaml:'));\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 = options.keepConfig ?? 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(configPath, JSON.stringify(updatedConfig, null, 2), 'utf-8');\n console.log(chalk.green('āœ“ Updated workflow.config.json'));\n console.log(chalk.dim(' • Cleared inline scopes'));\n console.log(chalk.dim(` • Added preset reference: scopes-${packageName}\\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(chalk.dim(` 1. Install the package: pnpm add -w @workflow/scopes-${packageName}`));\n console.log(chalk.dim(` 2. The preset is already referenced in workflow.config.json\\n`));\n }\n\n console.log(chalk.dim('šŸ’” Tip: You can now reuse this scope package across multiple projects!\\n'));\n\n } catch (error) {\n spinner.stop('āœ— Migration failed');\n console.error(chalk.red('\\nError:'), error);\n process.exit(1);\n }\n}\n","/**\n * CLI command for managing git hooks\n * Provides install, uninstall, and status subcommands\n */\n\nimport chalk from 'chalk';\nimport { loadConfig } from '../../config/index.js';\nimport {\n installHooks,\n uninstallHooks,\n getAllHooksStatus,\n hasGitRepo,\n} from '../../utils/hooks.js';\n\nexport async function hooksCommand(action: string) {\n const cwd = process.cwd();\n\n switch (action) {\n case 'install':\n await installHooksAction(cwd);\n break;\n case 'uninstall':\n await uninstallHooksAction(cwd);\n break;\n case 'status':\n await statusHooksAction(cwd);\n break;\n default:\n console.error(chalk.red(`Unknown action: ${action}`));\n console.log(chalk.dim('Available actions: install, uninstall, status'));\n process.exit(1);\n }\n}\n\nasync function installHooksAction(cwd: string) {\n console.log(chalk.bold.cyan('\\nšŸ”— Installing Workflow Agent Git Hooks\\n'));\n\n // Check for git repo\n if (!hasGitRepo(cwd)) {\n console.error(chalk.red('āœ— No git repository found'));\n console.log(chalk.yellow(' Run: git init'));\n process.exit(1);\n }\n\n // Load config for hook settings\n const config = await loadConfig();\n const hooksConfig = config?.hooks;\n\n // Install hooks\n const results = await installHooks(hooksConfig, cwd);\n\n let hasErrors = false;\n for (const result of results) {\n if (result.success) {\n if (result.wrappedExisting) {\n console.log(chalk.green(`āœ“ Installed ${result.hookType} hook (wrapped existing hook)`));\n } else {\n console.log(chalk.green(`āœ“ Installed ${result.hookType} hook`));\n }\n } else {\n console.error(chalk.red(`āœ— Failed to install ${result.hookType}: ${result.error}`));\n hasErrors = true;\n }\n }\n\n if (!hasErrors) {\n console.log(chalk.green('\\nāœ“ Git hooks installed successfully'));\n console.log(chalk.dim('\\nHooks will run automatically on commit.'));\n console.log(chalk.dim('They will be skipped in CI environments.'));\n } else {\n process.exit(1);\n }\n}\n\nasync function uninstallHooksAction(cwd: string) {\n console.log(chalk.bold.cyan('\\nšŸ”“ Uninstalling Workflow Agent Git Hooks\\n'));\n\n // Check for git repo\n if (!hasGitRepo(cwd)) {\n console.error(chalk.red('āœ— No git repository found'));\n process.exit(1);\n }\n\n // Uninstall hooks\n const results = await uninstallHooks(cwd);\n\n let hasErrors = false;\n for (const result of results) {\n if (result.success) {\n if (result.wrappedExisting) {\n console.log(chalk.green(`āœ“ Removed ${result.hookType} hook (restored original)`));\n } else {\n console.log(chalk.green(`āœ“ Removed ${result.hookType} hook`));\n }\n } else if (result.error) {\n console.error(chalk.red(`āœ— Failed to remove ${result.hookType}: ${result.error}`));\n hasErrors = true;\n }\n }\n\n if (!hasErrors) {\n console.log(chalk.green('\\nāœ“ Git hooks uninstalled successfully'));\n } else {\n process.exit(1);\n }\n}\n\nasync function statusHooksAction(cwd: string) {\n console.log(chalk.bold.cyan('\\nšŸ“Š Workflow Agent Git Hooks Status\\n'));\n\n // Check for git repo\n if (!hasGitRepo(cwd)) {\n console.error(chalk.red('āœ— No git repository found'));\n process.exit(1);\n }\n\n // Get hook status\n const statuses = await getAllHooksStatus(cwd);\n\n for (const status of statuses) {\n const icon = status.installed ? 'āœ“' : 'āœ—';\n const color = status.installed ? chalk.green : chalk.yellow;\n \n let message = `${icon} ${status.hookType}`;\n \n if (status.installed) {\n message += ' - installed';\n if (status.wrappedOriginal) {\n message += ' (wrapping original hook)';\n }\n } else if (status.hasExistingHook) {\n message += ' - existing hook (not managed by Workflow Agent)';\n } else {\n message += ' - not installed';\n }\n\n console.log(color(message));\n }\n\n const allInstalled = statuses.every(s => s.installed);\n if (!allInstalled) {\n console.log(chalk.dim('\\nTo install hooks: workflow hooks install'));\n }\n}\n","/**\n * CLI command for managing GitHub Actions CI setup\n * Provides setup and check subcommands\n */\n\nimport chalk from 'chalk';\nimport * as p from '@clack/prompts';\nimport { loadConfig } from '../../config/index.js';\nimport { getRepoInfo, getProjectInfo } from '../../utils/git-repo.js';\nimport { createCIWorkflow, hasCIWorkflow } from '../../utils/github-actions.js';\nimport { validateGitHubActionsSetup } from '../../validators/guidelines.js';\n\nexport async function githubCommand(action: string) {\n const cwd = process.cwd();\n\n switch (action) {\n case 'setup':\n await setupAction(cwd);\n break;\n case 'check':\n await checkAction(cwd);\n break;\n default:\n console.error(chalk.red(`Unknown action: ${action}`));\n console.log(chalk.dim('Available actions: setup, check'));\n process.exit(1);\n }\n}\n\nasync function setupAction(cwd: string) {\n console.log(chalk.bold.cyan('\\nšŸ”§ Setting Up GitHub Actions CI\\n'));\n\n // Check for git repo and GitHub remote\n const repoInfo = await getRepoInfo(cwd);\n\n if (!repoInfo.isGitRepo) {\n console.error(chalk.red('āœ— No git repository found'));\n console.log(chalk.yellow(' Run: git init'));\n process.exit(1);\n }\n\n if (!repoInfo.isGitHub) {\n console.log(chalk.yellow('āš ļø No GitHub remote detected'));\n const shouldContinue = await p.confirm({\n message: 'Create GitHub Actions workflow anyway?',\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel('Setup cancelled');\n process.exit(0);\n }\n } else {\n console.log(chalk.dim(`Repository: ${repoInfo.github?.owner}/${repoInfo.github?.repo}`));\n }\n\n // Check if CI workflow already exists\n if (hasCIWorkflow(cwd)) {\n const shouldOverwrite = await p.confirm({\n message: 'CI workflow already exists. Overwrite?',\n initialValue: false,\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n p.cancel('Setup cancelled');\n process.exit(0);\n }\n }\n\n // Get project info\n const projectInfo = await getProjectInfo(cwd);\n console.log(chalk.dim(`Package manager: ${projectInfo.packageManager}`));\n console.log(chalk.dim(`Monorepo: ${projectInfo.isMonorepo ? 'yes' : 'no'}`));\n\n // Load config for CI settings\n const config = await loadConfig();\n const ciConfig = config?.ci;\n\n // Create the workflow\n const spinner = p.spinner();\n spinner.start('Creating CI workflow...');\n\n const result = await createCIWorkflow({\n projectPath: cwd,\n packageManager: projectInfo.packageManager,\n isMonorepo: projectInfo.isMonorepo,\n ciConfig,\n defaultBranch: repoInfo.defaultBranch || 'main',\n });\n\n if (result.success) {\n spinner.stop(chalk.green('āœ“ Created CI workflow'));\n console.log(chalk.dim(` File: ${result.filePath}`));\n \n console.log(chalk.green('\\nāœ“ GitHub Actions CI setup complete'));\n console.log(chalk.dim('\\nThe workflow will run on:'));\n console.log(chalk.dim(' • Push to main/develop branches'));\n console.log(chalk.dim(' • Pull requests to main/develop branches'));\n console.log(chalk.dim('\\nChecks included:'));\n \n const checks = ciConfig?.checks || ['lint', 'typecheck', 'format', 'build', 'test'];\n for (const check of checks) {\n const hasScript = check === 'lint' ? projectInfo.hasLintScript :\n check === 'typecheck' ? projectInfo.hasTypecheckScript :\n check === 'format' ? projectInfo.hasFormatScript :\n check === 'test' ? projectInfo.hasTestScript :\n check === 'build' ? projectInfo.hasBuildScript : false;\n \n const status = hasScript ? chalk.green('āœ“') : chalk.yellow('⚠');\n const note = hasScript ? '' : ' (add script to package.json)';\n console.log(chalk.dim(` ${status} ${check}${note}`));\n }\n\n // Advisory: Branch protection\n console.log(chalk.cyan('\\nšŸ’” Recommended: Enable branch protection'));\n console.log(chalk.dim(' Go to GitHub → Settings → Branches → Add rule'));\n console.log(chalk.dim(' Enable \"Require status checks to pass before merging\"'));\n console.log(chalk.dim(' Select the \"ci\" status check'));\n } else {\n spinner.stop(chalk.red('āœ— Failed to create CI workflow'));\n console.error(chalk.red(` Error: ${result.error}`));\n process.exit(1);\n }\n}\n\nasync function checkAction(cwd: string) {\n console.log(chalk.bold.cyan('\\nšŸ” Checking GitHub Actions CI Setup\\n'));\n\n // Validate CI setup\n const result = await validateGitHubActionsSetup(cwd);\n\n if (result.hasWorkflowFile) {\n console.log(chalk.green('āœ“ CI workflow file found'));\n } else {\n console.log(chalk.red('āœ— No CI workflow file found'));\n console.log(chalk.yellow(' Run: workflow github:setup'));\n process.exit(1);\n }\n\n // Report on checks\n const checks = [\n { name: 'Lint', present: result.hasLintCheck },\n { name: 'Type check', present: result.hasTypecheckCheck },\n { name: 'Format', present: result.hasFormatCheck },\n { name: 'Build', present: result.hasBuildCheck },\n { name: 'Test', present: result.hasTestCheck },\n ];\n\n console.log(chalk.dim('\\nCI checks:'));\n for (const check of checks) {\n const icon = check.present ? chalk.green('āœ“') : chalk.yellow('⚠');\n console.log(` ${icon} ${check.name}`);\n }\n\n // Show errors and warnings\n if (result.errors.length > 0) {\n console.log(chalk.red('\\nErrors:'));\n for (const error of result.errors) {\n console.log(chalk.red(` • ${error}`));\n }\n }\n\n if (result.warnings.length > 0) {\n console.log(chalk.yellow('\\nWarnings:'));\n for (const warning of result.warnings) {\n console.log(chalk.yellow(` • ${warning}`));\n }\n }\n\n if (result.valid) {\n console.log(chalk.green('\\nāœ“ CI setup is valid'));\n } else {\n console.log(chalk.red('\\nāœ— CI setup has issues'));\n console.log(chalk.yellow(' Run: workflow github:setup'));\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["existsSync","writeFile","mkdir","join","fs","existsSync","readFile","join","isMonorepo","existsSync","writeFile","mkdir","join","isMonorepo","join","existsSync","mkdir","writeFile","spinner","join","writeFile","existsSync","mkdir","chalk","execa","chalk","execa","chalk","chalk","p","chalk","existsSync","readFile","join","join","existsSync","mandatory","readFile","chalk","p","chalk","existsSync","join","p","chalk","existsSync","writeFile","mkdir","readFile","join","chalk","isMonorepo","existsSync","join","spinner","mkdir","writeFile","readFile","p","chalk","existsSync","writeFile","mkdir","readFile","join","chalk","isMonorepo","existsSync","join","spinner","mkdir","writeFile","readFile","chalk","chalk","chalk","p","chalk","spinner"]}
1
+ {"version":3,"sources":["../../src/cli/index.ts","../../src/cli/commands/init.ts","../../src/templates/renderer.ts","../../src/adapters/index.ts","../../src/templates/metadata.ts","../../src/utils/hooks.ts","../../src/utils/git-repo.ts","../../src/utils/github-actions.ts","../../src/cli/commands/validate.ts","../../src/cli/commands/config.ts","../../src/cli/commands/suggest.ts","../../src/cli/commands/doctor.ts","../../src/validators/guidelines.ts","../../src/cli/commands/setup.ts","../../src/cli/commands/scope-create.ts","../../src/cli/commands/scope-migrate.ts","../../src/cli/commands/hooks.ts","../../src/cli/commands/github-actions.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 { hooksCommand } from './commands/hooks.js';\nimport { githubCommand } from './commands/github-actions.js';\n\nconst program = new Command();\n\nprogram\n .name('workflow')\n .description('A self-evolving workflow management system for AI agent development')\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('--preset <preset>', 'Preset to use (saas, library, api, ecommerce, cms, custom)')\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('[value]', 'Value to validate (defaults to current branch/HEAD commit)')\n .option('--suggest-on-error', 'Offer improvement suggestions on validation errors')\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('--category <category>', 'Category: feature, bug, documentation, performance, other')\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 .option('--check-guidelines-only', 'Only check mandatory guidelines exist (exits 0 or 1)')\n .action(doctorCommand);\n\nprogram\n .command('hooks')\n .description('Manage git hooks (install, uninstall, status)')\n .argument('<action>', 'Action: install, uninstall, status')\n .action(hooksCommand);\n\nprogram\n .command('github')\n .description('Manage GitHub Actions CI (setup, check)')\n .argument('<action>', 'Action: setup, check')\n .action(githubCommand);\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('--scopes <scopes>', 'Comma-separated scopes (format: name:description:emoji:category)')\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.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 { buildTemplateContext, renderTemplateDirectory, validateTemplateDirectory, renderTemplateFile } from '../../templates/renderer.js';\nimport { getMandatoryTemplates, getOptionalTemplates } from '../../templates/metadata.js';\nimport { installHooks, hasGitRepo } from '../../utils/hooks.js';\nimport { getRepoInfo, getProjectInfo } from '../../utils/git-repo.js';\nimport { createCIWorkflow, hasCIWorkflow } from '../../utils/github-actions.js';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nexport async function initCommand(options: { migrate?: boolean; workspace?: boolean; preset?: string; name?: string; yes?: boolean }) {\n console.log(chalk.bold.cyan('\\nšŸš€ Workflow Agent Initialization\\n'));\n\n const cwd = process.cwd();\n const isNonInteractive = !!(options.preset && options.name) || !!options.yes;\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 ? options.name : 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 ? options.preset : await p.select({\n message: 'Choose a scope preset for your project:',\n options: [\n { value: 'saas', label: 'šŸ“¦ SaaS Application - 17 scopes (auth, tasks, boards, sprints, etc.)' },\n { value: 'library', label: 'šŸ“š Library/Package - 10 scopes (types, build, docs, examples, etc.)' },\n { value: 'api', label: 'šŸ”Œ API/Backend - 13 scopes (auth, endpoints, models, services, etc.)' },\n { value: 'ecommerce', label: 'šŸ›’ E-commerce - 12 scopes (cart, products, payments, orders, etc.)' },\n { value: 'cms', label: 'šŸ“ CMS - 13 scopes (content, pages, media, editor, etc.)' },\n { value: 'custom', label: '✨ Custom (define your own scopes manually)' },\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(chalk.yellow(`\\nāš ļø Could not load preset package. Using basic scopes.`));\n scopes = [\n { name: 'feat', description: 'New features and enhancements', emoji: '✨' },\n { name: 'fix', description: 'Bug fixes and patches', emoji: 'šŸ›' },\n { name: 'documentation', description: 'Documentation updates and improvements', emoji: 'šŸ“š' },\n ];\n }\n } else {\n scopes = [\n { name: 'feat', description: 'New features and enhancements', emoji: '✨' },\n { name: 'fix', description: 'Bug fixes and patches', emoji: 'šŸ›' },\n { name: 'documentation', description: 'Documentation updates and improvements', emoji: 'šŸ“š' },\n ];\n console.log(chalk.dim('\\nšŸ’” Tip: Edit workflow.config.json to add your custom scopes'));\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 // Get repository and project info for CI setup\n const repoInfo = await getRepoInfo(cwd);\n const projectInfo = await getProjectInfo(cwd);\n\n // Always generate mandatory guidelines (no prompt)\n const mandatoryTemplates = getMandatoryTemplates();\n const optionalTemplates = getOptionalTemplates();\n \n console.log(chalk.dim(`\\nšŸ“‹ Generating ${mandatoryTemplates.length} mandatory guidelines...`));\n\n const guidelinesDir = join(cwd, 'guidelines');\n const templatesDir = join(__dirname, '../../templates');\n let mandatoryGenerated = 0;\n let optionalGenerated = 0;\n\n try {\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 await mkdir(guidelinesDir, { recursive: true });\n\n // Generate mandatory templates first (no prompt)\n for (const template of mandatoryTemplates) {\n try {\n const templatePath = join(templatesDir, template.filename);\n const outputPath = join(guidelinesDir, template.filename);\n await renderTemplateFile(templatePath, outputPath, context);\n mandatoryGenerated++;\n } catch (error) {\n console.log(chalk.yellow(` āš ļø Could not generate ${template.filename}`));\n }\n }\n console.log(chalk.green(`āœ“ Generated ${mandatoryGenerated} mandatory guidelines`));\n\n // Prompt for optional guidelines (skip in non-interactive mode with defaults)\n let shouldGenerateOptional = isNonInteractive;\n if (!isNonInteractive) {\n const response = await p.confirm({\n message: `Generate ${optionalTemplates.length} optional guidelines (deployment, library inventory, etc.)?`,\n initialValue: true,\n });\n shouldGenerateOptional = !p.isCancel(response) && response;\n }\n\n if (shouldGenerateOptional) {\n for (const template of optionalTemplates) {\n try {\n const templatePath = join(templatesDir, template.filename);\n const outputPath = join(guidelinesDir, template.filename);\n await renderTemplateFile(templatePath, outputPath, context);\n optionalGenerated++;\n } catch {\n // Silently skip optional templates that fail\n }\n }\n console.log(chalk.green(`āœ“ Generated ${optionalGenerated} optional guidelines`));\n }\n } catch (error) {\n console.log(chalk.yellow(`\\nāš ļø Could not generate guidelines: ${error instanceof Error ? error.message : String(error)}`));\n console.log(chalk.dim('You can manually copy guidelines later if needed.'));\n }\n\n // Install git hooks (skip prompt in non-interactive mode, default to yes)\n if (hasGitRepo(cwd)) {\n let shouldInstallHooks = isNonInteractive;\n if (!isNonInteractive) {\n const response = await p.confirm({\n message: 'Install git hooks for pre-commit validation?',\n initialValue: true,\n });\n shouldInstallHooks = !p.isCancel(response) && response;\n }\n\n if (shouldInstallHooks) {\n const hookSpinner = p.spinner();\n hookSpinner.start('Installing git hooks...');\n \n const hookResults = await installHooks(config.hooks, cwd);\n const allSuccess = hookResults.every(r => r.success);\n \n if (allSuccess) {\n hookSpinner.stop('āœ“ Installed git hooks');\n } else {\n hookSpinner.stop('āš ļø Some hooks could not be installed');\n }\n }\n }\n\n // Setup GitHub Actions CI (mandatory for GitHub repos)\n if (repoInfo.isGitHub) {\n const existingCI = hasCIWorkflow(cwd);\n \n if (!existingCI) {\n console.log(chalk.dim('\\nšŸ”§ Setting up GitHub Actions CI (mandatory for GitHub repos)...'));\n \n const ciResult = await createCIWorkflow({\n projectPath: cwd,\n packageManager: projectInfo.packageManager,\n isMonorepo: projectInfo.isMonorepo,\n ciConfig: config.ci,\n defaultBranch: repoInfo.defaultBranch || 'main',\n });\n\n if (ciResult.success) {\n console.log(chalk.green('āœ“ Created GitHub Actions CI workflow'));\n console.log(chalk.dim(` File: .github/workflows/ci.yml`));\n } else {\n console.log(chalk.yellow(`āš ļø Could not create CI workflow: ${ciResult.error}`));\n }\n } else {\n console.log(chalk.dim('\\nāœ“ GitHub Actions CI workflow already exists'));\n }\n } else if (repoInfo.isGitRepo) {\n // Non-GitHub git repo - offer to create workflow anyway (skip in non-interactive mode)\n let shouldSetupCI = false;\n if (!isNonInteractive) {\n const response = await p.confirm({\n message: 'No GitHub remote detected. Create CI workflow anyway?',\n initialValue: false,\n });\n shouldSetupCI = !p.isCancel(response) && response;\n }\n\n if (shouldSetupCI) {\n const ciResult = await createCIWorkflow({\n projectPath: cwd,\n packageManager: projectInfo.packageManager,\n isMonorepo: projectInfo.isMonorepo,\n defaultBranch: repoInfo.defaultBranch || 'main',\n });\n\n if (ciResult.success) {\n console.log(chalk.green('āœ“ Created CI workflow'));\n }\n }\n }\n\n p.outro(chalk.green('āœ“ Workflow Agent initialized successfully!'));\n console.log(chalk.dim('\\nNext steps:'));\n console.log(chalk.dim(' 1. Review your configuration in workflow.config.json'));\n console.log(chalk.dim(' 2. Review generated guidelines in guidelines/ directory'));\n console.log(chalk.dim(' 3. Run: workflow validate branch'));\n console.log(chalk.dim(' 4. Run: workflow doctor (for health check)\\n'));\n \n if (repoInfo.isGitHub) {\n console.log(chalk.cyan('šŸ’” Recommended: Enable branch protection on GitHub'));\n console.log(chalk.dim(' Settings → Branches → Add rule → Require status checks\\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(template: string, context: TemplateContext): 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### 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/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(templateDir: string): 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(`No template files found in template directory: ${templateDir}`);\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<Pick<TemplateContext, 'scopeName' | 'presetName' | 'scopeDefinitions' | 'packageVersion'>> & 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: 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(path.join(outputDir, 'tsup.config.ts'), tsupConfig, 'utf-8');\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 fs.existsSync('app') && fs.existsSync('next.config.ts') || fs.existsSync('next.config.js');\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 fs.existsSync('pages') && (fs.existsSync('next.config.ts') || fs.existsSync('next.config.js'));\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 fs.existsSync('app/routes') && (fs.existsSync('remix.config.js') || fs.existsSync('package.json'));\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 fs.existsSync('astro.config.mjs') || fs.existsSync('astro.config.ts');\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","/**\n * Template metadata defining mandatory vs optional guidelines\n * and their associated validators for enforcement\n * \n * @fileoverview This module defines which guidelines are mandatory for projects\n * using the workflow agent. Mandatory guidelines MUST be present and cannot be\n * skipped during project initialization.\n * \n * TODO: Ensure all new templates have associated unit tests in metadata.test.ts\n */\n\nexport type TemplateCategory = 'workflow' | 'documentation' | 'development';\n\nexport type ValidatorType = \n | 'branch-name'\n | 'commit-message'\n | 'pr-title'\n | 'implementation-plan'\n | 'test-coverage'\n | 'file-exists';\n\nexport interface TemplateMetadata {\n /** Template filename */\n filename: string;\n /** Human-readable name */\n displayName: string;\n /** Whether this template is mandatory (cannot be skipped during init) */\n mandatory: boolean;\n /** Category for grouping */\n category: TemplateCategory;\n /** Associated validators that enforce this template's rules */\n validators: ValidatorType[];\n /** Brief description of what this template covers */\n description: string;\n}\n\n/**\n * Metadata for all available templates\n * Templates marked as mandatory will be auto-generated during init\n * and checked by the doctor command\n */\nexport const templateMetadata: Record<string, TemplateMetadata> = {\n 'AGENT_EDITING_INSTRUCTIONS.md': {\n filename: 'AGENT_EDITING_INSTRUCTIONS.md',\n displayName: 'Agent Editing Instructions',\n mandatory: true,\n category: 'workflow',\n validators: ['implementation-plan'],\n description: 'Core rules for AI agents: implementation plans, coding standards, architecture',\n },\n 'BRANCHING_STRATEGY.md': {\n filename: 'BRANCHING_STRATEGY.md',\n displayName: 'Branching Strategy',\n mandatory: true,\n category: 'workflow',\n validators: ['branch-name', 'pr-title'],\n description: 'Git branch naming conventions, PR requirements, merge policies',\n },\n 'TESTING_STRATEGY.md': {\n filename: 'TESTING_STRATEGY.md',\n displayName: 'Testing Strategy',\n mandatory: true,\n category: 'development',\n validators: ['test-coverage'],\n description: 'Testing pyramid, Vitest/Playwright patterns, when tests are required',\n },\n 'SELF_IMPROVEMENT_MANDATE.md': {\n filename: 'SELF_IMPROVEMENT_MANDATE.md',\n displayName: 'Self-Improvement Mandate',\n mandatory: true,\n category: 'workflow',\n validators: [],\n description: 'Continuous improvement tracking, changelog requirements',\n },\n 'SINGLE_SOURCE_OF_TRUTH.md': {\n filename: 'SINGLE_SOURCE_OF_TRUTH.md',\n displayName: 'Single Source of Truth',\n mandatory: true,\n category: 'workflow',\n validators: [],\n description: 'Canonical code locations, service patterns, avoiding duplication',\n },\n 'COMPONENT_LIBRARY.md': {\n filename: 'COMPONENT_LIBRARY.md',\n displayName: 'Component Library',\n mandatory: false,\n category: 'development',\n validators: [],\n description: 'UI component patterns, design tokens, decision tree',\n },\n 'DEPLOYMENT_STRATEGY.md': {\n filename: 'DEPLOYMENT_STRATEGY.md',\n displayName: 'Deployment Strategy',\n mandatory: false,\n category: 'development',\n validators: [],\n description: 'Deployment workflow, environments, migrations, rollback',\n },\n 'LIBRARY_INVENTORY.md': {\n filename: 'LIBRARY_INVENTORY.md',\n displayName: 'Library Inventory',\n mandatory: false,\n category: 'development',\n validators: [],\n description: 'Dependency catalog, approved libraries, new library process',\n },\n 'SCOPE_CREATION_WORKFLOW.md': {\n filename: 'SCOPE_CREATION_WORKFLOW.md',\n displayName: 'Scope Creation Workflow',\n mandatory: false,\n category: 'workflow',\n validators: [],\n description: 'Workflow for AI agents creating custom scopes',\n },\n 'CUSTOM_SCOPE_TEMPLATE.md': {\n filename: 'CUSTOM_SCOPE_TEMPLATE.md',\n displayName: 'Custom Scope Template',\n mandatory: false,\n category: 'workflow',\n validators: [],\n description: 'Template for defining custom scope packages',\n },\n 'PROJECT_TEMPLATE_README.md': {\n filename: 'PROJECT_TEMPLATE_README.md',\n displayName: 'Project Template README',\n mandatory: false,\n category: 'documentation',\n validators: [],\n description: 'Meta-document describing project structure',\n },\n 'Guidelines.md': {\n filename: 'Guidelines.md',\n displayName: 'Custom Guidelines',\n mandatory: false,\n category: 'documentation',\n validators: [],\n description: 'Placeholder for custom user guidelines',\n },\n};\n\n/**\n * Get all mandatory templates\n */\nexport function getMandatoryTemplates(): TemplateMetadata[] {\n return Object.values(templateMetadata).filter(t => t.mandatory);\n}\n\n/**\n * Get all optional templates\n */\nexport function getOptionalTemplates(): TemplateMetadata[] {\n return Object.values(templateMetadata).filter(t => !t.mandatory);\n}\n\n/**\n * Get templates by category\n */\nexport function getTemplatesByCategory(category: TemplateCategory): TemplateMetadata[] {\n return Object.values(templateMetadata).filter(t => t.category === category);\n}\n\n/**\n * Get template metadata by filename\n */\nexport function getTemplateMetadata(filename: string): TemplateMetadata | undefined {\n return templateMetadata[filename];\n}\n\n/**\n * Check if a template is mandatory\n */\nexport function isTemplateMandatory(filename: string): boolean {\n return templateMetadata[filename]?.mandatory ?? false;\n}\n\n/**\n * Get mandatory template filenames\n */\nexport function getMandatoryTemplateFilenames(): string[] {\n return getMandatoryTemplates().map(t => t.filename);\n}\n","/**\n * Git hooks utility for installing, managing, and removing workflow hooks\n * Supports wrapping existing hooks and CI environment detection\n */\n\nimport { existsSync } from 'fs';\nimport { readFile, writeFile, unlink, chmod, rename, mkdir } from 'fs/promises';\nimport { join } from 'path';\nimport type { HooksConfig } from '../config/schema.js';\n\nexport interface HookStatus {\n installed: boolean;\n hookType: 'pre-commit' | 'commit-msg';\n hasExistingHook: boolean;\n wrappedOriginal: boolean;\n}\n\nexport interface InstallResult {\n success: boolean;\n hookType: 'pre-commit' | 'commit-msg';\n wrappedExisting: boolean;\n error?: string;\n}\n\n/**\n * Check if running in a CI environment\n */\nexport function isCI(): boolean {\n return !!(\n process.env.CI ||\n process.env.GITHUB_ACTIONS ||\n process.env.GITLAB_CI ||\n process.env.CIRCLECI ||\n process.env.TRAVIS ||\n process.env.JENKINS_URL ||\n process.env.BUILDKITE ||\n process.env.TF_BUILD // Azure DevOps\n );\n}\n\n/**\n * Get the path to the .git/hooks directory\n */\nexport function getGitHooksDir(projectPath: string = process.cwd()): string {\n return join(projectPath, '.git', 'hooks');\n}\n\n/**\n * Check if a git repository exists\n */\nexport function hasGitRepo(projectPath: string = process.cwd()): boolean {\n return existsSync(join(projectPath, '.git'));\n}\n\n/**\n * Generate the pre-commit hook script content\n */\nfunction generatePreCommitHook(config?: HooksConfig): string {\n const checks = config?.preCommit || ['validate-branch', 'check-guidelines'];\n \n const checkCommands = checks.map(check => {\n switch (check) {\n case 'validate-branch':\n return ' workflow validate branch';\n case 'validate-commit':\n return ' workflow validate commit';\n case 'check-guidelines':\n return ' workflow doctor --check-guidelines-only 2>/dev/null || true';\n default:\n return '';\n }\n }).filter(Boolean).join('\\n');\n\n return `#!/bin/sh\n# Workflow Agent pre-commit hook\n# Auto-generated - do not edit manually\n# To reinstall: workflow hooks install\n# To uninstall: workflow hooks uninstall\n\n# Skip in CI environment\nif [ -n \"\\${CI:-}\" ] || [ -n \"\\${GITHUB_ACTIONS:-}\" ] || [ -n \"\\${GITLAB_CI:-}\" ]; then\n exit 0\nfi\n\n# Run workflow checks\n${checkCommands}\n\n# Run original hook if it exists\nif [ -f \".git/hooks/pre-commit.original\" ]; then\n .git/hooks/pre-commit.original \"\\$@\"\nfi\n`;\n}\n\n/**\n * Generate the commit-msg hook script content\n */\nfunction generateCommitMsgHook(config?: HooksConfig): string {\n const checks = config?.commitMsg || ['validate-commit'];\n \n const checkCommands = checks.map(check => {\n switch (check) {\n case 'validate-commit':\n return ' workflow validate commit \"$(cat \"$1\")\"';\n default:\n return '';\n }\n }).filter(Boolean).join('\\n');\n\n return `#!/bin/sh\n# Workflow Agent commit-msg hook\n# Auto-generated - do not edit manually\n# To reinstall: workflow hooks install\n# To uninstall: workflow hooks uninstall\n\n# Skip in CI environment\nif [ -n \"\\${CI:-}\" ] || [ -n \"\\${GITHUB_ACTIONS:-}\" ] || [ -n \"\\${GITLAB_CI:-}\" ]; then\n exit 0\nfi\n\n# Run workflow checks\n${checkCommands}\n\n# Run original hook if it exists\nif [ -f \".git/hooks/commit-msg.original\" ]; then\n .git/hooks/commit-msg.original \"\\$@\"\nfi\n`;\n}\n\n/**\n * Check if a hook file is a workflow-managed hook\n */\nasync function isWorkflowHook(hookPath: string): Promise<boolean> {\n try {\n const content = await readFile(hookPath, 'utf-8');\n return content.includes('Workflow Agent') && content.includes('Auto-generated');\n } catch {\n return false;\n }\n}\n\n/**\n * Get the status of a specific hook\n */\nexport async function getHookStatus(\n hookType: 'pre-commit' | 'commit-msg',\n projectPath: string = process.cwd()\n): Promise<HookStatus> {\n const hooksDir = getGitHooksDir(projectPath);\n const hookPath = join(hooksDir, hookType);\n const originalPath = join(hooksDir, `${hookType}.original`);\n\n const status: HookStatus = {\n installed: false,\n hookType,\n hasExistingHook: false,\n wrappedOriginal: false,\n };\n\n if (!existsSync(hookPath)) {\n return status;\n }\n\n status.hasExistingHook = true;\n\n if (await isWorkflowHook(hookPath)) {\n status.installed = true;\n status.wrappedOriginal = existsSync(originalPath);\n }\n\n return status;\n}\n\n/**\n * Get status of all hooks\n */\nexport async function getAllHooksStatus(\n projectPath: string = process.cwd()\n): Promise<HookStatus[]> {\n return Promise.all([\n getHookStatus('pre-commit', projectPath),\n getHookStatus('commit-msg', projectPath),\n ]);\n}\n\n/**\n * Install a single hook, wrapping existing if present\n */\nasync function installSingleHook(\n hookType: 'pre-commit' | 'commit-msg',\n config?: HooksConfig,\n projectPath: string = process.cwd()\n): Promise<InstallResult> {\n const hooksDir = getGitHooksDir(projectPath);\n const hookPath = join(hooksDir, hookType);\n const originalPath = join(hooksDir, `${hookType}.original`);\n\n const result: InstallResult = {\n success: false,\n hookType,\n wrappedExisting: false,\n };\n\n try {\n // Ensure hooks directory exists\n if (!existsSync(hooksDir)) {\n await mkdir(hooksDir, { recursive: true });\n }\n\n // Check for existing hook\n if (existsSync(hookPath)) {\n const isOurs = await isWorkflowHook(hookPath);\n \n if (!isOurs) {\n // Backup existing hook\n await rename(hookPath, originalPath);\n result.wrappedExisting = true;\n }\n }\n\n // Generate and write the hook\n const hookContent = hookType === 'pre-commit' \n ? generatePreCommitHook(config)\n : generateCommitMsgHook(config);\n\n await writeFile(hookPath, hookContent, 'utf-8');\n await chmod(hookPath, 0o755);\n\n result.success = true;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n}\n\n/**\n * Install all workflow hooks\n */\nexport async function installHooks(\n config?: HooksConfig,\n projectPath: string = process.cwd()\n): Promise<InstallResult[]> {\n if (!hasGitRepo(projectPath)) {\n return [{\n success: false,\n hookType: 'pre-commit',\n wrappedExisting: false,\n error: 'No git repository found. Run git init first.',\n }];\n }\n\n const results = await Promise.all([\n installSingleHook('pre-commit', config, projectPath),\n installSingleHook('commit-msg', config, projectPath),\n ]);\n\n return results;\n}\n\n/**\n * Uninstall a single hook, restoring original if it was wrapped\n */\nasync function uninstallSingleHook(\n hookType: 'pre-commit' | 'commit-msg',\n projectPath: string = process.cwd()\n): Promise<InstallResult> {\n const hooksDir = getGitHooksDir(projectPath);\n const hookPath = join(hooksDir, hookType);\n const originalPath = join(hooksDir, `${hookType}.original`);\n\n const result: InstallResult = {\n success: false,\n hookType,\n wrappedExisting: false,\n };\n\n try {\n if (!existsSync(hookPath)) {\n result.success = true;\n return result;\n }\n\n const isOurs = await isWorkflowHook(hookPath);\n \n if (!isOurs) {\n result.error = 'Hook is not managed by Workflow Agent';\n return result;\n }\n\n // Remove our hook\n await unlink(hookPath);\n\n // Restore original if it exists\n if (existsSync(originalPath)) {\n await rename(originalPath, hookPath);\n result.wrappedExisting = true;\n }\n\n result.success = true;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n}\n\n/**\n * Uninstall all workflow hooks\n */\nexport async function uninstallHooks(\n projectPath: string = process.cwd()\n): Promise<InstallResult[]> {\n return Promise.all([\n uninstallSingleHook('pre-commit', projectPath),\n uninstallSingleHook('commit-msg', projectPath),\n ]);\n}\n","/**\n * Git repository utilities for detecting repository info,\n * package manager, monorepo setup, and GitHub remote\n */\n\nimport { execa, type ExecaError } from 'execa';\nimport { existsSync } from 'fs';\nimport { readFile } from 'fs/promises';\nimport { join } from 'path';\n\nexport type PackageManager = 'npm' | 'pnpm' | 'yarn' | 'bun';\n\nexport interface GitHubInfo {\n owner: string;\n repo: string;\n}\n\nexport interface RepoInfo {\n isGitRepo: boolean;\n remoteUrl: string | null;\n isGitHub: boolean;\n github: GitHubInfo | null;\n defaultBranch: string | null;\n}\n\nexport interface ProjectInfo {\n packageManager: PackageManager;\n isMonorepo: boolean;\n hasLintScript: boolean;\n hasTypecheckScript: boolean;\n hasFormatScript: boolean;\n hasTestScript: boolean;\n hasBuildScript: boolean;\n}\n\n/**\n * Check if the current directory is a git repository\n */\nexport async function isGitRepo(projectPath: string = process.cwd()): Promise<boolean> {\n try {\n await execa('git', ['rev-parse', '--git-dir'], { cwd: projectPath });\n return true;\n } catch {\n return false;\n }\n}\n\n/**\n * Get the git remote URL for origin\n */\nexport async function getGitRemoteUrl(projectPath: string = process.cwd()): Promise<string | null> {\n try {\n const { stdout } = await execa('git', ['remote', 'get-url', 'origin'], { cwd: projectPath });\n return stdout.trim() || null;\n } catch {\n return null;\n }\n}\n\n/**\n * Check if the remote URL is a GitHub repository\n */\nexport function isGitHubRemote(remoteUrl: string | null): boolean {\n if (!remoteUrl) return false;\n return remoteUrl.includes('github.com');\n}\n\n/**\n * Parse GitHub owner and repo from remote URL\n * Supports both SSH (git@github.com:owner/repo.git) and HTTPS (https://github.com/owner/repo.git)\n */\nexport function parseGitHubUrl(remoteUrl: string | null): GitHubInfo | null {\n if (!remoteUrl || !isGitHubRemote(remoteUrl)) return null;\n\n // Match: git@github.com:owner/repo.git or https://github.com/owner/repo.git\n const match = remoteUrl.match(/github\\.com[:/]([^/]+)\\/([^/.]+)/);\n \n if (match) {\n return {\n owner: match[1],\n repo: match[2].replace(/\\.git$/, ''),\n };\n }\n \n return null;\n}\n\n/**\n * Get the default branch name\n */\nexport async function getDefaultBranch(projectPath: string = process.cwd()): Promise<string | null> {\n try {\n // Try to get from remote\n const { stdout } = await execa('git', ['symbolic-ref', 'refs/remotes/origin/HEAD'], { \n cwd: projectPath \n });\n return stdout.trim().replace('refs/remotes/origin/', '') || 'main';\n } catch {\n // Fallback: try HEAD\n try {\n const { stdout } = await execa('git', ['rev-parse', '--abbrev-ref', 'HEAD'], { \n cwd: projectPath \n });\n return stdout.trim() || 'main';\n } catch {\n return 'main';\n }\n }\n}\n\n/**\n * Get comprehensive repository information\n */\nexport async function getRepoInfo(projectPath: string = process.cwd()): Promise<RepoInfo> {\n const isRepo = await isGitRepo(projectPath);\n \n if (!isRepo) {\n return {\n isGitRepo: false,\n remoteUrl: null,\n isGitHub: false,\n github: null,\n defaultBranch: null,\n };\n }\n\n const remoteUrl = await getGitRemoteUrl(projectPath);\n const isGitHub = isGitHubRemote(remoteUrl);\n const github = parseGitHubUrl(remoteUrl);\n const defaultBranch = await getDefaultBranch(projectPath);\n\n return {\n isGitRepo: true,\n remoteUrl,\n isGitHub,\n github,\n defaultBranch,\n };\n}\n\n/**\n * Detect the package manager used in the project\n */\nexport async function detectPackageManager(projectPath: string = process.cwd()): Promise<PackageManager> {\n // Check for lockfiles in order of preference\n if (existsSync(join(projectPath, 'pnpm-lock.yaml'))) {\n return 'pnpm';\n }\n if (existsSync(join(projectPath, 'yarn.lock'))) {\n return 'yarn';\n }\n if (existsSync(join(projectPath, 'bun.lockb'))) {\n return 'bun';\n }\n if (existsSync(join(projectPath, 'package-lock.json'))) {\n return 'npm';\n }\n\n // Check packageManager field in package.json\n try {\n const pkgPath = join(projectPath, 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));\n if (pkg.packageManager) {\n if (pkg.packageManager.startsWith('pnpm')) return 'pnpm';\n if (pkg.packageManager.startsWith('yarn')) return 'yarn';\n if (pkg.packageManager.startsWith('bun')) return 'bun';\n }\n }\n } catch {\n // Ignore parse errors\n }\n\n // Default to npm\n return 'npm';\n}\n\n/**\n * Check if the project is a monorepo\n */\nexport async function isMonorepo(projectPath: string = process.cwd()): Promise<boolean> {\n // Check for pnpm workspace\n if (existsSync(join(projectPath, 'pnpm-workspace.yaml'))) {\n return true;\n }\n\n // Check for yarn/npm workspaces in package.json\n try {\n const pkgPath = join(projectPath, 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));\n if (pkg.workspaces) {\n return true;\n }\n }\n } catch {\n // Ignore parse errors\n }\n\n // Check for lerna.json\n if (existsSync(join(projectPath, 'lerna.json'))) {\n return true;\n }\n\n // Check for nx.json\n if (existsSync(join(projectPath, 'nx.json'))) {\n return true;\n }\n\n // Check for turbo.json\n if (existsSync(join(projectPath, 'turbo.json'))) {\n return true;\n }\n\n return false;\n}\n\n/**\n * Get available scripts from package.json\n */\nexport async function getPackageScripts(projectPath: string = process.cwd()): Promise<Record<string, string>> {\n try {\n const pkgPath = join(projectPath, 'package.json');\n if (!existsSync(pkgPath)) {\n return {};\n }\n const pkg = JSON.parse(await readFile(pkgPath, 'utf-8'));\n return pkg.scripts || {};\n } catch {\n return {};\n }\n}\n\n/**\n * Get comprehensive project information\n */\nexport async function getProjectInfo(projectPath: string = process.cwd()): Promise<ProjectInfo> {\n const packageManager = await detectPackageManager(projectPath);\n const monorepo = await isMonorepo(projectPath);\n const scripts = await getPackageScripts(projectPath);\n\n return {\n packageManager,\n isMonorepo: monorepo,\n hasLintScript: 'lint' in scripts,\n hasTypecheckScript: 'typecheck' in scripts || 'type-check' in scripts,\n hasFormatScript: 'format' in scripts || 'format:check' in scripts,\n hasTestScript: 'test' in scripts,\n hasBuildScript: 'build' in scripts,\n };\n}\n\n/**\n * Get the install command for a package manager\n */\nexport function getInstallCommand(packageManager: PackageManager): string {\n switch (packageManager) {\n case 'pnpm':\n return 'pnpm install --frozen-lockfile';\n case 'yarn':\n return 'yarn install --frozen-lockfile';\n case 'bun':\n return 'bun install --frozen-lockfile';\n case 'npm':\n default:\n return 'npm ci';\n }\n}\n\n/**\n * Get the run command for a package manager (handles monorepo -r flag for pnpm)\n */\nexport function getRunCommand(\n packageManager: PackageManager, \n script: string, \n isMonorepo: boolean = false\n): string {\n switch (packageManager) {\n case 'pnpm':\n return isMonorepo ? `pnpm -r run ${script}` : `pnpm run ${script}`;\n case 'yarn':\n return isMonorepo ? `yarn workspaces run ${script}` : `yarn run ${script}`;\n case 'bun':\n return `bun run ${script}`;\n case 'npm':\n default:\n return isMonorepo ? `npm run ${script} --workspaces --if-present` : `npm run ${script}`;\n }\n}\n","/**\n * GitHub Actions workflow generator\n * Creates CI workflow with lint, typecheck, format, build, and test checks\n */\n\nimport { existsSync } from 'fs';\nimport { writeFile, mkdir } from 'fs/promises';\nimport { join } from 'path';\nimport type { CIConfig } from '../config/schema.js';\nimport { \n type PackageManager, \n getInstallCommand, \n getRunCommand,\n detectPackageManager,\n isMonorepo as checkMonorepo,\n getProjectInfo,\n} from './git-repo.js';\n\nexport interface WorkflowGeneratorOptions {\n /** Project path */\n projectPath?: string;\n /** Package manager to use */\n packageManager?: PackageManager;\n /** Whether it's a monorepo */\n isMonorepo?: boolean;\n /** CI configuration */\n ciConfig?: CIConfig;\n /** Node.js versions to test against */\n nodeVersions?: string[];\n /** Default branch name */\n defaultBranch?: string;\n}\n\nexport interface GenerateResult {\n success: boolean;\n filePath: string;\n error?: string;\n}\n\n/**\n * Generate the CI workflow YAML content\n */\nexport function generateCIWorkflowContent(options: {\n packageManager: PackageManager;\n isMonorepo: boolean;\n checks: string[];\n nodeVersions: string[];\n defaultBranch: string;\n hasLintScript: boolean;\n hasTypecheckScript: boolean;\n hasFormatScript: boolean;\n hasTestScript: boolean;\n hasBuildScript: boolean;\n}): string {\n const {\n packageManager,\n isMonorepo,\n checks,\n nodeVersions,\n defaultBranch,\n hasLintScript,\n hasTypecheckScript,\n hasFormatScript,\n hasTestScript,\n hasBuildScript,\n } = options;\n\n const installCmd = getInstallCommand(packageManager);\n \n // Build steps based on available scripts and checks\n const steps: string[] = [];\n\n // Checkout\n steps.push(` - name: Checkout\n uses: actions/checkout@v4`);\n\n // Setup package manager cache based on type\n let cacheType = packageManager;\n if (packageManager === 'bun') {\n cacheType = 'npm'; // fallback for bun\n }\n\n // Setup Node.js (using matrix for multiple versions)\n const useMatrix = nodeVersions.length > 1;\n const nodeVersionValue = useMatrix ? `\\${{ matrix.node-version }}` : nodeVersions[0] || '20';\n\n steps.push(`\n - name: Setup Node.js\n uses: actions/setup-node@v4\n with:\n node-version: '${nodeVersionValue}'\n cache: '${cacheType}'`);\n\n // Setup pnpm if needed\n if (packageManager === 'pnpm') {\n steps.push(`\n - name: Setup pnpm\n uses: pnpm/action-setup@v4\n with:\n version: 9`);\n }\n\n // Install dependencies\n steps.push(`\n - name: Install dependencies\n run: ${installCmd}`);\n\n // Lint check\n if (checks.includes('lint')) {\n if (hasLintScript) {\n const lintCmd = getRunCommand(packageManager, 'lint', isMonorepo);\n steps.push(`\n - name: Lint\n run: ${lintCmd}`);\n } else {\n steps.push(`\n - name: Lint\n run: echo \"No lint script configured - add 'lint' to package.json scripts\"`);\n }\n }\n\n // Typecheck\n if (checks.includes('typecheck')) {\n if (hasTypecheckScript) {\n const typecheckCmd = getRunCommand(packageManager, 'typecheck', isMonorepo);\n steps.push(`\n - name: Type check\n run: ${typecheckCmd}`);\n } else {\n steps.push(`\n - name: Type check\n run: npx tsc --noEmit`);\n }\n }\n\n // Format check\n if (checks.includes('format')) {\n if (hasFormatScript) {\n // Check if there's a format:check script, otherwise use prettier directly\n const formatCmd = getRunCommand(packageManager, 'format:check', isMonorepo);\n steps.push(`\n - name: Format check\n run: ${formatCmd} || npx prettier --check \"**/*.{ts,tsx,js,jsx,json,md}\"`);\n } else {\n steps.push(`\n - name: Format check\n run: npx prettier --check \"**/*.{ts,tsx,js,jsx,json,md}\"`);\n }\n }\n\n // Build\n if (checks.includes('build')) {\n if (hasBuildScript) {\n const buildCmd = getRunCommand(packageManager, 'build', isMonorepo);\n steps.push(`\n - name: Build\n run: ${buildCmd}`);\n } else {\n steps.push(`\n - name: Build\n run: echo \"No build script configured - add 'build' to package.json scripts\"`);\n }\n }\n\n // Test\n if (checks.includes('test')) {\n if (hasTestScript) {\n const testCmd = getRunCommand(packageManager, 'test', isMonorepo);\n steps.push(`\n - name: Test\n run: ${testCmd}`);\n } else {\n steps.push(`\n - name: Test\n run: echo \"No test script configured - add 'test' to package.json scripts\"`);\n }\n }\n\n // Build the matrix strategy if using multiple Node versions\n let matrixStrategy = '';\n if (useMatrix) {\n matrixStrategy = `\n strategy:\n matrix:\n node-version: [${nodeVersions.map(v => `'${v}'`).join(', ')}]`;\n }\n\n const workflow = `# Workflow Agent CI Pipeline\n# Auto-generated - modifications will be preserved on regeneration\n# To regenerate: workflow github:setup\n\nname: CI\n\non:\n push:\n branches: [${defaultBranch}, develop]\n pull_request:\n branches: [${defaultBranch}, develop]\n\njobs:\n ci:\n runs-on: ubuntu-latest${matrixStrategy}\n\n steps:\n${steps.join('\\n')}\n`;\n\n return workflow;\n}\n\n/**\n * Create the GitHub Actions CI workflow file\n */\nexport async function createCIWorkflow(\n options: WorkflowGeneratorOptions = {}\n): Promise<GenerateResult> {\n const projectPath = options.projectPath || process.cwd();\n const workflowsDir = join(projectPath, '.github', 'workflows');\n const workflowPath = join(workflowsDir, 'ci.yml');\n\n const result: GenerateResult = {\n success: false,\n filePath: workflowPath,\n };\n\n try {\n // Get project info if not provided\n const projectInfo = await getProjectInfo(projectPath);\n const packageManager = options.packageManager || projectInfo.packageManager;\n const isMonorepo = options.isMonorepo ?? projectInfo.isMonorepo;\n\n // Get CI checks from config or use defaults\n const checks = options.ciConfig?.checks || ['lint', 'typecheck', 'format', 'build', 'test'];\n const nodeVersions = options.nodeVersions || ['20'];\n const defaultBranch = options.defaultBranch || 'main';\n\n // Ensure .github/workflows directory exists\n if (!existsSync(workflowsDir)) {\n await mkdir(workflowsDir, { recursive: true });\n }\n\n // Generate workflow content\n const content = generateCIWorkflowContent({\n packageManager,\n isMonorepo,\n checks,\n nodeVersions,\n defaultBranch,\n hasLintScript: projectInfo.hasLintScript,\n hasTypecheckScript: projectInfo.hasTypecheckScript,\n hasFormatScript: projectInfo.hasFormatScript,\n hasTestScript: projectInfo.hasTestScript,\n hasBuildScript: projectInfo.hasBuildScript,\n });\n\n // Write workflow file\n await writeFile(workflowPath, content, 'utf-8');\n\n result.success = true;\n } catch (error) {\n result.error = error instanceof Error ? error.message : String(error);\n }\n\n return result;\n}\n\n/**\n * Check if a CI workflow already exists\n */\nexport function hasCIWorkflow(projectPath: string = process.cwd()): boolean {\n const workflowsDir = join(projectPath, '.github', 'workflows');\n const possibleNames = ['ci.yml', 'ci.yaml', 'main.yml', 'main.yaml'];\n \n return possibleNames.some(name => existsSync(join(workflowsDir, name)));\n}\n","import chalk from 'chalk';\nimport { execa } from 'execa';\nimport { loadConfig } from '../../config/index.js';\nimport { validateBranchName, validateCommitMessage, validatePRTitle } 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(chalk.red('āœ— No workflow configuration found. Run: workflow init'));\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(chalk.yellow(`\\nāš ļø Advisory mode: validation failed but not blocking`));\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(action: string, key?: string, value?: string) {\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(feedback: string, options: { author?: string; category?: string } = {}) {\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(chalk.dim(' 3. Incorporated into future releases if approved\\n'));\n}\n","import chalk from 'chalk';\nimport { loadConfig } from '../../config/index.js';\nimport { getAllHooksStatus, hasGitRepo } from '../../utils/hooks.js';\nimport { getRepoInfo } from '../../utils/git-repo.js';\nimport { validateGuidelinesExist, validateGitHubActionsSetup } from '../../validators/guidelines.js';\nimport { hasCIWorkflow } from '../../utils/github-actions.js';\n\ninterface DoctorOptions {\n checkGuidelinesOnly?: boolean;\n}\n\nexport async function doctorCommand(options: DoctorOptions = {}) {\n const cwd = process.cwd();\n \n // Quick guidelines check mode (for pre-commit hook)\n if (options.checkGuidelinesOnly) {\n const result = await validateGuidelinesExist(cwd);\n if (!result.valid) {\n console.error(chalk.red('āœ— Missing mandatory guidelines'));\n for (const missing of result.missingMandatory) {\n console.error(chalk.red(` • ${missing}`));\n }\n process.exit(1);\n }\n process.exit(0);\n }\n\n console.log(chalk.bold.cyan('\\nšŸ„ Workflow Agent Health Check\\n'));\n\n const config = await loadConfig();\n let hasErrors = false;\n let hasWarnings = false;\n\n // 1. Configuration check\n console.log(chalk.bold('šŸ“‹ Configuration'));\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 // 2. Guidelines check\n console.log(chalk.bold('\\nšŸ“š Guidelines'));\n const guidelinesResult = await validateGuidelinesExist(cwd, config);\n \n if (guidelinesResult.valid) {\n console.log(chalk.green(` āœ“ All ${guidelinesResult.presentMandatory.length} mandatory guidelines present`));\n if (guidelinesResult.presentOptional.length > 0) {\n console.log(chalk.dim(` + ${guidelinesResult.presentOptional.length} optional guidelines`));\n }\n } else {\n hasErrors = true;\n console.log(chalk.red(` āœ— Missing ${guidelinesResult.missingMandatory.length} mandatory guidelines:`));\n for (const missing of guidelinesResult.missingMandatory) {\n console.log(chalk.red(` • ${missing}`));\n }\n console.log(chalk.yellow(' Run: workflow init'));\n }\n\n // 3. Git hooks check\n console.log(chalk.bold('\\nšŸ”— Git Hooks'));\n if (!hasGitRepo(cwd)) {\n console.log(chalk.yellow(' ⚠ No git repository found'));\n hasWarnings = true;\n } else {\n const hookStatuses = await getAllHooksStatus(cwd);\n const installedHooks = hookStatuses.filter(h => h.installed);\n \n if (installedHooks.length === hookStatuses.length) {\n console.log(chalk.green(` āœ“ All ${installedHooks.length} hooks installed`));\n for (const hook of hookStatuses) {\n const extra = hook.wrappedOriginal ? ' (wrapping original)' : '';\n console.log(chalk.dim(` • ${hook.hookType}${extra}`));\n }\n } else if (installedHooks.length > 0) {\n hasWarnings = true;\n console.log(chalk.yellow(` ⚠ ${installedHooks.length}/${hookStatuses.length} hooks installed`));\n for (const hook of hookStatuses) {\n if (hook.installed) {\n console.log(chalk.green(` āœ“ ${hook.hookType}`));\n } else {\n console.log(chalk.yellow(` āœ— ${hook.hookType}`));\n }\n }\n console.log(chalk.yellow(' Run: workflow hooks install'));\n } else {\n hasWarnings = true;\n console.log(chalk.yellow(' ⚠ No hooks installed'));\n console.log(chalk.yellow(' Run: workflow hooks install'));\n }\n }\n\n // 4. GitHub Actions CI check\n console.log(chalk.bold('\\nšŸš€ CI/CD Pipeline'));\n const repoInfo = await getRepoInfo(cwd);\n \n if (!repoInfo.isGitRepo) {\n console.log(chalk.dim(' ā—‹ No git repository (CI check skipped)'));\n } else if (!repoInfo.isGitHub) {\n console.log(chalk.dim(' ā—‹ Not a GitHub repository (CI check skipped)'));\n console.log(chalk.dim(` Remote: ${repoInfo.remoteUrl || 'none'}`));\n } else {\n console.log(chalk.dim(` Repository: ${repoInfo.github?.owner}/${repoInfo.github?.repo}`));\n \n const ciResult = await validateGitHubActionsSetup(cwd);\n \n if (ciResult.valid) {\n console.log(chalk.green(' āœ“ GitHub Actions CI configured correctly'));\n const checks = [\n ciResult.hasLintCheck && 'lint',\n ciResult.hasTypecheckCheck && 'typecheck',\n ciResult.hasFormatCheck && 'format',\n ciResult.hasBuildCheck && 'build',\n ciResult.hasTestCheck && 'test',\n ].filter(Boolean);\n console.log(chalk.dim(` Checks: ${checks.join(', ')}`));\n } else if (!ciResult.hasWorkflowFile) {\n hasErrors = true;\n console.log(chalk.red(' āœ— No CI workflow found'));\n console.log(chalk.yellow(' Run: workflow github:setup'));\n } else {\n hasWarnings = true;\n console.log(chalk.yellow(' ⚠ CI workflow may be incomplete'));\n for (const warning of ciResult.warnings) {\n console.log(chalk.yellow(` • ${warning}`));\n }\n console.log(chalk.yellow(' Run: workflow github:setup to regenerate'));\n }\n }\n\n // 5. Advisory suggestions\n console.log(chalk.bold('\\nšŸ’” Suggestions'));\n \n // Branch protection advisory (for GitHub repos)\n if (repoInfo.isGitHub && hasCIWorkflow(cwd)) {\n console.log(chalk.cyan(' → Enable branch protection on GitHub'));\n console.log(chalk.dim(' Settings → Branches → Add rule'));\n console.log(chalk.dim(' ā˜‘ Require status checks to pass before merging'));\n console.log(chalk.dim(' ā˜‘ Require branches to be up to date before merging'));\n }\n\n // Enforcement level suggestion\n if (config.enforcement !== 'strict') {\n console.log(chalk.cyan(` → Consider switching to 'strict' enforcement`));\n console.log(chalk.dim(` Current: ${config.enforcement}`));\n }\n\n // Scope count suggestion\n if (config.scopes.length < 5) {\n console.log(chalk.cyan(' → Consider adding more scopes for better organization'));\n console.log(chalk.dim(' Run: workflow config add scope <name>'));\n }\n\n // Summary\n console.log(chalk.bold('\\nšŸ“Š Summary'));\n if (hasErrors) {\n console.log(chalk.red(' āœ— Health check failed - issues found'));\n process.exit(1);\n } else if (hasWarnings) {\n console.log(chalk.yellow(' ⚠ Health check passed with warnings'));\n } else {\n console.log(chalk.green(' āœ“ All checks passed'));\n }\n console.log('');\n}\n","/**\n * Guideline validators for checking mandatory guidelines\n * and GitHub Actions CI setup\n */\n\nimport { existsSync } from 'fs';\nimport { readFile, readdir } from 'fs/promises';\nimport { join } from 'path';\nimport type { WorkflowConfig, GuidelinesConfig } from '../config/schema.js';\nimport { getMandatoryTemplateFilenames, templateMetadata } from '../templates/metadata.js';\n\nexport interface GuidelineValidationResult {\n valid: boolean;\n missingMandatory: string[];\n presentMandatory: string[];\n presentOptional: string[];\n errors: string[];\n}\n\nexport interface CIValidationResult {\n valid: boolean;\n hasWorkflowFile: boolean;\n hasLintCheck: boolean;\n hasTypecheckCheck: boolean;\n hasFormatCheck: boolean;\n hasBuildCheck: boolean;\n hasTestCheck: boolean;\n errors: string[];\n warnings: string[];\n}\n\n/**\n * Get the effective list of mandatory templates considering user overrides\n */\nexport function getEffectiveMandatoryTemplates(guidelinesConfig?: GuidelinesConfig): string[] {\n const coreMandatory = getMandatoryTemplateFilenames();\n \n if (!guidelinesConfig) {\n return coreMandatory;\n }\n\n let mandatory = [...coreMandatory];\n\n // Add additional mandatory templates from user config\n if (guidelinesConfig.additionalMandatory) {\n for (const template of guidelinesConfig.additionalMandatory) {\n if (!mandatory.includes(template) && templateMetadata[template]) {\n mandatory.push(template);\n }\n }\n }\n\n // Remove templates that user has overridden as optional\n if (guidelinesConfig.optionalOverrides) {\n mandatory = mandatory.filter(t => !guidelinesConfig.optionalOverrides!.includes(t));\n }\n\n return mandatory;\n}\n\n/**\n * Validate that all mandatory guidelines exist in the project\n */\nexport async function validateGuidelinesExist(\n projectPath: string = process.cwd(),\n config?: WorkflowConfig\n): Promise<GuidelineValidationResult> {\n const guidelinesDir = join(projectPath, 'guidelines');\n const result: GuidelineValidationResult = {\n valid: true,\n missingMandatory: [],\n presentMandatory: [],\n presentOptional: [],\n errors: [],\n };\n\n // Check if guidelines directory exists\n if (!existsSync(guidelinesDir)) {\n const mandatory = getEffectiveMandatoryTemplates(config?.guidelines);\n result.valid = false;\n result.missingMandatory = mandatory;\n result.errors.push('Guidelines directory does not exist. Run: workflow init');\n return result;\n }\n\n // Get list of files in guidelines directory\n let existingFiles: string[] = [];\n try {\n existingFiles = await readdir(guidelinesDir);\n } catch (error) {\n result.valid = false;\n result.errors.push(`Cannot read guidelines directory: ${error instanceof Error ? error.message : String(error)}`);\n return result;\n }\n\n // Get mandatory templates\n const mandatory = getEffectiveMandatoryTemplates(config?.guidelines);\n\n // Check each mandatory template\n for (const template of mandatory) {\n if (existingFiles.includes(template)) {\n result.presentMandatory.push(template);\n } else {\n result.missingMandatory.push(template);\n }\n }\n\n // Track optional templates that are present\n const allTemplateNames = Object.keys(templateMetadata);\n for (const file of existingFiles) {\n if (allTemplateNames.includes(file) && !mandatory.includes(file)) {\n result.presentOptional.push(file);\n }\n }\n\n if (result.missingMandatory.length > 0) {\n result.valid = false;\n result.errors.push(\n `Missing mandatory guidelines: ${result.missingMandatory.join(', ')}. Run: workflow init`\n );\n }\n\n return result;\n}\n\n/**\n * Validate GitHub Actions CI workflow setup\n */\nexport async function validateGitHubActionsSetup(\n projectPath: string = process.cwd()\n): Promise<CIValidationResult> {\n const workflowsDir = join(projectPath, '.github', 'workflows');\n const result: CIValidationResult = {\n valid: true,\n hasWorkflowFile: false,\n hasLintCheck: false,\n hasTypecheckCheck: false,\n hasFormatCheck: false,\n hasBuildCheck: false,\n hasTestCheck: false,\n errors: [],\n warnings: [],\n };\n\n // Check if .github/workflows directory exists\n if (!existsSync(workflowsDir)) {\n result.valid = false;\n result.errors.push('GitHub Actions workflows directory does not exist. Run: workflow github:setup');\n return result;\n }\n\n // Look for CI workflow files\n let workflowFiles: string[] = [];\n try {\n workflowFiles = await readdir(workflowsDir);\n } catch (error) {\n result.valid = false;\n result.errors.push(`Cannot read workflows directory: ${error instanceof Error ? error.message : String(error)}`);\n return result;\n }\n\n // Find CI-related workflow files\n const ciWorkflowNames = ['ci.yml', 'ci.yaml', 'main.yml', 'main.yaml', 'build.yml', 'build.yaml', 'test.yml', 'test.yaml'];\n const ciWorkflows = workflowFiles.filter(f => ciWorkflowNames.includes(f.toLowerCase()));\n\n if (ciWorkflows.length === 0) {\n result.valid = false;\n result.errors.push('No CI workflow file found. Run: workflow github:setup');\n return result;\n }\n\n result.hasWorkflowFile = true;\n\n // Parse the first CI workflow file and check for required checks\n const workflowPath = join(workflowsDir, ciWorkflows[0]);\n let workflowContent = '';\n \n try {\n workflowContent = await readFile(workflowPath, 'utf-8');\n } catch (error) {\n result.warnings.push(`Cannot read workflow file: ${error instanceof Error ? error.message : String(error)}`);\n return result;\n }\n\n // Check for each required check (simple string matching)\n const contentLower = workflowContent.toLowerCase();\n\n // Check for lint\n if (contentLower.includes('lint') || contentLower.includes('eslint')) {\n result.hasLintCheck = true;\n } else {\n result.warnings.push('CI workflow may be missing lint check');\n }\n\n // Check for typecheck\n if (contentLower.includes('typecheck') || contentLower.includes('type-check') || contentLower.includes('tsc')) {\n result.hasTypecheckCheck = true;\n } else {\n result.warnings.push('CI workflow may be missing typecheck');\n }\n\n // Check for format/prettier\n if (contentLower.includes('format') || contentLower.includes('prettier')) {\n result.hasFormatCheck = true;\n } else {\n result.warnings.push('CI workflow may be missing format check');\n }\n\n // Check for build\n if (contentLower.includes('build')) {\n result.hasBuildCheck = true;\n } else {\n result.warnings.push('CI workflow may be missing build step');\n }\n\n // Check for test\n if (contentLower.includes('test') && !contentLower.includes('typecheck')) {\n result.hasTestCheck = true;\n } else {\n result.warnings.push('CI workflow may be missing test step');\n }\n\n // Determine overall validity based on mandatory checks\n const mandatoryChecks = [result.hasLintCheck, result.hasTypecheckCheck, result.hasFormatCheck];\n if (!mandatoryChecks.every(Boolean)) {\n result.valid = false;\n result.errors.push('CI workflow is missing mandatory checks (lint, typecheck, format)');\n }\n\n return result;\n}\n\n/**\n * Quick check if guidelines are valid (for pre-commit hook)\n */\nexport async function quickGuidelinesCheck(\n projectPath: string = process.cwd(),\n config?: WorkflowConfig\n): Promise<{ valid: boolean; message: string }> {\n const result = await validateGuidelinesExist(projectPath, config);\n \n if (result.valid) {\n return { valid: true, message: 'All mandatory guidelines present' };\n }\n\n return {\n valid: false,\n message: `Missing guidelines: ${result.missingMandatory.join(', ')}`,\n };\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(chalk.green(`āœ“ Added ${Object.keys(scriptsToAdd).length} workflow scripts to package.json!`));\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 = !!(options.name && options.scopes && options.presetName);\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 ? options.name : await p.text({\n message: '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)) return 'Package name must be lowercase alphanumeric with hyphens';\n if (value.length > 32) 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 ? options.presetName : await p.text({\n message: '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(chalk.dim('\\nAdd scopes to your preset (aim for 8-15 scopes):\\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)) 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)) 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) 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 => console.log(chalk.red(` • ${error}`)));\n p.cancel('Operation cancelled');\n process.exit(1);\n }\n\n console.log(chalk.green(`\\nāœ“ ${scopes.length} scopes validated successfully\\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(join(outputDir, 'src', 'index.test.ts'), testFile, 'utf-8');\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 (!workspaceContent.includes(packagePath) && !workspaceContent.includes('packages/*')) {\n console.log(chalk.yellow('\\nāš ļø Add the following to pnpm-workspace.yaml:'));\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(chalk.green.bold('\\n✨ Custom scope package created 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: ${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(chalk.dim(` ${!options.noTest ? '5' : '4'}. Update repository URL in package.json`));\n \n const shouldPublish = isNonInteractive ? false : 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(chalk.dim(' 1. npm login (or configure .npmrc with your registry)'));\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(chalk.dim(' 4. Use in other projects: pnpm add @workflow/scopes-' + packageName + '\\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 { validateScopeDefinitions, type WorkflowConfig } 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(chalk.dim(`Found ${config.scopes.length} scopes in workflow.config.json\\n`));\n\n // Display current scopes\n console.log(chalk.bold('Current scopes:'));\n config.scopes.forEach((scope, i) => {\n console.log(chalk.dim(` ${i + 1}. ${scope.emoji || '•'} ${scope.name} - ${scope.description}`));\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 = options.name || 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)) return 'Package name must be lowercase alphanumeric with hyphens';\n if (value.length > 32) 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 => console.log(chalk.yellow(` • ${error}`)));\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 (!workspaceContent.includes(packagePath) && !workspaceContent.includes('packages/*')) {\n console.log(chalk.yellow('\\nāš ļø Add the following to pnpm-workspace.yaml:'));\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 = options.keepConfig ?? 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(configPath, JSON.stringify(updatedConfig, null, 2), 'utf-8');\n console.log(chalk.green('āœ“ Updated workflow.config.json'));\n console.log(chalk.dim(' • Cleared inline scopes'));\n console.log(chalk.dim(` • Added preset reference: scopes-${packageName}\\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(chalk.dim(` 1. Install the package: pnpm add -w @workflow/scopes-${packageName}`));\n console.log(chalk.dim(` 2. The preset is already referenced in workflow.config.json\\n`));\n }\n\n console.log(chalk.dim('šŸ’” Tip: You can now reuse this scope package across multiple projects!\\n'));\n\n } catch (error) {\n spinner.stop('āœ— Migration failed');\n console.error(chalk.red('\\nError:'), error);\n process.exit(1);\n }\n}\n","/**\n * CLI command for managing git hooks\n * Provides install, uninstall, and status subcommands\n */\n\nimport chalk from 'chalk';\nimport { loadConfig } from '../../config/index.js';\nimport {\n installHooks,\n uninstallHooks,\n getAllHooksStatus,\n hasGitRepo,\n} from '../../utils/hooks.js';\n\nexport async function hooksCommand(action: string) {\n const cwd = process.cwd();\n\n switch (action) {\n case 'install':\n await installHooksAction(cwd);\n break;\n case 'uninstall':\n await uninstallHooksAction(cwd);\n break;\n case 'status':\n await statusHooksAction(cwd);\n break;\n default:\n console.error(chalk.red(`Unknown action: ${action}`));\n console.log(chalk.dim('Available actions: install, uninstall, status'));\n process.exit(1);\n }\n}\n\nasync function installHooksAction(cwd: string) {\n console.log(chalk.bold.cyan('\\nšŸ”— Installing Workflow Agent Git Hooks\\n'));\n\n // Check for git repo\n if (!hasGitRepo(cwd)) {\n console.error(chalk.red('āœ— No git repository found'));\n console.log(chalk.yellow(' Run: git init'));\n process.exit(1);\n }\n\n // Load config for hook settings\n const config = await loadConfig();\n const hooksConfig = config?.hooks;\n\n // Install hooks\n const results = await installHooks(hooksConfig, cwd);\n\n let hasErrors = false;\n for (const result of results) {\n if (result.success) {\n if (result.wrappedExisting) {\n console.log(chalk.green(`āœ“ Installed ${result.hookType} hook (wrapped existing hook)`));\n } else {\n console.log(chalk.green(`āœ“ Installed ${result.hookType} hook`));\n }\n } else {\n console.error(chalk.red(`āœ— Failed to install ${result.hookType}: ${result.error}`));\n hasErrors = true;\n }\n }\n\n if (!hasErrors) {\n console.log(chalk.green('\\nāœ“ Git hooks installed successfully'));\n console.log(chalk.dim('\\nHooks will run automatically on commit.'));\n console.log(chalk.dim('They will be skipped in CI environments.'));\n } else {\n process.exit(1);\n }\n}\n\nasync function uninstallHooksAction(cwd: string) {\n console.log(chalk.bold.cyan('\\nšŸ”“ Uninstalling Workflow Agent Git Hooks\\n'));\n\n // Check for git repo\n if (!hasGitRepo(cwd)) {\n console.error(chalk.red('āœ— No git repository found'));\n process.exit(1);\n }\n\n // Uninstall hooks\n const results = await uninstallHooks(cwd);\n\n let hasErrors = false;\n for (const result of results) {\n if (result.success) {\n if (result.wrappedExisting) {\n console.log(chalk.green(`āœ“ Removed ${result.hookType} hook (restored original)`));\n } else {\n console.log(chalk.green(`āœ“ Removed ${result.hookType} hook`));\n }\n } else if (result.error) {\n console.error(chalk.red(`āœ— Failed to remove ${result.hookType}: ${result.error}`));\n hasErrors = true;\n }\n }\n\n if (!hasErrors) {\n console.log(chalk.green('\\nāœ“ Git hooks uninstalled successfully'));\n } else {\n process.exit(1);\n }\n}\n\nasync function statusHooksAction(cwd: string) {\n console.log(chalk.bold.cyan('\\nšŸ“Š Workflow Agent Git Hooks Status\\n'));\n\n // Check for git repo\n if (!hasGitRepo(cwd)) {\n console.error(chalk.red('āœ— No git repository found'));\n process.exit(1);\n }\n\n // Get hook status\n const statuses = await getAllHooksStatus(cwd);\n\n for (const status of statuses) {\n const icon = status.installed ? 'āœ“' : 'āœ—';\n const color = status.installed ? chalk.green : chalk.yellow;\n \n let message = `${icon} ${status.hookType}`;\n \n if (status.installed) {\n message += ' - installed';\n if (status.wrappedOriginal) {\n message += ' (wrapping original hook)';\n }\n } else if (status.hasExistingHook) {\n message += ' - existing hook (not managed by Workflow Agent)';\n } else {\n message += ' - not installed';\n }\n\n console.log(color(message));\n }\n\n const allInstalled = statuses.every(s => s.installed);\n if (!allInstalled) {\n console.log(chalk.dim('\\nTo install hooks: workflow hooks install'));\n }\n}\n","/**\n * CLI command for managing GitHub Actions CI setup\n * Provides setup and check subcommands\n */\n\nimport chalk from 'chalk';\nimport * as p from '@clack/prompts';\nimport { loadConfig } from '../../config/index.js';\nimport { getRepoInfo, getProjectInfo } from '../../utils/git-repo.js';\nimport { createCIWorkflow, hasCIWorkflow } from '../../utils/github-actions.js';\nimport { validateGitHubActionsSetup } from '../../validators/guidelines.js';\n\nexport async function githubCommand(action: string) {\n const cwd = process.cwd();\n\n switch (action) {\n case 'setup':\n await setupAction(cwd);\n break;\n case 'check':\n await checkAction(cwd);\n break;\n default:\n console.error(chalk.red(`Unknown action: ${action}`));\n console.log(chalk.dim('Available actions: setup, check'));\n process.exit(1);\n }\n}\n\nasync function setupAction(cwd: string) {\n console.log(chalk.bold.cyan('\\nšŸ”§ Setting Up GitHub Actions CI\\n'));\n\n // Check for git repo and GitHub remote\n const repoInfo = await getRepoInfo(cwd);\n\n if (!repoInfo.isGitRepo) {\n console.error(chalk.red('āœ— No git repository found'));\n console.log(chalk.yellow(' Run: git init'));\n process.exit(1);\n }\n\n if (!repoInfo.isGitHub) {\n console.log(chalk.yellow('āš ļø No GitHub remote detected'));\n const shouldContinue = await p.confirm({\n message: 'Create GitHub Actions workflow anyway?',\n initialValue: true,\n });\n\n if (p.isCancel(shouldContinue) || !shouldContinue) {\n p.cancel('Setup cancelled');\n process.exit(0);\n }\n } else {\n console.log(chalk.dim(`Repository: ${repoInfo.github?.owner}/${repoInfo.github?.repo}`));\n }\n\n // Check if CI workflow already exists\n if (hasCIWorkflow(cwd)) {\n const shouldOverwrite = await p.confirm({\n message: 'CI workflow already exists. Overwrite?',\n initialValue: false,\n });\n\n if (p.isCancel(shouldOverwrite) || !shouldOverwrite) {\n p.cancel('Setup cancelled');\n process.exit(0);\n }\n }\n\n // Get project info\n const projectInfo = await getProjectInfo(cwd);\n console.log(chalk.dim(`Package manager: ${projectInfo.packageManager}`));\n console.log(chalk.dim(`Monorepo: ${projectInfo.isMonorepo ? 'yes' : 'no'}`));\n\n // Load config for CI settings\n const config = await loadConfig();\n const ciConfig = config?.ci;\n\n // Create the workflow\n const spinner = p.spinner();\n spinner.start('Creating CI workflow...');\n\n const result = await createCIWorkflow({\n projectPath: cwd,\n packageManager: projectInfo.packageManager,\n isMonorepo: projectInfo.isMonorepo,\n ciConfig,\n defaultBranch: repoInfo.defaultBranch || 'main',\n });\n\n if (result.success) {\n spinner.stop(chalk.green('āœ“ Created CI workflow'));\n console.log(chalk.dim(` File: ${result.filePath}`));\n \n console.log(chalk.green('\\nāœ“ GitHub Actions CI setup complete'));\n console.log(chalk.dim('\\nThe workflow will run on:'));\n console.log(chalk.dim(' • Push to main/develop branches'));\n console.log(chalk.dim(' • Pull requests to main/develop branches'));\n console.log(chalk.dim('\\nChecks included:'));\n \n const checks = ciConfig?.checks || ['lint', 'typecheck', 'format', 'build', 'test'];\n for (const check of checks) {\n const hasScript = check === 'lint' ? projectInfo.hasLintScript :\n check === 'typecheck' ? projectInfo.hasTypecheckScript :\n check === 'format' ? projectInfo.hasFormatScript :\n check === 'test' ? projectInfo.hasTestScript :\n check === 'build' ? projectInfo.hasBuildScript : false;\n \n const status = hasScript ? chalk.green('āœ“') : chalk.yellow('⚠');\n const note = hasScript ? '' : ' (add script to package.json)';\n console.log(chalk.dim(` ${status} ${check}${note}`));\n }\n\n // Advisory: Branch protection\n console.log(chalk.cyan('\\nšŸ’” Recommended: Enable branch protection'));\n console.log(chalk.dim(' Go to GitHub → Settings → Branches → Add rule'));\n console.log(chalk.dim(' Enable \"Require status checks to pass before merging\"'));\n console.log(chalk.dim(' Select the \"ci\" status check'));\n } else {\n spinner.stop(chalk.red('āœ— Failed to create CI workflow'));\n console.error(chalk.red(` Error: ${result.error}`));\n process.exit(1);\n }\n}\n\nasync function checkAction(cwd: string) {\n console.log(chalk.bold.cyan('\\nšŸ” Checking GitHub Actions CI Setup\\n'));\n\n // Validate CI setup\n const result = await validateGitHubActionsSetup(cwd);\n\n if (result.hasWorkflowFile) {\n console.log(chalk.green('āœ“ CI workflow file found'));\n } else {\n console.log(chalk.red('āœ— No CI workflow file found'));\n console.log(chalk.yellow(' Run: workflow github:setup'));\n process.exit(1);\n }\n\n // Report on checks\n const checks = [\n { name: 'Lint', present: result.hasLintCheck },\n { name: 'Type check', present: result.hasTypecheckCheck },\n { name: 'Format', present: result.hasFormatCheck },\n { name: 'Build', present: result.hasBuildCheck },\n { name: 'Test', present: result.hasTestCheck },\n ];\n\n console.log(chalk.dim('\\nCI checks:'));\n for (const check of checks) {\n const icon = check.present ? chalk.green('āœ“') : chalk.yellow('⚠');\n console.log(` ${icon} ${check.name}`);\n }\n\n // Show errors and warnings\n if (result.errors.length > 0) {\n console.log(chalk.red('\\nErrors:'));\n for (const error of result.errors) {\n console.log(chalk.red(` • ${error}`));\n }\n }\n\n if (result.warnings.length > 0) {\n console.log(chalk.yellow('\\nWarnings:'));\n for (const warning of result.warnings) {\n console.log(chalk.yellow(` • ${warning}`));\n }\n }\n\n if (result.valid) {\n console.log(chalk.green('\\nāœ“ CI setup is valid'));\n } else {\n console.log(chalk.red('\\nāœ— CI setup has issues'));\n console.log(chalk.yellow(' Run: workflow github:setup'));\n process.exit(1);\n }\n}\n"],"mappings":"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","names":["existsSync","writeFile","mkdir","join","fs","existsSync","readFile","join","isMonorepo","existsSync","writeFile","mkdir","join","isMonorepo","join","existsSync","mkdir","writeFile","spinner","join","writeFile","existsSync","mkdir","chalk","execa","chalk","execa","chalk","chalk","p","chalk","existsSync","readFile","join","join","existsSync","mandatory","readFile","chalk","p","chalk","existsSync","join","p","chalk","existsSync","writeFile","mkdir","readFile","join","chalk","isMonorepo","existsSync","join","spinner","mkdir","writeFile","readFile","p","chalk","existsSync","writeFile","mkdir","readFile","join","chalk","isMonorepo","existsSync","join","spinner","mkdir","writeFile","readFile","chalk","chalk","chalk","p","chalk","spinner"]}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "workflow-agent-cli",
3
- "version": "2.0.0",
3
+ "version": "2.0.1",
4
4
  "description": "A self-evolving workflow management system for AI agent development",
5
5
  "keywords": [
6
6
  "workflow",