react-native-ai-debugger 1.0.10 → 1.0.12
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +165 -8
- package/build/core/android.js +2 -2
- package/build/core/android.js.map +1 -1
- package/build/core/bundle.d.ts.map +1 -1
- package/build/core/bundle.js +51 -1
- package/build/core/bundle.js.map +1 -1
- package/build/core/connection.d.ts +2 -2
- package/build/core/connection.d.ts.map +1 -1
- package/build/core/connection.js +120 -7
- package/build/core/connection.js.map +1 -1
- package/build/core/connectionState.d.ts +79 -0
- package/build/core/connectionState.d.ts.map +1 -0
- package/build/core/connectionState.js +202 -0
- package/build/core/connectionState.js.map +1 -0
- package/build/core/httpServer.d.ts.map +1 -1
- package/build/core/httpServer.js +60 -1
- package/build/core/httpServer.js.map +1 -1
- package/build/core/httpServerProcess.d.ts +25 -0
- package/build/core/httpServerProcess.d.ts.map +1 -0
- package/build/core/httpServerProcess.js +153 -0
- package/build/core/httpServerProcess.js.map +1 -0
- package/build/core/index.d.ts +6 -2
- package/build/core/index.d.ts.map +1 -1
- package/build/core/index.js +8 -2
- package/build/core/index.js.map +1 -1
- package/build/core/ios.d.ts +10 -0
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +101 -67
- package/build/core/ios.js.map +1 -1
- package/build/core/ocr.d.ts +70 -0
- package/build/core/ocr.d.ts.map +1 -0
- package/build/core/ocr.js +322 -0
- package/build/core/ocr.js.map +1 -0
- package/build/core/state.d.ts +3 -0
- package/build/core/state.d.ts.map +1 -1
- package/build/core/state.js +17 -0
- package/build/core/state.js.map +1 -1
- package/build/core/types.d.ts +29 -0
- package/build/core/types.d.ts.map +1 -1
- package/build/httpServerStandalone.d.ts +7 -0
- package/build/httpServerStandalone.d.ts.map +1 -0
- package/build/httpServerStandalone.js +31 -0
- package/build/httpServerStandalone.js.map +1 -0
- package/build/index.js +280 -14
- package/build/index.js.map +1 -1
- package/package.json +8 -3
|
@@ -0,0 +1,322 @@
|
|
|
1
|
+
import { createWorker } from "tesseract.js";
|
|
2
|
+
import sharp from "sharp";
|
|
3
|
+
import { tmpdir } from "os";
|
|
4
|
+
import { join } from "path";
|
|
5
|
+
import { writeFile, unlink } from "fs/promises";
|
|
6
|
+
import { randomUUID } from "crypto";
|
|
7
|
+
// Cached Tesseract worker for fallback
|
|
8
|
+
let cachedTesseractWorker = null;
|
|
9
|
+
let tesseractWorkerPromise = null;
|
|
10
|
+
// EasyOCR instance
|
|
11
|
+
let easyOCRInstance = null;
|
|
12
|
+
let easyOCRInitPromise = null;
|
|
13
|
+
let easyOCRAvailable = null;
|
|
14
|
+
/**
|
|
15
|
+
* Promise with timeout helper
|
|
16
|
+
*/
|
|
17
|
+
function withTimeout(promise, ms, errorMsg) {
|
|
18
|
+
return Promise.race([
|
|
19
|
+
promise,
|
|
20
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error(errorMsg)), ms))
|
|
21
|
+
]);
|
|
22
|
+
}
|
|
23
|
+
/**
|
|
24
|
+
* Get configured OCR languages from environment variable
|
|
25
|
+
* English is always included as fallback
|
|
26
|
+
* Default: "en" (English only)
|
|
27
|
+
* Example: EASYOCR_LANGUAGES="es,fr" for Spanish, French (+ English)
|
|
28
|
+
*/
|
|
29
|
+
function getOCRLanguages() {
|
|
30
|
+
const envLangs = process.env.EASYOCR_LANGUAGES;
|
|
31
|
+
const languages = envLangs
|
|
32
|
+
? envLangs.split(",").map(lang => lang.trim()).filter(Boolean)
|
|
33
|
+
: [];
|
|
34
|
+
// Always include English as fallback
|
|
35
|
+
if (!languages.includes("en")) {
|
|
36
|
+
languages.push("en");
|
|
37
|
+
}
|
|
38
|
+
return languages;
|
|
39
|
+
}
|
|
40
|
+
/**
|
|
41
|
+
* Initialize EasyOCR (Python-based, better for colored backgrounds)
|
|
42
|
+
* Times out after 10 seconds to fall back to Tesseract
|
|
43
|
+
*/
|
|
44
|
+
async function getEasyOCR() {
|
|
45
|
+
if (easyOCRAvailable === false) {
|
|
46
|
+
return null;
|
|
47
|
+
}
|
|
48
|
+
if (easyOCRInstance) {
|
|
49
|
+
return easyOCRInstance;
|
|
50
|
+
}
|
|
51
|
+
if (easyOCRInitPromise) {
|
|
52
|
+
return easyOCRInitPromise;
|
|
53
|
+
}
|
|
54
|
+
easyOCRInitPromise = (async () => {
|
|
55
|
+
try {
|
|
56
|
+
const languages = getOCRLanguages();
|
|
57
|
+
const { EasyOCR } = await import("node-easyocr");
|
|
58
|
+
const ocr = new EasyOCR();
|
|
59
|
+
await withTimeout(ocr.init(languages), 10000, "EasyOCR init timeout");
|
|
60
|
+
easyOCRInstance = ocr;
|
|
61
|
+
easyOCRAvailable = true;
|
|
62
|
+
return ocr;
|
|
63
|
+
}
|
|
64
|
+
catch {
|
|
65
|
+
easyOCRAvailable = false;
|
|
66
|
+
return null;
|
|
67
|
+
}
|
|
68
|
+
})();
|
|
69
|
+
return easyOCRInitPromise;
|
|
70
|
+
}
|
|
71
|
+
/**
|
|
72
|
+
* Initialize Tesseract worker (fallback)
|
|
73
|
+
*/
|
|
74
|
+
async function getTesseractWorker() {
|
|
75
|
+
if (cachedTesseractWorker) {
|
|
76
|
+
return cachedTesseractWorker;
|
|
77
|
+
}
|
|
78
|
+
if (tesseractWorkerPromise) {
|
|
79
|
+
return tesseractWorkerPromise;
|
|
80
|
+
}
|
|
81
|
+
tesseractWorkerPromise = (async () => {
|
|
82
|
+
const worker = await createWorker("eng", 1, {
|
|
83
|
+
logger: () => { } // Suppress progress logs
|
|
84
|
+
});
|
|
85
|
+
cachedTesseractWorker = worker;
|
|
86
|
+
return worker;
|
|
87
|
+
})();
|
|
88
|
+
return tesseractWorkerPromise;
|
|
89
|
+
}
|
|
90
|
+
/**
|
|
91
|
+
* Infer iOS device pixel ratio from screenshot dimensions
|
|
92
|
+
* @3x devices: Most modern iPhones (width >= 1080)
|
|
93
|
+
* @2x devices: Older iPhones, iPads (width 640-1080 or width >= 1500 for iPads)
|
|
94
|
+
* @1x devices: Very old (rare)
|
|
95
|
+
*/
|
|
96
|
+
export function inferIOSDevicePixelRatio(width, height) {
|
|
97
|
+
// Ensure we're looking at the shorter dimension for width
|
|
98
|
+
const shortSide = Math.min(width, height);
|
|
99
|
+
const longSide = Math.max(width, height);
|
|
100
|
+
// iPads are typically @2x regardless of size
|
|
101
|
+
// iPad resolutions have aspect ratios closer to 4:3 (e.g., 2048x2732)
|
|
102
|
+
const aspectRatio = longSide / shortSide;
|
|
103
|
+
if (aspectRatio < 1.5) {
|
|
104
|
+
// Likely an iPad (4:3 ish aspect ratio)
|
|
105
|
+
return 2;
|
|
106
|
+
}
|
|
107
|
+
// iPhones: Check short side dimension
|
|
108
|
+
// @3x phones have short side >= 1080 (e.g., 1170, 1179, 1284, 1290)
|
|
109
|
+
// @2x phones have short side < 1080 (e.g., 640, 750)
|
|
110
|
+
if (shortSide >= 1080) {
|
|
111
|
+
return 3;
|
|
112
|
+
}
|
|
113
|
+
// Older @2x iPhones (iPhone 8, SE, etc.)
|
|
114
|
+
return 2;
|
|
115
|
+
}
|
|
116
|
+
/**
|
|
117
|
+
* Convert OCR coordinates to tap-ready coordinates
|
|
118
|
+
* iOS: (ocrCoord * scaleFactor) / devicePixelRatio (points)
|
|
119
|
+
* Android: ocrCoord * scaleFactor (pixels)
|
|
120
|
+
*/
|
|
121
|
+
function toTapCoord(ocrCoord, scaleFactor, platform, devicePixelRatio = 3) {
|
|
122
|
+
const pixelCoord = ocrCoord * scaleFactor;
|
|
123
|
+
return platform === "ios" ? Math.round(pixelCoord / devicePixelRatio) : Math.round(pixelCoord);
|
|
124
|
+
}
|
|
125
|
+
/**
|
|
126
|
+
* Run OCR using EasyOCR (better for colored backgrounds)
|
|
127
|
+
*/
|
|
128
|
+
async function runEasyOCR(imageBuffer, scaleFactor, platform, devicePixelRatio) {
|
|
129
|
+
const startTime = Date.now();
|
|
130
|
+
const ocr = await getEasyOCR();
|
|
131
|
+
if (!ocr) {
|
|
132
|
+
return null;
|
|
133
|
+
}
|
|
134
|
+
// Write buffer to temp file (EasyOCR requires file path)
|
|
135
|
+
const tempPath = join(tmpdir(), `ocr-${randomUUID()}.png`);
|
|
136
|
+
try {
|
|
137
|
+
await writeFile(tempPath, imageBuffer);
|
|
138
|
+
const results = await withTimeout(ocr.readText(tempPath), 15000, "EasyOCR readText timeout");
|
|
139
|
+
const words = [];
|
|
140
|
+
const textParts = [];
|
|
141
|
+
let totalConfidence = 0;
|
|
142
|
+
for (const result of results) {
|
|
143
|
+
if (result.text && result.bbox) {
|
|
144
|
+
// EasyOCR bbox is [[x1,y1], [x2,y2], [x3,y3], [x4,y4]] (4 corners)
|
|
145
|
+
const x0 = Math.min(result.bbox[0][0], result.bbox[3][0]);
|
|
146
|
+
const y0 = Math.min(result.bbox[0][1], result.bbox[1][1]);
|
|
147
|
+
const x1 = Math.max(result.bbox[1][0], result.bbox[2][0]);
|
|
148
|
+
const y1 = Math.max(result.bbox[2][1], result.bbox[3][1]);
|
|
149
|
+
const centerX = Math.round((x0 + x1) / 2);
|
|
150
|
+
const centerY = Math.round((y0 + y1) / 2);
|
|
151
|
+
words.push({
|
|
152
|
+
text: result.text.trim(),
|
|
153
|
+
confidence: result.confidence * 100,
|
|
154
|
+
bbox: { x0, y0, x1, y1 },
|
|
155
|
+
center: { x: centerX, y: centerY },
|
|
156
|
+
tapCenter: {
|
|
157
|
+
x: toTapCoord(centerX, scaleFactor, platform, devicePixelRatio),
|
|
158
|
+
y: toTapCoord(centerY, scaleFactor, platform, devicePixelRatio)
|
|
159
|
+
}
|
|
160
|
+
});
|
|
161
|
+
textParts.push(result.text.trim());
|
|
162
|
+
totalConfidence += result.confidence;
|
|
163
|
+
}
|
|
164
|
+
}
|
|
165
|
+
return {
|
|
166
|
+
success: true,
|
|
167
|
+
fullText: textParts.join(" "),
|
|
168
|
+
confidence: results.length > 0 ? (totalConfidence / results.length) * 100 : 0,
|
|
169
|
+
words,
|
|
170
|
+
lines: [], // EasyOCR returns words/phrases, not lines
|
|
171
|
+
processingTimeMs: Date.now() - startTime,
|
|
172
|
+
engine: "easyocr"
|
|
173
|
+
};
|
|
174
|
+
}
|
|
175
|
+
finally {
|
|
176
|
+
// Clean up temp file
|
|
177
|
+
try {
|
|
178
|
+
await unlink(tempPath);
|
|
179
|
+
}
|
|
180
|
+
catch {
|
|
181
|
+
// Ignore cleanup errors
|
|
182
|
+
}
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
/**
|
|
186
|
+
* Run OCR using Tesseract (fallback)
|
|
187
|
+
*/
|
|
188
|
+
async function runTesseract(imageBuffer, scaleFactor, platform, devicePixelRatio) {
|
|
189
|
+
const startTime = Date.now();
|
|
190
|
+
try {
|
|
191
|
+
// Preprocess for Tesseract
|
|
192
|
+
const processedImage = await sharp(imageBuffer)
|
|
193
|
+
.normalize()
|
|
194
|
+
.sharpen({ sigma: 1.5 })
|
|
195
|
+
.toBuffer();
|
|
196
|
+
const worker = await getTesseractWorker();
|
|
197
|
+
const { data } = await worker.recognize(processedImage, {}, { blocks: true, text: true });
|
|
198
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
199
|
+
const anyData = data;
|
|
200
|
+
const allWords = [];
|
|
201
|
+
const allLines = [];
|
|
202
|
+
if (anyData.blocks && Array.isArray(anyData.blocks)) {
|
|
203
|
+
for (const block of anyData.blocks) {
|
|
204
|
+
if (block.paragraphs) {
|
|
205
|
+
for (const para of block.paragraphs) {
|
|
206
|
+
if (para.lines) {
|
|
207
|
+
for (const line of para.lines) {
|
|
208
|
+
if (line.text && line.bbox) {
|
|
209
|
+
const centerX = Math.round((line.bbox.x0 + line.bbox.x1) / 2);
|
|
210
|
+
const centerY = Math.round((line.bbox.y0 + line.bbox.y1) / 2);
|
|
211
|
+
allLines.push({
|
|
212
|
+
text: line.text.trim(),
|
|
213
|
+
confidence: line.confidence || 90,
|
|
214
|
+
bbox: line.bbox,
|
|
215
|
+
center: { x: centerX, y: centerY },
|
|
216
|
+
tapCenter: {
|
|
217
|
+
x: toTapCoord(centerX, scaleFactor, platform, devicePixelRatio),
|
|
218
|
+
y: toTapCoord(centerY, scaleFactor, platform, devicePixelRatio)
|
|
219
|
+
}
|
|
220
|
+
});
|
|
221
|
+
}
|
|
222
|
+
if (line.words) {
|
|
223
|
+
for (const word of line.words) {
|
|
224
|
+
if (word.text && word.bbox) {
|
|
225
|
+
const centerX = Math.round((word.bbox.x0 + word.bbox.x1) / 2);
|
|
226
|
+
const centerY = Math.round((word.bbox.y0 + word.bbox.y1) / 2);
|
|
227
|
+
allWords.push({
|
|
228
|
+
text: word.text.trim(),
|
|
229
|
+
confidence: word.confidence || 90,
|
|
230
|
+
bbox: word.bbox,
|
|
231
|
+
center: { x: centerX, y: centerY },
|
|
232
|
+
tapCenter: {
|
|
233
|
+
x: toTapCoord(centerX, scaleFactor, platform, devicePixelRatio),
|
|
234
|
+
y: toTapCoord(centerY, scaleFactor, platform, devicePixelRatio)
|
|
235
|
+
}
|
|
236
|
+
});
|
|
237
|
+
}
|
|
238
|
+
}
|
|
239
|
+
}
|
|
240
|
+
}
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
}
|
|
245
|
+
}
|
|
246
|
+
return {
|
|
247
|
+
success: true,
|
|
248
|
+
fullText: anyData.text || "",
|
|
249
|
+
confidence: anyData.confidence || 0,
|
|
250
|
+
words: allWords,
|
|
251
|
+
lines: allLines,
|
|
252
|
+
processingTimeMs: Date.now() - startTime,
|
|
253
|
+
engine: "tesseract"
|
|
254
|
+
};
|
|
255
|
+
}
|
|
256
|
+
catch {
|
|
257
|
+
return {
|
|
258
|
+
success: false,
|
|
259
|
+
fullText: "",
|
|
260
|
+
confidence: 0,
|
|
261
|
+
words: [],
|
|
262
|
+
lines: [],
|
|
263
|
+
processingTimeMs: Date.now() - startTime,
|
|
264
|
+
engine: "tesseract"
|
|
265
|
+
};
|
|
266
|
+
}
|
|
267
|
+
}
|
|
268
|
+
/**
|
|
269
|
+
* Main OCR function - tries EasyOCR first (better for colors), falls back to Tesseract
|
|
270
|
+
*/
|
|
271
|
+
export async function recognizeText(imageBuffer, options) {
|
|
272
|
+
const scaleFactor = options?.scaleFactor ?? 1;
|
|
273
|
+
const platform = options?.platform ?? "ios";
|
|
274
|
+
const engine = options?.engine ?? "auto";
|
|
275
|
+
const devicePixelRatio = options?.devicePixelRatio ?? 3;
|
|
276
|
+
// If tesseract explicitly requested, use it
|
|
277
|
+
if (engine === "tesseract") {
|
|
278
|
+
return runTesseract(imageBuffer, scaleFactor, platform, devicePixelRatio);
|
|
279
|
+
}
|
|
280
|
+
// If easyocr explicitly requested, try it (fail if not available)
|
|
281
|
+
if (engine === "easyocr") {
|
|
282
|
+
const easyResult = await runEasyOCR(imageBuffer, scaleFactor, platform, devicePixelRatio);
|
|
283
|
+
if (easyResult) {
|
|
284
|
+
return easyResult;
|
|
285
|
+
}
|
|
286
|
+
// EasyOCR not available, return error result
|
|
287
|
+
return {
|
|
288
|
+
success: false,
|
|
289
|
+
fullText: "",
|
|
290
|
+
confidence: 0,
|
|
291
|
+
words: [],
|
|
292
|
+
lines: [],
|
|
293
|
+
processingTimeMs: 0,
|
|
294
|
+
engine: "easyocr"
|
|
295
|
+
};
|
|
296
|
+
}
|
|
297
|
+
// Auto mode: Try EasyOCR first (better for white text on colored backgrounds)
|
|
298
|
+
const easyResult = await runEasyOCR(imageBuffer, scaleFactor, platform, devicePixelRatio);
|
|
299
|
+
if (easyResult) {
|
|
300
|
+
return easyResult;
|
|
301
|
+
}
|
|
302
|
+
// Fall back to Tesseract
|
|
303
|
+
return runTesseract(imageBuffer, scaleFactor, platform, devicePixelRatio);
|
|
304
|
+
}
|
|
305
|
+
export async function terminateOCRWorker() {
|
|
306
|
+
if (cachedTesseractWorker) {
|
|
307
|
+
await cachedTesseractWorker.terminate();
|
|
308
|
+
cachedTesseractWorker = null;
|
|
309
|
+
tesseractWorkerPromise = null;
|
|
310
|
+
}
|
|
311
|
+
if (easyOCRInstance) {
|
|
312
|
+
try {
|
|
313
|
+
await easyOCRInstance.close();
|
|
314
|
+
}
|
|
315
|
+
catch {
|
|
316
|
+
// Ignore close errors
|
|
317
|
+
}
|
|
318
|
+
easyOCRInstance = null;
|
|
319
|
+
easyOCRInitPromise = null;
|
|
320
|
+
}
|
|
321
|
+
}
|
|
322
|
+
//# sourceMappingURL=ocr.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"ocr.js","sourceRoot":"","sources":["../../src/core/ocr.ts"],"names":[],"mappings":"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"}
|
package/build/core/state.d.ts
CHANGED
|
@@ -8,4 +8,7 @@ export declare const bundleErrorBuffer: BundleErrorBuffer;
|
|
|
8
8
|
export declare const connectedApps: Map<string, ConnectedApp>;
|
|
9
9
|
export declare const pendingExecutions: Map<number, PendingExecution>;
|
|
10
10
|
export declare function getNextMessageId(): number;
|
|
11
|
+
export declare function getActiveSimulatorUdid(): string | null;
|
|
12
|
+
export declare function setActiveSimulatorUdid(udid: string | null, sourceAppKey?: string): void;
|
|
13
|
+
export declare function clearActiveSimulatorIfSource(appKey: string): void;
|
|
11
14
|
//# sourceMappingURL=state.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAyB,MAAM,aAAa,CAAC;AAGvE,eAAO,MAAM,SAAS,WAAsB,CAAC;AAG7C,eAAO,MAAM,aAAa,eAAyB,CAAC;AAGpD,eAAO,MAAM,iBAAiB,mBAA6B,CAAC;AAM5D,eAAO,MAAM,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAa,CAAC;AAGlE,eAAO,MAAM,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAa,CAAC;AAK1E,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC"}
|
|
1
|
+
{"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAC5D,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAyB,MAAM,aAAa,CAAC;AAGvE,eAAO,MAAM,SAAS,WAAsB,CAAC;AAG7C,eAAO,MAAM,aAAa,eAAyB,CAAC;AAGpD,eAAO,MAAM,iBAAiB,mBAA6B,CAAC;AAM5D,eAAO,MAAM,aAAa,EAAE,GAAG,CAAC,MAAM,EAAE,YAAY,CAAa,CAAC;AAGlE,eAAO,MAAM,iBAAiB,EAAE,GAAG,CAAC,MAAM,EAAE,gBAAgB,CAAa,CAAC;AAK1E,wBAAgB,gBAAgB,IAAI,MAAM,CAEzC;AAOD,wBAAgB,sBAAsB,IAAI,MAAM,GAAG,IAAI,CAEtD;AAED,wBAAgB,sBAAsB,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,EAAE,YAAY,CAAC,EAAE,MAAM,GAAG,IAAI,CAGvF;AAED,wBAAgB,4BAA4B,CAAC,MAAM,EAAE,MAAM,GAAG,IAAI,CAKjE"}
|
package/build/core/state.js
CHANGED
|
@@ -18,4 +18,21 @@ let _messageId = 1;
|
|
|
18
18
|
export function getNextMessageId() {
|
|
19
19
|
return _messageId++;
|
|
20
20
|
}
|
|
21
|
+
// Active iOS simulator UDID (resolved from Metro connection)
|
|
22
|
+
// This links the Metro-connected device to its iOS simulator
|
|
23
|
+
let _activeSimulatorUdid = null;
|
|
24
|
+
let _activeSimulatorSourceAppKey = null;
|
|
25
|
+
export function getActiveSimulatorUdid() {
|
|
26
|
+
return _activeSimulatorUdid;
|
|
27
|
+
}
|
|
28
|
+
export function setActiveSimulatorUdid(udid, sourceAppKey) {
|
|
29
|
+
_activeSimulatorUdid = udid;
|
|
30
|
+
_activeSimulatorSourceAppKey = sourceAppKey || null;
|
|
31
|
+
}
|
|
32
|
+
export function clearActiveSimulatorIfSource(appKey) {
|
|
33
|
+
if (_activeSimulatorSourceAppKey === appKey) {
|
|
34
|
+
_activeSimulatorUdid = null;
|
|
35
|
+
_activeSimulatorSourceAppKey = null;
|
|
36
|
+
}
|
|
37
|
+
}
|
|
21
38
|
//# sourceMappingURL=state.js.map
|
package/build/core/state.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,oBAAoB;AACpB,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;AAE7C,wBAAwB;AACxB,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;AAEpD,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAE5D,wDAAwD;AACxD,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;AAEzC,iBAAiB;AACjB,MAAM,CAAC,MAAM,aAAa,GAA8B,IAAI,GAAG,EAAE,CAAC;AAElE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAkC,IAAI,GAAG,EAAE,CAAC;AAE1E,yBAAyB;AACzB,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,MAAM,UAAU,gBAAgB;IAC5B,OAAO,UAAU,EAAE,CAAC;AACxB,CAAC"}
|
|
1
|
+
{"version":3,"file":"state.js","sourceRoot":"","sources":["../../src/core/state.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,SAAS,EAAE,MAAM,WAAW,CAAC;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC;AAC7C,OAAO,EAAE,iBAAiB,EAAE,qBAAqB,EAAE,MAAM,aAAa,CAAC;AAEvE,oBAAoB;AACpB,MAAM,CAAC,MAAM,SAAS,GAAG,IAAI,SAAS,CAAC,IAAI,CAAC,CAAC;AAE7C,wBAAwB;AACxB,MAAM,CAAC,MAAM,aAAa,GAAG,IAAI,aAAa,CAAC,GAAG,CAAC,CAAC;AAEpD,6BAA6B;AAC7B,MAAM,CAAC,MAAM,iBAAiB,GAAG,IAAI,iBAAiB,CAAC,GAAG,CAAC,CAAC;AAE5D,wDAAwD;AACxD,qBAAqB,CAAC,iBAAiB,CAAC,CAAC;AAEzC,iBAAiB;AACjB,MAAM,CAAC,MAAM,aAAa,GAA8B,IAAI,GAAG,EAAE,CAAC;AAElE,6CAA6C;AAC7C,MAAM,CAAC,MAAM,iBAAiB,GAAkC,IAAI,GAAG,EAAE,CAAC;AAE1E,yBAAyB;AACzB,IAAI,UAAU,GAAG,CAAC,CAAC;AAEnB,MAAM,UAAU,gBAAgB;IAC5B,OAAO,UAAU,EAAE,CAAC;AACxB,CAAC;AAED,6DAA6D;AAC7D,6DAA6D;AAC7D,IAAI,oBAAoB,GAAkB,IAAI,CAAC;AAC/C,IAAI,4BAA4B,GAAkB,IAAI,CAAC;AAEvD,MAAM,UAAU,sBAAsB;IAClC,OAAO,oBAAoB,CAAC;AAChC,CAAC;AAED,MAAM,UAAU,sBAAsB,CAAC,IAAmB,EAAE,YAAqB;IAC7E,oBAAoB,GAAG,IAAI,CAAC;IAC5B,4BAA4B,GAAG,YAAY,IAAI,IAAI,CAAC;AACxD,CAAC;AAED,MAAM,UAAU,4BAA4B,CAAC,MAAc;IACvD,IAAI,4BAA4B,KAAK,MAAM,EAAE,CAAC;QAC1C,oBAAoB,GAAG,IAAI,CAAC;QAC5B,4BAA4B,GAAG,IAAI,CAAC;IACxC,CAAC;AACL,CAAC"}
|
package/build/core/types.d.ts
CHANGED
|
@@ -65,4 +65,33 @@ export interface NetworkRequest {
|
|
|
65
65
|
error?: string;
|
|
66
66
|
completed: boolean;
|
|
67
67
|
}
|
|
68
|
+
export interface ConnectionState {
|
|
69
|
+
status: "connected" | "disconnected" | "reconnecting";
|
|
70
|
+
lastConnectedTime: Date | null;
|
|
71
|
+
lastDisconnectTime: Date | null;
|
|
72
|
+
reconnectionAttempts: number;
|
|
73
|
+
connectionGaps: ConnectionGap[];
|
|
74
|
+
}
|
|
75
|
+
export interface ConnectionGap {
|
|
76
|
+
disconnectedAt: Date;
|
|
77
|
+
reconnectedAt: Date | null;
|
|
78
|
+
durationMs: number | null;
|
|
79
|
+
reason: string;
|
|
80
|
+
}
|
|
81
|
+
export interface ConnectionMetadata {
|
|
82
|
+
port: number;
|
|
83
|
+
deviceInfo: DeviceInfo;
|
|
84
|
+
webSocketUrl: string;
|
|
85
|
+
}
|
|
86
|
+
export interface ReconnectionConfig {
|
|
87
|
+
enabled: boolean;
|
|
88
|
+
maxAttempts: number;
|
|
89
|
+
initialDelayMs: number;
|
|
90
|
+
maxDelayMs: number;
|
|
91
|
+
backoffMultiplier: number;
|
|
92
|
+
}
|
|
93
|
+
export interface ConnectOptions {
|
|
94
|
+
isReconnection?: boolean;
|
|
95
|
+
reconnectionConfig?: ReconnectionConfig;
|
|
96
|
+
}
|
|
68
97
|
//# 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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"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpServerStandalone.d.ts","sourceRoot":"","sources":["../src/httpServerStandalone.ts"],"names":[],"mappings":";AACA;;;GAGG"}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
#!/usr/bin/env node
|
|
2
|
+
/**
|
|
3
|
+
* Standalone HTTP Debug Server
|
|
4
|
+
* Can be run independently and hot-reloaded without restarting the MCP session
|
|
5
|
+
*/
|
|
6
|
+
import { startDebugHttpServer } from "./core/index.js";
|
|
7
|
+
const PORT = parseInt(process.env.DEBUG_SERVER_PORT || "9876", 10);
|
|
8
|
+
console.log(`[HTTP Server] Starting standalone debug server on port ${PORT}...`);
|
|
9
|
+
startDebugHttpServer({ port: PORT })
|
|
10
|
+
.then((actualPort) => {
|
|
11
|
+
console.log(`[HTTP Server] Running at http://localhost:${actualPort}`);
|
|
12
|
+
console.log(`[HTTP Server] Ready for hot-reload. Restart this process to apply changes.`);
|
|
13
|
+
// Send port to parent process if spawned
|
|
14
|
+
if (process.send) {
|
|
15
|
+
process.send({ type: "ready", port: actualPort });
|
|
16
|
+
}
|
|
17
|
+
})
|
|
18
|
+
.catch((err) => {
|
|
19
|
+
console.error(`[HTTP Server] Failed to start:`, err);
|
|
20
|
+
process.exit(1);
|
|
21
|
+
});
|
|
22
|
+
// Handle graceful shutdown
|
|
23
|
+
process.on("SIGTERM", () => {
|
|
24
|
+
console.log(`[HTTP Server] Shutting down...`);
|
|
25
|
+
process.exit(0);
|
|
26
|
+
});
|
|
27
|
+
process.on("SIGINT", () => {
|
|
28
|
+
console.log(`[HTTP Server] Interrupted, shutting down...`);
|
|
29
|
+
process.exit(0);
|
|
30
|
+
});
|
|
31
|
+
//# sourceMappingURL=httpServerStandalone.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"httpServerStandalone.js","sourceRoot":"","sources":["../src/httpServerStandalone.ts"],"names":[],"mappings":";AACA;;;GAGG;AAEH,OAAO,EAAE,oBAAoB,EAAE,MAAM,iBAAiB,CAAC;AAEvD,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,iBAAiB,IAAI,MAAM,EAAE,EAAE,CAAC,CAAC;AAEnE,OAAO,CAAC,GAAG,CAAC,0DAA0D,IAAI,KAAK,CAAC,CAAC;AAEjF,oBAAoB,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC;KAC/B,IAAI,CAAC,CAAC,UAAU,EAAE,EAAE;IACjB,OAAO,CAAC,GAAG,CAAC,6CAA6C,UAAU,EAAE,CAAC,CAAC;IACvE,OAAO,CAAC,GAAG,CAAC,4EAA4E,CAAC,CAAC;IAE1F,yCAAyC;IACzC,IAAI,OAAO,CAAC,IAAI,EAAE,CAAC;QACf,OAAO,CAAC,IAAI,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,CAAC,CAAC;IACtD,CAAC;AACL,CAAC,CAAC;KACD,KAAK,CAAC,CAAC,GAAG,EAAE,EAAE;IACX,OAAO,CAAC,KAAK,CAAC,gCAAgC,EAAE,GAAG,CAAC,CAAC;IACrD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEP,2BAA2B;AAC3B,OAAO,CAAC,EAAE,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,OAAO,CAAC,GAAG,CAAC,gCAAgC,CAAC,CAAC;IAC9C,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC;AAEH,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,OAAO,CAAC,GAAG,CAAC,6CAA6C,CAAC,CAAC;IAC3D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AACpB,CAAC,CAAC,CAAC"}
|