sootsim 0.1.240 → 0.1.241
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 +4 -4
- package/dist-cli/chunks/{agent-YS355M7O.js → agent-7Z3WG3YJ.js} +2 -2
- package/dist-cli/chunks/{agent-wrapper-DJJH2DE5.js → agent-wrapper-IMTGEJ7T.js} +2 -2
- package/dist-cli/chunks/{app-fonts-2KURCNO7.js → app-fonts-7E66PSAV.js} +2 -2
- package/dist-cli/chunks/{assert-Y7SV6LAY.js → assert-IEBAQZC7.js} +2 -2
- package/dist-cli/chunks/{auth-5VMBSD6F.js → auth-FRMHPA2X.js} +2 -2
- package/dist-cli/chunks/beta-AMMCLKHD.js +2 -0
- package/dist-cli/chunks/{camera-WCQNMZRH.js → camera-O67TQUAH.js} +2 -2
- package/dist-cli/chunks/{chunk-ZYMOUSJC.js → chunk-2DY3JHFK.js} +1 -1
- package/dist-cli/chunks/{chunk-BWR3AJZ3.js → chunk-4JSCYLLH.js} +1 -1
- package/dist-cli/chunks/{chunk-AX56F2Z5.js → chunk-4V6MFWDY.js} +1 -1
- package/dist-cli/chunks/{chunk-OBQJXFV3.js → chunk-5COOJUTE.js} +1 -1
- package/dist-cli/chunks/{chunk-SFNTUDIP.js → chunk-5ZNYFTOB.js} +2 -2
- package/dist-cli/chunks/{chunk-KY2HHVDG.js → chunk-7I3PV2RE.js} +2 -2
- package/dist-cli/chunks/{chunk-XVE2O2IR.js → chunk-AROVTS3P.js} +2 -2
- package/dist-cli/chunks/{chunk-DQEI7LOC.js → chunk-BIHEU677.js} +3 -3
- package/dist-cli/chunks/{chunk-4FUKKXDQ.js → chunk-CAOW2O5V.js} +2 -2
- package/dist-cli/chunks/{chunk-2ZEVD46I.js → chunk-CSZOZRKB.js} +3 -3
- package/dist-cli/chunks/{chunk-GW7REFUB.js → chunk-DS2KFLBO.js} +1 -1
- package/dist-cli/chunks/chunk-ECRSTV5C.js +118 -0
- package/dist-cli/chunks/{chunk-OUW757HM.js → chunk-EY3ZQWUQ.js} +52 -52
- package/dist-cli/chunks/{chunk-H6GS5C4F.js → chunk-F5YD4BLA.js} +2 -2
- package/dist-cli/chunks/{chunk-TFXCEOCW.js → chunk-FR7JCFAR.js} +1 -1
- package/dist-cli/chunks/{chunk-LBOSTYWQ.js → chunk-GFZLDVLE.js} +1 -1
- package/dist-cli/chunks/{chunk-OKHNWLZ7.js → chunk-GVTSKLLS.js} +2 -2
- package/dist-cli/chunks/{chunk-XV4VXQDA.js → chunk-H7G2QGUG.js} +2 -2
- package/dist-cli/chunks/{chunk-XSSTKHK7.js → chunk-H7SP6J3H.js} +2 -2
- package/dist-cli/chunks/{chunk-C4MSUAGM.js → chunk-HNI6U6M5.js} +1 -1
- package/dist-cli/chunks/{chunk-HIFBYPJK.js → chunk-IF5VXL45.js} +2 -2
- package/dist-cli/chunks/{chunk-5LCZXDDX.js → chunk-JMTQBHQY.js} +1 -1
- package/dist-cli/chunks/{chunk-T7BLBFPG.js → chunk-JX4N376W.js} +2 -2
- package/dist-cli/chunks/{chunk-WYT6JDAV.js → chunk-KFI26HW5.js} +1 -1
- package/dist-cli/chunks/chunk-KLXLOMI6.js +1 -0
- package/dist-cli/chunks/{chunk-DEO54ZY3.js → chunk-KN3Q6VSC.js} +2 -2
- package/dist-cli/chunks/{chunk-EJ6ULQFO.js → chunk-LVUOVKJO.js} +2 -2
- package/dist-cli/chunks/{chunk-SW5HPJC7.js → chunk-MCAJBAWD.js} +2 -2
- package/dist-cli/chunks/{chunk-JDRG4T3G.js → chunk-MGLTIS7P.js} +2 -2
- package/dist-cli/chunks/{chunk-NJYDI627.js → chunk-PR6AOTP5.js} +1 -1
- package/dist-cli/chunks/{chunk-GYWIGJB7.js → chunk-PVUUG5YW.js} +2 -2
- package/dist-cli/chunks/{chunk-6XHVSTMH.js → chunk-R3EZVIEM.js} +2 -2
- package/dist-cli/chunks/{chunk-4F63QBYN.js → chunk-U7XJNNGI.js} +3 -3
- package/dist-cli/chunks/{chunk-VU5WTUZJ.js → chunk-UF333CGY.js} +2 -2
- package/dist-cli/chunks/{chunk-3ULI43M6.js → chunk-VVUANJFA.js} +72 -23
- package/dist-cli/chunks/{chunk-2QILUPQJ.js → chunk-WFB3ICCN.js} +1 -1
- package/dist-cli/chunks/{chunk-M3VY5LEN.js → chunk-WIHKSZM4.js} +1 -1
- package/dist-cli/chunks/{chunk-KENWUOKC.js → chunk-WPWLJFKF.js} +2 -2
- package/dist-cli/chunks/{chunk-M2MJXMTO.js → chunk-YLWUYESW.js} +1 -1
- package/dist-cli/chunks/{chunk-7ZTOWAQF.js → chunk-YX7S6N42.js} +2 -2
- package/dist-cli/chunks/{chunk-M2OTE66X.js → chunk-Z72IF5FC.js} +2 -2
- package/dist-cli/chunks/chunk-ZGSGMGE3.js +1 -0
- package/dist-cli/chunks/{chunk-ILU6JNUJ.js → chunk-ZUZLQ4ZJ.js} +1 -1
- package/dist-cli/chunks/{chunk-GI36DI2I.js → chunk-ZYJCVJFP.js} +1 -1
- package/dist-cli/chunks/cli-version-DIYZFJMN.js +2 -0
- package/dist-cli/chunks/{compat-LUERFKMW.js → compat-ZRUVBIK7.js} +3 -3
- package/dist-cli/chunks/{config-U4Z6TYT6.js → config-VKQDFC5Z.js} +2 -2
- package/dist-cli/chunks/{control-I5YB63IZ.js → control-OYK2J4JW.js} +2 -2
- package/dist-cli/chunks/daemon-YQLY7PVM.js +2 -0
- package/dist-cli/chunks/{debug-HXECWDLV.js → debug-3WEO7ZRW.js} +3 -3
- package/dist-cli/chunks/{desktop-NZJLDJIO.js → desktop-DVOFHJKU.js} +3 -3
- package/dist-cli/chunks/{detox-LUOT4TIA.js → detox-GAGC276D.js} +2 -2
- package/dist-cli/chunks/{device-7TZ7BD36.js → device-256KFP2G.js} +2 -2
- package/dist-cli/chunks/{diagnose-DW2ANEGF.js → diagnose-GYKUU3N5.js} +2 -2
- package/dist-cli/chunks/drivers-FHWFHVQF.js +2 -0
- package/dist-cli/chunks/{film-6MYMKZ3N.js → film-WAV3WPQK.js} +3 -3
- package/dist-cli/chunks/flow-WKPPIDM6.js +2 -0
- package/dist-cli/chunks/help-P4A7NNSC.js +2 -0
- package/dist-cli/chunks/{hidden-runtime-alias-FUDVEMFB.js → hidden-runtime-alias-DODMMNOJ.js} +2 -2
- package/dist-cli/chunks/{home-paths-KU4MY22X.js → home-paths-QU5UX3MT.js} +2 -2
- package/dist-cli/chunks/inspect-NIHY67NU.js +2 -0
- package/dist-cli/chunks/install-desktop-NA53KD6G.js +2 -0
- package/dist-cli/chunks/{login-EVS4SZQN.js → login-OURQ3DVM.js} +4 -4
- package/dist-cli/chunks/{logout-K5MLSAWM.js → logout-ZYVJAPBO.js} +2 -2
- package/dist-cli/chunks/{maestro-OEDT2T7V.js → maestro-H2NGXNF4.js} +3 -3
- package/dist-cli/chunks/{maestro-generate-T4RZSVSM.js → maestro-generate-DA2IZPK2.js} +3 -3
- package/dist-cli/chunks/{mode-TZU7JML2.js → mode-QTK3ERUW.js} +2 -2
- package/dist-cli/chunks/optional-demo-registry-ZLN23OYV.js +2 -0
- package/dist-cli/chunks/{perf-YNBU57WH.js → perf-WZ4OPYXV.js} +2 -2
- package/dist-cli/chunks/{record-V6T2INPF.js → record-ZQSUHQJU.js} +3 -3
- package/dist-cli/chunks/runtime-RM67M6H3.js +2 -0
- package/dist-cli/chunks/{screenshot-command-CZZ6IXSD.js → screenshot-command-UDJ6TEAM.js} +3 -3
- package/dist-cli/chunks/{screenshots-capture-WVR5FCHX.js → screenshots-capture-4FK4NYXG.js} +2 -2
- package/dist-cli/chunks/{serve-6I35UUFI.js → serve-MCT4HKR7.js} +2 -2
- package/dist-cli/chunks/{setup-O7GD6GME.js → setup-I2IELNJN.js} +3 -3
- package/dist-cli/chunks/{skills-GBTBS2OK.js → skills-PVXI7LM6.js} +2 -2
- package/dist-cli/chunks/{storage-FI2YOPQE.js → storage-KZFCVRGD.js} +2 -2
- package/dist-cli/chunks/store-CEMC5MTK.js +2 -0
- package/dist-cli/chunks/telemetry-LFIQWPZD.js +2 -0
- package/dist-cli/chunks/{timeline-E5DVVATK.js → timeline-YAULXFEC.js} +2 -2
- package/dist-cli/chunks/{upgrade-QKOI3Q4U.js → upgrade-63TVREBM.js} +2 -2
- package/dist-cli/chunks/upload-APW46WK3.js +2 -0
- package/dist-cli/chunks/{version-UANAPNZM.js → version-JWWEGZS7.js} +2 -2
- package/dist-cli/chunks/{web-4LZ7DUUS.js → web-XO724HJL.js} +2 -2
- package/dist-cli/chunks/{what-happened-JOLNICMX.js → what-happened-DQ4MXAPJ.js} +2 -2
- package/dist-lib/agent-daemon-client.cjs +1 -1
- package/dist-lib/agent-events.cjs +1 -1
- package/dist-lib/agent-identity.cjs +1 -1
- package/dist-lib/agent-sessions.cjs +1 -1
- package/dist-lib/attached-projects.cjs +1 -1
- package/dist-lib/auth/shared-session.cjs +1 -1
- package/dist-lib/backend-origin.cjs +1 -1
- package/dist-lib/beta.cjs +1 -1
- package/dist-lib/beta.mjs +1 -1
- package/dist-lib/bridge-constants.cjs +1 -1
- package/dist-lib/cli-constants.cjs +1 -1
- package/dist-lib/config.cjs +1 -1
- package/dist-lib/detox/index.cjs +1 -1
- package/dist-lib/dev-bundle-resolution.cjs +1 -1
- package/dist-lib/home-paths.cjs +1 -1
- package/dist-lib/host/bridge-host.cjs +1 -1
- package/dist-lib/host/fetch-proxy-handler.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.cjs +1 -1
- package/dist-lib/host/fetch-proxy-overrides.mjs +1 -1
- package/dist-lib/host/websocket-proxy.cjs +1 -1
- package/dist-lib/index.cjs +1 -1
- package/dist-lib/jump-to-source-babel.cjs +1 -1
- package/dist-lib/menu.cjs +1 -1
- package/dist-lib/menu.mjs +1 -1
- package/dist-lib/metro.cjs +1 -1
- package/dist-lib/profiles.cjs +1 -1
- package/dist-lib/render-mode.cjs +1 -1
- package/dist-lib/scripts/dev-server-scanner.cjs +1 -1
- package/dist-lib/sdk.cjs +157 -5
- package/dist-lib/sdk.mjs +156 -5
- package/dist-lib/skills.cjs +144 -4
- package/dist-lib/vite.cjs +1 -1
- package/package.json +1 -1
- package/skills/contrast/SKILL.md +1 -1
- package/skills/sootsim-debug/SKILL.md +21 -12
- package/dist-cli/chunks/beta-KMI4GCCN.js +0 -2
- package/dist-cli/chunks/chunk-3RYTIG4Y.js +0 -118
- package/dist-cli/chunks/chunk-R54EGANH.js +0 -1
- package/dist-cli/chunks/chunk-U3VMQUN6.js +0 -1
- package/dist-cli/chunks/cli-version-2BXTYTLJ.js +0 -2
- package/dist-cli/chunks/daemon-VTG3XKWA.js +0 -2
- package/dist-cli/chunks/drivers-RDXY5SDO.js +0 -2
- package/dist-cli/chunks/flow-KS77CBEA.js +0 -2
- package/dist-cli/chunks/help-H3ZD3LVG.js +0 -2
- package/dist-cli/chunks/inspect-ACDDO276.js +0 -2
- package/dist-cli/chunks/install-desktop-UQVXJAXS.js +0 -2
- package/dist-cli/chunks/optional-demo-registry-NIJ3MA5N.js +0 -2
- package/dist-cli/chunks/runtime-7XBSKGNO.js +0 -2
- package/dist-cli/chunks/store-FU7T5NPV.js +0 -2
- package/dist-cli/chunks/telemetry-REPVX6LA.js +0 -2
- package/dist-cli/chunks/upload-IFQM3FG4.js +0 -2
|
@@ -1,5 +1,5 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
2
|
-
import{C as N,D as F,F as y,Q as T,R as b,S}from"./chunk-
|
|
1
|
+
/*! sootsim v0.1.241 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
|
+
import{C as N,D as F,F as y,Q as T,R as b,S}from"./chunk-VVUANJFA.js";import{g as A,i as _}from"./chunk-F5YD4BLA.js";import"./chunk-4V6MFWDY.js";import{c as k}from"./chunk-PR6AOTP5.js";import"./chunk-KFI26HW5.js";import"./chunk-5COOJUTE.js";function O(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--since"&&e+1<n.length){t.push(e,e+1);let s=n[e+1].trim(),l=/^(\d+(?:\.\d+)?)(ms|s|m)?$/.exec(s);if(l){let r=Number(l[1]),u=l[2]??"ms",v=u==="s"?r*1e3:u==="m"?r*6e4:r;return{since:Date.now()-v,consumed:t}}let i=Number(s);if(Number.isFinite(i)&&i>1e12)return{since:i,consumed:t}}return{consumed:t}}function B(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--kinds"&&e+1<n.length)return t.push(e,e+1),{kinds:n[e+1].split(",").map(s=>s.trim()).filter(Boolean),consumed:t};return{consumed:t}}function D(n){let t=[];for(let e=0;e<n.length;e++)if(n[e]==="--limit"&&e+1<n.length){t.push(e,e+1);let s=Number(n[e+1]);if(Number.isFinite(s)&&s>0)return{limit:s,consumed:t}}return{consumed:t}}function x(n){let t=[],e={label:"initial state",events:[],startedAt:n[0]?.t??null};t.push(e);for(let s of n)if(e.events.push(s),s.kind==="screen"||s.kind==="route"){let l=s.data,i=l?.phase;if(!i||i==="enter"||i==="appear"||i==="active"){let r=l?.name||l?.activeName||l?.path||l?.pathname||s.kind;t.length===1&&e.events.length===1?e.label=`${s.kind}: ${r}`:(e={label:`${s.kind}: ${r}`,events:[],startedAt:s.t},t.push(e))}}return t}async function J(n,t){let e=A(n,{port:t.port,stripBooleanFlags:["--summary","--all","--json","--no-advance","--help","-h","--flow","--noisy"],stripValueFlags:["--since","--kinds","--limit"]});(n.includes("--help")||n.includes("-h"))&&(console.log(`
|
|
3
3
|
sootsim what-happened \u2014 show recent events from the semantic timeline
|
|
4
4
|
|
|
5
5
|
usage:
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (c) 2026 Tamagui LLC | Proprietary — see LICENSE */
|
|
2
2
|
let __sootsim_import_meta_url = ''; try { __sootsim_import_meta_url = require('url').pathToFileURL(__filename).href; } catch {}
|
|
3
3
|
"use strict";
|
|
4
4
|
var __defProp = Object.defineProperty;
|
package/dist-lib/menu.cjs
CHANGED
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
/*! sootsim v0.1.
|
|
1
|
+
/*! sootsim v0.1.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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.241 | (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;
|
|
@@ -76,6 +76,7 @@ __export(sdk_exports, {
|
|
|
76
76
|
resolveFindMode: () => resolveFindMode,
|
|
77
77
|
resolveMaxMsFlag: () => resolveMaxMsFlag,
|
|
78
78
|
scoreInteractive: () => scoreInteractive,
|
|
79
|
+
scoreLayoutTextContrast: () => scoreLayoutTextContrast,
|
|
79
80
|
setDebugChannels: () => setDebugChannels,
|
|
80
81
|
shouldSkipAutoSettleForInspectPick: () => shouldSkipAutoSettleForInspectPick,
|
|
81
82
|
tapBest: () => tapBest,
|
|
@@ -236,6 +237,101 @@ async function inspectDescribe(bridge, dumpOpts) {
|
|
|
236
237
|
const result = await bridge.send({ type: "evaluate", code });
|
|
237
238
|
return result ?? {};
|
|
238
239
|
}
|
|
240
|
+
function scoreLayoutTextContrast(input) {
|
|
241
|
+
const required = input.fontSize >= 18 || input.fontSize >= 14 && (input.fontWeight ?? 400) >= 700 ? 3 : 4.5;
|
|
242
|
+
const { normal, background } = input;
|
|
243
|
+
if (normal.width <= 0 || normal.height <= 0 || normal.width !== background.width || normal.height !== background.height) {
|
|
244
|
+
return { ratio: null, required, reason: "capture dimensions do not match" };
|
|
245
|
+
}
|
|
246
|
+
const left = Math.max(0, Math.floor(input.box.x));
|
|
247
|
+
const top = Math.max(0, Math.floor(input.box.y));
|
|
248
|
+
const right = Math.min(normal.width, Math.ceil(input.box.x + input.box.w));
|
|
249
|
+
const bottom = Math.min(normal.height, Math.ceil(input.box.y + input.box.h));
|
|
250
|
+
if (right <= left || bottom <= top) {
|
|
251
|
+
return { ratio: null, required, reason: "text is outside the captured frame" };
|
|
252
|
+
}
|
|
253
|
+
const linear = (value) => {
|
|
254
|
+
const channel = value / 255;
|
|
255
|
+
return channel <= 0.04045 ? channel / 12.92 : Math.pow((channel + 0.055) / 1.055, 2.4);
|
|
256
|
+
};
|
|
257
|
+
const ratioOf = (foreground, behind) => {
|
|
258
|
+
const foregroundLuminance = 0.2126 * linear(foreground[0]) + 0.7152 * linear(foreground[1]) + 0.0722 * linear(foreground[2]);
|
|
259
|
+
const backgroundLuminance = 0.2126 * linear(behind[0]) + 0.7152 * linear(behind[1]) + 0.0722 * linear(behind[2]);
|
|
260
|
+
return (Math.max(foregroundLuminance, backgroundLuminance) + 0.05) / (Math.min(foregroundLuminance, backgroundLuminance) + 0.05);
|
|
261
|
+
};
|
|
262
|
+
const hex = (color) => `#${color.slice(0, 3).map((value) => Math.round(value).toString(16).padStart(2, "0")).join("")}`;
|
|
263
|
+
const area = (right - left) * (bottom - top);
|
|
264
|
+
const step = Math.max(1, Math.floor(Math.sqrt(area / 12e3)));
|
|
265
|
+
const offsetAt = (x, y) => (y * normal.width + x) * 4;
|
|
266
|
+
const deltaAt = (offset) => Math.max(
|
|
267
|
+
Math.abs(normal.data[offset] - background.data[offset]),
|
|
268
|
+
Math.abs(normal.data[offset + 1] - background.data[offset + 1]),
|
|
269
|
+
Math.abs(normal.data[offset + 2] - background.data[offset + 2])
|
|
270
|
+
);
|
|
271
|
+
let strongestDelta = 0;
|
|
272
|
+
let strongestForeground = null;
|
|
273
|
+
let opaqueBackground = null;
|
|
274
|
+
for (let y = top; y < bottom; y += step) {
|
|
275
|
+
for (let x = left; x < right; x += step) {
|
|
276
|
+
const offset = offsetAt(x, y);
|
|
277
|
+
if (background.data[offset + 3] < 250) continue;
|
|
278
|
+
const behind = [
|
|
279
|
+
background.data[offset],
|
|
280
|
+
background.data[offset + 1],
|
|
281
|
+
background.data[offset + 2]
|
|
282
|
+
];
|
|
283
|
+
opaqueBackground ??= behind;
|
|
284
|
+
const delta = deltaAt(offset);
|
|
285
|
+
if (delta <= strongestDelta) continue;
|
|
286
|
+
strongestDelta = delta;
|
|
287
|
+
strongestForeground = [
|
|
288
|
+
normal.data[offset],
|
|
289
|
+
normal.data[offset + 1],
|
|
290
|
+
normal.data[offset + 2]
|
|
291
|
+
];
|
|
292
|
+
}
|
|
293
|
+
}
|
|
294
|
+
let bestRatio = Infinity;
|
|
295
|
+
let bestForeground = null;
|
|
296
|
+
let bestBackground = null;
|
|
297
|
+
const consider = (foreground, behind) => {
|
|
298
|
+
const ratio = ratioOf(foreground, behind);
|
|
299
|
+
if (ratio >= bestRatio) return;
|
|
300
|
+
bestRatio = ratio;
|
|
301
|
+
bestForeground = foreground;
|
|
302
|
+
bestBackground = behind;
|
|
303
|
+
};
|
|
304
|
+
if (strongestDelta >= 2 && strongestForeground) {
|
|
305
|
+
for (let y = top; y < bottom; y += step) {
|
|
306
|
+
for (let x = left; x < right; x += step) {
|
|
307
|
+
const offset = offsetAt(x, y);
|
|
308
|
+
if (background.data[offset + 3] < 250 || deltaAt(offset) < 2) {
|
|
309
|
+
continue;
|
|
310
|
+
}
|
|
311
|
+
consider(strongestForeground, [
|
|
312
|
+
background.data[offset],
|
|
313
|
+
background.data[offset + 1],
|
|
314
|
+
background.data[offset + 2]
|
|
315
|
+
]);
|
|
316
|
+
}
|
|
317
|
+
}
|
|
318
|
+
} else if (opaqueBackground) {
|
|
319
|
+
consider(opaqueBackground, opaqueBackground);
|
|
320
|
+
}
|
|
321
|
+
if (!bestForeground || !bestBackground || !Number.isFinite(bestRatio)) {
|
|
322
|
+
return {
|
|
323
|
+
ratio: null,
|
|
324
|
+
required,
|
|
325
|
+
reason: "could not isolate opaque rendered text pixels"
|
|
326
|
+
};
|
|
327
|
+
}
|
|
328
|
+
return {
|
|
329
|
+
ratio: Math.round(bestRatio * 100) / 100,
|
|
330
|
+
required,
|
|
331
|
+
foreground: hex(bestForeground),
|
|
332
|
+
background: hex(bestBackground)
|
|
333
|
+
};
|
|
334
|
+
}
|
|
239
335
|
function layoutGetNativeEval(opts = {}) {
|
|
240
336
|
const includeStyle = opts.styling === true;
|
|
241
337
|
const filter = opts.filter?.trim().toLowerCase() ?? "";
|
|
@@ -245,6 +341,7 @@ function layoutGetNativeEval(opts = {}) {
|
|
|
245
341
|
const list = await t.listInspectable({})
|
|
246
342
|
if (!Array.isArray(list)) return []
|
|
247
343
|
const includeStyle = ${JSON.stringify(includeStyle)}
|
|
344
|
+
const scoreContrast = ${scoreLayoutTextContrast.toString()}
|
|
248
345
|
// narrows by ELEMENT, not by style field: fewer rows, full detail on each.
|
|
249
346
|
const filter = ${JSON.stringify(filter)}
|
|
250
347
|
const matchesFilter = (n, text) => {
|
|
@@ -289,7 +386,7 @@ function layoutGetNativeEval(opts = {}) {
|
|
|
289
386
|
}
|
|
290
387
|
const weightOf = (style) => {
|
|
291
388
|
const w = style && style.fontWeight
|
|
292
|
-
const n = typeof w === 'number' ? w : (typeof w === 'string' ? parseInt(w, 10) : NaN)
|
|
389
|
+
const n = w === 'bold' ? 700 : (typeof w === 'number' ? w : (typeof w === 'string' ? parseInt(w, 10) : NaN))
|
|
293
390
|
return Number.isFinite(n) && n >= 600 ? n : undefined
|
|
294
391
|
}
|
|
295
392
|
const decoOf = (style) => {
|
|
@@ -332,7 +429,7 @@ function layoutGetNativeEval(opts = {}) {
|
|
|
332
429
|
return abs.x + layout.width > 0 && abs.y + layout.height > 0 && abs.x < screenW && abs.y < screenH
|
|
333
430
|
}
|
|
334
431
|
|
|
335
|
-
|
|
432
|
+
const elements = list.filter(isVisible).filter((n) => {
|
|
336
433
|
const t = typeof n.text === 'string' && n.text.trim() ? n.text.trim() : undefined
|
|
337
434
|
return matchesFilter(n, t)
|
|
338
435
|
}).map((n) => {
|
|
@@ -367,7 +464,7 @@ function layoutGetNativeEval(opts = {}) {
|
|
|
367
464
|
...base,
|
|
368
465
|
borderRadius: radiusOf(style),
|
|
369
466
|
padding: { t: round(pad.top), r: round(pad.right), b: round(pad.bottom), l: round(pad.left) },
|
|
370
|
-
fontSize: fontSizeOf(style),
|
|
467
|
+
fontSize: text ? (fontSizeOf(style) || 14) : 0,
|
|
371
468
|
color: text ? colorStr(style.color) : undefined,
|
|
372
469
|
bg: colorStr(style.backgroundColor),
|
|
373
470
|
opacity: opacityOf(style),
|
|
@@ -378,6 +475,50 @@ function layoutGetNativeEval(opts = {}) {
|
|
|
378
475
|
borderColor: borderWidth ? borderColorOf(style) : undefined,
|
|
379
476
|
}
|
|
380
477
|
})
|
|
478
|
+
const textElements = elements.filter((element) => element.text && element.fontSize > 0)
|
|
479
|
+
if (!includeStyle || textElements.length === 0) return elements
|
|
480
|
+
|
|
481
|
+
const screenshot = window.SootSim && window.SootSim.bridges && window.SootSim.bridges.screenshot
|
|
482
|
+
if (typeof screenshot !== 'function') {
|
|
483
|
+
throw new Error('styled native layout requires the SootSim capture bridge')
|
|
484
|
+
}
|
|
485
|
+
const device = list.find((node) => node && node.device)?.device || {}
|
|
486
|
+
const width = Math.round(Number(device.width) || window.innerWidth || 0)
|
|
487
|
+
const height = Math.round(Number(device.height) || window.innerHeight || 0)
|
|
488
|
+
if (!width || !height) throw new Error('native layout has no capture dimensions')
|
|
489
|
+
const capture = async (suppressText) => {
|
|
490
|
+
const dataUrl = await screenshot({
|
|
491
|
+
format: 'png',
|
|
492
|
+
outputWidth: width,
|
|
493
|
+
outputHeight: height,
|
|
494
|
+
...(suppressText ? { suppressText: true } : {}),
|
|
495
|
+
})
|
|
496
|
+
const image = await new Promise((resolve, reject) => {
|
|
497
|
+
const next = new Image()
|
|
498
|
+
next.onload = () => resolve(next)
|
|
499
|
+
next.onerror = () => reject(new Error('could not decode native layout pixels'))
|
|
500
|
+
next.src = dataUrl
|
|
501
|
+
})
|
|
502
|
+
const canvas = document.createElement('canvas')
|
|
503
|
+
canvas.width = image.naturalWidth
|
|
504
|
+
canvas.height = image.naturalHeight
|
|
505
|
+
const context = canvas.getContext('2d', { willReadFrequently: true })
|
|
506
|
+
if (!context) throw new Error('could not read native layout pixels')
|
|
507
|
+
context.drawImage(image, 0, 0)
|
|
508
|
+
return context.getImageData(0, 0, canvas.width, canvas.height)
|
|
509
|
+
}
|
|
510
|
+
const normal = await capture(false)
|
|
511
|
+
const background = await capture(true)
|
|
512
|
+
for (const element of textElements) {
|
|
513
|
+
element.contrast = scoreContrast({
|
|
514
|
+
normal,
|
|
515
|
+
background,
|
|
516
|
+
box: element.box,
|
|
517
|
+
fontSize: element.fontSize,
|
|
518
|
+
fontWeight: element.fontWeight,
|
|
519
|
+
})
|
|
520
|
+
}
|
|
521
|
+
return elements
|
|
381
522
|
})()`;
|
|
382
523
|
}
|
|
383
524
|
var LAYOUT_GET_NATIVE_EVAL = layoutGetNativeEval();
|
|
@@ -404,6 +545,11 @@ function formatLayoutElements(elements, opts) {
|
|
|
404
545
|
if (el.fontWeight) parts.push(`weight:${el.fontWeight}`);
|
|
405
546
|
if (el.color) parts.push(`color:${el.color}`);
|
|
406
547
|
if (el.bg) parts.push(`bg:${el.bg}`);
|
|
548
|
+
if (el.contrast) {
|
|
549
|
+
const score = el.contrast.ratio == null ? `?/${el.contrast.required}` : `${el.contrast.ratio}/${el.contrast.required}${el.contrast.ratio < el.contrast.required ? " FAIL" : ""}`;
|
|
550
|
+
parts.push(`contrast:${score}`);
|
|
551
|
+
if (el.contrast.background) parts.push(`on:${el.contrast.background}`);
|
|
552
|
+
}
|
|
407
553
|
if (el.opacity != null) parts.push(`opacity:${el.opacity}`);
|
|
408
554
|
if (el.textDecoration) parts.push(`deco:${el.textDecoration}`);
|
|
409
555
|
if (el.overflow) parts.push(`overflow:${el.overflow}`);
|
|
@@ -1204,6 +1350,10 @@ async function inspectScreens(bridge) {
|
|
|
1204
1350
|
test && typeof test.getNavigationSnapshot === 'function'
|
|
1205
1351
|
? await test.getNavigationSnapshot()
|
|
1206
1352
|
: null
|
|
1353
|
+
const route =
|
|
1354
|
+
test && typeof test.getRouteInfo === 'function'
|
|
1355
|
+
? await test.getRouteInfo()
|
|
1356
|
+
: null
|
|
1207
1357
|
const keyboard =
|
|
1208
1358
|
kb && typeof kb.getLayout === 'function'
|
|
1209
1359
|
? (() => {
|
|
@@ -1220,13 +1370,14 @@ async function inspectScreens(bridge) {
|
|
|
1220
1370
|
} : null
|
|
1221
1371
|
})()
|
|
1222
1372
|
: null
|
|
1223
|
-
return { nav: navSnap, keyboard }
|
|
1373
|
+
return { nav: navSnap, route, keyboard }
|
|
1224
1374
|
})()`
|
|
1225
1375
|
});
|
|
1226
1376
|
const shell = await getShellState(bridge, 500).catch(() => null);
|
|
1227
1377
|
return {
|
|
1228
1378
|
shell,
|
|
1229
1379
|
nav: payload?.nav ?? null,
|
|
1380
|
+
route: payload?.route ?? null,
|
|
1230
1381
|
keyboard: payload?.keyboard ?? null
|
|
1231
1382
|
};
|
|
1232
1383
|
}
|
|
@@ -2084,6 +2235,7 @@ async function tapBest(bridge, query, opts = {}) {
|
|
|
2084
2235
|
resolveFindMode,
|
|
2085
2236
|
resolveMaxMsFlag,
|
|
2086
2237
|
scoreInteractive,
|
|
2238
|
+
scoreLayoutTextContrast,
|
|
2087
2239
|
setDebugChannels,
|
|
2088
2240
|
shouldSkipAutoSettleForInspectPick,
|
|
2089
2241
|
tapBest,
|