react-native-ai-debugger 1.0.14 → 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":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAE3B,OAAO,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AAChF,OAAO,EAAE,oBAAoB,EAAE,eAAe,EAAE,MAAM,iBAAiB,CAAC;AACxE,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,cAAc,EAAE,MAAM,YAAY,CAAC;AAC5E,OAAO,EAAE,2BAA2B,EAAE,uBAAuB,EAAE,MAAM,sBAAsB,CAAC;AAE5F,oFAAoF;AACpF,mEAAmE;AACnE,MAAM,eAAe,GAAG,mEAAmE,CAAC;AAE5F,yDAAyD;AACzD,MAAM,sBAAsB,GAAG;IAC3B,qBAAqB;IACrB,iCAAiC;IACjC,eAAe;IACf,4BAA4B;IAC5B,gBAAgB;IAChB,2BAA2B;IAC3B,sBAAsB;CACzB,CAAC;AAEF;;GAEG;AACH,SAAS,cAAc,CAAC,KAAyB;IAC7C,IAAI,CAAC,KAAK;QAAE,OAAO,KAAK,CAAC;IACzB,MAAM,UAAU,GAAG,KAAK,CAAC,WAAW,EAAE,CAAC;IACvC,OAAO,sBAAsB,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,QAAQ,CAAC,OAAO,CAAC,CAAC,CAAC;AAClF,CAAC;AAED;;GAEG;AACH,SAAS,KAAK,CAAC,EAAU;IACrB,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,CAAC;AAC7D,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAAC,aAAsB;IACvD,IAAI,CAAC;QACD,MAAM,KAAK,GAAG,MAAM,cAAc,EAAE,CAAC;QACrC,MAAM,UAAU,GAAG,aAAa,IAAI,KAAK,CAAC,QAAQ,CAAC,aAAa,CAAC,CAAC,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC;QAE7F,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAE9B,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,UAAU,CAAC,CAAC;QAC/C,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAC7C,IAAI,CAAC,UAAU;YAAE,OAAO,KAAK,CAAC;QAE9B,MAAM,eAAe,CAAC,UAAU,EAAE,UAAU,CAAC,CAAC;QAC9C,OAAO,IAAI,CAAC;IAChB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,KAAK,CAAC;IACjB,CAAC;AACL,CAAC;AAED;;GAEG;AACH,KAAK,UAAU,qBAAqB,CAChC,UAAkB,EAClB,YAAqB;IAErB,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IAEnC,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC;IACnF,CAAC;IAED,IAAI,GAAG,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;QACvC,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;IAC1E,CAAC;IAED,MAAM,UAAU,GAAG,KAAK,CAAC;IACzB,MAAM,gBAAgB,GAAG,gBAAgB,EAAE,CAAC;IAE5C,gEAAgE;IAChE,MAAM,iBAAiB,GAAG,iBAAiB,eAAe,YAAY,UAAU,SAAS,CAAC;IAE1F,OAAO,IAAI,OAAO,CAAC,CAAC,OAAO,EAAE,EAAE;QAC3B,MAAM,SAAS,GAAG,UAAU,CAAC,GAAG,EAAE;YAC9B,iBAAiB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC3C,OAAO,CAAC,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,+CAA+C,EAAE,CAAC,CAAC;QACxF,CAAC,EAAE,UAAU,CAAC,CAAC;QAEf,iBAAiB,CAAC,GAAG,CAAC,gBAAgB,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,CAAC,CAAC;QAEhE,IAAI,CAAC;YACD,GAAG,CAAC,EAAE,CAAC,IAAI,CACP,IAAI,CAAC,SAAS,CAAC;gBACX,EAAE,EAAE,gBAAgB;gBACpB,MAAM,EAAE,kBAAkB;gBAC1B,MAAM,EAAE;oBACJ,UAAU,EAAE,iBAAiB;oBAC7B,aAAa,EAAE,IAAI;oBACnB,YAAY;oBACZ,WAAW,EAAE,IAAI;oBACjB,eAAe,EAAE,IAAI;iBACxB;aACJ,CAAC,CACL,CAAC;QACN,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACb,YAAY,CAAC,SAAS,CAAC,CAAC;YACxB,iBAAiB,CAAC,MAAM,CAAC,gBAAgB,CAAC,CAAC;YAC3C,OAAO,CAAC;gBACJ,OAAO,EAAE,KAAK;gBACd,KAAK,EAAE,mBAAmB,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE;aACrF,CAAC,CAAC;QACP,CAAC;IACL,CAAC,CAAC,CAAC;AACP,CAAC;AAED,wEAAwE;AACxE,MAAM,CAAC,KAAK,UAAU,YAAY,CAC9B,UAAkB,EAClB,eAAwB,IAAI,EAC5B,UAA0B,EAAE;IAE5B,MAAM,EAAE,UAAU,GAAG,CAAC,EAAE,YAAY,GAAG,IAAI,EAAE,aAAa,GAAG,IAAI,EAAE,GAAG,OAAO,CAAC;IAE9E,IAAI,SAA6B,CAAC;IAClC,IAAI,aAAiC,CAAC;IAEtC,0DAA0D;IAC1D,MAAM,UAAU,GAAG,oBAAoB,EAAE,CAAC;IAC1C,IAAI,UAAU,EAAE,CAAC;QACb,aAAa,GAAG,UAAU,CAAC,IAAI,CAAC;IACpC,CAAC;IAED,KAAK,IAAI,OAAO,GAAG,CAAC,EAAE,OAAO,IAAI,UAAU,EAAE,OAAO,EAAE,EAAE,CAAC;QACrD,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;QAEnC,8CAA8C;QAC9C,IAAI,CAAC,GAAG,EAAE,CAAC;YACP,IAAI,aAAa,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBACxC,OAAO,CAAC,KAAK,CAAC,iEAAiE,OAAO,GAAG,CAAC,IAAI,UAAU,MAAM,CAAC,CAAC;gBAChH,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,aAAa,CAAC,CAAC;gBAC/D,IAAI,WAAW,EAAE,CAAC;oBACd,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;oBAC1B,SAAS;gBACb,CAAC;YACL,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC;QACnF,CAAC;QAED,wCAAwC;QACxC,IAAI,GAAG,CAAC,EAAE,CAAC,UAAU,KAAK,SAAS,CAAC,IAAI,EAAE,CAAC;YACvC,IAAI,aAAa,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBACxC,OAAO,CAAC,KAAK,CAAC,sEAAsE,OAAO,GAAG,CAAC,IAAI,UAAU,MAAM,CAAC,CAAC;gBACrH,yBAAyB;gBACzB,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;gBAClD,uBAAuB,CAAC,MAAM,CAAC,CAAC;gBAChC,IAAI,CAAC;oBAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC9C,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE7B,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC1D,IAAI,WAAW,EAAE,CAAC;oBACd,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;oBAC1B,SAAS;gBACb,CAAC;YACL,CAAC;YACD,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,mCAAmC,EAAE,CAAC;QAC1E,CAAC;QAED,yBAAyB;QACzB,MAAM,MAAM,GAAG,MAAM,qBAAqB,CAAC,UAAU,EAAE,YAAY,CAAC,CAAC;QAErE,0BAA0B;QAC1B,IAAI,MAAM,CAAC,OAAO,EAAE,CAAC;YACjB,OAAO,MAAM,CAAC;QAClB,CAAC;QAED,SAAS,GAAG,MAAM,CAAC,KAAK,CAAC;QAEzB,6DAA6D;QAC7D,IAAI,cAAc,CAAC,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC;YAC/B,IAAI,aAAa,IAAI,OAAO,GAAG,UAAU,EAAE,CAAC;gBACxC,OAAO,CAAC,KAAK,CAAC,0EAA0E,OAAO,GAAG,CAAC,IAAI,UAAU,MAAM,CAAC,CAAC;gBAEzH,sBAAsB;gBACtB,MAAM,MAAM,GAAG,GAAG,GAAG,CAAC,IAAI,IAAI,GAAG,CAAC,UAAU,CAAC,EAAE,EAAE,CAAC;gBAClD,uBAAuB,CAAC,MAAM,CAAC,CAAC;gBAChC,IAAI,CAAC;oBAAC,GAAG,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBAAC,CAAC;gBAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC;gBAC9C,aAAa,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;gBAE7B,MAAM,WAAW,GAAG,MAAM,qBAAqB,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;gBAC1D,IAAI,WAAW,EAAE,CAAC;oBACd,MAAM,KAAK,CAAC,YAAY,CAAC,CAAC;oBAC1B,SAAS;gBACb,CAAC;YACL,CAAC;QACL,CAAC;QAED,sDAAsD;QACtD,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,OAAO;QACH,OAAO,EAAE,KAAK;QACd,KAAK,EAAE,SAAS,IAAI,8DAA8D;KACrF,CAAC;AACN,CAAC;AAED,uDAAuD;AACvD,MAAM,CAAC,KAAK,UAAU,gBAAgB;IAClC,MAAM,UAAU,GAAG;;;;;;;;;;;;;;KAclB,CAAC;IAEF,OAAO,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,0DAA0D;AAC1D,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,UAAkB;IAClD,MAAM,UAAU,GAAG;;0BAEG,UAAU;;;;;;;;;;;;;;;;KAgB/B,CAAC;IAEF,OAAO,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;AAC3C,CAAC;AAED,4FAA4F;AAC5F,MAAM,CAAC,KAAK,UAAU,SAAS;IAC3B,4CAA4C;IAC5C,MAAM,GAAG,GAAG,oBAAoB,EAAE,CAAC;IACnC,IAAI,CAAC,GAAG,EAAE,CAAC;QACP,OAAO,EAAE,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,4CAA4C,EAAE,CAAC;IACnF,CAAC;IAED,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CAAC;IAEtB,uFAAuF;IACvF,2DAA2D;IAC3D,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;KAkBlB,CAAC;IAEF,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,UAAU,EAAE,KAAK,CAAC,CAAC;IAErD,IAAI,CAAC,MAAM,CAAC,OAAO,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAClB,CAAC;IAED,8BAA8B;IAC9B,IAAI,CAAC;QACD,8DAA8D;QAC9D,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;QAExD,oFAAoF;QACpF,iGAAiG;QACjG,KAAK,MAAM,CAAC,GAAG,EAAE,YAAY,CAAC,IAAI,aAAa,CAAC,OAAO,EAAE,EAAE,CAAC;YACxD,IAAI,YAAY,CAAC,IAAI,KAAK,IAAI,EAAE,CAAC;gBAC7B,uDAAuD;gBACvD,uBAAuB,CAAC,GAAG,CAAC,CAAC;gBAC7B,IAAI,CAAC;oBACD,YAAY,CAAC,EAAE,CAAC,KAAK,EAAE,CAAC;gBAC5B,CAAC;gBAAC,MAAM,CAAC;oBACL,sBAAsB;gBAC1B,CAAC;gBACD,aAAa,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;YAC9B,CAAC;QACL,CAAC;QAED,gCAAgC;QAChC,MAAM,IAAI,OAAO,CAAC,OAAO,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,EAAE,GAAG,CAAC,CAAC,CAAC;QAEvD,sEAAsE;QACtE,8EAA8E;QAC9E,sDAAsD;QACtD,MAAM,OAAO,GAAG,MAAM,YAAY,CAAC,IAAI,CAAC,CAAC;QACzC,MAAM,UAAU,GAAG,gBAAgB,CAAC,OAAO,CAAC,CAAC;QAE7C,IAAI,UAAU,EAAE,CAAC;YACb,MAAM,eAAe,CAAC,UAAU,EAAE,IAAI,EAAE;gBACpC,cAAc,EAAE,KAAK;gBACrB,kBAAkB,EAAE,EAAE,GAAG,2BAA2B,EAAE,OAAO,EAAE,KAAK,EAAE;aACzE,CAAC,CAAC;YACH,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,mCAAmC,UAAU,CAAC,KAAK,EAAE;aAChE,CAAC;QACN,CAAC;aAAM,CAAC;YACJ,OAAO;gBACH,OAAO,EAAE,IAAI;gBACb,MAAM,EAAE,2EAA2E;aACtF,CAAC;QACN,CAAC;IACL,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACb,OAAO;YACH,OAAO,EAAE,IAAI;YACb,MAAM,EAAE,2CAA2C,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,kCAAkC;SAC9I,CAAC;IACN,CAAC;AACL,CAAC"}
@@ -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",
@@ -565,7 +637,7 @@ registerToolWithTelemetry("clear_network", {
565
637
  });
566
638
  // Tool: Reload the app
567
639
  registerToolWithTelemetry("reload_app", {
568
- description: "Reload the connected React Native app. Triggers a JavaScript bundle reload (like pressing 'r' in Metro or shaking the device).",
640
+ description: "Reload the connected React Native app. Triggers a JavaScript bundle reload (like pressing 'r' in Metro or shaking the device). IMPORTANT: React Native has Fast Refresh (hot reloading) enabled by default - code changes are automatically applied without needing a full reload. Only use this tool when: (1) logs/behavior don't reflect recent code changes after waiting a few seconds, (2) the app is in a broken state, or (3) you need to reset app state completely. Avoid reloading after every code edit.",
569
641
  inputSchema: {}
570
642
  }, async () => {
571
643
  const result = await reloadApp();