rnxsim 0.1.374 → 0.1.375

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 (192) hide show
  1. package/cli/commands/box.ts +5 -5
  2. package/cli/ws-bridge.ts +5 -2
  3. package/dist-cli/bin.js +5 -5
  4. package/dist-cli/chunks/{agent-BKCNNEQV.js → agent-JJN7U6FR.js} +2 -2
  5. package/dist-cli/chunks/{agent-wrapper-B3AS3ENV.js → agent-wrapper-AVVUJ3WF.js} +2 -2
  6. package/dist-cli/chunks/{app-fonts-GWE22XIG.js → app-fonts-QJ22CNAZ.js} +2 -2
  7. package/dist-cli/chunks/{assert-ORX5Q6AH.js → assert-PZZKIY3K.js} +2 -2
  8. package/dist-cli/chunks/{auth-REWJRBFP.js → auth-5AVDJO33.js} +2 -2
  9. package/dist-cli/chunks/{beta-Q2VQZCLD.js → beta-PFRGP266.js} +2 -2
  10. package/dist-cli/chunks/{box-I5QZZJBJ.js → box-ILC2O7ZO.js} +5 -5
  11. package/dist-cli/chunks/{camera-5HA2IJDC.js → camera-J3V62PP7.js} +2 -2
  12. package/dist-cli/chunks/{chunk-5VFQ7HKK.js → chunk-25KRGDZT.js} +1 -1
  13. package/dist-cli/chunks/{chunk-2XDNHF7N.js → chunk-2BRBFLWA.js} +2 -2
  14. package/dist-cli/chunks/{chunk-UAMMP7U7.js → chunk-2GXNAZHB.js} +2 -2
  15. package/dist-cli/chunks/{chunk-TCB6DSON.js → chunk-2IUMRRYV.js} +2 -2
  16. package/dist-cli/chunks/{chunk-7PBNTA3M.js → chunk-4ALPWIMP.js} +2 -2
  17. package/dist-cli/chunks/{chunk-I2C26UZ3.js → chunk-4CEZZKRY.js} +1 -1
  18. package/dist-cli/chunks/{chunk-U52Z6BML.js → chunk-4EUKOIAV.js} +2 -2
  19. package/dist-cli/chunks/{chunk-SNMLG22Y.js → chunk-4IKE4YUS.js} +2 -2
  20. package/dist-cli/chunks/{chunk-RE2IODEB.js → chunk-4ZXR2M3D.js} +1 -1
  21. package/dist-cli/chunks/{chunk-6JBXWVSP.js → chunk-5CGJFU27.js} +2 -2
  22. package/dist-cli/chunks/{chunk-6PV4QLZ7.js → chunk-5HHWECGT.js} +2 -2
  23. package/dist-cli/chunks/{chunk-4S5CIP7Y.js → chunk-5PZVYF42.js} +1 -1
  24. package/dist-cli/chunks/chunk-7NCPUZ52.js +27 -0
  25. package/dist-cli/chunks/{chunk-KVMYAHND.js → chunk-7OSIJCBR.js} +2 -2
  26. package/dist-cli/chunks/{chunk-VOYUOTN2.js → chunk-AQ5TMOAI.js} +1 -1
  27. package/dist-cli/chunks/{chunk-CBF7RQ3C.js → chunk-BQCEI37V.js} +1 -1
  28. package/dist-cli/chunks/{chunk-2W6ADNTG.js → chunk-C6B5FOP3.js} +1 -1
  29. package/dist-cli/chunks/{chunk-GH7XDCAP.js → chunk-CCMZSHJB.js} +1 -1
  30. package/dist-cli/chunks/{chunk-VSGEEW3N.js → chunk-CX7VCKAT.js} +2 -2
  31. package/dist-cli/chunks/{chunk-RU565DEH.js → chunk-DQUPSAHE.js} +1 -1
  32. package/dist-cli/chunks/{chunk-Y3LVGZKE.js → chunk-DSD2UBZI.js} +2 -2
  33. package/dist-cli/chunks/{chunk-L6VQSQ5O.js → chunk-EWPAI4MO.js} +2 -2
  34. package/dist-cli/chunks/{chunk-HCORKEG6.js → chunk-EZXV6U2N.js} +3 -3
  35. package/dist-cli/chunks/{chunk-ZAUPKGQP.js → chunk-F5F7FIPM.js} +2 -2
  36. package/dist-cli/chunks/{chunk-N5GTOZJP.js → chunk-FUTYK55H.js} +3 -3
  37. package/dist-cli/chunks/{chunk-X2YXPZD4.js → chunk-FW6AN7I2.js} +1 -1
  38. package/dist-cli/chunks/{chunk-KOSLTZXQ.js → chunk-FZDRA7Z4.js} +2 -2
  39. package/dist-cli/chunks/{chunk-5WXRC4BW.js → chunk-GDLE4NIV.js} +1 -1
  40. package/dist-cli/chunks/{chunk-2ZE4WXXF.js → chunk-GEX7RVHY.js} +1 -1
  41. package/dist-cli/chunks/{chunk-PYH2MNFB.js → chunk-H4MYYOYJ.js} +2 -2
  42. package/dist-cli/chunks/{chunk-6VPR6OTH.js → chunk-HEV7BAPE.js} +2 -2
  43. package/dist-cli/chunks/{chunk-UHTIDDI2.js → chunk-HNDWYCND.js} +2 -2
  44. package/dist-cli/chunks/{chunk-DYE6WT2Q.js → chunk-HNPHODBD.js} +2 -2
  45. package/dist-cli/chunks/{chunk-GQVWJWCZ.js → chunk-HWDVC6YA.js} +1 -1
  46. package/dist-cli/chunks/{chunk-4FYJOFJZ.js → chunk-JOHJZUGG.js} +2 -2
  47. package/dist-cli/chunks/{chunk-RAYAIDJI.js → chunk-JWUDT4QK.js} +2 -2
  48. package/dist-cli/chunks/{chunk-XSXSVO4P.js → chunk-K7QQWKGE.js} +1 -1
  49. package/dist-cli/chunks/{chunk-IQ5HBVID.js → chunk-LAOKTKT4.js} +2 -2
  50. package/dist-cli/chunks/{chunk-KN6LU33B.js → chunk-LD7I266X.js} +2 -2
  51. package/dist-cli/chunks/{chunk-VDCYIT2N.js → chunk-LMHBU5LZ.js} +1 -1
  52. package/dist-cli/chunks/{chunk-AEMLIV3G.js → chunk-LSOGXSDV.js} +3 -3
  53. package/dist-cli/chunks/{chunk-VKOEADVP.js → chunk-MP2GPO4T.js} +1 -1
  54. package/dist-cli/chunks/{chunk-R7NXLMFI.js → chunk-MXJ2UWRV.js} +1 -1
  55. package/dist-cli/chunks/{chunk-XL53SSTO.js → chunk-OJNKRIZF.js} +2 -2
  56. package/dist-cli/chunks/{chunk-PVGD4KKG.js → chunk-PBOWUNXO.js} +2 -2
  57. package/dist-cli/chunks/{chunk-XSWS6HY6.js → chunk-PNRJFHX4.js} +1 -1
  58. package/dist-cli/chunks/{chunk-MU77ZSME.js → chunk-QJQOK34O.js} +2 -2
  59. package/dist-cli/chunks/{chunk-MHVH5IJU.js → chunk-RLCQLMFF.js} +2 -2
  60. package/dist-cli/chunks/{chunk-PZYF2TKR.js → chunk-S65CK3RI.js} +1 -1
  61. package/dist-cli/chunks/{chunk-RXDJ422X.js → chunk-SWBUNMQS.js} +2 -2
  62. package/dist-cli/chunks/{chunk-A6JPQM7B.js → chunk-SXBFGGAM.js} +1 -1
  63. package/dist-cli/chunks/{chunk-UQXSAYWY.js → chunk-T4ISWS5H.js} +1 -1
  64. package/dist-cli/chunks/{chunk-7DLC2M6S.js → chunk-TPPVAA7Z.js} +2 -2
  65. package/dist-cli/chunks/{chunk-WR6QFC62.js → chunk-USM3P74H.js} +2 -2
  66. package/dist-cli/chunks/{chunk-DB2JB52S.js → chunk-V4EJJHF5.js} +1 -1
  67. package/dist-cli/chunks/{chunk-G2IBWLBT.js → chunk-V7RGRZOL.js} +1 -1
  68. package/dist-cli/chunks/{chunk-2QVA4PPE.js → chunk-XUBV77WH.js} +1 -1
  69. package/dist-cli/chunks/{chunk-IXYE6F2D.js → chunk-XYSDYGKC.js} +2 -2
  70. package/dist-cli/chunks/{chunk-KWUKKULB.js → chunk-YNHRSDVG.js} +2 -2
  71. package/dist-cli/chunks/{chunk-QKYOZQKE.js → chunk-YX52RJKO.js} +2 -2
  72. package/dist-cli/chunks/{chunk-R3HLZSGB.js → chunk-Z5O5H4O7.js} +2 -2
  73. package/dist-cli/chunks/{chunk-HM5TGIVN.js → chunk-Z6LOIW46.js} +1 -1
  74. package/dist-cli/chunks/{chunk-2MI2ROT4.js → chunk-ZXFVBYJY.js} +2 -2
  75. package/dist-cli/chunks/{cleanup-4ZAL2PTZ.js → cleanup-KPUW4SFK.js} +2 -2
  76. package/dist-cli/chunks/cli-version-APGT6GAT.js +4 -0
  77. package/dist-cli/chunks/{compat-6CEUDCO2.js → compat-XXRFD2TW.js} +2 -2
  78. package/dist-cli/chunks/{config-YHATX3ZX.js → config-DDMFDQ7F.js} +2 -2
  79. package/dist-cli/chunks/{connect-LXWD3ILH.js → connect-IPG47YXM.js} +2 -2
  80. package/dist-cli/chunks/control-O22Z3UJ5.js +4 -0
  81. package/dist-cli/chunks/daemon-PADUIMJV.js +4 -0
  82. package/dist-cli/chunks/{debug-4RKDQCF4.js → debug-MYIP46TM.js} +3 -3
  83. package/dist-cli/chunks/{desktop-ISJKVEQA.js → desktop-ENFFBQAA.js} +3 -3
  84. package/dist-cli/chunks/{detox-7P5NDA5M.js → detox-J5WVK6OH.js} +2 -2
  85. package/dist-cli/chunks/{device-JXBP6WUE.js → device-RAVQVL75.js} +2 -2
  86. package/dist-cli/chunks/{diagnose-7JJWOZ23.js → diagnose-PJMPXKJY.js} +2 -2
  87. package/dist-cli/chunks/{disk-cleanup-MXIQGJWO.js → disk-cleanup-YLAY445J.js} +2 -2
  88. package/dist-cli/chunks/{do-chain-KTAVIZMC.js → do-chain-UBE7GIOU.js} +2 -2
  89. package/dist-cli/chunks/drivers-ZFNX3T5Z.js +4 -0
  90. package/dist-cli/chunks/{env-37X232UA.js → env-Y5XJSNRD.js} +2 -2
  91. package/dist-cli/chunks/{film-5F5XDOIR.js → film-W3V6VURB.js} +3 -3
  92. package/dist-cli/chunks/flow-VMLI7BYM.js +4 -0
  93. package/dist-cli/chunks/help-PKZCWHJJ.js +4 -0
  94. package/dist-cli/chunks/{hidden-runtime-alias-FAPVCHKI.js → hidden-runtime-alias-S5DJ7EDF.js} +2 -2
  95. package/dist-cli/chunks/{home-paths-VW3CI5QK.js → home-paths-5O4IZPYV.js} +2 -2
  96. package/dist-cli/chunks/inspect-LT4MXK37.js +4 -0
  97. package/dist-cli/chunks/install-desktop-EXCFMXFS.js +4 -0
  98. package/dist-cli/chunks/{login-LDN6ETBS.js → login-V6TZ54ZH.js} +2 -2
  99. package/dist-cli/chunks/{logout-HOHKC7TH.js → logout-SPMLFWYA.js} +2 -2
  100. package/dist-cli/chunks/{maestro-PCFZZHCH.js → maestro-5ISTBAZE.js} +3 -3
  101. package/dist-cli/chunks/{maestro-generate-6MSPC66O.js → maestro-generate-WUI64NHR.js} +3 -3
  102. package/dist-cli/chunks/{mode-GRYQSTZH.js → mode-QPNBYXUF.js} +2 -2
  103. package/dist-cli/chunks/{optional-demo-registry-RP2H6SQR.js → optional-demo-registry-CBSYF4CG.js} +2 -2
  104. package/dist-cli/chunks/{perf-WPW5FWOL.js → perf-T6N5PVYV.js} +2 -2
  105. package/dist-cli/chunks/{permissions-OXAWZHB2.js → permissions-YZ7RRSZJ.js} +2 -2
  106. package/dist-cli/chunks/{platform-SKTAMMLT.js → platform-XDQAA72X.js} +3 -3
  107. package/dist-cli/chunks/privacy-54FIGXLT.js +4 -0
  108. package/dist-cli/chunks/{record-WFA3GUIX.js → record-QGYXRUKP.js} +3 -3
  109. package/dist-cli/chunks/{report-issue-LB7QRUIO.js → report-issue-VUUTGX7V.js} +2 -2
  110. package/dist-cli/chunks/reset-CGO52KBW.js +4 -0
  111. package/dist-cli/chunks/resolve-target-NNQCALDM.js +4 -0
  112. package/dist-cli/chunks/runtime-4EP6YJVL.js +4 -0
  113. package/dist-cli/chunks/{screenshot-command-OX4B5ZPE.js → screenshot-command-NZCMSJ4P.js} +3 -3
  114. package/dist-cli/chunks/{screenshot-layers-QOSO5ZRE.js → screenshot-layers-VMTQ6XIU.js} +2 -2
  115. package/dist-cli/chunks/{screenshots-capture-XSRQO5SQ.js → screenshots-capture-K3MWIDBK.js} +2 -2
  116. package/dist-cli/chunks/{serve-LNYA35IZ.js → serve-QJRIB2BV.js} +2 -2
  117. package/dist-cli/chunks/setup-6XXEJQVF.js +4 -0
  118. package/dist-cli/chunks/{sim-client-MBY5YFOJ.js → sim-client-5YUVL45C.js} +2 -2
  119. package/dist-cli/chunks/{skills-DVTU7NKR.js → skills-T3CS7CXK.js} +2 -2
  120. package/dist-cli/chunks/{state-4AIXTMAN.js → state-AJC3VK3G.js} +2 -2
  121. package/dist-cli/chunks/{storage-OXHTXIRW.js → storage-KVGZKC3Y.js} +2 -2
  122. package/dist-cli/chunks/store-AWUMOQUH.js +4 -0
  123. package/dist-cli/chunks/telemetry-W5ZDGWK6.js +4 -0
  124. package/dist-cli/chunks/{timeline-HY7NURFG.js → timeline-DXDCAZUA.js} +2 -2
  125. package/dist-cli/chunks/{upgrade-V6222XJR.js → upgrade-SRPTJACU.js} +2 -2
  126. package/dist-cli/chunks/upload-ZDV4BFED.js +4 -0
  127. package/dist-cli/chunks/{version-32O3RRDO.js → version-SOLPSBMG.js} +2 -2
  128. package/dist-cli/chunks/{web-DA6HESOZ.js → web-RT75LD7A.js} +2 -2
  129. package/dist-cli/chunks/welcome-IJ55EC7U.js +5 -0
  130. package/dist-cli/chunks/{what-happened-UEY6YRTH.js → what-happened-CEIWJIWK.js} +2 -2
  131. package/dist-cli/chunks/{ws-bridge-4WWOVU5V.js → ws-bridge-YK5R3HOI.js} +2 -2
  132. package/dist-lib/agent-daemon-client.cjs +1 -1
  133. package/dist-lib/agent-events.cjs +1 -1
  134. package/dist-lib/agent-identity.cjs +1 -1
  135. package/dist-lib/agent-sessions.cjs +1 -1
  136. package/dist-lib/attached-projects.cjs +1 -1
  137. package/dist-lib/auth/shared-session.cjs +1 -1
  138. package/dist-lib/backend-origin.cjs +1 -1
  139. package/dist-lib/beta.cjs +1 -1
  140. package/dist-lib/beta.mjs +1 -1
  141. package/dist-lib/bridge-constants.cjs +1 -1
  142. package/dist-lib/bridge-contract-input.cjs +1 -1
  143. package/dist-lib/bridge-contract-input.mjs +1 -1
  144. package/dist-lib/bridge-contract.cjs +1 -1
  145. package/dist-lib/bridge-contract.mjs +1 -1
  146. package/dist-lib/cli-constants.cjs +1 -1
  147. package/dist-lib/config.cjs +1 -1
  148. package/dist-lib/detox/index.cjs +1 -1
  149. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  150. package/dist-lib/home-paths.cjs +1 -1
  151. package/dist-lib/host/bridge-host.cjs +1 -1
  152. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  153. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  154. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  155. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  156. package/dist-lib/host/websocket-proxy.cjs +1 -1
  157. package/dist-lib/index.cjs +3 -3
  158. package/dist-lib/jump-to-source-babel.cjs +1 -1
  159. package/dist-lib/menu.cjs +1 -1
  160. package/dist-lib/menu.mjs +1 -1
  161. package/dist-lib/metro-production-bundle.cjs +1 -1
  162. package/dist-lib/metro-production-bundle.mjs +1 -1
  163. package/dist-lib/metro.cjs +1 -1
  164. package/dist-lib/profiles.cjs +1 -1
  165. package/dist-lib/public-brand.cjs +1 -1
  166. package/dist-lib/react-native-host-modules.cjs +1 -1
  167. package/dist-lib/react-native-host-modules.mjs +1 -1
  168. package/dist-lib/render-mode.cjs +1 -1
  169. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  170. package/dist-lib/sdk.cjs +1 -1
  171. package/dist-lib/sdk.mjs +1 -1
  172. package/dist-lib/skills.cjs +3 -3
  173. package/dist-lib/vite.cjs +1 -1
  174. package/package.json +1 -1
  175. package/dist-cli/chunks/chunk-OO7E4JTZ.js +0 -27
  176. package/dist-cli/chunks/cli-version-OZYTASIM.js +0 -4
  177. package/dist-cli/chunks/control-LBL5A6WE.js +0 -4
  178. package/dist-cli/chunks/daemon-JCFSBU66.js +0 -4
  179. package/dist-cli/chunks/drivers-IQ5GCHPH.js +0 -4
  180. package/dist-cli/chunks/flow-74OQVMSN.js +0 -4
  181. package/dist-cli/chunks/help-OCNTRGIJ.js +0 -4
  182. package/dist-cli/chunks/inspect-Z2NKYQEG.js +0 -4
  183. package/dist-cli/chunks/install-desktop-47P2MA4T.js +0 -4
  184. package/dist-cli/chunks/privacy-XEXZ6AIX.js +0 -4
  185. package/dist-cli/chunks/reset-CYS4XX4I.js +0 -4
  186. package/dist-cli/chunks/resolve-target-YYCTSFNM.js +0 -4
  187. package/dist-cli/chunks/runtime-JFQ6JIA6.js +0 -4
  188. package/dist-cli/chunks/setup-3W2UEM2H.js +0 -4
  189. package/dist-cli/chunks/store-43NVGPZX.js +0 -4
  190. package/dist-cli/chunks/telemetry-ZQRYJXGE.js +0 -4
  191. package/dist-cli/chunks/upload-DUKPPETT.js +0 -4
  192. package/dist-cli/chunks/welcome-X7PCNKS6.js +0 -5
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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{m as O}from"./chunk-2XDNHF7N.js";import"./chunk-4S5CIP7Y.js";import{t as E,v as F,x as N}from"./chunk-OO7E4JTZ.js";import"./chunk-2ZE4WXXF.js";import{r as S}from"./chunk-GQVWJWCZ.js";import"./chunk-RU565DEH.js";import{createHash as I,randomUUID as q}from"node:crypto";import{createReadStream as D}from"node:fs";import m from"node:fs/promises";import f from"node:path";var T="/__camera-fixtures/",J=new Set([".m4v",".mov",".mp4",".webm"]);function _(){console.log(`
4
+ import{m as O}from"./chunk-2BRBFLWA.js";import"./chunk-5PZVYF42.js";import{t as E,v as F,x as N}from"./chunk-7NCPUZ52.js";import"./chunk-GEX7RVHY.js";import{r as S}from"./chunk-HWDVC6YA.js";import"./chunk-DQUPSAHE.js";import{createHash as I,randomUUID as q}from"node:crypto";import{createReadStream as D}from"node:fs";import m from"node:fs/promises";import f from"node:path";var T="/__camera-fixtures/",J=new Set([".m4v",".mov",".mp4",".webm"]);function _(){console.log(`
5
5
  rnx camera \u2014 control the simulator camera source
6
6
 
7
7
  usage:
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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:"rnx",domain:"rnxsim.com",origin:"https://rnxsim.com"});export{n as a};
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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{F as b,p as h,r as y,t as S}from"./chunk-4S5CIP7Y.js";import{u as m,y as w,z as p}from"./chunk-OO7E4JTZ.js";var C={timeoutMs:1800,settleMs:48,startWindowMs:64};function g(e){return new Promise(n=>setTimeout(n,e))}function P(e){return e.includes("--json")}function I(e){process.stdout.write(`${JSON.stringify(e??null,null,2)}
4
+ import{F as b,p as h,r as y,t as S}from"./chunk-5PZVYF42.js";import{u as m,y as w,z as p}from"./chunk-7NCPUZ52.js";var C={timeoutMs:1800,settleMs:48,startWindowMs:64};function g(e){return new Promise(n=>setTimeout(n,e))}function P(e){return e.includes("--json")}function I(e){process.stdout.write(`${JSON.stringify(e??null,null,2)}
5
5
  `)}function q(e){process.stderr.write(`${e}
6
6
  `)}function f(e,n=Date.now()){let r=new Date(e),t=`${d(r.getHours())}:${d(r.getMinutes())}:${d(r.getSeconds())}`,s=n-e;if(s<0)return t;let o=Math.round(s/1e3);return o<60?`${t} +${o}s`:o<3600?`${t} +${Math.round(o/60)}m`:o<86400?`${t} +${Math.round(o/3600)}h`:`${t} +${Math.round(o/86400)}d`}function d(e){return e<10?`0${e}`:String(e)}async function T(e,n,...r){return w(e,`__sootsimTest.${n}`,...r)}async function x(e,n,...r){return p(e,`SootSim.bridges.mainShell.${n}`,...r)}async function N(e,n={}){try{let r=await T(e,"waitForScreenTransitions",C);if(!n.verbose||!r?.started)return;if(r.timedOut){console.log(` screen transition still active after ${r.waitedMs}ms; continuing`);return}r.waitedMs>0&&console.log(` waited ${r.waitedMs}ms for screen transition settle`)}catch{}}async function _(e,n,r,...t){let s=Date.now()+Math.max(0,r);for(;;)try{return await x(e,n,...t)}catch(o){if(!b(o)||Date.now()>=s)throw o;await g(50)}}async function k(e,n,r,t={}){let s=t.attempts??30,o=t.intervalMs??500,a=t.minNodeCount??10;for(let i=0;i<s;i++){let l=m(e,{commandTimeoutMs:n,simId:r,simIdSource:t.simIdSource});try{let u=await l.send({type:"evaluate",code:"(async () => (await window.__sootsimTest?.getNodeCount()) || 0)()"});if(typeof u=="number"&&u>a)return{bridge:l,count:u}}catch{}l.close(),await g(o)}return null}async function E(e,n,r,t={}){let s=t.timeoutMs??8e3,o=t.intervalMs??250,a=Date.now()+s;for(;Date.now()<a;){let i=m(e,{commandTimeoutMs:n,simId:r,simIdSource:t.simIdSource});try{return await i.send({type:"evaluate",code:"1"}),i}catch{i.close()}await g(o)}return null}async function O(e,n={}){let r=n.timeoutMs??1e4,t=await h(e,r),s=t.ready?t.flag===!0?"flag":"nodes-fallback":t.errors>0&&t.flag!==!0?"error-bail":"timeout";return{ready:t.ready,source:s,elapsedMs:t.elapsedMs,nodes:t.nodes,targets:t.targets,liveFrameActive:t.liveFrameActive,liveFrameChannels:t.liveFrameChannels,liveFramePublishes:t.liveFramePublishes,flag:t.flag,loadingText:t.loadingText,externalReady:t.externalReady,externalStatus:t.externalStatus,externalError:t.externalError,errors:t.errors}}function M(e){let n=e.displayUrl||e.url;return e.status!=null?`${e.method} ${n} -> ${e.status}${e.statusText?` ${e.statusText}`:""}`:e.error?`${e.method} ${n} -> ${e.error}`:`${e.method} ${n}`}async function $(e,n,...r){return e.send({type:"call",path:`__sootsimTest.${n}`,args:r})}async function v(e,n={}){let r=await e.send({type:"evaluate",code:S});if(!r||typeof r!="object")return;let t=Math.max(0,Number(r.errors)||0),s=Math.max(0,Number(r.warnings)||0);if(t===0&&s===0)return;let o=[];if(t>0&&o.push(`${t} console error${t===1?"":"s"}`),s>0&&o.push(`${s} console warning${s===1?"":"s"}`),console.log(`
7
7
  console: ${o.join(", ")}`),n.errorsCommand&&console.log(` inspect: ${n.errorsCommand}`),s>0&&n.warningsCommand&&console.log(` inspect: ${n.warningsCommand}`),!n.includeTail||t===0)return;let a=await y(e,5);if(!(!Array.isArray(a)||a.length===0)){console.log(`
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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{c as Y}from"./chunk-7PBNTA3M.js";import{c as u}from"./chunk-UQXSAYWY.js";import{P as M,R as H,g as U,j as A,s as O,t as L,u as j}from"./chunk-GQVWJWCZ.js";import{a as V}from"./chunk-U52Z6BML.js";import{a as S}from"./chunk-5VFQ7HKK.js";import{execFileSync as Z,spawnSync as a}from"child_process";import{existsSync as s,mkdirSync as E,readFileSync as le,realpathSync as ue,rmSync as y,writeFileSync as Q}from"fs";import{homedir as w}from"os";import{basename as de,dirname as B,resolve as d,sep as W}from"path";import{execFileSync as re}from"child_process";import{chmodSync as ne,mkdirSync as T,rmSync as oe,writeFileSync as _}from"fs";import{dirname as N}from"path";var se="dev.sootsim.daemon",G="SootSim Daemon",q="0.1.36";function X(e,t,r){let o=L(),n=j(),c=N(N(n)),l=N(n),p=`${c}/Resources`;oe(o,{recursive:!0,force:!0}),T(O(),{recursive:!0}),T(l,{recursive:!0}),T(p,{recursive:!0}),_(`${c}/Info.plist`,ie()),_(`${c}/PkgInfo`,"APPL????"),_(n,ae(e,t,r)),ne(n,493);try{re("codesign",["--force","--sign","-","--deep",o],{stdio:"pipe"})}catch(i){let h=i instanceof Error?i.message:String(i);console.warn(` warning: ad-hoc codesign of ${o} failed: ${h}
4
+ import{c as Y}from"./chunk-4ALPWIMP.js";import{c as u}from"./chunk-T4ISWS5H.js";import{P as M,R as H,g as U,j as A,s as O,t as L,u as j}from"./chunk-HWDVC6YA.js";import{a as V}from"./chunk-4EUKOIAV.js";import{a as S}from"./chunk-25KRGDZT.js";import{execFileSync as Z,spawnSync as a}from"child_process";import{existsSync as s,mkdirSync as E,readFileSync as le,realpathSync as ue,rmSync as y,writeFileSync as Q}from"fs";import{homedir as w}from"os";import{basename as de,dirname as B,resolve as d,sep as W}from"path";import{execFileSync as re}from"child_process";import{chmodSync as ne,mkdirSync as T,rmSync as oe,writeFileSync as _}from"fs";import{dirname as N}from"path";var se="dev.sootsim.daemon",G="SootSim Daemon",q="0.1.36";function X(e,t,r){let o=L(),n=j(),c=N(N(n)),l=N(n),p=`${c}/Resources`;oe(o,{recursive:!0,force:!0}),T(O(),{recursive:!0}),T(l,{recursive:!0}),T(p,{recursive:!0}),_(`${c}/Info.plist`,ie()),_(`${c}/PkgInfo`,"APPL????"),_(n,ae(e,t,r)),ne(n,493);try{re("codesign",["--force","--sign","-","--deep",o],{stdio:"pipe"})}catch(i){let h=i instanceof Error?i.message:String(i);console.warn(` warning: ad-hoc codesign of ${o} failed: ${h}
5
5
  the daemon will still run, but Login Items may show a generic name.`)}return{bundlePath:o,launcherPath:n}}function ie(){return`<?xml version="1.0" encoding="UTF-8"?>
6
6
  <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
7
7
  <plist version="1.0">
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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 w}from"./chunk-XSXSVO4P.js";import{f as g}from"./chunk-ZAUPKGQP.js";import{L as B,T as b,g as S}from"./chunk-GQVWJWCZ.js";import a from"node:fs";import c from"node:path";var f=1,E=`automatic-cleanup-v${f}.json`,x=`automatic-cleanup-v${f}.lock`,P=360*60*1e3,A=`automatic-cleanup-v${f}.deferred.json`,T=1800*1e3;function v(){let s=c.join(S(),E);try{return JSON.parse(a.readFileSync(s,"utf8")).generation===f}catch{return!1}}function J(s=Date.now()){if(v())return!0;let e=c.join(S(),A);try{let n=JSON.parse(a.readFileSync(e,"utf8"));if(n.generation!==f||typeof n.attemptedAt!="number")return!1;let r=s-n.attemptedAt;return r>=0&&r<T}catch{return!1}}function K(s){if(s<1024)return`${s} B`;let e=["KiB","MiB","GiB","TiB"],n=s/1024,r=e[0];for(let i=1;i<e.length&&n>=1024;i++)n/=1024,r=e[i];return`${n.toFixed(n>=10?1:2)} ${r}`}function p(s){let e;try{e=a.lstatSync(s)}catch{return 0}let n=e.blocks>0?e.blocks*512:e.size;if(!e.isDirectory()||e.isSymbolicLink())return n;let r=n;try{for(let i of a.readdirSync(s))r+=p(c.join(s,i))}catch{}return r}function k(s){for(let e of["SingletonLock","SingletonSocket","lockfile"])try{if(a.lstatSync(c.join(s,e)))return!0}catch{}return!1}function C(s,e){let n;try{n=a.readdirSync(s,{withFileTypes:!0})}catch{return[]}let r=k(e),i=[];for(let t of n){if(!t.isDirectory()||t.isSymbolicLink())continue;let o=c.join(s,t.name);if(w(t.name)){i.push({path:o,bytes:p(o),kind:"browser-cache",state:r?"in-use":"safe",selected:!r,detail:r?"browser profile is open; close it before cleanup":"disposable browser HTTP, bytecode, or GPU cache"});continue}i.push(...C(o,e))}return i}function R(s){let e=c.join(s,"profiles","playwright"),n;try{n=a.readdirSync(e,{withFileTypes:!0})}catch{return[]}return n.flatMap(r=>{if(!r.isDirectory()||r.isSymbolicLink())return[];let i=c.join(e,r.name);return C(i,i)})}function D(s){let e=c.join(s,"electron","userData");return C(e,e)}function U(s,e){let n=c.join(s,"recordings"),r;try{r=a.readdirSync(n,{withFileTypes:!0})}catch{return[]}return r.map(i=>{let t=c.join(n,i.name);return{path:t,bytes:p(t),kind:"recording",state:"aggressive",selected:e,detail:"user-created recording or captured-frame output"}})}function L(s,e){let n=c.join(s,"camera-fixtures"),r;try{r=a.readdirSync(n,{withFileTypes:!0})}catch{return[]}return r.map(i=>{let t=c.join(n,i.name);return{path:t,bytes:p(t),kind:"camera-fixture",state:"aggressive",selected:e,detail:"staged camera fixture video"}})}function F(s){let e=new Set(b()),n=[...e],r=g.planLocalRetention({retainVersions:2,protectVersions:n}),i=g.planLocalRetention({retainVersions:1,protectVersions:n}),t=new Set(r.removeVersions),o=new Set(i.removeVersions),m=new Set([...r.keepVersions,...r.removeVersions,...i.keepVersions,...i.removeVersions]),u=[];for(let l of[...m].sort()){let y=g.product.runtimeDir(l),d="retained",h="retained runtime";e.has(l)&&l!==r.activeVersion?(d="in-use",h="runtime is serving a connected simulator"):t.has(l)?(d="safe",h="inactive runtime outside the two-version rollback window"):o.has(l)?(d="aggressive",h="most recent rollback runtime"):l===r.activeVersion&&(h="active runtime; always protected"),u.push({path:y,bytes:p(y),kind:"runtime-version",state:d,selected:d==="safe"||d==="aggressive"&&s,detail:h})}for(let l of r.removeCacheFiles)u.push({path:l,bytes:p(l),kind:"runtime-archive",state:"safe",selected:!0,detail:"downloaded archive is unnecessary after successful extraction"});return{activeRuntime:r.activeVersion,entries:u}}function I(s={}){let e=s.aggressive===!0,n=S(),r=F(e),i=[...r.entries,...R(n),...D(n),...U(n,e),...L(n,e)].sort((t,o)=>o.bytes-t.bytes||t.path.localeCompare(o.path));return{home:n,activeRuntime:r.activeRuntime,entries:i,reclaimableBytes:i.reduce((t,o)=>t+(o.selected?o.bytes:0),0),protectedBytes:i.reduce((t,o)=>t+(o.selected?0:o.bytes),0),totalBytes:p(n)}}function j(s,e){let n=c.relative(s,e);if(!n||n.startsWith("..")||c.isAbsolute(n))throw new Error(`refusing cleanup target outside the rnx data home: ${e}`)}function O(s={}){let e=I(s),n=s.aggressive===!0?1:2;g.pruneLocalRetention({retainVersions:n,protectVersions:b()});for(let t of e.entries)if(t.selected&&!(t.kind==="runtime-archive"||t.kind==="runtime-version")){if(t.kind==="browser-cache"){let m=c.relative(e.home,t.path).split(c.sep),u=m[0]==="profiles"&&m[1]==="playwright"&&m[2]?c.join(e.home,"profiles","playwright",m[2]):m[0]==="electron"&&m[1]==="userData"?c.join(e.home,"electron","userData"):null;if(u&&k(u)){t.state="in-use",t.selected=!1,t.detail="browser profile opened while cleanup was starting";continue}}j(e.home,t.path),a.rmSync(t.path,{recursive:!0,force:!0})}let r=e.entries.filter(t=>t.selected&&!a.existsSync(t.path)).map(t=>t.path),i=p(e.home);return{...e,removedPaths:r,reclaimedBytes:Math.max(0,e.totalBytes-i),remainingBytes:i}}function H(){B();let s=S(),e=c.join(s,E),n=c.join(s,A),r=c.join(s,x);if(v())return{status:"already-complete",reclaimedBytes:0,remainingBytes:0,deferredInUseBytes:0};let i=null;for(let t=0;t<2&&i===null;t++)try{let o=a.openSync(r,"wx");try{a.writeFileSync(o,`${JSON.stringify({pid:process.pid,startedAt:Date.now()})}
4
+ import{b as w}from"./chunk-K7QQWKGE.js";import{f as g}from"./chunk-F5F7FIPM.js";import{L as B,T as b,g as S}from"./chunk-HWDVC6YA.js";import a from"node:fs";import c from"node:path";var f=1,E=`automatic-cleanup-v${f}.json`,x=`automatic-cleanup-v${f}.lock`,P=360*60*1e3,A=`automatic-cleanup-v${f}.deferred.json`,T=1800*1e3;function v(){let s=c.join(S(),E);try{return JSON.parse(a.readFileSync(s,"utf8")).generation===f}catch{return!1}}function J(s=Date.now()){if(v())return!0;let e=c.join(S(),A);try{let n=JSON.parse(a.readFileSync(e,"utf8"));if(n.generation!==f||typeof n.attemptedAt!="number")return!1;let r=s-n.attemptedAt;return r>=0&&r<T}catch{return!1}}function K(s){if(s<1024)return`${s} B`;let e=["KiB","MiB","GiB","TiB"],n=s/1024,r=e[0];for(let i=1;i<e.length&&n>=1024;i++)n/=1024,r=e[i];return`${n.toFixed(n>=10?1:2)} ${r}`}function p(s){let e;try{e=a.lstatSync(s)}catch{return 0}let n=e.blocks>0?e.blocks*512:e.size;if(!e.isDirectory()||e.isSymbolicLink())return n;let r=n;try{for(let i of a.readdirSync(s))r+=p(c.join(s,i))}catch{}return r}function k(s){for(let e of["SingletonLock","SingletonSocket","lockfile"])try{if(a.lstatSync(c.join(s,e)))return!0}catch{}return!1}function C(s,e){let n;try{n=a.readdirSync(s,{withFileTypes:!0})}catch{return[]}let r=k(e),i=[];for(let t of n){if(!t.isDirectory()||t.isSymbolicLink())continue;let o=c.join(s,t.name);if(w(t.name)){i.push({path:o,bytes:p(o),kind:"browser-cache",state:r?"in-use":"safe",selected:!r,detail:r?"browser profile is open; close it before cleanup":"disposable browser HTTP, bytecode, or GPU cache"});continue}i.push(...C(o,e))}return i}function R(s){let e=c.join(s,"profiles","playwright"),n;try{n=a.readdirSync(e,{withFileTypes:!0})}catch{return[]}return n.flatMap(r=>{if(!r.isDirectory()||r.isSymbolicLink())return[];let i=c.join(e,r.name);return C(i,i)})}function D(s){let e=c.join(s,"electron","userData");return C(e,e)}function U(s,e){let n=c.join(s,"recordings"),r;try{r=a.readdirSync(n,{withFileTypes:!0})}catch{return[]}return r.map(i=>{let t=c.join(n,i.name);return{path:t,bytes:p(t),kind:"recording",state:"aggressive",selected:e,detail:"user-created recording or captured-frame output"}})}function L(s,e){let n=c.join(s,"camera-fixtures"),r;try{r=a.readdirSync(n,{withFileTypes:!0})}catch{return[]}return r.map(i=>{let t=c.join(n,i.name);return{path:t,bytes:p(t),kind:"camera-fixture",state:"aggressive",selected:e,detail:"staged camera fixture video"}})}function F(s){let e=new Set(b()),n=[...e],r=g.planLocalRetention({retainVersions:2,protectVersions:n}),i=g.planLocalRetention({retainVersions:1,protectVersions:n}),t=new Set(r.removeVersions),o=new Set(i.removeVersions),m=new Set([...r.keepVersions,...r.removeVersions,...i.keepVersions,...i.removeVersions]),u=[];for(let l of[...m].sort()){let y=g.product.runtimeDir(l),d="retained",h="retained runtime";e.has(l)&&l!==r.activeVersion?(d="in-use",h="runtime is serving a connected simulator"):t.has(l)?(d="safe",h="inactive runtime outside the two-version rollback window"):o.has(l)?(d="aggressive",h="most recent rollback runtime"):l===r.activeVersion&&(h="active runtime; always protected"),u.push({path:y,bytes:p(y),kind:"runtime-version",state:d,selected:d==="safe"||d==="aggressive"&&s,detail:h})}for(let l of r.removeCacheFiles)u.push({path:l,bytes:p(l),kind:"runtime-archive",state:"safe",selected:!0,detail:"downloaded archive is unnecessary after successful extraction"});return{activeRuntime:r.activeVersion,entries:u}}function I(s={}){let e=s.aggressive===!0,n=S(),r=F(e),i=[...r.entries,...R(n),...D(n),...U(n,e),...L(n,e)].sort((t,o)=>o.bytes-t.bytes||t.path.localeCompare(o.path));return{home:n,activeRuntime:r.activeRuntime,entries:i,reclaimableBytes:i.reduce((t,o)=>t+(o.selected?o.bytes:0),0),protectedBytes:i.reduce((t,o)=>t+(o.selected?0:o.bytes),0),totalBytes:p(n)}}function j(s,e){let n=c.relative(s,e);if(!n||n.startsWith("..")||c.isAbsolute(n))throw new Error(`refusing cleanup target outside the rnx data home: ${e}`)}function O(s={}){let e=I(s),n=s.aggressive===!0?1:2;g.pruneLocalRetention({retainVersions:n,protectVersions:b()});for(let t of e.entries)if(t.selected&&!(t.kind==="runtime-archive"||t.kind==="runtime-version")){if(t.kind==="browser-cache"){let m=c.relative(e.home,t.path).split(c.sep),u=m[0]==="profiles"&&m[1]==="playwright"&&m[2]?c.join(e.home,"profiles","playwright",m[2]):m[0]==="electron"&&m[1]==="userData"?c.join(e.home,"electron","userData"):null;if(u&&k(u)){t.state="in-use",t.selected=!1,t.detail="browser profile opened while cleanup was starting";continue}}j(e.home,t.path),a.rmSync(t.path,{recursive:!0,force:!0})}let r=e.entries.filter(t=>t.selected&&!a.existsSync(t.path)).map(t=>t.path),i=p(e.home);return{...e,removedPaths:r,reclaimedBytes:Math.max(0,e.totalBytes-i),remainingBytes:i}}function H(){B();let s=S(),e=c.join(s,E),n=c.join(s,A),r=c.join(s,x);if(v())return{status:"already-complete",reclaimedBytes:0,remainingBytes:0,deferredInUseBytes:0};let i=null;for(let t=0;t<2&&i===null;t++)try{let o=a.openSync(r,"wx");try{a.writeFileSync(o,`${JSON.stringify({pid:process.pid,startedAt:Date.now()})}
5
5
  `,"utf8"),i=o}catch(m){a.closeSync(o);try{a.unlinkSync(r)}catch{}throw m}}catch(o){if((o instanceof Error&&"code"in o?o.code:null)!=="EEXIST")throw o;let u=0,l=0,y=null;try{y=a.lstatSync(r);let d=JSON.parse(a.readFileSync(r,"utf8"));u=typeof d.pid=="number"?d.pid:0,l=typeof d.startedAt=="number"?d.startedAt:0}catch{}if(u>0&&l>0&&Date.now()-l<P)try{return process.kill(u,0),{status:"busy",reclaimedBytes:0,remainingBytes:0,deferredInUseBytes:0}}catch{}if(!y)continue;try{let d=a.lstatSync(r);if(d.dev!==y.dev||d.ino!==y.ino)return{status:"busy",reclaimedBytes:0,remainingBytes:0,deferredInUseBytes:0};a.unlinkSync(r)}catch{}}if(i===null)return{status:"busy",reclaimedBytes:0,remainingBytes:0,deferredInUseBytes:0};try{if(v())return{status:"already-complete",reclaimedBytes:0,remainingBytes:0,deferredInUseBytes:0};let t=O(),o=t.entries.reduce((u,l)=>u+(l.state==="in-use"?l.bytes:0),0);if(o>0){let u=`${n}.${process.pid}.tmp`;return a.writeFileSync(u,`${JSON.stringify({generation:f,attemptedAt:Date.now(),deferredInUseBytes:o})}
6
6
  `,"utf8"),a.renameSync(u,n),{status:"deferred",reclaimedBytes:t.reclaimedBytes,remainingBytes:t.remainingBytes,deferredInUseBytes:o}}let m=`${e}.${process.pid}.tmp`;return a.writeFileSync(m,`${JSON.stringify({generation:f,completedAt:Date.now(),reclaimedBytes:t.reclaimedBytes})}
7
7
  `,"utf8"),a.renameSync(m,e),a.rmSync(n,{force:!0}),{status:"complete",reclaimedBytes:t.reclaimedBytes,remainingBytes:t.remainingBytes,deferredInUseBytes:0}}finally{a.closeSync(i);try{a.unlinkSync(r)}catch{}}}export{v as a,J as b,K as c,I as d,O as e,H as f};
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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 d}from"./chunk-DYE6WT2Q.js";import{a as s}from"./chunk-2MI2ROT4.js";import{a as f,c}from"./chunk-VOYUOTN2.js";import{a as e}from"./chunk-7DLC2M6S.js";import{a as n}from"./chunk-OO7E4JTZ.js";import{d as m,e as p,f as u}from"./chunk-2QVA4PPE.js";import{a}from"./chunk-U52Z6BML.js";import{a as i}from"./chunk-5VFQ7HKK.js";function g(){return`${i.commandName} CLI v${a()} \xB7 ${d().primary}`}function E(){let r=p({bridgePort:7668,defaultShellUrl:n},e()),o=`
4
+ import{a as d}from"./chunk-HNPHODBD.js";import{a as s}from"./chunk-ZXFVBYJY.js";import{a as f,c}from"./chunk-AQ5TMOAI.js";import{a as e}from"./chunk-TPPVAA7Z.js";import{a as n}from"./chunk-7NCPUZ52.js";import{d as m,e as p,f as u}from"./chunk-XUBV77WH.js";import{a}from"./chunk-4EUKOIAV.js";import{a as i}from"./chunk-25KRGDZT.js";function g(){return`${i.commandName} CLI v${a()} \xB7 ${d().primary}`}function E(){let r=p({bridgePort:7668,defaultShellUrl:n},e()),o=`
5
5
  ${c}
6
6
  `;console.log(`${g()}
7
7
  ${o}${r}
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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"]),d=new Set(["do","get","wait","shell","debug"]),b=new Set(["detox","maestro","record","film","storage","permissions","perf","screenshot","state","reset","camera","mode","debug","timeline","what-happened","shell","assert","device","open","ios","android","box","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(d.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(b.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.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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 t}from"./chunk-5VFQ7HKK.js";import{readFileSync as a}from"node:fs";import{fileURLToPath as n}from"node:url";var r=null;function f(){if(r!=null)return r;let o=[()=>n(import.meta.resolve(`${t.packageName}/package.json`)),()=>n(new URL("../package.json",import.meta.url))];for(let i of o)try{let e=JSON.parse(a(i(),"utf8")).version;if(typeof e=="string"&&e)return r=e,r}catch{}return r="0.0.0",r}export{f as a};
4
+ import{a as t}from"./chunk-25KRGDZT.js";import{readFileSync as a}from"node:fs";import{fileURLToPath as n}from"node:url";var r=null;function f(){if(r!=null)return r;let o=[()=>n(import.meta.resolve(`${t.packageName}/package.json`)),()=>n(new URL("../package.json",import.meta.url))];for(let i of o)try{let e=JSON.parse(a(i(),"utf8")).version;if(typeof e=="string"&&e)return r=e,r}catch{}return r="0.0.0",r}export{f as a};
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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 G,b as V,c as W,d as v}from"./chunk-RXDJ422X.js";import{a as L}from"./chunk-KN6LU33B.js";import{q as F}from"./chunk-L6VQSQ5O.js";import{a as M}from"./chunk-HM5TGIVN.js";import{b as Y,c as g}from"./chunk-UAMMP7U7.js";import{f as c}from"./chunk-ZAUPKGQP.js";import{c as B}from"./chunk-Y3LVGZKE.js";import{a as p,b as C,c as y,d as h,f as E,g as a,h as w,i as f,j as N}from"./chunk-PZYF2TKR.js";import{a as A}from"./chunk-VDCYIT2N.js";import{D as O,E as j,F as $,G as T,M as I,l as P}from"./chunk-GQVWJWCZ.js";import{a as q}from"./chunk-U52Z6BML.js";import J from"node:os";import K from"node:path";async function Pe(e,n={}){if(e.includes("--help")||e.includes("-h")){ue();return}let r=ee(e),o=n.launchConnectRN??(!r.ci&&!r.yes&&!r.json&&!r.dryRun&&process.stdin.isTTY);try{ce(r);let t=G(r.appDir),i=Y(),z=$(),R=await te(r,i);!R&&!i.installed&&!r.json&&console.log(` ${y("Enable it later with")} ${p("rnx daemon install")}`);let u=await oe(r),Q=r.json?await c.fetchManifest():await w("Checking the rnx runtime",()=>c.fetchManifest()),l=c.resolveVersion(Q,{channel:"stable"}).version,b=q();if(b==="0.0.0")throw new Error("could not resolve the installed rnx CLI version");let S=!1;if(!r.dryRun){let d=I(),x=()=>c.install({version:l,channel:"stable",setActive:!0,protectVersions:d?[d]:[]});S=(r.json?await x():await w(`Preparing runtime ${l}`,x)).installed}let D=i.installed;R&&!i.installed&&!r.dryRun&&(r.json?await g({port:7668,force:!1}):(console.log(`
4
+ import{a as G,b as V,c as W,d as v}from"./chunk-SWBUNMQS.js";import{a as L}from"./chunk-LD7I266X.js";import{q as F}from"./chunk-EWPAI4MO.js";import{a as M}from"./chunk-Z6LOIW46.js";import{b as Y,c as g}from"./chunk-2GXNAZHB.js";import{f as c}from"./chunk-F5F7FIPM.js";import{c as B}from"./chunk-DSD2UBZI.js";import{a as p,b as C,c as y,d as h,f as E,g as a,h as w,i as f,j as N}from"./chunk-S65CK3RI.js";import{a as A}from"./chunk-LMHBU5LZ.js";import{D as O,E as j,F as $,G as T,M as I,l as P}from"./chunk-HWDVC6YA.js";import{a as q}from"./chunk-4EUKOIAV.js";import J from"node:os";import K from"node:path";async function Pe(e,n={}){if(e.includes("--help")||e.includes("-h")){ue();return}let r=ee(e),o=n.launchConnectRN??(!r.ci&&!r.yes&&!r.json&&!r.dryRun&&process.stdin.isTTY);try{ce(r);let t=G(r.appDir),i=Y(),z=$(),R=await te(r,i);!R&&!i.installed&&!r.json&&console.log(` ${y("Enable it later with")} ${p("rnx daemon install")}`);let u=await oe(r),Q=r.json?await c.fetchManifest():await w("Checking the rnx runtime",()=>c.fetchManifest()),l=c.resolveVersion(Q,{channel:"stable"}).version,b=q();if(b==="0.0.0")throw new Error("could not resolve the installed rnx CLI version");let S=!1;if(!r.dryRun){let d=I(),x=()=>c.install({version:l,channel:"stable",setActive:!0,protectVersions:d?[d]:[]});S=(r.json?await x():await w(`Preparing runtime ${l}`,x)).installed}let D=i.installed;R&&!i.installed&&!r.dryRun&&(r.json?await g({port:7668,force:!1}):(console.log(`
5
5
  ${p("\u25C6")} ${C("Enabling the background service")}`),await g({port:7668,force:!1})),D=!0),u==="electron"&&!r.dryRun&&!M()&&await L(["--yes"]),o&&(console.log(`
6
6
  ${p("\u25C6")} Opening ConnectRN`),await F(["ConnectRN","--driver",u,"--no-describe","--quiet"]));let X=await ie(r,z),Z=!1,s=t?V({appDir:t,cliVersion:b}):null,m=await se(r,s);if(m&&s){if(!r.json)for(let d of v(s))console.log(` ${y(r.dryRun?"Would run":"Running")} ${d}`);await W(s,{dryRun:r.dryRun,json:r.json})}r.dryRun||(T({productAnalytics:X,crashReports:Z}),j(u));let k={runtimeVersion:l,serviceInstalled:D,repositoryPrepared:m,simulatorDriver:u};return r.json?console.log(JSON.stringify({...k,runtimeInstalled:S,dryRun:r.dryRun,cache:ae(l),repositoryOperations:m&&s?v(s):[]},null,2)):console.log(`
7
7
  ${h("\u2713")} ${o?"ConnectRN is open. ":""}rnx is ready.`),k}catch(t){throw B(t),t}}function ee(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:K.resolve(r??process.cwd()),ci:e.includes("--ci")||A(),dryRun:e.includes("--dry-run"),json:e.includes("--json"),yes:e.includes("--yes")||e.includes("-y"),service:H(e,"--service","--no-service"),repository:H(e,"--repo","--no-repo"),productAnalytics:ne(e,"--analytics"),simulatorDriver:re(e)}}function re(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 H(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 ne(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 te(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(` ${h("\u2713")} Background service is ready`),!0):e.service!==void 0?e.service:e.yes?!0:(U(e,"--service or --no-service"),a("Background service",["Keeps the local bridge and runtime ready between commands.","Agent inspection, interaction, and test commands start much faster."]),f("Enable the background service?",!0)):(e.json||a("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 oe(e){if(e.simulatorDriver)return e.simulatorDriver;let n=O();if(n)return n;if(e.ci||e.yes)return"playwright";U(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 a("Simulator window",["Browser opens immediately in an isolated Chrome window.",r,"The Desktop app opens in a dedicated native window."]),await N("Where should rnx open?",["Browser (recommended) No additional download",o])===0?"playwright":"electron"}async function ie(e,n){return e.productAnalytics!==void 0?e.productAnalytics:n.configured?n.productAnalytics:e.yes||e.ci||!process.stdin.isTTY?!1:(a("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."]),f("Share bounded diagnostics to improve rnx?",!1))}async function se(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:(a("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."]),f(`Add rnx to ${K.basename(n.appDir)}?`,!1))}function U(e,n){if(!(process.stdin.isTTY&&!e.ci))throw new Error(`non-interactive setup requires ${n}, or --yes to accept defaults`)}function ae(e){let n=J.platform(),r=J.arch();return{path:P(e),key:`sootsim-runtime-${n}-${r}-${e}`,inputs:{platform:n,arch:r,runtimeVersion:e}}}function ce(e){e.json||E("Run any React Native app in a local simulator. No project setup required.")}function ue(){console.log(`
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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,7 +1,7 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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 N}from"./chunk-5WXRC4BW.js";import{o as R}from"./chunk-GQVWJWCZ.js";import{a as I}from"./chunk-5VFQ7HKK.js";import{a as T}from"./chunk-RU565DEH.js";function G(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.type=="string"&&typeof t.ts=="number"}function O(e){let t=e.trim();if(!t)return null;try{let r=JSON.parse(t);return G(r)?r:null}catch{return null}}import{randomBytes as q,createHash as X}from"node:crypto";import f from"node:fs";import h from"node:path";var $=null;function B(){if($)return $;let e=process.env.SOOTSIM_USER_DATA_DIR;return e||R()}function y(){return B()}function U(){return h.join(B(),"attached-projects.json")}function _(){return{version:1,attachedProjects:[],previewAttachments:[],agentSessions:[]}}function S(){let e=U(),t;try{t=f.readFileSync(e,"utf8")}catch(r){if(r.code==="ENOENT")return _();throw r}try{let r=JSON.parse(t);if(!r||typeof r!="object")throw new Error("not an object");return{version:1,attachedProjects:Array.isArray(r.attachedProjects)?r.attachedProjects:[],previewAttachments:Array.isArray(r.previewAttachments)?r.previewAttachments:[],agentSessions:Array.isArray(r.agentSessions)?r.agentSessions:[]}}catch(r){let n=`${e}.corrupt-${Date.now()}`;try{f.renameSync(e,n),console.warn(`[sootsim] attached-projects.json was unparseable; quarantined to ${n}. original error: ${r.message}`)}catch{}return _()}}function K(e){let t=U();f.mkdirSync(h.dirname(t),{recursive:!0});let r=`${t}.tmp-${process.pid}-${Date.now()}`,n=f.openSync(r,"w",384);try{f.writeFileSync(n,JSON.stringify(e,null,2)),f.fsyncSync(n)}finally{f.closeSync(n)}f.renameSync(r,t)}function w(e){let t=S();return e(t),K(t),t}function F(e){return X("sha256").update(h.resolve(e)).digest("hex").slice(0,16)}function Q(){return`s_${q(10).toString("hex")}`}function Se(e){let t=h.resolve(e.cwd),r=F(t),n;return w(o=>{let s=o.attachedProjects.find(a=>a.id===r);if(s){let a={...s,...e,id:r,cwd:t,sourceRoots:e.sourceRoots??s.sourceRoots,knownBundleUrls:e.knownBundleUrls??s.knownBundleUrls,pinnedSourceResolutions:e.pinnedSourceResolutions??s.pinnedSourceResolutions,telemetry:e.telemetry??s.telemetry,updatedAt:Date.now(),createdAt:s.createdAt},g=o.attachedProjects.indexOf(s);o.attachedProjects[g]=a,n=a;return}let c=Date.now(),d={id:r,name:e.name??h.basename(t),cwd:t,repoRoot:e.repoRoot,sourceRoots:e.sourceRoots??[t],framework:e.framework??"unknown",bundleId:e.bundleId,knownBundleUrls:e.knownBundleUrls??[],preferredProvider:e.preferredProvider??"codex",preferredTransport:e.preferredTransport??"tmux",editorOpenCommand:e.editorOpenCommand,moshiWebhookToken:e.moshiWebhookToken,pinnedSourceResolutions:e.pinnedSourceResolutions??{},isolateDiscovery:e.isolateDiscovery,git:e.git,telemetry:e.telemetry??{lastOpened:0,runsCompleted:0},createdAt:c,updatedAt:c};o.attachedProjects.push(d),n=d}),n}function M(e){return S().attachedProjects.find(t=>t.id===e)??null}function we(){return S().attachedProjects}var V=336*60*60*1e3;function ve(e,t={}){w(r=>{let n=r.attachedProjects.find(s=>s.id===e);if(!n)return;let o=t.ts??Date.now();if(n.telemetry.runsCompleted=(n.telemetry.runsCompleted??0)+1,typeof t.usd=="number"&&Number.isFinite(t.usd)&&t.usd>=0){let s=n.telemetry.costHistory??[],c=o-V,d=s.filter(a=>a.ts>=c);d.push({ts:o,usd:t.usd}),n.telemetry.costHistory=d}n.updatedAt=o})}function Ae(e,t=Date.now()){let r=t-6048e5,n=e.telemetry.costHistory??[],o=0;for(let s of n)s.ts>=r&&(o+=s.usd);return o}function xe(e){w(t=>{t.attachedProjects=t.attachedProjects.filter(r=>r.id!==e),t.agentSessions=t.agentSessions.filter(r=>r.projectId!==e),t.previewAttachments=t.previewAttachments.filter(r=>r.projectId!==e)})}function C(e){let t;return w(r=>{if(e.id){let c=r.agentSessions.find(d=>d.id===e.id);if(c){let d={...c,...e,lastSeenAt:Date.now()},a=r.agentSessions.indexOf(c);r.agentSessions[a]=d,t=d;return}}let n=r.attachedProjects.find(c=>c.id===e.projectId);if(!n)throw new Error(`upsertSession: no AttachedProject with id=${e.projectId}`);let o=Date.now(),s={id:e.id??Q(),projectId:e.projectId,provider:e.provider,transport:e.transport??n.preferredTransport,cwd:e.cwd??n.cwd,claudeSessionUuid:e.claudeSessionUuid,tmuxSessionName:e.tmuxSessionName,wrapperPid:e.wrapperPid,status:e.status??"idle",needsAttention:e.needsAttention??!1,lastPrompt:e.lastPrompt,lastSummary:e.lastSummary,lastTurnFiles:e.lastTurnFiles,currentlyEditing:e.currentlyEditing,lastSeenAt:o,createdAt:o};r.agentSessions.push(s),t=s}),t}function k(e){return S().agentSessions.find(t=>t.id===e)??null}function L(e){let t=S().agentSessions;return e?t.filter(r=>r.projectId===e):t}function z(e,t,r=Date.now()){return{...e,...t,id:e.id,projectId:e.projectId,createdAt:e.createdAt,lastSeenAt:r}}function Z(e){e.length!==0&&w(t=>{let r=Date.now(),n=new Map(t.agentSessions.map((o,s)=>[o.id,s]));for(let{id:o,patch:s}of e){let c=n.get(o);c!==void 0&&(t.agentSessions[c]=z(t.agentSessions[c],s,r))}})}function v(e,t){Z([{id:e,patch:t}])}async function Pe(){if(S().attachedProjects.length>0)return;let{loadOptionalDemoApps:t}=await import("./optional-demo-registry-RP2H6SQR.js"),r=await t();r.length!==0&&w(n=>{for(let o of r){if(!f.existsSync(o.dir))continue;let s=h.resolve(o.dir),c=F(s);if(n.attachedProjects.some(a=>a.id===c))continue;let d=Date.now();n.attachedProjects.push({id:c,name:o.label,cwd:s,sourceRoots:[s],framework:o.framework,knownBundleUrls:[`http://localhost:${o.preferredPort}/index.bundle`],preferredProvider:"codex",preferredTransport:"tmux",pinnedSourceResolutions:{},telemetry:{lastOpened:0,runsCompleted:0},createdAt:d,updatedAt:d})}})}import{spawn as ee,spawnSync as te}from"node:child_process";import{randomUUID as re}from"node:crypto";import i,{constants as m}from"node:fs";import u from"node:path";import ne from"node:readline";function b(e){return u.join(y(),"sessions",e)}function J(e){return u.join(b(e),"prompt.in")}function H(e){return u.join(b(e),"events.out")}function se(e){return u.join(y(),"transcripts",`${e}.log`)}function E(e,t){if(!e)return!1;try{process.kill(e,0)}catch{return!1}return!(t&&!i.existsSync(b(t)))}function oe(){if(process.env.SOOTSIM_BIN)return{cmd:process.env.SOOTSIM_BIN,prefixArgs:[]};if(process.versions.electron){let n=process.resourcesPath;if(n){let o=[u.join(n,"bin","sootsim"),u.join(n,"bin",`sootsim-${process.platform}-${process.arch}`)];for(let s of o)if(i.existsSync(s))return{cmd:s,prefixArgs:[]}}}let e=ie();if(e)return e;let t=process.argv[0],r=process.argv[1];if(r&&/\.(ts|tsx|mjs|cjs|js)$/.test(r))return{cmd:t,prefixArgs:[r]};if(!r||r.includes("/.bin/"))throw new Error("rnx CLI not found. set SOOTSIM_BIN to the path of the rnx binary, or build the workspace CLI via `bun run --cwd packages/sootsim build:cli`.");return{cmd:t,prefixArgs:[]}}function ie(){try{let e=ce();if(!e)return null;let t=`sootsim-${process.platform}-${process.arch}`,r=u.join(e,"dist-bin",t);if(i.existsSync(r))return{cmd:r,prefixArgs:[]};let n=u.join(e,"dist-cli","bin.js");if(i.existsSync(n)){try{let o=u.join(e,"cli","commands","agent-wrapper.ts");if(i.existsSync(o)){let s=i.statSync(o).mtimeMs;i.statSync(n).mtimeMs<s&&console.warn("[rnx] dist-cli/bin.js is older than agent-wrapper.ts \u2014 rebuild with `bun run --cwd packages/sootsim build:cli`.")}}catch{}return{cmd:process.execPath,prefixArgs:[n]}}return null}catch{return null}}function ce(){try{let r=T.resolve(`${I.packageName}/package.json`);return u.dirname(r)}catch{}let e=ae();if(!e)return null;let t=u.dirname(e);for(let r=0;r<8;r++){let n=u.join(t,"package.json");try{if(i.existsSync(n)&&JSON.parse(i.readFileSync(n,"utf8")).name===I.packageName)return t}catch{}let o=u.dirname(t);if(o===t)break;t=o}return null}function ae(){try{let e=import.meta.url;return!e||!e.startsWith("file://")?null:decodeURIComponent(e.slice(7))}catch{return null}}async function de(e,t,r){let n=u.join(y(),"locks");i.mkdirSync(n,{recursive:!0});try{i.chmodSync(n,448)}catch{}let o=u.join(n,`start-${e}-${t}.lock`),s=Date.now()+4e3,c=null;for(;c===null;)try{c=i.openSync(o,m.O_WRONLY|m.O_CREAT|m.O_EXCL,384)}catch(d){if(d.code!=="EEXIST")throw d;try{let a=Number(i.readFileSync(o,"utf8").trim());if(a&&!ue(a)){i.unlinkSync(o);continue}}catch{}if(Date.now()>s)throw new Error(`another start is in progress for project=${e} provider=${t} (lock: ${o})`);await new Promise(a=>setTimeout(a,50))}try{return i.writeFileSync(c,String(process.pid)),await r()}finally{try{i.closeSync(c)}catch{}try{i.unlinkSync(o)}catch{}}}function ue(e){try{return process.kill(e,0),!0}catch{return!1}}function W(e){let t=u.dirname(e);i.mkdirSync(t,{recursive:!0});try{i.chmodSync(t,448)}catch{}if(i.existsSync(e))try{if(i.statSync(e).isFIFO()){try{i.chmodSync(e,384)}catch{}return}i.unlinkSync(e)}catch{i.unlinkSync(e)}let r=te("mkfifo",["-m","600",e]);if(r.status!==0)throw new Error(`mkfifo(${e}) failed: ${r.stderr?.toString().trim()||"unknown error"}`)}var l=class extends Error{code;constructor(t,r){super(r),this.code=t}};async function $e(e){let t=M(e.projectId);if(!t)throw new l("NO_PROJECT",`no project with id=${e.projectId}`);let r=e.provider||t.preferredProvider||"codex";return de(t.id,r,async()=>{let n=L(t.id).find(p=>p.provider===r&&p.status!=="ended"&&E(p.wrapperPid,p.id));if(n)throw new l("ALREADY_RUNNING",`session already running for project=${t.id} provider=${r} (session ${n.id}, pid ${n.wrapperPid}). end it first with \`rnx agent end <sessionId>\`.`);let o=r==="claude"?re():void 0,s=C({projectId:t.id,provider:r,transport:"pty",cwd:t.cwd,status:"idle",claudeSessionUuid:o}),c=J(s.id),d=H(s.id),a=se(s.id);W(c),W(d);let g=u.dirname(a);i.mkdirSync(g,{recursive:!0});try{i.chmodSync(g,448)}catch{}let{cmd:A,prefixArgs:Y}=oe(),x=[...Y,"agent-wrapper","--session-id",s.id,"--project-id",t.id,"--provider",r,"--cwd",t.cwd,"--prompt-in",c,"--events-out",d,"--transcript",a];e.codexBin&&x.push("--codex-bin",e.codexBin),e.claudeBin&&x.push("--claude-bin",e.claudeBin),e.freshThread&&x.push("--fresh-thread"),o&&x.push("--claude-session-uuid",o);let P=ee(A,x,{detached:!0,stdio:"ignore",env:{...process.env,SOOTSIM_USER_DATA_DIR:y()}});P.unref();let D=e.readyTimeoutMs??6e3,j=await le(d,p=>p.type==="ready"||p.type==="error",D);if(!j||j.type==="error"){if(P.pid)try{process.kill(P.pid,"SIGTERM")}catch{}try{i.rmSync(b(s.id),{recursive:!0,force:!0})}catch{}v(s.id,{status:"ended"});let p=j&&j.type==="error"?j.message:`no ready event within ${D}ms`;throw new l("WRAPPER_FAILED",p)}return v(s.id,{wrapperPid:P.pid,status:"idle"}),{session:k(s.id),wrapperPid:P.pid}})}async function _e(e,t){let r=k(e);if(!r)throw new l("NO_SESSION",`no session with id=${e}`);if(!E(r.wrapperPid,e))throw v(e,{status:"ended"}),new l("NOT_ALIVE",`session wrapper is not alive (pid=${r.wrapperPid}). start a new session.`);let n=J(e);if(!i.existsSync(n))throw new l("NO_FIFO",`prompt FIFO missing: ${n}`);let o=i.openSync(n,m.O_WRONLY);try{let s=N(t);if(!s)throw new l("EMPTY_PROMPT","prompt text is empty");i.writeSync(o,s+`
4
+ import{a as N}from"./chunk-GDLE4NIV.js";import{o as R}from"./chunk-HWDVC6YA.js";import{a as I}from"./chunk-25KRGDZT.js";import{a as T}from"./chunk-DQUPSAHE.js";function G(e){if(!e||typeof e!="object")return!1;let t=e;return typeof t.type=="string"&&typeof t.ts=="number"}function O(e){let t=e.trim();if(!t)return null;try{let r=JSON.parse(t);return G(r)?r:null}catch{return null}}import{randomBytes as q,createHash as X}from"node:crypto";import f from"node:fs";import h from"node:path";var $=null;function B(){if($)return $;let e=process.env.SOOTSIM_USER_DATA_DIR;return e||R()}function y(){return B()}function U(){return h.join(B(),"attached-projects.json")}function _(){return{version:1,attachedProjects:[],previewAttachments:[],agentSessions:[]}}function S(){let e=U(),t;try{t=f.readFileSync(e,"utf8")}catch(r){if(r.code==="ENOENT")return _();throw r}try{let r=JSON.parse(t);if(!r||typeof r!="object")throw new Error("not an object");return{version:1,attachedProjects:Array.isArray(r.attachedProjects)?r.attachedProjects:[],previewAttachments:Array.isArray(r.previewAttachments)?r.previewAttachments:[],agentSessions:Array.isArray(r.agentSessions)?r.agentSessions:[]}}catch(r){let n=`${e}.corrupt-${Date.now()}`;try{f.renameSync(e,n),console.warn(`[sootsim] attached-projects.json was unparseable; quarantined to ${n}. original error: ${r.message}`)}catch{}return _()}}function K(e){let t=U();f.mkdirSync(h.dirname(t),{recursive:!0});let r=`${t}.tmp-${process.pid}-${Date.now()}`,n=f.openSync(r,"w",384);try{f.writeFileSync(n,JSON.stringify(e,null,2)),f.fsyncSync(n)}finally{f.closeSync(n)}f.renameSync(r,t)}function w(e){let t=S();return e(t),K(t),t}function F(e){return X("sha256").update(h.resolve(e)).digest("hex").slice(0,16)}function Q(){return`s_${q(10).toString("hex")}`}function Se(e){let t=h.resolve(e.cwd),r=F(t),n;return w(o=>{let s=o.attachedProjects.find(a=>a.id===r);if(s){let a={...s,...e,id:r,cwd:t,sourceRoots:e.sourceRoots??s.sourceRoots,knownBundleUrls:e.knownBundleUrls??s.knownBundleUrls,pinnedSourceResolutions:e.pinnedSourceResolutions??s.pinnedSourceResolutions,telemetry:e.telemetry??s.telemetry,updatedAt:Date.now(),createdAt:s.createdAt},g=o.attachedProjects.indexOf(s);o.attachedProjects[g]=a,n=a;return}let c=Date.now(),d={id:r,name:e.name??h.basename(t),cwd:t,repoRoot:e.repoRoot,sourceRoots:e.sourceRoots??[t],framework:e.framework??"unknown",bundleId:e.bundleId,knownBundleUrls:e.knownBundleUrls??[],preferredProvider:e.preferredProvider??"codex",preferredTransport:e.preferredTransport??"tmux",editorOpenCommand:e.editorOpenCommand,moshiWebhookToken:e.moshiWebhookToken,pinnedSourceResolutions:e.pinnedSourceResolutions??{},isolateDiscovery:e.isolateDiscovery,git:e.git,telemetry:e.telemetry??{lastOpened:0,runsCompleted:0},createdAt:c,updatedAt:c};o.attachedProjects.push(d),n=d}),n}function M(e){return S().attachedProjects.find(t=>t.id===e)??null}function we(){return S().attachedProjects}var V=336*60*60*1e3;function ve(e,t={}){w(r=>{let n=r.attachedProjects.find(s=>s.id===e);if(!n)return;let o=t.ts??Date.now();if(n.telemetry.runsCompleted=(n.telemetry.runsCompleted??0)+1,typeof t.usd=="number"&&Number.isFinite(t.usd)&&t.usd>=0){let s=n.telemetry.costHistory??[],c=o-V,d=s.filter(a=>a.ts>=c);d.push({ts:o,usd:t.usd}),n.telemetry.costHistory=d}n.updatedAt=o})}function Ae(e,t=Date.now()){let r=t-6048e5,n=e.telemetry.costHistory??[],o=0;for(let s of n)s.ts>=r&&(o+=s.usd);return o}function xe(e){w(t=>{t.attachedProjects=t.attachedProjects.filter(r=>r.id!==e),t.agentSessions=t.agentSessions.filter(r=>r.projectId!==e),t.previewAttachments=t.previewAttachments.filter(r=>r.projectId!==e)})}function C(e){let t;return w(r=>{if(e.id){let c=r.agentSessions.find(d=>d.id===e.id);if(c){let d={...c,...e,lastSeenAt:Date.now()},a=r.agentSessions.indexOf(c);r.agentSessions[a]=d,t=d;return}}let n=r.attachedProjects.find(c=>c.id===e.projectId);if(!n)throw new Error(`upsertSession: no AttachedProject with id=${e.projectId}`);let o=Date.now(),s={id:e.id??Q(),projectId:e.projectId,provider:e.provider,transport:e.transport??n.preferredTransport,cwd:e.cwd??n.cwd,claudeSessionUuid:e.claudeSessionUuid,tmuxSessionName:e.tmuxSessionName,wrapperPid:e.wrapperPid,status:e.status??"idle",needsAttention:e.needsAttention??!1,lastPrompt:e.lastPrompt,lastSummary:e.lastSummary,lastTurnFiles:e.lastTurnFiles,currentlyEditing:e.currentlyEditing,lastSeenAt:o,createdAt:o};r.agentSessions.push(s),t=s}),t}function k(e){return S().agentSessions.find(t=>t.id===e)??null}function L(e){let t=S().agentSessions;return e?t.filter(r=>r.projectId===e):t}function z(e,t,r=Date.now()){return{...e,...t,id:e.id,projectId:e.projectId,createdAt:e.createdAt,lastSeenAt:r}}function Z(e){e.length!==0&&w(t=>{let r=Date.now(),n=new Map(t.agentSessions.map((o,s)=>[o.id,s]));for(let{id:o,patch:s}of e){let c=n.get(o);c!==void 0&&(t.agentSessions[c]=z(t.agentSessions[c],s,r))}})}function v(e,t){Z([{id:e,patch:t}])}async function Pe(){if(S().attachedProjects.length>0)return;let{loadOptionalDemoApps:t}=await import("./optional-demo-registry-CBSYF4CG.js"),r=await t();r.length!==0&&w(n=>{for(let o of r){if(!f.existsSync(o.dir))continue;let s=h.resolve(o.dir),c=F(s);if(n.attachedProjects.some(a=>a.id===c))continue;let d=Date.now();n.attachedProjects.push({id:c,name:o.label,cwd:s,sourceRoots:[s],framework:o.framework,knownBundleUrls:[`http://localhost:${o.preferredPort}/index.bundle`],preferredProvider:"codex",preferredTransport:"tmux",pinnedSourceResolutions:{},telemetry:{lastOpened:0,runsCompleted:0},createdAt:d,updatedAt:d})}})}import{spawn as ee,spawnSync as te}from"node:child_process";import{randomUUID as re}from"node:crypto";import i,{constants as m}from"node:fs";import u from"node:path";import ne from"node:readline";function b(e){return u.join(y(),"sessions",e)}function J(e){return u.join(b(e),"prompt.in")}function H(e){return u.join(b(e),"events.out")}function se(e){return u.join(y(),"transcripts",`${e}.log`)}function E(e,t){if(!e)return!1;try{process.kill(e,0)}catch{return!1}return!(t&&!i.existsSync(b(t)))}function oe(){if(process.env.SOOTSIM_BIN)return{cmd:process.env.SOOTSIM_BIN,prefixArgs:[]};if(process.versions.electron){let n=process.resourcesPath;if(n){let o=[u.join(n,"bin","sootsim"),u.join(n,"bin",`sootsim-${process.platform}-${process.arch}`)];for(let s of o)if(i.existsSync(s))return{cmd:s,prefixArgs:[]}}}let e=ie();if(e)return e;let t=process.argv[0],r=process.argv[1];if(r&&/\.(ts|tsx|mjs|cjs|js)$/.test(r))return{cmd:t,prefixArgs:[r]};if(!r||r.includes("/.bin/"))throw new Error("rnx CLI not found. set SOOTSIM_BIN to the path of the rnx binary, or build the workspace CLI via `bun run --cwd packages/sootsim build:cli`.");return{cmd:t,prefixArgs:[]}}function ie(){try{let e=ce();if(!e)return null;let t=`sootsim-${process.platform}-${process.arch}`,r=u.join(e,"dist-bin",t);if(i.existsSync(r))return{cmd:r,prefixArgs:[]};let n=u.join(e,"dist-cli","bin.js");if(i.existsSync(n)){try{let o=u.join(e,"cli","commands","agent-wrapper.ts");if(i.existsSync(o)){let s=i.statSync(o).mtimeMs;i.statSync(n).mtimeMs<s&&console.warn("[rnx] dist-cli/bin.js is older than agent-wrapper.ts \u2014 rebuild with `bun run --cwd packages/sootsim build:cli`.")}}catch{}return{cmd:process.execPath,prefixArgs:[n]}}return null}catch{return null}}function ce(){try{let r=T.resolve(`${I.packageName}/package.json`);return u.dirname(r)}catch{}let e=ae();if(!e)return null;let t=u.dirname(e);for(let r=0;r<8;r++){let n=u.join(t,"package.json");try{if(i.existsSync(n)&&JSON.parse(i.readFileSync(n,"utf8")).name===I.packageName)return t}catch{}let o=u.dirname(t);if(o===t)break;t=o}return null}function ae(){try{let e=import.meta.url;return!e||!e.startsWith("file://")?null:decodeURIComponent(e.slice(7))}catch{return null}}async function de(e,t,r){let n=u.join(y(),"locks");i.mkdirSync(n,{recursive:!0});try{i.chmodSync(n,448)}catch{}let o=u.join(n,`start-${e}-${t}.lock`),s=Date.now()+4e3,c=null;for(;c===null;)try{c=i.openSync(o,m.O_WRONLY|m.O_CREAT|m.O_EXCL,384)}catch(d){if(d.code!=="EEXIST")throw d;try{let a=Number(i.readFileSync(o,"utf8").trim());if(a&&!ue(a)){i.unlinkSync(o);continue}}catch{}if(Date.now()>s)throw new Error(`another start is in progress for project=${e} provider=${t} (lock: ${o})`);await new Promise(a=>setTimeout(a,50))}try{return i.writeFileSync(c,String(process.pid)),await r()}finally{try{i.closeSync(c)}catch{}try{i.unlinkSync(o)}catch{}}}function ue(e){try{return process.kill(e,0),!0}catch{return!1}}function W(e){let t=u.dirname(e);i.mkdirSync(t,{recursive:!0});try{i.chmodSync(t,448)}catch{}if(i.existsSync(e))try{if(i.statSync(e).isFIFO()){try{i.chmodSync(e,384)}catch{}return}i.unlinkSync(e)}catch{i.unlinkSync(e)}let r=te("mkfifo",["-m","600",e]);if(r.status!==0)throw new Error(`mkfifo(${e}) failed: ${r.stderr?.toString().trim()||"unknown error"}`)}var l=class extends Error{code;constructor(t,r){super(r),this.code=t}};async function $e(e){let t=M(e.projectId);if(!t)throw new l("NO_PROJECT",`no project with id=${e.projectId}`);let r=e.provider||t.preferredProvider||"codex";return de(t.id,r,async()=>{let n=L(t.id).find(p=>p.provider===r&&p.status!=="ended"&&E(p.wrapperPid,p.id));if(n)throw new l("ALREADY_RUNNING",`session already running for project=${t.id} provider=${r} (session ${n.id}, pid ${n.wrapperPid}). end it first with \`rnx agent end <sessionId>\`.`);let o=r==="claude"?re():void 0,s=C({projectId:t.id,provider:r,transport:"pty",cwd:t.cwd,status:"idle",claudeSessionUuid:o}),c=J(s.id),d=H(s.id),a=se(s.id);W(c),W(d);let g=u.dirname(a);i.mkdirSync(g,{recursive:!0});try{i.chmodSync(g,448)}catch{}let{cmd:A,prefixArgs:Y}=oe(),x=[...Y,"agent-wrapper","--session-id",s.id,"--project-id",t.id,"--provider",r,"--cwd",t.cwd,"--prompt-in",c,"--events-out",d,"--transcript",a];e.codexBin&&x.push("--codex-bin",e.codexBin),e.claudeBin&&x.push("--claude-bin",e.claudeBin),e.freshThread&&x.push("--fresh-thread"),o&&x.push("--claude-session-uuid",o);let P=ee(A,x,{detached:!0,stdio:"ignore",env:{...process.env,SOOTSIM_USER_DATA_DIR:y()}});P.unref();let D=e.readyTimeoutMs??6e3,j=await le(d,p=>p.type==="ready"||p.type==="error",D);if(!j||j.type==="error"){if(P.pid)try{process.kill(P.pid,"SIGTERM")}catch{}try{i.rmSync(b(s.id),{recursive:!0,force:!0})}catch{}v(s.id,{status:"ended"});let p=j&&j.type==="error"?j.message:`no ready event within ${D}ms`;throw new l("WRAPPER_FAILED",p)}return v(s.id,{wrapperPid:P.pid,status:"idle"}),{session:k(s.id),wrapperPid:P.pid}})}async function _e(e,t){let r=k(e);if(!r)throw new l("NO_SESSION",`no session with id=${e}`);if(!E(r.wrapperPid,e))throw v(e,{status:"ended"}),new l("NOT_ALIVE",`session wrapper is not alive (pid=${r.wrapperPid}). start a new session.`);let n=J(e);if(!i.existsSync(n))throw new l("NO_FIFO",`prompt FIFO missing: ${n}`);let o=i.openSync(n,m.O_WRONLY);try{let s=N(t);if(!s)throw new l("EMPTY_PROMPT","prompt text is empty");i.writeSync(o,s+`
5
5
  `)}finally{i.closeSync(o)}v(e,{lastPrompt:t.displayText??t.text,status:"working"})}async function Be(e){let t=k(e);if(!t)throw new l("NO_SESSION",`no session with id=${e}`);if(E(t.wrapperPid,e))try{process.kill(t.wrapperPid,"SIGTERM")}catch{}let r=b(e),n=y();if(r.startsWith(n))try{i.rmSync(r,{recursive:!0,force:!0})}catch{}v(e,{status:"ended",wrapperPid:void 0})}function Ue(e,t){let r=H(e);if(!i.existsSync(r))throw new l("NO_FIFO",`events FIFO missing: ${r}`);let n=i.openSync(r,m.O_RDWR),o=i.createReadStream("",{fd:n,autoClose:!0}),s=ne.createInterface({input:o,crlfDelay:1/0});s.on("line",d=>{let a=O(d);a&&t(a)});let c=!1;return()=>{if(!c){c=!0;try{i.writeSync(n,`
6
6
  `)}catch{}try{s.close()}catch{}try{o.destroy()}catch{}}}}async function le(e,t,r){let n=i.openSync(e,m.O_RDWR|m.O_NONBLOCK),o=Buffer.alloc(8192),s="",c=Date.now()+r;try{for(;Date.now()<c;){let d=0;try{d=i.readSync(n,o,0,o.length,null)}catch(a){if(a.code!=="EAGAIN")throw a;d=0}if(d>0){s+=o.subarray(0,d).toString("utf8");let a;for(;(a=s.indexOf(`
7
7
  `))>=0;){let g=s.slice(0,a);s=s.slice(a+1);let A=O(g);if(A&&t(A))return A}}else await new Promise(a=>setTimeout(a,30))}return null}finally{i.closeSync(n)}}export{O as a,y as b,Se as c,M as d,we as e,ve as f,Ae as g,xe as h,k as i,L as j,z as k,Z as l,Pe as m,b as n,J as o,H as p,se as q,E as r,oe as s,l as t,$e as u,_e as v,Be as w,Ue as x};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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 s}from"./chunk-PZYF2TKR.js";import{a as t}from"./chunk-VDCYIT2N.js";import{F as o,G as n}from"./chunk-GQVWJWCZ.js";function a(){return process.env.CI==="1"||process.env.CI==="true"||process.env.GITHUB_ACTIONS==="true"}function c(){return process.stdin.isTTY===!0&&!a()&&!t()}function l(e=o()){let r=process.env.DO_NOT_TRACK;return r==="1"||r==="true"||!c()?!1:e.configured&&e.productAnalytics}async function P(e){let r=o();if(r.configured)return r;if(!e.prompt||!c())return{productAnalytics:!1,crashReports:!1,configured:!1};let i=await s("Share anonymous package incompatibilities and error classes to improve rnx?",!1);return n({productAnalytics:i,crashReports:!1}),o()}export{c as a,l as b,P as c};
4
+ import{i as s}from"./chunk-S65CK3RI.js";import{a as t}from"./chunk-LMHBU5LZ.js";import{F as o,G as n}from"./chunk-HWDVC6YA.js";function a(){return process.env.CI==="1"||process.env.CI==="true"||process.env.GITHUB_ACTIONS==="true"}function c(){return process.stdin.isTTY===!0&&!a()&&!t()}function l(e=o()){let r=process.env.DO_NOT_TRACK;return r==="1"||r==="true"||!c()?!1:e.configured&&e.productAnalytics}async function P(e){let r=o();if(r.configured)return r;if(!e.prompt||!c())return{productAnalytics:!1,crashReports:!1,configured:!1};let i=await s("Share anonymous package incompatibilities and error classes to improve rnx?",!1);return n({productAnalytics:i,crashReports:!1}),o()}export{c as a,l as b,P as c};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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 X(t,e){let n=["--max-ms","--maxMs","--maxms","--max_ms"];for(let r of n){let s=t.indexOf(r);if(s>=0&&t[s+1]){let o=Number(t[s+1]);if(Number.isFinite(o))return Math.max(100,o)}}return e}var P=new Set(["tap","double-tap","tap-text","tap-id","long-press","touch"]);function _(t){return typeof t=="string"&&P.has(t)}async function A(t){return await t.send({type:"evaluate",code:"window.__sootsimEngineState?.inspectActive === true"})===!0}async function G(t,e){if(!_(e))return!1;try{return await A(t)}catch{return!1}}async function V(t){let e=await t.send({type:"query",query:{kind:"count"}});return{nodes:b(e)?e.total:0}}async function Z(t,e=5){let n=await t.send({type:"query",query:{kind:"tree",depth:e}}),r=b(n)?n.nodes:[];return{depth:e,tree:r}}async function ee(t){let e=await t.send({type:"evaluate",code:"window.location.href"});return{url:typeof e=="string"?e:""}}function C(t){return t!==null&&typeof t=="object"&&[Reflect.get(t,"x"),Reflect.get(t,"y"),Reflect.get(t,"width"),Reflect.get(t,"height")].every(e=>typeof e=="number"?Number.isFinite(e):!1)}function I(t){return Array.isArray(t)?t.every(e=>{if(e===null||typeof e!="object"||!Number.isInteger(Reflect.get(e,"nodeId"))||typeof Reflect.get(e,"type")!="string"||!C(Reflect.get(e,"geometry")))return!1;for(let s of["testID","text","role","label"]){let o=Reflect.get(e,s);if(o!==void 0&&typeof o!="string")return!1}let n=Reflect.get(e,"pressable");if(n!==void 0&&n!==!0)return!1;let r=Reflect.get(e,"children");return r===void 0||I(r)}):!1}function b(t){let e=t!==null&&typeof t=="object"?Reflect.get(t,"total"):void 0;return t!==null&&typeof t=="object"&&typeof e=="number"&&Number.isInteger(e)&&e>=0&&I(Reflect.get(t,"nodes"))}function N(t){let e=t.replace(/[.+^$(){}|[\]\\]/g,"\\$&");return new RegExp(`^${e.replace(/\*/g,".*").replace(/\?/g,".")}$`,"i")}function F(t,e={}){let n=e.filter?.toLowerCase()??"",r=e.testIdLike?N(e.testIdLike):null,s=e.onlyGlob?N(e.onlyGlob):null,o=[],i=(a,y)=>{let p=[a.role,a.label,a.text,a.testID].filter(d=>typeof d=="string").join(" ");if((!n||p.toLowerCase().includes(n))&&(!r||r.test(a.testID??""))&&(!s||s.test(p))){let d=[a.role?`[${a.role}]`:a.pressable?"[tap]":`<${a.type}>`];if(a.text){let g=e.fullText||a.text.length<=50?a.text:`${a.text.slice(0,49).trimEnd()}\u2026`;d.push(JSON.stringify(g))}if(a.testID&&d.push(`#${a.testID}`),a.label&&a.label!==a.text&&d.push(`label=${JSON.stringify(a.label)}`),!e.hideXy){let g=a.geometry;d.push(`@(${Math.round(g.x)},${Math.round(g.y)}) ${Math.round(g.width)}x${Math.round(g.height)}`)}a.pressable&&d.push("(tap)"),o.push(`${" ".repeat(y+1)}${d.join(" ")}`)}for(let d of a.children??[])i(d,y+1)},u=t;if(e.subtreeRoot){let a=[...t],y;for(;a.length>0&&!y;){let p=a.shift();p&&(p.testID===e.subtreeRoot?y=p:a.push(...p.children??[]))}if(!y)return`__SUBTREE_NOT_FOUND__:${e.subtreeRoot}`;u=[y]}for(let a of u)i(a,0);return o.join(`
@@ -0,0 +1,27 @@
1
+ /*! rnx v0.1.375 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import { createRequire as __sootsimCreateRequire } from 'node:module'
3
+ var require = __sootsimCreateRequire(import.meta.url)
4
+ import{a as w,b as E}from"./chunk-GEX7RVHY.js";import{P as _,Q as F,R as T,S as W,g as $}from"./chunk-HWDVC6YA.js";import ae from"node:fs";import S from"node:path";import{WebSocket as C}from"ws";var ye="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 r=e.trim();if(!r)return null;let t=Number(r);return Number.isInteger(t)&&t>0?t:null}function z(e){let r=H(e);return r===null?0:r}function V(e={}){let r=H(e.explicitPort);return r!==null?r:7668+z(e.portOffset)}var Q=5173;var Z=2e3;function _e(e){let r=e-7668;return r<0||r>Z?null:`http://localhost:${Q+r}/`}var Te=4001,Oe="sootsim close";var h="http://localhost:5173/";import{existsSync as ee,mkdirSync as re,readFileSync as te,rmSync as B,writeFileSync as ne}from"fs";import{tmpdir as ie}from"os";import{dirname as oe,join as se,resolve as le}from"path";var x=1,G="SOOTSIM_CLI_CURRENT_SIM_PATH",ce=["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,r=20){let t=e,n=w(e);if(!n||n<=1){let i=E(e);return e>1&&i&&!j.test(i)?e:null}for(let i=0;i<r;i++){let s=E(n);if(s&&j.test(s))return t;let u=w(n);if(!u||u<=1)return s?n:t;t=n,n=u}return n}function v(){for(let r of ce){let t=process.env[r];if(t&&t.trim())return{key:`${r}:${t.trim()}`,source:r,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 de(){return v().key}function Re(){return q(process.ppid)}function k(){if(process.env[G])return le(process.env[G]);let e=de();return se(ie(),`sootsim-current-sim-${e}.json`)}function ue(){let e=k();if(!ee(e))return null;try{let r=JSON.parse(te(e,"utf8"));return r.version!==x||typeof r.simId!="string"||!r.simId.trim()||typeof r.updatedAt!="string"?(B(e,{force:!0}),null):{version:x,simId:r.simId.trim(),updatedAt:r.updatedAt}}catch{return B(e,{force:!0}),null}}function R(){return ue()?.simId||null}function Ce(e){let r=e.trim();if(!r)return;let t=k();re(oe(t),{recursive:!0}),ne(t,JSON.stringify({version:x,simId:r,updatedAt:new Date().toISOString()},null,2)+`
5
+ `)}function J(){B(k(),{force:!0})}var me="RNX_PLACEMENT";function We(){return process.env[me]==="local-box"?"local-box":"host"}function Y(e){return`ws://localhost:${e}`}var L=null;function M(){return F().filter(e=>W(e))}function X(e){let r=S.resolve(e);for(;;){if(ae.existsSync(S.join(r,".git")))return r;let t=S.dirname(r);if(t===r)return null;r=t}}function K(e,r){let t=S.relative(e,r);return t===""||t!==".."&&!t.startsWith(`..${S.sep}`)&&!S.isAbsolute(t)}function fe(){let e=M();if(e.length===0)return null;if(process.env.SOOTSIM_BRIDGE_PORT!==void 0||process.env.PORT_OFFSET!==void 0){let t=V({explicitPort:process.env.SOOTSIM_BRIDGE_PORT,portOffset:process.env.PORT_OFFSET}),n=e.find(i=>i.bridgePort===t);if(n)return n}let r=null;try{r=process.cwd()}catch{}if(r){let t=X(r),n=e.filter(i=>{let s=X(i.cwd);return t&&s?t===s:K(r,i.cwd)||K(i.cwd,r)});if(n.length>0)return n.find(i=>i.bridgePort===7668)??n[0]}return e.find(t=>t.bridgePort===7668)??e[0]}function ge(){let e=$();if(L?.homeDir===e)return L.world;let r=pe();return L={homeDir:e,world:r},r}function pe(){let e=fe();if(e)return{source:"dev-bridge",bridgePort:e.bridgePort,shellBaseUrl:e.shellPort?`http://localhost:${e.shellPort}/`:h};let r=_();return r&&T(r)?{source:"daemon",bridgePort:r.bridgePort,shellBaseUrl:r.runtimePort>0?`http://localhost:${r.runtimePort}/`:h}:{source:"default",bridgePort:7668,shellBaseUrl:h}}function he(e){let r=M().find(n=>n.bridgePort===e);if(r)return{source:"dev-bridge",shellBaseUrl:r.shellPort?`http://localhost:${r.shellPort}/`:h};let t=_();return t&&T(t)&&t.bridgePort===e?{source:"daemon",shellBaseUrl:t.runtimePort>0?`http://localhost:${t.runtimePort}/`:h}:null}function He(e){let r;try{let i=new URL(e);r=i.port?Number(i.port):i.protocol==="https:"?443:80}catch{return null}if(!Number.isFinite(r)||r<=0)return null;let t=M().find(i=>i.shellPort===r||i.runtimePort===r||i.bridgePort===r);if(t)return t.bridgePort;let n=_();return n&&T(n)&&(n.runtimePort===r||n.bridgePort===r)?n.bridgePort:null}function Se(){return ge().bridgePort}function Ve(e,r){let t=he(e),n=t?.source==="dev-bridge"?"dev bridge":t?.source==="daemon"?"daemon bridge":"bridge",i=t?.source==="dev-bridge"?`dev-bridges/${e}.json`:t?.source==="daemon"?"daemon.json":"no lockfile",s=r??t?.shellBaseUrl;process.stderr.write(` \u2192 ${n} :${e} (${s?`shell ${s}, `:""}${i})
6
+ `)}var A=class extends Error{lock;constructor(r,t){super(r),this.name="BridgeSimLockedError",this.lock=t}};function be(e){return e==="flag"?"via --sim":e==="saved"?"saved via `rnx use`":"primary fallback \u2014 no sim pinned"}function Ge(e,r={}){let t=new Set,n=r.port??Se(),i=r.port!==void 0,s=r.commandTimeoutMs??15e3,u,a="none",I=new Set(r.stripBooleanFlags??[]),P=new Set(r.stripValueFlags??[]);for(let l=0;l<e.length;l++){let o=e[l];if(o==="--port"||o==="-p"){t.add(l),i=!0,l+1<e.length&&(t.add(l+1),n=Number(e[l+1])),l++;continue}if(o.startsWith("--port=")){t.add(l),i=!0,n=Number(o.slice(7));continue}if(o==="--timeout"){t.add(l),l+1<e.length&&(t.add(l+1),s=Number(e[l+1])),l++;continue}if(o==="--sim"||o==="--session"||o==="--tab"){t.add(l),l+1<e.length&&(t.add(l+1),u=e[l+1]?.trim()||void 0,a="flag"),l++;continue}let c=o.startsWith("--sim=")?o.slice(6):o.startsWith("--session=")?o.slice(10):o.startsWith("--tab=")?o.slice(6):void 0;if(c!==void 0){t.add(l),u=c.trim()||void 0,a="flag";continue}if(I.has(o)){t.add(l);continue}P.has(o)&&(t.add(l),l+1<e.length&&t.add(l+1),l++)}if(!u){let l=R();l&&(u=l.trim()||void 0,a="saved")}return{positional:e.filter((l,o)=>!t.has(o)),wsPort:n,explicitPort:i,simId:u,simIdSource:a,commandTimeoutMs:s}}function Ie(e,r={}){let t=1,n=r.commandTimeoutMs??15e3,i=new Map,s=new C(Y(e)),u=v(),a=new Promise((o,c)=>{s.on("open",()=>{try{s.send(JSON.stringify({type:"bridge:hello",id:0,cliIdentityKey:u.key,cliIdentitySource:u.source,cliLabel:r.cliLabel}))}catch{}o()}),s.on("error",d=>{let m=d.message?`: ${d.message}`:"";c(new Error(`could not connect to ${Y(e)}${m}`))})});a.catch(()=>{});let I=!1,P=!1;function l(o,c){if(P||process.env.SOOTSIM_QUIET_TARGET_NOTICE==="1"||o.startsWith("bridge:")||o==="focus"||o==="close")return;P=!0;let d=c??"primary",m=be(c?r.simIdSource:"none");process.stderr.write(` \u2192 ${d} (${m})
7
+ `)}return s.on("message",o=>{let c;try{c=JSON.parse(o.toString())}catch{return}if(c.id===0)return;let d=i.get(c.id);d&&(i.delete(c.id),c._otherCliCount>0&&!I&&(I=!0,process.stderr.write(`
8
+ \u26A0 ${c._otherCliCount} other CLI identity/identities are driving this sim
9
+ taps, scrolls, and keyboard input from multiple agents will collide on
10
+ the same screen state (this is not a bridge throughput limit).
11
+ use \`rnx open --new\` for an isolated sim per agent.
12
+
13
+ `)),c.error?c._locked?d.reject(new A(c.error,c._locked)):d.reject(new Error(c.error)):d.resolve(c.result))}),s.on("close",(o,c)=>{let d=c?.toString()||"connection closed";for(let[m,p]of i)i.delete(m),p.reject(new Error(`sim disconnected: ${d} (code ${o})`))}),{async send(o,c){let d=c?.timeoutMs??n,m=async f=>{await a;let g=t++;return new Promise((b,U)=>{let N=setTimeout(()=>{i.delete(g),U(new Error(`command timed out after ${Math.round(d/1e3)}s`))},d);i.set(g,{resolve:O=>{clearTimeout(N),b(O)},reject:O=>{clearTimeout(N),U(O)}});let y={...o,id:g};y.simId===void 0&&f&&(y.simId=f),l(o.type??"",y.simId),s.send(JSON.stringify(y))})},p=r.simIdSource==="flag"?r.simId:R()??r.simId;try{return await m(p)}catch(f){let g=f instanceof Error?f.message:String(f),b=`no sim connected with id ${p}`;throw r.simIdSource!=="flag"&&p&&o.simId===void 0&&(g===b||g.startsWith(`${b};`))?(J(),new Error(`saved sim ${p} is gone${g.slice(b.length)}; run \`rnx list\` and \`rnx use <sim>\`, or open a fresh sim`)):f}},async listSims(){let o=await this.send({type:"bridge:list-sims"});return Array.isArray(o)?o:[]},async focusSim(o){return this.send({type:"focus",simId:o})},async closeSim(o){return this.send({type:"close",simId:o})},async claim(o,c={}){return await this.send({type:"bridge:claim",simId:o,force:c.force===!0})},close(){try{s.readyState===C.OPEN&&s.send(JSON.stringify({type:"bridge:bye",id:0}))}catch{}s.close(),setTimeout(()=>{s.readyState!==C.CLOSED&&s.terminate()},250).unref()}}}function je(e){return Ie(e.wsPort,{commandTimeoutMs:e.commandTimeoutMs,simId:e.simId,simIdSource:e.simIdSource})}function Pe(e,r){let t=e.filter(s=>s.readyState==="open"&&s.id!==r),n=t.find(s=>s.userFocused)??t.find(s=>s.userVisible===!0&&s.isPrimary)??t.find(s=>s.userVisible===!0)??t.find(s=>s.isPrimary);if(!n)return null;let i=[n.isPrimary?"primary":null,n.userVisible===!1?"hidden":n.userVisible===!0?"visible":null,n.userFocused?"focused":null].filter(Boolean);return`${n.id}${i.length?` [${i.join(", ")}]`:""}`}async function qe(e){try{let r=await e.send({type:"evaluate",code:`(() => ({
14
+ hidden: document.hidden,
15
+ visibilityState: document.visibilityState,
16
+ hasFocus: typeof document.hasFocus === 'function' ? document.hasFocus() : null,
17
+ simId: window.__sootsimBridge?.id ?? window.SootSim?.state?.simId ?? null,
18
+ url: location.href
19
+ }))()`}),t=typeof r=="object"&&r!==null?r:{hidden:r===!0};if(t.hidden===!0===!0){let i=null;try{i=Pe(await e.listSims(),t.simId)}catch{}return process.stderr.write(`
20
+ \u26A0 target sim${t.simId?` ${t.simId}`:""} is hidden (document.hidden = true)
21
+ `+(t.visibilityState?` visibility: ${t.visibilityState}
22
+ `:"")+` animations and rAF callbacks are throttled \u2014 coordinates may be wrong
23
+ and launch/transition animations will not complete.
24
+ `+(i?` another open sim looks usable: ${i}; target it with --sim.
25
+ `:" run `rnx list` to find the visible sim and target it with --sim.\n")+` page-level window.focus() cannot unhide a browser tab.
26
+
27
+ `),{hidden:!0,warned:!0,simId:t.simId}}return{hidden:!1,warned:!1,simId:t.simId}}catch{return{hidden:!1,warned:!1}}}async function Je(e,r,t={}){let n={type:"evaluate",code:r};return t.acquireLock&&(n.acquireLock=!0),e.send(n)}async function Ye(e,r,...t){return e.send({type:"call",path:r,args:t})}async function Xe(e,r,...t){return e.send({type:"call",path:r,args:t,acquireLock:!0})}export{ye as a,_e as b,Te as c,Oe as d,de as e,Re as f,R as g,Ce as h,J as i,h as j,me as k,We as l,Y as m,ge as n,he as o,He as p,Se as q,Ve as r,A as s,Ge as t,Ie as u,je as v,qe as w,Je as x,Ye as y,Xe as z};
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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{t as j,v as A,y as U,z as v}from"./chunk-OO7E4JTZ.js";import{c as P}from"./chunk-UQXSAYWY.js";import{createHash as Q}from"node:crypto";import{mkdirSync as W,readFileSync as q,readdirSync as X,unlinkSync as Z,writeFileSync as V}from"node:fs";import{dirname as G,extname as ee,resolve as B}from"node:path";function Y(t){let e=t[0]?.toLowerCase()??"toggle";return e!=="on"&&e!=="off"&&e!=="toggle"&&(console.error(` unknown argument: "${e}" (expected on | off | toggle)`),P(1)),e}async function L(t,e,n){let o=j(t,{port:e.port}),i=Y(o.positional),u=A({...o,commandTimeoutMs:5e3});try{let a=!!(await U(u,"SootSim.bridges.settings.get"))?.[n.modeKey],m=i==="on"?!0:i==="off"?!1:!a;if(a===m)return console.log(` ${n.displayName}: already ${m?"on":"off"}`),{current:a,target:m,changed:!1};if(!await u.send({type:"evaluate",acquireLock:!0,code:`(async () => {
4
+ import{t as j,v as A,y as U,z as v}from"./chunk-7NCPUZ52.js";import{c as P}from"./chunk-T4ISWS5H.js";import{createHash as Q}from"node:crypto";import{mkdirSync as W,readFileSync as q,readdirSync as X,unlinkSync as Z,writeFileSync as V}from"node:fs";import{dirname as G,extname as ee,resolve as B}from"node:path";function Y(t){let e=t[0]?.toLowerCase()??"toggle";return e!=="on"&&e!=="off"&&e!=="toggle"&&(console.error(` unknown argument: "${e}" (expected on | off | toggle)`),P(1)),e}async function L(t,e,n){let o=j(t,{port:e.port}),i=Y(o.positional),u=A({...o,commandTimeoutMs:5e3});try{let a=!!(await U(u,"SootSim.bridges.settings.get"))?.[n.modeKey],m=i==="on"?!0:i==="off"?!1:!a;if(a===m)return console.log(` ${n.displayName}: already ${m?"on":"off"}`),{current:a,target:m,changed:!1};if(!await u.send({type:"evaluate",acquireLock:!0,code:`(async () => {
5
5
  const modeKey = ${JSON.stringify(n.modeKey)}
6
6
  const target = ${JSON.stringify(m)}
7
7
  window.dispatchEvent(new CustomEvent('sootsim:shell-command', {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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 o=!0,e="public beta",t=e,n="we send anonymous error and dependency data while you use it";export{o as a,e as b,t as c,n as d};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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{execFileSync as S,execSync as x}from"node:child_process";var g=new WeakMap,l=new Set,b=!1;function f(){return{platform:process.platform,env:process.env}}function A(e){return S("/bin/ps",["-p",String(e),"-o","command="],{encoding:"utf8"}).trim()}function w(e=f()){return e.platform==="linux"&&e.env.GITHUB_ACTIONS==="true"&&e.env.RUNNER_OS==="Linux"}function L(e){let r=String(e);return/^--disable-gpu(?:=.*)?$/i.test(r)||/^--enable-unsafe-swiftshader(?:=.*)?$/i.test(r)||/^--use-angle=(?:swiftshader|swiftshader-webgl)$/i.test(r)||/^--use-gl=swiftshader$/i.test(r)}function I(e){return e.match(/(?:^|\s)(--disable-gpu(?:=[^\s]+)?|--enable-unsafe-swiftshader(?:=[^\s]+)?|--use-angle=(?:swiftshader|swiftshader-webgl)|--use-gl=swiftshader)(?=\s|$)/i)?.[1]??null}function k(e){return e==="darwin"?"metal":e==="linux"?"vulkan":"default"}function y(e,r=f()){if(w(r))return;let n=I(e);if(n)throw new Error(`[reap-browser] refused software-rendering Chrome process argument ${n}`);let o=k(r.platform),t=e.split(/\s+/);if(!t.includes(`--use-angle=${o}`)||!t.includes("--enable-gpu"))throw new Error(`[reap-browser] Chrome process did not retain the required ${o} GPU arguments`);if(r.platform==="darwin"&&e.includes("/Applications/Google Chrome.app/"))throw new Error("[reap-browser] refused the user's installed Google Chrome; use Playwright channel chromium")}function E(e){if(!e||typeof e!="object")return[];let n=e.gpu;if(!n||typeof n!="object")return[];let o=n,t=[],a=o.auxAttributes;if(a&&typeof a=="object")for(let s of Object.values(a))typeof s=="string"&&t.push(s);let i=o.devices;if(Array.isArray(i)){for(let s of i)if(!(!s||typeof s!="object"))for(let u of Object.values(s))typeof u=="string"&&t.push(u)}return t}function B(e){if(!e||typeof e!="object")return null;let r=e;if(!Array.isArray(r.processInfo))return null;for(let n of r.processInfo){if(!n||typeof n!="object")continue;let o=n;if(o.type==="browser"&&typeof o.id=="number"&&Number.isInteger(o.id)&&o.id>0)return o.id}return null}function G(e,r=f()){if(w(r))return;let o=E(e).join(" | ");if(!o||/swiftshader|llvmpipe|software rasterizer/i.test(o))throw new Error(`[reap-browser] Chrome reported a software renderer${o?`: ${o}`:""}`);if(r.platform==="darwin"&&!/metal/i.test(o))throw new Error(`[reap-browser] Chrome did not report an ANGLE Metal renderer: ${o}`)}function p(e){if(e&&typeof e=="object"){let n=g.get(e);if(n!==void 0)return n}let r=e;if(r&&typeof r.process=="function")try{let n=r.process();if(n&&typeof n.pid=="number"&&n.pid>0)return n.pid}catch{}if(r&&typeof r.browser=="function")try{let n=r.browser();if(n)return p(n)}catch{}return null}function h(e){let r=[];try{r=x(`pgrep -P ${e} || true`).toString().split(`
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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 o=/^[A-Za-z][A-Za-z0-9+.-]*:/;function s(e){let t=e.trim();if(!t)throw new Error("expected <url-or-route>");return o.test(t)||t.startsWith("/")?t:`/${t}`}function p(e){let t=e.trim();return t?t.startsWith("/")?!0:o.test(t)?!/^https?:\/\//i.test(t):!1:!1}async function c(e,t){let n=s(t),r=await e.send({type:"call",path:"SootSim.bridges.test.openDeepLink",args:[n]});if(r!==null&&typeof r=="object"&&Reflect.get(r,"ok")===!1){let i=Reflect.get(r,"error");throw new Error(typeof i=="string"?i:"deep-link dispatch failed")}return n}export{p as a,c as b};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.374 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.375 | (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 t(_){return`(async () => {