rnxsim 0.1.314 → 0.1.315

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 (155) hide show
  1. package/dist-cli/bin.js +5 -5
  2. package/dist-cli/chunks/{agent-7YBDCYMA.js → agent-CBU2WDKV.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-2GHFBHCR.js → agent-wrapper-UNB4R27L.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-RSNVPQSU.js → app-fonts-YMLRF3JD.js} +2 -2
  5. package/dist-cli/chunks/{assert-XCMX3XJX.js → assert-5N6HUCL5.js} +2 -2
  6. package/dist-cli/chunks/{auth-B442HRAX.js → auth-BHDR3A6G.js} +2 -2
  7. package/dist-cli/chunks/{beta-XJ55JK3M.js → beta-LWUVCPYK.js} +2 -2
  8. package/dist-cli/chunks/{camera-UGYSSLIK.js → camera-CNO6B2JZ.js} +2 -2
  9. package/dist-cli/chunks/{chunk-QLXXE7GE.js → chunk-25VCR44B.js} +1 -1
  10. package/dist-cli/chunks/{chunk-5L7ELDQL.js → chunk-26CSIR76.js} +2 -2
  11. package/dist-cli/chunks/{chunk-APWNH3A4.js → chunk-26WMWUH4.js} +1 -1
  12. package/dist-cli/chunks/{chunk-JEMCD5E4.js → chunk-2JZ53D4A.js} +1 -1
  13. package/dist-cli/chunks/{chunk-JZS3Q37N.js → chunk-2POODCTW.js} +2 -2
  14. package/dist-cli/chunks/{chunk-O6TRIZNS.js → chunk-4LTBK3ZN.js} +2 -2
  15. package/dist-cli/chunks/{chunk-D2FNUWAB.js → chunk-54MIRTFE.js} +2 -2
  16. package/dist-cli/chunks/{chunk-3S753SNQ.js → chunk-56H6EVO4.js} +2 -2
  17. package/dist-cli/chunks/{chunk-VC7V76U3.js → chunk-657SQG4D.js} +1 -1
  18. package/dist-cli/chunks/{chunk-SBV4IK4H.js → chunk-6ZMRJPKI.js} +1 -1
  19. package/dist-cli/chunks/{chunk-QGRI2Z4M.js → chunk-AOGGOC4V.js} +2 -2
  20. package/dist-cli/chunks/{chunk-X6H76EKP.js → chunk-BPCDO7ST.js} +2 -2
  21. package/dist-cli/chunks/{chunk-KR4JON7D.js → chunk-C5O5CTXJ.js} +1 -1
  22. package/dist-cli/chunks/{chunk-VQVMLW4U.js → chunk-CMM64PPR.js} +1 -1
  23. package/dist-cli/chunks/{chunk-PFQTUKQ4.js → chunk-D3M36D7O.js} +3 -3
  24. package/dist-cli/chunks/{chunk-TUOFAWXT.js → chunk-DNCNFZ7V.js} +1 -1
  25. package/dist-cli/chunks/{chunk-E5T4XSJ3.js → chunk-FNTTIR2P.js} +2 -2
  26. package/dist-cli/chunks/{chunk-B57XUKY3.js → chunk-H362IX2I.js} +2 -2
  27. package/dist-cli/chunks/{chunk-46ZOLOYA.js → chunk-J6HMTUZH.js} +2 -2
  28. package/dist-cli/chunks/{chunk-32WOTSTR.js → chunk-JZ6VTZ5B.js} +3 -3
  29. package/dist-cli/chunks/{chunk-YFSDM7AX.js → chunk-KQSJVNFE.js} +2 -2
  30. package/dist-cli/chunks/{chunk-GQSL4USA.js → chunk-L4JZKVCC.js} +2 -2
  31. package/dist-cli/chunks/{chunk-HAXW27SS.js → chunk-LP2BTEJ6.js} +2 -2
  32. package/dist-cli/chunks/{chunk-2JNSK774.js → chunk-LT6UC7I3.js} +2 -2
  33. package/dist-cli/chunks/{chunk-EG32ML36.js → chunk-MCKQH4AM.js} +2 -2
  34. package/dist-cli/chunks/{chunk-7SV3RPRW.js → chunk-MF7WUHQ3.js} +2 -2
  35. package/dist-cli/chunks/{chunk-EAC34EQS.js → chunk-MSSY4EEZ.js} +1 -1
  36. package/dist-cli/chunks/{chunk-VUKKYPZN.js → chunk-N5ZCYP5F.js} +2 -2
  37. package/dist-cli/chunks/{chunk-277AEQZX.js → chunk-NCKAD3V7.js} +2 -2
  38. package/dist-cli/chunks/{chunk-MCWPL644.js → chunk-O2KRHVTU.js} +2 -2
  39. package/dist-cli/chunks/{chunk-RWZY5427.js → chunk-OF2HTH25.js} +2 -2
  40. package/dist-cli/chunks/{chunk-PG5RZCTN.js → chunk-OXS2IWO2.js} +2 -2
  41. package/dist-cli/chunks/{chunk-7ZC35MOU.js → chunk-PVL7XSPN.js} +1 -1
  42. package/dist-cli/chunks/{chunk-SGMVFFMK.js → chunk-PVPAP3TV.js} +1 -1
  43. package/dist-cli/chunks/{chunk-FXUAC6D5.js → chunk-PXNAZYGV.js} +1 -1
  44. package/dist-cli/chunks/{chunk-YWI3UEVX.js → chunk-QR3HTFRB.js} +2 -2
  45. package/dist-cli/chunks/{chunk-WGGRJDRE.js → chunk-QR7MWAWE.js} +1 -1
  46. package/dist-cli/chunks/{chunk-KWCYKQIQ.js → chunk-RJIEZ2NY.js} +1 -1
  47. package/dist-cli/chunks/{chunk-RZKU2K3J.js → chunk-RVM4EZ4E.js} +2 -2
  48. package/dist-cli/chunks/{chunk-IZAHPAN6.js → chunk-SZKSFMWS.js} +1 -1
  49. package/dist-cli/chunks/{chunk-J62KM5TB.js → chunk-TEL7G234.js} +2 -2
  50. package/dist-cli/chunks/{chunk-UHZLOHGP.js → chunk-U2HNIHBY.js} +1 -1
  51. package/dist-cli/chunks/{chunk-XLZ5FNRT.js → chunk-UROXJVY3.js} +2 -2
  52. package/dist-cli/chunks/{chunk-XULEACM4.js → chunk-WM32MGTJ.js} +2 -2
  53. package/dist-cli/chunks/{chunk-QOJJJWJE.js → chunk-WMZ7NJAO.js} +3 -3
  54. package/dist-cli/chunks/{chunk-ZBSJO4NB.js → chunk-WUXCH6WN.js} +1 -1
  55. package/dist-cli/chunks/{chunk-AMG5E6CC.js → chunk-XOXGC3EH.js} +1 -1
  56. package/dist-cli/chunks/{chunk-MJYK3N2I.js → chunk-XSSHENNY.js} +2 -2
  57. package/dist-cli/chunks/{chunk-TAX4UT2N.js → chunk-XZ6O67AR.js} +1 -1
  58. package/dist-cli/chunks/{chunk-P7XL2E73.js → chunk-Y2MWQKOS.js} +3 -3
  59. package/dist-cli/chunks/{chunk-C2NL26TD.js → chunk-YY24QI25.js} +1 -1
  60. package/dist-cli/chunks/{chunk-7OOPFSQS.js → chunk-ZWX6DDIS.js} +2 -2
  61. package/dist-cli/chunks/{cleanup-EYLGCA6Z.js → cleanup-F3NUJ3SL.js} +2 -2
  62. package/dist-cli/chunks/cli-version-XIW6O3FG.js +4 -0
  63. package/dist-cli/chunks/{compat-TLJYHB4E.js → compat-AX2SEPTH.js} +2 -2
  64. package/dist-cli/chunks/{config-4JWUOEXK.js → config-4QQO5JVU.js} +2 -2
  65. package/dist-cli/chunks/{control-HPAOYF4N.js → control-OCKKSOWA.js} +2 -2
  66. package/dist-cli/chunks/daemon-N5VLMYKQ.js +4 -0
  67. package/dist-cli/chunks/{debug-4BKXF6KI.js → debug-T6MWVEVX.js} +3 -3
  68. package/dist-cli/chunks/{desktop-ZQ6ZD2S6.js → desktop-NCW7R7CB.js} +3 -3
  69. package/dist-cli/chunks/{detox-WNPASSS3.js → detox-G6GITO2X.js} +2 -2
  70. package/dist-cli/chunks/{device-BXLXVG3V.js → device-7BTEJCTH.js} +2 -2
  71. package/dist-cli/chunks/{diagnose-3QX7W5RW.js → diagnose-SC5LACE3.js} +2 -2
  72. package/dist-cli/chunks/{disk-cleanup-KSWKI7WB.js → disk-cleanup-KK56QQZA.js} +2 -2
  73. package/dist-cli/chunks/drivers-NPGVBWMG.js +4 -0
  74. package/dist-cli/chunks/{film-GDMR33VO.js → film-WGYEHGIA.js} +3 -3
  75. package/dist-cli/chunks/flow-KQBIBM3N.js +4 -0
  76. package/dist-cli/chunks/help-G7CAKI65.js +4 -0
  77. package/dist-cli/chunks/{hidden-runtime-alias-S2GTDX3T.js → hidden-runtime-alias-CWTZWH3L.js} +2 -2
  78. package/dist-cli/chunks/{home-paths-QRCDLTTV.js → home-paths-EBT4XHAS.js} +2 -2
  79. package/dist-cli/chunks/inspect-CCPZXVDU.js +4 -0
  80. package/dist-cli/chunks/install-desktop-NZ3VGTQZ.js +4 -0
  81. package/dist-cli/chunks/{login-IJAPUZHI.js → login-GSYOTGVQ.js} +4 -4
  82. package/dist-cli/chunks/{logout-QMXDFU2X.js → logout-JPRIR7YK.js} +2 -2
  83. package/dist-cli/chunks/{maestro-ZXU3YCVX.js → maestro-LXKDNO5M.js} +3 -3
  84. package/dist-cli/chunks/{maestro-generate-PYB5QY7K.js → maestro-generate-5ZIKOU53.js} +3 -3
  85. package/dist-cli/chunks/{mode-WGUCL5FZ.js → mode-N3QHXCES.js} +2 -2
  86. package/dist-cli/chunks/{optional-demo-registry-WH2O6H36.js → optional-demo-registry-XDH6X24N.js} +2 -2
  87. package/dist-cli/chunks/{perf-TOD3UFAH.js → perf-VOPL26FM.js} +2 -2
  88. package/dist-cli/chunks/{permissions-I5BRJGTB.js → permissions-CZFKM4UD.js} +2 -2
  89. package/dist-cli/chunks/{record-ZYL2FYSK.js → record-FODSOGMA.js} +3 -3
  90. package/dist-cli/chunks/{report-issue-TAI6DYZO.js → report-issue-FBPCZKOV.js} +2 -2
  91. package/dist-cli/chunks/reset-3H35GFO3.js +4 -0
  92. package/dist-cli/chunks/runtime-4OVFRXV5.js +4 -0
  93. package/dist-cli/chunks/{screenshot-command-7ANLODZY.js → screenshot-command-7S3FYVO7.js} +3 -3
  94. package/dist-cli/chunks/{screenshot-layers-A7FYXSVU.js → screenshot-layers-CDYHPNC3.js} +2 -2
  95. package/dist-cli/chunks/{screenshots-capture-WT2ZY6CB.js → screenshots-capture-EBIIY2YU.js} +2 -2
  96. package/dist-cli/chunks/{serve-TG5WKA4V.js → serve-NELNSCZP.js} +2 -2
  97. package/dist-cli/chunks/{setup-PCWLD22V.js → setup-DF5ZDDIV.js} +2 -2
  98. package/dist-cli/chunks/{skills-27ZHWCQS.js → skills-E2QZF6WZ.js} +2 -2
  99. package/dist-cli/chunks/{state-ZQVY46ZO.js → state-MBZDKZ7U.js} +2 -2
  100. package/dist-cli/chunks/{storage-OYC57C4X.js → storage-J5BMNVXM.js} +2 -2
  101. package/dist-cli/chunks/store-U3DXC7HH.js +4 -0
  102. package/dist-cli/chunks/telemetry-XIPJVT5E.js +4 -0
  103. package/dist-cli/chunks/{timeline-RAJJFQT6.js → timeline-MC6N5BHY.js} +2 -2
  104. package/dist-cli/chunks/{upgrade-OEFNZRIP.js → upgrade-7UTU53DH.js} +2 -2
  105. package/dist-cli/chunks/upload-2M2KOTYI.js +4 -0
  106. package/dist-cli/chunks/{version-NIXTY6PL.js → version-VNACNYQK.js} +2 -2
  107. package/dist-cli/chunks/{web-XBUTBVGR.js → web-MGJ2TUKR.js} +2 -2
  108. package/dist-cli/chunks/{what-happened-YNHRFUDX.js → what-happened-7DLKH3OD.js} +2 -2
  109. package/dist-lib/agent-daemon-client.cjs +1 -1
  110. package/dist-lib/agent-events.cjs +1 -1
  111. package/dist-lib/agent-identity.cjs +1 -1
  112. package/dist-lib/agent-sessions.cjs +1 -1
  113. package/dist-lib/attached-projects.cjs +1 -1
  114. package/dist-lib/auth/shared-session.cjs +1 -1
  115. package/dist-lib/backend-origin.cjs +1 -1
  116. package/dist-lib/beta.cjs +1 -1
  117. package/dist-lib/beta.mjs +1 -1
  118. package/dist-lib/bridge-constants.cjs +1 -1
  119. package/dist-lib/bridge-contract.cjs +1 -1
  120. package/dist-lib/cli-constants.cjs +1 -1
  121. package/dist-lib/config.cjs +1 -1
  122. package/dist-lib/detox/index.cjs +1 -1
  123. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  124. package/dist-lib/home-paths.cjs +1 -1
  125. package/dist-lib/host/bridge-host.cjs +1 -1
  126. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  127. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  128. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  129. package/dist-lib/host/websocket-proxy.cjs +1 -1
  130. package/dist-lib/index.cjs +1 -1
  131. package/dist-lib/jump-to-source-babel.cjs +1 -1
  132. package/dist-lib/menu.cjs +1 -1
  133. package/dist-lib/menu.mjs +1 -1
  134. package/dist-lib/metro.cjs +1 -1
  135. package/dist-lib/profiles.cjs +1 -1
  136. package/dist-lib/public-brand.cjs +1 -1
  137. package/dist-lib/render-mode.cjs +1 -1
  138. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  139. package/dist-lib/sdk.cjs +1 -1
  140. package/dist-lib/sdk.mjs +1 -1
  141. package/dist-lib/skills.cjs +1 -1
  142. package/dist-lib/vite.cjs +1 -1
  143. package/package.json +1 -1
  144. package/dist-cli/chunks/cli-version-LL2UGIHE.js +0 -4
  145. package/dist-cli/chunks/daemon-OYLASXLE.js +0 -4
  146. package/dist-cli/chunks/drivers-EPIEFF7P.js +0 -4
  147. package/dist-cli/chunks/flow-NKMPBYCJ.js +0 -4
  148. package/dist-cli/chunks/help-OGCBHOKA.js +0 -4
  149. package/dist-cli/chunks/inspect-FUYMOZPY.js +0 -4
  150. package/dist-cli/chunks/install-desktop-FR6YKW7Y.js +0 -4
  151. package/dist-cli/chunks/reset-7YGYKQPQ.js +0 -4
  152. package/dist-cli/chunks/runtime-B4JO6QRI.js +0 -4
  153. package/dist-cli/chunks/store-32HSPZHI.js +0 -4
  154. package/dist-cli/chunks/telemetry-PBJR7XHR.js +0 -4
  155. package/dist-cli/chunks/upload-LQJITLKK.js +0 -4
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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{existsSync as s}from"node:fs";import{basename as a,dirname as p,join as l}from"node:path";import{fileURLToPath as m,pathToFileURL as c}from"node:url";var u="packages/sootsim/scripts/demo-app-registry.ts",f=8;function A(o){let r=o;for(let e=0;e<f;e++){if(a(r)==="node_modules")return null;let n=l(r,u);if(s(n))return n;let i=p(r);if(i===r)return null;r=i}return null}var t=null;async function S(){if(t)return t;let o=A(p(m(import.meta.url)));if(!o)return t=[],t;try{let r=await import(c(o).href);t=Array.isArray(r.APPS)?r.APPS:[]}catch{t=[]}return t}function D(){return t??[]}function O(o){let r=t;return t=o,{restore:()=>{t=r}}}export{A as a,S as b,D as c,O as d};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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 c="sootsim-agent-prompt-v1";function r(n){return typeof n=="string"?n.trim():""}function m(n){let e=r(n.text);if(!e)return"";let t=r(n.displayText),s=r(n.inspectSummary),o=r(n.inspectTrace);return!!s||!!o||/[\r\n]/.test(e)||!!t&&t!==e?JSON.stringify({__sootsimAgentPrompt:c,text:e,displayText:t,inspectSummary:s,inspectTrace:o}):e}function u(n){let e=r(n);if(!e)return null;try{let t=JSON.parse(e);if(t.__sootsimAgentPrompt!==c)return{text:e};let s=r(typeof t.text=="string"?t.text:void 0);if(!s)return null;let o=r(typeof t.displayText=="string"?t.displayText:void 0),i=r(typeof t.inspectSummary=="string"?t.inspectSummary:void 0),p=r(typeof t.inspectTrace=="string"?t.inspectTrace:void 0);return{text:s,...o?{displayText:o}:{},...i?{inspectSummary:i}:{},...p?{inspectTrace:p}:{}}}catch{return{text:e}}}export{m as a,u as b};
@@ -1,5 +1,5 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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{I as m,o as P,q as a}from"./chunk-AMG5E6CC.js";import l from"fs";import c from"path";var s="default",S="profiles.json",i=1;function o(e){let r=e.trim();if(!r)throw new Error("profile id is required");if(!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(r))throw new Error("profile ids must start with a letter or number and contain only letters, numbers, dot, dash, or underscore");if(r==="."||r==="..")throw new Error(`invalid profile id: ${r}`);return r}function d(){return c.join(a(),S)}function I(e){return`sootsim-profile-${o(e)}`}function h(e){return c.join(P(),"Partitions",I(e))}function A(e){return c.join(a(),"playwright",o(e))}function u(){try{let e=JSON.parse(l.readFileSync(d(),"utf8"));if(!e||e.version!==i)return{version:i,profiles:[]};let r=Array.isArray(e.profiles)?e.profiles.filter(t=>!!t&&typeof t.id=="string"&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string").map(t=>({id:o(t.id),createdAt:t.createdAt,updatedAt:t.updatedAt})):[];return{version:i,profiles:r}}catch{return{version:i,profiles:[]}}}function x(e){return[...e].sort((r,t)=>r.id===s?-1:t.id===s?1:r.id.localeCompare(t.id))}function p(e){if(e.profiles.some(t=>t.id===s))return{...e,profiles:x(e.profiles)};let r=new Date().toISOString();return{version:i,profiles:x([{id:s,createdAt:r,updatedAt:r},...e.profiles])}}function g(e){m();let r=p(e),t=`${d()}.tmp`;return l.writeFileSync(t,`${JSON.stringify(r,null,2)}
4
+ import{I as m,o as P,q as a}from"./chunk-XOXGC3EH.js";import l from"fs";import c from"path";var s="default",S="profiles.json",i=1;function o(e){let r=e.trim();if(!r)throw new Error("profile id is required");if(!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(r))throw new Error("profile ids must start with a letter or number and contain only letters, numbers, dot, dash, or underscore");if(r==="."||r==="..")throw new Error(`invalid profile id: ${r}`);return r}function d(){return c.join(a(),S)}function I(e){return`sootsim-profile-${o(e)}`}function h(e){return c.join(P(),"Partitions",I(e))}function A(e){return c.join(a(),"playwright",o(e))}function u(){try{let e=JSON.parse(l.readFileSync(d(),"utf8"));if(!e||e.version!==i)return{version:i,profiles:[]};let r=Array.isArray(e.profiles)?e.profiles.filter(t=>!!t&&typeof t.id=="string"&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string").map(t=>({id:o(t.id),createdAt:t.createdAt,updatedAt:t.updatedAt})):[];return{version:i,profiles:r}}catch{return{version:i,profiles:[]}}}function x(e){return[...e].sort((r,t)=>r.id===s?-1:t.id===s?1:r.id.localeCompare(t.id))}function p(e){if(e.profiles.some(t=>t.id===s))return{...e,profiles:x(e.profiles)};let r=new Date().toISOString();return{version:i,profiles:x([{id:s,createdAt:r,updatedAt:r},...e.profiles])}}function g(e){m();let r=p(e),t=`${d()}.tmp`;return l.writeFileSync(t,`${JSON.stringify(r,null,2)}
5
5
  `,"utf8"),l.renameSync(t,d()),r}function y(){return g(u()).profiles}function E(e){let r=o(e);return y().find(t=>t.id===r)??null}function _(e=s){let r=o(e),t=E(r);return t||D(r)}function D(e){let r=o(e),t=p(u());if(t.profiles.some(w=>w.id===r))throw new Error(`profile already exists: ${r}`);let f=new Date().toISOString(),n={id:r,createdAt:f,updatedAt:f};return g({version:i,profiles:[...t.profiles,n]}),n}function F(e){let r=o(e);if(r===s)throw new Error("the default profile cannot be deleted; clear it instead");let t=p(u()),f=t.profiles.find(n=>n.id===r);if(!f)throw new Error(`profile not found: ${r}`);return g({version:i,profiles:t.profiles.filter(n=>n.id!==r)}),v(r),f}function v(e){let r=o(e);for(let t of[h(r),A(r)])try{l.rmSync(t,{recursive:!0,force:!0})}catch{}}export{A as a,y as b,_ as c,D as d,F as e,v as f};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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{createInterface as e}from"readline";var s=()=>e({input:process.stdin,output:process.stdout});function i(r){return new Promise(n=>{let t=s();t.question(r,o=>{t.close(),n(o.trim())})})}async function l(r,n=!0){let t=n?"[Y/n]":"[y/N]";if(!process.stdin.isTTY)return console.log(` ${r} ${t} ${n?"y":"n"} (non-interactive)`),n;let o=await i(` ${r} ${t} `);return o===""?n:o.toLowerCase().startsWith("y")}export{l as a};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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 p={"--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"}},m=new Set(["list","describe","find","get","do","wait","network","logs","shell"]),d=new Set(["do","get","wait","shell","debug"]),b=new Set(["detox","maestro","record","film","storage","permissions","perf","screenshot","state","reset","camera","mode","inspect","debug","timeline","what-happened","shell","assert","device","open","list","use","claim","close","compat","report-issue","desktop","login","logout","auth","setup","serve","daemon","runtime","upgrade","update","version","skill","config","cleanup","app-fonts","agent-wrapper","agent",...m]);function u(g){let n=g.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(p).find(([a,t])=>a===o||t.short===o);if(i){let[a,t]=i,l=a.replace(/^--/,"");if(t.type==="boolean")e.globalFlags[l]=!0,s++;else{let r=n[s+1];if(r===void 0||r.startsWith("-")){console.error(` warning: ${o} requires a value`),s++;continue}if(t.type==="number"){let c=Number(r);if(Number.isNaN(c)){console.error(` warning: ${o} requires a number, got "${r}"`),s+=2;continue}e.globalFlags[l]=c}else e.globalFlags[l]=r;s+=2}continue}if(!e.command&&!o.startsWith("-")){let a=o.indexOf("-");if(a>0){let t=o.slice(0,a),l=o.slice(a+1);if(d.has(t)&&l.length>0){e.command=t;let r=n.slice(s+1);e.commandArgs=[l,...r[0]==="--"?r.slice(1):r];break}}if(b.has(o)){e.command=o;let t=n.slice(s+1);e.commandArgs=t[0]==="--"?t.slice(1):t;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{m as a,u as b};
@@ -1,5 +1,5 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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{l as n}from"./chunk-2JNSK774.js";var i=[];for(let[t,e]of Object.entries(n))e.cliFlag&&i.push({name:`--${e.cliFlag}`,short:e.cliFlagShort?`-${e.cliFlagShort}`:void 0,key:t,type:e.type==="enum"?"string":e.type,description:e.description,options:e.options,default:e.default});var a=i;function g(){let t=[];for(let e of a){let s=e.short?`${e.short}, ${e.name}`:` ${e.name}`,o=e.options?` [${e.options.join("|")}]`:"",r=e.default!==void 0?` (default: ${e.default})`:"";t.push(` ${s.padEnd(24)}${e.description}${o}${r}`)}return t.join(`
4
+ import{l as n}from"./chunk-LT6UC7I3.js";var i=[];for(let[t,e]of Object.entries(n))e.cliFlag&&i.push({name:`--${e.cliFlag}`,short:e.cliFlagShort?`-${e.cliFlagShort}`:void 0,key:t,type:e.type==="enum"?"string":e.type,description:e.description,options:e.options,default:e.default});var a=i;function g(){let t=[];for(let e of a){let s=e.short?`${e.short}, ${e.name}`:` ${e.name}`,o=e.options?` [${e.options.join("|")}]`:"",r=e.default!==void 0?` (default: ${e.default})`:"";t.push(` ${s.padEnd(24)}${e.description}${o}${r}`)}return t.join(`
5
5
  `)}export{g as a};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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 n=Object.freeze({name:"rnx",packageName:"rnxsim",commandName:"rnxsim",domain:"rnxsim.com",origin:"https://rnxsim.com"});export{n as a};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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-HAXW27SS.js";import{J as u,l}from"./chunk-AMG5E6CC.js";function m(t){return t.replace(/^\[|\]$/g,"").toLowerCase()}function R(t){let n=m(t);return n==="localhost"||n.endsWith(".localhost")||n==="0.0.0.0"||n==="::1"||/^127(?:\.\d{1,3}){3}$/.test(n)}import i from"fs";import e from"path";import{fileURLToPath as d}from"url";var s;function g(){if(s!==void 0)return s;let t=e.dirname(d(import.meta.url));for(let n=0;n<12&&t!==e.dirname(t);n++){if(i.existsSync(e.join(t,"packages/sootsim-engine/package.json"))&&i.existsSync(e.join(t,"public/sootsim")))return s=t,t;t=e.dirname(t)}return s=null,null}function p(){if(process.env.SOOTSIM_HOME&&u())return null;let t=g();if(!t)return null;let n=e.join(t,"public/sootsim");return i.existsSync(e.join(n,"index.html"))&&i.existsSync(e.join(n,"engine/index.html"))&&i.existsSync(e.join(n,"engine-tenant/worker.js"))?n:null}function x(){let t=p();if(t)return t;let n=u();if(!n)return null;let o=l(n);return i.existsSync(e.join(o,"index.html"))?o:null}var a=".runtime.localhost";function H(t){let n=t.trim();if(!c(n))throw new Error(`invalid rnx runtime version: ${t}`);let r=Buffer.from(n,"utf8").toString("hex").match(/.{1,60}/g);if(!r)throw new Error(`invalid rnx runtime version: ${t}`);return`${r.join(".")}${a}`}function f(t){return t.toLowerCase().endsWith(a)}function h(t){if(!f(t))return null;let n=t.slice(0,-a.length).split(".");if(n.length===0||n.some(r=>!/^[0-9a-f]{1,60}$/i.test(r)))return null;let o=n.join("");if(o.length%2!==0)return null;try{let r=Buffer.from(o,"hex").toString("utf8");return c(r)?r:null}catch{return null}}function v(t){let n=l(t);return i.existsSync(e.join(n,"index.html"))?n:null}function T(t){if(!f(t))return x();let n=h(t);return n?v(n):null}export{R as a,p as b,H as c,f as d,h as e,T as f};
4
+ import{a as c}from"./chunk-LP2BTEJ6.js";import{J as u,l}from"./chunk-XOXGC3EH.js";function m(t){return t.replace(/^\[|\]$/g,"").toLowerCase()}function R(t){let n=m(t);return n==="localhost"||n.endsWith(".localhost")||n==="0.0.0.0"||n==="::1"||/^127(?:\.\d{1,3}){3}$/.test(n)}import i from"fs";import e from"path";import{fileURLToPath as d}from"url";var s;function g(){if(s!==void 0)return s;let t=e.dirname(d(import.meta.url));for(let n=0;n<12&&t!==e.dirname(t);n++){if(i.existsSync(e.join(t,"packages/sootsim-engine/package.json"))&&i.existsSync(e.join(t,"public/sootsim")))return s=t,t;t=e.dirname(t)}return s=null,null}function p(){if(process.env.SOOTSIM_HOME&&u())return null;let t=g();if(!t)return null;let n=e.join(t,"public/sootsim");return i.existsSync(e.join(n,"index.html"))&&i.existsSync(e.join(n,"engine/index.html"))&&i.existsSync(e.join(n,"engine-tenant/worker.js"))?n:null}function x(){let t=p();if(t)return t;let n=u();if(!n)return null;let o=l(n);return i.existsSync(e.join(o,"index.html"))?o:null}var a=".runtime.localhost";function H(t){let n=t.trim();if(!c(n))throw new Error(`invalid rnx runtime version: ${t}`);let r=Buffer.from(n,"utf8").toString("hex").match(/.{1,60}/g);if(!r)throw new Error(`invalid rnx runtime version: ${t}`);return`${r.join(".")}${a}`}function f(t){return t.toLowerCase().endsWith(a)}function h(t){if(!f(t))return null;let n=t.slice(0,-a.length).split(".");if(n.length===0||n.some(r=>!/^[0-9a-f]{1,60}$/i.test(r)))return null;let o=n.join("");if(o.length%2!==0)return null;try{let r=Buffer.from(o,"hex").toString("utf8");return c(r)?r:null}catch{return null}}function v(t){let n=l(t);return i.existsSync(e.join(n,"index.html"))?n:null}function T(t){if(!f(t))return x();let n=h(t);return n?v(n):null}export{R as a,p as b,H as c,f as d,h as e,T as f};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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 t=Object.freeze({id:"ios",displayName:"iOS",isIOS:!0,isAndroid:!1,select:e=>e.ios}),r=Object.freeze({id:"android",displayName:"Android",isIOS:!1,isAndroid:!0,select:e=>e.android}),i=Object.freeze({ios:t,android:r});
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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 O,b as B}from"./chunk-SBV4IK4H.js";import{M as T,N,O as _,P as W,g as F}from"./chunk-AMG5E6CC.js";var Ie="http://localhost:7668/";function H(e){if(typeof e=="number")return Number.isInteger(e)&&e>0?e:null;if(typeof e!="string")return null;let t=e.trim();if(!t)return null;let r=Number(t);return Number.isInteger(r)&&r>0?r:null}function X(e){let t=H(e);return t===null?0:t}function V(e={}){let t=H(e.explicitPort);return t!==null?t:7668+X(e.portOffset)}var z=5173;var Q=2e3;function Pe(e){let t=e-7668;return t<0||t>Q?null:`http://localhost:${z+t}/`}var ye=4001,Te="sootsim close";import{existsSync as Z,mkdirSync as ee,readFileSync as te,rmSync as E,writeFileSync as re}from"fs";import{tmpdir as ne}from"os";import{dirname as ie,join as oe,resolve as se}from"path";var v=1,G="SOOTSIM_CLI_CURRENT_SIM_PATH",le=["SOOTSIM_CLI_IDENTITY","TM_SESSION","CLAUDE_CODE_SESSION_ID","CODEX_THREAD_ID","TERM_SESSION_ID","ITERM_SESSION_ID","TMUX_PANE","STY","KITTY_WINDOW_ID","WEZTERM_PANE","ALACRITTY_WINDOW_ID","WINDOWID","VSCODE_INJECTION"],j=/^(?:tmux|screen)|^tm$/i;function q(e,t=20){let r=e,n=O(e);if(!n||n<=1){let o=B(e);return e>1&&o&&!j.test(o)?e:null}for(let o=0;o<t;o++){let s=B(n);if(s&&j.test(s))return r;let u=O(n);if(!u||u<=1)return s?n:r;r=n,n=u}return n}function x(){for(let t of le){let r=process.env[t];if(r&&r.trim())return{key:`${t}:${r.trim()}`,source:t,stable:!0}}let e=q(process.ppid);return e&&e>1?{key:`gppid-${e}`,source:"grand-ppid",stable:!0}:{key:`pid-${process.ppid}`,source:"ppid",stable:!1}}function ce(){return x().key}function ve(){return q(process.ppid)}function k(){if(process.env[G])return se(process.env[G]);let e=ce();return oe(ne(),`sootsim-current-sim-${e}.json`)}function de(){let e=k();if(!Z(e))return null;try{let t=JSON.parse(te(e,"utf8"));return t.version!==v||typeof t.simId!="string"||!t.simId.trim()||typeof t.updatedAt!="string"?(E(e,{force:!0}),null):{version:v,simId:t.simId.trim(),updatedAt:t.updatedAt}}catch{return E(e,{force:!0}),null}}function R(){return de()?.simId||null}function xe(e){let t=e.trim();if(!t)return;let r=k();ee(ie(r),{recursive:!0}),re(r,JSON.stringify({version:v,simId:t,updatedAt:new Date().toISOString()},null,2)+`
4
+ import{a as O,b as B}from"./chunk-6ZMRJPKI.js";import{M as T,N,O as _,P as W,g as F}from"./chunk-XOXGC3EH.js";var Ie="http://localhost:7668/";function H(e){if(typeof e=="number")return Number.isInteger(e)&&e>0?e:null;if(typeof e!="string")return null;let t=e.trim();if(!t)return null;let r=Number(t);return Number.isInteger(r)&&r>0?r:null}function X(e){let t=H(e);return t===null?0:t}function V(e={}){let t=H(e.explicitPort);return t!==null?t:7668+X(e.portOffset)}var z=5173;var Q=2e3;function Pe(e){let t=e-7668;return t<0||t>Q?null:`http://localhost:${z+t}/`}var ye=4001,Te="sootsim close";import{existsSync as Z,mkdirSync as ee,readFileSync as te,rmSync as E,writeFileSync as re}from"fs";import{tmpdir as ne}from"os";import{dirname as ie,join as oe,resolve as se}from"path";var v=1,G="SOOTSIM_CLI_CURRENT_SIM_PATH",le=["SOOTSIM_CLI_IDENTITY","TM_SESSION","CLAUDE_CODE_SESSION_ID","CODEX_THREAD_ID","TERM_SESSION_ID","ITERM_SESSION_ID","TMUX_PANE","STY","KITTY_WINDOW_ID","WEZTERM_PANE","ALACRITTY_WINDOW_ID","WINDOWID","VSCODE_INJECTION"],j=/^(?:tmux|screen)|^tm$/i;function q(e,t=20){let r=e,n=O(e);if(!n||n<=1){let o=B(e);return e>1&&o&&!j.test(o)?e:null}for(let o=0;o<t;o++){let s=B(n);if(s&&j.test(s))return r;let u=O(n);if(!u||u<=1)return s?n:r;r=n,n=u}return n}function x(){for(let t of le){let r=process.env[t];if(r&&r.trim())return{key:`${t}:${r.trim()}`,source:t,stable:!0}}let e=q(process.ppid);return e&&e>1?{key:`gppid-${e}`,source:"grand-ppid",stable:!0}:{key:`pid-${process.ppid}`,source:"ppid",stable:!1}}function ce(){return x().key}function ve(){return q(process.ppid)}function k(){if(process.env[G])return se(process.env[G]);let e=ce();return oe(ne(),`sootsim-current-sim-${e}.json`)}function de(){let e=k();if(!Z(e))return null;try{let t=JSON.parse(te(e,"utf8"));return t.version!==v||typeof t.simId!="string"||!t.simId.trim()||typeof t.updatedAt!="string"?(E(e,{force:!0}),null):{version:v,simId:t.simId.trim(),updatedAt:t.updatedAt}}catch{return E(e,{force:!0}),null}}function R(){return de()?.simId||null}function xe(e){let t=e.trim();if(!t)return;let r=k();ee(ie(r),{recursive:!0}),re(r,JSON.stringify({version:v,simId:t,updatedAt:new Date().toISOString()},null,2)+`
5
5
  `)}function J(){E(k(),{force:!0})}var h="http://localhost:5173/";import ue from"node:fs";import S from"node:path";import{WebSocket as D}from"ws";var C=null;function M(){return N().filter(e=>W(e))}function Y(e){let t=S.resolve(e);for(;;){if(ue.existsSync(S.join(t,".git")))return t;let r=S.dirname(t);if(r===t)return null;t=r}}function K(e,t){let r=S.relative(e,t);return r===""||r!==".."&&!r.startsWith(`..${S.sep}`)&&!S.isAbsolute(r)}function ae(){let e=M();if(e.length===0)return null;if(process.env.SOOTSIM_BRIDGE_PORT!==void 0||process.env.PORT_OFFSET!==void 0){let r=V({explicitPort:process.env.SOOTSIM_BRIDGE_PORT,portOffset:process.env.PORT_OFFSET}),n=e.find(o=>o.bridgePort===r);if(n)return n}let t=null;try{t=process.cwd()}catch{}if(t){let r=Y(t),n=e.filter(o=>{let s=Y(o.cwd);return r&&s?r===s:K(t,o.cwd)||K(o.cwd,t)});if(n.length>0)return n.find(o=>o.bridgePort===7668)??n[0]}return e.find(r=>r.bridgePort===7668)??e[0]}function me(){let e=F();if(C?.homeDir===e)return C.world;let t=fe();return C={homeDir:e,world:t},t}function fe(){let e=ae();if(e)return{source:"dev-bridge",bridgePort:e.bridgePort,shellBaseUrl:e.shellPort?`http://localhost:${e.shellPort}/`:h};let t=T();return t&&_(t)?{source:"daemon",bridgePort:t.bridgePort,shellBaseUrl:t.runtimePort>0?`http://localhost:${t.runtimePort}/`:h}:{source:"default",bridgePort:7668,shellBaseUrl:h}}function ge(e){let t=M().find(n=>n.bridgePort===e);if(t)return{source:"dev-bridge",shellBaseUrl:t.shellPort?`http://localhost:${t.shellPort}/`:h};let r=T();return r&&_(r)&&r.bridgePort===e?{source:"daemon",shellBaseUrl:r.runtimePort>0?`http://localhost:${r.runtimePort}/`:h}:null}function Fe(e){let t;try{let o=new URL(e);t=o.port?Number(o.port):o.protocol==="https:"?443:80}catch{return null}if(!Number.isFinite(t)||t<=0)return null;let r=M().find(o=>o.shellPort===t||o.runtimePort===t||o.bridgePort===t);if(r)return r.bridgePort;let n=T();return n&&_(n)&&(n.runtimePort===t||n.bridgePort===t)?n.bridgePort:null}function pe(){return me().bridgePort}function Ne(e,t){let r=ge(e),n=r?.source==="dev-bridge"?"dev bridge":r?.source==="daemon"?"daemon bridge":"bridge",o=r?.source==="dev-bridge"?`dev-bridges/${e}.json`:r?.source==="daemon"?"daemon.json":"no lockfile",s=t??r?.shellBaseUrl;process.stderr.write(` \u2192 ${n} :${e} (${s?`shell ${s}, `:""}${o})
6
6
  `)}var A=class extends Error{lock;constructor(t,r){super(t),this.name="BridgeSimLockedError",this.lock=r}};function he(e){return e==="flag"?"via --sim":e==="saved"?"saved via `rnxsim use`":"primary fallback \u2014 no sim pinned"}function We(e,t={}){let r=new Set,n=t.port??pe(),o=t.port!==void 0,s=t.commandTimeoutMs??15e3,u,a="none",I=new Set(t.stripBooleanFlags??[]),P=new Set(t.stripValueFlags??[]);for(let l=0;l<e.length;l++){let i=e[l];if(i==="--port"||i==="-p"){r.add(l),o=!0,l+1<e.length&&(r.add(l+1),n=Number(e[l+1])),l++;continue}if(i.startsWith("--port=")){r.add(l),o=!0,n=Number(i.slice(7));continue}if(i==="--timeout"){r.add(l),l+1<e.length&&(r.add(l+1),s=Number(e[l+1])),l++;continue}if(i==="--sim"||i==="--session"||i==="--tab"){r.add(l),l+1<e.length&&(r.add(l+1),u=e[l+1]?.trim()||void 0,a="flag"),l++;continue}let c=i.startsWith("--sim=")?i.slice(6):i.startsWith("--session=")?i.slice(10):i.startsWith("--tab=")?i.slice(6):void 0;if(c!==void 0){r.add(l),u=c.trim()||void 0,a="flag";continue}if(I.has(i)){r.add(l);continue}P.has(i)&&(r.add(l),l+1<e.length&&r.add(l+1),l++)}if(!u){let l=R();l&&(u=l.trim()||void 0,a="saved")}return{positional:e.filter((l,i)=>!r.has(i)),wsPort:n,explicitPort:o,simId:u,simIdSource:a,commandTimeoutMs:s}}function Se(e,t={}){let r=1,n=t.commandTimeoutMs??15e3,o=new Map,s=new D(`ws://localhost:${e}`),u=x(),a=new Promise((i,c)=>{s.on("open",()=>{try{s.send(JSON.stringify({type:"bridge:hello",id:0,cliIdentityKey:u.key,cliIdentitySource:u.source,cliLabel:t.cliLabel}))}catch{}i()}),s.on("error",d=>{let m=d.message?`: ${d.message}`:"";c(new Error(`could not connect to ws://localhost:${e}${m}`))})});a.catch(()=>{});let I=!1,P=!1;function l(i,c){if(P||process.env.SOOTSIM_QUIET_TARGET_NOTICE==="1"||i.startsWith("bridge:")||i==="focus"||i==="close")return;P=!0;let d=c??"primary",m=he(c?t.simIdSource:"none");process.stderr.write(` \u2192 ${d} (${m})
7
7
  `)}return s.on("message",i=>{let c;try{c=JSON.parse(i.toString())}catch{return}if(c.id===0)return;let d=o.get(c.id);d&&(o.delete(c.id),c._otherCliCount>0&&!I&&(I=!0,process.stderr.write(`
@@ -1,5 +1,5 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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{o as d}from"./chunk-AMG5E6CC.js";import{chmodSync as S,existsSync as f,mkdirSync as A,readFileSync as k,rmSync as o,writeFileSync as y}from"node:fs";import{dirname as c,join as D,resolve as m}from"node:path";var s=1,p="SOOTSIM_SHARED_AUTH_FILE",u="https://contrast.dev";function w(){let t=process.env[p];return t?.trim()?c(m(t)):d()}function a(){let t=process.env[p];return t?.trim()?m(t):D(w(),"desktop-auth.json")}function g(t){if(!t||typeof t!="object")return null;let e=t;return typeof e.id!="string"||!e.id.trim()?null:{id:e.id.trim(),name:typeof e.name=="string"?e.name:void 0,email:typeof e.email=="string"?e.email:void 0,image:typeof e.image=="string"?e.image:void 0,githubUsername:typeof e.githubUsername=="string"?e.githubUsername:void 0,isAdmin:e.isAdmin===!0,teams:Array.isArray(e.teams)?e.teams.map(r=>{if(!r||typeof r!="object")return null;let n=r;return typeof n.id!="string"||typeof n.name!="string"?null:{id:n.id,name:n.name,role:n.role==="owner"?"owner":"member",githubOrg:typeof n.githubOrg=="string"?n.githubOrg:null}}).filter(r=>!!r):void 0}}function v(t){if(!t||typeof t!="object")return null;let e=t;if(e.version!==s||typeof e.token!="string"||!e.token.trim())return null;let r=typeof e.origin=="string"&&e.origin.trim()?e.origin.trim():u,n=e.source==="cli"||e.source==="electron"||e.source==="browser"||e.source==="unknown"?e.source:"unknown",i=typeof e.updatedAt=="string"&&e.updatedAt?e.updatedAt:new Date().toISOString(),h=typeof e.validatedAt=="string"&&e.validatedAt?e.validatedAt:void 0;return{version:s,token:e.token.trim(),user:g(e.user),origin:r,source:n,updatedAt:i,validatedAt:h}}function b(){let t=a();if(!f(t))return null;try{let e=JSON.parse(k(t,"utf8")),r=v(e);return r||(o(t,{force:!0}),null)}catch{return o(t,{force:!0}),null}}function O(t){let e=a();A(c(e),{recursive:!0});let r={version:s,token:t.token.trim(),user:t.user?g(t.user):null,origin:t.origin?.trim()||u,source:t.source,updatedAt:t.updatedAt||new Date().toISOString(),validatedAt:t.validatedAt};y(e,JSON.stringify(r,null,2)+`
4
+ import{o as d}from"./chunk-XOXGC3EH.js";import{chmodSync as S,existsSync as f,mkdirSync as A,readFileSync as k,rmSync as o,writeFileSync as y}from"node:fs";import{dirname as c,join as D,resolve as m}from"node:path";var s=1,p="SOOTSIM_SHARED_AUTH_FILE",u="https://contrast.dev";function w(){let t=process.env[p];return t?.trim()?c(m(t)):d()}function a(){let t=process.env[p];return t?.trim()?m(t):D(w(),"desktop-auth.json")}function g(t){if(!t||typeof t!="object")return null;let e=t;return typeof e.id!="string"||!e.id.trim()?null:{id:e.id.trim(),name:typeof e.name=="string"?e.name:void 0,email:typeof e.email=="string"?e.email:void 0,image:typeof e.image=="string"?e.image:void 0,githubUsername:typeof e.githubUsername=="string"?e.githubUsername:void 0,isAdmin:e.isAdmin===!0,teams:Array.isArray(e.teams)?e.teams.map(r=>{if(!r||typeof r!="object")return null;let n=r;return typeof n.id!="string"||typeof n.name!="string"?null:{id:n.id,name:n.name,role:n.role==="owner"?"owner":"member",githubOrg:typeof n.githubOrg=="string"?n.githubOrg:null}}).filter(r=>!!r):void 0}}function v(t){if(!t||typeof t!="object")return null;let e=t;if(e.version!==s||typeof e.token!="string"||!e.token.trim())return null;let r=typeof e.origin=="string"&&e.origin.trim()?e.origin.trim():u,n=e.source==="cli"||e.source==="electron"||e.source==="browser"||e.source==="unknown"?e.source:"unknown",i=typeof e.updatedAt=="string"&&e.updatedAt?e.updatedAt:new Date().toISOString(),h=typeof e.validatedAt=="string"&&e.validatedAt?e.validatedAt:void 0;return{version:s,token:e.token.trim(),user:g(e.user),origin:r,source:n,updatedAt:i,validatedAt:h}}function b(){let t=a();if(!f(t))return null;try{let e=JSON.parse(k(t,"utf8")),r=v(e);return r||(o(t,{force:!0}),null)}catch{return o(t,{force:!0}),null}}function O(t){let e=a();A(c(e),{recursive:!0});let r={version:s,token:t.token.trim(),user:t.user?g(t.user):null,origin:t.origin?.trim()||u,source:t.source,updatedAt:t.updatedAt||new Date().toISOString(),validatedAt:t.validatedAt};y(e,JSON.stringify(r,null,2)+`
5
5
  `);try{S(e,384)}catch{}return r}function l(){o(a(),{force:!0})}async function E(t){let e=b();if(!e?.token)return null;let r=t||e.origin||u;try{let n=await fetch(`${r.replace(/\/$/,"")}/api/auth/me`,{headers:{authorization:`Bearer ${e.token}`}});if(n.status===401)return l(),null;if(!n.ok)return e;let i=await n.json();return i.user?.id?O({token:e.token,user:i.user,origin:r,source:e.source,validatedAt:new Date().toISOString()}):(l(),null)}catch{return e}}export{b as a,O as b,l as c,E as d};
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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 Ct,c as jt}from"./chunk-TAX4UT2N.js";import{a as At,b as Dt}from"./chunk-JEMCD5E4.js";import{a as de}from"./chunk-PG5RZCTN.js";import{k as Bt}from"./chunk-D2FNUWAB.js";import{a as oe,b as D,c as A,d as Me,e as ae,f as X,g as pe,h as ye,i as Pt,j as Et,k as Ne,l as _t}from"./chunk-YFSDM7AX.js";import{A as Tt,B as Mt,C as Nt,F as Ft,H as Ot,J as ue,K as Rt,Q as Je,a as Ie,b as pt,c as mt,d as ft,e as gt,f as yt,g as ht,h as bt,i as wt,j as xt,k as je,l as qe,r as Le,s as $t,t as St,u as ge,v as vt,w as Te,x as We,y as kt,z as It}from"./chunk-ZBSJO4NB.js";import{a as nt}from"./chunk-KWCYKQIQ.js";import{a as Q}from"./chunk-MCWPL644.js";import{e as rt,j as it,o as at,q as lt,s as ct,t as dt,u as ut,v as ce}from"./chunk-XLZ5FNRT.js";import{c as Be,e as Ce}from"./chunk-QLXXE7GE.js";function He(e){return`(async () => {
4
+ import{b as Ct,c as jt}from"./chunk-XZ6O67AR.js";import{a as At,b as Dt}from"./chunk-2JZ53D4A.js";import{a as de}from"./chunk-OXS2IWO2.js";import{k as Bt}from"./chunk-54MIRTFE.js";import{a as oe,b as D,c as A,d as Me,e as ae,f as X,g as pe,h as ye,i as Pt,j as Et,k as Ne,l as _t}from"./chunk-KQSJVNFE.js";import{A as Tt,B as Mt,C as Nt,F as Ft,H as Ot,J as ue,K as Rt,Q as Je,a as Ie,b as pt,c as mt,d as ft,e as gt,f as yt,g as ht,h as bt,i as wt,j as xt,k as je,l as qe,r as Le,s as $t,t as St,u as ge,v as vt,w as Te,x as We,y as kt,z as It}from"./chunk-WUXCH6WN.js";import{a as nt}from"./chunk-RJIEZ2NY.js";import{a as Q}from"./chunk-O2KRHVTU.js";import{e as rt,j as it,o as at,q as lt,s as ct,t as dt,u as ut,v as ce}from"./chunk-UROXJVY3.js";import{c as Be,e as Ce}from"./chunk-25VCR44B.js";function He(e){return`(async () => {
5
5
  const bridge = globalThis.SootSim && globalThis.SootSim.bridges && globalThis.SootSim.bridges.hotRemount
6
6
  if (!bridge || typeof bridge.reloadExternalApp !== 'function') return false
7
7
  await bridge.reloadExternalApp({ resetStorage: ${e?"true":"false"} })
@@ -554,7 +554,7 @@ import{b as Ct,c as jt}from"./chunk-TAX4UT2N.js";import{a as At,b as Dt}from"./c
554
554
  `);console.log(`${o??""}
555
555
 
556
556
  ${n}
557
- `),process.exit(0)}let F=c.wsPort,N=c.simId,j=c.simIdSource,R=c.commandTimeoutMs;if(p==="get"&&m==="diagnosis"){let $=r.indexOf("diagnosis"),o=$>=0?[...r.slice(0,$),...r.slice($+1)]:r,{runDiagnose:n}=await import("./diagnose-3QX7W5RW.js"),i=await n(["recent",...o],t);process.exitCode=i;return}if(p==="do"&&m==="scan"){let{runCamera:$}=await import("./camera-UGYSSLIK.js");process.exitCode=await $(r,{port:t.port});return}if(m==="list"&&r.some($=>$==="--drivers"||$==="-D")){let{buildDriverListRows:$}=await import("./drivers-EPIEFF7P.js"),o=$();console.log(` available drivers (${o.length}):
557
+ `),process.exit(0)}let F=c.wsPort,N=c.simId,j=c.simIdSource,R=c.commandTimeoutMs;if(p==="get"&&m==="diagnosis"){let $=r.indexOf("diagnosis"),o=$>=0?[...r.slice(0,$),...r.slice($+1)]:r,{runDiagnose:n}=await import("./diagnose-SC5LACE3.js"),i=await n(["recent",...o],t);process.exitCode=i;return}if(p==="do"&&m==="scan"){let{runCamera:$}=await import("./camera-CNO6B2JZ.js");process.exitCode=await $(r,{port:t.port});return}if(m==="list"&&r.some($=>$==="--drivers"||$==="-D")){let{buildDriverListRows:$}=await import("./drivers-NPGVBWMG.js"),o=$();console.log(` available drivers (${o.length}):
558
558
  `);let n=Math.max(...o.map(a=>a.id.length),6),i=Math.max(...o.map(a=>a.kind.length),4);for(let a of o){let u=a.available?"\u2713":"\u2717",f=a.id.padEnd(n),g=a.kind.padEnd(i);console.log(` ${u} ${f} ${g} ${a.description}`),a.available&&a.detail?console.log(` ${a.detail}`):!a.available&&a.reason&&console.log(` unavailable: ${a.reason}`)}return}let d=ct(c),q=N||"default",P=new Set(["errors","warnings","requests","js","eval","reload","globals","perf","storage-clear","list","wait","sleep"]),_=200;function J($){let o=$.replace(/\s+/g," ").trim();if(!o)return"";if(/^<(!doctype html|html|\?xml)|<body[\s>]/i.test(o)){let i=/<title[^>]*>([^<]+)<\/title>/i.exec($)?.[1]?.trim(),a=/<body[^>]*>([\s\S]*?)<\//i.exec($)?.[1]?.replace(/<[^>]+>/g," ").replace(/\s+/g," ").trim().slice(0,80),u=i||a||"html error page";return`<html ${$.length}B> "${u}" (body elided \u2014 add --json for the full payload)`}return o.length<=_?o:`${o.slice(0,_)}\u2026 (+${o.length-_} more bytes)`}function U($){let o=$.displayUrl||$.url;return $.status!=null?`${$.method} ${o} -> ${$.status}${$.statusText?` ${$.statusText}`:""}`:$.error?`${$.method} ${o} -> ${$.error}`:`${$.method} ${o}`}async function I($){let o=fe()?400:200;try{let{settled:n,elapsed:i}=await se({bridge:$,maxMs:o,pollMs:32,stablePolls:2});n||process.stderr.write(` \u26A0 auto-wait timed out after ${i??o}ms \u2014 next command may see mid-animation state. use \`rnxsim do settle\` for a longer wait.
559
559
  `)}catch{}}function O($,o){if(o.result?.reason==="offscreen"){let{x:n,y:i,screen:a}=o.result;console.error(` tap failed: ${$} resolved to (${Math.round(n)},${Math.round(i)}), outside the ${a?.width}x${a?.height} screen`),console.error(" the node exists but is scrolled out of view \u2014 scroll it on-screen first (rnxsim do scroll / swipe), then tap.");return}console.error(` tap failed: ${$} stayed visible but did not receive a hittable press after ${o.attempts} attempt${o.attempts===1?"":"s"}`),o.result&&console.error(` last result: ${JSON.stringify(o.result)}`)}async function H(){try{return await d.send({type:"evaluate",code:`(() => ({
560
560
  console: ${Te},
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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 Q(t,e){let r=["--max-ms","--maxMs","--maxms","--max_ms"];for(let n of r){let o=t.indexOf(n);if(o>=0&&t[o+1]){let s=Number(t[o+1]);if(Number.isFinite(s))return Math.max(100,s)}}return e}var P=new Set(["tap","double-tap","tap-text","tap-id","long-press","touch"]);function N(t){return typeof t=="string"&&P.has(t)}async function M(t){return await t.send({type:"evaluate",code:"window.__sootsimEngineState?.inspectActive === true"})===!0}async function X(t,e){if(!N(e))return!1;try{return await M(t)}catch{return!1}}async function Z(t){let e=await t.send({type:"evaluate",code:"(async () => await window.__sootsimTest.getNodeCount())()"});return{nodes:typeof e=="number"?e:0}}async function ee(t,e=5,r){let n=r?.format?`, ${JSON.stringify(r)}`:"",o=await t.send({type:"evaluate",code:`(async () => await window.__sootsimTest.dumpTree(${e}${n}))()`});if(r?.format==="boxes"&&typeof o=="string")try{return{depth:e,tree:JSON.parse(o)}}catch{return{depth:e,tree:o}}return{depth:e,tree:o}}async function te(t){let e=await t.send({type:"evaluate",code:"window.location.href"});return{url:typeof e=="string"?e:""}}async function ne(t,e){let r=e.maxDepth??12,n=`(async () => {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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 R}from"node:crypto";import r from"node:fs";import{homedir as O}from"node:os";import o from"node:path";var j="SOOTSIM_HOME",N="active",E="daemon.json",_="dev-bridges",w="config.json",b=3e4;function s(){let e=process.env[j];return e&&e.length>0?o.resolve(e):o.join(O(),".sootsim")}function F(){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 r.realpathSync(t).includes(`${o.sep}packages${o.sep}sootsim${o.sep}`)}catch{return!1}}function I(){return process.env.SOOTSIM_FORCE_DAEMON_INSTALL==="1"?!1:process.env.IS_TAMAGUI_DEV==="1"}function Y(){return F()||I()}function d(){return o.join(s(),"runtimes")}function B(e){return o.join(d(),e)}function h(){return o.join(d(),N)}function v(){return o.join(s(),"electron")}function q(){return o.join(v(),"userData")}function z(e){return o.join(v(),e)}function $(){return o.join(s(),"profiles")}function Q(){return o.join(s(),"camera-fixtures")}function C(){return o.join(s(),"daemon-app")}function M(){return o.join(C(),"SootSim Daemon.app")}function Z(){return o.join(M(),"Contents","MacOS","sootsim-daemon")}function T(){return o.join(s(),"cache")}function a(){return o.join(s(),E)}function f(){return o.join(s(),_)}function D(e){if(!Number.isInteger(e)||e<=0)throw new Error(`invalid development bridge port: ${e}`);return o.join(f(),`${e}.json`)}function y(){return o.join(s(),w)}function S(){try{let e=r.readFileSync(y(),"utf8"),t=JSON.parse(e);return t&&typeof t=="object"?t:{}}catch{return{}}}function x(e){m();let t=S(),n={...t,...e};e.settings&&typeof e.settings=="object"&&(n.settings={...t.settings&&typeof t.settings=="object"?t.settings:{},...e.settings});let c=`${y()}.tmp`;return r.writeFileSync(c,`${JSON.stringify(n,null,2)}
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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-C2NL26TD.js";import{a as i}from"./chunk-HAXW27SS.js";import{a as n}from"./chunk-IZAHPAN6.js";import{createRequire as f}from"node:module";import{createJiti as s}from"jiti";var m=f(import.meta.url);function t(e){return e===void 0||e!==null&&typeof e=="object"&&!Array.isArray(e)}function p(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let o=Reflect.get(e,"runtimeVersion"),r=Reflect.get(e,"network");return(o===void 0||typeof o=="string"&&o===o.trim()&&i(o))&&t(Reflect.get(e,"modules"))&&t(Reflect.get(e,"turboModules"))&&t(Reflect.get(e,"nativeModules"))&&t(Reflect.get(e,"env"))&&t(r)&&t(Reflect.get(e,"settings"))&&t(Reflect.get(e,"initialState"))}async function a(e){if(e?.configPath)try{let r=await s(import.meta.url,{interopDefault:!0,alias:{[`${n.packageName}/config`]:m.resolve(`${n.packageName}/config`)}}).import(e.configPath,{default:!0});if(!p(r))throw new Error("the default export must be an rnx config object");return r}catch(o){let r=o instanceof Error?o.message:String(o);throw new Error(`could not load ${e.configPath}: ${r}`)}}async function R(e=process.cwd()){let o=c(e);return{project:o,config:await a(o)}}export{a,R as b};
4
+ import{a as c}from"./chunk-YY24QI25.js";import{a as i}from"./chunk-LP2BTEJ6.js";import{a as n}from"./chunk-SZKSFMWS.js";import{createRequire as f}from"node:module";import{createJiti as s}from"jiti";var m=f(import.meta.url);function t(e){return e===void 0||e!==null&&typeof e=="object"&&!Array.isArray(e)}function p(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let o=Reflect.get(e,"runtimeVersion"),r=Reflect.get(e,"network");return(o===void 0||typeof o=="string"&&o===o.trim()&&i(o))&&t(Reflect.get(e,"modules"))&&t(Reflect.get(e,"turboModules"))&&t(Reflect.get(e,"nativeModules"))&&t(Reflect.get(e,"env"))&&t(r)&&t(Reflect.get(e,"settings"))&&t(Reflect.get(e,"initialState"))}async function a(e){if(e?.configPath)try{let r=await s(import.meta.url,{interopDefault:!0,alias:{[`${n.packageName}/config`]:m.resolve(`${n.packageName}/config`)}}).import(e.configPath,{default:!0});if(!p(r))throw new Error("the default export must be an rnx config object");return r}catch(o){let r=o instanceof Error?o.message:String(o);throw new Error(`could not load ${e.configPath}: ${r}`)}}async function R(e=process.cwd()){let o=c(e);return{project:o,config:await a(o)}}export{a,R as b};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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 p(){console.error(" no rnxsim desktop companion found."),console.error(""),console.error(" install the desktop app:"),console.error(" rnxsim desktop install"),console.error(""),console.error(" or run setup to install the background daemon:"),console.error(" rnxsim setup"),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(" rnxsim open 8081"),console.error(""),console.error(" then inspect the live app:"),console.error(" rnxsim describe")}async function m(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 `rnxsim list` to see all sessions.")}export{p as a,t as b,m as c};
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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 k}from"./chunk-TUOFAWXT.js";import{a as $}from"./chunk-WGGRJDRE.js";import{spawn as v,spawnSync as m}from"child_process";import{chmodSync as S,copyFileSync as T,createWriteStream as E,existsSync as w,mkdirSync as y,rmSync as g,statSync as P,unlinkSync as D}from"fs";import{tmpdir as M}from"os";import{dirname as A,join as f,resolve as b}from"path";var h="https://contrast.dev/api/electron-release";function O(){let r=process.arch;if(process.platform==="darwin"){let t=r==="arm64"?"mac-arm64":"mac-x64",e=`sootsim-latest-${t}.dmg`;return{platform:t,filename:e,url:`${h}/${e}`,install:L}}if(process.platform==="linux"){let t=r==="arm64"?"linux-arm64":"linux-x64",e=`sootsim-latest-${t}.AppImage`;return{platform:t,filename:e,url:`${h}/${e}`,install:C}}if(process.platform==="win32"){let t="sootsim-latest-win-x64.exe";return{platform:"win-x64",filename:t,url:`${h}/${t}`,install:B}}return null}async function I({url:r,dest:t,onProgress:e}){let s=await fetch(r,{redirect:"follow"});if(!s.ok)throw new Error(`${s.status} ${s.statusText} (${r})`);let o=s.headers.get("content-length"),a=o?Number(o):null;if(!s.body)throw new Error(`empty response body (${r})`);y(A(t),{recursive:!0});let i=E(t),d=s.body.getReader(),c=0;try{for(;;){let{done:l,value:p}=await d.read();if(l)break;i.write(Buffer.from(p)),c+=p.byteLength,e?.(c,a)}}finally{await new Promise((l,p)=>{i.end(n=>n?p(n):l())})}}function _(r,t){let e=(r/1048576).toFixed(1);if(!t)return` ${e} MB`;let s=Math.min(100,Math.round(r/t*100)),o=(t/(1024*1024)).toFixed(1),a=24,i=Math.round(s/100*a);return` ${"\u2588".repeat(i)+"\u2591".repeat(a-i)} ${s}% ${e} / ${o} MB`}async function L(r){let t=m("hdiutil",["attach","-nobrowse","-readonly",r],{encoding:"utf8"});if(t.status!==0)throw new Error(`hdiutil attach failed: ${t.stderr||t.stdout}`.trim());let e=t.stdout.trim().split(`
4
+ import{a as k}from"./chunk-DNCNFZ7V.js";import{a as $}from"./chunk-QR7MWAWE.js";import{spawn as v,spawnSync as m}from"child_process";import{chmodSync as S,copyFileSync as T,createWriteStream as E,existsSync as w,mkdirSync as y,rmSync as g,statSync as P,unlinkSync as D}from"fs";import{tmpdir as M}from"os";import{dirname as A,join as f,resolve as b}from"path";var h="https://contrast.dev/api/electron-release";function O(){let r=process.arch;if(process.platform==="darwin"){let t=r==="arm64"?"mac-arm64":"mac-x64",e=`sootsim-latest-${t}.dmg`;return{platform:t,filename:e,url:`${h}/${e}`,install:L}}if(process.platform==="linux"){let t=r==="arm64"?"linux-arm64":"linux-x64",e=`sootsim-latest-${t}.AppImage`;return{platform:t,filename:e,url:`${h}/${e}`,install:C}}if(process.platform==="win32"){let t="sootsim-latest-win-x64.exe";return{platform:"win-x64",filename:t,url:`${h}/${t}`,install:B}}return null}async function I({url:r,dest:t,onProgress:e}){let s=await fetch(r,{redirect:"follow"});if(!s.ok)throw new Error(`${s.status} ${s.statusText} (${r})`);let o=s.headers.get("content-length"),a=o?Number(o):null;if(!s.body)throw new Error(`empty response body (${r})`);y(A(t),{recursive:!0});let i=E(t),d=s.body.getReader(),c=0;try{for(;;){let{done:l,value:p}=await d.read();if(l)break;i.write(Buffer.from(p)),c+=p.byteLength,e?.(c,a)}}finally{await new Promise((l,p)=>{i.end(n=>n?p(n):l())})}}function _(r,t){let e=(r/1048576).toFixed(1);if(!t)return` ${e} MB`;let s=Math.min(100,Math.round(r/t*100)),o=(t/(1024*1024)).toFixed(1),a=24,i=Math.round(s/100*a);return` ${"\u2588".repeat(i)+"\u2591".repeat(a-i)} ${s}% ${e} / ${o} MB`}async function L(r){let t=m("hdiutil",["attach","-nobrowse","-readonly",r],{encoding:"utf8"});if(t.status!==0)throw new Error(`hdiutil attach failed: ${t.stderr||t.stdout}`.trim());let e=t.stdout.trim().split(`
5
5
  `),o=e[e.length-1].split(" ").pop()?.trim();if(!o||!w(o))throw new Error(`could not determine dmg mount point (output: ${t.stdout})`);let a=f(o,"sootsim.app");if(!w(a))throw m("hdiutil",["detach","-force",o]),new Error(`sootsim.app not found inside ${o}`);let i="/Applications",d=b(process.env.HOME||"","Applications"),c=i;try{let u=f(i,`.sootsim-write-probe-${process.pid}`);m("touch",[u]),w(u)?g(u,{force:!0}):c=d}catch{c=d}c===d&&y(c,{recursive:!0});let l=f(c,"sootsim.app");w(l)&&g(l,{recursive:!0,force:!0});let p=m("cp",["-R",a,l]),n=m("hdiutil",["detach","-force",o]);if(p.status!==0)throw new Error(`copy to ${l} failed: ${p.stderr?.toString()||""}`.trim());return n.status!==0&&console.warn(` warning: failed to unmount ${o} (${n.stderr?.toString().trim()||"unknown error"})`),m("xattr",["-dr","com.apple.quarantine",l]),l}async function C(r){let t=b(process.env.HOME||"","Applications");y(t,{recursive:!0});let e=f(t,"sootsim.AppImage");return w(e)&&g(e,{force:!0}),T(r,e),D(r),S(e,493),e}async function B(r){return await new Promise((t,e)=>{let s=v("cmd",["/c","start",'""',"/wait",r],{stdio:"inherit"});s.once("error",e),s.once("exit",o=>{o===0?t():e(new Error(`installer exited with code ${o}`))})}),r}async function q(r){(r.includes("--help")||r.includes("-h"))&&(console.log(`
6
6
  rnxsim desktop install \u2014 download and install the optional desktop GUI
7
7
 
@@ -22,4 +22,4 @@ examples:
22
22
  `),process.exit(0));let t=r.includes("--yes")||r.includes("-y")||process.env.SOOTSIM_NO_PROMPT==="1"||process.env.CI==="1"||!process.stdin.isTTY,e=r.includes("--force"),s=k();if(s&&!e){console.log(` rnxsim desktop already installed at: ${s.path}`),console.log(" pass --force to reinstall.");return}let o=O();if(o||(console.error(` no desktop build available for ${process.platform}/${process.arch}.`),console.error(" supported: darwin-arm64, darwin-x64, linux-x64, linux-arm64, win32-x64"),process.exit(1)),console.log(` platform: ${o.platform}`),console.log(` download: ${o.url}`),console.log(),!t){if(!await $("download and install now?",!0)){console.log(" cancelled.");return}console.log()}let a=f(M(),`sootsim-install-${Date.now()}`),i=f(a,o.filename),d=0;process.stdout.write(` downloading ${o.filename}...
23
23
  `);try{await I({url:o.url,dest:i,onProgress:(n,u)=>{let x=Date.now();x-d<100&&n<(u??1/0)||(d=x,process.stdout.isTTY&&process.stdout.write(`\r\x1B[2K${_(n,u)}`))}})}catch(n){g(a,{recursive:!0,force:!0});let u=n instanceof Error?n.message:String(n);console.error(`
24
24
  download failed: ${u}`),console.error(` the ${o.platform} desktop build may not be published yet, or your`),console.error(" network blocked the request. check your connection and try again later;"),console.error(" the CLI + daemon work without the desktop app (run: rnxsim --help)."),process.exit(1)}process.stdout.isTTY&&process.stdout.write(`
25
- `);let c=P(i).size;console.log(` downloaded ${(c/(1024*1024)).toFixed(1)} MB`),console.log(),console.log(" installing...");let{trackCliEvent:l,flushCliTelemetry:p}=await import("./telemetry-PBJR7XHR.js");try{let n=await o.install(i);l({event:"cli_install_desktop_succeeded",properties:{platform:o.platform,size_bytes:c}}),console.log(` installed: ${n}`)}catch(n){l({event:"cli_install_desktop_failed",properties:{platform:o.platform,error:n instanceof Error?n.message:String(n)}}),await p(),console.error(` install failed: ${n instanceof Error?n.message:String(n)}`),console.error(` keeping download at ${i} for manual install.`),process.exit(1)}finally{g(a,{recursive:!0,force:!0})}console.log(),console.log(" next steps:"),console.log(" rnxsim desktop launch the desktop app"),console.log(" rnxsim open <target> open a demo or bundle in it")}export{q as a};
25
+ `);let c=P(i).size;console.log(` downloaded ${(c/(1024*1024)).toFixed(1)} MB`),console.log(),console.log(" installing...");let{trackCliEvent:l,flushCliTelemetry:p}=await import("./telemetry-XIPJVT5E.js");try{let n=await o.install(i);l({event:"cli_install_desktop_succeeded",properties:{platform:o.platform,size_bytes:c}}),console.log(` installed: ${n}`)}catch(n){l({event:"cli_install_desktop_failed",properties:{platform:o.platform,error:n instanceof Error?n.message:String(n)}}),await p(),console.error(` install failed: ${n instanceof Error?n.message:String(n)}`),console.error(` keeping download at ${i} for manual install.`),process.exit(1)}finally{g(a,{recursive:!0,force:!0})}console.log(),console.log(" next steps:"),console.log(" rnxsim desktop launch the desktop app"),console.log(" rnxsim open <target> open a demo or bundle in it")}export{q as a};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.314 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.315 | (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 g from"node:fs";import f from"node:path";var D=["app.config.js","app.config.ts","app.config.cjs","app.config.mjs","app.json"],_=["sootsim.config.ts","sootsim.config.js","sootsim.config.mjs","sootsim.config.cjs"],S=new Set(["node_modules","artifacts","dist","build","out","coverage","tmp","public","ios","android","macos","windows","__fixtures__","__tests__","fixtures","fixture","examples","example"]),d=256,y=4;function A(s,r){for(let t of r){let n=f.join(s,t);try{if(g.statSync(n).isFile())return n}catch{}}return null}function m(s){return A(s,D)}function h(s){return A(s,_)}function k(s){try{let r=JSON.parse(g.readFileSync(f.join(s,"package.json"),"utf8"));if(!r||typeof r!="object")return[];let t=Reflect.get(r,"workspaces");if(Array.isArray(t))return t.filter(c=>typeof c=="string");if(!t||typeof t!="object")return[];let n=Reflect.get(t,"packages");return Array.isArray(n)?n.filter(c=>typeof c=="string"):[]}catch{return[]}}function b(s){let r=new Set,t=0,n=!0;for(let c of k(s)){if(t>=d){n=!1;break}if(!c||f.isAbsolute(c))continue;let a=c.split(/[\\/]+/).filter(Boolean);if(a.length===0||a.length>y||a.some(o=>o===".."||o==="**"))continue;let i=[s];for(let o of a){let e=[];for(let l of i){if(t>=d){n=!1;break}if(t++,o==="*"){let p;try{p=g.readdirSync(l,{withFileTypes:!0})}catch{continue}for(let u of p)!u.isDirectory()||u.isSymbolicLink()||u.name.startsWith(".")||S.has(u.name)||e.push(f.join(l,u.name))}else if(!o.includes("*")){let p=f.join(l,o);try{let u=g.lstatSync(p);u.isDirectory()&&!u.isSymbolicLink()&&e.push(p)}catch{}}}i=e,i.length>d&&(i.length=d,n=!1)}for(let o of i)r.add(o)}return{directories:[...r],complete:n}}function j(s){let r=[{dir:s,depth:0}],t=[],n=0,c=0,a=!0;for(;c<r.length&&n<d;){let i=r[c++];if(!i)break;if(n++,i.depth>0&&m(i.dir)&&(t.push(i.dir),t.length>1))return{directories:t,complete:!0};if(i.depth>=y)continue;let o;try{o=g.readdirSync(i.dir,{withFileTypes:!0})}catch{continue}for(let e of o)if(!(!e.isDirectory()||e.isSymbolicLink())&&!(e.name.startsWith(".")||S.has(e.name))){if(r.length>=d){a=!1;break}r.push({dir:f.join(i.dir,e.name),depth:i.depth+1})}}return{directories:t,complete:a&&c===r.length}}function w(s,r={}){let t=f.resolve(s),n=h(t);if(m(t)||r.trustStart&&g.existsSync(t)){let e=n;if(!e&&r.trustStart){let l=f.dirname(t);for(let p=0;p<y&&l!==f.dirname(l)&&(e=h(l),!e);p++)l=f.dirname(l)}return{appDir:t,configPath:e}}let c=b(t),a=c.directories.filter(e=>m(e));if(a.length>1||!c.complete)return null;if(a.length===1){let e=a[0];return{appDir:e,configPath:n??h(e)}}let i=j(t),o=i.directories;if(o.length>1||!i.complete)return null;if(o.length===1){let e=o[0];return{appDir:e,configPath:n??h(e)}}return n?{appDir:t,configPath:n}:null}export{w as a};