@kaeawc/auto-mobile 0.0.91 → 0.0.93
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/build-info.json +12 -12
- package/dist/schemas/README.md +16 -0
- package/dist/schemas/prototype-icon-names.json +302 -0
- package/dist/schemas/test-plan.schema.json +370 -52
- package/dist/src/chunk-00167wan.js +55 -0
- package/dist/src/chunk-0jrrsnc9.js +6 -0
- package/dist/src/chunk-0n6swkwg.js +5 -0
- package/dist/src/chunk-0qsy1qsx.js +57 -0
- package/dist/src/chunk-11m8wj8j.js +237 -0
- package/dist/src/chunk-1p7xf5kb.js +5 -0
- package/dist/src/chunk-23p5f095.js +4 -0
- package/dist/src/chunk-26k317v5.js +5 -0
- package/dist/src/chunk-284ptqa4.js +7 -0
- package/dist/src/chunk-28re4xrg.js +4 -0
- package/dist/src/chunk-2f9rkmhx.js +5 -0
- package/dist/src/chunk-2fxdh48t.js +4 -0
- package/dist/src/chunk-2tbdrbt6.js +4 -0
- package/dist/src/chunk-2tqzq5qh.js +971 -0
- package/dist/src/chunk-32gvv9b4.js +21 -0
- package/dist/src/chunk-3f3t1x97.js +8 -0
- package/dist/src/chunk-3fspkbc7.js +4 -0
- package/dist/src/chunk-3qwrzxh0.js +11 -0
- package/dist/src/chunk-3sy6ahhz.js +26 -0
- package/dist/src/chunk-3vg455e6.js +4 -0
- package/dist/src/chunk-3xkpk44w.js +5 -0
- package/dist/src/chunk-3y6eykz9.js +4 -0
- package/dist/src/chunk-49bsqdx3.js +4 -0
- package/dist/src/chunk-4hw3665t.js +42 -0
- package/dist/src/chunk-58wzr3mt.js +5 -0
- package/dist/src/chunk-5d2hft6c.js +5 -0
- package/dist/src/chunk-5s645vr4.js +4 -0
- package/dist/src/chunk-5snsn9cf.js +4 -0
- package/dist/src/chunk-5tm9mn47.js +54 -0
- package/dist/src/chunk-5zc77a5t.js +4 -0
- package/dist/src/chunk-64j0majr.js +19 -0
- package/dist/src/chunk-65y8v4td.js +17 -0
- package/dist/src/chunk-6awz7vhq.js +5 -0
- package/dist/src/chunk-6bznss4t.js +8 -0
- package/dist/src/chunk-6ep7f5ge.js +4 -0
- package/dist/src/chunk-6pg7bqck.js +4 -0
- package/dist/src/chunk-6wt9rgjf.js +5 -0
- package/dist/src/chunk-6xmss8er.js +8 -0
- package/dist/src/chunk-710rxz9y.js +5 -0
- package/dist/src/chunk-7cs2da62.js +5 -0
- package/dist/src/chunk-7g103b54.js +4 -0
- package/dist/src/chunk-7j5vj4pa.js +4 -0
- package/dist/src/chunk-7rz9898k.js +5 -0
- package/dist/src/chunk-7tw8x05v.js +4 -0
- package/dist/src/chunk-7zy586cb.js +4 -0
- package/dist/src/chunk-8037tzzj.js +5 -0
- package/dist/src/chunk-84nanf8s.js +5 -0
- package/dist/src/chunk-8g1922rp.js +10 -0
- package/dist/src/chunk-8gvwcv2p.js +4 -0
- package/dist/src/chunk-8ph29g99.js +4 -0
- package/dist/src/chunk-8thrmfat.js +4 -0
- package/dist/src/chunk-8zgzzs7k.js +78 -0
- package/dist/src/chunk-97b1zmaq.js +4 -0
- package/dist/src/chunk-9fth9ayh.js +4 -0
- package/dist/src/chunk-9j6anhjr.js +4 -0
- package/dist/src/chunk-aabchzxk.js +9 -0
- package/dist/src/chunk-ayp07wbb.js +4 -0
- package/dist/src/chunk-bfjwqk8q.js +4 -0
- package/dist/src/chunk-bfw6125s.js +5 -0
- package/dist/src/chunk-bnhscm2n.js +4 -0
- package/dist/src/chunk-bxmsax22.js +5 -0
- package/dist/src/chunk-c1vs4g1n.js +4 -0
- package/dist/src/chunk-ct3e7yng.js +4 -0
- package/dist/src/chunk-cyy71ggq.js +5 -0
- package/dist/src/chunk-ddzkz92z.js +4 -0
- package/dist/src/chunk-dgrbdpb7.js +9 -0
- package/dist/src/chunk-drdz8hee.js +5 -0
- package/dist/src/chunk-e98dqnc9.js +145 -0
- package/dist/src/chunk-eersndy7.js +5 -0
- package/dist/src/chunk-eggq53ks.js +4 -0
- package/dist/src/chunk-f2dya7cs.js +4 -0
- package/dist/src/chunk-fbakd6cw.js +4 -0
- package/dist/src/chunk-fgb98zjj.js +5 -0
- package/dist/src/chunk-fmpad823.js +5 -0
- package/dist/src/chunk-g04bwyj3.js +4 -0
- package/dist/src/chunk-g0xr8zw0.js +4 -0
- package/dist/src/chunk-g3rjs80x.js +4 -0
- package/dist/src/chunk-g78rtrfv.js +4 -0
- package/dist/src/chunk-g7tmjbkt.js +5 -0
- package/dist/src/chunk-gabgv3y5.js +4 -0
- package/dist/src/chunk-gmr45m8f.js +4 -0
- package/dist/src/chunk-gsyfebqj.js +4 -0
- package/dist/src/chunk-h5rpn9wr.js +247 -0
- package/dist/src/chunk-hb1x7v55.js +4 -0
- package/dist/src/chunk-hrfytkxh.js +168 -0
- package/dist/src/chunk-j4yjzbak.js +4 -0
- package/dist/src/chunk-jd6a5v6p.js +5 -0
- package/dist/src/chunk-jh6vhqzx.js +5 -0
- package/dist/src/chunk-kn5spq15.js +4 -0
- package/dist/src/chunk-m94qs0f0.js +4 -0
- package/dist/src/chunk-mjrps0ac.js +7 -0
- package/dist/src/chunk-n03dmn5q.js +5 -0
- package/dist/src/chunk-n72qhwd9.js +4 -0
- package/dist/src/chunk-ndt1ccxm.js +71 -0
- package/dist/src/chunk-nr6y0n4y.js +5 -0
- package/dist/src/chunk-pcsen2vs.js +4 -0
- package/dist/src/chunk-ppfr0b8h.js +4 -0
- package/dist/src/chunk-q10bdnat.js +4 -0
- package/dist/src/chunk-q9xmq595.js +4 -0
- package/dist/src/chunk-qcxzr2my.js +5 -0
- package/dist/src/chunk-qf6nynk6.js +7 -0
- package/dist/src/chunk-qyqypn28.js +5 -0
- package/dist/src/chunk-r2epb56s.js +4 -0
- package/dist/src/chunk-r5bxavdx.js +311 -0
- package/dist/src/chunk-r6z1eztj.js +18 -0
- package/dist/src/chunk-r7bpkgff.js +4 -0
- package/dist/src/chunk-r8jf3d92.js +4 -0
- package/dist/src/chunk-rbpdk7m0.js +5 -0
- package/dist/src/chunk-rc0dbypm.js +4 -0
- package/dist/src/chunk-rhcty4ms.js +4 -0
- package/dist/src/chunk-rpvckv3p.js +4 -0
- package/dist/src/chunk-rqc9ap3x.js +4 -0
- package/dist/src/chunk-rvvy1bte.js +7 -0
- package/dist/src/chunk-ry0mz41y.js +4 -0
- package/dist/src/chunk-s3jc6cwp.js +5 -0
- package/dist/src/chunk-sfv61xjb.js +6 -0
- package/dist/src/chunk-t6bfvfkg.js +4 -0
- package/dist/src/chunk-t6c8akcm.js +5 -0
- package/dist/src/chunk-t7w8rctc.js +4 -0
- package/dist/src/chunk-thbh3jew.js +5 -0
- package/dist/src/chunk-v2wd4n3e.js +5 -0
- package/dist/src/chunk-v6pya0dm.js +5 -0
- package/dist/src/chunk-vy3bwm1d.js +17 -0
- package/dist/src/chunk-w3vs79ex.js +27 -0
- package/dist/src/chunk-w4zga19f.js +4 -0
- package/dist/src/chunk-w5b2jwk3.js +14 -0
- package/dist/src/chunk-w7hkv422.js +5 -0
- package/dist/src/chunk-waqwcjyn.js +4 -0
- package/dist/src/chunk-wbh8spm5.js +20 -0
- package/dist/src/chunk-wyrkw6hw.js +5 -0
- package/dist/src/chunk-xa73x2cx.js +5 -0
- package/dist/src/chunk-xgan0qqp.js +4 -0
- package/dist/src/chunk-y2vs6jwg.js +4 -0
- package/dist/src/chunk-yattm52s.js +4 -0
- package/dist/src/chunk-yb97j25b.js +6 -0
- package/dist/src/chunk-ybbtagbt.js +5 -0
- package/dist/src/chunk-ycaj2sgf.js +9 -0
- package/dist/src/chunk-yf7ympyz.js +325 -0
- package/dist/src/chunk-yjawdzk8.js +4 -0
- package/dist/src/chunk-z637nqg8.js +11 -0
- package/dist/src/chunk-zgja5f3p.js +6 -0
- package/dist/src/chunk-zs1sghs9.js +4 -0
- package/dist/src/daemon/processEntry.js +4 -0
- package/dist/src/index.js +4 -2843
- package/dist/src/runtime/bunRuntimeGuard.js +4 -0
- package/dist/src/utils/workers/iosBundleExtractWorker.js +2 -3
- package/ios/CameraPosterInjection/Injection/CameraPosterInjection.m +466 -0
- package/package.json +7 -6
- package/schemas/README.md +16 -0
- package/schemas/prototype-icon-names.json +302 -0
- package/schemas/test-plan.schema.json +370 -52
- package/node_modules/@borewit/text-codec/README.md +0 -87
- package/node_modules/@jimp/diff/node_modules/pixelmatch/README.md +0 -110
- package/node_modules/@jimp/diff/node_modules/pixelmatch/node_modules/pngjs/README.md +0 -433
- package/node_modules/@jimp/file-ops/dist/browser/index.js +0 -8
- package/node_modules/@jimp/js-png/README.md +0 -35
- package/node_modules/@jimp/js-png/src/__image_snapshots__/index-node-test-ts-png-should-use-png-options-1-snap.png +0 -0
- package/node_modules/@jimp/js-png/src/output.png +0 -0
- package/node_modules/@jimp/js-png/vitest.config.browser.mjs +0 -3
- package/node_modules/@jimp/plugin-resize/README.md +0 -12
- package/node_modules/@jimp/plugin-resize/vitest.config.browser.mjs +0 -3
- package/node_modules/@tokenizer/inflate/README.md +0 -114
- package/node_modules/@tokenizer/token/README.md +0 -19
- package/node_modules/await-to-js/README.md +0 -82
- package/node_modules/debug/README.md +0 -481
- package/node_modules/exif-parser/README.md +0 -83
- package/node_modules/file-type/readme.md +0 -667
- package/node_modules/ieee754/README.md +0 -51
- package/node_modules/mime/README.md +0 -178
- package/node_modules/ms/readme.md +0 -59
- package/node_modules/parse-bmfont-xml/README.md +0 -74
- package/node_modules/parse-bmfont-xml/lib/browser.js +0 -85
- package/node_modules/parse-bmfont-xml/node_modules/xml2js/README.md +0 -507
- package/node_modules/pngjs/README.md +0 -287
- package/node_modules/sax/README.md +0 -228
- package/node_modules/strtok3/README.md +0 -795
- package/node_modules/tinycolor2/README.md +0 -492
- package/node_modules/tinycolor2/cjs/test.js +0 -2191
- package/node_modules/tinycolor2/cjs/test_template.js +0 -26
- package/node_modules/tinycolor2/deno_asserts@0.168.0.mjs +0 -807
- package/node_modules/tinycolor2/esm/test.js +0 -2189
- package/node_modules/tinycolor2/esm/test_template.js +0 -24
- package/node_modules/tinycolor2/tinycolor.js +0 -1191
- package/node_modules/token-types/README.md +0 -160
- package/node_modules/uint8array-extras/readme.md +0 -318
- package/node_modules/xml-parse-from-string/README.md +0 -35
- package/node_modules/xmlbuilder/README.md +0 -86
- package/node_modules/zod/README.md +0 -208
- package/node_modules/zod/v4/locales/ar.d.cts +0 -4
- package/node_modules/zod/v4/locales/ar.d.ts +0 -4
- package/node_modules/zod/v4/locales/az.d.cts +0 -4
- package/node_modules/zod/v4/locales/az.d.ts +0 -4
- package/node_modules/zod/v4/locales/be.d.cts +0 -4
- package/node_modules/zod/v4/locales/be.d.ts +0 -4
- package/node_modules/zod/v4/locales/ca.d.cts +0 -4
- package/node_modules/zod/v4/locales/ca.d.ts +0 -4
- package/node_modules/zod/v4/locales/cs.d.cts +0 -4
- package/node_modules/zod/v4/locales/cs.d.ts +0 -4
- package/node_modules/zod/v4/locales/de.d.cts +0 -4
- package/node_modules/zod/v4/locales/de.d.ts +0 -4
- package/node_modules/zod/v4/locales/en.d.cts +0 -5
- package/node_modules/zod/v4/locales/en.d.ts +0 -5
- package/node_modules/zod/v4/locales/eo.d.cts +0 -5
- package/node_modules/zod/v4/locales/eo.d.ts +0 -5
- package/node_modules/zod/v4/locales/es.d.cts +0 -4
- package/node_modules/zod/v4/locales/es.d.ts +0 -4
- package/node_modules/zod/v4/locales/fa.d.cts +0 -4
- package/node_modules/zod/v4/locales/fa.d.ts +0 -4
- package/node_modules/zod/v4/locales/fi.d.cts +0 -4
- package/node_modules/zod/v4/locales/fi.d.ts +0 -4
- package/node_modules/zod/v4/locales/fr-CA.d.cts +0 -4
- package/node_modules/zod/v4/locales/fr-CA.d.ts +0 -4
- package/node_modules/zod/v4/locales/fr.d.cts +0 -4
- package/node_modules/zod/v4/locales/fr.d.ts +0 -4
- package/node_modules/zod/v4/locales/he.d.cts +0 -4
- package/node_modules/zod/v4/locales/he.d.ts +0 -4
- package/node_modules/zod/v4/locales/hu.d.cts +0 -4
- package/node_modules/zod/v4/locales/hu.d.ts +0 -4
- package/node_modules/zod/v4/locales/id.d.cts +0 -4
- package/node_modules/zod/v4/locales/id.d.ts +0 -4
- package/node_modules/zod/v4/locales/index.d.cts +0 -39
- package/node_modules/zod/v4/locales/index.d.ts +0 -39
- package/node_modules/zod/v4/locales/it.d.cts +0 -4
- package/node_modules/zod/v4/locales/it.d.ts +0 -4
- package/node_modules/zod/v4/locales/ja.d.cts +0 -4
- package/node_modules/zod/v4/locales/ja.d.ts +0 -4
- package/node_modules/zod/v4/locales/kh.d.cts +0 -4
- package/node_modules/zod/v4/locales/kh.d.ts +0 -4
- package/node_modules/zod/v4/locales/ko.d.cts +0 -4
- package/node_modules/zod/v4/locales/ko.d.ts +0 -4
- package/node_modules/zod/v4/locales/mk.d.cts +0 -4
- package/node_modules/zod/v4/locales/mk.d.ts +0 -4
- package/node_modules/zod/v4/locales/ms.d.cts +0 -4
- package/node_modules/zod/v4/locales/ms.d.ts +0 -4
- package/node_modules/zod/v4/locales/nl.d.cts +0 -4
- package/node_modules/zod/v4/locales/nl.d.ts +0 -4
- package/node_modules/zod/v4/locales/no.d.cts +0 -4
- package/node_modules/zod/v4/locales/no.d.ts +0 -4
- package/node_modules/zod/v4/locales/ota.d.cts +0 -4
- package/node_modules/zod/v4/locales/ota.d.ts +0 -4
- package/node_modules/zod/v4/locales/pl.d.cts +0 -4
- package/node_modules/zod/v4/locales/pl.d.ts +0 -4
- package/node_modules/zod/v4/locales/ps.d.cts +0 -4
- package/node_modules/zod/v4/locales/ps.d.ts +0 -4
- package/node_modules/zod/v4/locales/pt.d.cts +0 -4
- package/node_modules/zod/v4/locales/pt.d.ts +0 -4
- package/node_modules/zod/v4/locales/ru.d.cts +0 -4
- package/node_modules/zod/v4/locales/ru.d.ts +0 -4
- package/node_modules/zod/v4/locales/sl.d.cts +0 -4
- package/node_modules/zod/v4/locales/sl.d.ts +0 -4
- package/node_modules/zod/v4/locales/sv.d.cts +0 -4
- package/node_modules/zod/v4/locales/sv.d.ts +0 -4
- package/node_modules/zod/v4/locales/ta.d.cts +0 -4
- package/node_modules/zod/v4/locales/ta.d.ts +0 -4
- package/node_modules/zod/v4/locales/th.d.cts +0 -4
- package/node_modules/zod/v4/locales/th.d.ts +0 -4
- package/node_modules/zod/v4/locales/tr.d.cts +0 -5
- package/node_modules/zod/v4/locales/tr.d.ts +0 -5
- package/node_modules/zod/v4/locales/ua.d.cts +0 -4
- package/node_modules/zod/v4/locales/ua.d.ts +0 -4
- package/node_modules/zod/v4/locales/ur.d.cts +0 -4
- package/node_modules/zod/v4/locales/ur.d.ts +0 -4
- package/node_modules/zod/v4/locales/vi.d.cts +0 -4
- package/node_modules/zod/v4/locales/vi.d.ts +0 -4
- package/node_modules/zod/v4/locales/zh-CN.d.cts +0 -4
- package/node_modules/zod/v4/locales/zh-CN.d.ts +0 -4
- package/node_modules/zod/v4/locales/zh-TW.d.cts +0 -4
- package/node_modules/zod/v4/locales/zh-TW.d.ts +0 -4
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{pn,$b,mK,LO,Cn,mJ,fJ}from"./chunk-5d2hft6c.js";import"./chunk-z637nqg8.js";import"./chunk-58wzr3mt.js";export{Cn as getMcpServerVersion,fJ as getSettledMcpServerVersion,mK as hasWorkingTreeHash,mJ as isMcpServerVersionSettled,LO as probeCheckoutMcpServerVersion,pn as releaseVersion,$b as withoutDirtyStamp};
|
|
3
|
+
|
|
4
|
+
//# debugId=6BC69CAE25D6085C64756E2164756E21
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{f,Y,I,lt}from"./chunk-58wzr3mt.js";import{t,u}from"./chunk-rbpdk7m0.js";import{Bl,Tae}from"./chunk-qcxzr2my.js";var ke;function mae(r){ke=r}function Le(){return ke?.()}import{setTimeout as it}from"timers/promises";class SP{timer;offsetMs;leadHighWaterMs=0;wallReportOffsetMs;constructor(r){this.timer=r}now(){let r=this.timer.now(),n=this.timer.monotonicNow?.();if(n===void 0)return r;let o=r-n;if(this.offsetMs===void 0)this.offsetMs=o,this.leadHighWaterMs=o;else if(o>this.leadHighWaterMs){if(this.timer.monotonicIncludesHostSleep!==!0)this.offsetMs+=o-this.leadHighWaterMs;this.leadHighWaterMs=o}else if(o<this.leadHighWaterMs-1000)this.leadHighWaterMs=o;return Math.round(n+this.offsetMs)}toWall(r){let n=this.timer.now()-this.now();if(this.wallReportOffsetMs===void 0||Math.abs(n-this.wallReportOffsetMs)>50)this.wallReportOffsetMs=n;return r+this.wallReportOffsetMs}}var Fr=2147483647;function st(r){return r!=="darwin"&&r!=="linux"}var Oe="1.4";function hJ(r){if(r===void 0)return;if(r.split(".").slice(0,2).join(".")===Oe)return;return`Bun ${r} is not the release line (${Oe}.x) whose monotonic clock semantics were verified; whether performance.now() runs through host sleep may have changed, so host sleep and daemon stalls may be judged wrongly (#10962)`}class Af{monotonicIncludesHostSleep;constructor(r=process.platform){this.monotonicIncludesHostSleep=st(r)}async sleep(r){return it(r)}setTimeout(r,n){return global.setTimeout(r,n)}clearTimeout(r){global.clearTimeout(r)}setInterval(r,n){return global.setInterval(r,n)}clearInterval(r){global.clearInterval(r)}now(){return Date.now()}monotonicNow(){return performance.now()}}var i=new Af;var j=5000;function K(r,n=i,o=j){if(r.closed)return Promise.resolve();return new Promise((s,a)=>{let c=!1,d,y=n.setTimeout(()=>{b(()=>{r.destroy?.(),a(u(d??Error("Log stream close stalled"),`Log stream did not emit 'close' within ${o}ms \u2014 the file descriptor may still be held`))})},o),b=(p)=>{if(c)return;c=!0,r.off("error",v),r.off("close",S),n.clearTimeout(y),p()},v=(p)=>{d=p,queueMicrotask(()=>{if(!c)r.destroy?.(p)})},S=()=>b(()=>d?a(d):s());r.once("error",v),r.once("close",S),r.end()})}var{setTimeout:ct,clearTimeout:ut}=globalThis,dt=Date.now,_e={setTimeout:(r,n)=>ct(r,n),clearTimeout:(r)=>ut(r),now:()=>dt()};var Qa={DEBUG:0,INFO:1,WARN:2,ERROR:3,NONE:4};function pe(r){if(r===void 0)return null;let n=r.trim().toLowerCase();if(n.length===0)return null;switch(n){case"debug":return Qa.DEBUG;case"info":return Qa.INFO;case"warn":case"warning":return Qa.WARN;case"error":return Qa.ERROR;case"none":case"silent":return Qa.NONE;default:return null}}function me(r,n){return r.includes("--daemon-mode")?"daemon":`stdio-${n}`}var Me=new Set(["PASSWORD","TOKEN","SECRET","KEY","CREDENTIAL","AUTH","API_KEY","PRIVATE_KEY","ACCESS_TOKEN","REFRESH_TOKEN","CLIENT_SECRET","DATABASE_URL","DB_PASSWORD","GITHUB_TOKEN","NPM_TOKEN","AWS_SECRET_ACCESS_KEY"]),Ce=(r)=>{if(typeof r!=="object"||r===null)return String(r);let n=[];try{return JSON.stringify(r,function(o,s){if(typeof s==="object"&&s!==null){while(n.length>0&&n[n.length-1].holder!==this)n.pop();if(n.some((c)=>c.original===s))return"[circular]";let a={};for(let[c,d]of Object.entries(s))if(!Me.has(c.toUpperCase()))a[c]=d;return n.push({holder:a,original:s}),a}if(typeof s==="number"&&!Number.isFinite(s))return String(s);return s})}catch(o){return"[unserializable]"}},B=(r)=>r.replace(/[\r\n\t]/g," "),ge=(r,n,o,{message:s,args:a})=>{let c=new Date().toISOString(),d=B(s),y=a.length>0?` ${a.map((S)=>B(typeof S==="object"?Ce(S):String(S))).join(" ")}`:"",b=`${d}${y}`,v=b.length>1000?`${b.substring(0,1000)}... (truncated)`:b;if(r==="json")return JSON.stringify({timestamp:c,level:o.toLowerCase(),component:n,event:"log",message:v});return`${c} [${o}] ${v}`};var mn={hostLoad:void 0,gitMetadataClient:void 0,hostPortAvailabilityChecker:void 0,emulatorGrpcPortRegistry:void 0,deviceReadinessProxyDriverProvider:null,telemetryNoOpDefault:!1,auxSocketDir:void 0,bootAdmissionGatesDisabled:!1,processGenerationCaptureDisabled:void 0,logSinksDisabled:void 0};import oe from"fs";import Xe from"path";import{promises as H,readdirSync as Ne}from"fs";var Tf=H.readFile,fae=H.writeFile,kf=H.stat,fK=H.unlink;function BO(r,n){if(r===n)return 0;return r<n?-1:1}async function Qt(r){return(await H.readdir(r)).sort(BO)}async function Rr(r){return(await H.readdir(r,{withFileTypes:!0})).sort((n,o)=>BO(n.name,o.name))}function Li(r){return Ne(r).sort(BO)}function hU(r){return Ne(r,{withFileTypes:!0}).sort((n,o)=>BO(n.name,o.name))}import be from"fs";import k from"os";import h from"path";import{existsSync as pt}from"fs";import{homedir as mt}from"os";import fe from"path";var Ub=f.DAEMON_LAUNCH_CWD.name,hK="CORESIMULATOR_DEVICE_SET_PATH";function $O(r="/"){return Bl(()=>process.cwd(),()=>r)}function gU(r=mt()){if(r.length>0&&pt(r))return r;return"/"}function _d(r=$O(),n=process.env){let o=n[Ub]?.trim();return o&&fe.isAbsolute(o)?o:r}function Se(r,n=process.env){if(fe.isAbsolute(r))return r;return fe.resolve(_d(void 0,n),r)}function hae(r=process.env){let n=r[hK]?.trim();if(n)r[hK]=Se(n,r)}var Fe=448;function $p(r=process.env,n=k.homedir(),o=_d(void 0,r)){let s=lt(f.DATA_DIR,r);if(s&&s.length>0)return h.resolve(o,s);if(n&&n.length>0)return h.resolve(o,n,".auto-mobile");return h.join(k.tmpdir(),"auto-mobile")}function gK(r=process.env,n=k.homedir(),o=_d(void 0,r)){let s=lt(f.LOG_DIR,r);if(s&&s.length>0)return h.resolve(o,s);return h.join($p(r,n,o),fn.LOGS)}function gae(r=process.env){if(I(Y.NODE_ENV,r)!=="test")return;if([I(f.LOG_DIR,r),I(f.DATA_DIR,r)].some((o)=>o!==void 0&&o.trim().length>0))return;throw new t(`Unit test is about to write to the real AutoMobile logs directory (${gK(r)}). Unit tests must never touch the user's ~/.auto-mobile: point AUTOMOBILE_DATA_DIR (or AUTOMOBILE_LOG_DIR) at a temp directory the test removes.`)}function Qe(r){return h.join($p(),r)}function wP(r,n=k.userInfo().homedir,o=process.env){let s=lt(f.COORDINATION_DIR,o);if(s&&s.length>0){if(!h.isAbsolute(s))throw Error("AUTOMOBILE_COORDINATION_DIR must be an absolute path so all agents share one coordination directory.");return h.join(s,r)}if(n.length===0)throw Error("Unable to resolve a shared AutoMobile directory without a home directory. Set AUTOMOBILE_COORDINATION_DIR to a writable shared directory.");return h.join(h.resolve(n),".auto-mobile",r)}function yK(r,n=k.userInfo().homedir){if(n.length===0)throw Error("Unable to resolve a host-global AutoMobile directory without an OS account home directory.");return h.join(h.resolve(n),".auto-mobile",r)}function $u(r,n,o=process.env,s=k.userInfo().homedir){let a=lt(f.ADB_SERVER_COORDINATION_DIR,o);if(a&&a.length>0){if(!h.isAbsolute(a))throw Error("AUTOMOBILE_ADB_SERVER_COORDINATION_DIR must be an absolute path so every daemon on one ADB server shares it.");return h.join(a,r,n)}if(s.length===0)throw Error("Unable to resolve the ADB-server coordination directory without an OS account home directory. Set AUTOMOBILE_ADB_SERVER_COORDINATION_DIR to a writable shared directory.");return h.join(h.resolve(s),".auto-mobile","adb-servers",r,n)}function ec(r){if(be.mkdirSync(r,{recursive:!0,mode:Fe}),be.lstatSync(r).isSymbolicLink())throw Error(`Refusing to use symbolic-link directory: ${r}`);if(process.platform!=="win32")be.chmodSync(r,Fe);return r}function di(r,n=process.env){return ec(h.join($p(n),r))}function yae(r){return ec(wP(r))}function vK(r=process.env,n=k.homedir()){try{return ec(gK(r,n))}catch(o){if(o instanceof Error&&o.message.includes("symbolic-link directory"))throw u(o,"Refusing to use symbolic-link directory for AutoMobile logs");throw u(o,"Unable to initialize the AutoMobile log directory. Set AUTOMOBILE_LOG_DIR to a writable directory.")}}var fn={LOGS:"logs",TOOL_LOGS:"tool_logs",SCREENSHOTS:"screenshots",SNAPSHOTS:"snapshots",VIDEO_ARCHIVE:"video-archive",PERFORMANCE_TRACES:"performance-traces",NAVIGATION_SCREENSHOTS:"navigation-screenshots",VIEW_HIERARCHY:"view_hierarchy",OBSERVE_RESULTS:"observe_results",TOOL_OUTPUTS:"tool_outputs",WINDOW:"window",CACHE:"cache",STATE:"state"};import J from"path";var li=(r)=>{let n=U(r);return{delayForAttempt(o){return q(o),n}}},Wt=(r)=>{if(r.length===0)throw Error("sequenceBackoff requires at least one delay");let n=r.map(U);return{delayForAttempt(o){return q(o),n[Math.min(o-1,n.length-1)]}}},Q=(r)=>{let n=U(r.initialDelayMs),o=r.multiplier??2,s=r.maxDelayMs===void 0?Number.POSITIVE_INFINITY:U(r.maxDelayMs);if(!Number.isFinite(o)||o<1)throw Error(`exponentialBackoff multiplier must be >= 1, got ${o}`);return{delayForAttempt(a){return q(a),U(Math.min(n*o**(a-1),s))}}},No=(r)=>{if(typeof r==="number")return li(r);if(gt(r))return Wt(r);if(typeof r==="function")return{delayForAttempt(n){return q(n),U(r(n))}};return r},gt=(r)=>Array.isArray(r),RP=(r,n)=>No(r).delayForAttempt(n),q=(r)=>{if(!Number.isInteger(r)||r<1)throw Error(`Backoff attempt must be a positive integer, got ${r}`)},U=(r)=>{if(!Number.isFinite(r))throw Error(`Backoff delay must be finite, got ${r}`);return Math.max(0,Math.floor(r))};var ft=new Set(["EBUSY","EPERM"]),ye=4,bt=Wt([10,25,50]);async function yt(r,n){try{return await r.unlink(n),"removed"}catch(o){let s=o?.code;if(s==="ENOENT")return"removed";if(s!==void 0&&ft.has(s))return"transient";return r.logger?.debug(`log pruning could not remove ${n}: ${o}`,o),"failed"}}async function he(r,n){for(let o=1;o<=ye;o++){let s=await yt(r,n);if(s==="removed")return!0;if(s==="failed")return!1;if(o===ye)return r.logger?.debug(`log pruning gave up on ${n} after ${ye} transient unlink failures`),!1;await r.sleep(bt.delayForAttempt(o))}return!1}function vt(r){try{return process.kill(r,0),!0}catch(n){return n?.code!=="ESRCH"}}function Be(r,n){if(r===`${n}.log`)return!0;if(!r.startsWith(`${n}-`))return!1;let o=r.slice(n.length+1);return!/^launch-\d+\.log$/.test(o)}function St(r){let n=/^(?:stdio|server|daemon-launch)-(\d+)(?:-.*)?\.log$/.exec(r);return n?Number(n[1]):void 0}function He(r){return/^daemon-launch-\d+(?:-.*)?\.log$/.test(r)}function xt(r){return{unlink:r.unlink??fK,sleep:r.sleep??((n)=>i.sleep(n)),logger:r.logger}}async function Rt(r,n){await he(r,`${n}.owner`)}async function At(r,n,o,{now:s,abandonedMaxAgeMs:a}){await Tae(async()=>{let c=await kf(n);if(s-c.mtimeMs<=a)return;if(await he(r,n)&&He(o))await Rt(r,n)},()=>{return})}async function Ue(r){let n=r.now??Date.now(),o=r.isProcessAlive??vt,s=r.isDaemonRunning??(()=>!1),a=xt(r),c,d=()=>{if(c!==void 0)return c;let{daemonPidFiles:p,readDaemonOwner:x}=r;if(p&&x){try{let{pidFiles:R,uncertain:D}=p();c={owners:R.flatMap((A)=>{let g=x(A);return g===void 0?[]:[g]}),uncertain:D}}catch(R){r.logger?.debug(`daemon pidfile enumeration for log pruning failed: ${R}`,R),c={owners:[],uncertain:!0}}return c}return c={owners:[],uncertain:s()},c},y=(p)=>{let{owners:x,uncertain:R}=d(),D=J.resolve(r.dir,p),A=x.filter((g)=>typeof g.launchLogPath==="string"&&J.resolve(g.launchLogPath)===D);try{let g=r.readDaemonLaunchLogOwnerTombstone?.(D);if(g!==void 0&&!R)A.push(g)}catch(g){return r.logger?.debug(`launch-log ownership tombstone read failed: ${g}`,g),"unknown"}if(A.length>0)return A.some((g)=>Number.isInteger(g.pid)&&g.pid>0&&o(g.pid))?"alive":"dead";if(R)return"unknown";return x.some((g)=>g.launchLogPath===void 0)?"unknown":"dead"},b;try{b=await Qt(r.dir)}catch(p){r.logger?.debug(`log pruning skipped because the log directory could not be read: ${p}`,p);return}let v=b.filter((p)=>p.endsWith(".log")),S=v.filter((p)=>Be(p,r.ownPrefix)).sort();if(S.length>r.maxOwnFiles)for(let p of S.slice(0,S.length-r.maxOwnFiles))await he(a,J.join(r.dir,p));for(let p of v){if(!Pt(p,r.ownPrefix,o,y))continue;await At(a,J.join(r.dir,p),p,{now:n,abandonedMaxAgeMs:r.abandonedMaxAgeMs})}}function Pt(r,n,o,s){if(Be(r,n))return!1;let a=St(r);if(a===void 0)return!1;if(o(a))return!1;if(He(r)){if(s(r)!=="dead")return!1}return!0}import wt from"fs";var Ve={create(r,n){return wt.createWriteStream(r,n)}};function We(r){let n=r?.trim().toLowerCase();return n==="text"||n==="json"?n:null}function Ge(r){let n=r?.trim().toLowerCase();return n==="file"||n==="stderr"||n==="both"?n:null}function gE(r=process.env){return We(I(f.LOG_FORMAT,r))??"text"}function Ef(r=process.env){return Ge(I(f.LOG_SINK,r))??"file"}function Tt(r,n){if(n===void 0)return r;try{return`${r}: ${n instanceof Error?n.stack??n.message:String(n)}`}catch(o){return r}}function Zi(r,n){let o=Tt(r,n);if(gE()==="json"){process.stderr.write(`${JSON.stringify({timestamp:new Date().toISOString(),level:"error",component:"process",event:"log.emergency",message:o})}
|
|
3
|
+
`);return}process.stderr.write(`${o}
|
|
4
|
+
`)}class PP extends t{}function Fl(r){if((r&32)!==0)return"managed";if((r&16384)!==0||(r&1)!==0)return"primary";if((r&1024)!==0)return"secondary";return"unknown"}var bK=["RUNNING_MODERATE","RUNNING_LOW","RUNNING_CRITICAL","UI_HIDDEN","BACKGROUND","MODERATE","COMPLETE"];var SK={wallpaperRendering:"Home and Lock Screen wallpaper rendering; excludes widgets and Live Activities.",widgets:"Widget refresh, including app widgets; excludes wallpaper and Live Activities.",liveActivities:"Live Activities and Dynamic Island updates; excludes wallpaper and widgets.",healthServices:"HealthKit data and Health app background work. Health integrations become unavailable.",homeServices:"HomeKit accessories and automations. Home integrations become unavailable.",fitnessServices:"Apple Fitness, coaching, activity awards, and activity sharing.",familyServices:"Family Sharing, family approvals, and parental controls. Changes restriction behavior.",screenTime:"Screen Time limits and usage tracking. Changes restriction behavior.",newsServices:"Apple News background content.",weatherServices:"Apple Weather background forecasts.",tipsServices:"Apple Tips background content.",gameServices:"Game Center and saved-game synchronization; excludes controller input.",mapsSync:"Maps favorites, history, background updates, and suggested destinations; excludes MapKit rendering and location services.",advertising:"Promoted Apple content; excludes advertising privacy preferences and app integrity services.",diagnosticReporting:"Diagnostic collectors, feedback, location analytics, and call-quality reporting; reduces diagnostic evidence, not call transport.",siriAndAppIntents:"iOS Simulator Siri requests, Shortcuts actions, and App Intents; excludes speech services and proactive suggestions.",speechServices:"iOS Simulator speech recognition, dictation, and Siri speech synthesis; excludes Siri requests and App Intents orchestration.",mediaTranscoding:"iOS Simulator Photos image and video conversion; media imports and photo-picker conversions may fail.",photoAnalysis:"Background Photos analysis; may reduce photo search and recognition. Preserves library access, cloud transfers, and shared media-analysis infrastructure.",assistantSuggestions:"Siri inference, knowledge, and proactive suggestions; preserves speech, system voices, and shared language/model infrastructure.",appleIntelligence:"Apple Intelligence orchestration and generative experiences; system writing tools and intelligence integrations may become unavailable. Preserves shared model and speech services.",searchIndexing:"Spotlight and Settings search, including app-provided system indexes; excludes an app's own search service.",appStoreServices:"App Store installation/update services; excludes push and StoreKit payment services.",appleMediaSync:"Apple Music and subscribed/purchased media background services; excludes generic audio/video playback and StoreKit payments.",mailServices:"Apple Mail background services. Mail-based sign-in email workflows may be unavailable.",calendarServices:"Local Calendar database access; excludes server-side calendar integrations in apps.",reminderServices:"Apple Reminders database and background work; excludes reminders maintained by other apps.",personalDataSync:"Exchange, CalDAV, and CardDAV synchronization; preserves local Contacts database access.",safariSync:"Safari bookmark/history synchronization; preserves associated domains, shared credentials, browsing protections, and WebKit.",icloudSettingsSync:"iCloud system-settings synchronization and storage-plan recommendations; preserves accounts, credentials, CloudKit data, Drive, and Photos transfers.",messagingMaintenance:"Apple Messages history cleanup, attachment transfer, and FaceTime message storage; preserves identity, message database XPC helpers, and system calling services.",watchConnectivity:"Paired Watch and companion-device communication.",carPlay:"CarPlay vehicle connectivity.",tvRemote:"Apple TV discovery and remote control.",findMy:"Find My device-location services; excludes general location APIs.",continuity:"Nearby-device Continuity discovery; cross-device workflows may stop working. Preserves system share sheets.",walletServices:"Wallet, Apple Pay, digital identity, and merchant services. Payment sheets, including dependent StoreKit workflows, may fail.",businessServices:"Apple business messaging services; excludes ordinary app messaging.",backgroundSync:"General OS background app scheduling. Control is unsupported to preserve application behavior.",animations:"Android system animation scales: disabled sets all three to zero; enabled sets them to one. Excludes app-owned animation.",screensavers:"Android dream/screensaver activation; excludes wallpaper and widgets.",backup:"Android Backup Manager scheduling for the current user; disables backup and restore test behavior.",mailApp:"Android optional mail apps, including Gmail. Removes mail intent handlers; preserves other apps' messaging.",calendarApp:"Android Calendar app availability; preserves CalendarProvider.",contactsApp:"Android Contacts app availability; preserves ContactsProvider.",mapsApp:"Android Google Maps app; external navigation intents become unavailable.",videoApp:"Android YouTube app; native video links become unavailable.",musicApp:"Android YouTube Music app; preserves shared audio playback.",photosApp:"Android Google Photos app; changes cloud photo sources and choosers. Preserves MediaProvider and DocumentsUI.",assistantApp:"Android Google Search/Assistant app, including voice and home-search integrations.",digitalWellbeing:"Android Digital Wellbeing usage tracking, focus, and app limits.",printing:"Android print spooler and print recommendations; printing becomes unavailable.",accessibilityApps:"Optional Android accessibility apps. Active accessibility services are protected.",textToSpeech:"Android Google speech synthesis; speech-dependent functionality becomes unavailable.",storeApp:"Android Play Store app; installation, updates, billing and licensing may fail.",healthConnect:"Android Health Connect controller and backup app; health integrations become unavailable.",adServices:"Android AdServices API package; advertising/privacy APIs may fail. Does not remove mainline/APEX infrastructure.",onDevicePersonalization:"Android on-device personalization service package; dependent APIs may fail.",wallpaperApps:"Android wallpaper picker and optional live-wallpaper apps; changes wallpaper selection. Does not disable the shared wallpaper framework or widgets.",dialerApp:"Optional Android dialer apps. Default role holders remain protected.",messagesApp:"Optional Android SMS/Messages apps. Default role holders remain protected; excludes other apps' messaging.",googleServicesFramework:"Android Google Services Framework; aggressive control that can break Google account and push integrations.",googlePlayServices:"Android Google Play services; aggressive control that breaks dependent push, authentication, location and other integrations. Keep enabled for workflows that depend on those services.",icloudSync:"Broad iCloud/account synchronization. Control is unsupported; use the narrower icloudSettingsSync setting."};var yE="value-redacted";function ht(r){return r===!0||r==="true"}function xd(r){return r===!1||r==="false"}var vae=["first","random","unique"];var Fo=Symbol("displayInventoryOutcome");var Hb=[["closed","cover"],["opened","inner"],["rear_display","inner"]];function Cd(r){return r.role!=="overlay"&&r.role!=="virtual"}function Up(r){return r?.panels?.length?r.panels:[{key:"0",role:"unknown",sizePx:{width:0,height:0}}]}function AP(r,n,o,s){let{hasPostures:a,pinned:c}=s,d=o.map(({key:p,role:x})=>x?`${p} (${x})`:p).join(", "),y=Hb.find(([,p])=>p===n)?.[0],b=a&&n!=="cluster"?`; to make this panel available, change the device posture with ${y?`setPosture {posture: "${y}"}`:"setPosture using a supported posture"}`:"";return`Display "${r}" (${n}) ${n==="cluster"?"is not currently connected":"is not connected in the current posture"}. Connected panels: ${d}. Target a connected panel, omit display, or use display: "active"${b}.${c?" Clear the pin with setActiveDevice {display: null} (include deviceId and sessionUuid), or select another display explicitly.":""}`}function yU(r){if(typeof r!=="object"||r===null)return;let n=r;if(typeof n.width!=="number"||typeof n.height!=="number"||!Number.isInteger(n.width)||n.width<=0||!Number.isInteger(n.height)||n.height<=0)return;return{width:n.width,height:n.height}}function wK(r,n){if(!n)return;let o=r?.filter((s)=>s.sizePx.width===n.width&&s.sizePx.height===n.height);return o?.length===1?o[0].key:void 0}var ze=["tv","watch","automotive","xr-headset","xr-glasses"],X={tv:{systemImageTags:["android-tv","google-tv","google-tv-ps16k"],profileIdPattern:/^tv_/i,defaultProfileId:"tv_1080p"},watch:{systemImageTags:["android-wear-signed","android-wear","android-wear-cn"],profileIdPattern:/^wear(?:os)?_/i,defaultProfileId:"wearos_small_round"},automotive:{systemImageTags:["android-automotive-playstore","android-automotive"],profileIdPattern:/^automotive_/i,defaultProfileId:"automotive_1024p_landscape"},"xr-headset":{systemImageTags:["google-xr","android-xr-v3-playstore","android-xr-preview-playstore"],profileIdPattern:/^xr_headset/i,defaultProfileId:"xr_headset_device"},"xr-glasses":{systemImageTags:["ai-glasses"],profileIdPattern:/^(?:xr_glasses|ai_glasses)_/i,defaultProfileId:"ai_glasses_device"}},$e=ze.map((r)=>({formFactor:r,...X[r]}));function bae(r){return ze.includes(r)}function Dd(r){return X[r].systemImageTags}function Ll(r,n){if(r==="watch"&&n===!1)return"wearos_square";return X[r].defaultProfileId}function Sae(r){let n=r?.trim()??"";if(!X.watch.profileIdPattern.test(n))return;if(/round/i.test(n))return!0;return/square|rect/i.test(n)?!1:void 0}function It(r){let n=r.systemImageTag?.trim().toLowerCase(),o=r.profileId?.trim(),s=$e.find((a)=>n?a.systemImageTags.includes(n):!1);if(s)return s.formFactor;return $e.find((a)=>o?a.profileIdPattern.test(o):!1)?.formFactor}function If(r){let n=/pixel[_ ]tablet|nexus (?:9|10)/i.test(r.profileId??"")?"tablet":void 0;return qb({...r,hint:n,deviceType:r.profileId})}function ve(r){return typeof r==="number"&&Number.isFinite(r)&&r>0}function qb(r){let n=It({systemImageTag:r.systemImageTag,profileId:r.deviceType});if(n)return n;let o=`${r.deviceType??""} ${r.hint??""}`;if(/fold|flip/i.test(o))return"foldable";let s=r.hint?.trim().toLowerCase();if(s!==void 0&&Dt.has(s))return s;return Et(r)}var Dt=new Set(["phone","tablet","tv","watch","automotive","xr-headset","xr-glasses"]);function Et(r){let{width:n,height:o,density:s}=r;if(!ve(n)||!ve(o)||!ve(s))return"unknown";return Math.hypot(n,o)/s>=7?"tablet":"phone"}var Bi={watchos:"watchOS",tvos:"tvOS",visionos:"visionOS"},Od={android:"Android",ios:"iOS",...Bi};function cr(r){return r==="android"||r==="ios"}function Hp(r,n){return n===void 0?cr(r):r===n}function te(r,n){if(cr(r))return r;throw kt(n,r)}function gJ(r,n){return r==="either"?r:te(r,n)}function kt(r,n){return new t(`${r} is not supported on ${Bi[n]} yet. Target an Android or iOS device instead.`)}var UO=1,HO=1798000,qO=1,VO=1000;function vE(r){return r!==void 0&&(r.toolType==="eraser"||r.pressure!==void 0&&r.pressure!==1||r.tilt!==void 0||r.orientation!==void 0||(r.buttons?.length??0)>0)}function wae(r){return(r??[]).reduce((n,o)=>n|(o==="primary"?32:64),0)}function yJ(r){return r==="window_read_skipped"||r==="window_list_skipped"}function WO(r){return r.ctrlProxyIncomplete===!0&&!yJ(r.ctrlProxyIncompleteReason)}function we(r){return r.$??r}function Ra(r){let n=r.node;if(Array.isArray(n))return n;return n&&typeof n==="object"?[n]:[]}function qt(r){return r.bounds??we(r).bounds}function je(r){return r!==null&&typeof r==="object"&&!Array.isArray(r)}function Rae(r){return je(r)&&"hierarchy"in r&&je(r.hierarchy)}function Uu(r){if(!r)return null;let{nativeScale:n,pixelWidth:o,pixelHeight:s}=r;if(typeof n!=="number"||!Number.isFinite(n)||n<=0||typeof o!=="number"||!Number.isFinite(o)||o<=0||typeof s!=="number"||!Number.isFinite(s)||s<=0)return null;return{nativeScale:n,pixelWidth:o,pixelHeight:s}}function vU(r){return Uu(r)??{}}var vJ="immediate";var Lt="device_service_disabled";class zO extends t{code=Lt;retryable=!1;tool;resource;labels;disabledLabels;unavailable;howToEnable;deviceId;constructor(r){let n=`Call setDeviceResources with {resources:{${r.resource}:"enabled"}} (enable this default-disabled tool with setToolEnabled or --enable-tool setDeviceResources), or provision/start the simulator without {resources:{${r.resource}:"disabled"}}.`;super(`${r.tool} requires resource ${r.resource} (${r.labels.join(", ")}); disabled labels: ${r.disabledLabels.join(", ")}. Unavailable: ${r.unavailable}. ${n}`);this.name="DeviceServiceDisabledError",this.tool=r.tool,this.resource=r.resource,this.labels=[...r.labels],this.disabledLabels=[...r.disabledLabels],this.unavailable=r.unavailable,this.howToEnable=n,this.deviceId=r.deviceId}toPayload(){return{code:this.code,tool:this.tool,resource:this.resource,labels:this.labels,disabledLabels:this.disabledLabels,unavailable:this.unavailable,howToEnable:this.howToEnable,retryable:this.retryable,deviceId:this.deviceId}}}var Ot="unsafe_device_resource_combination";class qp extends t{code=Ot;retryable=!1;hazards;howToProceed;constructor(r){super(`Unsafe iOS device resource combination: ${r.map((o)=>`${o.id} (${o.resources.join(", ")}): ${o.reason}`).join("; ")}. Drop or re-enable at least one of the listed resources in each unsafe combination before retrying.`);this.name="UnsafeDeviceResourceCombinationError",this.hazards=r.map((o)=>({...o,resources:[...o.resources],appliesTo:[...o.appliesTo]})),this.howToProceed="Drop or re-enable at least one of the listed resources in each unsafe combination before retrying."}toPayload(){return{code:this.code,retryable:this.retryable,hazards:this.hazards,howToProceed:this.howToProceed}}}function _t(r){return typeof r==="object"&&r!==null&&"unref"in r&&typeof r.unref==="function"}function Mt(r){let{timer:n,timeoutMs:o,deadline:s,unref:a,label:c,timeoutError:d,onTimeout:y}=r;if(s===void 0&&o===void 0)return;let b=o??0,v=()=>{};return{promise:new Promise((p,x)=>{let R=(g)=>{x(d?.()??new t(g)),y?.()},D=(g)=>{if(a&&_t(g))g.unref()};if(s){v=s.whenExpired(n,()=>R(`${c} timed out`),D);return}let A=n.setTimeout(()=>R(`${c} timed out after ${b}ms`),b);D(A),v=()=>n.clearTimeout(A)}),cancel:()=>v()}}function Ke(r,n,o){let s=r.reason;if(o&&(s===void 0||s instanceof DOMException&&s.name==="AbortError"))return new t(`${n} cancelled`);return s===void 0?new DOMException("The operation was aborted.","AbortError"):s}function Ct(r){return Array.isArray(r)}function Je(r){return Ct(r)?r:[r]}function Nt(r){return typeof r==="function"?[r()]:Je(r)}function qe(r){for(let n of r)n.then(void 0,()=>{})}async function l(r,{timer:n,timeoutMs:o,deadline:s,unref:a=!1,signal:c,label:d,relabelDefaultAbort:y=!1,timeoutError:b,onTimeout:v}){if(typeof r!=="function")qe(Je(r));if(c?.aborted)throw Ke(c,d,y);let S,p=c?new Promise((R,D)=>{let A=()=>D(Ke(c,d,y));if(c.addEventListener("abort",A,{once:!0}),S=()=>c.removeEventListener("abort",A),c.aborted)A()}):void 0,x=Mt({timer:n,timeoutMs:o,deadline:s,unref:a,label:d,timeoutError:b,onTimeout:v});try{let R=Nt(r);return qe(R),await Promise.race([...R,...p?[p]:[],...x?[x.promise]:[]])}finally{x?.cancel(),S?.()}}import{readFileSync as Ft}from"fs";function xe(r,n,o){try{r?.(n,o)}catch(s){}}var Bt=50;function Ht(r,n){let o=`${r} (`,s=n.lastIndexOf(")");if(!n.startsWith(o)||s<o.length)return;let a=n.slice(s+1);if(!/^\s/.test(a))return;let c=a.trim().split(/\s+/),[d,...y]=c;if(c.length<Bt||d?.length!==1||y.some((b)=>!/^-?\d+$/.test(b)))return;return d}function Ut(r){return r?.code==="ESRCH"}function at(r,n={}){if(!Number.isInteger(r)||r<=0)return!1;let o=n.signalProcess??((c)=>{process.kill(c,0)});try{o(r)}catch(c){return xe(n.debugLog,`src/daemon/daemonFiles.ts liveness check failed: ${c}`,c),!Ut(c)}if((n.platform??process.platform)!=="linux")return!0;let s;try{s=(n.readProcStat??((d)=>Ft(`/proc/${d}/stat`,"utf-8")))(r)}catch(c){return xe(n.debugLog,`src/daemon/daemonFiles.ts procfs liveness check failed: ${c}`,c),!0}let a=Ht(r,s);if(a===void 0)return xe(n.debugLog,`src/daemon/daemonFiles.ts could not parse /proc/${r}/stat`,s),!0;return a!=="Z"&&a!=="X"}class Z{policy;pending=new Set;timeout;episode;observing=!0;constructor(r){this.policy=r}get stalled(){return this.episode!==void 0}divert(){if(this.episode)this.episode.diverted++}track(r){return new Promise((n,o)=>{let s={issuedAt:this.policy.timer.now(),settle:n,fail:o};this.pending.add(s),this.armOldest();try{r((a)=>this.complete(s,a))}catch(a){this.complete(s,a)}})}suspend(){this.observing=!1,this.clearTimeout()}retire(r){this.suspend();for(let n of this.pending)if(r)n.fail(r);else n.settle(!1);this.pending.clear(),this.episode=void 0}complete(r,n){if(!this.pending.delete(r))return;if(n){if(this.episode)this.episode.failed++;r.fail(n)}else r.settle(!0);if(!this.observing)return;if(this.episode&&!n&&!this.oldestExpired())this.resume();if(this.pending.size===0&&!this.episode)this.clearTimeout();this.armOldest()}oldest(){return this.pending.values().next().value}oldestExpired(){let r=this.oldest();return r!==void 0&&this.policy.timer.now()-r.issuedAt>=this.policy.timeoutMs}resume(){let r=this.episode;if(this.episode=void 0,this.clearTimeout(),r)this.policy.resumed(this.policy.timer.now()-r.detectedAt,r.diverted)}armOldest(){let r=this.oldest();if(!this.observing||this.timeout!==void 0||this.episode||!r)return;this.arm(Math.max(0,this.policy.timeoutMs-(this.policy.timer.now()-r.issuedAt)))}arm(r){if(this.timeout=this.policy.timer.setTimeout(()=>{this.timeout=void 0,this.onDeadline()},r),typeof this.timeout==="object"&&typeof this.timeout.unref==="function")this.timeout.unref()}onDeadline(){if(this.episode){let r=this.policy.timer.now()-this.episode.detectedAt,n=this.pending.size+this.episode.failed;this.retire(),this.policy.abandoned?.(r,n);return}if(!this.oldestExpired()){this.armOldest();return}this.episode={detectedAt:this.policy.timer.now(),diverted:0,failed:0},this.policy.stalled(this.pending.size);for(let r of this.pending)r.settle(!1);if(this.policy.abandonMs!==void 0)this.arm(this.policy.abandonMs)}clearTimeout(){if(this.timeout!==void 0)this.policy.timer.clearTimeout(this.timeout);this.timeout=void 0}}function bJ(){return N==="json"}var V=pe(I(f.LOG_LEVEL))??Qa.INFO,N=gE(),_=Ef(),Re=!1,z=Promise.resolve(),W=(r)=>{z=z.then(()=>r)},M=_==="stderr"?void 0:vK(),F=me(process.argv,process.pid),T=M?Xe.join(M,`${F}.log`):void 0,Vt=(r,n)=>{r.on("error",(o)=>{try{Zi(`Log stream error on ${n}`,o)}catch(s){}if(m===r)m=void 0;w.get(r)?.retire(o),C(r),queueMicrotask(()=>r.destroy?.())})},L=new Map,C=(r,n=i)=>{if(r.closed)return;let o=L.get(r);if(o)o.timer.clearTimeout(o.timeoutHandle),r.off("close",o.onClose);let s=o&&n===i?o.timer:n,a=()=>{let d=L.get(r);if(d?.onClose===a)d.timer.clearTimeout(d.timeoutHandle),r.off("close",a),L.delete(r)},c=s.setTimeout(a,j);L.set(r,{timer:s,timeoutHandle:c,onClose:a}),r.once("close",a)},ue=(r)=>{for(let[n,o]of L)if(n.closed)o.onClose();if(L.size>0)return;try{let n=Ve.create(r,{flags:"a"});return Vt(n,r),n}catch(n){Zi(`Failed to open log stream ${r}`,n);return}},m=T?ue(T):void 0;function Te(){if(!M||!T)return;return{dir:M,path:T}}var Ye=20000,ie=5000,Gt=30000,Ie=_e,w=new WeakMap,se=0,P;var $t=10485760,zt=10,jt=86400000,ae;function SJ(r){if(ae=r,re&&!re.registeredSweepStarted)et(re)}function de(){if(!ae)throw Error("Log retention namespace source is not registered");return ae}var Kt=()=>{try{let r=de(),{pidFiles:n,uncertain:o}=r.listDaemonPidFilesSync();if(o)return!0;return n.some((s)=>{let a=r.readPidFileDataSync(s);return a?at(a.pid):!1})}catch(r){return e.debug(`daemon liveness probe for log pruning failed: ${r}`,r),!0}},Jt=()=>{try{return de().listDaemonPidFilesSync()}catch(r){return e.debug(`daemon pidfile enumeration for log pruning failed: ${r}`,r),{pidFiles:[],uncertain:!0}}},Yt=(r)=>de().readDaemonOwnerForRetentionSync(r),Xt=(r)=>de().readDaemonLaunchLogOwnerTombstoneSync(r),Zt={daemonPidFiles:Jt,readDaemonOwner:Yt,readDaemonLaunchLogOwnerTombstone:Xt,isDaemonRunning:Kt},Ze=()=>{if(!M)return Promise.resolve();return Ue({dir:M,ownPrefix:F,maxOwnFiles:zt,abandonedMaxAgeMs:jt,...Zt})};function et(r){if(r.timeout!==void 0)return;r.timeout=r.timer.setTimeout(()=>{r.timeout=void 0,r.pending=r.pending.then(async()=>{if(r!==re||r.registeredSweepStarted)return;let n=ae!==void 0;if(r.fallbackStarted&&!n)return;r.fallbackStarted=!0,r.registeredSweepStarted=n;try{await r.prune()}catch(o){e.warn("Startup log pruning failed",o)}})},0)}function er(r,n){let o={timer:r,prune:n,pending:Promise.resolve(),fallbackStarted:!1,registeredSweepStarted:!1};return et(o),o}var re=M?er(i,Ze):void 0,tr=async(r)=>{w.get(r)?.suspend();try{return await K(r),!0}catch(n){let o=r.closed===!0;if(!o)C(r);return await E("Failed to close log stream before rotation",n),o}},rr=async(r)=>{let n=m;if(m=void 0,n){if(!await tr(n)){ne=Number.POSITIVE_INFINITY;return}}let o=new Date().toISOString().replace(/:/g,"-"),s=Xe.join(r.dir,`${F}-${o}.log`);if(oe.existsSync(r.path))await oe.promises.rename(r.path,s);m=ue(r.path),await Ze()},O,nr=async(r)=>{if(!oe.existsSync(r.path))return;if((await kf(r.path)).size>=$t)await rr(r)},or=(r)=>{if(!O)O=nr(r).finally(()=>{O=void 0});return O},De=async(r,n)=>{if(L.size===0&&(m?.destroyed||!m?.writable))m=ue(r.path);await E("Log rotation failed",n)},ne=Number.POSITIVE_INFINITY,ir=32768,sr=async(r)=>{if(ne+=r,ne<ir)return!0;ne=0;let n=Te();if(!n||!m)return!0;try{return await nt(or(n))}catch(o){return await De(n,o),!0}};var le=(r)=>new Promise((n,o)=>{process.stderr.write(`${r}
|
|
5
|
+
`,(s)=>{if(s)o(s);else n()})}),E=async(r,n)=>{if(_==="file")return;let o=`${r}: ${B(String(n))}`,s=N==="json"?JSON.stringify({timestamp:new Date().toISOString(),level:"error",component:F,event:"log.write_failed",message:o}):o;try{await le(s)}catch(a){}},tt=(r)=>{try{oe.writeSync(process.stderr.fd,`${r}
|
|
6
|
+
`)}catch(n){}},Ee=(r,n,o)=>{Pe=r.now(),tt(N==="json"?JSON.stringify({timestamp:new Date(r.now()).toISOString(),level:"error",component:F,event:n,message:B(o)}):B(o))},rt=(r,n)=>{W(ot(ge(N,F,"WARN",{message:`Log sink ${T} resumed after ${r}ms; ${n} line(s) were diverted while it was stalled`,args:[]})).catch((o)=>E("Failed to write log sink recovery",o)))},ar=(r,n,o,s)=>{if(Ee(n,"log.sink_abandoned",`Log sink ${T} abandoned after ${o}ms stalled; ${s} line(s) dropped`),m===r)m=void 0;C(r,n);try{r.destroy?.()}catch(a){}},lr=(r)=>{let n=w.get(r);if(!n){let o=Ie;if(n=new Z({timer:o,timeoutMs:ie,abandonMs:Gt,stalled:(s)=>Ee(o,"log.sink_stalled",`Logging to ${T} stalled: no write completed within ${ie}ms; ${s} line(s) pending`),resumed:rt,abandoned:(s,a)=>ar(r,o,s,a)}),se>0)n.suspend();w.set(r,n)}return n},nt=(r)=>{if(P?.operation===r)return P.completion;let n=Ie,o=new Z({timer:n,timeoutMs:ie,stalled:()=>Ee(n,"log.sink_stalled",`Logging to ${T} stalled: log rotation did not finish within ${ie}ms`),resumed:rt});if(se>0)o.suspend();let s=o.track((a)=>{let c=(d)=>{if(a(d),P?.guard===o)P=void 0};r.then(()=>c(),async(d)=>{let y=o.stalled;c(d);let b=Te();if(y&&b)await De(b,d)}).catch((d)=>E("Failed to recover log rotation",d))});return P={operation:r,guard:o,completion:s},s},Ae=(r=!1)=>{if(r)P?.guard.retire();else P?.guard.suspend();P=void 0},G=(r)=>{if(P?.guard.divert(),m)w.get(m)?.divert();if(_==="file")tt(r)},ce=()=>P?.guard.stalled===!0||m!==void 0&&w.get(m)?.stalled===!0,Pe,wJ=(r)=>ce()||Pe!==void 0&&Ie.now()-Pe<=r,ur=async()=>{while(O)try{if(!await nt(O))return!1}catch(r){let n=Te();if(n)await De(n,r)}return!0},dr=async(r)=>{if(!T)return!1;if(ce())return G(r),!1;if(O&&!await ur())return G(r),!1;if(!m)m=ue(T);if(m&&!await sr(Buffer.byteLength(r)+1))return G(r),!1;if(ce())return G(r),!1;return!0},ot=async(r)=>{if(!await dr(r))return;if(ce()){G(r);return}let n=m;if(!n){if(_==="file")await le(r);return}try{await lr(n).track((o)=>{n.write(r+`
|
|
7
|
+
`,o)})}catch(o){if(_==="file"){await le(r);return}throw o}},pr=async(r)=>{if(_==="stderr"||_==="both")await le(r)},mr=(r)=>{if(Re&&N==="text")try{process.stdout.write(`${r}
|
|
8
|
+
`)}catch(n){}},ee=async(r,n,o)=>{if(mn.logSinksDisabled?.())return;try{let s=Le(),a=s?`trace=${s.traceId} ${n}`:n,c=ge(N,F,r,{message:a,args:o}).replace(/[\r\n\t]/g," ");mr(c),await Promise.all([ot(c),pr(c)])}catch(s){await E("Failed to write log",s)}},gr=async(r=i)=>{if(Ae(),m){let n=m;w.get(n)?.suspend(),m=void 0,C(n,r);try{await K(n,r)}finally{C(n,r)}}},e={setLogLevel(r){V=r},getLogLevel(){return V},enableStdoutLogging(){Re=N==="text"},disableStdoutLogging(){Re=!1},debug(r,...n){if(V<=Qa.DEBUG)W(ee("DEBUG",r,n).catch((o)=>E("Failed to write debug log",o)))},info(r,...n){if(V<=Qa.INFO)W(ee("INFO",r,n).catch((o)=>E("Failed to write info log",o)))},warn(r,...n){if(V<=Qa.WARN)W(ee("WARN",r,n).catch((o)=>E("Failed to write warn log",o)))},error(r,...n){if(V<=Qa.ERROR)W(ee("ERROR",r,n).catch((o)=>E("Failed to write error log",o)))},async flush(){await z},close(){Ae();let r=m;if(m=void 0,r)w.get(r)?.suspend(),C(r),r.end()},async closeAfterFlush(r=i){if(se++,P?.guard.suspend(),m)w.get(m)?.suspend();let n,o=new AbortController;try{n=r.setTimeout(()=>{Ae(!0);let s=m;if(s)w.get(s)?.retire(),m=void 0,C(s,r),s.destroy?.();z=Promise.resolve(),o.abort(u(Error("Pending log writes stalled"),`Log writes did not flush within ${Ye}ms`))},Ye),await l(z,{timer:r,signal:o.signal,label:"Log writes"})}finally{if(se--,n!==void 0)r.clearTimeout(n)}await gr(r)}};
|
|
9
|
+
export{mn,mae,SP,Fr,hJ,Af,i,Qa,Tf,fae,kf,fK,BO,Qt,Rr,Li,hU,Ub,hK,$O,gU,_d,Se,hae,$p,gK,gae,Qe,wP,yK,$u,ec,di,yae,vK,fn,li,Wt,Q,No,RP,gE,Ef,Zi,PP,Fl,bK,SK,yE,ht,xd,vae,Fo,Hb,Cd,Up,AP,yU,wK,bae,Dd,Ll,Sae,If,qb,Bi,Od,cr,Hp,te,gJ,UO,HO,qO,VO,vE,wae,yJ,WO,we,Ra,qt,Rae,Uu,vU,vJ,zO,qp,l,at,bJ,SJ,wJ,e};
|
|
10
|
+
|
|
11
|
+
//# debugId=465B2C8C3949157A64756E2164756E21
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{Je,mt,v,o,P,dt,_g,wi,K,tf,ve,md,ir,pO,Kj,x,E,Xi}from"./chunk-r5bxavdx.js";import{i,l,e}from"./chunk-z637nqg8.js";import{Qh,yi,ca,ig,YC}from"./chunk-rvvy1bte.js";import{r,t}from"./chunk-rbpdk7m0.js";var C=3000,R=4,M=30000,N=20,H=60000,g=14,D=500,F=75,B=500,A=32;async function VL(n,s,a,{apiLevel:d,textLength:c,...u}){let m=a.slice(6);if(d===null||d>=31)return V(n,s,`echo $$; exec ${d===null?"":"cmd "}${m}`,{textLength:c,...u});let y,h="",b=!1,I=(w)=>{if(b)return;h+=w.slice(0,A+1);let S=h.indexOf(`
|
|
3
|
+
`);if(S<0&&h.length<=A)return;if(b=!0,S<0||S>A)return;let f=h.slice(0,S).trim(),T=/^\d+$/.test(f)?Number(f):NaN;if(Number.isSafeInteger(T)&&T>0)y=T};try{let w=`echo $$; exec ${m}`;return await n.execute(["shell",w],{...u,noRetry:!0,waitForProcessSettlementAfterAbort:!0,onStdout:I})}catch(w){if(y===void 0)e.warn("[ADB input text] Guest PID unavailable; using host process settlement only");else{e.warn(`[ADB input text] Dispatch failed; settling guest PID ${y}`);let S=Math.min(M,C+R*c);await Y(n,s,y,{terminate:!0,settlementMs:S})}throw w}}async function V(n,s,a,{textLength:d,signal:c,timeoutMs:u,...m}){c?.throwIfAborted();let p=U(d),y=new AbortController,h=!1,b=Je(()=>n.execute(["shell",a],{...m,noRetry:!0,timeoutMs:(u??0)+p,signal:y.signal,onStdout:(f)=>{h||=f.length>0}})),I=s.now(),w=!1,S=!1;b.then(()=>{w=!0},()=>{w=!0,S=!0});try{let f=await l(b,{timer:s,timeoutMs:u,signal:c,label:"Android input text",timeoutError:()=>new mt(`Android input text timed out after ${u}ms`)}),T=g*d-(s.now()-I);if(T>0)await L(s,T,c);return f}catch(f){let T=S;if(!w){if(!h)y.abort(f);await W(s,b,p),y.abort(f)}if(h&&!T)await s.sleep(g*d+D);throw f}}function L(n,s,a){return new Promise((d,c)=>{if(a?.aborted){c(a.reason);return}let u=()=>{n.clearTimeout(m),c(a?.reason)},m=n.setTimeout(()=>{a?.removeEventListener("abort",u),d()},s);a?.addEventListener("abort",u,{once:!0})})}function U(n){return Math.min(H,C+N*n)}async function W(n,s,a){e.warn(`[ADB input text] Cancelled; holding for the host client up to ${a}ms`);try{await l(s.then(()=>{return},()=>{return}),{timer:n,timeoutMs:a,label:"Android input text host settlement"})}catch(d){e.warn(`[ADB input text] Host client settlement deadline expired after ${a}ms`,d)}}function q(n,s){let a=["input text ","/system/bin/input text ","sh /system/bin/input text ","/system/bin/sh /system/bin/input text ","cmd input text ","/system/bin/cmd input text ","app_process /system/bin com.android.commands.input.Input text ","/system/bin/app_process /system/bin com.android.commands.input.Input text "].map((d)=>`"${d}"*`).join("|");return["shell",`if [ -r /proc/${n}/cmdline ]; then if cmdline=$(tr '\\0' ' ' < /proc/${n}/cmdline 2>/dev/null); then case "$cmdline" in ${a}) ${s?`kill ${n} 2>/dev/null; `:""}echo alive;; esac; else echo alive; fi; fi`]}async function Y(n,s,a,{terminate:d,settlementMs:c}){let u=s.now()+c,m=new AbortController,p=!1,y=async()=>{while(!p&&s.now()<u){try{let b=await n.execute(q(a,d),{signal:m.signal,timeoutMs:Math.min(B,u-s.now()),noRetry:!0});if(d=!1,b.stdout.trim()!=="alive")return}catch(b){if(p)e.debug(`[ADB input text] Probe for guest PID ${a} ended after settlement deadline`,b);else e.warn(`[ADB input text] Could not verify guest PID ${a}`,b)}let h=u-s.now();if(p||h<=0)return;await s.sleep(Math.min(F,h))}};try{await l(y,{timer:s,timeoutMs:c,label:"Android input text guest settlement",onTimeout:()=>{p=!0,m.abort()}})}catch(h){e.warn(`[ADB input text] Guest PID ${a} settlement deadline expired after ${c}ms`,h)}}function Ev(n,s){return`IME action '${n}' failed after the text was entered: ${s}. Do not retype the text.`}async function k(n,s,a,d){if(ca(n)&&!await d())return"Runner does not support stable node selectors";if(!Qh(s))return"Unable to verify the node selector in an incomplete hierarchy";let c=new ve().project(s).filter((m)=>tf(m.properties,n)),u=new Set(c.map((m)=>m.source)).size;if(u!==1)return u>1?`Node selector matches ${u} elements`:"Node selector matches no element in the current hierarchy";return X(c[0],a)?void 0:"Node selector does not resolve to the focused text input"}function X(n,s){let a=String(n.properties.class??n.properties.className??"");return dt(n.properties.focused)&&_g.some((d)=>a.includes(d))&&n.bounds!==void 0&&s.bounds!==void 0&&wi(n.bounds,s.bounds,0)}function _(n,s){return`Keyboard open outcome is indeterminate: the ${n} was dispatched but no result was confirmed (${s??"request cancelled"}). The keyboard may have opened. Do not retry automatically; observe before retrying.`}class kv extends t{constructor(n,s){super(_(n,s));this.name="KeyboardOpenIndeterminateError"}}class O{viewHierarchy;cache;constructor(n,s){this.viewHierarchy=n,this.cache=s}async getViewHierarchy(n,s){if(s?.forceFresh)this.cache.invalidateCache();return this.viewHierarchy.getViewHierarchy(void 0,{skipWaitForFresh:!1,minTimestamp:0,signal:n,timeoutMs:s?.timeoutMs})}}function G(n,s,a){return n==="ios"?s():a()}function Q(n,s){return n?.length===s.length&&n.every((a,d)=>a.left===s[d].left&&a.top===s[d].top&&a.right===s[d].right&&a.bottom===s[d].bottom)}class To{static INPUT_METHOD_WINDOW_TYPE=2;static STATE_CONFIRMATION_TIMEOUT_MS=2000;static IOS_KEYBOARD_VISIBILITY_TIMEOUT_MS=2000;static IOS_KEYBOARD_SETTLE_TIMEOUT_MS=1500;static IOS_KEYBOARD_SETTLE_INTERVAL_MS=250;static STATE_CONFIRMATION_POLL_INTERVAL_MS=100;static CLOSE_FOLLOW_UP_DETECT_TIMEOUT_MS=2000;device;adb;hierarchyProvider;parser;geometry;finder;timer;adbFactory;openClient;constructor(n,s={}){let{adbFactory:a=v,hierarchyProvider:d,timer:c=i,parser:u=new K,geometry:m=new ir,finder:p=new YC,openClient:y}=s;if(this.device=n,this.adbFactory=a,this.openClient=y,this.adb=a.create(n),this.parser=u,this.geometry=m,this.finder=p,this.timer=c,d)this.hierarchyProvider=d;else this.hierarchyProvider=new O(new Xi(n,a),G(n.platform,()=>x.getInstance(n),()=>E.getInstance(n,a)))}async execute(n,s){let{signal:a}=ig(s);if(o(a),this.device.platform==="ios")return this.executeIOS(n,a);switch(n){case"detect":return this.detect(a);case"open":return this.open(a);case"close":return this.close(a);default:return{success:!1,open:!1,message:`Unsupported keyboard action: ${n}`,error:`Unsupported keyboard action: ${n}`}}}async executeIOS(n,s){let a=x.getInstance(this.device);o(s);let d=await P(a.requestKeyboard(n,void 0,void 0,s),s);if(o(s),!d.success)return this.iosFailure(n,d,a,s);if(n!=="close"&&d.open===!0&&j(await this.settledIOSKeyboardVisibility(s))){let c=n==="detect"?"Keyboard is closed (no visible on-screen software keyboard)":"Keyboard did not open: no visible on-screen software keyboard. It may be minimized off screen because the simulator uses a hardware keyboard and cannot be shown on request.";return{success:n==="detect",open:!1,message:c,...n==="open"?{error:c}:{}}}return this.iosKeyboardResult(n,d)}iosKeyboardResult(n,s){let a=n==="detect"||n==="open"&&s.open||n==="close"&&!s.open,d=this.keyboardMessage(n,s.open,s.method);return{success:a,open:s.open,message:d,...n==="close"&&s.method?{method:s.method}:{},...a?{}:{error:d}}}async settledIOSKeyboardVisibility(n){let s=await this.isIOSKeyboardOnScreen(n,To.IOS_KEYBOARD_VISIBILITY_TIMEOUT_MS);if(s!==!1)return s===!0?"visible":"unknown";let a=!1,d=this.timer.now()+To.IOS_KEYBOARD_SETTLE_TIMEOUT_MS;while(this.timer.now()<d){await P(this.timer.sleep(Math.min(To.IOS_KEYBOARD_SETTLE_INTERVAL_MS,d-this.timer.now())),n),o(n);let c=await this.isIOSKeyboardOnScreen(n,To.IOS_KEYBOARD_VISIBILITY_TIMEOUT_MS);if(c===!0)return"visible";a||=c===!1}return a?"hidden":"hidden_unconfirmed"}async isIOSKeyboardOnScreen(n,s){try{let a=await l(()=>this.hierarchyProvider.getViewHierarchy(n,{timeoutMs:s,forceFresh:!0}),{timer:this.timer,timeoutMs:s,signal:n,label:"iOS keyboard visibility hierarchy"});if(o(n),a?.fresh===!1){e.warn("iOS keyboard visibility hierarchy is stale; using runner state");return}let d=a?.screenWidth,c=a?.screenHeight;if(!a||a.hierarchy?.error||![d,c].every((p)=>typeof p==="number"&&Number.isFinite(p)&&p>0))return;let u=new md(this.parser).collect(a,"ios"),m=u&&pO(u);return!!m&&Kj(m,{width:d,height:c})!==void 0}catch(a){o(n),e.warn("iOS keyboard visibility hierarchy read failed; using runner state",a);return}}async iosFailure(n,s,a,d){if(n==="close"&&/^Keyboard timed out after \d+ms$/.test(s.error??"")&&await this.confirmIOSCloseAfterTimeout(a,d))return{success:!0,open:!1,message:"Keyboard closed after the close request timed out; dismissal method unknown (Return may have submitted the field)"};let c=n==="close"?await this.settledIOSKeyboardVisibility(d):void 0;if(c==="hidden")return e.warn(`iOS keyboard close failed but no software keyboard is visible: ${s.error}`),{success:!0,open:!1,message:"Keyboard is closed (no visible on-screen software keyboard)"};if(c==="hidden_unconfirmed")return this.iosCloseStateUnknown(s);let u=s.error??`Failed to ${n} iOS keyboard`;return{success:!1,open:s.open,message:u,error:u}}iosCloseStateUnknown(n){let s=n.error??"Failed to close iOS keyboard";e.warn(`iOS keyboard close failed and no settle re-read confirmed the keyboard gone: ${s}`);let a=`Keyboard state unknown after close: ${s}. One hierarchy read showed no keyboard, but every re-read timed out or failed, so the keyboard may still be on screen. Run keyboard detect to check.`;return{success:!1,open:n.open,message:a,error:a,reason:"keyboard_state_unknown"}}async confirmIOSCloseAfterTimeout(n,s){try{o(s);let a=await P(l(n.requestKeyboard("detect",To.CLOSE_FOLLOW_UP_DETECT_TIMEOUT_MS,void 0,s),{timer:this.timer,timeoutMs:To.CLOSE_FOLLOW_UP_DETECT_TIMEOUT_MS,label:"Keyboard close follow-up detect"}),s);return a.success&&!a.open}catch(a){return o(s),e.warn(`Keyboard close timeout follow-up detect failed: ${String(a)}`,a),!1}}keyboardMessage(n,s,a){if(n==="detect")return s?"Keyboard is open":"Keyboard is closed";if(n==="open")return s?"Keyboard opened":"Keyboard did not open";if(!s&&a==="returnKey")return"Keyboard closed with Return; the field may have submitted or committed autocorrect";return s?"Keyboard did not close":"Keyboard closed"}async detect(n){let{state:s}=await this.getHierarchyWithState(n);if(s.error)return{success:!1,open:s.open,bounds:s.bounds,message:s.error,error:s.error};return{success:!0,open:s.open,bounds:s.bounds,message:s.open?"Keyboard is open":"Keyboard is closed"}}async open(n){let{hierarchy:s,state:a}=await this.getHierarchyWithState(n);if(a.error)return{success:!1,open:a.open,bounds:a.bounds,message:a.error,error:a.error};if(a.open)return{success:!0,open:!0,bounds:a.bounds,message:"Keyboard already open"};let d=s?this.findFocusedTextInput(s):null;if(!d)return{success:!1,open:!1,message:"No focused text input to open keyboard",error:"No focused text input to open keyboard"};let c=await this.showWithoutTouch(d,s,n);if(c.kind==="unconfirmed"){let y=_("node click",c.error);return{success:!1,open:!1,message:y,error:y}}if(c.kind==="sent")return this.openResult(await this.waitForKeyboardState(!0,n),"Keyboard opened");let u=await this.readCaret(n);await this.tapOnElement(d,n);let m=await this.waitForKeyboardState(!0,n),p=m.open?await this.caretMovedNote(u,n):"";return this.openResult(m,"Keyboard opened",p)}openResult(n,s,a=""){let d=n.open&&!n.error,c=d?`${s}${a}`:n.error??"Failed to open keyboard";return{success:d,open:n.open,bounds:n.bounds,message:c,...n.error?{error:n.error}:{}}}getOpenClient(){return this.openClient??=E.getInstance(this.device,this.adbFactory),this.openClient}async showWithoutTouch(n,s,a){let d=yi(n);if(!d)return this.dispatchNodeClick(this.getOpenClient(),void 0,a);let c;try{c=this.getOpenClient();let u=await k(d,s,n,()=>P(c.supportsNodeActionSelectors(void 0,a),a));if(u)return e.warn(`Keyboard open: node click unavailable (${u})`),{kind:"unavailable"}}catch(u){return o(a),e.warn(`Keyboard open: node click errored: ${r(u)}`,u),{kind:"unavailable"}}return this.dispatchNodeClick(c,d,a)}async dispatchNodeClick(n,s,a){o(a);let d;try{d=s?await n.requestNodeAction("click",s,{signal:a}):await n.requestClickFocusedInput(void 0,void 0,a)}catch(m){return o(a),e.warn(`Keyboard open: node click errored: ${r(m)}`,m),{kind:"unavailable"}}let u=!(!s&&d.error==="Unknown command type: request_click_focused_input")&&d.dispatched===!0&&d.acknowledged!==!0;if(a?.aborted&&u)throw new kv("node click",d.error);if(o(a),d.success)return{kind:"sent"};return e.warn(`Keyboard open: node click failed (${d.error??"unknown error"})`),u?{kind:"unconfirmed",error:d.error}:{kind:"unavailable"}}async readCaret(n){try{let s=await P(this.getOpenClient().requestInsertTextState(),n);return o(n),s.success?s.state:void 0}catch(s){o(n),e.warn(`Keyboard open: caret read failed: ${r(s)}`,s);return}}async caretMovedNote(n,s){if(!n)return"";let a=await this.readCaret(s);if(!a||a.selectionStart===n.selectionStart&&a.selectionEnd===n.selectionEnd)return"";let d=(c)=>`${c.selectionStart}-${c.selectionEnd}`;return` (the tap used to show it moved the caret from ${d(n)} to ${d(a)})`}async close(n){let{state:s}=await this.getHierarchyWithState(n,{timeoutMs:To.STATE_CONFIRMATION_TIMEOUT_MS,forceFresh:!0});if(s.error)return{success:!1,open:s.open,bounds:s.bounds,message:s.error,error:s.error};if(!s.open)return{success:!0,open:!1,message:"Keyboard already closed"};o(n),await P(this.adb.executeCommand("shell input keyevent KEYCODE_BACK",{signal:n}),n);let a=await this.waitForKeyboardState(!1,n),d=!a.open&&!a.error,c=d?"Keyboard closed":a.error??"Failed to close keyboard";return{success:d,open:a.open,bounds:a.bounds,message:c,...a.error?{error:a.error}:{}}}async waitForKeyboardState(n,s){let a=this.timer.now()+To.STATE_CONFIRMATION_TIMEOUT_MS,d=await this.readKeyboardStateBefore(a,s),c;while(!this.isStateSettled(d,c,n)){c=d;let u=a-this.timer.now();if(o(s),u<=0)break;if(await P(this.timer.sleep(Math.min(To.STATE_CONFIRMATION_POLL_INTERVAL_MS,u)),s),o(s),this.timer.now()>=a)break;d=await this.readKeyboardStateBefore(a,s)}return d}isStateSettled(n,s,a){if(n.error||n.open!==a)return!1;if(!a||!n.bounds?.length)return!0;return s?.open===!0&&Q(s.bounds,n.bounds)}async readKeyboardStateBefore(n,s){let{state:a}=await this.getHierarchyWithState(s,{timeoutMs:Math.max(0,n-this.timer.now()),forceFresh:!0});return a}async getHierarchyWithState(n,s){o(n);let a=await P(this.hierarchyProvider.getViewHierarchy(n,s),n);return o(n),{hierarchy:a,state:this.resolveKeyboardState(a)}}resolveKeyboardState(n){if(!n)return{open:!1,error:"No view hierarchy available"};let s=n.windows??[],a=s.length>0,d=s.some((m)=>m.type===To.INPUT_METHOD_WINDOW_TYPE),c=this.findKeyboardWindowBounds(n);if(c)return{open:!0,bounds:[c],source:"window",windowInfoAvailable:a,imeWindowPresent:!0};if((d||!a)&&this.detectKeyboardInHierarchy(n))return{open:!0,source:"heuristic",windowInfoAvailable:a,imeWindowPresent:d};let u=n.hierarchy?.error;if(u)return{open:!1,error:u};return{open:!1}}findKeyboardWindowBounds(n){let s=n.windows??[];for(let a of s){if(a.type!==To.INPUT_METHOD_WINDOW_TYPE)continue;if(a.bounds&&this.isValidBounds(a.bounds))return a.bounds}return null}isValidBounds(n){return n.right>n.left&&n.bottom>n.top}detectKeyboardInHierarchy(n){let s=this.parser.extractRootNodes(n),a=["delete","enter","keyboard","emoji","shift"];for(let d of s){let c=!1;if(this.parser.traverseNode(d,(u)=>{if(c)return;let m=this.parser.extractNodeProperties(u),p=this.getStringProp(m,"resource-id","resourceId"),y=this.getStringProp(m,"content-desc","contentDesc"),h=p?.toLowerCase(),b=y?.toLowerCase();if(h&&(h.includes("keyboard")||h.includes("inputmethod"))){c=!0;return}if(b&&a.some((I)=>b.includes(I)))c=!0}),c)return!0}return!1}getStringProp(n,s,a){let d=n[s];if(typeof d==="string")return d;let c=n[a];if(typeof c==="string")return c;return}findFocusedTextInput(n){let s=this.finder.findFocusedTextInput(n);if(!s||!s.bounds)return null;return s}async tapOnElement(n,s){let a=this.geometry.getElementCenter(n),d=Math.round(a.x),c=Math.round(a.y);o(s);try{await this.adb.executeCommand(`shell input tap ${d} ${c}`,{signal:s,waitForProcessSettlementAfterAbort:!0})}catch(u){if(s?.aborted)throw new kv("tap",r(u));throw u}}}function j(n){return n==="hidden"||n==="hidden_unconfirmed"}
|
|
4
|
+
export{kv,To,VL,Ev};
|
|
5
|
+
|
|
6
|
+
//# debugId=8A0263C70107398B64756E2164756E21
|
|
@@ -0,0 +1,4 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{PU,$ae,Uae}from"./chunk-710rxz9y.js";import"./chunk-0qsy1qsx.js";import"./chunk-5d2hft6c.js";import"./chunk-z637nqg8.js";import"./chunk-58wzr3mt.js";export{Uae as guardDatabaseStartup,PU as handleFatalDatabaseStartupFailure,$ae as resolveDaemonStartupExitCode};
|
|
3
|
+
|
|
4
|
+
//# debugId=FB5724A7D73A42A264756E2164756E21
|