sootsim 0.1.278 → 0.1.280

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 (144) hide show
  1. package/README.md +5 -0
  2. package/dist-cli/bin.js +4 -4
  3. package/dist-cli/chunks/{agent-XXLMNBZW.js → agent-ROXS5UKV.js} +2 -2
  4. package/dist-cli/chunks/{agent-wrapper-TIC5PI56.js → agent-wrapper-D5NKHRC2.js} +2 -2
  5. package/dist-cli/chunks/{app-fonts-6ADTXUMZ.js → app-fonts-NLXHDDFY.js} +2 -2
  6. package/dist-cli/chunks/{assert-HRMV7GOE.js → assert-6BX5ZJC6.js} +2 -2
  7. package/dist-cli/chunks/{auth-7LQ5Z5FE.js → auth-7IVPJHYP.js} +2 -2
  8. package/dist-cli/chunks/beta-ACSL6DHP.js +2 -0
  9. package/dist-cli/chunks/{camera-45Q746XO.js → camera-NCWVBECI.js} +2 -2
  10. package/dist-cli/chunks/{chunk-7WL6EUXR.js → chunk-33ZEVH5C.js} +2 -2
  11. package/dist-cli/chunks/{chunk-ARKDZWF6.js → chunk-4MOKMNXN.js} +1 -1
  12. package/dist-cli/chunks/{chunk-DKG4EC2K.js → chunk-4X7KRVUQ.js} +1 -1
  13. package/dist-cli/chunks/{chunk-FVJSE6Y2.js → chunk-5JMI6AGC.js} +2 -2
  14. package/dist-cli/chunks/{chunk-NJRMZW73.js → chunk-A4YDHKVX.js} +3 -3
  15. package/dist-cli/chunks/{chunk-DE5TUBCV.js → chunk-AJLMKI3T.js} +1 -1
  16. package/dist-cli/chunks/{chunk-ZVG74GYW.js → chunk-AVOOC775.js} +1 -1
  17. package/dist-cli/chunks/{chunk-XHUCJ2KM.js → chunk-C6PU2Y3O.js} +1 -1
  18. package/dist-cli/chunks/{chunk-EVJMR3LZ.js → chunk-CNTAENS7.js} +2 -2
  19. package/dist-cli/chunks/{chunk-X7F3RBC5.js → chunk-DUH4SRYN.js} +2 -2
  20. package/dist-cli/chunks/{chunk-TZN3SE6S.js → chunk-EF7SUCU5.js} +1 -1
  21. package/dist-cli/chunks/{chunk-ECIZ5WCX.js → chunk-EMQ6G7EP.js} +1 -1
  22. package/dist-cli/chunks/chunk-F3R6EZXX.js +1 -0
  23. package/dist-cli/chunks/{chunk-5PZJV6XA.js → chunk-FDXWQHE2.js} +2 -2
  24. package/dist-cli/chunks/{chunk-QLDOJRZW.js → chunk-G4JIE3MG.js} +2 -2
  25. package/dist-cli/chunks/{chunk-JX7MP2NT.js → chunk-GLOQZ4YT.js} +1 -1
  26. package/dist-cli/chunks/{chunk-P7HEGSYC.js → chunk-HVOLXPNB.js} +1 -1
  27. package/dist-cli/chunks/{chunk-F37BG6K2.js → chunk-HVW7KD5H.js} +1 -1
  28. package/dist-cli/chunks/{chunk-WNV2DVC3.js → chunk-HYEFBMSG.js} +4 -4
  29. package/dist-cli/chunks/{chunk-2PSJER4C.js → chunk-JBL6N36H.js} +2 -2
  30. package/dist-cli/chunks/{chunk-G6BXG7VY.js → chunk-JNI6O5ID.js} +3 -3
  31. package/dist-cli/chunks/{chunk-YHZKEENM.js → chunk-JRRMIVSC.js} +2 -2
  32. package/dist-cli/chunks/{chunk-BBHVSEKE.js → chunk-L4PHKH3P.js} +2 -2
  33. package/dist-cli/chunks/{chunk-VJQOMNNO.js → chunk-MUMR4ITL.js} +1 -1
  34. package/dist-cli/chunks/{chunk-TG4UX6X4.js → chunk-MYY572U5.js} +1 -1
  35. package/dist-cli/chunks/{chunk-TWKJ3ATX.js → chunk-NFJHEVT2.js} +1 -1
  36. package/dist-cli/chunks/{chunk-ZNJMLHBI.js → chunk-NGMNL724.js} +2 -2
  37. package/dist-cli/chunks/{chunk-UTQRTNQ4.js → chunk-NK7I3QVD.js} +1 -1
  38. package/dist-cli/chunks/{chunk-QSC5VVWF.js → chunk-NOEMQR47.js} +3 -3
  39. package/dist-cli/chunks/{chunk-MUUN57VH.js → chunk-NSKS43OW.js} +1 -1
  40. package/dist-cli/chunks/{chunk-S3W6UTLA.js → chunk-OUHXKX62.js} +1 -1
  41. package/dist-cli/chunks/{chunk-7EVU3MWE.js → chunk-QRGDTI6D.js} +2 -2
  42. package/dist-cli/chunks/{chunk-HWHU5RFR.js → chunk-QUW7SRYQ.js} +2 -2
  43. package/dist-cli/chunks/{chunk-5QHDYNQI.js → chunk-SZOPUPSH.js} +3 -3
  44. package/dist-cli/chunks/{chunk-ZM3E3WYD.js → chunk-TGARSKJS.js} +1 -1
  45. package/dist-cli/chunks/{chunk-PDW6B3N2.js → chunk-UEDGP46Q.js} +1 -1
  46. package/dist-cli/chunks/{chunk-NDEEFUJ6.js → chunk-UPXILQIY.js} +2 -2
  47. package/dist-cli/chunks/{chunk-RPWKLHC2.js → chunk-V5FIROGW.js} +2 -2
  48. package/dist-cli/chunks/{chunk-GR5BX5TR.js → chunk-V7ISEJ3S.js} +2 -2
  49. package/dist-cli/chunks/{chunk-MEYBUDD7.js → chunk-XRXBF2B4.js} +2 -2
  50. package/dist-cli/chunks/{chunk-SEHYHPX6.js → chunk-YATEKNXL.js} +6 -6
  51. package/dist-cli/chunks/{chunk-BO7YSTF6.js → chunk-YNXFCE4C.js} +2 -2
  52. package/dist-cli/chunks/{chunk-IPJCQYVZ.js → chunk-ZSTVFJS3.js} +2 -2
  53. package/dist-cli/chunks/{chunk-4E5WFXKO.js → chunk-ZT5AT5TL.js} +2 -2
  54. package/dist-cli/chunks/cli-version-FQD2KSQY.js +2 -0
  55. package/dist-cli/chunks/{compat-IJU4VGYM.js → compat-EB3D6QQF.js} +3 -3
  56. package/dist-cli/chunks/{config-2SHXJ2GU.js → config-RNKFWNIV.js} +2 -2
  57. package/dist-cli/chunks/{control-52XRNMQU.js → control-7ZDTAZUN.js} +2 -2
  58. package/dist-cli/chunks/daemon-FEOCQWJE.js +2 -0
  59. package/dist-cli/chunks/{debug-45L37VYU.js → debug-RXXHRVIL.js} +3 -3
  60. package/dist-cli/chunks/{desktop-4VLW64XT.js → desktop-BN6J4PCR.js} +3 -3
  61. package/dist-cli/chunks/{detox-IDGGQW4W.js → detox-7JRAP55Z.js} +2 -2
  62. package/dist-cli/chunks/{device-HQ2LR23U.js → device-ECQZUWAB.js} +2 -2
  63. package/dist-cli/chunks/{diagnose-7P32NQQT.js → diagnose-WCYZVJYK.js} +2 -2
  64. package/dist-cli/chunks/drivers-F56K2VMH.js +2 -0
  65. package/dist-cli/chunks/{film-34ZWQM5M.js → film-PBJTMXO6.js} +3 -3
  66. package/dist-cli/chunks/flow-EZ2VB7CJ.js +2 -0
  67. package/dist-cli/chunks/help-VHLOJJWI.js +2 -0
  68. package/dist-cli/chunks/{hidden-runtime-alias-NAO4LEYR.js → hidden-runtime-alias-R3PN4QI7.js} +2 -2
  69. package/dist-cli/chunks/{home-paths-R52VTJVG.js → home-paths-W3I2O5KQ.js} +2 -2
  70. package/dist-cli/chunks/inspect-T74KPORE.js +2 -0
  71. package/dist-cli/chunks/install-desktop-NQWN2YAX.js +2 -0
  72. package/dist-cli/chunks/{login-ULGG3AF7.js → login-SHL26YD7.js} +4 -4
  73. package/dist-cli/chunks/{logout-M25IUROE.js → logout-GACILXYF.js} +2 -2
  74. package/dist-cli/chunks/{maestro-IPTOVBYJ.js → maestro-7IPHVNRV.js} +3 -3
  75. package/dist-cli/chunks/{maestro-generate-VUTU4VNF.js → maestro-generate-OXINOJKT.js} +3 -3
  76. package/dist-cli/chunks/{mode-MA4LYY4V.js → mode-UDK37JMK.js} +2 -2
  77. package/dist-cli/chunks/optional-demo-registry-HMXG44PF.js +2 -0
  78. package/dist-cli/chunks/{perf-ZN3IL63B.js → perf-V55KCRZZ.js} +2 -2
  79. package/dist-cli/chunks/{record-SQ57IC2Y.js → record-TOZEIESK.js} +3 -3
  80. package/dist-cli/chunks/runtime-MAEGIKCE.js +2 -0
  81. package/dist-cli/chunks/{screenshot-command-ZLMVKK4L.js → screenshot-command-M7RQDY24.js} +3 -3
  82. package/dist-cli/chunks/{screenshots-capture-IZ3JR7T5.js → screenshots-capture-OOOIEOT3.js} +2 -2
  83. package/dist-cli/chunks/{serve-TKHUQGXN.js → serve-JIESP3OL.js} +14 -14
  84. package/dist-cli/chunks/{setup-5NVBFROQ.js → setup-HKBKU6RB.js} +3 -3
  85. package/dist-cli/chunks/{skills-HJOM4YXG.js → skills-LC76VPDE.js} +2 -2
  86. package/dist-cli/chunks/{storage-LYK5KHYR.js → storage-WS32EPR5.js} +2 -2
  87. package/dist-cli/chunks/store-SS33J2RI.js +2 -0
  88. package/dist-cli/chunks/telemetry-ITXU4MEQ.js +2 -0
  89. package/dist-cli/chunks/{timeline-C5LGS3MG.js → timeline-DD7JXLF4.js} +2 -2
  90. package/dist-cli/chunks/{upgrade-NCN5MUYQ.js → upgrade-PRO7EDS7.js} +2 -2
  91. package/dist-cli/chunks/upload-T5FFFASC.js +2 -0
  92. package/dist-cli/chunks/{version-HID3W64J.js → version-XPBJ4NKL.js} +2 -2
  93. package/dist-cli/chunks/{web-W3AMI7S7.js → web-RYQFPTU7.js} +2 -2
  94. package/dist-cli/chunks/{what-happened-ZRUTW7UX.js → what-happened-PX2UYSNH.js} +2 -2
  95. package/dist-lib/agent-daemon-client.cjs +1 -1
  96. package/dist-lib/agent-events.cjs +1 -1
  97. package/dist-lib/agent-identity.cjs +1 -1
  98. package/dist-lib/agent-sessions.cjs +1 -1
  99. package/dist-lib/attached-projects.cjs +1 -1
  100. package/dist-lib/auth/shared-session.cjs +1 -1
  101. package/dist-lib/backend-origin.cjs +1 -1
  102. package/dist-lib/beta.cjs +1 -1
  103. package/dist-lib/beta.mjs +1 -1
  104. package/dist-lib/bridge-constants.cjs +1 -1
  105. package/dist-lib/cli-constants.cjs +1 -1
  106. package/dist-lib/config.cjs +1 -1
  107. package/dist-lib/detox/index.cjs +1 -1
  108. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  109. package/dist-lib/home-paths.cjs +1 -1
  110. package/dist-lib/host/bridge-host.cjs +28 -14
  111. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  112. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  113. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  114. package/dist-lib/host/websocket-proxy.cjs +1 -1
  115. package/dist-lib/index.cjs +1 -1
  116. package/dist-lib/jump-to-source-babel.cjs +1 -1
  117. package/dist-lib/menu.cjs +1 -1
  118. package/dist-lib/menu.mjs +1 -1
  119. package/dist-lib/metro.cjs +1 -1
  120. package/dist-lib/profiles.cjs +1 -1
  121. package/dist-lib/render-mode.cjs +1 -1
  122. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  123. package/dist-lib/sdk.cjs +4 -1
  124. package/dist-lib/sdk.mjs +4 -1
  125. package/dist-lib/skills.cjs +74 -19
  126. package/dist-lib/vite.cjs +1 -1
  127. package/package.json +1 -1
  128. package/skills/sootsim-debug/SKILL.md +1 -2
  129. package/skills/sootsim-setup/SKILL.md +2 -2
  130. package/src/host/bridge-host.ts +33 -18
  131. package/dist-cli/chunks/beta-KZ3ONL3P.js +0 -2
  132. package/dist-cli/chunks/chunk-26LYIC2U.js +0 -1
  133. package/dist-cli/chunks/cli-version-4OTVDRSR.js +0 -2
  134. package/dist-cli/chunks/daemon-4TRUUJSU.js +0 -2
  135. package/dist-cli/chunks/drivers-GCYZRW6W.js +0 -2
  136. package/dist-cli/chunks/flow-P3EAPWSK.js +0 -2
  137. package/dist-cli/chunks/help-AJOB3QUG.js +0 -2
  138. package/dist-cli/chunks/inspect-CEH5GHXF.js +0 -2
  139. package/dist-cli/chunks/install-desktop-GPGYMR4M.js +0 -2
  140. package/dist-cli/chunks/optional-demo-registry-432VIZ2M.js +0 -2
  141. package/dist-cli/chunks/runtime-T26WFIMO.js +0 -2
  142. package/dist-cli/chunks/store-2TRIGABQ.js +0 -2
  143. package/dist-cli/chunks/telemetry-COV2VHEW.js +0 -2
  144. package/dist-cli/chunks/upload-BWDXLQV4.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{C as N,D as F,F as y,Q as T,R as b,S}from"./chunk-G6BXG7VY.js";import{g as A,i as _}from"./chunk-SEHYHPX6.js";import"./chunk-S3W6UTLA.js";import{c as k}from"./chunk-P7HEGSYC.js";import"./chunk-PDW6B3N2.js";import"./chunk-ZM3E3WYD.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
1
+ /*! sootsim v0.1.280 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{C as N,D as F,F as y,Q as T,R as b,S}from"./chunk-JNI6O5ID.js";import{g as A,i as _}from"./chunk-YATEKNXL.js";import"./chunk-OUHXKX62.js";import{c as k}from"./chunk-HVOLXPNB.js";import"./chunk-UEDGP46Q.js";import"./chunk-TGARSKJS.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
3
3
  sootsim what-happened \u2014 show recent events from the semantic timeline
4
4
 
5
5
  usage:
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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/beta.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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/beta.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // src/beta.ts
4
4
  var IS_BETA = true;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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;
@@ -4780,26 +4780,40 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
4780
4780
  if (sim?.ws.readyState === import_ws2.WebSocket.OPEN) return sim;
4781
4781
  return null;
4782
4782
  }
4783
- const primary = this.primarySimId != null ? this.sims.get(this.primarySimId) : null;
4784
- if (primary?.ws.readyState === import_ws2.WebSocket.OPEN && primary.url) return primary;
4785
- let pagelessFallback = null;
4786
- for (const sim of this.sims.values()) {
4787
- if (sim.ws.readyState !== import_ws2.WebSocket.OPEN) continue;
4788
- if (sim.url) return sim;
4789
- pagelessFallback ??= sim;
4790
- }
4791
- if (primary?.ws.readyState === import_ws2.WebSocket.OPEN) return primary;
4792
- return pagelessFallback;
4783
+ const candidates = this.getDefaultSimCandidates();
4784
+ return candidates.find((sim) => sim.id === this.primarySimId) ?? candidates[0] ?? null;
4785
+ }
4786
+ getDefaultSimCandidates() {
4787
+ const open = Array.from(this.sims.values()).filter(
4788
+ (sim) => sim.ws.readyState === import_ws2.WebSocket.OPEN
4789
+ );
4790
+ const registered = open.filter((sim) => sim.url);
4791
+ return registered.length > 0 ? registered : open;
4793
4792
  }
4794
4793
  async waitForSim(simId, options = {}) {
4795
4794
  const attempts = options.attempts ?? 10;
4796
4795
  const intervalMs = options.intervalMs ?? 200;
4797
4796
  for (let attempt = 0; attempt < attempts; attempt++) {
4798
- const sim = this.getOpenSim(simId);
4799
- if (sim) return sim;
4797
+ if (!simId) {
4798
+ const candidates = this.getDefaultSimCandidates();
4799
+ if (candidates.length > 1) {
4800
+ throw new Error(
4801
+ `multiple sims are connected: ${candidates.map((sim) => sim.id).join(", ")}; run \`sootsim use <sim>\` or pass \`--sim <sim>\``
4802
+ );
4803
+ }
4804
+ const candidate = candidates[0];
4805
+ if (candidate) return candidate;
4806
+ } else {
4807
+ const sim = this.getOpenSim(simId);
4808
+ if (sim) return sim;
4809
+ }
4800
4810
  await new Promise((resolve) => setTimeout(resolve, intervalMs));
4801
4811
  }
4802
- throw new Error(simId ? `no sim connected with id ${simId}` : "no sim connected");
4812
+ if (!simId) throw new Error("no sim connected");
4813
+ const openSimIds = this.getDefaultSimCandidates().map((sim) => sim.id);
4814
+ throw new Error(
4815
+ `no sim connected with id ${simId}` + (openSimIds.length > 0 ? `; connected sims: ${openSimIds.join(", ")}` : "")
4816
+ );
4803
4817
  }
4804
4818
  shouldPromoteSim(sim) {
4805
4819
  const current = this.primarySimId ? this.sims.get(this.primarySimId) : null;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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/dist-lib/sdk.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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;
@@ -1003,6 +1003,9 @@ async function inspectWaitReady(bridge, timeoutMs = 2e4, options = {}) {
1003
1003
  bridgeError = "";
1004
1004
  } catch (error) {
1005
1005
  bridgeError = error instanceof Error ? error.message : String(error);
1006
+ if (bridgeError.startsWith("multiple sims are connected:") || bridgeError.startsWith("saved sim ")) {
1007
+ throw error;
1008
+ }
1006
1009
  }
1007
1010
  const now = Date.now();
1008
1011
  const status = {
package/dist-lib/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // cli/commands/inspect/core.ts
4
4
  function resolveMaxMsFlag(args, fallbackMs) {
@@ -912,6 +912,9 @@ async function inspectWaitReady(bridge, timeoutMs = 2e4, options = {}) {
912
912
  bridgeError = "";
913
913
  } catch (error) {
914
914
  bridgeError = error instanceof Error ? error.message : String(error);
915
+ if (bridgeError.startsWith("multiple sims are connected:") || bridgeError.startsWith("saved sim ")) {
916
+ throw error;
917
+ }
915
918
  }
916
919
  const now = Date.now();
917
920
  const status = {
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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;
@@ -5801,9 +5801,49 @@ var init_registry = __esm({
5801
5801
  versions: [
5802
5802
  {
5803
5803
  range: ">=15.0.0",
5804
- coverage: 1,
5805
- note: 'load-safe noop \u2014 GLView component renders null; createContextAsync rejects with "host bridge required" so apps with optional WebGL paths take their fallback',
5806
- missing: "no WebGL canvas in tenant worker. browsers have WebGL but sootsim renders through CanvasKit on the host \u2014 bridging requires a future host-side GL surface"
5804
+ coverage: 0.9,
5805
+ note: "native-seam only. upstream GLView and context APIs run from the guest bundle over the browser WebGL2 implementation in the tenant worker",
5806
+ working: "GLView context creation, WebGL2 commands, endFrameEXP presentation, view resizing, headless createContextAsync and destroyContextAsync, full-canvas snapshots, and @react-three/fiber native Canvas rendering",
5807
+ missing: "camera textures, native object destruction, experimental worklet contexts, asset-object texture uploads, and exact native MSAA sample counts"
5808
+ }
5809
+ ]
5810
+ },
5811
+ three: {
5812
+ category: "UI Components",
5813
+ stubType: "works",
5814
+ versions: [
5815
+ {
5816
+ range: ">=0.156.0",
5817
+ coverage: 0.96,
5818
+ note: "real pure-JavaScript package runs from the guest bundle; WebGLRenderer uses the browser WebGL2 context supplied by expo-gl",
5819
+ working: "scenes, cameras, geometry, lights, standard materials, shaders, animation, and WebGLRenderer",
5820
+ missing: "browser DOM integrations and loaders that require unsupported expo-gl asset-object texture uploads"
5821
+ }
5822
+ ]
5823
+ },
5824
+ "@react-three/fiber": {
5825
+ category: "UI Components",
5826
+ stubType: "works",
5827
+ versions: [
5828
+ {
5829
+ range: ">=9.0.0",
5830
+ coverage: 0.93,
5831
+ note: "real native entry and reconciler run from the guest bundle; Canvas mounts upstream expo-gl and presents each useFrame render through endFrameEXP",
5832
+ working: "native Canvas, declarative Three elements, useFrame, useThree, lights, materials, cameras, events, and continuous animation",
5833
+ missing: "asset-backed texture loading and browser-only DOM event integrations"
5834
+ }
5835
+ ]
5836
+ },
5837
+ "expo-three": {
5838
+ category: "UI Components",
5839
+ stubType: "works",
5840
+ versions: [
5841
+ {
5842
+ range: ">=8.0.0",
5843
+ coverage: 0.75,
5844
+ note: "real pure-JavaScript package runs from the guest bundle on the expo-gl WebGL2 context",
5845
+ working: "Three renderer construction and helpers that use plain WebGL resources",
5846
+ missing: "asset and texture helpers that depend on expo-gl asset-object uploads, camera textures, or browser DOM image elements"
5807
5847
  }
5808
5848
  ]
5809
5849
  },
@@ -15439,26 +15479,40 @@ var init_bridge_host = __esm({
15439
15479
  if (sim?.ws.readyState === import_ws2.WebSocket.OPEN) return sim;
15440
15480
  return null;
15441
15481
  }
15442
- const primary = this.primarySimId != null ? this.sims.get(this.primarySimId) : null;
15443
- if (primary?.ws.readyState === import_ws2.WebSocket.OPEN && primary.url) return primary;
15444
- let pagelessFallback = null;
15445
- for (const sim of this.sims.values()) {
15446
- if (sim.ws.readyState !== import_ws2.WebSocket.OPEN) continue;
15447
- if (sim.url) return sim;
15448
- pagelessFallback ??= sim;
15449
- }
15450
- if (primary?.ws.readyState === import_ws2.WebSocket.OPEN) return primary;
15451
- return pagelessFallback;
15482
+ const candidates = this.getDefaultSimCandidates();
15483
+ return candidates.find((sim) => sim.id === this.primarySimId) ?? candidates[0] ?? null;
15484
+ }
15485
+ getDefaultSimCandidates() {
15486
+ const open = Array.from(this.sims.values()).filter(
15487
+ (sim) => sim.ws.readyState === import_ws2.WebSocket.OPEN
15488
+ );
15489
+ const registered = open.filter((sim) => sim.url);
15490
+ return registered.length > 0 ? registered : open;
15452
15491
  }
15453
15492
  async waitForSim(simId, options = {}) {
15454
15493
  const attempts = options.attempts ?? 10;
15455
15494
  const intervalMs = options.intervalMs ?? 200;
15456
15495
  for (let attempt = 0; attempt < attempts; attempt++) {
15457
- const sim = this.getOpenSim(simId);
15458
- if (sim) return sim;
15496
+ if (!simId) {
15497
+ const candidates = this.getDefaultSimCandidates();
15498
+ if (candidates.length > 1) {
15499
+ throw new Error(
15500
+ `multiple sims are connected: ${candidates.map((sim) => sim.id).join(", ")}; run \`sootsim use <sim>\` or pass \`--sim <sim>\``
15501
+ );
15502
+ }
15503
+ const candidate = candidates[0];
15504
+ if (candidate) return candidate;
15505
+ } else {
15506
+ const sim = this.getOpenSim(simId);
15507
+ if (sim) return sim;
15508
+ }
15459
15509
  await new Promise((resolve5) => setTimeout(resolve5, intervalMs));
15460
15510
  }
15461
- throw new Error(simId ? `no sim connected with id ${simId}` : "no sim connected");
15511
+ if (!simId) throw new Error("no sim connected");
15512
+ const openSimIds = this.getDefaultSimCandidates().map((sim) => sim.id);
15513
+ throw new Error(
15514
+ `no sim connected with id ${simId}` + (openSimIds.length > 0 ? `; connected sims: ${openSimIds.join(", ")}` : "")
15515
+ );
15462
15516
  }
15463
15517
  shouldPromoteSim(sim) {
15464
15518
  const current = this.primarySimId ? this.sims.get(this.primarySimId) : null;
@@ -16254,10 +16308,11 @@ function createBridge(wsPort, opts = {}) {
16254
16308
  return await sendOnce(sentSimId);
16255
16309
  } catch (error) {
16256
16310
  const message = error instanceof Error ? error.message : String(error);
16257
- if (opts.simIdSource !== "flag" && sentSimId && cmd.simId === void 0 && message === `no sim connected with id ${sentSimId}`) {
16311
+ const missingSimMessage = `no sim connected with id ${sentSimId}`;
16312
+ if (opts.simIdSource !== "flag" && sentSimId && cmd.simId === void 0 && (message === missingSimMessage || message.startsWith(`${missingSimMessage};`))) {
16258
16313
  clearCurrentSimId();
16259
16314
  throw new Error(
16260
- `saved sim ${sentSimId} is gone; run \`sootsim list\` and \`sootsim use <sim>\`, or open a fresh sim`
16315
+ `saved sim ${sentSimId} is gone${message.slice(missingSimMessage.length)}; run \`sootsim list\` and \`sootsim use <sim>\`, or open a fresh sim`
16261
16316
  );
16262
16317
  }
16263
16318
  throw error;
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.280 | (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.278",
3
+ "version": "0.1.280",
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",
@@ -62,8 +62,7 @@ regression test. a pile of ad-hoc logs helps no one and gets deleted.
62
62
  changes, and duplicate strings. add `testID` during implementation and
63
63
  query against it.
64
64
  - **pin a sim once.** if more than one is live, an unpinned command
65
- hits the first and produces results from the wrong app. `sootsim use
66
- <id>` at the start of the workflow.
65
+ refuses to choose. run `sootsim use <id>` at the start of the workflow.
67
66
  - **`debug eval` is an escape hatch.** if a top-level command feels
68
67
  broken or missing, file an issue — every agent after you benefits from
69
68
  a better CLI, not a pile of ad-hoc scripts.
@@ -18,8 +18,8 @@ debugging or `/sootsim-test` for writing tests.
18
18
  exists for a reason — forcing strands the other agent and corrupts the
19
19
  bridge state. use `sootsim open --new` to start a fresh sim instead.
20
20
  - **don't switch sims mid-investigation.** pin once with `sootsim use
21
- <id>` and keep it pinned. an unpinned command hits the first sim,
22
- which produces baffling results when more than one is live.
21
+ <id>` and keep it pinned. an unpinned command refuses to choose when more
22
+ than one driveable sim is live.
23
23
  - **an empty `sootsim list` is not "broken sootsim"** — it usually means the
24
24
  daemon is down, the dev server port is wrong, or the runtime is missing.
25
25
  walk the recovery checklist before reinstalling.
@@ -2253,21 +2253,19 @@ export class SootSimBridgeHost {
2253
2253
  if (sim?.ws.readyState === WebSocket.OPEN) return sim
2254
2254
  return null
2255
2255
  }
2256
- const primary = this.primarySimId != null ? this.sims.get(this.primarySimId) : null
2257
- if (primary?.ws.readyState === WebSocket.OPEN && primary.url) return primary
2258
- // prefer a sim that has actually reported a page over a bare-connected
2259
- // zombie — falling back to a url-less socket hands every default-target
2260
- // command to something that can't render or be driven (QA F19-2).
2261
- let pagelessFallback: BridgeSimConnection | null = null
2262
- for (const sim of this.sims.values()) {
2263
- if (sim.ws.readyState !== WebSocket.OPEN) continue
2264
- if (sim.url) return sim
2265
- pagelessFallback ??= sim
2266
- }
2267
- // a live primary with no url still beats nothing, and so does any other
2268
- // page-less open socket — only as the last resort.
2269
- if (primary?.ws.readyState === WebSocket.OPEN) return primary
2270
- return pagelessFallback
2256
+ const candidates = this.getDefaultSimCandidates()
2257
+ return candidates.find((sim) => sim.id === this.primarySimId) ?? candidates[0] ?? null
2258
+ }
2259
+
2260
+ private getDefaultSimCandidates(): BridgeSimConnection[] {
2261
+ const open = Array.from(this.sims.values()).filter(
2262
+ (sim) => sim.ws.readyState === WebSocket.OPEN,
2263
+ )
2264
+ // a registered page is driveable; a bare host-shell socket is not. use
2265
+ // page-less sockets only when no registered page exists, matching the
2266
+ // default-routing behavior above.
2267
+ const registered = open.filter((sim) => sim.url)
2268
+ return registered.length > 0 ? registered : open
2271
2269
  }
2272
2270
 
2273
2271
  private async waitForSim(
@@ -2277,11 +2275,28 @@ export class SootSimBridgeHost {
2277
2275
  const attempts = options.attempts ?? 10
2278
2276
  const intervalMs = options.intervalMs ?? 200
2279
2277
  for (let attempt = 0; attempt < attempts; attempt++) {
2280
- const sim = this.getOpenSim(simId)
2281
- if (sim) return sim
2278
+ if (!simId) {
2279
+ const candidates = this.getDefaultSimCandidates()
2280
+ if (candidates.length > 1) {
2281
+ throw new Error(
2282
+ `multiple sims are connected: ${candidates.map((sim) => sim.id).join(', ')}; ` +
2283
+ 'run `sootsim use <sim>` or pass `--sim <sim>`',
2284
+ )
2285
+ }
2286
+ const candidate = candidates[0]
2287
+ if (candidate) return candidate
2288
+ } else {
2289
+ const sim = this.getOpenSim(simId)
2290
+ if (sim) return sim
2291
+ }
2282
2292
  await new Promise((resolve) => setTimeout(resolve, intervalMs))
2283
2293
  }
2284
- throw new Error(simId ? `no sim connected with id ${simId}` : 'no sim connected')
2294
+ if (!simId) throw new Error('no sim connected')
2295
+ const openSimIds = this.getDefaultSimCandidates().map((sim) => sim.id)
2296
+ throw new Error(
2297
+ `no sim connected with id ${simId}` +
2298
+ (openSimIds.length > 0 ? `; connected sims: ${openSimIds.join(', ')}` : ''),
2299
+ )
2285
2300
  }
2286
2301
 
2287
2302
  private shouldPromoteSim(sim: BridgeSimConnection): boolean {
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d}from"./chunk-ARKDZWF6.js";import"./chunk-ZM3E3WYD.js";export{d as BETA_ASK_HEADLINE,b as BETA_LABEL,c as BETA_TAGLINE,a as IS_BETA};
@@ -1 +0,0 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-F37BG6K2.js";import"./chunk-ZM3E3WYD.js";export{a as getCliVersion};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c,d,e}from"./chunk-QLDOJRZW.js";import"./chunk-IPJCQYVZ.js";import"./chunk-4E5WFXKO.js";import"./chunk-7WL6EUXR.js";import"./chunk-BBHVSEKE.js";import"./chunk-FVJSE6Y2.js";import"./chunk-MEYBUDD7.js";import"./chunk-S3W6UTLA.js";import"./chunk-P7HEGSYC.js";import"./chunk-ECIZ5WCX.js";import"./chunk-PDW6B3N2.js";import"./chunk-F37BG6K2.js";import"./chunk-ARKDZWF6.js";import"./chunk-ZVG74GYW.js";import"./chunk-ZM3E3WYD.js";export{c as daemonInstall,b as getDaemonServiceStatus,a as runDaemon,d as teardownDaemonService,e as teardownSootsimHome};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import"./chunk-26LYIC2U.js";import{f as a,g as b,h as c,i as d,j as e,k as f,l as g,m as h,n as i}from"./chunk-NDEEFUJ6.js";import"./chunk-JX7MP2NT.js";import"./chunk-MUUN57VH.js";import"./chunk-P7HEGSYC.js";import"./chunk-PDW6B3N2.js";import"./chunk-ZM3E3WYD.js";export{e as ALL_DRIVERS,i as buildDriverListRows,a as chromiumDriver,b as electronDriver,f as getAllDrivers,g as getDriver,c as playwrightDriver,h as resolveDriver,d as systemDriver};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{c,d,e,f,g,h}from"./chunk-5QHDYNQI.js";import"./chunk-YHZKEENM.js";import"./chunk-UTQRTNQ4.js";import{c as a,d as b}from"./chunk-WNV2DVC3.js";import"./chunk-EVJMR3LZ.js";import"./chunk-5PZJV6XA.js";import"./chunk-GR5BX5TR.js";import"./chunk-HWHU5RFR.js";import"./chunk-2PSJER4C.js";import"./chunk-TZN3SE6S.js";import"./chunk-NDEEFUJ6.js";import"./chunk-JX7MP2NT.js";import"./chunk-XHUCJ2KM.js";import"./chunk-TWKJ3ATX.js";import"./chunk-MUUN57VH.js";import"./chunk-DE5TUBCV.js";import"./chunk-ZNJMLHBI.js";import"./chunk-G6BXG7VY.js";import"./chunk-SEHYHPX6.js";import"./chunk-DKG4EC2K.js";import"./chunk-IPJCQYVZ.js";import"./chunk-4E5WFXKO.js";import"./chunk-FVJSE6Y2.js";import"./chunk-MEYBUDD7.js";import"./chunk-S3W6UTLA.js";import"./chunk-P7HEGSYC.js";import"./chunk-ECIZ5WCX.js";import"./chunk-PDW6B3N2.js";import"./chunk-RPWKLHC2.js";import"./chunk-ZVG74GYW.js";import"./chunk-ZM3E3WYD.js";export{e as discoverSootsimUrl,c as getLastFlowPreviewUploadResult,d as getLastFlowTraceSteps,g as hoistLeadingSimFlag,a as parseFlowFile,f as runFlowPlayback,h as runMaestroAuthoring,b as validateFlowFile};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c}from"./chunk-7WL6EUXR.js";import"./chunk-BBHVSEKE.js";import"./chunk-FVJSE6Y2.js";import"./chunk-MEYBUDD7.js";import"./chunk-S3W6UTLA.js";import"./chunk-P7HEGSYC.js";import"./chunk-ECIZ5WCX.js";import"./chunk-PDW6B3N2.js";import"./chunk-F37BG6K2.js";import"./chunk-ARKDZWF6.js";import"./chunk-ZVG74GYW.js";import"./chunk-ZM3E3WYD.js";export{c as printCommandHelp,b as printGroupHelp,a as printHelp};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{j as a,k as b}from"./chunk-WNV2DVC3.js";import"./chunk-EVJMR3LZ.js";import"./chunk-HWHU5RFR.js";import"./chunk-2PSJER4C.js";import"./chunk-TZN3SE6S.js";import"./chunk-NDEEFUJ6.js";import"./chunk-JX7MP2NT.js";import"./chunk-XHUCJ2KM.js";import"./chunk-TWKJ3ATX.js";import"./chunk-MUUN57VH.js";import"./chunk-DE5TUBCV.js";import"./chunk-ZNJMLHBI.js";import"./chunk-G6BXG7VY.js";import"./chunk-SEHYHPX6.js";import"./chunk-DKG4EC2K.js";import"./chunk-FVJSE6Y2.js";import"./chunk-MEYBUDD7.js";import"./chunk-S3W6UTLA.js";import"./chunk-P7HEGSYC.js";import"./chunk-ECIZ5WCX.js";import"./chunk-PDW6B3N2.js";import"./chunk-RPWKLHC2.js";import"./chunk-ZVG74GYW.js";import"./chunk-ZM3E3WYD.js";export{a as printShellPerfReport,b as runInspect};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-QSC5VVWF.js";import"./chunk-JX7MP2NT.js";import"./chunk-TG4UX6X4.js";import"./chunk-ZM3E3WYD.js";export{a as runInstallDesktop};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a,b,c}from"./chunk-DE5TUBCV.js";import"./chunk-ZM3E3WYD.js";export{c as __withOptionalDemoAppsForTests,a as loadOptionalDemoApps,b as optionalDemoAppsSync};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-NJRMZW73.js";import"./chunk-X7F3RBC5.js";import"./chunk-SEHYHPX6.js";import"./chunk-S3W6UTLA.js";import"./chunk-P7HEGSYC.js";import"./chunk-PDW6B3N2.js";import"./chunk-ZM3E3WYD.js";export{a as runRuntime};
@@ -1,2 +0,0 @@
1
- /*! sootsim v0.1.278 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{a}from"./chunk-RPWKLHC2.js";import"./chunk-ZVG74GYW.js";import"./chunk-ZM3E3WYD.js";export{a as settingsStore};