peachsim 0.1.1463 → 0.1.1469

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.
Files changed (82) hide show
  1. package/cli/bridge-flow-runner.ts +25 -17
  2. package/cli/cloud-client.ts +12 -19
  3. package/cli/commands/inspect/settling.ts +4 -1
  4. package/cli/drivers/playwright-sim-host.ts +10 -0
  5. package/dist-lib/agent-daemon-client.cjs +1 -1
  6. package/dist-lib/agent-events.cjs +1 -1
  7. package/dist-lib/attached-projects.cjs +1 -1
  8. package/dist-lib/auth/shared-session.cjs +1 -1
  9. package/dist-lib/backend-origin.cjs +1 -1
  10. package/dist-lib/beta.cjs +1 -1
  11. package/dist-lib/beta.mjs +1 -1
  12. package/dist-lib/bridge-constants.cjs +1 -1
  13. package/dist-lib/bridge-contract-input.cjs +1 -1
  14. package/dist-lib/bridge-contract-input.mjs +1 -1
  15. package/dist-lib/bridge-contract.cjs +1 -1
  16. package/dist-lib/bridge-contract.mjs +1 -1
  17. package/dist-lib/bundle-channel.cjs +2 -2
  18. package/dist-lib/capture-contract.cjs +1 -1
  19. package/dist-lib/capture-contract.mjs +1 -1
  20. package/dist-lib/cloud-contract.cjs +1 -1
  21. package/dist-lib/cloud-contract.mjs +1 -1
  22. package/dist-lib/cloud-test-args.cjs +1 -1
  23. package/dist-lib/cloud-test-args.mjs +1 -1
  24. package/dist-lib/cloud.cjs +1 -1
  25. package/dist-lib/cloud.mjs +1 -1
  26. package/dist-lib/config.cjs +1 -1
  27. package/dist-lib/config.mjs +1 -1
  28. package/dist-lib/detox/index.cjs +191 -78
  29. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  30. package/dist-lib/expo-swift-bundle.cjs +2 -2
  31. package/dist-lib/expo-swift-metadata.cjs +1 -1
  32. package/dist-lib/expo-swift-metadata.mjs +1 -1
  33. package/dist-lib/home-paths.cjs +1 -1
  34. package/dist-lib/host/bridge-host.cjs +69 -12
  35. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  36. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  37. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  38. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  39. package/dist-lib/host/websocket-proxy.cjs +1 -1
  40. package/dist-lib/index.cjs +5 -2
  41. package/dist-lib/jump-to-source-babel.cjs +1 -1
  42. package/dist-lib/jump-to-source-native.cjs +1 -1
  43. package/dist-lib/kotlin-host.cjs +1 -1
  44. package/dist-lib/menu.cjs +1 -1
  45. package/dist-lib/menu.mjs +1 -1
  46. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  47. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  48. package/dist-lib/metro-production-bundle.cjs +1 -1
  49. package/dist-lib/metro-production-bundle.mjs +1 -1
  50. package/dist-lib/metro.cjs +1 -1
  51. package/dist-lib/native-app-identity-project.cjs +1 -1
  52. package/dist-lib/native-app-identity-project.mjs +1 -1
  53. package/dist-lib/native-app-identity.cjs +1 -1
  54. package/dist-lib/native-app-identity.mjs +1 -1
  55. package/dist-lib/native-firebase-metadata.cjs +1 -1
  56. package/dist-lib/native-firebase-metadata.mjs +1 -1
  57. package/dist-lib/plist.cjs +1 -1
  58. package/dist-lib/plist.mjs +1 -1
  59. package/dist-lib/profiles.cjs +1 -1
  60. package/dist-lib/public-brand.cjs +1 -1
  61. package/dist-lib/react-native-host-modules.cjs +1 -1
  62. package/dist-lib/react-native-host-modules.mjs +1 -1
  63. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  64. package/dist-lib/sdk.cjs +5 -2
  65. package/dist-lib/sdk.mjs +5 -2
  66. package/dist-lib/skills.cjs +480 -296
  67. package/dist-lib/swift-compile.cjs +2 -2
  68. package/dist-lib/swift-compile.mjs +2 -2
  69. package/dist-lib/swift-package.cjs +1 -1
  70. package/dist-lib/swift-package.mjs +1 -1
  71. package/dist-lib/swift-submit.cjs +1 -1
  72. package/dist-lib/swift-submit.mjs +1 -1
  73. package/dist-lib/swift-toolchain.cjs +1 -1
  74. package/dist-lib/swift.cjs +1 -1
  75. package/dist-lib/vite-swift.cjs +2 -2
  76. package/dist-lib/vite.cjs +1 -1
  77. package/dist-lib/worklet-executable.cjs +5 -1
  78. package/dist-lib/worklet-executable.mjs +5 -1
  79. package/package.json +1 -1
  80. package/src/bundle-asset-resource.ts +8 -0
  81. package/src/swift-compile.ts +4 -0
  82. package/src/worklet-executable.ts +7 -2
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1463 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1469 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1225,22 +1225,22 @@ var require_motion_change = __commonJS({
1225
1225
  var require_attempt_events = __commonJS({
1226
1226
  "detox/attempt-events.cjs"(exports2, module2) {
1227
1227
  "use strict";
1228
- var fs2 = require("node:fs");
1229
- var path2 = require("node:path");
1228
+ var fs3 = require("node:fs");
1229
+ var path3 = require("node:path");
1230
1230
  function attemptEventsPath() {
1231
1231
  const enabled = process.env.CONFORMANCE_PROOF === "1" || Boolean(process.env.CONFORMANCE_PROOF_DIR);
1232
1232
  if (!enabled) return null;
1233
- const root = path2.resolve(
1233
+ const root = path3.resolve(
1234
1234
  process.cwd(),
1235
1235
  process.env.CONFORMANCE_PROOF_DIR || "artifacts/conformance-proof/latest"
1236
1236
  );
1237
- return path2.join(root, "events.jsonl");
1237
+ return path3.join(root, "events.jsonl");
1238
1238
  }
1239
1239
  function writeAttemptEvent2(event) {
1240
1240
  const output = attemptEventsPath();
1241
1241
  if (output === null) return false;
1242
- fs2.mkdirSync(path2.dirname(output), { recursive: true });
1243
- fs2.appendFileSync(output, `${JSON.stringify(event)}
1242
+ fs3.mkdirSync(path3.dirname(output), { recursive: true });
1243
+ fs3.appendFileSync(output, `${JSON.stringify(event)}
1244
1244
  `);
1245
1245
  return true;
1246
1246
  }
@@ -1351,15 +1351,113 @@ __export(detox_exports, {
1351
1351
  });
1352
1352
  module.exports = __toCommonJS(detox_exports);
1353
1353
  var import_crypto = require("crypto");
1354
- var fs = __toESM(require("fs"), 1);
1354
+ var fs2 = __toESM(require("fs"), 1);
1355
1355
  var import_node_child_process2 = require("node:child_process");
1356
1356
  var import_node_module = require("node:module");
1357
1357
  var import_node_util = require("node:util");
1358
- var path = __toESM(require("path"), 1);
1358
+ var path2 = __toESM(require("path"), 1);
1359
1359
  var import_playwright_core = require("playwright-core");
1360
1360
 
1361
1361
  // ../../scripts/lib/reap-browser.ts
1362
+ var childProcess = __toESM(require("node:child_process"), 1);
1362
1363
  var import_node_child_process = require("node:child_process");
1364
+ var fs = __toESM(require("node:fs"), 1);
1365
+ var os = __toESM(require("node:os"), 1);
1366
+ var path = __toESM(require("node:path"), 1);
1367
+
1368
+ // ../../scripts/lib/chromium-admission.ts
1369
+ async function acquireChromiumAdmission(deps) {
1370
+ const { fs: fs3, os: os2, path: path3, childProcess: childProcess2, label } = deps;
1371
+ const dir = path3.join(
1372
+ process.platform === "win32" ? os2.tmpdir() : "/tmp",
1373
+ "chromium-admission"
1374
+ );
1375
+ fs3.mkdirSync(dir, { recursive: true });
1376
+ const limit = Math.max(2, Math.floor(os2.availableParallelism() / 3));
1377
+ const startedAt = Math.round(Date.now() / 1e3 - process.uptime());
1378
+ const name2 = `${process.pid}-${startedAt}-${Math.random().toString(36).slice(2, 10)}`;
1379
+ const ticket = path3.join(dir, name2);
1380
+ fs3.closeSync(fs3.openSync(ticket, "wx"));
1381
+ let released = false;
1382
+ const release = () => {
1383
+ if (released) return;
1384
+ released = true;
1385
+ process.removeListener("exit", release);
1386
+ try {
1387
+ fs3.unlinkSync(ticket);
1388
+ } catch {
1389
+ }
1390
+ };
1391
+ process.on("exit", release);
1392
+ const verified = /* @__PURE__ */ new Map();
1393
+ const live = (entry) => {
1394
+ const match = /^(\d+)-(\d+)-/.exec(entry);
1395
+ if (!match) return false;
1396
+ const pid = Number(match[1]);
1397
+ try {
1398
+ process.kill(pid, 0);
1399
+ } catch (err) {
1400
+ if (!(err instanceof Error && "code" in err && err.code === "EPERM")) return false;
1401
+ }
1402
+ const known = verified.get(entry);
1403
+ if (known !== void 0) return known;
1404
+ let same = pid === process.pid;
1405
+ if (!same) {
1406
+ try {
1407
+ const started = childProcess2.execFileSync("ps", ["-p", String(pid), "-o", "lstart="], { encoding: "utf8" }).trim();
1408
+ same = Math.abs(Date.parse(started) / 1e3 - Number(match[2])) <= 2;
1409
+ } catch {
1410
+ same = false;
1411
+ }
1412
+ }
1413
+ verified.set(entry, same);
1414
+ return same;
1415
+ };
1416
+ let waited = false;
1417
+ while (true) {
1418
+ const tickets = [];
1419
+ for (const entry of fs3.readdirSync(dir)) {
1420
+ if (entry !== name2 && !live(entry)) {
1421
+ try {
1422
+ fs3.unlinkSync(path3.join(dir, entry));
1423
+ } catch {
1424
+ }
1425
+ continue;
1426
+ }
1427
+ try {
1428
+ tickets.push({
1429
+ entry,
1430
+ created: fs3.statSync(path3.join(dir, entry), { bigint: true }).ctimeNs
1431
+ });
1432
+ } catch {
1433
+ }
1434
+ }
1435
+ tickets.sort(
1436
+ (a, b) => a.created === b.created ? a.entry < b.entry ? -1 : 1 : a.created < b.created ? -1 : 1
1437
+ );
1438
+ const rank = tickets.findIndex((t) => t.entry === name2);
1439
+ if (rank < 0) {
1440
+ fs3.closeSync(fs3.openSync(ticket, "wx"));
1441
+ continue;
1442
+ }
1443
+ if (rank < limit) {
1444
+ if (waited) process.stderr.write(`[chromium-admission] ${label}: admitted
1445
+ `);
1446
+ return release;
1447
+ }
1448
+ if (!waited) {
1449
+ const holders = tickets.slice(0, limit).map((t) => t.entry.split("-")[0]);
1450
+ process.stderr.write(
1451
+ `[chromium-admission] ${label}: ${limit} chromium launches already run on this machine (pids ${holders.join(" ")}), queued ${rank - limit + 1}
1452
+ `
1453
+ );
1454
+ waited = true;
1455
+ }
1456
+ await new Promise((resolve2) => setTimeout(resolve2, 500));
1457
+ }
1458
+ }
1459
+
1460
+ // ../../scripts/lib/reap-browser.ts
1363
1461
  var discoveredChromePids = /* @__PURE__ */ new WeakMap();
1364
1462
  var discoveredChromeProcesses = /* @__PURE__ */ new WeakMap();
1365
1463
  var reapPids = /* @__PURE__ */ new Map();
@@ -1647,7 +1745,20 @@ function installReaper() {
1647
1745
  process.on("exit", reap);
1648
1746
  }
1649
1747
  async function launchReapedScoped(launch, readIdentity = processIdentity) {
1650
- const browser = await launch();
1748
+ const releaseAdmission = await acquireChromiumAdmission({
1749
+ fs,
1750
+ os,
1751
+ path,
1752
+ childProcess,
1753
+ label: process.argv.slice(1, 3).join(" ")
1754
+ });
1755
+ let browser;
1756
+ try {
1757
+ browser = await launch();
1758
+ } catch (err) {
1759
+ releaseAdmission();
1760
+ throw err;
1761
+ }
1651
1762
  let root = rootChromePid(browser);
1652
1763
  if (root === null) {
1653
1764
  try {
@@ -1670,6 +1781,7 @@ async function launchReapedScoped(launch, readIdentity = processIdentity) {
1670
1781
  untrackReapPid(tracked);
1671
1782
  }
1672
1783
  mine.clear();
1784
+ releaseAdmission();
1673
1785
  });
1674
1786
  }
1675
1787
  const reapNow = () => {
@@ -1678,6 +1790,7 @@ async function launchReapedScoped(launch, readIdentity = processIdentity) {
1678
1790
  untrackReapPid(tracked);
1679
1791
  }
1680
1792
  mine.clear();
1793
+ releaseAdmission();
1681
1794
  };
1682
1795
  return { browser, reapNow };
1683
1796
  }
@@ -4437,17 +4550,17 @@ function visit(node, visitor) {
4437
4550
  visit.BREAK = BREAK;
4438
4551
  visit.SKIP = SKIP;
4439
4552
  visit.REMOVE = REMOVE;
4440
- function visit_(key, node, visitor, path2) {
4441
- const ctrl = callVisitor(key, node, visitor, path2);
4553
+ function visit_(key, node, visitor, path3) {
4554
+ const ctrl = callVisitor(key, node, visitor, path3);
4442
4555
  if (isNode(ctrl) || isPair(ctrl)) {
4443
- replaceNode(key, path2, ctrl);
4444
- return visit_(key, ctrl, visitor, path2);
4556
+ replaceNode(key, path3, ctrl);
4557
+ return visit_(key, ctrl, visitor, path3);
4445
4558
  }
4446
4559
  if (typeof ctrl !== "symbol") {
4447
4560
  if (isCollection(node)) {
4448
- path2 = Object.freeze(path2.concat(node));
4561
+ path3 = Object.freeze(path3.concat(node));
4449
4562
  for (let i = 0; i < node.items.length; ++i) {
4450
- const ci = visit_(i, node.items[i], visitor, path2);
4563
+ const ci = visit_(i, node.items[i], visitor, path3);
4451
4564
  if (typeof ci === "number")
4452
4565
  i = ci - 1;
4453
4566
  else if (ci === BREAK)
@@ -4458,13 +4571,13 @@ function visit_(key, node, visitor, path2) {
4458
4571
  }
4459
4572
  }
4460
4573
  } else if (isPair(node)) {
4461
- path2 = Object.freeze(path2.concat(node));
4462
- const ck = visit_("key", node.key, visitor, path2);
4574
+ path3 = Object.freeze(path3.concat(node));
4575
+ const ck = visit_("key", node.key, visitor, path3);
4463
4576
  if (ck === BREAK)
4464
4577
  return BREAK;
4465
4578
  else if (ck === REMOVE)
4466
4579
  node.key = null;
4467
- const cv = visit_("value", node.value, visitor, path2);
4580
+ const cv = visit_("value", node.value, visitor, path3);
4468
4581
  if (cv === BREAK)
4469
4582
  return BREAK;
4470
4583
  else if (cv === REMOVE)
@@ -4485,17 +4598,17 @@ async function visitAsync(node, visitor) {
4485
4598
  visitAsync.BREAK = BREAK;
4486
4599
  visitAsync.SKIP = SKIP;
4487
4600
  visitAsync.REMOVE = REMOVE;
4488
- async function visitAsync_(key, node, visitor, path2) {
4489
- const ctrl = await callVisitor(key, node, visitor, path2);
4601
+ async function visitAsync_(key, node, visitor, path3) {
4602
+ const ctrl = await callVisitor(key, node, visitor, path3);
4490
4603
  if (isNode(ctrl) || isPair(ctrl)) {
4491
- replaceNode(key, path2, ctrl);
4492
- return visitAsync_(key, ctrl, visitor, path2);
4604
+ replaceNode(key, path3, ctrl);
4605
+ return visitAsync_(key, ctrl, visitor, path3);
4493
4606
  }
4494
4607
  if (typeof ctrl !== "symbol") {
4495
4608
  if (isCollection(node)) {
4496
- path2 = Object.freeze(path2.concat(node));
4609
+ path3 = Object.freeze(path3.concat(node));
4497
4610
  for (let i = 0; i < node.items.length; ++i) {
4498
- const ci = await visitAsync_(i, node.items[i], visitor, path2);
4611
+ const ci = await visitAsync_(i, node.items[i], visitor, path3);
4499
4612
  if (typeof ci === "number")
4500
4613
  i = ci - 1;
4501
4614
  else if (ci === BREAK)
@@ -4506,13 +4619,13 @@ async function visitAsync_(key, node, visitor, path2) {
4506
4619
  }
4507
4620
  }
4508
4621
  } else if (isPair(node)) {
4509
- path2 = Object.freeze(path2.concat(node));
4510
- const ck = await visitAsync_("key", node.key, visitor, path2);
4622
+ path3 = Object.freeze(path3.concat(node));
4623
+ const ck = await visitAsync_("key", node.key, visitor, path3);
4511
4624
  if (ck === BREAK)
4512
4625
  return BREAK;
4513
4626
  else if (ck === REMOVE)
4514
4627
  node.key = null;
4515
- const cv = await visitAsync_("value", node.value, visitor, path2);
4628
+ const cv = await visitAsync_("value", node.value, visitor, path3);
4516
4629
  if (cv === BREAK)
4517
4630
  return BREAK;
4518
4631
  else if (cv === REMOVE)
@@ -4539,23 +4652,23 @@ function initVisitor(visitor) {
4539
4652
  }
4540
4653
  return visitor;
4541
4654
  }
4542
- function callVisitor(key, node, visitor, path2) {
4655
+ function callVisitor(key, node, visitor, path3) {
4543
4656
  if (typeof visitor === "function")
4544
- return visitor(key, node, path2);
4657
+ return visitor(key, node, path3);
4545
4658
  if (isMap(node))
4546
- return visitor.Map?.(key, node, path2);
4659
+ return visitor.Map?.(key, node, path3);
4547
4660
  if (isSeq(node))
4548
- return visitor.Seq?.(key, node, path2);
4661
+ return visitor.Seq?.(key, node, path3);
4549
4662
  if (isPair(node))
4550
- return visitor.Pair?.(key, node, path2);
4663
+ return visitor.Pair?.(key, node, path3);
4551
4664
  if (isScalar(node))
4552
- return visitor.Scalar?.(key, node, path2);
4665
+ return visitor.Scalar?.(key, node, path3);
4553
4666
  if (isAlias(node))
4554
- return visitor.Alias?.(key, node, path2);
4667
+ return visitor.Alias?.(key, node, path3);
4555
4668
  return void 0;
4556
4669
  }
4557
- function replaceNode(key, path2, node) {
4558
- const parent = path2[path2.length - 1];
4670
+ function replaceNode(key, path3, node) {
4671
+ const parent = path3[path3.length - 1];
4559
4672
  if (isCollection(parent)) {
4560
4673
  parent.items[key] = node;
4561
4674
  } else if (isPair(parent)) {
@@ -5035,10 +5148,10 @@ function createNode(value, tagName, ctx) {
5035
5148
  }
5036
5149
 
5037
5150
  // ../../node_modules/yaml/browser/dist/nodes/Collection.js
5038
- function collectionFromPath(schema4, path2, value) {
5151
+ function collectionFromPath(schema4, path3, value) {
5039
5152
  let v = value;
5040
- for (let i = path2.length - 1; i >= 0; --i) {
5041
- const k = path2[i];
5153
+ for (let i = path3.length - 1; i >= 0; --i) {
5154
+ const k = path3[i];
5042
5155
  if (typeof k === "number" && Number.isInteger(k) && k >= 0) {
5043
5156
  const a = [];
5044
5157
  a[k] = v;
@@ -5057,7 +5170,7 @@ function collectionFromPath(schema4, path2, value) {
5057
5170
  sourceObjects: /* @__PURE__ */ new Map()
5058
5171
  });
5059
5172
  }
5060
- var isEmptyPath = (path2) => path2 == null || typeof path2 === "object" && !!path2[Symbol.iterator]().next().done;
5173
+ var isEmptyPath = (path3) => path3 == null || typeof path3 === "object" && !!path3[Symbol.iterator]().next().done;
5061
5174
  var Collection = class extends NodeBase {
5062
5175
  constructor(type, schema4) {
5063
5176
  super(type);
@@ -5087,11 +5200,11 @@ var Collection = class extends NodeBase {
5087
5200
  * be a Pair instance or a `{ key, value }` object, which may not have a key
5088
5201
  * that already exists in the map.
5089
5202
  */
5090
- addIn(path2, value) {
5091
- if (isEmptyPath(path2))
5203
+ addIn(path3, value) {
5204
+ if (isEmptyPath(path3))
5092
5205
  this.add(value);
5093
5206
  else {
5094
- const [key, ...rest] = path2;
5207
+ const [key, ...rest] = path3;
5095
5208
  const node = this.get(key, true);
5096
5209
  if (isCollection(node))
5097
5210
  node.addIn(rest, value);
@@ -5105,8 +5218,8 @@ var Collection = class extends NodeBase {
5105
5218
  * Removes a value from the collection.
5106
5219
  * @returns `true` if the item was found and removed.
5107
5220
  */
5108
- deleteIn(path2) {
5109
- const [key, ...rest] = path2;
5221
+ deleteIn(path3) {
5222
+ const [key, ...rest] = path3;
5110
5223
  if (rest.length === 0)
5111
5224
  return this.delete(key);
5112
5225
  const node = this.get(key, true);
@@ -5120,8 +5233,8 @@ var Collection = class extends NodeBase {
5120
5233
  * scalar values from their surrounding node; to disable set `keepScalar` to
5121
5234
  * `true` (collections are always returned intact).
5122
5235
  */
5123
- getIn(path2, keepScalar) {
5124
- const [key, ...rest] = path2;
5236
+ getIn(path3, keepScalar) {
5237
+ const [key, ...rest] = path3;
5125
5238
  const node = this.get(key, true);
5126
5239
  if (rest.length === 0)
5127
5240
  return !keepScalar && isScalar(node) ? node.value : node;
@@ -5139,8 +5252,8 @@ var Collection = class extends NodeBase {
5139
5252
  /**
5140
5253
  * Checks if the collection includes a value with the key `key`.
5141
5254
  */
5142
- hasIn(path2) {
5143
- const [key, ...rest] = path2;
5255
+ hasIn(path3) {
5256
+ const [key, ...rest] = path3;
5144
5257
  if (rest.length === 0)
5145
5258
  return this.has(key);
5146
5259
  const node = this.get(key, true);
@@ -5150,8 +5263,8 @@ var Collection = class extends NodeBase {
5150
5263
  * Sets a value in this collection. For `!!set`, `value` needs to be a
5151
5264
  * boolean to add/remove the item from the set.
5152
5265
  */
5153
- setIn(path2, value) {
5154
- const [key, ...rest] = path2;
5266
+ setIn(path3, value) {
5267
+ const [key, ...rest] = path3;
5155
5268
  if (rest.length === 0) {
5156
5269
  this.set(key, value);
5157
5270
  } else {
@@ -6600,9 +6713,9 @@ function visit2(cst, visitor) {
6600
6713
  visit2.BREAK = BREAK2;
6601
6714
  visit2.SKIP = SKIP2;
6602
6715
  visit2.REMOVE = REMOVE2;
6603
- visit2.itemAtPath = (cst, path2) => {
6716
+ visit2.itemAtPath = (cst, path3) => {
6604
6717
  let item = cst;
6605
- for (const [field, index] of path2) {
6718
+ for (const [field, index] of path3) {
6606
6719
  const tok = item?.[field];
6607
6720
  if (tok && "items" in tok) {
6608
6721
  item = tok.items[index];
@@ -6611,23 +6724,23 @@ visit2.itemAtPath = (cst, path2) => {
6611
6724
  }
6612
6725
  return item;
6613
6726
  };
6614
- visit2.parentCollection = (cst, path2) => {
6615
- const parent = visit2.itemAtPath(cst, path2.slice(0, -1));
6616
- const field = path2[path2.length - 1][0];
6727
+ visit2.parentCollection = (cst, path3) => {
6728
+ const parent = visit2.itemAtPath(cst, path3.slice(0, -1));
6729
+ const field = path3[path3.length - 1][0];
6617
6730
  const coll = parent?.[field];
6618
6731
  if (coll && "items" in coll)
6619
6732
  return coll;
6620
6733
  throw new Error("Parent collection not found");
6621
6734
  };
6622
- function _visit(path2, item, visitor) {
6623
- let ctrl = visitor(item, path2);
6735
+ function _visit(path3, item, visitor) {
6736
+ let ctrl = visitor(item, path3);
6624
6737
  if (typeof ctrl === "symbol")
6625
6738
  return ctrl;
6626
6739
  for (const field of ["key", "value"]) {
6627
6740
  const token = item[field];
6628
6741
  if (token && "items" in token) {
6629
6742
  for (let i = 0; i < token.items.length; ++i) {
6630
- const ci = _visit(Object.freeze(path2.concat([[field, i]])), token.items[i], visitor);
6743
+ const ci = _visit(Object.freeze(path3.concat([[field, i]])), token.items[i], visitor);
6631
6744
  if (typeof ci === "number")
6632
6745
  i = ci - 1;
6633
6746
  else if (ci === BREAK2)
@@ -6638,10 +6751,10 @@ function _visit(path2, item, visitor) {
6638
6751
  }
6639
6752
  }
6640
6753
  if (typeof ctrl === "function" && field === "key")
6641
- ctrl = ctrl(item, path2);
6754
+ ctrl = ctrl(item, path3);
6642
6755
  }
6643
6756
  }
6644
- return typeof ctrl === "function" ? ctrl(item, path2) : ctrl;
6757
+ return typeof ctrl === "function" ? ctrl(item, path3) : ctrl;
6645
6758
  }
6646
6759
 
6647
6760
  // ../../node_modules/yaml/browser/dist/parse/lexer.js
@@ -9141,7 +9254,7 @@ function getSootsimNavigationDiagnostics(page) {
9141
9254
  // detox/index.ts
9142
9255
  var import_proof_frame = __toESM(require_proof_frame(), 1);
9143
9256
  var BASE_URL = process.env.PEACH_URL || "http://localhost:5173";
9144
- var SCREENSHOT_DIR = process.env.PEACH_SCREENSHOT_DIR || path.join(process.cwd(), "test", "detox-driver", "screenshots", String(process.pid));
9257
+ var SCREENSHOT_DIR = process.env.PEACH_SCREENSHOT_DIR || path2.join(process.cwd(), "test", "detox-driver", "screenshots", String(process.pid));
9145
9258
  var _browser = null;
9146
9259
  var _reapBrowserNow = null;
9147
9260
  var _context = null;
@@ -9689,8 +9802,8 @@ async function focusElementForTextEntry(el) {
9689
9802
  );
9690
9803
  }
9691
9804
  function ensureScreenshotDir() {
9692
- if (!fs.existsSync(SCREENSHOT_DIR)) {
9693
- fs.mkdirSync(SCREENSHOT_DIR, { recursive: true });
9805
+ if (!fs2.existsSync(SCREENSHOT_DIR)) {
9806
+ fs2.mkdirSync(SCREENSHOT_DIR, { recursive: true });
9694
9807
  }
9695
9808
  }
9696
9809
  function decodePngDataUrl(dataUrl) {
@@ -9706,8 +9819,8 @@ function writeFastScreenshotFrames(namePrefix, frames) {
9706
9819
  ensureScreenshotDir();
9707
9820
  return frames.map((frame) => {
9708
9821
  const safeName = `${namePrefix}-${frame.label}`.replace(/[^a-zA-Z0-9._-]+/g, "-");
9709
- const filePath = path.join(SCREENSHOT_DIR, `${safeName}.png`);
9710
- fs.writeFileSync(filePath, decodePngDataUrl(frame.dataUrl));
9822
+ const filePath = path2.join(SCREENSHOT_DIR, `${safeName}.png`);
9823
+ fs2.writeFileSync(filePath, decodePngDataUrl(frame.dataUrl));
9711
9824
  const { dataUrl: _dataUrl, ...metadata } = frame;
9712
9825
  return {
9713
9826
  ...metadata,
@@ -9775,8 +9888,8 @@ async function captureSootsimPng(opts) {
9775
9888
  }
9776
9889
  async function writeSootsimScreenshot(name2, opts) {
9777
9890
  ensureScreenshotDir();
9778
- const screenshotPath = path.join(SCREENSHOT_DIR, `${name2}.png`);
9779
- fs.writeFileSync(screenshotPath, await captureSootsimPng(opts));
9891
+ const screenshotPath = path2.join(SCREENSHOT_DIR, `${name2}.png`);
9892
+ fs2.writeFileSync(screenshotPath, await captureSootsimPng(opts));
9780
9893
  return screenshotPath;
9781
9894
  }
9782
9895
  async function dispatchStatusBarOverride(config) {
@@ -10451,10 +10564,10 @@ var device = {
10451
10564
  }
10452
10565
  if (!_browser) {
10453
10566
  const executablePath = import_playwright_core.chromium.executablePath();
10454
- if (!fs.existsSync(executablePath)) {
10455
- const requireDriver = (0, import_node_module.createRequire)(path.join(__dirname, "index.cjs"));
10456
- const cliPath = path.join(
10457
- path.dirname(requireDriver.resolve("playwright-core/package.json")),
10567
+ if (!fs2.existsSync(executablePath)) {
10568
+ const requireDriver = (0, import_node_module.createRequire)(path2.join(__dirname, "index.cjs"));
10569
+ const cliPath = path2.join(
10570
+ path2.dirname(requireDriver.resolve("playwright-core/package.json")),
10458
10571
  "cli.js"
10459
10572
  );
10460
10573
  try {
@@ -10486,7 +10599,7 @@ var device = {
10486
10599
  viewport: { width: 500, height: 900 }
10487
10600
  };
10488
10601
  if (opts?.recordVideoDir) {
10489
- fs.mkdirSync(opts.recordVideoDir, { recursive: true });
10602
+ fs2.mkdirSync(opts.recordVideoDir, { recursive: true });
10490
10603
  contextOpts.recordVideo = {
10491
10604
  dir: opts.recordVideoDir,
10492
10605
  size: { width: 500, height: 900 }
@@ -10613,8 +10726,8 @@ var device = {
10613
10726
  // frame-stability poll so callers can sample mid-transition.
10614
10727
  async takeScreenshotFast(name2) {
10615
10728
  ensureScreenshotDir();
10616
- const screenshotPath = path.join(SCREENSHOT_DIR, `${name2}.png`);
10617
- fs.writeFileSync(screenshotPath, await captureSootsimPngFast());
10729
+ const screenshotPath = path2.join(SCREENSHOT_DIR, `${name2}.png`);
10730
+ fs2.writeFileSync(screenshotPath, await captureSootsimPngFast());
10618
10731
  return screenshotPath;
10619
10732
  },
10620
10733
  // record the SootSim canvas via the engine's headless recorder
@@ -10684,8 +10797,8 @@ var device = {
10684
10797
  offset = result.offset;
10685
10798
  if (result.done) break;
10686
10799
  }
10687
- fs.mkdirSync(path.dirname(outPath), { recursive: true });
10688
- fs.writeFileSync(outPath, Buffer.concat(chunks));
10800
+ fs2.mkdirSync(path2.dirname(outPath), { recursive: true });
10801
+ fs2.writeFileSync(outPath, Buffer.concat(chunks));
10689
10802
  this._lastRecordingPath = outPath;
10690
10803
  return outPath;
10691
10804
  },
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1463 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1469 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1463 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1469 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -3745,7 +3745,7 @@ function compileSwiftProjectUnit(input, options) {
3745
3745
  };
3746
3746
  const hash = swiftArtifactHash(input, options.release, moduleRoot);
3747
3747
  return serialize(root, async () => {
3748
- if (process.platform === "darwin" && process.env.TM_SESSION && process.env.CI !== "true" && moduleRoot === import_node_path2.default.resolve(__sootsim_import_meta_dirname, "../../sootsim-swift") && !swiftDistributionAt(moduleRoot)) {
3748
+ if (process.platform === "darwin" && process.env.TM_SESSION && !process.env.CONTRAST_REMOTE_BUILD && process.env.CI !== "true" && moduleRoot === import_node_path2.default.resolve(__sootsim_import_meta_dirname, "../../sootsim-swift") && !swiftDistributionAt(moduleRoot)) {
3749
3749
  const requestRoot = (0, import_node_fs2.mkdtempSync)(import_node_path2.default.join(root, ".builder-request-"));
3750
3750
  const output = import_node_path2.default.join(requestRoot, "output");
3751
3751
  const request = import_node_path2.default.join(requestRoot, "request.json");
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1463 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1469 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1463 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1469 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
 
3
3
  // src/bundleGlobalFooter.ts
4
4
  function readBundleGlobalFooter(source, name) {
@@ -1,4 +1,4 @@
1
- /*! peach v0.1.1463 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
1
+ /*! peach v0.1.1469 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
2
2
  let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;