sootsim 0.1.301 → 0.1.303
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.
- package/dist-cli/bin.js +5 -5
- package/dist-cli/chunks/{agent-DWXNDXDJ.js → agent-NKFJH2RJ.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-DTPQFEMR.js → agent-wrapper-WEA3TGWF.js} +2 -2
- package/dist-cli/chunks/{app-fonts-MKW6UNBO.js → app-fonts-L5JXOKIF.js} +2 -2
- package/dist-cli/chunks/{assert-GN4KR5TI.js → assert-ZG65AUNK.js} +2 -2
- package/dist-cli/chunks/{auth-HLOV4GZN.js → auth-RMFBZQIW.js} +2 -2
- package/dist-cli/chunks/{beta-DP7K4JVJ.js → beta-RR6TCDCJ.js} +2 -2
- package/dist-cli/chunks/{camera-SH6FT7ZA.js → camera-JWOAFE6U.js} +2 -2
- package/dist-cli/chunks/{chunk-4PKUB2QX.js → chunk-2LMSJNAH.js} +2 -2
- package/dist-cli/chunks/{chunk-WKSX2VHB.js → chunk-3I647BPF.js} +1 -1
- package/dist-cli/chunks/{chunk-HEPIUAFX.js → chunk-3YYCMGOR.js} +3 -3
- package/dist-cli/chunks/{chunk-SOBEJUH4.js → chunk-4F7VUXKY.js} +2 -2
- package/dist-cli/chunks/{chunk-KYGB26L4.js → chunk-5NHCBHYZ.js} +2 -2
- package/dist-cli/chunks/{chunk-4MNKKMYG.js → chunk-657GXEAT.js} +2 -2
- package/dist-cli/chunks/{chunk-VXRYV6G6.js → chunk-6Q5PHS4F.js} +1 -1
- package/dist-cli/chunks/{chunk-M33LQWC2.js → chunk-APBN2B6C.js} +1 -1
- package/dist-cli/chunks/{chunk-NWM62KI3.js → chunk-ATRV3MGB.js} +2 -2
- package/dist-cli/chunks/{chunk-KEFBMDYK.js → chunk-AWE4ZKR3.js} +1 -1
- package/dist-cli/chunks/{chunk-MKQNHDDF.js → chunk-AXDVKOGM.js} +2 -2
- package/dist-cli/chunks/{chunk-V2SZPQJF.js → chunk-BDZ7GDAA.js} +1 -1
- package/dist-cli/chunks/{chunk-IRNRCBRW.js → chunk-BQLQCPXE.js} +1 -1
- package/dist-cli/chunks/{chunk-FVNWUEK2.js → chunk-BYCMWKNX.js} +3 -3
- package/dist-cli/chunks/{chunk-STF4UH5I.js → chunk-CQEK4J75.js} +2 -2
- package/dist-cli/chunks/{chunk-7RU45W2O.js → chunk-CVRPU5KX.js} +1 -1
- package/dist-cli/chunks/{chunk-QNQP3WYV.js → chunk-DTQ4XGJP.js} +3 -3
- package/dist-cli/chunks/chunk-E3POCZJT.js +4 -0
- package/dist-cli/chunks/{chunk-4FCN3KOD.js → chunk-FLLDNYUC.js} +2 -2
- package/dist-cli/chunks/{chunk-Q4ZLYMUP.js → chunk-FQZQKJZ5.js} +1 -1
- package/dist-cli/chunks/{chunk-YTUW6DGN.js → chunk-G4B2PTUA.js} +2 -2
- package/dist-cli/chunks/{chunk-RW75MMQZ.js → chunk-GVC4ZNVM.js} +2 -2
- package/dist-cli/chunks/{chunk-YXRD4B4X.js → chunk-H3U7LAZG.js} +2 -2
- package/dist-cli/chunks/{chunk-4OZG2LQA.js → chunk-HKWQLGKK.js} +8 -8
- package/dist-cli/chunks/{chunk-7LULF3D2.js → chunk-JZZIA5BR.js} +21 -10
- package/dist-cli/chunks/{chunk-OVEH5OOR.js → chunk-LIK6FJNR.js} +1 -1
- package/dist-cli/chunks/{chunk-UK7X4OX3.js → chunk-LK63GSPB.js} +1 -1
- package/dist-cli/chunks/{chunk-J22XZAGG.js → chunk-M4SIQQDE.js} +2 -2
- package/dist-cli/chunks/{chunk-YIBVYNHV.js → chunk-MLHEWBGL.js} +1 -1
- package/dist-cli/chunks/{chunk-NEKVW4FE.js → chunk-MLX2UIH7.js} +2 -2
- package/dist-cli/chunks/{chunk-WE74HC52.js → chunk-NRPNLTJI.js} +2 -2
- package/dist-cli/chunks/{chunk-LE6JWEXU.js → chunk-OSCWNNYR.js} +1 -1
- package/dist-cli/chunks/{chunk-DNH4ZWVK.js → chunk-QR4A5JV3.js} +2 -2
- package/dist-cli/chunks/{chunk-JDQ5AJJ4.js → chunk-SSGGUPY7.js} +2 -2
- package/dist-cli/chunks/{chunk-MFLCDFRS.js → chunk-TDM4IQS3.js} +2 -2
- package/dist-cli/chunks/{chunk-TABUERS3.js → chunk-TFWWL3HI.js} +1 -1
- package/dist-cli/chunks/{chunk-MPDBF324.js → chunk-TL6D2L7C.js} +2 -2
- package/dist-cli/chunks/{chunk-EODC7ZE7.js → chunk-U7GJF4CQ.js} +2 -2
- package/dist-cli/chunks/{chunk-RCH5EVVP.js → chunk-UJIGVLKD.js} +1 -1
- package/dist-cli/chunks/{chunk-Y4EES4A2.js → chunk-VGNEIUJ7.js} +2 -2
- package/dist-cli/chunks/{chunk-P2HUPEXS.js → chunk-VLLTUTO5.js} +2 -2
- package/dist-cli/chunks/{chunk-BGY7U4IH.js → chunk-WI5GVQ6M.js} +2 -2
- package/dist-cli/chunks/{chunk-SDBIR5ON.js → chunk-XAHT6BRW.js} +1 -1
- package/dist-cli/chunks/{chunk-YOLPZLST.js → chunk-XE2DUF5Z.js} +1 -1
- package/dist-cli/chunks/{chunk-6MFFAN7Q.js → chunk-YOV3CQIH.js} +1 -1
- package/dist-cli/chunks/{chunk-PPD77GEP.js → chunk-YPZDXYHV.js} +2 -2
- package/dist-cli/chunks/{chunk-3XC55LRK.js → chunk-YWAV3FQJ.js} +2 -2
- package/dist-cli/chunks/chunk-ZED5FLNC.js +125 -0
- package/dist-cli/chunks/{chunk-77CFHIGG.js → chunk-ZJ6EL5FU.js} +1 -1
- package/dist-cli/chunks/{cleanup-DIDGDPIX.js → cleanup-MTGLBGPQ.js} +2 -2
- package/dist-cli/chunks/{cli-version-K3UX3EWQ.js → cli-version-KF6SJ5QC.js} +2 -2
- package/dist-cli/chunks/{compat-CU5BZOTA.js → compat-NIROXTXH.js} +2 -2
- package/dist-cli/chunks/{config-ZDPMF7NT.js → config-GVI5ADMM.js} +2 -2
- package/dist-cli/chunks/{control-PKNXORO3.js → control-RLM3WBEH.js} +2 -2
- package/dist-cli/chunks/daemon-O2R2GEWR.js +4 -0
- package/dist-cli/chunks/{debug-FRVAHAUX.js → debug-QLQ6VFDL.js} +3 -3
- package/dist-cli/chunks/{desktop-RM4LA63P.js → desktop-4KAE6XGD.js} +3 -3
- package/dist-cli/chunks/{detox-XXPJIQFG.js → detox-XW4L3NAA.js} +2 -2
- package/dist-cli/chunks/{device-5CWUNYYM.js → device-IMVFXWBB.js} +2 -2
- package/dist-cli/chunks/{diagnose-7WHQUJOH.js → diagnose-JTFFK6SX.js} +2 -2
- package/dist-cli/chunks/disk-cleanup-3HBGT6XT.js +4 -0
- package/dist-cli/chunks/drivers-BHLLX7OX.js +4 -0
- package/dist-cli/chunks/{film-EEAFWERR.js → film-BTQI2ZPO.js} +3 -3
- package/dist-cli/chunks/flow-C7PWEH4C.js +4 -0
- package/dist-cli/chunks/help-LOC2M6FR.js +4 -0
- package/dist-cli/chunks/{hidden-runtime-alias-GEDAK5VD.js → hidden-runtime-alias-5Y3QDZ2L.js} +2 -2
- package/dist-cli/chunks/{home-paths-PE4236U4.js → home-paths-K2P3TAAX.js} +2 -2
- package/dist-cli/chunks/inspect-JH64MAHP.js +4 -0
- package/dist-cli/chunks/install-desktop-C6KE3OM5.js +4 -0
- package/dist-cli/chunks/{login-NBG6XEI2.js → login-DIHEERZB.js} +4 -4
- package/dist-cli/chunks/{logout-TLDRLFXP.js → logout-HXABB5BG.js} +2 -2
- package/dist-cli/chunks/{maestro-DHRICU2K.js → maestro-LF67TXN2.js} +3 -3
- package/dist-cli/chunks/{maestro-generate-QZAGYXXJ.js → maestro-generate-XU7IAT4W.js} +3 -3
- package/dist-cli/chunks/{mode-XOMKPZZG.js → mode-GJRNBJWL.js} +2 -2
- package/dist-cli/chunks/{optional-demo-registry-L66RRINW.js → optional-demo-registry-SXOSQMWZ.js} +2 -2
- package/dist-cli/chunks/{perf-GSKQKH3W.js → perf-IZY2XMUE.js} +2 -2
- package/dist-cli/chunks/{permissions-D4XQ4HBT.js → permissions-RLZXUFQU.js} +2 -2
- package/dist-cli/chunks/{record-QTA3IWSU.js → record-OBWLYFSP.js} +3 -3
- package/dist-cli/chunks/{report-issue-BVPBXZEM.js → report-issue-DU7TRHJK.js} +2 -2
- package/dist-cli/chunks/runtime-E7SIB4P3.js +4 -0
- package/dist-cli/chunks/screenshot-command-5IF4BSJ4.js +159 -0
- package/dist-cli/chunks/{screenshots-capture-NUVPCCYY.js → screenshots-capture-OFYWMTVR.js} +2 -2
- package/dist-cli/chunks/{serve-FR5M2RRQ.js → serve-DUES2MUY.js} +2 -2
- package/dist-cli/chunks/{setup-O4WMVQVP.js → setup-7JBMUE6Q.js} +2 -2
- package/dist-cli/chunks/{skills-RUYLHJED.js → skills-J5HVAM75.js} +2 -2
- package/dist-cli/chunks/{storage-OCCDGKMN.js → storage-EPTR6RW5.js} +2 -2
- package/dist-cli/chunks/store-W3YDQEZQ.js +4 -0
- package/dist-cli/chunks/telemetry-WXVIVQ4Y.js +4 -0
- package/dist-cli/chunks/{timeline-QWPHBXJ2.js → timeline-QR2474MZ.js} +2 -2
- package/dist-cli/chunks/{upgrade-WUQAUREZ.js → upgrade-MQL27HMQ.js} +2 -2
- package/dist-cli/chunks/upload-6IA2EKEH.js +4 -0
- package/dist-cli/chunks/{version-TCSZK3WH.js → version-ILGJD7EH.js} +2 -2
- package/dist-cli/chunks/{web-7P7SQTFS.js → web-NEPM3SZU.js} +2 -2
- package/dist-cli/chunks/{what-happened-KIUBAPFB.js → what-happened-KGOUXBW4.js} +2 -2
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +1 -1
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro.cjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +18 -6
- package/dist-lib/sdk.mjs +18 -6
- package/dist-lib/skills.cjs +6 -2
- package/dist-lib/vite.cjs +1 -1
- package/package.json +2 -2
- package/skills/sootsim-debug/SKILL.md +6 -0
- package/skills/sootsim-setup/SKILL.md +26 -0
- package/src/attached-projects.ts +2 -2
- package/src/host/bridge-host.ts +2 -2
- package/src/runtime-assets.ts +1 -1
- package/src/runtime-delivery.ts +1 -1
- package/src/vite-plugin.ts +1 -1
- package/dist-cli/chunks/chunk-EKNSKDBI.js +0 -125
- package/dist-cli/chunks/chunk-NR2G2PSN.js +0 -4
- package/dist-cli/chunks/daemon-OXELSM3C.js +0 -4
- package/dist-cli/chunks/disk-cleanup-EGAZA7DS.js +0 -4
- package/dist-cli/chunks/drivers-JEAO6IWD.js +0 -4
- package/dist-cli/chunks/flow-DMSEJ526.js +0 -4
- package/dist-cli/chunks/help-BTYQFHMT.js +0 -4
- package/dist-cli/chunks/inspect-RKOCZZ2A.js +0 -4
- package/dist-cli/chunks/install-desktop-25G42KWB.js +0 -4
- package/dist-cli/chunks/runtime-UQY75DPC.js +0 -4
- package/dist-cli/chunks/screenshot-command-YWDQBPE6.js +0 -156
- package/dist-cli/chunks/store-56RG4ZWJ.js +0 -4
- package/dist-cli/chunks/telemetry-YSUNFE7N.js +0 -4
- package/dist-cli/chunks/upload-D5BXJTXK.js +0 -4
package/dist-lib/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.303 | (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.
|
|
1
|
+
/*! sootsim v0.1.303 | (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.
|
|
1
|
+
/*! sootsim v0.1.303 | (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.
|
|
1
|
+
/*! sootsim v0.1.303 | (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.
|
|
1
|
+
/*! sootsim v0.1.303 | (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.
|
|
1
|
+
/*! sootsim v0.1.303 | (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/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.303 | (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.
|
|
1
|
+
/*! sootsim v0.1.303 | (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.
|
|
1
|
+
/*! sootsim v0.1.303 | (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
package/dist-lib/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.303 | (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/profiles.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.303 | (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/render-mode.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.303 | (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.
|
|
1
|
+
/*! sootsim v0.1.303 | (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.
|
|
1
|
+
/*! sootsim v0.1.303 | (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;
|
|
@@ -175,9 +175,14 @@ async function inspectDescribe(bridge, dumpOpts) {
|
|
|
175
175
|
const body = escaped.replace(/\\*/g, '.*').replace(/\\?/g, '.')
|
|
176
176
|
return new RegExp('^' + body + '$', 'i')
|
|
177
177
|
}
|
|
178
|
-
|
|
178
|
+
// clipping a describe line is a DISPLAY decision. opts.fullText (set by
|
|
179
|
+
// \`describe --json\`) keeps the real string, so a bundle-eval stack or a
|
|
180
|
+
// red-box message reaches the caller whole instead of ending in an
|
|
181
|
+
// ellipsis nothing downstream can undo.
|
|
182
|
+
const clipForDisplay = (value, max) => {
|
|
179
183
|
const text = typeof value === 'string' ? value.replace(/\\s+/g, ' ').trim() : ''
|
|
180
|
-
|
|
184
|
+
if (opts.fullText || text.length <= max) return text
|
|
185
|
+
return text.slice(0, max - 1).trimEnd() + '\u2026'
|
|
181
186
|
}
|
|
182
187
|
const formatInspectableTree = async () => {
|
|
183
188
|
if (typeof t.listInspectable !== 'function') return null
|
|
@@ -205,10 +210,12 @@ async function inspectDescribe(bridge, dumpOpts) {
|
|
|
205
210
|
if (role) parts.push('[' + role + ']')
|
|
206
211
|
else if (handlers.length > 0) parts.push('[tap]')
|
|
207
212
|
else parts.push('<' + type + '>')
|
|
208
|
-
const visibleText =
|
|
213
|
+
const visibleText = clipForDisplay(text, 50)
|
|
209
214
|
if (visibleText) parts.push(JSON.stringify(visibleText))
|
|
210
215
|
if (testID) parts.push('#' + testID)
|
|
211
|
-
if (label && label !== text)
|
|
216
|
+
if (label && label !== text) {
|
|
217
|
+
parts.push('label=' + JSON.stringify(clipForDisplay(label, 50)))
|
|
218
|
+
}
|
|
212
219
|
if (!opts.hideXy) {
|
|
213
220
|
const abs = node?.absolute || {}
|
|
214
221
|
const layout = node?.layout || {}
|
|
@@ -960,7 +967,11 @@ var WAIT_READY_PROBE = `(async () => {
|
|
|
960
967
|
const suppressed = external.entryErrors.find((item) => isReal(item) && item.suppressed === true)
|
|
961
968
|
if (suppressed) suppressedEntryError = suppressed.message
|
|
962
969
|
}
|
|
963
|
-
|
|
970
|
+
// once the app has errored its last status ("injecting sootsim
|
|
971
|
+
// modules...") is stale \u2014 reporting it makes a dead app read as one that
|
|
972
|
+
// is still booting.
|
|
973
|
+
if (externalError) loadingText = ''
|
|
974
|
+
else if (externalReady === false && externalStatus) loadingText = externalStatus
|
|
964
975
|
} catch {}
|
|
965
976
|
let errors = 0
|
|
966
977
|
try { errors = window.__sootsimConsole?.count?.()?.errors ?? 0 } catch {}
|
|
@@ -1062,6 +1073,7 @@ async function inspectWaitReady(bridge, timeoutMs = 2e4, options = {}) {
|
|
|
1062
1073
|
};
|
|
1063
1074
|
}
|
|
1064
1075
|
}
|
|
1076
|
+
if (last.externalError) return status;
|
|
1065
1077
|
if (options.onProgress && progressIntervalMs > 0 && now >= nextProgressAt) {
|
|
1066
1078
|
options.onProgress(status);
|
|
1067
1079
|
do {
|
package/dist-lib/sdk.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.303 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// cli/commands/inspect/core.ts
|
|
4
4
|
function resolveMaxMsFlag(args, fallbackMs) {
|
|
@@ -83,9 +83,14 @@ async function inspectDescribe(bridge, dumpOpts) {
|
|
|
83
83
|
const body = escaped.replace(/\\*/g, '.*').replace(/\\?/g, '.')
|
|
84
84
|
return new RegExp('^' + body + '$', 'i')
|
|
85
85
|
}
|
|
86
|
-
|
|
86
|
+
// clipping a describe line is a DISPLAY decision. opts.fullText (set by
|
|
87
|
+
// \`describe --json\`) keeps the real string, so a bundle-eval stack or a
|
|
88
|
+
// red-box message reaches the caller whole instead of ending in an
|
|
89
|
+
// ellipsis nothing downstream can undo.
|
|
90
|
+
const clipForDisplay = (value, max) => {
|
|
87
91
|
const text = typeof value === 'string' ? value.replace(/\\s+/g, ' ').trim() : ''
|
|
88
|
-
|
|
92
|
+
if (opts.fullText || text.length <= max) return text
|
|
93
|
+
return text.slice(0, max - 1).trimEnd() + '\u2026'
|
|
89
94
|
}
|
|
90
95
|
const formatInspectableTree = async () => {
|
|
91
96
|
if (typeof t.listInspectable !== 'function') return null
|
|
@@ -113,10 +118,12 @@ async function inspectDescribe(bridge, dumpOpts) {
|
|
|
113
118
|
if (role) parts.push('[' + role + ']')
|
|
114
119
|
else if (handlers.length > 0) parts.push('[tap]')
|
|
115
120
|
else parts.push('<' + type + '>')
|
|
116
|
-
const visibleText =
|
|
121
|
+
const visibleText = clipForDisplay(text, 50)
|
|
117
122
|
if (visibleText) parts.push(JSON.stringify(visibleText))
|
|
118
123
|
if (testID) parts.push('#' + testID)
|
|
119
|
-
if (label && label !== text)
|
|
124
|
+
if (label && label !== text) {
|
|
125
|
+
parts.push('label=' + JSON.stringify(clipForDisplay(label, 50)))
|
|
126
|
+
}
|
|
120
127
|
if (!opts.hideXy) {
|
|
121
128
|
const abs = node?.absolute || {}
|
|
122
129
|
const layout = node?.layout || {}
|
|
@@ -868,7 +875,11 @@ var WAIT_READY_PROBE = `(async () => {
|
|
|
868
875
|
const suppressed = external.entryErrors.find((item) => isReal(item) && item.suppressed === true)
|
|
869
876
|
if (suppressed) suppressedEntryError = suppressed.message
|
|
870
877
|
}
|
|
871
|
-
|
|
878
|
+
// once the app has errored its last status ("injecting sootsim
|
|
879
|
+
// modules...") is stale \u2014 reporting it makes a dead app read as one that
|
|
880
|
+
// is still booting.
|
|
881
|
+
if (externalError) loadingText = ''
|
|
882
|
+
else if (externalReady === false && externalStatus) loadingText = externalStatus
|
|
872
883
|
} catch {}
|
|
873
884
|
let errors = 0
|
|
874
885
|
try { errors = window.__sootsimConsole?.count?.()?.errors ?? 0 } catch {}
|
|
@@ -970,6 +981,7 @@ async function inspectWaitReady(bridge, timeoutMs = 2e4, options = {}) {
|
|
|
970
981
|
};
|
|
971
982
|
}
|
|
972
983
|
}
|
|
984
|
+
if (last.externalError) return status;
|
|
973
985
|
if (options.onProgress && progressIntervalMs > 0 && now >= nextProgressAt) {
|
|
974
986
|
options.onProgress(status);
|
|
975
987
|
do {
|
package/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.303 | (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;
|
|
@@ -18044,7 +18044,11 @@ var init_core = __esm({
|
|
|
18044
18044
|
const suppressed = external.entryErrors.find((item) => isReal(item) && item.suppressed === true)
|
|
18045
18045
|
if (suppressed) suppressedEntryError = suppressed.message
|
|
18046
18046
|
}
|
|
18047
|
-
|
|
18047
|
+
// once the app has errored its last status ("injecting sootsim
|
|
18048
|
+
// modules...") is stale \u2014 reporting it makes a dead app read as one that
|
|
18049
|
+
// is still booting.
|
|
18050
|
+
if (externalError) loadingText = ''
|
|
18051
|
+
else if (externalReady === false && externalStatus) loadingText = externalStatus
|
|
18048
18052
|
} catch {}
|
|
18049
18053
|
let errors = 0
|
|
18050
18054
|
try { errors = window.__sootsimConsole?.count?.()?.errors ?? 0 } catch {}
|
package/dist-lib/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.303 | (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.
|
|
3
|
+
"version": "0.1.303",
|
|
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",
|
|
@@ -189,7 +189,7 @@
|
|
|
189
189
|
"esbuild": "^0.25.0",
|
|
190
190
|
"sootsim-engine": "workspace:*",
|
|
191
191
|
"typescript": "^5.7.0",
|
|
192
|
-
"vite": "^8.
|
|
192
|
+
"vite": "^8.2.2",
|
|
193
193
|
"yaml": "^2.8.3"
|
|
194
194
|
}
|
|
195
195
|
}
|
|
@@ -63,6 +63,12 @@ regression test. a pile of ad-hoc logs helps no one and gets deleted.
|
|
|
63
63
|
query against it.
|
|
64
64
|
- **pin a sim once.** if more than one is live, an unpinned command
|
|
65
65
|
refuses to choose. run `sootsim use <id>` at the start of the workflow.
|
|
66
|
+
- **keep one sim and reuse its browser tab.** before `sootsim open`, run
|
|
67
|
+
`sootsim list --all`. if the target is already connected, pin it and use
|
|
68
|
+
`sootsim do reload`; do not open another tab to reload or retry a capture.
|
|
69
|
+
re-run `list --all` after each reload or reconnect; when another entry appears,
|
|
70
|
+
run `sootsim close --others` against the pinned sim immediately.
|
|
71
|
+
if the current sim must be replaced, close it before opening the replacement.
|
|
66
72
|
- **`debug eval` is an escape hatch.** if a top-level command feels
|
|
67
73
|
broken or missing, file an issue — every agent after you benefits from
|
|
68
74
|
a better CLI, not a pile of ad-hoc scripts.
|
|
@@ -23,6 +23,32 @@ debugging or `/sootsim-test` for writing tests.
|
|
|
23
23
|
- **an empty `sootsim list` is not "broken sootsim"** — it usually means the
|
|
24
24
|
daemon is down, the dev server port is wrong, or the runtime is missing.
|
|
25
25
|
walk the recovery checklist before reinstalling.
|
|
26
|
+
- **one sim per investigation. `--new` is an escape hatch, not the normal
|
|
27
|
+
invocation.** plain `sootsim open <port>` loads the target into the sim you
|
|
28
|
+
already have, `sootsim reload` reloads it in place, and `sootsim close`
|
|
29
|
+
disposes it when you are done. reach for `--new` only when the current sim is
|
|
30
|
+
held by another CLI, and close it afterwards. passing `--new` on every command
|
|
31
|
+
leaves a trail of abandoned browser tabs on whatever machine you are running
|
|
32
|
+
on, which is somebody's actual desktop.
|
|
33
|
+
- **sharing a machine with other agents? open ONE sim with `--new`, pin it, and
|
|
34
|
+
pass `--sim <id>` from then on.** this is the case `--new` exists for. an
|
|
35
|
+
unpinned command has no sim of its own, so it falls back to whatever sim is
|
|
36
|
+
currently PRIMARY — and that can be another agent's live sim, mid-run. a plain
|
|
37
|
+
`sootsim open <port>` from an unpinned CLI will happily retarget somebody
|
|
38
|
+
else's sim to your port and take over their session; the warning it prints is
|
|
39
|
+
easy to miss in a transcript. the current-sim pin is stored per CLI identity
|
|
40
|
+
(`sootsim-current-sim-<identity>.json`, keyed by your process-tree root), so
|
|
41
|
+
pinning is genuinely per-agent and does not fight anyone else:
|
|
42
|
+
|
|
43
|
+
```sh
|
|
44
|
+
sootsim open --new 8086 # your own sim; also records it as yours
|
|
45
|
+
sootsim list # read back its id
|
|
46
|
+
sootsim use <id> # pin it explicitly
|
|
47
|
+
sootsim describe --sim <id> # name it on every command after that
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
still close it when you are done. the reason not to pass `--new` on every
|
|
51
|
+
command is unchanged: each one spawns another browser tree.
|
|
26
52
|
- **never retry-loop `sootsim open` against a wedged or slow stack.** a
|
|
27
53
|
connect-timeout ("timed out waiting for opened sim to connect") means STOP and
|
|
28
54
|
diagnose — not retry. each retried open spawns a new browser tree (a
|
package/src/attached-projects.ts
CHANGED
|
@@ -10,7 +10,7 @@
|
|
|
10
10
|
import { randomBytes, createHash } from 'node:crypto'
|
|
11
11
|
import fs from 'node:fs'
|
|
12
12
|
import path from 'node:path'
|
|
13
|
-
import { electronUserDataDir } from './home-paths'
|
|
13
|
+
import { electronUserDataDir } from './home-paths.ts'
|
|
14
14
|
|
|
15
15
|
// plan → attached-projects-and-agents.md §data model
|
|
16
16
|
export interface AttachedProject {
|
|
@@ -510,7 +510,7 @@ export async function seedFromDemoAppRegistry(): Promise<void> {
|
|
|
510
510
|
// optional internal-only registry — resolves to [] on a published install
|
|
511
511
|
// (the registry is not shipped), so this seed is a no-op for real users and
|
|
512
512
|
// never pins their ports to internal demo apps.
|
|
513
|
-
const { loadOptionalDemoApps } = await import('../scripts/optional-demo-registry')
|
|
513
|
+
const { loadOptionalDemoApps } = await import('../scripts/optional-demo-registry.ts')
|
|
514
514
|
const apps = await loadOptionalDemoApps()
|
|
515
515
|
if (apps.length === 0) return
|
|
516
516
|
mutateStore((store) => {
|
package/src/host/bridge-host.ts
CHANGED
|
@@ -44,9 +44,9 @@ import {
|
|
|
44
44
|
handleFetchProxyRequest,
|
|
45
45
|
isAppApiRequestUrl,
|
|
46
46
|
isFetchProxyRequestUrl,
|
|
47
|
-
} from './fetch-proxy-handler'
|
|
47
|
+
} from './fetch-proxy-handler.ts'
|
|
48
48
|
import { openUrl as openUrlInBrowser, type OpenUrlOptions } from './open-url.ts'
|
|
49
|
-
import { handleWebSocketProxyUpgrade } from './websocket-proxy'
|
|
49
|
+
import { handleWebSocketProxyUpgrade } from './websocket-proxy.ts'
|
|
50
50
|
|
|
51
51
|
const SOOTSIM_CROSS_ORIGIN_EMBEDDER_POLICY = 'require-corp'
|
|
52
52
|
|
package/src/runtime-assets.ts
CHANGED
|
@@ -6,7 +6,7 @@ import fs from 'fs'
|
|
|
6
6
|
import path from 'path'
|
|
7
7
|
import { fileURLToPath } from 'url'
|
|
8
8
|
import { isValidRuntimeVersion } from '@contrast/runtime-delivery'
|
|
9
|
-
import { readActiveRuntime, runtimeDir } from './home-paths'
|
|
9
|
+
import { readActiveRuntime, runtimeDir } from './home-paths.ts'
|
|
10
10
|
|
|
11
11
|
export const SOOTSIM_RUNTIME_MISSING_MESSAGE =
|
|
12
12
|
'[sootsim] no engine runtime installed — run `sootsim setup`, or `sootsim runtime install`'
|
package/src/runtime-delivery.ts
CHANGED
package/src/vite-plugin.ts
CHANGED
|
@@ -661,7 +661,7 @@ export function reanimatedNativeSeamRedirect(): Plugin {
|
|
|
661
661
|
// the reanimated plugin above stays separate because it has package-specific
|
|
662
662
|
// edge cases (fabricUtils, validate-worklets-version). new migrations should
|
|
663
663
|
// use the manifest path unless they need similar special handling.
|
|
664
|
-
import { NATIVE_SEAM_MANIFEST } from './native-seam-manifest'
|
|
664
|
+
import { NATIVE_SEAM_MANIFEST } from './native-seam-manifest.ts'
|
|
665
665
|
export function manifestNativeSeamRedirect(): Plugin {
|
|
666
666
|
// build a fast lookup: pkg → { basenames, target }
|
|
667
667
|
const byPkg = new Map<
|