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.
- package/CHANGELOG.md +42 -0
- package/LICENSE +21 -0
- package/README.md +445 -0
- package/claude-plugin/.claude-plugin/plugin.json +46 -0
- package/claude-plugin/agents/flutter-setup-agent.md +54 -0
- package/claude-plugin/commands/flutter-add.md +32 -0
- package/claude-plugin/commands/flutter-create.md +28 -0
- package/claude-plugin/commands/flutter-migrate.md +28 -0
- package/claude-plugin/skills/flutter-scaffolding/SKILL.md +109 -0
- package/dist/claude-setup/agent-writer.d.ts +21 -0
- package/dist/claude-setup/agent-writer.d.ts.map +1 -0
- package/dist/claude-setup/agent-writer.js +365 -0
- package/dist/claude-setup/agent-writer.js.map +1 -0
- package/dist/claude-setup/claude-md-generator.d.ts +7 -0
- package/dist/claude-setup/claude-md-generator.d.ts.map +1 -0
- package/dist/claude-setup/claude-md-generator.js +428 -0
- package/dist/claude-setup/claude-md-generator.js.map +1 -0
- package/dist/claude-setup/commands-writer.d.ts +7 -0
- package/dist/claude-setup/commands-writer.d.ts.map +1 -0
- package/dist/claude-setup/commands-writer.js +303 -0
- package/dist/claude-setup/commands-writer.js.map +1 -0
- package/dist/claude-setup/hooks-writer.d.ts +3 -0
- package/dist/claude-setup/hooks-writer.d.ts.map +1 -0
- package/dist/claude-setup/hooks-writer.js +34 -0
- package/dist/claude-setup/hooks-writer.js.map +1 -0
- package/dist/claude-setup/index.d.ts +10 -0
- package/dist/claude-setup/index.d.ts.map +1 -0
- package/dist/claude-setup/index.js +9 -0
- package/dist/claude-setup/index.js.map +1 -0
- package/dist/claude-setup/mcp-config-writer.d.ts +3 -0
- package/dist/claude-setup/mcp-config-writer.d.ts.map +1 -0
- package/dist/claude-setup/mcp-config-writer.js +42 -0
- package/dist/claude-setup/mcp-config-writer.js.map +1 -0
- package/dist/claude-setup/plugin-assembler.d.ts +2 -0
- package/dist/claude-setup/plugin-assembler.d.ts.map +1 -0
- package/dist/claude-setup/plugin-assembler.js +3 -0
- package/dist/claude-setup/plugin-assembler.js.map +1 -0
- package/dist/claude-setup/prd-generator.d.ts +10 -0
- package/dist/claude-setup/prd-generator.d.ts.map +1 -0
- package/dist/claude-setup/prd-generator.js +295 -0
- package/dist/claude-setup/prd-generator.js.map +1 -0
- package/dist/claude-setup/setup-orchestrator.d.ts +11 -0
- package/dist/claude-setup/setup-orchestrator.d.ts.map +1 -0
- package/dist/claude-setup/setup-orchestrator.js +46 -0
- package/dist/claude-setup/setup-orchestrator.js.map +1 -0
- package/dist/claude-setup/skill-writer.d.ts +3 -0
- package/dist/claude-setup/skill-writer.d.ts.map +1 -0
- package/dist/claude-setup/skill-writer.js +256 -0
- package/dist/claude-setup/skill-writer.js.map +1 -0
- package/dist/cli/commands/add.d.ts +16 -0
- package/dist/cli/commands/add.d.ts.map +1 -0
- package/dist/cli/commands/add.js +414 -0
- package/dist/cli/commands/add.js.map +1 -0
- package/dist/cli/commands/create.d.ts +3 -0
- package/dist/cli/commands/create.d.ts.map +1 -0
- package/dist/cli/commands/create.js +161 -0
- package/dist/cli/commands/create.js.map +1 -0
- package/dist/cli/commands/list.d.ts +12 -0
- package/dist/cli/commands/list.d.ts.map +1 -0
- package/dist/cli/commands/list.js +148 -0
- package/dist/cli/commands/list.js.map +1 -0
- package/dist/cli/commands/migrate.d.ts +3 -0
- package/dist/cli/commands/migrate.d.ts.map +1 -0
- package/dist/cli/commands/migrate.js +332 -0
- package/dist/cli/commands/migrate.js.map +1 -0
- package/dist/cli/index.d.ts +3 -0
- package/dist/cli/index.d.ts.map +1 -0
- package/dist/cli/index.js +34 -0
- package/dist/cli/index.js.map +1 -0
- package/dist/cli/ui/prompts.d.ts +9 -0
- package/dist/cli/ui/prompts.d.ts.map +1 -0
- package/dist/cli/ui/prompts.js +74 -0
- package/dist/cli/ui/prompts.js.map +1 -0
- package/dist/cli/ui/spinner.d.ts +2 -0
- package/dist/cli/ui/spinner.d.ts.map +1 -0
- package/dist/cli/ui/spinner.js +5 -0
- package/dist/cli/ui/spinner.js.map +1 -0
- package/dist/cli/version-check.d.ts +7 -0
- package/dist/cli/version-check.d.ts.map +1 -0
- package/dist/cli/version-check.js +92 -0
- package/dist/cli/version-check.js.map +1 -0
- package/dist/core/config/defaults.d.ts +3 -0
- package/dist/core/config/defaults.d.ts.map +1 -0
- package/dist/core/config/defaults.js +21 -0
- package/dist/core/config/defaults.js.map +1 -0
- package/dist/core/config/loader.d.ts +4 -0
- package/dist/core/config/loader.d.ts.map +1 -0
- package/dist/core/config/loader.js +38 -0
- package/dist/core/config/loader.js.map +1 -0
- package/dist/core/config/schema.d.ts +406 -0
- package/dist/core/config/schema.d.ts.map +1 -0
- package/dist/core/config/schema.js +119 -0
- package/dist/core/config/schema.js.map +1 -0
- package/dist/core/context.d.ts +57 -0
- package/dist/core/context.d.ts.map +1 -0
- package/dist/core/context.js +99 -0
- package/dist/core/context.js.map +1 -0
- package/dist/core/detector.d.ts +28 -0
- package/dist/core/detector.d.ts.map +1 -0
- package/dist/core/detector.js +200 -0
- package/dist/core/detector.js.map +1 -0
- package/dist/core/validator.d.ts +7 -0
- package/dist/core/validator.d.ts.map +1 -0
- package/dist/core/validator.js +35 -0
- package/dist/core/validator.js.map +1 -0
- package/dist/index.d.ts +21 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +14 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/composer.d.ts +50 -0
- package/dist/modules/composer.d.ts.map +1 -0
- package/dist/modules/composer.js +122 -0
- package/dist/modules/composer.js.map +1 -0
- package/dist/modules/definitions/analytics/module.d.ts +7 -0
- package/dist/modules/definitions/analytics/module.d.ts.map +1 -0
- package/dist/modules/definitions/analytics/module.js +28 -0
- package/dist/modules/definitions/analytics/module.js.map +1 -0
- package/dist/modules/definitions/api/module.d.ts +7 -0
- package/dist/modules/definitions/api/module.d.ts.map +1 -0
- package/dist/modules/definitions/api/module.js +41 -0
- package/dist/modules/definitions/api/module.js.map +1 -0
- package/dist/modules/definitions/auth/module.d.ts +7 -0
- package/dist/modules/definitions/auth/module.d.ts.map +1 -0
- package/dist/modules/definitions/auth/module.js +53 -0
- package/dist/modules/definitions/auth/module.js.map +1 -0
- package/dist/modules/definitions/cicd/module.d.ts +7 -0
- package/dist/modules/definitions/cicd/module.d.ts.map +1 -0
- package/dist/modules/definitions/cicd/module.js +34 -0
- package/dist/modules/definitions/cicd/module.js.map +1 -0
- package/dist/modules/definitions/core/module.d.ts +7 -0
- package/dist/modules/definitions/core/module.d.ts.map +1 -0
- package/dist/modules/definitions/core/module.js +31 -0
- package/dist/modules/definitions/core/module.js.map +1 -0
- package/dist/modules/definitions/database/module.d.ts +8 -0
- package/dist/modules/definitions/database/module.d.ts.map +1 -0
- package/dist/modules/definitions/database/module.js +47 -0
- package/dist/modules/definitions/database/module.js.map +1 -0
- package/dist/modules/definitions/deep-linking/module.d.ts +7 -0
- package/dist/modules/definitions/deep-linking/module.d.ts.map +1 -0
- package/dist/modules/definitions/deep-linking/module.js +48 -0
- package/dist/modules/definitions/deep-linking/module.js.map +1 -0
- package/dist/modules/definitions/i18n/module.d.ts +7 -0
- package/dist/modules/definitions/i18n/module.d.ts.map +1 -0
- package/dist/modules/definitions/i18n/module.js +37 -0
- package/dist/modules/definitions/i18n/module.js.map +1 -0
- package/dist/modules/definitions/push/module.d.ts +7 -0
- package/dist/modules/definitions/push/module.d.ts.map +1 -0
- package/dist/modules/definitions/push/module.js +40 -0
- package/dist/modules/definitions/push/module.js.map +1 -0
- package/dist/modules/definitions/theme/module.d.ts +7 -0
- package/dist/modules/definitions/theme/module.d.ts.map +1 -0
- package/dist/modules/definitions/theme/module.js +42 -0
- package/dist/modules/definitions/theme/module.js.map +1 -0
- package/dist/modules/registry.d.ts +50 -0
- package/dist/modules/registry.d.ts.map +1 -0
- package/dist/modules/registry.js +104 -0
- package/dist/modules/registry.js.map +1 -0
- package/dist/modules/resolver.d.ts +42 -0
- package/dist/modules/resolver.d.ts.map +1 -0
- package/dist/modules/resolver.js +140 -0
- package/dist/modules/resolver.js.map +1 -0
- package/dist/ralph/prd-generator.d.ts +2 -0
- package/dist/ralph/prd-generator.d.ts.map +1 -0
- package/dist/ralph/prd-generator.js +3 -0
- package/dist/ralph/prd-generator.js.map +1 -0
- package/dist/ralph/ralph-converter.d.ts +2 -0
- package/dist/ralph/ralph-converter.d.ts.map +1 -0
- package/dist/ralph/ralph-converter.js +3 -0
- package/dist/ralph/ralph-converter.js.map +1 -0
- package/dist/ralph/story-sizer.d.ts +2 -0
- package/dist/ralph/story-sizer.d.ts.map +1 -0
- package/dist/ralph/story-sizer.js +3 -0
- package/dist/ralph/story-sizer.js.map +1 -0
- package/dist/scaffold/engine.d.ts +40 -0
- package/dist/scaffold/engine.d.ts.map +1 -0
- package/dist/scaffold/engine.js +233 -0
- package/dist/scaffold/engine.js.map +1 -0
- package/dist/scaffold/file-writer.d.ts +22 -0
- package/dist/scaffold/file-writer.d.ts.map +1 -0
- package/dist/scaffold/file-writer.js +68 -0
- package/dist/scaffold/file-writer.js.map +1 -0
- package/dist/scaffold/post-processors/build-runner.d.ts +2 -0
- package/dist/scaffold/post-processors/build-runner.d.ts.map +1 -0
- package/dist/scaffold/post-processors/build-runner.js +5 -0
- package/dist/scaffold/post-processors/build-runner.js.map +1 -0
- package/dist/scaffold/post-processors/dart-format.d.ts +2 -0
- package/dist/scaffold/post-processors/dart-format.d.ts.map +1 -0
- package/dist/scaffold/post-processors/dart-format.js +5 -0
- package/dist/scaffold/post-processors/dart-format.js.map +1 -0
- package/dist/scaffold/post-processors/flutter-pub-get.d.ts +2 -0
- package/dist/scaffold/post-processors/flutter-pub-get.d.ts.map +1 -0
- package/dist/scaffold/post-processors/flutter-pub-get.js +5 -0
- package/dist/scaffold/post-processors/flutter-pub-get.js.map +1 -0
- package/dist/scaffold/renderer.d.ts +20 -0
- package/dist/scaffold/renderer.d.ts.map +1 -0
- package/dist/scaffold/renderer.js +75 -0
- package/dist/scaffold/renderer.js.map +1 -0
- package/dist/scaffold/template-helpers.d.ts +25 -0
- package/dist/scaffold/template-helpers.d.ts.map +1 -0
- package/dist/scaffold/template-helpers.js +115 -0
- package/dist/scaffold/template-helpers.js.map +1 -0
- package/dist/types/config.d.ts +4 -0
- package/dist/types/config.d.ts.map +1 -0
- package/dist/types/config.js +2 -0
- package/dist/types/config.js.map +1 -0
- package/dist/types/module.d.ts +85 -0
- package/dist/types/module.d.ts.map +1 -0
- package/dist/types/module.js +2 -0
- package/dist/types/module.js.map +1 -0
- package/dist/types/project.d.ts +13 -0
- package/dist/types/project.d.ts.map +1 -0
- package/dist/types/project.js +2 -0
- package/dist/types/project.js.map +1 -0
- package/package.json +80 -0
- package/templates/core/analysis_options.yaml.hbs +21 -0
- package/templates/core/lib/app.dart.hbs +20 -0
- package/templates/core/lib/core/providers/app_providers.dart.hbs +3 -0
- package/templates/core/lib/core/router/app_router.dart.hbs +19 -0
- package/templates/core/lib/core/theme/app_theme.dart.hbs +15 -0
- package/templates/core/lib/features/home/data/models/.gitkeep +0 -0
- package/templates/core/lib/features/home/data/repositories/.gitkeep +0 -0
- package/templates/core/lib/features/home/domain/entities/.gitkeep +0 -0
- package/templates/core/lib/features/home/domain/repositories/.gitkeep +0 -0
- package/templates/core/lib/features/home/presentation/pages/home_page.dart.hbs +18 -0
- package/templates/core/lib/features/home/presentation/widgets/.gitkeep +0 -0
- package/templates/core/lib/main.dart.hbs +11 -0
- package/templates/core/pubspec.yaml.hbs +30 -0
- package/templates/core/test/widget_test.dart.hbs +16 -0
- package/templates/modules/analytics/lib/features/analytics/data/observers/analytics_route_observer.dart.hbs +53 -0
- package/templates/modules/analytics/lib/features/analytics/data/services/firebase_analytics_service.dart.hbs +39 -0
- package/templates/modules/analytics/lib/features/analytics/domain/services/analytics_service.dart.hbs +25 -0
- package/templates/modules/analytics/lib/features/analytics/presentation/providers/analytics_provider.dart.hbs +17 -0
- package/templates/modules/analytics/pubspec.partial.yaml +2 -0
- package/templates/modules/api/lib/features/api/data/datasources/api_client.dart.hbs +171 -0
- package/templates/modules/api/lib/features/api/data/interceptors/auth_interceptor.dart.hbs +25 -0
- package/templates/modules/api/lib/features/api/data/interceptors/retry_interceptor.dart.hbs +42 -0
- package/templates/modules/api/lib/features/api/data/repositories/api_repository_impl.dart.hbs +21 -0
- package/templates/modules/api/lib/features/api/domain/exceptions/api_exception.dart.hbs +31 -0
- package/templates/modules/api/lib/features/api/domain/repositories/api_repository.dart.hbs +8 -0
- package/templates/modules/api/lib/features/api/presentation/providers/api_provider.dart.hbs +17 -0
- package/templates/modules/api/pubspec.partial.yaml +7 -0
- package/templates/modules/auth/lib/features/auth/data/datasources/auth_remote_datasource.dart.hbs +181 -0
- package/templates/modules/auth/lib/features/auth/data/models/auth_user_model.dart.hbs +27 -0
- package/templates/modules/auth/lib/features/auth/data/repositories/auth_repository_impl.dart.hbs +49 -0
- package/templates/modules/auth/lib/features/auth/domain/entities/user_entity.dart.hbs +18 -0
- package/templates/modules/auth/lib/features/auth/domain/repositories/auth_repository.dart.hbs +22 -0
- package/templates/modules/auth/lib/features/auth/domain/usecases/register_usecase.dart.hbs +20 -0
- package/templates/modules/auth/lib/features/auth/domain/usecases/sign_in_usecase.dart.hbs +15 -0
- package/templates/modules/auth/lib/features/auth/domain/usecases/sign_out_usecase.dart.hbs +11 -0
- package/templates/modules/auth/lib/features/auth/presentation/pages/login_page.dart.hbs +118 -0
- package/templates/modules/auth/lib/features/auth/presentation/pages/register_page.dart.hbs +131 -0
- package/templates/modules/auth/lib/features/auth/presentation/providers/auth_provider.dart.hbs +31 -0
- package/templates/modules/auth/pubspec.partial.yaml +13 -0
- package/templates/modules/cicd/.github/workflows/ci.yml.hbs +45 -0
- package/templates/modules/cicd/.gitlab-ci.yml.hbs +53 -0
- package/templates/modules/cicd/bitbucket-pipelines.yml.hbs +39 -0
- package/templates/modules/cicd/pubspec.partial.yaml +1 -0
- package/templates/modules/database/lib/features/database/data/datasources/database_datasource.dart.hbs +115 -0
- package/templates/modules/database/lib/features/database/data/repositories/database_repository_impl.dart.hbs +73 -0
- package/templates/modules/database/lib/features/database/domain/repositories/database_repository.dart.hbs +10 -0
- package/templates/modules/database/lib/features/database/presentation/providers/database_provider.dart.hbs +43 -0
- package/templates/modules/database/pubspec.partial.yaml +27 -0
- package/templates/modules/deep-linking/lib/features/deep_linking/data/datasources/deep_link_datasource.dart.hbs +18 -0
- package/templates/modules/deep-linking/lib/features/deep_linking/data/repositories/deep_link_repository_impl.dart.hbs +14 -0
- package/templates/modules/deep-linking/lib/features/deep_linking/domain/repositories/deep_link_repository.dart.hbs +7 -0
- package/templates/modules/deep-linking/lib/features/deep_linking/presentation/providers/deep_link_provider.dart.hbs +57 -0
- package/templates/modules/deep-linking/pubspec.partial.yaml +2 -0
- package/templates/modules/i18n/l10n.yaml.hbs +5 -0
- package/templates/modules/i18n/lib/core/l10n/l10n_config.dart.hbs +29 -0
- package/templates/modules/i18n/lib/core/l10n/l10n_provider.dart.hbs +20 -0
- package/templates/modules/i18n/lib/l10n/app_de.arb.hbs +27 -0
- package/templates/modules/i18n/lib/l10n/app_en.arb.hbs +27 -0
- package/templates/modules/i18n/pubspec.partial.yaml +7 -0
- package/templates/modules/push/lib/features/push/data/datasources/push_datasource.dart.hbs +124 -0
- package/templates/modules/push/lib/features/push/data/repositories/push_repository_impl.dart.hbs +28 -0
- package/templates/modules/push/lib/features/push/domain/repositories/push_repository.dart.hbs +31 -0
- package/templates/modules/push/lib/features/push/presentation/providers/push_provider.dart.hbs +34 -0
- package/templates/modules/push/pubspec.partial.yaml +8 -0
- package/templates/modules/theme/lib/core/theme/app_theme.dart.hbs +74 -0
- package/templates/modules/theme/lib/core/theme/theme_provider.dart.hbs +46 -0
- package/templates/modules/theme/pubspec.partial.yaml +2 -0
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flutter-migrate
|
|
3
|
+
description: Migrate an existing Flutter project to maxsim-flutter Clean Architecture
|
|
4
|
+
argument-hint: [--analysis-only]
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
Migrate an existing Flutter project to maxsim-flutter Clean Architecture.
|
|
8
|
+
|
|
9
|
+
Run: `npx maxsim-flutter migrate $ARGUMENTS`
|
|
10
|
+
|
|
11
|
+
## Flags
|
|
12
|
+
- `--analysis-only` - Analyze and report without modifying anything
|
|
13
|
+
- `--project <path>` - Path to the Flutter project (default: current directory)
|
|
14
|
+
- `--dry-run` - Preview changes without applying them
|
|
15
|
+
|
|
16
|
+
## What It Does
|
|
17
|
+
1. **Analyze** the existing project structure:
|
|
18
|
+
- Detect architecture pattern (Clean Architecture, MVC, MVVM)
|
|
19
|
+
- Detect state management (Riverpod, Bloc, Provider, GetX)
|
|
20
|
+
- Detect routing (go_router, auto_route, Navigator)
|
|
21
|
+
- Detect existing modules (auth, API, database, i18n, etc.)
|
|
22
|
+
- Find Clean Architecture gaps (missing layers per feature)
|
|
23
|
+
2. **Report** findings with difficulty assessment and recommendations
|
|
24
|
+
3. **Migrate** (if not `--analysis-only`):
|
|
25
|
+
- Create maxsim.config.yaml from detected settings
|
|
26
|
+
- Add .claude/ directory (agents, skills, CLAUDE.md, hooks)
|
|
27
|
+
- Generate migration PRD with phased stories
|
|
28
|
+
4. All operations are **non-destructive** - existing files are never deleted or overwritten
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: flutter-scaffolding
|
|
3
|
+
description: Provides context about maxsim-flutter's available modules, architecture patterns, and configuration. Use when discussing Flutter project setup options.
|
|
4
|
+
user-invocable: false
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# maxsim-flutter Scaffolding Knowledge
|
|
8
|
+
|
|
9
|
+
## Architecture: Clean Architecture with Riverpod
|
|
10
|
+
|
|
11
|
+
Every generated project follows feature-first Clean Architecture:
|
|
12
|
+
```
|
|
13
|
+
lib/
|
|
14
|
+
├── core/ → Shared utilities (router, theme, providers, network)
|
|
15
|
+
├── features/ → Feature-first organization
|
|
16
|
+
│ └── <feature>/
|
|
17
|
+
│ ├── data/ → Repository implementations, DTOs, data sources
|
|
18
|
+
│ ├── domain/ → Entities, use cases, repository interfaces (pure Dart)
|
|
19
|
+
│ └── presentation/ → Screens, widgets, Riverpod providers
|
|
20
|
+
└── shared/ → Shared widgets, extensions, constants
|
|
21
|
+
```
|
|
22
|
+
|
|
23
|
+
**Layer rules:**
|
|
24
|
+
- Domain layer has NO dependencies on other layers (pure Dart only)
|
|
25
|
+
- Data layer implements domain interfaces, depends on domain
|
|
26
|
+
- Presentation layer depends on domain (use cases) via Riverpod providers
|
|
27
|
+
- Cross-feature communication goes through domain interfaces only
|
|
28
|
+
|
|
29
|
+
## State Management: Riverpod 3.x
|
|
30
|
+
- `@riverpod` annotations with code generation via `build_runner`
|
|
31
|
+
- `AsyncNotifier` for async mutable state
|
|
32
|
+
- `Notifier` for sync mutable state
|
|
33
|
+
- Provider families for parameterized state
|
|
34
|
+
- `ProviderScope` wraps `MaterialApp` in `main.dart`
|
|
35
|
+
|
|
36
|
+
## Routing: go_router 17.x
|
|
37
|
+
- `@TypedGoRoute` annotations with code generation
|
|
38
|
+
- `GoRouter` provided via Riverpod provider
|
|
39
|
+
- ShellRoute for persistent navigation shells
|
|
40
|
+
- Redirect logic based on auth state (when auth module is enabled)
|
|
41
|
+
- Deep link handling built-in (when deep-linking module is enabled)
|
|
42
|
+
|
|
43
|
+
## Available Modules
|
|
44
|
+
|
|
45
|
+
### auth - Authentication
|
|
46
|
+
- **Providers**: firebase, supabase, custom
|
|
47
|
+
- **Dependencies**: None
|
|
48
|
+
- **Generates**: Login/Register pages, AuthRepository, UserEntity, sign-in/sign-out use cases
|
|
49
|
+
- **Packages**: firebase_auth (firebase), supabase_flutter (supabase), dio (custom)
|
|
50
|
+
|
|
51
|
+
### api - HTTP Client
|
|
52
|
+
- **Configuration**: Base URL
|
|
53
|
+
- **Dependencies**: None
|
|
54
|
+
- **Generates**: Dio client with interceptors (auth, retry), ApiException, ApiRepository
|
|
55
|
+
- **Packages**: dio, retrofit, json_annotation, json_serializable
|
|
56
|
+
|
|
57
|
+
### database - Local Storage
|
|
58
|
+
- **Engines**: drift (SQLite), hive (NoSQL), isar (NoSQL)
|
|
59
|
+
- **Dependencies**: None
|
|
60
|
+
- **Generates**: DatabaseRepository, data source per engine, database provider
|
|
61
|
+
- **Packages**: drift + sqlite3_flutter_libs (drift), hive_ce_flutter (hive), isar + isar_flutter_libs (isar)
|
|
62
|
+
|
|
63
|
+
### i18n - Internationalization
|
|
64
|
+
- **Configuration**: Default locale
|
|
65
|
+
- **Dependencies**: None
|
|
66
|
+
- **Generates**: ARB files (en, de), l10n.yaml, locale provider
|
|
67
|
+
- **Packages**: flutter_localizations, intl
|
|
68
|
+
|
|
69
|
+
### theme - Advanced Theming
|
|
70
|
+
- **Configuration**: Seed color (hex), dark mode toggle
|
|
71
|
+
- **Dependencies**: None
|
|
72
|
+
- **Generates**: Material 3 ThemeData with ColorScheme.fromSeed, theme mode provider
|
|
73
|
+
- **Packages**: google_fonts
|
|
74
|
+
|
|
75
|
+
### push - Push Notifications
|
|
76
|
+
- **Providers**: firebase, onesignal
|
|
77
|
+
- **Dependencies**: None
|
|
78
|
+
- **Generates**: Push notification service, handlers, permission requests
|
|
79
|
+
- **Packages**: firebase_messaging (firebase), onesignal_flutter (onesignal)
|
|
80
|
+
|
|
81
|
+
### analytics - Analytics Tracking
|
|
82
|
+
- **Providers**: firebase
|
|
83
|
+
- **Dependencies**: None
|
|
84
|
+
- **Generates**: AnalyticsService abstraction, GoRouter observer
|
|
85
|
+
- **Packages**: firebase_analytics
|
|
86
|
+
|
|
87
|
+
### cicd - CI/CD Pipelines
|
|
88
|
+
- **Providers**: github, gitlab, bitbucket
|
|
89
|
+
- **Dependencies**: None
|
|
90
|
+
- **Generates**: Pipeline config files (GitHub Actions / GitLab CI / Bitbucket Pipelines)
|
|
91
|
+
- **Packages**: None (config files only)
|
|
92
|
+
|
|
93
|
+
### deep-linking - Deep Links
|
|
94
|
+
- **Dependencies**: None
|
|
95
|
+
- **Generates**: App Links config, go_router deep link integration
|
|
96
|
+
- **Packages**: app_links
|
|
97
|
+
|
|
98
|
+
## CLI Commands
|
|
99
|
+
- `npx maxsim-flutter create [name]` - Create a new project (interactive or with `--yes` for defaults)
|
|
100
|
+
- `npx maxsim-flutter add <module>` - Add a module to an existing project
|
|
101
|
+
- `npx maxsim-flutter migrate` - Migrate an existing Flutter project
|
|
102
|
+
|
|
103
|
+
## Claude Code Integration
|
|
104
|
+
Generated projects include a full `.claude/` directory with:
|
|
105
|
+
- **CLAUDE.md** - Architecture rules, patterns, quality gates
|
|
106
|
+
- **Agents** - Architect, builder, tester, reviewer, docs teammates
|
|
107
|
+
- **Skills** - Flutter patterns, GoRouter patterns, module conventions, PRD
|
|
108
|
+
- **Hooks** - TaskCompleted (flutter analyze + test), TeammateIdle (uncommitted work check)
|
|
109
|
+
- **Commands** - add-feature, analyze
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import type { ProjectContext } from '../core/context.js';
|
|
2
|
+
interface AgentDefinition {
|
|
3
|
+
filename: string;
|
|
4
|
+
name: string;
|
|
5
|
+
description: string;
|
|
6
|
+
model: 'sonnet' | 'haiku';
|
|
7
|
+
tools: string[];
|
|
8
|
+
body: string;
|
|
9
|
+
}
|
|
10
|
+
/**
|
|
11
|
+
* Generates agent definition markdown files for the scaffolded Flutter project.
|
|
12
|
+
* Agents are designed as Claude Code Agent Teams teammates.
|
|
13
|
+
*/
|
|
14
|
+
export declare function writeAgents(context: ProjectContext, outputPath: string): Promise<string[]>;
|
|
15
|
+
/**
|
|
16
|
+
* Builds agent definitions without writing to disk.
|
|
17
|
+
* Useful for testing and dry-run mode.
|
|
18
|
+
*/
|
|
19
|
+
export declare function buildAgentDefinitions(context: ProjectContext): AgentDefinition[];
|
|
20
|
+
export {};
|
|
21
|
+
//# sourceMappingURL=agent-writer.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-writer.d.ts","sourceRoot":"","sources":["../../src/claude-setup/agent-writer.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD,UAAU,eAAe;IACvB,QAAQ,EAAE,MAAM,CAAC;IACjB,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,QAAQ,GAAG,OAAO,CAAC;IAC1B,KAAK,EAAE,MAAM,EAAE,CAAC;IAChB,IAAI,EAAE,MAAM,CAAC;CACd;AAED;;;GAGG;AACH,wBAAsB,WAAW,CAC/B,OAAO,EAAE,cAAc,EACvB,UAAU,EAAE,MAAM,GACjB,OAAO,CAAC,MAAM,EAAE,CAAC,CAenB;AAED;;;GAGG;AACH,wBAAgB,qBAAqB,CAAC,OAAO,EAAE,cAAc,GAAG,eAAe,EAAE,CAQhF"}
|
|
@@ -0,0 +1,365 @@
|
|
|
1
|
+
import { writeFile, mkdir } from 'node:fs/promises';
|
|
2
|
+
import { join } from 'node:path';
|
|
3
|
+
/**
|
|
4
|
+
* Generates agent definition markdown files for the scaffolded Flutter project.
|
|
5
|
+
* Agents are designed as Claude Code Agent Teams teammates.
|
|
6
|
+
*/
|
|
7
|
+
export async function writeAgents(context, outputPath) {
|
|
8
|
+
const agentsDir = join(outputPath, '.claude', 'agents');
|
|
9
|
+
await mkdir(agentsDir, { recursive: true });
|
|
10
|
+
const agents = buildAgentDefinitions(context);
|
|
11
|
+
const writtenFiles = [];
|
|
12
|
+
for (const agent of agents) {
|
|
13
|
+
const filePath = join(agentsDir, agent.filename);
|
|
14
|
+
const content = formatAgentMarkdown(agent);
|
|
15
|
+
await writeFile(filePath, content, 'utf-8');
|
|
16
|
+
writtenFiles.push(filePath);
|
|
17
|
+
}
|
|
18
|
+
return writtenFiles;
|
|
19
|
+
}
|
|
20
|
+
/**
|
|
21
|
+
* Builds agent definitions without writing to disk.
|
|
22
|
+
* Useful for testing and dry-run mode.
|
|
23
|
+
*/
|
|
24
|
+
export function buildAgentDefinitions(context) {
|
|
25
|
+
return [
|
|
26
|
+
buildArchitectAgent(context),
|
|
27
|
+
buildFeatureBuilderAgent(context),
|
|
28
|
+
buildTesterAgent(context),
|
|
29
|
+
buildReviewerAgent(context),
|
|
30
|
+
buildDocsAgent(context),
|
|
31
|
+
];
|
|
32
|
+
}
|
|
33
|
+
function formatAgentMarkdown(agent) {
|
|
34
|
+
const toolsList = JSON.stringify(agent.tools);
|
|
35
|
+
return `---
|
|
36
|
+
name: ${agent.name}
|
|
37
|
+
description: ${agent.description}
|
|
38
|
+
model: ${agent.model}
|
|
39
|
+
tools: ${toolsList}
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
${agent.body}
|
|
43
|
+
`;
|
|
44
|
+
}
|
|
45
|
+
function getEnabledModulesList(context) {
|
|
46
|
+
const modules = [];
|
|
47
|
+
if (context.modules.auth)
|
|
48
|
+
modules.push('auth');
|
|
49
|
+
if (context.modules.api)
|
|
50
|
+
modules.push('api');
|
|
51
|
+
if (context.modules.database)
|
|
52
|
+
modules.push('database');
|
|
53
|
+
if (context.modules.i18n)
|
|
54
|
+
modules.push('i18n');
|
|
55
|
+
if (context.modules.theme)
|
|
56
|
+
modules.push('theme');
|
|
57
|
+
if (context.modules.push)
|
|
58
|
+
modules.push('push');
|
|
59
|
+
if (context.modules.analytics)
|
|
60
|
+
modules.push('analytics');
|
|
61
|
+
if (context.modules.cicd)
|
|
62
|
+
modules.push('cicd');
|
|
63
|
+
if (context.modules.deepLinking)
|
|
64
|
+
modules.push('deep-linking');
|
|
65
|
+
return modules;
|
|
66
|
+
}
|
|
67
|
+
function buildModuleContext(context) {
|
|
68
|
+
const modules = getEnabledModulesList(context);
|
|
69
|
+
if (modules.length === 0) {
|
|
70
|
+
return 'This project uses the core Clean Architecture structure without additional modules.';
|
|
71
|
+
}
|
|
72
|
+
return `Active modules: ${modules.join(', ')}. Be aware of module boundaries and inter-module dependencies.`;
|
|
73
|
+
}
|
|
74
|
+
function buildArchitectAgent(context) {
|
|
75
|
+
const moduleContext = buildModuleContext(context);
|
|
76
|
+
return {
|
|
77
|
+
filename: 'flutter-architect.md',
|
|
78
|
+
name: 'flutter-architect',
|
|
79
|
+
description: 'Reviews PRD stories and designs implementation approaches. Validates Clean Architecture compliance before builders start.',
|
|
80
|
+
model: 'sonnet',
|
|
81
|
+
tools: ['Read', 'Grep', 'Glob', 'WebSearch'],
|
|
82
|
+
body: `You are a Flutter architect for **${context.projectName}**. You review stories and design implementation plans before builders start coding.
|
|
83
|
+
|
|
84
|
+
## Your Role
|
|
85
|
+
|
|
86
|
+
You are a **read-only** teammate. You analyze, plan, and review — you do NOT write code.
|
|
87
|
+
|
|
88
|
+
## Responsibilities
|
|
89
|
+
|
|
90
|
+
1. Read the next story from \`prd.json\`
|
|
91
|
+
2. Analyze which files need to change and what the implementation approach should be
|
|
92
|
+
3. Validate that the proposed approach follows Clean Architecture layer rules
|
|
93
|
+
4. Create implementation tasks for builders with clear acceptance criteria
|
|
94
|
+
5. Review builder output for architectural compliance
|
|
95
|
+
|
|
96
|
+
## Architecture Rules
|
|
97
|
+
|
|
98
|
+
This project uses Clean Architecture with three layers per feature:
|
|
99
|
+
|
|
100
|
+
- **Domain** (entities, repository interfaces, use cases) — no external dependencies
|
|
101
|
+
- **Data** (repository implementations, data sources, models) — depends only on Domain
|
|
102
|
+
- **Presentation** (pages, widgets, Riverpod providers) — depends on Domain, never directly on Data
|
|
103
|
+
|
|
104
|
+
Import rules:
|
|
105
|
+
- \`domain/\` must NOT import from \`data/\` or \`presentation/\`
|
|
106
|
+
- \`data/\` must NOT import from \`presentation/\`
|
|
107
|
+
- \`presentation/\` must NOT import from \`data/\`
|
|
108
|
+
- Cross-feature imports go through \`core/\` barrel exports
|
|
109
|
+
|
|
110
|
+
## Module Context
|
|
111
|
+
|
|
112
|
+
${moduleContext}
|
|
113
|
+
|
|
114
|
+
## Key Patterns
|
|
115
|
+
|
|
116
|
+
- **State Management**: Riverpod (prefer AsyncNotifier for new code)
|
|
117
|
+
- **Navigation**: go_router with TypedGoRoute
|
|
118
|
+
- **Code Generation**: freezed for entities, json_serializable for models
|
|
119
|
+
- **Implementation order**: Domain first, then Data, then Presentation
|
|
120
|
+
|
|
121
|
+
## Communication
|
|
122
|
+
|
|
123
|
+
- Send implementation plans to builders before they start
|
|
124
|
+
- Flag architecture violations immediately
|
|
125
|
+
- Approve or reject builder implementations based on architecture compliance`,
|
|
126
|
+
};
|
|
127
|
+
}
|
|
128
|
+
function buildFeatureBuilderAgent(context) {
|
|
129
|
+
const moduleContext = buildModuleContext(context);
|
|
130
|
+
return {
|
|
131
|
+
filename: 'flutter-feature-builder.md',
|
|
132
|
+
name: 'flutter-feature-builder',
|
|
133
|
+
description: 'Implements Flutter features following Clean Architecture. Claims tasks from the shared task list and writes code.',
|
|
134
|
+
model: 'sonnet',
|
|
135
|
+
tools: ['Read', 'Write', 'Edit', 'Grep', 'Glob', 'Bash'],
|
|
136
|
+
body: `You are a Flutter feature builder for **${context.projectName}**. You implement features following Clean Architecture and Riverpod patterns.
|
|
137
|
+
|
|
138
|
+
## Your Role
|
|
139
|
+
|
|
140
|
+
You are an **implementation** teammate. You claim tasks, write code, and run quality checks.
|
|
141
|
+
|
|
142
|
+
## Workflow
|
|
143
|
+
|
|
144
|
+
1. Check the shared task list for unassigned tasks (prefer lowest ID first)
|
|
145
|
+
2. Claim a task and mark it in-progress
|
|
146
|
+
3. Implement following the architect's guidance (if provided)
|
|
147
|
+
4. Run quality checks: \`flutter analyze\`, \`flutter test\`
|
|
148
|
+
5. Mark the task complete and notify the tester
|
|
149
|
+
|
|
150
|
+
## Implementation Order
|
|
151
|
+
|
|
152
|
+
Always implement in this order within a feature:
|
|
153
|
+
|
|
154
|
+
1. **Domain layer** first: entities (freezed), repository interfaces, use cases
|
|
155
|
+
2. **Data layer** second: models, data sources, repository implementations
|
|
156
|
+
3. **Presentation layer** last: providers (Riverpod), pages, widgets
|
|
157
|
+
|
|
158
|
+
## Code Conventions
|
|
159
|
+
|
|
160
|
+
- Files: \`snake_case.dart\`
|
|
161
|
+
- Classes: \`PascalCase\`
|
|
162
|
+
- Variables/functions: \`camelCase\`
|
|
163
|
+
- Providers: suffix with \`Provider\` (e.g., \`authRepositoryProvider\`)
|
|
164
|
+
- Use \`ref.watch()\` in build methods, \`ref.read()\` in callbacks
|
|
165
|
+
- Prefer \`AsyncNotifier\` over \`StateNotifier\` for new async state
|
|
166
|
+
|
|
167
|
+
## Module Context
|
|
168
|
+
|
|
169
|
+
${moduleContext}
|
|
170
|
+
|
|
171
|
+
## Quality Checks
|
|
172
|
+
|
|
173
|
+
Before marking any task complete:
|
|
174
|
+
|
|
175
|
+
\`\`\`bash
|
|
176
|
+
flutter analyze # Zero warnings/errors
|
|
177
|
+
flutter test # All tests pass
|
|
178
|
+
dart format --set-exit-if-changed . # Code is formatted
|
|
179
|
+
\`\`\`
|
|
180
|
+
|
|
181
|
+
For code generation changes:
|
|
182
|
+
\`\`\`bash
|
|
183
|
+
dart run build_runner build --delete-conflicting-outputs
|
|
184
|
+
\`\`\`
|
|
185
|
+
|
|
186
|
+
## Key Files
|
|
187
|
+
|
|
188
|
+
- \`lib/core/router/app_router.dart\` — Route definitions
|
|
189
|
+
- \`lib/core/providers/app_providers.dart\` — Global provider barrel
|
|
190
|
+
- \`pubspec.yaml\` — Dependencies`,
|
|
191
|
+
};
|
|
192
|
+
}
|
|
193
|
+
function buildTesterAgent(context) {
|
|
194
|
+
const moduleContext = buildModuleContext(context);
|
|
195
|
+
return {
|
|
196
|
+
filename: 'flutter-tester.md',
|
|
197
|
+
name: 'flutter-tester',
|
|
198
|
+
description: 'Writes and runs tests for Flutter features. Reports failures back to builders with reproduction steps.',
|
|
199
|
+
model: 'sonnet',
|
|
200
|
+
tools: ['Read', 'Write', 'Edit', 'Grep', 'Glob', 'Bash'],
|
|
201
|
+
body: `You are a Flutter test engineer for **${context.projectName}**. You write tests and validate that implementations meet acceptance criteria.
|
|
202
|
+
|
|
203
|
+
## Your Role
|
|
204
|
+
|
|
205
|
+
You are a **testing** teammate. You write tests, run quality checks, and report failures.
|
|
206
|
+
|
|
207
|
+
## Responsibilities
|
|
208
|
+
|
|
209
|
+
1. After a builder completes a task, write tests for the new code
|
|
210
|
+
2. Run \`flutter analyze\` and \`flutter test\` to validate
|
|
211
|
+
3. Report failures back to the builder with clear reproduction steps
|
|
212
|
+
4. Verify acceptance criteria from the story are met
|
|
213
|
+
|
|
214
|
+
## Test Structure
|
|
215
|
+
|
|
216
|
+
\`\`\`
|
|
217
|
+
test/
|
|
218
|
+
unit/ # Unit tests for individual classes
|
|
219
|
+
widget/ # Widget tests for UI components
|
|
220
|
+
integration/ # Integration tests for feature flows
|
|
221
|
+
\`\`\`
|
|
222
|
+
|
|
223
|
+
## Testing Patterns
|
|
224
|
+
|
|
225
|
+
- Use \`flutter_test\` and \`mocktail\` for mocking
|
|
226
|
+
- Test each Clean Architecture layer independently:
|
|
227
|
+
- **Domain**: Test use cases with mocked repositories
|
|
228
|
+
- **Data**: Test repository implementations with mocked data sources
|
|
229
|
+
- **Presentation**: Test providers with mocked use cases, widget tests for pages
|
|
230
|
+
- Name test files: \`<source_file>_test.dart\`
|
|
231
|
+
- Use \`setUp\` and \`tearDown\` for test lifecycle
|
|
232
|
+
|
|
233
|
+
## Module Context
|
|
234
|
+
|
|
235
|
+
${moduleContext}
|
|
236
|
+
|
|
237
|
+
## Quality Gates
|
|
238
|
+
|
|
239
|
+
ALL of the following must pass:
|
|
240
|
+
|
|
241
|
+
\`\`\`bash
|
|
242
|
+
flutter analyze # Zero warnings/errors
|
|
243
|
+
flutter test # All tests pass
|
|
244
|
+
dart format --set-exit-if-changed . # Code is formatted
|
|
245
|
+
\`\`\`
|
|
246
|
+
|
|
247
|
+
## Communication
|
|
248
|
+
|
|
249
|
+
- Message the builder when tests fail with specific error details
|
|
250
|
+
- Confirm to the reviewer when all tests pass
|
|
251
|
+
- Flag any untestable code patterns`,
|
|
252
|
+
};
|
|
253
|
+
}
|
|
254
|
+
function buildReviewerAgent(context) {
|
|
255
|
+
const moduleContext = buildModuleContext(context);
|
|
256
|
+
return {
|
|
257
|
+
filename: 'flutter-reviewer.md',
|
|
258
|
+
name: 'flutter-reviewer',
|
|
259
|
+
description: 'Reviews completed code for Clean Architecture compliance, Riverpod patterns, and code quality.',
|
|
260
|
+
model: 'sonnet',
|
|
261
|
+
tools: ['Read', 'Grep', 'Glob'],
|
|
262
|
+
body: `You are a Flutter code reviewer for **${context.projectName}**. You review completed implementations for architecture compliance and code quality.
|
|
263
|
+
|
|
264
|
+
## Your Role
|
|
265
|
+
|
|
266
|
+
You are a **read-only** teammate. You review code — you do NOT write or edit files.
|
|
267
|
+
|
|
268
|
+
## Review Checklist
|
|
269
|
+
|
|
270
|
+
### Clean Architecture Compliance
|
|
271
|
+
|
|
272
|
+
- [ ] Domain layer has no external dependencies
|
|
273
|
+
- [ ] Data layer depends only on Domain
|
|
274
|
+
- [ ] Presentation layer does not import from Data directly
|
|
275
|
+
- [ ] Cross-feature imports go through \`core/\` barrel exports
|
|
276
|
+
- [ ] Each feature has proper domain/data/presentation separation
|
|
277
|
+
|
|
278
|
+
### Riverpod Patterns
|
|
279
|
+
|
|
280
|
+
- [ ] Providers declared as top-level final variables
|
|
281
|
+
- [ ] \`ref.watch()\` used in build methods (not \`ref.read()\`)
|
|
282
|
+
- [ ] \`ref.read()\` used in callbacks only
|
|
283
|
+
- [ ] Providers named with \`Provider\` suffix
|
|
284
|
+
- [ ] \`AsyncNotifier\` preferred over \`StateNotifier\`
|
|
285
|
+
|
|
286
|
+
### go_router Patterns
|
|
287
|
+
|
|
288
|
+
- [ ] Routes defined in \`app_router.dart\`
|
|
289
|
+
- [ ] Named routes used for navigation
|
|
290
|
+
- [ ] Auth guards use router redirect
|
|
291
|
+
|
|
292
|
+
### Code Quality
|
|
293
|
+
|
|
294
|
+
- [ ] No \`dynamic\` types (use proper typing)
|
|
295
|
+
- [ ] Error handling follows project patterns
|
|
296
|
+
- [ ] No hardcoded strings that should be localized (if i18n is enabled)
|
|
297
|
+
- [ ] Proper null safety (no unnecessary \`!\` operators)
|
|
298
|
+
|
|
299
|
+
## Module Context
|
|
300
|
+
|
|
301
|
+
${moduleContext}
|
|
302
|
+
|
|
303
|
+
## Communication
|
|
304
|
+
|
|
305
|
+
- Approve implementations that pass all checks
|
|
306
|
+
- Send specific, actionable feedback for issues found
|
|
307
|
+
- Prioritize critical issues (architecture violations) over style suggestions`,
|
|
308
|
+
};
|
|
309
|
+
}
|
|
310
|
+
function buildDocsAgent(context) {
|
|
311
|
+
const moduleContext = buildModuleContext(context);
|
|
312
|
+
return {
|
|
313
|
+
filename: 'flutter-docs.md',
|
|
314
|
+
name: 'flutter-docs',
|
|
315
|
+
description: 'Documents completed features with inline comments and README updates after review approval.',
|
|
316
|
+
model: 'haiku',
|
|
317
|
+
tools: ['Read', 'Write', 'Edit', 'Grep', 'Glob'],
|
|
318
|
+
body: `You are a documentation writer for **${context.projectName}**. You add documentation after features are reviewed and approved.
|
|
319
|
+
|
|
320
|
+
## Your Role
|
|
321
|
+
|
|
322
|
+
You are a **documentation** teammate. You write docs after the reviewer approves code.
|
|
323
|
+
|
|
324
|
+
## Responsibilities
|
|
325
|
+
|
|
326
|
+
1. Add Dart doc comments to public APIs (classes, methods, providers)
|
|
327
|
+
2. Update README.md with new feature documentation
|
|
328
|
+
3. Add inline comments for complex logic only (avoid obvious comments)
|
|
329
|
+
4. Document provider usage patterns and dependencies
|
|
330
|
+
|
|
331
|
+
## Documentation Style
|
|
332
|
+
|
|
333
|
+
- Use \`///\` for Dart doc comments
|
|
334
|
+
- Keep comments concise and focused on "why", not "what"
|
|
335
|
+
- Document parameters and return values for public methods
|
|
336
|
+
- Include usage examples in doc comments for providers
|
|
337
|
+
|
|
338
|
+
## Example
|
|
339
|
+
|
|
340
|
+
\`\`\`dart
|
|
341
|
+
/// Manages user authentication state.
|
|
342
|
+
///
|
|
343
|
+
/// Watches [authRepositoryProvider] for auth state changes.
|
|
344
|
+
/// Use [signIn] and [signOut] to manage the session.
|
|
345
|
+
///
|
|
346
|
+
/// \`\`\`dart
|
|
347
|
+
/// final authState = ref.watch(authNotifierProvider);
|
|
348
|
+
/// \`\`\`
|
|
349
|
+
class AuthNotifier extends AsyncNotifier<User?> {
|
|
350
|
+
// ...
|
|
351
|
+
}
|
|
352
|
+
\`\`\`
|
|
353
|
+
|
|
354
|
+
## Module Context
|
|
355
|
+
|
|
356
|
+
${moduleContext}
|
|
357
|
+
|
|
358
|
+
## Guidelines
|
|
359
|
+
|
|
360
|
+
- Only document code that has been reviewed and approved
|
|
361
|
+
- Do not refactor or change functionality — documentation only
|
|
362
|
+
- Prioritize public API documentation over internal implementation details`,
|
|
363
|
+
};
|
|
364
|
+
}
|
|
365
|
+
//# sourceMappingURL=agent-writer.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"agent-writer.js","sourceRoot":"","sources":["../../src/claude-setup/agent-writer.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,7 @@
|
|
|
1
|
+
import type { ProjectContext } from '../core/context.js';
|
|
2
|
+
/**
|
|
3
|
+
* Generates a comprehensive CLAUDE.md for a scaffolded Flutter project.
|
|
4
|
+
* The output is optimized for Claude Code and Agent Teams workflows.
|
|
5
|
+
*/
|
|
6
|
+
export declare function generateClaudeMd(context: ProjectContext): string;
|
|
7
|
+
//# sourceMappingURL=claude-md-generator.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"claude-md-generator.d.ts","sourceRoot":"","sources":["../../src/claude-setup/claude-md-generator.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,oBAAoB,CAAC;AAEzD;;;GAGG;AACH,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,cAAc,GAAG,MAAM,CAmBhE"}
|