rnxsim 0.1.359 → 0.1.360

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 (170) hide show
  1. package/dist-cli/bin.js +5 -5
  2. package/dist-cli/chunks/{agent-2OLDRPK7.js → agent-5TDEJY2A.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-JYEYTVYG.js → agent-wrapper-GLYSHBEI.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-A6PV7ITD.js → app-fonts-NMEJ3OZP.js} +2 -2
  5. package/dist-cli/chunks/{assert-NNS2US2Q.js → assert-RBQTSVK7.js} +2 -2
  6. package/dist-cli/chunks/{auth-CUNDIZQU.js → auth-LGORS2S7.js} +2 -2
  7. package/dist-cli/chunks/{beta-J2SIJ57C.js → beta-M62QOEAS.js} +2 -2
  8. package/dist-cli/chunks/{camera-CTF4GWF7.js → camera-TFRUZ5V3.js} +2 -2
  9. package/dist-cli/chunks/{chunk-PBH62D5C.js → chunk-23P7Q7CA.js} +2 -2
  10. package/dist-cli/chunks/{chunk-YE7E2KI4.js → chunk-2N4DDS5L.js} +1 -1
  11. package/dist-cli/chunks/{chunk-VVOG3GVC.js → chunk-3NJNPLC4.js} +2 -2
  12. package/dist-cli/chunks/{chunk-LDUF6LSD.js → chunk-3QESF6O2.js} +2 -2
  13. package/dist-cli/chunks/{chunk-WHHTKMDZ.js → chunk-3QFEMDXJ.js} +1 -1
  14. package/dist-cli/chunks/{chunk-3MXSKSP7.js → chunk-3ZI56VTV.js} +2 -2
  15. package/dist-cli/chunks/{chunk-M2Z52IIK.js → chunk-46K7DG36.js} +1 -1
  16. package/dist-cli/chunks/{chunk-DNB7X3BQ.js → chunk-4AOLJEUK.js} +2 -2
  17. package/dist-cli/chunks/{chunk-CSP7NLAG.js → chunk-5JATVHNM.js} +1 -1
  18. package/dist-cli/chunks/{chunk-ZVYFM4Y6.js → chunk-64WWMVKU.js} +1 -1
  19. package/dist-cli/chunks/{chunk-NWFVIQPE.js → chunk-6CQWGATK.js} +2 -2
  20. package/dist-cli/chunks/{chunk-XQYMAKIU.js → chunk-6FHBFHN2.js} +1 -1
  21. package/dist-cli/chunks/{chunk-Q3XEBRDM.js → chunk-6FUFHTAZ.js} +2 -2
  22. package/dist-cli/chunks/{chunk-GLUCOQJB.js → chunk-6MIV6KTM.js} +2 -2
  23. package/dist-cli/chunks/{chunk-OQM7J6KR.js → chunk-6RDUEAX5.js} +1 -1
  24. package/dist-cli/chunks/{chunk-TU5EOYXI.js → chunk-76SYSBLR.js} +1 -1
  25. package/dist-cli/chunks/{chunk-DT3FRHDA.js → chunk-7B55WEZX.js} +2 -2
  26. package/dist-cli/chunks/{chunk-HXWL5B7M.js → chunk-7RQOXQJI.js} +2 -2
  27. package/dist-cli/chunks/{chunk-HC6VQGIX.js → chunk-BNT7EOTY.js} +1 -1
  28. package/dist-cli/chunks/{chunk-MES42ZO3.js → chunk-CTMZKSXE.js} +1 -1
  29. package/dist-cli/chunks/{chunk-3PAROK2M.js → chunk-CZ6CXMLY.js} +1 -1
  30. package/dist-cli/chunks/{chunk-5QDKV53T.js → chunk-D7PFB4GR.js} +2 -2
  31. package/dist-cli/chunks/{chunk-NYLWOLUC.js → chunk-ECZ362F5.js} +1 -1
  32. package/dist-cli/chunks/{chunk-46DL6HR2.js → chunk-F4V472HT.js} +2 -2
  33. package/dist-cli/chunks/{chunk-LWJH6K2B.js → chunk-FFJU4B4P.js} +3 -3
  34. package/dist-cli/chunks/{chunk-4ZF26NVW.js → chunk-FGYT7WZO.js} +2 -2
  35. package/dist-cli/chunks/{chunk-XDOHOD4W.js → chunk-FUWXX4L2.js} +2 -2
  36. package/dist-cli/chunks/{chunk-WW6FQK4I.js → chunk-FW433UQA.js} +1 -1
  37. package/dist-cli/chunks/{chunk-2WKY6CCY.js → chunk-GVZBI566.js} +2 -2
  38. package/dist-cli/chunks/{chunk-KHZ5NG5O.js → chunk-HB2FQ3AI.js} +1 -1
  39. package/dist-cli/chunks/{chunk-BGV2MCLH.js → chunk-JKCJ3OZ6.js} +2 -2
  40. package/dist-cli/chunks/{chunk-IKLQSEQU.js → chunk-KXL34ZEX.js} +1 -1
  41. package/dist-cli/chunks/{chunk-YXBT3O2F.js → chunk-LQDKWRKB.js} +2 -2
  42. package/dist-cli/chunks/{chunk-XTKDLWAP.js → chunk-LVZ5XNHR.js} +3 -3
  43. package/dist-cli/chunks/{chunk-XLGOZM36.js → chunk-M3VPZY4N.js} +2 -2
  44. package/dist-cli/chunks/{chunk-JS2WDKY7.js → chunk-M7YQTFX6.js} +2 -2
  45. package/dist-cli/chunks/{chunk-2O66Y22P.js → chunk-MNOYVAVM.js} +2 -2
  46. package/dist-cli/chunks/{chunk-LUB66YZR.js → chunk-N2VQYLIL.js} +1 -1
  47. package/dist-cli/chunks/{chunk-JEHTFFFP.js → chunk-OGJN774A.js} +2 -2
  48. package/dist-cli/chunks/chunk-OHQYXHAO.js +4 -0
  49. package/dist-cli/chunks/{chunk-KYO373ZG.js → chunk-OOHFSXDL.js} +2 -2
  50. package/dist-cli/chunks/{chunk-GTEEBJOJ.js → chunk-OYCL4URG.js} +2 -2
  51. package/dist-cli/chunks/{chunk-VTCTU53L.js → chunk-P4F464O6.js} +1 -1
  52. package/dist-cli/chunks/{chunk-GO53F6H2.js → chunk-P6G2K65M.js} +2 -2
  53. package/dist-cli/chunks/{chunk-AAEBP7DF.js → chunk-PYCGLDQT.js} +1 -1
  54. package/dist-cli/chunks/{chunk-D6HKRX7V.js → chunk-QII4N4MD.js} +2 -2
  55. package/dist-cli/chunks/{chunk-JSX2XL45.js → chunk-QNWJPLWS.js} +3 -3
  56. package/dist-cli/chunks/{chunk-OXXJMSAQ.js → chunk-RVOGX6P4.js} +2 -2
  57. package/dist-cli/chunks/{chunk-ZMGSV5IV.js → chunk-TG7JA5QU.js} +1 -1
  58. package/dist-cli/chunks/{chunk-WSU6MO4Z.js → chunk-TQ7LABWH.js} +2 -2
  59. package/dist-cli/chunks/{chunk-7SUBILRJ.js → chunk-UGCUH4IQ.js} +2 -2
  60. package/dist-cli/chunks/{chunk-ZTIJA6PC.js → chunk-VLU7O6US.js} +2 -2
  61. package/dist-cli/chunks/{chunk-BA7VFILM.js → chunk-XJZLPMI2.js} +2 -2
  62. package/dist-cli/chunks/{chunk-SKOK6GUT.js → chunk-XMGIQZEE.js} +1 -1
  63. package/dist-cli/chunks/{chunk-CAE4RZKE.js → chunk-XOH5H5ZP.js} +2 -2
  64. package/dist-cli/chunks/{chunk-DIITNK6X.js → chunk-ZJAMYSRD.js} +2 -2
  65. package/dist-cli/chunks/{cleanup-NBNQJPGU.js → cleanup-B5WZL54D.js} +2 -2
  66. package/dist-cli/chunks/cli-version-ISS4IQG2.js +4 -0
  67. package/dist-cli/chunks/{compat-EGAGIY3E.js → compat-5YQSEUI6.js} +2 -2
  68. package/dist-cli/chunks/{config-NOYCGPQC.js → config-2AN3444K.js} +2 -2
  69. package/dist-cli/chunks/{control-DHFXSAMN.js → control-GYPDUVBY.js} +2 -2
  70. package/dist-cli/chunks/daemon-KDBWK2JE.js +4 -0
  71. package/dist-cli/chunks/{debug-LSCLW7KC.js → debug-HGURP42M.js} +3 -3
  72. package/dist-cli/chunks/{desktop-H4LA2PKU.js → desktop-22U445SI.js} +3 -3
  73. package/dist-cli/chunks/{detox-PGJSG4CZ.js → detox-WWREZVE5.js} +2 -2
  74. package/dist-cli/chunks/{device-26FAJCPP.js → device-YGHZQXOL.js} +2 -2
  75. package/dist-cli/chunks/{diagnose-S2R3UV7P.js → diagnose-VGDPNJ3Y.js} +2 -2
  76. package/dist-cli/chunks/{disk-cleanup-PVFAS3R2.js → disk-cleanup-L4S6CWE2.js} +2 -2
  77. package/dist-cli/chunks/drivers-E57M2QHQ.js +4 -0
  78. package/dist-cli/chunks/{film-VTY47ROP.js → film-7XAWD7C2.js} +3 -3
  79. package/dist-cli/chunks/flow-7R3ZY5B2.js +4 -0
  80. package/dist-cli/chunks/help-K6YJPUPC.js +4 -0
  81. package/dist-cli/chunks/{hidden-runtime-alias-S7PUB7ML.js → hidden-runtime-alias-U6ZB5ZW2.js} +2 -2
  82. package/dist-cli/chunks/{home-paths-2NWZWMU6.js → home-paths-ZMH2LG4J.js} +2 -2
  83. package/dist-cli/chunks/inspect-DVSRZN4P.js +4 -0
  84. package/dist-cli/chunks/install-desktop-N5PAE4D5.js +4 -0
  85. package/dist-cli/chunks/{login-I3YPNEHQ.js → login-MZ2XGHAS.js} +2 -2
  86. package/dist-cli/chunks/{logout-THVVM3NR.js → logout-FZWUOHWI.js} +2 -2
  87. package/dist-cli/chunks/{maestro-WI2YQ5LS.js → maestro-DRZBFKBJ.js} +3 -3
  88. package/dist-cli/chunks/{maestro-generate-QS4FX64N.js → maestro-generate-5O6GE5IK.js} +3 -3
  89. package/dist-cli/chunks/{mode-M2GKOTKA.js → mode-DQFQ6TJD.js} +2 -2
  90. package/dist-cli/chunks/{optional-demo-registry-VPKSRPHJ.js → optional-demo-registry-6F3OIAKL.js} +2 -2
  91. package/dist-cli/chunks/{perf-Q6236DQX.js → perf-67FAFWU7.js} +2 -2
  92. package/dist-cli/chunks/{permissions-YQDXSLMZ.js → permissions-LAUXGMCQ.js} +2 -2
  93. package/dist-cli/chunks/privacy-2GDUL5WJ.js +4 -0
  94. package/dist-cli/chunks/{record-MHMBLPJY.js → record-IKQ7MRAP.js} +3 -3
  95. package/dist-cli/chunks/{report-issue-M63ZLR23.js → report-issue-56SCTEPF.js} +2 -2
  96. package/dist-cli/chunks/reset-SJ4R2OMK.js +4 -0
  97. package/dist-cli/chunks/runtime-LWKXO2WB.js +4 -0
  98. package/dist-cli/chunks/{screenshot-command-ICJUIKRS.js → screenshot-command-7ETXR4RZ.js} +3 -3
  99. package/dist-cli/chunks/{screenshot-layers-BOI22ZBB.js → screenshot-layers-5AWDI4KX.js} +2 -2
  100. package/dist-cli/chunks/{screenshots-capture-YXUJMC4I.js → screenshots-capture-E2UHDC4V.js} +2 -2
  101. package/dist-cli/chunks/{serve-HNQIF64A.js → serve-ZYNSOFT4.js} +2 -2
  102. package/dist-cli/chunks/setup-5U4NLERT.js +4 -0
  103. package/dist-cli/chunks/{skills-YLPH7UXU.js → skills-UWVWZPVJ.js} +2 -2
  104. package/dist-cli/chunks/{state-RPFSMKNO.js → state-CIJIGYAA.js} +2 -2
  105. package/dist-cli/chunks/{storage-HEKHKX2S.js → storage-6GNPMH52.js} +2 -2
  106. package/dist-cli/chunks/store-CR76UYXH.js +4 -0
  107. package/dist-cli/chunks/telemetry-2QZQH335.js +4 -0
  108. package/dist-cli/chunks/{timeline-EGLA5PM7.js → timeline-TTRS64D5.js} +2 -2
  109. package/dist-cli/chunks/{upgrade-PSQ4MO5U.js → upgrade-QGUEIM6V.js} +2 -2
  110. package/dist-cli/chunks/upload-7NOVXFG3.js +4 -0
  111. package/dist-cli/chunks/{version-ADGX3PLN.js → version-ZFCZ2OSY.js} +2 -2
  112. package/dist-cli/chunks/{web-DYLEECHV.js → web-NQN3KN7Z.js} +2 -2
  113. package/dist-cli/chunks/welcome-5WE3E5JT.js +5 -0
  114. package/dist-cli/chunks/{what-happened-PQOET72N.js → what-happened-B4ZXFJYH.js} +2 -2
  115. package/dist-lib/agent-daemon-client.cjs +1 -1
  116. package/dist-lib/agent-events.cjs +1 -1
  117. package/dist-lib/agent-identity.cjs +1 -1
  118. package/dist-lib/agent-sessions.cjs +1 -1
  119. package/dist-lib/attached-projects.cjs +1 -1
  120. package/dist-lib/auth/shared-session.cjs +1 -1
  121. package/dist-lib/backend-origin.cjs +1 -1
  122. package/dist-lib/beta.cjs +1 -1
  123. package/dist-lib/beta.mjs +1 -1
  124. package/dist-lib/bridge-constants.cjs +1 -1
  125. package/dist-lib/bridge-contract.cjs +1 -1
  126. package/dist-lib/cli-constants.cjs +1 -1
  127. package/dist-lib/config.cjs +1 -1
  128. package/dist-lib/detox/index.cjs +1 -1
  129. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  130. package/dist-lib/home-paths.cjs +1 -1
  131. package/dist-lib/host/bridge-host.cjs +1 -1
  132. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  133. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  134. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  135. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  136. package/dist-lib/host/websocket-proxy.cjs +1 -1
  137. package/dist-lib/index.cjs +1 -1
  138. package/dist-lib/jump-to-source-babel.cjs +1 -1
  139. package/dist-lib/menu.cjs +1 -1
  140. package/dist-lib/menu.mjs +1 -1
  141. package/dist-lib/metro-production-bundle.cjs +1 -1
  142. package/dist-lib/metro-production-bundle.mjs +1 -1
  143. package/dist-lib/metro.cjs +1 -1
  144. package/dist-lib/profiles.cjs +1 -1
  145. package/dist-lib/public-brand.cjs +1 -1
  146. package/dist-lib/react-native-host-modules.cjs +1 -1
  147. package/dist-lib/react-native-host-modules.mjs +1 -1
  148. package/dist-lib/render-mode.cjs +1 -1
  149. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  150. package/dist-lib/sdk.cjs +1 -1
  151. package/dist-lib/sdk.mjs +1 -1
  152. package/dist-lib/skills.cjs +3 -3
  153. package/dist-lib/vite.cjs +1 -1
  154. package/package.json +1 -1
  155. package/dist-cli/chunks/chunk-A7TFHJ5P.js +0 -4
  156. package/dist-cli/chunks/cli-version-STPU7MKT.js +0 -4
  157. package/dist-cli/chunks/daemon-3XA65GKT.js +0 -4
  158. package/dist-cli/chunks/drivers-EEQHVBC7.js +0 -4
  159. package/dist-cli/chunks/flow-CJK3RYA7.js +0 -4
  160. package/dist-cli/chunks/help-VVLWX5H4.js +0 -4
  161. package/dist-cli/chunks/inspect-RNLIE6VH.js +0 -4
  162. package/dist-cli/chunks/install-desktop-3XVFMWWO.js +0 -4
  163. package/dist-cli/chunks/privacy-7OSUYOKL.js +0 -4
  164. package/dist-cli/chunks/reset-VORCUAL4.js +0 -4
  165. package/dist-cli/chunks/runtime-W7IAAYKW.js +0 -4
  166. package/dist-cli/chunks/setup-FDEUIVIC.js +0 -4
  167. package/dist-cli/chunks/store-VEY246BW.js +0 -4
  168. package/dist-cli/chunks/telemetry-ZRB5HWKS.js +0 -4
  169. package/dist-cli/chunks/upload-S6EEXIQX.js +0 -4
  170. package/dist-cli/chunks/welcome-IH52G7MO.js +0 -5
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.359 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.360 | (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{r as W}from"./chunk-GTEEBJOJ.js";import{b as Y,c as b}from"./chunk-JEHTFFFP.js";import{a as _}from"./chunk-DT3FRHDA.js";import{a as G}from"./chunk-SKOK6GUT.js";import{f as l}from"./chunk-ZTIJA6PC.js";import{c as J}from"./chunk-GO53F6H2.js";import{a as C}from"./chunk-OQM7J6KR.js";import{a as g,b as B,c as v,d as R,f as q,g as d,h as S,i as h,j as V}from"./chunk-KHZ5NG5O.js";import{D as A,E,F as T,G as I,M,l as N}from"./chunk-CSP7NLAG.js";import{a as F}from"./chunk-NWFVIQPE.js";import{a}from"./chunk-WW6FQK4I.js";import Z from"node:os";import X from"node:path";import{spawn as oe}from"node:child_process";import p from"node:fs";import s from"node:path";function z(e){let n=s.resolve(e),r=null;for(;;){if(!r&&p.existsSync(s.join(n,"package.json"))&&(r=n),p.existsSync(s.join(n,".git")))return r;let o=s.dirname(n);if(o===n)return null;n=o}}function ie(e){let n=s.resolve(e);for(;;){if(p.existsSync(s.join(n,"bun.lock"))||p.existsSync(s.join(n,"bun.lockb")))return"bun";if(p.existsSync(s.join(n,"pnpm-lock.yaml")))return"pnpm";if(p.existsSync(s.join(n,"package-lock.json")))return"npm";let r=s.dirname(n);if(r===n)return"npm";n=r}}function H(e){let n=s.resolve(e.appDir),r=se(s.join(n,"package.json")),o=`${a.commandName} open`,t=r.scripts?.[a.commandName];if(t&&t!==o)throw new Error(`package.json already defines scripts.${a.commandName} as ${JSON.stringify(t)}; resolve that conflict before setup`);let i=ie(n),c=[];return r.devDependencies?.[a.packageName]!==e.cliVersion&&c.push(ae(i,e.cliVersion)),t!==o&&c.push(ue(i)),{appDir:n,packageManager:i,operations:c}}async function K(e,n){for(let r of e.operations)n.dryRun||await pe(r,e.appDir,n.json)}function k(e){return e.operations.map(n=>`${n.command} ${n.args.map(ce).join(" ")}`)}function se(e){let n;try{n=JSON.parse(p.readFileSync(e,"utf8"))}catch(t){let i=t instanceof Error?t.message:String(t);throw new Error(`could not read ${e}: ${i}`)}if(!n||typeof n!="object"||Array.isArray(n))throw new Error(`${e} must contain a JSON object`);let r=L(Reflect.get(n,"scripts")),o=L(Reflect.get(n,"devDependencies"));return{...r?{scripts:r}:{},...o?{devDependencies:o}:{}}}function L(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let n=Object.entries(e).filter(r=>typeof r[1]=="string");return Object.fromEntries(n)}function ae(e,n){let r=`${a.packageName}@${n}`;switch(e){case"bun":return{command:"bun",args:["add","--dev","--exact",r],description:`install ${r} as an exact dev dependency`};case"pnpm":return{command:"pnpm",args:["add","--save-dev","--save-exact",r],description:`install ${r} as an exact dev dependency`};case"npm":return{command:"npm",args:["install","--save-dev","--save-exact",r],description:`install ${r} as an exact dev dependency`}}}function ce(e){return/^[a-zA-Z0-9_./@=-]+$/.test(e)?e:JSON.stringify(e)}function pe(e,n,r){return new Promise((o,t)=>{let i=oe(e.command,e.args,{cwd:n,stdio:r?["ignore",2,"inherit"]:"inherit"});i.once("error",t),i.once("exit",c=>{c===0?o():t(new Error(`${e.command} exited with code ${c??"unknown"}`))})})}function ue(e){return{command:e,args:e==="bun"?["pm","pkg","set",`scripts.${a.commandName}=${a.commandName} open`]:["pkg","set",`scripts.${a.commandName}=${a.commandName} open`],description:`add the \`${a.commandName}\` package script`}}async function Ge(e,n={}){if(e.includes("--help")||e.includes("-h")){Re();return}let r=de(e),o=n.launchConnectRN??(!r.ci&&!r.yes&&!r.json&&!r.dryRun&&process.stdin.isTTY);try{ve(r);let t=z(r.appDir),i=Y(),c=T(),x=await me(r,i);!x&&!i.installed&&!r.json&&console.log(` ${v("Enable it later with")} ${g("rnx daemon install")}`);let f=await ye(r),ne=r.json?await l.fetchManifest():await S("Checking the rnx runtime",()=>l.fetchManifest()),m=l.resolveVersion(ne,{channel:"stable"}).version,D=F();if(D==="0.0.0")throw new Error("could not resolve the installed rnx CLI version");let P=!1;if(!r.dryRun){let y=M(),j=()=>l.install({version:m,channel:"stable",setActive:!0,protectVersions:y?[y]:[]});P=(r.json?await j():await S(`Preparing runtime ${m}`,j)).installed}let O=i.installed;x&&!i.installed&&!r.dryRun&&(r.json?await b({port:7668,force:!1}):(console.log(`
4
+ import{r as W}from"./chunk-OYCL4URG.js";import{b as Y,c as b}from"./chunk-OGJN774A.js";import{a as _}from"./chunk-7B55WEZX.js";import{a as G}from"./chunk-XMGIQZEE.js";import{f as l}from"./chunk-VLU7O6US.js";import{c as J}from"./chunk-P6G2K65M.js";import{a as C}from"./chunk-6RDUEAX5.js";import{a as g,b as B,c as v,d as R,f as q,g as d,h as S,i as h,j as V}from"./chunk-HB2FQ3AI.js";import{D as A,E,F as T,G as I,M,l as N}from"./chunk-5JATVHNM.js";import{a as F}from"./chunk-6CQWGATK.js";import{a}from"./chunk-FW433UQA.js";import Z from"node:os";import X from"node:path";import{spawn as oe}from"node:child_process";import p from"node:fs";import s from"node:path";function z(e){let n=s.resolve(e),r=null;for(;;){if(!r&&p.existsSync(s.join(n,"package.json"))&&(r=n),p.existsSync(s.join(n,".git")))return r;let o=s.dirname(n);if(o===n)return null;n=o}}function ie(e){let n=s.resolve(e);for(;;){if(p.existsSync(s.join(n,"bun.lock"))||p.existsSync(s.join(n,"bun.lockb")))return"bun";if(p.existsSync(s.join(n,"pnpm-lock.yaml")))return"pnpm";if(p.existsSync(s.join(n,"package-lock.json")))return"npm";let r=s.dirname(n);if(r===n)return"npm";n=r}}function H(e){let n=s.resolve(e.appDir),r=se(s.join(n,"package.json")),o=`${a.commandName} open`,t=r.scripts?.[a.commandName];if(t&&t!==o)throw new Error(`package.json already defines scripts.${a.commandName} as ${JSON.stringify(t)}; resolve that conflict before setup`);let i=ie(n),c=[];return r.devDependencies?.[a.packageName]!==e.cliVersion&&c.push(ae(i,e.cliVersion)),t!==o&&c.push(ue(i)),{appDir:n,packageManager:i,operations:c}}async function K(e,n){for(let r of e.operations)n.dryRun||await pe(r,e.appDir,n.json)}function k(e){return e.operations.map(n=>`${n.command} ${n.args.map(ce).join(" ")}`)}function se(e){let n;try{n=JSON.parse(p.readFileSync(e,"utf8"))}catch(t){let i=t instanceof Error?t.message:String(t);throw new Error(`could not read ${e}: ${i}`)}if(!n||typeof n!="object"||Array.isArray(n))throw new Error(`${e} must contain a JSON object`);let r=L(Reflect.get(n,"scripts")),o=L(Reflect.get(n,"devDependencies"));return{...r?{scripts:r}:{},...o?{devDependencies:o}:{}}}function L(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let n=Object.entries(e).filter(r=>typeof r[1]=="string");return Object.fromEntries(n)}function ae(e,n){let r=`${a.packageName}@${n}`;switch(e){case"bun":return{command:"bun",args:["add","--dev","--exact",r],description:`install ${r} as an exact dev dependency`};case"pnpm":return{command:"pnpm",args:["add","--save-dev","--save-exact",r],description:`install ${r} as an exact dev dependency`};case"npm":return{command:"npm",args:["install","--save-dev","--save-exact",r],description:`install ${r} as an exact dev dependency`}}}function ce(e){return/^[a-zA-Z0-9_./@=-]+$/.test(e)?e:JSON.stringify(e)}function pe(e,n,r){return new Promise((o,t)=>{let i=oe(e.command,e.args,{cwd:n,stdio:r?["ignore",2,"inherit"]:"inherit"});i.once("error",t),i.once("exit",c=>{c===0?o():t(new Error(`${e.command} exited with code ${c??"unknown"}`))})})}function ue(e){return{command:e,args:e==="bun"?["pm","pkg","set",`scripts.${a.commandName}=${a.commandName} open`]:["pkg","set",`scripts.${a.commandName}=${a.commandName} open`],description:`add the \`${a.commandName}\` package script`}}async function Ge(e,n={}){if(e.includes("--help")||e.includes("-h")){Re();return}let r=de(e),o=n.launchConnectRN??(!r.ci&&!r.yes&&!r.json&&!r.dryRun&&process.stdin.isTTY);try{ve(r);let t=z(r.appDir),i=Y(),c=T(),x=await me(r,i);!x&&!i.installed&&!r.json&&console.log(` ${v("Enable it later with")} ${g("rnx daemon install")}`);let f=await ye(r),ne=r.json?await l.fetchManifest():await S("Checking the rnx runtime",()=>l.fetchManifest()),m=l.resolveVersion(ne,{channel:"stable"}).version,D=F();if(D==="0.0.0")throw new Error("could not resolve the installed rnx CLI version");let P=!1;if(!r.dryRun){let y=M(),j=()=>l.install({version:m,channel:"stable",setActive:!0,protectVersions:y?[y]:[]});P=(r.json?await j():await S(`Preparing runtime ${m}`,j)).installed}let O=i.installed;x&&!i.installed&&!r.dryRun&&(r.json?await b({port:7668,force:!1}):(console.log(`
5
5
  ${g("\u25C6")} ${B("Enabling the background service")}`),await b({port:7668,force:!1})),O=!0),f==="electron"&&!r.dryRun&&!G()&&await _(["--yes"]),o&&(console.log(`
6
6
  ${g("\u25C6")} Opening ConnectRN`),await W(["ConnectRN","--driver",f,"--no-describe","--quiet"]));let re=await ge(r,c),te=!1,u=t?H({appDir:t,cliVersion:D}):null,w=await he(r,u);if(w&&u){if(!r.json)for(let y of k(u))console.log(` ${v(r.dryRun?"Would run":"Running")} ${y}`);await K(u,{dryRun:r.dryRun,json:r.json})}r.dryRun||(I({productAnalytics:re,crashReports:te}),E(f));let $={runtimeVersion:m,serviceInstalled:O,repositoryPrepared:w,simulatorDriver:f};return r.json?console.log(JSON.stringify({...$,runtimeInstalled:P,dryRun:r.dryRun,cache:we(m),repositoryOperations:w&&u?k(u):[]},null,2)):console.log(`
7
7
  ${R("\u2713")} ${o?"ConnectRN is open. ":""}rnx is ready.`),$}catch(t){throw J(t),t}}function de(e){let n=e.indexOf("--app"),r=n>=0?e[n+1]:void 0;if(n>=0&&(!r||r.startsWith("-")))throw new Error("--app requires a directory");return{appDir:X.resolve(r??process.cwd()),ci:e.includes("--ci")||C(),dryRun:e.includes("--dry-run"),json:e.includes("--json"),yes:e.includes("--yes")||e.includes("-y"),service:Q(e,"--service","--no-service"),repository:Q(e,"--repo","--no-repo"),productAnalytics:fe(e,"--analytics"),simulatorDriver:le(e)}}function le(e){let n=e.includes("--desktop"),r=e.includes("--browser");if(n&&r)throw new Error("--desktop and --browser cannot be used together");if(n)return"electron";if(r)return"playwright"}function Q(e,n,r){if(e.includes(n)&&e.includes(r))throw new Error(`${n} and ${r} cannot be used together`);if(e.includes(n))return!0;if(e.includes(r))return!1}function fe(e,n){let r=e.find(i=>i.startsWith(`${n}=`)),o=e.indexOf(n),t=r?.slice(n.length+1)??(o>=0?e[o+1]:void 0);if(t!==void 0){if(t==="on"||t==="yes"||t==="true")return!0;if(t==="off"||t==="no"||t==="false")return!1;throw new Error(`${n} must be on or off`)}}async function me(e,n){if(e.ci){if(e.service===!0)throw new Error("--ci cannot install a machine service");return!1}return n.supported?n.installed&&e.service===void 0?(e.json||console.log(` ${R("\u2713")} Background service is ready`),!0):e.service!==void 0?e.service:e.yes?!0:(ee(e,"--service or --no-service"),d("Background service",["Keeps the local bridge and runtime ready between commands.","Agent inspection, interaction, and test commands start much faster."]),h("Enable the background service?",!0)):(e.json||d("Background service",["The persistent service is currently available on macOS and Linux.","rnx will start the bridge when needed on this platform."]),!1)}async function ye(e){if(e.simulatorDriver)return e.simulatorDriver;let n=A();if(n)return n;if(e.ci||e.yes)return"playwright";ee(e,"--desktop or --browser");let r=process.platform==="darwin"?"Desktop downloads a DMG and installs rnx.app.":process.platform==="win32"?"Desktop downloads and runs the rnx installer.":"Desktop downloads the matching rnx AppImage.",o=process.platform==="darwin"?"Desktop app Installs rnx.app from a DMG":process.platform==="win32"?"Desktop app Runs the rnx installer":"Desktop app Installs the matching AppImage";return d("Simulator window",["Browser opens immediately in an isolated Chrome window.",r,"The Desktop app opens in a dedicated native window."]),await V("Where should rnx open?",["Browser (recommended) No additional download",o])===0?"playwright":"electron"}async function ge(e,n){return e.productAnalytics!==void 0?e.productAnalytics:n.configured?n.productAnalytics:e.yes||e.ci||!process.stdin.isTTY?!1:(d("Private by default",["Diagnostics stay off unless you opt in.","Reports can contain package compatibility or an error class.","They never contain your code or app data."]),h("Share bounded diagnostics to improve rnx?",!1))}async function he(e,n){if(!n){if(e.repository===!0)throw new Error("--repo requires a package.json inside a Git repository");return!1}return n.operations.length===0?!0:e.repository!==void 0?e.repository:e.yes||e.ci||!process.stdin.isTTY?!1:(d("Share rnx with your team",["rnx already works here with no project setup.","This only adds an exact rnxsim dev dependency and an rnx script for teammates."]),h(`Add rnx to ${X.basename(n.appDir)}?`,!1))}function ee(e,n){if(!(process.stdin.isTTY&&!e.ci))throw new Error(`non-interactive setup requires ${n}, or --yes to accept defaults`)}function we(e){let n=Z.platform(),r=Z.arch();return{path:N(e),key:`sootsim-runtime-${n}-${r}-${e}`,inputs:{platform:n,arch:r,runtimeVersion:e}}}function ve(e){e.json||q("Run any React Native app in a local simulator. No project setup required.")}function Re(){console.log(`
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.359 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.360 | (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 me,b as We}from"./chunk-7SUBILRJ.js";import{a as Je,b as Qe,d as et}from"./chunk-LDUF6LSD.js";import{a as Le,b as Ae,c as I,d as ce,e as D,f as de,g as Ne,h as ue,i as Fe,j as je,l as Ve,m as ze,n as Ge}from"./chunk-D6HKRX7V.js";import{m as L}from"./chunk-CAE4RZKE.js";import{m as Ye,p as Ze}from"./chunk-HC6VQGIX.js";import{e as Xe}from"./chunk-PBH62D5C.js";import{c as He}from"./chunk-46DL6HR2.js";import{a as qe}from"./chunk-HXWL5B7M.js";import{a as Ke}from"./chunk-MES42ZO3.js";import{b as se,d as Oe}from"./chunk-DNB7X3BQ.js";import{b as Te,f as _e,g as B,h as $,i as M,k as Be,l as ae,m as le,o as Me,p as De,q as U,r as P,s as E}from"./chunk-VVOG3GVC.js";import{f as Ee}from"./chunk-ZTIJA6PC.js";import{a as Ue}from"./chunk-OQM7J6KR.js";import{D as Ce,M as oe,P as ie,R as _,T as Re,l as re}from"./chunk-CSP7NLAG.js";import{a as ne}from"./chunk-WW6FQK4I.js";import{spawn as st,spawnSync as at}from"node:child_process";import O from"node:fs";import Dt from"node:os";import C from"node:path";import{WebSocket as pe}from"ws";function tt(e){return new Error(`could not resolve a native bundle for ${e}. pass an explicit bundle URL or open Connect and choose the app there.`)}function Ut(e,n){return e?.includes("/one/metro-entry.bundle")?"one":typeof n=="string"&&n?"expo":"unknown"}function Et(e,n,t){return`${e}//${n}:${t}`}function Ot(e){if(typeof window>"u")return!1;try{let n=new URL(e);return I(n.hostname)&&I(window.location.hostname)&&n.origin!==window.location.origin}catch{return!1}}async function nt(e,n){let t={...n,cache:n?.cache??"no-store"};return Ot(e)?fetch(`/__fetch-proxy?url=${encodeURIComponent(e)}`,t):fetch(e,t)}function Tt(e){return e==="https:"?443:80}function _t(e){let n=e.pathname||"/";return(n==="/"||n==="")&&!e.search&&!e.hash}async function rt(e){try{let n=await fetch("/__server-scan",{cache:"no-store"});if(!n.ok||!(n.headers.get("content-type")||"").toLowerCase().includes("json"))return null;let t=await n.json();if(!Array.isArray(t))return null;let r=t.find(o=>!!o&&typeof o=="object"&&o.port===e&&typeof o.bundleUrl=="string");return r?{bundleUrl:ue(r.bundleUrl),port:e,framework:typeof r.framework=="string"?r.framework:"unknown",projectName:typeof r.projectName=="string"?r.projectName:void 0}:null}catch{return null}}async function ot(e,n){let t=e.replace(/\/+$/,"");try{let r=await nt(`${t}/`,{headers:{"expo-platform":"ios"}});if(r.ok){let o=await r.json(),i=o?.extra?.expoClient||o?.extra||{},s=typeof o?.launchAsset?.url=="string"?o.launchAsset.url:void 0,a=s?Ne(s,t):void 0;if(a||i.name)return{bundleUrl:ue(a||`${t}${de}`),port:n,framework:Ut(a,i.sdkVersion),projectName:i.name}}}catch{}try{let r=await nt(`${t}/status`);if(r.ok&&(await r.text()).includes("packager-status:running"))return{bundleUrl:`${t}${de}`,port:n,framework:"metro"}}catch{}return null}async function Bt(e,n){try{if(I(new URL(e).hostname)){let t=await rt(n);if(t)return t}}catch{}return ot(e,n)}async function Mt(e){let n=await rt(e);return n||((await Promise.all(Le.map(r=>ot(Ae("http:",r,e),e)))).find(r=>r!==null)??null)}async function it(e){let n=e.trim();if(/^\d+$/.test(n)){let a=parseInt(n,10),l=await Mt(a);if(l)return l;throw tt(`localhost:${a}`)}let t=n.startsWith("http")?n:`http://${n}`,r;try{r=new URL(t)}catch{throw new Error(`could not parse "${e}". pass a dev-server port, a dev-server base URL, or a full bundle URL.`)}let o=r.protocol||"http:",i=r.port?parseInt(r.port,10):Tt(o),s=Et(o,r.hostname,i);if(_t(r)){let a=await Bt(s,i);if(a)return a;throw tt(s)}return{bundleUrl:r.toString(),port:i,framework:"unknown"}}var Lt=12e4,lt=100,At=5e3,ct=1e4,Nt={rn:"/rn",connectrn:"/rn","connect-rn":"/rn",clock:"/app/clock","native-ui":"/app/native-ui",tamagui:"/app/tamagui",settings:"/app/settings",photos:"/app/photos",camera:"/app/camera"};function S(e){return new Promise(n=>setTimeout(n,e))}function dt(e){let n=process.env[e]?.trim();if(!n)return null;let t=Number(n);return Number.isInteger(t)&&t>0?t:null}function Ft(){let e=dt("SOOTSIM_DRIVER_CONNECT_TIMEOUT_MS")??dt("SOOTSIM_PW_CONNECT_TIMEOUT_MS")??Lt;return{timeoutMs:e,hostTimeoutMs:e+At,intervalMs:lt,attempts:Math.max(1,Math.ceil(e/lt))}}function ut(e){return e==="electron"||e==="playwright"}function fe(e,n){return n==="playwright"?e.meta?.sootsimHostDriver==="playwright":e.userAgent?.includes("Electron/")===!0}function jt(e,n){return e.includes("--headless")?!0:e.includes("--headed")?!1:n==="playwright"&&process.platform==="linux"&&!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY?(console.error(" no display detected \u2192 running playwright headless (override with --headed)"),!0):!1}function z(e){return e.trim()}var bt=/^[A-Za-z][A-Za-z0-9+.-]*:/;function Ht(e){let n=e.trim();if(!n)throw new Error("expected <url-or-route>");return bt.test(n)||n.startsWith("/")?n:`/${n}`}function Wt(e){return e!==null&&typeof e=="object"}function Kt(e){let n=e.trim();return n?n.startsWith("/")?!0:bt.test(n)?!/^https?:\/\//i.test(n):!1:!1}async function qt(e,n=!1){let t=ie();mt(e,n,t);let r=ae(e);if((n||r!==null)&&await ge(e,250))return e;if(t&&_(t)&&await ge(t.bridgePort,500))return t.bridgePort;if(t&&_(t))throw new Error(`rnx bridge lockfile is fresh (port ${t.bridgePort}) but the bridge is not reachable. run \`rnx daemon restart\` or \`rnx daemon uninstall\`.`);await Vt();let o=zt(["serve","--quiet","--port",String(e)]),i=null;o.once("exit",(a,l)=>{i=String(a??l??"unknown")}),o.unref();let s=Date.now()+ct;for(;Date.now()<s;){let a=ie();if(mt(e,n,a),a&&_(a)&&await ge(a.bridgePort,250))return console.error(` Started a local bridge on port ${a.bridgePort}. Run \`rnx daemon install\` to keep it ready between commands.`),a.bridgePort;if(i)throw new Error(`rnx bridge exited before becoming ready (exit ${i})`);await S(150)}throw new Error(`rnx bridge did not start within ${Math.round(ct/1e3)}s`)}function mt(e,n,t){if(!(!n||!t||!_(t)||t.bridgePort===e))throw new Error(`${ne.commandName} open: requested bridge port ${e}, but the active daemon owns port ${t.bridgePort}. explicit --port never selects another bridge; stop that daemon or use an isolated SOOTSIM_HOME.`)}async function Vt(){let e=oe();if(e&&O.existsSync(re(e)))return;console.error(" installing rnx engine runtime...");let{runRuntime:n}=await import("./runtime-W7IAAYKW.js");await n(["install"],{})}function zt(e){let n=process.argv[1];return n&&O.existsSync(n)?st(process.execPath,[n,...e],{detached:!0,stdio:"ignore",env:process.env}):st(ne.commandName,e,{detached:!0,stdio:"ignore",env:process.env})}function ge(e,n){return new Promise(t=>{let r=new pe(`ws://127.0.0.1:${e}`,{handshakeTimeout:n}),o=!1,i=s=>{o||(o=!0,r.readyState===pe.OPEN?r.close():r.readyState===pe.CONNECTING&&r.terminate(),t(s))};r.once("open",()=>i(!0)),r.on("error",()=>i(!1)),setTimeout(()=>i(!1),n)})}function we(e){try{let n=new URL(e),t=n.pathname.replace(/\/+$/,"")||"/";return n.searchParams.has("open")||n.searchParams.has("port")||n.searchParams.has("bundle")||n.searchParams.has("demo")||n.pathname.includes("/sootsim/index.html")||t==="/sootsim"||n.pathname==="/__soot"||n.pathname==="/__soot/"||t==="/rn"||/^\/rn\/[^/]+$/i.test(t)||/^\/app\/[^/]+$/i.test(t)||t==="/__soot/rn"||/^\/__soot\/rn\/[^/]+$/i.test(t)||/^\/__soot\/app\/[^/]+$/i.test(t)}catch{return!1}}function Gt(e){try{let n=new URL(e,"http://sootsim.local");if(n.origin!=="http://sootsim.local")return!1;let t=n.pathname.replace(/\/+$/,"")||"/";return t==="/rn"||/^\/rn\/[^/]+$/i.test(t)||/^\/app\/[^/]+$/i.test(t)||t==="/__soot/rn"||/^\/__soot\/rn\/[^/]+$/i.test(t)||/^\/__soot\/app\/[^/]+$/i.test(t)}catch{return!1}}function Jt(e,n){let t=new URL(e,"http://sootsim.local"),r=new URL(n),o=G(r.pathname),i=t.pathname.startsWith("/__soot/")?t.pathname.slice(7):t.pathname;return r.pathname=`${o}${i}`,r.search=t.search,r.hash=t.hash,r.toString()}function Qt(e){try{let n=new URL(e).pathname.replace(/\/+$/,"")||"/";return/^\/preview\/[^/]+$/.test(n)||/^\/build\/.+/.test(n)}catch{return!1}}async function ir(e){let n=z(e);return(await ve(n)).bundleUrl}function Yt(e){try{let n=new URL(e.startsWith("http")?e:`http://${e}`),t=n.pathname||"/";if(t!=="/"&&t!==""||n.search||n.hash||!I(n.hostname))return null;let r=n.port?Number(n.port):n.protocol==="https:"?443:80;return Number.isFinite(r)&&r>0?r:null}catch{return null}}async function ve(e){let n=z(e),t=/^\d+$/.test(n)?Number(n):Yt(n);if(t&&t>0){let r=await je(t);if(r)return{bundleUrl:r.bundleUrl,port:r.port,framework:r.framework,projectName:r.projectName}}return it(n)}function G(e){let n=e.replace(/\/+$/,"")||"/";return n==="/__soot"||n.startsWith("/__soot/")?"/__soot":""}function Zt(e,n){let t=z(e),r=new URL(n),o=G(r.pathname);return r.pathname=`${o}/rn`,r.searchParams.delete("bundle"),r.searchParams.delete("demo"),r.searchParams.delete("app"),r.searchParams.delete("open"),r.searchParams.delete("port"),/^\d+$/.test(t)?r.pathname=`${o}/rn/${t}`:(r.pathname=`${o}/rn`,r.searchParams.set("open",t)),r.toString()}function vt(e){let n=z(e);return/^\d+$/.test(n)||/^https?:\/\//i.test(n)?!0:/^(localhost|127\.0\.0\.1|\[::1\]|[^/]+\.localhost):\d+(?:\/.*)?$/i.test(n)}async function Xt(e,n,t={}){let r=t.resolvedBundle??await ve(e),o=new URL(n),i=G(o.pathname);o.pathname=`${i}/rn`,o.searchParams.delete("open"),o.searchParams.delete("port"),o.searchParams.delete("demo"),o.searchParams.delete("app");let s=t.hot===void 0?r.bundleUrl:Fe(r.bundleUrl,t.hot);return o.searchParams.set("bundle",s),o.toString()}function en(e){return e.startsWith("~/")?C.join(Dt.homedir(),e.slice(2)):C.isAbsolute(e)?e:C.resolve(process.cwd(),e)}function tn(e){let n={},t={};for(let o=0;o<e.length;o++){if(e[o]==="--replace"){let i=e[o+1];i||(console.error(" rnx open: --replace expects <module>=<file>"),process.exit(1));let s=i.indexOf("=");(s<=0||s===i.length-1)&&(console.error(" rnx open: --replace expects <module>=<file>"),process.exit(1));let a=i.slice(0,s).trim(),l=en(i.slice(s+1).trim());O.existsSync(l)||(console.error(` rnx open: replacement file not found: ${l}`),process.exit(1)),n[a]={file:l},o++;continue}if(e[o]==="--remap"){let i=e[o+1],s=i?i.indexOf("="):-1;(!i||s<=0||s===i.length-1)&&(console.error(" rnx open: --remap expects <host:port>=<host:port>"),process.exit(1)),t[i.slice(0,s).trim()]=i.slice(s+1).trim(),o++;continue}}let r={};return Object.keys(n).length>0&&(r.modules=n),Object.keys(t).length>0&&(r.network={remap:t}),r.modules||r.network?r:void 0}async function nn(e){if(!e)return null;let n=await ze(e.bundleUrl);return n?Ke(n):null}async function rn(e){if(O.existsSync(C.join(re(e),"index.html")))return;console.error(` installing configured engine runtime ${e}...`);let n=await Ee.install({version:e,setActive:!1,protectVersions:Re()});console.error(` installed engine runtime ${n.version}`)}function on(e,n){let t=n??(me()?void 0:oe()??void 0);if(!t)return e;let r=new URL(e);if(!I(r.hostname)){if(!n)return e;throw new Error(`runtimeVersion ${t} requires a local rnx host; got ${r.origin}`)}return r.hostname=We(t),r.toString()}function yt(){return Be().shellBaseUrl}function sn(e){return ae(e)?.shellBaseUrl??Te(e)??yt()}async function an(e,n){try{let t=new URL(e),r=t.searchParams.get("bundle")||"";if(!r||!n)return e;let o=Ve({bundleUrl:r,projectDir:n.appDir});if(o.length===0)return e;let i=await ln(o);return i.length===0?e:(t.searchParams.set("appFonts",Ge(i)),t.toString())}catch{return e}}async function ln(e){let n=await Promise.all(e.map(async r=>{let o=new AbortController,i=setTimeout(()=>o.abort(),1500);try{let s=await fetch(r.url,{method:"HEAD",signal:o.signal});return s.status>=200&&s.status<400?r:null}catch{return null}finally{clearTimeout(i)}})),t=[];for(let r of n)r!==null&&t.push(r);return t}async function cn(e,n,t={}){if(!e)return new URL(n).toString();if(we(e))return new URL(e).toString();if(Gt(e))return Jt(e,n);let r=Nt[e.toLowerCase()];if(r){let o=new URL(n),i=G(o.pathname);return o.pathname=`${i}${r}`,o.toString()}return vt(e)?Xt(e,n,t):Zt(e,n)}async function dn(e,n){try{let t=new URL(e),r=t.searchParams.get("bundle")||"";if(!r||!n)return e;let o=Je({bundleUrl:r,projectDir:n.appDir});return!o||o.imageUrl&&!await un(o.imageUrl)?e:(t.searchParams.set("appSplash",Qe(o)),t.toString())}catch{return e}}async function un(e){let n=new AbortController,t=setTimeout(()=>n.abort(),1500);try{let r=await fetch(e,{method:"HEAD",signal:n.signal});return r.status>=200&&r.status<400}catch{return!1}finally{clearTimeout(t)}}async function V(e,n=yt(),t={}){let r=await cn(e,n,t),o=await dn(await an(r,t.project),t.project);if(!t.device)return o;let i=new URL(o);return i.searchParams.set("device",t.device),i.toString()}function pt(e,n){let t=e?.url||e?.origin||n;try{let r=new URL(t);return r.searchParams.delete("bundle"),r.searchParams.delete("demo"),r.searchParams.delete("app"),r.searchParams.delete("open"),r.searchParams.delete("port"),r.searchParams.delete("inspectOpen"),r.searchParams.delete("appFonts"),r.searchParams.delete("appSplash"),r.toString()}catch{return n}}async function mn(e,n,t,r={}){let o=new URL(await V(e,n,r));return o.searchParams.set("inspectOpen",t),o.toString()}async function pn(e,n,t,r={}){let o=r.attempts??30,i=r.intervalMs??500,s=r.minNodeCount??10;for(let a=0;a<o;a++){let l=P(e,{commandTimeoutMs:n,simId:t,simIdSource:"flag"});try{let c=await l.send({type:"evaluate",code:"(async () => (await window.__sootsimTest?.getNodeCount()) || 0)()"});if(typeof c=="number"&&c>s)return{bridge:l,count:c}}catch{}l.close(),await S(i)}return null}function fn(e){if(!e)return null;try{let n=new URL(e);if(n.searchParams.has("bundle")){let t=n.searchParams.get("bundle")||"";try{let r=new URL(t),o=r.pathname.length>36?`...${r.pathname.slice(-36)}`:r.pathname;return`bundle ${r.host}${o}`}catch{return"bundle"}}return n.searchParams.has("port")?`connect :${n.searchParams.get("port")||""}`:n.searchParams.has("open")?`connect ${n.searchParams.get("open")||""}`:n.searchParams.has("demo")?`demo ${n.searchParams.get("demo")||"default"}`:n.pathname.includes("/sootsim/index.html")||n.pathname==="/sootsim/"||n.pathname==="/sootsim"?"embedded rnx":null}catch{return null}}function gn(e){let n=e.indexOf(":");if(n<=0)return e.length>24?`${e.slice(0,21)}\u2026`:e;let t=e.slice(0,n),r=e.slice(n+1),o=r.length>12?`${r.slice(0,8)}\u2026`:r;return t==="TM_SESSION"||t==="CLAUDE_CODE_SESSION_ID"||t==="CODEX_THREAD_ID"?`agent ${o}`:`${t} ${o}`}function sr(e,n){if(e.length===0){console.log(" no sims connected");return}console.log(` connected sims (${e.length}):
4
+ import{a as me,b as We}from"./chunk-UGCUH4IQ.js";import{a as Je,b as Qe,d as et}from"./chunk-3QESF6O2.js";import{a as Le,b as Ae,c as I,d as ce,e as D,f as de,g as Ne,h as ue,i as Fe,j as je,l as Ve,m as ze,n as Ge}from"./chunk-QII4N4MD.js";import{m as L}from"./chunk-XOH5H5ZP.js";import{m as Ye,p as Ze}from"./chunk-BNT7EOTY.js";import{e as Xe}from"./chunk-23P7Q7CA.js";import{c as He}from"./chunk-F4V472HT.js";import{a as qe}from"./chunk-7RQOXQJI.js";import{a as Ke}from"./chunk-CTMZKSXE.js";import{b as se,d as Oe}from"./chunk-4AOLJEUK.js";import{b as Te,f as _e,g as B,h as $,i as M,k as Be,l as ae,m as le,o as Me,p as De,q as U,r as P,s as E}from"./chunk-3NJNPLC4.js";import{f as Ee}from"./chunk-VLU7O6US.js";import{a as Ue}from"./chunk-6RDUEAX5.js";import{D as Ce,M as oe,P as ie,R as _,T as Re,l as re}from"./chunk-5JATVHNM.js";import{a as ne}from"./chunk-FW433UQA.js";import{spawn as st,spawnSync as at}from"node:child_process";import O from"node:fs";import Dt from"node:os";import C from"node:path";import{WebSocket as pe}from"ws";function tt(e){return new Error(`could not resolve a native bundle for ${e}. pass an explicit bundle URL or open Connect and choose the app there.`)}function Ut(e,n){return e?.includes("/one/metro-entry.bundle")?"one":typeof n=="string"&&n?"expo":"unknown"}function Et(e,n,t){return`${e}//${n}:${t}`}function Ot(e){if(typeof window>"u")return!1;try{let n=new URL(e);return I(n.hostname)&&I(window.location.hostname)&&n.origin!==window.location.origin}catch{return!1}}async function nt(e,n){let t={...n,cache:n?.cache??"no-store"};return Ot(e)?fetch(`/__fetch-proxy?url=${encodeURIComponent(e)}`,t):fetch(e,t)}function Tt(e){return e==="https:"?443:80}function _t(e){let n=e.pathname||"/";return(n==="/"||n==="")&&!e.search&&!e.hash}async function rt(e){try{let n=await fetch("/__server-scan",{cache:"no-store"});if(!n.ok||!(n.headers.get("content-type")||"").toLowerCase().includes("json"))return null;let t=await n.json();if(!Array.isArray(t))return null;let r=t.find(o=>!!o&&typeof o=="object"&&o.port===e&&typeof o.bundleUrl=="string");return r?{bundleUrl:ue(r.bundleUrl),port:e,framework:typeof r.framework=="string"?r.framework:"unknown",projectName:typeof r.projectName=="string"?r.projectName:void 0}:null}catch{return null}}async function ot(e,n){let t=e.replace(/\/+$/,"");try{let r=await nt(`${t}/`,{headers:{"expo-platform":"ios"}});if(r.ok){let o=await r.json(),i=o?.extra?.expoClient||o?.extra||{},s=typeof o?.launchAsset?.url=="string"?o.launchAsset.url:void 0,a=s?Ne(s,t):void 0;if(a||i.name)return{bundleUrl:ue(a||`${t}${de}`),port:n,framework:Ut(a,i.sdkVersion),projectName:i.name}}}catch{}try{let r=await nt(`${t}/status`);if(r.ok&&(await r.text()).includes("packager-status:running"))return{bundleUrl:`${t}${de}`,port:n,framework:"metro"}}catch{}return null}async function Bt(e,n){try{if(I(new URL(e).hostname)){let t=await rt(n);if(t)return t}}catch{}return ot(e,n)}async function Mt(e){let n=await rt(e);return n||((await Promise.all(Le.map(r=>ot(Ae("http:",r,e),e)))).find(r=>r!==null)??null)}async function it(e){let n=e.trim();if(/^\d+$/.test(n)){let a=parseInt(n,10),l=await Mt(a);if(l)return l;throw tt(`localhost:${a}`)}let t=n.startsWith("http")?n:`http://${n}`,r;try{r=new URL(t)}catch{throw new Error(`could not parse "${e}". pass a dev-server port, a dev-server base URL, or a full bundle URL.`)}let o=r.protocol||"http:",i=r.port?parseInt(r.port,10):Tt(o),s=Et(o,r.hostname,i);if(_t(r)){let a=await Bt(s,i);if(a)return a;throw tt(s)}return{bundleUrl:r.toString(),port:i,framework:"unknown"}}var Lt=12e4,lt=100,At=5e3,ct=1e4,Nt={rn:"/rn",connectrn:"/rn","connect-rn":"/rn",clock:"/app/clock","native-ui":"/app/native-ui",tamagui:"/app/tamagui",settings:"/app/settings",photos:"/app/photos",camera:"/app/camera"};function S(e){return new Promise(n=>setTimeout(n,e))}function dt(e){let n=process.env[e]?.trim();if(!n)return null;let t=Number(n);return Number.isInteger(t)&&t>0?t:null}function Ft(){let e=dt("SOOTSIM_DRIVER_CONNECT_TIMEOUT_MS")??dt("SOOTSIM_PW_CONNECT_TIMEOUT_MS")??Lt;return{timeoutMs:e,hostTimeoutMs:e+At,intervalMs:lt,attempts:Math.max(1,Math.ceil(e/lt))}}function ut(e){return e==="electron"||e==="playwright"}function fe(e,n){return n==="playwright"?e.meta?.sootsimHostDriver==="playwright":e.userAgent?.includes("Electron/")===!0}function jt(e,n){return e.includes("--headless")?!0:e.includes("--headed")?!1:n==="playwright"&&process.platform==="linux"&&!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY?(console.error(" no display detected \u2192 running playwright headless (override with --headed)"),!0):!1}function z(e){return e.trim()}var bt=/^[A-Za-z][A-Za-z0-9+.-]*:/;function Ht(e){let n=e.trim();if(!n)throw new Error("expected <url-or-route>");return bt.test(n)||n.startsWith("/")?n:`/${n}`}function Wt(e){return e!==null&&typeof e=="object"}function Kt(e){let n=e.trim();return n?n.startsWith("/")?!0:bt.test(n)?!/^https?:\/\//i.test(n):!1:!1}async function qt(e,n=!1){let t=ie();mt(e,n,t);let r=ae(e);if((n||r!==null)&&await ge(e,250))return e;if(t&&_(t)&&await ge(t.bridgePort,500))return t.bridgePort;if(t&&_(t))throw new Error(`rnx bridge lockfile is fresh (port ${t.bridgePort}) but the bridge is not reachable. run \`rnx daemon restart\` or \`rnx daemon uninstall\`.`);await Vt();let o=zt(["serve","--quiet","--port",String(e)]),i=null;o.once("exit",(a,l)=>{i=String(a??l??"unknown")}),o.unref();let s=Date.now()+ct;for(;Date.now()<s;){let a=ie();if(mt(e,n,a),a&&_(a)&&await ge(a.bridgePort,250))return console.error(` Started a local bridge on port ${a.bridgePort}. Run \`rnx daemon install\` to keep it ready between commands.`),a.bridgePort;if(i)throw new Error(`rnx bridge exited before becoming ready (exit ${i})`);await S(150)}throw new Error(`rnx bridge did not start within ${Math.round(ct/1e3)}s`)}function mt(e,n,t){if(!(!n||!t||!_(t)||t.bridgePort===e))throw new Error(`${ne.commandName} open: requested bridge port ${e}, but the active daemon owns port ${t.bridgePort}. explicit --port never selects another bridge; stop that daemon or use an isolated SOOTSIM_HOME.`)}async function Vt(){let e=oe();if(e&&O.existsSync(re(e)))return;console.error(" installing rnx engine runtime...");let{runRuntime:n}=await import("./runtime-LWKXO2WB.js");await n(["install"],{})}function zt(e){let n=process.argv[1];return n&&O.existsSync(n)?st(process.execPath,[n,...e],{detached:!0,stdio:"ignore",env:process.env}):st(ne.commandName,e,{detached:!0,stdio:"ignore",env:process.env})}function ge(e,n){return new Promise(t=>{let r=new pe(`ws://127.0.0.1:${e}`,{handshakeTimeout:n}),o=!1,i=s=>{o||(o=!0,r.readyState===pe.OPEN?r.close():r.readyState===pe.CONNECTING&&r.terminate(),t(s))};r.once("open",()=>i(!0)),r.on("error",()=>i(!1)),setTimeout(()=>i(!1),n)})}function we(e){try{let n=new URL(e),t=n.pathname.replace(/\/+$/,"")||"/";return n.searchParams.has("open")||n.searchParams.has("port")||n.searchParams.has("bundle")||n.searchParams.has("demo")||n.pathname.includes("/sootsim/index.html")||t==="/sootsim"||n.pathname==="/__soot"||n.pathname==="/__soot/"||t==="/rn"||/^\/rn\/[^/]+$/i.test(t)||/^\/app\/[^/]+$/i.test(t)||t==="/__soot/rn"||/^\/__soot\/rn\/[^/]+$/i.test(t)||/^\/__soot\/app\/[^/]+$/i.test(t)}catch{return!1}}function Gt(e){try{let n=new URL(e,"http://sootsim.local");if(n.origin!=="http://sootsim.local")return!1;let t=n.pathname.replace(/\/+$/,"")||"/";return t==="/rn"||/^\/rn\/[^/]+$/i.test(t)||/^\/app\/[^/]+$/i.test(t)||t==="/__soot/rn"||/^\/__soot\/rn\/[^/]+$/i.test(t)||/^\/__soot\/app\/[^/]+$/i.test(t)}catch{return!1}}function Jt(e,n){let t=new URL(e,"http://sootsim.local"),r=new URL(n),o=G(r.pathname),i=t.pathname.startsWith("/__soot/")?t.pathname.slice(7):t.pathname;return r.pathname=`${o}${i}`,r.search=t.search,r.hash=t.hash,r.toString()}function Qt(e){try{let n=new URL(e).pathname.replace(/\/+$/,"")||"/";return/^\/preview\/[^/]+$/.test(n)||/^\/build\/.+/.test(n)}catch{return!1}}async function ir(e){let n=z(e);return(await ve(n)).bundleUrl}function Yt(e){try{let n=new URL(e.startsWith("http")?e:`http://${e}`),t=n.pathname||"/";if(t!=="/"&&t!==""||n.search||n.hash||!I(n.hostname))return null;let r=n.port?Number(n.port):n.protocol==="https:"?443:80;return Number.isFinite(r)&&r>0?r:null}catch{return null}}async function ve(e){let n=z(e),t=/^\d+$/.test(n)?Number(n):Yt(n);if(t&&t>0){let r=await je(t);if(r)return{bundleUrl:r.bundleUrl,port:r.port,framework:r.framework,projectName:r.projectName}}return it(n)}function G(e){let n=e.replace(/\/+$/,"")||"/";return n==="/__soot"||n.startsWith("/__soot/")?"/__soot":""}function Zt(e,n){let t=z(e),r=new URL(n),o=G(r.pathname);return r.pathname=`${o}/rn`,r.searchParams.delete("bundle"),r.searchParams.delete("demo"),r.searchParams.delete("app"),r.searchParams.delete("open"),r.searchParams.delete("port"),/^\d+$/.test(t)?r.pathname=`${o}/rn/${t}`:(r.pathname=`${o}/rn`,r.searchParams.set("open",t)),r.toString()}function vt(e){let n=z(e);return/^\d+$/.test(n)||/^https?:\/\//i.test(n)?!0:/^(localhost|127\.0\.0\.1|\[::1\]|[^/]+\.localhost):\d+(?:\/.*)?$/i.test(n)}async function Xt(e,n,t={}){let r=t.resolvedBundle??await ve(e),o=new URL(n),i=G(o.pathname);o.pathname=`${i}/rn`,o.searchParams.delete("open"),o.searchParams.delete("port"),o.searchParams.delete("demo"),o.searchParams.delete("app");let s=t.hot===void 0?r.bundleUrl:Fe(r.bundleUrl,t.hot);return o.searchParams.set("bundle",s),o.toString()}function en(e){return e.startsWith("~/")?C.join(Dt.homedir(),e.slice(2)):C.isAbsolute(e)?e:C.resolve(process.cwd(),e)}function tn(e){let n={},t={};for(let o=0;o<e.length;o++){if(e[o]==="--replace"){let i=e[o+1];i||(console.error(" rnx open: --replace expects <module>=<file>"),process.exit(1));let s=i.indexOf("=");(s<=0||s===i.length-1)&&(console.error(" rnx open: --replace expects <module>=<file>"),process.exit(1));let a=i.slice(0,s).trim(),l=en(i.slice(s+1).trim());O.existsSync(l)||(console.error(` rnx open: replacement file not found: ${l}`),process.exit(1)),n[a]={file:l},o++;continue}if(e[o]==="--remap"){let i=e[o+1],s=i?i.indexOf("="):-1;(!i||s<=0||s===i.length-1)&&(console.error(" rnx open: --remap expects <host:port>=<host:port>"),process.exit(1)),t[i.slice(0,s).trim()]=i.slice(s+1).trim(),o++;continue}}let r={};return Object.keys(n).length>0&&(r.modules=n),Object.keys(t).length>0&&(r.network={remap:t}),r.modules||r.network?r:void 0}async function nn(e){if(!e)return null;let n=await ze(e.bundleUrl);return n?Ke(n):null}async function rn(e){if(O.existsSync(C.join(re(e),"index.html")))return;console.error(` installing configured engine runtime ${e}...`);let n=await Ee.install({version:e,setActive:!1,protectVersions:Re()});console.error(` installed engine runtime ${n.version}`)}function on(e,n){let t=n??(me()?void 0:oe()??void 0);if(!t)return e;let r=new URL(e);if(!I(r.hostname)){if(!n)return e;throw new Error(`runtimeVersion ${t} requires a local rnx host; got ${r.origin}`)}return r.hostname=We(t),r.toString()}function yt(){return Be().shellBaseUrl}function sn(e){return ae(e)?.shellBaseUrl??Te(e)??yt()}async function an(e,n){try{let t=new URL(e),r=t.searchParams.get("bundle")||"";if(!r||!n)return e;let o=Ve({bundleUrl:r,projectDir:n.appDir});if(o.length===0)return e;let i=await ln(o);return i.length===0?e:(t.searchParams.set("appFonts",Ge(i)),t.toString())}catch{return e}}async function ln(e){let n=await Promise.all(e.map(async r=>{let o=new AbortController,i=setTimeout(()=>o.abort(),1500);try{let s=await fetch(r.url,{method:"HEAD",signal:o.signal});return s.status>=200&&s.status<400?r:null}catch{return null}finally{clearTimeout(i)}})),t=[];for(let r of n)r!==null&&t.push(r);return t}async function cn(e,n,t={}){if(!e)return new URL(n).toString();if(we(e))return new URL(e).toString();if(Gt(e))return Jt(e,n);let r=Nt[e.toLowerCase()];if(r){let o=new URL(n),i=G(o.pathname);return o.pathname=`${i}${r}`,o.toString()}return vt(e)?Xt(e,n,t):Zt(e,n)}async function dn(e,n){try{let t=new URL(e),r=t.searchParams.get("bundle")||"";if(!r||!n)return e;let o=Je({bundleUrl:r,projectDir:n.appDir});return!o||o.imageUrl&&!await un(o.imageUrl)?e:(t.searchParams.set("appSplash",Qe(o)),t.toString())}catch{return e}}async function un(e){let n=new AbortController,t=setTimeout(()=>n.abort(),1500);try{let r=await fetch(e,{method:"HEAD",signal:n.signal});return r.status>=200&&r.status<400}catch{return!1}finally{clearTimeout(t)}}async function V(e,n=yt(),t={}){let r=await cn(e,n,t),o=await dn(await an(r,t.project),t.project);if(!t.device)return o;let i=new URL(o);return i.searchParams.set("device",t.device),i.toString()}function pt(e,n){let t=e?.url||e?.origin||n;try{let r=new URL(t);return r.searchParams.delete("bundle"),r.searchParams.delete("demo"),r.searchParams.delete("app"),r.searchParams.delete("open"),r.searchParams.delete("port"),r.searchParams.delete("inspectOpen"),r.searchParams.delete("appFonts"),r.searchParams.delete("appSplash"),r.toString()}catch{return n}}async function mn(e,n,t,r={}){let o=new URL(await V(e,n,r));return o.searchParams.set("inspectOpen",t),o.toString()}async function pn(e,n,t,r={}){let o=r.attempts??30,i=r.intervalMs??500,s=r.minNodeCount??10;for(let a=0;a<o;a++){let l=P(e,{commandTimeoutMs:n,simId:t,simIdSource:"flag"});try{let c=await l.send({type:"evaluate",code:"(async () => (await window.__sootsimTest?.getNodeCount()) || 0)()"});if(typeof c=="number"&&c>s)return{bridge:l,count:c}}catch{}l.close(),await S(i)}return null}function fn(e){if(!e)return null;try{let n=new URL(e);if(n.searchParams.has("bundle")){let t=n.searchParams.get("bundle")||"";try{let r=new URL(t),o=r.pathname.length>36?`...${r.pathname.slice(-36)}`:r.pathname;return`bundle ${r.host}${o}`}catch{return"bundle"}}return n.searchParams.has("port")?`connect :${n.searchParams.get("port")||""}`:n.searchParams.has("open")?`connect ${n.searchParams.get("open")||""}`:n.searchParams.has("demo")?`demo ${n.searchParams.get("demo")||"default"}`:n.pathname.includes("/sootsim/index.html")||n.pathname==="/sootsim/"||n.pathname==="/sootsim"?"embedded rnx":null}catch{return null}}function gn(e){let n=e.indexOf(":");if(n<=0)return e.length>24?`${e.slice(0,21)}\u2026`:e;let t=e.slice(0,n),r=e.slice(n+1),o=r.length>12?`${r.slice(0,8)}\u2026`:r;return t==="TM_SESSION"||t==="CLAUDE_CODE_SESSION_ID"||t==="CODEX_THREAD_ID"?`agent ${o}`:`${t} ${o}`}function sr(e,n){if(e.length===0){console.log(" no sims connected");return}console.log(` connected sims (${e.length}):
5
5
  `);for(let t of e){let r=t.lockedBy&&t.lockExpiresAt?`locked by ${gn(t.lockedBy)} (${Math.max(0,Math.round((t.lockExpiresAt-Date.now())/1e3))}s)`:"",o=[t.isPrimary?"primary":"",t.id===n?"selected":"",t.readyState,t.userVisible===!1?"hidden":t.userVisible===!0?"visible":"",t.attachedCliCount&&t.attachedCliCount>0?"in use":"",t.userFocused?"focused":"",r].filter(Boolean);console.log(` ${t.id}${o.length?` [${o.join(", ")}]`:""}`);let i=fn(t.url);if(i)console.log(` loaded: ${i}`);else if(t.url){let a=t.url.length>96?`${t.url.slice(0,93)}\u2026`:t.url;console.log(` url: ${a}`)}else t.origin&&console.log(` origin: ${t.origin}`);let s=hn(t);s&&console.log(` engine: ${s}`),t.title&&console.log(` title: ${t.title}`),t.visibilityState&&t.visibilityState!=="visible"&&console.log(` visibility: ${t.visibilityState}`),console.log(` connected: ${ft(Date.now()-t.connectedAt)}`),t.lastActiveAt&&t.lastActiveAt>0&&console.log(` last active: ${ft(Date.now()-t.lastActiveAt)}`)}}function hn(e){let n=e.url||e.origin||"";if(!n)return null;try{let t=new URL(n).port;return t==="5173"?"dev \u2014 local source (:5173)":t==="3000"?"Contrast app embedded (:3000)":me()?`dev \u2014 local build (:${t||"?"})`:`runtime \u2014 published engine (:${t||"?"})`}catch{return null}}function ft(e){let n=Math.max(0,Math.round(e/1e3));return n<60?`${n}s ago`:n<3600?`${Math.round(n/60)}m ago`:n<86400?`${Math.round(n/3600)}h ago`:`${Math.round(n/86400)}d ago`}async function ar(e,n,t,r={}){let o=r.attempts??30,i=r.intervalMs??500;for(let s=0;s<o;s++){let a=P(e,{commandTimeoutMs:n});try{let c=(await a.listSims()).find(t);if(c)return c}catch{}finally{a.close()}await S(i)}return null}async function wn(e,n,t,r,o={}){let i=o.attempts??30,s=o.intervalMs??500,a=!!r&&Number.isInteger(r)&&r>1,l=()=>a&&r!==void 0&&!be(r);for(let c=0;c<i;c++){if(l())return{kind:"host-exit"};let u=P(e,{commandTimeoutMs:n});try{let g=(await u.listSims()).find(t);if(g)return l()?{kind:"host-exit"}:{kind:"match",sim:g}}catch{}finally{u.close()}if(l())return{kind:"host-exit"};await S(s)}return{kind:"timeout"}}async function bn(e,n,t,r={}){let o=r.attempts??20,i=r.intervalMs??250;for(let s=0;s<o;s++){let a=P(e,{commandTimeoutMs:n});try{let c=(await a.listSims()).find(u=>u.id===t);if(!c||c.readyState!=="open")return!0}catch{return!0}finally{a.close()}await S(i)}return!1}function vn(e){let n=e.meta;if(!n||n.sootsimHostDriver!=="playwright")return null;let t=Number(n.sootsimHostPid);return!Number.isInteger(t)||t<=1||t===process.pid?null:t}function yn(e){if(!e.connectAckFile)return!1;try{return O.writeFileSync(e.connectAckFile,`${JSON.stringify({connectedAt:Date.now(),pid:e.pid??null})}
6
6
  `,{flag:"w"}),!0}catch{return!1}}function gt(e){if(e.diagnosticLogPath)try{let n=O.readFileSync(e.diagnosticLogPath,"utf8").trim();if(!n){console.error(` ${C.basename(e.diagnosticLogPath)} was empty`);return}let t=n.length>4e3?`\u2026
7
7
  ${n.slice(-4e3)}`:n;console.error(` ${C.basename(e.diagnosticLogPath)}:`),console.error(t)}catch(n){let t=n instanceof Error?n.message:String(n);console.error(` failed to read ${C.basename(e.diagnosticLogPath)}: ${t}`)}}function be(e){try{return process.kill(e,0),!0}catch(n){return n?.code==="EPERM"}}async function Sn(e,n=2500){let t=Date.now()+n;for(;Date.now()<t;){if(!be(e))return!0;await S(100)}return!be(e)}function xn(e){let n=at("ps",["-o","command=","-p",String(e)],{encoding:"utf8",stdio:["ignore","pipe","pipe"]}),t=at("ps",["eww","-o","command=","-p",String(e)],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});if(n.status!==0||t.status!==0)return!1;let r=(n.stdout||"").trimEnd(),o=(t.stdout||"").trimEnd();return(o.startsWith(r)?o.slice(r.length):o).includes("SOOTSIM_PW_URL=")}async function he(e,n){let t=new Set(n),r=new Set;for(let o of e){if(!t.has(o.id))continue;let i=vn(o);i&&r.add(i)}for(let o of r){if(!xn(o)){console.log(` skipped pid ${o}: not a rnx playwright host (stale sim record)`);continue}try{process.kill(o,"SIGTERM")}catch{}if(await Sn(o)){console.log(` closed playwright host process ${o}`);continue}try{process.kill(o,"SIGKILL"),console.log(` force-closed playwright host process ${o}`)}catch{}}}function J(e,n){if(n){let o=n.trim(),i=e.find(s=>s.id===o);if(!i)throw new Error(`no sim connected with id ${o}`);return i}let t=e.find(o=>o.isPrimary&&o.readyState==="open");if(t)return t;let r=e.find(o=>o.readyState==="open");if(r)return r;throw new Error("no sim connected")}function ht(e,n,t,r=!1){let[o,i]=[e,n.url].map(s=>{if(!s)return s;try{let a=new URL(s);if(a.searchParams.has("sootsimConfig"))return a.searchParams.set("sootsimConfig","[redacted]"),a.toString()}catch{}return s});if(r){console.log(` Opened ConnectRN [${t}]`);return}console.log(` ${t==="current sim"?"loaded":"opened"}: ${o} [${t}]`),console.log(` current sim: ${n.id}`),console.log(JSON.stringify({simId:n.id,url:i},null,2))}async function wt(e,n,t){if(t.includes("--no-describe"))return;let r=process.env.SOOTSIM_QUIET_TARGET_NOTICE;process.env.SOOTSIM_QUIET_TARGET_NOTICE="1";try{await $n(e,n,{stableMs:150,maxMs:400});let o=P(e,{commandTimeoutMs:3e3,simId:n,cliLabel:"open --describe",simIdSource:"flag"});try{let i=null;try{i=await o.send({type:"evaluate",code:Ye})}catch{}if(i&&!(i.flag===!0&&!i.loadingText&&Ze(i))){let u=i.loadingText?`still showing "${i.loadingText}"`:i.flag!==!0?"guest ready event has not fired":i.targets<=0?"no visible app content is inspectable yet":"app tree is still stabilizing";console.log(` app still loading: ${u} (nodes: ${i.nodes}, targets: ${i.targets})`),console.log(" before interacting, run: rnx wait ready --max-ms 120000")}let a=`(async () => {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.359 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.360 | (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 m={"--help":{type:"boolean",short:"-h"},"--version":{type:"boolean",short:"-V"},"--verbose":{type:"boolean",short:"-v"},"--port":{type:"number",short:"-p"},"--device":{type:"string",short:"-d"},"--theme":{type:"string",short:"-t"},"--headless":{type:"boolean"},"--driver":{type:"string"},"--sim":{type:"string"},"--session":{type:"string"},"--tab":{type:"string"}},p=new Set(["list","describe","find","get","do","wait","network","logs","shell"]),b=new Set(["do","get","wait","shell","debug"]),d=new Set(["detox","maestro","record","film","storage","permissions","perf","screenshot","state","reset","camera","mode","debug","timeline","what-happened","shell","assert","device","open","list","use","claim","close","compat","report-issue","desktop","login","logout","auth","setup","serve","daemon","runtime","upgrade","version","skill","config","cleanup","app-fonts","agent-wrapper","agent",...p]);function u(c){let n=c.slice(2),e={command:null,commandArgs:[],globalFlags:{},help:!1,version:!1,verbose:!1},s=0;for(;s<n.length;){let o=n[s];if(o==="--"){e.commandArgs.push(...n.slice(s+1));break}let i=Object.entries(m).find(([a,r])=>a===o||r.short===o);if(i){let[a,r]=i,l=a.replace(/^--/,"");if(r.type==="boolean")e.globalFlags[l]=!0,s++;else{let t=n[s+1];if(t===void 0||t.startsWith("-")){console.error(` warning: ${o} requires a value`),s++;continue}if(r.type==="number"){let g=Number(t);if(Number.isNaN(g)){console.error(` warning: ${o} requires a number, got "${t}"`),s+=2;continue}e.globalFlags[l]=g}else e.globalFlags[l]=t;s+=2}continue}if(!e.command&&!o.startsWith("-")){let a=o.indexOf("-");if(a>0){let r=o.slice(0,a),l=o.slice(a+1);if(b.has(r)&&l.length>0){e.command=r;let t=n.slice(s+1);e.commandArgs=[l,...t[0]==="--"?t.slice(1):t];break}}if(d.has(o)){e.command=o;let r=n.slice(s+1);e.commandArgs=r[0]==="--"?r.slice(1):r;break}e.commandArgs=n.slice(s);break}e.commandArgs.push(o),s++}return e.help=!!e.globalFlags.help,e.version=!!e.globalFlags.version,e.verbose=!!e.globalFlags.verbose,e}export{p as a,u as b};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.359 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.360 | (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 r}from"./chunk-2WKY6CCY.js";function o(){if(!r())return null;let t=process.env.VITE_POSTHOG_API_KEY||"";if(!t)return null;let e=process.env.CONTRAST_POSTHOG_HOST||process.env.VITE_POSTHOG_HOST||"https://us.i.posthog.com";return{apiKey:t,host:e.replace(/\/+$/,"")}}function i(t,e){return t.trim().slice(0,e)}function s(t){let e=t.kind==="package_incompatibility"?{package_name:i(t.packageName,160),package_version:i(t.packageVersion,80),...t.unsupportedApi?{unsupported_api:i(t.unsupportedApi,160)}:{}}:{error_class:i(t.errorClass,160)};return{event:t.kind,distinct_id:"rnx-cli-diagnostic",properties:e}}var n=[];function a(t){r()&&n.push(t)}function c(t){let e=t instanceof Error?t.constructor.name:typeof t;a({kind:"error_shape",errorClass:e})}async function l(){if(n.length===0)return;let t=o();if(!t){n.length=0;return}let e=n.splice(0,n.length).map(s);try{await fetch(`${t.host}/batch/`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({api_key:t.apiKey,batch:e}),signal:AbortSignal.timeout(2e3)})}catch{}}export{s as a,a as b,c,l as d};
4
+ import{b as r}from"./chunk-GVZBI566.js";function o(){if(!r())return null;let t=process.env.VITE_POSTHOG_API_KEY||"";if(!t)return null;let e=process.env.CONTRAST_POSTHOG_HOST||process.env.VITE_POSTHOG_HOST||"https://us.i.posthog.com";return{apiKey:t,host:e.replace(/\/+$/,"")}}function i(t,e){return t.trim().slice(0,e)}function s(t){let e=t.kind==="package_incompatibility"?{package_name:i(t.packageName,160),package_version:i(t.packageVersion,80),...t.unsupportedApi?{unsupported_api:i(t.unsupportedApi,160)}:{}}:{error_class:i(t.errorClass,160)};return{event:t.kind,distinct_id:"rnx-cli-diagnostic",properties:e}}var n=[];function a(t){r()&&n.push(t)}function c(t){let e=t instanceof Error?t.constructor.name:typeof t;a({kind:"error_shape",errorClass:e})}async function l(){if(n.length===0)return;let t=o();if(!t){n.length=0;return}let e=n.splice(0,n.length).map(s);try{await fetch(`${t.host}/batch/`,{method:"POST",headers:{"content-type":"application/json"},body:JSON.stringify({api_key:t.apiKey,batch:e}),signal:AbortSignal.timeout(2e3)})}catch{}}export{s as a,a as b,c,l as d};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.359 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.360 | (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};