@swmansion/argent 0.28.1-next.10 → 0.28.1-next.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/dist/cli-cmds.mjs +1 -1
- package/dist/client.d.ts +9 -0
- package/dist/installer.mjs +1 -1
- package/dist/tool-args.generated.d.ts +4 -0
- package/dist/tool-server.cjs +226 -158
- package/package.json +1 -1
package/dist/tool-server.cjs
CHANGED
|
@@ -13223,8 +13223,8 @@ function finalize(ctx, schema) {
|
|
|
13223
13223
|
const root = ctx.seen.get(schema);
|
|
13224
13224
|
if (!root)
|
|
13225
13225
|
throw new Error("Unprocessed schema. This is a bug in Zod.");
|
|
13226
|
-
const flattenRef = (
|
|
13227
|
-
const seen = ctx.seen.get(
|
|
13226
|
+
const flattenRef = (zodSchema81) => {
|
|
13227
|
+
const seen = ctx.seen.get(zodSchema81);
|
|
13228
13228
|
if (seen.ref === null)
|
|
13229
13229
|
return;
|
|
13230
13230
|
const schema2 = seen.def ?? seen.schema;
|
|
@@ -13242,7 +13242,7 @@ function finalize(ctx, schema) {
|
|
|
13242
13242
|
Object.assign(schema2, refSchema);
|
|
13243
13243
|
}
|
|
13244
13244
|
Object.assign(schema2, _cached);
|
|
13245
|
-
const isParentRef =
|
|
13245
|
+
const isParentRef = zodSchema81._zod.parent === ref;
|
|
13246
13246
|
if (isParentRef) {
|
|
13247
13247
|
for (const key2 in schema2) {
|
|
13248
13248
|
if (key2 === "$ref" || key2 === "allOf")
|
|
@@ -13262,7 +13262,7 @@ function finalize(ctx, schema) {
|
|
|
13262
13262
|
}
|
|
13263
13263
|
}
|
|
13264
13264
|
}
|
|
13265
|
-
const parent =
|
|
13265
|
+
const parent = zodSchema81._zod.parent;
|
|
13266
13266
|
if (parent && parent !== ref) {
|
|
13267
13267
|
flattenRef(parent);
|
|
13268
13268
|
const parentSeen = ctx.seen.get(parent);
|
|
@@ -13280,7 +13280,7 @@ function finalize(ctx, schema) {
|
|
|
13280
13280
|
}
|
|
13281
13281
|
}
|
|
13282
13282
|
ctx.override({
|
|
13283
|
-
zodSchema:
|
|
13283
|
+
zodSchema: zodSchema81,
|
|
13284
13284
|
jsonSchema: schema2,
|
|
13285
13285
|
path: seen.path ?? []
|
|
13286
13286
|
});
|
|
@@ -16081,10 +16081,10 @@ function convertBaseSchema(schema, ctx) {
|
|
|
16081
16081
|
}
|
|
16082
16082
|
ctx.processing.add(refPath);
|
|
16083
16083
|
const resolved = resolveRef(refPath, ctx);
|
|
16084
|
-
const
|
|
16085
|
-
ctx.refs.set(refPath,
|
|
16084
|
+
const zodSchema82 = convertSchema(resolved, ctx);
|
|
16085
|
+
ctx.refs.set(refPath, zodSchema82);
|
|
16086
16086
|
ctx.processing.delete(refPath);
|
|
16087
|
-
return
|
|
16087
|
+
return zodSchema82;
|
|
16088
16088
|
}
|
|
16089
16089
|
if (schema.enum !== void 0) {
|
|
16090
16090
|
const enumValues = schema.enum;
|
|
@@ -16126,7 +16126,7 @@ function convertBaseSchema(schema, ctx) {
|
|
|
16126
16126
|
if (!type) {
|
|
16127
16127
|
return z.any();
|
|
16128
16128
|
}
|
|
16129
|
-
let
|
|
16129
|
+
let zodSchema81;
|
|
16130
16130
|
switch (type) {
|
|
16131
16131
|
case "string": {
|
|
16132
16132
|
let stringSchema = z.string();
|
|
@@ -16189,7 +16189,7 @@ function convertBaseSchema(schema, ctx) {
|
|
|
16189
16189
|
if (schema.pattern) {
|
|
16190
16190
|
stringSchema = stringSchema.regex(new RegExp(schema.pattern));
|
|
16191
16191
|
}
|
|
16192
|
-
|
|
16192
|
+
zodSchema81 = stringSchema;
|
|
16193
16193
|
break;
|
|
16194
16194
|
}
|
|
16195
16195
|
case "number":
|
|
@@ -16214,15 +16214,15 @@ function convertBaseSchema(schema, ctx) {
|
|
|
16214
16214
|
if (typeof schema.multipleOf === "number") {
|
|
16215
16215
|
numberSchema = numberSchema.multipleOf(schema.multipleOf);
|
|
16216
16216
|
}
|
|
16217
|
-
|
|
16217
|
+
zodSchema81 = numberSchema;
|
|
16218
16218
|
break;
|
|
16219
16219
|
}
|
|
16220
16220
|
case "boolean": {
|
|
16221
|
-
|
|
16221
|
+
zodSchema81 = z.boolean();
|
|
16222
16222
|
break;
|
|
16223
16223
|
}
|
|
16224
16224
|
case "null": {
|
|
16225
|
-
|
|
16225
|
+
zodSchema81 = z.null();
|
|
16226
16226
|
break;
|
|
16227
16227
|
}
|
|
16228
16228
|
case "object": {
|
|
@@ -16237,12 +16237,12 @@ function convertBaseSchema(schema, ctx) {
|
|
|
16237
16237
|
const keySchema = convertSchema(schema.propertyNames, ctx);
|
|
16238
16238
|
const valueSchema = schema.additionalProperties && typeof schema.additionalProperties === "object" ? convertSchema(schema.additionalProperties, ctx) : z.any();
|
|
16239
16239
|
if (Object.keys(shape).length === 0) {
|
|
16240
|
-
|
|
16240
|
+
zodSchema81 = z.record(keySchema, valueSchema);
|
|
16241
16241
|
break;
|
|
16242
16242
|
}
|
|
16243
16243
|
const objectSchema2 = z.object(shape).passthrough();
|
|
16244
16244
|
const recordSchema = z.looseRecord(keySchema, valueSchema);
|
|
16245
|
-
|
|
16245
|
+
zodSchema81 = z.intersection(objectSchema2, recordSchema);
|
|
16246
16246
|
break;
|
|
16247
16247
|
}
|
|
16248
16248
|
if (schema.patternProperties) {
|
|
@@ -16260,25 +16260,25 @@ function convertBaseSchema(schema, ctx) {
|
|
|
16260
16260
|
}
|
|
16261
16261
|
schemasToIntersect.push(...looseRecords);
|
|
16262
16262
|
if (schemasToIntersect.length === 0) {
|
|
16263
|
-
|
|
16263
|
+
zodSchema81 = z.object({}).passthrough();
|
|
16264
16264
|
} else if (schemasToIntersect.length === 1) {
|
|
16265
|
-
|
|
16265
|
+
zodSchema81 = schemasToIntersect[0];
|
|
16266
16266
|
} else {
|
|
16267
16267
|
let result = z.intersection(schemasToIntersect[0], schemasToIntersect[1]);
|
|
16268
16268
|
for (let i = 2; i < schemasToIntersect.length; i++) {
|
|
16269
16269
|
result = z.intersection(result, schemasToIntersect[i]);
|
|
16270
16270
|
}
|
|
16271
|
-
|
|
16271
|
+
zodSchema81 = result;
|
|
16272
16272
|
}
|
|
16273
16273
|
break;
|
|
16274
16274
|
}
|
|
16275
16275
|
const objectSchema = z.object(shape);
|
|
16276
16276
|
if (schema.additionalProperties === false) {
|
|
16277
|
-
|
|
16277
|
+
zodSchema81 = objectSchema.strict();
|
|
16278
16278
|
} else if (typeof schema.additionalProperties === "object") {
|
|
16279
|
-
|
|
16279
|
+
zodSchema81 = objectSchema.catchall(convertSchema(schema.additionalProperties, ctx));
|
|
16280
16280
|
} else {
|
|
16281
|
-
|
|
16281
|
+
zodSchema81 = objectSchema.passthrough();
|
|
16282
16282
|
}
|
|
16283
16283
|
break;
|
|
16284
16284
|
}
|
|
@@ -16289,29 +16289,29 @@ function convertBaseSchema(schema, ctx) {
|
|
|
16289
16289
|
const tupleItems = prefixItems.map((item) => convertSchema(item, ctx));
|
|
16290
16290
|
const rest = items && typeof items === "object" && !Array.isArray(items) ? convertSchema(items, ctx) : void 0;
|
|
16291
16291
|
if (rest) {
|
|
16292
|
-
|
|
16292
|
+
zodSchema81 = z.tuple(tupleItems).rest(rest);
|
|
16293
16293
|
} else {
|
|
16294
|
-
|
|
16294
|
+
zodSchema81 = z.tuple(tupleItems);
|
|
16295
16295
|
}
|
|
16296
16296
|
if (typeof schema.minItems === "number") {
|
|
16297
|
-
|
|
16297
|
+
zodSchema81 = zodSchema81.check(z.minLength(schema.minItems));
|
|
16298
16298
|
}
|
|
16299
16299
|
if (typeof schema.maxItems === "number") {
|
|
16300
|
-
|
|
16300
|
+
zodSchema81 = zodSchema81.check(z.maxLength(schema.maxItems));
|
|
16301
16301
|
}
|
|
16302
16302
|
} else if (Array.isArray(items)) {
|
|
16303
16303
|
const tupleItems = items.map((item) => convertSchema(item, ctx));
|
|
16304
16304
|
const rest = schema.additionalItems && typeof schema.additionalItems === "object" ? convertSchema(schema.additionalItems, ctx) : void 0;
|
|
16305
16305
|
if (rest) {
|
|
16306
|
-
|
|
16306
|
+
zodSchema81 = z.tuple(tupleItems).rest(rest);
|
|
16307
16307
|
} else {
|
|
16308
|
-
|
|
16308
|
+
zodSchema81 = z.tuple(tupleItems);
|
|
16309
16309
|
}
|
|
16310
16310
|
if (typeof schema.minItems === "number") {
|
|
16311
|
-
|
|
16311
|
+
zodSchema81 = zodSchema81.check(z.minLength(schema.minItems));
|
|
16312
16312
|
}
|
|
16313
16313
|
if (typeof schema.maxItems === "number") {
|
|
16314
|
-
|
|
16314
|
+
zodSchema81 = zodSchema81.check(z.maxLength(schema.maxItems));
|
|
16315
16315
|
}
|
|
16316
16316
|
} else if (items !== void 0) {
|
|
16317
16317
|
const element = convertSchema(items, ctx);
|
|
@@ -16322,16 +16322,16 @@ function convertBaseSchema(schema, ctx) {
|
|
|
16322
16322
|
if (typeof schema.maxItems === "number") {
|
|
16323
16323
|
arraySchema = arraySchema.max(schema.maxItems);
|
|
16324
16324
|
}
|
|
16325
|
-
|
|
16325
|
+
zodSchema81 = arraySchema;
|
|
16326
16326
|
} else {
|
|
16327
|
-
|
|
16327
|
+
zodSchema81 = z.array(z.any());
|
|
16328
16328
|
}
|
|
16329
16329
|
break;
|
|
16330
16330
|
}
|
|
16331
16331
|
default:
|
|
16332
16332
|
throw new Error(`Unsupported type: ${type}`);
|
|
16333
16333
|
}
|
|
16334
|
-
return
|
|
16334
|
+
return zodSchema81;
|
|
16335
16335
|
}
|
|
16336
16336
|
function convertSchema(schema, ctx) {
|
|
16337
16337
|
if (typeof schema === "boolean") {
|
|
@@ -73655,16 +73655,16 @@ function lookupExternalDeviceNow(id) {
|
|
|
73655
73655
|
}
|
|
73656
73656
|
return device;
|
|
73657
73657
|
}
|
|
73658
|
-
async function assertExternalCapability(namespace, device,
|
|
73659
|
-
assertExternalCapabilitySync(namespace, device,
|
|
73658
|
+
async function assertExternalCapability(namespace, device, capability38) {
|
|
73659
|
+
assertExternalCapabilitySync(namespace, device, capability38);
|
|
73660
73660
|
}
|
|
73661
|
-
function assertExternalCapabilitySync(namespace, device,
|
|
73661
|
+
function assertExternalCapabilitySync(namespace, device, capability38) {
|
|
73662
73662
|
const id = typeof device === "string" ? device : device.id;
|
|
73663
73663
|
const externalDevice = isExternalId(id) ? lookupExternalDeviceNow(id) : externalClaimForNativeId(id);
|
|
73664
73664
|
if (!externalDevice) return;
|
|
73665
|
-
if (externalDevice.capabilities.has(
|
|
73665
|
+
if (externalDevice.capabilities.has(capability38)) return;
|
|
73666
73666
|
throw new FailureError(
|
|
73667
|
-
`${namespace} is not available on '${externalDevice.name}': ${externalDevice.provider.name} did not grant the '${
|
|
73667
|
+
`${namespace} is not available on '${externalDevice.name}': ${externalDevice.provider.name} did not grant the '${capability38}' capability for this device.`,
|
|
73668
73668
|
{
|
|
73669
73669
|
error_code: FAILURE_CODES.EXTERNAL_DEVICE_CAPABILITY_DENIED,
|
|
73670
73670
|
error_kind: "unsupported",
|
|
@@ -94920,7 +94920,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
|
|
|
94920
94920
|
var SESSION_ID = (0, import_node_crypto3.randomUUID)();
|
|
94921
94921
|
function readCliVersion() {
|
|
94922
94922
|
if (true) {
|
|
94923
|
-
return "0.28.1-next.
|
|
94923
|
+
return "0.28.1-next.12";
|
|
94924
94924
|
}
|
|
94925
94925
|
return "0.0.0";
|
|
94926
94926
|
}
|
|
@@ -96694,8 +96694,8 @@ async function simctlArgsForUdid(udid, args, options) {
|
|
|
96694
96694
|
return [...simctlPrefix(await deviceSetForUdid(udid)), ...nativeArgs(udid, args)];
|
|
96695
96695
|
}
|
|
96696
96696
|
function assertSimctlEntitlement(udid, options) {
|
|
96697
|
-
const
|
|
96698
|
-
assertExternalCapabilitySync(
|
|
96697
|
+
const capability38 = options?.granted ?? "simctl";
|
|
96698
|
+
assertExternalCapabilitySync(capability38, udid, capability38);
|
|
96699
96699
|
}
|
|
96700
96700
|
async function simctlTargetForUdid(udid, options) {
|
|
96701
96701
|
assertSimctlEntitlement(udid, options);
|
|
@@ -97760,6 +97760,9 @@ var axServiceBlueprint = {
|
|
|
97760
97760
|
treeVersion: result.treeVersion
|
|
97761
97761
|
};
|
|
97762
97762
|
},
|
|
97763
|
+
async foregroundApp() {
|
|
97764
|
+
return await query("foreground_app");
|
|
97765
|
+
},
|
|
97763
97766
|
async livePanel() {
|
|
97764
97767
|
const result = await query("live_panel", LIVE_PANEL_TIMEOUT_MS);
|
|
97765
97768
|
if (result.error) {
|
|
@@ -97869,23 +97872,23 @@ var InvalidToolInputError = class extends Error {
|
|
|
97869
97872
|
});
|
|
97870
97873
|
}
|
|
97871
97874
|
};
|
|
97872
|
-
function platformMatrix(platform,
|
|
97875
|
+
function platformMatrix(platform, capability38) {
|
|
97873
97876
|
switch (platform) {
|
|
97874
97877
|
case "ios":
|
|
97875
|
-
return
|
|
97878
|
+
return capability38.apple;
|
|
97876
97879
|
case "ios-remote":
|
|
97877
|
-
return
|
|
97880
|
+
return capability38.appleRemote;
|
|
97878
97881
|
case "android":
|
|
97879
|
-
return
|
|
97882
|
+
return capability38.android;
|
|
97880
97883
|
case "chromium":
|
|
97881
|
-
return
|
|
97884
|
+
return capability38.chromium;
|
|
97882
97885
|
case "vega":
|
|
97883
|
-
return
|
|
97886
|
+
return capability38.vega;
|
|
97884
97887
|
}
|
|
97885
97888
|
}
|
|
97886
|
-
function assertSupported(toolId,
|
|
97887
|
-
if (!
|
|
97888
|
-
const matrix = platformMatrix(device.platform,
|
|
97889
|
+
function assertSupported(toolId, capability38, device) {
|
|
97890
|
+
if (!capability38) return;
|
|
97891
|
+
const matrix = platformMatrix(device.platform, capability38);
|
|
97889
97892
|
if (!matrix) {
|
|
97890
97893
|
throw new UnsupportedOperationError(toolId, device, `no ${device.platform} support declared`);
|
|
97891
97894
|
}
|
|
@@ -97893,7 +97896,7 @@ function assertSupported(toolId, capability37, device) {
|
|
|
97893
97896
|
if (!supported) {
|
|
97894
97897
|
throw new UnsupportedOperationError(toolId, device, `kind '${device.kind}' not supported`);
|
|
97895
97898
|
}
|
|
97896
|
-
if (
|
|
97899
|
+
if (capability38.supports && !capability38.supports(device)) {
|
|
97897
97900
|
throw new UnsupportedOperationError(toolId, device, "supports() refiner rejected device");
|
|
97898
97901
|
}
|
|
97899
97902
|
}
|
|
@@ -124889,7 +124892,6 @@ var gestureScrollTool = {
|
|
|
124889
124892
|
description: `Scroll content in a Chromium app by dispatching mouse-wheel events at a point. Anchor x/y are normalized 0.0\u20131.0 (fractions of the window, not pixels), same coordinate space as gesture-tap and describe. Deltas are fractions of the window too: deltaY 0.5 scrolls down half a window; negative scrolls back up.
|
|
124890
124893
|
Use when content is below/above the fold (describe shows off-screen elements with zero height) or a list needs scrolling. Chromium only \u2014 on iOS/Android use gesture-swipe.
|
|
124891
124894
|
Returns { scrolled: true, timestampMs }. Fails if the Chromium CDP session is not reachable for the given device.`,
|
|
124892
|
-
alwaysLoad: true,
|
|
124893
124895
|
searchHint: "scroll wheel list page chromium mouse down up content fold",
|
|
124894
124896
|
zodSchema: zodSchema19,
|
|
124895
124897
|
capability: capability11,
|
|
@@ -124956,7 +124958,6 @@ var gestureDragTool = {
|
|
|
124956
124958
|
description: `Press the left mouse button at a start point, move to an end point, and release \u2014 a desktop mouse drag in a Chromium app. All positions are normalized 0.0\u20131.0 (fractions of the window, not pixels), same coordinate space as gesture-tap and describe, except that a coordinate of exactly 1.0 lands one pixel inside the window edge (gesture-tap maps it to the edge itself). Interpolates mouse-move events at ~60fps over durationMs for a natural drag (a momentum-free drag samples more finely when durationMs is short, so its ease-out has a curve).
|
|
124957
124959
|
Use for slider thumbs, drag-and-drop, text selection, or draggable UI elements. Dragging never scrolls content on desktop \u2014 use gesture-scroll for lists/pages. Chromium only \u2014 on iOS/Android use gesture-swipe.
|
|
124958
124960
|
Pass momentum:false for a momentum-free drag that decelerates into the release, so apps that compute a fling from the pointer stream read ~0 velocity and the drag ends where it was aimed instead of flinging past it (a durationMs under ~100ms is too short for the deceleration to suppress the fling entirely). Returns { dragged: true, timestampMs }. Fails if the Chromium CDP session is not reachable for the given device.`,
|
|
124959
|
-
alwaysLoad: true,
|
|
124960
124961
|
searchHint: "drag drop slider mouse press move release chromium select",
|
|
124961
124962
|
zodSchema: zodSchema20,
|
|
124962
124963
|
capability: capability12,
|
|
@@ -127211,7 +127212,6 @@ Single press: { button: "down" }. Repeat the same button: { button: "down", repe
|
|
|
127211
127212
|
Multi-step navigation: pass a path as { button: ["up","right","right","select"] } \u2014 it runs in one tool call, far cheaper than separate presses.
|
|
127212
127213
|
Read the screen with \`describe\` before and after to see where focus landed.
|
|
127213
127214
|
Returns { pressed, count }.`,
|
|
127214
|
-
alwaysLoad: true,
|
|
127215
127215
|
// A path (≤64 buttons) × repeat (≤50) flattens to thousands of presses, sent
|
|
127216
127216
|
// one round-trip at a time on the Apple/Android path — minutes of wall-clock.
|
|
127217
127217
|
longRunning: true,
|
|
@@ -127262,9 +127262,9 @@ async function invokeSubTool(registry2, ctx, toolId, args, extra) {
|
|
|
127262
127262
|
}
|
|
127263
127263
|
function describeNestedParamError(registry2, err, toolId, dispatchedArgs, authoredArgs) {
|
|
127264
127264
|
if (getFailureSignal(err)?.error_code !== FAILURE_CODES.TOOL_INPUT_INVALID) return void 0;
|
|
127265
|
-
const
|
|
127266
|
-
if (!
|
|
127267
|
-
const parsed =
|
|
127265
|
+
const zodSchema81 = registry2.getTool(toolId)?.zodSchema;
|
|
127266
|
+
if (!zodSchema81) return void 0;
|
|
127267
|
+
const parsed = zodSchema81.safeParse(dispatchedArgs ?? {});
|
|
127268
127268
|
if (parsed.success) return void 0;
|
|
127269
127269
|
return `Invalid params for tool "${toolId}": ${describeParamIssues(parsed.error, authoredArgs)}`;
|
|
127270
127270
|
}
|
|
@@ -137042,6 +137042,73 @@ Fails if the iOS ax-service predates the tree command; update argent.`,
|
|
|
137042
137042
|
};
|
|
137043
137043
|
}
|
|
137044
137044
|
|
|
137045
|
+
// ../tool-server/src/tools/foreground-app/index.ts
|
|
137046
|
+
init_zod();
|
|
137047
|
+
var zodSchema42 = external_exports.object({
|
|
137048
|
+
udid: external_exports.string().min(1).describe("Target device id from `list-devices`.")
|
|
137049
|
+
});
|
|
137050
|
+
var capability27 = {
|
|
137051
|
+
apple: { simulator: true },
|
|
137052
|
+
appleRemote: { simulator: true },
|
|
137053
|
+
android: { emulator: true, device: true, unknown: true }
|
|
137054
|
+
};
|
|
137055
|
+
async function readIosForegroundApp(registry2, device) {
|
|
137056
|
+
const ref = axServiceRef(device);
|
|
137057
|
+
const ax = await registry2.resolveService(ref.urn, ref.options);
|
|
137058
|
+
const { bundleId, name, alertVisible } = await ax.foregroundApp();
|
|
137059
|
+
return { bundleId, name, alertVisible };
|
|
137060
|
+
}
|
|
137061
|
+
async function readAndroidForegroundApp(registry2, device) {
|
|
137062
|
+
const ref = androidDevtoolsRef(device);
|
|
137063
|
+
const devtools = await registry2.resolveService(ref.urn, ref.options);
|
|
137064
|
+
const [capture, size] = await Promise.all([
|
|
137065
|
+
// The default settle, as ui-tree: free on a settled screen, and it keeps a
|
|
137066
|
+
// mid-transition window list (right after home or a launch) from naming the old app.
|
|
137067
|
+
devtools.getHierarchy({ maxDepth: 0, clearCache: true }),
|
|
137068
|
+
devtools.getScreenSize()
|
|
137069
|
+
]);
|
|
137070
|
+
const tree = adaptAndroidTree({ ...capture, truncated: false }, size);
|
|
137071
|
+
return { bundleId: tree.foregroundApp, alertVisible: tree.alertVisible };
|
|
137072
|
+
}
|
|
137073
|
+
function createForegroundAppTool(registry2) {
|
|
137074
|
+
return {
|
|
137075
|
+
id: "foreground-app",
|
|
137076
|
+
interaction: {
|
|
137077
|
+
startedMsg: () => "Reading foreground app",
|
|
137078
|
+
completedMsg: () => "Read foreground app",
|
|
137079
|
+
failedMsg: ({ failureSignal: failureSignal2 }) => `Failed to read foreground app: ${failureSignal2.error_code}`
|
|
137080
|
+
},
|
|
137081
|
+
description: `Read which app is in front, for SDK callers.
|
|
137082
|
+
Returns { bundleId, name, alertVisible }; under a system alert, bundleId is the app it covers.
|
|
137083
|
+
A field is unset when it is unknown.`,
|
|
137084
|
+
hideFromMcp: true,
|
|
137085
|
+
zodSchema: zodSchema42,
|
|
137086
|
+
capability: capability27,
|
|
137087
|
+
services: () => ({}),
|
|
137088
|
+
execute: dispatchByPlatform({
|
|
137089
|
+
toolId: "foreground-app",
|
|
137090
|
+
capability: capability27,
|
|
137091
|
+
ios: {
|
|
137092
|
+
requires: iosRequires,
|
|
137093
|
+
handler: async (_services, _params, device) => {
|
|
137094
|
+
if (await isTvOsSimulator(device.id)) {
|
|
137095
|
+
throw new UnsupportedOperationError("foreground-app", device, "tvOS");
|
|
137096
|
+
}
|
|
137097
|
+
return readIosForegroundApp(registry2, device);
|
|
137098
|
+
}
|
|
137099
|
+
},
|
|
137100
|
+
iosRemote: {
|
|
137101
|
+
requires: ["sim-remote"],
|
|
137102
|
+
handler: async (_services, _params, device) => readIosForegroundApp(registry2, device)
|
|
137103
|
+
},
|
|
137104
|
+
android: {
|
|
137105
|
+
requires: androidRequires,
|
|
137106
|
+
handler: async (_services, _params, device) => readAndroidForegroundApp(registry2, device)
|
|
137107
|
+
}
|
|
137108
|
+
})
|
|
137109
|
+
};
|
|
137110
|
+
}
|
|
137111
|
+
|
|
137045
137112
|
// ../tool-server/src/tools/await-screen-idle/index.ts
|
|
137046
137113
|
init_zod();
|
|
137047
137114
|
init_device_info();
|
|
@@ -137050,7 +137117,7 @@ var AWAIT_SCREEN_IDLE_TOOL_ID = "await-screen-idle";
|
|
|
137050
137117
|
var DEFAULT_TIMEOUT_MS4 = 3e3;
|
|
137051
137118
|
var DEFAULT_POLL_INTERVAL_MS2 = 200;
|
|
137052
137119
|
var DEFAULT_MIN_STABLE_MS = 250;
|
|
137053
|
-
var
|
|
137120
|
+
var zodSchema43 = external_exports.object({
|
|
137054
137121
|
udid: external_exports.string().min(1).describe("Target device id from `list-devices` (iOS UDID, Android serial, or Chromium id)."),
|
|
137055
137122
|
timeoutMs: external_exports.number().int().positive().max(12e4).optional().describe(
|
|
137056
137123
|
`Max time to wait for the screen to settle before giving up (default ${DEFAULT_TIMEOUT_MS4}).`
|
|
@@ -137060,7 +137127,7 @@ var zodSchema42 = external_exports.object({
|
|
|
137060
137127
|
`The screen must hold the same content for at least this long to count as settled (default ${DEFAULT_MIN_STABLE_MS}).`
|
|
137061
137128
|
)
|
|
137062
137129
|
}).strict();
|
|
137063
|
-
var
|
|
137130
|
+
var capability28 = {
|
|
137064
137131
|
apple: { simulator: true, device: true },
|
|
137065
137132
|
appleRemote: { simulator: true },
|
|
137066
137133
|
android: { emulator: true, device: true, unknown: true },
|
|
@@ -137107,8 +137174,8 @@ ${DEFAULT_TIMEOUT_MS4}ms) is reached. Returns { settled, waitedMs, polls } \u201
|
|
|
137107
137174
|
still before the timeout. Use after a launch/navigation to wait for the UI to render before screenshotting or tapping.`,
|
|
137108
137175
|
searchHint: "wait until screen settles idle stable stops changing animation transition rendered ready before screenshot",
|
|
137109
137176
|
longRunning: true,
|
|
137110
|
-
zodSchema:
|
|
137111
|
-
capability:
|
|
137177
|
+
zodSchema: zodSchema43,
|
|
137178
|
+
capability: capability28,
|
|
137112
137179
|
services: (params) => {
|
|
137113
137180
|
const device = resolveDevice(params.udid);
|
|
137114
137181
|
if (device.platform === "chromium") {
|
|
@@ -137118,7 +137185,7 @@ still before the timeout. Use after a launch/navigation to wait for the UI to re
|
|
|
137118
137185
|
},
|
|
137119
137186
|
async execute(services, params, ctx) {
|
|
137120
137187
|
const device = resolveDevice(params.udid);
|
|
137121
|
-
assertSupported(AWAIT_SCREEN_IDLE_TOOL_ID,
|
|
137188
|
+
assertSupported(AWAIT_SCREEN_IDLE_TOOL_ID, capability28, device);
|
|
137122
137189
|
if (device.platform === "ios") await ensureDeps(iosRequires);
|
|
137123
137190
|
else if (device.platform === "ios-remote") await ensureDeps(["sim-remote"]);
|
|
137124
137191
|
else if (device.platform === "android") await ensureDeps(androidRequires);
|
|
@@ -137205,7 +137272,7 @@ function bootstrapFailureMessage(bootstrap) {
|
|
|
137205
137272
|
// ../tool-server/src/tools/profiler/react/react-profiler-start.ts
|
|
137206
137273
|
var NO_DEVTOOLS_HOOK_ERROR = "React DevTools hook (__REACT_DEVTOOLS_GLOBAL_HOOK__) is not present in this app's JavaScript runtime. React profiling requires a development build with React DevTools enabled. Likely causes: (1) the app is a release/production build \u2014 DevTools is stripped to reduce bundle size; (2) you connected to the wrong JS runtime; (3) this isn't a React (Native) app. Fix: rebuild in debug/dev mode (e.g. `npx react-native run-ios` without --configuration Release; for Expo, run a dev client). Once the app is running with DevTools attached, call react-profiler-start again.";
|
|
137207
137274
|
var NO_RENDERERS_ATTACHED_ERROR = "React DevTools hook is present but no React renderer has registered yet. The hook is loaded but no fiber renderer has attached \u2014 typically because the app has not committed its first render, or the DevTools backend has not been bootstrapped on a bridgeless React Native dev build. Fix: ensure the app has rendered (interact with it once, then retry); if it stays empty, call react-profiler-start first \u2014 it will attempt to attach the DevTools backend automatically.";
|
|
137208
|
-
var
|
|
137275
|
+
var zodSchema44 = external_exports.object({
|
|
137209
137276
|
port: metroPortField,
|
|
137210
137277
|
device_id: external_exports.string().describe(
|
|
137211
137278
|
"Device id from list-devices \u2014 the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial)."
|
|
@@ -137237,7 +137304,7 @@ Before calling this, ask the user if they also want native profiling (native-pro
|
|
|
137237
137304
|
After starting, ask the user to perform the interaction to profile, then call react-profiler-stop.
|
|
137238
137305
|
Returns { started_at, startedAtEpochMs, hermes_version, detected_architecture } on success, or the already_running payload described above.
|
|
137239
137306
|
Fails if the Hermes runtime is not reachable or the Metro CDP connection cannot be established.`,
|
|
137240
|
-
zodSchema:
|
|
137307
|
+
zodSchema: zodSchema44,
|
|
137241
137308
|
capability: RN_ONLY_TOOL_CAPABILITY,
|
|
137242
137309
|
services: () => ({}),
|
|
137243
137310
|
async execute(_services, params) {
|
|
@@ -137508,7 +137575,7 @@ async function readCommitTree(path53) {
|
|
|
137508
137575
|
}
|
|
137509
137576
|
|
|
137510
137577
|
// ../tool-server/src/tools/profiler/react/react-profiler-stop.ts
|
|
137511
|
-
var
|
|
137578
|
+
var zodSchema45 = external_exports.object({
|
|
137512
137579
|
port: metroPortField,
|
|
137513
137580
|
device_id: external_exports.string().describe(
|
|
137514
137581
|
"Device id from list-devices \u2014 the SAME id you passed to debugger-connect (iOS simulator UDID or Android serial)."
|
|
@@ -137597,7 +137664,7 @@ Call react-profiler-start first, then exercise the app, then call this.
|
|
|
137597
137664
|
Returns { duration_ms, sample_count, fiber_renders_captured, total_react_commits, hot_commit_indices } summarizing the session.
|
|
137598
137665
|
When any commit had fibers whose display name could not be resolved at stop time (typically transient components like modals/tooltips/animations that unmounted before stop), the response also includes { unattributed_ms, unattributed_fiber_count, unattributed_commit_count } \u2014 these quantify how much work is not accounted for in the per-component breakdown (the per-commit duration itself remains correct).
|
|
137599
137666
|
Fails if no active profiling session exists or the CDP connection was lost during recording.`,
|
|
137600
|
-
zodSchema:
|
|
137667
|
+
zodSchema: zodSchema45,
|
|
137601
137668
|
capability: RN_ONLY_TOOL_CAPABILITY,
|
|
137602
137669
|
services: () => ({}),
|
|
137603
137670
|
async execute(_services, params) {
|
|
@@ -137822,7 +137889,7 @@ Fails if no active profiling session exists or the CDP connection was lost durin
|
|
|
137822
137889
|
|
|
137823
137890
|
// ../tool-server/src/tools/profiler/react/react-profiler-status.ts
|
|
137824
137891
|
init_zod();
|
|
137825
|
-
var
|
|
137892
|
+
var zodSchema46 = external_exports.object({
|
|
137826
137893
|
port: metroPortField,
|
|
137827
137894
|
device_id: external_exports.string().describe(
|
|
137828
137895
|
"Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId)."
|
|
@@ -137837,7 +137904,7 @@ function createReactProfilerStatusTool(registry2) {
|
|
|
137837
137904
|
failedMsg: ({ failureSignal: failureSignal2 }) => `Failed to check React profiler: ${failureSignal2.error_code}`
|
|
137838
137905
|
},
|
|
137839
137906
|
description: `Check the state of the React profiler session without side effects. Use after an interruption (debugger disconnect, unexpected error, agent pause) to decide whether to continue with react-profiler-stop, start a new session, or reconnect the debugger. Ownership is verified server-side against this tool-server's in-memory session \u2014 no token-threading is required. Returns { session_status, is_running, current_owner, \u2026 }. If this tool-server process restarted after react-profiler-start, status will report 'taken_over'; use react-profiler-start { force: true } to reclaim.`,
|
|
137840
|
-
zodSchema:
|
|
137907
|
+
zodSchema: zodSchema46,
|
|
137841
137908
|
// RN-only: companion to react-profiler-start.
|
|
137842
137909
|
capability: RN_ONLY_TOOL_CAPABILITY,
|
|
137843
137910
|
services: () => ({}),
|
|
@@ -139451,7 +139518,7 @@ var annotationSchema = external_exports.object({
|
|
|
139451
139518
|
),
|
|
139452
139519
|
label: external_exports.string().describe("Description of the action performed")
|
|
139453
139520
|
});
|
|
139454
|
-
var
|
|
139521
|
+
var zodSchema47 = external_exports.object({
|
|
139455
139522
|
port: metroPortField,
|
|
139456
139523
|
device_id: external_exports.string().describe(
|
|
139457
139524
|
"Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId)."
|
|
@@ -139484,7 +139551,7 @@ where tapTimestampMs is the timestampMs returned by the tap/swipe tool and start
|
|
|
139484
139551
|
is returned by react-profiler-start.
|
|
139485
139552
|
Use when the profiling session is complete and you need to interpret the collected data.
|
|
139486
139553
|
Fails if react-profiler-stop has not been called or no profiling data is stored.`,
|
|
139487
|
-
zodSchema:
|
|
139554
|
+
zodSchema: zodSchema47,
|
|
139488
139555
|
// RN-only: reads commit data captured via the React DevTools backend, which
|
|
139489
139556
|
// Chromium does not have.
|
|
139490
139557
|
capability: RN_ONLY_TOOL_CAPABILITY,
|
|
@@ -139621,7 +139688,7 @@ Fails if react-profiler-stop has not been called or no profiling data is stored.
|
|
|
139621
139688
|
// ../tool-server/src/tools/profiler/react/react-profiler-component-source.ts
|
|
139622
139689
|
init_zod();
|
|
139623
139690
|
var import_fs6 = require("fs");
|
|
139624
|
-
var
|
|
139691
|
+
var zodSchema48 = external_exports.object({
|
|
139625
139692
|
component_name: external_exports.string().describe("Name of the React component to look up"),
|
|
139626
139693
|
project_root: external_exports.string().describe("Absolute path to the RN project root")
|
|
139627
139694
|
});
|
|
@@ -139639,7 +139706,7 @@ var reactProfilerComponentSourceTool = {
|
|
|
139639
139706
|
Call this per-finding after react-profiler-analyze to inspect source before proposing a fix.
|
|
139640
139707
|
Returns found: false if the component is not found in user-owned code (e.g. lives in node_modules).
|
|
139641
139708
|
When several files define a component with the same name (e.g. platform variants like List.tsx and List.web.tsx), returns the primary match and lists the rest under otherMatches[] (file/line/col) \u2014 check it before assuming the returned file is the one you meant.`,
|
|
139642
|
-
zodSchema:
|
|
139709
|
+
zodSchema: zodSchema48,
|
|
139643
139710
|
// Declared so the tool catalogue groups this with the other react-profiler-*
|
|
139644
139711
|
// tools; the HTTP gate itself is a no-op here, as there is no device arg to
|
|
139645
139712
|
// inspect.
|
|
@@ -139695,7 +139762,7 @@ When several files define a component with the same name (e.g. platform variants
|
|
|
139695
139762
|
// ../tool-server/src/tools/profiler/react/react-profiler-cpu-summary.ts
|
|
139696
139763
|
init_zod();
|
|
139697
139764
|
init_src2();
|
|
139698
|
-
var
|
|
139765
|
+
var zodSchema49 = external_exports.object({
|
|
139699
139766
|
port: metroPortField,
|
|
139700
139767
|
device_id: external_exports.string().describe(
|
|
139701
139768
|
"Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId)."
|
|
@@ -139777,7 +139844,7 @@ Use when you specifically need to investigate JS CPU hotspots that are NOT tied
|
|
|
139777
139844
|
Call react-profiler-stop first. Reads directly from the stored cpuProfile.
|
|
139778
139845
|
Returns a markdown table of the top hotspot functions with self-time, total-time, and location.
|
|
139779
139846
|
Fails if react-profiler-stop has not been called or no CPU profile is stored.`,
|
|
139780
|
-
zodSchema:
|
|
139847
|
+
zodSchema: zodSchema49,
|
|
139781
139848
|
// RN-only: reads a Hermes CPU profile; Chromium's V8 sample format differs.
|
|
139782
139849
|
capability: RN_ONLY_TOOL_CAPABILITY,
|
|
139783
139850
|
services: () => ({}),
|
|
@@ -139873,7 +139940,7 @@ function renderMarkdownTable2(entries) {
|
|
|
139873
139940
|
);
|
|
139874
139941
|
return [header, sep5, ...rows].join("\n");
|
|
139875
139942
|
}
|
|
139876
|
-
var
|
|
139943
|
+
var zodSchema50 = external_exports.object({
|
|
139877
139944
|
port: metroPortField,
|
|
139878
139945
|
device_id: external_exports.string().describe(
|
|
139879
139946
|
"Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId)."
|
|
@@ -139891,7 +139958,7 @@ var reactProfilerRendersTool = {
|
|
|
139891
139958
|
Returns a markdown table of the top re-rendering components. No profiling session required \u2014 works on a live connected app.
|
|
139892
139959
|
Use when you want a quick snapshot of render counts without a full profiling session.
|
|
139893
139960
|
Fails if the React DevTools hook is not present in the runtime or the app is not connected.`,
|
|
139894
|
-
zodSchema:
|
|
139961
|
+
zodSchema: zodSchema50,
|
|
139895
139962
|
// RN-only: queries the React DevTools backend hook on the live runtime.
|
|
139896
139963
|
capability: RN_ONLY_TOOL_CAPABILITY,
|
|
139897
139964
|
services: (params) => ({
|
|
@@ -140048,7 +140115,7 @@ function buildFiberTreeScript(maxDepth, filter) {
|
|
|
140048
140115
|
}
|
|
140049
140116
|
})()`;
|
|
140050
140117
|
}
|
|
140051
|
-
var
|
|
140118
|
+
var zodSchema51 = external_exports.object({
|
|
140052
140119
|
port: metroPortField,
|
|
140053
140120
|
device_id: external_exports.string().describe(
|
|
140054
140121
|
"Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId)."
|
|
@@ -140067,7 +140134,7 @@ var reactProfilerFiberTreeTool = {
|
|
|
140067
140134
|
Use when tracing ancestry of a library component or checking for useMemoCache hook (confirms React Compiler is active on a component).
|
|
140068
140135
|
Returns a nested JSON tree of fiber nodes with name, tag, actualDuration, selfBaseDuration, and children.
|
|
140069
140136
|
Fails if the React DevTools hook is not present or no fiber roots have been committed yet.`,
|
|
140070
|
-
zodSchema:
|
|
140137
|
+
zodSchema: zodSchema51,
|
|
140071
140138
|
// RN-only: walks the fiber tree via the React DevTools backend hook.
|
|
140072
140139
|
capability: RN_ONLY_TOOL_CAPABILITY,
|
|
140073
140140
|
services: (params) => ({
|
|
@@ -143865,7 +143932,7 @@ function metroDeviceIdParam(description) {
|
|
|
143865
143932
|
}
|
|
143866
143933
|
|
|
143867
143934
|
// ../tool-server/src/tools/profiler/native-profiler/native-profiler-start.ts
|
|
143868
|
-
var
|
|
143935
|
+
var zodSchema52 = external_exports.object({
|
|
143869
143936
|
device_id: metroDeviceIdParam(
|
|
143870
143937
|
"Target device id from `list-devices` (iOS UDID or Android serial)."
|
|
143871
143938
|
),
|
|
@@ -143879,7 +143946,7 @@ var zodSchema51 = external_exports.object({
|
|
|
143879
143946
|
"iOS-only. When true, cold-launches the app under the profiler with Malloc Stack Logging enabled so memory leaks carry an allocation backtrace (responsible frame + library). Without it, leaks are still detected but unattributable \u2014 Instruments reports '<Call stack limit reached>'. Trade-offs: this RESTARTS the app (current state is lost), adds memory/CPU overhead, and makes the app noticeably slow to launch (every startup allocation records a backtrace), so leave it off for pure CPU/hang profiling. Requires a non-degraded Xcode: on Xcode 26.4 and later the cold-launch path is broken, so the call is rejected up front (re-run without the flag, or set ARGENT_IOS_CAPTURE=device to override if the device path works on your host). ARGENT_IOS_CAPTURE=all-processes \u2014 e.g. exported globally for the normal capture path \u2014 also rejects this flag up front, since that fallback cannot cold-launch; unset it (or set it to device) first. Ignored on Android."
|
|
143880
143947
|
)
|
|
143881
143948
|
});
|
|
143882
|
-
var
|
|
143949
|
+
var capability29 = {
|
|
143883
143950
|
apple: { simulator: true },
|
|
143884
143951
|
android: { emulator: true, device: true, unknown: true }
|
|
143885
143952
|
};
|
|
@@ -143890,21 +143957,21 @@ var nativeProfilerStartTool = {
|
|
|
143890
143957
|
completedMsg: () => "Started native profiler",
|
|
143891
143958
|
failedMsg: ({ failureSignal: failureSignal2 }) => `Failed to start native profiler: ${failureSignal2.error_code}`
|
|
143892
143959
|
},
|
|
143893
|
-
capability:
|
|
143960
|
+
capability: capability29,
|
|
143894
143961
|
description: `Start native profiling on a booted device. iOS: Instruments via xctrace (CPU, hangs, memory). Android: Perfetto (CPU, jank, RSS-growth weak signal).
|
|
143895
143962
|
Auto-detects the running app process unless app_process is explicitly provided.
|
|
143896
143963
|
After starting, let the user interact with the app, then call native-profiler-stop.
|
|
143897
143964
|
Use when you want to capture native CPU, hang, and memory data for a running app.
|
|
143898
143965
|
Returns { status, pid, traceFile } confirming the recording has started.
|
|
143899
143966
|
Fails if no app is running on the device, or the profiler cannot attach to the process.`,
|
|
143900
|
-
zodSchema:
|
|
143967
|
+
zodSchema: zodSchema52,
|
|
143901
143968
|
services: (params) => ({
|
|
143902
143969
|
session: nativeProfilerSessionRef(resolveDevice(params.device_id))
|
|
143903
143970
|
}),
|
|
143904
143971
|
async execute(services, params) {
|
|
143905
143972
|
const api = services.session;
|
|
143906
143973
|
const device = resolveDevice(params.device_id);
|
|
143907
|
-
assertSupported("native-profiler-start",
|
|
143974
|
+
assertSupported("native-profiler-start", capability29, device);
|
|
143908
143975
|
if (api.platform === "ios") {
|
|
143909
143976
|
await ensureDeps(["xcrun"]);
|
|
143910
143977
|
return startNativeProfilerIos(api, params);
|
|
@@ -143917,12 +143984,12 @@ Fails if no app is running on the device, or the profiler cannot attach to the p
|
|
|
143917
143984
|
// ../tool-server/src/tools/profiler/native-profiler/native-profiler-stop.ts
|
|
143918
143985
|
init_zod();
|
|
143919
143986
|
init_device_info();
|
|
143920
|
-
var
|
|
143987
|
+
var zodSchema53 = external_exports.object({
|
|
143921
143988
|
device_id: metroDeviceIdParam(
|
|
143922
143989
|
"Target device id from `list-devices` (iOS UDID or Android serial)."
|
|
143923
143990
|
)
|
|
143924
143991
|
});
|
|
143925
|
-
var
|
|
143992
|
+
var capability30 = {
|
|
143926
143993
|
apple: { simulator: true },
|
|
143927
143994
|
android: { emulator: true, device: true, unknown: true }
|
|
143928
143995
|
};
|
|
@@ -143950,7 +144017,7 @@ var nativeProfilerStopTool = {
|
|
|
143950
144017
|
completedMsg: ({ result }) => `Saved native profile ${result.traceFile.filename}`,
|
|
143951
144018
|
failedMsg: ({ failureSignal: failureSignal2 }) => `Failed to stop native profiler: ${failureSignal2.error_code}`
|
|
143952
144019
|
},
|
|
143953
|
-
capability:
|
|
144020
|
+
capability: capability30,
|
|
143954
144021
|
// Packaging plus the export passes routinely exceed the 30s MCP fetch timeout.
|
|
143955
144022
|
longRunning: true,
|
|
143956
144023
|
description: `Stop native profiling and export trace data.
|
|
@@ -143960,14 +144027,14 @@ Call native-profiler-start first.
|
|
|
143960
144027
|
Use when the user has finished the interaction to profile and you need to export the trace.
|
|
143961
144028
|
Returns { traceFile, exportedFiles, exportDiagnostics? }; traceFile is the raw trace bundle and exportedFiles the exports, all downloadable artifacts materialized to local paths.
|
|
143962
144029
|
Fails if no active native-profiler-start session exists for the given device_id.`,
|
|
143963
|
-
zodSchema:
|
|
144030
|
+
zodSchema: zodSchema53,
|
|
143964
144031
|
services: (params) => ({
|
|
143965
144032
|
session: nativeProfilerSessionRef(resolveDevice(params.device_id))
|
|
143966
144033
|
}),
|
|
143967
144034
|
async execute(services, params, ctx) {
|
|
143968
144035
|
const api = services.session;
|
|
143969
144036
|
const device = resolveDevice(params.device_id);
|
|
143970
|
-
assertSupported("native-profiler-stop",
|
|
144037
|
+
assertSupported("native-profiler-stop", capability30, device);
|
|
143971
144038
|
if (api.platform === "ios") {
|
|
143972
144039
|
await ensureDeps(["xcrun"]);
|
|
143973
144040
|
const ios = await stopNativeProfilerIos(api);
|
|
@@ -143995,12 +144062,12 @@ Fails if no active native-profiler-start session exists for the given device_id.
|
|
|
143995
144062
|
// ../tool-server/src/tools/profiler/native-profiler/native-profiler-analyze.ts
|
|
143996
144063
|
init_zod();
|
|
143997
144064
|
init_device_info();
|
|
143998
|
-
var
|
|
144065
|
+
var zodSchema54 = external_exports.object({
|
|
143999
144066
|
device_id: metroDeviceIdParam(
|
|
144000
144067
|
"Target device id from `list-devices` (iOS UDID or Android serial)."
|
|
144001
144068
|
)
|
|
144002
144069
|
});
|
|
144003
|
-
var
|
|
144070
|
+
var capability31 = {
|
|
144004
144071
|
apple: { simulator: true },
|
|
144005
144072
|
android: { emulator: true, device: true, unknown: true }
|
|
144006
144073
|
};
|
|
@@ -144011,7 +144078,7 @@ var nativeProfilerAnalyzeTool = {
|
|
|
144011
144078
|
completedMsg: () => "Analyzed native profile",
|
|
144012
144079
|
failedMsg: ({ failureSignal: failureSignal2 }) => `Failed to analyze native profile: ${failureSignal2.error_code}`
|
|
144013
144080
|
},
|
|
144014
|
-
capability:
|
|
144081
|
+
capability: capability31,
|
|
144015
144082
|
// Parsing a trace from a recording up to RECORDING_CAP_MS long routinely exceeds
|
|
144016
144083
|
// the 30s MCP fetch timeout, and an aborted call is replayed, not cancelled.
|
|
144017
144084
|
longRunning: true,
|
|
@@ -144024,14 +144091,14 @@ profiler-stack-query for hang stacks, CPU context, leak details) or implement fi
|
|
|
144024
144091
|
Call native-profiler-stop first to export the trace data.
|
|
144025
144092
|
Use when you need to interpret a completed native profiling recording.
|
|
144026
144093
|
Fails if native-profiler-stop has not been called first to export trace data.`,
|
|
144027
|
-
zodSchema:
|
|
144094
|
+
zodSchema: zodSchema54,
|
|
144028
144095
|
services: (params) => ({
|
|
144029
144096
|
session: nativeProfilerSessionRef(resolveDevice(params.device_id))
|
|
144030
144097
|
}),
|
|
144031
144098
|
async execute(services, params, ctx) {
|
|
144032
144099
|
const api = services.session;
|
|
144033
144100
|
const device = resolveDevice(params.device_id);
|
|
144034
|
-
assertSupported("native-profiler-analyze",
|
|
144101
|
+
assertSupported("native-profiler-analyze", capability31, device);
|
|
144035
144102
|
let result;
|
|
144036
144103
|
if (api.platform === "ios") {
|
|
144037
144104
|
await ensureDeps(["xcrun"]);
|
|
@@ -145094,7 +145161,7 @@ var DEFAULT_TIME_LIMIT_SECONDS = 180;
|
|
|
145094
145161
|
var MAX_TIME_LIMIT_SECONDS = 600;
|
|
145095
145162
|
var POINTER_TRAIL_LENGTH = 8;
|
|
145096
145163
|
var POINTER_REQUEST_TIMEOUT_MS = 2e3;
|
|
145097
|
-
var
|
|
145164
|
+
var zodSchema55 = external_exports.object({
|
|
145098
145165
|
udid: external_exports.string().describe("Target device id from `list-devices` (iOS Simulator UDID or Android serial)."),
|
|
145099
145166
|
timeLimitSeconds: external_exports.number().int().min(1).max(MAX_TIME_LIMIT_SECONDS).optional().describe(
|
|
145100
145167
|
`Auto-stop cap in seconds (default ${DEFAULT_TIME_LIMIT_SECONDS}, max ${MAX_TIME_LIMIT_SECONDS}). Set it to slightly more than the interaction you plan to capture.`
|
|
@@ -145106,7 +145173,7 @@ var zodSchema54 = external_exports.object({
|
|
|
145106
145173
|
"Default true. Draw simulator-server's touch visualizer into the recording: a pulse marks each tap, a comet trail follows swipes and drags, and paired markers show two-finger pinch/rotate, so the video makes clear where every interaction landed. Set false to record the raw screen with no overlay."
|
|
145107
145174
|
)
|
|
145108
145175
|
});
|
|
145109
|
-
var
|
|
145176
|
+
var capability32 = {
|
|
145110
145177
|
apple: { simulator: true },
|
|
145111
145178
|
android: { emulator: true, device: true, unknown: true }
|
|
145112
145179
|
};
|
|
@@ -145118,7 +145185,7 @@ function createScreenRecordingStartTool(registry2) {
|
|
|
145118
145185
|
completedMsg: () => "Started screen recording",
|
|
145119
145186
|
failedMsg: ({ failureSignal: failureSignal2 }) => `Failed to start screen recording: ${failureSignal2.error_code}`
|
|
145120
145187
|
},
|
|
145121
|
-
capability:
|
|
145188
|
+
capability: capability32,
|
|
145122
145189
|
description: `Start recording the device screen to a video file (h264 mp4, 30fps at the device's native resolution).
|
|
145123
145190
|
By default stretches where the screen does not change are trimmed out (see trimStatic), so a long session with only brief activity comes back as a short clip instead of minutes of dead air.
|
|
145124
145191
|
By default every tap, swipe, drag, pinch and rotate is drawn into the video as an on-screen touch marker (see showTouches), so the recording shows where each interaction landed.
|
|
@@ -145127,7 +145194,7 @@ Use when the user wants a video of an interaction, animation, or app behavior \u
|
|
|
145127
145194
|
Returns { status: "recording", timeLimitSeconds, outputFile } \u2014 the video is retrieved later by \`screen-recording-stop\`, not by reading outputFile directly.
|
|
145128
145195
|
Fails if a recording is already running on the device, the device is not booted, ffmpeg is not installed, or the platform cannot be recorded (tvOS, Chromium, Vega and remote simulators are unsupported).`,
|
|
145129
145196
|
searchHint: "record video screen capture movie mp4 start filming screencast",
|
|
145130
|
-
zodSchema:
|
|
145197
|
+
zodSchema: zodSchema55,
|
|
145131
145198
|
// Resolved inside execute, not declared eagerly: a tvOS udid classifies as
|
|
145132
145199
|
// iOS by shape, so an eager service would spawn simulator-server for a
|
|
145133
145200
|
// device it cannot drive and hang on its ready timeout (as in `screenshot`).
|
|
@@ -145137,7 +145204,7 @@ Fails if a recording is already running on the device, the device is not booted,
|
|
|
145137
145204
|
async execute(services, params) {
|
|
145138
145205
|
const api = services.session;
|
|
145139
145206
|
const device = resolveDevice(params.udid);
|
|
145140
|
-
assertSupported("screen-recording-start",
|
|
145207
|
+
assertSupported("screen-recording-start", capability32, device);
|
|
145141
145208
|
if (device.platform === "ios" && await isTvOsSimulator(params.udid)) {
|
|
145142
145209
|
throw new FailureError(
|
|
145143
145210
|
`Screen recording is not supported on tvOS simulators (device ${params.udid}).`,
|
|
@@ -145226,11 +145293,11 @@ function makePointerControl(simulator) {
|
|
|
145226
145293
|
var import_node_path22 = require("node:path");
|
|
145227
145294
|
init_zod();
|
|
145228
145295
|
init_device_info();
|
|
145229
|
-
var
|
|
145296
|
+
var zodSchema56 = external_exports.object({
|
|
145230
145297
|
udid: external_exports.string().describe("Target device id from `list-devices` (iOS Simulator UDID or Android serial).")
|
|
145231
145298
|
});
|
|
145232
145299
|
var RECORDINGS_DIR = ".argent/recordings";
|
|
145233
|
-
var
|
|
145300
|
+
var capability33 = {
|
|
145234
145301
|
apple: { simulator: true },
|
|
145235
145302
|
android: { emulator: true, device: true, unknown: true }
|
|
145236
145303
|
};
|
|
@@ -145241,21 +145308,21 @@ var screenRecordingStopTool = {
|
|
|
145241
145308
|
completedMsg: ({ result }) => `Saved screen recording ${result.video.filename}`,
|
|
145242
145309
|
failedMsg: ({ failureSignal: failureSignal2 }) => `Failed to stop screen recording: ${failureSignal2.error_code}`
|
|
145243
145310
|
},
|
|
145244
|
-
capability:
|
|
145311
|
+
capability: capability33,
|
|
145245
145312
|
description: `Stop the screen recording started by \`screen-recording-start\` and retrieve the video: frame capture ends and ffmpeg finalizes the mp4.
|
|
145246
145313
|
Also retrieves the video when the recording already ended on its own (time limit reached, capture process died) \u2014 call it even after the cap fired.
|
|
145247
145314
|
Use when the interaction being captured is finished, or a tool-result note reminds you a recording is still running.
|
|
145248
145315
|
Returns { video, durationMs, wallClockMs?, trimmedMs?, panelSwitches?, warning? }; video is a downloadable artifact materialized to a local path. When static-frame trimming removed dead air, durationMs is the trimmed video length and wallClockMs/trimmedMs report the real duration and how much was cut. On a foldable simulator, the recording follows the panel that shows the UI. panelSwitches gives the number of panel changes. The video keeps the size of the first panel. warning is set when argent could not find that panel during the recording.
|
|
145249
145316
|
Fails if no recording (running or finished-but-unretrieved) exists for the given udid.`,
|
|
145250
145317
|
searchHint: "stop end finish screen recording video capture save retrieve",
|
|
145251
|
-
zodSchema:
|
|
145318
|
+
zodSchema: zodSchema56,
|
|
145252
145319
|
services: (params) => ({
|
|
145253
145320
|
session: screenRecordingSessionRef(resolveDevice(params.udid))
|
|
145254
145321
|
}),
|
|
145255
145322
|
async execute(services, params, ctx) {
|
|
145256
145323
|
const api = services.session;
|
|
145257
145324
|
const device = resolveDevice(params.udid);
|
|
145258
|
-
assertSupported("screen-recording-stop",
|
|
145325
|
+
assertSupported("screen-recording-stop", capability33, device);
|
|
145259
145326
|
const stopped = await stopCapture(api);
|
|
145260
145327
|
const artifacts = requireArtifacts(ctx);
|
|
145261
145328
|
const video = await artifacts.register({
|
|
@@ -145287,7 +145354,7 @@ var timeWindowSchema = external_exports.object({
|
|
|
145287
145354
|
"End of window in ms since profiling started \u2014 the same clock profiler-commit-query prints"
|
|
145288
145355
|
)
|
|
145289
145356
|
});
|
|
145290
|
-
var
|
|
145357
|
+
var zodSchema57 = external_exports.object({
|
|
145291
145358
|
port: metroPortField,
|
|
145292
145359
|
device_id: metroDeviceIdParam(
|
|
145293
145360
|
"Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId)."
|
|
@@ -145576,7 +145643,7 @@ Every table states how many samples it covers and how much of that was idle.
|
|
|
145576
145643
|
Use when investigating JS CPU hotspots or correlating CPU cost with specific components.
|
|
145577
145644
|
Returns a markdown table of CPU hotspots, call tree, or per-component CPU breakdown.
|
|
145578
145645
|
Fails if no CPU profile is stored \u2014 run react-profiler-stop first.`,
|
|
145579
|
-
zodSchema:
|
|
145646
|
+
zodSchema: zodSchema57,
|
|
145580
145647
|
// RN-only: reads Hermes-format CPU profiles; Chromium's V8 sample format differs.
|
|
145581
145648
|
capability: RN_ONLY_TOOL_CAPABILITY,
|
|
145582
145649
|
services: () => ({}),
|
|
@@ -145662,7 +145729,7 @@ var timeRangeSchema = external_exports.object({
|
|
|
145662
145729
|
"End of range in ms since profiling started \u2014 the same clock profiler-commit-query prints"
|
|
145663
145730
|
)
|
|
145664
145731
|
});
|
|
145665
|
-
var
|
|
145732
|
+
var zodSchema58 = external_exports.object({
|
|
145666
145733
|
port: metroPortField,
|
|
145667
145734
|
device_id: metroDeviceIdParam(
|
|
145668
145735
|
"Device logicalDeviceId from debugger-connect (iOS simulator UDID or Android logicalDeviceId)."
|
|
@@ -145935,7 +146002,7 @@ Modes:
|
|
|
145935
146002
|
Use when drilling into specific components or time windows after react-profiler-analyze.
|
|
145936
146003
|
Returns a markdown table or tree of commit data matching the requested mode.
|
|
145937
146004
|
Fails if react-profiler-stop has not been called or no commit data is stored.`,
|
|
145938
|
-
zodSchema:
|
|
146005
|
+
zodSchema: zodSchema58,
|
|
145939
146006
|
// Reads React commit data captured via the React DevTools backend.
|
|
145940
146007
|
capability: RN_ONLY_TOOL_CAPABILITY,
|
|
145941
146008
|
services: () => ({}),
|
|
@@ -146006,7 +146073,7 @@ Fails if react-profiler-stop has not been called or no commit data is stored.`,
|
|
|
146006
146073
|
init_zod();
|
|
146007
146074
|
init_src2();
|
|
146008
146075
|
init_device_info();
|
|
146009
|
-
var
|
|
146076
|
+
var zodSchema59 = external_exports.object({
|
|
146010
146077
|
device_id: metroDeviceIdParam("iOS Simulator UDID or Android serial."),
|
|
146011
146078
|
mode: external_exports.enum(["hang_stacks", "function_callers", "thread_breakdown", "leak_stacks"]).describe(
|
|
146012
146079
|
"Query mode: hang_stacks (full CPU context during a hang), function_callers (who calls a native function), thread_breakdown (CPU split by thread), leak_stacks (leak details by object type)"
|
|
@@ -146324,7 +146391,7 @@ Modes:
|
|
|
146324
146391
|
Use when drilling into native hang stacks, thread CPU breakdown, or memory leaks after native-profiler-analyze.
|
|
146325
146392
|
Returns a markdown report with native call stacks, thread weights, or leak details for the selected mode.
|
|
146326
146393
|
Fails if native-profiler-analyze has not been run or no parsed trace data is in memory.`,
|
|
146327
|
-
zodSchema:
|
|
146394
|
+
zodSchema: zodSchema59,
|
|
146328
146395
|
// No chromium entry: it has no native trace capture.
|
|
146329
146396
|
capability: {
|
|
146330
146397
|
apple: { simulator: true },
|
|
@@ -146394,7 +146461,7 @@ function buildPerfettoAnchor(wallClockStartMs) {
|
|
|
146394
146461
|
}
|
|
146395
146462
|
|
|
146396
146463
|
// ../tool-server/src/tools/profiler/combined/profiler-combined-report.ts
|
|
146397
|
-
var
|
|
146464
|
+
var zodSchema60 = external_exports.object({
|
|
146398
146465
|
port: metroPortField,
|
|
146399
146466
|
device_id: metroDeviceIdParam("iOS Simulator/device UDID or Android serial")
|
|
146400
146467
|
});
|
|
@@ -146411,7 +146478,7 @@ Requires both react-profiler-analyze and native-profiler-analyze to have been ca
|
|
|
146411
146478
|
Call this tool when both profilers were run in parallel on the same session.
|
|
146412
146479
|
Returns a markdown report correlating hangs with React commits, memory leaks, and investigation hints.
|
|
146413
146480
|
Fails if either react-profiler-analyze or native-profiler-analyze has not been called first.`,
|
|
146414
|
-
zodSchema:
|
|
146481
|
+
zodSchema: zodSchema60,
|
|
146415
146482
|
// iOS reads xctrace output; Android re-queries the Perfetto .pftrace via
|
|
146416
146483
|
// loadAndroidCombinedData. Chromium has no native trace capture.
|
|
146417
146484
|
capability: {
|
|
@@ -146735,7 +146802,7 @@ function assertSafeSessionId(sessionId) {
|
|
|
146735
146802
|
);
|
|
146736
146803
|
}
|
|
146737
146804
|
}
|
|
146738
|
-
var
|
|
146805
|
+
var zodSchema61 = external_exports.object({
|
|
146739
146806
|
mode: external_exports.enum(["list", "load_react", "load_native"]).describe(
|
|
146740
146807
|
"list: show available sessions on disk. load_react: load a React profiler session into memory for query tools. load_native: re-parse native profiler XML files (xctrace on iOS) into memory for query tools."
|
|
146741
146808
|
),
|
|
@@ -147096,7 +147163,7 @@ Modes:
|
|
|
147096
147163
|
For Android .pftrace restores, pass app_process for older sessions that do not have a metadata sidecar.
|
|
147097
147164
|
Returns a summary of the loaded session or a session list for the list mode.
|
|
147098
147165
|
Fails if the session_id is not found or required XML files are missing from disk.`,
|
|
147099
|
-
zodSchema:
|
|
147166
|
+
zodSchema: zodSchema61,
|
|
147100
147167
|
// The Hermes, xctrace and perfetto formats this loads have no Chromium
|
|
147101
147168
|
// equivalent; the gate fails at the call site, not inside the trace parser.
|
|
147102
147169
|
capability: RN_ONLY_TOOL_CAPABILITY,
|
|
@@ -147225,7 +147292,7 @@ function unnameableSessionUrns(urns) {
|
|
|
147225
147292
|
}
|
|
147226
147293
|
|
|
147227
147294
|
// ../tool-server/src/tools/simulator/stop-simulator-server.ts
|
|
147228
|
-
var
|
|
147295
|
+
var zodSchema62 = external_exports.object({
|
|
147229
147296
|
udid: external_exports.string().describe(
|
|
147230
147297
|
"Target device id (iOS UDID, Android serial, or Chromium id) whose transport session to stop"
|
|
147231
147298
|
)
|
|
@@ -147239,7 +147306,7 @@ function createStopSimulatorServerTool(registry2) {
|
|
|
147239
147306
|
failedMsg: ({ params, failureSignal: failureSignal2 }) => `Failed to stop simulator server for ${params.udid}: ${failureSignal2.error_code}`
|
|
147240
147307
|
},
|
|
147241
147308
|
description: `Stop the transport session for a specific device (iOS simulator / Android: simulator-server process; physical iOS: the on-device runner; Chromium: CDP WebSocket) and free its resources; on a TV target it also reaps that device's TV-control daemons. Use when you are done interacting with one device but want to keep others running, or to restart a wedged transport. On iOS / Android / TV it deliberately leaves this device's native-devtools, accessibility, profiler and debugger services running - to drain those as well, use stop-all-simulator-servers with \`devices\`. On CHROMIUM that does not hold: the JS-runtime debugger declares the CDP session as a dependency, so stopping the transport cascades to it and its captured console history goes with it - reconnect with debugger-connect afterwards. Returns { stopped, udid }. Fails silently if no session is open for the given id.`,
|
|
147242
|
-
zodSchema:
|
|
147309
|
+
zodSchema: zodSchema62,
|
|
147243
147310
|
services: () => ({}),
|
|
147244
147311
|
async execute(_services, params) {
|
|
147245
147312
|
const udid = params.udid;
|
|
@@ -147270,7 +147337,7 @@ function createStopSimulatorServerTool(registry2) {
|
|
|
147270
147337
|
init_zod();
|
|
147271
147338
|
init_src2();
|
|
147272
147339
|
init_external_devices();
|
|
147273
|
-
var
|
|
147340
|
+
var zodSchema63 = external_exports.object({
|
|
147274
147341
|
devices: external_exports.array(external_exports.string()).optional().describe(
|
|
147275
147342
|
"Device ids (iOS UDID / Android serial / Chromium id) to scope the teardown to \u2014 pass the devices THIS session actually used. Omit only for a deliberate machine-wide cleanup: one tool-server serves every agent using this argent install, so an unscoped stop also kills devices another agent is mid-session on."
|
|
147276
147343
|
)
|
|
@@ -147309,7 +147376,7 @@ function createStopAllSimulatorServersTool(registry2) {
|
|
|
147309
147376
|
PASS \`devices\` with the device ids this session used \u2014 one tool-server serves every agent, subagent and CLI call using this argent install, and an unscoped call tears down THEIR devices too (a mid-recording devtools teardown degrades another agent's flow to brittle coordinate taps; that agent is warned, but its recorded steps are already the worse kind). Omit \`devices\` only when a machine-wide cleanup is what you actually want. Passing an EMPTY array scopes to nothing and stops nothing - it is not a way to ask for the machine-wide sweep.
|
|
147310
147377
|
A JS-runtime debugger session is keyed by the id you called \`debugger-connect\` with. On a Metro serving two or more devices that id is not a udid or serial - connect refuses those and tells you to re-target with the \`logicalDeviceId\` it returns - so a scope built from \`list-devices\` ids cannot reach that session. Pass any such \`logicalDeviceId\` in \`devices\` ALONGSIDE the device id; { left_running } names the ones you missed.
|
|
147311
147378
|
Returns { stopped } - the URNs of the services that were actually live and got shut down; an ERROR node is disposed too but never appears there, so an empty \`stopped\` only means nothing was still running. { unmatched } lists supplied ids that own no service here, so a mistyped id - or a device NAME passed where an id was expected - does not read as a clean machine. It is NOT proof the id is wrong: a Vega device is driven through CLI/adb shell-outs, so one you only booted and drove with the remote registers no service and always lands here \u2014 as does a real device of any platform this session never started anything on. Present ONLY when \`devices\` was supplied AND at least one id matched nothing - absent on an unscoped call and when every id matched. Stopping the same device twice does not report it unmatched: ownership counts regardless of service state. { left_running } lists live debugger sessions (and the network inspectors / React profiler sessions riding on them) whose id no device scope can name - re-call with that id to reap them. { aborted: true } means the caller cancelled the request part-way, so the rest of the machine was left untouched and neither of the other two fields was computed. Past the schema - which rejects an unknown key outright, so the \`udids\` slip is an error rather than a silent machine-wide sweep - the call always succeeds; reaping nothing is a result, not a failure.`,
|
|
147312
|
-
zodSchema:
|
|
147379
|
+
zodSchema: zodSchema63,
|
|
147313
147380
|
services: () => ({}),
|
|
147314
147381
|
async execute(_services, params, ctx) {
|
|
147315
147382
|
const devices = params.devices;
|
|
@@ -147389,7 +147456,7 @@ function listeningPids(port) {
|
|
|
147389
147456
|
if (!output) return [];
|
|
147390
147457
|
return output.split("\n").map((s) => parseInt(s.trim(), 10)).filter((n) => !Number.isNaN(n));
|
|
147391
147458
|
}
|
|
147392
|
-
var
|
|
147459
|
+
var zodSchema64 = external_exports.object({
|
|
147393
147460
|
port: external_exports.number().int().min(1).max(65535).default(8081).describe("TCP port Metro is listening on (default 8081)")
|
|
147394
147461
|
});
|
|
147395
147462
|
var stopMetroTool = {
|
|
@@ -147400,7 +147467,7 @@ var stopMetroTool = {
|
|
|
147400
147467
|
failedMsg: ({ params, failureSignal: failureSignal2 }) => `Failed to stop Metro on port ${params.port}: ${failureSignal2.error_code}`
|
|
147401
147468
|
},
|
|
147402
147469
|
description: `Stop the Metro bundler process listening on a given port (default 8081). Use when ending a React Native session or when Metro must be restarted. Returns { stopped, port, pids }; stopped=false if no process is found on the port. Fails if the port lookup command times out or the process cannot be killed. This is DESTRUCTIVE \u2014 always ask the user for confirmation before calling this tool.`,
|
|
147403
|
-
zodSchema:
|
|
147470
|
+
zodSchema: zodSchema64,
|
|
147404
147471
|
services: () => ({}),
|
|
147405
147472
|
async execute(_services, params) {
|
|
147406
147473
|
const port = params.port;
|
|
@@ -149744,7 +149811,7 @@ async function appendStepToFlow(session, step) {
|
|
|
149744
149811
|
}
|
|
149745
149812
|
|
|
149746
149813
|
// ../tool-server/src/tools/flows/flow-start-recording.ts
|
|
149747
|
-
var
|
|
149814
|
+
var zodSchema65 = external_exports.object({
|
|
149748
149815
|
name: external_exports.string().describe(
|
|
149749
149816
|
'Name for this flow (e.g. "settings-explore") \u2014 letters, digits, underscore and hyphen only.'
|
|
149750
149817
|
),
|
|
@@ -149801,7 +149868,7 @@ recording. Over a link, the next recorded step writes over your edit.
|
|
|
149801
149868
|
Without a link, the recorder reads the file again before each step, but an
|
|
149802
149869
|
edit that renumbers the steps drops the warnings that flow-finish-recording
|
|
149803
149870
|
reports for those steps.`,
|
|
149804
|
-
zodSchema:
|
|
149871
|
+
zodSchema: zodSchema65,
|
|
149805
149872
|
fileInputs: fileInputs2,
|
|
149806
149873
|
services: () => ({}),
|
|
149807
149874
|
async execute(_services, params, ctx) {
|
|
@@ -152301,7 +152368,7 @@ function stepAnchor(step) {
|
|
|
152301
152368
|
|
|
152302
152369
|
// ../tool-server/src/tools/flows/flow-add-step.ts
|
|
152303
152370
|
init_device_info();
|
|
152304
|
-
var
|
|
152371
|
+
var zodSchema66 = external_exports.object({
|
|
152305
152372
|
name: external_exports.string().describe("Name of the flow being recorded \u2014 the one passed to flow-start-recording."),
|
|
152306
152373
|
project_root: external_exports.string().describe(
|
|
152307
152374
|
"Absolute path to the project root of the flow being recorded \u2014 the same value passed to flow-start-recording. Together with `name` it identifies which recording this step belongs to."
|
|
@@ -152760,7 +152827,7 @@ Returns { message, stepCount, recorded, savedTo }; \`recorded\`, not the status,
|
|
|
152760
152827
|
// more times — and every retry re-runs the action and appends another step,
|
|
152761
152828
|
// because an aborted request still appends its first.
|
|
152762
152829
|
longRunning: true,
|
|
152763
|
-
zodSchema:
|
|
152830
|
+
zodSchema: zodSchema66,
|
|
152764
152831
|
fileInputs: fileInputs3,
|
|
152765
152832
|
services: () => ({}),
|
|
152766
152833
|
async execute(_services, params, ctx) {
|
|
@@ -152949,7 +153016,7 @@ Returns { message, stepCount, recorded, savedTo }; \`recorded\`, not the status,
|
|
|
152949
153016
|
|
|
152950
153017
|
// ../tool-server/src/tools/flows/flow-insert-echo.ts
|
|
152951
153018
|
init_zod();
|
|
152952
|
-
var
|
|
153019
|
+
var zodSchema67 = external_exports.object({
|
|
152953
153020
|
name: external_exports.string().describe("Name of the flow being recorded \u2014 the one passed to flow-start-recording."),
|
|
152954
153021
|
project_root: external_exports.string().describe(
|
|
152955
153022
|
"Absolute path to the project root of the flow being recorded \u2014 the same value passed to flow-start-recording. Together with `name` it identifies which recording this echo belongs to."
|
|
@@ -152967,7 +153034,7 @@ var flowInsertEchoTool = {
|
|
|
152967
153034
|
description: `Record an echo step in the flow named by \`name\` + \`project_root\`. Echo steps print a message when the flow is replayed \u2014 useful as labels between tool calls.
|
|
152968
153035
|
Use when you want to annotate a recorded flow with a human-readable label or checkpoint message.
|
|
152969
153036
|
Returns { message, stepCount, savedTo }. Fails if that flow has no recording in progress.`,
|
|
152970
|
-
zodSchema:
|
|
153037
|
+
zodSchema: zodSchema67,
|
|
152971
153038
|
services: () => ({}),
|
|
152972
153039
|
async execute(_services, params) {
|
|
152973
153040
|
const session = await requireRecordingSession(params.project_root, params.name);
|
|
@@ -154270,7 +154337,7 @@ function errMsg3(err) {
|
|
|
154270
154337
|
|
|
154271
154338
|
// ../tool-server/src/tools/flows/flow-add-script.ts
|
|
154272
154339
|
var OUTPUT_RENDER_LIMIT_BYTES = 64 * 1024;
|
|
154273
|
-
var
|
|
154340
|
+
var zodSchema68 = external_exports.object({
|
|
154274
154341
|
name: external_exports.string().describe("Flow name passed to flow-start-recording."),
|
|
154275
154342
|
project_root: external_exports.string().describe("Absolute project root passed to flow-start-recording."),
|
|
154276
154343
|
path: external_exports.string().describe(
|
|
@@ -154327,7 +154394,7 @@ var flowAddScriptTool = {
|
|
|
154327
154394
|
// The flag only skips the adapter's own abort timer; its retry loop is
|
|
154328
154395
|
// untouched, so a call that fails some other way is still re-POSTed.
|
|
154329
154396
|
longRunning: true,
|
|
154330
|
-
zodSchema:
|
|
154397
|
+
zodSchema: zodSchema68,
|
|
154331
154398
|
services: () => ({}),
|
|
154332
154399
|
async execute(_services, params, ctx) {
|
|
154333
154400
|
const session = await requireRecordingSession(params.project_root, params.name);
|
|
@@ -154417,7 +154484,7 @@ var flowAddScriptTool = {
|
|
|
154417
154484
|
// ../tool-server/src/tools/flows/flow-finish-recording.ts
|
|
154418
154485
|
init_zod();
|
|
154419
154486
|
var fs60 = __toESM(require("node:fs/promises"));
|
|
154420
|
-
var
|
|
154487
|
+
var zodSchema69 = external_exports.object({
|
|
154421
154488
|
name: external_exports.string().describe("Name of the flow being recorded \u2014 the one passed to flow-start-recording."),
|
|
154422
154489
|
project_root: external_exports.string().describe(
|
|
154423
154490
|
"Absolute path to the project root of the flow being recorded \u2014 the same value passed to flow-start-recording. Together with `name` it identifies which recording to finish."
|
|
@@ -154476,7 +154543,7 @@ var flowFinishRecordingTool = {
|
|
|
154476
154543
|
description: `Finish recording the flow named by \`name\` + \`project_root\`, leaving recordings under any other key untouched. Returns { message, path, executionPrerequisite, steps, summary, flowFile, savedTo } - a summary of all recorded steps plus the final YAML. Use when you have added all desired steps and want to finalize the flow file. Fails if that flow has no recording in progress.
|
|
154477
154544
|
A warning flow-add-step raised on a recorded \`await-ui-element\` is repeated in \`summary\` as a \`warning:\` line of its own, right below the step it judges, and \`message\` counts them by kind. A warning is repeated only while the step it judges is still identifiable by its number: hand-editing the .yaml during the recording moves the steps, so those warnings are DROPPED rather than pinned on whichever step inherited the number, and \`message\` says how many were dropped. A step that carries a cross-tree warning was re-probed against the runner's tree: read it before converting that wait to \`await:\`/\`assert:\`, which is what the verdict is about and what this moment is for. A step that recorded a wait which did not pass was never probed at all, and its own warning names the CAUSE, because only one of them judges the condition: an unmet wait was read and found false, and it stops the run at replay; a wait whose tree source could not be read, or one that was cancelled, observed nothing and leaves the condition UNKNOWN rather than known-bad. Read those before replaying.
|
|
154478
154545
|
You can still edit the .yaml file directly afterwards to remove or reorder steps.`,
|
|
154479
|
-
zodSchema:
|
|
154546
|
+
zodSchema: zodSchema69,
|
|
154480
154547
|
services: () => ({}),
|
|
154481
154548
|
async execute(_services, params) {
|
|
154482
154549
|
const { filePath, flowFile, savedTo, flow, summary, headline } = await withFlowFileLock(
|
|
@@ -156954,7 +157021,7 @@ async function restoreStatusBar(device) {
|
|
|
156954
157021
|
}
|
|
156955
157022
|
|
|
156956
157023
|
// ../tool-server/src/tools/flows/flow-run.ts
|
|
156957
|
-
var
|
|
157024
|
+
var zodSchema70 = external_exports.object({
|
|
156958
157025
|
name: external_exports.string().optional().describe(
|
|
156959
157026
|
'Name of a saved flow to run from `.argent/flows` (e.g. "settings-explore"). Omit when flow_path is set.'
|
|
156960
157027
|
),
|
|
@@ -157461,7 +157528,7 @@ one-off interaction use the gesture tools instead, and to author a flow use flow
|
|
|
157461
157528
|
exactly one flow source: name (under project_root) or flow_path.
|
|
157462
157529
|
Returns a per-step report: the first failure stops the run and the rest report as skipped.`,
|
|
157463
157530
|
longRunning: true,
|
|
157464
|
-
zodSchema:
|
|
157531
|
+
zodSchema: zodSchema70,
|
|
157465
157532
|
fileInputs: fileInputs4,
|
|
157466
157533
|
services: () => ({}),
|
|
157467
157534
|
async execute(_services, params, ctx) {
|
|
@@ -158438,7 +158505,7 @@ async function resolveFlowSource(params, fileInput, flowPathInput) {
|
|
|
158438
158505
|
// ../tool-server/src/tools/flows/flow-read-prerequisite.ts
|
|
158439
158506
|
init_zod();
|
|
158440
158507
|
var fs64 = __toESM(require("node:fs/promises"));
|
|
158441
|
-
var
|
|
158508
|
+
var zodSchema71 = external_exports.object({
|
|
158442
158509
|
name: external_exports.string().optional().describe(
|
|
158443
158510
|
'Name of a saved flow to inspect from `.argent/flows` (e.g. "settings-explore"). Omit when flow_path is set.'
|
|
158444
158511
|
),
|
|
@@ -158494,7 +158561,7 @@ Touches no device: nothing is launched, tapped, dispatched or torn down, and no
|
|
|
158494
158561
|
needs booting, so calling this costs nothing but a file read.
|
|
158495
158562
|
Fails if the flow file does not exist.
|
|
158496
158563
|
Address the flow exactly as you will address it in flow-execute: name or flow_path, one and only one; supplying both or neither is rejected. The name goes in \`name\`, which resolves <project_root>/.argent/flows/<name>.yaml.`,
|
|
158497
|
-
zodSchema:
|
|
158564
|
+
zodSchema: zodSchema71,
|
|
158498
158565
|
fileInputs: fileInputs5,
|
|
158499
158566
|
services: () => ({}),
|
|
158500
158567
|
async execute(_services, params, ctx) {
|
|
@@ -158810,7 +158877,7 @@ async function readWorkspaceSnapshot(workspacePath) {
|
|
|
158810
158877
|
}
|
|
158811
158878
|
|
|
158812
158879
|
// ../tool-server/src/tools/workspace/gather-workspace-data.ts
|
|
158813
|
-
var
|
|
158880
|
+
var zodSchema72 = external_exports.object({
|
|
158814
158881
|
workspacePath: external_exports.string().describe("Absolute path to the project root directory to inspect (e.g. /Users/dev/MyApp)")
|
|
158815
158882
|
});
|
|
158816
158883
|
var fileInputs6 = [
|
|
@@ -158841,7 +158908,7 @@ exploration of anything the snapshot surfaces.
|
|
|
158841
158908
|
Use when you need to inspect project configuration without manually reading multiple files.
|
|
158842
158909
|
Returns partial data if workspacePath does not exist or is not readable; missing items are represented as null or empty collections.
|
|
158843
158910
|
Fails if the workspacePath is not an absolute path or the directory cannot be accessed.`,
|
|
158844
|
-
zodSchema:
|
|
158911
|
+
zodSchema: zodSchema72,
|
|
158845
158912
|
fileInputs: fileInputs6,
|
|
158846
158913
|
services: () => ({}),
|
|
158847
158914
|
async execute(_services, params) {
|
|
@@ -158915,7 +158982,7 @@ function targetFlagsFor(target) {
|
|
|
158915
158982
|
if (target === "both") return ["--global", "--local"];
|
|
158916
158983
|
return [`--${target}`];
|
|
158917
158984
|
}
|
|
158918
|
-
var
|
|
158985
|
+
var zodSchema73 = external_exports.object({
|
|
158919
158986
|
target: external_exports.enum(["auto", "global", "local", "both"]).optional().describe(
|
|
158920
158987
|
"Which install to update. 'auto' (default) updates the install serving this session \u2014 the global PATH install or this project's local devDependency, whichever this server runs from. Pass 'global' / 'local' to force one, or 'both' when the user has both and wants each updated."
|
|
158921
158988
|
)
|
|
@@ -158929,7 +158996,7 @@ var updateArgentTool = {
|
|
|
158929
158996
|
failedMsg: ({ failureSignal: failureSignal2 }) => `Failed to update Argent: ${failureSignal2.error_code}`
|
|
158930
158997
|
},
|
|
158931
158998
|
description: "Apply a pending Argent update. Only call this tool when the user has explicitly consented to updating Argent in this conversation. Use when an update notification indicates a new version is available and the user agrees to update. By default updates the install serving this session; pass `target` to choose global/local/both. Returns { message } with the update status and version info. The tool server will restart automatically after the update. Fails if no update is available or an update is already in progress.",
|
|
158932
|
-
zodSchema:
|
|
158999
|
+
zodSchema: zodSchema73,
|
|
158933
159000
|
services: () => ({}),
|
|
158934
159001
|
async execute(_services, params, _options) {
|
|
158935
159002
|
const { updateAvailable, updateInstallable, currentVersion, installableVersion } = getUpdateState();
|
|
@@ -159014,7 +159081,7 @@ var updateArgentTool = {
|
|
|
159014
159081
|
|
|
159015
159082
|
// ../tool-server/src/tools/system/dismiss-update.ts
|
|
159016
159083
|
init_zod();
|
|
159017
|
-
var
|
|
159084
|
+
var zodSchema74 = external_exports.object({
|
|
159018
159085
|
hours: external_exports.number().min(0).describe("Number of hours to suppress the update notification")
|
|
159019
159086
|
});
|
|
159020
159087
|
var dismissUpdateTool = {
|
|
@@ -159025,7 +159092,7 @@ var dismissUpdateTool = {
|
|
|
159025
159092
|
failedMsg: ({ failureSignal: failureSignal2 }) => `Failed to dismiss Argent update: ${failureSignal2.error_code}`
|
|
159026
159093
|
},
|
|
159027
159094
|
description: "Clear the Argent update notification for the given number of hours. Use when the user asks to postpone or silence update reminders. Returns { message } confirming the suppression duration. Fails if the hours value is negative or the suppression state cannot be persisted.",
|
|
159028
|
-
zodSchema:
|
|
159095
|
+
zodSchema: zodSchema74,
|
|
159029
159096
|
services: () => ({}),
|
|
159030
159097
|
async execute(_services, params, _options) {
|
|
159031
159098
|
const durationMs = params.hours * 60 * 60 * 1e3;
|
|
@@ -159044,7 +159111,7 @@ var import_path8 = __toESM(require("path"));
|
|
|
159044
159111
|
init_zod();
|
|
159045
159112
|
init_src2();
|
|
159046
159113
|
init_device_info();
|
|
159047
|
-
var
|
|
159114
|
+
var zodSchema75 = external_exports.object({
|
|
159048
159115
|
baselinePath: external_exports.string().min(1).optional().describe("Path to the baseline PNG file. Required unless captureBaseline is true."),
|
|
159049
159116
|
currentPath: external_exports.string().min(1).optional().describe("Path to the current PNG file. Required unless captureCurrent is true."),
|
|
159050
159117
|
udid: external_exports.string().min(1).describe("Target device id from `list-devices` (iOS UDID or Android serial)."),
|
|
@@ -159061,7 +159128,7 @@ var zodSchema74 = external_exports.object({
|
|
|
159061
159128
|
"Directory where diff artifacts should be written. Optional \u2014 defaults to a temp directory; the diff images are returned in the result either way."
|
|
159062
159129
|
)
|
|
159063
159130
|
}).strict();
|
|
159064
|
-
var
|
|
159131
|
+
var capability34 = {
|
|
159065
159132
|
apple: { simulator: true, device: true },
|
|
159066
159133
|
android: { emulator: true, device: true, unknown: true }
|
|
159067
159134
|
};
|
|
@@ -159086,8 +159153,8 @@ Returns { summary, diffPath, contextDiffPath }. The summary uses normalized [0,1
|
|
|
159086
159153
|
Ignores the fixed top status-bar band for both pixel and OCR text comparisons.
|
|
159087
159154
|
Fails if the input sources are invalid, PNG files cannot be read, outputDir cannot be written, or the simulator-server / emulator backend is not reachable.`,
|
|
159088
159155
|
searchHint: "compare screenshots png diff visual UI changes UI regression visual regression screenshot diff changed regions text ocr live capture",
|
|
159089
|
-
zodSchema:
|
|
159090
|
-
capability:
|
|
159156
|
+
zodSchema: zodSchema75,
|
|
159157
|
+
capability: capability34,
|
|
159091
159158
|
fileInputs: fileInputs7,
|
|
159092
159159
|
services: (params) => {
|
|
159093
159160
|
if (params.captureBaseline || params.captureCurrent) {
|
|
@@ -159400,7 +159467,7 @@ async function captureElementFrame(registry2, udid, match, opts = {}) {
|
|
|
159400
159467
|
}
|
|
159401
159468
|
|
|
159402
159469
|
// ../tool-server/src/tools/variants/propose-variant.ts
|
|
159403
|
-
var
|
|
159470
|
+
var zodSchema76 = external_exports.object({
|
|
159404
159471
|
element: external_exports.string().min(1).max(200).describe(
|
|
159405
159472
|
'Human name of the on-screen element this variant targets, e.g. "Foo button" or "profile header". Repeated calls with the same element accumulate multiple variants on it. Used as the default screen matcher when `match` is omitted.'
|
|
159406
159473
|
),
|
|
@@ -159460,7 +159527,7 @@ arrives as a follow-up message (this is the case in an \`argent lens\` CLI sessi
|
|
|
159460
159527
|
Returns { round, elementId, variantId, element, variantCount, totalElements } \u2014 confirmation only;
|
|
159461
159528
|
it does not wait for the user.`,
|
|
159462
159529
|
searchHint: "propose design variant alternative option for element non-blocking ab choice",
|
|
159463
|
-
zodSchema:
|
|
159530
|
+
zodSchema: zodSchema76,
|
|
159464
159531
|
services: () => ({}),
|
|
159465
159532
|
async execute(_services, params) {
|
|
159466
159533
|
let frame = params.variant.frame;
|
|
@@ -159484,7 +159551,7 @@ it does not wait for the user.`,
|
|
|
159484
159551
|
|
|
159485
159552
|
// ../tool-server/src/tools/variants/await-user-selection.ts
|
|
159486
159553
|
init_zod();
|
|
159487
|
-
var
|
|
159554
|
+
var zodSchema77 = external_exports.object({
|
|
159488
159555
|
timeoutSeconds: external_exports.number().int().min(5).max(86400).optional().describe(
|
|
159489
159556
|
"Max seconds to block this call before returning a re-awaitable { status: 'pending' } result (default 1800). The user's proposals stay live across timeouts \u2014 on 'pending' just call await_user_selection again. Lower this if your MCP client enforces a short request timeout."
|
|
159490
159557
|
)
|
|
@@ -159525,7 +159592,7 @@ This tool is long-running; it intentionally holds the request open. It honors cl
|
|
|
159525
159592
|
disconnects (aborts cleanly).`,
|
|
159526
159593
|
searchHint: "await wait user selection choice variant blocking confirm picks complete",
|
|
159527
159594
|
longRunning: true,
|
|
159528
|
-
zodSchema:
|
|
159595
|
+
zodSchema: zodSchema77,
|
|
159529
159596
|
services: () => ({}),
|
|
159530
159597
|
async execute(_services, params, options) {
|
|
159531
159598
|
const timeoutMs = (params.timeoutSeconds ?? 1800) * 1e3;
|
|
@@ -159540,7 +159607,7 @@ disconnects (aborts cleanly).`,
|
|
|
159540
159607
|
init_zod();
|
|
159541
159608
|
init_src2();
|
|
159542
159609
|
init_device_info();
|
|
159543
|
-
var
|
|
159610
|
+
var zodSchema78 = external_exports.object({
|
|
159544
159611
|
udid: external_exports.string().describe("Chromium device id from `list-devices` (e.g. `chromium-cdp-9222`)."),
|
|
159545
159612
|
action: external_exports.enum(["list", "select", "new", "close"]).describe(
|
|
159546
159613
|
"list: enumerate tabs/windows. select: make a tab active (every other tool then acts on it). new: open a tab. close: close a tab."
|
|
@@ -159573,7 +159640,7 @@ var tabAction = {
|
|
|
159573
159640
|
failure: "close"
|
|
159574
159641
|
}
|
|
159575
159642
|
};
|
|
159576
|
-
var
|
|
159643
|
+
var capability35 = {
|
|
159577
159644
|
chromium: { app: true }
|
|
159578
159645
|
};
|
|
159579
159646
|
var chromiumTabsTool = {
|
|
@@ -159591,8 +159658,8 @@ var chromiumTabsTool = {
|
|
|
159591
159658
|
Use when an app exposes multiple windows or tabs and you need to inspect or drive one other than the current page, or to open/close a page during a flow. tabIds are stable for the session and never reused.
|
|
159592
159659
|
Returns { tabs: [{ tabId, targetId, title, url, active, label? }] }. Fails if the device is not a Chromium (CDP) device, or the requested tabId/label no longer matches a live tab. Chromium-only.`,
|
|
159593
159660
|
searchHint: "tab tabs window windows switch select close new open multi-tab chromium electron",
|
|
159594
|
-
zodSchema:
|
|
159595
|
-
capability:
|
|
159661
|
+
zodSchema: zodSchema78,
|
|
159662
|
+
capability: capability35,
|
|
159596
159663
|
services: (params) => {
|
|
159597
159664
|
const device = resolveDevice(params.udid);
|
|
159598
159665
|
if (device.platform === "chromium") {
|
|
@@ -159693,7 +159760,7 @@ async function clearStorage(cdp, type) {
|
|
|
159693
159760
|
}
|
|
159694
159761
|
|
|
159695
159762
|
// ../tool-server/src/tools/chromium-cookies/index.ts
|
|
159696
|
-
var
|
|
159763
|
+
var zodSchema79 = external_exports.object({
|
|
159697
159764
|
udid: external_exports.string().describe("Chromium device id from `list-devices` (e.g. `chromium-cdp-9222`)."),
|
|
159698
159765
|
action: external_exports.enum(["get", "set", "delete", "clear"]).describe(
|
|
159699
159766
|
"get: read cookies. set: create/update a cookie. delete: remove a named cookie. clear: remove all browser cookies."
|
|
@@ -159716,7 +159783,7 @@ var cookieAction = {
|
|
|
159716
159783
|
delete: { started: "Deleting", completed: "Deleted", failure: "delete" },
|
|
159717
159784
|
clear: { started: "Clearing", completed: "Cleared", failure: "clear" }
|
|
159718
159785
|
};
|
|
159719
|
-
var
|
|
159786
|
+
var capability36 = {
|
|
159720
159787
|
chromium: { app: true }
|
|
159721
159788
|
};
|
|
159722
159789
|
var chromiumCookiesTool = {
|
|
@@ -159734,8 +159801,8 @@ var chromiumCookiesTool = {
|
|
|
159734
159801
|
Use when seeding an authenticated session before a flow (set the session cookie, then navigate) or asserting cookie state after one.
|
|
159735
159802
|
Returns { cookies, count } for get, or a small status object ({ set } / { deleted } / { cleared }) otherwise. Fails if the device is not a Chromium (CDP) device, or set is missing name/value. Chromium-only.`,
|
|
159736
159803
|
searchHint: "cookies cookie get set delete clear httponly samesite session auth chromium",
|
|
159737
|
-
zodSchema:
|
|
159738
|
-
capability:
|
|
159804
|
+
zodSchema: zodSchema79,
|
|
159805
|
+
capability: capability36,
|
|
159739
159806
|
services: (params) => {
|
|
159740
159807
|
const device = resolveDevice(params.udid);
|
|
159741
159808
|
if (device.platform === "chromium") {
|
|
@@ -159800,7 +159867,7 @@ Returns { cookies, count } for get, or a small status object ({ set } / { delete
|
|
|
159800
159867
|
init_zod();
|
|
159801
159868
|
init_src2();
|
|
159802
159869
|
init_device_info();
|
|
159803
|
-
var
|
|
159870
|
+
var zodSchema80 = external_exports.object({
|
|
159804
159871
|
udid: external_exports.string().describe("Chromium device id from `list-devices` (e.g. `chromium-cdp-9222`)."),
|
|
159805
159872
|
store: external_exports.enum(["local", "session"]).describe("Which Web Storage area: `local` (localStorage) or `session` (sessionStorage)."),
|
|
159806
159873
|
action: external_exports.enum(["get", "set", "remove", "clear"]).describe(
|
|
@@ -159815,7 +159882,7 @@ var storageAction = {
|
|
|
159815
159882
|
remove: { started: "Removing from", completed: "Removed from", failure: "remove from" },
|
|
159816
159883
|
clear: { started: "Clearing", completed: "Cleared", failure: "clear" }
|
|
159817
159884
|
};
|
|
159818
|
-
var
|
|
159885
|
+
var capability37 = {
|
|
159819
159886
|
chromium: { app: true }
|
|
159820
159887
|
};
|
|
159821
159888
|
var chromiumStorageTool = {
|
|
@@ -159834,8 +159901,8 @@ Set \`store\` to "local" or "session". Storage is per-origin, so it reflects the
|
|
|
159834
159901
|
Use when seeding feature flags / auth tokens before a flow or asserting persisted app state after one.
|
|
159835
159902
|
Returns { value } for a single key, { entries, count } for all, or a status object ({ set } / { removed } / { cleared }) otherwise. Fails if the device is not a Chromium (CDP) device, or set is missing key/value. Chromium-only.`,
|
|
159836
159903
|
searchHint: "storage localstorage sessionstorage local session get set remove clear key value chromium",
|
|
159837
|
-
zodSchema:
|
|
159838
|
-
capability:
|
|
159904
|
+
zodSchema: zodSchema80,
|
|
159905
|
+
capability: capability37,
|
|
159839
159906
|
services: (params) => {
|
|
159840
159907
|
const device = resolveDevice(params.udid);
|
|
159841
159908
|
if (device.platform === "chromium") {
|
|
@@ -159947,6 +160014,7 @@ function createRegistry() {
|
|
|
159947
160014
|
registry2.registerTool(networkRequestTool);
|
|
159948
160015
|
registry2.registerTool(createDescribeTool(registry2));
|
|
159949
160016
|
registry2.registerTool(createUiTreeTool(registry2));
|
|
160017
|
+
registry2.registerTool(createForegroundAppTool(registry2));
|
|
159950
160018
|
registry2.registerTool(createAwaitUiElementTool(registry2));
|
|
159951
160019
|
registry2.registerTool(createAwaitScreenIdleTool(registry2));
|
|
159952
160020
|
registry2.registerTool(createReactProfilerStartTool(registry2));
|