peachsim 0.1.527 → 0.1.571

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 (169) hide show
  1. package/README.md +28 -28
  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 +72 -12
  7. package/cli/cloud-client.ts +273 -6
  8. package/cli/cloud-dispatch.ts +23 -2
  9. package/cli/cloud-session.ts +60 -4
  10. package/cli/cloud-test-result-files.ts +97 -0
  11. package/cli/cloud-test-tunnel.ts +354 -0
  12. package/cli/commands/box/bundle-plane.ts +2 -2
  13. package/cli/commands/box/checkout-plane.ts +1 -1
  14. package/cli/commands/box/rnx-command.ts +2 -2
  15. package/cli/commands/box/search-command.ts +2 -2
  16. package/cli/commands/box.ts +8 -8
  17. package/cli/commands/compat.ts +1 -1
  18. package/cli/commands/control.ts +22 -3
  19. package/cli/commands/detox.ts +1 -1
  20. package/cli/commands/device.ts +1 -1
  21. package/cli/commands/diagnose.ts +1 -1
  22. package/cli/commands/film.ts +1 -1
  23. package/cli/commands/flow.ts +60 -3
  24. package/cli/commands/inspect/actions.ts +1 -1
  25. package/cli/commands/inspect/core.ts +6 -7
  26. package/cli/commands/inspect/find.ts +2 -1
  27. package/cli/commands/inspect/resolve-target.ts +5 -3
  28. package/cli/commands/inspect/shared.ts +1 -1
  29. package/cli/commands/inspect/wait-event.ts +1 -1
  30. package/cli/commands/inspect/wait-selector.ts +15 -4
  31. package/cli/commands/inspect.ts +19 -14
  32. package/cli/commands/maestro.ts +582 -69
  33. package/cli/commands/permissions.ts +1 -1
  34. package/cli/commands/platform.ts +205 -8
  35. package/cli/commands/preview.ts +2 -2
  36. package/cli/commands/record.ts +2 -2
  37. package/cli/commands/report-issue.ts +2 -2
  38. package/cli/commands/screenshot-layers.ts +1 -1
  39. package/cli/commands/screenshot.ts +1 -1
  40. package/cli/commands/setup.ts +2 -2
  41. package/cli/commands/test.ts +600 -117
  42. package/cli/commands/three-mode.ts +1 -1
  43. package/cli/commands/upload.ts +5 -5
  44. package/cli/commands/what-happened.ts +1 -1
  45. package/cli/desktop-companion.ts +3 -3
  46. package/cli/drivers/playwright-sim-host.ts +2 -2
  47. package/cli/flow-file.ts +7 -0
  48. package/cli/flow-live-status.ts +65 -8
  49. package/cli/help-core.ts +3 -3
  50. package/cli/hidden-runtime-alias.ts +1 -1
  51. package/cli/maestro-report.ts +180 -0
  52. package/cli/main.ts +1 -1
  53. package/cli/outbound-endpoints.ts +187 -136
  54. package/cli/parse-args.ts +1 -1
  55. package/cli/registry.ts +1 -1
  56. package/cli/resolve-assets.ts +1 -1
  57. package/cli/run-registry.ts +10 -1
  58. package/cli/send-to-box.ts +4 -4
  59. package/cli/ws-bridge.ts +3 -5
  60. package/detox/expectations.ts +1 -1
  61. package/detox/gestures.ts +2 -2
  62. package/detox/index.ts +71 -29
  63. package/detox/jest-preset.cjs +5 -5
  64. package/detox/jest-setup-after-env.cjs +1 -1
  65. package/dist-lib/agent-daemon-client.cjs +2 -2
  66. package/dist-lib/agent-events.cjs +1 -1
  67. package/dist-lib/agent-identity.cjs +1 -1
  68. package/dist-lib/agent-sessions.cjs +2 -2
  69. package/dist-lib/attached-projects.cjs +2 -2
  70. package/dist-lib/auth/shared-session.cjs +1 -1
  71. package/dist-lib/backend-origin.cjs +1 -1
  72. package/dist-lib/beta.cjs +1 -1
  73. package/dist-lib/beta.mjs +1 -1
  74. package/dist-lib/bridge-constants.cjs +1 -1
  75. package/dist-lib/bridge-contract-input.cjs +1 -1
  76. package/dist-lib/bridge-contract-input.mjs +1 -1
  77. package/dist-lib/bridge-contract.cjs +1 -1
  78. package/dist-lib/bridge-contract.mjs +1 -1
  79. package/dist-lib/capture-contract.cjs +94 -3
  80. package/dist-lib/capture-contract.mjs +93 -3
  81. package/dist-lib/cli-constants.cjs +1 -1
  82. package/dist-lib/cloud-contract.cjs +1 -1
  83. package/dist-lib/cloud-contract.mjs +1 -1
  84. package/dist-lib/cloud-test-args.cjs +116 -0
  85. package/dist-lib/cloud-test-args.mjs +86 -0
  86. package/dist-lib/cloud.cjs +2 -2
  87. package/dist-lib/cloud.mjs +2 -2
  88. package/dist-lib/config.cjs +1 -1
  89. package/dist-lib/detox/index.cjs +106 -25
  90. package/dist-lib/detox/jest-preset.cjs +5 -5
  91. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  92. package/dist-lib/home-paths.cjs +1 -1
  93. package/dist-lib/host/bridge-host.cjs +150 -65
  94. package/dist-lib/host/fetch-proxy-handler.cjs +28 -2
  95. package/dist-lib/host/fetch-proxy-overrides.cjs +33 -3
  96. package/dist-lib/host/fetch-proxy-overrides.mjs +30 -2
  97. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  98. package/dist-lib/host/websocket-proxy.cjs +1 -1
  99. package/dist-lib/index.cjs +224 -41
  100. package/dist-lib/jump-to-source-babel.cjs +1 -1
  101. package/dist-lib/jump-to-source-native.cjs +1 -1
  102. package/dist-lib/menu.cjs +2 -2
  103. package/dist-lib/menu.mjs +2 -2
  104. package/dist-lib/metro-fingerprint-registry.cjs +1 -1
  105. package/dist-lib/metro-fingerprint-registry.mjs +1 -1
  106. package/dist-lib/metro-production-bundle.cjs +3 -3
  107. package/dist-lib/metro-production-bundle.mjs +3 -3
  108. package/dist-lib/metro.cjs +8 -8
  109. package/dist-lib/profiles.cjs +1 -1
  110. package/dist-lib/public-brand.cjs +2 -2
  111. package/dist-lib/react-native-host-modules.cjs +1 -1
  112. package/dist-lib/react-native-host-modules.mjs +1 -1
  113. package/dist-lib/render-mode.cjs +1 -1
  114. package/dist-lib/scripts/dev-server-scanner.cjs +31 -15
  115. package/dist-lib/sdk.cjs +3 -2
  116. package/dist-lib/sdk.mjs +3 -2
  117. package/dist-lib/skills.cjs +478 -266
  118. package/dist-lib/swift-compile.cjs +372 -0
  119. package/dist-lib/swift-compile.mjs +339 -0
  120. package/dist-lib/swift-package.cjs +78 -0
  121. package/dist-lib/swift-package.mjs +52 -0
  122. package/dist-lib/swift-submit.cjs +1 -1
  123. package/dist-lib/swift-submit.mjs +1 -1
  124. package/dist-lib/swift.cjs +583 -16
  125. package/dist-lib/vite.cjs +483 -150
  126. package/package.json +30 -9
  127. package/scripts/dev-server-scanner.ts +41 -14
  128. package/scripts/optional-demo-registry.ts +3 -3
  129. package/skills/contrast/SKILL.md +9 -9
  130. package/skills/rnx-debug/SKILL.md +14 -4
  131. package/skills/rnx-perf/SKILL.md +5 -5
  132. package/skills/rnx-setup/SKILL.md +11 -11
  133. package/skills/rnx-test/SKILL.md +14 -14
  134. package/skills/rnx-visual/SKILL.md +6 -6
  135. package/src/agent-sessions.ts +3 -3
  136. package/src/attached-projects.ts +1 -1
  137. package/src/bridge-contract-input.ts +1 -1
  138. package/src/bridge-contract.ts +23 -5
  139. package/src/capture-contract.ts +145 -3
  140. package/src/cloud-test-args.ts +100 -0
  141. package/src/config.ts +2 -2
  142. package/src/connect.ts +2 -2
  143. package/src/home-paths.ts +3 -3
  144. package/src/host/bridge-host.ts +2 -2
  145. package/src/host/fetch-proxy-handler.ts +4 -3
  146. package/src/host/fetch-proxy-overrides.ts +41 -0
  147. package/src/host/plane-host.ts +2 -2
  148. package/src/index.ts +3 -0
  149. package/src/metro-plugin.ts +4 -4
  150. package/src/metro-production-bundle.ts +2 -2
  151. package/src/native-seam-manifest.ts +6 -6
  152. package/src/public-brand.ts +1 -1
  153. package/src/rolldown-plugin-swift.ts +16 -12
  154. package/src/runtime-assets.ts +8 -6
  155. package/src/screenshots/frame-compose.ts +24 -56
  156. package/src/screenshots/org-deck.ts +1 -1
  157. package/src/screenshots/registry.ts +4 -4
  158. package/src/screenshots/schema.ts +1 -1
  159. package/src/sdk.ts +2 -2
  160. package/src/settings-bundle.ts +1 -1
  161. package/src/sim-client.ts +2 -4
  162. package/src/skills/builtin/compat-check.ts +1 -1
  163. package/src/swift-compile.ts +359 -0
  164. package/src/swift-package.ts +69 -0
  165. package/src/swift-submit.ts +3 -2
  166. package/src/vite-plugin-one.ts +1 -1
  167. package/src/vite-plugin-swift.ts +114 -113
  168. package/src/vite-plugin.ts +30 -17
  169. 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,276 @@ 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`':
325
+ { category: 'contrast_user_action', count: 1 },
326
+ 'packages/peach-engine/src/auth/shared-session.ts :: fetch :: `${CONTRAST_ORIGIN}/api/auth/me`':
290
327
  { category: 'contrast_user_action', count: 1 },
291
- 'packages/sootsim-engine/src/auth/shared-session.ts :: fetch :: `${CONTRAST_ORIGIN}/api/auth/me`':
328
+ 'packages/peach-engine/src/auth/shared-session.ts :: fetch :: `${CONTRAST_ORIGIN}/api/preview/pair-token`':
292
329
  { category: 'contrast_user_action', count: 1 },
293
- 'packages/sootsim-engine/src/auth/shared-session.ts :: fetch :: `${CONTRAST_ORIGIN}/api/auth/sign-out`':
330
+ 'packages/peach-engine/src/auth/shared-session.ts :: fetch :: `${CONTRAST_ORIGIN}/api/auth/sign-out`':
294
331
  { category: 'contrast_user_action', count: 1 },
295
- "packages/sootsim-engine/src/billing/client.ts :: fetch :: apiUrl('/api/sootsim/billing/checkout')":
332
+ "packages/peach-engine/src/billing/client.ts :: fetch :: apiUrl('/api/sootsim/billing/checkout')":
296
333
  { category: 'contrast_user_action', count: 1 },
297
- 'packages/sootsim-engine/src/billing/client.ts :: fetch :: apiUrl(path)': {
334
+ 'packages/peach-engine/src/billing/client.ts :: fetch :: apiUrl(path)': {
298
335
  category: 'contrast_user_action',
299
336
  count: 3,
300
337
  },
301
- 'packages/sootsim-engine/src/demo/demo-share-register.ts :: fetch :: shareUrl': {
338
+ 'packages/peach-engine/src/demo/demo-share-register.ts :: fetch :: shareUrl': {
302
339
  category: 'guest_app_network',
303
340
  count: 1,
304
341
  },
305
- 'packages/sootsim-engine/src/engine/android-emoji-font.ts :: fetch :: url': {
342
+ 'packages/peach-engine/src/engine/android-emoji-font.ts :: fetch :: url': {
306
343
  category: 'same_origin_runtime',
307
344
  count: 1,
308
345
  },
309
- 'packages/sootsim-engine/src/engine/app-font-loader.ts :: fetch :: manifestFetchUrl(origin)':
346
+ 'packages/peach-engine/src/engine/app-font-loader.ts :: fetch :: manifestFetchUrl(origin)':
310
347
  { category: 'local_development', count: 1 },
311
- 'packages/sootsim-engine/src/engine/app-font-registry.ts :: fetch :: resolvedUrl': {
348
+ 'packages/peach-engine/src/engine/app-font-registry.ts :: fetch :: resolvedUrl': {
312
349
  category: 'guest_app_network',
313
350
  count: 1,
314
351
  },
315
- 'packages/sootsim-engine/src/engine/config-plugin-splash-loader.ts :: fetch :: manifestFetchUrl(origin)':
352
+ 'packages/peach-engine/src/engine/config-plugin-splash-loader.ts :: fetch :: manifestFetchUrl(origin)':
316
353
  { category: 'local_development', count: 1 },
317
- 'packages/sootsim-engine/src/engine/emoji-metrics-font-loader.ts :: fetch :: attemptedBundledUrl':
354
+ 'packages/peach-engine/src/engine/emoji-metrics-font-loader.ts :: fetch :: attemptedBundledUrl':
318
355
  { category: 'same_origin_runtime', count: 1 },
319
- 'packages/sootsim-engine/src/engine/expo-app-config.ts :: fetch :: manifestFetchUrl(origin)':
356
+ 'packages/peach-engine/src/engine/expo-app-config.ts :: fetch :: manifestFetchUrl(origin)':
320
357
  { category: 'local_development', count: 1 },
321
- 'packages/sootsim-engine/src/engine/image-loader.ts :: fetch :: resolveImageFetchUri(uri)':
358
+ 'packages/peach-engine/src/engine/image-loader.ts :: fetch :: resolveImageFetchUri(uri)':
322
359
  { category: 'guest_app_network', count: 1 },
323
- 'packages/sootsim-engine/src/engine/language-font-loader.ts :: fetch :: url': {
360
+ 'packages/peach-engine/src/engine/language-font-loader.ts :: fetch :: url': {
324
361
  category: 'same_origin_runtime',
325
362
  count: 1,
326
363
  },
327
- 'packages/sootsim-engine/src/engine/lottie-runtime.ts :: fetch :: descriptor.value': {
364
+ 'packages/peach-engine/src/engine/lottie-runtime.ts :: fetch :: descriptor.value': {
328
365
  category: 'guest_app_network',
329
366
  count: 2,
330
367
  },
331
- 'packages/sootsim-engine/src/ios/sf-symbol-catalog.ts :: fetch :: `${catalogBaseUrl}${asset}.json`':
368
+ 'packages/peach-engine/src/android/material-symbol-catalog.ts :: fetch :: `${baseUrl}${asset}.json`':
369
+ {
370
+ category: 'same_origin_runtime',
371
+ count: 1,
372
+ },
373
+ 'packages/peach-engine/src/ios/sf-symbol-catalog.ts :: fetch :: `${catalogBaseUrl}${asset}.json`':
332
374
  {
333
375
  category: 'same_origin_runtime',
334
376
  count: 1,
335
377
  },
336
- 'packages/sootsim-engine/src/engine/system-font-extras.ts :: fetch :: url': {
378
+ 'packages/peach-engine/src/engine/system-font-extras.ts :: fetch :: url': {
337
379
  category: 'same_origin_runtime',
338
380
  count: 1,
339
381
  },
340
- 'packages/sootsim-engine/src/ExternalApp.tsx :: fetch :: getBundleProxyUrl(devServerUrl)':
382
+ 'packages/peach-engine/src/ExternalApp.tsx :: fetch :: getBundleProxyUrl(devServerUrl)':
341
383
  { category: 'guest_app_network', count: 1 },
342
- 'packages/sootsim-engine/src/ExternalApp.tsx :: fetch :: requestUrl': {
384
+ 'packages/peach-engine/src/ExternalApp.tsx :: fetch :: requestUrl': {
343
385
  category: 'guest_app_network',
344
386
  count: 1,
345
387
  },
346
- 'packages/sootsim-engine/src-electron/tray.ts :: client.get :: parsed': {
388
+ 'packages/peach-engine/src-electron/tray.ts :: client.get :: parsed': {
347
389
  category: 'guest_app_network',
348
390
  count: 1,
349
391
  },
350
- 'packages/sootsim-engine/src/mcp/ws-bridge.ts :: fetch :: bridgeHealthUrl': {
392
+ 'packages/peach-engine/src/mcp/ws-bridge.ts :: fetch :: bridgeHealthUrl': {
351
393
  category: 'local_development',
352
394
  count: 1,
353
395
  },
354
- 'packages/sootsim-engine/src/mcp/ws-bridge.ts :: websocket :: resolveSootsimBridgeWebSocketUrl({ bridgePort, href: window.location.href, })':
396
+ 'packages/peach-engine/src/mcp/ws-bridge.ts :: websocket :: resolveSootsimBridgeWebSocketUrl({ bridgePort, href: window.location.href, })':
355
397
  { category: 'local_development', count: 1 },
356
- 'packages/sootsim-engine/src/remote-stream/browser-tenant-proxy.ts :: websocket :: this.config.url':
398
+ 'packages/peach-engine/src/remote-stream/browser-tenant-proxy.ts :: websocket :: this.config.url':
357
399
  { category: 'remote_display_server', count: 1 },
358
- 'packages/sootsim-engine/src/menu/menuActions.ts :: fetch :: screenshot': {
400
+ 'packages/peach-engine/src/menu/menuActions.ts :: fetch :: screenshot': {
359
401
  category: 'guest_app_network',
360
402
  count: 1,
361
403
  },
362
- 'packages/sootsim-engine/src/preview/fetch-recorder.ts :: fetch :: absolute': {
404
+ 'packages/peach-engine/src/preview/fetch-recorder.ts :: fetch :: absolute': {
363
405
  category: 'guest_app_network',
364
406
  count: 2,
365
407
  },
366
408
  // the path is a parameter so one uploader serves both callers: recordings use
367
409
  // /api/preview/upload/{init,finalize} (the default) and `rnx preview` passes
368
410
  // /api/v1/previews{,/finalize}. both are first-party contrast endpoints.
369
- 'packages/sootsim-engine/src/preview/presigned-upload.ts :: fetch :: `${origin}${endpoints.finalize}`':
411
+ 'packages/peach-engine/src/preview/presigned-upload.ts :: fetch :: `${origin}${endpoints.finalize}`':
370
412
  { category: 'contrast_user_action', count: 1 },
371
- 'packages/sootsim-engine/src/preview/presigned-upload.ts :: fetch :: `${origin}${endpoints.init}`':
413
+ 'packages/peach-engine/src/preview/presigned-upload.ts :: fetch :: `${origin}${endpoints.init}`':
372
414
  { category: 'contrast_user_action', count: 1 },
373
- 'packages/sootsim-engine/src/preview/presigned-upload.ts :: fetch :: job.url': {
415
+ 'packages/peach-engine/src/preview/presigned-upload.ts :: fetch :: job.url': {
374
416
  category: 'presigned_upload',
375
417
  count: 1,
376
418
  },
377
- 'packages/sootsim-engine/src/preview/warm-bundle-cache.ts :: fetch :: url': {
419
+ 'packages/peach-engine/src/preview/warm-bundle-cache.ts :: fetch :: url': {
378
420
  category: 'guest_app_network',
379
421
  count: 1,
380
422
  },
381
- "packages/sootsim-engine/src/projects/projects-persistence.ts :: fetch :: '/__sootsim/shared-config'":
423
+ "packages/peach-engine/src/projects/projects-persistence.ts :: fetch :: '/__sootsim/shared-config'":
382
424
  { category: 'same_origin_runtime', count: 1 },
383
- 'packages/sootsim-engine/src/react-native/index.ts :: fetch :: resource': {
425
+ 'packages/peach-engine/src/react-native/index.ts :: fetch :: resource': {
384
426
  category: 'guest_app_network',
385
427
  count: 1,
386
428
  },
387
- 'packages/sootsim-engine/src/react-native/Keyboard.ts :: fetch :: url': {
429
+ 'packages/peach-engine/src/react-native/Keyboard.ts :: fetch :: url': {
388
430
  category: 'guest_app_network',
389
431
  count: 1,
390
432
  },
391
- 'packages/sootsim-engine/src/render-worker/canvaskit-shared.ts :: fetch :: fontUrl': {
433
+ 'packages/peach-engine/src/render-worker/canvaskit-shared.ts :: fetch :: fontUrl': {
392
434
  category: 'same_origin_runtime',
393
435
  count: 1,
394
436
  },
395
- 'packages/sootsim-engine/src/render-worker/canvaskit-shared.ts :: fetch :: pipelineCacheUrl':
437
+ 'packages/peach-engine/src/render-worker/canvaskit-shared.ts :: fetch :: pipelineCacheUrl':
396
438
  { category: 'same_origin_runtime', count: 1 },
397
- 'packages/sootsim-engine/src/render-worker/canvaskit-shared.ts :: fetch :: wasmUrl': {
439
+ 'packages/peach-engine/src/render-worker/canvaskit-shared.ts :: fetch :: wasmUrl': {
398
440
  category: 'same_origin_runtime',
399
441
  count: 1,
400
442
  },
401
443
  // the cpu simulator iframe document's dedicated worker loads the headless
402
444
  // canvaskit wasm and the font and asset manifests from the page's own
403
445
  // `/deps-native/engine-assets/` directory.
404
- 'packages/sootsim-engine/src/headless/browser-tenant-worker.ts :: fetch :: new URL(name, assetBase).href':
446
+ 'packages/peach-engine/src/headless/browser-tenant-worker.ts :: fetch :: new URL(name, assetBase).href':
405
447
  { category: 'same_origin_runtime', count: 1 },
406
448
  // hashes its own delivered script to identify the engine to display clients.
407
- 'packages/sootsim-engine/src/headless/browser-tenant-worker.ts :: fetch :: workerSourceUrl':
449
+ 'packages/peach-engine/src/headless/browser-tenant-worker.ts :: fetch :: workerSourceUrl':
408
450
  { category: 'same_origin_runtime', count: 1 },
409
451
  // the tenant build's built-in app chunk prefetch list and the chunk bodies
410
452
  // it names, resolved against the worker chunk's own url.
411
- 'packages/sootsim-engine/src/render-worker/app-in-worker.tsx :: fetch :: listUrl': {
453
+ 'packages/peach-engine/src/render-worker/app-in-worker.tsx :: fetch :: listUrl': {
412
454
  category: 'same_origin_runtime',
413
455
  count: 1,
414
456
  },
415
- 'packages/sootsim-engine/src/render-worker/app-in-worker.tsx :: fetch :: new URL(file, listUrl)':
457
+ 'packages/peach-engine/src/render-worker/app-in-worker.tsx :: fetch :: new URL(file, listUrl)':
416
458
  { category: 'same_origin_runtime', count: 1 },
417
- 'packages/sootsim-engine/src/render-worker/host.ts :: fetch :: msg.fallbackUrl': {
459
+ 'packages/peach-engine/src/render-worker/host.ts :: fetch :: msg.fallbackUrl': {
418
460
  category: 'guest_app_network',
419
461
  count: 1,
420
462
  },
421
- 'packages/sootsim-engine/src/render-worker/video-host.ts :: fetch :: uri': {
463
+ 'packages/peach-engine/src/render-worker/video-host.ts :: fetch :: uri': {
422
464
  category: 'guest_app_network',
423
465
  count: 1,
424
466
  },
425
- 'packages/sootsim-engine/src/render-worker/worker-font-loader.ts :: fetch :: url': {
467
+ 'packages/peach-engine/src/render-worker/worker-font-loader.ts :: fetch :: url': {
426
468
  category: 'same_origin_runtime',
427
469
  count: 1,
428
470
  },
429
- 'packages/sootsim-engine/src/render-worker/worker-handlers/lifecycle.ts :: fetch :: url':
471
+ 'packages/peach-engine/src/render-worker/worker-handlers/lifecycle.ts :: fetch :: url':
430
472
  { category: 'guest_app_network', count: 1 },
431
- 'packages/sootsim-engine/src/screenshots/capture-store.ts :: fetch :: cap.dataUrl': {
473
+ 'packages/peach-engine/src/screenshots/capture-store.ts :: fetch :: cap.dataUrl': {
432
474
  category: 'same_origin_runtime',
433
475
  count: 1,
434
476
  },
435
- 'packages/sootsim-engine/src/menu/menuActions.ts :: fetch :: `http://127.0.0.1:${port}/__send-to-box`':
477
+ 'packages/peach-engine/src/menu/menuActions.ts :: fetch :: `http://127.0.0.1:${port}/__send-to-box`':
436
478
  { category: 'local_development', count: 1 },
437
- "packages/sootsim-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref, 'grid')":
479
+ "packages/peach-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref, 'grid')":
438
480
  { category: 'contrast_user_action', count: 1 },
439
- 'packages/sootsim-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref, variant)':
481
+ 'packages/peach-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref, variant)':
440
482
  { category: 'contrast_user_action', count: 1 },
441
- 'packages/sootsim-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref)':
483
+ 'packages/peach-engine/src/screenshots/capture-store.ts :: fetch :: captureApiUrl(ref)':
442
484
  { category: 'contrast_user_action', count: 1 },
443
- "packages/sootsim-engine/src/server-discovery.ts :: fetch :: '/__server-scan'": {
485
+ "packages/peach-engine/src/server-discovery.ts :: fetch :: '/__server-scan'": {
444
486
  category: 'local_development',
445
487
  count: 1,
446
488
  },
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'":
489
+ 'packages/peach-engine/src/server-discovery.ts :: fetch :: `${gatewayOrigin}/__scan`': {
490
+ category: 'local_development',
491
+ count: 1,
492
+ },
493
+ "packages/peach-engine/src/settings/persistence.ts :: fetch :: '/__sootsim/shared-config'":
450
494
  { category: 'same_origin_runtime', count: 2 },
451
- 'packages/sootsim/cli/app-fonts.ts :: fetch :: `${origin}/`': {
495
+ 'packages/peachsim/cli/app-fonts.ts :: fetch :: `${origin}/`': {
452
496
  category: 'local_development',
453
497
  count: 1,
454
498
  },
455
- 'packages/sootsim/cli/app-fonts.ts :: fetch :: url': {
499
+ 'packages/peachsim/cli/app-fonts.ts :: fetch :: url': {
456
500
  category: 'local_development',
457
501
  count: 1,
458
502
  },
459
- 'packages/sootsim/cli/app-splash.ts :: fetch :: url': {
503
+ 'packages/peachsim/cli/app-splash.ts :: fetch :: url': {
460
504
  category: 'local_development',
461
505
  count: 1,
462
506
  },
463
- 'packages/sootsim/cli/commands/control.ts :: fetch :: imageUrl': {
507
+ 'packages/peachsim/cli/commands/control.ts :: fetch :: imageUrl': {
464
508
  category: 'local_development',
465
509
  count: 1,
466
510
  },
467
- 'packages/sootsim/cli/commands/control.ts :: fetch :: spec.url': {
511
+ 'packages/peachsim/cli/commands/control.ts :: fetch :: spec.url': {
468
512
  category: 'local_development',
469
513
  count: 1,
470
514
  },
471
- 'packages/sootsim/cli/commands/control.ts :: websocket :: `ws://127.0.0.1:${port}`': {
515
+ 'packages/peachsim/cli/commands/control.ts :: websocket :: `ws://127.0.0.1:${port}`': {
472
516
  category: 'local_development',
473
517
  count: 1,
474
518
  },
475
- 'packages/sootsim/cli/commands/cpu-profile.ts :: fetch :: `http://localhost:${cdpPort}/json/list`':
519
+ 'packages/peachsim/cli/commands/cpu-profile.ts :: fetch :: `http://localhost:${cdpPort}/json/list`':
476
520
  { category: 'local_development', count: 1 },
477
- 'packages/sootsim/cli/commands/cpu-profile.ts :: websocket :: wsUrl': {
521
+ 'packages/peachsim/cli/commands/cpu-profile.ts :: websocket :: wsUrl': {
478
522
  category: 'local_development',
479
523
  count: 1,
480
524
  },
481
- 'packages/sootsim/cli/commands/install-desktop.ts :: fetch :: url': {
525
+ 'packages/peachsim/cli/commands/install-desktop.ts :: fetch :: url': {
482
526
  category: 'electron_download',
483
527
  count: 1,
484
528
  },
485
- "packages/sootsim/cli/commands/login.ts :: fetch :: `${origin.replace(/\\/$/, '')}/api/dev-login`":
529
+ "packages/peachsim/cli/commands/login.ts :: fetch :: `${origin.replace(/\\/$/, '')}/api/dev-login`":
486
530
  { category: 'local_development', count: 1 },
487
- "packages/sootsim/cli/commands/logout.ts :: fetch :: `${current.origin.replace(/\\/$/, '')}/api/auth/sign-out`":
531
+ "packages/peachsim/cli/commands/logout.ts :: fetch :: `${current.origin.replace(/\\/$/, '')}/api/auth/sign-out`":
488
532
  { category: 'contrast_user_action', count: 1 },
489
- "packages/sootsim/cli/commands/maestro-generate.ts :: fetch :: `${args.origin.replace(/\\/$/, '')}/api/llm`":
533
+ "packages/peachsim/cli/commands/maestro-generate.ts :: fetch :: `${args.origin.replace(/\\/$/, '')}/api/llm`":
490
534
  { category: 'contrast_user_action', count: 1 },
491
- 'packages/sootsim/cli/commands/report-issue.ts :: fetch :: url': {
535
+ 'packages/peachsim/cli/commands/report-issue.ts :: fetch :: url': {
492
536
  category: 'contrast_user_action',
493
537
  count: 1,
494
538
  },
495
- 'packages/sootsim/cli/commands/runtime.ts :: websocket :: `ws://127.0.0.1:${port}`': {
539
+ 'packages/peachsim/cli/commands/runtime.ts :: websocket :: `ws://127.0.0.1:${port}`': {
496
540
  category: 'local_development',
497
541
  count: 1,
498
542
  },
499
- 'packages/sootsim/cli/commands/screenshots-capture.ts :: fetch :: `${apiOrigin}/api/sootsim/screenshot-capture?ref=${encodeURIComponent(ref)}&org=${encodeURIComponent(org)}`':
543
+ 'packages/peachsim/cli/commands/screenshots-capture.ts :: fetch :: `${apiOrigin}/api/sootsim/screenshot-capture?ref=${encodeURIComponent()}&org=${encodeURIComponent()}`':
500
544
  { 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)}`':
545
+ 'packages/peachsim/cli/commands/screenshots-capture.ts :: fetch :: `${apiOrigin}/api/sootsim/screenshot-decks?org=${encodeURIComponent()}&repo=${encodeURIComponent()}`':
502
546
  { category: 'contrast_user_action', count: 1 },
503
- 'packages/sootsim/cli/cli-update.ts :: fetch :: url': {
547
+ 'packages/peachsim/cli/cli-update.ts :: fetch :: url': {
504
548
  category: 'cli_delivery',
505
549
  count: 1,
506
550
  },
507
- 'packages/sootsim/scripts/publish-cli-binaries.ts :: fetch :: `${url}?sha256=${digest}`':
551
+ 'packages/peachsim/scripts/publish-cli-binaries.ts :: fetch :: `${url}?sha256=${digest}`':
508
552
  {
509
553
  category: 'cli_release_publish',
510
554
  count: 1,
511
555
  },
512
- 'packages/sootsim/scripts/publish-cli-binaries.ts :: fetch :: `${publicOrigin}/${channelKey}?sourceSha=${sourceSha}`':
556
+ 'packages/peachsim/scripts/publish-cli-binaries.ts :: fetch :: `${publicOrigin}/${channelKey}?sourceSha=${sourceSha}`':
513
557
  {
514
558
  category: 'cli_release_publish',
515
559
  count: 1,
516
560
  },
517
- 'packages/sootsim/cli/commands/upload.ts :: fetch :: url': {
561
+ 'packages/peachsim/cli/commands/upload.ts :: fetch :: url': {
518
562
  category: 'presigned_upload',
519
563
  count: 1,
520
564
  },
521
- 'packages/sootsim/cli/recording-access.ts :: fetch :: `${billingOrigin}/api/sootsim/billing/subscription`':
565
+ 'packages/peachsim/cli/recording-access.ts :: fetch :: `${billingOrigin}/api/sootsim/billing/subscription`':
522
566
  { category: 'contrast_user_action', count: 1 },
523
- "packages/sootsim/cli/run-registry.ts :: fetch :: `${args.origin.replace(/\\/$/, '')}/api/sootsim/test-runs`":
567
+ "packages/peachsim/cli/run-registry.ts :: fetch :: `${args.origin.replace(/\\/$/, '')}/api/sootsim/test-runs`":
524
568
  { category: 'contrast_user_action', count: 1 },
525
- 'packages/sootsim/cli/runtime-notes.ts :: fetch-alias :: url': {
569
+ 'packages/peachsim/cli/runtime-notes.ts :: fetch-alias :: url': {
526
570
  category: 'release_notes',
527
571
  count: 1,
528
572
  },
529
- 'packages/sootsim/cli/telemetry.ts :: fetch :: `${config.host}/batch/`': {
573
+ 'packages/peachsim/cli/telemetry.ts :: fetch :: `${config.host}/batch/`': {
530
574
  category: 'bounded_diagnostics',
531
575
  count: 1,
532
576
  },
@@ -535,39 +579,39 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
535
579
  // when a cloud box makes it return a remote wss:// endpoint, that egress
536
580
  // would land under this same local_development entry and go unnoticed. split
537
581
  // the declaration then, rather than letting one line cover both.
538
- 'packages/sootsim/cli/ws-bridge.ts :: websocket :: bridgeWsUrl(wsPort)': {
582
+ 'packages/peachsim/cli/ws-bridge.ts :: websocket :: bridgeWsUrl(wsPort)': {
539
583
  category: 'local_development',
540
584
  count: 1,
541
585
  },
542
- 'packages/sootsim/src/agent-daemon-client.ts :: socket.connect :: port': {
586
+ 'packages/peachsim/src/agent-daemon-client.ts :: socket.connect :: port': {
543
587
  category: 'local_development',
544
588
  count: 1,
545
589
  },
546
- 'packages/sootsim/src/agent-daemon-client.ts :: websocket :: `ws://127.0.0.1:${this.port}`':
590
+ 'packages/peachsim/src/agent-daemon-client.ts :: websocket :: `ws://127.0.0.1:${this.port}`':
547
591
  { category: 'local_development', count: 1 },
548
- "packages/sootsim/src/auth/shared-session.ts :: fetch :: `${origin.replace(/\\/$/, '')}/api/auth/me`":
592
+ "packages/peachsim/src/auth/shared-session.ts :: fetch :: `${origin.replace(/\\/$/, '')}/api/auth/me`":
549
593
  { category: 'contrast_user_action', count: 1 },
550
- "packages/sootsim/src/dev-bundle-resolution.ts :: fetch :: '/__server-scan'": {
594
+ "packages/peachsim/src/dev-bundle-resolution.ts :: fetch :: '/__server-scan'": {
551
595
  category: 'local_development',
552
596
  count: 1,
553
597
  },
554
- 'packages/sootsim/src/dev-bundle-resolution.ts :: fetch :: `/__fetch-proxy?url=${encodeURIComponent(targetUrl)}`':
598
+ 'packages/peachsim/src/dev-bundle-resolution.ts :: fetch :: `/__fetch-proxy?url=${encodeURIComponent()}`':
555
599
  { category: 'guest_app_network', count: 1 },
556
- 'packages/sootsim/src/dev-bundle-resolution.ts :: fetch :: targetUrl': {
600
+ 'packages/peachsim/src/dev-bundle-resolution.ts :: fetch :: targetUrl': {
557
601
  category: 'guest_app_network',
558
602
  count: 1,
559
603
  },
560
- 'packages/sootsim/src/dev-server-open.ts :: http.get :: `http://127.0.0.1:${port}/__server-scan`':
604
+ 'packages/peachsim/src/dev-server-open.ts :: http.get :: `http://127.0.0.1:${port}/__server-scan`':
561
605
  { 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), }":
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, headers: targetHeaders, ...loopbackTlsOptions(targetUrl), }":
563
607
  { 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), }":
608
+ "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
609
  { category: 'guest_app_network', count: 1 },
566
- 'packages/sootsim/src/host/websocket-proxy.ts :: node-request :: upstreamRequestUrl': {
610
+ 'packages/peachsim/src/host/websocket-proxy.ts :: node-request :: upstreamRequestUrl': {
567
611
  category: 'guest_app_network',
568
612
  count: 1,
569
613
  },
570
- 'packages/sootsim/src/screenshots/org-deck.ts :: fetch :: url': {
614
+ 'packages/peachsim/src/screenshots/org-deck.ts :: fetch :: url': {
571
615
  category: 'contrast_user_action',
572
616
  count: 1,
573
617
  },
@@ -765,20 +809,27 @@ function callKind(
765
809
 
766
810
  function firstArgument(node: CallExpression | NewExpression, source: string): string {
767
811
  const first = node.arguments[0]
768
- return first
769
- ? source.slice(first.start, first.end).replace(/\s+/g, ' ').trim()
770
- : '<none>'
812
+ if (!first) return '<none>'
813
+ const text = source.slice(first.start, first.end).replace(/\s+/g, ' ').trim()
814
+ // the key is source text, so renaming a local used as a path id used to change
815
+ // it and red main on a commit that moved no destination. what justifies erasing
816
+ // the argument to encodeURIComponent is that it is a local NAME rather than a
817
+ // destination, not that it is a path segment: at dev-bundle-resolution.ts and
818
+ // backend-origin.ts the argument is a whole target url behind a proxy path. a
819
+ // name carries no destination either way, so erasing it loses nothing, while
820
+ // the host expression and the path itself still have to be re-declared.
821
+ return text.replace(/encodeURIComponent\([^()]*\)/g, 'encodeURIComponent()')
771
822
  }
772
823
 
773
824
  export function detectOutboundCalls(repositoryRoot: string): DetectedOutboundCall[] {
774
825
  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'),
826
+ path.join(repositoryRoot, 'packages/peachsim/cli'),
827
+ path.join(repositoryRoot, 'packages/peachsim/scripts'),
828
+ path.join(repositoryRoot, 'packages/peachsim/src'),
829
+ path.join(repositoryRoot, 'packages/peach-engine/src'),
830
+ path.join(repositoryRoot, 'packages/peach-engine/src-electron'),
780
831
  path.join(repositoryRoot, 'packages/contrast-runtime-delivery/src'),
781
- path.join(repositoryRoot, 'packages/rnx-cloud-box/src'),
832
+ path.join(repositoryRoot, 'packages/peach-cloud-box/src'),
782
833
  ]
783
834
  const counts = new Map<string, number>()
784
835
  for (const file of roots.flatMap(sourceFilesUnder)) {