sootsim 0.1.119 → 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-HMYFFW3K.js → agent-NZ4A6JKO.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-L5TRN5OW.js → agent-wrapper-CYQ5L2YH.js} +2 -2
- package/dist-cli/chunks/{app-fonts-G5L5BPHX.js → app-fonts-2DF4NW5D.js} +2 -2
- package/dist-cli/chunks/{assert-MN4TCTKK.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-XYT2OO4N.js → chunk-2U4CGOD6.js} +1 -1
- package/dist-cli/chunks/{chunk-TGLPBQ4D.js → chunk-3A7SRWSQ.js} +2 -2
- package/dist-cli/chunks/{chunk-LB7BYFMF.js → chunk-3DDNLPIH.js} +2 -2
- package/dist-cli/chunks/{chunk-4KU7AIP7.js → chunk-3WDN2S2A.js} +1 -1
- package/dist-cli/chunks/{chunk-ZX4FJNIW.js → chunk-4BXESMZ7.js} +1 -1
- package/dist-cli/chunks/{chunk-H4F45EGT.js → chunk-4UQMPWDA.js} +1 -1
- package/dist-cli/chunks/{chunk-RF2STDGD.js → chunk-5OA35LZX.js} +2 -2
- package/dist-cli/chunks/{chunk-JFHETXYV.js → chunk-7CA63OS4.js} +1 -1
- package/dist-cli/chunks/{chunk-MNILEOSP.js → chunk-7RXO4KKF.js} +1 -1
- package/dist-cli/chunks/{chunk-O552XDE7.js → chunk-B77PWTHR.js} +2 -2
- package/dist-cli/chunks/chunk-BTWXWUDB.js +1 -0
- package/dist-cli/chunks/{chunk-3MWC6EE2.js → chunk-CGB6KRKN.js} +2 -2
- package/dist-cli/chunks/{chunk-EIAYJLBW.js → chunk-DORQQNP4.js} +2 -2
- package/dist-cli/chunks/{chunk-TUJWNKG4.js → chunk-GU3MWKJY.js} +1 -1
- package/dist-cli/chunks/{chunk-BBLE5DMP.js → chunk-I26R4PE2.js} +1 -1
- package/dist-cli/chunks/{chunk-GEPWAAGG.js → chunk-IQNZPHGD.js} +2 -2
- package/dist-cli/chunks/{chunk-47SB3JEW.js → chunk-KTE2VIXH.js} +3 -3
- package/dist-cli/chunks/chunk-KXLYXKMA.js +1 -0
- package/dist-cli/chunks/{chunk-QMU4MAG3.js → chunk-KY6NY6WN.js} +1 -1
- package/dist-cli/chunks/{chunk-C3VO2MSV.js → chunk-LT2X5ISU.js} +2 -2
- package/dist-cli/chunks/{chunk-J6UPVQ37.js → chunk-MSU27JEW.js} +2 -2
- package/dist-cli/chunks/{chunk-475TNRB7.js → chunk-MUTDER75.js} +2 -2
- package/dist-cli/chunks/{chunk-WNK5XRWG.js → chunk-NQ4EDJV4.js} +2 -2
- package/dist-cli/chunks/{chunk-DE6JMHEW.js → chunk-OBYYAT4F.js} +2 -2
- package/dist-cli/chunks/{chunk-APWX6YCC.js → chunk-OEV7EOMC.js} +2 -2
- package/dist-cli/chunks/{chunk-O7SJH4E7.js → chunk-PMAKUYYK.js} +2 -2
- package/dist-cli/chunks/{chunk-OS62SSOF.js → chunk-QNQO5VHO.js} +9 -9
- package/dist-cli/chunks/chunk-QUEATUWT.js +1 -0
- package/dist-cli/chunks/{chunk-5OZHLK4L.js → chunk-RVWJ3TAE.js} +2 -2
- package/dist-cli/chunks/{chunk-AV6YDPVF.js → chunk-SA5RP334.js} +2 -2
- package/dist-cli/chunks/{chunk-RAWQNHKI.js → chunk-SF6W3FRS.js} +1 -1
- package/dist-cli/chunks/{chunk-AUKEEPZT.js → chunk-SRA2TVCG.js} +1 -1
- package/dist-cli/chunks/{chunk-JP3PNWTD.js → chunk-VALW4SKE.js} +1 -1
- package/dist-cli/chunks/{chunk-FUUXRMXG.js → chunk-VJPN6DQU.js} +2 -2
- package/dist-cli/chunks/{chunk-MJQXUHDS.js → chunk-VSKLWCFM.js} +2 -2
- package/dist-cli/chunks/{chunk-CHHBZJBH.js → chunk-VSRV5LFU.js} +1 -1
- package/dist-cli/chunks/{chunk-SSQWBV2F.js → chunk-VX5CAWLC.js} +2 -2
- package/dist-cli/chunks/{chunk-YZ6MQTDJ.js → chunk-W3FBNBTX.js} +2 -2
- package/dist-cli/chunks/{chunk-BZH7FKZZ.js → chunk-WHL7FMLG.js} +84 -27
- package/dist-cli/chunks/{chunk-FCRJNHIA.js → chunk-X4LYRBLZ.js} +1 -1
- package/dist-cli/chunks/{chunk-4EQ5V4CA.js → chunk-Y7ZMV3PG.js} +1 -1
- package/dist-cli/chunks/{chunk-YBRJSW5C.js → chunk-YQIFU3PB.js} +3 -3
- package/dist-cli/chunks/{chunk-HPTOFA3Y.js → chunk-Z47GWZMZ.js} +3 -3
- package/dist-cli/chunks/cli-version-DPV7EKFK.js +2 -0
- package/dist-cli/chunks/{compat-3C3O2TKY.js → compat-FMBQL2CX.js} +3 -3
- package/dist-cli/chunks/{config-TEO7DXWJ.js → config-JD23SW7N.js} +2 -2
- package/dist-cli/chunks/control-IAHPU5HD.js +2 -0
- package/dist-cli/chunks/{cpu-profile-QSFGY7HA.js → cpu-profile-2Z4KGCAE.js} +2 -2
- package/dist-cli/chunks/{daemon-R2TQX4HR.js → daemon-NDO6JPDH.js} +2 -2
- package/dist-cli/chunks/{debug-UMLASBX2.js → debug-RBVMEH33.js} +3 -3
- package/dist-cli/chunks/{detox-Y6TFEKQU.js → detox-TBJAZEBB.js} +2 -2
- package/dist-cli/chunks/{device-4NBQC4LP.js → device-26YM4HM7.js} +2 -2
- package/dist-cli/chunks/{diagnose-DKXPE4P6.js → diagnose-PW7FGUOI.js} +2 -2
- package/dist-cli/chunks/drivers-L6UY2JC6.js +2 -0
- package/dist-cli/chunks/{electron-3AZTVV3N.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-K323Q4NQ.js → hints-Q3I4PXMT.js} +2 -2
- package/dist-cli/chunks/{home-paths-H7GUBJAB.js → home-paths-P5GMZADH.js} +2 -2
- package/dist-cli/chunks/{inspect-UJFYMPE5.js → inspect-UTHL2UK4.js} +55 -58
- package/dist-cli/chunks/install-3UWGXX6F.js +2 -0
- package/dist-cli/chunks/{install-desktop-NT5QJIPD.js → install-desktop-XQYE3QYC.js} +3 -3
- package/dist-cli/chunks/{keys-OJVAQQK5.js → keys-75OBQ7OF.js} +2 -2
- package/dist-cli/chunks/{launch-VMMQENF6.js → launch-TFE3CZZ3.js} +3 -3
- package/dist-cli/chunks/{login-CRJE2OZK.js → login-EIL5PLK4.js} +4 -4
- package/dist-cli/chunks/{logout-3DXVRPLM.js → logout-2DXPOPWE.js} +2 -2
- package/dist-cli/chunks/{maestro-FPDCZ3NO.js → maestro-Q27CNJGT.js} +2 -2
- package/dist-cli/chunks/{preview-7WLF767D.js → preview-ZGVCXKQZ.js} +2 -2
- package/dist-cli/chunks/{profile-DE5LJZ5Y.js → profile-TCX6GYV5.js} +2 -2
- package/dist-cli/chunks/{react-HLRPZFFH.js → react-24D26RLU.js} +2 -2
- package/dist-cli/chunks/{record-VQAG2YYZ.js → record-3MODR5RQ.js} +2 -2
- package/dist-cli/chunks/runtime-5MJPHLRZ.js +2 -0
- package/dist-cli/chunks/{runtime-delivery-O2WD2RT6.js → runtime-delivery-NWSDCFAI.js} +2 -2
- package/dist-cli/chunks/{screenshot-HYSJVWYN.js → screenshot-4A6JTLUV.js} +2 -2
- package/dist-cli/chunks/{screenshot-mode-ME7WKY7S.js → screenshot-mode-KVMXLFJ4.js} +2 -2
- package/dist-cli/chunks/{screenshots-5MY3SHOW.js → screenshots-XGG6PNXW.js} +2 -2
- package/dist-cli/chunks/{server-LRSX4VKM.js → server-MRLLYDV7.js} +2 -2
- package/dist-cli/chunks/setup-repo-OUMNEC36.js +2 -0
- package/dist-cli/chunks/{skills-SHJHDYYU.js → skills-COR2GQRN.js} +2 -2
- package/dist-cli/chunks/{start-FBIHKRWV.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-W5VLOO6C.js → test-4N6K3C5R.js} +3 -3
- package/dist-cli/chunks/{three-mode-OILRSRAU.js → three-mode-PJQGXIP4.js} +2 -2
- package/dist-cli/chunks/{timeline-H4SFNSBA.js → timeline-C7JSMHCV.js} +2 -2
- package/dist-cli/chunks/{upgrade-4SYAHMAP.js → upgrade-SFUV6KPW.js} +2 -2
- package/dist-cli/chunks/upload-XQLVCUKI.js +2 -0
- package/dist-cli/chunks/{web-UXTXQNYW.js → web-GK27H4NM.js} +2 -2
- package/dist-cli/chunks/what-happened-GAY54LBV.js +22 -0
- package/dist-cli/chunks/{whoami-QDFN5LHP.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 +143 -5
- package/dist-lib/sdk.mjs +138 -5
- 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-QJ5PP7KT.js +0 -2
- package/dist-cli/chunks/beta-LAPRQ3TP.js +0 -2
- package/dist-cli/chunks/chunk-5AL4WWUG.js +0 -1
- package/dist-cli/chunks/chunk-IKVDJYRI.js +0 -2
- package/dist-cli/chunks/chunk-RIMNMM3O.js +0 -1
- package/dist-cli/chunks/chunk-YPLXVVG4.js +0 -1
- package/dist-cli/chunks/cli-version-JKOW3OL3.js +0 -2
- package/dist-cli/chunks/control-UUSQA7VO.js +0 -2
- package/dist-cli/chunks/drivers-TFUZRRDZ.js +0 -2
- package/dist-cli/chunks/flow-744L27RP.js +0 -2
- package/dist-cli/chunks/help-JUP3UEFR.js +0 -2
- package/dist-cli/chunks/install-D5J5LA2V.js +0 -2
- package/dist-cli/chunks/runtime-LBAJOT4M.js +0 -2
- package/dist-cli/chunks/setup-repo-5FHT7B6J.js +0 -2
- package/dist-cli/chunks/store-ZSAUNVP6.js +0 -2
- package/dist-cli/chunks/telemetry-E2ZAX2C6.js +0 -2
- package/dist-cli/chunks/upload-NPGWC7E5.js +0 -2
- package/dist-cli/chunks/what-happened-SNC6DEIJ.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,
|
|
@@ -708,7 +713,17 @@ async function inspectWaitSelector(bridge, testId, timeoutMs = 5e3, opts = {}) {
|
|
|
708
713
|
const t = window.__sootsimTest
|
|
709
714
|
if (!t) return undefined // bridge not ready \u2014 indeterminate, not "gone"
|
|
710
715
|
try {
|
|
711
|
-
|
|
716
|
+
// gone-mode confirms a gate/screen LEFT \u2014 it only needs structural
|
|
717
|
+
// existence + layout, NOT the full-tree occlusion pass (pruneHidden).
|
|
718
|
+
// that pass (computeOccludedInspectNodeIds) walks the whole tree and
|
|
719
|
+
// does O(n\xB2)-ish rect-occlusion testing EVERY poll; on a large
|
|
720
|
+
// post-login app tree it costs seconds per poll, so --gone can never
|
|
721
|
+
// get two clean "absent" polls inside budget and falsely reports the
|
|
722
|
+
// gate as still blocked \u2014 the root cause of the 3pc PR-preview outage.
|
|
723
|
+
// presence-mode keeps pruneHidden so "appeared" still means
|
|
724
|
+
// visibly-reachable. a departed gate is unmounted or zero-sized, so the
|
|
725
|
+
// cheap structural+layout check is correct here and ~O(n) cheap.
|
|
726
|
+
const matches = await t.queryAll?.(gone ? { hasId: ID } : { hasId: ID, pruneHidden: true })
|
|
712
727
|
if (!Array.isArray(matches)) return undefined
|
|
713
728
|
return matches.find(present) || null
|
|
714
729
|
} catch {
|
|
@@ -739,24 +754,76 @@ async function inspectWaitSelector(bridge, testId, timeoutMs = 5e3, opts = {}) {
|
|
|
739
754
|
);
|
|
740
755
|
return result ?? { found: false, elapsed: timeoutMs };
|
|
741
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
|
+
}
|
|
742
783
|
async function inspectErrors(bridge, limit = 20) {
|
|
743
784
|
const result = await bridge.send({
|
|
744
785
|
type: "evaluate",
|
|
745
|
-
code:
|
|
786
|
+
code: consoleEntriesEval("error", limit)
|
|
746
787
|
});
|
|
747
788
|
return Array.isArray(result) ? result : [];
|
|
748
789
|
}
|
|
749
790
|
async function inspectWarnings(bridge, limit = 20) {
|
|
750
791
|
const result = await bridge.send({
|
|
751
792
|
type: "evaluate",
|
|
752
|
-
code:
|
|
793
|
+
code: consoleEntriesEval("warn", limit)
|
|
753
794
|
});
|
|
754
795
|
return Array.isArray(result) ? result : [];
|
|
755
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
|
+
})()`;
|
|
756
823
|
async function clearConsole(bridge) {
|
|
757
824
|
await bridge.send({
|
|
758
825
|
type: "evaluate",
|
|
759
|
-
code: 'window.__sootsimConsole?.clear(); "cleared"'
|
|
826
|
+
code: 'window.__sootsimConsole?.clear(); window.__sootsimObservability?.logs?.clear?.(); "cleared"'
|
|
760
827
|
});
|
|
761
828
|
}
|
|
762
829
|
async function inspectRequests(bridge, opts = {}) {
|
|
@@ -1014,6 +1081,72 @@ function formatTimelineSummary(summary) {
|
|
|
1014
1081
|
}
|
|
1015
1082
|
return parts.join(" \xB7 ");
|
|
1016
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
|
+
}
|
|
1017
1150
|
|
|
1018
1151
|
// cli/commands/inspect/settling.ts
|
|
1019
1152
|
async function waitForSootsimIdle({
|
|
@@ -1490,6 +1623,8 @@ async function tapBest(bridge, query, opts = {}) {
|
|
|
1490
1623
|
0 && (module.exports = {
|
|
1491
1624
|
DEBUG_CHANNELS,
|
|
1492
1625
|
LAYOUT_GET_NATIVE_EVAL,
|
|
1626
|
+
MERGED_CONSOLE_COUNT_EVAL,
|
|
1627
|
+
NOISY_TIMELINE_KINDS,
|
|
1493
1628
|
READY_CONTENT_NODE_FLOOR,
|
|
1494
1629
|
READY_NODE_STABLE_MS,
|
|
1495
1630
|
WAIT_READY_PROBE,
|
|
@@ -1499,6 +1634,9 @@ async function tapBest(bridge, query, opts = {}) {
|
|
|
1499
1634
|
clearRequests,
|
|
1500
1635
|
filterLogEntries,
|
|
1501
1636
|
formatLayoutElements,
|
|
1637
|
+
formatTimelineEvent,
|
|
1638
|
+
formatTimelineEvents,
|
|
1639
|
+
formatTimelinePayload,
|
|
1502
1640
|
formatTimelineSummary,
|
|
1503
1641
|
getShellState,
|
|
1504
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) {
|
|
@@ -626,7 +626,17 @@ async function inspectWaitSelector(bridge, testId, timeoutMs = 5e3, opts = {}) {
|
|
|
626
626
|
const t = window.__sootsimTest
|
|
627
627
|
if (!t) return undefined // bridge not ready \u2014 indeterminate, not "gone"
|
|
628
628
|
try {
|
|
629
|
-
|
|
629
|
+
// gone-mode confirms a gate/screen LEFT \u2014 it only needs structural
|
|
630
|
+
// existence + layout, NOT the full-tree occlusion pass (pruneHidden).
|
|
631
|
+
// that pass (computeOccludedInspectNodeIds) walks the whole tree and
|
|
632
|
+
// does O(n\xB2)-ish rect-occlusion testing EVERY poll; on a large
|
|
633
|
+
// post-login app tree it costs seconds per poll, so --gone can never
|
|
634
|
+
// get two clean "absent" polls inside budget and falsely reports the
|
|
635
|
+
// gate as still blocked \u2014 the root cause of the 3pc PR-preview outage.
|
|
636
|
+
// presence-mode keeps pruneHidden so "appeared" still means
|
|
637
|
+
// visibly-reachable. a departed gate is unmounted or zero-sized, so the
|
|
638
|
+
// cheap structural+layout check is correct here and ~O(n) cheap.
|
|
639
|
+
const matches = await t.queryAll?.(gone ? { hasId: ID } : { hasId: ID, pruneHidden: true })
|
|
630
640
|
if (!Array.isArray(matches)) return undefined
|
|
631
641
|
return matches.find(present) || null
|
|
632
642
|
} catch {
|
|
@@ -657,24 +667,76 @@ async function inspectWaitSelector(bridge, testId, timeoutMs = 5e3, opts = {}) {
|
|
|
657
667
|
);
|
|
658
668
|
return result ?? { found: false, elapsed: timeoutMs };
|
|
659
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
|
+
}
|
|
660
696
|
async function inspectErrors(bridge, limit = 20) {
|
|
661
697
|
const result = await bridge.send({
|
|
662
698
|
type: "evaluate",
|
|
663
|
-
code:
|
|
699
|
+
code: consoleEntriesEval("error", limit)
|
|
664
700
|
});
|
|
665
701
|
return Array.isArray(result) ? result : [];
|
|
666
702
|
}
|
|
667
703
|
async function inspectWarnings(bridge, limit = 20) {
|
|
668
704
|
const result = await bridge.send({
|
|
669
705
|
type: "evaluate",
|
|
670
|
-
code:
|
|
706
|
+
code: consoleEntriesEval("warn", limit)
|
|
671
707
|
});
|
|
672
708
|
return Array.isArray(result) ? result : [];
|
|
673
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
|
+
})()`;
|
|
674
736
|
async function clearConsole(bridge) {
|
|
675
737
|
await bridge.send({
|
|
676
738
|
type: "evaluate",
|
|
677
|
-
code: 'window.__sootsimConsole?.clear(); "cleared"'
|
|
739
|
+
code: 'window.__sootsimConsole?.clear(); window.__sootsimObservability?.logs?.clear?.(); "cleared"'
|
|
678
740
|
});
|
|
679
741
|
}
|
|
680
742
|
async function inspectRequests(bridge, opts = {}) {
|
|
@@ -932,6 +994,72 @@ function formatTimelineSummary(summary) {
|
|
|
932
994
|
}
|
|
933
995
|
return parts.join(" \xB7 ");
|
|
934
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
|
+
}
|
|
935
1063
|
|
|
936
1064
|
// cli/commands/inspect/settling.ts
|
|
937
1065
|
async function waitForSootsimIdle({
|
|
@@ -1407,6 +1535,8 @@ async function tapBest(bridge, query, opts = {}) {
|
|
|
1407
1535
|
export {
|
|
1408
1536
|
DEBUG_CHANNELS,
|
|
1409
1537
|
LAYOUT_GET_NATIVE_EVAL,
|
|
1538
|
+
MERGED_CONSOLE_COUNT_EVAL,
|
|
1539
|
+
NOISY_TIMELINE_KINDS,
|
|
1410
1540
|
READY_CONTENT_NODE_FLOOR,
|
|
1411
1541
|
READY_NODE_STABLE_MS,
|
|
1412
1542
|
WAIT_READY_PROBE,
|
|
@@ -1416,6 +1546,9 @@ export {
|
|
|
1416
1546
|
clearRequests,
|
|
1417
1547
|
filterLogEntries,
|
|
1418
1548
|
formatLayoutElements,
|
|
1549
|
+
formatTimelineEvent,
|
|
1550
|
+
formatTimelineEvents,
|
|
1551
|
+
formatTimelinePayload,
|
|
1419
1552
|
formatTimelineSummary,
|
|
1420
1553
|
getShellState,
|
|
1421
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;
|