@bdayadev/flutter-ultra-mcp 1.10.8 → 1.11.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.
@@ -10,7 +10,7 @@
10
10
  {
11
11
  "name": "flutter",
12
12
  "description": "Durable cross-platform Flutter automation via 8 specialized MCP servers, in-app mixin binding, and an optional DevTools panel. Replaces marionette_mcp and the official dart mcp-server for Claude Code.",
13
- "version": "1.10.8",
13
+ "version": "1.11.0",
14
14
  "author": {
15
15
  "name": "Bdaya-Dev",
16
16
  "url": "https://github.com/Bdaya-Dev"
@@ -23,5 +23,5 @@
23
23
  "tags": ["flutter", "dart", "mcp", "testing", "automation", "patrol", "cross-platform"]
24
24
  }
25
25
  ],
26
- "version": "1.10.8"
26
+ "version": "1.11.0"
27
27
  }
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "$schema": "https://json.schemastore.org/claude-code-plugin-manifest.json",
3
3
  "name": "flutter",
4
- "version": "1.10.8",
4
+ "version": "1.11.0",
5
5
  "description": "Durable cross-platform Flutter automation via 8 specialized MCP servers, in-app mixin binding, and an optional DevTools panel. Replaces marionette_mcp and the official dart mcp-server for Claude Code.",
6
6
  "author": {
7
7
  "name": "Bdaya-Dev",
@@ -4,7 +4,7 @@ description: >-
4
4
  extensions (gesture, screenshot, inspector, screencast, log collection)
5
5
  for the flutter-ultra-mcp Claude Code plugin. Composable with Sentry and
6
6
  other WidgetsFlutterBinding subclasses via the mixin form.
7
- version: 1.10.8
7
+ version: 1.11.0
8
8
  homepage: https://github.com/Bdaya-Dev/flutter-ultra-mcp
9
9
  repository: https://github.com/Bdaya-Dev/flutter-ultra-mcp
10
10
  issue_tracker: https://github.com/Bdaya-Dev/flutter-ultra-mcp/issues
@@ -2,7 +2,7 @@ name: ultra_flutter_devtools
2
2
  description: >-
3
3
  Flutter DevTools extension showing live MCP activity for the flutter-ultra-mcp
4
4
  Claude Code plugin (sessions, recent tool calls, errors, screenshot grid).
5
- version: 1.10.8
5
+ version: 1.11.0
6
6
  homepage: https://github.com/Bdaya-Dev/flutter-ultra-mcp
7
7
  repository: https://github.com/Bdaya-Dev/flutter-ultra-mcp
8
8
  issue_tracker: https://github.com/Bdaya-Dev/flutter-ultra-mcp/issues
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@bdayadev/flutter-ultra-mcp",
3
- "version": "1.10.8",
3
+ "version": "1.11.0",
4
4
  "description": "Flutter Ultra MCP plugin monorepo — 8 MCP servers + ultra_flutter Dart packages + skills for Claude Code.",
5
5
  "license": "Apache-2.0",
6
6
  "homepage": "https://github.com/Bdaya-Dev/flutter-ultra-mcp",
@@ -99,6 +99,72 @@ When a flow involves an external OAuth consent screen:
99
99
 
100
100
  Produce a numbered summary: steps taken, pass/fail status per step, screenshot paths, and any errors from `mcp__plugin_flutter_flutter-ultra-runtime__get_runtime_errors`.
101
101
 
102
+ ## Web launch modes
103
+
104
+ When launching a Flutter web app, choose the mode based on what the flow needs:
105
+
106
+ | Mode | Command | VM Service | Hot Reload | Startup | Best for |
107
+ |------|---------|-----------|-----------|---------|----------|
108
+ | `chrome` (default) | `-d chrome --headless=new` | Yes (DWDS) | Yes | 60-90s | Debugging, widget inspection, evaluate, state reading |
109
+ | `chrome-headed` | `-d chrome` (visible) | Yes (DWDS) | Yes | 60-90s | Local development, watching the agent work |
110
+ | `web-server` | `-d web-server` | No | No | 5-10s | Visual tours, screenshots, parallel subagent runs |
111
+
112
+ ### When to use each mode
113
+
114
+ **Use `chrome` (default)** when the flow needs:
115
+ - Widget tree inspection (`get_widget_tree`, `find_widget`)
116
+ - Expression evaluation (`evaluate`)
117
+ - Hot reload after code changes
118
+ - Runtime error inspection (`get_runtime_errors`)
119
+ - Gesture tools via VM Service (`tap`, `enter_text`, `scroll_to`)
120
+
121
+ **Use `chrome-headed`** when:
122
+ - You want to visually watch the agent drive the app
123
+ - Debugging a flow that doesn't work headless (rare)
124
+
125
+ **Use `web-server`** when:
126
+ - The flow only needs screenshots and Playwright navigation
127
+ - Running multiple parallel app instances for subagent tours
128
+ - Fast iteration without waiting for DWDS connection
129
+ - Cross-browser testing (Firefox, WebKit via Playwright)
130
+
131
+ ### Launching in each mode
132
+
133
+ ```
134
+ # Default (chrome headless + DWDS):
135
+ launch_app(projectDir, target, device: "chrome")
136
+
137
+ # Chrome headed (visible + DWDS):
138
+ launch_app(projectDir, target, device: "chrome", webLaunchMode: "chrome-headed")
139
+
140
+ # Web-server (fast, no DWDS):
141
+ launch_app(projectDir, target, device: "chrome", webLaunchMode: "web-server", webPort: 8080)
142
+ ```
143
+
144
+ For web-server mode, after `poll_launch_app` shows `attached`, use browser server tools:
145
+ - `mcp__plugin_flutter_flutter-ultra-browser__launch_browser` → navigate to `webServerUrl`
146
+ - `mcp__plugin_flutter_flutter-ultra-browser__screenshot` for captures
147
+ - `mcp__plugin_flutter_flutter-ultra-browser__click` / `fill` for interaction
148
+
149
+ ### Parallel instances for subagent tours
150
+
151
+ Multiple app instances can run simultaneously on different ports. This enables parallel visual documentation where each subagent drives a different section of the app:
152
+
153
+ ```
154
+ # Agent A: tour the auth flows
155
+ launch_app(projectDir, target, device: "chrome", webLaunchMode: "web-server", webPort: 8081)
156
+
157
+ # Agent B: tour the dashboard (simultaneous)
158
+ launch_app(projectDir, target, device: "chrome", webLaunchMode: "web-server", webPort: 8082)
159
+
160
+ # Agent C: tour settings (simultaneous)
161
+ launch_app(projectDir, target, device: "chrome", webLaunchMode: "web-server", webPort: 8083)
162
+ ```
163
+
164
+ Each agent launches its own Playwright browser, navigates to its port, and captures screenshots independently. No shared state, no conflicts.
165
+
166
+ **Limitation**: `chrome` mode (with DWDS) does NOT support parallel instances to the same project — Flutter's machine-mode daemon locks the compile. Use `web-server` for parallelism.
167
+
102
168
  ## Handling edge cases
103
169
 
104
170
  - **Element not found**: call `mcp__plugin_flutter_flutter-ultra-runtime__get_widget_tree` to find where the element is. Wait up to 3s via `mcp__plugin_flutter_flutter-ultra-gesture__wait_for`.
@@ -156,6 +156,34 @@ User: "Set up flutter-ultra on my app."
156
156
  -> "Setup complete. 2 files changed. Smoke screenshot saved."
157
157
  ```
158
158
 
159
+ ## Known issues
160
+
161
+ ### Sentry zone mismatch warning on web
162
+
163
+ When using the composed binding pattern with Sentry (`SentryWidgetsBindingMixin` + `UltraFlutterBinding`), Flutter may emit a "Zone mismatch" assertion warning on web. This happens because Sentry wraps `appRunner` in `runZonedGuarded`, and the binding is created in a different zone than where `runApp` executes.
164
+
165
+ **This warning is non-fatal** — the app works correctly. To minimize it, create the binding inside Sentry's zone guard:
166
+
167
+ ```dart
168
+ Future<void> main() async {
169
+ await SentryFlutter.init(
170
+ (options) { options.dsn = '...'; },
171
+ appRunner: () {
172
+ if (kDebugMode) {
173
+ AppBinding();
174
+ } else {
175
+ WidgetsFlutterBinding.ensureInitialized();
176
+ }
177
+ runApp(const MyApp());
178
+ },
179
+ );
180
+ }
181
+ ```
182
+
183
+ ### Inspector extensions unavailable on web (DWDS)
184
+
185
+ `ext.flutter.inspector.screenshot` and `ext.flutter.inspector.getRootWidgetSummaryTree` fail on web targets with `(-32000) Server error`. This is a known Flutter DWDS limitation ([flutter/flutter#97898](https://github.com/flutter/flutter/issues/97898)). The runtime server automatically falls back to `ext.flutter.ultra.*` extensions when the inspector fails, and then to CDP `Page.captureScreenshot` for screenshots on web.
186
+
159
187
  ## See also
160
188
 
161
189
  - `flutter-tour` — visual screenshot tour after setup
@@ -15,6 +15,18 @@ description: Captures route-by-route screenshots of a running Flutter app for vi
15
15
  - `mcp__plugin_flutter_flutter-ultra-runtime__attach` with the returned URI.
16
16
  - For web targets, also `mcp__plugin_flutter_flutter-ultra-browser__launch_browser` or `mcp__plugin_flutter_flutter-ultra-browser__connect_over_cdp` to get a browser context.
17
17
 
18
+ **Web launch mode for tours**: Use `webLaunchMode: "web-server"` for fast startup and parallel instance support. Tours are screenshot-only and don't need VM Service tools. See `flutter-drive` skill for the full launch mode reference.
19
+
20
+ **Parallel subagent tours**: Launch multiple instances on different ports (`webPort: 8081`, `8082`, etc.) and assign route subsets to each subagent for faster coverage:
21
+
22
+ ```
23
+ # Subagent 1: auth routes (port 8081)
24
+ launch_app(..., webLaunchMode: "web-server", webPort: 8081)
25
+
26
+ # Subagent 2: dashboard routes (port 8082)
27
+ launch_app(..., webLaunchMode: "web-server", webPort: 8082)
28
+ ```
29
+
18
30
  ### 2. Discover routes
19
31
 
20
32
  Call `mcp__plugin_flutter_flutter-ultra-runtime__evaluate` to extract the route table: