react-native-ai-devtools 1.4.7 → 1.4.9
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/__tests__/unit/tap.test.js +107 -9
- package/build/__tests__/unit/tap.test.js.map +1 -1
- package/build/core/index.d.ts +1 -1
- package/build/core/index.d.ts.map +1 -1
- package/build/core/index.js +1 -1
- package/build/core/index.js.map +1 -1
- package/build/core/ios.d.ts +13 -0
- package/build/core/ios.d.ts.map +1 -1
- package/build/core/ios.js +49 -1
- package/build/core/ios.js.map +1 -1
- package/build/core/logbox.d.ts +12 -1
- package/build/core/logbox.d.ts.map +1 -1
- package/build/core/logbox.js +112 -2
- package/build/core/logbox.js.map +1 -1
- package/build/core/ocr.d.ts +6 -0
- package/build/core/ocr.d.ts.map +1 -1
- package/build/core/ocr.js +9 -14
- package/build/core/ocr.js.map +1 -1
- package/build/index.js +170 -20
- package/build/index.js.map +1 -1
- package/build/pro/screenshot-diff.d.ts +3 -1
- package/build/pro/screenshot-diff.d.ts.map +1 -1
- package/build/pro/screenshot-diff.js +12 -5
- package/build/pro/screenshot-diff.js.map +1 -1
- package/build/pro/tap.d.ts +16 -2
- package/build/pro/tap.d.ts.map +1 -1
- package/build/pro/tap.js +118 -48
- package/build/pro/tap.js.map +1 -1
- package/package.json +1 -1
package/build/core/logbox.js
CHANGED
|
@@ -68,6 +68,68 @@ ${READ_LOGBOX_STATE}
|
|
|
68
68
|
fatals: summary.fatal
|
|
69
69
|
});
|
|
70
70
|
})()`;
|
|
71
|
+
// ── Push & Ignore Expression Builders ──
|
|
72
|
+
function buildPushExpression(message, level, expanded, subtitle) {
|
|
73
|
+
const escapedMessage = message.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/\n/g, "\\n");
|
|
74
|
+
const escapedSubtitle = subtitle ? subtitle.replace(/\\/g, "\\\\").replace(/'/g, "\\'") : "MCP Server";
|
|
75
|
+
return `(function() {
|
|
76
|
+
${FIND_LOGBOX_DATA}
|
|
77
|
+
try {
|
|
78
|
+
var pushCategory = 'rn-ai-devtools-push-' + Date.now();
|
|
79
|
+
LogBoxData.addLog({
|
|
80
|
+
level: '${level}',
|
|
81
|
+
message: { content: '${escapedMessage}', substitutions: [] },
|
|
82
|
+
category: pushCategory,
|
|
83
|
+
componentStack: []
|
|
84
|
+
});${expanded ? `
|
|
85
|
+
setTimeout(function() {
|
|
86
|
+
try {
|
|
87
|
+
var state = null;
|
|
88
|
+
var sub = LogBoxData.observe(function(data) { state = data; });
|
|
89
|
+
if (sub && sub.unsubscribe) sub.unsubscribe();
|
|
90
|
+
if (state && state.logs) {
|
|
91
|
+
var lastIndex = 0;
|
|
92
|
+
var i = 0;
|
|
93
|
+
state.logs.forEach(function(log) {
|
|
94
|
+
if (log.stack && log.category === pushCategory) {
|
|
95
|
+
log.stack.length = 0;
|
|
96
|
+
log.stack.push({
|
|
97
|
+
methodName: 'RN AI DevTools',
|
|
98
|
+
file: '${escapedSubtitle}',
|
|
99
|
+
lineNumber: 0,
|
|
100
|
+
column: 0
|
|
101
|
+
});
|
|
102
|
+
}
|
|
103
|
+
lastIndex = i;
|
|
104
|
+
i++;
|
|
105
|
+
});
|
|
106
|
+
LogBoxData.setSelectedLog(lastIndex);
|
|
107
|
+
}
|
|
108
|
+
} catch(e) {}
|
|
109
|
+
}, 100);` : ""}
|
|
110
|
+
return JSON.stringify({ success: true });
|
|
111
|
+
} catch(e) {
|
|
112
|
+
return JSON.stringify({ success: false, error: e.message });
|
|
113
|
+
}
|
|
114
|
+
})()`;
|
|
115
|
+
}
|
|
116
|
+
function buildIgnoreExpression(patterns) {
|
|
117
|
+
const patternsJson = JSON.stringify(patterns);
|
|
118
|
+
return `(function() {
|
|
119
|
+
${FIND_LOGBOX_DATA}
|
|
120
|
+
try {
|
|
121
|
+
LogBoxData.addIgnorePatterns(${patternsJson});
|
|
122
|
+
var current = LogBoxData.getIgnorePatterns();
|
|
123
|
+
var result = [];
|
|
124
|
+
if (current && typeof current.forEach === 'function') {
|
|
125
|
+
current.forEach(function(p) { result.push(typeof p === 'string' ? p : String(p)); });
|
|
126
|
+
}
|
|
127
|
+
return JSON.stringify({ success: true, patterns: result });
|
|
128
|
+
} catch(e) {
|
|
129
|
+
return JSON.stringify({ success: false, error: e.message });
|
|
130
|
+
}
|
|
131
|
+
})()`;
|
|
132
|
+
}
|
|
71
133
|
// ── Public API ──
|
|
72
134
|
/**
|
|
73
135
|
* Read current LogBox state without modifying it.
|
|
@@ -101,6 +163,54 @@ export async function dismissLogBox(device) {
|
|
|
101
163
|
return null;
|
|
102
164
|
}
|
|
103
165
|
}
|
|
166
|
+
/**
|
|
167
|
+
* Push a message into LogBox via LogBoxData.addLog().
|
|
168
|
+
* Default level is "error" because only errors produce a visible bottom banner.
|
|
169
|
+
* Warnings are stored but not visually shown unless LogBox is already open.
|
|
170
|
+
*/
|
|
171
|
+
export async function pushLogBox(message, level = "error", expanded = false, target = "logbox", subtitle, device) {
|
|
172
|
+
if (target === "metro") {
|
|
173
|
+
try {
|
|
174
|
+
const escapedMessage = message.replace(/\\/g, "\\\\").replace(/'/g, "\\'").replace(/\n/g, "\\n");
|
|
175
|
+
const result = await executeInApp(`(function() { console.log('${escapedMessage}'); return JSON.stringify({ success: true }); })()`, true, { timeoutMs: 5000 }, device);
|
|
176
|
+
if (!result.success || !result.result)
|
|
177
|
+
return false;
|
|
178
|
+
const parsed = JSON.parse(result.result);
|
|
179
|
+
return parsed.success === true;
|
|
180
|
+
}
|
|
181
|
+
catch {
|
|
182
|
+
return false;
|
|
183
|
+
}
|
|
184
|
+
}
|
|
185
|
+
try {
|
|
186
|
+
const result = await executeInApp(buildPushExpression(message, level, expanded, subtitle), true, { timeoutMs: 5000 }, device);
|
|
187
|
+
if (!result.success || !result.result)
|
|
188
|
+
return false;
|
|
189
|
+
const parsed = JSON.parse(result.result);
|
|
190
|
+
return parsed.success === true;
|
|
191
|
+
}
|
|
192
|
+
catch {
|
|
193
|
+
return false;
|
|
194
|
+
}
|
|
195
|
+
}
|
|
196
|
+
/**
|
|
197
|
+
* Add ignore patterns to suppress future LogBox entries.
|
|
198
|
+
* Returns the full list of active patterns after adding, or null if unavailable.
|
|
199
|
+
*/
|
|
200
|
+
export async function addLogBoxIgnorePatterns(patterns, device) {
|
|
201
|
+
try {
|
|
202
|
+
const result = await executeInApp(buildIgnoreExpression(patterns), true, { timeoutMs: 5000 }, device);
|
|
203
|
+
if (!result.success || !result.result)
|
|
204
|
+
return null;
|
|
205
|
+
const parsed = JSON.parse(result.result);
|
|
206
|
+
if (parsed.success)
|
|
207
|
+
return parsed.patterns;
|
|
208
|
+
return null;
|
|
209
|
+
}
|
|
210
|
+
catch {
|
|
211
|
+
return null;
|
|
212
|
+
}
|
|
213
|
+
}
|
|
104
214
|
/**
|
|
105
215
|
* Build a warning string for appending to screenshot/OCR tool responses.
|
|
106
216
|
* Returns empty string if no LogBox entries detected.
|
|
@@ -116,10 +226,10 @@ export function formatLogBoxWarning(state) {
|
|
|
116
226
|
if (state.warnings > 0)
|
|
117
227
|
parts.push(`${state.warnings} warning${state.warnings > 1 ? "s" : ""}`);
|
|
118
228
|
return (`\n\nWarning: LogBox overlay detected (${parts.join(", ")}). Bottom UI may be obstructed.` +
|
|
119
|
-
`\nUse
|
|
229
|
+
`\nUse logbox with action "dismiss" to clear (dismissed content will be returned).`);
|
|
120
230
|
}
|
|
121
231
|
/**
|
|
122
|
-
* Format dismissed LogBox entries for the
|
|
232
|
+
* Format dismissed LogBox entries for the logbox tool response.
|
|
123
233
|
* Full messages in raw data, truncated in display.
|
|
124
234
|
*/
|
|
125
235
|
export function formatDismissedEntries(result) {
|
package/build/core/logbox.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"logbox.js","sourceRoot":"","sources":["../../src/core/logbox.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,eAAe,CAAC;AA0B7C,gCAAgC;AAChC,oEAAoE;AACpE,oDAAoD;AAEpD,MAAM,gBAAgB,GAAG;;;;;;;;;;;;;;;;;;;;CAoBxB,CAAC;AAEF,MAAM,iBAAiB,GAAG;;;;;;;;;;;;;;;;;;;;CAoBzB,CAAC;AAEF,MAAM,iBAAiB,GAAG;EACxB,gBAAgB;EAChB,iBAAiB;;;;;;;;KAQd,CAAC;AAEN,MAAM,kBAAkB,GAAG;EACzB,gBAAgB;EAChB,iBAAiB;;;;;;;;;;KAUd,CAAC;AAEN,mBAAmB;AAEnB;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,YAAY,CAAC,MAAe;IAC9C,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QACxF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,CAAC,KAAK,UAAU,aAAa,CAAC,MAAe;IAC/C,IAAI,CAAC;QACD,MAAM,MAAM,GAAG,MAAM,YAAY,CAAC,kBAAkB,EAAE,IAAI,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,EAAE,MAAM,CAAC,CAAC;QACzF,IAAI,CAAC,MAAM,CAAC,OAAO,IAAI,CAAC,MAAM,CAAC,MAAM;YAAE,OAAO,IAAI,CAAC;QACnD,MAAM,MAAM,GAAG,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QACzC,OAAO,MAAM,CAAC;IAClB,CAAC;IAAC,MAAM,CAAC;QACL,OAAO,IAAI,CAAC;IAChB,CAAC;AACL,CAAC;AAED;;;GAGG;AACH,MAAM,UAAU,mBAAmB,CAAC,KAAkB;IAClD,IAAI,KAAK,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAEjC,MAAM,KAAK,GAAa,EAAE,CAAC;IAC3B,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,SAAS,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxF,IAAI,KAAK,CAAC,MAAM,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,MAAM,SAAS,KAAK,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IACxF,IAAI,KAAK,CAAC,QAAQ,GAAG,CAAC;QAAE,KAAK,CAAC,IAAI,CAAC,GAAG,KAAK,CAAC,QAAQ,WAAW,KAAK,CAAC,QAAQ,GAAG,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC;IAEhG,OAAO,CACH,yCAAyC,KAAK,CAAC,IAAI,CAAC,IAAI,CAAC,iCAAiC;QAC1F,
|
|
1
|
+
{"version":3,"file":"logbox.js","sourceRoot":"","sources":["../../src/core/logbox.ts"],"names":[],"mappings":"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"}
|
package/build/core/ocr.d.ts
CHANGED
|
@@ -60,6 +60,12 @@ export interface OCRResult {
|
|
|
60
60
|
* @1x devices: Very old (rare)
|
|
61
61
|
*/
|
|
62
62
|
export declare function inferIOSDevicePixelRatio(width: number, height: number): number;
|
|
63
|
+
/**
|
|
64
|
+
* Convert OCR bounding box coordinate to screenshot-image-pixel space.
|
|
65
|
+
* OCR runs on the downscaled image, so coordinates are already in image-pixel space.
|
|
66
|
+
* We return them as-is — tap() handles un-downscaling and platform conversion.
|
|
67
|
+
*/
|
|
68
|
+
export declare function toTapCoord(ocrCoord: number, _scaleFactor: number): number;
|
|
63
69
|
/**
|
|
64
70
|
* Run OCR — tries cloud (Google Vision) first, falls back to local EasyOCR.
|
|
65
71
|
*/
|
package/build/core/ocr.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ocr.d.ts","sourceRoot":"","sources":["../../src/core/ocr.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE;QACJ,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;IACF,wEAAwE;IACxE,SAAS,EAAE;QACP,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;CACL;AAED,MAAM,WAAW,UAAU;IACvB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAC7B,0GAA0G;IAC1G,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE;QACJ,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;IACF,wEAAwE;IACxE,SAAS,EAAE;QACP,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;CACL;AAED,MAAM,WAAW,SAAS;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;CAC/B;AA6GD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAsB9E;
|
|
1
|
+
{"version":3,"file":"ocr.d.ts","sourceRoot":"","sources":["../../src/core/ocr.ts"],"names":[],"mappings":"AAiBA,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE;QACJ,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;IACF,wEAAwE;IACxE,SAAS,EAAE;QACP,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;CACL;AAED,MAAM,WAAW,UAAU;IACvB,oDAAoD;IACpD,WAAW,CAAC,EAAE,MAAM,CAAC;IACrB,mFAAmF;IACnF,QAAQ,CAAC,EAAE,KAAK,GAAG,SAAS,CAAC;IAC7B,0GAA0G;IAC1G,gBAAgB,CAAC,EAAE,MAAM,CAAC;CAC7B;AAED,MAAM,WAAW,OAAO;IACpB,IAAI,EAAE,MAAM,CAAC;IACb,UAAU,EAAE,MAAM,CAAC;IACnB,IAAI,EAAE;QACF,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;QACX,EAAE,EAAE,MAAM,CAAC;KACd,CAAC;IACF,MAAM,EAAE;QACJ,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;IACF,wEAAwE;IACxE,SAAS,EAAE;QACP,CAAC,EAAE,MAAM,CAAC;QACV,CAAC,EAAE,MAAM,CAAC;KACb,CAAC;CACL;AAED,MAAM,WAAW,SAAS;IACtB,OAAO,EAAE,OAAO,CAAC;IACjB,QAAQ,EAAE,MAAM,CAAC;IACjB,UAAU,EAAE,MAAM,CAAC;IACnB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,KAAK,EAAE,OAAO,EAAE,CAAC;IACjB,gBAAgB,EAAE,MAAM,CAAC;IACzB,MAAM,EAAE,SAAS,GAAG,OAAO,CAAC;CAC/B;AA6GD;;;;;GAKG;AACH,wBAAgB,wBAAwB,CAAC,KAAK,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,MAAM,CAsB9E;AAED;;;;GAIG;AACH,wBAAgB,UAAU,CAAC,QAAQ,EAAE,MAAM,EAAE,YAAY,EAAE,MAAM,GAAG,MAAM,CAEzE;AAuHD;;GAEG;AACH,wBAAsB,aAAa,CAAC,WAAW,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,UAAU,GAAG,OAAO,CAAC,SAAS,CAAC,CASjG;AAgFD,wBAAsB,kBAAkB,IAAI,OAAO,CAAC,IAAI,CAAC,CAUxD"}
|
package/build/core/ocr.js
CHANGED
|
@@ -128,13 +128,12 @@ export function inferIOSDevicePixelRatio(width, height) {
|
|
|
128
128
|
return 2;
|
|
129
129
|
}
|
|
130
130
|
/**
|
|
131
|
-
* Convert OCR
|
|
132
|
-
*
|
|
133
|
-
*
|
|
131
|
+
* Convert OCR bounding box coordinate to screenshot-image-pixel space.
|
|
132
|
+
* OCR runs on the downscaled image, so coordinates are already in image-pixel space.
|
|
133
|
+
* We return them as-is — tap() handles un-downscaling and platform conversion.
|
|
134
134
|
*/
|
|
135
|
-
function toTapCoord(ocrCoord,
|
|
136
|
-
|
|
137
|
-
return platform === "ios" ? Math.round(pixelCoord / devicePixelRatio) : Math.round(pixelCoord);
|
|
135
|
+
export function toTapCoord(ocrCoord, _scaleFactor) {
|
|
136
|
+
return Math.round(ocrCoord);
|
|
138
137
|
}
|
|
139
138
|
/**
|
|
140
139
|
* Run OCR via Cloudflare Worker → Google Cloud Vision.
|
|
@@ -142,8 +141,6 @@ function toTapCoord(ocrCoord, scaleFactor, platform, devicePixelRatio = 3) {
|
|
|
142
141
|
*/
|
|
143
142
|
async function recognizeTextCloud(imageBuffer, options) {
|
|
144
143
|
const scaleFactor = options?.scaleFactor ?? 1;
|
|
145
|
-
const platform = options?.platform ?? "ios";
|
|
146
|
-
const devicePixelRatio = options?.devicePixelRatio ?? 3;
|
|
147
144
|
const startTime = Date.now();
|
|
148
145
|
const body = new Uint8Array(imageBuffer);
|
|
149
146
|
const fetchOptions = {
|
|
@@ -208,8 +205,8 @@ async function recognizeTextCloud(imageBuffer, options) {
|
|
|
208
205
|
bbox: w.bbox,
|
|
209
206
|
center: { x: centerX, y: centerY },
|
|
210
207
|
tapCenter: {
|
|
211
|
-
x: toTapCoord(centerX, scaleFactor
|
|
212
|
-
y: toTapCoord(centerY, scaleFactor
|
|
208
|
+
x: toTapCoord(centerX, scaleFactor),
|
|
209
|
+
y: toTapCoord(centerY, scaleFactor),
|
|
213
210
|
},
|
|
214
211
|
};
|
|
215
212
|
});
|
|
@@ -241,8 +238,6 @@ export async function recognizeText(imageBuffer, options) {
|
|
|
241
238
|
*/
|
|
242
239
|
async function recognizeTextLocal(imageBuffer, options) {
|
|
243
240
|
const scaleFactor = options?.scaleFactor ?? 1;
|
|
244
|
-
const platform = options?.platform ?? "ios";
|
|
245
|
-
const devicePixelRatio = options?.devicePixelRatio ?? 3;
|
|
246
241
|
const startTime = Date.now();
|
|
247
242
|
let ocr;
|
|
248
243
|
try {
|
|
@@ -275,8 +270,8 @@ async function recognizeTextLocal(imageBuffer, options) {
|
|
|
275
270
|
bbox: { x0, y0, x1, y1 },
|
|
276
271
|
center: { x: centerX, y: centerY },
|
|
277
272
|
tapCenter: {
|
|
278
|
-
x: toTapCoord(centerX, scaleFactor
|
|
279
|
-
y: toTapCoord(centerY, scaleFactor
|
|
273
|
+
x: toTapCoord(centerX, scaleFactor),
|
|
274
|
+
y: toTapCoord(centerY, scaleFactor),
|
|
280
275
|
},
|
|
281
276
|
});
|
|
282
277
|
textParts.push(result.text.trim());
|
package/build/core/ocr.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"ocr.js","sourceRoot":"","sources":["../../src/core/ocr.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"ocr.js","sourceRoot":"","sources":["../../src/core/ocr.ts"],"names":[],"mappings":"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"}
|
package/build/index.js
CHANGED
|
@@ -47,8 +47,8 @@ startDebugHttpServer, getDebugServerPort,
|
|
|
47
47
|
initTelemetry, trackToolInvocation, getTargetPlatform,
|
|
48
48
|
// Format utilities (TONL)
|
|
49
49
|
formatLogsAsTonl, formatNetworkAsTonl,
|
|
50
|
-
// LogBox detection
|
|
51
|
-
detectLogBox, formatLogBoxWarning, dismissLogBox, formatDismissedEntries } from "./core/index.js";
|
|
50
|
+
// LogBox detection & control
|
|
51
|
+
detectLogBox, formatLogBoxWarning, dismissLogBox, formatDismissedEntries, pushLogBox, addLogBoxIgnorePatterns } from "./core/index.js";
|
|
52
52
|
// Helper: resolve log buffer for a device (or create a merged buffer from all devices)
|
|
53
53
|
function resolveLogBuffer(device) {
|
|
54
54
|
if (device) {
|
|
@@ -2234,33 +2234,156 @@ registerToolWithTelemetry("reload_app", {
|
|
|
2234
2234
|
]
|
|
2235
2235
|
};
|
|
2236
2236
|
});
|
|
2237
|
-
// Tool:
|
|
2238
|
-
registerToolWithTelemetry("
|
|
2239
|
-
description: "
|
|
2240
|
-
"
|
|
2241
|
-
"
|
|
2237
|
+
// Tool: LogBox control (replaces dismiss_logbox)
|
|
2238
|
+
registerToolWithTelemetry("logbox", {
|
|
2239
|
+
description: "Interact with React Native's LogBox overlay (dev mode only). " +
|
|
2240
|
+
'Actions: "dismiss" clears all entries and returns their content. ' +
|
|
2241
|
+
'"push" displays a message in the LogBox error banner (visible to the developer watching the device). ' +
|
|
2242
|
+
'"ignore" adds patterns to suppress future LogBox entries for this session. ' +
|
|
2243
|
+
'"detect" reads current LogBox state without modifying it. ' +
|
|
2242
2244
|
"Only works in __DEV__ mode — LogBox does not exist in production builds.",
|
|
2243
2245
|
inputSchema: {
|
|
2246
|
+
action: z.enum(["dismiss", "push", "ignore", "detect"]).describe('Action to perform: "dismiss", "push", "ignore", or "detect"'),
|
|
2247
|
+
message: z.string().optional().describe('Message to push into LogBox (required when action="push")'),
|
|
2248
|
+
level: z.enum(["error", "warning"]).optional().describe('LogBox level for push (default: "error"). Only "error" shows a visible bottom banner; "warning" is stored but not visually shown unless LogBox is already open'),
|
|
2249
|
+
expanded: z.boolean().optional().describe('When true, opens the full-screen LogBox detail view instead of the minimized bottom banner. Useful for important messages with clickable URLs (default: false)'),
|
|
2250
|
+
subtitle: z.string().optional().describe('Additional info shown in the call stack area when expanded=true (default: "MCP Server"). Use for context like "License Check", "Usage Limit", etc.'),
|
|
2251
|
+
target: z.enum(["logbox", "metro"]).optional().describe('Where to push the message (default: "logbox"). "logbox" shows on device screen, "metro" outputs to Metro terminal via console.log'),
|
|
2252
|
+
patterns: z.array(z.string()).optional().describe('Patterns to ignore (required when action="ignore"), e.g. ["[APOLLO]", "deprecated"]'),
|
|
2244
2253
|
device: z.string().optional().describe("Target device name (substring match). Omit for default device. Run get_apps to see connected devices.")
|
|
2245
2254
|
}
|
|
2246
|
-
}, async ({ device }) => {
|
|
2247
|
-
|
|
2248
|
-
|
|
2255
|
+
}, async ({ action, message, level, expanded, subtitle, target, patterns, device }) => {
|
|
2256
|
+
if (action === "dismiss") {
|
|
2257
|
+
const result = await dismissLogBox(device);
|
|
2258
|
+
if (result === null) {
|
|
2259
|
+
return {
|
|
2260
|
+
content: [
|
|
2261
|
+
{
|
|
2262
|
+
type: "text",
|
|
2263
|
+
text: "LogBox not available. This can happen if: (1) the app is a production build (__DEV__ is false), (2) no React Native app is connected, or (3) the Metro module registry is not accessible."
|
|
2264
|
+
}
|
|
2265
|
+
]
|
|
2266
|
+
};
|
|
2267
|
+
}
|
|
2268
|
+
if (result.totalDismissed === 0) {
|
|
2269
|
+
return {
|
|
2270
|
+
content: [
|
|
2271
|
+
{
|
|
2272
|
+
type: "text",
|
|
2273
|
+
text: "No LogBox entries to dismiss."
|
|
2274
|
+
}
|
|
2275
|
+
]
|
|
2276
|
+
};
|
|
2277
|
+
}
|
|
2278
|
+
return {
|
|
2279
|
+
content: [
|
|
2280
|
+
{
|
|
2281
|
+
type: "text",
|
|
2282
|
+
text: formatDismissedEntries(result)
|
|
2283
|
+
}
|
|
2284
|
+
]
|
|
2285
|
+
};
|
|
2286
|
+
}
|
|
2287
|
+
if (action === "push") {
|
|
2288
|
+
if (!message) {
|
|
2289
|
+
return {
|
|
2290
|
+
content: [
|
|
2291
|
+
{
|
|
2292
|
+
type: "text",
|
|
2293
|
+
text: 'Error: "message" parameter is required when action is "push".'
|
|
2294
|
+
}
|
|
2295
|
+
],
|
|
2296
|
+
isError: true
|
|
2297
|
+
};
|
|
2298
|
+
}
|
|
2299
|
+
const success = await pushLogBox(message, level || "error", expanded || false, target || "logbox", subtitle, device);
|
|
2300
|
+
if (!success) {
|
|
2301
|
+
return {
|
|
2302
|
+
content: [
|
|
2303
|
+
{
|
|
2304
|
+
type: "text",
|
|
2305
|
+
text: "Failed to push message to LogBox. This can happen if: (1) the app is a production build, (2) no React Native app is connected, or (3) the Metro module registry is not accessible."
|
|
2306
|
+
}
|
|
2307
|
+
]
|
|
2308
|
+
};
|
|
2309
|
+
}
|
|
2310
|
+
return {
|
|
2311
|
+
content: [
|
|
2312
|
+
{
|
|
2313
|
+
type: "text",
|
|
2314
|
+
text: target === "metro"
|
|
2315
|
+
? `Message pushed to Metro terminal: "${message}"`
|
|
2316
|
+
: `Message pushed to LogBox as ${level || "error"}: "${message}"`
|
|
2317
|
+
}
|
|
2318
|
+
]
|
|
2319
|
+
};
|
|
2320
|
+
}
|
|
2321
|
+
if (action === "ignore") {
|
|
2322
|
+
if (!patterns || patterns.length === 0) {
|
|
2323
|
+
return {
|
|
2324
|
+
content: [
|
|
2325
|
+
{
|
|
2326
|
+
type: "text",
|
|
2327
|
+
text: 'Error: "patterns" parameter is required when action is "ignore" (non-empty array of strings).'
|
|
2328
|
+
}
|
|
2329
|
+
],
|
|
2330
|
+
isError: true
|
|
2331
|
+
};
|
|
2332
|
+
}
|
|
2333
|
+
const activePatterns = await addLogBoxIgnorePatterns(patterns, device);
|
|
2334
|
+
if (activePatterns === null) {
|
|
2335
|
+
return {
|
|
2336
|
+
content: [
|
|
2337
|
+
{
|
|
2338
|
+
type: "text",
|
|
2339
|
+
text: "Failed to add ignore patterns. This can happen if: (1) the app is a production build, (2) no React Native app is connected, or (3) the Metro module registry is not accessible."
|
|
2340
|
+
}
|
|
2341
|
+
]
|
|
2342
|
+
};
|
|
2343
|
+
}
|
|
2249
2344
|
return {
|
|
2250
2345
|
content: [
|
|
2251
2346
|
{
|
|
2252
2347
|
type: "text",
|
|
2253
|
-
text:
|
|
2348
|
+
text: `Added ignore patterns: ${patterns.map((p) => `"${p}"`).join(", ")}\n\nAll active ignore patterns: ${activePatterns.map((p) => `"${p}"`).join(", ")}`
|
|
2254
2349
|
}
|
|
2255
2350
|
]
|
|
2256
2351
|
};
|
|
2257
2352
|
}
|
|
2258
|
-
if (
|
|
2353
|
+
if (action === "detect") {
|
|
2354
|
+
const state = await detectLogBox(device);
|
|
2355
|
+
if (state === null) {
|
|
2356
|
+
return {
|
|
2357
|
+
content: [
|
|
2358
|
+
{
|
|
2359
|
+
type: "text",
|
|
2360
|
+
text: "LogBox not available. This can happen if: (1) the app is a production build (__DEV__ is false), (2) no React Native app is connected, or (3) the Metro module registry is not accessible."
|
|
2361
|
+
}
|
|
2362
|
+
]
|
|
2363
|
+
};
|
|
2364
|
+
}
|
|
2365
|
+
if (state.total === 0) {
|
|
2366
|
+
return {
|
|
2367
|
+
content: [
|
|
2368
|
+
{
|
|
2369
|
+
type: "text",
|
|
2370
|
+
text: "No LogBox entries detected."
|
|
2371
|
+
}
|
|
2372
|
+
]
|
|
2373
|
+
};
|
|
2374
|
+
}
|
|
2375
|
+
const MAX_MSG_LENGTH = 150;
|
|
2376
|
+
let output = `LogBox state: ${state.total} entr${state.total === 1 ? "y" : "ies"} (${state.errors} error${state.errors !== 1 ? "s" : ""}, ${state.warnings} warning${state.warnings !== 1 ? "s" : ""}, ${state.fatals} fatal${state.fatals !== 1 ? "s" : ""})\n`;
|
|
2377
|
+
for (const entry of state.entries) {
|
|
2378
|
+
const truncated = entry.message.length > MAX_MSG_LENGTH ? entry.message.substring(0, MAX_MSG_LENGTH) + "..." : entry.message;
|
|
2379
|
+
const countStr = entry.count > 1 ? ` (x${entry.count})` : "";
|
|
2380
|
+
output += `\n[${entry.level}] ${truncated}${countStr}`;
|
|
2381
|
+
}
|
|
2259
2382
|
return {
|
|
2260
2383
|
content: [
|
|
2261
2384
|
{
|
|
2262
2385
|
type: "text",
|
|
2263
|
-
text:
|
|
2386
|
+
text: output
|
|
2264
2387
|
}
|
|
2265
2388
|
]
|
|
2266
2389
|
};
|
|
@@ -2269,9 +2392,10 @@ registerToolWithTelemetry("dismiss_logbox", {
|
|
|
2269
2392
|
content: [
|
|
2270
2393
|
{
|
|
2271
2394
|
type: "text",
|
|
2272
|
-
text:
|
|
2395
|
+
text: `Unknown action: "${action}". Use "dismiss", "push", "ignore", or "detect".`
|
|
2273
2396
|
}
|
|
2274
|
-
]
|
|
2397
|
+
],
|
|
2398
|
+
isError: true
|
|
2275
2399
|
};
|
|
2276
2400
|
});
|
|
2277
2401
|
// ============================================================================
|
|
@@ -2800,11 +2924,24 @@ server.registerTool("android_describe_all", {
|
|
|
2800
2924
|
}
|
|
2801
2925
|
}, async ({ deviceId }) => {
|
|
2802
2926
|
const result = await androidDescribeAll(deviceId);
|
|
2927
|
+
let text = result.success ? result.formatted : `Error: ${result.error}`;
|
|
2928
|
+
// Check for LogBox overlay
|
|
2929
|
+
if (result.success) {
|
|
2930
|
+
try {
|
|
2931
|
+
const logBoxState = await detectLogBox();
|
|
2932
|
+
if (logBoxState && logBoxState.total > 0) {
|
|
2933
|
+
text += formatLogBoxWarning(logBoxState);
|
|
2934
|
+
}
|
|
2935
|
+
}
|
|
2936
|
+
catch {
|
|
2937
|
+
// Non-fatal: LogBox detection failure should not break describe_all
|
|
2938
|
+
}
|
|
2939
|
+
}
|
|
2803
2940
|
return {
|
|
2804
2941
|
content: [
|
|
2805
2942
|
{
|
|
2806
2943
|
type: "text",
|
|
2807
|
-
text
|
|
2944
|
+
text
|
|
2808
2945
|
}
|
|
2809
2946
|
],
|
|
2810
2947
|
isError: !result.success
|
|
@@ -3189,7 +3326,7 @@ registerToolWithTelemetry("ocr_screenshot", {
|
|
|
3189
3326
|
confidence: Math.round(ocrResult.confidence || 0),
|
|
3190
3327
|
elementCount: elements.length,
|
|
3191
3328
|
elements,
|
|
3192
|
-
note: "tapX/tapY are
|
|
3329
|
+
note: "tapX/tapY are in device pixels — pass directly to tap(x, y) for automatic platform conversion"
|
|
3193
3330
|
};
|
|
3194
3331
|
// Check for LogBox overlay (uses default CDP device — native deviceId cannot be mapped to CDP device name)
|
|
3195
3332
|
try {
|
|
@@ -3455,11 +3592,24 @@ server.registerTool("ios_describe_all", {
|
|
|
3455
3592
|
}
|
|
3456
3593
|
}, async ({ udid }) => {
|
|
3457
3594
|
const result = await iosDescribeAll(udid);
|
|
3595
|
+
let text = result.success ? result.result : `Error: ${result.error}`;
|
|
3596
|
+
// Check for LogBox overlay
|
|
3597
|
+
if (result.success) {
|
|
3598
|
+
try {
|
|
3599
|
+
const logBoxState = await detectLogBox();
|
|
3600
|
+
if (logBoxState && logBoxState.total > 0) {
|
|
3601
|
+
text += formatLogBoxWarning(logBoxState);
|
|
3602
|
+
}
|
|
3603
|
+
}
|
|
3604
|
+
catch {
|
|
3605
|
+
// Non-fatal: LogBox detection failure should not break describe_all
|
|
3606
|
+
}
|
|
3607
|
+
}
|
|
3458
3608
|
return {
|
|
3459
3609
|
content: [
|
|
3460
3610
|
{
|
|
3461
3611
|
type: "text",
|
|
3462
|
-
text
|
|
3612
|
+
text
|
|
3463
3613
|
}
|
|
3464
3614
|
],
|
|
3465
3615
|
isError: !result.success
|
|
@@ -3525,7 +3675,7 @@ server.registerTool("ios_find_element", {
|
|
|
3525
3675
|
` Value: "${el.value}"`,
|
|
3526
3676
|
` Type: ${el.type}`,
|
|
3527
3677
|
` Frame: {x: ${el.frame.x}, y: ${el.frame.y}, w: ${el.frame.width}, h: ${el.frame.height}}`,
|
|
3528
|
-
` Center (tap coords): (${el.center.x}, ${el.center.y})
|
|
3678
|
+
` Center (tap coords): (${el.center.x}, ${el.center.y}) — iOS points. Use tap(text="...") or tap(testID="...") for reliable targeting.`,
|
|
3529
3679
|
` Enabled: ${el.enabled}`
|
|
3530
3680
|
].join("\n");
|
|
3531
3681
|
return {
|
|
@@ -3592,7 +3742,7 @@ server.registerTool("ios_wait_for_element", {
|
|
|
3592
3742
|
` Label: "${el.label}"`,
|
|
3593
3743
|
` Value: "${el.value}"`,
|
|
3594
3744
|
` Type: ${el.type}`,
|
|
3595
|
-
` Center (tap coords): (${el.center.x}, ${el.center.y})
|
|
3745
|
+
` Center (tap coords): (${el.center.x}, ${el.center.y}) — iOS points. Use tap(text="...") or tap(testID="...") for reliable targeting.`,
|
|
3596
3746
|
` Enabled: ${el.enabled}`
|
|
3597
3747
|
].join("\n");
|
|
3598
3748
|
return {
|