flutter-skill 0.8.0 → 0.8.2

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 (2) hide show
  1. package/README.md +197 -227
  2. package/package.json +1 -1
package/README.md CHANGED
@@ -1,67 +1,66 @@
1
1
  <p align="center">
2
- <img src="assets/social-preview.jpg" alt="flutter-skill" width="640">
2
+ <a href="https://github.com/ai-dashboad/flutter-skill">
3
+ <img src="assets/demo-teaser.gif" alt="AI testing a TikTok clone across 8 platforms" width="640">
4
+ </a>
3
5
  </p>
4
6
 
5
7
  <h1 align="center">flutter-skill</h1>
6
8
 
7
9
  <p align="center">
8
- <strong>Give your AI eyes and hands inside any app.</strong><br>
9
- E2E testing bridge for Claude, Cursor, Windsurf — across 8 platforms.
10
+ <strong>Give any AI agent eyes and hands inside any running app.</strong><br>
11
+ 8 platforms. Zero test code. One MCP server.
10
12
  </p>
11
13
 
12
14
  <p align="center">
15
+ <a href="https://github.com/ai-dashboad/flutter-skill/stargazers"><img src="https://img.shields.io/github/stars/ai-dashboad/flutter-skill?style=flat&color=yellow" alt="Stars"></a>
13
16
  <a href="https://pub.dev/packages/flutter_skill"><img src="https://img.shields.io/pub/v/flutter_skill.svg" alt="pub.dev"></a>
14
17
  <a href="https://www.npmjs.com/package/flutter-skill"><img src="https://img.shields.io/npm/v/flutter-skill.svg" alt="npm"></a>
15
18
  <a href="https://github.com/ai-dashboad/flutter-skill/actions"><img src="https://img.shields.io/github/actions/workflow/status/ai-dashboad/flutter-skill/ci.yml?label=tests" alt="CI"></a>
16
- <a href="https://github.com/ai-dashboad/flutter-skill/stargazers"><img src="https://img.shields.io/github/stars/ai-dashboad/flutter-skill?style=social" alt="Stars"></a>
17
19
  <a href="LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="License"></a>
18
- <a href="https://skills.sh/ai-dashboad/flutter-skill/flutter-skill-testing"><img src="https://img.shields.io/badge/skills.sh-agent%20skill-black" alt="Agent Skill"></a>
19
20
  </p>
20
21
 
21
22
  <p align="center">
23
+ <a href="#30-second-demo">Demo</a> •
22
24
  <a href="#quick-start">Quick Start</a> •
23
- <a href="#platforms">Platforms</a> •
24
- <a href="#what-can-it-do">Features</a> •
25
- <a href="#install">Install</a> •
25
+ <a href="#8-platforms-one-tool">Platforms</a> •
26
+ <a href="#why-not-playwright--appium--detox">vs Others</a> •
26
27
  <a href="docs/USAGE_GUIDE.md">Docs</a>
27
28
  </p>
28
29
 
29
30
  ---
30
31
 
31
- <p align="center">
32
- <strong>🎬 AI tests a full TikTok clone — 28 actions, zero test code</strong>
33
- </p>
32
+ ## 30-Second Demo
34
33
 
35
34
  https://github.com/user-attachments/assets/d4617c73-043f-424c-9a9a-1a61d4c2d3c6
36
35
 
36
+ > **One prompt. 28 AI-driven actions. Zero test code.** The AI explores a TikTok clone, navigates tabs, scrolls feeds, tests search, fills forms — all autonomously.
37
+
38
+ ---
39
+
40
+ ## Why This Exists
41
+
42
+ Writing E2E tests is painful. Maintaining them is worse.
43
+
44
+ **flutter-skill** connects your AI agent (Claude, Cursor, Windsurf, Copilot, OpenClaw) directly to your running app via [MCP](https://modelcontextprotocol.io/). The agent can see the screen, tap buttons, type text, scroll — like a human tester who never sleeps.
45
+
37
46
  ```
38
- You: "Test the login flow enter test@example.com and password123, tap Login, verify Dashboard"
39
-
40
- AI Agent:
41
- 1. screenshot() → sees the login screen
42
- 2. enter_text("email") → types the email
43
- 3. enter_text("pass") → types the password
44
- 4. tap("Login") → taps the button
45
- 5. wait_for_element("Dashboard") → confirms navigation
46
- ✅ Login flow verified!
47
- ```
47
+ You: "Test the checkout flow with an empty cart, then add 3 items and complete purchase"
48
48
 
49
- **No test code. No selectors. Just tell the AI what to test.**
49
+ Your AI agent handles the rest screenshots, taps, text entry, assertions, navigation.
50
+ No Page Objects. No XPath. No brittle selectors. Just plain English.
51
+ ```
50
52
 
51
53
  ---
52
54
 
53
55
  ## Quick Start
54
56
 
55
- **1. Install**
57
+ **1. Install** (30 seconds)
56
58
 
57
59
  ```bash
58
- npm install -g flutter-skill # npm (recommended)
59
- # or: brew install ai-dashboad/flutter-skill/flutter-skill
60
- # or: dart pub global activate flutter_skill
61
- # or: npx skills add ai-dashboad/flutter-skill # Agent Skill (Claude Code, Cursor, Copilot, Cline, etc.)
60
+ npm install -g flutter-skill
62
61
  ```
63
62
 
64
- **2. Add to your MCP config** (Claude Code / Cursor / Windsurf)
63
+ **2. Add to your AI** (copy-paste into MCP config)
65
64
 
66
65
  ```json
67
66
  {
@@ -74,7 +73,9 @@ npm install -g flutter-skill # npm (recommended)
74
73
  }
75
74
  ```
76
75
 
77
- **3. Add to your app** (2 lines)
76
+ > Works with **Claude Desktop, Cursor, Windsurf, Copilot, Cline, OpenClaw** any MCP-compatible agent.
77
+
78
+ **3. Add to your app** (2 lines for Flutter)
78
79
 
79
80
  ```dart
80
81
  import 'package:flutter_skill/flutter_skill.dart';
@@ -87,162 +88,118 @@ void main() {
87
88
 
88
89
  **4. Test** — just talk to your AI:
89
90
 
90
- > *"Launch my app, tap Sign Up, fill the form, and verify the success screen"*
91
+ > *"Launch my app, explore every screen, and report any bugs"*
91
92
 
92
- That's it. Zero configuration.
93
+ That's it. **Zero configuration. Zero test code.**
93
94
 
94
95
  <details>
95
- <summary><strong>📦 More install methods</strong> (Windows, Docker, IDE extensions)</summary>
96
-
97
- | Method | Command | Platform |
98
- |--------|---------|----------|
99
- | npm | `npm install -g flutter-skill` | All |
100
- | Homebrew | `brew install ai-dashboad/flutter-skill/flutter-skill` | macOS/Linux |
101
- | Scoop | `scoop install flutter-skill` | Windows |
102
- | One-click | `curl -fsSL .../install.sh \| bash` | macOS/Linux |
103
- | Windows | `iwr .../install.ps1 -useb \| iex` | Windows |
104
- | Docker | `docker pull ghcr.io/ai-dashboad/flutter-skill` | All |
105
- | pub.dev | `dart pub global activate flutter_skill` | All |
106
- | VSCode | Extensions "Flutter Skill" | All |
107
- | IntelliJ | Plugins "Flutter Skill" | All |
108
- | Agent Skill | `npx skills add ai-dashboad/flutter-skill` | All (28+ agents) |
109
-
110
- </details>
111
-
112
- <details>
113
- <summary><strong>🔧 Zero-config onboarding</strong> (auto-detect & patch your app)</summary>
114
-
115
- ```bash
116
- cd your-app/
117
- flutter-skill init # Detects platform, patches entry point, configures MCP
118
- flutter-skill demo # Launches built-in demo app to try it out
119
- ```
120
-
121
- `init` auto-detects Flutter, iOS, Android, React Native, or Web projects and patches them automatically.
96
+ <summary>📦 More install methods (Homebrew, Scoop, Docker, IDE, Agent Skill)</summary>
97
+
98
+ | Method | Command |
99
+ |--------|---------|
100
+ | npm | `npm install -g flutter-skill` |
101
+ | Homebrew | `brew install ai-dashboad/flutter-skill/flutter-skill` |
102
+ | Scoop | `scoop install flutter-skill` |
103
+ | Docker | `docker pull ghcr.io/ai-dashboad/flutter-skill` |
104
+ | pub.dev | `dart pub global activate flutter_skill` |
105
+ | VSCode | Extensions "Flutter Skill" |
106
+ | JetBrains | Plugins "Flutter Skill" |
107
+ | Agent Skill | `npx skills add ai-dashboad/flutter-skill` |
108
+ | Zero-config | `flutter-skill init` (auto-detects & patches your app) |
122
109
 
123
110
  </details>
124
111
 
125
112
  ---
126
113
 
127
- ## Platforms
128
-
129
- flutter-skill works across **8 platforms** with a unified bridge protocol:
130
-
131
- | Platform | SDK | Tests | Status |
132
- |----------|-----|-------|--------|
133
- | **Electron** | [`sdks/electron`](sdks/electron/) | 75/75 ✅ | Stable |
134
- | **KMP Desktop** | [`sdks/kmp`](sdks/kmp/) | 75/75 ✅ | Stable |
135
- | **Tauri** (Rust) | [`sdks/tauri`](sdks/tauri/) | 75/75 ✅ | Stable |
136
- | **.NET MAUI** | [`sdks/dotnet-maui`](sdks/dotnet-maui/) | 75/75 ✅ | Stable |
137
- | **React Native** | [`sdks/react-native`](sdks/react-native/) | 75/75 ✅ | Stable |
138
-
139
- | **Android** (Kotlin) | [`sdks/android`](sdks/android/) | 74/75 ✅ | Stable |
140
- | **Flutter iOS** | `flutter_skill` (pub.dev) | 60/65 ✅ | Stable |
141
- | **Flutter Web** | `flutter_skill` (pub.dev) | 63/65 ✅ | Stable |
114
+ ## 8 Platforms, One Tool
142
115
 
143
- > **582/590 tests passing** across all platforms (98.6% pass rate)
116
+ Most testing tools work on 1-2 platforms. flutter-skill works on **8**.
144
117
 
145
- Each platform is tested against a complex social media app (tabs, feeds, forms, modals, 50+ elements) with 75 E2E tests covering:
146
- inspect, tap, enter_text, get_text, find_element, wait_for_element, scroll, swipe, screenshot, go_back, press_key, inspect_interactive, eval, and error handling.
118
+ | Platform | SDK | Test Score |
119
+ |----------|-----|:----------:|
120
+ | **Flutter** (iOS/Android/Web) | [`flutter_skill`](https://pub.dev/packages/flutter_skill) | ✅ 188/195 |
121
+ | **React Native** | [`sdks/react-native`](sdks/react-native/) | ✅ 75/75 |
122
+ | **Electron** | [`sdks/electron`](sdks/electron/) | ✅ 75/75 |
123
+ | **Tauri** (Rust) | [`sdks/tauri`](sdks/tauri/) | ✅ 75/75 |
124
+ | **Android** (Kotlin) | [`sdks/android`](sdks/android/) | ✅ 74/75 |
125
+ | **KMP Desktop** | [`sdks/kmp`](sdks/kmp/) | ✅ 75/75 |
126
+ | **.NET MAUI** | [`sdks/dotnet-maui`](sdks/dotnet-maui/) | ✅ 75/75 |
127
+ | **iOS** (Swift/UIKit) | [`sdks/ios`](sdks/ios/) | ✅ 19/19 |
147
128
 
148
- Each SDK README has platform-specific setup instructions. The same CLI and MCP tools work for all platforms.
129
+ **Total: 656/664 tests passing (98.8%)** each platform tested against a complex social media app with 50+ elements.
149
130
 
150
- <details>
151
- <summary><strong>Platform setup examples</strong></summary>
152
-
153
- **Web** — add one script tag:
154
- ```html
155
- <script src="flutter-skill.js"></script>
156
- <script>FlutterSkill.start({ port: 50000 });</script>
157
- ```
158
-
159
- **React Native** — npm install:
160
- ```bash
161
- npm install flutter-skill
162
- ```
163
- ```js
164
- import FlutterSkill from 'flutter-skill';
165
- FlutterSkill.start();
166
- ```
167
-
168
- **iOS (Swift/SwiftUI)** — Swift Package Manager:
169
- ```swift
170
- import FlutterSkill
171
- FlutterSkillBridge.shared.start()
172
-
173
- Text("Hello").flutterSkillId("greeting")
174
- Button("Submit") { submit() }.flutterSkillButton("submitBtn")
175
- ```
131
+ ---
176
132
 
177
- **Android (Kotlin)** Gradle:
178
- ```kotlin
179
- implementation("com.flutterskill:flutter-skill:0.7.5")
180
- FlutterSkillBridge.start(this)
181
- ```
133
+ ## Why Not Playwright / Appium / Detox?
182
134
 
183
- **Electron / Tauri / KMP / .NET** see each SDK's README for details.
135
+ | | flutter-skill | Playwright | Appium | Detox |
136
+ |---|:---:|:---:|:---:|:---:|
137
+ | **Setup time** | 30 sec | Minutes | Hours | Hours |
138
+ | **Test code needed** | ❌ None | ✅ Yes | ✅ Yes | ✅ Yes |
139
+ | **AI-native (MCP)** | ✅ | ❌ | ❌ | ❌ |
140
+ | **Platforms** | 8 | 3 (web) | Mobile | React Native |
141
+ | **Natural language** | ✅ | ❌ | ❌ | ❌ |
142
+ | **Maintenance** | Zero | High | High | Medium |
143
+ | **Flutter support** | ✅ Native | Partial | Partial | ❌ |
144
+ | **Desktop apps** | ✅ | ✅ | ❌ | ❌ |
184
145
 
185
- </details>
146
+ **flutter-skill is the only AI-native E2E testing tool that works across mobile, web, and desktop.**
186
147
 
187
148
  ---
188
149
 
189
- ## What Can It Do?
190
-
191
- **40+ MCP tools** organized in 4 categories:
150
+ ## What It Can Do
192
151
 
193
152
  <table>
194
153
  <tr>
195
154
  <td width="50%" valign="top">
196
155
 
197
- ### 👀 See the Screen
198
- - `screenshot` — full app screenshot
199
- - `inspect` — list all interactive elements
200
- - `get_widget_tree` full widget hierarchy
201
- - `find_by_type` — find by widget type
202
- - `get_text_content` — extract all text
156
+ ### 👀 See
157
+ - `screenshot` — capture the screen
158
+ - `inspect_interactive` — all tappable/typeable elements with semantic refs
159
+ - `find_element` / `wait_for_element`
160
+ - `get_elements` — full element tree
203
161
 
204
162
  </td>
205
163
  <td width="50%" valign="top">
206
164
 
207
- ### 👆 Interact Like a User
208
- - `tap` / `double_tap` / `long_press`
209
- - `enter_text` type into fields
210
- - `swipe` / `scroll_to` / `drag`
211
- - `go_back` navigate back
212
- - Native: `native_tap`, `native_swipe`
165
+ ### 👆 Interact
166
+ - `tap` / `long_press` / `swipe` / `drag`
167
+ - `enter_text` / `set_text` / `clear_text`
168
+ - `scroll` all directions
169
+ - `go_back` / `press_key`
213
170
 
214
171
  </td>
215
172
  </tr>
216
173
  <tr>
217
174
  <td valign="top">
218
175
 
219
- ### Verify & Assert
220
- - `assert_text` / `assert_visible`
221
- - `wait_for_element` / `wait_for_gone`
222
- - `get_checkbox_state` / `get_slider_value`
223
- - `assert_element_count`
176
+ ### 🔍 Inspect (v0.8.0)
177
+ - **Semantic refs**: `button:Login`, `input:Email`
178
+ - Stable across UI changes
179
+ - `tap(ref: "button:Submit")`
180
+ - 7 roles: button, input, toggle, slider, select, link, item
224
181
 
225
182
  </td>
226
183
  <td valign="top">
227
184
 
228
- ### 🚀 Launch & Control
229
- - `launch_app` — launch with flavors/defines
230
- - `scan_and_connect` — find running apps
185
+ ### 🚀 Control
186
+ - `launch_app` — launch with flavors
231
187
  - `hot_reload` / `hot_restart`
232
- - `list_sessions` / `switch_session`
188
+ - `get_logs` / `get_errors`
189
+ - `scan_and_connect` — auto-find apps
233
190
 
234
191
  </td>
235
192
  </tr>
236
193
  </table>
237
194
 
238
195
  <details>
239
- <summary><strong>Full tool reference (40+ tools)</strong></summary>
196
+ <summary><strong>40+ tools full reference</strong></summary>
240
197
 
241
198
  **Launch & Connect:** `launch_app`, `scan_and_connect`, `hot_reload`, `hot_restart`, `list_sessions`, `switch_session`, `close_session`
242
199
 
243
- **Screen:** `screenshot`, `screenshot_region`, `screenshot_element`, `native_screenshot`, `inspect`, `get_widget_tree`, `find_by_type`, `get_text_content`
200
+ **Screen:** `screenshot`, `screenshot_region`, `screenshot_element`, `native_screenshot`, `inspect`, `inspect_interactive`, `get_widget_tree`, `find_by_type`, `get_text_content`
244
201
 
245
- **Interaction:** `tap`, `double_tap`, `long_press`, `enter_text`, `swipe`, `scroll_to`, `drag`, `go_back`, `native_tap`, `native_input_text`, `native_swipe`
202
+ **Interaction:** `tap`, `double_tap`, `long_press`, `enter_text`, `set_text`, `clear_text`, `swipe`, `scroll_to`, `drag`, `go_back`, `press_key`, `native_tap`, `native_input_text`, `native_swipe`
246
203
 
247
204
  **Assertions:** `assert_text`, `assert_visible`, `assert_not_visible`, `assert_element_count`, `wait_for_element`, `wait_for_gone`, `get_checkbox_state`, `get_slider_value`, `get_text_value`
248
205
 
@@ -252,132 +209,145 @@ FlutterSkillBridge.start(this)
252
209
 
253
210
  ---
254
211
 
255
- ## Example Workflows
212
+ ## Platform Setup
213
+
214
+ <details>
215
+ <summary><strong>Flutter</strong> (iOS / Android / Web)</summary>
216
+
217
+ ```yaml
218
+ dependencies:
219
+ flutter_skill: ^0.8.2
220
+ ```
221
+
222
+ ```dart
223
+ import 'package:flutter_skill/flutter_skill.dart';
224
+
225
+ void main() {
226
+ if (kDebugMode) FlutterSkillBinding.ensureInitialized();
227
+ runApp(MyApp());
228
+ }
229
+ ```
230
+
231
+ </details>
232
+
233
+ <details>
234
+ <summary><strong>React Native</strong></summary>
256
235
 
236
+ ```bash
237
+ npm install flutter-skill-react-native
257
238
  ```
258
- "Test login with test@example.com / password123, verify it reaches the dashboard"
259
239
 
260
- "Submit the registration form empty and check that all validation errors appear"
240
+ ```js
241
+ import FlutterSkill from 'flutter-skill-react-native';
242
+ FlutterSkill.start();
243
+ ```
261
244
 
262
- "Navigate through all tabs, screenshot each one, verify back button works"
245
+ </details>
246
+
247
+ <details>
248
+ <summary><strong>Electron</strong></summary>
263
249
 
264
- "Take screenshots of home, profile, and settings — compare with last time"
250
+ ```bash
251
+ npm install flutter-skill-electron
265
252
  ```
266
253
 
267
- The AI agent figures out the steps. No test code needed.
254
+ ```js
255
+ const { FlutterSkillBridge } = require('flutter-skill-electron');
256
+ FlutterSkillBridge.start(mainWindow);
257
+ ```
268
258
 
269
- ---
259
+ </details>
270
260
 
271
- ## Native Platform Support
261
+ <details>
262
+ <summary><strong>iOS (Swift)</strong></summary>
272
263
 
273
- Flutter Skill sees through native dialogs that Flutter can't — permission popups, photo pickers, share sheets:
264
+ ```swift
265
+ // Swift Package Manager: FlutterSkillSDK
266
+ import FlutterSkill
267
+ FlutterSkillBridge.shared.start()
274
268
 
275
- | Capability | iOS Simulator | Android Emulator |
276
- |-----------|--------------|-----------------|
277
- | Screenshot | `xcrun simctl` | `adb screencap` |
278
- | Tap | macOS Accessibility | `adb input tap` |
279
- | Text input | Pasteboard + Cmd+V | `adb input text` |
280
- | Swipe | Accessibility scroll | `adb input swipe` |
269
+ Text("Hello").flutterSkillId("greeting")
270
+ ```
281
271
 
282
- No external tools needed — uses built-in OS capabilities.
272
+ </details>
283
273
 
284
- ---
274
+ <details>
275
+ <summary><strong>Android (Kotlin)</strong></summary>
285
276
 
286
- ## Test Results
277
+ ```kotlin
278
+ implementation("com.flutterskill:flutter-skill:0.8.0")
287
279
 
288
- Every platform is tested against a **complex social media app** (4-tab navigation, 50+ scrollable items, forms, modals, search) with a comprehensive 75-test E2E suite.
280
+ FlutterSkillBridge.start(this)
281
+ ```
282
+
283
+ </details>
289
284
 
290
285
  <details>
291
- <summary><strong>75 tests per platform — full breakdown</strong></summary>
292
-
293
- | Category | Tests | What's tested |
294
- |----------|-------|---------------|
295
- | Initialize | 1 | Protocol handshake |
296
- | Inspect | 5 | Element tree, bounds, types, state changes |
297
- | Inspect Interactive | 5 | Semantic refs, actions, bounds, cross-page |
298
- | Tap | 6 | By key, text, coordinates, ref, invalid key/ref |
299
- | Enter Text | 6 | Basic, empty, emoji/unicode 🌍世界, overwrite, long (500+ chars), error handling |
300
- | Get Text | 4 | Counter, input readback, missing key, button label |
301
- | Find Element | 5 | By key, missing, by text, partial text, bounds |
302
- | Wait For Element | 4 | By key, by text, timeout, fast resolution |
303
- | Press Key | 10 | Enter, Tab, Escape, Backspace, arrows, Ctrl+A, Delete, Home/End, invalid key |
304
- | Scroll | 6 | Up, down, left, right, large distance, zero |
305
- | Swipe | 4 | Up, down, left, right |
306
- | Screenshot | 2 | Base64 encoding, image format (PNG/JPEG) |
307
- | Navigation | 8 | Detail page, inspect after nav, interactive elements, go_back, round-trip |
308
- | Logs | 3 | Get, clear, verify empty |
309
- | Eval | 2 | Expression evaluation, return values |
310
- | Error Handling | 3 | Unknown method, missing params, malformed request |
311
- | **Total** | **75** | |
312
-
313
- **Test apps per platform:**
314
-
315
- | Platform | Test App | Elements |
316
- |----------|----------|----------|
317
- | Electron | Social media app (HTML/JS) | 60+ items, dark theme |
318
- | Android | Native Kotlin app with Fragments | 50+ items, Material Design |
319
- | KMP | Compose Desktop app | 50+ items, tab navigation |
320
- | Tauri | Web frontend (Rust backend) | 55+ feed cards |
321
- | .NET MAUI | Simulated bridge with 6 screens | 114 elements |
322
- | React Native | Real RN app on iOS simulator | Self-registering components |
323
- | Flutter iOS | TikTok clone (10 feature modules) | Full social media app |
324
- | Flutter Web | TikTok clone via bridge proxy | Full social media app |
286
+ <summary><strong>Tauri (Rust)</strong></summary>
287
+
288
+ ```toml
289
+ [dependencies]
290
+ flutter-skill-tauri = "0.8.0"
291
+ ```
325
292
 
326
293
  </details>
327
294
 
328
- ---
295
+ <details>
296
+ <summary><strong>KMP Desktop</strong></summary>
329
297
 
330
- ## Troubleshooting
298
+ Add Gradle dependency — see [`sdks/kmp`](sdks/kmp/) for details.
331
299
 
332
- | Problem | Fix |
333
- |---------|-----|
334
- | "Not connected" | `flutter-skill scan_and_connect` to auto-find apps |
335
- | "Unknown method" | `flutter pub add flutter_skill` then restart (not hot reload) |
336
- | No VM Service URI | Add `--vm-service-port=50000` to launch args |
337
- | Claude Code priority | Run `flutter_skill setup` for priority rules |
300
+ </details>
338
301
 
339
- 📖 **Full docs:** [Usage Guide](docs/USAGE_GUIDE.md) · [Architecture](docs/ARCHITECTURE.md) · [Troubleshooting](docs/TROUBLESHOOTING.md) · [Flutter 3.x Fix](docs/FLUTTER_3X_FIX.md)
302
+ <details>
303
+ <summary><strong>.NET MAUI</strong></summary>
340
304
 
341
- ---
305
+ Add NuGet package — see [`sdks/dotnet-maui`](sdks/dotnet-maui/) for details.
342
306
 
343
- ## Links
307
+ </details>
344
308
 
345
- <table>
346
- <tr>
347
- <td>
309
+ ---
348
310
 
349
- 📦 **Install**
350
- - [pub.dev](https://pub.dev/packages/flutter_skill)
351
- - [npm](https://www.npmjs.com/package/flutter-skill)
352
- - [Homebrew](https://github.com/ai-dashboad/homebrew-flutter-skill)
311
+ ## Example Prompts
353
312
 
354
- </td>
355
- <td>
313
+ Just tell your AI what to test:
356
314
 
357
- 🔌 **IDE Extensions**
358
- - [VSCode Marketplace](https://marketplace.visualstudio.com/items?itemName=ai-dashboad.flutter-skill)
359
- - [JetBrains Marketplace](https://plugins.jetbrains.com/plugin/29991-flutter-skill)
315
+ | Prompt | What happens |
316
+ |--------|-------------|
317
+ | *"Test login with wrong password"* | Screenshots → enters creds → taps login → verifies error |
318
+ | *"Explore every screen and report bugs"* | Systematically navigates all screens, tests all elements |
319
+ | *"Fill registration with edge cases"* | Tests emoji 🌍, long strings, empty fields, special chars |
320
+ | *"Compare checkout flow on iOS and Android"* | Runs same test on both platforms, compares screenshots |
321
+ | *"Take screenshots of all 5 tabs"* | Taps each tab, captures state |
360
322
 
361
- </td>
362
- <td>
323
+ ---
363
324
 
364
- 📖 **Docs**
365
- - [Roadmap](docs/ROADMAP.md)
366
- - [Changelog](CHANGELOG.md)
367
- - [Architecture](docs/ARCHITECTURE.md)
325
+ ## Contributing
368
326
 
369
- </td>
370
- </tr>
371
- </table>
327
+ See [CONTRIBUTING.md](CONTRIBUTING.md) for guidelines.
328
+
329
+ ```bash
330
+ git clone https://github.com/ai-dashboad/flutter-skill
331
+ cd flutter-skill
332
+ dart pub get
333
+ dart run bin/flutter_skill.dart server # Start MCP server
334
+ ```
372
335
 
373
336
  ---
374
337
 
375
- <p align="center">
376
- <strong>If flutter-skill saves you time, <a href="https://github.com/ai-dashboad/flutter-skill">⭐ star it on GitHub</a>!</strong>
377
- </p>
338
+ ## Links
339
+
340
+ | | |
341
+ |---|---|
342
+ | 📦 [pub.dev](https://pub.dev/packages/flutter_skill) | 🧩 [VSCode](https://marketplace.visualstudio.com/items?itemName=AIDashboard.flutter-skill) |
343
+ | 📦 [npm](https://www.npmjs.com/package/flutter-skill) | 🧩 [JetBrains](https://plugins.jetbrains.com/plugin/29991-flutter-skill) |
344
+ | 🍺 [Homebrew](https://github.com/ai-dashboad/homebrew-flutter-skill) | 📖 [Docs](docs/USAGE_GUIDE.md) |
345
+ | 🤖 [Agent Skill](https://skills.sh/ai-dashboad/flutter-skill) | 📋 [Changelog](CHANGELOG.md) |
346
+
347
+ ---
378
348
 
379
349
  <p align="center">
380
- <a href="https://github.com/sponsors/ai-dashboad">GitHub Sponsors</a> · <a href="https://buymeacoffee.com/ai-dashboad">Buy Me a Coffee</a>
350
+ <strong>⭐ If flutter-skill saves you time, star it so others can find it too!</strong>
381
351
  </p>
382
352
 
383
- <p align="center">MIT License</p>
353
+ <p align="center">MIT License © 2025</p>
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.0",
4
+ "version": "0.8.2",
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": {