peachsim 0.1.2199 → 0.1.2201
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.
- package/cli/commands/inspect/settling.ts +20 -20
- package/cli/outbound-endpoints.ts +12 -0
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/bridge-contract-input.cjs +1 -1
- package/dist-lib/bridge-contract-input.mjs +1 -1
- package/dist-lib/bridge-contract.cjs +1 -1
- package/dist-lib/bridge-contract.mjs +1 -1
- package/dist-lib/bundle-channel.cjs +1423 -1118
- package/dist-lib/capture-contract.cjs +1 -1
- package/dist-lib/capture-contract.mjs +1 -1
- package/dist-lib/cloud-contract.cjs +1 -1
- package/dist-lib/cloud-contract.mjs +1 -1
- package/dist-lib/cloud-test-args.cjs +1 -1
- package/dist-lib/cloud-test-args.mjs +1 -1
- package/dist-lib/cloud.cjs +1 -1
- package/dist-lib/cloud.mjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/config.mjs +1 -1
- package/dist-lib/detox/index.cjs +22 -22
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/expo-swift-bundle.cjs +45945 -40026
- package/dist-lib/expo-swift-metadata.cjs +1 -1
- package/dist-lib/expo-swift-metadata.mjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +50879 -49774
- package/dist-lib/host/fetch-proxy-handler.cjs +16 -4
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/replacement-module-handler.cjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +36 -24
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/jump-to-source-native.cjs +1 -1
- package/dist-lib/kotlin-host.cjs +100 -10
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro-fingerprint-registry.cjs +1 -1
- package/dist-lib/metro-fingerprint-registry.mjs +1 -1
- package/dist-lib/metro-production-bundle.cjs +1 -1
- package/dist-lib/metro-production-bundle.mjs +1 -1
- package/dist-lib/metro.cjs +16 -4
- package/dist-lib/native-app-identity-project.cjs +14 -2
- package/dist-lib/native-app-identity-project.mjs +14 -2
- package/dist-lib/native-app-identity.cjs +1 -1
- package/dist-lib/native-app-identity.mjs +1 -1
- package/dist-lib/native-firebase-metadata.cjs +1 -1
- package/dist-lib/native-firebase-metadata.mjs +1 -1
- package/dist-lib/pdfium-raster.cjs +1 -1
- package/dist-lib/pdfium-raster.mjs +1 -1
- package/dist-lib/plist.cjs +1 -1
- package/dist-lib/plist.mjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/public-brand.cjs +1 -1
- package/dist-lib/public-origins-lib-esm.json +24 -24
- package/dist-lib/public-origins-lib.json +302 -289
- package/dist-lib/react-native-host-modules.cjs +1 -1
- package/dist-lib/react-native-host-modules.mjs +1 -1
- package/dist-lib/reap-browser.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +21 -21
- package/dist-lib/sdk.mjs +21 -21
- package/dist-lib/skills.cjs +3520 -2920
- package/dist-lib/swift-compile.cjs +34 -3
- package/dist-lib/swift-compile.mjs +34 -3
- package/dist-lib/swift-package.cjs +1 -1
- package/dist-lib/swift-package.mjs +1 -1
- package/dist-lib/swift-submit.cjs +1 -1
- package/dist-lib/swift-submit.mjs +1 -1
- package/dist-lib/swift-toolchain.cjs +1 -1
- package/dist-lib/swift.cjs +1 -1
- package/dist-lib/vite-swift.cjs +42 -8
- package/dist-lib/vite.cjs +16 -4
- package/dist-lib/worklet-executable.cjs +1 -1
- package/dist-lib/worklet-executable.mjs +1 -1
- package/dist-types/packages/peach-engine/src/engine/scene-table.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/engine/yoga-layout.d.ts +2 -1
- package/dist-types/packages/peach-engine/src/render-worker/app-prefetch-contract.d.ts +5 -0
- package/dist-types/packages/peach-engine/src/render-worker/protocol.d.ts +2 -0
- package/dist-types/packages/peach-engine/src/render-worker/tree-sync-port.d.ts +5 -0
- package/kotlin/sdk.tar.gz +0 -0
- package/package.json +1 -1
- package/runtime-companion.json +1 -1
- package/sdk/ios/System/Library/Frameworks/QuartzCore.framework/Headers/CAValueFunction.h +1 -1
- package/sdk/ios/System/Library/Frameworks/QuartzCore.framework/Modules/module.modulemap +1 -0
- package/sdk/ios/System/Library/Frameworks/UIKitText.framework/Headers/UIKitText.apinotes +14 -0
- package/src/android-layout-ids.ts +50 -0
- package/src/android-view-classes.ts +41 -0
- package/src/expo-swift-host.ts +6 -1
- package/src/java-module-abi.ts +2 -0
- package/src/javaAbiContract.ts +2 -0
- package/src/kotlin-app.ts +33 -7
- package/src/kotlin-host.ts +83 -6
- package/src/kotlin-maven-sources.ts +248 -0
- package/src/native-prebuilt.ts +3 -3
- package/src/react-native-core-build.ts +176 -0
- package/src/react-native-core-digest.ts +1 -1
- package/src/react-native-core.ts +24 -7
- package/src/swift-standin-emit.ts +9 -1
- package/src/swift-wasm-prune.ts +41 -3
- package/src/turbo-compile.ts +6 -4
|
@@ -103,7 +103,7 @@ function renderActivityIdleScript({
|
|
|
103
103
|
const requiredStillMs = ${Math.max(1, Math.round(requiredStillMs))}
|
|
104
104
|
let deadline = start + budgetMs
|
|
105
105
|
// with no tenant running, nothing an app draws can move.
|
|
106
|
-
const host =
|
|
106
|
+
const host = globalThis.__sootsimRenderHost ?? null
|
|
107
107
|
// a runtime that predates the animating flag reports render work as busy.
|
|
108
108
|
const moving = (activity) => activity.animating ?? activity.busy
|
|
109
109
|
const initial = host ? host.getRenderActivity() : null
|
|
@@ -131,10 +131,10 @@ function renderActivityIdleScript({
|
|
|
131
131
|
// budget proves the new screen. a loaded host runs a push past a tap's
|
|
132
132
|
// budget, so the transition carries its own timeout.
|
|
133
133
|
let transitionEndedAt = null
|
|
134
|
-
let transitionPending = budgetMs > 120 && typeof
|
|
134
|
+
let transitionPending = budgetMs > 120 && typeof globalThis.__sootsimTest?.waitForScreenTransitions === 'function'
|
|
135
135
|
if (transitionPending) {
|
|
136
136
|
Promise.resolve()
|
|
137
|
-
.then(() =>
|
|
137
|
+
.then(() => globalThis.__sootsimTest.waitForScreenTransitions({
|
|
138
138
|
timeoutMs: ${Math.max(0, Math.round(transitionTimeoutMs))},
|
|
139
139
|
settleMs: 64,
|
|
140
140
|
startWindowMs: ${Math.max(0, Math.round(transitionStartWindowMs))},
|
|
@@ -226,12 +226,12 @@ export async function waitForSootsimIdle({
|
|
|
226
226
|
})
|
|
227
227
|
: `(async () => {
|
|
228
228
|
const sleep = (ms) => new Promise((resolve) => setTimeout(resolve, ms))
|
|
229
|
-
// tests inject a virtual clock as
|
|
229
|
+
// tests inject a virtual clock as globalThis.__sootsimIdleClock ({ now, sleep })
|
|
230
230
|
// so the stillness window is proven in virtual time: real-timer polls under
|
|
231
231
|
// load stretch past a tight budget on a still screen. the busy guards below
|
|
232
232
|
// stay on the real setTimeout: virtual time advances only on poll sleeps,
|
|
233
233
|
// never on a guard that loses its race to an instant read.
|
|
234
|
-
const idleClock =
|
|
234
|
+
const idleClock = globalThis.__sootsimIdleClock
|
|
235
235
|
const hasIdleClock =
|
|
236
236
|
idleClock && typeof idleClock.now === 'function' && typeof idleClock.sleep === 'function'
|
|
237
237
|
const clockNow = hasIdleClock ? () => idleClock.now() : () => Date.now()
|
|
@@ -255,7 +255,7 @@ export async function waitForSootsimIdle({
|
|
|
255
255
|
const fullGeometry = ${!maestro && maxMs >= 1000 ? 'true' : 'false'}
|
|
256
256
|
const requiredStillMs = paintStill ? 0 : ${Math.max(1, Math.round(stablePolls)) * Math.max(1, Math.round(pollMs))}
|
|
257
257
|
const minimumStablePolls = paintStill ? 1 : ${Math.min(2, Math.max(1, Math.round(stablePolls)))}
|
|
258
|
-
const composite = paintStill ?
|
|
258
|
+
const composite = paintStill ? globalThis.SootSim?.bridges?.liveComposite : null
|
|
259
259
|
if (paintStill && !composite) {
|
|
260
260
|
return { settled: false, elapsed: clockNow() - start, blockedBy: 'screen pixels unavailable' }
|
|
261
261
|
}
|
|
@@ -269,7 +269,7 @@ export async function waitForSootsimIdle({
|
|
|
269
269
|
// it outlives this wait: a revision still current when a later wait
|
|
270
270
|
// polls names the same geometry, so a step that follows a settled one
|
|
271
271
|
// proves an unchanged screen without walking the tree again.
|
|
272
|
-
const geometry = (
|
|
272
|
+
const geometry = (globalThis.__peachSettleGeometry ??= { revision: null, hierarchy: null })
|
|
273
273
|
try {
|
|
274
274
|
|
|
275
275
|
// discover transitions while observing layout. when motion starts,
|
|
@@ -279,7 +279,7 @@ export async function waitForSootsimIdle({
|
|
|
279
279
|
// the budget restarts once it drains.
|
|
280
280
|
let transitionWait = (async () => {
|
|
281
281
|
try {
|
|
282
|
-
const wfst =
|
|
282
|
+
const wfst = globalThis.__sootsimTest?.waitForScreenTransitions
|
|
283
283
|
if (typeof wfst === 'function' && budgetMs > 120) {
|
|
284
284
|
const transition = await wfst({
|
|
285
285
|
timeoutMs: ${Math.max(0, Math.round(transitionTimeoutMs))},
|
|
@@ -335,19 +335,19 @@ export async function waitForSootsimIdle({
|
|
|
335
335
|
// animations in both realms: a worklet can move the app while the
|
|
336
336
|
// tenant's basic animation flag and last presented pixels read still.
|
|
337
337
|
const accessibilityRead = maestro
|
|
338
|
-
? answer(() =>
|
|
338
|
+
? answer(() => globalThis.__sootsimTest.captureAccessibilityTree()).catch(() => null)
|
|
339
339
|
: null
|
|
340
340
|
const motionRead = strict || paintStill
|
|
341
|
-
? answer(() =>
|
|
341
|
+
? answer(() => globalThis.__sootsimTest?.listAnimations?.()).catch(() => null)
|
|
342
342
|
: null
|
|
343
|
-
const statsRead = answer(() =>
|
|
343
|
+
const statsRead = answer(() => globalThis.__sootsimRenderHost?.queryStats?.()).catch(() => null)
|
|
344
344
|
// image preparation ends in the tenant before the compositor decodes
|
|
345
345
|
// and realizes its pixels. both owners must finish before settling.
|
|
346
346
|
// the compositor rejects a stats request it is too busy to answer.
|
|
347
|
-
const compositorRead = answer(() =>
|
|
348
|
-
const countsRead = answer(() =>
|
|
347
|
+
const compositorRead = answer(() => globalThis.__sootsimCompositor.getStats({ detail: 'readiness' })).catch(() => BUSY)
|
|
348
|
+
const countsRead = answer(() => globalThis.__sootsimTest?.getRequestCounts?.()).catch(() => null)
|
|
349
349
|
// the mounted hierarchy in render-worker mode comes from the test
|
|
350
|
-
// bridge:
|
|
350
|
+
// bridge: globalThis.__sootsimRoot is an empty placeholder there, so a
|
|
351
351
|
// walk over it hashes every screen to the same empty string while
|
|
352
352
|
// it moves. listInspectable is the worker-backed read describe
|
|
353
353
|
// uses; a worker too busy to answer it reads as unsettled. tight
|
|
@@ -355,13 +355,13 @@ export async function waitForSootsimIdle({
|
|
|
355
355
|
// it walks every node, so a poll whose geometry revision matches the
|
|
356
356
|
// last read, in this wait or an earlier one, reuses that read.
|
|
357
357
|
const hierarchyRead =
|
|
358
|
-
fullGeometry && typeof
|
|
359
|
-
? answer(() =>
|
|
358
|
+
fullGeometry && typeof globalThis.__sootsimTest?.listInspectable === 'function'
|
|
359
|
+
? answer(() => globalThis.__sootsimTest.getGeometryRevision?.())
|
|
360
360
|
.catch(() => null)
|
|
361
361
|
.then((revision) => {
|
|
362
362
|
if (revision === BUSY) return BUSY
|
|
363
363
|
if (typeof revision === 'string' && geometry.revision === revision) return geometry.hierarchy
|
|
364
|
-
return answer(() =>
|
|
364
|
+
return answer(() => globalThis.__sootsimTest.listInspectable({}))
|
|
365
365
|
.catch(() => null)
|
|
366
366
|
.then((hierarchy) => {
|
|
367
367
|
const kept = typeof revision === 'string' && Array.isArray(hierarchy)
|
|
@@ -401,7 +401,7 @@ export async function waitForSootsimIdle({
|
|
|
401
401
|
return {
|
|
402
402
|
runtimeUnsupported: {
|
|
403
403
|
error: 'runtime_readiness_unsupported',
|
|
404
|
-
runtimeVersion:
|
|
404
|
+
runtimeVersion: globalThis.__sootsimRuntimeVersion || 'unknown',
|
|
405
405
|
missingFields,
|
|
406
406
|
},
|
|
407
407
|
}
|
|
@@ -447,7 +447,7 @@ export async function waitForSootsimIdle({
|
|
|
447
447
|
// pre-motion baseline to compare against.
|
|
448
448
|
const motionStill = !workerBusy && !animating && !layoutDirty && !shellAnimating
|
|
449
449
|
const nodeCountRead = motionStill
|
|
450
|
-
? answer(() =>
|
|
450
|
+
? answer(() => globalThis.__sootsimTest?.getWindowNodeCount?.()).catch(() => null)
|
|
451
451
|
: null
|
|
452
452
|
const compositor = await compositorRead
|
|
453
453
|
if (compositor === BUSY) {
|
|
@@ -519,7 +519,7 @@ export async function waitForSootsimIdle({
|
|
|
519
519
|
)
|
|
520
520
|
}
|
|
521
521
|
} else {
|
|
522
|
-
const root =
|
|
522
|
+
const root = globalThis.__sootsimRoot
|
|
523
523
|
if (root) {
|
|
524
524
|
const walk = (n) => {
|
|
525
525
|
if (n.layout && n.layout.width > 0) {
|
|
@@ -243,6 +243,14 @@ export const OUTBOUND_ENDPOINTS: Record<string, OutboundEndpointDeclaration> = {
|
|
|
243
243
|
payload:
|
|
244
244
|
'HTTP GET of the public Compose BOM artifact and version declared by the app; no source, paths, credentials or app data',
|
|
245
245
|
},
|
|
246
|
+
kotlin_app_library_sources: {
|
|
247
|
+
category: 'explicit-user-action',
|
|
248
|
+
destination:
|
|
249
|
+
'the Maven repository URLs named in the Android project settings (google(), mavenCentral(), mavenLocal(), or a literal maven URL such as https://www.jitpack.io)',
|
|
250
|
+
preConsent: false,
|
|
251
|
+
payload:
|
|
252
|
+
'HTTP GET of the public sources jar for one catalog or literal dependency outside the pinned closure; fires only when peach open reads that dependency and the jar is not already cached. No source, paths, credentials or app data are sent',
|
|
253
|
+
},
|
|
246
254
|
coverage_parser_download: {
|
|
247
255
|
category: 'explicit-user-action',
|
|
248
256
|
destination:
|
|
@@ -1022,6 +1030,10 @@ export const DECLARED_OUTBOUND_CALLS: Record<string, OutboundCallDeclaration> =
|
|
|
1022
1030
|
category: 'kotlin_dependency_metadata',
|
|
1023
1031
|
count: 1,
|
|
1024
1032
|
},
|
|
1033
|
+
'packages/peachsim/src/kotlin-maven-sources.ts :: fetch :: url': {
|
|
1034
|
+
category: 'kotlin_app_library_sources',
|
|
1035
|
+
count: 1,
|
|
1036
|
+
},
|
|
1025
1037
|
'packages/peach-engine/src/engine/app-font-loader.ts :: fetch-alias :: url': {
|
|
1026
1038
|
category: 'local_development',
|
|
1027
1039
|
count: 1,
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.2201 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.2201 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.2201 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.2201 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.2201 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/beta.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.2201 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/beta.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.2201 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.2201 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! peach v0.1.
|
|
1
|
+
/*! peach v0.1.2201 | (c) 2026 Tamagui LLC | Proprietary; see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = '', __sootsim_import_meta_dirname = '', __sootsim_import_meta_filename = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; __sootsim_import_meta_dirname = __dirname; __sootsim_import_meta_filename = __filename; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|