mobile-ai-agents 1.0.31 → 1.0.32
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/cli/index.js +13 -6
- package/package.json +1 -1
- package/skills/cross-platform/mobile-mcp-qa.md +175 -2
- package/workflows/mobile-mcp-qa.md +1 -0
package/cli/index.js
CHANGED
|
@@ -245,6 +245,10 @@ const PLATFORM_SKILLS = {
|
|
|
245
245
|
// Workflows are always installed regardless of platform selection
|
|
246
246
|
const ALL_WORKFLOWS = Object.keys(WORKFLOWS);
|
|
247
247
|
|
|
248
|
+
function workflowCommandName(name) {
|
|
249
|
+
return (AGENTS[name] || SKILLS[name]) ? `${name}-workflow` : name;
|
|
250
|
+
}
|
|
251
|
+
|
|
248
252
|
const PRIMARY_MEMORY_DIR = '.mobile-ai-agents';
|
|
249
253
|
const LEGACY_MEMORY_DIR = '.mobile-agency';
|
|
250
254
|
const MEMORY_DIR = fs.existsSync(path.join(process.cwd(), LEGACY_MEMORY_DIR)) &&
|
|
@@ -881,9 +885,10 @@ async function installForClaude(platforms) {
|
|
|
881
885
|
await Promise.all(ALL_WORKFLOWS.map(async (name) => {
|
|
882
886
|
const meta = WORKFLOWS[name];
|
|
883
887
|
if (!meta) return;
|
|
884
|
-
const
|
|
888
|
+
const commandName = workflowCommandName(name);
|
|
889
|
+
const dest = path.join(CLAUDE_COMMANDS_DIR, `${commandName}.md`);
|
|
885
890
|
await downloadFile(meta.file, [dest]);
|
|
886
|
-
ok(name);
|
|
891
|
+
ok(commandName === name ? name : `${name} → ${commandName}`);
|
|
887
892
|
}));
|
|
888
893
|
|
|
889
894
|
console.log('');
|
|
@@ -923,9 +928,10 @@ async function installForCursor(platforms) {
|
|
|
923
928
|
await Promise.all(ALL_WORKFLOWS.map(async (name) => {
|
|
924
929
|
const meta = WORKFLOWS[name];
|
|
925
930
|
if (!meta) return;
|
|
926
|
-
const
|
|
931
|
+
const commandName = workflowCommandName(name);
|
|
932
|
+
const dest = path.join(rulesDir, `${commandName}.mdc`);
|
|
927
933
|
await downloadFile(meta.file, [dest]);
|
|
928
|
-
ok(name);
|
|
934
|
+
ok(commandName === name ? name : `${name} → ${commandName}`);
|
|
929
935
|
}));
|
|
930
936
|
|
|
931
937
|
console.log('');
|
|
@@ -1181,10 +1187,11 @@ async function cmdAdd(args) {
|
|
|
1181
1187
|
process.exit(1);
|
|
1182
1188
|
}
|
|
1183
1189
|
ensureDir(CLAUDE_COMMANDS_DIR);
|
|
1184
|
-
const
|
|
1190
|
+
const commandName = workflowCommandName(name);
|
|
1191
|
+
const dest = path.join(CLAUDE_COMMANDS_DIR, `${commandName}.md`);
|
|
1185
1192
|
log(`Fetching ${bold(name)} workflow...`);
|
|
1186
1193
|
await downloadFile(meta.file, [dest]);
|
|
1187
|
-
ok(`${
|
|
1194
|
+
ok(`${commandName} → ${dim(dest)}`);
|
|
1188
1195
|
} else {
|
|
1189
1196
|
err(`Unknown type: ${type}. Use 'agent', 'skill', or 'workflow'.`);
|
|
1190
1197
|
process.exit(1);
|
package/package.json
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
|
|
11
11
|
Use Mobile MCP to run AI-assisted QA on a real device, emulator, or simulator. This skill turns a feature flow into a repeatable device test plan using screenshots, accessibility snapshots, element inspection, taps, typing, swipes, app install, app launch, and device orientation checks.
|
|
12
12
|
|
|
13
|
-
Mobile MCP is best used after implementation, during APPFORGE Stage 7 Full QA, or before store submission.
|
|
13
|
+
Mobile MCP is best used after implementation, during APPFORGE Stage 7 Full QA, after `/mobile-app-design` reskins, or before store submission.
|
|
14
14
|
|
|
15
15
|
---
|
|
16
16
|
|
|
@@ -61,6 +61,30 @@ EDGE_CASES:
|
|
|
61
61
|
<offline, invalid input, rotation, restart, permissions, api errors>
|
|
62
62
|
```
|
|
63
63
|
|
|
64
|
+
### Reskin QA Input
|
|
65
|
+
|
|
66
|
+
Use this format when verifying a `/mobile-app-design` redesign or reskin:
|
|
67
|
+
|
|
68
|
+
```text
|
|
69
|
+
COMMAND: /mobile-mcp-qa
|
|
70
|
+
MODE: RESKIN_QA
|
|
71
|
+
PLATFORM: <Android | iOS | Flutter | React Native>
|
|
72
|
+
APP_ID: <Android package name or iOS bundle id>
|
|
73
|
+
BUILD_PATH: <optional apk/ipa/app path>
|
|
74
|
+
DEVICE: <optional target device name>
|
|
75
|
+
SUPPORTED_THEMES: <light | dark | light,dark | custom themes>
|
|
76
|
+
SCREEN_INVENTORY:
|
|
77
|
+
| Screen/State | Decision | Expected Change | Route/Tab |
|
|
78
|
+
|---|---|---|---|
|
|
79
|
+
| <screen + state> | REDESIGN | <layout/hierarchy/state change> | <route/tab> |
|
|
80
|
+
BASELINE_EVIDENCE:
|
|
81
|
+
<before screenshots, screenshot paths, or "capture before from current build">
|
|
82
|
+
EXPECTED_REDESIGN:
|
|
83
|
+
<approved reskin plan, navigation changes, theme changes, and state coverage>
|
|
84
|
+
REGRESSION_RISKS:
|
|
85
|
+
<tab reorder, renamed copy, deep links, dark mode, keyboard, safe area, analytics, etc.>
|
|
86
|
+
```
|
|
87
|
+
|
|
64
88
|
---
|
|
65
89
|
|
|
66
90
|
## Skill Prompt
|
|
@@ -68,6 +92,8 @@ EDGE_CASES:
|
|
|
68
92
|
```text
|
|
69
93
|
Run a Mobile MCP QA pass for the provided mobile app flow.
|
|
70
94
|
|
|
95
|
+
If MODE is RESKIN_QA, run the Reskin QA flow instead of ordinary flow QA.
|
|
96
|
+
|
|
71
97
|
STEP 1 — VERIFY SETUP
|
|
72
98
|
- List available devices.
|
|
73
99
|
- Select the requested device, or choose the first available emulator/simulator.
|
|
@@ -101,7 +127,79 @@ Check:
|
|
|
101
127
|
- App restart preserves required state
|
|
102
128
|
- Offline/API error behavior is user-safe
|
|
103
129
|
|
|
104
|
-
|
|
130
|
+
RESKIN QA FLOW
|
|
131
|
+
Use this flow when MODE is RESKIN_QA or when the user provides a `/mobile-app-design` screen inventory.
|
|
132
|
+
|
|
133
|
+
STEP R1 — VERIFY RESKIN INPUTS
|
|
134
|
+
- Read SCREEN_INVENTORY and EXPECTED_REDESIGN.
|
|
135
|
+
- Preserve each inventory decision exactly: REDESIGN, RESTYLE, or LEAVE.
|
|
136
|
+
- Confirm SUPPORTED_THEMES. If the app supports light and dark, both are required.
|
|
137
|
+
- If baseline screenshots are missing and the current build is already the after build, mark before evidence as missing instead of inventing it.
|
|
138
|
+
|
|
139
|
+
STEP R2 — CAPTURE OR REGISTER BASELINE
|
|
140
|
+
- For each inventory row, attach the provided before screenshot or capture a before screenshot if the baseline build is available.
|
|
141
|
+
- Name evidence predictably: before-<theme>-<screen>-<state>.
|
|
142
|
+
- A screen/state without before evidence is still testable after the edit, but its before/after comparison status is UNVERIFIED.
|
|
143
|
+
|
|
144
|
+
STEP R3 — CAPTURE AFTER STATE
|
|
145
|
+
- Launch the after build.
|
|
146
|
+
- Visit every screen/state in SCREEN_INVENTORY.
|
|
147
|
+
- Capture after screenshots for every supported theme.
|
|
148
|
+
- For loading, empty, error, offline, permission-denied, and success states, use controlled test data, network toggles, permissions, or documented setup steps when available.
|
|
149
|
+
- Name evidence predictably: after-<theme>-<screen>-<state>.
|
|
150
|
+
|
|
151
|
+
STEP R4 — VERIFY STRUCTURAL CHANGE
|
|
152
|
+
For each inventory row:
|
|
153
|
+
- REDESIGN must show layout, hierarchy, grouping, density, information-priority, or state-layout changes. Token-only changes are FAIL.
|
|
154
|
+
- RESTYLE may show token/component updates only, but must have a justification.
|
|
155
|
+
- LEAVE should remain intentionally unchanged except for unavoidable global shell or token updates.
|
|
156
|
+
- Mark missing before or after screenshots as UNVERIFIED.
|
|
157
|
+
|
|
158
|
+
STEP R5 — VERIFY REGRESSIONS
|
|
159
|
+
Check:
|
|
160
|
+
- clipped or overlapping text
|
|
161
|
+
- safe areas, status bar, navigation bar, and notches
|
|
162
|
+
- keyboard avoidance
|
|
163
|
+
- minimum 44pt/48dp touch targets
|
|
164
|
+
- light/dark contrast and invisible text risk
|
|
165
|
+
- tab order, selected state, route names, deep links, and back behavior
|
|
166
|
+
- renamed screen/tab copy across labels, empty states, prompts, and accessibility text
|
|
167
|
+
- loading, empty, error, offline, disabled, permission-denied, and success states
|
|
168
|
+
- orientation when the app supports it
|
|
169
|
+
|
|
170
|
+
STEP R6 — REPORT RESKIN QA
|
|
171
|
+
Return:
|
|
172
|
+
MOBILE MCP RESKIN QA REPORT
|
|
173
|
+
===========================
|
|
174
|
+
Platform:
|
|
175
|
+
Device:
|
|
176
|
+
App:
|
|
177
|
+
Themes:
|
|
178
|
+
Result: PASS | FAIL | PARTIAL | BLOCKED
|
|
179
|
+
|
|
180
|
+
Screen Evidence:
|
|
181
|
+
| Screen/State | Decision | Theme | Before | After | Result |
|
|
182
|
+
|---|---|---|---|---|---|
|
|
183
|
+
|
|
184
|
+
Structural Verification:
|
|
185
|
+
| Screen/State | Decision | Expected Change | Observed Change | Result |
|
|
186
|
+
|---|---|---|---|---|
|
|
187
|
+
|
|
188
|
+
Regression Checks:
|
|
189
|
+
| Check | Screen/State | Result | Evidence |
|
|
190
|
+
|---|---|---|---|
|
|
191
|
+
|
|
192
|
+
Issues:
|
|
193
|
+
| Severity | Screen/State | Issue | Evidence | Fix |
|
|
194
|
+
|---|---|---|---|---|
|
|
195
|
+
|
|
196
|
+
Evidence For PRD Verification:
|
|
197
|
+
- <compact screenshot list and report summary that can be pasted into /prd-verification>
|
|
198
|
+
|
|
199
|
+
Recommended Next Action:
|
|
200
|
+
<single concrete fix or next test>
|
|
201
|
+
|
|
202
|
+
STEP 5 — REPORT ORDINARY FLOW QA
|
|
105
203
|
Return:
|
|
106
204
|
MOBILE MCP QA REPORT
|
|
107
205
|
====================
|
|
@@ -129,6 +227,81 @@ Recommended Next Action:
|
|
|
129
227
|
<single concrete fix or next test>
|
|
130
228
|
```
|
|
131
229
|
|
|
230
|
+
### Reskin QA Example
|
|
231
|
+
|
|
232
|
+
#### Input
|
|
233
|
+
|
|
234
|
+
```text
|
|
235
|
+
COMMAND: /mobile-mcp-qa
|
|
236
|
+
MODE: RESKIN_QA
|
|
237
|
+
PLATFORM: React Native
|
|
238
|
+
APP_ID: com.example.habits
|
|
239
|
+
SUPPORTED_THEMES: light,dark
|
|
240
|
+
SCREEN_INVENTORY:
|
|
241
|
+
| Screen/State | Decision | Expected Change | Route/Tab |
|
|
242
|
+
|---|---|---|---|
|
|
243
|
+
| Today/populated | REDESIGN | grouped morning/afternoon/evening sections | Today |
|
|
244
|
+
| Today/empty | REDESIGN | coaching empty state with primary action | Today |
|
|
245
|
+
| Insights/populated | REDESIGN | KPI strip + weekly chart + compact history | Insights |
|
|
246
|
+
| Settings/default | RESTYLE | tokenized surfaces and clearer typography | Settings |
|
|
247
|
+
BASELINE_EVIDENCE:
|
|
248
|
+
before-light-today-populated.png, before-dark-today-populated.png,
|
|
249
|
+
before-light-insights-populated.png, before-dark-insights-populated.png
|
|
250
|
+
EXPECTED_REDESIGN:
|
|
251
|
+
Tabs reordered to Today, Insights, Coach, Settings. Today and Insights require structural layout changes. Settings is restyle only.
|
|
252
|
+
REGRESSION_RISKS:
|
|
253
|
+
dark mode contrast, renamed Strategy copy, tab selected state, safe areas
|
|
254
|
+
```
|
|
255
|
+
|
|
256
|
+
#### Output
|
|
257
|
+
|
|
258
|
+
```text
|
|
259
|
+
MOBILE MCP RESKIN QA REPORT
|
|
260
|
+
===========================
|
|
261
|
+
Platform: React Native
|
|
262
|
+
Device: iPhone 15 Simulator
|
|
263
|
+
App: com.example.habits
|
|
264
|
+
Themes: light, dark
|
|
265
|
+
Result: FAIL
|
|
266
|
+
|
|
267
|
+
Screen Evidence:
|
|
268
|
+
| Screen/State | Decision | Theme | Before | After | Result |
|
|
269
|
+
|---|---|---|---|---|---|
|
|
270
|
+
| Today/populated | REDESIGN | light | before-light-today | after-light-today | PASS |
|
|
271
|
+
| Today/populated | REDESIGN | dark | before-dark-today | after-dark-today | PASS |
|
|
272
|
+
| Insights/populated | REDESIGN | light | before-light-insights | after-light-insights | PASS |
|
|
273
|
+
| Insights/populated | REDESIGN | dark | before-dark-insights | after-dark-insights | FAIL |
|
|
274
|
+
| Settings/default | RESTYLE | dark | missing | after-dark-settings | UNVERIFIED |
|
|
275
|
+
|
|
276
|
+
Structural Verification:
|
|
277
|
+
| Screen/State | Decision | Expected Change | Observed Change | Result |
|
|
278
|
+
|---|---|---|---|---|
|
|
279
|
+
| Today/populated | REDESIGN | grouped sections | sections visible | PASS |
|
|
280
|
+
| Insights/populated | REDESIGN | KPI + chart + history | chart clipped in dark | FAIL |
|
|
281
|
+
| Settings/default | RESTYLE | token updates | no before evidence | UNVERIFIED |
|
|
282
|
+
|
|
283
|
+
Regression Checks:
|
|
284
|
+
| Check | Screen/State | Result | Evidence |
|
|
285
|
+
|---|---|---|---|
|
|
286
|
+
| Dark contrast | Insights | FAIL | chart label unreadable |
|
|
287
|
+
| Tab selected state | All tabs | PASS | selected indicator moves |
|
|
288
|
+
| Renamed copy | Today | PASS | no stale Strategy copy |
|
|
289
|
+
|
|
290
|
+
Issues:
|
|
291
|
+
| Severity | Screen/State | Issue | Evidence | Fix |
|
|
292
|
+
|---|---|---|---|---|
|
|
293
|
+
| WARNING | Insights/dark | Chart label has low contrast | after-dark-insights | Use onSurface token |
|
|
294
|
+
| INFO | Settings/default | Missing baseline | after-dark-settings | Capture before image next run |
|
|
295
|
+
|
|
296
|
+
Evidence For PRD Verification:
|
|
297
|
+
- Today populated: light/dark before-after PASS.
|
|
298
|
+
- Insights dark: FAIL due chart contrast.
|
|
299
|
+
- Settings: UNVERIFIED because baseline missing.
|
|
300
|
+
|
|
301
|
+
Recommended Next Action:
|
|
302
|
+
Fix Insights dark chart label contrast and rerun Reskin QA for Insights and Settings.
|
|
303
|
+
```
|
|
304
|
+
|
|
132
305
|
---
|
|
133
306
|
|
|
134
307
|
## Example
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
# Workflow — Mobile MCP QA
|
|
2
2
|
|
|
3
3
|
**Type:** Device automation QA
|
|
4
|
+
**Slash Command:** `/mobile-mcp-qa-workflow` when installed alongside the `/mobile-mcp-qa` skill
|
|
4
5
|
**Agents Used:** APPFORGE, AXIOM / SWIFT / DART / BRIDGE, CRASHER, PERF, Mobile Memory
|
|
5
6
|
**Skills Used:** /mobile-mcp-qa, /accessibility-audit, /perf-audit, /mobile-memory-save
|
|
6
7
|
|