peachsim 0.1.527 → 0.1.570

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 (158) hide show
  1. package/README.md +26 -26
  2. package/cli/app-fonts.ts +1 -1
  3. package/cli/app-splash.ts +1 -1
  4. package/cli/bin.ts +1 -1
  5. package/cli/bridge-diagnostics.ts +1 -1
  6. package/cli/bridge-flow-runner.ts +57 -5
  7. package/cli/cloud-client.ts +273 -6
  8. package/cli/cloud-dispatch.ts +22 -2
  9. package/cli/cloud-session.ts +60 -4
  10. package/cli/cloud-test-tunnel.ts +354 -0
  11. package/cli/commands/box/bundle-plane.ts +2 -2
  12. package/cli/commands/box/checkout-plane.ts +1 -1
  13. package/cli/commands/box/rnx-command.ts +2 -2
  14. package/cli/commands/box/search-command.ts +2 -2
  15. package/cli/commands/box.ts +8 -8
  16. package/cli/commands/compat.ts +1 -1
  17. package/cli/commands/control.ts +22 -3
  18. package/cli/commands/detox.ts +1 -1
  19. package/cli/commands/device.ts +1 -1
  20. package/cli/commands/diagnose.ts +1 -1
  21. package/cli/commands/film.ts +1 -1
  22. package/cli/commands/flow.ts +60 -3
  23. package/cli/commands/inspect/actions.ts +1 -1
  24. package/cli/commands/inspect/core.ts +6 -7
  25. package/cli/commands/inspect/find.ts +2 -1
  26. package/cli/commands/inspect/resolve-target.ts +5 -3
  27. package/cli/commands/inspect/shared.ts +1 -1
  28. package/cli/commands/inspect/wait-event.ts +1 -1
  29. package/cli/commands/inspect/wait-selector.ts +15 -4
  30. package/cli/commands/inspect.ts +19 -14
  31. package/cli/commands/maestro.ts +464 -43
  32. package/cli/commands/permissions.ts +1 -1
  33. package/cli/commands/platform.ts +205 -8
  34. package/cli/commands/preview.ts +2 -2
  35. package/cli/commands/record.ts +2 -2
  36. package/cli/commands/report-issue.ts +2 -2
  37. package/cli/commands/screenshot-layers.ts +1 -1
  38. package/cli/commands/screenshot.ts +1 -1
  39. package/cli/commands/setup.ts +2 -2
  40. package/cli/commands/test.ts +440 -115
  41. package/cli/commands/three-mode.ts +1 -1
  42. package/cli/commands/upload.ts +5 -5
  43. package/cli/commands/what-happened.ts +1 -1
  44. package/cli/desktop-companion.ts +3 -3
  45. package/cli/drivers/playwright-sim-host.ts +2 -2
  46. package/cli/flow-file.ts +7 -0
  47. package/cli/flow-live-status.ts +65 -8
  48. package/cli/help-core.ts +3 -3
  49. package/cli/hidden-runtime-alias.ts +1 -1
  50. package/cli/maestro-report.ts +178 -0
  51. package/cli/main.ts +1 -1
  52. package/cli/outbound-endpoints.ts +185 -136
  53. package/cli/parse-args.ts +1 -1
  54. package/cli/registry.ts +1 -1
  55. package/cli/resolve-assets.ts +1 -1
  56. package/cli/run-registry.ts +8 -0
  57. package/cli/send-to-box.ts +4 -4
  58. package/cli/ws-bridge.ts +3 -5
  59. package/detox/expectations.ts +1 -1
  60. package/detox/gestures.ts +2 -2
  61. package/detox/index.ts +71 -29
  62. package/detox/jest-preset.cjs +3 -3
  63. package/detox/jest-setup-after-env.cjs +1 -1
  64. package/dist-lib/agent-daemon-client.cjs +2 -2
  65. package/dist-lib/agent-events.cjs +1 -1
  66. package/dist-lib/agent-identity.cjs +1 -1
  67. package/dist-lib/agent-sessions.cjs +2 -2
  68. package/dist-lib/attached-projects.cjs +2 -2
  69. package/dist-lib/auth/shared-session.cjs +1 -1
  70. package/dist-lib/backend-origin.cjs +1 -1
  71. package/dist-lib/beta.cjs +1 -1
  72. package/dist-lib/beta.mjs +1 -1
  73. package/dist-lib/bridge-constants.cjs +1 -1
  74. package/dist-lib/bridge-contract-input.cjs +1 -1
  75. package/dist-lib/bridge-contract-input.mjs +1 -1
  76. package/dist-lib/bridge-contract.cjs +1 -1
  77. package/dist-lib/bridge-contract.mjs +1 -1
  78. package/dist-lib/capture-contract.cjs +94 -3
  79. package/dist-lib/capture-contract.mjs +93 -3
  80. package/dist-lib/cli-constants.cjs +1 -1
  81. package/dist-lib/cloud-contract.cjs +1 -1
  82. package/dist-lib/cloud-contract.mjs +1 -1
  83. package/dist-lib/cloud.cjs +2 -2
  84. package/dist-lib/cloud.mjs +2 -2
  85. package/dist-lib/config.cjs +1 -1
  86. package/dist-lib/detox/index.cjs +106 -25
  87. package/dist-lib/detox/jest-preset.cjs +3 -3
  88. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  89. package/dist-lib/home-paths.cjs +1 -1
  90. package/dist-lib/host/bridge-host.cjs +137 -61
  91. package/dist-lib/host/fetch-proxy-handler.cjs +28 -2
  92. package/dist-lib/host/fetch-proxy-overrides.cjs +33 -3
  93. package/dist-lib/host/fetch-proxy-overrides.mjs +30 -2
  94. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  95. package/dist-lib/host/websocket-proxy.cjs +1 -1
  96. package/dist-lib/index.cjs +209 -16
  97. package/dist-lib/jump-to-source-babel.cjs +1 -1
  98. package/dist-lib/jump-to-source-native.cjs +1 -1
  99. package/dist-lib/menu.cjs +2 -2
  100. package/dist-lib/menu.mjs +2 -2
  101. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  102. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  103. package/dist-lib/metro-production-bundle.cjs +3 -3
  104. package/dist-lib/metro-production-bundle.mjs +3 -3
  105. package/dist-lib/metro.cjs +8 -8
  106. package/dist-lib/profiles.cjs +1 -1
  107. package/dist-lib/public-brand.cjs +2 -2
  108. package/dist-lib/react-native-host-modules.cjs +1 -1
  109. package/dist-lib/react-native-host-modules.mjs +1 -1
  110. package/dist-lib/render-mode.cjs +1 -1
  111. package/dist-lib/scripts/dev-server-scanner.cjs +31 -15
  112. package/dist-lib/sdk.cjs +3 -2
  113. package/dist-lib/sdk.mjs +3 -2
  114. package/dist-lib/skills.cjs +362 -163
  115. package/dist-lib/swift-submit.cjs +1 -1
  116. package/dist-lib/swift-submit.mjs +1 -1
  117. package/dist-lib/swift.cjs +583 -16
  118. package/dist-lib/vite.cjs +29 -14
  119. package/package.json +9 -9
  120. package/scripts/dev-server-scanner.ts +41 -14
  121. package/scripts/optional-demo-registry.ts +3 -3
  122. package/skills/contrast/SKILL.md +9 -9
  123. package/skills/rnx-debug/SKILL.md +14 -4
  124. package/skills/rnx-perf/SKILL.md +5 -5
  125. package/skills/rnx-setup/SKILL.md +11 -11
  126. package/skills/rnx-test/SKILL.md +11 -11
  127. package/skills/rnx-visual/SKILL.md +6 -6
  128. package/src/agent-sessions.ts +3 -3
  129. package/src/attached-projects.ts +1 -1
  130. package/src/bridge-contract-input.ts +1 -1
  131. package/src/bridge-contract.ts +23 -5
  132. package/src/capture-contract.ts +145 -3
  133. package/src/config.ts +2 -2
  134. package/src/connect.ts +2 -2
  135. package/src/home-paths.ts +3 -3
  136. package/src/host/bridge-host.ts +2 -2
  137. package/src/host/fetch-proxy-handler.ts +4 -3
  138. package/src/host/fetch-proxy-overrides.ts +41 -0
  139. package/src/host/plane-host.ts +2 -2
  140. package/src/index.ts +3 -0
  141. package/src/metro-plugin.ts +4 -4
  142. package/src/metro-production-bundle.ts +2 -2
  143. package/src/native-seam-manifest.ts +6 -6
  144. package/src/public-brand.ts +1 -1
  145. package/src/rolldown-plugin-swift.ts +8 -5
  146. package/src/runtime-assets.ts +8 -6
  147. package/src/screenshots/frame-compose.ts +24 -56
  148. package/src/screenshots/org-deck.ts +1 -1
  149. package/src/screenshots/registry.ts +4 -4
  150. package/src/screenshots/schema.ts +1 -1
  151. package/src/sdk.ts +2 -2
  152. package/src/settings-bundle.ts +1 -1
  153. package/src/sim-client.ts +2 -4
  154. package/src/skills/builtin/compat-check.ts +1 -1
  155. package/src/vite-plugin-one.ts +1 -1
  156. package/src/vite-plugin-swift.ts +11 -6
  157. package/src/vite-plugin.ts +30 -17
  158. package/src/worklets-babel.ts +2 -2
@@ -133,6 +133,13 @@ export const OUTBOUND_ENDPOINTS: Record<string, OutboundEndpointDeclaration> = {
133
133
  payload:
134
134
  'the Metro JavaScript bundle selected by rnx ios --remote, then structured simulator commands and lifecycle requests',
135
135
  },
136
+ tunnel_tool_download: {
137
+ category: 'explicit-user-action',
138
+ destination: 'https://github.com/cloudflare/cloudflared/releases/latest/download/',
139
+ preConsent: false,
140
+ payload:
141
+ 'platform and architecture only, carried in the release asset name; fires only for rnx test --cloud with a live dev stack when no cloudflared binary is installed',
142
+ },
136
143
  }
137
144
 
138
145
  export interface OutboundCallDeclaration {
@@ -144,74 +151,97 @@ export interface OutboundCallDeclaration {
144
151
  // a new fetch, websocket, node HTTP request, or TCP connection has no entry and
145
152
  // fails the package test until its destination and consent behavior are declared.
146
153
  export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> = {
147
- 'packages/sootsim/cli/cloud-client.ts :: fetch :: `${apiOrigin}/v1/boxes`': {
154
+ 'packages/peachsim/cli/cloud-client.ts :: fetch :: `${apiOrigin}/v1/boxes`': {
148
155
  category: 'rnx_cloud_sim',
149
156
  count: 1,
150
157
  },
151
- 'packages/sootsim/cli/cloud-client.ts :: fetch :: `${session.apiOrigin}/v1/sims/${encodeURIComponent(session.simId)}/claim`':
152
- { category: 'rnx_cloud_sim', count: 1 },
153
- // closing a nano-box simulator deletes its box; the local names changed
154
- // with the close but the destination did not.
155
- 'packages/sootsim/cli/cloud-client.ts :: fetch :: `${session.apiOrigin}/v1/boxes/${encodeURIComponent(boxId)}`':
158
+ 'packages/peachsim/cli/cloud-client.ts :: fetch :: `${session.apiOrigin}/v1/sims/${encodeURIComponent()}/claim`':
156
159
  { category: 'rnx_cloud_sim', count: 1 },
160
+ // two call sites delete a box by id: closing a nano-box simulator, and
161
+ // closing a box from a session that is not itself the box. one destination,
162
+ // so one declaration.
163
+ 'packages/peachsim/cli/cloud-client.ts :: fetch :: `${session.apiOrigin}/v1/boxes/${encodeURIComponent()}`':
164
+ { category: 'rnx_cloud_sim', count: 2 },
157
165
  // closing an instance simulator deletes it by its own id with its own token.
158
- 'packages/sootsim/cli/cloud-client.ts :: fetch :: `${session.apiOrigin}/v1/sims/${encodeURIComponent(session.simId)}`':
166
+ 'packages/peachsim/cli/cloud-client.ts :: fetch :: `${session.apiOrigin}/v1/sims/${encodeURIComponent()}`':
167
+ { category: 'rnx_cloud_sim', count: 1 },
168
+ // the box api mirrors the sim api for a micro box: the same destination and
169
+ // the same box token, reached through the session rather than a loose id.
170
+ // driving a box sends each command to its own box.
171
+ 'packages/peachsim/cli/cloud-client.ts :: fetch :: `${this.session.apiOrigin}/v1/boxes/${encodeURIComponent()}/commands`':
172
+ { category: 'rnx_cloud_sim', count: 1 },
173
+ // stopping a box leaves it allocated, unlike the delete above.
174
+ 'packages/peachsim/cli/cloud-client.ts :: fetch :: `${session.apiOrigin}/v1/boxes/${encodeURIComponent()}/stop`':
175
+ { category: 'rnx_cloud_sim', count: 1 },
176
+ // the display grant is polled until the box hands one back; the body is
177
+ // empty, so the request carries no project or app data.
178
+ 'packages/peachsim/cli/cloud-client.ts :: fetch :: `${options.apiOrigin}/v1/boxes/${encodeURIComponent()}/display-grant`':
159
179
  { category: 'rnx_cloud_sim', count: 1 },
160
180
  // `rnx remote` creates through the instance api and lists what it made.
161
181
  // the create carries labels and wait=true in the query; the list filters
162
182
  // by the remote label.
163
- 'packages/sootsim/cli/cloud-client.ts :: fetch :: `${apiOrigin}/v1/sims?${query}`': {
164
- category: 'rnx_cloud_sim',
165
- count: 1,
166
- },
167
- 'packages/sootsim/cli/cloud-client.ts :: fetch :: `${apiOrigin}/v1/sims?${selector}`': {
183
+ 'packages/peachsim/cli/cloud-client.ts :: fetch :: `${apiOrigin}/v1/sims?${query}`': {
168
184
  category: 'rnx_cloud_sim',
169
185
  count: 1,
170
186
  },
187
+ 'packages/peachsim/cli/cloud-client.ts :: fetch :: `${apiOrigin}/v1/sims?${selector}`':
188
+ {
189
+ category: 'rnx_cloud_sim',
190
+ count: 1,
191
+ },
171
192
  // rereading one simulator and deleting one by id share the route: the
172
193
  // reattach probe reads with either credential and `rnx remote stop`
173
194
  // deletes with the account credential.
174
- 'packages/sootsim/cli/cloud-client.ts :: fetch :: `${apiOrigin}/v1/sims/${encodeURIComponent(options.simId)}`':
195
+ 'packages/peachsim/cli/cloud-client.ts :: fetch :: `${apiOrigin}/v1/sims/${encodeURIComponent()}`':
175
196
  { category: 'rnx_cloud_sim', count: 2 },
176
- 'packages/sootsim/cli/cloud-client.ts :: fetch :: `${this.session.apiOrigin}/v1/sims/${encodeURIComponent(this.session.simId)}/commands`':
197
+ 'packages/peachsim/cli/cloud-client.ts :: fetch :: `${this.session.apiOrigin}/v1/sims/${encodeURIComponent()}/commands`':
177
198
  { category: 'rnx_cloud_sim', count: 1 },
178
- 'packages/sootsim/cli/cloud-client.ts :: fetch :: bundleUrl': {
199
+ 'packages/peachsim/cli/cloud-client.ts :: fetch :: bundleUrl': {
179
200
  category: 'guest_app_network',
180
201
  count: 1,
181
202
  },
182
- 'packages/sootsim/cli/commands/test.ts :: fetch :: endpoint': {
203
+ // submitting a cloud test job (POST) and cancelling one (DELETE) share
204
+ // the jobs route: one destination, two call sites.
205
+ 'packages/peachsim/cli/commands/test.ts :: fetch :: endpoint': {
183
206
  category: 'contrast_user_action',
184
- count: 1,
207
+ count: 3,
185
208
  },
186
- 'packages/sootsim/cli/commands/test.ts :: fetch :: pollUrl': {
209
+ 'packages/peachsim/cli/commands/test.ts :: fetch :: pollUrl': {
187
210
  category: 'contrast_user_action',
188
211
  count: 1,
189
212
  },
213
+ // the live-dev-stack publisher fetches a cloudflared binary only when none
214
+ // is installed; the token proxy below it forwards to the user's own
215
+ // loopback dev server and sidecars, never anywhere remote.
216
+ 'packages/peachsim/cli/cloud-test-tunnel.ts :: fetch :: `https://github.com/cloudflare/cloudflared/releases/latest/download/${asset}`':
217
+ { category: 'tunnel_tool_download', count: 1 },
218
+ "packages/peachsim/cli/cloud-test-tunnel.ts :: node-request :: { host: '127.0.0.1', port: selectedPort, path: req.url, method: req.method, headers, }":
219
+ { category: 'local_development', count: 1 },
190
220
  // compiling a project's .swift sources needs a swift toolchain, so the
191
221
  // bundler posts them to the app's own /api/swift-compile. it only fires with
192
222
  // a compile credential and only for a project that has .swift sources.
193
- 'packages/sootsim/src/swift-submit.ts :: fetch :: url': {
223
+ 'packages/peachsim/src/swift-submit.ts :: fetch :: url': {
194
224
  category: 'swift_compile',
195
225
  count: 1,
196
226
  },
197
- 'packages/sootsim/src/cloud.ts :: fetch :: url': {
227
+ 'packages/peachsim/src/cloud.ts :: fetch :: url': {
198
228
  category: 'rnx_cloud_sim',
199
229
  count: 1,
200
230
  },
201
231
  // maestro's flow `http` API. the url is whatever the flow author wrote, and
202
232
  // it is fetched from a child process because that API is synchronous.
203
- 'packages/sootsim/cli/internal-child.ts :: fetch :: request.url': {
233
+ 'packages/peachsim/cli/internal-child.ts :: fetch :: request.url': {
204
234
  category: 'guest_app_network',
205
235
  count: 1,
206
236
  },
207
237
  // `rnx box create` uploads the checkout to the box service and then talks to
208
238
  // it. the destination is whatever the user named; there is no default.
209
- 'packages/rnx-cloud-box/src/client.ts :: fetch :: endpointOf(base, name, verb, search)':
239
+ 'packages/peach-cloud-box/src/client.ts :: fetch :: endpointOf(base, name, verb, search)':
210
240
  {
211
241
  category: 'rnx_cloud_box',
212
242
  count: 1,
213
243
  },
214
- 'packages/rnx-cloud-box/src/client.ts :: websocket :: url': {
244
+ 'packages/peach-cloud-box/src/client.ts :: websocket :: url': {
215
245
  category: 'rnx_cloud_box',
216
246
  count: 1,
217
247
  },
@@ -219,38 +249,43 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
219
249
  // the binding routes on path alone and ignores the host, so `browser.invalid`
220
250
  // is a placeholder that exists only so URL can parse the search parameters.
221
251
  // nothing leaves Cloudflare and no project content is sent.
222
- 'packages/rnx-cloud-box/src/browser-run.ts :: fetch :: sessionEndpoint(undefined, { keepAliveMs, includeTargets: true })':
252
+ 'packages/peach-cloud-box/src/browser-run.ts :: fetch :: sessionEndpoint(undefined, { keepAliveMs, includeTargets: true })':
223
253
  { category: 'rnx_cloud_box', count: 1 },
224
- 'packages/rnx-cloud-box/src/browser-run.ts :: fetch :: `https://browser.invalid/v1/devtools/browser/${sessionId}/json/list`':
254
+ 'packages/peach-cloud-box/src/browser-run.ts :: fetch :: `https://browser.invalid/v1/devtools/browser/${sessionId}/json/list`':
225
255
  { category: 'rnx_cloud_box', count: 1 },
226
256
  // twice: closing the session, and the CDP websocket upgrade that navigates a
227
257
  // target. both address the same session over the same binding.
228
- 'packages/rnx-cloud-box/src/browser-run.ts :: fetch :: `https://browser.invalid/v1/devtools/browser/${sessionId}`':
258
+ 'packages/peach-cloud-box/src/browser-run.ts :: fetch :: `https://browser.invalid/v1/devtools/browser/${sessionId}`':
229
259
  { category: 'rnx_cloud_box', count: 2 },
230
260
  // the account's own session meter: starting, listing and heartbeating the
231
261
  // session a cloud box is billed against. no project content.
232
- "packages/rnx-cloud-box/src/client.ts :: fetch :: `${options.apiOrigin.replace(/\\/+$/, '')}/api/v1/rnx/sessions${ options.accountId ? `?accountId=${encodeURIComponent(options.accountId)}` : '' }`":
262
+ "packages/peach-cloud-box/src/client.ts :: fetch :: `${options.apiOrigin.replace(/\\/+$/, '')}/api/v1/rnx/sessions${ options.accountId ? `?accountId=${encodeURIComponent()}` : '' }`":
233
263
  { category: 'contrast_user_action', count: 1 },
234
- 'packages/rnx-cloud-box/src/client.ts :: fetch :: url': {
264
+ 'packages/peach-cloud-box/src/client.ts :: fetch :: url': {
235
265
  category: 'contrast_user_action',
236
266
  count: 1,
237
267
  },
238
268
  // `rnx box connect` asks the account service which box that ID or name is
239
269
  // and for the box's own token. the account is the only thing that knows, so
240
270
  // this is the one call that turns a name into an authorized Box reference.
241
- 'packages/rnx-cloud-box/src/client.ts :: fetch :: connectUrl': {
271
+ 'packages/peach-cloud-box/src/client.ts :: fetch :: connectUrl': {
242
272
  category: 'contrast_user_action',
243
273
  count: 1,
244
274
  },
245
- "packages/rnx-cloud-box/src/box-do.ts :: fetch :: `${origin}/api/v1/rnx/sessions${serviceAuthorized ? '/internal' : ''}`":
275
+ "packages/peach-cloud-box/src/box-do.ts :: fetch :: `${origin}/api/v1/rnx/sessions${serviceAuthorized ? '/internal' : ''}`":
246
276
  { category: 'contrast_user_action', count: 1 },
247
- "packages/rnx-cloud-box/src/box-do.ts :: fetch :: `${origin}/api/v1/rnx/sessions/${ serviceAuthority ? 'internal/' : '' }${encodeURIComponent(sessionId)}${ accountId ? `?accountId=${encodeURIComponent(accountId)}` : '' }`":
277
+ "packages/peach-cloud-box/src/box-do.ts :: fetch :: `${origin}/api/v1/rnx/sessions/${ serviceAuthority ? 'internal/' : '' }${encodeURIComponent()}${ accountId ? `?accountId=${encodeURIComponent()}` : '' }`":
248
278
  { category: 'contrast_user_action', count: 1 },
249
- 'packages/rnx-cloud-box/src/box-do.ts :: fetch :: `${origin}/api/v1/rnx/sessions/internal/${encodeURIComponent(sessionId)}`':
279
+ 'packages/peach-cloud-box/src/box-do.ts :: fetch :: `${origin}/api/v1/rnx/sessions/internal/${encodeURIComponent()}`':
280
+ { category: 'contrast_user_action', count: 1 },
281
+ // stop and delete authorize the caller against the account before any
282
+ // teardown. the account service owns the verdict on a key, its scope and the
283
+ // account it names; no project content is sent.
284
+ 'packages/peach-cloud-box/src/box-do.ts :: fetch :: `${origin}/api/v1/rnx/sessions?accountId=${encodeURIComponent()}&kind=box&status=running`':
250
285
  { category: 'contrast_user_action', count: 1 },
251
286
  // the Cloudflare Worker forwards the already-authenticated request to the
252
287
  // selected Durable Object in the same service.
253
- 'packages/rnx-cloud-box/src/worker.ts :: fetch :: request': {
288
+ 'packages/peach-cloud-box/src/worker.ts :: fetch :: request': {
254
289
  category: 'same_origin_runtime',
255
290
  count: 1,
256
291
  },
@@ -258,7 +293,7 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
258
293
  // this one refuses to guess a port, so it cannot reach anything but a bridge
259
294
  // the user's own session is running; see the note on ws-bridge.ts below
260
295
  // about splitting these if bridgeWsUrl ever returns a remote endpoint.
261
- 'packages/sootsim/cli/commands/box/plane-share.ts :: websocket :: bridgeWsUrl(port)': {
296
+ 'packages/peachsim/cli/commands/box/plane-share.ts :: websocket :: bridgeWsUrl(port)': {
262
297
  category: 'local_development',
263
298
  count: 2,
264
299
  },
@@ -266,267 +301,274 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
266
301
  category: 'runtime_delivery',
267
302
  count: 2,
268
303
  },
269
- "packages/sootsim/scripts/demo-app-registry.ts :: fetch :: 'http://localhost:1986/'": {
304
+ "packages/peachsim/scripts/demo-app-registry.ts :: fetch :: 'http://localhost:1986/'": {
270
305
  category: 'local_development',
271
306
  count: 1,
272
307
  },
273
- 'packages/sootsim/scripts/dev-server-scanner.ts :: http.request :: { hostname, port, path, method, headers }':
308
+ 'packages/peachsim/scripts/dev-server-scanner.ts :: http.request :: { hostname, port, path, method, headers }':
274
309
  {
275
310
  category: 'local_development',
276
311
  count: 1,
277
312
  },
278
- 'packages/sootsim/scripts/dev-server-scanner.ts :: sock.connect :: port': {
313
+ 'packages/peachsim/scripts/dev-server-scanner.ts :: sock.connect :: port': {
279
314
  category: 'local_development',
280
315
  count: 1,
281
316
  },
282
- 'packages/sootsim/scripts/smoke-cli-binary.ts :: fetch :: `http://127.0.0.1:${port}/healthz`':
317
+ 'packages/peachsim/scripts/smoke-cli-binary.ts :: fetch :: `http://127.0.0.1:${port}/healthz`':
283
318
  { category: 'local_development', count: 1 },
284
319
  // the binary smoke's replacement-module probe against its own loopback server
285
- 'packages/sootsim/scripts/smoke-cli-binary.ts :: fetch :: url': {
320
+ 'packages/peachsim/scripts/smoke-cli-binary.ts :: fetch :: url': {
286
321
  category: 'local_development',
287
322
  count: 1,
288
323
  },
289
- 'packages/sootsim-engine/src/auth/openLogin.ts :: fetch :: `${CONTRAST_ORIGIN}/api/dev-login`':
324
+ 'packages/peach-engine/src/auth/openLogin.ts :: fetch :: `${CONTRAST_ORIGIN}/api/dev-login`':
290
325
  { category: 'contrast_user_action', count: 1 },
291
- 'packages/sootsim-engine/src/auth/shared-session.ts :: fetch :: `${CONTRAST_ORIGIN}/api/auth/me`':
326
+ 'packages/peach-engine/src/auth/shared-session.ts :: fetch :: `${CONTRAST_ORIGIN}/api/auth/me`':
292
327
  { category: 'contrast_user_action', count: 1 },
293
- 'packages/sootsim-engine/src/auth/shared-session.ts :: fetch :: `${CONTRAST_ORIGIN}/api/auth/sign-out`':
328
+ 'packages/peach-engine/src/auth/shared-session.ts :: fetch :: `${CONTRAST_ORIGIN}/api/auth/sign-out`':
294
329
  { category: 'contrast_user_action', count: 1 },
295
- "packages/sootsim-engine/src/billing/client.ts :: fetch :: apiUrl('/api/sootsim/billing/checkout')":
330
+ "packages/peach-engine/src/billing/client.ts :: fetch :: apiUrl('/api/sootsim/billing/checkout')":
296
331
  { category: 'contrast_user_action', count: 1 },
297
- 'packages/sootsim-engine/src/billing/client.ts :: fetch :: apiUrl(path)': {
332
+ 'packages/peach-engine/src/billing/client.ts :: fetch :: apiUrl(path)': {
298
333
  category: 'contrast_user_action',
299
334
  count: 3,
300
335
  },
301
- 'packages/sootsim-engine/src/demo/demo-share-register.ts :: fetch :: shareUrl': {
336
+ 'packages/peach-engine/src/demo/demo-share-register.ts :: fetch :: shareUrl': {
302
337
  category: 'guest_app_network',
303
338
  count: 1,
304
339
  },
305
- 'packages/sootsim-engine/src/engine/android-emoji-font.ts :: fetch :: url': {
340
+ 'packages/peach-engine/src/engine/android-emoji-font.ts :: fetch :: url': {
306
341
  category: 'same_origin_runtime',
307
342
  count: 1,
308
343
  },
309
- 'packages/sootsim-engine/src/engine/app-font-loader.ts :: fetch :: manifestFetchUrl(origin)':
344
+ 'packages/peach-engine/src/engine/app-font-loader.ts :: fetch :: manifestFetchUrl(origin)':
310
345
  { category: 'local_development', count: 1 },
311
- 'packages/sootsim-engine/src/engine/app-font-registry.ts :: fetch :: resolvedUrl': {
346
+ 'packages/peach-engine/src/engine/app-font-registry.ts :: fetch :: resolvedUrl': {
312
347
  category: 'guest_app_network',
313
348
  count: 1,
314
349
  },
315
- 'packages/sootsim-engine/src/engine/config-plugin-splash-loader.ts :: fetch :: manifestFetchUrl(origin)':
350
+ 'packages/peach-engine/src/engine/config-plugin-splash-loader.ts :: fetch :: manifestFetchUrl(origin)':
316
351
  { category: 'local_development', count: 1 },
317
- 'packages/sootsim-engine/src/engine/emoji-metrics-font-loader.ts :: fetch :: attemptedBundledUrl':
352
+ 'packages/peach-engine/src/engine/emoji-metrics-font-loader.ts :: fetch :: attemptedBundledUrl':
318
353
  { category: 'same_origin_runtime', count: 1 },
319
- 'packages/sootsim-engine/src/engine/expo-app-config.ts :: fetch :: manifestFetchUrl(origin)':
354
+ 'packages/peach-engine/src/engine/expo-app-config.ts :: fetch :: manifestFetchUrl(origin)':
320
355
  { category: 'local_development', count: 1 },
321
- 'packages/sootsim-engine/src/engine/image-loader.ts :: fetch :: resolveImageFetchUri(uri)':
356
+ 'packages/peach-engine/src/engine/image-loader.ts :: fetch :: resolveImageFetchUri(uri)':
322
357
  { category: 'guest_app_network', count: 1 },
323
- 'packages/sootsim-engine/src/engine/language-font-loader.ts :: fetch :: url': {
358
+ 'packages/peach-engine/src/engine/language-font-loader.ts :: fetch :: url': {
324
359
  category: 'same_origin_runtime',
325
360
  count: 1,
326
361
  },
327
- 'packages/sootsim-engine/src/engine/lottie-runtime.ts :: fetch :: descriptor.value': {
362
+ 'packages/peach-engine/src/engine/lottie-runtime.ts :: fetch :: descriptor.value': {
328
363
  category: 'guest_app_network',
329
364
  count: 2,
330
365
  },
331
- 'packages/sootsim-engine/src/ios/sf-symbol-catalog.ts :: fetch :: `${catalogBaseUrl}${asset}.json`':
366
+ 'packages/peach-engine/src/android/material-symbol-catalog.ts :: fetch :: `${baseUrl}${asset}.json`':
332
367
  {
333
368
  category: 'same_origin_runtime',
334
369
  count: 1,
335
370
  },
336
- 'packages/sootsim-engine/src/engine/system-font-extras.ts :: fetch :: url': {
371
+ 'packages/peach-engine/src/ios/sf-symbol-catalog.ts :: fetch :: `${catalogBaseUrl}${asset}.json`':
372
+ {
373
+ category: 'same_origin_runtime',
374
+ count: 1,
375
+ },
376
+ 'packages/peach-engine/src/engine/system-font-extras.ts :: fetch :: url': {
337
377
  category: 'same_origin_runtime',
338
378
  count: 1,
339
379
  },
340
- 'packages/sootsim-engine/src/ExternalApp.tsx :: fetch :: getBundleProxyUrl(devServerUrl)':
380
+ 'packages/peach-engine/src/ExternalApp.tsx :: fetch :: getBundleProxyUrl(devServerUrl)':
341
381
  { category: 'guest_app_network', count: 1 },
342
- 'packages/sootsim-engine/src/ExternalApp.tsx :: fetch :: requestUrl': {
382
+ 'packages/peach-engine/src/ExternalApp.tsx :: fetch :: requestUrl': {
343
383
  category: 'guest_app_network',
344
384
  count: 1,
345
385
  },
346
- 'packages/sootsim-engine/src-electron/tray.ts :: client.get :: parsed': {
386
+ 'packages/peach-engine/src-electron/tray.ts :: client.get :: parsed': {
347
387
  category: 'guest_app_network',
348
388
  count: 1,
349
389
  },
350
- 'packages/sootsim-engine/src/mcp/ws-bridge.ts :: fetch :: bridgeHealthUrl': {
390
+ 'packages/peach-engine/src/mcp/ws-bridge.ts :: fetch :: bridgeHealthUrl': {
351
391
  category: 'local_development',
352
392
  count: 1,
353
393
  },
354
- 'packages/sootsim-engine/src/mcp/ws-bridge.ts :: websocket :: resolveSootsimBridgeWebSocketUrl({ bridgePort, href: window.location.href, })':
394
+ 'packages/peach-engine/src/mcp/ws-bridge.ts :: websocket :: resolveSootsimBridgeWebSocketUrl({ bridgePort, href: window.location.href, })':
355
395
  { category: 'local_development', count: 1 },
356
- 'packages/sootsim-engine/src/remote-stream/browser-tenant-proxy.ts :: websocket :: this.config.url':
396
+ 'packages/peach-engine/src/remote-stream/browser-tenant-proxy.ts :: websocket :: this.config.url':
357
397
  { category: 'remote_display_server', count: 1 },
358
- 'packages/sootsim-engine/src/menu/menuActions.ts :: fetch :: screenshot': {
398
+ 'packages/peach-engine/src/menu/menuActions.ts :: fetch :: screenshot': {
359
399
  category: 'guest_app_network',
360
400
  count: 1,
361
401
  },
362
- 'packages/sootsim-engine/src/preview/fetch-recorder.ts :: fetch :: absolute': {
402
+ 'packages/peach-engine/src/preview/fetch-recorder.ts :: fetch :: absolute': {
363
403
  category: 'guest_app_network',
364
404
  count: 2,
365
405
  },
366
406
  // the path is a parameter so one uploader serves both callers: recordings use
367
407
  // /api/preview/upload/{init,finalize} (the default) and `rnx preview` passes
368
408
  // /api/v1/previews{,/finalize}. both are first-party contrast endpoints.
369
- 'packages/sootsim-engine/src/preview/presigned-upload.ts :: fetch :: `${origin}${endpoints.finalize}`':
409
+ 'packages/peach-engine/src/preview/presigned-upload.ts :: fetch :: `${origin}${endpoints.finalize}`':
370
410
  { category: 'contrast_user_action', count: 1 },
371
- 'packages/sootsim-engine/src/preview/presigned-upload.ts :: fetch :: `${origin}${endpoints.init}`':
411
+ 'packages/peach-engine/src/preview/presigned-upload.ts :: fetch :: `${origin}${endpoints.init}`':
372
412
  { category: 'contrast_user_action', count: 1 },
373
- 'packages/sootsim-engine/src/preview/presigned-upload.ts :: fetch :: job.url': {
413
+ 'packages/peach-engine/src/preview/presigned-upload.ts :: fetch :: job.url': {
374
414
  category: 'presigned_upload',
375
415
  count: 1,
376
416
  },
377
- 'packages/sootsim-engine/src/preview/warm-bundle-cache.ts :: fetch :: url': {
417
+ 'packages/peach-engine/src/preview/warm-bundle-cache.ts :: fetch :: url': {
378
418
  category: 'guest_app_network',
379
419
  count: 1,
380
420
  },
381
- "packages/sootsim-engine/src/projects/projects-persistence.ts :: fetch :: '/__sootsim/shared-config'":
421
+ "packages/peach-engine/src/projects/projects-persistence.ts :: fetch :: '/__sootsim/shared-config'":
382
422
  { category: 'same_origin_runtime', count: 1 },
383
- 'packages/sootsim-engine/src/react-native/index.ts :: fetch :: resource': {
423
+ 'packages/peach-engine/src/react-native/index.ts :: fetch :: resource': {
384
424
  category: 'guest_app_network',
385
425
  count: 1,
386
426
  },
387
- 'packages/sootsim-engine/src/react-native/Keyboard.ts :: fetch :: url': {
427
+ 'packages/peach-engine/src/react-native/Keyboard.ts :: fetch :: url': {
388
428
  category: 'guest_app_network',
389
429
  count: 1,
390
430
  },
391
- 'packages/sootsim-engine/src/render-worker/canvaskit-shared.ts :: fetch :: fontUrl': {
431
+ 'packages/peach-engine/src/render-worker/canvaskit-shared.ts :: fetch :: fontUrl': {
392
432
  category: 'same_origin_runtime',
393
433
  count: 1,
394
434
  },
395
- 'packages/sootsim-engine/src/render-worker/canvaskit-shared.ts :: fetch :: pipelineCacheUrl':
435
+ 'packages/peach-engine/src/render-worker/canvaskit-shared.ts :: fetch :: pipelineCacheUrl':
396
436
  { category: 'same_origin_runtime', count: 1 },
397
- 'packages/sootsim-engine/src/render-worker/canvaskit-shared.ts :: fetch :: wasmUrl': {
437
+ 'packages/peach-engine/src/render-worker/canvaskit-shared.ts :: fetch :: wasmUrl': {
398
438
  category: 'same_origin_runtime',
399
439
  count: 1,
400
440
  },
401
441
  // the cpu simulator iframe document's dedicated worker loads the headless
402
442
  // canvaskit wasm and the font and asset manifests from the page's own
403
443
  // `/deps-native/engine-assets/` directory.
404
- 'packages/sootsim-engine/src/headless/browser-tenant-worker.ts :: fetch :: new URL(name, assetBase).href':
444
+ 'packages/peach-engine/src/headless/browser-tenant-worker.ts :: fetch :: new URL(name, assetBase).href':
405
445
  { category: 'same_origin_runtime', count: 1 },
406
446
  // hashes its own delivered script to identify the engine to display clients.
407
- 'packages/sootsim-engine/src/headless/browser-tenant-worker.ts :: fetch :: workerSourceUrl':
447
+ 'packages/peach-engine/src/headless/browser-tenant-worker.ts :: fetch :: workerSourceUrl':
408
448
  { category: 'same_origin_runtime', count: 1 },
409
449
  // the tenant build's built-in app chunk prefetch list and the chunk bodies
410
450
  // it names, resolved against the worker chunk's own url.
411
- 'packages/sootsim-engine/src/render-worker/app-in-worker.tsx :: fetch :: listUrl': {
451
+ 'packages/peach-engine/src/render-worker/app-in-worker.tsx :: fetch :: listUrl': {
412
452
  category: 'same_origin_runtime',
413
453
  count: 1,
414
454
  },
415
- 'packages/sootsim-engine/src/render-worker/app-in-worker.tsx :: fetch :: new URL(file, listUrl)':
455
+ 'packages/peach-engine/src/render-worker/app-in-worker.tsx :: fetch :: new URL(file, listUrl)':
416
456
  { category: 'same_origin_runtime', count: 1 },
417
- 'packages/sootsim-engine/src/render-worker/host.ts :: fetch :: msg.fallbackUrl': {
457
+ 'packages/peach-engine/src/render-worker/host.ts :: fetch :: msg.fallbackUrl': {
418
458
  category: 'guest_app_network',
419
459
  count: 1,
420
460
  },
421
- 'packages/sootsim-engine/src/render-worker/video-host.ts :: fetch :: uri': {
461
+ 'packages/peach-engine/src/render-worker/video-host.ts :: fetch :: uri': {
422
462
  category: 'guest_app_network',
423
463
  count: 1,
424
464
  },
425
- 'packages/sootsim-engine/src/render-worker/worker-font-loader.ts :: fetch :: url': {
465
+ 'packages/peach-engine/src/render-worker/worker-font-loader.ts :: fetch :: url': {
426
466
  category: 'same_origin_runtime',
427
467
  count: 1,
428
468
  },
429
- 'packages/sootsim-engine/src/render-worker/worker-handlers/lifecycle.ts :: fetch :: url':
469
+ 'packages/peach-engine/src/render-worker/worker-handlers/lifecycle.ts :: fetch :: url':
430
470
  { category: 'guest_app_network', count: 1 },
431
- 'packages/sootsim-engine/src/screenshots/capture-store.ts :: fetch :: cap.dataUrl': {
471
+ 'packages/peach-engine/src/screenshots/capture-store.ts :: fetch :: cap.dataUrl': {
432
472
  category: 'same_origin_runtime',
433
473
  count: 1,
434
474
  },
435
- 'packages/sootsim-engine/src/menu/menuActions.ts :: fetch :: `http://127.0.0.1:${port}/__send-to-box`':
475
+ 'packages/peach-engine/src/menu/menuActions.ts :: fetch :: `http://127.0.0.1:${port}/__send-to-box`':
436
476
  { category: 'local_development', count: 1 },
437
- "packages/sootsim-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref, 'grid')":
477
+ "packages/peach-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref, 'grid')":
438
478
  { category: 'contrast_user_action', count: 1 },
439
- 'packages/sootsim-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref, variant)':
479
+ 'packages/peach-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref, variant)':
440
480
  { category: 'contrast_user_action', count: 1 },
441
- 'packages/sootsim-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref)':
481
+ 'packages/peach-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref)':
442
482
  { category: 'contrast_user_action', count: 1 },
443
- "packages/sootsim-engine/src/server-discovery.ts :: fetch :: '/__server-scan'": {
483
+ "packages/peach-engine/src/server-discovery.ts :: fetch :: '/__server-scan'": {
444
484
  category: 'local_development',
445
485
  count: 1,
446
486
  },
447
- 'packages/sootsim-engine/src/server-discovery.ts :: fetch :: `${gatewayOrigin}/__scan`':
448
- { category: 'local_development', count: 1 },
449
- "packages/sootsim-engine/src/settings/persistence.ts :: fetch :: '/__sootsim/shared-config'":
487
+ 'packages/peach-engine/src/server-discovery.ts :: fetch :: `${gatewayOrigin}/__scan`': {
488
+ category: 'local_development',
489
+ count: 1,
490
+ },
491
+ "packages/peach-engine/src/settings/persistence.ts :: fetch :: '/__sootsim/shared-config'":
450
492
  { category: 'same_origin_runtime', count: 2 },
451
- 'packages/sootsim/cli/app-fonts.ts :: fetch :: `${origin}/`': {
493
+ 'packages/peachsim/cli/app-fonts.ts :: fetch :: `${origin}/`': {
452
494
  category: 'local_development',
453
495
  count: 1,
454
496
  },
455
- 'packages/sootsim/cli/app-fonts.ts :: fetch :: url': {
497
+ 'packages/peachsim/cli/app-fonts.ts :: fetch :: url': {
456
498
  category: 'local_development',
457
499
  count: 1,
458
500
  },
459
- 'packages/sootsim/cli/app-splash.ts :: fetch :: url': {
501
+ 'packages/peachsim/cli/app-splash.ts :: fetch :: url': {
460
502
  category: 'local_development',
461
503
  count: 1,
462
504
  },
463
- 'packages/sootsim/cli/commands/control.ts :: fetch :: imageUrl': {
505
+ 'packages/peachsim/cli/commands/control.ts :: fetch :: imageUrl': {
464
506
  category: 'local_development',
465
507
  count: 1,
466
508
  },
467
- 'packages/sootsim/cli/commands/control.ts :: fetch :: spec.url': {
509
+ 'packages/peachsim/cli/commands/control.ts :: fetch :: spec.url': {
468
510
  category: 'local_development',
469
511
  count: 1,
470
512
  },
471
- 'packages/sootsim/cli/commands/control.ts :: websocket :: `ws://127.0.0.1:${port}`': {
513
+ 'packages/peachsim/cli/commands/control.ts :: websocket :: `ws://127.0.0.1:${port}`': {
472
514
  category: 'local_development',
473
515
  count: 1,
474
516
  },
475
- 'packages/sootsim/cli/commands/cpu-profile.ts :: fetch :: `http://localhost:${cdpPort}/json/list`':
517
+ 'packages/peachsim/cli/commands/cpu-profile.ts :: fetch :: `http://localhost:${cdpPort}/json/list`':
476
518
  { category: 'local_development', count: 1 },
477
- 'packages/sootsim/cli/commands/cpu-profile.ts :: websocket :: wsUrl': {
519
+ 'packages/peachsim/cli/commands/cpu-profile.ts :: websocket :: wsUrl': {
478
520
  category: 'local_development',
479
521
  count: 1,
480
522
  },
481
- 'packages/sootsim/cli/commands/install-desktop.ts :: fetch :: url': {
523
+ 'packages/peachsim/cli/commands/install-desktop.ts :: fetch :: url': {
482
524
  category: 'electron_download',
483
525
  count: 1,
484
526
  },
485
- "packages/sootsim/cli/commands/login.ts :: fetch :: `${origin.replace(/\\/$/, '')}/api/dev-login`":
527
+ "packages/peachsim/cli/commands/login.ts :: fetch :: `${origin.replace(/\\/$/, '')}/api/dev-login`":
486
528
  { category: 'local_development', count: 1 },
487
- "packages/sootsim/cli/commands/logout.ts :: fetch :: `${current.origin.replace(/\\/$/, '')}/api/auth/sign-out`":
529
+ "packages/peachsim/cli/commands/logout.ts :: fetch :: `${current.origin.replace(/\\/$/, '')}/api/auth/sign-out`":
488
530
  { category: 'contrast_user_action', count: 1 },
489
- "packages/sootsim/cli/commands/maestro-generate.ts :: fetch :: `${args.origin.replace(/\\/$/, '')}/api/llm`":
531
+ "packages/peachsim/cli/commands/maestro-generate.ts :: fetch :: `${args.origin.replace(/\\/$/, '')}/api/llm`":
490
532
  { category: 'contrast_user_action', count: 1 },
491
- 'packages/sootsim/cli/commands/report-issue.ts :: fetch :: url': {
533
+ 'packages/peachsim/cli/commands/report-issue.ts :: fetch :: url': {
492
534
  category: 'contrast_user_action',
493
535
  count: 1,
494
536
  },
495
- 'packages/sootsim/cli/commands/runtime.ts :: websocket :: `ws://127.0.0.1:${port}`': {
537
+ 'packages/peachsim/cli/commands/runtime.ts :: websocket :: `ws://127.0.0.1:${port}`': {
496
538
  category: 'local_development',
497
539
  count: 1,
498
540
  },
499
- 'packages/sootsim/cli/commands/screenshots-capture.ts :: fetch :: `${apiOrigin}/api/sootsim/screenshot-capture?ref=${encodeURIComponent(ref)}&org=${encodeURIComponent(org)}`':
541
+ 'packages/peachsim/cli/commands/screenshots-capture.ts :: fetch :: `${apiOrigin}/api/sootsim/screenshot-capture?ref=${encodeURIComponent()}&org=${encodeURIComponent()}`':
500
542
  { category: 'contrast_user_action', count: 1 },
501
- 'packages/sootsim/cli/commands/screenshots-capture.ts :: fetch :: `${apiOrigin}/api/sootsim/screenshot-decks?org=${encodeURIComponent(org)}&repo=${encodeURIComponent(repo)}`':
543
+ 'packages/peachsim/cli/commands/screenshots-capture.ts :: fetch :: `${apiOrigin}/api/sootsim/screenshot-decks?org=${encodeURIComponent()}&repo=${encodeURIComponent()}`':
502
544
  { category: 'contrast_user_action', count: 1 },
503
- 'packages/sootsim/cli/cli-update.ts :: fetch :: url': {
545
+ 'packages/peachsim/cli/cli-update.ts :: fetch :: url': {
504
546
  category: 'cli_delivery',
505
547
  count: 1,
506
548
  },
507
- 'packages/sootsim/scripts/publish-cli-binaries.ts :: fetch :: `${url}?sha256=${digest}`':
549
+ 'packages/peachsim/scripts/publish-cli-binaries.ts :: fetch :: `${url}?sha256=${digest}`':
508
550
  {
509
551
  category: 'cli_release_publish',
510
552
  count: 1,
511
553
  },
512
- 'packages/sootsim/scripts/publish-cli-binaries.ts :: fetch :: `${publicOrigin}/${channelKey}?sourceSha=${sourceSha}`':
554
+ 'packages/peachsim/scripts/publish-cli-binaries.ts :: fetch :: `${publicOrigin}/${channelKey}?sourceSha=${sourceSha}`':
513
555
  {
514
556
  category: 'cli_release_publish',
515
557
  count: 1,
516
558
  },
517
- 'packages/sootsim/cli/commands/upload.ts :: fetch :: url': {
559
+ 'packages/peachsim/cli/commands/upload.ts :: fetch :: url': {
518
560
  category: 'presigned_upload',
519
561
  count: 1,
520
562
  },
521
- 'packages/sootsim/cli/recording-access.ts :: fetch :: `${billingOrigin}/api/sootsim/billing/subscription`':
563
+ 'packages/peachsim/cli/recording-access.ts :: fetch :: `${billingOrigin}/api/sootsim/billing/subscription`':
522
564
  { category: 'contrast_user_action', count: 1 },
523
- "packages/sootsim/cli/run-registry.ts :: fetch :: `${args.origin.replace(/\\/$/, '')}/api/sootsim/test-runs`":
565
+ "packages/peachsim/cli/run-registry.ts :: fetch :: `${args.origin.replace(/\\/$/, '')}/api/sootsim/test-runs`":
524
566
  { category: 'contrast_user_action', count: 1 },
525
- 'packages/sootsim/cli/runtime-notes.ts :: fetch-alias :: url': {
567
+ 'packages/peachsim/cli/runtime-notes.ts :: fetch-alias :: url': {
526
568
  category: 'release_notes',
527
569
  count: 1,
528
570
  },
529
- 'packages/sootsim/cli/telemetry.ts :: fetch :: `${config.host}/batch/`': {
571
+ 'packages/peachsim/cli/telemetry.ts :: fetch :: `${config.host}/batch/`': {
530
572
  category: 'bounded_diagnostics',
531
573
  count: 1,
532
574
  },
@@ -535,39 +577,39 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
535
577
  // when a cloud box makes it return a remote wss:// endpoint, that egress
536
578
  // would land under this same local_development entry and go unnoticed. split
537
579
  // the declaration then, rather than letting one line cover both.
538
- 'packages/sootsim/cli/ws-bridge.ts :: websocket :: bridgeWsUrl(wsPort)': {
580
+ 'packages/peachsim/cli/ws-bridge.ts :: websocket :: bridgeWsUrl(wsPort)': {
539
581
  category: 'local_development',
540
582
  count: 1,
541
583
  },
542
- 'packages/sootsim/src/agent-daemon-client.ts :: socket.connect :: port': {
584
+ 'packages/peachsim/src/agent-daemon-client.ts :: socket.connect :: port': {
543
585
  category: 'local_development',
544
586
  count: 1,
545
587
  },
546
- 'packages/sootsim/src/agent-daemon-client.ts :: websocket :: `ws://127.0.0.1:${this.port}`':
588
+ 'packages/peachsim/src/agent-daemon-client.ts :: websocket :: `ws://127.0.0.1:${this.port}`':
547
589
  { category: 'local_development', count: 1 },
548
- "packages/sootsim/src/auth/shared-session.ts :: fetch :: `${origin.replace(/\\/$/, '')}/api/auth/me`":
590
+ "packages/peachsim/src/auth/shared-session.ts :: fetch :: `${origin.replace(/\\/$/, '')}/api/auth/me`":
549
591
  { category: 'contrast_user_action', count: 1 },
550
- "packages/sootsim/src/dev-bundle-resolution.ts :: fetch :: '/__server-scan'": {
592
+ "packages/peachsim/src/dev-bundle-resolution.ts :: fetch :: '/__server-scan'": {
551
593
  category: 'local_development',
552
594
  count: 1,
553
595
  },
554
- 'packages/sootsim/src/dev-bundle-resolution.ts :: fetch :: `/__fetch-proxy?url=${encodeURIComponent(targetUrl)}`':
596
+ 'packages/peachsim/src/dev-bundle-resolution.ts :: fetch :: `/__fetch-proxy?url=${encodeURIComponent()}`':
555
597
  { category: 'guest_app_network', count: 1 },
556
- 'packages/sootsim/src/dev-bundle-resolution.ts :: fetch :: targetUrl': {
598
+ 'packages/peachsim/src/dev-bundle-resolution.ts :: fetch :: targetUrl': {
557
599
  category: 'guest_app_network',
558
600
  count: 1,
559
601
  },
560
- 'packages/sootsim/src/dev-server-open.ts :: http.get :: `http://127.0.0.1:${port}/__server-scan`':
602
+ 'packages/peachsim/src/dev-server-open.ts :: http.get :: `http://127.0.0.1:${port}/__server-scan`':
561
603
  { category: 'local_development', count: 1 },
562
- "packages/sootsim/src/host/fetch-proxy-handler.ts :: transport.request :: { hostname: normalizeHostname(targetUrl.hostname), port: targetUrl.port || (targetUrl.protocol === 'https:' ? 443 : 80), path: targetUrl.pathname + targetUrl.search, method, headers: targetHeaders, ...loopbackTlsOptions(targetUrl), }":
604
+ "packages/peachsim/src/host/fetch-proxy-handler.ts :: transport.request :: { hostname: normalizeHostname(targetUrl.hostname), port: targetUrl.port || (targetUrl.protocol === 'https:' ? 443 : 80), path: targetUrl.pathname + targetUrl.search, method, headers: targetHeaders, ...loopbackTlsOptions(targetUrl), }":
563
605
  { category: 'guest_app_network', count: 1 },
564
- "packages/sootsim/src/host/fetch-proxy-handler.ts :: transport.request :: { hostname: normalizeHostname(targetUrl.hostname), port: targetUrl.port || (targetUrl.protocol === 'https:' ? 443 : 80), path: targetUrl.pathname + targetUrl.search, method: req.method, headers: fwdHeaders, ...loopbackTlsOptions(targetUrl), }":
606
+ "packages/peachsim/src/host/fetch-proxy-handler.ts :: transport.request :: { hostname: normalizeHostname(targetUrl.hostname), port: targetUrl.port || (targetUrl.protocol === 'https:' ? 443 : 80), path: targetUrl.pathname + targetUrl.search, method: req.method, headers: fwdHeaders, ...loopbackTlsOptions(targetUrl), }":
565
607
  { category: 'guest_app_network', count: 1 },
566
- 'packages/sootsim/src/host/websocket-proxy.ts :: node-request :: upstreamRequestUrl': {
608
+ 'packages/peachsim/src/host/websocket-proxy.ts :: node-request :: upstreamRequestUrl': {
567
609
  category: 'guest_app_network',
568
610
  count: 1,
569
611
  },
570
- 'packages/sootsim/src/screenshots/org-deck.ts :: fetch :: url': {
612
+ 'packages/peachsim/src/screenshots/org-deck.ts :: fetch :: url': {
571
613
  category: 'contrast_user_action',
572
614
  count: 1,
573
615
  },
@@ -765,20 +807,27 @@ function callKind(
765
807
 
766
808
  function firstArgument(node: CallExpression | NewExpression, source: string): string {
767
809
  const first = node.arguments[0]
768
- return first
769
- ? source.slice(first.start, first.end).replace(/\s+/g, ' ').trim()
770
- : '<none>'
810
+ if (!first) return '<none>'
811
+ const text = source.slice(first.start, first.end).replace(/\s+/g, ' ').trim()
812
+ // the key is source text, so renaming a local used as a path id used to change
813
+ // it and red main on a commit that moved no destination. what justifies erasing
814
+ // the argument to encodeURIComponent is that it is a local NAME rather than a
815
+ // destination, not that it is a path segment: at dev-bundle-resolution.ts and
816
+ // backend-origin.ts the argument is a whole target url behind a proxy path. a
817
+ // name carries no destination either way, so erasing it loses nothing, while
818
+ // the host expression and the path itself still have to be re-declared.
819
+ return text.replace(/encodeURIComponent\([^()]*\)/g, 'encodeURIComponent()')
771
820
  }
772
821
 
773
822
  export function detectOutboundCalls(repositoryRoot: string): DetectedOutboundCall[] {
774
823
  const roots = [
775
- path.join(repositoryRoot, 'packages/sootsim/cli'),
776
- path.join(repositoryRoot, 'packages/sootsim/scripts'),
777
- path.join(repositoryRoot, 'packages/sootsim/src'),
778
- path.join(repositoryRoot, 'packages/sootsim-engine/src'),
779
- path.join(repositoryRoot, 'packages/sootsim-engine/src-electron'),
824
+ path.join(repositoryRoot, 'packages/peachsim/cli'),
825
+ path.join(repositoryRoot, 'packages/peachsim/scripts'),
826
+ path.join(repositoryRoot, 'packages/peachsim/src'),
827
+ path.join(repositoryRoot, 'packages/peach-engine/src'),
828
+ path.join(repositoryRoot, 'packages/peach-engine/src-electron'),
780
829
  path.join(repositoryRoot, 'packages/contrast-runtime-delivery/src'),
781
- path.join(repositoryRoot, 'packages/rnx-cloud-box/src'),
830
+ path.join(repositoryRoot, 'packages/peach-cloud-box/src'),
782
831
  ]
783
832
  const counts = new Map<string, number>()
784
833
  for (const file of roots.flatMap(sourceFilesUnder)) {