sootsim 0.1.176 → 0.1.178

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 (153) hide show
  1. package/dist-cli/bin.js +3 -3
  2. package/dist-cli/chunks/{agent-XZERN2SO.js → agent-FPRPN42P.js} +3 -3
  3. package/dist-cli/chunks/{agent-wrapper-SAIMSLSO.js → agent-wrapper-KABXHSDP.js} +2 -2
  4. package/dist-cli/chunks/{app-fonts-SQVNXLI5.js → app-fonts-GEL63MTY.js} +2 -2
  5. package/dist-cli/chunks/{assert-EWL6BYVH.js → assert-T55K3RFP.js} +2 -2
  6. package/dist-cli/chunks/beta-74JMB2XJ.js +2 -0
  7. package/dist-cli/chunks/{camera-FFYSKETF.js → camera-RPYSAI2K.js} +2 -2
  8. package/dist-cli/chunks/{chunk-VBUURELX.js → chunk-2IYQJHNS.js} +2 -2
  9. package/dist-cli/chunks/{chunk-6BU5E655.js → chunk-2SM7WWDI.js} +1 -1
  10. package/dist-cli/chunks/{chunk-MWTWVX32.js → chunk-3DSTCWVF.js} +2 -2
  11. package/dist-cli/chunks/{chunk-OAOQVBIR.js → chunk-42SYOZVV.js} +2 -2
  12. package/dist-cli/chunks/{chunk-Y2ZSLUGO.js → chunk-64VAJYXX.js} +2 -2
  13. package/dist-cli/chunks/{chunk-OORRMRMI.js → chunk-7BHPGH6Q.js} +1 -1
  14. package/dist-cli/chunks/{chunk-J2BOYJ2U.js → chunk-7KFBB76L.js} +2 -2
  15. package/dist-cli/chunks/{chunk-HAW6OMNW.js → chunk-B2Z36B4N.js} +2 -2
  16. package/dist-cli/chunks/{chunk-W5QHYSDJ.js → chunk-B5KTNMPL.js} +2 -2
  17. package/dist-cli/chunks/{chunk-JXZYXTBM.js → chunk-B77YOZBY.js} +2 -2
  18. package/dist-cli/chunks/{chunk-PA5EARX2.js → chunk-CJV7PX2Y.js} +2 -2
  19. package/dist-cli/chunks/{chunk-D6GUXY2L.js → chunk-CVBCNRKC.js} +2 -2
  20. package/dist-cli/chunks/chunk-DVBRRNWE.js +2 -0
  21. package/dist-cli/chunks/{chunk-2SUR2RR2.js → chunk-EHKLQO7I.js} +1 -1
  22. package/dist-cli/chunks/{chunk-XKVI3H2G.js → chunk-EUIPNUT4.js} +2 -2
  23. package/dist-cli/chunks/{chunk-CEMRS6UL.js → chunk-EY3XEEE4.js} +1 -1
  24. package/dist-cli/chunks/{chunk-W2AZ7ASM.js → chunk-H26BCZLV.js} +1 -1
  25. package/dist-cli/chunks/{chunk-BGP3OZID.js → chunk-IFJU3COY.js} +1 -1
  26. package/dist-cli/chunks/{chunk-STWES7DO.js → chunk-ITOXSEMN.js} +1 -1
  27. package/dist-cli/chunks/{chunk-Q4YNZFJF.js → chunk-JFQFJLTV.js} +4 -4
  28. package/dist-cli/chunks/{chunk-T3576IDX.js → chunk-K66BWMVS.js} +1 -1
  29. package/dist-cli/chunks/{chunk-PVIMLBMX.js → chunk-LJ2DIDX3.js} +3 -3
  30. package/dist-cli/chunks/{chunk-ZHFUIBAE.js → chunk-M7MO47BR.js} +1 -1
  31. package/dist-cli/chunks/{chunk-CFPELTGN.js → chunk-NE55HRAU.js} +2 -2
  32. package/dist-cli/chunks/{chunk-PPUEG6C4.js → chunk-O5SQ2RZE.js} +1 -1
  33. package/dist-cli/chunks/{chunk-N53VJ3FY.js → chunk-OK22FXGF.js} +2 -2
  34. package/dist-cli/chunks/{chunk-EU54PRND.js → chunk-PG42I7UQ.js} +2 -2
  35. package/dist-cli/chunks/{chunk-CF3NJNBJ.js → chunk-PHLMZYE4.js} +2 -2
  36. package/dist-cli/chunks/chunk-PNFYOQ4N.js +1 -0
  37. package/dist-cli/chunks/{chunk-SR7DWNZ3.js → chunk-PQLLJLSM.js} +1 -1
  38. package/dist-cli/chunks/{chunk-6S2MBFBN.js → chunk-PTBJZ3IO.js} +1 -1
  39. package/dist-cli/chunks/{chunk-ZAAITWNI.js → chunk-Q4PUVMFU.js} +1 -1
  40. package/dist-cli/chunks/{chunk-XKNXS6EC.js → chunk-RVVFK6CF.js} +1 -1
  41. package/dist-cli/chunks/{chunk-Y3NDHGEY.js → chunk-TBWJVJXW.js} +2 -2
  42. package/dist-cli/chunks/{chunk-HZSJ6FL3.js → chunk-UYKA44Y4.js} +2 -2
  43. package/dist-cli/chunks/chunk-V3N55LMK.js +4 -0
  44. package/dist-cli/chunks/{chunk-4WLI2STY.js → chunk-WY3B2Y5J.js} +2 -2
  45. package/dist-cli/chunks/{chunk-L2CTRBGR.js → chunk-XGU672KO.js} +1 -1
  46. package/dist-cli/chunks/{chunk-NMP6YTXS.js → chunk-YD3CNK36.js} +1 -1
  47. package/dist-cli/chunks/chunk-YFLYSJL6.js +1 -0
  48. package/dist-cli/chunks/{chunk-55LUU75I.js → chunk-YKV52CQX.js} +2 -2
  49. package/dist-cli/chunks/{chunk-OQ3N5IOK.js → chunk-YLQE2RO4.js} +3 -3
  50. package/dist-cli/chunks/{chunk-GBZNVWFP.js → chunk-YXBC4N6Z.js} +2 -2
  51. package/dist-cli/chunks/{chunk-63VEHUYI.js → chunk-ZKGEGXVG.js} +2 -2
  52. package/dist-cli/chunks/{chunk-NA2KJSP6.js → chunk-ZVZMM2RT.js} +1 -1
  53. package/dist-cli/chunks/cli-version-PVBTBN2X.js +2 -0
  54. package/dist-cli/chunks/{compat-ZFBUC4BH.js → compat-VDOLM4JY.js} +3 -3
  55. package/dist-cli/chunks/{control-3JJLR4W5.js → control-N6IWKWQ7.js} +2 -2
  56. package/dist-cli/chunks/{cpu-profile-FCEFZTYY.js → cpu-profile-CR4EKOPN.js} +2 -2
  57. package/dist-cli/chunks/daemon-HORAEEZR.js +2 -0
  58. package/dist-cli/chunks/{debug-CUBIZBSH.js → debug-4FCBFVDX.js} +3 -3
  59. package/dist-cli/chunks/{detox-4225EYR3.js → detox-TP77ADA2.js} +2 -2
  60. package/dist-cli/chunks/{device-S6BWDHPM.js → device-YRU6RDD2.js} +2 -2
  61. package/dist-cli/chunks/{diagnose-6CIKXRQI.js → diagnose-ZU4XLIKW.js} +2 -2
  62. package/dist-cli/chunks/drivers-BSP2USRT.js +2 -0
  63. package/dist-cli/chunks/{electron-37AEV4TD.js → electron-UWTORKRO.js} +3 -3
  64. package/dist-cli/chunks/flow-ZXUEU6WL.js +2 -0
  65. package/dist-cli/chunks/help-6OSM7CI4.js +2 -0
  66. package/dist-cli/chunks/{hints-NNX3XRHL.js → hints-X5YLALUQ.js} +2 -2
  67. package/dist-cli/chunks/{home-paths-GOXDTTLM.js → home-paths-LMEDDTAQ.js} +2 -2
  68. package/dist-cli/chunks/{inspect-YSYKYPAO.js → inspect-IFCVFMIW.js} +4 -4
  69. package/dist-cli/chunks/{install-desktop-OHGSHF3I.js → install-desktop-VVQIBZRU.js} +3 -3
  70. package/dist-cli/chunks/{keys-U7AANCE7.js → keys-GDX235ZQ.js} +2 -2
  71. package/dist-cli/chunks/{login-HQ7IGHOQ.js → login-MUIJHNM7.js} +4 -4
  72. package/dist-cli/chunks/{logout-CDVV56NI.js → logout-GV3H23TK.js} +2 -2
  73. package/dist-cli/chunks/{maestro-ZSO5MEL7.js → maestro-IFTHFVUR.js} +2 -2
  74. package/dist-cli/chunks/optional-demo-registry-26DVI7SE.js +2 -0
  75. package/dist-cli/chunks/{preview-QHRLVFZ3.js → preview-COYJHGIY.js} +2 -2
  76. package/dist-cli/chunks/{profile-JQ2VTWDK.js → profile-726ZBBXY.js} +2 -2
  77. package/dist-cli/chunks/{react-FZAOHKVR.js → react-LLN5L6NM.js} +2 -2
  78. package/dist-cli/chunks/{record-6SKJBVDV.js → record-TMJG2SMU.js} +2 -2
  79. package/dist-cli/chunks/runtime-3NQVPRES.js +2 -0
  80. package/dist-cli/chunks/{screenshot-ZWWD7RKD.js → screenshot-UFKR5MDO.js} +2 -2
  81. package/dist-cli/chunks/{screenshot-mode-AVGIIPOT.js → screenshot-mode-3ZGQR45L.js} +2 -2
  82. package/dist-cli/chunks/{screenshots-HNAQHHEZ.js → screenshots-JXS7HP2B.js} +2 -2
  83. package/dist-cli/chunks/{screenshots-capture-GR3JCQEV.js → screenshots-capture-ZBUHYPJJ.js} +2 -2
  84. package/dist-cli/chunks/{serve-E5JSN7LL.js → serve-ZG3KCDUO.js} +16 -16
  85. package/dist-cli/chunks/{setup-2M6ZQHFS.js → setup-2XT4LRR5.js} +2 -2
  86. package/dist-cli/chunks/{skills-EK6EIZKG.js → skills-3I7UWGIB.js} +2 -2
  87. package/dist-cli/chunks/{slides-7LMX75H7.js → slides-SCGGLDQQ.js} +2 -2
  88. package/dist-cli/chunks/store-7LKGHVAR.js +2 -0
  89. package/dist-cli/chunks/telemetry-SQRPQEGO.js +2 -0
  90. package/dist-cli/chunks/{test-GTYC4F55.js → test-ZRWZBUMK.js} +3 -3
  91. package/dist-cli/chunks/{three-mode-2PYZFZSU.js → three-mode-LJHDX4PK.js} +2 -2
  92. package/dist-cli/chunks/{timeline-MIFLVHUE.js → timeline-5OFJISEU.js} +2 -2
  93. package/dist-cli/chunks/{upgrade-ZVV5XJUB.js → upgrade-M7HFPN57.js} +2 -2
  94. package/dist-cli/chunks/upload-OOTFDONE.js +2 -0
  95. package/dist-cli/chunks/{version-IDZEL6JB.js → version-DHZQAZ66.js} +2 -2
  96. package/dist-cli/chunks/web-43QEU5SE.js +2 -0
  97. package/dist-cli/chunks/{what-happened-2YDLA4TU.js → what-happened-RNVAVGKL.js} +2 -2
  98. package/dist-cli/chunks/{whoami-MHMILIEP.js → whoami-F5EYWJCY.js} +2 -2
  99. package/dist-lib/agent-daemon-client.cjs +10 -1
  100. package/dist-lib/agent-events.cjs +1 -1
  101. package/dist-lib/agent-sessions.cjs +1 -1
  102. package/dist-lib/attached-projects.cjs +1 -1
  103. package/dist-lib/auth/shared-session.cjs +1 -1
  104. package/dist-lib/backend-origin.cjs +1 -1
  105. package/dist-lib/beta.cjs +1 -1
  106. package/dist-lib/beta.mjs +1 -1
  107. package/dist-lib/bridge-constants.cjs +1 -1
  108. package/dist-lib/cli-constants.cjs +1 -1
  109. package/dist-lib/config.cjs +1 -1
  110. package/dist-lib/detox/index.cjs +1 -1
  111. package/dist-lib/dev-bundle-resolution.cjs +1 -1
  112. package/dist-lib/home-paths.cjs +1 -1
  113. package/dist-lib/host/bridge-host.cjs +126 -12
  114. package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
  115. package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
  116. package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
  117. package/dist-lib/host/websocket-proxy.cjs +1 -1
  118. package/dist-lib/index.cjs +64 -21
  119. package/dist-lib/jump-to-source-babel.cjs +1 -1
  120. package/dist-lib/menu.cjs +1 -1
  121. package/dist-lib/menu.mjs +1 -1
  122. package/dist-lib/metro.cjs +1 -1
  123. package/dist-lib/profiles.cjs +1 -1
  124. package/dist-lib/render-mode.cjs +1 -1
  125. package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
  126. package/dist-lib/sdk.cjs +1 -1
  127. package/dist-lib/sdk.mjs +1 -1
  128. package/dist-lib/skills.cjs +244 -102
  129. package/dist-lib/vite.cjs +64 -18
  130. package/package.json +7 -1
  131. package/src/agent-daemon-client.ts +13 -0
  132. package/src/agent-identity.ts +21 -0
  133. package/src/agentbus-prompt.ts +80 -0
  134. package/src/host/agent-host.ts +42 -0
  135. package/src/host/bridge-host.ts +14 -1
  136. package/src/native-seam-manifest.ts +11 -0
  137. package/src/vite-plugin-one.ts +63 -16
  138. package/dist-cli/chunks/beta-2CPZK3F2.js +0 -2
  139. package/dist-cli/chunks/chunk-3LI5PWSP.js +0 -2
  140. package/dist-cli/chunks/chunk-6WURQDZI.js +0 -1
  141. package/dist-cli/chunks/chunk-NPPSB4KE.js +0 -1
  142. package/dist-cli/chunks/chunk-XC3EDXUI.js +0 -4
  143. package/dist-cli/chunks/cli-version-ZQBDNAUR.js +0 -2
  144. package/dist-cli/chunks/daemon-3GBPTTR7.js +0 -2
  145. package/dist-cli/chunks/drivers-LI6YV5M7.js +0 -2
  146. package/dist-cli/chunks/flow-VBH4BQSB.js +0 -2
  147. package/dist-cli/chunks/help-23IS4JFP.js +0 -2
  148. package/dist-cli/chunks/optional-demo-registry-RG5TBVMN.js +0 -2
  149. package/dist-cli/chunks/runtime-KFHRVRZQ.js +0 -2
  150. package/dist-cli/chunks/store-VOGIKQFW.js +0 -2
  151. package/dist-cli/chunks/telemetry-7TUUNCCB.js +0 -2
  152. package/dist-cli/chunks/upload-AW66MDC5.js +0 -2
  153. package/dist-cli/chunks/web-IGOSYQWE.js +0 -2
@@ -1,5 +1,5 @@
1
- /*! sootsim v0.1.176 | (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-6BU5E655.js";import{c as A,e as _}from"./chunk-HAW6OMNW.js";import"./chunk-STWES7DO.js";import{b as k}from"./chunk-XC3EDXUI.js";import"./chunk-OORRMRMI.js";import"./chunk-ZHFUIBAE.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.178 | (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-2SM7WWDI.js";import{c as A,e as _}from"./chunk-B2Z36B4N.js";import"./chunk-ITOXSEMN.js";import{b as k}from"./chunk-V3N55LMK.js";import"./chunk-7BHPGH6Q.js";import"./chunk-M7MO47BR.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,2 +1,2 @@
1
- /*! sootsim v0.1.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
- import{d as i}from"./chunk-4WLI2STY.js";import{d as n}from"./chunk-OAOQVBIR.js";import"./chunk-OORRMRMI.js";import"./chunk-ZHFUIBAE.js";async function u(){let o=i();if(o||(console.log(" not signed in"),console.log(" set SOOTSIM_API_KEY=sk_sootsim_\u2026 or run `sootsim login`"),process.exit(1)),o.kind==="api-key"){let r=`${o.secret.slice(0,14)}\u2026`,t=o.source==="env"?"SOOTSIM_API_KEY env var":"saved key (~/.config/sootsim/credentials.json)";console.log(` api key ${r}`),console.log(` source: ${t}`);return}if(o.kind==="github"){console.log(` github token (${o.source})`),console.log(` repo: ${o.repoId}`);return}let e=await n(),s=e?.user;console.log(` ${s?.email||s?.name||s?.id||"signed in"}`),console.log(` origin: ${e?.origin??o.origin}`),e?.updatedAt&&console.log(` updated: ${e.updatedAt}`)}export{u as runWhoami};
1
+ /*! sootsim v0.1.178 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
+ import{d as i}from"./chunk-WY3B2Y5J.js";import{d as n}from"./chunk-42SYOZVV.js";import"./chunk-7BHPGH6Q.js";import"./chunk-M7MO47BR.js";async function u(){let o=i();if(o||(console.log(" not signed in"),console.log(" set SOOTSIM_API_KEY=sk_sootsim_\u2026 or run `sootsim login`"),process.exit(1)),o.kind==="api-key"){let r=`${o.secret.slice(0,14)}\u2026`,t=o.source==="env"?"SOOTSIM_API_KEY env var":"saved key (~/.config/sootsim/credentials.json)";console.log(` api key ${r}`),console.log(` source: ${t}`);return}if(o.kind==="github"){console.log(` github token (${o.source})`),console.log(` repo: ${o.repoId}`);return}let e=await n(),s=e?.user;console.log(` ${s?.email||s?.name||s?.id||"signed in"}`),console.log(` origin: ${e?.origin??o.origin}`),e?.updatedAt&&console.log(` updated: ${e.updatedAt}`)}export{u as runWhoami};
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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;
@@ -249,6 +249,15 @@ var AgentDaemonClient = class {
249
249
  prompt
250
250
  });
251
251
  }
252
+ async sendClaimedPrompt(simId, prompt) {
253
+ return this.send(
254
+ "agent:send-claimed-prompt",
255
+ {
256
+ simId,
257
+ prompt
258
+ }
259
+ );
260
+ }
252
261
  async endSession(sessionId) {
253
262
  return this.send("agent:end-session", { sessionId });
254
263
  }
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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;
@@ -156,10 +156,10 @@ function tcpPing(port, timeout = TCP_GATE_MS) {
156
156
  sock.connect(port, "localhost");
157
157
  });
158
158
  }
159
- function httpGet(port, path7, method = "GET", timeout = TIMEOUT_MS, headers = {}) {
159
+ function httpGet(port, path8, method = "GET", timeout = TIMEOUT_MS, headers = {}) {
160
160
  return new Promise((resolve) => {
161
161
  const req = import_http.default.request(
162
- { hostname: "localhost", port, path: path7, method, timeout, headers },
162
+ { hostname: "localhost", port, path: path8, method, timeout, headers },
163
163
  (res) => {
164
164
  let body = "";
165
165
  res.on("data", (c) => body += c.toString());
@@ -942,8 +942,8 @@ function extractTarball(tarPath, destDir) {
942
942
  }
943
943
 
944
944
  // src/host/agent-host.ts
945
- var import_node_fs5 = __toESM(require("node:fs"), 1);
946
- var import_node_path4 = __toESM(require("node:path"), 1);
945
+ var import_node_fs6 = __toESM(require("node:fs"), 1);
946
+ var import_node_path5 = __toESM(require("node:path"), 1);
947
947
 
948
948
  // src/agent-sessions.ts
949
949
  var import_node_child_process = require("node:child_process");
@@ -1671,6 +1671,85 @@ async function waitForFirstEvent(fifo, predicate, timeoutMs) {
1671
1671
  }
1672
1672
  }
1673
1673
 
1674
+ // src/agentbus-prompt.ts
1675
+ var import_node_child_process2 = require("node:child_process");
1676
+ var import_node_fs5 = __toESM(require("node:fs"), 1);
1677
+ var import_node_os2 = __toESM(require("node:os"), 1);
1678
+ var import_node_path4 = __toESM(require("node:path"), 1);
1679
+
1680
+ // src/agent-identity.ts
1681
+ var AGENTBUS_SESSION_RE = /^[A-Za-z0-9._:-]{1,160}$/;
1682
+ function agentbusSessionIdFromCliIdentity(identity) {
1683
+ if (!identity?.startsWith("AGENTBUS_SESSION:")) return null;
1684
+ const sessionId = identity.slice("AGENTBUS_SESSION:".length).trim();
1685
+ if (!AGENTBUS_SESSION_RE.test(sessionId)) return null;
1686
+ return sessionId;
1687
+ }
1688
+ function isValidAgentbusSessionId(sessionId) {
1689
+ return AGENTBUS_SESSION_RE.test(sessionId);
1690
+ }
1691
+
1692
+ // src/agentbus-prompt.ts
1693
+ function formatAgentbusPromptText(prompt) {
1694
+ return typeof prompt.text === "string" ? prompt.text.trim() : "";
1695
+ }
1696
+ function resolveAgentbusCommand(explicit) {
1697
+ const fromArg = explicit?.trim();
1698
+ if (fromArg) return fromArg;
1699
+ const fromEnv = process.env.AGENTBUS_COMMAND?.trim();
1700
+ if (fromEnv) return fromEnv;
1701
+ const localBin = import_node_path4.default.join(import_node_os2.default.homedir(), ".local", "bin", "agentbus");
1702
+ if (import_node_fs5.default.existsSync(localBin)) return localBin;
1703
+ return "agentbus";
1704
+ }
1705
+ async function sendPromptToAgentbusSession(input) {
1706
+ const sessionId = input.sessionId.trim();
1707
+ if (!isValidAgentbusSessionId(sessionId)) {
1708
+ throw new Error(`invalid agentbus session id: ${sessionId || "<empty>"}`);
1709
+ }
1710
+ const text = formatAgentbusPromptText(input.prompt);
1711
+ if (!text) {
1712
+ throw new Error("prompt text is empty");
1713
+ }
1714
+ const command = resolveAgentbusCommand(input.command);
1715
+ const timeoutMs = input.timeoutMs ?? 15e3;
1716
+ await new Promise((resolve, reject) => {
1717
+ const child = (0, import_node_child_process2.spawn)(command, ["send", sessionId, text], {
1718
+ stdio: ["ignore", "ignore", "pipe"],
1719
+ env: process.env
1720
+ });
1721
+ let stderr = "";
1722
+ const timer = setTimeout(() => {
1723
+ try {
1724
+ child.kill("SIGTERM");
1725
+ } catch {
1726
+ }
1727
+ reject(new Error(`agentbus send timed out after ${Math.round(timeoutMs / 1e3)}s`));
1728
+ }, timeoutMs);
1729
+ child.stderr?.setEncoding("utf8");
1730
+ child.stderr?.on("data", (chunk) => {
1731
+ if (stderr.length < 4e3) stderr += String(chunk);
1732
+ });
1733
+ child.on("error", (err) => {
1734
+ clearTimeout(timer);
1735
+ reject(err);
1736
+ });
1737
+ child.on("exit", (code, signal) => {
1738
+ clearTimeout(timer);
1739
+ if (code === 0) {
1740
+ resolve();
1741
+ return;
1742
+ }
1743
+ const detail = stderr.trim();
1744
+ reject(
1745
+ new Error(
1746
+ detail || `agentbus send exited with ${signal ? `signal ${signal}` : `code ${code ?? "unknown"}`}`
1747
+ )
1748
+ );
1749
+ });
1750
+ });
1751
+ }
1752
+
1674
1753
  // src/host/agent-host.ts
1675
1754
  var WS_OPEN = 1;
1676
1755
  function defaultExcludePorts() {
@@ -1778,6 +1857,8 @@ var AgentHost = class {
1778
1857
  return listSessions(msg.projectId ? String(msg.projectId) : void 0);
1779
1858
  case "agent:start-session":
1780
1859
  return this.doStartSession(msg.input ?? {});
1860
+ case "agent:send-claimed-prompt":
1861
+ return this.sendClaimedPrompt(msg);
1781
1862
  case "agent:send-prompt": {
1782
1863
  const sessionId = String(msg.sessionId);
1783
1864
  const session = findSessionById(sessionId);
@@ -1809,6 +1890,28 @@ var AgentHost = class {
1809
1890
  }
1810
1891
  }
1811
1892
  // --- operation impls ---
1893
+ async sendClaimedPrompt(msg) {
1894
+ const simId = typeof msg.simId === "string" ? msg.simId.trim() : "";
1895
+ if (!simId) {
1896
+ throw new AgentSessionError("NO_SIM", "agent:send-claimed-prompt requires simId");
1897
+ }
1898
+ const lease = this.opts.resolveCliLease?.(simId) ?? null;
1899
+ if (!lease || lease.kind !== "cli" || lease.expiresAt <= Date.now()) {
1900
+ throw new AgentSessionError("NO_CLAIM", `sim ${simId} has no active CLI claim`);
1901
+ }
1902
+ const sessionId = agentbusSessionIdFromCliIdentity(lease.cliIdentityKey);
1903
+ if (!sessionId) {
1904
+ throw new AgentSessionError(
1905
+ "UNSUPPORTED_CLAIM",
1906
+ `sim ${simId} is claimed by a CLI identity that is not promptable`
1907
+ );
1908
+ }
1909
+ await sendPromptToAgentbusSession({
1910
+ sessionId,
1911
+ prompt: this.normalizePromptEnvelope(msg)
1912
+ });
1913
+ return { ok: true, routed: "agentbus", sessionId };
1914
+ }
1812
1915
  async doStartSession(input) {
1813
1916
  const project = findProjectById(input.projectId);
1814
1917
  if (!project) {
@@ -1838,7 +1941,7 @@ var AgentHost = class {
1838
1941
  );
1839
1942
  const project = upsertProject({
1840
1943
  cwd: match.cwd,
1841
- name: match.projectName ?? import_node_path4.default.basename(match.cwd),
1944
+ name: match.projectName ?? import_node_path5.default.basename(match.cwd),
1842
1945
  preferredProvider: input.provider ?? existing?.preferredProvider,
1843
1946
  sourceRoots: existing?.sourceRoots ?? [match.cwd],
1844
1947
  knownBundleUrls,
@@ -1849,18 +1952,18 @@ var AgentHost = class {
1849
1952
  }
1850
1953
  getTranscript(sessionId) {
1851
1954
  const p = transcriptPath(sessionId);
1852
- if (!import_node_fs5.default.existsSync(p)) {
1955
+ if (!import_node_fs6.default.existsSync(p)) {
1853
1956
  return { error: "transcript not found", code: "NO_TRANSCRIPT" };
1854
1957
  }
1855
- return import_node_fs5.default.readFileSync(p, "utf8");
1958
+ return import_node_fs6.default.readFileSync(p, "utf8");
1856
1959
  }
1857
1960
  getPaths() {
1858
1961
  const dir = getUserDataDir();
1859
1962
  return {
1860
1963
  userDataDir: dir,
1861
- storeFile: import_node_path4.default.join(dir, "attached-projects.json"),
1862
- sessionsDir: import_node_path4.default.join(dir, "sessions"),
1863
- transcriptsDir: import_node_path4.default.join(dir, "transcripts")
1964
+ storeFile: import_node_path5.default.join(dir, "attached-projects.json"),
1965
+ sessionsDir: import_node_path5.default.join(dir, "sessions"),
1966
+ transcriptsDir: import_node_path5.default.join(dir, "transcripts")
1864
1967
  };
1865
1968
  }
1866
1969
  // --- subscription management ---
@@ -2857,7 +2960,18 @@ var SootSimBridgeHost = class _SootSimBridgeHost {
2857
2960
  this.shouldWriteDevLockfile = opts.writeDevLockfile === true;
2858
2961
  this.portFallbackCount = Math.max(1, opts.portFallbackCount ?? 10);
2859
2962
  this.openUrlHandler = opts.openUrl;
2860
- this.agentHost = new AgentHost({ getExcludePorts: opts.agentScanExcludes });
2963
+ this.agentHost = new AgentHost({
2964
+ getExcludePorts: opts.agentScanExcludes,
2965
+ resolveCliLease: (simId) => {
2966
+ const sim = this.sims.get(simId);
2967
+ const lease = sim ? this.getActiveLease(sim) : null;
2968
+ return lease ? {
2969
+ kind: lease.kind,
2970
+ cliIdentityKey: lease.cliIdentityKey,
2971
+ expiresAt: lease.expiresAt
2972
+ } : null;
2973
+ }
2974
+ });
2861
2975
  this.sootbeanOrigin = opts.sootbeanOrigin?.replace(/\/$/, "") || null;
2862
2976
  this.simIdleReapTtlMs = opts.simIdleReapTtlMs ?? _SootSimBridgeHost.SIM_IDLE_REAP_TTL_MS;
2863
2977
  this.automationSimIdleReapTtlMs = opts.automationSimIdleReapTtlMs ?? _SootSimBridgeHost.AUTOMATION_SIM_IDLE_REAP_TTL_MS;
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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,9 +44,8 @@ module.exports = __toCommonJS(src_exports);
44
44
  var import_fs2 = __toESM(require("fs"), 1);
45
45
  var import_path2 = __toESM(require("path"), 1);
46
46
 
47
- // src/runtime-assets.ts
48
- var import_fs = __toESM(require("fs"), 1);
49
- var import_path = __toESM(require("path"), 1);
47
+ // src/bridge-constants.ts
48
+ var DEFAULT_SOOTSIM_BRIDGE_PORT = 7668;
50
49
 
51
50
  // src/home-paths.ts
52
51
  var import_node_fs = __toESM(require("node:fs"), 1);
@@ -54,6 +53,8 @@ var import_node_os = require("node:os");
54
53
  var import_node_path = __toESM(require("node:path"), 1);
55
54
  var SOOTSIM_HOME_ENV = "SOOTSIM_HOME";
56
55
  var ACTIVE_RUNTIME_FILE = "active";
56
+ var DAEMON_LOCKFILE = "daemon.json";
57
+ var DAEMON_HEARTBEAT_STALE_MS = 3e4;
57
58
  function sootsimHomeDir() {
58
59
  const override = process.env[SOOTSIM_HOME_ENV];
59
60
  if (override && override.length > 0) return import_node_path.default.resolve(override);
@@ -68,6 +69,9 @@ function runtimeDir(version) {
68
69
  function activeRuntimeFile() {
69
70
  return import_node_path.default.join(runtimesDir(), ACTIVE_RUNTIME_FILE);
70
71
  }
72
+ function daemonLockfilePath() {
73
+ return import_node_path.default.join(sootsimHomeDir(), DAEMON_LOCKFILE);
74
+ }
71
75
  function readActiveRuntime() {
72
76
  try {
73
77
  const value = import_node_fs.default.readFileSync(activeRuntimeFile(), "utf8").trim();
@@ -77,8 +81,39 @@ function readActiveRuntime() {
77
81
  }
78
82
  }
79
83
  var DAEMON_LOCKFILE_MAX_BYTES = 16 * 1024;
84
+ function readDaemonLockfile() {
85
+ try {
86
+ const fd = import_node_fs.default.openSync(daemonLockfilePath(), "r");
87
+ try {
88
+ const buf = Buffer.alloc(DAEMON_LOCKFILE_MAX_BYTES);
89
+ const bytesRead = import_node_fs.default.readSync(fd, buf, 0, DAEMON_LOCKFILE_MAX_BYTES, 0);
90
+ const raw = buf.subarray(0, bytesRead).toString("utf8");
91
+ const parsed = JSON.parse(raw);
92
+ if (parsed && parsed.schema === 1 && typeof parsed.pid === "number" && typeof parsed.bridgePort === "number" && typeof parsed.runtimePort === "number" && typeof parsed.startedAt === "number" && typeof parsed.heartbeatAt === "number") {
93
+ return parsed;
94
+ }
95
+ return null;
96
+ } finally {
97
+ import_node_fs.default.closeSync(fd);
98
+ }
99
+ } catch {
100
+ return null;
101
+ }
102
+ }
103
+ function isDaemonLockfileFresh(lock, now = Date.now()) {
104
+ if (!lock) return false;
105
+ if (now - lock.heartbeatAt > DAEMON_HEARTBEAT_STALE_MS) return false;
106
+ try {
107
+ process.kill(lock.pid, 0);
108
+ return true;
109
+ } catch {
110
+ return false;
111
+ }
112
+ }
80
113
 
81
114
  // src/runtime-assets.ts
115
+ var import_fs = __toESM(require("fs"), 1);
116
+ var import_path = __toESM(require("path"), 1);
82
117
  var SOOTSIM_RUNTIME_MISSING_MESSAGE = "[sootsim] no engine runtime installed \u2014 run `sootsim setup`, or `sootsim runtime install`";
83
118
  var MIME_TYPES = {
84
119
  ".js": "application/javascript",
@@ -153,6 +188,13 @@ function sootsimPlugin(options = {}) {
153
188
  name: "sootsim-one",
154
189
  configureServer(server) {
155
190
  const bundleUrl = options.bundleUrl || "/node_modules/one/metro-entry.bundle?platform=ios&dev=true&minify=false";
191
+ const buildShellHtml = (runtimeRoot) => {
192
+ const html = import_fs2.default.readFileSync(import_path2.default.join(runtimeRoot, "index.html"), "utf8");
193
+ const lock = readDaemonLockfile();
194
+ const bridgePort = lock && isDaemonLockfileFresh(lock) && lock.bridgePort > 0 ? lock.bridgePort : DEFAULT_SOOTSIM_BRIDGE_PORT;
195
+ const inject = `<script>(function(){var u=new URL(location.href);if(!u.searchParams.has('bundle'))u.searchParams.set('bundle',${JSON.stringify(bundleUrl)});window.__sootsimBridgePort=${bridgePort};history.replaceState(null,'','${prefix2}/'+u.search)})()</script>`;
196
+ return html.replace("</head>", inject + "</head>");
197
+ };
156
198
  server.middlewares.use((req, res, next) => {
157
199
  const origWriteHead = res.writeHead.bind(res);
158
200
  res.writeHead = function(statusCode, ...args) {
@@ -169,6 +211,22 @@ function sootsimPlugin(options = {}) {
169
211
  };
170
212
  next();
171
213
  });
214
+ server.middlewares.use((req, res, next) => {
215
+ if ((req.url || "").split("?")[0] !== "/__server-scan") return next();
216
+ const scanPort = server.config.server.port || 8081;
217
+ const absoluteBundleUrl = bundleUrl.startsWith("http") ? bundleUrl : `http://localhost:${scanPort}${bundleUrl}`;
218
+ res.setHeader("content-type", "application/json");
219
+ res.end(
220
+ JSON.stringify([
221
+ {
222
+ port: scanPort,
223
+ framework: "one",
224
+ bundleUrl: absoluteBundleUrl,
225
+ lastSeen: Date.now()
226
+ }
227
+ ])
228
+ );
229
+ });
172
230
  server.middlewares.use((req, res, next) => {
173
231
  const url = req.url || "";
174
232
  const pathname = url.split("?")[0];
@@ -190,14 +248,8 @@ function sootsimPlugin(options = {}) {
190
248
  }
191
249
  }
192
250
  if (pathname === prefix2 || pathname === prefix2 + "/") {
193
- const htmlPath = import_path2.default.join(runtimeRoot, "index.html");
194
- let html = import_fs2.default.readFileSync(htmlPath, "utf8");
195
- html = html.replace(
196
- "</head>",
197
- `<script>history.replaceState(null,'','${prefix2}/?bundle=${encodeURIComponent(bundleUrl)}')</script></head>`
198
- );
199
251
  res.setHeader("content-type", "text/html");
200
- res.end(html);
252
+ res.end(buildShellHtml(runtimeRoot));
201
253
  return;
202
254
  }
203
255
  if (pathname.startsWith(prefix2 + "/")) {
@@ -211,14 +263,8 @@ function sootsimPlugin(options = {}) {
211
263
  }
212
264
  const ext = import_path2.default.extname(pathname);
213
265
  if (!ext) {
214
- const htmlPath = import_path2.default.join(runtimeRoot, "index.html");
215
- let html = import_fs2.default.readFileSync(htmlPath, "utf8");
216
- html = html.replace(
217
- "</head>",
218
- `<script>history.replaceState(null,'','${prefix2}/?bundle=${encodeURIComponent(bundleUrl)}')</script></head>`
219
- );
220
266
  res.setHeader("content-type", "text/html");
221
- res.end(html);
267
+ res.end(buildShellHtml(runtimeRoot));
222
268
  return;
223
269
  }
224
270
  }
@@ -409,9 +455,6 @@ function sootsimJumpToSourceBabelPlugin(api, options = {}) {
409
455
  };
410
456
  }
411
457
 
412
- // src/bridge-constants.ts
413
- var DEFAULT_SOOTSIM_BRIDGE_PORT = 7668;
414
-
415
458
  // src/cli-constants.ts
416
459
  var DEFAULT_SOOTSIM_SHELL_URL = "http://localhost:5173/";
417
460
  // Annotate the CommonJS export names for ESM import in node:
@@ -1,4 +1,4 @@
1
- /*! sootsim v0.1.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (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.176 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
1
+ /*! sootsim v0.1.178 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
2
2
 
3
3
  // cli/commands/inspect/core.ts
4
4
  function resolveMaxMsFlag(args, fallbackMs) {