sootsim 0.1.305 → 0.1.307

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 (172) hide show
  1. package/README.md +10 -4
  2. package/dist-cli/bin.js +5 -5
  3. package/dist-cli/chunks/{agent-OJP4VF2K.js → agent-BQ3KAQAU.js} +2 -2
  4. package/dist-cli/chunks/{agent-wrapper-HMVFZKH3.js → agent-wrapper-DS6FBIAI.js} +2 -2
  5. package/dist-cli/chunks/{app-fonts-INFYQMIN.js → app-fonts-VTLZYBCH.js} +2 -2
  6. package/dist-cli/chunks/{assert-YSFBCP5P.js → assert-MPQ4CDNH.js} +2 -2
  7. package/dist-cli/chunks/{auth-M7RKDYQV.js → auth-O3PQ5WAK.js} +2 -2
  8. package/dist-cli/chunks/{beta-4NRMM37T.js → beta-CHK46VAX.js} +2 -2
  9. package/dist-cli/chunks/{camera-MHLM35MB.js → camera-YOO6XYC5.js} +2 -2
  10. package/dist-cli/chunks/{chunk-6EXIYEOQ.js → chunk-2ODPPVQC.js} +2 -2
  11. package/dist-cli/chunks/{chunk-2UKSI3VX.js → chunk-2P5OBO7Z.js} +1 -1
  12. package/dist-cli/chunks/{chunk-R5TBMYGH.js → chunk-3JLFWHOZ.js} +1 -1
  13. package/dist-cli/chunks/{chunk-CWDEDUOZ.js → chunk-3S57XWPX.js} +1 -1
  14. package/dist-cli/chunks/{chunk-JKIPNRAK.js → chunk-4BZ6SM53.js} +24 -25
  15. package/dist-cli/chunks/{chunk-H5D6E3DR.js → chunk-4QCKHLRV.js} +2 -2
  16. package/dist-cli/chunks/{chunk-UUKUKTV3.js → chunk-537ULSCX.js} +11 -11
  17. package/dist-cli/chunks/chunk-5MN7CUQB.js +6 -0
  18. package/dist-cli/chunks/{chunk-XI6CPN53.js → chunk-6Q3FIZGP.js} +1 -1
  19. package/dist-cli/chunks/{chunk-TRV5K6D2.js → chunk-746PZ7ND.js} +1 -1
  20. package/dist-cli/chunks/{chunk-B65RMI7A.js → chunk-7HPBPICZ.js} +1 -1
  21. package/dist-cli/chunks/{chunk-2D7NF3XK.js → chunk-7T5WCLEU.js} +2 -2
  22. package/dist-cli/chunks/{chunk-KG2WUKD2.js → chunk-AD2J3Y5G.js} +2 -2
  23. package/dist-cli/chunks/chunk-BO2XSJJA.js +5 -0
  24. package/dist-cli/chunks/{chunk-IJ64Z77P.js → chunk-CKLXK3SU.js} +2 -2
  25. package/dist-cli/chunks/{chunk-DHDSGBZB.js → chunk-E2AY5MPI.js} +1 -1
  26. package/dist-cli/chunks/chunk-EWSHWBPU.js +4 -0
  27. package/dist-cli/chunks/chunk-EY5RFXHC.js +125 -0
  28. package/dist-cli/chunks/{chunk-6YE25EJB.js → chunk-FRTR2EUL.js} +3 -3
  29. package/dist-cli/chunks/{chunk-SWBTXTEO.js → chunk-IBM36KUP.js} +2 -2
  30. package/dist-cli/chunks/{chunk-WQYUHDBU.js → chunk-J52NXD2T.js} +2 -2
  31. package/dist-cli/chunks/chunk-KCRDI5B2.js +5 -0
  32. package/dist-cli/chunks/{chunk-JQRRJIMT.js → chunk-KPDYFXBD.js} +1 -1
  33. package/dist-cli/chunks/{chunk-NNR3BU5O.js → chunk-LL76B22R.js} +7 -7
  34. package/dist-cli/chunks/{chunk-4Q42Y64Y.js → chunk-LTS6OYSK.js} +2 -2
  35. package/dist-cli/chunks/{chunk-HKPJYMJC.js → chunk-NK72QUBY.js} +15 -12
  36. package/dist-cli/chunks/chunk-NLE5PR7V.js +15 -0
  37. package/dist-cli/chunks/{chunk-EWVEUNRO.js → chunk-NWOGE4YS.js} +81 -37
  38. package/dist-cli/chunks/{chunk-DTHOMSAA.js → chunk-OQ6KN4TP.js} +2 -2
  39. package/dist-cli/chunks/{chunk-W3M4676V.js → chunk-Q32TOAPX.js} +3 -3
  40. package/dist-cli/chunks/{chunk-54AINFEF.js → chunk-Q35WXZFI.js} +2 -2
  41. package/dist-cli/chunks/{chunk-BDNZULU7.js → chunk-QJ7B6FFD.js} +2 -2
  42. package/dist-cli/chunks/chunk-RCLJQZQR.js +4 -0
  43. package/dist-cli/chunks/chunk-S5QHC5LD.js +4 -0
  44. package/dist-cli/chunks/{chunk-VKBCGFOU.js → chunk-SKMVVRFI.js} +2 -2
  45. package/dist-cli/chunks/{chunk-EBCXFB3K.js → chunk-SLEKK2UU.js} +1 -1
  46. package/dist-cli/chunks/chunk-SZDXEZ2I.js +4 -0
  47. package/dist-cli/chunks/{chunk-43SNLCXR.js → chunk-SZX2PHDS.js} +1 -1
  48. package/dist-cli/chunks/{chunk-AJCL7DHI.js → chunk-UKKB52JO.js} +2 -2
  49. package/dist-cli/chunks/{chunk-R6MBDR56.js → chunk-UURKPOZU.js} +1 -1
  50. package/dist-cli/chunks/{chunk-3PREBGTH.js → chunk-WE6WXVYB.js} +2 -2
  51. package/dist-cli/chunks/{chunk-EPZG2F4I.js → chunk-WPVMW3I5.js} +1 -1
  52. package/dist-cli/chunks/{chunk-J653UMCU.js → chunk-WTWGQFNU.js} +2 -2
  53. package/dist-cli/chunks/{chunk-SLCYXISJ.js → chunk-XRUSCWIH.js} +2 -2
  54. package/dist-cli/chunks/{chunk-LOF3WUKB.js → chunk-XVQ2YGCI.js} +1 -1
  55. package/dist-cli/chunks/{chunk-HMOYEM6V.js → chunk-YIKFWG22.js} +2 -2
  56. package/dist-cli/chunks/{chunk-KVLXMWV5.js → chunk-YPKDDYIE.js} +2 -2
  57. package/dist-cli/chunks/{chunk-HHLH4TWF.js → chunk-Z772XMEF.js} +1 -1
  58. package/dist-cli/chunks/{chunk-KSZRLJPA.js → chunk-ZJR2AKLU.js} +2 -2
  59. package/dist-cli/chunks/{chunk-POIK3AHY.js → chunk-ZZBMQEEE.js} +2 -2
  60. package/dist-cli/chunks/{cleanup-ZJ7FQKED.js → cleanup-RT2PX5NP.js} +2 -2
  61. package/dist-cli/chunks/{cli-version-5LGCFOAC.js → cli-version-W3D5LXK5.js} +2 -2
  62. package/dist-cli/chunks/{compat-EQACACVP.js → compat-LGAXCMPJ.js} +2 -2
  63. package/dist-cli/chunks/{config-ADGNCDG5.js → config-3MQYRCSB.js} +2 -2
  64. package/dist-cli/chunks/control-MDWGTCXV.js +4 -0
  65. package/dist-cli/chunks/daemon-4FHSWZSV.js +4 -0
  66. package/dist-cli/chunks/{debug-PU73W33T.js → debug-UKOFTGI3.js} +3 -3
  67. package/dist-cli/chunks/desktop-N6TEZAIJ.js +31 -0
  68. package/dist-cli/chunks/{detox-SHVVEPPX.js → detox-T2Y4HE44.js} +2 -2
  69. package/dist-cli/chunks/{device-NMRUACB4.js → device-ZE2WSDJN.js} +2 -2
  70. package/dist-cli/chunks/{diagnose-S2AVGABT.js → diagnose-WFEFBH6U.js} +2 -2
  71. package/dist-cli/chunks/disk-cleanup-YXC3JGG5.js +4 -0
  72. package/dist-cli/chunks/drivers-62L33HHX.js +4 -0
  73. package/dist-cli/chunks/{film-UB7N4EKB.js → film-THTAWD5P.js} +3 -3
  74. package/dist-cli/chunks/flow-3HCUMLZL.js +4 -0
  75. package/dist-cli/chunks/help-KEXQPE2I.js +4 -0
  76. package/dist-cli/chunks/{hidden-runtime-alias-M44SGZLM.js → hidden-runtime-alias-SNP5LSQD.js} +2 -2
  77. package/dist-cli/chunks/{home-paths-ZTEBHBUO.js → home-paths-WUCC72RE.js} +2 -2
  78. package/dist-cli/chunks/inspect-2SR5AEEA.js +4 -0
  79. package/dist-cli/chunks/install-desktop-KE5ZPY6L.js +4 -0
  80. package/dist-cli/chunks/{login-YQ3HRPPS.js → login-ZEB4WSVZ.js} +4 -4
  81. package/dist-cli/chunks/{logout-XGBDWO4J.js → logout-P6PV2WRO.js} +2 -2
  82. package/dist-cli/chunks/{maestro-CESBE2SF.js → maestro-TUA7YURM.js} +3 -3
  83. package/dist-cli/chunks/{maestro-generate-4IHISKJL.js → maestro-generate-HI4UM47Q.js} +3 -3
  84. package/dist-cli/chunks/{mode-BQGGZ737.js → mode-ILLUAGCG.js} +2 -2
  85. package/dist-cli/chunks/optional-demo-registry-R7UFXPBP.js +4 -0
  86. package/dist-cli/chunks/{perf-TUR22UTE.js → perf-4CE5R2TN.js} +2 -2
  87. package/dist-cli/chunks/{permissions-POJIVSRV.js → permissions-NQCKUHGU.js} +2 -2
  88. package/dist-cli/chunks/{record-Q55SGXLU.js → record-5JRY7R54.js} +3 -3
  89. package/dist-cli/chunks/{report-issue-LRRX7VJV.js → report-issue-PFE7RDDV.js} +2 -2
  90. package/dist-cli/chunks/runtime-MP2QVB2X.js +4 -0
  91. package/dist-cli/chunks/{screenshot-command-C7EU43J3.js → screenshot-command-R3MPUAQI.js} +3 -3
  92. package/dist-cli/chunks/{screenshot-layers-NYVOJYUU.js → screenshot-layers-TKLUUDFA.js} +2 -2
  93. package/dist-cli/chunks/{screenshots-capture-AYKJKBLR.js → screenshots-capture-6UT2EVTR.js} +2 -2
  94. package/dist-cli/chunks/{serve-EN3ZPJSA.js → serve-L5GFNPAX.js} +3 -3
  95. package/dist-cli/chunks/{setup-KKMKLJZE.js → setup-IZQ7IXYW.js} +2 -2
  96. package/dist-cli/chunks/{skills-DR5DG2SK.js → skills-2CY6YIL7.js} +2 -2
  97. package/dist-cli/chunks/{storage-GMDBVTQ5.js → storage-EPY4VXCY.js} +2 -2
  98. package/dist-cli/chunks/store-F5RQZH7P.js +4 -0
  99. package/dist-cli/chunks/telemetry-MZKLKJAS.js +4 -0
  100. package/dist-cli/chunks/{timeline-VY3444AZ.js → timeline-LK5IA74W.js} +2 -2
  101. package/dist-cli/chunks/{upgrade-EUYCW55F.js → upgrade-ZK6YJMUA.js} +2 -2
  102. package/dist-cli/chunks/upload-LP6UOKRF.js +4 -0
  103. package/dist-cli/chunks/{version-TEGM4WRU.js → version-SRC2HVYI.js} +2 -2
  104. package/dist-cli/chunks/{web-QF7LF4VB.js → web-SVNHYKX5.js} +2 -2
  105. package/dist-cli/chunks/{what-happened-HDTJGNND.js → what-happened-URW3Q7QP.js} +2 -2
  106. package/dist-lib/agent-daemon-client.cjs +1 -1
  107. package/dist-lib/agent-events.cjs +1 -1
  108. package/dist-lib/agent-identity.cjs +1 -1
  109. package/dist-lib/agent-sessions.cjs +1 -1
  110. package/dist-lib/attached-projects.cjs +43 -21
  111. package/dist-lib/auth/shared-session.cjs +1 -1
  112. package/dist-lib/backend-origin.cjs +1 -1
  113. package/dist-lib/beta.cjs +1 -1
  114. package/dist-lib/beta.mjs +1 -1
  115. package/dist-lib/bridge-constants.cjs +8 -1
  116. package/dist-lib/cli-constants.cjs +1 -1
  117. package/dist-lib/config.cjs +1 -1
  118. package/dist-lib/detox/index.cjs +51 -41
  119. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  120. package/dist-lib/home-paths.cjs +1 -1
  121. package/dist-lib/host/bridge-host.cjs +222 -302
  122. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  123. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  124. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  125. package/dist-lib/host/websocket-proxy.cjs +1 -1
  126. package/dist-lib/index.cjs +1 -1
  127. package/dist-lib/jump-to-source-babel.cjs +1 -1
  128. package/dist-lib/menu.cjs +1 -1
  129. package/dist-lib/menu.mjs +1 -1
  130. package/dist-lib/metro.cjs +1 -1
  131. package/dist-lib/profiles.cjs +1 -1
  132. package/dist-lib/render-mode.cjs +1 -1
  133. package/dist-lib/scripts/dev-server-scanner.cjs +43 -13
  134. package/dist-lib/sdk.cjs +47 -10
  135. package/dist-lib/sdk.mjs +47 -10
  136. package/dist-lib/skills.cjs +11364 -6863
  137. package/dist-lib/vite.cjs +1 -1
  138. package/package.json +1 -1
  139. package/scripts/dev-server-scanner.ts +9 -15
  140. package/scripts/optional-demo-registry.ts +52 -10
  141. package/skills/sootsim-debug/SKILL.md +4 -5
  142. package/skills/sootsim-setup/SKILL.md +29 -49
  143. package/src/bridge-constants.ts +15 -0
  144. package/src/host/bridge-host.ts +0 -16
  145. package/src/host/open-url.ts +2 -147
  146. package/src/plist.ts +27 -0
  147. package/src/settings-bundle.ts +2 -23
  148. package/src/skills/builtin/maestro-test.ts +4 -1
  149. package/src/vite-plugin.ts +2 -1
  150. package/dist-cli/chunks/chunk-COD6QGS2.js +0 -125
  151. package/dist-cli/chunks/chunk-KVOY4Z2X.js +0 -4
  152. package/dist-cli/chunks/chunk-OCRL2VU4.js +0 -4
  153. package/dist-cli/chunks/chunk-PELXRGDN.js +0 -4
  154. package/dist-cli/chunks/chunk-QJUKXBH5.js +0 -15
  155. package/dist-cli/chunks/chunk-QVH276LI.js +0 -5
  156. package/dist-cli/chunks/chunk-WIRBJTTU.js +0 -7
  157. package/dist-cli/chunks/chunk-XWMTLVCE.js +0 -4
  158. package/dist-cli/chunks/chunk-ZRQFYMTL.js +0 -4
  159. package/dist-cli/chunks/control-Y3E5IIMO.js +0 -4
  160. package/dist-cli/chunks/daemon-A6CWUYMR.js +0 -4
  161. package/dist-cli/chunks/desktop-V675PYF4.js +0 -34
  162. package/dist-cli/chunks/disk-cleanup-EJEZIIT4.js +0 -4
  163. package/dist-cli/chunks/drivers-PM4PVYHY.js +0 -4
  164. package/dist-cli/chunks/flow-XJRNL25V.js +0 -4
  165. package/dist-cli/chunks/help-2ZJHCVUZ.js +0 -4
  166. package/dist-cli/chunks/inspect-L76RUF62.js +0 -4
  167. package/dist-cli/chunks/install-desktop-UIXKNXKF.js +0 -4
  168. package/dist-cli/chunks/optional-demo-registry-LWYRXVIE.js +0 -4
  169. package/dist-cli/chunks/runtime-NHDHZJJN.js +0 -4
  170. package/dist-cli/chunks/store-QZEMKQDC.js +0 -4
  171. package/dist-cli/chunks/telemetry-TNX72J2B.js +0 -4
  172. package/dist-cli/chunks/upload-D43U7RGT.js +0 -4
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/host/fetch-proxy-overrides.ts
4
4
  var FETCH_PROXY_BROWSER_USER_AGENT = "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/146.0.0.0 Safari/537.36";
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/menu.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
package/dist-lib/menu.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/menu.ts
4
4
  var SOOTSIM_ENGINE_EVENT_NAME = "sootsim:engine-event";
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __create = Object.create;
@@ -105,12 +105,9 @@ function normalizeNativeDevBundleUrl(bundleUrl) {
105
105
  // src/settings-bundle.ts
106
106
  var import_promises = require("node:fs/promises");
107
107
  var import_node_path = require("node:path");
108
+
109
+ // src/plist.ts
108
110
  var import_plist = __toESM(require("@expo/plist"), 1);
109
- var MAX_PLIST_BYTES = 1048576;
110
- var MAX_CHILD_DEPTH = 8;
111
- var MAX_PLIST_FILES = 32;
112
- var MAX_SPECIFIERS = 512;
113
- var settingsBundleCache = /* @__PURE__ */ new Map();
114
111
  function isRecord(value) {
115
112
  return typeof value === "object" && value !== null && !Array.isArray(value);
116
113
  }
@@ -126,6 +123,19 @@ function resolvePlistParser(value) {
126
123
  return typeof nestedParse === "function" ? (source) => Reflect.apply(nestedParse, nested, [source]) : null;
127
124
  }
128
125
  var parsePlist = resolvePlistParser(import_plist.default);
126
+ function parsePlistSource(source) {
127
+ return parsePlist?.(source) ?? null;
128
+ }
129
+
130
+ // src/settings-bundle.ts
131
+ var MAX_PLIST_BYTES = 1048576;
132
+ var MAX_CHILD_DEPTH = 8;
133
+ var MAX_PLIST_FILES = 32;
134
+ var MAX_SPECIFIERS = 512;
135
+ var settingsBundleCache = /* @__PURE__ */ new Map();
136
+ function isRecord2(value) {
137
+ return typeof value === "object" && value !== null && !Array.isArray(value);
138
+ }
129
139
  function optionalString(value) {
130
140
  return typeof value === "string" ? value : void 0;
131
141
  }
@@ -248,12 +258,11 @@ async function settingsBundleFingerprint(bundlePath) {
248
258
  }
249
259
  async function parsePlistRecord(path) {
250
260
  try {
251
- if (!parsePlist) return null;
252
261
  const metadata = await (0, import_promises.stat)(path);
253
262
  if (!metadata.isFile() || metadata.size > MAX_PLIST_BYTES) return null;
254
263
  const source = await (0, import_promises.readFile)(path, "utf8");
255
- const parsed = parsePlist(source);
256
- return isRecord(parsed) ? parsed : null;
264
+ const parsed = parsePlistSource(source);
265
+ return isRecord2(parsed) ? parsed : null;
257
266
  } catch {
258
267
  return null;
259
268
  }
@@ -289,7 +298,7 @@ function normalizeMultiValue(raw, key, title) {
289
298
  };
290
299
  }
291
300
  async function normalizeSpecifier(raw, context) {
292
- if (!isRecord(raw)) return null;
301
+ if (!isRecord2(raw)) return null;
293
302
  if (context.budget.specifiers >= MAX_SPECIFIERS) return null;
294
303
  const type = requiredString(raw.Type);
295
304
  if (!type) return null;
@@ -439,14 +448,35 @@ function __resetAppSettingsBundleCacheForTests() {
439
448
  }
440
449
 
441
450
  // scripts/optional-demo-registry.ts
442
- var REGISTRY_SPECIFIER = "./demo-app-registry.ts";
451
+ var import_node_fs = require("node:fs");
452
+ var import_node_path2 = require("node:path");
453
+ var import_node_url = require("node:url");
454
+ var REGISTRY_REPO_PATH = "packages/sootsim/scripts/demo-app-registry.ts";
455
+ var MAX_ANCESTOR_STEPS = 8;
456
+ function findInternalDemoRegistry(startDir) {
457
+ let dir = startDir;
458
+ for (let step = 0; step < MAX_ANCESTOR_STEPS; step++) {
459
+ if ((0, import_node_path2.basename)(dir) === "node_modules") return null;
460
+ const candidate = (0, import_node_path2.join)(dir, REGISTRY_REPO_PATH);
461
+ if ((0, import_node_fs.existsSync)(candidate)) return candidate;
462
+ const parent = (0, import_node_path2.dirname)(dir);
463
+ if (parent === dir) return null;
464
+ dir = parent;
465
+ }
466
+ return null;
467
+ }
443
468
  var cached = null;
444
469
  async function loadOptionalDemoApps() {
445
470
  if (cached) return cached;
471
+ const registryPath = findInternalDemoRegistry((0, import_node_path2.dirname)((0, import_node_url.fileURLToPath)(__sootsim_import_meta_url)));
472
+ if (!registryPath) {
473
+ cached = [];
474
+ return cached;
475
+ }
446
476
  try {
447
477
  const mod = await import(
448
478
  /* @vite-ignore */
449
- REGISTRY_SPECIFIER
479
+ (0, import_node_url.pathToFileURL)(registryPath).href
450
480
  );
451
481
  cached = Array.isArray(mod.APPS) ? mod.APPS : [];
452
482
  } catch {
@@ -460,7 +490,6 @@ function optionalDemoAppsSync() {
460
490
 
461
491
  // scripts/dev-server-scanner.ts
462
492
  var execP = (0, import_util.promisify)(import_child_process.exec);
463
- void loadOptionalDemoApps();
464
493
  var TIMEOUT_MS = 250;
465
494
  var MANIFEST_TIMEOUT_MS = 1500;
466
495
  var TCP_GATE_MS = 120;
@@ -762,6 +791,7 @@ var knownNonPatched = /* @__PURE__ */ new Set();
762
791
  var knownNonExpo = /* @__PURE__ */ new Set();
763
792
  var knownOne = /* @__PURE__ */ new Set();
764
793
  async function probePort(port, buildIconProxyUrl) {
794
+ await loadOptionalDemoApps();
765
795
  if (!await tcpPing(port)) return null;
766
796
  const onePath = `/node_modules/one/metro-entry.bundle?platform=ios&dev=true`;
767
797
  const [sootsimRes, statusRes, manifestRes, expoRes] = await Promise.all([
package/dist-lib/sdk.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
  let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
3
3
  "use strict";
4
4
  var __defProp = Object.defineProperty;
@@ -1859,18 +1859,60 @@ async function tapResolvedTarget(bridge, args) {
1859
1859
  type: node.type ?? null,
1860
1860
  }
1861
1861
  : null
1862
+ const coordinateAncestors = Array.isArray(inspected?.ancestors)
1863
+ ? inspected.ancestors
1864
+ : []
1865
+ const ancestorMatchesRequested = coordinateAncestors.some(
1866
+ (ancestor) =>
1867
+ (typeof requestedTarget.nodeId === 'number' &&
1868
+ ancestor?.nodeId === requestedTarget.nodeId) ||
1869
+ (requestedTarget.testID &&
1870
+ ancestor?.testID === requestedTarget.testID) ||
1871
+ (requestedTarget.id && ancestor?.id === requestedTarget.id),
1872
+ )
1862
1873
  const requestedTargetMatched =
1863
1874
  coordinateTarget === null
1864
1875
  ? false
1865
1876
  : typeof requestedTarget.nodeId === 'number' &&
1866
1877
  typeof coordinateTarget.nodeId === 'number'
1867
- ? requestedTarget.nodeId === coordinateTarget.nodeId
1878
+ ? requestedTarget.nodeId === coordinateTarget.nodeId ||
1879
+ ancestorMatchesRequested
1868
1880
  : requestedTarget.testID && coordinateTarget.testID
1869
1881
  ? requestedTarget.testID === coordinateTarget.testID
1882
+ || ancestorMatchesRequested
1870
1883
  : requestedTarget.id && coordinateTarget.id
1871
1884
  ? requestedTarget.id === coordinateTarget.id
1872
- : false
1885
+ || ancestorMatchesRequested
1886
+ : ancestorMatchesRequested
1887
+ if (!requestedTargetMatched) {
1888
+ return {
1889
+ requestedTargetMatched,
1890
+ requestedTarget,
1891
+ coordinateTarget,
1892
+ }
1893
+ }
1894
+ if (typeof t.activatePressAt !== 'function') {
1895
+ return { error: 'tap-target-activation-unavailable' }
1896
+ }
1897
+ const activation = await t.activatePressAt(
1898
+ ${payload.cx},
1899
+ ${payload.cy},
1900
+ requestedTarget.nodeId,
1901
+ )
1902
+ if (activation?.ok) {
1903
+ window.dispatchEvent(
1904
+ new CustomEvent('sootsim:agentAction', {
1905
+ detail: {
1906
+ type: 'tap',
1907
+ x: ${payload.cx},
1908
+ y: ${payload.cy},
1909
+ target: requestedTarget,
1910
+ },
1911
+ }),
1912
+ )
1913
+ }
1873
1914
  return {
1915
+ activation,
1874
1916
  requestedTargetMatched,
1875
1917
  requestedTarget,
1876
1918
  coordinateTarget,
@@ -1901,13 +1943,8 @@ async function tapResolvedTarget(bridge, args) {
1901
1943
  failure: "missed"
1902
1944
  };
1903
1945
  }
1904
- const dispatched = await bridge.send({
1905
- type: "tap",
1906
- x: payload.cx,
1907
- y: payload.cy,
1908
- target: requestedTarget
1909
- });
1910
- const result = dispatched && typeof dispatched === "object" ? { ...dispatched, ...verification } : { hit: !!dispatched, ...verification };
1946
+ const dispatched = verification?.activation?.tap ?? verification?.activation;
1947
+ const result = dispatched && typeof dispatched === "object" ? { ...dispatched, ...verification?.activation, ...verification } : { hit: !!dispatched, ...verification };
1911
1948
  lastResult = result;
1912
1949
  if (isTapSuccess(result)) return { payload, result, attempts };
1913
1950
  }
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.305 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.307 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // cli/commands/inspect/core.ts
4
4
  function resolveMaxMsFlag(args, fallbackMs) {
@@ -1767,18 +1767,60 @@ async function tapResolvedTarget(bridge, args) {
1767
1767
  type: node.type ?? null,
1768
1768
  }
1769
1769
  : null
1770
+ const coordinateAncestors = Array.isArray(inspected?.ancestors)
1771
+ ? inspected.ancestors
1772
+ : []
1773
+ const ancestorMatchesRequested = coordinateAncestors.some(
1774
+ (ancestor) =>
1775
+ (typeof requestedTarget.nodeId === 'number' &&
1776
+ ancestor?.nodeId === requestedTarget.nodeId) ||
1777
+ (requestedTarget.testID &&
1778
+ ancestor?.testID === requestedTarget.testID) ||
1779
+ (requestedTarget.id && ancestor?.id === requestedTarget.id),
1780
+ )
1770
1781
  const requestedTargetMatched =
1771
1782
  coordinateTarget === null
1772
1783
  ? false
1773
1784
  : typeof requestedTarget.nodeId === 'number' &&
1774
1785
  typeof coordinateTarget.nodeId === 'number'
1775
- ? requestedTarget.nodeId === coordinateTarget.nodeId
1786
+ ? requestedTarget.nodeId === coordinateTarget.nodeId ||
1787
+ ancestorMatchesRequested
1776
1788
  : requestedTarget.testID && coordinateTarget.testID
1777
1789
  ? requestedTarget.testID === coordinateTarget.testID
1790
+ || ancestorMatchesRequested
1778
1791
  : requestedTarget.id && coordinateTarget.id
1779
1792
  ? requestedTarget.id === coordinateTarget.id
1780
- : false
1793
+ || ancestorMatchesRequested
1794
+ : ancestorMatchesRequested
1795
+ if (!requestedTargetMatched) {
1796
+ return {
1797
+ requestedTargetMatched,
1798
+ requestedTarget,
1799
+ coordinateTarget,
1800
+ }
1801
+ }
1802
+ if (typeof t.activatePressAt !== 'function') {
1803
+ return { error: 'tap-target-activation-unavailable' }
1804
+ }
1805
+ const activation = await t.activatePressAt(
1806
+ ${payload.cx},
1807
+ ${payload.cy},
1808
+ requestedTarget.nodeId,
1809
+ )
1810
+ if (activation?.ok) {
1811
+ window.dispatchEvent(
1812
+ new CustomEvent('sootsim:agentAction', {
1813
+ detail: {
1814
+ type: 'tap',
1815
+ x: ${payload.cx},
1816
+ y: ${payload.cy},
1817
+ target: requestedTarget,
1818
+ },
1819
+ }),
1820
+ )
1821
+ }
1781
1822
  return {
1823
+ activation,
1782
1824
  requestedTargetMatched,
1783
1825
  requestedTarget,
1784
1826
  coordinateTarget,
@@ -1809,13 +1851,8 @@ async function tapResolvedTarget(bridge, args) {
1809
1851
  failure: "missed"
1810
1852
  };
1811
1853
  }
1812
- const dispatched = await bridge.send({
1813
- type: "tap",
1814
- x: payload.cx,
1815
- y: payload.cy,
1816
- target: requestedTarget
1817
- });
1818
- const result = dispatched && typeof dispatched === "object" ? { ...dispatched, ...verification } : { hit: !!dispatched, ...verification };
1854
+ const dispatched = verification?.activation?.tap ?? verification?.activation;
1855
+ const result = dispatched && typeof dispatched === "object" ? { ...dispatched, ...verification?.activation, ...verification } : { hit: !!dispatched, ...verification };
1819
1856
  lastResult = result;
1820
1857
  if (isTapSuccess(result)) return { payload, result, attempts };
1821
1858
  }