sootsim 0.1.293 → 0.1.294
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/detox/expectations.ts +4 -3
- package/detox/index.ts +2 -4
- package/dist-cli/bin.js +7 -5
- package/dist-cli/chunks/{agent-YWI2NWL7.js → agent-GDFF6G7N.js} +4 -2
- package/dist-cli/chunks/{agent-wrapper-IYJ7UZOA.js → agent-wrapper-ZUKQUOD2.js} +4 -2
- package/dist-cli/chunks/{app-fonts-FQFUC4LR.js → app-fonts-IMYBO6AQ.js} +4 -2
- package/dist-cli/chunks/{assert-XUCELWAC.js → assert-GXOGZUKO.js} +4 -2
- package/dist-cli/chunks/{auth-4DQTV3OW.js → auth-P7FAKLHQ.js} +4 -2
- package/dist-cli/chunks/beta-RXT5RU3A.js +4 -0
- package/dist-cli/chunks/{camera-RYOHBVZA.js → camera-RNVAC4IO.js} +4 -2
- package/dist-cli/chunks/{chunk-2XYCSFGN.js → chunk-24BJFJFB.js} +26 -24
- package/dist-cli/chunks/{chunk-WVMYRKSS.js → chunk-2M7OZ6Y4.js} +4 -2
- package/dist-cli/chunks/chunk-37ZXWXM3.js +4 -0
- package/dist-cli/chunks/{chunk-UOHGYYSO.js → chunk-3F2GAJ4Z.js} +3 -1
- package/dist-cli/chunks/{chunk-KC5SCOGS.js → chunk-4Z4URZOG.js} +4 -2
- package/dist-cli/chunks/{chunk-LOQLZFRK.js → chunk-5S3GPTX7.js} +4 -2
- package/dist-cli/chunks/chunk-6YN3IAWJ.js +4 -0
- package/dist-cli/chunks/{chunk-YRFWATLA.js → chunk-7HVMAGDK.js} +4 -2
- package/dist-cli/chunks/{chunk-4B4VFT73.js → chunk-7Q77LTPT.js} +7 -5
- package/dist-cli/chunks/{chunk-RKXHQ2Q3.js → chunk-AFLGWOX3.js} +18 -16
- package/dist-cli/chunks/{chunk-LA5DIO33.js → chunk-AMKQUZA2.js} +3 -1
- package/dist-cli/chunks/{chunk-TJS5IMOH.js → chunk-AO65WEF7.js} +3 -1
- package/dist-cli/chunks/{chunk-BQT5YDTV.js → chunk-BBVBMGTT.js} +5 -3
- package/dist-cli/chunks/{chunk-WPPMUUML.js → chunk-BXO2PTNM.js} +4 -2
- package/dist-cli/chunks/{chunk-2VKTOZQ5.js → chunk-CTMPC5DN.js} +4 -2
- package/dist-cli/chunks/{chunk-RV67J726.js → chunk-D2R7PDN5.js} +3 -1
- package/dist-cli/chunks/{chunk-RMLJXP7T.js → chunk-DI55E6CS.js} +4 -2
- package/dist-cli/chunks/chunk-DUHBRW7J.js +4 -0
- package/dist-cli/chunks/chunk-EXTV6NWM.js +74 -0
- package/dist-cli/chunks/{chunk-6IFJLHDA.js → chunk-FNCSUHUR.js} +3 -1
- package/dist-cli/chunks/{chunk-DE4ZA3NL.js → chunk-FSRRJGYC.js} +4 -2
- package/dist-cli/chunks/{chunk-UPKYK52K.js → chunk-I233T2T4.js} +4 -2
- package/dist-cli/chunks/{chunk-E5WYXRGV.js → chunk-ISJ4ACWL.js} +28 -26
- package/dist-cli/chunks/{chunk-AFRXWKTA.js → chunk-JFWEDISV.js} +3 -1
- package/dist-cli/chunks/chunk-JGGXQHXH.js +10 -0
- package/dist-cli/chunks/chunk-JUOQ4ZPA.js +7 -0
- package/dist-cli/chunks/{chunk-2M57EAWS.js → chunk-K53YCAQM.js} +3 -1
- package/dist-cli/chunks/{chunk-7B6RGFTM.js → chunk-KWIURH7N.js} +4 -2
- package/dist-cli/chunks/{chunk-VO74GDXL.js → chunk-N4MT5KEB.js} +5 -3
- package/dist-cli/chunks/{chunk-VZ44FQDG.js → chunk-O6I5ZGMY.js} +3 -1
- package/dist-cli/chunks/chunk-OKSGM6IG.js +4 -0
- package/dist-cli/chunks/chunk-OYYQQBKP.js +3 -0
- package/dist-cli/chunks/{chunk-NCCMRFXU.js → chunk-PSOUSJSZ.js} +3 -1
- package/dist-cli/chunks/{chunk-J6P2UPXH.js → chunk-PZTKQG6H.js} +4 -2
- package/dist-cli/chunks/{chunk-B7TX4WFB.js → chunk-RWUNC66S.js} +4 -2
- package/dist-cli/chunks/{chunk-547W23BB.js → chunk-SLMUW2WU.js} +4 -2
- package/dist-cli/chunks/{chunk-WI36YJ23.js → chunk-SPQKJDIK.js} +3 -1
- package/dist-cli/chunks/{chunk-PCAPHXN3.js → chunk-V2MYTL4C.js} +4 -2
- package/dist-cli/chunks/{chunk-JOPKZVOW.js → chunk-VVVORIQI.js} +3 -1
- package/dist-cli/chunks/chunk-VXGCZUX4.js +5 -0
- package/dist-cli/chunks/chunk-W44PDEQH.js +4 -0
- package/dist-cli/chunks/{chunk-WOWLO4LL.js → chunk-WQL3BLFD.js} +3 -1
- package/dist-cli/chunks/{chunk-U3564F2Y.js → chunk-WYRLRNIP.js} +4 -2
- package/dist-cli/chunks/{chunk-WP3TFHFL.js → chunk-XYFP466E.js} +4 -2
- package/dist-cli/chunks/chunk-ZFMJFX27.js +4 -0
- package/dist-cli/chunks/{chunk-67CIS55C.js → chunk-ZUX5PIGI.js} +3 -1
- package/dist-cli/chunks/{cleanup-BLFDJSFS.js → cleanup-74SKOD2P.js} +4 -2
- package/dist-cli/chunks/cli-version-2JGMYL4O.js +4 -0
- package/dist-cli/chunks/{compat-Q3WCSTB7.js → compat-ME6HXEEU.js} +5 -3
- package/dist-cli/chunks/{config-NHNMRRNB.js → config-PM67EWT3.js} +4 -2
- package/dist-cli/chunks/control-HV7GZXAH.js +4 -0
- package/dist-cli/chunks/daemon-LKRHF5OK.js +4 -0
- package/dist-cli/chunks/{debug-PGRMZFXA.js → debug-XUGWZLIW.js} +5 -3
- package/dist-cli/chunks/{desktop-NVTQ37LH.js → desktop-IO5HPX5Z.js} +5 -3
- package/dist-cli/chunks/{detox-W3JDXS76.js → detox-E42OEJJZ.js} +4 -2
- package/dist-cli/chunks/{device-KQYN3EVK.js → device-XA67L2EB.js} +4 -2
- package/dist-cli/chunks/{diagnose-CPUKSGNO.js → diagnose-36FD6ECF.js} +4 -2
- package/dist-cli/chunks/disk-cleanup-DDCFGFWK.js +4 -0
- package/dist-cli/chunks/drivers-C2SH3DWS.js +4 -0
- package/dist-cli/chunks/{film-VZGAZ2YY.js → film-XARTGFIZ.js} +11 -24
- package/dist-cli/chunks/flow-E64G5LF3.js +4 -0
- package/dist-cli/chunks/help-4ZSRG4F4.js +4 -0
- package/dist-cli/chunks/{hidden-runtime-alias-KWHABCNZ.js → hidden-runtime-alias-T4ZALBE2.js} +4 -2
- package/dist-cli/chunks/{home-paths-O4CGYVHF.js → home-paths-5L7N2FLS.js} +4 -2
- package/dist-cli/chunks/inspect-U2SV25ER.js +4 -0
- package/dist-cli/chunks/install-desktop-LTGVT7ID.js +4 -0
- package/dist-cli/chunks/{login-KPN4Z26Q.js → login-GF6WVVER.js} +6 -4
- package/dist-cli/chunks/logout-6F6UKUNI.js +4 -0
- package/dist-cli/chunks/{maestro-PYA4AHTS.js → maestro-FMPKHEMX.js} +13 -11
- package/dist-cli/chunks/{maestro-generate-KCMYWPWL.js → maestro-generate-QGPGNXI6.js} +5 -3
- package/dist-cli/chunks/{mode-AEB7G2SJ.js → mode-JSNMAHDZ.js} +4 -2
- package/dist-cli/chunks/optional-demo-registry-K4VERLJV.js +4 -0
- package/dist-cli/chunks/{perf-YLXGZI3E.js → perf-PO7ARUTG.js} +4 -2
- package/dist-cli/chunks/{permissions-7VMVZOUV.js → permissions-XI2QUAEZ.js} +4 -2
- package/dist-cli/chunks/{record-AVQO45PE.js → record-4CJCJAFD.js} +5 -3
- package/dist-cli/chunks/runtime-SN2RWDES.js +4 -0
- package/dist-cli/chunks/{screenshot-command-LACQLA4N.js → screenshot-command-NDVULWMZ.js} +5 -3
- package/dist-cli/chunks/{screenshots-capture-PROOBSGB.js → screenshots-capture-Q7UTXF3V.js} +4 -2
- package/dist-cli/chunks/{serve-FJN2FRGW.js → serve-UEUIBHCK.js} +4 -2
- package/dist-cli/chunks/{setup-IVV4NRYQ.js → setup-ZEEWYK4B.js} +5 -3
- package/dist-cli/chunks/{skills-WYR3PJOH.js → skills-NFG6VAO5.js} +4 -2
- package/dist-cli/chunks/{storage-GM7K4MGM.js → storage-POWCOUCQ.js} +4 -2
- package/dist-cli/chunks/store-BJK7V7FL.js +4 -0
- package/dist-cli/chunks/telemetry-EJP5EW7K.js +4 -0
- package/dist-cli/chunks/{timeline-R5UL3N4T.js → timeline-MNHZCVAL.js} +4 -2
- package/dist-cli/chunks/{upgrade-RWHSFZRX.js → upgrade-X57SIG7L.js} +4 -2
- package/dist-cli/chunks/upload-JABM3ITZ.js +4 -0
- package/dist-cli/chunks/{version-7K6TVQOW.js → version-V4IKIDX7.js} +4 -2
- package/dist-cli/chunks/web-F5CLF34I.js +4 -0
- package/dist-cli/chunks/{what-happened-K24TSJZX.js → what-happened-H74HHGRK.js} +4 -2
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +3 -3
- package/dist-lib/agent-sessions.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/cli-constants.cjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +5 -4
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +3 -3
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/menu.cjs +45 -4
- package/dist-lib/menu.mjs +42 -4
- package/dist-lib/metro.cjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +5 -2
- package/dist-lib/sdk.mjs +4 -2
- package/dist-lib/skills.cjs +325 -182
- package/dist-lib/vite.cjs +1 -1
- package/package.json +6 -1
- package/scripts/postinstall.cjs +11 -2
- package/src/agent-identity.ts +2 -2
- package/src/menu.ts +53 -4
- package/src/vite-plugin.ts +102 -2
- package/dist-cli/chunks/beta-CFDAW6UN.js +0 -2
- package/dist-cli/chunks/chunk-3UX6AY2B.js +0 -2
- package/dist-cli/chunks/chunk-6VVLDYPV.js +0 -8
- package/dist-cli/chunks/chunk-7H34H74K.js +0 -72
- package/dist-cli/chunks/chunk-7H5G4HUK.js +0 -2
- package/dist-cli/chunks/chunk-ACSTEPSD.js +0 -2
- package/dist-cli/chunks/chunk-HKMWUN7F.js +0 -2
- package/dist-cli/chunks/chunk-K5JEUI5G.js +0 -5
- package/dist-cli/chunks/chunk-MOU2WLO4.js +0 -2
- package/dist-cli/chunks/chunk-QXDXUDJD.js +0 -1
- package/dist-cli/chunks/chunk-USJTVC7T.js +0 -2
- package/dist-cli/chunks/chunk-YNG4C3ZS.js +0 -2
- package/dist-cli/chunks/cli-version-TQHZOK4L.js +0 -2
- package/dist-cli/chunks/control-I7YBDRJT.js +0 -2
- package/dist-cli/chunks/daemon-4R3SZLZY.js +0 -2
- package/dist-cli/chunks/disk-cleanup-2COWZWBC.js +0 -2
- package/dist-cli/chunks/drivers-RRZM6E72.js +0 -2
- package/dist-cli/chunks/flow-VH6DFDQ4.js +0 -2
- package/dist-cli/chunks/help-3HQ2RINO.js +0 -2
- package/dist-cli/chunks/inspect-PKMJGXDH.js +0 -2
- package/dist-cli/chunks/install-desktop-K5TP3ZHJ.js +0 -2
- package/dist-cli/chunks/logout-E3UCJAMC.js +0 -2
- package/dist-cli/chunks/optional-demo-registry-AIWOBAAA.js +0 -2
- package/dist-cli/chunks/runtime-HOGETVVD.js +0 -2
- package/dist-cli/chunks/store-YLVHPKG7.js +0 -2
- package/dist-cli/chunks/telemetry-MQKB6PFX.js +0 -2
- package/dist-cli/chunks/upload-RBH4XGJ2.js +0 -2
- package/dist-cli/chunks/web-46ZPQCAL.js +0 -2
package/dist-lib/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.294 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __create = Object.create;
|
package/package.json
CHANGED
|
@@ -1,9 +1,14 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "sootsim",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.294",
|
|
4
4
|
"description": "sootsim CLI + vite/metro plugins + skills registry. bridge client for driving the proprietary sootsim-engine over WebSocket.",
|
|
5
5
|
"author": "Tamagui LLC",
|
|
6
6
|
"license": "MIT",
|
|
7
|
+
"repository": {
|
|
8
|
+
"type": "git",
|
|
9
|
+
"url": "git+https://github.com/sootbean/soot.git",
|
|
10
|
+
"directory": "packages/sootsim"
|
|
11
|
+
},
|
|
7
12
|
"type": "module",
|
|
8
13
|
"publishConfig": {
|
|
9
14
|
"access": "public"
|
package/scripts/postinstall.cjs
CHANGED
|
@@ -42,13 +42,22 @@ if (existingActiveRuntime) {
|
|
|
42
42
|
process.exit(0)
|
|
43
43
|
}
|
|
44
44
|
|
|
45
|
+
const RUNTIME_INSTALL_TIMEOUT_MS = 60_000
|
|
46
|
+
|
|
45
47
|
const bin = path.join(__dirname, '..', 'dist-cli', 'bin.js')
|
|
46
48
|
const res = spawnSync(process.execPath, [bin, 'runtime', 'install'], {
|
|
47
49
|
stdio: 'inherit',
|
|
48
|
-
timeout:
|
|
50
|
+
timeout: RUNTIME_INSTALL_TIMEOUT_MS,
|
|
49
51
|
})
|
|
50
52
|
|
|
51
|
-
if (res.
|
|
53
|
+
if (res.error && res.error.code === 'ETIMEDOUT') {
|
|
54
|
+
// the runtime tarball is ~48MB; on a slow link it does not finish inside the
|
|
55
|
+
// npm-install budget above. say that plainly instead of implying we chose to
|
|
56
|
+
// defer — the user has to run the install themselves for it to complete.
|
|
57
|
+
console.log(
|
|
58
|
+
`sootsim: runtime download did not finish within ${RUNTIME_INSTALL_TIMEOUT_MS / 1000}s, so npm install could return — run \`sootsim upgrade\` to finish it`,
|
|
59
|
+
)
|
|
60
|
+
} else if (res.status !== 0) {
|
|
52
61
|
console.log('sootsim: runtime install deferred to first run')
|
|
53
62
|
}
|
|
54
63
|
process.exit(0)
|
package/src/agent-identity.ts
CHANGED
|
@@ -12,8 +12,8 @@ export function agentSessionIdFromCliIdentity(identity: string | null): string |
|
|
|
12
12
|
export function teamMachineSessionIdFromCliIdentity(
|
|
13
13
|
identity: string | null,
|
|
14
14
|
): string | null {
|
|
15
|
-
if (!identity?.startsWith('
|
|
16
|
-
const sessionId = identity.slice('
|
|
15
|
+
if (!identity?.startsWith('TM_SESSION:')) return null
|
|
16
|
+
const sessionId = identity.slice('TM_SESSION:'.length).trim()
|
|
17
17
|
if (!TEAM_MACHINE_SESSION_RE.test(sessionId)) return null
|
|
18
18
|
return sessionId
|
|
19
19
|
}
|
package/src/menu.ts
CHANGED
|
@@ -7,6 +7,26 @@ export const SOOTSIM_SHELL_COMMAND_NAME = 'sootsim:shell-command'
|
|
|
7
7
|
export type SootSimMenuPlatform = 'browser' | 'electron'
|
|
8
8
|
export type SootSimScaleMode = 'physical' | 'point' | 'pixel' | 'fit'
|
|
9
9
|
|
|
10
|
+
// ambient glow strength. one setting with three states rather than an on/off
|
|
11
|
+
// pair plus a separate strength: every host that carries the preference (the
|
|
12
|
+
// menus, the persisted setting, the ?ambientGlow= boot seed, the live
|
|
13
|
+
// set-ambient-glow push, electron's shared config) then carries exactly one
|
|
14
|
+
// value and cannot end up half-configured.
|
|
15
|
+
export type SootSimAmbientGlowLevel = 'off' | 'soft' | 'full'
|
|
16
|
+
export const SOOTSIM_AMBIENT_GLOW_LEVELS = ['off', 'soft', 'full'] as const
|
|
17
|
+
|
|
18
|
+
export function isSootSimAmbientGlowLevel(
|
|
19
|
+
value: unknown,
|
|
20
|
+
): value is SootSimAmbientGlowLevel {
|
|
21
|
+
return value === 'off' || value === 'soft' || value === 'full'
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
export const SOOTSIM_AMBIENT_GLOW_LABELS: Record<SootSimAmbientGlowLevel, string> = {
|
|
25
|
+
off: 'Off',
|
|
26
|
+
soft: 'Soft',
|
|
27
|
+
full: 'Full',
|
|
28
|
+
}
|
|
29
|
+
|
|
10
30
|
export type SootSimMenuItemDef =
|
|
11
31
|
| { type: 'separator' }
|
|
12
32
|
| {
|
|
@@ -35,8 +55,10 @@ export type SootSimMenuDef = {
|
|
|
35
55
|
export interface SootSimMenuState {
|
|
36
56
|
currentDevice: string
|
|
37
57
|
showBezels: boolean
|
|
38
|
-
|
|
58
|
+
showMenuBar: boolean
|
|
39
59
|
showRail: boolean
|
|
60
|
+
solidWindow: boolean
|
|
61
|
+
ambientGlow: SootSimAmbientGlowLevel
|
|
40
62
|
screenshotMode: boolean
|
|
41
63
|
threeMode: boolean
|
|
42
64
|
inspectMode: boolean
|
|
@@ -73,6 +95,7 @@ export interface SootSimShortcutDocSection {
|
|
|
73
95
|
export type MenuItemDef = SootSimMenuItemDef
|
|
74
96
|
export type MenuDef = SootSimMenuDef
|
|
75
97
|
export type MenuState = SootSimMenuState
|
|
98
|
+
export type AmbientGlowLevel = SootSimAmbientGlowLevel
|
|
76
99
|
export type ShortcutPlatform = SootSimMenuPlatform
|
|
77
100
|
export type MenuShortcutEntry = SootSimMenuShortcutEntry
|
|
78
101
|
export type ShortcutDocEntry = SootSimShortcutDocEntry
|
|
@@ -366,10 +389,11 @@ function windowMenu(state: SootSimMenuState): SootSimMenuDef {
|
|
|
366
389
|
action: 'toggle-bezels',
|
|
367
390
|
},
|
|
368
391
|
{
|
|
369
|
-
label: 'Show
|
|
392
|
+
label: 'Show Menu Bar',
|
|
370
393
|
type: 'checkbox',
|
|
371
|
-
checked: state.
|
|
372
|
-
action: 'toggle-
|
|
394
|
+
checked: state.showMenuBar,
|
|
395
|
+
action: 'toggle-menubar',
|
|
396
|
+
hiddenIn: 'electron',
|
|
373
397
|
},
|
|
374
398
|
{
|
|
375
399
|
label: 'Show Rail',
|
|
@@ -378,6 +402,31 @@ function windowMenu(state: SootSimMenuState): SootSimMenuDef {
|
|
|
378
402
|
action: 'toggle-rail',
|
|
379
403
|
hiddenIn: 'electron',
|
|
380
404
|
},
|
|
405
|
+
{
|
|
406
|
+
// desktop only. the device window is frameless and transparent, which
|
|
407
|
+
// is right for a phone floating on the desktop and wrong for the
|
|
408
|
+
// full-window modes; this pins the solid style on all the time. 3d
|
|
409
|
+
// mode switches to it on its own either way.
|
|
410
|
+
label: 'Solid Window',
|
|
411
|
+
type: 'checkbox',
|
|
412
|
+
checked: state.solidWindow,
|
|
413
|
+
action: 'toggle-solid-window',
|
|
414
|
+
hiddenIn: 'browser',
|
|
415
|
+
},
|
|
416
|
+
{
|
|
417
|
+
// browser only: the wash needs several glow radii of stage around the
|
|
418
|
+
// device to fade out in, and electron's transparent window is sized to
|
|
419
|
+
// the device, so there it can only paint a clipped rectangle.
|
|
420
|
+
label: 'Ambient Glow',
|
|
421
|
+
hiddenIn: 'electron',
|
|
422
|
+
items: SOOTSIM_AMBIENT_GLOW_LEVELS.map((level) => ({
|
|
423
|
+
label: SOOTSIM_AMBIENT_GLOW_LABELS[level],
|
|
424
|
+
type: 'radio' as const,
|
|
425
|
+
checked: state.ambientGlow === level,
|
|
426
|
+
action: 'set-ambient-glow',
|
|
427
|
+
actionPayload: level,
|
|
428
|
+
})),
|
|
429
|
+
},
|
|
381
430
|
{
|
|
382
431
|
label: 'Screenshot',
|
|
383
432
|
type: 'checkbox',
|
package/src/vite-plugin.ts
CHANGED
|
@@ -15,6 +15,7 @@ import { fileURLToPath } from 'url'
|
|
|
15
15
|
import { type Plugin, transformWithOxc } from 'vite'
|
|
16
16
|
import { resolveExportsHiddenSubpath } from '../../compat/src/resolve-hidden-subpath.ts'
|
|
17
17
|
import {
|
|
18
|
+
SOOTSIM_COMPAT_PUBLISHED_BROWSER_ENTRIES,
|
|
18
19
|
SOOTSIM_COMPAT_WRAPPER_REAL_PACKAGES,
|
|
19
20
|
SOOTSIM_HAPTIC_FEEDBACK_TOUCHABLE_SOURCE,
|
|
20
21
|
SOOTSIM_HAPTIC_FEEDBACK_TOUCHABLE_SPECIFIER,
|
|
@@ -95,6 +96,68 @@ const rnLibraryStubs = Object.fromEntries(
|
|
|
95
96
|
]),
|
|
96
97
|
)
|
|
97
98
|
|
|
99
|
+
type PublishedBrowserPackage = {
|
|
100
|
+
specifier: string
|
|
101
|
+
packageDir: string
|
|
102
|
+
browserEntry: string
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
function resolvePublishedBrowserPackages(appDir: string): PublishedBrowserPackage[] {
|
|
106
|
+
const packageRequire = appDir
|
|
107
|
+
? createRequire(path.join(appDir, 'package.json'))
|
|
108
|
+
: sootsimPluginRequire
|
|
109
|
+
return Object.values(SOOTSIM_COMPAT_PUBLISHED_BROWSER_ENTRIES).flatMap(
|
|
110
|
+
({ specifier }) => {
|
|
111
|
+
try {
|
|
112
|
+
const packageJson = packageRequire.resolve(`${specifier}/package.json`)
|
|
113
|
+
const packageManifest = JSON.parse(fs.readFileSync(packageJson, 'utf8'))
|
|
114
|
+
const rootExport = Reflect.get(packageManifest.exports, '.')
|
|
115
|
+
const browserFile =
|
|
116
|
+
typeof rootExport === 'object' && rootExport !== null
|
|
117
|
+
? Reflect.get(rootExport, 'browser')
|
|
118
|
+
: undefined
|
|
119
|
+
if (typeof browserFile !== 'string') return []
|
|
120
|
+
const packageDir = path.dirname(packageJson)
|
|
121
|
+
const browserEntry = path.resolve(packageDir, browserFile)
|
|
122
|
+
if (!fs.existsSync(browserEntry)) return []
|
|
123
|
+
return [{ specifier, packageDir, browserEntry }]
|
|
124
|
+
} catch {
|
|
125
|
+
return []
|
|
126
|
+
}
|
|
127
|
+
},
|
|
128
|
+
)
|
|
129
|
+
}
|
|
130
|
+
|
|
131
|
+
function resolvePublishedBrowserInternal(
|
|
132
|
+
source: string,
|
|
133
|
+
importer: string | undefined,
|
|
134
|
+
packages: PublishedBrowserPackage[],
|
|
135
|
+
): string | null {
|
|
136
|
+
if (!importer || !source.startsWith('.')) return null
|
|
137
|
+
const cleanImporter = importer.split('?')[0]
|
|
138
|
+
const packageEntry = packages.find(({ packageDir }) => {
|
|
139
|
+
const relative = path.relative(packageDir, cleanImporter)
|
|
140
|
+
return relative.length > 0 && !relative.startsWith('..') && !path.isAbsolute(relative)
|
|
141
|
+
})
|
|
142
|
+
if (!packageEntry) return null
|
|
143
|
+
|
|
144
|
+
const cleanSource = source.split('?')[0]
|
|
145
|
+
const resolved = path.resolve(path.dirname(cleanImporter), cleanSource)
|
|
146
|
+
const sourceExtension = path.extname(cleanSource)
|
|
147
|
+
if (sourceExtension) {
|
|
148
|
+
const candidate = `${resolved.slice(0, -sourceExtension.length)}.web${sourceExtension}`
|
|
149
|
+
return fs.existsSync(candidate) ? candidate : null
|
|
150
|
+
}
|
|
151
|
+
|
|
152
|
+
for (const extension of ['.tsx', '.ts', '.jsx', '.js', '.mjs', '.cjs']) {
|
|
153
|
+
const fileCandidate = `${resolved}.web${extension}`
|
|
154
|
+
if (fs.existsSync(fileCandidate)) return fileCandidate
|
|
155
|
+
const indexCandidate = path.join(resolved, `index.web${extension}`)
|
|
156
|
+
if (fs.existsSync(indexCandidate)) return indexCandidate
|
|
157
|
+
}
|
|
158
|
+
return null
|
|
159
|
+
}
|
|
160
|
+
|
|
98
161
|
// resolve the real @react-navigation/native location at config time so the
|
|
99
162
|
// wrapper at compat/src/stubs/react-navigation-native.tsx can import it
|
|
100
163
|
// without bouncing back through the alias above. the wrapper imports from
|
|
@@ -269,6 +332,7 @@ export function sootsim(options: SootSimOptions = {}): Plugin[] {
|
|
|
269
332
|
const appDir = options.app ? path.resolve(options.app) : ''
|
|
270
333
|
const extraSources = (options.sources || []).map((s) => path.resolve(s))
|
|
271
334
|
const ownedPackages = new Set([...coreOwnedPackages, ...(options.ownedPackages || [])])
|
|
335
|
+
const publishedBrowserPackages = resolvePublishedBrowserPackages(appDir)
|
|
272
336
|
|
|
273
337
|
function isAppSource(filePath: string): boolean {
|
|
274
338
|
// exclude node_modules — only actual app source files
|
|
@@ -280,7 +344,14 @@ export function sootsim(options: SootSimOptions = {}): Plugin[] {
|
|
|
280
344
|
return [
|
|
281
345
|
wsBridgePlugin(),
|
|
282
346
|
reactBridgePlugin(),
|
|
283
|
-
|
|
347
|
+
{
|
|
348
|
+
name: 'sootsim-published-browser-internals',
|
|
349
|
+
enforce: 'pre',
|
|
350
|
+
resolveId(source, importer) {
|
|
351
|
+
return resolvePublishedBrowserInternal(source, importer, publishedBrowserPackages)
|
|
352
|
+
},
|
|
353
|
+
},
|
|
354
|
+
sootsimConfigPlugin(appDir, extraSources, publishedBrowserPackages),
|
|
284
355
|
rnghUpstreamInternalResolvePlugin(),
|
|
285
356
|
fixJsxRuntimeExports(),
|
|
286
357
|
flowStripTransform(),
|
|
@@ -688,7 +759,11 @@ export function wsBridgePlugin(): Plugin {
|
|
|
688
759
|
}
|
|
689
760
|
|
|
690
761
|
// applies resolve, define, optimizeDeps config
|
|
691
|
-
function sootsimConfigPlugin(
|
|
762
|
+
function sootsimConfigPlugin(
|
|
763
|
+
appDir: string,
|
|
764
|
+
extraSources: string[],
|
|
765
|
+
publishedBrowserPackages: PublishedBrowserPackage[],
|
|
766
|
+
): Plugin {
|
|
692
767
|
return {
|
|
693
768
|
name: 'sootsim-config',
|
|
694
769
|
config(_, { mode }) {
|
|
@@ -710,6 +785,13 @@ function sootsimConfigPlugin(appDir: string, extraSources: string[]): Plugin {
|
|
|
710
785
|
replacement: path.resolve(compatStubsDir, file),
|
|
711
786
|
}))
|
|
712
787
|
|
|
788
|
+
const publishedBrowserEntryAliases = publishedBrowserPackages.map(
|
|
789
|
+
({ specifier, browserEntry }) => ({
|
|
790
|
+
find: new RegExp(`^${specifier.replace(/[.*+?^${}()|[\]\\]/g, '\\$&')}$`),
|
|
791
|
+
replacement: browserEntry,
|
|
792
|
+
}),
|
|
793
|
+
)
|
|
794
|
+
|
|
713
795
|
const dedupe = ['react', 'react-dom', 'react/jsx-runtime', 'react/jsx-dev-runtime']
|
|
714
796
|
|
|
715
797
|
// internal sootsim builds must keep the entire Tamagui package family on a
|
|
@@ -735,6 +817,12 @@ function sootsimConfigPlugin(appDir: string, extraSources: string[]): Plugin {
|
|
|
735
817
|
// them served live so our plugin aliases kick in.
|
|
736
818
|
'@gorhom/bottom-sheet',
|
|
737
819
|
'@gorhom/portal',
|
|
820
|
+
// these reviewed packages publish a supported browser artifact. keep
|
|
821
|
+
// them on the live graph so the exact alias below wins over their
|
|
822
|
+
// `react-native` export during dependency optimization too.
|
|
823
|
+
...Object.values(SOOTSIM_COMPAT_PUBLISHED_BROWSER_ENTRIES).map(
|
|
824
|
+
({ specifier }) => specifier,
|
|
825
|
+
),
|
|
738
826
|
]
|
|
739
827
|
|
|
740
828
|
return {
|
|
@@ -797,6 +885,17 @@ function sootsimConfigPlugin(appDir: string, extraSources: string[]): Plugin {
|
|
|
797
885
|
],
|
|
798
886
|
},
|
|
799
887
|
plugins: [
|
|
888
|
+
{
|
|
889
|
+
name: 'sootsim-published-browser-internals',
|
|
890
|
+
resolveId(source: string, importer: string | undefined) {
|
|
891
|
+
const replacement = resolvePublishedBrowserInternal(
|
|
892
|
+
source,
|
|
893
|
+
importer,
|
|
894
|
+
publishedBrowserPackages,
|
|
895
|
+
)
|
|
896
|
+
return replacement ? { id: replacement } : null
|
|
897
|
+
},
|
|
898
|
+
},
|
|
800
899
|
{
|
|
801
900
|
name: 'sootsim-stub-images',
|
|
802
901
|
resolveId(source: string, importer: string | undefined) {
|
|
@@ -843,6 +942,7 @@ function sootsimConfigPlugin(appDir: string, extraSources: string[]): Plugin {
|
|
|
843
942
|
],
|
|
844
943
|
alias: [
|
|
845
944
|
...sootsimBrowserSourceAliases,
|
|
945
|
+
...publishedBrowserEntryAliases,
|
|
846
946
|
...Object.entries(rnLibraryStubs).map(([find, replacement]) => ({
|
|
847
947
|
find,
|
|
848
948
|
replacement,
|
|
@@ -1,8 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a as c}from"./chunk-UPKYK52K.js";import{a}from"./chunk-KC5SCOGS.js";import{a as e}from"./chunk-RMLJXP7T.js";import{c as n}from"./chunk-3UX6AY2B.js";import{c as i,d as m,e as p}from"./chunk-AFRXWKTA.js";import{a as u}from"./chunk-NCCMRFXU.js";import{a as f,c as s}from"./chunk-USJTVC7T.js";function g(){return`sootsim CLI v${u()} \xB7 ${c().primary}`}function C(){let r=m({bridgePort:7668,defaultShellUrl:n},e()),o=`
|
|
3
|
-
${s}
|
|
4
|
-
`;console.log(`${g()}
|
|
5
|
-
${o}${r}
|
|
6
|
-
`),a("clean-uninstall")}function E(r){let o=i(r,{bridgePort:7668,defaultShellUrl:n},e());return o?(console.log(`${o}
|
|
7
|
-
`),!0):!1}function I(r,o={}){let l=p(r,{bridgePort:7668,defaultShellUrl:n},o);if(!l){console.log(`unknown command: ${r}`);return}console.log(`${l}
|
|
8
|
-
`)}export{C as a,E as b,I as c};
|
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{c as F,d as M}from"./chunk-7H5G4HUK.js";import{c as H}from"./chunk-6VVLDYPV.js";import{g as R,j as L,r as U,s as x,t as O}from"./chunk-WOWLO4LL.js";import{a as j}from"./chunk-NCCMRFXU.js";import{execFileSync as Q,spawnSync as a}from"child_process";import{existsSync as l,mkdirSync as E,readFileSync as it,realpathSync as at,rmSync as h,writeFileSync as q}from"fs";import{homedir as b}from"os";import{basename as ct,dirname as C,resolve as u,sep as W}from"path";import{execFileSync as Z}from"child_process";import{chmodSync as tt,mkdirSync as A,rmSync as et,writeFileSync as I}from"fs";import{dirname as _}from"path";var rt="dev.sootsim.daemon",V="SootSim Daemon",Y="0.1.36";function G(t,e,r){let n=x(),o=O(),i=_(_(o)),c=_(o),p=`${i}/Resources`;et(n,{recursive:!0,force:!0}),A(U(),{recursive:!0}),A(c,{recursive:!0}),A(p,{recursive:!0}),I(`${i}/Info.plist`,ot()),I(`${i}/PkgInfo`,"APPL????"),I(o,nt(t,e,r)),tt(o,493);try{Z("codesign",["--force","--sign","-","--deep",n],{stdio:"pipe"})}catch(s){let f=s instanceof Error?s.message:String(s);console.warn(` warning: ad-hoc codesign of ${n} failed: ${f}
|
|
3
|
-
the daemon will still run, but Login Items may show a generic name.`)}return{bundlePath:n,launcherPath:o}}function ot(){return`<?xml version="1.0" encoding="UTF-8"?>
|
|
4
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
5
|
-
<plist version="1.0">
|
|
6
|
-
<dict>
|
|
7
|
-
<key>CFBundleDevelopmentRegion</key><string>en</string>
|
|
8
|
-
<key>CFBundleDisplayName</key><string>${V}</string>
|
|
9
|
-
<key>CFBundleExecutable</key><string>sootsim-daemon</string>
|
|
10
|
-
<key>CFBundleIdentifier</key><string>${rt}</string>
|
|
11
|
-
<key>CFBundleInfoDictionaryVersion</key><string>6.0</string>
|
|
12
|
-
<key>CFBundleName</key><string>${V}</string>
|
|
13
|
-
<key>CFBundlePackageType</key><string>APPL</string>
|
|
14
|
-
<key>CFBundleShortVersionString</key><string>${Y}</string>
|
|
15
|
-
<key>CFBundleSignature</key><string>????</string>
|
|
16
|
-
<key>CFBundleVersion</key><string>${Y}</string>
|
|
17
|
-
<key>LSBackgroundOnly</key><true/>
|
|
18
|
-
<key>LSUIElement</key><true/>
|
|
19
|
-
<key>LSMinimumSystemVersion</key><string>13.0</string>
|
|
20
|
-
<key>NSHumanReadableCopyright</key><string>Tamagui LLC</string>
|
|
21
|
-
</dict>
|
|
22
|
-
</plist>
|
|
23
|
-
`}function nt(t,e,r){let o=[t.executable,...t.prefixArgs,"serve","--quiet","--port",String(e)].map(T).join(" "),i=T(r.stdout),c=T(r.stderr);return`#!/bin/sh
|
|
24
|
-
# SootSim Daemon launcher \u2014 auto-generated by 'sootsim setup'.
|
|
25
|
-
# launchd spawns this; we exec the real sootsim invocation in place so
|
|
26
|
-
# launchd tracks the daemon process, not the shell wrapper.
|
|
27
|
-
#
|
|
28
|
-
# stdout: ${r.stdout}
|
|
29
|
-
# stderr: ${r.stderr}
|
|
30
|
-
# a missing or broken executable can make launchd retry forever. truncate a
|
|
31
|
-
# retry log before it passes 10 MiB so that failure stays bounded on disk.
|
|
32
|
-
for log_path in ${i} ${c}; do
|
|
33
|
-
if [ -f "$log_path" ]; then
|
|
34
|
-
log_bytes=$(wc -c < "$log_path" 2>/dev/null || echo 0)
|
|
35
|
-
if [ "$log_bytes" -gt 10485760 ]; then
|
|
36
|
-
: > "$log_path"
|
|
37
|
-
fi
|
|
38
|
-
fi
|
|
39
|
-
done
|
|
40
|
-
exec ${o}
|
|
41
|
-
`}function T(t){return`'${t.replace(/'/g,"'\\''")}'`}var z=60,y="dev.sootsim.daemon",N="dev.sootsim.server",g="sootsim-daemon",m=u(b(),"Library/Logs/sootsim"),D=u(b(),".local/state/sootsim");async function Yt(t,e={}){let[r,...n]=t,o=e.port??7668;if(!r||r==="--help"||r==="-h"){K();return}new Set(["install","uninstall","restart","start","stop","logs"]).has(r)&&F({event:`daemon_${r}`,properties:{platform:process.platform,subsource:"daemon"}});try{switch(r){case"install":return await bt({port:o,force:n.includes("--force")});case"uninstall":return await St();case"status":return await kt();case"restart":return await xt();case"start":return await Dt();case"stop":return await Et();case"logs":return await Pt(n);default:console.error(` unknown daemon subcommand: ${r}`),K(),process.exit(1)}}finally{await M()}}function K(){H("daemon")}function lt(){let t=ut();if(t)return t;let e=gt();return{executable:process.execPath,prefixArgs:[e]}}function ut(){if(!pt())return null;let t=dt();if(!t)return null;let e=j(),r=e==="0.0.0"?"sootsim":`sootsim@${e}`;return{executable:process.execPath,prefixArgs:[t,"exec","--yes","--package",r,"--","sootsim"]}}function pt(){let t=process.argv[1];return process.env.npm_command==="exec"?!0:t?P(t).includes(`${W}_npx${W}`):!1}function dt(){try{let e=Q("which",["npm"],{encoding:"utf8"}).trim();if(e&&l(e))return X(e)}catch{}let t=process.env.npm_execpath;return t&&l(t)?X(t):null}function X(t){let e=P(t);if(ct(e)==="npx-cli.js"){let r=u(C(e),"npm-cli.js");if(l(r))return r}return e}function gt(){try{let e=Q("which",["sootsim"],{encoding:"utf8"}).trim();if(e&&l(e))return P(e)}catch{}let t=process.argv[1];if(t&&l(t))return P(t);throw new Error("could not locate the sootsim binary")}function P(t){try{return at(t)}catch{return t}}function mt(t,e){E(m,{recursive:!0});let r=u(m,"bridge.out.log"),n=u(m,"bridge.err.log"),{launcherPath:o}=G(t,e,{stdout:r,stderr:n}),i=` <string>${ht(o)}</string>`;return`<?xml version="1.0" encoding="UTF-8"?>
|
|
42
|
-
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
|
|
43
|
-
<plist version="1.0">
|
|
44
|
-
<dict>
|
|
45
|
-
<key>Label</key><string>${y}</string>
|
|
46
|
-
<key>ProgramArguments</key>
|
|
47
|
-
<array>
|
|
48
|
-
${i}
|
|
49
|
-
</array>
|
|
50
|
-
<key>RunAtLoad</key><true/>
|
|
51
|
-
<key>KeepAlive</key><true/>
|
|
52
|
-
<key>ThrottleInterval</key><integer>${z}</integer>
|
|
53
|
-
<key>ProcessType</key><string>Background</string>
|
|
54
|
-
<key>StandardOutPath</key><string>${r}</string>
|
|
55
|
-
<key>StandardErrorPath</key><string>${n}</string>
|
|
56
|
-
</dict>
|
|
57
|
-
</plist>
|
|
58
|
-
`}function ft(t,e){return E(D,{recursive:!0}),`[Unit]
|
|
59
|
-
Description=sootsim bridge daemon
|
|
60
|
-
After=default.target
|
|
61
|
-
|
|
62
|
-
[Service]
|
|
63
|
-
Type=simple
|
|
64
|
-
ExecStart=${[t.executable,...t.prefixArgs].map(yt).join(" ")} serve --quiet --port ${e}
|
|
65
|
-
Restart=always
|
|
66
|
-
RestartSec=${z}
|
|
67
|
-
|
|
68
|
-
[Install]
|
|
69
|
-
WantedBy=default.target
|
|
70
|
-
`}function ht(t){return t.replace(/&/g,"&").replace(/</g,"<").replace(/>/g,">").replace(/"/g,""").replace(/'/g,"'")}function yt(t){return/[^\w@%+=:,./-]/.test(t)?`'${t.replace(/'/g,"'\\''")}'`:t}function w(){return u(b(),"Library/LaunchAgents",`${y}.plist`)}function $t(t=b()){return u(t,"Library/LaunchAgents",`${N}.plist`)}function S(){return u(b(),".config/systemd/user",`${g}.service`)}function Gt(){if(L())return{supported:!1,installed:!1};if(process.platform==="darwin"){let t=w();return{supported:!0,installed:l(t),path:t}}if(process.platform==="linux"){let t=S();return{supported:!0,installed:l(t),path:t}}return{supported:!1,installed:!1}}async function bt({port:t,force:e}){if(L())throw new Error("background daemon setup is unavailable in this environment");let r=lt();if(console.log(` binary: ${[r.executable,...r.prefixArgs].join(" ")}`),console.log(` port: ${t}`),process.platform==="darwin"){J().missing||console.log(` removed legacy ${N} service`);let o=w();if(l(o)&&!e){console.log(` already installed at ${o}`),console.log(" pass --force to overwrite, or use 'sootsim daemon restart' to reload");return}E(C(o),{recursive:!0}),q(o,mt(r,t)),console.log(` wrote ${o}`);let i=`gui/${process.getuid()}`,c=`${i}/${y}`,p=()=>{let d=a("launchctl",["bootstrap",i,o],{stdio:"pipe",encoding:"utf8"}),k=(d.stderr||d.stdout||"").trim();if(d.status!==0)return{ok:!1,reason:`bootstrap exit ${d.status}${k?`: ${k}`:""}`};let B=a("launchctl",["print",c],{encoding:"utf8"});return B.status!==0?{ok:!1,reason:`bootstrap returned 0 but service not registered (print exit ${B.status})`}:{ok:!0}},s=p();if(!s.ok){let d=s.reason;if(a("launchctl",["bootout",c],{stdio:"ignore"}),s=p(),!s.ok)throw new Error(`launchctl bootstrap failed: ${s.reason}`+(d!==s.reason?` (initial: ${d})`:"")+" \u2014 try `sootsim daemon uninstall` then retry, or reboot if launchd state is stuck.")}let f=Date.now()+4e3,$,v;for(;Date.now()<f;){let d=a("launchctl",["print",c],{encoding:"utf8"});if(d.status===0&&($=d.stdout?.match(/state\s*=\s*(\w+)/)?.[1],v=d.stdout?.match(/pid\s*=\s*(\d+)/)?.[1],$==="running"||v))break;await new Promise(k=>setTimeout(k,150))}if($!=="running"&&!v)throw new Error(`daemon registered but did not reach running state within 4s (last state: ${$||"unknown"}). check ${u(m,"bridge.err.log")} \u2014 typically a stale runtime or a port already bound by another process.`);console.log(` registered (state: ${$||"unknown"}${v?`, pid ${v}`:""}, log: ${u(m,"bridge.err.log")})`);return}if(process.platform==="linux"){let n=S();if(l(n)&&!e){console.log(` already installed at ${n}`),console.log(" pass --force to overwrite, or use 'sootsim daemon restart' to reload");return}E(C(n),{recursive:!0}),q(n,ft(r,t)),console.log(` wrote ${n}`);let o=a("systemctl",["--user","daemon-reload"],{stdio:"pipe",encoding:"utf8"});if(o.status!==0){let s=(o.stderr||o.stdout||"").trim();throw new Error(`systemctl daemon-reload failed${s?`: ${s}`:""}`)}let i=a("systemctl",["--user","enable","--now",g],{stdio:"pipe",encoding:"utf8"});if(i.status!==0){let s=(i.stderr||i.stdout||"").trim();throw new Error(`systemctl enable --now failed${s?`: ${s}`:""} \u2014 try \`sootsim daemon uninstall\` then retry.`)}let p=(a("systemctl",["--user","is-active",g],{encoding:"utf8"}).stdout||"").trim()||"unknown";console.log(` registered (state: ${p}, journalctl --user -u ${g} to tail logs)`);try{let s=process.env.USER||process.env.LOGNAME||"";if(s){let f=a("loginctl",["show-user",s,"--property=Linger","--value"],{encoding:"utf8"});!((f.stdout||"").trim().toLowerCase()==="yes")&&f.status===0&&console.log(` note: linger is not enabled for "${s}". the daemon will exit at logout.
|
|
71
|
-
enable persistence with: sudo loginctl enable-linger ${s}`)}}catch{}return}console.error(` background daemon is not supported on ${process.platform}`),console.error(" run 'sootsim serve' in a persistent shell instead"),process.exit(1)}function J(t={}){let e=t.userHome??b(),r=$t(e),n=u(e,"Library/Logs/sootsim"),o=[];if(l(r)){let i=`${t.launchTarget??`gui/${process.getuid?.()??0}`}/${N}`;(t.bootout??(p=>{a("launchctl",["bootout",p],{stdio:"ignore"})}))(i),h(r,{force:!0}),o.push(r)}for(let i of["server.err.log","server.out.log"]){let c=u(n,i);l(c)&&(h(c,{force:!0}),o.push(c))}return{removed:o,missing:o.length===0}}function vt(){let t=[];if(process.platform==="darwin"){let e=J();t.push(...e.removed);let r=w();l(r)&&(a("launchctl",["bootout",`gui/${process.getuid()}/${y}`],{stdio:"ignore"}),h(r,{force:!0}),t.push(r));let n=x();return l(n)&&(h(n,{recursive:!0,force:!0}),t.push(n)),l(m)&&(h(m,{recursive:!0,force:!0}),t.push(m)),{removed:t,missing:t.length===0}}if(process.platform==="linux"){let e=S();return l(e)&&(a("systemctl",["--user","disable","--now",g],{stdio:"ignore"}),h(e,{force:!0}),a("systemctl",["--user","daemon-reload"],{stdio:"ignore"}),a("systemctl",["--user","reset-failed",g],{stdio:"ignore"}),t.push(e)),l(D)&&(h(D,{recursive:!0,force:!0}),t.push(D)),{removed:t,missing:t.length===0}}return{removed:t,missing:!0}}function wt(){let t=[],e=R();return l(e)&&(h(e,{recursive:!0,force:!0}),t.push(e)),{removed:t,missing:t.length===0}}async function St(){let t=vt();for(let r of t.removed)console.log(` removed ${r}`);let e=wt();for(let r of e.removed)console.log(` removed ${r}`);t.missing&&e.missing&&console.log(" not installed")}async function kt(){if(process.platform==="darwin"){let t=w();if(!l(t)){console.log(" installed: no");return}console.log(` installed: yes (${t})`);let e=Lt(t);e&&console.log(` binary: ${e}`);let r=a("launchctl",["print",`gui/${process.getuid()}/${y}`],{encoding:"utf8"});if(r.status===0){let n=r.stdout.match(/state\s*=\s*(\w+)/)?.[1],o=r.stdout.match(/pid\s*=\s*(\d+)/)?.[1];console.log(` state: ${n||"unknown"}${o?` (pid ${o})`:""}`)}else console.log(" state: not running");return}if(process.platform==="linux"){let t=S();if(!l(t)){console.log(" installed: no");return}console.log(` installed: yes (${t})`);let e=a("systemctl",["--user","is-active",g],{encoding:"utf8"});console.log(` state: ${e.stdout.trim()||"unknown"}`);return}console.error(` unsupported platform: ${process.platform}`),process.exit(1)}async function xt(){if(process.platform==="darwin"){let t=w();l(t)||(console.error(" daemon not registered \u2014 run `sootsim setup`"),process.exit(1));let e=a("launchctl",["kickstart","-k",`gui/${process.getuid()}/${y}`],{stdio:"pipe",encoding:"utf8"});e.status!==0&&(console.error(` kickstart failed: ${e.stderr?.trim()}`),process.exit(1)),console.log(" restarted");return}if(process.platform==="linux"){let t=S();l(t)||(console.error(" daemon not registered \u2014 run `sootsim setup`"),process.exit(1));let e=a("systemctl",["--user","restart",g],{stdio:"pipe",encoding:"utf8"});e.status!==0&&(console.error(` restart failed: ${e.stderr?.trim()}`),process.exit(1)),console.log(" restarted");return}console.error(` unsupported platform: ${process.platform}`),process.exit(1)}async function Dt(){if(process.platform==="darwin"){a("launchctl",["kickstart",`gui/${process.getuid()}/${y}`],{stdio:"inherit"});return}if(process.platform==="linux"){a("systemctl",["--user","start",g],{stdio:"inherit"});return}console.error(` unsupported platform: ${process.platform}`),process.exit(1)}async function Et(){if(process.platform==="darwin"){a("launchctl",["bootout",`gui/${process.getuid()}/${y}`],{stdio:"inherit"});return}if(process.platform==="linux"){a("systemctl",["--user","stop",g],{stdio:"inherit"});return}console.error(` unsupported platform: ${process.platform}`),process.exit(1)}async function Pt(t){let e=t.find(o=>/^-n\d+$|^--lines=\d+$|^\d+$/.test(o)),r=e?Number(e.replace(/\D/g,"")):200,n=t.includes("-f")||t.includes("--follow");if(process.platform==="darwin"){let o=u(m,"bridge.out.log"),i=u(m,"bridge.err.log"),c=[o,i].filter(s=>l(s));c.length===0&&(console.error(` no daemon logs yet at ${m} \u2014 run \`sootsim setup\` to install the daemon`),process.exit(1));let p=n?["-n",String(r),"-F",...c]:["-n",String(r),...c];a("tail",p,{stdio:"inherit"});return}if(process.platform==="linux"){let o=`${g}.service`,i=["--user","-u",o,"-n",String(r),"--no-pager"],c=a("journalctl",n?[...i,"-f"]:i,{encoding:"utf8",stdio:n?"inherit":"pipe"});if(n)return;let p=`${c.stdout||""}${c.stderr||""}`,s=/insufficient permissions|No journal files were opened/i.test(p);if(c.status===0&&!s){process.stdout.write(c.stdout||"");return}let f=a("journalctl",[`_SYSTEMD_USER_UNIT=${o}`,"-n",String(r),"--no-pager"],{encoding:"utf8"});if(f.status===0&&(f.stdout||"").trim()){process.stdout.write(f.stdout);return}console.error(` could not read --user journal for ${o} (this user isn't in the systemd-journal group yet).
|
|
72
|
-
run: sudo journalctl _SYSTEMD_USER_UNIT=${o} -n ${r} --no-pager`),process.exit(1)}console.error(` unsupported platform: ${process.platform}`),process.exit(1)}function Lt(t){try{return it(t,"utf8").match(/<array>\s*<string>([^<]+)<\/string>/)?.[1]||null}catch{return null}}export{Yt as a,Gt as b,bt as c,J as d,vt as e,wt as f};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a}from"./chunk-547W23BB.js";import{A as l,B as u}from"./chunk-WOWLO4LL.js";var c=/^[A-Za-z0-9._:-]{1,160}$/;function T(e){if(!e?.startsWith("AGENTBUS_SESSION:"))return null;let n=e.slice(17).trim();return c.test(n)?n:null}function p(e){return c.test(e)}function f(){let e=process.env.DO_NOT_TRACK;return e==="1"||e==="true"||!l()}function S(){if(f())return null;let e=process.env.VITE_POSTHOG_API_KEY||"";if(!e)return null;let n=process.env.CONTRAST_POSTHOG_HOST||process.env.VITE_POSTHOG_HOST||"https://us.i.posthog.com";return{apiKey:e,host:n.replace(/\/+$/,"")}}function d(){try{return u()}catch{return"anonymous-cli"}}function m(e){return e?e.userId?e.userId:e.installationId!=null?`install:${e.installationId}`:e.repoId?`repo:${e.repoId}`:e.shareId?`share:${e.shareId}`:d():d()}function g(e){let n=e.identity??{},i=process.env.AGENTBUS_SESSION,s=i&&p(i)?"agentbus":process.env.CI==="1"||process.env.CI==="true"||process.env.GITHUB_ACTIONS==="true"?"ci":null,t={$lib:"sootsim-cli",source:n.source??"cli",...e.properties,traffic_type:s?"automated":"human",is_automated:s!==null,...s?{automation_source:s}:{}};return n.userId&&(t.userId=n.userId),n.repoId&&(t.repoId=n.repoId),n.installationId!=null&&(t.installationId=String(n.installationId)),n.shareId&&(t.shareId=n.shareId),n.plan&&(t.plan=n.plan),{event:e.event,distinct_id:m(n),properties:t,timestamp:new Date().toISOString()}}var r=[],I=!1;async function o(){if(r.length===0)return;let e=S();if(!e){r.length=0;return}let n=r.splice(0,r.length).map(g);try{await fetch(`${e.host}/batch/`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({api_key:e.apiKey,batch:n}),signal:AbortSignal.timeout(2e3)})}catch{}}function h(){I||(I=!0,process.on("beforeExit",()=>void o()),process.on("exit",()=>void o()))}function E(e){if(f())return;h();let n=null;try{n=a()?.user?.id??null}catch{n=null}r.push({...e,identity:{source:"cli",userId:n,...e.identity}})}async function C(){await o()}export{T as a,p as b,E as c,C as d};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{createHash as D}from"node:crypto";import y from"node:fs";import{createRequire as I}from"node:module";import h from"node:path";var w=/(^|\/)expo-splash-screen$/,R=/(^|\/)react-native-bootsplash$/;function U(n,e){let r=e.replace(/\/+$/,""),o=n.replace(/^\.\//,"").replace(/^\/+/,"");if(o)return`${r}/assets/${o}`}function d(n,e,r){return r?r(n):U(n,e)}function C(n){if(n==="cover")return"cover";if(n==="contain"||n==="native")return"contain"}function p(n){return typeof n=="string"&&n.length>0?n:void 0}function k(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function v(n,e,r){if(!n||typeof n!="object")return null;let o=n,s={source:"expo-splash-screen",backgroundColor:p(o.backgroundColor)??"#ffffff"},l=p(o.image);l&&(s.imageUrl=d(l,e,r));let t=k(o.imageWidth);t!=null&&(s.imageWidthPx=t);let c=C(o.resizeMode);c&&(s.resizeMode=c);let i=o.dark;if(i&&typeof i=="object"){let g=i,u=p(g.backgroundColor),f=p(g.image);(u||f)&&(s.dark={},u&&(s.dark.backgroundColor=u),f&&(s.dark.imageUrl=d(f,e,r)))}return s}function j(n,e,r,o){let a=n[e],s=a&&typeof a=="object"?a.splash:void 0,l=n.splash,t=s&&typeof s=="object"?s:l;if(!t||typeof t!="object")return null;let i={source:"expo-legacy",backgroundColor:p(t.backgroundColor)??"#ffffff",imageWidthPx:k(t.imageWidth)??200,resizeMode:C(t.resizeMode)??"contain"},g=p(t.image);g&&(i.imageUrl=d(g,r,o));let u=t.dark;if(u&&typeof u=="object"){let f=u,S=p(f.backgroundColor),m=p(f.image);(S||m)&&(i.dark={},S&&(i.dark.backgroundColor=S),m&&(i.dark.imageUrl=d(m,r,o)))}return i}function _(n,e,r){if(!n||typeof n!="object")return null;let o=n,a=p(o.logo);if(!a)return null;let s={source:"react-native-bootsplash",backgroundColor:p(o.background)??"#fff",imageUrl:d(a,e,r),imageWidthPx:k(o.logoWidth)??100,resizeMode:"contain"},l=p(o.darkBackground),t=p(o.darkLogo);return(l||t)&&(s.dark={},l&&(s.dark.backgroundColor=l),t&&(s.dark.imageUrl=d(t,e,r))),s}function b(n,e,r,o={}){if(!n||typeof n!="object")return null;let a=n,s=a.plugins,l=null,t=null;if(Array.isArray(s))for(let i of s){let g=Array.isArray(i)?i[0]:i;if(typeof g!="string")continue;let u=Array.isArray(i)?i[1]??{}:{};!l&&w.test(g)?l=v(u,r,o.resolveAssetUrl):!t&&R.test(g)&&(t=_(u,r,o.resolveAssetUrl))}if(l)return l;let c=j(a,e,r,o.resolveAssetUrl);return c||t}var x=I(import.meta.url);function E(n){try{let e=new URL(n),r=e.hostname.replace(/^\[|\]$/g,"").toLowerCase();if(r==="localhost"||r.endsWith(".localhost")||r==="0.0.0.0"||r==="::1"||/^127(?:\.\d{1,3}){3}$/.test(r))return e.origin}catch{}return null}var L=["app.config.js","app.config.ts","app.config.cjs","app.config.mjs","app.json"];function P(n){for(let e of L)try{if(y.statSync(h.join(n,e)).isFile())return!0}catch{}return!1}var F=new Set(["node_modules","artifacts","dist","build","out","coverage","tmp","public","ios","android","macos","windows","__fixtures__","__tests__","examples","example"]);function A(n,e){P(n)&&e.push(n);let r;try{r=y.readdirSync(n,{withFileTypes:!0})}catch{return}for(let o of r)o.isDirectory()&&(o.name.startsWith(".")||F.has(o.name)||A(h.join(n,o.name),e))}function M(n){try{return y.statSync(h.join(n,"package.json")).isFile()}catch{return!1}}function H(n){let e=E(n.bundleUrl);if(!e)return null;let r=n.repoDir||process.env.CONTRAST_REPO_DIR,o=r?h.resolve(r):process.cwd();if(!r&&!M(o))return null;let a=[];if(r)A(o,a),a.includes(o)||a.push(o);else{if(!P(o))return null;a.push(o)}if(a.length===0)return null;let s=(n.platform||process.env.CONTRAST_PLATFORM||"ios").toLowerCase(),l=null;try{let c=x.resolve("@expo/config",{paths:[...a,o]}),i=x(c);typeof i.getConfig=="function"&&(l=i.getConfig)}catch{}if(!l)return null;let t;for(let c of a)try{let i=l(c,{skipSDKVersionRequirement:!0});if(i?.exp&&typeof i.exp=="object"){t=i.exp;break}}catch{}return!t||typeof t!="object"?null:b(t,s==="android"?"android":"ios",e)}function J(n){return encodeURIComponent(JSON.stringify(n))}function z(n){if(!n)return null;try{let e=JSON.parse(decodeURIComponent(n));if(!e||typeof e!="object")return null;let r=e;return r.source!=="expo-splash-screen"&&r.source!=="expo-legacy"&&r.source!=="react-native-bootsplash"||typeof r.backgroundColor!="string"?null:e}catch{return null}}function W(n){let e=new Set;return n.imageUrl&&e.add(n.imageUrl),n.dark?.imageUrl&&e.add(n.dark.imageUrl),[...e]}function N(n){let e=(n.split("?")[0].split(".").pop()||"").toLowerCase();return e==="png"?"image/png":e==="jpg"||e==="jpeg"?"image/jpeg":e==="webp"?"image/webp":e==="gif"?"image/gif":e==="svg"?"image/svg+xml":"application/octet-stream"}async function K(n,e){let r=z(n);if(!r)return[];let o=[],a=new Set;for(let s of W(r)){let l=D("sha256").update(s).digest("hex");if(!a.has(l)){a.add(l);try{let t=await fetch(s);if(!t.ok){e?.onError?.(s,new Error(`${t.status} ${t.statusText}`));continue}let c=new Uint8Array(await t.arrayBuffer());o.push({url:s,urlhash:l,contentType:N(s),bytes:c}),e?.onStaged?.({url:s,byteLength:c.byteLength})}catch(t){e?.onError?.(s,t)}}}return o}export{H as a,J as b,K as c};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{c as k,k as l,l as C,m as w}from"./chunk-YNG4C3ZS.js";var m="sootsim:settings",a=["errorReporting","colorScheme","reduceMotion","boldText","fontSize","largerAccessibilitySizes","a11yMode","a11yDepth","screenshotCanvas","screenshotBackground","screenshotText","screenshotPose","screenshotDynamicSize","alwaysShowLiveWebViews","showTopBar","showRail","agentProvider","onboardingComplete","betaConsentVersion","detailedTelemetry"];function R(){if(typeof window>"u")return null;let e=window.sootsimElectron;return e&&typeof e=="object"?e:null}function g(e){let n={};for(let t of a){if(!(t in e))continue;let o=e[t],i=l[t];i.validate&&!i.validate(o)||i.options&&!i.options.includes(o)||(n[t]=o)}return n}function V(e){let n={};for(let t of a)n[t]=e[t];return n}function D(){if(typeof localStorage>"u")return{};try{let e=localStorage.getItem(m);return e?g(JSON.parse(e)):{}}catch{return{}}}function j(e){if(!(typeof localStorage>"u"))try{localStorage.setItem(m,JSON.stringify(e))}catch{}}function x(){let n=R()?.sharedConfig?.settings;return!n||typeof n!="object"?{}:g(n)}function T(e){let n=R();if(n?.writeSharedConfig)try{n.writeSharedConfig({settings:e})}catch{}}function K(){if(typeof window>"u")return null;let e=window.__sootsimSharedConfig;return e&&typeof e=="object"?e:null}function M(){let e=K()?.settings;return!e||typeof e!="object"?{}:g(e)}function B(e){if(!K())return;let n={settings:e};try{if(globalThis.__sootsimBridgeRequest?.writeSharedConfig?.(n))return}catch{}if(!(typeof fetch>"u"))try{fetch("/__sootsim/shared-config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(n),keepalive:!0}).catch(()=>{})}catch{}}function P(){let e=D(),n=M(),t=x();return{...e,...n,...t}}function _(e,n={}){let t=V(e);for(let o of a)n[o]!==void 0&&(t[o]=n[o]);j(t),T(t),B(t)}function E(e){if(typeof window>"u")return()=>{};let n=r=>{if(!(r.key!==m||r.newValue==null))try{e(g(JSON.parse(r.newValue)))}catch{}};window.addEventListener("storage",n);let t=R(),o;t?.onSharedConfigChanged&&(o=t.onSharedConfigChanged(r=>{let d=r?.settings;!d||typeof d!="object"||e(g(d))}));let c=globalThis.__sootsimBridgeRequest?.subscribeSharedConfig?.(r=>{let d=r?.settings;!d||typeof d!="object"||e(g(d))});return()=>{window.removeEventListener("storage",n),o?.(),c?.()}}var I=C(),O=w(),p=P(),u=new Set,S={};for(let e of a)I[e]!==void 0&&(u.add(e),p[e]!==void 0&&(S[e]=p[e]),delete p[e]);var s={...O,...p},h=[],f=null;function y(){for(let e of h)e()}function b(){y(),_(s,S)}function v(e,n){let t=l[e];return t.validate&&!t.validate(n)||t.options&&!t.options.includes(n)||s[e]===n?!1:(s={...s,[e]:n},e==="deviceModel"&&(f=null),!0)}E(e=>{let n={...s},t=!1;for(let[o,i]of Object.entries(e)){let c=o;if(u.has(c)){S[c]=i;continue}n[c]!==i&&(n[c]=i,t=!0)}t&&(s=n,f=null,y())});var N={get(e){return s[e]},set(e,n){v(e,n)&&b()},setRuntime(e,n){u.has(e)||(u.add(e),a.includes(e)&&(S[e]=s[e])),v(e,n)&&y()},isRuntimeControlled(e){return u.has(e)},getAll(){return s},apply(e){let n=!1,t={...s};for(let[o,i]of Object.entries(e)){if(i===void 0)continue;let c=o,r=l[c];r&&(r.validate&&!r.validate(i)||r.options&&!r.options.includes(i)||t[c]!==i&&(t[c]=i,n=!0))}n&&(s=t,f=null,b())},applyRuntime(e){let n=!1;for(let t of Object.keys(e)){let o=e[t];o!==void 0&&(u.has(t)||(u.add(t),a.includes(t)&&(S[t]=s[t])),v(t,o)&&(n=!0))}n&&y()},reset(){s=w(),f=null,b()},subscribe(e){return h.push(e),()=>{h=h.filter(n=>n!==e)}},getDeviceSpec(){return f||(f=k(s.deviceModel)),f},getA11yMode(){return s.a11yMode},setA11yMode(e){this.set("a11yMode",e)},getInspectMode(){return s.inspectMode},setInspectMode(e){this.set("inspectMode",e)}};export{N as a};
|
|
@@ -1,5 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{existsSync as A,mkdirSync as M,readFileSync as v,rmSync as f,writeFileSync as h}from"fs";import{tmpdir as w}from"os";import{dirname as B,join as $,resolve as U}from"path";import{execFileSync as _}from"child_process";import{readFileSync as b}from"fs";import{createRequire as y}from"module";var c=null,p=null;function m(r){c||(c=T());try{return c(r)}catch{return null}}function C(r){p||(p=O());try{return p(r)}catch{return null}}function O(){if(process.platform==="linux")return r=>{try{return b(`/proc/${r}/comm`,"utf8").trim()||null}catch{return null}};if(process.platform==="darwin"){let r=x();return r||F()}return()=>null}function T(){let r=Number(process.env.PPID);if(Number.isFinite(r)&&r>1&&r!==process.ppid)return()=>r;if(process.platform==="linux")return D();if(process.platform==="darwin"){let n=R();return n||k()}return()=>null}function D(){return r=>{try{let n=b(`/proc/${r}/stat`,"utf8"),t=n.lastIndexOf(")");if(t<0)return null;let e=n.slice(t+1).trim().split(/\s+/),i=Number(e[1]);return Number.isFinite(i)&&i>0?i:null}catch{return null}}}var N=3,l=216,P=16,S=48,L=16;function R(){if(!process.versions?.bun)return null;try{let r=y(import.meta.url),{dlopen:n,FFIType:t}=r("bun:ffi"),e=n("/usr/lib/libproc.dylib",{proc_pidinfo:{args:[t.i32,t.i32,t.u64,t.ptr,t.i32],returns:t.i32}}),i=Buffer.alloc(l);return o=>{if(Number(e.symbols.proc_pidinfo(o,N,0n,i,l))<=0)return null;let u=i.readUInt32LE(P);return u>0?u:null}}catch{return null}}function x(){if(!process.versions?.bun)return null;try{let r=y(import.meta.url),{dlopen:n,FFIType:t}=r("bun:ffi"),e=n("/usr/lib/libproc.dylib",{proc_pidinfo:{args:[t.i32,t.i32,t.u64,t.ptr,t.i32],returns:t.i32}}),i=Buffer.alloc(l);return o=>{if(Number(e.symbols.proc_pidinfo(o,N,0n,i,l))<=0)return null;let u=i.subarray(S,S+L),I=u.indexOf(0);return u.subarray(0,I<0?u.length:I).toString("utf8")||null}}catch{return null}}function F(){return r=>{try{let t=_("lsof",["-R","-p",String(r),"-d","cwd","-a"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).split(`
|
|
3
|
-
`)[1];return t&&t.trim().split(/\s+/)[0]||null}catch{return null}}}function k(){return r=>{try{let t=_("lsof",["-R","-p",String(r),"-d","cwd","-a"],{encoding:"utf8",timeout:2e3,stdio:["ignore","pipe","ignore"]}).split(`
|
|
4
|
-
`)[1];if(!t)return null;let e=t.trim().split(/\s+/),i=Number(e[2]);return Number.isFinite(i)&&i>1?i:null}catch{return null}}}var d=1,g="SOOTSIM_CLI_CURRENT_SIM_PATH",V=["SOOTSIM_CLI_IDENTITY","AGENTBUS_SESSION","CLAUDE_CODE_SESSION_ID","CODEX_THREAD_ID","TERM_SESSION_ID","ITERM_SESSION_ID","TMUX_PANE","STY","KITTY_WINDOW_ID","WEZTERM_PANE","ALACRITTY_WINDOW_ID","WINDOWID","VSCODE_INJECTION"],W=/^(?:tmux|screen)|^tm$/i;function E(r,n=20){let t=r,e=m(r);if(!e||e<=1)return null;for(let i=0;i<n;i++){let o=C(e);if(o&&W.test(o))return t;let s=m(e);if(!s||s<=1)return o?e:t;t=e,e=s}return e}function Y(){for(let n of V){let t=process.env[n];if(t&&t.trim())return{key:`${n}:${t.trim()}`,source:n,stable:!0}}let r=E(process.ppid);return r&&r>1?{key:`gppid-${r}`,source:"grand-ppid",stable:!0}:{key:`pid-${process.ppid}`,source:"ppid",stable:!1}}function H(){return Y().key}function tr(){return E(process.ppid)}function a(){if(process.env[g])return U(process.env[g]);let r=H();return $(w(),`sootsim-current-sim-${r}.json`)}function J(){let r=a();if(!A(r))return null;try{let n=JSON.parse(v(r,"utf8"));return n.version!==d||typeof n.simId!="string"||!n.simId.trim()||typeof n.updatedAt!="string"?(f(r,{force:!0}),null):{version:d,simId:n.simId.trim(),updatedAt:n.updatedAt}}catch{return f(r,{force:!0}),null}}function nr(){return J()?.simId||null}function er(r){let n=r.trim();if(!n)return;let t=a();M(B(t),{recursive:!0}),h(t,JSON.stringify({version:d,simId:n,updatedAt:new Date().toISOString()},null,2)+`
|
|
5
|
-
`)}function ir(){f(a(),{force:!0})}export{C as a,Y as b,H as c,tr as d,nr as e,er as f,ir as g};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{createHash as b}from"node:crypto";import g from"node:fs";import{createRequire as R}from"node:module";import u from"node:path";var y=/\.(ttf|otf|woff|woff2)$/i;function P(t,n,r){if(!t||typeof t!="object")return;let o=t.fonts;if(Array.isArray(o))for(let i of o)typeof i=="string"&&r.push(i);let e=t[n];if(!e||typeof e!="object")return;let s=e.fonts;if(Array.isArray(s))for(let i of s){if(typeof i=="string"){r.push(i);continue}if(!i||typeof i!="object")continue;let c=i.fontDefinitions;if(Array.isArray(c))for(let a of c){if(!a||typeof a!="object")continue;let p=a.path;typeof p=="string"&&r.push(p)}}}function m(t,n){if(!Array.isArray(t))return[];let r=[];for(let o of t){let e=Array.isArray(o)?o[0]:o;if(typeof e!="string"||!/(^|\/)expo-font$/.test(e))continue;let s=Array.isArray(o)?o[1]??{}:{};P(s,n,r)}return r}function C(t){return t.slice(t.lastIndexOf("/")+1).replace(y,"")}function h(t,n){let r=n.replace(/\/+$/,""),o=new Set,e=[];for(let s of t){let i=s.replace(/^\.\//,"").replace(/^\/+/,"");!i||o.has(i)||(o.add(i),y.test(i)&&e.push({family:C(i),url:`${r}/assets/${i}`}))}return e}var d=R(import.meta.url);function x(t){try{let n=new URL(t),r=n.hostname.replace(/^\[|\]$/g,"").toLowerCase();if(r==="localhost"||r.endsWith(".localhost")||r==="0.0.0.0"||r==="::1"||/^127(?:\.\d{1,3}){3}$/.test(r))return n.origin}catch{}return null}var S=["app.config.js","app.config.ts","app.config.cjs","app.config.mjs","app.json"];function w(t){for(let n of S)try{if(g.statSync(u.join(t,n)).isFile())return!0}catch{}return!1}var j=new Set(["node_modules","artifacts","dist","build","out","coverage","tmp","public","ios","android","macos","windows","__fixtures__","__tests__","examples","example"]);function A(t,n){w(t)&&n.push(t);let r;try{r=g.readdirSync(t,{withFileTypes:!0})}catch{return}for(let o of r)o.isDirectory()&&(o.name.startsWith(".")||j.has(o.name)||A(u.join(t,o.name),n))}function _(t){try{return g.statSync(u.join(t,"package.json")).isFile()}catch{return!1}}function I(t){let n=x(t.bundleUrl);if(!n)return[];let r=t.repoDir||process.env.CONTRAST_REPO_DIR,o=r?u.resolve(r):process.cwd();if(!r&&!_(o))return[];let e=[];if(r)A(o,e),e.includes(o)||e.push(o);else{if(!w(o))return[];e.push(o)}if(e.length===0)return[];let s=(t.platform||process.env.CONTRAST_PLATFORM||"ios").toLowerCase(),i=null;try{let l=d.resolve("@expo/config",{paths:[...e,o]}),f=d(l);typeof f.getConfig=="function"&&(i=f.getConfig)}catch{}if(!i)return[];let c;for(let l of e)try{let f=i(l,{skipSDKVersionRequirement:!0});if(f?.exp&&typeof f.exp=="object"){let F=f.exp.plugins;if(Array.isArray(F)){c=f.exp;break}}}catch{}if(!c||typeof c!="object")return[];let a=c.plugins;if(!Array.isArray(a))return[];let p=m(a,s==="android"?"android":"ios");return h(p,n)}async function L(t,n){let r=x(t);if(!r)return null;let o=new AbortController,e=setTimeout(()=>o.abort(),n?.timeoutMs??1500);try{let s=await fetch(`${r}/`,{headers:{"expo-platform":"ios",Accept:"application/json"},signal:o.signal});if(!s.ok)return null;let c=(await s.json())?.extra?.expoClient?._internal?.projectRoot;return typeof c=="string"&&c.length>0?c:null}catch{return null}finally{clearTimeout(e)}}function M(t){return t.map(n=>`${encodeURIComponent(n.url)}::${encodeURIComponent(n.family)}`).join(",")}function k(t){let n=[];for(let r of t.split(",")){let o=r.trim();if(!o)continue;let e=o.indexOf("::"),s=e===-1?o:o.slice(0,e);try{n.push(decodeURIComponent(s))}catch{n.push(s)}}return n.filter(Boolean)}function D(t){let n=(t.split("?")[0].split(".").pop()||"").toLowerCase();return n==="ttf"?"font/ttf":n==="otf"?"font/otf":n==="woff"?"font/woff":n==="woff2"?"font/woff2":"application/octet-stream"}async function N(t,n){let r=[],o=new Set;for(let e of k(t)){let s=b("sha256").update(e).digest("hex");if(!o.has(s)){o.add(s);try{let i=await fetch(e);if(!i.ok){n?.onError?.(e,new Error(`${i.status} ${i.statusText}`));continue}let c=new Uint8Array(await i.arrayBuffer());r.push({url:e,urlhash:s,contentType:D(e),bytes:c}),n?.onStaged?.({url:e,byteLength:c.byteLength})}catch(i){n?.onError?.(e,i)}}}return r}export{I as a,L as b,M as c,N as d};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
function i(t,o,a,l){return{width:3,ringToggle:{side:"left",top:t[0],height:t[1]},volumeUp:{side:"left",top:o[0],height:o[1]},volumeDown:{side:"left",top:a[0],height:a[1]},lock:{side:"right",top:l[0],height:l[1]}}}var D={width:2.5,lock:{side:"right",top:188.7,height:68.1},ringToggle:{side:"left",top:113.2,height:36},volumeUp:{side:"left",top:188.2,height:68.1},volumeDown:{side:"left",top:269,height:68.1}},f={width:3,lock:{side:"right",top:671/2.625,height:163/2.625},ringToggle:{side:"left",top:-1e3,height:0},volumeUp:{side:"right",top:971/2.625,height:165/2.625},volumeDown:{side:"right",top:1136/2.625,height:166/2.625}},v={width:3,lock:{side:"right",top:248,height:72},ringToggle:{side:"left",top:-1e3,height:0},volumeUp:{side:"right",top:144,height:62},volumeDown:{side:"right",top:216,height:62}},s=24,c="17",d=37,T=1080/2.625,C=2400/2.625,u=132/2.625;function n(t){return{top:t,right:t,bottom:t,left:t}}function N(t){let o=(t.frameInsets.top+t.frameInsets.right+t.frameInsets.bottom+t.frameInsets.left)/4,a=Math.max(Math.abs(t.frameInsets.top-o),Math.abs(t.frameInsets.right-o),Math.abs(t.frameInsets.bottom-o),Math.abs(t.frameInsets.left-o));return{frameRadius:t.cornerRadius+o,frameRadiusApproximationError:a,screenRadius:t.cornerRadius}}function k(t){return{...N(t),frameHeight:t.frameInsets.top+t.height+t.frameInsets.bottom,frameWidth:t.frameInsets.left+t.width+t.frameInsets.right,screenBottomInset:t.frameInsets.bottom,screenLeft:t.frameInsets.left,screenRightInset:t.frameInsets.right,screenTop:t.frameInsets.top}}function r(t){return{...t,platform:"ios",navigationBarHeight:0,navigationBarMode:t.homeIndicatorHeight>0?"gesture":"none",displayCutout:{top:t.dynamicIsland?t.statusBarHeight:0,bottom:0,left:0,right:0},cameraCutout:null,osVersion:t.iosVersion,androidApiLevel:null,systemName:"iOS",manufacturer:"Apple",brand:"Apple",modelName:t.name}}var I={"canvas-workspace":r({name:"Canvas Workspace",width:1440,height:900,scale:1,statusBarHeight:0,homeIndicatorHeight:0,cornerRadius:0,continuousCornerRadius:0,frameInsets:n(16),dynamicIsland:null,safeAreaInsets:{top:0,bottom:0,left:0,right:0},iosVersion:"26.4",physicalPPI:110,hardwareButtons:i([185.8,41.7],[258.2,67.6],[344,67.6],[281.5,106.9]),experimental:!0}),"iphone-se":r({name:"iPhone SE",width:375,height:667,scale:2,statusBarHeight:20,homeIndicatorHeight:0,cornerRadius:0,continuousCornerRadius:0,frameInsets:n(28.7),dynamicIsland:null,safeAreaInsets:{top:20,bottom:0,left:0,right:0},iosVersion:"15.8",physicalPPI:326,hardwareButtons:D}),"iphone-14":r({name:"iPhone 14",width:390,height:844,scale:3,statusBarHeight:47,homeIndicatorHeight:34,cornerRadius:46.2,continuousCornerRadius:67.462,frameInsets:n(19.5),dynamicIsland:null,safeAreaInsets:{top:47,bottom:34,left:0,right:0},iosVersion:"17.6",physicalPPI:460,hardwareButtons:i([141.7,29.7],[205.9,69.6],[289.5,69.6],[228.9,114.5])}),"iphone-15":r({name:"iPhone 15",width:393,height:852,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:73.402,frameInsets:n(18.2),dynamicIsland:{width:126,height:37.3,top:14.1},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"17.6",physicalPPI:460,hardwareButtons:i([171.7,32],[235.8,65.3],[320.5,65.3],[280.6,105.2])}),"iphone-15-plus":r({name:"iPhone 15 Plus",width:430,height:932,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:74.654,frameInsets:n(17.3),dynamicIsland:{width:126,height:37.3,top:11.4},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"17.6",physicalPPI:460,hardwareButtons:i([172.1,33],[236.1,66.6],[321.2,66.6],[281,106.8])}),"iphone-15-pro":r({name:"iPhone 15 Pro",width:393,height:852,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:73.402,frameInsets:n(15.3),dynamicIsland:{width:126,height:38,top:13.4},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"18.2",physicalPPI:460,hardwareButtons:i([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-15-pro-max":r({name:"iPhone 15 Pro Max",width:430,height:932,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:74.654,frameInsets:n(15.3),dynamicIsland:{width:126,height:38,top:13.3},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"18.2",physicalPPI:460,hardwareButtons:i([173.3,32.2],[253.4,61.7],[343.3,61.7],[268.5,98.5])}),"iphone-16":r({name:"iPhone 16",width:393,height:852,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:73.402,frameInsets:n(15.3),dynamicIsland:{width:126,height:37.3,top:11},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-16-plus":r({name:"iPhone 16 Plus",width:430,height:932,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:74.654,frameInsets:n(15.3),dynamicIsland:{width:126,height:37.3,top:11.4},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([173.3,32.2],[253.4,61.7],[343.3,61.7],[268.5,98.5])}),"iphone-16-pro":r({name:"iPhone 16 Pro",width:402,height:874,scale:3,statusBarHeight:62,homeIndicatorHeight:34,cornerRadius:61,continuousCornerRadius:84.661,frameInsets:n(15.3),dynamicIsland:{width:126,height:38,top:13.5},safeAreaInsets:{top:62,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-16-pro-max":r({name:"iPhone 16 Pro Max",width:440,height:956,scale:3,statusBarHeight:62,homeIndicatorHeight:34,cornerRadius:61.3,continuousCornerRadius:85.163,frameInsets:n(15.4),dynamicIsland:{width:126,height:38,top:14},safeAreaInsets:{top:62,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([178.8,32.2],[266.8,61.8],[352.7,61.8],[292.2,98.3])}),"iphone-17":r({name:"iPhone 17",width:402,height:874,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:61,continuousCornerRadius:84.661,frameInsets:n(15.3),dynamicIsland:{width:126,height:37.3,top:14},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-17-air":r({name:"iPhone Air",width:420,height:912,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:64.6,continuousCornerRadius:88.313,frameInsets:n(15.475),dynamicIsland:{width:126,height:38,top:20},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([178.8,32.2],[266.8,61.8],[352.7,61.8],[292.2,98.3])}),"iphone-17-pro":r({name:"iPhone 17 Pro",width:402,height:874,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:61,continuousCornerRadius:84.661,frameInsets:n(15.3),dynamicIsland:{width:126,height:38,top:14},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-17-pro-max":r({name:"iPhone 17 Pro Max",width:440,height:956,scale:3,statusBarHeight:62,homeIndicatorHeight:34,cornerRadius:61.3,continuousCornerRadius:85.163,frameInsets:n(15.4),dynamicIsland:{width:126,height:38,top:14},safeAreaInsets:{top:62,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([178.8,32.2],[266.8,61.8],[352.7,61.8],[292.2,98.3])}),"pixel-8":{platform:"android",name:"Pixel 8",width:T,height:C,scale:2.625,statusBarHeight:u,homeIndicatorHeight:0,navigationBarHeight:s,navigationBarMode:"gesture",displayCutout:{top:u,bottom:0,left:0,right:0},cornerRadius:39,continuousCornerRadius:39,frameInsets:{top:55/2.625,right:50/2.625,bottom:58/2.625,left:49/2.625},dynamicIsland:null,cameraCutout:{diameter:72.5/2.625},safeAreaInsets:{top:u,bottom:s,left:0,right:0},osVersion:c,iosVersion:"",androidApiLevel:d,systemName:"Android",manufacturer:"Google",brand:"google",modelName:"Pixel 8",physicalPPI:428,hardwareButtons:f},"pixel-8-three-button":{platform:"android",name:"Pixel 8 (3-button)",width:T,height:C,scale:2.625,statusBarHeight:u,homeIndicatorHeight:0,navigationBarHeight:48,navigationBarMode:"three-button",displayCutout:{top:u,bottom:0,left:0,right:0},cornerRadius:39,continuousCornerRadius:39,frameInsets:{top:55/2.625,right:50/2.625,bottom:58/2.625,left:49/2.625},dynamicIsland:null,cameraCutout:{diameter:72.5/2.625},safeAreaInsets:{top:u,bottom:48,left:0,right:0},osVersion:c,iosVersion:"",androidApiLevel:d,systemName:"Android",manufacturer:"Google",brand:"google",modelName:"Pixel 8",physicalPPI:428,hardwareButtons:f},"pixel-9-pro-xl":{platform:"android",name:"Pixel 9 Pro XL",width:448,height:997,scale:3,statusBarHeight:40,homeIndicatorHeight:0,navigationBarHeight:s,navigationBarMode:"gesture",displayCutout:{top:40,bottom:0,left:0,right:0},cornerRadius:41,continuousCornerRadius:41,frameInsets:n(12),dynamicIsland:null,cameraCutout:{diameter:24},safeAreaInsets:{top:40,bottom:s,left:0,right:0},osVersion:c,iosVersion:"",androidApiLevel:d,systemName:"Android",manufacturer:"Google",brand:"google",modelName:"Pixel 9 Pro XL",physicalPPI:486,hardwareButtons:f},"pixel-10":{platform:"android",name:"Pixel 10",width:360,height:808,scale:3,statusBarHeight:40,homeIndicatorHeight:0,navigationBarHeight:s,navigationBarMode:"gesture",displayCutout:{top:40,bottom:0,left:0,right:0},cornerRadius:40,continuousCornerRadius:40,frameInsets:n(18),dynamicIsland:null,cameraCutout:{diameter:26},safeAreaInsets:{top:40,bottom:s,left:0,right:0},osVersion:c,iosVersion:"",androidApiLevel:d,systemName:"Android",manufacturer:"Google",brand:"google",modelName:"Pixel 10",physicalPPI:422,hardwareButtons:f},"galaxy-s24":{platform:"android",name:"Galaxy S24",width:360,height:780,scale:3,statusBarHeight:36,homeIndicatorHeight:0,navigationBarHeight:s,navigationBarMode:"gesture",displayCutout:{top:36,bottom:0,left:0,right:0},cornerRadius:36,continuousCornerRadius:36,frameInsets:n(8),dynamicIsland:null,cameraCutout:{diameter:18},safeAreaInsets:{top:36,bottom:s,left:0,right:0},osVersion:c,iosVersion:"",androidApiLevel:d,systemName:"Android",manufacturer:"Samsung",brand:"samsung",modelName:"SM-S921B",physicalPPI:416,hardwareButtons:v},"galaxy-s24-ultra":{platform:"android",name:"Galaxy S24 Ultra",width:384,height:832,scale:3.75,statusBarHeight:36,homeIndicatorHeight:0,navigationBarHeight:s,navigationBarMode:"gesture",displayCutout:{top:36,bottom:0,left:0,right:0},cornerRadius:24,continuousCornerRadius:24,frameInsets:n(9),dynamicIsland:null,cameraCutout:{diameter:18},safeAreaInsets:{top:36,bottom:s,left:0,right:0},osVersion:c,iosVersion:"",androidApiLevel:d,systemName:"Android",manufacturer:"Samsung",brand:"samsung",modelName:"SM-S928B",physicalPPI:505,hardwareButtons:v}},R="iphone-17-pro";function _(t){return I[t]}function w(){return Object.keys(I)}function V(){return w().filter(t=>!I[t].experimental)}var b={"iphone-6-9":{name:"iphone-6-9",label:'iPhone 6.7"',width:1284,height:2778,store:"apple"},"iphone-6-1":{name:"iphone-6-1",label:'iPhone 6.5"',width:1242,height:2688,store:"apple"},"android-phone":{name:"android-phone",label:"Google Play phone",width:1080,height:1920,store:"google"},"android-tablet-7":{name:"android-tablet-7",label:'Google Play 7" tablet',width:1200,height:1920,store:"google"},"android-tablet-10":{name:"android-tablet-10",label:'Google Play 10" tablet',width:1600,height:2560,store:"google"}},y={dark:{type:"gradient",direction:180,glow:"#4caeff",stops:[{offset:0,color:"#111827"},{offset:40,color:"#101725"},{offset:100,color:"#06080d"}]},cyan:{type:"gradient",direction:180,glow:"#25c3ec",stops:[{offset:0,color:"#1b465c"},{offset:32,color:"#122336"},{offset:100,color:"#05070b"}]},gold:{type:"gradient",direction:180,glow:"#ffc25a",stops:[{offset:0,color:"#3b2f1a"},{offset:34,color:"#18140d"},{offset:100,color:"#050505"}]},red:{type:"gradient",direction:180,glow:"#ff6178",stops:[{offset:0,color:"#3e1018"},{offset:35,color:"#17080c"},{offset:100,color:"#050405"}]}},z={color:"#25c3ec",blur:120,spread:52,opacity:.34},U="iphone-17-pro";var O=[{name:"white",value:"#ffffff"},{name:"gray-light",value:"#d1d5db"},{name:"gray",value:"#6b7280"},{name:"gray-dark",value:"#3b4350"},{name:"slate",value:"#2a3644"},{name:"black",value:"#000000"},{name:"cyan",value:"#25c3ec"},{name:"blue",value:"#3f7cff"},{name:"teal",value:"#1fc7b4"},{name:"green",value:"#42c95d"},{name:"lime",value:"#92d21b"},{name:"gold",value:"#f5c518"},{name:"orange",value:"#ff912e"},{name:"coral",value:"#ff6f5b"},{name:"red",value:"#ff4f6f"},{name:"berry",value:"#d054ff"},{name:"magenta",value:"#ff4eb8"}],B=Object.fromEntries(O.map(t=>[t.name,t.value]));function j(t){return B[t]??B.gray}function G(t){return Object.prototype.hasOwnProperty.call(b,t)?b[t]:null}function M(t){return{type:t.type,color:t.color,direction:t.direction,glow:t.glow,stops:t.stops?.map(o=>({...o}))}}function K(t){return Object.prototype.hasOwnProperty.call(y,t)?M(y[t]):null}var H=[.823,.882,.941,1,1.118,1.235,1.353,1.786,2.143,2.643,3.143,3.571];function e(t,o){return Object.freeze({fontSize:t,lineHeight:o})}var Y=Object.freeze({xs:Object.freeze({largeTitle:e(31,44.408775),title1:e(25,37.128102),title2:e(19,27.816685),title3:e(17,23.807109),headline:e(14,20.161577),body:e(14,20.161577),callout:e(13,18.942243),subheadline:e(12,16.720313),footnote:e(12,16.986979),caption1:e(11,15.564453),caption2:e(11,16.126953)}),s:Object.freeze({largeTitle:e(32,45.797256),title1:e(26,38.556756),title2:e(20,29.22433),title3:e(18,25.160469),headline:e(15,21.536754),body:e(15,21.536754),callout:e(14,20.326079),subheadline:e(13,18.213672),footnote:e(12,16.986979),caption1:e(11,15.564453),caption2:e(11,16.126953)}),m:Object.freeze({largeTitle:e(33,47.185737),title1:e(27,39.985409),title2:e(21,30.631975),title3:e(19,26.513828),headline:e(16,22.911932),body:e(16,22.911932),callout:e(15,21.709914),subheadline:e(14,19.557031),footnote:e(12,16.986979),caption1:e(11,15.564453),caption2:e(11,16.126953)}),l:Object.freeze({largeTitle:e(34,48.574219),title1:e(28,41.414063),title2:e(22,32.253906),title3:e(20,27.867187),headline:e(17,24.287109),body:e(17,24.287109),callout:e(16,23.09375),subheadline:e(15,20.900391),footnote:e(13,18.513672),caption1:e(12,17.320313),caption2:e(11,16.126953)}),xl:Object.freeze({largeTitle:e(36,51.351181),title1:e(30,44.271369),title2:e(24,35.069196),title3:e(22,30.733906),headline:e(19,27.037464),body:e(19,27.037464),callout:e(18,25.861421),subheadline:e(17,23.587109),footnote:e(15,21.233724),caption1:e(14,20.269531),caption2:e(13,19.667518)}),xxl:Object.freeze({largeTitle:e(38,54.323266),title1:e(32,47.128676),title2:e(26,37.884487),title3:e(24,33.440625),headline:e(21,29.78782),body:e(21,29.78782),callout:e(20,28.629092),subheadline:e(19,26.273828),footnote:e(17,23.953776),caption1:e(16,23.03125),caption2:e(15,22.515775)}),xxxl:Object.freeze({largeTitle:e(40,57.100229),title1:e(34,50.221278),title2:e(28,40.699777),title3:e(26,36.147344),headline:e(23,32.719993),body:e(23,32.719993),callout:e(22,31.58724),subheadline:e(21,28.960547),footnote:e(19,26.673828),caption1:e(18,25.792969),caption2:e(17,25.364032)}),ax1:Object.freeze({largeTitle:e(44,62.654154),title1:e(38,56.171186),title2:e(34,49.359933),title3:e(31,43.074141),headline:e(28,39.595881),body:e(28,39.595881),callout:e(26,37.122582),subheadline:e(25,34.483984),footnote:e(23,32.280599),caption1:e(22,31.316406),caption2:e(20,29.636418)}),ax2:Object.freeze({largeTitle:e(48,68.403201),title1:e(43,63.314453),title2:e(39,56.612444),title3:e(37,51.194297),headline:e(33,46.653587),body:e(33,46.653587),callout:e(32,45.616071),subheadline:e(30,41.200781),footnote:e(27,37.720703),caption1:e(26,37.027344),caption2:e(24,35.332933)}),ax3:Object.freeze({largeTitle:e(52,73.957127),title1:e(48,70.693015),title2:e(44,63.65067),title3:e(43,59.474453),headline:e(40,56.461648),body:e(40,56.461648),callout:e(38,54.109561),subheadline:e(36,49.410937),footnote:e(33,46.047526),caption1:e(32,45.5),caption2:e(29,42.684345)}),ax4:Object.freeze({largeTitle:e(56,79.706174),title1:e(53,77.600988),title2:e(50,72.310826),title3:e(49,67.754609),headline:e(47,65.360618),body:e(47,66.269709),callout:e(44,62.412574),subheadline:e(42,57.621094),footnote:e(38,53.014323),caption1:e(37,52.404297),caption2:e(34,50.035757)}),ax5:Object.freeze({largeTitle:e(60,85.260099),title1:e(58,85.214844),title2:e(56,80.970982),title3:e(55,76.034766),headline:e(53,74.520774),body:e(53,74.520774),callout:e(51,72.2899),subheadline:e(49,67.174609),footnote:e(44,61.174479),caption1:e(43,60.876953),caption2:e(40,58.811298)})});function A(t){return H.some(o=>Object.is(o,t))}var P={deviceModel:{type:"enum",default:R,description:"device model to simulate",cliFlag:"device",cliFlagShort:"d",options:w(),group:"device"},orientation:{type:"enum",default:"portrait",description:"screen orientation",cliFlag:"orientation",options:["portrait","landscape"],group:"device"},colorScheme:{type:"enum",default:"auto",description:"color scheme (auto follows system preference)",cliFlag:"theme",cliFlagShort:"t",options:["light","dark","auto"],group:"appearance"},reduceMotion:{type:"boolean",default:!1,description:"reduce motion",group:"appearance"},boldText:{type:"boolean",default:!1,description:"bold text",group:"appearance"},fontSize:{type:"number",default:1,description:"font size multiplier (1.0 = default)",group:"appearance",validate:t=>t>=.5&&t<=4},largerAccessibilitySizes:{type:"boolean",default:!1,description:"show accessibility categories in the dynamic type size picker",group:"appearance"},networkCondition:{type:"enum",default:"wifi",description:"simulated network condition",cliFlag:"network",options:["wifi","lte","fast-3g","slow-3g","offline"],group:"network"},language:{type:"string",default:"en",description:"language code (ISO 639-1)",cliFlag:"language",group:"locale"},region:{type:"string",default:"US",description:"region code (ISO 3166-1)",cliFlag:"region",group:"locale"},renderDensity:{type:"number",default:0,description:"render density override in device pixels per point for high-resolution capture (0 = device native)",group:"simulator",validate:t=>t===0||t>=1&&t<=9},showTouches:{type:"boolean",default:!1,description:"show touch indicators",group:"simulator"},showFrame:{type:"boolean",default:!0,description:"show device frame",cliFlag:"frame",group:"simulator"},showTopBar:{type:"boolean",default:!0,description:"keep the top bar visible instead of revealing it at the top edge",group:"simulator"},showRail:{type:"boolean",default:!0,description:"keep the rail visible instead of revealing it on hover",group:"simulator"},screenshotMode:{type:"boolean",default:!1,description:"show screenshot composition mode in the browser shell",group:"simulator"},screenshotCanvasEditing:{type:"boolean",default:!1,description:"experimental figma-style slide editing: draggable copy block, drop-in image layers (owner review pending)",group:"simulator"},threeMode:{type:"boolean",default:!1,description:"show the experimental 3d device stage in the browser shell",group:"simulator"},threeRecordingEditor:{type:"boolean",default:!1,description:"dock the 3d recording editor in the 3d stage (toggled from its rail)",group:"simulator"},screenshotCanvas:{type:"enum",default:"iphone-6-9",description:"target app-store canvas preset for screenshot mode",options:Object.keys(b),group:"simulator"},screenshotBackground:{type:"enum",default:"dark",description:"background preset rendered inside the screenshot canvas",options:Object.keys(y),group:"simulator"},screenshotText:{type:"enum",default:"bold-top",description:"text layout preset for the screenshot canvas",options:["bold-top","editorial-left","minimal-bottom","none"],group:"simulator"},screenshotPose:{type:"enum",default:"straight",description:"device pose preset inside the screenshot canvas",options:["straight","tilted-left","tilted-right","cut-bottom","cut-top"],group:"simulator"},screenshotDynamicSize:{type:"boolean",default:!1,description:"let the screenshot canvas rect fit available space (off = pin to exact preset pixels)",group:"simulator"},showStatusBar:{type:"boolean",default:!0,description:"show status bar",group:"simulator"},showHomeIndicator:{type:"boolean",default:!0,description:"show home indicator",group:"simulator"},alwaysShowLiveWebViews:{type:"boolean",default:!1,description:"always render WebViews as live browser views",group:"simulator"},a11yMode:{type:"enum",default:"delayed",description:"accessibility tree sync mode (off, delayed=100ms, active=30ms)",options:["off","delayed","active"],group:"simulator"},a11yDepth:{type:"enum",default:"deep",description:"accessibility tree structure depth (shallow or deep)",options:["shallow","deep"],group:"simulator"},inspectMode:{type:"boolean",default:!1,description:"inspect mode",group:"simulator"},errorReporting:{type:"boolean",default:!1,description:"send anonymous crash reports",group:"privacy"},agentProvider:{type:"enum",default:"codex",description:"ai agent used by the sootsim agent prompt bar",options:["codex","claude"],group:"agent"},onboardingComplete:{type:"boolean",default:!1,description:"first-run onboarding completed",group:"beta"},betaConsentVersion:{type:"number",default:0,description:"last accepted beta telemetry policy version",group:"beta"},detailedTelemetry:{type:"boolean",default:!0,description:"send detailed usage telemetry (sessions, perf samples)",group:"beta"}};function E(){if(typeof window>"u")return{};let t={};try{let o=new URLSearchParams(window.location.search),a=o.get("device");a&&P.deviceModel.options?.includes(a)&&(t.deviceModel=a),o.get("ssMode")==="1"&&(t.screenshotMode=!0),o.get("filmStage")==="1"&&(t.threeMode=!0,a||(t.deviceModel="iphone-17-air"));let l=Number(o.get("renderDensity"));Number.isFinite(l)&&l>=1&&l<=9&&(t.renderDensity=l),o.get("ssEdit")==="1"&&(t.screenshotCanvasEditing=!0);let S=o.get("colorScheme")??o.get("theme");S&&P.colorScheme.options?.includes(S)&&(t.colorScheme=S);let p=o.get("reduceMotion");p==="1"||p==="true"?t.reduceMotion=!0:(p==="0"||p==="false")&&(t.reduceMotion=!1);let h=o.get("boldText");h==="1"||h==="true"?t.boldText=!0:(h==="0"||h==="false")&&(t.boldText=!1);let x=Number(o.get("fontSize"));Number.isFinite(x)&&A(x)&&(t.fontSize=x);let m=o.get("largerAccessibilitySizes");m==="1"||m==="true"?t.largerAccessibilitySizes=!0:(m==="0"||m==="false")&&(t.largerAccessibilitySizes=!1);let g=o.get("alwaysShowLiveWebViews");g==="1"||g==="true"?t.alwaysShowLiveWebViews=!0:(g==="0"||g==="false")&&(t.alwaysShowLiveWebViews=!1)}catch{}return t}function Q(){let t={};for(let[o,a]of Object.entries(P))t[o]=a.default;return Object.assign(t,E()),t}export{k as a,I as b,_ as c,V as d,z as e,U as f,j as g,G as h,M as i,K as j,P as k,E as l,Q as m};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{d as a,e as b,f as c,g as d,h as e,i as f,j as g,k as h,l as i,m as j,n as k,o as l,p as m,q as n,r as o,s as p,t as q,u as r,v as s,w as t,x as u}from"./chunk-4B4VFT73.js";import"./chunk-WP3TFHFL.js";import"./chunk-67CIS55C.js";import"./chunk-B7TX4WFB.js";import"./chunk-7B6RGFTM.js";import"./chunk-LA5DIO33.js";import"./chunk-RKXHQ2Q3.js";import"./chunk-ACSTEPSD.js";import"./chunk-MOU2WLO4.js";import"./chunk-JOPKZVOW.js";import"./chunk-HKMWUN7F.js";import"./chunk-6IFJLHDA.js";import"./chunk-J6P2UPXH.js";import"./chunk-TJS5IMOH.js";import"./chunk-RMLJXP7T.js";import"./chunk-YNG4C3ZS.js";import"./chunk-3UX6AY2B.js";import"./chunk-K5JEUI5G.js";import"./chunk-WOWLO4LL.js";import"./chunk-RV67J726.js";export{f as buildOpenUrl,e as buildShellUrl,s as closeSimsBulk,b as normalizeDeepLinkTarget,t as planBulkCloseTargets,k as playwrightHostPidForSim,h as printConnectedSims,c as resolveBundleTarget,d as resolveDefaultShellBaseUrl,a as resolveDriverConnectWaitOptions,r as runClaimCommand,u as runCloseCommand,q as runFocusCommand,n as runLinkCommand,o as runOpenCommand,p as runUseCommand,l as signalDriverLaunchConnected,g as summarizeSimUrl,m as terminatePlaywrightHostsForSims,i as waitForSimMatch,j as waitForSimMatchOrHostExit};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a,b,c,d,e,f}from"./chunk-7H34H74K.js";import"./chunk-7H5G4HUK.js";import"./chunk-547W23BB.js";import"./chunk-6VVLDYPV.js";import"./chunk-UPKYK52K.js";import"./chunk-KC5SCOGS.js";import"./chunk-RMLJXP7T.js";import"./chunk-YNG4C3ZS.js";import"./chunk-3UX6AY2B.js";import"./chunk-K5JEUI5G.js";import"./chunk-AFRXWKTA.js";import"./chunk-WOWLO4LL.js";import"./chunk-NCCMRFXU.js";import"./chunk-USJTVC7T.js";import"./chunk-RV67J726.js";export{c as daemonInstall,b as getDaemonServiceStatus,a as runDaemon,e as teardownDaemonService,d as teardownLegacyMacDaemonArtifacts,f as teardownSootsimHome};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a,b,c,d,e}from"./chunk-LOQLZFRK.js";import"./chunk-2VKTOZQ5.js";import"./chunk-TJS5IMOH.js";import"./chunk-WOWLO4LL.js";import"./chunk-RV67J726.js";export{e as applyAutomaticSootsimCleanup,d as applySootsimCleanup,b as formatSootsimBytes,a as isAutomaticSootsimCleanupComplete,c as planSootsimCleanup};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import"./chunk-QXDXUDJD.js";import{f as a,g as b,h as c,i as d,j as e,k as f,l as g,m as h,n as i}from"./chunk-7B6RGFTM.js";import"./chunk-LA5DIO33.js";import"./chunk-JOPKZVOW.js";import"./chunk-TJS5IMOH.js";import"./chunk-K5JEUI5G.js";import"./chunk-WOWLO4LL.js";import"./chunk-RV67J726.js";export{e as ALL_DRIVERS,i as buildDriverListRows,a as chromiumDriver,b as electronDriver,f as getAllDrivers,g as getDriver,c as playwrightDriver,h as resolveDriver,d as systemDriver};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{c,d,e,f,g,h}from"./chunk-E5WYXRGV.js";import"./chunk-YRFWATLA.js";import"./chunk-2M57EAWS.js";import{c as a,d as b}from"./chunk-2XYCSFGN.js";import"./chunk-U3564F2Y.js";import"./chunk-WPPMUUML.js";import"./chunk-DE4ZA3NL.js";import"./chunk-4B4VFT73.js";import"./chunk-WP3TFHFL.js";import"./chunk-67CIS55C.js";import"./chunk-B7TX4WFB.js";import"./chunk-7B6RGFTM.js";import"./chunk-LA5DIO33.js";import"./chunk-RKXHQ2Q3.js";import"./chunk-ACSTEPSD.js";import"./chunk-MOU2WLO4.js";import"./chunk-JOPKZVOW.js";import"./chunk-HKMWUN7F.js";import"./chunk-6IFJLHDA.js";import"./chunk-J6P2UPXH.js";import"./chunk-WI36YJ23.js";import"./chunk-7H5G4HUK.js";import"./chunk-547W23BB.js";import"./chunk-TJS5IMOH.js";import"./chunk-KC5SCOGS.js";import"./chunk-RMLJXP7T.js";import"./chunk-YNG4C3ZS.js";import"./chunk-3UX6AY2B.js";import"./chunk-K5JEUI5G.js";import"./chunk-AFRXWKTA.js";import"./chunk-WOWLO4LL.js";import"./chunk-RV67J726.js";export{e as discoverSootsimUrl,c as getLastFlowPreviewUploadResult,d as getLastFlowTraceSteps,g as hoistLeadingSimFlag,a as parseFlowFile,f as runFlowPlayback,h as runMaestroAuthoring,b as validateFlowFile};
|
|
@@ -1,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.293 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a,b,c}from"./chunk-6VVLDYPV.js";import"./chunk-UPKYK52K.js";import"./chunk-KC5SCOGS.js";import"./chunk-RMLJXP7T.js";import"./chunk-YNG4C3ZS.js";import"./chunk-3UX6AY2B.js";import"./chunk-K5JEUI5G.js";import"./chunk-AFRXWKTA.js";import"./chunk-WOWLO4LL.js";import"./chunk-NCCMRFXU.js";import"./chunk-USJTVC7T.js";import"./chunk-RV67J726.js";export{c as printCommandHelp,b as printGroupHelp,a as printHelp};
|