sootsim 0.1.297 → 0.1.299

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 (150) hide show
  1. package/dist-cli/bin.js +5 -5
  2. package/dist-cli/chunks/{agent-EYT6T2IB.js → agent-3UVOB3T3.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-UU4WV5UG.js → agent-wrapper-XVOWC72E.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-6SO36STZ.js → app-fonts-C222PFAQ.js} +2 -2
  5. package/dist-cli/chunks/{assert-M4AVODJW.js → assert-2MHAZDEL.js} +2 -2
  6. package/dist-cli/chunks/{auth-JJNP2L7C.js → auth-7DTOEHC2.js} +2 -2
  7. package/dist-cli/chunks/{beta-BIJ5MU6X.js → beta-WOHZHXPE.js} +2 -2
  8. package/dist-cli/chunks/{camera-FGQGSHG5.js → camera-XCUE5ZNM.js} +2 -2
  9. package/dist-cli/chunks/{chunk-QDL6YYL4.js → chunk-23JBOG4P.js} +1 -1
  10. package/dist-cli/chunks/{chunk-XLT6Y654.js → chunk-2FTQEDJC.js} +2 -2
  11. package/dist-cli/chunks/{chunk-VVSQCLBU.js → chunk-37ACY2R3.js} +2 -2
  12. package/dist-cli/chunks/{chunk-V4N34AOX.js → chunk-444BQYY3.js} +2 -2
  13. package/dist-cli/chunks/{chunk-HRPE3IND.js → chunk-4TYUHNHI.js} +2 -2
  14. package/dist-cli/chunks/{chunk-2JCUNWU2.js → chunk-5GRQIA5R.js} +2 -2
  15. package/dist-cli/chunks/{chunk-QRFC2ZZC.js → chunk-5VX2Y3ZB.js} +2 -2
  16. package/dist-cli/chunks/{chunk-ERRHAM2H.js → chunk-6RH6PEO3.js} +1 -1
  17. package/dist-cli/chunks/{chunk-OTYWESTV.js → chunk-ALOQJP4C.js} +2 -2
  18. package/dist-cli/chunks/{chunk-O4IGQ7XT.js → chunk-B6TCNXJO.js} +2 -2
  19. package/dist-cli/chunks/{chunk-AC2HNBEI.js → chunk-CBRE6JLP.js} +1 -1
  20. package/dist-cli/chunks/{chunk-4EAJWGB4.js → chunk-DGWM3X4S.js} +2 -2
  21. package/dist-cli/chunks/{chunk-BAFDYXCM.js → chunk-DUGY7KHN.js} +1 -1
  22. package/dist-cli/chunks/{chunk-XKACQ3MD.js → chunk-E2XMG2HC.js} +1 -1
  23. package/dist-cli/chunks/{chunk-LGU5JGT6.js → chunk-EJC4A2ZH.js} +1 -1
  24. package/dist-cli/chunks/{chunk-VTYVJJHN.js → chunk-F57XAX5N.js} +1 -1
  25. package/dist-cli/chunks/{chunk-DMJN3NC3.js → chunk-FLTBPGAQ.js} +2 -2
  26. package/dist-cli/chunks/{chunk-Z3VP4WF6.js → chunk-FMQ772D7.js} +1 -1
  27. package/dist-cli/chunks/{chunk-U37NEIQF.js → chunk-G377NNEV.js} +1 -1
  28. package/dist-cli/chunks/{chunk-Y7TQDOU5.js → chunk-HM42NCGX.js} +1 -1
  29. package/dist-cli/chunks/{chunk-SDHGPSEC.js → chunk-HVQA443X.js} +1 -1
  30. package/dist-cli/chunks/{chunk-EKA2DXOV.js → chunk-I4NK5VBB.js} +2 -2
  31. package/dist-cli/chunks/chunk-IGKB2HLF.js +4 -0
  32. package/dist-cli/chunks/{chunk-HTX6BHJZ.js → chunk-ITSHLH5U.js} +2 -2
  33. package/dist-cli/chunks/{chunk-WFXFYXUA.js → chunk-JXHCBXUD.js} +3 -3
  34. package/dist-cli/chunks/{chunk-YTTBKONB.js → chunk-KJQJ5VPA.js} +1 -1
  35. package/dist-cli/chunks/{chunk-7O6HJRGX.js → chunk-L3FA7WE5.js} +2 -2
  36. package/dist-cli/chunks/{chunk-I6HFNMYG.js → chunk-L7GNKY3A.js} +1 -1
  37. package/dist-cli/chunks/{chunk-FC2ULGKP.js → chunk-LEHK72DK.js} +2 -2
  38. package/dist-cli/chunks/{chunk-E4O5A2QP.js → chunk-LFWATDB3.js} +2 -2
  39. package/dist-cli/chunks/{chunk-HNQ2FYAG.js → chunk-MKIABOQK.js} +2 -2
  40. package/dist-cli/chunks/{chunk-KQ7WHS3C.js → chunk-MSYFSZKB.js} +1 -1
  41. package/dist-cli/chunks/{chunk-3QVML26F.js → chunk-MTOADQY2.js} +2 -2
  42. package/dist-cli/chunks/{chunk-445FUUZC.js → chunk-ONQYJYUM.js} +1 -1
  43. package/dist-cli/chunks/{chunk-W2QIWNCW.js → chunk-PHBVCGV3.js} +2 -2
  44. package/dist-cli/chunks/{chunk-IKQSTS2U.js → chunk-Q34734UC.js} +1 -1
  45. package/dist-cli/chunks/{chunk-6YIHNXMZ.js → chunk-QMDKE3C6.js} +1 -1
  46. package/dist-cli/chunks/{chunk-RZQ7SBBQ.js → chunk-QPPG5YZS.js} +2 -2
  47. package/dist-cli/chunks/{chunk-H6RQAFD5.js → chunk-RWXJ6OS4.js} +2 -2
  48. package/dist-cli/chunks/{chunk-IVV2KJTY.js → chunk-UNFMIX7B.js} +1 -1
  49. package/dist-cli/chunks/{chunk-I4G2BKZB.js → chunk-VR4ZUUA4.js} +1 -1
  50. package/dist-cli/chunks/{chunk-74ATIHUI.js → chunk-W3H6FBWV.js} +2 -2
  51. package/dist-cli/chunks/{chunk-X5J5A63F.js → chunk-WCAT3UC4.js} +2 -2
  52. package/dist-cli/chunks/{chunk-WDZ4PVKV.js → chunk-WM4RNTPN.js} +3 -3
  53. package/dist-cli/chunks/{chunk-K36T5764.js → chunk-WMLVFFXE.js} +3 -3
  54. package/dist-cli/chunks/{chunk-7XXIMTJR.js → chunk-XMOYKSSM.js} +2 -2
  55. package/dist-cli/chunks/{chunk-IMXVXXWX.js → chunk-YEE3MKPH.js} +2 -2
  56. package/dist-cli/chunks/{chunk-YNN2AELC.js → chunk-ZEXLS32P.js} +3 -3
  57. package/dist-cli/chunks/{chunk-OBKNUUIF.js → chunk-ZRDU2ENE.js} +2 -2
  58. package/dist-cli/chunks/{cleanup-Q4GUW4DU.js → cleanup-O6SD44HN.js} +2 -2
  59. package/dist-cli/chunks/{cli-version-Y74RBK4R.js → cli-version-PIYRRI52.js} +2 -2
  60. package/dist-cli/chunks/{compat-CSFBMTVO.js → compat-AWJLEWTH.js} +2 -2
  61. package/dist-cli/chunks/{config-4ZW7VYBV.js → config-6PLYOSBK.js} +2 -2
  62. package/dist-cli/chunks/{control-BFFHTY4I.js → control-K4QMNPXN.js} +2 -2
  63. package/dist-cli/chunks/daemon-HG6LHW3O.js +4 -0
  64. package/dist-cli/chunks/{debug-EEYUHHSR.js → debug-YCJCLH35.js} +3 -3
  65. package/dist-cli/chunks/{desktop-Q4NXGDCY.js → desktop-NRUWYSTV.js} +3 -3
  66. package/dist-cli/chunks/{detox-UMSQ33AB.js → detox-XTERPTZN.js} +2 -2
  67. package/dist-cli/chunks/{device-7STN6X5G.js → device-G4KJITB6.js} +2 -2
  68. package/dist-cli/chunks/{diagnose-7L67FGJY.js → diagnose-CKZOV5PL.js} +2 -2
  69. package/dist-cli/chunks/disk-cleanup-LX6FRBNM.js +4 -0
  70. package/dist-cli/chunks/drivers-X6XG4AX4.js +4 -0
  71. package/dist-cli/chunks/{film-2MP5BL6J.js → film-4T3QY3VT.js} +3 -3
  72. package/dist-cli/chunks/flow-EQPPW77J.js +4 -0
  73. package/dist-cli/chunks/help-IRKWFF27.js +4 -0
  74. package/dist-cli/chunks/{hidden-runtime-alias-HTJVTEHX.js → hidden-runtime-alias-S2PPAYI3.js} +2 -2
  75. package/dist-cli/chunks/{home-paths-KOZFBUVS.js → home-paths-MUZXK2LA.js} +2 -2
  76. package/dist-cli/chunks/inspect-VGNST6ZA.js +4 -0
  77. package/dist-cli/chunks/install-desktop-5H7A5R3Z.js +4 -0
  78. package/dist-cli/chunks/{login-XWITDS34.js → login-RH2KRRBQ.js} +4 -4
  79. package/dist-cli/chunks/{logout-C6EVSNGO.js → logout-GIEQBBFN.js} +2 -2
  80. package/dist-cli/chunks/{maestro-Y3RDSX5X.js → maestro-JEAOFJLT.js} +3 -3
  81. package/dist-cli/chunks/{maestro-generate-WHUYPFMX.js → maestro-generate-GAYZAFOV.js} +3 -3
  82. package/dist-cli/chunks/{mode-3D6W3Y2Y.js → mode-V2OWWT7B.js} +2 -2
  83. package/dist-cli/chunks/{optional-demo-registry-MRBZKL5R.js → optional-demo-registry-CZSJJFLR.js} +2 -2
  84. package/dist-cli/chunks/{perf-CRMSVQX4.js → perf-SNBPEVZL.js} +2 -2
  85. package/dist-cli/chunks/{permissions-RFASUZIH.js → permissions-MKMHM34X.js} +2 -2
  86. package/dist-cli/chunks/{record-SKX3SUNS.js → record-55URP7AI.js} +3 -3
  87. package/dist-cli/chunks/{report-issue-I7VXCIGQ.js → report-issue-I4JZBUDD.js} +2 -2
  88. package/dist-cli/chunks/runtime-XHMSVSWG.js +4 -0
  89. package/dist-cli/chunks/{screenshot-command-PIMVRGAW.js → screenshot-command-YGBR4Y2V.js} +3 -3
  90. package/dist-cli/chunks/{screenshots-capture-RRZUJDIO.js → screenshots-capture-S5CP6OWZ.js} +2 -2
  91. package/dist-cli/chunks/{serve-JHBXNJ77.js → serve-45NQNA7C.js} +2 -2
  92. package/dist-cli/chunks/{setup-A3I3R4FB.js → setup-HKTRNWH6.js} +2 -2
  93. package/dist-cli/chunks/{skills-7KS6HD4G.js → skills-HUDGHVRT.js} +2 -2
  94. package/dist-cli/chunks/{storage-H2ODISXF.js → storage-HOYYA2PS.js} +2 -2
  95. package/dist-cli/chunks/store-7QB3V42F.js +4 -0
  96. package/dist-cli/chunks/telemetry-HYW35ACO.js +4 -0
  97. package/dist-cli/chunks/{timeline-5N5AUCOX.js → timeline-2S3FS3AA.js} +2 -2
  98. package/dist-cli/chunks/{upgrade-UM4K5PH4.js → upgrade-KZSYVT3E.js} +2 -2
  99. package/dist-cli/chunks/upload-P3CQI4RQ.js +4 -0
  100. package/dist-cli/chunks/{version-B2MBTUMC.js → version-BWNEYFPL.js} +2 -2
  101. package/dist-cli/chunks/{web-ZM5Y5GRE.js → web-DXSNL2J6.js} +2 -2
  102. package/dist-cli/chunks/{what-happened-K443NB2H.js → what-happened-VT4FO7XN.js} +2 -2
  103. package/dist-lib/agent-daemon-client.cjs +1 -1
  104. package/dist-lib/agent-events.cjs +1 -1
  105. package/dist-lib/agent-identity.cjs +1 -1
  106. package/dist-lib/agent-sessions.cjs +1 -1
  107. package/dist-lib/attached-projects.cjs +1 -1
  108. package/dist-lib/auth/shared-session.cjs +1 -1
  109. package/dist-lib/backend-origin.cjs +1 -1
  110. package/dist-lib/beta.cjs +1 -1
  111. package/dist-lib/beta.mjs +1 -1
  112. package/dist-lib/bridge-constants.cjs +6 -1
  113. package/dist-lib/cli-constants.cjs +1 -1
  114. package/dist-lib/config.cjs +1 -1
  115. package/dist-lib/detox/index.cjs +1 -1
  116. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  117. package/dist-lib/home-paths.cjs +1 -1
  118. package/dist-lib/host/bridge-host.cjs +1 -1
  119. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  120. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  121. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  122. package/dist-lib/host/websocket-proxy.cjs +1 -1
  123. package/dist-lib/index.cjs +1 -1
  124. package/dist-lib/jump-to-source-babel.cjs +1 -1
  125. package/dist-lib/menu.cjs +1 -1
  126. package/dist-lib/menu.mjs +1 -1
  127. package/dist-lib/metro.cjs +1 -1
  128. package/dist-lib/profiles.cjs +1 -1
  129. package/dist-lib/render-mode.cjs +1 -1
  130. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  131. package/dist-lib/sdk.cjs +1 -1
  132. package/dist-lib/sdk.mjs +1 -1
  133. package/dist-lib/skills.cjs +60 -54
  134. package/dist-lib/vite.cjs +1 -1
  135. package/package.json +1 -1
  136. package/src/bridge-constants.ts +9 -0
  137. package/src/vite-plugin.ts +452 -396
  138. package/src/worklets-babel.ts +4 -2
  139. package/dist-cli/chunks/chunk-63UBXHOB.js +0 -4
  140. package/dist-cli/chunks/daemon-746DWYWS.js +0 -4
  141. package/dist-cli/chunks/disk-cleanup-IISQYADA.js +0 -4
  142. package/dist-cli/chunks/drivers-RD6OW2D5.js +0 -4
  143. package/dist-cli/chunks/flow-MKSEPFWS.js +0 -4
  144. package/dist-cli/chunks/help-4ADSAOGD.js +0 -4
  145. package/dist-cli/chunks/inspect-6D7Q27PN.js +0 -4
  146. package/dist-cli/chunks/install-desktop-WZBAUSKT.js +0 -4
  147. package/dist-cli/chunks/runtime-OJ26HJM7.js +0 -4
  148. package/dist-cli/chunks/store-ARKALTX7.js +0 -4
  149. package/dist-cli/chunks/telemetry-ZMRUVMCZ.js +0 -4
  150. package/dist-cli/chunks/upload-WGPI5XX6.js +0 -4
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.297 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.299 | (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;
@@ -556,8 +556,8 @@ var init_registry = __esm({
556
556
  range: ">=11.0.0",
557
557
  coverage: 0.5,
558
558
  note: "native-seam only: the published package runs unchanged and routes RNCWebView through the tenant-to-shell hosted iframe surface. the iframe keeps loading while parked behind a canvas placeholder and becomes interactive when promoted live.",
559
- working: "source.uri/source.html, HTML and cooperating-page injectedJavaScriptBeforeContentLoaded/injectedJavaScript, strict ReactNativeWebView.postMessage bridge envelope, onMessage synthetic event with navigation fields, onLoad/Start/End, onNavigationStateChange, ref.reload/stopLoading/injectJavaScript/postMessage, renderLoading, javaScriptEnabled sandbox, layout, inherited clipping and visibility, parked/live presentation",
560
- missing: "iframe pixels in canvas screenshots, script injection and ReactNativeWebView bootstrap for arbitrary cross-origin pages, cross-origin ref.goBack/goForward and truthful canGoBack/canGoForward values, failed HTTP/refused navigation callbacks (onError/onHttpError and renderError), onShouldStartLoadWithRequest, allowsBackForwardNavigationGestures, userAgent, dataDetectorTypes, cacheEnabled, incognito, scalesPageToFit, originWhitelist enforcement"
559
+ working: "source.uri/source.html, document-start ReactNativeWebView bootstrap and injectedJavaScriptBeforeContentLoaded/injectedJavaScript on source.html and percent-encoded data: URI pages, strict ReactNativeWebView.postMessage bridge envelope, onMessage synthetic event with navigation fields, onLoad/Start/End, onNavigationStateChange, ref.reload/stopLoading/injectJavaScript/postMessage, renderLoading, javaScriptEnabled sandbox, layout, inherited clipping and visibility, parked/live presentation",
560
+ missing: "iframe pixels in canvas screenshots, script injection and ReactNativeWebView bootstrap for remote pages, which get no bridge at all because a browser cannot script a cross-origin frame, the re-encoded data: URI a page reports as its own location.href, so onMessage carries the re-encoded url while onLoad and onNavigationStateChange carry the original where iOS reports one identical url for all three, cross-origin ref.goBack/goForward and truthful canGoBack/canGoForward values, failed HTTP/refused navigation callbacks (onError/onHttpError and renderError), onShouldStartLoadWithRequest, allowsBackForwardNavigationGestures, userAgent, dataDetectorTypes, cacheEnabled, incognito, scalesPageToFit, originWhitelist enforcement"
561
561
  }
562
562
  ]
563
563
  },
@@ -569,15 +569,15 @@ var init_registry = __esm({
569
569
  range: ">=55.0.0 <56.0.0",
570
570
  coverage: 0.3,
571
571
  note: "native-seam only: the published Expo wrapper resolves ExpoDomWebViewModule to the shared hosted webview implementation.",
572
- working: "DomWebView/WebView exports, source.uri rendering, onMessage, ref.injectJavaScript and ref.scrollTo for pages that cooperate with the shell message bridge, layout and parked/live presentation",
573
- missing: "reload and injectedJavaScriptObject, Expo modules bridge, arbitrary cross-origin script injection and scrolling, exact native scroll physics and native-only media/keyboard props, iframe pixels in canvas screenshots"
572
+ working: "DomWebView/WebView exports, source.uri rendering, document-start ReactNativeWebView bootstrap on percent-encoded data: URI pages, onMessage, ref.injectJavaScript and ref.scrollTo, layout and parked/live presentation",
573
+ missing: "reload and injectedJavaScriptObject, Expo modules bridge, any bridge at all on a remote page because a browser cannot script a cross-origin frame, cross-origin scrolling, the re-encoded data: URI a page reports as its own location.href, exact native scroll physics and native-only media/keyboard props, iframe pixels in canvas screenshots"
574
574
  },
575
575
  {
576
576
  range: ">=56.0.0 <58.0.0",
577
577
  coverage: 0.35,
578
578
  note: "native-seam only: the published Expo wrapper resolves ExpoDomWebViewModule to the shared hosted webview implementation.",
579
- working: "DomWebView/WebView exports, source.uri rendering, onMessage data/url/title, ref.reload/injectJavaScript/scrollTo, and reload-on-update behavior for injectedJavaScriptObject/injectedJavaScript on pages that cooperate with the shell message bridge, layout and parked/live presentation",
580
- missing: "document-start timing for injectedJavaScriptObject on URI pages, Expo modules bridge, arbitrary cross-origin script injection and scrolling, exact native scroll physics and native-only media/keyboard props, iframe pixels in canvas screenshots"
579
+ working: "DomWebView/WebView exports, source.uri rendering, onMessage data/url/title, ref.reload/injectJavaScript/scrollTo, document-start ReactNativeWebView bootstrap on percent-encoded data: URI pages, and reload-on-update behavior for injectedJavaScriptObject/injectedJavaScript, layout and parked/live presentation",
580
+ missing: "document-start timing for injectedJavaScriptObject on URI pages, Expo modules bridge, any bridge at all on a remote page because a browser cannot script a cross-origin frame, cross-origin scrolling, the re-encoded data: URI a page reports as its own location.href, exact native scroll physics and native-only media/keyboard props, iframe pixels in canvas screenshots"
581
581
  }
582
582
  ]
583
583
  },
@@ -784,9 +784,9 @@ var init_registry = __esm({
784
784
  {
785
785
  range: ">=4.0.0",
786
786
  coverage: 0.95,
787
- note: "string read/write via real navigator.clipboard, image read/write via real ClipboardItem on browsers that expose it (Chromium-based, plus Safari 13.4+). getImageAsync returns the upstream base64+size shape after probing dimensions via createImageBitmap; setImageAsync sniffs PNG magic and writes the right MIME type to the clipboard. addClipboardListener subscribes to the document copy event so in-page copies fire \u2014 external-app clipboard changes still don't (browser API limitation).",
788
- working: "getStringAsync / setStringAsync / setString / hasStringAsync via navigator.clipboard, getImageAsync returning { data: base64, size: { width, height } } via Clipboard.read + ClipboardItem.getType + createImageBitmap, setImageAsync decoding base64 \u2192 Blob and writing via Clipboard.write([new ClipboardItem(...)]), hasImageAsync via Clipboard.read inspection of item types, addClipboardListener / removeClipboardListener bound to document copy event",
789
- missing: "external-app clipboard-change events (no browser API), Firefox image read (no Clipboard.read support \u2014 falls back to null/false), text-format edge cases like RTF/HTML clipboard payloads (only text and image MIME types handled)"
787
+ note: "the published SDK 57 package runs unchanged against a real tenant navigator.clipboard seam for text, URL, and image content",
788
+ working: "getStringAsync, setStringAsync, setString, hasStringAsync, getUrlAsync, setUrlAsync, hasUrlAsync, getImageAsync returning base64 and dimensions, setImageAsync, hasImageAsync, listener subscription lifecycle, and isPasteButtonAvailable=false",
789
+ missing: "clipboard-change event delivery, ClipboardPasteButton native UI, Firefox image read, and rich-text clipboard payloads"
790
790
  }
791
791
  ]
792
792
  },
@@ -836,10 +836,10 @@ var init_registry = __esm({
836
836
  versions: [
837
837
  {
838
838
  range: ">=12.0.0",
839
- coverage: 0.95,
840
- note: "real window.open-backed openBrowserAsync / openAuthSessionAsync (opens a new tab), full upstream API surface present, all enums and presentation/result type constants match. real dismissBrowser closes the opened tab when we hold a reference.",
841
- working: "WebBrowserResultType, WebBrowserPresentationStyle, openBrowserAsync, openAuthSessionAsync, dismissBrowser, dismissAuthSession, warmUpAsync, coolDownAsync, mayInitWithUrlAsync, getCustomTabsSupportingBrowsersAsync, maybeCompleteAuthSession",
842
- missing: "openAuthSessionAsync redirect-result observation (browsers do not post the OAuth redirect back through the opener cleanly without an explicit message channel \u2014 apps configure a separate redirect handler today)"
839
+ coverage: 0.65,
840
+ note: "the published package runs unchanged; openBrowserAsync hands the URL to the host browser and browser-list and lifecycle methods preserve their public result shapes",
841
+ working: "openBrowserAsync host handoff, dismissBrowser result, warmUpAsync, coolDownAsync, mayInitWithUrlAsync, empty getCustomTabsSupportingBrowsersAsync result, and upstream enums and option processing",
842
+ missing: "an embedded SFSafariViewController or Chrome Custom Tab, closing the host browser tab from dismissBrowser, working auth-session completion and redirect delivery, cookie isolation, and native styling controls"
843
843
  }
844
844
  ]
845
845
  },
@@ -1110,10 +1110,10 @@ var init_registry = __esm({
1110
1110
  versions: [
1111
1111
  {
1112
1112
  range: ">=17.0.0",
1113
- coverage: 0.93,
1114
- note: "real navigator.geolocation for position, DeviceOrientationEvent for heading, and real geocodeAsync/reverseGeocodeAsync via the OpenStreetMap Nominatim public API (mapped to expo-location LocationGeocodedLocation/LocationGeocodedAddress shapes, resilient `[]` degradation on any failure). Foreground/background authorization uses the shared app-scoped system permission registry; browser geolocation consent remains a separate host capability. iOS Safari heading silently needs a user-gesture permission prompt that the stub does not surface.",
1115
- working: "requestForegroundPermissionsAsync, requestBackgroundPermissionsAsync, getForegroundPermissionsAsync, getBackgroundPermissionsAsync through the shared system permission registry, getCurrentPositionAsync via navigator.geolocation, getLastKnownPositionAsync, watchPositionAsync via navigator.geolocation.watchPosition, hasServicesEnabledAsync, startLocationUpdatesAsync/stopLocationUpdatesAsync/hasStartedLocationUpdatesAsync via task set, getHeadingAsync via DeviceOrientationEvent + ensureOrientationPermission, watchHeadingAsync subscribing to deviceorientation, Accuracy/ActivityType/GeofencingEventType/GeofencingRegionState/PermissionStatus enums",
1116
- missing: "iOS Safari DeviceOrientation user-gesture permission prompt (heading silently no-ops on iOS Safari until consumer invokes the requestPermission gesture themselves); background location updates when the page/tab is hidden (browser geolocation pauses); CLLocation-level heading accuracy (DeviceOrientationEvent is coarser); geocoding depth is Nominatim-bounded (no altitude/accuracy fields, public-rate-limited)"
1113
+ coverage: 0.5,
1114
+ note: "the published SDK 57 package runs unchanged against an ExpoLocation native seam backed by tenant geolocation and the shared app-scoped permission registry; restricted browser contexts use the simulator fallback position",
1115
+ working: "upstream enums, validation and permission hooks; getProviderStatusAsync, getCurrentPositionAsync, getLastKnownPositionAsync, foreground/background permission getters and requests, and hasServicesEnabledAsync",
1116
+ missing: "the SDK 57 subscriber-native contract for watchPositionAsync, heading, geocoding, motion activity, background location, geofencing, and Android network-provider enablement"
1117
1117
  }
1118
1118
  ]
1119
1119
  },
@@ -1518,10 +1518,10 @@ var init_registry = __esm({
1518
1518
  versions: [
1519
1519
  {
1520
1520
  range: ">=1.0.0",
1521
- coverage: 0.93,
1522
- note: "navigator.clipboard for text + ClipboardItem for images on browsers that expose it (Chromium-based, Safari 13.4+). getImage/getImagePNG/getImageJPG read via Clipboard.read + ClipboardItem.getType and convert to base64 matching upstream's contract; setImage decodes base64 \u2192 Blob (sniffing PNG magic for MIME) and writes via Clipboard.write([new ClipboardItem(...)]). On Firefox without Clipboard.read, image methods return empty/false matching the documented absent shape.",
1523
- working: "getString (readText), setString (writeText), getImage / getImagePNG / getImageJPG (real ClipboardItem read \u2192 base64), setImage (real ClipboardItem write), hasString (length check), hasImage (Clipboard.read items inspection), hasURL (regex test), useClipboard hook (state + setter + fetcher)",
1524
- missing: "addListener/removeAllListeners (browser API has no clipboard-change event for external apps; in-page copy event isn't covered yet on this stub), Firefox image read (no Clipboard.read support)"
1521
+ coverage: 0.85,
1522
+ note: "native-seam only: the published Clipboard object, NativeEventEmitter wiring, and useClipboard hook run from the bundle. RNCClipboard routes text through navigator.clipboard and images through ClipboardItem where the browser exposes it.",
1523
+ working: "published Clipboard object and two-item useClipboard hook, getString/setString/hasString, getImage/getImagePNG/getImageJPG/setImage/hasImage, hasURL/hasWebURL/hasNumber, load-safe listener methods",
1524
+ missing: "external-app clipboard-change events because browsers expose no matching event; setStrings joins values and getStrings returns one browser text item rather than preserving multiple pasteboard strings; Firefox image read because Clipboard.read is unavailable"
1525
1525
  }
1526
1526
  ]
1527
1527
  },
@@ -2040,9 +2040,10 @@ var init_registry = __esm({
2040
2040
  versions: [
2041
2041
  {
2042
2042
  range: ">=0.20.0",
2043
- coverage: 0.95,
2044
- note: "full OTA update API shape implemented as noops (correct for web sim)",
2045
- working: "channel, runtimeVersion, updateId, isEmbeddedLaunch, isEmergencyLaunch, isEnabled, currentlyRunning, checkForUpdateAsync, fetchUpdateAsync, reloadAsync, readLogEntriesAsync, clearLogEntriesAsync, getExtraParamsAsync, setExtraParamAsync, getNativeStateMachineContextAsync, addListener, useUpdates, UpdateCheckResultNotAvailableReason enum, UpdatesCheckAutomaticallyValue enum"
2043
+ coverage: 0.45,
2044
+ note: "stub \u2014 the published expo-updates constants, validation, result transformation, event fan-out, and useUpdates hook run unchanged against a disabled-development-build ExpoUpdates native seam",
2045
+ working: "disabled embedded-launch constants and currentlyRunning/useUpdates state; no-update check/fetch results; empty log read/clear; in-session get/set/unset extra params; upstream enums",
2046
+ missing: "OTA server checks, update download and storage, applying a downloaded bundle, reload-screen UI, native state-machine events, manifests, request overrides, and persistence"
2046
2047
  }
2047
2048
  ]
2048
2049
  },
@@ -2310,10 +2311,10 @@ var init_registry = __esm({
2310
2311
  versions: [
2311
2312
  {
2312
2313
  range: ">=14.0.0",
2313
- coverage: 0.95,
2314
- note: "upstream package JS runs against ExpoKeepAwake native-module seam",
2314
+ coverage: 0.55,
2315
+ note: "stub \u2014 upstream package JS runs against an ExpoKeepAwake seam that tracks activation tags and listener lifecycles but does not acquire a screen wake lock",
2315
2316
  working: 'upstream activateKeepAwake/activateKeepAwakeAsync/deactivateKeepAwake/useKeepAwake/addListener run unchanged; requireNativeModule("ExpoKeepAwake") provides activate, deactivate, isAvailableAsync, addListenerForTag',
2316
- missing: "actual Screen Wake Lock API acquisition is not held in the canvas worker; isAvailableAsync reflects browser wakeLock support"
2317
+ missing: "actual Screen Wake Lock API acquisition and release events are not available in the canvas worker; isAvailableAsync only reflects browser wakeLock support"
2317
2318
  }
2318
2319
  ]
2319
2320
  },
@@ -2389,10 +2390,10 @@ var init_registry = __esm({
2389
2390
  versions: [
2390
2391
  {
2391
2392
  range: ">=4.0.0",
2392
- coverage: 0.85,
2393
- note: "Android-only; full modern component/static API that drives the rendered Android navigation bar through the engine systemBars bridge (visibility, color, style, translucency feed the shell nav-bar + safe-area insets)",
2394
- working: "NavigationBar component with setStyle/setHidden statics, set/get background color, set border/position/behavior/translucent, setVisibilityAsync/getVisibilityAsync, visibility listeners + emitted change events, useVisibility hook, button style APIs; all setters publish to getEngineConfig().systemBars so android-system-bars.tsx actually shows/hides/tints the rendered nav bar and updates navigation-bar height/insets; non-Android runtimes return the upstream unavailable values",
2395
- missing: "OS contrast enforcement, exact per-emulator nav-bar pixel dimensions"
2393
+ coverage: 0.5,
2394
+ note: "the published SDK 57 package runs unchanged; SootSim iOS follows its upstream unsupported-platform implementation and returns hidden visibility while component/static setters remain load-safe",
2395
+ working: "SDK 57 NavigationBar component and setStyle/setHidden statics through the published iOS entry",
2396
+ missing: "Android navigation-bar visibility and style effects, visibility events, OS contrast enforcement, and per-emulator navigation-bar dimensions"
2396
2397
  }
2397
2398
  ]
2398
2399
  },
@@ -2430,10 +2431,10 @@ var init_registry = __esm({
2430
2431
  versions: [
2431
2432
  {
2432
2433
  range: ">=4.0.0",
2433
- coverage: 0.93,
2434
- note: 'full public API present and round-trips cleanly. background color persisted via sessionStorage and mirrored on globalThis.__sootsimSystemBg so a host-side snapshot consumer (or canvaskit-renderer when we wire this path) can read the latest value. tenant runs in a Web Worker so document.body is not the right target \u2014 sootsim renders the visible device area through the host shell. per registry rulebook ("score high when the full public API surface is present and returns the same unavailable/clean state"), the API itself meets the bar; only the visible effect on the device frame is deferred.',
2435
- working: "setBackgroundColorAsync (persisted across reloads, mirrored to globalThis), getBackgroundColorAsync (round-trip), enforceRootViewBackgroundColor (re-publishes stored color to the globalThis mirror)",
2436
- missing: "host-side consumer that reads __sootsimSystemBg and applies the color to the device-frame visible area (deferred \u2014 the API and persistence are correct, the visible effect is the wiring gap)"
2434
+ coverage: 0.65,
2435
+ note: "the published two-function package runs unchanged and its native seam round-trips and clears the processed root background color in both document and render-worker contexts",
2436
+ working: "setBackgroundColorAsync and getBackgroundColorAsync, including null clearing and React Native processed-color conversion",
2437
+ missing: "the background color is not applied to the CanvasKit device-frame root, and the value does not persist across simulator restarts"
2437
2438
  }
2438
2439
  ]
2439
2440
  },
@@ -3562,7 +3563,7 @@ var init_registry = __esm({
3562
3563
  {
3563
3564
  range: ">=0.1.0",
3564
3565
  coverage: 1,
3565
- note: "config-plugin only; no runtime JS API \u2014 no stub needed"
3566
+ note: "build-only \u2014 the published main entry exports withBuildProperties, a config plugin that mutates Android Gradle/ProGuard/settings files and iOS build properties during Expo prebuild; it exposes no application runtime API"
3566
3567
  }
3567
3568
  ]
3568
3569
  },
@@ -3572,9 +3573,10 @@ var init_registry = __esm({
3572
3573
  versions: [
3573
3574
  {
3574
3575
  range: ">=1.0.0",
3575
- coverage: 1,
3576
- note: "native-seam: the real package (`export * from 'expo-dev-menu'`) runs from the bundle; the ExpoDevMenu expo native module (openMenu/closeMenu/hideMenu/addDevMenuCallbacks) is installed inline by stubs/expo-modules-core.ts as an honest no-op so registerDevMenuItems and the menu controls boot without crashing. Custom dev-menu entries are not surfaced (a dev-build affordance), matching how the native module is absent in a production build.",
3577
- working: "openMenu, closeMenu, hideMenu, registerDevMenuItems"
3576
+ coverage: 0.4,
3577
+ note: "stub \u2014 the real package (`export * from 'expo-dev-menu'`) runs from the bundle; ExpoDevMenu exposes load-safe no-op menu controls and callback registration so development clients boot without fabricating a guest dev menu",
3578
+ working: "published openMenu, closeMenu, hideMenu, and registerDevMenuItems calls",
3579
+ missing: "guest dev-menu UI, registered custom items and callbacks, launcher integration, and development-client navigation"
3578
3580
  }
3579
3581
  ]
3580
3582
  },
@@ -3881,9 +3883,9 @@ var init_registry = __esm({
3881
3883
  {
3882
3884
  range: ">=0.30.0",
3883
3885
  coverage: 0.3,
3884
- note: "proxy framework \u2014 modules using nitro keep loading, but no native bindings actually run",
3885
- working: "NitroModules.createHybridObject returns chainable proxy (no crash), getHostObject returns same proxy, HybridObject type export, proxy toString/toPrimitive",
3886
- missing: "NitroModules.hasHybridObject always false, all real native JSI bindings (every call is a noop proxy \u2014 no actual native module functionality)"
3886
+ note: "native-seam only: the published Nitro Modules entrypoint installs a load-safe framework proxy, but no native JSI bindings run",
3887
+ working: "published entrypoint and type exports, NitroModules metadata, createHybridObject chainable proxy, hasHybridObject/getAllHybridObjectNames unavailable state, isRuntimeAlive false, callback wrapper, getHybridObjectConstructor",
3888
+ missing: "the native JSI framework implementation; package-specific HybridObjects work only where a separate compat seam registers them, and native memory accounting, ArrayBuffer ownership, cross-runtime boxed HybridObjects, and Nitro Views remain absent"
3887
3889
  }
3888
3890
  ]
3889
3891
  },
@@ -4146,12 +4148,12 @@ var init_registry = __esm({
4146
4148
  },
4147
4149
  "@expo/metro-runtime": {
4148
4150
  category: "Expo SDK",
4149
- stubType: "works",
4151
+ stubType: "build-only",
4150
4152
  versions: [
4151
4153
  {
4152
4154
  range: ">=55.0.0",
4153
4155
  coverage: 0.85,
4154
- note: "JS dev/runtime package \u2014 location, server-log, and rejection tracking install without app native modules",
4156
+ note: "tooling-only \u2014 Metro injects this package into development bundles; SootSim supports its location, server-log, rejection-tracking, refresh, and bootstrap helpers as bundler/runtime infrastructure rather than an application-facing API",
4155
4157
  working: "runtime entrypoint, location polyfill install, RSC runtime import, web getDevServer path, development log capture and promise rejection tracking on supported globals",
4156
4158
  missing: "native reload/logbox paths depend on RN DevSettings and internal native LogBox behavior; production app functionality is unaffected"
4157
4159
  }
@@ -4164,7 +4166,7 @@ var init_registry = __esm({
4164
4166
  {
4165
4167
  range: ">=55.0.0",
4166
4168
  coverage: 1,
4167
- note: "Expo Router server/SSR support package; no tenant native runtime surface"
4169
+ note: "build-only \u2014 the published 57.0.x main points to an omitted build/index entry while its shipped subpaths are Node SSR, static-rendering, server-manifest, and typed-route generation utilities; it exposes no application native runtime API"
4168
4170
  }
4169
4171
  ]
4170
4172
  },
@@ -4174,10 +4176,10 @@ var init_registry = __esm({
4174
4176
  versions: [
4175
4177
  {
4176
4178
  range: ">=2.0.0",
4177
- coverage: 0.9,
4179
+ coverage: 0.85,
4178
4180
  note: "pure JS WHATWG URL/URLSearchParams polyfill; NativeModules.BlobModule access is guarded",
4179
4181
  working: "URL, URLSearchParams, setupURLPolyfill, auto.js web guard, canParse, global URL/URLSearchParams installation",
4180
- missing: "React Native BlobModule-specific createObjectURL path is absent when BlobModule is unavailable; browser Blob URLs should use the native URL implementation"
4182
+ missing: "URLSearchParams.sort does not reorder keys in the published 3.0.0 dependency; React Native BlobModule-specific createObjectURL is absent when BlobModule is unavailable, so browser Blob URLs should use the native URL implementation"
4181
4183
  }
4182
4184
  ]
4183
4185
  },
@@ -4555,7 +4557,7 @@ var init_registry = __esm({
4555
4557
  range: ">=3.0.0",
4556
4558
  coverage: 0.95,
4557
4559
  note: "pure JS React error boundary with RN fallback UI",
4558
- working: "ErrorBoundary component, FallbackComponent/fallbackRender/FallbackComponent prop paths, onError/onReset, resetKeys, useErrorBoundary",
4560
+ working: "ErrorBoundary component, bundled fallback UI, custom FallbackComponent, onError callback, resetError recovery",
4559
4561
  missing: "fallback rendering fidelity follows core RN View/Text/Button primitives"
4560
4562
  }
4561
4563
  ]
@@ -5221,7 +5223,7 @@ var init_registry = __esm({
5221
5223
  versions: [
5222
5224
  {
5223
5225
  range: ">=4.0.0 <6.0.0",
5224
- coverage: 0.85,
5226
+ coverage: 0.65,
5225
5227
  note: "native-seam only \u2014 the published ExtensionStorage wrapper runs unchanged against an app-group-keyed UserDefaults analogue; the package also keeps its Expo config-plugin and Apple-target generation paths at build time",
5226
5228
  working: "ExtensionStorage constructor, string/number/object/array set and get, remove, app-group suite isolation, reloadWidget, and reloadControls",
5227
5229
  missing: "persistence across simulator restarts, sharing with a real Apple extension process, and WidgetKit or Control Center timeline reloads"
@@ -9897,7 +9899,7 @@ var init_registry = __esm({
9897
9899
  versions: [
9898
9900
  {
9899
9901
  range: ">=1.0.0",
9900
- coverage: 0.75,
9902
+ coverage: 0.55,
9901
9903
  note: "native-seam only \u2014 upstream Expo module export and event types run from the bundle; HardwareButtons reports volume buttons present, no camera button, and accepts camera-button attach/detach",
9902
9904
  working: "getCapabilitiesAsync, attachCameraButton, detachCameraButton, listener subscription shape",
9903
9905
  missing: "no hardware button event stream from the host OS"
@@ -10025,9 +10027,9 @@ var init_registry = __esm({
10025
10027
  versions: [
10026
10028
  {
10027
10029
  range: ">=1.0.0",
10028
- coverage: 0.75,
10029
- note: "native-seam only \u2014 upstream Expo module wrapper and item types run from the bundle; ExpoCoreSpotlight accepts index/remove calls and reports unavailable",
10030
- working: "indexItem, indexItems, removeItem(s), removeAllItems, removeAllItemsFromDomain, isAvailable=false",
10030
+ coverage: 0.4,
10031
+ note: "native-seam only \u2014 upstream Expo module wrapper and item types run from the bundle; ExpoCoreSpotlight reports unavailable and accepts index/remove calls so guarded app paths remain load-safe",
10032
+ working: "published package import, item validation and method shapes, indexItem(s), removeItem(s), removeAllItems, removeAllItemsFromDomain, isAvailable=false",
10031
10033
  missing: "no CoreSpotlight index or OS search tap-through"
10032
10034
  }
10033
10035
  ]
@@ -10713,6 +10715,7 @@ __export(bridge_constants_exports, {
10713
10715
  DEFAULT_SOOTSIM_BRIDGE_URL: () => DEFAULT_SOOTSIM_BRIDGE_URL,
10714
10716
  SOOTSIM_BRIDGE_SIM_CLOSE_CODE: () => SOOTSIM_BRIDGE_SIM_CLOSE_CODE,
10715
10717
  SOOTSIM_BRIDGE_SIM_CLOSE_REASON: () => SOOTSIM_BRIDGE_SIM_CLOSE_REASON,
10718
+ isSootsimBridgeHealth: () => isSootsimBridgeHealth,
10716
10719
  resolveSootsimBridgePort: () => resolveSootsimBridgePort,
10717
10720
  resolveSootsimBridgePortForHttpPort: () => resolveSootsimBridgePortForHttpPort,
10718
10721
  resolveSootsimBridgePortForRuntimeLocation: () => resolveSootsimBridgePortForRuntimeLocation,
@@ -10809,6 +10812,9 @@ function resolveSootsimBridgeWebSocketUrl(input) {
10809
10812
  href: input.href
10810
10813
  });
10811
10814
  }
10815
+ function isSootsimBridgeHealth(value, expectedPort) {
10816
+ return typeof value === "object" && value !== null && Reflect.get(value, "ok") === true && Reflect.get(value, "bridgePort") === expectedPort;
10817
+ }
10812
10818
  var DEFAULT_SOOTSIM_BRIDGE_PORT, DEFAULT_SOOTSIM_BRIDGE_URL, CONTRAST_DEV_HTTP_BASE_PORT, SOOTSIM_SITE_DEV_HTTP_BASE_PORT, SOOTSIM_SHELL_DEV_HTTP_BASE_PORT, LOCAL_DEV_HTTP_BASE_PORTS, MAX_LOCAL_DEV_PORT_OFFSET, SOOTSIM_BRIDGE_SIM_CLOSE_CODE, SOOTSIM_BRIDGE_SIM_CLOSE_REASON;
10813
10819
  var init_bridge_constants = __esm({
10814
10820
  "src/bridge-constants.ts"() {
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.297 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.299 | (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;
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sootsim",
3
- "version": "0.1.297",
3
+ "version": "0.1.299",
4
4
  "description": "sootsim CLI + vite/metro plugins + skills registry. bridge client for driving the proprietary sootsim-engine over WebSocket.",
5
5
  "author": "Tamagui LLC",
6
6
  "license": "MIT",
@@ -140,6 +140,15 @@ export function resolveSootsimBridgeWebSocketUrl(input: {
140
140
  })
141
141
  }
142
142
 
143
+ export function isSootsimBridgeHealth(value: unknown, expectedPort: number): boolean {
144
+ return (
145
+ typeof value === 'object' &&
146
+ value !== null &&
147
+ Reflect.get(value, 'ok') === true &&
148
+ Reflect.get(value, 'bridgePort') === expectedPort
149
+ )
150
+ }
151
+
143
152
  // private websocket close code used when the daemon intentionally closes a
144
153
  // sim. browser clients treat it as terminal and skip their normal reconnect
145
154
  // loop; playwright-owned sims use it to close their hosting context.