maxsim-flutter 1.0.0

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 (281) hide show
  1. package/CHANGELOG.md +42 -0
  2. package/LICENSE +21 -0
  3. package/README.md +445 -0
  4. package/claude-plugin/.claude-plugin/plugin.json +46 -0
  5. package/claude-plugin/agents/flutter-setup-agent.md +54 -0
  6. package/claude-plugin/commands/flutter-add.md +32 -0
  7. package/claude-plugin/commands/flutter-create.md +28 -0
  8. package/claude-plugin/commands/flutter-migrate.md +28 -0
  9. package/claude-plugin/skills/flutter-scaffolding/SKILL.md +109 -0
  10. package/dist/claude-setup/agent-writer.d.ts +21 -0
  11. package/dist/claude-setup/agent-writer.d.ts.map +1 -0
  12. package/dist/claude-setup/agent-writer.js +365 -0
  13. package/dist/claude-setup/agent-writer.js.map +1 -0
  14. package/dist/claude-setup/claude-md-generator.d.ts +7 -0
  15. package/dist/claude-setup/claude-md-generator.d.ts.map +1 -0
  16. package/dist/claude-setup/claude-md-generator.js +428 -0
  17. package/dist/claude-setup/claude-md-generator.js.map +1 -0
  18. package/dist/claude-setup/commands-writer.d.ts +7 -0
  19. package/dist/claude-setup/commands-writer.d.ts.map +1 -0
  20. package/dist/claude-setup/commands-writer.js +303 -0
  21. package/dist/claude-setup/commands-writer.js.map +1 -0
  22. package/dist/claude-setup/hooks-writer.d.ts +3 -0
  23. package/dist/claude-setup/hooks-writer.d.ts.map +1 -0
  24. package/dist/claude-setup/hooks-writer.js +34 -0
  25. package/dist/claude-setup/hooks-writer.js.map +1 -0
  26. package/dist/claude-setup/index.d.ts +10 -0
  27. package/dist/claude-setup/index.d.ts.map +1 -0
  28. package/dist/claude-setup/index.js +9 -0
  29. package/dist/claude-setup/index.js.map +1 -0
  30. package/dist/claude-setup/mcp-config-writer.d.ts +3 -0
  31. package/dist/claude-setup/mcp-config-writer.d.ts.map +1 -0
  32. package/dist/claude-setup/mcp-config-writer.js +42 -0
  33. package/dist/claude-setup/mcp-config-writer.js.map +1 -0
  34. package/dist/claude-setup/plugin-assembler.d.ts +2 -0
  35. package/dist/claude-setup/plugin-assembler.d.ts.map +1 -0
  36. package/dist/claude-setup/plugin-assembler.js +3 -0
  37. package/dist/claude-setup/plugin-assembler.js.map +1 -0
  38. package/dist/claude-setup/prd-generator.d.ts +10 -0
  39. package/dist/claude-setup/prd-generator.d.ts.map +1 -0
  40. package/dist/claude-setup/prd-generator.js +295 -0
  41. package/dist/claude-setup/prd-generator.js.map +1 -0
  42. package/dist/claude-setup/setup-orchestrator.d.ts +11 -0
  43. package/dist/claude-setup/setup-orchestrator.d.ts.map +1 -0
  44. package/dist/claude-setup/setup-orchestrator.js +46 -0
  45. package/dist/claude-setup/setup-orchestrator.js.map +1 -0
  46. package/dist/claude-setup/skill-writer.d.ts +3 -0
  47. package/dist/claude-setup/skill-writer.d.ts.map +1 -0
  48. package/dist/claude-setup/skill-writer.js +256 -0
  49. package/dist/claude-setup/skill-writer.js.map +1 -0
  50. package/dist/cli/commands/add.d.ts +16 -0
  51. package/dist/cli/commands/add.d.ts.map +1 -0
  52. package/dist/cli/commands/add.js +414 -0
  53. package/dist/cli/commands/add.js.map +1 -0
  54. package/dist/cli/commands/create.d.ts +3 -0
  55. package/dist/cli/commands/create.d.ts.map +1 -0
  56. package/dist/cli/commands/create.js +161 -0
  57. package/dist/cli/commands/create.js.map +1 -0
  58. package/dist/cli/commands/list.d.ts +12 -0
  59. package/dist/cli/commands/list.d.ts.map +1 -0
  60. package/dist/cli/commands/list.js +148 -0
  61. package/dist/cli/commands/list.js.map +1 -0
  62. package/dist/cli/commands/migrate.d.ts +3 -0
  63. package/dist/cli/commands/migrate.d.ts.map +1 -0
  64. package/dist/cli/commands/migrate.js +332 -0
  65. package/dist/cli/commands/migrate.js.map +1 -0
  66. package/dist/cli/index.d.ts +3 -0
  67. package/dist/cli/index.d.ts.map +1 -0
  68. package/dist/cli/index.js +34 -0
  69. package/dist/cli/index.js.map +1 -0
  70. package/dist/cli/ui/prompts.d.ts +9 -0
  71. package/dist/cli/ui/prompts.d.ts.map +1 -0
  72. package/dist/cli/ui/prompts.js +74 -0
  73. package/dist/cli/ui/prompts.js.map +1 -0
  74. package/dist/cli/ui/spinner.d.ts +2 -0
  75. package/dist/cli/ui/spinner.d.ts.map +1 -0
  76. package/dist/cli/ui/spinner.js +5 -0
  77. package/dist/cli/ui/spinner.js.map +1 -0
  78. package/dist/cli/version-check.d.ts +7 -0
  79. package/dist/cli/version-check.d.ts.map +1 -0
  80. package/dist/cli/version-check.js +92 -0
  81. package/dist/cli/version-check.js.map +1 -0
  82. package/dist/core/config/defaults.d.ts +3 -0
  83. package/dist/core/config/defaults.d.ts.map +1 -0
  84. package/dist/core/config/defaults.js +21 -0
  85. package/dist/core/config/defaults.js.map +1 -0
  86. package/dist/core/config/loader.d.ts +4 -0
  87. package/dist/core/config/loader.d.ts.map +1 -0
  88. package/dist/core/config/loader.js +38 -0
  89. package/dist/core/config/loader.js.map +1 -0
  90. package/dist/core/config/schema.d.ts +406 -0
  91. package/dist/core/config/schema.d.ts.map +1 -0
  92. package/dist/core/config/schema.js +119 -0
  93. package/dist/core/config/schema.js.map +1 -0
  94. package/dist/core/context.d.ts +57 -0
  95. package/dist/core/context.d.ts.map +1 -0
  96. package/dist/core/context.js +99 -0
  97. package/dist/core/context.js.map +1 -0
  98. package/dist/core/detector.d.ts +28 -0
  99. package/dist/core/detector.d.ts.map +1 -0
  100. package/dist/core/detector.js +200 -0
  101. package/dist/core/detector.js.map +1 -0
  102. package/dist/core/validator.d.ts +7 -0
  103. package/dist/core/validator.d.ts.map +1 -0
  104. package/dist/core/validator.js +35 -0
  105. package/dist/core/validator.js.map +1 -0
  106. package/dist/index.d.ts +21 -0
  107. package/dist/index.d.ts.map +1 -0
  108. package/dist/index.js +14 -0
  109. package/dist/index.js.map +1 -0
  110. package/dist/modules/composer.d.ts +50 -0
  111. package/dist/modules/composer.d.ts.map +1 -0
  112. package/dist/modules/composer.js +122 -0
  113. package/dist/modules/composer.js.map +1 -0
  114. package/dist/modules/definitions/analytics/module.d.ts +7 -0
  115. package/dist/modules/definitions/analytics/module.d.ts.map +1 -0
  116. package/dist/modules/definitions/analytics/module.js +28 -0
  117. package/dist/modules/definitions/analytics/module.js.map +1 -0
  118. package/dist/modules/definitions/api/module.d.ts +7 -0
  119. package/dist/modules/definitions/api/module.d.ts.map +1 -0
  120. package/dist/modules/definitions/api/module.js +41 -0
  121. package/dist/modules/definitions/api/module.js.map +1 -0
  122. package/dist/modules/definitions/auth/module.d.ts +7 -0
  123. package/dist/modules/definitions/auth/module.d.ts.map +1 -0
  124. package/dist/modules/definitions/auth/module.js +53 -0
  125. package/dist/modules/definitions/auth/module.js.map +1 -0
  126. package/dist/modules/definitions/cicd/module.d.ts +7 -0
  127. package/dist/modules/definitions/cicd/module.d.ts.map +1 -0
  128. package/dist/modules/definitions/cicd/module.js +34 -0
  129. package/dist/modules/definitions/cicd/module.js.map +1 -0
  130. package/dist/modules/definitions/core/module.d.ts +7 -0
  131. package/dist/modules/definitions/core/module.d.ts.map +1 -0
  132. package/dist/modules/definitions/core/module.js +31 -0
  133. package/dist/modules/definitions/core/module.js.map +1 -0
  134. package/dist/modules/definitions/database/module.d.ts +8 -0
  135. package/dist/modules/definitions/database/module.d.ts.map +1 -0
  136. package/dist/modules/definitions/database/module.js +47 -0
  137. package/dist/modules/definitions/database/module.js.map +1 -0
  138. package/dist/modules/definitions/deep-linking/module.d.ts +7 -0
  139. package/dist/modules/definitions/deep-linking/module.d.ts.map +1 -0
  140. package/dist/modules/definitions/deep-linking/module.js +48 -0
  141. package/dist/modules/definitions/deep-linking/module.js.map +1 -0
  142. package/dist/modules/definitions/i18n/module.d.ts +7 -0
  143. package/dist/modules/definitions/i18n/module.d.ts.map +1 -0
  144. package/dist/modules/definitions/i18n/module.js +37 -0
  145. package/dist/modules/definitions/i18n/module.js.map +1 -0
  146. package/dist/modules/definitions/push/module.d.ts +7 -0
  147. package/dist/modules/definitions/push/module.d.ts.map +1 -0
  148. package/dist/modules/definitions/push/module.js +40 -0
  149. package/dist/modules/definitions/push/module.js.map +1 -0
  150. package/dist/modules/definitions/theme/module.d.ts +7 -0
  151. package/dist/modules/definitions/theme/module.d.ts.map +1 -0
  152. package/dist/modules/definitions/theme/module.js +42 -0
  153. package/dist/modules/definitions/theme/module.js.map +1 -0
  154. package/dist/modules/registry.d.ts +50 -0
  155. package/dist/modules/registry.d.ts.map +1 -0
  156. package/dist/modules/registry.js +104 -0
  157. package/dist/modules/registry.js.map +1 -0
  158. package/dist/modules/resolver.d.ts +42 -0
  159. package/dist/modules/resolver.d.ts.map +1 -0
  160. package/dist/modules/resolver.js +140 -0
  161. package/dist/modules/resolver.js.map +1 -0
  162. package/dist/ralph/prd-generator.d.ts +2 -0
  163. package/dist/ralph/prd-generator.d.ts.map +1 -0
  164. package/dist/ralph/prd-generator.js +3 -0
  165. package/dist/ralph/prd-generator.js.map +1 -0
  166. package/dist/ralph/ralph-converter.d.ts +2 -0
  167. package/dist/ralph/ralph-converter.d.ts.map +1 -0
  168. package/dist/ralph/ralph-converter.js +3 -0
  169. package/dist/ralph/ralph-converter.js.map +1 -0
  170. package/dist/ralph/story-sizer.d.ts +2 -0
  171. package/dist/ralph/story-sizer.d.ts.map +1 -0
  172. package/dist/ralph/story-sizer.js +3 -0
  173. package/dist/ralph/story-sizer.js.map +1 -0
  174. package/dist/scaffold/engine.d.ts +40 -0
  175. package/dist/scaffold/engine.d.ts.map +1 -0
  176. package/dist/scaffold/engine.js +233 -0
  177. package/dist/scaffold/engine.js.map +1 -0
  178. package/dist/scaffold/file-writer.d.ts +22 -0
  179. package/dist/scaffold/file-writer.d.ts.map +1 -0
  180. package/dist/scaffold/file-writer.js +68 -0
  181. package/dist/scaffold/file-writer.js.map +1 -0
  182. package/dist/scaffold/post-processors/build-runner.d.ts +2 -0
  183. package/dist/scaffold/post-processors/build-runner.d.ts.map +1 -0
  184. package/dist/scaffold/post-processors/build-runner.js +5 -0
  185. package/dist/scaffold/post-processors/build-runner.js.map +1 -0
  186. package/dist/scaffold/post-processors/dart-format.d.ts +2 -0
  187. package/dist/scaffold/post-processors/dart-format.d.ts.map +1 -0
  188. package/dist/scaffold/post-processors/dart-format.js +5 -0
  189. package/dist/scaffold/post-processors/dart-format.js.map +1 -0
  190. package/dist/scaffold/post-processors/flutter-pub-get.d.ts +2 -0
  191. package/dist/scaffold/post-processors/flutter-pub-get.d.ts.map +1 -0
  192. package/dist/scaffold/post-processors/flutter-pub-get.js +5 -0
  193. package/dist/scaffold/post-processors/flutter-pub-get.js.map +1 -0
  194. package/dist/scaffold/renderer.d.ts +20 -0
  195. package/dist/scaffold/renderer.d.ts.map +1 -0
  196. package/dist/scaffold/renderer.js +75 -0
  197. package/dist/scaffold/renderer.js.map +1 -0
  198. package/dist/scaffold/template-helpers.d.ts +25 -0
  199. package/dist/scaffold/template-helpers.d.ts.map +1 -0
  200. package/dist/scaffold/template-helpers.js +115 -0
  201. package/dist/scaffold/template-helpers.js.map +1 -0
  202. package/dist/types/config.d.ts +4 -0
  203. package/dist/types/config.d.ts.map +1 -0
  204. package/dist/types/config.js +2 -0
  205. package/dist/types/config.js.map +1 -0
  206. package/dist/types/module.d.ts +85 -0
  207. package/dist/types/module.d.ts.map +1 -0
  208. package/dist/types/module.js +2 -0
  209. package/dist/types/module.js.map +1 -0
  210. package/dist/types/project.d.ts +13 -0
  211. package/dist/types/project.d.ts.map +1 -0
  212. package/dist/types/project.js +2 -0
  213. package/dist/types/project.js.map +1 -0
  214. package/package.json +80 -0
  215. package/templates/core/analysis_options.yaml.hbs +21 -0
  216. package/templates/core/lib/app.dart.hbs +20 -0
  217. package/templates/core/lib/core/providers/app_providers.dart.hbs +3 -0
  218. package/templates/core/lib/core/router/app_router.dart.hbs +19 -0
  219. package/templates/core/lib/core/theme/app_theme.dart.hbs +15 -0
  220. package/templates/core/lib/features/home/data/models/.gitkeep +0 -0
  221. package/templates/core/lib/features/home/data/repositories/.gitkeep +0 -0
  222. package/templates/core/lib/features/home/domain/entities/.gitkeep +0 -0
  223. package/templates/core/lib/features/home/domain/repositories/.gitkeep +0 -0
  224. package/templates/core/lib/features/home/presentation/pages/home_page.dart.hbs +18 -0
  225. package/templates/core/lib/features/home/presentation/widgets/.gitkeep +0 -0
  226. package/templates/core/lib/main.dart.hbs +11 -0
  227. package/templates/core/pubspec.yaml.hbs +30 -0
  228. package/templates/core/test/widget_test.dart.hbs +16 -0
  229. package/templates/modules/analytics/lib/features/analytics/data/observers/analytics_route_observer.dart.hbs +53 -0
  230. package/templates/modules/analytics/lib/features/analytics/data/services/firebase_analytics_service.dart.hbs +39 -0
  231. package/templates/modules/analytics/lib/features/analytics/domain/services/analytics_service.dart.hbs +25 -0
  232. package/templates/modules/analytics/lib/features/analytics/presentation/providers/analytics_provider.dart.hbs +17 -0
  233. package/templates/modules/analytics/pubspec.partial.yaml +2 -0
  234. package/templates/modules/api/lib/features/api/data/datasources/api_client.dart.hbs +171 -0
  235. package/templates/modules/api/lib/features/api/data/interceptors/auth_interceptor.dart.hbs +25 -0
  236. package/templates/modules/api/lib/features/api/data/interceptors/retry_interceptor.dart.hbs +42 -0
  237. package/templates/modules/api/lib/features/api/data/repositories/api_repository_impl.dart.hbs +21 -0
  238. package/templates/modules/api/lib/features/api/domain/exceptions/api_exception.dart.hbs +31 -0
  239. package/templates/modules/api/lib/features/api/domain/repositories/api_repository.dart.hbs +8 -0
  240. package/templates/modules/api/lib/features/api/presentation/providers/api_provider.dart.hbs +17 -0
  241. package/templates/modules/api/pubspec.partial.yaml +7 -0
  242. package/templates/modules/auth/lib/features/auth/data/datasources/auth_remote_datasource.dart.hbs +181 -0
  243. package/templates/modules/auth/lib/features/auth/data/models/auth_user_model.dart.hbs +27 -0
  244. package/templates/modules/auth/lib/features/auth/data/repositories/auth_repository_impl.dart.hbs +49 -0
  245. package/templates/modules/auth/lib/features/auth/domain/entities/user_entity.dart.hbs +18 -0
  246. package/templates/modules/auth/lib/features/auth/domain/repositories/auth_repository.dart.hbs +22 -0
  247. package/templates/modules/auth/lib/features/auth/domain/usecases/register_usecase.dart.hbs +20 -0
  248. package/templates/modules/auth/lib/features/auth/domain/usecases/sign_in_usecase.dart.hbs +15 -0
  249. package/templates/modules/auth/lib/features/auth/domain/usecases/sign_out_usecase.dart.hbs +11 -0
  250. package/templates/modules/auth/lib/features/auth/presentation/pages/login_page.dart.hbs +118 -0
  251. package/templates/modules/auth/lib/features/auth/presentation/pages/register_page.dart.hbs +131 -0
  252. package/templates/modules/auth/lib/features/auth/presentation/providers/auth_provider.dart.hbs +31 -0
  253. package/templates/modules/auth/pubspec.partial.yaml +13 -0
  254. package/templates/modules/cicd/.github/workflows/ci.yml.hbs +45 -0
  255. package/templates/modules/cicd/.gitlab-ci.yml.hbs +53 -0
  256. package/templates/modules/cicd/bitbucket-pipelines.yml.hbs +39 -0
  257. package/templates/modules/cicd/pubspec.partial.yaml +1 -0
  258. package/templates/modules/database/lib/features/database/data/datasources/database_datasource.dart.hbs +115 -0
  259. package/templates/modules/database/lib/features/database/data/repositories/database_repository_impl.dart.hbs +73 -0
  260. package/templates/modules/database/lib/features/database/domain/repositories/database_repository.dart.hbs +10 -0
  261. package/templates/modules/database/lib/features/database/presentation/providers/database_provider.dart.hbs +43 -0
  262. package/templates/modules/database/pubspec.partial.yaml +27 -0
  263. package/templates/modules/deep-linking/lib/features/deep_linking/data/datasources/deep_link_datasource.dart.hbs +18 -0
  264. package/templates/modules/deep-linking/lib/features/deep_linking/data/repositories/deep_link_repository_impl.dart.hbs +14 -0
  265. package/templates/modules/deep-linking/lib/features/deep_linking/domain/repositories/deep_link_repository.dart.hbs +7 -0
  266. package/templates/modules/deep-linking/lib/features/deep_linking/presentation/providers/deep_link_provider.dart.hbs +57 -0
  267. package/templates/modules/deep-linking/pubspec.partial.yaml +2 -0
  268. package/templates/modules/i18n/l10n.yaml.hbs +5 -0
  269. package/templates/modules/i18n/lib/core/l10n/l10n_config.dart.hbs +29 -0
  270. package/templates/modules/i18n/lib/core/l10n/l10n_provider.dart.hbs +20 -0
  271. package/templates/modules/i18n/lib/l10n/app_de.arb.hbs +27 -0
  272. package/templates/modules/i18n/lib/l10n/app_en.arb.hbs +27 -0
  273. package/templates/modules/i18n/pubspec.partial.yaml +7 -0
  274. package/templates/modules/push/lib/features/push/data/datasources/push_datasource.dart.hbs +124 -0
  275. package/templates/modules/push/lib/features/push/data/repositories/push_repository_impl.dart.hbs +28 -0
  276. package/templates/modules/push/lib/features/push/domain/repositories/push_repository.dart.hbs +31 -0
  277. package/templates/modules/push/lib/features/push/presentation/providers/push_provider.dart.hbs +34 -0
  278. package/templates/modules/push/pubspec.partial.yaml +8 -0
  279. package/templates/modules/theme/lib/core/theme/app_theme.dart.hbs +74 -0
  280. package/templates/modules/theme/lib/core/theme/theme_provider.dart.hbs +46 -0
  281. package/templates/modules/theme/pubspec.partial.yaml +2 -0
@@ -0,0 +1,12 @@
1
+ import { Command } from 'commander';
2
+ import type { MaxsimConfig } from '../../types/config.js';
3
+ export declare function createListCommand(): Command;
4
+ /**
5
+ * Extract key config details for a module as a human-readable string.
6
+ */
7
+ export declare function getModuleConfigDetails(config: MaxsimConfig, moduleId: string): string;
8
+ /**
9
+ * Print a formatted table of all modules with their status.
10
+ */
11
+ export declare function printModuleTable(config: MaxsimConfig, enabledIds: Set<string>): void;
12
+ //# sourceMappingURL=list.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAMpC,OAAO,KAAK,EAAE,YAAY,EAAE,MAAM,uBAAuB,CAAC;AAgB1D,wBAAgB,iBAAiB,IAAI,OAAO,CAgB3C;AA2BD;;GAEG;AACH,wBAAgB,sBAAsB,CAAC,MAAM,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,GAAG,MAAM,CAmErF;AAED;;GAEG;AACH,wBAAgB,gBAAgB,CAAC,MAAM,EAAE,YAAY,EAAE,UAAU,EAAE,GAAG,CAAC,MAAM,CAAC,GAAG,IAAI,CA6BpF"}
@@ -0,0 +1,148 @@
1
+ import { join } from 'node:path';
2
+ import { Command } from 'commander';
3
+ import * as p from '@clack/prompts';
4
+ import chalk from 'chalk';
5
+ import { loadConfig } from '../../core/config/loader.js';
6
+ import { findProjectRoot, getEnabledModuleIds } from './add.js';
7
+ /** All optional module IDs in display order. */
8
+ const ALL_MODULE_IDS = [
9
+ 'auth',
10
+ 'api',
11
+ 'database',
12
+ 'i18n',
13
+ 'theme',
14
+ 'push',
15
+ 'analytics',
16
+ 'cicd',
17
+ 'deep-linking',
18
+ ];
19
+ export function createListCommand() {
20
+ const cmd = new Command('list');
21
+ cmd
22
+ .description('List all modules and their enabled/disabled status in a maxsim-flutter project')
23
+ .option('--project-dir <path>', 'Path to the project directory (default: current directory)')
24
+ .action(async (options) => {
25
+ try {
26
+ await runList(options);
27
+ }
28
+ catch (err) {
29
+ p.log.error(err instanceof Error ? err.message : String(err));
30
+ process.exit(1);
31
+ }
32
+ });
33
+ return cmd;
34
+ }
35
+ async function runList(options) {
36
+ const searchDir = options.projectDir ? String(options.projectDir) : process.cwd();
37
+ const projectRoot = await findProjectRoot(searchDir);
38
+ if (!projectRoot) {
39
+ throw new Error(`No maxsim.config.yaml found in ${searchDir} or its parent directories.\n` +
40
+ 'Run this command from inside a maxsim-flutter project, or use --project-dir.');
41
+ }
42
+ const configPath = join(projectRoot, 'maxsim.config.yaml');
43
+ const config = await loadConfig(configPath);
44
+ const enabledIds = getEnabledModuleIds(config);
45
+ p.intro('maxsim-flutter — Module Status');
46
+ p.log.info(`Project: ${chalk.cyan(projectRoot)}`);
47
+ printModuleTable(config, enabledIds);
48
+ const enabledCount = enabledIds.size;
49
+ const totalCount = ALL_MODULE_IDS.length;
50
+ p.outro(`${enabledCount}/${totalCount} modules enabled`);
51
+ }
52
+ /**
53
+ * Extract key config details for a module as a human-readable string.
54
+ */
55
+ export function getModuleConfigDetails(config, moduleId) {
56
+ const m = config.modules;
57
+ const parts = [];
58
+ switch (moduleId) {
59
+ case 'auth': {
60
+ const mod = m.auth;
61
+ if (mod) {
62
+ parts.push(`provider: ${mod.provider}`);
63
+ }
64
+ break;
65
+ }
66
+ case 'database': {
67
+ const mod = m.database;
68
+ if (mod) {
69
+ parts.push(`engine: ${mod.engine}`);
70
+ }
71
+ break;
72
+ }
73
+ case 'push': {
74
+ const mod = m.push;
75
+ if (mod) {
76
+ parts.push(`provider: ${mod.provider}`);
77
+ }
78
+ break;
79
+ }
80
+ case 'cicd': {
81
+ const mod = m.cicd;
82
+ if (mod) {
83
+ parts.push(`provider: ${mod.provider}`);
84
+ }
85
+ break;
86
+ }
87
+ case 'i18n': {
88
+ const mod = m.i18n;
89
+ if (mod) {
90
+ parts.push(`locale: ${mod.defaultLocale}`);
91
+ }
92
+ break;
93
+ }
94
+ case 'theme': {
95
+ const mod = m.theme;
96
+ if (mod) {
97
+ if (mod.seedColor)
98
+ parts.push(`seed: ${mod.seedColor}`);
99
+ }
100
+ break;
101
+ }
102
+ case 'deep-linking': {
103
+ const mod = m['deep-linking'];
104
+ if (mod) {
105
+ if (mod.scheme)
106
+ parts.push(`scheme: ${mod.scheme}`);
107
+ if (mod.host)
108
+ parts.push(`host: ${mod.host}`);
109
+ }
110
+ break;
111
+ }
112
+ case 'api': {
113
+ const mod = m.api;
114
+ if (mod) {
115
+ if (mod.baseUrl)
116
+ parts.push(`baseUrl: ${mod.baseUrl}`);
117
+ }
118
+ break;
119
+ }
120
+ default:
121
+ break;
122
+ }
123
+ return parts.join(', ');
124
+ }
125
+ /**
126
+ * Print a formatted table of all modules with their status.
127
+ */
128
+ export function printModuleTable(config, enabledIds) {
129
+ const COL_MODULE = 16;
130
+ const COL_STATUS = 12;
131
+ const header = chalk.bold('Module'.padEnd(COL_MODULE)) +
132
+ chalk.bold('Status'.padEnd(COL_STATUS)) +
133
+ chalk.bold('Config');
134
+ const separator = chalk.dim('─'.repeat(60));
135
+ console.log('');
136
+ console.log(header);
137
+ console.log(separator);
138
+ for (const id of ALL_MODULE_IDS) {
139
+ const isEnabled = enabledIds.has(id);
140
+ const details = isEnabled ? chalk.dim(getModuleConfigDetails(config, id)) : '';
141
+ const moduleCol = id.padEnd(COL_MODULE);
142
+ const statusCol = (isEnabled ? 'enabled' : 'disabled').padEnd(COL_STATUS);
143
+ console.log(`${chalk.white(moduleCol)}${isEnabled ? chalk.green(statusCol) : chalk.dim(statusCol)}${details}`);
144
+ }
145
+ console.log(separator);
146
+ console.log('');
147
+ }
148
+ //# sourceMappingURL=list.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"list.js","sourceRoot":"","sources":["../../../src/cli/commands/list.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AACjC,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,KAAK,CAAC,MAAM,gBAAgB,CAAC;AACpC,OAAO,KAAK,MAAM,OAAO,CAAC;AAE1B,OAAO,EAAE,UAAU,EAAE,MAAM,6BAA6B,CAAC;AACzD,OAAO,EAAE,eAAe,EAAE,mBAAmB,EAAE,MAAM,UAAU,CAAC;AAGhE,gDAAgD;AAChD,MAAM,cAAc,GAAG;IACrB,MAAM;IACN,KAAK;IACL,UAAU;IACV,MAAM;IACN,OAAO;IACP,MAAM;IACN,WAAW;IACX,MAAM;IACN,cAAc;CACN,CAAC;AAGX,MAAM,UAAU,iBAAiB;IAC/B,MAAM,GAAG,GAAG,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAEhC,GAAG;SACA,WAAW,CAAC,gFAAgF,CAAC;SAC7F,MAAM,CAAC,sBAAsB,EAAE,4DAA4D,CAAC;SAC5F,MAAM,CAAC,KAAK,EAAE,OAAgC,EAAE,EAAE;QACjD,IAAI,CAAC;YACH,MAAM,OAAO,CAAC,OAAO,CAAC,CAAC;QACzB,CAAC;QAAC,OAAO,GAAG,EAAE,CAAC;YACb,CAAC,CAAC,GAAG,CAAC,KAAK,CAAC,GAAG,YAAY,KAAK,CAAC,CAAC,CAAC,GAAG,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC;YAC9D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAClB,CAAC;IACH,CAAC,CAAC,CAAC;IAEL,OAAO,GAAG,CAAC;AACb,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,OAAgC;IACrD,MAAM,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,GAAG,EAAE,CAAC;IAElF,MAAM,WAAW,GAAG,MAAM,eAAe,CAAC,SAAS,CAAC,CAAC;IACrD,IAAI,CAAC,WAAW,EAAE,CAAC;QACjB,MAAM,IAAI,KAAK,CACb,kCAAkC,SAAS,+BAA+B;YACxE,8EAA8E,CACjF,CAAC;IACJ,CAAC;IAED,MAAM,UAAU,GAAG,IAAI,CAAC,WAAW,EAAE,oBAAoB,CAAC,CAAC;IAC3D,MAAM,MAAM,GAAG,MAAM,UAAU,CAAC,UAAU,CAAC,CAAC;IAC5C,MAAM,UAAU,GAAG,mBAAmB,CAAC,MAAM,CAAC,CAAC;IAE/C,CAAC,CAAC,KAAK,CAAC,gCAAgC,CAAC,CAAC;IAC1C,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,YAAY,KAAK,CAAC,IAAI,CAAC,WAAW,CAAC,EAAE,CAAC,CAAC;IAElD,gBAAgB,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IAErC,MAAM,YAAY,GAAG,UAAU,CAAC,IAAI,CAAC;IACrC,MAAM,UAAU,GAAG,cAAc,CAAC,MAAM,CAAC;IACzC,CAAC,CAAC,KAAK,CAAC,GAAG,YAAY,IAAI,UAAU,kBAAkB,CAAC,CAAC;AAC3D,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,sBAAsB,CAAC,MAAoB,EAAE,QAAgB;IAC3E,MAAM,CAAC,GAAG,MAAM,CAAC,OAAO,CAAC;IACzB,MAAM,KAAK,GAAa,EAAE,CAAC;IAE3B,QAAQ,QAAQ,EAAE,CAAC;QACjB,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,IAAI,GAAG,EAAE,CAAC;gBACR,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,UAAU,CAAC,CAAC,CAAC;YAChB,MAAM,GAAG,GAAG,CAAC,CAAC,QAAQ,CAAC;YACvB,IAAI,GAAG,EAAE,CAAC;gBACR,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YACtC,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,IAAI,GAAG,EAAE,CAAC;gBACR,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,IAAI,GAAG,EAAE,CAAC;gBACR,KAAK,CAAC,IAAI,CAAC,aAAa,GAAG,CAAC,QAAQ,EAAE,CAAC,CAAC;YAC1C,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,MAAM,CAAC,CAAC,CAAC;YACZ,MAAM,GAAG,GAAG,CAAC,CAAC,IAAI,CAAC;YACnB,IAAI,GAAG,EAAE,CAAC;gBACR,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,aAAa,EAAE,CAAC,CAAC;YAC7C,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,OAAO,CAAC,CAAC,CAAC;YACb,MAAM,GAAG,GAAG,CAAC,CAAC,KAAK,CAAC;YACpB,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,GAAG,CAAC,SAAS;oBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,SAAS,EAAE,CAAC,CAAC;YAC1D,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,cAAc,CAAC,CAAC,CAAC;YACpB,MAAM,GAAG,GAAG,CAAC,CAAC,cAAc,CAAC,CAAC;YAC9B,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,GAAG,CAAC,MAAM;oBAAE,KAAK,CAAC,IAAI,CAAC,WAAW,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;gBACpD,IAAI,GAAG,CAAC,IAAI;oBAAE,KAAK,CAAC,IAAI,CAAC,SAAS,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC;YAChD,CAAC;YACD,MAAM;QACR,CAAC;QACD,KAAK,KAAK,CAAC,CAAC,CAAC;YACX,MAAM,GAAG,GAAG,CAAC,CAAC,GAAG,CAAC;YAClB,IAAI,GAAG,EAAE,CAAC;gBACR,IAAI,GAAG,CAAC,OAAO;oBAAE,KAAK,CAAC,IAAI,CAAC,YAAY,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC;YACzD,CAAC;YACD,MAAM;QACR,CAAC;QACD;YACE,MAAM;IACV,CAAC;IAED,OAAO,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;AAC1B,CAAC;AAED;;GAEG;AACH,MAAM,UAAU,gBAAgB,CAAC,MAAoB,EAAE,UAAuB;IAC5E,MAAM,UAAU,GAAG,EAAE,CAAC;IACtB,MAAM,UAAU,GAAG,EAAE,CAAC;IAEtB,MAAM,MAAM,GACV,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACvC,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC;IAEvB,MAAM,SAAS,GAAG,KAAK,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAC,CAAC;IAE5C,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;IAChB,OAAO,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACpB,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IAEvB,KAAK,MAAM,EAAE,IAAI,cAAc,EAAE,CAAC;QAChC,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;QACrC,MAAM,OAAO,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,sBAAsB,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC;QAE/E,MAAM,SAAS,GAAG,EAAE,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QACxC,MAAM,SAAS,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,MAAM,CAAC,UAAU,CAAC,CAAC;QAE1E,OAAO,CAAC,GAAG,CACT,GAAG,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,GAAG,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC,SAAS,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,SAAS,CAAC,GAAG,OAAO,EAAE,CAClG,CAAC;IACJ,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,SAAS,CAAC,CAAC;IACvB,OAAO,CAAC,GAAG,CAAC,EAAE,CAAC,CAAC;AAClB,CAAC"}
@@ -0,0 +1,3 @@
1
+ import { Command } from 'commander';
2
+ export declare function createMigrateCommand(): Command;
3
+ //# sourceMappingURL=migrate.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.d.ts","sourceRoot":"","sources":["../../../src/cli/commands/migrate.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AAkBpC,wBAAgB,oBAAoB,IAAI,OAAO,CAqB9C"}
@@ -0,0 +1,332 @@
1
+ import { Command } from 'commander';
2
+ import * as p from '@clack/prompts';
3
+ import { dump as yamlDump } from 'js-yaml';
4
+ import fs from 'fs-extra';
5
+ import path from 'node:path';
6
+ import { writeFile } from 'node:fs/promises';
7
+ import { ProjectDetector } from '../../core/detector.js';
8
+ import { parseConfig } from '../../core/config/loader.js';
9
+ import { createProjectContext } from '../../core/context.js';
10
+ import { runClaudeSetup } from '../../claude-setup/setup-orchestrator.js';
11
+ import { createSpinner } from '../ui/spinner.js';
12
+ export function createMigrateCommand() {
13
+ const cmd = new Command('migrate');
14
+ cmd
15
+ .description('Analyze and migrate an existing Flutter project to maxsim conventions')
16
+ .argument('[path]', 'Path to the Flutter project (default: current directory)')
17
+ .option('--analysis-only', 'Output analysis report without making changes')
18
+ .option('--yes', 'Skip confirmation prompts')
19
+ .action(async (projectPath, options) => {
20
+ try {
21
+ await runMigrate(projectPath, {
22
+ analysisOnly: options.analysisOnly === true,
23
+ yes: options.yes === true,
24
+ });
25
+ }
26
+ catch (err) {
27
+ p.log.error(err instanceof Error ? err.message : String(err));
28
+ process.exit(1);
29
+ }
30
+ });
31
+ return cmd;
32
+ }
33
+ async function runMigrate(projectArg, options) {
34
+ const targetPath = path.resolve(projectArg ?? '.');
35
+ p.intro('maxsim-flutter — Migrate Flutter project');
36
+ if (!(await fs.pathExists(path.join(targetPath, 'pubspec.yaml')))) {
37
+ throw new Error(`Not a Flutter project: pubspec.yaml not found at ${targetPath}`);
38
+ }
39
+ const spinner = createSpinner('Analyzing project...');
40
+ spinner.start();
41
+ const detector = new ProjectDetector();
42
+ const report = await detector.analyzeProject(targetPath);
43
+ spinner.succeed(`Analysis complete for project: ${report.projectName}`);
44
+ displayReport(report);
45
+ if (options.analysisOnly) {
46
+ p.outro('Analysis complete. Run without --analysis-only to apply migration.');
47
+ return;
48
+ }
49
+ if (!options.yes) {
50
+ const confirmed = await p.confirm({
51
+ message: `Apply maxsim conventions to '${report.projectName}'?`,
52
+ });
53
+ if (p.isCancel(confirmed) || !confirmed) {
54
+ p.cancel('Migration cancelled.');
55
+ return;
56
+ }
57
+ }
58
+ await applyMigration(targetPath, report);
59
+ p.outro('Migration complete! Review the generated files and update maxsim.config.yaml as needed.');
60
+ }
61
+ function displayReport(report) {
62
+ const difficultyIcon = {
63
+ simple: 'OK',
64
+ moderate: 'WARN',
65
+ complex: 'HIGH',
66
+ };
67
+ p.log.info([
68
+ 'Analysis Report',
69
+ ` Project: ${report.projectName}`,
70
+ ` Architecture: ${report.architecture}`,
71
+ ` State Mgmt: ${report.stateManagement}`,
72
+ ` Routing: ${report.routing}`,
73
+ ` Modules detected: ${report.detectedModules.length > 0 ? report.detectedModules.join(', ') : 'none'}`,
74
+ ` Migration: [${difficultyIcon[report.migrationDifficulty] ?? report.migrationDifficulty}] ${report.migrationDifficulty}`,
75
+ ].join('\n'));
76
+ if (report.cleanArchitectureGaps.length > 0) {
77
+ p.log.warn('Clean Architecture gaps:');
78
+ for (const gap of report.cleanArchitectureGaps) {
79
+ p.log.warn(` - ${gap}`);
80
+ }
81
+ }
82
+ if (report.recommendations.length > 0) {
83
+ p.log.info('Recommendations:');
84
+ for (const rec of report.recommendations) {
85
+ p.log.info(` -> ${rec}`);
86
+ }
87
+ }
88
+ }
89
+ async function applyMigration(projectPath, report) {
90
+ const spinner = createSpinner('Applying migration...');
91
+ spinner.start();
92
+ const moduleConfig = buildModuleConfig(report);
93
+ const orgId = await detectOrgId(projectPath, report.projectName);
94
+ const config = parseConfig({
95
+ project: {
96
+ name: report.projectName,
97
+ orgId,
98
+ },
99
+ modules: moduleConfig,
100
+ claude: {
101
+ enabled: true,
102
+ agentTeams: true,
103
+ },
104
+ scaffold: {
105
+ dryRun: false,
106
+ },
107
+ });
108
+ const context = createProjectContext(config, projectPath);
109
+ // Write maxsim.config.yaml (non-destructive)
110
+ const configPath = path.join(projectPath, 'maxsim.config.yaml');
111
+ if (!(await fs.pathExists(configPath))) {
112
+ const configYaml = yamlDump(config, { indent: 2, lineWidth: 120 });
113
+ await fs.writeFile(configPath, configYaml, 'utf-8');
114
+ p.log.success('Created maxsim.config.yaml');
115
+ }
116
+ else {
117
+ p.log.warn('maxsim.config.yaml already exists — skipping');
118
+ }
119
+ // Run Claude setup only if CLAUDE.md does not exist (non-destructive)
120
+ const claudeMdPath = path.join(projectPath, 'CLAUDE.md');
121
+ if (!(await fs.pathExists(claudeMdPath))) {
122
+ await runClaudeSetup(context, projectPath);
123
+ p.log.success('Created CLAUDE.md and .claude/ directory');
124
+ }
125
+ else {
126
+ p.log.warn('CLAUDE.md already exists — skipping Claude setup');
127
+ }
128
+ // Write migration prd.json (non-destructive)
129
+ const prdPath = path.join(projectPath, 'prd.json');
130
+ if (!(await fs.pathExists(prdPath))) {
131
+ const prdContent = generateMigrationPrd(report);
132
+ await writeFile(prdPath, prdContent, 'utf-8');
133
+ p.log.success('Created prd.json with migration stories');
134
+ }
135
+ else {
136
+ p.log.warn('prd.json already exists — skipping');
137
+ }
138
+ spinner.succeed('Migration applied');
139
+ }
140
+ function buildModuleConfig(report) {
141
+ const modules = {};
142
+ const detected = report.detectedModules;
143
+ if (detected.includes('auth')) {
144
+ const isFirebase = report.rawDependencies.includes('firebase_auth');
145
+ const isSupabase = report.rawDependencies.includes('supabase_flutter');
146
+ modules.auth = {
147
+ enabled: true,
148
+ provider: isFirebase ? 'firebase' : isSupabase ? 'supabase' : 'custom',
149
+ };
150
+ }
151
+ if (detected.includes('api')) {
152
+ modules.api = { enabled: true };
153
+ }
154
+ if (detected.includes('database')) {
155
+ const isDrift = report.rawDependencies.includes('drift');
156
+ const isIsar = report.rawDependencies.some((d) => d.startsWith('isar'));
157
+ modules.database = {
158
+ enabled: true,
159
+ engine: isDrift ? 'drift' : isIsar ? 'isar' : 'hive',
160
+ };
161
+ }
162
+ if (detected.includes('i18n')) {
163
+ modules.i18n = { enabled: true };
164
+ }
165
+ if (detected.includes('theme')) {
166
+ modules.theme = { enabled: true };
167
+ }
168
+ if (detected.includes('push')) {
169
+ const isFcm = report.rawDependencies.includes('firebase_messaging');
170
+ modules.push = {
171
+ enabled: true,
172
+ provider: isFcm ? 'firebase' : 'onesignal',
173
+ };
174
+ }
175
+ if (detected.includes('analytics')) {
176
+ modules.analytics = { enabled: true };
177
+ }
178
+ if (detected.includes('cicd')) {
179
+ modules.cicd = { enabled: true };
180
+ }
181
+ if (detected.includes('deep-linking')) {
182
+ modules['deep-linking'] = { enabled: true };
183
+ }
184
+ return modules;
185
+ }
186
+ async function detectOrgId(projectPath, projectName) {
187
+ const gradlePath = path.join(projectPath, 'android', 'app', 'build.gradle');
188
+ try {
189
+ const content = await fs.readFile(gradlePath, 'utf-8');
190
+ const match = /applicationId\s+["']([^"']+)["']/.exec(content);
191
+ if (match?.[1])
192
+ return match[1];
193
+ }
194
+ catch {
195
+ // ignore
196
+ }
197
+ const gradleKtsPath = path.join(projectPath, 'android', 'app', 'build.gradle.kts');
198
+ try {
199
+ const content = await fs.readFile(gradleKtsPath, 'utf-8');
200
+ const match = /applicationId\s*=\s*["']([^"']+)["']/.exec(content);
201
+ if (match?.[1])
202
+ return match[1];
203
+ }
204
+ catch {
205
+ // ignore
206
+ }
207
+ return `com.example.${projectName}`;
208
+ }
209
+ function generateMigrationPrd(report) {
210
+ const rawStories = buildMigrationStories(report);
211
+ const stories = rawStories.map((s, i) => ({
212
+ ...s,
213
+ id: `M-${String(i + 1).padStart(3, '0')}`,
214
+ }));
215
+ const prd = {
216
+ version: '1.0.0',
217
+ project: report.projectName,
218
+ type: 'migration',
219
+ stories,
220
+ };
221
+ return JSON.stringify(prd, null, 2) + '\n';
222
+ }
223
+ function buildMigrationStories(report) {
224
+ const stories = [];
225
+ stories.push({
226
+ phase: 1,
227
+ priority: 'P0',
228
+ title: 'Review maxsim.config.yaml and verify project compiles',
229
+ description: `Review the generated maxsim.config.yaml for ${report.projectName}. Verify detected modules match the actual project. Confirm the project compiles and existing tests pass.`,
230
+ acceptanceCriteria: [
231
+ 'maxsim.config.yaml is reviewed and accurate',
232
+ 'flutter analyze reports zero errors',
233
+ 'flutter test passes all existing tests',
234
+ ],
235
+ passes: false,
236
+ });
237
+ if (report.stateManagement !== 'riverpod') {
238
+ const from = report.stateManagement === 'unknown' ? 'current state management' : report.stateManagement;
239
+ stories.push({
240
+ phase: 1,
241
+ priority: 'P0',
242
+ title: `Migrate state management from ${from} to Riverpod`,
243
+ description: `Add flutter_riverpod to pubspec.yaml. Wrap the app in ProviderScope in main.dart. Incrementally migrate ${from} state to Riverpod providers, starting with core providers and working outward to features.`,
244
+ acceptanceCriteria: [
245
+ 'flutter_riverpod is added to pubspec.yaml',
246
+ 'App is wrapped in ProviderScope in main.dart',
247
+ 'Core app state is managed via Riverpod providers',
248
+ 'flutter analyze reports zero errors',
249
+ 'flutter test passes all tests',
250
+ ],
251
+ passes: false,
252
+ });
253
+ }
254
+ if (report.routing !== 'go_router') {
255
+ const from = report.routing === 'navigator' ? 'Flutter Navigator' : report.routing;
256
+ stories.push({
257
+ phase: 1,
258
+ priority: 'P0',
259
+ title: `Migrate routing from ${from} to go_router`,
260
+ description: `Add go_router to pubspec.yaml. Create lib/core/router/app_router.dart with GoRouter configuration. Migrate existing routes to GoRoute definitions with TypedGoRoute annotations. Expose the router as a Riverpod provider. Run build_runner to generate route helpers.`,
261
+ acceptanceCriteria: [
262
+ 'go_router is added to pubspec.yaml',
263
+ 'lib/core/router/app_router.dart exists with GoRouter configuration',
264
+ 'All existing routes are migrated to GoRoute definitions',
265
+ 'Router is exposed as a Riverpod provider (routerProvider)',
266
+ 'app_router.g.dart is generated by build_runner',
267
+ 'flutter analyze reports zero errors',
268
+ ],
269
+ passes: false,
270
+ });
271
+ }
272
+ if (report.architecture !== 'clean') {
273
+ stories.push({
274
+ phase: 2,
275
+ priority: 'P0',
276
+ title: 'Refactor to Clean Architecture',
277
+ description: `Reorganize lib/ into lib/features/<name>/ with domain, data, and presentation layers. Move entities and repository interfaces to domain/. Move models and data sources to data/. Move UI components and Riverpod providers to presentation/. Keep lib/core/ for shared router, theme, and providers.`,
278
+ acceptanceCriteria: [
279
+ 'lib/features/ directory exists with feature-based organization',
280
+ 'Each feature has domain/, data/, and presentation/ subdirectories',
281
+ 'Domain layer imports no external packages',
282
+ 'Data layer implements domain repository interfaces',
283
+ 'Presentation layer accesses data only through Riverpod providers',
284
+ 'flutter analyze reports zero errors',
285
+ ],
286
+ passes: false,
287
+ });
288
+ }
289
+ if (report.cleanArchitectureGaps.length > 0) {
290
+ stories.push({
291
+ phase: 2,
292
+ priority: 'P1',
293
+ title: `Fix ${report.cleanArchitectureGaps.length} Clean Architecture layer gap(s)`,
294
+ description: `Address identified Clean Architecture gaps:\n${report.cleanArchitectureGaps.map((g) => `- ${g}`).join('\n')}\n\nFor each missing layer, create it following Clean Architecture conventions.`,
295
+ acceptanceCriteria: [
296
+ ...report.cleanArchitectureGaps.map((g) => `Fixed: ${g}`),
297
+ 'All features have domain, data, and presentation layers',
298
+ 'flutter analyze reports zero errors',
299
+ ],
300
+ passes: false,
301
+ });
302
+ }
303
+ stories.push({
304
+ phase: 3,
305
+ priority: 'P1',
306
+ title: 'Update and expand test suite for migrated code',
307
+ description: `Write unit and integration tests for migrated code. Ensure all Riverpod providers have unit tests. Ensure core routes can be navigated. Aim for >70% test coverage on the domain layer.`,
308
+ acceptanceCriteria: [
309
+ 'flutter test passes all tests',
310
+ 'Unit tests exist for all public Riverpod providers',
311
+ 'Route navigation tests exist for core routes',
312
+ 'flutter analyze reports zero errors',
313
+ ],
314
+ passes: false,
315
+ });
316
+ stories.push({
317
+ phase: 3,
318
+ priority: 'P2',
319
+ title: 'Final migration quality audit',
320
+ description: `Perform a final quality review of the migrated project. Fix remaining analyzer warnings. Update README.md to document the Clean Architecture structure and maxsim tooling.`,
321
+ acceptanceCriteria: [
322
+ 'flutter analyze reports zero errors AND zero warnings',
323
+ 'flutter test passes all tests',
324
+ 'dart format --set-exit-if-changed . passes',
325
+ 'README.md documents the project structure and how to run the app',
326
+ 'All Riverpod providers follow naming conventions (xxxProvider suffix)',
327
+ ],
328
+ passes: false,
329
+ });
330
+ return stories;
331
+ }
332
+ //# sourceMappingURL=migrate.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"migrate.js","sourceRoot":"","sources":["../../../src/cli/commands/migrate.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,3 @@
1
+ #!/usr/bin/env node
2
+ export {};
3
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env node
2
+ import chalk from 'chalk';
3
+ import { Command } from 'commander';
4
+ import { createCreateCommand } from './commands/create.js';
5
+ import { createAddCommand } from './commands/add.js';
6
+ import { createMigrateCommand } from './commands/migrate.js';
7
+ import { createListCommand } from './commands/list.js';
8
+ import { checkForUpdate } from './version-check.js';
9
+ const program = new Command();
10
+ program
11
+ .name('maxsim-flutter')
12
+ .version('0.1.0')
13
+ .description('AI-powered Flutter app scaffolding with Clean Architecture, Riverpod, and autonomous development via Ralph')
14
+ .option('--no-update-check', 'Skip the npm update check');
15
+ program.addCommand(createCreateCommand());
16
+ program.addCommand(createAddCommand());
17
+ program.addCommand(createMigrateCommand());
18
+ program.addCommand(createListCommand());
19
+ program.parse();
20
+ // Non-blocking update nudge (fires after the command completes)
21
+ const opts = program.opts();
22
+ if (opts.updateCheck !== false) {
23
+ checkForUpdate()
24
+ .then((latestVersion) => {
25
+ if (latestVersion) {
26
+ const current = program.version() ?? '0.1.0';
27
+ console.log(chalk.yellow(`\nUpdate available: ${current} → ${latestVersion}. Run npm install -g maxsim-flutter to update.`));
28
+ }
29
+ })
30
+ .catch(() => {
31
+ // Silently ignore
32
+ });
33
+ }
34
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/cli/index.ts"],"names":[],"mappings":";AACA,OAAO,KAAK,MAAM,OAAO,CAAC;AAC1B,OAAO,EAAE,OAAO,EAAE,MAAM,WAAW,CAAC;AACpC,OAAO,EAAE,mBAAmB,EAAE,MAAM,sBAAsB,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,mBAAmB,CAAC;AACrD,OAAO,EAAE,oBAAoB,EAAE,MAAM,uBAAuB,CAAC;AAC7D,OAAO,EAAE,iBAAiB,EAAE,MAAM,oBAAoB,CAAC;AACvD,OAAO,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEpD,MAAM,OAAO,GAAG,IAAI,OAAO,EAAE,CAAC;AAE9B,OAAO;KACJ,IAAI,CAAC,gBAAgB,CAAC;KACtB,OAAO,CAAC,OAAO,CAAC;KAChB,WAAW,CAAC,4GAA4G,CAAC;KACzH,MAAM,CAAC,mBAAmB,EAAE,2BAA2B,CAAC,CAAC;AAE5D,OAAO,CAAC,UAAU,CAAC,mBAAmB,EAAE,CAAC,CAAC;AAC1C,OAAO,CAAC,UAAU,CAAC,gBAAgB,EAAE,CAAC,CAAC;AACvC,OAAO,CAAC,UAAU,CAAC,oBAAoB,EAAE,CAAC,CAAC;AAC3C,OAAO,CAAC,UAAU,CAAC,iBAAiB,EAAE,CAAC,CAAC;AAExC,OAAO,CAAC,KAAK,EAAE,CAAC;AAEhB,gEAAgE;AAChE,MAAM,IAAI,GAAG,OAAO,CAAC,IAAI,EAA4B,CAAC;AACtD,IAAI,IAAI,CAAC,WAAW,KAAK,KAAK,EAAE,CAAC;IAC/B,cAAc,EAAE;SACb,IAAI,CAAC,CAAC,aAAa,EAAE,EAAE;QACtB,IAAI,aAAa,EAAE,CAAC;YAClB,MAAM,OAAO,GAAG,OAAO,CAAC,OAAO,EAAE,IAAI,OAAO,CAAC;YAC7C,OAAO,CAAC,GAAG,CACT,KAAK,CAAC,MAAM,CACV,uBAAuB,OAAO,MAAM,aAAa,gDAAgD,CAClG,CACF,CAAC;QACJ,CAAC;IACH,CAAC,CAAC;SACD,KAAK,CAAC,GAAG,EAAE;QACV,kBAAkB;IACpB,CAAC,CAAC,CAAC;AACP,CAAC"}
@@ -0,0 +1,9 @@
1
+ export interface CreateAnswers {
2
+ projectName: string;
3
+ orgId: string;
4
+ description: string;
5
+ platforms: string[];
6
+ modules: string[];
7
+ }
8
+ export declare function promptForProjectCreation(defaults?: Partial<CreateAnswers>): Promise<CreateAnswers>;
9
+ //# sourceMappingURL=prompts.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"prompts.d.ts","sourceRoot":"","sources":["../../../src/cli/ui/prompts.ts"],"names":[],"mappings":"AAEA,MAAM,WAAW,aAAa;IAC5B,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,EAAE,CAAC;IACpB,OAAO,EAAE,MAAM,EAAE,CAAC;CACnB;AAED,wBAAsB,wBAAwB,CAC5C,QAAQ,CAAC,EAAE,OAAO,CAAC,aAAa,CAAC,GAChC,OAAO,CAAC,aAAa,CAAC,CAkFxB"}