rnxsim 0.1.372 → 0.1.373

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (190) hide show
  1. package/dist-cli/bin.js +5 -5
  2. package/dist-cli/chunks/{agent-RTAKJ5UM.js → agent-TJXK3LYQ.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-JWRDI26D.js → agent-wrapper-IBMSADYR.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-RKO3N4PB.js → app-fonts-PUXF6G6Y.js} +2 -2
  5. package/dist-cli/chunks/{assert-Y5LXPWC6.js → assert-RSPGS4CF.js} +2 -2
  6. package/dist-cli/chunks/{auth-4SPTRWTM.js → auth-P4RWMWAM.js} +2 -2
  7. package/dist-cli/chunks/{beta-KYS22QPY.js → beta-HNRJDCWK.js} +2 -2
  8. package/dist-cli/chunks/{box-7CK72ZPF.js → box-TBCAJ74I.js} +2 -2
  9. package/dist-cli/chunks/{camera-RUL426MQ.js → camera-2P7A65KA.js} +2 -2
  10. package/dist-cli/chunks/{chunk-YWTBN7SD.js → chunk-2272Y5HN.js} +1 -1
  11. package/dist-cli/chunks/{chunk-QA2PTSOC.js → chunk-2YNZ3GHI.js} +1 -1
  12. package/dist-cli/chunks/{chunk-R7HMFLXI.js → chunk-45MY5YQL.js} +2 -2
  13. package/dist-cli/chunks/{chunk-SZX6ARJX.js → chunk-4AGK7T3W.js} +3 -3
  14. package/dist-cli/chunks/{chunk-RXKZJAGY.js → chunk-4NBB7L3M.js} +1 -1
  15. package/dist-cli/chunks/{chunk-KXAE64HF.js → chunk-4RQFXEF2.js} +2 -2
  16. package/dist-cli/chunks/{chunk-L5BEWXQZ.js → chunk-4ULLSYFL.js} +2 -2
  17. package/dist-cli/chunks/{chunk-YEGWC2OY.js → chunk-52NWLXHO.js} +1 -1
  18. package/dist-cli/chunks/{chunk-SLTEYNAE.js → chunk-5BMF3MJN.js} +1 -1
  19. package/dist-cli/chunks/{chunk-U3XYGLXG.js → chunk-5H5N36NO.js} +2 -2
  20. package/dist-cli/chunks/{chunk-Q7JSU5DI.js → chunk-5UMNXXVL.js} +3 -3
  21. package/dist-cli/chunks/{chunk-UVKX6FQ4.js → chunk-676FU5M6.js} +1 -1
  22. package/dist-cli/chunks/{chunk-5Q6ZEZFF.js → chunk-6CYCKPTJ.js} +1 -1
  23. package/dist-cli/chunks/{chunk-CZ2FOZVC.js → chunk-7T3K66TV.js} +2 -2
  24. package/dist-cli/chunks/{chunk-CEQXZ3GA.js → chunk-ADP35DA3.js} +2 -2
  25. package/dist-cli/chunks/{chunk-HDGZAVH3.js → chunk-AQBARY5L.js} +2 -2
  26. package/dist-cli/chunks/{chunk-LWLHVF6Y.js → chunk-AYZLK7R4.js} +1 -1
  27. package/dist-cli/chunks/{chunk-G5G7PQKO.js → chunk-B7LYAWJU.js} +2 -2
  28. package/dist-cli/chunks/{chunk-DQOQQFMP.js → chunk-BHNWFDNX.js} +1 -1
  29. package/dist-cli/chunks/{chunk-2MA3Q44D.js → chunk-BLOJLKH7.js} +1 -1
  30. package/dist-cli/chunks/{chunk-K4TGUDY4.js → chunk-CVMYEPWT.js} +2 -2
  31. package/dist-cli/chunks/{chunk-PETP6LVI.js → chunk-EEBXLGGD.js} +1 -1
  32. package/dist-cli/chunks/{chunk-7FYOZQBM.js → chunk-EG4HCEKS.js} +1 -1
  33. package/dist-cli/chunks/{chunk-ZRQKEKHX.js → chunk-EUEQHXM2.js} +2 -2
  34. package/dist-cli/chunks/{chunk-4UMODU6C.js → chunk-GVIPHFFH.js} +2 -2
  35. package/dist-cli/chunks/{chunk-NBEOA72C.js → chunk-HIFJBR5S.js} +1 -1
  36. package/dist-cli/chunks/{chunk-FOW2LPM7.js → chunk-HSKW3YE2.js} +2 -2
  37. package/dist-cli/chunks/{chunk-H567W7JT.js → chunk-IGHXSJ54.js} +2 -2
  38. package/dist-cli/chunks/{chunk-I7LRVN5M.js → chunk-K6GGQQU5.js} +2 -2
  39. package/dist-cli/chunks/{chunk-PUH6RQBJ.js → chunk-LEX3XST4.js} +2 -2
  40. package/dist-cli/chunks/{chunk-D5AT7UT5.js → chunk-MTWJ3CNR.js} +2 -2
  41. package/dist-cli/chunks/{chunk-3C6LTIDV.js → chunk-MWXYYQMU.js} +2 -2
  42. package/dist-cli/chunks/{chunk-H2SKPUSI.js → chunk-NEJ3WA75.js} +2 -2
  43. package/dist-cli/chunks/{chunk-POR7R3TP.js → chunk-NHUVO3VC.js} +1 -1
  44. package/dist-cli/chunks/{chunk-MSM2E74F.js → chunk-NQDLJL63.js} +1 -1
  45. package/dist-cli/chunks/{chunk-SC7PGULZ.js → chunk-O5TKIMXX.js} +2 -2
  46. package/dist-cli/chunks/{chunk-XA4YU3A4.js → chunk-O6VJVWEA.js} +3 -3
  47. package/dist-cli/chunks/{chunk-WR7LRCYW.js → chunk-O7NKNTJ6.js} +1 -1
  48. package/dist-cli/chunks/{chunk-NT43X5LI.js → chunk-OCH4TAJF.js} +2 -2
  49. package/dist-cli/chunks/{chunk-P6K6XFWE.js → chunk-PGPD6XML.js} +2 -2
  50. package/dist-cli/chunks/{chunk-I37LRPZ3.js → chunk-POCPBDTJ.js} +1 -1
  51. package/dist-cli/chunks/chunk-QKX26L27.js +6 -0
  52. package/dist-cli/chunks/{chunk-J2TJRPDB.js → chunk-QPONDPPF.js} +2 -2
  53. package/dist-cli/chunks/{chunk-SSQCKJQZ.js → chunk-SDY5Y6EY.js} +2 -2
  54. package/dist-cli/chunks/{chunk-Q5WPPOFV.js → chunk-SK6RRDXP.js} +1 -1
  55. package/dist-cli/chunks/{chunk-KVVNCIJA.js → chunk-TIPRUSQQ.js} +1 -1
  56. package/dist-cli/chunks/{chunk-ZTZTRD5R.js → chunk-U55C6SUH.js} +1 -1
  57. package/dist-cli/chunks/{chunk-EKSSAC4L.js → chunk-UFR7WANF.js} +1 -1
  58. package/dist-cli/chunks/{chunk-KSE5XGYU.js → chunk-UHFVEMYL.js} +2 -2
  59. package/dist-cli/chunks/{chunk-LAQKTHRM.js → chunk-UL6JYYB3.js} +2 -2
  60. package/dist-cli/chunks/{chunk-UA5WQCBU.js → chunk-UL6KGGFA.js} +2 -2
  61. package/dist-cli/chunks/{chunk-BRRWRBW7.js → chunk-UMTP3PDW.js} +2 -2
  62. package/dist-cli/chunks/{chunk-MKHW3JNL.js → chunk-VBAUP3CK.js} +2 -2
  63. package/dist-cli/chunks/{chunk-KWLUOLYQ.js → chunk-VPWI7ZQM.js} +2 -2
  64. package/dist-cli/chunks/{chunk-JPRHJMUJ.js → chunk-VXZGJMFM.js} +1 -1
  65. package/dist-cli/chunks/{chunk-NWPYM54M.js → chunk-XHSYJMBV.js} +1 -1
  66. package/dist-cli/chunks/{chunk-GPYG2L7R.js → chunk-XOPJZBOT.js} +2 -2
  67. package/dist-cli/chunks/{chunk-PKY76S57.js → chunk-XUJ67CGZ.js} +1 -1
  68. package/dist-cli/chunks/{chunk-NLMDMNO6.js → chunk-Y47FOLM5.js} +2 -2
  69. package/dist-cli/chunks/{chunk-VQQXUXXF.js → chunk-YIH24FX4.js} +2 -2
  70. package/dist-cli/chunks/{chunk-EY5OHL2M.js → chunk-YPJJDEFE.js} +1 -1
  71. package/dist-cli/chunks/{chunk-OLHHB6LD.js → chunk-ZGOWBBWX.js} +2 -2
  72. package/dist-cli/chunks/{chunk-IX25FFF3.js → chunk-ZMXWHNCZ.js} +2 -2
  73. package/dist-cli/chunks/{cleanup-7ATBNZHC.js → cleanup-2DD3AX5G.js} +2 -2
  74. package/dist-cli/chunks/cli-version-Y4TNXT2D.js +4 -0
  75. package/dist-cli/chunks/{compat-4ZC6ZMMA.js → compat-U6VLKECZ.js} +2 -2
  76. package/dist-cli/chunks/{config-EOBODQ32.js → config-W7D7BANR.js} +2 -2
  77. package/dist-cli/chunks/{connect-ZQ72CZ7O.js → connect-CUQIG76A.js} +2 -2
  78. package/dist-cli/chunks/control-IMYDYX74.js +4 -0
  79. package/dist-cli/chunks/daemon-3ZSBIRII.js +4 -0
  80. package/dist-cli/chunks/{debug-7Z325GNU.js → debug-5VKWI2IY.js} +3 -3
  81. package/dist-cli/chunks/{desktop-CR7ALX7H.js → desktop-JUI2EFQV.js} +3 -3
  82. package/dist-cli/chunks/{detox-RZ37736M.js → detox-WWO5NMX5.js} +2 -2
  83. package/dist-cli/chunks/{device-TA3SQP6K.js → device-N54IMZI5.js} +2 -2
  84. package/dist-cli/chunks/{diagnose-JFKFKR3S.js → diagnose-RPMOVNDH.js} +2 -2
  85. package/dist-cli/chunks/{disk-cleanup-HZM7VM4S.js → disk-cleanup-LS4E6EN2.js} +2 -2
  86. package/dist-cli/chunks/{do-chain-MTT65YNX.js → do-chain-SKD3BNPJ.js} +2 -2
  87. package/dist-cli/chunks/drivers-RIZIUIBG.js +4 -0
  88. package/dist-cli/chunks/{env-SFI24PLS.js → env-4WPFRAKQ.js} +2 -2
  89. package/dist-cli/chunks/{film-GPHSJLIH.js → film-VLUYMYJC.js} +3 -3
  90. package/dist-cli/chunks/flow-JQFIL6QT.js +4 -0
  91. package/dist-cli/chunks/help-K4MMUKLT.js +4 -0
  92. package/dist-cli/chunks/{hidden-runtime-alias-7Z6PYH53.js → hidden-runtime-alias-TARNNZAO.js} +2 -2
  93. package/dist-cli/chunks/{home-paths-MEGVA6ET.js → home-paths-UBO2R6RQ.js} +2 -2
  94. package/dist-cli/chunks/inspect-2FYLUREA.js +4 -0
  95. package/dist-cli/chunks/install-desktop-5IK4MZ25.js +4 -0
  96. package/dist-cli/chunks/{login-EHUZYRAM.js → login-47BPRPSH.js} +2 -2
  97. package/dist-cli/chunks/{logout-WPGT62N6.js → logout-IKVBKUCK.js} +2 -2
  98. package/dist-cli/chunks/{maestro-4HVDLCTI.js → maestro-Q7MGCY72.js} +3 -3
  99. package/dist-cli/chunks/{maestro-generate-VBS2EZMM.js → maestro-generate-DLV3CE75.js} +3 -3
  100. package/dist-cli/chunks/{mode-MGTS4QTF.js → mode-EATOC6AC.js} +2 -2
  101. package/dist-cli/chunks/{optional-demo-registry-F3FQT5WT.js → optional-demo-registry-324IOW5Q.js} +2 -2
  102. package/dist-cli/chunks/{perf-47R3OEI7.js → perf-X5EKGPQJ.js} +2 -2
  103. package/dist-cli/chunks/{permissions-ZOLFZWR2.js → permissions-7PT2O3O2.js} +2 -2
  104. package/dist-cli/chunks/{platform-C4E26ZBZ.js → platform-Y3Q4V4JM.js} +3 -3
  105. package/dist-cli/chunks/privacy-34TQ2IOU.js +4 -0
  106. package/dist-cli/chunks/{record-OUXWCWUF.js → record-26GR6633.js} +3 -3
  107. package/dist-cli/chunks/{report-issue-LJJXONXQ.js → report-issue-FRUOURLU.js} +2 -2
  108. package/dist-cli/chunks/reset-MQGKFTRW.js +4 -0
  109. package/dist-cli/chunks/resolve-target-XSMC6QNY.js +4 -0
  110. package/dist-cli/chunks/runtime-ZAH42MO5.js +4 -0
  111. package/dist-cli/chunks/{screenshot-command-CUHDOS5D.js → screenshot-command-K35IU6HC.js} +3 -3
  112. package/dist-cli/chunks/{screenshot-layers-DVWQVKT6.js → screenshot-layers-VMQCTFSU.js} +2 -2
  113. package/dist-cli/chunks/{screenshots-capture-GWIUJ3A6.js → screenshots-capture-SXROGTCP.js} +2 -2
  114. package/dist-cli/chunks/{serve-TX5OKGJM.js → serve-I3YMZVYB.js} +2 -2
  115. package/dist-cli/chunks/setup-6BNCYKCA.js +4 -0
  116. package/dist-cli/chunks/{sim-client-W4WZOZ3P.js → sim-client-R3QBYUIC.js} +2 -2
  117. package/dist-cli/chunks/{skills-TDFQAZ6A.js → skills-LGJB4EOZ.js} +2 -2
  118. package/dist-cli/chunks/{state-P2Z25OLQ.js → state-2IXZ5JYX.js} +2 -2
  119. package/dist-cli/chunks/{storage-DWEOFXEB.js → storage-3PNQOCXW.js} +2 -2
  120. package/dist-cli/chunks/store-BV7S5W55.js +4 -0
  121. package/dist-cli/chunks/telemetry-UHKCD6GY.js +4 -0
  122. package/dist-cli/chunks/{timeline-55XNA4GX.js → timeline-FXYNSSJJ.js} +2 -2
  123. package/dist-cli/chunks/{upgrade-3XRCVDVC.js → upgrade-ZG4X4SPV.js} +2 -2
  124. package/dist-cli/chunks/upload-R4XZLOLQ.js +4 -0
  125. package/dist-cli/chunks/{version-WTYGLXBJ.js → version-AXPWANGE.js} +2 -2
  126. package/dist-cli/chunks/{web-ZWRY3VHM.js → web-YPFT4L4F.js} +2 -2
  127. package/dist-cli/chunks/welcome-SRGEEM4A.js +5 -0
  128. package/dist-cli/chunks/{what-happened-Q3IGIH4K.js → what-happened-XE32WD2W.js} +2 -2
  129. package/dist-cli/chunks/{ws-bridge-KCPZSBBX.js → ws-bridge-JW3MABK7.js} +2 -2
  130. package/dist-lib/agent-daemon-client.cjs +1 -1
  131. package/dist-lib/agent-events.cjs +1 -1
  132. package/dist-lib/agent-identity.cjs +1 -1
  133. package/dist-lib/agent-sessions.cjs +1 -1
  134. package/dist-lib/attached-projects.cjs +1 -1
  135. package/dist-lib/auth/shared-session.cjs +1 -1
  136. package/dist-lib/backend-origin.cjs +1 -1
  137. package/dist-lib/beta.cjs +1 -1
  138. package/dist-lib/beta.mjs +1 -1
  139. package/dist-lib/bridge-constants.cjs +1 -1
  140. package/dist-lib/bridge-contract-input.cjs +1 -1
  141. package/dist-lib/bridge-contract-input.mjs +1 -1
  142. package/dist-lib/bridge-contract.cjs +1 -1
  143. package/dist-lib/bridge-contract.mjs +1 -1
  144. package/dist-lib/cli-constants.cjs +1 -1
  145. package/dist-lib/config.cjs +1 -1
  146. package/dist-lib/detox/index.cjs +1 -1
  147. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  148. package/dist-lib/home-paths.cjs +1 -1
  149. package/dist-lib/host/bridge-host.cjs +13 -4
  150. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  151. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  152. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  153. package/dist-lib/host/replacement-module-handler.cjs +1 -1
  154. package/dist-lib/host/websocket-proxy.cjs +1 -1
  155. package/dist-lib/index.cjs +1 -1
  156. package/dist-lib/jump-to-source-babel.cjs +1 -1
  157. package/dist-lib/menu.cjs +1 -1
  158. package/dist-lib/menu.mjs +1 -1
  159. package/dist-lib/metro-production-bundle.cjs +1 -1
  160. package/dist-lib/metro-production-bundle.mjs +1 -1
  161. package/dist-lib/metro.cjs +1 -1
  162. package/dist-lib/profiles.cjs +1 -1
  163. package/dist-lib/public-brand.cjs +1 -1
  164. package/dist-lib/react-native-host-modules.cjs +1 -1
  165. package/dist-lib/react-native-host-modules.mjs +1 -1
  166. package/dist-lib/render-mode.cjs +1 -1
  167. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  168. package/dist-lib/sdk.cjs +1 -1
  169. package/dist-lib/sdk.mjs +1 -1
  170. package/dist-lib/skills.cjs +13 -4
  171. package/dist-lib/vite.cjs +1 -1
  172. package/package.json +1 -1
  173. package/dist-cli/chunks/chunk-2OA2WE7G.js +0 -6
  174. package/dist-cli/chunks/cli-version-D2IDQO7X.js +0 -4
  175. package/dist-cli/chunks/control-FKPKLOE2.js +0 -4
  176. package/dist-cli/chunks/daemon-WFHWS3JU.js +0 -4
  177. package/dist-cli/chunks/drivers-BXEXWRVJ.js +0 -4
  178. package/dist-cli/chunks/flow-FBCU3TZN.js +0 -4
  179. package/dist-cli/chunks/help-6MLROWYO.js +0 -4
  180. package/dist-cli/chunks/inspect-EWT5SXBD.js +0 -4
  181. package/dist-cli/chunks/install-desktop-IFBUH7MH.js +0 -4
  182. package/dist-cli/chunks/privacy-WXGGG4ZI.js +0 -4
  183. package/dist-cli/chunks/reset-ZZYLPETS.js +0 -4
  184. package/dist-cli/chunks/resolve-target-MVZZR2JW.js +0 -4
  185. package/dist-cli/chunks/runtime-DEC5AF3M.js +0 -4
  186. package/dist-cli/chunks/setup-X7LLGW67.js +0 -4
  187. package/dist-cli/chunks/store-TKBLMYCV.js +0 -4
  188. package/dist-cli/chunks/telemetry-E3CBKJMD.js +0 -4
  189. package/dist-cli/chunks/upload-QB77GSMQ.js +0 -4
  190. package/dist-cli/chunks/welcome-7ATM5EGX.js +0 -5
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{f as c}from"./chunk-I37LRPZ3.js";function m(e,n){let t=e.indexOf("--testid");if(t>=0&&e[t+1])return{mode:"testid",value:e[t+1]};let i=e.indexOf("--test-id");if(i>=0&&e[i+1])return{mode:"testid",value:e[i+1]};let l=e.indexOf("--text");if(l>=0&&e[l+1])return{mode:"text",value:e[l+1]};let r=n?.[1];return r&&!r.startsWith("-")&&!Number.isFinite(Number(r))?{mode:"testid",value:r}:null}async function a(e,n){let t=await e.send({type:"resolve",selector:n.mode==="testid"?{testID:n.value}:{text:n.value}});if(t===null)return null;if(typeof t!="object")throw new Error("resolve returned an invalid result");let i=Reflect.get(t,"match"),l=Reflect.get(t,"target"),r=[i,l],o=Reflect.get(t,"point"),u=o!==null&&typeof o=="object"?Reflect.get(o,"x"):void 0,d=o!==null&&typeof o=="object"?Reflect.get(o,"y"):void 0;if(!c(r)||typeof u!="number"||!Number.isFinite(u)||typeof d!="number"||!Number.isFinite(d))throw new Error("resolve returned an invalid result");let s=r[0];if(!s)throw new Error("resolve returned an invalid result");return{x:u,y:d,testID:s.testID??null,text:s.text??(n.mode==="text"?n.value:s.label),type:s.type}}export{m as a,a as b};
4
+ import{f as c}from"./chunk-POCPBDTJ.js";function m(e,n){let t=e.indexOf("--testid");if(t>=0&&e[t+1])return{mode:"testid",value:e[t+1]};let i=e.indexOf("--test-id");if(i>=0&&e[i+1])return{mode:"testid",value:e[i+1]};let l=e.indexOf("--text");if(l>=0&&e[l+1])return{mode:"text",value:e[l+1]};let r=n?.[1];return r&&!r.startsWith("-")&&!Number.isFinite(Number(r))?{mode:"testid",value:r}:null}async function a(e,n){let t=await e.send({type:"resolve",selector:n.mode==="testid"?{testID:n.value}:{text:n.value}});if(t===null)return null;if(typeof t!="object")throw new Error("resolve returned an invalid result");let i=Reflect.get(t,"match"),l=Reflect.get(t,"target"),r=[i,l],o=Reflect.get(t,"point"),u=o!==null&&typeof o=="object"?Reflect.get(o,"x"):void 0,d=o!==null&&typeof o=="object"?Reflect.get(o,"y"):void 0;if(!c(r)||typeof u!="number"||!Number.isFinite(u)||typeof d!="number"||!Number.isFinite(d))throw new Error("resolve returned an invalid result");let s=r[0];if(!s)throw new Error("resolve returned an invalid result");return{x:u,y:d,testID:s.testID??null,text:s.text??(n.mode==="text"?n.value:s.label),type:s.type}}export{m as a,a as b};
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{a as o}from"./chunk-NT43X5LI.js";import{c as i}from"./chunk-YWTBN7SD.js";var p=["ghs_","ghp_","gho_","ghu_","github_pat_"];function a(n){return!!(n&&n.length>=20&&p.some(e=>n.startsWith(e)))}function d(){let n=process.env.CONTRAST_INSTALLATION_TOKEN?.trim(),e=process.env.GITHUB_TOKEN?.trim(),t=n||e;if(!a(t))return null;let r=(process.env.CONTRAST_REPO||process.env.GITHUB_REPOSITORY||"").trim();if(!r)return null;let[s,u]=r.includes("/")?r.split("/",2):[null,null],l=(process.env.CONTRAST_REPO_ID||process.env.GITHUB_REPOSITORY_ID||"").trim(),c=(process.env.CONTRAST_INSTALLATION_ID||process.env.GITHUB_APP_INSTALLATION_ID||"").trim();return{kind:"github",token:t,repoId:r,repositoryId:l||null,owner:s||null,repo:u||null,installationId:c||null,source:n?"contrast-runner":"github-actions"}}function I(n){return n.startsWith("sk_rnx_")||n.startsWith("sk_sootsim_")}function g(){for(let n of["RNX_API_KEY","SOOTSIM_API_KEY"]){let e=process.env[n]?.trim();if(e&&I(e))return{secret:e,envName:n}}return null}function _(){let n=g();if(n)return{kind:"api-key",secret:n.secret,source:"env",envName:n.envName};let e=d();if(e)return e;let t=o();return t?.token?{kind:"session",token:t.token,origin:t.origin}:null}function A(n){return n.kind==="api-key"?`Bearer ${n.secret}`:`Bearer ${n.token}`}function k(n){return!n||n.kind!=="github"?null:{repoId:n.repoId,owner:n.owner??void 0,repo:n.repo??void 0,installationId:n.installationId}}function f(n){let e=_();if(e)return{auth:e,header:A(e)};process.stderr.write(`
4
+ import{a as o}from"./chunk-OCH4TAJF.js";import{c as i}from"./chunk-2272Y5HN.js";var p=["ghs_","ghp_","gho_","ghu_","github_pat_"];function a(n){return!!(n&&n.length>=20&&p.some(e=>n.startsWith(e)))}function d(){let n=process.env.CONTRAST_INSTALLATION_TOKEN?.trim(),e=process.env.GITHUB_TOKEN?.trim(),t=n||e;if(!a(t))return null;let r=(process.env.CONTRAST_REPO||process.env.GITHUB_REPOSITORY||"").trim();if(!r)return null;let[s,u]=r.includes("/")?r.split("/",2):[null,null],l=(process.env.CONTRAST_REPO_ID||process.env.GITHUB_REPOSITORY_ID||"").trim(),c=(process.env.CONTRAST_INSTALLATION_ID||process.env.GITHUB_APP_INSTALLATION_ID||"").trim();return{kind:"github",token:t,repoId:r,repositoryId:l||null,owner:s||null,repo:u||null,installationId:c||null,source:n?"contrast-runner":"github-actions"}}function I(n){return n.startsWith("sk_rnx_")||n.startsWith("sk_sootsim_")}function g(){for(let n of["RNX_API_KEY","SOOTSIM_API_KEY"]){let e=process.env[n]?.trim();if(e&&I(e))return{secret:e,envName:n}}return null}function _(){let n=g();if(n)return{kind:"api-key",secret:n.secret,source:"env",envName:n.envName};let e=d();if(e)return e;let t=o();return t?.token?{kind:"session",token:t.token,origin:t.origin}:null}function A(n){return n.kind==="api-key"?`Bearer ${n.secret}`:`Bearer ${n.token}`}function k(n){return!n||n.kind!=="github"?null:{repoId:n.repoId,owner:n.owner??void 0,repo:n.repo??void 0,installationId:n.installationId}}function f(n){let e=_();if(e)return{auth:e,header:A(e)};process.stderr.write(`
5
5
  rnx ${n} needs to be authenticated.
6
6
 
7
7
  pick one:
@@ -1,5 +1,5 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{L as m,o as P,q as a}from"./chunk-QA2PTSOC.js";import l from"fs";import c from"path";var s="default",S="profiles.json",i=1;function o(e){let r=e.trim();if(!r)throw new Error("profile id is required");if(!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(r))throw new Error("profile ids must start with a letter or number and contain only letters, numbers, dot, dash, or underscore");if(r==="."||r==="..")throw new Error(`invalid profile id: ${r}`);return r}function d(){return c.join(a(),S)}function I(e){return`sootsim-profile-${o(e)}`}function h(e){return c.join(P(),"Partitions",I(e))}function A(e){return c.join(a(),"playwright",o(e))}function u(){try{let e=JSON.parse(l.readFileSync(d(),"utf8"));if(!e||e.version!==i)return{version:i,profiles:[]};let r=Array.isArray(e.profiles)?e.profiles.filter(t=>!!t&&typeof t.id=="string"&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string").map(t=>({id:o(t.id),createdAt:t.createdAt,updatedAt:t.updatedAt})):[];return{version:i,profiles:r}}catch{return{version:i,profiles:[]}}}function x(e){return[...e].sort((r,t)=>r.id===s?-1:t.id===s?1:r.id.localeCompare(t.id))}function p(e){if(e.profiles.some(t=>t.id===s))return{...e,profiles:x(e.profiles)};let r=new Date().toISOString();return{version:i,profiles:x([{id:s,createdAt:r,updatedAt:r},...e.profiles])}}function g(e){m();let r=p(e),t=`${d()}.tmp`;return l.writeFileSync(t,`${JSON.stringify(r,null,2)}
4
+ import{L as m,o as P,q as a}from"./chunk-2YNZ3GHI.js";import l from"fs";import c from"path";var s="default",S="profiles.json",i=1;function o(e){let r=e.trim();if(!r)throw new Error("profile id is required");if(!/^[A-Za-z0-9][A-Za-z0-9._-]*$/.test(r))throw new Error("profile ids must start with a letter or number and contain only letters, numbers, dot, dash, or underscore");if(r==="."||r==="..")throw new Error(`invalid profile id: ${r}`);return r}function d(){return c.join(a(),S)}function I(e){return`sootsim-profile-${o(e)}`}function h(e){return c.join(P(),"Partitions",I(e))}function A(e){return c.join(a(),"playwright",o(e))}function u(){try{let e=JSON.parse(l.readFileSync(d(),"utf8"));if(!e||e.version!==i)return{version:i,profiles:[]};let r=Array.isArray(e.profiles)?e.profiles.filter(t=>!!t&&typeof t.id=="string"&&typeof t.createdAt=="string"&&typeof t.updatedAt=="string").map(t=>({id:o(t.id),createdAt:t.createdAt,updatedAt:t.updatedAt})):[];return{version:i,profiles:r}}catch{return{version:i,profiles:[]}}}function x(e){return[...e].sort((r,t)=>r.id===s?-1:t.id===s?1:r.id.localeCompare(t.id))}function p(e){if(e.profiles.some(t=>t.id===s))return{...e,profiles:x(e.profiles)};let r=new Date().toISOString();return{version:i,profiles:x([{id:s,createdAt:r,updatedAt:r},...e.profiles])}}function g(e){m();let r=p(e),t=`${d()}.tmp`;return l.writeFileSync(t,`${JSON.stringify(r,null,2)}
5
5
  `,"utf8"),l.renameSync(t,d()),r}function y(){return g(u()).profiles}function E(e){let r=o(e);return y().find(t=>t.id===r)??null}function _(e=s){let r=o(e),t=E(r);return t||D(r)}function D(e){let r=o(e),t=p(u());if(t.profiles.some(w=>w.id===r))throw new Error(`profile already exists: ${r}`);let f=new Date().toISOString(),n={id:r,createdAt:f,updatedAt:f};return g({version:i,profiles:[...t.profiles,n]}),n}function F(e){let r=o(e);if(r===s)throw new Error("the default profile cannot be deleted; clear it instead");let t=p(u()),f=t.profiles.find(n=>n.id===r);if(!f)throw new Error(`profile not found: ${r}`);return g({version:i,profiles:t.profiles.filter(n=>n.id!==r)}),v(r),f}function v(e){let r=o(e);for(let t of[h(r),A(r)])try{l.rmSync(t,{recursive:!0,force:!0})}catch{}}export{A as a,y as b,_ as c,D as d,F as e,v as f};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
4
  var e=["SOOTSIM_AGENT","TM_SESSION","CLAUDECODE","CLAUDE_CODE_ENTRYPOINT","CLAUDE_CODE_SESSION_ID","CODEX_THREAD_ID","CURSOR_TRACE_ID","AIDER_MODEL"];function n(){if(process.env.SOOTSIM_AGENT==="0")return!1;for(let _ of e){let E=process.env[_];if(E&&E.trim()&&E!=="0")return!0}return!1}export{n as a};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{a as c}from"./chunk-2MA3Q44D.js";import{a as f}from"./chunk-2OA2WE7G.js";import{a as i}from"./chunk-MSM2E74F.js";import{createRequire as p}from"node:module";import s from"node:path";import{createJiti as a}from"jiti";var g=p(import.meta.url);function r(e){return e===void 0||e!==null&&typeof e=="object"&&!Array.isArray(e)}function l(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=Reflect.get(e,"runtimeVersion"),o=Reflect.get(e,"network");return(t===void 0||typeof t=="string"&&t===t.trim()&&f(t))&&r(Reflect.get(e,"modules"))&&r(Reflect.get(e,"turboModules"))&&r(Reflect.get(e,"nativeModules"))&&r(Reflect.get(e,"env"))&&r(o)&&r(Reflect.get(e,"settings"))&&r(Reflect.get(e,"initialState"))}function d(e,t){if(!e.modules)return e;let o=s.dirname(t);return{...e,modules:Object.fromEntries(Object.entries(e.modules).map(([m,n])=>[m,n&&typeof n=="object"&&"file"in n?{...n,file:s.resolve(o,n.file)}:n]))}}async function u(e){if(e?.configPath)try{let o=await a(import.meta.url,{interopDefault:!0,alias:{[`${i.packageName}/config`]:g.resolve(`${i.packageName}/config`)}}).import(e.configPath,{default:!0});if(!l(o))throw new Error("the default export must be an rnx config object");return d(o,e.configPath)}catch(t){let o=t instanceof Error?t.message:String(t);throw new Error(`could not load ${e.configPath}: ${o}`)}}async function b(e=process.cwd()){let t=c(e);return{project:t,config:await u(t)}}export{u as a,b};
4
+ import{a as c}from"./chunk-BLOJLKH7.js";import{a as f}from"./chunk-QKX26L27.js";import{a as i}from"./chunk-NQDLJL63.js";import{createRequire as p}from"node:module";import s from"node:path";import{createJiti as a}from"jiti";var g=p(import.meta.url);function r(e){return e===void 0||e!==null&&typeof e=="object"&&!Array.isArray(e)}function l(e){if(!e||typeof e!="object"||Array.isArray(e))return!1;let t=Reflect.get(e,"runtimeVersion"),o=Reflect.get(e,"network");return(t===void 0||typeof t=="string"&&t===t.trim()&&f(t))&&r(Reflect.get(e,"modules"))&&r(Reflect.get(e,"turboModules"))&&r(Reflect.get(e,"nativeModules"))&&r(Reflect.get(e,"env"))&&r(o)&&r(Reflect.get(e,"settings"))&&r(Reflect.get(e,"initialState"))}function d(e,t){if(!e.modules)return e;let o=s.dirname(t);return{...e,modules:Object.fromEntries(Object.entries(e.modules).map(([m,n])=>[m,n&&typeof n=="object"&&"file"in n?{...n,file:s.resolve(o,n.file)}:n]))}}async function u(e){if(e?.configPath)try{let o=await a(import.meta.url,{interopDefault:!0,alias:{[`${i.packageName}/config`]:g.resolve(`${i.packageName}/config`)}}).import(e.configPath,{default:!0});if(!l(o))throw new Error("the default export must be an rnx config object");return d(o,e.configPath)}catch(t){let o=t instanceof Error?t.message:String(t);throw new Error(`could not load ${e.configPath}: ${o}`)}}async function b(e=process.cwd()){let t=c(e);return{project:t,config:await u(t)}}export{u as a,b};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
4
  var 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.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
4
  import i from"node:fs";import r from"node:path";var e=["app.config.js","app.config.ts","app.config.cjs","app.config.mjs","app.json"],p=["sootsim.config.ts","sootsim.config.js","sootsim.config.mjs","sootsim.config.cjs"];function c(n,t){for(let o of t){let s=r.join(n,o);try{if(i.statSync(s).isFile())return s}catch{}}return null}function f(n){return c(n,e)}function l(n){return c(n,p)}function u(n){let t=r.resolve(n);try{if(!i.statSync(t).isDirectory())return null}catch{return null}let o=l(t);return!o&&!f(t)&&!i.existsSync(r.join(t,"package.json"))?null:{appDir:t,configPath:o}}export{u as a};
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{e as p}from"./chunk-NLMDMNO6.js";import{a as l,b as u}from"./chunk-CEQXZ3GA.js";import{a as c}from"./chunk-NT43X5LI.js";import{c as i}from"./chunk-YWTBN7SD.js";async function d(e,t){if(t)return t.replace(/\/$/,"");if(e.kind==="session"&&e.origin)return e.origin.replace(/\/$/,"");let r=c();return r?.origin?r.origin.replace(/\/$/,""):(await p()).replace(/\/$/,"")}async function x(e,t={}){let r=l();if(r||(process.stderr.write(`
4
+ import{e as p}from"./chunk-Y47FOLM5.js";import{a as l,b as u}from"./chunk-ADP35DA3.js";import{a as c}from"./chunk-OCH4TAJF.js";import{c as i}from"./chunk-2272Y5HN.js";async function d(e,t){if(t)return t.replace(/\/$/,"");if(e.kind==="session"&&e.origin)return e.origin.replace(/\/$/,"");let r=c();return r?.origin?r.origin.replace(/\/$/,""):(await p()).replace(/\/$/,"")}async function x(e,t={}){let r=l();if(r||(process.stderr.write(`
5
5
  rnx ${e} needs auth before it can check recording access.
6
6
 
7
7
  pick one:
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
4
  function t(_){return`(async () => {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
4
  async function p({bridge:t,simId:a,maxMs:n,pollMs:s=50,stablePolls:o=3,strict:i=!1}){let c=await t.send({type:"evaluate",simId:a,code:`(async () => {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{n}from"./chunk-MKHW3JNL.js";import{M as t,j as r}from"./chunk-QA2PTSOC.js";function l(){let e=t(),i=r()?n():null;return i?.source==="dev-bridge"?{primary:`engine dev source (:${i.bridgePort})`,installedRuntime:e?`installed runtime v${e}`:null,isDevBridge:!0}:{primary:e?`runtime v${e}`:"runtime not installed",installedRuntime:null,isDevBridge:!1}}export{l as a};
4
+ import{n}from"./chunk-VBAUP3CK.js";import{M as t,j as r}from"./chunk-2YNZ3GHI.js";function l(){let e=t(),i=r()?n():null;return i?.source==="dev-bridge"?{primary:`engine dev source (:${i.bridgePort})`,installedRuntime:e?`installed runtime v${e}`:null,isDevBridge:!0}:{primary:e?`runtime v${e}`:"runtime not installed",installedRuntime:null,isDevBridge:!1}}export{l as a};
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{F as b,p as h,r as y,t as S}from"./chunk-I37LRPZ3.js";import{u as m,y as w,z as p}from"./chunk-MKHW3JNL.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-POCPBDTJ.js";import{u as m,y as w,z as p}from"./chunk-VBAUP3CK.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,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
4
  var c="sootsim-agent-prompt-v1";function r(n){return typeof n=="string"?n.trim():""}function m(n){let e=r(n.text);if(!e)return"";let t=r(n.displayText),s=r(n.inspectSummary),o=r(n.inspectTrace);return!!s||!!o||/[\r\n]/.test(e)||!!t&&t!==e?JSON.stringify({__sootsimAgentPrompt:c,text:e,displayText:t,inspectSummary:s,inspectTrace:o}):e}function u(n){let e=r(n);if(!e)return null;try{let t=JSON.parse(e);if(t.__sootsimAgentPrompt!==c)return{text:e};let s=r(typeof t.text=="string"?t.text:void 0);if(!s)return null;let o=r(typeof t.displayText=="string"?t.displayText:void 0),i=r(typeof t.inspectSummary=="string"?t.inspectSummary:void 0),p=r(typeof t.inspectTrace=="string"?t.inspectTrace:void 0);return{text:s,...o?{displayText:o}:{},...i?{inspectSummary:i}:{},...p?{inspectTrace:p}:{}}}catch{return{text:e}}}export{m as a,u as b};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{a as i}from"./chunk-MSM2E74F.js";import{spawn as m}from"node:child_process";import c from"node:fs";import t from"node:path";function b(n){let e=t.resolve(n),r=null;for(;;){if(!r&&c.existsSync(t.join(e,"package.json"))&&(r=e),c.existsSync(t.join(e,".git")))return r;let s=t.dirname(e);if(s===e)return null;e=s}}function g(n){let e=t.resolve(n);for(;;){if(c.existsSync(t.join(e,"bun.lock"))||c.existsSync(t.join(e,"bun.lockb")))return"bun";if(c.existsSync(t.join(e,"pnpm-lock.yaml")))return"pnpm";if(c.existsSync(t.join(e,"package-lock.json")))return"npm";let r=t.dirname(e);if(r===e)return"npm";e=r}}function j(n){let e=t.resolve(n.appDir),r=u(t.join(e,"package.json")),s=`${i.commandName} open`,o=r.scripts?.[i.commandName];if(o&&o!==s)throw new Error(`package.json already defines scripts.${i.commandName} as ${JSON.stringify(o)}; resolve that conflict before setup`);let a=g(e),p=[];return r.devDependencies?.[i.packageName]!==n.cliVersion&&p.push(f(a,n.cliVersion)),o!==s&&p.push(S(a)),{appDir:e,packageManager:a,operations:p}}async function w(n,e){for(let r of n.operations)e.dryRun||await y(r,n.appDir,e.json)}function O(n){return n.operations.map(e=>`${e.command} ${e.args.map(l).join(" ")}`)}function u(n){let e;try{e=JSON.parse(c.readFileSync(n,"utf8"))}catch(o){let a=o instanceof Error?o.message:String(o);throw new Error(`could not read ${n}: ${a}`)}if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${n} must contain a JSON object`);let r=d(Reflect.get(e,"scripts")),s=d(Reflect.get(e,"devDependencies"));return{...r?{scripts:r}:{},...s?{devDependencies:s}:{}}}function d(n){if(!n||typeof n!="object"||Array.isArray(n))return null;let e=Object.entries(n).filter(r=>typeof r[1]=="string");return Object.fromEntries(e)}function f(n,e){let r=`${i.packageName}@${e}`;switch(n){case"bun":return{command:"bun",args:["add","--dev","--exact",r],description:`install ${r} as an exact dev dependency`};case"pnpm":return{command:"pnpm",args:["add","--save-dev","--save-exact",r],description:`install ${r} as an exact dev dependency`};case"npm":return{command:"npm",args:["install","--save-dev","--save-exact",r],description:`install ${r} as an exact dev dependency`}}}function l(n){return/^[a-zA-Z0-9_./@=-]+$/.test(n)?n:JSON.stringify(n)}function y(n,e,r){return new Promise((s,o)=>{let a=m(n.command,n.args,{cwd:e,stdio:r?["ignore",2,"inherit"]:"inherit"});a.once("error",o),a.once("exit",p=>{p===0?s():o(new Error(`${n.command} exited with code ${p??"unknown"}`))})})}function S(n){return{command:n,args:n==="bun"?["pm","pkg","set",`scripts.${i.commandName}=${i.commandName} open`]:["pkg","set",`scripts.${i.commandName}=${i.commandName} open`],description:`add the \`${i.commandName}\` package script`}}export{b as a,j as b,w as c,O as d};
4
+ import{a as i}from"./chunk-NQDLJL63.js";import{spawn as m}from"node:child_process";import c from"node:fs";import t from"node:path";function b(n){let e=t.resolve(n),r=null;for(;;){if(!r&&c.existsSync(t.join(e,"package.json"))&&(r=e),c.existsSync(t.join(e,".git")))return r;let s=t.dirname(e);if(s===e)return null;e=s}}function g(n){let e=t.resolve(n);for(;;){if(c.existsSync(t.join(e,"bun.lock"))||c.existsSync(t.join(e,"bun.lockb")))return"bun";if(c.existsSync(t.join(e,"pnpm-lock.yaml")))return"pnpm";if(c.existsSync(t.join(e,"package-lock.json")))return"npm";let r=t.dirname(e);if(r===e)return"npm";e=r}}function j(n){let e=t.resolve(n.appDir),r=u(t.join(e,"package.json")),s=`${i.commandName} open`,o=r.scripts?.[i.commandName];if(o&&o!==s)throw new Error(`package.json already defines scripts.${i.commandName} as ${JSON.stringify(o)}; resolve that conflict before setup`);let a=g(e),p=[];return r.devDependencies?.[i.packageName]!==n.cliVersion&&p.push(f(a,n.cliVersion)),o!==s&&p.push(S(a)),{appDir:e,packageManager:a,operations:p}}async function w(n,e){for(let r of n.operations)e.dryRun||await y(r,n.appDir,e.json)}function O(n){return n.operations.map(e=>`${e.command} ${e.args.map(l).join(" ")}`)}function u(n){let e;try{e=JSON.parse(c.readFileSync(n,"utf8"))}catch(o){let a=o instanceof Error?o.message:String(o);throw new Error(`could not read ${n}: ${a}`)}if(!e||typeof e!="object"||Array.isArray(e))throw new Error(`${n} must contain a JSON object`);let r=d(Reflect.get(e,"scripts")),s=d(Reflect.get(e,"devDependencies"));return{...r?{scripts:r}:{},...s?{devDependencies:s}:{}}}function d(n){if(!n||typeof n!="object"||Array.isArray(n))return null;let e=Object.entries(n).filter(r=>typeof r[1]=="string");return Object.fromEntries(e)}function f(n,e){let r=`${i.packageName}@${e}`;switch(n){case"bun":return{command:"bun",args:["add","--dev","--exact",r],description:`install ${r} as an exact dev dependency`};case"pnpm":return{command:"pnpm",args:["add","--save-dev","--save-exact",r],description:`install ${r} as an exact dev dependency`};case"npm":return{command:"npm",args:["install","--save-dev","--save-exact",r],description:`install ${r} as an exact dev dependency`}}}function l(n){return/^[a-zA-Z0-9_./@=-]+$/.test(n)?n:JSON.stringify(n)}function y(n,e,r){return new Promise((s,o)=>{let a=m(n.command,n.args,{cwd:e,stdio:r?["ignore",2,"inherit"]:"inherit"});a.once("error",o),a.once("exit",p=>{p===0?s():o(new Error(`${n.command} exited with code ${p??"unknown"}`))})})}function S(n){return{command:n,args:n==="bun"?["pm","pkg","set",`scripts.${i.commandName}=${i.commandName} open`]:["pkg","set",`scripts.${i.commandName}=${i.commandName} open`],description:`add the \`${i.commandName}\` package script`}}export{b as a,j as b,w as c,O as d};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{a as k}from"./chunk-2MA3Q44D.js";import{createHash as L}from"node:crypto";import{createRequire as j}from"node:module";var P=/(^|\/)expo-splash-screen$/,w=/(^|\/)react-native-bootsplash$/;function A(n,e){let r=e.replace(/\/+$/,""),t=n.replace(/^\.\//,"").replace(/^\/+/,"");if(t)return`${r}/assets/${t}`}function d(n,e,r){return r?r(n):A(n,e)}function y(n){if(n==="cover")return"cover";if(n==="contain"||n==="native")return"contain"}function c(n){return typeof n=="string"&&n.length>0?n:void 0}function S(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function R(n,e,r){if(!n||typeof n!="object")return null;let t=n,o={source:"expo-splash-screen",backgroundColor:c(t.backgroundColor)??"#ffffff"},i=c(t.image);i&&(o.imageUrl=d(i,e,r));let s=S(t.imageWidth);s!=null&&(o.imageWidthPx=s);let l=y(t.resizeMode);l&&(o.resizeMode=l);let p=t.dark;if(p&&typeof p=="object"){let u=p,g=c(u.backgroundColor),f=c(u.image);(g||f)&&(o.dark={},g&&(o.dark.backgroundColor=g),f&&(o.dark.imageUrl=d(f,e,r)))}return o}function O(n,e,r,t){let a=n[e],o=a&&typeof a=="object"?a.splash:void 0,i=n.splash,s=o&&typeof o=="object"?o:i;if(!s||typeof s!="object")return null;let p={source:"expo-legacy",backgroundColor:c(s.backgroundColor)??"#ffffff",imageWidthPx:S(s.imageWidth)??200,resizeMode:y(s.resizeMode)??"contain"},u=c(s.image);u&&(p.imageUrl=d(u,r,t));let g=s.dark;if(g&&typeof g=="object"){let f=g,m=c(f.backgroundColor),h=c(f.image);(m||h)&&(p.dark={},m&&(p.dark.backgroundColor=m),h&&(p.dark.imageUrl=d(h,r,t)))}return p}function v(n,e,r){if(!n||typeof n!="object")return null;let t=n,a=c(t.logo);if(!a)return null;let o={source:"react-native-bootsplash",backgroundColor:c(t.background)??"#fff",imageUrl:d(a,e,r),imageWidthPx:S(t.logoWidth)??100,resizeMode:"contain"},i=c(t.darkBackground),s=c(t.darkLogo);return(i||s)&&(o.dark={},i&&(o.dark.backgroundColor=i),s&&(o.dark.imageUrl=d(s,e,r))),o}function C(n,e,r,t={}){if(!n||typeof n!="object")return null;let a=n,o=a.plugins,i=null,s=null;if(Array.isArray(o))for(let l of o){let p=Array.isArray(l)?l[0]:l;if(typeof p!="string")continue;let u=Array.isArray(l)?l[1]??{}:{};!i&&P.test(p)?i=R(u,r,t.resolveAssetUrl):!s&&w.test(p)&&(s=v(u,r,t.resolveAssetUrl))}return s||i||O(a,e,r,t.resolveAssetUrl)}var b=j(import.meta.url);function E(n){try{let e=new URL(n),r=e.hostname.replace(/^\[|\]$/g,"").toLowerCase();if(r==="localhost"||r.endsWith(".localhost")||r==="0.0.0.0"||r==="::1"||/^127(?:\.\d{1,3}){3}$/.test(r))return e.origin}catch{}return null}function G(n){let e=E(n.bundleUrl);if(!e)return null;let t=k(n.projectDir)?.appDir??null;if(!t)return null;let a=(n.platform||process.env.CONTRAST_PLATFORM||"ios").toLowerCase(),o=null;try{let s=b.resolve("@expo/config",{paths:[t]}),l=b(s);typeof l.getConfig=="function"&&(o=l.getConfig)}catch{}if(!o)return null;let i;try{let s=o(t,{skipSDKVersionRequirement:!0});s?.exp&&typeof s.exp=="object"&&(i=s.exp)}catch{}return!i||typeof i!="object"?null:C(i,a==="android"?"android":"ios",e)}function q(n){return encodeURIComponent(JSON.stringify(n))}function z(n){if(!n)return null;try{let e=JSON.parse(decodeURIComponent(n));if(!e||typeof e!="object")return null;let r=e;return r.source!=="expo-splash-screen"&&r.source!=="expo-legacy"&&r.source!=="react-native-bootsplash"||typeof r.backgroundColor!="string"?null:e}catch{return null}}function I(n){let e=new Set;return n.imageUrl&&e.add(n.imageUrl),n.dark?.imageUrl&&e.add(n.dark.imageUrl),[...e]}function M(n){let e=(n.split("?")[0].split(".").pop()||"").toLowerCase();return e==="png"?"image/png":e==="jpg"||e==="jpeg"?"image/jpeg":e==="webp"?"image/webp":e==="gif"?"image/gif":e==="svg"?"image/svg+xml":"application/octet-stream"}async function H(n,e){let r=z(n);if(!r)return[];let t=[],a=new Set;for(let o of I(r)){let i=L("sha256").update(o).digest("hex");if(!a.has(i)){a.add(i);try{let s=await fetch(o);if(!s.ok){e?.onError?.(o,new Error(`${s.status} ${s.statusText}`));continue}let l=new Uint8Array(await s.arrayBuffer());t.push({url:o,urlhash:i,contentType:M(o),bytes:l}),e?.onStaged?.({url:o,byteLength:l.byteLength})}catch(s){e?.onError?.(o,s)}}}return t}import{spawn as D}from"child_process";function U(n,e={}){if(!n)throw new Error("openUrl requires a url");let r=e.platform??process.platform;return r==="darwin"?{command:"open",args:e.background===!1?[n]:["-g",n],via:"system"}:r==="win32"?{command:"cmd",args:["/c","start","",n],via:"system"}:{command:"xdg-open",args:[n],via:"system"}}async function W(n,e,r){return new Promise((t,a)=>{let o=D(n,e,{detached:r,stdio:"ignore"});o.once("error",a),o.once("spawn",()=>{r&&o.unref(),t(o.pid)})})}async function x(n,e={}){let r=U(n,e),t=await W(r.command,r.args,e.detached??!0);return{...r,pid:t,attachUrl:n}}async function F(n,e={}){await x(n,e)}export{G as a,q as b,H as c,F as d};
4
+ import{a as k}from"./chunk-BLOJLKH7.js";import{createHash as L}from"node:crypto";import{createRequire as j}from"node:module";var P=/(^|\/)expo-splash-screen$/,w=/(^|\/)react-native-bootsplash$/;function A(n,e){let r=e.replace(/\/+$/,""),t=n.replace(/^\.\//,"").replace(/^\/+/,"");if(t)return`${r}/assets/${t}`}function d(n,e,r){return r?r(n):A(n,e)}function y(n){if(n==="cover")return"cover";if(n==="contain"||n==="native")return"contain"}function c(n){return typeof n=="string"&&n.length>0?n:void 0}function S(n){return typeof n=="number"&&Number.isFinite(n)?n:void 0}function R(n,e,r){if(!n||typeof n!="object")return null;let t=n,o={source:"expo-splash-screen",backgroundColor:c(t.backgroundColor)??"#ffffff"},i=c(t.image);i&&(o.imageUrl=d(i,e,r));let s=S(t.imageWidth);s!=null&&(o.imageWidthPx=s);let l=y(t.resizeMode);l&&(o.resizeMode=l);let p=t.dark;if(p&&typeof p=="object"){let u=p,g=c(u.backgroundColor),f=c(u.image);(g||f)&&(o.dark={},g&&(o.dark.backgroundColor=g),f&&(o.dark.imageUrl=d(f,e,r)))}return o}function O(n,e,r,t){let a=n[e],o=a&&typeof a=="object"?a.splash:void 0,i=n.splash,s=o&&typeof o=="object"?o:i;if(!s||typeof s!="object")return null;let p={source:"expo-legacy",backgroundColor:c(s.backgroundColor)??"#ffffff",imageWidthPx:S(s.imageWidth)??200,resizeMode:y(s.resizeMode)??"contain"},u=c(s.image);u&&(p.imageUrl=d(u,r,t));let g=s.dark;if(g&&typeof g=="object"){let f=g,m=c(f.backgroundColor),h=c(f.image);(m||h)&&(p.dark={},m&&(p.dark.backgroundColor=m),h&&(p.dark.imageUrl=d(h,r,t)))}return p}function v(n,e,r){if(!n||typeof n!="object")return null;let t=n,a=c(t.logo);if(!a)return null;let o={source:"react-native-bootsplash",backgroundColor:c(t.background)??"#fff",imageUrl:d(a,e,r),imageWidthPx:S(t.logoWidth)??100,resizeMode:"contain"},i=c(t.darkBackground),s=c(t.darkLogo);return(i||s)&&(o.dark={},i&&(o.dark.backgroundColor=i),s&&(o.dark.imageUrl=d(s,e,r))),o}function C(n,e,r,t={}){if(!n||typeof n!="object")return null;let a=n,o=a.plugins,i=null,s=null;if(Array.isArray(o))for(let l of o){let p=Array.isArray(l)?l[0]:l;if(typeof p!="string")continue;let u=Array.isArray(l)?l[1]??{}:{};!i&&P.test(p)?i=R(u,r,t.resolveAssetUrl):!s&&w.test(p)&&(s=v(u,r,t.resolveAssetUrl))}return s||i||O(a,e,r,t.resolveAssetUrl)}var b=j(import.meta.url);function E(n){try{let e=new URL(n),r=e.hostname.replace(/^\[|\]$/g,"").toLowerCase();if(r==="localhost"||r.endsWith(".localhost")||r==="0.0.0.0"||r==="::1"||/^127(?:\.\d{1,3}){3}$/.test(r))return e.origin}catch{}return null}function G(n){let e=E(n.bundleUrl);if(!e)return null;let t=k(n.projectDir)?.appDir??null;if(!t)return null;let a=(n.platform||process.env.CONTRAST_PLATFORM||"ios").toLowerCase(),o=null;try{let s=b.resolve("@expo/config",{paths:[t]}),l=b(s);typeof l.getConfig=="function"&&(o=l.getConfig)}catch{}if(!o)return null;let i;try{let s=o(t,{skipSDKVersionRequirement:!0});s?.exp&&typeof s.exp=="object"&&(i=s.exp)}catch{}return!i||typeof i!="object"?null:C(i,a==="android"?"android":"ios",e)}function q(n){return encodeURIComponent(JSON.stringify(n))}function z(n){if(!n)return null;try{let e=JSON.parse(decodeURIComponent(n));if(!e||typeof e!="object")return null;let r=e;return r.source!=="expo-splash-screen"&&r.source!=="expo-legacy"&&r.source!=="react-native-bootsplash"||typeof r.backgroundColor!="string"?null:e}catch{return null}}function I(n){let e=new Set;return n.imageUrl&&e.add(n.imageUrl),n.dark?.imageUrl&&e.add(n.dark.imageUrl),[...e]}function M(n){let e=(n.split("?")[0].split(".").pop()||"").toLowerCase();return e==="png"?"image/png":e==="jpg"||e==="jpeg"?"image/jpeg":e==="webp"?"image/webp":e==="gif"?"image/gif":e==="svg"?"image/svg+xml":"application/octet-stream"}async function H(n,e){let r=z(n);if(!r)return[];let t=[],a=new Set;for(let o of I(r)){let i=L("sha256").update(o).digest("hex");if(!a.has(i)){a.add(i);try{let s=await fetch(o);if(!s.ok){e?.onError?.(o,new Error(`${s.status} ${s.statusText}`));continue}let l=new Uint8Array(await s.arrayBuffer());t.push({url:o,urlhash:i,contentType:M(o),bytes:l}),e?.onStaged?.({url:o,byteLength:l.byteLength})}catch(s){e?.onError?.(o,s)}}}return t}import{spawn as D}from"child_process";function U(n,e={}){if(!n)throw new Error("openUrl requires a url");let r=e.platform??process.platform;return r==="darwin"?{command:"open",args:e.background===!1?[n]:["-g",n],via:"system"}:r==="win32"?{command:"cmd",args:["/c","start","",n],via:"system"}:{command:"xdg-open",args:[n],via:"system"}}async function W(n,e,r){return new Promise((t,a)=>{let o=D(n,e,{detached:r,stdio:"ignore"});o.once("error",a),o.once("spawn",()=>{r&&o.unref(),t(o.pid)})})}async function x(n,e={}){let r=U(n,e),t=await W(r.command,r.args,e.detached??!0);return{...r,pid:t,attachUrl:n}}async function F(n,e={}){await x(n,e)}export{G as a,q as b,H as c,F as d};
@@ -1,5 +1,5 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{n}from"./chunk-D5AT7UT5.js";var i=[];for(let[t,e]of Object.entries(n))e.cliFlag&&i.push({name:`--${e.cliFlag}`,short:e.cliFlagShort?`-${e.cliFlagShort}`:void 0,key:t,type:e.type==="enum"?"string":e.type,description:e.description,options:e.options,default:e.default});var a=i;function g(){let t=[];for(let e of a){let s=e.short?`${e.short}, ${e.name}`:` ${e.name}`,o=e.options?` [${e.options.join("|")}]`:"",r=e.default!==void 0?` (default: ${e.default})`:"";t.push(` ${s.padEnd(24)}${e.description}${o}${r}`)}return t.join(`
4
+ import{n}from"./chunk-MTWJ3CNR.js";var i=[];for(let[t,e]of Object.entries(n))e.cliFlag&&i.push({name:`--${e.cliFlag}`,short:e.cliFlagShort?`-${e.cliFlagShort}`:void 0,key:t,type:e.type==="enum"?"string":e.type,description:e.description,options:e.options,default:e.default});var a=i;function g(){let t=[];for(let e of a){let s=e.short?`${e.short}, ${e.name}`:` ${e.name}`,o=e.options?` [${e.options.join("|")}]`:"",r=e.default!==void 0?` (default: ${e.default})`:"";t.push(` ${s.padEnd(24)}${e.description}${o}${r}`)}return t.join(`
5
5
  `)}export{g as a};
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{a as fe,b as Ge}from"./chunk-U3XYGLXG.js";import{e as rt}from"./chunk-3C6LTIDV.js";import{c as Ve}from"./chunk-HDGZAVH3.js";import{a as Ze,b as et,d as ot}from"./chunk-H567W7JT.js";import{a as Ne,c as Fe,d as k,e as de,f as A,g as me,h as He,i as pe,j as je,k as We,m as Qe,n as Ye,o as Xe}from"./chunk-IX25FFF3.js";import{m as L}from"./chunk-4UMODU6C.js";import{a as Ke,b as qe}from"./chunk-DQOQQFMP.js";import{h as tt,p as nt}from"./chunk-I37LRPZ3.js";import{a as Je}from"./chunk-G5G7PQKO.js";import{a as ze}from"./chunk-2MA3Q44D.js";import{b as le,e as Me}from"./chunk-D5AT7UT5.js";import{b as Oe,f as Be,g as B,h as P,i as D,n as De,o as ce,p as ue,r as Ae,s as Le,t as T,u as I,v as E}from"./chunk-MKHW3JNL.js";import{b as G,c as d}from"./chunk-YWTBN7SD.js";import{f as _e}from"./chunk-2OA2WE7G.js";import{a as Ee}from"./chunk-LWLHVF6Y.js";import{D as Re,M as se,P as ae,R as O,T as Te,l as ie}from"./chunk-QA2PTSOC.js";import{a as oe}from"./chunk-MSM2E74F.js";import{spawn as mt,spawnSync as pt}from"node:child_process";import _ from"node:fs";import Kt from"node:os";import U from"node:path";import{WebSocket as ge}from"ws";function it(e){return new Error(`could not resolve a native bundle for ${e}. pass an explicit bundle URL or open Connect and choose the app there.`)}function Ot(e,n){return e?.includes("/one/metro-entry.bundle")?"one":typeof n=="string"&&n?"expo":"unknown"}function Bt(e,n,t){return`${e}//${n}:${t}`}function Dt(e){if(typeof window>"u")return!1;try{let n=new URL(e);return k(n.hostname)&&k(window.location.hostname)&&n.origin!==window.location.origin}catch{return!1}}async function lt(e,n){let t={...n,cache:n?.cache??"no-store"};return Dt(e)?fetch(`/__fetch-proxy?url=${encodeURIComponent(e)}`,t):fetch(e,t)}function At(e){return e==="https:"?443:80}function Lt(e){let n=e.pathname||"/";return(n==="/"||n==="")&&!e.search&&!e.hash}async function ct(e){try{let n=await fetch("/__server-scan",{cache:"no-store"});if(!n.ok||!(n.headers.get("content-type")||"").toLowerCase().includes("json"))return null;let t=await n.json();if(!Array.isArray(t))return null;let r=t.find(o=>!!o&&typeof o=="object"&&o.port===e&&typeof o.bundleUrl=="string");return!r||r.bundleUrlProvisional?null:{bundleUrl:pe(r.bundleUrl),port:e,framework:typeof r.framework=="string"?r.framework:"unknown",projectName:typeof r.projectName=="string"?r.projectName:void 0}}catch{return null}}var Nt=5e3,Ft=3e4,Ht=1e3;async function st(e,n){let t,r=lt(`${e}/`,{headers:{"expo-platform":"ios"}}).then(async c=>c.ok?{ok:!0,body:await c.text()}:null,()=>{}),o=await Promise.race([r,new Promise(c=>setTimeout(()=>c("timeout"),Nt).unref?.())]);if(o==="timeout"||o===void 0)return{state:"no-answer"};if(o===null)return{state:"no-manifest"};if(t=o.body,!t.trim())return{state:"no-answer"};let i;try{i=JSON.parse(t)}catch{return{state:"no-manifest"}}let a=i?.extra?.expoClient||i?.extra||{},s=typeof i?.launchAsset?.url=="string"?i.launchAsset.url:void 0,l=s?He(s,e):void 0;return!l&&!a.name?{state:"no-manifest"}:{state:"resolved",bundle:{bundleUrl:pe(l||`${e}${me}`),port:n,framework:Ot(l,a.sdkVersion),projectName:a.name}}}async function at(e){try{let n=await lt(`${e}/status`);return n.ok?(await n.text()).includes("packager-status:running"):!1}catch{return!1}}async function ut(e,n){let t=e.replace(/\/+$/,""),r=await st(t,n),o=!1;if(r.state==="no-answer"){if(o=await at(t),!o)return null;let i=Date.now()+Ft;for(;r.state==="no-answer"&&Date.now()<i;)await new Promise(a=>setTimeout(a,Ht)),r=await st(t,n)}return r.state==="resolved"?r.bundle:r.state==="no-answer"||!o&&!await at(t)?null:{bundleUrl:`${t}${me}`,port:n,framework:"metro"}}async function jt(e,n){try{if(k(new URL(e).hostname)){let t=await ct(n);if(t)return t}}catch{}return ut(e,n)}async function Wt(e){let n=await ct(e);return n||((await Promise.all(Ne.map(r=>ut(Fe("http:",r,e),e)))).find(r=>r!==null)??null)}async function dt(e){let n=e.trim();if(/^\d+$/.test(n)){let s=parseInt(n,10),l=await Wt(s);if(l)return l;throw it(`localhost:${s}`)}let t=n.startsWith("http")?n:`http://${n}`,r;try{r=new URL(t)}catch{throw new Error(`could not parse "${e}". pass a dev-server port, a dev-server base URL, or a full bundle URL.`)}let o=r.protocol||"http:",i=r.port?parseInt(r.port,10):At(o),a=Bt(o,r.hostname,i);if(Lt(r)){let s=await jt(a,i);if(s)return s;throw it(a)}return{bundleUrl:r.toString(),port:i,framework:"unknown"}}var qt=12e4,ft=100,Vt=5e3,gt=1e4,Gt={rn:"/rn",connectrn:"/rn","connect-rn":"/rn",clock:"/app/clock","native-ui":"/app/native-ui",tamagui:"/app/tamagui",settings:"/app/settings",photos:"/app/photos",camera:"/app/camera"};function $(e){return new Promise(n=>setTimeout(n,e))}function ht(e){let n=process.env[e]?.trim();if(!n)return null;let t=Number(n);return Number.isInteger(t)&&t>0?t:null}function zt(){let e=ht("SOOTSIM_DRIVER_CONNECT_TIMEOUT_MS")??ht("SOOTSIM_PW_CONNECT_TIMEOUT_MS")??qt;return{timeoutMs:e,hostTimeoutMs:e+Vt,intervalMs:ft,attempts:Math.max(1,Math.ceil(e/ft))}}function wt(e){return e==="electron"||e==="playwright"}function he(e,n){return n==="playwright"?e.meta?.sootsimHostDriver==="playwright":e.userAgent?.includes("Electron/")===!0}function Jt(e,n){return e.includes("--headless")?!0:e.includes("--headed")?!1:n==="playwright"&&process.platform==="linux"&&!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY?(console.error(" no display detected \u2192 running playwright headless (override with --headed)"),!0):!1}function J(e){return e.trim()}async function Qt(e,n=!1){let t=ae();bt(e,n,t);let r=ce(e);if((n||r!==null)&&await we(e,250))return e;if(t&&O(t)&&await we(t.bridgePort,500))return t.bridgePort;if(t&&O(t))throw new Error(`rnx bridge lockfile is fresh (port ${t.bridgePort}) but the bridge is not reachable. run \`rnx daemon restart\` or \`rnx daemon uninstall\`.`);await Yt();let o=Xt(["serve","--quiet","--port",String(e)]),i=null;o.once("exit",(s,l)=>{i=String(s??l??"unknown")}),o.unref();let a=Date.now()+gt;for(;Date.now()<a;){let s=ae();if(bt(e,n,s),s&&O(s)&&await we(s.bridgePort,250))return console.error(` Started a local bridge on port ${s.bridgePort}. Run \`rnx daemon install\` to keep it ready between commands.`),s.bridgePort;if(i)throw new Error(`rnx bridge exited before becoming ready (exit ${i})`);await $(150)}throw new Error(`rnx bridge did not start within ${Math.round(gt/1e3)}s`)}function bt(e,n,t){if(!(!n||!t||!O(t)||t.bridgePort===e))throw new Error(`${oe.commandName} open: requested bridge port ${e}, but the active daemon owns port ${t.bridgePort}. explicit --port never selects another bridge; stop that daemon or use an isolated SOOTSIM_HOME.`)}async function Yt(){let e=se();if(e&&_.existsSync(ie(e)))return;console.error(" installing rnx engine runtime...");let{runRuntime:n}=await import("./runtime-DEC5AF3M.js");await n(["install"],{})}function Xt(e){let n=process.argv[1];return n&&_.existsSync(n)?mt(process.execPath,[n,...e],{detached:!0,stdio:"ignore",env:process.env}):mt(oe.commandName,e,{detached:!0,stdio:"ignore",env:process.env})}function we(e,n){return new Promise(t=>{let r=new ge(`ws://127.0.0.1:${e}`,{handshakeTimeout:n}),o=!1,i=a=>{o||(o=!0,r.readyState===ge.OPEN?r.close():r.readyState===ge.CONNECTING&&r.terminate(),t(a))};r.once("open",()=>i(!0)),r.on("error",()=>i(!1)),setTimeout(()=>i(!1),n)})}function ve(e){try{let n=new URL(e),t=n.pathname.replace(/\/+$/,"")||"/";return n.searchParams.has("open")||n.searchParams.has("port")||n.searchParams.has("bundle")||n.searchParams.has("demo")||n.pathname.includes("/sootsim/index.html")||t==="/sootsim"||n.pathname==="/__soot"||n.pathname==="/__soot/"||t==="/rn"||/^\/rn\/[^/]+$/i.test(t)||/^\/app\/[^/]+$/i.test(t)||t==="/__soot/rn"||/^\/__soot\/rn\/[^/]+$/i.test(t)||/^\/__soot\/app\/[^/]+$/i.test(t)}catch{return!1}}function Zt(e){try{let n=new URL(e,"http://sootsim.local");if(n.origin!=="http://sootsim.local")return!1;let t=n.pathname.replace(/\/+$/,"")||"/";return t==="/rn"||/^\/rn\/[^/]+$/i.test(t)||/^\/app\/[^/]+$/i.test(t)||t==="/__soot/rn"||/^\/__soot\/rn\/[^/]+$/i.test(t)||/^\/__soot\/app\/[^/]+$/i.test(t)}catch{return!1}}function en(e,n){let t=new URL(e,"http://sootsim.local"),r=new URL(n),o=Q(r.pathname),i=t.pathname.startsWith("/__soot/")?t.pathname.slice(7):t.pathname;return r.pathname=`${o}${i}`,r.search=t.search,r.hash=t.hash,r.toString()}function tn(e){try{let n=new URL(e).pathname.replace(/\/+$/,"")||"/";return/^\/preview\/[^/]+$/.test(n)||/^\/build\/.+/.test(n)}catch{return!1}}async function mr(e){let n=J(e);return(await Se(n)).bundleUrl}function nn(e){try{let n=new URL(e.startsWith("http")?e:`http://${e}`),t=n.pathname||"/";if(t!=="/"&&t!==""||n.search||n.hash||!k(n.hostname))return null;let r=n.port?Number(n.port):n.protocol==="https:"?443:80;return Number.isFinite(r)&&r>0?r:null}catch{return null}}async function Se(e){let n=J(e),t=/^\d+$/.test(n)?Number(n):nn(n);if(t&&t>0){let r=await We(t);if(r&&!r.bundleUrlProvisional)return{bundleUrl:r.bundleUrl,port:r.port,framework:r.framework,projectName:r.projectName}}return dt(n)}function Q(e){let n=e.replace(/\/+$/,"")||"/";return n==="/__soot"||n.startsWith("/__soot/")?"/__soot":""}function rn(e,n){let t=J(e),r=new URL(n),o=Q(r.pathname);return r.pathname=`${o}/rn`,r.searchParams.delete("bundle"),r.searchParams.delete("demo"),r.searchParams.delete("app"),r.searchParams.delete("open"),r.searchParams.delete("port"),/^\d+$/.test(t)?r.pathname=`${o}/rn/${t}`:(r.pathname=`${o}/rn`,r.searchParams.set("open",t)),r.toString()}function Pt(e){let n=J(e);return/^\d+$/.test(n)||/^https?:\/\//i.test(n)?!0:/^(localhost|127\.0\.0\.1|\[::1\]|[^/]+\.localhost):\d+(?:\/.*)?$/i.test(n)}async function on(e,n,t={}){let r=t.resolvedBundle??await Se(e),o=new URL(n),i=Q(o.pathname);o.pathname=`${i}/rn`,o.searchParams.delete("open"),o.searchParams.delete("port"),o.searchParams.delete("demo"),o.searchParams.delete("app");let a=t.hot===void 0?r.bundleUrl:je(r.bundleUrl,t.hot);return o.searchParams.set("bundle",a),o.toString()}function sn(e){return e.startsWith("~/")?U.join(Kt.homedir(),e.slice(2)):U.isAbsolute(e)?e:U.resolve(process.cwd(),e)}function an(e){let n={},t={};for(let o=0;o<e.length;o++){if(e[o]==="--replace"){let i=e[o+1];i||(console.error(" rnx open: --replace expects <module>=<file>"),d(1));let a=i.indexOf("=");(a<=0||a===i.length-1)&&(console.error(" rnx open: --replace expects <module>=<file>"),d(1));let s=i.slice(0,a).trim(),l=sn(i.slice(a+1).trim());_.existsSync(l)||(console.error(` rnx open: replacement file not found: ${l}`),d(1)),n[s]={file:l},o++;continue}if(e[o]==="--remap"){let i=e[o+1],a=i?i.indexOf("="):-1;(!i||a<=0||a===i.length-1)&&(console.error(" rnx open: --remap expects <host:port>=<host:port>"),d(1)),t[i.slice(0,a).trim()]=i.slice(a+1).trim(),o++;continue}}let r={};return Object.keys(n).length>0&&(r.modules=n),Object.keys(t).length>0&&(r.network={remap:t}),r.modules||r.network?r:void 0}async function ln(e){if(!e)return null;let n=await Ye(e.bundleUrl);return n?ze(n):null}async function cn(e){if(_.existsSync(U.join(ie(e),"index.html")))return;console.error(` installing configured engine runtime ${e}...`);let n=await _e.install({version:e,setActive:!1,protectVersions:Te()});console.error(` installed engine runtime ${n.version}`)}function un(e,n){let t=n??(fe()?void 0:se()??void 0);if(!t)return e;let r=new URL(e);if(!k(r.hostname)){if(!n)return e;throw new Error(`runtimeVersion ${t} requires a local rnx host; got ${r.origin}`)}return r.hostname=Ge(t),r.toString()}function It(){return De().shellBaseUrl}function dn(e){return ce(e)?.shellBaseUrl??Oe(e)??It()}async function mn(e,n){try{let t=new URL(e),r=t.searchParams.get("bundle")||"";if(!r||!n)return e;let o=Qe({bundleUrl:r,projectDir:n.appDir});if(o.length===0)return e;let i=await pn(o);return i.length===0?e:(t.searchParams.set("appFonts",Xe(i)),t.toString())}catch{return e}}async function pn(e){let n=await Promise.all(e.map(async r=>{let o=new AbortController,i=setTimeout(()=>o.abort(),1500);try{let a=await fetch(r.url,{method:"HEAD",signal:o.signal});return a.status>=200&&a.status<400?r:null}catch{return null}finally{clearTimeout(i)}})),t=[];for(let r of n)r!==null&&t.push(r);return t}async function fn(e,n,t={}){if(!e)return new URL(n).toString();if(ve(e))return new URL(e).toString();if(Zt(e))return en(e,n);let r=Gt[e.toLowerCase()];if(r){let o=new URL(n),i=Q(o.pathname);return o.pathname=`${i}${r}`,o.toString()}return Pt(e)?on(e,n,t):rn(e,n)}async function gn(e,n){try{let t=new URL(e),r=t.searchParams.get("bundle")||"";if(!r||!n)return e;let o=Ze({bundleUrl:r,projectDir:n.appDir});return!o||o.imageUrl&&!await hn(o.imageUrl)?e:(t.searchParams.set("appSplash",et(o)),t.toString())}catch{return e}}async function hn(e){let n=new AbortController,t=setTimeout(()=>n.abort(),1500);try{let r=await fetch(e,{method:"HEAD",signal:n.signal});return r.status>=200&&r.status<400}catch{return!1}finally{clearTimeout(t)}}async function z(e,n=It(),t={}){let r=await fn(e,n,t),o=await gn(await mn(r,t.project),t.project);if(!t.device)return o;let i=new URL(o);return i.searchParams.set("device",t.device),i.toString()}function vt(e,n){let t=e?.url||e?.origin||n;try{let r=new URL(t);return r.searchParams.delete("bundle"),r.searchParams.delete("demo"),r.searchParams.delete("app"),r.searchParams.delete("open"),r.searchParams.delete("port"),r.searchParams.delete("inspectOpen"),r.searchParams.delete("appFonts"),r.searchParams.delete("appSplash"),r.toString()}catch{return n}}async function wn(e,n,t,r={}){let o=new URL(await z(e,n,r));return o.searchParams.set("inspectOpen",t),o.toString()}async function bn(e,n,t,r={}){let o=r.attempts??30,i=r.intervalMs??500,a=r.minNodeCount??10;for(let s=0;s<o;s++){let l=I(e,{commandTimeoutMs:n,simId:t,simIdSource:"flag"});try{let c=await l.send({type:"evaluate",code:"(async () => (await window.__sootsimTest?.getNodeCount()) || 0)()"});if(typeof c=="number"&&c>a)return{bridge:l,count:c}}catch{}l.close(),await $(i)}return null}function vn(e){if(!e)return null;try{let n=new URL(e);if(n.searchParams.has("bundle")){let t=n.searchParams.get("bundle")||"";try{let r=new URL(t),o=r.pathname.length>36?`...${r.pathname.slice(-36)}`:r.pathname;return`bundle ${r.host}${o}`}catch{return"bundle"}}return n.searchParams.has("port")?`connect :${n.searchParams.get("port")||""}`:n.searchParams.has("open")?`connect ${n.searchParams.get("open")||""}`:n.searchParams.has("demo")?`demo ${n.searchParams.get("demo")||"default"}`:n.pathname.includes("/sootsim/index.html")||n.pathname==="/sootsim/"||n.pathname==="/sootsim"?"embedded rnx":null}catch{return null}}function yn(e){let n=e.indexOf(":");if(n<=0)return e.length>24?`${e.slice(0,21)}\u2026`:e;let t=e.slice(0,n),r=e.slice(n+1),o=r.length>12?`${r.slice(0,8)}\u2026`:r;return t==="TM_SESSION"||t==="CLAUDE_CODE_SESSION_ID"||t==="CODEX_THREAD_ID"?`agent ${o}`:`${t} ${o}`}function pr(e,n){if(e.length===0){console.log(" no sims connected");return}console.log(` connected sims (${e.length}):
4
+ import{a as fe,b as Ge}from"./chunk-5H5N36NO.js";import{e as rt}from"./chunk-MWXYYQMU.js";import{c as Ve}from"./chunk-AQBARY5L.js";import{a as Ze,b as et,d as ot}from"./chunk-IGHXSJ54.js";import{a as Ne,c as Fe,d as k,e as de,f as A,g as me,h as He,i as pe,j as je,k as We,m as Qe,n as Ye,o as Xe}from"./chunk-ZMXWHNCZ.js";import{m as L}from"./chunk-GVIPHFFH.js";import{a as Ke,b as qe}from"./chunk-BHNWFDNX.js";import{h as tt,p as nt}from"./chunk-POCPBDTJ.js";import{a as Je}from"./chunk-B7LYAWJU.js";import{a as ze}from"./chunk-BLOJLKH7.js";import{b as le,e as Me}from"./chunk-MTWJ3CNR.js";import{b as Oe,f as Be,g as B,h as P,i as D,n as De,o as ce,p as ue,r as Ae,s as Le,t as T,u as I,v as E}from"./chunk-VBAUP3CK.js";import{b as G,c as d}from"./chunk-2272Y5HN.js";import{f as _e}from"./chunk-QKX26L27.js";import{a as Ee}from"./chunk-AYZLK7R4.js";import{D as Re,M as se,P as ae,R as O,T as Te,l as ie}from"./chunk-2YNZ3GHI.js";import{a as oe}from"./chunk-NQDLJL63.js";import{spawn as mt,spawnSync as pt}from"node:child_process";import _ from"node:fs";import Kt from"node:os";import U from"node:path";import{WebSocket as ge}from"ws";function it(e){return new Error(`could not resolve a native bundle for ${e}. pass an explicit bundle URL or open Connect and choose the app there.`)}function Ot(e,n){return e?.includes("/one/metro-entry.bundle")?"one":typeof n=="string"&&n?"expo":"unknown"}function Bt(e,n,t){return`${e}//${n}:${t}`}function Dt(e){if(typeof window>"u")return!1;try{let n=new URL(e);return k(n.hostname)&&k(window.location.hostname)&&n.origin!==window.location.origin}catch{return!1}}async function lt(e,n){let t={...n,cache:n?.cache??"no-store"};return Dt(e)?fetch(`/__fetch-proxy?url=${encodeURIComponent(e)}`,t):fetch(e,t)}function At(e){return e==="https:"?443:80}function Lt(e){let n=e.pathname||"/";return(n==="/"||n==="")&&!e.search&&!e.hash}async function ct(e){try{let n=await fetch("/__server-scan",{cache:"no-store"});if(!n.ok||!(n.headers.get("content-type")||"").toLowerCase().includes("json"))return null;let t=await n.json();if(!Array.isArray(t))return null;let r=t.find(o=>!!o&&typeof o=="object"&&o.port===e&&typeof o.bundleUrl=="string");return!r||r.bundleUrlProvisional?null:{bundleUrl:pe(r.bundleUrl),port:e,framework:typeof r.framework=="string"?r.framework:"unknown",projectName:typeof r.projectName=="string"?r.projectName:void 0}}catch{return null}}var Nt=5e3,Ft=3e4,Ht=1e3;async function st(e,n){let t,r=lt(`${e}/`,{headers:{"expo-platform":"ios"}}).then(async c=>c.ok?{ok:!0,body:await c.text()}:null,()=>{}),o=await Promise.race([r,new Promise(c=>setTimeout(()=>c("timeout"),Nt).unref?.())]);if(o==="timeout"||o===void 0)return{state:"no-answer"};if(o===null)return{state:"no-manifest"};if(t=o.body,!t.trim())return{state:"no-answer"};let i;try{i=JSON.parse(t)}catch{return{state:"no-manifest"}}let a=i?.extra?.expoClient||i?.extra||{},s=typeof i?.launchAsset?.url=="string"?i.launchAsset.url:void 0,l=s?He(s,e):void 0;return!l&&!a.name?{state:"no-manifest"}:{state:"resolved",bundle:{bundleUrl:pe(l||`${e}${me}`),port:n,framework:Ot(l,a.sdkVersion),projectName:a.name}}}async function at(e){try{let n=await lt(`${e}/status`);return n.ok?(await n.text()).includes("packager-status:running"):!1}catch{return!1}}async function ut(e,n){let t=e.replace(/\/+$/,""),r=await st(t,n),o=!1;if(r.state==="no-answer"){if(o=await at(t),!o)return null;let i=Date.now()+Ft;for(;r.state==="no-answer"&&Date.now()<i;)await new Promise(a=>setTimeout(a,Ht)),r=await st(t,n)}return r.state==="resolved"?r.bundle:r.state==="no-answer"||!o&&!await at(t)?null:{bundleUrl:`${t}${me}`,port:n,framework:"metro"}}async function jt(e,n){try{if(k(new URL(e).hostname)){let t=await ct(n);if(t)return t}}catch{}return ut(e,n)}async function Wt(e){let n=await ct(e);return n||((await Promise.all(Ne.map(r=>ut(Fe("http:",r,e),e)))).find(r=>r!==null)??null)}async function dt(e){let n=e.trim();if(/^\d+$/.test(n)){let s=parseInt(n,10),l=await Wt(s);if(l)return l;throw it(`localhost:${s}`)}let t=n.startsWith("http")?n:`http://${n}`,r;try{r=new URL(t)}catch{throw new Error(`could not parse "${e}". pass a dev-server port, a dev-server base URL, or a full bundle URL.`)}let o=r.protocol||"http:",i=r.port?parseInt(r.port,10):At(o),a=Bt(o,r.hostname,i);if(Lt(r)){let s=await jt(a,i);if(s)return s;throw it(a)}return{bundleUrl:r.toString(),port:i,framework:"unknown"}}var qt=12e4,ft=100,Vt=5e3,gt=1e4,Gt={rn:"/rn",connectrn:"/rn","connect-rn":"/rn",clock:"/app/clock","native-ui":"/app/native-ui",tamagui:"/app/tamagui",settings:"/app/settings",photos:"/app/photos",camera:"/app/camera"};function $(e){return new Promise(n=>setTimeout(n,e))}function ht(e){let n=process.env[e]?.trim();if(!n)return null;let t=Number(n);return Number.isInteger(t)&&t>0?t:null}function zt(){let e=ht("SOOTSIM_DRIVER_CONNECT_TIMEOUT_MS")??ht("SOOTSIM_PW_CONNECT_TIMEOUT_MS")??qt;return{timeoutMs:e,hostTimeoutMs:e+Vt,intervalMs:ft,attempts:Math.max(1,Math.ceil(e/ft))}}function wt(e){return e==="electron"||e==="playwright"}function he(e,n){return n==="playwright"?e.meta?.sootsimHostDriver==="playwright":e.userAgent?.includes("Electron/")===!0}function Jt(e,n){return e.includes("--headless")?!0:e.includes("--headed")?!1:n==="playwright"&&process.platform==="linux"&&!process.env.DISPLAY&&!process.env.WAYLAND_DISPLAY?(console.error(" no display detected \u2192 running playwright headless (override with --headed)"),!0):!1}function J(e){return e.trim()}async function Qt(e,n=!1){let t=ae();bt(e,n,t);let r=ce(e);if((n||r!==null)&&await we(e,250))return e;if(t&&O(t)&&await we(t.bridgePort,500))return t.bridgePort;if(t&&O(t))throw new Error(`rnx bridge lockfile is fresh (port ${t.bridgePort}) but the bridge is not reachable. run \`rnx daemon restart\` or \`rnx daemon uninstall\`.`);await Yt();let o=Xt(["serve","--quiet","--port",String(e)]),i=null;o.once("exit",(s,l)=>{i=String(s??l??"unknown")}),o.unref();let a=Date.now()+gt;for(;Date.now()<a;){let s=ae();if(bt(e,n,s),s&&O(s)&&await we(s.bridgePort,250))return console.error(` Started a local bridge on port ${s.bridgePort}. Run \`rnx daemon install\` to keep it ready between commands.`),s.bridgePort;if(i)throw new Error(`rnx bridge exited before becoming ready (exit ${i})`);await $(150)}throw new Error(`rnx bridge did not start within ${Math.round(gt/1e3)}s`)}function bt(e,n,t){if(!(!n||!t||!O(t)||t.bridgePort===e))throw new Error(`${oe.commandName} open: requested bridge port ${e}, but the active daemon owns port ${t.bridgePort}. explicit --port never selects another bridge; stop that daemon or use an isolated SOOTSIM_HOME.`)}async function Yt(){let e=se();if(e&&_.existsSync(ie(e)))return;console.error(" installing rnx engine runtime...");let{runRuntime:n}=await import("./runtime-ZAH42MO5.js");await n(["install"],{})}function Xt(e){let n=process.argv[1];return n&&_.existsSync(n)?mt(process.execPath,[n,...e],{detached:!0,stdio:"ignore",env:process.env}):mt(oe.commandName,e,{detached:!0,stdio:"ignore",env:process.env})}function we(e,n){return new Promise(t=>{let r=new ge(`ws://127.0.0.1:${e}`,{handshakeTimeout:n}),o=!1,i=a=>{o||(o=!0,r.readyState===ge.OPEN?r.close():r.readyState===ge.CONNECTING&&r.terminate(),t(a))};r.once("open",()=>i(!0)),r.on("error",()=>i(!1)),setTimeout(()=>i(!1),n)})}function ve(e){try{let n=new URL(e),t=n.pathname.replace(/\/+$/,"")||"/";return n.searchParams.has("open")||n.searchParams.has("port")||n.searchParams.has("bundle")||n.searchParams.has("demo")||n.pathname.includes("/sootsim/index.html")||t==="/sootsim"||n.pathname==="/__soot"||n.pathname==="/__soot/"||t==="/rn"||/^\/rn\/[^/]+$/i.test(t)||/^\/app\/[^/]+$/i.test(t)||t==="/__soot/rn"||/^\/__soot\/rn\/[^/]+$/i.test(t)||/^\/__soot\/app\/[^/]+$/i.test(t)}catch{return!1}}function Zt(e){try{let n=new URL(e,"http://sootsim.local");if(n.origin!=="http://sootsim.local")return!1;let t=n.pathname.replace(/\/+$/,"")||"/";return t==="/rn"||/^\/rn\/[^/]+$/i.test(t)||/^\/app\/[^/]+$/i.test(t)||t==="/__soot/rn"||/^\/__soot\/rn\/[^/]+$/i.test(t)||/^\/__soot\/app\/[^/]+$/i.test(t)}catch{return!1}}function en(e,n){let t=new URL(e,"http://sootsim.local"),r=new URL(n),o=Q(r.pathname),i=t.pathname.startsWith("/__soot/")?t.pathname.slice(7):t.pathname;return r.pathname=`${o}${i}`,r.search=t.search,r.hash=t.hash,r.toString()}function tn(e){try{let n=new URL(e).pathname.replace(/\/+$/,"")||"/";return/^\/preview\/[^/]+$/.test(n)||/^\/build\/.+/.test(n)}catch{return!1}}async function mr(e){let n=J(e);return(await Se(n)).bundleUrl}function nn(e){try{let n=new URL(e.startsWith("http")?e:`http://${e}`),t=n.pathname||"/";if(t!=="/"&&t!==""||n.search||n.hash||!k(n.hostname))return null;let r=n.port?Number(n.port):n.protocol==="https:"?443:80;return Number.isFinite(r)&&r>0?r:null}catch{return null}}async function Se(e){let n=J(e),t=/^\d+$/.test(n)?Number(n):nn(n);if(t&&t>0){let r=await We(t);if(r&&!r.bundleUrlProvisional)return{bundleUrl:r.bundleUrl,port:r.port,framework:r.framework,projectName:r.projectName}}return dt(n)}function Q(e){let n=e.replace(/\/+$/,"")||"/";return n==="/__soot"||n.startsWith("/__soot/")?"/__soot":""}function rn(e,n){let t=J(e),r=new URL(n),o=Q(r.pathname);return r.pathname=`${o}/rn`,r.searchParams.delete("bundle"),r.searchParams.delete("demo"),r.searchParams.delete("app"),r.searchParams.delete("open"),r.searchParams.delete("port"),/^\d+$/.test(t)?r.pathname=`${o}/rn/${t}`:(r.pathname=`${o}/rn`,r.searchParams.set("open",t)),r.toString()}function Pt(e){let n=J(e);return/^\d+$/.test(n)||/^https?:\/\//i.test(n)?!0:/^(localhost|127\.0\.0\.1|\[::1\]|[^/]+\.localhost):\d+(?:\/.*)?$/i.test(n)}async function on(e,n,t={}){let r=t.resolvedBundle??await Se(e),o=new URL(n),i=Q(o.pathname);o.pathname=`${i}/rn`,o.searchParams.delete("open"),o.searchParams.delete("port"),o.searchParams.delete("demo"),o.searchParams.delete("app");let a=t.hot===void 0?r.bundleUrl:je(r.bundleUrl,t.hot);return o.searchParams.set("bundle",a),o.toString()}function sn(e){return e.startsWith("~/")?U.join(Kt.homedir(),e.slice(2)):U.isAbsolute(e)?e:U.resolve(process.cwd(),e)}function an(e){let n={},t={};for(let o=0;o<e.length;o++){if(e[o]==="--replace"){let i=e[o+1];i||(console.error(" rnx open: --replace expects <module>=<file>"),d(1));let a=i.indexOf("=");(a<=0||a===i.length-1)&&(console.error(" rnx open: --replace expects <module>=<file>"),d(1));let s=i.slice(0,a).trim(),l=sn(i.slice(a+1).trim());_.existsSync(l)||(console.error(` rnx open: replacement file not found: ${l}`),d(1)),n[s]={file:l},o++;continue}if(e[o]==="--remap"){let i=e[o+1],a=i?i.indexOf("="):-1;(!i||a<=0||a===i.length-1)&&(console.error(" rnx open: --remap expects <host:port>=<host:port>"),d(1)),t[i.slice(0,a).trim()]=i.slice(a+1).trim(),o++;continue}}let r={};return Object.keys(n).length>0&&(r.modules=n),Object.keys(t).length>0&&(r.network={remap:t}),r.modules||r.network?r:void 0}async function ln(e){if(!e)return null;let n=await Ye(e.bundleUrl);return n?ze(n):null}async function cn(e){if(_.existsSync(U.join(ie(e),"index.html")))return;console.error(` installing configured engine runtime ${e}...`);let n=await _e.install({version:e,setActive:!1,protectVersions:Te()});console.error(` installed engine runtime ${n.version}`)}function un(e,n){let t=n??(fe()?void 0:se()??void 0);if(!t)return e;let r=new URL(e);if(!k(r.hostname)){if(!n)return e;throw new Error(`runtimeVersion ${t} requires a local rnx host; got ${r.origin}`)}return r.hostname=Ge(t),r.toString()}function It(){return De().shellBaseUrl}function dn(e){return ce(e)?.shellBaseUrl??Oe(e)??It()}async function mn(e,n){try{let t=new URL(e),r=t.searchParams.get("bundle")||"";if(!r||!n)return e;let o=Qe({bundleUrl:r,projectDir:n.appDir});if(o.length===0)return e;let i=await pn(o);return i.length===0?e:(t.searchParams.set("appFonts",Xe(i)),t.toString())}catch{return e}}async function pn(e){let n=await Promise.all(e.map(async r=>{let o=new AbortController,i=setTimeout(()=>o.abort(),1500);try{let a=await fetch(r.url,{method:"HEAD",signal:o.signal});return a.status>=200&&a.status<400?r:null}catch{return null}finally{clearTimeout(i)}})),t=[];for(let r of n)r!==null&&t.push(r);return t}async function fn(e,n,t={}){if(!e)return new URL(n).toString();if(ve(e))return new URL(e).toString();if(Zt(e))return en(e,n);let r=Gt[e.toLowerCase()];if(r){let o=new URL(n),i=Q(o.pathname);return o.pathname=`${i}${r}`,o.toString()}return Pt(e)?on(e,n,t):rn(e,n)}async function gn(e,n){try{let t=new URL(e),r=t.searchParams.get("bundle")||"";if(!r||!n)return e;let o=Ze({bundleUrl:r,projectDir:n.appDir});return!o||o.imageUrl&&!await hn(o.imageUrl)?e:(t.searchParams.set("appSplash",et(o)),t.toString())}catch{return e}}async function hn(e){let n=new AbortController,t=setTimeout(()=>n.abort(),1500);try{let r=await fetch(e,{method:"HEAD",signal:n.signal});return r.status>=200&&r.status<400}catch{return!1}finally{clearTimeout(t)}}async function z(e,n=It(),t={}){let r=await fn(e,n,t),o=await gn(await mn(r,t.project),t.project);if(!t.device)return o;let i=new URL(o);return i.searchParams.set("device",t.device),i.toString()}function vt(e,n){let t=e?.url||e?.origin||n;try{let r=new URL(t);return r.searchParams.delete("bundle"),r.searchParams.delete("demo"),r.searchParams.delete("app"),r.searchParams.delete("open"),r.searchParams.delete("port"),r.searchParams.delete("inspectOpen"),r.searchParams.delete("appFonts"),r.searchParams.delete("appSplash"),r.toString()}catch{return n}}async function wn(e,n,t,r={}){let o=new URL(await z(e,n,r));return o.searchParams.set("inspectOpen",t),o.toString()}async function bn(e,n,t,r={}){let o=r.attempts??30,i=r.intervalMs??500,a=r.minNodeCount??10;for(let s=0;s<o;s++){let l=I(e,{commandTimeoutMs:n,simId:t,simIdSource:"flag"});try{let c=await l.send({type:"evaluate",code:"(async () => (await window.__sootsimTest?.getNodeCount()) || 0)()"});if(typeof c=="number"&&c>a)return{bridge:l,count:c}}catch{}l.close(),await $(i)}return null}function vn(e){if(!e)return null;try{let n=new URL(e);if(n.searchParams.has("bundle")){let t=n.searchParams.get("bundle")||"";try{let r=new URL(t),o=r.pathname.length>36?`...${r.pathname.slice(-36)}`:r.pathname;return`bundle ${r.host}${o}`}catch{return"bundle"}}return n.searchParams.has("port")?`connect :${n.searchParams.get("port")||""}`:n.searchParams.has("open")?`connect ${n.searchParams.get("open")||""}`:n.searchParams.has("demo")?`demo ${n.searchParams.get("demo")||"default"}`:n.pathname.includes("/sootsim/index.html")||n.pathname==="/sootsim/"||n.pathname==="/sootsim"?"embedded rnx":null}catch{return null}}function yn(e){let n=e.indexOf(":");if(n<=0)return e.length>24?`${e.slice(0,21)}\u2026`:e;let t=e.slice(0,n),r=e.slice(n+1),o=r.length>12?`${r.slice(0,8)}\u2026`:r;return t==="TM_SESSION"||t==="CLAUDE_CODE_SESSION_ID"||t==="CODEX_THREAD_ID"?`agent ${o}`:`${t} ${o}`}function pr(e,n){if(e.length===0){console.log(" no sims connected");return}console.log(` connected sims (${e.length}):
5
5
  `);for(let t of e){let r=t.lockedBy&&t.lockExpiresAt?`locked by ${yn(t.lockedBy)} (${Math.max(0,Math.round((t.lockExpiresAt-Date.now())/1e3))}s)`:"",o=[t.isPrimary?"primary":"",t.id===n?"selected":"",t.readyState,t.userVisible===!1?"hidden":t.userVisible===!0?"visible":"",t.attachedCliCount&&t.attachedCliCount>0?"in use":"",t.userFocused?"focused":"",r].filter(Boolean);console.log(` ${t.id}${o.length?` [${o.join(", ")}]`:""}`);let i=vn(t.url);if(i)console.log(` loaded: ${i}`);else if(t.url){let s=t.url.length>96?`${t.url.slice(0,93)}\u2026`:t.url;console.log(` url: ${s}`)}else t.origin&&console.log(` origin: ${t.origin}`);let a=Sn(t);a&&console.log(` engine: ${a}`),t.title&&console.log(` title: ${t.title}`),t.visibilityState&&t.visibilityState!=="visible"&&console.log(` visibility: ${t.visibilityState}`),console.log(` connected: ${yt(Date.now()-t.connectedAt)}`),t.lastActiveAt&&t.lastActiveAt>0&&console.log(` last active: ${yt(Date.now()-t.lastActiveAt)}`)}}function Sn(e){let n=e.url||e.origin||"";if(!n)return null;try{let t=new URL(n).port;return t==="5173"?"dev \u2014 local source (:5173)":t==="3000"?"Contrast app embedded (:3000)":fe()?`dev \u2014 local build (:${t||"?"})`:`runtime \u2014 published engine (:${t||"?"})`}catch{return null}}function yt(e){let n=Math.max(0,Math.round(e/1e3));return n<60?`${n}s ago`:n<3600?`${Math.round(n/60)}m ago`:n<86400?`${Math.round(n/3600)}h ago`:`${Math.round(n/86400)}d ago`}async function fr(e,n,t,r={}){let o=r.attempts??30,i=r.intervalMs??500;for(let a=0;a<o;a++){let s=I(e,{commandTimeoutMs:n});try{let c=(await s.listSims()).find(t);if(c)return c}catch{}finally{s.close()}await $(i)}return null}async function $n(e,n,t,r,o={}){let i=o.attempts??30,a=o.intervalMs??500,s=!!r&&Number.isInteger(r)&&r>1,l=()=>s&&r!==void 0&&!ye(r);for(let c=0;c<i;c++){if(l())return{kind:"host-exit"};let m=I(e,{commandTimeoutMs:n});try{let h=(await m.listSims()).find(t);if(h)return l()?{kind:"host-exit"}:{kind:"match",sim:h}}catch{}finally{m.close()}if(l())return{kind:"host-exit"};await $(a)}return{kind:"timeout"}}async function xn(e,n,t,r={}){let o=r.attempts??20,i=r.intervalMs??250;for(let a=0;a<o;a++){let s=I(e,{commandTimeoutMs:n});try{let c=(await s.listSims()).find(m=>m.id===t);if(!c||c.readyState!=="open")return!0}catch{return!0}finally{s.close()}await $(i)}return!1}function Pn(e){let n=e.meta;if(!n||n.sootsimHostDriver!=="playwright")return null;let t=Number(n.sootsimHostPid);return!Number.isInteger(t)||t<=1||t===process.pid?null:t}function In(e){if(!e.connectAckFile)return!1;try{return _.writeFileSync(e.connectAckFile,`${JSON.stringify({connectedAt:Date.now(),pid:e.pid??null})}
6
6
  `,{flag:"w"}),!0}catch{return!1}}function St(e){if(e.diagnosticLogPath)try{let n=_.readFileSync(e.diagnosticLogPath,"utf8").trim();if(!n){console.error(` ${U.basename(e.diagnosticLogPath)} was empty`);return}let t=n.length>4e3?`\u2026
7
7
  ${n.slice(-4e3)}`:n;console.error(` ${U.basename(e.diagnosticLogPath)}:`),console.error(t)}catch(n){let t=n instanceof Error?n.message:String(n);console.error(` failed to read ${U.basename(e.diagnosticLogPath)}: ${t}`)}}function ye(e){try{return process.kill(e,0),!0}catch(n){return n?.code==="EPERM"}}async function kn(e,n=2500){let t=Date.now()+n;for(;Date.now()<t;){if(!ye(e))return!0;await $(100)}return!ye(e)}function Cn(e){let n=pt("ps",["-o","command=","-p",String(e)],{encoding:"utf8",stdio:["ignore","pipe","pipe"]}),t=pt("ps",["eww","-o","command=","-p",String(e)],{encoding:"utf8",stdio:["ignore","pipe","pipe"]});if(n.status!==0||t.status!==0)return!1;let r=(n.stdout||"").trimEnd(),o=(t.stdout||"").trimEnd();return(o.startsWith(r)?o.slice(r.length):o).includes("SOOTSIM_PW_URL=")}async function be(e,n){let t=new Set(n),r=new Set;for(let o of e){if(!t.has(o.id))continue;let i=Pn(o);i&&r.add(i)}for(let o of r){if(!Cn(o)){console.log(` skipped pid ${o}: not a rnx playwright host (stale sim record)`);continue}try{process.kill(o,"SIGTERM")}catch{}if(await kn(o)){console.log(` closed playwright host process ${o}`);continue}try{process.kill(o,"SIGKILL"),console.log(` force-closed playwright host process ${o}`)}catch{}}}function Y(e,n){if(n){let o=n.trim(),i=e.find(a=>a.id===o);if(!i)throw new Error(`no sim connected with id ${o}`);return i}let t=e.find(o=>o.isPrimary&&o.readyState==="open");if(t)return t;let r=e.find(o=>o.readyState==="open");if(r)return r;throw new Error("no sim connected")}function $t(e,n,t,r=!1){let[o,i]=[e,n.url].map(a=>{if(!a)return a;try{let s=new URL(a);if(s.searchParams.has("sootsimConfig"))return s.searchParams.set("sootsimConfig","[redacted]"),s.toString()}catch{}return a});if(r){console.log(` Opened ConnectRN [${t}]`);return}console.log(` ${t==="current sim"?"loaded":"opened"}: ${o} [${t}]`),console.log(` current sim: ${n.id}`),console.log(JSON.stringify({simId:n.id,url:i},null,2))}async function xt(e,n,t){if(t.includes("--no-describe"))return;let r=process.env.SOOTSIM_QUIET_TARGET_NOTICE;process.env.SOOTSIM_QUIET_TARGET_NOTICE="1";try{await Un(e,n,{stableMs:150,maxMs:400});let o=I(e,{commandTimeoutMs:3e3,simId:n,cliLabel:"open --describe",simIdSource:"flag"});try{let i=null;try{i=await nt(o,1)}catch{}if(i&&!i.ready){let s=i.loadingText?`still showing "${i.loadingText}"`:i.flag!==!0?"guest ready event has not fired":i.targets<=0?"no visible app content is inspectable yet":"app tree is still stabilizing";console.log(` app still loading: ${s} (nodes: ${i.nodes}, targets: ${i.targets})`),console.log(" before interacting, run: rnx wait ready --max-ms 120000")}let a=await tt(o,{describe:!0,verbose:!1,filter:"",compact:!0,hideXy:!1,maxDepth:12});if(!a?.tree)return;console.log(""),console.log(a.tree)}finally{o.close()}}catch{}finally{r===void 0?delete process.env.SOOTSIM_QUIET_TARGET_NOTICE:process.env.SOOTSIM_QUIET_TARGET_NOTICE=r}}async function Un(e,n,t){let r=Date.now()+t.maxMs,o="(async () => (await window.__sootsimTest?.getNodeCount?.()) || 0)()",i=I(e,{commandTimeoutMs:2e3,simId:n,simIdSource:"flag"});try{let a=-1,s=0;for(;Date.now()<r;){let l=-1;try{let c=await i.send({type:"evaluate",code:o});typeof c=="number"&&(l=c)}catch{}if(l>=0&&l===a){if(Date.now()-s>=t.stableMs)return}else a=l,s=Date.now();await $(50)}}finally{i.close()}}async function Rn(e,n={}){let t=T(e,{port:n.port,commandTimeoutMs:n.timeoutMs});t.positional.length!==1&&(console.error(" rnx open: expected exactly one <url-or-route>"),console.error(" examples: rnx open /settings | rnx open myapp://settings"),d(1));let r=E(t),o=t.simId?` --sim ${t.simId}`:"";try{let i=await qe(r,t.positional[0]??"");console.log(` opened deep link: ${i}`)}catch(i){console.error(` link failed: ${i instanceof Error?i.message:String(i)}`),await L(r,{errorsCommand:`rnx get errors 5${o}`,warningsCommand:`rnx get warnings 5${o}`,requestsCommand:`rnx get requests 5${o}`}),d(1)}finally{r.close()}}async function gr(e,n={}){let t=T(e,{port:n.port,commandTimeoutMs:n.timeoutMs,stripBooleanFlags:["--new","--headless","--headed","--ephemeral","--hot","--no-hmr","--no-describe","--quiet"],stripValueFlags:["--base-url","--replace","--driver","--profile","--cdp-port","--device","--viewport"]}),r=e.find((f,p)=>e[p-1]==="--profile"),o=e.includes("--quiet"),i=e.includes("--ephemeral"),a=e.find((f,p)=>e[p-1]==="--cdp-port"),s=a?Number(a):void 0;a&&(!Number.isFinite(s)||s<=0)&&(console.error(` rnx open: --cdp-port must be a positive port number, got "${a}"`),d(1)),r&&i&&(console.error(" rnx open: --profile cannot be combined with --ephemeral"),d(1));let l=r?Ve(r).id:void 0,c=e.includes("--new")||!!l||i,m=an(e);c&&t.simIdSource==="flag"&&(console.error(" rnx open: --new, --profile, and --ephemeral cannot be combined with --sim"),d(1));let u=t.positional[0]||"";if(Ke(u)){c&&(console.error(" rnx open: deep links target the current app; remove --new, --profile, or --ephemeral"),d(1)),await Rn(e,n);return}if(tn(u)){let f=(()=>{try{return k(new URL(u).hostname)}catch{return!1}})();console.log(" that\u2019s an rnx preview/build link \u2014 a full player page, not a driveable sim."),console.log(" opening it in your browser for viewing\u2026");try{await ot(u,{background:!1})}catch(p){console.error(` could not launch a browser: ${p instanceof Error?p.message:String(p)}`),console.error(` open it yourself: ${u}`),d(1)}console.log(f?" to drive it under the CLI, point `rnx open` at the app\u2019s dev port instead (e.g. `rnx open 8081`).":" the CLI can\u2019t drive a remote preview (the engine only attaches to the local bridge from localhost). to drive the app, run it locally and `rnx open <port>`.");return}let h=Pt(u)?await Se(u):void 0,N=await ln(h),X=await Je(N),F=X?.runtimeVersion,H=de(de(X?{...X,runtimeVersion:void 0}:void 0,n.runtimeConfig),m);F&&await cn(F);let Z=e.find((f,p)=>e[p-1]==="--base-url");if(Z&&!t.explicitPort){let f=ue(Z);f&&(t.wsPort=f)}t.wsPort=await Qt(t.wsPort,t.explicitPort);let M=e.find((f,p)=>e[p-1]==="--driver")||"";M&&!wt(M)&&(console.error(` unknown driver "${M}" \u2014 run \`rnx list --drivers\``),d(1));let v=wt(M)?M:process.env.CI==="1"||process.env.CI==="true"||process.env.GITHUB_ACTIONS==="true"||Ee()||!process.stdin.isTTY?"playwright":Re()||"playwright",Ct=Jt(e,v);s&&v!=="playwright"&&(console.error(" rnx open: --cdp-port is only honored by the playwright driver"),d(1));let $e=e.includes("--hot"),xe=e.includes("--no-hmr");$e&&xe&&(console.error(" rnx open: --hot and --no-hmr cannot be combined"),d(1));let Ut=$e?!0:xe?!1:v!=="playwright",C=e.find((f,p)=>e[p-1]==="--device");C&&!(C in le)&&(console.error(` rnx open: unknown device "${C}"`),console.error(` known devices: ${Me().join(", ")}`),d(1));let ee=C?le[C]:void 0,j=e.find((f,p)=>e[p-1]==="--viewport"),W=j?/^(\d+)x(\d+)$/.exec(j):null;j&&!W&&(console.error(` rnx open: --viewport must be <width>x<height>, got "${j}"`),d(1));let Rt=W?{width:Number(W[1]),height:Number(W[2])}:void 0,K={hot:Ut,device:C,resolvedBundle:h,project:N},Tt=F?`http://localhost:${t.wsPort}/`:Z||dn(t.wsPort),x=un(Tt,F),Pe=e.includes("--base-url");Ae(t.wsPort,x);let Et=B();if(!c){let f=E(t),p=t.simId?` --sim ${t.simId}`:"",re=!1;try{let g=null,V=null;try{let w=await f.listSims();if(t.simIdSource==="saved")g=w.find(b=>b.id===Et&&b.readyState==="open"&&he(b,v))??null,g||D();else if(t.simIdSource==="flag"&&(g=Y(w,t.simId),!he(g,v)))throw new Error(`sim ${g.id} is not managed by the ${v} driver`);if(!g&&t.simIdSource!=="flag"){V=await z(u,A(x,H),K);let b=new URL(V);b.searchParams.delete("inspectOpen"),g=w.find(S=>{if(S.readyState!=="open"||!S.url||!he(S,v))return!1;try{let Ue=new URL(S.url);return Ue.searchParams.delete("inspectOpen"),Ue.toString()===b.toString()}catch{return!1}})??null}if(!g)if(t.simIdSource!=="flag")re=!0;else throw new Error("no sim connected");if(!re&&g){let b=Pe||ve(u)?x:vt(g,x),S=V??await z(u,A(b,H),K);f.send({type:"evaluate",simId:g.id,code:`window.location.href = ${JSON.stringify(S)}`}).catch(()=>{})}}catch(w){console.error(` open failed: ${w instanceof Error?w.message:String(w)}`),await L(f,{errorsCommand:`rnx get errors 5${p}`,warningsCommand:`rnx get warnings 5${p}`,requestsCommand:`rnx get requests 5${p}`}),d(1)}if(!re&&g){await $(1500);let w=await bn(t.wsPort,t.commandTimeoutMs,g.id);w||(console.error(" timed out waiting for current sim to load target"),d(1)),w.bridge.close(),P(g.id);let b=Pe||ve(u)?x:vt(g,x),S=V??await z(u,A(b,H),K);return $t(S,{...g,url:S},"current sim",o),await xt(t.wsPort,g.id,e),t.wsPort}}finally{f.close()}}let _t=A(x,H),Ie=`cli-${Date.now().toString(36)}-${Math.random().toString(36).slice(2,8)}`,ke=await wn(u,_t,Ie,K),Ce=Be();Ce||(console.error(" could not resolve a stable owning process; refusing unsupervised sim host"),d(1));let Mt=f=>f.url?.includes(`inspectOpen=${Ie}`)??!1,R=rt(v);R||(console.error(` unknown driver "${v}" \u2014 run \`rnx list --drivers\``),d(1));let q=zt(),y=await R.launch({url:ke,bridgePort:ue(x)??t.wsPort,headless:Ct,profileId:l,ephemeralProfile:i,cdpPort:s,device:C,ownerPid:Ce,viewport:Rt??(ee?{width:ee.width+120,height:ee.height+60}:void 0),connectTimeoutMs:q.hostTimeoutMs});y.launched||(console.error(` ${R.name} driver: ${y.message}`),d(1));let te=await $n(t.wsPort,t.commandTimeoutMs,Mt,y.pid,{attempts:q.attempts,intervalMs:q.intervalMs});if(te.kind==="host-exit"&&(St(y),console.error(` ${R.name} host crashed \u2014 sim is no longer attached`),d(1)),te.kind==="timeout"){if(y.pid)try{process.kill(y.pid,"SIGTERM"),console.error(` closed ${R.name} host process ${y.pid}`)}catch{}St(y),console.error(` timed out after ${q.timeoutMs}ms waiting for opened sim to connect`),d(1)}let ne=te.sim;return P(ne.id),In(y),$t(ke,ne,`${R.name} driver`,o),await xt(t.wsPort,ne.id,e),t.wsPort}async function kt(e,n={}){let t=T(e,{port:n.port,commandTimeoutMs:n.timeoutMs,stripBooleanFlags:["--force"]}),r=e.includes("--force"),o=E(t),i=t.simId?` --sim ${t.simId}`:"";try{try{let a=await o.listSims(),s=Y(a,t.positional[0]||t.simId);if(s.lockedBy&&s.lockExpiresAt&&s.lockExpiresAt>Date.now()){let l=Math.max(0,Math.round((s.lockExpiresAt-Date.now())/1e3));s.lockedByKind==="user-active"&&(console.error(` refused: ${s.id} is locked by the active user (${l}s) \u2014 that's a live human tab`),console.error(" run `rnx open --new` for a fresh investigation sim"),d(1)),r||(console.error(` refused: ${s.id} is leased by ${s.lockedBy} (${l}s)`),console.error(` \`sootsim use ${s.id} --force\` to take it, or \`rnx open --new\` for a fresh sim`),d(1))}await o.focusSim(s.id),P(s.id),console.log(` using: ${s.id}`)}catch(a){G(a),console.error(` use failed: ${a instanceof Error?a.message:String(a)}`),await L(o,{errorsCommand:`rnx get errors 5${i}`,warningsCommand:`rnx get warnings 5${i}`,requestsCommand:`rnx get requests 5${i}`}),d(1)}}finally{o.close()}}async function hr(e,n={}){await kt(e,n)}async function wr(e,n={}){await kt(e,n)}async function br(e,n={}){let t=T(e,{port:n.port,commandTimeoutMs:n.timeoutMs,stripBooleanFlags:["--force"]}),r=e.includes("--force"),o=E(t);try{try{let i=await o.listSims(),a=Y(i,t.positional[0]||t.simId),s=r&&a.lockedBy&&a.lockedByKind!=="user-active"?a.lockedBy:null,l=await o.claim(a.id,{force:r});P(a.id);let c=Math.max(0,Math.round((l.lockExpiresAt-Date.now())/1e3)),m=l.bootedCount>0?` (booted ${l.bootedCount})`:"";console.log(` claimed: ${l.simId} [${c}s]${m}`),s&&console.log(` took over from: ${s}`)}catch(i){if(i instanceof Le){let a=Math.max(0,Math.round(i.lock.expiresInMs/1e3));console.error(` claim failed: locked by ${i.lock.by} for ${a}s more`),console.error(" use --force to take it, or `rnx open --new` for a fresh sim"),d(1)}console.error(` claim failed: ${i instanceof Error?i.message:String(i)}`),d(1)}}finally{o.close()}}async function Tn(e,n,t,r){if(r.length===0)return{closed:[],remaining:[]};await Promise.all(r.map(i=>e.closeSim(i).catch(()=>{})));let o=new Set(r);for(let i=0;i<40;i++){let a=[];try{let s=I(n,{commandTimeoutMs:t});try{a=(await s.listSims()).filter(c=>o.has(c.id)&&c.readyState==="open").map(c=>c.id)}finally{s.close()}}catch{a=[]}if(a.length===0)return{closed:[...o],remaining:[]};if(i===39)return{closed:[...o].filter(s=>!a.includes(s)),remaining:a};await $(250)}return{closed:[...o],remaining:[]}}function En(e,n){let t=e.filter(u=>u.readyState==="open"),r=t.map(u=>u.id),o=n.explicitKeepId?.trim()||"",i=n.savedKeepId?.trim()||"",a=i?t.some(u=>u.id===i):!1,s=i&&!a?i:null,l=null,c=null,m=null;if(n.closeOthers)if(o){let u=t.find(h=>h.id===o);u?l=u.id:c=o}else if(i&&a)l=i;else{let u=t.find(h=>h.isPrimary)??t[0]??null;u&&(l=u.id,i&&!a&&(m=u.id))}return{openIds:r,keepId:l,targets:c?[]:r.filter(u=>u!==l),staleSavedId:s,missingExplicitKeepId:c,fallbackKeepId:m}}async function vr(e,n={}){let t=T(e,{port:n.port,commandTimeoutMs:n.timeoutMs,stripBooleanFlags:["--all","--others"]}),r=E(t),o=t.simId?` --sim ${t.simId}`:"",i=e.includes("--all"),a=e.includes("--others");if(i||a){try{let s=await r.listSims(),l=B(),c=t.positional[0]||(t.simIdSource==="flag"?t.simId:void 0),m=En(s,{closeOthers:a,explicitKeepId:c,savedKeepId:l});if(m.staleSavedId&&D(),m.fallbackKeepId&&(P(m.fallbackKeepId),console.log(` saved sim ${m.staleSavedId} is gone \u2014 keeping primary ${m.fallbackKeepId}`)),m.missingExplicitKeepId&&(console.error(` close failed: keep sim ${m.missingExplicitKeepId} is not connected; not closing other sims`),d(1)),m.targets.length===0){console.log(m.keepId?` nothing to close \u2014 only the kept sim ${m.keepId} is connected`:m.staleSavedId?` nothing to close \u2014 no sims connected (cleared stale current sim ${m.staleSavedId})`:" nothing to close \u2014 no sims connected");return}let u=await Tn(r,t.wsPort,t.commandTimeoutMs,m.targets);await be(s,m.targets);let h=B();h&&u.closed.includes(h)&&(m.keepId?P(m.keepId):D());let N=` closed ${u.closed.length} sim(s)${m.keepId?` (kept ${m.keepId})`:""}`;console.log(N),u.remaining.length>0&&(console.error(` close failed: still connected: ${u.remaining.join(", ")}`),d(1))}catch(s){G(s),console.error(` close failed: ${s instanceof Error?s.message:String(s)}`),d(1)}finally{r.close()}return}try{try{let s=await r.listSims(),l=Y(s,t.positional[0]||t.simId),c=s.find(u=>u.id!==l.id&&u.readyState==="open");await r.closeSim(l.id),await xn(t.wsPort,t.commandTimeoutMs,l.id)||(await be(s,[l.id]),console.error(` close failed: ${l.id} is still connected`),d(1)),await be(s,[l.id]),B()===l.id&&(c?P(c.id):D()),console.log(` closed: ${l.id}`)}catch(s){G(s),console.error(` close failed: ${s instanceof Error?s.message:String(s)}`),await L(r,{errorsCommand:`rnx get errors 5${o}`,warningsCommand:`rnx get warnings 5${o}`,requestsCommand:`rnx get requests 5${o}`}),d(1)}}finally{r.close()}}export{zt as a,Qt as b,mr as c,un as d,It as e,dn as f,z as g,wn as h,vn as i,pr as j,fr as k,$n as l,Pn as m,In as n,be as o,Rn as p,gr as q,hr as r,wr as s,br as t,Tn as u,En as v,vr as w};
@@ -1,5 +1,5 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
4
  function i(t,o,a,c){return{width:3,ringToggle:{side:"left",top:t[0],height:t[1]},volumeUp:{side:"left",top:o[0],height:o[1]},volumeDown:{side:"left",top:a[0],height:a[1]},lock:{side:"right",top:c[0],height:c[1]}}}var N={width:2.5,lock:{side:"right",top:188.7,height:68.1},ringToggle:{side:"left",top:113.2,height:36},volumeUp:{side:"left",top:188.2,height:68.1},volumeDown:{side:"left",top:269,height:68.1}},S={width:3,lock:{side:"right",top:671/2.625,height:163/2.625},ringToggle:{side:"left",top:-1e3,height:0},volumeUp:{side:"right",top:971/2.625,height:165/2.625},volumeDown:{side:"right",top:1136/2.625,height:166/2.625}},O={width:3,lock:{side:"right",top:248,height:72},ringToggle:{side:"left",top:-1e3,height:0},volumeUp:{side:"right",top:144,height:62},volumeDown:{side:"right",top:216,height:62}},s=24,d="17",u=37,R=1080/2.625,D=2400/2.625,p=132/2.625;function r(t){return{top:t,right:t,bottom:t,left:t}}function _(t){let o=(t.frameInsets.top+t.frameInsets.right+t.frameInsets.bottom+t.frameInsets.left)/4,a=Math.max(Math.abs(t.frameInsets.top-o),Math.abs(t.frameInsets.right-o),Math.abs(t.frameInsets.bottom-o),Math.abs(t.frameInsets.left-o));return{frameRadius:t.cornerRadius+o,frameRadiusApproximationError:a,screenRadius:t.cornerRadius}}function H(t){return{..._(t),frameHeight:t.frameInsets.top+t.height+t.frameInsets.bottom,frameWidth:t.frameInsets.left+t.width+t.frameInsets.right,screenBottomInset:t.frameInsets.bottom,screenLeft:t.frameInsets.left,screenRightInset:t.frameInsets.right,screenTop:t.frameInsets.top}}function n(t){return{...t,platform:"ios",navigationBarHeight:0,navigationBarMode:t.homeIndicatorHeight>0?"gesture":"none",displayCutout:{top:t.dynamicIsland?t.statusBarHeight:0,bottom:0,left:0,right:0},cameraCutout:null,osVersion:t.iosVersion,androidApiLevel:null,systemName:"iOS",manufacturer:"Apple",brand:"Apple",modelName:t.name}}var v={"canvas-workspace":n({name:"Canvas Workspace",width:1440,height:900,scale:1,statusBarHeight:0,homeIndicatorHeight:0,cornerRadius:0,continuousCornerRadius:0,frameInsets:r(16),dynamicIsland:null,safeAreaInsets:{top:0,bottom:0,left:0,right:0},iosVersion:"26.4",physicalPPI:110,hardwareButtons:i([185.8,41.7],[258.2,67.6],[344,67.6],[281.5,106.9]),experimental:!0}),"iphone-se":n({name:"iPhone SE",width:375,height:667,scale:2,statusBarHeight:20,homeIndicatorHeight:0,cornerRadius:0,continuousCornerRadius:0,frameInsets:r(28.7),dynamicIsland:null,safeAreaInsets:{top:20,bottom:0,left:0,right:0},iosVersion:"15.8",physicalPPI:326,hardwareButtons:N}),"iphone-14":n({name:"iPhone 14",width:390,height:844,scale:3,statusBarHeight:47,homeIndicatorHeight:34,cornerRadius:46.2,continuousCornerRadius:67.462,frameInsets:r(19.5),dynamicIsland:null,safeAreaInsets:{top:47,bottom:34,left:0,right:0},iosVersion:"17.6",physicalPPI:460,hardwareButtons:i([141.7,29.7],[205.9,69.6],[289.5,69.6],[228.9,114.5])}),"iphone-15":n({name:"iPhone 15",width:393,height:852,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:73.402,frameInsets:r(18.2),dynamicIsland:{width:126,height:37.3,top:14.1},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"17.6",physicalPPI:460,hardwareButtons:i([171.7,32],[235.8,65.3],[320.5,65.3],[280.6,105.2])}),"iphone-15-plus":n({name:"iPhone 15 Plus",width:430,height:932,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:74.654,frameInsets:r(17.3),dynamicIsland:{width:126,height:37.3,top:11.4},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"17.6",physicalPPI:460,hardwareButtons:i([172.1,33],[236.1,66.6],[321.2,66.6],[281,106.8])}),"iphone-15-pro":n({name:"iPhone 15 Pro",width:393,height:852,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:73.402,frameInsets:r(15.3),dynamicIsland:{width:126,height:38,top:13.4},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"18.2",physicalPPI:460,hardwareButtons:i([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-15-pro-max":n({name:"iPhone 15 Pro Max",width:430,height:932,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:74.654,frameInsets:r(15.3),dynamicIsland:{width:126,height:38,top:13.3},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"18.2",physicalPPI:460,hardwareButtons:i([173.3,32.2],[253.4,61.7],[343.3,61.7],[268.5,98.5])}),"iphone-16":n({name:"iPhone 16",width:393,height:852,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:73.402,frameInsets:r(15.3),dynamicIsland:{width:126,height:37.3,top:11},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-16-plus":n({name:"iPhone 16 Plus",width:430,height:932,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:53.9,continuousCornerRadius:74.654,frameInsets:r(15.3),dynamicIsland:{width:126,height:37.3,top:11.4},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([173.3,32.2],[253.4,61.7],[343.3,61.7],[268.5,98.5])}),"iphone-16-pro":n({name:"iPhone 16 Pro",width:402,height:874,scale:3,statusBarHeight:62,homeIndicatorHeight:34,cornerRadius:61,continuousCornerRadius:84.661,frameInsets:r(15.3),dynamicIsland:{width:126,height:38,top:13.5},safeAreaInsets:{top:62,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-16-pro-max":n({name:"iPhone 16 Pro Max",width:440,height:956,scale:3,statusBarHeight:62,homeIndicatorHeight:34,cornerRadius:61.3,continuousCornerRadius:85.163,frameInsets:r(15.4),dynamicIsland:{width:126,height:38,top:14},safeAreaInsets:{top:62,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([178.8,32.2],[266.8,61.8],[352.7,61.8],[292.2,98.3])}),"iphone-17":n({name:"iPhone 17",width:402,height:874,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:61,continuousCornerRadius:84.661,frameInsets:r(15.3),dynamicIsland:{width:126,height:37.3,top:14},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-17-air":n({name:"iPhone Air",width:420,height:912,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:64.6,continuousCornerRadius:88.313,frameInsets:r(10.7),dynamicIsland:{width:126,height:38,top:20},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([178.8,32.2],[266.8,61.8],[352.7,61.8],[292.2,98.3])}),"iphone-17-pro":n({name:"iPhone 17 Pro",width:402,height:874,scale:3,statusBarHeight:59,homeIndicatorHeight:34,cornerRadius:61,continuousCornerRadius:84.661,frameInsets:r(15.3),dynamicIsland:{width:126,height:38,top:14},safeAreaInsets:{top:59,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([159.1,31.5],[220.1,61.9],[299,61.9],[260.8,98.9])}),"iphone-17-pro-max":n({name:"iPhone 17 Pro Max",width:440,height:956,scale:3,statusBarHeight:62,homeIndicatorHeight:34,cornerRadius:61.3,continuousCornerRadius:85.163,frameInsets:r(15.4),dynamicIsland:{width:126,height:38,top:14},safeAreaInsets:{top:62,bottom:34,left:0,right:0},iosVersion:"26.4",physicalPPI:460,hardwareButtons:i([178.8,32.2],[266.8,61.8],[352.7,61.8],[292.2,98.3])}),"pixel-8":{platform:"android",name:"Pixel 8",width:R,height:D,scale:2.625,statusBarHeight:p,homeIndicatorHeight:0,navigationBarHeight:s,navigationBarMode:"gesture",displayCutout:{top:p,bottom:0,left:0,right:0},cornerRadius:39,continuousCornerRadius:39,frameInsets:{top:55/2.625,right:50/2.625,bottom:58/2.625,left:49/2.625},dynamicIsland:null,cameraCutout:{diameter:72.5/2.625},safeAreaInsets:{top:p,bottom:s,left:0,right:0},osVersion:d,iosVersion:"",androidApiLevel:u,systemName:"Android",manufacturer:"Google",brand:"google",modelName:"Pixel 8",physicalPPI:428,hardwareButtons:S},"pixel-8-three-button":{platform:"android",name:"Pixel 8 (3-button)",width:R,height:D,scale:2.625,statusBarHeight:p,homeIndicatorHeight:0,navigationBarHeight:48,navigationBarMode:"three-button",displayCutout:{top:p,bottom:0,left:0,right:0},cornerRadius:39,continuousCornerRadius:39,frameInsets:{top:55/2.625,right:50/2.625,bottom:58/2.625,left:49/2.625},dynamicIsland:null,cameraCutout:{diameter:72.5/2.625},safeAreaInsets:{top:p,bottom:48,left:0,right:0},osVersion:d,iosVersion:"",androidApiLevel:u,systemName:"Android",manufacturer:"Google",brand:"google",modelName:"Pixel 8",physicalPPI:428,hardwareButtons:S},"pixel-9-pro-xl":{platform:"android",name:"Pixel 9 Pro XL",width:448,height:997,scale:3,statusBarHeight:40,homeIndicatorHeight:0,navigationBarHeight:s,navigationBarMode:"gesture",displayCutout:{top:40,bottom:0,left:0,right:0},cornerRadius:41,continuousCornerRadius:41,frameInsets:r(12),dynamicIsland:null,cameraCutout:{diameter:24},safeAreaInsets:{top:40,bottom:s,left:0,right:0},osVersion:d,iosVersion:"",androidApiLevel:u,systemName:"Android",manufacturer:"Google",brand:"google",modelName:"Pixel 9 Pro XL",physicalPPI:486,hardwareButtons:S},"pixel-10":{platform:"android",name:"Pixel 10",width:360,height:808,scale:3,statusBarHeight:40,homeIndicatorHeight:0,navigationBarHeight:s,navigationBarMode:"gesture",displayCutout:{top:40,bottom:0,left:0,right:0},cornerRadius:40,continuousCornerRadius:40,frameInsets:r(18),dynamicIsland:null,cameraCutout:{diameter:26},safeAreaInsets:{top:40,bottom:s,left:0,right:0},osVersion:d,iosVersion:"",androidApiLevel:u,systemName:"Android",manufacturer:"Google",brand:"google",modelName:"Pixel 10",physicalPPI:422,hardwareButtons:S},"galaxy-s24":{platform:"android",name:"Galaxy S24",width:360,height:780,scale:3,statusBarHeight:36,homeIndicatorHeight:0,navigationBarHeight:s,navigationBarMode:"gesture",displayCutout:{top:36,bottom:0,left:0,right:0},cornerRadius:36,continuousCornerRadius:36,frameInsets:r(8),dynamicIsland:null,cameraCutout:{diameter:18},safeAreaInsets:{top:36,bottom:s,left:0,right:0},osVersion:d,iosVersion:"",androidApiLevel:u,systemName:"Android",manufacturer:"Samsung",brand:"samsung",modelName:"SM-S921B",physicalPPI:416,hardwareButtons:O},"galaxy-s24-ultra":{platform:"android",name:"Galaxy S24 Ultra",width:384,height:832,scale:3.75,statusBarHeight:36,homeIndicatorHeight:0,navigationBarHeight:s,navigationBarMode:"gesture",displayCutout:{top:36,bottom:0,left:0,right:0},cornerRadius:24,continuousCornerRadius:24,frameInsets:r(9),dynamicIsland:null,cameraCutout:{diameter:18},safeAreaInsets:{top:36,bottom:s,left:0,right:0},osVersion:d,iosVersion:"",androidApiLevel:u,systemName:"Android",manufacturer:"Samsung",brand:"samsung",modelName:"SM-S928B",physicalPPI:505,hardwareButtons:O}},P="iphone-17-pro",j={ios:P,android:"pixel-10"};function L(t){return v[t]}function A(){return Object.keys(v)}function W(){return A().filter(t=>!v[t].experimental)}function K(t){return L(t).platform}var F="rnx",$=Object.freeze({name:F,packageName:"rnxsim",commandName:"rnx",domain:"rnxsim.com",origin:"https://rnxsim.com"});var k=["off","soft","full"];function B(t){return t==="off"||t==="soft"||t==="full"}var w={"iphone-6-9":{name:"iphone-6-9",label:'iPhone 6.7"',width:1284,height:2778,store:"apple"},"iphone-6-1":{name:"iphone-6-1",label:'iPhone 6.5"',width:1242,height:2688,store:"apple"},"android-phone":{name:"android-phone",label:"Google Play phone",width:1080,height:1920,store:"google"},"android-tablet-7":{name:"android-tablet-7",label:'Google Play 7" tablet',width:1200,height:1920,store:"google"},"android-tablet-10":{name:"android-tablet-10",label:'Google Play 10" tablet',width:1600,height:2560,store:"google"}},I={dark:{type:"gradient",direction:180,glow:"#4caeff",stops:[{offset:0,color:"#111827"},{offset:40,color:"#101725"},{offset:100,color:"#06080d"}]},cyan:{type:"gradient",direction:180,glow:"#25c3ec",stops:[{offset:0,color:"#1b465c"},{offset:32,color:"#122336"},{offset:100,color:"#05070b"}]},gold:{type:"gradient",direction:180,glow:"#ffc25a",stops:[{offset:0,color:"#3b2f1a"},{offset:34,color:"#18140d"},{offset:100,color:"#050505"}]},red:{type:"gradient",direction:180,glow:"#ff6178",stops:[{offset:0,color:"#3e1018"},{offset:35,color:"#17080c"},{offset:100,color:"#050405"}]}},Z={color:"#25c3ec",blur:120,spread:52,opacity:.34},Q="iphone-17-pro";var V=[{name:"white",value:"#ffffff"},{name:"gray-light",value:"#d1d5db"},{name:"gray",value:"#6b7280"},{name:"gray-dark",value:"#3b4350"},{name:"slate",value:"#2a3644"},{name:"black",value:"#000000"},{name:"cyan",value:"#25c3ec"},{name:"blue",value:"#3f7cff"},{name:"teal",value:"#1fc7b4"},{name:"green",value:"#42c95d"},{name:"lime",value:"#92d21b"},{name:"gold",value:"#f5c518"},{name:"orange",value:"#ff912e"},{name:"coral",value:"#ff6f5b"},{name:"red",value:"#ff4f6f"},{name:"berry",value:"#d054ff"},{name:"magenta",value:"#ff4eb8"}],M=Object.fromEntries(V.map(t=>[t.name,t.value]));function J(t){return M[t]??M.gray}function ee(t){return Object.prototype.hasOwnProperty.call(w,t)?w[t]:null}function z(t){return{type:t.type,color:t.color,direction:t.direction,glow:t.glow,stops:t.stops?.map(o=>({...o}))}}function te(t){return Object.prototype.hasOwnProperty.call(I,t)?z(I[t]):null}var G=[.823,.882,.941,1,1.118,1.235,1.353,1.786,2.143,2.643,3.143,3.571];function e(t,o){return Object.freeze({fontSize:t,lineHeight:o})}var re=Object.freeze({xs:Object.freeze({largeTitle:e(31,44.408775),title1:e(25,37.128102),title2:e(19,27.816685),title3:e(17,23.807109),headline:e(14,20.161577),body:e(14,20.161577),callout:e(13,18.942243),subheadline:e(12,16.720313),footnote:e(12,16.986979),caption1:e(11,15.564453),caption2:e(11,16.126953)}),s:Object.freeze({largeTitle:e(32,45.797256),title1:e(26,38.556756),title2:e(20,29.22433),title3:e(18,25.160469),headline:e(15,21.536754),body:e(15,21.536754),callout:e(14,20.326079),subheadline:e(13,18.213672),footnote:e(12,16.986979),caption1:e(11,15.564453),caption2:e(11,16.126953)}),m:Object.freeze({largeTitle:e(33,47.185737),title1:e(27,39.985409),title2:e(21,30.631975),title3:e(19,26.513828),headline:e(16,22.911932),body:e(16,22.911932),callout:e(15,21.709914),subheadline:e(14,19.557031),footnote:e(12,16.986979),caption1:e(11,15.564453),caption2:e(11,16.126953)}),l:Object.freeze({largeTitle:e(34,48.574219),title1:e(28,41.414063),title2:e(22,32.253906),title3:e(20,27.867187),headline:e(17,24.287109),body:e(17,24.287109),callout:e(16,23.09375),subheadline:e(15,20.900391),footnote:e(13,18.513672),caption1:e(12,17.320313),caption2:e(11,16.126953)}),xl:Object.freeze({largeTitle:e(36,51.351181),title1:e(30,44.271369),title2:e(24,35.069196),title3:e(22,30.733906),headline:e(19,27.037464),body:e(19,27.037464),callout:e(18,25.861421),subheadline:e(17,23.587109),footnote:e(15,21.233724),caption1:e(14,20.269531),caption2:e(13,19.667518)}),xxl:Object.freeze({largeTitle:e(38,54.323266),title1:e(32,47.128676),title2:e(26,37.884487),title3:e(24,33.440625),headline:e(21,29.78782),body:e(21,29.78782),callout:e(20,28.629092),subheadline:e(19,26.273828),footnote:e(17,23.953776),caption1:e(16,23.03125),caption2:e(15,22.515775)}),xxxl:Object.freeze({largeTitle:e(40,57.100229),title1:e(34,50.221278),title2:e(28,40.699777),title3:e(26,36.147344),headline:e(23,32.719993),body:e(23,32.719993),callout:e(22,31.58724),subheadline:e(21,28.960547),footnote:e(19,26.673828),caption1:e(18,25.792969),caption2:e(17,25.364032)}),ax1:Object.freeze({largeTitle:e(44,62.654154),title1:e(38,56.171186),title2:e(34,49.359933),title3:e(31,43.074141),headline:e(28,39.595881),body:e(28,39.595881),callout:e(26,37.122582),subheadline:e(25,34.483984),footnote:e(23,32.280599),caption1:e(22,31.316406),caption2:e(20,29.636418)}),ax2:Object.freeze({largeTitle:e(48,68.403201),title1:e(43,63.314453),title2:e(39,56.612444),title3:e(37,51.194297),headline:e(33,46.653587),body:e(33,46.653587),callout:e(32,45.616071),subheadline:e(30,41.200781),footnote:e(27,37.720703),caption1:e(26,37.027344),caption2:e(24,35.332933)}),ax3:Object.freeze({largeTitle:e(52,73.957127),title1:e(48,70.693015),title2:e(44,63.65067),title3:e(43,59.474453),headline:e(40,56.461648),body:e(40,56.461648),callout:e(38,54.109561),subheadline:e(36,49.410937),footnote:e(33,46.047526),caption1:e(32,45.5),caption2:e(29,42.684345)}),ax4:Object.freeze({largeTitle:e(56,79.706174),title1:e(53,77.600988),title2:e(50,72.310826),title3:e(49,67.754609),headline:e(47,65.360618),body:e(47,66.269709),callout:e(44,62.412574),subheadline:e(42,57.621094),footnote:e(38,53.014323),caption1:e(37,52.404297),caption2:e(34,50.035757)}),ax5:Object.freeze({largeTitle:e(60,85.260099),title1:e(58,85.214844),title2:e(56,80.970982),title3:e(55,76.034766),headline:e(53,74.520774),body:e(53,74.520774),callout:e(51,72.2899),subheadline:e(49,67.174609),footnote:e(44,61.174479),caption1:e(43,60.876953),caption2:e(40,58.811298)})});function E(t){return G.some(o=>Object.is(o,t))}var ce=["colorScheme","reduceMotion","boldText","fontSize","largerAccessibilitySizes"],l={deviceModel:{type:"enum",default:P,description:"device model to simulate",cliFlag:"device",cliFlagShort:"d",options:A(),group:"device"},orientation:{type:"enum",default:"portrait",description:"screen orientation",cliFlag:"orientation",options:["portrait","landscape"],group:"device"},colorScheme:{type:"enum",default:"auto",description:"color scheme (auto follows system preference)",cliFlag:"theme",cliFlagShort:"t",options:["light","dark","auto"],group:"appearance"},reduceMotion:{type:"boolean",default:!1,description:"reduce motion",group:"appearance"},boldText:{type:"boolean",default:!1,description:"bold text",group:"appearance"},fontSize:{type:"number",default:1,description:"font size multiplier (1.0 = default)",group:"appearance",validate:t=>t>=.5&&t<=4},largerAccessibilitySizes:{type:"boolean",default:!1,description:"show accessibility categories in the dynamic type size picker",group:"appearance"},networkCondition:{type:"enum",default:"wifi",description:"simulated network condition",cliFlag:"network",options:["wifi","lte","fast-3g","slow-3g","offline"],group:"network"},language:{type:"string",default:"en",description:"language code (ISO 639-1)",cliFlag:"language",group:"locale"},region:{type:"string",default:"US",description:"region code (ISO 3166-1)",cliFlag:"region",group:"locale"},renderDensity:{type:"number",default:0,description:"render density override in device pixels per point for high-resolution capture (0 = destination display capped at device native)",group:"simulator",validate:t=>t===0||t>=1&&t<=9},showTouches:{type:"boolean",default:!1,description:"show touch indicators",group:"simulator"},showFrame:{type:"boolean",default:!0,description:"show device frame",cliFlag:"frame",group:"simulator"},showMenuBar:{type:"boolean",default:!0,description:"keep the menu bar visible instead of revealing it at the top edge",group:"simulator"},showRail:{type:"boolean",default:!0,description:"keep the rail visible instead of revealing it on hover",group:"simulator"},solidWindow:{type:"boolean",default:!1,description:"desktop app: always use the solid, freely-resizable window instead of the device-shaped transparent one (3d mode uses it regardless)",group:"simulator"},ambientGlow:{type:"enum",default:"off",description:"bleed the app's own edge colors outward behind the device, like bias lighting behind a TV (off, soft, full)",options:k,cliFlag:"ambient-glow",group:"simulator"},screenshotMode:{type:"boolean",default:!1,description:"show screenshot composition mode in the browser shell",group:"simulator"},screenshotCanvasEditing:{type:"boolean",default:!1,description:"experimental figma-style slide editing: draggable copy block, drop-in image layers (owner review pending)",group:"simulator"},threeMode:{type:"boolean",default:!1,description:"show the experimental 3d device stage in the browser shell",group:"simulator"},threeRecordingEditor:{type:"boolean",default:!1,description:"dock the 3d recording editor in the 3d stage (toggled from its rail)",group:"simulator"},screenshotCanvas:{type:"enum",default:"iphone-6-9",description:"target app-store canvas preset for screenshot mode",options:Object.keys(w),group:"simulator"},screenshotBackground:{type:"enum",default:"dark",description:"background preset rendered inside the screenshot canvas",options:Object.keys(I),group:"simulator"},screenshotText:{type:"enum",default:"bold-top",description:"text layout preset for the screenshot canvas",options:["bold-top","editorial-left","minimal-bottom","none"],group:"simulator"},screenshotPose:{type:"enum",default:"straight",description:"device pose preset inside the screenshot canvas",options:["straight","tilted-left","tilted-right","cut-bottom","cut-top"],group:"simulator"},screenshotDynamicSize:{type:"boolean",default:!1,description:"let the screenshot canvas rect fit available space (off = pin to exact preset pixels)",group:"simulator"},showStatusBar:{type:"boolean",default:!0,description:"show status bar",group:"simulator"},showHomeIndicator:{type:"boolean",default:!0,description:"show home indicator",group:"simulator"},alwaysShowLiveWebViews:{type:"boolean",default:!1,description:"always render WebViews as live browser views",group:"simulator"},a11yMode:{type:"enum",default:"delayed",description:"accessibility tree sync mode (off, delayed=100ms, active=30ms)",options:["off","delayed","active"],group:"simulator"},a11yDepth:{type:"enum",default:"deep",description:"accessibility tree structure depth (shallow or deep)",options:["shallow","deep"],group:"simulator"},inspectMode:{type:"boolean",default:!1,description:"inspect mode",group:"simulator"},productAnalytics:{type:"boolean",default:!1,description:"send bounded product usage analytics",group:"privacy"},crashReports:{type:"boolean",default:!1,description:"send anonymous crash reports",group:"privacy"},agentProvider:{type:"enum",default:"codex",description:"ai agent used by the sootsim agent prompt bar",options:["codex","claude"],group:"agent"}},de={colorScheme:l.colorScheme.default,reduceMotion:l.reduceMotion.default,boldText:l.boldText.default,fontSize:l.fontSize.default,largerAccessibilitySizes:l.largerAccessibilitySizes.default};function U(){if(typeof window>"u")return{};let t={};try{let o=new URLSearchParams(window.location.search),a=o.get("device");a&&l.deviceModel.options?.includes(a)&&(t.deviceModel=a);let c=o.get("orientation");(c==="portrait"||c==="landscape")&&(t.orientation=c),o.get("ssMode")==="1"&&(t.screenshotMode=!0),o.get("filmStage")==="1"&&(t.threeMode=!0,a||(t.deviceModel="iphone-17-air"));let h=Number(o.get("renderDensity"));Number.isFinite(h)&&h>=1&&h<=9&&(t.renderDensity=h),o.get("ssEdit")==="1"&&(t.screenshotCanvasEditing=!0);let x=o.get("colorScheme")??o.get("theme");x&&l.colorScheme.options?.includes(x)&&(t.colorScheme=x);let m=o.get("reduceMotion");m==="1"||m==="true"?t.reduceMotion=!0:(m==="0"||m==="false")&&(t.reduceMotion=!1);let g=o.get("boldText");g==="1"||g==="true"?t.boldText=!0:(g==="0"||g==="false")&&(t.boldText=!1);let C=Number(o.get("fontSize"));Number.isFinite(C)&&E(C)&&(t.fontSize=C);let f=o.get("largerAccessibilitySizes");f==="1"||f==="true"?t.largerAccessibilitySizes=!0:(f==="0"||f==="false")&&(t.largerAccessibilitySizes=!1);let b=o.get("alwaysShowLiveWebViews");b==="1"||b==="true"?t.alwaysShowLiveWebViews=!0:(b==="0"||b==="false")&&(t.alwaysShowLiveWebViews=!1);let y=o.get("showFrame");y==="1"||y==="true"?t.showFrame=!0:(y==="0"||y==="false")&&(t.showFrame=!1);let T=o.get("ambientGlow");B(T)&&(t.ambientGlow=T)}catch{}return t}function ue(){let t={};for(let[o,a]of Object.entries(l))t[o]=a.default;return Object.assign(t,U()),t}export{H as a,v as b,j as c,L as d,W as e,K as f,Z as g,Q as h,J as i,ee as j,z as k,te as l,ce as m,l as n,de as o,U as p,ue as q};
5
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
5
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1,7 +1,7 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{a as y,c as P}from"./chunk-HDGZAVH3.js";import{a as f,b as S}from"./chunk-EY5OHL2M.js";import{b}from"./chunk-KVVNCIJA.js";import{a as v}from"./chunk-RXKZJAGY.js";function M(){let e=f();return e?{available:!0,reason:null,detail:`${e.kind} @ ${e.path}`}:{available:!1,reason:"rnx desktop app not installed (run `rnx desktop install`)"}}async function A(e){let o=f();if(!o)return{launched:!1,message:"rnx desktop app not installed"};try{let r=await S(e.url,o,{device:e.device,profileId:e.profileId,ephemeralProfile:e.ephemeralProfile,ownerPid:e.ownerPid});return r.launched?{launched:!0,message:e.url?`electron launched via ${r.via} \u2192 ${e.url}`:`electron launched via ${r.via}`,target:r.target,attachUrl:e.url}:{launched:!1,message:"desktop companion failed to start"}}catch(r){return{launched:!1,message:`electron launch failed: ${r instanceof Error?r.message:String(r)}`}}}var k={id:"electron",name:"electron",description:"rnx desktop companion app (native window, menu bar)",kind:"native",availability:M,launch:A};import{spawn as B}from"child_process";import{closeSync as F,mkdtempSync as G,openSync as U,readFileSync as q}from"fs";import{tmpdir as T}from"os";import{join as I}from"path";import{spawnSync as O}from"node:child_process";import{existsSync as _,readFileSync as R}from"node:fs";import{createRequire as L}from"node:module";import{dirname as W,join as N}from"node:path";var $=`
4
+ import{a as y,c as P}from"./chunk-AQBARY5L.js";import{a as f,b as S}from"./chunk-YPJJDEFE.js";import{b}from"./chunk-TIPRUSQQ.js";import{a as v}from"./chunk-4NBB7L3M.js";function M(){let e=f();return e?{available:!0,reason:null,detail:`${e.kind} @ ${e.path}`}:{available:!1,reason:"rnx desktop app not installed (run `rnx desktop install`)"}}async function A(e){let o=f();if(!o)return{launched:!1,message:"rnx desktop app not installed"};try{let r=await S(e.url,o,{device:e.device,profileId:e.profileId,ephemeralProfile:e.ephemeralProfile,ownerPid:e.ownerPid});return r.launched?{launched:!0,message:e.url?`electron launched via ${r.via} \u2192 ${e.url}`:`electron launched via ${r.via}`,target:r.target,attachUrl:e.url}:{launched:!1,message:"desktop companion failed to start"}}catch(r){return{launched:!1,message:`electron launch failed: ${r instanceof Error?r.message:String(r)}`}}}var k={id:"electron",name:"electron",description:"rnx desktop companion app (native window, menu bar)",kind:"native",availability:M,launch:A};import{spawn as B}from"child_process";import{closeSync as F,mkdtempSync as G,openSync as U,readFileSync as q}from"fs";import{tmpdir as T}from"os";import{join as I}from"path";import{spawnSync as O}from"node:child_process";import{existsSync as _,readFileSync as R}from"node:fs";import{createRequire as L}from"node:module";import{dirname as W,join as N}from"node:path";var $=`
5
5
  const { existsSync } = require('node:fs');
6
6
  const modulePath = process.env.SOOTSIM_PW_MODULE;
7
7
  try {
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{i as s}from"./chunk-YEGWC2OY.js";import{a as t}from"./chunk-LWLHVF6Y.js";import{F as o,G as n}from"./chunk-QA2PTSOC.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-52NWLXHO.js";import{a as t}from"./chunk-AYZLK7R4.js";import{F as o,G as n}from"./chunk-2YNZ3GHI.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.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
4
  import{execFileSync as y}from"node:child_process";import a from"node:fs";import l from"node:path";var d=class extends Error{},g=8192,v=1e4;function P(n,t){if(t===0)return!1;let r;try{r=a.openSync(n,"r");let e=Buffer.alloc(Math.min(g,t)),s=a.readSync(r,e,0,e.length,0);return e.subarray(0,s).includes(0)}catch{return!1}finally{r!==void 0&&a.closeSync(r)}}var f=class{root;entries=new Map;sniffed=new Map;listTimeoutMs;constructor(t,r={}){this.root=l.resolve(t),this.listTimeoutMs=r.listTimeoutMs??v}index(){return this.entries}async refresh(){let t;try{t=y("git",["ls-files","-co","--exclude-standard","-z"],{cwd:this.root,encoding:"utf8",maxBuffer:64*1024*1024,timeout:this.listTimeoutMs,env:process.env})}catch(s){let i=s instanceof Error?s.message:String(s),o=s instanceof Error&&"signal"in s&&s.signal==="SIGTERM";throw new d(o?`git did not list the project's files in ${this.root} within ${this.listTimeoutMs/1e3}s, so the box has no file set to serve. the checkout may be on a stalled filesystem, or this machine may be too loaded to start a subprocess.`:`could not list the project's files with git in ${this.root}: ${i}`)}if(t.length===0)throw new d(`git listed no files in ${this.root}. either git tracks nothing there and nothing untracked is visible to it, or this machine could not read the child process's output.`);let r=new Map,e=new Map;for(let s of t.split("\0")){if(!s)continue;let i;try{i=a.statSync(l.join(this.root,s))}catch{continue}if(!i.isFile())continue;let o=this.sniffed.get(s),c=o&&o.size===i.size&&o.mtimeMs===i.mtimeMs?o.binary:P(l.join(this.root,s),i.size);e.set(s,{size:i.size,mtimeMs:i.mtimeMs,binary:c}),r.set(s,{size:i.size,readOnly:!1,binary:c})}this.entries=r,this.sniffed=e}absolute(t){let r=l.resolve(this.root,t);if(r!==this.root&&!r.startsWith(`${this.root}${l.sep}`))throw new Error(`path escapes the project: ${t}`);return r}async read(t){return a.promises.readFile(this.absolute(t),"utf8")}async readBytes(t){return a.promises.readFile(this.absolute(t))}async write(t,r){let e=this.absolute(t);await a.promises.mkdir(l.dirname(e),{recursive:!0}),await a.promises.writeFile(e,r),this.entries.set(t,{size:r.byteLength,readOnly:!1,binary:r.subarray(0,g).includes(0)})}async delete(t){await a.promises.rm(this.absolute(t),{force:!0}),this.entries.delete(t)}};function u(n){let t="";for(let e=0;e<n.length;e+=32768)t+=String.fromCharCode(...n.subarray(e,e+32768));return btoa(t)}function h(n){let t=atob(n),r=new Uint8Array(t.length);for(let e=0;e<t.length;e++)r[e]=t.charCodeAt(e);return r}function p(n){let t=2166136261,r=16777619;for(let e of[...n.keys()].sort()){let s=n.get(e);if(!s)continue;let i=`${e} ${s.size} ${s.readOnly?1:0}${s.binary?1:0}`;for(let o=0;o<i.length;o++){let c=i.charCodeAt(o);t=Math.imul(t^c,16777619),r=Math.imul(r+c,2246822507)^r>>>13}}return`${(t>>>0).toString(36)}${(r>>>0).toString(36)}-${n.size}`}function m(n){let t=[];for(let[r,e]of n)t.push([r,e.size,(e.readOnly?1:0)|(e.binary?2:0)]);return t}async function w(n,t,r){switch(t){case"plane:index":{await n.refresh();let e=p(n.index());return r.sinceVersion&&r.sinceVersion===e?{result:{version:e,unchanged:!0},version:e}:{result:{version:e,entries:m(n.index())},version:e}}case"plane:read":return{result:{content:await n.read(String(r.path))}};case"plane:read-bytes":return{result:{base64:u(await n.readBytes(String(r.path)))}};case"plane:write":{await n.write(String(r.path),h(String(r.base64??"")));let e=p(n.index());return{result:{version:e},version:e}}case"plane:delete":{await n.delete(String(r.path));let e=p(n.index());return{result:{version:e},version:e}}default:return null}}export{p as a,w as b,d as c,f as d};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
4
  var 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.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{a as d}from"./chunk-ZRQKEKHX.js";import{a as s}from"./chunk-KXAE64HF.js";import{a as f,c}from"./chunk-Q5WPPOFV.js";import{a as e}from"./chunk-I7LRVN5M.js";import{a as n}from"./chunk-MKHW3JNL.js";import{d as m,e as p,f as u}from"./chunk-JPRHJMUJ.js";import{a}from"./chunk-P6K6XFWE.js";import{a as i}from"./chunk-MSM2E74F.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-EUEQHXM2.js";import{a as s}from"./chunk-4RQFXEF2.js";import{a as f,c}from"./chunk-SK6RRDXP.js";import{a as e}from"./chunk-K6GGQQU5.js";import{a as n}from"./chunk-VBAUP3CK.js";import{d as m,e as p,f as u}from"./chunk-VXZGJMFM.js";import{a}from"./chunk-PGPD6XML.js";import{a as i}from"./chunk-NQDLJL63.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,7 +1,7 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{b as Ht,c as Kt}from"./chunk-SLTEYNAE.js";import{a as Jt,b as qt}from"./chunk-PETP6LVI.js";import{a as ce}from"./chunk-BRRWRBW7.js";import{a as ne,b as ye,c as Bt,d as Ct,e as Dt,f as Lt,g as Wt}from"./chunk-7FYOZQBM.js";import{a as he,b as Fe}from"./chunk-CZ2FOZVC.js";import{j as jt}from"./chunk-PUH6RQBJ.js";import{a as Z,b as D,c as C,d as Ie,e as oe,f as G,g as me,h as ge,i as At,j as Pt,k as Me,l as _t}from"./chunk-4UMODU6C.js";import{C as Et,E as Ot,G as ue,H as Rt,N as We,a as Se,b as pt,c as ke,d as ft,e as gt,f as yt,g as ht,h as bt,i as wt,j as $t,k as xt,l as ve,m as Be,n as Ce,o as De,p as St,q as kt,r as fe,s as vt,t as Ne,u as Le,v as Nt,w as It,x as Mt,y as Ft,z as Tt}from"./chunk-I37LRPZ3.js";import{a as X}from"./chunk-KXAE64HF.js";import{e as it,j as at,r as lt,t as ct,v as dt,w as ut,x as mt,y as le}from"./chunk-MKHW3JNL.js";import{a as ot}from"./chunk-PKY76S57.js";import{b as st,c as y}from"./chunk-YWTBN7SD.js";import{c as nt,d as je,f as rt}from"./chunk-JPRHJMUJ.js";import{a as de}from"./chunk-LWLHVF6Y.js";function Je(e){return`(async () => {
4
+ import{b as Ht,c as Kt}from"./chunk-5BMF3MJN.js";import{a as Jt,b as qt}from"./chunk-EEBXLGGD.js";import{a as ce}from"./chunk-UMTP3PDW.js";import{a as ne,b as ye,c as Bt,d as Ct,e as Dt,f as Lt,g as Wt}from"./chunk-EG4HCEKS.js";import{a as he,b as Fe}from"./chunk-7T3K66TV.js";import{j as jt}from"./chunk-LEX3XST4.js";import{a as Z,b as D,c as C,d as Ie,e as oe,f as G,g as me,h as ge,i as At,j as Pt,k as Me,l as _t}from"./chunk-GVIPHFFH.js";import{C as Et,E as Ot,G as ue,H as Rt,N as We,a as Se,b as pt,c as ke,d as ft,e as gt,f as yt,g as ht,h as bt,i as wt,j as $t,k as xt,l as ve,m as Be,n as Ce,o as De,p as St,q as kt,r as fe,s as vt,t as Ne,u as Le,v as Nt,w as It,x as Mt,y as Ft,z as Tt}from"./chunk-POCPBDTJ.js";import{a as X}from"./chunk-4RQFXEF2.js";import{e as it,j as at,r as lt,t as ct,v as dt,w as ut,x as mt,y as le}from"./chunk-VBAUP3CK.js";import{a as ot}from"./chunk-XUJ67CGZ.js";import{b as st,c as y}from"./chunk-2272Y5HN.js";import{c as nt,d as je,f as rt}from"./chunk-VXZGJMFM.js";import{a as de}from"./chunk-AYZLK7R4.js";function Je(e){return`(async () => {
5
5
  const bridge = globalThis.SootSim && globalThis.SootSim.bridges && globalThis.SootSim.bridges.hotRemount
6
6
  if (!bridge || typeof bridge.reloadExternalApp !== 'function') return false
7
7
  await bridge.reloadExternalApp({ resetStorage: ${e?"true":"false"} })
@@ -112,7 +112,7 @@ import{b as Ht,c as Kt}from"./chunk-SLTEYNAE.js";import{a as Jt,b as qt}from"./c
112
112
  `),y(0))}let o=["do","get","debug","wait"].map(s=>je(s,S)).filter(s=>s!=null).join(`
113
113
 
114
114
  `);console.log(`${o}
115
- `),y(0)}let T=u.wsPort,x=u.simId,P=u.simIdSource,O=u.commandTimeoutMs;if(b==="get"&&m==="diagnosis"){let S=l.indexOf("diagnosis"),o=S>=0?[...l.slice(0,S),...l.slice(S+1)]:l,{runDiagnose:s}=await import("./diagnose-JFKFKR3S.js"),n=await s(["recent",...o],t);process.exitCode=n;return}if(b==="do"&&m==="scan"){let{runCamera:S}=await import("./camera-RUL426MQ.js");process.exitCode=await S(l,{port:t.port});return}if(m==="list"&&l.some(S=>S==="--drivers"||S==="-D")){let{buildDriverListRows:S}=await import("./drivers-BXEXWRVJ.js"),o=S();console.log(` available drivers (${o.length}):
115
+ `),y(0)}let T=u.wsPort,x=u.simId,P=u.simIdSource,O=u.commandTimeoutMs;if(b==="get"&&m==="diagnosis"){let S=l.indexOf("diagnosis"),o=S>=0?[...l.slice(0,S),...l.slice(S+1)]:l,{runDiagnose:s}=await import("./diagnose-RPMOVNDH.js"),n=await s(["recent",...o],t);process.exitCode=n;return}if(b==="do"&&m==="scan"){let{runCamera:S}=await import("./camera-2P7A65KA.js");process.exitCode=await S(l,{port:t.port});return}if(m==="list"&&l.some(S=>S==="--drivers"||S==="-D")){let{buildDriverListRows:S}=await import("./drivers-RIZIUIBG.js"),o=S();console.log(` available drivers (${o.length}):
116
116
  `);let s=Math.max(...o.map(i=>i.id.length),6),n=Math.max(...o.map(i=>i.kind.length),4);for(let i of o){let d=i.available?"\u2713":"\u2717",p=i.id.padEnd(s),f=i.kind.padEnd(n);console.log(` ${d} ${p} ${f} ${i.description}`),i.available&&i.detail?console.log(` ${i.detail}`):!i.available&&i.reason&&console.log(` unavailable: ${i.reason}`)}return}let c=dt(u),j=x||"default",A=new Set(["errors","warnings","requests","js","reload","globals","perf","storage-clear","list","wait","sleep"]),B=200;function H(S){let o=S.replace(/\s+/g," ").trim();if(!o)return"";if(/^<(!doctype html|html|\?xml)|<body[\s>]/i.test(o)){let n=/<title[^>]*>([^<]+)<\/title>/i.exec(S)?.[1]?.trim(),i=/<body[^>]*>([\s\S]*?)<\//i.exec(S)?.[1]?.replace(/<[^>]+>/g," ").replace(/\s+/g," ").trim().slice(0,80),d=n||i||"html error page";return`<html ${S.length}B> "${d}" (body elided \u2014 add --json for the full payload)`}return o.length<=B?o:`${o.slice(0,B)}\u2026 (+${o.length-B} more bytes)`}function W(S){let o=S.displayUrl||S.url;return S.status!=null?`${S.method} ${o} -> ${S.status}${S.statusText?` ${S.statusText}`:""}`:S.error?`${S.method} ${o} -> ${S.error}`:`${S.method} ${o}`}async function F(S){let o=de()?400:200;try{let{settled:s,elapsed:n}=await ne({bridge:S,maxMs:o,pollMs:32,stablePolls:2});s||process.stderr.write(` \u26A0 auto-wait timed out after ${n??o}ms \u2014 next command may see mid-animation state. use \`rnx do settle\` for a longer wait.
117
117
  `)}catch{}}function _(S,o){if(o.result?.reason==="offscreen"){let{x:s,y:n,screen:i}=o.result;console.error(` tap failed: ${S} resolved to (${Math.round(s)},${Math.round(n)}), outside the ${i?.width}x${i?.height} screen`),console.error(" the node exists but is scrolled out of view \u2014 scroll it on-screen first (rnx do scroll / swipe), then tap.");return}console.error(` tap failed: ${S} stayed visible but did not receive a hittable press after ${o.attempts} attempt${o.attempts===1?"":"s"}`),o.result&&console.error(` last result: ${JSON.stringify(o.result)}`)}async function V(){try{return await c.send({type:"evaluate",code:`(() => ({
118
118
  console: ${Ne},
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
4
  var g=Object.create;var e=Object.defineProperty;var h=Object.getOwnPropertyDescriptor;var i=Object.getOwnPropertyNames;var j=Object.getPrototypeOf,k=Object.prototype.hasOwnProperty;var m=(a=>typeof require<"u"?require:typeof Proxy<"u"?new Proxy(a,{get:(b,c)=>(typeof require<"u"?require:b)[c]}):a)(function(a){if(typeof require<"u")return require.apply(this,arguments);throw Error('Dynamic require of "'+a+'" is not supported')});var n=(a,b)=>()=>(b||a((b={exports:{}}).exports,b),b.exports),o=(a,b)=>{for(var c in b)e(a,c,{get:b[c],enumerable:!0})},l=(a,b,c,f)=>{if(b&&typeof b=="object"||typeof b=="function")for(let d of i(b))!k.call(a,d)&&d!==c&&e(a,d,{get:()=>b[d],enumerable:!(f=h(b,d))||f.enumerable});return a};var p=(a,b,c)=>(c=a!=null?g(j(a)):{},l(b||!a||!a.__esModule?e(c,"default",{value:a,enumerable:!0}):c,a));export{m as a,n as b,o as c,p as d};
@@ -1,5 +1,5 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{o as d}from"./chunk-QA2PTSOC.js";import{chmodSync as S,existsSync as f,mkdirSync as A,readFileSync as k,rmSync as o,writeFileSync as y}from"node:fs";import{dirname as c,join as D,resolve as m}from"node:path";var s=1,p="SOOTSIM_SHARED_AUTH_FILE",u="https://contrast.dev";function w(){let t=process.env[p];return t?.trim()?c(m(t)):d()}function a(){let t=process.env[p];return t?.trim()?m(t):D(w(),"desktop-auth.json")}function g(t){if(!t||typeof t!="object")return null;let e=t;return typeof e.id!="string"||!e.id.trim()?null:{id:e.id.trim(),name:typeof e.name=="string"?e.name:void 0,email:typeof e.email=="string"?e.email:void 0,image:typeof e.image=="string"?e.image:void 0,githubUsername:typeof e.githubUsername=="string"?e.githubUsername:void 0,isAdmin:e.isAdmin===!0,teams:Array.isArray(e.teams)?e.teams.map(r=>{if(!r||typeof r!="object")return null;let n=r;return typeof n.id!="string"||typeof n.name!="string"?null:{id:n.id,name:n.name,role:n.role==="owner"?"owner":"member",githubOrg:typeof n.githubOrg=="string"?n.githubOrg:null}}).filter(r=>!!r):void 0}}function v(t){if(!t||typeof t!="object")return null;let e=t;if(e.version!==s||typeof e.token!="string"||!e.token.trim())return null;let r=typeof e.origin=="string"&&e.origin.trim()?e.origin.trim():u,n=e.source==="cli"||e.source==="electron"||e.source==="browser"||e.source==="unknown"?e.source:"unknown",i=typeof e.updatedAt=="string"&&e.updatedAt?e.updatedAt:new Date().toISOString(),h=typeof e.validatedAt=="string"&&e.validatedAt?e.validatedAt:void 0;return{version:s,token:e.token.trim(),user:g(e.user),origin:r,source:n,updatedAt:i,validatedAt:h}}function b(){let t=a();if(!f(t))return null;try{let e=JSON.parse(k(t,"utf8")),r=v(e);return r||(o(t,{force:!0}),null)}catch{return o(t,{force:!0}),null}}function O(t){let e=a();A(c(e),{recursive:!0});let r={version:s,token:t.token.trim(),user:t.user?g(t.user):null,origin:t.origin?.trim()||u,source:t.source,updatedAt:t.updatedAt||new Date().toISOString(),validatedAt:t.validatedAt};y(e,JSON.stringify(r,null,2)+`
4
+ import{o as d}from"./chunk-2YNZ3GHI.js";import{chmodSync as S,existsSync as f,mkdirSync as A,readFileSync as k,rmSync as o,writeFileSync as y}from"node:fs";import{dirname as c,join as D,resolve as m}from"node:path";var s=1,p="SOOTSIM_SHARED_AUTH_FILE",u="https://contrast.dev";function w(){let t=process.env[p];return t?.trim()?c(m(t)):d()}function a(){let t=process.env[p];return t?.trim()?m(t):D(w(),"desktop-auth.json")}function g(t){if(!t||typeof t!="object")return null;let e=t;return typeof e.id!="string"||!e.id.trim()?null:{id:e.id.trim(),name:typeof e.name=="string"?e.name:void 0,email:typeof e.email=="string"?e.email:void 0,image:typeof e.image=="string"?e.image:void 0,githubUsername:typeof e.githubUsername=="string"?e.githubUsername:void 0,isAdmin:e.isAdmin===!0,teams:Array.isArray(e.teams)?e.teams.map(r=>{if(!r||typeof r!="object")return null;let n=r;return typeof n.id!="string"||typeof n.name!="string"?null:{id:n.id,name:n.name,role:n.role==="owner"?"owner":"member",githubOrg:typeof n.githubOrg=="string"?n.githubOrg:null}}).filter(r=>!!r):void 0}}function v(t){if(!t||typeof t!="object")return null;let e=t;if(e.version!==s||typeof e.token!="string"||!e.token.trim())return null;let r=typeof e.origin=="string"&&e.origin.trim()?e.origin.trim():u,n=e.source==="cli"||e.source==="electron"||e.source==="browser"||e.source==="unknown"?e.source:"unknown",i=typeof e.updatedAt=="string"&&e.updatedAt?e.updatedAt:new Date().toISOString(),h=typeof e.validatedAt=="string"&&e.validatedAt?e.validatedAt:void 0;return{version:s,token:e.token.trim(),user:g(e.user),origin:r,source:n,updatedAt:i,validatedAt:h}}function b(){let t=a();if(!f(t))return null;try{let e=JSON.parse(k(t,"utf8")),r=v(e);return r||(o(t,{force:!0}),null)}catch{return o(t,{force:!0}),null}}function O(t){let e=a();A(c(e),{recursive:!0});let r={version:s,token:t.token.trim(),user:t.user?g(t.user):null,origin:t.origin?.trim()||u,source:t.source,updatedAt:t.updatedAt||new Date().toISOString(),validatedAt:t.validatedAt};y(e,JSON.stringify(r,null,2)+`
5
5
  `);try{S(e,384)}catch{}return r}function l(){o(a(),{force:!0})}async function E(t){let e=b();if(!e?.token)return null;let r=t||e.origin||u;try{let n=await fetch(`${r.replace(/\/$/,"")}/api/auth/me`,{headers:{authorization:`Bearer ${e.token}`}});if(n.status===401)return l(),null;if(!n.ok)return e;let i=await n.json();return i.user?.id?O({token:e.token,user:i.user,origin:r,source:e.source,validatedAt:new Date().toISOString()}):(l(),null)}catch{return e}}export{b as a,O as b,l as c,E as d};
@@ -1,4 +1,4 @@
1
- /*! rnx v0.1.372 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! rnx v0.1.373 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  import { createRequire as __sootsimCreateRequire } from 'node:module'
3
3
  var require = __sootsimCreateRequire(import.meta.url)
4
- import{a as t}from"./chunk-MSM2E74F.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-NQDLJL63.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};