@bdayadev/flutter-ultra-mcp 1.6.0 → 1.8.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/.claude-plugin/marketplace.json +2 -2
- package/.claude-plugin/plugin.json +1 -1
- package/package.json +1 -1
- package/skills/bisect/SKILL.md +91 -121
- package/skills/debug/SKILL.md +98 -99
- package/skills/devtools/SKILL.md +93 -91
- package/skills/drive/SKILL.md +90 -98
- package/skills/scaffold/SKILL.md +132 -126
- package/skills/setup/SKILL.md +89 -92
- package/skills/test/SKILL.md +112 -104
- package/skills/tour/SKILL.md +94 -82
package/skills/scaffold/SKILL.md
CHANGED
|
@@ -1,167 +1,173 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: flutter-scaffold
|
|
3
|
-
description:
|
|
3
|
+
description: Scaffolds new Flutter projects or features following conventions detected in the existing codebase. Use when starting a fresh app, adding a feature module, generating boilerplate that should match the project's structure, setting up state management, or configuring localization.
|
|
4
4
|
disable-model-invocation: true
|
|
5
5
|
---
|
|
6
6
|
|
|
7
|
-
#
|
|
7
|
+
# Project and Feature Scaffolding
|
|
8
8
|
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
User must explicitly trigger this skill with `/flutter:scaffold`. It is not auto-invoked because it creates files. Use when the user asks to create a new Flutter project, add a feature module, scaffold a new screen, set up state management, or add boilerplate that must match the project's existing conventions.
|
|
12
|
-
|
|
13
|
-
## Prerequisites
|
|
14
|
-
|
|
15
|
-
- For **project mode**: a target directory must be specified or agreed upon. Flutter SDK must be on PATH.
|
|
16
|
-
- For **feature mode**: a Flutter project must already exist and be identifiable by `list_projects`.
|
|
17
|
-
- The user must confirm the scaffolding plan before any files are written.
|
|
9
|
+
User must explicitly trigger this skill with `/flutter:scaffold`. It creates files and is not auto-invoked.
|
|
18
10
|
|
|
19
11
|
## Mode detection
|
|
20
12
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
|
24
|
-
|
|
|
25
|
-
| "
|
|
26
|
-
| "add
|
|
27
|
-
| "set up BLoC / Riverpod / Provider" | State management mode |
|
|
28
|
-
| "add a new route / page" | Screen mode (subset of feature mode) |
|
|
13
|
+
| User asks | Mode |
|
|
14
|
+
|-----------|------|
|
|
15
|
+
| "create a new Flutter app" | Project mode |
|
|
16
|
+
| "add a feature", "new screen" | Feature mode |
|
|
17
|
+
| "set up BLoC / Riverpod" | State management mode |
|
|
18
|
+
| "add localization" | L10n mode |
|
|
29
19
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
## Project mode — new Flutter app
|
|
20
|
+
## Project mode
|
|
33
21
|
|
|
34
|
-
1. Confirm
|
|
35
|
-
2.
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
4. Call `mcp__plugin_flutter_flutter-ultra-build__analyze` to confirm a clean baseline.
|
|
41
|
-
5. Ask the user if they want state management, routing, or localization scaffolded next — then proceed to the relevant feature mode sections below.
|
|
42
|
-
|
|
43
|
-
---
|
|
22
|
+
1. Confirm: project name, org, target directory, Flutter channel.
|
|
23
|
+
2. Create via shell: `flutter create --org com.example --project-name my_app ./my_app`.
|
|
24
|
+
3. `mcp__plugin_flutter_flutter-ultra-build__pub_get` to fetch dependencies.
|
|
25
|
+
4. `mcp__plugin_flutter_flutter-ultra-build__analyze` to confirm clean baseline.
|
|
26
|
+
5. `mcp__plugin_flutter_flutter-ultra-build__flutter_doctor` to verify the environment.
|
|
27
|
+
6. Ask if state management, routing, or l10n scaffolding is needed.
|
|
44
28
|
|
|
45
|
-
## Feature mode — detect
|
|
29
|
+
## Feature mode — detect conventions first
|
|
46
30
|
|
|
47
|
-
|
|
31
|
+
Call `mcp__plugin_flutter_flutter-ultra-build__project_info` to read project structure and dependencies.
|
|
48
32
|
|
|
49
|
-
|
|
50
|
-
- Existing dependencies (from `pubspec.yaml`)
|
|
33
|
+
Detect the project's state management from `pubspec.yaml`:
|
|
51
34
|
|
|
52
|
-
|
|
35
|
+
| Dependency | Pattern |
|
|
36
|
+
|-----------|---------|
|
|
37
|
+
| `flutter_bloc` / `bloc` | BLoC |
|
|
38
|
+
| `riverpod` / `flutter_riverpod` | Riverpod |
|
|
39
|
+
| `provider` | Provider |
|
|
40
|
+
| None | Ask the user |
|
|
53
41
|
|
|
54
|
-
|
|
55
|
-
| ------------------------------- | ------------------------- |
|
|
56
|
-
| `flutter_bloc` / `bloc` | BLoC pattern |
|
|
57
|
-
| `riverpod` / `flutter_riverpod` | Riverpod |
|
|
58
|
-
| `provider` | Provider |
|
|
59
|
-
| None of the above | Ask the user which to use |
|
|
42
|
+
Detect routing: `go_router` = GoRouter, `auto_route` = AutoRoute, none = Navigator 1.0.
|
|
60
43
|
|
|
61
|
-
|
|
62
|
-
| ------------ | ------------------------ |
|
|
63
|
-
| `go_router` | GoRouter |
|
|
64
|
-
| `auto_route` | AutoRoute |
|
|
65
|
-
| None | Navigator 1.0 (push/pop) |
|
|
44
|
+
Announce detected conventions before scaffolding.
|
|
66
45
|
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
---
|
|
70
|
-
|
|
71
|
-
## Screen scaffolding (new route/page)
|
|
72
|
-
|
|
73
|
-
For each new screen, create the following files following the detected pattern:
|
|
74
|
-
|
|
75
|
-
### File structure (BLoC + GoRouter example for `InvoiceList`):
|
|
46
|
+
### Screen scaffolding (BLoC + GoRouter example)
|
|
76
47
|
|
|
77
48
|
```
|
|
78
|
-
lib/
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
features/
|
|
91
|
-
invoice_list/
|
|
92
|
-
bloc/
|
|
93
|
-
invoice_list_bloc_test.dart
|
|
49
|
+
lib/features/invoice_list/
|
|
50
|
+
bloc/
|
|
51
|
+
invoice_list_bloc.dart
|
|
52
|
+
invoice_list_event.dart
|
|
53
|
+
invoice_list_state.dart
|
|
54
|
+
view/
|
|
55
|
+
invoice_list_page.dart
|
|
56
|
+
invoice_list_view.dart
|
|
57
|
+
invoice_list.dart # barrel export
|
|
58
|
+
test/features/invoice_list/
|
|
59
|
+
bloc/
|
|
60
|
+
invoice_list_bloc_test.dart
|
|
94
61
|
```
|
|
95
62
|
|
|
96
|
-
|
|
97
|
-
For **Provider**: replace `bloc/` with `provider/` containing a `ChangeNotifier`.
|
|
98
|
-
|
|
99
|
-
### Route registration (GoRouter):
|
|
63
|
+
### After creating files
|
|
100
64
|
|
|
101
|
-
|
|
65
|
+
1. `mcp__plugin_flutter_flutter-ultra-build__format` to normalize formatting.
|
|
66
|
+
2. `mcp__plugin_flutter_flutter-ultra-build__analyze` to confirm clean compilation.
|
|
67
|
+
3. If codegen is needed (Riverpod generators, freezed): `mcp__plugin_flutter_flutter-ultra-build__start_build_runner_build` -> `mcp__plugin_flutter_flutter-ultra-build__poll_build_runner_job` -> `mcp__plugin_flutter_flutter-ultra-build__get_build_runner_result`.
|
|
102
68
|
|
|
103
|
-
|
|
104
|
-
GoRoute(
|
|
105
|
-
path: '/invoice-list',
|
|
106
|
-
name: 'invoiceList',
|
|
107
|
-
builder: (context, state) => const InvoiceListPage(),
|
|
108
|
-
),
|
|
109
|
-
```
|
|
110
|
-
|
|
111
|
-
### After creating files:
|
|
112
|
-
|
|
113
|
-
1. Call `mcp__plugin_flutter_flutter-ultra-build__format` on the new files to normalize formatting.
|
|
114
|
-
2. Call `mcp__plugin_flutter_flutter-ultra-build__analyze` — fix any errors before reporting done.
|
|
115
|
-
3. Do **not** call `pub_get` unless new packages were added.
|
|
116
|
-
|
|
117
|
-
---
|
|
118
|
-
|
|
119
|
-
## State management setup (first-time)
|
|
120
|
-
|
|
121
|
-
When the project has no state management and the user wants to add one:
|
|
69
|
+
## State management setup
|
|
122
70
|
|
|
123
71
|
**BLoC:**
|
|
124
72
|
|
|
125
|
-
1.
|
|
126
|
-
2.
|
|
127
|
-
3. Scaffold the first BLoC as described in the screen section above.
|
|
73
|
+
1. `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `flutter_bloc bloc equatable`.
|
|
74
|
+
2. `mcp__plugin_flutter_flutter-ultra-build__pub_get`.
|
|
128
75
|
|
|
129
76
|
**Riverpod:**
|
|
130
77
|
|
|
131
|
-
1.
|
|
132
|
-
2.
|
|
133
|
-
3.
|
|
134
|
-
4. Call `mcp__plugin_flutter_flutter-ultra-build__start_build_runner_build` → `poll_build_runner_job` → `get_build_runner_result` to generate initial code.
|
|
78
|
+
1. `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `flutter_riverpod riverpod_annotation` + dev deps `riverpod_generator build_runner`.
|
|
79
|
+
2. `mcp__plugin_flutter_flutter-ultra-build__pub_get`.
|
|
80
|
+
3. Run build_runner to generate initial code.
|
|
135
81
|
|
|
136
82
|
**Provider:**
|
|
137
83
|
|
|
138
|
-
1.
|
|
139
|
-
2.
|
|
140
|
-
|
|
141
|
-
---
|
|
142
|
-
|
|
143
|
-
## Localization scaffolding
|
|
84
|
+
1. `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `provider`.
|
|
85
|
+
2. `mcp__plugin_flutter_flutter-ultra-build__pub_get`.
|
|
144
86
|
|
|
145
|
-
|
|
87
|
+
## Localization setup
|
|
146
88
|
|
|
147
|
-
1.
|
|
89
|
+
1. `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `flutter_localizations` (SDK package).
|
|
148
90
|
2. Create `lib/l10n/app_en.arb` with a minimal key set.
|
|
149
91
|
3. Add `generate: true` to `pubspec.yaml` under `flutter:`.
|
|
150
|
-
4.
|
|
151
|
-
5. Add `localizationsDelegates` and `supportedLocales` to
|
|
152
|
-
|
|
153
|
-
|
|
92
|
+
4. `mcp__plugin_flutter_flutter-ultra-build__flutter_gen_l10n` to generate the `AppLocalizations` class.
|
|
93
|
+
5. Add `localizationsDelegates` and `supportedLocales` to `MaterialApp`.
|
|
94
|
+
6. Verify: `mcp__plugin_flutter_flutter-ultra-build__list_missing_translations` to check all locales have translations.
|
|
95
|
+
|
|
96
|
+
## Asset management
|
|
97
|
+
|
|
98
|
+
When the scaffold includes images or other assets:
|
|
99
|
+
|
|
100
|
+
1. `mcp__plugin_flutter_flutter-ultra-build__add_asset` to register assets in `pubspec.yaml`.
|
|
101
|
+
2. `mcp__plugin_flutter_flutter-ultra-build__validate_assets` to confirm all referenced assets exist on disk.
|
|
102
|
+
3. `mcp__plugin_flutter_flutter-ultra-build__list_orphan_assets` to find assets on disk not referenced in code.
|
|
103
|
+
|
|
104
|
+
## Web configuration
|
|
105
|
+
|
|
106
|
+
For web-targeted projects:
|
|
107
|
+
|
|
108
|
+
1. `mcp__plugin_flutter_flutter-ultra-build__validate_web_redirect` to check `web/index.html` base href and redirect handling.
|
|
109
|
+
2. `mcp__plugin_flutter_flutter-ultra-build__validate_canvaskit_vs_html_consistency` to verify renderer consistency.
|
|
110
|
+
3. `mcp__plugin_flutter_flutter-ultra-build__flush_service_worker` when changing web config during development.
|
|
111
|
+
|
|
112
|
+
## Signing verification
|
|
113
|
+
|
|
114
|
+
After scaffolding a release-ready project:
|
|
115
|
+
|
|
116
|
+
1. `mcp__plugin_flutter_flutter-ultra-build__verify_android_signing` to check keystore and signing config.
|
|
117
|
+
2. `mcp__plugin_flutter_flutter-ultra-build__verify_ios_signing` to check provisioning profiles.
|
|
118
|
+
3. `mcp__plugin_flutter_flutter-ultra-build__set_bundle_id` to configure the app's bundle identifier.
|
|
119
|
+
|
|
120
|
+
## Safety rules
|
|
121
|
+
|
|
122
|
+
- Always announce the file list before writing. Wait for user confirmation if more than 3 files.
|
|
123
|
+
- Never overwrite existing files without explicit confirmation.
|
|
124
|
+
- Match the existing naming convention (`snake_case` vs `camelCase`).
|
|
125
|
+
- Run `analyze` and surface any errors before reporting done.
|
|
126
|
+
|
|
127
|
+
## Tool reference
|
|
128
|
+
|
|
129
|
+
| Action | Tool |
|
|
130
|
+
|--------|------|
|
|
131
|
+
| Project info | `mcp__plugin_flutter_flutter-ultra-build__project_info` |
|
|
132
|
+
| List projects | `mcp__plugin_flutter_flutter-ultra-build__list_projects` |
|
|
133
|
+
| Add dependency | `mcp__plugin_flutter_flutter-ultra-build__pub_add` |
|
|
134
|
+
| Remove dependency | `mcp__plugin_flutter_flutter-ultra-build__pub_remove` |
|
|
135
|
+
| Resolve deps | `mcp__plugin_flutter_flutter-ultra-build__pub_get` |
|
|
136
|
+
| Search pub.dev | `mcp__plugin_flutter_flutter-ultra-build__pub_dev_search` |
|
|
137
|
+
| Format code | `mcp__plugin_flutter_flutter-ultra-build__format` |
|
|
138
|
+
| Analyze | `mcp__plugin_flutter_flutter-ultra-build__analyze` |
|
|
139
|
+
| Auto-fix | `mcp__plugin_flutter_flutter-ultra-build__fix` |
|
|
140
|
+
| Preview fixes | `mcp__plugin_flutter_flutter-ultra-build__fix_preview` |
|
|
141
|
+
| Build runner | `mcp__plugin_flutter_flutter-ultra-build__start_build_runner_build` |
|
|
142
|
+
| Gen l10n | `mcp__plugin_flutter_flutter-ultra-build__flutter_gen_l10n` |
|
|
143
|
+
| Add asset | `mcp__plugin_flutter_flutter-ultra-build__add_asset` |
|
|
144
|
+
| Validate assets | `mcp__plugin_flutter_flutter-ultra-build__validate_assets` |
|
|
145
|
+
| Orphan assets | `mcp__plugin_flutter_flutter-ultra-build__list_orphan_assets` |
|
|
146
|
+
| Web redirect | `mcp__plugin_flutter_flutter-ultra-build__validate_web_redirect` |
|
|
147
|
+
| CanvasKit check | `mcp__plugin_flutter_flutter-ultra-build__validate_canvaskit_vs_html_consistency` |
|
|
148
|
+
| Flush SW | `mcp__plugin_flutter_flutter-ultra-build__flush_service_worker` |
|
|
149
|
+
| Android signing | `mcp__plugin_flutter_flutter-ultra-build__verify_android_signing` |
|
|
150
|
+
| iOS signing | `mcp__plugin_flutter_flutter-ultra-build__verify_ios_signing` |
|
|
151
|
+
| Set bundle ID | `mcp__plugin_flutter_flutter-ultra-build__set_bundle_id` |
|
|
152
|
+
| Flutter doctor | `mcp__plugin_flutter_flutter-ultra-build__flutter_doctor` |
|
|
153
|
+
| Missing translations | `mcp__plugin_flutter_flutter-ultra-build__list_missing_translations` |
|
|
154
|
+
|
|
155
|
+
## Example
|
|
154
156
|
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
|
|
159
|
-
|
|
160
|
-
|
|
157
|
+
```
|
|
158
|
+
User: "/flutter:scaffold add an InvoiceList feature to the Invora app"
|
|
159
|
+
|
|
160
|
+
1. project_info -> detected: BLoC + GoRouter
|
|
161
|
+
2. Announce plan: 7 files to create (bloc, events, state, page, view, barrel, test)
|
|
162
|
+
3. [User confirms]
|
|
163
|
+
4. Create files following BLoC + GoRouter pattern
|
|
164
|
+
5. Add GoRoute entry to router config
|
|
165
|
+
6. format -> normalized
|
|
166
|
+
7. analyze -> 0 errors
|
|
167
|
+
-> "InvoiceList feature scaffolded: 7 files created, 1 file modified."
|
|
168
|
+
```
|
|
161
169
|
|
|
162
170
|
## See also
|
|
163
171
|
|
|
164
|
-
-
|
|
165
|
-
-
|
|
166
|
-
- `mcp__plugin_flutter_flutter-ultra-build__project_info` — reads project structure and dependencies
|
|
167
|
-
- `mcp__plugin_flutter_flutter-ultra-build__analyze` — validates scaffolded code compiles clean
|
|
172
|
+
- `flutter-test` — write and run tests for scaffolded features
|
|
173
|
+
- `flutter-setup` — initial flutter-ultra plugin setup
|
package/skills/setup/SKILL.md
CHANGED
|
@@ -1,45 +1,30 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: flutter-setup
|
|
3
|
-
description: One-command setup of the flutter-ultra-mcp plugin in an existing Flutter codebase. Use when the user wants to enable flutter-ultra for the first time,
|
|
3
|
+
description: One-command setup of the flutter-ultra-mcp plugin in an existing Flutter codebase. Use when the user wants to enable flutter-ultra for the first time, re-run after a clean install, or verify an existing setup is complete and working. Idempotent and safe to re-run.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Plugin Setup
|
|
7
7
|
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
Use this skill when the user wants to wire up the flutter-ultra-mcp plugin into a Flutter project for the first time, or when verifying that a previously attempted setup is complete and working. The expected end state is: `UltraFlutterBinding` initialized in the app entry point, `ultra_flutter` in `dev_dependencies`, patrol fork overridden in `pubspec_overrides.yaml`, and a smoke launch confirming the VM Service attaches correctly.
|
|
11
|
-
|
|
12
|
-
## Prerequisites
|
|
13
|
-
|
|
14
|
-
- Flutter SDK installed and on PATH (`flutter --version` must succeed).
|
|
15
|
-
- Node.js ≥ 18 installed (required for the MCP servers).
|
|
16
|
-
- The target project has a `pubspec.yaml` (i.e., it is a Flutter app, not a pure Dart package).
|
|
17
|
-
- The user is working from the project root (or has provided an absolute path to it).
|
|
8
|
+
Expected end state: `UltraFlutterBinding` initialized in the app entry point, `ultra_flutter` in `dev_dependencies`, patrol fork overridden if needed, and a smoke launch confirming the VM Service attaches correctly.
|
|
18
9
|
|
|
19
10
|
## Workflow
|
|
20
11
|
|
|
21
12
|
### 1. Verify the environment
|
|
22
13
|
|
|
23
|
-
-
|
|
24
|
-
|
|
25
|
-
-
|
|
26
|
-
|
|
14
|
+
- `mcp__plugin_flutter_flutter-ultra-build__flutter_doctor` — stop if Flutter SDK, devices, or Dart show `[x]`.
|
|
15
|
+
- `mcp__plugin_flutter_flutter-ultra-build__project_info` — note entry points, `hasSentry`, `hasPatrol`, `hasUltraBinding`.
|
|
16
|
+
- `mcp__plugin_flutter_flutter-ultra-runtime__list_devices` — verify at least one target device is available.
|
|
17
|
+
- `mcp__plugin_flutter_flutter-ultra-build__list_dart_defines` — discover required dart-defines for launch.
|
|
18
|
+
- `mcp__plugin_flutter_flutter-ultra-build__list_flavors` — check for flavor configuration.
|
|
27
19
|
|
|
28
20
|
### 2. Add `ultra_flutter` to dev_dependencies
|
|
29
21
|
|
|
30
|
-
-
|
|
31
|
-
|
|
32
|
-
- `dev`: `true`
|
|
33
|
-
- If `pub_add` fails because `ultra_flutter` is not on pub.dev (it is a local plugin bundled with the MCP server), use `pubspec_overrides_set` to point to the bundled path instead:
|
|
34
|
-
- Call `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_set` with `package: ultra_flutter` and `path` set to the absolute path of the bundled package (ask the user or read from plugin config if available).
|
|
35
|
-
- Then add the dependency manually by editing `pubspec.yaml`: add `ultra_flutter: any` under `dev_dependencies`.
|
|
36
|
-
- Call `mcp__plugin_flutter_flutter-ultra-build__pub_get` to resolve.
|
|
22
|
+
- `mcp__plugin_flutter_flutter-ultra-build__pub_add` with `package: ultra_flutter`, `dev: true`.
|
|
23
|
+
- If it fails (not on pub.dev), use `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_set` to point to the bundled path, add `ultra_flutter: any` under `dev_dependencies` manually, then `mcp__plugin_flutter_flutter-ultra-build__pub_get`.
|
|
37
24
|
|
|
38
25
|
### 3. Patch the app entry point
|
|
39
26
|
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
**Without Sentry** — wrap the existing `runApp` call:
|
|
27
|
+
**Without Sentry:**
|
|
43
28
|
|
|
44
29
|
```dart
|
|
45
30
|
import 'package:flutter/foundation.dart';
|
|
@@ -53,98 +38,110 @@ void main() {
|
|
|
53
38
|
}
|
|
54
39
|
```
|
|
55
40
|
|
|
56
|
-
**With Sentry** (
|
|
41
|
+
**With Sentry** (custom binding mixin):
|
|
57
42
|
|
|
58
43
|
```dart
|
|
59
|
-
import 'package:flutter/foundation.dart';
|
|
60
44
|
import 'package:ultra_flutter/ultra_flutter.dart';
|
|
61
45
|
|
|
62
|
-
// In your custom binding class:
|
|
63
46
|
class AppBinding extends WidgetsFlutterBinding with UltraFlutterBindingMixin {
|
|
64
47
|
static AppBinding ensureInitialized() =>
|
|
65
48
|
WidgetsFlutterBinding.ensureInitialized() as AppBinding;
|
|
66
49
|
}
|
|
67
|
-
|
|
68
|
-
void main() {
|
|
69
|
-
AppBinding.ensureInitialized();
|
|
70
|
-
// ... Sentry.init wrapping runApp as before
|
|
71
|
-
}
|
|
72
50
|
```
|
|
73
51
|
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
### 4. Configure the patrol fork override (if patrol detected)
|
|
52
|
+
Skip if `project_info` reported `hasUltraBinding: true`.
|
|
77
53
|
|
|
78
|
-
|
|
54
|
+
### 4. Configure patrol fork override (if patrol detected)
|
|
79
55
|
|
|
80
|
-
-
|
|
81
|
-
- If not
|
|
82
|
-
|
|
83
|
-
- `path`: the vendored patrol fork path bundled with flutter-ultra-mcp (located at `<plugin-root>/packages/flutter-ultra-patrol/vendor/patrol` — ask the user for `<plugin-root>` if not available in context).
|
|
84
|
-
- Call `mcp__plugin_flutter_flutter-ultra-build__pub_get` to resolve the override.
|
|
56
|
+
- `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_list` — check if `patrol` override exists.
|
|
57
|
+
- If not: `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_set` with `package: patrol` and the vendored fork path.
|
|
58
|
+
- `mcp__plugin_flutter_flutter-ultra-build__pub_get` to resolve.
|
|
85
59
|
|
|
86
|
-
### 5.
|
|
60
|
+
### 5. Static analysis
|
|
87
61
|
|
|
88
|
-
-
|
|
89
|
-
-
|
|
90
|
-
|
|
91
|
-
- Warnings about `// ignore: implementation_imports` on the Sentry path are expected; surface them to the user as informational only.
|
|
62
|
+
- `mcp__plugin_flutter_flutter-ultra-build__pub_get` — ensure lock file is current.
|
|
63
|
+
- `mcp__plugin_flutter_flutter-ultra-build__analyze` — fix any errors referencing `ultra_flutter` or `UltraFlutterBinding`.
|
|
64
|
+
- If analysis finds other pre-existing issues: `mcp__plugin_flutter_flutter-ultra-build__fix` to auto-apply safe lint fixes.
|
|
92
65
|
|
|
93
66
|
### 6. Smoke test: launch, attach, screenshot
|
|
94
67
|
|
|
95
|
-
-
|
|
96
|
-
-
|
|
97
|
-
|
|
98
|
-
-
|
|
99
|
-
-
|
|
100
|
-
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
-
|
|
111
|
-
- **
|
|
112
|
-
- **
|
|
68
|
+
- `mcp__plugin_flutter_flutter-ultra-runtime__launch_app` with the project root and target device (default: `chrome` for web, platform default for desktop, first connected device for mobile).
|
|
69
|
+
- Pass `importLaunchJsonConfig` if `.vscode/launch.json` has dart-defines.
|
|
70
|
+
- `mcp__plugin_flutter_flutter-ultra-runtime__poll_launch_app` until status is `attached` or `failed`.
|
|
71
|
+
- `mcp__plugin_flutter_flutter-ultra-runtime__screenshot` to capture the running app.
|
|
72
|
+
- `mcp__plugin_flutter_flutter-ultra-runtime__detach`.
|
|
73
|
+
- `mcp__plugin_flutter_flutter-ultra-runtime__stop_app`.
|
|
74
|
+
|
|
75
|
+
If screenshot succeeds and is not blank, setup is confirmed working.
|
|
76
|
+
|
|
77
|
+
### 7. Build verification (optional, when requested)
|
|
78
|
+
|
|
79
|
+
Verify the app builds for all target platforms using the build server's platform-specific start/poll/get/cancel tool sets. Each platform follows the same pattern: `start_build_{platform}` -> `poll_build_{platform}_job` -> `get_build_{platform}_result`. Supported platforms: apk, appbundle, ipa (macOS only), web, windows, macos, linux.
|
|
80
|
+
|
|
81
|
+
## Edge cases
|
|
82
|
+
|
|
83
|
+
- **`UltraFlutterBinding.ensureInitialized()` already present**: skip step 3, run steps 5-6 to confirm.
|
|
84
|
+
- **Multiple entry points** (`main_dev.dart`, `main_prod.dart`): patch all of them. Confirm with the user if more than 3 files.
|
|
85
|
+
- **Monorepo / workspace**: run steps 2-6 for each app package separately.
|
|
86
|
+
- **pub_get fails after overrides**: `mcp__plugin_flutter_flutter-ultra-build__pub_outdated` to inspect version constraints, then relax to `any`.
|
|
87
|
+
- **analyze reports `ultra_flutter` not found**: `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_list` to verify the resolved path.
|
|
88
|
+
- **launch_app times out**: check `mcp__plugin_flutter_flutter-ultra-build__list_dart_defines` for required defines, relaunch with them.
|
|
89
|
+
- **Pub cache corruption**: `mcp__plugin_flutter_flutter-ultra-build__pub_cache_repair` to rebuild the cache, then retry pub_get.
|
|
90
|
+
- **Stale build artifacts**: `mcp__plugin_flutter_flutter-ultra-build__flutter_clean` to clear, then rebuild.
|
|
91
|
+
|
|
92
|
+
## Tool reference
|
|
93
|
+
|
|
94
|
+
| Action | Tool |
|
|
95
|
+
|--------|------|
|
|
96
|
+
| Flutter doctor | `mcp__plugin_flutter_flutter-ultra-build__flutter_doctor` |
|
|
97
|
+
| Project info | `mcp__plugin_flutter_flutter-ultra-build__project_info` |
|
|
98
|
+
| List devices | `mcp__plugin_flutter_flutter-ultra-runtime__list_devices` |
|
|
99
|
+
| List dart defines | `mcp__plugin_flutter_flutter-ultra-build__list_dart_defines` |
|
|
100
|
+
| List flavors | `mcp__plugin_flutter_flutter-ultra-build__list_flavors` |
|
|
101
|
+
| Add dependency | `mcp__plugin_flutter_flutter-ultra-build__pub_add` |
|
|
102
|
+
| Resolve deps | `mcp__plugin_flutter_flutter-ultra-build__pub_get` |
|
|
103
|
+
| Overrides set | `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_set` |
|
|
104
|
+
| Overrides list | `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_list` |
|
|
105
|
+
| Analyze | `mcp__plugin_flutter_flutter-ultra-build__analyze` |
|
|
106
|
+
| Auto-fix | `mcp__plugin_flutter_flutter-ultra-build__fix` |
|
|
107
|
+
| Flutter clean | `mcp__plugin_flutter_flutter-ultra-build__flutter_clean` |
|
|
108
|
+
| Pub cache repair | `mcp__plugin_flutter_flutter-ultra-build__pub_cache_repair` |
|
|
109
|
+
| Pub outdated | `mcp__plugin_flutter_flutter-ultra-build__pub_outdated` |
|
|
110
|
+
| Launch app | `mcp__plugin_flutter_flutter-ultra-runtime__launch_app` |
|
|
111
|
+
| Poll launch | `mcp__plugin_flutter_flutter-ultra-runtime__poll_launch_app` |
|
|
112
|
+
| Attach | `mcp__plugin_flutter_flutter-ultra-runtime__attach` |
|
|
113
|
+
| Screenshot | `mcp__plugin_flutter_flutter-ultra-runtime__screenshot` |
|
|
114
|
+
| Detach | `mcp__plugin_flutter_flutter-ultra-runtime__detach` |
|
|
115
|
+
| Stop app | `mcp__plugin_flutter_flutter-ultra-runtime__stop_app` |
|
|
116
|
+
| Build (any platform) | `start_build_{platform}` via the build server |
|
|
113
117
|
|
|
114
118
|
## Output format
|
|
115
119
|
|
|
116
|
-
After the workflow completes, produce:
|
|
117
|
-
|
|
118
120
|
1. **Status**: `setup complete` or `setup failed at step N`.
|
|
119
|
-
2. **Changes made**: bullet list of files edited
|
|
120
|
-
3. **Smoke test result**: path
|
|
121
|
-
4. **Next steps**: suggest
|
|
121
|
+
2. **Changes made**: bullet list of files edited.
|
|
122
|
+
3. **Smoke test result**: screenshot path or error message.
|
|
123
|
+
4. **Next steps**: suggest `/flutter:tour` for a visual baseline or `/flutter:debug` if the smoke test failed.
|
|
122
124
|
|
|
123
125
|
## Example
|
|
124
126
|
|
|
125
127
|
```
|
|
126
|
-
User: "Set up flutter-ultra on
|
|
127
|
-
|
|
128
|
-
1. flutter_doctor
|
|
129
|
-
2. project_info
|
|
130
|
-
3.
|
|
131
|
-
4.
|
|
132
|
-
5.
|
|
133
|
-
6. pub_get
|
|
134
|
-
7. analyze
|
|
135
|
-
8. launch_app
|
|
136
|
-
9.
|
|
137
|
-
10.
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
Setup complete. 3 files changed. Smoke screenshot saved.
|
|
141
|
-
Next: run /flutter-tour to capture a full visual baseline.
|
|
128
|
+
User: "Set up flutter-ultra on my app."
|
|
129
|
+
|
|
130
|
+
1. flutter_doctor -> all checks pass
|
|
131
|
+
2. project_info -> entryPoints: ["lib/main.dart"], hasSentry: false, hasPatrol: false
|
|
132
|
+
3. list_devices -> chrome, windows
|
|
133
|
+
4. pub_add ultra_flutter dev:true -> added
|
|
134
|
+
5. Edit lib/main.dart -> add UltraFlutterBinding.ensureInitialized()
|
|
135
|
+
6. pub_get -> resolved
|
|
136
|
+
7. analyze -> 0 errors
|
|
137
|
+
8. launch_app(device: "chrome") -> poll -> attached
|
|
138
|
+
9. screenshot -> app visible
|
|
139
|
+
10. detach + stop_app
|
|
140
|
+
-> "Setup complete. 2 files changed. Smoke screenshot saved."
|
|
142
141
|
```
|
|
143
142
|
|
|
144
143
|
## See also
|
|
145
144
|
|
|
146
|
-
-
|
|
147
|
-
-
|
|
148
|
-
- `
|
|
149
|
-
- `mcp__plugin_flutter_flutter-ultra-runtime__launch_app` — launch app for smoke test
|
|
150
|
-
- `mcp__plugin_flutter_flutter-ultra-build__pubspec_overrides_set` — configure patrol fork override
|
|
145
|
+
- `flutter-tour` — visual screenshot tour after setup
|
|
146
|
+
- `flutter-debug` — triage if the smoke launch reveals a runtime error
|
|
147
|
+
- `flutter-devtools` — wire up the DevTools panel for live inspection
|