sootsim 0.1.120 → 0.1.121
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 +3 -3
- package/dist-cli/chunks/{agent-JAQ76LFW.js → agent-NZ4A6JKO.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-UFBNAQR3.js → agent-wrapper-CYQ5L2YH.js} +2 -2
- package/dist-cli/chunks/{app-fonts-66WNE562.js → app-fonts-2DF4NW5D.js} +2 -2
- package/dist-cli/chunks/{assert-RXN5UUG3.js → assert-PASM5PLL.js} +2 -2
- package/dist-cli/chunks/auto-bootstrap-IPNK6GF7.js +2 -0
- package/dist-cli/chunks/beta-RG7JT6HD.js +2 -0
- package/dist-cli/chunks/chunk-2FTVPI7F.js +2 -0
- package/dist-cli/chunks/{chunk-E6MZZ2JK.js → chunk-2U4CGOD6.js} +1 -1
- package/dist-cli/chunks/{chunk-JHOXMDAW.js → chunk-3A7SRWSQ.js} +2 -2
- package/dist-cli/chunks/{chunk-KPNFYPCM.js → chunk-3DDNLPIH.js} +2 -2
- package/dist-cli/chunks/{chunk-SPNQRDT7.js → chunk-3WDN2S2A.js} +1 -1
- package/dist-cli/chunks/{chunk-3OXUZ4YW.js → chunk-4BXESMZ7.js} +1 -1
- package/dist-cli/chunks/{chunk-IGRECENR.js → chunk-4UQMPWDA.js} +1 -1
- package/dist-cli/chunks/{chunk-PISK5DP6.js → chunk-5OA35LZX.js} +2 -2
- package/dist-cli/chunks/{chunk-P3YMHC64.js → chunk-7CA63OS4.js} +1 -1
- package/dist-cli/chunks/{chunk-OJQCMP4V.js → chunk-7RXO4KKF.js} +1 -1
- package/dist-cli/chunks/{chunk-O2ZEDQRY.js → chunk-B77PWTHR.js} +2 -2
- package/dist-cli/chunks/chunk-BTWXWUDB.js +1 -0
- package/dist-cli/chunks/{chunk-527SSINQ.js → chunk-CGB6KRKN.js} +2 -2
- package/dist-cli/chunks/{chunk-QL5FA4KK.js → chunk-DORQQNP4.js} +2 -2
- package/dist-cli/chunks/{chunk-D4S3A7VQ.js → chunk-GU3MWKJY.js} +1 -1
- package/dist-cli/chunks/{chunk-6ECCKNU4.js → chunk-I26R4PE2.js} +1 -1
- package/dist-cli/chunks/{chunk-7IJSQITG.js → chunk-IQNZPHGD.js} +2 -2
- package/dist-cli/chunks/{chunk-LRAMRKPE.js → chunk-KTE2VIXH.js} +3 -3
- package/dist-cli/chunks/chunk-KXLYXKMA.js +1 -0
- package/dist-cli/chunks/{chunk-SLLX3SWM.js → chunk-KY6NY6WN.js} +1 -1
- package/dist-cli/chunks/{chunk-3RTBGCJF.js → chunk-LT2X5ISU.js} +2 -2
- package/dist-cli/chunks/{chunk-DLVWPEI4.js → chunk-MSU27JEW.js} +2 -2
- package/dist-cli/chunks/{chunk-O2M2AP7H.js → chunk-MUTDER75.js} +2 -2
- package/dist-cli/chunks/{chunk-WWFXKF3K.js → chunk-NQ4EDJV4.js} +2 -2
- package/dist-cli/chunks/{chunk-RKJS56NM.js → chunk-OBYYAT4F.js} +2 -2
- package/dist-cli/chunks/{chunk-S5UDIVJX.js → chunk-OEV7EOMC.js} +2 -2
- package/dist-cli/chunks/{chunk-FPRRNX2V.js → chunk-PMAKUYYK.js} +2 -2
- package/dist-cli/chunks/{chunk-4XZ4WY4A.js → chunk-QNQO5VHO.js} +9 -9
- package/dist-cli/chunks/chunk-QUEATUWT.js +1 -0
- package/dist-cli/chunks/{chunk-BPSFMOFQ.js → chunk-RVWJ3TAE.js} +2 -2
- package/dist-cli/chunks/{chunk-LK74SKOV.js → chunk-SA5RP334.js} +2 -2
- package/dist-cli/chunks/{chunk-V2UHENRM.js → chunk-SF6W3FRS.js} +1 -1
- package/dist-cli/chunks/{chunk-IGCYRC3B.js → chunk-SRA2TVCG.js} +1 -1
- package/dist-cli/chunks/{chunk-663EI6DT.js → chunk-VALW4SKE.js} +1 -1
- package/dist-cli/chunks/{chunk-52IG45RY.js → chunk-VJPN6DQU.js} +2 -2
- package/dist-cli/chunks/{chunk-PIMLP3CT.js → chunk-VSKLWCFM.js} +2 -2
- package/dist-cli/chunks/{chunk-25PXT5BN.js → chunk-VSRV5LFU.js} +1 -1
- package/dist-cli/chunks/{chunk-MB5HWJMY.js → chunk-VX5CAWLC.js} +2 -2
- package/dist-cli/chunks/{chunk-UMR6DJZG.js → chunk-W3FBNBTX.js} +2 -2
- package/dist-cli/chunks/{chunk-SPM7MIOO.js → chunk-WHL7FMLG.js} +73 -26
- package/dist-cli/chunks/{chunk-BJH7O6J6.js → chunk-X4LYRBLZ.js} +1 -1
- package/dist-cli/chunks/{chunk-7NLXLHEX.js → chunk-Y7ZMV3PG.js} +1 -1
- package/dist-cli/chunks/{chunk-ZYR5O6UT.js → chunk-YQIFU3PB.js} +3 -3
- package/dist-cli/chunks/{chunk-WTPKU4YG.js → chunk-Z47GWZMZ.js} +3 -3
- package/dist-cli/chunks/cli-version-DPV7EKFK.js +2 -0
- package/dist-cli/chunks/{compat-6HRSZHAI.js → compat-FMBQL2CX.js} +3 -3
- package/dist-cli/chunks/{config-AAHNHDGM.js → config-JD23SW7N.js} +2 -2
- package/dist-cli/chunks/control-IAHPU5HD.js +2 -0
- package/dist-cli/chunks/{cpu-profile-RBTXSQVS.js → cpu-profile-2Z4KGCAE.js} +2 -2
- package/dist-cli/chunks/{daemon-ZDL4HAJ6.js → daemon-NDO6JPDH.js} +2 -2
- package/dist-cli/chunks/{debug-GPCQOMPB.js → debug-RBVMEH33.js} +3 -3
- package/dist-cli/chunks/{detox-ZMUVIM6C.js → detox-TBJAZEBB.js} +2 -2
- package/dist-cli/chunks/{device-7U2WD3LH.js → device-26YM4HM7.js} +2 -2
- package/dist-cli/chunks/{diagnose-AHAABGO2.js → diagnose-PW7FGUOI.js} +2 -2
- package/dist-cli/chunks/drivers-L6UY2JC6.js +2 -0
- package/dist-cli/chunks/{electron-5MXNHIMP.js → electron-TBMZ3C5I.js} +3 -3
- package/dist-cli/chunks/flow-QSDMMKNZ.js +2 -0
- package/dist-cli/chunks/help-OC7HYZ5F.js +2 -0
- package/dist-cli/chunks/{hints-6E337RVS.js → hints-Q3I4PXMT.js} +2 -2
- package/dist-cli/chunks/{home-paths-CZ67HGJ7.js → home-paths-P5GMZADH.js} +2 -2
- package/dist-cli/chunks/{inspect-OFQEFD7A.js → inspect-UTHL2UK4.js} +55 -58
- package/dist-cli/chunks/install-3UWGXX6F.js +2 -0
- package/dist-cli/chunks/{install-desktop-AGDDOM5C.js → install-desktop-XQYE3QYC.js} +3 -3
- package/dist-cli/chunks/{keys-ILCZHN7X.js → keys-75OBQ7OF.js} +2 -2
- package/dist-cli/chunks/{launch-4BT4CF5H.js → launch-TFE3CZZ3.js} +3 -3
- package/dist-cli/chunks/{login-EBW5MZ7B.js → login-EIL5PLK4.js} +4 -4
- package/dist-cli/chunks/{logout-FACVEAU4.js → logout-2DXPOPWE.js} +2 -2
- package/dist-cli/chunks/{maestro-T5OJV4WN.js → maestro-Q27CNJGT.js} +2 -2
- package/dist-cli/chunks/{preview-OGUTDHGA.js → preview-ZGVCXKQZ.js} +2 -2
- package/dist-cli/chunks/{profile-OM32C3WD.js → profile-TCX6GYV5.js} +2 -2
- package/dist-cli/chunks/{react-BT3Q3HEE.js → react-24D26RLU.js} +2 -2
- package/dist-cli/chunks/{record-SDAASQC5.js → record-3MODR5RQ.js} +2 -2
- package/dist-cli/chunks/runtime-5MJPHLRZ.js +2 -0
- package/dist-cli/chunks/{runtime-delivery-2ET2INWI.js → runtime-delivery-NWSDCFAI.js} +2 -2
- package/dist-cli/chunks/{screenshot-GDNEA6ET.js → screenshot-4A6JTLUV.js} +2 -2
- package/dist-cli/chunks/{screenshot-mode-GX3PSJUV.js → screenshot-mode-KVMXLFJ4.js} +2 -2
- package/dist-cli/chunks/{screenshots-BHHQP5D4.js → screenshots-XGG6PNXW.js} +2 -2
- package/dist-cli/chunks/{server-SISUV3YX.js → server-MRLLYDV7.js} +2 -2
- package/dist-cli/chunks/setup-repo-OUMNEC36.js +2 -0
- package/dist-cli/chunks/{skills-2F6XJMFM.js → skills-COR2GQRN.js} +2 -2
- package/dist-cli/chunks/{start-AVNDR55O.js → start-SD27AJ7E.js} +4 -4
- package/dist-cli/chunks/store-JVV7G7VY.js +2 -0
- package/dist-cli/chunks/telemetry-BMJNBZT6.js +2 -0
- package/dist-cli/chunks/{test-X2EOPVCG.js → test-4N6K3C5R.js} +3 -3
- package/dist-cli/chunks/{three-mode-HOAKG3OJ.js → three-mode-PJQGXIP4.js} +2 -2
- package/dist-cli/chunks/{timeline-U5LB2UAV.js → timeline-C7JSMHCV.js} +2 -2
- package/dist-cli/chunks/{upgrade-JKGP376V.js → upgrade-SFUV6KPW.js} +2 -2
- package/dist-cli/chunks/upload-XQLVCUKI.js +2 -0
- package/dist-cli/chunks/{web-XC36Y7B2.js → web-GK27H4NM.js} +2 -2
- package/dist-cli/chunks/what-happened-GAY54LBV.js +22 -0
- package/dist-cli/chunks/{whoami-MA2TQQQL.js → whoami-C2WULTLS.js} +2 -2
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.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/metro.cjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/demo-app-registry.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +132 -4
- package/dist-lib/sdk.mjs +127 -4
- package/dist-lib/skills.cjs +1 -1
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/dist-cli/chunks/auto-bootstrap-WOBYOIE3.js +0 -2
- package/dist-cli/chunks/beta-TRSZJRLI.js +0 -2
- package/dist-cli/chunks/chunk-NUEWNRWO.js +0 -1
- package/dist-cli/chunks/chunk-O7HUOQQ7.js +0 -2
- package/dist-cli/chunks/chunk-PXMMDJOI.js +0 -1
- package/dist-cli/chunks/chunk-VCJ6CAP5.js +0 -1
- package/dist-cli/chunks/cli-version-IDCZT6SQ.js +0 -2
- package/dist-cli/chunks/control-2AGQ4GUN.js +0 -2
- package/dist-cli/chunks/drivers-RKCUWIKI.js +0 -2
- package/dist-cli/chunks/flow-NOT2JPAQ.js +0 -2
- package/dist-cli/chunks/help-HBLSAWHF.js +0 -2
- package/dist-cli/chunks/install-33SLF767.js +0 -2
- package/dist-cli/chunks/runtime-23HEVNFL.js +0 -2
- package/dist-cli/chunks/setup-repo-NU5MACBJ.js +0 -2
- package/dist-cli/chunks/store-IQBPTP5Z.js +0 -2
- package/dist-cli/chunks/telemetry-4ASKMD4D.js +0 -2
- package/dist-cli/chunks/upload-MSXXFBQA.js +0 -2
- package/dist-cli/chunks/what-happened-F7KIUJLJ.js +0 -22
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/*! sootsim v0.1.121 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{B as T,C as A,D as y,O as _,P as b,Q as S}from"./chunk-WHL7FMLG.js";import{c as N,e as F}from"./chunk-NQ4EDJV4.js";import{b as k}from"./chunk-SF6W3FRS.js";import"./chunk-KY6NY6WN.js";import"./chunk-4BXESMZ7.js";import"./chunk-SRA2TVCG.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=N(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
|
+
sootsim what-happened \u2014 show recent events from the semantic timeline
|
|
4
|
+
|
|
5
|
+
usage:
|
|
6
|
+
sootsim what-happened # since last CLI call
|
|
7
|
+
sootsim what-happened --summary # one-line counts
|
|
8
|
+
sootsim what-happened --all # full ring (ignore cursor)
|
|
9
|
+
sootsim what-happened --since 5s # absolute window
|
|
10
|
+
sootsim what-happened --kinds toast,fetch
|
|
11
|
+
sootsim what-happened --noisy # include react-commit/layout/scroll
|
|
12
|
+
sootsim what-happened --limit 50
|
|
13
|
+
sootsim what-happened --json
|
|
14
|
+
sootsim what-happened --no-advance # don't advance cursor after read
|
|
15
|
+
|
|
16
|
+
note: by default react-commit, layout, and scroll events are hidden as
|
|
17
|
+
noise \u2014 pass --noisy or include them in --kinds to see them.
|
|
18
|
+
`),process.exit(0));let s=n.includes("--summary"),l=n.includes("--flow"),i=n.includes("--all"),r=n.includes("--json"),u=n.includes("--no-advance"),v=n.includes("--noisy"),{since:a}=O(n),{kinds:d}=B(n),{limit:C}=D(n),g=k(),$={limit:C??200,...d&&d.length?{kinds:d}:{},...a!==void 0?{since:a}:i?{}:{sinceCursor:g}},h=F(e);try{if(s){let c=await T(h,$);if(r)console.log(JSON.stringify(c));else{let m=i?"all time":a!==void 0?`last ${((Date.now()-a)/1e3).toFixed(1)}s`:"since last call";console.log(` ${m}: ${_(c)}`)}!u&&!i&&c.lastAt&&await y(h,g,c.lastAt);return}let o=await A(h,$),E=Array.isArray(d)&&d.some(c=>b.has(c)),I=!v&&!E,f=0;if(I){let c=o.events.filter(m=>b.has(m.kind)?(f+=1,!1):!0);o.events=c}if(r)console.log(JSON.stringify(l?x(o.events):o,null,2));else{if(o.events.length===0)f>0?console.log(` no non-noise events (${f} react-commit/layout/scroll hidden)`):console.log(i?" no events recorded":a!==void 0?" no events in window":" no new events since last call");else if(l){let c=o.events[0]?.t??null,m=x(o.events),w=i?`\u2500\u2500\u2500 ${o.events.length} event(s) total \u2014 flow view \u2500\u2500\u2500`:a!==void 0?`\u2500\u2500\u2500 ${o.events.length} event(s) in last ${((Date.now()-a)/1e3).toFixed(1)}s \u2014 flow view \u2500\u2500\u2500`:`\u2500\u2500\u2500 ${o.events.length} event(s) since last call \u2014 flow view \u2500\u2500\u2500`;console.log(` ${w}`);for(let p of m){console.log(`
|
|
19
|
+
\u2500\u2500 ${p.label} (${p.events.length} event${p.events.length===1?"":"s"}) \u2500\u2500`);for(let M of p.events)console.log(S(M,c))}}else{let c=o.events[0]?.t??null,m=i?`\u2500\u2500\u2500 ${o.events.length} event(s) total \u2500\u2500\u2500`:a!==void 0?`\u2500\u2500\u2500 ${o.events.length} event(s) in last ${((Date.now()-a)/1e3).toFixed(1)}s \u2500\u2500\u2500`:`\u2500\u2500\u2500 ${o.events.length} event(s) since last call \u2500\u2500\u2500`;console.log(` ${m}`);for(let w of o.events)console.log(S(w,c))}f>0&&o.events.length>0&&process.stderr.write(`
|
|
20
|
+
${f} high-frequency event(s) hidden (react-commit/layout/scroll)
|
|
21
|
+
rerun with --noisy or --kinds react-commit,layout,scroll to include them
|
|
22
|
+
`)}!u&&!i&&o.watermark>0&&await y(h,g,o.watermark)}finally{h.close()}}export{J as runWhatHappened};
|
|
@@ -1,2 +1,2 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
2
|
-
import{d as i}from"./chunk-
|
|
1
|
+
/*! sootsim v0.1.121 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{d as i}from"./chunk-OEV7EOMC.js";import{d as n}from"./chunk-SA5RP334.js";import"./chunk-4BXESMZ7.js";import"./chunk-SRA2TVCG.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.
|
|
1
|
+
/*! sootsim v0.1.121 | (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.121 | (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.121 | (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.121 | (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.121 | (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.121 | (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.
|
|
1
|
+
/*! sootsim v0.1.121 | (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.
|
|
1
|
+
/*! sootsim v0.1.121 | (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.121 | (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/config.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.121 | (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/detox/index.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.121 | (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.121 | (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/home-paths.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.121 | (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.121 | (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.121 | (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.121 | (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.121 | (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.121 | (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.121 | (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/metro.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.121 | (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.121 | (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.121 | (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.121 | (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.121 | (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.121 | (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;
|
|
@@ -24,6 +24,8 @@ var sdk_exports = {};
|
|
|
24
24
|
__export(sdk_exports, {
|
|
25
25
|
DEBUG_CHANNELS: () => DEBUG_CHANNELS,
|
|
26
26
|
LAYOUT_GET_NATIVE_EVAL: () => LAYOUT_GET_NATIVE_EVAL,
|
|
27
|
+
MERGED_CONSOLE_COUNT_EVAL: () => MERGED_CONSOLE_COUNT_EVAL,
|
|
28
|
+
NOISY_TIMELINE_KINDS: () => NOISY_TIMELINE_KINDS,
|
|
27
29
|
READY_CONTENT_NODE_FLOOR: () => READY_CONTENT_NODE_FLOOR,
|
|
28
30
|
READY_NODE_STABLE_MS: () => READY_NODE_STABLE_MS,
|
|
29
31
|
WAIT_READY_PROBE: () => WAIT_READY_PROBE,
|
|
@@ -33,6 +35,9 @@ __export(sdk_exports, {
|
|
|
33
35
|
clearRequests: () => clearRequests,
|
|
34
36
|
filterLogEntries: () => filterLogEntries,
|
|
35
37
|
formatLayoutElements: () => formatLayoutElements,
|
|
38
|
+
formatTimelineEvent: () => formatTimelineEvent,
|
|
39
|
+
formatTimelineEvents: () => formatTimelineEvents,
|
|
40
|
+
formatTimelinePayload: () => formatTimelinePayload,
|
|
36
41
|
formatTimelineSummary: () => formatTimelineSummary,
|
|
37
42
|
getShellState: () => getShellState,
|
|
38
43
|
inspectAccessibilityTree: () => inspectAccessibilityTree,
|
|
@@ -749,24 +754,76 @@ async function inspectWaitSelector(bridge, testId, timeoutMs = 5e3, opts = {}) {
|
|
|
749
754
|
);
|
|
750
755
|
return result ?? { found: false, elapsed: timeoutMs };
|
|
751
756
|
}
|
|
757
|
+
function consoleEntriesEval(level, limit) {
|
|
758
|
+
const getter = level === "error" ? "getErrors" : "getWarnings";
|
|
759
|
+
return `(() => {
|
|
760
|
+
const out = []
|
|
761
|
+
const seen = new Set()
|
|
762
|
+
const norm = (s) => (typeof s === 'string' ? s : (() => { try { return JSON.stringify(s) } catch { return String(s) } })())
|
|
763
|
+
const key = (ts, args) => Math.round((ts || 0) / 250) + '|' + (Array.isArray(args) ? args.map(norm).join(' ') : norm(args))
|
|
764
|
+
const push = (e) => {
|
|
765
|
+
if (!e) return
|
|
766
|
+
const ts = typeof e.timestamp === 'number' ? e.timestamp : (typeof e.ts === 'number' ? e.ts : 0)
|
|
767
|
+
const k = key(ts, e.args)
|
|
768
|
+
if (seen.has(k)) return
|
|
769
|
+
seen.add(k)
|
|
770
|
+
out.push({ timestamp: ts, args: Array.isArray(e.args) ? e.args : [e.args], stack: e.stack || undefined, source: e.source || undefined })
|
|
771
|
+
}
|
|
772
|
+
// page-realm ws-bridge buffer first (richest stacks for page-origin errors)
|
|
773
|
+
try { for (const e of (window.__sootsimConsole?.${getter}(${limit}) || [])) push(e) } catch {}
|
|
774
|
+
// engine observability store \u2014 the always-on render-worker / forwarded path
|
|
775
|
+
try {
|
|
776
|
+
const obs = window.__sootsimObservability
|
|
777
|
+
const snap = obs && obs.logs && typeof obs.logs.getSnapshot === 'function' ? obs.logs.getSnapshot() : []
|
|
778
|
+
for (const e of snap) if (e && e.level === ${JSON.stringify(level)}) push(e)
|
|
779
|
+
} catch {}
|
|
780
|
+
return out.sort((a, b) => (a.timestamp || 0) - (b.timestamp || 0)).slice(-${limit})
|
|
781
|
+
})()`;
|
|
782
|
+
}
|
|
752
783
|
async function inspectErrors(bridge, limit = 20) {
|
|
753
784
|
const result = await bridge.send({
|
|
754
785
|
type: "evaluate",
|
|
755
|
-
code:
|
|
786
|
+
code: consoleEntriesEval("error", limit)
|
|
756
787
|
});
|
|
757
788
|
return Array.isArray(result) ? result : [];
|
|
758
789
|
}
|
|
759
790
|
async function inspectWarnings(bridge, limit = 20) {
|
|
760
791
|
const result = await bridge.send({
|
|
761
792
|
type: "evaluate",
|
|
762
|
-
code:
|
|
793
|
+
code: consoleEntriesEval("warn", limit)
|
|
763
794
|
});
|
|
764
795
|
return Array.isArray(result) ? result : [];
|
|
765
796
|
}
|
|
797
|
+
var MERGED_CONSOLE_COUNT_EVAL = `(() => {
|
|
798
|
+
const norm = (s) => (typeof s === 'string' ? s : (() => { try { return JSON.stringify(s) } catch { return String(s) } })())
|
|
799
|
+
const key = (lvl, ts, args) => lvl + '|' + Math.round((ts || 0) / 250) + '|' + (Array.isArray(args) ? args.map(norm).join(' ') : norm(args))
|
|
800
|
+
const seen = new Set()
|
|
801
|
+
let errors = 0
|
|
802
|
+
let warnings = 0
|
|
803
|
+
const add = (lvl, ts, args) => {
|
|
804
|
+
if (lvl !== 'error' && lvl !== 'warn') return
|
|
805
|
+
const k = key(lvl, ts, args)
|
|
806
|
+
if (seen.has(k)) return
|
|
807
|
+
seen.add(k)
|
|
808
|
+
if (lvl === 'error') errors++
|
|
809
|
+
else warnings++
|
|
810
|
+
}
|
|
811
|
+
try {
|
|
812
|
+
const c = window.__sootsimConsole
|
|
813
|
+
for (const e of (c?.getErrors?.(200) || [])) add('error', e?.timestamp ?? e?.ts, e?.args)
|
|
814
|
+
for (const e of (c?.getWarnings?.(200) || [])) add('warn', e?.timestamp ?? e?.ts, e?.args)
|
|
815
|
+
} catch {}
|
|
816
|
+
try {
|
|
817
|
+
const obs = window.__sootsimObservability
|
|
818
|
+
const snap = obs && obs.logs && typeof obs.logs.getSnapshot === 'function' ? obs.logs.getSnapshot() : []
|
|
819
|
+
for (const e of snap) if (e) add(e.level, e.ts, e.args)
|
|
820
|
+
} catch {}
|
|
821
|
+
return { errors, warnings, total: errors + warnings }
|
|
822
|
+
})()`;
|
|
766
823
|
async function clearConsole(bridge) {
|
|
767
824
|
await bridge.send({
|
|
768
825
|
type: "evaluate",
|
|
769
|
-
code: 'window.__sootsimConsole?.clear(); "cleared"'
|
|
826
|
+
code: 'window.__sootsimConsole?.clear(); window.__sootsimObservability?.logs?.clear?.(); "cleared"'
|
|
770
827
|
});
|
|
771
828
|
}
|
|
772
829
|
async function inspectRequests(bridge, opts = {}) {
|
|
@@ -1024,6 +1081,72 @@ function formatTimelineSummary(summary) {
|
|
|
1024
1081
|
}
|
|
1025
1082
|
return parts.join(" \xB7 ");
|
|
1026
1083
|
}
|
|
1084
|
+
var NOISY_TIMELINE_KINDS = /* @__PURE__ */ new Set([
|
|
1085
|
+
"react-commit",
|
|
1086
|
+
"layout",
|
|
1087
|
+
"scroll"
|
|
1088
|
+
]);
|
|
1089
|
+
function formatTimelineRelativeTime(t, anchor) {
|
|
1090
|
+
if (anchor === null) return new Date(t).toLocaleTimeString();
|
|
1091
|
+
const dt = (t - anchor) / 1e3;
|
|
1092
|
+
const sign = dt >= 0 ? "+" : "";
|
|
1093
|
+
return `${sign}${dt.toFixed(2)}s`;
|
|
1094
|
+
}
|
|
1095
|
+
function formatTimelinePayload(kind, d) {
|
|
1096
|
+
switch (kind) {
|
|
1097
|
+
case "app-launch":
|
|
1098
|
+
return d.phase === "launch" ? `launch ${d.appName ?? d.toAppId ?? ""}` : `dismiss ${d.appName ?? d.fromAppId ?? ""} \u2192 ${d.toAppId ?? ""}`;
|
|
1099
|
+
case "toast":
|
|
1100
|
+
return `"${d.text ?? ""}"${d.durationMs ? ` (${d.durationMs}ms)` : ""}`;
|
|
1101
|
+
case "keyboard":
|
|
1102
|
+
return `${d.phase ?? "?"}${d.heightPx ? ` h=${d.heightPx}` : ""}${d.mode ? ` ${d.mode}` : ""}`;
|
|
1103
|
+
case "screen":
|
|
1104
|
+
return `${d.phase ?? "?"} ${d.name ?? d.activeName ?? ""}`;
|
|
1105
|
+
case "route":
|
|
1106
|
+
return `${d.phase ?? "?"} ${d.path ?? d.pathname ?? ""}`;
|
|
1107
|
+
case "alert":
|
|
1108
|
+
case "actionsheet":
|
|
1109
|
+
case "picker":
|
|
1110
|
+
return `${d.phase ?? "?"} ${d.title ?? d.message ?? ""}`;
|
|
1111
|
+
case "notification":
|
|
1112
|
+
return `${d.title ?? ""}${d.body ? ` \u2014 ${d.body}` : ""}`;
|
|
1113
|
+
case "fetch":
|
|
1114
|
+
return `${d.method ?? "GET"} ${d.url ?? ""}${d.status ? ` -> ${d.status}` : ""}`;
|
|
1115
|
+
case "console":
|
|
1116
|
+
return `${d.level ?? "log"}: ${(d.message ?? "").toString().slice(0, 120)}`;
|
|
1117
|
+
case "shell":
|
|
1118
|
+
return `${d.event ?? d.type ?? d.phase ?? ""}`;
|
|
1119
|
+
case "scroll":
|
|
1120
|
+
return `${d.phase ?? "?"} ${d.target ?? ""}`;
|
|
1121
|
+
case "gesture":
|
|
1122
|
+
return `${d.phase ?? "?"} ${d.type ?? ""}`;
|
|
1123
|
+
case "text-input":
|
|
1124
|
+
return `${d.phase ?? "?"}${d.value !== void 0 ? ` "${String(d.value).slice(0, 40)}"` : ""}`;
|
|
1125
|
+
case "layout":
|
|
1126
|
+
return `${d.kind ?? "?"} ${d.testID ?? d.type ?? ""}${d.skipped ? ` skipped:${d.reason ?? "unknown"}` : ""}`;
|
|
1127
|
+
case "react-commit": {
|
|
1128
|
+
const slowest = d.slowest;
|
|
1129
|
+
return `${d.fiberCount ?? "?"} fibers ${d.durationMs ?? "?"}ms${slowest?.displayName ? ` \xB7 ${slowest.displayName} ${slowest.durationMs ?? "?"}ms` : ""}`;
|
|
1130
|
+
}
|
|
1131
|
+
case "reanimated":
|
|
1132
|
+
case "animation":
|
|
1133
|
+
return `${d.kind ?? ""} ${d.target ?? ""}${d.durationMs ? ` ${d.durationMs}ms` : ""}`;
|
|
1134
|
+
}
|
|
1135
|
+
return "";
|
|
1136
|
+
}
|
|
1137
|
+
function formatTimelineEvent(event, anchor) {
|
|
1138
|
+
const ts = formatTimelineRelativeTime(event.t, anchor).padStart(8);
|
|
1139
|
+
const ctx = event.context.padEnd(6);
|
|
1140
|
+
const kind = `[${event.kind}]`.padEnd(15);
|
|
1141
|
+
const d = event.data;
|
|
1142
|
+
const payload = d && typeof d === "object" ? formatTimelinePayload(event.kind, d) : "";
|
|
1143
|
+
return ` ${ts} ${ctx} ${kind} ${payload}`;
|
|
1144
|
+
}
|
|
1145
|
+
function formatTimelineEvents(events) {
|
|
1146
|
+
if (!events.length) return "";
|
|
1147
|
+
const anchor = events[0]?.t ?? null;
|
|
1148
|
+
return events.map((e) => formatTimelineEvent(e, anchor)).join("\n");
|
|
1149
|
+
}
|
|
1027
1150
|
|
|
1028
1151
|
// cli/commands/inspect/settling.ts
|
|
1029
1152
|
async function waitForSootsimIdle({
|
|
@@ -1500,6 +1623,8 @@ async function tapBest(bridge, query, opts = {}) {
|
|
|
1500
1623
|
0 && (module.exports = {
|
|
1501
1624
|
DEBUG_CHANNELS,
|
|
1502
1625
|
LAYOUT_GET_NATIVE_EVAL,
|
|
1626
|
+
MERGED_CONSOLE_COUNT_EVAL,
|
|
1627
|
+
NOISY_TIMELINE_KINDS,
|
|
1503
1628
|
READY_CONTENT_NODE_FLOOR,
|
|
1504
1629
|
READY_NODE_STABLE_MS,
|
|
1505
1630
|
WAIT_READY_PROBE,
|
|
@@ -1509,6 +1634,9 @@ async function tapBest(bridge, query, opts = {}) {
|
|
|
1509
1634
|
clearRequests,
|
|
1510
1635
|
filterLogEntries,
|
|
1511
1636
|
formatLayoutElements,
|
|
1637
|
+
formatTimelineEvent,
|
|
1638
|
+
formatTimelineEvents,
|
|
1639
|
+
formatTimelinePayload,
|
|
1512
1640
|
formatTimelineSummary,
|
|
1513
1641
|
getShellState,
|
|
1514
1642
|
inspectAccessibilityTree,
|
package/dist-lib/sdk.mjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.121 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
|
|
3
3
|
// cli/commands/inspect/core.ts
|
|
4
4
|
function resolveMaxMsFlag(args, fallbackMs) {
|
|
@@ -667,24 +667,76 @@ async function inspectWaitSelector(bridge, testId, timeoutMs = 5e3, opts = {}) {
|
|
|
667
667
|
);
|
|
668
668
|
return result ?? { found: false, elapsed: timeoutMs };
|
|
669
669
|
}
|
|
670
|
+
function consoleEntriesEval(level, limit) {
|
|
671
|
+
const getter = level === "error" ? "getErrors" : "getWarnings";
|
|
672
|
+
return `(() => {
|
|
673
|
+
const out = []
|
|
674
|
+
const seen = new Set()
|
|
675
|
+
const norm = (s) => (typeof s === 'string' ? s : (() => { try { return JSON.stringify(s) } catch { return String(s) } })())
|
|
676
|
+
const key = (ts, args) => Math.round((ts || 0) / 250) + '|' + (Array.isArray(args) ? args.map(norm).join(' ') : norm(args))
|
|
677
|
+
const push = (e) => {
|
|
678
|
+
if (!e) return
|
|
679
|
+
const ts = typeof e.timestamp === 'number' ? e.timestamp : (typeof e.ts === 'number' ? e.ts : 0)
|
|
680
|
+
const k = key(ts, e.args)
|
|
681
|
+
if (seen.has(k)) return
|
|
682
|
+
seen.add(k)
|
|
683
|
+
out.push({ timestamp: ts, args: Array.isArray(e.args) ? e.args : [e.args], stack: e.stack || undefined, source: e.source || undefined })
|
|
684
|
+
}
|
|
685
|
+
// page-realm ws-bridge buffer first (richest stacks for page-origin errors)
|
|
686
|
+
try { for (const e of (window.__sootsimConsole?.${getter}(${limit}) || [])) push(e) } catch {}
|
|
687
|
+
// engine observability store \u2014 the always-on render-worker / forwarded path
|
|
688
|
+
try {
|
|
689
|
+
const obs = window.__sootsimObservability
|
|
690
|
+
const snap = obs && obs.logs && typeof obs.logs.getSnapshot === 'function' ? obs.logs.getSnapshot() : []
|
|
691
|
+
for (const e of snap) if (e && e.level === ${JSON.stringify(level)}) push(e)
|
|
692
|
+
} catch {}
|
|
693
|
+
return out.sort((a, b) => (a.timestamp || 0) - (b.timestamp || 0)).slice(-${limit})
|
|
694
|
+
})()`;
|
|
695
|
+
}
|
|
670
696
|
async function inspectErrors(bridge, limit = 20) {
|
|
671
697
|
const result = await bridge.send({
|
|
672
698
|
type: "evaluate",
|
|
673
|
-
code:
|
|
699
|
+
code: consoleEntriesEval("error", limit)
|
|
674
700
|
});
|
|
675
701
|
return Array.isArray(result) ? result : [];
|
|
676
702
|
}
|
|
677
703
|
async function inspectWarnings(bridge, limit = 20) {
|
|
678
704
|
const result = await bridge.send({
|
|
679
705
|
type: "evaluate",
|
|
680
|
-
code:
|
|
706
|
+
code: consoleEntriesEval("warn", limit)
|
|
681
707
|
});
|
|
682
708
|
return Array.isArray(result) ? result : [];
|
|
683
709
|
}
|
|
710
|
+
var MERGED_CONSOLE_COUNT_EVAL = `(() => {
|
|
711
|
+
const norm = (s) => (typeof s === 'string' ? s : (() => { try { return JSON.stringify(s) } catch { return String(s) } })())
|
|
712
|
+
const key = (lvl, ts, args) => lvl + '|' + Math.round((ts || 0) / 250) + '|' + (Array.isArray(args) ? args.map(norm).join(' ') : norm(args))
|
|
713
|
+
const seen = new Set()
|
|
714
|
+
let errors = 0
|
|
715
|
+
let warnings = 0
|
|
716
|
+
const add = (lvl, ts, args) => {
|
|
717
|
+
if (lvl !== 'error' && lvl !== 'warn') return
|
|
718
|
+
const k = key(lvl, ts, args)
|
|
719
|
+
if (seen.has(k)) return
|
|
720
|
+
seen.add(k)
|
|
721
|
+
if (lvl === 'error') errors++
|
|
722
|
+
else warnings++
|
|
723
|
+
}
|
|
724
|
+
try {
|
|
725
|
+
const c = window.__sootsimConsole
|
|
726
|
+
for (const e of (c?.getErrors?.(200) || [])) add('error', e?.timestamp ?? e?.ts, e?.args)
|
|
727
|
+
for (const e of (c?.getWarnings?.(200) || [])) add('warn', e?.timestamp ?? e?.ts, e?.args)
|
|
728
|
+
} catch {}
|
|
729
|
+
try {
|
|
730
|
+
const obs = window.__sootsimObservability
|
|
731
|
+
const snap = obs && obs.logs && typeof obs.logs.getSnapshot === 'function' ? obs.logs.getSnapshot() : []
|
|
732
|
+
for (const e of snap) if (e) add(e.level, e.ts, e.args)
|
|
733
|
+
} catch {}
|
|
734
|
+
return { errors, warnings, total: errors + warnings }
|
|
735
|
+
})()`;
|
|
684
736
|
async function clearConsole(bridge) {
|
|
685
737
|
await bridge.send({
|
|
686
738
|
type: "evaluate",
|
|
687
|
-
code: 'window.__sootsimConsole?.clear(); "cleared"'
|
|
739
|
+
code: 'window.__sootsimConsole?.clear(); window.__sootsimObservability?.logs?.clear?.(); "cleared"'
|
|
688
740
|
});
|
|
689
741
|
}
|
|
690
742
|
async function inspectRequests(bridge, opts = {}) {
|
|
@@ -942,6 +994,72 @@ function formatTimelineSummary(summary) {
|
|
|
942
994
|
}
|
|
943
995
|
return parts.join(" \xB7 ");
|
|
944
996
|
}
|
|
997
|
+
var NOISY_TIMELINE_KINDS = /* @__PURE__ */ new Set([
|
|
998
|
+
"react-commit",
|
|
999
|
+
"layout",
|
|
1000
|
+
"scroll"
|
|
1001
|
+
]);
|
|
1002
|
+
function formatTimelineRelativeTime(t, anchor) {
|
|
1003
|
+
if (anchor === null) return new Date(t).toLocaleTimeString();
|
|
1004
|
+
const dt = (t - anchor) / 1e3;
|
|
1005
|
+
const sign = dt >= 0 ? "+" : "";
|
|
1006
|
+
return `${sign}${dt.toFixed(2)}s`;
|
|
1007
|
+
}
|
|
1008
|
+
function formatTimelinePayload(kind, d) {
|
|
1009
|
+
switch (kind) {
|
|
1010
|
+
case "app-launch":
|
|
1011
|
+
return d.phase === "launch" ? `launch ${d.appName ?? d.toAppId ?? ""}` : `dismiss ${d.appName ?? d.fromAppId ?? ""} \u2192 ${d.toAppId ?? ""}`;
|
|
1012
|
+
case "toast":
|
|
1013
|
+
return `"${d.text ?? ""}"${d.durationMs ? ` (${d.durationMs}ms)` : ""}`;
|
|
1014
|
+
case "keyboard":
|
|
1015
|
+
return `${d.phase ?? "?"}${d.heightPx ? ` h=${d.heightPx}` : ""}${d.mode ? ` ${d.mode}` : ""}`;
|
|
1016
|
+
case "screen":
|
|
1017
|
+
return `${d.phase ?? "?"} ${d.name ?? d.activeName ?? ""}`;
|
|
1018
|
+
case "route":
|
|
1019
|
+
return `${d.phase ?? "?"} ${d.path ?? d.pathname ?? ""}`;
|
|
1020
|
+
case "alert":
|
|
1021
|
+
case "actionsheet":
|
|
1022
|
+
case "picker":
|
|
1023
|
+
return `${d.phase ?? "?"} ${d.title ?? d.message ?? ""}`;
|
|
1024
|
+
case "notification":
|
|
1025
|
+
return `${d.title ?? ""}${d.body ? ` \u2014 ${d.body}` : ""}`;
|
|
1026
|
+
case "fetch":
|
|
1027
|
+
return `${d.method ?? "GET"} ${d.url ?? ""}${d.status ? ` -> ${d.status}` : ""}`;
|
|
1028
|
+
case "console":
|
|
1029
|
+
return `${d.level ?? "log"}: ${(d.message ?? "").toString().slice(0, 120)}`;
|
|
1030
|
+
case "shell":
|
|
1031
|
+
return `${d.event ?? d.type ?? d.phase ?? ""}`;
|
|
1032
|
+
case "scroll":
|
|
1033
|
+
return `${d.phase ?? "?"} ${d.target ?? ""}`;
|
|
1034
|
+
case "gesture":
|
|
1035
|
+
return `${d.phase ?? "?"} ${d.type ?? ""}`;
|
|
1036
|
+
case "text-input":
|
|
1037
|
+
return `${d.phase ?? "?"}${d.value !== void 0 ? ` "${String(d.value).slice(0, 40)}"` : ""}`;
|
|
1038
|
+
case "layout":
|
|
1039
|
+
return `${d.kind ?? "?"} ${d.testID ?? d.type ?? ""}${d.skipped ? ` skipped:${d.reason ?? "unknown"}` : ""}`;
|
|
1040
|
+
case "react-commit": {
|
|
1041
|
+
const slowest = d.slowest;
|
|
1042
|
+
return `${d.fiberCount ?? "?"} fibers ${d.durationMs ?? "?"}ms${slowest?.displayName ? ` \xB7 ${slowest.displayName} ${slowest.durationMs ?? "?"}ms` : ""}`;
|
|
1043
|
+
}
|
|
1044
|
+
case "reanimated":
|
|
1045
|
+
case "animation":
|
|
1046
|
+
return `${d.kind ?? ""} ${d.target ?? ""}${d.durationMs ? ` ${d.durationMs}ms` : ""}`;
|
|
1047
|
+
}
|
|
1048
|
+
return "";
|
|
1049
|
+
}
|
|
1050
|
+
function formatTimelineEvent(event, anchor) {
|
|
1051
|
+
const ts = formatTimelineRelativeTime(event.t, anchor).padStart(8);
|
|
1052
|
+
const ctx = event.context.padEnd(6);
|
|
1053
|
+
const kind = `[${event.kind}]`.padEnd(15);
|
|
1054
|
+
const d = event.data;
|
|
1055
|
+
const payload = d && typeof d === "object" ? formatTimelinePayload(event.kind, d) : "";
|
|
1056
|
+
return ` ${ts} ${ctx} ${kind} ${payload}`;
|
|
1057
|
+
}
|
|
1058
|
+
function formatTimelineEvents(events) {
|
|
1059
|
+
if (!events.length) return "";
|
|
1060
|
+
const anchor = events[0]?.t ?? null;
|
|
1061
|
+
return events.map((e) => formatTimelineEvent(e, anchor)).join("\n");
|
|
1062
|
+
}
|
|
945
1063
|
|
|
946
1064
|
// cli/commands/inspect/settling.ts
|
|
947
1065
|
async function waitForSootsimIdle({
|
|
@@ -1417,6 +1535,8 @@ async function tapBest(bridge, query, opts = {}) {
|
|
|
1417
1535
|
export {
|
|
1418
1536
|
DEBUG_CHANNELS,
|
|
1419
1537
|
LAYOUT_GET_NATIVE_EVAL,
|
|
1538
|
+
MERGED_CONSOLE_COUNT_EVAL,
|
|
1539
|
+
NOISY_TIMELINE_KINDS,
|
|
1420
1540
|
READY_CONTENT_NODE_FLOOR,
|
|
1421
1541
|
READY_NODE_STABLE_MS,
|
|
1422
1542
|
WAIT_READY_PROBE,
|
|
@@ -1426,6 +1546,9 @@ export {
|
|
|
1426
1546
|
clearRequests,
|
|
1427
1547
|
filterLogEntries,
|
|
1428
1548
|
formatLayoutElements,
|
|
1549
|
+
formatTimelineEvent,
|
|
1550
|
+
formatTimelineEvents,
|
|
1551
|
+
formatTimelinePayload,
|
|
1429
1552
|
formatTimelineSummary,
|
|
1430
1553
|
getShellState,
|
|
1431
1554
|
inspectAccessibilityTree,
|
package/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.121 | (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/vite.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.121 | (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,2 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.120 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
-
import{a,b,c,d}from"./chunk-WTPKU4YG.js";import"./chunk-WWFXKF3K.js";import"./chunk-V2UHENRM.js";import"./chunk-SLLX3SWM.js";import"./chunk-3OXUZ4YW.js";import"./chunk-IGCYRC3B.js";export{c as ensureDaemonRunning,a as ensureRuntimeInstalled,d as ensureSootsimReady,b as resolveBootstrapPort};
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
/*! sootsim v0.1.120 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|