sootsim 0.1.201 → 0.1.202

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 (148) hide show
  1. package/dist-cli/bin.js +5 -4
  2. package/dist-cli/chunks/{agent-SHGFOKZN.js → agent-SP6EE5XV.js} +2 -2
  3. package/dist-cli/chunks/{agent-wrapper-3O4ZW24C.js → agent-wrapper-PWZVJ3OK.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-KZOBGGZQ.js → app-fonts-EMJB6QLM.js} +2 -2
  5. package/dist-cli/chunks/{assert-RZCBKONA.js → assert-H2B6TDXT.js} +2 -2
  6. package/dist-cli/chunks/{auth-PBD7GLXL.js → auth-SOHXBYLQ.js} +2 -2
  7. package/dist-cli/chunks/beta-CCNQQ73A.js +2 -0
  8. package/dist-cli/chunks/{camera-5OOLGGLN.js → camera-ULLCBM5H.js} +2 -2
  9. package/dist-cli/chunks/{chunk-WHNPGZX4.js → chunk-2CID4LNK.js} +3 -3
  10. package/dist-cli/chunks/{chunk-423YVBZK.js → chunk-2V43M57C.js} +1 -1
  11. package/dist-cli/chunks/{chunk-SQXH3XGO.js → chunk-3ZENZOIX.js} +2 -2
  12. package/dist-cli/chunks/{chunk-NIDV74L2.js → chunk-4KT2BGQE.js} +1 -1
  13. package/dist-cli/chunks/{chunk-GBUUYMPP.js → chunk-4KVSVFRF.js} +1 -1
  14. package/dist-cli/chunks/{chunk-HVSDT56M.js → chunk-4NM6JBYH.js} +1 -1
  15. package/dist-cli/chunks/chunk-5J63S2NM.js +1 -0
  16. package/dist-cli/chunks/{chunk-MQEEYPOK.js → chunk-5SKKMM7E.js} +1 -1
  17. package/dist-cli/chunks/chunk-6FZ6SNVP.js +4 -0
  18. package/dist-cli/chunks/{chunk-SZVYOFMB.js → chunk-6QFVYLX6.js} +2 -2
  19. package/dist-cli/chunks/{chunk-XAFLM5JS.js → chunk-AAQVPSIV.js} +2 -2
  20. package/dist-cli/chunks/{chunk-ENY46QHT.js → chunk-B6JB4THC.js} +2 -2
  21. package/dist-cli/chunks/{chunk-PMPQ57UY.js → chunk-BZ7AW7ZB.js} +2 -2
  22. package/dist-cli/chunks/{chunk-EVCOHQPK.js → chunk-CB7LDZKJ.js} +3 -3
  23. package/dist-cli/chunks/{chunk-D6CTB275.js → chunk-CGJ2U6ST.js} +1 -1
  24. package/dist-cli/chunks/chunk-DKBKU55D.js +2 -0
  25. package/dist-cli/chunks/{chunk-YOPEO6SA.js → chunk-DRJ4YWUG.js} +1 -1
  26. package/dist-cli/chunks/{chunk-F5TOTCUW.js → chunk-EMOZJ773.js} +2 -2
  27. package/dist-cli/chunks/{chunk-CPVTNQAS.js → chunk-ENXHZGSL.js} +1 -1
  28. package/dist-cli/chunks/{chunk-T6WXCSWP.js → chunk-F2LLN4U7.js} +2 -2
  29. package/dist-cli/chunks/{chunk-USGQNFAM.js → chunk-GUYKLSTX.js} +1 -1
  30. package/dist-cli/chunks/chunk-GZKT53SA.js +7 -0
  31. package/dist-cli/chunks/{chunk-7GG4TZ4L.js → chunk-HZYHSLNH.js} +2 -2
  32. package/dist-cli/chunks/chunk-I6O7NBPZ.js +1 -0
  33. package/dist-cli/chunks/{chunk-JEJV3UHZ.js → chunk-JP7J325R.js} +2 -2
  34. package/dist-cli/chunks/{chunk-3RAGDMGM.js → chunk-K3UBHPVP.js} +1 -1
  35. package/dist-cli/chunks/{chunk-HIWE4YYN.js → chunk-KRGHRSKY.js} +2 -2
  36. package/dist-cli/chunks/{chunk-QTI33DV5.js → chunk-KYGUR727.js} +2 -2
  37. package/dist-cli/chunks/{chunk-RN662UDP.js → chunk-LNDRRZP3.js} +2 -2
  38. package/dist-cli/chunks/{chunk-NYNAI5PO.js → chunk-OG6TFGYF.js} +2 -2
  39. package/dist-cli/chunks/{chunk-AHJ2WJST.js → chunk-PL4GXELT.js} +1 -1
  40. package/dist-cli/chunks/{chunk-S2AQ4WGX.js → chunk-RJVIUQK4.js} +1 -1
  41. package/dist-cli/chunks/{chunk-ZSWQLDDQ.js → chunk-ROYBEBG2.js} +1 -1
  42. package/dist-cli/chunks/{chunk-SKGV3OSH.js → chunk-RS7QLHEH.js} +2 -2
  43. package/dist-cli/chunks/{chunk-FITJFYBO.js → chunk-RWXCSRNE.js} +2 -2
  44. package/dist-cli/chunks/{chunk-CHVGDYQJ.js → chunk-RZQO4Q7E.js} +1 -1
  45. package/dist-cli/chunks/{chunk-SVM25PDV.js → chunk-SQBX2HS7.js} +6 -6
  46. package/dist-cli/chunks/{chunk-FPRZHFV2.js → chunk-TANTCV45.js} +2 -2
  47. package/dist-cli/chunks/chunk-W4Y3JJX6.js +29 -0
  48. package/dist-cli/chunks/{chunk-WJ7YQAKC.js → chunk-WILIVPUU.js} +38 -38
  49. package/dist-cli/chunks/{chunk-63EDUOKZ.js → chunk-WVDWIXPH.js} +2 -2
  50. package/dist-cli/chunks/{chunk-7672K2JN.js → chunk-Z5VMWFCY.js} +1 -1
  51. package/dist-cli/chunks/cli-version-Z4NGLJLH.js +2 -0
  52. package/dist-cli/chunks/{compat-NNM7DTTO.js → compat-YW3OJ7RX.js} +3 -3
  53. package/dist-cli/chunks/{config-LBGQRC2P.js → config-ZGOXFEX4.js} +2 -2
  54. package/dist-cli/chunks/{control-5DHHQZ26.js → control-75JRFOYV.js} +2 -2
  55. package/dist-cli/chunks/daemon-SHFBQRHD.js +2 -0
  56. package/dist-cli/chunks/{debug-PILWFGN3.js → debug-4APEP64L.js} +3 -3
  57. package/dist-cli/chunks/{desktop-CZ43IZFV.js → desktop-CS7S4CXK.js} +3 -3
  58. package/dist-cli/chunks/detox-7R7DOKQM.js +50 -0
  59. package/dist-cli/chunks/{device-M26JCUHY.js → device-EIDKLBEK.js} +2 -2
  60. package/dist-cli/chunks/{diagnose-HZZMVPQZ.js → diagnose-J2F7MJAJ.js} +2 -2
  61. package/dist-cli/chunks/drivers-55L7BHDF.js +2 -0
  62. package/dist-cli/chunks/flow-AHWVTHJP.js +2 -0
  63. package/dist-cli/chunks/help-C4BTMPEE.js +2 -0
  64. package/dist-cli/chunks/home-paths-WVCREWI7.js +2 -0
  65. package/dist-cli/chunks/inspect-M4Z4SSSB.js +2 -0
  66. package/dist-cli/chunks/install-desktop-PVRUAEMA.js +2 -0
  67. package/dist-cli/chunks/{login-VBCYZKJ6.js → login-EOBJ7CZ4.js} +4 -4
  68. package/dist-cli/chunks/{logout-J22GLKHX.js → logout-RL7D66VQ.js} +2 -2
  69. package/dist-cli/chunks/maestro-F66ZIJKA.js +96 -0
  70. package/dist-cli/chunks/{mode-XN46XIMK.js → mode-R2VIW66U.js} +2 -2
  71. package/dist-cli/chunks/optional-demo-registry-ILX5YV34.js +2 -0
  72. package/dist-cli/chunks/{perf-ZIYESQRA.js → perf-PGYO5BBR.js} +2 -2
  73. package/dist-cli/chunks/{record-L74E3HCL.js → record-IGDVHC67.js} +3 -3
  74. package/dist-cli/chunks/runtime-43RJGUGS.js +2 -0
  75. package/dist-cli/chunks/{screenshot-command-ZCI5QE4T.js → screenshot-command-HX4GVUJM.js} +2 -2
  76. package/dist-cli/chunks/{serve-CNDRR7XN.js → serve-3TFVHYLY.js} +18 -18
  77. package/dist-cli/chunks/{setup-XZDN7XMI.js → setup-JSPPRVET.js} +3 -3
  78. package/dist-cli/chunks/{skills-KJK67CVB.js → skills-LK3B76W7.js} +2 -2
  79. package/dist-cli/chunks/{storage-UOLMRHLQ.js → storage-NC5RNBUA.js} +2 -2
  80. package/dist-cli/chunks/store-3XMEKA6H.js +2 -0
  81. package/dist-cli/chunks/telemetry-CVJ5YZNS.js +2 -0
  82. package/dist-cli/chunks/test-2CXPLH5N.js +69 -0
  83. package/dist-cli/chunks/{timeline-UJFIJ2GT.js → timeline-WDTEVELN.js} +2 -2
  84. package/dist-cli/chunks/upgrade-TT2IJSNJ.js +4 -0
  85. package/dist-cli/chunks/upload-4HMNB4HA.js +2 -0
  86. package/dist-cli/chunks/version-JUNH4FOR.js +4 -0
  87. package/dist-cli/chunks/{web-QP4KDHR6.js → web-BWCW26ZA.js} +2 -2
  88. package/dist-cli/chunks/{what-happened-VW274SXG.js → what-happened-L6EEB6MB.js} +2 -2
  89. package/dist-lib/agent-daemon-client.cjs +1 -1
  90. package/dist-lib/agent-events.cjs +1 -1
  91. package/dist-lib/agent-identity.cjs +1 -1
  92. package/dist-lib/agent-sessions.cjs +1 -1
  93. package/dist-lib/attached-projects.cjs +1 -1
  94. package/dist-lib/auth/shared-session.cjs +1 -1
  95. package/dist-lib/backend-origin.cjs +1 -1
  96. package/dist-lib/beta.cjs +1 -1
  97. package/dist-lib/beta.mjs +1 -1
  98. package/dist-lib/bridge-constants.cjs +1 -1
  99. package/dist-lib/cli-constants.cjs +1 -1
  100. package/dist-lib/config.cjs +1 -1
  101. package/dist-lib/detox/index.cjs +1 -1
  102. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  103. package/dist-lib/home-paths.cjs +32 -1
  104. package/dist-lib/host/bridge-host.cjs +51 -2
  105. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  106. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  107. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  108. package/dist-lib/host/websocket-proxy.cjs +1 -1
  109. package/dist-lib/index.cjs +1 -1
  110. package/dist-lib/jump-to-source-babel.cjs +1 -1
  111. package/dist-lib/menu.cjs +1 -1
  112. package/dist-lib/menu.mjs +1 -1
  113. package/dist-lib/metro.cjs +1 -1
  114. package/dist-lib/profiles.cjs +1 -1
  115. package/dist-lib/render-mode.cjs +1 -1
  116. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  117. package/dist-lib/sdk.cjs +1 -1
  118. package/dist-lib/sdk.mjs +1 -1
  119. package/dist-lib/skills.cjs +104 -19
  120. package/dist-lib/vite.cjs +1 -1
  121. package/package.json +1 -1
  122. package/src/home-paths.ts +48 -1
  123. package/src/host/bridge-host.ts +12 -0
  124. package/src/runtime-delivery.ts +59 -9
  125. package/dist-cli/chunks/beta-EJBRLRKG.js +0 -2
  126. package/dist-cli/chunks/chunk-3W273A5J.js +0 -4
  127. package/dist-cli/chunks/chunk-5GICTRK5.js +0 -1
  128. package/dist-cli/chunks/chunk-AGSCFR4P.js +0 -27
  129. package/dist-cli/chunks/chunk-O56GZV3H.js +0 -1
  130. package/dist-cli/chunks/chunk-ORIISY22.js +0 -6
  131. package/dist-cli/chunks/cli-version-WTA2LUDV.js +0 -2
  132. package/dist-cli/chunks/daemon-3KGXTPXJ.js +0 -2
  133. package/dist-cli/chunks/detox-D6XW7Y4V.js +0 -49
  134. package/dist-cli/chunks/drivers-7ZM3KW22.js +0 -2
  135. package/dist-cli/chunks/flow-DDDWJ4KD.js +0 -2
  136. package/dist-cli/chunks/help-23GXSWP3.js +0 -2
  137. package/dist-cli/chunks/home-paths-746ZDH2I.js +0 -2
  138. package/dist-cli/chunks/inspect-T37ALZRL.js +0 -2
  139. package/dist-cli/chunks/install-desktop-FSY2ND5S.js +0 -2
  140. package/dist-cli/chunks/maestro-5LWJ2S6K.js +0 -96
  141. package/dist-cli/chunks/optional-demo-registry-YF4W5LPU.js +0 -2
  142. package/dist-cli/chunks/runtime-7WSR27U6.js +0 -2
  143. package/dist-cli/chunks/store-FGCNPJBA.js +0 -2
  144. package/dist-cli/chunks/telemetry-QEO7INJC.js +0 -2
  145. package/dist-cli/chunks/test-5DK2XCRU.js +0 -69
  146. package/dist-cli/chunks/upgrade-CXZFJIH7.js +0 -4
  147. package/dist-cli/chunks/upload-ZFINR6K3.js +0 -2
  148. package/dist-cli/chunks/version-XMSYOSAX.js +0 -4
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.201 | (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-ZSWQLDDQ.js";import{g as A,i as _}from"./chunk-HIWE4YYN.js";import"./chunk-AHJ2WJST.js";import{b as k}from"./chunk-CHVGDYQJ.js";import"./chunk-ORIISY22.js";import"./chunk-NIDV74L2.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.202 | (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-ROYBEBG2.js";import{g as A,i as _}from"./chunk-KRGHRSKY.js";import"./chunk-PL4GXELT.js";import{b as k}from"./chunk-RZQO4Q7E.js";import"./chunk-GZKT53SA.js";import"./chunk-4KT2BGQE.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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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;
@@ -44,6 +44,7 @@ __export(home_paths_exports, {
44
44
  claimDaemonLockfile: () => claimDaemonLockfile,
45
45
  compareSemver: () => compareSemver,
46
46
  configFilePath: () => configFilePath,
47
+ consumeRuntimeUpgradeNotice: () => consumeRuntimeUpgradeNotice,
47
48
  daemonAppBundlePath: () => daemonAppBundlePath,
48
49
  daemonAppDir: () => daemonAppDir,
49
50
  daemonAppLauncherPath: () => daemonAppLauncherPath,
@@ -68,12 +69,14 @@ __export(home_paths_exports, {
68
69
  removeDaemonLockfile: () => removeDaemonLockfile,
69
70
  removeDevBridgeLockfile: () => removeDevBridgeLockfile,
70
71
  runtimeDir: () => runtimeDir,
72
+ runtimeUpgradeNoticePath: () => runtimeUpgradeNoticePath,
71
73
  runtimesDir: () => runtimesDir,
72
74
  shouldSkipPersistentDaemon: () => shouldSkipPersistentDaemon,
73
75
  sootsimHomeDir: () => sootsimHomeDir,
74
76
  writeActiveRuntime: () => writeActiveRuntime,
75
77
  writeDaemonLockfile: () => writeDaemonLockfile,
76
78
  writeDevBridgeLockfile: () => writeDevBridgeLockfile,
79
+ writeRuntimeUpgradeNotice: () => writeRuntimeUpgradeNotice,
77
80
  writeSharedConfig: () => writeSharedConfig,
78
81
  writeTelemetryEnabled: () => writeTelemetryEnabled
79
82
  });
@@ -194,6 +197,31 @@ function readOrCreateAnonymousId() {
194
197
  function writeTelemetryEnabled(enabled) {
195
198
  writeSharedConfig({ telemetry: enabled });
196
199
  }
200
+ function runtimeUpgradeNoticePath() {
201
+ return import_node_path.default.join(sootsimHomeDir(), "runtime-upgraded.json");
202
+ }
203
+ function writeRuntimeUpgradeNotice(notice) {
204
+ ensureSootsimHome();
205
+ const tmp = `${runtimeUpgradeNoticePath()}.tmp`;
206
+ import_node_fs.default.writeFileSync(tmp, `${JSON.stringify(notice)}
207
+ `, "utf8");
208
+ import_node_fs.default.renameSync(tmp, runtimeUpgradeNoticePath());
209
+ }
210
+ function consumeRuntimeUpgradeNotice() {
211
+ try {
212
+ const raw = import_node_fs.default.readFileSync(runtimeUpgradeNoticePath(), "utf8");
213
+ import_node_fs.default.unlinkSync(runtimeUpgradeNoticePath());
214
+ const parsed = JSON.parse(raw);
215
+ if (typeof parsed?.to !== "string" || !parsed.to) return null;
216
+ return {
217
+ from: typeof parsed.from === "string" ? parsed.from : null,
218
+ to: parsed.to,
219
+ at: typeof parsed.at === "number" ? parsed.at : 0
220
+ };
221
+ } catch {
222
+ return null;
223
+ }
224
+ }
197
225
  function ensureSootsimHome() {
198
226
  import_node_fs.default.mkdirSync(sootsimHomeDir(), { recursive: true });
199
227
  import_node_fs.default.mkdirSync(runtimesDir(), { recursive: true });
@@ -360,6 +388,7 @@ function removeDevBridgeLockfile() {
360
388
  claimDaemonLockfile,
361
389
  compareSemver,
362
390
  configFilePath,
391
+ consumeRuntimeUpgradeNotice,
363
392
  daemonAppBundlePath,
364
393
  daemonAppDir,
365
394
  daemonAppLauncherPath,
@@ -384,12 +413,14 @@ function removeDevBridgeLockfile() {
384
413
  removeDaemonLockfile,
385
414
  removeDevBridgeLockfile,
386
415
  runtimeDir,
416
+ runtimeUpgradeNoticePath,
387
417
  runtimesDir,
388
418
  shouldSkipPersistentDaemon,
389
419
  sootsimHomeDir,
390
420
  writeActiveRuntime,
391
421
  writeDaemonLockfile,
392
422
  writeDevBridgeLockfile,
423
+ writeRuntimeUpgradeNotice,
393
424
  writeSharedConfig,
394
425
  writeTelemetryEnabled
395
426
  });
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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;
@@ -662,6 +662,16 @@ function writeSharedConfig(patch) {
662
662
  import_node_fs2.default.renameSync(tmp, configFilePath());
663
663
  return next;
664
664
  }
665
+ function runtimeUpgradeNoticePath() {
666
+ return import_node_path.default.join(sootsimHomeDir(), "runtime-upgraded.json");
667
+ }
668
+ function writeRuntimeUpgradeNotice(notice) {
669
+ ensureSootsimHome();
670
+ const tmp = `${runtimeUpgradeNoticePath()}.tmp`;
671
+ import_node_fs2.default.writeFileSync(tmp, `${JSON.stringify(notice)}
672
+ `, "utf8");
673
+ import_node_fs2.default.renameSync(tmp, runtimeUpgradeNoticePath());
674
+ }
665
675
  function ensureSootsimHome() {
666
676
  import_node_fs2.default.mkdirSync(sootsimHomeDir(), { recursive: true });
667
677
  import_node_fs2.default.mkdirSync(runtimesDir(), { recursive: true });
@@ -825,6 +835,7 @@ var import_promises = require("stream/promises");
825
835
  var DEFAULT_RUNTIME_CDN_ORIGIN = "https://sootbean.com";
826
836
  var RUNTIME_CDN_ORIGIN_ENV = "SOOTSIM_CDN_ORIGIN";
827
837
  var RUNTIME_CHANNEL_ENV = "SOOTSIM_RUNTIME_CHANNEL";
838
+ var RUNTIME_PIN_ENV = "SOOTSIM_RUNTIME_VERSION";
828
839
  function readConfig() {
829
840
  try {
830
841
  const parsed = JSON.parse(import_fs2.default.readFileSync(configFilePath(), "utf8"));
@@ -842,6 +853,12 @@ function resolveRuntimeChannel(input) {
842
853
  const config = readConfig();
843
854
  return input || process.env[RUNTIME_CHANNEL_ENV] || config.runtimeChannel || "stable";
844
855
  }
856
+ function resolveRuntimePin() {
857
+ const env = process.env[RUNTIME_PIN_ENV];
858
+ if (env && env.trim()) return env.trim();
859
+ const config = readConfig();
860
+ return typeof config.runtimeVersion === "string" && config.runtimeVersion.trim() ? config.runtimeVersion.trim() : null;
861
+ }
845
862
  function runtimeManifestUrl(cdnOrigin) {
846
863
  const url = new URL(`${resolveRuntimeCdnOrigin(cdnOrigin)}/runtimes/manifest.json`);
847
864
  url.searchParams.set("t", String(Date.now()));
@@ -860,7 +877,7 @@ async function fetchRuntimeManifest(cdnOrigin) {
860
877
  }
861
878
  function resolveRuntimeVersion(manifest, opts = {}) {
862
879
  const channel = resolveRuntimeChannel(opts.channel);
863
- const version = opts.version || manifest.channels[channel]?.latest;
880
+ const version = opts.version || resolveRuntimePin() || manifest.channels[channel]?.latest;
864
881
  if (!version) {
865
882
  throw new Error(
866
883
  `no version specified and channel '${channel}' has no latest entry in the manifest`
@@ -936,6 +953,29 @@ async function updateRuntimeToLatest(opts = {}) {
936
953
  ensureSootsimHome();
937
954
  const cdnOrigin = resolveRuntimeCdnOrigin(opts.cdnOrigin);
938
955
  const channel = resolveRuntimeChannel(opts.channel);
956
+ const pin = resolveRuntimePin();
957
+ if (pin) {
958
+ const activeVersion2 = readActiveRuntime();
959
+ const pinInstalled = import_fs2.default.existsSync(import_path2.default.join(runtimeDir(pin), "index.html"));
960
+ if (activeVersion2 === pin && pinInstalled) {
961
+ return {
962
+ checked: true,
963
+ updated: false,
964
+ reason: `runtime is pinned to ${pin}`,
965
+ activeVersion: activeVersion2,
966
+ latestVersion: pin
967
+ };
968
+ }
969
+ const install2 = await installRuntime({ version: pin, channel, cdnOrigin, setActive: false });
970
+ return {
971
+ checked: true,
972
+ updated: true,
973
+ reason: `runtime is pinned to ${pin}`,
974
+ activeVersion: pin,
975
+ latestVersion: pin,
976
+ install: install2
977
+ };
978
+ }
939
979
  const manifest = await fetchRuntimeManifest(cdnOrigin);
940
980
  const latestVersion = manifest.channels[channel]?.latest;
941
981
  if (!latestVersion) {
@@ -3745,9 +3785,18 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
3745
3785
  }
3746
3786
  return;
3747
3787
  }
3788
+ const previousVersion = this.activeRuntimeVersion;
3748
3789
  const active = this.setActiveRuntime(result.latestVersion);
3749
3790
  process.stderr.write(`sootsim runtime updated to ${active.version} (${reason})
3750
3791
  `);
3792
+ try {
3793
+ writeRuntimeUpgradeNotice({
3794
+ from: previousVersion,
3795
+ to: active.version,
3796
+ at: Date.now()
3797
+ });
3798
+ } catch {
3799
+ }
3751
3800
  } catch (err) {
3752
3801
  process.stderr.write(
3753
3802
  `sootsim runtime update failed (${reason}): ${err instanceof Error ? err.message : String(err)}
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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/sdk.mjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // cli/commands/inspect/core.ts
4
4
  function resolveMaxMsFlag(args, fallbackMs) {
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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;
@@ -10635,6 +10635,16 @@ function writeSharedConfig(patch) {
10635
10635
  import_node_fs2.default.renameSync(tmp, configFilePath());
10636
10636
  return next;
10637
10637
  }
10638
+ function runtimeUpgradeNoticePath() {
10639
+ return import_node_path.default.join(sootsimHomeDir(), "runtime-upgraded.json");
10640
+ }
10641
+ function writeRuntimeUpgradeNotice(notice) {
10642
+ ensureSootsimHome();
10643
+ const tmp = `${runtimeUpgradeNoticePath()}.tmp`;
10644
+ import_node_fs2.default.writeFileSync(tmp, `${JSON.stringify(notice)}
10645
+ `, "utf8");
10646
+ import_node_fs2.default.renameSync(tmp, runtimeUpgradeNoticePath());
10647
+ }
10638
10648
  function ensureSootsimHome() {
10639
10649
  import_node_fs2.default.mkdirSync(sootsimHomeDir(), { recursive: true });
10640
10650
  import_node_fs2.default.mkdirSync(runtimesDir(), { recursive: true });
@@ -10856,6 +10866,12 @@ function resolveRuntimeChannel(input) {
10856
10866
  const config = readConfig();
10857
10867
  return input || process.env[RUNTIME_CHANNEL_ENV] || config.runtimeChannel || "stable";
10858
10868
  }
10869
+ function resolveRuntimePin() {
10870
+ const env = process.env[RUNTIME_PIN_ENV];
10871
+ if (env && env.trim()) return env.trim();
10872
+ const config = readConfig();
10873
+ return typeof config.runtimeVersion === "string" && config.runtimeVersion.trim() ? config.runtimeVersion.trim() : null;
10874
+ }
10859
10875
  function runtimeManifestUrl(cdnOrigin) {
10860
10876
  const url = new URL(`${resolveRuntimeCdnOrigin(cdnOrigin)}/runtimes/manifest.json`);
10861
10877
  url.searchParams.set("t", String(Date.now()));
@@ -10874,7 +10890,7 @@ async function fetchRuntimeManifest(cdnOrigin) {
10874
10890
  }
10875
10891
  function resolveRuntimeVersion(manifest, opts = {}) {
10876
10892
  const channel = resolveRuntimeChannel(opts.channel);
10877
- const version = opts.version || manifest.channels[channel]?.latest;
10893
+ const version = opts.version || resolveRuntimePin() || manifest.channels[channel]?.latest;
10878
10894
  if (!version) {
10879
10895
  throw new Error(
10880
10896
  `no version specified and channel '${channel}' has no latest entry in the manifest`
@@ -10950,6 +10966,29 @@ async function updateRuntimeToLatest(opts = {}) {
10950
10966
  ensureSootsimHome();
10951
10967
  const cdnOrigin = resolveRuntimeCdnOrigin(opts.cdnOrigin);
10952
10968
  const channel = resolveRuntimeChannel(opts.channel);
10969
+ const pin = resolveRuntimePin();
10970
+ if (pin) {
10971
+ const activeVersion2 = readActiveRuntime();
10972
+ const pinInstalled = import_fs2.default.existsSync(import_path2.default.join(runtimeDir(pin), "index.html"));
10973
+ if (activeVersion2 === pin && pinInstalled) {
10974
+ return {
10975
+ checked: true,
10976
+ updated: false,
10977
+ reason: `runtime is pinned to ${pin}`,
10978
+ activeVersion: activeVersion2,
10979
+ latestVersion: pin
10980
+ };
10981
+ }
10982
+ const install2 = await installRuntime({ version: pin, channel, cdnOrigin, setActive: false });
10983
+ return {
10984
+ checked: true,
10985
+ updated: true,
10986
+ reason: `runtime is pinned to ${pin}`,
10987
+ activeVersion: pin,
10988
+ latestVersion: pin,
10989
+ install: install2
10990
+ };
10991
+ }
10953
10992
  const manifest = await fetchRuntimeManifest(cdnOrigin);
10954
10993
  const latestVersion = manifest.channels[channel]?.latest;
10955
10994
  if (!latestVersion) {
@@ -11039,7 +11078,7 @@ function extractTarball(tarPath, destDir) {
11039
11078
  });
11040
11079
  });
11041
11080
  }
11042
- var import_child_process2, import_crypto, import_fs2, import_path2, import_stream, import_promises, DEFAULT_RUNTIME_CDN_ORIGIN, RUNTIME_CDN_ORIGIN_ENV, RUNTIME_CHANNEL_ENV;
11081
+ var import_child_process2, import_crypto, import_fs2, import_path2, import_stream, import_promises, DEFAULT_RUNTIME_CDN_ORIGIN, RUNTIME_CDN_ORIGIN_ENV, RUNTIME_CHANNEL_ENV, RUNTIME_PIN_ENV;
11043
11082
  var init_runtime_delivery = __esm({
11044
11083
  "src/runtime-delivery.ts"() {
11045
11084
  "use strict";
@@ -11053,6 +11092,7 @@ var init_runtime_delivery = __esm({
11053
11092
  DEFAULT_RUNTIME_CDN_ORIGIN = "https://sootbean.com";
11054
11093
  RUNTIME_CDN_ORIGIN_ENV = "SOOTSIM_CDN_ORIGIN";
11055
11094
  RUNTIME_CHANNEL_ENV = "SOOTSIM_RUNTIME_CHANNEL";
11095
+ RUNTIME_PIN_ENV = "SOOTSIM_RUNTIME_VERSION";
11056
11096
  }
11057
11097
  });
11058
11098
 
@@ -13867,9 +13907,18 @@ var init_bridge_host = __esm({
13867
13907
  }
13868
13908
  return;
13869
13909
  }
13910
+ const previousVersion = this.activeRuntimeVersion;
13870
13911
  const active = this.setActiveRuntime(result.latestVersion);
13871
13912
  process.stderr.write(`sootsim runtime updated to ${active.version} (${reason})
13872
13913
  `);
13914
+ try {
13915
+ writeRuntimeUpgradeNotice({
13916
+ from: previousVersion,
13917
+ to: active.version,
13918
+ at: Date.now()
13919
+ });
13920
+ } catch {
13921
+ }
13873
13922
  } catch (err) {
13874
13923
  process.stderr.write(
13875
13924
  `sootsim runtime update failed (${reason}): ${err instanceof Error ? err.message : String(err)}
@@ -18659,6 +18708,9 @@ var init_bridge_flow_runner = __esm({
18659
18708
  throw new Error(`unsupported flow step: ${JSON.stringify(step)}`);
18660
18709
  }
18661
18710
  }
18711
+ // live progress reporter (shell devtools "test" tab). attached by
18712
+ // runFlowPlayback; absent for programmatic callers.
18713
+ liveStatus = null;
18662
18714
  async runFlow(steps) {
18663
18715
  const onStart = [];
18664
18716
  const onComplete = [];
@@ -18675,6 +18727,15 @@ var init_bridge_flow_runner = __esm({
18675
18727
  }
18676
18728
  body.push(step);
18677
18729
  }
18730
+ if (this.liveStatus) {
18731
+ await this.liveStatus.plan(
18732
+ body.map((rawStep, index) => {
18733
+ const step = typeof rawStep === "string" ? normalizeBareStringStep(rawStep) : rawStep;
18734
+ const name = Object.keys(step).find((k) => k !== "when") ?? Object.keys(step)[0];
18735
+ return { index, name, target: this.flowStepTargetLabel(step, name) };
18736
+ })
18737
+ );
18738
+ }
18678
18739
  if (onStart.length > 0) {
18679
18740
  console.log(`[flow] onFlowStart (${onStart.length} steps)`);
18680
18741
  for (let i = 0; i < onStart.length; i++) {
@@ -18707,23 +18768,47 @@ var init_bridge_flow_runner = __esm({
18707
18768
  const explicitWait = typeof step.wait === "number" ? step.wait : 0;
18708
18769
  const waitForTimeout = typeof step.waitFor?.timeout === "number" ? step.waitFor.timeout : 0;
18709
18770
  const stepCeiling = Math.max(6e4, explicitWait + 15e3, waitForTimeout + 15e3);
18710
- if (step.runFlow || step.launchApp) {
18711
- await this.runStep(step, i);
18712
- continue;
18713
- }
18714
- await Promise.race([
18715
- this.runStep(step, i),
18716
- new Promise(
18717
- (_, reject) => setTimeout(
18718
- () => reject(
18719
- new Error(
18720
- `step ${i + 1} (${Object.keys(step)[0]}) exceeded ${stepCeiling}ms deadline`
18771
+ if (this.liveStatus) {
18772
+ await this.liveStatus.waitWhilePaused();
18773
+ await this.liveStatus.step(i, "running");
18774
+ }
18775
+ const liveStartedAtMs = Date.now();
18776
+ const reportOutcome = async (failed, error) => {
18777
+ if (!this.liveStatus) return;
18778
+ const last = this.flowTraceSteps[this.flowTraceSteps.length - 1];
18779
+ const traced = last && last.stepIndex === i && last.startedAtMs >= liveStartedAtMs;
18780
+ await this.liveStatus.step(
18781
+ i,
18782
+ failed ? "failure" : traced && last.status === "skipped" ? "skipped" : "success",
18783
+ {
18784
+ durationMs: Date.now() - liveStartedAtMs,
18785
+ error: failed ? error instanceof Error ? error.message.slice(0, 300) : String(error).slice(0, 300) : traced && last.error || void 0
18786
+ }
18787
+ );
18788
+ };
18789
+ try {
18790
+ if (step.runFlow || step.launchApp) {
18791
+ await this.runStep(step, i);
18792
+ } else {
18793
+ await Promise.race([
18794
+ this.runStep(step, i),
18795
+ new Promise(
18796
+ (_, reject) => setTimeout(
18797
+ () => reject(
18798
+ new Error(
18799
+ `step ${i + 1} (${Object.keys(step)[0]}) exceeded ${stepCeiling}ms deadline`
18800
+ )
18801
+ ),
18802
+ stepCeiling
18721
18803
  )
18722
- ),
18723
- stepCeiling
18724
- )
18725
- )
18726
- ]);
18804
+ )
18805
+ ]);
18806
+ }
18807
+ } catch (error) {
18808
+ await reportOutcome(true, error);
18809
+ throw error;
18810
+ }
18811
+ await reportOutcome(false);
18727
18812
  }
18728
18813
  }
18729
18814
  };
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.201 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.202 | (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.201",
3
+ "version": "0.1.202",
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",