@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.
- package/.agents/plugins/marketplace.json +22 -0
- package/.claude-plugin/marketplace.json +34 -0
- package/.claude-plugin/plugin.json +26 -0
- package/.codex-plugin/plugin.json +45 -0
- package/.cursor/mcp.json +9 -0
- package/.cursor-plugin/marketplace.json +32 -0
- package/.cursor-plugin/plugin.json +22 -0
- package/CHANGELOG.md +310 -0
- package/LICENSE +21 -0
- package/README.md +170 -0
- package/THIRD_PARTY.md +104 -0
- package/UPSTREAM_TRACKING.md +58 -0
- package/dist/bin/rolepod-uiproof.d.ts +1 -0
- package/dist/bin/rolepod-uiproof.js +2530 -0
- package/dist/bin/rolepod-uiproof.js.map +1 -0
- package/dist/index.d.ts +918 -0
- package/dist/index.js +2303 -0
- package/dist/index.js.map +1 -0
- package/dist/schemas/tools.json +51 -0
- package/package.json +85 -0
- package/skills/audit-a11y/SKILL.md +76 -0
- package/skills/scaffold-e2e/SKILL.md +85 -0
- package/skills/verify-ui/SKILL.md +134 -0
- package/skills/visual-diff/SKILL.md +73 -0
|
@@ -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
|
+
}
|
package/.cursor/mcp.json
ADDED
|
@@ -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.
|