{"version":3,"sources":["../../src/config/loader.ts","../../src/artifacts/writer.ts","../../src/cli/commands/context.ts","../../src/cli/commands/init.ts","../../src/memlog/memlog.ts","../../src/templates/spec-template.ts","../../src/cli/commands/spec.ts","../../src/templates/story-template.ts","../../src/cli/commands/story.ts","../../src/cli/commands/review.ts","../../src/cli/commands/hook.ts","../../src/cli/commands/ci.ts","../../src/cli/commands/deps.ts","../../src/cli/commands/testgen.ts","../../src/cli/commands/env.ts","../../src/cli/commands/deploy.ts","../../src/cli/commands/perf.ts","../../src/cli/commands/help.ts","../../src/cli/commands/status.ts","../../src/cli/main.ts"],"names":["resolve","existsSync","readFileSync","writeFileSync","__filename","__dirname","dirname","mkdirSync","readdirSync","execSync","result","phase","fileURLToPath"],"mappings":"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","file":"main.mjs","sourcesContent":["import { readFileSync, existsSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { load } from \"js-yaml\";\n\nexport interface CodewrightConfig {\n  codewright_version: string;\n  project_name: string;\n  stack: string;\n  communication_language: string;\n  output_folder: string;\n  context_file: string;\n\n  // Auto-detected fields\n  framework?: string;\n  test_runner?: string;\n  lint_tools?: string[];\n  project_language?: string;\n  strict_mode?: boolean;\n}\n\nconst DEFAULTS: CodewrightConfig = {\n  codewright_version: \"0.1.0\",\n  project_name: \"\",\n  stack: \"node\",\n  communication_language: \"en\",\n  output_folder: \".codewright-output\",\n  context_file: \".codewright-output/project-context.md\",\n};\n\nfunction loadYaml(path: string): Record<string, unknown> {\n  if (!existsSync(path)) return {};\n  try {\n    const raw = readFileSync(path, \"utf-8\");\n    return (load(raw) as Record<string, unknown>) || {};\n  } catch {\n    return {};\n  }\n}\n\nfunction mergeConfigs(\n  ...sources: Record<string, unknown>[]\n): CodewrightConfig {\n  const merged: Record<string, unknown> = { ...DEFAULTS };\n  for (const src of sources) {\n    Object.assign(merged, src);\n  }\n  return merged as unknown as CodewrightConfig;\n}\n\nexport function loadConfig(cwd: string): CodewrightConfig {\n  const projectConfig = loadYaml(resolve(cwd, \".codewright\", \"config.yaml\"));\n  const userConfig = loadYaml(resolve(cwd, \".codewright\", \"config.user.yaml\"));\n  return mergeConfigs(projectConfig, userConfig);\n}\n\nexport function resolveOutputDir(cwd: string, config: CodewrightConfig): string {\n  return resolve(cwd, config.output_folder);\n}\n\nexport function resolveSpecDir(cwd: string, config: CodewrightConfig, slug: string): string {\n  return resolve(resolveOutputDir(cwd, config), \"specs\", `spec-${slug}`);\n}\n\n/** Resolve {template} variables in a string using the config */\nexport function resolveTemplates(input: string, config: CodewrightConfig): string {\n  const vars: Record<string, string> = {\n    \"project-root\": process.cwd(),\n    \"output-folder\": config.output_folder,\n    \"skills-dir\": \".agents/skills\",\n    \"config-dir\": \".codewright\",\n    \"project-name\": config.project_name || \"\",\n  };\n  return input.replace(/\\{(\\w[\\w-]*\\w|\\w)\\}/g, (_, key) => vars[key] || `{${key}}`);\n}\n","import { writeFileSync, mkdirSync, existsSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\n\nexport interface WriteOptions {\n  cwd: string;\n  outputFolder: string;\n  subpath: string;\n  filename: string;\n  content: string;\n}\n\nexport function writeArtifact(opts: WriteOptions): string {\n  const dir = resolve(opts.cwd, opts.outputFolder, opts.subpath);\n  if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n  const fp = resolve(dir, opts.filename);\n  writeFileSync(fp, opts.content, \"utf-8\");\n  return fp;\n}\n","import { readFileSync, existsSync, readdirSync, statSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { loadConfig } from \"../../config/loader.js\";\nimport { writeArtifact } from \"../../artifacts/writer.js\";\n\nconst SOURCE_EXTENSIONS = [\".ts\", \".tsx\", \".js\", \".jsx\", \".mjs\", \".cjs\", \".py\", \".go\", \".rs\", \".java\", \".rb\", \".php\"];\n\nfunction scanDirectory(dir: string, prefix: string = \"\"): string[] {\n  const results: string[] = [];\n  if (!existsSync(dir)) return results;\n\n  try {\n    const entries = readdirSync(dir, { withFileTypes: true });\n    for (const entry of entries) {\n      const rel = prefix ? `${prefix}/${entry.name}` : entry.name;\n      if (entry.name.startsWith(\".\") || entry.name === \"node_modules\" || entry.name === \"dist\" || entry.name === \".codewright-output\") continue;\n      if (entry.isDirectory()) {\n        results.push(...scanDirectory(resolve(dir, entry.name), rel));\n      } else if (SOURCE_EXTENSIONS.some((ext) => entry.name.endsWith(ext))) {\n        results.push(`  - ${rel}`);\n      }\n    }\n  } catch {\n    // skip unreadable dirs\n  }\n  return results;\n}\n\nexport function contextGenerateCommand(cwd: string) {\n  const config = loadConfig(cwd);\n\n  const sections: string[] = [];\n\n  // 1. Technology Stack\n  const pkgPath = resolve(cwd, \"package.json\");\n  if (existsSync(pkgPath)) {\n    const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n    const deps = { ...pkg.dependencies, ...pkg.devDependencies };\n    const depList = Object.entries(deps)\n      .map(([name, ver]) => `  - ${name}: ${ver}`)\n      .join(\"\\n\");\n\n    sections.push(`## Technology Stack & Versions\n- **Name:** ${pkg.name || \"unknown\"}\n- **Version:** ${pkg.version || \"0.0.0\"}\n- **Stack:** ${config.stack}\n- **Framework:** ${config.framework || \"unknown\"}\n- **Test Runner:** ${config.test_runner || \"unknown\"}\n- **Lint Tools:** ${(config.lint_tools || []).join(\", \") || \"none\"}\n- **Dependencies:\\n${depList}`);\n  }\n\n  // 2. Project Structure (all source dirs)\n  const srcDirs = [\"src\", \"app\", \"lib\", \"components\", \"pages\", \"api\", \"server\", \"client\"];\n  const structureLines: string[] = [];\n  for (const dir of srcDirs) {\n    const fullPath = resolve(cwd, dir);\n    if (existsSync(fullPath)) {\n      const files = scanDirectory(fullPath, dir);\n      structureLines.push(...files);\n    }\n  }\n\n  if (structureLines.length > 0) {\n    sections.push(`## Project Structure\\n${structureLines.join(\"\\n\")}`);\n  }\n\n  // 3. Config files detected\n  const configFiles = [\n    { path: \"tsconfig.json\", label: \"TypeScript Config\" },\n    { path: \".eslintrc\", label: \"ESLint\" },\n    { path: \".eslintrc.json\", label: \"ESLint\" },\n    { path: \".eslintrc.js\", label: \"ESLint\" },\n    { path: \".prettierrc\", label: \"Prettier\" },\n    { path: \".prettierrc.json\", label: \"Prettier\" },\n    { path: \"vitest.config.ts\", label: \"Vitest\" },\n    { path: \"vitest.config.js\", label: \"Vitest\" },\n    { path: \"jest.config.ts\", label: \"Jest\" },\n    { path: \"jest.config.js\", label: \"Jest\" },\n    { path: \"docker-compose.yml\", label: \"Docker Compose\" },\n    { path: \"docker-compose.yaml\", label: \"Docker Compose\" },\n    { path: \"Dockerfile\", label: \"Docker\" },\n    { path: \"Makefile\", label: \"Make\" },\n    { path: \".env.example\", label: \"Environment Variables\" },\n    { path: \"biome.json\", label: \"Biome\" },\n  ];\n\n  const foundConfigs = configFiles\n    .filter((cf) => existsSync(resolve(cwd, cf.path)))\n    .map((cf) => `  - ${cf.label} (${cf.path})`);\n\n  if (foundConfigs.length > 0) {\n    sections.push(`## Configuration & Tooling\\n${foundConfigs.join(\"\\n\")}`);\n  }\n\n  // 4. Environment variables (from .env.example)\n  const envPath = resolve(cwd, \".env.example\");\n  if (existsSync(envPath)) {\n    const envContent = readFileSync(envPath, \"utf-8\")\n      .split(\"\\n\")\n      .filter((l) => l.trim() && !l.startsWith(\"#\"))\n      .map((l) => `  - ${l.split(\"=\")[0].trim()}`)\n      .join(\"\\n\");\n    if (envContent) {\n      sections.push(`## Environment Variables\\n${envContent}`);\n    }\n  }\n\n  // 5. Critical Rules (from AGENTS.md)\n  const agentsPath = resolve(cwd, \".codewright\", \"AGENTS.md\");\n  if (existsSync(agentsPath)) {\n    const rules = readFileSync(agentsPath, \"utf-8\");\n    sections.push(`## Critical Rules\\n${rules}`);\n  }\n\n  // 6. Config summary\n  const lintTools = (config.lint_tools || []).join(\", \");\n  sections.push(`## Configuration\n- **Project:** ${config.project_name}\n- **Stack:** ${config.stack}\n- **Framework:** ${config.framework || \"-\"}\n- **Language:** ${config.communication_language}\n- **Test Runner:** ${config.test_runner || \"-\"}\n- **Lint Tools:** ${lintTools || \"-\"}\n- **Strict Mode:** ${config.strict_mode !== undefined ? String(config.strict_mode) : \"unknown\"}\n- **Output:** ${config.output_folder}`);\n\n  const content = `# Project Context\n\n> Auto-generated by codewright. Update with \\`codewright context generate\\`.\n\n${sections.join(\"\\n\\n\")}\\n`;\n\n  const path = writeArtifact({\n    cwd,\n    outputFolder: config.output_folder,\n    subpath: \".\",\n    filename: \"project-context.md\",\n    content,\n  });\n\n  return { path };\n}\n\nexport function contextLlmsCommand(cwd: string) {\n  const config = loadConfig(cwd);\n\n  const srcDirs = [\"src\", \"app\", \"lib\", \"components\", \"pages\", \"api\"];\n  const structure: string[] = [];\n\n  for (const dir of srcDirs) {\n    const fullPath = resolve(cwd, dir);\n    if (existsSync(fullPath)) {\n      const files = scanDirectory(fullPath, dir);\n      if (files.length > 0) structure.push(...files.slice(0, 20));\n    }\n  }\n\n  const pkgPath = resolve(cwd, \"package.json\");\n  let pkgName = config.project_name || \"unknown\";\n  let pkgVersion = \"0.0.0\";\n  if (existsSync(pkgPath)) {\n    try {\n      const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n      pkgName = pkg.name || pkgName;\n      pkgVersion = pkg.version || pkgVersion;\n    } catch {}\n  }\n\n  const content = `# ${pkgName}\n\n> AI context file for ${pkgName} v${pkgVersion}\n> Auto-generated by codewright. Update with \\`codewright context --llms\\`.\n\n## Project Overview\n\n- **Stack:** ${config.stack}\n- **Framework:** ${config.framework || \"-\"}\n- **Language:** ${config.communication_language}\n- **Test Runner:** ${config.test_runner || \"-\"}\n- **Key Directories:**${structure.length > 0 ? \"\\n\" + structure.slice(0, 10).map(f => f.replace(\"  - \", \"  - \")).join(\"\\n\") : \"\\n  - (none found)\"}\n\n## Commands\n\n- Build: \\`npm run build\\`, \\`npm run dev\\`\n- Test: \\`npm test\\`\n- Lint: \\`npm run lint\\`\n\n## Configuration\n\n- Config directory: \\`.codewright/\\`\n- Specs: \\`.codewright-output/specs/\\`\n- Agent skills: \\`.agents/skills/\\`\n\n## Key Files\n\n- \\`package.json\\` - Project manifest\n- \\`.codewright/config.yaml\\` - Codewright configuration\n- \\`.codewright/config.user.yaml\\` - User overrides (gitignored)\n- \\`.codewright/rules/DEFAULT.md\\` - Project rules\n`;\n\n  const llmsPath = resolve(cwd, \"llms.txt\");\n  writeFileSync(llmsPath, content, \"utf-8\");\n\n  return { path: llmsPath };\n}\n\n","import { existsSync, mkdirSync, writeFileSync, cpSync, readdirSync, readFileSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { loadConfig } from \"../../config/loader.js\";\nimport { contextGenerateCommand, contextLlmsCommand } from \"./context.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Skills directory inside the installed package\nconst PACKAGE_SKILLS_DIR = resolve(__dirname, \"../../skills\");\n\nconst SKILL_NAMES = [\n  \"codewright-init\",\n  \"codewright-spec\",\n  \"codewright-architecture\",\n  \"codewright-story\",\n  \"codewright-dev\",\n  \"codewright-review\",\n  \"codewright-quality\",\n  \"codewright-test\",\n  \"codewright-refactor\",\n  \"codewright-readiness\",\n  \"codewright-quick-dev\",\n  \"codewright-document\",\n  \"codewright-retrospective\",\n  \"codewright-epic\",\n  \"codewright-develop\",\n  \"codewright-rules\",\n  \"codewright-hook\",\n  \"codewright-ci\",\n  \"codewright-context\",\n  \"codewright-deps\",\n  \"codewright-testgen\",\n  \"codewright-env\",\n  \"codewright-deploy\",\n  \"codewright-perf\",\n];\n\ninterface DetectedStack {\n  framework?: string;\n  test_runner?: string;\n  lint_tools: string[];\n  project_language?: string;\n  strict_mode?: boolean;\n}\n\nfunction detectProjectStack(targetDir: string): DetectedStack {\n  const detected: DetectedStack = { lint_tools: [] };\n  const pkgPath = resolve(targetDir, \"package.json\");\n\n  if (!existsSync(pkgPath)) {\n    // Check for other languages\n    if (existsSync(resolve(targetDir, \"requirements.txt\")) || existsSync(resolve(targetDir, \"setup.py\")) || existsSync(resolve(targetDir, \"pyproject.toml\"))) {\n      detected.project_language = \"python\";\n      detected.framework = \"python\";\n    } else if (existsSync(resolve(targetDir, \"go.mod\"))) {\n      detected.project_language = \"go\";\n      detected.framework = \"go\";\n    }\n    return detected;\n  }\n\n  detected.project_language = \"javascript\";\n\n  try {\n    const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n    const deps = { ...pkg.dependencies, ...pkg.devDependencies } as Record<string, string>;\n    const allDeps = Object.keys(deps);\n\n    // Detect framework\n    if (allDeps.some((d) => d === \"next\" || d.startsWith(\"next-\"))) detected.framework = \"next\";\n    else if (allDeps.some((d) => d === \"react\" || d.startsWith(\"react-\"))) detected.framework = \"react\";\n    else if (allDeps.some((d) => d === \"vue\" || d.startsWith(\"vue-\"))) detected.framework = \"vue\";\n    else if (allDeps.some((d) => d === \"express\" || d.startsWith(\"express-\"))) detected.framework = \"express\";\n    else if (allDeps.some((d) => d === \"nest\" || d.startsWith(\"@nestjs/\"))) detected.framework = \"nestjs\";\n    else if (allDeps.some((d) => d === \"svelte\" || d.startsWith(\"@sveltejs/\"))) detected.framework = \"svelte\";\n    else if (allDeps.includes(\"typescript\")) detected.project_language = \"typescript\";\n\n    // Detect test runner\n    if (allDeps.some((d) => d.includes(\"vitest\"))) detected.test_runner = \"vitest\";\n    else if (allDeps.some((d) => d.includes(\"jest\"))) detected.test_runner = \"jest\";\n    else if (allDeps.some((d) => d.includes(\"mocha\"))) detected.test_runner = \"mocha\";\n    else if (allDeps.some((d) => d.includes(\"playwright\"))) detected.test_runner = \"playwright\";\n    else if (allDeps.some((d) => d.includes(\"cypress\"))) detected.test_runner = \"cypress\";\n\n    // Detect lint tools\n    if (allDeps.some((d) => d.includes(\"eslint\"))) detected.lint_tools.push(\"eslint\");\n    if (allDeps.some((d) => d.includes(\"prettier\"))) detected.lint_tools.push(\"prettier\");\n    if (allDeps.some((d) => d.includes(\"biome\"))) detected.lint_tools.push(\"biome\");\n    if (allDeps.some((d) => d.includes(\"stylelint\"))) detected.lint_tools.push(\"stylelint\");\n  } catch {\n    // ignore parse errors\n  }\n\n  // TypeScript strict mode\n  const tsconfigPath = resolve(targetDir, \"tsconfig.json\");\n  if (existsSync(tsconfigPath)) {\n    detected.project_language = \"typescript\";\n    try {\n      const tsconfig = JSON.parse(readFileSync(tsconfigPath, \"utf-8\"));\n      detected.strict_mode = tsconfig.compilerOptions?.strict === true;\n    } catch {\n      // ignore\n    }\n  }\n\n  return detected;\n}\n\nexport function initCommand(cwd: string, dir?: string) {\n  const targetDir = dir ? resolve(cwd, dir) : cwd;\n  const codewrightDir = resolve(targetDir, \".codewright\");\n  const outputDir = resolve(targetDir, \".codewright-output\");\n  const agentsSkillsDir = resolve(targetDir, \".agents\", \"skills\");\n  const customDir = resolve(codewrightDir, \"custom\");\n  const rulesDir = resolve(codewrightDir, \"rules\");\n\n  // Create directories\n  for (const d of [codewrightDir, outputDir, agentsSkillsDir, customDir, rulesDir]) {\n    if (!existsSync(d)) mkdirSync(d, { recursive: true });\n  }\n\n  // Auto-detect project stack\n  const detected = detectProjectStack(targetDir);\n\n  // Create .gitkeep in custom/\n  const gitkeepPath = resolve(customDir, \".gitkeep\");\n  if (!existsSync(gitkeepPath)) writeFileSync(gitkeepPath, \"\", \"utf-8\");\n\n  // Create .gitkeep in rules/\n  const rulesGitkeep = resolve(rulesDir, \".gitkeep\");\n  if (!existsSync(rulesGitkeep)) writeFileSync(rulesGitkeep, \"\", \"utf-8\");\n\n  // Create default rules file\n  const rulesPath = resolve(rulesDir, \"DEFAULT.md\");\n  if (!existsSync(rulesPath)) {\n    const rules = `# Project Rules\n\nAdd your project-specific rules here. These rules are loaded by codewright skills.\n\n## Code Style\n- Use consistent naming conventions\n- Follow existing patterns in the codebase\n- Write self-documenting code\n\n## Testing\n- Write tests for new features\n- Keep tests focused and isolated\n- Test edge cases\n\n## Documentation\n- Update docs when changing public APIs\n- Use JSDoc/TSDoc for functions\n- Keep README current\n`;\n    writeFileSync(rulesPath, rules, \"utf-8\");\n  }\n\n  // Create config.yaml with detected values\n  const configPath = resolve(codewrightDir, \"config.yaml\");\n  if (!existsSync(configPath)) {\n    const config = loadConfig(cwd);\n    const framework = detected.framework ? `\\nframework: \"${detected.framework}\"` : \"\";\n    const testRunner = detected.test_runner ? `\\ntest_runner: \"${detected.test_runner}\"` : \"\";\n    const lintTools = detected.lint_tools.length > 0\n      ? `\\nlint_tools: [${detected.lint_tools.map((t) => `\"${t}\"`).join(\", \")}]`\n      : \"\";\n    const lang = detected.project_language ? `\\nproject_language: \"${detected.project_language}\"` : \"\";\n    const strict = detected.strict_mode !== undefined ? `\\nstrict_mode: ${detected.strict_mode}` : \"\";\n\n    const yaml = `codewright_version: \"${config.codewright_version}\"\nproject_name: \"${resolve(targetDir).split(\"/\").pop() || \"my-project\"}\"\nstack: \"${detected.framework || \"node\"}\"\ncommunication_language: \"en\"\noutput_folder: \".codewright-output\"\ncontext_file: \".codewright-output/project-context.md\"${framework}${testRunner}${lintTools}${lang}${strict}\n`;\n    writeFileSync(configPath, yaml, \"utf-8\");\n  }\n\n  // Create config.user.yaml (overrides, gitignored)\n  const userConfigPath = resolve(codewrightDir, \"config.user.yaml\");\n  if (!existsSync(userConfigPath)) {\n    const userYaml = `# User config overrides — not committed to git\n# Add this line to .gitignore: .codewright/config.user.yaml\n# Settings here override .codewright/config.yaml\n#\n# Example:\n# communication_language: \"en\"\n# project_name: \"my-project-override\"\n`;\n    writeFileSync(userConfigPath, userYaml, \"utf-8\");\n  }\n\n  // Create AGENTS.md\n  const agentsPath = resolve(codewrightDir, \"AGENTS.md\");\n  if (!existsSync(agentsPath)) {\n    const agents = `# Codewright Agent Instructions\n\nThis project uses Codewright for assisted development.\n\n## Flow\n\n1. Idea → run \\`codewright:spec\\`\n2. Spec ready → run \\`codewright:architecture\\`\n3. Architecture ready → run \\`codewright:story\\`\n4. Before implementing → run \\`codewright:readiness\\`\n5. During implementation → run \\`codewright:quality\\`, \\`codewright:test\\`, \\`codewright:refactor\\`\n6. For bug fixes → run \\`codewright:quick-dev\\`\n7. Story ready → run \\`codewright:dev\\`\n8. Implemented → run \\`codewright:review\\`\n9. After sprint → run \\`codewright:retrospective\\`\n10. Documentation needed → run \\`codewright:document\\`\n\n## Rules\n\n- Every implementation starts with an approved spec\n- Every story has an I/O Matrix with edge cases\n- Tasks are only complete with passing tests\n- Never implement outside the task scope\n`;\n    writeFileSync(agentsPath, agents, \"utf-8\");\n  }\n\n  // Install skills into .agents/skills/\n  installSkills(agentsSkillsDir);\n\n  // Auto-generate project context\n  const contextResult = contextGenerateCommand(cwd);\n  const llmsResult = contextLlmsCommand(cwd);\n\n  return {\n    codewrightDir,\n    outputDir,\n    agentsSkillsDir,\n    contextFile: contextResult.path,\n    llmsFile: llmsResult.path,\n    detected,\n  };\n}\n\nfunction installSkills(agentsSkillsDir: string) {\n  for (const skillName of SKILL_NAMES) {\n    const srcSkillDir = resolve(PACKAGE_SKILLS_DIR, skillName);\n    const srcSkillFile = resolve(srcSkillDir, \"SKILL.md\");\n    const destSkillDir = resolve(agentsSkillsDir, skillName);\n\n    if (!existsSync(srcSkillFile)) continue;\n    if (!existsSync(destSkillDir)) mkdirSync(destSkillDir, { recursive: true });\n\n    const entries = readdirSync(srcSkillDir);\n    for (const entry of entries) {\n      const src = resolve(srcSkillDir, entry);\n      const dest = resolve(destSkillDir, entry);\n      cpSync(src, dest, { recursive: true, force: true });\n    }\n  }\n}\n","import { readFileSync, writeFileSync, existsSync, mkdirSync } from \"node:fs\";\nimport { dirname, resolve } from \"node:path\";\n\nexport interface MemlogEntry {\n  type:\n    | \"decision\"\n    | \"constraint\"\n    | \"capability\"\n    | \"assumption\"\n    | \"question\"\n    | \"direction\"\n    | \"note\"\n    | \"event\";\n  text: string;\n  by?: string;\n}\n\nexport interface MemlogData {\n  frontmatter: Record<string, string>;\n  entries: MemlogEntry[];\n}\n\nfunction frontmatterToString(fm: Record<string, string>): string {\n  const lines = [\"---\"];\n  for (const [k, v] of Object.entries(fm)) {\n    if (v) lines.push(`${k}: ${v}`);\n  }\n  lines.push(\"---\", \"\");\n  return lines.join(\"\\n\");\n}\n\nfunction frontmatterFromString(raw: string): { frontmatter: Record<string, string>; body: string } {\n  const frontmatter: Record<string, string> = {};\n  if (!raw.startsWith(\"---\")) return { frontmatter, body: raw };\n\n  const endIndex = raw.indexOf(\"---\", 3);\n  if (endIndex === -1) return { frontmatter, body: raw };\n\n  const fmBlock = raw.slice(3, endIndex).trim();\n  const body = raw.slice(endIndex + 3).trim();\n\n  for (const line of fmBlock.split(\"\\n\")) {\n    const colonIdx = line.indexOf(\":\");\n    if (colonIdx > 0) {\n      const key = line.slice(0, colonIdx).trim();\n      const value = line.slice(colonIdx + 1).trim();\n      frontmatter[key] = value;\n    }\n  }\n\n  return { frontmatter, body };\n}\n\nfunction entryToLine(entry: MemlogEntry): string {\n  const by = entry.by ? ` @${entry.by}` : \"\";\n  return `- (${entry.type}) ${entry.text}${by}`;\n}\n\nfunction lineToEntry(line: string): MemlogEntry | null {\n  const match = line.match(/^\\s*-\\s*\\((\\w+)\\)\\s+(.+)/);\n  if (!match) return null;\n  const type = match[1] as MemlogEntry[\"type\"];\n  const rest = match[2];\n  const byMatch = rest.match(/(.+?)\\s+@(\\S+)$/);\n  if (byMatch) {\n    return { type, text: byMatch[1].trim(), by: byMatch[2] };\n  }\n  return { type, text: rest.trim() };\n}\n\nfunction getPath(ws: string): string {\n  return resolve(ws, \".memlog.md\");\n}\n\nfunction ensureDir(fp: string) {\n  const dir = dirname(fp);\n  if (!existsSync(dir)) mkdirSync(dir, { recursive: true });\n}\n\nfunction init(workspace: string, fields: Record<string, string>) {\n  const fp = getPath(workspace);\n  ensureDir(fp);\n  const fm = frontmatterToString({ ...fields, updated: new Date().toISOString() });\n  // Use atomic write\n  const tmp = fp + \".tmp\";\n  writeFileSync(tmp, fm, \"utf-8\");\n  writeFileSync(fp, fm, \"utf-8\");\n}\n\nfunction append(workspace: string, entry: MemlogEntry) {\n  const fp = getPath(workspace);\n  ensureDir(fp);\n  const existing = existsSync(fp) ? readFileSync(fp, \"utf-8\") : \"\";\n\n  let frontmatter: Record<string, string> = {};\n  let body = \"\";\n\n  if (existing.startsWith(\"---\")) {\n    const parsed = frontmatterFromString(existing);\n    frontmatter = parsed.frontmatter;\n    body = parsed.body;\n  } else {\n    body = existing.trim();\n  }\n\n  frontmatter.updated = new Date().toISOString();\n  const newLine = entryToLine(entry);\n  const content = frontmatterToString(frontmatter) + (body ? body + \"\\n\" : \"\") + newLine + \"\\n\";\n\n  const tmp = fp + \".tmp\";\n  writeFileSync(tmp, content, \"utf-8\");\n  writeFileSync(fp, content, \"utf-8\");\n}\n\nfunction set(workspace: string, key: string, value: string) {\n  const fp = getPath(workspace);\n  ensureDir(fp);\n  const existing = existsSync(fp) ? readFileSync(fp, \"utf-8\") : \"\";\n  const { frontmatter, body } = frontmatterFromString(existing);\n  frontmatter[key] = value;\n  frontmatter.updated = new Date().toISOString();\n  const content = frontmatterToString(frontmatter) + (body || \"\");\n\n  const tmp = fp + \".tmp\";\n  writeFileSync(tmp, content, \"utf-8\");\n  writeFileSync(fp, content, \"utf-8\");\n}\n\nfunction read(workspace: string): MemlogData {\n  const fp = getPath(workspace);\n  if (!existsSync(fp)) return { frontmatter: {}, entries: [] };\n  const raw = readFileSync(fp, \"utf-8\");\n  const { frontmatter, body } = frontmatterFromString(raw);\n  const entries: MemlogEntry[] = [];\n  for (const line of body.split(\"\\n\")) {\n    const entry = lineToEntry(line);\n    if (entry) entries.push(entry);\n  }\n  return { frontmatter, entries };\n}\n\nexport function memlog() {\n  return { init, append, set, read };\n}\n","export interface SpecTemplateOptions {\n  slug: string;\n  topic: string;\n  goal: string;\n  capabilities: Array<{ id: string; text: string }>;\n  constraints: string[];\n  decisions: string[];\n}\n\nexport function specTemplate(opts: SpecTemplateOptions): string {\n  const caps = opts.capabilities.length > 0\n    ? opts.capabilities.map((c) => `- **${c.id}**\\n  - **intent:** ${c.text}\\n  - **success:** {Testable or demonstrable criterion}`).join(\"\\n\")\n    : `- **CAP-1**\n  - **intent:** {What the system allows — WHAT, not HOW}\n  - **success:** {Testable or demonstrable criterion}`;\n\n  const constraints = opts.constraints.length > 0\n    ? opts.constraints.map((c) => `- ${c}`).join(\"\\n\")\n    : \"{Non-negotiable rules}\";\n\n  const decisions = opts.decisions.length > 0\n    ? opts.decisions.map((d) => `- ${d}`).join(\"\\n\")\n    : \"\";\n\n  return `---\nid: SPEC-${opts.slug}\ncompanions: []\nsources: []\n---\n\n# ${opts.topic}\n\n## Why\n${opts.goal || \"{Problem being solved. Business context.}\"}\n\n## Capabilities\n${caps}\n\n## Constraints\n${constraints}\n\n## Non-goals\n{What is NOT in scope}\n\n## Success signal\n{Concrete moment that proves it's done}\n${decisions ? `\\n## Architecture Decisions\\n${decisions}` : \"\"}\n`;\n}\n","import { resolve } from \"node:path\";\nimport { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { execSync } from \"node:child_process\";\nimport { loadConfig, resolveSpecDir } from \"../../config/loader.js\";\nimport { memlog } from \"../../memlog/memlog.js\";\nimport { writeArtifact } from \"../../artifacts/writer.js\";\nimport { specTemplate } from \"../../templates/spec-template.js\";\n\nexport interface SpecCreateOptions {\n  cwd: string;\n  slug: string;\n  input?: string;\n}\n\nexport function specCreateCommand(opts: SpecCreateOptions) {\n  const config = loadConfig(opts.cwd);\n  const specDir = resolveSpecDir(opts.cwd, config, opts.slug);\n\n  const ml = memlog();\n  ml.init(specDir, { topic: opts.slug, goal: \"\" });\n  ml.append(specDir, { type: \"note\", text: `Spec ${opts.slug} created` });\n\n  if (opts.input) {\n    const inputPath = resolve(opts.cwd, opts.input);\n    if (existsSync(inputPath)) {\n      const inputContent = readFileSync(inputPath, \"utf-8\");\n      ml.append(specDir, { type: \"note\", text: `Input loaded from ${opts.input}` });\n      ml.append(specDir, { type: \"note\", text: `---\\n${inputContent}\\n---` });\n    }\n  }\n\n  deriveSpec(specDir, opts.slug, config);\n  return { specDir };\n}\n\nexport function specUpdateCommand(cwd: string, slug: string) {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, slug);\n  deriveSpec(specDir, slug, config);\n  return { specDir };\n}\n\nfunction deriveSpec(specDir: string, slug: string, _config: { output_folder: string }) {\n  const ml = memlog();\n  const data = ml.read(specDir);\n\n  const topic = data.frontmatter.topic || slug;\n  const goal = data.frontmatter.goal || \"\";\n\n  const caps = data.entries\n    .filter((e) => e.type === \"capability\")\n    .map((e, i) => {\n      const match = e.text.match(/^CAP-\\d+:\\s*(.+)/);\n      return { id: `CAP-${i + 1}`, text: match ? match[1] : e.text };\n    });\n\n  const constraints = data.entries\n    .filter((e) => e.type === \"constraint\")\n    .map((e) => e.text);\n\n  const decisions = data.entries\n    .filter((e) => e.type === \"decision\")\n    .map((e) => e.text);\n\n  const content = specTemplate({ slug, topic, goal, capabilities: caps, constraints, decisions });\n\n  writeFileSync(resolve(specDir, \"SPEC.md\"), content, \"utf-8\");\n}\n\nexport function specHistoryCommand(cwd: string, slug: string): string {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, slug);\n\n  if (!existsSync(specDir)) {\n    return `Error: Spec '${slug}' not found`;\n  }\n\n  try {\n    const log = execSync(`git log --oneline --format=\"%h %ad %s\" --date=short -20 -- .`, {\n      cwd: specDir,\n      encoding: \"utf-8\",\n    }).trim();\n\n    if (!log) {\n      return `No version history for spec '${slug}'`;\n    }\n\n    return `Version history for '${slug}':\\n${log}`;\n  } catch {\n    return `Error: Could not read git history for spec '${slug}'`;\n  }\n}\n\nexport function specDiffCommand(cwd: string, slug: string, from?: string): string {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, slug);\n\n  if (!existsSync(specDir)) {\n    return `Error: Spec '${slug}' not found`;\n  }\n\n  try {\n    const fromRef = from || \"HEAD~1\";\n    const diff = execSync(`git diff ${fromRef}..HEAD -- .`, {\n      cwd: specDir,\n      encoding: \"utf-8\",\n    }).trim();\n\n    if (!diff) {\n      return `No changes between ${fromRef} and HEAD for spec '${slug}'`;\n    }\n\n    return `Diff for spec '${slug}' (${fromRef}..HEAD):\\n${diff}`;\n  } catch {\n    return `Error: Could not generate diff for spec '${slug}'`;\n  }\n}\n\nexport function specVersionCommand(cwd: string, slug: string): string {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, slug);\n\n  if (!existsSync(specDir)) {\n    return `Error: Spec '${slug}' not found`;\n  }\n\n  try {\n    // Stage all changes in spec directory\n    execSync(\"git add .\", { cwd: specDir });\n\n    // Check if there are changes to commit\n    const status = execSync(\"git status --porcelain\", {\n      cwd: specDir,\n      encoding: \"utf-8\",\n    }).trim();\n\n    if (!status) {\n      return `No changes to version for spec '${slug}'`;\n    }\n\n    // Create version commit\n    const timestamp = new Date().toISOString().split(\"T\")[0];\n    execSync(`git commit -m \"version: ${slug} ${timestamp}\"`, { cwd: specDir });\n\n    // Get the commit hash\n    const hash = execSync(\"git rev-parse --short HEAD\", {\n      cwd: specDir,\n      encoding: \"utf-8\",\n    }).trim();\n\n    return `✓ Version created for spec '${slug}' (commit ${hash})`;\n  } catch {\n    return `Error: Could not create version for spec '${slug}'`;\n  }\n}\n\nexport function specSyncCommand(cwd: string, slug: string): string {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, slug);\n\n  if (!existsSync(specDir)) {\n    return `Error: Spec '${slug}' not found`;\n  }\n\n  try {\n    // Read SPEC.md to extract requirements\n    const specPath = resolve(specDir, \"SPEC.md\");\n    if (!existsSync(specPath)) {\n      return `Error: SPEC.md not found for spec '${slug}'`;\n    }\n\n    const specContent = readFileSync(specPath, \"utf-8\");\n\n    // Extract capabilities from SPEC.md\n    const capRegex = /\\*\\*CAP-\\d+\\*\\*\\s*\\n\\s*-\\s*\\*\\*intent:\\*\\*\\s*(.+)/g;\n    const caps: string[] = [];\n    let match;\n    while ((match = capRegex.exec(specContent)) !== null) {\n      caps.push(match[1].trim());\n    }\n\n    // Scan source files for implementation\n    const srcDir = resolve(cwd, \"src\");\n    const sourceFiles: string[] = [];\n\n    if (existsSync(srcDir)) {\n      const files = execSync(\"find . -name '*.ts' -o -name '*.tsx' -o -name '*.js' -o -name '*.jsx' -not -path '*/node_modules/*' -not -path '*/dist/*' | head -30\", {\n        cwd,\n        encoding: \"utf-8\",\n      }).trim().split(\"\\n\").filter(f => f);\n\n      for (const file of files) {\n        try {\n          const content = readFileSync(resolve(cwd, file), \"utf-8\");\n          sourceFiles.push(`${file}: ${content.length} chars`);\n        } catch {\n          // skip\n        }\n      }\n    }\n\n    // Build sync report\n    let report = `Spec Sync Report: '${slug}'\\n\\n`;\n    report += `Requirements found in SPEC.md: ${caps.length}\\n`;\n    for (const cap of caps) {\n      report += `  - ${cap}\\n`;\n    }\n\n    report += `\\nSource files scanned: ${sourceFiles.length}\\n`;\n    for (const file of sourceFiles.slice(0, 10)) {\n      report += `  - ${file}\\n`;\n    }\n\n    report += `\\nNote: This is a basic sync check. For full validation, use codewright:readiness skill.`;\n\n    return report;\n  } catch {\n    return `Error: Could not sync spec '${slug}'`;\n  }\n}\n","export interface StoryTemplateOptions {\n  story_id: string;\n  story_title: string;\n  phase: string;\n  spec_name: string;\n}\n\nexport function storyTemplate(opts: StoryTemplateOptions): string {\n  return `---\nid: ${opts.story_id}\nstatus: pending # pending | in-progress | review | done\nbaseline_commit:\nphase: ${opts.phase}\nspec: ${opts.spec_name}\n---\n\n# ${opts.story_title}\n\n## Intent\nProblem: {what problem it solves}\nApproach: {how it will solve}\n\n## Boundaries & Constraints\n- Always: {always do}\n- Ask First: {ask before}\n- Never: {never do}\n\n## I/O & Edge-Case Matrix\n| # | Scenario | Input | Expected Output |\n|---|----------|-------|-----------------|\n| 1 | Success  |       |                 |\n| 2 |          |       |                 |\n\n## Code Map\n- {file} (CREATE | MODIFY | DELETE)\n\n## Tasks\n- [ ] Task 1\n  - [ ] Subtask 1.1\n  - [ ] Subtask 1.2\n- [ ] Task 2\n\n## Change Log\n`;\n}\n","import { resolve } from \"node:path\";\nimport { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { loadConfig, resolveSpecDir } from \"../../config/loader.js\";\nimport { writeArtifact } from \"../../artifacts/writer.js\";\nimport { storyTemplate } from \"../../templates/story-template.js\";\n\nexport interface StoryCreateOptions {\n  cwd: string;\n  spec: string;\n  id: string;\n  title: string;\n  phase?: string;\n}\n\nexport function storyCreateCommand(opts: StoryCreateOptions) {\n  const config = loadConfig(opts.cwd);\n\n  const storyId = opts.id;\n  const filename = `${storyId}-${opts.title.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\")}.md`;\n\n  const content = storyTemplate({\n    story_id: storyId,\n    story_title: opts.title,\n    phase: opts.phase || \"1\",\n    spec_name: opts.spec,\n  });\n\n  const path = writeArtifact({\n    cwd: opts.cwd,\n    outputFolder: config.output_folder,\n    subpath: `specs/spec-${opts.spec}/stories`,\n    filename,\n    content,\n  });\n\n  return { path, filename };\n}\n\nexport function storyListCommand(cwd: string, spec: string) {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, spec);\n  const storiesDir = resolve(specDir, \"stories\");\n\n  if (!existsSync(storiesDir)) return [];\n\n  const stories: Array<{ id: string; title: string; status: string; file: string }> = [];\n  for (const file of readdirSync(storiesDir).filter((f: string) => f.endsWith(\".md\"))) {\n    const content = readFileSync(resolve(storiesDir, file), \"utf-8\");\n    const idMatch = content.match(/^id:\\s*(.+)/m);\n    const statusMatch = content.match(/^status:\\s*(\\S+)/m);\n    const titleMatch = content.match(/^#\\s+(.+)/m);\n    stories.push({\n      id: idMatch?.[1] || \"unknown\",\n      title: titleMatch?.[1] || file,\n      status: statusMatch?.[1]?.trim() || \"unknown\",\n      file,\n    });\n  }\n\n  return stories;\n}\n","import { execSync } from \"node:child_process\";\nimport { readFileSync, existsSync, readdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { loadConfig, resolveSpecDir } from \"../../config/loader.js\";\nimport { writeArtifact } from \"../../artifacts/writer.js\";\n\nexport function devStartCommand(cwd: string, spec: string, storyId: string) {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, spec);\n  const storiesDir = resolve(specDir, \"stories\");\n\n  if (!existsSync(storiesDir)) {\n    throw new Error(`No stories directory found for spec '${spec}'`);\n  }\n\n  const files = readdirSync(storiesDir).filter((f: string) => f.startsWith(storyId));\n  if (files.length === 0) {\n    throw new Error(`Story '${storyId}' not found in spec '${spec}'`);\n  }\n\n  const storyFile = files[0];\n  const storyPath = resolve(storiesDir, storyFile);\n  let content = readFileSync(storyPath, \"utf-8\");\n\n  content = content.replace(/^status:\\s*pending/m, \"status: in-progress\");\n\n  let baseline = \"unknown\";\n  try {\n    baseline = execSync(\"git rev-parse HEAD\", { cwd, encoding: \"utf-8\" }).trim();\n    content = content.replace(/^baseline_commit:\\s*$/m, `baseline_commit: ${baseline}`);\n  } catch {\n    content = content.replace(/^baseline_commit:\\s*$/m, `baseline_commit: none`);\n  }\n\n  writeArtifact({\n    cwd,\n    outputFolder: config.output_folder,\n    subpath: `specs/spec-${spec}/stories`,\n    filename: storyFile,\n    content,\n  });\n\n  return {\n    story: `${storyId} (${storyFile})`,\n    baseline_commit: baseline,\n    instructions: `Implement story ${storyId} following TDD (RED → GREEN → REFACTOR).\nKeep scope limited to the Code Map and I/O Matrix.\nUpon completion, mark tasks as done and change status to \"review\".`,\n  };\n}\n\nexport function reviewPrepareCommand(cwd: string, spec: string, storyId: string) {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, spec);\n  const storiesDir = resolve(specDir, \"stories\");\n\n  const files = readdirSync(storiesDir).filter((f: string) => f.startsWith(storyId));\n  if (files.length === 0) throw new Error(`Story '${storyId}' not found`);\n\n  const storyPath = resolve(storiesDir, files[0]);\n  const content = readFileSync(storyPath, \"utf-8\");\n\n  const baselineMatch = content.match(/^baseline_commit:\\s*(.+)/m);\n  const baseline = baselineMatch?.[1]?.trim() || \"none\";\n\n  let diff = \"No baseline commit available.\";\n  if (baseline !== \"none\") {\n    try {\n      diff = execSync(`git diff ${baseline}..HEAD`, { cwd, encoding: \"utf-8\" });\n    } catch {\n      diff = \"Could not generate diff from baseline.\";\n    }\n  }\n\n  const reviewContent = `# Review: ${storyId}\n\n## Diff\n\\`\\`\\`\n${diff.slice(0, 5000)}\n\\`\\`\\`\n\n## Checklist\n- [ ] Functionality implemented per I/O Matrix\n- [ ] Edge cases covered\n- [ ] Tests passing\n- [ ] Code follows project patterns\n- [ ] No regressions\n- [ ] Documentation updated (if applicable)\n\n## Notes\n{reviewer notes}\n`;\n\n  const reviewFile = writeArtifact({\n    cwd,\n    outputFolder: config.output_folder,\n    subpath: `specs/spec-${spec}/reviews`,\n    filename: `review-${storyId}.md`,\n    content: reviewContent,\n  });\n\n  return { reviewFile, baseline, diff: diff.slice(0, 2000) };\n}\n","import { existsSync, mkdirSync, writeFileSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { loadConfig } from \"../../config/loader.js\";\n\nconst PRE_COMMIT_HOOK = `#!/bin/sh\n# Codewright pre-commit hook\n# Installed by \\`codewright hook install\\`\n\necho \"🔍 Codewright: Running pre-commit checks...\"\n\n# Check for TODO/FIXME in staged files\nSTAGED_FILES=$(git diff --cached --name-only --diff-filter=ACM)\nHAS_ISSUES=0\n\nfor FILE in $STAGED_FILES; do\n  if [ -f \"$FILE\" ]; then\n    # Check for TODO/FIXME without ticket number\n    grep -n \"TODO:\\|FIXME:\" \"$FILE\" 2>/dev/null | grep -v \"TODO:[A-Z]\\+-\" > /dev/null 2>&1\n    if [ $? -eq 0 ]; then\n      echo \"  ⚠️  $FILE has TODO/FIXME without ticket number\"\n      HAS_ISSUES=1\n    fi\n\n    # Check for debugger statements\n    grep -n \"debugger\\|console\\.log\" \"$FILE\" 2>/dev/null | head -5 > /dev/null 2>&1\n    if [ $? -eq 0 ]; then\n      echo \"  ⚠️  $FILE has debugger/console.log statements\"\n      HAS_ISSUES=1\n    fi\n  fi\ndone\n\nif [ $HAS_ISSUES -eq 1 ]; then\n  echo \"⚠️  Codewright: Found issues (not blocking)\"\nfi\n\necho \"✓ Codewright: Pre-commit checks complete\"\nexit 0\n`;\n\nconst COMMIT_MSG_HOOK = `#!/bin/sh\n# Codewright commit-msg hook\n# Installed by \\`codewright hook install\\`\n\nCOMMIT_MSG_FILE=$1\nCOMMIT_MSG=$(cat \"$COMMIT_MSG_FILE\")\n\n# Check conventional commit format\necho \"🔍 Codewright: Checking commit message...\"\n\nif ! echo \"$COMMIT_MSG\" | grep -qE \"^(feat|fix|docs|style|refactor|test|chore|ci|perf|build|revert)(\\(.+\\))?!?: .{1,}$\"; then\n  echo \"\"\n  echo \"⚠️  Invalid commit message format.\"\n  echo \"\"\n  echo \"Expected: type(scope): description\"\n  echo \"\"\n  echo \"Valid types: feat, fix, docs, style, refactor, test, chore, ci, perf, build, revert\"\n  echo \"\"\n  echo \"Example: feat(auth): add login feature\"\n  echo \"\"\nfi\n\necho \"✓ Codewright: Commit message check complete\"\nexit 0\n`;\n\nexport function hookInstallCommand(cwd: string) {\n  const config = loadConfig(cwd);\n  const codewrightHookDir = resolve(cwd, \".codewright\", \"hooks\");\n  const gitHookDir = resolve(cwd, \".git\", \"hooks\");\n\n  if (!existsSync(gitHookDir)) {\n    return \"Error: No .git/hooks directory found. Is this a git repository?\";\n  }\n\n  // Create .codewright/hooks directory\n  if (!existsSync(codewrightHookDir)) mkdirSync(codewrightHookDir, { recursive: true });\n\n  const hooks = [\n    { name: \"pre-commit\", content: PRE_COMMIT_HOOK },\n    { name: \"commit-msg\", content: COMMIT_MSG_HOOK },\n  ];\n\n  let installed = 0;\n  for (const hook of hooks) {\n    const hookPath = resolve(codewrightHookDir, hook.name);\n    const gitHookPath = resolve(gitHookDir, hook.name);\n\n    // Write hook to .codewright/hooks\n    writeFileSync(hookPath, hook.content, { mode: 0o755 });\n\n    // Symlink or copy to .git/hooks\n    if (!existsSync(gitHookPath)) {\n      writeFileSync(gitHookPath, hook.content, { mode: 0o755 });\n      installed++;\n    } else {\n      // Backup existing hook and create a wrapper\n      const existingContent = readFileSync(gitHookPath, \"utf-8\");\n      if (!existingContent.includes(\"Codewright\")) {\n        const backupPath = resolve(gitHookDir, `${hook.name}.backup`);\n        writeFileSync(backupPath, existingContent, { mode: 0o755 });\n        // Write wrapper that runs both\n        const wrapper = `#!/bin/sh\n# Codewright wrapper - runs existing hook then codewright\nif [ -f \"${hookPath}\" ]; then\n  sh \"${hookPath}\"\nfi\n`;\n        writeFileSync(gitHookPath, wrapper, { mode: 0o755 });\n        installed++;\n      }\n    }\n  }\n\n  return `✓ Installed ${installed} git hooks:\n  - pre-commit (checks TODO/FIXME, debugger statements)\n  - commit-msg (validates conventional commit format)\n\nHooks stored in .codewright/hooks/`;\n}\n\nexport function hookListCommand(cwd: string) {\n  const gitHookDir = resolve(cwd, \".git\", \"hooks\");\n  const codewrightHookDir = resolve(cwd, \".codewright\", \"hooks\");\n\n  if (!existsSync(gitHookDir)) {\n    return \"No .git/hooks directory found.\";\n  }\n\n  const hooks = [\"pre-commit\", \"commit-msg\", \"pre-push\", \"post-commit\"];\n  const result: string[] = [\"Git hooks:\"];\n\n  for (const hook of hooks) {\n    const gitHook = resolve(gitHookDir, hook);\n    const cwHook = resolve(codewrightHookDir, hook);\n    if (existsSync(gitHook)) {\n      const type = existsSync(cwHook) ? \" (codewright)\" : \"\";\n      result.push(`  - ${hook}${type}`);\n    } else {\n      result.push(`  - ${hook} (not installed)`);\n    }\n  }\n\n  return result.join(\"\\n\");\n}\n","import { existsSync, mkdirSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { loadConfig } from \"../../config/loader.js\";\n\nfunction generateNodeWorkflow(config: Record<string, unknown>): string {\n  const framework = (config.framework as string) || \"node\";\n  const testRunner = (config.test_runner as string) || \"vitest\";\n\n  return `name: CI\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 20\n          cache: \"npm\"\n      - run: npm ci\n      - run: npm run build --if-present\n      - run: npm test\n      - run: npm run lint --if-present\n`;\n}\n\nfunction generatePythonWorkflow(): string {\n  return `name: CI\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-python@v5\n        with:\n          python-version: \"3.12\"\n          cache: \"pip\"\n      - run: pip install -r requirements.txt\n      - run: pip install pytest\n      - run: pytest\n`;\n}\n\nfunction generateGoWorkflow(): string {\n  return `name: CI\n\non:\n  push:\n    branches: [main]\n  pull_request:\n    branches: [main]\n\njobs:\n  test:\n    runs-on: ubuntu-latest\n\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-go@v5\n        with:\n          go-version: \"1.22\"\n      - run: go mod download\n      - run: go test ./...\n      - run: go vet ./...\n`;\n}\n\nexport function ciGenerateCommand(cwd: string) {\n  const config = loadConfig(cwd);\n  const workflowDir = resolve(cwd, \".github\", \"workflows\");\n\n  if (!existsSync(workflowDir)) mkdirSync(workflowDir, { recursive: true });\n\n  const stack = config.stack || \"node\";\n  let workflow: string;\n\n  if (stack === \"python\" || config.project_language === \"python\") {\n    workflow = generatePythonWorkflow();\n  } else if (stack === \"go\" || config.project_language === \"go\") {\n    workflow = generateGoWorkflow();\n  } else {\n    workflow = generateNodeWorkflow(config as Record<string, unknown>);\n  }\n\n  const workflowPath = resolve(workflowDir, \"ci.yml\");\n  if (existsSync(workflowPath)) {\n    return `CI workflow already exists at ${workflowPath}. Delete it first to regenerate.`;\n  }\n\n  writeFileSync(workflowPath, workflow, \"utf-8\");\n\n  return `✓ CI workflow generated at .github/workflows/ci.yml\n\nWorkflow includes:\n- Test runner: ${config.test_runner || \"auto-detected\"}\n- Build step\n- Lint step (if configured)\n\nStack: ${stack}`;\n}\n","import { existsSync, readFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { execSync } from \"node:child_process\";\n\ninterface DepCheck {\n  name: string;\n  current: string;\n  latest?: string;\n  outdated: boolean;\n}\n\nexport function depsCheckCommand(cwd: string): string {\n  const pkgPath = resolve(cwd, \"package.json\");\n\n  if (!existsSync(pkgPath)) {\n    return \"No package.json found. Only npm projects are supported.\";\n  }\n\n  const pkg = JSON.parse(readFileSync(pkgPath, \"utf-8\"));\n  const deps = { ...pkg.dependencies, ...pkg.devDependencies } as Record<string, string>;\n  const names = Object.keys(deps);\n  const total = names.length;\n\n  // Try npm outdated for latest version info\n  let outdatedData: string[] = [];\n  try {\n    const result = execSync(\"npm outdated --json 2>/dev/null\", {\n      cwd,\n      encoding: \"utf-8\",\n    });\n    if (result.trim()) {\n      const parsed = JSON.parse(result);\n      for (const [name, info] of Object.entries(parsed)) {\n        const i = info as Record<string, string>;\n        outdatedData.push(`  - ${name}: ${i.current} → ${i.latest}`);\n      }\n    }\n  } catch {\n    // npm outdated returns non-zero when packages are outdated\n    try {\n      const result = execSync(\"npm outdated --json 2>&1\", {\n        cwd,\n        encoding: \"utf-8\",\n      });\n      if (result.trim()) {\n        const parsed = JSON.parse(result);\n        for (const [name, info] of Object.entries(parsed)) {\n          const i = info as Record<string, string>;\n          outdatedData.push(`  - ${name}: ${i.current} → ${i.latest}`);\n        }\n      }\n    } catch {\n      // ignore\n    }\n  }\n\n  let report = `Dependency Check\\n`;\n  report += `Total dependencies: ${total}\\n`;\n\n  if (outdatedData.length > 0) {\n    report += `\\nOutdated packages (${outdatedData.length}):\\n`;\n    report += outdatedData.slice(0, 20).join(\"\\n\");\n    if (outdatedData.length > 20) {\n      report += `\\n  ... and ${outdatedData.length - 20} more`;\n    }\n  } else {\n    report += `\\nAll packages are up to date! ✓`;\n  }\n\n  // Group by type\n  const prodDeps = Object.keys(pkg.dependencies || {}).length;\n  const devDeps = Object.keys(pkg.devDependencies || {}).length;\n  report += `\\n\\nBreakdown:\\n  - Production: ${prodDeps}\\n  - Dev: ${devDeps}`;\n\n  if (outdatedData.length > 0) {\n    report += `\\n\\nRun \\`npm outdated\\` for full details or \\`npm update\\` to update.`;\n  }\n\n  return report;\n}\n","import { existsSync, readFileSync, readdirSync, writeFileSync, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { loadConfig, resolveSpecDir } from \"../../config/loader.js\";\n\ninterface IoScenario {\n  number: number;\n  scenario: string;\n  input: string;\n  expected: string;\n}\n\nfunction parseIoMatrix(content: string): IoScenario[] {\n  const scenarios: IoScenario[] = [];\n  const lines = content.split(\"\\n\");\n  let inMatrix = false;\n\n  for (const line of lines) {\n    if (line.includes(\"I/O & Edge-Case Matrix\") || line.includes(\"I/O & Edge Case Matrix\")) {\n      inMatrix = true;\n      continue;\n    }\n    if (inMatrix && line.startsWith(\"## \")) {\n      inMatrix = false;\n      continue;\n    }\n    if (inMatrix && line.startsWith(\"|\") && !line.startsWith(\"|---\") && !line.startsWith(\"| #\")) {\n      const parts = line.split(\"|\").slice(1, -1).map((p) => p.trim());\n      if (parts.length >= 2) {\n        const num = parseInt(parts[0], 10);\n        if (!isNaN(num)) {\n          scenarios.push({\n            number: num,\n            scenario: parts[1] || \"\",\n            input: parts[2] || \"\",\n            expected: parts[3] || \"\",\n          });\n        }\n      }\n    }\n  }\n  return scenarios;\n}\n\nfunction generateTestCode(specName: string, storyId: string, storyTitle: string, scenarios: IoScenario[]): string {\n  const testName = storyTitle.toLowerCase().replace(/[^a-z0-9]+/g, \"-\").replace(/^-|-$/g, \"\");\n  const desc = storyTitle.replace(/\"/g, '\\\\\"');\n\n  let code = `import { describe, it, expect } from \"vitest\";\\n\\n`;\n  code += `describe(\"${desc}\", () => {\\n`;\n\n  for (const s of scenarios) {\n    const testDesc = s.scenario.replace(/\"/g, '\\\\\"');\n    code += `  it(\"should handle scenario ${s.number}: ${testDesc}\", () => {\\n`;\n    code += `    // Input: ${s.input || \"not specified\"}\\n`;\n    code += `    // Expected: ${s.expected || \"not specified\"}\\n`;\n    code += `    // TODO: Implement test\\n`;\n    code += `    expect(true).toBe(true);\\n`;\n    code += `  });\\n\\n`;\n  }\n\n  code += `});\\n`;\n  return code;\n}\n\nexport function testGenFromSpecCommand(cwd: string, spec: string, storyId?: string) {\n  const config = loadConfig(cwd);\n  const specDir = resolveSpecDir(cwd, config, spec);\n  const storiesDir = resolve(specDir, \"stories\");\n\n  if (!existsSync(storiesDir)) {\n    return `Error: No stories found for spec '${spec}'.`;\n  }\n\n  const allFiles = readdirSync(storiesDir).filter((f) => f.endsWith(\".md\"));\n  const filesToProcess = storyId\n    ? allFiles.filter((f) => f.startsWith(storyId))\n    : allFiles;\n\n  if (filesToProcess.length === 0) {\n    return `Error: No stories found matching the criteria.`;\n  }\n\n  const results: string[] = [];\n\n  for (const file of filesToProcess) {\n    const content = readFileSync(resolve(storiesDir, file), \"utf-8\");\n    const idMatch = content.match(/^id:\\s*(.+)/m);\n    const titleMatch = content.match(/^#\\s+(.+)/m);\n    const storyIdMatch = idMatch?.[1]?.trim() || \"unknown\";\n    const storyTitle = titleMatch?.[1]?.trim() || file;\n\n    const scenarios = parseIoMatrix(content);\n\n    if (scenarios.length === 0) {\n      results.push(`  - ${storyIdMatch}: No I/O Matrix scenarios found`);\n      continue;\n    }\n\n    const testCode = generateTestCode(spec, storyIdMatch, storyTitle, scenarios);\n    const testFilename = `${storyIdMatch.toLowerCase()}.test.ts`;\n    const testPath = resolve(cwd, \"src\", \"__tests__\", testFilename);\n    const testDir = resolve(cwd, \"src\", \"__tests__\");\n\n    if (!existsSync(testDir)) {\n      mkdirSync(testDir, { recursive: true });\n    }\n\n    writeFileSync(testPath, testCode, \"utf-8\");\n\n    results.push(`  - ${storyIdMatch}: ${scenarios.length} scenarios → ${testPath}`);\n  }\n\n  let report = `Test Generation from Spec '${spec}':\\n`;\n  report += results.join(\"\\n\");\n\n  if (results.length > 0) {\n    report += `\\n\\nGenerated ${results.length} test file(s) from story I/O Matrix scenarios.`;\n  }\n\n  return report;\n}\n","import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\nexport function envSetupCommand(cwd: string): string {\n  const envExamplePath = resolve(cwd, \".env.example\");\n  const envPath = resolve(cwd, \".env\");\n\n  if (!existsSync(envExamplePath)) {\n    return \"No .env.example found. Create one first with the required variables.\";\n  }\n\n  if (existsSync(envPath)) {\n    // Compare and show missing vars\n    const exampleVars = parseEnvFile(envExamplePath);\n    const currentVars = parseEnvFile(envPath);\n    const missing = exampleVars.filter((v) => !currentVars.includes(v));\n\n    if (missing.length === 0) {\n      return \".env is complete. All variables from .env.example are set.\";\n    }\n\n    return `.env exists but missing ${missing.length} variable(s):\\n${missing.join(\"\\n\")}`;\n  }\n\n  // Create .env from .env.example\n  const content = readFileSync(envExamplePath, \"utf-8\");\n  writeFileSync(envPath, content, \"utf-8\");\n\n  return `.env created from .env.example with ${content.split(\"\\n\").filter((l) => l.trim() && !l.startsWith(\"#\")).length} variables.`;\n}\n\nexport function envListCommand(cwd: string): string {\n  const envPath = resolve(cwd, \".env\");\n\n  if (!existsSync(envPath)) {\n    return \"No .env file found.\";\n  }\n\n  const content = readFileSync(envPath, \"utf-8\");\n  const lines = content.split(\"\\n\").filter((l) => l.trim() && !l.startsWith(\"#\"));\n  const vars = lines.map((l) => {\n    const eqIdx = l.indexOf(\"=\");\n    if (eqIdx === -1) return `  - ${l}`;\n    const key = l.slice(0, eqIdx);\n    const val = l.slice(eqIdx + 1).replace(/[\"']/g, \"\");\n    const display = val.length > 30 ? `${val.slice(0, 27)}...` : val;\n    return `  - ${key} = ${display}`;\n  });\n\n  return `Environment variables (${vars.length}):\\n${vars.join(\"\\n\")}`;\n}\n\nfunction parseEnvFile(path: string): string[] {\n  const content = readFileSync(path, \"utf-8\");\n  return content\n    .split(\"\\n\")\n    .filter((l) => l.trim() && !l.startsWith(\"#\"))\n    .map((l) => {\n      const eqIdx = l.indexOf(\"=\");\n      return eqIdx > 0 ? l.slice(0, eqIdx).trim() : \"\";\n    })\n    .filter(Boolean);\n}\n","import { existsSync, readFileSync, writeFileSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { loadConfig } from \"../../config/loader.js\";\n\nfunction generateNodeDockerfile(framework: string): string {\n  return `# Build stage\nFROM node:20-alpine AS builder\n\nWORKDIR /app\nCOPY package*.json ./\nRUN npm ci\nCOPY . .\nRUN npm run build\n\n# Production stage\nFROM node:20-alpine AS runner\n\nWORKDIR /app\nENV NODE_ENV=production\n\nCOPY package*.json ./\nRUN npm ci --only=production\nCOPY --from=builder /app/dist ./dist\n\n${framework === \"next\" ? `COPY --from=builder /app/.next ./.next\nCOPY --from=builder /app/public ./public` : \"\"}\n\nEXPOSE ${framework === \"next\" ? \"3000\" : \"3000\"}\n\nCMD ${framework === \"next\" ? '[\"npm\", \"start\"]' : framework === \"express\" ? '[\"node\", \"dist/index.js\"]' : '[\"node\", \"dist/index.mjs\"]'}\n`;\n}\n\nfunction generatePythonDockerfile(): string {\n  return `FROM python:3.12-alpine\n\nWORKDIR /app\n\nCOPY requirements.txt .\nRUN pip install --no-cache-dir -r requirements.txt\n\nCOPY . .\n\nEXPOSE 8000\n\nCMD [\"python\", \"main.py\"]\n`;\n}\n\nfunction generateGoDockerfile(): string {\n  return `FROM golang:1.22-alpine AS builder\n\nWORKDIR /app\nCOPY go.mod go.sum ./\nRUN go mod download\nCOPY . .\nRUN CGO_ENABLED=0 GOOS=linux go build -o /app/server .\n\nFROM scratch\nCOPY --from=builder /app/server /server\nEXPOSE 8080\nCMD [\"/server\"]\n`;\n}\n\nexport function deployDockerfileCommand(cwd: string): string {\n  const config = loadConfig(cwd);\n  const dockerfilePath = resolve(cwd, \"Dockerfile\");\n\n  if (existsSync(dockerfilePath)) {\n    return `Dockerfile already exists. Delete it first to regenerate.`;\n  }\n\n  const stack = config.stack || \"node\";\n  const framework = config.framework || \"\";\n\n  let dockerfile: string;\n\n  if (stack === \"python\" || config.project_language === \"python\") {\n    dockerfile = generatePythonDockerfile();\n  } else if (stack === \"go\" || config.project_language === \"go\") {\n    dockerfile = generateGoDockerfile();\n  } else {\n    dockerfile = generateNodeDockerfile(framework);\n  }\n\n  writeFileSync(dockerfilePath, dockerfile, \"utf-8\");\n\n  return `✓ Dockerfile generated.\n\nMulti-stage build for ${stack}${framework ? ` (${framework})` : \"\"}.\n\nIncludes:\n- Build stage with dependencies\n- Production stage (minimal image)\n- Exposed port configured\n\nNext: Add a .dockerignore file to exclude node_modules.`;\n}\n\nexport function deployDockerignoreCommand(cwd: string): string {\n  const dockerignorePath = resolve(cwd, \".dockerignore\");\n\n  if (existsSync(dockerignorePath)) {\n    return `.dockerignore already exists.`;\n  }\n\n  const content = `node_modules\ndist\n.codewright\n.codewright-output\n.git\n.gitignore\n.env\n.env.example\n*.md\n`;\n\n  writeFileSync(dockerignorePath, content, \"utf-8\");\n  return `✓ .dockerignore generated.`;\n}\n","import { existsSync, writeFileSync, readFileSync, mkdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { execSync } from \"node:child_process\";\nimport { loadConfig } from \"../../config/loader.js\";\n\nconst K6_SCRIPT = `import http from 'k6/http';\nimport { sleep, check } from 'k6';\n\nexport const options = {\n  stages: [\n    { duration: '30s', target: 10 },  // ramp up\n    { duration: '1m', target: 10 },   // steady\n    { duration: '30s', target: 0 },   // ramp down\n  ],\n  thresholds: {\n    http_req_duration: ['p(95)<500'],  // 95% requests under 500ms\n    http_req_failed: ['rate<0.01'],     // less than 1% errors\n  },\n};\n\nconst BASE_URL = __ENV.BASE_URL || 'http://localhost:3000';\n\nexport default function () {\n  const res = http.get(BASE_URL);\n  check(res, {\n    'status is 200': (r) => r.status === 200,\n    'response time < 500ms': (r) => r.timings.duration < 500,\n  });\n  sleep(1);\n}\n`;\n\nconst ARTILLERY_CONFIG = `config:\n  target: \"http://localhost:3000\"\n  phases:\n    - duration: 60\n      arrivalRate: 5\n      rampTo: 20\n      name: \"Warm up\"\n    - duration: 120\n      arrivalRate: 20\n      name: \"Sustained load\"\n  plugins:\n    metrics-by-endpoint: {}\n\nscenarios:\n  - name: \"GET /api\"\n    flow:\n      - get:\n          url: \"/api\"\n      - think: 1\n`;\n\nfunction detectUrl(): string {\n  try {\n    const pkg = JSON.parse(readFileSync(\"package.json\", \"utf-8\"));\n    const scripts = pkg.scripts || {};\n    if (scripts.start) return \"http://localhost:3000\";\n    if (scripts.dev) return \"http://localhost:3000\";\n  } catch {}\n  return \"http://localhost:3000\";\n}\n\nexport function perfSetupCommand(cwd: string, tool: string): string {\n  const perfDir = resolve(cwd, \"perf-tests\");\n  if (!existsSync(perfDir)) {\n    mkdirSync(perfDir, { recursive: true });\n  }\n\n  const url = detectUrl();\n\n  if (tool === \"k6\" || !tool) {\n    const scriptPath = resolve(perfDir, \"load-test.js\");\n    if (!existsSync(scriptPath)) {\n      writeFileSync(scriptPath, K6_SCRIPT, \"utf-8\");\n    }\n\n    return `✓ k6 test created at perf-tests/load-test.js\n\nTo run:\n  npm install -g k6  # or: brew install k6\n  k6 run perf-tests/load-test.js -e BASE_URL=${url}\n\nTest scenario:\n  - Ramp up: 30s to 10 users\n  - Steady: 1m at 10 users\n  - Ramp down: 30s to 0 users\n  - Threshold: 95% requests under 500ms\n  - Max error rate: 1%`;\n  }\n\n  if (tool === \"artillery\") {\n    const configPath = resolve(perfDir, \"artillery.yml\");\n    if (!existsSync(configPath)) {\n      writeFileSync(configPath, ARTILLERY_CONFIG, \"utf-8\");\n    }\n\n    return `✓ Artillery config created at perf-tests/artillery.yml\n\nTo run:\n  npm install -g artillery\n  artillery run perf-tests/artillery.yml\n\nTest scenario:\n  - Warm up: 60s, 5→20 req/s\n  - Sustained: 120s at 20 req/s\n  - Target: ${url}`;\n  }\n\n  return `Unsupported tool: ${tool}. Use \"k6\" or \"artillery\".`;\n}\n\nexport function perfRunCommand(cwd: string, tool: string): string {\n  const perfDir = resolve(cwd, \"perf-tests\");\n\n  if (tool === \"k6\") {\n    const scriptPath = resolve(perfDir, \"load-test.js\");\n    if (!existsSync(scriptPath)) {\n      return \"No k6 script found. Run 'codewright perf setup k6' first.\";\n    }\n\n    try {\n      execSync(\"which k6\", { encoding: \"utf-8\" });\n    } catch {\n      return \"k6 not installed. Install it: brew install k6\";\n    }\n\n    try {\n      const output = execSync(`k6 run ${scriptPath} --quiet 2>&1`, {\n        cwd,\n        encoding: \"utf-8\",\n        timeout: 120000,\n      }).trim();\n      return output;\n    } catch (e) {\n      const err = e as Error;\n      return `k6 run failed: ${err.message}`;\n    }\n  }\n\n  if (tool === \"artillery\") {\n    const configPath = resolve(perfDir, \"artillery.yml\");\n    if (!existsSync(configPath)) {\n      return \"No Artillery config found. Run 'codewright perf setup artillery' first.\";\n    }\n\n    try {\n      const output = execSync(`npx artillery run ${configPath} 2>&1`, {\n        cwd: perfDir,\n        encoding: \"utf-8\",\n        timeout: 180000,\n      }).trim();\n      return output;\n    } catch (e) {\n      const err = e as Error;\n      return `Artillery run failed: ${err.message}`;\n    }\n  }\n\n  return `Unsupported tool: ${tool}`;\n}\n","import { existsSync, readFileSync, readdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\n\ninterface SkillInfo {\n  name: string;\n  description: string;\n  phase: string;\n  commands: string[];\n  depends_on: string[];\n}\n\nconst PHASE_DISPLAY: Record<string, string> = {\n  ideation: \"💡 Ideation\",\n  planning: \"📋 Planning\",\n  preparation: \"🔧 Preparation\",\n  implementation: \"⚙️ Implementation\",\n  review: \"👀 Review\",\n  operations: \"🔁 Operations\",\n  retrospective: \"📊 Retrospective\",\n};\n\nconst PHASE_ORDER = [\"ideation\", \"planning\", \"preparation\", \"implementation\", \"review\", \"operations\", \"retrospective\"];\n\nfunction parseSkillFrontmatter(filePath: string, skillName: string): SkillInfo {\n  try {\n    const content = readFileSync(filePath, \"utf-8\");\n    const nameMatch = content.match(/^name:\\s*(.+)/m);\n    const descMatch = content.match(/^description:\\s*(.+)/m);\n    const phaseMatch = content.match(/^phase:\\s*(.+)/m);\n\n    return {\n      name: nameMatch?.[1]?.trim() || skillName,\n      description: descMatch?.[1]?.trim()?.replace(/^\"/, \"\").replace(/\"$/, \"\") || \"\",\n      phase: phaseMatch?.[1]?.trim() || \"operations\",\n      commands: [],\n      depends_on: [],\n    };\n  } catch {\n    return { name: skillName, description: \"\", phase: \"operations\", commands: [], depends_on: [] };\n  }\n}\n\nfunction getAllSkills(cwd: string): SkillInfo[] {\n  const agentsSkills = resolve(cwd, \".agents\", \"skills\");\n  const packageSkills = resolve(cwd, \"skills\");\n\n  const skillsDir = existsSync(agentsSkills) ? agentsSkills : packageSkills;\n\n  if (!existsSync(skillsDir)) return [];\n\n  const entries = readdirSync(skillsDir, { withFileTypes: true });\n  const skills: SkillInfo[] = [];\n\n  for (const entry of entries) {\n    if (!entry.isDirectory()) continue;\n    const skillFile = resolve(skillsDir, entry.name, \"SKILL.md\");\n    if (!existsSync(skillFile)) continue;\n\n    skills.push(parseSkillFrontmatter(skillFile, entry.name));\n  }\n\n  return skills;\n}\n\nexport function helpCommand(cwd: string, skillName?: string, phase?: string, next?: string): string {\n  const skills = getAllSkills(cwd);\n\n  if (skills.length === 0) {\n    return \"No skills found. Run `codewright init` first.\";\n  }\n\n  // Help for a specific skill\n  if (skillName) {\n    const skill = skills.find((s) => s.name === skillName || s.name.replace(\"codewright:\", \"\") === skillName);\n    if (!skill) return `Skill '${skillName}' not found. Use 'codewright help' to list all skills.`;\n\n    let help = `## ${skill.name}\\n`;\n    help += `${skill.description}\\n\\n`;\n    help += `**Phase:** ${PHASE_DISPLAY[skill.phase] || skill.phase}\\n`;\n\n    // Show next steps\n    const phaseIdx = PHASE_ORDER.indexOf(skill.phase);\n    if (phaseIdx >= 0 && phaseIdx < PHASE_ORDER.length - 1) {\n      const nextPhase = PHASE_ORDER[phaseIdx + 1];\n      const nextSkills = skills.filter((s) => s.phase === nextPhase);\n      if (nextSkills.length > 0) {\n        help += `\\n**Next steps (${PHASE_DISPLAY[nextPhase]}):**\\n`;\n        for (const ns of nextSkills.slice(0, 3)) {\n          help += `  - ${ns.name}: ${ns.description}\\n`;\n        }\n      }\n    }\n\n    return help;\n  }\n\n  // Next steps for a skill\n  if (next) {\n    const skill = skills.find((s) => s.name.includes(next));\n    if (!skill) return `Skill '${next}' not found.`;\n\n    const phaseIdx = PHASE_ORDER.indexOf(skill.phase);\n    if (phaseIdx < 0 || phaseIdx >= PHASE_ORDER.length - 1) {\n      return `No next steps for '${skill.name}' (last phase).`;\n    }\n\n    const nextPhase = PHASE_ORDER[phaseIdx + 1];\n    const nextSkills = skills.filter((s) => s.phase === nextPhase);\n\n    let result = `After ${skill.name}, you can run:\\n`;\n    for (const ns of nextSkills.slice(0, 5)) {\n      result += `  - ${ns.name}: ${ns.description}\\n`;\n    }\n    return result;\n  }\n\n  // List by phase\n  let result = \"## Codewright Skills\\n\\n\";\n\n  for (const phase of PHASE_ORDER) {\n    const phaseSkills = skills.filter((s) => s.phase === phase);\n\n    if (phase && phaseSkills.length === 0) continue;\n\n    const phaseLabel = PHASE_DISPLAY[phase] || phase;\n\n    if (!phase) {\n      // Skills without phase\n      for (const s of phaseSkills) {\n        result += `  - ${s.name}: ${s.description}\\n`;\n      }\n      continue;\n    }\n\n    result += `### ${phaseLabel}\\n`;\n\n    const filtered = phase && phaseSkills.length > 0\n      ? phaseSkills\n      : skills.filter((s) => s.phase === phase);\n\n    for (const s of filtered) {\n      result += `  - ${s.name}: ${s.description}\\n`;\n    }\n    result += \"\\n\";\n  }\n\n  // Usage tips\n  result += `**Usage:**\\n`;\n  result += `  codewright help <skill>      # Details and next steps\\n`;\n  result += `  codewright help --next <skill> # What to do after this skill\\n`;\n\n  return result;\n}\n","import { existsSync, readdirSync } from \"node:fs\";\nimport { resolve } from \"node:path\";\nimport { execSync } from \"node:child_process\";\nimport { loadConfig } from \"../../config/loader.js\";\n\nexport function statusCommand(cwd: string): string {\n  const config = loadConfig(cwd);\n  const lines: string[] = [];\n  lines.push(\"## Codewright Status\");\n  lines.push(\"\");\n\n  // 1. Skills\n  const skillsDir = resolve(cwd, \".agents\", \"skills\");\n  if (existsSync(skillsDir)) {\n    const skills = readdirSync(skillsDir).filter((f) => {\n      try {\n        return readdirSync(resolve(skillsDir, f)).includes(\"SKILL.md\");\n      } catch {\n        return false;\n      }\n    });\n    lines.push(\"**Skills:** \" + skills.length + \" installed\");\n    lines.push(\"\");\n  } else {\n    lines.push(\"**Skills:** not installed (run codewright init)\");\n    lines.push(\"\");\n  }\n\n  // 2. Specs\n  const specsDir = resolve(cwd, config.output_folder, \"specs\");\n  if (existsSync(specsDir)) {\n    const specs = readdirSync(specsDir).filter((f) => f.startsWith(\"spec-\"));\n    if (specs.length > 0) {\n      lines.push(\"**Specs:** \" + specs.length);\n      for (const spec of specs) {\n        const name = spec.replace(\"spec-\", \"\");\n        const storiesDir = resolve(specsDir, spec, \"stories\");\n        const stories = existsSync(storiesDir) ? readdirSync(storiesDir).length : 0;\n        lines.push(\"  - \" + name + \" (\" + stories + \" stories)\");\n      }\n      lines.push(\"\");\n    }\n  }\n\n  // 3. Hooks\n  const hookDir = resolve(cwd, \".git\", \"hooks\");\n  if (existsSync(hookDir)) {\n    const hooks = [\"pre-commit\", \"commit-msg\", \"pre-push\"];\n    const installed = hooks.filter((h) => existsSync(resolve(hookDir, h)));\n    if (installed.length > 0) {\n      lines.push(\"**Hooks:** \" + installed.join(\", \"));\n      lines.push(\"\");\n    }\n  }\n\n  // 4. Env\n  const envExists = existsSync(resolve(cwd, \".env\"));\n  const envExampleExists = existsSync(resolve(cwd, \".env.example\"));\n  lines.push(\"**Env:** \" + (envExists ? \".env yes\" : \".env no\") + \", \" + (envExampleExists ? \".env.example yes\" : \".env.example no\"));\n  lines.push(\"\");\n\n  // 5. Context files\n  const ctxPath = resolve(cwd, config.output_folder, \"project-context.md\");\n  const llmsPath = resolve(cwd, \"llms.txt\");\n  lines.push(\"**Context:** \" + (existsSync(ctxPath) ? \"project-context.md yes\" : \"project-context.md no\") + \", \" + (existsSync(llmsPath) ? \"llms.txt yes\" : \"llms.txt no\"));\n  lines.push(\"\");\n\n  // 6. Git\n  try {\n    const branch = execSync(\"git rev-parse --abbrev-ref HEAD\", { cwd, encoding: \"utf-8\" }).trim();\n    const gitStatus = execSync(\"git status --porcelain\", { cwd, encoding: \"utf-8\" }).trim();\n    const changes = gitStatus ? gitStatus.split(\"\\n\").length : 0;\n    lines.push(\"**Git:** branch \" + branch + \", \" + changes + \" uncommitted changes\");\n  } catch {\n    lines.push(\"**Git:** not a git repository\");\n  }\n\n  return lines.join(\"\\n\");\n}\n","#!/usr/bin/env node\n\nimport { Command } from \"commander\";\nimport { readFileSync } from \"node:fs\";\nimport { resolve, dirname } from \"node:path\";\nimport { fileURLToPath } from \"node:url\";\nimport { initCommand } from \"./commands/init.js\";\nimport { specCreateCommand, specUpdateCommand, specHistoryCommand, specDiffCommand, specVersionCommand, specSyncCommand } from \"./commands/spec.js\";\nimport { storyCreateCommand, storyListCommand } from \"./commands/story.js\";\nimport { contextGenerateCommand, contextLlmsCommand } from \"./commands/context.js\";\nimport { devStartCommand, reviewPrepareCommand } from \"./commands/review.js\";\nimport { hookInstallCommand, hookListCommand } from \"./commands/hook.js\";\nimport { ciGenerateCommand } from \"./commands/ci.js\";\nimport { depsCheckCommand } from \"./commands/deps.js\";\nimport { testGenFromSpecCommand } from \"./commands/testgen.js\";\nimport { envSetupCommand, envListCommand } from \"./commands/env.js\";\nimport { deployDockerfileCommand, deployDockerignoreCommand } from \"./commands/deploy.js\";\nimport { perfSetupCommand, perfRunCommand } from \"./commands/perf.js\";\nimport { helpCommand } from \"./commands/help.js\";\nimport { statusCommand } from \"./commands/status.js\";\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\nfunction getVersion(): string {\n  try {\n    const pkg = JSON.parse(readFileSync(resolve(__dirname, \"../../package.json\"), \"utf-8\"));\n    return pkg.version || \"0.1.0\";\n  } catch {\n    return \"0.1.0\";\n  }\n}\n\nconst program = new Command();\n\nprogram\n  .name(\"codewright\")\n  .description(\"AI-assisted specification and implementation system\")\n  .version(getVersion());\n\n// ─── init ───────────────────────────────────────────────\nprogram\n  .command(\"init\")\n  .description(\"Initialize codewright in the project\")\n  .option(\"--dir <path>\", \"Target directory\", \".\")\n  .action((opts) => {\n    const result = initCommand(process.cwd(), opts.dir);\n    console.log(`✓ Codewright initialized at ${result.codewrightDir}`);\n    console.log(`  Output: ${result.outputDir}`);\n    console.log(`  Skills: .agents/skills/`);\n    const d = result.detected;\n    if (d.framework) console.log(`  Framework: ${d.framework}`);\n    if (d.test_runner) console.log(`  Test runner: ${d.test_runner}`);\n    if (d.project_language) console.log(`  Language: ${d.project_language}`);\n  });\n\n// ─── spec ───────────────────────────────────────────────\nprogram\n  .command(\"spec\")\n  .description(\"Create or update a specification\")\n  .argument(\"[slug]\", \"Spec slug (create if new, update if exists)\")\n  .option(\"--update\", \"Re-derive SPEC.md from memlog\")\n  .option(\"--input <path>\", \"Seed spec from a file\")\n  .option(\"--history\", \"View spec version history\")\n  .option(\"--diff [from] [to]\", \"Diff between spec versions\")\n  .option(\"--snapshot\", \"Create a new version snapshot\")\n  .option(\"--sync\", \"Sync spec with code (compare requirements vs implementation)\")\n  .action((slug: string, opts) => {\n    if (!slug) {\n      console.log(\"Usage: codewright spec <slug>\");\n      console.log(\"       codewright spec <slug> --update\");\n      console.log(\"       codewright spec <slug> --history\");\n      console.log(\"       codewright spec <slug> --diff [from] [to]\");\n      console.log(\"       codewright spec <slug> --snapshot\");\n      console.log(\"       codewright spec <slug> --sync\");\n      return;\n    }\n    if (opts.update) {\n      const result = specUpdateCommand(process.cwd(), slug);\n      console.log(`✓ Spec updated at ${result.specDir}`);\n    } else if (opts.history) {\n      const result = specHistoryCommand(process.cwd(), slug);\n      console.log(result);\n    } else if (opts.diff) {\n      const from = typeof opts.diff === 'string' ? opts.diff : undefined;\n      const result = specDiffCommand(process.cwd(), slug, from);\n      console.log(result);\n    } else if (opts.snapshot) {\n      const result = specVersionCommand(process.cwd(), slug);\n      console.log(result);\n    } else if (opts.sync) {\n      const result = specSyncCommand(process.cwd(), slug);\n      console.log(result);\n    } else {\n      const result = specCreateCommand({ cwd: process.cwd(), slug, input: opts.input });\n      console.log(`✓ Spec created at ${result.specDir}`);\n    }\n  });\n\n// ─── story ──────────────────────────────────────────────\nprogram\n  .command(\"story\")\n  .description(\"Create or list stories\")\n  .argument(\"[spec]\", \"Spec slug (if only spec given → list stories)\")\n  .argument(\"[id]\", \"Story ID (e.g. S001)\")\n  .argument(\"[title]\", \"Story title\")\n  .option(\"--phase <n>\", \"Phase number\", \"1\")\n  .action((spec: string, id: string, title: string, opts) => {\n    if (!spec) {\n      console.log(\"Usage: codewright story <spec>              (list stories)\");\n      console.log(\"       codewright story <spec> <id> <title> (create story)\");\n      return;\n    }\n    if (id && title) {\n      // Create story\n      const result = storyCreateCommand({\n        cwd: process.cwd(), spec, id, title,\n        phase: opts.phase,\n      });\n      console.log(`✓ Story created at ${result.path}`);\n    } else if (spec) {\n      // List stories\n      const stories = storyListCommand(process.cwd(), spec);\n      if (stories.length === 0) { console.log(\"No stories found.\"); return; }\n      console.log(\"Stories:\");\n      for (const s of stories) console.log(`  ${s.id} | ${s.status} | ${s.title}`);\n    }\n  });\n\n// ─── dev ────────────────────────────────────────────────\nprogram\n  .command(\"dev\")\n  .description(\"Start implementing a story\")\n  .argument(\"<spec>\", \"Spec slug\")\n  .argument(\"<id>\", \"Story ID\")\n  .action((spec: string, id: string) => {\n    const result = devStartCommand(process.cwd(), spec, id);\n    console.log(`✓ Story ${result.story} marked as in-progress`);\n    console.log(`  Baseline commit: ${result.baseline_commit}`);\n    console.log(`\\n${result.instructions}`);\n  });\n\n// ─── review ─────────────────────────────────────────────\nprogram\n  .command(\"review\")\n  .description(\"Prepare review for a story\")\n  .argument(\"<spec>\", \"Spec slug\")\n  .argument(\"<id>\", \"Story ID\")\n  .action((spec: string, id: string) => {\n    const result = reviewPrepareCommand(process.cwd(), spec, id);\n    console.log(`✓ Review prepared at ${result.reviewFile}`);\n    console.log(`  Baseline commit: ${result.baseline}`);\n  });\n\n// ─── context ────────────────────────────────────────────\nprogram\n  .command(\"context\")\n  .description(\"Generate project context files\")\n  .option(\"--llms\", \"Generate llms.txt for AI agents\")\n  .action((opts) => {\n    if (opts.llms) {\n      const result = contextLlmsCommand(process.cwd());\n      console.log(`✓ llms.txt generated at ${result.path}`);\n    } else {\n      const result = contextGenerateCommand(process.cwd());\n      console.log(`✓ Project context generated at ${result.path}`);\n    }\n  });\n\n// ─── hook ───────────────────────────────────────────────\nprogram\n  .command(\"hook\")\n  .description(\"Manage git hooks for the project\")\n  .argument(\"[action]\", \"Action: install or list\", \"list\")\n  .action((action: string) => {\n    if (action === \"install\") {\n      const result = hookInstallCommand(process.cwd());\n      console.log(result);\n    } else {\n      const result = hookListCommand(process.cwd());\n      console.log(result);\n    }\n  });\n\n// ─── ci ─────────────────────────────────────────────────\nprogram\n  .command(\"ci\")\n  .description(\"Generate CI workflow for the project\")\n  .action(() => {\n    const result = ciGenerateCommand(process.cwd());\n    console.log(result);\n  });\n\n// ─── deps ────────────────────────────────────────────────\nprogram\n  .command(\"deps\")\n  .description(\"Check project dependencies for outdated packages\")\n  .action(() => {\n    const result = depsCheckCommand(process.cwd());\n    console.log(result);\n  });\n\n// ─── test ────────────────────────────────────────────────\nprogram\n  .command(\"test\")\n  .description(\"Generate tests from spec stories\")\n  .argument(\"<spec>\", \"Spec slug\")\n  .argument(\"[story]\", \"Story ID (optional, generates for all if omitted)\")\n  .action((spec: string, story: string) => {\n    const result = testGenFromSpecCommand(process.cwd(), spec, story);\n    console.log(result);\n  });\n\n// ─── env ─────────────────────────────────────────────────\nprogram\n  .command(\"env\")\n  .description(\"Manage environment variables\")\n  .argument(\"[action]\", \"Action: setup or list\", \"list\")\n  .action((action: string) => {\n    if (action === \"setup\") {\n      const result = envSetupCommand(process.cwd());\n      console.log(result);\n    } else {\n      const result = envListCommand(process.cwd());\n      console.log(result);\n    }\n  });\n\n// ─── deploy ──────────────────────────────────────────────\nconst deployCmd = program.command(\"deploy\").description(\"Generate deployment configuration\");\ndeployCmd\n  .command(\"dockerfile\")\n  .description(\"Generate Dockerfile for the project\")\n  .action(() => {\n    const result = deployDockerfileCommand(process.cwd());\n    console.log(result);\n  });\ndeployCmd\n  .command(\"dockerignore\")\n  .description(\"Generate .dockerignore\")\n  .action(() => {\n    const result = deployDockerignoreCommand(process.cwd());\n    console.log(result);\n  });\n\n// ─── perf ───────────────────────────────────────────────\nprogram\n  .command(\"perf\")\n  .description(\"Performance testing with k6\")\n  .argument(\"[action]\", \"Action: setup or run\", \"setup\")\n  .argument(\"[tool]\", \"Tool: k6\", \"k6\")\n  .action((action: string, tool: string) => {\n    if (action === \"run\") {\n      const result = perfRunCommand(process.cwd(), tool);\n      console.log(result);\n    } else {\n      const result = perfSetupCommand(process.cwd(), tool);\n      console.log(result);\n    }\n  });\n\n// ─── help ───────────────────────────────────────────────\nprogram\n  .command(\"help\")\n  .description(\"List skills by phase, get details on a skill, or find next steps\")\n  .argument(\"[skill]\", \"Skill name for details\")\n  .option(\"--next <skill>\", \"Show next steps after a skill\")\n  .option(\"--phase <phase>\", \"Filter by phase (ideation, planning, etc.)\")\n  .action((skill: string, opts) => {\n    const result = helpCommand(process.cwd(), skill, opts.phase, opts.next);\n    console.log(result);\n  });\n\n// ─── status ─────────────────────────────────────────────\nprogram\n  .command(\"status\")\n  .description(\"Show project health overview\")\n  .action(() => {\n    const result = statusCommand(process.cwd());\n    console.log(result);\n  });\n\nprogram.parse(process.argv);\n"]}