@fluentcommerce/ai-skills 0.13.0 → 0.15.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.
Files changed (97) hide show
  1. package/README.md +17 -12
  2. package/bin/cli.mjs +219 -43
  3. package/content/cli/skills/fluent-bootstrap/SKILL.md +1 -1
  4. package/content/cli/skills/fluent-cli-mcp-cicd/SKILL.md +1 -1
  5. package/content/cli/skills/fluent-cli-reference/SKILL.md +1 -1
  6. package/content/cli/skills/fluent-cli-retailer/SKILL.md +1 -1
  7. package/content/cli/skills/fluent-connect/SKILL.md +58 -3
  8. package/content/cli/skills/fluent-profile/SKILL.md +35 -5
  9. package/content/cli/skills/fluent-workflow/SKILL.md +2 -1
  10. package/content/dev/agents/fluent-backend-dev.md +2 -2
  11. package/content/dev/agents/fluent-dev.md +1 -1
  12. package/content/dev/agents/fluent-frontend-dev.md +1 -1
  13. package/content/dev/skills/fluent-account-snapshot/SKILL.md +1 -1
  14. package/content/dev/skills/fluent-archive/SKILL.md +2 -1
  15. package/content/dev/skills/fluent-build/SKILL.md +2 -2
  16. package/content/dev/skills/fluent-connection-analysis/SKILL.md +2 -1
  17. package/content/dev/skills/fluent-custom-code/SKILL.md +3 -2
  18. package/content/dev/skills/fluent-data-module-scaffold/SKILL.md +7 -6
  19. package/content/dev/skills/fluent-e2e-test/SKILL.md +1 -1
  20. package/content/dev/skills/fluent-entity-flow-diagnose/SKILL.md +2 -1
  21. package/content/dev/skills/fluent-event-api/SKILL.md +3 -2
  22. package/content/dev/skills/fluent-feature-explain/SKILL.md +2 -1
  23. package/content/dev/skills/fluent-feature-plan/SKILL.md +2 -1
  24. package/content/dev/skills/fluent-feature-status/SKILL.md +1 -1
  25. package/content/dev/skills/fluent-frontend-build/SKILL.md +1 -1
  26. package/content/dev/skills/fluent-frontend-readme/SKILL.md +2 -1
  27. package/content/dev/skills/fluent-frontend-review/SKILL.md +2 -1
  28. package/content/dev/skills/fluent-goal/SKILL.md +1 -1
  29. package/content/dev/skills/fluent-implementation-map/SKILL.md +1 -1
  30. package/content/dev/skills/fluent-inventory-catalog/SKILL.md +2 -2
  31. package/content/dev/skills/fluent-job-batch/SKILL.md +6 -3
  32. package/content/dev/skills/fluent-knowledge-init/SKILL.md +1 -1
  33. package/content/dev/skills/{fluent-source-onboard → fluent-module-convert}/SKILL.md +223 -24
  34. package/content/dev/skills/fluent-module-scaffold/SKILL.md +2 -1
  35. package/content/dev/skills/fluent-module-validate/SKILL.md +8 -7
  36. package/content/dev/skills/fluent-mystique-assess/SKILL.md +22 -6
  37. package/content/dev/skills/fluent-mystique-builder/SKILL.md +33 -2
  38. package/content/dev/skills/fluent-mystique-component/SKILL.md +1 -1
  39. package/content/dev/skills/fluent-mystique-diff/SKILL.md +1 -1
  40. package/content/dev/skills/fluent-mystique-preview/SKILL.md +19 -2
  41. package/content/dev/skills/fluent-mystique-scaffold/SDK_REFERENCE.md +2 -2
  42. package/content/dev/skills/fluent-mystique-scaffold/SKILL.md +13 -2
  43. package/content/dev/skills/fluent-mystique-scaffold/TEMPLATES.md +1 -1
  44. package/content/dev/skills/fluent-mystique-sdk-reference/SKILL.md +2 -1
  45. package/content/dev/skills/fluent-pre-deploy-check/SKILL.md +3 -3
  46. package/content/dev/skills/fluent-retailer-config/SKILL.md +3 -3
  47. package/content/dev/skills/fluent-rollback/SKILL.md +1 -1
  48. package/content/dev/skills/fluent-rule-lookup/SKILL.md +2 -1
  49. package/content/dev/skills/fluent-rule-scaffold/SKILL.md +7 -6
  50. package/content/dev/skills/fluent-rule-test/SKILL.md +2 -1
  51. package/content/dev/skills/fluent-scope-plan/SKILL.md +2 -2
  52. package/content/dev/skills/fluent-session/SKILL.md +1 -1
  53. package/content/dev/skills/fluent-settings/SKILL.md +2 -2
  54. package/content/dev/skills/fluent-skill-observability/SKILL.md +1 -1
  55. package/content/dev/skills/fluent-sourcing/SKILL.md +38 -13
  56. package/content/dev/skills/fluent-system-monitoring/SKILL.md +1 -1
  57. package/content/dev/skills/fluent-test-data/SKILL.md +1 -1
  58. package/content/dev/skills/fluent-trace/SKILL.md +3 -2
  59. package/content/dev/skills/fluent-transition-api/SKILL.md +3 -2
  60. package/content/dev/skills/fluent-ui-record/SKILL.md +1 -1
  61. package/content/dev/skills/fluent-ui-test/SKILL.md +9 -8
  62. package/content/dev/skills/fluent-use-case-discover/SKILL.md +2 -2
  63. package/content/dev/skills/fluent-workflow-analyzer/SKILL.md +3 -2
  64. package/content/dev/skills/fluent-workspace-tree/SKILL.md +4 -3
  65. package/content/knowledge/index.md +3 -3
  66. package/content/knowledge/platform/domain-model.md +1 -0
  67. package/content/knowledge/platform/module-structure.md +5 -5
  68. package/content/knowledge/platform/mystique-routing.md +6 -3
  69. package/content/knowledge/platform/permissions-and-contexts.md +2 -2
  70. package/content/knowledge/platform/rule-test-patterns.md +1 -1
  71. package/content/knowledge/platform/workflow-json-structure.md +1 -1
  72. package/content/mcp-extn/skills/fluent-mcp-core/SKILL.md +2 -1
  73. package/content/mcp-extn/skills/fluent-mcp-tools/SKILL.md +3 -2
  74. package/content/rfl/skills/fluent-rfl-assess/SKILL.md +1 -1
  75. package/docs/01-first-session.md +175 -0
  76. package/docs/02-prompt-guide.md +246 -0
  77. package/docs/03-use-cases.md +1181 -0
  78. package/docs/04-onboarding-plan.md +355 -0
  79. package/docs/05-getting-started.md +262 -0
  80. package/docs/06-dev-workflow.md +1040 -0
  81. package/docs/INDEX.md +40 -0
  82. package/docs/agents-and-skills-guide.md +199 -0
  83. package/docs/capability-map.md +165 -0
  84. package/docs/chrome-devtools-mcp-reference.md +401 -0
  85. package/docs/fluent-ai-skills-reference.md +1351 -0
  86. package/docs/manifest-safety.md +79 -0
  87. package/docs/mcp-servers.md +209 -0
  88. package/docs/workflow-reference.md +167 -0
  89. package/lib/fluent-brand.css +55 -0
  90. package/metadata.json +7 -6
  91. package/package.json +17 -3
  92. package/scripts/postinstall.mjs +38 -0
  93. package/{content/dev/skills/fluent-trace/scripts/analyze-event-capture.mjs → tools/event-capture-analyzer.mjs} +3 -3
  94. package/tools/{generate-feature-dashboard.mjs → feature-dashboard.mjs} +2 -2
  95. package/tools/manifest-diff.mjs +1 -1
  96. package/{content/dev/skills/fluent-mystique-assess/validator.mjs → tools/manifest-validator.mjs} +2 -2
  97. package/tools/workflow-explainer.mjs +1021 -0
@@ -0,0 +1,401 @@
1
+ # Chrome DevTools MCP Reference — Fluent Commerce UX Testing
2
+
3
+ > [!CAUTION]
4
+ > **🧪 EXPERIMENTAL — LABS PROJECT**
5
+ > This package is not production-ready. No stability guarantees, no support, no warranty. See [README](../README.md) for full disclaimer.
6
+
7
+ > **Version:** chrome-devtools-mcp@latest (v0.18.1+) | Last updated: 2026-03-04
8
+ >
9
+ > **Purpose:** Browser automation for Fluent Commerce UX app testing (Material UI React SPA with hash routing).
10
+
11
+ ---
12
+
13
+ ## Why Chrome DevTools MCP
14
+
15
+ Chrome DevTools MCP is the recommended browser automation for Fluent Commerce because:
16
+ - **DOM snapshots + screenshots** — deterministic element selection, no vision model needed, ~10x faster than pixel-based approaches
17
+ - **Token-optimized** — The `__fcTest` helper library (`content/dev/skills/fluent-ui-test/BROWSER_OPTIMIZATIONS.md`) replaces most `take_snapshot` calls (~30K tokens each) with `pageState()` (~150 tokens), `pageSummary()` (~500 tokens), MUI-aware finders (~50 tokens each), `diffState()` (~200 tokens for before/after), and programmatic login via `isLoggedIn()`/`loginForm()` — reducing browser interaction costs by ~90%. Login persistence via `--storage-state` eliminates re-login overhead entirely.
18
+ - **Material UI compatibility** — excellent accessibility markup means `take_snapshot` reliably finds elements
19
+ - **Hash routing support** — handles SPA routing correctly (no reload on hash change)
20
+ - **Headless mode** — CI/CD ready with `--headless`
21
+ - **Auto-configured** — installed by `npx @fluentcommerce/ai-skills install`
22
+
23
+ ### Alternatives (Not Recommended)
24
+
25
+ | Feature | Chrome DevTools MCP | Puppeteer MCP | Chrome MCP Extension |
26
+ |---------|:---:|:---:|:---:|
27
+ | Tool Count | 29 | 8 | 20+ |
28
+ | Headless Mode | Yes | Yes | No |
29
+ | Stability | High | Low (critical bugs) | Medium |
30
+ | CI/CD Ready | Yes | Yes | No |
31
+ | DOM Snapshots | Yes | No | No |
32
+ | Best For | Automated testing | (Not recommended) | Manual debugging |
33
+
34
+ **Puppeteer MCP** has critical communication bugs (#5 — server doesn't return data to client). Avoid.
35
+
36
+ **Chrome MCP Extension** (`mcp-chrome-bridge`) attaches to your existing Chrome with cookies/auth. Useful for manual debugging only. Add with `--with-chrome` flag.
37
+
38
+ ---
39
+
40
+ ## Setup
41
+
42
+ Your `.mcp.json` is auto-configured by the installer:
43
+
44
+ ```json
45
+ {
46
+ "chrome-devtools": {
47
+ "command": "npx",
48
+ "args": ["-y", "chrome-devtools-mcp@latest"],
49
+ "env": {
50
+ "FLUENT_UI_BASE_URL": "https://<account>.<env>.apps.engineering.fluentcommerce.com"
51
+ }
52
+ }
53
+ }
54
+ ```
55
+
56
+ **First run:** Browser binaries auto-install (Chromium ~130MB).
57
+
58
+ ### Installer flags
59
+
60
+ | Flag | Purpose |
61
+ |------|---------|
62
+ | `--browser-url <url>` | Set `FLUENT_UI_BASE_URL` for a specific environment |
63
+ | `--no-browser` | Skip Chrome DevTools MCP setup (backend-only workflows) |
64
+ | `--save-video [resolution]` | Enable continuous video recording (default: 1920x1080) |
65
+ | `--with-chrome` | Add Chrome MCP Extension alongside (manual debugging) |
66
+
67
+ ### Hybrid setup (optional)
68
+
69
+ ```bash
70
+ npx @fluentcommerce/ai-skills mcp-setup --profile YOUR_PROFILE --with-chrome
71
+ ```
72
+
73
+ Adds `chrome-manual` server. Requires Chrome extension from https://github.com/hangwin/mcp-chrome.
74
+ - `mcp__chrome-devtools__*` tools for automated tests
75
+ - `mcp__chrome-manual__*` tools for exploratory testing with existing sessions
76
+
77
+ ---
78
+
79
+ ## Common Testing Workflows
80
+
81
+ ### 1. Login to Fluent OMS
82
+
83
+ ```typescript
84
+ navigate_page({ url: "https://<account>.test.apps.engineering.fluentcommerce.com/oms" })
85
+ take_snapshot() // Find login form uids
86
+
87
+ fill_form({
88
+ elements: [
89
+ { uid: "username-input-uid", value: "YOUR_USERNAME" },
90
+ { uid: "password-input-uid", value: "YOUR_PASSWORD" }
91
+ ]
92
+ })
93
+ click({ uid: "login-button-uid" })
94
+ wait_for({ text: ["Dashboard", "Orders"] })
95
+ take_snapshot() // Verify dashboard loaded
96
+ ```
97
+
98
+ ### 2. Navigate with Hash Routing
99
+
100
+ ```typescript
101
+ // Direct URL navigation
102
+ navigate_page({ url: "https://<account>.test.apps.engineering.fluentcommerce.com/oms#/orders" })
103
+
104
+ // OR click navigation menu
105
+ click({ uid: "orders-menu-item-uid" })
106
+ take_snapshot() // Verify orders list
107
+ ```
108
+
109
+ ### 3. Search and Verify
110
+
111
+ ```typescript
112
+ take_snapshot()
113
+ click({ uid: "search-input-uid" }) // Focus the input first
114
+ type_text({ text: "TEST-ORDER-001", submitKey: "Enter" })
115
+ wait_for({ text: ["TEST-ORDER-001"], timeout: 5000 })
116
+ list_network_requests() // Verify GraphQL query fired
117
+ ```
118
+
119
+ ### 4. Fill Complex Forms (Material UI)
120
+
121
+ ```typescript
122
+ fill_form({
123
+ elements: [
124
+ { uid: "customer-autocomplete-uid", value: "John Doe" },
125
+ { uid: "order-type-select-uid", value: "HD" },
126
+ { uid: "order-ref-input-uid", value: "TEST-ORDER-123" }
127
+ ]
128
+ })
129
+ // For dropdowns, use fill_form or click to open then click the option
130
+ click({ uid: "retailer-select-uid" })
131
+ click({ uid: "retailer-option-uid" })
132
+ click({ uid: "submit-button-uid" })
133
+ ```
134
+
135
+ ### 5. Verify GraphQL API Calls
136
+
137
+ ```typescript
138
+ click({ uid: "refresh-button-uid" })
139
+ list_network_requests()
140
+ // Look for: url containing "graphql", method "POST", status 200
141
+ ```
142
+
143
+ **POST payload capture workaround** (payloads may not appear in network log):
144
+
145
+ ```typescript
146
+ evaluate_script({
147
+ code: `
148
+ window.__capturedRequests = [];
149
+ const originalFetch = window.fetch;
150
+ window.fetch = function(...args) {
151
+ const [url, options] = args;
152
+ if (options?.method === 'POST' && url.includes('graphql')) {
153
+ window.__capturedRequests.push({ url, body: options.body });
154
+ }
155
+ return originalFetch.apply(this, args);
156
+ };
157
+ `
158
+ })
159
+ // Later: evaluate_script({ code: `JSON.stringify(window.__capturedRequests)` })
160
+ ```
161
+
162
+ ### 6. Check Console for React Errors
163
+
164
+ ```typescript
165
+ list_console_messages()
166
+ click({ uid: "problematic-button-uid" })
167
+ list_console_messages() // Returns array of { level: "error", text: "..." }
168
+ ```
169
+
170
+ ### 7. Screenshots for Visual Regression
171
+
172
+ ```typescript
173
+ take_screenshot({ fullPage: true }) // Full page
174
+ take_screenshot({ uid: "order-card-uid" }) // Element-specific
175
+ ```
176
+
177
+ ### 8. Mobile Responsive Testing
178
+
179
+ ```typescript
180
+ resize_page({ width: 390, height: 844 })
181
+ take_snapshot() // Verify mobile layout
182
+ ```
183
+
184
+ Or configure in `.mcp.json`: `"args": ["-y", "chrome-devtools-mcp@latest", "--device=iPhone 15"]`
185
+
186
+ ### 9. Persist Login Across Runs
187
+
188
+ Add `--storage-state` to `.mcp.json` args:
189
+ ```
190
+ "--storage-state=./chrome-session.json"
191
+ ```
192
+ First run: login saved to file. Subsequent runs: auto-logged in.
193
+
194
+ ---
195
+
196
+ ## Material UI Component Selectors
197
+
198
+ Chrome DevTools MCP uses **DOM snapshots**, not CSS selectors:
199
+
200
+ | Component | How to Select |
201
+ |-----------|---------------|
202
+ | TextField | Find by label: `"Order Reference"` |
203
+ | Button | Find by text: `"Submit"` |
204
+ | Select/Dropdown | Find by label: `"Order Type"` |
205
+ | Autocomplete | Find by input label: `"Customer"` |
206
+ | DataGrid | Find by role: `"grid"` |
207
+ | Dialog | Find by role: `"dialog"` |
208
+ | Menu | Find by role: `"menu"` |
209
+ | Tabs | Find by role: `"tab"` |
210
+
211
+ **Key insight:** Material UI has excellent accessibility markup, making `take_snapshot` highly reliable.
212
+
213
+ ---
214
+
215
+ ## Click Telemetry (Visual Click Highlights)
216
+
217
+ Chrome DevTools MCP clicks are programmatic — no visible cursor appears. Click Telemetry injects visual highlights around elements before interactions, making screenshots and screencasts self-documenting.
218
+
219
+ ### Quick Setup
220
+
221
+ Inject once at session start via `evaluate_script`:
222
+
223
+ ```javascript
224
+ (function() {
225
+ if (!document.getElementById('__fc-click-keyframes')) {
226
+ var s = document.createElement('style');
227
+ s.id = '__fc-click-keyframes';
228
+ s.textContent =
229
+ '@keyframes fcClickPulse{0%{box-shadow:0 0 0 0 rgba(233,69,96,0.6)}' +
230
+ '50%{box-shadow:0 0 0 8px rgba(233,69,96,0.2)}' +
231
+ '100%{box-shadow:0 0 0 0 rgba(233,69,96,0)}}';
232
+ document.head.appendChild(s);
233
+ }
234
+ })();
235
+ ```
236
+
237
+ ### Highlight Before Click
238
+
239
+ ```javascript
240
+ (function() {
241
+ var prev = document.getElementById('__fc-click-highlight');
242
+ if (prev) prev.remove();
243
+ var elem = document.querySelector('SELECTOR');
244
+ if (!elem) return 'not_found';
245
+ var rect = elem.getBoundingClientRect();
246
+ var h = document.createElement('div');
247
+ h.id = '__fc-click-highlight';
248
+ h.style.cssText = 'position:fixed;left:' + (rect.left-4) + 'px;top:' + (rect.top-4) +
249
+ 'px;width:' + (rect.width+8) + 'px;height:' + (rect.height+8) +
250
+ 'px;border:3px solid #e94560;border-radius:6px;z-index:2147483646;' +
251
+ 'pointer-events:none;animation:fcClickPulse 0.8s ease-in-out infinite';
252
+ var b = document.createElement('span');
253
+ b.style.cssText = 'position:absolute;top:-26px;left:0;background:#e94560;color:#fff;' +
254
+ 'padding:2px 10px;border-radius:4px;font:700 11px system-ui;text-transform:uppercase';
255
+ b.textContent = 'LABEL';
256
+ h.appendChild(b);
257
+ document.body.appendChild(h);
258
+ })();
259
+ ```
260
+
261
+ ### Full Click Sequence
262
+
263
+ 1. `evaluate_script` — inject highlight
264
+ 2. `wait_for` 300ms — let animation render
265
+ 3. `take_screenshot` — capture highlighted state
266
+ 4. `click` the element
267
+ 5. `wait_for` 500ms — let page settle
268
+ 6. `evaluate_script` — remove highlight: `var el = document.getElementById('__fc-click-highlight'); if (el) el.remove();`
269
+ 7. `take_screenshot` — capture post-click state
270
+
271
+ ### Action Timeline Tracker
272
+
273
+ ```javascript
274
+ window.__fcTimeline = {
275
+ actions: [], startTime: Date.now(),
276
+ log: function(action, target, label) {
277
+ this.actions.push({ seq: this.actions.length + 1,
278
+ elapsed: Date.now() - this.startTime,
279
+ action: action, target: target, label: label });
280
+ },
281
+ getReport: function() {
282
+ return JSON.stringify({ total: this.actions.length,
283
+ durationMs: Date.now() - this.startTime, timeline: this.actions });
284
+ }
285
+ };
286
+ ```
287
+
288
+ | Skill | Usage |
289
+ |-------|-------|
290
+ | `/fluent-ui-test` | Highlights each user action button during Phase 4 verification |
291
+ | `/fluent-ui-record` | Full highlight sequence for every interaction during recording |
292
+
293
+ ---
294
+
295
+ ## Troubleshooting
296
+
297
+ ### Common Issues
298
+
299
+ | Symptom | Cause | Fix |
300
+ |---------|-------|-----|
301
+ | "Element not found" | Element not in DOM yet (still loading) | `wait_for({ text: ["expected text"], timeout: 5000 })` then `take_snapshot()` |
302
+ | Hash routing not working | Browser treated `#` as fragment | Use full URL: `https://...com/oms#/orders` (not just `#/orders`) |
303
+ | GraphQL mutation payload missing | POST bodies not always captured | Use `evaluate_script` with fetch interceptor (see above) |
304
+ | Flaky tests after navigation | No auto-wait after navigation | Always add `wait_for` after `navigate_page` |
305
+ | Bearer token truncated | Header parser limitation | Use `evaluate_script({ code: 'localStorage.getItem("authToken")' })` |
306
+ | Chrome DevTools MCP not starting | Stale browser lock file | `rm -rf ~/.cache/chrome-devtools-mcp/chrome-profile/SingletonLock` |
307
+ | Chrome DevTools MCP port conflict | Another Chrome instance using same profile | Use `--headless` or remove the full profile dir |
308
+
309
+ **NEVER use `taskkill //F //IM chrome.exe`** — this kills the user's personal browser tabs. Chrome DevTools MCP uses its own profile at `~/.cache/chrome-devtools-mcp/chrome-profile`. When the lock is stale, remove the `SingletonLock` file (not taskkill).
310
+
311
+ ### Performance Tips
312
+
313
+ 1. **Use `take_snapshot` not screenshots** — DOM snapshot (0.5s) is ~10x faster than screenshot + vision model (5-10s)
314
+ 2. **Batch fill operations** — one `fill_form` call instead of multiple `type_text` calls
315
+ 3. **Reuse storage state** — login once, save session (1s) vs login every run (10-15s)
316
+
317
+ ---
318
+
319
+ ## Advanced Configuration
320
+
321
+ ### Headless for CI/CD
322
+
323
+ ```json
324
+ { "args": ["-y", "chrome-devtools-mcp@latest", "--headless"] }
325
+ ```
326
+
327
+ ### Restrict Allowed Hosts
328
+
329
+ ```json
330
+ { "args": ["-y", "chrome-devtools-mcp@latest", "--allowed-hosts=<account>.test.apps.engineering.fluentcommerce.com"] }
331
+ ```
332
+
333
+ ### Enable Screencast Recording
334
+
335
+ ```json
336
+ { "args": ["-y", "chrome-devtools-mcp@latest", "--experimentalScreencast"] }
337
+ ```
338
+
339
+ FFmpeg optional — enables trim/convert `.webm` to `.mp4`, GIF previews.
340
+
341
+ ### Use Proxy
342
+
343
+ ```json
344
+ { "args": ["-y", "chrome-devtools-mcp@latest", "--proxy-server=http://proxy.example.com:8080"] }
345
+ ```
346
+
347
+ ### CI/CD Example (GitHub Actions)
348
+
349
+ ```yaml
350
+ name: Fluent UX E2E Tests
351
+ on: [push, pull_request]
352
+ jobs:
353
+ test:
354
+ runs-on: ubuntu-latest
355
+ steps:
356
+ - uses: actions/checkout@v4
357
+ - uses: actions/setup-node@v4
358
+ with: { node-version: '20' }
359
+ - name: Install browser binaries
360
+ run: npx chrome-devtools-mcp@latest --headless --help
361
+ - name: Run tests
362
+ run: |
363
+ echo '{ "chrome-devtools": { "command": "npx", "args": ["-y", "chrome-devtools-mcp@latest", "--headless"], "env": { "FLUENT_UI_BASE_URL": "${{ secrets.FLUENT_UI_BASE_URL }}" } } }' > .mcp.json
364
+ claude-code run test-fluent-ux.ts
365
+ - name: Upload screenshots
366
+ if: failure()
367
+ uses: actions/upload-artifact@v4
368
+ with: { name: test-screenshots, path: ./screenshots/ }
369
+ ```
370
+
371
+ ---
372
+
373
+ ## Tool Reference
374
+
375
+ | Tool | Purpose | Key Parameters |
376
+ |------|---------|----------------|
377
+ | `navigate_page` | Go to URL | `url` |
378
+ | `click` | Click element | `uid`, `dblClick` |
379
+ | `type_text` | Type into focused input | `text`, `submitKey` |
380
+ | `press_key` | Press keyboard key | `key` |
381
+ | `fill_form` | Fill multiple fields | `elements: [{uid, value}]` |
382
+ | `drag` | Drag and drop | `from_uid`, `to_uid` |
383
+ | `hover` | Hover over element | `uid` |
384
+ | `upload_file` | Upload file | `uid`, `filePath` |
385
+ | `take_snapshot` | Get DOM snapshot | (returns structured JSON with uid per element) |
386
+ | `take_screenshot` | Capture screenshot | `fullPage`, `uid`, `filePath`, `format` |
387
+ | `list_console_messages` | Get console logs | (returns array) |
388
+ | `list_network_requests` | Get network activity | (returns array) |
389
+ | `evaluate_script` | Run JavaScript | `code` |
390
+ | `handle_dialog` | Handle alert/confirm | `action`, `text` |
391
+ | `close_page` | Close browser tab | |
392
+ | `resize_page` | Change viewport | `width`, `height` |
393
+ | `wait_for` | Wait for text to appear | `text` (array of strings), `timeout` |
394
+
395
+ ---
396
+
397
+ ## References
398
+
399
+ - [Chrome DevTools MCP (npm)](https://www.npmjs.com/package/chrome-devtools-mcp)
400
+ - [Chrome MCP Extension (GitHub)](https://github.com/hangwin/mcp-chrome)
401
+ - [Model Context Protocol Docs](https://modelcontextprotocol.io)