flutter-skill 0.8.6 → 0.8.7
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/README.md +114 -11
- package/dart/pubspec.yaml +1 -1
- package/package.json +1 -1
package/README.md
CHANGED
|
@@ -161,18 +161,91 @@ Real benchmarks from automated test runs against a complex social media app:
|
|
|
161
161
|
|
|
162
162
|
## Why Not Playwright / Appium / Detox?
|
|
163
163
|
|
|
164
|
-
| | flutter-skill | Playwright | Appium | Detox |
|
|
164
|
+
| | flutter-skill | Playwright MCP | Appium | Detox |
|
|
165
165
|
|---|:---:|:---:|:---:|:---:|
|
|
166
|
+
| **MCP tools** | **237** | ~33 | ❌ | ❌ |
|
|
167
|
+
| **Platforms** | **10** | 1 (web) | Mobile | React Native |
|
|
166
168
|
| **Setup time** | 30 sec | Minutes | Hours | Hours |
|
|
167
169
|
| **Test code needed** | ❌ None | ✅ Yes | ✅ Yes | ✅ Yes |
|
|
168
|
-
| **AI-native (MCP)** | ✅ |
|
|
169
|
-
| **
|
|
170
|
+
| **AI-native (MCP)** | ✅ | ✅ | ❌ | ❌ |
|
|
171
|
+
| **Self-healing tests** | ✅ | ❌ | ❌ | ❌ |
|
|
172
|
+
| **Monkey/fuzz testing** | ✅ | ❌ | ❌ | ❌ |
|
|
173
|
+
| **Visual regression** | ✅ | ❌ | ❌ | ❌ |
|
|
174
|
+
| **Network mock/replay** | ✅ | ❌ | ❌ | ❌ |
|
|
175
|
+
| **API + UI testing** | ✅ | ❌ | ❌ | ❌ |
|
|
176
|
+
| **Multi-device sync** | ✅ | ❌ | Partial | ❌ |
|
|
177
|
+
| **Accessibility audit** | ✅ | ❌ | ❌ | ❌ |
|
|
178
|
+
| **i18n testing** | ✅ | ❌ | ❌ | ❌ |
|
|
179
|
+
| **Performance monitoring** | ✅ | ❌ | ❌ | ❌ |
|
|
170
180
|
| **Natural language** | ✅ | ❌ | ❌ | ❌ |
|
|
171
|
-
| **Maintenance** | Zero | High | High | Medium |
|
|
172
181
|
| **Flutter support** | ✅ Native | Partial | Partial | ❌ |
|
|
173
182
|
| **Desktop apps** | ✅ | ✅ | ❌ | ❌ |
|
|
174
183
|
|
|
175
|
-
**
|
|
184
|
+
| **AI page understanding** | ✅ AX Tree | ❌ Screenshots | ❌ | ❌ |
|
|
185
|
+
| **Boundary/security test** | ✅ 13 payloads | ❌ | ❌ | ❌ |
|
|
186
|
+
| **Batch actions** | ✅ 5+/call | 1/call | 1/call | 1/call |
|
|
187
|
+
|
|
188
|
+
**flutter-skill is the only AI-native E2E testing tool that works across mobile, web, and desktop — with 7× more tools than the nearest competitor.**
|
|
189
|
+
|
|
190
|
+
---
|
|
191
|
+
|
|
192
|
+
## CLI Commands
|
|
193
|
+
|
|
194
|
+
```bash
|
|
195
|
+
# 🤖 AI autonomous exploration — finds bugs automatically
|
|
196
|
+
flutter-skill explore https://my-app.com --depth=3
|
|
197
|
+
|
|
198
|
+
# 🐒 Monkey/fuzz testing — random actions, crash detection
|
|
199
|
+
flutter-skill monkey https://my-app.com --actions=100 --seed=42
|
|
200
|
+
|
|
201
|
+
# 🚀 Parallel multi-platform testing
|
|
202
|
+
flutter-skill test --url https://my-app.com --platforms web,electron,android
|
|
203
|
+
|
|
204
|
+
# 🌐 Zero-config WebMCP server — any website becomes testable
|
|
205
|
+
flutter-skill serve https://my-app.com
|
|
206
|
+
```
|
|
207
|
+
|
|
208
|
+
---
|
|
209
|
+
|
|
210
|
+
## 🧠 AI-Native: 95% Fewer Tokens
|
|
211
|
+
|
|
212
|
+
Most AI testing tools send **screenshots** to the LLM — each one costs ~4,000 tokens.
|
|
213
|
+
|
|
214
|
+
flutter-skill uses Chrome's **Accessibility Tree** to give your AI a compact semantic summary of any page:
|
|
215
|
+
|
|
216
|
+
```json
|
|
217
|
+
// page_summary → ~200 tokens (vs ~4,000 for a screenshot)
|
|
218
|
+
{
|
|
219
|
+
"title": "Shopping Cart",
|
|
220
|
+
"nav": ["Home", "Products", "Cart", "Account"],
|
|
221
|
+
"forms": [{"input:Coupon Code": "text"}],
|
|
222
|
+
"buttons": ["Apply", "Checkout", "Continue Shopping"],
|
|
223
|
+
"features": {"search": true, "pagination": true},
|
|
224
|
+
"links": 47, "inputs": 3
|
|
225
|
+
}
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
Then batch multiple actions in one call:
|
|
229
|
+
|
|
230
|
+
```json
|
|
231
|
+
// explore_actions → 5 actions per call (vs 5 separate tool calls)
|
|
232
|
+
{"actions": [
|
|
233
|
+
{"type": "fill", "target": "input:Coupon Code", "value": "SAVE20"},
|
|
234
|
+
{"type": "tap", "target": "button:Apply"},
|
|
235
|
+
{"type": "tap", "target": "button:Checkout"},
|
|
236
|
+
{"type": "fill", "target": "input:Email", "value": "test@example.com"},
|
|
237
|
+
{"type": "tap", "target": "button:Continue"}
|
|
238
|
+
]}
|
|
239
|
+
```
|
|
240
|
+
|
|
241
|
+
**Result:** Your AI agent tests faster, costs less, and understands pages better than screenshot-based tools.
|
|
242
|
+
|
|
243
|
+
| | flutter-skill | Screenshot-based tools |
|
|
244
|
+
|---|:---:|:---:|
|
|
245
|
+
| Tokens per page | **~200** | ~4,000 |
|
|
246
|
+
| Actions per call | **5+** | 1 |
|
|
247
|
+
| Understands semantics | ✅ roles, names, state | ❌ pixels only |
|
|
248
|
+
| Works with Shadow DOM | ✅ | ❌ |
|
|
176
249
|
|
|
177
250
|
---
|
|
178
251
|
|
|
@@ -222,17 +295,47 @@ Real benchmarks from automated test runs against a complex social media app:
|
|
|
222
295
|
</table>
|
|
223
296
|
|
|
224
297
|
<details>
|
|
225
|
-
<summary><strong>
|
|
298
|
+
<summary><strong>237 tools — full reference</strong></summary>
|
|
299
|
+
|
|
300
|
+
**AI Explore:** `page_summary`, `explore_actions`, `boundary_test`, `explore_report`
|
|
301
|
+
|
|
302
|
+
**Launch & Connect:** `launch_app`, `scan_and_connect`, `connect_cdp`, `hot_reload`, `hot_restart`, `list_sessions`, `switch_session`, `close_session`, `disconnect`, `stop_app`
|
|
303
|
+
|
|
304
|
+
**Screen:** `screenshot`, `screenshot_region`, `screenshot_element`, `native_screenshot`, `inspect`, `inspect_interactive`, `snapshot`, `get_widget_tree`, `find_by_type`, `get_text_content`, `get_visible_text`
|
|
305
|
+
|
|
306
|
+
**Interaction:** `tap`, `double_tap`, `long_press`, `enter_text`, `set_text`, `clear_text`, `swipe`, `scroll_to`, `drag`, `go_back`, `press_key`, `type_text`, `hover`, `fill`, `select_option`, `set_checkbox`, `focus`, `blur`, `native_tap`, `native_input_text`, `native_swipe`
|
|
307
|
+
|
|
308
|
+
**Smart Testing:** `smart_tap`, `smart_enter_text`, `smart_assert` (self-healing with fuzzy match)
|
|
309
|
+
|
|
310
|
+
**Assertions:** `assert_text`, `assert_visible`, `assert_not_visible`, `assert_element_count`, `assert_batch`, `wait_for_element`, `wait_for_gone`, `wait_for_idle`, `wait_for_stable`, `wait_for_url`, `wait_for_text`, `wait_for_element_count`
|
|
311
|
+
|
|
312
|
+
**Visual Regression:** `visual_baseline_save`, `visual_baseline_compare`, `visual_baseline_update`, `visual_regression_report`, `visual_verify`, `visual_diff`, `compare_screenshot`
|
|
313
|
+
|
|
314
|
+
**Network Mock:** `mock_api`, `mock_clear`, `record_network`, `replay_network`, `intercept_requests`, `clear_interceptions`, `block_urls`, `http_request`
|
|
315
|
+
|
|
316
|
+
**API Testing:** `api_request`, `api_assert`
|
|
317
|
+
|
|
318
|
+
**Coverage & Reliability:** `coverage_start`, `coverage_stop`, `coverage_report`, `coverage_gaps`, `retry_on_fail`, `stability_check`
|
|
319
|
+
|
|
320
|
+
**Data-Driven:** `test_with_data`, `generate_test_data`
|
|
321
|
+
|
|
322
|
+
**Multi-Device:** `multi_connect`, `multi_action`, `multi_compare`, `multi_disconnect`, `parallel_snapshot`, `parallel_tap`
|
|
323
|
+
|
|
324
|
+
**Accessibility:** `accessibility_audit`, `a11y_full_audit`, `a11y_tab_order`, `a11y_color_contrast`, `a11y_screen_reader`
|
|
325
|
+
|
|
326
|
+
**i18n:** `set_locale`, `verify_translations`, `i18n_snapshot`
|
|
327
|
+
|
|
328
|
+
**Performance:** `perf_start`, `perf_stop`, `perf_report`, `get_performance`, `get_frame_stats`, `get_memory_stats`
|
|
226
329
|
|
|
227
|
-
**
|
|
330
|
+
**Session:** `save_session`, `restore_session`, `session_diff`
|
|
228
331
|
|
|
229
|
-
**
|
|
332
|
+
**Recording & Export:** `record_start`, `record_stop`, `record_export` (Playwright, Cypress, XCUITest, Espresso, Detox, Maestro, +5 more), `video_start`, `video_stop`
|
|
230
333
|
|
|
231
|
-
**
|
|
334
|
+
**Auth:** `auth_inject_session`, `auth_biometric`, `auth_otp`, `auth_deeplink`
|
|
232
335
|
|
|
233
|
-
**
|
|
336
|
+
**CDP Browser:** `navigate`, `reload`, `go_forward`, `get_title`, `get_page_source`, `eval`, `get_tabs`, `new_tab`, `switch_tab`, `close_tab`, `get_cookies`, `set_cookie`, `clear_cookies`, `get_local_storage`, `set_local_storage`, `clear_local_storage`, `generate_pdf`, `set_viewport`, `emulate_device`, `throttle_network`, `go_offline`, `set_geolocation`, `set_timezone`, `set_color_scheme`
|
|
234
337
|
|
|
235
|
-
**Debug:** `get_logs`, `get_errors`, `
|
|
338
|
+
**Debug:** `get_logs`, `get_errors`, `get_console_messages`, `get_network_requests`, `diagnose`, `diagnose_project`, `reset_app`
|
|
236
339
|
|
|
237
340
|
</details>
|
|
238
341
|
|
package/dart/pubspec.yaml
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
name: flutter_skill_npm
|
|
2
2
|
description: Give your AI Agent eyes and hands inside your Flutter app.
|
|
3
|
-
version: 0.8.
|
|
3
|
+
version: 0.8.7
|
|
4
4
|
publish_to: 'none'
|
|
5
5
|
homepage: https://github.com/ai-dashboad/flutter-skill
|
|
6
6
|
repository: https://github.com/ai-dashboad/flutter-skill
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "flutter-skill",
|
|
3
3
|
"mcpName": "io.github.ai-dashboad/flutter-skill",
|
|
4
|
-
"version": "0.8.
|
|
4
|
+
"version": "0.8.7",
|
|
5
5
|
"description": "MCP Server for app automation - Give your AI Agent eyes and hands inside any app (Flutter, React, Web, Native)",
|
|
6
6
|
"main": "index.js",
|
|
7
7
|
"bin": {
|