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.
- package/build/core/connection.d.ts +15 -1
- package/build/core/connection.d.ts.map +1 -1
- package/build/core/connection.js +248 -12
- package/build/core/connection.js.map +1 -1
- package/build/core/connectionState.d.ts +29 -1
- package/build/core/connectionState.d.ts.map +1 -1
- package/build/core/connectionState.js +79 -0
- package/build/core/connectionState.js.map +1 -1
- package/build/core/executor.d.ts +2 -2
- package/build/core/executor.d.ts.map +1 -1
- package/build/core/executor.js +149 -14
- package/build/core/executor.js.map +1 -1
- package/build/core/index.d.ts +2 -2
- package/build/core/index.d.ts.map +1 -1
- package/build/core/index.js +4 -2
- package/build/core/index.js.map +1 -1
- package/build/core/types.d.ts +25 -0
- package/build/core/types.d.ts.map +1 -1
- package/build/index.js +73 -1
- package/build/index.js.map +1 -1
- package/package.json +1 -1
package/build/core/executor.js
CHANGED
|
@@ -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
|
-
//
|
|
10
|
-
|
|
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
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
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":"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,MAAM,YAAY,CAAC;
|
|
1
|
+
{"version":3,"file":"executor.js","sourceRoot":"","sources":["../../src/core/executor.ts"],"names":[],"mappings":"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"}
|
package/build/core/index.d.ts
CHANGED
|
@@ -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":"AACA,cAAc,YAAY,CAAC;AAG3B,OAAO,EACH,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,EACjB,MAAM,sBAAsB,CAAC;AAG9B,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAGrJ,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAGvF,OAAO,EACH,aAAa,EACb,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EAClB,MAAM,cAAc,CAAC;AAGtB,OAAO,EACH,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EAClB,MAAM,YAAY,CAAC;AAEpB,YAAY,EAAE,UAAU,EAAE,MAAM,YAAY,CAAC;AAG7C,OAAO,EACH,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
package/build/core/index.js
CHANGED
|
@@ -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
|
|
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)
|
package/build/core/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"AAAA,QAAQ;AACR,cAAc,YAAY,CAAC;AAE3B,8BAA8B;AAC9B,OAAO,EACH,2BAA2B,EAC3B,mBAAmB,EACnB,qBAAqB,EACrB,kBAAkB,EAClB,sBAAsB,EACtB,mBAAmB,EACnB,kBAAkB,EAClB,aAAa,EACb,mBAAmB,EACnB,sBAAsB,EACtB,qBAAqB,EACrB,uBAAuB,EACvB,wBAAwB,EACxB,qBAAqB,EACrB,4BAA4B,EAC5B,uBAAuB,EACvB,2BAA2B,EAC3B,uBAAuB,EACvB,qBAAqB,EACrB,cAAc,EACjB,MAAM,sBAAsB,CAAC;AAE9B,QAAQ;AACR,OAAO,EAAE,SAAS,EAAE,aAAa,EAAE,iBAAiB,EAAE,aAAa,EAAE,iBAAiB,EAAE,gBAAgB,EAAE,sBAAsB,EAAE,MAAM,YAAY,CAAC;AAErJ,OAAO;AACP,OAAO,EAAE,SAAS,EAAE,cAAc,EAAE,UAAU,EAAE,OAAO,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAEvF,UAAU;AACV,OAAO,EACH,aAAa,EACb,aAAa,EACb,cAAc,EACd,oBAAoB,EACpB,kBAAkB,EAClB,qBAAqB,EACrB,eAAe,EAClB,MAAM,cAAc,CAAC;AAEtB,QAAQ;AACR,OAAO,EACH,YAAY,EACZ,UAAU,EACV,cAAc,EACd,YAAY,EACZ,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,EAClB,MAAM,YAAY,CAAC;AAIpB,aAAa;AACb,OAAO,EACH,kBAAkB,EAClB,gBAAgB,EAChB,eAAe,EACf,gBAAgB,EAChB,oBAAoB,EACpB,eAAe,
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/core/index.ts"],"names":[],"mappings":"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"}
|
package/build/core/types.d.ts
CHANGED
|
@@ -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":"AAAA,OAAO,SAAS,MAAM,IAAI,CAAC;AAG3B,MAAM,WAAW,QAAQ;IACrB,SAAS,EAAE,IAAI,CAAC;IAChB,KAAK,EAAE,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;IACnD,OAAO,EAAE,MAAM,CAAC;IAChB,IAAI,CAAC,EAAE,OAAO,EAAE,CAAC;CACpB;AAGD,MAAM,WAAW,UAAU;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,KAAK,EAAE,MAAM,CAAC;IACd,WAAW,EAAE,MAAM,CAAC;IACpB,KAAK,EAAE,MAAM,CAAC;IACd,IAAI,EAAE,MAAM,CAAC;IACb,oBAAoB,EAAE,MAAM,CAAC;IAC7B,UAAU,EAAE,MAAM,CAAC;CACtB;AAGD,MAAM,WAAW,YAAY;IACzB,EAAE,EAAE,SAAS,CAAC;IACd,UAAU,EAAE,UAAU,CAAC;IACvB,IAAI,EAAE,MAAM,CAAC;CAChB;AAGD,MAAM,WAAW,YAAY;IACzB,IAAI,EAAE,QAAQ,GAAG,UAAU,GAAG,WAAW,GAAG,QAAQ,GAAG,QAAQ,GAAG,SAAS,GAAG,QAAQ,GAAG,QAAQ,CAAC;IAClG,OAAO,CAAC,EACF,OAAO,GACP,MAAM,GACN,MAAM,GACN,QAAQ,GACR,MAAM,GACN,KAAK,GACL,KAAK,GACL,SAAS,GACT,SAAS,GACT,UAAU,GACV,WAAW,GACX,OAAO,GACP,OAAO,GACP,SAAS,GACT,YAAY,GACZ,aAAa,GACb,UAAU,CAAC;IACjB,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,KAAK,CAAC,EAAE,OAAO,CAAC;IAChB,mBAAmB,CAAC,EAAE,MAAM,CAAC;IAC7B,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,EAAE,MAAM,CAAC;CACrB;AAGD,MAAM,WAAW,gBAAgB;IAC7B,WAAW,EAAE,MAAM,CAAC;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,YAAY,EAAE,MAAM,CAAC;IACrB,SAAS,CAAC,EAAE,YAAY,CAAC;CAC5B;AAGD,MAAM,WAAW,gBAAgB;IAC7B,OAAO,EAAE,CAAC,MAAM,EAAE,eAAe,KAAK,IAAI,CAAC;IAC3C,SAAS,EAAE,MAAM,CAAC,OAAO,CAAC;CAC7B;AAGD,MAAM,WAAW,eAAe;IAC5B,OAAO,EAAE,OAAO,CAAC;IACjB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,KAAK,CAAC,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,MAAM,QAAQ,GAAG,KAAK,GAAG,KAAK,GAAG,MAAM,GAAG,OAAO,GAAG,MAAM,GAAG,OAAO,CAAC;AAG3E,MAAM,WAAW,cAAc;IAC3B,SAAS,EAAE,MAAM,CAAC;IAClB,SAAS,EAAE,IAAI,CAAC;IAChB,MAAM,EAAE,MAAM,CAAC;IACf,GAAG,EAAE,MAAM,CAAC;IACZ,OAAO,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IAChC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,eAAe,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC;IACzC,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC;IACvB,MAAM,CAAC,EAAE;QACL,WAAW,CAAC,EAAE,MAAM,CAAC;QACrB,YAAY,CAAC,EAAE,MAAM,CAAC;QACtB,QAAQ,CAAC,EAAE,MAAM,CAAC;KACrB,CAAC;IACF,KAAK,CAAC,EAAE,MAAM,CAAC;IACf,SAAS,EAAE,OAAO,CAAC;CACtB;AAGD,MAAM,WAAW,eAAe;IAC5B,MAAM,EAAE,WAAW,GAAG,cAAc,GAAG,cAAc,CAAC;IACtD,iBAAiB,EAAE,IAAI,GAAG,IAAI,CAAC;IAC/B,kBAAkB,EAAE,IAAI,GAAG,IAAI,CAAC;IAChC,oBAAoB,EAAE,MAAM,CAAC;IAC7B,cAAc,EAAE,aAAa,EAAE,CAAC;CACnC;AAGD,MAAM,WAAW,aAAa;IAC1B,cAAc,EAAE,IAAI,CAAC;IACrB,aAAa,EAAE,IAAI,GAAG,IAAI,CAAC;IAC3B,UAAU,EAAE,MAAM,GAAG,IAAI,CAAC;IAC1B,MAAM,EAAE,MAAM,CAAC;CAClB;AAGD,MAAM,WAAW,kBAAkB;IAC/B,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,UAAU,CAAC;IACvB,YAAY,EAAE,MAAM,CAAC;CACxB;AAGD,MAAM,WAAW,kBAAkB;IAC/B,OAAO,EAAE,OAAO,CAAC;IACjB,WAAW,EAAE,MAAM,CAAC;IACpB,cAAc,EAAE,MAAM,CAAC;IACvB,UAAU,EAAE,MAAM,CAAC;IACnB,iBAAiB,EAAE,MAAM,CAAC;CAC7B;AAGD,MAAM,WAAW,cAAc;IAC3B,cAAc,CAAC,EAAE,OAAO,CAAC;IACzB,kBAAkB,CAAC,EAAE,kBAAkB,CAAC;CAC3C"}
|
|
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();
|