react-native-ai-debugger 1.0.15 → 1.0.16

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.
@@ -1,13 +1,60 @@
1
1
  import WebSocket from "ws";
2
2
  import { pendingExecutions, getNextMessageId, connectedApps } from "./state.js";
3
3
  import { getFirstConnectedApp, connectToDevice } from "./connection.js";
4
- import { fetchDevices, selectMainDevice } from "./metro.js";
4
+ import { fetchDevices, selectMainDevice, scanMetroPorts } from "./metro.js";
5
5
  import { DEFAULT_RECONNECTION_CONFIG, cancelReconnectionTimer } from "./connectionState.js";
6
6
  // Hermes runtime compatibility: polyfill for 'global' which doesn't exist in Hermes
7
7
  // In Hermes, globalThis is the standard way to access global scope
8
8
  const GLOBAL_POLYFILL = `var global = typeof global !== 'undefined' ? global : globalThis;`;
9
- // Execute JavaScript in the connected React Native app
10
- export async function executeInApp(expression, awaitPromise = true) {
9
+ // Error patterns that indicate a stale/destroyed context
10
+ const CONTEXT_ERROR_PATTERNS = [
11
+ "cannot find context",
12
+ "execution context was destroyed",
13
+ "target closed",
14
+ "inspected target navigated",
15
+ "session closed",
16
+ "context with specified id",
17
+ "no execution context",
18
+ ];
19
+ /**
20
+ * Check if an error indicates a stale page context
21
+ */
22
+ function isContextError(error) {
23
+ if (!error)
24
+ return false;
25
+ const lowerError = error.toLowerCase();
26
+ return CONTEXT_ERROR_PATTERNS.some((pattern) => lowerError.includes(pattern));
27
+ }
28
+ /**
29
+ * Simple delay helper
30
+ */
31
+ function delay(ms) {
32
+ return new Promise((resolve) => setTimeout(resolve, ms));
33
+ }
34
+ /**
35
+ * Attempt quick reconnection to Metro
36
+ */
37
+ async function attemptQuickReconnect(preferredPort) {
38
+ try {
39
+ const ports = await scanMetroPorts();
40
+ const targetPort = preferredPort && ports.includes(preferredPort) ? preferredPort : ports[0];
41
+ if (!targetPort)
42
+ return false;
43
+ const devices = await fetchDevices(targetPort);
44
+ const mainDevice = selectMainDevice(devices);
45
+ if (!mainDevice)
46
+ return false;
47
+ await connectToDevice(mainDevice, targetPort);
48
+ return true;
49
+ }
50
+ catch {
51
+ return false;
52
+ }
53
+ }
54
+ /**
55
+ * Execute expression on a connected app (core implementation without retry)
56
+ */
57
+ async function executeExpressionCore(expression, awaitPromise) {
11
58
  const app = getFirstConnectedApp();
12
59
  if (!app) {
13
60
  return { success: false, error: "No apps connected. Run 'scan_metro' first." };
@@ -25,19 +72,107 @@ export async function executeInApp(expression, awaitPromise = true) {
25
72
  resolve({ success: false, error: "Timeout: Expression took too long to evaluate" });
26
73
  }, TIMEOUT_MS);
27
74
  pendingExecutions.set(currentMessageId, { resolve, timeoutId });
28
- app.ws.send(JSON.stringify({
29
- id: currentMessageId,
30
- method: "Runtime.evaluate",
31
- params: {
32
- expression: wrappedExpression,
33
- returnByValue: true,
34
- awaitPromise,
35
- userGesture: true,
36
- generatePreview: true
37
- }
38
- }));
75
+ try {
76
+ app.ws.send(JSON.stringify({
77
+ id: currentMessageId,
78
+ method: "Runtime.evaluate",
79
+ params: {
80
+ expression: wrappedExpression,
81
+ returnByValue: true,
82
+ awaitPromise,
83
+ userGesture: true,
84
+ generatePreview: true,
85
+ },
86
+ }));
87
+ }
88
+ catch (error) {
89
+ clearTimeout(timeoutId);
90
+ pendingExecutions.delete(currentMessageId);
91
+ resolve({
92
+ success: false,
93
+ error: `Failed to send: ${error instanceof Error ? error.message : String(error)}`,
94
+ });
95
+ }
39
96
  });
40
97
  }
98
+ // Execute JavaScript in the connected React Native app with retry logic
99
+ export async function executeInApp(expression, awaitPromise = true, options = {}) {
100
+ const { maxRetries = 2, retryDelayMs = 1000, autoReconnect = true } = options;
101
+ let lastError;
102
+ let preferredPort;
103
+ // Get preferred port from current connection if available
104
+ const currentApp = getFirstConnectedApp();
105
+ if (currentApp) {
106
+ preferredPort = currentApp.port;
107
+ }
108
+ for (let attempt = 0; attempt <= maxRetries; attempt++) {
109
+ const app = getFirstConnectedApp();
110
+ // No connection - try to reconnect if enabled
111
+ if (!app) {
112
+ if (autoReconnect && attempt < maxRetries) {
113
+ console.error(`[rn-ai-debugger] No connection, attempting reconnect (attempt ${attempt + 1}/${maxRetries})...`);
114
+ const reconnected = await attemptQuickReconnect(preferredPort);
115
+ if (reconnected) {
116
+ await delay(retryDelayMs);
117
+ continue;
118
+ }
119
+ }
120
+ return { success: false, error: "No apps connected. Run 'scan_metro' first." };
121
+ }
122
+ // WebSocket not open - try to reconnect
123
+ if (app.ws.readyState !== WebSocket.OPEN) {
124
+ if (autoReconnect && attempt < maxRetries) {
125
+ console.error(`[rn-ai-debugger] WebSocket not open, attempting reconnect (attempt ${attempt + 1}/${maxRetries})...`);
126
+ // Close stale connection
127
+ const appKey = `${app.port}-${app.deviceInfo.id}`;
128
+ cancelReconnectionTimer(appKey);
129
+ try {
130
+ app.ws.close();
131
+ }
132
+ catch { /* ignore */ }
133
+ connectedApps.delete(appKey);
134
+ const reconnected = await attemptQuickReconnect(app.port);
135
+ if (reconnected) {
136
+ await delay(retryDelayMs);
137
+ continue;
138
+ }
139
+ }
140
+ return { success: false, error: "WebSocket connection is not open." };
141
+ }
142
+ // Execute the expression
143
+ const result = await executeExpressionCore(expression, awaitPromise);
144
+ // Success - return result
145
+ if (result.success) {
146
+ return result;
147
+ }
148
+ lastError = result.error;
149
+ // Check if this is a context error that might be recoverable
150
+ if (isContextError(result.error)) {
151
+ if (autoReconnect && attempt < maxRetries) {
152
+ console.error(`[rn-ai-debugger] Context error detected, attempting reconnect (attempt ${attempt + 1}/${maxRetries})...`);
153
+ // Close and reconnect
154
+ const appKey = `${app.port}-${app.deviceInfo.id}`;
155
+ cancelReconnectionTimer(appKey);
156
+ try {
157
+ app.ws.close();
158
+ }
159
+ catch { /* ignore */ }
160
+ connectedApps.delete(appKey);
161
+ const reconnected = await attemptQuickReconnect(app.port);
162
+ if (reconnected) {
163
+ await delay(retryDelayMs);
164
+ continue;
165
+ }
166
+ }
167
+ }
168
+ // Non-context error or no more retries - return error
169
+ return result;
170
+ }
171
+ return {
172
+ success: false,
173
+ error: lastError ?? "Execution failed after all retries. Connection may be stale.",
174
+ };
175
+ }
41
176
  // List globally available debugging objects in the app
42
177
  export async function listDebugGlobals() {
43
178
  const expression = `
@@ -1 +1 @@
1
- {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/core/executor.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/core/executor.ts"],"names":[],"mappings":"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"}
@@ -1,11 +1,11 @@
1
1
  export * from "./types.js";
2
- export { DEFAULT_RECONNECTION_CONFIG, initConnectionState, updateConnectionState, getConnectionState, getAllConnectionStates, recordConnectionGap, closeConnectionGap, getRecentGaps, hasRecentDisconnect, saveConnectionMetadata, getConnectionMetadata, clearConnectionMetadata, getAllConnectionMetadata, saveReconnectionTimer, getAndClearReconnectionTimer, cancelReconnectionTimer, cancelAllReconnectionTimers, clearAllConnectionState, calculateBackoffDelay, formatDuration } from "./connectionState.js";
2
+ export { DEFAULT_RECONNECTION_CONFIG, initConnectionState, updateConnectionState, getConnectionState, getAllConnectionStates, recordConnectionGap, closeConnectionGap, getRecentGaps, hasRecentDisconnect, saveConnectionMetadata, getConnectionMetadata, clearConnectionMetadata, getAllConnectionMetadata, saveReconnectionTimer, getAndClearReconnectionTimer, cancelReconnectionTimer, cancelAllReconnectionTimers, clearAllConnectionState, calculateBackoffDelay, formatDuration, initContextHealth, getContextHealth, updateContextHealth, markContextStale, markContextHealthy, clearContextHealth, getAllContextHealth, } from "./connectionState.js";
3
3
  export { logBuffer, networkBuffer, bundleErrorBuffer, connectedApps, pendingExecutions, getNextMessageId, getActiveSimulatorUdid } from "./state.js";
4
4
  export { LogBuffer, mapConsoleType, formatLogs, getLogs, searchLogs } from "./logs.js";
5
5
  export { NetworkBuffer, formatRequest, formatRequests, formatRequestDetails, getNetworkRequests, searchNetworkRequests, getNetworkStats } from "./network.js";
6
6
  export { COMMON_PORTS, isPortOpen, scanMetroPorts, fetchDevices, selectMainDevice, discoverMetroDevices, checkMetroState } from "./metro.js";
7
7
  export type { MetroState } from "./metro.js";
8
- export { formatRemoteObject, handleCDPMessage, connectToDevice, getConnectedApps, getFirstConnectedApp, hasConnectedApp } from "./connection.js";
8
+ export { formatRemoteObject, handleCDPMessage, connectToDevice, getConnectedApps, getFirstConnectedApp, hasConnectedApp, runQuickHealthCheck, ensureConnection, } from "./connection.js";
9
9
  export { executeInApp, listDebugGlobals, inspectGlobal, reloadApp } from "./executor.js";
10
10
  export { isAdbAvailable, listAndroidDevices, getDefaultAndroidDevice, androidScreenshot, androidInstallApp, androidLaunchApp, androidListPackages, ANDROID_KEY_EVENTS, androidTap, androidLongPress, androidSwipe, androidInputText, androidKeyEvent, androidGetScreenSize, androidGetDensity, androidGetStatusBarHeight, androidDescribeAll, androidDescribePoint, androidTapElement, androidGetUITree, androidFindElement, androidWaitForElement } from "./android.js";
11
11
  export type { AndroidAccessibilityElement, AndroidDescribeResult, AndroidUIElement, FindElementResult, WaitForElementResult, FindElementOptions } from "./android.js";
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
@@ -1,7 +1,9 @@
1
1
  // Types
2
2
  export * from "./types.js";
3
3
  // Connection State Management
4
- export { DEFAULT_RECONNECTION_CONFIG, initConnectionState, updateConnectionState, getConnectionState, getAllConnectionStates, recordConnectionGap, closeConnectionGap, getRecentGaps, hasRecentDisconnect, saveConnectionMetadata, getConnectionMetadata, clearConnectionMetadata, getAllConnectionMetadata, saveReconnectionTimer, getAndClearReconnectionTimer, cancelReconnectionTimer, cancelAllReconnectionTimers, clearAllConnectionState, calculateBackoffDelay, formatDuration } from "./connectionState.js";
4
+ export { DEFAULT_RECONNECTION_CONFIG, initConnectionState, updateConnectionState, getConnectionState, getAllConnectionStates, recordConnectionGap, closeConnectionGap, getRecentGaps, hasRecentDisconnect, saveConnectionMetadata, getConnectionMetadata, clearConnectionMetadata, getAllConnectionMetadata, saveReconnectionTimer, getAndClearReconnectionTimer, cancelReconnectionTimer, cancelAllReconnectionTimers, clearAllConnectionState, calculateBackoffDelay, formatDuration,
5
+ // Context health tracking
6
+ initContextHealth, getContextHealth, updateContextHealth, markContextStale, markContextHealthy, clearContextHealth, getAllContextHealth, } from "./connectionState.js";
5
7
  // State
6
8
  export { logBuffer, networkBuffer, bundleErrorBuffer, connectedApps, pendingExecutions, getNextMessageId, getActiveSimulatorUdid } from "./state.js";
7
9
  // Logs
@@ -11,7 +13,7 @@ export { NetworkBuffer, formatRequest, formatRequests, formatRequestDetails, get
11
13
  // Metro
12
14
  export { COMMON_PORTS, isPortOpen, scanMetroPorts, fetchDevices, selectMainDevice, discoverMetroDevices, checkMetroState } from "./metro.js";
13
15
  // Connection
14
- export { formatRemoteObject, handleCDPMessage, connectToDevice, getConnectedApps, getFirstConnectedApp, hasConnectedApp } from "./connection.js";
16
+ export { formatRemoteObject, handleCDPMessage, connectToDevice, getConnectedApps, getFirstConnectedApp, hasConnectedApp, runQuickHealthCheck, ensureConnection, } from "./connection.js";
15
17
  // Executor
16
18
  export { executeInApp, listDebugGlobals, inspectGlobal, reloadApp } from "./executor.js";
17
19
  // Android (ADB)
@@ -1 +1 @@
1
- {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
@@ -94,4 +94,29 @@ export interface ConnectOptions {
94
94
  isReconnection?: boolean;
95
95
  reconnectionConfig?: ReconnectionConfig;
96
96
  }
97
+ export interface ContextHealth {
98
+ contextId: number | null;
99
+ lastContextCreated: Date | null;
100
+ lastContextDestroyed: Date | null;
101
+ isStale: boolean;
102
+ lastHealthCheck: Date | null;
103
+ lastHealthCheckSuccess: boolean;
104
+ }
105
+ export interface ExecuteOptions {
106
+ maxRetries?: number;
107
+ retryDelayMs?: number;
108
+ autoReconnect?: boolean;
109
+ }
110
+ export interface EnsureConnectionResult {
111
+ connected: boolean;
112
+ wasReconnected: boolean;
113
+ healthCheckPassed: boolean;
114
+ connectionInfo: {
115
+ deviceTitle: string;
116
+ port: number;
117
+ uptime: string;
118
+ contextId: number | null;
119
+ } | null;
120
+ error?: string;
121
+ }
97
122
  //# sourceMappingURL=types.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/core/types.ts"],"names":[],"mappings":"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"}
package/build/index.js CHANGED
@@ -5,6 +5,10 @@ import { z } from "zod";
5
5
  import { logBuffer, networkBuffer, bundleErrorBuffer, connectedApps, getActiveSimulatorUdid, scanMetroPorts, fetchDevices, selectMainDevice, connectToDevice, getConnectedApps, executeInApp, listDebugGlobals, inspectGlobal, reloadApp, getLogs, searchLogs, getNetworkRequests, searchNetworkRequests, getNetworkStats, formatRequestDetails,
6
6
  // Connection state
7
7
  getAllConnectionStates, getAllConnectionMetadata, getRecentGaps, formatDuration,
8
+ // Context health tracking
9
+ getContextHealth,
10
+ // Connection resilience
11
+ ensureConnection,
8
12
  // Bundle (Metro build errors)
9
13
  connectMetroBuildEvents, getBundleErrors, getBundleStatusWithErrors, checkMetroState,
10
14
  // Error screen parsing (OCR fallback)
@@ -172,6 +176,7 @@ registerToolWithTelemetry("get_connection_status", {
172
176
  // Show active connections
173
177
  for (const { key, app, isConnected } of connections) {
174
178
  const state = states.get(key);
179
+ const contextHealth = getContextHealth(key);
175
180
  lines.push(`--- ${app.deviceInfo.title} (Port ${app.port}) ---`);
176
181
  lines.push(` Status: ${isConnected ? "CONNECTED" : "DISCONNECTED"}`);
177
182
  if (state) {
@@ -195,6 +200,22 @@ registerToolWithTelemetry("get_connection_status", {
195
200
  }
196
201
  }
197
202
  }
203
+ // Show context health
204
+ if (contextHealth) {
205
+ lines.push(` Context Health:`);
206
+ lines.push(` Context ID: ${contextHealth.contextId ?? "unknown"}`);
207
+ lines.push(` Status: ${contextHealth.isStale ? "STALE" : "HEALTHY"}`);
208
+ if (contextHealth.lastHealthCheck) {
209
+ const healthResult = contextHealth.lastHealthCheckSuccess ? "PASS" : "FAIL";
210
+ lines.push(` Last Check: ${contextHealth.lastHealthCheck.toLocaleTimeString()} (${healthResult})`);
211
+ }
212
+ if (contextHealth.lastContextCreated) {
213
+ lines.push(` Context Created: ${contextHealth.lastContextCreated.toLocaleTimeString()}`);
214
+ }
215
+ if (contextHealth.lastContextDestroyed) {
216
+ lines.push(` Context Destroyed: ${contextHealth.lastContextDestroyed.toLocaleTimeString()}`);
217
+ }
218
+ }
198
219
  lines.push("");
199
220
  }
200
221
  // Show disconnected/reconnecting states without active connections
@@ -216,6 +237,57 @@ registerToolWithTelemetry("get_connection_status", {
216
237
  content: [{ type: "text", text: lines.join("\n") }]
217
238
  };
218
239
  });
240
+ // Tool: Ensure connection health
241
+ registerToolWithTelemetry("ensure_connection", {
242
+ description: "Verify or establish a healthy connection to a React Native app. Use before running commands if connection may be stale, or after navigation/reload. This tool runs a health check and will auto-reconnect if needed.",
243
+ inputSchema: {
244
+ port: z.number().optional().describe("Metro port (default: auto-detect)"),
245
+ healthCheck: z
246
+ .boolean()
247
+ .optional()
248
+ .default(true)
249
+ .describe("Run health check to verify page context is responsive (default: true)"),
250
+ forceRefresh: z
251
+ .boolean()
252
+ .optional()
253
+ .default(false)
254
+ .describe("Force close existing connection and reconnect (default: false)")
255
+ }
256
+ }, async ({ port, healthCheck, forceRefresh }) => {
257
+ const result = await ensureConnection({ port, healthCheck, forceRefresh });
258
+ if (!result.connected) {
259
+ return {
260
+ content: [
261
+ {
262
+ type: "text",
263
+ text: `Connection failed: ${result.error}`
264
+ }
265
+ ],
266
+ isError: true
267
+ };
268
+ }
269
+ const lines = [];
270
+ lines.push("=== Connection Ensured ===\n");
271
+ if (result.connectionInfo) {
272
+ lines.push(`Device: ${result.connectionInfo.deviceTitle}`);
273
+ lines.push(`Port: ${result.connectionInfo.port}`);
274
+ lines.push(`Uptime: ${result.connectionInfo.uptime}`);
275
+ if (result.connectionInfo.contextId !== null) {
276
+ lines.push(`Context ID: ${result.connectionInfo.contextId}`);
277
+ }
278
+ }
279
+ lines.push("");
280
+ lines.push(`Reconnected: ${result.wasReconnected ? "Yes" : "No"}`);
281
+ lines.push(`Health Check: ${result.healthCheckPassed ? "PASSED" : "FAILED"}`);
282
+ if (!result.healthCheckPassed) {
283
+ lines.push("");
284
+ lines.push("Warning: Health check failed. The page context may be stale.");
285
+ lines.push("Consider using forceRefresh=true or reload_app to get a fresh context.");
286
+ }
287
+ return {
288
+ content: [{ type: "text", text: lines.join("\n") }]
289
+ };
290
+ });
219
291
  // Tool: Get console logs
220
292
  registerToolWithTelemetry("get_logs", {
221
293
  description: "Retrieve console logs from connected React Native app",