peachsim 0.1.631 → 0.1.632

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 (75) hide show
  1. package/README.md +9 -1
  2. package/cli/commands/maestro.ts +5 -1
  3. package/cli/commands/test.ts +29 -1
  4. package/cli/drivers/playwright-core-pin.ts +10 -0
  5. package/cli/drivers/playwright-provisioning.ts +36 -1
  6. package/cli/drivers/playwright.ts +26 -19
  7. package/cli/shell-init.ts +6 -1
  8. package/cli/ws-bridge.ts +8 -2
  9. package/dist-lib/agent-daemon-client.cjs +1 -1
  10. package/dist-lib/agent-events.cjs +1 -1
  11. package/dist-lib/agent-identity.cjs +1 -1
  12. package/dist-lib/agent-sessions.cjs +1 -1
  13. package/dist-lib/attached-projects.cjs +1 -1
  14. package/dist-lib/auth/shared-session.cjs +1 -1
  15. package/dist-lib/backend-origin.cjs +1 -1
  16. package/dist-lib/beta.cjs +1 -1
  17. package/dist-lib/beta.mjs +1 -1
  18. package/dist-lib/bridge-constants.cjs +1 -1
  19. package/dist-lib/bridge-contract-input.cjs +1 -1
  20. package/dist-lib/bridge-contract-input.mjs +1 -1
  21. package/dist-lib/bridge-contract.cjs +1 -1
  22. package/dist-lib/bridge-contract.mjs +1 -1
  23. package/dist-lib/capture-contract.cjs +1 -1
  24. package/dist-lib/capture-contract.mjs +1 -1
  25. package/dist-lib/cli-constants.cjs +1 -1
  26. package/dist-lib/cloud-contract.cjs +1 -1
  27. package/dist-lib/cloud-contract.mjs +1 -1
  28. package/dist-lib/cloud-test-args.cjs +17 -5
  29. package/dist-lib/cloud-test-args.mjs +17 -5
  30. package/dist-lib/cloud.cjs +1 -1
  31. package/dist-lib/cloud.mjs +1 -1
  32. package/dist-lib/config.cjs +1 -1
  33. package/dist-lib/detox/index.cjs +1 -1
  34. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  35. package/dist-lib/home-paths.cjs +6 -1
  36. package/dist-lib/host/bridge-host.cjs +48 -47
  37. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  38. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  39. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  40. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  41. package/dist-lib/host/websocket-proxy.cjs +1 -1
  42. package/dist-lib/index.cjs +7 -2
  43. package/dist-lib/jump-to-source-babel.cjs +1 -1
  44. package/dist-lib/jump-to-source-native.cjs +1 -1
  45. package/dist-lib/kotlin-host.cjs +1 -1
  46. package/dist-lib/menu.cjs +1 -1
  47. package/dist-lib/menu.mjs +1 -1
  48. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  49. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  50. package/dist-lib/metro-production-bundle.cjs +1 -1
  51. package/dist-lib/metro-production-bundle.mjs +1 -1
  52. package/dist-lib/metro.cjs +1 -1
  53. package/dist-lib/native-app-identity.cjs +1 -1
  54. package/dist-lib/native-app-identity.mjs +1 -1
  55. package/dist-lib/profiles.cjs +1 -1
  56. package/dist-lib/public-brand.cjs +1 -1
  57. package/dist-lib/react-native-host-modules.cjs +1 -1
  58. package/dist-lib/react-native-host-modules.mjs +1 -1
  59. package/dist-lib/render-mode.cjs +1 -1
  60. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  61. package/dist-lib/sdk.cjs +1 -1
  62. package/dist-lib/sdk.mjs +1 -1
  63. package/dist-lib/skills.cjs +112 -62
  64. package/dist-lib/swift-compile.cjs +1 -1
  65. package/dist-lib/swift-compile.mjs +1 -1
  66. package/dist-lib/swift-package.cjs +1 -1
  67. package/dist-lib/swift-package.mjs +1 -1
  68. package/dist-lib/swift-submit.cjs +1 -1
  69. package/dist-lib/swift-submit.mjs +1 -1
  70. package/dist-lib/swift.cjs +5 -7
  71. package/dist-lib/vite-swift.cjs +1 -1
  72. package/dist-lib/vite.cjs +1 -1
  73. package/package.json +1 -1
  74. package/src/cloud-test-args.ts +18 -6
  75. package/src/home-paths.ts +8 -0
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.631 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.632 | (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.631 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.632 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/swift-submit.ts
4
4
  var SWIFT_COMPILE_PATH = "/api/swift-compile";
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.631 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.632 | (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;
@@ -9424,15 +9424,13 @@ function resetTextureLayerFlattenState(state5) {
9424
9424
  }
9425
9425
  function releaseRasterImage(chunk) {
9426
9426
  if (chunk.kind !== "picture") return;
9427
- if (chunk.rasterImage) {
9427
+ if (chunk.rasterImageHandle) {
9428
9428
  LIVE.rasterImages--;
9429
9429
  LIVE.rasterBytes -= chunk.rasterWidth * chunk.rasterHeight * 4;
9430
- try {
9431
- chunk.rasterImage.delete();
9432
- } catch {
9433
- }
9430
+ chunk.rasterNative?._peach_raster_release(chunk.rasterImageHandle);
9434
9431
  }
9435
- chunk.rasterImage = null;
9432
+ chunk.rasterImageHandle = 0;
9433
+ chunk.rasterNative = null;
9436
9434
  chunk.rasterWidth = 0;
9437
9435
  chunk.rasterHeight = 0;
9438
9436
  chunk.rasterDpr = 0;
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.631 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.632 | (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/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.631 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.632 | (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/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "peachsim",
3
- "version": "0.1.631",
3
+ "version": "0.1.632",
4
4
  "description": "Vite and Metro plugins, testing drivers, and SDK exports for peach.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "SEE LICENSE IN LICENSE",
@@ -1,8 +1,8 @@
1
- // hosted `rnx test` selection args: the argv slice a cloud submitter
1
+ // hosted `peach test` selection and explicit environment arguments: the argv slice a cloud submitter
2
2
  // forwards and the recorder appends verbatim to its executor invocation.
3
3
  //
4
- // selection only. the flags below choose WHICH tests run; everything
5
- // about HOW they run (workers, timeouts, shards, devices, environment)
4
+ // the flags below choose tests and provide explicit flow variables. everything
5
+ // about HOW they run (workers, timeouts, shards, devices)
6
6
  // stays with the recorder that owns the execution environment, and
7
7
  // everything about WHERE they run (app, origin, tunnel) is consumed by
8
8
  // the submitter. a flag outside this list never reaches the executor:
@@ -22,6 +22,8 @@ export const CLOUD_TEST_VALUE_FLAGS: readonly string[] = [
22
22
  '--include-tags',
23
23
  '--exclude-tags',
24
24
  '--grep',
25
+ '--env',
26
+ '-e',
25
27
  ]
26
28
 
27
29
  const CLOUD_TEST_VALUE_FLAG_SET = new Set<string>(CLOUD_TEST_VALUE_FLAGS)
@@ -57,7 +59,7 @@ export function parseCloudTestArgs(value: unknown): CloudTestArgsVerdict {
57
59
  return { ok: false, message: 'testArgs entries must be non-empty strings' }
58
60
  }
59
61
  if (entry.length > CLOUD_TEST_ARG_MAX_LENGTH || entry.includes('\0')) {
60
- return { ok: false, message: `testArgs entry is too long or carries a NUL byte: ${entry.slice(0, 60)}` }
62
+ return { ok: false, message: 'testArgs entry is too long or carries a NUL byte' }
61
63
  }
62
64
  bytes += encoder.encode(entry).length
63
65
  if (bytes > CLOUD_TEST_ARGS_MAX_BYTES) {
@@ -80,12 +82,19 @@ export function parseCloudTestArgs(value: unknown): CloudTestArgsVerdict {
80
82
  const eq = entry.indexOf('=')
81
83
  const head = eq > 0 ? entry.slice(0, eq) : entry
82
84
  if (!isCloudTestValueFlag(head)) {
83
- return { ok: false, message: `testArgs carries an unknown flag: ${head.slice(0, 60)}` }
85
+ return {
86
+ ok: false,
87
+ message: `testArgs carries an unknown flag: ${head.slice(0, 60)}`,
88
+ }
84
89
  }
85
90
  if (eq > 0) {
86
- if (!entry.slice(eq + 1)) {
91
+ const value = entry.slice(eq + 1)
92
+ if (!value) {
87
93
  return { ok: false, message: `${head} expects a value` }
88
94
  }
95
+ if ((head === '--env' || head === '-e') && value.indexOf('=') < 1) {
96
+ return { ok: false, message: `${head} expects KEY=VALUE with a non-empty key` }
97
+ }
89
98
  args.push(entry)
90
99
  continue
91
100
  }
@@ -93,6 +102,9 @@ export function parseCloudTestArgs(value: unknown): CloudTestArgsVerdict {
93
102
  if (val === undefined || val.startsWith('-')) {
94
103
  return { ok: false, message: `${head} expects a value` }
95
104
  }
105
+ if ((head === '--env' || head === '-e') && val.indexOf('=') < 1) {
106
+ return { ok: false, message: `${head} expects KEY=VALUE with a non-empty key` }
107
+ }
96
108
  args.push(entry, val)
97
109
  i += 1
98
110
  }
package/src/home-paths.ts CHANGED
@@ -9,6 +9,10 @@
9
9
  // │ alternative to a symlink)
10
10
  // ├── electron/
11
11
  // │ └── <version>/ pinned electron binary (future: playwright-style)
12
+ // ├── playwright-core/
13
+ // │ └── <version>/node_modules/playwright-core
14
+ // │ the pinned package, provisioned on first need when
15
+ // │ neither the app nor the CLI's install tree has one
12
16
  // ├── profiles/
13
17
  // │ └── profiles.json storage profile metadata
14
18
  // ├── cache/
@@ -126,6 +130,10 @@ export function electronVersionDir(version: string): string {
126
130
  return path.join(electronDir(), version)
127
131
  }
128
132
 
133
+ export function playwrightCoreDir(version: string): string {
134
+ return path.join(rnxHomeDir(), 'playwright-core', version)
135
+ }
136
+
129
137
  export function profilesDir(): string {
130
138
  return path.join(rnxHomeDir(), 'profiles')
131
139
  }