@swmansion/argent 0.30.2-next.20 → 0.30.2-next.21
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/installer.mjs +1 -1
- package/dist/tool-server.cjs +202 -105
- package/package.json +1 -1
package/dist/cli-cmds.mjs
CHANGED
|
@@ -35594,7 +35594,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
|
|
|
35594
35594
|
var SESSION_ID2 = randomUUID5();
|
|
35595
35595
|
function readCliVersion() {
|
|
35596
35596
|
if (true) {
|
|
35597
|
-
return "0.30.2-next.
|
|
35597
|
+
return "0.30.2-next.21";
|
|
35598
35598
|
}
|
|
35599
35599
|
return "0.0.0";
|
|
35600
35600
|
}
|
package/dist/installer.mjs
CHANGED
|
@@ -16900,7 +16900,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
|
|
|
16900
16900
|
var SESSION_ID = randomUUID4();
|
|
16901
16901
|
function readCliVersion() {
|
|
16902
16902
|
if (true) {
|
|
16903
|
-
return "0.30.2-next.
|
|
16903
|
+
return "0.30.2-next.21";
|
|
16904
16904
|
}
|
|
16905
16905
|
return "0.0.0";
|
|
16906
16906
|
}
|
package/dist/tool-server.cjs
CHANGED
|
@@ -83679,6 +83679,7 @@ __export(adb_exports, {
|
|
|
83679
83679
|
listAndroidDevices: () => listAndroidDevices,
|
|
83680
83680
|
listAvds: () => listAvds,
|
|
83681
83681
|
parseAdbDevices: () => parseAdbDevices,
|
|
83682
|
+
readEmulatorConsoleAvdName: () => readEmulatorConsoleAvdName,
|
|
83682
83683
|
resolveAvdPath: () => resolveAvdPath,
|
|
83683
83684
|
resolveEmulatorOrThrow: () => resolveEmulatorOrThrow,
|
|
83684
83685
|
runAdb: () => runAdb,
|
|
@@ -83846,6 +83847,21 @@ async function readAvdName(serial) {
|
|
|
83846
83847
|
]);
|
|
83847
83848
|
return modern.trim() || legacy.trim() || null;
|
|
83848
83849
|
}
|
|
83850
|
+
async function readEmulatorConsoleAvdName(serial, options = {}) {
|
|
83851
|
+
try {
|
|
83852
|
+
const { stdout } = await runAdb(["-s", serial, "emu", "avd", "name"], {
|
|
83853
|
+
timeoutMs: options.timeoutMs ?? 2e3
|
|
83854
|
+
});
|
|
83855
|
+
const lines = stdout.split(/\r?\n/).map((line) => line.trim()).filter(Boolean);
|
|
83856
|
+
const name = lines.find((line) => line !== "OK" && !line.startsWith("KO"));
|
|
83857
|
+
if (name && lines.includes("OK")) return { status: "ok", avdName: name };
|
|
83858
|
+
return { status: "unknown" };
|
|
83859
|
+
} catch (err) {
|
|
83860
|
+
const message = err instanceof Error ? err.message : String(err);
|
|
83861
|
+
if (/Connection refused/i.test(message)) return { status: "unreachable" };
|
|
83862
|
+
return { status: "unknown" };
|
|
83863
|
+
}
|
|
83864
|
+
}
|
|
83849
83865
|
async function readRuntimeKind(serial) {
|
|
83850
83866
|
const features = await adbShell(serial, "pm list features", {
|
|
83851
83867
|
timeoutMs: ENRICH_TIMEOUT_MS
|
|
@@ -100945,7 +100961,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
|
|
|
100945
100961
|
var SESSION_ID = (0, import_node_crypto3.randomUUID)();
|
|
100946
100962
|
function readCliVersion() {
|
|
100947
100963
|
if (true) {
|
|
100948
|
-
return "0.30.2-next.
|
|
100964
|
+
return "0.30.2-next.21";
|
|
100949
100965
|
}
|
|
100950
100966
|
return "0.0.0";
|
|
100951
100967
|
}
|
|
@@ -102556,7 +102572,7 @@ var import_node_path8 = __toESM(require("node:path"));
|
|
|
102556
102572
|
var import_semver2 = __toESM(require_semver2());
|
|
102557
102573
|
|
|
102558
102574
|
// ../tool-server/package.json
|
|
102559
|
-
var version2 = "0.
|
|
102575
|
+
var version2 = "0.31.0";
|
|
102560
102576
|
|
|
102561
102577
|
// ../tool-server/src/utils/update-checker.ts
|
|
102562
102578
|
var import_update_core = __toESM(require_dist7());
|
|
@@ -136960,17 +136976,54 @@ function clearCachedProfilerPaths(port, deviceId) {
|
|
|
136960
136976
|
}
|
|
136961
136977
|
|
|
136962
136978
|
// ../tool-server/src/tools/devices/boot-device.ts
|
|
136963
|
-
var
|
|
136979
|
+
var import_node_child_process28 = require("node:child_process");
|
|
136964
136980
|
var import_node_fs12 = require("node:fs");
|
|
136965
136981
|
var import_promises12 = require("node:fs/promises");
|
|
136966
136982
|
var import_node_os11 = require("node:os");
|
|
136967
136983
|
var import_node_path17 = require("node:path");
|
|
136968
|
-
var
|
|
136984
|
+
var import_node_util21 = require("node:util");
|
|
136969
136985
|
init_zod();
|
|
136970
136986
|
init_src();
|
|
136971
136987
|
init_src2();
|
|
136972
136988
|
init_adb();
|
|
136973
136989
|
|
|
136990
|
+
// ../tool-server/src/utils/emulator-process.ts
|
|
136991
|
+
var import_node_child_process26 = require("node:child_process");
|
|
136992
|
+
var import_node_util20 = require("node:util");
|
|
136993
|
+
var execFileAsync20 = (0, import_node_util20.promisify)(import_node_child_process26.execFile);
|
|
136994
|
+
var EMULATOR_PROCESS_RE = /(?:^|\/)(?:qemu-system-[\w-]+|emulator|emulator64-[\w-]+)\s/;
|
|
136995
|
+
function escapeRegExp(value) {
|
|
136996
|
+
return value.replace(/[.*+?^${}()|[\]\\]/g, "\\$&");
|
|
136997
|
+
}
|
|
136998
|
+
function parseEmulatorPidsForAvd(psOutput, avdName) {
|
|
136999
|
+
const avdArg = new RegExp(`(?:^|\\s)-avd\\s+${escapeRegExp(avdName)}(?:\\s|$)`);
|
|
137000
|
+
const pids = [];
|
|
137001
|
+
for (const line of psOutput.split("\n")) {
|
|
137002
|
+
const m = line.match(/^\s*(\d+)\s+(.*)$/);
|
|
137003
|
+
if (!m) continue;
|
|
137004
|
+
const argv = m[2];
|
|
137005
|
+
if (!EMULATOR_PROCESS_RE.test(argv) || !avdArg.test(argv)) continue;
|
|
137006
|
+
pids.push(parseInt(m[1], 10));
|
|
137007
|
+
}
|
|
137008
|
+
return pids;
|
|
137009
|
+
}
|
|
137010
|
+
async function listEmulatorPidsForAvd(avdName) {
|
|
137011
|
+
if (process.platform === "win32") return [];
|
|
137012
|
+
try {
|
|
137013
|
+
const { stdout } = await execFileAsync20(PS_BIN, [...PS_ARGS_WITH_PID], {
|
|
137014
|
+
timeout: 5e3,
|
|
137015
|
+
maxBuffer: 16 * 1024 * 1024
|
|
137016
|
+
});
|
|
137017
|
+
return parseEmulatorPidsForAvd(stdout, avdName);
|
|
137018
|
+
} catch (err) {
|
|
137019
|
+
process.stderr.write(
|
|
137020
|
+
`[emulator-process] ps probe failed; assuming no emulator runs "${avdName}": ${String(err)}
|
|
137021
|
+
`
|
|
137022
|
+
);
|
|
137023
|
+
return [];
|
|
137024
|
+
}
|
|
137025
|
+
}
|
|
137026
|
+
|
|
136974
137027
|
// ../tool-server/src/utils/linux-preflight.ts
|
|
136975
137028
|
var fs33 = __toESM(require("node:fs"));
|
|
136976
137029
|
var import_node_os10 = require("node:os");
|
|
@@ -137456,7 +137509,7 @@ async function harmonyDumpLayout(connectKey, localPath, timeoutMs = UITEST_TIMEO
|
|
|
137456
137509
|
}
|
|
137457
137510
|
|
|
137458
137511
|
// ../tool-server/src/tools/devices/boot-electron.ts
|
|
137459
|
-
var
|
|
137512
|
+
var import_node_child_process27 = require("node:child_process");
|
|
137460
137513
|
var fs34 = __toESM(require("node:fs"));
|
|
137461
137514
|
var path29 = __toESM(require("node:path"));
|
|
137462
137515
|
init_src2();
|
|
@@ -137652,7 +137705,7 @@ async function bootElectronApp(options) {
|
|
|
137652
137705
|
];
|
|
137653
137706
|
let child;
|
|
137654
137707
|
try {
|
|
137655
|
-
child = (0,
|
|
137708
|
+
child = (0, import_node_child_process27.spawn)(launcher.command, args, {
|
|
137656
137709
|
detached: true,
|
|
137657
137710
|
// stdout is discarded, not piped: nothing reads it, and an unread pipe
|
|
137658
137711
|
// blocks the child's writes once the OS buffer fills. The
|
|
@@ -137778,7 +137831,7 @@ async function bootElectronApp(options) {
|
|
|
137778
137831
|
}
|
|
137779
137832
|
|
|
137780
137833
|
// ../tool-server/src/tools/devices/boot-device.ts
|
|
137781
|
-
var
|
|
137834
|
+
var execFileAsync21 = (0, import_node_util21.promisify)(import_node_child_process28.execFile);
|
|
137782
137835
|
var zodSchema9 = external_exports.object({
|
|
137783
137836
|
udid: external_exports.string().optional().describe(
|
|
137784
137837
|
"iOS: simulator UDID to boot (from `list-devices`). Provide exactly one of `udid`, `avdName`, `vvdImage`, <flag:harmonyos>`harmonyInstance`, </flag:harmonyos>or `electronAppPath`."
|
|
@@ -137889,7 +137942,7 @@ var BOOT_POLL_INTERVALS_MS = {
|
|
|
137889
137942
|
earlyExit: 500,
|
|
137890
137943
|
// createEarlyExitRacer: re-check the crash latch during a blocking adb call
|
|
137891
137944
|
serialGone: 500
|
|
137892
|
-
// awaitEmulatorsGone: re-
|
|
137945
|
+
// awaitEmulatorsGone, awaitOwnEmulatorSettled: re-check for a dying emulator
|
|
137893
137946
|
};
|
|
137894
137947
|
var EMULATOR_GONE_BUDGET_MS = 3e4;
|
|
137895
137948
|
var FRAME_PROBE = "screencap -p 2>/dev/null | wc -c | awk '$1>20000{print 1;exit} {print 0}'";
|
|
@@ -137994,6 +138047,48 @@ async function awaitEmulatorsGone(serials) {
|
|
|
137994
138047
|
await new Promise((r) => setTimeout(r, BOOT_POLL_INTERVALS_MS.serialGone));
|
|
137995
138048
|
}
|
|
137996
138049
|
}
|
|
138050
|
+
function isRunningAvd(device, avdName) {
|
|
138051
|
+
return device.isEmulator && device.avdName === avdName && device.state === "device";
|
|
138052
|
+
}
|
|
138053
|
+
async function awaitOwnEmulatorSettled(avdName, deadline) {
|
|
138054
|
+
let healthy = null;
|
|
138055
|
+
let listing = null;
|
|
138056
|
+
while (Date.now() < deadline) {
|
|
138057
|
+
if (healthy) return healthy;
|
|
138058
|
+
if ((await listEmulatorPidsForAvd(avdName)).length === 0) return null;
|
|
138059
|
+
listing ??= listAndroidDevices().then((devices) => {
|
|
138060
|
+
if (devices.some((d) => isRunningAvd(d, avdName))) healthy = devices;
|
|
138061
|
+
}).catch(() => {
|
|
138062
|
+
}).finally(() => {
|
|
138063
|
+
listing = null;
|
|
138064
|
+
});
|
|
138065
|
+
await new Promise(
|
|
138066
|
+
(r) => setTimeout(r, Math.min(BOOT_POLL_INTERVALS_MS.serialGone, deadline - Date.now()))
|
|
138067
|
+
);
|
|
138068
|
+
}
|
|
138069
|
+
return healthy;
|
|
138070
|
+
}
|
|
138071
|
+
async function dropUnreachableSerials(devices, serialsBefore) {
|
|
138072
|
+
await Promise.all(
|
|
138073
|
+
devices.filter((d) => d.isEmulator && !(d.state === "device" && d.avdName !== null)).map(async (d) => {
|
|
138074
|
+
if ((await readEmulatorConsoleAvdName(d.serial)).status === "unreachable") {
|
|
138075
|
+
serialsBefore.delete(d.serial);
|
|
138076
|
+
}
|
|
138077
|
+
})
|
|
138078
|
+
);
|
|
138079
|
+
}
|
|
138080
|
+
async function pickOwnSerial(avdName, newSerials) {
|
|
138081
|
+
const names = await Promise.all(newSerials.map((s) => readEmulatorConsoleAvdName(s)));
|
|
138082
|
+
const own2 = newSerials.find((_, i) => {
|
|
138083
|
+
const answer = names[i];
|
|
138084
|
+
return answer.status === "ok" && answer.avdName === avdName;
|
|
138085
|
+
});
|
|
138086
|
+
if (own2) return own2;
|
|
138087
|
+
const unnamed = newSerials.filter((_, i) => names[i].status !== "ok");
|
|
138088
|
+
if (unnamed.length === 0) return null;
|
|
138089
|
+
if (unnamed.length === 1) return unnamed[0];
|
|
138090
|
+
return findSerialByAvdName(avdName, Date.now() + 3e3);
|
|
138091
|
+
}
|
|
137997
138092
|
async function bootIos(udid, registry2, force, headless) {
|
|
137998
138093
|
if (process.platform !== "darwin") {
|
|
137999
138094
|
throw new FailureError(
|
|
@@ -138013,7 +138108,7 @@ async function bootIos(udid, registry2, force, headless) {
|
|
|
138013
138108
|
const deviceSet = await deviceSetForUdid(udid);
|
|
138014
138109
|
const prefix = simctlPrefix(deviceSet);
|
|
138015
138110
|
if (force && simState === "Booted") {
|
|
138016
|
-
await
|
|
138111
|
+
await execFileAsync21("xcrun", [...prefix, "shutdown", udid]);
|
|
138017
138112
|
}
|
|
138018
138113
|
const needsPreBoot = simState === "Shutdown" || force && simState === "Booted";
|
|
138019
138114
|
if (needsPreBoot) {
|
|
@@ -138024,13 +138119,13 @@ async function bootIos(udid, registry2, force, headless) {
|
|
|
138024
138119
|
);
|
|
138025
138120
|
});
|
|
138026
138121
|
}
|
|
138027
|
-
await
|
|
138122
|
+
await execFileAsync21("xcrun", [...prefix, "boot", udid]).catch((err) => {
|
|
138028
138123
|
const message = err instanceof Error ? err.message : String(err);
|
|
138029
138124
|
if (!message.includes("Unable to boot device in current state: Booted")) {
|
|
138030
138125
|
throw err;
|
|
138031
138126
|
}
|
|
138032
138127
|
});
|
|
138033
|
-
await
|
|
138128
|
+
await execFileAsync21("xcrun", [...prefix, "bootstatus", udid, "-b"]);
|
|
138034
138129
|
if (isTvOs && needsPreBoot) {
|
|
138035
138130
|
await registry2.disposeService(`${TV_CONTROL_NAMESPACE}:${udid}`).catch((err) => {
|
|
138036
138131
|
if (err instanceof ServiceNotFoundError) return;
|
|
@@ -138058,7 +138153,7 @@ async function bootIos(udid, registry2, force, headless) {
|
|
|
138058
138153
|
return buildInitFailedResult(udid, initFailure);
|
|
138059
138154
|
}
|
|
138060
138155
|
if (!deviceSet) {
|
|
138061
|
-
await
|
|
138156
|
+
await execFileAsync21("defaults", [
|
|
138062
138157
|
"write",
|
|
138063
138158
|
"com.apple.iphonesimulator",
|
|
138064
138159
|
"CurrentDeviceUDID",
|
|
@@ -138074,17 +138169,17 @@ async function bootIos(udid, registry2, force, headless) {
|
|
|
138074
138169
|
}
|
|
138075
138170
|
async function openSimulatorWindow(udid) {
|
|
138076
138171
|
const timeout = 5e3;
|
|
138077
|
-
const { stdout } = await
|
|
138172
|
+
const { stdout } = await execFileAsync21("xcode-select", ["-p"], { timeout });
|
|
138078
138173
|
const developerDir2 = (0, import_node_fs12.realpathSync)(stdout.trim());
|
|
138079
138174
|
const simulatorApp = (0, import_node_path17.join)(developerDir2, "Applications", "Simulator.app");
|
|
138080
138175
|
if ((0, import_node_fs12.existsSync)(simulatorApp)) {
|
|
138081
|
-
await
|
|
138176
|
+
await execFileAsync21("open", ["-a", simulatorApp], { timeout });
|
|
138082
138177
|
return;
|
|
138083
138178
|
}
|
|
138084
138179
|
const deviceHubApp = (0, import_node_path17.join)(developerDir2, "..", "Applications", "DeviceHub.app");
|
|
138085
138180
|
if ((0, import_node_fs12.existsSync)(deviceHubApp)) {
|
|
138086
138181
|
const url2 = `devices://device/open?id=${encodeURIComponent(udid)}`;
|
|
138087
|
-
await
|
|
138182
|
+
await execFileAsync21("open", ["-a", deviceHubApp, url2], { timeout });
|
|
138088
138183
|
}
|
|
138089
138184
|
}
|
|
138090
138185
|
async function bootIosRemote(id, registry2, force) {
|
|
@@ -138129,7 +138224,7 @@ async function attemptBoot(params) {
|
|
|
138129
138224
|
emulatorLogFd = (0, import_node_fs12.openSync)(logPath, "w");
|
|
138130
138225
|
stdio = ["ignore", emulatorLogFd, emulatorLogFd];
|
|
138131
138226
|
}
|
|
138132
|
-
const child = (0,
|
|
138227
|
+
const child = (0, import_node_child_process28.spawn)(params.emulatorBinary, params.emulatorArgs, {
|
|
138133
138228
|
detached: true,
|
|
138134
138229
|
stdio
|
|
138135
138230
|
});
|
|
@@ -138168,13 +138263,9 @@ async function attemptBoot(params) {
|
|
|
138168
138263
|
if (launchError) throw launchError;
|
|
138169
138264
|
const newSerials = await listNewEmulatorSerials(params.serialsBefore);
|
|
138170
138265
|
if (newSerials.length >= 1) {
|
|
138171
|
-
|
|
138172
|
-
|
|
138173
|
-
|
|
138174
|
-
}
|
|
138175
|
-
const byAvd = await findSerialByAvdName(params.avdName, Date.now() + 3e3);
|
|
138176
|
-
if (byAvd) {
|
|
138177
|
-
serial = byAvd;
|
|
138266
|
+
const own2 = await pickOwnSerial(params.avdName, newSerials);
|
|
138267
|
+
if (own2) {
|
|
138268
|
+
serial = own2;
|
|
138178
138269
|
break;
|
|
138179
138270
|
}
|
|
138180
138271
|
}
|
|
@@ -138343,15 +138434,20 @@ async function bootAndroidImpl(params) {
|
|
|
138343
138434
|
await runAdb(["start-server"], { timeoutMs: 1e4 }).catch(() => {
|
|
138344
138435
|
});
|
|
138345
138436
|
const existingDevices = await listAndroidDevices().catch(() => []);
|
|
138437
|
+
if (!existingDevices.some((d) => isRunningAvd(d, params.avdName))) {
|
|
138438
|
+
const settled = await awaitOwnEmulatorSettled(
|
|
138439
|
+
params.avdName,
|
|
138440
|
+
Math.min(overallDeadline, Date.now() + EMULATOR_GONE_BUDGET_MS)
|
|
138441
|
+
);
|
|
138442
|
+
if (settled) existingDevices.splice(0, existingDevices.length, ...settled);
|
|
138443
|
+
}
|
|
138346
138444
|
let hotBootFailureReason;
|
|
138347
138445
|
const dropKilledEmulator = async (serial) => {
|
|
138348
138446
|
await awaitEmulatorsGone([serial]);
|
|
138349
138447
|
const refreshed = await listAndroidDevices().catch(() => existingDevices);
|
|
138350
138448
|
existingDevices.splice(0, existingDevices.length, ...refreshed);
|
|
138351
138449
|
};
|
|
138352
|
-
const alreadyRunning = existingDevices.find(
|
|
138353
|
-
(d) => d.isEmulator && d.avdName === params.avdName && d.state === "device"
|
|
138354
|
-
);
|
|
138450
|
+
const alreadyRunning = existingDevices.find((d) => isRunningAvd(d, params.avdName));
|
|
138355
138451
|
if (alreadyRunning) {
|
|
138356
138452
|
if (params.force) {
|
|
138357
138453
|
await killEmulatorQuietly(alreadyRunning.serial);
|
|
@@ -138373,6 +138469,7 @@ async function bootAndroidImpl(params) {
|
|
|
138373
138469
|
}
|
|
138374
138470
|
}
|
|
138375
138471
|
const serialsBefore = new Set(existingDevices.map((d) => d.serial));
|
|
138472
|
+
await dropUnreachableSerials(existingDevices, serialsBefore);
|
|
138376
138473
|
const crashReportArgs = await emulatorSupportsFlag("-crash-report-mode") ? ["-crash-report-mode", "never"] : [];
|
|
138377
138474
|
const hasSnapshot = await hasDefaultBootSnapshot(params.avdName);
|
|
138378
138475
|
if (!hasSnapshot) {
|
|
@@ -138671,7 +138768,7 @@ async function startHarmonyEmulator(instanceName) {
|
|
|
138671
138768
|
} catch {
|
|
138672
138769
|
logFd = null;
|
|
138673
138770
|
}
|
|
138674
|
-
const child = (0,
|
|
138771
|
+
const child = (0, import_node_child_process28.spawn)(bin, ["-start", instanceName], {
|
|
138675
138772
|
detached: true,
|
|
138676
138773
|
stdio: logFd === null ? "ignore" : ["ignore", logFd, logFd]
|
|
138677
138774
|
});
|
|
@@ -139187,11 +139284,11 @@ var BUNDLE_ID_PATTERN = /^[A-Za-z0-9_][A-Za-z0-9._-]*$/;
|
|
|
139187
139284
|
var BUNDLE_ID_MESSAGE = "bundleId may only contain letters, digits, '.', '_' and '-', and may not start with '-' or '.'";
|
|
139188
139285
|
|
|
139189
139286
|
// ../tool-server/src/tools/launch-app/platforms/ios.ts
|
|
139190
|
-
var
|
|
139191
|
-
var
|
|
139287
|
+
var import_node_child_process29 = require("node:child_process");
|
|
139288
|
+
var import_node_util22 = require("node:util");
|
|
139192
139289
|
init_src2();
|
|
139193
139290
|
init_external_devices();
|
|
139194
|
-
var
|
|
139291
|
+
var execFileAsync22 = (0, import_node_util22.promisify)(import_node_child_process29.execFile);
|
|
139195
139292
|
function makeIosImpl(registry2) {
|
|
139196
139293
|
return {
|
|
139197
139294
|
requires: ["xcrun"],
|
|
@@ -139207,7 +139304,7 @@ function makeIosImpl(registry2) {
|
|
|
139207
139304
|
}
|
|
139208
139305
|
if (params.launchArgs?.length) {
|
|
139209
139306
|
try {
|
|
139210
|
-
await
|
|
139307
|
+
await execFileAsync22(
|
|
139211
139308
|
"xcrun",
|
|
139212
139309
|
await simctlArgsForUdid(params.udid, ["terminate", params.udid, params.bundleId])
|
|
139213
139310
|
);
|
|
@@ -139215,7 +139312,7 @@ function makeIosImpl(registry2) {
|
|
|
139215
139312
|
}
|
|
139216
139313
|
}
|
|
139217
139314
|
try {
|
|
139218
|
-
await
|
|
139315
|
+
await execFileAsync22(
|
|
139219
139316
|
"xcrun",
|
|
139220
139317
|
await simctlArgsForUdid(params.udid, [
|
|
139221
139318
|
"launch",
|
|
@@ -139684,11 +139781,11 @@ init_zod();
|
|
|
139684
139781
|
init_device_info();
|
|
139685
139782
|
|
|
139686
139783
|
// ../tool-server/src/tools/restart-app/platforms/ios.ts
|
|
139687
|
-
var
|
|
139688
|
-
var
|
|
139784
|
+
var import_node_child_process30 = require("node:child_process");
|
|
139785
|
+
var import_node_util23 = require("node:util");
|
|
139689
139786
|
init_src2();
|
|
139690
139787
|
init_external_devices();
|
|
139691
|
-
var
|
|
139788
|
+
var execFileAsync23 = (0, import_node_util23.promisify)(import_node_child_process30.execFile);
|
|
139692
139789
|
function makeIosImpl2(registry2) {
|
|
139693
139790
|
return {
|
|
139694
139791
|
requires: ["xcrun"],
|
|
@@ -139704,11 +139801,11 @@ function makeIosImpl2(registry2) {
|
|
|
139704
139801
|
if (blocked) return blocked;
|
|
139705
139802
|
}
|
|
139706
139803
|
try {
|
|
139707
|
-
await
|
|
139804
|
+
await execFileAsync23("xcrun", await simctlArgsForUdid(udid, ["terminate", udid, bundleId]));
|
|
139708
139805
|
} catch {
|
|
139709
139806
|
}
|
|
139710
139807
|
try {
|
|
139711
|
-
await
|
|
139808
|
+
await execFileAsync23(
|
|
139712
139809
|
"xcrun",
|
|
139713
139810
|
await simctlArgsForUdid(udid, ["launch", udid, bundleId, ...params.launchArgs ?? []])
|
|
139714
139811
|
);
|
|
@@ -139911,11 +140008,11 @@ Returns { restarted, bundleId }. Fails if the app is not installed.`,
|
|
|
139911
140008
|
}
|
|
139912
140009
|
|
|
139913
140010
|
// ../tool-server/src/tools/terminate-app/index.ts
|
|
139914
|
-
var
|
|
139915
|
-
var
|
|
140011
|
+
var import_node_child_process31 = require("node:child_process");
|
|
140012
|
+
var import_node_util24 = require("node:util");
|
|
139916
140013
|
init_zod();
|
|
139917
140014
|
init_adb();
|
|
139918
|
-
var
|
|
140015
|
+
var execFileAsync24 = (0, import_node_util24.promisify)(import_node_child_process31.execFile);
|
|
139919
140016
|
var zodSchema12 = external_exports.object({
|
|
139920
140017
|
udid: external_exports.string().min(1).describe("Target device id from `list-devices`."),
|
|
139921
140018
|
bundleId: external_exports.string().min(1).regex(BUNDLE_ID_PATTERN, BUNDLE_ID_MESSAGE).describe("App identifier. iOS: bundle id. Android: package name.")
|
|
@@ -139958,7 +140055,7 @@ Succeeds when the app is not running or not installed.`,
|
|
|
139958
140055
|
requires: ["xcrun"],
|
|
139959
140056
|
handler: async (_services, { udid, bundleId }) => {
|
|
139960
140057
|
const args = await simctlArgsForUdid(udid, ["terminate", udid, bundleId]);
|
|
139961
|
-
const terminated = await tolerateNotRunning(
|
|
140058
|
+
const terminated = await tolerateNotRunning(execFileAsync24("xcrun", args));
|
|
139962
140059
|
return { terminated, bundleId };
|
|
139963
140060
|
}
|
|
139964
140061
|
},
|
|
@@ -139990,16 +140087,16 @@ Succeeds when the app is not running or not installed.`,
|
|
|
139990
140087
|
init_zod();
|
|
139991
140088
|
|
|
139992
140089
|
// ../tool-server/src/tools/reinstall-app/platforms/ios.ts
|
|
139993
|
-
var
|
|
139994
|
-
var
|
|
140090
|
+
var import_node_child_process33 = require("node:child_process");
|
|
140091
|
+
var import_node_util26 = require("node:util");
|
|
139995
140092
|
var import_node_path19 = require("node:path");
|
|
139996
140093
|
init_src2();
|
|
139997
140094
|
|
|
139998
140095
|
// ../tool-server/src/tools/reinstall-app/validate-app.ts
|
|
139999
|
-
var
|
|
140096
|
+
var import_node_child_process32 = require("node:child_process");
|
|
140000
140097
|
var import_promises14 = require("node:fs/promises");
|
|
140001
140098
|
var import_node_path18 = require("node:path");
|
|
140002
|
-
var
|
|
140099
|
+
var import_node_util25 = require("node:util");
|
|
140003
140100
|
init_capability();
|
|
140004
140101
|
|
|
140005
140102
|
// ../tool-server/src/utils/apk-package.ts
|
|
@@ -140098,7 +140195,7 @@ function readStringPool(xml, chunk) {
|
|
|
140098
140195
|
}
|
|
140099
140196
|
|
|
140100
140197
|
// ../tool-server/src/tools/reinstall-app/validate-app.ts
|
|
140101
|
-
var
|
|
140198
|
+
var execFileAsync25 = (0, import_node_util25.promisify)(import_node_child_process32.execFile);
|
|
140102
140199
|
async function requirePath(absolute, kind, what) {
|
|
140103
140200
|
const info = await (0, import_promises14.stat)(absolute).catch(() => null);
|
|
140104
140201
|
if (!info) {
|
|
@@ -140122,7 +140219,7 @@ async function assertIosAppBundle(absolute, bundleId, { readBundleId = true } =
|
|
|
140122
140219
|
);
|
|
140123
140220
|
}
|
|
140124
140221
|
if (!readBundleId) return;
|
|
140125
|
-
const actual = await
|
|
140222
|
+
const actual = await execFileAsync25("plutil", [
|
|
140126
140223
|
"-extract",
|
|
140127
140224
|
"CFBundleIdentifier",
|
|
140128
140225
|
"raw",
|
|
@@ -140175,7 +140272,7 @@ async function assertHap(absolute, bundleName) {
|
|
|
140175
140272
|
}
|
|
140176
140273
|
|
|
140177
140274
|
// ../tool-server/src/tools/reinstall-app/platforms/ios.ts
|
|
140178
|
-
var
|
|
140275
|
+
var execFileAsync26 = (0, import_node_util26.promisify)(import_node_child_process33.execFile);
|
|
140179
140276
|
var iosImpl = {
|
|
140180
140277
|
requires: ["xcrun"],
|
|
140181
140278
|
handler: async (_services, params) => {
|
|
@@ -140184,11 +140281,11 @@ var iosImpl = {
|
|
|
140184
140281
|
await assertIosAppBundle(absolute, bundleId);
|
|
140185
140282
|
const { nativeId, prefix } = await simctlTargetForUdid(udid);
|
|
140186
140283
|
try {
|
|
140187
|
-
await
|
|
140284
|
+
await execFileAsync26("xcrun", [...prefix, "uninstall", nativeId, bundleId]);
|
|
140188
140285
|
} catch {
|
|
140189
140286
|
}
|
|
140190
140287
|
try {
|
|
140191
|
-
await
|
|
140288
|
+
await execFileAsync26("xcrun", [...prefix, "install", nativeId, absolute]);
|
|
140192
140289
|
} catch (err) {
|
|
140193
140290
|
throw new FailureError(
|
|
140194
140291
|
`Failed to install iOS app bundle on ${udid}.`,
|
|
@@ -140415,11 +140512,11 @@ var PERMISSION_NAMES = [
|
|
|
140415
140512
|
];
|
|
140416
140513
|
|
|
140417
140514
|
// ../tool-server/src/tools/settings-permissions/platforms/ios.ts
|
|
140418
|
-
var
|
|
140419
|
-
var
|
|
140515
|
+
var import_node_child_process34 = require("node:child_process");
|
|
140516
|
+
var import_node_util27 = require("node:util");
|
|
140420
140517
|
init_src2();
|
|
140421
140518
|
init_capability();
|
|
140422
|
-
var
|
|
140519
|
+
var execFileAsync27 = (0, import_node_util27.promisify)(import_node_child_process34.execFile);
|
|
140423
140520
|
var SIMCTL_ACTION = {
|
|
140424
140521
|
grant: "grant",
|
|
140425
140522
|
deny: "revoke",
|
|
@@ -140444,7 +140541,7 @@ var NON_TCC_GRANT_NEEDS_INSTALL = /* @__PURE__ */ new Set([
|
|
|
140444
140541
|
]);
|
|
140445
140542
|
var localBackend = {
|
|
140446
140543
|
async run(udid, simctlAction, service, bundleId) {
|
|
140447
|
-
await
|
|
140544
|
+
await execFileAsync27(
|
|
140448
140545
|
"xcrun",
|
|
140449
140546
|
await simctlArgsForUdid(udid, ["privacy", udid, simctlAction, service, bundleId]),
|
|
140450
140547
|
{ timeout: 3e4 }
|
|
@@ -140452,7 +140549,7 @@ var localBackend = {
|
|
|
140452
140549
|
},
|
|
140453
140550
|
async isInstalled(udid, bundleId) {
|
|
140454
140551
|
try {
|
|
140455
|
-
await
|
|
140552
|
+
await execFileAsync27(
|
|
140456
140553
|
"xcrun",
|
|
140457
140554
|
await simctlArgsForUdid(udid, ["get_app_container", udid, bundleId]),
|
|
140458
140555
|
{ timeout: 15e3 }
|
|
@@ -140736,8 +140833,8 @@ init_zod();
|
|
|
140736
140833
|
init_device_info();
|
|
140737
140834
|
|
|
140738
140835
|
// ../tool-server/src/tools/open-url/platforms/ios.ts
|
|
140739
|
-
var
|
|
140740
|
-
var
|
|
140836
|
+
var import_node_child_process35 = require("node:child_process");
|
|
140837
|
+
var import_node_util28 = require("node:util");
|
|
140741
140838
|
init_src2();
|
|
140742
140839
|
|
|
140743
140840
|
// ../tool-server/src/tools/open-url/deep-link-note.ts
|
|
@@ -140747,12 +140844,12 @@ function httpDeepLinkNote(url2) {
|
|
|
140747
140844
|
}
|
|
140748
140845
|
|
|
140749
140846
|
// ../tool-server/src/tools/open-url/platforms/ios.ts
|
|
140750
|
-
var
|
|
140847
|
+
var execFileAsync28 = (0, import_node_util28.promisify)(import_node_child_process35.execFile);
|
|
140751
140848
|
var iosImpl3 = {
|
|
140752
140849
|
requires: ["xcrun"],
|
|
140753
140850
|
handler: async (_services, params) => {
|
|
140754
140851
|
try {
|
|
140755
|
-
await
|
|
140852
|
+
await execFileAsync28(
|
|
140756
140853
|
"xcrun",
|
|
140757
140854
|
await simctlArgsForUdid(params.udid, ["openurl", params.udid, params.url])
|
|
140758
140855
|
);
|
|
@@ -140929,8 +141026,8 @@ Returns { opened, url, note? }. note carries the deep-linking caveat when a web
|
|
|
140929
141026
|
};
|
|
140930
141027
|
|
|
140931
141028
|
// ../tool-server/src/tools/screenshot/index.ts
|
|
140932
|
-
var
|
|
140933
|
-
var
|
|
141029
|
+
var import_node_child_process36 = require("node:child_process");
|
|
141030
|
+
var import_node_util29 = require("node:util");
|
|
140934
141031
|
var os13 = __toESM(require("node:os"));
|
|
140935
141032
|
var path30 = __toESM(require("node:path"));
|
|
140936
141033
|
init_zod();
|
|
@@ -141555,7 +141652,7 @@ async function captureHarmonyScreenshotPng(opts) {
|
|
|
141555
141652
|
// ../tool-server/src/tools/screenshot/index.ts
|
|
141556
141653
|
init_capability();
|
|
141557
141654
|
var fs36 = __toESM(require("node:fs/promises"));
|
|
141558
|
-
var
|
|
141655
|
+
var execFileAsync29 = (0, import_node_util29.promisify)(import_node_child_process36.execFile);
|
|
141559
141656
|
var zodSchema16 = external_exports.object({
|
|
141560
141657
|
udid: external_exports.string().describe(
|
|
141561
141658
|
"Target device id from `list-devices` (iOS UDID, Android serial, Apple TV UDID, Vega serial, <flag:harmonyos>HarmonyOS id, </flag:harmonyos>or Chromium id)."
|
|
@@ -141597,11 +141694,11 @@ async function tvScreenshot(udid, scale, signal) {
|
|
|
141597
141694
|
os13.tmpdir(),
|
|
141598
141695
|
`argent-tv-screenshot-${udid.slice(0, 8)}-${process.hrtime.bigint()}.png`
|
|
141599
141696
|
);
|
|
141600
|
-
await
|
|
141697
|
+
await execFileAsync29("xcrun", await simctlArgsForUdid(udid, ["io", udid, "screenshot", file2]), {
|
|
141601
141698
|
signal
|
|
141602
141699
|
});
|
|
141603
141700
|
if (scale === void 0 || scale < 1) {
|
|
141604
|
-
await
|
|
141701
|
+
await execFileAsync29("sips", ["-Z", String(await tvTargetLongSide(file2, scale)), file2], {
|
|
141605
141702
|
signal
|
|
141606
141703
|
}).catch(() => {
|
|
141607
141704
|
});
|
|
@@ -141611,7 +141708,7 @@ async function tvScreenshot(udid, scale, signal) {
|
|
|
141611
141708
|
async function tvTargetLongSide(file2, scale) {
|
|
141612
141709
|
let longSide = 3840;
|
|
141613
141710
|
try {
|
|
141614
|
-
const { stdout } = await
|
|
141711
|
+
const { stdout } = await execFileAsync29("sips", ["-g", "pixelWidth", "-g", "pixelHeight", file2]);
|
|
141615
141712
|
const width = Number(/pixelWidth:\s*(\d+)/.exec(stdout)?.[1]);
|
|
141616
141713
|
const height = Number(/pixelHeight:\s*(\d+)/.exec(stdout)?.[1]);
|
|
141617
141714
|
if (Number.isFinite(width) && Number.isFinite(height) && width > 0 && height > 0) {
|
|
@@ -141646,7 +141743,7 @@ async function downscalePngInPlace(file2, scale, signal) {
|
|
|
141646
141743
|
if (scale >= 1) {
|
|
141647
141744
|
return;
|
|
141648
141745
|
}
|
|
141649
|
-
await
|
|
141746
|
+
await execFileAsync29("sips", ["-Z", String(await tvTargetLongSide(file2, scale)), file2], {
|
|
141650
141747
|
signal
|
|
141651
141748
|
}).catch(() => {
|
|
141652
141749
|
});
|
|
@@ -143991,13 +144088,13 @@ var shakeZodSchema = external_exports.object({
|
|
|
143991
144088
|
});
|
|
143992
144089
|
|
|
143993
144090
|
// ../tool-server/src/tools/shake/platforms/ios.ts
|
|
143994
|
-
var
|
|
143995
|
-
var
|
|
144091
|
+
var import_node_child_process38 = require("node:child_process");
|
|
144092
|
+
var import_node_util30 = require("node:util");
|
|
143996
144093
|
init_src2();
|
|
143997
144094
|
init_capability();
|
|
143998
144095
|
|
|
143999
144096
|
// ../tool-server/src/utils/window-shake.ts
|
|
144000
|
-
var
|
|
144097
|
+
var import_node_child_process37 = require("node:child_process");
|
|
144001
144098
|
init_src();
|
|
144002
144099
|
var MICROINTERACTIONS_FLAG = "microinteractions";
|
|
144003
144100
|
var AMPLITUDE = 22;
|
|
@@ -144104,7 +144201,7 @@ end run
|
|
|
144104
144201
|
}
|
|
144105
144202
|
function runOsascript(script) {
|
|
144106
144203
|
return new Promise((resolve16, reject) => {
|
|
144107
|
-
const child = (0,
|
|
144204
|
+
const child = (0, import_node_child_process37.execFile)(
|
|
144108
144205
|
"/usr/bin/osascript",
|
|
144109
144206
|
["-"],
|
|
144110
144207
|
{ timeout: OSASCRIPT_TIMEOUT_MS },
|
|
@@ -144197,7 +144294,7 @@ async function prepareHostWindowShake(target) {
|
|
|
144197
144294
|
}
|
|
144198
144295
|
|
|
144199
144296
|
// ../tool-server/src/tools/shake/platforms/ios.ts
|
|
144200
|
-
var
|
|
144297
|
+
var execFileAsync30 = (0, import_node_util30.promisify)(import_node_child_process38.execFile);
|
|
144201
144298
|
var SHAKE_NOTIFICATION = "com.apple.UIKit.SimulatorShake";
|
|
144202
144299
|
var SHAKE_INTERVAL_MS = 400;
|
|
144203
144300
|
var sleep11 = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
@@ -144239,7 +144336,7 @@ var iosImpl4 = {
|
|
|
144239
144336
|
if (i > 0) await sleep11(SHAKE_INTERVAL_MS);
|
|
144240
144337
|
shaker.begin();
|
|
144241
144338
|
try {
|
|
144242
|
-
await
|
|
144339
|
+
await execFileAsync30("xcrun", args, { timeout: 15e3 });
|
|
144243
144340
|
} catch (err) {
|
|
144244
144341
|
const error63 = err instanceof Error ? err : new Error(String(err));
|
|
144245
144342
|
throw shakeFailure(udid, error63.message, error63);
|
|
@@ -155003,10 +155100,10 @@ function classifyStaleness({
|
|
|
155003
155100
|
|
|
155004
155101
|
// ../tool-server/src/utils/debugger/runtime-device.ts
|
|
155005
155102
|
var import_node_crypto12 = require("node:crypto");
|
|
155006
|
-
var
|
|
155007
|
-
var
|
|
155103
|
+
var import_node_child_process39 = require("node:child_process");
|
|
155104
|
+
var import_node_util31 = require("node:util");
|
|
155008
155105
|
init_adb();
|
|
155009
|
-
var
|
|
155106
|
+
var execFileAsync31 = (0, import_node_util31.promisify)(import_node_child_process39.execFile);
|
|
155010
155107
|
var LOG_READ_TIMEOUT_MS = 5e3;
|
|
155011
155108
|
var RETRY_DELAY_MS = 300;
|
|
155012
155109
|
async function findRuntimeDevice(cdp) {
|
|
@@ -155080,7 +155177,7 @@ async function simulatorLogHolds(udid, marker) {
|
|
|
155080
155177
|
"--predicate",
|
|
155081
155178
|
`eventMessage CONTAINS ${JSON.stringify(marker)} AND process != "log"`
|
|
155082
155179
|
]);
|
|
155083
|
-
const { stdout } = await
|
|
155180
|
+
const { stdout } = await execFileAsync31("xcrun", args, {
|
|
155084
155181
|
timeout: LOG_READ_TIMEOUT_MS,
|
|
155085
155182
|
killSignal: SIMCTL_KILL_SIGNAL,
|
|
155086
155183
|
encoding: "utf-8"
|
|
@@ -158421,8 +158518,8 @@ var import_util14 = require("util");
|
|
|
158421
158518
|
var DEFAULT_EXEC_TIMEOUT_MS = 6e4;
|
|
158422
158519
|
var DEFAULT_EXEC_MAX_BUFFER = 256 * 1024 * 1024;
|
|
158423
158520
|
async function execFileAsyncWithTimeout(file2, args, options = {}) {
|
|
158424
|
-
const
|
|
158425
|
-
const { stdout, stderr } = await
|
|
158521
|
+
const execFileAsync36 = (0, import_util14.promisify)(import_child_process2.execFile);
|
|
158522
|
+
const { stdout, stderr } = await execFileAsync36(file2, args, {
|
|
158426
158523
|
encoding: "utf-8",
|
|
158427
158524
|
...options,
|
|
158428
158525
|
// Applied after ...options so a caller cannot weaken the guards; maxBuffer
|
|
@@ -162475,7 +162572,7 @@ var WATERMARK_PNG_HEIGHT = 277;
|
|
|
162475
162572
|
var WATERMARK_PNG_BASE64 = "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";
|
|
162476
162573
|
|
|
162477
162574
|
// ../tool-server/src/tools/screen-recording/watermark.ts
|
|
162478
|
-
var
|
|
162575
|
+
var execFileAsync32 = (0, import_util15.promisify)(import_child_process6.execFile);
|
|
162479
162576
|
var OUTPUT_FPS = 30;
|
|
162480
162577
|
var FFMPEG_FALLBACK_PATHS = [
|
|
162481
162578
|
"/opt/homebrew/bin/ffmpeg",
|
|
@@ -162492,7 +162589,7 @@ var MASK_DARK_MAX_LUMA = 90;
|
|
|
162492
162589
|
var MASK_LIGHT_MIN_LUMA = 165;
|
|
162493
162590
|
async function resolveBinary(name, fallbacks) {
|
|
162494
162591
|
try {
|
|
162495
|
-
await
|
|
162592
|
+
await execFileAsync32("/bin/sh", ["-c", `command -v ${name}`], { timeout: 2e3 });
|
|
162496
162593
|
return name;
|
|
162497
162594
|
} catch {
|
|
162498
162595
|
}
|
|
@@ -165303,7 +165400,7 @@ Returns { stopped } - the URNs of the services that were actually live and got s
|
|
|
165303
165400
|
|
|
165304
165401
|
// ../tool-server/src/tools/simulator/stop-metro.ts
|
|
165305
165402
|
init_zod();
|
|
165306
|
-
var
|
|
165403
|
+
var import_node_child_process40 = require("node:child_process");
|
|
165307
165404
|
function parseNetstatListeningPids(netstatOutput, port) {
|
|
165308
165405
|
const pids = /* @__PURE__ */ new Set();
|
|
165309
165406
|
for (const line of netstatOutput.split(/\r?\n/)) {
|
|
@@ -165319,7 +165416,7 @@ function parseNetstatListeningPids(netstatOutput, port) {
|
|
|
165319
165416
|
}
|
|
165320
165417
|
function listeningPids(port) {
|
|
165321
165418
|
if (process.platform === "win32") {
|
|
165322
|
-
const output3 = (0,
|
|
165419
|
+
const output3 = (0, import_node_child_process40.execFileSync)("netstat", ["-ano"], {
|
|
165323
165420
|
encoding: "utf-8",
|
|
165324
165421
|
timeout: 5e3,
|
|
165325
165422
|
// `netstat -ano` dumps every socket on the host; overflowing Node's
|
|
@@ -165328,7 +165425,7 @@ function listeningPids(port) {
|
|
|
165328
165425
|
});
|
|
165329
165426
|
return parseNetstatListeningPids(output3, port);
|
|
165330
165427
|
}
|
|
165331
|
-
const output2 = (0,
|
|
165428
|
+
const output2 = (0, import_node_child_process40.execFileSync)("lsof", ["-ti", `tcp:${port}`, "-sTCP:LISTEN"], {
|
|
165332
165429
|
encoding: "utf-8",
|
|
165333
165430
|
timeout: 5e3
|
|
165334
165431
|
}).trim();
|
|
@@ -171085,7 +171182,7 @@ var import_node_url4 = require("node:url");
|
|
|
171085
171182
|
init_src2();
|
|
171086
171183
|
|
|
171087
171184
|
// ../tool-server/src/tools/flows/script/flow-script-executor.ts
|
|
171088
|
-
var
|
|
171185
|
+
var import_node_child_process41 = require("node:child_process");
|
|
171089
171186
|
var fs59 = __toESM(require("node:fs"));
|
|
171090
171187
|
var os17 = __toESM(require("node:os"));
|
|
171091
171188
|
var path45 = __toESM(require("node:path"));
|
|
@@ -171470,7 +171567,7 @@ var FlowScriptExecutor = class {
|
|
|
171470
171567
|
detached: process.platform !== "win32",
|
|
171471
171568
|
windowsHide: process.platform === "win32"
|
|
171472
171569
|
};
|
|
171473
|
-
child = (0,
|
|
171570
|
+
child = (0, import_node_child_process41.fork)(scriptPath, [], forkOptions);
|
|
171474
171571
|
} catch (err) {
|
|
171475
171572
|
return emptyResult(
|
|
171476
171573
|
{ kind: "spawn", message: `Could not start the script process: ${errorMessage(err)}` },
|
|
@@ -171914,7 +172011,7 @@ async function stopProcessTree(child, graceMs) {
|
|
|
171914
172011
|
if (process.platform === "win32") {
|
|
171915
172012
|
if (hasExited(child)) return;
|
|
171916
172013
|
tryKill(() => {
|
|
171917
|
-
const killer = (0,
|
|
172014
|
+
const killer = (0, import_node_child_process41.spawn)("taskkill", ["/pid", String(pid), "/t", "/f"], {
|
|
171918
172015
|
windowsHide: true,
|
|
171919
172016
|
stdio: "ignore"
|
|
171920
172017
|
});
|
|
@@ -172636,7 +172733,7 @@ init_src2();
|
|
|
172636
172733
|
// ../tool-server/src/tools/screenshot-diff/screenshot-diff-ocr.ts
|
|
172637
172734
|
var import_child_process8 = require("child_process");
|
|
172638
172735
|
var import_util16 = require("util");
|
|
172639
|
-
var
|
|
172736
|
+
var execFileAsync33 = (0, import_util16.promisify)(import_child_process8.execFile);
|
|
172640
172737
|
var OCR_TIMEOUT_MS = 1e4;
|
|
172641
172738
|
var OCR_MAX_BUFFER_BYTES = 32 * 1024 * 1024;
|
|
172642
172739
|
var TESSERACT_BINARY = "tesseract";
|
|
@@ -172681,7 +172778,7 @@ async function extractOcrTextBlocks(imagePath) {
|
|
|
172681
172778
|
}
|
|
172682
172779
|
}
|
|
172683
172780
|
async function recognizeTsv(imagePath) {
|
|
172684
|
-
const { stdout } = await
|
|
172781
|
+
const { stdout } = await execFileAsync33(
|
|
172685
172782
|
TESSERACT_BINARY,
|
|
172686
172783
|
[
|
|
172687
172784
|
imagePath,
|
|
@@ -174963,11 +175060,11 @@ async function runSnapshot(env, opts) {
|
|
|
174963
175060
|
}
|
|
174964
175061
|
|
|
174965
175062
|
// ../tool-server/src/utils/status-bar.ts
|
|
174966
|
-
var
|
|
174967
|
-
var
|
|
175063
|
+
var import_node_child_process42 = require("node:child_process");
|
|
175064
|
+
var import_node_util32 = require("node:util");
|
|
174968
175065
|
init_adb();
|
|
174969
175066
|
init_device_info();
|
|
174970
|
-
var
|
|
175067
|
+
var execFileAsync34 = (0, import_node_util32.promisify)(import_node_child_process42.execFile);
|
|
174971
175068
|
var DEMO_BROADCAST = "am broadcast -a com.android.systemui.demo";
|
|
174972
175069
|
var IOS_STATUS_BAR_OVERRIDE = [
|
|
174973
175070
|
"override",
|
|
@@ -174991,7 +175088,7 @@ async function pinStatusBar(device, signal) {
|
|
|
174991
175088
|
if (isIosPhysicalDevice(device)) return false;
|
|
174992
175089
|
try {
|
|
174993
175090
|
if (device.platform === "ios") {
|
|
174994
|
-
await
|
|
175091
|
+
await execFileAsync34(
|
|
174995
175092
|
"xcrun",
|
|
174996
175093
|
await simctlArgsForUdid(device.id, ["status_bar", device.id, ...IOS_STATUS_BAR_OVERRIDE])
|
|
174997
175094
|
);
|
|
@@ -175027,7 +175124,7 @@ async function pinStatusBar(device, signal) {
|
|
|
175027
175124
|
async function restoreStatusBar(device) {
|
|
175028
175125
|
try {
|
|
175029
175126
|
if (device.platform === "ios") {
|
|
175030
|
-
await
|
|
175127
|
+
await execFileAsync34(
|
|
175031
175128
|
"xcrun",
|
|
175032
175129
|
await simctlArgsForUdid(device.id, ["status_bar", device.id, "clear"])
|
|
175033
175130
|
);
|
|
@@ -176636,7 +176733,7 @@ init_zod();
|
|
|
176636
176733
|
// ../tool-server/src/utils/workspace-reader.ts
|
|
176637
176734
|
var import_promises19 = require("node:fs/promises");
|
|
176638
176735
|
var import_node_path29 = require("node:path");
|
|
176639
|
-
var
|
|
176736
|
+
var import_node_child_process43 = require("node:child_process");
|
|
176640
176737
|
var import_dotenv2 = __toESM(require_dist());
|
|
176641
176738
|
async function exists2(path54) {
|
|
176642
176739
|
try {
|
|
@@ -176680,7 +176777,7 @@ async function listDir(path54) {
|
|
|
176680
176777
|
var COMMAND_TIMEOUT_MS = 3e3;
|
|
176681
176778
|
function runVersionCommand(cmd, args, cwd) {
|
|
176682
176779
|
return new Promise((resolve16) => {
|
|
176683
|
-
const child = (0,
|
|
176780
|
+
const child = (0, import_node_child_process43.execFile)(cmd, args, { cwd, timeout: COMMAND_TIMEOUT_MS }, (err, stdout) => {
|
|
176684
176781
|
if (err) {
|
|
176685
176782
|
resolve16(null);
|
|
176686
176783
|
return;
|
|
@@ -176970,7 +177067,7 @@ Fails if the workspacePath is not an absolute path or the directory cannot be ac
|
|
|
176970
177067
|
};
|
|
176971
177068
|
|
|
176972
177069
|
// ../tool-server/src/tools/system/update-argent.ts
|
|
176973
|
-
var
|
|
177070
|
+
var import_node_child_process44 = require("node:child_process");
|
|
176974
177071
|
var fs66 = __toESM(require("node:fs"));
|
|
176975
177072
|
var path50 = __toESM(require("node:path"));
|
|
176976
177073
|
init_zod();
|
|
@@ -177105,7 +177202,7 @@ var updateArgentTool = {
|
|
|
177105
177202
|
if (spawnRoot) updateArgs.push("--project-root", spawnRoot);
|
|
177106
177203
|
const cmd = cliEntry ? process.execPath : "argent";
|
|
177107
177204
|
const args = cliEntry ? [cliEntry, ...updateArgs] : updateArgs;
|
|
177108
|
-
const child = (0,
|
|
177205
|
+
const child = (0, import_node_child_process44.spawn)(cmd, args, {
|
|
177109
177206
|
detached: true,
|
|
177110
177207
|
stdio: "ignore",
|
|
177111
177208
|
env: { ...process.env, ARGENT_UPDATE_TRIGGER: "mcp_update" }
|
|
@@ -178175,13 +178272,13 @@ function probeArgentToolServer(host, port, timeoutMs = 500) {
|
|
|
178175
178272
|
|
|
178176
178273
|
// ../tool-server/src/utils/simulator-watcher.ts
|
|
178177
178274
|
var fs68 = __toESM(require("node:fs"));
|
|
178178
|
-
var
|
|
178179
|
-
var
|
|
178275
|
+
var import_node_child_process45 = require("node:child_process");
|
|
178276
|
+
var import_node_util33 = require("node:util");
|
|
178180
178277
|
init_external_devices();
|
|
178181
|
-
var
|
|
178278
|
+
var execFileAsync35 = (0, import_node_util33.promisify)(import_node_child_process45.execFile);
|
|
178182
178279
|
var POLL_INTERVAL_MS2 = 1e4;
|
|
178183
178280
|
async function getBootedUdidsInSet(deviceSet) {
|
|
178184
|
-
const { stdout } = await
|
|
178281
|
+
const { stdout } = await execFileAsync35("xcrun", [
|
|
178185
178282
|
...simctlPrefix(deviceSet),
|
|
178186
178283
|
"list",
|
|
178187
178284
|
"devices",
|
|
@@ -178300,7 +178397,7 @@ function startSimulatorWatcher(registry2) {
|
|
|
178300
178397
|
}
|
|
178301
178398
|
|
|
178302
178399
|
// ../tool-server/src/utils/preview-window.ts
|
|
178303
|
-
var
|
|
178400
|
+
var import_node_child_process46 = require("node:child_process");
|
|
178304
178401
|
var fs69 = __toESM(require("node:fs"));
|
|
178305
178402
|
var os20 = __toESM(require("node:os"));
|
|
178306
178403
|
var path52 = __toESM(require("node:path"));
|
|
@@ -178332,10 +178429,10 @@ function ensureLensAppBundle(electronBin) {
|
|
|
178332
178429
|
fs69.copyFileSync(path52.join(realContents, "Info.plist"), plist);
|
|
178333
178430
|
const setPlist = (entry, value) => {
|
|
178334
178431
|
try {
|
|
178335
|
-
(0,
|
|
178432
|
+
(0, import_node_child_process46.execFileSync)("/usr/libexec/PlistBuddy", ["-c", `Set :${entry} ${value}`, plist]);
|
|
178336
178433
|
} catch {
|
|
178337
178434
|
try {
|
|
178338
|
-
(0,
|
|
178435
|
+
(0, import_node_child_process46.execFileSync)("/usr/libexec/PlistBuddy", ["-c", `Add :${entry} string ${value}`, plist]);
|
|
178339
178436
|
} catch {
|
|
178340
178437
|
}
|
|
178341
178438
|
}
|
|
@@ -178394,7 +178491,7 @@ function createPreviewWindowManager(opts = {}) {
|
|
|
178394
178491
|
const wrapperBin = ensureLensAppBundle(electronBin);
|
|
178395
178492
|
const launchBin = wrapperBin ?? electronBin;
|
|
178396
178493
|
const launchArgs = wrapperBin ? ["--no-sandbox", mainScript] : [mainScript];
|
|
178397
|
-
const next = (0,
|
|
178494
|
+
const next = (0, import_node_child_process46.spawn)(launchBin, launchArgs, {
|
|
178398
178495
|
// Strips ELECTRON_RUN_AS_NODE, which an Electron-based MCP host leaves in
|
|
178399
178496
|
// our env, so the child boots as a GUI app instead of bare Node.
|
|
178400
178497
|
env: electronGuiChildEnv({ ARGENT_PREVIEW_URL: url2 }),
|
package/package.json
CHANGED