sootsim 0.1.285 → 0.1.287

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 (157) hide show
  1. package/README.md +28 -4
  2. package/dist-cli/bin.js +7 -5
  3. package/dist-cli/chunks/{agent-2TBHFU5M.js → agent-3Y7PIJAD.js} +2 -2
  4. package/dist-cli/chunks/{agent-wrapper-LJ4N3HMI.js → agent-wrapper-M2GB3CFF.js} +2 -2
  5. package/dist-cli/chunks/{app-fonts-GQDMATKJ.js → app-fonts-OSUZGXLN.js} +2 -2
  6. package/dist-cli/chunks/{assert-RD4NYOEL.js → assert-VGMB3XLU.js} +2 -2
  7. package/dist-cli/chunks/{auth-3EU7SXIS.js → auth-C2D2XI5T.js} +2 -2
  8. package/dist-cli/chunks/beta-VB4CHGW7.js +2 -0
  9. package/dist-cli/chunks/{camera-2J7LHKH2.js → camera-2EP7WI7X.js} +2 -2
  10. package/dist-cli/chunks/{chunk-FECFOHRP.js → chunk-2ED7AEFH.js} +2 -2
  11. package/dist-cli/chunks/{chunk-R5AGV63G.js → chunk-4LQHUMJD.js} +1 -1
  12. package/dist-cli/chunks/{chunk-RF2D4REN.js → chunk-4YUQA5EZ.js} +1 -1
  13. package/dist-cli/chunks/{chunk-NSMCMJG3.js → chunk-5BH4EGSX.js} +1 -1
  14. package/dist-cli/chunks/{chunk-UTAHGCSP.js → chunk-6JYHFQMU.js} +2 -2
  15. package/dist-cli/chunks/{chunk-MCHPBSUT.js → chunk-7NHETHT2.js} +2 -2
  16. package/dist-cli/chunks/{chunk-QWSPXKQJ.js → chunk-7TTDBWWX.js} +3 -3
  17. package/dist-cli/chunks/{chunk-E6HIXOCT.js → chunk-7XETMEVG.js} +2 -2
  18. package/dist-cli/chunks/{chunk-CAXY5LGF.js → chunk-AUPDIMGR.js} +3 -3
  19. package/dist-cli/chunks/{chunk-FD6OUECL.js → chunk-B4OWAS67.js} +4 -4
  20. package/dist-cli/chunks/{chunk-UPHIANHH.js → chunk-CAVS43NZ.js} +2 -2
  21. package/dist-cli/chunks/{chunk-H6VB7Q6V.js → chunk-D32WJN5T.js} +1 -1
  22. package/dist-cli/chunks/{chunk-D7T3DWLA.js → chunk-DH4IAIMY.js} +2 -2
  23. package/dist-cli/chunks/{chunk-J6PGQR2G.js → chunk-DMJCPQ5G.js} +2 -2
  24. package/dist-cli/chunks/{chunk-NGL23MAI.js → chunk-DWZBBA2R.js} +2 -2
  25. package/dist-cli/chunks/{chunk-ITXBTNQO.js → chunk-EOWY6ENX.js} +1 -1
  26. package/dist-cli/chunks/chunk-FAKE23IY.js +2 -0
  27. package/dist-cli/chunks/{chunk-UBCUQYQB.js → chunk-FJXEQORS.js} +1 -1
  28. package/dist-cli/chunks/{chunk-TV2JCOBT.js → chunk-GJWLFLCH.js} +1 -1
  29. package/dist-cli/chunks/{chunk-MDI4VFTU.js → chunk-IL67IGWO.js} +1 -1
  30. package/dist-cli/chunks/{chunk-7QVXBXHE.js → chunk-JMCFZU73.js} +1 -1
  31. package/dist-cli/chunks/{chunk-6Z43B67G.js → chunk-JNF5Q27W.js} +3 -3
  32. package/dist-cli/chunks/{chunk-6KJIC7PM.js → chunk-KNANFWH6.js} +32 -8
  33. package/dist-cli/chunks/{chunk-RJPFXKUC.js → chunk-LNEO6ZTY.js} +3 -3
  34. package/dist-cli/chunks/chunk-LS4XU3D6.js +1 -0
  35. package/dist-cli/chunks/{chunk-ZCMLLZW7.js → chunk-LSARMXMK.js} +2 -2
  36. package/dist-cli/chunks/{chunk-ENRZ35MX.js → chunk-LWCQCC4X.js} +1 -1
  37. package/dist-cli/chunks/chunk-MS3I76VW.js +2 -0
  38. package/dist-cli/chunks/{chunk-EUOPHGBA.js → chunk-O564XXIK.js} +2 -2
  39. package/dist-cli/chunks/chunk-O5JBF7EI.js +2 -0
  40. package/dist-cli/chunks/{chunk-K3VOQJT4.js → chunk-O722YE2D.js} +3 -3
  41. package/dist-cli/chunks/{chunk-MVF6FAIR.js → chunk-OZSLCAR3.js} +1 -1
  42. package/dist-cli/chunks/chunk-PVO7KJ4U.js +118 -0
  43. package/dist-cli/chunks/chunk-SALM6SYB.js +4 -0
  44. package/dist-cli/chunks/{chunk-XHGF55GE.js → chunk-UYVRZAAM.js} +1 -1
  45. package/dist-cli/chunks/{chunk-EPCTUT5H.js → chunk-V7QFQAEP.js} +1 -1
  46. package/dist-cli/chunks/chunk-VG4BRVYH.js +72 -0
  47. package/dist-cli/chunks/{chunk-KYD5EOWU.js → chunk-VYCARR66.js} +1 -1
  48. package/dist-cli/chunks/{chunk-L6JX65OD.js → chunk-W2N5SGMP.js} +1 -1
  49. package/dist-cli/chunks/{chunk-H3USGI4Z.js → chunk-WDDAJEF2.js} +2 -2
  50. package/dist-cli/chunks/{chunk-WKK5ABFW.js → chunk-WO5JLB3Y.js} +1 -1
  51. package/dist-cli/chunks/chunk-X2QGJ365.js +4 -0
  52. package/dist-cli/chunks/{chunk-RNUOUDDU.js → chunk-XNAXG3CO.js} +2 -2
  53. package/dist-cli/chunks/{chunk-LMXSSAVD.js → chunk-XNNQOIEW.js} +1 -1
  54. package/dist-cli/chunks/{chunk-II5VUIPW.js → chunk-XYW7VEC5.js} +2 -2
  55. package/dist-cli/chunks/{chunk-NQQPRV7X.js → chunk-YMRVH5M7.js} +2 -2
  56. package/dist-cli/chunks/cleanup-4CMHC5XY.js +23 -0
  57. package/dist-cli/chunks/cli-version-TZMWSGH2.js +2 -0
  58. package/dist-cli/chunks/{compat-LEM4VU7P.js → compat-AEK4ZDP6.js} +3 -3
  59. package/dist-cli/chunks/{config-HS34TNDH.js → config-E2DPFBWE.js} +2 -2
  60. package/dist-cli/chunks/control-JNIZAS3K.js +2 -0
  61. package/dist-cli/chunks/daemon-7PINPJHO.js +2 -0
  62. package/dist-cli/chunks/{debug-WVZX3PQR.js → debug-GCMVHL3Y.js} +3 -3
  63. package/dist-cli/chunks/{desktop-CLQJRQZG.js → desktop-U34JDZSL.js} +3 -3
  64. package/dist-cli/chunks/detox-HFGJMV6S.js +50 -0
  65. package/dist-cli/chunks/{device-OD752JLS.js → device-2JSOB3ND.js} +2 -2
  66. package/dist-cli/chunks/{diagnose-6ESOVAFY.js → diagnose-VGZOE32C.js} +2 -2
  67. package/dist-cli/chunks/disk-cleanup-II246KS3.js +2 -0
  68. package/dist-cli/chunks/drivers-U44673LK.js +2 -0
  69. package/dist-cli/chunks/{film-B4LMPUP7.js → film-4B5RQBZA.js} +3 -3
  70. package/dist-cli/chunks/flow-4PV7VMJX.js +2 -0
  71. package/dist-cli/chunks/help-ZY4B4G45.js +2 -0
  72. package/dist-cli/chunks/{hidden-runtime-alias-UKOTOYAU.js → hidden-runtime-alias-XZPYIJJL.js} +2 -2
  73. package/dist-cli/chunks/{home-paths-YR2DGQKT.js → home-paths-URBZE5DX.js} +2 -2
  74. package/dist-cli/chunks/inspect-2KZSDWZ2.js +2 -0
  75. package/dist-cli/chunks/install-desktop-66NOHS5U.js +2 -0
  76. package/dist-cli/chunks/{login-7LKF3FZ5.js → login-6ZZQHORX.js} +4 -4
  77. package/dist-cli/chunks/{logout-T6UDYMX7.js → logout-R3H4H5XS.js} +2 -2
  78. package/dist-cli/chunks/{maestro-GFPPYRP7.js → maestro-TJ5IJVWZ.js} +3 -3
  79. package/dist-cli/chunks/{maestro-generate-INLKO6J5.js → maestro-generate-BM3TFJM3.js} +3 -3
  80. package/dist-cli/chunks/{mode-D4CFDDM5.js → mode-QEHTO5QB.js} +2 -2
  81. package/dist-cli/chunks/optional-demo-registry-DHBZACNG.js +2 -0
  82. package/dist-cli/chunks/{perf-ZHZEQ5CJ.js → perf-GQ6H7BMI.js} +2 -2
  83. package/dist-cli/chunks/{record-YMQVDSIC.js → record-UNDNOP7I.js} +3 -3
  84. package/dist-cli/chunks/runtime-U6UYTNPH.js +2 -0
  85. package/dist-cli/chunks/{screenshot-command-Y4BENO6D.js → screenshot-command-ONR3W4IB.js} +3 -3
  86. package/dist-cli/chunks/{screenshots-capture-MT4ZDZUF.js → screenshots-capture-ME4I6HDK.js} +2 -2
  87. package/dist-cli/chunks/{serve-G633HTUD.js → serve-76PISKNL.js} +18 -18
  88. package/dist-cli/chunks/{setup-FNATHLVM.js → setup-TJMKUTMZ.js} +3 -3
  89. package/dist-cli/chunks/{skills-WZND2RAU.js → skills-RWONRRTS.js} +2 -2
  90. package/dist-cli/chunks/{storage-YRWEDN56.js → storage-K42LEKBP.js} +2 -2
  91. package/dist-cli/chunks/store-GZ3LRYT5.js +2 -0
  92. package/dist-cli/chunks/telemetry-2QOKHTLI.js +2 -0
  93. package/dist-cli/chunks/{timeline-WSS6HKAH.js → timeline-W7O56I3Y.js} +2 -2
  94. package/dist-cli/chunks/{upgrade-I5GYH34L.js → upgrade-E42I2WQ6.js} +4 -4
  95. package/dist-cli/chunks/upload-TPETTHGS.js +2 -0
  96. package/dist-cli/chunks/{version-O4HGTRSA.js → version-KYDANRIA.js} +3 -3
  97. package/dist-cli/chunks/{web-L7JORNHF.js → web-BZX7OTFR.js} +2 -2
  98. package/dist-cli/chunks/{what-happened-ALECI5TF.js → what-happened-EU22AIF6.js} +2 -2
  99. package/dist-lib/agent-daemon-client.cjs +1 -1
  100. package/dist-lib/agent-events.cjs +1 -1
  101. package/dist-lib/agent-identity.cjs +1 -1
  102. package/dist-lib/agent-sessions.cjs +1 -1
  103. package/dist-lib/attached-projects.cjs +1 -1
  104. package/dist-lib/auth/shared-session.cjs +1 -1
  105. package/dist-lib/backend-origin.cjs +1 -1
  106. package/dist-lib/beta.cjs +1 -1
  107. package/dist-lib/beta.mjs +1 -1
  108. package/dist-lib/bridge-constants.cjs +1 -1
  109. package/dist-lib/cli-constants.cjs +1 -1
  110. package/dist-lib/config.cjs +1 -1
  111. package/dist-lib/detox/index.cjs +1 -1
  112. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  113. package/dist-lib/home-paths.cjs +1 -1
  114. package/dist-lib/host/bridge-host.cjs +74 -9
  115. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  116. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  117. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  118. package/dist-lib/host/websocket-proxy.cjs +1 -1
  119. package/dist-lib/index.cjs +1 -1
  120. package/dist-lib/jump-to-source-babel.cjs +1 -1
  121. package/dist-lib/menu.cjs +1 -1
  122. package/dist-lib/menu.mjs +1 -1
  123. package/dist-lib/metro.cjs +1 -1
  124. package/dist-lib/profiles.cjs +1 -1
  125. package/dist-lib/render-mode.cjs +1 -1
  126. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  127. package/dist-lib/sdk.cjs +1 -1
  128. package/dist-lib/sdk.mjs +1 -1
  129. package/dist-lib/skills.cjs +76 -10
  130. package/dist-lib/vite.cjs +1 -1
  131. package/package.json +1 -1
  132. package/scripts/preuninstall.cjs +2 -0
  133. package/skills/contrast/SKILL.md +1 -0
  134. package/src/browser-cache.ts +16 -0
  135. package/src/disk-cleanup.ts +487 -0
  136. package/src/home-paths.ts +2 -0
  137. package/dist-cli/chunks/beta-YS62NT2Q.js +0 -2
  138. package/dist-cli/chunks/chunk-4ER5VV7N.js +0 -118
  139. package/dist-cli/chunks/chunk-HMZEXILJ.js +0 -2
  140. package/dist-cli/chunks/chunk-J6JBIQCU.js +0 -1
  141. package/dist-cli/chunks/chunk-LC7PERGZ.js +0 -4
  142. package/dist-cli/chunks/chunk-N5HM6MVL.js +0 -2
  143. package/dist-cli/chunks/chunk-P5ZWHBTB.js +0 -62
  144. package/dist-cli/chunks/cli-version-TXYQS4RH.js +0 -2
  145. package/dist-cli/chunks/control-B6AQSK5M.js +0 -2
  146. package/dist-cli/chunks/daemon-CXYLZLTA.js +0 -2
  147. package/dist-cli/chunks/detox-WUKQEG6W.js +0 -50
  148. package/dist-cli/chunks/drivers-QNTNLCAA.js +0 -2
  149. package/dist-cli/chunks/flow-RBT7ONHX.js +0 -2
  150. package/dist-cli/chunks/help-XSIDFM7C.js +0 -2
  151. package/dist-cli/chunks/inspect-X5QK55XO.js +0 -2
  152. package/dist-cli/chunks/install-desktop-2I52RLEI.js +0 -2
  153. package/dist-cli/chunks/optional-demo-registry-B4BZNEGJ.js +0 -2
  154. package/dist-cli/chunks/runtime-YSOWH56F.js +0 -2
  155. package/dist-cli/chunks/store-2CQBXLIL.js +0 -2
  156. package/dist-cli/chunks/telemetry-2ZOO7LP5.js +0 -2
  157. package/dist-cli/chunks/upload-TRUPFXJR.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.285 | (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-ITXBTNQO.js";import{g as A,i as _}from"./chunk-MCHPBSUT.js";import"./chunk-TV2JCOBT.js";import{c as k}from"./chunk-L6JX65OD.js";import"./chunk-UBCUQYQB.js";import"./chunk-XHGF55GE.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.287 | (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-EOWY6ENX.js";import{g as A,i as _}from"./chunk-7NHETHT2.js";import"./chunk-GJWLFLCH.js";import{c as k}from"./chunk-W2N5SGMP.js";import"./chunk-FJXEQORS.js";import"./chunk-UYVRZAAM.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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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;
@@ -866,6 +866,7 @@ function compareSemver(a, b) {
866
866
  }
867
867
 
868
868
  // ../contrast-runtime-delivery/src/index.ts
869
+ var DEFAULT_LOCAL_RUNTIME_RETENTION_COUNT = 2;
869
870
  function createRuntimeDelivery(product) {
870
871
  function readConfig() {
871
872
  try {
@@ -931,8 +932,10 @@ function createRuntimeDelivery(product) {
931
932
  const { version, channel, entry } = resolveVersion(manifest, opts);
932
933
  const destDir = product.runtimeDir(version);
933
934
  const setActive = opts.setActive !== false;
935
+ pruneLocalRetention({ protectVersions: [version] });
934
936
  if (!opts.force && import_node_fs4.default.existsSync(import_node_path3.default.join(destDir, product.installedMarker))) {
935
937
  if (setActive) product.writeActiveRuntime(version);
938
+ pruneLocalRetention({ protectVersions: [version] });
936
939
  return {
937
940
  version,
938
941
  channel,
@@ -953,20 +956,19 @@ function createRuntimeDelivery(product) {
953
956
  await downloadToFile(tarUrl, tarCachePath);
954
957
  process.stderr.write(`${product.id}: extracting runtime ${version}\u2026
955
958
  `);
956
- const actualSha = await sha256File(tarCachePath);
957
- if (actualSha !== entry.sha256) {
958
- import_node_fs4.default.rmSync(tarCachePath, { force: true });
959
- throw new Error(
960
- `sha256 mismatch for runtime ${version}: expected ${entry.sha256}, actual ${actualSha}`
961
- );
962
- }
963
959
  const tmpDir = import_node_path3.default.join(
964
960
  import_node_path3.default.dirname(destDir),
965
961
  `.installing-${version}-${process.pid}`
966
962
  );
967
963
  import_node_fs4.default.rmSync(tmpDir, { recursive: true, force: true });
968
- import_node_fs4.default.mkdirSync(tmpDir, { recursive: true });
969
964
  try {
965
+ const actualSha = await sha256File(tarCachePath);
966
+ if (actualSha !== entry.sha256) {
967
+ throw new Error(
968
+ `sha256 mismatch for runtime ${version}: expected ${entry.sha256}, actual ${actualSha}`
969
+ );
970
+ }
971
+ import_node_fs4.default.mkdirSync(tmpDir, { recursive: true });
970
972
  await extractTarball(tarCachePath, tmpDir);
971
973
  if (!import_node_fs4.default.existsSync(import_node_path3.default.join(tmpDir, product.installedMarker))) {
972
974
  throw new Error(
@@ -978,8 +980,11 @@ function createRuntimeDelivery(product) {
978
980
  } catch (err) {
979
981
  import_node_fs4.default.rmSync(tmpDir, { recursive: true, force: true });
980
982
  throw err;
983
+ } finally {
984
+ import_node_fs4.default.rmSync(tarCachePath, { force: true });
981
985
  }
982
986
  if (setActive) product.writeActiveRuntime(version);
987
+ pruneLocalRetention({ protectVersions: [version] });
983
988
  return {
984
989
  version,
985
990
  channel,
@@ -992,6 +997,7 @@ function createRuntimeDelivery(product) {
992
997
  }
993
998
  async function updateToLatest(opts = {}) {
994
999
  product.ensureHome();
1000
+ pruneLocalRetention();
995
1001
  const cdnOrigin = resolveCdnOrigin(opts.cdnOrigin);
996
1002
  const channel = resolveChannel(opts.channel);
997
1003
  const pin = resolvePin();
@@ -1087,6 +1093,63 @@ function createRuntimeDelivery(product) {
1087
1093
  return { active, latest: null, pinned: null, outdated: false };
1088
1094
  }
1089
1095
  }
1096
+ function planLocalRetention(opts = {}) {
1097
+ product.ensureHome();
1098
+ const retainVersions = Math.max(
1099
+ 1,
1100
+ Math.floor(opts.retainVersions ?? DEFAULT_LOCAL_RUNTIME_RETENTION_COUNT)
1101
+ );
1102
+ const installed = listInstalledRuntimes(product);
1103
+ const installedSet = new Set(installed);
1104
+ const activeVersion = product.readActiveRuntime();
1105
+ const pinnedVersion = resolvePin();
1106
+ const keep = /* @__PURE__ */ new Set();
1107
+ for (const version of [
1108
+ activeVersion,
1109
+ pinnedVersion,
1110
+ ...opts.protectVersions ?? []
1111
+ ]) {
1112
+ if (version && installedSet.has(version)) keep.add(version);
1113
+ }
1114
+ for (const version of [...installed].reverse()) {
1115
+ if (keep.size >= retainVersions) break;
1116
+ keep.add(version);
1117
+ }
1118
+ const cacheTemplateMarker = "__RUNTIME_VERSION__";
1119
+ const cacheTemplate = runtimeTarballCacheName(product, cacheTemplateMarker);
1120
+ const markerOffset = cacheTemplate.indexOf(cacheTemplateMarker);
1121
+ const cachePrefix = cacheTemplate.slice(0, markerOffset);
1122
+ const cacheSuffix = cacheTemplate.slice(markerOffset + cacheTemplateMarker.length);
1123
+ let removeCacheFiles = [];
1124
+ if (markerOffset >= 0) {
1125
+ try {
1126
+ removeCacheFiles = import_node_fs4.default.readdirSync(product.cacheDir(), { withFileTypes: true }).filter((entry) => {
1127
+ if (!entry.isFile()) return false;
1128
+ const complete = entry.name.startsWith(cachePrefix) && entry.name.endsWith(cacheSuffix);
1129
+ const partial = entry.name.startsWith(cachePrefix) && entry.name.endsWith(`${cacheSuffix}.partial`);
1130
+ return complete || partial;
1131
+ }).map((entry) => import_node_path3.default.join(product.cacheDir(), entry.name)).sort();
1132
+ } catch {
1133
+ }
1134
+ }
1135
+ return {
1136
+ activeVersion,
1137
+ pinnedVersion,
1138
+ keepVersions: installed.filter((version) => keep.has(version)),
1139
+ removeVersions: installed.filter((version) => !keep.has(version)),
1140
+ removeCacheFiles
1141
+ };
1142
+ }
1143
+ function pruneLocalRetention(opts = {}) {
1144
+ const plan = planLocalRetention(opts);
1145
+ for (const version of plan.removeVersions) {
1146
+ import_node_fs4.default.rmSync(product.runtimeDir(version), { recursive: true, force: true });
1147
+ }
1148
+ for (const cacheFile of plan.removeCacheFiles) {
1149
+ import_node_fs4.default.rmSync(cacheFile, { force: true });
1150
+ }
1151
+ return plan;
1152
+ }
1090
1153
  return {
1091
1154
  product,
1092
1155
  resolveCdnOrigin,
@@ -1099,6 +1162,8 @@ function createRuntimeDelivery(product) {
1099
1162
  install,
1100
1163
  updateToLatest,
1101
1164
  checkUpToDate,
1165
+ planLocalRetention,
1166
+ pruneLocalRetention,
1102
1167
  listInstalled: () => listInstalledRuntimes(product)
1103
1168
  };
1104
1169
  }
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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;
@@ -11510,8 +11510,10 @@ function createRuntimeDelivery(product) {
11510
11510
  const { version, channel, entry } = resolveVersion(manifest, opts);
11511
11511
  const destDir = product.runtimeDir(version);
11512
11512
  const setActive = opts.setActive !== false;
11513
+ pruneLocalRetention({ protectVersions: [version] });
11513
11514
  if (!opts.force && import_node_fs4.default.existsSync(import_node_path3.default.join(destDir, product.installedMarker))) {
11514
11515
  if (setActive) product.writeActiveRuntime(version);
11516
+ pruneLocalRetention({ protectVersions: [version] });
11515
11517
  return {
11516
11518
  version,
11517
11519
  channel,
@@ -11532,20 +11534,19 @@ function createRuntimeDelivery(product) {
11532
11534
  await downloadToFile(tarUrl, tarCachePath);
11533
11535
  process.stderr.write(`${product.id}: extracting runtime ${version}\u2026
11534
11536
  `);
11535
- const actualSha = await sha256File(tarCachePath);
11536
- if (actualSha !== entry.sha256) {
11537
- import_node_fs4.default.rmSync(tarCachePath, { force: true });
11538
- throw new Error(
11539
- `sha256 mismatch for runtime ${version}: expected ${entry.sha256}, actual ${actualSha}`
11540
- );
11541
- }
11542
11537
  const tmpDir = import_node_path3.default.join(
11543
11538
  import_node_path3.default.dirname(destDir),
11544
11539
  `.installing-${version}-${process.pid}`
11545
11540
  );
11546
11541
  import_node_fs4.default.rmSync(tmpDir, { recursive: true, force: true });
11547
- import_node_fs4.default.mkdirSync(tmpDir, { recursive: true });
11548
11542
  try {
11543
+ const actualSha = await sha256File(tarCachePath);
11544
+ if (actualSha !== entry.sha256) {
11545
+ throw new Error(
11546
+ `sha256 mismatch for runtime ${version}: expected ${entry.sha256}, actual ${actualSha}`
11547
+ );
11548
+ }
11549
+ import_node_fs4.default.mkdirSync(tmpDir, { recursive: true });
11549
11550
  await extractTarball(tarCachePath, tmpDir);
11550
11551
  if (!import_node_fs4.default.existsSync(import_node_path3.default.join(tmpDir, product.installedMarker))) {
11551
11552
  throw new Error(
@@ -11557,8 +11558,11 @@ function createRuntimeDelivery(product) {
11557
11558
  } catch (err) {
11558
11559
  import_node_fs4.default.rmSync(tmpDir, { recursive: true, force: true });
11559
11560
  throw err;
11561
+ } finally {
11562
+ import_node_fs4.default.rmSync(tarCachePath, { force: true });
11560
11563
  }
11561
11564
  if (setActive) product.writeActiveRuntime(version);
11565
+ pruneLocalRetention({ protectVersions: [version] });
11562
11566
  return {
11563
11567
  version,
11564
11568
  channel,
@@ -11571,6 +11575,7 @@ function createRuntimeDelivery(product) {
11571
11575
  }
11572
11576
  async function updateToLatest(opts = {}) {
11573
11577
  product.ensureHome();
11578
+ pruneLocalRetention();
11574
11579
  const cdnOrigin = resolveCdnOrigin(opts.cdnOrigin);
11575
11580
  const channel = resolveChannel(opts.channel);
11576
11581
  const pin = resolvePin();
@@ -11666,6 +11671,63 @@ function createRuntimeDelivery(product) {
11666
11671
  return { active, latest: null, pinned: null, outdated: false };
11667
11672
  }
11668
11673
  }
11674
+ function planLocalRetention(opts = {}) {
11675
+ product.ensureHome();
11676
+ const retainVersions = Math.max(
11677
+ 1,
11678
+ Math.floor(opts.retainVersions ?? DEFAULT_LOCAL_RUNTIME_RETENTION_COUNT)
11679
+ );
11680
+ const installed2 = listInstalledRuntimes(product);
11681
+ const installedSet = new Set(installed2);
11682
+ const activeVersion = product.readActiveRuntime();
11683
+ const pinnedVersion = resolvePin();
11684
+ const keep = /* @__PURE__ */ new Set();
11685
+ for (const version of [
11686
+ activeVersion,
11687
+ pinnedVersion,
11688
+ ...opts.protectVersions ?? []
11689
+ ]) {
11690
+ if (version && installedSet.has(version)) keep.add(version);
11691
+ }
11692
+ for (const version of [...installed2].reverse()) {
11693
+ if (keep.size >= retainVersions) break;
11694
+ keep.add(version);
11695
+ }
11696
+ const cacheTemplateMarker = "__RUNTIME_VERSION__";
11697
+ const cacheTemplate = runtimeTarballCacheName(product, cacheTemplateMarker);
11698
+ const markerOffset = cacheTemplate.indexOf(cacheTemplateMarker);
11699
+ const cachePrefix = cacheTemplate.slice(0, markerOffset);
11700
+ const cacheSuffix = cacheTemplate.slice(markerOffset + cacheTemplateMarker.length);
11701
+ let removeCacheFiles = [];
11702
+ if (markerOffset >= 0) {
11703
+ try {
11704
+ removeCacheFiles = import_node_fs4.default.readdirSync(product.cacheDir(), { withFileTypes: true }).filter((entry) => {
11705
+ if (!entry.isFile()) return false;
11706
+ const complete = entry.name.startsWith(cachePrefix) && entry.name.endsWith(cacheSuffix);
11707
+ const partial = entry.name.startsWith(cachePrefix) && entry.name.endsWith(`${cacheSuffix}.partial`);
11708
+ return complete || partial;
11709
+ }).map((entry) => import_node_path3.default.join(product.cacheDir(), entry.name)).sort();
11710
+ } catch {
11711
+ }
11712
+ }
11713
+ return {
11714
+ activeVersion,
11715
+ pinnedVersion,
11716
+ keepVersions: installed2.filter((version) => keep.has(version)),
11717
+ removeVersions: installed2.filter((version) => !keep.has(version)),
11718
+ removeCacheFiles
11719
+ };
11720
+ }
11721
+ function pruneLocalRetention(opts = {}) {
11722
+ const plan = planLocalRetention(opts);
11723
+ for (const version of plan.removeVersions) {
11724
+ import_node_fs4.default.rmSync(product.runtimeDir(version), { recursive: true, force: true });
11725
+ }
11726
+ for (const cacheFile of plan.removeCacheFiles) {
11727
+ import_node_fs4.default.rmSync(cacheFile, { force: true });
11728
+ }
11729
+ return plan;
11730
+ }
11669
11731
  return {
11670
11732
  product,
11671
11733
  resolveCdnOrigin,
@@ -11678,6 +11740,8 @@ function createRuntimeDelivery(product) {
11678
11740
  install,
11679
11741
  updateToLatest,
11680
11742
  checkUpToDate,
11743
+ planLocalRetention,
11744
+ pruneLocalRetention,
11681
11745
  listInstalled: () => listInstalledRuntimes(product)
11682
11746
  };
11683
11747
  }
@@ -11723,7 +11787,7 @@ function extractTarball(tarPath, destDir) {
11723
11787
  });
11724
11788
  });
11725
11789
  }
11726
- var import_node_child_process2, import_node_crypto, import_node_fs4, import_node_path3, import_node_stream, import_promises;
11790
+ var import_node_child_process2, import_node_crypto, import_node_fs4, import_node_path3, import_node_stream, import_promises, DEFAULT_LOCAL_RUNTIME_RETENTION_COUNT;
11727
11791
  var init_src = __esm({
11728
11792
  "../contrast-runtime-delivery/src/index.ts"() {
11729
11793
  "use strict";
@@ -11735,6 +11799,7 @@ var init_src = __esm({
11735
11799
  import_promises = require("node:stream/promises");
11736
11800
  init_product();
11737
11801
  init_product();
11802
+ DEFAULT_LOCAL_RUNTIME_RETENTION_COUNT = 2;
11738
11803
  }
11739
11804
  });
11740
11805
 
@@ -17840,6 +17905,7 @@ var init_run_registry = __esm({
17840
17905
  var init_telemetry = __esm({
17841
17906
  "cli/telemetry.ts"() {
17842
17907
  "use strict";
17908
+ init_agent_identity();
17843
17909
  init_shared_session();
17844
17910
  init_home_paths();
17845
17911
  }
package/dist-lib/vite.cjs CHANGED
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.285 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.287 | (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.285",
3
+ "version": "0.1.287",
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",
@@ -73,7 +73,9 @@ function rawCleanup() {
73
73
  const home = sootsimHomeDir()
74
74
  if (process.platform === 'darwin') {
75
75
  safeSpawn('launchctl', ['bootout', `gui/${getuid()}/dev.sootsim.daemon`])
76
+ safeSpawn('launchctl', ['bootout', `gui/${getuid()}/dev.sootsim.server`])
76
77
  safeRemove(path.join(os.homedir(), 'Library/LaunchAgents/dev.sootsim.daemon.plist'))
78
+ safeRemove(path.join(os.homedir(), 'Library/LaunchAgents/dev.sootsim.server.plist'))
77
79
  safeRemove(path.join(os.homedir(), 'Library/Logs/sootsim'), {
78
80
  recursive: true,
79
81
  })
@@ -21,6 +21,7 @@ automation, inspecting the render tree, and managing sims.
21
21
  | --- | --- |
22
22
  | `sootsim maestro` | author, generate, and run Maestro YAML flows against sootsim |
23
23
  | `sootsim detox` | run existing Detox suites against sootsim on headless Chromium |
24
+ | `sootsim cleanup` | inspect and reclaim local SootSim disk usage |
24
25
  | `sootsim record` | capture the live sim as webm/mp4/gif, or sample N png frames (--frames) |
25
26
  | `sootsim film` | record a flow on the flat canvas, replay it on the 3d device stage under a camera cinematic, save a clip |
26
27
  | `sootsim storage` | manage guest app storage and launch profiles |
@@ -0,0 +1,16 @@
1
+ export const DISPOSABLE_BROWSER_CACHE_DIR_NAMES = [
2
+ 'Cache',
3
+ 'Code Cache',
4
+ 'DawnCache',
5
+ 'DawnGraphiteCache',
6
+ 'DawnWebGPUCache',
7
+ 'GPUCache',
8
+ 'GrShaderCache',
9
+ 'ShaderCache',
10
+ ] as const
11
+
12
+ const disposableBrowserCacheDirs = new Set<string>(DISPOSABLE_BROWSER_CACHE_DIR_NAMES)
13
+
14
+ export function isDisposableBrowserCacheDir(name: string): boolean {
15
+ return disposableBrowserCacheDirs.has(name)
16
+ }