@rolepod/uiproof 0.4.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.
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "rolepod-uiproof",
3
+ "interface": {
4
+ "displayName": "Rolepod UIProof",
5
+ "shortDescription": "UI verification, a11y audits, visual diff, e2e scaffolding for AI coding agents.",
6
+ "developerName": "nuttaruj",
7
+ "websiteURL": "https://github.com/nuttaruj/rolepod-uiproof"
8
+ },
9
+ "plugins": [
10
+ {
11
+ "name": "rolepod-uiproof",
12
+ "source": {
13
+ "source": "local",
14
+ "path": "./plugins/rolepod-uiproof"
15
+ },
16
+ "policy": {
17
+ "installation": "AVAILABLE"
18
+ },
19
+ "category": "Productivity"
20
+ }
21
+ ]
22
+ }
@@ -0,0 +1,34 @@
1
+ {
2
+ "$schema": "https://anthropic.com/claude-code/marketplace.schema.json",
3
+ "name": "rolepod-uiproof",
4
+ "description": "Multi-platform UI / mobile automation MCP server + 4 shipped skills (verify-ui, audit-a11y, visual-diff, scaffold-e2e) for AI coding agents.",
5
+ "owner": {
6
+ "name": "nuttaruj",
7
+ "url": "https://github.com/nuttaruj"
8
+ },
9
+ "plugins": [
10
+ {
11
+ "name": "rolepod-uiproof",
12
+ "source": "./",
13
+ "description": "15 MCP tools (10 atomic browser/mobile primitives + 5 composite workflows) + 4 user-invocable skills. Web production-ready via Playwright; mobile (iOS/Android) via Appium scaffolded — see `rolepod-uiproof doctor` for readiness.",
14
+ "version": "0.4.0",
15
+ "author": {
16
+ "name": "nuttaruj"
17
+ },
18
+ "homepage": "https://github.com/nuttaruj/rolepod-uiproof",
19
+ "repository": "https://github.com/nuttaruj/rolepod-uiproof",
20
+ "license": "MIT",
21
+ "category": "productivity",
22
+ "tags": [
23
+ "mcp",
24
+ "ui-automation",
25
+ "playwright",
26
+ "appium",
27
+ "accessibility",
28
+ "visual-regression",
29
+ "e2e",
30
+ "ai-agents"
31
+ ]
32
+ }
33
+ ]
34
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "name": "rolepod-uiproof",
3
+ "version": "0.4.0",
4
+ "description": "Multi-platform UI/mobile automation for AI agents — 4 shipped skills (verify-ui, audit-a11y, visual-diff, scaffold-e2e) + MCP server with 15 tools. v0.3 adds AppiumEngine scaffolding for iOS/Android, scope={ref} audit, replay CLI, ddmin minimization, doctor + install:mobile.",
5
+ "author": {
6
+ "name": "nuttaruj",
7
+ "url": "https://github.com/nuttaruj"
8
+ },
9
+ "homepage": "https://github.com/nuttaruj/rolepod-uiproof",
10
+ "repository": "https://github.com/nuttaruj/rolepod-uiproof.git",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "mcp",
14
+ "playwright",
15
+ "ui-automation",
16
+ "claude-code",
17
+ "verify-ui"
18
+ ],
19
+ "mcpServers": {
20
+ "rolepod-uiproof": {
21
+ "command": "npx",
22
+ "args": ["-y", "@rolepod/uiproof"],
23
+ "env": {}
24
+ }
25
+ }
26
+ }
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "rolepod-uiproof",
3
+ "version": "0.4.0",
4
+ "description": "Multi-platform UI/mobile automation for AI agents — 4 shipped skills (verify-ui, audit-a11y, visual-diff, scaffold-e2e) + MCP server with 15 tools. v0.3 adds AppiumEngine scaffolding for iOS/Android; web is production-ready via Playwright.",
5
+ "author": {
6
+ "name": "nuttaruj",
7
+ "url": "https://github.com/nuttaruj"
8
+ },
9
+ "homepage": "https://github.com/nuttaruj/rolepod-uiproof",
10
+ "repository": {
11
+ "type": "git",
12
+ "url": "https://github.com/nuttaruj/rolepod-uiproof"
13
+ },
14
+ "license": "MIT",
15
+ "keywords": [
16
+ "mcp",
17
+ "ui-automation",
18
+ "playwright",
19
+ "appium",
20
+ "axe-core",
21
+ "visual-regression"
22
+ ],
23
+ "skills": "./skills/",
24
+ "mcp_servers": {
25
+ "rolepod-uiproof": {
26
+ "command": "npx",
27
+ "args": ["-y", "@rolepod/uiproof"],
28
+ "env": {}
29
+ }
30
+ },
31
+ "interface": {
32
+ "displayName": "Rolepod UIProof",
33
+ "shortDescription": "UI verification, a11y audits, visual diff, e2e scaffolding — for AI coding agents.",
34
+ "longDescription": "rolepod-uiproof ships an MCP server with 15 tools (10 atomic + 5 composite) and 4 user-invocable skills (/verify-ui, /audit-a11y, /visual-diff, /scaffold-e2e). Web is fully supported via Playwright; mobile (iOS/Android via Appium) lands in v0.3.",
35
+ "developerName": "nuttaruj",
36
+ "category": "Productivity",
37
+ "capabilities": ["Read", "Write", "Bash"],
38
+ "websiteURL": "https://github.com/nuttaruj/rolepod-uiproof",
39
+ "defaultPrompt": [
40
+ "Use /verify-ui to drive a real browser through the change I just made and prove it works.",
41
+ "Use /audit-a11y to scan the page for WCAG-AA issues.",
42
+ "Use /scaffold-e2e to convert this verify run into a runnable Playwright test."
43
+ ]
44
+ }
45
+ }
@@ -0,0 +1,9 @@
1
+ {
2
+ "mcpServers": {
3
+ "rolepod-uiproof": {
4
+ "command": "npx",
5
+ "args": ["-y", "@rolepod/uiproof"],
6
+ "env": {}
7
+ }
8
+ }
9
+ }
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "rolepod-uiproof",
3
+ "owner": {
4
+ "name": "nuttaruj"
5
+ },
6
+ "metadata": {
7
+ "description": "Multi-platform UI / mobile automation MCP server + 4 shipped skills for AI coding agents.",
8
+ "version": "0.4.0"
9
+ },
10
+ "plugins": [
11
+ {
12
+ "name": "rolepod-uiproof",
13
+ "source": ".",
14
+ "description": "15 MCP tools + 4 skills. Web (Playwright) production-ready; mobile (iOS/Android via Appium) scaffolded.",
15
+ "version": "0.4.0",
16
+ "author": {
17
+ "name": "nuttaruj"
18
+ },
19
+ "homepage": "https://github.com/nuttaruj/rolepod-uiproof",
20
+ "repository": "https://github.com/nuttaruj/rolepod-uiproof",
21
+ "license": "MIT",
22
+ "keywords": [
23
+ "mcp",
24
+ "ui-automation",
25
+ "playwright",
26
+ "appium",
27
+ "accessibility",
28
+ "ai-agents"
29
+ ]
30
+ }
31
+ ]
32
+ }
@@ -0,0 +1,22 @@
1
+ {
2
+ "name": "rolepod-uiproof",
3
+ "displayName": "Rolepod UIProof",
4
+ "version": "0.4.0",
5
+ "description": "Multi-platform UI / mobile automation MCP server + 4 shipped skills (verify-ui, audit-a11y, visual-diff, scaffold-e2e) for AI coding agents. Web production-ready via Playwright; mobile (iOS/Android via Appium) scaffolded.",
6
+ "author": {
7
+ "name": "nuttaruj"
8
+ },
9
+ "homepage": "https://github.com/nuttaruj/rolepod-uiproof",
10
+ "repository": "https://github.com/nuttaruj/rolepod-uiproof",
11
+ "license": "MIT",
12
+ "keywords": [
13
+ "mcp",
14
+ "ui-automation",
15
+ "playwright",
16
+ "appium",
17
+ "accessibility",
18
+ "visual-regression",
19
+ "e2e",
20
+ "cursor"
21
+ ]
22
+ }
package/CHANGELOG.md ADDED
@@ -0,0 +1,310 @@
1
+ # Changelog
2
+
3
+ All notable changes to this project are recorded here. Versions follow
4
+ [Semantic Versioning](https://semver.org/). The schema-stability promise
5
+ begins at **v1.0**; until then, breaking changes are possible at any
6
+ release.
7
+
8
+ ## [Unreleased]
9
+
10
+ ## [0.4.0] — 2026-05-24
11
+
12
+ **Breaking: project renamed `rolepod-mcp` → `rolepod-uiproof`.**
13
+
14
+ Reason: `rolepod-mcp` was too generic for the planned ecosystem
15
+ (`rolepod-uiproof`, `rolepod-apiproof`, `rolepod-perfproof`,
16
+ `rolepod-secproof` — each a focused "proof of X" MCP). Locking the
17
+ generic `-mcp` suffix on the UI/mobile project blocked sibling
18
+ naming. Done now while public adoption is effectively zero
19
+ (<6 hours since first publish).
20
+
21
+ ### Renamed
22
+
23
+ | Surface | Before | After |
24
+ |---|---|---|
25
+ | npm package | `@rolepod/mcp` | `@rolepod/uiproof` |
26
+ | GitHub repo | `nuttaruj/rolepod-mcp` | `nuttaruj/rolepod-uiproof` |
27
+ | Plugin name | `rolepod-mcp` | `rolepod-uiproof` |
28
+ | Marketplace name | `rolepod-mcp` | `rolepod-uiproof` |
29
+ | Display name | `Rolepod MCP` | `Rolepod UIProof` |
30
+ | CLI bin | `rolepod-mcp` | `rolepod-uiproof` |
31
+ | Artifact dir | `./.rolepod-mcp/` | `./.rolepod-uiproof/` |
32
+ | Server name constant | `rolepod-mcp` | `rolepod-uiproof` |
33
+
34
+ ### Unchanged (deliberate)
35
+
36
+ - **MCP tool names stay `rolepod_*`** — these are the org namespace
37
+ (per the project's tool-naming convention), not the project name.
38
+ Sibling MCPs will register their own sub-namespaces (`rolepod_api_*`,
39
+ `rolepod_perf_*`) without collisions.
40
+ - The 4 shipped skills' slugs stay `/verify-ui`, `/audit-a11y`,
41
+ `/visual-diff`, `/scaffold-e2e`.
42
+ - All input/output schemas unchanged.
43
+
44
+ ### Migration
45
+
46
+ **npm consumers:**
47
+
48
+ ```bash
49
+ npm uninstall @rolepod/mcp
50
+ npm install @rolepod/uiproof
51
+ ```
52
+
53
+ `@rolepod/mcp@0.3.x` is deprecated on npm with a pointer to
54
+ `@rolepod/uiproof`. Existing installs continue to work but will print
55
+ a deprecation notice.
56
+
57
+ **Claude Code marketplace:**
58
+
59
+ ```bash
60
+ claude plugin uninstall rolepod-mcp@rolepod-mcp
61
+ claude plugin marketplace remove rolepod-mcp
62
+ claude plugin marketplace add nuttaruj/rolepod-uiproof
63
+ claude plugin install rolepod-uiproof@rolepod-uiproof
64
+ ```
65
+
66
+ **Codex CLI:**
67
+
68
+ ```bash
69
+ codex plugin remove rolepod-mcp@rolepod-mcp
70
+ codex plugin marketplace remove rolepod-mcp
71
+ codex plugin marketplace add nuttaruj/rolepod-uiproof
72
+ codex plugin add rolepod-uiproof@rolepod-uiproof
73
+ ```
74
+
75
+ **Cursor workspace MCP** — re-pull `.cursor/mcp.json`:
76
+
77
+ ```bash
78
+ curl -fsSL https://raw.githubusercontent.com/nuttaruj/rolepod-uiproof/main/.cursor/mcp.json -o .cursor/mcp.json
79
+ ```
80
+
81
+ **Artifact baselines** — if you have `./.rolepod-mcp/baselines/<id>.png`
82
+ files from earlier runs, move them under the new path so visual_diff
83
+ finds them:
84
+
85
+ ```bash
86
+ mv .rolepod-mcp .rolepod-uiproof
87
+ ```
88
+
89
+ **GitHub URLs** — `nuttaruj/rolepod-mcp` returns a permanent 301
90
+ redirect to the new URL; existing clones continue to work but should
91
+ update their remote:
92
+
93
+ ```bash
94
+ git remote set-url origin https://github.com/nuttaruj/rolepod-uiproof.git
95
+ ```
96
+
97
+ ## [0.3.1] — 2026-05-24
98
+
99
+ First **live mobile smoke** completed end-to-end against a real iOS
100
+ Simulator (iPhone 17, iOS 26.5) via Appium 3.4.2 + xcuitest driver
101
+ 11.7.1. Settings.app session opened, snapshot parsed to 161-node
102
+ A11yNode tree (`application > navigationbar "Settings" > ...`),
103
+ session closed cleanly. Doctor reports green for every check that
104
+ matters on this host.
105
+
106
+ ### Fixed
107
+
108
+ - `parseXcuiTestTree` + `parseUiAutomator2Tree`: skip XML declaration
109
+ (`<?xml ... ?>`) and processing instructions when picking the first
110
+ tag. Previously the declaration leaked into the tree as a synthetic
111
+ `?xml` node (e1) alongside the real `AppiumAUT` wrapper.
112
+
113
+ ### Verified live
114
+
115
+ - `AppiumEngine.open()` against `com.apple.Preferences` on iOS
116
+ Simulator
117
+ - `AppiumEngine.snapshot()` → `parseXcuiTestTree()` → 161 typed nodes
118
+ - `AppiumEngine.close()` clean teardown
119
+
120
+ ### Notes
121
+
122
+ - WebDriverAgent first-build takes 3-5 min via xcodebuild; subsequent
123
+ sessions reuse the cached WDA (~5s startup).
124
+ - Appium daemon must run with `DEVELOPER_DIR` pointed at the full
125
+ Xcode app (not `/Library/Developer/CommandLineTools`) so the
126
+ iphonesimulator SDK is locatable. `rolepod-mcp install:mobile`
127
+ documents this.
128
+ - Android UIAutomator2 smoke still pending — same fix applies to the
129
+ uiautomator2 parser preemptively.
130
+
131
+ ## [0.3.0] — 2026-05-24
132
+
133
+ Mobile scaffolding + CLI + governance. Web surface unchanged. Mobile
134
+ code paths compile and the AT normalizers are unit-tested against
135
+ fixture XML; real iOS/Android runs require a local Appium server +
136
+ simulator and are gated by `npx rolepod-mcp doctor`.
137
+
138
+ ### Added
139
+
140
+ - **AppiumEngine** (`src/engine/AppiumEngine.ts`) — full `Engine`
141
+ interface implementation backed by webdriverio + Appium 2.x.
142
+ Routes `platform: 'ios'` to XCUITest, `platform: 'android'` to
143
+ UIAutomator2. webdriverio is lazy-loaded as an
144
+ `optionalDependency`, so web-only installs skip it.
145
+ - **Mobile AT normalizers** (`src/engine/a11y/xcuitest.ts`,
146
+ `uiautomator2.ts`) — inspired by alumnium (MIT) per D-005 and
147
+ `UPSTREAM_TRACKING.md`. Original implementations using
148
+ `fast-xml-parser`. Unit tests pass against fixture XML.
149
+ - **`audit_a11y` scope={ref}** — tags the resolved element with a
150
+ temporary `data-rolepod-axe-scope` attribute so axe-core can
151
+ include it. Cleans up the tag in `finally`.
152
+ - **`rolepod-mcp doctor`** — health check covering Node version,
153
+ Playwright Chromium install, webdriverio availability, Appium
154
+ server reachability, Xcode (macOS), Android SDK, artifact dir.
155
+ - **`rolepod-mcp install:mobile`** — prints the iOS + Android setup
156
+ checklist with environment overrides.
157
+ - **`rolepod-mcp replay <bundle.json>`** — re-runs a verify_ui_flow
158
+ replay bundle deterministically without an agent in the loop.
159
+ Exit code reflects pass/fail. Brings the v0.4 replay-execution
160
+ feature forward.
161
+ - **`ddmin` minimization** (`src/replay/minimize.ts`) — classic
162
+ Zeller-Hildebrandt delta debugging. Replaces the v0.2 linear pass
163
+ inside `verify_ui_flow` reproduce mode.
164
+ - **Per-CLI manifests** — `.cursor/mcp.json` (verified against
165
+ [cursor.com/docs/mcp](https://cursor.com/docs/mcp)) and
166
+ `.codex-plugin/plugin.json` (matches parent `rolepod`'s pattern).
167
+ Gemini deferred until the official schema is published.
168
+ - **Governance documents** — `CONTRIBUTING.md`, `CODE_OF_CONDUCT.md`
169
+ (Contributor Covenant 2.1, fetched canonically from
170
+ EthicalSource), `SECURITY.md` (responsible disclosure via GitHub
171
+ Security Advisories).
172
+ - **`.github/` templates** — bug + feature issue forms (verified
173
+ against the GitHub Issue Forms schema), PR template, CI workflow
174
+ for Node 20/22 × ubuntu/macos/windows running typecheck + tests +
175
+ build + smoke handshake.
176
+ - **Public docs** — `docs/sessions.md`, `docs/artifacts.md`, plus
177
+ three recipes in `docs/recipes/`.
178
+ - **`UPSTREAM_TRACKING.md`** — records the alumnium commit SHA
179
+ referenced (`94dea1e69…`), the inspired-by vs. literal-fork
180
+ decision, and the quarterly cherry-pick policy.
181
+
182
+ ### Changed
183
+
184
+ - `SessionRegistry` now tracks `platform` per `session_id`
185
+ authoritatively via `platformOf(sessionId)`. Atomic tools and
186
+ composites consult it instead of hardcoding `'web'`.
187
+ - `bin/rolepod-mcp` dispatches subcommands (`serve` default,
188
+ `doctor`, `install:mobile`, `replay`, `--version`, `--help`).
189
+ - `factory.ts` splits `createWebEngine` + `createMobileEngine`;
190
+ `createEngine` is kept as a back-compat alias for v0.1 callers.
191
+
192
+ ### Not yet verified — mapped to later milestones
193
+
194
+ - **Mobile end-to-end runs** — same Appium contract as alumnium;
195
+ needs a local Appium daemon + iOS Simulator (or Android Emulator,
196
+ or real device). `npx rolepod-mcp doctor` reports readiness.
197
+ Code paths compile and AT normalizers are unit-tested against
198
+ fixture XML; live simulator smoke is the v0.3.x test-maturity
199
+ task. Scope: still **v0.3**.
200
+ - **SeleniumEngine** — deferred to **v0.4** (legacy Selenium grid
201
+ support, opt-in via `ROLEPOD_MCP_WEB_ENGINE=selenium`). Not
202
+ implemented because verifying it needs a running grid we don't
203
+ have access to in this session.
204
+ - **Replay execution beyond what v0.4 specifies** — recording +
205
+ ddmin minimization shipped in v0.3 (the `rolepod-mcp replay`
206
+ CLI re-runs a bundle without an agent in the loop). Full
207
+ replay-determinism guarantees, schema freeze of the bundle
208
+ format, and forward-compat across versions are still **v0.4**
209
+ scope.
210
+ - **Docs site, blog post, MCP server directory submission, npm
211
+ publish, GitHub publish** — these are **v0.5** open-source
212
+ launch tasks. They require user action (account ownership,
213
+ registration, narrative writing) and are not in-session
214
+ deliverables.
215
+ - **Adoption metrics** (1k weekly downloads, 3+ external
216
+ contributors, third-party integration documented) — **v1.0**
217
+ exit criteria. Time and market dependent; cannot be produced
218
+ inside an implementation session.
219
+
220
+ ## [0.2.0] — 2026-05-24
221
+
222
+ Web surface complete. Mobile still deferred to v0.3.
223
+
224
+ ### Added
225
+
226
+ - **Atomic tools (5 new, 10 total):** `rolepod_browser_key`,
227
+ `rolepod_browser_scroll`, `rolepod_browser_wait_for`,
228
+ `rolepod_browser_screenshot`, `rolepod_browser_navigate`.
229
+ - **Composite tools (4 new, 5 total):** `rolepod_audit_a11y` (via
230
+ `@axe-core/playwright`), `rolepod_visual_diff` (via `pixelmatch` +
231
+ `pngjs`), `rolepod_scaffold_e2e` (playwright-test / vitest+playwright
232
+ / pytest+selenium codegen), `rolepod_extract_ui_state` (internal
233
+ helper — no LLM).
234
+ - **`verify_ui_flow` mode='reproduce'** with linear-pass step
235
+ minimization (D-025).
236
+ - **3 new shipped skills:** `/audit-a11y`, `/visual-diff`,
237
+ `/scaffold-e2e`. All single-backend with no fallback (D-024).
238
+ - **Schema export:** `npm run build:schemas` emits
239
+ `dist/schemas/tools.json` (JSON-Schema 2019-09) for every
240
+ `rolepod_*` tool.
241
+ - **Skill lint:** `tests/lint/skills.test.ts` enforces frontmatter,
242
+ required body sections, single-backend tool reference, and absence of
243
+ fallback markers.
244
+
245
+ ### Changed
246
+
247
+ - `ArtifactStore` now also writes report files (`.json`/`.md`) and raw
248
+ bytes, and exposes `baselineDir` for `visual_diff`.
249
+ - `PlaywrightEngine` exposes `getPageForSession()` as an escape hatch
250
+ for web-only composites that need raw Page APIs.
251
+ - `SessionRegistry.open` throws `unsupported_platform` (was
252
+ `unknown_session`) when no engine is registered for the requested
253
+ platform.
254
+
255
+ ### Notes
256
+
257
+ - `mode='reproduce'` evaluates `expect` exactly the same way as
258
+ `mode='assert'` — the user phrases assertions in terms of the bug
259
+ surfacing. Minimization is a naive linear pass; ddmin is deferred to
260
+ v0.3.
261
+ - `audit_a11y` currently supports `scope: 'page'` only;
262
+ `scope: { ref }` is scheduled for v0.3 (returns
263
+ `not_implemented_in_v02`).
264
+ - `extract_ui_state` returns the AT subtree and matched refs; the Lead
265
+ interprets the answer. No LLM is invoked inside the MCP server
266
+ (D-004).
267
+ - The `alumnium` driver fork (D-005) is still **not** in this release.
268
+ Web continues to rely on Playwright's built-in `ariaSnapshot({mode:
269
+ 'ai'})` + `aria-ref` locator. The fork lands with mobile in v0.3.
270
+
271
+ ## [0.1.0] — 2026-05-24
272
+
273
+ Proof of concept. Single composite, single engine, single platform.
274
+
275
+ ### Added
276
+
277
+ - Plugin manifest for Claude Code (`.claude-plugin/plugin.json`) with
278
+ `mcpServers` declaration (verified against
279
+ [docs](https://code.claude.com/docs/en/plugins-reference)).
280
+ - MCP server skeleton via `@modelcontextprotocol/sdk@1.29.0` with
281
+ stdio transport.
282
+ - `Engine` interface (`src/engine/Engine.ts`) and `PlaywrightEngine`
283
+ implementation (web only).
284
+ - A11y normalization via Playwright 1.60's
285
+ `page.ariaSnapshot({mode:'ai'})` + `aria-ref=eN` locator. (Note:
286
+ Playwright 1.60 removed `page.accessibility`, hence the migration.)
287
+ - 5 atomic MCP tools: `rolepod_browser_open` / `_close` / `_snapshot`
288
+ / `_click` / `_type`.
289
+ - 1 composite tool: `rolepod_verify_ui_flow` (mode='assert' only;
290
+ mode='reproduce' deferred to v0.2 per D-025).
291
+ - 1 shipped skill: `/verify-ui` (single-backend, no fallback per
292
+ D-024).
293
+ - `ArtifactStore` writing under `./.rolepod-mcp/artifacts/{run_id}/`
294
+ per D-026 (renamed from `./.rolepod/`).
295
+ - `SessionRegistry` with per-platform engine routing and idle-timeout
296
+ cleanup.
297
+ - `bin/rolepod-mcp` stdio entry; `npx rolepod-mcp` launches the
298
+ server.
299
+ - Vitest smoke suite (`tests/smoke/example_com.test.ts`) — 6 tests
300
+ against `https://example.com`.
301
+ - Manual MCP handshake smoke (`tests/smoke/mcp_handshake.mjs`).
302
+ - MIT license; `THIRD_PARTY.md` notes the future alumnium fork plan
303
+ and runtime dependency licenses.
304
+
305
+ ### Known limitations
306
+
307
+ - Web only. Mobile (iOS / Android via Appium) lands in v0.3.
308
+ - `mode='reproduce'` not implemented (handler returns
309
+ `not_implemented_in_v01`).
310
+ - No alumnium driver fork yet — see v0.2 notes above.
package/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ MIT License
2
+
3
+ Copyright (c) 2026 nuttaruj
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.