@swmansion/argent 0.25.2-next.4 → 0.25.2-next.6
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 +166 -137
- package/package.json +1 -1
package/dist/cli-cmds.mjs
CHANGED
|
@@ -21872,7 +21872,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
|
|
|
21872
21872
|
var SESSION_ID2 = randomUUID5();
|
|
21873
21873
|
function readCliVersion() {
|
|
21874
21874
|
if (true) {
|
|
21875
|
-
return "0.25.2-next.
|
|
21875
|
+
return "0.25.2-next.6";
|
|
21876
21876
|
}
|
|
21877
21877
|
return "0.0.0";
|
|
21878
21878
|
}
|
package/dist/installer.mjs
CHANGED
|
@@ -16725,7 +16725,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
|
|
|
16725
16725
|
var SESSION_ID = randomUUID4();
|
|
16726
16726
|
function readCliVersion() {
|
|
16727
16727
|
if (true) {
|
|
16728
|
-
return "0.25.2-next.
|
|
16728
|
+
return "0.25.2-next.6";
|
|
16729
16729
|
}
|
|
16730
16730
|
return "0.0.0";
|
|
16731
16731
|
}
|
package/dist/tool-server.cjs
CHANGED
|
@@ -7599,51 +7599,51 @@ var init_he = __esm({
|
|
|
7599
7599
|
}
|
|
7600
7600
|
case "too_big": {
|
|
7601
7601
|
const sizing = getSizing(issue2.origin);
|
|
7602
|
-
const
|
|
7602
|
+
const subject2 = withDefinite(issue2.origin ?? "value");
|
|
7603
7603
|
if (issue2.origin === "string") {
|
|
7604
|
-
return `${sizing?.longLabel ?? "\u05D0\u05E8\u05D5\u05DA"} \u05DE\u05D3\u05D9: ${
|
|
7604
|
+
return `${sizing?.longLabel ?? "\u05D0\u05E8\u05D5\u05DA"} \u05DE\u05D3\u05D9: ${subject2} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue2.maximum.toString()} ${sizing?.unit ?? ""} ${issue2.inclusive ? "\u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA" : "\u05DC\u05DB\u05DC \u05D4\u05D9\u05D5\u05EA\u05E8"}`.trim();
|
|
7605
7605
|
}
|
|
7606
7606
|
if (issue2.origin === "number") {
|
|
7607
7607
|
const comparison = issue2.inclusive ? `\u05E7\u05D8\u05DF \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue2.maximum}` : `\u05E7\u05D8\u05DF \u05DE-${issue2.maximum}`;
|
|
7608
|
-
return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${
|
|
7608
|
+
return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject2} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;
|
|
7609
7609
|
}
|
|
7610
7610
|
if (issue2.origin === "array" || issue2.origin === "set") {
|
|
7611
7611
|
const verb = issue2.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA";
|
|
7612
7612
|
const comparison = issue2.inclusive ? `${issue2.maximum} ${sizing?.unit ?? ""} \u05D0\u05D5 \u05E4\u05D7\u05D5\u05EA` : `\u05E4\u05D7\u05D5\u05EA \u05DE-${issue2.maximum} ${sizing?.unit ?? ""}`;
|
|
7613
|
-
return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${
|
|
7613
|
+
return `\u05D2\u05D3\u05D5\u05DC \u05DE\u05D3\u05D9: ${subject2} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();
|
|
7614
7614
|
}
|
|
7615
7615
|
const adj = issue2.inclusive ? "<=" : "<";
|
|
7616
7616
|
const be = verbFor(issue2.origin ?? "value");
|
|
7617
7617
|
if (sizing?.unit) {
|
|
7618
|
-
return `${sizing.longLabel} \u05DE\u05D3\u05D9: ${
|
|
7618
|
+
return `${sizing.longLabel} \u05DE\u05D3\u05D9: ${subject2} ${be} ${adj}${issue2.maximum.toString()} ${sizing.unit}`;
|
|
7619
7619
|
}
|
|
7620
|
-
return `${sizing?.longLabel ?? "\u05D2\u05D3\u05D5\u05DC"} \u05DE\u05D3\u05D9: ${
|
|
7620
|
+
return `${sizing?.longLabel ?? "\u05D2\u05D3\u05D5\u05DC"} \u05DE\u05D3\u05D9: ${subject2} ${be} ${adj}${issue2.maximum.toString()}`;
|
|
7621
7621
|
}
|
|
7622
7622
|
case "too_small": {
|
|
7623
7623
|
const sizing = getSizing(issue2.origin);
|
|
7624
|
-
const
|
|
7624
|
+
const subject2 = withDefinite(issue2.origin ?? "value");
|
|
7625
7625
|
if (issue2.origin === "string") {
|
|
7626
|
-
return `${sizing?.shortLabel ?? "\u05E7\u05E6\u05E8"} \u05DE\u05D3\u05D9: ${
|
|
7626
|
+
return `${sizing?.shortLabel ?? "\u05E7\u05E6\u05E8"} \u05DE\u05D3\u05D9: ${subject2} \u05E6\u05E8\u05D9\u05DB\u05D4 \u05DC\u05D4\u05DB\u05D9\u05DC ${issue2.minimum.toString()} ${sizing?.unit ?? ""} ${issue2.inclusive ? "\u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8" : "\u05DC\u05E4\u05D7\u05D5\u05EA"}`.trim();
|
|
7627
7627
|
}
|
|
7628
7628
|
if (issue2.origin === "number") {
|
|
7629
7629
|
const comparison = issue2.inclusive ? `\u05D2\u05D3\u05D5\u05DC \u05D0\u05D5 \u05E9\u05D5\u05D5\u05D4 \u05DC-${issue2.minimum}` : `\u05D2\u05D3\u05D5\u05DC \u05DE-${issue2.minimum}`;
|
|
7630
|
-
return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${
|
|
7630
|
+
return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject2} \u05E6\u05E8\u05D9\u05DA \u05DC\u05D4\u05D9\u05D5\u05EA ${comparison}`;
|
|
7631
7631
|
}
|
|
7632
7632
|
if (issue2.origin === "array" || issue2.origin === "set") {
|
|
7633
7633
|
const verb = issue2.origin === "set" ? "\u05E6\u05E8\u05D9\u05DB\u05D4" : "\u05E6\u05E8\u05D9\u05DA";
|
|
7634
7634
|
if (issue2.minimum === 1 && issue2.inclusive) {
|
|
7635
7635
|
const singularPhrase = issue2.origin === "set" ? "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3" : "\u05DC\u05E4\u05D7\u05D5\u05EA \u05E4\u05E8\u05D9\u05D8 \u05D0\u05D7\u05D3";
|
|
7636
|
-
return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${
|
|
7636
|
+
return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject2} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${singularPhrase}`;
|
|
7637
7637
|
}
|
|
7638
7638
|
const comparison = issue2.inclusive ? `${issue2.minimum} ${sizing?.unit ?? ""} \u05D0\u05D5 \u05D9\u05D5\u05EA\u05E8` : `\u05D9\u05D5\u05EA\u05E8 \u05DE-${issue2.minimum} ${sizing?.unit ?? ""}`;
|
|
7639
|
-
return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${
|
|
7639
|
+
return `\u05E7\u05D8\u05DF \u05DE\u05D3\u05D9: ${subject2} ${verb} \u05DC\u05D4\u05DB\u05D9\u05DC ${comparison}`.trim();
|
|
7640
7640
|
}
|
|
7641
7641
|
const adj = issue2.inclusive ? ">=" : ">";
|
|
7642
7642
|
const be = verbFor(issue2.origin ?? "value");
|
|
7643
7643
|
if (sizing?.unit) {
|
|
7644
|
-
return `${sizing.shortLabel} \u05DE\u05D3\u05D9: ${
|
|
7644
|
+
return `${sizing.shortLabel} \u05DE\u05D3\u05D9: ${subject2} ${be} ${adj}${issue2.minimum.toString()} ${sizing.unit}`;
|
|
7645
7645
|
}
|
|
7646
|
-
return `${sizing?.shortLabel ?? "\u05E7\u05D8\u05DF"} \u05DE\u05D3\u05D9: ${
|
|
7646
|
+
return `${sizing?.shortLabel ?? "\u05E7\u05D8\u05DF"} \u05DE\u05D3\u05D9: ${subject2} ${be} ${adj}${issue2.minimum.toString()}`;
|
|
7647
7647
|
}
|
|
7648
7648
|
case "invalid_format": {
|
|
7649
7649
|
const _issue = issue2;
|
|
@@ -94799,7 +94799,7 @@ var _CI_VENDOR_COUNT_FOR_TEST = vendors_default.length;
|
|
|
94799
94799
|
var SESSION_ID = (0, import_node_crypto3.randomUUID)();
|
|
94800
94800
|
function readCliVersion() {
|
|
94801
94801
|
if (true) {
|
|
94802
|
-
return "0.25.2-next.
|
|
94802
|
+
return "0.25.2-next.6";
|
|
94803
94803
|
}
|
|
94804
94804
|
return "0.0.0";
|
|
94805
94805
|
}
|
|
@@ -96335,8 +96335,8 @@ async function listCertificatePem(commonName) {
|
|
|
96335
96335
|
}
|
|
96336
96336
|
}
|
|
96337
96337
|
var PEM_BLOCK_RE = /-----BEGIN CERTIFICATE-----[\s\S]*?-----END CERTIFICATE-----/g;
|
|
96338
|
-
function subjectValue(
|
|
96339
|
-
for (const line of
|
|
96338
|
+
function subjectValue(subject2, key2) {
|
|
96339
|
+
for (const line of subject2.split("\n")) {
|
|
96340
96340
|
if (line.startsWith(`${key2}=`)) {
|
|
96341
96341
|
return line.slice(key2.length + 1).trim() || null;
|
|
96342
96342
|
}
|
|
@@ -109688,23 +109688,34 @@ async function captureScreenshot(ctx, opts = {}) {
|
|
|
109688
109688
|
let bytes = Buffer.from(cdpResult.data, "base64");
|
|
109689
109689
|
const rotation = opts.rotation && opts.rotation !== "Portrait" ? opts.rotation : null;
|
|
109690
109690
|
const scale = opts.scale != null && opts.scale > 0 && opts.scale < 1 ? opts.scale : null;
|
|
109691
|
+
const dropped = [];
|
|
109692
|
+
let dropReason;
|
|
109691
109693
|
if (rotation || scale) {
|
|
109692
109694
|
const sharp = tryLoadSharp();
|
|
109693
109695
|
if (!sharp) {
|
|
109694
109696
|
const features = [rotation && "rotation", scale && "scale"].filter(Boolean).join(" + ");
|
|
109695
109697
|
warnSharpMissingOnce(features);
|
|
109698
|
+
if (rotation) dropped.push("rotation");
|
|
109699
|
+
if (scale) dropped.push("scale");
|
|
109700
|
+
dropReason = "sharp-missing";
|
|
109696
109701
|
} else {
|
|
109697
109702
|
let pipeline = sharp(bytes);
|
|
109698
109703
|
if (rotation) pipeline = pipeline.rotate(ROTATION_DEGREES2[rotation]);
|
|
109699
109704
|
if (scale) {
|
|
109700
109705
|
const dims = readPngSize(bytes);
|
|
109701
109706
|
if (dims) {
|
|
109702
|
-
const
|
|
109703
|
-
const
|
|
109707
|
+
const quarterTurn = rotation === "LandscapeLeft" || rotation === "LandscapeRight";
|
|
109708
|
+
const rotatedW = quarterTurn ? dims.height : dims.width;
|
|
109709
|
+
const rotatedH = quarterTurn ? dims.width : dims.height;
|
|
109710
|
+
const targetW = Math.max(1, Math.round(rotatedW * scale));
|
|
109711
|
+
const targetH = Math.max(1, Math.round(rotatedH * scale));
|
|
109704
109712
|
pipeline = pipeline.resize(targetW, targetH, {
|
|
109705
109713
|
kernel: DOWNSCALER_TO_KERNEL[opts.downscaler ?? "lanczos3"],
|
|
109706
109714
|
fit: "fill"
|
|
109707
109715
|
});
|
|
109716
|
+
} else {
|
|
109717
|
+
dropped.push("scale");
|
|
109718
|
+
dropReason = "png-header-unreadable";
|
|
109708
109719
|
}
|
|
109709
109720
|
}
|
|
109710
109721
|
bytes = Buffer.from(await pipeline.png({ compressionLevel: 6 }).toBuffer());
|
|
@@ -109714,7 +109725,11 @@ async function captureScreenshot(ctx, opts = {}) {
|
|
|
109714
109725
|
const safeDeviceId = ctx.deviceId.replace(/[^A-Za-z0-9_-]/g, "_");
|
|
109715
109726
|
const filePath = path16.join(mediaDir(), `argent-screenshot-${safeDeviceId}-${stem}.png`);
|
|
109716
109727
|
fs18.writeFileSync(filePath, bytes);
|
|
109717
|
-
return {
|
|
109728
|
+
return {
|
|
109729
|
+
url: `file://${filePath}`,
|
|
109730
|
+
path: filePath,
|
|
109731
|
+
...dropped.length > 0 ? { droppedFeatures: dropped, dropReason } : {}
|
|
109732
|
+
};
|
|
109718
109733
|
}
|
|
109719
109734
|
function readPngSize(buf) {
|
|
109720
109735
|
const signature = [137, 80, 78, 71, 13, 10, 26, 10];
|
|
@@ -114635,6 +114650,31 @@ async function handleWsCommand(msg, server) {
|
|
|
114635
114650
|
|
|
114636
114651
|
// ../tool-server/src/http.ts
|
|
114637
114652
|
init_device_info();
|
|
114653
|
+
|
|
114654
|
+
// ../tool-server/src/tools/screenshot/dropped-geometry.ts
|
|
114655
|
+
var RESULT_NOTE_KEY = "__argentNote";
|
|
114656
|
+
function requestedGeometry(params) {
|
|
114657
|
+
const requested = [];
|
|
114658
|
+
if (params.rotation !== void 0 && params.rotation !== "Portrait") requested.push("rotation");
|
|
114659
|
+
if (params.scale !== void 0 && params.scale > 0 && params.scale < 1) requested.push("scale");
|
|
114660
|
+
return requested;
|
|
114661
|
+
}
|
|
114662
|
+
function subject(dropped) {
|
|
114663
|
+
return dropped.length === 2 ? "scale and rotation were" : `${dropped[0]} was`;
|
|
114664
|
+
}
|
|
114665
|
+
function chromiumDropNote(dropped, reason = "sharp-missing") {
|
|
114666
|
+
if (dropped.length === 0) return void 0;
|
|
114667
|
+
if (reason === "png-header-unreadable") {
|
|
114668
|
+
return `${subject(dropped)} not applied: the PNG header could not be read. Any rotation was applied.`;
|
|
114669
|
+
}
|
|
114670
|
+
return `${subject(dropped)} not applied: install the optional \`sharp\` package in the tool-server environment.`;
|
|
114671
|
+
}
|
|
114672
|
+
function unsupportedDropNote(dropped, target) {
|
|
114673
|
+
if (dropped.length === 0) return void 0;
|
|
114674
|
+
return `${subject(dropped)} not applied: ${target} screenshots cannot be rotated.`;
|
|
114675
|
+
}
|
|
114676
|
+
|
|
114677
|
+
// ../tool-server/src/http.ts
|
|
114638
114678
|
var AUTO_SUPPRESS_MS = 30 * 60 * 1e3;
|
|
114639
114679
|
var AUTH_TOKEN_ENV = "ARGENT_AUTH_TOKEN";
|
|
114640
114680
|
var BEARER_PREFIX = "Bearer ";
|
|
@@ -114796,6 +114836,14 @@ function isWebsocketUpgradeAllowed(headers, policy) {
|
|
|
114796
114836
|
var UPLOAD_TTL_MS = 15 * 60 * 1e3;
|
|
114797
114837
|
var MAX_UPLOAD_STREAM_BYTES = 2 * 1024 * 1024 * 1024;
|
|
114798
114838
|
var MAX_PENDING_UPLOAD_BYTES = 8 * 1024 * 1024 * 1024;
|
|
114839
|
+
function takeToolNote(data) {
|
|
114840
|
+
if (typeof data !== "object" || data === null) return void 0;
|
|
114841
|
+
const bag = data;
|
|
114842
|
+
if (!(RESULT_NOTE_KEY in bag)) return void 0;
|
|
114843
|
+
const note = bag[RESULT_NOTE_KEY];
|
|
114844
|
+
delete bag[RESULT_NOTE_KEY];
|
|
114845
|
+
return typeof note === "string" && note.length > 0 ? note : void 0;
|
|
114846
|
+
}
|
|
114799
114847
|
function createHttpApp(registry2, options) {
|
|
114800
114848
|
const app = (0, import_express3.default)();
|
|
114801
114849
|
app.use(import_express3.default.json({ limit: "48mb" }));
|
|
@@ -115206,6 +115254,8 @@ function createHttpApp(registry2, options) {
|
|
|
115206
115254
|
if (signingNote) {
|
|
115207
115255
|
notes.push(signingNote);
|
|
115208
115256
|
}
|
|
115257
|
+
const toolNote = takeToolNote(data);
|
|
115258
|
+
if (toolNote) notes.push(toolNote);
|
|
115209
115259
|
const notePayload = notes.length > 0 ? { note: notes.join("\n\n") } : {};
|
|
115210
115260
|
if (wantsStream) {
|
|
115211
115261
|
writeLine({ event: "result", data, ...notePayload });
|
|
@@ -120038,11 +120088,11 @@ function clearCachedProfilerPaths(port, deviceId) {
|
|
|
120038
120088
|
}
|
|
120039
120089
|
|
|
120040
120090
|
// ../tool-server/src/tools/devices/boot-device.ts
|
|
120041
|
-
var
|
|
120091
|
+
var import_node_child_process24 = require("node:child_process");
|
|
120042
120092
|
var import_node_fs12 = require("node:fs");
|
|
120043
120093
|
var import_node_os11 = require("node:os");
|
|
120044
120094
|
var import_node_path15 = require("node:path");
|
|
120045
|
-
var
|
|
120095
|
+
var import_node_util17 = require("node:util");
|
|
120046
120096
|
init_zod();
|
|
120047
120097
|
init_src();
|
|
120048
120098
|
init_src2();
|
|
@@ -120128,39 +120178,6 @@ function androidHeadlessFromEnv() {
|
|
|
120128
120178
|
init_device_info();
|
|
120129
120179
|
init_external_devices();
|
|
120130
120180
|
|
|
120131
|
-
// ../tool-server/src/utils/hid-suppression.ts
|
|
120132
|
-
var import_node_child_process23 = require("node:child_process");
|
|
120133
|
-
var import_node_util17 = require("node:util");
|
|
120134
|
-
var execFileAsync17 = (0, import_node_util17.promisify)(import_node_child_process23.execFile);
|
|
120135
|
-
var WARMUP_TIMEOUT_MS = 4e4;
|
|
120136
|
-
var errText = (err) => err instanceof Error ? err.message : String(err);
|
|
120137
|
-
function startHidWarmUp(udid, deviceSet) {
|
|
120138
|
-
let binary;
|
|
120139
|
-
try {
|
|
120140
|
-
binary = simulatorServerBinaryPath();
|
|
120141
|
-
} catch (err) {
|
|
120142
|
-
process.stderr.write(
|
|
120143
|
-
`[hid-warmup ${udid.slice(0, 8)}] simulator-server binary not found (${errText(err)}); HID suppression protection is not active for this boot.
|
|
120144
|
-
`
|
|
120145
|
-
);
|
|
120146
|
-
return Promise.resolve();
|
|
120147
|
-
}
|
|
120148
|
-
const args = ["hid_warmup", "--id", udid];
|
|
120149
|
-
if (deviceSet) args.push("--device-set", deviceSet);
|
|
120150
|
-
return execFileAsync17(binary, args, {
|
|
120151
|
-
timeout: WARMUP_TIMEOUT_MS,
|
|
120152
|
-
// It prints CoreSimulator noise on every failed attach attempt — ~80KB
|
|
120153
|
-
// against a device that never comes up. Well under Node's 1MB default, but
|
|
120154
|
-
// the default is the only headroom there is, so name one.
|
|
120155
|
-
maxBuffer: 4 * 1024 * 1024
|
|
120156
|
-
}).then(() => void 0).catch((err) => {
|
|
120157
|
-
process.stderr.write(
|
|
120158
|
-
`[hid-warmup ${udid.slice(0, 8)}] warm-up did not run (${errText(err)}); input may be silently dropped on this simulator.
|
|
120159
|
-
`
|
|
120160
|
-
);
|
|
120161
|
-
});
|
|
120162
|
-
}
|
|
120163
|
-
|
|
120164
120181
|
// ../tool-server/src/utils/vega-vvd.ts
|
|
120165
120182
|
init_src2();
|
|
120166
120183
|
init_adb();
|
|
@@ -120291,7 +120308,7 @@ async function waitForVvdRunning(timeoutMs) {
|
|
|
120291
120308
|
}
|
|
120292
120309
|
|
|
120293
120310
|
// ../tool-server/src/tools/devices/boot-electron.ts
|
|
120294
|
-
var
|
|
120311
|
+
var import_node_child_process23 = require("node:child_process");
|
|
120295
120312
|
var fs31 = __toESM(require("node:fs"));
|
|
120296
120313
|
var path26 = __toESM(require("node:path"));
|
|
120297
120314
|
init_src2();
|
|
@@ -120487,7 +120504,7 @@ async function bootElectronApp(options) {
|
|
|
120487
120504
|
];
|
|
120488
120505
|
let child;
|
|
120489
120506
|
try {
|
|
120490
|
-
child = (0,
|
|
120507
|
+
child = (0, import_node_child_process23.spawn)(launcher.command, args, {
|
|
120491
120508
|
detached: true,
|
|
120492
120509
|
// stdout is discarded, not piped: nothing reads it, and an unread pipe
|
|
120493
120510
|
// blocks the child's writes once the OS buffer fills. The
|
|
@@ -120609,7 +120626,7 @@ async function bootElectronApp(options) {
|
|
|
120609
120626
|
}
|
|
120610
120627
|
|
|
120611
120628
|
// ../tool-server/src/tools/devices/boot-device.ts
|
|
120612
|
-
var
|
|
120629
|
+
var execFileAsync17 = (0, import_node_util17.promisify)(import_node_child_process24.execFile);
|
|
120613
120630
|
var zodSchema9 = external_exports.object({
|
|
120614
120631
|
udid: external_exports.string().optional().describe(
|
|
120615
120632
|
"iOS: simulator UDID to boot (from `list-devices`). Provide exactly one of `udid`, `avdName`, `vvdImage`, or `electronAppPath`."
|
|
@@ -120813,7 +120830,7 @@ async function bootIos(udid, registry2, force, headless) {
|
|
|
120813
120830
|
const deviceSet = await deviceSetForUdid(udid);
|
|
120814
120831
|
const prefix = simctlPrefix(deviceSet);
|
|
120815
120832
|
if (force && simState === "Booted") {
|
|
120816
|
-
await
|
|
120833
|
+
await execFileAsync17("xcrun", [...prefix, "shutdown", udid]);
|
|
120817
120834
|
}
|
|
120818
120835
|
const needsPreBoot = simState === "Shutdown" || force && simState === "Booted";
|
|
120819
120836
|
if (needsPreBoot) {
|
|
@@ -120824,15 +120841,13 @@ async function bootIos(udid, registry2, force, headless) {
|
|
|
120824
120841
|
);
|
|
120825
120842
|
});
|
|
120826
120843
|
}
|
|
120827
|
-
|
|
120828
|
-
const hidWarmUp = alreadyUp || isTvOs ? Promise.resolve() : startHidWarmUp(udid, deviceSet);
|
|
120829
|
-
await execFileAsync18("xcrun", [...prefix, "boot", udid]).catch((err) => {
|
|
120844
|
+
await execFileAsync17("xcrun", [...prefix, "boot", udid]).catch((err) => {
|
|
120830
120845
|
const message = err instanceof Error ? err.message : String(err);
|
|
120831
120846
|
if (!message.includes("Unable to boot device in current state: Booted")) {
|
|
120832
120847
|
throw err;
|
|
120833
120848
|
}
|
|
120834
120849
|
});
|
|
120835
|
-
await
|
|
120850
|
+
await execFileAsync17("xcrun", [...prefix, "bootstatus", udid, "-b"]);
|
|
120836
120851
|
if (isTvOs && needsPreBoot) {
|
|
120837
120852
|
await registry2.disposeService(`${TV_CONTROL_NAMESPACE}:${udid}`).catch((err) => {
|
|
120838
120853
|
if (err instanceof ServiceNotFoundError) return;
|
|
@@ -120851,7 +120866,6 @@ async function bootIos(udid, registry2, force, headless) {
|
|
|
120851
120866
|
});
|
|
120852
120867
|
}
|
|
120853
120868
|
await ensureAutomationEnabled(udid).catch(() => void 0);
|
|
120854
|
-
await hidWarmUp;
|
|
120855
120869
|
const ndRef = nativeDevtoolsRef({ id: udid, platform: "ios", kind: "simulator" });
|
|
120856
120870
|
const ndApi = await registry2.resolveService(ndRef.urn, ndRef.options);
|
|
120857
120871
|
await ndApi.reverifyEnv().catch(() => {
|
|
@@ -120861,7 +120875,7 @@ async function bootIos(udid, registry2, force, headless) {
|
|
|
120861
120875
|
return buildInitFailedResult(udid, initFailure);
|
|
120862
120876
|
}
|
|
120863
120877
|
if (!deviceSet) {
|
|
120864
|
-
await
|
|
120878
|
+
await execFileAsync17("defaults", [
|
|
120865
120879
|
"write",
|
|
120866
120880
|
"com.apple.iphonesimulator",
|
|
120867
120881
|
"CurrentDeviceUDID",
|
|
@@ -120870,7 +120884,7 @@ async function bootIos(udid, registry2, force, headless) {
|
|
|
120870
120884
|
});
|
|
120871
120885
|
}
|
|
120872
120886
|
if (!headless && !iosHeadlessFromEnv() && !deviceSet) {
|
|
120873
|
-
await
|
|
120887
|
+
await execFileAsync17("open", ["-a", "Simulator.app"]).catch(() => execFileAsync17("open", ["-b", "com.apple.dt.Devices"])).catch(() => {
|
|
120874
120888
|
});
|
|
120875
120889
|
}
|
|
120876
120890
|
return { platform: "ios", udid, booted: true };
|
|
@@ -120917,7 +120931,7 @@ async function attemptBoot(params) {
|
|
|
120917
120931
|
emulatorLogFd = (0, import_node_fs12.openSync)(logPath, "w");
|
|
120918
120932
|
stdio = ["ignore", emulatorLogFd, emulatorLogFd];
|
|
120919
120933
|
}
|
|
120920
|
-
const child = (0,
|
|
120934
|
+
const child = (0, import_node_child_process24.spawn)(params.emulatorBinary, params.emulatorArgs, {
|
|
120921
120935
|
detached: true,
|
|
120922
120936
|
stdio
|
|
120923
120937
|
});
|
|
@@ -121542,11 +121556,11 @@ var BUNDLE_ID_PATTERN = /^[A-Za-z0-9_][A-Za-z0-9._-]*$/;
|
|
|
121542
121556
|
var BUNDLE_ID_MESSAGE = "bundleId may only contain letters, digits, '.', '_' and '-', and may not start with '-' or '.'";
|
|
121543
121557
|
|
|
121544
121558
|
// ../tool-server/src/tools/launch-app/platforms/ios.ts
|
|
121545
|
-
var
|
|
121546
|
-
var
|
|
121559
|
+
var import_node_child_process25 = require("node:child_process");
|
|
121560
|
+
var import_node_util18 = require("node:util");
|
|
121547
121561
|
init_src2();
|
|
121548
121562
|
init_external_devices();
|
|
121549
|
-
var
|
|
121563
|
+
var execFileAsync18 = (0, import_node_util18.promisify)(import_node_child_process25.execFile);
|
|
121550
121564
|
function makeIosImpl(registry2) {
|
|
121551
121565
|
return {
|
|
121552
121566
|
requires: ["xcrun"],
|
|
@@ -121561,7 +121575,7 @@ function makeIosImpl(registry2) {
|
|
|
121561
121575
|
if (blocked) return blocked;
|
|
121562
121576
|
}
|
|
121563
121577
|
try {
|
|
121564
|
-
await
|
|
121578
|
+
await execFileAsync18(
|
|
121565
121579
|
"xcrun",
|
|
121566
121580
|
await simctlArgsForUdid(params.udid, ["launch", params.udid, params.bundleId])
|
|
121567
121581
|
);
|
|
@@ -121853,11 +121867,11 @@ init_zod();
|
|
|
121853
121867
|
init_device_info();
|
|
121854
121868
|
|
|
121855
121869
|
// ../tool-server/src/tools/restart-app/platforms/ios.ts
|
|
121856
|
-
var
|
|
121857
|
-
var
|
|
121870
|
+
var import_node_child_process26 = require("node:child_process");
|
|
121871
|
+
var import_node_util19 = require("node:util");
|
|
121858
121872
|
init_src2();
|
|
121859
121873
|
init_external_devices();
|
|
121860
|
-
var
|
|
121874
|
+
var execFileAsync19 = (0, import_node_util19.promisify)(import_node_child_process26.execFile);
|
|
121861
121875
|
function makeIosImpl2(registry2) {
|
|
121862
121876
|
return {
|
|
121863
121877
|
requires: ["xcrun"],
|
|
@@ -121873,11 +121887,11 @@ function makeIosImpl2(registry2) {
|
|
|
121873
121887
|
if (blocked) return blocked;
|
|
121874
121888
|
}
|
|
121875
121889
|
try {
|
|
121876
|
-
await
|
|
121890
|
+
await execFileAsync19("xcrun", await simctlArgsForUdid(udid, ["terminate", udid, bundleId]));
|
|
121877
121891
|
} catch {
|
|
121878
121892
|
}
|
|
121879
121893
|
try {
|
|
121880
|
-
await
|
|
121894
|
+
await execFileAsync19("xcrun", await simctlArgsForUdid(udid, ["launch", udid, bundleId]));
|
|
121881
121895
|
} catch (err) {
|
|
121882
121896
|
throw new FailureError(
|
|
121883
121897
|
`Failed to restart iOS app ${bundleId} on ${udid}.`,
|
|
@@ -122055,11 +122069,11 @@ Returns { restarted, bundleId }. Fails if the app is not installed.`,
|
|
|
122055
122069
|
init_zod();
|
|
122056
122070
|
|
|
122057
122071
|
// ../tool-server/src/tools/reinstall-app/platforms/ios.ts
|
|
122058
|
-
var
|
|
122059
|
-
var
|
|
122072
|
+
var import_node_child_process27 = require("node:child_process");
|
|
122073
|
+
var import_node_util20 = require("node:util");
|
|
122060
122074
|
var import_node_path16 = require("node:path");
|
|
122061
122075
|
init_src2();
|
|
122062
|
-
var
|
|
122076
|
+
var execFileAsync20 = (0, import_node_util20.promisify)(import_node_child_process27.execFile);
|
|
122063
122077
|
var iosImpl = {
|
|
122064
122078
|
requires: ["xcrun"],
|
|
122065
122079
|
handler: async (_services, params) => {
|
|
@@ -122067,11 +122081,11 @@ var iosImpl = {
|
|
|
122067
122081
|
const absolute = (0, import_node_path16.resolve)(appPath);
|
|
122068
122082
|
const { nativeId, prefix } = await simctlTargetForUdid(udid);
|
|
122069
122083
|
try {
|
|
122070
|
-
await
|
|
122084
|
+
await execFileAsync20("xcrun", [...prefix, "uninstall", nativeId, bundleId]);
|
|
122071
122085
|
} catch {
|
|
122072
122086
|
}
|
|
122073
122087
|
try {
|
|
122074
|
-
await
|
|
122088
|
+
await execFileAsync20("xcrun", [...prefix, "install", nativeId, absolute]);
|
|
122075
122089
|
} catch (err) {
|
|
122076
122090
|
throw new FailureError(
|
|
122077
122091
|
`Failed to install iOS app bundle on ${udid}.`,
|
|
@@ -122248,10 +122262,10 @@ var PERMISSION_NAMES = [
|
|
|
122248
122262
|
];
|
|
122249
122263
|
|
|
122250
122264
|
// ../tool-server/src/tools/settings-permissions/platforms/ios.ts
|
|
122251
|
-
var
|
|
122252
|
-
var
|
|
122265
|
+
var import_node_child_process28 = require("node:child_process");
|
|
122266
|
+
var import_node_util21 = require("node:util");
|
|
122253
122267
|
init_src2();
|
|
122254
|
-
var
|
|
122268
|
+
var execFileAsync21 = (0, import_node_util21.promisify)(import_node_child_process28.execFile);
|
|
122255
122269
|
var SIMCTL_ACTION = {
|
|
122256
122270
|
grant: "grant",
|
|
122257
122271
|
deny: "revoke",
|
|
@@ -122276,7 +122290,7 @@ var NON_TCC_GRANT_NEEDS_INSTALL = /* @__PURE__ */ new Set([
|
|
|
122276
122290
|
]);
|
|
122277
122291
|
var localBackend = {
|
|
122278
122292
|
async run(udid, simctlAction, service, bundleId) {
|
|
122279
|
-
await
|
|
122293
|
+
await execFileAsync21(
|
|
122280
122294
|
"xcrun",
|
|
122281
122295
|
await simctlArgsForUdid(udid, ["privacy", udid, simctlAction, service, bundleId]),
|
|
122282
122296
|
{ timeout: 3e4 }
|
|
@@ -122284,7 +122298,7 @@ var localBackend = {
|
|
|
122284
122298
|
},
|
|
122285
122299
|
async isInstalled(udid, bundleId) {
|
|
122286
122300
|
try {
|
|
122287
|
-
await
|
|
122301
|
+
await execFileAsync21(
|
|
122288
122302
|
"xcrun",
|
|
122289
122303
|
await simctlArgsForUdid(udid, ["get_app_container", udid, bundleId]),
|
|
122290
122304
|
{ timeout: 15e3 }
|
|
@@ -122567,8 +122581,8 @@ init_zod();
|
|
|
122567
122581
|
init_device_info();
|
|
122568
122582
|
|
|
122569
122583
|
// ../tool-server/src/tools/open-url/platforms/ios.ts
|
|
122570
|
-
var
|
|
122571
|
-
var
|
|
122584
|
+
var import_node_child_process29 = require("node:child_process");
|
|
122585
|
+
var import_node_util22 = require("node:util");
|
|
122572
122586
|
init_src2();
|
|
122573
122587
|
|
|
122574
122588
|
// ../tool-server/src/tools/open-url/deep-link-note.ts
|
|
@@ -122578,12 +122592,12 @@ function httpDeepLinkNote(url2) {
|
|
|
122578
122592
|
}
|
|
122579
122593
|
|
|
122580
122594
|
// ../tool-server/src/tools/open-url/platforms/ios.ts
|
|
122581
|
-
var
|
|
122595
|
+
var execFileAsync22 = (0, import_node_util22.promisify)(import_node_child_process29.execFile);
|
|
122582
122596
|
var iosImpl3 = {
|
|
122583
122597
|
requires: ["xcrun"],
|
|
122584
122598
|
handler: async (_services, params) => {
|
|
122585
122599
|
try {
|
|
122586
|
-
await
|
|
122600
|
+
await execFileAsync22(
|
|
122587
122601
|
"xcrun",
|
|
122588
122602
|
await simctlArgsForUdid(params.udid, ["openurl", params.udid, params.url])
|
|
122589
122603
|
);
|
|
@@ -122739,8 +122753,8 @@ Returns { opened, url, note? }. note carries the deep-linking caveat when a web
|
|
|
122739
122753
|
};
|
|
122740
122754
|
|
|
122741
122755
|
// ../tool-server/src/tools/screenshot/index.ts
|
|
122742
|
-
var
|
|
122743
|
-
var
|
|
122756
|
+
var import_node_child_process30 = require("node:child_process");
|
|
122757
|
+
var import_node_util23 = require("node:util");
|
|
122744
122758
|
var os13 = __toESM(require("node:os"));
|
|
122745
122759
|
var path27 = __toESM(require("node:path"));
|
|
122746
122760
|
init_zod();
|
|
@@ -123312,7 +123326,7 @@ function scalePng(src, scale) {
|
|
|
123312
123326
|
|
|
123313
123327
|
// ../tool-server/src/tools/screenshot/index.ts
|
|
123314
123328
|
var fs33 = __toESM(require("node:fs/promises"));
|
|
123315
|
-
var
|
|
123329
|
+
var execFileAsync23 = (0, import_node_util23.promisify)(import_node_child_process30.execFile);
|
|
123316
123330
|
var zodSchema15 = external_exports.object({
|
|
123317
123331
|
udid: external_exports.string().describe(
|
|
123318
123332
|
"Target device id from `list-devices` (iOS UDID, Android serial, Apple TV UDID, Vega serial, or Chromium id)."
|
|
@@ -123353,11 +123367,11 @@ async function tvScreenshot(udid, scale, signal) {
|
|
|
123353
123367
|
os13.tmpdir(),
|
|
123354
123368
|
`argent-tv-screenshot-${udid.slice(0, 8)}-${process.hrtime.bigint()}.png`
|
|
123355
123369
|
);
|
|
123356
|
-
await
|
|
123370
|
+
await execFileAsync23("xcrun", await simctlArgsForUdid(udid, ["io", udid, "screenshot", file2]), {
|
|
123357
123371
|
signal
|
|
123358
123372
|
});
|
|
123359
123373
|
if (scale < 1) {
|
|
123360
|
-
await
|
|
123374
|
+
await execFileAsync23("sips", ["-Z", String(await tvTargetLongSide(file2, scale)), file2], {
|
|
123361
123375
|
signal
|
|
123362
123376
|
}).catch(() => {
|
|
123363
123377
|
});
|
|
@@ -123367,7 +123381,7 @@ async function tvScreenshot(udid, scale, signal) {
|
|
|
123367
123381
|
async function tvTargetLongSide(file2, scale) {
|
|
123368
123382
|
let longSide = 3840;
|
|
123369
123383
|
try {
|
|
123370
|
-
const { stdout } = await
|
|
123384
|
+
const { stdout } = await execFileAsync23("sips", ["-g", "pixelWidth", "-g", "pixelHeight", file2]);
|
|
123371
123385
|
const width = Number(/pixelWidth:\s*(\d+)/.exec(stdout)?.[1]);
|
|
123372
123386
|
const height = Number(/pixelHeight:\s*(\d+)/.exec(stdout)?.[1]);
|
|
123373
123387
|
if (Number.isFinite(width) && Number.isFinite(height) && width > 0 && height > 0) {
|
|
@@ -123381,7 +123395,7 @@ async function downscalePngInPlace(file2, scale, signal) {
|
|
|
123381
123395
|
if (scale >= 1) {
|
|
123382
123396
|
return;
|
|
123383
123397
|
}
|
|
123384
|
-
await
|
|
123398
|
+
await execFileAsync23("sips", ["-Z", String(await tvTargetLongSide(file2, scale)), file2], {
|
|
123385
123399
|
signal
|
|
123386
123400
|
}).catch(() => {
|
|
123387
123401
|
});
|
|
@@ -123413,17 +123427,20 @@ Fails if the simulator-server / emulator backend / Chromium CDP is not reachable
|
|
|
123413
123427
|
if (device.platform === "chromium") {
|
|
123414
123428
|
const ref2 = chromiumCdpRef(device);
|
|
123415
123429
|
const chromium = await registry2.resolveService(ref2.urn, ref2.options);
|
|
123416
|
-
const
|
|
123430
|
+
const captured = await chromium.captureScreenshot({
|
|
123417
123431
|
rotation: params.rotation,
|
|
123418
123432
|
scale: params.scale,
|
|
123419
123433
|
downscaler: params.downscaler
|
|
123420
123434
|
});
|
|
123421
123435
|
const image2 = await requireArtifacts(ctx).register({
|
|
123422
|
-
hostPath:
|
|
123436
|
+
hostPath: captured.path,
|
|
123423
123437
|
kind: "screenshot",
|
|
123424
123438
|
mimeType: "image/png"
|
|
123425
123439
|
});
|
|
123426
|
-
|
|
123440
|
+
const requested = requestedGeometry(params);
|
|
123441
|
+
const dropped = (captured.droppedFeatures ?? []).filter((f) => requested.includes(f));
|
|
123442
|
+
const note = chromiumDropNote(dropped, captured.dropReason);
|
|
123443
|
+
return { image: image2, ...note ? { [RESULT_NOTE_KEY]: note } : {} };
|
|
123427
123444
|
}
|
|
123428
123445
|
if (isIosPhysicalDevice(device)) {
|
|
123429
123446
|
const pngPath = await iosPhysicalScreenshot(registry2, device, scale);
|
|
@@ -123432,7 +123449,11 @@ Fails if the simulator-server / emulator backend / Chromium CDP is not reachable
|
|
|
123432
123449
|
kind: "screenshot",
|
|
123433
123450
|
mimeType: "image/png"
|
|
123434
123451
|
});
|
|
123435
|
-
|
|
123452
|
+
const note = unsupportedDropNote(
|
|
123453
|
+
requestedGeometry(params).filter((f) => f === "rotation"),
|
|
123454
|
+
"physical iPhone"
|
|
123455
|
+
);
|
|
123456
|
+
return { image: image2, ...note ? { [RESULT_NOTE_KEY]: note } : {} };
|
|
123436
123457
|
}
|
|
123437
123458
|
if (device.platform === "ios" && await isTvOsSimulator(params.udid)) {
|
|
123438
123459
|
const pngPath = await tvScreenshot(params.udid, scale, signal);
|
|
@@ -123441,7 +123462,11 @@ Fails if the simulator-server / emulator backend / Chromium CDP is not reachable
|
|
|
123441
123462
|
kind: "screenshot",
|
|
123442
123463
|
mimeType: "image/png"
|
|
123443
123464
|
});
|
|
123444
|
-
|
|
123465
|
+
const note = unsupportedDropNote(
|
|
123466
|
+
requestedGeometry(params).filter((f) => f === "rotation"),
|
|
123467
|
+
"Apple TV"
|
|
123468
|
+
);
|
|
123469
|
+
return { image: image2, ...note ? { [RESULT_NOTE_KEY]: note } : {} };
|
|
123445
123470
|
}
|
|
123446
123471
|
if (device.platform === "vega") {
|
|
123447
123472
|
const pngPath = await captureVegaScreenshotPng({ scale: params.scale });
|
|
@@ -123450,7 +123475,11 @@ Fails if the simulator-server / emulator backend / Chromium CDP is not reachable
|
|
|
123450
123475
|
kind: "screenshot",
|
|
123451
123476
|
mimeType: "image/png"
|
|
123452
123477
|
});
|
|
123453
|
-
|
|
123478
|
+
const note = unsupportedDropNote(
|
|
123479
|
+
requestedGeometry(params).filter((f) => f === "rotation"),
|
|
123480
|
+
"Vega (Fire TV)"
|
|
123481
|
+
);
|
|
123482
|
+
return { image: image2, ...note ? { [RESULT_NOTE_KEY]: note } : {} };
|
|
123454
123483
|
}
|
|
123455
123484
|
const ref = simulatorServerRef(device);
|
|
123456
123485
|
const api = await registry2.resolveService(ref.urn, ref.options);
|
|
@@ -125373,12 +125402,12 @@ var shakeZodSchema = external_exports.object({
|
|
|
125373
125402
|
});
|
|
125374
125403
|
|
|
125375
125404
|
// ../tool-server/src/tools/shake/platforms/ios.ts
|
|
125376
|
-
var
|
|
125377
|
-
var
|
|
125405
|
+
var import_node_child_process32 = require("node:child_process");
|
|
125406
|
+
var import_node_util24 = require("node:util");
|
|
125378
125407
|
init_src2();
|
|
125379
125408
|
|
|
125380
125409
|
// ../tool-server/src/utils/window-shake.ts
|
|
125381
|
-
var
|
|
125410
|
+
var import_node_child_process31 = require("node:child_process");
|
|
125382
125411
|
init_src();
|
|
125383
125412
|
var MICROINTERACTIONS_FLAG = "microinteractions";
|
|
125384
125413
|
var AMPLITUDE = 22;
|
|
@@ -125485,7 +125514,7 @@ end run
|
|
|
125485
125514
|
}
|
|
125486
125515
|
function runOsascript(script) {
|
|
125487
125516
|
return new Promise((resolve14, reject) => {
|
|
125488
|
-
const child = (0,
|
|
125517
|
+
const child = (0, import_node_child_process31.execFile)(
|
|
125489
125518
|
"/usr/bin/osascript",
|
|
125490
125519
|
["-"],
|
|
125491
125520
|
{ timeout: OSASCRIPT_TIMEOUT_MS },
|
|
@@ -125578,7 +125607,7 @@ async function prepareHostWindowShake(target) {
|
|
|
125578
125607
|
}
|
|
125579
125608
|
|
|
125580
125609
|
// ../tool-server/src/tools/shake/platforms/ios.ts
|
|
125581
|
-
var
|
|
125610
|
+
var execFileAsync24 = (0, import_node_util24.promisify)(import_node_child_process32.execFile);
|
|
125582
125611
|
var SHAKE_NOTIFICATION = "com.apple.UIKit.SimulatorShake";
|
|
125583
125612
|
var SHAKE_INTERVAL_MS = 400;
|
|
125584
125613
|
var sleep11 = (ms) => new Promise((r) => setTimeout(r, ms));
|
|
@@ -125618,7 +125647,7 @@ var iosImpl4 = {
|
|
|
125618
125647
|
if (i > 0) await sleep11(SHAKE_INTERVAL_MS);
|
|
125619
125648
|
shaker.begin();
|
|
125620
125649
|
try {
|
|
125621
|
-
await
|
|
125650
|
+
await execFileAsync24("xcrun", args, { timeout: 15e3 });
|
|
125622
125651
|
} catch (err) {
|
|
125623
125652
|
const error52 = err instanceof Error ? err : new Error(String(err));
|
|
125624
125653
|
throw shakeFailure(udid, error52.message, error52);
|
|
@@ -138460,8 +138489,8 @@ var import_util8 = require("util");
|
|
|
138460
138489
|
var DEFAULT_EXEC_TIMEOUT_MS = 6e4;
|
|
138461
138490
|
var DEFAULT_EXEC_MAX_BUFFER = 256 * 1024 * 1024;
|
|
138462
138491
|
async function execFileAsyncWithTimeout(file2, args, options = {}) {
|
|
138463
|
-
const
|
|
138464
|
-
const { stdout, stderr } = await
|
|
138492
|
+
const execFileAsync29 = (0, import_util8.promisify)(import_child_process2.execFile);
|
|
138493
|
+
const { stdout, stderr } = await execFileAsync29(file2, args, {
|
|
138465
138494
|
encoding: "utf-8",
|
|
138466
138495
|
...options,
|
|
138467
138496
|
// Applied after ...options so a caller cannot weaken the guards; maxBuffer
|
|
@@ -142487,7 +142516,7 @@ var WATERMARK_PNG_HEIGHT = 277;
|
|
|
142487
142516
|
var WATERMARK_PNG_BASE64 = "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";
|
|
142488
142517
|
|
|
142489
142518
|
// ../tool-server/src/tools/screen-recording/watermark.ts
|
|
142490
|
-
var
|
|
142519
|
+
var execFileAsync25 = (0, import_util9.promisify)(import_child_process6.execFile);
|
|
142491
142520
|
var OUTPUT_FPS = 30;
|
|
142492
142521
|
var FFMPEG_FALLBACK_PATHS = [
|
|
142493
142522
|
"/opt/homebrew/bin/ffmpeg",
|
|
@@ -142504,7 +142533,7 @@ var MASK_DARK_MAX_LUMA = 90;
|
|
|
142504
142533
|
var MASK_LIGHT_MIN_LUMA = 165;
|
|
142505
142534
|
async function resolveBinary(name, fallbacks) {
|
|
142506
142535
|
try {
|
|
142507
|
-
await
|
|
142536
|
+
await execFileAsync25("/bin/sh", ["-c", `command -v ${name}`], { timeout: 2e3 });
|
|
142508
142537
|
return name;
|
|
142509
142538
|
} catch {
|
|
142510
142539
|
}
|
|
@@ -145204,7 +145233,7 @@ Returns { stopped } - the URNs of the services that were actually live and got s
|
|
|
145204
145233
|
|
|
145205
145234
|
// ../tool-server/src/tools/simulator/stop-metro.ts
|
|
145206
145235
|
init_zod();
|
|
145207
|
-
var
|
|
145236
|
+
var import_node_child_process33 = require("node:child_process");
|
|
145208
145237
|
function parseNetstatListeningPids(netstatOutput, port) {
|
|
145209
145238
|
const pids = /* @__PURE__ */ new Set();
|
|
145210
145239
|
for (const line of netstatOutput.split(/\r?\n/)) {
|
|
@@ -145220,7 +145249,7 @@ function parseNetstatListeningPids(netstatOutput, port) {
|
|
|
145220
145249
|
}
|
|
145221
145250
|
function listeningPids(port) {
|
|
145222
145251
|
if (process.platform === "win32") {
|
|
145223
|
-
const output2 = (0,
|
|
145252
|
+
const output2 = (0, import_node_child_process33.execFileSync)("netstat", ["-ano"], {
|
|
145224
145253
|
encoding: "utf-8",
|
|
145225
145254
|
timeout: 5e3,
|
|
145226
145255
|
// `netstat -ano` dumps every socket on the host; overflowing Node's
|
|
@@ -145229,7 +145258,7 @@ function listeningPids(port) {
|
|
|
145229
145258
|
});
|
|
145230
145259
|
return parseNetstatListeningPids(output2, port);
|
|
145231
145260
|
}
|
|
145232
|
-
const output = (0,
|
|
145261
|
+
const output = (0, import_node_child_process33.execFileSync)("lsof", ["-ti", `tcp:${port}`, "-sTCP:LISTEN"], {
|
|
145233
145262
|
encoding: "utf-8",
|
|
145234
145263
|
timeout: 5e3
|
|
145235
145264
|
}).trim();
|
|
@@ -150346,7 +150375,7 @@ var import_node_url4 = require("node:url");
|
|
|
150346
150375
|
init_src2();
|
|
150347
150376
|
|
|
150348
150377
|
// ../tool-server/src/tools/flows/script/flow-script-executor.ts
|
|
150349
|
-
var
|
|
150378
|
+
var import_node_child_process34 = require("node:child_process");
|
|
150350
150379
|
var fs56 = __toESM(require("node:fs"));
|
|
150351
150380
|
var os17 = __toESM(require("node:os"));
|
|
150352
150381
|
var path41 = __toESM(require("node:path"));
|
|
@@ -150731,7 +150760,7 @@ var FlowScriptExecutor = class {
|
|
|
150731
150760
|
detached: process.platform !== "win32",
|
|
150732
150761
|
windowsHide: process.platform === "win32"
|
|
150733
150762
|
};
|
|
150734
|
-
child = (0,
|
|
150763
|
+
child = (0, import_node_child_process34.fork)(scriptPath, [], forkOptions);
|
|
150735
150764
|
} catch (err) {
|
|
150736
150765
|
return emptyResult(
|
|
150737
150766
|
{ kind: "spawn", message: `Could not start the script process: ${errorMessage(err)}` },
|
|
@@ -151172,7 +151201,7 @@ async function stopProcessTree(child, graceMs) {
|
|
|
151172
151201
|
if (process.platform === "win32") {
|
|
151173
151202
|
if (hasExited(child)) return;
|
|
151174
151203
|
tryKill(() => {
|
|
151175
|
-
const killer = (0,
|
|
151204
|
+
const killer = (0, import_node_child_process34.spawn)("taskkill", ["/pid", String(pid), "/t", "/f"], {
|
|
151176
151205
|
windowsHide: true,
|
|
151177
151206
|
stdio: "ignore"
|
|
151178
151207
|
});
|
|
@@ -151966,7 +151995,7 @@ init_src2();
|
|
|
151966
151995
|
// ../tool-server/src/tools/screenshot-diff/screenshot-diff-ocr.ts
|
|
151967
151996
|
var import_child_process8 = require("child_process");
|
|
151968
151997
|
var import_util10 = require("util");
|
|
151969
|
-
var
|
|
151998
|
+
var execFileAsync26 = (0, import_util10.promisify)(import_child_process8.execFile);
|
|
151970
151999
|
var OCR_TIMEOUT_MS = 1e4;
|
|
151971
152000
|
var OCR_MAX_BUFFER_BYTES = 32 * 1024 * 1024;
|
|
151972
152001
|
var TESSERACT_BINARY = "tesseract";
|
|
@@ -152011,7 +152040,7 @@ async function extractOcrTextBlocks(imagePath) {
|
|
|
152011
152040
|
}
|
|
152012
152041
|
}
|
|
152013
152042
|
async function recognizeTsv(imagePath) {
|
|
152014
|
-
const { stdout } = await
|
|
152043
|
+
const { stdout } = await execFileAsync26(
|
|
152015
152044
|
TESSERACT_BINARY,
|
|
152016
152045
|
[
|
|
152017
152046
|
imagePath,
|
|
@@ -154236,11 +154265,11 @@ async function runSnapshot(env, opts) {
|
|
|
154236
154265
|
}
|
|
154237
154266
|
|
|
154238
154267
|
// ../tool-server/src/utils/status-bar.ts
|
|
154239
|
-
var
|
|
154240
|
-
var
|
|
154268
|
+
var import_node_child_process35 = require("node:child_process");
|
|
154269
|
+
var import_node_util25 = require("node:util");
|
|
154241
154270
|
init_adb();
|
|
154242
154271
|
init_device_info();
|
|
154243
|
-
var
|
|
154272
|
+
var execFileAsync27 = (0, import_node_util25.promisify)(import_node_child_process35.execFile);
|
|
154244
154273
|
var DEMO_BROADCAST = "am broadcast -a com.android.systemui.demo";
|
|
154245
154274
|
var IOS_STATUS_BAR_OVERRIDE = [
|
|
154246
154275
|
"override",
|
|
@@ -154264,7 +154293,7 @@ async function pinStatusBar(device, signal) {
|
|
|
154264
154293
|
if (isIosPhysicalDevice(device)) return false;
|
|
154265
154294
|
try {
|
|
154266
154295
|
if (device.platform === "ios") {
|
|
154267
|
-
await
|
|
154296
|
+
await execFileAsync27(
|
|
154268
154297
|
"xcrun",
|
|
154269
154298
|
await simctlArgsForUdid(device.id, ["status_bar", device.id, ...IOS_STATUS_BAR_OVERRIDE])
|
|
154270
154299
|
);
|
|
@@ -154300,7 +154329,7 @@ async function pinStatusBar(device, signal) {
|
|
|
154300
154329
|
async function restoreStatusBar(device) {
|
|
154301
154330
|
try {
|
|
154302
154331
|
if (device.platform === "ios") {
|
|
154303
|
-
await
|
|
154332
|
+
await execFileAsync27(
|
|
154304
154333
|
"xcrun",
|
|
154305
154334
|
await simctlArgsForUdid(device.id, ["status_bar", device.id, "clear"])
|
|
154306
154335
|
);
|
|
@@ -155645,7 +155674,7 @@ init_zod();
|
|
|
155645
155674
|
// ../tool-server/src/utils/workspace-reader.ts
|
|
155646
155675
|
var import_promises12 = require("node:fs/promises");
|
|
155647
155676
|
var import_node_path23 = require("node:path");
|
|
155648
|
-
var
|
|
155677
|
+
var import_node_child_process36 = require("node:child_process");
|
|
155649
155678
|
var import_dotenv2 = __toESM(require_main());
|
|
155650
155679
|
async function exists(path50) {
|
|
155651
155680
|
try {
|
|
@@ -155689,7 +155718,7 @@ async function listDir(path50) {
|
|
|
155689
155718
|
var COMMAND_TIMEOUT_MS = 3e3;
|
|
155690
155719
|
function runVersionCommand(cmd, args, cwd) {
|
|
155691
155720
|
return new Promise((resolve14) => {
|
|
155692
|
-
const child = (0,
|
|
155721
|
+
const child = (0, import_node_child_process36.execFile)(cmd, args, { cwd, timeout: COMMAND_TIMEOUT_MS }, (err, stdout) => {
|
|
155693
155722
|
if (err) {
|
|
155694
155723
|
resolve14(null);
|
|
155695
155724
|
return;
|
|
@@ -155978,7 +156007,7 @@ Fails if the workspacePath is not an absolute path or the directory cannot be ac
|
|
|
155978
156007
|
};
|
|
155979
156008
|
|
|
155980
156009
|
// ../tool-server/src/tools/system/update-argent.ts
|
|
155981
|
-
var
|
|
156010
|
+
var import_node_child_process37 = require("node:child_process");
|
|
155982
156011
|
var fs63 = __toESM(require("node:fs"));
|
|
155983
156012
|
var path46 = __toESM(require("node:path"));
|
|
155984
156013
|
init_zod();
|
|
@@ -156113,7 +156142,7 @@ var updateArgentTool = {
|
|
|
156113
156142
|
if (spawnRoot) updateArgs.push("--project-root", spawnRoot);
|
|
156114
156143
|
const cmd = cliEntry ? process.execPath : "argent";
|
|
156115
156144
|
const args = cliEntry ? [cliEntry, ...updateArgs] : updateArgs;
|
|
156116
|
-
const child = (0,
|
|
156145
|
+
const child = (0, import_node_child_process37.spawn)(cmd, args, {
|
|
156117
156146
|
detached: true,
|
|
156118
156147
|
stdio: "ignore",
|
|
156119
156148
|
env: { ...process.env, ARGENT_UPDATE_TRIGGER: "mcp_update" }
|
|
@@ -157115,13 +157144,13 @@ function probeArgentToolServer(host, port, timeoutMs = 500) {
|
|
|
157115
157144
|
|
|
157116
157145
|
// ../tool-server/src/utils/simulator-watcher.ts
|
|
157117
157146
|
var fs65 = __toESM(require("node:fs"));
|
|
157118
|
-
var
|
|
157119
|
-
var
|
|
157147
|
+
var import_node_child_process38 = require("node:child_process");
|
|
157148
|
+
var import_node_util26 = require("node:util");
|
|
157120
157149
|
init_external_devices();
|
|
157121
|
-
var
|
|
157150
|
+
var execFileAsync28 = (0, import_node_util26.promisify)(import_node_child_process38.execFile);
|
|
157122
157151
|
var POLL_INTERVAL_MS2 = 1e4;
|
|
157123
157152
|
async function getBootedUdidsInSet(deviceSet) {
|
|
157124
|
-
const { stdout } = await
|
|
157153
|
+
const { stdout } = await execFileAsync28("xcrun", [
|
|
157125
157154
|
...simctlPrefix(deviceSet),
|
|
157126
157155
|
"list",
|
|
157127
157156
|
"devices",
|
|
@@ -157240,7 +157269,7 @@ function startSimulatorWatcher(registry2) {
|
|
|
157240
157269
|
}
|
|
157241
157270
|
|
|
157242
157271
|
// ../tool-server/src/utils/preview-window.ts
|
|
157243
|
-
var
|
|
157272
|
+
var import_node_child_process39 = require("node:child_process");
|
|
157244
157273
|
var fs66 = __toESM(require("node:fs"));
|
|
157245
157274
|
var os20 = __toESM(require("node:os"));
|
|
157246
157275
|
var path48 = __toESM(require("node:path"));
|
|
@@ -157272,10 +157301,10 @@ function ensureLensAppBundle(electronBin) {
|
|
|
157272
157301
|
fs66.copyFileSync(path48.join(realContents, "Info.plist"), plist);
|
|
157273
157302
|
const setPlist = (entry, value) => {
|
|
157274
157303
|
try {
|
|
157275
|
-
(0,
|
|
157304
|
+
(0, import_node_child_process39.execFileSync)("/usr/libexec/PlistBuddy", ["-c", `Set :${entry} ${value}`, plist]);
|
|
157276
157305
|
} catch {
|
|
157277
157306
|
try {
|
|
157278
|
-
(0,
|
|
157307
|
+
(0, import_node_child_process39.execFileSync)("/usr/libexec/PlistBuddy", ["-c", `Add :${entry} string ${value}`, plist]);
|
|
157279
157308
|
} catch {
|
|
157280
157309
|
}
|
|
157281
157310
|
}
|
|
@@ -157334,7 +157363,7 @@ function createPreviewWindowManager(opts = {}) {
|
|
|
157334
157363
|
const wrapperBin = ensureLensAppBundle(electronBin);
|
|
157335
157364
|
const launchBin = wrapperBin ?? electronBin;
|
|
157336
157365
|
const launchArgs = wrapperBin ? ["--no-sandbox", mainScript] : [mainScript];
|
|
157337
|
-
const next = (0,
|
|
157366
|
+
const next = (0, import_node_child_process39.spawn)(launchBin, launchArgs, {
|
|
157338
157367
|
// Strips ELECTRON_RUN_AS_NODE, which an Electron-based MCP host leaves in
|
|
157339
157368
|
// our env, so the child boots as a GUI app instead of bare Node.
|
|
157340
157369
|
env: electronGuiChildEnv({ ARGENT_PREVIEW_URL: url2 }),
|
package/package.json
CHANGED