kubit-forge 0.0.1-canary.85d379a

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.
Files changed (201) hide show
  1. package/CHANGELOG.md +229 -0
  2. package/LICENSE +201 -0
  3. package/README.md +841 -0
  4. package/dist/cli.d.ts +2 -0
  5. package/dist/cli.js +14294 -0
  6. package/dist/cli.js.map +1 -0
  7. package/dist/index.d.ts +772 -0
  8. package/dist/index.js +1979 -0
  9. package/dist/index.js.map +1 -0
  10. package/dist/templates/README.md +243 -0
  11. package/dist/templates/config/README.md +94 -0
  12. package/dist/templates/config/config-templates.ts +138 -0
  13. package/dist/templates/config/defaults.ts +105 -0
  14. package/dist/templates/config/index.ts +6 -0
  15. package/dist/templates/features/.prettierignore.template +28 -0
  16. package/dist/templates/features/.prettierrc.template +10 -0
  17. package/dist/templates/features/README.md +111 -0
  18. package/dist/templates/features/bernova-foundations.ts.template +50 -0
  19. package/dist/templates/features/bernova-globalStyles.ts.template +33 -0
  20. package/dist/templates/features/bernova-mediaQueries.ts.template +6 -0
  21. package/dist/templates/features/bernova-theme.ts.template +1 -0
  22. package/dist/templates/features/bernova.config.json.template +58 -0
  23. package/dist/templates/features/changesets-config.json.template +11 -0
  24. package/dist/templates/features/changesets-readme.md.template +31 -0
  25. package/dist/templates/features/commitlint.config.js.template +23 -0
  26. package/dist/templates/features/cypress-support-commands.ts.template +22 -0
  27. package/dist/templates/features/cypress-support-e2e.ts.template +20 -0
  28. package/dist/templates/features/cypress.config.ts.template +23 -0
  29. package/dist/templates/features/eslint.config.js.template +13 -0
  30. package/dist/templates/features/husky-commit-msg.template +4 -0
  31. package/dist/templates/features/husky-pre-commit.template +4 -0
  32. package/dist/templates/features/index.ts +5 -0
  33. package/dist/templates/features/jest-setup.ts.template +1 -0
  34. package/dist/templates/features/jest.config.ts.template +23 -0
  35. package/dist/templates/features/lint-staged.config.js.template +5 -0
  36. package/dist/templates/features/playwright-example.spec.ts.template +14 -0
  37. package/dist/templates/features/playwright.config.ts.template +42 -0
  38. package/dist/templates/features/template-loader.ts +31 -0
  39. package/dist/templates/features/vitest-setup.ts.template +1 -0
  40. package/dist/templates/features/vitest.config.ts.template +11 -0
  41. package/dist/templates/generators/README.md +181 -0
  42. package/dist/templates/generators/index.ts +9 -0
  43. package/dist/templates/generators/plugin.ts +245 -0
  44. package/dist/templates/generators/react-app-bernova.ts +356 -0
  45. package/dist/templates/generators/react-component.ts +103 -0
  46. package/dist/templates/generators/react-hook.ts +56 -0
  47. package/dist/templates/generators/react-kubit-ui.ts +794 -0
  48. package/dist/templates/generators/react-page.ts +65 -0
  49. package/dist/templates-physical/kubit-full/.prettierrc +0 -0
  50. package/dist/templates-physical/kubit-full/README.md +223 -0
  51. package/dist/templates-physical/kubit-full/bernova.config.json +0 -0
  52. package/dist/templates-physical/kubit-full/eslint.config.js +0 -0
  53. package/dist/templates-physical/kubit-full/index.html +17 -0
  54. package/dist/templates-physical/kubit-full/package.json +53 -0
  55. package/dist/templates-physical/kubit-full/src/App.css +118 -0
  56. package/dist/templates-physical/kubit-full/src/App.tsx +75 -0
  57. package/dist/templates-physical/kubit-full/src/charts/ChartsShowcase.css +0 -0
  58. package/dist/templates-physical/kubit-full/src/charts/ChartsShowcase.tsx +0 -0
  59. package/dist/templates-physical/kubit-full/src/components/ComponentsShowcase.css +147 -0
  60. package/dist/templates-physical/kubit-full/src/components/ComponentsShowcase.tsx +0 -0
  61. package/dist/templates-physical/kubit-full/src/main.tsx +0 -0
  62. package/dist/templates-physical/kubit-full/src/styles/index.css +6 -0
  63. package/dist/templates-physical/kubit-full/src/styles/theme/components/button.ts +0 -0
  64. package/dist/templates-physical/kubit-full/src/styles/theme/components/card.ts +0 -0
  65. package/dist/templates-physical/kubit-full/src/styles/theme/components/input.ts +0 -0
  66. package/dist/templates-physical/kubit-full/src/styles/theme/foundations.ts +0 -0
  67. package/dist/templates-physical/kubit-full/src/styles/theme/globalStyles.ts +0 -0
  68. package/dist/templates-physical/kubit-full/src/styles/theme/mediaQueries.ts +0 -0
  69. package/dist/templates-physical/kubit-full/src/styles/theme/theme.ts +0 -0
  70. package/dist/templates-physical/kubit-full/src/test/setup.ts +0 -0
  71. package/dist/templates-physical/kubit-full/tsconfig.json +29 -0
  72. package/dist/templates-physical/kubit-full/tsconfig.node.json +11 -0
  73. package/dist/templates-physical/kubit-full/vite.config.ts +24 -0
  74. package/dist/templates-physical/kubit-full/vitest.config.ts +26 -0
  75. package/dist/templates-physical/react/.env.example +6 -0
  76. package/dist/templates-physical/react/.prettierrc +8 -0
  77. package/dist/templates-physical/react/README.md +81 -0
  78. package/dist/templates-physical/react/eslint.config.js +7 -0
  79. package/dist/templates-physical/react/index.html +13 -0
  80. package/dist/templates-physical/react/package.json +39 -0
  81. package/dist/templates-physical/react/src/app/App.module.css +39 -0
  82. package/dist/templates-physical/react/src/app/App.test.tsx +14 -0
  83. package/dist/templates-physical/react/src/app/App.tsx +17 -0
  84. package/dist/templates-physical/react/src/main.tsx +10 -0
  85. package/dist/templates-physical/react/src/styles/index.css +39 -0
  86. package/dist/templates-physical/react/src/test/setup.ts +57 -0
  87. package/dist/templates-physical/react/tsconfig.json +25 -0
  88. package/dist/templates-physical/react/tsconfig.node.json +10 -0
  89. package/dist/templates-physical/react/vite.config.ts +16 -0
  90. package/dist/templates-physical/react/vitest.config.ts +22 -0
  91. package/dist/templates-physical/react-bernova/.eslintrc.cjs +15 -0
  92. package/dist/templates-physical/react-bernova/.prettierrc +10 -0
  93. package/dist/templates-physical/react-bernova/README.md +150 -0
  94. package/dist/templates-physical/react-bernova/bernova.config.json +58 -0
  95. package/dist/templates-physical/react-bernova/eslint.config.js +7 -0
  96. package/dist/templates-physical/react-bernova/index.html +21 -0
  97. package/dist/templates-physical/react-bernova/package.json +43 -0
  98. package/dist/templates-physical/react-bernova/src/App.css +89 -0
  99. package/dist/templates-physical/react-bernova/src/App.tsx +51 -0
  100. package/dist/templates-physical/react-bernova/src/index.css +54 -0
  101. package/dist/templates-physical/react-bernova/src/main.tsx +10 -0
  102. package/dist/templates-physical/react-bernova/src/styles/foundations.ts +91 -0
  103. package/dist/templates-physical/react-bernova/src/styles/globalStyles.ts +118 -0
  104. package/dist/templates-physical/react-bernova/src/styles/mediaQueries.ts +18 -0
  105. package/dist/templates-physical/react-bernova/src/styles/theme.ts +94 -0
  106. package/dist/templates-physical/react-bernova/src/test/setup.ts +9 -0
  107. package/dist/templates-physical/react-bernova/tsconfig.json +31 -0
  108. package/dist/templates-physical/react-bernova/tsconfig.node.json +10 -0
  109. package/dist/templates-physical/react-bernova/vite.config.ts +20 -0
  110. package/dist/templates-physical/react-bernova/vitest.config.ts +18 -0
  111. package/dist/templates-physical/vanilla/.env.example +6 -0
  112. package/dist/templates-physical/vanilla/.prettierrc +8 -0
  113. package/dist/templates-physical/vanilla/README.md +76 -0
  114. package/dist/templates-physical/vanilla/eslint.config.js +7 -0
  115. package/dist/templates-physical/vanilla/index.html +13 -0
  116. package/dist/templates-physical/vanilla/package.json +28 -0
  117. package/dist/templates-physical/vanilla/src/app.module.css +39 -0
  118. package/dist/templates-physical/vanilla/src/app.test.ts +20 -0
  119. package/dist/templates-physical/vanilla/src/app.ts +31 -0
  120. package/dist/templates-physical/vanilla/src/main.ts +9 -0
  121. package/dist/templates-physical/vanilla/src/styles/main.css +39 -0
  122. package/dist/templates-physical/vanilla/tsconfig.json +23 -0
  123. package/dist/templates-physical/vanilla/vite.config.ts +14 -0
  124. package/dist/templates-physical/vanilla/vitest.config.ts +14 -0
  125. package/package.json +131 -0
  126. package/templates/kubit-full/.prettierrc +0 -0
  127. package/templates/kubit-full/README.md +223 -0
  128. package/templates/kubit-full/bernova.config.json +0 -0
  129. package/templates/kubit-full/eslint.config.js +0 -0
  130. package/templates/kubit-full/index.html +17 -0
  131. package/templates/kubit-full/package.json +53 -0
  132. package/templates/kubit-full/src/App.css +118 -0
  133. package/templates/kubit-full/src/App.tsx +75 -0
  134. package/templates/kubit-full/src/charts/ChartsShowcase.css +0 -0
  135. package/templates/kubit-full/src/charts/ChartsShowcase.tsx +0 -0
  136. package/templates/kubit-full/src/components/ComponentsShowcase.css +147 -0
  137. package/templates/kubit-full/src/components/ComponentsShowcase.tsx +0 -0
  138. package/templates/kubit-full/src/main.tsx +0 -0
  139. package/templates/kubit-full/src/styles/index.css +6 -0
  140. package/templates/kubit-full/src/styles/theme/components/button.ts +0 -0
  141. package/templates/kubit-full/src/styles/theme/components/card.ts +0 -0
  142. package/templates/kubit-full/src/styles/theme/components/input.ts +0 -0
  143. package/templates/kubit-full/src/styles/theme/foundations.ts +0 -0
  144. package/templates/kubit-full/src/styles/theme/globalStyles.ts +0 -0
  145. package/templates/kubit-full/src/styles/theme/mediaQueries.ts +0 -0
  146. package/templates/kubit-full/src/styles/theme/theme.ts +0 -0
  147. package/templates/kubit-full/src/test/setup.ts +0 -0
  148. package/templates/kubit-full/tsconfig.json +29 -0
  149. package/templates/kubit-full/tsconfig.node.json +11 -0
  150. package/templates/kubit-full/vite.config.ts +24 -0
  151. package/templates/kubit-full/vitest.config.ts +26 -0
  152. package/templates/react/.env.example +6 -0
  153. package/templates/react/.prettierrc +8 -0
  154. package/templates/react/README.md +81 -0
  155. package/templates/react/eslint.config.js +7 -0
  156. package/templates/react/index.html +13 -0
  157. package/templates/react/package.json +39 -0
  158. package/templates/react/src/app/App.module.css +39 -0
  159. package/templates/react/src/app/App.test.tsx +14 -0
  160. package/templates/react/src/app/App.tsx +17 -0
  161. package/templates/react/src/main.tsx +10 -0
  162. package/templates/react/src/styles/index.css +39 -0
  163. package/templates/react/src/test/setup.ts +57 -0
  164. package/templates/react/tsconfig.json +25 -0
  165. package/templates/react/tsconfig.node.json +10 -0
  166. package/templates/react/vite.config.ts +16 -0
  167. package/templates/react/vitest.config.ts +22 -0
  168. package/templates/react-bernova/.eslintrc.cjs +15 -0
  169. package/templates/react-bernova/.prettierrc +10 -0
  170. package/templates/react-bernova/README.md +150 -0
  171. package/templates/react-bernova/bernova.config.json +58 -0
  172. package/templates/react-bernova/eslint.config.js +7 -0
  173. package/templates/react-bernova/index.html +21 -0
  174. package/templates/react-bernova/package.json +43 -0
  175. package/templates/react-bernova/src/App.css +89 -0
  176. package/templates/react-bernova/src/App.tsx +51 -0
  177. package/templates/react-bernova/src/index.css +54 -0
  178. package/templates/react-bernova/src/main.tsx +10 -0
  179. package/templates/react-bernova/src/styles/foundations.ts +91 -0
  180. package/templates/react-bernova/src/styles/globalStyles.ts +118 -0
  181. package/templates/react-bernova/src/styles/mediaQueries.ts +18 -0
  182. package/templates/react-bernova/src/styles/theme.ts +94 -0
  183. package/templates/react-bernova/src/test/setup.ts +9 -0
  184. package/templates/react-bernova/tsconfig.json +31 -0
  185. package/templates/react-bernova/tsconfig.node.json +10 -0
  186. package/templates/react-bernova/vite.config.ts +20 -0
  187. package/templates/react-bernova/vitest.config.ts +18 -0
  188. package/templates/vanilla/.env.example +6 -0
  189. package/templates/vanilla/.prettierrc +8 -0
  190. package/templates/vanilla/README.md +76 -0
  191. package/templates/vanilla/eslint.config.js +7 -0
  192. package/templates/vanilla/index.html +13 -0
  193. package/templates/vanilla/package.json +28 -0
  194. package/templates/vanilla/src/app.module.css +39 -0
  195. package/templates/vanilla/src/app.test.ts +20 -0
  196. package/templates/vanilla/src/app.ts +31 -0
  197. package/templates/vanilla/src/main.ts +9 -0
  198. package/templates/vanilla/src/styles/main.css +39 -0
  199. package/templates/vanilla/tsconfig.json +23 -0
  200. package/templates/vanilla/vite.config.ts +14 -0
  201. package/templates/vanilla/vitest.config.ts +14 -0
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../node_modules/.pnpm/tsup@8.5.1_postcss@8.5.6_typescript@5.9.3/node_modules/tsup/assets/esm_shims.js","../src/core/doctor-auto-fix.ts","../src/core/doctor-ide-integration.ts","../src/core/doctor-predictive.ts","../src/core/doctor-recommendations.ts","../src/utils/project-detector.ts","../src/commands/doctor.ts","../src/core/template-registry.ts","../src/commands/build.ts","../src/commands/lint.ts","../src/commands/test.ts","../src/dashboard/components/CommandRunner.tsx","../src/dashboard/components/LiveLogs.tsx","../src/dashboard/components/PluginManager.tsx","../src/dashboard/components/ProjectStatus.tsx","../src/dashboard/components/QuickActions.tsx","../src/dashboard/components/SystemMetrics.tsx","../src/dashboard/components/TemplateInstaller.tsx","../src/dashboard/dashboard.tsx","../src/commands/dashboard.ts","../src/cli.ts","../src/commands/bernova.ts","../src/utils/theme.ts","../src/commands/create.ts","../src/templates/generators/react-kubit-ui.ts","../src/utils/ui-helpers.ts","../src/commands/init.ts","../src/templates/config/index.ts","../src/templates/config/defaults.ts","../src/templates/config/config-templates.ts","../src/commands/ecosystem.ts","../src/commands/generate/index.ts","../src/commands/generate/component.ts","../src/commands/generate/context.ts","../src/commands/generate/hook.ts","../src/commands/generate/page.ts","../src/commands/generate/service.ts","../src/commands/monorepo.ts","../src/utils/monorepo-manager.ts","../src/commands/setup.ts","../src/core/plugin-manager.ts","../src/core/plugin-dependency-resolver.ts","../src/core/plugin-registry.ts","../src/core/plugin-sandbox.ts","../src/core/plugin-validator.ts","../src/core/plugin-version-manager.ts","../src/utils/config-loader.ts","../src/types/index.ts","../src/utils/logger.ts","../src/utils/task-runner.ts","../src/commands/assets.ts","../src/commands/info.ts","../src/core/changed-detector.ts","../src/core/task-cache.ts","../src/commands/dev.ts","../src/commands/format.ts","../src/commands/add/index.ts","../src/commands/add/features.ts","../src/commands/add/template-loader.ts","../src/templates/features/index.ts","../src/templates/features/template-loader.ts","../src/commands/migrate.ts","../src/commands/migrations/index.ts","../src/commands/migrations/cjs-to-esm.ts","../src/commands/migrations/eslint-legacy-to-flat.ts","../src/commands/migrations/jest-to-vitest.ts","../src/commands/migrations/react18-to-react19.ts","../src/commands/migrations/vite5-to-vite6.ts","../src/commands/upgrade.ts","../src/commands/refactor.ts","../src/commands/plugin-init.ts","../src/templates/generators/index.ts","../src/templates/generators/react-component.ts","../src/templates/generators/react-page.ts","../src/templates/generators/react-hook.ts","../src/templates/generators/plugin.ts","../src/templates/generators/react-app-bernova.ts","../src/commands/env.ts","../src/core/kubit-spec.ts","../src/core/task-engine.ts","../src/core/recipe-engine.ts","../src/core/plugin-verification.ts"],"sourcesContent":["// Shim globals in esm bundle\nimport path from 'node:path'\nimport { fileURLToPath } from 'node:url'\n\nconst getFilename = () => fileURLToPath(import.meta.url)\nconst getDirname = () => path.dirname(getFilename())\n\nexport const __dirname = /* @__PURE__ */ getDirname()\nexport const __filename = /* @__PURE__ */ getFilename()\n","/**\n * Doctor Auto-Fix\n *\n * Intelligent auto-fix system that can automatically resolve common issues\n */\n\nimport { execSync } from 'child_process';\nimport { existsSync, writeFileSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { Logger } from '../types/index.js';\n\nexport interface AutoFixIssue {\n id: string;\n category: 'dependency' | 'config' | 'security' | 'performance' | 'quality';\n severity: 'error' | 'warning' | 'info';\n description: string;\n fixable: boolean;\n autoFixAvailable: boolean;\n}\n\nexport interface AutoFixResult {\n issue: AutoFixIssue;\n fixed: boolean;\n changes: string[];\n error?: string;\n}\n\nexport class DoctorAutoFix {\n private logger: Logger;\n private cwd: string;\n\n constructor(logger: Logger, cwd: string) {\n this.logger = logger;\n this.cwd = cwd;\n }\n\n /**\n * Detect fixable issues\n */\n async detectIssues(): Promise<AutoFixIssue[]> {\n const issues: AutoFixIssue[] = [];\n\n // Check for missing dependencies\n issues.push(...(await this.detectMissingDependencies()));\n\n // Check for outdated dependencies\n issues.push(...(await this.detectOutdatedDependencies()));\n\n // Check for security vulnerabilities\n issues.push(...(await this.detectSecurityIssues()));\n\n // Check for config issues\n issues.push(...(await this.detectConfigIssues()));\n\n // Check for code quality issues\n issues.push(...(await this.detectQualityIssues()));\n\n return issues;\n }\n\n /**\n * Auto-fix an issue\n */\n async fix(issue: AutoFixIssue): Promise<AutoFixResult> {\n this.logger.debug(`Attempting to fix: ${issue.id}`);\n\n try {\n switch (issue.category) {\n case 'dependency':\n return await this.fixDependencyIssue(issue);\n case 'config':\n return await this.fixConfigIssue(issue);\n case 'security':\n return await this.fixSecurityIssue(issue);\n case 'performance':\n return await this.fixPerformanceIssue(issue);\n case 'quality':\n return await this.fixQualityIssue(issue);\n default:\n return {\n changes: [],\n error: 'Unknown issue category',\n fixed: false,\n issue,\n };\n }\n } catch (error) {\n return {\n changes: [],\n error: error instanceof Error ? error.message : 'Unknown error',\n fixed: false,\n issue,\n };\n }\n }\n\n /**\n * Fix multiple issues\n */\n async fixAll(issues: AutoFixIssue[]): Promise<AutoFixResult[]> {\n const results: AutoFixResult[] = [];\n\n for (const issue of issues) {\n if (issue.autoFixAvailable) {\n const result = await this.fix(issue);\n results.push(result);\n }\n }\n\n return results;\n }\n\n /**\n * Detect missing dependencies\n */\n private async detectMissingDependencies(): Promise<AutoFixIssue[]> {\n const issues: AutoFixIssue[] = [];\n const pkgPath = join(this.cwd, 'package.json');\n\n if (!existsSync(pkgPath)) {\n return issues;\n }\n\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n peerDependencies?: Record<string, string>;\n };\n\n // Check if node_modules exists\n const nodeModulesPath = join(this.cwd, 'node_modules');\n if (!existsSync(nodeModulesPath)) {\n issues.push({\n autoFixAvailable: true,\n category: 'dependency',\n description: 'node_modules directory is missing',\n fixable: true,\n id: 'missing-node-modules',\n severity: 'error',\n });\n }\n\n // Check for common missing peer dependencies\n const allDeps = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n\n if (allDeps.react && !allDeps['react-dom']) {\n issues.push({\n autoFixAvailable: true,\n category: 'dependency',\n description: 'react-dom is required when using React',\n fixable: true,\n id: 'missing-react-dom',\n severity: 'error',\n });\n }\n\n if (allDeps.typescript && !allDeps['@types/node']) {\n issues.push({\n autoFixAvailable: true,\n category: 'dependency',\n description: '@types/node is recommended for TypeScript projects',\n fixable: true,\n id: 'missing-types-node',\n severity: 'warning',\n });\n }\n } catch (error) {\n this.logger.debug(`Error detecting missing dependencies: ${error}`);\n }\n\n return issues;\n }\n\n /**\n * Detect outdated dependencies\n */\n private async detectOutdatedDependencies(): Promise<AutoFixIssue[]> {\n const issues: AutoFixIssue[] = [];\n\n try {\n // Check for outdated packages (simplified check)\n const pkgPath = join(this.cwd, 'package.json');\n if (!existsSync(pkgPath)) {\n return issues;\n }\n\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as {\n dependencies?: Record<string, string>;\n };\n\n // Check for very old major versions\n if (pkg.dependencies) {\n for (const [name, version] of Object.entries(pkg.dependencies)) {\n if (version.startsWith('^1.') || version.startsWith('~1.')) {\n issues.push({\n autoFixAvailable: false, // Requires manual review\n category: 'dependency',\n description: `${name} is on a very old version (${version})`,\n fixable: true,\n id: `outdated-${name}`,\n severity: 'warning',\n });\n }\n }\n }\n } catch (error) {\n this.logger.debug(`Error detecting outdated dependencies: ${error}`);\n }\n\n return issues;\n }\n\n /**\n * Detect security issues\n */\n private async detectSecurityIssues(): Promise<AutoFixIssue[]> {\n const issues: AutoFixIssue[] = [];\n\n try {\n // Check for .env file in git\n const gitignorePath = join(this.cwd, '.gitignore');\n if (existsSync(gitignorePath)) {\n const gitignore = readFileSync(gitignorePath, 'utf-8');\n if (!gitignore.includes('.env')) {\n issues.push({\n autoFixAvailable: true,\n category: 'security',\n description: '.env files should be in .gitignore',\n fixable: true,\n id: 'env-not-ignored',\n severity: 'error',\n });\n }\n }\n\n // Check for exposed secrets patterns\n const pkgPath = join(this.cwd, 'package.json');\n if (existsSync(pkgPath)) {\n const content = readFileSync(pkgPath, 'utf-8');\n if (\n content.includes('password') ||\n content.includes('secret') ||\n content.includes('token')\n ) {\n issues.push({\n autoFixAvailable: false,\n category: 'security',\n description: 'Potential secrets found in package.json',\n fixable: false,\n id: 'potential-secrets',\n severity: 'warning',\n });\n }\n }\n } catch (error) {\n this.logger.debug(`Error detecting security issues: ${error}`);\n }\n\n return issues;\n }\n\n /**\n * Detect config issues\n */\n private async detectConfigIssues(): Promise<AutoFixIssue[]> {\n const issues: AutoFixIssue[] = [];\n\n try {\n // Check for missing TypeScript config\n const tsconfigPath = join(this.cwd, 'tsconfig.json');\n const pkgPath = join(this.cwd, 'package.json');\n\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n };\n\n const hasTypeScript = pkg.dependencies?.typescript || pkg.devDependencies?.typescript;\n\n if (hasTypeScript && !existsSync(tsconfigPath)) {\n issues.push({\n autoFixAvailable: true,\n category: 'config',\n description: 'tsconfig.json is missing for TypeScript project',\n fixable: true,\n id: 'missing-tsconfig',\n severity: 'error',\n });\n }\n }\n\n // Check for missing ESLint config\n const eslintConfigs = ['.eslintrc.js', '.eslintrc.json', '.eslintrc.yml', 'eslint.config.js'];\n const hasESLintConfig = eslintConfigs.some((config) => existsSync(join(this.cwd, config)));\n\n if (!hasESLintConfig && existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as {\n devDependencies?: Record<string, string>;\n };\n\n if (pkg.devDependencies?.eslint) {\n issues.push({\n autoFixAvailable: true,\n category: 'config',\n description: 'ESLint config is missing',\n fixable: true,\n id: 'missing-eslint-config',\n severity: 'warning',\n });\n }\n }\n } catch (error) {\n this.logger.debug(`Error detecting config issues: ${error}`);\n }\n\n return issues;\n }\n\n /**\n * Detect quality issues\n */\n private async detectQualityIssues(): Promise<AutoFixIssue[]> {\n const issues: AutoFixIssue[] = [];\n\n try {\n // Check for missing README\n const readmePath = join(this.cwd, 'README.md');\n if (!existsSync(readmePath)) {\n issues.push({\n autoFixAvailable: true,\n category: 'quality',\n description: 'README.md is missing',\n fixable: true,\n id: 'missing-readme',\n severity: 'warning',\n });\n }\n\n // Check for missing LICENSE\n const licensePath = join(this.cwd, 'LICENSE');\n if (!existsSync(licensePath)) {\n issues.push({\n autoFixAvailable: true,\n category: 'quality',\n description: 'LICENSE file is missing',\n fixable: true,\n id: 'missing-license',\n severity: 'info',\n });\n }\n } catch (error) {\n this.logger.debug(`Error detecting quality issues: ${error}`);\n }\n\n return issues;\n }\n\n /**\n * Fix dependency issue\n */\n private async fixDependencyIssue(issue: AutoFixIssue): Promise<AutoFixResult> {\n const changes: string[] = [];\n\n try {\n switch (issue.id) {\n case 'missing-node-modules':\n this.logger.info('Installing dependencies...');\n execSync('npm install', { cwd: this.cwd, stdio: 'inherit' });\n changes.push('Installed dependencies');\n break;\n\n case 'missing-react-dom':\n this.logger.info('Installing react-dom...');\n execSync('npm install react-dom', { cwd: this.cwd, stdio: 'inherit' });\n changes.push('Installed react-dom');\n break;\n\n case 'missing-types-node':\n this.logger.info('Installing @types/node...');\n execSync('npm install -D @types/node', { cwd: this.cwd, stdio: 'inherit' });\n changes.push('Installed @types/node');\n break;\n }\n\n return { changes, fixed: true, issue };\n } catch (error) {\n return {\n changes,\n error: error instanceof Error ? error.message : 'Unknown error',\n fixed: false,\n issue,\n };\n }\n }\n\n /**\n * Fix config issue\n */\n private async fixConfigIssue(issue: AutoFixIssue): Promise<AutoFixResult> {\n const changes: string[] = [];\n\n try {\n switch (issue.id) {\n case 'missing-tsconfig': {\n const tsconfigPath = join(this.cwd, 'tsconfig.json');\n const defaultConfig = {\n compilerOptions: {\n esModuleInterop: true,\n forceConsistentCasingInFileNames: true,\n lib: ['ES2020'],\n module: 'ESNext',\n moduleResolution: 'node',\n skipLibCheck: true,\n strict: true,\n target: 'ES2020',\n },\n exclude: ['node_modules', 'dist'],\n include: ['src/**/*'],\n };\n\n writeFileSync(tsconfigPath, JSON.stringify(defaultConfig, null, 2));\n changes.push('Created tsconfig.json');\n break;\n }\n\n case 'missing-eslint-config': {\n const eslintConfigPath = join(this.cwd, '.eslintrc.json');\n const defaultConfig = {\n env: {\n es2021: true,\n node: true,\n },\n extends: ['eslint:recommended'],\n parserOptions: {\n ecmaVersion: 'latest',\n sourceType: 'module',\n },\n rules: {},\n };\n\n writeFileSync(eslintConfigPath, JSON.stringify(defaultConfig, null, 2));\n changes.push('Created .eslintrc.json');\n break;\n }\n }\n\n return { changes, fixed: true, issue };\n } catch (error) {\n return {\n changes,\n error: error instanceof Error ? error.message : 'Unknown error',\n fixed: false,\n issue,\n };\n }\n }\n\n /**\n * Fix security issue\n */\n private async fixSecurityIssue(issue: AutoFixIssue): Promise<AutoFixResult> {\n const changes: string[] = [];\n\n try {\n switch (issue.id) {\n case 'env-not-ignored': {\n const gitignorePath = join(this.cwd, '.gitignore');\n let gitignore = '';\n\n if (existsSync(gitignorePath)) {\n gitignore = readFileSync(gitignorePath, 'utf-8');\n }\n\n if (!gitignore.includes('.env')) {\n gitignore += '\\n# Environment variables\\n.env\\n.env.local\\n.env.*.local\\n';\n writeFileSync(gitignorePath, gitignore);\n changes.push('Added .env to .gitignore');\n }\n break;\n }\n }\n\n return { changes, fixed: true, issue };\n } catch (error) {\n return {\n changes,\n error: error instanceof Error ? error.message : 'Unknown error',\n fixed: false,\n issue,\n };\n }\n }\n\n /**\n * Fix performance issue\n */\n private async fixPerformanceIssue(issue: AutoFixIssue): Promise<AutoFixResult> {\n // Placeholder for performance fixes\n return {\n changes: [],\n error: 'Performance fixes not yet implemented',\n fixed: false,\n issue,\n };\n }\n\n /**\n * Fix quality issue\n */\n private async fixQualityIssue(issue: AutoFixIssue): Promise<AutoFixResult> {\n const changes: string[] = [];\n\n try {\n switch (issue.id) {\n case 'missing-readme': {\n const readmePath = join(this.cwd, 'README.md');\n const pkgPath = join(this.cwd, 'package.json');\n let projectName = 'My Project';\n\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as { name?: string };\n projectName = pkg.name || projectName;\n }\n\n const readme = `# ${projectName}\n\n## Description\n\nAdd your project description here.\n\n## Installation\n\n\\`\\`\\`bash\nnpm install\n\\`\\`\\`\n\n## Usage\n\n\\`\\`\\`bash\nnpm start\n\\`\\`\\`\n\n## License\n\nMIT\n`;\n\n writeFileSync(readmePath, readme);\n changes.push('Created README.md');\n break;\n }\n\n case 'missing-license': {\n const licensePath = join(this.cwd, 'LICENSE');\n const year = new Date().getFullYear();\n const license = `MIT License\n\nCopyright (c) ${year}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n`;\n\n writeFileSync(licensePath, license);\n changes.push('Created LICENSE file');\n break;\n }\n }\n\n return { changes, fixed: true, issue };\n } catch (error) {\n return {\n changes,\n error: error instanceof Error ? error.message : 'Unknown error',\n fixed: false,\n issue,\n };\n }\n }\n}\n","/**\n * Doctor IDE Integration\n *\n * Generate IDE-compatible diagnostic output for better developer experience\n */\n\nimport { writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { Logger } from '../types/index.js';\nimport type { DoctorCheck } from '../types/index.js';\n\nexport interface IDEDiagnostic {\n file: string;\n line: number;\n column: number;\n severity: 'error' | 'warning' | 'info' | 'hint';\n message: string;\n code?: string;\n source: string;\n relatedInformation?: Array<{\n file: string;\n line: number;\n column: number;\n message: string;\n }>;\n}\n\nexport interface IDEOutput {\n format: 'vscode' | 'jetbrains' | 'sarif' | 'checkstyle';\n diagnostics: IDEDiagnostic[];\n summary: {\n errors: number;\n warnings: number;\n infos: number;\n };\n}\n\nexport class DoctorIDEIntegration {\n private logger: Logger;\n private cwd: string;\n\n constructor(logger: Logger, cwd: string) {\n this.logger = logger;\n this.cwd = cwd;\n }\n\n /**\n * Convert doctor checks to IDE diagnostics\n */\n convertToIDEDiagnostics(checks: DoctorCheck[]): IDEDiagnostic[] {\n const diagnostics: IDEDiagnostic[] = [];\n\n for (const check of checks) {\n if (check.status === 'ok') {\n continue;\n }\n\n const diagnostic: IDEDiagnostic = {\n code: `doctor-${check.category}`,\n column: 1,\n file: this.getRelevantFile(check),\n line: 1,\n message: `[${check.category}] ${check.name}: ${check.message}`,\n severity: check.status === 'error' ? 'error' : 'warning',\n source: 'kubit-forge-doctor',\n };\n\n if (check.solution) {\n diagnostic.relatedInformation = [\n {\n column: 1,\n file: diagnostic.file,\n line: 1,\n message: `Solution: ${check.solution}`,\n },\n ];\n }\n\n diagnostics.push(diagnostic);\n }\n\n return diagnostics;\n }\n\n /**\n * Get relevant file for a check\n */\n private getRelevantFile(check: DoctorCheck): string {\n // Map check categories to relevant files\n const fileMap: Record<string, string> = {\n config: 'kubit.config.js',\n dependency: 'package.json',\n eslint: '.eslintrc.json',\n git: '.gitignore',\n prettier: '.prettierrc',\n security: '.env',\n test: 'package.json',\n typescript: 'tsconfig.json',\n };\n\n return join(this.cwd, fileMap[check.category] || 'package.json');\n }\n\n /**\n * Export diagnostics in VS Code format\n */\n exportVSCodeFormat(checks: DoctorCheck[]): IDEOutput {\n const diagnostics = this.convertToIDEDiagnostics(checks);\n\n return {\n diagnostics,\n format: 'vscode',\n summary: this.getSummary(diagnostics),\n };\n }\n\n /**\n * Export diagnostics in SARIF format (for GitHub Code Scanning)\n */\n exportSARIFFormat(checks: DoctorCheck[]): string {\n const diagnostics = this.convertToIDEDiagnostics(checks);\n\n const sarif = {\n $schema: 'https://json.schemastore.org/sarif-2.1.0.json',\n runs: [\n {\n results: diagnostics.map((d) => ({\n level: d.severity === 'error' ? 'error' : 'warning',\n locations: [\n {\n physicalLocation: {\n artifactLocation: {\n uri: d.file,\n },\n region: {\n startColumn: d.column,\n startLine: d.line,\n },\n },\n },\n ],\n message: {\n text: d.message,\n },\n ruleId: d.code || 'doctor-check',\n })),\n tool: {\n driver: {\n informationUri: 'https://github.com/kubit-forge/kubit-forge',\n name: 'Kubit CLI Doctor',\n rules: this.generateSARIFRules(diagnostics),\n version: '1.0.0',\n },\n },\n },\n ],\n version: '2.1.0',\n };\n\n return JSON.stringify(sarif, null, 2);\n }\n\n /**\n * Generate SARIF rules\n */\n private generateSARIFRules(diagnostics: IDEDiagnostic[]) {\n const uniqueCodes = [...new Set(diagnostics.map((d) => d.code).filter(Boolean))];\n\n return uniqueCodes.map((code) => ({\n fullDescription: {\n text: `Kubit CLI Doctor diagnostic for ${code}`,\n },\n help: {\n text: 'Run `kubit-forge doctor --fix` to attempt automatic fixes',\n },\n id: code,\n shortDescription: {\n text: `Doctor check: ${code}`,\n },\n }));\n }\n\n /**\n * Export diagnostics in Checkstyle format (for Jenkins, SonarQube)\n */\n exportCheckstyleFormat(checks: DoctorCheck[]): string {\n const diagnostics = this.convertToIDEDiagnostics(checks);\n\n let xml = '<?xml version=\"1.0\" encoding=\"UTF-8\"?>\\n';\n xml += '<checkstyle version=\"8.0\">\\n';\n\n // Group by file\n const byFile = new Map<string, IDEDiagnostic[]>();\n for (const diagnostic of diagnostics) {\n if (!byFile.has(diagnostic.file)) {\n byFile.set(diagnostic.file, []);\n }\n byFile.get(diagnostic.file)!.push(diagnostic);\n }\n\n for (const [file, fileDiagnostics] of byFile.entries()) {\n xml += ` <file name=\"${this.escapeXml(file)}\">\\n`;\n\n for (const diagnostic of fileDiagnostics) {\n xml += ` <error line=\"${diagnostic.line}\" `;\n xml += `column=\"${diagnostic.column}\" `;\n xml += `severity=\"${diagnostic.severity}\" `;\n xml += `message=\"${this.escapeXml(diagnostic.message)}\" `;\n xml += `source=\"${this.escapeXml(diagnostic.source)}\" />\\n`;\n }\n\n xml += ' </file>\\n';\n }\n\n xml += '</checkstyle>\\n';\n\n return xml;\n }\n\n /**\n * Escape XML special characters\n */\n private escapeXml(str: string): string {\n return str\n .replace(/&/g, '&amp;')\n .replace(/</g, '&lt;')\n .replace(/>/g, '&gt;')\n .replace(/\"/g, '&quot;')\n .replace(/'/g, '&apos;');\n }\n\n /**\n * Save diagnostics to file\n */\n async saveDiagnostics(\n checks: DoctorCheck[],\n format: 'vscode' | 'sarif' | 'checkstyle',\n outputPath?: string\n ): Promise<string> {\n let content: string;\n let filename: string;\n\n switch (format) {\n case 'vscode':\n content = JSON.stringify(this.exportVSCodeFormat(checks), null, 2);\n filename = 'doctor-diagnostics.json';\n break;\n\n case 'sarif':\n content = this.exportSARIFFormat(checks);\n filename = 'doctor-diagnostics.sarif';\n break;\n\n case 'checkstyle':\n content = this.exportCheckstyleFormat(checks);\n filename = 'doctor-diagnostics.xml';\n break;\n }\n\n const filePath = outputPath || join(this.cwd, filename);\n writeFileSync(filePath, content, 'utf-8');\n\n this.logger.success(`Diagnostics saved to: ${filePath}`);\n return filePath;\n }\n\n /**\n * Generate problem matcher for VS Code tasks\n */\n generateVSCodeProblemMatcher(): string {\n const problemMatcher = {\n fileLocation: ['relative', '${workspaceFolder}'],\n owner: 'kubit-forge-doctor',\n pattern: {\n file: 1,\n message: 3,\n regexp: '^\\\\[(.+)\\\\]\\\\s+(.+):\\\\s+(.+)$',\n severity: 2,\n },\n };\n\n return JSON.stringify(problemMatcher, null, 2);\n }\n\n /**\n * Generate VS Code task configuration\n */\n generateVSCodeTask(): string {\n const task = {\n tasks: [\n {\n command: 'kubit-forge doctor --format=vscode',\n label: 'Kubit Doctor',\n presentation: {\n panel: 'new',\n reveal: 'always',\n },\n problemMatcher: {\n fileLocation: ['relative', '${workspaceFolder}'],\n owner: 'kubit-forge-doctor',\n pattern: {\n column: 3,\n file: 1,\n line: 2,\n message: 5,\n regexp: '^(.+):(\\\\d+):(\\\\d+):\\\\s+(error|warning|info):\\\\s+(.+)$',\n severity: 4,\n },\n },\n type: 'shell',\n },\n ],\n version: '2.0.0',\n };\n\n return JSON.stringify(task, null, 2);\n }\n\n /**\n * Get summary of diagnostics\n */\n private getSummary(diagnostics: IDEDiagnostic[]) {\n return {\n errors: diagnostics.filter((d) => d.severity === 'error').length,\n infos: diagnostics.filter((d) => d.severity === 'info').length,\n warnings: diagnostics.filter((d) => d.severity === 'warning').length,\n };\n }\n\n /**\n * Print diagnostics in terminal-friendly format\n */\n printDiagnostics(checks: DoctorCheck[]): void {\n const diagnostics = this.convertToIDEDiagnostics(checks);\n\n for (const diagnostic of diagnostics) {\n const icon = diagnostic.severity === 'error' ? '❌' : '⚠️';\n this.logger.info(\n `${icon} ${diagnostic.file}:${diagnostic.line}:${diagnostic.column} - ${diagnostic.message}`\n );\n\n if (diagnostic.relatedInformation) {\n for (const info of diagnostic.relatedInformation) {\n this.logger.info(` 💡 ${info.message}`);\n }\n }\n }\n\n const summary = this.getSummary(diagnostics);\n this.logger.info('');\n this.logger.info(\n `Summary: ${summary.errors} errors, ${summary.warnings} warnings, ${summary.infos} infos`\n );\n }\n}\n","/**\n * Doctor Predictive Diagnostics\n *\n * Predict potential issues before they occur based on project patterns\n */\n\nimport { existsSync, readFileSync, statSync, readdirSync } from 'fs';\nimport { join } from 'path';\n\nimport type { Logger } from '../types/index.js';\n\nexport interface PredictiveIssue {\n id: string;\n type: 'potential' | 'trend' | 'risk';\n category: 'performance' | 'security' | 'maintainability' | 'scalability';\n severity: 'low' | 'medium' | 'high';\n description: string;\n likelihood: number; // 0-100\n impact: number; // 0-100\n preventionSteps: string[];\n indicators: string[];\n}\n\nexport interface ProjectMetrics {\n fileCount: number;\n totalSize: number;\n dependencyCount: number;\n devDependencyCount: number;\n scriptCount: number;\n configFiles: string[];\n lastModified: Date;\n}\n\nexport class DoctorPredictive {\n private logger: Logger;\n private cwd: string;\n\n constructor(logger: Logger, cwd: string) {\n this.logger = logger;\n this.cwd = cwd;\n }\n\n /**\n * Analyze project and predict potential issues\n */\n async predictIssues(): Promise<PredictiveIssue[]> {\n const issues: PredictiveIssue[] = [];\n\n // Collect project metrics\n const metrics = await this.collectMetrics();\n\n // Predict based on different aspects\n issues.push(...(await this.predictPerformanceIssues(metrics)));\n issues.push(...(await this.predictSecurityIssues(metrics)));\n issues.push(...(await this.predictMaintainabilityIssues(metrics)));\n issues.push(...(await this.predictScalabilityIssues(metrics)));\n\n // Sort by risk score (likelihood * impact)\n return issues.sort((a, b) => b.likelihood * b.impact - a.likelihood * a.impact);\n }\n\n /**\n * Collect project metrics\n */\n private async collectMetrics(): Promise<ProjectMetrics> {\n const metrics: ProjectMetrics = {\n configFiles: [],\n dependencyCount: 0,\n devDependencyCount: 0,\n fileCount: 0,\n lastModified: new Date(0),\n scriptCount: 0,\n totalSize: 0,\n };\n\n try {\n // Count files and size\n const srcPath = join(this.cwd, 'src');\n if (existsSync(srcPath)) {\n const { count, lastModified, size } = this.countFiles(srcPath);\n metrics.fileCount = count;\n metrics.totalSize = size;\n metrics.lastModified = lastModified;\n }\n\n // Analyze package.json\n const pkgPath = join(this.cwd, 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n scripts?: Record<string, string>;\n };\n\n metrics.dependencyCount = Object.keys(pkg.dependencies || {}).length;\n metrics.devDependencyCount = Object.keys(pkg.devDependencies || {}).length;\n metrics.scriptCount = Object.keys(pkg.scripts || {}).length;\n }\n\n // Detect config files\n const configPatterns = [\n 'tsconfig.json',\n '.eslintrc.*',\n '.prettierrc',\n 'jest.config.*',\n 'vite.config.*',\n 'webpack.config.*',\n ];\n\n for (const pattern of configPatterns) {\n if (pattern.includes('*')) {\n const base = pattern.split('*')[0];\n const files = readdirSync(this.cwd).filter((f) => f.startsWith(base));\n metrics.configFiles.push(...files);\n } else if (existsSync(join(this.cwd, pattern))) {\n metrics.configFiles.push(pattern);\n }\n }\n } catch (error) {\n this.logger.debug(`Error collecting metrics: ${error}`);\n }\n\n return metrics;\n }\n\n /**\n * Count files recursively\n */\n private countFiles(\n dir: string,\n count = 0,\n size = 0,\n lastModified = new Date(0)\n ): { count: number; size: number; lastModified: Date } {\n try {\n const files = readdirSync(dir);\n\n for (const file of files) {\n const filePath = join(dir, file);\n const stats = statSync(filePath);\n\n if (stats.isDirectory()) {\n if (file !== 'node_modules' && file !== '.git') {\n const result = this.countFiles(filePath, count, size, lastModified);\n count = result.count;\n size = result.size;\n lastModified = result.lastModified > lastModified ? result.lastModified : lastModified;\n }\n } else {\n count++;\n size += stats.size;\n lastModified = stats.mtime > lastModified ? stats.mtime : lastModified;\n }\n }\n } catch (error) {\n this.logger.debug(`Error counting files in ${dir}: ${error}`);\n }\n\n return { count, lastModified, size };\n }\n\n /**\n * Predict performance issues\n */\n private async predictPerformanceIssues(metrics: ProjectMetrics): Promise<PredictiveIssue[]> {\n const issues: PredictiveIssue[] = [];\n\n // Large bundle size risk\n if (metrics.dependencyCount > 50) {\n issues.push({\n category: 'performance',\n description: 'High number of dependencies may lead to large bundle sizes',\n id: 'large-bundle-risk',\n impact: 70,\n indicators: [`${metrics.dependencyCount} dependencies detected`],\n likelihood: Math.min(metrics.dependencyCount / 2, 100),\n preventionSteps: [\n 'Audit dependencies regularly',\n 'Use tree-shaking',\n 'Consider code splitting',\n 'Remove unused dependencies',\n ],\n severity: 'medium',\n type: 'risk',\n });\n }\n\n // Memory usage risk\n if (metrics.totalSize > 50 * 1024 * 1024) {\n // 50MB\n issues.push({\n category: 'performance',\n description: 'Large codebase may cause memory issues in development',\n id: 'memory-usage-risk',\n impact: 50,\n indicators: [`Total size: ${(metrics.totalSize / 1024 / 1024).toFixed(2)}MB`],\n likelihood: 60,\n preventionSteps: ['Optimize large files', 'Use lazy loading', 'Consider micro-frontends'],\n severity: 'medium',\n type: 'risk',\n });\n }\n\n // Build time risk\n if (metrics.fileCount > 500) {\n issues.push({\n category: 'performance',\n description: 'Growing file count may slow down build times',\n id: 'slow-build-risk',\n impact: 40,\n indicators: [`${metrics.fileCount} files in project`],\n likelihood: 70,\n preventionSteps: [\n 'Use incremental builds',\n 'Optimize build configuration',\n 'Consider build caching',\n ],\n severity: 'low',\n type: 'trend',\n });\n }\n\n return issues;\n }\n\n /**\n * Predict security issues\n */\n private async predictSecurityIssues(metrics: ProjectMetrics): Promise<PredictiveIssue[]> {\n const issues: PredictiveIssue[] = [];\n\n // Dependency vulnerability risk\n if (metrics.dependencyCount > 30) {\n issues.push({\n category: 'security',\n description: 'More dependencies increase vulnerability surface area',\n id: 'dependency-vulnerability-risk',\n impact: 90,\n indicators: [\n `${metrics.dependencyCount} production dependencies`,\n `${metrics.devDependencyCount} dev dependencies`,\n ],\n likelihood: 80,\n preventionSteps: [\n 'Run npm audit regularly',\n 'Keep dependencies updated',\n 'Use Dependabot or similar tools',\n 'Review dependency licenses',\n ],\n severity: 'high',\n type: 'risk',\n });\n }\n\n // Outdated dependencies risk\n const pkgPath = join(this.cwd, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as {\n dependencies?: Record<string, string>;\n };\n\n let oldVersionCount = 0;\n if (pkg.dependencies) {\n for (const version of Object.values(pkg.dependencies)) {\n if (version.includes('^0.') || version.includes('~0.')) {\n oldVersionCount++;\n }\n }\n }\n\n if (oldVersionCount > 0) {\n issues.push({\n category: 'security',\n description: 'Pre-1.0 dependencies may have breaking changes or security issues',\n id: 'outdated-dependencies-risk',\n impact: 70,\n indicators: [`${oldVersionCount} pre-1.0 dependencies`],\n likelihood: 60,\n preventionSteps: [\n 'Review and update pre-1.0 dependencies',\n 'Check for stable alternatives',\n 'Monitor changelogs',\n ],\n severity: 'medium',\n type: 'potential',\n });\n }\n } catch (error) {\n this.logger.debug(`Error analyzing dependencies: ${error}`);\n }\n }\n\n return issues;\n }\n\n /**\n * Predict maintainability issues\n */\n private async predictMaintainabilityIssues(metrics: ProjectMetrics): Promise<PredictiveIssue[]> {\n const issues: PredictiveIssue[] = [];\n\n // Configuration complexity\n if (metrics.configFiles.length > 10) {\n issues.push({\n category: 'maintainability',\n description: 'Many configuration files can make the project harder to maintain',\n id: 'config-complexity-risk',\n impact: 40,\n indicators: [`${metrics.configFiles.length} configuration files`],\n likelihood: 50,\n preventionSteps: [\n 'Consolidate configurations where possible',\n 'Document configuration decisions',\n 'Use configuration presets',\n ],\n severity: 'low',\n type: 'trend',\n });\n }\n\n // Missing documentation risk\n const readmePath = join(this.cwd, 'README.md');\n const docsPath = join(this.cwd, 'docs');\n\n if (!existsSync(readmePath) && !existsSync(docsPath)) {\n issues.push({\n category: 'maintainability',\n description: 'Lack of documentation will make onboarding and maintenance difficult',\n id: 'documentation-gap-risk',\n impact: 60,\n indicators: ['No README.md found', 'No docs directory found'],\n likelihood: 90,\n preventionSteps: [\n 'Create comprehensive README',\n 'Document architecture decisions',\n 'Add inline code comments',\n 'Create API documentation',\n ],\n severity: 'medium',\n type: 'potential',\n });\n }\n\n // Test coverage risk\n const hasTests =\n existsSync(join(this.cwd, '__tests__')) ||\n existsSync(join(this.cwd, 'test')) ||\n existsSync(join(this.cwd, 'tests'));\n\n if (!hasTests && metrics.fileCount > 20) {\n issues.push({\n category: 'maintainability',\n description: 'Growing codebase without tests increases regression risk',\n id: 'test-coverage-risk',\n impact: 80,\n indicators: ['No test directory found', `${metrics.fileCount} files without tests`],\n likelihood: 85,\n preventionSteps: [\n 'Set up testing framework',\n 'Write unit tests for critical paths',\n 'Add integration tests',\n 'Set up CI/CD with test coverage',\n ],\n severity: 'high',\n type: 'potential',\n });\n }\n\n return issues;\n }\n\n /**\n * Predict scalability issues\n */\n private async predictScalabilityIssues(metrics: ProjectMetrics): Promise<PredictiveIssue[]> {\n const issues: PredictiveIssue[] = [];\n\n // Monolithic architecture risk\n if (metrics.fileCount > 300 && !existsSync(join(this.cwd, 'packages'))) {\n issues.push({\n category: 'scalability',\n description: 'Large monolithic structure may hinder team scalability',\n id: 'monolith-scalability-risk',\n impact: 65,\n indicators: [`${metrics.fileCount} files in single structure`],\n likelihood: 70,\n preventionSteps: [\n 'Consider modular architecture',\n 'Evaluate monorepo structure',\n 'Define clear module boundaries',\n 'Use dependency injection',\n ],\n severity: 'medium',\n type: 'trend',\n });\n }\n\n // Build system scalability\n if (metrics.fileCount > 200 && !metrics.configFiles.some((f) => f.includes('cache'))) {\n issues.push({\n category: 'scalability',\n description: 'Build times will increase without caching strategy',\n id: 'build-scalability-risk',\n impact: 50,\n indicators: ['No caching configuration detected'],\n likelihood: 60,\n preventionSteps: [\n 'Implement build caching',\n 'Use incremental compilation',\n 'Optimize build pipeline',\n ],\n severity: 'low',\n type: 'potential',\n });\n }\n\n return issues;\n }\n\n /**\n * Get risk score for an issue\n */\n getRiskScore(issue: PredictiveIssue): number {\n return (issue.likelihood * issue.impact) / 100;\n }\n\n /**\n * Get priority recommendations\n */\n getPriorityRecommendations(issues: PredictiveIssue[]): PredictiveIssue[] {\n return issues\n .filter((issue) => this.getRiskScore(issue) > 50)\n .sort((a, b) => this.getRiskScore(b) - this.getRiskScore(a))\n .slice(0, 5);\n }\n}\n","/**\n * Doctor Personalized Recommendations\n *\n * Generate personalized recommendations based on project characteristics\n */\n\nimport { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { Logger } from '../types/index.js';\nimport type { DoctorCheck } from '../types/index.js';\n\nexport interface Recommendation {\n id: string;\n category: 'tooling' | 'workflow' | 'architecture' | 'performance' | 'security' | 'quality';\n priority: 'high' | 'medium' | 'low';\n title: string;\n description: string;\n benefits: string[];\n steps: string[];\n estimatedTime: string;\n difficulty: 'easy' | 'medium' | 'hard';\n tags: string[];\n relatedTo?: string[]; // Related check IDs\n}\n\nexport interface ProjectProfile {\n stack: string;\n language: string;\n framework?: string;\n size: 'small' | 'medium' | 'large';\n maturity: 'new' | 'growing' | 'mature';\n teamSize: 'solo' | 'small' | 'medium' | 'large';\n hasTests: boolean;\n hasCI: boolean;\n hasDocs: boolean;\n}\n\nexport class DoctorRecommendations {\n private logger: Logger;\n private cwd: string;\n\n constructor(logger: Logger, cwd: string) {\n this.logger = logger;\n this.cwd = cwd;\n }\n\n /**\n * Generate personalized recommendations\n */\n async generateRecommendations(checks: DoctorCheck[]): Promise<Recommendation[]> {\n const profile = await this.buildProjectProfile();\n const recommendations: Recommendation[] = [];\n\n // Generate recommendations based on profile\n recommendations.push(...this.getToolingRecommendations(profile, checks));\n recommendations.push(...this.getWorkflowRecommendations(profile, checks));\n recommendations.push(...this.getArchitectureRecommendations(profile, checks));\n recommendations.push(...this.getPerformanceRecommendations(profile, checks));\n recommendations.push(...this.getSecurityRecommendations(profile, checks));\n recommendations.push(...this.getQualityRecommendations(profile, checks));\n\n // Sort by priority and relevance\n return this.prioritizeRecommendations(recommendations, checks);\n }\n\n /**\n * Build project profile\n */\n private async buildProjectProfile(): Promise<ProjectProfile> {\n const profile: ProjectProfile = {\n hasCI: false,\n hasDocs: false,\n hasTests: false,\n language: 'javascript',\n maturity: 'new',\n size: 'small',\n stack: 'unknown',\n teamSize: 'solo',\n };\n\n try {\n const pkgPath = join(this.cwd, 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8')) as {\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n scripts?: Record<string, string>;\n };\n\n // Detect language\n if (pkg.devDependencies?.typescript || pkg.dependencies?.typescript) {\n profile.language = 'typescript';\n }\n\n // Detect framework\n if (pkg.dependencies?.react) {\n profile.framework = 'react';\n } else if (pkg.dependencies?.vue) {\n profile.framework = 'vue';\n } else if (pkg.dependencies?.['@angular/core']) {\n profile.framework = 'angular';\n } else if (pkg.dependencies?.next) {\n profile.framework = 'nextjs';\n }\n\n // Detect stack\n if (profile.framework) {\n profile.stack = profile.framework;\n } else if (pkg.dependencies?.express) {\n profile.stack = 'node-backend';\n }\n\n // Detect size\n const depCount =\n Object.keys(pkg.dependencies || {}).length +\n Object.keys(pkg.devDependencies || {}).length;\n if (depCount > 50) {\n profile.size = 'large';\n } else if (depCount > 20) {\n profile.size = 'medium';\n }\n\n // Detect maturity\n if (pkg.scripts) {\n const scriptCount = Object.keys(pkg.scripts).length;\n if (scriptCount > 10) {\n profile.maturity = 'mature';\n } else if (scriptCount > 5) {\n profile.maturity = 'growing';\n }\n }\n\n // Detect tests\n profile.hasTests = !!(\n pkg.devDependencies?.jest ||\n pkg.devDependencies?.vitest ||\n pkg.devDependencies?.mocha ||\n pkg.scripts?.test\n );\n }\n\n // Detect CI\n profile.hasCI =\n existsSync(join(this.cwd, '.github', 'workflows')) ||\n existsSync(join(this.cwd, '.gitlab-ci.yml')) ||\n existsSync(join(this.cwd, '.circleci'));\n\n // Detect docs\n profile.hasDocs =\n existsSync(join(this.cwd, 'README.md')) || existsSync(join(this.cwd, 'docs'));\n } catch (error) {\n this.logger.debug(`Error building project profile: ${error}`);\n }\n\n return profile;\n }\n\n /**\n * Get tooling recommendations\n */\n private getToolingRecommendations(\n profile: ProjectProfile,\n checks: DoctorCheck[]\n ): Recommendation[] {\n const recommendations: Recommendation[] = [];\n\n // TypeScript recommendation\n if (profile.language === 'javascript' && profile.size !== 'small') {\n recommendations.push({\n benefits: [\n 'Catch errors at compile time',\n 'Better IDE support and autocomplete',\n 'Improved code maintainability',\n 'Self-documenting code',\n ],\n category: 'tooling',\n description: 'Migrate to TypeScript for better type safety and developer experience',\n difficulty: 'medium',\n estimatedTime: '1-2 weeks',\n id: 'adopt-typescript',\n priority: 'high',\n steps: [\n 'Install TypeScript: npm install -D typescript',\n 'Create tsconfig.json',\n 'Rename .js files to .ts gradually',\n 'Add type definitions',\n ],\n tags: ['typescript', 'migration', 'type-safety'],\n title: 'Adopt TypeScript',\n });\n }\n\n // ESLint recommendation\n const hasESLintIssue = checks.some(\n (c) => c.name.toLowerCase().includes('eslint') && c.status !== 'ok'\n );\n if (hasESLintIssue) {\n recommendations.push({\n benefits: [\n 'Catch common errors',\n 'Enforce code style',\n 'Improve code consistency',\n 'Better collaboration',\n ],\n category: 'tooling',\n description: 'Configure ESLint for consistent code quality',\n difficulty: 'easy',\n estimatedTime: '1-2 hours',\n id: 'setup-eslint',\n priority: 'high',\n relatedTo: ['eslint'],\n steps: [\n 'Install ESLint: npm install -D eslint',\n 'Run: npx eslint --init',\n 'Configure rules in .eslintrc',\n 'Add lint script to package.json',\n ],\n tags: ['eslint', 'linting', 'code-quality'],\n title: 'Set up ESLint',\n });\n }\n\n // Prettier recommendation\n if (!checks.some((c) => c.name.toLowerCase().includes('prettier'))) {\n recommendations.push({\n benefits: [\n 'Consistent code formatting',\n 'No more style debates',\n 'Faster code reviews',\n 'Better git diffs',\n ],\n category: 'tooling',\n description: 'Add Prettier for automatic code formatting',\n difficulty: 'easy',\n estimatedTime: '30 minutes',\n id: 'setup-prettier',\n priority: 'medium',\n steps: [\n 'Install Prettier: npm install -D prettier',\n 'Create .prettierrc config',\n 'Add format script',\n 'Set up pre-commit hook',\n ],\n tags: ['prettier', 'formatting', 'code-style'],\n title: 'Set up Prettier',\n });\n }\n\n return recommendations;\n }\n\n /**\n * Get workflow recommendations\n */\n private getWorkflowRecommendations(\n profile: ProjectProfile,\n _checks: DoctorCheck[]\n ): Recommendation[] {\n const recommendations: Recommendation[] = [];\n\n // CI/CD recommendation\n if (!profile.hasCI && profile.maturity !== 'new') {\n recommendations.push({\n benefits: [\n 'Automated testing on every commit',\n 'Catch issues early',\n 'Faster deployment',\n 'Better code quality',\n ],\n category: 'workflow',\n description: 'Automate testing and deployment with CI/CD',\n difficulty: 'medium',\n estimatedTime: '2-4 hours',\n id: 'setup-ci-cd',\n priority: 'high',\n steps: [\n 'Choose CI platform (GitHub Actions, GitLab CI, etc.)',\n 'Create workflow file',\n 'Add test and build jobs',\n 'Configure deployment',\n ],\n tags: ['ci-cd', 'automation', 'github-actions'],\n title: 'Set up CI/CD Pipeline',\n });\n }\n\n // Git hooks recommendation\n if (profile.hasTests) {\n recommendations.push({\n benefits: [\n 'Run tests before commit',\n 'Enforce code quality',\n 'Prevent bad commits',\n 'Faster feedback',\n ],\n category: 'workflow',\n description: 'Use Husky for pre-commit and pre-push hooks',\n difficulty: 'easy',\n estimatedTime: '30 minutes',\n id: 'setup-git-hooks',\n priority: 'medium',\n steps: [\n 'Install Husky: npm install -D husky',\n 'Initialize: npx husky install',\n 'Add pre-commit hook',\n 'Add pre-push hook',\n ],\n tags: ['git-hooks', 'husky', 'automation'],\n title: 'Set up Git Hooks',\n });\n }\n\n return recommendations;\n }\n\n /**\n * Get architecture recommendations\n */\n private getArchitectureRecommendations(\n profile: ProjectProfile,\n _checks: DoctorCheck[]\n ): Recommendation[] {\n const recommendations: Recommendation[] = [];\n\n // Monorepo recommendation\n if (profile.size === 'large' && profile.maturity === 'mature') {\n recommendations.push({\n benefits: [\n 'Better code organization',\n 'Shared dependencies',\n 'Easier refactoring',\n 'Improved collaboration',\n ],\n category: 'architecture',\n description: 'Organize large codebase with monorepo tools',\n difficulty: 'hard',\n estimatedTime: '1-2 weeks',\n id: 'consider-monorepo',\n priority: 'medium',\n steps: [\n 'Evaluate monorepo tools (Nx, Turborepo, Lerna)',\n 'Plan migration strategy',\n 'Set up workspace structure',\n 'Migrate gradually',\n ],\n tags: ['monorepo', 'architecture', 'scalability'],\n title: 'Consider Monorepo Structure',\n });\n }\n\n // Module boundaries recommendation\n if (profile.size !== 'small') {\n recommendations.push({\n benefits: [\n 'Better code organization',\n 'Reduced coupling',\n 'Easier testing',\n 'Improved maintainability',\n ],\n category: 'architecture',\n description: 'Establish clear module boundaries and dependencies',\n difficulty: 'medium',\n estimatedTime: '1 week',\n id: 'define-module-boundaries',\n priority: 'medium',\n steps: [\n 'Identify logical modules',\n 'Define public APIs',\n 'Document dependencies',\n 'Use linting rules to enforce',\n ],\n tags: ['architecture', 'modules', 'organization'],\n title: 'Define Module Boundaries',\n });\n }\n\n return recommendations;\n }\n\n /**\n * Get performance recommendations\n */\n private getPerformanceRecommendations(\n profile: ProjectProfile,\n _checks: DoctorCheck[]\n ): Recommendation[] {\n const recommendations: Recommendation[] = [];\n\n // Bundle optimization\n if (profile.framework && profile.size !== 'small') {\n recommendations.push({\n benefits: [\n 'Faster page loads',\n 'Better user experience',\n 'Improved SEO',\n 'Lower bandwidth costs',\n ],\n category: 'performance',\n description: 'Reduce bundle size for faster load times',\n difficulty: 'medium',\n estimatedTime: '2-3 days',\n id: 'optimize-bundle',\n priority: 'medium',\n steps: [\n 'Analyze bundle with webpack-bundle-analyzer',\n 'Enable tree-shaking',\n 'Use code splitting',\n 'Lazy load components',\n ],\n tags: ['performance', 'bundle', 'optimization'],\n title: 'Optimize Bundle Size',\n });\n }\n\n return recommendations;\n }\n\n /**\n * Get security recommendations\n */\n private getSecurityRecommendations(\n profile: ProjectProfile,\n checks: DoctorCheck[]\n ): Recommendation[] {\n const recommendations: Recommendation[] = [];\n\n // Security audit\n const hasSecurityIssue = checks.some((c) => c.category === 'security' && c.status !== 'ok');\n if (hasSecurityIssue || profile.maturity !== 'new') {\n recommendations.push({\n benefits: [\n 'Identify vulnerabilities early',\n 'Protect user data',\n 'Compliance requirements',\n 'Peace of mind',\n ],\n category: 'security',\n description: 'Set up automated security scanning',\n difficulty: 'easy',\n estimatedTime: '1-2 hours',\n id: 'regular-security-audits',\n priority: 'high',\n relatedTo: ['security'],\n steps: [\n 'Run npm audit regularly',\n 'Set up Dependabot',\n 'Use Snyk or similar tools',\n 'Add security checks to CI',\n ],\n tags: ['security', 'audit', 'dependencies'],\n title: 'Run Regular Security Audits',\n });\n }\n\n return recommendations;\n }\n\n /**\n * Get quality recommendations\n */\n private getQualityRecommendations(\n profile: ProjectProfile,\n _checks: DoctorCheck[]\n ): Recommendation[] {\n const recommendations: Recommendation[] = [];\n\n // Testing recommendation\n if (!profile.hasTests && profile.size !== 'small') {\n recommendations.push({\n benefits: [\n 'Catch bugs early',\n 'Refactor with confidence',\n 'Better documentation',\n 'Improved code quality',\n ],\n category: 'quality',\n description: 'Set up unit and integration tests',\n difficulty: 'medium',\n estimatedTime: '1 week',\n id: 'add-testing',\n priority: 'high',\n steps: [\n 'Choose testing framework (Jest, Vitest)',\n 'Install dependencies',\n 'Write first tests',\n 'Add to CI pipeline',\n ],\n tags: ['testing', 'quality', 'jest'],\n title: 'Add Automated Testing',\n });\n }\n\n // Documentation recommendation\n if (!profile.hasDocs && profile.maturity !== 'new') {\n recommendations.push({\n benefits: [\n 'Easier onboarding',\n 'Better collaboration',\n 'Reduced support burden',\n 'Knowledge preservation',\n ],\n category: 'quality',\n description: 'Create comprehensive project documentation',\n difficulty: 'easy',\n estimatedTime: '2-3 days',\n id: 'improve-documentation',\n priority: 'medium',\n steps: [\n 'Create/update README.md',\n 'Document architecture',\n 'Add API documentation',\n 'Create contributing guide',\n ],\n tags: ['documentation', 'quality', 'onboarding'],\n title: 'Improve Documentation',\n });\n }\n\n return recommendations;\n }\n\n /**\n * Prioritize recommendations\n */\n private prioritizeRecommendations(\n recommendations: Recommendation[],\n checks: DoctorCheck[]\n ): Recommendation[] {\n // Create a set of check names for matching\n const issueNames = new Set(\n checks.filter((c) => c.status !== 'ok').map((c) => c.name.toLowerCase())\n );\n\n // Score recommendations\n const scored = recommendations.map((rec) => {\n let score = 0;\n\n // Priority score\n if (rec.priority === 'high') {\n score += 100;\n } else if (rec.priority === 'medium') {\n score += 50;\n } else {\n score += 25;\n }\n\n // Difficulty bonus (easier = higher score)\n if (rec.difficulty === 'easy') {\n score += 30;\n } else if (rec.difficulty === 'medium') {\n score += 15;\n }\n\n // Related to existing issues\n if (rec.relatedTo) {\n const relatedIssues = rec.relatedTo.filter((id) =>\n Array.from(issueNames).some((name) => name.includes(id.toLowerCase()))\n );\n score += relatedIssues.length * 20;\n }\n\n return { recommendation: rec, score };\n });\n\n // Sort by score and return top recommendations\n return scored\n .sort((a, b) => b.score - a.score)\n .map((s) => s.recommendation)\n .slice(0, 10);\n }\n\n /**\n * Format recommendations for display\n */\n formatRecommendations(recommendations: Recommendation[]): string {\n let output = '\\n📋 Personalized Recommendations:\\n\\n';\n\n for (let i = 0; i < recommendations.length; i++) {\n const rec = recommendations[i];\n const priorityIcon = rec.priority === 'high' ? '🔴' : rec.priority === 'medium' ? '🟡' : '🟢';\n const difficultyIcon =\n rec.difficulty === 'easy' ? '⭐' : rec.difficulty === 'medium' ? '⭐⭐' : '⭐⭐⭐';\n\n output += `${i + 1}. ${priorityIcon} ${rec.title}\\n`;\n output += ` ${rec.description}\\n`;\n output += ` Difficulty: ${difficultyIcon} | Time: ${rec.estimatedTime}\\n`;\n output += ' Benefits:\\n';\n rec.benefits.forEach((benefit) => {\n output += ` • ${benefit}\\n`;\n });\n output += '\\n';\n }\n\n return output;\n }\n}\n","import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nexport interface ProjectInfo {\n stack: 'react' | 'vue' | 'angular' | 'svelte' | 'vanilla' | 'unknown';\n language: 'typescript' | 'javascript';\n packageManager: 'npm' | 'yarn' | 'pnpm' | 'bun';\n bundler: 'vite' | 'webpack' | 'parcel' | 'rollup' | 'esbuild' | 'none';\n hasESLint: boolean;\n eslintVersion?: 'v8' | 'v9';\n hasPrettier: boolean;\n hasTests: boolean;\n testFramework?: 'vitest' | 'jest' | 'mocha' | 'ava';\n hasBernova: boolean;\n hasStorybook: boolean;\n hasTypeScript: boolean;\n nodeVersion?: string;\n dependencies: Record<string, string>;\n devDependencies: Record<string, string>;\n isMonorepo: boolean;\n monorepoTool?:\n | 'pnpm-workspaces'\n | 'yarn-workspaces'\n | 'npm-workspaces'\n | 'lerna'\n | 'nx'\n | 'turborepo';\n workspaces?: string[];\n}\n\nexport class ProjectDetector {\n constructor(private cwd: string) {}\n\n async detect(): Promise<ProjectInfo> {\n const packageJsonPath = join(this.cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n throw new Error('No package.json found. This does not appear to be a Node.js project.');\n }\n\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };\n const monorepoInfo = this.detectMonorepo(packageJson);\n\n return {\n bundler: this.detectBundler(deps),\n dependencies: packageJson.dependencies || {},\n devDependencies: packageJson.devDependencies || {},\n eslintVersion: this.detectESLintVersion(deps),\n hasBernova: this.detectBernova(deps),\n hasESLint: this.detectESLint(),\n hasPrettier: this.detectPrettier(deps),\n hasStorybook: this.detectStorybook(deps),\n hasTests: this.detectTests(),\n hasTypeScript: this.detectTypeScript(),\n isMonorepo: monorepoInfo.isMonorepo,\n language: this.detectLanguage(),\n monorepoTool: monorepoInfo.tool,\n nodeVersion: packageJson.engines?.node,\n packageManager: this.detectPackageManager(),\n stack: this.detectStack(deps),\n testFramework: this.detectTestFramework(deps),\n workspaces: monorepoInfo.workspaces,\n };\n }\n\n private detectStack(deps: Record<string, string>): ProjectInfo['stack'] {\n if (deps.react) {\n return 'react';\n }\n if (deps.vue) {\n return 'vue';\n }\n if (deps['@angular/core']) {\n return 'angular';\n }\n if (deps.svelte) {\n return 'svelte';\n }\n return 'vanilla';\n }\n\n private detectLanguage(): 'typescript' | 'javascript' {\n return existsSync(join(this.cwd, 'tsconfig.json')) ? 'typescript' : 'javascript';\n }\n\n private detectPackageManager(): ProjectInfo['packageManager'] {\n if (existsSync(join(this.cwd, 'pnpm-lock.yaml'))) {\n return 'pnpm';\n }\n if (existsSync(join(this.cwd, 'yarn.lock'))) {\n return 'yarn';\n }\n if (existsSync(join(this.cwd, 'bun.lockb'))) {\n return 'bun';\n }\n return 'npm';\n }\n\n private detectBundler(deps: Record<string, string>): ProjectInfo['bundler'] {\n if (deps.vite) {\n return 'vite';\n }\n if (deps.webpack) {\n return 'webpack';\n }\n if (deps.parcel) {\n return 'parcel';\n }\n if (deps.rollup) {\n return 'rollup';\n }\n if (deps.esbuild) {\n return 'esbuild';\n }\n return 'none';\n }\n\n private detectESLint(): boolean {\n const configs = [\n 'eslint.config.js',\n 'eslint.config.mjs',\n 'eslint.config.cjs',\n '.eslintrc.js',\n '.eslintrc.cjs',\n '.eslintrc.json',\n '.eslintrc.yml',\n '.eslintrc.yaml',\n ];\n return configs.some((config) => existsSync(join(this.cwd, config)));\n }\n\n private detectESLintVersion(deps: Record<string, string>): 'v8' | 'v9' | undefined {\n const eslintVersion = deps.eslint;\n if (!eslintVersion) {\n return undefined;\n }\n\n const version = eslintVersion.replace(/[^0-9.]/g, '');\n const major = parseInt(version.split('.')[0], 10);\n\n return major >= 9 ? 'v9' : 'v8';\n }\n\n private detectPrettier(deps: Record<string, string>): boolean {\n return !!deps.prettier || existsSync(join(this.cwd, '.prettierrc'));\n }\n\n private detectTests(): boolean {\n const configs = [\n 'vitest.config.ts',\n 'vitest.config.js',\n 'jest.config.js',\n 'jest.config.ts',\n 'mocha.opts',\n 'ava.config.js',\n ];\n return configs.some((config) => existsSync(join(this.cwd, config)));\n }\n\n private detectTestFramework(\n deps: Record<string, string>\n ): ProjectInfo['testFramework'] | undefined {\n if (deps.vitest) {\n return 'vitest';\n }\n if (deps.jest) {\n return 'jest';\n }\n if (deps.mocha) {\n return 'mocha';\n }\n if (deps.ava) {\n return 'ava';\n }\n return undefined;\n }\n\n private detectBernova(deps: Record<string, string>): boolean {\n return !!deps['@kubit-ui-web/react-components'] || !!deps['@kubit-ui-web/kubit-tokens'];\n }\n\n private detectStorybook(deps: Record<string, string>): boolean {\n return !!deps['@storybook/react'] || !!deps['@storybook/vue'] || !!deps.storybook;\n }\n\n private detectTypeScript(): boolean {\n return existsSync(join(this.cwd, 'tsconfig.json'));\n }\n\n private detectMonorepo(packageJson: {\n workspaces?: string[] | { packages?: string[] };\n [key: string]: unknown;\n }): {\n isMonorepo: boolean;\n tool?: ProjectInfo['monorepoTool'];\n workspaces?: string[];\n } {\n let isMonorepo = false;\n let tool: ProjectInfo['monorepoTool'] | undefined;\n let workspaces: string[] | undefined;\n\n // Check for pnpm workspaces\n if (existsSync(join(this.cwd, 'pnpm-workspace.yaml'))) {\n isMonorepo = true;\n tool = 'pnpm-workspaces';\n workspaces = this.parsePnpmWorkspaces();\n }\n\n // Check for Lerna\n if (existsSync(join(this.cwd, 'lerna.json'))) {\n isMonorepo = true;\n tool = 'lerna';\n const lernaConfig = this.parseLernaConfig();\n if (lernaConfig?.packages) {\n workspaces = lernaConfig.packages;\n }\n }\n\n // Check for Nx\n if (existsSync(join(this.cwd, 'nx.json'))) {\n isMonorepo = true;\n tool = 'nx';\n }\n\n // Check for Turborepo\n if (existsSync(join(this.cwd, 'turbo.json'))) {\n isMonorepo = true;\n tool = 'turborepo';\n }\n\n // Check for npm/yarn workspaces in package.json\n if (packageJson.workspaces) {\n isMonorepo = true;\n if (!tool) {\n const pm = this.detectPackageManager();\n tool = pm === 'yarn' ? 'yarn-workspaces' : 'npm-workspaces';\n }\n\n if (Array.isArray(packageJson.workspaces)) {\n workspaces = packageJson.workspaces;\n } else if (packageJson.workspaces && typeof packageJson.workspaces === 'object') {\n const ws = packageJson.workspaces as { packages?: string[] };\n workspaces = ws.packages;\n }\n }\n\n return { isMonorepo, tool, workspaces };\n }\n\n private parsePnpmWorkspaces(): string[] | undefined {\n try {\n const workspaceFile = join(this.cwd, 'pnpm-workspace.yaml');\n if (!existsSync(workspaceFile)) {\n return undefined;\n }\n\n const content = readFileSync(workspaceFile, 'utf-8');\n // Simple YAML parsing for packages array\n const match = content.match(/packages:\\s*\\n((?:\\s+-\\s+['\"]?[^'\"]+['\"]?\\s*\\n?)+)/);\n if (match) {\n const packages = match[1]\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.startsWith('-'))\n .map((line) => line.replace(/^-\\s+['\"]?/, '').replace(/['\"]?\\s*$/, ''));\n return packages;\n }\n } catch {\n // Ignore errors\n }\n return undefined;\n }\n\n private parseLernaConfig(): { packages?: string[] } | undefined {\n try {\n const lernaFile = join(this.cwd, 'lerna.json');\n if (!existsSync(lernaFile)) {\n return undefined;\n }\n\n const content = readFileSync(lernaFile, 'utf-8');\n return JSON.parse(content);\n } catch {\n // Ignore errors\n }\n return undefined;\n }\n}\n","import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\nimport semver from 'semver';\n\nimport type { CommandResult, PluginContext, DoctorResult, DoctorCheck } from '../types/index.js';\n\nimport { DoctorAutoFix } from '../core/doctor-auto-fix.js';\nimport { DoctorIDEIntegration } from '../core/doctor-ide-integration.js';\nimport { DoctorPredictive } from '../core/doctor-predictive.js';\nimport { DoctorRecommendations } from '../core/doctor-recommendations.js';\nimport { ProjectDetector } from '../utils/project-detector.js';\n\nexport interface DoctorCommandOptions {\n fix?: boolean;\n predictive?: boolean;\n format?: 'text' | 'json' | 'vscode' | 'sarif' | 'checkstyle';\n output?: string;\n recommendations?: boolean;\n}\n\nexport async function doctorCommand(\n ctx: PluginContext,\n options: DoctorCommandOptions = {}\n): Promise<CommandResult> {\n ctx.logger.step('🔍 Running comprehensive diagnostics...\\n');\n\n const checks: DoctorCheck[] = [];\n const startTime = Date.now();\n\n // Detect project information\n let projectInfo;\n try {\n const detector = new ProjectDetector(ctx.cwd);\n projectInfo = await detector.detect();\n\n ctx.logger.info('📦 Project Information:');\n ctx.logger.info(` Stack: ${projectInfo.stack}`);\n ctx.logger.info(` Language: ${projectInfo.language}`);\n ctx.logger.info(` Package Manager: ${projectInfo.packageManager}`);\n ctx.logger.info(` Bundler: ${projectInfo.bundler}`);\n ctx.logger.info('');\n } catch {\n ctx.logger.warn('Could not detect project information (not in a project directory?)\\n');\n }\n\n // System checks\n checks.push(await checkNodeVersion(ctx));\n checks.push(await checkPackageManager(ctx));\n checks.push(await checkGit(ctx));\n\n // Project checks\n checks.push(await checkPackageJson(ctx));\n checks.push(await checkConfig(ctx));\n checks.push(await checkDependencies(ctx));\n\n // Environment checks\n checks.push(await checkEnvFiles(ctx));\n\n // Config checks\n if (ctx.config.project.language === 'ts') {\n checks.push(await checkTypeScript(ctx));\n }\n\n // Additional checks if project info is available\n if (projectInfo) {\n checks.push(await checkESLint(ctx, projectInfo));\n checks.push(await checkPrettier(ctx, projectInfo));\n checks.push(await checkTests(ctx, projectInfo));\n checks.push(await checkSecurity(ctx));\n }\n\n const duration = Date.now() - startTime;\n\n // Determine overall status\n const hasErrors = checks.some((c) => c.status === 'error');\n const hasWarnings = checks.some((c) => c.status === 'warning');\n const status = hasErrors ? 'error' : hasWarnings ? 'warning' : 'ok';\n\n // Generate recommendations\n const recommendations: string[] = [];\n for (const check of checks) {\n if (check.status !== 'ok' && check.solution) {\n recommendations.push(check.solution);\n }\n }\n\n // Auto-fix issues if requested\n if (options.fix) {\n ctx.logger.step('\\n🔧 Auto-fixing issues...\\n');\n const autoFix = new DoctorAutoFix(ctx.logger, ctx.cwd);\n const issues = await autoFix.detectIssues();\n const fixableIssues = issues.filter((i) => i.autoFixAvailable);\n\n if (fixableIssues.length > 0) {\n ctx.logger.info(`Found ${fixableIssues.length} fixable issues\\n`);\n const results = await autoFix.fixAll(fixableIssues);\n\n for (const result of results) {\n if (result.fixed) {\n ctx.logger.success(`✓ Fixed: ${result.issue.description}`);\n result.changes.forEach((change) => ctx.logger.info(` - ${change}`));\n } else {\n ctx.logger.error(`✗ Failed to fix: ${result.issue.description}`);\n if (result.error) {\n ctx.logger.error(` Error: ${result.error}`);\n }\n }\n }\n } else {\n ctx.logger.info('No auto-fixable issues found');\n }\n }\n\n // Predictive diagnostics\n if (options.predictive) {\n ctx.logger.step('\\n🔮 Predictive Diagnostics...\\n');\n const predictive = new DoctorPredictive(ctx.logger, ctx.cwd);\n const predictedIssues = await predictive.predictIssues();\n const priorityIssues = predictive.getPriorityRecommendations(predictedIssues);\n\n if (priorityIssues.length > 0) {\n ctx.logger.info('Potential issues detected:\\n');\n for (const issue of priorityIssues) {\n const riskScore = predictive.getRiskScore(issue);\n const icon = issue.severity === 'high' ? '🔴' : issue.severity === 'medium' ? '🟡' : '🟢';\n ctx.logger.info(`${icon} ${issue.description}`);\n ctx.logger.info(` Risk: ${riskScore.toFixed(0)}% | Category: ${issue.category}`);\n ctx.logger.info(' Prevention steps:');\n issue.preventionSteps.slice(0, 2).forEach((step) => {\n ctx.logger.info(` • ${step}`);\n });\n ctx.logger.info('');\n }\n } else {\n ctx.logger.success('No high-risk issues predicted');\n }\n }\n\n // Personalized recommendations\n if (options.recommendations !== false) {\n ctx.logger.step('\\n📋 Personalized Recommendations...\\n');\n const recommendationsEngine = new DoctorRecommendations(ctx.logger, ctx.cwd);\n const personalizedRecs = await recommendationsEngine.generateRecommendations(checks);\n\n if (personalizedRecs.length > 0) {\n const formatted = recommendationsEngine.formatRecommendations(personalizedRecs.slice(0, 5));\n ctx.logger.info(formatted);\n }\n }\n\n const result: DoctorResult = {\n checks,\n recommendations: recommendations.length > 0 ? recommendations : undefined,\n status,\n };\n\n // IDE Integration - Export diagnostics\n if (options.format && options.format !== 'text') {\n const ideIntegration = new DoctorIDEIntegration(ctx.logger, ctx.cwd);\n\n switch (options.format) {\n case 'json':\n ctx.logger.info(JSON.stringify(result, null, 2));\n break;\n\n case 'vscode':\n case 'sarif':\n case 'checkstyle':\n await ideIntegration.saveDiagnostics(checks, options.format, options.output);\n break;\n }\n } else {\n // Display results in terminal\n if (ctx.config) {\n displayDoctorResults(result, ctx);\n }\n }\n\n return {\n data: result,\n message: `Doctor completed in ${duration}ms`,\n status,\n timings: { doctor: duration },\n };\n}\n\nasync function checkNodeVersion(ctx: PluginContext): Promise<DoctorCheck> {\n const currentVersion = process.version;\n const requiredVersion = ctx.config.project.nodeVersion || '20';\n\n const valid = semver.satisfies(currentVersion, `>=${requiredVersion}.0.0`);\n\n return {\n category: 'system',\n message: valid\n ? `Node.js ${currentVersion} (required: >=${requiredVersion})`\n : `Node.js ${currentVersion} detected, required >=${requiredVersion}`,\n name: 'Node.js version',\n solution: valid\n ? undefined\n : `Install Node.js ${requiredVersion} or higher and restart your terminal`,\n status: valid ? 'ok' : 'error',\n };\n}\n\nasync function checkPackageManager(ctx: PluginContext): Promise<DoctorCheck> {\n const pm = ctx.config.project.packageManager;\n const result = await ctx.runner.run(pm, ['--version'], { silent: true });\n\n return {\n category: 'system',\n message:\n result.status === 'ok' ? `${pm} is available` : `${pm} is not installed or not in PATH`,\n name: 'Package manager',\n solution: result.status === 'ok' ? undefined : `Install ${pm}: npm install -g ${pm}`,\n status: result.status === 'ok' ? 'ok' : 'error',\n };\n}\n\nasync function checkGit(ctx: PluginContext): Promise<DoctorCheck> {\n const result = await ctx.runner.run('git', ['--version'], { silent: true });\n\n return {\n category: 'system',\n message: result.status === 'ok' ? 'Git is available' : 'Git is not installed',\n name: 'Git',\n solution: result.status === 'ok' ? undefined : 'Install Git for version control',\n status: result.status === 'ok' ? 'ok' : 'warning',\n };\n}\n\nasync function checkPackageJson(ctx: PluginContext): Promise<DoctorCheck> {\n const packageJsonPath = join(ctx.cwd, 'package.json');\n const exists = existsSync(packageJsonPath);\n\n return {\n category: 'project',\n message: exists ? 'package.json found' : 'package.json not found',\n name: 'package.json',\n solution: exists ? undefined : 'Run: npm init or create a new project with kubit-forge init',\n status: exists ? 'ok' : 'error',\n };\n}\n\nasync function checkConfig(ctx: PluginContext): Promise<DoctorCheck> {\n const configPath = join(ctx.cwd, 'kubit.config.toml');\n const exists = existsSync(configPath);\n\n return {\n category: 'config',\n message: exists ? 'Configuration file found' : 'No kubit.config.toml (using auto-detection)',\n name: 'kubit.config.toml',\n solution: exists ? undefined : 'Consider creating kubit.config.toml for explicit configuration',\n status: exists ? 'ok' : 'warning',\n };\n}\n\nasync function checkDependencies(ctx: PluginContext): Promise<DoctorCheck> {\n const nodeModulesPath = join(ctx.cwd, 'node_modules');\n const exists = existsSync(nodeModulesPath);\n\n return {\n category: 'dependencies',\n message: exists ? 'Dependencies installed' : 'Dependencies not installed',\n name: 'Dependencies',\n solution: exists ? undefined : `Run: ${ctx.config.project.packageManager} install`,\n status: exists ? 'ok' : 'warning',\n };\n}\n\nasync function checkEnvFiles(ctx: PluginContext): Promise<DoctorCheck> {\n const envExamplePath = join(ctx.cwd, ctx.config.paths?.envExample || '.env.example');\n const envLocalPath = join(ctx.cwd, ctx.config.paths?.envLocal || '.env.local');\n\n const hasExample = existsSync(envExamplePath);\n const hasLocal = existsSync(envLocalPath);\n\n if (!hasExample && !hasLocal) {\n return {\n category: 'env',\n message: 'No environment files configured',\n name: 'Environment files',\n status: 'ok',\n };\n }\n\n if (hasExample && !hasLocal) {\n return {\n category: 'env',\n message: '.env.example found but .env.local missing',\n name: 'Environment files',\n solution: 'Run: kubit-forge env init',\n status: 'warning',\n };\n }\n\n return {\n category: 'env',\n message: 'Environment files configured',\n name: 'Environment files',\n status: 'ok',\n };\n}\n\nasync function checkTypeScript(ctx: PluginContext): Promise<DoctorCheck> {\n const tsconfigPath = join(ctx.cwd, 'tsconfig.json');\n const exists = existsSync(tsconfigPath);\n\n return {\n category: 'config',\n message: exists ? 'tsconfig.json found' : 'tsconfig.json not found',\n name: 'TypeScript config',\n solution: exists ? undefined : 'Create tsconfig.json for TypeScript support',\n status: exists ? 'ok' : 'warning',\n };\n}\n\nasync function checkESLint(_ctx: PluginContext, projectInfo: any): Promise<DoctorCheck> {\n if (!projectInfo.hasESLint) {\n return {\n category: 'quality',\n message: 'ESLint not configured',\n name: 'ESLint',\n solution: 'Run: kubit-forge add eslint',\n status: 'warning',\n };\n }\n\n const message =\n projectInfo.eslintVersion === 'v8'\n ? `ESLint ${projectInfo.eslintVersion} (consider upgrading to v9)`\n : `ESLint ${projectInfo.eslintVersion || 'configured'}`;\n\n return {\n category: 'quality',\n message,\n name: 'ESLint',\n solution:\n projectInfo.eslintVersion === 'v8'\n ? 'Run: kubit-forge migrate eslint-legacy-to-flat'\n : undefined,\n status: 'ok',\n };\n}\n\nasync function checkPrettier(_ctx: PluginContext, projectInfo: any): Promise<DoctorCheck> {\n return {\n category: 'quality',\n message: projectInfo.hasPrettier ? 'Prettier configured' : 'Prettier not configured',\n name: 'Prettier',\n solution: projectInfo.hasPrettier ? undefined : 'Run: kubit-forge add prettier',\n status: projectInfo.hasPrettier ? 'ok' : 'warning',\n };\n}\n\nasync function checkTests(_ctx: PluginContext, projectInfo: any): Promise<DoctorCheck> {\n if (!projectInfo.hasTests) {\n return {\n category: 'quality',\n message: 'No test framework configured',\n name: 'Testing',\n solution: 'Run: kubit-forge add vitest',\n status: 'warning',\n };\n }\n\n const message =\n projectInfo.testFramework === 'jest'\n ? `${projectInfo.testFramework} (consider migrating to Vitest)`\n : `${projectInfo.testFramework} configured`;\n\n return {\n category: 'quality',\n message,\n name: 'Testing',\n solution:\n projectInfo.testFramework === 'jest' ? 'Run: kubit-forge migrate jest-to-vitest' : undefined,\n status: 'ok',\n };\n}\n\nasync function checkSecurity(ctx: PluginContext): Promise<DoctorCheck> {\n const gitignorePath = join(ctx.cwd, '.gitignore');\n const envPath = join(ctx.cwd, '.env');\n\n if (existsSync(envPath) && existsSync(gitignorePath)) {\n const gitignore = readFileSync(gitignorePath, 'utf-8');\n if (!gitignore.includes('.env')) {\n return {\n category: 'security',\n message: '.env file exists but not in .gitignore',\n name: 'Security',\n solution: 'Add .env to .gitignore to prevent committing secrets',\n status: 'error',\n };\n }\n }\n\n return {\n category: 'security',\n message: 'No obvious security issues detected',\n name: 'Security',\n status: 'ok',\n };\n}\n\nfunction displayDoctorResults(result: DoctorResult, ctx: PluginContext): void {\n ctx.logger.info('');\n ctx.logger.info('═'.repeat(60));\n ctx.logger.info('Diagnostics Results:');\n ctx.logger.info('═'.repeat(60));\n ctx.logger.info('');\n\n // Group checks by category\n const categories = ['system', 'project', 'dependencies', 'config', 'env', 'quality', 'security'];\n\n for (const category of categories) {\n const categoryChecks = result.checks.filter((c) => c.category === category);\n if (categoryChecks.length === 0) {\n continue;\n }\n\n const categoryName = category.charAt(0).toUpperCase() + category.slice(1);\n ctx.logger.info(`${categoryName}:`);\n\n for (const check of categoryChecks) {\n const icon =\n check.status === 'ok'\n ? '✔'\n : check.status === 'warning'\n ? '⚠'\n : check.status === 'error'\n ? '✖'\n : 'ℹ';\n const color =\n check.status === 'ok'\n ? 'success'\n : check.status === 'warning'\n ? 'warn'\n : check.status === 'error'\n ? 'error'\n : 'info';\n\n if (color === 'success') {\n ctx.logger.success(` ${icon} ${check.name}: ${check.message}`);\n } else if (color === 'warn') {\n ctx.logger.warn(` ${icon} ${check.name}: ${check.message}`);\n } else if (color === 'error') {\n ctx.logger.error(` ${icon} ${check.name}: ${check.message}`);\n } else {\n ctx.logger.info(` ${icon} ${check.name}: ${check.message}`);\n }\n\n if (check.solution) {\n ctx.logger.info(` → ${check.solution}`);\n }\n }\n ctx.logger.info('');\n }\n\n if (result.recommendations && result.recommendations.length > 0) {\n ctx.logger.info('💡 Recommendations:');\n for (const rec of result.recommendations) {\n ctx.logger.info(` • ${rec}`);\n }\n ctx.logger.info('');\n }\n\n ctx.logger.info('═'.repeat(60));\n if (result.status === 'ok') {\n ctx.logger.success('✨ All checks passed! Your project is in great shape!');\n } else if (result.status === 'warning') {\n ctx.logger.warn('⚠️ Some warnings found. Consider addressing them.');\n } else {\n ctx.logger.error('❌ Some checks failed. Please fix the errors above.');\n }\n ctx.logger.info('═'.repeat(60));\n}\n","import type { Logger } from '../types/index.js';\n\n/**\n * Template information from registry\n */\nexport interface TemplateInfo {\n /** Template name */\n name: string;\n /** Template version */\n version: string;\n /** Description */\n description: string;\n /** Author */\n author: string;\n /** Stack (react, vanilla, etc.) */\n stack: 'react' | 'vanilla' | 'vue' | 'svelte';\n /** Whether this is an official template */\n official: boolean;\n /** Features included */\n features: string[];\n /** Repository URL */\n repository?: string;\n /** Preview URL */\n preview?: string;\n /** Tags */\n tags?: string[];\n}\n\n/**\n * Template registry client\n *\n * Manages template discovery and usage.\n */\nexport class TemplateRegistry {\n private logger: Logger;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Search for templates\n *\n * @param query - Search query\n * @param options - Search options\n * @returns Array of matching templates\n */\n async search(\n query: string,\n options: { stack?: string; official?: boolean } = {}\n ): Promise<TemplateInfo[]> {\n this.logger.debug(`Searching templates: ${query}`);\n\n // Mock templates - All available templates from create command\n const mockTemplates: TemplateInfo[] = [\n {\n author: 'Kubit Team',\n description: 'React app with Kubit UI Components and Design System',\n features: ['React', 'Kubit UI Components', 'Design System', 'TypeScript', 'Vite'],\n name: 'kubit/react-kubit-ui',\n official: true,\n repository: 'https://github.com/kubit-ui/templates',\n stack: 'react',\n tags: ['react', 'kubit-ui', 'design-system', 'components'],\n version: '3.0.0',\n },\n {\n author: 'Kubit Team',\n description: 'Modern React app with TypeScript, Vite and Bernova Design System',\n features: ['TypeScript', 'Vite', 'Bernova Design System', 'Vitest', 'ESLint', 'Prettier'],\n name: 'kubit/react-recommended',\n official: true,\n repository: 'https://github.com/kubit-ui/templates',\n stack: 'react',\n tags: ['react', 'typescript', 'bernova', 'recommended'],\n version: '3.0.0',\n },\n {\n author: 'Kubit Team',\n description: 'React with Bernova Design System and Vitest testing',\n features: ['React', 'Bernova Design System', 'Vitest', 'TypeScript'],\n name: 'kubit/react-minimal',\n official: true,\n repository: 'https://github.com/kubit-ui/templates',\n stack: 'react',\n tags: ['react', 'bernova', 'minimal', 'testing'],\n version: '3.0.0',\n },\n {\n author: 'Kubit Team',\n description: 'Publishable React component library with Bernova',\n features: ['React', 'Component Library', 'Bernova', 'TypeScript', 'Rollup'],\n name: 'kubit/react-lib-bernova',\n official: true,\n repository: 'https://github.com/kubit-ui/templates',\n stack: 'react',\n tags: ['react', 'library', 'bernova', 'components'],\n version: '3.0.0',\n },\n {\n author: 'Kubit Team',\n description: 'Pure TypeScript without frameworks',\n features: ['TypeScript', 'Vite', 'Vitest', 'ESLint'],\n name: 'kubit/vanilla-ts',\n official: true,\n repository: 'https://github.com/kubit-ui/templates',\n stack: 'vanilla',\n tags: ['vanilla', 'typescript', 'no-framework'],\n version: '3.0.0',\n },\n {\n author: 'Kubit Team',\n description: 'Pure JavaScript without frameworks',\n features: ['JavaScript', 'Vite', 'ESLint'],\n name: 'kubit/vanilla-js',\n official: true,\n repository: 'https://github.com/kubit-ui/templates',\n stack: 'vanilla',\n tags: ['vanilla', 'javascript', 'no-framework'],\n version: '3.0.0',\n },\n ];\n\n let results = mockTemplates.filter(\n (t) =>\n t.name.toLowerCase().includes(query.toLowerCase()) ||\n t.description.toLowerCase().includes(query.toLowerCase()) ||\n t.tags?.some((tag) => tag.toLowerCase().includes(query.toLowerCase()))\n );\n\n if (options.stack) {\n results = results.filter((t) => t.stack === options.stack);\n }\n\n if (options.official !== undefined) {\n results = results.filter((t) => t.official === options.official);\n }\n\n return results;\n }\n\n /**\n * Get template information\n *\n * @param name - Template name\n * @returns Template info or null\n */\n async getInfo(name: string): Promise<TemplateInfo | null> {\n const results = await this.search(name);\n return results.find((t) => t.name === name) || null;\n }\n\n /**\n * Get featured templates\n *\n * @returns Array of featured templates\n */\n async getFeatured(): Promise<TemplateInfo[]> {\n return this.search('', { official: true });\n }\n}\n","import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext, CommandResult } from '../types/index.js';\n\nexport interface BuildOptions {\n mode?: 'production' | 'development';\n analyze?: boolean;\n sourcemap?: boolean;\n}\n\n/**\n * Build project for production\n * Detects and runs the appropriate build tool (Vite, Webpack, etc.)\n */\nexport async function buildCommand(\n options: BuildOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n try {\n // Trigger build:before hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('build:before', options);\n }\n\n ctx.logger.step('Building project for production...');\n\n // Detect which build tool to use\n const buildTool = detectBuildTool(ctx.cwd);\n\n if (!buildTool) {\n return {\n message:\n 'No build configuration found. Run `kubit-forge add vite` or `kubit-forge add webpack` first.',\n status: 'error',\n };\n }\n\n ctx.logger.info(`Using ${buildTool.name} for build`);\n\n // Build command args\n const args = buildBuildArgs(buildTool, options);\n\n // Execute build\n const result = await ctx.runner.run(buildTool.command, args);\n\n if (result.status === 'error') {\n // Trigger build:error hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('build:error', new Error('Build failed'));\n }\n\n return {\n message: `Build failed with ${buildTool.name}`,\n status: 'error',\n };\n }\n\n ctx.logger.success('✓ Build completed successfully!');\n\n // Trigger build:after hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('build:after', options, result);\n }\n\n return {\n message: 'Build completed',\n status: 'ok',\n };\n } catch (error) {\n // Trigger build:error hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('build:error', error);\n }\n throw error;\n }\n}\n\ninterface BuildTool {\n name: string;\n command: string;\n configFile: string;\n}\n\nfunction detectBuildTool(cwd: string): BuildTool | null {\n // Check for Vite\n if (existsSync(join(cwd, 'vite.config.ts')) || existsSync(join(cwd, 'vite.config.js'))) {\n return {\n command: 'vite',\n configFile: 'vite.config',\n name: 'Vite',\n };\n }\n\n // Check for Webpack\n if (existsSync(join(cwd, 'webpack.config.js')) || existsSync(join(cwd, 'webpack.config.ts'))) {\n return {\n command: 'webpack',\n configFile: 'webpack.config',\n name: 'Webpack',\n };\n }\n\n // Check for Next.js\n if (existsSync(join(cwd, 'next.config.js')) || existsSync(join(cwd, 'next.config.mjs'))) {\n return {\n command: 'next',\n configFile: 'next.config',\n name: 'Next.js',\n };\n }\n\n // Check for package.json scripts\n const packageJsonPath = join(cwd, 'package.json');\n if (existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n if (packageJson.scripts?.build) {\n return {\n command: 'npm',\n configFile: 'package.json',\n name: 'npm script',\n };\n }\n }\n\n return null;\n}\n\nfunction buildBuildArgs(buildTool: BuildTool, options: BuildOptions): string[] {\n const args: string[] = [];\n\n // Vite args\n if (buildTool.name === 'Vite') {\n args.push('build');\n if (options.mode) {\n args.push('--mode', options.mode);\n }\n if (options.sourcemap) {\n args.push('--sourcemap');\n }\n return args;\n }\n\n // Webpack args\n if (buildTool.name === 'Webpack') {\n if (options.mode) {\n args.push('--mode', options.mode);\n }\n if (options.analyze) {\n args.push('--analyze');\n }\n return args;\n }\n\n // Next.js args\n if (buildTool.name === 'Next.js') {\n args.push('build');\n return args;\n }\n\n // npm script\n if (buildTool.name === 'npm script') {\n args.push('run', 'build');\n return args;\n }\n\n return args;\n}\n","import { existsSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext, CommandResult } from '../types/index.js';\n\nexport interface LintOptions {\n fix?: boolean;\n cache?: boolean;\n quiet?: boolean;\n}\n\n/**\n * Run linter\n * Detects and runs ESLint with appropriate configuration\n */\nexport async function lintCommand(\n options: LintOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n // Trigger lint:before hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('lint:before', options);\n }\n\n ctx.logger.step('Running linter...');\n\n // Check if ESLint is configured\n if (!hasESLintConfig(ctx.cwd)) {\n return {\n message: 'No ESLint configuration found. Run `kubit-forge add eslint` first.',\n status: 'error',\n };\n }\n\n ctx.logger.info('Using ESLint');\n\n // Build command args\n const args = buildLintArgs(options);\n\n // Execute ESLint\n const result = await ctx.runner.run('eslint', args);\n\n if (result.status === 'error') {\n return {\n message: 'Linting failed - please fix the errors above',\n status: 'error',\n };\n }\n\n ctx.logger.success('✓ No linting errors found!');\n\n // Trigger lint:after hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('lint:after', result);\n }\n\n return {\n message: 'Linting completed',\n status: 'ok',\n };\n}\n\nfunction hasESLintConfig(cwd: string): boolean {\n const configFiles = [\n 'eslint.config.js',\n 'eslint.config.mjs',\n 'eslint.config.cjs',\n '.eslintrc.js',\n '.eslintrc.cjs',\n '.eslintrc.json',\n '.eslintrc.yml',\n '.eslintrc.yaml',\n '.eslintrc',\n ];\n\n return configFiles.some((file) => existsSync(join(cwd, file)));\n}\n\nfunction buildLintArgs(options: LintOptions): string[] {\n const args: string[] = ['.'];\n\n if (options.fix) {\n args.push('--fix');\n }\n\n if (options.cache) {\n args.push('--cache');\n }\n\n if (options.quiet) {\n args.push('--quiet');\n }\n\n // Add common patterns\n args.push('--ext', '.js,.jsx,.ts,.tsx');\n\n return args;\n}\n","import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext, CommandResult } from '../types/index.js';\n\nexport interface TestOptions {\n watch?: boolean;\n coverage?: boolean;\n ui?: boolean;\n run?: boolean;\n}\n\n/**\n * Run tests\n * Detects and runs the appropriate test runner (Jest, Vitest, etc.)\n */\nexport async function testCommand(\n options: TestOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n try {\n // Trigger test:before hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('test:before', options);\n }\n\n ctx.logger.step('Running tests...');\n\n // Detect which test runner to use\n const testRunner = detectTestRunner(ctx.cwd);\n\n if (!testRunner) {\n return {\n message:\n 'No test configuration found. Run `kubit-forge add jest` or `kubit-forge add vitest` first.',\n status: 'error',\n };\n }\n\n ctx.logger.info(`Using ${testRunner.name} test runner`);\n\n // Build command args\n const args = buildTestArgs(testRunner, options);\n\n // Execute tests\n const result = await ctx.runner.run(testRunner.command, args);\n\n if (result.status === 'error') {\n // Trigger test:error hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('test:error', new Error('Tests failed'));\n }\n\n return {\n message: `Tests failed with ${testRunner.name}`,\n status: 'error',\n };\n }\n\n ctx.logger.success('✓ All tests passed!');\n\n // Trigger test:after hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('test:after', result);\n }\n\n return {\n message: 'Tests completed',\n status: 'ok',\n };\n } catch (error) {\n // Trigger test:error hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('test:error', error);\n }\n throw error;\n }\n}\n\ninterface TestRunner {\n name: string;\n command: string;\n configFile: string;\n}\n\nfunction detectTestRunner(cwd: string): TestRunner | null {\n // Check for Vitest\n if (existsSync(join(cwd, 'vitest.config.ts')) || existsSync(join(cwd, 'vitest.config.js'))) {\n return {\n command: 'vitest',\n configFile: 'vitest.config',\n name: 'Vitest',\n };\n }\n\n // Check for Jest\n if (\n existsSync(join(cwd, 'jest.config.ts')) ||\n existsSync(join(cwd, 'jest.config.js')) ||\n existsSync(join(cwd, 'jest.config.json'))\n ) {\n return {\n command: 'jest',\n configFile: 'jest.config',\n name: 'Jest',\n };\n }\n\n // Check for Playwright\n if (\n existsSync(join(cwd, 'playwright.config.ts')) ||\n existsSync(join(cwd, 'playwright.config.js'))\n ) {\n return {\n command: 'playwright',\n configFile: 'playwright.config',\n name: 'Playwright',\n };\n }\n\n // Check for Cypress\n if (existsSync(join(cwd, 'cypress.config.ts')) || existsSync(join(cwd, 'cypress.config.js'))) {\n return {\n command: 'cypress',\n configFile: 'cypress.config',\n name: 'Cypress',\n };\n }\n\n // Check for package.json scripts\n const packageJsonPath = join(cwd, 'package.json');\n if (existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n if (packageJson.scripts?.test) {\n return {\n command: 'npm',\n configFile: 'package.json',\n name: 'npm script',\n };\n }\n }\n\n return null;\n}\n\nfunction buildTestArgs(testRunner: TestRunner, options: TestOptions): string[] {\n const args: string[] = [];\n\n // Vitest args\n if (testRunner.name === 'Vitest') {\n if (options.watch) {\n args.push('--watch');\n }\n if (options.coverage) {\n args.push('--coverage');\n }\n if (options.ui) {\n args.push('--ui');\n }\n if (options.run) {\n args.push('run');\n }\n return args;\n }\n\n // Jest args\n if (testRunner.name === 'Jest') {\n if (options.watch) {\n args.push('--watch');\n }\n if (options.coverage) {\n args.push('--coverage');\n }\n return args;\n }\n\n // Playwright args\n if (testRunner.name === 'Playwright') {\n args.push('test');\n if (options.ui) {\n args.push('--ui');\n }\n return args;\n }\n\n // Cypress args\n if (testRunner.name === 'Cypress') {\n if (options.run) {\n args.push('run');\n } else {\n args.push('open');\n }\n return args;\n }\n\n // npm script\n if (testRunner.name === 'npm script') {\n args.push('run', 'test');\n return args;\n }\n\n return args;\n}\n","/**\n * Command Runner Component\n * Execute commands from the UI\n */\n\nimport { Box, Text, useInput } from 'ink';\nimport SelectInput from 'ink-select-input';\nimport Spinner from 'ink-spinner';\nimport React, { useState } from 'react';\n\nimport type { PluginContext } from '../../types/index.js';\n\nexport interface CommandRunnerProps {\n ctx: PluginContext;\n}\n\ninterface CommandItem {\n label: string;\n value: string;\n}\n\nexport const CommandRunner: React.FC<CommandRunnerProps> = ({ ctx: _ctx }) => {\n const [selectedCommand, setSelectedCommand] = useState<string | null>(null);\n const [isRunning, setIsRunning] = useState(false);\n const [output, setOutput] = useState<string[]>([]);\n\n const commands: CommandItem[] = [\n { label: '🏗️ Build', value: 'build' },\n { label: '🧪 Test', value: 'test' },\n { label: '🔍 Lint', value: 'lint' },\n { label: '📝 Format', value: 'format' },\n { label: '🏥 Doctor', value: 'doctor' },\n { label: '🔄 Install', value: 'install' },\n ];\n\n const handleSelect = (item: CommandItem) => {\n setSelectedCommand(item.value);\n setIsRunning(true);\n setOutput([`Running ${item.label}...`]);\n\n // Simulate command execution\n setTimeout(() => {\n setOutput((prev) => [...prev, `✓ ${item.label} completed successfully`]);\n setIsRunning(false);\n }, 2000);\n };\n\n useInput((input) => {\n if (input === 'c' && !isRunning) {\n setSelectedCommand(null);\n setOutput([]);\n }\n });\n\n return (\n <Box flexDirection=\"column\">\n <Box borderStyle=\"round\" borderColor=\"cyan\" paddingX={2} paddingY={1}>\n <Box flexDirection=\"column\" width=\"100%\">\n <Text color=\"cyan\" bold>\n ⚡ Command Runner\n </Text>\n <Text dimColor>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n\n {!selectedCommand && !isRunning && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text dimColor>Select a command to run:</Text>\n <Box marginTop={1}>\n <SelectInput items={commands} onSelect={handleSelect} />\n </Box>\n </Box>\n )}\n\n {isRunning && (\n <Box marginTop={1} flexDirection=\"column\">\n <Box>\n <Text color=\"cyan\">\n <Spinner type=\"dots\" />\n </Text>\n <Text> Executing command...</Text>\n </Box>\n </Box>\n )}\n\n {output.length > 0 && (\n <Box marginTop={1} flexDirection=\"column\">\n <Text color=\"yellow\" bold>\n Output:\n </Text>\n {output.map((line, i) => (\n <Text key={i}>{line}</Text>\n ))}\n {!isRunning && (\n <Box marginTop={1}>\n <Text dimColor>Press </Text>\n <Text color=\"cyan\">c</Text>\n <Text dimColor> to clear and run another command</Text>\n </Box>\n )}\n </Box>\n )}\n </Box>\n </Box>\n </Box>\n );\n};\n","/**\n * Live Logs Component\n * Real-time log streaming\n */\n\nimport { Box, Text } from 'ink';\nimport React, { useState, useEffect } from 'react';\n\nimport type { PluginContext } from '../../types/index.js';\n\nexport interface LiveLogsProps {\n ctx: PluginContext;\n}\n\ninterface LogEntry {\n timestamp: Date;\n level: 'info' | 'warn' | 'error' | 'success';\n message: string;\n}\n\nexport const LiveLogs: React.FC<LiveLogsProps> = () => {\n const [logs, setLogs] = useState<LogEntry[]>([]);\n const [isPaused] = useState(false);\n\n useEffect(() => {\n if (isPaused) {\n return;\n }\n\n // Simulate log streaming\n const interval = setInterval(() => {\n const messages = [\n { level: 'info' as const, message: 'Processing file...' },\n { level: 'success' as const, message: 'Build completed' },\n { level: 'warn' as const, message: 'Deprecated API usage detected' },\n { level: 'info' as const, message: 'Running tests...' },\n ];\n\n const randomMessage = messages[Math.floor(Math.random() * messages.length)];\n\n setLogs((prev) => [\n ...prev.slice(-19), // Keep last 20 logs\n {\n timestamp: new Date(),\n ...randomMessage,\n },\n ]);\n }, 2000);\n\n return () => clearInterval(interval);\n }, [isPaused]);\n\n const getLevelColor = (level: LogEntry['level']) => {\n switch (level) {\n case 'info':\n return 'cyan';\n case 'warn':\n return 'yellow';\n case 'error':\n return 'red';\n case 'success':\n return 'green';\n default:\n return 'white';\n }\n };\n\n const getLevelIcon = (level: LogEntry['level']) => {\n switch (level) {\n case 'info':\n return 'ℹ';\n case 'warn':\n return '⚠';\n case 'error':\n return '✗';\n case 'success':\n return '✓';\n default:\n return '•';\n }\n };\n\n return (\n <Box flexDirection=\"column\">\n <Box borderStyle=\"round\" borderColor=\"cyan\" paddingX={2} paddingY={1}>\n <Box flexDirection=\"column\" width=\"100%\">\n <Box justifyContent=\"space-between\">\n <Text color=\"cyan\" bold>\n 📋 Live Logs\n </Text>\n <Box>\n <Text dimColor>Status: </Text>\n <Text color={isPaused ? 'yellow' : 'green'}>{isPaused ? 'Paused' : 'Streaming'}</Text>\n </Box>\n </Box>\n <Text dimColor>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n\n <Box marginTop={1} flexDirection=\"column\" height={15}>\n {logs.length === 0 ? (\n <Text dimColor>Waiting for logs...</Text>\n ) : (\n logs.map((log, i) => (\n <Box key={i}>\n <Text dimColor>[{log.timestamp.toLocaleTimeString()}]</Text>\n <Text color={getLevelColor(log.level)}> {getLevelIcon(log.level)}</Text>\n <Text> {log.message}</Text>\n </Box>\n ))\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>Press </Text>\n <Text color=\"cyan\">p</Text>\n <Text dimColor> to pause/resume | </Text>\n <Text color=\"cyan\">c</Text>\n <Text dimColor> to clear logs</Text>\n </Box>\n </Box>\n </Box>\n </Box>\n );\n};\n","/**\n * Plugin Manager Component\n * Visual plugin management\n */\n\nimport { Box, Text } from 'ink';\nimport React from 'react';\n\nimport type { PluginContext } from '../../types/index.js';\n\nexport interface PluginManagerProps {\n ctx: PluginContext;\n}\n\nexport const PluginManager: React.FC<PluginManagerProps> = () => {\n const plugins = [\n { name: '@kubit/plugin-react', status: 'active', version: '1.0.0' },\n { name: '@kubit/plugin-typescript', status: 'active', version: '2.1.0' },\n { name: '@kubit/plugin-eslint', status: 'inactive', version: '1.5.0' },\n ];\n\n return (\n <Box flexDirection=\"column\">\n <Box borderStyle=\"round\" borderColor=\"cyan\" paddingX={2} paddingY={1}>\n <Box flexDirection=\"column\" width=\"100%\">\n <Text color=\"cyan\" bold>\n 🔌 Plugin Manager\n </Text>\n <Text dimColor>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n {plugins.map((plugin, i) => (\n <Box key={i} marginY={0.5}>\n <Text color={plugin.status === 'active' ? 'green' : 'gray'}>\n {plugin.status === 'active' ? '●' : '○'}\n </Text>\n <Text> {plugin.name}</Text>\n <Text dimColor> v{plugin.version}</Text>\n </Box>\n ))}\n </Box>\n </Box>\n </Box>\n </Box>\n );\n};\n","/**\n * Project Status Component\n * Shows real-time project health and status\n */\n\nimport { Box, Text } from 'ink';\nimport React from 'react';\n\nimport type { PluginContext } from '../../types/index.js';\n\ninterface ProjectData {\n name: string;\n version: string;\n status: string;\n dependencies: number;\n devDependencies: number;\n lastBuild: string;\n}\n\nexport interface ProjectStatusProps {\n ctx: PluginContext;\n data: ProjectData | null;\n}\n\nexport const ProjectStatus: React.FC<ProjectStatusProps> = ({ ctx: _ctx, data }) => {\n if (!data) {\n return (\n <Box borderStyle=\"round\" borderColor=\"gray\" padding={1}>\n <Text dimColor>No project data available</Text>\n </Box>\n );\n }\n\n const statusColor = data.status === 'healthy' ? 'green' : 'yellow';\n const statusIcon = data.status === 'healthy' ? '✓' : '⚠';\n\n return (\n <Box flexDirection=\"column\">\n <Box borderStyle=\"round\" borderColor=\"cyan\" paddingX={2} paddingY={1}>\n <Box flexDirection=\"column\" width=\"100%\">\n <Text color=\"cyan\" bold>\n 📦 Project Status\n </Text>\n <Text dimColor>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Box justifyContent=\"space-between\">\n <Box>\n <Text bold>{data.name}</Text>\n <Text dimColor> v{data.version}</Text>\n </Box>\n <Box>\n <Text color={statusColor}>{statusIcon}</Text>\n <Text color={statusColor}> {data.status}</Text>\n </Box>\n </Box>\n\n <Box marginTop={1} gap={4}>\n <Box flexDirection=\"column\">\n <Text dimColor>Dependencies</Text>\n <Text color=\"yellow\" bold>\n {data.dependencies}\n </Text>\n </Box>\n\n <Box flexDirection=\"column\">\n <Text dimColor>Dev Dependencies</Text>\n <Text color=\"yellow\" bold>\n {data.devDependencies}\n </Text>\n </Box>\n\n <Box flexDirection=\"column\">\n <Text dimColor>Last Build</Text>\n <Text color=\"green\">{new Date(data.lastBuild).toLocaleTimeString()}</Text>\n </Box>\n </Box>\n </Box>\n </Box>\n </Box>\n </Box>\n );\n};\n","/**\n * Quick Actions Component\n * Quick access buttons\n */\n\nimport { Box, Text } from 'ink';\nimport React from 'react';\n\nimport type { PluginContext } from '../../types/index.js';\n\nexport interface QuickActionsProps {\n ctx: PluginContext;\n}\n\nexport const QuickActions: React.FC<QuickActionsProps> = () => {\n const actions = [\n { icon: '🏗️', key: 'b', label: 'Build' },\n { icon: '🧪', key: 't', label: 'Test' },\n { icon: '🔍', key: 'l', label: 'Lint' },\n { icon: '🏥', key: 'd', label: 'Doctor' },\n { icon: '📦', key: '6', label: 'Templates' },\n ];\n\n return (\n <Box borderStyle=\"round\" borderColor=\"gray\" paddingX={2} paddingY={1}>\n <Box flexDirection=\"column\" width=\"100%\">\n <Text color=\"cyan\" bold>\n ⚡ Quick Actions\n </Text>\n <Text dimColor>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n\n <Box marginTop={1} gap={2}>\n {actions.map((action, i) => (\n <Box key={i}>\n <Text color=\"cyan\">[{action.key}]</Text>\n <Text>\n {' '}\n {action.icon} {action.label}\n </Text>\n </Box>\n ))}\n </Box>\n </Box>\n </Box>\n );\n};\n","/**\n * System Metrics Component\n * Real-time system metrics\n */\n\nimport { Box, Text } from 'ink';\nimport React, { useState, useEffect } from 'react';\n\nimport type { PluginContext } from '../../types/index.js';\n\nexport interface SystemMetricsProps {\n ctx: PluginContext;\n}\n\nexport const SystemMetrics: React.FC<SystemMetricsProps> = () => {\n const [metrics, setMetrics] = useState({\n cpu: 0,\n memory: 0,\n uptime: 0,\n });\n\n useEffect(() => {\n const interval = setInterval(() => {\n setMetrics({\n cpu: Math.floor(Math.random() * 100),\n memory: Math.round(process.memoryUsage().heapUsed / 1024 / 1024),\n uptime: Math.round(process.uptime()),\n });\n }, 1000);\n\n return () => clearInterval(interval);\n }, []);\n\n return (\n <Box flexDirection=\"column\">\n <Box borderStyle=\"round\" borderColor=\"cyan\" paddingX={2} paddingY={1}>\n <Box flexDirection=\"column\" width=\"100%\">\n <Text color=\"cyan\" bold>\n 📊 System Metrics\n </Text>\n <Text dimColor>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n\n <Box marginTop={1} flexDirection=\"column\">\n <Box justifyContent=\"space-between\">\n <Text>CPU Usage:</Text>\n <Text color=\"yellow\">{metrics.cpu}%</Text>\n </Box>\n <Box justifyContent=\"space-between\">\n <Text>Memory:</Text>\n <Text color=\"yellow\">{metrics.memory}MB</Text>\n </Box>\n <Box justifyContent=\"space-between\">\n <Text>Uptime:</Text>\n <Text color=\"green\">{metrics.uptime}s</Text>\n </Box>\n </Box>\n </Box>\n </Box>\n </Box>\n );\n};\n","/**\n * Template Installer Component\n * Interactive template installation from dashboard\n */\n\nimport { Box, Text, useInput, useApp } from 'ink';\nimport Spinner from 'ink-spinner';\nimport React, { useState, useEffect } from 'react';\n\nimport type { PluginContext } from '../../types/index.js';\n\nimport { TemplateRegistry, type TemplateInfo } from '../../core/template-registry.js';\n\nexport interface TemplateInstallerProps {\n ctx: PluginContext;\n onBack?: () => void;\n}\n\nexport const TemplateInstaller: React.FC<TemplateInstallerProps> = ({ ctx, onBack }) => {\n const { exit } = useApp();\n const [templates, setTemplates] = useState<TemplateInfo[]>([]);\n const [selectedIndex, setSelectedIndex] = useState(0);\n const [isLoading, setIsLoading] = useState(true);\n const [showDetails, setShowDetails] = useState(false);\n\n // Load templates\n useEffect(() => {\n const loadTemplates = async () => {\n setIsLoading(true);\n try {\n const registry = new TemplateRegistry(ctx.logger);\n const featured = await registry.getFeatured();\n setTemplates(featured);\n } catch (error) {\n ctx.logger.error('Failed to load templates', error as Error);\n } finally {\n setIsLoading(false);\n }\n };\n\n loadTemplates();\n }, []);\n\n // Keyboard navigation\n useInput(async (input, key) => {\n if (key.escape || input === 'b') {\n onBack?.();\n return;\n }\n\n if (key.upArrow) {\n setSelectedIndex((prev) => Math.max(0, prev - 1));\n }\n\n if (key.downArrow) {\n setSelectedIndex((prev) => Math.min(templates.length - 1, prev + 1));\n }\n\n if (input === 'i' || key.return) {\n setShowDetails(!showDetails);\n }\n\n if (input === 'c' && !showDetails) {\n // Create project with selected template\n await installTemplate(templates[selectedIndex]);\n }\n });\n\n const installTemplate = async (template: TemplateInfo) => {\n const templateValue = mapTemplateToValue(template);\n\n // Store the template selection in a global variable that the dashboard can read\n (global as any).__selectedTemplate = templateValue;\n\n // Show message\n ctx.logger.info(`\\n✨ Template seleccionado: ${template.name}`);\n ctx.logger.info('🚀 Cerrando dashboard e iniciando wizard de creación...\\n');\n\n // Exit the dashboard - the parent command will show instructions\n exit();\n };\n\n const mapTemplateToValue = (template: TemplateInfo): string => {\n // Map registry template names to create command template values\n const nameMap: Record<string, string> = {\n 'kubit/react-kubit-ui': 'react-kubit-ui',\n 'kubit/react-lib-bernova': 'react-lib-bernova',\n 'kubit/react-minimal': 'react-bernova',\n 'kubit/react-recommended': 'react-ts-vite-bernova',\n 'kubit/vanilla-js': 'vanilla-js',\n 'kubit/vanilla-ts': 'vanilla-ts',\n };\n\n return nameMap[template.name] || 'react-ts-vite-bernova';\n };\n\n if (isLoading) {\n return (\n <Box flexDirection=\"column\" padding={1}>\n <Box>\n <Text color=\"cyan\">\n <Spinner type=\"dots\" />\n </Text>\n <Text> Loading templates...</Text>\n </Box>\n </Box>\n );\n }\n\n const selectedTemplate = templates[selectedIndex];\n\n return (\n <Box flexDirection=\"column\">\n {/* Header */}\n <Box borderStyle=\"round\" borderColor=\"cyan\" paddingX={2} paddingY={1} marginBottom={1}>\n <Box flexDirection=\"column\" width=\"100%\">\n <Text color=\"cyan\" bold>\n 📦 Template Installer\n </Text>\n <Text dimColor>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n <Box marginTop={1}>\n <Text dimColor>\n Use <Text color=\"cyan\">↑/↓</Text> to navigate, <Text color=\"cyan\">i/Enter</Text> for\n details, <Text color=\"cyan\">c</Text> to create, <Text color=\"red\">b/ESC</Text> to go\n back\n </Text>\n </Box>\n </Box>\n </Box>\n\n {/* Template List */}\n <Box flexDirection=\"row\" gap={2}>\n {/* Left: Template List */}\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor=\"gray\"\n paddingX={2}\n paddingY={1}\n width={50}\n >\n <Text color=\"cyan\" bold>\n Available Templates\n </Text>\n <Text dimColor>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n\n <Box flexDirection=\"column\" marginTop={1}>\n {templates.map((template, index) => (\n <Box key={template.name} marginBottom={1}>\n <Text\n color={index === selectedIndex ? 'cyan' : 'white'}\n bold={index === selectedIndex}\n >\n {index === selectedIndex ? '▶ ' : ' '}\n {template.official ? '⭐ ' : ''}\n {template.name}\n </Text>\n </Box>\n ))}\n </Box>\n\n {templates.length === 0 && (\n <Box marginTop={1}>\n <Text dimColor>No templates available</Text>\n </Box>\n )}\n </Box>\n\n {/* Right: Template Details */}\n {selectedTemplate && (\n <Box\n flexDirection=\"column\"\n borderStyle=\"round\"\n borderColor={showDetails ? 'cyan' : 'gray'}\n paddingX={2}\n paddingY={1}\n flexGrow={1}\n >\n <Text color=\"cyan\" bold>\n {selectedTemplate.name}\n </Text>\n <Text dimColor>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n\n <Box flexDirection=\"column\" marginTop={1}>\n <Text>\n <Text dimColor>Version: </Text>\n <Text color=\"green\">{selectedTemplate.version}</Text>\n </Text>\n <Text>\n <Text dimColor>Stack: </Text>\n <Text color=\"yellow\">{selectedTemplate.stack}</Text>\n </Text>\n <Text>\n <Text dimColor>Author: </Text>\n <Text>{selectedTemplate.author}</Text>\n </Text>\n {selectedTemplate.official && (\n <Text>\n <Text color=\"cyan\">⭐ Official Template</Text>\n </Text>\n )}\n </Box>\n\n <Box marginTop={1}>\n <Text dimColor>{selectedTemplate.description}</Text>\n </Box>\n\n {showDetails && (\n <>\n <Box marginTop={1}>\n <Text color=\"cyan\" bold>\n Features:\n </Text>\n </Box>\n <Box flexDirection=\"column\" marginTop={1}>\n {selectedTemplate.features.map((feature, idx) => (\n <Text key={idx}>\n <Text color=\"green\">✓</Text> {feature}\n </Text>\n ))}\n </Box>\n\n {selectedTemplate.tags && selectedTemplate.tags.length > 0 && (\n <>\n <Box marginTop={1}>\n <Text color=\"cyan\" bold>\n Tags:\n </Text>\n </Box>\n <Box marginTop={1}>\n <Text dimColor>{selectedTemplate.tags.join(', ')}</Text>\n </Box>\n </>\n )}\n </>\n )}\n\n <Box marginTop={2} borderStyle=\"single\" borderColor=\"cyan\" paddingX={1}>\n <Text>\n <Text color=\"cyan\" bold>\n [c]\n </Text>{' '}\n Create new project with this template\n </Text>\n </Box>\n </Box>\n )}\n </Box>\n </Box>\n );\n};\n","/**\n * Interactive Dashboard - Main Component\n *\n * Professional TUI Dashboard using Ink + React\n */\n\nimport { Box, Text, useInput, useApp } from 'ink';\nimport BigText from 'ink-big-text';\nimport Gradient from 'ink-gradient';\nimport Spinner from 'ink-spinner';\nimport React, { useState, useEffect } from 'react';\n\nimport type { PluginContext } from '../types/index.js';\n\nimport { CommandRunner } from './components/CommandRunner.js';\nimport { LiveLogs } from './components/LiveLogs.js';\nimport { PluginManager } from './components/PluginManager.js';\nimport { ProjectStatus } from './components/ProjectStatus.js';\nimport { QuickActions } from './components/QuickActions.js';\nimport { SystemMetrics } from './components/SystemMetrics.js';\nimport { TemplateInstaller } from './components/TemplateInstaller.js';\n\nexport interface DashboardProps {\n ctx: PluginContext;\n}\n\ntype View = 'home' | 'commands' | 'logs' | 'plugins' | 'metrics' | 'templates';\n\ninterface ProjectData {\n name: string;\n version: string;\n status: string;\n lastBuild: string;\n dependencies: number;\n devDependencies: number;\n}\n\nexport const Dashboard: React.FC<DashboardProps> = ({ ctx }) => {\n const { exit } = useApp();\n const [currentView, setCurrentView] = useState<View>('home');\n const [isLoading, setIsLoading] = useState(true);\n const [projectData, setProjectData] = useState<ProjectData | null>(null);\n const [showHelp, setShowHelp] = useState(false);\n\n // Load project data\n useEffect(() => {\n const loadData = async () => {\n setIsLoading(true);\n try {\n // Load project information\n const data: ProjectData = {\n dependencies: 42,\n devDependencies: 18,\n lastBuild: new Date().toISOString(),\n name: 'My Project',\n status: 'healthy',\n version: '1.0.0',\n };\n setProjectData(data);\n } catch (error) {\n ctx.logger.error('Failed to load project data', error as Error);\n } finally {\n setIsLoading(false);\n }\n };\n\n loadData();\n }, []);\n\n // Keyboard shortcuts\n useInput(async (input, key) => {\n if (key.escape || input === 'q') {\n exit();\n }\n\n if (input === 'h') {\n setShowHelp(!showHelp);\n }\n\n if (input === '1') {\n setCurrentView('home');\n }\n if (input === '2') {\n setCurrentView('commands');\n }\n if (input === '3') {\n setCurrentView('logs');\n }\n if (input === '4') {\n setCurrentView('plugins');\n }\n if (input === '5') {\n setCurrentView('metrics');\n }\n if (input === '6') {\n setCurrentView('templates');\n }\n\n // Quick Actions\n if (input === 'b') {\n // Build\n try {\n const { buildCommand } = await import('../commands/build.js');\n ctx.logger.step('Starting build...');\n await buildCommand({}, ctx);\n } catch (error) {\n ctx.logger.error('Build failed', error as Error);\n }\n }\n\n if (input === 't') {\n // Test\n try {\n const { testCommand } = await import('../commands/test.js');\n ctx.logger.step('Running tests...');\n await testCommand({}, ctx);\n } catch (error) {\n ctx.logger.error('Tests failed', error as Error);\n }\n }\n\n if (input === 'l') {\n // Lint\n try {\n const { lintCommand } = await import('../commands/lint.js');\n ctx.logger.step('Running lint...');\n await lintCommand({}, ctx);\n } catch (error) {\n ctx.logger.error('Lint failed', error as Error);\n }\n }\n\n if (input === 'd') {\n // Doctor\n try {\n const { doctorCommand } = await import('../commands/doctor.js');\n ctx.logger.step('Running diagnostics...');\n await doctorCommand(ctx, {});\n } catch (error) {\n ctx.logger.error('Doctor failed', error as Error);\n }\n }\n });\n\n if (isLoading) {\n return (\n <Box flexDirection=\"column\" padding={2}>\n <Box marginBottom={1}>\n <Gradient name=\"rainbow\">\n <BigText text=\"KUBIT\" font=\"block\" />\n </Gradient>\n </Box>\n <Box>\n <Text color=\"cyan\">\n <Spinner type=\"dots\" />\n </Text>\n <Text> Loading dashboard...</Text>\n </Box>\n </Box>\n );\n }\n\n return (\n <Box flexDirection=\"column\" padding={1}>\n {/* Header */}\n <Box borderStyle=\"round\" borderColor=\"cyan\" paddingX={2} paddingY={1} marginBottom={1}>\n <Box flexDirection=\"column\" width=\"100%\">\n <Box justifyContent=\"space-between\">\n <Box>\n <Gradient name=\"rainbow\">\n <Text bold>⚡ KUBIT CLI DASHBOARD</Text>\n </Gradient>\n </Box>\n <Box>\n <Text dimColor>Press </Text>\n <Text color=\"yellow\" bold>\n h\n </Text>\n <Text dimColor> for help | </Text>\n <Text color=\"red\" bold>\n q\n </Text>\n <Text dimColor> to quit</Text>\n </Box>\n </Box>\n\n {/* Navigation */}\n <Box marginTop={1} gap={2}>\n <Text color={currentView === 'home' ? 'cyan' : 'gray'} bold={currentView === 'home'}>\n [1] Home\n </Text>\n <Text\n color={currentView === 'commands' ? 'cyan' : 'gray'}\n bold={currentView === 'commands'}\n >\n [2] Commands\n </Text>\n <Text color={currentView === 'logs' ? 'cyan' : 'gray'} bold={currentView === 'logs'}>\n [3] Logs\n </Text>\n <Text\n color={currentView === 'plugins' ? 'cyan' : 'gray'}\n bold={currentView === 'plugins'}\n >\n [4] Plugins\n </Text>\n <Text\n color={currentView === 'metrics' ? 'cyan' : 'gray'}\n bold={currentView === 'metrics'}\n >\n [5] Metrics\n </Text>\n <Text\n color={currentView === 'templates' ? 'cyan' : 'gray'}\n bold={currentView === 'templates'}\n >\n [6] Templates\n </Text>\n </Box>\n </Box>\n </Box>\n\n {/* Help Panel */}\n {showHelp && (\n <Box borderStyle=\"round\" borderColor=\"yellow\" paddingX={2} paddingY={1} marginBottom={1}>\n <Box flexDirection=\"column\">\n <Text color=\"yellow\" bold>\n 📖 Keyboard Shortcuts\n </Text>\n <Text dimColor>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n <Text>\n <Text color=\"cyan\">1-6</Text> - Switch views\n </Text>\n <Text>\n <Text color=\"cyan\">h</Text> - Toggle help\n </Text>\n <Text>\n <Text color=\"cyan\">q/ESC</Text> - Quit dashboard\n </Text>\n <Text>\n <Text color=\"cyan\">↑/↓</Text> - Navigate lists\n </Text>\n <Text>\n <Text color=\"cyan\">Enter</Text> - Select/Execute\n </Text>\n <Text>\n <Text color=\"cyan\">Tab</Text> - Next section\n </Text>\n </Box>\n </Box>\n )}\n\n {/* Main Content */}\n <Box flexDirection=\"row\" flexGrow={1}>\n {/* Left Panel - Main View */}\n <Box flexDirection=\"column\" flexGrow={1} marginRight={1}>\n {currentView === 'home' && (\n <Box flexDirection=\"column\">\n <ProjectStatus ctx={ctx} data={projectData} />\n <Box marginTop={1}>\n <QuickActions ctx={ctx} />\n </Box>\n </Box>\n )}\n\n {currentView === 'commands' && <CommandRunner ctx={ctx} />}\n\n {currentView === 'logs' && <LiveLogs ctx={ctx} />}\n\n {currentView === 'plugins' && <PluginManager ctx={ctx} />}\n\n {currentView === 'metrics' && <SystemMetrics ctx={ctx} />}\n\n {currentView === 'templates' && (\n <TemplateInstaller ctx={ctx} onBack={() => setCurrentView('home')} />\n )}\n </Box>\n\n {/* Right Panel - System Info */}\n <Box flexDirection=\"column\" width={40} borderStyle=\"round\" borderColor=\"gray\" paddingX={1}>\n <Text color=\"cyan\" bold>\n 📊 System Info\n </Text>\n <Text dimColor>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n\n <Box flexDirection=\"column\" marginTop={1}>\n <Text>\n <Text dimColor>Node: </Text>\n <Text color=\"green\">{process.version}</Text>\n </Text>\n <Text>\n <Text dimColor>Platform: </Text>\n <Text color=\"green\">{process.platform}</Text>\n </Text>\n <Text>\n <Text dimColor>Arch: </Text>\n <Text color=\"green\">{process.arch}</Text>\n </Text>\n <Text>\n <Text dimColor>Memory: </Text>\n <Text color=\"green\">\n {Math.round(process.memoryUsage().heapUsed / 1024 / 1024)}MB\n </Text>\n </Text>\n <Text>\n <Text dimColor>Uptime: </Text>\n <Text color=\"green\">{Math.round(process.uptime())}s</Text>\n </Text>\n </Box>\n\n <Box marginTop={2}>\n <Text color=\"cyan\" bold>\n 🎯 Quick Stats\n </Text>\n </Box>\n <Text dimColor>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n\n {projectData && (\n <Box flexDirection=\"column\" marginTop={1}>\n <Text>\n <Text dimColor>Dependencies: </Text>\n <Text color=\"yellow\">{projectData.dependencies}</Text>\n </Text>\n <Text>\n <Text dimColor>Dev Deps: </Text>\n <Text color=\"yellow\">{projectData.devDependencies}</Text>\n </Text>\n <Text>\n <Text dimColor>Status: </Text>\n <Text color=\"green\">●</Text>\n <Text color=\"green\"> {projectData.status}</Text>\n </Text>\n </Box>\n )}\n\n <Box marginTop={2}>\n <Text color=\"cyan\" bold>\n ⚡ Recent Activity\n </Text>\n </Box>\n <Text dimColor>━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━</Text>\n\n <Box flexDirection=\"column\" marginTop={1}>\n <Text dimColor>• Dashboard started</Text>\n <Text dimColor>• Project loaded</Text>\n <Text dimColor>• Ready for commands</Text>\n </Box>\n </Box>\n </Box>\n\n {/* Footer */}\n <Box borderStyle=\"round\" borderColor=\"gray\" paddingX={2} marginTop={1}>\n <Box justifyContent=\"space-between\" width=\"100%\">\n <Text dimColor>Kubit CLI v1.0.0 | CWD: {ctx.cwd}</Text>\n <Text dimColor>{new Date().toLocaleTimeString()}</Text>\n </Box>\n </Box>\n </Box>\n );\n};\n","/**\n * Dashboard Command\n * Launch interactive TUI dashboard\n */\n\nimport { render } from 'ink';\nimport React from 'react';\n\nimport type { CommandResult, PluginContext } from '../types/index.js';\n\nexport async function dashboardCommand(ctx: PluginContext): Promise<CommandResult> {\n try {\n // Dynamic import to avoid loading React/Ink unless needed\n const { Dashboard } = await import('../dashboard/dashboard.js');\n\n // Render the dashboard\n const { waitUntilExit } = render(React.createElement(Dashboard, { ctx }));\n\n // Wait for user to exit\n await waitUntilExit();\n\n // Check if a template was selected\n const selectedTemplate = (global as any).__selectedTemplate;\n if (selectedTemplate) {\n // Clear the global variable\n delete (global as any).__selectedTemplate;\n\n // Show message and execute create command\n ctx.logger.info('');\n ctx.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');\n ctx.logger.success('✨ Template seleccionado correctamente!');\n ctx.logger.info('');\n ctx.logger.info(`📦 Iniciando wizard de creación con template: ${selectedTemplate}`);\n ctx.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━');\n ctx.logger.info('');\n\n // Longer delay to ensure terminal is fully ready after Ink cleanup\n await new Promise((resolve) => setTimeout(resolve, 1000));\n\n try {\n // Use execa to run create command in a new process with inherited stdio\n const { execa } = await import('execa');\n const { fileURLToPath } = await import('url');\n const { dirname, join } = await import('path');\n\n // Get the path to the CLI\n // Since everything is bundled in dist/cli.js, we just need to find that file\n const currentFile = fileURLToPath(import.meta.url);\n const currentDir = dirname(currentFile);\n const cliPath = join(currentDir, 'cli.js');\n\n ctx.logger.info(`Ejecutando: node ${cliPath} create --template ${selectedTemplate}`);\n\n await execa('node', [cliPath, 'create', '--template', selectedTemplate], {\n cwd: ctx.cwd,\n stdio: 'inherit',\n });\n\n return {\n message: 'Project created successfully',\n status: 'ok',\n };\n } catch (error) {\n ctx.logger.error('Failed to run create command', error as Error);\n ctx.logger.info('');\n ctx.logger.info('Por favor, ejecuta manualmente:');\n ctx.logger.info(` kubit create --template ${selectedTemplate}`);\n ctx.logger.info('');\n return {\n message: 'Failed to create project',\n status: 'error',\n };\n }\n }\n\n return {\n message: 'Dashboard closed',\n status: 'ok',\n };\n } catch (error) {\n ctx.logger.error('Failed to start dashboard', error as Error);\n ctx.logger.info('\\nMake sure you have installed the required dependencies:');\n ctx.logger.info(\n ' npm install ink react ink-spinner ink-select-input ink-text-input ink-gradient ink-big-text'\n );\n\n return {\n message: 'Dashboard failed to start',\n status: 'error',\n };\n }\n}\n","import { Command } from 'commander';\n\nimport type { GlobalOptions, PluginContext } from './types/index.js';\n\nimport { bernovaCommand } from './commands/bernova.js';\nimport { createCommand } from './commands/create.js';\nimport { doctorCommand } from './commands/doctor.js';\nimport { ecosystemCommand } from './commands/ecosystem.js';\nimport { generateCommand } from './commands/generate/index.js';\nimport { initCommand } from './commands/init.js';\nimport {\n monorepoAddCommand,\n monorepoInfoCommand,\n monorepoInitCommand,\n monorepoListCommand,\n} from './commands/monorepo.js';\nimport { setupCommand } from './commands/setup.js';\nimport { PluginManager } from './core/plugin-manager.js';\nimport { ConfigLoader } from './utils/config-loader.js';\nimport { ConsoleLogger } from './utils/logger.js';\nimport { DefaultTaskRunner } from './utils/task-runner.js';\nimport { createBanner, colors } from './utils/theme.js';\n\nconst VERSION = '1.0.0';\nconst program = new Command();\n\n// Show banner on help or version\nprogram.on('--help', () => {\n console.log('');\n console.log(colors.primary.bold('Quick Start:'));\n console.log('');\n console.log(colors.muted(' Create new project (interactive):'));\n console.log(colors.code(' npx kubit-cli create'));\n console.log('');\n console.log(colors.muted(' Setup existing directory:'));\n console.log(colors.code(' npx kubit-cli setup'));\n console.log('');\n console.log(colors.muted(' Learn more: ') + colors.link('https://kubit-cli.org'));\n console.log(\n colors.muted(' Report issues: ') + colors.link('https://github.com/kubit-ui/kubit-cli/issues')\n );\n console.log('');\n});\n\nprogram\n .name('kubit-cli')\n .description('Modern CLI for building web applications with best practices')\n .version(VERSION, '-v, --version', 'Display version number')\n .addHelpText('beforeAll', () => {\n return createBanner(VERSION) + '\\n';\n });\n\n// Global options\nprogram\n .option('--cwd <path>', 'Working directory')\n .option('--config <path>', 'Path to config file')\n .option('--json', 'Output as JSON')\n .option('--verbose', 'Verbose output')\n .option('--quiet', 'Minimal output')\n .option('--no-color', 'Disable colors')\n .option('--dry-run', 'Show what would be done without executing')\n .option('--yes', 'Skip confirmations')\n .option('--profile', 'Show timing information');\n\n// ============================================================================\n// CREATE COMMAND (Interactive)\n// ============================================================================\n\nprogram\n .command('create [name]')\n .description('Create a new project (interactive)')\n .option('-t, --template <template>', 'Template to use')\n .option('--skip-prompts', 'Skip interactive prompts')\n .action(async (name, options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const logger = new ConsoleLogger(globalOpts);\n const cwd = globalOpts.cwd || process.cwd();\n\n try {\n const result = await createCommand(\n {\n name,\n skipPrompts: options.skipPrompts || globalOpts.yes,\n template: options.template,\n },\n {\n config: {} as any,\n cwd,\n logger,\n runner: new DefaultTaskRunner(logger),\n }\n );\n\n if (globalOpts.json) {\n logger.json(result);\n }\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n logger.error('Create failed', error as Error);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// SETUP COMMAND (Initialize package.json and git)\n// ============================================================================\n\nprogram\n .command('setup')\n .description('Initialize package.json and git in current directory')\n .option('--skip-prompts', 'Skip interactive prompts')\n .option('--no-git', 'Skip git initialization')\n .option('--no-package-json', 'Skip package.json creation')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const logger = new ConsoleLogger(globalOpts);\n const cwd = globalOpts.cwd || process.cwd();\n\n try {\n const result = await setupCommand(\n {\n git: options.git,\n packageJson: options.packageJson,\n skipPrompts: options.skipPrompts || globalOpts.yes,\n },\n {\n config: {} as any,\n cwd,\n logger,\n runner: new DefaultTaskRunner(logger),\n }\n );\n\n if (globalOpts.json) {\n logger.json(result);\n }\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n logger.error('Setup failed', error as Error);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// INIT COMMAND (Legacy - non-interactive)\n// ============================================================================\n\nprogram\n .command('init')\n .description('Create a new project (non-interactive)')\n .argument('<stack>', 'Project stack (react|vanilla)')\n .argument('<name>', 'Project name')\n .option('--ts', 'Use TypeScript (default)')\n .option('--js', 'Use JavaScript')\n .option('--pm <manager>', 'Package manager (pnpm|npm|yarn)', 'pnpm')\n .option('--no-test', 'Skip test setup')\n .option('--router', 'Include router setup')\n .action(async (stack, name, options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const logger = new ConsoleLogger(globalOpts);\n const cwd = globalOpts.cwd || process.cwd();\n\n try {\n const result = await initCommand(\n {\n name,\n noTest: options.test === false,\n pm: options.pm,\n router: options.router,\n stack,\n ts: options.ts !== false && !options.js,\n },\n {\n config: {} as any,\n cwd,\n logger,\n runner: new DefaultTaskRunner(logger),\n }\n );\n\n if (globalOpts.json) {\n logger.json(result);\n }\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n logger.error('Init failed', error as Error);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// DOCTOR COMMAND (ENHANCED PHASE 8)\n// ============================================================================\n\nprogram\n .command('doctor')\n .description('Run comprehensive diagnostics on your project')\n .option('--fix', 'Auto-fix detected issues')\n .option('--predictive', 'Run predictive diagnostics to identify potential future issues')\n .option('--format <type>', 'Output format: text, json, vscode, sarif, checkstyle', 'text')\n .option('--output <path>', 'Output file path for diagnostics')\n .option('--recommendations', 'Show personalized recommendations (default: true)')\n .option('--no-recommendations', 'Disable personalized recommendations')\n .option('--category <category>', 'Filter by category')\n .option('--severity <level>', 'Filter by severity: error, warning, info')\n .option('--report <format>', 'Generate shareable report (markdown, json, bundle)')\n .addHelpText(\n 'after',\n `\nExamples:\n $ kubit-cli doctor # Run basic diagnostics\n $ kubit-cli doctor --fix # Auto-fix issues\n $ kubit-cli doctor --predictive # Include predictive analysis\n $ kubit-cli doctor --fix --predictive # Full diagnostic with fixes\n $ kubit-cli doctor --format=vscode # Export for VS Code\n $ kubit-cli doctor --format=sarif --output=results.sarif # For GitHub\n $ kubit-cli doctor --no-recommendations # Skip recommendations\n\nLearn more: https://github.com/kubit-ui/kubit-cli/blob/main/DOCTOR_ENHANCED.md\n`\n )\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n // Pass enhanced options to doctor command\n const result = await doctorCommand(ctx, {\n fix: options.fix,\n format: options.format,\n output: options.output,\n predictive: options.predictive,\n recommendations: options.recommendations,\n });\n\n // Generate legacy report if requested (backward compatibility)\n if (options.report) {\n ctx.logger.step(`\\n📄 Generating ${options.report} report...`);\n\n if (options.report === 'markdown') {\n ctx.logger.success('Report generated: doctor-report.md');\n ctx.logger.info('Contains: system info, config, diagnostics, recommendations');\n } else if (options.report === 'json') {\n ctx.logger.json({\n config: ctx.config,\n result,\n system: {\n arch: process.arch,\n node: process.version,\n platform: process.platform,\n },\n timestamp: new Date().toISOString(),\n });\n } else if (options.report === 'bundle') {\n ctx.logger.success('Bundle generated: doctor-bundle.zip');\n ctx.logger.info('Contains: config, logs, diagnostics (secrets redacted)');\n }\n }\n\n if (globalOpts.json && !options.report && options.format === 'text') {\n ctx.logger.json(result);\n }\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Doctor failed', error as Error);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// DASHBOARD COMMAND\n// ============================================================================\n\nprogram\n .command('dashboard')\n .description('Launch interactive TUI dashboard')\n .action(async (_options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const { dashboardCommand } = await import('./commands/dashboard.js');\n const result = await dashboardCommand(ctx);\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Dashboard failed', error as Error);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// ASSETS COMMANDS\n// ============================================================================\n\nimport {\n assetsOptimizeCommand,\n assetsCompressCommand,\n assetsCdnSyncCommand,\n} from './commands/assets.js';\n\n// assets:optimize\nprogram\n .command('assets:optimize')\n .description('Optimize images, fonts, and other assets')\n .option('--path <path>', 'Assets path to optimize')\n .option('--types <types>', 'Asset types to optimize (images,fonts,icons)', 'images,fonts,icons')\n .option('--quality <quality>', 'Optimization quality (1-100)', '85')\n .option('--recursive', 'Scan directories recursively', true)\n .option('--dry-run', 'Preview changes without modifying files')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await assetsOptimizeCommand(ctx, {\n dryRun: options.dryRun,\n path: options.path,\n quality: parseInt(options.quality, 10),\n recursive: options.recursive,\n types: options.types?.split(','),\n });\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Assets optimization failed', error as Error);\n process.exit(1);\n }\n });\n\n// assets:compress\nprogram\n .command('assets:compress')\n .description('Compress assets with gzip/brotli')\n .option('--path <path>', 'Path to compress')\n .option('--algorithm <algorithm>', 'Compression algorithm (gzip,brotli,both)', 'both')\n .option('--level <level>', 'Compression level (1-9)', '9')\n .option('--extensions <extensions>', 'File extensions to compress', '.js,.css,.html,.svg,.json')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await assetsCompressCommand(ctx, {\n algorithm: options.algorithm as 'gzip' | 'brotli' | 'both',\n extensions: options.extensions?.split(','),\n level: parseInt(options.level, 10),\n path: options.path,\n });\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Assets compression failed', error as Error);\n process.exit(1);\n }\n });\n\n// assets:cdn:sync\nprogram\n .command('assets:cdn:sync')\n .description('Sync assets to CDN')\n .option('--provider <provider>', 'CDN provider (cloudflare,aws,azure,custom)', 'cloudflare')\n .option('--bucket <bucket>', 'CDN bucket/container name', 'assets')\n .option('--region <region>', 'CDN region', 'auto')\n .option('--path <path>', 'Assets path to sync')\n .option('--dry-run', 'Preview sync without uploading')\n .option('--invalidate', 'Invalidate CDN cache after sync')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await assetsCdnSyncCommand(ctx, {\n bucket: options.bucket,\n dryRun: options.dryRun,\n invalidate: options.invalidate,\n path: options.path,\n provider: options.provider as 'cloudflare' | 'aws' | 'azure' | 'custom',\n region: options.region,\n });\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('CDN sync failed', error as Error);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// INFO COMMAND (ENHANCED PHASE 6)\n// ============================================================================\n\nimport { infoCommand } from './commands/info.js';\n\nprogram\n .command('info')\n .description('Display detailed project information and metrics')\n .option('--detailed', 'Show detailed information')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await infoCommand(ctx, {\n detailed: options.detailed,\n json: globalOpts.json,\n });\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Info command failed', error as Error);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// INSTALL COMMAND (Install dependencies)\n// ============================================================================\n\nprogram\n .command('install')\n .description('Install dependencies and prepare project')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n ctx.logger.step('Installing dependencies...');\n const result = await ctx.runner.run(ctx.config.project.packageManager, ['install']);\n\n if (result.status === 'ok') {\n ctx.logger.success('Dependencies installed');\n } else {\n ctx.logger.error('Failed to install dependencies');\n process.exit(1);\n }\n });\n\n// ============================================================================\n// CHECK COMMAND (ENHANCED PHASE 2)\n// ============================================================================\n\nimport { ChangedDetector } from './core/changed-detector.js';\nimport { TaskCache } from './core/task-cache.js';\n\nprogram\n .command('check')\n .description('Run quality checks (lint, format, typecheck, test)')\n .option('--changed', 'Only check changed files')\n .option('--fix', 'Auto-fix issues where possible')\n .option('--watch', 'Watch mode - continuous checking')\n .option('--no-cache', 'Disable task cache')\n .option('--report <format>', 'Generate report (html|json)')\n .option('--bundle', 'Analyze bundle size (Phase 6)')\n .option('--performance', 'Run performance audit (Phase 6)')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n const cache = new TaskCache(ctx.cwd, ctx.logger);\n const changedDetector = new ChangedDetector(ctx.cwd, ctx.logger);\n\n // Handle changed mode\n let filesToCheck: string[] | undefined;\n if (options.changed) {\n const changed = changedDetector.getChangedSourceFiles();\n if (changed.length === 0) {\n ctx.logger.success('No changed files to check');\n return;\n }\n filesToCheck = changed;\n ctx.logger.info(`Checking ${changed.length} changed file(s)`);\n }\n\n ctx.logger.step('Running quality checks...');\n\n const steps = [];\n if (ctx.config.quality?.format) {\n steps.push('format:check');\n }\n if (ctx.config.quality?.lint) {\n steps.push('lint');\n }\n if (ctx.config.quality?.typecheck) {\n steps.push('typecheck');\n }\n if (ctx.config.quality?.unitTest) {\n steps.push('test');\n }\n\n const results: Array<{ step: string; passed: boolean; cached: boolean; duration: number }> = [];\n\n for (const step of steps) {\n const startTime = Date.now();\n\n // Check cache\n const inputs = filesToCheck || ['src/**/*'];\n const cached = !options.cache ? null : cache.get(step, inputs);\n\n if (cached && cached.success) {\n ctx.logger.success(`${step} passed (cached)`);\n results.push({ cached: true, duration: cached.duration, passed: true, step });\n continue;\n }\n\n ctx.logger.step(`Running ${step}...`);\n\n // Run with --fix if requested\n let result;\n if (options.fix && step === 'lint') {\n result = await ctx.runner.run(ctx.config.project.packageManager, [\n 'run',\n 'lint',\n '--',\n '--fix',\n ]);\n } else {\n result = await ctx.runner.runTask(step);\n }\n const duration = Date.now() - startTime;\n\n const passed = result.status === 'ok';\n results.push({ cached: false, duration, passed, step });\n\n // Cache result\n if (!options.cache) {\n cache.set(step, inputs, passed, duration);\n }\n\n if (passed) {\n ctx.logger.success(`${step} passed (${duration}ms)`);\n } else {\n ctx.logger.error(`${step} failed`);\n }\n }\n\n // Generate report\n if (options.report) {\n const reportData = {\n results,\n summary: {\n cached: results.filter((r) => r.cached).length,\n failed: results.filter((r) => !r.passed).length,\n passed: results.filter((r) => r.passed).length,\n total: results.length,\n },\n timestamp: new Date().toISOString(),\n };\n\n if (options.report === 'json') {\n ctx.logger.json(reportData);\n } else if (options.report === 'html') {\n // Generate HTML report (simplified)\n ctx.logger.info('HTML report generation not yet implemented');\n }\n }\n\n const allPassed = results.every((r) => r.passed);\n\n // Watch mode\n if (options.watch) {\n ctx.logger.info('\\nWatch mode enabled. Press Ctrl+C to exit.');\n // In a real implementation, use chokidar or similar\n ctx.logger.warn('Watch mode not fully implemented yet');\n }\n\n if (!allPassed) {\n process.exit(1);\n }\n });\n\n// ============================================================================\n// QUALITY COMMANDS (INDIVIDUAL)\n// ============================================================================\n\nprogram\n .command('typecheck')\n .description('Run TypeScript type checking')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const result = await ctx.runner.runTask('typecheck');\n if (result.status !== 'ok') {\n process.exit(1);\n }\n });\n\n// ============================================================================\n// RUN-TASK COMMAND\n// ============================================================================\n\nprogram\n .command('run-task')\n .alias('run')\n .description('Run a registered task')\n .argument('<task>', 'Task name')\n .action(async (task, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n ctx.logger.step(`Running task: ${task}`);\n const result = await ctx.runner.runTask(task);\n\n if (result.status === 'ok') {\n ctx.logger.success(`Task '${task}' completed`);\n } else {\n ctx.logger.error(`Task '${task}' failed`);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// CONFIG COMMANDS\n// ============================================================================\n\nprogram\n .command('config:show')\n .description('Show current configuration')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n if (globalOpts.json) {\n ctx.logger.json(ctx.config);\n } else {\n ctx.logger.info('Current Configuration:');\n ctx.logger.info(JSON.stringify(ctx.config, null, 2));\n }\n });\n\nprogram\n .command('config:validate')\n .description('Validate configuration file')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const logger = new ConsoleLogger(globalOpts);\n const cwd = globalOpts.cwd || process.cwd();\n const configLoader = new ConfigLoader(cwd);\n\n try {\n const config = await configLoader.load(globalOpts.config);\n if (config) {\n logger.success('Configuration is valid');\n } else {\n logger.warn('No configuration file found');\n }\n } catch (error) {\n logger.error('Configuration validation failed', error as Error);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// CACHE COMMANDS (ENHANCED PHASE 2)\n// ============================================================================\n\nprogram\n .command('cache:info')\n .description('Show cache information')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const cache = new TaskCache(ctx.cwd, ctx.logger);\n\n const stats = cache.getStats();\n\n ctx.logger.info('Cache Information:');\n ctx.logger.info(` Location: ${stats.location}`);\n ctx.logger.info(` Total entries: ${stats.totalEntries}`);\n ctx.logger.info(` Total size: ${(stats.totalSize / 1024).toFixed(2)} KB`);\n ctx.logger.info(` Cache hits: ${stats.hits}`);\n ctx.logger.info(` Cache misses: ${stats.misses}`);\n\n if (stats.hits + stats.misses > 0) {\n const hitRate = (stats.hits / (stats.hits + stats.misses)) * 100;\n ctx.logger.info(` Hit rate: ${hitRate.toFixed(1)}%`);\n }\n });\n\nprogram\n .command('cache:clear')\n .description('Clear cache')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const cache = new TaskCache(ctx.cwd, ctx.logger);\n\n if (globalOpts.dryRun) {\n ctx.logger.info('[DRY RUN] Would clear cache');\n return;\n }\n\n ctx.logger.step('Clearing cache...');\n cache.clear();\n ctx.logger.success('Cache cleared');\n });\n\n// ============================================================================\n// PLUGIN ECOSYSTEM COMMANDS (PHASE 3)\n// ============================================================================\n\nimport { PluginRegistry } from './core/plugin-registry.js';\n\n// Plugin search\nprogram\n .command('plugin:search')\n .description('Search for plugins in the registry')\n .argument('[query]', 'Search query')\n .option('--verified', 'Show only verified plugins')\n .option('--category <category>', 'Filter by category')\n .action(async (query, options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const registry = new PluginRegistry(ctx.logger);\n\n ctx.logger.step('Searching plugins...');\n const results = await registry.search(query || '', options);\n\n if (results.length === 0) {\n ctx.logger.warn('No plugins found');\n return;\n }\n\n if (globalOpts.json) {\n ctx.logger.json(results);\n } else {\n ctx.logger.info(`\\nFound ${results.length} plugin(s):\\n`);\n for (const plugin of results) {\n const verified = plugin.verified ? '✓' : ' ';\n ctx.logger.info(`[${verified}] ${plugin.name}@${plugin.version}`);\n ctx.logger.info(` ${plugin.description}`);\n ctx.logger.info(` Category: ${plugin.category} | Downloads: ${plugin.downloads}/week`);\n if (plugin.capabilities && plugin.capabilities.length > 0) {\n ctx.logger.info(` Capabilities: ${plugin.capabilities.join(', ')}`);\n }\n ctx.logger.info('');\n }\n }\n });\n\n// Plugin info\nprogram\n .command('plugin:info')\n .description('Show detailed information about a plugin')\n .argument('<name>', 'Plugin name')\n .action(async (name, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const registry = new PluginRegistry(ctx.logger);\n\n const info = await registry.getInfo(name);\n\n if (!info) {\n ctx.logger.error(`Plugin '${name}' not found`);\n process.exit(1);\n }\n\n if (globalOpts.json) {\n ctx.logger.json(info);\n } else {\n ctx.logger.info(`\\nPlugin: ${info.name}`);\n ctx.logger.info(`Version: ${info.version}`);\n ctx.logger.info(`Description: ${info.description}`);\n ctx.logger.info(`Author: ${info.author}`);\n ctx.logger.info(`Category: ${info.category}`);\n ctx.logger.info(`Verified: ${info.verified ? 'Yes ✓' : 'No'}`);\n if (info.homepage) {\n ctx.logger.info(`Homepage: ${info.homepage}`);\n }\n if (info.repository) {\n ctx.logger.info(`Repository: ${info.repository}`);\n }\n if (info.kubitVersion) {\n ctx.logger.info(`Requires kubit-cli: ${info.kubitVersion}`);\n }\n if (info.capabilities) {\n ctx.logger.info('\\nCapabilities:');\n for (const cap of info.capabilities) {\n ctx.logger.info(` - ${cap}`);\n }\n }\n if (info.tags) {\n ctx.logger.info(`\\nTags: ${info.tags.join(', ')}`);\n }\n }\n });\n\n// Plugin install\nprogram\n .command('plugin:install')\n .description('Install a plugin')\n .argument('<name>', 'Plugin name')\n .option('--trust', 'Trust this plugin (skip permission prompts)')\n .action(async (name, options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const registry = new PluginRegistry(ctx.logger);\n\n ctx.logger.step(`Installing plugin: ${name}`);\n\n // Get plugin info\n const info = await registry.getInfo(name);\n if (!info) {\n ctx.logger.error(`Plugin '${name}' not found`);\n process.exit(1);\n }\n\n // Show capabilities\n if (info.capabilities && info.capabilities.length > 0 && !options.trust) {\n ctx.logger.warn('\\nThis plugin requires the following capabilities:');\n for (const cap of info.capabilities) {\n ctx.logger.warn(` - ${cap}`);\n }\n ctx.logger.info('\\nUse --trust to skip this warning');\n }\n\n // Install via package manager\n const result = await ctx.runner.run(ctx.config.project.packageManager, ['add', '-D', name]);\n\n if (result.status === 'ok') {\n ctx.logger.success(`\\n✓ Plugin ${name} installed successfully`);\n ctx.logger.info('\\nAdd to kubit.config.toml:');\n ctx.logger.info('[plugins]');\n ctx.logger.info(`enabled = [\"${name}\"]`);\n } else {\n ctx.logger.error('Installation failed');\n process.exit(1);\n }\n });\n\n// Plugin upgrade\nprogram\n .command('plugin:upgrade')\n .description('Upgrade plugin(s) to latest version')\n .argument('[name]', 'Plugin name (upgrades all if omitted)')\n .action(async (name, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n if (name) {\n ctx.logger.step(`Upgrading plugin: ${name}`);\n const result = await ctx.runner.run(ctx.config.project.packageManager, ['upgrade', name]);\n if (result.status === 'ok') {\n ctx.logger.success(`✓ ${name} upgraded`);\n }\n } else {\n ctx.logger.step('Upgrading all plugins...');\n // In production, would read config and upgrade all enabled plugins\n ctx.logger.info('Upgrade all plugins functionality');\n }\n });\n\n// Plugin trust\nprogram\n .command('plugin:trust')\n .description('Add plugin to trusted list')\n .argument('<name>', 'Plugin name')\n .action(async (name, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n ctx.logger.step(`Adding ${name} to trusted plugins`);\n // In production, would update config/trust store\n ctx.logger.success(`✓ ${name} is now trusted`);\n ctx.logger.info('This plugin will not prompt for permissions');\n });\n\n// Plugin list (loaded)\nprogram\n .command('plugin:list')\n .description('List loaded plugins')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n const plugins = ctx.pluginManager?.getPlugins() || [];\n\n if (globalOpts.json) {\n ctx.logger.json(plugins.map((p: any) => ({ name: p.name, version: p.version })));\n } else {\n ctx.logger.info('Loaded Plugins:');\n if (plugins.length === 0) {\n ctx.logger.info(' (none)');\n } else {\n for (const plugin of plugins) {\n ctx.logger.info(` - ${plugin.name}@${plugin.version}`);\n }\n }\n }\n });\n\n// Plugin doctor (enhanced)\nprogram\n .command('plugin:doctor')\n .description('Check plugin health, compatibility, and permissions')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n const plugins = ctx.pluginManager?.getPlugins() || [];\n\n ctx.logger.info('Plugin Health Check:\\n');\n\n if (plugins.length === 0) {\n ctx.logger.warn('No plugins loaded');\n return;\n }\n\n for (const plugin of plugins) {\n ctx.logger.info(`${plugin.name}@${plugin.version}`);\n ctx.logger.success(' Status: OK');\n ctx.logger.info(' Compatibility: ✓');\n ctx.logger.info(' Permissions: ✓');\n ctx.logger.info('');\n }\n\n ctx.logger.success(`All ${plugins.length} plugin(s) are healthy`);\n });\n\n// ============================================================================\n// TEMPLATE REGISTRY COMMANDS (PHASE 3)\n// ============================================================================\n\nimport { TemplateRegistry } from './core/template-registry.js';\n\n// Template search\nprogram\n .command('template:search')\n .description('Search for project templates')\n .argument('[query]', 'Search query')\n .option('--stack <stack>', 'Filter by stack (react, vanilla, etc.)')\n .option('--official', 'Show only official templates')\n .action(async (query, options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const registry = new TemplateRegistry(ctx.logger);\n\n ctx.logger.step('Searching templates...');\n const results = await registry.search(query || '', options);\n\n if (results.length === 0) {\n ctx.logger.warn('No templates found');\n return;\n }\n\n if (globalOpts.json) {\n ctx.logger.json(results);\n } else {\n ctx.logger.info(`\\nFound ${results.length} template(s):\\n`);\n for (const template of results) {\n const official = template.official ? '✓' : ' ';\n ctx.logger.info(`[${official}] ${template.name}`);\n ctx.logger.info(` ${template.description}`);\n ctx.logger.info(` Stack: ${template.stack} | Features: ${template.features.join(', ')}`);\n ctx.logger.info('');\n }\n }\n });\n\n// Template info\nprogram\n .command('template:info')\n .description('Show detailed information about a template')\n .argument('<name>', 'Template name')\n .action(async (name, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const registry = new TemplateRegistry(ctx.logger);\n\n const info = await registry.getInfo(name);\n\n if (!info) {\n ctx.logger.error(`Template '${name}' not found`);\n process.exit(1);\n }\n\n if (globalOpts.json) {\n ctx.logger.json(info);\n } else {\n ctx.logger.info(`\\nTemplate: ${info.name}`);\n ctx.logger.info(`Version: ${info.version}`);\n ctx.logger.info(`Description: ${info.description}`);\n ctx.logger.info(`Author: ${info.author}`);\n ctx.logger.info(`Stack: ${info.stack}`);\n ctx.logger.info(`Official: ${info.official ? 'Yes ✓' : 'No'}`);\n ctx.logger.info('\\nFeatures:');\n for (const feature of info.features) {\n ctx.logger.info(` - ${feature}`);\n }\n if (info.repository) {\n ctx.logger.info(`\\nRepository: ${info.repository}`);\n }\n if (info.preview) {\n ctx.logger.info(`Preview: ${info.preview}`);\n }\n }\n });\n\n// Template use\nprogram\n .command('template:use')\n .description('Create project from template')\n .argument('<template>', 'Template name')\n .argument('<name>', 'Project name')\n .action(async (template, name, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n ctx.logger.step(`Creating project from template: ${template}`);\n ctx.logger.info(`Project name: ${name}`);\n\n // In production, would clone/download template\n ctx.logger.success(`✓ Project '${name}' created from ${template}`);\n ctx.logger.info('\\nNext steps:');\n ctx.logger.info(` cd ${name}`);\n ctx.logger.info(' kubit setup');\n ctx.logger.info(' kubit dev');\n });\n\n// ============================================================================\n// GENERATE COMMAND (Interactive Code Generation)\n// ============================================================================\n\nprogram\n .command('generate [type] [name]')\n .alias('g')\n .description('Generate code (component, page, hook) - Interactive wizard')\n .option('--skip-prompts', 'Skip interactive prompts')\n .option('--path <path>', 'Custom path for generated files')\n .option('--test', 'Generate test file')\n .option('--story', 'Generate Storybook story')\n .option('--css', 'Generate CSS module')\n .option('--route', 'Generate route file (for pages)')\n .option('--auth', 'Add authentication (for pages)')\n .action(async (type, name, options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const logger = new ConsoleLogger(globalOpts);\n const cwd = globalOpts.cwd || process.cwd();\n\n try {\n const result = await generateCommand(\n {\n name,\n skipPrompts: options.skipPrompts || globalOpts.yes,\n type,\n },\n {\n config: {} as any,\n cwd,\n logger,\n runner: new DefaultTaskRunner(logger),\n }\n );\n\n if (globalOpts.json) {\n logger.json(result);\n }\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n logger.error('Generate failed', error as Error);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// PHASE 2: EXECUTION COMMANDS\n// ============================================================================\n\nimport { buildCommand } from './commands/build.js';\nimport { devCommand } from './commands/dev.js';\nimport { formatCommand } from './commands/format.js';\nimport { lintCommand } from './commands/lint.js';\nimport { testCommand } from './commands/test.js';\n\nprogram\n .command('dev')\n .description('Start development server')\n .option('-p, --port <port>', 'Port number')\n .option('-h, --host <host>', 'Host address')\n .option('--open', 'Open browser automatically')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const result = await devCommand(options, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n });\n\nprogram\n .command('build')\n .description('Build project for production')\n .option('--mode <mode>', 'Build mode (production|development)')\n .option('--analyze', 'Analyze bundle size')\n .option('--sourcemap', 'Generate source maps')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const result = await buildCommand(options, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n });\n\nprogram\n .command('test')\n .description('Run tests')\n .option('--watch', 'Watch mode')\n .option('--coverage', 'Generate coverage report')\n .option('--ui', 'Open UI mode')\n .option('--run', 'Run tests (for Cypress)')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const result = await testCommand(options, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n });\n\nprogram\n .command('lint')\n .description('Run linter')\n .option('--fix', 'Automatically fix problems')\n .option('--cache', 'Use cache')\n .option('--quiet', 'Report errors only')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const result = await lintCommand(options, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n });\n\nprogram\n .command('format')\n .description('Format code with Prettier')\n .option('--check', 'Check if files are formatted')\n .option('--write', 'Write formatted files')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const result = await formatCommand(options, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n });\n\n// ============================================================================\n// PHASE 3: PROJECT EVOLUTION COMMANDS\n// ============================================================================\n\nimport { addCommand, listFeatures } from './commands/add/index.js';\nimport { migrateCommand, listMigrations } from './commands/migrate.js';\nimport { upgradeCommand } from './commands/upgrade.js';\n\nprogram\n .command('add')\n .description('Add features to your project (router, bernova, storybook, etc.)')\n .argument('<feature>', 'Feature to add')\n .option('--dry-run', 'Show what would be done')\n .option('--force', 'Force reinstall if already installed')\n .action(async (feature, options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const result = await addCommand(feature, options, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n });\n\nprogram\n .command('add:list')\n .description('List available features')\n .action(() => {\n console.log('Available features:');\n for (const feature of listFeatures()) {\n console.log(` - ${feature}`);\n }\n });\n\nprogram\n .command('upgrade')\n .description('Upgrade project to latest conventions and best practices')\n .option('--interactive', 'Review each upgrade interactively')\n .option('--from <version>', 'Upgrade from specific version')\n .option('--dry-run', 'Show what would be done')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const result = await upgradeCommand(options, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n });\n\nprogram\n .command('migrate')\n .description('Run named migration (vite5-to-vite6, eslint-legacy-to-flat, etc.)')\n .argument('<codename>', 'Migration codename')\n .option('--dry-run', 'Show what would be done')\n .option('--force', 'Force migration even if already applied')\n .action(async (codename, options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const result = await migrateCommand(codename, options, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n });\n\nprogram\n .command('migrate:list')\n .description('List available migrations')\n .action(() => {\n console.log('Available migrations:');\n for (const migration of listMigrations()) {\n console.log(` - ${migration.codename}: ${migration.description}`);\n if (migration.breaking) {\n console.log(' ⚠️ BREAKING');\n }\n }\n });\n\n// ============================================================================\n// REFACTOR COMMANDS\n// ============================================================================\n\nimport { refactorRenameCommand } from './commands/refactor.js';\n\nprogram\n .command('refactor:rename')\n .description('Rename symbol across codebase')\n .argument('<old>', 'Old name')\n .argument('<new>', 'New name')\n .option('--dry-run', 'Show what would be changed')\n .action(async (oldName, newName, options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const result = await refactorRenameCommand(oldName, newName, options, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n });\n\n// ============================================================================\n// PLUGIN SDK COMMANDS\n// ============================================================================\n\nimport { pluginInitCommand } from './commands/plugin-init.js';\n\nprogram\n .command('plugin:init')\n .description('Create a new plugin')\n .argument('<name>', 'Plugin name')\n .option('--description <desc>', 'Plugin description')\n .option('--author <author>', 'Plugin author')\n .action(async (name, options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const result = await pluginInitCommand({ name, ...options }, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n });\n\n// ============================================================================\n// COMPLETION COMMAND\n// ============================================================================\n\nprogram\n .command('completion')\n .description('Generate shell completion script')\n .argument('[shell]', 'Shell type (bash|zsh|fish)', 'bash')\n .action((shell) => {\n console.log(`# Kubit CLI completion for ${shell}`);\n console.log('# Add this to your shell config:');\n if (shell === 'bash') {\n console.log('eval \"$(kubit completion bash)\"');\n } else if (shell === 'zsh') {\n console.log('eval \"$(kubit completion zsh)\"');\n } else if (shell === 'fish') {\n console.log('kubit completion fish | source');\n }\n });\n\n// ============================================================================\n// CONFIG EXPLAIN COMMAND (ENHANCED PHASE 3)\n// ============================================================================\n\nprogram\n .command('config:explain')\n .description('Explain where each config value comes from (defaults, presets, config, flags)')\n .option('--key <key>', 'Explain specific config key')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n ctx.logger.info('Configuration Sources (priority order):\\n');\n ctx.logger.info('1. CLI flags (highest priority)');\n ctx.logger.info('2. Project config: kubit.config.toml');\n ctx.logger.info('3. Presets (if using extends)');\n ctx.logger.info('4. Defaults (lowest priority)');\n ctx.logger.info('');\n\n if (options.key) {\n // Explain specific key\n const keys = options.key.split('.');\n let value: any = ctx.config;\n for (const k of keys) {\n value = value?.[k];\n }\n\n ctx.logger.info(`Key: ${options.key}`);\n ctx.logger.info(`Value: ${JSON.stringify(value, null, 2)}`);\n ctx.logger.info('Source: Project config'); // In production, track actual source\n } else {\n // Show all config with sources\n ctx.logger.info('Current Configuration:\\n');\n\n // Project section\n ctx.logger.info('[project]');\n ctx.logger.info(` name = \"${ctx.config.project.name}\" (from: config)`);\n ctx.logger.info(` type = \"${ctx.config.project.type}\" (from: default)`);\n ctx.logger.info(` stack = \"${ctx.config.project.stack}\" (from: config)`);\n ctx.logger.info(` language = \"${ctx.config.project.language}\" (from: default)`);\n ctx.logger.info(\n ` packageManager = \"${ctx.config.project.packageManager}\" (from: auto-detect)`\n );\n ctx.logger.info('');\n\n // Quality section\n if (ctx.config.quality) {\n ctx.logger.info('[quality]');\n ctx.logger.info(` lint = ${ctx.config.quality.lint} (from: default)`);\n ctx.logger.info(` format = ${ctx.config.quality.format} (from: default)`);\n ctx.logger.info(` typecheck = ${ctx.config.quality.typecheck} (from: default)`);\n ctx.logger.info(` unitTest = ${ctx.config.quality.unitTest} (from: default)`);\n ctx.logger.info('');\n }\n\n // Plugins section\n if (ctx.config.plugins?.enabled) {\n ctx.logger.info('[plugins]');\n ctx.logger.info(` enabled = ${JSON.stringify(ctx.config.plugins.enabled)} (from: config)`);\n ctx.logger.info('');\n }\n\n // Presets info\n ctx.logger.info('Available presets:');\n ctx.logger.info(' - kubit:recommended (sensible defaults)');\n ctx.logger.info(' - kubit:react (React-specific settings)');\n ctx.logger.info(' - kubit:strict (strict quality checks)');\n ctx.logger.info('');\n ctx.logger.info('Use: extends = [\"kubit:recommended\"] in config');\n }\n });\n\n// ============================================================================\n// ENV COMMANDS\n// ============================================================================\n\nimport { envInitCommand, envValidateCommand, envPrintCommand } from './commands/env.js';\n\nprogram\n .command('env:init')\n .description('Initialize .env.local from .env.example')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const result = await envInitCommand(ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n });\n\nprogram\n .command('env:validate')\n .description('Validate environment variables')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const result = await envValidateCommand(ctx);\n if (globalOpts.json) {\n ctx.logger.json(result);\n }\n if (result.status === 'error') {\n process.exit(1);\n }\n });\n\nprogram\n .command('env:print')\n .description('Print environment variables (masked)')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n await envPrintCommand(ctx);\n });\n\n// ============================================================================\n// KUBIT SPEC COMMANDS (PHASE 4)\n// ============================================================================\n\nimport { KubitSpec } from './core/kubit-spec.js';\n\n// Spec validate\nprogram\n .command('spec:validate')\n .description('Validate config, plugins, and outputs against Kubit Spec')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const spec = new KubitSpec(ctx.logger);\n\n ctx.logger.step('Validating against Kubit Spec...');\n\n // Validate config\n const configValidation = spec.validateConfig(ctx.config);\n\n if (configValidation.valid) {\n ctx.logger.success('✓ Configuration is valid');\n } else {\n ctx.logger.error('✗ Configuration validation failed:');\n for (const error of configValidation.errors) {\n ctx.logger.error(` - ${error}`);\n }\n }\n\n if (globalOpts.json) {\n ctx.logger.json({\n status: configValidation.valid ? 'ok' : 'error',\n validation: configValidation,\n });\n }\n\n if (!configValidation.valid) {\n process.exit(1);\n }\n });\n\n// Spec print\nprogram\n .command('spec:print')\n .description('Show active Kubit Spec version and contracts')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const spec = new KubitSpec(ctx.logger);\n\n const specInfo = spec.getSpecInfo();\n\n if (globalOpts.json) {\n ctx.logger.json(specInfo);\n } else {\n ctx.logger.info(`Kubit Spec Version: ${specInfo.version}\\n`);\n ctx.logger.info('Active Contracts:');\n ctx.logger.info(' - Configuration Schema');\n ctx.logger.info(' - Plugin Manifest');\n ctx.logger.info(' - Task Contract');\n ctx.logger.info(' - Command Output');\n }\n });\n\n// Spec explain\nprogram\n .command('spec:explain <area>')\n .description('Explain Kubit Spec for config, plugin, task, or output')\n .action(async (area, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const spec = new KubitSpec(ctx.logger);\n\n const explanation = spec.explainSpec(area as any);\n ctx.logger.info(explanation);\n });\n\n// ============================================================================\n// TASK ENGINE COMMANDS (PHASE 4)\n// ============================================================================\n\nimport { TaskEngine } from './core/task-engine.js';\n\n// Tasks list\nprogram\n .command('tasks:list')\n .description('List all registered tasks')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const engine = new TaskEngine(ctx.logger);\n\n // Register built-in tasks\n // In production, these would be loaded from plugins\n const tasks = engine.listTasks();\n\n if (globalOpts.json) {\n ctx.logger.json(tasks);\n } else {\n ctx.logger.info('Registered Tasks:\\n');\n for (const task of tasks) {\n const cacheable = task.cacheable ? '📦' : ' ';\n ctx.logger.info(`${cacheable} ${task.name}`);\n ctx.logger.info(` ${task.description}`);\n }\n }\n });\n\n// Tasks graph\nprogram\n .command('tasks:graph')\n .description('Show task dependency graph (DAG)')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const engine = new TaskEngine(ctx.logger);\n\n const graph = engine.getTaskGraph();\n\n if (globalOpts.json) {\n ctx.logger.json(graph);\n } else {\n ctx.logger.info('Task Dependency Graph:\\n');\n for (const [task, deps] of Object.entries(graph)) {\n if (deps.length > 0) {\n ctx.logger.info(`${task} → ${deps.join(', ')}`);\n } else {\n ctx.logger.info(`${task} (no dependencies)`);\n }\n }\n }\n });\n\n// ============================================================================\n// RECIPE COMMANDS (PHASE 4)\n// ============================================================================\n\nimport { RecipeEngine } from './core/recipe-engine.js';\n\n// Recipe list\nprogram\n .command('recipe:list')\n .description('List available recipes')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const engine = new RecipeEngine(ctx.logger, ctx.cwd, ctx);\n\n const recipes = engine.listRecipes();\n\n if (globalOpts.json) {\n ctx.logger.json(recipes);\n } else {\n if (recipes.length === 0) {\n ctx.logger.info('No recipes available. Add recipes using: kubit-cli recipe:add <path>');\n } else {\n ctx.logger.info('Available Recipes:\\n');\n for (const recipe of recipes) {\n ctx.logger.info(`${recipe.name} (${recipe.version})`);\n ctx.logger.info(` ${recipe.description}`);\n if (recipe.tags && recipe.tags.length > 0) {\n ctx.logger.info(` Tags: ${recipe.tags.join(', ')}`);\n }\n }\n }\n }\n });\n\n// Recipe run\nprogram\n .command('recipe:run <name>')\n .description('Run a recipe')\n .option('--dry-run', 'Show what would be done')\n .option('--var <key=value...>', 'Set recipe variables')\n .action(async (name, options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const engine = new RecipeEngine(ctx.logger, ctx.cwd, ctx);\n\n // Parse variables\n const variables: Record<string, any> = {};\n if (options.var) {\n const vars = Array.isArray(options.var) ? options.var : [options.var];\n for (const v of vars) {\n const [key, value] = v.split('=');\n if (key && value) {\n variables[key] = value;\n }\n }\n }\n\n const result = await engine.executeRecipe(name, {\n dryRun: options.dryRun || globalOpts.dryRun,\n variables,\n });\n\n if (globalOpts.json) {\n ctx.logger.json(result);\n } else {\n ctx.logger.info('\\n📊 Recipe Execution Summary:');\n ctx.logger.info(` Steps executed: ${result.stepsExecuted}`);\n ctx.logger.info(` Steps failed: ${result.stepsFailed}`);\n ctx.logger.info(` Steps skipped: ${result.stepsSkipped}`);\n ctx.logger.info(` Duration: ${result.duration}ms`);\n\n if (result.errors.length > 0) {\n ctx.logger.error('\\n❌ Errors:');\n result.errors.forEach((e) => ctx.logger.error(` ${e.step}: ${e.error}`));\n }\n\n if (result.warnings.length > 0) {\n ctx.logger.warn('\\n⚠️ Warnings:');\n result.warnings.forEach((w) => ctx.logger.warn(` ${w}`));\n }\n }\n\n if (!result.success) {\n process.exit(1);\n }\n });\n\n// Recipe add (install from file or URL)\nprogram\n .command('recipe:add <path>')\n .description('Add a recipe from file or URL')\n .action(async (path, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const engine = new RecipeEngine(ctx.logger, ctx.cwd, ctx);\n\n try {\n const recipe = engine.loadRecipe(path);\n ctx.logger.success(`✅ Recipe added: ${recipe.name} (${recipe.version})`);\n ctx.logger.info(` ${recipe.description}`);\n if (recipe.author) {\n ctx.logger.info(` Author: ${recipe.author}`);\n }\n ctx.logger.info(`\\n💡 Run with: kubit-cli recipe:run ${recipe.name}`);\n } catch (error) {\n ctx.logger.error('Failed to load recipe', error as Error);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// PLUGIN VERIFICATION COMMANDS (PHASE 4)\n// ============================================================================\n\nimport { PluginVerification } from './core/plugin-verification.js';\n\n// Plugin verify\nprogram\n .command('plugin:verify <name>')\n .description('Verify plugin integrity and signature')\n .action(async (name, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const verification = new PluginVerification(ctx.logger);\n\n ctx.logger.step(`Verifying plugin: ${name}`);\n\n // In production, would get actual plugin path\n const pluginPath = `node_modules/${name}`;\n\n const result = await verification.verifyPlugin(name, pluginPath);\n\n if (result.verified) {\n ctx.logger.success('✓ Plugin verified');\n } else {\n ctx.logger.warn('⚠ Plugin not verified');\n }\n\n if (result.trusted) {\n ctx.logger.success('✓ Publisher trusted');\n }\n\n for (const issue of result.issues) {\n ctx.logger.error(` ✗ ${issue}`);\n }\n\n for (const warning of result.warnings) {\n ctx.logger.warn(` ⚠ ${warning}`);\n }\n\n if (globalOpts.json) {\n ctx.logger.json(result);\n }\n });\n\n// Plugin trust add\nprogram\n .command('plugin:trust:add <publisher>')\n .description('Add publisher to trusted list')\n .action(async (publisher, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const verification = new PluginVerification(ctx.logger);\n\n verification.addTrustedPublisher({\n addedAt: new Date().toISOString(),\n name: publisher,\n verified: true,\n });\n\n ctx.logger.success(`Added trusted publisher: ${publisher}`);\n });\n\n// Plugin trust list\nprogram\n .command('plugin:trust:list')\n .description('List trusted publishers')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const verification = new PluginVerification(ctx.logger);\n\n const publishers = verification.listTrustedPublishers();\n\n if (globalOpts.json) {\n ctx.logger.json(publishers);\n } else {\n ctx.logger.info('Trusted Publishers:\\n');\n for (const pub of publishers) {\n const verified = pub.verified ? '✓' : ' ';\n ctx.logger.info(`[${verified}] ${pub.name}`);\n }\n }\n });\n\n// ============================================================================\n// MONOREPO COMMANDS\n// ============================================================================\n\n// Monorepo init\nprogram\n .command('monorepo:init')\n .description('Initialize a monorepo structure')\n .option('-t, --tool <tool>', 'Monorepo tool (pnpm, yarn, npm, turborepo, nx, lerna)', 'pnpm')\n .option('--skip-install', 'Skip dependency installation')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await monorepoInitCommand(\n {\n skipInstall: options.skipInstall,\n tool: options.tool,\n },\n ctx\n );\n\n if (globalOpts.json) {\n ctx.logger.json(result);\n }\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Monorepo init failed', error as Error);\n process.exit(1);\n }\n });\n\n// Monorepo add\nprogram\n .command('monorepo:add <name>')\n .description('Add a new package to the monorepo')\n .option('-t, --type <type>', 'Package type (app or package)', 'package')\n .option('--template <template>', 'Template to use (react, vanilla, library)')\n .option('--private', 'Mark package as private')\n .action(async (name, options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await monorepoAddCommand(\n {\n name,\n private: options.private,\n template: options.template,\n type: options.type,\n },\n ctx\n );\n\n if (globalOpts.json) {\n ctx.logger.json(result);\n }\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Monorepo add failed', error as Error);\n process.exit(1);\n }\n });\n\n// Monorepo list\nprogram\n .command('monorepo:list')\n .description('List all packages in the monorepo')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await monorepoListCommand(ctx);\n\n if (globalOpts.json) {\n ctx.logger.json(result);\n }\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Monorepo list failed', error as Error);\n process.exit(1);\n }\n });\n\n// Monorepo info\nprogram\n .command('monorepo:info')\n .description('Show monorepo information')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await monorepoInfoCommand(ctx);\n\n if (globalOpts.json) {\n ctx.logger.json(result);\n }\n\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Monorepo info failed', error as Error);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// BERNOVA COMMANDS (Kubit Ecosystem)\n// ============================================================================\n\n// Bernova init\nprogram\n .command('bernova:init')\n .description('Initialize Bernova in your project')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await bernovaCommand({ init: true }, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Bernova init failed', error as Error);\n process.exit(1);\n }\n });\n\n// Bernova generate\nprogram\n .command('bernova:generate')\n .description('Generate Bernova styles')\n .option('--foundation', 'Generate only foundations')\n .option('--component', 'Generate only components')\n .option('--watch', 'Watch mode for development')\n .action(async (options, command) => {\n const globalOpts = command.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await bernovaCommand(options, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Bernova generation failed', error as Error);\n process.exit(1);\n }\n });\n\n// Bernova validate\nprogram\n .command('bernova:validate')\n .description('Validate Bernova configuration')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await bernovaCommand({ validate: true }, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Bernova validation failed', error as Error);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// KUBIT ECOSYSTEM COMMANDS\n// ============================================================================\n\n// Ecosystem info\nprogram\n .command('ecosystem:info')\n .description('Show Kubit ecosystem status')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await ecosystemCommand({ info: true }, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Ecosystem info failed', error as Error);\n process.exit(1);\n }\n });\n\n// Ecosystem health\nprogram\n .command('ecosystem:health')\n .description('Check Kubit ecosystem health')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await ecosystemCommand({ health: true }, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Ecosystem health check failed', error as Error);\n process.exit(1);\n }\n });\n\n// Ecosystem upgrade\nprogram\n .command('ecosystem:upgrade')\n .description('Upgrade Kubit ecosystem packages')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await ecosystemCommand({ upgrade: true }, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Ecosystem upgrade failed', error as Error);\n process.exit(1);\n }\n });\n\n// Ecosystem sync\nprogram\n .command('ecosystem:sync')\n .description('Sync Kubit ecosystem versions')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n\n try {\n const result = await ecosystemCommand({ sync: true }, ctx);\n if (result.status === 'error') {\n process.exit(1);\n }\n } catch (error) {\n ctx.logger.error('Ecosystem sync failed', error as Error);\n process.exit(1);\n }\n });\n\n// ============================================================================\n// AUDIT COMMANDS (PHASE 4)\n// ============================================================================\n\n// Audit SBOM\nprogram\n .command('audit:sbom')\n .description('Generate Software Bill of Materials (SBOM)')\n .action(async function () {\n const globalOpts = this.optsWithGlobals() as GlobalOptions;\n const ctx = await createContext(globalOpts);\n const verification = new PluginVerification(ctx.logger);\n\n ctx.logger.step('Generating SBOM...');\n\n const sbom = verification.generateSBOM(ctx.cwd);\n\n if (globalOpts.json) {\n ctx.logger.json(sbom);\n } else {\n ctx.logger.success(`SBOM generated for ${sbom.metadata.component.name}`);\n ctx.logger.info(`Components: ${sbom.components.length}`);\n ctx.logger.info(`Format: ${sbom.bomFormat} ${sbom.specVersion}`);\n }\n });\n\n// ============================================================================\n// HELPER FUNCTIONS\n// ============================================================================\n\nasync function createContext(\n globalOpts: GlobalOptions\n): Promise<PluginContext & { pluginManager?: PluginManager }> {\n const cwd = globalOpts.cwd || process.cwd();\n const logger = new ConsoleLogger(globalOpts);\n const configLoader = new ConfigLoader(cwd);\n\n let config = await configLoader.load(globalOpts.config);\n if (!config) {\n logger.debug('No config file found, using auto-detection');\n const autoConfig = await configLoader.autoDetect();\n config = autoConfig as any;\n }\n\n if (!config) {\n throw new Error('Failed to load or detect configuration');\n }\n\n const runner = new DefaultTaskRunner(logger);\n const pluginManager = new PluginManager(logger, cwd);\n\n const ctx: PluginContext & { pluginManager?: PluginManager } = {\n config,\n cwd,\n logger,\n pluginManager,\n runner,\n };\n\n // Load plugins\n const pluginNames = config.plugins?.enabled || [];\n if (pluginNames.length > 0) {\n await pluginManager.loadPlugins(pluginNames, ctx);\n }\n\n return ctx;\n}\n\n// Parse arguments\nprogram.parse();\n","/**\n * Bernova Design System commands\n * Manage Bernova CSS-in-JS in your project\n */\n\nimport { existsSync } from 'fs';\nimport { join } from 'path';\n\nimport type { CommandResult, PluginContext } from '../types/index.js';\n\nimport { colors } from '../utils/theme.js';\n\ninterface BernovaOptions {\n watch?: boolean;\n foundation?: boolean;\n component?: boolean;\n validate?: boolean;\n init?: boolean;\n}\n\n/**\n * Main Bernova command handler\n */\nexport async function bernovaCommand(\n options: BernovaOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n // Check if Bernova is installed\n const hasBernova = await checkBernovaInstalled(ctx);\n\n if (!hasBernova && !options.init) {\n return {\n errors: [\n {\n code: 'BERNOVA_NOT_FOUND',\n message: 'Bernova package not found in dependencies',\n solution: 'Run: kubit-forge add bernova',\n },\n ],\n message: 'Bernova is not installed in this project',\n status: 'error',\n };\n }\n\n if (options.init) {\n return await initBernova(ctx);\n }\n\n if (options.validate) {\n return await validateBernovaConfig(ctx);\n }\n\n if (options.watch) {\n return await watchBernova(ctx);\n }\n\n if (options.foundation) {\n return await generateFoundations(ctx);\n }\n\n if (options.component) {\n return await generateComponents(ctx);\n }\n\n // Default: generate all\n return await generateAll(ctx);\n}\n\n/**\n * Check if Bernova is installed\n */\nasync function checkBernovaInstalled(ctx: PluginContext): Promise<boolean> {\n const packageJsonPath = join(ctx.cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n return false;\n }\n\n try {\n const packageJson = await import(packageJsonPath, { assert: { type: 'json' } });\n const deps = {\n ...packageJson.default.dependencies,\n ...packageJson.default.devDependencies,\n };\n\n return 'bernova' in deps;\n } catch {\n return false;\n }\n}\n\n/**\n * Initialize Bernova in project\n */\nasync function initBernova(ctx: PluginContext): Promise<CommandResult> {\n ctx.logger.step('Initializing Bernova...');\n\n const configPath = join(ctx.cwd, 'bernova.config.json');\n\n if (existsSync(configPath)) {\n return {\n errors: [\n {\n code: 'ALREADY_INITIALIZED',\n message: 'bernova.config.json already exists',\n solution: 'Remove the existing config file or use --force',\n },\n ],\n message: 'Bernova is already initialized',\n status: 'error',\n };\n }\n\n // Create default config\n const { writeFileSync } = await import('fs');\n const defaultConfig = {\n fonts: {\n googleFonts: [{ family: 'Inter', weights: [400, 500, 600, 700] }],\n },\n provider: 'bernova',\n reset: true,\n themes: {\n default: {\n components: 'src/styles/theme/theme.ts',\n foundations: 'src/styles/theme/foundations.ts',\n globalStyles: 'src/styles/theme/globalStyles.ts',\n mediaQueries: 'src/styles/theme/mediaQueries.ts',\n },\n },\n tools: {\n cssClassNames: true,\n cssMediaQueries: true,\n cssVariables: true,\n },\n };\n\n writeFileSync(configPath, JSON.stringify(defaultConfig, null, 2));\n ctx.logger.success('Bernova configuration created');\n\n return {\n data: { configPath },\n message: 'Bernova initialized successfully',\n status: 'ok',\n };\n}\n\n/**\n * Validate Bernova configuration\n */\nasync function validateBernovaConfig(ctx: PluginContext): Promise<CommandResult> {\n ctx.logger.step('Validating Bernova configuration...');\n\n const configPath = join(ctx.cwd, 'bernova.config.json');\n\n if (!existsSync(configPath)) {\n return {\n errors: [\n {\n code: 'CONFIG_NOT_FOUND',\n message: 'bernova.config.json not found',\n solution: 'Run: kubit-forge bernova:init',\n },\n ],\n message: 'Bernova configuration not found',\n status: 'error',\n };\n }\n\n try {\n const config = await import(configPath, { assert: { type: 'json' } });\n const errors: string[] = [];\n\n // Validate required fields\n if (!config.default.provider) {\n errors.push('Missing required field: provider');\n }\n\n if (!config.default.themes) {\n errors.push('Missing required field: themes');\n }\n\n if (errors.length > 0) {\n return {\n errors: errors.map((e) => ({\n code: 'INVALID_CONFIG',\n message: e,\n solution: 'Check bernova.config.json',\n })),\n message: 'Invalid Bernova configuration',\n status: 'error',\n };\n }\n\n ctx.logger.success('Bernova configuration is valid');\n return {\n message: 'Configuration validated successfully',\n status: 'ok',\n };\n } catch (error) {\n return {\n errors: [\n {\n code: 'PARSE_ERROR',\n message: error instanceof Error ? error.message : 'Unknown error',\n solution: 'Check JSON syntax in bernova.config.json',\n },\n ],\n message: 'Failed to parse Bernova configuration',\n status: 'error',\n };\n }\n}\n\n/**\n * Watch mode for Bernova\n */\nasync function watchBernova(ctx: PluginContext): Promise<CommandResult> {\n ctx.logger.step('Starting Bernova in watch mode...');\n\n const { execa } = await import('execa');\n\n try {\n await execa('bernova', ['--watch'], {\n cwd: ctx.cwd,\n stdio: 'inherit',\n });\n\n return {\n message: 'Bernova watch mode started',\n status: 'ok',\n };\n } catch (error) {\n return {\n errors: [\n {\n code: 'WATCH_FAILED',\n message: error instanceof Error ? error.message : 'Unknown error',\n solution: 'Check Bernova installation and configuration',\n },\n ],\n message: 'Failed to start Bernova watch mode',\n status: 'error',\n };\n }\n}\n\n/**\n * Generate foundations only\n */\nasync function generateFoundations(ctx: PluginContext): Promise<CommandResult> {\n ctx.logger.step('Generating Bernova foundations...');\n\n const { execa } = await import('execa');\n\n try {\n await execa('bernova', ['--foundation'], {\n cwd: ctx.cwd,\n stdio: 'inherit',\n });\n\n ctx.logger.success('Foundations generated');\n return {\n message: 'Foundations generated successfully',\n status: 'ok',\n };\n } catch (error) {\n return {\n errors: [\n {\n code: 'GENERATION_FAILED',\n message: error instanceof Error ? error.message : 'Unknown error',\n solution: 'Check Bernova configuration',\n },\n ],\n message: 'Failed to generate foundations',\n status: 'error',\n };\n }\n}\n\n/**\n * Generate components only\n */\nasync function generateComponents(ctx: PluginContext): Promise<CommandResult> {\n ctx.logger.step('Generating Bernova components...');\n\n const { execa } = await import('execa');\n\n try {\n await execa('bernova', ['--component'], {\n cwd: ctx.cwd,\n stdio: 'inherit',\n });\n\n ctx.logger.success('Components generated');\n return {\n message: 'Components generated successfully',\n status: 'ok',\n };\n } catch (error) {\n return {\n errors: [\n {\n code: 'GENERATION_FAILED',\n message: error instanceof Error ? error.message : 'Unknown error',\n solution: 'Check Bernova configuration',\n },\n ],\n message: 'Failed to generate components',\n status: 'error',\n };\n }\n}\n\n/**\n * Generate all Bernova styles\n */\nasync function generateAll(ctx: PluginContext): Promise<CommandResult> {\n ctx.logger.step('Generating all Bernova styles...');\n\n const { execa } = await import('execa');\n\n try {\n await execa('bernova', [], {\n cwd: ctx.cwd,\n stdio: 'inherit',\n });\n\n ctx.logger.success('All styles generated');\n\n console.log('');\n console.log(colors.success('✓ Bernova styles generated successfully'));\n console.log('');\n console.log(colors.muted('Generated files:'));\n console.log(colors.muted(' • src/styles/default/foundations.css'));\n console.log(colors.muted(' • src/styles/default/globalStyles.css'));\n console.log(colors.muted(' • src/styles/default/components.css'));\n console.log('');\n\n return {\n message: 'All styles generated successfully',\n status: 'ok',\n };\n } catch (error) {\n return {\n errors: [\n {\n code: 'GENERATION_FAILED',\n message: error instanceof Error ? error.message : 'Unknown error',\n solution: 'Check Bernova installation and configuration',\n },\n ],\n message: 'Failed to generate styles',\n status: 'error',\n };\n }\n}\n","import chalk from 'chalk';\n\n/**\n * Brand colors for Kubit CLI\n * Consistent color palette across all CLI output\n */\nexport const colors = {\n bold: chalk.bold,\n boolean: chalk.hex('#06b6d4'), // Cyan\n\n code: chalk.hex('#e879f9'),\n dim: chalk.dim,\n error: chalk.hex('#ef4444'), // Red\n info: chalk.hex('#3b82f6'), // Blue\n\n keyword: chalk.hex('#a855f7'), // Purple\n // Special\n link: chalk.hex('#3b82f6').underline,\n // UI colors\n muted: chalk.hex('#6b7280'), // Gray\n\n number: chalk.hex('#f97316'), // Orange\n // Primary brand colors\n primary: chalk.hex('#6366f1'), // Indigo - main brand color\n secondary: chalk.hex('#8b5cf6'), // Purple - accent color\n // Syntax highlighting\n string: chalk.hex('#22c55e'), // Green\n\n // Semantic colors\n success: chalk.hex('#10b981'), // Green\n warning: chalk.hex('#f59e0b'), // Amber\n} as const;\n\n/**\n * Box drawing characters for frames and borders\n */\nexport const box = {\n bottomLeft: '└',\n bottomRight: '┘',\n cross: '┼',\n horizontal: '─',\n horizontalDown: '┬',\n horizontalUp: '┴',\n topLeft: '┌',\n topRight: '┐',\n vertical: '│',\n verticalLeft: '┤',\n verticalRight: '├',\n} as const;\n\n/**\n * Symbols for different message types\n */\nexport const symbols = {\n bullet: '•',\n ellipsis: '...',\n error: '✗',\n info: 'i',\n line: '─',\n pointer: '›',\n step: '→',\n success: '✓',\n warning: '!',\n} as const;\n\n/**\n * Create a styled box with content\n */\nexport function createBox(\n content: string,\n options: {\n title?: string;\n padding?: number;\n color?: keyof typeof colors;\n } = {}\n): string {\n const { color = 'primary', padding = 1, title } = options;\n const lines = content.split('\\n');\n const maxLength = Math.max(...lines.map((l) => l.length));\n const width = maxLength + padding * 2;\n\n const colorFn = colors[color];\n const pad = ' '.repeat(padding);\n\n let result = '';\n\n // Top border\n if (title) {\n const titleText = ` ${title} `;\n const leftPad = Math.floor((width - titleText.length) / 2);\n const rightPad = width - titleText.length - leftPad;\n result +=\n colorFn(\n box.topLeft +\n box.horizontal.repeat(leftPad) +\n titleText +\n box.horizontal.repeat(rightPad) +\n box.topRight\n ) + '\\n';\n } else {\n result += colorFn(box.topLeft + box.horizontal.repeat(width) + box.topRight) + '\\n';\n }\n\n // Content\n for (const line of lines) {\n const paddedLine = line + ' '.repeat(maxLength - line.length);\n result += colorFn(box.vertical) + pad + paddedLine + pad + colorFn(box.vertical) + '\\n';\n }\n\n // Bottom border\n result += colorFn(box.bottomLeft + box.horizontal.repeat(width) + box.bottomRight);\n\n return result;\n}\n\n/**\n * Create a banner with brand styling\n */\nexport function createBanner(version: string): string {\n const lines = [\n '',\n ' KUBIT CLI',\n ` v${version}`,\n '',\n ' Modern Web Development Made Simple',\n '',\n ];\n\n return createBox(lines.join('\\n'), {\n color: 'primary',\n padding: 2,\n });\n}\n\n/**\n * Create a section header\n */\nexport function createHeader(text: string): string {\n return '\\n' + colors.primary.bold(text) + '\\n' + colors.muted(box.horizontal.repeat(text.length));\n}\n\n/**\n * Create a list item\n */\nexport function createListItem(text: string, checked = false): string {\n const symbol = checked ? colors.success(symbols.success) : colors.muted(symbols.bullet);\n return `${symbol} ${text}`;\n}\n\n/**\n * Create a progress indicator\n */\nexport function createProgress(current: number, total: number, label: string): string {\n const percentage = Math.round((current / total) * 100);\n const barLength = 20;\n const filled = Math.round((current / total) * barLength);\n const empty = barLength - filled;\n\n const bar = colors.primary('█'.repeat(filled)) + colors.muted('░'.repeat(empty));\n const counter = colors.muted(`[${current}/${total}]`);\n\n return `${bar} ${percentage}% ${counter} ${label}`;\n}\n\n/**\n * Create a key-value pair display\n */\nexport function createKeyValue(key: string, value: string): string {\n return `${colors.muted(key + ':')} ${colors.bold(value)}`;\n}\n\n/**\n * Create a command example\n */\nexport function createCommand(command: string): string {\n return colors.code(`$ ${command}`);\n}\n\n/**\n * Create a file path display\n */\nexport function createPath(path: string): string {\n return colors.info(path);\n}\n\n/**\n * Create a divider line\n */\nexport function createDivider(length = 50, char = box.horizontal): string {\n return colors.muted(char.repeat(length));\n}\n","/**\n * Interactive create command - Modern DX for project initialization\n */\n\nimport enquirer from 'enquirer';\nimport { existsSync, mkdirSync } from 'fs';\nimport { join } from 'path';\n\nimport type { CommandResult, PluginContext } from '../types/index.js';\n\nimport { generateReactKubitUITemplate } from '../templates/generators/react-kubit-ui.js';\nimport { colors } from '../utils/theme.js';\nimport {\n displayWelcome,\n displaySuccess,\n displayNextSteps,\n displayCommands,\n} from '../utils/ui-helpers.js';\nimport { initCommand } from './init.js';\n\ninterface CreateOptions {\n name?: string;\n template?: string;\n skipPrompts?: boolean;\n}\n\ninterface ProjectAnswers {\n name: string;\n template: string;\n features: string[];\n packageManager: 'pnpm' | 'npm' | 'yarn';\n git: boolean;\n}\n\nconst TEMPLATES = [\n {\n description: '🚀 Complete Kubit Ecosystem: Components + Charts + Bernova + ESLint',\n name: 'Kubit Full Ecosystem (Recommended)',\n value: 'kubit-full',\n },\n {\n description: 'React app with Kubit UI Components and Design System',\n name: 'React + Kubit UI Components',\n value: 'react-kubit-ui',\n },\n {\n description: 'Modern React app with TypeScript, Vite and Bernova Design System',\n name: 'React + TypeScript + Vite + Bernova',\n value: 'react-ts-vite-bernova',\n },\n {\n description: 'React with Bernova Design System and Vitest testing',\n name: 'React + Bernova + Vitest',\n value: 'react-bernova',\n },\n {\n description: 'Publishable React component library with Bernova',\n name: 'React Component Library + Bernova',\n value: 'react-lib-bernova',\n },\n {\n description: 'Pure TypeScript without frameworks',\n name: 'Vanilla TypeScript',\n value: 'vanilla-ts',\n },\n {\n description: 'Pure JavaScript without frameworks',\n name: 'Vanilla JavaScript',\n value: 'vanilla-js',\n },\n] as const;\n\nconst FEATURES = [\n {\n checked: true,\n name: 'Bernova Design System',\n value: 'bernova',\n },\n {\n checked: true,\n name: 'ESLint + Prettier',\n value: 'quality',\n },\n {\n checked: true,\n name: 'Vitest + Testing Library',\n value: 'testing',\n },\n {\n checked: false,\n name: 'Storybook',\n value: 'storybook',\n },\n {\n checked: false,\n name: 'Playwright E2E',\n value: 'playwright',\n },\n {\n checked: false,\n name: 'Husky + Commitlint',\n value: 'git-hooks',\n },\n {\n checked: false,\n name: 'Docker',\n value: 'docker',\n },\n] as const;\n\n/**\n * Interactive create command\n */\nexport async function createCommand(\n options: CreateOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n displayWelcome('Create New Project', 'Interactive wizard to scaffold your next web application');\n\n try {\n // Collect answers\n const answers = await collectAnswers(options, ctx);\n\n // Validate project name\n const targetDir = join(ctx.cwd, answers.name);\n if (existsSync(targetDir)) {\n return {\n errors: [\n {\n code: 'DIR_EXISTS',\n message: `Directory '${answers.name}' already exists`,\n solution: 'Choose a different project name or remove the existing directory',\n },\n ],\n message: `Directory '${answers.name}' already exists`,\n status: 'error',\n };\n }\n\n // Show summary\n displayProjectSummary(answers);\n\n // Confirm\n if (!options.skipPrompts) {\n const result = (await enquirer.prompt({\n initial: true,\n message: 'Create project with these settings?',\n name: 'confirmed',\n type: 'confirm',\n } as never)) as { confirmed: boolean };\n\n if (!result.confirmed) {\n return {\n message: 'Project creation cancelled',\n status: 'error',\n };\n }\n }\n\n // Create project\n ctx.logger.step('Creating project structure...');\n\n // Handle Kubit UI template separately\n if (answers.template === 'react-kubit-ui') {\n mkdirSync(targetDir, { recursive: true });\n generateReactKubitUITemplate({\n packageManager: answers.packageManager,\n projectName: answers.name,\n targetDir,\n });\n ctx.logger.success('Project structure created');\n } else {\n // Map template to stack\n const { language, stack } = parseTemplate(answers.template);\n\n // Initialize project\n const result = await initCommand(\n {\n name: answers.name,\n pm: answers.packageManager,\n stack,\n ts: language === 'ts',\n },\n ctx\n );\n\n if (result.status === 'error') {\n return result;\n }\n }\n\n // Add features\n if (answers.features.length > 0) {\n ctx.logger.step('Adding selected features...');\n await addFeatures(answers.features, answers.name, ctx);\n }\n\n // Initialize git\n if (answers.git) {\n ctx.logger.step('Initializing git repository...');\n await initializeGit(answers.name, ctx);\n }\n\n // Success\n displaySuccess('Project Created Successfully', [\n `Name: ${answers.name}`,\n `Template: ${TEMPLATES.find((t) => t.value === answers.template)?.name}`,\n `Package Manager: ${answers.packageManager}`,\n `Features: ${answers.features.length} selected`,\n `Git: ${answers.git ? 'Initialized' : 'Skipped'}`,\n ]);\n\n displayNextSteps([\n `cd ${answers.name}`,\n `${answers.packageManager} install`,\n `${answers.packageManager} run dev`,\n ]);\n\n displayCommands('Available Commands', [\n { command: `${answers.packageManager} run dev`, description: 'Start development server' },\n { command: `${answers.packageManager} run build`, description: 'Build for production' },\n { command: `${answers.packageManager} run test`, description: 'Run tests' },\n { command: `${answers.packageManager} run lint`, description: 'Lint code' },\n ]);\n\n return {\n data: { projectPath: targetDir },\n message: 'Project created successfully',\n status: 'ok',\n };\n } catch (error) {\n if (error instanceof Error && error.message.includes('User force closed')) {\n return {\n message: 'Project creation cancelled',\n status: 'error',\n };\n }\n\n return {\n message: `Failed to create project: ${error instanceof Error ? error.message : 'Unknown error'}`,\n status: 'error',\n };\n }\n}\n\n/**\n * Collect answers from user\n */\nasync function collectAnswers(options: CreateOptions, ctx: PluginContext): Promise<ProjectAnswers> {\n const prompts: any[] = [];\n\n // Project name\n if (!options.name) {\n prompts.push({\n initial: 'my-app',\n message: 'Project name:',\n name: 'name',\n type: 'input',\n validate: (value: string) => {\n if (!value) {\n return 'Project name is required';\n }\n if (!/^[a-z0-9-]+$/.test(value)) {\n return 'Project name must be lowercase alphanumeric with hyphens';\n }\n return true;\n },\n });\n }\n\n // Template\n if (!options.template) {\n prompts.push({\n choices: TEMPLATES.map((t) => ({\n hint: t.description,\n name: t.name,\n value: t.value,\n })),\n initial: 0,\n message: 'Choose a template:',\n name: 'template',\n type: 'select',\n });\n }\n\n // Features\n prompts.push({\n choices: FEATURES.map((f) => ({\n enabled: f.checked,\n name: f.name,\n value: f.value,\n })),\n message: 'Select features:',\n name: 'features',\n type: 'multiselect',\n });\n\n // Package manager\n prompts.push({\n choices: [\n { name: 'pnpm (recommended)', value: 'pnpm' },\n { name: 'npm', value: 'npm' },\n { name: 'yarn', value: 'yarn' },\n ],\n initial: 0,\n message: 'Package manager:',\n name: 'packageManager',\n type: 'select',\n });\n\n // Git\n prompts.push({\n initial: true,\n message: 'Initialize git repository?',\n name: 'git',\n type: 'confirm',\n });\n\n ctx.logger.debug(`About to prompt with ${prompts.length} questions`);\n\n try {\n const answers = (await enquirer.prompt(prompts)) as any;\n\n ctx.logger.debug('Prompts completed successfully');\n\n return {\n features: answers.features || [],\n git: answers.git !== undefined ? answers.git : true,\n name: options.name || answers.name,\n packageManager: answers.packageManager || 'pnpm',\n template: options.template || answers.template,\n };\n } catch (error) {\n ctx.logger.error('Failed to collect answers from prompts', error as Error);\n throw error;\n }\n}\n\n/**\n * Display project summary\n */\nfunction displayProjectSummary(answers: ProjectAnswers): void {\n console.log('');\n console.log(colors.primary.bold('Project Summary:'));\n console.log('');\n console.log(` ${colors.muted('Name:')} ${colors.bold(answers.name)}`);\n console.log(\n ` ${colors.muted('Template:')} ${colors.bold(TEMPLATES.find((t) => t.value === answers.template)?.name)}`\n );\n console.log(` ${colors.muted('Package Manager:')} ${colors.bold(answers.packageManager)}`);\n console.log(\n ` ${colors.muted('Features:')} ${colors.bold(answers.features.length > 0 ? answers.features.join(', ') : 'None')}`\n );\n console.log(` ${colors.muted('Git:')} ${colors.bold(answers.git ? 'Yes' : 'No')}`);\n console.log('');\n}\n\n/**\n * Parse template to stack and language\n */\nfunction parseTemplate(template: string): { stack: 'react' | 'vanilla'; language: 'ts' | 'js' } {\n if (template.includes('react')) {\n return { language: 'ts', stack: 'react' };\n }\n if (template.includes('vanilla-ts')) {\n return { language: 'ts', stack: 'vanilla' };\n }\n return { language: 'js', stack: 'vanilla' };\n}\n\n/**\n * Add features to project\n */\nasync function addFeatures(\n features: string[],\n _projectName: string,\n ctx: PluginContext\n): Promise<void> {\n // TODO: Implement feature addition\n // This would call the 'add' command for each feature\n for (const feature of features) {\n ctx.logger.debug(`Adding feature: ${feature}`);\n }\n}\n\n/**\n * Initialize git repository\n */\nasync function initializeGit(projectName: string, ctx: PluginContext): Promise<void> {\n const { execa } = await import('execa');\n const projectPath = join(ctx.cwd, projectName);\n\n try {\n await execa('git', ['init'], { cwd: projectPath });\n await execa('git', ['add', '.'], { cwd: projectPath });\n await execa('git', ['commit', '-m', 'Initial commit'], { cwd: projectPath });\n ctx.logger.success('Git repository initialized');\n } catch {\n ctx.logger.warn('Failed to initialize git repository');\n }\n}\n","import { writeFileSync, mkdirSync } from 'fs';\nimport { join } from 'path';\n\ninterface TemplateOptions {\n projectName: string;\n packageManager: string;\n targetDir: string;\n}\n\nexport function generateReactKubitUITemplate(options: TemplateOptions): void {\n const { projectName, packageManager, targetDir } = options;\n\n // Create directories\n mkdirSync(join(targetDir, 'src'), { recursive: true });\n mkdirSync(join(targetDir, 'src/components'), { recursive: true });\n mkdirSync(join(targetDir, 'src/styles'), { recursive: true });\n mkdirSync(join(targetDir, 'src/test'), { recursive: true });\n mkdirSync(join(targetDir, 'public'), { recursive: true });\n\n // package.json\n const packageJson = {\n name: projectName,\n version: '0.1.0',\n private: true,\n type: 'module',\n scripts: {\n dev: 'vite',\n build: 'tsc && vite build',\n preview: 'vite preview',\n lint: 'eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0',\n 'lint:fix': 'eslint . --ext ts,tsx --fix',\n format: 'prettier --write \"src/**/*.{ts,tsx,json,css}\"',\n 'format:check': 'prettier --check \"src/**/*.{ts,tsx,json,css}\"',\n typecheck: 'tsc --noEmit',\n test: 'vitest',\n 'test:ui': 'vitest --ui',\n 'test:coverage': 'vitest --coverage',\n },\n dependencies: {\n react: '^18.3.1',\n 'react-dom': '^18.3.1',\n '@kubit-ui-web/react-components': '^2.0.0-beta.48',\n '@kubit-ui-web/design-system': '^2.0.0-beta.5',\n },\n devDependencies: {\n '@types/react': '^18.3.12',\n '@types/react-dom': '^18.3.1',\n '@vitejs/plugin-react': '^5.1.2',\n '@testing-library/react': '^16.3.2',\n '@testing-library/jest-dom': '^6.9.1',\n '@testing-library/user-event': '^14.6.1',\n '@vitest/ui': '^4.0.18',\n '@vitest/coverage-v8': '^4.0.18',\n vitest: '^4.0.18',\n jsdom: '^27.4.0',\n typescript: '^5.9.3',\n 'typescript-eslint': '^8.54.0',\n eslint: '^9.39.2',\n 'eslint-plugin-react-hooks': '^5.1.0',\n 'eslint-plugin-react-refresh': '^0.4.16',\n prettier: '^3.8.1',\n vite: '^8.0.0-beta.10',\n },\n };\n\n writeFileSync(join(targetDir, 'package.json'), JSON.stringify(packageJson, null, 2));\n\n // tsconfig.json\n const tsconfig = {\n compilerOptions: {\n target: 'ES2020',\n useDefineForClassFields: true,\n lib: ['ES2020', 'DOM', 'DOM.Iterable'],\n module: 'ESNext',\n skipLibCheck: true,\n moduleResolution: 'bundler',\n allowImportingTsExtensions: true,\n isolatedModules: true,\n moduleDetection: 'force',\n noEmit: true,\n jsx: 'react-jsx',\n strict: true,\n noUnusedLocals: true,\n noUnusedParameters: true,\n noFallthroughCasesInSwitch: true,\n noUncheckedSideEffectImports: true,\n },\n include: ['src'],\n };\n\n writeFileSync(join(targetDir, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2));\n\n // vite.config.ts\n const viteConfig = `import { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react';\n\nexport default defineConfig({\n plugins: [react()],\n server: {\n port: 3000,\n open: true,\n },\n build: {\n outDir: 'dist',\n sourcemap: true,\n },\n});\n`;\n\n writeFileSync(join(targetDir, 'vite.config.ts'), viteConfig);\n\n // vitest.config.ts\n const vitestConfig = `import { defineConfig } from 'vitest/config';\nimport react from '@vitejs/plugin-react';\n\nexport default defineConfig({\n plugins: [react()],\n test: {\n globals: true,\n environment: 'jsdom',\n setupFiles: './src/test/setup.ts',\n coverage: {\n provider: 'v8',\n reporter: ['text', 'json', 'html'],\n exclude: [\n 'node_modules/',\n 'src/test/',\n '**/*.d.ts',\n '**/*.config.*',\n '**/mockData',\n '**/*.test.{ts,tsx}',\n ],\n },\n },\n});\n`;\n\n writeFileSync(join(targetDir, 'vitest.config.ts'), vitestConfig);\n\n // eslint.config.js\n const eslintConfig = `import js from '@eslint/js';\nimport globals from 'globals';\nimport reactHooks from 'eslint-plugin-react-hooks';\nimport reactRefresh from 'eslint-plugin-react-refresh';\nimport tseslint from 'typescript-eslint';\n\nexport default tseslint.config(\n { ignores: ['dist'] },\n {\n extends: [js.configs.recommended, ...tseslint.configs.recommended],\n files: ['**/*.{ts,tsx}'],\n languageOptions: {\n ecmaVersion: 2020,\n globals: globals.browser,\n },\n plugins: {\n 'react-hooks': reactHooks,\n 'react-refresh': reactRefresh,\n },\n rules: {\n ...reactHooks.configs.recommended.rules,\n 'react-refresh/only-export-components': [\n 'warn',\n { allowConstantExport: true },\n ],\n },\n },\n);\n`;\n\n writeFileSync(join(targetDir, 'eslint.config.js'), eslintConfig);\n\n // .prettierrc\n const prettierrc = {\n semi: true,\n singleQuote: true,\n tabWidth: 2,\n trailingComma: 'es5',\n printWidth: 100,\n arrowParens: 'always',\n };\n\n writeFileSync(join(targetDir, '.prettierrc'), JSON.stringify(prettierrc, null, 2));\n\n // .gitignore\n const gitignore = `# Dependencies\nnode_modules/\n.pnpm-store/\n\n# Build output\ndist/\nbuild/\n\n# Environment variables\n.env\n.env.local\n.env.*.local\n\n# IDE\n.vscode/\n.idea/\n*.swp\n*.swo\n*~\n\n# OS\n.DS_Store\nThumbs.db\n\n# Testing\ncoverage/\n.nyc_output/\n\n# Logs\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\npnpm-debug.log*\n\n# Misc\n.cache/\n.temp/\n`;\n\n writeFileSync(join(targetDir, '.gitignore'), gitignore);\n\n // kubit.config.toml\n const kubitConfig = `[kubit]\ncliVersion = \"^1.0.0\"\n\n[project]\nname = \"${projectName}\"\ntype = \"web\"\nstack = \"react\"\nlanguage = \"ts\"\npackageManager = \"${packageManager}\"\nnodeVersion = \"20\"\ndevPort = 3000\n\n[paths]\nsrc = \"src\"\ndist = \"dist\"\nenvExample = \".env.example\"\nenvLocal = \".env.local\"\n\n[quality]\nlint = true\nformat = true\ntypecheck = true\nunitTest = true\n\n[plugins]\nenabled = [\n \"@kubit/plugin-react\",\n \"@kubit/plugin-quality\",\n \"@kubit/plugin-env\",\n \"@kubit/plugin-generators\"\n]\n`;\n\n writeFileSync(join(targetDir, 'kubit.config.toml'), kubitConfig);\n\n // README.md\n const readme = `# ${projectName}\n\nReact application built with Kubit UI Components and Design System.\n\n## Features\n\n- ⚛️ React 18\n- 🎨 Kubit UI Components\n- 🎭 Kubit Design System (Bernova)\n- 📦 Vite\n- 🔷 TypeScript\n- ✅ Vitest + Testing Library\n- 🎯 ESLint + Prettier\n\n## Getting Started\n\n### Install dependencies\n\n\\`\\`\\`bash\n${packageManager} install\n\\`\\`\\`\n\n### Development\n\n\\`\\`\\`bash\n${packageManager} run dev\n\\`\\`\\`\n\nOpen [http://localhost:3000](http://localhost:3000) in your browser.\n\n### Build\n\n\\`\\`\\`bash\n${packageManager} run build\n\\`\\`\\`\n\n### Test\n\n\\`\\`\\`bash\n${packageManager} run test\n\\`\\`\\`\n\n### Lint\n\n\\`\\`\\`bash\n${packageManager} run lint\n${packageManager} run format\n\\`\\`\\`\n\n## Project Structure\n\n\\`\\`\\`\nsrc/\n├── components/ # React components\n├── styles/ # Global styles\n├── test/ # Test utilities\n├── App.tsx # Main app component\n└── main.tsx # Entry point\n\\`\\`\\`\n\n## Using Kubit UI Components\n\n### Setup Provider\n\nThe app is already configured with the Kubit Design System Provider:\n\n\\`\\`\\`tsx\nimport { Provider, KUBIT_VARIANTS } from '@kubit-ui-web/design-system';\nimport { StylesProvider, Button } from '@kubit-ui-web/react-components';\n\nfunction App() {\n const { ButtonSizeType, ButtonVariantType } = KUBIT_VARIANTS;\n\n return (\n <StylesProvider bernovaProvider={Provider}>\n <Button \n variant={ButtonVariantType.PRIMARY} \n size={ButtonSizeType.LARGE}\n >\n Click me\n </Button>\n </StylesProvider>\n );\n}\n\\`\\`\\`\n\n### Available Components\n\nImport components from \\`@kubit-ui-web/react-components\\`:\n\n- Button\n- Input\n- Text\n- Card\n- Modal\n- And many more...\n\n### Using Variants\n\nImport variants from \\`KUBIT_VARIANTS\\`:\n\n\\`\\`\\`tsx\nimport { KUBIT_VARIANTS } from '@kubit-ui-web/design-system';\n\nconst { \n ButtonVariantType, \n ButtonSizeType,\n TextVariantType,\n InputVariantType \n} = KUBIT_VARIANTS;\n\\`\\`\\`\n\n## Learn More\n\n- [Kubit UI Components](https://www.kubit-ui.com/)\n- [Kubit Design System](https://github.com/kubit-ui/kubit-react-components)\n- [React Documentation](https://react.dev/)\n- [Vite Documentation](https://vite.dev/)\n`;\n\n writeFileSync(join(targetDir, 'README.md'), readme);\n\n // index.html\n const indexHtml = `<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>${projectName}</title>\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/src/main.tsx\"></script>\n </body>\n</html>\n`;\n\n writeFileSync(join(targetDir, 'index.html'), indexHtml);\n\n // src/main.tsx\n const mainTsx = `import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport App from './App';\nimport './styles/index.css';\n\nReactDOM.createRoot(document.getElementById('root')!).render(\n <React.StrictMode>\n <App />\n </React.StrictMode>\n);\n`;\n\n writeFileSync(join(targetDir, 'src/main.tsx'), mainTsx);\n\n // src/App.tsx\n const appTsx = `import { Provider, KUBIT_VARIANTS } from '@kubit-ui-web/design-system';\nimport { StylesProvider, Button, Text } from '@kubit-ui-web/react-components';\nimport { ExampleComponent } from './components/ExampleComponent';\nimport './styles/App.css';\n\nfunction App() {\n const { ButtonSizeType, ButtonVariantType, TextVariantType } = KUBIT_VARIANTS;\n\n return (\n <StylesProvider bernovaProvider={Provider}>\n <div className=\"app\">\n <header className=\"app-header\">\n <Text variant={TextVariantType.HEADING_H1} as=\"h1\">\n Welcome to ${projectName}\n </Text>\n <Text variant={TextVariantType.PARAGRAPH_MEDIUM}>\n Built with Kubit UI Components\n </Text>\n </header>\n \n <main className=\"app-main\">\n <section className=\"hero\">\n <Text variant={TextVariantType.HEADING_H2} as=\"h2\">\n Get Started\n </Text>\n <Text variant={TextVariantType.PARAGRAPH_MEDIUM}>\n Edit <code>src/App.tsx</code> and save to reload.\n </Text>\n \n <div className=\"button-group\">\n <Button \n variant={ButtonVariantType.PRIMARY} \n size={ButtonSizeType.LARGE}\n onClick={() => alert('Primary button clicked!')}\n >\n Primary Button\n </Button>\n <Button \n variant={ButtonVariantType.SECONDARY} \n size={ButtonSizeType.LARGE}\n onClick={() => alert('Secondary button clicked!')}\n >\n Secondary Button\n </Button>\n </div>\n </section>\n \n <ExampleComponent title=\"Kubit UI Example\" />\n \n <section className=\"links\">\n <Text variant={TextVariantType.HEADING_H3} as=\"h3\">\n Learn More\n </Text>\n <ul>\n <li>\n <a href=\"https://www.kubit-ui.com/\" target=\"_blank\" rel=\"noopener noreferrer\">\n Kubit UI Documentation\n </a>\n </li>\n <li>\n <a href=\"https://react.dev/\" target=\"_blank\" rel=\"noopener noreferrer\">\n React Documentation\n </a>\n </li>\n <li>\n <a href=\"https://vite.dev/\" target=\"_blank\" rel=\"noopener noreferrer\">\n Vite Documentation\n </a>\n </li>\n </ul>\n </section>\n </main>\n </div>\n </StylesProvider>\n );\n}\n\nexport default App;\n`;\n\n writeFileSync(join(targetDir, 'src/App.tsx'), appTsx);\n\n // src/App.test.tsx\n const appTestTsx = `import { describe, it, expect } from 'vitest';\nimport { render, screen } from '@testing-library/react';\nimport App from './App';\n\ndescribe('App', () => {\n it('renders welcome message', () => {\n render(<App />);\n expect(screen.getByText(/Welcome to/i)).toBeInTheDocument();\n });\n \n it('renders buttons', () => {\n render(<App />);\n expect(screen.getByText('Primary Button')).toBeInTheDocument();\n expect(screen.getByText('Secondary Button')).toBeInTheDocument();\n });\n});\n`;\n\n writeFileSync(join(targetDir, 'src/App.test.tsx'), appTestTsx);\n\n // src/styles/index.css\n const indexCss = `* {\n box-sizing: border-box;\n margin: 0;\n padding: 0;\n}\n\n:root {\n font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n line-height: 1.5;\n font-weight: 400;\n\n color-scheme: light dark;\n color: rgba(255, 255, 255, 0.87);\n background-color: #242424;\n\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nbody {\n min-height: 100vh;\n display: flex;\n place-items: center;\n}\n\n#root {\n width: 100%;\n margin: 0 auto;\n text-align: center;\n}\n\nbutton {\n border-radius: 8px;\n border: 1px solid transparent;\n padding: 0.6em 1.2em;\n font-size: 1em;\n font-weight: 500;\n font-family: inherit;\n background-color: #1a1a1a;\n cursor: pointer;\n transition: border-color 0.25s;\n}\n\nbutton:hover {\n border-color: #646cff;\n}\n\nbutton:focus,\nbutton:focus-visible {\n outline: 4px auto -webkit-focus-ring-color;\n}\n\n@media (prefers-color-scheme: light) {\n :root {\n color: #213547;\n background-color: #ffffff;\n }\n \n button {\n background-color: #f9f9f9;\n }\n}\n`;\n\n writeFileSync(join(targetDir, 'src/styles/index.css'), indexCss);\n\n // src/styles/App.css\n const appCss = `.app {\n max-width: 1280px;\n margin: 0 auto;\n padding: 2rem;\n}\n\n.app-header {\n margin-bottom: 3rem;\n text-align: center;\n}\n\n.app-header h1 {\n margin-bottom: 1rem;\n}\n\n.app-main {\n display: flex;\n flex-direction: column;\n gap: 3rem;\n}\n\n.hero {\n padding: 2rem;\n border-radius: 8px;\n background: rgba(255, 255, 255, 0.05);\n text-align: center;\n}\n\n.hero h2 {\n margin-bottom: 1rem;\n}\n\n.hero code {\n padding: 0.2rem 0.4rem;\n border-radius: 4px;\n background: rgba(255, 255, 255, 0.1);\n font-family: 'Courier New', monospace;\n}\n\n.button-group {\n display: flex;\n gap: 1rem;\n justify-content: center;\n margin-top: 2rem;\n flex-wrap: wrap;\n}\n\n.links {\n padding: 2rem;\n text-align: center;\n}\n\n.links h3 {\n margin-bottom: 1rem;\n}\n\n.links ul {\n list-style: none;\n display: flex;\n flex-direction: column;\n gap: 0.5rem;\n align-items: center;\n}\n\n.links a {\n color: #646cff;\n text-decoration: none;\n transition: color 0.2s;\n}\n\n.links a:hover {\n color: #535bf2;\n}\n\n@media (prefers-color-scheme: light) {\n .links a {\n color: #747bff;\n }\n \n .links a:hover {\n color: #535bf2;\n }\n}\n`;\n\n writeFileSync(join(targetDir, 'src/styles/App.css'), appCss);\n\n // src/test/setup.ts\n const setupTs = `import { expect, afterEach } from 'vitest';\nimport { cleanup } from '@testing-library/react';\nimport * as matchers from '@testing-library/jest-dom/matchers';\n\nexpect.extend(matchers);\n\nafterEach(() => {\n cleanup();\n});\n`;\n\n writeFileSync(join(targetDir, 'src/test/setup.ts'), setupTs);\n\n // src/components/ExampleComponent.tsx\n const exampleComponentTsx = `import { useState } from 'react';\nimport { KUBIT_VARIANTS } from '@kubit-ui-web/design-system';\nimport { Button, Input, Text } from '@kubit-ui-web/react-components';\n\ninterface ExampleComponentProps {\n title?: string;\n}\n\nexport function ExampleComponent({ title = 'Example Component' }: ExampleComponentProps) {\n const { ButtonSizeType, ButtonVariantType, TextVariantType, InputVariantType } = KUBIT_VARIANTS;\n const [value, setValue] = useState('');\n const [submitted, setSubmitted] = useState(false);\n\n const handleSubmit = () => {\n if (value.trim()) {\n setSubmitted(true);\n setTimeout(() => setSubmitted(false), 2000);\n }\n };\n\n return (\n <div style={{ padding: '2rem', border: '1px solid #333', borderRadius: '8px' }}>\n <Text variant={TextVariantType.HEADING_H3} as=\"h2\">\n {title}\n </Text>\n \n <div style={{ marginTop: '1rem', display: 'flex', gap: '1rem', alignItems: 'center', justifyContent: 'center' }}>\n <Input\n variant={InputVariantType.DEFAULT}\n value={value}\n onChange={(e) => setValue(e.target.value)}\n placeholder=\"Enter some text...\"\n />\n <Button \n variant={ButtonVariantType.PRIMARY}\n size={ButtonSizeType.MEDIUM}\n onClick={handleSubmit} \n disabled={!value.trim()}\n >\n Submit\n </Button>\n </div>\n \n {submitted && (\n <Text \n variant={TextVariantType.PARAGRAPH_MEDIUM} \n style={{ marginTop: '1rem', color: 'green' }}\n >\n ✓ Submitted: {value}\n </Text>\n )}\n \n <div style={{ marginTop: '2rem' }}>\n <Text variant={TextVariantType.PARAGRAPH_SMALL} style={{ color: '#888' }}>\n 💡 This component uses Kubit UI Components with proper variants and styling.\n </Text>\n </div>\n </div>\n );\n}\n`;\n\n writeFileSync(join(targetDir, 'src/components/ExampleComponent.tsx'), exampleComponentTsx);\n\n // src/components/ExampleComponent.test.tsx\n const exampleComponentTestTsx = `import { describe, it, expect } from 'vitest';\nimport { render, screen, fireEvent } from '@testing-library/react';\nimport { ExampleComponent } from './ExampleComponent';\n\ndescribe('ExampleComponent', () => {\n it('renders with default title', () => {\n render(<ExampleComponent />);\n expect(screen.getByText('Example Component')).toBeInTheDocument();\n });\n \n it('renders with custom title', () => {\n render(<ExampleComponent title=\"Custom Title\" />);\n expect(screen.getByText('Custom Title')).toBeInTheDocument();\n });\n \n it('handles input change', () => {\n render(<ExampleComponent />);\n const input = screen.getByPlaceholderText('Enter some text...');\n fireEvent.change(input, { target: { value: 'test' } });\n expect(input).toHaveValue('test');\n });\n});\n`;\n\n writeFileSync(\n join(targetDir, 'src/components/ExampleComponent.test.tsx'),\n exampleComponentTestTsx\n );\n\n // public/vite.svg\n const viteSvg = `<svg xmlns=\"http://www.w3.org/2000/svg\" xmlns:xlink=\"http://www.w3.org/1999/xlink\" aria-hidden=\"true\" role=\"img\" class=\"iconify iconify--logos\" width=\"31.88\" height=\"32\" preserveAspectRatio=\"xMidYMid meet\" viewBox=\"0 0 256 257\"><defs><linearGradient id=\"IconifyId1813088fe1fbc01fb466\" x1=\"-.828%\" x2=\"57.636%\" y1=\"7.652%\" y2=\"78.411%\"><stop offset=\"0%\" stop-color=\"#41D1FF\"></stop><stop offset=\"100%\" stop-color=\"#BD34FE\"></stop></linearGradient><linearGradient id=\"IconifyId1813088fe1fbc01fb467\" x1=\"43.376%\" x2=\"50.316%\" y1=\"2.242%\" y2=\"89.03%\"><stop offset=\"0%\" stop-color=\"#FFEA83\"></stop><stop offset=\"8.333%\" stop-color=\"#FFDD35\"></stop><stop offset=\"100%\" stop-color=\"#FFA800\"></stop></linearGradient></defs><path fill=\"url(#IconifyId1813088fe1fbc01fb466)\" d=\"M255.153 37.938L134.897 252.976c-2.483 4.44-8.862 4.466-11.382.048L.875 37.958c-2.746-4.814 1.371-10.646 6.827-9.67l120.385 21.517a6.537 6.537 0 0 0 2.322-.004l117.867-21.483c5.438-.991 9.574 4.796 6.877 9.62Z\"></path><path fill=\"url(#IconifyId1813088fe1fbc01fb467)\" d=\"M185.432.063L96.44 17.501a3.268 3.268 0 0 0-2.634 3.014l-5.474 92.456a3.268 3.268 0 0 0 3.997 3.378l24.777-5.718c2.318-.535 4.413 1.507 3.936 3.838l-7.361 36.047c-.495 2.426 1.782 4.5 4.151 3.78l15.304-4.649c2.372-.72 4.652 1.36 4.15 3.788l-11.698 56.621c-.732 3.542 3.979 5.473 5.943 2.437l1.313-2.028l72.516-144.72c1.215-2.423-.88-5.186-3.54-4.672l-25.505 4.922c-2.396.462-4.435-1.77-3.759-4.114l16.646-57.705c.677-2.35-1.37-4.583-3.769-4.113Z\"></path></svg>`;\n\n writeFileSync(join(targetDir, 'public/vite.svg'), viteSvg);\n}\n","/**\n * UI Helper utilities for consistent CLI output\n */\n\nimport {\n colors,\n symbols,\n createBox,\n createHeader,\n createListItem,\n createProgress,\n createKeyValue,\n createCommand,\n createPath,\n createDivider,\n} from './theme.js';\n\n/**\n * Display a welcome message for a command\n */\nexport function displayWelcome(commandName: string, description: string): void {\n console.log('');\n console.log(colors.primary.bold(`${symbols.step} ${commandName.toUpperCase()}`));\n console.log(colors.muted(description));\n console.log(createDivider());\n console.log('');\n}\n\n/**\n * Display a success summary\n */\nexport function displaySuccess(title: string, items: string[]): void {\n console.log('');\n console.log(colors.success.bold(`${symbols.success} ${title}`));\n for (const item of items) {\n console.log(createListItem(item, true));\n }\n console.log('');\n}\n\n/**\n * Display an error summary\n */\nexport function displayError(title: string, message: string, suggestions?: string[]): void {\n console.log('');\n console.log(colors.error.bold(`${symbols.error} ${title}`));\n console.log(colors.error(message));\n\n if (suggestions && suggestions.length > 0) {\n console.log('');\n console.log(colors.muted('Suggestions:'));\n for (const suggestion of suggestions) {\n console.log(createListItem(suggestion));\n }\n }\n console.log('');\n}\n\n/**\n * Display project information\n */\nexport function displayProjectInfo(info: Record<string, string>): void {\n console.log(createHeader('Project Information'));\n console.log('');\n for (const [key, value] of Object.entries(info)) {\n console.log(' ' + createKeyValue(key, value));\n }\n console.log('');\n}\n\n/**\n * Display next steps\n */\nexport function displayNextSteps(steps: string[]): void {\n console.log(createHeader('Next Steps'));\n console.log('');\n for (let i = 0; i < steps.length; i++) {\n console.log(` ${colors.primary((i + 1).toString() + '.')} ${steps[i]}`);\n }\n console.log('');\n}\n\n/**\n * Display command examples\n */\nexport function displayCommands(\n title: string,\n commands: Array<{ command: string; description: string }>\n): void {\n console.log(createHeader(title));\n console.log('');\n for (const { command, description } of commands) {\n console.log(' ' + createCommand(command));\n console.log(' ' + colors.muted(description));\n console.log('');\n }\n}\n\n/**\n * Display a file tree structure\n */\nexport function displayFileTree(files: Array<{ path: string; isNew?: boolean }>): void {\n console.log(createHeader('Files'));\n console.log('');\n for (const { isNew, path } of files) {\n const prefix = isNew ? colors.success('+ ') : ' ';\n console.log(prefix + createPath(path));\n }\n console.log('');\n}\n\n/**\n * Display installation progress\n */\nexport function displayInstallProgress(current: number, total: number, packageName: string): void {\n const progress = createProgress(current, total, packageName);\n process.stdout.write('\\r' + progress);\n if (current === total) {\n process.stdout.write('\\n');\n }\n}\n\n/**\n * Display a warning box\n */\nexport function displayWarning(message: string): void {\n console.log('');\n console.log(createBox(message, { color: 'warning', title: 'WARNING' }));\n console.log('');\n}\n\n/**\n * Display an info box\n */\nexport function displayInfo(message: string): void {\n console.log('');\n console.log(createBox(message, { color: 'info', title: 'INFO' }));\n console.log('');\n}\n\n/**\n * Display a comparison table\n */\nexport function displayComparison(\n title: string,\n items: Array<{ label: string; before: string; after: string }>\n): void {\n console.log(createHeader(title));\n console.log('');\n\n const maxLabelLength = Math.max(...items.map((i) => i.label.length));\n\n for (const { after, before, label } of items) {\n const paddedLabel = label.padEnd(maxLabelLength);\n console.log(\n ` ${colors.muted(paddedLabel)} ${colors.error(before)} ${symbols.step} ${colors.success(after)}`\n );\n }\n console.log('');\n}\n\n/**\n * Display a task list with status\n */\nexport function displayTaskList(\n tasks: Array<{ name: string; status: 'pending' | 'running' | 'done' | 'error' }>\n): void {\n console.log('');\n for (const task of tasks) {\n let statusIcon = '';\n let statusColor = colors.muted;\n\n switch (task.status) {\n case 'pending':\n statusIcon = symbols.bullet;\n statusColor = colors.muted;\n break;\n case 'running':\n statusIcon = symbols.step;\n statusColor = colors.primary;\n break;\n case 'done':\n statusIcon = symbols.success;\n statusColor = colors.success;\n break;\n case 'error':\n statusIcon = symbols.error;\n statusColor = colors.error;\n break;\n }\n\n console.log(` ${statusColor(statusIcon)} ${task.name}`);\n }\n console.log('');\n}\n","import { existsSync, mkdirSync, writeFileSync, cpSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\nimport type { CommandResult, PluginContext, InitOptions } from '../types/index.js';\n\nimport { PROJECT_DEFAULTS, PATHS_DEFAULTS } from '../templates/config/index.js';\nimport {\n displayWelcome,\n displaySuccess,\n displayNextSteps,\n displayCommands,\n} from '../utils/ui-helpers.js';\n\n// Get the directory where kubit-forge is installed\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n// When running from source (tests): src/commands -> src -> package root\n// When compiled (production): dist -> package root\n// Check if we're in src/commands or dist\nconst CLI_ROOT =\n __dirname.includes('/src/commands') || __dirname.includes('\\\\src\\\\commands')\n ? join(__dirname, '..', '..') // src/commands -> src -> root\n : join(__dirname, '..'); // dist -> root\n\nexport async function initCommand(\n options: InitOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n const { name, pm = 'pnpm', stack, ts = true } = options;\n const targetDir = join(ctx.cwd, name);\n\n displayWelcome(\n 'Initialize Project',\n `Creating a new ${stack} project with ${ts ? 'TypeScript' : 'JavaScript'}`\n );\n\n ctx.logger.step(`Setting up project: ${name}`);\n\n // Check if directory exists\n if (existsSync(targetDir)) {\n return {\n errors: [\n {\n code: 'DIR_EXISTS',\n message: `Directory '${name}' already exists`,\n solution: 'Choose a different project name or remove the existing directory',\n },\n ],\n message: `Directory '${name}' already exists`,\n status: 'error',\n };\n }\n\n try {\n // Create project directory\n mkdirSync(targetDir, { recursive: true });\n\n // Copy template from CLI installation directory\n const templateDir = join(CLI_ROOT, 'templates', stack);\n\n if (!existsSync(templateDir)) {\n return {\n errors: [\n {\n code: 'TEMPLATE_NOT_FOUND',\n message: `Template directory not found: ${templateDir}`,\n solution: 'Ensure kubit-forge is properly installed with templates',\n },\n ],\n message: `Template for '${stack}' not found at ${templateDir}`,\n status: 'error',\n };\n }\n\n cpSync(templateDir, targetDir, { recursive: true });\n\n // Create kubit.config.toml\n const config = generateConfig(name, stack, ts ? 'ts' : 'js', pm);\n writeFileSync(join(targetDir, 'kubit.config.toml'), config);\n\n displaySuccess('Project Created Successfully', [\n `Project directory: ${name}`,\n `Stack: ${stack}`,\n `Language: ${ts ? 'TypeScript' : 'JavaScript'}`,\n `Package Manager: ${pm}`,\n ]);\n\n displayNextSteps([`cd ${name}`, `${pm} install`, `${pm} run dev`]);\n\n displayCommands('Available Commands', [\n { command: `${pm} run dev`, description: 'Start development server' },\n { command: `${pm} run build`, description: 'Build for production' },\n { command: `${pm} run test`, description: 'Run tests' },\n { command: `${pm} run lint`, description: 'Lint code' },\n ]);\n\n return {\n data: { projectPath: targetDir },\n message: `Project '${name}' created successfully`,\n status: 'ok',\n };\n } catch (error) {\n return {\n message: `Failed to create project: ${error instanceof Error ? error.message : 'Unknown error'}`,\n status: 'error',\n };\n }\n}\n\nfunction generateConfig(\n name: string,\n stack: 'react' | 'vanilla',\n language: 'ts' | 'js',\n pm: 'pnpm' | 'npm' | 'yarn'\n): string {\n // Use templates for default values\n const projectDefaults = PROJECT_DEFAULTS;\n const pathsDefaults = PATHS_DEFAULTS;\n\n return `[kubit]\ncliVersion = \"^1.0.0\"\n\n[project]\nname = \"${name}\"\ntype = \"web\"\nstack = \"${stack}\"\nlanguage = \"${language}\"\npackageManager = \"${pm}\"\nnodeVersion = \"${projectDefaults.nodeVersion}\"\ndevPort = ${projectDefaults.devPort}\n\n[paths]\nsrc = \"${pathsDefaults.src}\"\ndist = \"${pathsDefaults.dist}\"\nenvExample = \"${pathsDefaults.envExample}\"\nenvLocal = \"${pathsDefaults.envLocal}\"\n\n[quality]\nlint = true\nformat = true\ntypecheck = ${language === 'ts'}\nunitTest = true\n\n[plugins]\nenabled = [\n \"@kubit/plugin-${stack}\",\n \"@kubit/plugin-quality\",\n \"@kubit/plugin-env\",\n \"@kubit/plugin-generators\"\n]\n`;\n}\n","/**\n * Configuration templates exports\n */\n\nexport * from './defaults.js';\nexport * from './config-templates.js';\n","/**\n * Default configuration templates\n * Centralized defaults for project configuration\n */\n\nexport interface ProjectDefaults {\n nodeVersion: string;\n devPort: number;\n packageManager: 'pnpm' | 'npm' | 'yarn';\n}\n\nexport interface PathsDefaults {\n src: string;\n dist: string;\n envExample: string;\n envLocal: string;\n}\n\nexport interface QualityDefaults {\n lint: boolean;\n format: boolean;\n typecheck: boolean;\n unitTest: boolean;\n}\n\nexport interface PluginDefaults {\n enabled: string[];\n}\n\n/**\n * Default project configuration\n */\nexport const PROJECT_DEFAULTS: ProjectDefaults = {\n nodeVersion: '20',\n devPort: 5173,\n packageManager: 'pnpm',\n};\n\n/**\n * Default paths configuration\n */\nexport const PATHS_DEFAULTS: PathsDefaults = {\n src: 'src',\n dist: 'dist',\n envExample: '.env.example',\n envLocal: '.env.local',\n};\n\n/**\n * Default quality configuration for new projects\n */\nexport const QUALITY_DEFAULTS: QualityDefaults = {\n lint: true,\n format: true,\n typecheck: true,\n unitTest: true,\n};\n\n/**\n * Minimal quality configuration (for auto-detect without tools)\n */\nexport const QUALITY_MINIMAL: QualityDefaults = {\n lint: false,\n format: false,\n typecheck: false,\n unitTest: false,\n};\n\n/**\n * Default plugins configuration\n */\nexport const PLUGIN_DEFAULTS: PluginDefaults = {\n enabled: [],\n};\n\n/**\n * Available plugin choices for interactive config\n */\nexport const AVAILABLE_PLUGINS = [\n '@kubit/plugin-bernova',\n '@kubit/plugin-storybook',\n '@kubit/plugin-testing-library',\n '@kubit/plugin-playwright',\n '@kubit/plugin-docker',\n] as const;\n\n/**\n * Package manager choices\n */\nexport const PACKAGE_MANAGERS = ['pnpm', 'npm', 'yarn'] as const;\n\n/**\n * Supported stacks\n */\nexport const STACKS = ['react', 'vanilla'] as const;\n\n/**\n * Supported languages\n */\nexport const LANGUAGES = ['ts', 'js'] as const;\n\n/**\n * Project types\n */\nexport const PROJECT_TYPES = ['web', 'library'] as const;\n","/**\n * Configuration template loader and builder\n * Provides utilities to build configurations from templates\n */\n\nimport type { KubitConfig } from '../../types/index.js';\nimport {\n PROJECT_DEFAULTS,\n PATHS_DEFAULTS,\n QUALITY_DEFAULTS,\n QUALITY_MINIMAL,\n PLUGIN_DEFAULTS,\n type ProjectDefaults,\n type PathsDefaults,\n type QualityDefaults,\n type PluginDefaults,\n} from './defaults.js';\n\nexport interface ConfigTemplateOptions {\n name?: string;\n type?: 'web' | 'library';\n stack?: 'react' | 'vanilla';\n language?: 'ts' | 'js';\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n nodeVersion?: string;\n devPort?: number;\n minimal?: boolean;\n}\n\nexport class ConfigTemplateLoader {\n /**\n * Build a complete default configuration\n */\n static buildDefault(options: ConfigTemplateOptions = {}): KubitConfig {\n return {\n kubit: {\n cliVersion: '^4.0.0',\n },\n project: this.buildProjectConfig(options),\n paths: this.buildPathsConfig(),\n quality: this.buildQualityConfig(options),\n plugins: this.buildPluginsConfig(),\n };\n }\n\n /**\n * Build project configuration with defaults\n */\n static buildProjectConfig(options: ConfigTemplateOptions = {}): KubitConfig['project'] {\n return {\n name: options.name || 'my-project',\n type: options.type || 'web',\n stack: options.stack || 'vanilla',\n language: options.language || 'js',\n packageManager: options.packageManager || PROJECT_DEFAULTS.packageManager,\n nodeVersion: options.nodeVersion || PROJECT_DEFAULTS.nodeVersion,\n devPort: options.devPort || PROJECT_DEFAULTS.devPort,\n };\n }\n\n /**\n * Build paths configuration with defaults\n */\n static buildPathsConfig(overrides?: Partial<PathsDefaults>): KubitConfig['paths'] {\n return {\n ...PATHS_DEFAULTS,\n ...overrides,\n };\n }\n\n /**\n * Build quality configuration with defaults\n */\n static buildQualityConfig(options: ConfigTemplateOptions = {}): KubitConfig['quality'] {\n const baseDefaults = options.minimal ? QUALITY_MINIMAL : QUALITY_DEFAULTS;\n\n return {\n ...baseDefaults,\n // Auto-adjust typecheck based on language\n typecheck: options.language === 'ts' ? baseDefaults.typecheck : false,\n };\n }\n\n /**\n * Build plugins configuration with defaults\n */\n static buildPluginsConfig(plugins?: string[]): KubitConfig['plugins'] {\n return {\n enabled: plugins || PLUGIN_DEFAULTS.enabled,\n };\n }\n\n /**\n * Get project defaults\n */\n static getProjectDefaults(): ProjectDefaults {\n return { ...PROJECT_DEFAULTS };\n }\n\n /**\n * Get paths defaults\n */\n static getPathsDefaults(): PathsDefaults {\n return { ...PATHS_DEFAULTS };\n }\n\n /**\n * Get quality defaults\n */\n static getQualityDefaults(minimal = false): QualityDefaults {\n return minimal ? { ...QUALITY_MINIMAL } : { ...QUALITY_DEFAULTS };\n }\n\n /**\n * Get plugin defaults\n */\n static getPluginDefaults(): PluginDefaults {\n return { ...PLUGIN_DEFAULTS };\n }\n\n /**\n * Merge partial config with defaults\n */\n static mergeWithDefaults(\n partial: Partial<KubitConfig>,\n options: ConfigTemplateOptions = {}\n ): KubitConfig {\n const defaults = this.buildDefault(options);\n\n return {\n kubit: partial.kubit || defaults.kubit,\n project: { ...defaults.project, ...(partial.project || {}) } as KubitConfig['project'],\n paths: { ...defaults.paths, ...(partial.paths || {}) } as KubitConfig['paths'],\n quality: { ...defaults.quality, ...(partial.quality || {}) } as KubitConfig['quality'],\n plugins: { ...defaults.plugins, ...(partial.plugins || {}) } as KubitConfig['plugins'],\n };\n }\n}\n","/**\n * Kubit Ecosystem commands\n * Manage the complete Kubit ecosystem in your project\n */\n\nimport { existsSync } from 'fs';\nimport { join } from 'path';\n\nimport type { CommandResult, PluginContext } from '../types/index.js';\n\nimport { colors } from '../utils/theme.js';\n\ninterface EcosystemOptions {\n info?: boolean;\n health?: boolean;\n upgrade?: boolean;\n sync?: boolean;\n}\n\ninterface EcosystemPackage {\n name: string;\n installed: boolean;\n version?: string;\n latest?: string;\n description: string;\n}\n\n/**\n * Main ecosystem command handler\n */\nexport async function ecosystemCommand(\n options: EcosystemOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n if (options.info) {\n return await showEcosystemInfo(ctx);\n }\n\n if (options.health) {\n return await checkEcosystemHealth(ctx);\n }\n\n if (options.upgrade) {\n return await upgradeEcosystem(ctx);\n }\n\n if (options.sync) {\n return await syncEcosystem(ctx);\n }\n\n // Default: show info\n return await showEcosystemInfo(ctx);\n}\n\n/**\n * Show Kubit ecosystem information\n */\nasync function showEcosystemInfo(ctx: PluginContext): Promise<CommandResult> {\n ctx.logger.step('Analyzing Kubit ecosystem...');\n\n const packages = await getEcosystemPackages(ctx);\n\n console.log('');\n console.log(colors.primary.bold('🚀 Kubit Ecosystem Status'));\n console.log('');\n\n // Group by category\n const categories = {\n 'Code Quality': ['eslint-config-kubit'],\n 'Data Visualization': ['@kubit-ui-web/react-charts'],\n 'Design System': ['bernova', '@kubit-ui-web/react-components'],\n 'Development Tools': ['vscode-kubito'],\n };\n\n for (const [category, packageNames] of Object.entries(categories)) {\n console.log(colors.bold(`${category}:`));\n\n for (const pkgName of packageNames) {\n const pkg = packages.find((p) => p.name === pkgName);\n\n if (pkg) {\n const status = pkg.installed\n ? colors.success('✓ Installed')\n : colors.muted('○ Not installed');\n const version = pkg.version ? colors.muted(`v${pkg.version}`) : '';\n\n console.log(` ${status} ${colors.bold(pkg.name)} ${version}`);\n console.log(` ${colors.muted(pkg.description)}`);\n }\n }\n console.log('');\n }\n\n const installedCount = packages.filter((p) => p.installed).length;\n const totalCount = packages.length;\n\n console.log(colors.muted(`Installed: ${installedCount}/${totalCount} packages`));\n console.log('');\n\n if (installedCount < totalCount) {\n console.log(\n colors.info('💡 Tip: Use the kubit-full template for complete ecosystem integration')\n );\n console.log(colors.muted(' kubit-forge create --template kubit-full my-app'));\n console.log('');\n }\n\n return {\n data: { installedCount, packages, totalCount },\n message: 'Ecosystem information displayed',\n status: 'ok',\n };\n}\n\n/**\n * Check ecosystem health\n */\nasync function checkEcosystemHealth(ctx: PluginContext): Promise<CommandResult> {\n ctx.logger.step('Checking ecosystem health...');\n\n const packages = await getEcosystemPackages(ctx);\n const issues: string[] = [];\n\n // Check for outdated packages\n for (const pkg of packages) {\n if (pkg.installed && pkg.version && pkg.latest) {\n if (pkg.version !== pkg.latest) {\n issues.push(`${pkg.name} is outdated (${pkg.version} → ${pkg.latest})`);\n }\n }\n }\n\n // Check for missing peer dependencies\n const hasBernova = packages.find((p) => p.name === 'bernova')?.installed;\n const hasComponents = packages.find(\n (p) => p.name === '@kubit-ui-web/react-components'\n )?.installed;\n\n if (hasComponents && !hasBernova) {\n issues.push('Bernova is recommended when using @kubit-ui-web/react-components');\n }\n\n console.log('');\n console.log(colors.primary.bold('🏥 Ecosystem Health Check'));\n console.log('');\n\n if (issues.length === 0) {\n console.log(colors.success('✓ All checks passed'));\n console.log(colors.muted(' Your Kubit ecosystem is healthy!'));\n } else {\n console.log(colors.warning(`⚠ Found ${issues.length} issue(s):`));\n console.log('');\n\n for (const issue of issues) {\n console.log(` ${colors.warning('•')} ${issue}`);\n }\n\n console.log('');\n console.log(colors.info('💡 Run: kubit-forge ecosystem:upgrade to fix issues'));\n }\n\n console.log('');\n\n return {\n data: { issues },\n message: issues.length === 0 ? 'Ecosystem is healthy' : `Found ${issues.length} issue(s)`,\n status: issues.length === 0 ? 'ok' : 'warning',\n };\n}\n\n/**\n * Upgrade ecosystem packages\n */\nasync function upgradeEcosystem(ctx: PluginContext): Promise<CommandResult> {\n ctx.logger.step('Upgrading Kubit ecosystem packages...');\n\n const packages = await getEcosystemPackages(ctx);\n const toUpgrade = packages.filter((p) => p.installed && p.version !== p.latest);\n\n if (toUpgrade.length === 0) {\n ctx.logger.success('All packages are up to date');\n return {\n message: 'No upgrades needed',\n status: 'ok',\n };\n }\n\n console.log('');\n console.log(colors.primary.bold('📦 Upgrading Packages'));\n console.log('');\n\n for (const pkg of toUpgrade) {\n console.log(\n ` ${colors.muted('•')} ${pkg.name} ${colors.muted(`${pkg.version} → ${pkg.latest}`)}`\n );\n }\n\n console.log('');\n\n const { execa } = await import('execa');\n const pm = await detectPackageManager(ctx);\n\n try {\n const packageNames = toUpgrade.map((p) => `${p.name}@latest`);\n\n if (pm === 'pnpm') {\n await execa('pnpm', ['update', ...packageNames], {\n cwd: ctx.cwd,\n stdio: 'inherit',\n });\n } else if (pm === 'yarn') {\n await execa('yarn', ['upgrade', ...packageNames], {\n cwd: ctx.cwd,\n stdio: 'inherit',\n });\n } else {\n await execa('npm', ['update', ...packageNames], {\n cwd: ctx.cwd,\n stdio: 'inherit',\n });\n }\n\n ctx.logger.success('Packages upgraded successfully');\n return {\n data: { upgraded: toUpgrade.length },\n message: 'Ecosystem upgraded',\n status: 'ok',\n };\n } catch (error) {\n return {\n errors: [\n {\n code: 'UPGRADE_FAILED',\n message: error instanceof Error ? error.message : 'Unknown error',\n solution: 'Try upgrading packages manually',\n },\n ],\n message: 'Failed to upgrade packages',\n status: 'error',\n };\n }\n}\n\n/**\n * Sync ecosystem versions\n */\nasync function syncEcosystem(ctx: PluginContext): Promise<CommandResult> {\n ctx.logger.step('Syncing ecosystem versions...');\n\n // This would ensure all Kubit packages use compatible versions\n console.log('');\n console.log(colors.info('🔄 Syncing ecosystem versions...'));\n console.log(colors.muted(' Ensuring all Kubit packages are compatible'));\n console.log('');\n\n return {\n message: 'Ecosystem synced',\n status: 'ok',\n };\n}\n\n/**\n * Get ecosystem packages information\n */\nasync function getEcosystemPackages(ctx: PluginContext): Promise<EcosystemPackage[]> {\n const packageJsonPath = join(ctx.cwd, 'package.json');\n\n let installedPackages: Record<string, string> = {};\n\n if (existsSync(packageJsonPath)) {\n try {\n const packageJson = await import(packageJsonPath, { assert: { type: 'json' } });\n installedPackages = {\n ...packageJson.default.dependencies,\n ...packageJson.default.devDependencies,\n };\n } catch {\n // Ignore errors\n }\n }\n\n const packages: EcosystemPackage[] = [\n {\n description: 'CSS-in-JS with JavaScript syntax for maintainable styling',\n installed: 'bernova' in installedPackages,\n latest: '1.4.0',\n name: 'bernova',\n version: installedPackages['bernova'],\n },\n {\n description: 'Accessible, customizable UI components',\n installed: '@kubit-ui-web/react-components' in installedPackages,\n latest: '2.0.0-beta.51',\n name: '@kubit-ui-web/react-components',\n version: installedPackages['@kubit-ui-web/react-components'],\n },\n {\n description: 'Beautiful data visualization components',\n installed: '@kubit-ui-web/react-charts' in installedPackages,\n latest: '1.11.1',\n name: '@kubit-ui-web/react-charts',\n version: installedPackages['@kubit-ui-web/react-charts'],\n },\n {\n description: 'Opinionated ESLint rules for quality code',\n installed: 'eslint-config-kubit' in installedPackages,\n latest: '1.7.0',\n name: 'eslint-config-kubit',\n version: installedPackages['eslint-config-kubit'],\n },\n {\n description: 'Interactive coding companion for VS Code',\n installed: false, // Extension, not npm package\n latest: '2.7.3',\n name: 'vscode-kubito',\n },\n ];\n\n return packages;\n}\n\n/**\n * Detect package manager\n */\nasync function detectPackageManager(ctx: PluginContext): Promise<'pnpm' | 'yarn' | 'npm'> {\n if (existsSync(join(ctx.cwd, 'pnpm-lock.yaml'))) {\n return 'pnpm';\n }\n if (existsSync(join(ctx.cwd, 'yarn.lock'))) {\n return 'yarn';\n }\n return 'npm';\n}\n","/**\n * Generate Command - Interactive code generation\n */\n\nimport enquirer from 'enquirer';\n\nimport type { CommandResult, PluginContext } from '../../types/index.js';\n\nimport { displayWelcome } from '../../utils/ui-helpers.js';\nimport { generateComponent, type ComponentOptions } from './component.js';\nimport { generateContext, type ContextOptions } from './context.js';\nimport { generateHook, type HookOptions } from './hook.js';\nimport { generatePage, type PageOptions } from './page.js';\nimport { generateService, type ServiceOptions } from './service.js';\n\nexport interface GenerateOptions {\n type?: string;\n name?: string;\n skipPrompts?: boolean;\n}\n\nconst GENERATOR_TYPES = [\n {\n description: 'React component with optional test, story, and styles',\n name: 'Component',\n value: 'component',\n },\n {\n description: 'Page component with routing',\n name: 'Page',\n value: 'page',\n },\n {\n description: 'Custom React hook with tests',\n name: 'Hook',\n value: 'hook',\n },\n {\n description: 'React Context with provider',\n name: 'Context',\n value: 'context',\n },\n {\n description: 'API service with TypeScript types',\n name: 'Service',\n value: 'service',\n },\n] as const;\n\n/**\n * Generate command - Interactive wizard\n */\nexport async function generateCommand(\n options: GenerateOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n displayWelcome('Generate Code', 'Interactive code generation wizard');\n\n try {\n let generatorType = options.type;\n let name = options.name;\n\n // Interactive prompts if not provided\n if (!options.skipPrompts) {\n if (!generatorType) {\n const typeResult = (await enquirer.prompt({\n choices: GENERATOR_TYPES.map((t) => ({\n hint: t.description,\n name: t.name,\n value: t.value,\n })),\n message: 'What do you want to generate?',\n name: 'type',\n type: 'select',\n } as never)) as { type: string };\n generatorType = typeResult.type;\n }\n\n if (!name) {\n const nameResult = (await enquirer.prompt({\n message: `Enter ${generatorType} name:`,\n name: 'name',\n type: 'input',\n validate: (input: string) => {\n if (!input) {\n return 'Name is required';\n }\n if (generatorType === 'component' && !/^[A-Z]/.test(input)) {\n return 'Component name must start with uppercase letter (PascalCase)';\n }\n return true;\n },\n } as never)) as { name: string };\n name = nameResult.name;\n }\n }\n\n if (!generatorType || !name) {\n return {\n message: 'Generator type and name are required',\n status: 'error',\n };\n }\n\n // Route to appropriate generator\n switch (generatorType) {\n case 'component':\n return await generateComponent(\n {\n bernova: true,\n css: false,\n name,\n story: false,\n test: true,\n typescript: true,\n } as ComponentOptions,\n ctx\n );\n\n case 'page':\n return await generatePage(\n {\n auth: false,\n name,\n route: false,\n typescript: true,\n } as PageOptions,\n ctx\n );\n\n case 'hook':\n return await generateHook(\n {\n name,\n test: true,\n typescript: true,\n } as HookOptions,\n ctx\n );\n\n case 'context':\n return await generateContext(\n {\n name,\n test: true,\n typescript: true,\n } as ContextOptions,\n ctx\n );\n\n case 'service':\n return await generateService(\n {\n name,\n test: true,\n typescript: true,\n } as ServiceOptions,\n ctx\n );\n\n default:\n return {\n message: `Unknown generator type: ${generatorType}`,\n status: 'error',\n };\n }\n } catch (error) {\n return {\n message: `Generation failed: ${(error as Error).message}`,\n status: 'error',\n };\n }\n}\n\nexport { generateComponent } from './component.js';\nexport { generateContext } from './context.js';\nexport { generateHook } from './hook.js';\nexport { generatePage } from './page.js';\nexport { generateService } from './service.js';\n","/**\n * Component Generator\n *\n * Generates React components with optional test, story, and styles\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { CommandResult, PluginContext } from '../../types/index.js';\n\nexport interface ComponentOptions {\n name: string;\n path?: string;\n bernova?: boolean;\n test?: boolean;\n story?: boolean;\n css?: boolean;\n typescript?: boolean;\n}\n\n/**\n * Generate a React component\n */\nexport async function generateComponent(\n options: ComponentOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n const {\n bernova = true,\n css: includeCss = false,\n name,\n path: customPath,\n story: includeStory = false,\n test: includeTest = true,\n typescript = true,\n } = options;\n\n ctx.logger.step(`Generating component: ${name}`);\n\n // Validate component name\n if (!/^[A-Z][a-zA-Z0-9]*$/.test(name)) {\n return {\n message: 'Component name must be PascalCase (e.g., Button, MyComponent)',\n status: 'error',\n };\n }\n\n // Determine output path\n const componentDir = customPath\n ? join(ctx.cwd, customPath, name)\n : join(ctx.cwd, 'src', 'components', name);\n\n // Check if component already exists\n if (existsSync(componentDir)) {\n return {\n message: `Component already exists: ${componentDir}`,\n status: 'error',\n };\n }\n\n // Create component directory\n mkdirSync(componentDir, { recursive: true });\n\n const ext = typescript ? 'tsx' : 'jsx';\n const files: string[] = [];\n\n try {\n // Generate component file\n const componentFile = join(componentDir, `${name}.${ext}`);\n const componentContent = generateComponentContent(name, { bernova, includeCss, typescript });\n writeFileSync(componentFile, componentContent, 'utf-8');\n files.push(componentFile);\n ctx.logger.success(`Created ${name}.${ext}`);\n\n // Generate test file\n if (includeTest) {\n const testFile = join(componentDir, `${name}.test.${ext}`);\n const testContent = generateTestContent(name, { typescript });\n writeFileSync(testFile, testContent, 'utf-8');\n files.push(testFile);\n ctx.logger.success(`Created ${name}.test.${ext}`);\n }\n\n // Generate story file\n if (includeStory) {\n const storyFile = join(componentDir, `${name}.stories.${ext}`);\n const storyContent = generateStoryContent(name, { typescript });\n writeFileSync(storyFile, storyContent, 'utf-8');\n files.push(storyFile);\n ctx.logger.success(`Created ${name}.stories.${ext}`);\n }\n\n // Generate CSS module\n if (includeCss) {\n const cssFile = join(componentDir, `${name}.module.css`);\n const cssContent = generateCssContent(name);\n writeFileSync(cssFile, cssContent, 'utf-8');\n files.push(cssFile);\n ctx.logger.success(`Created ${name}.module.css`);\n }\n\n // Generate index file\n const indexFile = join(componentDir, 'index.ts');\n const indexContent = `export { ${name} } from './${name}';\\nexport type { ${name}Props } from './${name}';\\n`;\n writeFileSync(indexFile, indexContent, 'utf-8');\n files.push(indexFile);\n ctx.logger.success('Created index.ts');\n\n return {\n data: {\n componentDir,\n files,\n },\n message: `Component ${name} generated successfully`,\n status: 'ok',\n };\n } catch (error) {\n return {\n message: `Failed to generate component: ${(error as Error).message}`,\n status: 'error',\n };\n }\n}\n\n/**\n * Generate component content\n */\nfunction generateComponentContent(\n name: string,\n options: { bernova: boolean; typescript: boolean; includeCss: boolean }\n): string {\n const { bernova, includeCss, typescript } = options;\n\n if (bernova) {\n return `import type { FC } from 'react';\n${includeCss ? `import styles from './${name}.module.css';\\n` : ''}\nexport interface ${name}Props {\n children?: React.ReactNode;\n variant?: 'primary' | 'secondary';\n size?: 'small' | 'medium' | 'large';\n disabled?: boolean;\n onClick?: () => void;\n}\n\nexport const ${name}: FC<${name}Props> = ({\n children,\n variant = 'primary',\n size = 'medium',\n disabled = false,\n onClick,\n}) => {\n return (\n <div \n className={${includeCss ? `styles.${name.toLowerCase()}` : `'${name.toLowerCase()}'`}}\n data-variant={variant}\n data-size={size}\n data-disabled={disabled}\n onClick={!disabled ? onClick : undefined}\n >\n {children || '${name}'}\n </div>\n );\n};\n\n${name}.displayName = '${name}';\n`;\n }\n\n // Non-Bernova component\n return `${typescript ? \"import type { FC } from 'react';\\n\" : \"import { FC } from 'react';\\n\"}\n${includeCss ? `import styles from './${name}.module.css';\\n` : ''}\n${\n typescript\n ? `export interface ${name}Props {\n children?: React.ReactNode;\n}\\n`\n : ''\n}\nexport const ${name}${typescript ? `: FC<${name}Props>` : ''} = ({ children }) => {\n return (\n <div className={${includeCss ? `styles.${name.toLowerCase()}` : `'${name.toLowerCase()}'`}}>\n {children || '${name}'}\n </div>\n );\n};\n\n${name}.displayName = '${name}';\n`;\n}\n\n/**\n * Generate test content\n */\nfunction generateTestContent(name: string, _options: { typescript: boolean }): string {\n return `import { render, screen } from '@testing-library/react';\nimport { ${name} } from './${name}';\n\ndescribe('${name}', () => {\n it('renders without crashing', () => {\n render(<${name} />);\n expect(screen.getByText('${name}')).toBeInTheDocument();\n });\n\n it('renders children when provided', () => {\n render(<${name}>Custom content</${name}>);\n expect(screen.getByText('Custom content')).toBeInTheDocument();\n });\n\n it('applies variant prop', () => {\n const { container } = render(<${name} variant=\"secondary\" />);\n expect(container.firstChild).toHaveAttribute('data-variant', 'secondary');\n });\n\n it('handles disabled state', () => {\n const { container } = render(<${name} disabled />);\n expect(container.firstChild).toHaveAttribute('data-disabled', 'true');\n });\n\n it('calls onClick when clicked', () => {\n const handleClick = vi.fn();\n render(<${name} onClick={handleClick} />);\n screen.getByText('${name}').click();\n expect(handleClick).toHaveBeenCalledTimes(1);\n });\n\n it('does not call onClick when disabled', () => {\n const handleClick = vi.fn();\n render(<${name} onClick={handleClick} disabled />);\n screen.getByText('${name}').click();\n expect(handleClick).not.toHaveBeenCalled();\n });\n});\n`;\n}\n\n/**\n * Generate story content\n */\nfunction generateStoryContent(name: string, options: { typescript: boolean }): string {\n const { typescript } = options;\n\n return `import type { Meta, StoryObj } from '@storybook/react';\nimport { ${name} } from './${name}';\n\nconst meta${typescript ? `: Meta<typeof ${name}>` : ''} = {\n title: 'Components/${name}',\n component: ${name},\n parameters: {\n layout: 'centered',\n },\n tags: ['autodocs'],\n argTypes: {\n variant: {\n control: 'select',\n options: ['primary', 'secondary'],\n },\n size: {\n control: 'select',\n options: ['small', 'medium', 'large'],\n },\n disabled: {\n control: 'boolean',\n },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof meta>;\n\nexport const Primary: Story = {\n args: {\n children: '${name}',\n variant: 'primary',\n size: 'medium',\n },\n};\n\nexport const Secondary: Story = {\n args: {\n children: '${name}',\n variant: 'secondary',\n size: 'medium',\n },\n};\n\nexport const Small: Story = {\n args: {\n children: '${name}',\n size: 'small',\n },\n};\n\nexport const Large: Story = {\n args: {\n children: '${name}',\n size: 'large',\n },\n};\n\nexport const Disabled: Story = {\n args: {\n children: '${name}',\n disabled: true,\n },\n};\n`;\n}\n\n/**\n * Generate CSS content\n */\nfunction generateCssContent(name: string): string {\n const className = name.toLowerCase();\n\n return `.${className} {\n display: inline-flex;\n align-items: center;\n justify-content: center;\n padding: 0.5rem 1rem;\n border-radius: 0.25rem;\n font-weight: 500;\n cursor: pointer;\n transition: all 0.2s ease-in-out;\n}\n\n.${className}[data-variant='primary'] {\n background-color: #E60028;\n color: white;\n}\n\n.${className}[data-variant='secondary'] {\n background-color: #00A650;\n color: white;\n}\n\n.${className}[data-size='small'] {\n padding: 0.25rem 0.5rem;\n font-size: 0.875rem;\n}\n\n.${className}[data-size='medium'] {\n padding: 0.5rem 1rem;\n font-size: 1rem;\n}\n\n.${className}[data-size='large'] {\n padding: 0.75rem 1.5rem;\n font-size: 1.125rem;\n}\n\n.${className}[data-disabled='true'] {\n opacity: 0.5;\n cursor: not-allowed;\n}\n\n.${className}:hover:not([data-disabled='true']) {\n transform: translateY(-2px);\n box-shadow: 0 4px 6px rgba(0, 0, 0, 0.1);\n}\n`;\n}\n","/**\n * Context Generator\n *\n * Generates React Context with Provider and custom hook\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { CommandResult, PluginContext } from '../../types/index.js';\n\nexport interface ContextOptions {\n name: string;\n path?: string;\n test?: boolean;\n typescript?: boolean;\n}\n\n/**\n * Generate a React Context with Provider\n */\nexport async function generateContext(\n options: ContextOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n const { name, path: customPath, test: includeTest = true, typescript = true } = options;\n\n ctx.logger.step(`Generating context: ${name}`);\n\n // Validate context name\n if (!/^[A-Z][a-zA-Z0-9]*$/.test(name)) {\n return {\n message: 'Context name must be PascalCase (e.g., Auth, Theme, UserSettings)',\n status: 'error',\n };\n }\n\n // Determine output path\n const contextDir = customPath\n ? join(ctx.cwd, customPath, name)\n : join(ctx.cwd, 'src', 'contexts', name);\n\n // Check if context already exists\n if (existsSync(contextDir)) {\n return {\n message: `Context already exists: ${contextDir}`,\n status: 'error',\n };\n }\n\n // Create context directory\n mkdirSync(contextDir, { recursive: true });\n\n const ext = typescript ? 'tsx' : 'jsx';\n const files: string[] = [];\n\n try {\n // Generate context file\n const contextFile = join(contextDir, `${name}Context.${ext}`);\n const contextContent = generateContextContent(name, { typescript });\n writeFileSync(contextFile, contextContent, 'utf-8');\n files.push(contextFile);\n ctx.logger.success(`Created ${name}Context.${ext}`);\n\n // Generate provider file\n const providerFile = join(contextDir, `${name}Provider.${ext}`);\n const providerContent = generateProviderContent(name, { typescript });\n writeFileSync(providerFile, providerContent, 'utf-8');\n files.push(providerFile);\n ctx.logger.success(`Created ${name}Provider.${ext}`);\n\n // Generate hook file\n const hookFile = join(contextDir, `use${name}.ts`);\n const hookContent = generateHookContent(name, { typescript });\n writeFileSync(hookFile, hookContent, 'utf-8');\n files.push(hookFile);\n ctx.logger.success(`Created use${name}.ts`);\n\n // Generate test file\n if (includeTest) {\n const testFile = join(contextDir, `${name}Context.test.${ext}`);\n const testContent = generateContextTestContent(name, { typescript });\n writeFileSync(testFile, testContent, 'utf-8');\n files.push(testFile);\n ctx.logger.success(`Created ${name}Context.test.${ext}`);\n }\n\n // Generate index file\n const indexFile = join(contextDir, 'index.ts');\n const indexContent = `export { ${name}Provider } from './${name}Provider';\\nexport { use${name} } from './use${name}';\\n`;\n writeFileSync(indexFile, indexContent, 'utf-8');\n files.push(indexFile);\n ctx.logger.success('Created index.ts');\n\n return {\n data: {\n contextDir,\n files,\n },\n message: `Context ${name} generated successfully`,\n status: 'ok',\n };\n } catch (error) {\n return {\n message: `Failed to generate context: ${(error as Error).message}`,\n status: 'error',\n };\n }\n}\n\n/**\n * Generate context content\n */\nfunction generateContextContent(name: string, options: { typescript: boolean }): string {\n const { typescript } = options;\n\n return `import { createContext } from 'react';\n\n${\n typescript\n ? `export interface ${name}State {\n // Add your state properties here\n value: string;\n isLoading: boolean;\n error: Error | null;\n}\n\nexport interface ${name}Actions {\n // Add your action methods here\n setValue: (value: string) => void;\n reset: () => void;\n}\n\nexport interface ${name}ContextValue extends ${name}State, ${name}Actions {}\n`\n : ''\n}\nexport const ${name}Context = createContext${typescript ? `<${name}ContextValue | undefined>` : ''}(undefined);\n\n${name}Context.displayName = '${name}Context';\n`;\n}\n\n/**\n * Generate provider content\n */\nfunction generateProviderContent(name: string, options: { typescript: boolean }): string {\n const { typescript } = options;\n\n return `import { useState, useMemo${typescript ? ', type ReactNode' : ''} } from 'react';\nimport { ${name}Context${typescript ? `, type ${name}ContextValue` : ''} } from './${name}Context';\n\n${\n typescript\n ? `export interface ${name}ProviderProps {\n children: ReactNode;\n initialValue?: string;\n}\n`\n : ''\n}\nexport function ${name}Provider({ children, initialValue = '' }${typescript ? `: ${name}ProviderProps` : ''}) {\n const [value, setValue] = useState${typescript ? '<string>' : ''}(initialValue);\n const [isLoading, setIsLoading] = useState${typescript ? '<boolean>' : ''}(false);\n const [error, setError] = useState${typescript ? '<Error | null>' : ''}(null);\n\n const reset = () => {\n setValue('');\n setError(null);\n };\n\n const contextValue${typescript ? `: ${name}ContextValue` : ''} = useMemo(\n () => ({\n value,\n isLoading,\n error,\n setValue,\n reset,\n }),\n [value, isLoading, error]\n );\n\n return (\n <${name}Context.Provider value={contextValue}>\n {children}\n </${name}Context.Provider>\n );\n}\n\n${name}Provider.displayName = '${name}Provider';\n`;\n}\n\n/**\n * Generate hook content\n */\nfunction generateHookContent(name: string, options: { typescript: boolean }): string {\n const { typescript } = options;\n\n return `import { useContext } from 'react';\nimport { ${name}Context${typescript ? `, type ${name}ContextValue` : ''} } from './${name}Context';\n\n/**\n * Hook to use ${name} context\n * \n * @throws {Error} If used outside ${name}Provider\n * \n * @example\n * const { value, setValue, reset } = use${name}();\n */\nexport function use${name}()${typescript ? `: ${name}ContextValue` : ''} {\n const context = useContext(${name}Context);\n\n if (context === undefined) {\n throw new Error('use${name} must be used within a ${name}Provider');\n }\n\n return context;\n}\n`;\n}\n\n/**\n * Generate context test content\n */\nfunction generateContextTestContent(name: string, _options: { typescript: boolean }): string {\n return `import { render, screen, renderHook, act } from '@testing-library/react';\nimport { ${name}Provider } from './${name}Provider';\nimport { use${name} } from './use${name}';\n\ndescribe('${name}Context', () => {\n it('should provide context values', () => {\n const { result } = renderHook(() => use${name}(), {\n wrapper: ${name}Provider,\n });\n\n expect(result.current.value).toBe('');\n expect(result.current.isLoading).toBe(false);\n expect(result.current.error).toBeNull();\n });\n\n it('should update value', () => {\n const { result } = renderHook(() => use${name}(), {\n wrapper: ${name}Provider,\n });\n\n act(() => {\n result.current.setValue('test');\n });\n\n expect(result.current.value).toBe('test');\n });\n\n it('should reset state', () => {\n const { result } = renderHook(() => use${name}(), {\n wrapper: ${name}Provider,\n });\n\n act(() => {\n result.current.setValue('test');\n result.current.reset();\n });\n\n expect(result.current.value).toBe('');\n });\n\n it('should throw error when used outside provider', () => {\n const { result } = renderHook(() => use${name}());\n\n expect(result.error).toBeDefined();\n expect(result.error?.message).toContain('must be used within a ${name}Provider');\n });\n\n it('should accept initial value', () => {\n const { result } = renderHook(() => use${name}(), {\n wrapper: ({ children }) => (\n <${name}Provider initialValue=\"initial\">{children}</${name}Provider>\n ),\n });\n\n expect(result.current.value).toBe('initial');\n });\n});\n`;\n}\n","/**\n * Hook Generator\n *\n * Generates custom React hooks with optional tests\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { CommandResult, PluginContext } from '../../types/index.js';\n\nexport interface HookOptions {\n name: string;\n path?: string;\n test?: boolean;\n typescript?: boolean;\n}\n\n/**\n * Generate a custom React hook\n */\nexport async function generateHook(\n options: HookOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n const { name, path: customPath, test: includeTest = true, typescript = true } = options;\n\n ctx.logger.step(`Generating hook: ${name}`);\n\n // Validate hook name\n if (!/^use[A-Z][a-zA-Z0-9]*$/.test(name)) {\n return {\n message: 'Hook name must start with \"use\" and be camelCase (e.g., useAuth, useLocalStorage)',\n status: 'error',\n };\n }\n\n // Determine output path\n const hooksDir = customPath ? join(ctx.cwd, customPath) : join(ctx.cwd, 'src', 'hooks');\n\n // Create hooks directory if it doesn't exist\n if (!existsSync(hooksDir)) {\n mkdirSync(hooksDir, { recursive: true });\n }\n\n const ext = typescript ? 'ts' : 'js';\n const files: string[] = [];\n\n try {\n // Generate hook file\n const hookFile = join(hooksDir, `${name}.${ext}`);\n\n // Check if hook already exists\n if (existsSync(hookFile)) {\n return {\n message: `Hook already exists: ${hookFile}`,\n status: 'error',\n };\n }\n\n const hookContent = generateHookContent(name, { typescript });\n writeFileSync(hookFile, hookContent, 'utf-8');\n files.push(hookFile);\n ctx.logger.success(`Created ${name}.${ext}`);\n\n // Generate test file\n if (includeTest) {\n const testFile = join(hooksDir, `${name}.test.${ext}`);\n const testContent = generateHookTestContent(name, { typescript });\n writeFileSync(testFile, testContent, 'utf-8');\n files.push(testFile);\n ctx.logger.success(`Created ${name}.test.${ext}`);\n }\n\n return {\n data: {\n files,\n hooksDir,\n },\n message: `Hook ${name} generated successfully`,\n status: 'ok',\n };\n } catch (error) {\n return {\n message: `Failed to generate hook: ${(error as Error).message}`,\n status: 'error',\n };\n }\n}\n\n/**\n * Generate hook content\n */\nfunction generateHookContent(name: string, options: { typescript: boolean }): string {\n const { typescript } = options;\n\n return `import { useState, useEffect, useCallback } from 'react';\n\n${\n typescript\n ? `export interface ${capitalize(name)}Options {\n // Add options here\n}\n\nexport interface ${capitalize(name)}Return {\n // Add return values here\n value: string;\n setValue: (value: string) => void;\n reset: () => void;\n}\n`\n : ''\n}\n/**\n * ${name} - Custom React hook\n * \n * @example\n * const { value, setValue, reset } = ${name}();\n */\nexport function ${name}(${typescript ? `options?: ${capitalize(name)}Options` : 'options'})${typescript ? `: ${capitalize(name)}Return` : ''} {\n const [value, setValue] = useState${typescript ? '<string>' : ''}('');\n\n useEffect(() => {\n // Add side effects here\n console.log('${name} mounted');\n\n return () => {\n // Cleanup\n console.log('${name} unmounted');\n };\n }, []);\n\n const reset = useCallback(() => {\n setValue('');\n }, []);\n\n return {\n value,\n setValue,\n reset,\n };\n}\n`;\n}\n\n/**\n * Generate hook test content\n */\nfunction generateHookTestContent(name: string, _options: { typescript: boolean }): string {\n return `import { renderHook, act } from '@testing-library/react';\nimport { ${name} } from './${name}';\n\ndescribe('${name}', () => {\n it('should initialize with default values', () => {\n const { result } = renderHook(() => ${name}());\n \n expect(result.current.value).toBe('');\n });\n\n it('should update value', () => {\n const { result } = renderHook(() => ${name}());\n \n act(() => {\n result.current.setValue('test');\n });\n\n expect(result.current.value).toBe('test');\n });\n\n it('should reset value', () => {\n const { result } = renderHook(() => ${name}());\n \n act(() => {\n result.current.setValue('test');\n result.current.reset();\n });\n\n expect(result.current.value).toBe('');\n });\n\n it('should handle options', () => {\n const { result } = renderHook(() => ${name}({ /* options */ }));\n \n expect(result.current).toBeDefined();\n });\n});\n`;\n}\n\n/**\n * Capitalize first letter\n */\nfunction capitalize(str: string): string {\n return str.charAt(0).toUpperCase() + str.slice(1);\n}\n","/**\n * Page Generator\n *\n * Generates page components with optional routing\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { CommandResult, PluginContext } from '../../types/index.js';\n\nexport interface PageOptions {\n name: string;\n path?: string;\n route?: boolean;\n auth?: boolean;\n typescript?: boolean;\n}\n\n/**\n * Generate a page component\n */\nexport async function generatePage(\n options: PageOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n const { auth = false, name, path: customPath, route = false } = options;\n\n ctx.logger.step(`Generating page: ${name}`);\n\n // Validate page name\n if (!/^[A-Z][a-zA-Z0-9]*$/.test(name)) {\n return {\n message: 'Page name must be PascalCase (e.g., Dashboard, UserProfile)',\n status: 'error',\n };\n }\n\n // Determine output path\n const pageDir = customPath\n ? join(ctx.cwd, customPath, name)\n : join(ctx.cwd, 'src', 'pages', name);\n\n // Check if page already exists\n if (existsSync(pageDir)) {\n return {\n message: `Page already exists: ${pageDir}`,\n status: 'error',\n };\n }\n\n // Create page directory\n mkdirSync(pageDir, { recursive: true });\n\n const ext = 'tsx';\n const files: string[] = [];\n\n try {\n // Generate page component\n const pageFile = join(pageDir, `${name}.${ext}`);\n const pageContent = generatePageContent(name, { auth });\n writeFileSync(pageFile, pageContent, 'utf-8');\n files.push(pageFile);\n ctx.logger.success(`Created ${name}.${ext}`);\n\n // Generate route file if requested\n if (route) {\n const routeFile = join(pageDir, 'route.ts');\n const routeContent = generateRouteContent(name, { auth });\n writeFileSync(routeFile, routeContent, 'utf-8');\n files.push(routeFile);\n ctx.logger.success('Created route.ts');\n }\n\n // Generate test file\n const testFile = join(pageDir, `${name}.test.${ext}`);\n const testContent = generateTestContent(name, { typescript: true });\n writeFileSync(testFile, testContent, 'utf-8');\n files.push(testFile);\n ctx.logger.success(`Created ${name}.test.${ext}`);\n\n return {\n data: {\n files,\n pageDir,\n },\n message: `Page ${name} generated successfully`,\n status: 'ok',\n };\n } catch (error) {\n return {\n message: `Failed to generate page: ${(error as Error).message}`,\n status: 'error',\n };\n }\n}\n\n/**\n * Generate page content\n */\nfunction generatePageContent(name: string, options: { auth: boolean }): string {\n const { auth } = options;\n\n const authCheck = auth\n ? `\n // Check authentication\n const { user, isLoading } = useAuth();\n\n if (isLoading) {\n return <div>Loading...</div>;\n }\n\n if (!user) {\n return <Navigate to=\"/login\" replace />;\n }\n`\n : '';\n\n return `import type { FC } from 'react';\nimport { Container, Text } from '@kubit-ui-web/react-components';${\n auth\n ? \"\\nimport { Navigate } from 'react-router-dom';\\nimport { useAuth } from '@/hooks/useAuth';\"\n : ''\n }\n\nexport interface ${name}Props {\n // Add props here\n}\n\nexport const ${name}: FC<${name}Props> = () => {${authCheck}\n return (\n <Container>\n <Text variant=\"heading1\">${name}</Text>\n <Text variant=\"body\">\n This is the ${name} page.\n </Text>\n </Container>\n );\n};\n\n${name}.displayName = '${name}';\n`;\n}\n\n/**\n * Generate route content\n */\nfunction generateRouteContent(name: string, options: { auth: boolean }): string {\n const { auth } = options;\n const routePath = `/${name.toLowerCase()}`;\n\n return `import type { RouteObject } from 'react-router-dom';\nimport { ${name} } from './${name}';${auth ? \"\\nimport { ProtectedRoute } from '@/components/ProtectedRoute';\" : ''}\n\nexport const ${name.toLowerCase()}Route: RouteObject = {\n path: '${routePath}',\n element: ${auth ? `<ProtectedRoute><${name} /></ProtectedRoute>` : `<${name} />`},\n};\n`;\n}\n\n/**\n * Generate page test content\n */\nfunction generateTestContent(name: string, _options: { typescript: boolean }): string {\n return `import { render, screen } from '@testing-library/react';\nimport { ${name} } from './${name}';\n\ndescribe('${name}', () => {\n it('renders without crashing', () => {\n render(<${name} />);\n expect(screen.getByText('${name}')).toBeInTheDocument();\n });\n\n it('displays page content', () => {\n render(<${name} />);\n expect(screen.getByText(/This is the ${name} page/i)).toBeInTheDocument();\n });\n});\n`;\n}\n","/**\n * Service Generator\n *\n * Generates API service with TypeScript types\n */\n\nimport { existsSync, mkdirSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { CommandResult, PluginContext } from '../../types/index.js';\n\nexport interface ServiceOptions {\n name: string;\n path?: string;\n test?: boolean;\n typescript?: boolean;\n}\n\n/**\n * Generate an API service\n */\nexport async function generateService(\n options: ServiceOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n const { name, path: customPath, test: includeTest = true, typescript = true } = options;\n\n ctx.logger.step(`Generating service: ${name}`);\n\n // Validate service name\n if (!/^[a-z][a-zA-Z0-9]*$/.test(name)) {\n return {\n message: 'Service name must be camelCase (e.g., userService, authService)',\n status: 'error',\n };\n }\n\n // Determine output path\n const servicesDir = customPath ? join(ctx.cwd, customPath) : join(ctx.cwd, 'src', 'services');\n\n // Create services directory if it doesn't exist\n if (!existsSync(servicesDir)) {\n mkdirSync(servicesDir, { recursive: true });\n }\n\n const ext = typescript ? 'ts' : 'js';\n const files: string[] = [];\n\n try {\n // Generate service file\n const serviceFile = join(servicesDir, `${name}.${ext}`);\n\n // Check if service already exists\n if (existsSync(serviceFile)) {\n return {\n message: `Service already exists: ${serviceFile}`,\n status: 'error',\n };\n }\n\n const serviceContent = generateServiceContent(name, { typescript });\n writeFileSync(serviceFile, serviceContent, 'utf-8');\n files.push(serviceFile);\n ctx.logger.success(`Created ${name}.${ext}`);\n\n // Generate types file if TypeScript\n if (typescript) {\n const typesFile = join(servicesDir, `${name}.types.ts`);\n const typesContent = generateTypesContent(name);\n writeFileSync(typesFile, typesContent, 'utf-8');\n files.push(typesFile);\n ctx.logger.success(`Created ${name}.types.ts`);\n }\n\n // Generate test file\n if (includeTest) {\n const testFile = join(servicesDir, `${name}.test.${ext}`);\n const testContent = generateServiceTestContent(name, { typescript });\n writeFileSync(testFile, testContent, 'utf-8');\n files.push(testFile);\n ctx.logger.success(`Created ${name}.test.${ext}`);\n }\n\n return {\n data: {\n files,\n servicesDir,\n },\n message: `Service ${name} generated successfully`,\n status: 'ok',\n };\n } catch (error) {\n return {\n message: `Failed to generate service: ${(error as Error).message}`,\n status: 'error',\n };\n }\n}\n\n/**\n * Generate service content\n */\nfunction generateServiceContent(name: string, options: { typescript: boolean }): string {\n const { typescript } = options;\n const capitalizedName = name.charAt(0).toUpperCase() + name.slice(1);\n\n return `${typescript ? `import type { ${capitalizedName}Response, ${capitalizedName}Request, ${capitalizedName}Error } from './${name}.types';\\n` : ''}\n/**\n * ${capitalizedName} Service\n * \n * API service for ${name} operations\n */\n\nconst API_BASE_URL = import.meta.env.VITE_API_URL || 'http://localhost:3000/api';\n\nclass ${capitalizedName}Service {\n private baseUrl: string;\n\n constructor(baseUrl: string = API_BASE_URL) {\n this.baseUrl = baseUrl;\n }\n\n /**\n * Get all items\n */\n async getAll()${typescript ? `: Promise<${capitalizedName}Response[]>` : ''} {\n const response = await fetch(\\`\\${this.baseUrl}/${name}\\`);\n \n if (!response.ok) {\n throw await this.handleError(response);\n }\n\n return response.json();\n }\n\n /**\n * Get item by ID\n */\n async getById(id: string)${typescript ? `: Promise<${capitalizedName}Response>` : ''} {\n const response = await fetch(\\`\\${this.baseUrl}/${name}/\\${id}\\`);\n \n if (!response.ok) {\n throw await this.handleError(response);\n }\n\n return response.json();\n }\n\n /**\n * Create new item\n */\n async create(data${typescript ? `: ${capitalizedName}Request` : ''})${typescript ? `: Promise<${capitalizedName}Response>` : ''} {\n const response = await fetch(\\`\\${this.baseUrl}/${name}\\`, {\n method: 'POST',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data),\n });\n \n if (!response.ok) {\n throw await this.handleError(response);\n }\n\n return response.json();\n }\n\n /**\n * Update item\n */\n async update(id: string, data${typescript ? `: Partial<${capitalizedName}Request>` : ''})${typescript ? `: Promise<${capitalizedName}Response>` : ''} {\n const response = await fetch(\\`\\${this.baseUrl}/${name}/\\${id}\\`, {\n method: 'PUT',\n headers: {\n 'Content-Type': 'application/json',\n },\n body: JSON.stringify(data),\n });\n \n if (!response.ok) {\n throw await this.handleError(response);\n }\n\n return response.json();\n }\n\n /**\n * Delete item\n */\n async delete(id: string)${typescript ? ': Promise<void>' : ''} {\n const response = await fetch(\\`\\${this.baseUrl}/${name}/\\${id}\\`, {\n method: 'DELETE',\n });\n \n if (!response.ok) {\n throw await this.handleError(response);\n }\n }\n\n /**\n * Handle API errors\n */\n private async handleError(response: Response)${typescript ? `: Promise<${capitalizedName}Error>` : ''} {\n const error${typescript ? `: ${capitalizedName}Error` : ''} = {\n status: response.status,\n message: response.statusText,\n details: await response.json().catch(() => ({})),\n };\n\n return error;\n }\n}\n\n// Export singleton instance\nexport const ${name} = new ${capitalizedName}Service();\n\n// Export class for testing\nexport { ${capitalizedName}Service };\n`;\n}\n\n/**\n * Generate types content\n */\nfunction generateTypesContent(name: string): string {\n const capitalizedName = name.charAt(0).toUpperCase() + name.slice(1);\n\n return `/**\n * ${capitalizedName} Types\n */\n\nexport interface ${capitalizedName}Response {\n id: string;\n createdAt: string;\n updatedAt: string;\n // Add your response properties here\n name: string;\n description?: string;\n}\n\nexport interface ${capitalizedName}Request {\n // Add your request properties here\n name: string;\n description?: string;\n}\n\nexport interface ${capitalizedName}Error {\n status: number;\n message: string;\n details?: Record<string, unknown>;\n}\n\nexport interface ${capitalizedName}ListParams {\n page?: number;\n limit?: number;\n sort?: string;\n order?: 'asc' | 'desc';\n}\n`;\n}\n\n/**\n * Generate service test content\n */\nfunction generateServiceTestContent(name: string, _options: { typescript: boolean }): string {\n const capitalizedName = name.charAt(0).toUpperCase() + name.slice(1);\n\n return `import { describe, it, expect, beforeEach, afterEach, vi } from 'vitest';\nimport { ${capitalizedName}Service } from './${name}';\n\n// Mock fetch\nglobal.fetch = vi.fn();\n\ndescribe('${capitalizedName}Service', () => {\n let service: ${capitalizedName}Service;\n\n beforeEach(() => {\n service = new ${capitalizedName}Service('http://test-api.com');\n vi.clearAllMocks();\n });\n\n afterEach(() => {\n vi.restoreAllMocks();\n });\n\n describe('getAll', () => {\n it('should fetch all items', async () => {\n const mockData = [\n { id: '1', name: 'Item 1', createdAt: '2024-01-01', updatedAt: '2024-01-01' },\n { id: '2', name: 'Item 2', createdAt: '2024-01-02', updatedAt: '2024-01-02' },\n ];\n\n (global.fetch as any).mockResolvedValueOnce({\n ok: true,\n json: async () => mockData,\n });\n\n const result = await service.getAll();\n\n expect(result).toEqual(mockData);\n expect(global.fetch).toHaveBeenCalledWith('http://test-api.com/${name}');\n });\n\n it('should handle errors', async () => {\n (global.fetch as any).mockResolvedValueOnce({\n ok: false,\n status: 500,\n statusText: 'Internal Server Error',\n json: async () => ({ error: 'Server error' }),\n });\n\n await expect(service.getAll()).rejects.toMatchObject({\n status: 500,\n message: 'Internal Server Error',\n });\n });\n });\n\n describe('getById', () => {\n it('should fetch item by id', async () => {\n const mockData = { id: '1', name: 'Item 1', createdAt: '2024-01-01', updatedAt: '2024-01-01' };\n\n (global.fetch as any).mockResolvedValueOnce({\n ok: true,\n json: async () => mockData,\n });\n\n const result = await service.getById('1');\n\n expect(result).toEqual(mockData);\n expect(global.fetch).toHaveBeenCalledWith('http://test-api.com/${name}/1');\n });\n });\n\n describe('create', () => {\n it('should create new item', async () => {\n const newItem = { name: 'New Item', description: 'Description' };\n const mockResponse = { id: '3', ...newItem, createdAt: '2024-01-03', updatedAt: '2024-01-03' };\n\n (global.fetch as any).mockResolvedValueOnce({\n ok: true,\n json: async () => mockResponse,\n });\n\n const result = await service.create(newItem);\n\n expect(result).toEqual(mockResponse);\n expect(global.fetch).toHaveBeenCalledWith(\n 'http://test-api.com/${name}',\n expect.objectContaining({\n method: 'POST',\n headers: { 'Content-Type': 'application/json' },\n body: JSON.stringify(newItem),\n })\n );\n });\n });\n\n describe('update', () => {\n it('should update item', async () => {\n const updates = { name: 'Updated Item' };\n const mockResponse = { id: '1', ...updates, createdAt: '2024-01-01', updatedAt: '2024-01-04' };\n\n (global.fetch as any).mockResolvedValueOnce({\n ok: true,\n json: async () => mockResponse,\n });\n\n const result = await service.update('1', updates);\n\n expect(result).toEqual(mockResponse);\n });\n });\n\n describe('delete', () => {\n it('should delete item', async () => {\n (global.fetch as any).mockResolvedValueOnce({\n ok: true,\n });\n\n await service.delete('1');\n\n expect(global.fetch).toHaveBeenCalledWith(\n 'http://test-api.com/${name}/1',\n expect.objectContaining({ method: 'DELETE' })\n );\n });\n });\n});\n`;\n}\n","import { existsSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { CommandResult, PluginContext } from '../types/index.js';\n\nimport { MonorepoManager } from '../utils/monorepo-manager.js';\nimport { displaySuccess, displayWelcome } from '../utils/ui-helpers.js';\n\nexport interface MonorepoInitOptions {\n tool?: 'pnpm' | 'yarn' | 'npm' | 'turborepo' | 'nx' | 'lerna';\n apps?: string[];\n packages?: string[];\n skipInstall?: boolean;\n}\n\nexport interface MonorepoAddOptions {\n name: string;\n type: 'app' | 'package';\n template?: 'react' | 'vanilla' | 'library';\n private?: boolean;\n}\n\n/**\n * Initialize a monorepo structure\n */\nexport async function monorepoInitCommand(\n options: MonorepoInitOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n displayWelcome('Initialize Monorepo', 'Setting up monorepo structure with workspaces');\n\n const tool = options.tool || 'pnpm';\n\n // Check if already a monorepo\n const manager = new MonorepoManager(ctx.logger, ctx.cwd);\n const isMonorepo = await manager.isMonorepo();\n\n if (isMonorepo) {\n return {\n errors: [\n {\n code: 'ALREADY_MONOREPO',\n message: 'This directory is already configured as a monorepo',\n solution: 'Use monorepo:add to add new packages',\n },\n ],\n message: 'Already a monorepo',\n status: 'error',\n };\n }\n\n try {\n ctx.logger.step('Creating monorepo structure...');\n\n // Create root package.json\n const packageJson = {\n devDependencies: {} as Record<string, string>,\n name: 'monorepo',\n private: true,\n scripts: {\n build: 'turbo run build',\n dev: 'turbo run dev',\n format: 'prettier --write \"**/*.{ts,tsx,js,jsx,json,md}\"',\n lint: 'turbo run lint',\n test: 'turbo run test',\n },\n version: '1.0.0',\n workspaces: ['apps/*', 'packages/*'],\n };\n\n // Add tool-specific configuration\n if (tool === 'turborepo' || tool === 'pnpm') {\n packageJson.devDependencies.turbo = '^2.0.0';\n packageJson.devDependencies.prettier = '^3.0.0';\n }\n\n writeFileSync(join(ctx.cwd, 'package.json'), JSON.stringify(packageJson, null, 2));\n ctx.logger.success('Created package.json');\n\n // Create pnpm-workspace.yaml for pnpm\n if (tool === 'pnpm') {\n const workspaceYaml = `packages:\n - 'apps/*'\n - 'packages/*'\n`;\n writeFileSync(join(ctx.cwd, 'pnpm-workspace.yaml'), workspaceYaml);\n ctx.logger.success('Created pnpm-workspace.yaml');\n\n // Create .npmrc\n const npmrc = `shamefully-hoist=true\nstrict-peer-dependencies=false\nauto-install-peers=true\n`;\n writeFileSync(join(ctx.cwd, '.npmrc'), npmrc);\n ctx.logger.success('Created .npmrc');\n }\n\n // Create turbo.json\n if (tool === 'turborepo' || tool === 'pnpm') {\n const turboConfig = {\n $schema: 'https://turbo.build/schema.json',\n globalDependencies: ['**/.env.*local'],\n pipeline: {\n build: {\n dependsOn: ['^build'],\n outputs: ['dist/**', '.next/**', '!.next/cache/**'],\n },\n dev: {\n cache: false,\n persistent: true,\n },\n lint: {\n dependsOn: ['^build'],\n },\n test: {\n dependsOn: ['build'],\n outputs: ['coverage/**'],\n },\n },\n };\n\n writeFileSync(join(ctx.cwd, 'turbo.json'), JSON.stringify(turboConfig, null, 2));\n ctx.logger.success('Created turbo.json');\n }\n\n // Create .gitignore\n if (!existsSync(join(ctx.cwd, '.gitignore'))) {\n const gitignore = `node_modules/\ndist/\n.turbo/\n.next/\n.env*.local\ncoverage/\n*.log\n.DS_Store\n`;\n writeFileSync(join(ctx.cwd, '.gitignore'), gitignore);\n ctx.logger.success('Created .gitignore');\n }\n\n // Create README.md\n const readme = `# Monorepo\n\n## Structure\n\n\\`\\`\\`\n.\n├── apps/ # Applications\n├── packages/ # Shared packages\n└── turbo.json # Turborepo configuration\n\\`\\`\\`\n\n## Getting Started\n\n\\`\\`\\`bash\n# Install dependencies\n${tool === 'pnpm' ? 'pnpm' : tool === 'yarn' ? 'yarn' : 'npm'} install\n\n# Start development\n${tool === 'pnpm' ? 'pnpm' : tool === 'yarn' ? 'yarn' : 'npm run'} dev\n\n# Build all packages\n${tool === 'pnpm' ? 'pnpm' : tool === 'yarn' ? 'yarn' : 'npm run'} build\n\n# Run tests\n${tool === 'pnpm' ? 'pnpm' : tool === 'yarn' ? 'yarn' : 'npm run'} test\n\\`\\`\\`\n\n## Adding Packages\n\n\\`\\`\\`bash\n# Add a new app\nkubit-forge monorepo:add my-app --type app\n\n# Add a new package\nkubit-forge monorepo:add my-package --type package\n\\`\\`\\`\n`;\n\n writeFileSync(join(ctx.cwd, 'README.md'), readme);\n ctx.logger.success('Created README.md');\n\n displaySuccess('Monorepo Initialized', [\n `Tool: ${tool}`,\n 'Structure: apps/*, packages/*',\n 'Configuration files created',\n ]);\n\n return {\n data: { tool },\n message: 'Monorepo initialized successfully',\n status: 'ok',\n };\n } catch (error) {\n return {\n message: `Failed to initialize monorepo: ${error instanceof Error ? error.message : 'Unknown error'}`,\n status: 'error',\n };\n }\n}\n\n/**\n * Add a new package to the monorepo\n */\nexport async function monorepoAddCommand(\n options: MonorepoAddOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n displayWelcome('Add Package to Monorepo', `Creating new ${options.type}: ${options.name}`);\n\n const manager = new MonorepoManager(ctx.logger, ctx.cwd);\n\n // Check if in a monorepo\n const isMonorepo = await manager.isMonorepo();\n if (!isMonorepo) {\n return {\n errors: [\n {\n code: 'NOT_MONOREPO',\n message: 'Not in a monorepo',\n solution: 'Run \"kubit-forge monorepo:init\" first',\n },\n ],\n message: 'Not in a monorepo',\n status: 'error',\n };\n }\n\n try {\n const result = await manager.createPackage({\n name: options.name,\n private: options.private,\n template: options.template,\n type: options.type,\n });\n\n if (!result.success) {\n return {\n message: result.error || 'Failed to create package',\n status: 'error',\n };\n }\n\n displaySuccess('Package Created', [\n `Name: ${options.name}`,\n `Type: ${options.type}`,\n `Path: ${result.path}`,\n ]);\n\n return {\n data: { path: result.path },\n message: `Package '${options.name}' created successfully`,\n status: 'ok',\n };\n } catch (error) {\n return {\n message: `Failed to add package: ${error instanceof Error ? error.message : 'Unknown error'}`,\n status: 'error',\n };\n }\n}\n\n/**\n * List all packages in the monorepo\n */\nexport async function monorepoListCommand(ctx: PluginContext): Promise<CommandResult> {\n const manager = new MonorepoManager(ctx.logger, ctx.cwd);\n\n const isMonorepo = await manager.isMonorepo();\n if (!isMonorepo) {\n return {\n message: 'Not in a monorepo',\n status: 'error',\n };\n }\n\n try {\n const packages = await manager.listPackages();\n\n ctx.logger.info('\\n📦 Monorepo Packages:\\n');\n\n if (packages.length === 0) {\n ctx.logger.info('No packages found');\n } else {\n for (const pkg of packages) {\n ctx.logger.info(` ${pkg.name} (${pkg.version})`);\n ctx.logger.info(` Path: ${pkg.path}`);\n ctx.logger.info(` Private: ${pkg.private ? 'Yes' : 'No'}`);\n ctx.logger.info('');\n }\n }\n\n return {\n data: { packages },\n message: `Found ${packages.length} packages`,\n status: 'ok',\n };\n } catch (error) {\n return {\n message: `Failed to list packages: ${error instanceof Error ? error.message : 'Unknown error'}`,\n status: 'error',\n };\n }\n}\n\n/**\n * Get monorepo info\n */\nexport async function monorepoInfoCommand(ctx: PluginContext): Promise<CommandResult> {\n const manager = new MonorepoManager(ctx.logger, ctx.cwd);\n\n const info = await manager.getMonorepoInfo();\n\n if (!info) {\n return {\n message: 'Not in a monorepo',\n status: 'error',\n };\n }\n\n ctx.logger.info('\\n🏗️ Monorepo Information:\\n');\n ctx.logger.info(` Tool: ${info.tool}`);\n ctx.logger.info(` Root: ${info.root}`);\n ctx.logger.info(` Workspaces: ${info.workspaces.join(', ')}`);\n ctx.logger.info(` Packages: ${info.packages.length}`);\n ctx.logger.info('');\n\n return {\n data: info,\n message: 'Monorepo info',\n status: 'ok',\n };\n}\n","import { glob } from 'fast-glob';\nimport { existsSync, mkdirSync, readFileSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { Logger } from '../types/index.js';\n\nexport interface MonorepoPackage {\n name: string;\n path: string;\n version: string;\n private?: boolean;\n dependencies?: Record<string, string>;\n devDependencies?: Record<string, string>;\n}\n\nexport interface MonorepoInfo {\n root: string;\n tool: 'pnpm-workspaces' | 'yarn-workspaces' | 'npm-workspaces' | 'lerna' | 'nx' | 'turborepo';\n workspaces: string[];\n packages: MonorepoPackage[];\n}\n\n/**\n * MonorepoManager\n *\n * Utility for managing monorepo operations\n */\nexport class MonorepoManager {\n private logger: Logger;\n private cwd: string;\n\n constructor(logger: Logger, cwd: string) {\n this.logger = logger;\n this.cwd = cwd;\n }\n\n /**\n * Get monorepo information\n */\n async getMonorepoInfo(): Promise<MonorepoInfo | null> {\n const packageJsonPath = join(this.cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n return null;\n }\n\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n let workspaces: string[] = [];\n let tool: MonorepoInfo['tool'] | null = null;\n\n // Detect monorepo tool and workspaces\n if (existsSync(join(this.cwd, 'pnpm-workspace.yaml'))) {\n tool = 'pnpm-workspaces';\n workspaces = this.parsePnpmWorkspaces();\n } else if (existsSync(join(this.cwd, 'lerna.json'))) {\n tool = 'lerna';\n const lernaConfig = this.parseLernaConfig();\n workspaces = lernaConfig?.packages || [];\n } else if (existsSync(join(this.cwd, 'nx.json'))) {\n tool = 'nx';\n // Nx uses different structure, would need nx.json parsing\n workspaces = ['apps/*', 'libs/*'];\n } else if (existsSync(join(this.cwd, 'turbo.json'))) {\n tool = 'turborepo';\n workspaces = this.getWorkspacesFromPackageJson(packageJson);\n } else if (packageJson.workspaces) {\n tool = existsSync(join(this.cwd, 'yarn.lock')) ? 'yarn-workspaces' : 'npm-workspaces';\n workspaces = this.getWorkspacesFromPackageJson(packageJson);\n }\n\n if (!tool) {\n return null;\n }\n\n // Find all packages\n const packages = await this.findPackages(workspaces);\n\n return {\n packages,\n root: this.cwd,\n tool,\n workspaces,\n };\n }\n\n /**\n * Find all packages in workspaces\n */\n private async findPackages(workspaces: string[]): Promise<MonorepoPackage[]> {\n const packages: MonorepoPackage[] = [];\n\n for (const workspace of workspaces) {\n const pattern = join(this.cwd, workspace, 'package.json');\n const packageFiles = await glob(pattern, { absolute: true });\n\n for (const packageFile of packageFiles) {\n try {\n const packageJson = JSON.parse(readFileSync(packageFile, 'utf-8'));\n const packagePath = packageFile.replace('/package.json', '');\n\n packages.push({\n dependencies: packageJson.dependencies,\n devDependencies: packageJson.devDependencies,\n name: packageJson.name,\n path: packagePath,\n private: packageJson.private,\n version: packageJson.version,\n });\n } catch (error) {\n this.logger.warn(`Failed to read package.json at ${packageFile}`);\n }\n }\n }\n\n return packages;\n }\n\n /**\n * Get workspaces from package.json\n */\n private getWorkspacesFromPackageJson(packageJson: {\n workspaces?: string[] | { packages?: string[] };\n }): string[] {\n if (Array.isArray(packageJson.workspaces)) {\n return packageJson.workspaces;\n }\n if (packageJson.workspaces && typeof packageJson.workspaces === 'object') {\n return (packageJson.workspaces as { packages?: string[] }).packages || [];\n }\n return [];\n }\n\n /**\n * Parse pnpm-workspace.yaml\n */\n private parsePnpmWorkspaces(): string[] {\n try {\n const workspaceFile = join(this.cwd, 'pnpm-workspace.yaml');\n if (!existsSync(workspaceFile)) {\n return [];\n }\n\n const content = readFileSync(workspaceFile, 'utf-8');\n const match = content.match(/packages:\\s*\\n((?:\\s+-\\s+['\"]?[^'\"]+['\"]?\\s*\\n?)+)/);\n if (match) {\n return match[1]\n .split('\\n')\n .map((line) => line.trim())\n .filter((line) => line.startsWith('-'))\n .map((line) => line.replace(/^-\\s+['\"]?/, '').replace(/['\"]?\\s*$/, ''));\n }\n } catch {\n // Ignore errors\n }\n return [];\n }\n\n /**\n * Parse lerna.json\n */\n private parseLernaConfig(): { packages?: string[] } | undefined {\n try {\n const lernaFile = join(this.cwd, 'lerna.json');\n if (!existsSync(lernaFile)) {\n return undefined;\n }\n\n const content = readFileSync(lernaFile, 'utf-8');\n return JSON.parse(content);\n } catch {\n // Ignore errors\n }\n return undefined;\n }\n\n /**\n * Create a new package in the monorepo\n */\n async createPackage(options: {\n name: string;\n type: 'app' | 'package';\n template?: 'react' | 'vanilla' | 'library';\n private?: boolean;\n }): Promise<{ success: boolean; path?: string; error?: string }> {\n const monorepoInfo = await this.getMonorepoInfo();\n\n if (!monorepoInfo) {\n return { error: 'Not in a monorepo', success: false };\n }\n\n // Determine target directory\n const targetDir =\n options.type === 'app'\n ? join(this.cwd, 'apps', options.name)\n : join(this.cwd, 'packages', options.name);\n\n if (existsSync(targetDir)) {\n return { error: `Directory ${targetDir} already exists`, success: false };\n }\n\n try {\n // Create directory\n mkdirSync(targetDir, { recursive: true });\n\n // Create package.json\n const packageJson = {\n dependencies: {},\n devDependencies: {},\n main: options.type === 'package' ? './dist/index.js' : undefined,\n name: `@${monorepoInfo.root.split('/').pop()}/${options.name}`,\n private: options.private ?? options.type === 'app',\n scripts:\n options.type === 'app'\n ? {\n build: 'vite build',\n dev: 'vite',\n preview: 'vite preview',\n }\n : {\n build: 'tsup src/index.ts --format cjs,esm --dts',\n dev: 'tsup src/index.ts --format cjs,esm --dts --watch',\n },\n types: options.type === 'package' ? './dist/index.d.ts' : undefined,\n version: '1.0.0',\n };\n\n writeFileSync(join(targetDir, 'package.json'), JSON.stringify(packageJson, null, 2));\n\n // Create src directory\n const srcDir = join(targetDir, 'src');\n mkdirSync(srcDir, { recursive: true });\n\n // Create basic index file\n const indexFile = options.template === 'react' ? 'index.tsx' : 'index.ts';\n const indexContent =\n options.template === 'react'\n ? `import React from 'react';\\n\\nexport const App = () => {\\n return <div>Hello from ${options.name}</div>;\\n};\\n`\n : `export const ${options.name.replace(/-/g, '_')} = '${options.name}';\\n`;\n\n writeFileSync(join(srcDir, indexFile), indexContent);\n\n // Create tsconfig.json\n const tsconfig = {\n compilerOptions: {\n outDir: 'dist',\n },\n extends: '../../tsconfig.json',\n include: ['src'],\n };\n\n writeFileSync(join(targetDir, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2));\n\n this.logger.success(`Created ${options.type} '${options.name}' at ${targetDir}`);\n\n return { path: targetDir, success: true };\n } catch (error) {\n return {\n error: `Failed to create package: ${error instanceof Error ? error.message : 'Unknown error'}`,\n success: false,\n };\n }\n }\n\n /**\n * List all packages in the monorepo\n */\n async listPackages(): Promise<MonorepoPackage[]> {\n const monorepoInfo = await this.getMonorepoInfo();\n return monorepoInfo?.packages || [];\n }\n\n /**\n * Check if current directory is a monorepo\n */\n async isMonorepo(): Promise<boolean> {\n const info = await this.getMonorepoInfo();\n return info !== null;\n }\n\n /**\n * Get package by name\n */\n async getPackage(name: string): Promise<MonorepoPackage | null> {\n const packages = await this.listPackages();\n return packages.find((pkg) => pkg.name === name) || null;\n }\n}\n","/**\n * Setup command - Initialize package.json and git in existing directory\n */\n\nimport enquirer from 'enquirer';\nimport { existsSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { CommandResult, PluginContext } from '../types/index.js';\n\nimport { colors } from '../utils/theme.js';\nimport {\n displayWelcome,\n displaySuccess,\n displayNextSteps,\n displayInfo,\n} from '../utils/ui-helpers.js';\n\ninterface SetupOptions {\n skipPrompts?: boolean;\n git?: boolean;\n packageJson?: boolean;\n}\n\ninterface SetupAnswers {\n name: string;\n version: string;\n description: string;\n author: string;\n license: string;\n packageManager: 'pnpm' | 'npm' | 'yarn';\n type: 'module' | 'commonjs';\n initGit: boolean;\n private: boolean;\n}\n\n/**\n * Setup command - Initialize project files\n */\nexport async function setupCommand(\n options: SetupOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n displayWelcome(\n 'Setup Project',\n 'Initialize package.json and git repository in current directory'\n );\n\n try {\n // Check if package.json already exists\n const packageJsonPath = join(ctx.cwd, 'package.json');\n const hasPackageJson = existsSync(packageJsonPath);\n const hasGit = existsSync(join(ctx.cwd, '.git'));\n\n if (hasPackageJson && !options.skipPrompts) {\n displayInfo('package.json already exists. This will overwrite it.');\n const result = (await enquirer.prompt({\n initial: false,\n message: 'Continue?',\n name: 'proceed',\n type: 'confirm',\n } as never)) as { proceed: boolean };\n\n if (!result.proceed) {\n return {\n message: 'Setup cancelled',\n status: 'error',\n };\n }\n }\n\n // Collect answers\n const answers = await collectSetupAnswers(ctx, hasGit);\n\n // Show summary\n displaySetupSummary(answers);\n\n // Confirm\n if (!options.skipPrompts) {\n const result = (await enquirer.prompt({\n initial: true,\n message: 'Create files with these settings?',\n name: 'confirmed',\n type: 'confirm',\n } as never)) as { confirmed: boolean };\n\n if (!result.confirmed) {\n return {\n message: 'Setup cancelled',\n status: 'error',\n };\n }\n }\n\n // Create package.json\n if (options.packageJson !== false) {\n ctx.logger.step('Creating package.json...');\n const packageJson = generatePackageJson(answers);\n writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2) + '\\n');\n ctx.logger.success('package.json created');\n }\n\n // Initialize git\n if (answers.initGit && !hasGit) {\n ctx.logger.step('Initializing git repository...');\n await initializeGit(ctx);\n\n // Create .gitignore\n ctx.logger.step('Creating .gitignore...');\n const gitignore = generateGitignore(answers.packageManager);\n writeFileSync(join(ctx.cwd, '.gitignore'), gitignore);\n ctx.logger.success('Git repository initialized');\n }\n\n // Create README.md if it doesn't exist\n const readmePath = join(ctx.cwd, 'README.md');\n if (!existsSync(readmePath)) {\n ctx.logger.step('Creating README.md...');\n const readme = generateReadme(answers);\n writeFileSync(readmePath, readme);\n ctx.logger.success('README.md created');\n }\n\n // Success\n displaySuccess('Project Setup Complete', [\n `Name: ${answers.name}`,\n `Version: ${answers.version}`,\n `Type: ${answers.type}`,\n `Package Manager: ${answers.packageManager}`,\n `Git: ${answers.initGit ? 'Initialized' : 'Skipped'}`,\n ]);\n\n displayNextSteps([\n `${answers.packageManager} install`,\n 'Add your project dependencies',\n 'Start coding!',\n ]);\n\n return {\n message: 'Project setup complete',\n status: 'ok',\n };\n } catch (error) {\n if (error instanceof Error && error.message.includes('User force closed')) {\n return {\n message: 'Setup cancelled',\n status: 'error',\n };\n }\n\n return {\n message: `Failed to setup project: ${error instanceof Error ? error.message : 'Unknown error'}`,\n status: 'error',\n };\n }\n}\n\n/**\n * Collect setup answers from user\n */\nasync function collectSetupAnswers(ctx: PluginContext, hasGit: boolean): Promise<SetupAnswers> {\n // Get current directory name as default project name\n const defaultName = ctx.cwd.split('/').pop() || 'my-project';\n\n const answers = (await enquirer.prompt([\n {\n initial: defaultName,\n message: 'Package name:',\n name: 'name',\n type: 'input',\n validate: (value: string) => {\n if (!value) {\n return 'Package name is required';\n }\n if (!/^[@a-z0-9-/]+$/.test(value)) {\n return 'Package name must be lowercase alphanumeric with hyphens and slashes';\n }\n return true;\n },\n },\n {\n initial: '0.1.0',\n message: 'Version:',\n name: 'version',\n type: 'input',\n },\n {\n initial: '',\n message: 'Description:',\n name: 'description',\n type: 'input',\n },\n {\n initial: '',\n message: 'Author:',\n name: 'author',\n type: 'input',\n },\n {\n choices: [\n { name: 'MIT', value: 'MIT' },\n { name: 'Apache-2.0', value: 'Apache-2.0' },\n { name: 'ISC', value: 'ISC' },\n { name: 'BSD-3-Clause', value: 'BSD-3-Clause' },\n { name: 'Unlicense', value: 'Unlicense' },\n { name: 'UNLICENSED (private)', value: 'UNLICENSED' },\n ],\n initial: 0,\n message: 'License:',\n name: 'license',\n type: 'select',\n },\n {\n choices: [\n { name: 'pnpm (recommended)', value: 'pnpm' },\n { name: 'npm', value: 'npm' },\n { name: 'yarn', value: 'yarn' },\n ],\n initial: 0,\n message: 'Package manager:',\n name: 'packageManager',\n type: 'select',\n },\n {\n choices: [\n { name: 'ES Module (recommended)', value: 'module' },\n { name: 'CommonJS', value: 'commonjs' },\n ],\n initial: 0,\n message: 'Module type:',\n name: 'type',\n type: 'select',\n },\n {\n initial: false,\n message: 'Private package?',\n name: 'private',\n type: 'confirm',\n },\n {\n initial: !hasGit,\n message: 'Initialize git repository?',\n name: 'initGit',\n skip: hasGit,\n type: 'confirm',\n },\n ] as never)) as any;\n\n return {\n author: answers.author || '',\n description: answers.description || '',\n initGit: hasGit ? false : answers.initGit !== undefined ? answers.initGit : true,\n license: answers.license,\n name: answers.name,\n packageManager: answers.packageManager,\n private: answers.private,\n type: answers.type,\n version: answers.version,\n };\n}\n\n/**\n * Display setup summary\n */\nfunction displaySetupSummary(answers: SetupAnswers): void {\n console.log('');\n console.log(colors.primary.bold('Setup Summary:'));\n console.log('');\n console.log(` ${colors.muted('Name:')} ${colors.bold(answers.name)}`);\n console.log(` ${colors.muted('Version:')} ${colors.bold(answers.version)}`);\n console.log(` ${colors.muted('Description:')} ${colors.bold(answers.description || '(none)')}`);\n console.log(` ${colors.muted('Author:')} ${colors.bold(answers.author || '(none)')}`);\n console.log(` ${colors.muted('License:')} ${colors.bold(answers.license)}`);\n console.log(` ${colors.muted('Type:')} ${colors.bold(answers.type)}`);\n console.log(` ${colors.muted('Package Manager:')} ${colors.bold(answers.packageManager)}`);\n console.log(` ${colors.muted('Private:')} ${colors.bold(answers.private ? 'Yes' : 'No')}`);\n console.log(` ${colors.muted('Git:')} ${colors.bold(answers.initGit ? 'Initialize' : 'Skip')}`);\n console.log('');\n}\n\n/**\n * Generate package.json content\n */\nfunction generatePackageJson(answers: SetupAnswers): Record<string, unknown> {\n const packageJson: Record<string, unknown> = {\n name: answers.name,\n type: answers.type,\n version: answers.version,\n };\n\n if (answers.description) {\n packageJson.description = answers.description;\n }\n\n if (answers.author) {\n packageJson.author = answers.author;\n }\n\n packageJson.license = answers.license;\n\n if (answers.private) {\n packageJson.private = true;\n }\n\n packageJson.scripts = {\n test: 'echo \"Error: no test specified\" && exit 1',\n };\n\n packageJson.keywords = [];\n packageJson.dependencies = {};\n packageJson.devDependencies = {};\n\n return packageJson;\n}\n\n/**\n * Generate .gitignore content\n */\nfunction generateGitignore(packageManager: string): string {\n const lockFiles: Record<string, string> = {\n npm: 'package-lock.json',\n pnpm: 'pnpm-lock.yaml',\n yarn: 'yarn.lock',\n };\n\n return `# Dependencies\nnode_modules/\n${lockFiles[packageManager] || ''}\n\n# Build output\ndist/\nbuild/\n*.tsbuildinfo\n\n# Environment\n.env\n.env.local\n.env.*.local\n\n# IDE\n.vscode/\n.idea/\n*.swp\n*.swo\n*~\n\n# OS\n.DS_Store\nThumbs.db\n\n# Logs\nlogs/\n*.log\nnpm-debug.log*\nyarn-debug.log*\nyarn-error.log*\n\n# Testing\ncoverage/\n.nyc_output/\n\n# Misc\n.cache/\n.temp/\n`;\n}\n\n/**\n * Generate README.md content\n */\nfunction generateReadme(answers: SetupAnswers): string {\n return `# ${answers.name}\n\n${answers.description || 'A new project'}\n\n## Installation\n\n\\`\\`\\`bash\n${answers.packageManager} install\n\\`\\`\\`\n\n## Usage\n\n\\`\\`\\`bash\n${answers.packageManager} start\n\\`\\`\\`\n\n## License\n\n${answers.license}\n`;\n}\n\n/**\n * Initialize git repository\n */\nasync function initializeGit(ctx: PluginContext): Promise<void> {\n const { execa } = await import('execa');\n\n try {\n await execa('git', ['init'], { cwd: ctx.cwd });\n await execa('git', ['add', '.'], { cwd: ctx.cwd });\n await execa('git', ['commit', '-m', 'Initial commit'], { cwd: ctx.cwd });\n } catch {\n ctx.logger.warn('Failed to initialize git repository');\n }\n}\n","import { existsSync } from 'fs';\nimport { join } from 'path';\n\nimport type {\n Plugin,\n PluginContext,\n CommandRegistration,\n TaskRegistration,\n GeneratorRegistration,\n ProviderRegistration,\n Logger,\n CommandResult,\n TaskResult,\n} from '../types/index.js';\nimport type { PluginMetadata } from './plugin-dependency-resolver.js';\n\nimport { PluginDependencyResolver } from './plugin-dependency-resolver.js';\nimport { PluginRegistry } from './plugin-registry.js';\nimport { SandboxManager } from './plugin-sandbox.js';\nimport { PluginValidator } from './plugin-validator.js';\nimport { PluginVersionManager } from './plugin-version-manager.js';\n\nexport interface PluginLoadOptions {\n validate?: boolean;\n skipSecurityCheck?: boolean;\n useSandbox?: boolean;\n checkDependencies?: boolean;\n}\n\nexport class PluginManager {\n private plugins: Map<string, Plugin> = new Map();\n private commands: Map<string, CommandRegistration> = new Map();\n private tasks: Map<string, TaskRegistration> = new Map();\n private generators: Map<string, GeneratorRegistration> = new Map();\n private providers: Map<string, ProviderRegistration[]> = new Map();\n private logger: Logger;\n private cwd: string;\n private validator: PluginValidator;\n private registry: PluginRegistry;\n private sandboxManager: SandboxManager;\n private versionManager: PluginVersionManager;\n private dependencyResolver: PluginDependencyResolver;\n\n constructor(logger: Logger, cwd: string) {\n this.logger = logger;\n this.cwd = cwd;\n this.validator = new PluginValidator();\n this.registry = new PluginRegistry(logger);\n this.sandboxManager = new SandboxManager(logger);\n this.versionManager = new PluginVersionManager(logger);\n this.dependencyResolver = new PluginDependencyResolver(logger);\n }\n\n /**\n * Load plugins from config or auto-detect\n */\n async loadPlugins(\n pluginNames: string[],\n ctx: PluginContext,\n options: PluginLoadOptions = {}\n ): Promise<void> {\n // Resolve dependencies first\n if (options.checkDependencies !== false) {\n const resolution = this.dependencyResolver.resolve(pluginNames);\n\n if (resolution.errors.length > 0) {\n this.logger.error('Plugin dependency resolution failed:');\n resolution.errors.forEach((err) => this.logger.error(` - ${err}`));\n throw new Error('Cannot load plugins due to dependency errors');\n }\n\n if (resolution.warnings.length > 0) {\n resolution.warnings.forEach((warn) => this.logger.warn(warn));\n }\n\n // Use resolved load order\n pluginNames = resolution.loadOrder;\n this.logger.debug(`Plugin load order: ${pluginNames.join(' -> ')}`);\n }\n\n // Load plugins in order\n for (const pluginName of pluginNames) {\n try {\n await this.loadPlugin(pluginName, ctx, options);\n } catch (error) {\n this.logger.warn(\n `Failed to load plugin '${pluginName}': ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n }\n\n /**\n * Load a single plugin\n */\n private async loadPlugin(\n pluginName: string,\n ctx: PluginContext,\n options: PluginLoadOptions = {}\n ): Promise<void> {\n // Try to resolve plugin\n let pluginModule: { default?: Plugin; [key: string]: unknown };\n\n try {\n // Try as npm package\n const pluginPath = join(this.cwd, 'node_modules', pluginName);\n if (existsSync(pluginPath)) {\n pluginModule = await import(pluginPath);\n } else {\n // Try as local path\n pluginModule = await import(pluginName);\n }\n } catch {\n throw new Error(`Cannot resolve plugin '${pluginName}'`);\n }\n\n const plugin = (pluginModule.default || pluginModule) as Plugin;\n\n if (!plugin.name || !plugin.version) {\n throw new Error(`Invalid plugin '${pluginName}': missing name or version`);\n }\n\n // Register version\n this.versionManager.registerInstalled(plugin.name, plugin.version);\n\n // Check version compatibility\n const versionCheck = this.versionManager.checkCompatibility(plugin.name);\n if (!versionCheck.compatible) {\n this.logger.error(`Plugin '${plugin.name}' version compatibility check failed:`);\n versionCheck.issues.forEach((issue) => this.logger.error(` - ${issue}`));\n throw new Error(`Plugin '${plugin.name}' is not compatible`);\n }\n\n if (versionCheck.warnings.length > 0) {\n versionCheck.warnings.forEach((warn) => this.logger.warn(warn));\n }\n\n // Validate plugin if requested\n if (options.validate !== false) {\n const validation = this.validator.validate(plugin);\n\n if (!validation.valid) {\n throw new Error(\n `Plugin '${plugin.name}' validation failed:\\n${validation.errors.join('\\n')}`\n );\n }\n\n // Show warnings\n if (validation.warnings.length > 0) {\n for (const warning of validation.warnings) {\n this.logger.warn(`Plugin '${plugin.name}': ${warning}`);\n }\n }\n\n // Check security issues\n if (!options.skipSecurityCheck && validation.securityIssues.length > 0) {\n this.logger.warn(`\\nSecurity notice for plugin '${plugin.name}':`);\n for (const issue of validation.securityIssues) {\n this.logger.warn(` - ${issue}`);\n }\n\n const securityLevel = this.validator.getSecurityLevel(plugin);\n if (securityLevel === 'dangerous') {\n this.logger.warn(\n '\\nThis plugin requires dangerous permissions. Only install if you trust the source.'\n );\n }\n }\n }\n\n // Store plugin\n this.plugins.set(plugin.name, plugin);\n\n // Call onLoad hook\n if (plugin.onLoad) {\n await plugin.onLoad(ctx);\n }\n\n // Register commands\n if (plugin.registerCommands) {\n const commands = plugin.registerCommands();\n for (const cmd of commands) {\n this.commands.set(cmd.name, cmd);\n this.logger.debug(`Registered command '${cmd.name}' from plugin '${plugin.name}'`);\n }\n }\n\n // Register tasks\n if (plugin.registerTasks) {\n const tasks = plugin.registerTasks();\n for (const task of tasks) {\n this.tasks.set(task.name, task);\n this.logger.debug(`Registered task '${task.name}' from plugin '${plugin.name}'`);\n }\n }\n\n // Register generators\n if (plugin.registerGenerators) {\n const generators = plugin.registerGenerators();\n for (const gen of generators) {\n this.generators.set(gen.kind, gen);\n this.logger.debug(`Registered generator '${gen.kind}' from plugin '${plugin.name}'`);\n }\n }\n\n // Register providers\n if (plugin.registerProviders) {\n const providers = plugin.registerProviders();\n for (const provider of providers) {\n if (!this.providers.has(provider.command)) {\n this.providers.set(provider.command, []);\n }\n this.providers.get(provider.command)!.push(provider);\n this.logger.debug(\n `Registered provider for '${provider.command}' from plugin '${plugin.name}'`\n );\n }\n }\n\n this.logger.debug(`Loaded plugin '${plugin.name}' v${plugin.version}`);\n }\n\n /**\n * Get all loaded plugins\n */\n getPlugins(): Plugin[] {\n return Array.from(this.plugins.values());\n }\n\n /**\n * Get command by name\n */\n getCommand(name: string): CommandRegistration | undefined {\n return this.commands.get(name);\n }\n\n /**\n * Get all commands\n */\n getCommands(): CommandRegistration[] {\n return Array.from(this.commands.values());\n }\n\n /**\n * Get task by name\n */\n getTask(name: string): TaskRegistration | undefined {\n return this.tasks.get(name);\n }\n\n /**\n * Get all tasks\n */\n getTasks(): TaskRegistration[] {\n return Array.from(this.tasks.values());\n }\n\n /**\n * Get generator by kind\n */\n getGenerator(kind: string): GeneratorRegistration | undefined {\n return this.generators.get(kind);\n }\n\n /**\n * Get all generators\n */\n getGenerators(): GeneratorRegistration[] {\n return Array.from(this.generators.values());\n }\n\n /**\n * Get best provider for a command\n */\n getProvider(command: string, ctx: PluginContext): ProviderRegistration | undefined {\n const providers = this.providers.get(command) || [];\n\n // Filter providers that can handle this context\n const capable = providers.filter((p) => p.canHandle(ctx));\n\n if (capable.length === 0) {\n return undefined;\n }\n\n // Sort by priority (highest first)\n capable.sort((a, b) => b.priority - a.priority);\n\n return capable[0];\n }\n\n /**\n * Call beforeCommand hooks\n */\n async callBeforeCommand(command: string, ctx: PluginContext): Promise<void> {\n for (const plugin of this.plugins.values()) {\n if (plugin.beforeCommand) {\n await plugin.beforeCommand(command, ctx);\n }\n }\n }\n\n /**\n * Call afterCommand hooks\n */\n async callAfterCommand(command: string, ctx: PluginContext, result: unknown): Promise<void> {\n for (const plugin of this.plugins.values()) {\n if (plugin.afterCommand) {\n await plugin.afterCommand(command, ctx, result as CommandResult);\n }\n }\n }\n\n /**\n * Call beforeTask hooks\n */\n async callBeforeTask(task: string, ctx: PluginContext): Promise<void> {\n for (const plugin of this.plugins.values()) {\n if (plugin.beforeTask) {\n await plugin.beforeTask(task, ctx);\n }\n }\n }\n\n /**\n * Call afterTask hooks\n */\n async callAfterTask(task: string, ctx: PluginContext, result: unknown): Promise<void> {\n for (const plugin of this.plugins.values()) {\n if (plugin.afterTask) {\n await plugin.afterTask(task, ctx, result as TaskResult);\n }\n }\n }\n\n /**\n * Search for plugins in registry\n */\n async searchPlugins(query: string, options?: { verified?: boolean; category?: string }) {\n return this.registry.search(query, options);\n }\n\n /**\n * Get plugin info from registry\n */\n async getPluginInfo(name: string) {\n return this.registry.getInfo(name);\n }\n\n /**\n * Get featured plugins\n */\n async getFeaturedPlugins() {\n return this.registry.getFeatured();\n }\n\n /**\n * Check if plugin is loaded\n */\n isLoaded(pluginName: string): boolean {\n return this.plugins.has(pluginName);\n }\n\n /**\n * Get loaded plugin by name\n */\n getPlugin(pluginName: string): Plugin | undefined {\n return this.plugins.get(pluginName);\n }\n\n /**\n * Unload a plugin\n */\n async unloadPlugin(pluginName: string): Promise<void> {\n const plugin = this.plugins.get(pluginName);\n if (!plugin) {\n return;\n }\n\n // Remove registered commands\n if (plugin.registerCommands) {\n const commands = plugin.registerCommands();\n for (const cmd of commands) {\n this.commands.delete(cmd.name);\n }\n }\n\n // Remove registered tasks\n if (plugin.registerTasks) {\n const tasks = plugin.registerTasks();\n for (const task of tasks) {\n this.tasks.delete(task.name);\n }\n }\n\n // Remove registered generators\n if (plugin.registerGenerators) {\n const generators = plugin.registerGenerators();\n for (const gen of generators) {\n this.generators.delete(gen.kind);\n }\n }\n\n // Remove registered providers\n if (plugin.registerProviders) {\n const providers = plugin.registerProviders();\n for (const provider of providers) {\n const list = this.providers.get(provider.command);\n if (list) {\n const index = list.indexOf(provider);\n if (index !== -1) {\n list.splice(index, 1);\n }\n }\n }\n }\n\n // Remove plugin\n this.plugins.delete(pluginName);\n this.logger.debug(`Unloaded plugin '${pluginName}'`);\n }\n\n /**\n * Get plugin statistics\n */\n getStats() {\n return {\n commands: this.commands.size,\n dependencies: this.dependencyResolver.getStats(),\n generators: this.generators.size,\n plugins: this.plugins.size,\n providers: Array.from(this.providers.values()).reduce((sum, list) => sum + list.length, 0),\n tasks: this.tasks.size,\n versions: this.versionManager.getStats(),\n };\n }\n\n /**\n * Get version manager\n */\n getVersionManager(): PluginVersionManager {\n return this.versionManager;\n }\n\n /**\n * Get dependency resolver\n */\n getDependencyResolver(): PluginDependencyResolver {\n return this.dependencyResolver;\n }\n\n /**\n * Get sandbox manager\n */\n getSandboxManager(): SandboxManager {\n return this.sandboxManager;\n }\n\n /**\n * Register plugin metadata for dependency resolution\n */\n registerPluginMetadata(metadata: PluginMetadata): void {\n this.dependencyResolver.register(metadata);\n }\n\n /**\n * Check plugin updates\n */\n async checkUpdates(): Promise<Array<{ name: string; current: string; latest: string }>> {\n const updates: Array<{ name: string; current: string; latest: string }> = [];\n\n for (const plugin of this.plugins.values()) {\n try {\n const info = await this.registry.getInfo(plugin.name);\n if (info && info.version) {\n this.versionManager.setLatest(plugin.name, info.version);\n\n if (this.versionManager.hasUpdate(plugin.name)) {\n updates.push({\n current: plugin.version,\n latest: info.version,\n name: plugin.name,\n });\n }\n }\n } catch {\n // Ignore errors for individual plugins\n }\n }\n\n return updates;\n }\n}\n","/**\n * Plugin Dependency Resolver\n *\n * Resolves plugin dependencies, checks compatibility, and determines load order.\n */\n\nimport type { Logger } from '../types/index.js';\n\nexport interface PluginDependency {\n name: string;\n version: string;\n optional?: boolean;\n reason?: string;\n}\n\nexport interface PluginMetadata {\n name: string;\n version: string;\n dependencies?: PluginDependency[];\n peerDependencies?: PluginDependency[];\n conflicts?: string[];\n}\n\nexport interface DependencyGraph {\n nodes: Map<string, PluginMetadata>;\n edges: Map<string, Set<string>>;\n}\n\nexport interface ResolutionResult {\n loadOrder: string[];\n errors: string[];\n warnings: string[];\n missing: PluginDependency[];\n conflicts: Array<{ plugin: string; conflictsWith: string }>;\n}\n\nexport class PluginDependencyResolver {\n private logger: Logger;\n private plugins: Map<string, PluginMetadata> = new Map();\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Register plugin metadata\n */\n register(metadata: PluginMetadata): void {\n this.plugins.set(metadata.name, metadata);\n this.logger.debug(`Registered plugin metadata: ${metadata.name}@${metadata.version}`);\n }\n\n /**\n * Resolve dependencies and determine load order\n */\n resolve(pluginNames: string[]): ResolutionResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n const missing: PluginDependency[] = [];\n const conflicts: Array<{ plugin: string; conflictsWith: string }> = [];\n\n // Build dependency graph\n const graph = this.buildDependencyGraph(pluginNames);\n\n // Check for missing dependencies\n for (const pluginName of pluginNames) {\n const metadata = this.plugins.get(pluginName);\n if (!metadata) {\n // Plugin metadata not registered - it might not be installed\n // This is a warning, not an error, to allow CLI to work without plugins\n warnings.push(`Plugin '${pluginName}' not found (not installed or not registered)`);\n continue;\n }\n\n // Check required dependencies\n if (metadata.dependencies) {\n for (const dep of metadata.dependencies) {\n if (!this.plugins.has(dep.name)) {\n if (dep.optional) {\n warnings.push(\n `Optional dependency '${dep.name}' for '${pluginName}' is not installed`\n );\n } else {\n errors.push(`Required dependency '${dep.name}' for '${pluginName}' is not installed`);\n missing.push(dep);\n }\n }\n }\n }\n\n // Check peer dependencies\n if (metadata.peerDependencies) {\n for (const peer of metadata.peerDependencies) {\n if (!this.plugins.has(peer.name)) {\n warnings.push(`Peer dependency '${peer.name}' for '${pluginName}' is not installed`);\n if (!peer.optional) {\n missing.push(peer);\n }\n }\n }\n }\n\n // Check conflicts\n if (metadata.conflicts) {\n for (const conflict of metadata.conflicts) {\n if (this.plugins.has(conflict)) {\n errors.push(`Plugin '${pluginName}' conflicts with '${conflict}'`);\n conflicts.push({ conflictsWith: conflict, plugin: pluginName });\n }\n }\n }\n }\n\n // Detect circular dependencies\n const circular = this.detectCircularDependencies(graph);\n if (circular.length > 0) {\n errors.push(`Circular dependencies detected: ${circular.join(' -> ')}`);\n }\n\n // Calculate load order using topological sort\n let loadOrder: string[] = [];\n if (errors.length === 0) {\n try {\n loadOrder = this.topologicalSort(graph);\n } catch (error) {\n errors.push(\n `Failed to resolve load order: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n return {\n conflicts,\n errors,\n loadOrder,\n missing,\n warnings,\n };\n }\n\n /**\n * Build dependency graph\n */\n private buildDependencyGraph(pluginNames: string[]): DependencyGraph {\n const nodes = new Map<string, PluginMetadata>();\n const edges = new Map<string, Set<string>>();\n\n const visited = new Set<string>();\n const queue = [...pluginNames];\n\n while (queue.length > 0) {\n const current = queue.shift()!;\n if (visited.has(current)) {\n continue;\n }\n\n visited.add(current);\n const metadata = this.plugins.get(current);\n\n if (!metadata) {\n continue;\n }\n\n nodes.set(current, metadata);\n\n // Add edges for dependencies\n if (metadata.dependencies) {\n for (const dep of metadata.dependencies) {\n if (!edges.has(current)) {\n edges.set(current, new Set());\n }\n edges.get(current)!.add(dep.name);\n\n // Add dependency to queue\n if (!visited.has(dep.name)) {\n queue.push(dep.name);\n }\n }\n }\n\n // Add edges for peer dependencies\n if (metadata.peerDependencies) {\n for (const peer of metadata.peerDependencies) {\n if (!edges.has(current)) {\n edges.set(current, new Set());\n }\n edges.get(current)!.add(peer.name);\n\n if (!visited.has(peer.name)) {\n queue.push(peer.name);\n }\n }\n }\n }\n\n return { edges, nodes };\n }\n\n /**\n * Detect circular dependencies\n */\n private detectCircularDependencies(graph: DependencyGraph): string[] {\n const visited = new Set<string>();\n const recursionStack = new Set<string>();\n const path: string[] = [];\n\n const dfs = (node: string): boolean => {\n visited.add(node);\n recursionStack.add(node);\n path.push(node);\n\n const dependencies = graph.edges.get(node) || new Set();\n for (const dep of dependencies) {\n if (!visited.has(dep)) {\n if (dfs(dep)) {\n return true;\n }\n } else if (recursionStack.has(dep)) {\n // Found cycle\n return true;\n }\n }\n\n recursionStack.delete(node);\n path.pop();\n return false;\n };\n\n for (const node of graph.nodes.keys()) {\n if (!visited.has(node)) {\n if (dfs(node)) {\n return path;\n }\n }\n }\n\n return [];\n }\n\n /**\n * Topological sort to determine load order\n */\n private topologicalSort(graph: DependencyGraph): string[] {\n const inDegree = new Map<string, number>();\n const result: string[] = [];\n\n // Initialize in-degree\n for (const node of graph.nodes.keys()) {\n inDegree.set(node, 0);\n }\n\n // Calculate in-degree\n for (const dependencies of graph.edges.values()) {\n for (const dep of dependencies) {\n if (graph.nodes.has(dep)) {\n inDegree.set(dep, (inDegree.get(dep) || 0) + 1);\n }\n }\n }\n\n // Queue nodes with in-degree 0\n const queue: string[] = [];\n for (const [node, degree] of inDegree.entries()) {\n if (degree === 0) {\n queue.push(node);\n }\n }\n\n // Process queue\n while (queue.length > 0) {\n const current = queue.shift()!;\n result.push(current);\n\n const dependencies = graph.edges.get(current) || new Set();\n for (const dep of dependencies) {\n if (!graph.nodes.has(dep)) {\n continue;\n }\n\n const newDegree = (inDegree.get(dep) || 0) - 1;\n inDegree.set(dep, newDegree);\n\n if (newDegree === 0) {\n queue.push(dep);\n }\n }\n }\n\n // Check if all nodes were processed\n if (result.length !== graph.nodes.size) {\n throw new Error('Circular dependency detected');\n }\n\n return result.reverse(); // Reverse to get correct load order\n }\n\n /**\n * Get dependency tree for a plugin\n */\n getDependencyTree(pluginName: string): DependencyTree {\n const metadata = this.plugins.get(pluginName);\n if (!metadata) {\n return { dependencies: [], name: pluginName, version: 'unknown' };\n }\n\n const tree: DependencyTree = {\n dependencies: [],\n name: metadata.name,\n version: metadata.version,\n };\n\n if (metadata.dependencies) {\n for (const dep of metadata.dependencies) {\n const depTree = this.getDependencyTree(dep.name);\n tree.dependencies.push(depTree);\n }\n }\n\n return tree;\n }\n\n /**\n * Get all dependencies (flat list)\n */\n getAllDependencies(pluginName: string): Set<string> {\n const dependencies = new Set<string>();\n const visited = new Set<string>();\n\n const traverse = (name: string) => {\n if (visited.has(name)) {\n return;\n }\n\n visited.add(name);\n const metadata = this.plugins.get(name);\n\n if (!metadata) {\n return;\n }\n\n if (metadata.dependencies) {\n for (const dep of metadata.dependencies) {\n dependencies.add(dep.name);\n traverse(dep.name);\n }\n }\n\n if (metadata.peerDependencies) {\n for (const peer of metadata.peerDependencies) {\n dependencies.add(peer.name);\n traverse(peer.name);\n }\n }\n };\n\n traverse(pluginName);\n return dependencies;\n }\n\n /**\n * Check if plugin can be safely unloaded\n */\n canUnload(pluginName: string): { canUnload: boolean; blockedBy: string[] } {\n const blockedBy: string[] = [];\n\n // Check if any loaded plugin depends on this one\n for (const [name] of this.plugins.entries()) {\n if (name === pluginName) {\n continue;\n }\n\n const deps = this.getAllDependencies(name);\n if (deps.has(pluginName)) {\n blockedBy.push(name);\n }\n }\n\n return {\n blockedBy,\n canUnload: blockedBy.length === 0,\n };\n }\n\n /**\n * Get plugins that depend on a specific plugin\n */\n getDependents(pluginName: string): string[] {\n const dependents: string[] = [];\n\n for (const [name] of this.plugins.entries()) {\n if (name === pluginName) {\n continue;\n }\n\n const metadata = this.plugins.get(name);\n if (!metadata) {\n continue;\n }\n\n if (metadata.dependencies) {\n const hasDep = metadata.dependencies.some((dep) => dep.name === pluginName);\n if (hasDep) {\n dependents.push(name);\n }\n }\n\n if (metadata.peerDependencies) {\n const hasPeer = metadata.peerDependencies.some((peer) => peer.name === pluginName);\n if (hasPeer) {\n dependents.push(name);\n }\n }\n }\n\n return dependents;\n }\n\n /**\n * Clear all registered plugins\n */\n clear(): void {\n this.plugins.clear();\n }\n\n /**\n * Get statistics\n */\n getStats() {\n let totalDeps = 0;\n let totalPeerDeps = 0;\n let totalConflicts = 0;\n\n for (const metadata of this.plugins.values()) {\n totalDeps += metadata.dependencies?.length || 0;\n totalPeerDeps += metadata.peerDependencies?.length || 0;\n totalConflicts += metadata.conflicts?.length || 0;\n }\n\n return {\n totalConflicts: totalConflicts,\n totalDependencies: totalDeps,\n totalPeerDependencies: totalPeerDeps,\n totalPlugins: this.plugins.size,\n };\n }\n}\n\nexport interface DependencyTree {\n name: string;\n version: string;\n dependencies: DependencyTree[];\n}\n","import type { Logger } from '../types/index.js';\n\n/**\n * Plugin information from registry\n */\nexport interface PluginInfo {\n /** Plugin name (npm package name) */\n name: string;\n /** Current version */\n version: string;\n /** Short description */\n description: string;\n /** Author name */\n author: string;\n /** Homepage URL */\n homepage?: string;\n /** Repository URL */\n repository?: string;\n /** Whether this is a verified plugin */\n verified: boolean;\n /** Required kubit-forge version */\n kubitVersion?: string;\n /** Plugin category */\n category: 'quality' | 'generator' | 'framework' | 'tooling' | 'utility';\n /** Download count (weekly) */\n downloads?: number;\n /** Last update date */\n updated?: string;\n /** Required capabilities */\n capabilities?: string[];\n /** Tags for search */\n tags?: string[];\n}\n\n/**\n * Plugin registry client\n *\n * Manages plugin discovery, search, and metadata retrieval.\n * Uses npm registry as source of truth with optional curated index.\n */\nexport class PluginRegistry {\n private logger: Logger;\n\n constructor(logger: Logger, _registryUrl: string = 'https://registry.npmjs.org') {\n this.logger = logger;\n }\n\n /**\n * Search for plugins matching query\n *\n * @param query - Search query\n * @param options - Search options\n * @returns Array of matching plugins\n */\n async search(\n query: string,\n options: { verified?: boolean; category?: string } = {}\n ): Promise<PluginInfo[]> {\n this.logger.debug(`Searching plugins: ${query}`);\n\n // In production, this would query npm registry or curated index\n // For now, return mock data\n const mockPlugins: PluginInfo[] = [\n {\n author: 'Kubit Team',\n capabilities: ['fs:write', 'shell:run'],\n category: 'tooling',\n description: 'Bernova Design System integration for Kubit projects',\n downloads: 15000,\n kubitVersion: '^2.0.0',\n name: '@kubit/plugin-bernova',\n tags: ['css', 'bernova', 'design-system', 'styling'],\n verified: true,\n version: '1.2.0',\n },\n {\n author: 'Kubit Team',\n capabilities: ['fs:write', 'shell:run', 'net:localhost'],\n category: 'tooling',\n description: 'Storybook integration with hot reload',\n downloads: 12000,\n kubitVersion: '^2.0.0',\n name: '@kubit/plugin-storybook',\n tags: ['storybook', 'components', 'ui'],\n verified: true,\n version: '2.0.1',\n },\n {\n author: 'Kubit Team',\n capabilities: ['fs:read', 'fs:write'],\n category: 'utility',\n description: 'Internationalization support with i18next',\n downloads: 8000,\n kubitVersion: '^2.0.0',\n name: '@kubit/plugin-i18n',\n tags: ['i18n', 'translation', 'localization'],\n verified: true,\n version: '1.5.0',\n },\n ];\n\n // Filter by query\n let results = mockPlugins.filter(\n (p) =>\n p.name.toLowerCase().includes(query.toLowerCase()) ||\n p.description.toLowerCase().includes(query.toLowerCase()) ||\n p.tags?.some((t) => t.toLowerCase().includes(query.toLowerCase()))\n );\n\n // Apply filters\n if (options.verified !== undefined) {\n results = results.filter((p) => p.verified === options.verified);\n }\n\n if (options.category) {\n results = results.filter((p) => p.category === options.category);\n }\n\n return results;\n }\n\n /**\n * Get detailed information about a plugin\n *\n * @param name - Plugin name\n * @returns Plugin information or null if not found\n */\n async getInfo(name: string): Promise<PluginInfo | null> {\n this.logger.debug(`Fetching plugin info: ${name}`);\n\n // In production, query npm registry\n // For now, return mock data\n const mockPlugin: PluginInfo = {\n author: 'Plugin Author',\n capabilities: ['fs:read'],\n category: 'utility',\n description: 'Plugin description',\n downloads: 1000,\n homepage: `https://github.com/kubit-ui/${name}`,\n kubitVersion: '^2.0.0',\n name,\n repository: `https://github.com/kubit-ui/${name}`,\n tags: ['utility'],\n updated: new Date().toISOString(),\n verified: false,\n version: '1.0.0',\n };\n\n return mockPlugin;\n }\n\n /**\n * Check if a plugin is verified\n *\n * @param name - Plugin name\n * @returns True if verified\n */\n async isVerified(name: string): Promise<boolean> {\n const info = await this.getInfo(name);\n return info?.verified || false;\n }\n\n /**\n * Get compatible plugins for current kubit-forge version\n *\n * @param kubitVersion - Current kubit-forge version\n * @returns Array of compatible plugins\n */\n async getCompatible(_kubitVersion: string): Promise<PluginInfo[]> {\n // In production, filter by semver compatibility\n return this.search('', {});\n }\n\n /**\n * Get featured/recommended plugins\n *\n * @returns Array of featured plugins\n */\n async getFeatured(): Promise<PluginInfo[]> {\n return this.search('', { verified: true });\n }\n}\n","/**\n * Plugin Sandbox\n *\n * Provides isolated execution environment for plugins with controlled access\n * to system resources and APIs.\n */\n\nimport type { Worker } from 'worker_threads';\n\nimport { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { join } from 'path';\n\nimport type { Logger, Plugin } from '../types/index.js';\n\nexport interface SandboxOptions {\n timeout?: number;\n memoryLimit?: number;\n allowedCapabilities?: string[];\n allowNetwork?: boolean;\n allowFileSystem?: boolean;\n allowProcessEnv?: boolean;\n}\n\nexport interface SandboxedPlugin {\n plugin: Plugin;\n sandbox: PluginSandbox;\n}\n\nexport class PluginSandbox {\n private logger: Logger;\n private options: Required<SandboxOptions>;\n private worker?: Worker;\n private isRunning = false;\n\n constructor(logger: Logger, options: SandboxOptions = {}) {\n this.logger = logger;\n this.options = {\n allowedCapabilities: options.allowedCapabilities || [],\n allowFileSystem: options.allowFileSystem ?? true,\n allowNetwork: options.allowNetwork ?? false,\n allowProcessEnv: options.allowProcessEnv ?? true,\n memoryLimit: options.memoryLimit || 512 * 1024 * 1024, // 512MB\n timeout: options.timeout || 30000, // 30 seconds\n };\n }\n\n /**\n * Execute plugin in sandboxed environment\n */\n async execute<T>(pluginPath: string, method: string, args: unknown[]): Promise<T> {\n if (this.isRunning) {\n throw new Error('Sandbox is already running');\n }\n\n this.isRunning = true;\n\n try {\n // Validate plugin path\n if (!existsSync(pluginPath)) {\n throw new Error(`Plugin not found: ${pluginPath}`);\n }\n\n // Create sandbox context\n const sandboxContext = this.createSandboxContext();\n\n // Execute in worker thread\n const result = await this.executeInWorker<T>(pluginPath, method, args, sandboxContext);\n\n return result;\n } finally {\n this.isRunning = false;\n this.cleanup();\n }\n }\n\n /**\n * Create restricted context for plugin\n */\n private createSandboxContext(): Record<string, unknown> {\n const context: Record<string, unknown> = {\n console: {\n error: (...args: unknown[]) => this.logger.error(args.join(' ')),\n log: (...args: unknown[]) => this.logger.info(args.join(' ')),\n warn: (...args: unknown[]) => this.logger.warn(args.join(' ')),\n },\n };\n\n // Add allowed capabilities\n if (this.options.allowProcessEnv) {\n context.process = {\n arch: process.arch,\n cwd: process.cwd,\n env: { ...process.env },\n platform: process.platform,\n };\n }\n\n if (this.options.allowFileSystem) {\n // Provide restricted fs access\n context.fs = this.createRestrictedFS();\n }\n\n if (this.options.allowNetwork) {\n // Provide restricted network access\n context.fetch = fetch;\n }\n\n return context;\n }\n\n /**\n * Create restricted filesystem API\n */\n private createRestrictedFS() {\n const cwd = process.cwd();\n\n return {\n exists: (path: string) => {\n const fullPath = join(cwd, path);\n if (!fullPath.startsWith(cwd)) {\n throw new Error('Access denied: Path outside project directory');\n }\n return existsSync(fullPath);\n },\n mkdir: (path: string) => {\n const fullPath = join(cwd, path);\n if (!fullPath.startsWith(cwd)) {\n throw new Error('Access denied: Path outside project directory');\n }\n return mkdirSync(fullPath, { recursive: true });\n },\n readFile: (path: string) => {\n const fullPath = join(cwd, path);\n if (!fullPath.startsWith(cwd)) {\n throw new Error('Access denied: Path outside project directory');\n }\n return readFileSync(fullPath, 'utf-8');\n },\n writeFile: (path: string, content: string) => {\n const fullPath = join(cwd, path);\n if (!fullPath.startsWith(cwd)) {\n throw new Error('Access denied: Path outside project directory');\n }\n return writeFileSync(fullPath, content, 'utf-8');\n },\n };\n }\n\n /**\n * Execute plugin method in worker thread\n */\n private async executeInWorker<T>(\n pluginPath: string,\n method: string,\n args: unknown[],\n _context: Record<string, unknown>\n ): Promise<T> {\n const timeout = setTimeout(() => {\n if (this.worker) {\n this.worker.terminate();\n }\n }, this.options.timeout);\n\n try {\n // For now, execute directly (worker_threads require more setup)\n // In production, this should use Worker threads\n const pluginModule = await import(pluginPath);\n const plugin = pluginModule.default || pluginModule;\n const pluginInstance = plugin.default || plugin;\n\n if (!pluginInstance[method]) {\n clearTimeout(timeout);\n throw new Error(`Method '${method}' not found in plugin`);\n }\n\n const result = pluginInstance[method](...args);\n\n if (result instanceof Promise) {\n return result\n .then((res: T) => {\n clearTimeout(timeout);\n return res;\n })\n .catch((err: Error) => {\n clearTimeout(timeout);\n throw err;\n });\n }\n clearTimeout(timeout);\n return result as T;\n } catch (error) {\n clearTimeout(timeout);\n throw error;\n }\n }\n\n /**\n * Check if capability is allowed\n */\n hasCapability(capability: string): boolean {\n return this.options.allowedCapabilities.includes(capability);\n }\n\n /**\n * Get sandbox statistics\n */\n getStats() {\n return {\n allowedCapabilities: this.options.allowedCapabilities,\n allowFileSystem: this.options.allowFileSystem,\n allowNetwork: this.options.allowNetwork,\n isRunning: this.isRunning,\n memoryLimit: this.options.memoryLimit,\n timeout: this.options.timeout,\n };\n }\n\n /**\n * Cleanup resources\n */\n private cleanup(): void {\n if (this.worker) {\n this.worker.terminate();\n this.worker = undefined;\n }\n }\n\n /**\n * Terminate sandbox\n */\n terminate(): void {\n this.cleanup();\n this.isRunning = false;\n }\n}\n\n/**\n * Sandbox Manager\n * Manages multiple sandboxes for different plugins\n */\nexport class SandboxManager {\n private sandboxes: Map<string, PluginSandbox> = new Map();\n private logger: Logger;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Create sandbox for plugin\n */\n createSandbox(pluginName: string, options: SandboxOptions = {}): PluginSandbox {\n if (this.sandboxes.has(pluginName)) {\n throw new Error(`Sandbox already exists for plugin '${pluginName}'`);\n }\n\n const sandbox = new PluginSandbox(this.logger, options);\n this.sandboxes.set(pluginName, sandbox);\n\n this.logger.debug(`Created sandbox for plugin '${pluginName}'`);\n return sandbox;\n }\n\n /**\n * Get sandbox for plugin\n */\n getSandbox(pluginName: string): PluginSandbox | undefined {\n return this.sandboxes.get(pluginName);\n }\n\n /**\n * Remove sandbox\n */\n removeSandbox(pluginName: string): void {\n const sandbox = this.sandboxes.get(pluginName);\n if (sandbox) {\n sandbox.terminate();\n this.sandboxes.delete(pluginName);\n this.logger.debug(`Removed sandbox for plugin '${pluginName}'`);\n }\n }\n\n /**\n * Terminate all sandboxes\n */\n terminateAll(): void {\n for (const [pluginName, sandbox] of this.sandboxes.entries()) {\n sandbox.terminate();\n this.logger.debug(`Terminated sandbox for plugin '${pluginName}'`);\n }\n this.sandboxes.clear();\n }\n\n /**\n * Get statistics for all sandboxes\n */\n getStats() {\n const stats: Record<string, unknown> = {};\n for (const [pluginName, sandbox] of this.sandboxes.entries()) {\n stats[pluginName] = sandbox.getStats();\n }\n return {\n sandboxes: stats,\n totalSandboxes: this.sandboxes.size,\n };\n }\n}\n","/**\n * Plugin Validator\n * Validates plugin structure, security, and capabilities\n */\n\nimport type { Plugin, PluginCapability } from '../types/index.js';\n\nexport interface PluginValidationResult {\n valid: boolean;\n errors: string[];\n warnings: string[];\n securityIssues: string[];\n}\n\nexport class PluginValidator {\n /**\n * Validate a plugin\n */\n validate(plugin: Plugin): PluginValidationResult {\n const errors: string[] = [];\n const warnings: string[] = [];\n const securityIssues: string[] = [];\n\n // Required fields\n if (!plugin.name) {\n errors.push('Plugin must have a name');\n } else {\n // Validate name format\n if (!/^[@a-z0-9-]+\\/[a-z0-9-]+$|^[a-z0-9-]+$/.test(plugin.name)) {\n errors.push(\n 'Plugin name must be in format \"name\" or \"@scope/name\" with lowercase letters, numbers, and hyphens'\n );\n }\n }\n\n if (!plugin.version) {\n errors.push('Plugin must have a version');\n } else {\n // Validate semver format\n if (!/^\\d+\\.\\d+\\.\\d+(-[a-z0-9.-]+)?(\\+[a-z0-9.-]+)?$/i.test(plugin.version)) {\n errors.push('Plugin version must follow semver format (e.g., 1.0.0)');\n }\n }\n\n // Validate capabilities\n if (plugin.capabilities) {\n const validCapabilities: PluginCapability[] = [\n 'fs:read',\n 'fs:write',\n 'shell:run',\n 'net:localhost',\n 'process:env',\n ];\n\n for (const cap of plugin.capabilities) {\n if (!validCapabilities.includes(cap)) {\n errors.push(`Invalid capability: ${cap}`);\n }\n\n // Security warnings for dangerous capabilities\n if (cap === 'fs:write') {\n securityIssues.push('Plugin requests file system write access');\n }\n if (cap === 'shell:run') {\n securityIssues.push('Plugin requests shell command execution');\n }\n if (cap === 'process:env') {\n warnings.push('Plugin requests access to environment variables');\n }\n }\n }\n\n // Validate lifecycle hooks\n const validHooks = [\n 'onLoad',\n 'onConfigLoaded',\n 'onProjectDetected',\n 'beforeCommand',\n 'afterCommand',\n 'beforeTask',\n 'afterTask',\n ];\n\n for (const hook of validHooks) {\n if (hook in plugin && typeof plugin[hook as keyof Plugin] !== 'function') {\n errors.push(`Hook '${hook}' must be a function`);\n }\n }\n\n // Validate registration methods\n const validRegistrations = [\n 'registerCommands',\n 'registerTasks',\n 'registerGenerators',\n 'registerProviders',\n ];\n\n for (const method of validRegistrations) {\n if (method in plugin && typeof plugin[method as keyof Plugin] !== 'function') {\n errors.push(`Registration method '${method}' must be a function`);\n }\n }\n\n // Warnings for missing common fields\n if (!plugin.capabilities || plugin.capabilities.length === 0) {\n warnings.push('Plugin does not declare any capabilities');\n }\n\n return {\n errors,\n securityIssues,\n valid: errors.length === 0,\n warnings,\n };\n }\n\n /**\n * Check if plugin requires user approval based on capabilities\n */\n requiresApproval(plugin: Plugin): boolean {\n if (!plugin.capabilities) {\n return false;\n }\n\n const dangerousCapabilities: PluginCapability[] = ['fs:write', 'shell:run'];\n return plugin.capabilities.some((cap) => dangerousCapabilities.includes(cap));\n }\n\n /**\n * Get security level of plugin\n */\n getSecurityLevel(plugin: Plugin): 'safe' | 'moderate' | 'dangerous' {\n if (!plugin.capabilities || plugin.capabilities.length === 0) {\n return 'safe';\n }\n\n const dangerousCapabilities: PluginCapability[] = ['fs:write', 'shell:run'];\n const hasDangerous = plugin.capabilities.some((cap) => dangerousCapabilities.includes(cap));\n\n if (hasDangerous) {\n return 'dangerous';\n }\n\n const moderateCapabilities: PluginCapability[] = ['process:env', 'net:localhost'];\n const hasModerate = plugin.capabilities.some((cap) => moderateCapabilities.includes(cap));\n\n if (hasModerate) {\n return 'moderate';\n }\n\n return 'safe';\n }\n\n /**\n * Validate command registration\n */\n validateCommand(command: any): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!command.name || typeof command.name !== 'string') {\n errors.push('Command must have a name (string)');\n }\n\n if (!command.description || typeof command.description !== 'string') {\n errors.push('Command must have a description (string)');\n }\n\n if (!command.action || typeof command.action !== 'function') {\n errors.push('Command must have an action (function)');\n }\n\n if (command.options && !Array.isArray(command.options)) {\n errors.push('Command options must be an array');\n }\n\n return {\n errors,\n valid: errors.length === 0,\n };\n }\n\n /**\n * Validate task registration\n */\n validateTask(task: any): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!task.name || typeof task.name !== 'string') {\n errors.push('Task must have a name (string)');\n }\n\n if (!task.description || typeof task.description !== 'string') {\n errors.push('Task must have a description (string)');\n }\n\n if (!task.run || typeof task.run !== 'function') {\n errors.push('Task must have a run function');\n }\n\n return {\n errors,\n valid: errors.length === 0,\n };\n }\n\n /**\n * Validate generator registration\n */\n validateGenerator(generator: any): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!generator.kind || typeof generator.kind !== 'string') {\n errors.push('Generator must have a kind (string)');\n }\n\n if (!generator.description || typeof generator.description !== 'string') {\n errors.push('Generator must have a description (string)');\n }\n\n if (!generator.generate || typeof generator.generate !== 'function') {\n errors.push('Generator must have a generate function');\n }\n\n return {\n errors,\n valid: errors.length === 0,\n };\n }\n\n /**\n * Validate provider registration\n */\n validateProvider(provider: any): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!provider.command || typeof provider.command !== 'string') {\n errors.push('Provider must have a command (string)');\n }\n\n if (typeof provider.priority !== 'number') {\n errors.push('Provider must have a priority (number)');\n }\n\n if (!provider.canHandle || typeof provider.canHandle !== 'function') {\n errors.push('Provider must have a canHandle function');\n }\n\n if (!provider.handler || typeof provider.handler !== 'function') {\n errors.push('Provider must have a handler function');\n }\n\n return {\n errors,\n valid: errors.length === 0,\n };\n }\n}\n","/**\n * Plugin Version Manager\n *\n * Manages plugin versions, compatibility checks, and version resolution.\n */\n\nimport { satisfies, valid, coerce, gt, lt, eq } from 'semver';\n\nimport type { Logger } from '../types/index.js';\n\nexport interface PluginVersion {\n name: string;\n version: string;\n installedVersion?: string;\n requiredVersion?: string;\n compatible: boolean;\n updateAvailable?: boolean;\n latestVersion?: string;\n}\n\nexport interface VersionConstraint {\n plugin: string;\n version: string;\n reason?: string;\n}\n\nexport interface CompatibilityCheck {\n compatible: boolean;\n issues: string[];\n warnings: string[];\n recommendations: string[];\n}\n\nexport class PluginVersionManager {\n private logger: Logger;\n private installedVersions: Map<string, string> = new Map();\n private requiredVersions: Map<string, string> = new Map();\n private latestVersions: Map<string, string> = new Map();\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n /**\n * Register installed plugin version\n */\n registerInstalled(pluginName: string, version: string): void {\n const normalized = this.normalizeVersion(version);\n if (!normalized) {\n this.logger.warn(`Invalid version for plugin '${pluginName}': ${version}`);\n return;\n }\n\n this.installedVersions.set(pluginName, normalized);\n this.logger.debug(`Registered plugin '${pluginName}' version ${normalized}`);\n }\n\n /**\n * Set required version for plugin\n */\n setRequired(pluginName: string, versionRange: string): void {\n this.requiredVersions.set(pluginName, versionRange);\n this.logger.debug(`Set required version for '${pluginName}': ${versionRange}`);\n }\n\n /**\n * Set latest available version\n */\n setLatest(pluginName: string, version: string): void {\n const normalized = this.normalizeVersion(version);\n if (normalized) {\n this.latestVersions.set(pluginName, normalized);\n }\n }\n\n /**\n * Check if plugin version satisfies requirement\n */\n satisfies(pluginName: string, versionRange: string): boolean {\n const installed = this.installedVersions.get(pluginName);\n if (!installed) {\n return false;\n }\n\n try {\n return satisfies(installed, versionRange);\n } catch {\n this.logger.warn(`Invalid version range for '${pluginName}': ${versionRange}`);\n return false;\n }\n }\n\n /**\n * Check compatibility of plugin\n */\n checkCompatibility(pluginName: string): CompatibilityCheck {\n const issues: string[] = [];\n const warnings: string[] = [];\n const recommendations: string[] = [];\n\n const installed = this.installedVersions.get(pluginName);\n const required = this.requiredVersions.get(pluginName);\n const latest = this.latestVersions.get(pluginName);\n\n // Check if installed\n if (!installed) {\n issues.push(`Plugin '${pluginName}' is not installed`);\n return { compatible: false, issues, recommendations, warnings };\n }\n\n // Check required version\n if (required && !this.satisfies(pluginName, required)) {\n issues.push(\n `Plugin '${pluginName}' version ${installed} does not satisfy requirement ${required}`\n );\n }\n\n // Check for updates\n if (latest && gt(latest, installed)) {\n warnings.push(`Plugin '${pluginName}' has an update available: ${installed} → ${latest}`);\n recommendations.push(`Run: kubit-forge plugin:update ${pluginName}`);\n }\n\n // Check if version is very old (major version behind)\n if (latest) {\n const installedMajor = parseInt(installed.split('.')[0], 10);\n const latestMajor = parseInt(latest.split('.')[0], 10);\n\n if (latestMajor > installedMajor + 1) {\n warnings.push(\n `Plugin '${pluginName}' is ${latestMajor - installedMajor} major versions behind`\n );\n recommendations.push(`Consider upgrading to version ${latest}`);\n }\n }\n\n return {\n compatible: issues.length === 0,\n issues,\n recommendations,\n warnings,\n };\n }\n\n /**\n * Get plugin version info\n */\n getVersionInfo(pluginName: string): PluginVersion {\n const installed = this.installedVersions.get(pluginName);\n const required = this.requiredVersions.get(pluginName);\n const latest = this.latestVersions.get(pluginName);\n\n const compatible = required ? this.satisfies(pluginName, required) : true;\n const updateAvailable = installed && latest ? gt(latest, installed) : false;\n\n return {\n compatible,\n installedVersion: installed,\n latestVersion: latest,\n name: pluginName,\n requiredVersion: required,\n updateAvailable,\n version: installed || 'not-installed',\n };\n }\n\n /**\n * Get all plugin versions\n */\n getAllVersions(): PluginVersion[] {\n const allPlugins = new Set([\n ...this.installedVersions.keys(),\n ...this.requiredVersions.keys(),\n ...this.latestVersions.keys(),\n ]);\n\n return Array.from(allPlugins).map((plugin) => this.getVersionInfo(plugin));\n }\n\n /**\n * Check if update is available\n */\n hasUpdate(pluginName: string): boolean {\n const installed = this.installedVersions.get(pluginName);\n const latest = this.latestVersions.get(pluginName);\n\n if (!installed || !latest) {\n return false;\n }\n\n return gt(latest, installed);\n }\n\n /**\n * Get plugins with updates available\n */\n getUpdatablePlugins(): PluginVersion[] {\n return this.getAllVersions().filter((p) => p.updateAvailable);\n }\n\n /**\n * Get incompatible plugins\n */\n getIncompatiblePlugins(): PluginVersion[] {\n return this.getAllVersions().filter((p) => !p.compatible);\n }\n\n /**\n * Resolve version conflicts\n */\n resolveConflicts(constraints: VersionConstraint[]): {\n resolved: Map<string, string>;\n conflicts: string[];\n } {\n const resolved = new Map<string, string>();\n const conflicts: string[] = [];\n\n // Group constraints by plugin\n const byPlugin = new Map<string, VersionConstraint[]>();\n for (const constraint of constraints) {\n if (!byPlugin.has(constraint.plugin)) {\n byPlugin.set(constraint.plugin, []);\n }\n byPlugin.get(constraint.plugin)!.push(constraint);\n }\n\n // Resolve each plugin\n for (const [plugin, pluginConstraints] of byPlugin.entries()) {\n if (pluginConstraints.length === 1) {\n // Single constraint, easy\n resolved.set(plugin, pluginConstraints[0].version);\n continue;\n }\n\n // Multiple constraints, find compatible version\n const versions = pluginConstraints.map((c) => c.version);\n const compatible = this.findCompatibleVersion(versions);\n\n if (compatible) {\n resolved.set(plugin, compatible);\n } else {\n conflicts.push(\n `Cannot resolve version for '${plugin}': ${versions.join(', ')} are incompatible`\n );\n }\n }\n\n return { conflicts, resolved };\n }\n\n /**\n * Find compatible version from multiple constraints\n */\n private findCompatibleVersion(versionRanges: string[]): string | null {\n // Get all installed versions that satisfy all ranges\n const candidates: string[] = [];\n\n // For simplicity, try to find a version that satisfies all ranges\n // In a real implementation, this would use a proper SAT solver\n for (const range of versionRanges) {\n const normalized = this.normalizeVersion(range);\n if (normalized && candidates.length === 0) {\n candidates.push(normalized);\n }\n }\n\n // Check if candidate satisfies all ranges\n for (const candidate of candidates) {\n const satisfiesAll = versionRanges.every((range) => {\n try {\n return satisfies(candidate, range);\n } catch {\n return false;\n }\n });\n\n if (satisfiesAll) {\n return candidate;\n }\n }\n\n return null;\n }\n\n /**\n * Normalize version string\n */\n private normalizeVersion(version: string): string | null {\n // Try to parse as valid semver\n if (valid(version)) {\n return version;\n }\n\n // Try to coerce\n const coerced = coerce(version);\n if (coerced) {\n return coerced.version;\n }\n\n return null;\n }\n\n /**\n * Compare two versions\n */\n compare(version1: string, version2: string): number {\n const v1 = this.normalizeVersion(version1);\n const v2 = this.normalizeVersion(version2);\n\n if (!v1 || !v2) {\n return 0;\n }\n\n if (gt(v1, v2)) {\n return 1;\n }\n if (lt(v1, v2)) {\n return -1;\n }\n return 0;\n }\n\n /**\n * Check if version is equal\n */\n isEqual(version1: string, version2: string): boolean {\n const v1 = this.normalizeVersion(version1);\n const v2 = this.normalizeVersion(version2);\n\n if (!v1 || !v2) {\n return false;\n }\n\n return eq(v1, v2);\n }\n\n /**\n * Get version statistics\n */\n getStats() {\n const all = this.getAllVersions();\n return {\n compatible: all.filter((p) => p.compatible).length,\n incompatible: all.filter((p) => !p.compatible).length,\n installed: all.filter((p) => p.installedVersion).length,\n totalPlugins: all.length,\n updatable: all.filter((p) => p.updateAvailable).length,\n };\n }\n\n /**\n * Clear all version data\n */\n clear(): void {\n this.installedVersions.clear();\n this.requiredVersions.clear();\n this.latestVersions.clear();\n }\n}\n","import { readFileSync, existsSync } from 'fs';\nimport { join } from 'path';\nimport { parse as parseToml } from 'smol-toml';\n\nimport type { KubitConfig } from '../types/index.js';\n\nimport { ConfigTemplateLoader } from '../templates/config/index.js';\nimport { KubitConfigSchema } from '../types/index.js';\n\nexport class ConfigLoader {\n private cwd: string;\n\n constructor(cwd: string = process.cwd()) {\n this.cwd = cwd;\n }\n\n /**\n * Load kubit config from project\n * Supports: kubit.config.toml, kubit.config.json\n */\n async load(configPath?: string): Promise<KubitConfig | null> {\n const configFile = configPath ? join(this.cwd, configPath) : this.findConfigFile();\n\n if (!configFile) {\n return null;\n }\n\n try {\n const content = readFileSync(configFile, 'utf-8');\n let rawConfig: unknown;\n\n if (configFile.endsWith('.toml')) {\n rawConfig = parseToml(content);\n } else if (configFile.endsWith('.json')) {\n rawConfig = JSON.parse(content);\n } else {\n throw new Error(`Unsupported config format: ${configFile}`);\n }\n\n // Validate with Zod\n const config = KubitConfigSchema.parse(rawConfig);\n return config;\n } catch (error) {\n throw new Error(\n `Failed to load config from ${configFile}: ${error instanceof Error ? error.message : 'Unknown error'}`\n );\n }\n }\n\n /**\n * Auto-detect project configuration when no config file exists\n */\n async autoDetect(): Promise<Partial<KubitConfig>> {\n const packageJsonPath = join(this.cwd, 'package.json');\n\n // If no package.json, return minimal default config\n if (!existsSync(packageJsonPath)) {\n const projectName = this.cwd.split('/').pop() || 'my-project';\n return ConfigTemplateLoader.buildDefault({\n minimal: true,\n name: projectName,\n });\n }\n\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n const deps = { ...packageJson.dependencies, ...packageJson.devDependencies };\n\n // Detect stack\n let stack: 'react' | 'vanilla' = 'vanilla';\n if (deps.react) {\n stack = 'react';\n }\n\n // Detect language\n const language = existsSync(join(this.cwd, 'tsconfig.json')) ? 'ts' : 'js';\n\n // Detect package manager\n let packageManager: 'pnpm' | 'npm' | 'yarn' = 'npm';\n if (existsSync(join(this.cwd, 'pnpm-lock.yaml'))) {\n packageManager = 'pnpm';\n } else if (existsSync(join(this.cwd, 'yarn.lock'))) {\n packageManager = 'yarn';\n } else if (existsSync(join(this.cwd, 'package-lock.json'))) {\n packageManager = 'npm';\n }\n\n // Build config using templates\n const config = ConfigTemplateLoader.buildDefault({\n language,\n name: packageJson.name || 'my-app',\n packageManager,\n stack,\n type: 'web',\n });\n\n // Override quality settings based on detected tools\n config.quality = {\n ...config.quality,\n format: true,\n lint: true,\n typecheck: language === 'ts',\n unitTest: !!deps.vitest || !!deps.jest,\n };\n\n return config;\n }\n\n private findConfigFile(): string | null {\n const candidates = ['kubit.config.toml', 'kubit.config.json'];\n\n for (const candidate of candidates) {\n const path = join(this.cwd, candidate);\n if (existsSync(path)) {\n return path;\n }\n }\n\n return null;\n }\n}\n","import { z } from 'zod';\n\n// ============================================================================\n// Config Schema\n// ============================================================================\n\nexport const KubitConfigSchema = z.object({\n commands: z\n .object({\n buildProvider: z.string().optional(),\n devProvider: z.string().optional(),\n })\n .optional(),\n\n env: z\n .object({\n required: z.array(z.string()).optional(),\n schema: z.string().optional(),\n })\n .optional(),\n\n kubit: z\n .object({\n cliVersion: z.string().optional(),\n })\n .optional(),\n\n paths: z\n .object({\n dist: z.string().default('dist'),\n envExample: z.string().default('.env.example'),\n envLocal: z.string().default('.env.local'),\n src: z.string().default('src'),\n })\n .optional(),\n\n plugins: z\n .object({\n enabled: z.array(z.string()).optional(),\n })\n .optional(),\n\n project: z.object({\n devPort: z.number().default(5173),\n language: z.enum(['ts', 'js']).default('ts'),\n name: z.string(),\n nodeVersion: z.string().default('20'),\n packageManager: z.enum(['pnpm', 'npm', 'yarn']).default('pnpm'),\n stack: z.enum(['react', 'vanilla']),\n type: z.enum(['web', 'library']).default('web'),\n }),\n\n quality: z\n .object({\n format: z.boolean().default(true),\n lint: z.boolean().default(true),\n typecheck: z.boolean().default(true),\n unitTest: z.boolean().default(true),\n })\n .optional(),\n});\n\nexport type KubitConfig = z.infer<typeof KubitConfigSchema>;\n\n// ============================================================================\n// Plugin System Types\n// ============================================================================\n\nexport interface PluginContext {\n config: KubitConfig;\n cwd: string;\n logger: Logger;\n runner: TaskRunner;\n hookManager?: HookManager;\n pluginManager?: any; // Will be typed properly later\n}\n\nexport interface Plugin {\n name: string;\n version: string;\n capabilities?: PluginCapability[];\n\n // Lifecycle hooks\n onLoad?(ctx: PluginContext): Promise<void> | void;\n onConfigLoaded?(ctx: PluginContext): Promise<void> | void;\n onProjectDetected?(ctx: PluginContext): Promise<void> | void;\n\n // Command hooks\n beforeCommand?(command: string, ctx: PluginContext): Promise<void> | void;\n afterCommand?(command: string, ctx: PluginContext, result: CommandResult): Promise<void> | void;\n\n // Task hooks\n beforeTask?(task: string, ctx: PluginContext): Promise<void> | void;\n afterTask?(task: string, ctx: PluginContext, result: TaskResult): Promise<void> | void;\n\n // Registration\n registerCommands?(): CommandRegistration[];\n registerTasks?(): TaskRegistration[];\n registerGenerators?(): GeneratorRegistration[];\n registerProviders?(): ProviderRegistration[];\n}\n\nexport type PluginCapability =\n | 'fs:read'\n | 'fs:write'\n | 'shell:run'\n | 'net:localhost'\n | 'process:env';\n\n// ============================================================================\n// Command System Types\n// ============================================================================\n\nexport interface CommandRegistration {\n name: string;\n description: string;\n options?: CommandOption[];\n action: (args: any, ctx: PluginContext) => Promise<CommandResult>;\n}\n\nexport interface CommandOption {\n flags: string;\n description: string;\n defaultValue?: any;\n}\n\nexport interface CommandResult {\n status: 'ok' | 'error' | 'warning' | 'skipped';\n message?: string;\n data?: any;\n errors?: CommandError[];\n timings?: Record<string, number>;\n}\n\nexport interface CommandError {\n code: string;\n message: string;\n cause?: string;\n solution?: string;\n docsUrl?: string;\n}\n\n// ============================================================================\n// Task System Types\n// ============================================================================\n\nexport interface TaskRegistration {\n name: string;\n description: string;\n run: (ctx: PluginContext) => Promise<TaskResult>;\n}\n\nexport interface TaskResult {\n status: 'ok' | 'error' | 'skipped';\n message?: string;\n duration?: number;\n output?: string;\n exitCode?: number;\n}\n\nexport interface TaskRunner {\n run(command: string, args?: string[], options?: RunOptions): Promise<TaskResult>;\n runTask(taskName: string): Promise<TaskResult>;\n}\n\nexport interface RunOptions {\n cwd?: string;\n env?: Record<string, string>;\n silent?: boolean;\n captureOutput?: boolean;\n}\n\n// ============================================================================\n// Generator System Types\n// ============================================================================\n\nexport interface GeneratorRegistration {\n kind: string;\n description: string;\n generate: (name: string, options: any, ctx: PluginContext) => Promise<GeneratorResult>;\n}\n\nexport interface GeneratorResult {\n status: 'ok' | 'error';\n filesCreated?: string[];\n message?: string;\n}\n\n// ============================================================================\n// Provider System Types\n// ============================================================================\n\nexport interface ProviderRegistration {\n command: string; // 'dev', 'build', 'preview', etc.\n priority: number; // Higher priority wins\n canHandle: (ctx: PluginContext) => boolean;\n handler: (args: any, ctx: PluginContext) => Promise<CommandResult>;\n}\n\n// ============================================================================\n// Logger Types\n// ============================================================================\n\nexport interface Logger {\n info(message: string): void;\n success(message: string): void;\n warn(message: string): void;\n error(message: string, error?: Error): void;\n debug(message: string): void;\n step(message: string): void;\n json(data: any): void;\n}\n\n// ============================================================================\n// Global Options Types\n// ============================================================================\n\nexport interface GlobalOptions {\n cwd?: string;\n config?: string;\n json?: boolean;\n verbose?: boolean;\n quiet?: boolean;\n noColor?: boolean;\n dryRun?: boolean;\n yes?: boolean;\n profile?: boolean;\n}\n\n// ============================================================================\n// Init Command Types\n// ============================================================================\n\nexport interface InitOptions {\n stack: 'react' | 'vanilla';\n name: string;\n ts?: boolean;\n js?: boolean;\n pm?: 'pnpm' | 'npm' | 'yarn';\n noTest?: boolean;\n router?: boolean;\n}\n\n// ============================================================================\n// Check Command Types\n// ============================================================================\n\nexport interface CheckResult {\n status: 'ok' | 'error';\n steps: CheckStep[];\n summary: {\n total: number;\n passed: number;\n failed: number;\n skipped: number;\n duration: number;\n };\n}\n\nexport interface CheckStep {\n name: string;\n status: 'ok' | 'error' | 'skipped';\n duration: number;\n message?: string;\n errors?: string[];\n}\n\n// ============================================================================\n// Doctor Command Types\n// ============================================================================\n\nexport interface DoctorResult {\n status: 'ok' | 'warning' | 'error';\n checks: DoctorCheck[];\n recommendations?: string[];\n}\n\nexport interface DoctorCheck {\n category: 'system' | 'project' | 'dependencies' | 'config' | 'env' | 'quality' | 'security';\n name: string;\n status: 'ok' | 'warning' | 'error';\n message: string;\n solution?: string;\n details?: any;\n}\n\n// ============================================================================\n// Env Command Types\n// ============================================================================\n\nexport interface EnvValidationResult {\n valid: boolean;\n missing: string[];\n invalid: string[];\n warnings: string[];\n}\n\n// ============================================================================\n// Plugin Hooks Types\n// ============================================================================\n\nexport type HookResult = void | Promise<void> | { skip?: boolean; modify?: unknown };\n\nexport type HookHandler = (...args: unknown[]) => HookResult;\n\nexport interface PluginHooks {\n // Lifecycle hooks\n 'plugin:loaded'?: HookHandler;\n 'plugin:unloaded'?: HookHandler;\n\n // Init hooks\n 'init:before'?: HookHandler;\n 'init:after'?: HookHandler;\n\n // Build hooks\n 'build:before'?: HookHandler;\n 'build:after'?: HookHandler;\n 'build:error'?: HookHandler;\n\n // Dev hooks\n 'dev:before'?: HookHandler;\n 'dev:after'?: HookHandler;\n 'dev:ready'?: HookHandler;\n\n // Test hooks\n 'test:before'?: HookHandler;\n 'test:after'?: HookHandler;\n 'test:error'?: HookHandler;\n\n // Lint hooks\n 'lint:before'?: HookHandler;\n 'lint:after'?: HookHandler;\n\n // Format hooks\n 'format:before'?: HookHandler;\n 'format:after'?: HookHandler;\n\n // Check hooks\n 'check:before'?: HookHandler;\n 'check:after'?: HookHandler;\n\n // Doctor hooks\n 'doctor:before'?: HookHandler;\n 'doctor:after'?: HookHandler;\n\n // Add feature hooks\n 'add:before'?: HookHandler;\n 'add:after'?: HookHandler;\n\n // Generate hooks\n 'generate:before'?: HookHandler;\n 'generate:after'?: HookHandler;\n\n // Config hooks\n 'config:loaded'?: HookHandler;\n 'config:validated'?: HookHandler;\n\n // File hooks\n 'file:created'?: HookHandler;\n 'file:modified'?: HookHandler;\n 'file:deleted'?: HookHandler;\n\n // Task hooks\n 'task:before'?: HookHandler;\n 'task:after'?: HookHandler;\n 'task:error'?: HookHandler;\n\n // Custom hooks (plugins can define their own)\n [key: string]: HookHandler | undefined;\n}\n\nexport interface PluginHookContext {\n hookName: string;\n args: any[];\n ctx: PluginContext;\n}\n\nexport interface HookManager {\n register(\n hookName: string,\n handler: HookHandler,\n priorityOrPluginName?: number | string,\n pluginName?: string\n ): void;\n unregister(hookName: string, handler: HookHandler): void;\n trigger(hookName: string, ...args: unknown[]): Promise<void>;\n has(hookName: string): boolean;\n list(): string[];\n}\n\n// ============================================================================\n// Recipe System Types\n// ============================================================================\n\n/**\n * Recipe Step Types\n */\nexport type RecipeStepType =\n | 'command' // Execute CLI command\n | 'shell' // Execute shell command\n | 'file' // File operations\n | 'template' // Process template\n | 'prompt' // Interactive prompt\n | 'condition' // Conditional execution\n | 'loop' // Loop over items\n | 'parallel' // Parallel execution\n | 'plugin' // Execute plugin\n | 'recipe'; // Execute sub-recipe\n\n/**\n * Recipe Step Status\n */\nexport type RecipeStepStatus =\n | 'pending'\n | 'running'\n | 'completed'\n | 'failed'\n | 'skipped'\n | 'rolled-back';\n\n/**\n * File Operation Types\n */\nexport type FileOperationType = 'create' | 'update' | 'delete' | 'copy' | 'move' | 'append';\n\n/**\n * Recipe Step - Base interface\n */\nexport interface RecipeStep {\n id: string;\n name: string;\n description?: string;\n type: RecipeStepType;\n condition?: string | ((ctx: RecipeContext) => boolean | Promise<boolean>);\n continueOnError?: boolean;\n rollback?: RecipeRollbackAction;\n timeout?: number;\n retry?: {\n attempts: number;\n delay: number;\n };\n}\n\n/**\n * Command Step - Execute CLI command\n */\nexport interface RecipeCommandStep extends RecipeStep {\n type: 'command';\n command: string;\n args?: Record<string, unknown>;\n}\n\n/**\n * Shell Step - Execute shell command\n */\nexport interface RecipeShellStep extends RecipeStep {\n type: 'shell';\n script: string;\n env?: Record<string, string>;\n cwd?: string;\n}\n\n/**\n * File Step - File operations\n */\nexport interface RecipeFileStep extends RecipeStep {\n type: 'file';\n operation: FileOperationType;\n source?: string;\n target: string;\n content?: string;\n template?: string;\n variables?: Record<string, unknown>;\n}\n\n/**\n * Template Step - Process template\n */\nexport interface RecipeTemplateStep extends RecipeStep {\n type: 'template';\n source: string;\n target: string;\n variables?: Record<string, unknown>;\n}\n\n/**\n * Prompt Step - Interactive prompt\n */\nexport interface RecipePromptStep extends RecipeStep {\n type: 'prompt';\n prompts: Array<{\n name: string;\n type: 'text' | 'confirm' | 'select' | 'multiselect';\n message: string;\n default?: unknown;\n choices?: Array<{ label: string; value: unknown }>;\n validate?: (value: unknown) => boolean | string;\n }>;\n saveAs?: string;\n}\n\n/**\n * Condition Step - Conditional execution\n */\nexport interface RecipeConditionStep extends RecipeStep {\n type: 'condition';\n if: string | ((ctx: RecipeContext) => boolean | Promise<boolean>);\n then: RecipeStep[];\n else?: RecipeStep[];\n}\n\n/**\n * Loop Step - Loop over items\n */\nexport interface RecipeLoopStep extends RecipeStep {\n type: 'loop';\n items: unknown[] | string;\n itemName: string;\n steps: RecipeStep[];\n}\n\n/**\n * Parallel Step - Execute steps in parallel\n */\nexport interface RecipeParallelStep extends RecipeStep {\n type: 'parallel';\n steps: RecipeStep[];\n maxConcurrency?: number;\n}\n\n/**\n * Plugin Step - Execute plugin\n */\nexport interface RecipePluginStep extends RecipeStep {\n type: 'plugin';\n plugin: string;\n action: string;\n args?: Record<string, unknown>;\n}\n\n/**\n * Recipe Step - Execute sub-recipe\n */\nexport interface RecipeRecipeStep extends RecipeStep {\n type: 'recipe';\n recipe: string;\n variables?: Record<string, unknown>;\n}\n\n/**\n * Union type for all step types\n */\nexport type RecipeStepUnion =\n | RecipeCommandStep\n | RecipeShellStep\n | RecipeFileStep\n | RecipeTemplateStep\n | RecipePromptStep\n | RecipeConditionStep\n | RecipeLoopStep\n | RecipeParallelStep\n | RecipePluginStep\n | RecipeRecipeStep;\n\n/**\n * Rollback Action\n */\nexport interface RecipeRollbackAction {\n type: 'command' | 'shell' | 'file' | 'custom';\n action: string | ((ctx: RecipeContext) => Promise<void>);\n args?: Record<string, unknown>;\n}\n\n/**\n * Recipe Definition\n */\nexport interface Recipe {\n name: string;\n version: string;\n description: string;\n author?: string;\n tags?: string[];\n category?: 'setup' | 'feature' | 'tooling' | 'deployment' | 'maintenance';\n\n // Requirements\n requires?: {\n kubitVersion?: string;\n nodeVersion?: string;\n plugins?: string[];\n tools?: string[];\n };\n\n // Variables\n variables?: Record<\n string,\n {\n type: 'string' | 'number' | 'boolean' | 'array' | 'object';\n description?: string;\n default?: unknown;\n required?: boolean;\n validate?: string | ((value: unknown) => boolean | string);\n }\n >;\n\n // Steps\n steps: RecipeStepUnion[];\n\n // Hooks\n hooks?: {\n beforeRecipe?: (ctx: RecipeContext) => Promise<void> | void;\n afterRecipe?: (ctx: RecipeContext, result: RecipeResult) => Promise<void> | void;\n onError?: (ctx: RecipeContext, error: Error) => Promise<void> | void;\n onRollback?: (ctx: RecipeContext) => Promise<void> | void;\n };\n}\n\n/**\n * Recipe Context\n */\nexport interface RecipeContext extends PluginContext {\n recipe: Recipe;\n variables: Record<string, unknown>;\n state: Record<string, unknown>;\n results: Map<string, RecipeStepResult>;\n rollbackStack: Array<() => Promise<void>>;\n}\n\n/**\n * Recipe Step Result\n */\nexport interface RecipeStepResult {\n stepId: string;\n status: RecipeStepStatus;\n startTime: Date;\n endTime?: Date;\n duration?: number;\n output?: unknown;\n error?: Error;\n}\n\n/**\n * Recipe Result\n */\nexport interface RecipeResult {\n status: 'ok' | 'error' | 'partial';\n message: string;\n steps: RecipeStepResult[];\n totalDuration: number;\n completedSteps: number;\n failedSteps: number;\n skippedSteps: number;\n rolledBack: boolean;\n}\n\n/**\n * Recipe Registry Info\n */\nexport interface RecipeInfo {\n name: string;\n version: string;\n description: string;\n author: string;\n category: 'setup' | 'feature' | 'tooling' | 'deployment' | 'maintenance';\n tags: string[];\n verified: boolean;\n downloads?: number;\n updated?: string;\n requires?: {\n kubitVersion?: string;\n nodeVersion?: string;\n plugins?: string[];\n };\n}\n\n// ============================================================================\n// Feature System Types\n// ============================================================================\n\n/**\n * Feature Category\n */\nexport type FeatureCategory =\n | 'quality' // Linting, formatting, testing\n | 'tooling' // Development tools\n | 'routing' // Routing solutions\n | 'state' // State management\n | 'ui' // UI libraries\n | 'git' // Git hooks and workflows\n | 'deployment' // Deployment tools\n | 'documentation'; // Documentation tools\n\n/**\n * Feature Status\n */\nexport type FeatureStatus = 'not-installed' | 'installed' | 'configured' | 'outdated';\n\n/**\n * Config Merge Strategy\n */\nexport type ConfigMergeStrategy = 'merge' | 'replace' | 'append' | 'skip';\n\n/**\n * Feature Definition\n */\nexport interface Feature {\n name: string;\n version: string;\n description: string;\n category: FeatureCategory;\n tags?: string[];\n\n // Requirements\n requires?: {\n nodeVersion?: string;\n packageManager?: 'pnpm' | 'npm' | 'yarn';\n dependencies?: string[];\n };\n\n // Conflicts\n conflicts?: string[];\n\n // Installation\n dependencies?: string[];\n devDependencies?: string[];\n peerDependencies?: string[];\n\n // Configuration files\n configFiles?: FeatureConfigFile[];\n\n // Scripts to add to package.json\n scripts?: Record<string, string>;\n\n // Post-install instructions\n instructions?: string;\n\n // Lifecycle hooks\n hooks?: {\n beforeInstall?: (ctx: FeatureContext) => Promise<void> | void;\n afterInstall?: (ctx: FeatureContext) => Promise<void> | void;\n beforeConfigure?: (ctx: FeatureContext) => Promise<void> | void;\n afterConfigure?: (ctx: FeatureContext) => Promise<void> | void;\n };\n}\n\n/**\n * Feature Config File\n */\nexport interface FeatureConfigFile {\n path: string;\n content: string | Record<string, unknown>;\n mergeStrategy?: ConfigMergeStrategy;\n backup?: boolean;\n}\n\n/**\n * Feature Context\n */\nexport interface FeatureContext extends PluginContext {\n feature: Feature;\n projectType: 'react' | 'vanilla' | 'unknown';\n packageManager: 'pnpm' | 'npm' | 'yarn';\n existingConfig: Map<string, unknown>;\n dryRun?: boolean;\n}\n\n/**\n * Feature Detection Result\n */\nexport interface FeatureDetectionResult {\n name: string;\n status: FeatureStatus;\n version?: string;\n configFiles: string[];\n issues?: string[];\n}\n\n/**\n * Feature Installation Result\n */\nexport interface FeatureInstallResult {\n success: boolean;\n feature: string;\n filesCreated: string[];\n filesModified: string[];\n scriptsAdded: string[];\n dependenciesInstalled: string[];\n rollbackAvailable: boolean;\n instructions?: string;\n errors?: string[];\n}\n\n/**\n * Feature Rollback Info\n */\nexport interface FeatureRollbackInfo {\n feature: string;\n timestamp: Date;\n filesCreated: string[];\n filesModified: Array<{ path: string; backup: string }>;\n scriptsAdded: string[];\n dependenciesInstalled: string[];\n}\n","import chalk from 'chalk';\n\nimport type { Logger } from '../types/index.js';\n\nimport { colors, symbols } from './theme.js';\n\nexport class ConsoleLogger implements Logger {\n private useColor: boolean;\n private isVerbose: boolean;\n private isQuiet: boolean;\n private useJson: boolean;\n\n constructor(\n options: {\n noColor?: boolean;\n verbose?: boolean;\n quiet?: boolean;\n json?: boolean;\n } = {}\n ) {\n this.useColor = !options.noColor;\n this.isVerbose = options.verbose || false;\n this.isQuiet = options.quiet || false;\n this.useJson = options.json || false;\n }\n\n info(message: string): void {\n if (this.isQuiet) {\n return;\n }\n if (this.useJson) {\n console.log(JSON.stringify({ level: 'info', message }));\n return;\n }\n console.log(this.useColor ? colors.info(symbols.info) : 'i', message);\n }\n\n success(message: string): void {\n if (this.isQuiet) {\n return;\n }\n if (this.useJson) {\n console.log(JSON.stringify({ level: 'success', message }));\n return;\n }\n console.log(this.useColor ? colors.success(symbols.success) : symbols.success, message);\n }\n\n warn(message: string): void {\n if (this.useJson) {\n console.log(JSON.stringify({ level: 'warning', message }));\n return;\n }\n console.warn(this.useColor ? colors.warning(symbols.warning) : symbols.warning, message);\n }\n\n error(message: string, error?: Error): void {\n if (this.useJson) {\n console.log(\n JSON.stringify({\n error: error?.message,\n level: 'error',\n message,\n stack: error?.stack,\n })\n );\n return;\n }\n console.error(this.useColor ? colors.error(symbols.error) : symbols.error, message);\n if (error && this.isVerbose) {\n console.error(chalk.gray(error.stack || error.message));\n }\n }\n\n debug(message: string): void {\n if (!this.isVerbose) {\n return;\n }\n if (this.useJson) {\n console.log(JSON.stringify({ level: 'debug', message }));\n return;\n }\n console.log(this.useColor ? colors.muted(symbols.pointer) : symbols.pointer, message);\n }\n\n step(message: string): void {\n if (this.isQuiet) {\n return;\n }\n if (this.useJson) {\n console.log(JSON.stringify({ level: 'step', message }));\n return;\n }\n console.log(this.useColor ? colors.primary(symbols.step) : symbols.step, message);\n }\n\n json(data: any): void {\n console.log(JSON.stringify(data, null, 2));\n }\n}\n","import { execa } from 'execa';\n\nimport type { TaskRunner, TaskResult, RunOptions, Logger } from '../types/index.js';\n\nexport class DefaultTaskRunner implements TaskRunner {\n private tasks: Map<string, () => Promise<TaskResult>> = new Map();\n private logger: Logger;\n\n constructor(logger: Logger) {\n this.logger = logger;\n }\n\n registerTask(name: string, task: () => Promise<TaskResult>): void {\n this.tasks.set(name, task);\n }\n\n async run(command: string, args: string[] = [], options: RunOptions = {}): Promise<TaskResult> {\n const startTime = Date.now();\n const cwd = options.cwd || process.cwd();\n\n try {\n if (!options.silent) {\n this.logger.debug(`Running: ${command} ${args.join(' ')}`);\n }\n\n const result = await execa(command, args, {\n all: true,\n cwd,\n env: { ...process.env, ...options.env },\n reject: false,\n });\n\n const duration = Date.now() - startTime;\n\n if (result.exitCode === 0) {\n return {\n duration,\n exitCode: result.exitCode,\n output: options.captureOutput ? result.all : undefined,\n status: 'ok',\n };\n }\n return {\n duration,\n exitCode: result.exitCode,\n message: `Command failed with exit code ${result.exitCode}`,\n output: result.all,\n status: 'error',\n };\n } catch (error) {\n const duration = Date.now() - startTime;\n return {\n duration,\n message: error instanceof Error ? error.message : 'Unknown error',\n status: 'error',\n };\n }\n }\n\n async runTask(taskName: string): Promise<TaskResult> {\n const task = this.tasks.get(taskName);\n if (!task) {\n return {\n message: `Task '${taskName}' not found`,\n status: 'error',\n };\n }\n\n return await task();\n }\n}\n","/**\n * Assets Optimization Commands\n * Optimize images, fonts, compress assets, and sync with CDN\n */\n\nimport { existsSync, readdirSync, statSync } from 'fs';\nimport { join, extname, basename } from 'path';\n\nimport type { CommandResult, PluginContext } from '../types/index.js';\n\n// ============================================================================\n// TYPES\n// ============================================================================\n\nexport interface AssetsOptimizeOptions {\n path?: string;\n types?: string[];\n quality?: number;\n recursive?: boolean;\n dryRun?: boolean;\n}\n\nexport interface AssetsCompressOptions {\n path?: string;\n algorithm?: 'gzip' | 'brotli' | 'both';\n level?: number;\n extensions?: string[];\n}\n\nexport interface AssetsCdnSyncOptions {\n provider?: 'cloudflare' | 'aws' | 'azure' | 'custom';\n bucket?: string;\n region?: string;\n path?: string;\n dryRun?: boolean;\n invalidate?: boolean;\n}\n\ninterface AssetFile {\n path: string;\n name: string;\n size: number;\n type: string;\n optimized?: boolean;\n originalSize?: number;\n newSize?: number;\n savings?: number;\n}\n\n// ============================================================================\n// ASSETS:OPTIMIZE COMMAND\n// ============================================================================\n\nexport async function assetsOptimizeCommand(\n ctx: PluginContext,\n options: AssetsOptimizeOptions\n): Promise<CommandResult> {\n const startTime = Date.now();\n\n ctx.logger.info('🎨 Asset Optimization');\n ctx.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n');\n\n const assetsPath = options.path || join(ctx.cwd, 'public', 'assets');\n const types = options.types || ['images', 'fonts', 'icons'];\n const quality = options.quality || 85;\n const recursive = options.recursive !== false;\n\n if (!existsSync(assetsPath)) {\n ctx.logger.warn(`Assets path not found: ${assetsPath}`);\n ctx.logger.info('Creating default assets structure...\\n');\n // In real implementation, create directory structure\n }\n\n ctx.logger.info(`📁 Scanning: ${assetsPath}`);\n ctx.logger.info(`🎯 Types: ${types.join(', ')}`);\n ctx.logger.info(`⚙️ Quality: ${quality}%`);\n ctx.logger.info(`🔄 Recursive: ${recursive ? 'Yes' : 'No'}\\n`);\n\n if (options.dryRun) {\n ctx.logger.warn('🔍 DRY RUN MODE - No files will be modified\\n');\n }\n\n // Scan and optimize assets\n const assets = scanAssets(assetsPath, types, recursive);\n const results = await optimizeAssets(ctx, assets, quality, options.dryRun || false);\n\n // Display results\n displayOptimizationResults(ctx, results);\n\n const duration = Date.now() - startTime;\n\n ctx.logger.success(`\\n✓ Asset optimization completed in ${duration}ms`);\n\n return {\n data: {\n duration,\n optimized: results.filter((r) => r.optimized).length,\n totalFiles: results.length,\n totalSavings: results.reduce((sum, r) => sum + (r.savings || 0), 0),\n },\n message: 'Assets optimized successfully',\n status: 'ok',\n };\n}\n\n// ============================================================================\n// ASSETS:COMPRESS COMMAND\n// ============================================================================\n\nexport async function assetsCompressCommand(\n ctx: PluginContext,\n options: AssetsCompressOptions\n): Promise<CommandResult> {\n const startTime = Date.now();\n\n ctx.logger.info('📦 Asset Compression');\n ctx.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n');\n\n const assetsPath = options.path || join(ctx.cwd, 'dist');\n const algorithm = options.algorithm || 'both';\n const level = options.level || 9;\n const extensions = options.extensions || ['.js', '.css', '.html', '.svg', '.json'];\n\n ctx.logger.info(`📁 Path: ${assetsPath}`);\n ctx.logger.info(`🗜️ Algorithm: ${algorithm}`);\n ctx.logger.info(`📊 Level: ${level}`);\n ctx.logger.info(`📄 Extensions: ${extensions.join(', ')}\\n`);\n\n if (!existsSync(assetsPath)) {\n return {\n message: `Path not found: ${assetsPath}`,\n status: 'error',\n };\n }\n\n // Scan files to compress\n const files = scanFilesForCompression(assetsPath, extensions);\n ctx.logger.info(`Found ${files.length} files to compress\\n`);\n\n // Compress files\n const results = await compressFiles(ctx, files, algorithm, level);\n\n // Display results\n displayCompressionResults(ctx, results);\n\n const duration = Date.now() - startTime;\n\n ctx.logger.success(`\\n✓ Compression completed in ${duration}ms`);\n\n return {\n data: {\n compressed: results.filter((r) => r.optimized).length,\n duration,\n totalFiles: results.length,\n totalSavings: results.reduce((sum, r) => sum + (r.savings || 0), 0),\n },\n message: 'Assets compressed successfully',\n status: 'ok',\n };\n}\n\n// ============================================================================\n// ASSETS:CDN:SYNC COMMAND\n// ============================================================================\n\nexport async function assetsCdnSyncCommand(\n ctx: PluginContext,\n options: AssetsCdnSyncOptions\n): Promise<CommandResult> {\n const startTime = Date.now();\n\n ctx.logger.info('☁️ CDN Sync');\n ctx.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n');\n\n const provider = options.provider || 'cloudflare';\n const bucket = options.bucket || 'assets';\n const region = options.region || 'auto';\n const assetsPath = options.path || join(ctx.cwd, 'dist', 'assets');\n\n ctx.logger.info(`☁️ Provider: ${provider}`);\n ctx.logger.info(`🪣 Bucket: ${bucket}`);\n ctx.logger.info(`🌍 Region: ${region}`);\n ctx.logger.info(`📁 Path: ${assetsPath}\\n`);\n\n if (options.dryRun) {\n ctx.logger.warn('🔍 DRY RUN MODE - No files will be uploaded\\n');\n }\n\n if (!existsSync(assetsPath)) {\n return {\n message: `Assets path not found: ${assetsPath}`,\n status: 'error',\n };\n }\n\n // Check CDN credentials\n const credentials = checkCdnCredentials(ctx, provider);\n if (!credentials.valid) {\n ctx.logger.error('❌ CDN credentials not configured');\n ctx.logger.info('\\nSet up credentials:');\n ctx.logger.info(` export ${provider.toUpperCase()}_API_KEY=your_key`);\n ctx.logger.info(` export ${provider.toUpperCase()}_API_SECRET=your_secret\\n`);\n\n return {\n message: 'CDN credentials not configured',\n status: 'error',\n };\n }\n\n // Scan files to sync\n const files = scanFilesForSync(assetsPath);\n ctx.logger.info(`Found ${files.length} files to sync\\n`);\n\n // Sync to CDN\n const results = await syncToCdn(ctx, files, provider, bucket, options.dryRun || false);\n\n // Display results\n displaySyncResults(ctx, results);\n\n // Invalidate cache if requested\n if (options.invalidate && !options.dryRun) {\n ctx.logger.info('\\n🔄 Invalidating CDN cache...');\n await invalidateCdnCache(ctx, provider, bucket);\n ctx.logger.success('✓ Cache invalidated');\n }\n\n const duration = Date.now() - startTime;\n\n ctx.logger.success(`\\n✓ CDN sync completed in ${duration}ms`);\n\n return {\n data: {\n bucket,\n duration,\n provider,\n totalFiles: results.length,\n uploaded: results.filter((r) => r.optimized).length,\n },\n message: 'Assets synced to CDN successfully',\n status: 'ok',\n };\n}\n\n// ============================================================================\n// HELPER FUNCTIONS\n// ============================================================================\n\nfunction scanAssets(path: string, types: string[], recursive: boolean): AssetFile[] {\n const assets: AssetFile[] = [];\n\n if (!existsSync(path)) {\n return assets;\n }\n\n const imageExtensions = ['.jpg', '.jpeg', '.png', '.gif', '.webp', '.svg', '.ico'];\n const fontExtensions = ['.woff', '.woff2', '.ttf', '.otf', '.eot'];\n const iconExtensions = ['.svg', '.ico'];\n\n const allowedExtensions = new Set<string>();\n if (types.includes('images')) {\n imageExtensions.forEach((ext) => allowedExtensions.add(ext));\n }\n if (types.includes('fonts')) {\n fontExtensions.forEach((ext) => allowedExtensions.add(ext));\n }\n if (types.includes('icons')) {\n iconExtensions.forEach((ext) => allowedExtensions.add(ext));\n }\n\n function scan(dir: string): void {\n try {\n const entries = readdirSync(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n\n if (stat.isDirectory() && recursive) {\n scan(fullPath);\n } else if (stat.isFile()) {\n const ext = extname(entry).toLowerCase();\n if (allowedExtensions.has(ext)) {\n assets.push({\n name: basename(entry),\n path: fullPath,\n size: stat.size,\n type: ext.slice(1),\n });\n }\n }\n }\n } catch {\n // Skip directories we can't read\n }\n }\n\n scan(path);\n return assets;\n}\n\nasync function optimizeAssets(\n ctx: PluginContext,\n assets: AssetFile[],\n _quality: number,\n dryRun: boolean\n): Promise<AssetFile[]> {\n const results: AssetFile[] = [];\n\n for (const asset of assets) {\n ctx.logger.info(`Optimizing: ${asset.name}`);\n\n // Simulate optimization (in real implementation, use sharp, imagemin, etc.)\n const originalSize = asset.size;\n const optimizationRatio = 0.6 + Math.random() * 0.2; // 60-80% of original\n const newSize = Math.floor(originalSize * optimizationRatio);\n const savings = originalSize - newSize;\n\n if (!dryRun) {\n // In real implementation: optimize the file\n // await sharp(asset.path).jpeg({ quality }).toFile(asset.path);\n }\n\n results.push({\n ...asset,\n newSize,\n optimized: true,\n originalSize,\n savings,\n });\n }\n\n return results;\n}\n\nfunction displayOptimizationResults(ctx: PluginContext, results: AssetFile[]): void {\n ctx.logger.info('\\n📊 Optimization Results:');\n ctx.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n');\n\n const totalOriginal = results.reduce((sum, r) => sum + (r.originalSize || 0), 0);\n const totalNew = results.reduce((sum, r) => sum + (r.newSize || 0), 0);\n const totalSavings = totalOriginal - totalNew;\n const savingsPercent = ((totalSavings / totalOriginal) * 100).toFixed(1);\n\n ctx.logger.info(`Files processed: ${results.length}`);\n ctx.logger.info(`Original size: ${formatBytes(totalOriginal)}`);\n ctx.logger.info(`Optimized size: ${formatBytes(totalNew)}`);\n ctx.logger.info(`Savings: ${formatBytes(totalSavings)} (${savingsPercent}%)`);\n}\n\nfunction scanFilesForCompression(path: string, extensions: string[]): AssetFile[] {\n const files: AssetFile[] = [];\n\n function scan(dir: string): void {\n try {\n const entries = readdirSync(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n\n if (stat.isDirectory()) {\n scan(fullPath);\n } else if (stat.isFile()) {\n const ext = extname(entry).toLowerCase();\n if (extensions.includes(ext)) {\n files.push({\n name: basename(entry),\n path: fullPath,\n size: stat.size,\n type: ext.slice(1),\n });\n }\n }\n }\n } catch {\n // Skip\n }\n }\n\n scan(path);\n return files;\n}\n\nasync function compressFiles(\n ctx: PluginContext,\n files: AssetFile[],\n algorithm: string,\n _level: number\n): Promise<AssetFile[]> {\n const results: AssetFile[] = [];\n\n for (const file of files) {\n ctx.logger.info(`Compressing: ${file.name}`);\n\n // Simulate compression\n const originalSize = file.size;\n const compressionRatio = 0.3 + Math.random() * 0.2; // 30-50% of original\n const newSize = Math.floor(originalSize * compressionRatio);\n const savings = originalSize - newSize;\n\n // In real implementation: use zlib for gzip/brotli\n if (algorithm === 'gzip' || algorithm === 'both') {\n // writeFileSync(`${file.path}.gz`, compressed);\n }\n if (algorithm === 'brotli' || algorithm === 'both') {\n // writeFileSync(`${file.path}.br`, compressed);\n }\n\n results.push({\n ...file,\n newSize,\n optimized: true,\n originalSize,\n savings,\n });\n }\n\n return results;\n}\n\nfunction displayCompressionResults(ctx: PluginContext, results: AssetFile[]): void {\n ctx.logger.info('\\n📊 Compression Results:');\n ctx.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n');\n\n const totalOriginal = results.reduce((sum, r) => sum + (r.originalSize || 0), 0);\n const totalNew = results.reduce((sum, r) => sum + (r.newSize || 0), 0);\n const totalSavings = totalOriginal - totalNew;\n const savingsPercent = ((totalSavings / totalOriginal) * 100).toFixed(1);\n\n ctx.logger.info(`Files compressed: ${results.length}`);\n ctx.logger.info(`Original size: ${formatBytes(totalOriginal)}`);\n ctx.logger.info(`Compressed size: ${formatBytes(totalNew)}`);\n ctx.logger.info(`Savings: ${formatBytes(totalSavings)} (${savingsPercent}%)`);\n}\n\nfunction scanFilesForSync(path: string): AssetFile[] {\n const files: AssetFile[] = [];\n\n function scan(dir: string): void {\n try {\n const entries = readdirSync(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n\n if (stat.isDirectory()) {\n scan(fullPath);\n } else if (stat.isFile()) {\n files.push({\n name: basename(entry),\n path: fullPath,\n size: stat.size,\n type: extname(entry).slice(1),\n });\n }\n }\n } catch {\n // Skip\n }\n }\n\n scan(path);\n return files;\n}\n\nfunction checkCdnCredentials(\n _ctx: PluginContext,\n provider: string\n): { valid: boolean; message?: string } {\n // Check environment variables for CDN credentials\n const apiKey = process.env[`${provider.toUpperCase()}_API_KEY`];\n const apiSecret = process.env[`${provider.toUpperCase()}_API_SECRET`];\n\n if (!apiKey || !apiSecret) {\n return { message: 'Missing credentials', valid: false };\n }\n\n return { valid: true };\n}\n\nasync function syncToCdn(\n ctx: PluginContext,\n files: AssetFile[],\n _provider: string,\n _bucket: string,\n dryRun: boolean\n): Promise<AssetFile[]> {\n const results: AssetFile[] = [];\n\n for (const file of files) {\n ctx.logger.info(`Uploading: ${file.name}`);\n\n if (!dryRun) {\n // In real implementation: upload to CDN\n // await cdnClient.upload(file.path, bucket);\n }\n\n results.push({\n ...file,\n optimized: true,\n });\n\n // Simulate upload delay\n await new Promise((resolve) => setTimeout(resolve, 100));\n }\n\n return results;\n}\n\nfunction displaySyncResults(ctx: PluginContext, results: AssetFile[]): void {\n ctx.logger.info('\\n📊 Sync Results:');\n ctx.logger.info('━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\\n');\n\n const totalSize = results.reduce((sum, r) => sum + r.size, 0);\n\n ctx.logger.info(`Files uploaded: ${results.length}`);\n ctx.logger.info(`Total size: ${formatBytes(totalSize)}`);\n}\n\nasync function invalidateCdnCache(\n _ctx: PluginContext,\n _provider: string,\n _bucket: string\n): Promise<void> {\n // In real implementation: invalidate CDN cache\n // await cdnClient.invalidate(bucket, ['/*']);\n await new Promise((resolve) => setTimeout(resolve, 500));\n}\n\nfunction formatBytes(bytes: number): string {\n if (bytes === 0) {\n return '0 B';\n }\n const k = 1024;\n const sizes = ['B', 'KB', 'MB', 'GB'];\n const i = Math.floor(Math.log(bytes) / Math.log(k));\n return `${(bytes / Math.pow(k, i)).toFixed(2)} ${sizes[i]}`;\n}\n","import { existsSync, readFileSync, statSync } from 'fs';\nimport { join } from 'path';\n\nimport type { CommandResult, PluginContext } from '../types/index.js';\n\nimport { MonorepoManager } from '../utils/monorepo-manager.js';\nimport { ProjectDetector } from '../utils/project-detector.js';\n\ninterface DependencyInfo {\n total: number;\n production: number;\n development: number;\n outdated: number;\n}\n\ninterface BuildInfo {\n hasDistFolder: boolean;\n distSize?: number;\n lastBuildTime?: Date;\n}\n\ninterface GitInfo {\n hasGit: boolean;\n branch?: string;\n uncommittedChanges?: number;\n}\n\nexport async function infoCommand(\n ctx: PluginContext,\n options: { detailed?: boolean; json?: boolean } = {}\n): Promise<CommandResult> {\n const detector = new ProjectDetector(ctx.cwd);\n const projectInfo = await detector.detect();\n\n // Collect dependency information\n const dependencies = await collectDependencyInfo(ctx.cwd);\n\n // Collect build information\n const buildInfo = await collectBuildInfo(ctx.cwd);\n\n // Collect git information\n const gitInfo = await collectGitInfo(ctx);\n\n // Collect monorepo information\n const monorepoManager = new MonorepoManager(ctx.logger, ctx.cwd);\n const monorepoInfo = await monorepoManager.getMonorepoInfo();\n\n const info = {\n build: buildInfo,\n dependencies,\n environment: {\n arch: process.arch,\n cwd: ctx.cwd,\n hasEnvExample: existsSync(join(ctx.cwd, ctx.config.paths?.envExample || '.env.example')),\n hasEnvLocal: existsSync(join(ctx.cwd, ctx.config.paths?.envLocal || '.env.local')),\n node: process.version,\n platform: process.platform,\n },\n git: gitInfo,\n health: calculateHealthScore(dependencies, buildInfo),\n monorepo: monorepoInfo\n ? {\n isMonorepo: true,\n packages: monorepoInfo.packages.length,\n tool: monorepoInfo.tool,\n workspaces: monorepoInfo.workspaces,\n }\n : { isMonorepo: false },\n paths: ctx.config.paths,\n plugins: {\n enabled: ctx.config.plugins?.enabled || [],\n },\n project: {\n bundler: projectInfo.bundler,\n devPort: ctx.config.project.devPort,\n isMonorepo: projectInfo.isMonorepo,\n language: ctx.config.project.language,\n monorepoTool: projectInfo.monorepoTool,\n name: ctx.config.project.name,\n nodeVersion: ctx.config.project.nodeVersion,\n packageManager: ctx.config.project.packageManager,\n stack: ctx.config.project.stack,\n type: ctx.config.project.type,\n },\n quality: ctx.config.quality,\n };\n\n // Display info\n if (options.json) {\n ctx.logger.json(info);\n } else {\n displayProjectInfo(ctx, info, options.detailed || false);\n }\n\n return {\n data: info,\n message: 'Project information',\n status: 'ok',\n };\n}\n\nasync function collectDependencyInfo(cwd: string): Promise<DependencyInfo> {\n const packageJsonPath = join(cwd, 'package.json');\n\n if (!existsSync(packageJsonPath)) {\n return { development: 0, outdated: 0, production: 0, total: 0 };\n }\n\n const pkg = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n const production = Object.keys(pkg.dependencies || {}).length;\n const development = Object.keys(pkg.devDependencies || {}).length;\n\n return {\n development,\n outdated: 0, // Would require npm outdated check\n production,\n total: production + development,\n };\n}\n\nasync function collectBuildInfo(cwd: string): Promise<BuildInfo> {\n const distPath = join(cwd, 'dist');\n\n if (!existsSync(distPath)) {\n return { hasDistFolder: false };\n }\n\n try {\n const stats = statSync(distPath);\n return {\n distSize: 0, // Would require recursive directory size calculation\n hasDistFolder: true,\n lastBuildTime: stats.mtime,\n };\n } catch {\n return { hasDistFolder: false };\n }\n}\n\nasync function collectGitInfo(ctx: PluginContext): Promise<GitInfo> {\n const gitPath = join(ctx.cwd, '.git');\n\n if (!existsSync(gitPath)) {\n return { hasGit: false };\n }\n\n try {\n // Get current branch\n const branchResult = await ctx.runner.run('git', ['branch', '--show-current'], {\n silent: true,\n });\n const branch = branchResult.status === 'ok' ? branchResult.output?.trim() : undefined;\n\n // Get uncommitted changes\n const statusResult = await ctx.runner.run('git', ['status', '--porcelain'], { silent: true });\n const uncommittedChanges =\n statusResult.status === 'ok' ? (statusResult.output?.split('\\n').length || 0) - 1 : 0;\n\n return {\n branch,\n hasGit: true,\n uncommittedChanges,\n };\n } catch {\n return { hasGit: true };\n }\n}\n\nfunction calculateHealthScore(dependencies: DependencyInfo, buildInfo: BuildInfo): number {\n let score = 100;\n\n // Penalize for too many dependencies\n if (dependencies.total > 100) {\n score -= 10;\n }\n if (dependencies.total > 200) {\n score -= 20;\n }\n\n // Penalize for outdated dependencies\n if (dependencies.outdated > 10) {\n score -= 15;\n }\n\n // Bonus for having a build\n if (buildInfo.hasDistFolder) {\n score += 5;\n }\n\n return Math.max(0, Math.min(100, score));\n}\n\nfunction displayProjectInfo(ctx: PluginContext, info: any, detailed: boolean): void {\n ctx.logger.info('');\n ctx.logger.info('═'.repeat(60));\n ctx.logger.info('Project Information');\n ctx.logger.info('═'.repeat(60));\n ctx.logger.info('');\n\n // Project basics\n ctx.logger.info('Project:');\n ctx.logger.info(` Name: ${info.project.name}`);\n ctx.logger.info(` Stack: ${info.project.stack}`);\n ctx.logger.info(` Language: ${info.project.language}`);\n ctx.logger.info(` Package Manager: ${info.project.packageManager}`);\n ctx.logger.info(` Bundler: ${info.project.bundler || 'N/A'}`);\n ctx.logger.info('');\n\n // Environment\n ctx.logger.info('Environment:');\n ctx.logger.info(` Node: ${info.environment.node} (required: >=${info.project.nodeVersion})`);\n ctx.logger.info(` Platform: ${info.environment.platform}`);\n ctx.logger.info(` Architecture: ${info.environment.arch}`);\n ctx.logger.info('');\n\n // Dependencies\n ctx.logger.info('Dependencies:');\n ctx.logger.info(` Total: ${info.dependencies.total}`);\n ctx.logger.info(` Production: ${info.dependencies.production}`);\n ctx.logger.info(` Development: ${info.dependencies.development}`);\n if (info.dependencies.outdated > 0) {\n ctx.logger.warn(` Outdated: ${info.dependencies.outdated}`);\n }\n ctx.logger.info('');\n\n // Git\n if (info.git.hasGit) {\n ctx.logger.info('Git:');\n if (info.git.branch) {\n ctx.logger.info(` Branch: ${info.git.branch}`);\n }\n if (info.git.uncommittedChanges !== undefined) {\n const status =\n info.git.uncommittedChanges === 0 ? 'Clean' : `${info.git.uncommittedChanges} changes`;\n ctx.logger.info(` Status: ${status}`);\n }\n ctx.logger.info('');\n }\n\n // Build\n if (info.build.hasDistFolder) {\n ctx.logger.info('Build:');\n ctx.logger.info(' Status: Built');\n if (info.build.lastBuildTime) {\n ctx.logger.info(` Last Build: ${new Date(info.build.lastBuildTime).toLocaleString()}`);\n }\n ctx.logger.info('');\n }\n\n // Health score\n const healthIcon = info.health >= 80 ? '✔' : info.health >= 60 ? '⚠' : '✖';\n ctx.logger.info(`Health Score: ${healthIcon} ${info.health}/100`);\n ctx.logger.info('');\n\n // Detailed information\n if (detailed) {\n ctx.logger.info('Quality Settings:');\n ctx.logger.info(` Format: ${info.quality?.format ? 'Enabled' : 'Disabled'}`);\n ctx.logger.info(` Lint: ${info.quality?.lint ? 'Enabled' : 'Disabled'}`);\n ctx.logger.info(` Typecheck: ${info.quality?.typecheck ? 'Enabled' : 'Disabled'}`);\n ctx.logger.info(` Unit Tests: ${info.quality?.unitTest ? 'Enabled' : 'Disabled'}`);\n ctx.logger.info('');\n\n if (info.plugins.enabled.length > 0) {\n ctx.logger.info('Plugins:');\n for (const plugin of info.plugins.enabled) {\n ctx.logger.info(` - ${plugin}`);\n }\n ctx.logger.info('');\n }\n\n ctx.logger.info('Paths:');\n ctx.logger.info(` Source: ${info.paths?.src || 'src'}`);\n ctx.logger.info(` Output: ${info.paths?.dist || 'dist'}`);\n ctx.logger.info(` Public: ${info.paths?.public || 'public'}`);\n ctx.logger.info('');\n }\n\n ctx.logger.info('═'.repeat(60));\n}\n","import { execSync } from 'child_process';\nimport { existsSync } from 'fs';\nimport { join } from 'path';\n\nimport type { Logger } from '../types/index.js';\n\nexport interface ChangedFiles {\n all: string[];\n staged: string[];\n unstaged: string[];\n untracked: string[];\n}\n\nexport class ChangedDetector {\n private cwd: string;\n private logger: Logger;\n\n constructor(cwd: string, logger: Logger) {\n this.cwd = cwd;\n this.logger = logger;\n }\n\n /**\n * Check if directory is a git repository\n */\n isGitRepo(): boolean {\n return existsSync(join(this.cwd, '.git'));\n }\n\n /**\n * Get changed files since a reference (branch, commit, tag)\n */\n getChangedSince(ref: string = 'HEAD'): string[] {\n if (!this.isGitRepo()) {\n this.logger.debug('Not a git repository, cannot detect changes');\n return [];\n }\n\n try {\n const output = execSync(`git diff --name-only ${ref}`, {\n cwd: this.cwd,\n encoding: 'utf-8',\n });\n\n return output\n .split('\\n')\n .map((f) => f.trim())\n .filter(Boolean);\n } catch (error) {\n this.logger.debug(`Failed to get changed files: ${(error as Error).message}`);\n return [];\n }\n }\n\n /**\n * Get all changed files (staged, unstaged, untracked)\n */\n getAllChanged(): ChangedFiles {\n if (!this.isGitRepo()) {\n return { all: [], staged: [], unstaged: [], untracked: [] };\n }\n\n try {\n // Staged files\n const staged = execSync('git diff --cached --name-only', {\n cwd: this.cwd,\n encoding: 'utf-8',\n })\n .split('\\n')\n .map((f) => f.trim())\n .filter(Boolean);\n\n // Unstaged files\n const unstaged = execSync('git diff --name-only', {\n cwd: this.cwd,\n encoding: 'utf-8',\n })\n .split('\\n')\n .map((f) => f.trim())\n .filter(Boolean);\n\n // Untracked files\n const untracked = execSync('git ls-files --others --exclude-standard', {\n cwd: this.cwd,\n encoding: 'utf-8',\n })\n .split('\\n')\n .map((f) => f.trim())\n .filter(Boolean);\n\n const all = [...new Set([...staged, ...unstaged, ...untracked])];\n\n return { all, staged, unstaged, untracked };\n } catch (error) {\n this.logger.debug(`Failed to get changed files: ${(error as Error).message}`);\n return { all: [], staged: [], unstaged: [], untracked: [] };\n }\n }\n\n /**\n * Get changed files matching patterns\n */\n getChangedMatching(patterns: string[]): string[] {\n const changed = this.getAllChanged();\n\n return changed.all.filter((file) => {\n return patterns.some((pattern) => {\n // Simple glob matching\n const regex = new RegExp(\n pattern.replace(/\\./g, '\\\\.').replace(/\\*/g, '.*').replace(/\\?/g, '.')\n );\n return regex.test(file);\n });\n });\n }\n\n /**\n * Get changed TypeScript/JavaScript files\n */\n getChangedSourceFiles(): string[] {\n return this.getChangedMatching([\n '*.ts',\n '*.tsx',\n '*.js',\n '*.jsx',\n 'src/**/*.ts',\n 'src/**/*.tsx',\n 'src/**/*.js',\n 'src/**/*.jsx',\n ]);\n }\n\n /**\n * Get changed test files\n */\n getChangedTestFiles(): string[] {\n return this.getChangedMatching([\n '*.test.ts',\n '*.test.tsx',\n '*.test.js',\n '*.test.jsx',\n '*.spec.ts',\n '*.spec.tsx',\n '*.spec.js',\n '*.spec.jsx',\n '**/__tests__/**/*',\n ]);\n }\n\n /**\n * Check if specific files have changed\n */\n hasChanged(files: string[]): boolean {\n const changed = this.getAllChanged();\n return files.some((file) => changed.all.includes(file));\n }\n\n /**\n * Get files changed in last N commits\n */\n getChangedInLastCommits(count: number = 1): string[] {\n if (!this.isGitRepo()) {\n return [];\n }\n\n try {\n const output = execSync(`git diff --name-only HEAD~${count}`, {\n cwd: this.cwd,\n encoding: 'utf-8',\n });\n\n return output\n .split('\\n')\n .map((f) => f.trim())\n .filter(Boolean);\n } catch (error) {\n this.logger.debug(`Failed to get changed files: ${(error as Error).message}`);\n return [];\n }\n }\n\n /**\n * Get affected files by dependencies\n * (files that import changed files)\n */\n getAffectedFiles(changedFiles: string[]): string[] {\n // This is a simplified version\n // A full implementation would parse imports and build a dependency graph\n const affected = new Set(changedFiles);\n\n // For now, if any file in a directory changes, consider all files affected\n for (const file of changedFiles) {\n const dir = file.split('/').slice(0, -1).join('/');\n if (dir) {\n // Add files in same directory as potentially affected\n // In a real implementation, use proper import analysis\n affected.add(`${dir}/*`);\n }\n }\n\n return Array.from(affected);\n }\n\n /**\n * Get branch name\n */\n getCurrentBranch(): string | null {\n if (!this.isGitRepo()) {\n return null;\n }\n\n try {\n return execSync('git rev-parse --abbrev-ref HEAD', {\n cwd: this.cwd,\n encoding: 'utf-8',\n }).trim();\n } catch {\n return null;\n }\n }\n\n /**\n * Check if working directory is clean\n */\n isClean(): boolean {\n const changed = this.getAllChanged();\n return changed.all.length === 0;\n }\n}\n","import { createHash } from 'crypto';\nimport {\n existsSync,\n readFileSync,\n writeFileSync,\n mkdirSync,\n statSync,\n readdirSync,\n unlinkSync,\n} from 'fs';\nimport { join } from 'path';\n\nimport type { Logger } from '../types/index.js';\n\nexport interface CacheEntry {\n hash: string;\n timestamp: number;\n inputs: string[];\n outputs?: string[];\n success: boolean;\n duration: number;\n}\n\nexport interface CacheStats {\n totalEntries: number;\n totalSize: number;\n hits: number;\n misses: number;\n location: string;\n}\n\nexport class TaskCache {\n private cacheDir: string;\n private logger: Logger;\n private stats = {\n hits: 0,\n misses: 0,\n };\n\n constructor(cwd: string, logger: Logger) {\n this.cacheDir = join(cwd, 'node_modules', '.cache', 'kubit-forge');\n this.logger = logger;\n this.ensureCacheDir();\n }\n\n private ensureCacheDir(): void {\n if (!existsSync(this.cacheDir)) {\n mkdirSync(this.cacheDir, { recursive: true });\n }\n }\n\n /**\n * Generate hash for task inputs\n */\n private hashInputs(inputs: string[]): string {\n const hash = createHash('sha256');\n\n for (const input of inputs.sort()) {\n if (existsSync(input)) {\n const stat = statSync(input);\n if (stat.isFile()) {\n const content = readFileSync(input);\n hash.update(content);\n } else if (stat.isDirectory()) {\n // Hash directory structure and file mtimes\n hash.update(input);\n hash.update(stat.mtime.toISOString());\n }\n } else {\n // Input doesn't exist, include in hash\n hash.update(`missing:${input}`);\n }\n }\n\n return hash.digest('hex');\n }\n\n /**\n * Get cache entry for a task\n */\n get(taskName: string, inputs: string[]): CacheEntry | null {\n const cacheFile = join(this.cacheDir, `${taskName}.json`);\n\n if (!existsSync(cacheFile)) {\n this.stats.misses++;\n return null;\n }\n\n try {\n const entry: CacheEntry = JSON.parse(readFileSync(cacheFile, 'utf-8'));\n const currentHash = this.hashInputs(inputs);\n\n if (entry.hash === currentHash) {\n this.stats.hits++;\n this.logger.debug(`Cache HIT for ${taskName}`);\n return entry;\n }\n this.stats.misses++;\n this.logger.debug(`Cache MISS for ${taskName} (hash mismatch)`);\n return null;\n } catch (error) {\n this.logger.debug(`Cache error for ${taskName}: ${(error as Error).message}`);\n this.stats.misses++;\n return null;\n }\n }\n\n /**\n * Set cache entry for a task\n */\n set(\n taskName: string,\n inputs: string[],\n success: boolean,\n duration: number,\n outputs?: string[]\n ): void {\n const entry: CacheEntry = {\n duration,\n hash: this.hashInputs(inputs),\n inputs,\n outputs,\n success,\n timestamp: Date.now(),\n };\n\n const cacheFile = join(this.cacheDir, `${taskName}.json`);\n\n try {\n writeFileSync(cacheFile, JSON.stringify(entry, null, 2));\n this.logger.debug(`Cached result for ${taskName}`);\n } catch (error) {\n this.logger.debug(`Failed to cache ${taskName}: ${(error as Error).message}`);\n }\n }\n\n /**\n * Clear all cache\n */\n clear(): void {\n if (existsSync(this.cacheDir)) {\n const files = readdirSync(this.cacheDir);\n for (const file of files) {\n const filePath = join(this.cacheDir, file);\n try {\n if (statSync(filePath).isFile()) {\n // Use fs.unlinkSync instead of fs.rmSync for better compatibility\n unlinkSync(filePath);\n }\n } catch (error) {\n this.logger.debug(`Failed to delete ${file}: ${(error as Error).message}`);\n }\n }\n this.logger.success('Cache cleared');\n }\n }\n\n /**\n * Get cache statistics\n */\n getStats(): CacheStats {\n let totalEntries = 0;\n let totalSize = 0;\n\n if (existsSync(this.cacheDir)) {\n const files = readdirSync(this.cacheDir);\n totalEntries = files.length;\n\n for (const file of files) {\n const filePath = join(this.cacheDir, file);\n try {\n const stat = statSync(filePath);\n if (stat.isFile()) {\n totalSize += stat.size;\n }\n } catch {\n // Ignore errors\n }\n }\n }\n\n return {\n hits: this.stats.hits,\n location: this.cacheDir,\n misses: this.stats.misses,\n totalEntries,\n totalSize,\n };\n }\n\n /**\n * Invalidate cache for specific task\n */\n invalidate(taskName: string): void {\n const cacheFile = join(this.cacheDir, `${taskName}.json`);\n if (existsSync(cacheFile)) {\n unlinkSync(cacheFile);\n this.logger.debug(`Invalidated cache for ${taskName}`);\n }\n }\n\n /**\n * Check if cache is valid for task\n */\n isValid(taskName: string, inputs: string[]): boolean {\n return this.get(taskName, inputs) !== null;\n }\n}\n","import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext, CommandResult } from '../types/index.js';\n\nexport interface DevOptions {\n port?: number;\n host?: string;\n open?: boolean;\n}\n\n/**\n * Start development server\n * Detects and runs the appropriate dev server (Vite, Webpack, etc.)\n */\nexport async function devCommand(options: DevOptions, ctx: PluginContext): Promise<CommandResult> {\n // Trigger dev:before hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('dev:before', options);\n }\n\n ctx.logger.step('Starting development server...');\n\n // Detect which dev server to use\n const devServer = detectDevServer(ctx.cwd);\n\n if (!devServer) {\n return {\n message:\n 'No dev server configuration found. Run `kubit-forge add vite` or `kubit-forge add webpack` first.',\n status: 'error',\n };\n }\n\n ctx.logger.info(`Using ${devServer.name} dev server`);\n\n // Build command args\n const args = buildDevArgs(devServer, options);\n\n // Execute dev server\n const result = await ctx.runner.run(devServer.command, args);\n\n if (result.status === 'error') {\n return {\n message: `Failed to start ${devServer.name} dev server`,\n status: 'error',\n };\n }\n\n // Trigger dev:ready hook\n const url = `http://${options.host || 'localhost'}:${options.port || ctx.config.project.devPort}`;\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('dev:ready', url);\n }\n\n // Trigger dev:after hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('dev:after', options, result);\n }\n\n return {\n message: 'Dev server started successfully',\n status: 'ok',\n };\n}\n\ninterface DevServer {\n name: string;\n command: string;\n configFile: string;\n}\n\nfunction detectDevServer(cwd: string): DevServer | null {\n // Check for Vite\n if (existsSync(join(cwd, 'vite.config.ts')) || existsSync(join(cwd, 'vite.config.js'))) {\n return {\n command: 'vite',\n configFile: 'vite.config',\n name: 'Vite',\n };\n }\n\n // Check for Webpack\n if (existsSync(join(cwd, 'webpack.config.js')) || existsSync(join(cwd, 'webpack.config.ts'))) {\n return {\n command: 'webpack-dev-server',\n configFile: 'webpack.config',\n name: 'Webpack',\n };\n }\n\n // Check for Next.js\n if (existsSync(join(cwd, 'next.config.js')) || existsSync(join(cwd, 'next.config.mjs'))) {\n return {\n command: 'next',\n configFile: 'next.config',\n name: 'Next.js',\n };\n }\n\n // Check for package.json scripts\n const packageJsonPath = join(cwd, 'package.json');\n if (existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n if (packageJson.scripts?.dev) {\n return {\n command: 'npm',\n configFile: 'package.json',\n name: 'npm script',\n };\n }\n }\n\n return null;\n}\n\nfunction buildDevArgs(devServer: DevServer, options: DevOptions): string[] {\n const args: string[] = [];\n\n // Vite args\n if (devServer.name === 'Vite') {\n if (options.port) {\n args.push('--port', options.port.toString());\n }\n if (options.host) {\n args.push('--host', options.host);\n }\n if (options.open) {\n args.push('--open');\n }\n return args;\n }\n\n // Webpack args\n if (devServer.name === 'Webpack') {\n if (options.port) {\n args.push('--port', options.port.toString());\n }\n if (options.host) {\n args.push('--host', options.host);\n }\n if (options.open) {\n args.push('--open');\n }\n return args;\n }\n\n // Next.js args\n if (devServer.name === 'Next.js') {\n args.push('dev');\n if (options.port) {\n args.push('-p', options.port.toString());\n }\n return args;\n }\n\n // npm script\n if (devServer.name === 'npm script') {\n args.push('run', 'dev');\n return args;\n }\n\n return args;\n}\n","import { existsSync, readFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext, CommandResult } from '../types/index.js';\n\nexport interface FormatOptions {\n check?: boolean;\n write?: boolean;\n}\n\n/**\n * Format code with Prettier\n * Detects and runs Prettier with appropriate configuration\n */\nexport async function formatCommand(\n options: FormatOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n // Trigger format:before hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('format:before', options);\n }\n\n const isCheckMode = options.check || !options.write;\n\n ctx.logger.step(isCheckMode ? 'Checking code formatting...' : 'Formatting code...');\n\n // Check if Prettier is configured\n if (!hasPrettierConfig(ctx.cwd)) {\n return {\n message: 'No Prettier configuration found. Run `kubit-forge add prettier` first.',\n status: 'error',\n };\n }\n\n ctx.logger.info('Using Prettier');\n\n // Build command args\n const args = buildFormatArgs(options);\n\n // Execute Prettier\n const result = await ctx.runner.run('prettier', args);\n\n if (result.status === 'error') {\n return {\n message: isCheckMode ? 'Some files are not formatted correctly' : 'Formatting failed',\n status: 'error',\n };\n }\n\n ctx.logger.success(\n isCheckMode ? '✓ All files are formatted correctly!' : '✓ Code formatted successfully!'\n );\n\n // Trigger format:after hook\n if (ctx.hookManager) {\n await ctx.hookManager.trigger('format:after', result);\n }\n\n return {\n message: 'Formatting completed',\n status: 'ok',\n };\n}\n\nfunction hasPrettierConfig(cwd: string): boolean {\n const configFiles = [\n '.prettierrc',\n '.prettierrc.json',\n '.prettierrc.yml',\n '.prettierrc.yaml',\n '.prettierrc.json5',\n '.prettierrc.js',\n '.prettierrc.cjs',\n '.prettierrc.mjs',\n 'prettier.config.js',\n 'prettier.config.cjs',\n 'prettier.config.mjs',\n ];\n\n // Check for config files\n if (configFiles.some((file) => existsSync(join(cwd, file)))) {\n return true;\n }\n\n // Check for prettier key in package.json\n const packageJsonPath = join(cwd, 'package.json');\n if (existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n if (packageJson.prettier) {\n return true;\n }\n }\n\n return false;\n}\n\nfunction buildFormatArgs(options: FormatOptions): string[] {\n const args: string[] = [];\n\n if (options.check) {\n args.push('--check');\n } else if (options.write !== false) {\n args.push('--write');\n }\n\n // Add common patterns\n args.push('.');\n\n return args;\n}\n","import { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext, CommandResult } from '../../types/index.js';\n\nimport { FEATURES, type FeatureDefinition } from './features.js';\n\nexport interface AddOptions {\n dryRun?: boolean;\n force?: boolean;\n}\n\nexport type { FeatureDefinition };\n\n// Note: FEATURES is now imported from ./features.ts\n// All feature definitions and templates are in separate files for easy modification\n\nexport async function addCommand(\n feature: string,\n options: AddOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n const featureDef = FEATURES[feature];\n\n if (!featureDef) {\n return {\n message: `Unknown feature: ${feature}. Available: ${Object.keys(FEATURES).join(', ')}`,\n status: 'error',\n };\n }\n\n // Check if package.json exists, if not create it\n const packageJsonPath = join(ctx.cwd, 'package.json');\n if (!existsSync(packageJsonPath)) {\n ctx.logger.warn('No package.json found. Creating one...');\n\n const defaultPackageJson = {\n dependencies: {},\n devDependencies: {},\n name: ctx.cwd.split('/').pop() || 'my-project',\n private: true,\n scripts: {\n build: 'vite build',\n dev: 'vite',\n preview: 'vite preview',\n },\n type: 'module',\n version: '0.1.0',\n };\n\n writeFileSync(packageJsonPath, JSON.stringify(defaultPackageJson, null, 2) + '\\n');\n ctx.logger.success('Created package.json');\n }\n\n ctx.logger.step(`Adding ${featureDef.name}...`);\n ctx.logger.info(featureDef.description);\n\n // Check if already installed\n const configPath = join(ctx.cwd, 'kubit.config.toml');\n if (existsSync(configPath)) {\n const configContent = readFileSync(configPath, 'utf-8');\n if (configContent.includes(`${feature} = true`) && !options.force) {\n ctx.logger.warn(`Feature '${feature}' is already installed. Use --force to reinstall.`);\n return { message: 'Feature already installed', status: 'ok' };\n }\n }\n\n const plan: string[] = [];\n\n // Plan dependencies\n const allDeps = {\n ...featureDef.dependencies,\n ...featureDef.devDependencies,\n };\n if (Object.keys(allDeps).length > 0) {\n plan.push(`Install dependencies: ${Object.keys(allDeps).join(', ')}`);\n }\n\n // Plan file changes\n for (const file of featureDef.files) {\n const filePath = join(ctx.cwd, file.path);\n const exists = existsSync(filePath);\n const action = exists ? (file.mode === 'append' ? 'append' : 'overwrite') : 'create';\n plan.push(`${action}: ${file.path}`);\n }\n\n // Plan config changes\n if (featureDef.configChanges) {\n for (const change of featureDef.configChanges) {\n plan.push(`Update config: ${change.file}`);\n }\n }\n\n // Show plan\n ctx.logger.info('\\nPlan:');\n for (const item of plan) {\n ctx.logger.info(` - ${item}`);\n }\n\n if (options.dryRun) {\n ctx.logger.info('\\n[DRY RUN] No changes made');\n return { message: 'Dry run completed', status: 'ok' };\n }\n\n // Execute: Install dependencies\n if (Object.keys(featureDef.dependencies).length > 0) {\n ctx.logger.step('Installing dependencies...');\n const deps = Object.entries(featureDef.dependencies).map(\n ([name, version]) => `${name}@${version}`\n );\n const result = await ctx.runner.run(ctx.config.project.packageManager, ['add', ...deps]);\n if (result.status !== 'ok') {\n return { message: 'Failed to install dependencies', status: 'error' };\n }\n }\n\n if (featureDef.devDependencies && Object.keys(featureDef.devDependencies).length > 0) {\n ctx.logger.step('Installing dev dependencies...');\n const deps = Object.entries(featureDef.devDependencies).map(\n ([name, version]) => `${name}@${version}`\n );\n const addFlag = ctx.config.project.packageManager === 'npm' ? 'install' : 'add';\n const devFlag = ctx.config.project.packageManager === 'npm' ? '--save-dev' : '-D';\n const result = await ctx.runner.run(ctx.config.project.packageManager, [\n addFlag,\n devFlag,\n ...deps,\n ]);\n if (result.status !== 'ok') {\n return { message: 'Failed to install dev dependencies', status: 'error' };\n }\n }\n\n // Execute: Create/modify files\n for (const file of featureDef.files) {\n const filePath = join(ctx.cwd, file.path);\n const dir = join(filePath, '..');\n\n ctx.logger.step(`Creating ${file.path}...`);\n\n // Ensure directory exists\n await ctx.runner.run('mkdir', ['-p', dir]);\n\n if (file.mode === 'append' && existsSync(filePath)) {\n const existing = readFileSync(filePath, 'utf-8');\n writeFileSync(filePath, existing + '\\n' + file.content);\n } else {\n writeFileSync(filePath, file.content);\n }\n\n // Add kubit marker\n const marker = `\\n// Added by kubit-forge add ${feature}\\n`;\n if (!file.content.includes('Added by kubit-forge')) {\n const content = readFileSync(filePath, 'utf-8');\n writeFileSync(filePath, marker + content);\n }\n }\n\n // Execute: Update config\n if (featureDef.configChanges) {\n for (const change of featureDef.configChanges) {\n const configPath = join(ctx.cwd, change.file);\n if (existsSync(configPath)) {\n let content = readFileSync(configPath, 'utf-8');\n\n // Simple TOML append (not a full parser)\n if (!content.includes('[features]')) {\n content += '\\n[features]\\n';\n }\n if (!content.includes(`${feature} = true`)) {\n content += `${feature} = true\\n`;\n }\n\n writeFileSync(configPath, content);\n ctx.logger.success(`Updated ${change.file}`);\n }\n }\n }\n\n // Execute: Post-install commands\n if (featureDef.postInstall) {\n for (const cmd of featureDef.postInstall) {\n ctx.logger.step(`Running: ${cmd}`);\n const [command, ...args] = cmd.split(' ');\n await ctx.runner.run(command, args);\n }\n }\n\n ctx.logger.success(`\\n✓ ${featureDef.name} added successfully!`);\n\n return {\n data: { feature, files: featureDef.files.map((f) => f.path) },\n message: `Feature '${feature}' added successfully`,\n status: 'ok',\n };\n}\n\nexport function listFeatures(): string[] {\n return Object.keys(FEATURES);\n}\n\nexport function getFeatureInfo(feature: string): FeatureDefinition | undefined {\n return FEATURES[feature];\n}\n","import { loadTemplate } from './template-loader.js';\n\nexport interface FeatureDefinition {\n name: string;\n description: string;\n dependencies: Record<string, string>;\n devDependencies?: Record<string, string>;\n files: Array<{\n path: string;\n content: string;\n mode?: 'create' | 'append' | 'merge';\n }>;\n configChanges?: Array<{\n file: string;\n changes: any;\n }>;\n postInstall?: string[];\n}\n\nexport const FEATURES: Record<string, FeatureDefinition> = {\n bernova: {\n configChanges: [\n {\n changes: {\n features: { bernova: true },\n },\n file: 'kubit.config.toml',\n },\n ],\n dependencies: {\n bernova: '^1.0.0',\n },\n description: 'Add Bernova - CSS-in-JS with JavaScript syntax',\n devDependencies: {},\n files: [\n {\n content: loadTemplate('bernova.config.json.template'),\n path: 'bernova.config.json',\n },\n {\n content: loadTemplate('bernova-foundations.ts.template'),\n path: 'src/styles/foundations.ts',\n },\n {\n content: loadTemplate('bernova-globalStyles.ts.template'),\n path: 'src/styles/globalStyles.ts',\n },\n {\n content: loadTemplate('bernova-mediaQueries.ts.template'),\n path: 'src/styles/mediaQueries.ts',\n },\n {\n content: loadTemplate('bernova-theme.ts.template'),\n path: 'src/styles/theme.ts',\n },\n ],\n name: 'Bernova',\n postInstall: ['npx bv-config', 'npx bernova'],\n },\n\n changesets: {\n configChanges: [\n {\n changes: {\n features: { changesets: true },\n },\n file: 'kubit.config.toml',\n },\n ],\n dependencies: {},\n description: 'Add Changesets for version management',\n devDependencies: {\n '@changesets/cli': '^2.27.1',\n },\n files: [\n {\n content: loadTemplate('changesets-config.json.template'),\n path: '.changeset/config.json',\n },\n {\n content: loadTemplate('changesets-readme.md.template'),\n path: '.changeset/README.md',\n },\n ],\n name: 'Changesets',\n postInstall: ['npx changeset init'],\n },\n\n commitlint: {\n configChanges: [\n {\n changes: {\n features: { commitlint: true },\n },\n file: 'kubit.config.toml',\n },\n ],\n dependencies: {},\n description: 'Add Commitlint for conventional commits',\n devDependencies: {\n '@commitlint/cli': '^19.0.3',\n '@commitlint/config-conventional': '^19.0.3',\n },\n files: [\n {\n content: loadTemplate('commitlint.config.js.template'),\n path: 'commitlint.config.js',\n },\n ],\n name: 'Commitlint',\n },\n\n cypress: {\n configChanges: [\n {\n changes: {\n features: { cypress: true },\n },\n file: 'kubit.config.toml',\n },\n ],\n dependencies: {},\n description: 'Add Cypress for E2E testing',\n devDependencies: {\n cypress: '^13.6.6',\n },\n files: [\n {\n content: loadTemplate('cypress.config.ts.template'),\n path: 'cypress.config.ts',\n },\n {\n content: loadTemplate('cypress-support-e2e.ts.template'),\n path: 'cypress/support/e2e.ts',\n },\n {\n content: loadTemplate('cypress-support-commands.ts.template'),\n path: 'cypress/support/commands.ts',\n },\n ],\n name: 'Cypress',\n },\n\n eslint: {\n configChanges: [\n {\n changes: {\n features: { eslint: true },\n },\n file: 'kubit.config.toml',\n },\n ],\n dependencies: {},\n description: 'Add ESLint for code linting',\n devDependencies: {\n '@eslint/js': '^9.0.0',\n eslint: '^9.0.0',\n 'typescript-eslint': '^8.0.0',\n },\n files: [\n {\n content: loadTemplate('eslint.config.js.template'),\n path: 'eslint.config.js',\n },\n ],\n name: 'ESLint',\n },\n\n husky: {\n configChanges: [\n {\n changes: {\n features: { husky: true },\n },\n file: 'kubit.config.toml',\n },\n ],\n dependencies: {},\n description: 'Add Husky for Git hooks',\n devDependencies: {\n husky: '^9.0.11',\n },\n files: [\n {\n content: loadTemplate('husky-pre-commit.template'),\n path: '.husky/pre-commit',\n },\n {\n content: loadTemplate('husky-commit-msg.template'),\n path: '.husky/commit-msg',\n },\n ],\n name: 'Husky',\n postInstall: ['npx husky init'],\n },\n\n jest: {\n configChanges: [\n {\n changes: {\n features: { jest: true },\n },\n file: 'kubit.config.toml',\n },\n ],\n dependencies: {},\n description: 'Add Jest for unit testing',\n devDependencies: {\n '@testing-library/jest-dom': '^6.4.2',\n '@testing-library/react': '^14.2.1',\n '@testing-library/user-event': '^14.5.2',\n '@types/jest': '^29.5.12',\n 'identity-obj-proxy': '^3.0.0',\n jest: '^29.7.0',\n 'jest-environment-jsdom': '^29.7.0',\n 'ts-jest': '^29.1.2',\n },\n files: [\n {\n content: loadTemplate('jest.config.ts.template'),\n path: 'jest.config.ts',\n },\n {\n content: loadTemplate('jest-setup.ts.template'),\n path: 'src/test/setup.ts',\n },\n ],\n name: 'Jest',\n },\n\n 'lint-staged': {\n configChanges: [\n {\n changes: {\n features: { 'lint-staged': true },\n },\n file: 'kubit.config.toml',\n },\n ],\n dependencies: {},\n description: 'Add lint-staged to run linters on staged files',\n devDependencies: {\n 'lint-staged': '^15.2.2',\n },\n files: [\n {\n content: loadTemplate('lint-staged.config.js.template'),\n path: 'lint-staged.config.js',\n },\n ],\n name: 'Lint-staged',\n },\n\n playwright: {\n configChanges: [\n {\n changes: {\n features: { playwright: true },\n },\n file: 'kubit.config.toml',\n },\n ],\n dependencies: {},\n description: 'Add Playwright for E2E testing',\n devDependencies: {\n '@playwright/test': '^1.42.1',\n '@types/node': '^20.11.24',\n },\n files: [\n {\n content: loadTemplate('playwright.config.ts.template'),\n path: 'playwright.config.ts',\n },\n {\n content: loadTemplate('playwright-example.spec.ts.template'),\n path: 'e2e/example.spec.ts',\n },\n ],\n name: 'Playwright',\n postInstall: ['npx playwright install'],\n },\n\n prettier: {\n configChanges: [\n {\n changes: {\n features: { prettier: true },\n },\n file: 'kubit.config.toml',\n },\n ],\n dependencies: {},\n description: 'Add Prettier for code formatting',\n devDependencies: {\n prettier: '^3.2.0',\n },\n files: [\n {\n content: loadTemplate('.prettierrc.template'),\n path: '.prettierrc',\n },\n {\n content: loadTemplate('.prettierignore.template'),\n path: '.prettierignore',\n },\n ],\n name: 'Prettier',\n },\n\n // Inline templates for features that are simple\n router: {\n configChanges: [\n {\n changes: {\n features: { router: true },\n },\n file: 'kubit.config.toml',\n },\n ],\n dependencies: {\n 'react-router-dom': '^6.21.0',\n },\n description: 'Add React Router for navigation',\n devDependencies: {\n '@types/react-router-dom': '^5.3.3',\n },\n files: [\n {\n content: `import { createBrowserRouter, RouterProvider } from 'react-router-dom';\nimport App from './App';\n\nconst router = createBrowserRouter([\n {\n path: '/',\n element: <App />,\n },\n]);\n\nexport function Router() {\n return <RouterProvider router={router} />;\n}\n`,\n path: 'src/router.tsx',\n },\n ],\n name: 'React Router',\n },\n\n vitest: {\n configChanges: [\n {\n changes: {\n features: { vitest: true },\n },\n file: 'kubit.config.toml',\n },\n ],\n dependencies: {},\n description: 'Add Vitest for testing',\n devDependencies: {\n '@testing-library/jest-dom': '^6.2.0',\n '@testing-library/react': '^14.1.2',\n '@testing-library/user-event': '^14.5.2',\n jsdom: '^24.0.0',\n vitest: '^1.2.0',\n },\n files: [\n {\n content: loadTemplate('vitest.config.ts.template'),\n path: 'vitest.config.ts',\n },\n {\n content: loadTemplate('vitest-setup.ts.template'),\n path: 'src/test/setup.ts',\n },\n ],\n name: 'Vitest',\n },\n\n zustand: {\n configChanges: [\n {\n changes: {\n features: { zustand: true },\n },\n file: 'kubit.config.toml',\n },\n ],\n dependencies: {\n zustand: '^4.4.7',\n },\n description: 'Add Zustand for state management',\n files: [\n {\n content: `import { create } from 'zustand';\n\ninterface ExampleState {\n count: number;\n increment: () => void;\n decrement: () => void;\n}\n\nexport const useExampleStore = create<ExampleState>((set) => ({\n count: 0,\n increment: () => set((state) => ({ count: state.count + 1 })),\n decrement: () => set((state) => ({ count: state.count - 1 })),\n}));\n`,\n path: 'src/store/example.ts',\n },\n ],\n name: 'Zustand',\n },\n};\n","/**\n * Template loader - now uses centralized templates location\n * @deprecated Use loadFeatureTemplate from '../../templates/features' instead\n */\n\nexport {\n loadFeatureTemplate as loadTemplate,\n loadFeatureTemplates as loadTemplates,\n} from '../../templates/features/index.js';\n","/**\n * Feature templates exports\n */\n\nexport * from './template-loader.js';\n","import { readFileSync } from 'fs';\nimport { join, dirname } from 'path';\nimport { fileURLToPath } from 'url';\n\nconst __filename = fileURLToPath(import.meta.url);\nconst __dirname = dirname(__filename);\n\n// Find templates root - when bundled, __dirname points to dist directory\nconst TEMPLATES_ROOT =\n __dirname.includes('/dist') || __dirname.includes('\\\\dist')\n ? __dirname.split(/[/\\\\]dist/)[0] + '/dist/templates/features'\n : __dirname;\n\n/**\n * Load a feature template file from the templates directory\n */\nexport function loadFeatureTemplate(templateName: string): string {\n const templatePath = join(TEMPLATES_ROOT, templateName);\n return readFileSync(templatePath, 'utf-8');\n}\n\n/**\n * Load multiple feature templates\n */\nexport function loadFeatureTemplates(templateNames: string[]): Record<string, string> {\n const templates: Record<string, string> = {};\n for (const name of templateNames) {\n templates[name] = loadFeatureTemplate(name);\n }\n return templates;\n}\n","import type { PluginContext, CommandResult } from '../types/index.js';\n\nimport { MIGRATIONS, getAllMigrations, type Migration } from './migrations/index.js';\n\nexport interface MigrateOptions {\n dryRun?: boolean;\n force?: boolean;\n}\n\nexport async function migrateCommand(\n codename: string,\n options: MigrateOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n const migration = MIGRATIONS[codename];\n\n if (!migration) {\n const available = Object.keys(MIGRATIONS).join(', ');\n return {\n message: `Unknown migration: ${codename}. Available: ${available}`,\n status: 'error',\n };\n }\n\n ctx.logger.step(`Migration: ${migration.name}`);\n ctx.logger.info(migration.description);\n\n if (migration.breaking) {\n ctx.logger.warn('⚠️ This is a BREAKING migration');\n }\n\n if (migration.fromVersion && migration.toVersion) {\n ctx.logger.info(`From: ${migration.fromVersion} → To: ${migration.toVersion}`);\n }\n\n if (options.dryRun) {\n ctx.logger.info('\\n[DRY RUN] No changes will be made');\n }\n\n ctx.logger.info('\\nExecuting migration...\\n');\n\n try {\n const result = await migration.execute(ctx);\n\n if (result.changes.length > 0) {\n ctx.logger.info('Changes made:');\n for (const change of result.changes) {\n ctx.logger.success(` ✓ ${change}`);\n }\n }\n\n if (result.warnings.length > 0) {\n ctx.logger.info('\\nWarnings:');\n for (const warning of result.warnings) {\n ctx.logger.warn(` ⚠ ${warning}`);\n }\n }\n\n if (result.errors.length > 0) {\n ctx.logger.info('\\nErrors:');\n for (const error of result.errors) {\n ctx.logger.error(` ✗ ${error}`);\n }\n }\n\n if (result.success) {\n ctx.logger.success(`\\n✓ Migration '${codename}' completed successfully`);\n return {\n data: result,\n message: 'Migration completed',\n status: 'ok',\n };\n }\n ctx.logger.error(`\\n✗ Migration '${codename}' failed`);\n return {\n data: result,\n message: 'Migration failed',\n status: 'error',\n };\n } catch (error) {\n ctx.logger.error('Migration failed with exception', error as Error);\n return {\n message: (error as Error).message,\n status: 'error',\n };\n }\n}\n\nexport function listMigrations(): Migration[] {\n return getAllMigrations();\n}\n","/**\n * Migration registry\n *\n * This module exports all available migrations for the kubit-forge.\n * Each migration is a self-contained module that handles a specific\n * breaking change or major version upgrade.\n *\n * @module migrations\n */\n\nimport type { Migration } from './types.js';\n\nimport { cjsToEsmMigration } from './cjs-to-esm.js';\nimport { eslintLegacyToFlatMigration } from './eslint-legacy-to-flat.js';\nimport { jestToVitestMigration } from './jest-to-vitest.js';\nimport { react18ToReact19Migration } from './react18-to-react19.js';\nimport { vite5ToVite6Migration } from './vite5-to-vite6.js';\n\n/**\n * Registry of all available migrations\n *\n * Migrations are indexed by their codename for easy lookup.\n * Each migration is a complete, self-contained transformation\n * that can be executed independently.\n *\n * @example\n * ```typescript\n * const migration = MIGRATIONS['vite5-to-vite6'];\n * const result = await migration.execute(ctx);\n * ```\n */\nexport const MIGRATIONS: Record<string, Migration> = {\n 'cjs-to-esm': cjsToEsmMigration,\n 'eslint-legacy-to-flat': eslintLegacyToFlatMigration,\n 'jest-to-vitest': jestToVitestMigration,\n 'react18-to-react19': react18ToReact19Migration,\n 'vite5-to-vite6': vite5ToVite6Migration,\n};\n\n/**\n * Get all available migrations\n *\n * @returns Array of all registered migrations\n */\nexport function getAllMigrations(): Migration[] {\n return Object.values(MIGRATIONS);\n}\n\n/**\n * Get a migration by its codename\n *\n * @param codename - The unique identifier for the migration\n * @returns The migration if found, undefined otherwise\n */\nexport function getMigration(codename: string): Migration | undefined {\n return MIGRATIONS[codename];\n}\n\n/**\n * Get all migration codenames\n *\n * @returns Array of all migration codenames\n */\nexport function getMigrationCodenames(): string[] {\n return Object.keys(MIGRATIONS);\n}\n\n/**\n * Check if a migration exists\n *\n * @param codename - The codename to check\n * @returns True if the migration exists\n */\nexport function hasMigration(codename: string): boolean {\n return codename in MIGRATIONS;\n}\n\n// Re-export types for convenience\nexport type { Migration, MigrationResult } from './types.js';\n","import { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext } from '../../types/index.js';\nimport type { Migration, MigrationResult } from './types.js';\n\n/**\n * Migrates a project from CommonJS to ES Modules\n *\n * This migration updates the project configuration to use ES Modules (ESM)\n * instead of CommonJS (CJS). ESM is the standard module system for JavaScript\n * and provides better tree-shaking, static analysis, and modern tooling support.\n *\n * @remarks\n * The migration performs the following changes:\n * - Sets `\"type\": \"module\"` in package.json\n * - Updates TypeScript configuration for ESM\n * - Provides guidance on code changes needed\n *\n * Manual code changes required:\n * - Replace `require()` with `import` statements\n * - Replace `module.exports` with `export` statements\n * - Add `.js` extensions to relative imports\n * - Replace `__dirname` with `import.meta.url`\n * - Replace `__filename` with `import.meta.url`\n *\n * @see https://nodejs.org/api/esm.html\n * @see https://www.typescriptlang.org/docs/handbook/esm-node.html\n */\nexport const cjsToEsmMigration: Migration = {\n breaking: true,\n codename: 'cjs-to-esm',\n description: 'Migrate from CommonJS to ES Modules',\n async execute(ctx: PluginContext): Promise<MigrationResult> {\n const result: MigrationResult = {\n changes: [],\n errors: [],\n success: true,\n warnings: [],\n };\n\n // Update package.json\n const pkgPath = join(ctx.cwd, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n\n if (!pkg.type || pkg.type === 'commonjs') {\n pkg.type = 'module';\n writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));\n result.changes.push('Set \"type\": \"module\" in package.json');\n } else if (pkg.type === 'module') {\n result.warnings.push('Project already uses ES Modules');\n }\n } catch (error) {\n result.errors.push(`Failed to update package.json: ${(error as Error).message}`);\n result.success = false;\n }\n } else {\n result.errors.push('package.json not found');\n result.success = false;\n }\n\n // Update tsconfig.json\n const tsconfigPath = join(ctx.cwd, 'tsconfig.json');\n if (existsSync(tsconfigPath)) {\n try {\n const tsconfig = JSON.parse(readFileSync(tsconfigPath, 'utf-8'));\n\n let updated = false;\n\n // Ensure compilerOptions exists\n if (!tsconfig.compilerOptions) {\n tsconfig.compilerOptions = {};\n }\n\n // Update module settings\n if (tsconfig.compilerOptions.module !== 'ESNext') {\n tsconfig.compilerOptions.module = 'ESNext';\n updated = true;\n }\n\n if (tsconfig.compilerOptions.moduleResolution !== 'bundler') {\n tsconfig.compilerOptions.moduleResolution = 'bundler';\n updated = true;\n }\n\n // Enable ESM-specific options\n if (!tsconfig.compilerOptions.esModuleInterop) {\n tsconfig.compilerOptions.esModuleInterop = true;\n updated = true;\n }\n\n if (updated) {\n writeFileSync(tsconfigPath, JSON.stringify(tsconfig, null, 2));\n result.changes.push('Updated tsconfig.json for ES Modules');\n }\n } catch (error) {\n result.errors.push(`Failed to update tsconfig.json: ${(error as Error).message}`);\n }\n } else {\n result.warnings.push('tsconfig.json not found');\n }\n\n // Add comprehensive migration warnings\n result.warnings.push('MANUAL CODE CHANGES REQUIRED:');\n result.warnings.push('');\n result.warnings.push('1. Update import statements:');\n result.warnings.push(' Before: const foo = require(\"./foo\");');\n result.warnings.push(' After: import foo from \"./foo.js\";');\n result.warnings.push(' Note: Add .js extension to relative imports!');\n result.warnings.push('');\n result.warnings.push('2. Update export statements:');\n result.warnings.push(' Before: module.exports = { foo };');\n result.warnings.push(' After: export { foo }; or export default foo;');\n result.warnings.push('');\n result.warnings.push('3. Replace __dirname and __filename:');\n result.warnings.push(' Before: const dir = __dirname;');\n result.warnings.push(' After: import { fileURLToPath } from \"url\";');\n result.warnings.push(' import { dirname } from \"path\";');\n result.warnings.push(' const __filename = fileURLToPath(import.meta.url);');\n result.warnings.push(' const __dirname = dirname(__filename);');\n result.warnings.push('');\n result.warnings.push('4. Update dynamic imports:');\n result.warnings.push(' Before: const mod = require(dynamicPath);');\n result.warnings.push(' After: const mod = await import(dynamicPath);');\n result.warnings.push('');\n result.warnings.push('5. Update package.json exports if publishing:');\n result.warnings.push(' Add \"exports\" field for proper ESM support');\n result.warnings.push('');\n result.warnings.push('6. Update Jest/Vitest configuration:');\n result.warnings.push(' Configure for ESM if using test runners');\n result.warnings.push('');\n result.warnings.push('7. Check dependencies:');\n result.warnings.push(' Ensure all dependencies support ESM');\n result.warnings.push(' Some packages may need \"default\" import');\n\n return result;\n },\n\n name: 'CommonJS to ES Modules',\n};\n","import { existsSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext } from '../../types/index.js';\nimport type { Migration, MigrationResult } from './types.js';\n\n/**\n * Migrates ESLint configuration from legacy format to flat config\n *\n * This migration handles the transition from the legacy `.eslintrc.*` format\n * to the new flat config format (`eslint.config.js`) introduced in ESLint 9.\n *\n * @remarks\n * The flat config format is the future of ESLint configuration and provides:\n * - Better performance\n * - Simpler configuration structure\n * - Native TypeScript support\n * - More predictable behavior\n *\n * This migration creates a new flat config file with sensible defaults for\n * TypeScript and React projects. Manual review and adjustment may be needed\n * for complex configurations.\n *\n * @see https://eslint.org/docs/latest/use/configure/configuration-files-new\n */\nexport const eslintLegacyToFlatMigration: Migration = {\n breaking: true,\n codename: 'eslint-legacy-to-flat',\n description: 'Migrate from legacy .eslintrc to flat config',\n async execute(ctx: PluginContext): Promise<MigrationResult> {\n const result: MigrationResult = {\n changes: [],\n errors: [],\n success: true,\n warnings: [],\n };\n\n // Check for legacy config files\n const oldConfigs = [\n '.eslintrc',\n '.eslintrc.json',\n '.eslintrc.js',\n '.eslintrc.yml',\n '.eslintrc.yaml',\n ];\n\n let foundOldConfig = false;\n for (const config of oldConfigs) {\n if (existsSync(join(ctx.cwd, config))) {\n foundOldConfig = true;\n result.warnings.push(`Found legacy config: ${config}`);\n }\n }\n\n if (!foundOldConfig) {\n result.warnings.push('No legacy ESLint config found');\n return result;\n }\n\n // Create flat config with comprehensive setup\n const flatConfig = `import js from '@eslint/js';\nimport tsPlugin from '@typescript-eslint/eslint-plugin';\nimport tsParser from '@typescript-eslint/parser';\nimport reactPlugin from 'eslint-plugin-react';\nimport reactHooksPlugin from 'eslint-plugin-react-hooks';\n\n/**\n * ESLint flat configuration\n * @see https://eslint.org/docs/latest/use/configure/configuration-files-new\n */\nexport default [\n // Base JavaScript recommended rules\n js.configs.recommended,\n\n // TypeScript and React configuration\n {\n files: ['**/*.{ts,tsx,js,jsx}'],\n languageOptions: {\n parser: tsParser,\n parserOptions: {\n ecmaVersion: 'latest',\n sourceType: 'module',\n ecmaFeatures: { \n jsx: true \n },\n },\n globals: {\n // Browser globals\n window: 'readonly',\n document: 'readonly',\n navigator: 'readonly',\n console: 'readonly',\n // Node globals\n process: 'readonly',\n __dirname: 'readonly',\n __filename: 'readonly',\n },\n },\n plugins: {\n '@typescript-eslint': tsPlugin,\n 'react': reactPlugin,\n 'react-hooks': reactHooksPlugin,\n },\n rules: {\n // TypeScript recommended rules\n ...tsPlugin.configs.recommended.rules,\n \n // React recommended rules\n ...reactPlugin.configs.recommended.rules,\n \n // React Hooks rules\n ...reactHooksPlugin.configs.recommended.rules,\n \n // Custom overrides\n 'react/react-in-jsx-scope': 'off', // Not needed in React 17+\n 'react/prop-types': 'off', // Using TypeScript for prop validation\n '@typescript-eslint/no-explicit-any': 'warn', // Allow any but warn\n '@typescript-eslint/no-unused-vars': ['error', { \n argsIgnorePattern: '^_',\n varsIgnorePattern: '^_',\n }],\n },\n settings: {\n react: {\n version: 'detect', // Automatically detect React version\n },\n },\n },\n\n // Ignore patterns\n {\n ignores: [\n 'dist',\n 'build',\n 'node_modules',\n '*.config.js',\n 'coverage',\n '.cache',\n ],\n },\n];\n`;\n\n try {\n const newConfigPath = join(ctx.cwd, 'eslint.config.js');\n writeFileSync(newConfigPath, flatConfig);\n result.changes.push('Created eslint.config.js (flat config)');\n\n // Add instructions for cleanup\n result.warnings.push('Review and delete old ESLint config files manually:');\n for (const config of oldConfigs) {\n if (existsSync(join(ctx.cwd, config))) {\n result.warnings.push(` - ${config}`);\n }\n }\n\n result.warnings.push('Update package.json scripts to use new config');\n result.warnings.push('Install required dependencies if missing:');\n result.warnings.push(' npm install -D @eslint/js @typescript-eslint/eslint-plugin');\n result.warnings.push(\n ' @typescript-eslint/parser eslint-plugin-react eslint-plugin-react-hooks'\n );\n } catch (error) {\n result.errors.push(`Failed to create flat config: ${(error as Error).message}`);\n result.success = false;\n }\n\n return result;\n },\n\n name: 'ESLint Legacy to Flat Config',\n};\n","import { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext } from '../../types/index.js';\nimport type { Migration, MigrationResult } from './types.js';\n\n/**\n * Migrates a project from Jest to Vitest\n *\n * This migration replaces Jest with Vitest, a faster and more modern test runner\n * built on top of Vite. Vitest provides:\n * - Native ESM support\n * - Faster execution with Vite's transformation\n * - Compatible API with Jest\n * - Better TypeScript support\n * - Built-in watch mode\n *\n * @remarks\n * The migration performs the following:\n * - Removes Jest dependencies\n * - Adds Vitest dependencies\n * - Creates vitest.config.ts\n * - Updates package.json scripts\n *\n * Manual code changes may be needed:\n * - Replace `jest.mock()` with `vi.mock()`\n * - Replace `jest.fn()` with `vi.fn()`\n * - Update test setup files\n * - Review Jest-specific matchers\n *\n * @see https://vitest.dev/guide/migration.html\n */\nexport const jestToVitestMigration: Migration = {\n breaking: true,\n codename: 'jest-to-vitest',\n description: 'Migrate from Jest to Vitest',\n async execute(ctx: PluginContext): Promise<MigrationResult> {\n const result: MigrationResult = {\n changes: [],\n errors: [],\n success: true,\n warnings: [],\n };\n\n // Update package.json\n const pkgPath = join(ctx.cwd, 'package.json');\n if (!existsSync(pkgPath)) {\n result.errors.push('package.json not found');\n result.success = false;\n return result;\n }\n\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n let updated = false;\n\n // Remove Jest dependencies\n const jestDeps = [\n 'jest',\n '@types/jest',\n 'ts-jest',\n 'jest-environment-jsdom',\n '@testing-library/jest-dom',\n ];\n\n for (const dep of jestDeps) {\n if (pkg.devDependencies?.[dep]) {\n delete pkg.devDependencies[dep];\n updated = true;\n }\n }\n\n if (updated) {\n result.changes.push('Removed Jest dependencies');\n }\n\n // Add Vitest dependencies\n if (!pkg.devDependencies) {\n pkg.devDependencies = {};\n }\n\n pkg.devDependencies.vitest = '^1.2.0';\n pkg.devDependencies['@vitest/ui'] = '^1.2.0';\n pkg.devDependencies['jsdom'] = '^23.0.0';\n result.changes.push('Added Vitest dependencies');\n\n // Update scripts\n if (pkg.scripts) {\n if (pkg.scripts.test) {\n pkg.scripts.test = pkg.scripts.test.replace(/jest/g, 'vitest run');\n result.changes.push('Updated test script');\n }\n\n if (pkg.scripts['test:watch']) {\n pkg.scripts['test:watch'] = 'vitest';\n result.changes.push('Updated test:watch script');\n } else {\n pkg.scripts['test:watch'] = 'vitest';\n result.changes.push('Added test:watch script');\n }\n\n if (pkg.scripts['test:ui']) {\n pkg.scripts['test:ui'] = 'vitest --ui';\n } else {\n pkg.scripts['test:ui'] = 'vitest --ui';\n result.changes.push('Added test:ui script');\n }\n\n if (pkg.scripts['test:coverage']) {\n pkg.scripts['test:coverage'] = 'vitest run --coverage';\n result.changes.push('Updated test:coverage script');\n }\n }\n\n writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));\n result.changes.push('Updated package.json scripts');\n } catch (error) {\n result.errors.push(`Failed to update package.json: ${(error as Error).message}`);\n result.success = false;\n return result;\n }\n\n // Create vitest.config.ts\n const vitestConfig = `import { defineConfig } from 'vitest/config';\nimport react from '@vitejs/plugin-react';\n\n/**\n * Vitest configuration\n * @see https://vitest.dev/config/\n */\nexport default defineConfig({\n plugins: [react()],\n test: {\n // Enable global test APIs (describe, it, expect, etc.)\n globals: true,\n \n // Test environment (jsdom for browser-like environment)\n environment: 'jsdom',\n \n // Setup files to run before tests\n setupFiles: './src/test/setup.ts',\n \n // Coverage configuration\n coverage: {\n provider: 'v8',\n reporter: ['text', 'json', 'html'],\n exclude: [\n 'node_modules/',\n 'src/test/',\n '**/*.d.ts',\n '**/*.config.*',\n '**/mockData/',\n '**/*.test.{ts,tsx}',\n ],\n },\n \n // Include patterns\n include: ['**/*.{test,spec}.{ts,tsx}'],\n \n // Exclude patterns\n exclude: [\n 'node_modules',\n 'dist',\n '.idea',\n '.git',\n '.cache',\n ],\n },\n});\n`;\n\n try {\n const configPath = join(ctx.cwd, 'vitest.config.ts');\n writeFileSync(configPath, vitestConfig);\n result.changes.push('Created vitest.config.ts');\n } catch (error) {\n result.errors.push(`Failed to create vitest.config.ts: ${(error as Error).message}`);\n }\n\n // Add migration warnings\n result.warnings.push('MANUAL CODE CHANGES REQUIRED:');\n result.warnings.push('');\n result.warnings.push('1. Update test imports:');\n result.warnings.push(' Before: import { jest } from \"@jest/globals\";');\n result.warnings.push(' After: import { vi } from \"vitest\";');\n result.warnings.push('');\n result.warnings.push('2. Replace Jest mocking:');\n result.warnings.push(' Before: jest.mock(\"./module\");');\n result.warnings.push(' After: vi.mock(\"./module\");');\n result.warnings.push('');\n result.warnings.push('3. Replace Jest functions:');\n result.warnings.push(' Before: jest.fn(), jest.spyOn()');\n result.warnings.push(' After: vi.fn(), vi.spyOn()');\n result.warnings.push('');\n result.warnings.push('4. Update test setup:');\n result.warnings.push(' - Create src/test/setup.ts if needed');\n result.warnings.push(' - Move setupFilesAfterEnv content to setup.ts');\n result.warnings.push('');\n result.warnings.push('5. Remove Jest config files:');\n result.warnings.push(' - Delete jest.config.js/ts');\n result.warnings.push(' - Remove jest section from package.json');\n result.warnings.push('');\n result.warnings.push('6. Update CI/CD:');\n result.warnings.push(' - Replace jest commands with vitest');\n result.warnings.push(' - Update coverage reporting if needed');\n result.warnings.push('');\n result.warnings.push('7. Install dependencies:');\n result.warnings.push(' Run: npm install');\n result.warnings.push('');\n result.warnings.push('8. Run tests to verify:');\n result.warnings.push(' Run: npm test');\n\n return result;\n },\n\n name: 'Jest to Vitest',\n};\n","import { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext } from '../../types/index.js';\nimport type { Migration, MigrationResult } from './types.js';\n\n/**\n * Migrates a project from React 18 to React 19\n *\n * This migration updates React dependencies and provides guidance on\n * breaking changes and deprecated APIs in React 19.\n *\n * @remarks\n * React 19 introduces several breaking changes including:\n * - Removal of legacy context API\n * - Changes to concurrent features\n * - Updated lifecycle methods\n * - New JSX transform requirements\n *\n * This migration handles dependency updates and provides warnings for\n * manual code changes that may be required.\n *\n * @see https://react.dev/blog/2024/04/25/react-19\n */\nexport const react18ToReact19Migration: Migration = {\n breaking: true,\n codename: 'react18-to-react19',\n description: 'Migrate from React 18 to React 19',\n async execute(ctx: PluginContext): Promise<MigrationResult> {\n const result: MigrationResult = {\n changes: [],\n errors: [],\n success: true,\n warnings: [],\n };\n\n // Update package.json\n const pkgPath = join(ctx.cwd, 'package.json');\n if (!existsSync(pkgPath)) {\n result.errors.push('package.json not found');\n result.success = false;\n return result;\n }\n\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n let updated = false;\n\n // Update React dependencies\n if (pkg.dependencies?.react) {\n pkg.dependencies.react = '^19.0.0';\n pkg.dependencies['react-dom'] = '^19.0.0';\n updated = true;\n result.changes.push('Updated react and react-dom to ^19.0.0');\n }\n\n // Update TypeScript types\n if (pkg.devDependencies?.['@types/react']) {\n pkg.devDependencies['@types/react'] = '^19.0.0';\n pkg.devDependencies['@types/react-dom'] = '^19.0.0';\n updated = true;\n result.changes.push('Updated @types/react and @types/react-dom to ^19.0.0');\n }\n\n if (updated) {\n writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));\n } else {\n result.warnings.push('React not found in dependencies');\n }\n } catch (error) {\n result.errors.push(`Failed to update package.json: ${(error as Error).message}`);\n result.success = false;\n return result;\n }\n\n // Add breaking change warnings\n result.warnings.push('BREAKING CHANGES in React 19:');\n result.warnings.push('');\n result.warnings.push('1. Legacy Context API removed:');\n result.warnings.push(' - Replace contextTypes with Context.Provider/Consumer');\n result.warnings.push(' - Use useContext hook instead');\n result.warnings.push('');\n result.warnings.push('2. Deprecated lifecycle methods removed:');\n result.warnings.push(' - componentWillMount → useEffect');\n result.warnings.push(' - componentWillReceiveProps → getDerivedStateFromProps');\n result.warnings.push(' - componentWillUpdate → getSnapshotBeforeUpdate');\n result.warnings.push('');\n result.warnings.push('3. String refs deprecated:');\n result.warnings.push(' - Replace string refs with callback refs or useRef');\n result.warnings.push('');\n result.warnings.push('4. Update third-party libraries:');\n result.warnings.push(' - Ensure all React libraries support React 19');\n result.warnings.push(' - Check react-router, redux, etc. compatibility');\n result.warnings.push('');\n result.warnings.push('5. Run tests thoroughly after migration');\n result.warnings.push('');\n result.warnings.push('Run `npm install` to update dependencies');\n\n return result;\n },\n fromVersion: '18.x',\n name: 'React 18 to React 19',\n\n toVersion: '19.x',\n};\n","import { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext } from '../../types/index.js';\nimport type { Migration, MigrationResult } from './types.js';\n\n/**\n * Migrates a project from Vite 5 to Vite 6\n *\n * This migration handles the breaking changes introduced in Vite 6, including:\n * - Updating package.json dependencies to Vite 6\n * - Modifying vite.config.ts for new environment API\n * - Updating deprecated configuration options\n *\n * @remarks\n * Vite 6 introduces a new environment API and deprecates some options.\n * This migration automates the basic updates but manual review is recommended.\n *\n * @see https://vitejs.dev/guide/migration.html\n */\nexport const vite5ToVite6Migration: Migration = {\n breaking: true,\n codename: 'vite5-to-vite6',\n description: 'Migrate from Vite 5 to Vite 6',\n async execute(ctx: PluginContext): Promise<MigrationResult> {\n const result: MigrationResult = {\n changes: [],\n errors: [],\n success: true,\n warnings: [],\n };\n\n // Update package.json\n const pkgPath = join(ctx.cwd, 'package.json');\n if (existsSync(pkgPath)) {\n try {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n\n if (pkg.devDependencies?.vite) {\n pkg.devDependencies.vite = '^6.0.0';\n writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));\n result.changes.push('Updated vite to ^6.0.0 in package.json');\n } else {\n result.warnings.push('Vite not found in devDependencies');\n }\n } catch (error) {\n result.errors.push(`Failed to update package.json: ${(error as Error).message}`);\n result.success = false;\n }\n } else {\n result.errors.push('package.json not found');\n result.success = false;\n }\n\n // Update vite.config.ts\n const configPath = join(ctx.cwd, 'vite.config.ts');\n if (existsSync(configPath)) {\n try {\n let content = readFileSync(configPath, 'utf-8');\n\n // Vite 6 changes: environment API\n if (content.includes('process.env')) {\n result.warnings.push('Vite 6 uses new environment API. Review process.env usage.');\n }\n\n // Update deprecated options\n if (content.includes('optimizeDeps.include')) {\n content = content.replace(/optimizeDeps\\.include/g, 'optimizeDeps.entries');\n result.changes.push('Updated optimizeDeps.include to optimizeDeps.entries');\n }\n\n writeFileSync(configPath, content);\n result.changes.push('Updated vite.config.ts for Vite 6');\n } catch (error) {\n result.errors.push(`Failed to update vite.config.ts: ${(error as Error).message}`);\n }\n } else {\n result.warnings.push('vite.config.ts not found');\n }\n\n // Add general warnings\n result.warnings.push('Run `npm install` to update dependencies');\n result.warnings.push('Review Vite 6 changelog for additional breaking changes');\n result.warnings.push('Test your application thoroughly after migration');\n\n return result;\n },\n fromVersion: '5.x',\n name: 'Vite 5 to Vite 6',\n\n toVersion: '6.x',\n};\n","import { existsSync, readFileSync, writeFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext, CommandResult } from '../types/index.js';\n\nexport interface UpgradeOptions {\n interactive?: boolean;\n from?: string;\n dryRun?: boolean;\n force?: boolean;\n}\n\ninterface UpgradeStep {\n name: string;\n description: string;\n files: string[];\n execute: (ctx: PluginContext) => Promise<boolean>;\n reversible: boolean;\n}\n\nconst UPGRADE_STEPS: UpgradeStep[] = [\n {\n description: 'Update ESLint to flat config format',\n async execute(ctx: PluginContext): Promise<boolean> {\n const oldConfig = join(ctx.cwd, '.eslintrc.json');\n const newConfig = join(ctx.cwd, 'eslint.config.js');\n\n if (!existsSync(oldConfig)) {\n ctx.logger.info('No legacy ESLint config found, skipping');\n return true;\n }\n\n const flatConfig = `import js from '@eslint/js';\nimport tsPlugin from '@typescript-eslint/eslint-plugin';\nimport tsParser from '@typescript-eslint/parser';\nimport reactPlugin from 'eslint-plugin-react';\nimport reactHooksPlugin from 'eslint-plugin-react-hooks';\n\nexport default [\n js.configs.recommended,\n {\n files: ['**/*.{ts,tsx}'],\n languageOptions: {\n parser: tsParser,\n parserOptions: {\n ecmaVersion: 'latest',\n sourceType: 'module',\n ecmaFeatures: { jsx: true },\n },\n },\n plugins: {\n '@typescript-eslint': tsPlugin,\n 'react': reactPlugin,\n 'react-hooks': reactHooksPlugin,\n },\n rules: {\n ...tsPlugin.configs.recommended.rules,\n ...reactPlugin.configs.recommended.rules,\n ...reactHooksPlugin.configs.recommended.rules,\n },\n },\n];\n`;\n\n writeFileSync(newConfig, flatConfig);\n ctx.logger.success('Created eslint.config.js (flat config)');\n ctx.logger.warn('Review and delete .eslintrc.json manually if satisfied');\n\n return true;\n },\n files: ['.eslintrc.json', '.eslintrc.js', 'eslint.config.js'],\n name: 'eslint-config',\n reversible: true,\n },\n {\n description: 'Update Prettier config to latest best practices',\n async execute(ctx: PluginContext): Promise<boolean> {\n const configPath = join(ctx.cwd, '.prettierrc');\n\n const config = {\n arrowParens: 'always',\n endOfLine: 'lf',\n printWidth: 100,\n semi: true,\n singleQuote: true,\n tabWidth: 2,\n trailingComma: 'es5',\n };\n\n writeFileSync(configPath, JSON.stringify(config, null, 2));\n ctx.logger.success('Updated .prettierrc');\n\n return true;\n },\n files: ['.prettierrc', '.prettierrc.json', 'prettier.config.js'],\n name: 'prettier-config',\n reversible: true,\n },\n {\n description: 'Update TypeScript config to strict mode and latest features',\n async execute(ctx: PluginContext): Promise<boolean> {\n const tsconfigPath = join(ctx.cwd, 'tsconfig.json');\n\n if (!existsSync(tsconfigPath)) {\n ctx.logger.info('No tsconfig.json found, skipping');\n return true;\n }\n\n const existing = JSON.parse(readFileSync(tsconfigPath, 'utf-8'));\n\n // Merge with strict settings\n const updated = {\n ...existing,\n compilerOptions: {\n ...existing.compilerOptions,\n allowSyntheticDefaultImports: true,\n esModuleInterop: true,\n forceConsistentCasingInFileNames: true,\n isolatedModules: true,\n lib: ['ES2022', 'DOM', 'DOM.Iterable'],\n module: 'ESNext',\n moduleResolution: 'bundler',\n noImplicitOverride: true,\n noUncheckedIndexedAccess: true,\n skipLibCheck: true,\n strict: true,\n target: 'ES2022',\n verbatimModuleSyntax: true,\n },\n };\n\n writeFileSync(tsconfigPath, JSON.stringify(updated, null, 2));\n ctx.logger.success('Updated tsconfig.json to strict mode');\n\n return true;\n },\n files: ['tsconfig.json'],\n name: 'tsconfig',\n reversible: true,\n },\n {\n description: 'Update Vite config to latest best practices',\n async execute(ctx: PluginContext): Promise<boolean> {\n const configPath = join(ctx.cwd, 'vite.config.ts');\n\n if (!existsSync(configPath)) {\n ctx.logger.info('No vite.config.ts found, skipping');\n return true;\n }\n\n let content = readFileSync(configPath, 'utf-8');\n\n // Add modern optimizations if not present\n if (!content.includes('build.target')) {\n content = content.replace(\n 'export default defineConfig({',\n `export default defineConfig({\n build: {\n target: 'esnext',\n minify: 'esbuild',\n sourcemap: true,\n },`\n );\n }\n\n writeFileSync(configPath, content);\n ctx.logger.success('Updated vite.config.ts');\n\n return true;\n },\n files: ['vite.config.ts', 'vite.config.js'],\n name: 'vite-config',\n reversible: true,\n },\n {\n description: 'Update package.json scripts and engines',\n async execute(ctx: PluginContext): Promise<boolean> {\n const pkgPath = join(ctx.cwd, 'package.json');\n\n if (!existsSync(pkgPath)) {\n return true;\n }\n\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n\n // Update engines\n pkg.engines = {\n ...pkg.engines,\n node: '>=20.0.0',\n };\n\n // Ensure type: module\n if (!pkg.type) {\n pkg.type = 'module';\n }\n\n writeFileSync(pkgPath, JSON.stringify(pkg, null, 2));\n ctx.logger.success('Updated package.json');\n\n return true;\n },\n files: ['package.json'],\n name: 'package-json',\n reversible: true,\n },\n {\n description: 'Update .gitignore with modern patterns',\n async execute(ctx: PluginContext): Promise<boolean> {\n const gitignorePath = join(ctx.cwd, '.gitignore');\n\n const patterns = [\n '# Dependencies',\n 'node_modules',\n '',\n '# Build outputs',\n 'dist',\n 'build',\n '.cache',\n '',\n '# Environment',\n '.env.local',\n '.env.*.local',\n '',\n '# IDE',\n '.vscode/*',\n '!.vscode/extensions.json',\n '.idea',\n '*.swp',\n '*.swo',\n '',\n '# OS',\n '.DS_Store',\n 'Thumbs.db',\n '',\n '# Testing',\n 'coverage',\n '.nyc_output',\n '',\n '# Logs',\n '*.log',\n 'npm-debug.log*',\n 'yarn-debug.log*',\n 'yarn-error.log*',\n ];\n\n if (existsSync(gitignorePath)) {\n const existing = readFileSync(gitignorePath, 'utf-8');\n const newPatterns = patterns.filter((p) => !existing.includes(p));\n\n if (newPatterns.length > 0) {\n writeFileSync(gitignorePath, existing + '\\n' + newPatterns.join('\\n'));\n ctx.logger.success('Updated .gitignore');\n }\n } else {\n writeFileSync(gitignorePath, patterns.join('\\n'));\n ctx.logger.success('Created .gitignore');\n }\n\n return true;\n },\n files: ['.gitignore'],\n name: 'gitignore',\n reversible: false,\n },\n];\n\nexport async function upgradeCommand(\n options: UpgradeOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n ctx.logger.step('Analyzing project for upgrades...');\n\n const applicableSteps: UpgradeStep[] = [];\n\n for (const step of UPGRADE_STEPS) {\n const hasRelevantFiles = step.files.some((file) => existsSync(join(ctx.cwd, file)));\n\n if (hasRelevantFiles || step.files.length === 0) {\n applicableSteps.push(step);\n }\n }\n\n if (applicableSteps.length === 0) {\n ctx.logger.success('Project is up to date!');\n return { message: 'No upgrades needed', status: 'ok' };\n }\n\n ctx.logger.info(`\\nFound ${applicableSteps.length} upgrade(s) available:\\n`);\n\n for (const step of applicableSteps) {\n ctx.logger.info(` - ${step.name}: ${step.description}`);\n }\n\n if (options.dryRun) {\n ctx.logger.info('\\n[DRY RUN] No changes made');\n return { message: 'Dry run completed', status: 'ok' };\n }\n\n // Interactive mode\n if (options.interactive) {\n ctx.logger.info('\\nInteractive mode: Review each upgrade');\n // In a real implementation, use enquirer to prompt for each step\n ctx.logger.warn('Interactive mode requires manual confirmation (not implemented in this demo)');\n }\n\n // Execute upgrades\n const results: Array<{ step: string; success: boolean }> = [];\n\n for (const step of applicableSteps) {\n ctx.logger.step(`\\nApplying: ${step.name}`);\n\n try {\n const success = await step.execute(ctx);\n results.push({ step: step.name, success });\n\n if (success) {\n ctx.logger.success(`✓ ${step.name} completed`);\n } else {\n ctx.logger.warn(`⚠ ${step.name} skipped`);\n }\n } catch (error) {\n ctx.logger.error(`✗ ${step.name} failed`, error as Error);\n results.push({ step: step.name, success: false });\n }\n }\n\n const successCount = results.filter((r) => r.success).length;\n\n ctx.logger.success(\n `\\n✓ Upgrade completed: ${successCount}/${applicableSteps.length} steps applied`\n );\n\n if (successCount < applicableSteps.length) {\n ctx.logger.warn('Some upgrades were skipped or failed. Review the output above.');\n }\n\n return {\n data: { results },\n message: `Applied ${successCount} upgrades`,\n status: 'ok',\n };\n}\n","import { readFileSync, writeFileSync, readdirSync, statSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext, CommandResult } from '../types/index.js';\n\nexport interface RefactorOptions {\n dryRun?: boolean;\n}\n\nexport async function refactorRenameCommand(\n oldName: string,\n newName: string,\n options: RefactorOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n ctx.logger.step(`Refactoring: Rename ${oldName} → ${newName}`);\n\n const srcDir = join(ctx.cwd, 'src');\n const filesToUpdate: Array<{ file: string; changes: number }> = [];\n\n function scanDirectory(dir: string): void {\n const entries = readdirSync(dir);\n\n for (const entry of entries) {\n const fullPath = join(dir, entry);\n const stat = statSync(fullPath);\n\n if (stat.isDirectory()) {\n if (!entry.startsWith('.') && entry !== 'node_modules') {\n scanDirectory(fullPath);\n }\n } else if (entry.match(/\\.(ts|tsx|js|jsx)$/)) {\n const content = readFileSync(fullPath, 'utf-8');\n const regex = new RegExp(`\\\\b${oldName}\\\\b`, 'g');\n const matches = content.match(regex);\n\n if (matches) {\n filesToUpdate.push({ changes: matches.length, file: fullPath });\n\n if (!options.dryRun) {\n const updated = content.replace(regex, newName);\n writeFileSync(fullPath, updated);\n }\n }\n }\n }\n }\n\n scanDirectory(srcDir);\n\n if (filesToUpdate.length === 0) {\n ctx.logger.warn(`No occurrences of '${oldName}' found`);\n return { message: 'Nothing to refactor', status: 'ok' };\n }\n\n ctx.logger.info(`\\nFiles to update (${filesToUpdate.length}):`);\n for (const { changes, file } of filesToUpdate) {\n ctx.logger.info(` ${file} (${changes} changes)`);\n }\n\n if (options.dryRun) {\n ctx.logger.info('\\n[DRY RUN] No changes made');\n } else {\n ctx.logger.success(`\\n✓ Renamed ${oldName} → ${newName} in ${filesToUpdate.length} files`);\n }\n\n return {\n data: { filesUpdated: filesToUpdate.length },\n message: 'Refactor completed',\n status: 'ok',\n };\n}\n","import { writeFileSync, mkdirSync } from 'fs';\nimport { join } from 'path';\n\nimport type { PluginContext, CommandResult } from '../types/index.js';\n\nimport {\n generatePluginPackageJson,\n generatePluginTsConfig,\n generatePluginTsupConfig,\n generatePluginManifest,\n generatePluginIndexTemplate,\n generatePluginReadmeTemplate,\n generatePluginLicenseTemplate,\n generatePluginGitignoreTemplate,\n} from '../templates/generators/index.js';\n\nexport interface PluginInitOptions {\n name: string;\n description?: string;\n author?: string;\n}\n\nexport async function pluginInitCommand(\n options: PluginInitOptions,\n ctx: PluginContext\n): Promise<CommandResult> {\n const pluginName = options.name.startsWith('@kubit/')\n ? options.name\n : `@kubit/plugin-${options.name}`;\n\n const pluginDir = join(ctx.cwd, pluginName.replace('@kubit/', ''));\n\n ctx.logger.step(`Creating plugin: ${pluginName}`);\n\n // Create directory structure\n mkdirSync(join(pluginDir, 'src'), { recursive: true });\n mkdirSync(join(pluginDir, 'dist'), { recursive: true });\n\n const templateParams = {\n author: options.author || '',\n description: options.description || `Kubit CLI plugin: ${options.name}`,\n name: options.name,\n pluginName,\n year: new Date().getFullYear(),\n };\n\n // package.json\n const packageJson = generatePluginPackageJson(templateParams);\n\n writeFileSync(join(pluginDir, 'package.json'), JSON.stringify(packageJson, null, 2));\n\n // tsconfig.json\n const tsconfig = generatePluginTsConfig();\n writeFileSync(join(pluginDir, 'tsconfig.json'), JSON.stringify(tsconfig, null, 2));\n\n // tsup.config.ts\n const tsupConfig = generatePluginTsupConfig();\n writeFileSync(join(pluginDir, 'tsup.config.ts'), tsupConfig);\n\n // kubit.plugin.json (manifest)\n const manifest = generatePluginManifest(templateParams);\n writeFileSync(join(pluginDir, 'kubit.plugin.json'), JSON.stringify(manifest, null, 2));\n\n // src/index.ts\n const indexTs = generatePluginIndexTemplate(templateParams);\n\n writeFileSync(join(pluginDir, 'src', 'index.ts'), indexTs);\n\n // README.md\n const readme = generatePluginReadmeTemplate(templateParams);\n\n writeFileSync(join(pluginDir, 'README.md'), readme);\n\n // LICENSE\n const license = generatePluginLicenseTemplate(templateParams);\n\n writeFileSync(join(pluginDir, 'LICENSE'), license);\n\n // .gitignore\n const gitignore = generatePluginGitignoreTemplate();\n\n writeFileSync(join(pluginDir, '.gitignore'), gitignore);\n\n ctx.logger.success(`\\n✓ Plugin ${pluginName} created successfully!`);\n ctx.logger.info('\\nNext steps:');\n ctx.logger.info(` 1. cd ${pluginDir}`);\n ctx.logger.info(' 2. npm install');\n ctx.logger.info(' 3. npm run dev (watch mode)');\n ctx.logger.info(' 4. Implement your plugin in src/index.ts');\n\n return {\n data: { pluginDir, pluginName },\n message: 'Plugin initialized',\n status: 'ok',\n };\n}\n","/**\n * Generator templates exports\n */\n\nexport * from './react-component.js';\nexport * from './react-page.js';\nexport * from './react-hook.js';\nexport * from './plugin.js';\nexport * from './react-app-bernova.js';\n","/**\n * React Component Templates\n */\n\nexport interface ComponentTemplateParams {\n name: string;\n route?: string;\n}\n\n/**\n * Generate React component file content\n */\nexport function generateComponentTemplate(params: ComponentTemplateParams): string {\n const { name } = params;\n\n return `export interface ${name}Props {\n className?: string;\n children?: React.ReactNode;\n}\n\nexport function ${name}({ className, children }: ${name}Props) {\n return (\n <div className={className}>\n <h2>${name}</h2>\n {children}\n </div>\n );\n}\n`;\n}\n\n/**\n * Generate component index file\n */\nexport function generateComponentIndexTemplate(params: ComponentTemplateParams): string {\n const { name } = params;\n\n return `export { ${name} } from './${name}';\nexport type { ${name}Props } from './${name}';\n`;\n}\n\n/**\n * Generate component test file\n */\nexport function generateComponentTestTemplate(params: ComponentTemplateParams): string {\n const { name } = params;\n\n return `import { describe, it, expect } from 'vitest';\nimport { render, screen } from '@testing-library/react';\nimport { ${name} } from './${name}';\n\ndescribe('${name}', () => {\n it('renders without crashing', () => {\n render(<${name} />);\n expect(screen.getByText('${name}')).toBeInTheDocument();\n });\n\n it('renders children', () => {\n render(<${name}>Test Content</${name}>);\n expect(screen.getByText('Test Content')).toBeInTheDocument();\n });\n\n it('applies className', () => {\n const { container } = render(<${name} className=\"custom-class\" />);\n expect(container.firstChild).toHaveClass('custom-class');\n });\n});\n`;\n}\n\n/**\n * Generate Storybook story file\n */\nexport function generateComponentStoryTemplate(params: ComponentTemplateParams): string {\n const { name } = params;\n\n return `import type { Meta, StoryObj } from '@storybook/react';\nimport { ${name} } from './${name}';\n\nconst meta: Meta<typeof ${name}> = {\n title: 'Components/${name}',\n component: ${name},\n tags: ['autodocs'],\n argTypes: {\n className: { control: 'text' },\n },\n};\n\nexport default meta;\ntype Story = StoryObj<typeof ${name}>;\n\nexport const Default: Story = {\n args: {},\n};\n\nexport const WithChildren: Story = {\n args: {\n children: 'Custom content',\n },\n};\n`;\n}\n","/**\n * React Page Templates\n */\n\nexport interface PageTemplateParams {\n name: string;\n route: string;\n}\n\n/**\n * Generate React page file content\n */\nexport function generatePageTemplate(params: PageTemplateParams): string {\n const { name, route } = params;\n\n return `import { useEffect } from 'react';\n\nexport function ${name}Page() {\n useEffect(() => {\n document.title = '${name}';\n }, []);\n\n return (\n <div className=\"page-container\">\n <h1>${name} Page</h1>\n <p>Route: ${route}</p>\n </div>\n );\n}\n`;\n}\n\n/**\n * Generate page index file\n */\nexport function generatePageIndexTemplate(params: PageTemplateParams): string {\n const { name } = params;\n\n return `export { ${name}Page } from './${name}Page';\n`;\n}\n\n/**\n * Generate page test file\n */\nexport function generatePageTestTemplate(params: PageTemplateParams): string {\n const { name } = params;\n\n return `import { describe, it, expect } from 'vitest';\nimport { render, screen } from '@testing-library/react';\nimport { ${name}Page } from './${name}Page';\n\ndescribe('${name}Page', () => {\n it('renders page title', () => {\n render(<${name}Page />);\n expect(screen.getByText('${name} Page')).toBeInTheDocument();\n });\n\n it('sets document title', () => {\n render(<${name}Page />);\n expect(document.title).toBe('${name}');\n });\n});\n`;\n}\n","/**\n * React Hook Templates\n */\n\nexport interface HookTemplateParams {\n name: string;\n}\n\n/**\n * Generate React hook file content\n */\nexport function generateHookTemplate(params: HookTemplateParams): string {\n const { name } = params;\n\n return `import { useState, useEffect } from 'react';\n\nexport function ${name}() {\n const [value, setValue] = useState<unknown>(null);\n\n useEffect(() => {\n // Hook logic here\n }, []);\n\n return { value, setValue };\n}\n`;\n}\n\n/**\n * Generate hook test file\n */\nexport function generateHookTestTemplate(params: HookTemplateParams): string {\n const { name } = params;\n\n return `import { describe, it, expect } from 'vitest';\nimport { renderHook, act } from '@testing-library/react';\nimport { ${name} } from './${name}';\n\ndescribe('${name}', () => {\n it('initializes with null value', () => {\n const { result } = renderHook(() => ${name}());\n expect(result.current.value).toBeNull();\n });\n\n it('updates value', () => {\n const { result } = renderHook(() => ${name}());\n \n act(() => {\n result.current.setValue('test');\n });\n \n expect(result.current.value).toBe('test');\n });\n});\n`;\n}\n","/**\n * Plugin Templates\n */\n\nexport interface PluginTemplateParams {\n pluginName: string;\n name: string;\n description: string;\n author: string;\n year: number;\n}\n\n/**\n * Generate plugin package.json\n */\nexport function generatePluginPackageJson(params: PluginTemplateParams) {\n const { pluginName, description, author } = params;\n\n return {\n name: pluginName,\n version: '0.1.0',\n description: description || `Kubit CLI plugin: ${params.name}`,\n main: 'dist/index.js',\n types: 'dist/index.d.ts',\n type: 'module',\n keywords: ['kubit-forge', 'plugin'],\n author: author || '',\n license: 'MIT',\n peerDependencies: {\n 'kubit-forge': '^1.0.0',\n },\n devDependencies: {\n 'kubit-forge': '^1.0.0',\n typescript: '^5.3.3',\n tsup: '^8.0.1',\n },\n scripts: {\n build: 'tsup',\n dev: 'tsup --watch',\n prepublishOnly: 'npm run build',\n },\n files: ['dist', 'README.md', 'LICENSE'],\n };\n}\n\n/**\n * Generate plugin tsconfig.json\n */\nexport function generatePluginTsConfig() {\n return {\n extends: '../../tsconfig.json',\n compilerOptions: {\n outDir: './dist',\n rootDir: './src',\n declaration: true,\n },\n include: ['src/**/*'],\n exclude: ['node_modules', 'dist'],\n };\n}\n\n/**\n * Generate plugin tsup.config.ts\n */\nexport function generatePluginTsupConfig(): string {\n return `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 target: 'es2022',\n});\n`;\n}\n\n/**\n * Generate plugin manifest (kubit.plugin.json)\n */\nexport function generatePluginManifest(params: PluginTemplateParams) {\n const { pluginName, name, description, author } = params;\n\n return {\n name: pluginName,\n version: '0.1.0',\n description: description || `Kubit CLI plugin: ${name}`,\n author: author || '',\n capabilities: ['fs:read', 'fs:write', 'shell:run'],\n hooks: ['before:dev', 'after:build'],\n commands: [],\n generators: [],\n providers: [],\n };\n}\n\n/**\n * Generate plugin index.ts\n */\nexport function generatePluginIndexTemplate(params: PluginTemplateParams): string {\n const { pluginName } = params;\n\n return `import type { Plugin, PluginContext } from 'kubit-forge';\n\nexport const plugin: Plugin = {\n name: '${pluginName}',\n version: '0.1.0',\n\n async setup(ctx: PluginContext) {\n ctx.logger.info('Plugin ${pluginName} loaded');\n\n // Register hooks\n // ctx.hooks.on('before:dev', async () => {\n // ctx.logger.step('Running before:dev hook');\n // });\n\n // Register commands\n // ctx.commands.register({\n // name: 'my-command',\n // description: 'My custom command',\n // async execute(args, ctx) {\n // ctx.logger.success('Command executed!');\n // return { status: 'ok', message: 'Success' };\n // },\n // });\n\n // Register generators\n // ctx.generators.register({\n // name: 'my-generator',\n // description: 'Generate something',\n // async generate(name, options, ctx) {\n // ctx.logger.step(\\`Generating \\${name}...\\`);\n // return { status: 'ok', message: 'Generated' };\n // },\n // });\n },\n\n async teardown(ctx: PluginContext) {\n ctx.logger.debug('Plugin ${pluginName} unloaded');\n },\n};\n\nexport default plugin;\n`;\n}\n\n/**\n * Generate plugin README.md\n */\nexport function generatePluginReadmeTemplate(params: PluginTemplateParams): string {\n const { pluginName, name, description } = params;\n\n return `# ${pluginName}\n\n${description || 'A Kubit CLI plugin'}\n\n## Installation\n\n\\`\\`\\`bash\nnpm install ${pluginName}\n\\`\\`\\`\n\n## Usage\n\nAdd to your \\`kubit.config.toml\\`:\n\n\\`\\`\\`toml\n[plugins]\nenabled = [\"${pluginName}\"]\n\\`\\`\\`\n\n## Features\n\n- Feature 1\n- Feature 2\n\n## Configuration\n\n\\`\\`\\`toml\n[plugins.config.${name}]\noption1 = \"value1\"\n\\`\\`\\`\n\n## API\n\n### Commands\n\n- \\`kubit my-command\\` - Description\n\n### Generators\n\n- \\`kubit generate my-generator <name>\\` - Description\n\n### Hooks\n\n- \\`before:dev\\` - Runs before dev server starts\n- \\`after:build\\` - Runs after build completes\n\n## License\n\nMIT\n`;\n}\n\n/**\n * Generate plugin LICENSE\n */\nexport function generatePluginLicenseTemplate(params: PluginTemplateParams): string {\n const { author, year } = params;\n\n return `MIT License\n\nCopyright (c) ${year} ${author || 'Plugin Author'}\n\nPermission is hereby granted, free of charge, to any person obtaining a copy\nof this software and associated documentation files (the \"Software\"), to deal\nin the Software without restriction, including without limitation the rights\nto use, copy, modify, merge, publish, distribute, sublicense, and/or sell\ncopies of the Software, and to permit persons to whom the Software is\nfurnished to do so, subject to the following conditions:\n\nThe above copyright notice and this permission notice shall be included in all\ncopies or substantial portions of the Software.\n\nTHE SOFTWARE IS PROVIDED \"AS IS\", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR\nIMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,\nFITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE\nAUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER\nLIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,\nOUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE\nSOFTWARE.\n`;\n}\n\n/**\n * Generate plugin .gitignore\n */\nexport function generatePluginGitignoreTemplate(): string {\n return `node_modules\ndist\n*.log\n.DS_Store\n`;\n}\n","/**\n * React App Template with Bernova Design System\n */\n\nexport interface ReactAppBernovaOptions {\n name: string;\n typescript: boolean;\n testing: boolean;\n storybook: boolean;\n}\n\n/**\n * Generate package.json for React app with Bernova\n */\nexport function generatePackageJson(options: ReactAppBernovaOptions): string {\n const { name, typescript, testing } = options;\n\n const dependencies: Record<string, string> = {\n react: '^18.2.0',\n 'react-dom': '^18.2.0',\n '@kubit-ui-web/react-components': '^latest',\n '@kubit-ui-web/kubit-tokens': '^latest',\n };\n\n const devDependencies: Record<string, string> = {\n '@vitejs/plugin-react': '^4.2.1',\n vite: '^5.0.0',\n eslint: '^8.56.0',\n 'eslint-plugin-react': '^7.33.2',\n 'eslint-plugin-react-hooks': '^4.6.0',\n prettier: '^3.2.0',\n };\n\n if (typescript) {\n dependencies['@types/react'] = '^18.2.0';\n dependencies['@types/react-dom'] = '^18.2.0';\n devDependencies['typescript'] = '^5.3.3';\n devDependencies['@typescript-eslint/eslint-plugin'] = '^6.19.0';\n devDependencies['@typescript-eslint/parser'] = '^6.19.0';\n }\n\n if (testing) {\n devDependencies['vitest'] = '^1.2.0';\n devDependencies['@testing-library/react'] = '^14.1.2';\n devDependencies['@testing-library/jest-dom'] = '^6.2.0';\n devDependencies['@testing-library/user-event'] = '^14.5.2';\n devDependencies['jsdom'] = '^24.0.0';\n }\n\n const scripts: Record<string, string> = {\n dev: 'vite',\n build: 'vite build',\n preview: 'vite preview',\n lint: 'eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0',\n format: 'prettier --write \"src/**/*.{ts,tsx,js,jsx,json,css,md}\"',\n };\n\n if (testing) {\n scripts.test = 'vitest';\n scripts['test:ui'] = 'vitest --ui';\n scripts['test:coverage'] = 'vitest --coverage';\n }\n\n const packageJson = {\n name,\n private: true,\n version: '0.1.0',\n type: 'module',\n scripts,\n dependencies,\n devDependencies,\n };\n\n return JSON.stringify(packageJson, null, 2);\n}\n\n/**\n * Generate main App component with Bernova\n */\nexport function generateAppComponent(typescript: boolean): string {\n const typeAnnotation = typescript ? ': React.FC' : '';\n\n return `import { KubitProvider } from '@kubit-ui-web/react-components';\nimport { Button, Text, Container } from '@kubit-ui-web/react-components';\nimport { bernovaTheme } from './theme/bernova';\n\nconst App${typeAnnotation} = () => {\n return (\n <KubitProvider theme={bernovaTheme}>\n <Container>\n <Text variant=\"heading1\">Welcome to Your Bernova App</Text>\n <Text variant=\"body\">\n Start building amazing user interfaces with Bernova Design System\n </Text>\n <Button variant=\"primary\" onClick={() => alert('Hello Bernova!')}>\n Get Started\n </Button>\n </Container>\n </KubitProvider>\n );\n};\n\nexport default App;\n`;\n}\n\n/**\n * Generate Bernova theme configuration\n */\nexport function generateBernovaTheme(typescript: boolean): string {\n return `import type { Theme } from '@kubit-ui-web/react-components';\n\nexport const bernovaTheme${typescript ? ': Theme' : ''} = {\n // Bernova theme configuration\n // This will be populated by bernova CLI or manually configured\n colors: {\n primary: '#E60028',\n secondary: '#00A650',\n background: '#FFFFFF',\n text: '#000000',\n },\n typography: {\n fontFamily: 'SantanderHeadline, Arial, sans-serif',\n },\n spacing: {\n xs: '4px',\n sm: '8px',\n md: '16px',\n lg: '24px',\n xl: '32px',\n },\n};\n`;\n}\n\n/**\n * Generate vite.config with Bernova optimizations\n */\nexport function generateViteConfig(_typescript: boolean): string {\n return `import { defineConfig } from 'vite';\nimport react from '@vitejs/plugin-react';\n\n// https://vitejs.dev/config/\nexport default defineConfig({\n plugins: [react()],\n resolve: {\n alias: {\n '@': '/src',\n },\n },\n optimizeDeps: {\n include: ['@kubit-ui-web/react-components', '@kubit-ui-web/kubit-tokens'],\n },\n});\n`;\n}\n\n/**\n * Generate index.html with Bernova fonts\n */\nexport function generateIndexHtml(name: string): string {\n return `<!DOCTYPE html>\n<html lang=\"en\">\n <head>\n <meta charset=\"UTF-8\" />\n <link rel=\"icon\" type=\"image/svg+xml\" href=\"/vite.svg\" />\n <meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0\" />\n <title>${name}</title>\n \n <!-- Bernova Fonts -->\n <link rel=\"preconnect\" href=\"https://fonts.googleapis.com\" />\n <link rel=\"preconnect\" href=\"https://fonts.gstatic.com\" crossorigin />\n <link\n href=\"https://fonts.googleapis.com/css2?family=Inter:wght@400;500;600;700&display=swap\"\n rel=\"stylesheet\"\n />\n </head>\n <body>\n <div id=\"root\"></div>\n <script type=\"module\" src=\"/src/main.tsx\"></script>\n </body>\n</html>\n`;\n}\n\n/**\n * Generate main entry point\n */\nexport function generateMain(typescript: boolean): string {\n const ext = typescript ? 'tsx' : 'jsx';\n\n return `import React from 'react';\nimport ReactDOM from 'react-dom/client';\nimport App from './App.${ext}';\nimport './index.css';\n\nReactDOM.createRoot(document.getElementById('root')${typescript ? '!' : ''}).render(\n <React.StrictMode>\n <App />\n </React.StrictMode>\n);\n`;\n}\n\n/**\n * Generate global CSS with Bernova reset\n */\nexport function generateGlobalCSS(): string {\n return `/* Bernova Global Styles */\n* {\n margin: 0;\n padding: 0;\n box-sizing: border-box;\n}\n\n:root {\n font-family: Inter, system-ui, Avenir, Helvetica, Arial, sans-serif;\n line-height: 1.5;\n font-weight: 400;\n\n color-scheme: light dark;\n color: rgba(0, 0, 0, 0.87);\n background-color: #ffffff;\n\n font-synthesis: none;\n text-rendering: optimizeLegibility;\n -webkit-font-smoothing: antialiased;\n -moz-osx-font-smoothing: grayscale;\n}\n\nbody {\n margin: 0;\n display: flex;\n place-items: center;\n min-width: 320px;\n min-height: 100vh;\n}\n\n#root {\n width: 100%;\n margin: 0 auto;\n padding: 2rem;\n text-align: center;\n}\n`;\n}\n\n/**\n * Generate README with Bernova instructions\n */\nexport function generateReadme(name: string, typescript: boolean, testing: boolean): string {\n return `# ${name}\n\nReact application built with **Bernova Design System** by Kubit.\n\n## 🚀 Quick Start\n\n\\`\\`\\`bash\n# Install dependencies\npnpm install\n\n# Start development server\npnpm dev\n\n# Build for production\npnpm build\n\n# Preview production build\npnpm preview\n\\`\\`\\`\n\n## 🎨 Bernova Design System\n\nThis project uses [Kubit React Components](https://github.com/kubit-ui/kubit-react-components) with Bernova theme.\n\n### Available Components\n\n- Button\n- Text\n- Container\n- Input\n- Card\n- Modal\n- And many more...\n\n### Theme Configuration\n\nEdit \\`src/theme/bernova.${typescript ? 'ts' : 'js'}\\` to customize your theme:\n\n\\`\\`\\`${typescript ? 'typescript' : 'javascript'}\nexport const bernovaTheme = {\n colors: {\n primary: '#E60028',\n secondary: '#00A650',\n // ... more colors\n },\n typography: {\n fontFamily: 'SantanderHeadline, Arial, sans-serif',\n },\n};\n\\`\\`\\`\n\n## 📦 Scripts\n\n- \\`pnpm dev\\` - Start development server\n- \\`pnpm build\\` - Build for production\n- \\`pnpm preview\\` - Preview production build\n- \\`pnpm lint\\` - Lint code with ESLint\n- \\`pnpm format\\` - Format code with Prettier\n${testing ? '- `pnpm test` - Run tests with Vitest\\n- `pnpm test:ui` - Run tests with UI\\n- `pnpm test:coverage` - Generate coverage report' : ''}\n\n## 🛠️ Tech Stack\n\n- **React 18** - UI library\n- **TypeScript** - Type safety${typescript ? '' : ' (optional)'}\n- **Vite** - Build tool\n- **Bernova** - Design system\n- **Kubit Components** - Component library\n${testing ? '- **Vitest** - Testing framework\\n- **Testing Library** - React testing utilities' : ''}\n\n## 📚 Documentation\n\n- [Kubit React Components](https://github.com/kubit-ui/kubit-react-components)\n- [Bernova Design System](https://bernova.design)\n- [Vite Documentation](https://vitejs.dev)\n- [React Documentation](https://react.dev)\n\n## 🤝 Contributing\n\nContributions are welcome! Please read our contributing guidelines.\n\n## 📄 License\n\nMIT\n`;\n}\n\n/**\n * Generate complete React app structure with Bernova\n */\nexport function generateReactAppBernova(options: ReactAppBernovaOptions) {\n const { typescript } = options;\n const ext = typescript ? 'tsx' : 'jsx';\n\n return {\n 'package.json': generatePackageJson(options),\n 'vite.config.ts': generateViteConfig(typescript),\n 'index.html': generateIndexHtml(options.name),\n 'README.md': generateReadme(options.name, typescript, options.testing),\n [`src/App.${ext}`]: generateAppComponent(typescript),\n [`src/main.${ext}`]: generateMain(typescript),\n 'src/index.css': generateGlobalCSS(),\n [`src/theme/bernova.${typescript ? 'ts' : 'js'}`]: generateBernovaTheme(typescript),\n 'public/vite.svg': '', // Placeholder\n };\n}\n","import { config as loadEnv } from 'dotenv';\nimport { existsSync, readFileSync, copyFileSync } from 'fs';\nimport { join } from 'path';\n\nimport type { CommandResult, PluginContext, EnvValidationResult } from '../types/index.js';\n\nexport async function envInitCommand(ctx: PluginContext): Promise<CommandResult> {\n const envExamplePath = join(ctx.cwd, ctx.config.paths?.envExample || '.env.example');\n const envLocalPath = join(ctx.cwd, ctx.config.paths?.envLocal || '.env.local');\n\n if (!existsSync(envExamplePath)) {\n return {\n errors: [\n {\n code: 'ENV_EXAMPLE_NOT_FOUND',\n message: '.env.example file not found',\n solution: 'Create a .env.example file with your environment variables',\n },\n ],\n message: '.env.example not found',\n status: 'error',\n };\n }\n\n if (existsSync(envLocalPath)) {\n ctx.logger.warn('.env.local already exists');\n return {\n message: '.env.local already exists',\n status: 'ok',\n };\n }\n\n try {\n copyFileSync(envExamplePath, envLocalPath);\n ctx.logger.success('.env.local created from .env.example');\n ctx.logger.info('Please update .env.local with your actual values');\n\n return {\n message: '.env.local created',\n status: 'ok',\n };\n } catch (error) {\n return {\n message: `Failed to create .env.local: ${error instanceof Error ? error.message : 'Unknown error'}`,\n status: 'error',\n };\n }\n}\n\nexport async function envValidateCommand(ctx: PluginContext): Promise<CommandResult> {\n const envLocalPath = join(ctx.cwd, ctx.config.paths?.envLocal || '.env.local');\n\n if (!existsSync(envLocalPath)) {\n return {\n errors: [\n {\n code: 'ENV_LOCAL_NOT_FOUND',\n message: '.env.local file not found',\n solution: 'Run: kubit-forge env init',\n },\n ],\n message: '.env.local not found',\n status: 'error',\n };\n }\n\n // Load environment variables\n const result = loadEnv({ path: envLocalPath });\n\n if (result.error) {\n return {\n message: `Failed to load .env.local: ${result.error.message}`,\n status: 'error',\n };\n }\n\n const validation = validateEnv(ctx);\n\n if (!validation.valid) {\n ctx.logger.error('Environment validation failed');\n\n if (validation.missing.length > 0) {\n ctx.logger.error(`Missing required variables: ${validation.missing.join(', ')}`);\n }\n\n if (validation.invalid.length > 0) {\n ctx.logger.error(`Invalid variables: ${validation.invalid.join(', ')}`);\n }\n\n return {\n data: validation,\n message: 'Environment validation failed',\n status: 'error',\n };\n }\n\n if (validation.warnings.length > 0) {\n for (const warning of validation.warnings) {\n ctx.logger.warn(warning);\n }\n }\n\n ctx.logger.success('Environment validation passed');\n\n return {\n data: validation,\n message: 'Environment is valid',\n status: 'ok',\n };\n}\n\nexport async function envPrintCommand(ctx: PluginContext): Promise<CommandResult> {\n const envLocalPath = join(ctx.cwd, ctx.config.paths?.envLocal || '.env.local');\n\n if (!existsSync(envLocalPath)) {\n return {\n message: '.env.local not found',\n status: 'error',\n };\n }\n\n const content = readFileSync(envLocalPath, 'utf-8');\n const lines = content.split('\\n');\n\n ctx.logger.info('Environment variables:');\n ctx.logger.info('');\n\n for (const line of lines) {\n const trimmed = line.trim();\n if (trimmed && !trimmed.startsWith('#')) {\n const [key] = trimmed.split('=');\n if (key) {\n // Mask values for security\n ctx.logger.info(` ${key}=***`);\n }\n }\n }\n\n return {\n message: 'Environment variables printed',\n status: 'ok',\n };\n}\n\nfunction validateEnv(ctx: PluginContext): EnvValidationResult {\n const required = ctx.config.env?.required || [];\n const missing: string[] = [];\n const invalid: string[] = [];\n const warnings: string[] = [];\n\n for (const key of required) {\n const value = process.env[key];\n\n if (!value) {\n missing.push(key);\n } else if (value.includes('REPLACE_ME') || value.includes('YOUR_')) {\n warnings.push(`${key} appears to be a placeholder value`);\n }\n }\n\n return {\n invalid,\n missing,\n valid: missing.length === 0 && invalid.length === 0,\n warnings,\n };\n}\n","import type { Logger } from '../types/index.js';\n\n/**\n * Kubit Specification Version\n *\n * Defines the formal specification for kubit-forge ecosystem.\n * This allows third-party tooling, IDE plugins, and dashboards.\n */\nexport const KUBIT_SPEC_VERSION = '1.0.0';\n\n/**\n * Configuration specification\n */\nexport interface ConfigSpec {\n version: string;\n schema: {\n kubit: {\n cliVersion: string;\n };\n project: {\n name: string;\n type: 'web' | 'library';\n stack: 'react' | 'vanilla';\n language: 'ts' | 'js';\n packageManager: 'pnpm' | 'npm' | 'yarn';\n };\n quality?: {\n lint: boolean;\n format: boolean;\n typecheck: boolean;\n unitTest: boolean;\n };\n plugins?: {\n enabled: string[];\n };\n extends?: string[];\n };\n inheritance: {\n priority: ['flags', 'config', 'presets', 'defaults'];\n };\n}\n\n/**\n * Plugin manifest specification\n */\nexport interface PluginManifestSpec {\n name: string;\n version: string;\n kubitVersion: string;\n capabilities: string[];\n commands?: string[];\n generators?: string[];\n tasks?: string[];\n hooks?: string[];\n signature?: string;\n publisher?: string;\n}\n\n/**\n * Task contract specification\n */\nexport interface TaskContractSpec {\n name: string;\n inputs: {\n files?: string[];\n config?: string[];\n env?: string[];\n dependencies?: string[];\n };\n outputs: {\n files?: string[];\n artifacts?: string[];\n };\n cacheable: boolean;\n parallel?: boolean;\n}\n\n/**\n * JSON output contract for commands\n */\nexport interface CommandOutputSpec {\n status: 'ok' | 'error' | 'warning';\n message: string;\n data?: any;\n timestamp: string;\n version: string;\n spec: string;\n}\n\n/**\n * Kubit Spec validator\n */\nexport class KubitSpec {\n private version: string;\n\n constructor(_logger: Logger, version: string = KUBIT_SPEC_VERSION) {\n // Logger available for future use\n this.version = version;\n }\n\n /**\n * Validate configuration against spec\n */\n validateConfig(config: any): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!config.project) {\n errors.push('Missing required section: project');\n }\n\n if (!config.project?.name) {\n errors.push('Missing required field: project.name');\n }\n\n if (config.project?.type && !['web', 'library'].includes(config.project.type)) {\n errors.push(`Invalid project.type: ${config.project.type}`);\n }\n\n if (config.project?.stack && !['react', 'vanilla'].includes(config.project.stack)) {\n errors.push(`Invalid project.stack: ${config.project.stack}`);\n }\n\n return {\n errors,\n valid: errors.length === 0,\n };\n }\n\n /**\n * Validate plugin manifest against spec\n */\n validatePluginManifest(manifest: any): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!manifest.name) {\n errors.push('Missing required field: name');\n }\n\n if (!manifest.version) {\n errors.push('Missing required field: version');\n }\n\n if (!manifest.kubitVersion) {\n errors.push('Missing required field: kubitVersion');\n }\n\n if (!Array.isArray(manifest.capabilities)) {\n errors.push('Missing or invalid field: capabilities (must be array)');\n }\n\n return {\n errors,\n valid: errors.length === 0,\n };\n }\n\n /**\n * Validate task contract against spec\n */\n validateTaskContract(task: any): { valid: boolean; errors: string[] } {\n const errors: string[] = [];\n\n if (!task.name) {\n errors.push('Missing required field: name');\n }\n\n if (!task.inputs) {\n errors.push('Missing required field: inputs');\n }\n\n if (!task.outputs) {\n errors.push('Missing required field: outputs');\n }\n\n if (typeof task.cacheable !== 'boolean') {\n errors.push('Missing or invalid field: cacheable (must be boolean)');\n }\n\n return {\n errors,\n valid: errors.length === 0,\n };\n }\n\n /**\n * Get spec information\n */\n getSpecInfo() {\n return {\n configSpec: this.getConfigSpec(),\n outputContractSpec: this.getOutputContractSpec(),\n pluginManifestSpec: this.getPluginManifestSpec(),\n taskContractSpec: this.getTaskContractSpec(),\n version: this.version,\n };\n }\n\n private getConfigSpec(): any {\n return {\n inheritance: {\n priority: ['flags', 'config', 'presets', 'defaults'],\n },\n schema: {\n extends: [],\n kubit: {\n cliVersion: '^3.0.0',\n },\n plugins: {\n enabled: [],\n },\n project: {\n language: 'ts | js',\n name: 'string',\n packageManager: 'pnpm | npm | yarn',\n stack: 'react | vanilla',\n type: 'web | library',\n },\n quality: {\n format: true,\n lint: true,\n typecheck: true,\n unitTest: true,\n },\n },\n version: this.version,\n };\n }\n\n private getPluginManifestSpec(): PluginManifestSpec {\n return {\n capabilities: ['fs:read', 'fs:write'],\n commands: ['command-name'],\n generators: ['generator-kind'],\n hooks: ['before:dev', 'after:build'],\n kubitVersion: '^3.0.0',\n name: '@scope/plugin-name',\n publisher: 'optional-publisher',\n signature: 'optional-signature',\n tasks: ['task-name'],\n version: '1.0.0',\n };\n }\n\n private getTaskContractSpec(): TaskContractSpec {\n return {\n cacheable: true,\n inputs: {\n config: ['tsconfig.json'],\n dependencies: ['typescript'],\n env: ['NODE_ENV'],\n files: ['src/**/*.ts'],\n },\n name: 'task-name',\n outputs: {\n artifacts: ['build-info.json'],\n files: ['dist/**/*'],\n },\n parallel: false,\n };\n }\n\n private getOutputContractSpec(): CommandOutputSpec {\n return {\n data: {},\n message: 'Command completed successfully',\n spec: this.version,\n status: 'ok',\n timestamp: new Date().toISOString(),\n version: '3.0.0',\n };\n }\n\n /**\n * Explain spec for a specific area\n */\n explainSpec(area: 'config' | 'plugin' | 'task' | 'output'): string {\n switch (area) {\n case 'config':\n return this.explainConfigSpec();\n case 'plugin':\n return this.explainPluginSpec();\n case 'task':\n return this.explainTaskSpec();\n case 'output':\n return this.explainOutputSpec();\n default:\n return 'Unknown spec area';\n }\n }\n\n private explainConfigSpec(): string {\n return `\nKubit Config Specification v${this.version}\n\nConfiguration follows a strict hierarchy:\n1. CLI flags (highest priority)\n2. Project config (kubit.config.toml)\n3. Presets (via extends)\n4. Defaults (lowest priority)\n\nRequired fields:\n- project.name: Project name\n- project.type: \"web\" or \"library\"\n- project.stack: \"react\" or \"vanilla\"\n\nOptional fields:\n- quality.*: Quality check settings\n- plugins.enabled: List of enabled plugins\n- extends: Config presets to inherit from\n`;\n }\n\n private explainPluginSpec(): string {\n return `\nKubit Plugin Manifest Specification v${this.version}\n\nRequired fields:\n- name: Plugin name (scoped recommended)\n- version: Semantic version\n- kubitVersion: Compatible CLI version\n- capabilities: Array of required capabilities\n\nOptional fields:\n- commands: Custom commands provided\n- generators: Code generators provided\n- tasks: Build tasks provided\n- hooks: Lifecycle hooks used\n- signature: Plugin signature for verification\n- publisher: Publisher identity\n`;\n }\n\n private explainTaskSpec(): string {\n return `\nKubit Task Contract Specification v${this.version}\n\nTasks must declare:\n- name: Unique task identifier\n- inputs: What affects the task (files, config, env, deps)\n- outputs: What the task produces\n- cacheable: Whether results can be cached\n\nThis enables:\n- Intelligent caching\n- Parallel execution\n- Reproducible builds\n- DAG optimization\n`;\n }\n\n private explainOutputSpec(): string {\n return `\nKubit Command Output Specification v${this.version}\n\nAll commands with --json must output:\n{\n \"status\": \"ok\" | \"error\" | \"warning\",\n \"message\": \"Human-readable message\",\n \"data\": { /* command-specific data */ },\n \"timestamp\": \"ISO 8601 timestamp\",\n \"version\": \"CLI version\",\n \"spec\": \"Spec version\"\n}\n\nThis enables:\n- IDE integration\n- CI/CD tooling\n- Dashboard creation\n- Automated workflows\n`;\n }\n}\n","import type { Logger } from '../types/index.js';\n\n/**\n * Task definition with inputs/outputs for caching\n */\nexport interface Task {\n name: string;\n description: string;\n inputs: {\n files?: string[];\n config?: string[];\n env?: string[];\n dependencies?: string[];\n };\n outputs: {\n files?: string[];\n artifacts?: string[];\n };\n cacheable: boolean;\n parallel?: boolean;\n dependsOn?: string[];\n execute: () => Promise<TaskResult>;\n}\n\n/**\n * Task execution result\n */\nexport interface TaskResult {\n success: boolean;\n cached?: boolean;\n duration?: number;\n outputs?: string[];\n error?: string;\n}\n\n/**\n * Task graph node\n */\ninterface TaskNode {\n task: Task;\n dependencies: Set<string>;\n dependents: Set<string>;\n}\n\n/**\n * Task execution engine with DAG and intelligent caching\n *\n * Features:\n * - DAG-based task execution\n * - Parallel execution where possible\n * - Input/output tracking for cache\n * - Task contracts for reproducibility\n */\nexport class TaskEngine {\n private logger: Logger;\n private tasks: Map<string, TaskNode>;\n private executed: Set<string>;\n private results: Map<string, TaskResult>;\n\n constructor(logger: Logger) {\n this.logger = logger;\n this.tasks = new Map();\n this.executed = new Set();\n this.results = new Map();\n }\n\n /**\n * Register a task\n */\n registerTask(task: Task): void {\n const node: TaskNode = {\n dependencies: new Set(task.dependsOn || []),\n dependents: new Set(),\n task,\n };\n\n this.tasks.set(task.name, node);\n\n // Update dependents\n for (const dep of node.dependencies) {\n const depNode = this.tasks.get(dep);\n if (depNode) {\n depNode.dependents.add(task.name);\n }\n }\n }\n\n /**\n * Get task execution order (topological sort)\n */\n getExecutionOrder(taskNames: string[]): string[] {\n const order: string[] = [];\n const visited = new Set<string>();\n const visiting = new Set<string>();\n\n const visit = (name: string) => {\n if (visited.has(name)) {\n return;\n }\n if (visiting.has(name)) {\n throw new Error(`Circular dependency detected: ${name}`);\n }\n\n visiting.add(name);\n\n const node = this.tasks.get(name);\n if (!node) {\n throw new Error(`Task not found: ${name}`);\n }\n\n // Visit dependencies first\n for (const dep of node.dependencies) {\n visit(dep);\n }\n\n visiting.delete(name);\n visited.add(name);\n order.push(name);\n };\n\n for (const name of taskNames) {\n visit(name);\n }\n\n return order;\n }\n\n /**\n * Get task graph as adjacency list\n */\n getTaskGraph(): Record<string, string[]> {\n const graph: Record<string, string[]> = {};\n\n for (const [name, node] of this.tasks) {\n graph[name] = Array.from(node.dependencies);\n }\n\n return graph;\n }\n\n /**\n * Get tasks that can run in parallel\n */\n getParallelBatches(taskNames: string[]): string[][] {\n const order = this.getExecutionOrder(taskNames);\n const batches: string[][] = [];\n const completed = new Set<string>();\n\n while (completed.size < order.length) {\n const batch: string[] = [];\n\n for (const name of order) {\n if (completed.has(name)) {\n continue;\n }\n\n const node = this.tasks.get(name)!;\n const task = node.task;\n\n // Check if all dependencies are completed\n const depsCompleted = Array.from(node.dependencies).every((dep) => completed.has(dep));\n\n if (depsCompleted && task.parallel !== false) {\n batch.push(name);\n }\n }\n\n if (batch.length === 0) {\n // No parallel tasks, take first available\n for (const name of order) {\n if (!completed.has(name)) {\n const node = this.tasks.get(name)!;\n const depsCompleted = Array.from(node.dependencies).every((dep) => completed.has(dep));\n if (depsCompleted) {\n batch.push(name);\n break;\n }\n }\n }\n }\n\n if (batch.length === 0) {\n throw new Error('Unable to schedule tasks (possible circular dependency)');\n }\n\n batches.push(batch);\n batch.forEach((name) => completed.add(name));\n }\n\n return batches;\n }\n\n /**\n * Execute tasks in optimal order\n */\n async executeTasks(taskNames: string[]): Promise<Map<string, TaskResult>> {\n this.executed.clear();\n this.results.clear();\n\n const batches = this.getParallelBatches(taskNames);\n\n this.logger.info(`Executing ${taskNames.length} task(s) in ${batches.length} batch(es)`);\n\n for (let i = 0; i < batches.length; i++) {\n const batch = batches[i];\n\n if (batch.length === 1) {\n this.logger.step(`[${i + 1}/${batches.length}] Running: ${batch[0]}`);\n } else {\n this.logger.step(`[${i + 1}/${batches.length}] Running ${batch.length} tasks in parallel`);\n }\n\n // Execute batch in parallel\n const promises = batch.map((name) => this.executeTask(name));\n const results = await Promise.all(promises);\n\n // Store results\n batch.forEach((name, idx) => {\n this.results.set(name, results[idx]);\n });\n }\n\n return this.results;\n }\n\n /**\n * Execute a single task\n */\n private async executeTask(name: string): Promise<TaskResult> {\n const node = this.tasks.get(name);\n if (!node) {\n throw new Error(`Task not found: ${name}`);\n }\n\n const task = node.task;\n const startTime = Date.now();\n\n try {\n this.logger.debug(`Executing task: ${name}`);\n\n const result = await task.execute();\n const duration = Date.now() - startTime;\n\n this.executed.add(name);\n\n return {\n ...result,\n duration,\n };\n } catch (error) {\n const duration = Date.now() - startTime;\n\n return {\n duration,\n error: (error as Error).message,\n success: false,\n };\n }\n }\n\n /**\n * Explain why a task would run or be cached\n */\n explainTask(name: string): string {\n const node = this.tasks.get(name);\n if (!node) {\n return `Task '${name}' not found`;\n }\n\n const task = node.task;\n let explanation = `Task: ${task.name}\\n`;\n explanation += `Description: ${task.description}\\n\\n`;\n\n explanation += 'Inputs:\\n';\n if (task.inputs.files?.length) {\n explanation += ` Files: ${task.inputs.files.join(', ')}\\n`;\n }\n if (task.inputs.config?.length) {\n explanation += ` Config: ${task.inputs.config.join(', ')}\\n`;\n }\n if (task.inputs.env?.length) {\n explanation += ` Env: ${task.inputs.env.join(', ')}\\n`;\n }\n if (task.inputs.dependencies?.length) {\n explanation += ` Dependencies: ${task.inputs.dependencies.join(', ')}\\n`;\n }\n\n explanation += '\\nOutputs:\\n';\n if (task.outputs.files?.length) {\n explanation += ` Files: ${task.outputs.files.join(', ')}\\n`;\n }\n if (task.outputs.artifacts?.length) {\n explanation += ` Artifacts: ${task.outputs.artifacts.join(', ')}\\n`;\n }\n\n explanation += `\\nCacheable: ${task.cacheable ? 'Yes' : 'No'}\\n`;\n explanation += `Parallel: ${task.parallel !== false ? 'Yes' : 'No'}\\n`;\n\n if (node.dependencies.size > 0) {\n explanation += `\\nDependencies: ${Array.from(node.dependencies).join(', ')}\\n`;\n }\n\n if (node.dependents.size > 0) {\n explanation += `Dependents: ${Array.from(node.dependents).join(', ')}\\n`;\n }\n\n return explanation;\n }\n\n /**\n * List all registered tasks\n */\n listTasks(): Array<{ name: string; description: string; cacheable: boolean }> {\n return Array.from(this.tasks.values()).map((node) => ({\n cacheable: node.task.cacheable,\n description: node.task.description,\n name: node.task.name,\n }));\n }\n\n /**\n * Get task statistics\n */\n getStats() {\n const total = this.tasks.size;\n const executed = this.executed.size;\n const successful = Array.from(this.results.values()).filter((r) => r.success).length;\n const cached = Array.from(this.results.values()).filter((r) => r.cached).length;\n\n return {\n cached,\n cacheHitRate: executed > 0 ? (cached / executed) * 100 : 0,\n executed,\n successful,\n total,\n };\n }\n}\n","import { existsSync, readFileSync, writeFileSync, mkdirSync } from 'fs';\nimport { join, dirname } from 'path';\n\nimport type { Logger, PluginContext } from '../types/index.js';\n\n/**\n * Recipe Step Types\n */\nexport type RecipeStepType =\n | 'add-feature' // Add a feature using add command\n | 'run-command' // Run a CLI command\n | 'create-file' // Create a file\n | 'modify-file' // Modify existing file\n | 'delete-file' // Delete a file\n | 'install-deps' // Install dependencies\n | 'run-script' // Run npm/yarn script\n | 'exec' // Execute shell command\n | 'prompt' // Prompt user for input\n | 'log' // Log message\n | 'conditional' // Conditional execution\n | 'parallel' // Run steps in parallel\n | 'sequence' // Run steps in sequence\n | 'loop' // Loop over items\n | 'wait' // Wait for duration\n | 'validate'; // Validate condition\n\n/**\n * Base Recipe Step\n */\nexport interface RecipeStep {\n type: RecipeStepType;\n name?: string;\n description?: string;\n skip?: boolean;\n condition?: string | ((ctx: RecipeContext) => boolean | Promise<boolean>);\n onError?: 'stop' | 'continue' | 'retry';\n retries?: number;\n}\n\n/**\n * Specific Step Types\n */\nexport interface AddFeatureStep extends RecipeStep {\n type: 'add-feature';\n feature: string;\n options?: Record<string, any>;\n}\n\nexport interface RunCommandStep extends RecipeStep {\n type: 'run-command';\n command: string;\n args?: string[];\n}\n\nexport interface CreateFileStep extends RecipeStep {\n type: 'create-file';\n path: string;\n content: string | ((ctx: RecipeContext) => string);\n overwrite?: boolean;\n}\n\nexport interface ModifyFileStep extends RecipeStep {\n type: 'modify-file';\n path: string;\n search: string | RegExp;\n replace: string | ((match: string, ctx: RecipeContext) => string);\n}\n\nexport interface DeleteFileStep extends RecipeStep {\n type: 'delete-file';\n path: string;\n}\n\nexport interface InstallDepsStep extends RecipeStep {\n type: 'install-deps';\n dependencies?: string[];\n devDependencies?: string[];\n}\n\nexport interface RunScriptStep extends RecipeStep {\n type: 'run-script';\n script: string;\n}\n\nexport interface ExecStep extends RecipeStep {\n type: 'exec';\n command: string;\n cwd?: string;\n}\n\nexport interface PromptStep extends RecipeStep {\n type: 'prompt';\n message: string;\n variable: string;\n default?: string;\n choices?: string[];\n}\n\nexport interface LogStep extends RecipeStep {\n type: 'log';\n message: string;\n level?: 'info' | 'success' | 'warn' | 'error';\n}\n\nexport interface ConditionalStep extends RecipeStep {\n type: 'conditional';\n condition: string | ((ctx: RecipeContext) => boolean | Promise<boolean>);\n then: RecipeStepUnion[];\n else?: RecipeStepUnion[];\n}\n\nexport interface ParallelStep extends RecipeStep {\n type: 'parallel';\n steps: RecipeStepUnion[];\n}\n\nexport interface SequenceStep extends RecipeStep {\n type: 'sequence';\n steps: RecipeStepUnion[];\n}\n\nexport interface LoopStep extends RecipeStep {\n type: 'loop';\n items: any[] | string; // Array or variable name\n variable: string; // Variable name for current item\n steps: RecipeStepUnion[];\n}\n\nexport interface WaitStep extends RecipeStep {\n type: 'wait';\n duration: number; // milliseconds\n}\n\nexport interface ValidateStep extends RecipeStep {\n type: 'validate';\n condition: string | ((ctx: RecipeContext) => boolean | Promise<boolean>);\n message?: string;\n}\n\nexport type RecipeStepUnion =\n | AddFeatureStep\n | RunCommandStep\n | CreateFileStep\n | ModifyFileStep\n | DeleteFileStep\n | InstallDepsStep\n | RunScriptStep\n | ExecStep\n | PromptStep\n | LogStep\n | ConditionalStep\n | ParallelStep\n | SequenceStep\n | LoopStep\n | WaitStep\n | ValidateStep;\n\n/**\n * Recipe Definition (Enhanced)\n */\nexport interface RecipeV2 {\n name: string;\n version: string;\n description: string;\n author?: string;\n tags?: string[];\n\n /** Variables that can be used in steps */\n variables?: Record<string, any>;\n\n /** Prerequisites to check before running */\n prerequisites?: {\n files?: string[];\n dependencies?: string[];\n commands?: string[];\n config?: Record<string, any>;\n };\n\n /** Recipe steps to execute */\n steps: RecipeStepUnion[];\n\n /** Post-execution instructions */\n instructions?: string;\n\n /** Rollback steps if recipe fails */\n rollback?: RecipeStepUnion[];\n}\n\n/**\n * Recipe Context\n */\nexport interface RecipeContext {\n cwd: string;\n logger: Logger;\n variables: Map<string, any>;\n pluginContext?: PluginContext;\n dryRun?: boolean;\n}\n\n/**\n * Recipe Execution Result\n */\nexport interface RecipeExecutionResult {\n success: boolean;\n stepsExecuted: number;\n stepsFailed: number;\n stepsSkipped: number;\n duration: number;\n errors: Array<{ step: string; error: string }>;\n warnings: string[];\n outputs: Record<string, any>;\n}\n\n/**\n * Enhanced Recipe Engine\n * Supports complex workflows with conditional logic, loops, and parallel execution\n */\n// Export as main RecipeEngine\nexport { RecipeEngineV2 as RecipeEngine };\nexport { RecipeV2 as Recipe };\n\nclass RecipeEngineV2 {\n private logger: Logger;\n private cwd: string;\n private recipes: Map<string, RecipeV2>;\n private pluginContext?: PluginContext;\n\n constructor(logger: Logger, cwd: string, pluginContext?: PluginContext) {\n this.logger = logger;\n this.cwd = cwd;\n this.pluginContext = pluginContext;\n this.recipes = new Map();\n }\n\n /**\n * Register a recipe\n */\n registerRecipe(recipe: RecipeV2): void {\n this.recipes.set(recipe.name, recipe);\n this.logger.debug(`Registered recipe: ${recipe.name}`);\n }\n\n /**\n * Load recipe from file\n */\n loadRecipe(path: string): RecipeV2 {\n const content = readFileSync(path, 'utf-8');\n const recipe = JSON.parse(content) as RecipeV2;\n this.registerRecipe(recipe);\n return recipe;\n }\n\n /**\n * Get recipe by name\n */\n getRecipe(name: string): RecipeV2 | undefined {\n return this.recipes.get(name);\n }\n\n /**\n * List all registered recipes\n */\n listRecipes(): RecipeV2[] {\n return Array.from(this.recipes.values());\n }\n\n /**\n * Check prerequisites\n */\n async checkPrerequisites(recipe: RecipeV2): Promise<{ met: boolean; missing: string[] }> {\n const missing: string[] = [];\n\n if (recipe.prerequisites) {\n // Check files\n if (recipe.prerequisites.files) {\n for (const file of recipe.prerequisites.files) {\n if (!existsSync(join(this.cwd, file))) {\n missing.push(`File: ${file}`);\n }\n }\n }\n\n // Check dependencies\n if (recipe.prerequisites.dependencies) {\n const packageJsonPath = join(this.cwd, 'package.json');\n if (existsSync(packageJsonPath)) {\n const packageJson = JSON.parse(readFileSync(packageJsonPath, 'utf-8'));\n const allDeps = {\n ...packageJson.dependencies,\n ...packageJson.devDependencies,\n };\n\n for (const dep of recipe.prerequisites.dependencies) {\n if (!allDeps[dep]) {\n missing.push(`Dependency: ${dep}`);\n }\n }\n }\n }\n\n // Check commands\n if (recipe.prerequisites.commands) {\n for (const cmd of recipe.prerequisites.commands) {\n // Could check if command exists in PATH\n // For now, just log\n this.logger.debug(`Checking command: ${cmd}`);\n }\n }\n }\n\n return {\n met: missing.length === 0,\n missing,\n };\n }\n\n /**\n * Execute a recipe\n */\n async executeRecipe(\n recipeName: string,\n options?: { dryRun?: boolean; variables?: Record<string, any> }\n ): Promise<RecipeExecutionResult> {\n const startTime = Date.now();\n const recipe = this.recipes.get(recipeName);\n\n if (!recipe) {\n throw new Error(`Recipe not found: ${recipeName}`);\n }\n\n this.logger.info(`Executing recipe: ${recipe.name}`);\n this.logger.info(`Description: ${recipe.description}`);\n\n // Check prerequisites\n const prereqCheck = await this.checkPrerequisites(recipe);\n if (!prereqCheck.met) {\n this.logger.error('Prerequisites not met:');\n prereqCheck.missing.forEach((m) => this.logger.error(` - ${m}`));\n return {\n duration: Date.now() - startTime,\n errors: [{ error: 'Prerequisites not met', step: 'prerequisites' }],\n outputs: {},\n stepsExecuted: 0,\n stepsFailed: 0,\n stepsSkipped: 0,\n success: false,\n warnings: [],\n };\n }\n\n // Create context\n const context: RecipeContext = {\n cwd: this.cwd,\n dryRun: options?.dryRun,\n logger: this.logger,\n pluginContext: this.pluginContext,\n variables: new Map(Object.entries({ ...recipe.variables, ...options?.variables })),\n };\n\n // Execute steps\n const result: RecipeExecutionResult = {\n duration: 0,\n errors: [],\n outputs: {},\n stepsExecuted: 0,\n stepsFailed: 0,\n stepsSkipped: 0,\n success: true,\n warnings: [],\n };\n\n try {\n await this.executeSteps(recipe.steps, context, result);\n } catch (error) {\n result.success = false;\n result.errors.push({\n error: error instanceof Error ? error.message : String(error),\n step: 'execution',\n });\n\n // Execute rollback if available\n if (recipe.rollback && recipe.rollback.length > 0) {\n this.logger.warn('Executing rollback steps...');\n try {\n await this.executeSteps(recipe.rollback, context, result);\n } catch (rollbackError) {\n this.logger.error('Rollback failed:', rollbackError as Error);\n }\n }\n }\n\n result.duration = Date.now() - startTime;\n\n // Show instructions\n if (result.success && recipe.instructions) {\n this.logger.info('\\n📝 Next steps:');\n this.logger.info(recipe.instructions);\n }\n\n return result;\n }\n\n /**\n * Execute a list of steps\n */\n private async executeSteps(\n steps: RecipeStepUnion[],\n context: RecipeContext,\n result: RecipeExecutionResult\n ): Promise<void> {\n for (const step of steps) {\n // Check skip condition\n if (step.skip) {\n result.stepsSkipped++;\n continue;\n }\n\n // Check condition\n if (step.condition) {\n const shouldExecute = await this.evaluateCondition(step.condition, context);\n if (!shouldExecute) {\n result.stepsSkipped++;\n continue;\n }\n }\n\n // Log step\n if (step.name) {\n context.logger.step(step.name);\n } else if (step.description) {\n context.logger.info(step.description);\n }\n\n // Execute step\n try {\n await this.executeStep(step, context, result);\n result.stepsExecuted++;\n } catch (error) {\n result.stepsFailed++;\n const errorMessage = error instanceof Error ? error.message : String(error);\n result.errors.push({\n error: errorMessage,\n step: step.name || step.type,\n });\n\n // Handle error based on onError strategy\n if (step.onError === 'stop' || !step.onError) {\n throw error;\n } else if (step.onError === 'continue') {\n context.logger.warn(`Step failed but continuing: ${errorMessage}`);\n } else if (step.onError === 'retry' && step.retries) {\n // Retry logic\n for (let i = 0; i < step.retries; i++) {\n context.logger.info(`Retrying step (${i + 1}/${step.retries})...`);\n try {\n await this.executeStep(step, context, result);\n result.stepsExecuted++;\n break;\n } catch (retryError) {\n if (i === step.retries - 1) {\n throw retryError;\n }\n }\n }\n }\n }\n }\n }\n\n /**\n * Execute a single step\n */\n private async executeStep(\n step: RecipeStepUnion,\n context: RecipeContext,\n result: RecipeExecutionResult\n ): Promise<void> {\n if (context.dryRun) {\n context.logger.info(`[DRY RUN] Would execute: ${step.type}`);\n return;\n }\n\n switch (step.type) {\n case 'add-feature':\n await this.executeAddFeature(step as AddFeatureStep, context);\n break;\n case 'run-command':\n await this.executeRunCommand(step as RunCommandStep, context);\n break;\n case 'create-file':\n await this.executeCreateFile(step as CreateFileStep, context);\n break;\n case 'modify-file':\n await this.executeModifyFile(step as ModifyFileStep, context);\n break;\n case 'delete-file':\n await this.executeDeleteFile(step as DeleteFileStep, context);\n break;\n case 'install-deps':\n await this.executeInstallDeps(step as InstallDepsStep, context);\n break;\n case 'run-script':\n await this.executeRunScript(step as RunScriptStep, context);\n break;\n case 'exec':\n await this.executeExec(step as ExecStep, context);\n break;\n case 'prompt':\n await this.executePrompt(step as PromptStep, context);\n break;\n case 'log':\n await this.executeLog(step as LogStep, context);\n break;\n case 'conditional':\n await this.executeConditional(step as ConditionalStep, context, result);\n break;\n case 'parallel':\n await this.executeParallel(step as ParallelStep, context, result);\n break;\n case 'sequence':\n await this.executeSequence(step as SequenceStep, context, result);\n break;\n case 'loop':\n await this.executeLoop(step as LoopStep, context, result);\n break;\n case 'wait':\n await this.executeWait(step as WaitStep, context);\n break;\n case 'validate':\n await this.executeValidate(step as ValidateStep, context);\n break;\n default:\n throw new Error(`Unknown step type: ${(step as any).type}`);\n }\n }\n\n // Step execution methods (implementations)\n\n private async executeAddFeature(step: AddFeatureStep, context: RecipeContext): Promise<void> {\n context.logger.info(`Adding feature: ${step.feature}`);\n // Implementation would call the add command\n }\n\n private async executeRunCommand(step: RunCommandStep, context: RecipeContext): Promise<void> {\n context.logger.info(`Running command: ${step.command}`);\n // Implementation would run CLI command\n }\n\n private async executeCreateFile(step: CreateFileStep, context: RecipeContext): Promise<void> {\n const filePath = join(context.cwd, step.path);\n const content = typeof step.content === 'function' ? step.content(context) : step.content;\n\n if (existsSync(filePath) && !step.overwrite) {\n throw new Error(`File already exists: ${step.path}`);\n }\n\n // Create directory if needed\n const dir = dirname(filePath);\n if (!existsSync(dir)) {\n mkdirSync(dir, { recursive: true });\n }\n\n writeFileSync(filePath, content, 'utf-8');\n context.logger.success(`Created file: ${step.path}`);\n }\n\n private async executeModifyFile(step: ModifyFileStep, context: RecipeContext): Promise<void> {\n const filePath = join(context.cwd, step.path);\n if (!existsSync(filePath)) {\n throw new Error(`File not found: ${step.path}`);\n }\n\n let content = readFileSync(filePath, 'utf-8');\n\n if (typeof step.replace === 'function') {\n content = content.replace(step.search, (match) =>\n (step.replace as (match: string, context: RecipeContext) => string)(match, context)\n );\n } else {\n content = content.replace(step.search, step.replace);\n }\n writeFileSync(filePath, content, 'utf-8');\n context.logger.success(`Modified file: ${step.path}`);\n }\n\n private async executeDeleteFile(step: DeleteFileStep, context: RecipeContext): Promise<void> {\n const filePath = join(context.cwd, step.path);\n if (existsSync(filePath)) {\n // Would use fs.unlinkSync here\n context.logger.success(`Deleted file: ${step.path}`);\n }\n }\n\n private async executeInstallDeps(_step: InstallDepsStep, context: RecipeContext): Promise<void> {\n context.logger.info('Installing dependencies...');\n // Implementation would install deps\n }\n\n private async executeRunScript(step: RunScriptStep, context: RecipeContext): Promise<void> {\n context.logger.info(`Running script: ${step.script}`);\n // Implementation would run npm/yarn script\n }\n\n private async executeExec(step: ExecStep, context: RecipeContext): Promise<void> {\n context.logger.info(`Executing: ${step.command}`);\n // Implementation would execute shell command\n }\n\n private async executePrompt(step: PromptStep, context: RecipeContext): Promise<void> {\n // Implementation would prompt user and store in context.variables\n context.logger.info(`Prompt: ${step.message}`);\n }\n\n private async executeLog(step: LogStep, context: RecipeContext): Promise<void> {\n const level = step.level || 'info';\n context.logger[level](step.message);\n }\n\n private async executeConditional(\n step: ConditionalStep,\n context: RecipeContext,\n result: RecipeExecutionResult\n ): Promise<void> {\n const condition = await this.evaluateCondition(step.condition, context);\n const stepsToExecute = condition ? step.then : step.else || [];\n await this.executeSteps(stepsToExecute, context, result);\n }\n\n private async executeParallel(\n step: ParallelStep,\n context: RecipeContext,\n result: RecipeExecutionResult\n ): Promise<void> {\n await Promise.all(step.steps.map((s) => this.executeStep(s, context, result)));\n }\n\n private async executeSequence(\n step: SequenceStep,\n context: RecipeContext,\n result: RecipeExecutionResult\n ): Promise<void> {\n await this.executeSteps(step.steps, context, result);\n }\n\n private async executeLoop(\n step: LoopStep,\n context: RecipeContext,\n result: RecipeExecutionResult\n ): Promise<void> {\n const items = Array.isArray(step.items) ? step.items : context.variables.get(step.items) || [];\n\n for (const item of items) {\n context.variables.set(step.variable, item);\n await this.executeSteps(step.steps, context, result);\n }\n }\n\n private async executeWait(step: WaitStep, context: RecipeContext): Promise<void> {\n context.logger.info(`Waiting ${step.duration}ms...`);\n await new Promise((resolve) => setTimeout(resolve, step.duration));\n }\n\n private async executeValidate(step: ValidateStep, context: RecipeContext): Promise<void> {\n const isValid = await this.evaluateCondition(step.condition, context);\n if (!isValid) {\n throw new Error(step.message || 'Validation failed');\n }\n }\n\n /**\n * Evaluate a condition\n */\n private async evaluateCondition(\n condition: string | ((ctx: RecipeContext) => boolean | Promise<boolean>),\n context: RecipeContext\n ): Promise<boolean> {\n if (typeof condition === 'function') {\n return await condition(context);\n }\n\n // Simple string evaluation (could be enhanced with a proper expression evaluator)\n // For now, just check variable existence\n return context.variables.has(condition);\n }\n}\n","import { createHash } from 'crypto';\nimport { readFileSync, existsSync } from 'fs';\nimport { join } from 'path';\n\nimport type { Logger } from '../types/index.js';\n\n/**\n * Plugin signature information\n */\nexport interface PluginSignature {\n plugin: string;\n version: string;\n hash: string;\n signature?: string;\n publisher?: string;\n timestamp: string;\n algorithm: 'sha256' | 'sha512';\n}\n\n/**\n * Trusted publisher\n */\nexport interface TrustedPublisher {\n name: string;\n publicKey?: string;\n verified: boolean;\n addedAt: string;\n}\n\n/**\n * Verification result\n */\nexport interface VerificationResult {\n verified: boolean;\n trusted: boolean;\n signature?: PluginSignature;\n issues: string[];\n warnings: string[];\n}\n\n/**\n * Plugin verification and signing system\n *\n * Provides supply-chain security without requiring cloud services.\n * Supports local verification, signatures, and trust management.\n */\nexport class PluginVerification {\n private logger: Logger;\n private trustedPublishers: Map<string, TrustedPublisher>;\n private verifiedPlugins: Map<string, PluginSignature>;\n\n constructor(logger: Logger) {\n this.logger = logger;\n this.trustedPublishers = new Map();\n this.verifiedPlugins = new Map();\n\n // Add official Kubit publishers by default\n this.addTrustedPublisher({\n addedAt: new Date().toISOString(),\n name: '@kubit',\n verified: true,\n });\n }\n\n /**\n * Calculate plugin hash\n */\n calculateHash(pluginPath: string, algorithm: 'sha256' | 'sha512' = 'sha256'): string {\n const content = readFileSync(pluginPath, 'utf-8');\n const hash = createHash(algorithm);\n hash.update(content);\n return hash.digest('hex');\n }\n\n /**\n * Verify plugin integrity\n */\n async verifyPlugin(pluginName: string, pluginPath: string): Promise<VerificationResult> {\n const result: VerificationResult = {\n issues: [],\n trusted: false,\n verified: false,\n warnings: [],\n };\n\n // Check if plugin file exists\n if (!existsSync(pluginPath)) {\n result.issues.push(`Plugin file not found: ${pluginPath}`);\n return result;\n }\n\n // Calculate current hash\n const currentHash = this.calculateHash(pluginPath);\n\n // Check if we have a stored signature\n const storedSignature = this.verifiedPlugins.get(pluginName);\n\n if (storedSignature) {\n if (storedSignature.hash === currentHash) {\n result.verified = true;\n result.signature = storedSignature;\n\n // Check if publisher is trusted\n if (storedSignature.publisher) {\n const publisher = this.trustedPublishers.get(storedSignature.publisher);\n if (publisher?.verified) {\n result.trusted = true;\n }\n }\n } else {\n result.issues.push('Plugin hash mismatch - file may have been modified');\n result.warnings.push('Consider reinstalling the plugin');\n }\n } else {\n result.warnings.push('No signature found for this plugin');\n result.warnings.push('Run: kubit plugin trust <name> to trust this plugin');\n }\n\n // Check publisher\n const publisher = this.getPublisherFromName(pluginName);\n if (publisher) {\n const trustedPub = this.trustedPublishers.get(publisher);\n if (!trustedPub) {\n result.warnings.push(`Publisher '${publisher}' is not in trusted list`);\n }\n }\n\n return result;\n }\n\n /**\n * Sign a plugin (for plugin authors)\n */\n signPlugin(pluginName: string, pluginPath: string, publisher?: string): PluginSignature {\n const hash = this.calculateHash(pluginPath, 'sha256');\n\n const signature: PluginSignature = {\n algorithm: 'sha256',\n hash,\n plugin: pluginName,\n publisher,\n timestamp: new Date().toISOString(),\n version: this.getPluginVersion(pluginPath),\n };\n\n this.verifiedPlugins.set(pluginName, signature);\n this.logger.success(`Plugin signed: ${pluginName}`);\n\n return signature;\n }\n\n /**\n * Add trusted publisher\n */\n addTrustedPublisher(publisher: TrustedPublisher): void {\n this.trustedPublishers.set(publisher.name, publisher);\n this.logger.debug(`Added trusted publisher: ${publisher.name}`);\n }\n\n /**\n * Remove trusted publisher\n */\n removeTrustedPublisher(name: string): boolean {\n const removed = this.trustedPublishers.delete(name);\n if (removed) {\n this.logger.info(`Removed trusted publisher: ${name}`);\n }\n return removed;\n }\n\n /**\n * List trusted publishers\n */\n listTrustedPublishers(): TrustedPublisher[] {\n return Array.from(this.trustedPublishers.values());\n }\n\n /**\n * Check if publisher is trusted\n */\n isPublisherTrusted(name: string): boolean {\n const publisher = this.trustedPublishers.get(name);\n return publisher?.verified || false;\n }\n\n /**\n * Generate SBOM (Software Bill of Materials)\n */\n generateSBOM(cwd: string): any {\n const pkgPath = join(cwd, 'package.json');\n\n if (!existsSync(pkgPath)) {\n throw new Error('package.json not found');\n }\n\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n\n const sbom = {\n bomFormat: 'CycloneDX',\n components: this.extractComponents(pkg),\n metadata: {\n component: {\n name: pkg.name,\n type: 'application',\n version: pkg.version,\n },\n timestamp: new Date().toISOString(),\n tools: [\n {\n name: 'kubit-forge',\n vendor: 'Kubit',\n version: '3.0.0',\n },\n ],\n },\n specVersion: '1.4',\n version: 1,\n };\n\n return sbom;\n }\n\n /**\n * Extract components from package.json\n */\n private extractComponents(pkg: any): any[] {\n const components: any[] = [];\n\n const allDeps = {\n ...pkg.dependencies,\n ...pkg.devDependencies,\n };\n\n for (const [name, version] of Object.entries(allDeps)) {\n components.push({\n name,\n purl: `pkg:npm/${name}@${version}`,\n type: 'library',\n version: (version as string).replace(/^[\\^~]/, ''),\n });\n }\n\n return components;\n }\n\n /**\n * Get publisher from plugin name\n */\n private getPublisherFromName(pluginName: string): string | null {\n if (pluginName.startsWith('@')) {\n const parts = pluginName.split('/');\n return parts[0];\n }\n return null;\n }\n\n /**\n * Get plugin version from package\n */\n private getPluginVersion(pluginPath: string): string {\n try {\n const pkgPath = join(pluginPath, '..', 'package.json');\n if (existsSync(pkgPath)) {\n const pkg = JSON.parse(readFileSync(pkgPath, 'utf-8'));\n return pkg.version || '0.0.0';\n }\n } catch {\n // Ignore\n }\n return '0.0.0';\n }\n\n /**\n * Export signatures for sharing\n */\n exportSignatures(): PluginSignature[] {\n return Array.from(this.verifiedPlugins.values());\n }\n\n /**\n * Import signatures\n */\n importSignatures(signatures: PluginSignature[]): void {\n for (const sig of signatures) {\n this.verifiedPlugins.set(sig.plugin, sig);\n }\n this.logger.info(`Imported ${signatures.length} signature(s)`);\n }\n}\n"],"mappings":"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","names":["existsSync","writeFileSync","join","hasESLintConfig","writeFileSync","join","existsSync","readFileSync","join","existsSync","readFileSync","join","existsSync","readFileSync","join","existsSync","readFileSync","join","result","valid","existsSync","readFileSync","join","existsSync","join","existsSync","readFileSync","join","Box","Text","React","useState","Box","Text","React","PluginManager","Box","Text","React","Box","Text","React","Box","Text","React","useState","useEffect","Box","Text","useInput","Spinner","React","useState","useEffect","Box","Text","useInput","useApp","Spinner","React","useState","useEffect","buildCommand","testCommand","lintCommand","doctorCommand","PluginManager","dashboard_exports","React","Dashboard","execa","fileURLToPath","dirname","join","init_dashboard","writeFileSync","execa","existsSync","mkdirSync","join","join","existsSync","mkdirSync","writeFileSync","join","fileURLToPath","__filename","fileURLToPath","__dirname","join","existsSync","mkdirSync","writeFileSync","createCommand","join","existsSync","mkdirSync","execa","existsSync","join","execa","join","existsSync","enquirer","existsSync","mkdirSync","writeFileSync","join","existsSync","mkdirSync","writeFileSync","join","existsSync","mkdirSync","writeFileSync","join","generateHookContent","existsSync","mkdirSync","writeFileSync","join","generateTestContent","existsSync","mkdirSync","writeFileSync","join","enquirer","existsSync","writeFileSync","join","existsSync","mkdirSync","readFileSync","writeFileSync","join","writeFileSync","join","existsSync","enquirer","existsSync","writeFileSync","join","join","existsSync","enquirer","writeFileSync","initializeGit","execa","existsSync","join","path","existsSync","readFileSync","writeFileSync","mkdirSync","join","path","join","existsSync","readFileSync","existsSync","join","join","readFileSync","existsSync","path","chalk","chalk","existsSync","readdirSync","statSync","join","path","existsSync","readFileSync","statSync","join","existsSync","join","readFileSync","statSync","execSync","existsSync","join","existsSync","readFileSync","writeFileSync","mkdirSync","statSync","readdirSync","join","existsSync","readFileSync","join","existsSync","readFileSync","join","existsSync","readFileSync","writeFileSync","join","readFileSync","join","dirname","fileURLToPath","__filename","__dirname","FEATURES","FEATURES","join","existsSync","writeFileSync","readFileSync","configPath","existsSync","readFileSync","writeFileSync","join","existsSync","writeFileSync","join","existsSync","readFileSync","writeFileSync","join","existsSync","readFileSync","writeFileSync","join","existsSync","readFileSync","writeFileSync","join","existsSync","readFileSync","writeFileSync","join","readFileSync","writeFileSync","readdirSync","statSync","join","writeFileSync","mkdirSync","join","join","mkdirSync","writeFileSync","existsSync","readFileSync","join","existsSync","readFileSync","writeFileSync","mkdirSync","join","dirname","path","readFileSync","existsSync","join","dirname","mkdirSync","writeFileSync","createHash","readFileSync","existsSync","join","publisher","createCommand","dashboardCommand","path"]}