sootsim 0.1.304 → 0.1.306

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (171) hide show
  1. package/README.md +10 -4
  2. package/dist-cli/bin.js +5 -5
  3. package/dist-cli/chunks/{agent-EK355OQM.js → agent-43LRLQBS.js} +2 -2
  4. package/dist-cli/chunks/{agent-wrapper-LCJJWHZE.js → agent-wrapper-QYKQDC2Y.js} +2 -2
  5. package/dist-cli/chunks/{app-fonts-LIPU2DLT.js → app-fonts-IHE34DCY.js} +2 -2
  6. package/dist-cli/chunks/{assert-OASKCPBX.js → assert-LAXNLFZ6.js} +2 -2
  7. package/dist-cli/chunks/{auth-XYYKD33F.js → auth-CFTFPYKX.js} +2 -2
  8. package/dist-cli/chunks/{beta-TOL55XPM.js → beta-YPZFX3DF.js} +2 -2
  9. package/dist-cli/chunks/{camera-PHKVEQHR.js → camera-FHHHH6GY.js} +2 -2
  10. package/dist-cli/chunks/{chunk-XHYSASAX.js → chunk-2UC72ZR6.js} +1 -1
  11. package/dist-cli/chunks/{chunk-BJOT2LL6.js → chunk-3XUXMKKJ.js} +2 -2
  12. package/dist-cli/chunks/{chunk-HFA5ZACE.js → chunk-4735ZG3S.js} +1 -1
  13. package/dist-cli/chunks/{chunk-5NJTX5OP.js → chunk-4KABOHME.js} +2 -2
  14. package/dist-cli/chunks/chunk-4MLH5CMV.js +125 -0
  15. package/dist-cli/chunks/chunk-4TN4CD7M.js +15 -0
  16. package/dist-cli/chunks/{chunk-ITDTSNN2.js → chunk-4XGRVAXA.js} +2 -2
  17. package/dist-cli/chunks/{chunk-2MEUZOSD.js → chunk-6PIGQNS4.js} +1 -1
  18. package/dist-cli/chunks/{chunk-INBBOCU4.js → chunk-6SBFFSXO.js} +2 -2
  19. package/dist-cli/chunks/chunk-6SIWYEK5.js +4 -0
  20. package/dist-cli/chunks/{chunk-YAV6BH3A.js → chunk-6WCW6PES.js} +2 -2
  21. package/dist-cli/chunks/{chunk-2RLFUM3C.js → chunk-74Z7ENQL.js} +104 -127
  22. package/dist-cli/chunks/{chunk-RQJDIDJ3.js → chunk-7RZYUZEK.js} +1 -1
  23. package/dist-cli/chunks/{chunk-GF3LDVWF.js → chunk-7VVWOKJE.js} +2 -2
  24. package/dist-cli/chunks/chunk-B3CXF3EF.js +5 -0
  25. package/dist-cli/chunks/{chunk-RT7TUHH7.js → chunk-BPNVJLGT.js} +2 -2
  26. package/dist-cli/chunks/{chunk-3UUHIHA6.js → chunk-C6TKPNCZ.js} +2 -2
  27. package/dist-cli/chunks/{chunk-IWRRIQDJ.js → chunk-CLN6VD2I.js} +2 -2
  28. package/dist-cli/chunks/{chunk-FNI75AD7.js → chunk-FXC6BYKX.js} +1 -1
  29. package/dist-cli/chunks/{chunk-RJWQ3VAD.js → chunk-G73JPCHX.js} +11 -11
  30. package/dist-cli/chunks/{chunk-AJYA6R3N.js → chunk-HMW7QKJV.js} +2 -2
  31. package/dist-cli/chunks/{chunk-NXYKNKNL.js → chunk-HPCKCWSQ.js} +2 -2
  32. package/dist-cli/chunks/{chunk-EXW6TH3O.js → chunk-HTR4DSA5.js} +2 -2
  33. package/dist-cli/chunks/{chunk-RYQUO6LT.js → chunk-IGKZOI2V.js} +1 -1
  34. package/dist-cli/chunks/{chunk-VUR5QXVX.js → chunk-IXPUTLYO.js} +2 -2
  35. package/dist-cli/chunks/{chunk-GMILMS7P.js → chunk-JPQSUHXW.js} +2 -2
  36. package/dist-cli/chunks/chunk-KNPXTXMI.js +4 -0
  37. package/dist-cli/chunks/{chunk-Y5YM7XHU.js → chunk-LHCC656T.js} +1 -1
  38. package/dist-cli/chunks/{chunk-A4UYZTV7.js → chunk-LOXCEKKF.js} +2 -2
  39. package/dist-cli/chunks/{chunk-CMYVGJBQ.js → chunk-MBF4LLVB.js} +1 -1
  40. package/dist-cli/chunks/{chunk-V6JDDX4B.js → chunk-MCGRZYAP.js} +7 -7
  41. package/dist-cli/chunks/chunk-NH2KYSY7.js +4 -0
  42. package/dist-cli/chunks/{chunk-QWQHSUZC.js → chunk-NOLQ4UEP.js} +2 -2
  43. package/dist-cli/chunks/chunk-NQ56D5JF.js +4 -0
  44. package/dist-cli/chunks/{chunk-G4R7CPCY.js → chunk-OYFRTYRJ.js} +2 -2
  45. package/dist-cli/chunks/{chunk-ENXLKDQ6.js → chunk-QHGQTHHD.js} +3 -3
  46. package/dist-cli/chunks/{chunk-SVFN66PF.js → chunk-RYXC27XV.js} +15 -12
  47. package/dist-cli/chunks/{chunk-ZONISYZ5.js → chunk-TCB56ABT.js} +1 -1
  48. package/dist-cli/chunks/{chunk-UB3OWUVK.js → chunk-TR4FKAKQ.js} +1 -1
  49. package/dist-cli/chunks/{chunk-XXS4TCOO.js → chunk-U6NDLMBM.js} +24 -25
  50. package/dist-cli/chunks/{chunk-SN6ARNCL.js → chunk-UAYFVJ7N.js} +2 -2
  51. package/dist-cli/chunks/{chunk-HFKQUS4I.js → chunk-UBLLWSSF.js} +3 -3
  52. package/dist-cli/chunks/{chunk-MSYPDBFG.js → chunk-UTE2W4WC.js} +2 -2
  53. package/dist-cli/chunks/{chunk-XCVSB47R.js → chunk-UTHRVXG5.js} +2 -2
  54. package/dist-cli/chunks/{chunk-LRXSLMX4.js → chunk-V5PJXD2O.js} +1 -1
  55. package/dist-cli/chunks/{chunk-JDKWIB6V.js → chunk-VLKENZFJ.js} +1 -1
  56. package/dist-cli/chunks/{chunk-7RFXZXKH.js → chunk-VTPICQDM.js} +1 -1
  57. package/dist-cli/chunks/chunk-XZSXFV33.js +71 -0
  58. package/dist-cli/chunks/chunk-YBO7SFWN.js +6 -0
  59. package/dist-cli/chunks/{chunk-OSH6526H.js → chunk-YVWYARHY.js} +1 -1
  60. package/dist-cli/chunks/{cleanup-GCTEGJMP.js → cleanup-GYDCGNEJ.js} +2 -2
  61. package/dist-cli/chunks/{cli-version-G72HUH4E.js → cli-version-3HG7ILRV.js} +2 -2
  62. package/dist-cli/chunks/{compat-IC4JHGBH.js → compat-GS3SVTB4.js} +2 -2
  63. package/dist-cli/chunks/{config-C65MZFU3.js → config-W5LN7HWO.js} +2 -2
  64. package/dist-cli/chunks/control-BE55SA2W.js +4 -0
  65. package/dist-cli/chunks/daemon-3YMH272E.js +4 -0
  66. package/dist-cli/chunks/{debug-LEL32PDN.js → debug-2BBR66MJ.js} +3 -3
  67. package/dist-cli/chunks/desktop-PPB66SZO.js +31 -0
  68. package/dist-cli/chunks/{detox-SCCWUIKK.js → detox-P7SDHLB4.js} +2 -2
  69. package/dist-cli/chunks/{device-MTDEKDUK.js → device-JB4NSOZV.js} +2 -2
  70. package/dist-cli/chunks/{diagnose-UZJCKLPZ.js → diagnose-M662DIPM.js} +2 -2
  71. package/dist-cli/chunks/disk-cleanup-HN662P2U.js +4 -0
  72. package/dist-cli/chunks/drivers-ALHRJJGF.js +4 -0
  73. package/dist-cli/chunks/{film-YBE544PG.js → film-QZMDVCZI.js} +3 -3
  74. package/dist-cli/chunks/flow-BHSACBQ5.js +4 -0
  75. package/dist-cli/chunks/help-V2KS2AUT.js +4 -0
  76. package/dist-cli/chunks/{hidden-runtime-alias-KJYCJLSR.js → hidden-runtime-alias-LJXH6WPY.js} +2 -2
  77. package/dist-cli/chunks/{home-paths-NSHWNEGK.js → home-paths-TQ53NFW3.js} +2 -2
  78. package/dist-cli/chunks/inspect-6PW37GVK.js +4 -0
  79. package/dist-cli/chunks/install-desktop-VMVPZSXF.js +4 -0
  80. package/dist-cli/chunks/{login-AEVUU72R.js → login-7XXY5JP4.js} +4 -4
  81. package/dist-cli/chunks/{logout-72XHF6J2.js → logout-UNARNKTJ.js} +2 -2
  82. package/dist-cli/chunks/{maestro-OXSKQJ6B.js → maestro-66RNLMLU.js} +3 -3
  83. package/dist-cli/chunks/{maestro-generate-AKZFORVJ.js → maestro-generate-IO25AY3E.js} +3 -3
  84. package/dist-cli/chunks/{mode-U6KRG2PE.js → mode-DPGASAG4.js} +2 -2
  85. package/dist-cli/chunks/optional-demo-registry-O5GGFNAI.js +4 -0
  86. package/dist-cli/chunks/{perf-KF2BJZIN.js → perf-CBUP2ERS.js} +2 -2
  87. package/dist-cli/chunks/{permissions-TRJG4QAI.js → permissions-3AOMCAT3.js} +2 -2
  88. package/dist-cli/chunks/{record-TICJYZOA.js → record-Q7VRLH7A.js} +3 -3
  89. package/dist-cli/chunks/{report-issue-OQPLBQMJ.js → report-issue-DTWZECYM.js} +2 -2
  90. package/dist-cli/chunks/runtime-VGYKLLTE.js +4 -0
  91. package/dist-cli/chunks/{screenshot-command-XLERKHVW.js → screenshot-command-SSWKZ4U3.js} +6 -6
  92. package/dist-cli/chunks/screenshot-layers-2ABSTF2O.js +20 -0
  93. package/dist-cli/chunks/{screenshots-capture-B6OORSD4.js → screenshots-capture-QA7T5DED.js} +2 -2
  94. package/dist-cli/chunks/{serve-5M7MIPWF.js → serve-T4EQBJM6.js} +3 -3
  95. package/dist-cli/chunks/{setup-HJZDC4PK.js → setup-BXQI3YT4.js} +2 -2
  96. package/dist-cli/chunks/{skills-RXHLMGGL.js → skills-AYSO5FJB.js} +2 -2
  97. package/dist-cli/chunks/{storage-MMPD2XBS.js → storage-KBHG5M5F.js} +2 -2
  98. package/dist-cli/chunks/store-GUNEQ4EC.js +4 -0
  99. package/dist-cli/chunks/telemetry-4VZ43AHH.js +4 -0
  100. package/dist-cli/chunks/{timeline-6PF5BZ37.js → timeline-AB2R26RE.js} +2 -2
  101. package/dist-cli/chunks/{upgrade-QSMIK3RC.js → upgrade-5XXQ7OCE.js} +2 -2
  102. package/dist-cli/chunks/upload-M55IQQHQ.js +4 -0
  103. package/dist-cli/chunks/{version-WLTFXEDC.js → version-PH3OUNPP.js} +2 -2
  104. package/dist-cli/chunks/{web-DI73LQ7N.js → web-XTOGNFZ7.js} +2 -2
  105. package/dist-cli/chunks/{what-happened-4SAMGZWR.js → what-happened-JLI3NTEU.js} +2 -2
  106. package/dist-lib/agent-daemon-client.cjs +1 -1
  107. package/dist-lib/agent-events.cjs +1 -1
  108. package/dist-lib/agent-identity.cjs +1 -1
  109. package/dist-lib/agent-sessions.cjs +1 -1
  110. package/dist-lib/attached-projects.cjs +43 -21
  111. package/dist-lib/auth/shared-session.cjs +1 -1
  112. package/dist-lib/backend-origin.cjs +1 -1
  113. package/dist-lib/beta.cjs +1 -1
  114. package/dist-lib/beta.mjs +1 -1
  115. package/dist-lib/bridge-constants.cjs +8 -1
  116. package/dist-lib/cli-constants.cjs +1 -1
  117. package/dist-lib/config.cjs +1 -1
  118. package/dist-lib/detox/index.cjs +1 -1
  119. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  120. package/dist-lib/home-paths.cjs +1 -1
  121. package/dist-lib/host/bridge-host.cjs +222 -302
  122. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  123. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  124. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  125. package/dist-lib/host/websocket-proxy.cjs +1 -1
  126. package/dist-lib/index.cjs +1 -1
  127. package/dist-lib/jump-to-source-babel.cjs +1 -1
  128. package/dist-lib/menu.cjs +1 -1
  129. package/dist-lib/menu.mjs +1 -1
  130. package/dist-lib/metro.cjs +1 -1
  131. package/dist-lib/profiles.cjs +1 -1
  132. package/dist-lib/render-mode.cjs +1 -1
  133. package/dist-lib/scripts/dev-server-scanner.cjs +43 -13
  134. package/dist-lib/sdk.cjs +47 -10
  135. package/dist-lib/sdk.mjs +47 -10
  136. package/dist-lib/skills.cjs +5708 -1217
  137. package/dist-lib/vite.cjs +1 -1
  138. package/package.json +1 -1
  139. package/scripts/dev-server-scanner.ts +9 -15
  140. package/scripts/optional-demo-registry.ts +52 -10
  141. package/skills/sootsim-debug/SKILL.md +4 -5
  142. package/skills/sootsim-setup/SKILL.md +29 -49
  143. package/src/bridge-constants.ts +15 -0
  144. package/src/host/bridge-host.ts +0 -16
  145. package/src/host/open-url.ts +2 -147
  146. package/src/plist.ts +27 -0
  147. package/src/settings-bundle.ts +2 -23
  148. package/src/skills/builtin/maestro-test.ts +4 -1
  149. package/src/vite-plugin.ts +2 -1
  150. package/dist-cli/chunks/chunk-76OLOD2G.js +0 -15
  151. package/dist-cli/chunks/chunk-ABHNOM2C.js +0 -4
  152. package/dist-cli/chunks/chunk-BPRMA4IC.js +0 -4
  153. package/dist-cli/chunks/chunk-M3ETYVNL.js +0 -4
  154. package/dist-cli/chunks/chunk-W3CSYOSQ.js +0 -4
  155. package/dist-cli/chunks/chunk-WNDYTKLC.js +0 -4
  156. package/dist-cli/chunks/chunk-YXHO2OUL.js +0 -7
  157. package/dist-cli/chunks/chunk-ZDRI2LUG.js +0 -125
  158. package/dist-cli/chunks/control-RWLYBKQR.js +0 -4
  159. package/dist-cli/chunks/daemon-D77E5G6Z.js +0 -4
  160. package/dist-cli/chunks/desktop-RDSISJH2.js +0 -34
  161. package/dist-cli/chunks/disk-cleanup-HLWRVTVW.js +0 -4
  162. package/dist-cli/chunks/drivers-Q7GMKTBM.js +0 -4
  163. package/dist-cli/chunks/flow-5VOVAVZN.js +0 -4
  164. package/dist-cli/chunks/help-2PESJ7V2.js +0 -4
  165. package/dist-cli/chunks/inspect-OIA3Q5MD.js +0 -4
  166. package/dist-cli/chunks/install-desktop-7KLACQUW.js +0 -4
  167. package/dist-cli/chunks/optional-demo-registry-L3VIWBI2.js +0 -4
  168. package/dist-cli/chunks/runtime-HDMLWNXW.js +0 -4
  169. package/dist-cli/chunks/store-APKY72ZY.js +0 -4
  170. package/dist-cli/chunks/telemetry-W3YRHE67.js +0 -4
  171. package/dist-cli/chunks/upload-HQEOYILQ.js +0 -4
@@ -1,6 +1,6 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{b as a}from"./chunk-SN6ARNCL.js";import"./chunk-RQJDIDJ3.js";import{d as r,f as e}from"./chunk-A4UYZTV7.js";import{a as m}from"./chunk-3UUHIHA6.js";import{l as s}from"./chunk-7RFXZXKH.js";import{a as l}from"./chunk-ZONISYZ5.js";import"./chunk-XHYSASAX.js";import g from"node:fs";import d from"node:path";async function V($){let{IS_BETA:c,BETA_LABEL:u}=await import("./beta-TOL55XPM.js"),f=c?` \xB7 ${u}`:"";console.log(`sootsim v${l()}${f}`);let o=m(),i=e.resolveChannel();o.isDevBridge?(console.log(o.primary),o.installedRuntime&&console.log(`${o.installedRuntime} \xB7 ${i}`)):o.primary==="runtime not installed"?console.log("runtime not installed \u2014 run `sootsim runtime install`"):console.log(`${o.primary} \xB7 ${i}`);let{config:n}=await a();if(n?.runtimeVersion){let p=g.existsSync(d.join(s(n.runtimeVersion),"index.html"));console.log(`project runtime v${n.runtimeVersion} \xB7 configured \xB7 ${p?"installed":"installs on open"}`)}let t=await e.checkUpToDate({channel:i});t.outdated&&t.latest&&console.log(`
4
+ import{b as a}from"./chunk-UAYFVJ7N.js";import"./chunk-7RZYUZEK.js";import{d as r,f as e}from"./chunk-LOXCEKKF.js";import{a as m}from"./chunk-C6TKPNCZ.js";import{l as s}from"./chunk-VTPICQDM.js";import{a as l}from"./chunk-TCB56ABT.js";import"./chunk-2UC72ZR6.js";import g from"node:fs";import d from"node:path";async function V($){let{IS_BETA:c,BETA_LABEL:u}=await import("./beta-YPZFX3DF.js"),f=c?` \xB7 ${u}`:"";console.log(`sootsim v${l()}${f}`);let o=m(),i=e.resolveChannel();o.isDevBridge?(console.log(o.primary),o.installedRuntime&&console.log(`${o.installedRuntime} \xB7 ${i}`)):o.primary==="runtime not installed"?console.log("runtime not installed \u2014 run `sootsim runtime install`"):console.log(`${o.primary} \xB7 ${i}`);let{config:n}=await a();if(n?.runtimeVersion){let p=g.existsSync(d.join(s(n.runtimeVersion),"index.html"));console.log(`project runtime v${n.runtimeVersion} \xB7 configured \xB7 ${p?"installed":"installs on open"}`)}let t=await e.checkUpToDate({channel:i});t.outdated&&t.latest&&console.log(`
5
5
  \u2191 default runtime v${t.latest} available; run \`sootsim upgrade\``),console.log(`
6
6
  what's new: ${r}`)}export{V as runVersion};
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{a,b,c,d,e,f,g,h,i,j}from"./chunk-WNDYTKLC.js";import"./chunk-XHYSASAX.js";export{b as COMPAT_CATEGORIES,j as COMPAT_RESULT_CAVEAT,c as POLYFILL_REGISTRY,a as UNSUPPORTABLE,f as countScanResults,i as formatDetailedScanLines,h as formatPackageStatus,g as formatScanCounts,d as scanDeps,e as scanDepsWithData};
4
+ import{a,b,c,d,e,f,g,h,i,j}from"./chunk-NH2KYSY7.js";import"./chunk-2UC72ZR6.js";export{b as COMPAT_CATEGORIES,j as COMPAT_RESULT_CAVEAT,c as POLYFILL_REGISTRY,a as UNSUPPORTABLE,f as countScanResults,i as formatDetailedScanLines,h as formatPackageStatus,g as formatScanCounts,d as scanDeps,e as scanDepsWithData};
@@ -1,7 +1,7 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{D as N,E as F,G as y,R as T,S as b,T as S}from"./chunk-HFA5ZACE.js";import{h as A,j as _}from"./chunk-V6JDDX4B.js";import"./chunk-ABHNOM2C.js";import{c as k}from"./chunk-YXHO2OUL.js";import"./chunk-7RFXZXKH.js";import"./chunk-XHYSASAX.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
4
+ import{D as N,E as F,G as y,R as T,S as b,T as S}from"./chunk-4735ZG3S.js";import{h as A,j as _}from"./chunk-MCGRZYAP.js";import{f as k}from"./chunk-B3CXF3EF.js";import"./chunk-YBO7SFWN.js";import"./chunk-VTPICQDM.js";import"./chunk-2UC72ZR6.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
5
5
  sootsim what-happened \u2014 show recent events from the semantic timeline
6
6
 
7
7
  usage:
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (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;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (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;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (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;
@@ -36,15 +36,33 @@ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: tru
36
36
  var optional_demo_registry_exports = {};
37
37
  __export(optional_demo_registry_exports, {
38
38
  __withOptionalDemoAppsForTests: () => __withOptionalDemoAppsForTests,
39
+ findInternalDemoRegistry: () => findInternalDemoRegistry,
39
40
  loadOptionalDemoApps: () => loadOptionalDemoApps,
40
41
  optionalDemoAppsSync: () => optionalDemoAppsSync
41
42
  });
43
+ function findInternalDemoRegistry(startDir) {
44
+ let dir = startDir;
45
+ for (let step = 0; step < MAX_ANCESTOR_STEPS; step++) {
46
+ if ((0, import_node_path2.basename)(dir) === "node_modules") return null;
47
+ const candidate = (0, import_node_path2.join)(dir, REGISTRY_REPO_PATH);
48
+ if ((0, import_node_fs.existsSync)(candidate)) return candidate;
49
+ const parent = (0, import_node_path2.dirname)(dir);
50
+ if (parent === dir) return null;
51
+ dir = parent;
52
+ }
53
+ return null;
54
+ }
42
55
  async function loadOptionalDemoApps() {
43
56
  if (cached) return cached;
57
+ const registryPath = findInternalDemoRegistry((0, import_node_path2.dirname)((0, import_node_url.fileURLToPath)(__sootsim_import_meta_url)));
58
+ if (!registryPath) {
59
+ cached = [];
60
+ return cached;
61
+ }
44
62
  try {
45
63
  const mod = await import(
46
64
  /* @vite-ignore */
47
- REGISTRY_SPECIFIER
65
+ (0, import_node_url.pathToFileURL)(registryPath).href
48
66
  );
49
67
  cached = Array.isArray(mod.APPS) ? mod.APPS : [];
50
68
  } catch {
@@ -64,11 +82,15 @@ function __withOptionalDemoAppsForTests(apps) {
64
82
  }
65
83
  };
66
84
  }
67
- var REGISTRY_SPECIFIER, cached;
85
+ var import_node_fs, import_node_path2, import_node_url, REGISTRY_REPO_PATH, MAX_ANCESTOR_STEPS, cached;
68
86
  var init_optional_demo_registry = __esm({
69
87
  "scripts/optional-demo-registry.ts"() {
70
88
  "use strict";
71
- REGISTRY_SPECIFIER = "./demo-app-registry.ts";
89
+ import_node_fs = require("node:fs");
90
+ import_node_path2 = require("node:path");
91
+ import_node_url = require("node:url");
92
+ REGISTRY_REPO_PATH = "packages/sootsim/scripts/demo-app-registry.ts";
93
+ MAX_ANCESTOR_STEPS = 8;
72
94
  cached = null;
73
95
  }
74
96
  });
@@ -104,8 +126,8 @@ __export(attached_projects_exports, {
104
126
  });
105
127
  module.exports = __toCommonJS(attached_projects_exports);
106
128
  var import_node_crypto = require("node:crypto");
107
- var import_node_fs = __toESM(require("node:fs"), 1);
108
- var import_node_path2 = __toESM(require("node:path"), 1);
129
+ var import_node_fs2 = __toESM(require("node:fs"), 1);
130
+ var import_node_path3 = __toESM(require("node:path"), 1);
109
131
 
110
132
  // src/home-paths.ts
111
133
  var import_node_os = require("node:os");
@@ -140,7 +162,7 @@ function getUserDataDir() {
140
162
  return userDataDir();
141
163
  }
142
164
  function storeFile() {
143
- return import_node_path2.default.join(userDataDir(), "attached-projects.json");
165
+ return import_node_path3.default.join(userDataDir(), "attached-projects.json");
144
166
  }
145
167
  function cloneEmpty() {
146
168
  return {
@@ -154,7 +176,7 @@ function loadStore() {
154
176
  const file = storeFile();
155
177
  let raw;
156
178
  try {
157
- raw = import_node_fs.default.readFileSync(file, "utf8");
179
+ raw = import_node_fs2.default.readFileSync(file, "utf8");
158
180
  } catch (err) {
159
181
  if (err.code === "ENOENT") return cloneEmpty();
160
182
  throw err;
@@ -171,7 +193,7 @@ function loadStore() {
171
193
  } catch (err) {
172
194
  const quarantine = `${file}.corrupt-${Date.now()}`;
173
195
  try {
174
- import_node_fs.default.renameSync(file, quarantine);
196
+ import_node_fs2.default.renameSync(file, quarantine);
175
197
  console.warn(
176
198
  `[sootsim] attached-projects.json was unparseable; quarantined to ${quarantine}. original error: ${err.message}`
177
199
  );
@@ -182,16 +204,16 @@ function loadStore() {
182
204
  }
183
205
  function writeStore(store) {
184
206
  const file = storeFile();
185
- import_node_fs.default.mkdirSync(import_node_path2.default.dirname(file), { recursive: true });
207
+ import_node_fs2.default.mkdirSync(import_node_path3.default.dirname(file), { recursive: true });
186
208
  const tmp = `${file}.tmp-${process.pid}-${Date.now()}`;
187
- const fd = import_node_fs.default.openSync(tmp, "w", 384);
209
+ const fd = import_node_fs2.default.openSync(tmp, "w", 384);
188
210
  try {
189
- import_node_fs.default.writeFileSync(fd, JSON.stringify(store, null, 2));
190
- import_node_fs.default.fsyncSync(fd);
211
+ import_node_fs2.default.writeFileSync(fd, JSON.stringify(store, null, 2));
212
+ import_node_fs2.default.fsyncSync(fd);
191
213
  } finally {
192
- import_node_fs.default.closeSync(fd);
214
+ import_node_fs2.default.closeSync(fd);
193
215
  }
194
- import_node_fs.default.renameSync(tmp, file);
216
+ import_node_fs2.default.renameSync(tmp, file);
195
217
  }
196
218
  function mutateStore(fn) {
197
219
  const store = loadStore();
@@ -200,7 +222,7 @@ function mutateStore(fn) {
200
222
  return store;
201
223
  }
202
224
  function projectIdForCwd(cwd) {
203
- return (0, import_node_crypto.createHash)("sha256").update(import_node_path2.default.resolve(cwd)).digest("hex").slice(0, 16);
225
+ return (0, import_node_crypto.createHash)("sha256").update(import_node_path3.default.resolve(cwd)).digest("hex").slice(0, 16);
204
226
  }
205
227
  function newSessionId() {
206
228
  return `s_${(0, import_node_crypto.randomBytes)(10).toString("hex")}`;
@@ -209,7 +231,7 @@ function newPreviewId() {
209
231
  return `pa_${(0, import_node_crypto.randomBytes)(10).toString("hex")}`;
210
232
  }
211
233
  function upsertProject(input) {
212
- const cwd = import_node_path2.default.resolve(input.cwd);
234
+ const cwd = import_node_path3.default.resolve(input.cwd);
213
235
  const id = projectIdForCwd(cwd);
214
236
  let result;
215
237
  mutateStore((store) => {
@@ -235,7 +257,7 @@ function upsertProject(input) {
235
257
  const now = Date.now();
236
258
  const created = {
237
259
  id,
238
- name: input.name ?? import_node_path2.default.basename(cwd),
260
+ name: input.name ?? import_node_path3.default.basename(cwd),
239
261
  cwd,
240
262
  repoRoot: input.repoRoot,
241
263
  sourceRoots: input.sourceRoots ?? [cwd],
@@ -262,7 +284,7 @@ function findProjectById(id) {
262
284
  return loadStore().attachedProjects.find((p) => p.id === id) ?? null;
263
285
  }
264
286
  function findProjectByCwd(cwd) {
265
- const resolved = import_node_path2.default.resolve(cwd);
287
+ const resolved = import_node_path3.default.resolve(cwd);
266
288
  return loadStore().attachedProjects.find((p) => p.cwd === resolved) ?? null;
267
289
  }
268
290
  function findProjectByBundleUrl(bundleUrl) {
@@ -452,8 +474,8 @@ async function seedFromDemoAppRegistry() {
452
474
  if (apps.length === 0) return;
453
475
  mutateStore((store) => {
454
476
  for (const app of apps) {
455
- if (!import_node_fs.default.existsSync(app.dir)) continue;
456
- const cwd = import_node_path2.default.resolve(app.dir);
477
+ if (!import_node_fs2.default.existsSync(app.dir)) continue;
478
+ const cwd = import_node_path3.default.resolve(app.dir);
457
479
  const id = projectIdForCwd(cwd);
458
480
  if (store.attachedProjects.some((p) => p.id === id)) continue;
459
481
  const now = Date.now();
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (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;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -31,6 +31,7 @@ __export(bridge_constants_exports, {
31
31
  resolveSootsimBridgePortForHttpPort: () => resolveSootsimBridgePortForHttpPort,
32
32
  resolveSootsimBridgePortForRuntimeLocation: () => resolveSootsimBridgePortForRuntimeLocation,
33
33
  resolveSootsimBridgeWebSocketUrl: () => resolveSootsimBridgeWebSocketUrl,
34
+ resolveSootsimShellBaseUrlForBridgePort: () => resolveSootsimShellBaseUrlForBridgePort,
34
35
  resolveSootsimWebSocketProxyUrl: () => resolveSootsimWebSocketProxyUrl
35
36
  });
36
37
  module.exports = __toCommonJS(bridge_constants_exports);
@@ -87,6 +88,11 @@ function closestLocalDevBaseHttpPort(httpPort) {
87
88
  }
88
89
  return closest?.basePort ?? null;
89
90
  }
91
+ function resolveSootsimShellBaseUrlForBridgePort(bridgePort) {
92
+ const offset = bridgePort - DEFAULT_SOOTSIM_BRIDGE_PORT;
93
+ if (offset < 0 || offset > MAX_LOCAL_DEV_PORT_OFFSET) return null;
94
+ return `http://localhost:${SOOTSIM_SHELL_DEV_HTTP_BASE_PORT + offset}/`;
95
+ }
90
96
  function resolveSootsimBridgePortForRuntimeLocation(input = {}) {
91
97
  const explicitPort = parsePort(input.explicitPort);
92
98
  if (explicitPort !== null) return explicitPort;
@@ -150,5 +156,6 @@ var SOOTSIM_BRIDGE_SIM_CLOSE_REASON = "sootsim close";
150
156
  resolveSootsimBridgePortForHttpPort,
151
157
  resolveSootsimBridgePortForRuntimeLocation,
152
158
  resolveSootsimBridgeWebSocketUrl,
159
+ resolveSootsimShellBaseUrlForBridgePort,
153
160
  resolveSootsimWebSocketProxyUrl
154
161
  });
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (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;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.304 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.306 | (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;