react-native-ai-debugger 2.9.7 → 2.10.0
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 +8 -1
- package/build/__tests__/unit/checkInjectedJs.test.d.ts +2 -0
- package/build/__tests__/unit/checkInjectedJs.test.d.ts.map +1 -0
- package/build/__tests__/unit/checkInjectedJs.test.js +42 -0
- package/build/__tests__/unit/checkInjectedJs.test.js.map +1 -0
- package/build/__tests__/unit/httpRequest.test.d.ts +2 -0
- package/build/__tests__/unit/httpRequest.test.d.ts.map +1 -0
- package/build/__tests__/unit/httpRequest.test.js +127 -0
- package/build/__tests__/unit/httpRequest.test.js.map +1 -0
- package/build/__tests__/unit/overlayAdoption.test.d.ts +2 -0
- package/build/__tests__/unit/overlayAdoption.test.d.ts.map +1 -0
- package/build/__tests__/unit/overlayAdoption.test.js +38 -0
- package/build/__tests__/unit/overlayAdoption.test.js.map +1 -0
- package/build/__tests__/unit/pressabilityAudit.test.d.ts +2 -0
- package/build/__tests__/unit/pressabilityAudit.test.d.ts.map +1 -0
- package/build/__tests__/unit/pressabilityAudit.test.js +96 -0
- package/build/__tests__/unit/pressabilityAudit.test.js.map +1 -0
- package/build/__tests__/unit/redact.test.d.ts +2 -0
- package/build/__tests__/unit/redact.test.d.ts.map +1 -0
- package/build/__tests__/unit/redact.test.js +98 -0
- package/build/__tests__/unit/redact.test.js.map +1 -0
- package/build/__tests__/unit/requestDetailsInclude.test.js +25 -3
- package/build/__tests__/unit/requestDetailsInclude.test.js.map +1 -1
- package/build/__tests__/unit/requestDetailsProjection.test.js +75 -1
- package/build/__tests__/unit/requestDetailsProjection.test.js.map +1 -1
- package/build/__tests__/unit/tapAndroidStatusBarInset.test.d.ts +2 -0
- package/build/__tests__/unit/tapAndroidStatusBarInset.test.d.ts.map +1 -0
- package/build/__tests__/unit/tapAndroidStatusBarInset.test.js +139 -0
- package/build/__tests__/unit/tapAndroidStatusBarInset.test.js.map +1 -0
- package/build/__tests__/unit/tapDuration.test.js +2 -2
- package/build/__tests__/unit/tapDuration.test.js.map +1 -1
- package/build/__tests__/unit/untrustedDataRule.test.d.ts +2 -0
- package/build/__tests__/unit/untrustedDataRule.test.d.ts.map +1 -0
- package/build/__tests__/unit/untrustedDataRule.test.js +32 -0
- package/build/__tests__/unit/untrustedDataRule.test.js.map +1 -0
- package/build/__tests__/unit/vault.test.d.ts +2 -0
- package/build/__tests__/unit/vault.test.d.ts.map +1 -0
- package/build/__tests__/unit/vault.test.js +116 -0
- package/build/__tests__/unit/vault.test.js.map +1 -0
- package/build/__tests__/unit/vaultCapture.test.d.ts +2 -0
- package/build/__tests__/unit/vaultCapture.test.d.ts.map +1 -0
- package/build/__tests__/unit/vaultCapture.test.js +47 -0
- package/build/__tests__/unit/vaultCapture.test.js.map +1 -0
- package/build/__tests__/unit/vaultSlots.test.d.ts +2 -0
- package/build/__tests__/unit/vaultSlots.test.d.ts.map +1 -0
- package/build/__tests__/unit/vaultSlots.test.js +64 -0
- package/build/__tests__/unit/vaultSlots.test.js.map +1 -0
- package/build/__tests__/unit/vaultTools.test.d.ts +2 -0
- package/build/__tests__/unit/vaultTools.test.d.ts.map +1 -0
- package/build/__tests__/unit/vaultTools.test.js +49 -0
- package/build/__tests__/unit/vaultTools.test.js.map +1 -0
- package/build/core/guides.d.ts +1 -0
- package/build/core/guides.d.ts.map +1 -1
- package/build/core/guides.js +41 -6
- package/build/core/guides.js.map +1 -1
- package/build/core/httpRequest.d.ts +18 -0
- package/build/core/httpRequest.d.ts.map +1 -0
- package/build/core/httpRequest.js +95 -0
- package/build/core/httpRequest.js.map +1 -0
- package/build/core/injected/overlayAdoption.d.ts +19 -0
- package/build/core/injected/overlayAdoption.d.ts.map +1 -0
- package/build/core/injected/overlayAdoption.js +17 -0
- package/build/core/injected/overlayAdoption.js.map +1 -0
- package/build/core/network.d.ts +1 -1
- package/build/core/network.d.ts.map +1 -1
- package/build/core/network.js +19 -10
- package/build/core/network.js.map +1 -1
- package/build/core/redact.d.ts +6 -0
- package/build/core/redact.d.ts.map +1 -0
- package/build/core/redact.js +78 -0
- package/build/core/redact.js.map +1 -0
- package/build/core/register.d.ts.map +1 -1
- package/build/core/register.js +14 -0
- package/build/core/register.js.map +1 -1
- package/build/core/screenState.d.ts +18 -0
- package/build/core/screenState.d.ts.map +1 -1
- package/build/core/screenState.js +138 -7
- package/build/core/screenState.js.map +1 -1
- package/build/core/vault.d.ts +21 -0
- package/build/core/vault.d.ts.map +1 -0
- package/build/core/vault.js +168 -0
- package/build/core/vault.js.map +1 -0
- package/build/core/vaultCapture.d.ts +2 -0
- package/build/core/vaultCapture.d.ts.map +1 -0
- package/build/core/vaultCapture.js +38 -0
- package/build/core/vaultCapture.js.map +1 -0
- package/build/index.d.ts +1 -0
- package/build/index.d.ts.map +1 -1
- package/build/index.js +11 -8
- package/build/index.js.map +1 -1
- package/build/pro/tap.d.ts.map +1 -1
- package/build/pro/tap.js +7 -3
- package/build/pro/tap.js.map +1 -1
- package/build/tools/metaTools.d.ts.map +1 -1
- package/build/tools/metaTools.js +36 -0
- package/build/tools/metaTools.js.map +1 -1
- package/build/tools/networkTools.js +1 -1
- package/build/tools/networkTools.js.map +1 -1
- package/build/tools/requestTools.d.ts.map +1 -1
- package/build/tools/requestTools.js +49 -1
- package/build/tools/requestTools.js.map +1 -1
- package/package.json +3 -3
- package/tools.json +19 -2
|
@@ -7,6 +7,8 @@ import { buildReplayArgs } from "../core/replay.js";
|
|
|
7
7
|
import { resolveNetworkBuffer } from "../core/toolHelpers.js";
|
|
8
8
|
import { refreshMirror } from "../core/sdkMirrorPoller.js";
|
|
9
9
|
import { activeMockBanner } from "../core/mockRules.js";
|
|
10
|
+
import { issueHttpRequest } from "../core/httpRequest.js";
|
|
11
|
+
import { captureToVault } from "../core/vaultCapture.js";
|
|
10
12
|
async function runAppRequest(expression, maxResultLength, device, toolName, extraNotes = []) {
|
|
11
13
|
const result = await executeInApp(expression, true, { timeoutMs: 30000, originatingToolName: toolName }, device);
|
|
12
14
|
if (!result.success) {
|
|
@@ -42,11 +44,11 @@ export function registerRequestTools(server) {
|
|
|
42
44
|
registerToolWithTelemetry(server, "app_request", {
|
|
43
45
|
description: "Issue an HTTP request from inside the running app, as the logged-in user.\n" +
|
|
44
46
|
"PURPOSE: Probe your backend through the app's real network stack, TLS trust and proxy config — without pasting credentials into the conversation.\n" +
|
|
45
|
-
"WHY THIS EXISTS: hand-written fetch calls either dig the token out of redux or embed a JWT literal in the expression, which puts the credential in the transcript. auth=\"auto\" resolves it in-app instead.\n" +
|
|
46
47
|
"WHEN TO USE: reproduce a 4xx, check what an endpoint returns for an edge case, clean up test records the UI can't reach.\n" +
|
|
47
48
|
"WORKFLOW: app_request({ method: \"GET\", url: \"https://api.example.com/me\" }) -> inspect status + body.\n" +
|
|
48
49
|
"AUTH RESOLUTION (auth=\"auto\", in order): explicit Authorization header -> redux (state.user.accessToken, state.auth.accessToken, state.auth.token) -> the Authorization header of the app's last captured request. That last step is source-agnostic, so it covers tokens kept outside redux — keychain, secure storage, an Apollo link — as long as the app has already made one authenticated call and the SDK captured it. Cookie auth needs none of this: the native cookie jar attaches cookies to any in-app request.\n" +
|
|
49
50
|
"LIMITATIONS: needs a connected app. Pass an explicit Authorization only when every step above misses — it puts the credential in the transcript.\n" +
|
|
51
|
+
"GOES THROUGH THE APP: same TLS trust, proxy, cookie jar and credentials, so an active network_mock rule intercepts it too. For a clean request from your own machine — to tell a server bug from a client one — use http_request.\n" +
|
|
50
52
|
"GOOD: app_request({ method: \"DELETE\", url: \"https://api.example.com/address/17\" })\n" +
|
|
51
53
|
"BAD: embedding a bearer token in an execute_in_app expression — it lands in the transcript.",
|
|
52
54
|
inputSchema: {
|
|
@@ -138,5 +140,51 @@ export function registerRequestTools(server) {
|
|
|
138
140
|
}
|
|
139
141
|
return runAppRequest(expression, maxResultLength, device, "network_replay", notes);
|
|
140
142
|
});
|
|
143
|
+
registerToolWithTelemetry(server, "http_request", {
|
|
144
|
+
description: "Issue an HTTP request FROM THE HOST (Node), not through the app, carrying a credential you cannot read.\n" +
|
|
145
|
+
"PURPOSE: Isolate server behaviour from client behaviour. This is what curl was for, minus the part where the token and the whole response landed in the transcript.\n" +
|
|
146
|
+
"HOW IT DIFFERS FROM app_request: app_request runs inside the app, so it uses the app's TLS trust, proxy, cookie jar and credentials — and an active network_mock rule intercepts it. http_request does none of that: it is a clean request from your machine. Pick app_request when the app's real request conditions matter or the backend enforces attestation (Firebase App Check cannot be satisfied from Node, by design). Pick http_request to find out whether the server or the client is at fault.\n" +
|
|
147
|
+
"CREDENTIALS: pass auth:{secret:\"<origin or handle>\"} — names come from list_secrets. The value is substituted here and never rendered. A credential is bound to the origin it was observed on and will be refused for any other host.\n" +
|
|
148
|
+
"READING THE RESULT: a 401 here where app_request succeeds is itself an answer — the backend is enforcing attestation.\n" +
|
|
149
|
+
"GOOD: http_request({ method: \"GET\", url: \"https://api.acme.io/v1/me\", auth: { secret: \"api.acme.io\" } })\n" +
|
|
150
|
+
"BAD: pasting a token into headers.Authorization — that puts it in the transcript, which is what the vault exists to avoid.",
|
|
151
|
+
inputSchema: {
|
|
152
|
+
method: z.enum(["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]).describe("HTTP method."),
|
|
153
|
+
url: z.string().describe("Absolute http or https URL."),
|
|
154
|
+
body: z
|
|
155
|
+
.unknown()
|
|
156
|
+
.optional()
|
|
157
|
+
.describe("Request body. An object is JSON-serialised and sets Content-Type: application/json unless you override it; a string is sent verbatim."),
|
|
158
|
+
headers: z.record(z.string()).optional().describe("Extra request headers. An explicit Authorization wins over auth."),
|
|
159
|
+
auth: z
|
|
160
|
+
.object({ secret: z.string().describe("Origin (\"api.acme.io\") or handle (\"auth_api.acme.io\") from list_secrets.") })
|
|
161
|
+
.optional()
|
|
162
|
+
.describe("Credential to attach as a bearer token. Typed on purpose: the credential position is structural, never string interpolation, so it cannot be smuggled into an arbitrary field."),
|
|
163
|
+
maxResultLength: z.number().optional().describe("Target size for the response body in characters (default 25000).")
|
|
164
|
+
}
|
|
165
|
+
}, async ({ method, url, body, headers, auth, maxResultLength }) => {
|
|
166
|
+
const text = await issueHttpRequest({ method, url, body, headers, auth, maxResultLength });
|
|
167
|
+
return { content: [{ type: "text", text }] };
|
|
168
|
+
});
|
|
169
|
+
registerToolWithTelemetry(server, "vault_capture", {
|
|
170
|
+
description: "Read a credential out of the running app straight into the vault. The value is never returned to you.\n" +
|
|
171
|
+
"PURPOSE: Cover credentials no captured request revealed — a cold session before the app has made an authenticated call, a token the app refreshed in the background, or one held somewhere no heuristic finds (keychain, expo-secure-store, an Apollo link).\n" +
|
|
172
|
+
"WHEN TO USE: http_request says no credential is known for an origin, or list_secrets shows the entry as EXPIRED after a re-login.\n" +
|
|
173
|
+
"WORKFLOW: vault_capture({ expression: \"SecureStore.getItemAsync('access_token')\", origin: \"https://api.acme.io\" }) -> http_request({ ..., auth: { secret: \"api.acme.io\" } }).\n" +
|
|
174
|
+
"GOOD: vault_capture({ expression: \"store.getState().auth.token\", origin: \"https://api.acme.io\" })\n" +
|
|
175
|
+
"BAD: reading the same value with execute_in_app — that returns it into the transcript, permanently.",
|
|
176
|
+
inputSchema: {
|
|
177
|
+
expression: z
|
|
178
|
+
.string()
|
|
179
|
+
.describe("JS evaluated in the app; its result goes to the vault, not to you. An async expression is awaited."),
|
|
180
|
+
origin: z
|
|
181
|
+
.string()
|
|
182
|
+
.describe("Absolute URL of the API this credential authenticates, e.g. https://api.acme.io. Binds the credential: it can only be sent back to this host."),
|
|
183
|
+
device: z.string().optional().describe("Target device name (substring match). Omit for the default device.")
|
|
184
|
+
}
|
|
185
|
+
}, async ({ expression, origin, device }) => {
|
|
186
|
+
const text = await captureToVault(expression, origin, device);
|
|
187
|
+
return { content: [{ type: "text", text }] };
|
|
188
|
+
});
|
|
141
189
|
}
|
|
142
190
|
//# sourceMappingURL=requestTools.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"requestTools.js","sourceRoot":"","sources":["../../src/tools/requestTools.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAC;AACxB,OAAO,EAAE,yBAAyB,EAAE,MAAM,qBAAqB,CAAC;AAChE,OAAO,EAAE,sBAAsB,EAAE,MAAM,uBAAuB,CAAC;AAC/D,OAAO,EAAE,YAAY,EAAE,MAAM,qBAAqB,CAAC;AACnD,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,MAAM,qBAAqB,CAAC;AAC3E,OAAO,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,oBAAoB,EAAE,MAAM,wBAAwB,CAAC;AAC9D,OAAO,EAAE,aAAa,EAAE,MAAM,4BAA4B,CAAC;AAC3D,OAAO,EAAE,gBAAgB,EAAE,MAAM,sBAAsB,CAAC;
|
|
1
|
+
{"version":3,"file":"requestTools.js","sourceRoot":"","sources":["../../src/tools/requestTools.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "react-native-ai-debugger",
|
|
3
|
-
"version": "2.
|
|
3
|
+
"version": "2.10.0",
|
|
4
4
|
"mcpName": "com.execbro/execbro",
|
|
5
5
|
"description": "React Native AI debugger: MCP server giving AI agents eyes and hands in your running app (logs, network, state inspection, tap, screenshot). Published as ExecBro.",
|
|
6
6
|
"type": "module",
|
|
@@ -19,7 +19,7 @@
|
|
|
19
19
|
"test:integration": "NODE_OPTIONS='--experimental-vm-modules' jest --testPathPatterns='__tests__/integration'",
|
|
20
20
|
"test:tap": "node --experimental-vm-modules node_modules/.bin/jest --testPathPatterns='tap-strategies' --no-coverage --testTimeout=30000",
|
|
21
21
|
"tools:json": "npm run build && node scripts/generate-tools-json.mjs",
|
|
22
|
-
"postbuild": "node scripts/generate-tools-json.mjs && node scripts/check-build-hygiene.mjs"
|
|
22
|
+
"postbuild": "node scripts/generate-tools-json.mjs && node scripts/check-build-hygiene.mjs && node scripts/check-injected-js.mjs"
|
|
23
23
|
},
|
|
24
24
|
"keywords": [
|
|
25
25
|
"mcp",
|
|
@@ -47,7 +47,7 @@
|
|
|
47
47
|
"type": "git",
|
|
48
48
|
"url": "git+https://github.com/igorzheludkov/execbro.git"
|
|
49
49
|
},
|
|
50
|
-
"homepage": "https://
|
|
50
|
+
"homepage": "https://execbro.com/",
|
|
51
51
|
"bugs": {
|
|
52
52
|
"url": "https://github.com/igorzheludkov/execbro/issues"
|
|
53
53
|
},
|
package/tools.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"generatedFrom": "toolRegistry",
|
|
3
|
-
"count":
|
|
3
|
+
"count": 63,
|
|
4
4
|
"tools": [
|
|
5
5
|
"activate_license",
|
|
6
6
|
"android_key_event",
|
|
@@ -33,6 +33,7 @@
|
|
|
33
33
|
"get_screen_layout",
|
|
34
34
|
"get_screen_state",
|
|
35
35
|
"get_usage_guide",
|
|
36
|
+
"http_request",
|
|
36
37
|
"input_text",
|
|
37
38
|
"inspect_at_point",
|
|
38
39
|
"inspect_component",
|
|
@@ -45,6 +46,7 @@
|
|
|
45
46
|
"ios_terminate_app",
|
|
46
47
|
"list_debug_globals",
|
|
47
48
|
"list_devices",
|
|
49
|
+
"list_secrets",
|
|
48
50
|
"logbox",
|
|
49
51
|
"measure",
|
|
50
52
|
"navigate",
|
|
@@ -61,7 +63,8 @@
|
|
|
61
63
|
"search_network",
|
|
62
64
|
"send_feedback",
|
|
63
65
|
"swipe",
|
|
64
|
-
"tap"
|
|
66
|
+
"tap",
|
|
67
|
+
"vault_capture"
|
|
65
68
|
],
|
|
66
69
|
"params": {
|
|
67
70
|
"activate_license": [
|
|
@@ -234,6 +237,14 @@
|
|
|
234
237
|
"get_usage_guide": [
|
|
235
238
|
"topic"
|
|
236
239
|
],
|
|
240
|
+
"http_request": [
|
|
241
|
+
"auth",
|
|
242
|
+
"body",
|
|
243
|
+
"headers",
|
|
244
|
+
"maxResultLength",
|
|
245
|
+
"method",
|
|
246
|
+
"url"
|
|
247
|
+
],
|
|
237
248
|
"input_text": [
|
|
238
249
|
"component",
|
|
239
250
|
"device",
|
|
@@ -301,6 +312,7 @@
|
|
|
301
312
|
"list_devices": [
|
|
302
313
|
"refresh"
|
|
303
314
|
],
|
|
315
|
+
"list_secrets": [],
|
|
304
316
|
"logbox": [
|
|
305
317
|
"action",
|
|
306
318
|
"device",
|
|
@@ -439,6 +451,11 @@
|
|
|
439
451
|
"verify",
|
|
440
452
|
"x",
|
|
441
453
|
"y"
|
|
454
|
+
],
|
|
455
|
+
"vault_capture": [
|
|
456
|
+
"device",
|
|
457
|
+
"expression",
|
|
458
|
+
"origin"
|
|
442
459
|
]
|
|
443
460
|
}
|
|
444
461
|
}
|