sootsim 0.1.172 → 0.1.174
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/README.md +25 -0
- package/dist-cli/bin.js +3 -3
- package/dist-cli/chunks/{agent-WQ7M46K4.js → agent-EHUPKIHD.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-PLQVHHZV.js → agent-wrapper-L5F5DCXN.js} +2 -2
- package/dist-cli/chunks/{app-fonts-COYEPFDN.js → app-fonts-K4FD7ITP.js} +2 -2
- package/dist-cli/chunks/{assert-BK3NDOF2.js → assert-IAGOGXRA.js} +2 -2
- package/dist-cli/chunks/beta-U7KMLBHU.js +2 -0
- package/dist-cli/chunks/{camera-RU533SOI.js → camera-YRT5HULX.js} +2 -2
- package/dist-cli/chunks/chunk-3FGEZ5ZM.js +1 -0
- package/dist-cli/chunks/{chunk-LGXEPAHS.js → chunk-3SU6H3TH.js} +1 -1
- package/dist-cli/chunks/{chunk-KHDX36G5.js → chunk-4UEZKS2B.js} +3 -3
- package/dist-cli/chunks/{chunk-TLX7JDQK.js → chunk-6BM25DJX.js} +2 -2
- package/dist-cli/chunks/{chunk-SYAAEME6.js → chunk-6OROZMOR.js} +1 -1
- package/dist-cli/chunks/{chunk-TM5K4CCK.js → chunk-7A4YXD3W.js} +1 -1
- package/dist-cli/chunks/{chunk-Q5L2HSIK.js → chunk-7E24LDJL.js} +1 -1
- package/dist-cli/chunks/{chunk-LENELFGE.js → chunk-7MVFXNE7.js} +3 -3
- package/dist-cli/chunks/{chunk-ZMY6B3ZC.js → chunk-7NRQVOIK.js} +2 -2
- package/dist-cli/chunks/{chunk-AYNXI62J.js → chunk-7QNSKZ5Y.js} +1 -1
- package/dist-cli/chunks/chunk-C77TGXJ6.js +1 -0
- package/dist-cli/chunks/{chunk-CMH3BW27.js → chunk-CBNM2JQX.js} +2 -2
- package/dist-cli/chunks/{chunk-4J3T7PQJ.js → chunk-DY55G3EZ.js} +2 -2
- package/dist-cli/chunks/{chunk-BMIRPWXB.js → chunk-FFKK3UYP.js} +1 -1
- package/dist-cli/chunks/{chunk-PTBDLOWI.js → chunk-GERUGIKH.js} +1 -1
- package/dist-cli/chunks/chunk-GPC5MNUW.js +2 -0
- package/dist-cli/chunks/{chunk-T47U5L2K.js → chunk-H4FFM26I.js} +1 -1
- package/dist-cli/chunks/{chunk-NPWSQT6H.js → chunk-HOQZJLG7.js} +2 -2
- package/dist-cli/chunks/{chunk-BIWY73P5.js → chunk-IIEAMA66.js} +2 -2
- package/dist-cli/chunks/{chunk-LHCRB57U.js → chunk-IX2RHMWB.js} +2 -2
- package/dist-cli/chunks/{chunk-EJ76TW66.js → chunk-J2O2AEFO.js} +1 -1
- package/dist-cli/chunks/{chunk-46UXO5SQ.js → chunk-JE2Q25A4.js} +1 -1
- package/dist-cli/chunks/{chunk-RD6VD4EB.js → chunk-KERGT5NG.js} +2 -2
- package/dist-cli/chunks/{chunk-YUOZCM27.js → chunk-KLPYSMAV.js} +1 -1
- package/dist-cli/chunks/{chunk-V2EE4PUL.js → chunk-M25NFKL5.js} +2 -2
- package/dist-cli/chunks/{chunk-6HZQNXH6.js → chunk-MMIENHCP.js} +2 -2
- package/dist-cli/chunks/{chunk-62W3D6EE.js → chunk-MZP77ZME.js} +1 -1
- package/dist-cli/chunks/{chunk-IEI42LDX.js → chunk-N5CGRRGJ.js} +1 -1
- package/dist-cli/chunks/{chunk-N7PCRU6E.js → chunk-NEIN26HI.js} +2 -2
- package/dist-cli/chunks/{chunk-RCN3YTNR.js → chunk-O2PWKVDV.js} +2 -2
- package/dist-cli/chunks/{chunk-6E2UB6LQ.js → chunk-OXREO6LV.js} +2 -2
- package/dist-cli/chunks/{chunk-4BIG3MC7.js → chunk-QWKK2QEY.js} +1 -1
- package/dist-cli/chunks/{chunk-DAIJBIM3.js → chunk-RPRFPJKT.js} +2 -2
- package/dist-cli/chunks/{chunk-42CB2PAE.js → chunk-SCM3ERN4.js} +1 -1
- package/dist-cli/chunks/{chunk-7Q6G6GQQ.js → chunk-SFHH65G2.js} +2 -2
- package/dist-cli/chunks/{chunk-RQWJY32F.js → chunk-STSULGMI.js} +2 -2
- package/dist-cli/chunks/{chunk-UJCUPX54.js → chunk-SWKBOGBZ.js} +2 -2
- package/dist-cli/chunks/{chunk-6GI3NZFP.js → chunk-TH3AEL45.js} +2 -2
- package/dist-cli/chunks/{chunk-NVBBJ3G2.js → chunk-TPE7XEGU.js} +2 -2
- package/dist-cli/chunks/{chunk-B23C5UYK.js → chunk-U7BX2XYL.js} +1 -1
- package/dist-cli/chunks/{chunk-4LAKUGO7.js → chunk-UARZTJ6K.js} +1 -1
- package/dist-cli/chunks/{chunk-53XIVSKW.js → chunk-W3SYJD3H.js} +2 -2
- package/dist-cli/chunks/{chunk-MRVSPAIH.js → chunk-X7OTWLOA.js} +2 -2
- package/dist-cli/chunks/{chunk-PM4SIKKG.js → chunk-YA46Q5HY.js} +2 -2
- package/dist-cli/chunks/{chunk-TJGRGSYC.js → chunk-YA4XRTIG.js} +1 -1
- package/dist-cli/chunks/cli-version-YJOJPTJN.js +2 -0
- package/dist-cli/chunks/{compat-5DGHR45U.js → compat-SJW4SLDF.js} +3 -3
- package/dist-cli/chunks/{control-FNKKISVL.js → control-HS3KMAUF.js} +2 -2
- package/dist-cli/chunks/{cpu-profile-JUAWGPGI.js → cpu-profile-E46RYKZY.js} +2 -2
- package/dist-cli/chunks/daemon-ZTEQIFR3.js +2 -0
- package/dist-cli/chunks/{debug-CW6DJ4JU.js → debug-TO5VRPFP.js} +3 -3
- package/dist-cli/chunks/{detox-CWAWL7PV.js → detox-IWT2ZC6E.js} +2 -2
- package/dist-cli/chunks/{device-RWDY3QWG.js → device-MM2473ZQ.js} +2 -2
- package/dist-cli/chunks/{diagnose-OHHX4L5I.js → diagnose-5COWPUYY.js} +2 -2
- package/dist-cli/chunks/drivers-VFOM6SJP.js +2 -0
- package/dist-cli/chunks/{electron-OLREFRMH.js → electron-HQGMUN3T.js} +3 -3
- package/dist-cli/chunks/flow-Z5DTMEGY.js +2 -0
- package/dist-cli/chunks/help-GYJH5S4Y.js +2 -0
- package/dist-cli/chunks/{hints-MIKS44U2.js → hints-G6LSQHOA.js} +2 -2
- package/dist-cli/chunks/{home-paths-GCXNBHYT.js → home-paths-WVKPC676.js} +2 -2
- package/dist-cli/chunks/{inspect-TIGJUGBG.js → inspect-LTFGONJD.js} +3 -3
- package/dist-cli/chunks/{install-desktop-MU56WK46.js → install-desktop-CWTQXAHN.js} +3 -3
- package/dist-cli/chunks/{keys-PFIFN6C7.js → keys-DCWFESUB.js} +2 -2
- package/dist-cli/chunks/{login-PVVH5YUA.js → login-WTZRKO4L.js} +4 -4
- package/dist-cli/chunks/{logout-GNKIGKTW.js → logout-3XCA6HOX.js} +2 -2
- package/dist-cli/chunks/{maestro-IGGZODE6.js → maestro-5VKHW67Y.js} +2 -2
- package/dist-cli/chunks/optional-demo-registry-VKTF3JLY.js +2 -0
- package/dist-cli/chunks/{preview-UF3NZLHQ.js → preview-ZBD2J4MR.js} +2 -2
- package/dist-cli/chunks/{profile-XR7KRATW.js → profile-3ENYOSN4.js} +2 -2
- package/dist-cli/chunks/{react-4VBBPTZN.js → react-DASWRMSI.js} +2 -2
- package/dist-cli/chunks/{record-35VQV7SI.js → record-EICRO6TY.js} +2 -2
- package/dist-cli/chunks/runtime-FLNHVIWT.js +2 -0
- package/dist-cli/chunks/{screenshot-GUXVAMU4.js → screenshot-HE6MAIMM.js} +2 -2
- package/dist-cli/chunks/{screenshot-mode-NM3S5FUB.js → screenshot-mode-OQDAMXSB.js} +2 -2
- package/dist-cli/chunks/{screenshots-XNVHV5OB.js → screenshots-5WZVXZ5W.js} +2 -2
- package/dist-cli/chunks/{screenshots-capture-AL7NR7CG.js → screenshots-capture-UZP6TEXX.js} +2 -2
- package/dist-cli/chunks/{serve-P4WR6SDD.js → serve-BAXU4D42.js} +2 -2
- package/dist-cli/chunks/{setup-VFE6WRVA.js → setup-DRMJTUMK.js} +2 -2
- package/dist-cli/chunks/skills-R6NXAFPT.js +48 -0
- package/dist-cli/chunks/{slides-TLMQ6CCP.js → slides-SGIOOUVU.js} +2 -2
- package/dist-cli/chunks/store-ZQ4F3GEO.js +2 -0
- package/dist-cli/chunks/telemetry-YTN2XUOV.js +2 -0
- package/dist-cli/chunks/{test-LDLES3IA.js → test-7HAXG4AU.js} +3 -3
- package/dist-cli/chunks/{three-mode-NULZ5VY2.js → three-mode-GBC3JNV6.js} +2 -2
- package/dist-cli/chunks/{timeline-4YNNQVMU.js → timeline-C3HHCWU7.js} +5 -5
- package/dist-cli/chunks/{upgrade-MGCZ4SP7.js → upgrade-AJ7FIJO2.js} +2 -2
- package/dist-cli/chunks/upload-JXH5MBZO.js +2 -0
- package/dist-cli/chunks/{version-BZC7W5V3.js → version-RYF5DY5P.js} +2 -2
- package/dist-cli/chunks/{web-GWHWLRGJ.js → web-VPQD3D5K.js} +2 -2
- package/dist-cli/chunks/{what-happened-5VQD3NPS.js → what-happened-QRPH35TD.js} +8 -7
- package/dist-cli/chunks/{whoami-SF4NA5VN.js → whoami-BPGQUMYX.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 +66 -1
- package/dist-lib/jump-to-source-babel.cjs +93 -0
- 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 +1 -1
- package/dist-lib/sdk.mjs +1 -1
- package/dist-lib/skills.cjs +1 -1
- package/dist-lib/vite.cjs +1 -1
- package/package.json +5 -1
- package/skills/soot.md +1 -1
- package/skills/sootsim-debug.md +23 -1
- package/src/index.ts +1 -0
- package/src/jump-to-source-babel.ts +135 -0
- package/dist-cli/chunks/beta-F3BMUABH.js +0 -2
- package/dist-cli/chunks/chunk-2NGGBDGA.js +0 -2
- package/dist-cli/chunks/chunk-72MDGPY7.js +0 -1
- package/dist-cli/chunks/chunk-JBGGTC5Z.js +0 -1
- package/dist-cli/chunks/cli-version-TNUDIF5R.js +0 -2
- package/dist-cli/chunks/daemon-IGYKJTV4.js +0 -2
- package/dist-cli/chunks/drivers-LM7U6WOI.js +0 -2
- package/dist-cli/chunks/flow-MEQ4WJ2A.js +0 -2
- package/dist-cli/chunks/help-CLCZJBU5.js +0 -2
- package/dist-cli/chunks/optional-demo-registry-2F65QTQK.js +0 -2
- package/dist-cli/chunks/runtime-LDYJVDWV.js +0 -2
- package/dist-cli/chunks/skills-ECYDZM76.js +0 -40
- package/dist-cli/chunks/store-JX7O3YO6.js +0 -2
- package/dist-cli/chunks/telemetry-SS4OVJ4R.js +0 -2
- package/dist-cli/chunks/upload-RKYUNV4M.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
2
|
-
import{C as N,D as F,E as y,P as T,Q as b,R as S}from"./chunk-
|
|
1
|
+
/*! sootsim v0.1.174 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{C as N,D as F,E as y,P as T,Q as b,R as S}from"./chunk-GERUGIKH.js";import{c as A,e as _}from"./chunk-O2PWKVDV.js";import"./chunk-QWKK2QEY.js";import{b as k}from"./chunk-3SU6H3TH.js";import"./chunk-6OROZMOR.js";import"./chunk-U7BX2XYL.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
|
|
3
3
|
sootsim what-happened \u2014 show recent events from the semantic timeline
|
|
4
4
|
|
|
5
5
|
usage:
|
|
@@ -13,10 +13,11 @@ usage:
|
|
|
13
13
|
sootsim what-happened --json
|
|
14
14
|
sootsim what-happened --no-advance # don't advance cursor after read
|
|
15
15
|
|
|
16
|
-
note:
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
${f}
|
|
16
|
+
note: react-commit, layout, and scroll are opt-in/noisy events. enable them
|
|
17
|
+
with "sootsim timeline start <kind>", then pass --noisy or include them in
|
|
18
|
+
--kinds to see them.
|
|
19
|
+
`),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=_(e);try{if(s){let c=await N(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}: ${T(c)}`)}!u&&!i&&c.lastAt&&await y(h,g,c.lastAt);return}let o=await F(h,$),E=Array.isArray(d)&&d.some(c=>b.has(c)),I=!v&&!E,p=0;if(I){let c=o.events.filter(m=>b.has(m.kind)?(p+=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)p>0?console.log(` no non-noise events (${p} 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 f of m){console.log(`
|
|
20
|
+
\u2500\u2500 ${f.label} (${f.events.length} event${f.events.length===1?"":"s"}) \u2500\u2500`);for(let M of f.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))}p>0&&o.events.length>0&&process.stderr.write(`
|
|
21
|
+
${p} high-frequency event(s) hidden (react-commit/layout/scroll)
|
|
21
22
|
rerun with --noisy or --kinds react-commit,layout,scroll to include them
|
|
22
23
|
`)}!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.174 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{d as i}from"./chunk-SWKBOGBZ.js";import{d as n}from"./chunk-SFHH65G2.js";import"./chunk-6OROZMOR.js";import"./chunk-U7BX2XYL.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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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;
|
|
@@ -34,6 +34,7 @@ var src_exports = {};
|
|
|
34
34
|
__export(src_exports, {
|
|
35
35
|
DEFAULT_SOOTSIM_BRIDGE_PORT: () => DEFAULT_SOOTSIM_BRIDGE_PORT,
|
|
36
36
|
DEFAULT_SOOTSIM_SHELL_URL: () => DEFAULT_SOOTSIM_SHELL_URL,
|
|
37
|
+
jumpToSourceBabelPlugin: () => sootsimJumpToSourceBabelPlugin,
|
|
37
38
|
metroPlugin: () => metro_plugin_default,
|
|
38
39
|
sootsimPlugin: () => sootsimPlugin
|
|
39
40
|
});
|
|
@@ -345,6 +346,69 @@ function withSootsim(config, options = {}) {
|
|
|
345
346
|
}
|
|
346
347
|
var metro_plugin_default = withSootsim;
|
|
347
348
|
|
|
349
|
+
// src/jump-to-source-babel.ts
|
|
350
|
+
function normalizeSourcePath(path5) {
|
|
351
|
+
const queryStart = path5.indexOf("?");
|
|
352
|
+
const clean = queryStart >= 0 ? path5.slice(0, queryStart) : path5;
|
|
353
|
+
return clean.replace(/\\/g, "/");
|
|
354
|
+
}
|
|
355
|
+
function matchesPath(path5, matcher) {
|
|
356
|
+
return typeof matcher === "string" ? path5.includes(matcher) : matcher.test(path5);
|
|
357
|
+
}
|
|
358
|
+
function shouldStampFile(filename, options) {
|
|
359
|
+
const normalized = normalizeSourcePath(filename);
|
|
360
|
+
if (normalized.includes("/node_modules/")) return false;
|
|
361
|
+
if (normalized.includes("/dist/") || normalized.includes("/build/")) return false;
|
|
362
|
+
if (options.exclude?.some((matcher) => matchesPath(normalized, matcher))) return false;
|
|
363
|
+
if (options.include?.length) {
|
|
364
|
+
return options.include.some((matcher) => matchesPath(normalized, matcher));
|
|
365
|
+
}
|
|
366
|
+
return true;
|
|
367
|
+
}
|
|
368
|
+
function getJSXName(node) {
|
|
369
|
+
if (!node) return null;
|
|
370
|
+
if (node.type === "JSXIdentifier" && node.name) return node.name;
|
|
371
|
+
if (node.type === "JSXMemberExpression") {
|
|
372
|
+
const object = getJSXName(node.object);
|
|
373
|
+
const property = getJSXName(node.property);
|
|
374
|
+
return object && property ? `${object}.${property}` : null;
|
|
375
|
+
}
|
|
376
|
+
return null;
|
|
377
|
+
}
|
|
378
|
+
function hasAttribute(node, attrName) {
|
|
379
|
+
return node.attributes?.some((attr) => {
|
|
380
|
+
if (attr.type !== "JSXAttribute") return false;
|
|
381
|
+
return attr.name?.type === "JSXIdentifier" && attr.name.name === attrName;
|
|
382
|
+
}) ?? false;
|
|
383
|
+
}
|
|
384
|
+
function sootsimJumpToSourceBabelPlugin(api, options = {}) {
|
|
385
|
+
const attrName = options.attrName || "srcloc";
|
|
386
|
+
return {
|
|
387
|
+
name: "sootsim-jump-to-source",
|
|
388
|
+
visitor: {
|
|
389
|
+
JSXOpeningElement(path5, state) {
|
|
390
|
+
if (options.enabled === false) return;
|
|
391
|
+
const filename = state.file?.opts?.filename;
|
|
392
|
+
if (!filename || !shouldStampFile(filename, options)) return;
|
|
393
|
+
const node = path5.node;
|
|
394
|
+
const tagName = getJSXName(node.name);
|
|
395
|
+
if (!tagName || tagName === "Fragment" || tagName.endsWith(".Fragment")) return;
|
|
396
|
+
if (hasAttribute(node, attrName)) return;
|
|
397
|
+
const loc = node.loc?.start;
|
|
398
|
+
if (!loc) return;
|
|
399
|
+
const source = `${normalizeSourcePath(filename)}:${loc.line}:${loc.column + 1}`;
|
|
400
|
+
node.attributes ??= [];
|
|
401
|
+
node.attributes.push(
|
|
402
|
+
api.types.jsxAttribute(
|
|
403
|
+
api.types.jsxIdentifier(attrName),
|
|
404
|
+
api.types.stringLiteral(source)
|
|
405
|
+
)
|
|
406
|
+
);
|
|
407
|
+
}
|
|
408
|
+
}
|
|
409
|
+
};
|
|
410
|
+
}
|
|
411
|
+
|
|
348
412
|
// src/bridge-constants.ts
|
|
349
413
|
var DEFAULT_SOOTSIM_BRIDGE_PORT = 7668;
|
|
350
414
|
|
|
@@ -354,6 +418,7 @@ var DEFAULT_SOOTSIM_SHELL_URL = "http://localhost:5173/";
|
|
|
354
418
|
0 && (module.exports = {
|
|
355
419
|
DEFAULT_SOOTSIM_BRIDGE_PORT,
|
|
356
420
|
DEFAULT_SOOTSIM_SHELL_URL,
|
|
421
|
+
jumpToSourceBabelPlugin,
|
|
357
422
|
metroPlugin,
|
|
358
423
|
sootsimPlugin
|
|
359
424
|
});
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
/*! sootsim v0.1.174 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
|
+
"use strict";
|
|
4
|
+
var __defProp = Object.defineProperty;
|
|
5
|
+
var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
|
|
6
|
+
var __getOwnPropNames = Object.getOwnPropertyNames;
|
|
7
|
+
var __hasOwnProp = Object.prototype.hasOwnProperty;
|
|
8
|
+
var __export = (target, all) => {
|
|
9
|
+
for (var name in all)
|
|
10
|
+
__defProp(target, name, { get: all[name], enumerable: true });
|
|
11
|
+
};
|
|
12
|
+
var __copyProps = (to, from, except, desc) => {
|
|
13
|
+
if (from && typeof from === "object" || typeof from === "function") {
|
|
14
|
+
for (let key of __getOwnPropNames(from))
|
|
15
|
+
if (!__hasOwnProp.call(to, key) && key !== except)
|
|
16
|
+
__defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
|
|
17
|
+
}
|
|
18
|
+
return to;
|
|
19
|
+
};
|
|
20
|
+
var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
|
|
21
|
+
|
|
22
|
+
// src/jump-to-source-babel.ts
|
|
23
|
+
var jump_to_source_babel_exports = {};
|
|
24
|
+
__export(jump_to_source_babel_exports, {
|
|
25
|
+
default: () => sootsimJumpToSourceBabelPlugin,
|
|
26
|
+
sootsimJumpToSourceBabelPlugin: () => sootsimJumpToSourceBabelPlugin
|
|
27
|
+
});
|
|
28
|
+
module.exports = __toCommonJS(jump_to_source_babel_exports);
|
|
29
|
+
function normalizeSourcePath(path) {
|
|
30
|
+
const queryStart = path.indexOf("?");
|
|
31
|
+
const clean = queryStart >= 0 ? path.slice(0, queryStart) : path;
|
|
32
|
+
return clean.replace(/\\/g, "/");
|
|
33
|
+
}
|
|
34
|
+
function matchesPath(path, matcher) {
|
|
35
|
+
return typeof matcher === "string" ? path.includes(matcher) : matcher.test(path);
|
|
36
|
+
}
|
|
37
|
+
function shouldStampFile(filename, options) {
|
|
38
|
+
const normalized = normalizeSourcePath(filename);
|
|
39
|
+
if (normalized.includes("/node_modules/")) return false;
|
|
40
|
+
if (normalized.includes("/dist/") || normalized.includes("/build/")) return false;
|
|
41
|
+
if (options.exclude?.some((matcher) => matchesPath(normalized, matcher))) return false;
|
|
42
|
+
if (options.include?.length) {
|
|
43
|
+
return options.include.some((matcher) => matchesPath(normalized, matcher));
|
|
44
|
+
}
|
|
45
|
+
return true;
|
|
46
|
+
}
|
|
47
|
+
function getJSXName(node) {
|
|
48
|
+
if (!node) return null;
|
|
49
|
+
if (node.type === "JSXIdentifier" && node.name) return node.name;
|
|
50
|
+
if (node.type === "JSXMemberExpression") {
|
|
51
|
+
const object = getJSXName(node.object);
|
|
52
|
+
const property = getJSXName(node.property);
|
|
53
|
+
return object && property ? `${object}.${property}` : null;
|
|
54
|
+
}
|
|
55
|
+
return null;
|
|
56
|
+
}
|
|
57
|
+
function hasAttribute(node, attrName) {
|
|
58
|
+
return node.attributes?.some((attr) => {
|
|
59
|
+
if (attr.type !== "JSXAttribute") return false;
|
|
60
|
+
return attr.name?.type === "JSXIdentifier" && attr.name.name === attrName;
|
|
61
|
+
}) ?? false;
|
|
62
|
+
}
|
|
63
|
+
function sootsimJumpToSourceBabelPlugin(api, options = {}) {
|
|
64
|
+
const attrName = options.attrName || "srcloc";
|
|
65
|
+
return {
|
|
66
|
+
name: "sootsim-jump-to-source",
|
|
67
|
+
visitor: {
|
|
68
|
+
JSXOpeningElement(path, state) {
|
|
69
|
+
if (options.enabled === false) return;
|
|
70
|
+
const filename = state.file?.opts?.filename;
|
|
71
|
+
if (!filename || !shouldStampFile(filename, options)) return;
|
|
72
|
+
const node = path.node;
|
|
73
|
+
const tagName = getJSXName(node.name);
|
|
74
|
+
if (!tagName || tagName === "Fragment" || tagName.endsWith(".Fragment")) return;
|
|
75
|
+
if (hasAttribute(node, attrName)) return;
|
|
76
|
+
const loc = node.loc?.start;
|
|
77
|
+
if (!loc) return;
|
|
78
|
+
const source = `${normalizeSourcePath(filename)}:${loc.line}:${loc.column + 1}`;
|
|
79
|
+
node.attributes ??= [];
|
|
80
|
+
node.attributes.push(
|
|
81
|
+
api.types.jsxAttribute(
|
|
82
|
+
api.types.jsxIdentifier(attrName),
|
|
83
|
+
api.types.stringLiteral(source)
|
|
84
|
+
)
|
|
85
|
+
);
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
};
|
|
89
|
+
}
|
|
90
|
+
// Annotate the CommonJS export names for ESM import in node:
|
|
91
|
+
0 && (module.exports = {
|
|
92
|
+
sootsimJumpToSourceBabelPlugin
|
|
93
|
+
});
|
package/dist-lib/menu.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.174 | (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.174 | (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.174 | (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.174 | (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.174 | (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.174 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/sdk.mjs
CHANGED
package/dist-lib/skills.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.174 | (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.174 | (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.174",
|
|
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",
|
|
@@ -29,6 +29,10 @@
|
|
|
29
29
|
"source": "./src/metro-plugin.ts",
|
|
30
30
|
"default": "./dist-lib/metro.cjs"
|
|
31
31
|
},
|
|
32
|
+
"./jump-to-source-babel": {
|
|
33
|
+
"source": "./src/jump-to-source-babel.ts",
|
|
34
|
+
"default": "./dist-lib/jump-to-source-babel.cjs"
|
|
35
|
+
},
|
|
32
36
|
"./menu": {
|
|
33
37
|
"source": "./src/menu.ts",
|
|
34
38
|
"bun": "./src/menu.ts",
|
package/skills/soot.md
CHANGED
|
@@ -99,7 +99,7 @@ skills for working with the SootSim native preview engine:
|
|
|
99
99
|
|
|
100
100
|
| skill | description |
|
|
101
101
|
| --- | --- |
|
|
102
|
-
| `/sootsim-debug` | Debug rendering, performance, and accessibility issues in
|
|
102
|
+
| `/sootsim-debug` | Debug rendering, animation, gesture, performance, and accessibility issues in a React Native app running under sootsim. Reach for this whenever an animation looks wrong (janky, stutters, snaps, only updates once, or doesn't move at all), a swipe/transition/gesture misbehaves or feels broken, scrolling drops frames or feels slow, the UI renders the wrong tree/props, or a screen reader can't reach something — and drive the sootsim CLI debug tooling first, not screenshots or ad-hoc logging. |
|
|
103
103
|
| `/sootsim-setup` | Get sootsim connected to your React Native app — from `npm install sootsim` to a driveable sim |
|
|
104
104
|
| `/sootsim-test` | Run automated tests against your React Native app under sootsim — native YAML flows, Maestro drop-in, or Detox drop-in |
|
|
105
105
|
| `/sootsim-visual` | Pixel-level rendering comparison between sootsim and native iOS — fonts, gradients, shadows, image fidelity |
|
package/skills/sootsim-debug.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: sootsim-debug
|
|
3
|
-
description: Debug rendering, performance, and accessibility issues in
|
|
3
|
+
description: Debug rendering, animation, gesture, performance, and accessibility issues in a React Native app running under sootsim. Reach for this whenever an animation looks wrong (janky, stutters, snaps, only updates once, or doesn't move at all), a swipe/transition/gesture misbehaves or feels broken, scrolling drops frames or feels slow, the UI renders the wrong tree/props, or a screen reader can't reach something — and drive the sootsim CLI debug tooling first, not screenshots or ad-hoc logging.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# sootsim debug
|
|
@@ -15,6 +15,28 @@ load `/sootsim-visual` instead.
|
|
|
15
15
|
> needs a connected, pinned sim. if `sootsim describe` errors, load
|
|
16
16
|
> `/sootsim-setup` first.
|
|
17
17
|
|
|
18
|
+
## principle — drive the CLI, don't probe by hand
|
|
19
|
+
|
|
20
|
+
for any rendering, animation, gesture, or interaction bug, reach for the
|
|
21
|
+
sootsim CLI debug tooling **first** — `describe` and `find` to read the
|
|
22
|
+
tree, `debug snapshot` + `debug diff` to capture before/after, `debug
|
|
23
|
+
recent` on a channel and `debug perf` for frame-by-frame stats, and the
|
|
24
|
+
timeline for "what just happened". **do not** debug these by eye with
|
|
25
|
+
screenshots, sprinkle `console.log` through the render path, or spin up a
|
|
26
|
+
one-off browser-automation script. the canvas has no DOM to inspect, and a
|
|
27
|
+
CLI capture is reproducible, diffable, and shareable in a way a screenshot
|
|
28
|
+
never is.
|
|
29
|
+
|
|
30
|
+
if the existing CLI tools don't capture the issue cleanly — the animation
|
|
31
|
+
is too fast to read, the signal you need isn't on any channel, the
|
|
32
|
+
interaction spans a boundary the timeline doesn't section — the right move
|
|
33
|
+
is to **improve the debug tooling**, not to paper over it with throwaway
|
|
34
|
+
probes. add a durable, channel-gated, start/stop instrument that's off by
|
|
35
|
+
default (so baseline performance is untouched) and emits exactly the signal
|
|
36
|
+
you're chasing. a good capture command is one-shot reproducible, every
|
|
37
|
+
agent after you benefits from it, and the same capture can become a
|
|
38
|
+
regression test. a pile of ad-hoc logs helps no one and gets deleted.
|
|
39
|
+
|
|
18
40
|
## route in
|
|
19
41
|
|
|
20
42
|
- "my app renders wrong / wrong props / wrong tree" → [debugging](#branch--debugging)
|
package/src/index.ts
CHANGED
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
|
|
6
6
|
export { sootsimPlugin } from './vite-plugin-one'
|
|
7
7
|
export { default as metroPlugin } from './metro-plugin'
|
|
8
|
+
export { default as jumpToSourceBabelPlugin } from './jump-to-source-babel'
|
|
8
9
|
export { DEFAULT_SOOTSIM_BRIDGE_PORT } from './bridge-constants'
|
|
9
10
|
export { DEFAULT_SOOTSIM_SHELL_URL } from './cli-constants'
|