rnxsim 0.1.371 → 0.1.373

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 (194) hide show
  1. package/cli/bin.ts +2 -2
  2. package/dist-cli/bin.js +5 -5
  3. package/dist-cli/chunks/{agent-W2D2V7WF.js → agent-TJXK3LYQ.js} +2 -2
  4. package/dist-cli/chunks/{agent-wrapper-GVNM2Z4S.js → agent-wrapper-IBMSADYR.js} +2 -2
  5. package/dist-cli/chunks/{app-fonts-J6R4TTXD.js → app-fonts-PUXF6G6Y.js} +2 -2
  6. package/dist-cli/chunks/{assert-YN6U4ZTB.js → assert-RSPGS4CF.js} +2 -2
  7. package/dist-cli/chunks/{auth-XGYZAK2P.js → auth-P4RWMWAM.js} +2 -2
  8. package/dist-cli/chunks/{beta-WRDMHHWJ.js → beta-HNRJDCWK.js} +2 -2
  9. package/dist-cli/chunks/{box-ML5TFUQW.js → box-TBCAJ74I.js} +2 -2
  10. package/dist-cli/chunks/{camera-OBEI4FZA.js → camera-2P7A65KA.js} +2 -2
  11. package/dist-cli/chunks/{chunk-ERBGQEJ5.js → chunk-2272Y5HN.js} +1 -1
  12. package/dist-cli/chunks/{chunk-Y7SKGRAV.js → chunk-2YNZ3GHI.js} +1 -1
  13. package/dist-cli/chunks/{chunk-MOIQZVRU.js → chunk-45MY5YQL.js} +2 -2
  14. package/dist-cli/chunks/{chunk-5PPVVGLH.js → chunk-4AGK7T3W.js} +3 -3
  15. package/dist-cli/chunks/{chunk-CJQXP4XM.js → chunk-4NBB7L3M.js} +1 -1
  16. package/dist-cli/chunks/{chunk-UPMR6Y5P.js → chunk-4RQFXEF2.js} +2 -2
  17. package/dist-cli/chunks/{chunk-ADJSGO55.js → chunk-4ULLSYFL.js} +2 -2
  18. package/dist-cli/chunks/{chunk-H4DU457S.js → chunk-52NWLXHO.js} +1 -1
  19. package/dist-cli/chunks/{chunk-6FPXLSBJ.js → chunk-5BMF3MJN.js} +1 -1
  20. package/dist-cli/chunks/{chunk-DP6RGTNN.js → chunk-5H5N36NO.js} +2 -2
  21. package/dist-cli/chunks/{chunk-J6A5W2DI.js → chunk-5UMNXXVL.js} +3 -3
  22. package/dist-cli/chunks/{chunk-7ASCDKA3.js → chunk-676FU5M6.js} +1 -1
  23. package/dist-cli/chunks/{chunk-2FIT64GR.js → chunk-6CYCKPTJ.js} +1 -1
  24. package/dist-cli/chunks/{chunk-WCB5XPCH.js → chunk-7T3K66TV.js} +2 -2
  25. package/dist-cli/chunks/{chunk-IPNDXGVA.js → chunk-ADP35DA3.js} +2 -2
  26. package/dist-cli/chunks/{chunk-2LH4DYPM.js → chunk-AQBARY5L.js} +2 -2
  27. package/dist-cli/chunks/{chunk-S3AH2O67.js → chunk-AYZLK7R4.js} +1 -1
  28. package/dist-cli/chunks/{chunk-WHZE63R2.js → chunk-B7LYAWJU.js} +2 -2
  29. package/dist-cli/chunks/{chunk-KL34TRNW.js → chunk-BHNWFDNX.js} +1 -1
  30. package/dist-cli/chunks/{chunk-IYU2EOIU.js → chunk-BLOJLKH7.js} +1 -1
  31. package/dist-cli/chunks/{chunk-JKRMBNPO.js → chunk-CVMYEPWT.js} +2 -2
  32. package/dist-cli/chunks/{chunk-7Q4WHJDH.js → chunk-EEBXLGGD.js} +1 -1
  33. package/dist-cli/chunks/{chunk-RYJTPZCX.js → chunk-EG4HCEKS.js} +1 -1
  34. package/dist-cli/chunks/{chunk-763GBI7G.js → chunk-EUEQHXM2.js} +2 -2
  35. package/dist-cli/chunks/{chunk-2W4YBCPX.js → chunk-GVIPHFFH.js} +2 -2
  36. package/dist-cli/chunks/{chunk-GQGS7TRK.js → chunk-HIFJBR5S.js} +1 -1
  37. package/dist-cli/chunks/{chunk-TWNLRDIH.js → chunk-HSKW3YE2.js} +2 -2
  38. package/dist-cli/chunks/{chunk-6AZKZ5AJ.js → chunk-IGHXSJ54.js} +2 -2
  39. package/dist-cli/chunks/{chunk-OF3U4SZO.js → chunk-K6GGQQU5.js} +2 -2
  40. package/dist-cli/chunks/{chunk-LFANRLWK.js → chunk-LEX3XST4.js} +2 -2
  41. package/dist-cli/chunks/{chunk-AGZZWLEL.js → chunk-MTWJ3CNR.js} +2 -2
  42. package/dist-cli/chunks/{chunk-42YOIDLR.js → chunk-MWXYYQMU.js} +2 -2
  43. package/dist-cli/chunks/{chunk-DYFOLOYL.js → chunk-NEJ3WA75.js} +2 -2
  44. package/dist-cli/chunks/{chunk-Z6CQDU74.js → chunk-NHUVO3VC.js} +1 -1
  45. package/dist-cli/chunks/{chunk-OQPZOEEP.js → chunk-NQDLJL63.js} +1 -1
  46. package/dist-cli/chunks/{chunk-FLNGSIBL.js → chunk-O5TKIMXX.js} +2 -2
  47. package/dist-cli/chunks/{chunk-MW4E5EED.js → chunk-O6VJVWEA.js} +3 -3
  48. package/dist-cli/chunks/{chunk-OF5OBB67.js → chunk-O7NKNTJ6.js} +1 -1
  49. package/dist-cli/chunks/{chunk-SH2HXHR2.js → chunk-OCH4TAJF.js} +2 -2
  50. package/dist-cli/chunks/{chunk-IX7Z6ZVJ.js → chunk-PGPD6XML.js} +2 -2
  51. package/dist-cli/chunks/{chunk-BNS5LNEU.js → chunk-POCPBDTJ.js} +1 -1
  52. package/dist-cli/chunks/chunk-QKX26L27.js +6 -0
  53. package/dist-cli/chunks/{chunk-47MSXLWK.js → chunk-QPONDPPF.js} +2 -2
  54. package/dist-cli/chunks/{chunk-4OLUFHEZ.js → chunk-SDY5Y6EY.js} +2 -2
  55. package/dist-cli/chunks/{chunk-7YB46LGI.js → chunk-SK6RRDXP.js} +1 -1
  56. package/dist-cli/chunks/{chunk-WLRIPAGJ.js → chunk-TIPRUSQQ.js} +1 -1
  57. package/dist-cli/chunks/{chunk-OWDJQWJ7.js → chunk-U55C6SUH.js} +1 -1
  58. package/dist-cli/chunks/{chunk-NQ4CI2VI.js → chunk-UFR7WANF.js} +1 -1
  59. package/dist-cli/chunks/{chunk-HFY35VAG.js → chunk-UHFVEMYL.js} +2 -2
  60. package/dist-cli/chunks/{chunk-VEFSHPSU.js → chunk-UL6JYYB3.js} +2 -2
  61. package/dist-cli/chunks/chunk-UL6KGGFA.js +7 -0
  62. package/dist-cli/chunks/{chunk-PTWMX4AA.js → chunk-UMTP3PDW.js} +2 -2
  63. package/dist-cli/chunks/{chunk-ESWSXF55.js → chunk-VBAUP3CK.js} +2 -2
  64. package/dist-cli/chunks/{chunk-UHYAY3RU.js → chunk-VPWI7ZQM.js} +2 -2
  65. package/dist-cli/chunks/{chunk-KHGXEU4L.js → chunk-VXZGJMFM.js} +1 -1
  66. package/dist-cli/chunks/{chunk-HV3WOWQM.js → chunk-XHSYJMBV.js} +1 -1
  67. package/dist-cli/chunks/{chunk-B26ZJUQA.js → chunk-XOPJZBOT.js} +2 -2
  68. package/dist-cli/chunks/{chunk-JUTLQ3GX.js → chunk-XUJ67CGZ.js} +1 -1
  69. package/dist-cli/chunks/{chunk-2QW3JH6T.js → chunk-Y47FOLM5.js} +2 -2
  70. package/dist-cli/chunks/{chunk-TL22EBF5.js → chunk-YIH24FX4.js} +2 -2
  71. package/dist-cli/chunks/{chunk-SHLJYXIN.js → chunk-YPJJDEFE.js} +1 -1
  72. package/dist-cli/chunks/{chunk-HZ365EMS.js → chunk-ZGOWBBWX.js} +2 -2
  73. package/dist-cli/chunks/{chunk-AVIH3TAZ.js → chunk-ZMXWHNCZ.js} +2 -2
  74. package/dist-cli/chunks/{cleanup-PTJBMC34.js → cleanup-2DD3AX5G.js} +2 -2
  75. package/dist-cli/chunks/cli-version-Y4TNXT2D.js +4 -0
  76. package/dist-cli/chunks/{compat-FJ2HWRAG.js → compat-U6VLKECZ.js} +2 -2
  77. package/dist-cli/chunks/{config-PYGH7JPN.js → config-W7D7BANR.js} +2 -2
  78. package/dist-cli/chunks/{connect-AJV4PZA4.js → connect-CUQIG76A.js} +2 -2
  79. package/dist-cli/chunks/control-IMYDYX74.js +4 -0
  80. package/dist-cli/chunks/daemon-3ZSBIRII.js +4 -0
  81. package/dist-cli/chunks/{debug-XF2XUDHN.js → debug-5VKWI2IY.js} +3 -3
  82. package/dist-cli/chunks/{desktop-HEZYNFYW.js → desktop-JUI2EFQV.js} +3 -3
  83. package/dist-cli/chunks/{detox-JCFZJRNE.js → detox-WWO5NMX5.js} +2 -2
  84. package/dist-cli/chunks/{device-KGUVZHFW.js → device-N54IMZI5.js} +2 -2
  85. package/dist-cli/chunks/{diagnose-KVJQ3TOI.js → diagnose-RPMOVNDH.js} +2 -2
  86. package/dist-cli/chunks/disk-cleanup-LS4E6EN2.js +4 -0
  87. package/dist-cli/chunks/{do-chain-3FYJNA2N.js → do-chain-SKD3BNPJ.js} +2 -2
  88. package/dist-cli/chunks/drivers-RIZIUIBG.js +4 -0
  89. package/dist-cli/chunks/{env-BX6S2SOM.js → env-4WPFRAKQ.js} +2 -2
  90. package/dist-cli/chunks/{film-2WZUVYFA.js → film-VLUYMYJC.js} +3 -3
  91. package/dist-cli/chunks/flow-JQFIL6QT.js +4 -0
  92. package/dist-cli/chunks/help-K4MMUKLT.js +4 -0
  93. package/dist-cli/chunks/{hidden-runtime-alias-PGF55OFH.js → hidden-runtime-alias-TARNNZAO.js} +2 -2
  94. package/dist-cli/chunks/{home-paths-EGRMTSGE.js → home-paths-UBO2R6RQ.js} +2 -2
  95. package/dist-cli/chunks/inspect-2FYLUREA.js +4 -0
  96. package/dist-cli/chunks/install-desktop-5IK4MZ25.js +4 -0
  97. package/dist-cli/chunks/{login-HRFPYPZ3.js → login-47BPRPSH.js} +2 -2
  98. package/dist-cli/chunks/{logout-LRH5HZGP.js → logout-IKVBKUCK.js} +2 -2
  99. package/dist-cli/chunks/{maestro-S53T4PPE.js → maestro-Q7MGCY72.js} +3 -3
  100. package/dist-cli/chunks/{maestro-generate-YKIVKOB3.js → maestro-generate-DLV3CE75.js} +3 -3
  101. package/dist-cli/chunks/{mode-47JKNUNS.js → mode-EATOC6AC.js} +2 -2
  102. package/dist-cli/chunks/{optional-demo-registry-ARZSPS5Y.js → optional-demo-registry-324IOW5Q.js} +2 -2
  103. package/dist-cli/chunks/{perf-J73OKB4T.js → perf-X5EKGPQJ.js} +2 -2
  104. package/dist-cli/chunks/{permissions-L3FPI56H.js → permissions-7PT2O3O2.js} +2 -2
  105. package/dist-cli/chunks/{platform-YAROAHRM.js → platform-Y3Q4V4JM.js} +3 -3
  106. package/dist-cli/chunks/privacy-34TQ2IOU.js +4 -0
  107. package/dist-cli/chunks/{record-QAQMGYOO.js → record-26GR6633.js} +3 -3
  108. package/dist-cli/chunks/{report-issue-4FVZCAFQ.js → report-issue-FRUOURLU.js} +2 -2
  109. package/dist-cli/chunks/reset-MQGKFTRW.js +4 -0
  110. package/dist-cli/chunks/resolve-target-XSMC6QNY.js +4 -0
  111. package/dist-cli/chunks/runtime-ZAH42MO5.js +4 -0
  112. package/dist-cli/chunks/{screenshot-command-Q5MGGEWY.js → screenshot-command-K35IU6HC.js} +3 -3
  113. package/dist-cli/chunks/{screenshot-layers-4JW7DRL7.js → screenshot-layers-VMQCTFSU.js} +2 -2
  114. package/dist-cli/chunks/{screenshots-capture-X5PMO44E.js → screenshots-capture-SXROGTCP.js} +2 -2
  115. package/dist-cli/chunks/{serve-3JWJ45J3.js → serve-I3YMZVYB.js} +2 -2
  116. package/dist-cli/chunks/setup-6BNCYKCA.js +4 -0
  117. package/dist-cli/chunks/{sim-client-RL6DGOJE.js → sim-client-R3QBYUIC.js} +2 -2
  118. package/dist-cli/chunks/{skills-QNO6GDJB.js → skills-LGJB4EOZ.js} +2 -2
  119. package/dist-cli/chunks/{state-OGUCSUC3.js → state-2IXZ5JYX.js} +2 -2
  120. package/dist-cli/chunks/{storage-TG7KFQZ3.js → storage-3PNQOCXW.js} +2 -2
  121. package/dist-cli/chunks/store-BV7S5W55.js +4 -0
  122. package/dist-cli/chunks/telemetry-UHKCD6GY.js +4 -0
  123. package/dist-cli/chunks/{timeline-R4G5P335.js → timeline-FXYNSSJJ.js} +2 -2
  124. package/dist-cli/chunks/{upgrade-RDTXJ6O3.js → upgrade-ZG4X4SPV.js} +2 -2
  125. package/dist-cli/chunks/upload-R4XZLOLQ.js +4 -0
  126. package/dist-cli/chunks/{version-GU2NUZDS.js → version-AXPWANGE.js} +2 -2
  127. package/dist-cli/chunks/{web-7PUVG3GE.js → web-YPFT4L4F.js} +2 -2
  128. package/dist-cli/chunks/welcome-SRGEEM4A.js +5 -0
  129. package/dist-cli/chunks/{what-happened-OHAAX6F6.js → what-happened-XE32WD2W.js} +2 -2
  130. package/dist-cli/chunks/{ws-bridge-Z3O35MNF.js → ws-bridge-JW3MABK7.js} +2 -2
  131. package/dist-lib/agent-daemon-client.cjs +1 -1
  132. package/dist-lib/agent-events.cjs +1 -1
  133. package/dist-lib/agent-identity.cjs +1 -1
  134. package/dist-lib/agent-sessions.cjs +1 -1
  135. package/dist-lib/attached-projects.cjs +1 -1
  136. package/dist-lib/auth/shared-session.cjs +1 -1
  137. package/dist-lib/backend-origin.cjs +1 -1
  138. package/dist-lib/beta.cjs +1 -1
  139. package/dist-lib/beta.mjs +1 -1
  140. package/dist-lib/bridge-constants.cjs +1 -1
  141. package/dist-lib/bridge-contract-input.cjs +1 -1
  142. package/dist-lib/bridge-contract-input.mjs +1 -1
  143. package/dist-lib/bridge-contract.cjs +1 -1
  144. package/dist-lib/bridge-contract.mjs +1 -1
  145. package/dist-lib/cli-constants.cjs +1 -1
  146. package/dist-lib/config.cjs +1 -1
  147. package/dist-lib/detox/index.cjs +1 -1
  148. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  149. package/dist-lib/home-paths.cjs +1 -1
  150. package/dist-lib/host/bridge-host.cjs +13 -4
  151. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  152. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  153. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  154. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  155. package/dist-lib/host/websocket-proxy.cjs +1 -1
  156. package/dist-lib/index.cjs +1 -1
  157. package/dist-lib/jump-to-source-babel.cjs +1 -1
  158. package/dist-lib/menu.cjs +1 -1
  159. package/dist-lib/menu.mjs +1 -1
  160. package/dist-lib/metro-production-bundle.cjs +1 -1
  161. package/dist-lib/metro-production-bundle.mjs +1 -1
  162. package/dist-lib/metro.cjs +1 -1
  163. package/dist-lib/profiles.cjs +1 -1
  164. package/dist-lib/public-brand.cjs +1 -1
  165. package/dist-lib/react-native-host-modules.cjs +1 -1
  166. package/dist-lib/react-native-host-modules.mjs +1 -1
  167. package/dist-lib/render-mode.cjs +1 -1
  168. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  169. package/dist-lib/sdk.cjs +1 -1
  170. package/dist-lib/sdk.mjs +1 -1
  171. package/dist-lib/skills.cjs +13 -4
  172. package/dist-lib/vite.cjs +1 -1
  173. package/package.json +1 -1
  174. package/src/disk-cleanup.ts +44 -0
  175. package/dist-cli/chunks/chunk-7TWD4P6J.js +0 -6
  176. package/dist-cli/chunks/chunk-N3LAMTGS.js +0 -6
  177. package/dist-cli/chunks/cli-version-6ZBD6GKP.js +0 -4
  178. package/dist-cli/chunks/control-667PAYX4.js +0 -4
  179. package/dist-cli/chunks/daemon-EIBOHZYQ.js +0 -4
  180. package/dist-cli/chunks/disk-cleanup-7HQXJFUX.js +0 -4
  181. package/dist-cli/chunks/drivers-5S6M5TJB.js +0 -4
  182. package/dist-cli/chunks/flow-6BZSWNHG.js +0 -4
  183. package/dist-cli/chunks/help-OGJBD4NP.js +0 -4
  184. package/dist-cli/chunks/inspect-MZVDGAN4.js +0 -4
  185. package/dist-cli/chunks/install-desktop-QB76DNZF.js +0 -4
  186. package/dist-cli/chunks/privacy-JZQCXHKN.js +0 -4
  187. package/dist-cli/chunks/reset-NYFUFZCG.js +0 -4
  188. package/dist-cli/chunks/resolve-target-SP22ZGFZ.js +0 -4
  189. package/dist-cli/chunks/runtime-WTS2QMXZ.js +0 -4
  190. package/dist-cli/chunks/setup-USPDJESI.js +0 -4
  191. package/dist-cli/chunks/store-ZYMQW2LN.js +0 -4
  192. package/dist-cli/chunks/telemetry-7CSLUUIW.js +0 -4
  193. package/dist-cli/chunks/upload-PLF2DPMS.js +0 -4
  194. package/dist-cli/chunks/welcome-4GGUV7FY.js +0 -5
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.371 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (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
4
  import{AsyncLocalStorage as n}from"node:async_hooks";var t=class extends Error{code;constructor(e){super(`rnx exited with code ${e}`),this.name="RnxExit",this.code=e}},s=new n;function i(r){if(r instanceof t)throw r}function c(r){throw new t(r)}export{t as a,i as b,c};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.371 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (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
4
  import{randomUUID as x}from"node:crypto";import n from"node:fs";import{homedir as I}from"node:os";import i from"node:path";var $="SOOTSIM_HOME",B="active",M="daemon.json",T="dev-bridges",J="config.json",L=3e4;function s(){let e=process.env[$];return e&&e.length>0?i.resolve(e):i.join(I(),".sootsim")}function U(){if(process.env.SOOTSIM_FORCE_DAEMON_INSTALL==="1")return!1;let e=process.env.SOOTSIM_DEV;if(e==="1"||e==="true")return!0;if(e==="0"||e==="false")return!1;let t=process.argv[1];if(!t)return!1;try{return n.realpathSync(t).includes(`${i.sep}packages${i.sep}sootsim${i.sep}`)}catch{return!1}}function V(){return process.env.SOOTSIM_FORCE_DAEMON_INSTALL==="1"?!1:process.env.IS_TAMAGUI_DEV==="1"}function ce(){return U()||V()}function v(){return i.join(s(),"runtimes")}function H(e){return i.join(v(),e)}function w(){return i.join(v(),B)}function A(){return i.join(s(),"electron")}function se(){return i.join(A(),"userData")}function ae(e){return i.join(A(),e)}function G(){return i.join(s(),"profiles")}function ue(){return i.join(s(),"camera-fixtures")}function K(){return i.join(s(),"daemon-app")}function X(){return i.join(K(),"SootSim Daemon.app")}function fe(){return i.join(X(),"Contents","MacOS","sootsim-daemon")}function q(){return i.join(s(),"cache")}function m(){return i.join(s(),M)}function y(){return i.join(s(),T)}function O(e){if(!Number.isInteger(e)||e<=0)throw new Error(`invalid development bridge port: ${e}`);return i.join(y(),`${e}.json`)}function b(){return i.join(s(),J)}function p(){try{let e=n.readFileSync(b(),"utf8"),t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return{}}}function P(e){h();let t=p(),r={...t,...e};e.settings&&typeof e.settings=="object"&&(r.settings={...t.settings&&typeof t.settings=="object"?t.settings:{},...e.settings});let c=`${b()}.tmp`;return n.writeFileSync(c,`${JSON.stringify(r,null,2)}
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.371 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (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 as F,b as h,e as f,f as W,g as B}from"./chunk-RYJTPZCX.js";import{b as l}from"./chunk-WCB5XPCH.js";import{b as P}from"./chunk-KL34TRNW.js";import{E as y,G as D,d as T,e as u,h as v,k as I,l as R,o as O,p as $,r as M,s as A,x as N,z as _}from"./chunk-BNS5LNEU.js";var o=class extends Error{constructor(e){super(e),this.name=new.target.name}},m=class extends o{},w=class extends o{status;constructor(e){super(`sim not ready: ${O(e)}`),this.status=e}},d=class extends o{outcome;constructor(e,t=null){super(e),this.outcome=t}},b=class extends o{},g=class extends o{result;constructor(e){let t=e.steps.find(n=>!n.ok),s=t?`${t.index} (${t.type})`:String(e.completed),r=t?.error??e.error;super(`perform failed at step ${s}${r?`: ${r}`:""}`),this.result=e}},x=class extends o{result;constructor(e){super(`reset (${e.strategy}) failed${e.error?`: ${e.error}`:""}`),this.result=e}};function U(i){return new Promise(e=>setTimeout(e,i))}function C(i){if(typeof i!="string"||!i.startsWith("data:image/png;base64,"))throw new o(`screenshot bridge returned a non-png payload: ${JSON.stringify(typeof i=="string"?i.slice(0,80):i)}`);let e=i.slice(22),t=atob(e),s=new Uint8Array(t.length);for(let r=0;r<t.length;r++)s[r]=t.charCodeAt(r);return{dataUrl:i,bytes:s}}var J=["bundle","demo","app","open","port","inspectOpen","appFonts","appSplash"];function K(i,e){let t=new URL(i);for(let a of J)t.searchParams.delete(a);let s=t.pathname.replace(/\/+$/,"")||"/",r=s==="/__soot"||s.startsWith("/__soot/")?"/__soot":"",n=String(e).trim();return/^\d+$/.test(n)?t.pathname=`${r}/rn/${n}`:(t.pathname=`${r}/rn`,t.searchParams.set("open",n)),t.toString()}function j(i){return typeof i=="object"&&"text"in i&&typeof i.text=="string"&&!("layout"in i)&&!("absolutePosition"in i)}var k=class{simId;bridge;closed=!1;constructor(e,t,s={}){this.bridge=e,this.simId=t}send(e,t){if(this.closed)return Promise.reject(new m("sim client is closed"));let s=e.simId===void 0?{...e,simId:this.simId}:e;return this.bridge.send(s,t)}listSims(){return this.bridge.listSims()}focusSim(e=this.simId){return this.bridge.focusSim(e)}closeSim(e=this.simId){return this.bridge.closeSim(e)}claim(e=this.simId,t){return this.bridge.claim(e,t)}close(){this.closed||(this.closed=!0,this.bridge.close())}async open(e,t={}){let r=(await this.listSims()).find(c=>c.id===this.simId);if(!r)throw new m(`sim ${this.simId} is no longer connected`);let n=r.url??r.origin;if(!n)throw new m(`sim ${this.simId} reported no URL to derive the shell from`);let a=K(n,e),p=new URL(a);await this.send({type:"evaluate",code:`window.location.href = ${JSON.stringify(a)}`});let L=Date.now()+(t.timeoutMs??3e4);for(;Date.now()<L;){await U(250);try{let{url:c}=await u(this),S=new URL(c);if(S.pathname===p.pathname&&S.searchParams.get("open")===p.searchParams.get("open"))return}catch{}}throw new m(`timed out waiting for sim ${this.simId} to load ${a}`)}openUrl(e){return P(this,e)}async waitReady(e={}){let t=await $(this,e.timeoutMs??2e4,{onProgress:e.onProgress});if(!t.ready)throw new w(t);return t}settle(e={}){return F({bridge:this,maxMs:e.maxMs??3e3,strict:e.strict})}async find(e){return(await this.findAll(e))[0]??null}async findAll(e){let t={testId:e.testId??null,role:e.role??null,type:e.type??null,text:e.text??null,pressable:e.pressable},s=await R(this,t);if(!s)throw new o("find() needs at least one of testId, text, role, type, or pressable");let{result:r}=s;return Array.isArray(r)?r:r?[r]:[]}async tree(e=5){let{tree:t}=await T(this,e);return Array.isArray(t)?t:[]}resolve(e){return this.send({type:"resolve",selector:e})}describe(e={}){return v(this,{describe:!0,verbose:e.verbose??!1,filter:e.filter??"",compact:!e.verbose,hideXy:!1,fullText:!0})}accessibilityTree(){return I(this)}async logs(e={}){return _(await N(this),e)}errors(e=20){return M(this,e)}warnings(e=20){return A(this,e)}keyboard(){return y(this)}shellState(e=0){return D(this,e)}async url(){let{url:e}=await u(this);return e}async screenshot(e={}){let t=await this.send({type:"screenshot",...e.layers?{layers:e.layers}:{},...e.crop?{crop:e.crop}:{}});return C(t)}async tap(e){if(typeof e=="string")return this.throwUnlessTapped(await B(this,e),e);if("testId"in e&&typeof e.testId=="string")return this.throwUnlessTapped(await f(this,e.testId),e.testId);if(j(e)){let{text:r,...n}=e;return this.throwUnlessTapped(await W(this,r,n),r)}if("testID"in e&&typeof e.testID=="string")return this.throwUnlessTapped(await f(this,e.testID),e.testID);let t=this.coordsForTapTarget(e),s=await this.send({type:"tap",x:t.x,y:t.y});if(!h(s))throw new d(`tap at ${t.x},${t.y} missed: ${JSON.stringify(s)}`)}async longPress(e,t={}){let s=await this.resolveCoords(e);if(!(await this.send({type:"longPress",x:s.x,y:s.y,durationMs:t.durationMs??600},{timeoutMs:(t.durationMs??600)+15e3}))?.ok)throw new d(`longPress at ${s.x},${s.y} missed`)}async type(e){await this.requireVisibleKeyboard("type"),await this.send({type:"keyboard",action:"type",text:e})}async press(e){await this.requireVisibleKeyboard("press"),await this.send({type:"keyboard",action:"press",text:e})}async dismissKeyboard(){await this.send({type:"keyboard",action:"dismiss"})}async perform(e,t){let s=[];for(let a of e){if(a.type!=="tapText"){s.push(a);continue}let p=await l(this,{mode:"text",value:a.text});if(!p)throw new d(`perform tapText: no node with text ${JSON.stringify(a.text)}`);s.push({type:"tap",x:p.x,y:p.y,target:{testID:p.testID??void 0,text:p.text??void 0,type:p.type??void 0}})}let r=t?.timeoutMs??3e4,n=await this.send({type:"perform",steps:s,...t?{performOptions:t}:{}},{timeoutMs:r+5e3});if(!n?.ok)throw new g(n);return n}state(e){return this.send({type:"state",...e?{stateOptions:e}:{}})}async reset(e){let t=await this.send({type:"reset",...e?{resetOptions:e}:{}},{timeoutMs:6e4});if(!t?.ok)throw new x(t);return t}throwUnlessTapped(e,t){if(!e.failure&&h(e.result))return;let s=e.failure==="not-found"?"no matching node":e.failure==="missed"?e.result?.reason??"press missed":e.payload?.ambiguous?`ambiguous: ${e.payload.total} matches`:e.result?.reason??e.payload?.error??"tap failed";throw new d(`tap ${JSON.stringify(t)} failed: ${s}`,e)}coordsForTapTarget(e){if(typeof e=="object"&&"x"in e&&"y"in e&&typeof e.x=="number"&&typeof e.y=="number")return{x:e.x,y:e.y};if(typeof e=="object"&&"absolutePosition"in e&&e.absolutePosition&&e.layout)return{x:e.absolutePosition.x+(e.layout.width??0)/2,y:e.absolutePosition.y+(e.layout.height??0)/2};throw new o("tap target needs coordinates, a testId, text, or a node from find()")}async resolveCoords(e){if(typeof e=="string"){let t=await l(this,{mode:"testid",value:e})??await l(this,{mode:"text",value:e});if(!t)throw new d(`no node matching ${JSON.stringify(e)}`);return t}if("testId"in e&&typeof e.testId=="string"){let t=await l(this,{mode:"testid",value:e.testId});if(!t)throw new d(`no node with testID ${JSON.stringify(e.testId)}`);return t}if("text"in e&&typeof e.text=="string"&&!("layout"in e)){let t=await l(this,{mode:"text",value:e.text});if(!t)throw new d(`no node with text ${JSON.stringify(e.text)}`);return t}return this.coordsForTapTarget(e)}async requireVisibleKeyboard(e){let t=Date.now()+1500;for(;;){let s=await y(this);if(!("error"in s)&&s.visible)return;if(Date.now()>=t)throw new b(`${e} requires the iOS keyboard to be visible \u2014 focus an input first (tap a TextInput)`);await U(150)}}};export{o as a,m as b,w as c,d,b as e,g as f,x as g,K as h,k as i};
4
+ import{a as F,b as h,e as f,f as W,g as B}from"./chunk-EG4HCEKS.js";import{b as l}from"./chunk-7T3K66TV.js";import{b as P}from"./chunk-BHNWFDNX.js";import{E as y,G as D,d as T,e as u,h as v,k as I,l as R,o as O,p as $,r as M,s as A,x as N,z as _}from"./chunk-POCPBDTJ.js";var o=class extends Error{constructor(e){super(e),this.name=new.target.name}},m=class extends o{},w=class extends o{status;constructor(e){super(`sim not ready: ${O(e)}`),this.status=e}},d=class extends o{outcome;constructor(e,t=null){super(e),this.outcome=t}},b=class extends o{},g=class extends o{result;constructor(e){let t=e.steps.find(n=>!n.ok),s=t?`${t.index} (${t.type})`:String(e.completed),r=t?.error??e.error;super(`perform failed at step ${s}${r?`: ${r}`:""}`),this.result=e}},x=class extends o{result;constructor(e){super(`reset (${e.strategy}) failed${e.error?`: ${e.error}`:""}`),this.result=e}};function U(i){return new Promise(e=>setTimeout(e,i))}function C(i){if(typeof i!="string"||!i.startsWith("data:image/png;base64,"))throw new o(`screenshot bridge returned a non-png payload: ${JSON.stringify(typeof i=="string"?i.slice(0,80):i)}`);let e=i.slice(22),t=atob(e),s=new Uint8Array(t.length);for(let r=0;r<t.length;r++)s[r]=t.charCodeAt(r);return{dataUrl:i,bytes:s}}var J=["bundle","demo","app","open","port","inspectOpen","appFonts","appSplash"];function K(i,e){let t=new URL(i);for(let a of J)t.searchParams.delete(a);let s=t.pathname.replace(/\/+$/,"")||"/",r=s==="/__soot"||s.startsWith("/__soot/")?"/__soot":"",n=String(e).trim();return/^\d+$/.test(n)?t.pathname=`${r}/rn/${n}`:(t.pathname=`${r}/rn`,t.searchParams.set("open",n)),t.toString()}function j(i){return typeof i=="object"&&"text"in i&&typeof i.text=="string"&&!("layout"in i)&&!("absolutePosition"in i)}var k=class{simId;bridge;closed=!1;constructor(e,t,s={}){this.bridge=e,this.simId=t}send(e,t){if(this.closed)return Promise.reject(new m("sim client is closed"));let s=e.simId===void 0?{...e,simId:this.simId}:e;return this.bridge.send(s,t)}listSims(){return this.bridge.listSims()}focusSim(e=this.simId){return this.bridge.focusSim(e)}closeSim(e=this.simId){return this.bridge.closeSim(e)}claim(e=this.simId,t){return this.bridge.claim(e,t)}close(){this.closed||(this.closed=!0,this.bridge.close())}async open(e,t={}){let r=(await this.listSims()).find(c=>c.id===this.simId);if(!r)throw new m(`sim ${this.simId} is no longer connected`);let n=r.url??r.origin;if(!n)throw new m(`sim ${this.simId} reported no URL to derive the shell from`);let a=K(n,e),p=new URL(a);await this.send({type:"evaluate",code:`window.location.href = ${JSON.stringify(a)}`});let L=Date.now()+(t.timeoutMs??3e4);for(;Date.now()<L;){await U(250);try{let{url:c}=await u(this),S=new URL(c);if(S.pathname===p.pathname&&S.searchParams.get("open")===p.searchParams.get("open"))return}catch{}}throw new m(`timed out waiting for sim ${this.simId} to load ${a}`)}openUrl(e){return P(this,e)}async waitReady(e={}){let t=await $(this,e.timeoutMs??2e4,{onProgress:e.onProgress});if(!t.ready)throw new w(t);return t}settle(e={}){return F({bridge:this,maxMs:e.maxMs??3e3,strict:e.strict})}async find(e){return(await this.findAll(e))[0]??null}async findAll(e){let t={testId:e.testId??null,role:e.role??null,type:e.type??null,text:e.text??null,pressable:e.pressable},s=await R(this,t);if(!s)throw new o("find() needs at least one of testId, text, role, type, or pressable");let{result:r}=s;return Array.isArray(r)?r:r?[r]:[]}async tree(e=5){let{tree:t}=await T(this,e);return Array.isArray(t)?t:[]}resolve(e){return this.send({type:"resolve",selector:e})}describe(e={}){return v(this,{describe:!0,verbose:e.verbose??!1,filter:e.filter??"",compact:!e.verbose,hideXy:!1,fullText:!0})}accessibilityTree(){return I(this)}async logs(e={}){return _(await N(this),e)}errors(e=20){return M(this,e)}warnings(e=20){return A(this,e)}keyboard(){return y(this)}shellState(e=0){return D(this,e)}async url(){let{url:e}=await u(this);return e}async screenshot(e={}){let t=await this.send({type:"screenshot",...e.layers?{layers:e.layers}:{},...e.crop?{crop:e.crop}:{}});return C(t)}async tap(e){if(typeof e=="string")return this.throwUnlessTapped(await B(this,e),e);if("testId"in e&&typeof e.testId=="string")return this.throwUnlessTapped(await f(this,e.testId),e.testId);if(j(e)){let{text:r,...n}=e;return this.throwUnlessTapped(await W(this,r,n),r)}if("testID"in e&&typeof e.testID=="string")return this.throwUnlessTapped(await f(this,e.testID),e.testID);let t=this.coordsForTapTarget(e),s=await this.send({type:"tap",x:t.x,y:t.y});if(!h(s))throw new d(`tap at ${t.x},${t.y} missed: ${JSON.stringify(s)}`)}async longPress(e,t={}){let s=await this.resolveCoords(e);if(!(await this.send({type:"longPress",x:s.x,y:s.y,durationMs:t.durationMs??600},{timeoutMs:(t.durationMs??600)+15e3}))?.ok)throw new d(`longPress at ${s.x},${s.y} missed`)}async type(e){await this.requireVisibleKeyboard("type"),await this.send({type:"keyboard",action:"type",text:e})}async press(e){await this.requireVisibleKeyboard("press"),await this.send({type:"keyboard",action:"press",text:e})}async dismissKeyboard(){await this.send({type:"keyboard",action:"dismiss"})}async perform(e,t){let s=[];for(let a of e){if(a.type!=="tapText"){s.push(a);continue}let p=await l(this,{mode:"text",value:a.text});if(!p)throw new d(`perform tapText: no node with text ${JSON.stringify(a.text)}`);s.push({type:"tap",x:p.x,y:p.y,target:{testID:p.testID??void 0,text:p.text??void 0,type:p.type??void 0}})}let r=t?.timeoutMs??3e4,n=await this.send({type:"perform",steps:s,...t?{performOptions:t}:{}},{timeoutMs:r+5e3});if(!n?.ok)throw new g(n);return n}state(e){return this.send({type:"state",...e?{stateOptions:e}:{}})}async reset(e){let t=await this.send({type:"reset",...e?{resetOptions:e}:{}},{timeoutMs:6e4});if(!t?.ok)throw new x(t);return t}throwUnlessTapped(e,t){if(!e.failure&&h(e.result))return;let s=e.failure==="not-found"?"no matching node":e.failure==="missed"?e.result?.reason??"press missed":e.payload?.ambiguous?`ambiguous: ${e.payload.total} matches`:e.result?.reason??e.payload?.error??"tap failed";throw new d(`tap ${JSON.stringify(t)} failed: ${s}`,e)}coordsForTapTarget(e){if(typeof e=="object"&&"x"in e&&"y"in e&&typeof e.x=="number"&&typeof e.y=="number")return{x:e.x,y:e.y};if(typeof e=="object"&&"absolutePosition"in e&&e.absolutePosition&&e.layout)return{x:e.absolutePosition.x+(e.layout.width??0)/2,y:e.absolutePosition.y+(e.layout.height??0)/2};throw new o("tap target needs coordinates, a testId, text, or a node from find()")}async resolveCoords(e){if(typeof e=="string"){let t=await l(this,{mode:"testid",value:e})??await l(this,{mode:"text",value:e});if(!t)throw new d(`no node matching ${JSON.stringify(e)}`);return t}if("testId"in e&&typeof e.testId=="string"){let t=await l(this,{mode:"testid",value:e.testId});if(!t)throw new d(`no node with testID ${JSON.stringify(e.testId)}`);return t}if("text"in e&&typeof e.text=="string"&&!("layout"in e)){let t=await l(this,{mode:"text",value:e.text});if(!t)throw new d(`no node with text ${JSON.stringify(e.text)}`);return t}return this.coordsForTapTarget(e)}async requireVisibleKeyboard(e){let t=Date.now()+1500;for(;;){let s=await y(this);if(!("error"in s)&&s.visible)return;if(Date.now()>=t)throw new b(`${e} requires the iOS keyboard to be visible \u2014 focus an input first (tap a TextInput)`);await U(150)}}};export{o as a,m as b,w as c,d,b as e,g as f,x as g,K as h,k as i};
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.371 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (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 as nt}from"./chunk-OWDJQWJ7.js";import{a as ot}from"./chunk-JKRMBNPO.js";import{a as Se,b as ve,c as et,d as xe,e as Te,f as tt,g as rt}from"./chunk-MW4E5EED.js";import{a as Qe}from"./chunk-PTWMX4AA.js";import{e as it}from"./chunk-2QW3JH6T.js";import{a as re}from"./chunk-RYJTPZCX.js";import{f as qe,g as Ye,o as ze,q as Xe,u as Ze}from"./chunk-LFANRLWK.js";import{l as je}from"./chunk-AVIH3TAZ.js";import{a as Ke}from"./chunk-SHLJYXIN.js";import{h as Ge,m as Je}from"./chunk-2W4YBCPX.js";import{G as ye,o as We,p as Ve}from"./chunk-BNS5LNEU.js";import{b as Ue}from"./chunk-HV3WOWQM.js";import{a as Le,b as Ne,d as Ce}from"./chunk-AGZZWLEL.js";import{g as me,h as ge,t as we,u as be,v as He}from"./chunk-ESWSXF55.js";import{c as E}from"./chunk-ERBGQEJ5.js";import{b as kt,d as $t}from"./chunk-OF5OBB67.js";var dt=kt((fr,lt)=>{"use strict";var J=Object.freeze({channelThreshold:24,contentBandInsetFraction:.08,minimumContentPercent:.005}),Mt=3;function st(i,e){return!i||!e||i.length!==e.length?!1:i.equals(e)}function at(i){if(!i||typeof i!="object"||Array.isArray(i))throw new Error("proof content measurement requires an input object");let{data:e,width:t,height:r}=i;if(!e||typeof e.length!="number"||!Number.isInteger(t)||!Number.isInteger(r)||t<=0||r<=0||e.length!==t*r*4)throw new Error("proof content measurement needs RGBA pixels and dimensions");let n=Math.floor(r*J.contentBandInsetFraction),o=Math.ceil(r*(1-J.contentBandInsetFraction)),s=new Uint32Array(1024*32),a=0;for(let g=n;g<o;g++)for(let f=0;f<t;f++){let v=(g*t+f)*4,P=e[v]>>3<<10|e[v+1]>>3<<5|e[v+2]>>3;s[P]++,a++}let l=0;for(let g=1;g<s.length;g++)s[g]>s[l]&&(l=g);let u={red:((l>>10&31)<<3)+4,green:((l>>5&31)<<3)+4,blue:((l&31)<<3)+4},h=0;for(let g=n;g<o;g++)for(let f=0;f<t;f++){let v=(g*t+f)*4;Math.max(Math.abs(e[v]-u.red),Math.abs(e[v+1]-u.green),Math.abs(e[v+2]-u.blue))>=J.channelThreshold&&h++}let m=h/a*100;return{contentPercent:m,contentPixels:h,dominant:u,passedMinimum:m>=J.minimumContentPercent,totalPixels:a}}function Rt(i,e){if(!e)return{decision:"continue",content:null};let t=at(e);return t.passedMinimum?i&&st(i,e.data)?{decision:"identical",content:t}:{decision:"changed",content:t}:{decision:"insufficient-content",content:t}}lt.exports={PROOF_CONTENT_DEFINITION:J,REQUIRED_IDENTICAL_PROOF_FRAMES:Mt,framesIdentical:st,measureProofFrameContent:at,settleDecision:Rt}});import*as $ from"fs";import{createHash as tr,randomUUID as rr}from"node:crypto";import{tmpdir as Z}from"os";import*as b from"path";import*as I from"fs";import*as S from"path";var X=$t(dt(),1);var Bt="inset 0 0 0 0.5px #000, inset 0 0 0 2px #757575, inset 0 0 0 5px #212121",ut=1;function Lt(i){let e=Ce(i),t=e.scale,r=e.statusBarHeight>0&&!e.dynamicIsland&&e.homeIndicatorHeight===0&&e.cornerRadius===0,n=e.width,o=e.height,s=Le(e),a=r?e.width+58:s.frameWidth,l=r?e.height+111+111:s.frameHeight,u=9.5,h=ut,m=a+u*2,g=l+ut*2,f=u+(r?29:s.screenLeft),v=r?111:s.screenTop,P=r?52:s.frameRadius,U=[{side:e.hardwareButtons.lock.side,top:e.hardwareButtons.lock.top,height:e.hardwareButtons.lock.height,width:e.hardwareButtons.width},{side:e.hardwareButtons.ringToggle.side,top:e.hardwareButtons.ringToggle.top,height:e.hardwareButtons.ringToggle.height,width:e.hardwareButtons.width},{side:e.hardwareButtons.volumeUp.side,top:e.hardwareButtons.volumeUp.top,height:e.hardwareButtons.volumeUp.height,width:e.hardwareButtons.width},{side:e.hardwareButtons.volumeDown.side,top:e.hardwareButtons.volumeDown.top,height:e.hardwareButtons.volumeDown.height,width:e.hardwareButtons.width}];return{model:i,renderScale:t,outerWidth:Math.round(m*t),outerHeight:Math.round(g*t),logicalOuterWidth:m,logicalOuterHeight:g,logicalFrameWidth:a,logicalFrameHeight:l,logicalFrameLeft:u,logicalFrameTop:h,logicalScreenWidth:n,logicalScreenHeight:o,logicalScreenLeft:f,logicalScreenTop:v,logicalScreenRadius:r?0:s.screenRadius,logicalFrameRadius:P,frameBackground:r?"linear-gradient(180deg, #1b1c20 0%, #0f1012 42%, #050608 100%)":"#000000",frameOutline:r?"0 0 0 1px #1f2125":"0 0 0 1px #333",metallicRingShadow:r?null:Bt,buttons:U,legacyHomeButton:r?{top:111+e.height+47/2,left:e.width/2-64/2+29,size:64,ring:1.5}:null,showHomeIndicator:e.homeIndicatorHeight>0,logicalHomeIndicatorStripHeight:e.homeIndicatorHeight}}function Nt(i){let e=i.side==="right",t=e?"inset(-3px -3px -3px 0)":"inset(-3px 0 -3px -3px)";return`
4
+ import{a as nt}from"./chunk-U55C6SUH.js";import{a as ot}from"./chunk-CVMYEPWT.js";import{a as Se,b as ve,c as et,d as xe,e as Te,f as tt,g as rt}from"./chunk-O6VJVWEA.js";import{a as Qe}from"./chunk-UMTP3PDW.js";import{e as it}from"./chunk-Y47FOLM5.js";import{a as re}from"./chunk-EG4HCEKS.js";import{f as qe,g as Ye,o as ze,q as Xe,u as Ze}from"./chunk-LEX3XST4.js";import{l as je}from"./chunk-ZMXWHNCZ.js";import{a as Ke}from"./chunk-YPJJDEFE.js";import{h as Ge,m as Je}from"./chunk-GVIPHFFH.js";import{G as ye,o as We,p as Ve}from"./chunk-POCPBDTJ.js";import{b as Ue}from"./chunk-XHSYJMBV.js";import{a as Le,b as Ne,d as Ce}from"./chunk-MTWJ3CNR.js";import{g as me,h as ge,t as we,u as be,v as He}from"./chunk-VBAUP3CK.js";import{c as E}from"./chunk-2272Y5HN.js";import{b as kt,d as $t}from"./chunk-O7NKNTJ6.js";var dt=kt((fr,lt)=>{"use strict";var J=Object.freeze({channelThreshold:24,contentBandInsetFraction:.08,minimumContentPercent:.005}),Mt=3;function st(i,e){return!i||!e||i.length!==e.length?!1:i.equals(e)}function at(i){if(!i||typeof i!="object"||Array.isArray(i))throw new Error("proof content measurement requires an input object");let{data:e,width:t,height:r}=i;if(!e||typeof e.length!="number"||!Number.isInteger(t)||!Number.isInteger(r)||t<=0||r<=0||e.length!==t*r*4)throw new Error("proof content measurement needs RGBA pixels and dimensions");let n=Math.floor(r*J.contentBandInsetFraction),o=Math.ceil(r*(1-J.contentBandInsetFraction)),s=new Uint32Array(1024*32),a=0;for(let g=n;g<o;g++)for(let f=0;f<t;f++){let v=(g*t+f)*4,P=e[v]>>3<<10|e[v+1]>>3<<5|e[v+2]>>3;s[P]++,a++}let l=0;for(let g=1;g<s.length;g++)s[g]>s[l]&&(l=g);let u={red:((l>>10&31)<<3)+4,green:((l>>5&31)<<3)+4,blue:((l&31)<<3)+4},h=0;for(let g=n;g<o;g++)for(let f=0;f<t;f++){let v=(g*t+f)*4;Math.max(Math.abs(e[v]-u.red),Math.abs(e[v+1]-u.green),Math.abs(e[v+2]-u.blue))>=J.channelThreshold&&h++}let m=h/a*100;return{contentPercent:m,contentPixels:h,dominant:u,passedMinimum:m>=J.minimumContentPercent,totalPixels:a}}function Rt(i,e){if(!e)return{decision:"continue",content:null};let t=at(e);return t.passedMinimum?i&&st(i,e.data)?{decision:"identical",content:t}:{decision:"changed",content:t}:{decision:"insufficient-content",content:t}}lt.exports={PROOF_CONTENT_DEFINITION:J,REQUIRED_IDENTICAL_PROOF_FRAMES:Mt,framesIdentical:st,measureProofFrameContent:at,settleDecision:Rt}});import*as $ from"fs";import{createHash as tr,randomUUID as rr}from"node:crypto";import{tmpdir as Z}from"os";import*as b from"path";import*as I from"fs";import*as S from"path";var X=$t(dt(),1);var Bt="inset 0 0 0 0.5px #000, inset 0 0 0 2px #757575, inset 0 0 0 5px #212121",ut=1;function Lt(i){let e=Ce(i),t=e.scale,r=e.statusBarHeight>0&&!e.dynamicIsland&&e.homeIndicatorHeight===0&&e.cornerRadius===0,n=e.width,o=e.height,s=Le(e),a=r?e.width+58:s.frameWidth,l=r?e.height+111+111:s.frameHeight,u=9.5,h=ut,m=a+u*2,g=l+ut*2,f=u+(r?29:s.screenLeft),v=r?111:s.screenTop,P=r?52:s.frameRadius,U=[{side:e.hardwareButtons.lock.side,top:e.hardwareButtons.lock.top,height:e.hardwareButtons.lock.height,width:e.hardwareButtons.width},{side:e.hardwareButtons.ringToggle.side,top:e.hardwareButtons.ringToggle.top,height:e.hardwareButtons.ringToggle.height,width:e.hardwareButtons.width},{side:e.hardwareButtons.volumeUp.side,top:e.hardwareButtons.volumeUp.top,height:e.hardwareButtons.volumeUp.height,width:e.hardwareButtons.width},{side:e.hardwareButtons.volumeDown.side,top:e.hardwareButtons.volumeDown.top,height:e.hardwareButtons.volumeDown.height,width:e.hardwareButtons.width}];return{model:i,renderScale:t,outerWidth:Math.round(m*t),outerHeight:Math.round(g*t),logicalOuterWidth:m,logicalOuterHeight:g,logicalFrameWidth:a,logicalFrameHeight:l,logicalFrameLeft:u,logicalFrameTop:h,logicalScreenWidth:n,logicalScreenHeight:o,logicalScreenLeft:f,logicalScreenTop:v,logicalScreenRadius:r?0:s.screenRadius,logicalFrameRadius:P,frameBackground:r?"linear-gradient(180deg, #1b1c20 0%, #0f1012 42%, #050608 100%)":"#000000",frameOutline:r?"0 0 0 1px #1f2125":"0 0 0 1px #333",metallicRingShadow:r?null:Bt,buttons:U,legacyHomeButton:r?{top:111+e.height+47/2,left:e.width/2-64/2+29,size:64,ring:1.5}:null,showHomeIndicator:e.homeIndicatorHeight>0,logicalHomeIndicatorStripHeight:e.homeIndicatorHeight}}function Nt(i){let e=i.side==="right",t=e?"inset(-3px -3px -3px 0)":"inset(-3px 0 -3px -3px)";return`
5
5
  <div
6
6
  aria-hidden="true"
7
7
  style="
@@ -527,7 +527,7 @@ flow extension:
527
527
  })()`}),console.log(` captured ${O.length} partial replay events`)}catch(d){console.warn(` event recorder stop failed: ${d?.message||String(d)}`)}console.error(`
528
528
  x failed: ${p.message}
529
529
  `),R&&(console.log(" partial profile:"),gt(R)),A&&console.log(` partial video: ${A}`);try{let d=c.lastFailedStep,y=d?`step-${String(d.index+1).padStart(2,"0")}-${d.kind}`:"unstaged",k=b.join(a,y);await c.captureFailureBundle(k,{error:p,stepIndex:d?.index,stepKind:d?.kind,stepTarget:d?.target}),fe=k,console.log(` failure bundle: ${k}`),console.log(" (contents: screenshot.png, describe.json, a11y.txt, tree.txt, console.json, error.json)")}catch(d){try{let y=b.join(a,"error.png");await c.captureScreenshot(y),console.log(` error screenshot: ${y}`)}catch{}console.log(` (failure bundle capture failed: ${d instanceof Error?d.message:String(d)})`)}await Je(F,{errorsCommand:`sootsim get errors 5${c.simId?` --sim ${c.simId}`:""}`,warningsCommand:`sootsim get warnings 5${c.simId?` --sim ${c.simId}`:""}`,requestsCommand:`sootsim get requests 5${c.simId?` --sim ${c.simId}`:""}`}),V=1}if(await c.liveStatus?.end(V===0?"passed":"failed"),f&&(V===0||A||O))try{let p=await sr(O??[]),d=["--origin",v,"--events",p];P&&d.push("--public-origin",P),A&&d.push("--video",A),W&&d.push("--screenshot",W),A&&N&&Number.isFinite(N)&&(d.push("--video-duration-ms",String(Math.round(N))),d.push("--recorded-duration-ms",String(Math.round(N))));let y=c.getLastRecordingStartedAtMs();y&&Number.isFinite(y)&&d.push("--recording-started-at-ms",String(Math.round(y))),x.wsPort&&d.push("--port",String(x.wsPort)),c.simId&&d.push("--sim",c.simId),U&&d.push("--open"),ke&&d.push("--owner",ke),$e&&d.push("--repo",$e),d.push("--run-scope",bt),j&&d.push("--billing-kind",j),console.log(`
530
- preparing preview upload\u2026`);let k=c.getFlowTraceSteps();k.length>0&&d.push("--timeline-events",await ar(k));let G=await lr(k,y);G&&d.push("--snapshot-manifest",G),fe&&d.push("--failure-bundle",fe);let _=c.getLastRecordingFrameStats();_&&d.push("--trace-frame-stats",await dr(_));let{runUpload:Pt}=await import("./upload-PLF2DPMS.js");Ae=await Pt(d,{})}catch(p){console.error(` preview upload failed: ${p?.message||p}`),V=1}return Pe=c.getFlowTraceSteps(),F.close(),pe?(c.simId&&he.add(c.simId),await or(x.wsPort,x.commandTimeoutMs,[...he])):c.simId&&c.simId!==ee&&ge(c.simId),V}async function or(i,e,t){let r=[...new Set(t.filter(Boolean))];if(r.length===0)return;let n=be(i,{commandTimeoutMs:e});try{let o=await n.listSims(),s=r.filter(l=>o.some(u=>u.id===l&&u.readyState==="open"));if(s.length===0)return;let a=await Ze(n,i,e,s);await ze(o,s),a.closed.length>0&&console.log(` closed flow sim(s): ${a.closed.join(", ")}`),a.remaining.length>0&&console.warn(` warn: flow sim(s) still connected after close: ${a.remaining.join(", ")}`)}catch(o){console.warn(` warn: failed to close flow sim(s): ${o instanceof Error?o.message:String(o)}`)}finally{n.close()}}async function sr(i){let{gzipSync:e}=await import("zlib"),t=i.map(o=>JSON.stringify(o)).join(`
530
+ preparing preview upload\u2026`);let k=c.getFlowTraceSteps();k.length>0&&d.push("--timeline-events",await ar(k));let G=await lr(k,y);G&&d.push("--snapshot-manifest",G),fe&&d.push("--failure-bundle",fe);let _=c.getLastRecordingFrameStats();_&&d.push("--trace-frame-stats",await dr(_));let{runUpload:Pt}=await import("./upload-R4XZLOLQ.js");Ae=await Pt(d,{})}catch(p){console.error(` preview upload failed: ${p?.message||p}`),V=1}return Pe=c.getFlowTraceSteps(),F.close(),pe?(c.simId&&he.add(c.simId),await or(x.wsPort,x.commandTimeoutMs,[...he])):c.simId&&c.simId!==ee&&ge(c.simId),V}async function or(i,e,t){let r=[...new Set(t.filter(Boolean))];if(r.length===0)return;let n=be(i,{commandTimeoutMs:e});try{let o=await n.listSims(),s=r.filter(l=>o.some(u=>u.id===l&&u.readyState==="open"));if(s.length===0)return;let a=await Ze(n,i,e,s);await ze(o,s),a.closed.length>0&&console.log(` closed flow sim(s): ${a.closed.join(", ")}`),a.remaining.length>0&&console.warn(` warn: flow sim(s) still connected after close: ${a.remaining.join(", ")}`)}catch(o){console.warn(` warn: failed to close flow sim(s): ${o instanceof Error?o.message:String(o)}`)}finally{n.close()}}async function sr(i){let{gzipSync:e}=await import("zlib"),t=i.map(o=>JSON.stringify(o)).join(`
531
531
  `)+(i.length?`
532
532
  `:""),r=e(Buffer.from(t,"utf8")),n=b.join(Z(),`sootsim-events-${Date.now()}.jsonl.gz`);return $.writeFileSync(n,r),console.log(` events: ${i.length} written to ${n} (${r.length} bytes gz)`),n}async function ar(i){let{gzipSync:e}=await import("zlib"),t=i.map((s,a)=>({schemaVersion:1,t:s.endedAtMs,seq:1e6+a,context:"host",kind:"flow-step",id:`flow-step-${s.stepIndex}`,data:{stepIndex:s.stepIndex,stepNumber:s.stepIndex+1,stepName:s.stepName,...s.targetLabel?{targetLabel:s.targetLabel}:{},status:s.status,durationMs:s.durationMs,startedAtMs:s.startedAtMs,endedAtMs:s.endedAtMs,...s.error?{error:s.error}:{}}})),r=t.map(s=>JSON.stringify(s)).join(`
533
533
  `)+`
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.371 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (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
4
  var a=["Cache","Code Cache","DawnCache","DawnGraphiteCache","DawnWebGPUCache","GPUCache","GrShaderCache","ShaderCache"],r=new Set(a);function s(e){return r.has(e)}export{a,s as b};
@@ -1,5 +1,5 @@
1
- /*! rnx v0.1.371 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (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{e as f}from"./chunk-ESWSXF55.js";import{existsSync as m,mkdirSync as g,readFileSync as h,writeFileSync as S,rmSync as F}from"fs";import{tmpdir as y}from"os";import{dirname as b,join as p}from"path";var w=new Map;function o(e,n){w.set(e,n)}var s=1;function a(){return p(y(),`sootsim-cli-hints-${f()}.json`)}function d(){return p(y(),"sootsim-cli-hints-global.json")}function u(e){if(!m(e))return{version:s,shown:{}};try{let n=JSON.parse(h(e,"utf8"));return n?.version!==s||!n?.shown?{version:s,shown:{}}:n}catch{return{version:s,shown:{}}}}function l(e,n){try{g(b(e),{recursive:!0}),S(e,JSON.stringify(n)+`
4
+ import{e as f}from"./chunk-VBAUP3CK.js";import{existsSync as m,mkdirSync as g,readFileSync as h,writeFileSync as S,rmSync as F}from"fs";import{tmpdir as y}from"os";import{dirname as b,join as p}from"path";var w=new Map;function o(e,n){w.set(e,n)}var s=1;function a(){return p(y(),`sootsim-cli-hints-${f()}.json`)}function d(){return p(y(),"sootsim-cli-hints-global.json")}function u(e){if(!m(e))return{version:s,shown:{}};try{let n=JSON.parse(h(e,"utf8"));return n?.version!==s||!n?.shown?{version:s,shown:{}}:n}catch{return{version:s,shown:{}}}}function l(e,n){try{g(b(e),{recursive:!0}),S(e,JSON.stringify(n)+`
5
5
  `)}catch{}}function v(){let e=(process.env.SOOTSIM_HINTS||"").toLowerCase();return e==="off"||e==="0"||e==="false"?"off":e==="always"||e==="verbose"?"always":"normal"}function x(e,n){let i=v();if(i==="off")return!1;if(i==="always"||n==="always")return!0;let t=Date.now();if(n==="once-per-identity"){let r=u(a());return r.shown[e]?!1:(r.shown[e]=t,l(a(),r),!0)}if(n==="once-ever"){let r=u(d());return r.shown[e]?!1:(r.shown[e]=t,l(d(),r),!0)}if(typeof n=="object"&&"cooldownMs"in n){let r=u(a()),c=r.shown[e]??0;return t-c<n.cooldownMs?!1:(r.shown[e]=t,l(a(),r),!0)}return!0}function A(e,...n){let i=w.get(e);if(!i)return process.env.SOOTSIM_HINTS_DEBUG&&console.error(` [hints] no hint registered for id "${e}"`),!1;if(!x(e,i.frequency))return!1;let t=i.render(...n);if(t==null)return!1;let r=Array.isArray(t)?t:[t];for(let c of r)console.error(` hint: ${c}`);return!0}o("app-still-loading",{frequency:{cooldownMs:6e4},render:e=>`app may still be loading (${e} nodes). run \`rnx wait ready\` first.`});o("wait-selector-for-missing-testid",{frequency:"once-per-identity",render:e=>`rnx wait selector ${e}`});o("prefer-cli-over-eval",{frequency:"once-per-identity",render:e=>e.length?["try the CLI shortcut instead:",...e.map(n=>` ${n}`)]:null});o("describe-use-filters",{frequency:"once-per-identity",render:()=>["describe output is long. narrow it with:"," rnx describe --only '*Bottom Sheet*'"," rnx describe --testid-like 'swap-*'"," rnx describe --subtree <testID>"]});o("describe-filter-context",{frequency:"once-per-identity",render:()=>["filtered describe is search output, not current-route proof.","run `rnx describe` without filters after navigation; clipped nodes are marked `(clipped:...)`."]});o("subtree-root-not-found",{frequency:"always",render:e=>`no node with testID/id "${e}" \u2014 try \`rnx find --testid ${e}\` to discover available ids.`});o("clean-uninstall",{frequency:"once-ever",render:()=>["to remove the background daemon and all ~/.sootsim data, run `rnx daemon uninstall`.","the optional desktop app and its macOS preference plist are separate from the daemon."]});export{A as a};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.371 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (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 P,m,n as S,o as R,p as _,q as v}from"./chunk-AGZZWLEL.js";var k="sootsim:settings",d=["productAnalytics","crashReports","colorScheme","reduceMotion","boldText","fontSize","largerAccessibilitySizes","a11yMode","a11yDepth","screenshotCanvas","screenshotBackground","screenshotText","screenshotPose","screenshotDynamicSize","alwaysShowLiveWebViews","showFrame","showMenuBar","showRail","solidWindow","ambientGlow","agentProvider"];function p(){if(typeof window>"u")return null;let e=window.sootsimElectron;return e&&typeof e=="object"?e:null}function l(e){let t={};for(let n of d){if(!(n in e))continue;let o=e[n],i=S[n];i.validate&&!i.validate(o)||i.options&&!i.options.includes(o)||(t[n]=o)}return t}function K(e){let t={};for(let n of d)t[n]=e[n];return t}function M(){if(typeof localStorage>"u")return{};try{let e=localStorage.getItem(k);return e?l(JSON.parse(e)):{}}catch{return{}}}function T(e){if(!(typeof localStorage>"u"))try{localStorage.setItem(k,JSON.stringify(e))}catch{}}function x(){let t=p()?.sharedConfig?.settings;return!t||typeof t!="object"?{}:l(t)}function A(e){let t=p();if(t?.writeSharedConfig)try{t.writeSharedConfig({settings:e})}catch{}}async function L(e){let t=p();return t?.writeSharedConfig?(await t.writeSharedConfig({settings:e}),!0):!1}function b(){if(typeof window>"u")return null;let e=window.__sootsimSharedConfig;return e&&typeof e=="object"?e:null}function O(){let e=b()?.settings;return!e||typeof e!="object"?{}:l(e)}function B(e){if(!b())return;let t={settings:e};try{if(globalThis.__sootsimBridgeRequest?.writeSharedConfig?.(t))return}catch{}if(!(typeof fetch>"u"))try{fetch("/__sootsim/shared-config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),keepalive:!0}).catch(()=>{})}catch{}}async function F(e){if(!b()||typeof fetch>"u")return!1;let t=await fetch("/__sootsim/shared-config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:e}),keepalive:!0});if(!t.ok)throw new Error(`shared settings reset failed with HTTP ${t.status}`);return await t.text(),!0}function D(){let e=M(),t=O(),n=x();return{...e,...t,...n}}function V(e,t={}){let n=K(e);for(let o of d)t[o]!==void 0&&(n[o]=t[o]);T(n),A(n),B(n)}async function I(e,t={}){let n=K(e);for(let o of d)t[o]!==void 0&&(n[o]=t[o]);T(n),!await L(n)&&await F(n)}function j(e){if(typeof window>"u")return()=>{};let t=r=>{if(!(r.key!==k||r.newValue==null))try{e(l(JSON.parse(r.newValue)))}catch{}};window.addEventListener("storage",t);let n=p(),o;n?.onSharedConfigChanged&&(o=n.onSharedConfigChanged(r=>{let f=r?.settings;!f||typeof f!="object"||e(l(f))}));let a=globalThis.__sootsimBridgeRequest?.subscribeSharedConfig?.(r=>{let f=r?.settings;!f||typeof f!="object"||e(l(f))});return()=>{window.removeEventListener("storage",t),o?.(),a?.()}}var N=_(),q=v(),y=D(),c=new Set,g={};for(let e of d)N[e]!==void 0&&(c.add(e),y[e]!==void 0&&(g[e]=y[e]),delete y[e]);var s={...q,...y},w=[],u=null;function h(){for(let e of w)e()}function E(){h(),V(s,g)}function C(e,t){let n=S[e];return n.validate&&!n.validate(t)||n.options&&!n.options.includes(t)||s[e]===t?!1:(s={...s,[e]:t},e==="deviceModel"&&(u=null),!0)}j(e=>{let t={...s},n=!1;for(let[o,i]of Object.entries(e)){let a=o;if(c.has(a)){g[a]=i;continue}t[a]!==i&&(t[a]=i,n=!0)}n&&(s=t,u=null,h())});var z={get(e){return s[e]},set(e,t){C(e,t)&&E()},setRuntime(e,t){c.has(e)||(c.add(e),d.includes(e)&&(g[e]=s[e])),C(e,t)&&h()},isRuntimeControlled(e){return c.has(e)},getAll(){return s},apply(e){let t=!1,n={...s};for(let[o,i]of Object.entries(e)){if(i===void 0)continue;let a=o,r=S[a];r&&(r.validate&&!r.validate(i)||r.options&&!r.options.includes(i)||n[a]!==i&&(n[a]=i,t=!0))}t&&(s=n,u=null,E())},applyRuntime(e){let t=!1;for(let n of Object.keys(e)){let o=e[n];o!==void 0&&(c.has(n)||(c.add(n),d.includes(n)&&(g[n]=s[n])),C(n,o)&&(t=!0))}t&&h()},reset(){s=v(),u=null,E()},async resetDeviceContent(){let e=m.filter(n=>!c.has(n)).map(n=>[n,R[n]]),t=e.some(([n,o])=>s[n]!==o);s={...s,...Object.fromEntries(e)};for(let n of m)c.has(n)&&(g[n]=R[n]);t&&h(),await I(s,g)},subscribe(e){return w.push(e),()=>{w=w.filter(t=>t!==e)}},getDeviceSpec(){return u||(u=P(s.deviceModel)),u},getA11yMode(){return s.a11yMode},setA11yMode(e){this.set("a11yMode",e)},getInspectMode(){return s.inspectMode},setInspectMode(e){this.set("inspectMode",e)}};export{z as a};
4
+ import{d as P,m,n as S,o as R,p as _,q as v}from"./chunk-MTWJ3CNR.js";var k="sootsim:settings",d=["productAnalytics","crashReports","colorScheme","reduceMotion","boldText","fontSize","largerAccessibilitySizes","a11yMode","a11yDepth","screenshotCanvas","screenshotBackground","screenshotText","screenshotPose","screenshotDynamicSize","alwaysShowLiveWebViews","showFrame","showMenuBar","showRail","solidWindow","ambientGlow","agentProvider"];function p(){if(typeof window>"u")return null;let e=window.sootsimElectron;return e&&typeof e=="object"?e:null}function l(e){let t={};for(let n of d){if(!(n in e))continue;let o=e[n],i=S[n];i.validate&&!i.validate(o)||i.options&&!i.options.includes(o)||(t[n]=o)}return t}function K(e){let t={};for(let n of d)t[n]=e[n];return t}function M(){if(typeof localStorage>"u")return{};try{let e=localStorage.getItem(k);return e?l(JSON.parse(e)):{}}catch{return{}}}function T(e){if(!(typeof localStorage>"u"))try{localStorage.setItem(k,JSON.stringify(e))}catch{}}function x(){let t=p()?.sharedConfig?.settings;return!t||typeof t!="object"?{}:l(t)}function A(e){let t=p();if(t?.writeSharedConfig)try{t.writeSharedConfig({settings:e})}catch{}}async function L(e){let t=p();return t?.writeSharedConfig?(await t.writeSharedConfig({settings:e}),!0):!1}function b(){if(typeof window>"u")return null;let e=window.__sootsimSharedConfig;return e&&typeof e=="object"?e:null}function O(){let e=b()?.settings;return!e||typeof e!="object"?{}:l(e)}function B(e){if(!b())return;let t={settings:e};try{if(globalThis.__sootsimBridgeRequest?.writeSharedConfig?.(t))return}catch{}if(!(typeof fetch>"u"))try{fetch("/__sootsim/shared-config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify(t),keepalive:!0}).catch(()=>{})}catch{}}async function F(e){if(!b()||typeof fetch>"u")return!1;let t=await fetch("/__sootsim/shared-config",{method:"POST",headers:{"Content-Type":"application/json"},body:JSON.stringify({settings:e}),keepalive:!0});if(!t.ok)throw new Error(`shared settings reset failed with HTTP ${t.status}`);return await t.text(),!0}function D(){let e=M(),t=O(),n=x();return{...e,...t,...n}}function V(e,t={}){let n=K(e);for(let o of d)t[o]!==void 0&&(n[o]=t[o]);T(n),A(n),B(n)}async function I(e,t={}){let n=K(e);for(let o of d)t[o]!==void 0&&(n[o]=t[o]);T(n),!await L(n)&&await F(n)}function j(e){if(typeof window>"u")return()=>{};let t=r=>{if(!(r.key!==k||r.newValue==null))try{e(l(JSON.parse(r.newValue)))}catch{}};window.addEventListener("storage",t);let n=p(),o;n?.onSharedConfigChanged&&(o=n.onSharedConfigChanged(r=>{let f=r?.settings;!f||typeof f!="object"||e(l(f))}));let a=globalThis.__sootsimBridgeRequest?.subscribeSharedConfig?.(r=>{let f=r?.settings;!f||typeof f!="object"||e(l(f))});return()=>{window.removeEventListener("storage",t),o?.(),a?.()}}var N=_(),q=v(),y=D(),c=new Set,g={};for(let e of d)N[e]!==void 0&&(c.add(e),y[e]!==void 0&&(g[e]=y[e]),delete y[e]);var s={...q,...y},w=[],u=null;function h(){for(let e of w)e()}function E(){h(),V(s,g)}function C(e,t){let n=S[e];return n.validate&&!n.validate(t)||n.options&&!n.options.includes(t)||s[e]===t?!1:(s={...s,[e]:t},e==="deviceModel"&&(u=null),!0)}j(e=>{let t={...s},n=!1;for(let[o,i]of Object.entries(e)){let a=o;if(c.has(a)){g[a]=i;continue}t[a]!==i&&(t[a]=i,n=!0)}n&&(s=t,u=null,h())});var z={get(e){return s[e]},set(e,t){C(e,t)&&E()},setRuntime(e,t){c.has(e)||(c.add(e),d.includes(e)&&(g[e]=s[e])),C(e,t)&&h()},isRuntimeControlled(e){return c.has(e)},getAll(){return s},apply(e){let t=!1,n={...s};for(let[o,i]of Object.entries(e)){if(i===void 0)continue;let a=o,r=S[a];r&&(r.validate&&!r.validate(i)||r.options&&!r.options.includes(i)||n[a]!==i&&(n[a]=i,t=!0))}t&&(s=n,u=null,E())},applyRuntime(e){let t=!1;for(let n of Object.keys(e)){let o=e[n];o!==void 0&&(c.has(n)||(c.add(n),d.includes(n)&&(g[n]=s[n])),C(n,o)&&(t=!0))}t&&h()},reset(){s=v(),u=null,E()},async resetDeviceContent(){let e=m.filter(n=>!c.has(n)).map(n=>[n,R[n]]),t=e.some(([n,o])=>s[n]!==o);s={...s,...Object.fromEntries(e)};for(let n of m)c.has(n)&&(g[n]=R[n]);t&&h(),await I(s,g)},subscribe(e){return w.push(e),()=>{w=w.filter(t=>t!==e)}},getDeviceSpec(){return u||(u=P(s.deviceModel)),u},getA11yMode(){return s.a11yMode},setA11yMode(e){this.set("a11yMode",e)},getInspectMode(){return s.inspectMode},setInspectMode(e){this.set("inspectMode",e)}};export{z as a};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.371 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (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
4
  var f="\x1B[0m",p="\x1B[1m",a="\x1B[2m",m="\x1B[38;2;42;95;255m",x="\x1B[38;5;84m",d="\x1B[38;5;203m";function c(n,t){return!process.stdout.isTTY||process.env.NO_COLOR!==void 0?t:`${n}${t}${f}`}function s(n){return c(m,n)}function u(n){return c(p,n)}function i(n){return c(a,n)}function w(n){return c(x,n)}function h(n){return c(d,n)}function v(n){console.log(),console.log(` ${s("\u25E4\u25E2")} ${u("rnx")}`),n&&console.log(` ${i(n)}`)}function y(n,t){console.log(`
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.371 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (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
4
  function a(){console.error(" no rnx desktop companion found."),console.error(""),console.error(" install the desktop app:"),console.error(" rnx desktop install"),console.error(""),console.error(" or install the recommended background service:"),console.error(" rnx daemon install"),console.error("")}function t(r){console.error(""),console.error(` no sim is connected to the rnx bridge on port ${r}.`),console.error(""),console.error(" start your app dev server, then open it in rnx:"),console.error(" npx expo start --localhost --port 8081"),console.error(" rnx open 8081"),console.error(""),console.error(" then inspect the live app:"),console.error(" rnx describe")}async function d(r,n,s){let e=[];try{e=await r.listSims()}catch{}if(console.error(""),e.length===0){t(n);return}console.error(` no sim with id "${s}" is connected to the bridge on port ${n}.`),console.error(""),console.error(" connected sims:");for(let o of e){let i=[o.isPrimary?"primary":null,o.readyState,o.userVisible===!1?"hidden":o.userVisible===!0?"visible":null,o.userFocused?"focused":null].filter(Boolean).join(", ");console.error(` ${o.id} (${i})`)}console.error(""),console.error(" pass a valid --sim id, or run `rnx list` to see all sessions.")}export{a,t as b,d as c};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.371 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (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 as c}from"./chunk-7TWD4P6J.js";import{M as u,l}from"./chunk-Y7SKGRAV.js";import r from"fs";import e from"path";import{fileURLToPath as m}from"url";var s;function p(){if(s!==void 0)return s;let t=e.dirname(m(import.meta.url));for(let n=0;n<12&&t!==e.dirname(t);n++){if(r.existsSync(e.join(t,"packages/sootsim-engine/package.json"))&&r.existsSync(e.join(t,"public/sootsim")))return s=t,t;t=e.dirname(t)}return s=null,null}function d(){if(process.env.SOOTSIM_HOME&&u())return null;let t=p();if(!t)return null;let n=e.join(t,"public/sootsim");return r.existsSync(e.join(n,"index.html"))&&r.existsSync(e.join(n,"engine/index.html"))&&r.existsSync(e.join(n,"engine-tenant/worker.js"))?n:null}function g(){let t=d();if(t)return t;let n=u();if(!n)return null;let o=l(n);return r.existsSync(e.join(o,"index.html"))?o:null}var a=".runtime.localhost";function y(t){let n=t.trim();if(!c(n))throw new Error(`invalid rnx runtime version: ${t}`);let i=Buffer.from(n,"utf8").toString("hex").match(/.{1,60}/g);if(!i)throw new Error(`invalid rnx runtime version: ${t}`);return`${i.join(".")}${a}`}function f(t){return t.toLowerCase().endsWith(a)}function x(t){if(!f(t))return null;let n=t.slice(0,-a.length).split(".");if(n.length===0||n.some(i=>!/^[0-9a-f]{1,60}$/i.test(i)))return null;let o=n.join("");if(o.length%2!==0)return null;try{let i=Buffer.from(o,"hex").toString("utf8");return c(i)?i:null}catch{return null}}function S(t){let n=l(t);return r.existsSync(e.join(n,"index.html"))?n:null}function M(t){if(!f(t))return g();let n=x(t);return n?S(n):null}export{d as a,y as b,f as c,x as d,M as e};
4
+ import{a as c}from"./chunk-QKX26L27.js";import{M as u,l}from"./chunk-2YNZ3GHI.js";import r from"fs";import e from"path";import{fileURLToPath as m}from"url";var s;function p(){if(s!==void 0)return s;let t=e.dirname(m(import.meta.url));for(let n=0;n<12&&t!==e.dirname(t);n++){if(r.existsSync(e.join(t,"packages/sootsim-engine/package.json"))&&r.existsSync(e.join(t,"public/sootsim")))return s=t,t;t=e.dirname(t)}return s=null,null}function d(){if(process.env.SOOTSIM_HOME&&u())return null;let t=p();if(!t)return null;let n=e.join(t,"public/sootsim");return r.existsSync(e.join(n,"index.html"))&&r.existsSync(e.join(n,"engine/index.html"))&&r.existsSync(e.join(n,"engine-tenant/worker.js"))?n:null}function g(){let t=d();if(t)return t;let n=u();if(!n)return null;let o=l(n);return r.existsSync(e.join(o,"index.html"))?o:null}var a=".runtime.localhost";function y(t){let n=t.trim();if(!c(n))throw new Error(`invalid rnx runtime version: ${t}`);let i=Buffer.from(n,"utf8").toString("hex").match(/.{1,60}/g);if(!i)throw new Error(`invalid rnx runtime version: ${t}`);return`${i.join(".")}${a}`}function f(t){return t.toLowerCase().endsWith(a)}function x(t){if(!f(t))return null;let n=t.slice(0,-a.length).split(".");if(n.length===0||n.some(i=>!/^[0-9a-f]{1,60}$/i.test(i)))return null;let o=n.join("");if(o.length%2!==0)return null;try{let i=Buffer.from(o,"hex").toString("utf8");return c(i)?i:null}catch{return null}}function S(t){let n=l(t);return r.existsSync(e.join(n,"index.html"))?n:null}function M(t){if(!f(t))return g();let n=x(t);return n?S(n):null}export{d as a,y as b,f as c,x as d,M as e};
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.371 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (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}from"./chunk-WHZE63R2.js";import{q as x}from"./chunk-ESWSXF55.js";import{c as l}from"./chunk-ERBGQEJ5.js";import{b as R,c as w,d as m,e as $,f as u}from"./chunk-7TWD4P6J.js";import{L as h,M as f,N as y,T as v,l as d}from"./chunk-Y7SKGRAV.js";import S from"fs";import{WebSocket as L}from"ws";function E(t){if(!t||typeof t!="object")return!1;let e=Reflect.get(t,"sections");return typeof Reflect.get(t,"title")=="string"&&Array.isArray(e)&&e.every(o=>o&&typeof o=="object"&&typeof Reflect.get(o,"title")=="string"&&Array.isArray(Reflect.get(o,"items"))&&Reflect.get(o,"items").every(n=>n&&typeof n=="object"&&typeof Reflect.get(n,"summary")=="string"&&typeof Reflect.get(n,"hash")=="string"))}async function A(t,e=fetch){try{let o=new URL($);o.searchParams.set("version",t);let n=await e(o,{headers:{accept:"application/json"},signal:AbortSignal.timeout(5e3)});if(!n.ok)return null;let r=await n.json();if(!r||typeof r!="object")return null;let i=Reflect.get(r,"entries");return!Array.isArray(i)||!E(i[0])?null:i[0]}catch{return null}}function O(t,e){let o=[`what's new in rnx engine v${t}:`];if(!e||e.sections.length===0)o.push(" release notes are not available yet");else for(let n of e.sections){o.push(` ${n.title}:`);for(let r of n.items)o.push(` \u2022 ${r.summary}`)}return o.push(` full changelog: ${m}`),o.join(`
4
+ import{b}from"./chunk-B7LYAWJU.js";import{q as x}from"./chunk-VBAUP3CK.js";import{c as l}from"./chunk-2272Y5HN.js";import{b as R,c as w,d as m,e as $,f as u}from"./chunk-QKX26L27.js";import{L as h,M as f,N as y,T as v,l as d}from"./chunk-2YNZ3GHI.js";import S from"fs";import{WebSocket as L}from"ws";function E(t){if(!t||typeof t!="object")return!1;let e=Reflect.get(t,"sections");return typeof Reflect.get(t,"title")=="string"&&Array.isArray(e)&&e.every(o=>o&&typeof o=="object"&&typeof Reflect.get(o,"title")=="string"&&Array.isArray(Reflect.get(o,"items"))&&Reflect.get(o,"items").every(n=>n&&typeof n=="object"&&typeof Reflect.get(n,"summary")=="string"&&typeof Reflect.get(n,"hash")=="string"))}async function A(t,e=fetch){try{let o=new URL($);o.searchParams.set("version",t);let n=await e(o,{headers:{accept:"application/json"},signal:AbortSignal.timeout(5e3)});if(!n.ok)return null;let r=await n.json();if(!r||typeof r!="object")return null;let i=Reflect.get(r,"entries");return!Array.isArray(i)||!E(i[0])?null:i[0]}catch{return null}}function O(t,e){let o=[`what's new in rnx engine v${t}:`];if(!e||e.sections.length===0)o.push(" release notes are not available yet");else for(let n of e.sections){o.push(` ${n.title}:`);for(let r of n.items)o.push(` \u2022 ${r.summary}`)}return o.push(` full changelog: ${m}`),o.join(`
5
5
  `)}async function Y(t,e={}){let[o,...n]=t;if(!o||o==="--help"||o==="-h"){k();return}switch(o){case"install":return _(n,e);case"list":return T(n);case"use":return D(n);case"remove":return G(n);case"which":return U();case"notes":return F(n);default:console.error(` unknown runtime subcommand: ${o}`),k(),l(1)}}function k(){console.log(`
6
6
  rnx runtime \u2014 manage engine runtimes under ~/.sootsim/runtimes/
7
7
 
@@ -27,4 +27,4 @@ examples:
27
27
  rnx runtime install --channel beta
28
28
  rnx runtime use 1.2.3
29
29
  rnx runtime notes
30
- `)}async function _(t,e){let{version:o,flags:n}=M(t),r=n.channel??e.channel??"stable",i=n.force===!0,a=n.setActive!==!1;h(),console.log("rnx runtime install"),console.log(` cdn: ${u.resolveCdnOrigin()}`);try{let s=await u.install({version:o,channel:r,force:i,setActive:a,protectVersions:v()});return console.log(` version: ${s.version} (channel: ${s.channel})`),s.installed?console.log(` installed ${s.version}`):console.log(` already installed at ${s.runtimeDir}`),a&&await I(s.version),s}catch(s){console.error(` ${N(s)}`),l(1)}}async function I(t){y(t),console.log(` active: ${t}`),await j(t)||console.log(` (no daemon running \u2014 next sootsim/electron launch will pick up ${t})`)}async function j(t){let{isDaemonLockfileFresh:e,readDaemonLockfile:o}=await import("./home-paths-EGRMTSGE.js"),n=o();if(!e(n))return!1;let r=x();return new Promise(i=>{let a=!1,s=!1,g=C=>{a||(a=!0,i(C))},c=new L(`ws://127.0.0.1:${r}`,{handshakeTimeout:800}),p=setTimeout(()=>{try{c.close()}catch{}g(s)},1500);c.on("open",()=>{try{c.send(JSON.stringify({type:"runtime:use",version:t,id:0})),s=!0}catch{}setTimeout(()=>{try{c.close()}catch{}},100)}),c.on("close",()=>{clearTimeout(p),g(s)}),c.on("error",()=>{clearTimeout(p),g(!1)})})}async function T(t){h();let e=u.listInstalled(),o=f();if(console.log("installed:"),e.length===0)console.log(" (none)");else for(let n of e)console.log(` ${n===o?"*":" "} ${n}`);try{let n=await u.fetchManifest();console.log("available (latest per channel):");for(let[i,a]of Object.entries(n.channels))console.log(` ${i.padEnd(8)} ${a.latest}`);let r=Object.keys(n.versions).sort(R).reverse();if(r.length>1){console.log("hosted versions:");for(let i of r)console.log(` ${i}`)}}catch(n){console.log(`available: (could not fetch manifest: ${N(n)})`)}}async function D(t){let e=t[0];e||(console.error(" usage: rnx runtime use <version>"),l(1));let o=u.listInstalled();o.includes(e)||(console.error(` version ${e} is not installed`),console.error(` installed: ${o.join(", ")||"(none)"}`),console.error(` run \`rnx runtime install ${e}\` first`),l(1)),await I(e)}async function G(t){let e=t[0];e||(console.error(" usage: rnx runtime remove <version>"),l(1)),f()===e&&(console.error(` cannot remove active runtime ${e}`),console.error(" switch with `rnx runtime use <other>` first, or install another version"),l(1)),v().includes(e)&&(console.error(` cannot remove runtime ${e} while a project is using it`),l(1));let n=d(e);if(!S.existsSync(n)){console.error(` ${e} is not installed`);return}S.rmSync(n,{recursive:!0,force:!0}),console.log(` removed ${e}`)}async function U(){let t=f();if(!t){console.log(" no active runtime");return}console.log(t)}async function F(t){t.length>0&&(console.error(" usage: rnx runtime notes"),l(1));let{config:e}=await b(),o=e?.runtimeVersion??f();if(!o){console.log(" no active runtime"),console.log(` release notes: ${m}`);return}console.log(O(o,await A(o)))}function M(t){let e={},o=[];for(let n=0;n<t.length;n++){let r=t[n];if(r==="--channel"&&n+1<t.length){e.channel=t[n+1],n++;continue}if(r.startsWith("--channel=")){e.channel=r.slice(10);continue}if(r==="--force"){e.force=!0;continue}if(r==="--set-active=false"||r==="--no-set-active"){e.setActive=!1;continue}o.push(r)}return{version:o[0]??null,flags:e}}function N(t){return t instanceof Error?t.message:String(t)}export{A as a,O as b,Y as c};
30
+ `)}async function _(t,e){let{version:o,flags:n}=M(t),r=n.channel??e.channel??"stable",i=n.force===!0,a=n.setActive!==!1;h(),console.log("rnx runtime install"),console.log(` cdn: ${u.resolveCdnOrigin()}`);try{let s=await u.install({version:o,channel:r,force:i,setActive:a,protectVersions:v()});return console.log(` version: ${s.version} (channel: ${s.channel})`),s.installed?console.log(` installed ${s.version}`):console.log(` already installed at ${s.runtimeDir}`),a&&await I(s.version),s}catch(s){console.error(` ${N(s)}`),l(1)}}async function I(t){y(t),console.log(` active: ${t}`),await j(t)||console.log(` (no daemon running \u2014 next sootsim/electron launch will pick up ${t})`)}async function j(t){let{isDaemonLockfileFresh:e,readDaemonLockfile:o}=await import("./home-paths-UBO2R6RQ.js"),n=o();if(!e(n))return!1;let r=x();return new Promise(i=>{let a=!1,s=!1,g=C=>{a||(a=!0,i(C))},c=new L(`ws://127.0.0.1:${r}`,{handshakeTimeout:800}),p=setTimeout(()=>{try{c.close()}catch{}g(s)},1500);c.on("open",()=>{try{c.send(JSON.stringify({type:"runtime:use",version:t,id:0})),s=!0}catch{}setTimeout(()=>{try{c.close()}catch{}},100)}),c.on("close",()=>{clearTimeout(p),g(s)}),c.on("error",()=>{clearTimeout(p),g(!1)})})}async function T(t){h();let e=u.listInstalled(),o=f();if(console.log("installed:"),e.length===0)console.log(" (none)");else for(let n of e)console.log(` ${n===o?"*":" "} ${n}`);try{let n=await u.fetchManifest();console.log("available (latest per channel):");for(let[i,a]of Object.entries(n.channels))console.log(` ${i.padEnd(8)} ${a.latest}`);let r=Object.keys(n.versions).sort(R).reverse();if(r.length>1){console.log("hosted versions:");for(let i of r)console.log(` ${i}`)}}catch(n){console.log(`available: (could not fetch manifest: ${N(n)})`)}}async function D(t){let e=t[0];e||(console.error(" usage: rnx runtime use <version>"),l(1));let o=u.listInstalled();o.includes(e)||(console.error(` version ${e} is not installed`),console.error(` installed: ${o.join(", ")||"(none)"}`),console.error(` run \`rnx runtime install ${e}\` first`),l(1)),await I(e)}async function G(t){let e=t[0];e||(console.error(" usage: rnx runtime remove <version>"),l(1)),f()===e&&(console.error(` cannot remove active runtime ${e}`),console.error(" switch with `rnx runtime use <other>` first, or install another version"),l(1)),v().includes(e)&&(console.error(` cannot remove runtime ${e} while a project is using it`),l(1));let n=d(e);if(!S.existsSync(n)){console.error(` ${e} is not installed`);return}S.rmSync(n,{recursive:!0,force:!0}),console.log(` removed ${e}`)}async function U(){let t=f();if(!t){console.log(" no active runtime");return}console.log(t)}async function F(t){t.length>0&&(console.error(" usage: rnx runtime notes"),l(1));let{config:e}=await b(),o=e?.runtimeVersion??f();if(!o){console.log(" no active runtime"),console.log(` release notes: ${m}`);return}console.log(O(o,await A(o)))}function M(t){let e={},o=[];for(let n=0;n<t.length;n++){let r=t[n];if(r==="--channel"&&n+1<t.length){e.channel=t[n+1],n++;continue}if(r.startsWith("--channel=")){e.channel=r.slice(10);continue}if(r==="--force"){e.force=!0;continue}if(r==="--set-active=false"||r==="--no-set-active"){e.setActive=!1;continue}o.push(r)}return{version:o[0]??null,flags:e}}function N(t){return t instanceof Error?t.message:String(t)}export{A as a,O as b,Y as c};
@@ -1,3 +1,3 @@
1
- /*! rnx v0.1.371 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)