peachsim 0.1.926 → 0.1.927

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 (77) hide show
  1. package/cli/commands/control.ts +4 -26
  2. package/dist-lib/agent-daemon-client.cjs +1 -1
  3. package/dist-lib/agent-events.cjs +1 -1
  4. package/dist-lib/agent-identity.cjs +1 -1
  5. package/dist-lib/agent-sessions.cjs +1 -1
  6. package/dist-lib/attached-projects.cjs +1 -1
  7. package/dist-lib/auth/shared-session.cjs +1 -1
  8. package/dist-lib/backend-origin.cjs +1 -1
  9. package/dist-lib/beta.cjs +1 -1
  10. package/dist-lib/beta.mjs +1 -1
  11. package/dist-lib/bridge-constants.cjs +1 -1
  12. package/dist-lib/bridge-contract-input.cjs +1 -1
  13. package/dist-lib/bridge-contract-input.mjs +1 -1
  14. package/dist-lib/bridge-contract.cjs +1 -1
  15. package/dist-lib/bridge-contract.mjs +1 -1
  16. package/dist-lib/bundle-channel.cjs +1 -1
  17. package/dist-lib/capture-contract.cjs +1 -1
  18. package/dist-lib/capture-contract.mjs +1 -1
  19. package/dist-lib/cli-constants.cjs +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/detox/index.cjs +1 -1
  28. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  29. package/dist-lib/expo-swift-bundle.cjs +1 -1
  30. package/dist-lib/expo-swift-metadata.cjs +1 -1
  31. package/dist-lib/expo-swift-metadata.mjs +1 -1
  32. package/dist-lib/home-paths.cjs +1 -1
  33. package/dist-lib/host/bridge-host.cjs +1 -1
  34. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  35. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  36. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  37. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  38. package/dist-lib/host/websocket-proxy.cjs +1 -1
  39. package/dist-lib/index.cjs +1 -1
  40. package/dist-lib/jump-to-source-babel.cjs +1 -1
  41. package/dist-lib/jump-to-source-native.cjs +1 -1
  42. package/dist-lib/kotlin-host.cjs +1 -1
  43. package/dist-lib/menu.cjs +1 -1
  44. package/dist-lib/menu.mjs +1 -1
  45. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  46. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  47. package/dist-lib/metro-production-bundle.cjs +1 -1
  48. package/dist-lib/metro-production-bundle.mjs +1 -1
  49. package/dist-lib/metro.cjs +1 -1
  50. package/dist-lib/native-app-identity.cjs +1 -1
  51. package/dist-lib/native-app-identity.mjs +1 -1
  52. package/dist-lib/native-firebase-metadata.cjs +1 -1
  53. package/dist-lib/native-firebase-metadata.mjs +1 -1
  54. package/dist-lib/plist.cjs +1 -1
  55. package/dist-lib/plist.mjs +1 -1
  56. package/dist-lib/profiles.cjs +1 -1
  57. package/dist-lib/public-brand.cjs +1 -1
  58. package/dist-lib/react-native-host-modules.cjs +1 -1
  59. package/dist-lib/react-native-host-modules.mjs +1 -1
  60. package/dist-lib/render-mode.cjs +1 -1
  61. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  62. package/dist-lib/sdk.cjs +1 -1
  63. package/dist-lib/sdk.mjs +1 -1
  64. package/dist-lib/skills.cjs +377 -558
  65. package/dist-lib/swift-compile.cjs +1 -1
  66. package/dist-lib/swift-compile.mjs +1 -1
  67. package/dist-lib/swift-package.cjs +1 -1
  68. package/dist-lib/swift-package.mjs +1 -1
  69. package/dist-lib/swift-submit.cjs +1 -1
  70. package/dist-lib/swift-submit.mjs +1 -1
  71. package/dist-lib/swift-toolchain.cjs +1 -1
  72. package/dist-lib/swift.cjs +1 -1
  73. package/dist-lib/vite-swift.cjs +1 -1
  74. package/dist-lib/vite.cjs +1 -1
  75. package/dist-lib/worklet-executable.cjs +1 -1
  76. package/dist-lib/worklet-executable.mjs +1 -1
  77. package/package.json +1 -1
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.926 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.927 | (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;
@@ -19125,17 +19125,17 @@ function visit(node, visitor) {
19125
19125
  } else
19126
19126
  visit_(null, node, visitor_, Object.freeze([]));
19127
19127
  }
19128
- function visit_(key2, node, visitor, path39) {
19129
- const ctrl = callVisitor(key2, node, visitor, path39);
19128
+ function visit_(key2, node, visitor, path38) {
19129
+ const ctrl = callVisitor(key2, node, visitor, path38);
19130
19130
  if (isNode(ctrl) || isPair(ctrl)) {
19131
- replaceNode(key2, path39, ctrl);
19132
- return visit_(key2, ctrl, visitor, path39);
19131
+ replaceNode(key2, path38, ctrl);
19132
+ return visit_(key2, ctrl, visitor, path38);
19133
19133
  }
19134
19134
  if (typeof ctrl !== "symbol") {
19135
19135
  if (isCollection(node)) {
19136
- path39 = Object.freeze(path39.concat(node));
19136
+ path38 = Object.freeze(path38.concat(node));
19137
19137
  for (let i = 0; i < node.items.length; ++i) {
19138
- const ci = visit_(i, node.items[i], visitor, path39);
19138
+ const ci = visit_(i, node.items[i], visitor, path38);
19139
19139
  if (typeof ci === "number")
19140
19140
  i = ci - 1;
19141
19141
  else if (ci === BREAK)
@@ -19146,13 +19146,13 @@ function visit_(key2, node, visitor, path39) {
19146
19146
  }
19147
19147
  }
19148
19148
  } else if (isPair(node)) {
19149
- path39 = Object.freeze(path39.concat(node));
19150
- const ck = visit_("key", node.key, visitor, path39);
19149
+ path38 = Object.freeze(path38.concat(node));
19150
+ const ck = visit_("key", node.key, visitor, path38);
19151
19151
  if (ck === BREAK)
19152
19152
  return BREAK;
19153
19153
  else if (ck === REMOVE)
19154
19154
  node.key = null;
19155
- const cv = visit_("value", node.value, visitor, path39);
19155
+ const cv = visit_("value", node.value, visitor, path38);
19156
19156
  if (cv === BREAK)
19157
19157
  return BREAK;
19158
19158
  else if (cv === REMOVE)
@@ -19170,17 +19170,17 @@ async function visitAsync(node, visitor) {
19170
19170
  } else
19171
19171
  await visitAsync_(null, node, visitor_, Object.freeze([]));
19172
19172
  }
19173
- async function visitAsync_(key2, node, visitor, path39) {
19174
- const ctrl = await callVisitor(key2, node, visitor, path39);
19173
+ async function visitAsync_(key2, node, visitor, path38) {
19174
+ const ctrl = await callVisitor(key2, node, visitor, path38);
19175
19175
  if (isNode(ctrl) || isPair(ctrl)) {
19176
- replaceNode(key2, path39, ctrl);
19177
- return visitAsync_(key2, ctrl, visitor, path39);
19176
+ replaceNode(key2, path38, ctrl);
19177
+ return visitAsync_(key2, ctrl, visitor, path38);
19178
19178
  }
19179
19179
  if (typeof ctrl !== "symbol") {
19180
19180
  if (isCollection(node)) {
19181
- path39 = Object.freeze(path39.concat(node));
19181
+ path38 = Object.freeze(path38.concat(node));
19182
19182
  for (let i = 0; i < node.items.length; ++i) {
19183
- const ci = await visitAsync_(i, node.items[i], visitor, path39);
19183
+ const ci = await visitAsync_(i, node.items[i], visitor, path38);
19184
19184
  if (typeof ci === "number")
19185
19185
  i = ci - 1;
19186
19186
  else if (ci === BREAK)
@@ -19191,13 +19191,13 @@ async function visitAsync_(key2, node, visitor, path39) {
19191
19191
  }
19192
19192
  }
19193
19193
  } else if (isPair(node)) {
19194
- path39 = Object.freeze(path39.concat(node));
19195
- const ck = await visitAsync_("key", node.key, visitor, path39);
19194
+ path38 = Object.freeze(path38.concat(node));
19195
+ const ck = await visitAsync_("key", node.key, visitor, path38);
19196
19196
  if (ck === BREAK)
19197
19197
  return BREAK;
19198
19198
  else if (ck === REMOVE)
19199
19199
  node.key = null;
19200
- const cv = await visitAsync_("value", node.value, visitor, path39);
19200
+ const cv = await visitAsync_("value", node.value, visitor, path38);
19201
19201
  if (cv === BREAK)
19202
19202
  return BREAK;
19203
19203
  else if (cv === REMOVE)
@@ -19224,23 +19224,23 @@ function initVisitor(visitor) {
19224
19224
  }
19225
19225
  return visitor;
19226
19226
  }
19227
- function callVisitor(key2, node, visitor, path39) {
19227
+ function callVisitor(key2, node, visitor, path38) {
19228
19228
  if (typeof visitor === "function")
19229
- return visitor(key2, node, path39);
19229
+ return visitor(key2, node, path38);
19230
19230
  if (isMap(node))
19231
- return visitor.Map?.(key2, node, path39);
19231
+ return visitor.Map?.(key2, node, path38);
19232
19232
  if (isSeq(node))
19233
- return visitor.Seq?.(key2, node, path39);
19233
+ return visitor.Seq?.(key2, node, path38);
19234
19234
  if (isPair(node))
19235
- return visitor.Pair?.(key2, node, path39);
19235
+ return visitor.Pair?.(key2, node, path38);
19236
19236
  if (isScalar(node))
19237
- return visitor.Scalar?.(key2, node, path39);
19237
+ return visitor.Scalar?.(key2, node, path38);
19238
19238
  if (isAlias(node))
19239
- return visitor.Alias?.(key2, node, path39);
19239
+ return visitor.Alias?.(key2, node, path38);
19240
19240
  return void 0;
19241
19241
  }
19242
- function replaceNode(key2, path39, node) {
19243
- const parent = path39[path39.length - 1];
19242
+ function replaceNode(key2, path38, node) {
19243
+ const parent = path38[path38.length - 1];
19244
19244
  if (isCollection(parent)) {
19245
19245
  parent.items[key2] = node;
19246
19246
  } else if (isPair(parent)) {
@@ -19840,10 +19840,10 @@ var init_createNode = __esm({
19840
19840
  });
19841
19841
 
19842
19842
  // ../../node_modules/yaml/browser/dist/nodes/Collection.js
19843
- function collectionFromPath(schema4, path39, value) {
19843
+ function collectionFromPath(schema4, path38, value) {
19844
19844
  let v = value;
19845
- for (let i = path39.length - 1; i >= 0; --i) {
19846
- const k = path39[i];
19845
+ for (let i = path38.length - 1; i >= 0; --i) {
19846
+ const k = path38[i];
19847
19847
  if (typeof k === "number" && Number.isInteger(k) && k >= 0) {
19848
19848
  const a = [];
19849
19849
  a[k] = v;
@@ -19868,7 +19868,7 @@ var init_Collection = __esm({
19868
19868
  init_createNode();
19869
19869
  init_identity();
19870
19870
  init_Node();
19871
- isEmptyPath = (path39) => path39 == null || typeof path39 === "object" && !!path39[Symbol.iterator]().next().done;
19871
+ isEmptyPath = (path38) => path38 == null || typeof path38 === "object" && !!path38[Symbol.iterator]().next().done;
19872
19872
  Collection = class extends NodeBase {
19873
19873
  constructor(type, schema4) {
19874
19874
  super(type);
@@ -19898,11 +19898,11 @@ var init_Collection = __esm({
19898
19898
  * be a Pair instance or a `{ key, value }` object, which may not have a key
19899
19899
  * that already exists in the map.
19900
19900
  */
19901
- addIn(path39, value) {
19902
- if (isEmptyPath(path39))
19901
+ addIn(path38, value) {
19902
+ if (isEmptyPath(path38))
19903
19903
  this.add(value);
19904
19904
  else {
19905
- const [key2, ...rest] = path39;
19905
+ const [key2, ...rest] = path38;
19906
19906
  const node = this.get(key2, true);
19907
19907
  if (isCollection(node))
19908
19908
  node.addIn(rest, value);
@@ -19916,8 +19916,8 @@ var init_Collection = __esm({
19916
19916
  * Removes a value from the collection.
19917
19917
  * @returns `true` if the item was found and removed.
19918
19918
  */
19919
- deleteIn(path39) {
19920
- const [key2, ...rest] = path39;
19919
+ deleteIn(path38) {
19920
+ const [key2, ...rest] = path38;
19921
19921
  if (rest.length === 0)
19922
19922
  return this.delete(key2);
19923
19923
  const node = this.get(key2, true);
@@ -19931,8 +19931,8 @@ var init_Collection = __esm({
19931
19931
  * scalar values from their surrounding node; to disable set `keepScalar` to
19932
19932
  * `true` (collections are always returned intact).
19933
19933
  */
19934
- getIn(path39, keepScalar) {
19935
- const [key2, ...rest] = path39;
19934
+ getIn(path38, keepScalar) {
19935
+ const [key2, ...rest] = path38;
19936
19936
  const node = this.get(key2, true);
19937
19937
  if (rest.length === 0)
19938
19938
  return !keepScalar && isScalar(node) ? node.value : node;
@@ -19950,8 +19950,8 @@ var init_Collection = __esm({
19950
19950
  /**
19951
19951
  * Checks if the collection includes a value with the key `key`.
19952
19952
  */
19953
- hasIn(path39) {
19954
- const [key2, ...rest] = path39;
19953
+ hasIn(path38) {
19954
+ const [key2, ...rest] = path38;
19955
19955
  if (rest.length === 0)
19956
19956
  return this.has(key2);
19957
19957
  const node = this.get(key2, true);
@@ -19961,8 +19961,8 @@ var init_Collection = __esm({
19961
19961
  * Sets a value in this collection. For `!!set`, `value` needs to be a
19962
19962
  * boolean to add/remove the item from the set.
19963
19963
  */
19964
- setIn(path39, value) {
19965
- const [key2, ...rest] = path39;
19964
+ setIn(path38, value) {
19965
+ const [key2, ...rest] = path38;
19966
19966
  if (rest.length === 0) {
19967
19967
  this.set(key2, value);
19968
19968
  } else {
@@ -22396,9 +22396,9 @@ var init_Document = __esm({
22396
22396
  this.contents.add(value);
22397
22397
  }
22398
22398
  /** Adds a value to the document. */
22399
- addIn(path39, value) {
22399
+ addIn(path38, value) {
22400
22400
  if (assertCollection(this.contents))
22401
- this.contents.addIn(path39, value);
22401
+ this.contents.addIn(path38, value);
22402
22402
  }
22403
22403
  /**
22404
22404
  * Create a new `Alias` node, ensuring that the target `node` has the required anchor.
@@ -22473,14 +22473,14 @@ var init_Document = __esm({
22473
22473
  * Removes a value from the document.
22474
22474
  * @returns `true` if the item was found and removed.
22475
22475
  */
22476
- deleteIn(path39) {
22477
- if (isEmptyPath(path39)) {
22476
+ deleteIn(path38) {
22477
+ if (isEmptyPath(path38)) {
22478
22478
  if (this.contents == null)
22479
22479
  return false;
22480
22480
  this.contents = null;
22481
22481
  return true;
22482
22482
  }
22483
- return assertCollection(this.contents) ? this.contents.deleteIn(path39) : false;
22483
+ return assertCollection(this.contents) ? this.contents.deleteIn(path38) : false;
22484
22484
  }
22485
22485
  /**
22486
22486
  * Returns item at `key`, or `undefined` if not found. By default unwraps
@@ -22495,10 +22495,10 @@ var init_Document = __esm({
22495
22495
  * scalar values from their surrounding node; to disable set `keepScalar` to
22496
22496
  * `true` (collections are always returned intact).
22497
22497
  */
22498
- getIn(path39, keepScalar) {
22499
- if (isEmptyPath(path39))
22498
+ getIn(path38, keepScalar) {
22499
+ if (isEmptyPath(path38))
22500
22500
  return !keepScalar && isScalar(this.contents) ? this.contents.value : this.contents;
22501
- return isCollection(this.contents) ? this.contents.getIn(path39, keepScalar) : void 0;
22501
+ return isCollection(this.contents) ? this.contents.getIn(path38, keepScalar) : void 0;
22502
22502
  }
22503
22503
  /**
22504
22504
  * Checks if the document includes a value with the key `key`.
@@ -22509,10 +22509,10 @@ var init_Document = __esm({
22509
22509
  /**
22510
22510
  * Checks if the document includes a value at `path`.
22511
22511
  */
22512
- hasIn(path39) {
22513
- if (isEmptyPath(path39))
22512
+ hasIn(path38) {
22513
+ if (isEmptyPath(path38))
22514
22514
  return this.contents !== void 0;
22515
- return isCollection(this.contents) ? this.contents.hasIn(path39) : false;
22515
+ return isCollection(this.contents) ? this.contents.hasIn(path38) : false;
22516
22516
  }
22517
22517
  /**
22518
22518
  * Sets a value in this document. For `!!set`, `value` needs to be a
@@ -22529,13 +22529,13 @@ var init_Document = __esm({
22529
22529
  * Sets a value in this document. For `!!set`, `value` needs to be a
22530
22530
  * boolean to add/remove the item from the set.
22531
22531
  */
22532
- setIn(path39, value) {
22533
- if (isEmptyPath(path39)) {
22532
+ setIn(path38, value) {
22533
+ if (isEmptyPath(path38)) {
22534
22534
  this.contents = value;
22535
22535
  } else if (this.contents == null) {
22536
- this.contents = collectionFromPath(this.schema, Array.from(path39), value);
22536
+ this.contents = collectionFromPath(this.schema, Array.from(path38), value);
22537
22537
  } else if (assertCollection(this.contents)) {
22538
- this.contents.setIn(path39, value);
22538
+ this.contents.setIn(path38, value);
22539
22539
  }
22540
22540
  }
22541
22541
  /**
@@ -24440,15 +24440,15 @@ function visit2(cst, visitor) {
24440
24440
  cst = { start: cst.start, value: cst.value };
24441
24441
  _visit(Object.freeze([]), cst, visitor);
24442
24442
  }
24443
- function _visit(path39, item, visitor) {
24444
- let ctrl = visitor(item, path39);
24443
+ function _visit(path38, item, visitor) {
24444
+ let ctrl = visitor(item, path38);
24445
24445
  if (typeof ctrl === "symbol")
24446
24446
  return ctrl;
24447
24447
  for (const field of ["key", "value"]) {
24448
24448
  const token = item[field];
24449
24449
  if (token && "items" in token) {
24450
24450
  for (let i = 0; i < token.items.length; ++i) {
24451
- const ci = _visit(Object.freeze(path39.concat([[field, i]])), token.items[i], visitor);
24451
+ const ci = _visit(Object.freeze(path38.concat([[field, i]])), token.items[i], visitor);
24452
24452
  if (typeof ci === "number")
24453
24453
  i = ci - 1;
24454
24454
  else if (ci === BREAK2)
@@ -24459,10 +24459,10 @@ function _visit(path39, item, visitor) {
24459
24459
  }
24460
24460
  }
24461
24461
  if (typeof ctrl === "function" && field === "key")
24462
- ctrl = ctrl(item, path39);
24462
+ ctrl = ctrl(item, path38);
24463
24463
  }
24464
24464
  }
24465
- return typeof ctrl === "function" ? ctrl(item, path39) : ctrl;
24465
+ return typeof ctrl === "function" ? ctrl(item, path38) : ctrl;
24466
24466
  }
24467
24467
  var BREAK2, SKIP2, REMOVE2;
24468
24468
  var init_cst_visit = __esm({
@@ -24473,9 +24473,9 @@ var init_cst_visit = __esm({
24473
24473
  visit2.BREAK = BREAK2;
24474
24474
  visit2.SKIP = SKIP2;
24475
24475
  visit2.REMOVE = REMOVE2;
24476
- visit2.itemAtPath = (cst, path39) => {
24476
+ visit2.itemAtPath = (cst, path38) => {
24477
24477
  let item = cst;
24478
- for (const [field, index] of path39) {
24478
+ for (const [field, index] of path38) {
24479
24479
  const tok = item?.[field];
24480
24480
  if (tok && "items" in tok) {
24481
24481
  item = tok.items[index];
@@ -24484,9 +24484,9 @@ var init_cst_visit = __esm({
24484
24484
  }
24485
24485
  return item;
24486
24486
  };
24487
- visit2.parentCollection = (cst, path39) => {
24488
- const parent = visit2.itemAtPath(cst, path39.slice(0, -1));
24489
- const field = path39[path39.length - 1][0];
24487
+ visit2.parentCollection = (cst, path38) => {
24488
+ const parent = visit2.itemAtPath(cst, path38.slice(0, -1));
24489
+ const field = path38[path38.length - 1][0];
24490
24490
  const coll = parent?.[field];
24491
24491
  if (coll && "items" in coll)
24492
24492
  return coll;
@@ -25789,14 +25789,14 @@ var init_parser = __esm({
25789
25789
  case "scalar":
25790
25790
  case "single-quoted-scalar":
25791
25791
  case "double-quoted-scalar": {
25792
- const fs35 = this.flowScalar(this.type);
25792
+ const fs34 = this.flowScalar(this.type);
25793
25793
  if (atNextItem || it.value) {
25794
- map2.items.push({ start, key: fs35, sep: [] });
25794
+ map2.items.push({ start, key: fs34, sep: [] });
25795
25795
  this.onKeyLine = true;
25796
25796
  } else if (it.sep) {
25797
- this.stack.push(fs35);
25797
+ this.stack.push(fs34);
25798
25798
  } else {
25799
- Object.assign(it, { key: fs35, sep: [] });
25799
+ Object.assign(it, { key: fs34, sep: [] });
25800
25800
  this.onKeyLine = true;
25801
25801
  }
25802
25802
  return;
@@ -25924,13 +25924,13 @@ var init_parser = __esm({
25924
25924
  case "scalar":
25925
25925
  case "single-quoted-scalar":
25926
25926
  case "double-quoted-scalar": {
25927
- const fs35 = this.flowScalar(this.type);
25927
+ const fs34 = this.flowScalar(this.type);
25928
25928
  if (!it || it.value)
25929
- fc.items.push({ start: [], key: fs35, sep: [] });
25929
+ fc.items.push({ start: [], key: fs34, sep: [] });
25930
25930
  else if (it.sep)
25931
- this.stack.push(fs35);
25931
+ this.stack.push(fs34);
25932
25932
  else
25933
- Object.assign(it, { key: fs35, sep: [] });
25933
+ Object.assign(it, { key: fs34, sep: [] });
25934
25934
  return;
25935
25935
  }
25936
25936
  case "flow-map-end":
@@ -27301,9 +27301,9 @@ function safeChildPlistName(value) {
27301
27301
  name: file.toLowerCase().endsWith(".plist") ? file : `${file}.plist`
27302
27302
  };
27303
27303
  }
27304
- async function readableSettingsBundle(path39) {
27304
+ async function readableSettingsBundle(path38) {
27305
27305
  try {
27306
- const root = await (0, import_promises.stat)((0, import_node_path.join)(path39, "Root.plist"));
27306
+ const root = await (0, import_promises.stat)((0, import_node_path.join)(path38, "Root.plist"));
27307
27307
  return root.isFile() && root.size <= MAX_PLIST_BYTES;
27308
27308
  } catch {
27309
27309
  return false;
@@ -27348,11 +27348,11 @@ async function settingsBundleFingerprint(bundlePath) {
27348
27348
  return null;
27349
27349
  }
27350
27350
  }
27351
- async function parsePlistRecord(path39) {
27351
+ async function parsePlistRecord(path38) {
27352
27352
  try {
27353
- const metadata = await (0, import_promises.stat)(path39);
27353
+ const metadata = await (0, import_promises.stat)(path38);
27354
27354
  if (!metadata.isFile() || metadata.size > MAX_PLIST_BYTES) return null;
27355
- const source = await (0, import_promises.readFile)(path39, "utf8");
27355
+ const source = await (0, import_promises.readFile)(path38, "utf8");
27356
27356
  const parsed = parsePlistSource(source);
27357
27357
  return isRecord2(parsed) ? parsed : null;
27358
27358
  } catch {
@@ -27698,7 +27698,7 @@ async function tcpPing(port, timeout = TCP_GATE_MS) {
27698
27698
  return null;
27699
27699
  }
27700
27700
  }
27701
- function httpGet(hostname, port, path39, method = "GET", timeout = TIMEOUT_MS, headers = {}) {
27701
+ function httpGet(hostname, port, path38, method = "GET", timeout = TIMEOUT_MS, headers = {}) {
27702
27702
  return new Promise((resolve10) => {
27703
27703
  let settled = false;
27704
27704
  let killing = false;
@@ -27707,7 +27707,7 @@ function httpGet(hostname, port, path39, method = "GET", timeout = TIMEOUT_MS, h
27707
27707
  settled = true;
27708
27708
  resolve10(value);
27709
27709
  };
27710
- const req = import_http.default.request({ hostname, port, path: path39, method, headers }, (res) => {
27710
+ const req = import_http.default.request({ hostname, port, path: path38, method, headers }, (res) => {
27711
27711
  let body = "";
27712
27712
  res.on("data", (c) => body += c.toString());
27713
27713
  const contentType = (() => {
@@ -31835,8 +31835,8 @@ function pickImagesetFile(images) {
31835
31835
  scale: pick.scale === "2x" ? 2 : pick.scale === "3x" ? 3 : 1
31836
31836
  };
31837
31837
  }
31838
- function flatScale(path39) {
31839
- const match = /@([23])x\.[^./]+$/.exec(path39);
31838
+ function flatScale(path38) {
31839
+ const match = /@([23])x\.[^./]+$/.exec(path38);
31840
31840
  return match ? Number(match[1]) : 1;
31841
31841
  }
31842
31842
  function providesNamespace(text3) {
@@ -31863,13 +31863,13 @@ function catalogEntryName(contentsPath, kind, readText2) {
31863
31863
  }
31864
31864
  return segments.join("/");
31865
31865
  }
31866
- function isFlatResourceImage(path39) {
31867
- return path39.split("/").includes("Resources") && RASTER_EXTENSIONS.has(extOf(path39));
31866
+ function isFlatResourceImage(path38) {
31867
+ return path38.split("/").includes("Resources") && RASTER_EXTENSIONS.has(extOf(path38));
31868
31868
  }
31869
31869
  function enumerateBundleImages(paths, readText2) {
31870
31870
  const table = [];
31871
31871
  const seen = /* @__PURE__ */ new Set();
31872
- const catalogs = paths.filter((path39) => baseOf(path39) === "Contents.json");
31872
+ const catalogs = paths.filter((path38) => baseOf(path38) === "Contents.json");
31873
31873
  for (const contentsPath of catalogs) {
31874
31874
  const name2 = catalogEntryName(contentsPath, ".imageset", readText2);
31875
31875
  if (name2 === null || seen.has(name2)) continue;
@@ -31890,12 +31890,12 @@ function enumerateBundleImages(paths, readText2) {
31890
31890
  seen.add(name2);
31891
31891
  table.push({ name: name2, file: `${dir}/${pick.filename}`, scale: pick.scale });
31892
31892
  }
31893
- for (const path39 of paths) {
31894
- if (!isFlatResourceImage(path39)) continue;
31895
- const name2 = baseOf(path39).slice(0, -extOf(path39).length);
31893
+ for (const path38 of paths) {
31894
+ if (!isFlatResourceImage(path38)) continue;
31895
+ const name2 = baseOf(path38).slice(0, -extOf(path38).length);
31896
31896
  if (name2 === "" || seen.has(name2)) continue;
31897
31897
  seen.add(name2);
31898
- table.push({ name: name2, file: path39, scale: flatScale(path39) });
31898
+ table.push({ name: name2, file: path38, scale: flatScale(path38) });
31899
31899
  }
31900
31900
  return table;
31901
31901
  }
@@ -31924,7 +31924,7 @@ function colorsetValue(color) {
31924
31924
  }
31925
31925
  function enumerateBundleColors(paths, readText2) {
31926
31926
  const table = {};
31927
- for (const contentsPath of paths.filter((path39) => baseOf(path39) === "Contents.json")) {
31927
+ for (const contentsPath of paths.filter((path38) => baseOf(path38) === "Contents.json")) {
31928
31928
  const name2 = catalogEntryName(contentsPath, ".colorset", readText2);
31929
31929
  if (name2 === null || name2 in table) continue;
31930
31930
  let colors;
@@ -31988,8 +31988,8 @@ function axisExtremes(points) {
31988
31988
  function pathBounds(d) {
31989
31989
  const xs = [];
31990
31990
  const ys = [];
31991
- for (const path39 of d)
31992
- (0, import_svgpath.default)(path39).abs().unshort().unarc().iterate((segment, _index, x, y) => {
31991
+ for (const path38 of d)
31992
+ (0, import_svgpath.default)(path38).abs().unshort().unarc().iterate((segment, _index, x, y) => {
31993
31993
  const [command, ...args] = segment;
31994
31994
  if (command === "M" || command === "L") {
31995
31995
  xs.push(Number(args[0]));
@@ -32016,7 +32016,7 @@ function guide(svg, id, axis) {
32016
32016
  }
32017
32017
  function enumerateBundleSymbols(paths, readText2) {
32018
32018
  const table = {};
32019
- for (const contentsPath of paths.filter((path39) => baseOf(path39) === "Contents.json")) {
32019
+ for (const contentsPath of paths.filter((path38) => baseOf(path38) === "Contents.json")) {
32020
32020
  const name2 = catalogEntryName(contentsPath, ".symbolset", readText2);
32021
32021
  if (name2 === null || name2 in table) continue;
32022
32022
  let symbols;
@@ -32049,8 +32049,8 @@ function enumerateBundleSymbols(paths, readText2) {
32049
32049
  viewBox: "0 0 24 24",
32050
32050
  advance,
32051
32051
  box: [12 - advance / 2, 12 - tall / 2, advance, tall],
32052
- layers: d.map((path39) => ({
32053
- d: (0, import_svgpath.default)(path39).abs().scale(scale).translate(translateX, translateY).round(3).toString()
32052
+ layers: d.map((path38) => ({
32053
+ d: (0, import_svgpath.default)(path38).abs().scale(scale).translate(translateX, translateY).round(3).toString()
32054
32054
  }))
32055
32055
  };
32056
32056
  }
@@ -32060,7 +32060,7 @@ function enumerateBundleJson(paths) {
32060
32060
  const found = [];
32061
32061
  const seen = /* @__PURE__ */ new Set();
32062
32062
  const ordered = [...paths].filter(
32063
- (path39) => path39.split("/").includes("Resources") && path39.split("/").every((segment) => segment !== "" && segment !== "..") && (extOf(path39) === ".json" || extOf(path39) === ".xcstrings")
32063
+ (path38) => path38.split("/").includes("Resources") && path38.split("/").every((segment) => segment !== "" && segment !== "..") && (extOf(path38) === ".json" || extOf(path38) === ".xcstrings")
32064
32064
  ).sort((a, b) => {
32065
32065
  const aDepth = a.split("/").length;
32066
32066
  const bDepth = b.split("/").length;
@@ -33359,10 +33359,10 @@ function emitSwiftStandin(graphs, options) {
33359
33359
  owners.push(...physical.map(() => current));
33360
33360
  };
33361
33361
  const scoped = (body) => (symbol, ...rest) => {
33362
- const path39 = pathOf(symbol);
33363
- if (omit.has(path39)) return void skipped.push({ path: path39, reason: omit.get(path39) });
33362
+ const path38 = pathOf(symbol);
33363
+ if (omit.has(path38)) return void skipped.push({ path: path38, reason: omit.get(path38) });
33364
33364
  const previous = current;
33365
- current = path39;
33365
+ current = path38;
33366
33366
  try {
33367
33367
  body(symbol, ...rest);
33368
33368
  } finally {
@@ -33382,14 +33382,14 @@ function emitSwiftStandin(graphs, options) {
33382
33382
  const access = (symbol, openOwner) => symbol.accessLevel === "open" && openOwner ? "open" : "public";
33383
33383
  const emitMember = scoped(
33384
33384
  (member, indent, context) => {
33385
- const path39 = pathOf(member);
33385
+ const path38 = pathOf(member);
33386
33386
  if (TYPE_KINDS.has(member.kind.identifier)) {
33387
33387
  emitType(member, indent);
33388
33388
  return;
33389
33389
  }
33390
33390
  if (member.kind.identifier === "swift.enum.case") return;
33391
33391
  if (!MEMBER_KINDS.has(member.kind.identifier)) {
33392
- skipped.push({ path: path39, reason: `unhandled ${member.kind.identifier}` });
33392
+ skipped.push({ path: path38, reason: `unhandled ${member.kind.identifier}` });
33393
33393
  return;
33394
33394
  }
33395
33395
  const { 1: attrs, 2: rest } = LEADING_ATTRS.exec(text(member));
@@ -33403,12 +33403,12 @@ function emitSwiftStandin(graphs, options) {
33403
33403
  const final = context.inClass && flags.has("final") ? "final " : "";
33404
33404
  const mutating = flags.has("mutating") ? "mutating " : flags.has("nonmutating") ? "nonmutating " : "";
33405
33405
  let core = `${flags.has("convenience") ? "convenience " : ""}${modifiers[2]}`;
33406
- const override = context.inClass && !options.plain?.has(path39) && (flags.has("override") || overrides.has(member.identifier.precise) || options.forcedOverride?.has(path39) || isObjC(member) && path39.endsWith(".init()")) ? "override " : "";
33406
+ const override = context.inClass && !options.plain?.has(path38) && (flags.has("override") || overrides.has(member.identifier.precise) || options.forcedOverride?.has(path38) || isObjC(member) && path38.endsWith(".init()")) ? "override " : "";
33407
33407
  const head = `${indent}${attrs}${access(member, context.openOwner)} ${required ? "required " : ""}${final}${override}${mutating}`;
33408
- const measured = behavior.get(path39);
33409
- if (measured) used.add(path39);
33408
+ const measured = behavior.get(path38);
33409
+ if (measured) used.add(path38);
33410
33410
  const overloadBody = /\basync\b/.test(core) ? measured?.asyncBody : /\bResult</.test(core) ? measured?.resultBody : void 0;
33411
- const body = overloadBody ?? measured?.body ?? trap(path39);
33411
+ const body = overloadBody ?? measured?.body ?? trap(path38);
33412
33412
  switch (member.kind.identifier) {
33413
33413
  case "swift.property":
33414
33414
  case "swift.type.property":
@@ -33429,7 +33429,7 @@ function emitSwiftStandin(graphs, options) {
33429
33429
  return;
33430
33430
  }
33431
33431
  emit(
33432
- `${head}${computed} { get${effects} { ${body} }${settable && !effects ? ` ${parsed.nonmutating ? "nonmutating " : ""}set { ${measured?.set ?? trap(path39)} }` : ""} }`
33432
+ `${head}${computed} { get${effects} { ${body} }${settable && !effects ? ` ${parsed.nonmutating ? "nonmutating " : ""}set { ${measured?.set ?? trap(path38)} }` : ""} }`
33433
33433
  );
33434
33434
  return;
33435
33435
  }
@@ -33482,7 +33482,7 @@ function emitSwiftStandin(graphs, options) {
33482
33482
  };
33483
33483
  const emitType = scoped(
33484
33484
  (symbol, indent) => {
33485
- const path39 = pathOf(symbol);
33485
+ const path38 = pathOf(symbol);
33486
33486
  const id = symbol.identifier.precise;
33487
33487
  const inner = `${indent} `;
33488
33488
  switch (symbol.kind.identifier) {
@@ -33494,10 +33494,10 @@ function emitSwiftStandin(graphs, options) {
33494
33494
  case "swift.class": {
33495
33495
  const shape = header(symbol, "class", indent);
33496
33496
  if (!shape)
33497
- return void skipped.push({ path: path39, reason: `unparsed class ${text(symbol)}` });
33498
- const parent = options.superclasses?.get(path39) ?? superclass.get(id);
33497
+ return void skipped.push({ path: path38, reason: `unparsed class ${text(symbol)}` });
33498
+ const parent = options.superclasses?.get(path38) ?? superclass.get(id);
33499
33499
  const blocked = classBlocked(id);
33500
- if (blocked) return void skipped.push({ path: path39, reason: blocked });
33500
+ if (blocked) return void skipped.push({ path: path38, reason: blocked });
33501
33501
  const ancestors = /* @__PURE__ */ new Set();
33502
33502
  for (let at = superId.get(id); at; at = superId.get(at))
33503
33503
  for (const name2 of conforms.get(at) ?? []) ancestors.add(name2);
@@ -33513,9 +33513,9 @@ function emitSwiftStandin(graphs, options) {
33513
33513
  `${indent}${shape.attrs}${open ? "open" : "public"} class ${shape.name}${shape.generics}${list2.length ? `: ${list2.join(", ")}` : ""}${selfConforming(shape.where)} {`
33514
33514
  );
33515
33515
  const members = membersOf(id);
33516
- const extra = options.behavior?.get(path39)?.members;
33516
+ const extra = options.behavior?.get(path38)?.members;
33517
33517
  if (extra) {
33518
- used.add(path39);
33518
+ used.add(path38);
33519
33519
  emit(`${inner}${extra}`);
33520
33520
  }
33521
33521
  for (const member of members)
@@ -33567,13 +33567,13 @@ function emitSwiftStandin(graphs, options) {
33567
33567
  continue;
33568
33568
  have.add(witnessKey(member));
33569
33569
  have.add(sideLeaf(member));
33570
- emitWitness(member, inner, path39);
33570
+ emitWitness(member, inner, path38);
33571
33571
  }
33572
33572
  }
33573
33573
  const coder = members.some((member) => leaf(member) === "init(coder:)");
33574
33574
  if (designated && !coder && externalRoot(id) !== "NSObject" && externalRoot(id) !== null)
33575
33575
  emit(
33576
- `${inner}public required init?(coder: NSCoder) { ${trap(`${path39}.init(coder:)`)} }`
33576
+ `${inner}public required init?(coder: NSCoder) { ${trap(`${path38}.init(coder:)`)} }`
33577
33577
  );
33578
33578
  emit(`${indent}}`);
33579
33579
  return;
@@ -33581,7 +33581,7 @@ function emitSwiftStandin(graphs, options) {
33581
33581
  case "swift.struct": {
33582
33582
  const shape = header(symbol, "struct", indent);
33583
33583
  if (!shape)
33584
- return void skipped.push({ path: path39, reason: `unparsed struct ${text(symbol)}` });
33584
+ return void skipped.push({ path: path38, reason: `unparsed struct ${text(symbol)}` });
33585
33585
  const members = membersOf(id);
33586
33586
  const raw2 = rawType(members);
33587
33587
  const list2 = inheritance(id);
@@ -33613,7 +33613,7 @@ function emitSwiftStandin(graphs, options) {
33613
33613
  case "swift.enum": {
33614
33614
  const shape = header(symbol, "enum", indent);
33615
33615
  if (!shape)
33616
- return void skipped.push({ path: path39, reason: `unparsed enum ${text(symbol)}` });
33616
+ return void skipped.push({ path: path38, reason: `unparsed enum ${text(symbol)}` });
33617
33617
  const members = membersOf(id);
33618
33618
  const raw2 = rawType(members);
33619
33619
  const cases = members.filter(
@@ -33622,7 +33622,7 @@ function emitSwiftStandin(graphs, options) {
33622
33622
  const missing = raw2 ? cases.filter((member) => !values.has(member.identifier.precise)) : [];
33623
33623
  if (raw2 && isObjC(symbol) && missing.length > 0)
33624
33624
  return void skipped.push({
33625
- path: path39,
33625
+ path: path38,
33626
33626
  reason: `no header value for ${missing.map(leaf).join(", ")}`
33627
33627
  });
33628
33628
  const list2 = inheritance(id, raw2 ?? void 0).filter(
@@ -33662,7 +33662,7 @@ function emitSwiftStandin(graphs, options) {
33662
33662
  const shape = header(symbol, "protocol", indent);
33663
33663
  if (!shape)
33664
33664
  return void skipped.push({
33665
- path: path39,
33665
+ path: path38,
33666
33666
  reason: `unparsed protocol ${text(symbol)}`
33667
33667
  });
33668
33668
  const list2 = [...isObjC(symbol) ? ["AnyObject"] : [], ...inheritance(id)];
@@ -33687,7 +33687,7 @@ function emitSwiftStandin(graphs, options) {
33687
33687
  }
33688
33688
  emit(`${indent}}`);
33689
33689
  if (defaults.length > 0) {
33690
- emit(`${indent}extension ${path39} {`);
33690
+ emit(`${indent}extension ${path38} {`);
33691
33691
  for (const member of defaults) {
33692
33692
  const decl = text(member);
33693
33693
  if (optional.has(member.identifier.precise) && member.kind.identifier === "swift.method" && !decl.replace(/\([^)]*\)/g, "").includes("->") && !/ async\b/.test(decl))
@@ -33733,7 +33733,7 @@ function emitSwiftStandin(graphs, options) {
33733
33733
  return init ? /rawValue:\s*([^)]+)\)/.exec(text(init))?.[1]?.trim() ?? null : null;
33734
33734
  };
33735
33735
  const emitGlobal = scoped((symbol) => {
33736
- const path39 = pathOf(symbol);
33736
+ const path38 = pathOf(symbol);
33737
33737
  const kind = symbol.kind.identifier;
33738
33738
  if (kind === "swift.func" || kind === "swift.func.op" || kind === "swift.method" || kind === "swift.type.method") {
33739
33739
  const { 1: attrs, 2: rest } = LEADING_ATTRS.exec(text(symbol));
@@ -33744,17 +33744,17 @@ function emitSwiftStandin(graphs, options) {
33744
33744
  if (fix && !/^(?:prefix|infix|postfix)\b/.test(spelled))
33745
33745
  spelled = `${fix} ${spelled}`;
33746
33746
  }
33747
- emit(`${attrs}public ${spelled} { ${trap(path39)} }`);
33747
+ emit(`${attrs}public ${spelled} { ${trap(path38)} }`);
33748
33748
  } else if (kind === "swift.var") {
33749
33749
  const parsed = splitAccessors(text(symbol).replace(/^let /, "var "));
33750
- const measured = behavior.get(path39);
33751
- if (measured) used.add(path39);
33752
- emit(`public ${parsed.decl} { ${measured?.body ?? trap(path39)} }`);
33753
- } else skipped.push({ path: path39, reason: `unhandled top-level ${kind}` });
33750
+ const measured = behavior.get(path38);
33751
+ if (measured) used.add(path38);
33752
+ emit(`public ${parsed.decl} { ${measured?.body ?? trap(path38)} }`);
33753
+ } else skipped.push({ path: path38, reason: `unhandled top-level ${kind}` });
33754
33754
  });
33755
33755
  const roots = [...byId.values()].filter((symbol) => !owner.has(symbol.identifier.precise) && !unavailable(symbol)).sort((a, b) => pathOf(a).localeCompare(pathOf(b)));
33756
33756
  for (const symbol of roots) {
33757
- const path39 = pathOf(symbol);
33757
+ const path38 = pathOf(symbol);
33758
33758
  if (TYPE_KINDS.has(symbol.kind.identifier)) emitType(symbol, "");
33759
33759
  else emitGlobal(symbol);
33760
33760
  }
@@ -33795,9 +33795,9 @@ function emitSwiftStandin(graphs, options) {
33795
33795
  ...imports.map((name2) => `import ${name2}`),
33796
33796
  ""
33797
33797
  ];
33798
- for (const path39 of behavior.keys())
33799
- if (!used.has(path39))
33800
- skipped.push({ path: path39, reason: "behavior names no emitted declaration" });
33798
+ for (const path38 of behavior.keys())
33799
+ if (!used.has(path38))
33800
+ skipped.push({ path: path38, reason: "behavior names no emitted declaration" });
33801
33801
  return {
33802
33802
  source: `${[...banner, ...lines].join("\n")}
33803
33803
  `,
@@ -33883,7 +33883,7 @@ var init_swift_standin_emit = __esm({
33883
33883
  sideLeaf = (symbol) => `${symbol.kind.identifier.startsWith("swift.type.") ? "type" : "instance"}|leaf|${leaf(symbol)}`;
33884
33884
  isObjC = (symbol) => symbol.identifier.precise.startsWith("c:");
33885
33885
  synthesizedEquality = (symbol, conforms) => conforms.includes("Hashable") ? ["==(_:_:)", "hash(into:)", "hashValue"].includes(leaf(symbol)) : conforms.includes("Equatable") && leaf(symbol) === "==(_:_:)";
33886
- trap = (path39) => `fatalError("${path39} is a binary framework peach cannot run")`;
33886
+ trap = (path38) => `fatalError("${path38} is a binary framework peach cannot run")`;
33887
33887
  KEYWORDS = /* @__PURE__ */ new Set([
33888
33888
  "Type",
33889
33889
  "Protocol",
@@ -36601,9 +36601,6 @@ function nativeTargets(project) {
36601
36601
  }
36602
36602
  return refs;
36603
36603
  }
36604
- function listXcodeAppTargets(xcodeprojOrWorkspace) {
36605
- return workspaceProjects(xcodeprojOrWorkspace).projects.flatMap(nativeTargets).filter((ref) => ref.target.productType === APPLICATION).map((ref) => str(ref.target.name) ?? ref.id);
36606
- }
36607
36604
  function readXcodeAppTarget(input, targetName) {
36608
36605
  const xcodeprojOrWorkspace = import_node_fs18.default.realpathSync(input);
36609
36606
  const workspace = xcodeprojOrWorkspace.endsWith(".xcworkspace") ? xcodeprojOrWorkspace : null;
@@ -38182,8 +38179,8 @@ function sourceEntryPath() {
38182
38179
  return null;
38183
38180
  }
38184
38181
  }
38185
- function isCliEntry(path39) {
38186
- const name2 = (0, import_node_path22.basename)(path39);
38182
+ function isCliEntry(path38) {
38183
+ const name2 = (0, import_node_path22.basename)(path38);
38187
38184
  return name2 === "bin.ts" || name2 === "bin.js";
38188
38185
  }
38189
38186
  function rnxSelfInvocation() {
@@ -43098,8 +43095,8 @@ function metroIosAssetDestRelatives(httpServerLocation, filename) {
43098
43095
  }
43099
43096
  const out = [];
43100
43097
  for (const dir of dirs) {
43101
- const path39 = `${dir}/${filename}`;
43102
- if (!out.includes(path39)) out.push(path39);
43098
+ const path38 = `${dir}/${filename}`;
43099
+ if (!out.includes(path38)) out.push(path38);
43103
43100
  }
43104
43101
  if (!out.includes(filename)) out.push(filename);
43105
43102
  return out;
@@ -44063,13 +44060,13 @@ function readFactoryStringLiterals(factory) {
44063
44060
  return literals;
44064
44061
  }
44065
44062
  function normalizeFingerprintLiteral(literal) {
44066
- const path39 = literal.replaceAll("\\\\", "/").replaceAll("\\/", "/");
44063
+ const path38 = literal.replaceAll("\\\\", "/").replaceAll("\\/", "/");
44067
44064
  const nodeModulesMarker = "/node_modules/";
44068
- const nodeModulesIndex = path39.lastIndexOf(nodeModulesMarker);
44065
+ const nodeModulesIndex = path38.lastIndexOf(nodeModulesMarker);
44069
44066
  if (nodeModulesIndex >= 0) {
44070
- return `node_modules/${path39.slice(nodeModulesIndex + nodeModulesMarker.length)}`;
44067
+ return `node_modules/${path38.slice(nodeModulesIndex + nodeModulesMarker.length)}`;
44071
44068
  }
44072
- if ((path39.startsWith("/") || /^[A-Za-z]:\//.test(path39) || path39.startsWith("file:/")) && /\.[cm]?[jt]sx?(?::\d+(?::\d+)?)?$/.test(path39)) {
44069
+ if ((path38.startsWith("/") || /^[A-Za-z]:\//.test(path38) || path38.startsWith("file:/")) && /\.[cm]?[jt]sx?(?::\d+(?::\d+)?)?$/.test(path38)) {
44073
44070
  return null;
44074
44071
  }
44075
44072
  return literal;
@@ -44307,10 +44304,10 @@ function templateAssignment(template, embeddings) {
44307
44304
  if (existingNode !== void 0 && existingNode !== nodeIndex) return null;
44308
44305
  nodesByModuleId.set(moduleId, nodeIndex);
44309
44306
  const node = template.nodes[nodeIndex];
44310
- const path39 = node.landmarkPath ?? `node_modules/${template.packageName}/__rnx_inferred__/${moduleId}.js`;
44307
+ const path38 = node.landmarkPath ?? `node_modules/${template.packageName}/__rnx_inferred__/${moduleId}.js`;
44311
44308
  const existingPath = pathsByModuleId.get(moduleId);
44312
- if (existingPath !== void 0 && existingPath !== path39) return null;
44313
- pathsByModuleId.set(moduleId, path39);
44309
+ if (existingPath !== void 0 && existingPath !== path38) return null;
44310
+ pathsByModuleId.set(moduleId, path38);
44314
44311
  }
44315
44312
  }
44316
44313
  return {
@@ -44472,14 +44469,14 @@ async function inferMetroModuleIdentity(args) {
44472
44469
  const packageClaims = claimsByPackage.values().next().value;
44473
44470
  if (!packageClaims) continue;
44474
44471
  const exactClaims = packageClaims.filter((assignment2) => {
44475
- const path39 = assignment2.pathsByModuleId.get(moduleId);
44476
- return path39 !== void 0 && !path39.includes("/__rnx_inferred__/");
44472
+ const path38 = assignment2.pathsByModuleId.get(moduleId);
44473
+ return path38 !== void 0 && !path38.includes("/__rnx_inferred__/");
44477
44474
  });
44478
44475
  const preferredClaims = exactClaims.length > 0 ? exactClaims : packageClaims;
44479
44476
  const routes = new Set(
44480
44477
  preferredClaims.flatMap((assignment2) => {
44481
- const path39 = assignment2.pathsByModuleId.get(moduleId);
44482
- return path39 ? [metroFingerprintModuleClaimRoute(assignment2.packageName, path39)] : [];
44478
+ const path38 = assignment2.pathsByModuleId.get(moduleId);
44479
+ return path38 ? [metroFingerprintModuleClaimRoute(assignment2.packageName, path38)] : [];
44483
44480
  })
44484
44481
  );
44485
44482
  if (routes.size !== 1) continue;
@@ -44801,11 +44798,11 @@ function detectProject(dir) {
44801
44798
  devCommand: typeof devCommand === "string" ? devCommand : null
44802
44799
  };
44803
44800
  }
44804
- function readProjectMetadata(path39) {
44801
+ function readProjectMetadata(path38) {
44805
44802
  try {
44806
- const info = (0, import_node_fs29.lstatSync)(path39);
44803
+ const info = (0, import_node_fs29.lstatSync)(path38);
44807
44804
  if (!info.isFile() || info.size > 4 * 1024 * 1024) return null;
44808
- return (0, import_node_fs29.readFileSync)(path39, "utf8");
44805
+ return (0, import_node_fs29.readFileSync)(path38, "utf8");
44809
44806
  } catch {
44810
44807
  return null;
44811
44808
  }
@@ -44814,8 +44811,8 @@ function metadataValue(value, key2) {
44814
44811
  if (!value || typeof value !== "object") return void 0;
44815
44812
  return Object.getOwnPropertyDescriptor(value, key2)?.value;
44816
44813
  }
44817
- function readProjectJson(path39) {
44818
- const text3 = readProjectMetadata(path39);
44814
+ function readProjectJson(path38) {
44815
+ const text3 = readProjectMetadata(path38);
44819
44816
  if (text3 === null) return null;
44820
44817
  try {
44821
44818
  const value = JSON.parse(text3);
@@ -48800,11 +48797,11 @@ async function evalInBridge(bridge, code, opts = {}) {
48800
48797
  if (opts.acquireLock) payload.acquireLock = true;
48801
48798
  return bridge.send(payload);
48802
48799
  }
48803
- async function callInBridge(bridge, path39, ...args) {
48804
- return bridge.send({ type: "call", path: path39, args });
48800
+ async function callInBridge(bridge, path38, ...args) {
48801
+ return bridge.send({ type: "call", path: path38, args });
48805
48802
  }
48806
- async function callInBridgeWrite(bridge, path39, ...args) {
48807
- return bridge.send({ type: "call", path: path39, args, acquireLock: true });
48803
+ async function callInBridgeWrite(bridge, path38, ...args) {
48804
+ return bridge.send({ type: "call", path: path38, args, acquireLock: true });
48808
48805
  }
48809
48806
  var import_node_fs32, import_node_path33, import_ws2, PEACH_PLACEMENT_ENV, resolvedWorld, BridgeSimLockedError, DisconnectedSimError, BRIDGE_VALUE_FLAGS_TABLE, BRIDGE_VALUE_FLAGS;
48810
48807
  var init_ws_bridge = __esm({
@@ -48941,8 +48938,8 @@ function getDefaultPortForProtocol(protocol) {
48941
48938
  return protocol === "https:" ? 443 : 80;
48942
48939
  }
48943
48940
  function isBaseServerUrl(url) {
48944
- const path39 = url.pathname || "/";
48945
- return (path39 === "/" || path39 === "") && !url.search && !url.hash;
48941
+ const path38 = url.pathname || "/";
48942
+ return (path38 === "/" || path38 === "") && !url.search && !url.hash;
48946
48943
  }
48947
48944
  async function resolvePortViaServerScan(port) {
48948
48945
  try {
@@ -49243,165 +49240,6 @@ var init_flow_timeout_scale = __esm({
49243
49240
  }
49244
49241
  });
49245
49242
 
49246
- // src/native-firebase-config.ts
49247
- function readNativeFirebaseConfig(projectRoot, platforms = ["ios", "android"]) {
49248
- const result = {};
49249
- let config = {};
49250
- const appJsonPath = import_node_path35.default.join(projectRoot, "app.json");
49251
- const appJson = import_node_fs34.default.existsSync(appJsonPath) ? JSON.parse(import_node_fs34.default.readFileSync(appJsonPath, "utf8")) : null;
49252
- const staticExpo = isRecord(appJson) && (isRecord(appJson.expo) || [appJson.ios, appJson.android].some(
49253
- (value) => isRecord(value) && typeof value.googleServicesFile === "string"
49254
- ));
49255
- const dynamicExpo = [
49256
- "app.config.js",
49257
- "app.config.ts",
49258
- "app.config.cjs",
49259
- "app.config.mjs"
49260
- ].some((name2) => import_node_fs34.default.existsSync(import_node_path35.default.join(projectRoot, name2)));
49261
- if (staticExpo || dynamicExpo) {
49262
- const require4 = (0, import_node_module2.createRequire)(import_node_path35.default.join(projectRoot, "package.json"));
49263
- const configModule = require4("@expo/config");
49264
- if (!isRecord(configModule) || typeof configModule.getConfig !== "function")
49265
- throw new Error("Expo native configuration is unavailable.");
49266
- const resolved = Reflect.apply(configModule.getConfig, configModule, [
49267
- projectRoot,
49268
- { skipSDKVersionRequirement: true }
49269
- ]);
49270
- config = isRecord(resolved) && isRecord(resolved.exp) ? resolved.exp : {};
49271
- }
49272
- const ios = config.ios;
49273
- if (platforms.includes("ios") && (!isRecord(ios) || typeof ios.googleServicesFile !== "string")) {
49274
- const iosRoot = import_node_path35.default.join(projectRoot, "ios");
49275
- if (import_node_fs34.default.existsSync(iosRoot)) {
49276
- const projects2 = import_node_fs34.default.readdirSync(iosRoot, { withFileTypes: true }).filter((entry) => entry.isDirectory() && entry.name.endsWith(".xcodeproj"));
49277
- if (projects2.length > 1)
49278
- throw new Error("native Firebase configuration requires a selected Xcode project");
49279
- if (projects2.length === 1) {
49280
- const xcodeproj = import_node_path35.default.join(iosRoot, projects2[0].name);
49281
- const appTargets = listXcodeAppTargets(xcodeproj);
49282
- if (appTargets.length > 1)
49283
- throw new Error("native Firebase configuration requires a selected app target");
49284
- if (appTargets.length === 1) {
49285
- const app = readXcodeAppTarget(xcodeproj, appTargets[0]);
49286
- const delegates = app.allSources.filter(
49287
- (file) => /^AppDelegate\.(swift|mm|m)$/.test(import_node_path35.default.basename(file))
49288
- );
49289
- const defaultConfigured = delegates.some((file) => {
49290
- const source = import_node_fs34.default.readFileSync(file, "utf8").replace(
49291
- /\/\*[\s\S]*?\*\/|\/\/[^\n]*|"(?:\\.|[^"\\])*"/g,
49292
- (token) => token.startsWith('"') ? '""' : token.replace(/[^\n]/g, " ")
49293
- );
49294
- const launch2 = /(?:\bfunc\s+application\s*\([\s\S]*?didFinishLaunchingWithOptions[\s\S]*?\)\s*->\s*Bool|^-\s*\(BOOL\)\s*application\s*:[\s\S]*?didFinishLaunchingWithOptions[^\{]*)\s*\{/m.exec(
49295
- source
49296
- );
49297
- if (!launch2) return false;
49298
- const body = source.slice(launch2.index + launch2[0].length);
49299
- const configure = /^\s*(?:FirebaseApp\s*\.\s*configure\s*\(\s*\)|\[FIRApp\s+configure\])/m.exec(
49300
- body
49301
- );
49302
- if (!configure) return false;
49303
- const before = body.slice(0, configure.index);
49304
- let depth = 1;
49305
- for (const token of before) {
49306
- if (token === "{") depth += 1;
49307
- if (token === "}") depth -= 1;
49308
- if (depth === 0) return false;
49309
- }
49310
- if (depth !== 1 || /\b(?:return|throw)\b|^\s*#(?:if|elseif|else)/m.test(before))
49311
- throw new Error(
49312
- "native Firebase initialization must be unconditional in the app launch method"
49313
- );
49314
- return true;
49315
- });
49316
- if (defaultConfigured) {
49317
- const resources = app.resources.filter(
49318
- (file) => /^GoogleService-Info\.plist$/.test(import_node_path35.default.basename(file))
49319
- );
49320
- if (resources.length !== 1)
49321
- throw new Error(
49322
- "native Firebase default initialization requires one GoogleService-Info.plist build resource"
49323
- );
49324
- config.ios = {
49325
- googleServicesFile: import_node_path35.default.relative(
49326
- import_node_fs34.default.realpathSync(projectRoot),
49327
- resources[0]
49328
- )
49329
- };
49330
- }
49331
- }
49332
- }
49333
- }
49334
- }
49335
- for (const platform of platforms) {
49336
- const native = config[platform];
49337
- if (!isRecord(native) || typeof native.googleServicesFile !== "string") continue;
49338
- try {
49339
- const source = import_node_fs34.default.readFileSync(
49340
- import_node_path35.default.resolve(projectRoot, native.googleServicesFile),
49341
- "utf8"
49342
- );
49343
- const parsed = platform === "ios" ? parsePlistSource(source) : JSON.parse(source);
49344
- if (!isRecord(parsed)) throw new Error("Invalid Google services file.");
49345
- if (platform === "ios") {
49346
- result[platform] = {
49347
- apiKey: parsed.API_KEY,
49348
- appId: parsed.GOOGLE_APP_ID,
49349
- projectId: parsed.PROJECT_ID,
49350
- databaseURL: parsed.DATABASE_URL,
49351
- gaTrackingId: parsed.TRACKING_ID,
49352
- storageBucket: parsed.STORAGE_BUCKET,
49353
- messagingSenderId: parsed.GCM_SENDER_ID,
49354
- clientId: parsed.CLIENT_ID,
49355
- androidClientID: parsed.ANDROID_CLIENT_ID,
49356
- deepLinkUrlScheme: parsed.REVERSED_CLIENT_ID
49357
- };
49358
- } else {
49359
- const project = isRecord(parsed.project_info) ? parsed.project_info : {};
49360
- const clients = Array.isArray(parsed.client) ? parsed.client : [];
49361
- const client = clients.find((value) => {
49362
- if (!isRecord(value) || !isRecord(value.client_info)) return false;
49363
- const android = value.client_info.android_client_info;
49364
- return isRecord(android) && android.package_name === native.package;
49365
- });
49366
- if (!isRecord(client) || !isRecord(client.client_info))
49367
- throw new Error("No Google services client matches the Android package.");
49368
- const apiKeys = Array.isArray(client.api_key) ? client.api_key : [];
49369
- const apiKey = apiKeys.find(
49370
- (value) => isRecord(value) && typeof value.current_key === "string"
49371
- );
49372
- const oauthClients = Array.isArray(client.oauth_client) ? client.oauth_client : [];
49373
- const oauth = oauthClients.find(
49374
- (value) => isRecord(value) && value.client_type === 3
49375
- );
49376
- result[platform] = {
49377
- apiKey: isRecord(apiKey) ? apiKey.current_key : void 0,
49378
- appId: client.client_info.mobilesdk_app_id,
49379
- projectId: project.project_id,
49380
- databaseURL: project.firebase_url,
49381
- storageBucket: project.storage_bucket,
49382
- messagingSenderId: project.project_number,
49383
- clientId: isRecord(oauth) ? oauth.client_id : void 0
49384
- };
49385
- }
49386
- } catch (error) {
49387
- result[platform] = { error: error instanceof Error ? error.message : String(error) };
49388
- }
49389
- }
49390
- return result;
49391
- }
49392
- var import_node_fs34, import_node_module2, import_node_path35;
49393
- var init_native_firebase_config = __esm({
49394
- "src/native-firebase-config.ts"() {
49395
- "use strict";
49396
- import_node_fs34 = __toESM(require("node:fs"), 1);
49397
- import_node_module2 = require("node:module");
49398
- import_node_path35 = __toESM(require("node:path"), 1);
49399
- init_is_record();
49400
- init_plist();
49401
- init_xcode_project();
49402
- }
49403
- });
49404
-
49405
49243
  // src/profiles.ts
49406
49244
  function normalizeProfileId(input) {
49407
49245
  const id = input.trim();
@@ -49509,59 +49347,59 @@ var init_profiles = __esm({
49509
49347
  // cli/app-catalog.ts
49510
49348
  function listDir(dir) {
49511
49349
  try {
49512
- return import_node_fs35.default.readdirSync(dir, { withFileTypes: true });
49350
+ return import_node_fs34.default.readdirSync(dir, { withFileTypes: true });
49513
49351
  } catch {
49514
49352
  return [];
49515
49353
  }
49516
49354
  }
49517
49355
  function readText(file) {
49518
49356
  try {
49519
- return import_node_fs35.default.readFileSync(file, "utf8");
49357
+ return import_node_fs34.default.readFileSync(file, "utf8");
49520
49358
  } catch {
49521
49359
  return null;
49522
49360
  }
49523
49361
  }
49524
49362
  function catalogFiles(dir, found) {
49525
49363
  for (const entry of listDir(dir)) {
49526
- const full = import_node_path36.default.join(dir, entry.name);
49364
+ const full = import_node_path35.default.join(dir, entry.name);
49527
49365
  if (entry.isDirectory()) catalogFiles(full, found);
49528
49366
  else if (entry.name === "Contents.json") found.push(full);
49529
49367
  }
49530
49368
  }
49531
49369
  function discoverAppCatalog(appDir) {
49532
- const iosDir = import_node_path36.default.join(appDir, "ios");
49370
+ const iosDir = import_node_path35.default.join(appDir, "ios");
49533
49371
  const target = listDir(iosDir).find(
49534
- (entry) => entry.isDirectory() && entry.name !== "Pods" && listDir(import_node_path36.default.join(iosDir, entry.name)).some(
49372
+ (entry) => entry.isDirectory() && entry.name !== "Pods" && listDir(import_node_path35.default.join(iosDir, entry.name)).some(
49535
49373
  (file) => /^AppDelegate\.(swift|mm|m)$/.test(file.name)
49536
49374
  )
49537
49375
  );
49538
49376
  if (!target) return null;
49539
- const targetDir = import_node_path36.default.join(iosDir, target.name);
49377
+ const targetDir = import_node_path35.default.join(iosDir, target.name);
49540
49378
  const files2 = [];
49541
49379
  for (const entry of listDir(targetDir)) {
49542
49380
  if (entry.isDirectory() && entry.name.endsWith(".xcassets"))
49543
- catalogFiles(import_node_path36.default.join(targetDir, entry.name), files2);
49381
+ catalogFiles(import_node_path35.default.join(targetDir, entry.name), files2);
49544
49382
  }
49545
49383
  const relative3 = files2.map(
49546
- (file) => import_node_path36.default.relative(targetDir, file).split(import_node_path36.default.sep).join(import_node_path36.default.posix.sep)
49384
+ (file) => import_node_path35.default.relative(targetDir, file).split(import_node_path35.default.sep).join(import_node_path35.default.posix.sep)
49547
49385
  );
49548
49386
  const colors = enumerateBundleColors(
49549
49387
  relative3,
49550
- (candidate) => candidate.endsWith("Contents.json") ? readText(import_node_path36.default.join(targetDir, candidate)) : null
49388
+ (candidate) => candidate.endsWith("Contents.json") ? readText(import_node_path35.default.join(targetDir, candidate)) : null
49551
49389
  );
49552
49390
  const pbxproj = listDir(iosDir).find((entry) => entry.name.endsWith(".xcodeproj"));
49553
- const accentName = readText(import_node_path36.default.join(targetDir, "Info.plist"))?.match(PLIST_ACCENT)?.[1] ?? (pbxproj ? readText(import_node_path36.default.join(iosDir, pbxproj.name, "project.pbxproj"))?.match(
49391
+ const accentName = readText(import_node_path35.default.join(targetDir, "Info.plist"))?.match(PLIST_ACCENT)?.[1] ?? (pbxproj ? readText(import_node_path35.default.join(iosDir, pbxproj.name, "project.pbxproj"))?.match(
49554
49392
  ACCENT_BUILD_SETTING
49555
49393
  )?.[1] : void 0) ?? null;
49556
49394
  if (accentName === null && Object.keys(colors).length === 0) return null;
49557
49395
  return { colors, accentName };
49558
49396
  }
49559
- var import_node_fs35, import_node_path36, ACCENT_BUILD_SETTING, PLIST_ACCENT;
49397
+ var import_node_fs34, import_node_path35, ACCENT_BUILD_SETTING, PLIST_ACCENT;
49560
49398
  var init_app_catalog = __esm({
49561
49399
  "cli/app-catalog.ts"() {
49562
49400
  "use strict";
49563
- import_node_fs35 = __toESM(require("node:fs"), 1);
49564
- import_node_path36 = __toESM(require("node:path"), 1);
49401
+ import_node_fs34 = __toESM(require("node:fs"), 1);
49402
+ import_node_path35 = __toESM(require("node:path"), 1);
49565
49403
  init_bundleAssets();
49566
49404
  ACCENT_BUILD_SETTING = /ASSETCATALOG_COMPILER_GLOBAL_ACCENT_COLOR_NAME = "?([^";]+)"?;/;
49567
49405
  PLIST_ACCENT = /<key>NSAccentColorName<\/key>\s*<string>([^<]+)<\/string>/;
@@ -49571,9 +49409,9 @@ var init_app_catalog = __esm({
49571
49409
  // cli/app-project.ts
49572
49410
  function firstNamedFile(dir, names) {
49573
49411
  for (const name2 of names) {
49574
- const candidate = import_node_path37.default.join(dir, name2);
49412
+ const candidate = import_node_path36.default.join(dir, name2);
49575
49413
  try {
49576
- if (import_node_fs36.default.statSync(candidate).isFile()) return candidate;
49414
+ if (import_node_fs35.default.statSync(candidate).isFile()) return candidate;
49577
49415
  } catch {
49578
49416
  }
49579
49417
  }
@@ -49586,24 +49424,24 @@ function findRNXAppConfig(dir) {
49586
49424
  return firstNamedFile(dir, PEACH_APP_CONFIG_NAMES);
49587
49425
  }
49588
49426
  function resolveAppProject(projectRoot) {
49589
- const appDir = import_node_path37.default.resolve(projectRoot);
49427
+ const appDir = import_node_path36.default.resolve(projectRoot);
49590
49428
  try {
49591
- if (!import_node_fs36.default.statSync(appDir).isDirectory()) return null;
49429
+ if (!import_node_fs35.default.statSync(appDir).isDirectory()) return null;
49592
49430
  } catch {
49593
49431
  return null;
49594
49432
  }
49595
49433
  const configPath = findRNXAppConfig(appDir);
49596
- if (!configPath && !findExpoAppConfig(appDir) && !import_node_fs36.default.existsSync(import_node_path37.default.join(appDir, "package.json"))) {
49434
+ if (!configPath && !findExpoAppConfig(appDir) && !import_node_fs35.default.existsSync(import_node_path36.default.join(appDir, "package.json"))) {
49597
49435
  return null;
49598
49436
  }
49599
49437
  return { appDir, configPath };
49600
49438
  }
49601
- var import_node_fs36, import_node_path37, EXPO_APP_CONFIG_NAMES, PEACH_APP_CONFIG_NAMES;
49439
+ var import_node_fs35, import_node_path36, EXPO_APP_CONFIG_NAMES, PEACH_APP_CONFIG_NAMES;
49602
49440
  var init_app_project = __esm({
49603
49441
  "cli/app-project.ts"() {
49604
49442
  "use strict";
49605
- import_node_fs36 = __toESM(require("node:fs"), 1);
49606
- import_node_path37 = __toESM(require("node:path"), 1);
49443
+ import_node_fs35 = __toESM(require("node:fs"), 1);
49444
+ import_node_path36 = __toESM(require("node:path"), 1);
49607
49445
  EXPO_APP_CONFIG_NAMES = [
49608
49446
  "app.config.js",
49609
49447
  "app.config.ts",
@@ -49626,12 +49464,12 @@ function resolveFileEntries(entries, configDir) {
49626
49464
  return Object.fromEntries(
49627
49465
  Object.entries(entries).map(([name2, resolution]) => [
49628
49466
  name2,
49629
- resolution && typeof resolution === "object" && "file" in resolution && typeof resolution.file === "string" ? { ...resolution, file: import_node_path38.default.resolve(configDir, resolution.file) } : resolution
49467
+ resolution && typeof resolution === "object" && "file" in resolution && typeof resolution.file === "string" ? { ...resolution, file: import_node_path37.default.resolve(configDir, resolution.file) } : resolution
49630
49468
  ])
49631
49469
  );
49632
49470
  }
49633
49471
  function resolveConfigReplacementFiles(config, configPath) {
49634
- const configDir = import_node_path38.default.dirname(configPath);
49472
+ const configDir = import_node_path37.default.dirname(configPath);
49635
49473
  return {
49636
49474
  ...config,
49637
49475
  modules: resolveFileEntries(config.modules, configDir),
@@ -49666,11 +49504,11 @@ async function resolveRNXAppConfig(startDir = process.cwd()) {
49666
49504
  const project = resolveAppProject(startDir);
49667
49505
  return { project, config: await loadRNXAppConfig(project) };
49668
49506
  }
49669
- var import_node_path38, import_jiti;
49507
+ var import_node_path37, import_jiti;
49670
49508
  var init_app_config = __esm({
49671
49509
  "cli/app-config.ts"() {
49672
49510
  "use strict";
49673
- import_node_path38 = __toESM(require("node:path"), 1);
49511
+ import_node_path37 = __toESM(require("node:path"), 1);
49674
49512
  import_jiti = require("jiti");
49675
49513
  init_config();
49676
49514
  init_config();
@@ -49730,13 +49568,13 @@ function discoverNativeLinkedAppFontPaths(opts) {
49730
49568
  scannedFontDirectories++;
49731
49569
  let entries;
49732
49570
  try {
49733
- entries = import_node_fs37.default.readdirSync(current.dir, { withFileTypes: true });
49571
+ entries = import_node_fs36.default.readdirSync(current.dir, { withFileTypes: true });
49734
49572
  } catch {
49735
49573
  continue;
49736
49574
  }
49737
49575
  for (const entry of entries) {
49738
49576
  if (entry.isSymbolicLink()) continue;
49739
- const fullPath = import_node_path39.default.join(current.dir, entry.name);
49577
+ const fullPath = import_node_path38.default.join(current.dir, entry.name);
49740
49578
  if (entry.isDirectory()) {
49741
49579
  if (current.depth < 4 && pending.length < 64 && !entry.name.startsWith(".")) {
49742
49580
  pending.push({ dir: fullPath, depth: current.depth + 1 });
@@ -49744,15 +49582,15 @@ function discoverNativeLinkedAppFontPaths(opts) {
49744
49582
  continue;
49745
49583
  }
49746
49584
  if (!entry.isFile() || !/\.(ttf|otf|woff|woff2)$/i.test(entry.name)) continue;
49747
- const relative3 = import_node_path39.default.relative(root, fullPath).split(import_node_path39.default.sep).join("/");
49748
- fontPaths.push(import_node_path39.default.posix.join(metroPathPrefix, relative3));
49585
+ const relative3 = import_node_path38.default.relative(root, fullPath).split(import_node_path38.default.sep).join("/");
49586
+ fontPaths.push(import_node_path38.default.posix.join(metroPathPrefix, relative3));
49749
49587
  if (fontPaths.length >= 256) break;
49750
49588
  }
49751
49589
  }
49752
49590
  };
49753
49591
  try {
49754
49592
  const packageJson = JSON.parse(
49755
- import_node_fs37.default.readFileSync(import_node_path39.default.join(selectedAppDir, "package.json"), "utf8")
49593
+ import_node_fs36.default.readFileSync(import_node_path38.default.join(selectedAppDir, "package.json"), "utf8")
49756
49594
  );
49757
49595
  const dependencyNames = /* @__PURE__ */ new Set();
49758
49596
  for (const field of ["dependencies", "devDependencies", "optionalDependencies"]) {
@@ -49767,32 +49605,32 @@ function discoverNativeLinkedAppFontPaths(opts) {
49767
49605
  const config = Reflect.get(packageJson, "reactNativeVectorIcons");
49768
49606
  const configuredFontDir = config && typeof config === "object" ? Reflect.get(config, "fontDir") : null;
49769
49607
  const configuredDir = typeof configuredFontDir === "string" ? configuredFontDir : "rnvi-fonts";
49770
- const root = import_node_path39.default.resolve(selectedAppDir, configuredDir);
49771
- const relativeRoot = import_node_path39.default.relative(selectedAppDir, root);
49772
- if (!relativeRoot.startsWith("..") && !import_node_path39.default.isAbsolute(relativeRoot)) {
49773
- collectFontFiles(root, relativeRoot.split(import_node_path39.default.sep).join("/"));
49608
+ const root = import_node_path38.default.resolve(selectedAppDir, configuredDir);
49609
+ const relativeRoot = import_node_path38.default.relative(selectedAppDir, root);
49610
+ if (!relativeRoot.startsWith("..") && !import_node_path38.default.isAbsolute(relativeRoot)) {
49611
+ collectFontFiles(root, relativeRoot.split(import_node_path38.default.sep).join("/"));
49774
49612
  }
49775
- const bundleDir = import_node_path39.default.posix.dirname(opts.bundleUrl ? new URL(opts.bundleUrl).pathname : "/").replace(/^\/+/, "");
49776
- const appRelativeDir = bundleDir.split("/").join(import_node_path39.default.sep);
49613
+ const bundleDir = import_node_path38.default.posix.dirname(opts.bundleUrl ? new URL(opts.bundleUrl).pathname : "/").replace(/^\/+/, "");
49614
+ const appRelativeDir = bundleDir.split("/").join(import_node_path38.default.sep);
49777
49615
  const metroRootCandidates = [selectedAppDir];
49778
- if (bundleDir && selectedAppDir.endsWith(import_node_path39.default.sep + appRelativeDir)) {
49616
+ if (bundleDir && selectedAppDir.endsWith(import_node_path38.default.sep + appRelativeDir)) {
49779
49617
  metroRootCandidates.push(selectedAppDir.slice(0, -appRelativeDir.length - 1));
49780
49618
  }
49781
- const vectorIconRequire = (0, import_node_module3.createRequire)(import_node_path39.default.join(selectedAppDir, "package.json"));
49619
+ const vectorIconRequire = (0, import_node_module2.createRequire)(import_node_path38.default.join(selectedAppDir, "package.json"));
49782
49620
  for (const dependencyName of vectorIconDependencies) {
49783
49621
  try {
49784
49622
  const entryPath = vectorIconRequire.resolve(dependencyName);
49785
- const dependencyPath = dependencyName.split("/").join(import_node_path39.default.sep);
49786
- const marker = `${import_node_path39.default.sep}node_modules${import_node_path39.default.sep}${dependencyPath}${import_node_path39.default.sep}`;
49623
+ const dependencyPath = dependencyName.split("/").join(import_node_path38.default.sep);
49624
+ const marker = `${import_node_path38.default.sep}node_modules${import_node_path38.default.sep}${dependencyPath}${import_node_path38.default.sep}`;
49787
49625
  const markerIndex = entryPath.lastIndexOf(marker);
49788
49626
  if (markerIndex === -1) continue;
49789
49627
  const packageRoot = entryPath.slice(0, markerIndex + marker.length - 1);
49790
49628
  const fontsDir = dependencyName === "react-native-vector-icons" ? "Fonts" : "fonts";
49791
- const fontsRoot = import_node_path39.default.join(packageRoot, fontsDir);
49629
+ const fontsRoot = import_node_path38.default.join(packageRoot, fontsDir);
49792
49630
  for (const metroRoot of metroRootCandidates) {
49793
49631
  collectFontFiles(
49794
49632
  fontsRoot,
49795
- import_node_path39.default.relative(metroRoot, fontsRoot).split(import_node_path39.default.sep).join("/")
49633
+ import_node_path38.default.relative(metroRoot, fontsRoot).split(import_node_path38.default.sep).join("/")
49796
49634
  );
49797
49635
  }
49798
49636
  } catch {
@@ -49802,37 +49640,37 @@ function discoverNativeLinkedAppFontPaths(opts) {
49802
49640
  } catch {
49803
49641
  }
49804
49642
  try {
49805
- const configPath = import_node_path39.default.join(selectedAppDir, "react-native.config.js");
49806
- if (import_node_fs37.default.statSync(configPath).isFile()) {
49807
- const appConfigRequire = (0, import_node_module3.createRequire)(import_node_path39.default.join(selectedAppDir, "package.json"));
49643
+ const configPath = import_node_path38.default.join(selectedAppDir, "react-native.config.js");
49644
+ if (import_node_fs36.default.statSync(configPath).isFile()) {
49645
+ const appConfigRequire = (0, import_node_module2.createRequire)(import_node_path38.default.join(selectedAppDir, "package.json"));
49808
49646
  const rnConfig = appConfigRequire(configPath);
49809
49647
  const assets2 = rnConfig && typeof rnConfig === "object" ? Reflect.get(rnConfig, "assets") : null;
49810
49648
  if (Array.isArray(assets2)) {
49811
49649
  for (const assetDir of assets2) {
49812
49650
  if (typeof assetDir !== "string") continue;
49813
- const root = import_node_path39.default.resolve(selectedAppDir, assetDir);
49814
- const relativeRoot = import_node_path39.default.relative(selectedAppDir, root);
49815
- if (relativeRoot.startsWith("..") || import_node_path39.default.isAbsolute(relativeRoot)) continue;
49816
- collectFontFiles(root, relativeRoot.split(import_node_path39.default.sep).join("/"));
49651
+ const root = import_node_path38.default.resolve(selectedAppDir, assetDir);
49652
+ const relativeRoot = import_node_path38.default.relative(selectedAppDir, root);
49653
+ if (relativeRoot.startsWith("..") || import_node_path38.default.isAbsolute(relativeRoot)) continue;
49654
+ collectFontFiles(root, relativeRoot.split(import_node_path38.default.sep).join("/"));
49817
49655
  }
49818
49656
  }
49819
49657
  }
49820
49658
  } catch {
49821
49659
  }
49822
49660
  if (platform === "ios") {
49823
- const iosDir = import_node_path39.default.join(selectedAppDir, "ios");
49661
+ const iosDir = import_node_path38.default.join(selectedAppDir, "ios");
49824
49662
  try {
49825
- const targetDirs = import_node_fs37.default.readdirSync(iosDir, { withFileTypes: true }).filter(
49663
+ const targetDirs = import_node_fs36.default.readdirSync(iosDir, { withFileTypes: true }).filter(
49826
49664
  (entry) => entry.isDirectory() && !entry.isSymbolicLink() && entry.name !== "Pods" && entry.name !== "build" && !entry.name.startsWith(".")
49827
49665
  ).slice(0, 64);
49828
- const plistPaths = [import_node_path39.default.join(iosDir, "Info.plist")];
49666
+ const plistPaths = [import_node_path38.default.join(iosDir, "Info.plist")];
49829
49667
  for (const entry of targetDirs) {
49830
- plistPaths.push(import_node_path39.default.join(iosDir, entry.name, "Info.plist"));
49668
+ plistPaths.push(import_node_path38.default.join(iosDir, entry.name, "Info.plist"));
49831
49669
  }
49832
49670
  for (const plistPath of plistPaths) {
49833
49671
  let parsed;
49834
49672
  try {
49835
- parsed = parsePlistSource(import_node_fs37.default.readFileSync(plistPath, "utf8"));
49673
+ parsed = parsePlistSource(import_node_fs36.default.readFileSync(plistPath, "utf8"));
49836
49674
  } catch {
49837
49675
  continue;
49838
49676
  }
@@ -49842,21 +49680,21 @@ function discoverNativeLinkedAppFontPaths(opts) {
49842
49680
  for (const declaredFont of declaredFonts) {
49843
49681
  if (typeof declaredFont !== "string") continue;
49844
49682
  const candidates = [
49845
- import_node_path39.default.resolve(import_node_path39.default.dirname(plistPath), declaredFont),
49846
- import_node_path39.default.resolve(iosDir, declaredFont)
49683
+ import_node_path38.default.resolve(import_node_path38.default.dirname(plistPath), declaredFont),
49684
+ import_node_path38.default.resolve(iosDir, declaredFont)
49847
49685
  ];
49848
49686
  const fontPath = candidates.find((candidate) => {
49849
- const relative3 = import_node_path39.default.relative(selectedAppDir, candidate);
49850
- if (relative3.startsWith("..") || import_node_path39.default.isAbsolute(relative3)) return false;
49687
+ const relative3 = import_node_path38.default.relative(selectedAppDir, candidate);
49688
+ if (relative3.startsWith("..") || import_node_path38.default.isAbsolute(relative3)) return false;
49851
49689
  try {
49852
- return import_node_fs37.default.statSync(candidate).isFile();
49690
+ return import_node_fs36.default.statSync(candidate).isFile();
49853
49691
  } catch {
49854
49692
  return false;
49855
49693
  }
49856
49694
  });
49857
49695
  if (!fontPath) continue;
49858
49696
  fontPaths.push(
49859
- import_node_path39.default.relative(selectedAppDir, fontPath).split(import_node_path39.default.sep).join("/")
49697
+ import_node_path38.default.relative(selectedAppDir, fontPath).split(import_node_path38.default.sep).join("/")
49860
49698
  );
49861
49699
  }
49862
49700
  }
@@ -49898,19 +49736,19 @@ async function resolveMetroProjectRoot(bundleUrl, opts) {
49898
49736
  function encodeAppFontsWire(specs) {
49899
49737
  return specs.map((spec) => `${encodeURIComponent(spec.url)}::${encodeURIComponent(spec.family)}`).join(",");
49900
49738
  }
49901
- var import_node_fs37, import_node_module3, import_node_path39, import_config_plugin_fonts, require2;
49739
+ var import_node_fs36, import_node_module2, import_node_path38, import_config_plugin_fonts, require2;
49902
49740
  var init_app_fonts = __esm({
49903
49741
  "cli/app-fonts.ts"() {
49904
49742
  "use strict";
49905
- import_node_fs37 = __toESM(require("node:fs"), 1);
49906
- import_node_module3 = require("node:module");
49907
- import_node_path39 = __toESM(require("node:path"), 1);
49743
+ import_node_fs36 = __toESM(require("node:fs"), 1);
49744
+ import_node_module2 = require("node:module");
49745
+ import_node_path38 = __toESM(require("node:path"), 1);
49908
49746
  import_config_plugin_fonts = require("peach-engine/engine/config-plugin-fonts");
49909
49747
  init_dev_server_scanner();
49910
49748
  init_backend_origin();
49911
49749
  init_plist();
49912
49750
  init_app_project();
49913
- require2 = (0, import_node_module3.createRequire)(__sootsim_import_meta_url);
49751
+ require2 = (0, import_node_module2.createRequire)(__sootsim_import_meta_url);
49914
49752
  }
49915
49753
  });
49916
49754
 
@@ -49979,15 +49817,15 @@ function splashImageUrls(spec) {
49979
49817
  if (spec.dark?.backgroundImageUrl) urls.add(spec.dark.backgroundImageUrl);
49980
49818
  return [...urls];
49981
49819
  }
49982
- var import_node_module4, import_config_plugin_splash, require3;
49820
+ var import_node_module3, import_config_plugin_splash, require3;
49983
49821
  var init_app_splash = __esm({
49984
49822
  "cli/app-splash.ts"() {
49985
49823
  "use strict";
49986
- import_node_module4 = require("node:module");
49824
+ import_node_module3 = require("node:module");
49987
49825
  import_config_plugin_splash = require("peach-engine/engine/config-plugin-splash");
49988
49826
  init_backend_origin();
49989
49827
  init_app_project();
49990
- require3 = (0, import_node_module4.createRequire)(__sootsim_import_meta_url);
49828
+ require3 = (0, import_node_module3.createRequire)(__sootsim_import_meta_url);
49991
49829
  }
49992
49830
  });
49993
49831
 
@@ -50844,7 +50682,7 @@ function desktopHostExecutable() {
50844
50682
  function bundleValue(app, key2) {
50845
50683
  const read = (0, import_node_child_process13.spawnSync)(
50846
50684
  "plutil",
50847
- ["-extract", key2, "raw", "-o", "-", import_node_path40.default.join(app, "Contents/Info.plist")],
50685
+ ["-extract", key2, "raw", "-o", "-", import_node_path39.default.join(app, "Contents/Info.plist")],
50848
50686
  { encoding: "utf8" }
50849
50687
  );
50850
50688
  return read.status === 0 ? read.stdout.trim() : null;
@@ -50855,8 +50693,8 @@ function isNativeHostBundle(app) {
50855
50693
  function placedHostVersion() {
50856
50694
  if (desktopHostPlatform() === "linux-x64") {
50857
50695
  try {
50858
- const version = import_node_fs38.default.readFileSync(import_node_path40.default.join(desktopHostsDir(), "active"), "utf8").trim();
50859
- return /^\d+\.\d+$/.test(version) && import_node_fs38.default.existsSync(import_node_path40.default.join(desktopHostDir(version), desktopHostExecutable())) ? version : null;
50696
+ const version = import_node_fs37.default.readFileSync(import_node_path39.default.join(desktopHostsDir(), "active"), "utf8").trim();
50697
+ return /^\d+\.\d+$/.test(version) && import_node_fs37.default.existsSync(import_node_path39.default.join(desktopHostDir(version), desktopHostExecutable())) ? version : null;
50860
50698
  } catch {
50861
50699
  return null;
50862
50700
  }
@@ -50872,18 +50710,18 @@ function headlessHostCommand() {
50872
50710
  if (!version) return null;
50873
50711
  const dir = desktopHostDir(version);
50874
50712
  return [
50875
- import_node_path40.default.join(dir, "bin/node"),
50713
+ import_node_path39.default.join(dir, "bin/node"),
50876
50714
  "--experimental-vm-modules",
50877
- import_node_path40.default.join(dir, "node/host.mjs")
50715
+ import_node_path39.default.join(dir, "node/host.mjs")
50878
50716
  ];
50879
50717
  }
50880
- var import_node_child_process13, import_node_fs38, import_node_path40, MAC_HOST_APP, HOST_BUNDLE_ID;
50718
+ var import_node_child_process13, import_node_fs37, import_node_path39, MAC_HOST_APP, HOST_BUNDLE_ID;
50881
50719
  var init_desktop_host_delivery = __esm({
50882
50720
  "src/desktop-host-delivery.ts"() {
50883
50721
  "use strict";
50884
50722
  import_node_child_process13 = require("node:child_process");
50885
- import_node_fs38 = __toESM(require("node:fs"), 1);
50886
- import_node_path40 = __toESM(require("node:path"), 1);
50723
+ import_node_fs37 = __toESM(require("node:fs"), 1);
50724
+ import_node_path39 = __toESM(require("node:path"), 1);
50887
50725
  init_src();
50888
50726
  init_home_paths();
50889
50727
  MAC_HOST_APP = "/Applications/Peach.app";
@@ -52431,8 +52269,8 @@ async function ensureLinuxBrowserLibraries(executablePath, browser) {
52431
52269
  };
52432
52270
  }
52433
52271
  const lock = parseLinuxBrowserLibsLock(linux_browser_libs_lock_default);
52434
- const dir = (0, import_node_path41.join)(rnxHomeDir(), "linux-libs", `${lock.id}-${arch}`);
52435
- if (!(0, import_node_fs39.existsSync)((0, import_node_path41.join)(dir, LINUX_BROWSER_LIBS_MARKER))) {
52272
+ const dir = (0, import_node_path40.join)(rnxHomeDir(), "linux-libs", `${lock.id}-${arch}`);
52273
+ if (!(0, import_node_fs38.existsSync)((0, import_node_path40.join)(dir, LINUX_BROWSER_LIBS_MARKER))) {
52436
52274
  const url = `${DEFAULT_CLI_RELEASE_ORIGIN}/${linuxBrowserLibsKey(lock.id, arch)}`;
52437
52275
  process.stderr.write(
52438
52276
  `peach: this system lacks ${missing.length} shared libraries ${browser} links; downloading them\u2026
@@ -52460,7 +52298,7 @@ async function ensureLinuxBrowserLibraries(executablePath, browser) {
52460
52298
  };
52461
52299
  }
52462
52300
  }
52463
- const libraryPath = [(0, import_node_path41.join)(dir, "lib"), (0, import_node_path41.join)(dir, "lib", "nss")].join(":");
52301
+ const libraryPath = [(0, import_node_path40.join)(dir, "lib"), (0, import_node_path40.join)(dir, "lib", "nss")].join(":");
52464
52302
  const stillMissing = missingLibraries(executablePath, libraryPath);
52465
52303
  if (stillMissing.length) {
52466
52304
  return {
@@ -52470,13 +52308,13 @@ async function ensureLinuxBrowserLibraries(executablePath, browser) {
52470
52308
  }
52471
52309
  return { ok: true, libraryPath };
52472
52310
  }
52473
- var import_node_child_process14, import_node_fs39, import_node_path41, LINUX_BROWSER_LIBS_ARCHES, LINUX_BROWSER_LIBS_MARKER;
52311
+ var import_node_child_process14, import_node_fs38, import_node_path40, LINUX_BROWSER_LIBS_ARCHES, LINUX_BROWSER_LIBS_MARKER;
52474
52312
  var init_linux_browser_libs = __esm({
52475
52313
  "cli/drivers/linux-browser-libs.ts"() {
52476
52314
  "use strict";
52477
52315
  import_node_child_process14 = require("node:child_process");
52478
- import_node_fs39 = require("node:fs");
52479
- import_node_path41 = require("node:path");
52316
+ import_node_fs38 = require("node:fs");
52317
+ import_node_path40 = require("node:path");
52480
52318
  init_src();
52481
52319
  init_home_paths();
52482
52320
  init_is_record();
@@ -52495,18 +52333,18 @@ function resolvePlaywright() {
52495
52333
  roots.push(`${playwrightCoreDir(PINNED_PLAYWRIGHT_CORE.version)}/`);
52496
52334
  for (const root of roots) {
52497
52335
  try {
52498
- const requireFromRoot = (0, import_node_module5.createRequire)(root);
52336
+ const requireFromRoot = (0, import_node_module4.createRequire)(root);
52499
52337
  for (const spec of ["playwright", "playwright-chromium", "playwright-core"]) {
52500
52338
  try {
52501
52339
  const modulePath = requireFromRoot.resolve(spec);
52502
52340
  const packageJsonPath = requireFromRoot.resolve(`${spec}/package.json`);
52503
- const parsed = JSON.parse((0, import_node_fs40.readFileSync)(packageJsonPath, "utf8"));
52341
+ const parsed = JSON.parse((0, import_node_fs39.readFileSync)(packageJsonPath, "utf8"));
52504
52342
  if (!isRecord(parsed) || typeof parsed.version !== "string") continue;
52505
- const corePackagePath = (0, import_node_module5.createRequire)(modulePath).resolve(
52343
+ const corePackagePath = (0, import_node_module4.createRequire)(modulePath).resolve(
52506
52344
  "playwright-core/package.json"
52507
52345
  );
52508
- const cliPath = (0, import_node_path42.join)((0, import_node_path42.dirname)(corePackagePath), "cli.js");
52509
- if (!(0, import_node_fs40.existsSync)(cliPath)) continue;
52346
+ const cliPath = (0, import_node_path41.join)((0, import_node_path41.dirname)(corePackagePath), "cli.js");
52347
+ if (!(0, import_node_fs39.existsSync)(cliPath)) continue;
52510
52348
  return {
52511
52349
  spec,
52512
52350
  modulePath,
@@ -52534,7 +52372,7 @@ async function provisionPlaywright() {
52534
52372
  await installVerifiedTarball({
52535
52373
  url: `https://registry.npmjs.org/playwright-core/-/playwright-core-${version}.tgz`,
52536
52374
  digest: { algorithm, encoding: "base64", value: digest },
52537
- destDir: (0, import_node_path42.join)(playwrightCoreDir(version), "node_modules", "playwright-core"),
52375
+ destDir: (0, import_node_path41.join)(playwrightCoreDir(version), "node_modules", "playwright-core"),
52538
52376
  installedMarker: "package.json",
52539
52377
  // npm tarballs hold the package under a leading `package/`
52540
52378
  stripComponents: 1,
@@ -52577,7 +52415,7 @@ function probeBrowser(resolved, env) {
52577
52415
  return {
52578
52416
  ok: true,
52579
52417
  executablePath: parsed.executablePath,
52580
- exists: parsed.exists && (0, import_node_fs40.existsSync)(parsed.executablePath)
52418
+ exists: parsed.exists && (0, import_node_fs39.existsSync)(parsed.executablePath)
52581
52419
  };
52582
52420
  } catch (error) {
52583
52421
  return {
@@ -52650,7 +52488,7 @@ async function launchProvisionedPlaywright() {
52650
52488
  const env = { ...process.env };
52651
52489
  const browser = await ensurePlaywrightBrowser(resolved, softwareChromeAllowed(), env);
52652
52490
  if (!browser.ok) throw new Error(browser.message);
52653
- const playwright = (0, import_node_module5.createRequire)(resolved.modulePath)(
52491
+ const playwright = (0, import_node_module4.createRequire)(resolved.modulePath)(
52654
52492
  resolved.modulePath
52655
52493
  );
52656
52494
  const browserEnv = browser.libraryPath ? {
@@ -52662,14 +52500,14 @@ async function launchProvisionedPlaywright() {
52662
52500
  { headless: true }
52663
52501
  );
52664
52502
  }
52665
- var import_node_child_process15, import_node_fs40, import_node_module5, import_node_path42;
52503
+ var import_node_child_process15, import_node_fs39, import_node_module4, import_node_path41;
52666
52504
  var init_playwright_provisioning = __esm({
52667
52505
  "cli/drivers/playwright-provisioning.ts"() {
52668
52506
  "use strict";
52669
52507
  import_node_child_process15 = require("node:child_process");
52670
- import_node_fs40 = require("node:fs");
52671
- import_node_module5 = require("node:module");
52672
- import_node_path42 = require("node:path");
52508
+ import_node_fs39 = require("node:fs");
52509
+ import_node_module4 = require("node:module");
52510
+ import_node_path41 = require("node:path");
52673
52511
  init_src();
52674
52512
  init_reap_browser();
52675
52513
  init_home_paths();
@@ -53148,12 +52986,12 @@ var init_runtime_diagnostics = __esm({
53148
52986
  // cli/commands/skills.ts
53149
52987
  function getSkillsDir() {
53150
52988
  if (typeof __PEACH_BUNDLED_SKILLS__ !== "undefined") {
53151
- const dir = path35.join(rnxHomeDir(), "skills", getCliVersion());
52989
+ const dir = path34.join(rnxHomeDir(), "skills", getCliVersion());
53152
52990
  for (const [file, body] of Object.entries(__PEACH_BUNDLED_SKILLS__)) {
53153
- const target = path35.join(dir, file);
53154
- if (fs30.existsSync(target)) continue;
53155
- fs30.mkdirSync(path35.dirname(target), { recursive: true });
53156
- fs30.writeFileSync(target, body);
52991
+ const target = path34.join(dir, file);
52992
+ if (fs29.existsSync(target)) continue;
52993
+ fs29.mkdirSync(path34.dirname(target), { recursive: true });
52994
+ fs29.writeFileSync(target, body);
53157
52995
  }
53158
52996
  return dir;
53159
52997
  }
@@ -53161,10 +52999,10 @@ function getSkillsDir() {
53161
52999
  const pkgPath = (0, import_url3.fileURLToPath)(
53162
53000
  import_meta3.resolve(`${rnxPublicBrand.packageName}/package.json`)
53163
53001
  );
53164
- return primaryCheckoutPath(path35.join(path35.dirname(pkgPath), "skills"));
53002
+ return primaryCheckoutPath(path34.join(path34.dirname(pkgPath), "skills"));
53165
53003
  } catch {
53166
- const __dirname = path35.dirname((0, import_url3.fileURLToPath)(__sootsim_import_meta_url));
53167
- return primaryCheckoutPath(path35.resolve(__dirname, "../../skills"));
53004
+ const __dirname = path34.dirname((0, import_url3.fileURLToPath)(__sootsim_import_meta_url));
53005
+ return primaryCheckoutPath(path34.resolve(__dirname, "../../skills"));
53168
53006
  }
53169
53007
  }
53170
53008
  function primaryCheckoutPath(dir) {
@@ -53187,39 +53025,39 @@ function primaryCheckoutPath(dir) {
53187
53025
  } catch {
53188
53026
  return dir;
53189
53027
  }
53190
- if (path35.basename(common) !== ".git") return dir;
53191
- const primary = path35.join(path35.dirname(common), path35.relative(top, dir));
53192
- return fs30.existsSync(primary) ? primary : dir;
53028
+ if (path34.basename(common) !== ".git") return dir;
53029
+ const primary = path34.join(path34.dirname(common), path34.relative(top, dir));
53030
+ return fs29.existsSync(primary) ? primary : dir;
53193
53031
  }
53194
53032
  function skillsDir() {
53195
53033
  skillsDirPath ??= getSkillsDir();
53196
53034
  return skillsDirPath;
53197
53035
  }
53198
53036
  function targetFromHome(envName, fallbackDir) {
53199
- const home = process.env[envName] || path35.join(os9.homedir(), fallbackDir);
53200
- return path35.join(home, "skills");
53037
+ const home = process.env[envName] || path34.join(os9.homedir(), fallbackDir);
53038
+ return path34.join(home, "skills");
53201
53039
  }
53202
53040
  function codexTargets() {
53203
53041
  const homes = /* @__PURE__ */ new Map();
53204
53042
  const userHome = process.env.HOME || os9.homedir();
53205
- const primaryCodexHome = process.env.CODEX_HOME || path35.join(userHome, ".codex");
53206
- homes.set(path35.resolve(primaryCodexHome), "codex");
53043
+ const primaryCodexHome = process.env.CODEX_HOME || path34.join(userHome, ".codex");
53044
+ homes.set(path34.resolve(primaryCodexHome), "codex");
53207
53045
  const tmCodexHomes = process.env.TM_CODEX_HOMES;
53208
53046
  if (tmCodexHomes) {
53209
- for (const h of tmCodexHomes.split(path35.delimiter)) {
53047
+ for (const h of tmCodexHomes.split(path34.delimiter)) {
53210
53048
  if (h.trim()) {
53211
- const resolved = path35.resolve(h.trim());
53049
+ const resolved = path34.resolve(h.trim());
53212
53050
  if (!homes.has(resolved)) {
53213
- homes.set(resolved, path35.basename(resolved).replace(/^\./, ""));
53051
+ homes.set(resolved, path34.basename(resolved).replace(/^\./, ""));
53214
53052
  }
53215
53053
  }
53216
53054
  }
53217
53055
  }
53218
- const tmHome = process.env.TM_HOME || path35.join(userHome, ".team-machine");
53219
- const enginePath = path35.join(tmHome, "engine.yaml");
53220
- if (fs30.existsSync(enginePath)) {
53056
+ const tmHome = process.env.TM_HOME || path34.join(userHome, ".team-machine");
53057
+ const enginePath = path34.join(tmHome, "engine.yaml");
53058
+ if (fs29.existsSync(enginePath)) {
53221
53059
  try {
53222
- const content = fs30.readFileSync(enginePath, "utf8");
53060
+ const content = fs29.readFileSync(enginePath, "utf8");
53223
53061
  let inCodex = false;
53224
53062
  let inAccounts = false;
53225
53063
  let currentAccount = "";
@@ -53249,9 +53087,9 @@ function codexTargets() {
53249
53087
  if (match) {
53250
53088
  let homeDir = match[1].trim();
53251
53089
  if (homeDir.startsWith("~")) {
53252
- homeDir = path35.join(userHome, homeDir.slice(1));
53090
+ homeDir = path34.join(userHome, homeDir.slice(1));
53253
53091
  }
53254
- const resolved = path35.resolve(homeDir);
53092
+ const resolved = path34.resolve(homeDir);
53255
53093
  if (!homes.has(resolved)) {
53256
53094
  homes.set(resolved, `codex-${currentAccount}`);
53257
53095
  }
@@ -53262,13 +53100,13 @@ function codexTargets() {
53262
53100
  }
53263
53101
  }
53264
53102
  try {
53265
- for (const entry of fs30.readdirSync(userHome)) {
53103
+ for (const entry of fs29.readdirSync(userHome)) {
53266
53104
  if (entry.startsWith(".codex-")) {
53267
- const fullPath = path35.join(userHome, entry);
53105
+ const fullPath = path34.join(userHome, entry);
53268
53106
  try {
53269
- const stat2 = fs30.statSync(fullPath);
53107
+ const stat2 = fs29.statSync(fullPath);
53270
53108
  if (stat2.isDirectory()) {
53271
- const resolved = path35.resolve(fullPath);
53109
+ const resolved = path34.resolve(fullPath);
53272
53110
  if (!homes.has(resolved)) {
53273
53111
  homes.set(resolved, entry.replace(/^\./, ""));
53274
53112
  }
@@ -53283,7 +53121,7 @@ function codexTargets() {
53283
53121
  for (const [homePath, label] of homes) {
53284
53122
  targets.push({
53285
53123
  label,
53286
- dir: path35.join(homePath, "skills")
53124
+ dir: path34.join(homePath, "skills")
53287
53125
  });
53288
53126
  }
53289
53127
  return targets;
@@ -53299,7 +53137,7 @@ function hasInstalledPeachSkills() {
53299
53137
  (file) => /^([^/]+)\/SKILL\.md$/.exec(file)?.[1] ?? []
53300
53138
  ) : listSkills().map((skill7) => skill7.name);
53301
53139
  return defaultAgentTargets().some(
53302
- ({ dir }) => names.some((name2) => fs30.existsSync(path35.join(dir, name2, "SKILL.md")))
53140
+ ({ dir }) => names.some((name2) => fs29.existsSync(path34.join(dir, name2, "SKILL.md")))
53303
53141
  );
53304
53142
  }
53305
53143
  function parseSkillFrontmatter(content) {
@@ -53342,26 +53180,26 @@ function readFrontmatterField(frontmatter, field) {
53342
53180
  return null;
53343
53181
  }
53344
53182
  function listSkills() {
53345
- if (!fs30.existsSync(skillsDir())) return [];
53183
+ if (!fs29.existsSync(skillsDir())) return [];
53346
53184
  const skills = [];
53347
- for (const entry of fs30.readdirSync(skillsDir())) {
53348
- const skillMd = path35.join(skillsDir(), entry, "SKILL.md");
53349
- if (!fs30.existsSync(skillMd)) continue;
53350
- const meta = parseSkillFrontmatter(fs30.readFileSync(skillMd, "utf8"));
53185
+ for (const entry of fs29.readdirSync(skillsDir())) {
53186
+ const skillMd = path34.join(skillsDir(), entry, "SKILL.md");
53187
+ if (!fs29.existsSync(skillMd)) continue;
53188
+ const meta = parseSkillFrontmatter(fs29.readFileSync(skillMd, "utf8"));
53351
53189
  if (meta) {
53352
53190
  skills.push({ name: entry, description: meta.description });
53353
53191
  }
53354
53192
  }
53355
53193
  return skills.sort((a, b) => a.name.localeCompare(b.name));
53356
53194
  }
53357
- var import_child_process7, fs30, os9, path35, import_url3, import_meta3, skillsDirPath;
53195
+ var import_child_process7, fs29, os9, path34, import_url3, import_meta3, skillsDirPath;
53358
53196
  var init_skills = __esm({
53359
53197
  "cli/commands/skills.ts"() {
53360
53198
  "use strict";
53361
53199
  import_child_process7 = require("child_process");
53362
- fs30 = __toESM(require("fs"), 1);
53200
+ fs29 = __toESM(require("fs"), 1);
53363
53201
  os9 = __toESM(require("os"), 1);
53364
- path35 = __toESM(require("path"), 1);
53202
+ path34 = __toESM(require("path"), 1);
53365
53203
  import_url3 = require("url");
53366
53204
  init_cli_version();
53367
53205
  init_home_paths();
@@ -53822,11 +53660,11 @@ async function connectBridgeForOpen(preferredPort, explicitPort, resources, runt
53822
53660
  );
53823
53661
  }
53824
53662
  const { executable, prefixArgs } = rnxSelfInvocation();
53825
- const bridgeLogPath = import_node_path43.default.join(
53663
+ const bridgeLogPath = import_node_path42.default.join(
53826
53664
  import_node_os11.default.tmpdir(),
53827
53665
  `peach-bridge-${Date.now()}-${process.pid}.log`
53828
53666
  );
53829
- const bridgeLogFd = import_node_fs41.default.openSync(bridgeLogPath, "a");
53667
+ const bridgeLogFd = import_node_fs40.default.openSync(bridgeLogPath, "a");
53830
53668
  let child;
53831
53669
  try {
53832
53670
  child = (0, import_node_child_process16.spawn)(
@@ -53840,7 +53678,7 @@ async function connectBridgeForOpen(preferredPort, explicitPort, resources, runt
53840
53678
  }
53841
53679
  );
53842
53680
  } finally {
53843
- import_node_fs41.default.closeSync(bridgeLogFd);
53681
+ import_node_fs40.default.closeSync(bridgeLogFd);
53844
53682
  }
53845
53683
  if (resources) {
53846
53684
  resources.bridge = child;
@@ -53876,7 +53714,7 @@ async function connectBridgeForOpen(preferredPort, explicitPort, resources, runt
53876
53714
  await sleep(150);
53877
53715
  }
53878
53716
  const reason = childExit ? `peach bridge exited before becoming ready (exit ${childExit})` : `peach bridge did not start within ${Math.round(OPEN_BRIDGE_SPAWN_TIMEOUT_MS / 1e3)}s`;
53879
- const bridgeLog = import_node_fs41.default.readFileSync(bridgeLogPath, "utf8").trim().slice(-2e3);
53717
+ const bridgeLog = import_node_fs40.default.readFileSync(bridgeLogPath, "utf8").trim().slice(-2e3);
53880
53718
  throw new Error(
53881
53719
  `${reason}${bridgeLog ? `
53882
53720
  ${bridgeLog}` : ""}
@@ -53899,7 +53737,7 @@ function assertExplicitBridgeLock(preferredPort, explicitPort, lock) {
53899
53737
  async function ensureRuntimeForOpen() {
53900
53738
  if (resolveDevCheckoutRuntimeRoot()) return;
53901
53739
  const active = readActiveRuntime();
53902
- if (active && import_node_fs41.default.existsSync(runtimeDir(active))) return;
53740
+ if (active && import_node_fs40.default.existsSync(runtimeDir(active))) return;
53903
53741
  console.error(" installing peach engine runtime...");
53904
53742
  const { runRuntime: runRuntime2 } = await Promise.resolve().then(() => (init_runtime(), runtime_exports));
53905
53743
  await runRuntime2(["install"], {});
@@ -54047,10 +53885,10 @@ async function buildResolvedBundleOpenUrl(target, baseUrl, opts = {}) {
54047
53885
  }
54048
53886
  function normalizeReplacementPath(filePath) {
54049
53887
  if (filePath.startsWith("~/")) {
54050
- return import_node_path43.default.join(import_node_os11.default.homedir(), filePath.slice(2));
53888
+ return import_node_path42.default.join(import_node_os11.default.homedir(), filePath.slice(2));
54051
53889
  }
54052
- if (import_node_path43.default.isAbsolute(filePath)) return filePath;
54053
- return import_node_path43.default.resolve(process.cwd(), filePath);
53890
+ if (import_node_path42.default.isAbsolute(filePath)) return filePath;
53891
+ return import_node_path42.default.resolve(process.cwd(), filePath);
54054
53892
  }
54055
53893
  function parseOpenRuntimeConfig(args) {
54056
53894
  const modules = {};
@@ -54069,7 +53907,7 @@ function parseOpenRuntimeConfig(args) {
54069
53907
  }
54070
53908
  const moduleName = raw2.slice(0, eqIndex).trim();
54071
53909
  const filePath = normalizeReplacementPath(raw2.slice(eqIndex + 1).trim());
54072
- if (!import_node_fs41.default.existsSync(filePath)) {
53910
+ if (!import_node_fs40.default.existsSync(filePath)) {
54073
53911
  console.error(` peach open: replacement file not found: ${filePath}`);
54074
53912
  rnxExit(1);
54075
53913
  }
@@ -54105,7 +53943,7 @@ async function resolveAppProjectForBundleUrl(bundleUrl, projectRoot) {
54105
53943
  return advertisedRoot ? resolveAppProject(advertisedRoot) : null;
54106
53944
  }
54107
53945
  async function ensureConfiguredRuntime(version) {
54108
- if (import_node_fs41.default.existsSync(import_node_path43.default.join(runtimeDir(version), "index.html"))) return;
53946
+ if (import_node_fs40.default.existsSync(import_node_path42.default.join(runtimeDir(version), "index.html"))) return;
54109
53947
  console.error(` installing configured engine runtime ${version}...`);
54110
53948
  const result = await rnxRuntime.install({
54111
53949
  version,
@@ -54223,22 +54061,6 @@ async function stampAppSplash(urlStr, project) {
54223
54061
  return urlStr;
54224
54062
  }
54225
54063
  }
54226
- function stampNativeFirebaseConfig(urlStr, project) {
54227
- const url = new URL(urlStr);
54228
- if (!url.searchParams.get("bundle") || !project) return urlStr;
54229
- try {
54230
- url.searchParams.set(
54231
- "nativeFirebase",
54232
- JSON.stringify(readNativeFirebaseConfig(project.appDir))
54233
- );
54234
- } catch (error) {
54235
- url.searchParams.set(
54236
- "nativeFirebase",
54237
- JSON.stringify({ error: error instanceof Error ? error.message : String(error) })
54238
- );
54239
- }
54240
- return url.toString();
54241
- }
54242
54064
  function stampAppCatalog(urlStr, project) {
54243
54065
  try {
54244
54066
  const url = new URL(urlStr);
@@ -54274,14 +54096,12 @@ async function buildShellUrl(target, baseUrl = resolveDefaultShellBaseUrl(), opt
54274
54096
  const resolved = await resolveShellUrl(target, baseUrl, opts);
54275
54097
  const project = opts.project ?? await resolveAppProjectForBundleUrl(bundleUrlOf(resolved));
54276
54098
  const expoRoot = project?.appDir ?? null;
54277
- const stamped = stampNativeFirebaseConfig(
54278
- stampAppCatalog(
54279
- await stampAppSplash(await stampAppFonts(resolved, project), project),
54280
- project
54281
- ),
54099
+ const stamped = stampAppCatalog(
54100
+ await stampAppSplash(await stampAppFonts(resolved, project), project),
54282
54101
  project
54283
54102
  );
54284
54103
  const expoStamped = new URL(stamped);
54104
+ expoStamped.searchParams.delete("nativeFirebase");
54285
54105
  if (opts.bundleOriginOverride)
54286
54106
  expoStamped.searchParams.set("bundleOriginOverride", opts.bundleOriginOverride);
54287
54107
  if (opts.hostDriver) expoStamped.searchParams.set("peachHostDriver", opts.hostDriver);
@@ -54447,7 +54267,7 @@ function playwrightHostPidForSim(sim) {
54447
54267
  function signalDriverLaunchConnected(result) {
54448
54268
  if (!result.connectAckFile) return false;
54449
54269
  try {
54450
- import_node_fs41.default.writeFileSync(
54270
+ import_node_fs40.default.writeFileSync(
54451
54271
  result.connectAckFile,
54452
54272
  `${JSON.stringify({ connectedAt: Date.now(), pid: result.pid ?? null })}
54453
54273
  `,
@@ -54461,7 +54281,7 @@ function signalDriverLaunchConnected(result) {
54461
54281
  function readUnservedUrl(result) {
54462
54282
  if (!result.diagnosticLogPath) return null;
54463
54283
  try {
54464
- const detail = import_node_fs41.default.readFileSync(result.diagnosticLogPath, "utf8");
54284
+ const detail = import_node_fs40.default.readFileSync(result.diagnosticLogPath, "utf8");
54465
54285
  const match = detail.match(/\[unserved\] nothing serves (\S+)/);
54466
54286
  return match ? match[1] : null;
54467
54287
  } catch {
@@ -54471,19 +54291,19 @@ function readUnservedUrl(result) {
54471
54291
  function printDriverDiagnosticLogTail(result) {
54472
54292
  if (!result.diagnosticLogPath) return;
54473
54293
  try {
54474
- const detail = import_node_fs41.default.readFileSync(result.diagnosticLogPath, "utf8").trim();
54294
+ const detail = import_node_fs40.default.readFileSync(result.diagnosticLogPath, "utf8").trim();
54475
54295
  if (!detail) {
54476
- console.error(` ${import_node_path43.default.basename(result.diagnosticLogPath)} was empty`);
54296
+ console.error(` ${import_node_path42.default.basename(result.diagnosticLogPath)} was empty`);
54477
54297
  return;
54478
54298
  }
54479
54299
  const shown = detail.length > 4e3 ? `\u2026
54480
54300
  ${detail.slice(-4e3)}` : detail;
54481
- console.error(` ${import_node_path43.default.basename(result.diagnosticLogPath)}:`);
54301
+ console.error(` ${import_node_path42.default.basename(result.diagnosticLogPath)}:`);
54482
54302
  console.error(shown);
54483
54303
  } catch (err) {
54484
54304
  const message = err instanceof Error ? err.message : String(err);
54485
54305
  console.error(
54486
- ` failed to read ${import_node_path43.default.basename(result.diagnosticLogPath)}: ${message}`
54306
+ ` failed to read ${import_node_path42.default.basename(result.diagnosticLogPath)}: ${message}`
54487
54307
  );
54488
54308
  }
54489
54309
  }
@@ -55521,14 +55341,14 @@ async function runCloseCommand(args, opts = {}) {
55521
55341
  bridge.close();
55522
55342
  }
55523
55343
  }
55524
- var import_node_child_process16, import_node_fs41, import_node_os11, import_node_path43, import_app_catalog_wire, import_devices2, import_ws4, DEFAULT_DRIVER_CONNECT_TIMEOUT_MS, DRIVER_CONNECT_INTERVAL_MS, DRIVER_CONNECT_HOST_GRACE_MS, OPEN_BRIDGE_SPAWN_TIMEOUT_MS, OPEN_BRIDGE_RUNTIME_TIMEOUT_MS, SHELL_APPS, DEV_BUNDLE_RESOLVE_ATTEMPTS, DEV_BUNDLE_RESOLVE_INTERVAL_MS;
55344
+ var import_node_child_process16, import_node_fs40, import_node_os11, import_node_path42, import_app_catalog_wire, import_devices2, import_ws4, DEFAULT_DRIVER_CONNECT_TIMEOUT_MS, DRIVER_CONNECT_INTERVAL_MS, DRIVER_CONNECT_HOST_GRACE_MS, OPEN_BRIDGE_SPAWN_TIMEOUT_MS, OPEN_BRIDGE_RUNTIME_TIMEOUT_MS, SHELL_APPS, DEV_BUNDLE_RESOLVE_ATTEMPTS, DEV_BUNDLE_RESOLVE_INTERVAL_MS;
55525
55345
  var init_control = __esm({
55526
55346
  "cli/commands/control.ts"() {
55527
55347
  "use strict";
55528
55348
  import_node_child_process16 = require("node:child_process");
55529
- import_node_fs41 = __toESM(require("node:fs"), 1);
55349
+ import_node_fs40 = __toESM(require("node:fs"), 1);
55530
55350
  import_node_os11 = __toESM(require("node:os"), 1);
55531
- import_node_path43 = __toESM(require("node:path"), 1);
55351
+ import_node_path42 = __toESM(require("node:path"), 1);
55532
55352
  import_app_catalog_wire = require("peach-engine/engine/app-catalog-wire");
55533
55353
  import_devices2 = require("peach-engine/settings/devices");
55534
55354
  import_ws4 = require("ws");
@@ -55542,7 +55362,6 @@ var init_control = __esm({
55542
55362
  init_flow_timeout_scale();
55543
55363
  init_home_paths();
55544
55364
  init_native_dev_bundle_url();
55545
- init_native_firebase_config();
55546
55365
  init_profiles();
55547
55366
  init_public_brand();
55548
55367
  init_runtime_assets();
@@ -56989,16 +56808,16 @@ function readRecentShellAppId(state) {
56989
56808
  }
56990
56809
  function resolveProjectRelativeFlowBase(flowDir) {
56991
56810
  if (!flowDir) return process.cwd();
56992
- return path37.basename(flowDir) === ".maestro" ? path37.dirname(flowDir) : flowDir;
56811
+ return path36.basename(flowDir) === ".maestro" ? path36.dirname(flowDir) : flowDir;
56993
56812
  }
56994
56813
  function resolveFlowScreenshotPathWithMode(screenshotDir, name2, opts) {
56995
56814
  const normalizedName = name2.endsWith(".png") ? name2 : `${name2}.png`;
56996
- if (path37.isAbsolute(normalizedName)) return normalizedName;
56815
+ if (path36.isAbsolute(normalizedName)) return normalizedName;
56997
56816
  if (opts.mode === "flow" && /[\\/]/.test(normalizedName)) {
56998
56817
  const baseDir = normalizedName.startsWith("./") || normalizedName.startsWith("../") ? opts.flowDir ?? process.cwd() : resolveProjectRelativeFlowBase(opts.flowDir);
56999
- return path37.resolve(baseDir, normalizedName);
56818
+ return path36.resolve(baseDir, normalizedName);
57000
56819
  }
57001
- return path37.join(screenshotDir, normalizedName);
56820
+ return path36.join(screenshotDir, normalizedName);
57002
56821
  }
57003
56822
  function normalizeFlowScreenshotSpec(step) {
57004
56823
  if (typeof step === "string") {
@@ -57052,12 +56871,12 @@ function normalizeBareStringStep(verb) {
57052
56871
  function parseFlowSteps(content) {
57053
56872
  return parseFlowFile(content).steps;
57054
56873
  }
57055
- var fs33, path37, import_devices4, import_proof_frame, DEFAULT_TIMEOUT, ASSERTION_LOOKUP_MS, FLOW_TIMEOUT_SCALE, scaledTimeout, MAESTRO_SELECTOR_KEYS, UNSUPPORTED_SELECTOR_KEYS, ACCESSIBILITY_SELECTOR_KEYS, ACCESSIBILITY_TRAIT_FILTERS, MAESTRO_PERMISSION_KINDS, MAESTRO_PERMISSION_STATUS, SootSimBridgeFlowRunner;
56874
+ var fs32, path36, import_devices4, import_proof_frame, DEFAULT_TIMEOUT, ASSERTION_LOOKUP_MS, FLOW_TIMEOUT_SCALE, scaledTimeout, MAESTRO_SELECTOR_KEYS, UNSUPPORTED_SELECTOR_KEYS, ACCESSIBILITY_SELECTOR_KEYS, ACCESSIBILITY_TRAIT_FILTERS, MAESTRO_PERMISSION_KINDS, MAESTRO_PERMISSION_STATUS, SootSimBridgeFlowRunner;
57056
56875
  var init_bridge_flow_runner = __esm({
57057
56876
  "cli/bridge-flow-runner.ts"() {
57058
56877
  "use strict";
57059
- fs33 = __toESM(require("fs"), 1);
57060
- path37 = __toESM(require("path"), 1);
56878
+ fs32 = __toESM(require("fs"), 1);
56879
+ path36 = __toESM(require("path"), 1);
57061
56880
  import_devices4 = require("peach-engine/settings/devices");
57062
56881
  import_proof_frame = __toESM(require_proof_frame(), 1);
57063
56882
  init_flow_timeout_scale();
@@ -57369,14 +57188,14 @@ var init_bridge_flow_runner = __esm({
57369
57188
  if (chunks.length === 0) {
57370
57189
  throw new Error("recording requested but no video buffer was produced");
57371
57190
  }
57372
- fs33.mkdirSync(this.opts.recordingOutputDir, { recursive: true });
57191
+ fs32.mkdirSync(this.opts.recordingOutputDir, { recursive: true });
57373
57192
  const videoMime = stopped.mime || this.opts.recordingFormat || "video/webm";
57374
57193
  const extension = videoMime.includes("mp4") ? "mp4" : "webm";
57375
- const outputPath = path37.join(
57194
+ const outputPath = path36.join(
57376
57195
  this.opts.recordingOutputDir,
57377
57196
  `peach-${Date.now()}.${extension}`
57378
57197
  );
57379
- fs33.writeFileSync(outputPath, Buffer.concat(chunks));
57198
+ fs32.writeFileSync(outputPath, Buffer.concat(chunks));
57380
57199
  return outputPath;
57381
57200
  }
57382
57201
  async waitForRecordingTail(opts) {
@@ -57997,7 +57816,7 @@ var init_bridge_flow_runner = __esm({
57997
57816
  flowDir: this.opts.flowDir
57998
57817
  }
57999
57818
  );
58000
- fs33.mkdirSync(path37.dirname(outputPath), { recursive: true });
57819
+ fs32.mkdirSync(path36.dirname(outputPath), { recursive: true });
58001
57820
  const layers = spec.layers ?? this.opts.screenshotLayers;
58002
57821
  const screenshotRequest = {
58003
57822
  type: "screenshot",
@@ -58032,11 +57851,11 @@ var init_bridge_flow_runner = __esm({
58032
57851
  throw new Error("could not read current device model for framed screenshot");
58033
57852
  }
58034
57853
  const framed = await composeFramedScreenshot(rawBuffer, model);
58035
- fs33.writeFileSync(outputPath, framed);
57854
+ fs32.writeFileSync(outputPath, framed);
58036
57855
  console.log(`[flow] screenshot: ${outputPath} (frame: ${model})`);
58037
57856
  return outputPath;
58038
57857
  }
58039
- fs33.writeFileSync(outputPath, rawBuffer);
57858
+ fs32.writeFileSync(outputPath, rawBuffer);
58040
57859
  console.log(`[flow] screenshot: ${outputPath}`);
58041
57860
  return outputPath;
58042
57861
  }
@@ -58058,10 +57877,10 @@ var init_bridge_flow_runner = __esm({
58058
57877
  // + a11y tree + console errors/warnings + failed network requests +
58059
57878
  // shell state, all under one directory so post-mortem is one grep away.
58060
57879
  async captureFailureBundle(outputDir, context) {
58061
- fs33.mkdirSync(outputDir, { recursive: true });
57880
+ fs32.mkdirSync(outputDir, { recursive: true });
58062
57881
  const write = (name2, content) => {
58063
57882
  try {
58064
- fs33.writeFileSync(path37.join(outputDir, name2), content);
57883
+ fs32.writeFileSync(path36.join(outputDir, name2), content);
58065
57884
  } catch {
58066
57885
  }
58067
57886
  };
@@ -58656,8 +58475,8 @@ var init_bridge_flow_runner = __esm({
58656
58475
  runScript(target) {
58657
58476
  const spec = typeof target === "string" ? { file: target } : target;
58658
58477
  if (!spec.file) throw new Error("runScript requires a file");
58659
- const scriptPath = path37.resolve(this.opts.flowDir, spec.file);
58660
- const source = fs33.readFileSync(scriptPath, "utf8");
58478
+ const scriptPath = path36.resolve(this.opts.flowDir, spec.file);
58479
+ const source = fs32.readFileSync(scriptPath, "utf8");
58661
58480
  this.js.evaluate(source, { env: spec.env });
58662
58481
  console.log(`[flow] runScript: ${spec.file} done`);
58663
58482
  }
@@ -59017,14 +58836,14 @@ var init_bridge_flow_runner = __esm({
59017
58836
  for (const [k, v] of Object.entries(env)) this.js.putEnv(k, v);
59018
58837
  }
59019
58838
  if (file) {
59020
- const flowPath = path37.resolve(this.opts.flowDir, file);
59021
- const flowContent = fs33.readFileSync(flowPath, "utf8");
58839
+ const flowPath = path36.resolve(this.opts.flowDir, file);
58840
+ const flowContent = fs32.readFileSync(flowPath, "utf8");
59022
58841
  const { frontmatter } = parseFlowFile(flowContent);
59023
58842
  if (frontmatter.env && typeof frontmatter.env === "object") {
59024
58843
  this.js.defineVariables(frontmatter.env);
59025
58844
  }
59026
58845
  const previousDir = this.opts.flowDir;
59027
- this.opts.flowDir = path37.dirname(flowPath);
58846
+ this.opts.flowDir = path36.dirname(flowPath);
59028
58847
  try {
59029
58848
  await this.runFlow(parseFlowSteps(flowContent));
59030
58849
  } finally {
@@ -59195,8 +59014,8 @@ __export(registry_exports, {
59195
59014
  skillRegistry: () => skillRegistry
59196
59015
  });
59197
59016
  module.exports = __toCommonJS(registry_exports);
59198
- var fs34 = __toESM(require("fs"), 1);
59199
- var path38 = __toESM(require("path"), 1);
59017
+ var fs33 = __toESM(require("fs"), 1);
59018
+ var path37 = __toESM(require("path"), 1);
59200
59019
 
59201
59020
  // src/skills/builtin/a11y-review.ts
59202
59021
  init_reap_browser();
@@ -59215,8 +59034,8 @@ var skill = {
59215
59034
  },
59216
59035
  async execute(params, context) {
59217
59036
  const { chromium } = await import("playwright");
59218
- const path39 = await import("path");
59219
- const fs35 = await import("fs");
59037
+ const path38 = await import("path");
59038
+ const fs34 = await import("fs");
59220
59039
  const browser = await launchReapedChrome((options) => chromium.launch(options), {
59221
59040
  headless: true
59222
59041
  });
@@ -59273,9 +59092,9 @@ var skill = {
59273
59092
  warnings: issues.filter((i) => i.severity === "warning").length,
59274
59093
  tree: typeof tree === "string" ? tree : JSON.stringify(tree)
59275
59094
  };
59276
- const reportPath = path39.join(context.outputDir, "a11y-report.json");
59277
- fs35.mkdirSync(path39.dirname(reportPath), { recursive: true });
59278
- fs35.writeFileSync(reportPath, JSON.stringify(report, null, 2));
59095
+ const reportPath = path38.join(context.outputDir, "a11y-report.json");
59096
+ fs34.mkdirSync(path38.dirname(reportPath), { recursive: true });
59097
+ fs34.writeFileSync(reportPath, JSON.stringify(report, null, 2));
59279
59098
  return {
59280
59099
  success: issues.filter((i) => i.severity === "error").length === 0,
59281
59100
  message: `${report.errors} errors, ${report.warnings} warnings across ${report.nodeCount} nodes`,
@@ -59308,14 +59127,14 @@ var skill2 = {
59308
59127
  }
59309
59128
  },
59310
59129
  async execute(params, context) {
59311
- const fs35 = await import("node:fs");
59312
- const path39 = await import("node:path");
59130
+ const fs34 = await import("node:fs");
59131
+ const path38 = await import("node:path");
59313
59132
  const { COMPAT_RESULT_CAVEAT: COMPAT_RESULT_CAVEAT2, formatPackageStatus: formatPackageStatus2, formatScanCounts: formatScanCounts2, scanDeps: scanDeps2 } = await Promise.resolve().then(() => (init_web(), web_exports));
59314
- const packagePath = path39.join(context.projectDir, "package.json");
59315
- if (!fs35.existsSync(packagePath)) {
59133
+ const packagePath = path38.join(context.projectDir, "package.json");
59134
+ if (!fs34.existsSync(packagePath)) {
59316
59135
  return { success: false, message: "No package.json found" };
59317
59136
  }
59318
- const parsed = JSON.parse(fs35.readFileSync(packagePath, "utf8"));
59137
+ const parsed = JSON.parse(fs34.readFileSync(packagePath, "utf8"));
59319
59138
  if (!parsed || typeof parsed !== "object") {
59320
59139
  return { success: false, message: "package.json is not an object" };
59321
59140
  }
@@ -59327,9 +59146,9 @@ var skill2 = {
59327
59146
  }) : scanDeps2(parsed);
59328
59147
  const packageResult = params.packageName ? scan.packages[0] : void 0;
59329
59148
  const message = packageResult ? `${params.packageName}: ${formatPackageStatus2(packageResult)}. ${COMPAT_RESULT_CAVEAT2}` : `${formatScanCounts2(scan)}. ${COMPAT_RESULT_CAVEAT2}`;
59330
- const reportPath = path39.join(context.outputDir, "compat-report.json");
59331
- fs35.mkdirSync(path39.dirname(reportPath), { recursive: true });
59332
- fs35.writeFileSync(reportPath, `${JSON.stringify(scan, null, 2)}
59149
+ const reportPath = path38.join(context.outputDir, "compat-report.json");
59150
+ fs34.mkdirSync(path38.dirname(reportPath), { recursive: true });
59151
+ fs34.writeFileSync(reportPath, `${JSON.stringify(scan, null, 2)}
59333
59152
  `);
59334
59153
  return {
59335
59154
  success: true,
@@ -59371,8 +59190,8 @@ var skill3 = {
59371
59190
  record: { type: "boolean", description: "Record video of the flow" }
59372
59191
  },
59373
59192
  async execute(params, context) {
59374
- const fs35 = await import("fs");
59375
- const path39 = await import("path");
59193
+ const fs34 = await import("fs");
59194
+ const path38 = await import("path");
59376
59195
  const yaml = await Promise.resolve().then(() => (init_browser(), browser_exports));
59377
59196
  const { DEFAULT_SOOTSIM_BRIDGE_PORT: DEFAULT_SOOTSIM_BRIDGE_PORT3 } = await Promise.resolve().then(() => (init_bridge_constants(), bridge_constants_exports));
59378
59197
  const { SootSimBridgeHost: SootSimBridgeHost2 } = await Promise.resolve().then(() => (init_bridge_host(), bridge_host_exports));
@@ -59382,7 +59201,7 @@ var skill3 = {
59382
59201
  const host2 = new SootSimBridgeHost2({ port: DEFAULT_SOOTSIM_BRIDGE_PORT3 });
59383
59202
  host2.start({ silent: true });
59384
59203
  try {
59385
- const flowContent = fs35.readFileSync(params.flowPath, "utf8");
59204
+ const flowContent = fs34.readFileSync(params.flowPath, "utf8");
59386
59205
  const fmMatch = flowContent.match(/^---\n([\s\S]*?)\n---\n?/);
59387
59206
  const stepsBody = fmMatch ? flowContent.slice(fmMatch[0].length) : flowContent;
59388
59207
  const steps = yaml.parse(stepsBody);
@@ -59409,7 +59228,7 @@ var skill3 = {
59409
59228
  });
59410
59229
  const driver = new SootSimBridgeFlowRunner2(bridge, {
59411
59230
  screenshotDir: context.outputDir,
59412
- flowDir: path39.dirname(path39.resolve(params.flowPath)),
59231
+ flowDir: path38.dirname(path38.resolve(params.flowPath)),
59413
59232
  simId,
59414
59233
  recordingOutputDir: params.record ? context.outputDir : void 0
59415
59234
  });
@@ -59431,7 +59250,7 @@ var skill3 = {
59431
59250
  simId,
59432
59251
  videoPath: videoPath || void 0
59433
59252
  },
59434
- artifacts: videoPath ? [{ type: "video", name: path39.basename(videoPath), path: videoPath }] : void 0
59253
+ artifacts: videoPath ? [{ type: "video", name: path38.basename(videoPath), path: videoPath }] : void 0
59435
59254
  };
59436
59255
  } finally {
59437
59256
  try {
@@ -59478,8 +59297,8 @@ var skill4 = {
59478
59297
  },
59479
59298
  async execute(params, context) {
59480
59299
  const { chromium } = await import("playwright");
59481
- const path39 = await import("path");
59482
- const fs35 = await import("fs");
59300
+ const path38 = await import("path");
59301
+ const fs34 = await import("fs");
59483
59302
  const browser = await launchReapedChrome((options) => chromium.launch(options), {
59484
59303
  headless: true
59485
59304
  });
@@ -59507,9 +59326,9 @@ var skill4 = {
59507
59326
  ...profile,
59508
59327
  fps: syncCount > 0 ? (syncCount / (duration / 1e3)).toFixed(1) : "0"
59509
59328
  };
59510
- const reportPath = path39.join(context.outputDir, "perf-report.json");
59511
- fs35.mkdirSync(path39.dirname(reportPath), { recursive: true });
59512
- fs35.writeFileSync(reportPath, JSON.stringify(report, null, 2));
59329
+ const reportPath = path38.join(context.outputDir, "perf-report.json");
59330
+ fs34.mkdirSync(path38.dirname(reportPath), { recursive: true });
59331
+ fs34.writeFileSync(reportPath, JSON.stringify(report, null, 2));
59513
59332
  return {
59514
59333
  success: true,
59515
59334
  message: `${report.fps} fps, ${profile.avgSyncMs?.toFixed(1)}ms avg sync, ${nodeCount} nodes`,
@@ -59542,8 +59361,8 @@ var skill5 = {
59542
59361
  },
59543
59362
  async execute(params, context) {
59544
59363
  const { chromium } = await import("playwright");
59545
- const path39 = await import("path");
59546
- const fs35 = await import("fs");
59364
+ const path38 = await import("path");
59365
+ const fs34 = await import("fs");
59547
59366
  const browser = await launchReapedChrome((options) => chromium.launch(options), {
59548
59367
  headless: true
59549
59368
  });
@@ -59551,8 +59370,8 @@ var skill5 = {
59551
59370
  try {
59552
59371
  await page.goto(context.url, { waitUntil: "networkidle" });
59553
59372
  await page.waitForTimeout(2e3);
59554
- const outputPath = path39.join(context.outputDir, `${params.name}.png`);
59555
- fs35.mkdirSync(path39.dirname(outputPath), { recursive: true });
59373
+ const outputPath = path38.join(context.outputDir, `${params.name}.png`);
59374
+ fs34.mkdirSync(path38.dirname(outputPath), { recursive: true });
59556
59375
  await page.screenshot({ path: outputPath });
59557
59376
  return {
59558
59377
  success: true,
@@ -59593,8 +59412,8 @@ var skill6 = {
59593
59412
  },
59594
59413
  async execute(params, context) {
59595
59414
  const { chromium } = await import("playwright");
59596
- const path39 = await import("path");
59597
- const fs35 = await import("fs");
59415
+ const path38 = await import("path");
59416
+ const fs34 = await import("fs");
59598
59417
  const browser = await launchReapedChrome((options) => chromium.launch(options), {
59599
59418
  headless: true
59600
59419
  });
@@ -59602,14 +59421,14 @@ var skill6 = {
59602
59421
  try {
59603
59422
  await page.goto(context.url, { waitUntil: "networkidle" });
59604
59423
  await page.waitForTimeout(2e3);
59605
- const currentPath = path39.join(context.outputDir, `${params.name}-current.png`);
59606
- fs35.mkdirSync(path39.dirname(currentPath), { recursive: true });
59424
+ const currentPath = path38.join(context.outputDir, `${params.name}-current.png`);
59425
+ fs34.mkdirSync(path38.dirname(currentPath), { recursive: true });
59607
59426
  await page.screenshot({ path: currentPath });
59608
59427
  try {
59609
59428
  const { PNG } = await import("pngjs");
59610
59429
  const pixelmatch = (await import("pixelmatch")).default;
59611
- const baseline = PNG.sync.read(fs35.readFileSync(params.baseline));
59612
- const current = PNG.sync.read(fs35.readFileSync(currentPath));
59430
+ const baseline = PNG.sync.read(fs34.readFileSync(params.baseline));
59431
+ const current = PNG.sync.read(fs34.readFileSync(currentPath));
59613
59432
  const { width, height } = baseline;
59614
59433
  const diff = new PNG({ width, height });
59615
59434
  const numDiffPixels = pixelmatch(
@@ -59620,8 +59439,8 @@ var skill6 = {
59620
59439
  height,
59621
59440
  { threshold: params.threshold || 0.1 }
59622
59441
  );
59623
- const diffPath = path39.join(context.outputDir, `${params.name}-diff.png`);
59624
- fs35.writeFileSync(diffPath, PNG.sync.write(diff));
59442
+ const diffPath = path38.join(context.outputDir, `${params.name}-diff.png`);
59443
+ fs34.writeFileSync(diffPath, PNG.sync.write(diff));
59625
59444
  const totalPixels = width * height;
59626
59445
  const diffPercent = (numDiffPixels / totalPixels * 100).toFixed(2);
59627
59446
  return {
@@ -59685,10 +59504,10 @@ var skillRegistry = {
59685
59504
  },
59686
59505
  // load skills from a project manifest (rnx-skills.json)
59687
59506
  async loadFromManifest(projectDir) {
59688
- const manifestPath = path38.join(projectDir, "rnx-skills.json");
59689
- if (!fs34.existsSync(manifestPath)) return;
59507
+ const manifestPath = path37.join(projectDir, "rnx-skills.json");
59508
+ if (!fs33.existsSync(manifestPath)) return;
59690
59509
  try {
59691
- const manifest = JSON.parse(fs34.readFileSync(manifestPath, "utf8"));
59510
+ const manifest = JSON.parse(fs33.readFileSync(manifestPath, "utf8"));
59692
59511
  if (Array.isArray(manifest.skills)) {
59693
59512
  for (const entry of manifest.skills) {
59694
59513
  if (typeof entry === "string") {
@@ -59699,7 +59518,7 @@ var skillRegistry = {
59699
59518
  }
59700
59519
  } else if (entry.file) {
59701
59520
  try {
59702
- const mod = await import(path38.resolve(projectDir, entry.file));
59521
+ const mod = await import(path37.resolve(projectDir, entry.file));
59703
59522
  if (mod.skill) this.register(mod.skill);
59704
59523
  } catch {
59705
59524
  }
@@ -59712,10 +59531,10 @@ var skillRegistry = {
59712
59531
  // auto-discover skills based on project dependencies
59713
59532
  suggestSkills(projectDir) {
59714
59533
  const suggestions = [];
59715
- const pkgPath = path38.join(projectDir, "package.json");
59716
- if (!fs34.existsSync(pkgPath)) return suggestions;
59534
+ const pkgPath = path37.join(projectDir, "package.json");
59535
+ if (!fs33.existsSync(pkgPath)) return suggestions;
59717
59536
  try {
59718
- const pkg = JSON.parse(fs34.readFileSync(pkgPath, "utf8"));
59537
+ const pkg = JSON.parse(fs33.readFileSync(pkgPath, "utf8"));
59719
59538
  const deps = { ...pkg.dependencies, ...pkg.devDependencies };
59720
59539
  if (deps["detox"] || deps["maestro"]) {
59721
59540
  suggestions.push("maestro-test");