mobile-debug-mcp 0.30.1 → 0.31.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/README.md +50 -5
- package/dist/interact/index.js +546 -133
- package/dist/manage/ios.js +1 -1
- package/dist/server/tool-definitions.js +13 -9
- package/dist/server/tool-handlers.js +4 -4
- package/dist/server-core.js +1 -1
- package/dist/system/index.js +485 -48
- package/dist/system/ios.js +15 -7
- package/dist/utils/android/utils.js +4 -4
- package/dist/utils/cli/idb/check-idb.js +10 -3
- package/dist/utils/cli/idb/idb-helper.js +47 -13
- package/dist/utils/ios/utils.js +5 -9
- package/docs/CHANGELOG.md +6 -0
- package/docs/ROADMAP.md +88 -212
- package/docs/specs/baseline-spec-v0.md +1 -1
- package/docs/specs-deltas/015-adjustable-control-support.md +541 -0
- package/docs/specs-deltas/016-environment-tools.md +533 -0
- package/docs/tools/TOOLS.md +2 -0
- package/docs/tools/manage.md +4 -2
- package/docs/tools/system.md +9 -2
- package/package.json +1 -1
- package/skills/spec-review/SKILL.md +52 -0
- package/skills/spec-review/references/spec-review-checklist.md +13 -0
- package/skills/spec-review/references/spec-review-template.md +28 -0
- package/src/interact/index.ts +581 -138
- package/src/manage/ios.ts +1 -1
- package/src/server/tool-definitions.ts +13 -9
- package/src/server/tool-handlers.ts +4 -4
- package/src/server-core.ts +1 -1
- package/src/system/index.ts +572 -50
- package/src/system/ios.ts +14 -7
- package/src/types.ts +2 -0
- package/src/utils/android/utils.ts +3 -3
- package/src/utils/cli/idb/check-idb.ts +11 -2
- package/src/utils/cli/idb/idb-helper.ts +49 -12
- package/src/utils/ios/utils.ts +4 -8
- package/test/unit/interact/adjust_control.test.ts +586 -33
- package/test/unit/interact/tap_element.test.ts +1 -1
- package/test/unit/server/contract.test.ts +4 -0
- package/test/unit/system/get_system_status.test.ts +3 -0
- package/test/unit/system/system_status.test.ts +40 -0
- package/test/unit/utils/idb_health.test.ts +74 -0
- package/skills/rfc-review/SKILL.md +0 -52
- package/skills/rfc-review/references/rfc-review-checklist.md +0 -12
- package/skills/rfc-review/references/rfc-review-template.md +0 -28
- /package/docs/{rfcs → specs-deltas}/001-state-verification.md +0 -0
- /package/docs/{rfcs → specs-deltas}/002-richer-element-identity +0 -0
- /package/docs/{rfcs → specs-deltas}/003-wait-and-synchronization-reliability.md +0 -0
- /package/docs/{rfcs → specs-deltas}/004-action-verification-routing.md +0 -0
- /package/docs/{rfcs → specs-deltas}/005-unified-action-execution-and-verification-model.md +0 -0
- /package/docs/{rfcs → specs-deltas}/006-runtime-action-instrumentation-and-binding-layer.md +0 -0
- /package/docs/{rfcs → specs-deltas}/007-actionability-resolution-and-executable-target-selection.md +0 -0
- /package/docs/{rfcs → specs-deltas}/008-adjustable-control-support-and-semantic-value-manipulation.md +0 -0
- /package/docs/{rfcs → specs-deltas}/009-semantic-control-modeling-for-custom-and-composite-controls.md +0 -0
- /package/docs/{rfcs → specs-deltas}/010-verification-stabilization-and-temporal-convergence.md +0 -0
- /package/docs/{rfcs → specs-deltas}/011-recovery-and-replanning-for-failed-or-ambiguous-interaction-flows.md +0 -0
- /package/docs/{rfcs → specs-deltas}/011.1-recovery-contract-types-and-runtime-wiring-spec.md +0 -0
- /package/docs/{rfcs → specs-deltas}/012-action-trace-and-xecution-observability.md +0 -0
- /package/docs/{rfcs → specs-deltas}/013-wait-and-synchronization-reliability.md +0 -0
- /package/docs/{rfcs → specs-deltas}/014-actionability-resolution.md +0 -0
package/dist/system/ios.js
CHANGED
|
@@ -11,14 +11,22 @@ export async function checkIOS() {
|
|
|
11
11
|
iosAvailable = true;
|
|
12
12
|
try {
|
|
13
13
|
const simOut = execSync(`${xcrun} simctl list devices booted --json`, { encoding: 'utf8', timeout: 1500, stdio: ['ignore', 'pipe', 'ignore'] });
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
const
|
|
18
|
-
|
|
19
|
-
|
|
14
|
+
try {
|
|
15
|
+
const data = JSON.parse(simOut);
|
|
16
|
+
let count = 0;
|
|
17
|
+
for (const k in data.devices) {
|
|
18
|
+
const arr = data.devices[k];
|
|
19
|
+
if (Array.isArray(arr))
|
|
20
|
+
count += arr.filter((d) => (d.state || '').toLowerCase() === 'booted').length;
|
|
21
|
+
}
|
|
22
|
+
iosDevices = count;
|
|
23
|
+
}
|
|
24
|
+
catch {
|
|
25
|
+
// Some xcrun builds include extra text around the JSON response.
|
|
26
|
+
// Fall back to counting explicit booted state markers so readiness remains deterministic.
|
|
27
|
+
const bootedMatches = (simOut.match(/"state"\s*:\s*"Booted"/gi) || []).length;
|
|
28
|
+
iosDevices = bootedMatches;
|
|
20
29
|
}
|
|
21
|
-
iosDevices = count;
|
|
22
30
|
if (iosDevices === 0)
|
|
23
31
|
issues.push('No iOS simulators/devices booted');
|
|
24
32
|
}
|
|
@@ -25,9 +25,12 @@ function findInPath(cmd) {
|
|
|
25
25
|
return null;
|
|
26
26
|
}
|
|
27
27
|
export function resolveAdbCmd() {
|
|
28
|
-
// Priority: explicit env ADB_PATH ->
|
|
28
|
+
// Priority: explicit env ADB_PATH -> PATH -> known SDK locations -> fallback to 'adb'
|
|
29
29
|
if (process.env.ADB_PATH && process.env.ADB_PATH.trim())
|
|
30
30
|
return process.env.ADB_PATH;
|
|
31
|
+
const found = findInPath('adb');
|
|
32
|
+
if (found)
|
|
33
|
+
return found;
|
|
31
34
|
const sdkRoot = process.env.ANDROID_SDK_ROOT || process.env.ANDROID_HOME;
|
|
32
35
|
if (sdkRoot) {
|
|
33
36
|
const candidate = path.join(sdkRoot, 'platform-tools', process.platform === 'win32' ? 'adb.exe' : 'adb');
|
|
@@ -38,9 +41,6 @@ export function resolveAdbCmd() {
|
|
|
38
41
|
const homeSdk = path.join(process.env.HOME || '', 'Library', 'Android', 'sdk', 'platform-tools', process.platform === 'win32' ? 'adb.exe' : 'adb');
|
|
39
42
|
if (existsSync(homeSdk))
|
|
40
43
|
return homeSdk;
|
|
41
|
-
const found = findInPath('adb');
|
|
42
|
-
if (found)
|
|
43
|
-
return found;
|
|
44
44
|
return 'adb';
|
|
45
45
|
}
|
|
46
46
|
export function getAdbCmd() { return resolveAdbCmd(); }
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { execSync, spawnSync } from 'child_process';
|
|
3
3
|
import { main as installMain } from './install-idb.js';
|
|
4
|
-
import { getIdbCmd, isIDBInstalled } from './idb-helper.js';
|
|
4
|
+
import { getIdbCmd, getIdbPackageVersion, isIDBInstalled } from './idb-helper.js';
|
|
5
5
|
function which(cmd) {
|
|
6
6
|
try {
|
|
7
7
|
const r = spawnSync('command', ['-v', cmd], { stdio: ['ignore', 'pipe', 'ignore'] });
|
|
@@ -48,11 +48,18 @@ try {
|
|
|
48
48
|
const idb = process.env.IDB_PATH || getIdbCmd();
|
|
49
49
|
print('idb:', idb);
|
|
50
50
|
if (idb && isIDBInstalled()) {
|
|
51
|
+
const version = getIdbPackageVersion();
|
|
52
|
+
if (version)
|
|
53
|
+
print('fb-idb version:', version);
|
|
51
54
|
try {
|
|
52
|
-
|
|
55
|
+
const output = execSync(`${idb} list-targets --json`, { stdio: ['ignore', 'pipe', 'pipe'], timeout: 5000 }).toString().trim();
|
|
56
|
+
print('idb list-targets --json: ok');
|
|
57
|
+
if (output)
|
|
58
|
+
print(output);
|
|
53
59
|
}
|
|
54
60
|
catch (e) {
|
|
55
|
-
print('idb --
|
|
61
|
+
print('idb list-targets --json: (failed)', e instanceof Error ? e.message : String(e));
|
|
62
|
+
process.exit(2);
|
|
56
63
|
}
|
|
57
64
|
const companion = which('idb_companion');
|
|
58
65
|
print('which idb_companion:', companion);
|
|
@@ -71,21 +71,55 @@ export function getIdbCmd() {
|
|
|
71
71
|
}
|
|
72
72
|
return null;
|
|
73
73
|
}
|
|
74
|
-
export function
|
|
75
|
-
const
|
|
74
|
+
export function getIdbPackageVersion() {
|
|
75
|
+
const runners = ['python3', 'python'];
|
|
76
|
+
for (const runner of runners) {
|
|
77
|
+
try {
|
|
78
|
+
const result = spawnSync(runner, ['-m', 'pip', 'show', 'fb-idb'], {
|
|
79
|
+
encoding: 'utf8',
|
|
80
|
+
stdio: ['ignore', 'pipe', 'pipe']
|
|
81
|
+
});
|
|
82
|
+
if (result.status !== 0)
|
|
83
|
+
continue;
|
|
84
|
+
const output = `${result.stdout || ''}\n${result.stderr || ''}`;
|
|
85
|
+
const match = output.match(/^Version:\s*(.+)$/mi);
|
|
86
|
+
if (match?.[1])
|
|
87
|
+
return match[1].trim();
|
|
88
|
+
}
|
|
89
|
+
catch {
|
|
90
|
+
continue;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
return null;
|
|
94
|
+
}
|
|
95
|
+
export function probeIdb(cmd = getIdbCmd()) {
|
|
76
96
|
if (!cmd)
|
|
77
|
-
return false;
|
|
97
|
+
return { ok: false, raw: null, parsedVersion: null };
|
|
78
98
|
try {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
99
|
+
const result = spawnSync(cmd, ['list-targets', '--json'], {
|
|
100
|
+
encoding: 'utf8',
|
|
101
|
+
stdio: ['ignore', 'pipe', 'pipe'],
|
|
102
|
+
timeout: 5000
|
|
103
|
+
});
|
|
104
|
+
if (result.status !== 0) {
|
|
105
|
+
return {
|
|
106
|
+
ok: false,
|
|
107
|
+
raw: `${result.stdout || ''}${result.stderr || ''}`.trim() || null,
|
|
108
|
+
parsedVersion: null
|
|
109
|
+
};
|
|
110
|
+
}
|
|
111
|
+
const version = getIdbPackageVersion();
|
|
112
|
+
const raw = version ? `fb-idb ${version}` : `${result.stdout || ''}${result.stderr || ''}`.trim() || null;
|
|
113
|
+
return {
|
|
114
|
+
ok: true,
|
|
115
|
+
raw,
|
|
116
|
+
parsedVersion: version
|
|
117
|
+
};
|
|
83
118
|
}
|
|
84
|
-
catch {
|
|
85
|
-
|
|
86
|
-
execSync(`${cmd} list-targets --json`, { stdio: ['ignore', 'pipe', 'ignore'], timeout: 2000 });
|
|
87
|
-
return true;
|
|
119
|
+
catch {
|
|
120
|
+
return { ok: false, raw: null, parsedVersion: null };
|
|
88
121
|
}
|
|
89
|
-
|
|
90
|
-
|
|
122
|
+
}
|
|
123
|
+
export function isIDBInstalled() {
|
|
124
|
+
return probeIdb().ok;
|
|
91
125
|
}
|
package/dist/utils/ios/utils.js
CHANGED
|
@@ -71,19 +71,15 @@ export function getIdbCmd() {
|
|
|
71
71
|
}
|
|
72
72
|
export async function isIDBInstalled() {
|
|
73
73
|
const cmd = getIdbCmd();
|
|
74
|
+
if (!cmd)
|
|
75
|
+
return false;
|
|
74
76
|
try {
|
|
75
|
-
execSync(
|
|
77
|
+
execSync(`${cmd} list-targets --json`, { stdio: ['ignore', 'pipe', 'pipe'], timeout: 5000 });
|
|
76
78
|
return true;
|
|
77
79
|
}
|
|
78
80
|
catch (e) {
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
return true;
|
|
82
|
-
}
|
|
83
|
-
catch (e2) {
|
|
84
|
-
console.debug(`[isIDBInstalled] idb presence check failed for '${cmd}': ${e instanceof Error ? e.message : String(e2)}`);
|
|
85
|
-
return false;
|
|
86
|
-
}
|
|
81
|
+
console.debug(`[isIDBInstalled] idb probe failed for '${cmd}': ${e instanceof Error ? e.message : String(e)}`);
|
|
82
|
+
return false;
|
|
87
83
|
}
|
|
88
84
|
}
|
|
89
85
|
// Validate bundle ID to prevent any potential injection or invalid characters
|
package/docs/CHANGELOG.md
CHANGED
|
@@ -2,6 +2,12 @@
|
|
|
2
2
|
|
|
3
3
|
All notable changes to the **Mobile Debug MCP** project will be documented in this file.
|
|
4
4
|
|
|
5
|
+
## [0.31.0]
|
|
6
|
+
- Added tool discovery/automation
|
|
7
|
+
|
|
8
|
+
## [0.30.2]
|
|
9
|
+
- improved slider interaction
|
|
10
|
+
|
|
5
11
|
## [0.30.1]
|
|
6
12
|
- Synced the server-reported version in `src/server-core.ts` with `package.json` so contract checks pass.
|
|
7
13
|
- Completed the RFC 013 wait/synchronization implementation, including scoped waits and freshness metadata.
|
package/docs/ROADMAP.md
CHANGED
|
@@ -1,124 +1,26 @@
|
|
|
1
1
|
# Mobile Debug MCP Roadmap
|
|
2
2
|
|
|
3
|
-
##
|
|
4
|
-
|
|
5
|
-
Ordered by:
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
1. Impact on agent reliability
|
|
9
|
-
2. Reduction in retries / brittleness
|
|
10
|
-
3. Breadth of app coverage improved
|
|
11
|
-
4. Implementation complexity vs payoff
|
|
12
|
-
|
|
13
|
-
## Capability Status Definitions
|
|
14
|
-
|
|
15
|
-
- **Completed**
|
|
16
|
-
Capability implemented and considered part of the baseline platform.
|
|
17
|
-
|
|
18
|
-
- **Spec Ready**
|
|
19
|
-
Capability design or RFC is mature and implementation-ready, but not yet delivered.
|
|
20
|
-
|
|
21
|
-
- **Planned**
|
|
22
|
-
Capability is prioritized on the roadmap, but detailed specification and/or implementation work remains ahead.
|
|
23
|
-
|
|
24
|
-
## Program-Level Success Metrics
|
|
25
|
-
Track roadmap impact across releases using:
|
|
26
|
-
|
|
27
|
-
- Retry reduction rate (% fewer action retries per task)
|
|
28
|
-
- Element match success rate (% successful element targeting)
|
|
29
|
-
- Verification success rate (% expect_* checks passing first attempt)
|
|
30
|
-
- Wait success rate for asynchronous UI flows
|
|
31
|
-
- Custom control interaction success rate
|
|
32
|
-
- Gesture success rate
|
|
33
|
-
- Mean time to root cause during debugging
|
|
34
|
-
- Overall agent task completion rate
|
|
35
|
-
- Reduced sequencing errors in multi-step interaction flows
|
|
36
|
-
|
|
37
|
-
Primary KPI:
|
|
38
|
-
Higher task success with fewer retries.
|
|
39
|
-
|
|
40
|
-
---
|
|
41
|
-
|
|
42
|
-
# Roadmap Status Overview
|
|
43
|
-
|
|
44
|
-
## Completed Capabilities
|
|
45
|
-
|
|
46
|
-
- Stronger State Verification — Complete (Foundational verification layer shipped)
|
|
47
|
-
- Richer Element Identity — Complete (Identity and selector confidence foundations shipped)
|
|
48
|
-
- Better Compose / Custom Control Semantics — Complete (Semantic role enrichment and custom-adjustable inference shipped)
|
|
49
|
-
- Verification Stabilization and Temporal Convergence — Complete (Temporal verification and convergence logic shipped)
|
|
50
|
-
- Action Trace and Execution Observability — Complete (Structured execution trace model shipped)
|
|
51
|
-
- Wait and Synchronization Reliability — Complete (RFC 013 folded into the main spec and shipped behavior verified on emulator)
|
|
52
|
-
|
|
53
|
-
## Current Focus
|
|
3
|
+
## Done
|
|
54
4
|
|
|
5
|
+
- Stronger State Verification
|
|
6
|
+
- Richer Element Identity
|
|
7
|
+
- Better Compose / Custom Control Semantics
|
|
8
|
+
- Verification Stabilization and Temporal Convergence
|
|
9
|
+
- Action Trace and Execution Observability
|
|
10
|
+
- Wait and Synchronization Reliability
|
|
55
11
|
- Actionability Resolution
|
|
56
|
-
-
|
|
12
|
+
- Environment Auto-Configuration and Toolchain Discovery
|
|
13
|
+
- Adjustable Control Support
|
|
57
14
|
|
|
58
|
-
##
|
|
15
|
+
## Todo
|
|
59
16
|
|
|
60
17
|
- Adjustable Control Precision Hardening
|
|
61
|
-
- Environment Auto-Configuration and Toolchain Discovery
|
|
62
|
-
- Adjustable Control Support
|
|
63
18
|
- Signal-Oriented Diagnostic Filtering
|
|
64
19
|
- Long Press Gesture
|
|
65
|
-
|
|
66
|
-
## Rationale
|
|
67
|
-
Reduce onboarding friction and improve developer experience by minimizing manual setup dependencies.
|
|
68
|
-
|
|
69
|
-
**Status:** Planned
|
|
70
|
-
|
|
71
|
-
Addresses friction around:
|
|
72
|
-
- manual idb installation
|
|
73
|
-
- manual adb path configuration
|
|
74
|
-
- manual xcrun path configuration
|
|
75
|
-
- environment drift across machines
|
|
76
|
-
- setup failures blocking first use
|
|
77
|
-
|
|
78
|
-
- Automatic discovery of adb
|
|
79
|
-
- Automatic discovery of xcrun
|
|
80
|
-
- idb detection and guided bootstrap support
|
|
81
|
-
- Startup toolchain validation
|
|
82
|
-
- Environment health diagnostics / doctor-style checks
|
|
83
|
-
- Minimal-manual-configuration defaults
|
|
84
|
-
- Runtime device/emulator health signals (crash detection, process lifecycle awareness)
|
|
85
|
-
- App stability monitoring during active sessions
|
|
86
|
-
|
|
87
|
-
## Expected Impact
|
|
88
|
-
High.
|
|
89
|
-
|
|
90
|
-
## Exit Criteria
|
|
91
|
-
- adb and xcrun auto-discovery implemented
|
|
92
|
-
- Missing dependencies surfaced with guided remediation
|
|
93
|
-
- Startup environment validation available
|
|
94
|
-
- Manual path configuration eliminated or minimized for standard setups
|
|
95
|
-
- First-run setup validated on representative developer environments
|
|
96
|
-
|
|
97
|
-
## Success Metrics
|
|
98
|
-
- Reduced setup friction during onboarding
|
|
99
|
-
- Lower environment configuration failures
|
|
100
|
-
- Faster time-to-first-successful-session
|
|
101
|
-
- Reduced support/debugging caused by local setup issues
|
|
102
|
-
- Reduced unknown-failure sessions caused by app or emulator instability
|
|
103
|
-
|
|
104
|
-
## Dependencies
|
|
105
|
-
Depends on:
|
|
106
|
-
- Stronger State Verification
|
|
107
|
-
- Richer Element Identity
|
|
108
|
-
|
|
109
|
-
Strengthens:
|
|
110
|
-
- Actionability Resolution
|
|
111
|
-
- Broader user adoption readiness
|
|
112
|
-
|
|
113
|
-
---
|
|
114
|
-
|
|
115
|
-
## Later Horizon
|
|
116
|
-
|
|
20
|
+
- Runtime Debugger Introspection
|
|
117
21
|
- Pinch to Zoom
|
|
118
22
|
- Advanced Trace Correlation and Analysis
|
|
119
23
|
|
|
120
|
-
---
|
|
121
|
-
|
|
122
24
|
# Stronger State Verification
|
|
123
25
|
|
|
124
26
|
## Rationale
|
|
@@ -303,7 +205,7 @@ Strengthens:
|
|
|
303
205
|
## Rationale
|
|
304
206
|
Reduces failures caused by interacting with discoverable but non-actionable UI nodes.
|
|
305
207
|
|
|
306
|
-
**Status:**
|
|
208
|
+
**Status:** Completed
|
|
307
209
|
|
|
308
210
|
Addresses cases where:
|
|
309
211
|
- visible text is not the true click target
|
|
@@ -349,7 +251,7 @@ Blocks or strengthens:
|
|
|
349
251
|
## Rationale
|
|
350
252
|
High leverage improvement for sliders and parameterized controls.
|
|
351
253
|
|
|
352
|
-
**Status:**
|
|
254
|
+
**Status:** Completed
|
|
353
255
|
|
|
354
256
|
Addresses friction around:
|
|
355
257
|
- coordinate-calibrated slider interaction
|
|
@@ -577,6 +479,81 @@ Depends on:
|
|
|
577
479
|
|
|
578
480
|
---
|
|
579
481
|
|
|
482
|
+
# Runtime Debugger Introspection
|
|
483
|
+
|
|
484
|
+
## Rationale
|
|
485
|
+
Enables agents to move from symptom observation to runtime causal analysis by inspecting paused application state during debugging sessions.
|
|
486
|
+
|
|
487
|
+
**Status:** Planned
|
|
488
|
+
|
|
489
|
+
Addresses limitations where agents:
|
|
490
|
+
- observe UI failures but cannot determine runtime cause
|
|
491
|
+
- cannot inspect ViewModel or controller state
|
|
492
|
+
- lack access to local variables and stack context
|
|
493
|
+
- cannot reason about async execution state
|
|
494
|
+
|
|
495
|
+
## Scope
|
|
496
|
+
Debugger-assisted runtime inspection primitives:
|
|
497
|
+
|
|
498
|
+
```javascript
|
|
499
|
+
debugger.pause_state()
|
|
500
|
+
debugger.stack_trace()
|
|
501
|
+
debugger.locals()
|
|
502
|
+
debugger.inspect_object(object_id)
|
|
503
|
+
debugger.evaluate(expression)
|
|
504
|
+
debugger.threads()
|
|
505
|
+
```
|
|
506
|
+
|
|
507
|
+
Includes:
|
|
508
|
+
- stack frame inspection
|
|
509
|
+
- local variable inspection
|
|
510
|
+
- object graph traversal
|
|
511
|
+
- thread inspection
|
|
512
|
+
- expression evaluation
|
|
513
|
+
- platform abstraction over JDWP / LLDB
|
|
514
|
+
- bounded object expansion and summarization
|
|
515
|
+
- coroutine/task inspection support
|
|
516
|
+
|
|
517
|
+
Future exploration:
|
|
518
|
+
- controlled stepping support
|
|
519
|
+
- debugger-assisted recovery workflows
|
|
520
|
+
|
|
521
|
+
## Expected Impact
|
|
522
|
+
Very high.
|
|
523
|
+
|
|
524
|
+
Transforms debugging from:
|
|
525
|
+
- surface-level symptom detection
|
|
526
|
+
|
|
527
|
+
toward:
|
|
528
|
+
- root-cause-oriented runtime reasoning
|
|
529
|
+
|
|
530
|
+
## Exit Criteria
|
|
531
|
+
- Paused runtime state accessible through MCP
|
|
532
|
+
- Local variable inspection implemented
|
|
533
|
+
- Stack trace inspection implemented
|
|
534
|
+
- Object inspection primitives implemented
|
|
535
|
+
- Runtime inspection validated on representative Android flows
|
|
536
|
+
- Object expansion safeguards implemented
|
|
537
|
+
- Expression evaluation available with safety limits
|
|
538
|
+
|
|
539
|
+
## Success Metrics
|
|
540
|
+
- Lower mean time-to-root-cause
|
|
541
|
+
- Higher causal diagnosis accuracy
|
|
542
|
+
- Reduced debugging iteration loops
|
|
543
|
+
- Faster identification of state-management failures
|
|
544
|
+
- Improved async/concurrency failure diagnosis
|
|
545
|
+
|
|
546
|
+
## Dependencies
|
|
547
|
+
Depends on:
|
|
548
|
+
- Action Trace and Execution Observability
|
|
549
|
+
- Stronger State Verification
|
|
550
|
+
- Wait and Synchronization Reliability
|
|
551
|
+
- Signal-Oriented Diagnostic Filtering
|
|
552
|
+
|
|
553
|
+
Strengthens:
|
|
554
|
+
- Advanced Trace Correlation and Analysis
|
|
555
|
+
- Future autonomous recovery systems
|
|
556
|
+
|
|
580
557
|
# Pinch to Zoom
|
|
581
558
|
|
|
582
559
|
## Rationale
|
|
@@ -658,104 +635,3 @@ Depends on:
|
|
|
658
635
|
- Stronger State Verification
|
|
659
636
|
- Richer Element Identity
|
|
660
637
|
- Wait and Synchronization Reliability
|
|
661
|
-
|
|
662
|
-
---
|
|
663
|
-
|
|
664
|
-
# Roadmap Sequence
|
|
665
|
-
|
|
666
|
-
## Dependency Summary
|
|
667
|
-
|
|
668
|
-
Foundation
|
|
669
|
-
- Stronger State Verification
|
|
670
|
-
- Richer Element Identity
|
|
671
|
-
|
|
672
|
-
Synchronization & Actionability
|
|
673
|
-
- Environment Auto-Configuration and Toolchain Discovery
|
|
674
|
-
- Wait and Synchronization Reliability
|
|
675
|
-
- Actionability Resolution
|
|
676
|
-
|
|
677
|
-
Control Precision & Observability
|
|
678
|
-
- Adjustable Control Support
|
|
679
|
-
- Adjustable Control Precision Hardening
|
|
680
|
-
- Better Compose / Custom Control Semantics
|
|
681
|
-
- Signal-Oriented Diagnostic Filtering
|
|
682
|
-
- Verification Stabilization and Temporal Convergence
|
|
683
|
-
|
|
684
|
-
Interaction Expansion
|
|
685
|
-
- Long Press Gesture
|
|
686
|
-
- Pinch to Zoom
|
|
687
|
-
|
|
688
|
-
Deep Observability
|
|
689
|
-
- Advanced Trace Correlation and Analysis
|
|
690
|
-
|
|
691
|
-
## Wave 1 (Current Focus)
|
|
692
|
-
- Stronger State Verification
|
|
693
|
-
- Richer Element Identity
|
|
694
|
-
- Wait and Synchronization Reliability
|
|
695
|
-
- Actionability Resolution
|
|
696
|
-
- Environment Auto-Configuration and Toolchain Discovery
|
|
697
|
-
|
|
698
|
-
Focus:
|
|
699
|
-
Make core loop reliable and reduce onboarding friction.
|
|
700
|
-
|
|
701
|
-
---
|
|
702
|
-
|
|
703
|
-
## Wave 2 (Control Precision + Diagnostics)
|
|
704
|
-
- Adjustable Control Support
|
|
705
|
-
- Adjustable Control Precision Hardening
|
|
706
|
-
- Better Compose / Custom Control Semantics
|
|
707
|
-
- Signal-Oriented Diagnostic Filtering
|
|
708
|
-
|
|
709
|
-
Focus:
|
|
710
|
-
Improve control precision, verification convergence, custom control reliability, and signal observability.
|
|
711
|
-
|
|
712
|
-
---
|
|
713
|
-
|
|
714
|
-
## Wave 3 (Interaction Expansion)
|
|
715
|
-
- Long Press Gesture
|
|
716
|
-
|
|
717
|
-
Focus:
|
|
718
|
-
Expand interaction capability after core control reliability is improved.
|
|
719
|
-
|
|
720
|
-
---
|
|
721
|
-
|
|
722
|
-
## Wave 4 (Advanced Gestures + Deep Observability)
|
|
723
|
-
- Pinch to Zoom
|
|
724
|
-
- Advanced Trace Correlation and Analysis
|
|
725
|
-
|
|
726
|
-
Focus:
|
|
727
|
-
Advanced gestures + deep observability.
|
|
728
|
-
|
|
729
|
-
---
|
|
730
|
-
|
|
731
|
-
# Roadmap Ordering
|
|
732
|
-
|
|
733
|
-
Roadmap Ordering:
|
|
734
|
-
1. Stronger State Verification
|
|
735
|
-
2. Richer Element Identity
|
|
736
|
-
3. Wait and Synchronization Reliability
|
|
737
|
-
4. Actionability Resolution
|
|
738
|
-
5. Adjustable Control Support
|
|
739
|
-
6. Adjustable Control Precision Hardening
|
|
740
|
-
7. Environment Auto-Configuration and Toolchain Discovery
|
|
741
|
-
8. Better Compose / Custom Control Semantics
|
|
742
|
-
9. Signal-Oriented Diagnostic Filtering
|
|
743
|
-
10. Long Press Gesture
|
|
744
|
-
11. Pinch to Zoom
|
|
745
|
-
12. Advanced Trace Correlation and Analysis
|
|
746
|
-
|
|
747
|
-
Rationale:
|
|
748
|
-
- Early roadmap items harden state, targeting, synchronization, environment readiness, and action execution.
|
|
749
|
-
- Mid roadmap items improve control precision and signal observability.
|
|
750
|
-
- Later interaction-focused items expand interaction coverage.
|
|
751
|
-
- Final observability work deepens debugging observability.
|
|
752
|
-
|
|
753
|
-
---
|
|
754
|
-
|
|
755
|
-
## Future Considerations
|
|
756
|
-
Still out of scope:
|
|
757
|
-
|
|
758
|
-
- Full autonomous recovery planning (deferred until after verification stabilization)
|
|
759
|
-
- Autonomous retry strategy
|
|
760
|
-
- MCP-level agent orchestration
|
|
761
|
-
- Autonomous recovery hinting (future consideration only)
|
|
@@ -81,7 +81,7 @@ That flow is applied to `start_app`, `restart_app`, `tap`, `swipe`, `scroll_to_e
|
|
|
81
81
|
| --- | --- | --- | --- | --- |
|
|
82
82
|
| `classify_action_outcome` | Deterministic rule-based classifier over supplied signals. | `{ uiChanged: boolean, expectedElementVisible?: boolean, networkRequests?: { url?: string, status: 'success'\|'failure'\|'retryable' }[], hasLogErrors?: boolean }` | `{ outcome: 'success'\|'no_op'\|'backend_failure'\|'ui_failure'\|'unknown', reasoning: string, nextAction?: 'call_get_network_activity' }` | Pure computation. |
|
|
83
83
|
| `get_network_activity` | Return normalized request events since last action window. | `{}` | `{ requests: NetworkRequestSummary[], count: number }` | Reads logs, advances internal `lastConsumedTimestamp`. |
|
|
84
|
-
| `get_system_status` | Aggregate Android/iOS/Gradle readiness. | `{}` |
|
|
84
|
+
| `get_system_status` | Aggregate Android/iOS/Gradle readiness. | `{}` | Additive response: legacy flat fields remain available, with nested `host`, `android`, and `ios` objects added alongside them. | Reads toolchain/device state. |
|
|
85
85
|
|
|
86
86
|
## 3. Action Tools (Mutation Tools)
|
|
87
87
|
|