peachsim 0.1.627 → 0.1.628

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 (92) hide show
  1. package/LICENSE +1 -1
  2. package/cli/bin.ts +6 -2
  3. package/cli/bridge-flow-runner.ts +79 -72
  4. package/cli/commands/cleanup.ts +6 -6
  5. package/cli/commands/control.ts +4 -5
  6. package/cli/commands/detox.ts +25 -11
  7. package/cli/commands/flow.ts +3 -2
  8. package/cli/commands/inspect.ts +22 -37
  9. package/cli/commands/mode.ts +11 -7
  10. package/cli/commands/report-issue.ts +1 -1
  11. package/cli/commands/setup.ts +16 -11
  12. package/cli/commands/show-touches-mode.ts +33 -0
  13. package/cli/commands/skills.ts +16 -0
  14. package/cli/commands/test.ts +8 -1
  15. package/cli/commands/welcome.ts +3 -3
  16. package/cli/drivers/playwright-sim-host.ts +6 -5
  17. package/cli/help-core.ts +9 -4
  18. package/cli/internal-child.ts +14 -2
  19. package/cli/levenshtein.ts +27 -0
  20. package/cli/main.ts +28 -18
  21. package/cli/ws-bridge.ts +3 -2
  22. package/detox/index.ts +234 -7
  23. package/dist-lib/agent-daemon-client.cjs +1 -1
  24. package/dist-lib/agent-events.cjs +1 -1
  25. package/dist-lib/agent-identity.cjs +1 -1
  26. package/dist-lib/agent-sessions.cjs +1 -1
  27. package/dist-lib/attached-projects.cjs +1 -1
  28. package/dist-lib/auth/shared-session.cjs +1 -1
  29. package/dist-lib/backend-origin.cjs +1 -1
  30. package/dist-lib/beta.cjs +1 -1
  31. package/dist-lib/beta.mjs +1 -1
  32. package/dist-lib/bridge-constants.cjs +1 -1
  33. package/dist-lib/bridge-contract-input.cjs +1 -1
  34. package/dist-lib/bridge-contract-input.mjs +1 -1
  35. package/dist-lib/bridge-contract.cjs +1 -1
  36. package/dist-lib/bridge-contract.mjs +1 -1
  37. package/dist-lib/capture-contract.cjs +1 -1
  38. package/dist-lib/capture-contract.mjs +1 -1
  39. package/dist-lib/cli-constants.cjs +1 -1
  40. package/dist-lib/cloud-contract.cjs +1 -1
  41. package/dist-lib/cloud-contract.mjs +1 -1
  42. package/dist-lib/cloud-test-args.cjs +1 -1
  43. package/dist-lib/cloud-test-args.mjs +1 -1
  44. package/dist-lib/cloud.cjs +1 -1
  45. package/dist-lib/cloud.mjs +1 -1
  46. package/dist-lib/config.cjs +1 -1
  47. package/dist-lib/detox/index.cjs +170 -13
  48. package/dist-lib/dev-bundle-resolution.cjs +2 -2
  49. package/dist-lib/home-paths.cjs +1 -1
  50. package/dist-lib/host/bridge-host.cjs +42 -37
  51. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  52. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  53. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  54. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  55. package/dist-lib/host/websocket-proxy.cjs +1 -1
  56. package/dist-lib/index.cjs +44 -5
  57. package/dist-lib/jump-to-source-babel.cjs +1 -1
  58. package/dist-lib/jump-to-source-native.cjs +1 -1
  59. package/dist-lib/menu.cjs +7 -1
  60. package/dist-lib/menu.mjs +7 -1
  61. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  62. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  63. package/dist-lib/metro-production-bundle.cjs +1 -1
  64. package/dist-lib/metro-production-bundle.mjs +1 -1
  65. package/dist-lib/metro.cjs +43 -4
  66. package/dist-lib/profiles.cjs +1 -1
  67. package/dist-lib/public-brand.cjs +1 -1
  68. package/dist-lib/react-native-host-modules.cjs +1 -1
  69. package/dist-lib/react-native-host-modules.mjs +1 -1
  70. package/dist-lib/render-mode.cjs +1 -1
  71. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  72. package/dist-lib/sdk.cjs +1 -1
  73. package/dist-lib/sdk.mjs +1 -1
  74. package/dist-lib/skills.cjs +140 -149
  75. package/dist-lib/swift-compile.cjs +1 -1
  76. package/dist-lib/swift-compile.mjs +1 -1
  77. package/dist-lib/swift-package.cjs +1 -1
  78. package/dist-lib/swift-package.mjs +1 -1
  79. package/dist-lib/swift-submit.cjs +1 -1
  80. package/dist-lib/swift-submit.mjs +1 -1
  81. package/dist-lib/swift.cjs +7234 -7069
  82. package/dist-lib/vite-kotlin.cjs +1 -1
  83. package/dist-lib/vite-swift.cjs +1 -1
  84. package/dist-lib/vite.cjs +43 -4
  85. package/package.json +1 -1
  86. package/skills/contrast/SKILL.md +1 -1
  87. package/src/dev-bundle-resolution.ts +1 -1
  88. package/src/host/bridge-host.ts +2 -34
  89. package/src/menu.ts +7 -0
  90. package/src/native-seam-manifest.ts +4 -16
  91. package/src/runtime-assets.ts +59 -2
  92. package/src/vite-plugin.ts +723 -25
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1028,7 +1028,7 @@ function resolveDefaultDevBridgeLockfile() {
1028
1028
  ) ?? sameCheckout[0];
1029
1029
  }
1030
1030
  }
1031
- return lockfiles.find((lockfile) => lockfile.bridgePort === DEFAULT_SOOTSIM_BRIDGE_PORT) ?? lockfiles[0];
1031
+ return lockfiles.find((lockfile) => lockfile.bridgePort === DEFAULT_SOOTSIM_BRIDGE_PORT) ?? null;
1032
1032
  }
1033
1033
  function resolveBridgeWorld() {
1034
1034
  const homeDir = rnxHomeDir();
@@ -4013,7 +4013,11 @@ var MIME_TYPES = {
4013
4013
  ".woff": "font/woff",
4014
4014
  ".woff2": "font/woff2",
4015
4015
  ".mp3": "audio/mpeg",
4016
- ".wav": "audio/wav"
4016
+ ".wav": "audio/wav",
4017
+ ".mp4": "video/mp4",
4018
+ ".m4v": "video/mp4",
4019
+ ".mov": "video/quicktime",
4020
+ ".webm": "video/webm"
4017
4021
  };
4018
4022
  var ROOT_RUNTIME_PATHS = [
4019
4023
  "/assets/",
@@ -4027,7 +4031,7 @@ var ROOT_RUNTIME_PATHS = [
4027
4031
  "/spike/",
4028
4032
  "/test-wallpaper.jpg",
4029
4033
  "/preview-sw.js",
4030
- "/sootsim.svg",
4034
+ "/peach.svg",
4031
4035
  "/bedrock-sqlite.wasm",
4032
4036
  "/bedrock-sqlite.js",
4033
4037
  "/sootsim/"
@@ -4111,7 +4115,42 @@ function serveRuntimeFile(req, res, fullPath) {
4111
4115
  res.end();
4112
4116
  return;
4113
4117
  }
4114
- import_fs3.default.createReadStream(fullPath).pipe(res);
4118
+ sendFileWithRanges(req, res, fullPath, stat.size, {});
4119
+ }
4120
+ function sendFileWithRanges(req, res, filePath, total, headers) {
4121
+ const head = (req?.method || "GET").toUpperCase() === "HEAD";
4122
+ const range = /^bytes=(\d*)-(\d*)$/.exec(req?.headers?.range || "");
4123
+ const invalid = range && range[1] && range[2] && Number(range[2]) < Number(range[1]);
4124
+ if (range && (range[1] || range[2]) && !invalid) {
4125
+ const [, startRaw, endRaw] = range;
4126
+ const start = startRaw ? Number(startRaw) : Math.max(0, total - Number(endRaw));
4127
+ const end = startRaw && endRaw ? Math.min(Number(endRaw), total - 1) : total - 1;
4128
+ if (start > end || start >= total) {
4129
+ res.writeHead(416, { ...headers, "Content-Range": `bytes */${total}` });
4130
+ res.end();
4131
+ return;
4132
+ }
4133
+ res.writeHead(206, {
4134
+ ...headers,
4135
+ "Content-Range": `bytes ${start}-${end}/${total}`,
4136
+ "Accept-Ranges": "bytes",
4137
+ "Content-Length": String(end - start + 1)
4138
+ });
4139
+ if (head) res.end();
4140
+ else streamFile(res, import_fs3.default.createReadStream(filePath, { start, end }));
4141
+ return;
4142
+ }
4143
+ res.writeHead(200, {
4144
+ ...headers,
4145
+ "Accept-Ranges": "bytes",
4146
+ "Content-Length": String(total)
4147
+ });
4148
+ if (head || total === 0) res.end();
4149
+ else streamFile(res, import_fs3.default.createReadStream(filePath, { start: 0, end: total - 1 }));
4150
+ }
4151
+ function streamFile(res, stream) {
4152
+ stream.on("error", (error) => res.destroy(error));
4153
+ stream.pipe(res);
4115
4154
  }
4116
4155
 
4117
4156
  // src/vite-plugin-one.ts
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -404,6 +404,12 @@ function windowMenu(state) {
404
404
  checked: state.showBezels,
405
405
  action: "toggle-bezels"
406
406
  },
407
+ {
408
+ label: "Show Touches",
409
+ type: "checkbox",
410
+ checked: state.showTouches,
411
+ action: "toggle-touches"
412
+ },
407
413
  {
408
414
  label: "Show Menu Bar",
409
415
  type: "checkbox",
package/dist-lib/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/public-brand.ts
4
4
  var name = "Peach";
@@ -363,6 +363,12 @@ function windowMenu(state) {
363
363
  checked: state.showBezels,
364
364
  action: "toggle-bezels"
365
365
  },
366
+ {
367
+ label: "Show Touches",
368
+ type: "checkbox",
369
+ checked: state.showTouches,
370
+ action: "toggle-touches"
371
+ },
366
372
  {
367
373
  label: "Show Menu Bar",
368
374
  type: "checkbox",
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/is-record.ts
4
4
  function isRecord(value) {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/metro-production-bundle.ts
4
4
  var RNXSIM_METRO_MODULE_PATHS_PREFIX = "globalThis.__sootsimModulePaths=";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -612,7 +612,11 @@ var MIME_TYPES = {
612
612
  ".woff": "font/woff",
613
613
  ".woff2": "font/woff2",
614
614
  ".mp3": "audio/mpeg",
615
- ".wav": "audio/wav"
615
+ ".wav": "audio/wav",
616
+ ".mp4": "video/mp4",
617
+ ".m4v": "video/mp4",
618
+ ".mov": "video/quicktime",
619
+ ".webm": "video/webm"
616
620
  };
617
621
  var ROOT_RUNTIME_PATHS = [
618
622
  "/assets/",
@@ -626,7 +630,7 @@ var ROOT_RUNTIME_PATHS = [
626
630
  "/spike/",
627
631
  "/test-wallpaper.jpg",
628
632
  "/preview-sw.js",
629
- "/sootsim.svg",
633
+ "/peach.svg",
630
634
  "/bedrock-sqlite.wasm",
631
635
  "/bedrock-sqlite.js",
632
636
  "/sootsim/"
@@ -710,7 +714,42 @@ function serveRuntimeFile(req, res, fullPath) {
710
714
  res.end();
711
715
  return;
712
716
  }
713
- import_fs.default.createReadStream(fullPath).pipe(res);
717
+ sendFileWithRanges(req, res, fullPath, stat.size, {});
718
+ }
719
+ function sendFileWithRanges(req, res, filePath, total, headers) {
720
+ const head = (req?.method || "GET").toUpperCase() === "HEAD";
721
+ const range = /^bytes=(\d*)-(\d*)$/.exec(req?.headers?.range || "");
722
+ const invalid = range && range[1] && range[2] && Number(range[2]) < Number(range[1]);
723
+ if (range && (range[1] || range[2]) && !invalid) {
724
+ const [, startRaw, endRaw] = range;
725
+ const start = startRaw ? Number(startRaw) : Math.max(0, total - Number(endRaw));
726
+ const end = startRaw && endRaw ? Math.min(Number(endRaw), total - 1) : total - 1;
727
+ if (start > end || start >= total) {
728
+ res.writeHead(416, { ...headers, "Content-Range": `bytes */${total}` });
729
+ res.end();
730
+ return;
731
+ }
732
+ res.writeHead(206, {
733
+ ...headers,
734
+ "Content-Range": `bytes ${start}-${end}/${total}`,
735
+ "Accept-Ranges": "bytes",
736
+ "Content-Length": String(end - start + 1)
737
+ });
738
+ if (head) res.end();
739
+ else streamFile(res, import_fs.default.createReadStream(filePath, { start, end }));
740
+ return;
741
+ }
742
+ res.writeHead(200, {
743
+ ...headers,
744
+ "Accept-Ranges": "bytes",
745
+ "Content-Length": String(total)
746
+ });
747
+ if (head || total === 0) res.end();
748
+ else streamFile(res, import_fs.default.createReadStream(filePath, { start: 0, end: total - 1 }));
749
+ }
750
+ function streamFile(res, stream) {
751
+ stream.on("error", (error) => res.destroy(error));
752
+ stream.pipe(res);
714
753
  }
715
754
 
716
755
  // src/metro-plugin.ts
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/react-native-host-modules.ts
4
4
  var REACT_NATIVE_PASSTHROUGH_SPECIFIERS = [
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
package/dist-lib/sdk.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.627 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.628 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  var __defProp = Object.defineProperty;
3
3
  var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
4
4
  var __publicField = (obj, key, value) => __defNormalProp(obj, typeof key !== "symbol" ? key + "" : key, value);