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.
Files changed (60) hide show
  1. package/README.md +50 -5
  2. package/dist/interact/index.js +546 -133
  3. package/dist/manage/ios.js +1 -1
  4. package/dist/server/tool-definitions.js +13 -9
  5. package/dist/server/tool-handlers.js +4 -4
  6. package/dist/server-core.js +1 -1
  7. package/dist/system/index.js +485 -48
  8. package/dist/system/ios.js +15 -7
  9. package/dist/utils/android/utils.js +4 -4
  10. package/dist/utils/cli/idb/check-idb.js +10 -3
  11. package/dist/utils/cli/idb/idb-helper.js +47 -13
  12. package/dist/utils/ios/utils.js +5 -9
  13. package/docs/CHANGELOG.md +6 -0
  14. package/docs/ROADMAP.md +88 -212
  15. package/docs/specs/baseline-spec-v0.md +1 -1
  16. package/docs/specs-deltas/015-adjustable-control-support.md +541 -0
  17. package/docs/specs-deltas/016-environment-tools.md +533 -0
  18. package/docs/tools/TOOLS.md +2 -0
  19. package/docs/tools/manage.md +4 -2
  20. package/docs/tools/system.md +9 -2
  21. package/package.json +1 -1
  22. package/skills/spec-review/SKILL.md +52 -0
  23. package/skills/spec-review/references/spec-review-checklist.md +13 -0
  24. package/skills/spec-review/references/spec-review-template.md +28 -0
  25. package/src/interact/index.ts +581 -138
  26. package/src/manage/ios.ts +1 -1
  27. package/src/server/tool-definitions.ts +13 -9
  28. package/src/server/tool-handlers.ts +4 -4
  29. package/src/server-core.ts +1 -1
  30. package/src/system/index.ts +572 -50
  31. package/src/system/ios.ts +14 -7
  32. package/src/types.ts +2 -0
  33. package/src/utils/android/utils.ts +3 -3
  34. package/src/utils/cli/idb/check-idb.ts +11 -2
  35. package/src/utils/cli/idb/idb-helper.ts +49 -12
  36. package/src/utils/ios/utils.ts +4 -8
  37. package/test/unit/interact/adjust_control.test.ts +586 -33
  38. package/test/unit/interact/tap_element.test.ts +1 -1
  39. package/test/unit/server/contract.test.ts +4 -0
  40. package/test/unit/system/get_system_status.test.ts +3 -0
  41. package/test/unit/system/system_status.test.ts +40 -0
  42. package/test/unit/utils/idb_health.test.ts +74 -0
  43. package/skills/rfc-review/SKILL.md +0 -52
  44. package/skills/rfc-review/references/rfc-review-checklist.md +0 -12
  45. package/skills/rfc-review/references/rfc-review-template.md +0 -28
  46. /package/docs/{rfcs → specs-deltas}/001-state-verification.md +0 -0
  47. /package/docs/{rfcs → specs-deltas}/002-richer-element-identity +0 -0
  48. /package/docs/{rfcs → specs-deltas}/003-wait-and-synchronization-reliability.md +0 -0
  49. /package/docs/{rfcs → specs-deltas}/004-action-verification-routing.md +0 -0
  50. /package/docs/{rfcs → specs-deltas}/005-unified-action-execution-and-verification-model.md +0 -0
  51. /package/docs/{rfcs → specs-deltas}/006-runtime-action-instrumentation-and-binding-layer.md +0 -0
  52. /package/docs/{rfcs → specs-deltas}/007-actionability-resolution-and-executable-target-selection.md +0 -0
  53. /package/docs/{rfcs → specs-deltas}/008-adjustable-control-support-and-semantic-value-manipulation.md +0 -0
  54. /package/docs/{rfcs → specs-deltas}/009-semantic-control-modeling-for-custom-and-composite-controls.md +0 -0
  55. /package/docs/{rfcs → specs-deltas}/010-verification-stabilization-and-temporal-convergence.md +0 -0
  56. /package/docs/{rfcs → specs-deltas}/011-recovery-and-replanning-for-failed-or-ambiguous-interaction-flows.md +0 -0
  57. /package/docs/{rfcs → specs-deltas}/011.1-recovery-contract-types-and-runtime-wiring-spec.md +0 -0
  58. /package/docs/{rfcs → specs-deltas}/012-action-trace-and-xecution-observability.md +0 -0
  59. /package/docs/{rfcs → specs-deltas}/013-wait-and-synchronization-reliability.md +0 -0
  60. /package/docs/{rfcs → specs-deltas}/014-actionability-resolution.md +0 -0
@@ -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
- const data = JSON.parse(simOut);
15
- let count = 0;
16
- for (const k in data.devices) {
17
- const arr = data.devices[k];
18
- if (Array.isArray(arr))
19
- count += arr.filter((d) => (d.state || '').toLowerCase() === 'booted').length;
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 -> ANDROID_SDK_ROOT/platform-tools/adb -> ANDROID_HOME/platform-tools/adb -> ~/Library/Android/sdk/platform-tools/adb -> PATH discovery -> 'adb'
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
- print('idb --version:', execSync(`${idb} --version`, { stdio: ['ignore', 'pipe', 'ignore'] }).toString().trim());
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 --version: (failed)', e instanceof Error ? e.message : String(e));
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 isIDBInstalled() {
75
- const cmd = getIdbCmd();
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
- // command -v <cmd>
80
- const r = spawnSync('command', ['-v', cmd], { stdio: ['ignore', 'pipe', 'ignore'] });
81
- if (r && r.status === 0)
82
- return true;
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
- try {
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
- catch { }
90
- return false;
122
+ }
123
+ export function isIDBInstalled() {
124
+ return probeIdb().ok;
91
125
  }
@@ -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(`command -v ${cmd}`, { stdio: ['ignore', 'pipe', 'ignore'] });
77
+ execSync(`${cmd} list-targets --json`, { stdio: ['ignore', 'pipe', 'pipe'], timeout: 5000 });
76
78
  return true;
77
79
  }
78
80
  catch (e) {
79
- try {
80
- execSync(`${cmd} list-targets --json`, { stdio: ['ignore', 'pipe', 'ignore'], timeout: 2000 });
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
- ## Planning Principles
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
- - Adjustable Control Precision Hardening
12
+ - Environment Auto-Configuration and Toolchain Discovery
13
+ - Adjustable Control Support
57
14
 
58
- ## Upcoming Work
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:** Planned
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:** Planned
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. | `{}` | `{ success, status: 'ready'\|'degraded'\|'blocked', adbAvailable, adbVersion, devices, deviceStates, logsAvailable, envValid, issues, appInstalled, iosAvailable, iosDevices, gradleJavaHome, gradleValid, gradleFilesChecked, gradleSuggestedFixes, summary }` | Reads toolchain/device state. |
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