@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,6 @@
|
|
|
1
|
+
// @bun
|
|
2
|
+
import{i,Qe,fn,te,l,e}from"./chunk-z637nqg8.js";import{B,Yt,_e}from"./chunk-yf7ympyz.js";import{Zte,YL,R,pre,cp,eD,dg,Ov,BT,$T,Nw,Fw,Lw,VT,ps,Mre,H,V,re,ie,v,z,L,b,wg,bD,hne,Ze,aR,Nz,Pg,gne,dk,cn,st,Gr,fe,Si,kg,FB,_c,N,ku,ef,cb,Hne,ii,it,$R,Fk,Yi,vb,Kk,D$,XR,Sd,x,E}from"./chunk-r5bxavdx.js";import{ww,Er,sr,ol,kte,Pw,Cte,Om,Nm,It}from"./chunk-0qsy1qsx.js";import{j8}from"./chunk-6awz7vhq.js";import{Tr}from"./chunk-e98dqnc9.js";import{$P,UP,qM,Wl,KM,Xp,JX,oH,XM,Lo,ic,Ii,q,QX,zf,jf,lH,w6,tZ,jP,rZ,_s,pI,sZ,gZ,wy,iN,ui,IH,F,pN,Ks,Ry,I6,_6,go,vZ,bZ,SZ}from"./chunk-h5rpn9wr.js";import{Cn}from"./chunk-5d2hft6c.js";import{y,j,g,ne,A,Dl}from"./chunk-4hw3665t.js";import{Dt,Hc,Rt,sh,bQ,mc}from"./chunk-hrfytkxh.js";import{rM,CU,PE,TP,OJ,MJ,AE,nM,DU,iM,Vb,jK,Wb,NJ}from"./chunk-jd6a5v6p.js";import{zb,HJ,NU,FU,CE,mM,XJ,DE,fM,ZJ,QJ,Fd,e8,t8,o8,s8,qu,a8,aG,Kb,rs,Ld,Of,qU,VU,c8,Gb,WU,d8,l8,zU,wG,DP,a1,c1,d1,l1,u1,RG,hn,p1,m1,f1,h1,PG,q8,V8,uy,TM,W8,py,OP,kM,EM,A1,VE,k1,E1,I1,EG,IG,_G,IM}from"./chunk-11m8wj8j.js";import{Zu,pm,mm}from"./chunk-0n6swkwg.js";import{z4,IQ,K4,_Q,xQ,G4,p_,Xy,Zy,$S,VQ,ru,G}from"./chunk-64j0majr.js";import{hh,NA}from"./chunk-2f9rkmhx.js";import{RT}from"./chunk-3xkpk44w.js";import{wo,cte}from"./chunk-7rz9898k.js";import{eA,fN,Lr,hN,gN,C6,AZ}from"./chunk-w5b2jwk3.js";import{Kl,$y,Jt,VN}from"./chunk-0jrrsnc9.js";import{rA,_y,FZ,aA,Oy}from"./chunk-3qwrzxh0.js";import{Bd,DM,sX,Wu,aX}from"./chunk-w3vs79ex.js";import{ZE,Fc,yX}from"./chunk-qf6nynk6.js";import{pae}from"./chunk-6wt9rgjf.js";import{r,t}from"./chunk-rbpdk7m0.js";var Ct={"tools/list":{ttlMs:5000,cacheScope:"private"},"server/discover":{ttlMs:60000,cacheScope:"private"}};var li=new Set(["observe"]);class Be{tracker;scopeProvider;constructor(o,n){this.tracker=o;this.scopeProvider=n}evaluate(o){let n=this.scopeProvider.getScope();if(o.readOnly===!0||li.has(o.toolName))return{blocked:!1,scope:n};if(!this.tracker.hasActiveToolExecution("executePlan",{scope:n,sessionId:o.sessionId,sessionUuid:o.sessionUuid}))return{blocked:!1,scope:n};return{blocked:!0,scope:n,reason:"plan execution in progress"}}}class $e{getScope(){return N.getPlanExecutionLockScope()}}var Et=()=>new Be(G,new $e);var pi=60000,mi=1024,gi={subscribeReleases:()=>()=>{},onBindingChanged:()=>{}};class ue{deps;acquiredSessions=new Map;boundDeviceSessions=new Map;releasedDeviceSessions=new Map;toolSelectionProfiles=new Map;attached=new Set;forgottenUntil=new Map;unsubscribeReleases;constructor(o=gi){this.deps=o}attach(o){return this.unsubscribeReleases??=this.deps.subscribeReleases((n)=>{if(this.releaseSession(n))this.deps.onBindingChanged()}),this.attached.add(o),()=>{this.attached.delete(o)}}dispose(){this.unsubscribeReleases?.(),this.unsubscribeReleases=void 0,this.attached.clear()}get attachedCountForTesting(){return this.attached.size}get keyCount(){return new Set([...this.acquiredSessions.keys(),...this.boundDeviceSessions.keys(),...this.releasedDeviceSessions.keys(),...this.toolSelectionProfiles.keys()]).size}boundSessionUuid(o){return this.boundDeviceSessions.get(o)}releasedSessionUuid(o){return this.releasedDeviceSessions.get(o)}acquiredSessionUuids(o){return this.acquiredSessions.get(o)??new Set}toolSelectionProfileUuid(o){return this.toolSelectionProfiles.get(o)}bind(o,n){if(this.isForgotten(o))return e.debug(`ignoring bind for forgotten session key ${o}`),!1;let s=this.acquiredSessions.get(o);if(!s)s=new Set,this.acquiredSessions.set(o,s);if(s.add(n),this.boundDeviceSessions.get(o)===n)return!1;return this.boundDeviceSessions.set(o,n),this.releasedDeviceSessions.delete(o),!0}bindToolSelectionProfile(o,n){if(this.isForgotten(o))return e.debug(`ignoring tool-selection profile bind for forgotten session key ${o}`),!1;if(this.toolSelectionProfiles.get(o)===n)return!1;return this.toolSelectionProfiles.set(o,n),!0}forget(o){this.acquiredSessions.delete(o),this.boundDeviceSessions.delete(o),this.releasedDeviceSessions.delete(o),this.toolSelectionProfiles.delete(o),this.tombstone(o)}get timer(){return this.deps.timer??i}tombstone(o){this.forgottenUntil.delete(o),this.pruneTombstones();while(this.forgottenUntil.size>=mi){let n=this.forgottenUntil.keys().next().value;if(n===void 0)break;this.forgottenUntil.delete(n)}this.forgottenUntil.set(o,this.timer.now()+pi)}pruneTombstones(){let o=this.timer.now();for(let[n,s]of this.forgottenUntil){if(s>o)break;this.forgottenUntil.delete(n)}}isForgotten(o){return this.pruneTombstones(),this.forgottenUntil.has(o)}releaseSession(o){if(!o)return!1;let n=!1;for(let[s,a]of this.acquiredSessions)if(n=a.delete(o)||n,a.size===0)this.acquiredSessions.delete(s);for(let[s,a]of this.boundDeviceSessions)if(a===o)this.boundDeviceSessions.delete(s),this.releasedDeviceSessions.set(s,o),n=!0;for(let s of this.attached)n=s.releaseLocalSession(o)||n;return n}}class qe{idGenerator;directAcquiredSessions=new Set;initialSessionUuid;releasedInitialSessionUuid;directDeviceSessionUuid;releasedDirectDeviceSessionUuid;initialToolSelectionProfileUuid;directToolSelectionProfileUuid;detachFromStore;namesLiveSessionOfBoundPlan;store;constructor(o,n,s=B,{initialReleasedSessionUuid:a,namesLiveSessionOfBoundPlan:d=()=>!1,store:c=new ue}={}){this.idGenerator=s;this.initialSessionUuid=o,this.initialToolSelectionProfileUuid=n,this.releasedInitialSessionUuid=a,this.namesLiveSessionOfBoundPlan=d,this.store=c,this.detachFromStore=c.attach(this)}dispose(){this.detachFromStore()}boundSessionUuid(o){if(o)return this.store.boundSessionUuid(o)??this.initialSessionUuid;return this.directDeviceSessionUuid??this.initialSessionUuid}effectiveSessionUuid(o,n,s){let a=n&&typeof n==="object"&&!Array.isArray(n)?n.sessionUuid:void 0,d=Wl(a),c=this.boundSessionUuid(o);if(this.initialSessionUuid&&d&&d!==this.initialSessionUuid&&d!==this.connectionToolSelectionProfileUuid(o)&&!this.namesLiveSessionOfBoundPlan(d,this.initialSessionUuid))if(s?.readOnly)s.onReadOutsideBoundSession();else throw new jf(this.initialSessionUuid,d,`MCP connection is bound to device session ${this.initialSessionUuid}; cannot route this call to ${d} until the binding is released. Use a separate MCP connection for ${d}.`);return d??c}resolveDeviceSessionUuid(o,n,s,{selectingActiveDevice:a,deferForeignDevice:d=!1,readOnly:c}={}){let u=this.effectiveSessionUuid(o,n,{readOnly:c,onReadOutsideBoundSession:()=>{}}),m=n.platform==="android"||n.platform==="ios"?n.platform:void 0,p=typeof n.deviceId==="string"?n.deviceId:void 0;if(!m&&!p||n.device)return u;let f=(S)=>(!m||S.platform===m)&&(!p||S.deviceId===p);if(n.sessionUuid)return u;if(this.initialSessionUuid)return fi(s(this.initialSessionUuid),f,u,{deferForeignDevice:d&&p!==void 0,requested:{deviceId:p,platform:m}}),u;return this.resolveAcquiredDeviceSession(o,s,f,{deviceId:p,rebindFallback:u,selectingActiveDevice:a})}resolveAcquiredDeviceSession(o,n,s,{deviceId:a,rebindFallback:d,selectingActiveDevice:c=!1}){let u=[...this.acquiredSessionUuids(o)].flatMap((p)=>{let f=n(p);return f?[{sessionUuid:p,...f}]:[]});if(u.length===0)return;let m=u.filter(s);if(m.length===0&&c&&d&&u.some((p)=>p.sessionUuid===d))return d;if(m.length===0)return;if(m.length===1)return m[0].sessionUuid;throw Error(`Cannot resolve requested platform/deviceId unambiguously. Candidate sessions: ${m.map((p)=>`${p.sessionUuid} (${p.deviceId}, ${p.platform})`).join(", ")}. Pass an explicit sessionUuid/deviceId.`)}acquiredSessionUuids(o){return o?this.store.acquiredSessionUuids(o):this.directAcquiredSessions}ownsSession(o,n){return this.initialSessionUuid===n||this.acquiredSessionUuids(o).has(n)}boundDeviceSessionUuid(o){return this.boundSessionUuid(o)}releasedResourceSessionUuid(o){if(this.boundSessionUuid(o))return;if(o)return this.store.releasedSessionUuid(o)??this.releasedInitialSessionUuid;return this.releasedDirectDeviceSessionUuid??this.releasedInitialSessionUuid}effectiveToolSelectionProfileUuid(o,n){return this.connectionToolSelectionProfileUuid(o)??this.effectiveSessionUuid(o,n)}connectionToolSelectionProfileUuid(o){return o?this.store.toolSelectionProfileUuid(o)??this.initialToolSelectionProfileUuid:this.directToolSelectionProfileUuid??this.initialToolSelectionProfileUuid}bind(o,n){if(!n?.trim())return!1;if(this.initialSessionUuid&&n!==this.initialSessionUuid)return!1;if(o)return this.store.bind(o,n);if(this.directAcquiredSessions.add(n),this.directDeviceSessionUuid===n)return!1;return this.directDeviceSessionUuid=n,this.releasedDirectDeviceSessionUuid=void 0,!0}createAndBindToolSelectionProfile(o){let n=this.idGenerator.next();return this.bindToolSelectionProfile(o,n),n}bindToolSelectionProfile(o,n){if(!n?.trim())return!1;if(o)return this.store.bindToolSelectionProfile(o,n);if(this.directToolSelectionProfileUuid===n)return!1;return this.directToolSelectionProfileUuid=n,!0}unbindSession(o){let n=this.store.releaseSession(o);return this.releaseLocalSession(o)||n}releaseLocalSession(o){if(!o)return!1;let n=this.directAcquiredSessions.delete(o);if(this.initialSessionUuid===o)this.initialSessionUuid=void 0,this.releasedInitialSessionUuid=o,n=!0;if(this.directDeviceSessionUuid===o)this.directDeviceSessionUuid=void 0,this.releasedDirectDeviceSessionUuid=o,n=!0;return n}}function fi(o,n,s,{deferForeignDevice:a,requested:d}){if(!o||n(o)||a)return;throw new zf(s,o,d)}var je;function Pt(o){je=o}function SE(o){if(!je)throw new t("The session tool-binding store is not installed in this process. Load src/server/daemonSessionToolBindingStore before the daemon forgets binding scopes.");je().forget(o)}function He(){return new ue({subscribeReleases:(o)=>{let n=F.registerSessionBindingReleaseHandler({onSessionReleased:o}),s=Si.subscribe((a)=>o(a));return()=>{n(),s()}},onBindingChanged:()=>F.notifyToolSelectionChanged()})}var At;function Ke(){return At??=He(),At}Pt(Ke);function Ve(o){return o.formFactor==="tv"||o.platform==="tvos"}async function yi(o,n,s){let[a,d]=await Promise.all([o.isEnabled(n,s,!1),o.isEnabled(n,s,!0)]);return!a&&d}async function xt(o,n,{device:s,tvTools:a}){if(!Ve(s))return[];let d=await Promise.all(a.map((c)=>yi(o,n,c)));return a.filter((c,u)=>d[u])}function vi(o){if(!R.isInitialized())cte(o);throw new t("MCP request was cancelled during acquisition.")}function wt(o,n){if(!Lr(o)||!n||typeof n!=="object")return[];let s=n.enableTools;if(!Array.isArray(s)||s.length===0)return[];let a=s.filter((d)=>typeof d==="string");return I1(a),a}async function Nt(o,n,s){if(s.length===0)return{};try{let a=await IG(o,n,s,!0);if(a.requested.length>0)F.notifyToolSelectionChanged();return a.skipped.length>0?{skipped:a.skipped}:{}}catch(a){let d=`Could not enable ${s.join(", ")} for session ${n}: ${r(a)}. The device session is usable; re-declare the capabilities with ${Rt}.`;return e.warn(`[MCP] ${d}`,a),{enableToolsError:d}}}async function kt(o,n,s,a){let d={platform:C6(s),formFactor:AZ(s)};if(!Ve(d))return[...a];try{let c=await xt(o??mc(),n,{device:d,tvTools:F.getAllTools().filter((u)=>u.defaultEnabledOnTv===!0).map((u)=>u.name)});return[...new Set([...a,...c])]}catch(c){return e.warn(`[MCP] Could not read the form-factor tool defaults for session ${n}: ${r(c)}`,c),[...a]}}function Mt(o,n){return n.enableToolsError||n.skipped?ve(o,n):o}async function Ot(o,n,s,{service:a,enableTools:d,connectionProfileUuid:c}){if(o!=="provisionDevice"||!s)return n;let u=await Nt(a,s,await kt(a,s,n,d));try{return ve(n,{enabledTools:_t(n,await _G(a,[s],{connectionProfileUuid:c,labelSessionUuids:[]})),...u})}catch(m){return e.warn("[MCP] Could not enrich provisionDevice with enabled tools",{error:m}),Mt(n,u)}}function _t(o,n){let s=C6(o);return s===void 0?[...n]:rZ(n,s,(a)=>F.getRegisteredTool(a)?.deviceAwareHandler!==void 0)}function ve(o,n){let s=!1;return FB(o,{...o,content:o.content.map((a)=>{if(s||a.type!=="text"||typeof a.text!=="string")return a;return s=!0,{...a,text:_c({...JSON.parse(a.text),...n})}}),...o.structuredContent?{structuredContent:{...o.structuredContent,...n}}:{}})}async function hi(o,n){if(!n)return o;if(n.aborted)throw o.catch(()=>{return}),new t("MCP request was cancelled during acquisition.");try{return await l(o,{timer:i,signal:n,label:"MCP request acquisition"})}catch(s){if(n.aborted&&s===n.reason)throw new t("MCP request was cancelled during acquisition.");throw s}}function Ri(o){return o==="getAndroid"||o==="getApple"||o==="startDevice"}async function Ut(o){let{toolName:n,acquiredSessionUuid:s,requestSignal:a}=o,d=o.result;if(!Ri(n)||d?.isError||!s)return d;let c=!1,u=await Nt(o.sessionToolSelectionService,s,await kt(o.sessionToolSelectionService,s,d,o.requestedEnableTools));try{let m=new Set((await hi(o.listSessionTools(s),a)).tools.map((h)=>h.name)),p=_t(d,F.getAllTools().filter((h)=>F.isUserConfigurableTool(h.name)).map((h)=>h.name).sort()),f=p.filter((h)=>!m.has(h)),S=p.filter((h)=>m.has(h));d=ve(d,{gatedTools:f,enabledTools:S,...u})}catch(m){c||=Boolean(a?.aborted),e.warn("[MCP] Could not enrich acquisition with gated tools",{tool:n,error:m}),d=Mt(d,u)}if(c||a?.aborted)vi(s);return d}function he(o,n){let s=N.isToolResultsNoStructuredContentEnabled();if(!n)return s;try{return o.getToolResultsNoStructuredContent(n)??s}catch(a){return e.warn("[MCP] Could not resolve connection structured-content preference",{connectionProfileUuid:n,error:a}),s}}function Ft(o,n,s){if(!n||s===void 0)return;try{o.setToolResultsNoStructuredContent(n,s)}catch(a){e.warn("[MCP] Could not store connection structured-content preference",{connectionProfileUuid:n,error:a})}}function Lt(o,n){let s=N.isActionsCompactMetadataEnabled();if(!n)return s;try{return o.getActionsCompactMetadata(n)??s}catch(a){return e.warn("[MCP] Could not resolve connection compact-metadata preference",{connectionProfileUuid:n,error:a}),s}}function Bt(o,n,s){if(!n)return s;try{return o.getPrototypeFullSchema(n)??s}catch(a){return e.warn("[MCP] Could not resolve connection prototype schema preference",{connectionProfileUuid:n,error:a}),s}}function $t(o,n,s){if(!n||s===void 0)return;try{o.setPrototypeFullSchema(n,s)}catch(a){e.warn("[MCP] Could not store connection prototype schema preference",{connectionProfileUuid:n,error:a})}}function qt(o,n,s){if(!n||s===void 0)return;try{o.setActionsCompactMetadata(n,s)}catch(a){e.warn("[MCP] Could not store connection compact-metadata preference",{connectionProfileUuid:n,error:a})}}var bi="prototype",jt=new WeakMap,Ti={inline(o){let n=jt.get(o);if(n)return n;let{withFullAdvertisedSpecSchema:s}=import.meta.require("./chunk-hb1x7v55.js"),a=s(o);return jt.set(o,a),a}},Ht={daemonDefault:NA,inliner:Ti};function Kt(o,n,s){if(!n||s.daemonDefault.isEnabled())return o;return o.map((a)=>a.name===bi?{...a,inputSchema:s.inliner.inline(a.inputSchema)}:a)}function Vt(o){let{options:n,bindingKey:s,sessionToolBinding:a,toolSelectionProfileRegistry:d}=o,c=o.daemon??R,u=o.prototypeSchema??Ht;return async(m=a.effectiveSessionUuid(s))=>{let p=a.connectionToolSelectionProfileUuid(s),f=n.toolSelectionSessionManager??c.sessionManager(),S=st(m,f),h=Kt(F.getToolDefinitions({suppressOutputSchema:he(d,p)}),Bt(d,p,u.daemonDefault.isEnabled()),u),T=S?Array.from(new Set(Object.values(f?.getDeviceLabels(S)??{}))):[];return{tools:(await Promise.all(h.map(async(I)=>{let C=F.getTool(I.name),w=C?.requiresDevice??!1,M=k1(w,S,T,[S,m]);return sh(I.name)||await E1(I.name,C?.defaultEnabled??!0,M,{sessionToolSelectionService:n.sessionToolSelectionService,connectionProfileUuid:p})?I:void 0}))).filter((I)=>I!==void 0)}}}function Re(o){let s=(!o.daemonMode||o.requiresDevice?void 0:R.brokerConnectionScopes())?.get(o.mcpSessionId),a=s?R.sessionManager():void 0;if(!s||!a)return;let d=YL({binding:s,toolName:o.toolName,args:o.args&&typeof o.args==="object"?o.args:{},requesterSessionUuid:o.sessionUuid?st(o.sessionUuid,a)??o.sessionUuid:void 0,grantedDeviceOf:(c)=>a.findSession(c)?.assignedDevice});if(d)throw d}function Gt(o,n,s=R){let a=G.getAdmittedSessionUse(n),d=s.sessionManager(),c=st(a,d)??a,u=bZ(o,c),p=(a?d?.peekSession(a):void 0)??(c?d?.peekSession(c):void 0);return p?vZ(u,VN(p)):u}function zt(o,n,s,a){if(a&&o.deviceHeldForLateRead(n,s)!==void 0)return;return o.getSessionForNewExecution(n,s)}async function Wt(o,n){let{name:s,tool:a,providedSessionUuid:d,execution:c}=o;if(!n.daemonMode||!d||a.requiresDevice||Lr(s)||a.selectsActiveDevice===!0||s===Rt&&n.toolSelectionProfileRegistry.has(d))return;let u=w6(d,o.context.requestMcpSessionId);if(await R.requireSessionManager().admitIssuedSessionForAutomation(d,ru(c),{...tZ(n.plainReadCall,u),signal:V()}),u)G.markReadOnlySessionAccess(c.id);else G.markSessionAdmitted(c.id)}function Qt(o){let n=new Set;if(!Lr(o))return{released:n,cleanup:void 0};let s=(c)=>{n.add(c)},a=F.registerSessionBindingReleaseHandler({onSessionReleased:s}),d=Si.subscribe(s);return{released:n,cleanup:()=>{try{a()}finally{d()}}}}function Xt(o,n){if(o.tool.selectsActiveDevice===!0&&!n?.isError&&o.sessionToolBinding.bind(o.sessionId,gN(n)?.sessionUuid??o.routingSessionUuid))F.notifyToolSelectionChanged()}function Ci(o,n){if(o!=="videoRecording"||!n||typeof n!=="object")return!1;let s=n;return s.action==="stop"&&typeof s.recordingId==="string"}function Ei(o,n,s){if(!n)return wo(o)!==void 0;return s!==null&&s!==void 0&&n.isAdmittedForAutomation(s)}async function Zt(o,n){let{name:s,tool:a,providedSessionUuid:d,sessionId:c,sessionToolBinding:u}=o,{implicitAutolockMcpSessionId:m}=o,p=Ci(s,o.parsedParams),f=Ni(),S=a.isDeviceReadOnlyCall?.(o.parsedParams)===!0,h=wi(o,{daemonSessionManager:f,skip:n.readOutsideBoundSession||p,readOnlyCall:S});if(!d||Ai(s,n,p)||f!==void 0&&Di(d,m)||!Ei(d,f,h))return;if(u.bind(c,d))F.notifyToolSelectionChanged();if(a.requiresDevice&&!S&&f)await Pi(d,m)}async function Pi(o,n){if(n)await R.requireDevicePoolWrites().attachExplicitSessionUuidCall(o,n)}function Di(o,n){return R.requireFullDevicePool().isSessionOwnedByOtherConnection(o,n)}function Ai(o,n,s){return xi(o)||n.readOutsideBoundSession||Boolean(n.result?.isError)||s}function xi(o){return Lr(o)||go(o)||o===Rt}function wi(o,n){let{daemonSessionManager:s}=n;return s&&o.providedSessionUuid&&!n.skip&&!go(o.name)?zt(s,o.providedSessionUuid,ru(o.execution),n.readOnlyCall):void 0}function Ni(o=R){return o.sessionManager()}import{timingSafeEqual as ki}from"crypto";function Mi(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[eD];return typeof n==="string"?n:void 0}function Oi(o){return!!o&&typeof o==="object"&&!Array.isArray(o)&&o[VT]===!0}function _i(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[cp];return typeof n==="number"&&Number.isFinite(n)&&n>0?n:void 0}function Ui(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[dg];return typeof n==="number"&&Number.isFinite(n)&&n>0?n:void 0}function Fi(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[Ov];return typeof n==="string"&&n.length>0?n:void 0}function Li(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[Nw];return typeof n==="boolean"?n:void 0}function Bi(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[Fw];return typeof n==="boolean"?n:void 0}function $i(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[Lw];return typeof n==="boolean"?n:void 0}function qi(o,n){if(!n||!o||typeof o!=="object"||Array.isArray(o))return;let s=o,a=s[$T];if(typeof a!=="string"||a.length!==n.length||!ki(Buffer.from(a),Buffer.from(n)))return;let d=s[BT];return d==="forward"||d==="reverse"?d:void 0}function ji(o,n){let s=Mi(o);if(s===void 0)return;return n.trustForwardedSessionId===!0?s:n.sessionKey??s}function eo(o,n){let{daemonMode:s}=n;return{requestMcpSessionId:s?ji(o,n):void 0,requestOneShotCli:s&&Oi(o),requestedToolResultsNoStructuredContent:s?Li(o):void 0,requestedActionsCompactMetadata:s?Bi(o):void 0,requestedPrototypeFullSchema:s?$i(o):void 0,requestTimeoutMs:s?_i(o):void 0,requestDeadlineMs:s?Ui(o):void 0,requestLiveDeadlineKey:s?Fi(o):void 0,requestAcceptanceDiscoveryOrder:s?qi(o,n.acceptanceDiscoveryCapability):void 0}}function Hi(o){let{parsedParams:n}=o;return{...n,...o.tool.selectsActiveDevice===!0&&o.routingSessionUuid?{sessionUuid:o.routingSessionUuid}:{}}}function Ki(o){let{context:n,execution:s}=o;return{startTime:s.startTime,...n.requestTimeoutMs!==void 0?{timeoutMs:n.requestTimeoutMs}:{},...n.requestDeadlineMs!==void 0?{deadlineMs:n.requestDeadlineMs}:{},...n.requestLiveDeadlineKey!==void 0?{liveDeadlineKey:n.requestLiveDeadlineKey}:{}}}async function to(o){let{name:n,tool:s,toolParams:a,execution:d,sessionId:c,sessionToolBinding:u,options:m}=o,p=Hi(o),f=s.supportsProgress?o.progress:void 0,S=()=>ol({explicitObserveDeviceRead:n==="observe"&&Object.hasOwn(a,"deviceId")&&!o.providedSessionUuid&&!o.handlerRoutingSessionUuid,routingSessionUuid:o.handlerRoutingSessionUuid,callerMcpSessionId:o.context.requestMcpSessionId,autolockMcpSessionId:o.implicitAutolockMcpSessionId,oneShotCli:o.context.requestOneShotCli?!0:void 0,acceptanceDiscoveryOrder:o.context.requestAcceptanceDiscoveryOrder,deviceConnectionKey:o.bindingKey,ownsDeviceSession:(T)=>u.ownsSession(c,T),execution:{deviceBinding:{bindDeviceExecution:(T)=>G.bindDeviceExecution(d.id,T)},...ru(d)},requestDeadline:Ki(o),toolSelectionProfileUuid:o.connectionProfileUuid,actionsCompactMetadata:o.actionsCompactMetadata,labelSessionUuids:o.labelSessionUuids,routingBaseSessionUuid:o.routingBaseSessionUuid,sessionToolSelectionService:m.sessionToolSelectionService??(n==="executePlan"?mc():void 0)},()=>s.handler(p,f,o.requestSignal));return await D$({textState:o.textState,getDeadlineMs:o.getRequestDeadlineMs},()=>H(o.requestSignal,S))}class be extends t{data;constructor(o,n){super(`Unknown tool: ${o}${n?`. ${n}`:""}`);this.name="UnknownToolError",this.data={code:pm,toolName:o}}}class Ge extends t{data;constructor(o,n){let s=n.join("; ");super(`Unknown tool: ${o}${s?`. ${s}`:""}`);this.name="ToolUnavailableError",this.data={code:Zu,toolName:o}}}function Je(o){if(o===null||typeof o!=="object"||!("data"in o))return;let n=o.data;return n!==null&&typeof n==="object"&&"code"in n?n.code:void 0}function EJ(o){return Je(o)===Zu}function IJ(o){if(Je(o)!==pm)return;let n=Reflect.get(o,"data"),s=n!==null&&typeof n==="object"?Reflect.get(n,"toolName"):void 0;return typeof s==="string"?s:""}function _J(o){return Je(o)===mm}function Te(o,n){return!!R.sessionManager()?.isLiveSessionOfSamePlan(o,n)}function oo(o,n){let s=F.getTool(o);if(!s){let a=F.getRegisteredTool(o);if(a)throw new Ge(o,F.getToolAvailabilityGateReasons(a));throw new be(o,$P(o))}if(o===Rt){let a=n;if(typeof a.toolName==="string"&&a.toolNames===void 0||Array.isArray(a.toolNames)&&a.toolNames.every((d)=>typeof d==="string"))I1(EG(a))}return s}function ze(o){return typeof o==="string"&&o.trim().length>0?o:void 0}function Vi(o,n,s){let{tool:a,implicitAutolockMcpSessionId:d}=o,c=ro(n.platform),u=typeof n.deviceId==="string"?n.deviceId:void 0,m=s.resolveAutolockSessionForMcpSession(d,c,void 0,u);if(!m&&a.selectsActiveDevice===!0)m=s.resolveAutolockSessionForMcpSession(d);return{routingSessionUuid:m,resolvedImplicitAutolockSessionUuid:m}}function ro(o){return o==="android"||o==="ios"?o:void 0}function Gi(o){let n=R.sessionManager()?.peekSession(o);return n?.assignedDevice?R.devicePool()?.getDevice(n.assignedDevice)?.platform:void 0}function Ji(o){let n=R.sessionManager(),s=R.devicePool();if(!n||!s)return wo(o)?.device;let a=n.getSession(o);if(!a||!n.isAdmittedForAutomation(a)||!a.assignedDevice)return;let d=s.getDevice(a.assignedDevice);return d?{deviceId:d.id,platform:d.platform}:void 0}function zi(o,n){let{name:s,tool:a,toolParams:d,sessionId:c,daemonMode:u,sessionToolBinding:m}=o,p=o.context.requestMcpSessionId,f=u?R.brokerConnectionScopes()?.get(p):void 0,S=Zte({binding:!n.deviceId&&!n.device&&!n.sessionUuid?f:void 0,action:s,platform:ro(n.platform),grantedPlatformOf:Gi});if(S)throw S;let h=a.isDeviceReadOnlyCall?.(d)===!0;return{routingSessionUuid:m.resolveDeviceSessionUuid(c,d,Ji,{selectingActiveDevice:a.selectsActiveDevice===!0,deferForeignDevice:a.selectsActiveDevice!==!0&&(h||f!==void 0),readOnly:h}),resolvedImplicitAutolockSessionUuid:void 0}}function io(o,n,s){let{name:a,tool:d,toolParams:c,daemonMode:u,implicitAutolockMcpSessionId:m}=o,p={routingSessionUuid:n,resolvedImplicitAutolockSessionUuid:void 0};if(d.selectsActiveDevice===!0)Re({daemonMode:u,requiresDevice:!1,toolName:a,mcpSessionId:o.context.requestMcpSessionId,args:c,sessionUuid:ze(c.sessionUuid)});if(!(d.requiresDevice&&!Lr(a)||d.selectsActiveDevice===!0))return p;let f=c,S=R.devicePool();if(S&&m&&!s&&!f.sessionUuid&&!f.device)return Vi(o,f,S);return zi(o,f)}function Wi(o,n){return o?R.devicePool()?.resolveAutolockSessionForMcpSession(n):void 0}function no(o){let{name:n,tool:s,toolParams:a,sessionId:d,sessionToolBinding:c}=o;if(!s.requiresDevice||Lr(n))return!1;let u=ze(a.sessionUuid),m=c.boundDeviceSessionUuid(d)??Wi(u,o.implicitAutolockMcpSessionId);if(!m||!u||u===m||c.ownsSession(d,u)||Te(u,m))return!1;if(s.isDeviceReadOnlyCall?.(a)===!0)return!0;throw new jf(m,u)}function Qi(o){let{scope:n,toolSelectionProfileRegistry:s}=o,{name:a,toolParams:d,sessionId:c,sessionToolBinding:u,context:m}=n,p=a===Rt,f=typeof d.sessionUuid==="string"?d.sessionUuid:void 0,S=o.initialConnectionProfileUuid;if(p&&!S&&!f?.trim().length)S=u.createAndBindToolSelectionProfile(c),s.record(S);return Ft(s,S,p?m.requestedToolResultsNoStructuredContent:void 0),qt(s,S,p?m.requestedActionsCompactMetadata:void 0),$t(s,S,p?m.requestedPrototypeFullSchema:void 0),{connectionProfileUuid:S,requestedToolSelectionProfileUuid:f,toolResultsNoStructuredContent:he(s,S),actionsCompactMetadata:Lt(s,S)}}function Xi(o,n=R){return o.toolSelectionSessionManager??n.sessionManager()}function Zi(o,n,s){let{connectionProfileUuid:a,requestedToolSelectionProfileUuid:d}=n;return o.name===Rt&&d!==void 0&&d===a?o.sessionToolBinding.boundDeviceSessionUuid(o.sessionId)??s:s}function so(o){let{scope:n,options:s,routingSessionUuid:a}=o,{name:d,tool:c,toolParams:u}=n,m=Qi(o),{connectionProfileUuid:p}=m,f=ze(u.device),S=Xi(s),h=Zi(n,m,a),T=go(d),I=T?h:st(h,S),C=I?S?.getDeviceLabels(I):void 0;return{connectionProfileUuid:p,toolResultsNoStructuredContent:m.toolResultsNoStructuredContent,actionsCompactMetadata:m.actionsCompactMetadata,requestedDeviceLabel:f,routingBaseSessionUuid:I,derivedLabelSessionUuid:c.requiresDevice&&f?C?.[f]:void 0,labelSessionUuids:T?[]:Array.from(new Set(Object.values(C??{})))}}var en=(o)=>{let n=E.getExistingInstance(o);return n?.isLastConnectionFailureForwardingLeaseConflict()?n.getLastConnectionFailureMessage():void 0};function tn(o){let n=[],s=o;while(s instanceof Error&&n.length<8&&!n.includes(s))n.push(s),s=s.cause;return n}function ao(o,n,s=en){let a=tn(o),d=a.find((u)=>u instanceof kg),c=d?.message??(a.some((u)=>u instanceof RT)?[...n??[]].map(s).find((u)=>u!==void 0):void 0);if(c===void 0)return;if(o!==d&&r(o).includes(c))return;return new t(c,{cause:o})}async function on(o,n,s=R){let a=o;try{let d=o.incidentId?s.devicePool():void 0;if(o.incidentId&&d){let c=await d.waitForEmulatorLossIncident(o.incidentId,n);a=_Q(o,c)}}catch(d){e.warn(`[MCP] Failed to resolve device-loss incident ${o.incidentId}`,d)}try{let d=a.sessionUuid?s.sessionManager()?.peekSession(a.sessionUuid):void 0;return xQ(a,d)}catch(d){return e.warn("[MCP] Failed to read session for device-loss continuity",d),a}}function We(o){return{content:[{type:"text",text:JSON.stringify(o)}],isError:!0}}async function co(o,n){let{toolName:s,execution:a}=n;if(o instanceof $y){let m=p_(),p={content:[{type:"text",text:JSON.stringify(m)}],structuredContent:m,isError:!0};return n.daemonMode?p:Wb(p,Vb(UP(n.tool),n.toolResultsNoStructuredContent))}if(o instanceof Jt)return We(eA({message:o.message,sessionUuid:o.sessionUuid,reason:o.release.releaseReason,release:o.release}));if(o instanceof wg)G.unmarkSessionAdmitted(a.id);let d=fN(a.cancelReason);if(d)return We(d);if(o instanceof wg)return Ks(o,{toolName:s,source:"MCP"});let c=ao(o,a.deviceIds);if(c)return Ks(c,{toolName:s,source:"MCP"});let u=K4(o,n.executionSessionUuid)??K4(ps(a.abortController.signal),n.executionSessionUuid);if(u){n.endExecutionOnce();let m=Math.max(0,i.now()-a.startTime),p=IQ(n.requestTimeoutMs,m);return We(await on(u,p))}return n.withRoutedSession(Ks(n.textState.timeoutError(o)??o,{toolName:s,source:"MCP"}))}function rn(o){return typeof o==="string"&&o.trim().length>0?o:void 0}function nn(o,n){let s=o.planExecutionLock.evaluate({toolName:n.name,sessionId:n.sessionId,sessionUuid:n.executionSessionUuid,readOnly:n.tool.isDeviceReadOnlyCall?.(n.toolParams)===!0});if(s.blocked)throw e.warn(`[MCP] Rejecting tool ${n.name} due to active executePlan (scope=${s.scope}, sessionId=${n.sessionId??"none"}, sessionUuid=${n.routingSessionUuid??"none"})`),new pN(s.scope,s.reason)}function sn(o,n,s,a){let d,c=c1(ui(s),o.schema);try{a1(c),d=o.schema.parse(c)}catch(u){throw new(u instanceof Dl?VE:t)(`Invalid parameters for tool ${n}: ${Fd(n,u,c,o.schema)}`)}return Re({daemonMode:a.daemonMode,requiresDevice:o.requiresDevice===!0,toolName:n,mcpSessionId:a.mcpSessionId,args:d,sessionUuid:a.providedSessionUuid}),d}function an(o){let{tool:n,parsedParams:s}=o;if(!lH(n,s))return;for(let a of new Set([o.providedSessionUuid,o.derivedLabelSessionUuid]))jP(o.name,a,o.requestMcpSessionId,s)}function dn(o){let{providedSessionUuid:n,implicitAutolockMcpSessionId:s}=o,a=n?R.devicePool():void 0;if(!n||!a)return;if(a.isSessionOwnedByOtherConnection(n,s))return n;let d=o.daemonMode&&o.tool.isDeviceReadOnlyCall?.(o.parsedParams)===!0&&s?R.requireSessionManager().getSession(n):void 0;return d&&Kl(d.livenessPolicy)&&!a.isSessionOwnedByConnection(n,s)?n:void 0}function ln(o){let{toolParams:n}=o,s=o.tool.requiresDevice&&!o.executionSessionUuid&&!("deviceId"in n)&&!("platform"in n)&&!("device"in n)&&!("sessionUuid"in n);return G.startExecution(o.name,o.executionSessionId,o.executionSessionUuid,{transportSessionId:o.sessionId,unresolvedAutolockMcpSessionId:s?o.implicitAutolockMcpSessionId:void 0})}function un(o,n){let s=n.acceptanceDiscoveryRequested?null:Vb(UP(n.tool),n.toolResultsNoStructuredContent);if(s!==null&&jK(o))e.debug("[MCP] Omitted structuredContent",{tool:n.name,reason:s});return Wb(o,s)}async function pn(o,n){let{plan:s}=n,{name:a,tool:d,execution:c,sessionId:u,sessionToolBinding:m,options:p}=s,f;try{f=Qt(a),await Wt(s,{daemonMode:o.daemonMode,plainReadCall:n.plainReadCall,toolSelectionProfileRegistry:o.toolSelectionProfileRegistry});let S=await to(s),h=Lr(a)?hN(S):void 0;S=await Ut({toolName:a,result:S,acquiredSessionUuid:h,requestedEnableTools:n.requestedEnableTools,sessionToolSelectionService:p.sessionToolSelectionService,listSessionTools:o.listSessionTools,requestSignal:s.requestSignal}),S=await Ot(a,S,h,{service:p.sessionToolSelectionService,enableTools:n.requestedEnableTools,connectionProfileUuid:s.connectionProfileUuid}),Xt(s,S),await Zt(s,{result:S,readOutsideBoundSession:n.readOutsideBoundSession});let T=un(S,{name:a,tool:d,toolResultsNoStructuredContent:n.toolResultsNoStructuredContent,acceptanceDiscoveryRequested:s.context.requestAcceptanceDiscoveryOrder!==void 0});if(h&&f.released.has(h))throw new t(`Device session ${h} was released during acquisition. Call ${a} again to acquire a device.`);if(h&&m.bind(u,h))F.notifyToolSelectionChanged();return n.withRoutedSession(T)}catch(S){return await co(S,{toolName:a,tool:d,daemonMode:o.daemonMode,execution:c,executionSessionUuid:s.executionSessionUuid,requestTimeoutMs:s.context.requestTimeoutMs,toolResultsNoStructuredContent:n.toolResultsNoStructuredContent,textState:s.textState,withRoutedSession:n.withRoutedSession,endExecutionOnce:n.endExecutionOnce})}finally{n.endExplicitSessionBindClaim?.();try{f?.cleanup?.()}finally{n.endExecutionOnce()}}}function mn(o,n,s){let{name:a,args:d}=n,{options:c,daemonMode:u,sessionToolBinding:m}=o,p=c.sessionContext?.sessionId,f=s.requestMcpSessionId??(!u?p:void 0),S=s.requestMcpSessionId??o.serverBindingKey,h,T=!1;try{h=m.effectiveSessionUuid(S,d,{readOnly:F.getTool(a)?.isDeviceReadOnlyCall?.(d)===!0,onReadOutsideBoundSession:()=>{T=!0}})}catch(Le){return{failure:Ks(Le,{toolName:a,source:"MCP"})}}let I=m.connectionToolSelectionProfileUuid(S),C=oo(a,d),w={name:a,tool:C,toolParams:d,sessionId:S,daemonMode:u,context:s,sessionToolBinding:m,implicitAutolockMcpSessionId:f},M=io(w,h,Boolean(c.sessionContext?.initialSessionToolBinding));T=no(w)||T;let Q=so({scope:w,options:c,toolSelectionProfileRegistry:o.toolSelectionProfileRegistry,routingSessionUuid:M.routingSessionUuid,initialConnectionProfileUuid:I}),Se=rn(d.sessionUuid);return{name:a,tool:C,toolParams:d,sessionId:p,bindingKey:S,context:s,implicitAutolockMcpSessionId:f,routingSessionUuid:M.routingSessionUuid,resolvedImplicitAutolockSessionUuid:M.resolvedImplicitAutolockSessionUuid,readOutsideBoundSession:T,selection:Q,providedSessionUuid:Se,executionSessionUuid:Q.derivedLabelSessionUuid??Se??M.routingSessionUuid}}function gn(o,n){let{name:s,tool:a,toolParams:d,sessionId:c,context:u,providedSessionUuid:m,selection:p}=n;nn(o,{name:s,tool:a,toolParams:d,sessionId:c,executionSessionUuid:n.executionSessionUuid,routingSessionUuid:n.routingSessionUuid});let f=sn(a,s,d,{daemonMode:o.daemonMode,mcpSessionId:u.requestMcpSessionId,providedSessionUuid:m});if(o.daemonMode)an({name:s,tool:a,parsedParams:f,providedSessionUuid:m,derivedLabelSessionUuid:p.derivedLabelSessionUuid,requestMcpSessionId:u.requestMcpSessionId});return{parsedParams:f,plainReadCall:!a.requiresDevice&&(go(s)||a.isDeviceReadOnlyCall?.(f)===!0),requestedEnableTools:wt(s,f),handlerRoutingSessionUuid:a.requiresDevice&&p.requestedDeviceLabel&&p.routingBaseSessionUuid?p.routingBaseSessionUuid:n.routingSessionUuid}}function Sn(o,n,s,a){let{name:d,tool:c,toolParams:u,sessionId:m,context:p,implicitAutolockMcpSessionId:f}=n,S=ln({name:d,tool:c,toolParams:u,executionSessionId:n.bindingKey,executionSessionUuid:n.executionSessionUuid,sessionId:a.executionScopeId??m,implicitAutolockMcpSessionId:f});if(s.plainReadCall)G.markReadOnlySessionAccess(S.id);if(n.resolvedImplicitAutolockSessionUuid)G.setResolvedAutolockSessionUuid(S.id,n.resolvedImplicitAutolockSessionUuid);let{requestLiveDeadlineKey:h,requestDeadlineMs:T}=p,I=(h?CE(h):void 0)??new Kk,C=()=>(h?NU(h):void 0)??T;G.setExecutionDeadline(S.id,C,h?(ye)=>FU(h,ye):void 0);let w=(ye)=>o.daemonMode?SZ(Gt(ye,S.id),dn({daemonMode:o.daemonMode,tool:c,parsedParams:s.parsedParams,providedSessionUuid:n.providedSessionUuid,implicitAutolockMcpSessionId:f})):ye,M=!1,Q=()=>{if(!M)M=!0,Le(),G.endExecution(S.id)},Se=Mre(S.abortController.signal,a.signal),Le=G4(G,S.id,a.signal);return{execution:S,textState:I,getRequestDeadlineMs:C,requestSignal:Se,withRoutedSession:w,endExecutionOnce:Q}}function yn(o,n){let{tool:s,providedSessionUuid:a,implicitAutolockMcpSessionId:d}=o;return a&&s.requiresDevice&&s.isDeviceReadOnlyCall?.(n.parsedParams)!==!0&&d?R.devicePoolWrites()?.beginMcpBind(d):void 0}async function vn(o,n){let s=eo(n.args,{daemonMode:o.daemonMode,acceptanceDiscoveryCapability:o.options.acceptanceDiscoveryCapability,sessionKey:o.options.requestMcpSessionId,trustForwardedSessionId:o.options.trustForwardedMcpSessionId===!0}),a=mn(o,n,s);if("failure"in a)return a.failure;let d=gn(o,a),c;try{c=Sn(o,a,d,n.extra)}catch(m){if(m instanceof $S)return VQ(m);throw m}let u=yn(a,d);return pn(o,{plan:{name:a.name,tool:a.tool,toolParams:a.toolParams,parsedParams:d.parsedParams,sessionId:a.bindingKey,bindingKey:a.bindingKey,context:s,options:o.options,sessionToolBinding:o.sessionToolBinding,execution:c.execution,implicitAutolockMcpSessionId:a.implicitAutolockMcpSessionId,routingSessionUuid:a.routingSessionUuid,handlerRoutingSessionUuid:d.handlerRoutingSessionUuid,routingBaseSessionUuid:a.selection.routingBaseSessionUuid,labelSessionUuids:a.selection.labelSessionUuids,connectionProfileUuid:a.selection.connectionProfileUuid,actionsCompactMetadata:a.selection.actionsCompactMetadata,providedSessionUuid:a.providedSessionUuid,executionSessionUuid:a.executionSessionUuid,textState:c.textState,getRequestDeadlineMs:c.getRequestDeadlineMs,requestSignal:c.requestSignal,progress:n.progress},toolResultsNoStructuredContent:a.selection.toolResultsNoStructuredContent,requestedEnableTools:d.requestedEnableTools,plainReadCall:d.plainReadCall,readOutsideBoundSession:a.readOutsideBoundSession,withRoutedSession:c.withRoutedSession,endExecutionOnce:c.endExecutionOnce,endExplicitSessionBindClaim:u})}function Rn(o,n){let s=o?F.getTool(n.name):void 0;if(!s)return n;let a=F.resolveToolCallDeviceIds(s,n.args,n.extra.signal);return a instanceof Promise?a.then((d)=>({...n,args:d})):a===n.args?n:{...n,args:a}}function lo(o){return async(n)=>{try{let s=Rn(o.daemonMode,n);return await vn(o,s instanceof Promise?await s:s)}catch(s){if(!Ry(s))throw s;return Ks(s,{toolName:n.name,source:"MCP"})}}}var uo,Ce;function po(){return uo??=new _6({store:new I6}),uo}function xJ(){return Ce??=new pI({sessions:()=>R.sessionManager()}),Ce}function CJ(){let o=Ce?.releaseAll()??0;if(Ce=void 0,o>0)e.info(`[TASKS] Released ${o} task-held session lease(s) for shutdown`);return o}function bn(o){return({name:n})=>o.has(n)?{onCancel:"abort"}:void 0}var Tn=bn(new Set(["startDevice","executePlan","installApp"])),mo=(o)=>o.name==="videoRecording"&&o.args.action==="stop"?{onCancel:"detach"}:Tn(o),En="mcp-task:";function In(o,n){if(!n.signal||!n.task)return o;return{...o,progressToken:void 0,progress:n.progress,extra:{...o.extra,signal:n.signal,_meta:void 0,envelope:void 0,executionScopeId:`${En}${n.task.taskId}`,sendNotification:async()=>{}}}}function fo(o){return(n)=>{let s=o.eligibleTools(n);if(!s)return o.execute(n);let a=n.args.deviceId===void 0&&PE()&&nM(n.extra.envelope?.[Tr]);return sZ({declared:Zy({envelope:n.extra.envelope,meta:n.extra._meta}),ownerKey:o.ownerKey,taskManager:o.taskManager,toolName:n.name,onCancel:s.onCancel,...o.keepalive&&{keepalive:o.keepalive}},async(d)=>{let c=In(n,d),u=d.task;if(!u||!a)return o.execute(c);return DU(c,(m)=>o.execute(m),async({inputRequests:m})=>({responses:await u.requestInput(m)}),{recorder:AE,declared:TP(n.extra.envelope?.[Tr])})})}}var Pn=5000;class So{lastSyncAt;inFlight;resyncIfStale(o,n=i){if(this.inFlight)return this.inFlight;if(this.lastSyncAt!==void 0&&n.now()-this.lastSyncAt<Pn)return Promise.resolve();this.lastSyncAt=n.now();let s=o().finally(()=>{this.inFlight=void 0});return this.inFlight=s,s}reset(){this.lastSyncAt=void 0,this.inFlight=void 0}}var Dn=new So;function yo(o,n=i){q.registerListRefresher("installed-apps",()=>Dn.resyncIfStale(o,n))}function An(o,n){return o.packageId===n.packageId&&o.versionCode===n.versionCode&&o.contentHash===n.contentHash}function Ee(o,n){return o?.some((s)=>An(s.buildKey,n))??!1}function ho(o,n){return{appId:o.appId,buildKey:n,currentScreen:o.currentScreen,nodes:o.nodes.map((s)=>({...s,inFilterBuild:Ee(s.provenance,n)})),edges:o.edges.map((s)=>{let a=Ee(s.provenance,n);return{...s,inFilterBuild:a,unverifiedForFilterBuild:(s.provenance?.length??0)>0&&!a}})}}function vo(o,n,s){let a=Ee(o,n),d=Ee(o,s);return a?d?"both":"onlyA":d?"onlyB":null}function Ro(o,n,s){return{appId:o.appId,buildA:n,buildB:s,nodes:o.nodes.flatMap((a)=>{let d=vo(a.provenance,n,s);return d?[{...a,presence:d}]:[]}),edges:o.edges.flatMap((a)=>{let d=vo(a.provenance,n,s);return d?[{...a,presence:d}]:[]})}}class bo{coverageRepository;navigationRepository;timer;constructor(o={}){this.coverageRepository=o.coverageRepository??hne,this.navigationRepository=o.navigationRepository??new bD,this.timer=o.timer??i}async generateReport(o){e.info(`[TEST_COVERAGE] Generating coverage report for app: ${o}`);let n=await this.coverageRepository.getAggregatedCoverageAnalysis(o),s=await this.identifyCriticalGaps(o,n.uncoveredNodes,n.uncoveredEdges),a=this.generateRecommendations(n,s),d=await this.generateTestScenarios(o,s),c=n.totalNodes>0?n.coveredNodes/n.totalNodes*100:0,u=n.totalEdges>0?n.coveredEdges/n.totalEdges*100:0,m={appId:o,generatedAt:this.timer.now(),totalNodes:n.totalNodes,coveredNodes:n.coveredNodes,uncoveredNodes:n.uncoveredNodes.length,nodeCoveragePercent:c,totalEdges:n.totalEdges,coveredEdges:n.coveredEdges,uncoveredEdges:n.uncoveredEdges.length,edgeCoveragePercent:u,overallCoveragePercent:n.coveragePercentage,criticalGaps:s,recommendations:a,suggestedScenarios:d};return e.info(`[TEST_COVERAGE] Report generated: ${m.overallCoveragePercent.toFixed(1)}% overall coverage, ${m.criticalGaps.length} critical gaps identified`),m}async identifyCriticalGaps(o,n,s){let a=[],d=await this.navigationRepository.getNodes(o),c=await this.navigationRepository.getEdges(o),u=this.buildGraphAnalysis(d,c),m=Math.max(...d.map((p)=>p.visit_count),1);for(let p of n){let f=u.inEdgesByScreen.get(p.screen_name)??[],S=u.outEdgesByScreen.get(p.screen_name)??[],h=f.length+S.length,T=this.getNodeDepth(p.screen_name,u),I=p.visit_count/m*50,C=T>0?1/T*50:25,w=I+C;a.push({type:"node",id:p.id,screenName:p.screen_name,criticalityScore:w,recommendation:this.generateNodeRecommendation(p,T,h)})}for(let p of s){let f=u.nodeByScreen.get(p.from_screen),S=u.nodeByScreen.get(p.to_screen);if(!f||!S)continue;let h=this.getNodeDepth(p.from_screen,u),I=(f.visit_count+S.visit_count)/2/m*50,C=h>0?1/h*50:25,w=I+C;a.push({type:"edge",id:p.id,fromScreen:p.from_screen,toScreen:p.to_screen,criticalityScore:w,recommendation:this.generateEdgeRecommendation(p,h)})}return a.sort((p,f)=>f.criticalityScore-p.criticalityScore),a}buildGraphAnalysis(o,n){let s=new Map,a=new Map,d=new Map,c=new Set,u=new Map;for(let p of o)s.set(p.screen_name,p);for(let p of n){c.add(p.from_screen),c.add(p.to_screen),u.set(p.to_screen,(u.get(p.to_screen)??0)+1);let f=d.get(p.from_screen)??[];f.push(p),d.set(p.from_screen,f);let S=a.get(p.to_screen)??[];S.push(p),a.set(p.to_screen,S)}let m=[];for(let p of c)if((u.get(p)??0)===0)m.push(p);return{nodeByScreen:s,inEdgesByScreen:a,outEdgesByScreen:d,depthsByScreen:this.calculateDepthsFromEntryPoints(m,d),hasEntryPoints:m.length>0}}calculateDepthsFromEntryPoints(o,n){let s=new Map,a=[];for(let c of o)s.set(c,0),a.push({screen:c,depth:0});let d=0;while(d<a.length){let{screen:c,depth:u}=a[d++],m=n.get(c)??[];for(let p of m)if(!s.has(p.to_screen)){let f=u+1;s.set(p.to_screen,f),a.push({screen:p.to_screen,depth:f})}}return s}getNodeDepth(o,n){if(!n.hasEntryPoints)return 1;return n.depthsByScreen.get(o)??99}generateNodeRecommendation(o,n,s){let a=o.visit_count>1?`${o.visit_count} visits`:"1 visit",d=n<=2?"shallow":n<=4?"medium":"deep";return`Screen "${o.screen_name}" (${a}, ${d} in navigation tree, ${s} connections) has not been tested. Add test coverage to verify functionality.`}generateEdgeRecommendation(o,n){let s=n<=2?"shallow":n<=4?"medium":"deep",a=o.tool_name?` via ${o.tool_name}`:"";return`Transition from "${o.from_screen}" to "${o.to_screen}"${a} (${s} in navigation tree) has not been tested. Add test coverage for this user journey.`}generateRecommendations(o,n){let s=[];if(o.coveragePercentage<50)s.push(`Overall coverage is ${o.coveragePercentage.toFixed(1)}% - significantly increase test coverage across the application.`);else if(o.coveragePercentage<80)s.push(`Overall coverage is ${o.coveragePercentage.toFixed(1)}% - add tests for critical user journeys to reach 80%+ coverage.`);else s.push(`Overall coverage is ${o.coveragePercentage.toFixed(1)}% - focus on edge cases and less common user flows.`);let a=o.totalNodes>0?o.coveredNodes/o.totalNodes*100:0,d=o.totalEdges>0?o.coveredEdges/o.totalEdges*100:0;if(a-d>20)s.push(`Node coverage (${a.toFixed(1)}%) is significantly higher than edge coverage (${d.toFixed(1)}%). Focus on testing transitions and user journeys between screens.`);else if(d-a>20)s.push(`Edge coverage (${d.toFixed(1)}%) is higher than node coverage (${a.toFixed(1)}%). Ensure all screens are visited during tests.`);let c=n.filter((u)=>u.criticalityScore>60);if(c.length>0)s.push(`${c.length} high-priority coverage gap(s) identified in frequently-used, shallow screens. Prioritize testing these areas.`);if(o.uncoveredNodes.length>0){let u=o.uncoveredNodes.slice(0,3).map((m)=>m.screen_name).join(", ");s.push(`${o.uncoveredNodes.length} screen(s) have no test coverage. Top uncovered: ${u}`)}return s}async generateTestScenarios(o,n){let s=[],a=n.filter((c)=>c.criticalityScore>60),d=n.filter((c)=>c.criticalityScore>30&&c.criticalityScore<=60);if(a.length>0){let c=a.filter((m)=>m.type==="node"),u=a.filter((m)=>m.type==="edge");if(c.length>0)s.push({title:"Cover Critical Screens",description:`Test ${c.length} frequently-accessed screen(s) that currently have no coverage. These are shallow in the navigation tree and likely part of core user journeys.`,priority:"high",targetScreens:c.map((m)=>m.screenName),estimatedCoverageImprovement:c.length/(n.length||1)*100});if(u.length>0){let m=new Set;u.forEach((p)=>{if(p.fromScreen)m.add(p.fromScreen);if(p.toScreen)m.add(p.toScreen)}),s.push({title:"Test Critical User Journeys",description:`Test ${u.length} common navigation path(s) between screens. These transitions are frequently used but not covered by tests.`,priority:"high",targetScreens:Array.from(m),estimatedCoverageImprovement:u.length/(n.length||1)*100})}}if(d.length>0&&s.length<3){let c=d.filter((u)=>u.type==="node");if(c.length>0)s.push({title:"Expand Screen Coverage",description:`Add tests for ${c.length} additional screen(s) to improve overall coverage. These are moderately important screens in the navigation flow.`,priority:"medium",targetScreens:c.slice(0,5).map((u)=>u.screenName),estimatedCoverageImprovement:c.length/(n.length||1)*100})}return s.slice(0,5)}}var To=new bo;var P={APPS:"automobile:navigation/apps",GRAPH:"automobile:navigation/graph",GRAPH_WITH_APP_ID:"automobile:navigation/graph?appId={appId}",GRAPH_BUILD_FILTER:"automobile:navigation/graph/build-filter?appId={appId}&versionCode={versionCode}&contentHash={contentHash}",GRAPH_BUILD_DIFF:"automobile:navigation/graph/build-diff?appId={appId}&versionCodeA={versionCodeA}&contentHashA={contentHashA}&versionCodeB={versionCodeB}&contentHashB={contentHashB}",NODE_BY_ID:"automobile:navigation/nodes/{nodeId}",NODE_BY_ID_WITH_APP_ID:"automobile:navigation/nodes/{nodeId}?appId={appId}",NODE_BY_SCREEN:"automobile:navigation/nodes?screen={screenName}",NODE_SCREENSHOT:"automobile:navigation/nodes/{nodeId}/screenshot",NODE_SCREENSHOT_WITH_APP_ID:"automobile:navigation/nodes/{nodeId}/screenshot?appId={appId}",HISTORY:"automobile:navigation/history",HISTORY_WITH_CURSOR:"automobile:navigation/history?cursor={cursor}",HISTORY_WITH_LIMIT:"automobile:navigation/history?limit={limit}",HISTORY_WITH_CURSOR_AND_LIMIT:"automobile:navigation/history?cursor={cursor}&limit={limit}",TEST_COVERAGE:"automobile:navigation/test-coverage"},xn=1000;function _(o){if(!o)return;try{return decodeURIComponent(o).trim()}catch(n){return e.debug(`[NavigationResources] param decode failed for '${o}': ${n}`),o.trim()}}var Ye=null;function Ao(o=R){return o.sessionManager()?.getAllSessions()??[]}function wn(o,n=!0){if(n&&o?.sessionUuid)return fe.getInstanceForSession(o.sessionUuid);let s=Ao();if(n&&s.length>1)throw Error("Multiple device sessions are active. Read from a session-bound connection or use an app-scoped ?appId= URI where supported.");if(s.length===1)return fe.getInstanceForSession(s[0].sessionId);return fe.getInstance()}function U(o,n=!0){return Ye??wn(o,n)}var Co=null,pe=new Map;function Xe(o){if(pe.has(o))return;pe.set(o,i.setTimeout(()=>{pe.delete(o);let n=o?Ao():[],s=n.length===1?n[0].sessionId:void 0;q.notifyResourcesUpdated([P.APPS,P.GRAPH,P.HISTORY],o,s).catch((a)=>{e.warn("[NavigationResources] Failed to notify navigation updates",a)})},xn))}function Nn(o){let n=Co;if(n!==o){let s=pe.get(void 0);if(s!==void 0)i.clearTimeout(s),pe.delete(void 0)}if(n?.removeGraphUpdateListener)n.removeGraphUpdateListener(Xe);else if(n?.setGraphUpdateListener)n.setGraphUpdateListener(null);if(Co=o,o.setGraphUpdateListener)o.setGraphUpdateListener(Xe)}var kn=null;function Mn(){return kn??Sd.getInstance()}async function Eo(o,n){let s=o?`automobile:navigation/graph?appId=${Ze(o)}`:P.GRAPH;try{let a,d=U(n,!o);if(o&&d.exportGraphSummaryForApp)a=await d.exportGraphSummaryForApp(o);else a=await d.exportGraphSummary();return{uri:s,mimeType:"application/json",text:JSON.stringify(a,null,2)}}catch(a){return e.error(`[NavigationResources] Failed to get navigation graph: ${a}`),{uri:s,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve navigation graph: ${a}`},null,2)}}}function et(o,n){let s=Number(_(o));if(!Number.isFinite(s))throw Error(`Invalid ${n}: ${o}`);return s}function xo(o,n){return{uri:o,mimeType:"application/json",text:JSON.stringify({error:n},null,2)}}async function On(o){let n=Ii(o)??P.GRAPH_BUILD_FILTER;try{let s=_(o.appId);if(!s)throw Error("App ID is required.");let a={packageId:s,versionCode:et(o.versionCode,"versionCode"),contentHash:_(o.contentHash)??""},d=U(void 0,!1),c=await(d.exportGraphSummaryForApp?.(s)??d.exportGraphSummary());return{uri:n,mimeType:"application/json",text:JSON.stringify(ho(c,a),null,2)}}catch(s){return e.error(`[NavigationResources] Failed to get build-filtered navigation graph: ${s}`),xo(n,`Failed to retrieve build-filtered navigation graph: ${s}`)}}async function _n(o){let n=Ii(o)??P.GRAPH_BUILD_DIFF;try{let s=_(o.appId);if(!s)throw Error("App ID is required.");let a={packageId:s,versionCode:et(o.versionCodeA,"versionCodeA"),contentHash:_(o.contentHashA)??""},d={packageId:s,versionCode:et(o.versionCodeB,"versionCodeB"),contentHash:_(o.contentHashB)??""},c=U(void 0,!1),u=await(c.exportGraphSummaryForApp?.(s)??c.exportGraphSummary());return{uri:n,mimeType:"application/json",text:JSON.stringify(Ro(u,a,d),null,2)}}catch(s){return e.error(`[NavigationResources] Failed to get build diff navigation graph: ${s}`),xo(n,`Failed to retrieve build diff navigation graph: ${s}`)}}async function Un(){let o=P.APPS;try{let s={apps:await U(void 0,!1).listAppsWithGraph()};return{uri:o,mimeType:"application/json",text:JSON.stringify(s,null,2)}}catch(n){return e.error(`[NavigationResources] Failed to list apps with navigation graph: ${n}`),{uri:o,mimeType:"application/json",text:JSON.stringify({error:`Failed to list apps with navigation graph: ${n}`},null,2)}}}async function Io(o,n={},s){try{let a=await U(s).exportGraphHistory(n);return{uri:o,mimeType:"application/json",text:JSON.stringify(a,null,2)}}catch(a){return e.error(`[NavigationResources] Failed to get navigation history: ${a}`),{uri:o,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve navigation history: ${a}`},null,2)}}}function X(o,n){return{uri:o,mimeType:"application/json",text:JSON.stringify({error:n},null,2)}}async function Po(o,n,s){let a=n?`automobile:navigation/nodes/${o}?appId=${Ze(n)}`:`automobile:navigation/nodes/${o}`;try{let d=await U(s,!n).getNodeResourceById(o,n);if(!d)return X(a,`Navigation node ${o} not found.`);return{uri:a,mimeType:"application/json",text:JSON.stringify(d,null,2)}}catch(d){return e.error(`[NavigationResources] Failed to get navigation node ${o}: ${d}`),X(a,`Failed to retrieve navigation node ${o}: ${d}`)}}async function Fn(o,n){let s=`automobile:navigation/nodes?screen=${Ze(o)}`;try{let a=await U(n).getNodeResourceByScreen(o);if(!a)return X(s,`Navigation node for screen '${o}' not found.`);return{uri:s,mimeType:"application/json",text:JSON.stringify(a,null,2)}}catch(a){return e.error(`[NavigationResources] Failed to get navigation node '${o}': ${a}`),X(s,`Failed to retrieve navigation node '${o}': ${a}`)}}function Ln(o){let n=_(o.cursor)??"",s=_(o.limit)??"",a=n||void 0;if(!s)return{cursor:a};let d=Number(s);if(!Number.isFinite(d)||d<=0)throw Error(`Invalid history limit: ${o.limit}`);return{cursor:a,limit:Math.floor(d)}}async function Do(o,n,s){let a=aR(o,n);try{let d=U(s,!n),c=n??d.getCurrentAppId();if(!c)return{uri:a,mimeType:"application/json",text:JSON.stringify({error:"No current app set."},null,2)};let u=await d.getNodeResourceById(o,c);if(!u||!u.node)return{uri:a,mimeType:"application/json",text:JSON.stringify({error:`Navigation node ${o} not found.`},null,2)};let m=Mn(),p=await m.findExistingScreenshot(c,u.node.screenName);if(!p)return{uri:a,mimeType:"application/json",text:JSON.stringify({error:`No screenshot available for node ${o}.`},null,2)};let f=await m.readScreenshot(p);if(!f)return{uri:a,mimeType:"application/json",text:JSON.stringify({error:`Screenshot file not found for node ${o}.`},null,2)};return{uri:a,mimeType:"image/webp",blob:f.toString("base64")}}catch(d){return e.error(`[NavigationResources] Failed to get screenshot for node ${o}: ${d}`),{uri:a,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve screenshot: ${d}`},null,2)}}}function Bn(){q.register(P.APPS,"Navigation Apps",{description:"Apps that have a persisted navigation graph (appId, displayName, lastUpdated). No connected device required.",mimeType:"application/json",handler:()=>Un()}),q.register(P.GRAPH,"Navigation Graph",{description:"High-level navigation graph for the current app (nodes and edges). Use ?appId= to filter by specific app.",mimeType:"application/json",handler:(o)=>Eo(void 0,o)}),q.registerTemplate(P.GRAPH_WITH_APP_ID,"Navigation Graph (App-Specific)",{description:"High-level navigation graph filtered by app ID.",mimeType:"application/json",handler:async(o)=>{let n=_(o.appId);return Eo(n)}}),q.registerTemplate(P.GRAPH_BUILD_FILTER,"Navigation Graph (Build Filter)",{description:"App-union navigation graph annotated for one app build.",mimeType:"application/json",handler:On}),q.registerTemplate(P.GRAPH_BUILD_DIFF,"Navigation Graph (Build Diff)",{description:"Navigation nodes and edges reached by either of two app builds, with presence labels.",mimeType:"application/json",handler:_n})}function $n(){q.register(P.HISTORY,"Navigation History",{description:"Ordered navigation history for the current app (nodes and edges).",mimeType:"application/json",handler:(n)=>Io(P.HISTORY,{},n)});let o=async(n,s)=>{try{let{cursor:a,limit:d}=Ln(n),c=new URLSearchParams;if(a)c.set("cursor",a);if(d)c.set("limit",d.toString());let u=c.toString(),m=u?`${P.HISTORY}?${u}`:P.HISTORY;return Io(m,{cursor:a,limit:d},s)}catch(a){return e.error(`[NavigationResources] Failed to parse navigation history params: ${a}`),{uri:P.HISTORY,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve navigation history: ${a}`},null,2)}}};q.registerTemplateWithReadContext(P.HISTORY_WITH_CURSOR_AND_LIMIT,"Navigation History",{description:"Ordered navigation history with pagination support.",mimeType:"application/json",handler:o}),q.registerTemplateWithReadContext(P.HISTORY_WITH_CURSOR,"Navigation History",{description:"Ordered navigation history with pagination support.",mimeType:"application/json",handler:o}),q.registerTemplateWithReadContext(P.HISTORY_WITH_LIMIT,"Navigation History",{description:"Ordered navigation history with pagination support.",mimeType:"application/json",handler:o})}function qn(){q.registerTemplate(P.NODE_BY_ID_WITH_APP_ID,"Navigation Graph Node (App-Specific)",{description:"Detailed navigation graph node by node ID, resolved under a specific app ID.",mimeType:"application/json",handler:async(o)=>{let n=Number(o.nodeId),s=_(o.appId);if(!Number.isFinite(n))return X(`automobile:navigation/nodes/${o.nodeId}`,`Invalid navigation node id: ${o.nodeId}`);return Po(n,s)}}),q.registerTemplateWithReadContext(P.NODE_BY_ID,"Navigation Graph Node",{description:"Detailed navigation graph node by node ID, including relationships.",mimeType:"application/json",handler:async(o,n)=>{let s=Number(o.nodeId);if(!Number.isFinite(s))return X(`automobile:navigation/nodes/${o.nodeId}`,`Invalid navigation node id: ${o.nodeId}`);return Po(s,void 0,n)}}),q.registerTemplateWithReadContext(P.NODE_BY_SCREEN,"Navigation Graph Node (Screen)",{description:"Detailed navigation graph node by screen name, including relationships.",mimeType:"application/json",handler:async(o,n)=>{let s=_(o.screenName)??"";if(!s)return X("automobile:navigation/nodes?screen=","Screen name is required.");return Fn(s,n)}}),q.registerTemplate(P.NODE_SCREENSHOT_WITH_APP_ID,"Navigation Node Screenshot (App-Specific)",{description:"Screenshot thumbnail for a navigation graph node, resolved under a specific app ID (WebP image).",mimeType:"image/webp",handler:async(o)=>{let n=Number(o.nodeId),s=_(o.appId);if(!Number.isFinite(n))return{uri:`automobile:navigation/nodes/${o.nodeId}/screenshot`,mimeType:"application/json",text:JSON.stringify({error:`Invalid node id: ${o.nodeId}`},null,2)};return Do(n,s)}}),q.registerTemplateWithReadContext(P.NODE_SCREENSHOT,"Navigation Node Screenshot",{description:"Screenshot thumbnail for a navigation graph node (WebP image).",mimeType:"image/webp",handler:async(o,n)=>{let s=Number(o.nodeId);if(!Number.isFinite(s))return{uri:`automobile:navigation/nodes/${o.nodeId}/screenshot`,mimeType:"application/json",text:JSON.stringify({error:`Invalid node id: ${o.nodeId}`},null,2)};return Do(s,void 0,n)}})}function No(o={}){if(o.navigationGraph)Ye=o.navigationGraph;Nn(Ye??fe.getInstance()),fe.setSessionGraphUpdateListener(Xe),Bn(),$n(),qn(),q.register(P.TEST_COVERAGE,"Navigation Test Coverage Report",{description:"Comprehensive test coverage analysis for the navigation graph, including coverage metrics, critical gaps, and recommendations.",mimeType:"application/json",handler:async(n)=>{try{let s=(await U(n).exportGraphSummary()).appId;if(!s)return{uri:P.TEST_COVERAGE,mimeType:"application/json",text:JSON.stringify({error:"No current app set. Launch or observe an app first to enable test coverage tracking."},null,2)};let a=await To.generateReport(s);return{uri:P.TEST_COVERAGE,mimeType:"application/json",text:JSON.stringify(a,null,2)}}catch(s){return e.error(`[NavigationResources] Failed to generate test coverage report: ${s}`),{uri:P.TEST_COVERAGE,mimeType:"application/json",text:JSON.stringify({error:`Failed to generate test coverage report: ${s}`},null,2)}}}}),e.info("[NavigationResources] Registered navigation graph resources including test coverage")}var jn=wG,Hn=1000,Kn=1,ko=5000,Vn=new DP;function Gn(o,n){if(n.deviceId)o.deviceId=n.deviceId;if(n.deviceName)o.deviceName=n.deviceName;if(n.devicePlatform)o.devicePlatform=n.devicePlatform;if(n.deviceType)o.deviceType=n.deviceType}function Jn(o){let n={};if(o.testClass)n.testClass=o.testClass;if(o.testMethod)n.testMethod=o.testMethod;if(Gn(n,o),o.appVersion)n.appVersion=o.appVersion;if(o.gitCommit)n.gitCommit=o.gitCommit;if(o.targetSdk!==void 0)n.targetSdk=o.targetSdk;if(o.jdkVersion)n.jdkVersion=o.jdkVersion;if(o.jvmTarget)n.jvmTarget=o.jvmTarget;if(o.gradleVersion)n.gradleVersion=o.gradleVersion;if(typeof o.isCi==="boolean")n.isCi=o.isCi;if(o.sessionUuid)n.sessionUuid=o.sessionUuid;return n}async function Mo(o,n=Vn){let s=o.lookbackDays??jn,a=o.limit??Hn,d=o.minSamples??Kn,c={lookbackDays:s,limit:a,minSamples:d,orderBy:o.orderBy,orderDirection:o.orderDirection,testClass:o.testClass,testMethod:o.testMethod,deviceId:o.deviceId,deviceName:o.deviceName,devicePlatform:o.devicePlatform,deviceType:o.deviceType,appVersion:o.appVersion,gitCommit:o.gitCommit,targetSdk:o.targetSdk,jdkVersion:o.jdkVersion,jvmTarget:o.jvmTarget,gradleVersion:o.gradleVersion,isCi:o.isCi,sessionUuid:o.sessionUuid},u=await n.getTimingStats(c),m=u.reduce((f,S)=>f+S.sampleSize,0),p=Jn(o);return{testTimings:u.map((f)=>({testClass:f.testClass,testMethod:f.testMethod,averageDurationMs:f.averageDurationMs,sampleSize:f.sampleSize,lastRunTimestampMs:f.lastRunTimestampMs||null,lastRun:f.lastRunTimestampMs?new Date(f.lastRunTimestampMs).toISOString():null,successRate:f.sampleSize>0?Number((f.passedCount/f.sampleSize).toFixed(4)):0,failureRate:f.sampleSize>0?Number((f.failedCount/f.sampleSize).toFixed(4)):0,stdDevDurationMs:f.stdDevDurationMs,statusCounts:{passed:f.passedCount,failed:f.failedCount,skipped:f.skippedCount}})),generatedAt:new Date().toISOString(),totalTests:u.length,totalSamples:m,aggregation:{strategy:"mean",lookbackDays:s,minSamples:d,limit:a,orderBy:c.orderBy??"lastRun",orderDirection:c.orderDirection??"desc"},filters:p}}var se={BASE:"automobile:test-timings"},zn=`${se.BASE}?{params}`,Wn=new Set(["lookbackDays","limit","minSamples","orderBy","orderDirection","testClass","testMethod","deviceId","deviceName","devicePlatform","deviceType","appVersion","gitCommit","targetSdk","jdkVersion","jvmTarget","gradleVersion","isCi","sessionUuid"]);function Yn(o){let n=Object.keys(o).filter((s)=>!Wn.has(s));if(n.length>0)throw Error(`Unknown query parameters: ${n.join(", ")}`);return{lookbackDays:Ld(o.lookbackDays,"lookbackDays",{min:1}),limit:Ld(o.limit,"limit",{min:1,max:ko}),minSamples:Ld(o.minSamples,"minSamples",{min:0}),orderBy:Of(o.orderBy,"orderBy",["lastRun","averageDuration","sampleSize"]),orderDirection:Of(o.orderDirection,"orderDirection",["asc","desc"]),testClass:rs(o.testClass),testMethod:rs(o.testMethod),deviceId:rs(o.deviceId),deviceName:rs(o.deviceName),devicePlatform:Of(o.devicePlatform,"devicePlatform",["android","ios"]),deviceType:Of(o.deviceType,"deviceType",["emulator","simulator","device"]),appVersion:rs(o.appVersion),gitCommit:rs(o.gitCommit),targetSdk:Ld(o.targetSdk,"targetSdk",{min:1}),jdkVersion:rs(o.jdkVersion),jvmTarget:rs(o.jvmTarget),gradleVersion:rs(o.gradleVersion),isCi:qU(o.isCi,"isCi"),sessionUuid:rs(o.sessionUuid)}}function Qn(o,n){if(n.deviceId)o.set("deviceId",n.deviceId);if(n.deviceName)o.set("deviceName",n.deviceName);if(n.devicePlatform)o.set("devicePlatform",n.devicePlatform);if(n.deviceType)o.set("deviceType",n.deviceType)}function Xn(o,n){if(n.appVersion)o.set("appVersion",n.appVersion);if(n.gitCommit)o.set("gitCommit",n.gitCommit);if(n.targetSdk!==void 0)o.set("targetSdk",n.targetSdk.toString());if(n.jdkVersion)o.set("jdkVersion",n.jdkVersion);if(n.jvmTarget)o.set("jvmTarget",n.jvmTarget);if(n.gradleVersion)o.set("gradleVersion",n.gradleVersion);if(typeof n.isCi==="boolean")o.set("isCi",n.isCi.toString());if(n.sessionUuid)o.set("sessionUuid",n.sessionUuid)}function Zn(o){let n=new URLSearchParams;if(o.lookbackDays!==void 0)n.set("lookbackDays",o.lookbackDays.toString());if(o.limit!==void 0)n.set("limit",o.limit.toString());if(o.minSamples!==void 0)n.set("minSamples",o.minSamples.toString());if(o.orderBy!==void 0)n.set("orderBy",o.orderBy);if(o.orderDirection!==void 0)n.set("orderDirection",o.orderDirection);if(o.testClass)n.set("testClass",o.testClass);if(o.testMethod)n.set("testMethod",o.testMethod);Qn(n,o),Xn(n,o);let s=n.toString();return s?`${se.BASE}?${s}`:se.BASE}async function Oo(o,n){try{let s=await Mo(o);return{uri:n,mimeType:"application/json",text:JSON.stringify(s,null,2)}}catch(s){return e.error(`[TestTimingResources] Failed to get test timing data: ${s}`),{uri:n,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve test timing data: ${s}`},null,2)}}}function _o(){q.register(se.BASE,"Test Timing History",{description:"Historical aggregated test execution timing statistics.",mimeType:"application/json",handler:()=>Oo({},se.BASE)}),q.registerTemplate(zn,"Test Timing History",{description:"Historical aggregated test execution timing statistics.",mimeType:"application/json",handler:async(o)=>{try{let n=VU(o.params??""),s=Yn(n),a=Zn(s);return Oo(s,a)}catch(n){return e.error(`[TestTimingResources] Failed to parse query params: ${n}`),{uri:se.BASE,mimeType:"application/json",text:JSON.stringify({error:`Invalid test timing query parameters: ${n}`},null,2)}}}}),e.info("[TestTimingResources] Registered test timing resources")}var ae={BASE:"automobile:test-runs"},es=100,ts=500,os=30,is=`${ae.BASE}?{params}`,ns=new Set(["lookbackDays","limit","testClass","testMethod","deviceId","orderDirection","latestOnly"]);function ss(o){let n=Object.keys(o).filter((s)=>!ns.has(s));if(n.length>0)throw Error(`Unknown query parameters: ${n.join(", ")}`);return{lookbackDays:Ld(o.lookbackDays,"lookbackDays",{min:1}),limit:Ld(o.limit,"limit",{min:1,max:ts}),testClass:rs(o.testClass),testMethod:rs(o.testMethod),deviceId:rs(o.deviceId),orderDirection:Of(o.orderDirection,"orderDirection",["asc","desc"]),latestOnly:qU(o.latestOnly,"latestOnly")}}function as(o){let n=new URLSearchParams;if(o.lookbackDays!==void 0)n.set("lookbackDays",o.lookbackDays.toString());if(o.limit!==void 0)n.set("limit",o.limit.toString());if(o.testClass)n.set("testClass",o.testClass);if(o.testMethod)n.set("testMethod",o.testMethod);if(o.deviceId)n.set("deviceId",o.deviceId);if(o.orderDirection)n.set("orderDirection",o.orderDirection);if(o.latestOnly)n.set("latestOnly","true");let s=n.toString();return s?`${ae.BASE}?${s}`:ae.BASE}function ds(o,n){let a=`${o.testClass.split(".").pop()||o.testClass}.${o.testMethod}`;return{id:o.id,testClass:o.testClass,testMethod:o.testMethod,testName:a,status:o.status,startTime:o.startTime,durationMs:o.durationMs,deviceId:o.deviceId,deviceName:o.deviceName,platform:o.platform,errorMessage:o.errorMessage,videoPath:o.videoPath,snapshotPath:o.snapshotPath,steps:o.steps.map((d)=>({id:d.id,index:d.stepIndex,action:d.action,target:d.target,screenshotPath:d.screenshotPath,screenName:d.screenName,durationMs:d.durationMs,status:d.status,errorMessage:d.errorMessage,...d.details!==void 0?{details:d.details}:{}})),screensVisited:o.screensVisited,sampleSize:n}}function cs(o){let n={};if(o.testClass)n.testClass=o.testClass;if(o.testMethod)n.testMethod=o.testMethod;if(o.deviceId)n.deviceId=o.deviceId;return n}async function ls(o,n=new DP){let s=o.lookbackDays??os,a=o.limit??es,d=o.orderDirection??"desc",c=o.latestOnly??!0,u={lookbackDays:s,limit:c?a*5:a,testClass:o.testClass,testMethod:o.testMethod,deviceId:o.deviceId,orderDirection:d},m=await n.getTestRuns(u),p=new Map;for(let T of m){let I=`${T.testClass}::${T.testMethod}`;p.set(I,(p.get(I)||0)+1)}let f=m;if(c){let T=new Set;f=m.filter((I)=>{let C=`${I.testClass}::${I.testMethod}`;if(T.has(C))return!1;return T.add(C),!0}),f=f.slice(0,a)}let S=f.map((T)=>{let I=`${T.testClass}::${T.testMethod}`,C=p.get(I)||1;return ds(T,C)}),h=cs(o);return{testRuns:S,generatedAt:new Date().toISOString(),totalRuns:S.length,query:{lookbackDays:s,limit:a,orderDirection:d},filters:h}}async function Uo(o,n){try{let s=await ls(o);return{uri:n,mimeType:"application/json",text:JSON.stringify(s,null,2)}}catch(s){return e.error(`[TestRunResources] Failed to get test run data: ${s}`),{uri:n,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve test run data: ${s}`},null,2)}}}function Fo(){q.register(ae.BASE,"Test Run History",{description:"Individual test run history with step-level details and screens visited.",mimeType:"application/json",handler:()=>Uo({},ae.BASE)}),q.registerTemplate(is,"Test Run History",{description:"Individual test run history with step-level details and screens visited.",mimeType:"application/json",handler:async(o)=>{try{let n=VU(o.params??""),s=ss(n),a=as(s);return Uo(s,a)}catch(n){return e.error(`[TestRunResources] Failed to parse query params: ${n}`),{uri:ae.BASE,mimeType:"application/json",text:JSON.stringify({error:`Invalid test run query parameters: ${n}`},null,2)}}}}),e.info("[TestRunResources] Registered test run resources")}var us=50,ms=0,$o=500,gs=new Om,fs=new qM;function Bo(o){if(o===void 0||o===null)return;let n=new Date(o);if(Number.isNaN(n.getTime()))throw Error(`Invalid timestamp: ${o}`);return n.toISOString()}function Ss(o){if(o.length===0)return null;let n=o[0],s=o[0];for(let a of o){if(a<n)n=a;if(a>s)s=a}return{start:n,end:s}}async function qo(o,n={auditRepository:gs,toolCallRepository:fs}){let s=Bo(o.startTime),a=Bo(o.endTime),d=o.limit??us,c=o.offset??ms,u=await n.auditRepository.listResults({startTime:s,endTime:a,limit:d,offset:c,deviceId:o.deviceId,deviceSessionUuid:o.deviceSessionUuid}),m=Ss(u.results.map((f)=>f.timestamp)),p=m?await n.toolCallRepository.listToolNamesBetween(m.start,m.end):[];return{results:u.results,toolCalls:p,hasMore:u.hasMore,nextOffset:u.nextOffset,range:m?{startTime:m.start,endTime:m.end}:null}}var de={BASE:"automobile:performance-results"},Vo=["startTime","endTime","limit","offset","deviceId","deviceSessionUuid"],ys=`${de.BASE}{?${Vo.join(",")}}`,vs=new Set(Vo);function jo(o,n,s={}){if(!o)return;let a=Number(o);if(!Number.isFinite(a)||!Number.isInteger(a))throw Error(`Invalid ${n}: ${o}`);let d=s.min??0;if(a<d)throw Error(`Invalid ${n}: ${o}`);if(s.max!==void 0&&a>s.max)throw Error(`Invalid ${n}: ${o}`);return a}function Ho(o,n){if(!o)return;let s=o.trim();if(!s)return;if(/^-?\d+$/.test(s)){let a=Number(s);if(!Number.isFinite(a))throw Error(`Invalid ${n}: ${o}`);return a}return s}function hs(o){let n=Object.keys(o).filter((p)=>!vs.has(p));if(n.length>0)throw Error(`Unknown query parameters: ${n.join(", ")}`);let s=Ho(o.startTime,"startTime"),a=Ho(o.endTime,"endTime"),d=o.limit?.trim(),c=o.offset?.trim(),u=o.deviceId?.trim(),m=o.deviceSessionUuid?.trim();return{startTime:s,endTime:a,limit:jo(d,"limit",{min:1,max:$o}),offset:jo(c,"offset",{min:0}),deviceId:u||void 0,deviceSessionUuid:m||void 0}}function Rs(o){let n=new URLSearchParams;if(o.startTime!==void 0)n.set("startTime",String(o.startTime));if(o.endTime!==void 0)n.set("endTime",String(o.endTime));if(o.limit!==void 0)n.set("limit",o.limit.toString());if(o.offset!==void 0)n.set("offset",o.offset.toString());if(o.deviceId!==void 0)n.set("deviceId",o.deviceId);if(o.deviceSessionUuid!==void 0)n.set("deviceSessionUuid",o.deviceSessionUuid);let s=n.toString();return s?`${de.BASE}?${s}`:de.BASE}async function Ko(o,n){try{let s=await qo(o);return{uri:n,mimeType:"application/json",text:JSON.stringify(s,null,2)}}catch(s){return e.error(`[PerformanceResources] Failed to get performance audit results: ${s}`),{uri:n,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve performance audit results: ${s}`},null,2)}}}function Go(){q.register(de.BASE,"Performance Results",{description:"List UI performance audit results from the local database.",mimeType:"application/json",handler:()=>Ko({},de.BASE)}),q.registerTemplate(ys,"Performance Results",{description:"List UI performance audit results from the local database.",mimeType:"application/json",handler:async(o)=>{try{let n=hs(o),s=Rs(n);return Ko(n,s)}catch(n){return e.error(`[PerformanceResources] Failed to parse query params: ${n}`),{uri:de.BASE,mimeType:"application/json",text:JSON.stringify({error:`Invalid performance query parameters: ${n}`},null,2)}}}}),e.info("[PerformanceResources] Registered performance resources")}import*as Jo from"fs/promises";function bs(o,n){return pae(n,o,()=>Error(`Refusing to read recording file outside the archive root: ${o}`))}var Ie={lookupLatest:aX,getById:Wu,list:sX,readFile:Jo.readFile,get archiveRoot(){return Qe(fn.VIDEO_ARCHIVE)}};function Ts(o){if(o.format==="mp4")return"video/mp4";if(o.format==="mov")return"video/quicktime";return"application/octet-stream"}function Cs(o){let n=o.status==="interrupted"?"was interrupted and has no file":"has no file on disk any more";return`No playable video recording is available: the newest recording ${o.recordingId} ${n}.`}function Es(o){return o instanceof Error&&"code"in o&&o.code==="ENOENT"}async function zo(o,n,s=Ie){if(!o.filePath)return{uri:n,mimeType:"application/json",text:JSON.stringify({error:`Missing file path for recording ${o.recordingId}`,metadata:o},null,2)};try{let a=bs(o.filePath,s.archiveRoot),c=(await s.readFile(a)).toString("base64");return{uri:n,mimeType:Ts(o),text:JSON.stringify({metadata:o},null,2),blob:c}}catch(a){e.error(`[VideoRecordingResources] Failed to read video ${o.recordingId}: ${a}`);let d=`Recording ${o.recordingId} has no video file on disk (${o.sizeBytes===0?"it was interrupted before a file was saved":"the file was deleted or moved"})`;return{uri:n,mimeType:"application/json",text:JSON.stringify({error:`Failed to read video data: ${Es(a)?d:a}`,metadata:o},null,2)}}}async function Is(o=Ie){try{let{recording:n,newestWithoutFile:s}=await o.lookupLatest();if(!n)return{uri:Bd.LATEST,mimeType:"application/json",text:JSON.stringify(s?{error:Cs(s),newestRecording:s}:{error:'No video recordings available. Call videoRecording with action "start" first.'},null,2)};let a=await o.getById(n.recordingId,{touch:!0})??n;return zo(a,Bd.LATEST,o)}catch(n){return e.error(`[VideoRecordingResources] Failed to get latest recording: ${n}`),{uri:Bd.LATEST,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve latest recording: ${n}`},null,2)}}}async function Ps(o=Ie){try{let n=await o.list();return{uri:Bd.ARCHIVE,mimeType:"application/json",text:JSON.stringify({recordings:n,count:n.length},null,2)}}catch(n){return e.error(`[VideoRecordingResources] Failed to list recordings: ${n}`),{uri:Bd.ARCHIVE,mimeType:"application/json",text:JSON.stringify({error:`Failed to list recordings: ${n}`},null,2)}}}async function Ds(o,n=Ie){try{let s=o.recordingId;if(!s)return{uri:Bd.ARCHIVE_ITEM,mimeType:"application/json",text:JSON.stringify({error:"Recording ID is required."},null,2)};let a=await n.getById(s,{touch:!0});if(!a)return{uri:DM(s),mimeType:"application/json",text:JSON.stringify({error:`Recording not found: ${s}`},null,2)};return zo(a,DM(s),n)}catch(s){return e.error(`[VideoRecordingResources] Failed to read recording: ${s}`),{uri:Bd.ARCHIVE_ITEM,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve recording: ${s}`},null,2)}}}function Wo(){q.register(Bd.LATEST,"Latest Video Recording",{description:"The most recent video recording with metadata and base64-encoded video data.",mimeType:"video/mp4",handler:()=>Is()}),q.register(Bd.ARCHIVE,"Video Recording Archive",{description:"Metadata list for archived video recordings.",mimeType:"application/json",handler:()=>Ps()}),q.registerTemplate(Bd.ARCHIVE_ITEM,"Video Recording",{description:"Video recording content and metadata for the specified recording ID.",mimeType:"video/mp4",handler:Ds}),e.info("[VideoRecordingResources] Registered video recording resources")}var As={DEVICE_LOCALIZATION:"automobile:devices/{deviceId}/localization"};async function xs(o){return _s(o,"LocalizationResources")}function ws(o,n){return{deviceId:o.deviceId,platform:o.platform,locale:n.locale??null,timeZone:n.timeZone??null,textDirection:n.textDirection??null,timeFormat:n.timeFormat??null,calendarSystem:n.calendarSystem??null,lastUpdated:new Date().toISOString(),success:n.success,error:n.error}}async function Ns(o,n=(s)=>new Oy(s)){let s=`automobile:devices/${o}/localization`,a=await xs(o);if(!a)return{uri:s,mimeType:"application/json",text:JSON.stringify({error:`Device not found or not booted: ${o}`},null,2)};let c=await n(a).getLocalizationSettings(),u=ws(a,c);return{uri:s,mimeType:"application/json",text:JSON.stringify(u,null,2)}}function Yo(){q.registerTemplate(As.DEVICE_LOCALIZATION,"Device Localization Settings",{description:"Current localization settings (locale, time zone, text direction, time format, calendar) for a device.",mimeType:"application/json",handler:async(o)=>Ns(o.deviceId)}),e.info("[LocalizationResources] Registered localization resources")}async function ks(){try{let{snapshots:o,count:n,totalSizeBytes:s,unsizedCount:a,pendingReclaimCount:d,orphanedAvdSnapshots:c}=await yX(),u=await Fc();return{uri:ZE.ARCHIVE,mimeType:"application/json",text:JSON.stringify({snapshots:o,count:n,totalSizeBytes:s,unsizedCount:a,pendingReclaimCount:d,orphanedAvdSnapshots:c,maxVmSnapshotsPerAvd:u.maxVmSnapshotsPerAvd,maxVmArchiveSizeMb:u.maxVmArchiveSizeMb??null,maxArchiveSizeMb:u.maxArchiveSizeMb},null,2)}}catch(o){return e.error(`[DeviceSnapshotResources] Failed to list snapshots: ${o}`),{uri:ZE.ARCHIVE,mimeType:"application/json",text:JSON.stringify({error:`Failed to list snapshots: ${o}`},null,2)}}}function Qo(){q.register(ZE.ARCHIVE,"Device Snapshot Archive",{description:"Metadata list for captured device snapshots.",mimeType:"application/json",handler:ks}),e.info("[DeviceSnapshotResources] Registered device snapshot resources")}function oy(o,n){if(o===void 0||o===null)return;if(typeof o==="number"){if(!Number.isFinite(o)||o<0)throw Error(`Invalid ${n}: ${o}`);return o}if(typeof o==="string"){let s=o.trim();if(s==="")return;let a=Number(s);if(Number.isFinite(a)){if(a<0)throw Error(`Invalid ${n}: ${o}`);return a}let d=new Date(s);if(!Number.isNaN(d.getTime()))return d.getTime();throw Error(`Invalid ${n}: ${o}`)}throw Error(`Invalid ${n}: ${String(o)}`)}function AU(o,n){let s=oy(o,n);return s===void 0?void 0:new Date(s).toISOString()}function TU(o,n){if(o===void 0||o===null)return n;let s=typeof o==="number"?o:Number(o);if(!Number.isFinite(s)||!Number.isInteger(s)||s<=0)throw Error(`Invalid limit: ${String(o)}`);return Math.min(s,500)}function kU(o){if(o===void 0||o===null)return;let n=typeof o==="number"?o:Number(o);if(!Number.isFinite(n)||!Number.isInteger(n)||n<0)throw Error(`Invalid sinceId: ${String(o)}`);return n}var Xo=["minute","hour","day","week"],Zo=["1h","24h","3d","7d","30d"],Ms={"1h":3600000,"24h":86400000,"3d":259200000,"7d":604800000,"30d":2592000000};function wE(o){return Ms[o]}function EU(o){if(o===void 0||o===null)return"hour";if(typeof o!=="string")throw Error(`Invalid aggregation: ${String(o)}`);if(!Xo.includes(o))throw Error(`Invalid aggregation: ${o}. Must be one of: ${Xo.join(", ")}`);return o}function RE(o){if(o===void 0||o===null)return;if(typeof o!=="string")throw Error(`Invalid dateRange: ${String(o)}`);if(!Zo.includes(o))throw Error(`Invalid dateRange: ${o}. Must be one of: ${Zo.join(", ")}`);return o}var ce={BASE:"automobile:failures",TIMELINE:"automobile:failures/timeline"},Os=new XR;async function Us(o,n){try{let a={groups:await n.getFailureGroups(),generatedAt:new Date().toISOString()};return{uri:o,mimeType:"application/json",text:JSON.stringify(a,null,2)}}catch(s){return e.error(`[FailuresResources] Failed to get failures: ${s}`),{uri:o,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve failures: ${s}`},null,2)}}}var tt=["dateRange","aggregation"],Fs=`${ce.TIMELINE}{?${tt.join(",")}}`,Ls=new Set(tt),Bs="24h";function $s(o){let n=Object.keys(o).filter((s)=>!Ls.has(s));if(n.length>0)throw Error(`Unknown query parameters: ${n.join(", ")}. Supported: ${tt.join(", ")}`);return{dateRange:er(o,"dateRange",RE)??Bs,aggregation:er(o,"aggregation",EU)}}function qs(o,n){let s=o?.indexOf("?")??-1;if(o===void 0||s<0)return;let a=o.slice(s+1).split("&").find((d)=>d.split("=",1)[0]===n);return a===void 0?void 0:a.slice(n.length+1)}function er(o,n,s){try{return s(o[n])}catch(a){let d=qs(Ii(o),n);if(d!==void 0&&d!==o[n])s(d);throw a}}function tr(o,n){return{uri:o,mimeType:"application/json",text:JSON.stringify({error:n},null,2)}}async function js(o,n,s){let a;try{a=$s(o)}catch(d){return e.warn(`[FailuresResources] Invalid timeline query: ${r(d)}`),tr(Ii(o)??ce.TIMELINE,r(d))}try{let{dateRange:d,aggregation:c}=a,u=s.now(),m=u-wE(d),p=await n.getTimelineData({startTime:m,endTime:u,aggregation:c}),f={dataPoints:p.dataPoints,dateRange:d,aggregation:c,previousPeriodTotals:p.previousPeriodTotals};return{uri:`${ce.TIMELINE}?dateRange=${d}&aggregation=${c}`,mimeType:"application/json",text:JSON.stringify(f,null,2)}}catch(d){return e.error(`[FailuresResources] Failed to get timeline: ${d}`),tr(ce.TIMELINE,`Failed to retrieve timeline: ${d}`)}}function or(o=Os,n=i){q.register(ce.BASE,"Failures",{description:"List all failure groups (crashes, ANRs, tool failures) with aggregated data.",mimeType:"application/json",handler:()=>Us(ce.BASE,o)}),q.registerTemplate(Fs,"Failures Timeline",{description:"Get timeline data for failures. Optional dateRange (1h, 24h, 3d, 7d, 30d; default 24h) and aggregation (minute, hour, day, week; default hour). Buckets and labels are UTC; weeks start Monday 00:00 UTC.",mimeType:"application/json",handler:(s)=>js(s,o,n)}),e.info("[FailuresResources] Registered failures resources")}var rr={FILES:"automobile:devices/{deviceId}/storage/{packageName}/files",ENTRIES:"automobile:devices/{deviceId}/storage/{packageName}/{fileName}/entries"},Pe={files:new Map,entries:new Map};function ir(o){let n=JSON.stringify(o),s=0;for(let a=0;a<n.length;a++){let d=n.charCodeAt(a);s=(s<<5)-s+d,s=s&s}return s.toString(16)}async function nr(o){return _s(o,"StorageResources")}async function Hs(o,n,s={}){if(o.platform==="android")return(s.preferenceFilesClient?.(o)??E.getInstance(o,v)).listPreferenceFiles(n);else if(o.platform==="ios")return(s.preferenceFilesClient?.(o)??x.getInstance(o)).listPreferenceFiles(n);throw Error(`Unsupported platform: ${o.platform}`)}async function Vs(o,n,s,a={}){if(o.platform==="android"){let d=a.preferenceEntriesClient?.(o)??E.getInstance(o,v);try{return{entries:await d.getPreferenceEntries(n,s),source:"ctrlproxy"}}catch(c){if(!Gs(c))throw c;try{let u=(a.adbClientFactory??v).create(o),m=await wy(u,n).catch(iN),p=await _y(u,n,rA(s),m);return{entries:await FZ(p),source:"run-as"}}catch(u){throw new t(`Failed to read Android SharedPreferences. CtrlProxy: ${r(c)}; run-as: ${r(u)}`,{cause:c})}}}else if(o.platform==="ios")return{entries:await(a.preferenceEntriesClient?.(o)??x.getInstance(o)).getPreferenceEntries(n,s),source:"ctrlproxy"};throw Error(`Unsupported platform: ${o.platform}`)}function Gs(o){return o instanceof ef||uy(o)||Hne(o)}function Js(o,n){return`${o}:${n}`}function zs(o,n,s){return`${o}:${n}:${s}`}function ar(o){return{uri:Ii(o)??"",mimeType:"application/json",text:JSON.stringify({error:"Malformed resource URI: a path segment is not valid percent-encoding."},null,2)}}function Ws(o,n){return`automobile:devices/${o}/storage/${Ze(n)}/files`}function Ys(o,n,s){return`automobile:devices/${o}/storage/${Ze(n)}/${Ze(s)}/entries`}async function Qs(o,n={}){let{deviceId:s,packageName:a}=o,d=Lo(a);if(d===null)return ar(o);let c=Ws(s,d);e.info(`[StorageResources] getStorageFilesResource: deviceId=${s}, packageName=${d}`);try{let u=await nr(s);if(!u)return e.warn(`[StorageResources] Device not found: ${s}`),{uri:c,mimeType:"application/json",text:JSON.stringify({error:`Device not found or not booted: ${s}`},null,2)};e.info(`[StorageResources] Found device: ${u.deviceId} (${u.platform}), calling listPreferenceFiles`);let m=await Hs(u,d,n);e.info(`[StorageResources] listPreferenceFiles returned ${m.length} files`);let p=new Date().toISOString(),f=ir(m),S=Js(s,d),h=Pe.files.get(S);if(h&&h.hash!==f)e.info(`[StorageResources] Storage files changed for ${d} on ${s}`),q.notifyResourceUpdated(c);return Pe.files.set(S,{files:m,lastUpdated:p,hash:f}),{uri:c,mimeType:"application/json",text:JSON.stringify({deviceId:s,packageName:d,platform:u.platform,files:m,totalCount:m.length,lastUpdated:p},null,2)}}catch(u){return e.error(`[StorageResources] Failed to list storage files: ${u}`),{uri:c,mimeType:"application/json",text:JSON.stringify({error:`Failed to list storage files: ${u}`,...cb(u)},null,2)}}}async function Xs(o,n={}){let{deviceId:s,packageName:a,fileName:d}=o,c=Lo(a),u=Lo(d);if(c===null||u===null)return ar(o);let m=Ys(s,c,u);try{let p=await nr(s);if(!p)return{uri:m,mimeType:"application/json",text:JSON.stringify({error:`Device not found or not booted: ${s}`},null,2)};let{entries:f,source:S}=await Vs(p,c,u,n),h=new Date().toISOString(),T=ir(f),I=zs(s,c,u),C=Pe.entries.get(I);if(C&&C.hash!==T)e.info(`[StorageResources] Storage entries changed for ${c}/${u} on ${s}`),q.notifyResourceUpdated(m);Pe.entries.set(I,{entries:f,lastUpdated:h,hash:T});let w=p.platform==="ios"?f.map((M)=>aA(M)?{...M,value:null,redacted:!0}:M):f;return{uri:m,mimeType:"application/json",text:JSON.stringify({deviceId:s,packageName:c,fileName:u,platform:p.platform,source:S,entries:w,totalCount:f.length,lastUpdated:h},null,2)}}catch(p){return e.error(`[StorageResources] Failed to get storage entries: ${p}`),{uri:m,mimeType:"application/json",text:JSON.stringify({error:`Failed to get storage entries: ${p}`,...cb(p instanceof t&&p.cause instanceof ef?p.cause:p)},null,2)}}}function dr(o={}){q.registerTemplate(rr.FILES,"App Storage Files",{description:"List all storage files in an app (Android SharedPreferences or iOS UserDefaults suites). Requires app to have AutoMobile SDK with storage inspection enabled.",mimeType:"application/json",handler:(n)=>Qs(n,o)}),q.registerTemplate(rr.ENTRIES,"Storage File Entries",{description:"Get all key-value entries from a storage file (Android SharedPreferences or iOS UserDefaults suite).",mimeType:"application/json",handler:(n)=>Xs(n,o)}),e.info("[StorageResources] Registered storage resources")}function Zs(o){let n=o.split(`
|
|
3
|
+
`).map((d)=>d.trim());if(n.find((d)=>d.startsWith("User 0:"))?.slice(7).trim().split(/\s+/).includes("installed=false"))return;let a=n.find((d)=>d.startsWith("pkgFlags=["));if(!a||!a.endsWith("]"))return;return a.slice(10,-1).trim().split(/\s+/).includes("DEBUGGABLE")}async function cr(o,n){try{let s=await o.executeCommand(`shell dumpsys package ${b(n)}`,{timeoutMs:5000,maxBuffer:ie});return Zs(s.stdout)}catch(s){e.warn("[DebuggableBuildProbe] Android package probe failed",s);return}}var De="simctl addmedia imports fixtures but exposes no supported bounded enumeration or read API for imported media.";function Ae(o,n="user_files"){let s=n==="user_files"||o==="android";return{list:s,read:s}}class ot{entries=new Map;accessCounter=0;get(o){let n=this.entries.get(lr(o));if(!n)return;return n.lastUsed=++this.accessCounter,n.sha256}set(o,n){let{deviceId:s,namespace:a,path:d}=o;for(let[c,u]of this.entries)if(u.deviceId===s&&u.namespace===a&&u.path===d)this.entries.delete(c);this.entries.set(lr(o),{deviceId:s,namespace:a,path:d,sha256:n,lastUsed:++this.accessCounter});while(this.entries.size>2048){let c,u=Number.POSITIVE_INFINITY;for(let[m,p]of this.entries)if(p.lastUsed<u)c=m,u=p.lastUsed;if(c===void 0)break;this.entries.delete(c)}}retainNamespacePaths(o,n,s){for(let[a,d]of this.entries)if(d.deviceId===o&&d.namespace===n&&!s.has(d.path))this.entries.delete(a)}}function lr({deviceId:o,namespace:n,path:s,byteCount:a,modifiedSeconds:d}){return JSON.stringify([o,n,s,a,d])}import{createHash as ta}from"crypto";import{posix as me}from"path";import{TextDecoder as oa}from"util";var ur={NAMESPACE:"automobile:devices/{deviceId}/downloads/{namespace}",FILE:"automobile:devices/{deviceId}/downloads/{namespace}/{path}"},pr={NAMESPACE:"automobile:devices/{deviceId}/storage-domains/user_files/{namespace}",FILE:"automobile:devices/{deviceId}/storage-domains/user_files/{namespace}/{path}"},mr={NAMESPACE:"automobile:devices/{deviceId}/storage-domains/media_library/{namespace}",FILE:"automobile:devices/{deviceId}/storage-domains/media_library/{namespace}/{path}"};function xe(o){return le(o).replace("/storage-domains/user_files/","/storage-domains/media_library/")}function ea(o){return OP(o).split("/").map((n)=>Ze(n)).join("/")}function Z(o){return gr(o,!1)}function le(o){return gr(o,!0)}function gr(o,n){let s=py(o.namespace),a=`automobile:devices/${Ze(o.deviceId)}/${n?"storage-domains/user_files":"downloads"}/${Ze(s)}`;return o.path===void 0?a:`${a}/${ea(o.path)}`}function rt(o){let n=py(ic(o.namespace));return{deviceId:ic(o.deviceId),namespace:n,...o.path!==void 0?{path:OP(ic(o.path))}:{}}}var ra=67108864,ia=120000,br="__AUTOMOBILE_NS_MISSING__",Cr="__AUTOMOBILE_FILE_MISSING__",na=24576,sa="Hash unavailable: file changed or disappeared during listing",nt=null;function DJ(){if(!nt)nt=aa();return nt}function aa(o={}){return new Ir(o.adbFactory??v,o.createUserResolver??((n)=>new It(n)),o.deviceResolver??da,{hashCache:o.hashCache??new ot,iosFixtureReader:o.iosFixtureReader??new kM((n)=>new L(n),Kb)})}async function da(o){return _s(o,"SharedStorageReadService")}class Ir{adbFactory;createUserResolver;deviceResolver;describeReadCoverage(o,n="user_files"){return Ae(o,n)}hashCache;iosFixtureReader;constructor(o,n,s,{hashCache:a,iosFixtureReader:d}){this.adbFactory=o;this.createUserResolver=n;this.deviceResolver=s;this.hashCache=a,this.iosFixtureReader=d}async list(o){let n=py(o.namespace),s={deviceId:o.deviceId,platform:"android",namespace:n,observation:"complete",files:[]},a=await this.deviceResolver(o.deviceId);if(!a)return{...s,observation:"unavailable",reason:Rr(o.deviceId)};s.platform=a.platform;let d=vr(a,o);if(d)return{...s,observation:"unsupported",reason:d};if(a.platform==="ios")return this.listIos(a,o,s);let c=this.adbFactory.create(a),u;try{u=await this.createUserResolver(c).resolve({explicitUserId:o.explicitUserId,currentUser:!0,signal:o.signal})}catch(f){return e.warn(`[SharedStorageRead] resolve user failed for list: ${r(f)}`,f),{...s,observation:"unavailable",reason:r(f)}}let m=hr(u.userId,n),p={...s,userId:u.userId,userSource:u.source,downloadsDirectory:m};try{let f=await at(c,ca(m),o.signal);if(f.trim()===br)return this.hashCache.retainNamespacePaths(o.deviceId,n,new Set),{...p,observation:"missing",reason:Ra(m)};let S=pa(f,m);this.hashCache.retainNamespacePaths(o.deviceId,n,new Set(S.map((T)=>T.absolutePath)));let h=await fa(c,S,o,{namespace:n,directory:m,cache:this.hashCache});return{...p,observation:"complete",files:ma(S,h,o.deviceId,n).map((T)=>({...T,resourceUri:yr(o)({deviceId:o.deviceId,namespace:n,path:T.path})}))}}catch(f){return e.warn(`[SharedStorageRead] list ${m} failed: ${r(f)}`,f),{...p,observation:"unavailable",reason:r(f)}}}async read(o){let n=py(o.namespace),s=OP(o.path),a={deviceId:o.deviceId,platform:"android",namespace:n,path:s,observation:"complete",resourceUri:yr(o)({deviceId:o.deviceId,namespace:n,path:s})},d=await this.deviceResolver(o.deviceId);if(!d)return{...a,observation:"unavailable",reason:Rr(o.deviceId)};if(a.platform=d.platform,d.platform==="ios"&&o.domain!=="media_library")a.resourceUri=le({deviceId:o.deviceId,namespace:n,path:s});let c=vr(d,o);if(c)return{...a,observation:"unsupported",reason:c};if(d.platform==="ios")return this.readIos(d,o,a);let u=this.adbFactory.create(d),m;try{m=await this.createUserResolver(u).resolve({explicitUserId:o.explicitUserId,currentUser:!0,signal:o.signal})}catch(S){return e.warn(`[SharedStorageRead] resolve user failed for read: ${r(S)}`,S),{...a,observation:"unavailable",reason:r(S)}}a.userId=m.userId;let p=hr(m.userId,n),f=me.join(p,s);if(f!==p&&!f.startsWith(`${p}/`))throw new t(`path escapes shared-storage namespace ${n}`);try{let S=await at(u,ua(f),o.signal);if(S.trim()===Cr)return{...a,observation:"missing",reason:ba(f)};let h=Buffer.from(S.replace(/\s+/g,""),"base64");return{...a,...fr(h,s)}}catch(S){return e.warn(`[SharedStorageRead] read ${f} failed: ${r(S)}`,S),{...a,observation:"unavailable",reason:r(S)}}}async listIos(o,n,s){try{let a=await this.iosFixtureReader.listNamespace(o,s.namespace,n.signal);return{...s,files:a.map((d)=>({path:d.path,name:d.name??me.basename(d.path),byteCount:d.byteCount,lastModified:d.lastModified,mimeType:dt(d.path),resourceUri:le({deviceId:o.deviceId,namespace:s.namespace,path:d.path})}))}}catch(a){return e.warn("[SharedStorageRead] iOS namespace list failed",a),{...s,observation:Sr(a)?"missing":"unavailable",reason:r(a)}}}async readIos(o,n,s){try{let a=await this.iosFixtureReader.readNamespaceFile(o,s.namespace,s.path,n.signal);return{...s,...fr(a,s.path)}}catch(a){return e.warn("[SharedStorageRead] iOS namespace read failed",a),{...s,observation:Sr(a)?"missing":"unavailable",reason:r(a)}}}}function fr(o,n){let s=ya(o);return{byteCount:o.byteLength,sha256:ta("sha256").update(o).digest("hex"),mimeType:dt(n)??(s===void 0?"application/octet-stream":"text/plain; charset=utf-8"),...s===void 0?{blob:o.toString("base64")}:{text:s}}}function Sr(o){return o instanceof Error&&"code"in o&&o.code==="ENOENT"}function yr(o){return o.domain==="media_library"?xe:Z}function vr(o,n){if(n.domain==="media_library"){if(o.platform==="ios")return De;if(py(n.namespace)!=="automobile-media")return"Only the putAppFile automobile-media namespace supports media_library list/read."}if(o.platform==="ios"&&z(o)!=="simulator")return ha(o.platform);return}function hr(o,n){return me.join(`/storage/emulated/${o}/Download`,n)}function ca(o){return`if [ -d ${b(o)} ]; then find ${b(o)} -type f -exec stat -c '%s|%Y|%n' {} \\; ; else printf '%s' ${b(br)}; fi`}function la(o){return`sha256sum ${o.map((n)=>b(n)).join(" ")}`}function ua(o){return`if [ -f ${b(o)} ]; then base64 ${b(o)}; else printf '%s' ${b(Cr)}; fi`}async function at(o,n,s){return(await o.executeCommand(`shell ${n}`,{timeoutMs:ia,maxBuffer:ra,noRetry:!0,signal:s})).stdout}function pa(o,n){let s=`${n}/`;return o.split(/\n/).map((a)=>a.replace(/\r$/,"")).filter((a)=>a.length>0).map((a)=>{let d=a.indexOf("|"),c=a.indexOf("|",d+1);if(d<0||c<0)return null;let u=a.slice(c+1);if(!u.startsWith(s))return null;let m=u.slice(s.length),p=Number(a.slice(0,d)),f=Number(a.slice(d+1,c));if(!Number.isFinite(p)||!Number.isFinite(f))return null;return{path:m,absolutePath:u,byteCount:p,modifiedSeconds:f}}).filter((a)=>a!==null)}function ma(o,n,s,a){return o.map((d)=>{let c=dt(d.path),u=n.get(d.absolutePath);return{path:d.path,name:me.basename(d.path),byteCount:d.byteCount,...c?{mimeType:c}:{},...u?{sha256:u}:{sha256Unavailable:sa},lastModified:new Date(d.modifiedSeconds*1000).toISOString(),resourceUri:Z({deviceId:s,namespace:a,path:d.path})}})}function ga(o){let n=new Map;for(let s of o.split(/\n/)){let d=s.replace(/\r$/,"").match(/^([0-9a-f]{64}) (.*)$/);if(d)n.set(d[2],d[1].toLowerCase())}return n}async function fa(o,n,s,{namespace:a,directory:d,cache:c}){let u=new Map,m=(f)=>({deviceId:s.deviceId,namespace:a,path:f.absolutePath,byteCount:f.byteCount,modifiedSeconds:f.modifiedSeconds}),p=n.filter((f)=>{let S=c.get(m(f));if(S)u.set(f.absolutePath,S);return!S});for(let f of Sa(p)){let S;try{S=await at(o,la(f.map((T)=>T.absolutePath)),s.signal)}catch(T){e.warn(`[SharedStorageRead] hash files in ${d} failed: ${r(T)}`,T);continue}let h=ga(S);for(let T of f){let I=h.get(T.absolutePath);if(!I)continue;u.set(T.absolutePath,I),c.set(m(T),I)}}return u}function Sa(o){let n=[],s=[],a=10;for(let d of o){let c=b(d.absolutePath).length+(s.length>0?1:0);if(s.length>0&&a+c>na)n.push(s),s=[],a=10;s.push(d),a+=c}if(s.length>0)n.push(s);return n}function ya(o){try{let n=new oa("utf-8",{fatal:!0,ignoreBOM:!0}).decode(o);return n.includes("\x00")?void 0:n}catch(n){e.debug(`src/server/sharedStorageReadService.ts utf8 decode failed: ${n}`,n);return}}var va={txt:"text/plain",md:"text/markdown",csv:"text/csv",json:"application/json",xml:"application/xml",html:"text/html",pdf:"application/pdf",zip:"application/zip",png:"image/png",jpg:"image/jpeg",jpeg:"image/jpeg",gif:"image/gif",webp:"image/webp",bmp:"image/bmp",heic:"image/heic",mp4:"video/mp4",mov:"video/quicktime",mkv:"video/x-matroska",webm:"video/webm",mp3:"audio/mpeg",m4a:"audio/mp4",aac:"audio/aac",flac:"audio/flac",ogg:"audio/ogg",wav:"audio/wav"};function dt(o){let n=me.basename(o),s=n.lastIndexOf(".");if(s<=0)return;return va[n.slice(s+1).toLowerCase()]}function Rr(o){return`Device not found or not booted: ${o}`}function ha(o){return`Bounded user_files reads require Android or an iOS Simulator; physical ${o} devices are unsupported.`}function Ra(o){return`Downloads namespace directory does not exist: ${o}`}function ba(o){return`File does not exist in the Downloads namespace: ${o}`}var Ta=g({itemClass:ne("genericPassword"),service:y(),account:y(),accessGroup:y()}),Ca=g({schemaVersion:ne(1),capability:ne("storage.keychain"),inspection:ne("unavailable"),deletion:A(["enabled","disabled","unknown"]),reason:A(["DISABLED","NO_ALLOWLISTED_SCOPES","SDK_TOO_OLD","BRIDGE_UNAVAILABLE"]).nullable().optional(),deletionScopes:j(Ta)}),Ea=g({kind:A(["user_defaults_suite","core_data"]),identifier:y(),sharing:A(["app_private","app_group"]),appGroup:y().nullable().optional(),coordination:A(["single_process","uncoordinated","host_coordinated"]),query:A(["supported","unsupported"]),reason:y().nullable().optional()});function Pr(o){return{schemaVersion:1,capability:"storage.keychain",inspection:"unavailable",deletion:"unknown",reason:o,deletionScopes:[]}}function Dr(o){let n=typeof o==="object"&&o!==null?o:{},s=Ca.safeParse(n.keychain),a=Array.isArray(n.stores)?n.stores:[];return{keychain:s.success?s.data:Pr("SDK_TOO_OLD"),stores:a.flatMap((d)=>{let c=Ea.safeParse(d);return c.success?[c.data]:[]})}}function ct(){return{keychain:Pr("BRIDGE_UNAVAILABLE"),stores:[]}}var we=1;function D(o,n,s,a){if(n)return{operation:o,state:"unsupported",reason:n};let d=s.filter((u)=>u.satisfied===!1),c=s.filter((u)=>u.satisfied===void 0);if(d.length>0)return{operation:o,state:"unavailable",reason:`Missing prerequisite: ${d.map((u)=>u.label).join(", ")}.`,prerequisites:[...d,...c].map((u)=>u.label)};if(c.length>0)return{operation:o,state:"partial",reason:`Available pending verification of: ${c.map((u)=>u.label).join(", ")}.`,prerequisites:c.map((u)=>u.label)};return{operation:o,state:"supported",reason:a}}function Ia(o,n){return{operation:o,state:"unavailable",reason:n}}function O(o,n){return{label:o,satisfied:n}}var xr="AutoMobile SDK embedded with storage inspection",wr="active CtrlProxy runner session",Ar="debuggable app build",J="active Android user/profile",Pa="managed iOS Files fixture app installed",Da="opt-in iOS app file-access integration";function Aa(o){let n=[O(xr,o.embeddedSdk),O(wr,o.sessionActive)];return{domain:"key_value",portable:!0,platformScope:"cross-platform",note:"SharedPreferences / DataStore (Android) and UserDefaults (iOS) via the AutoMobile SDK.",operations:["list","read","write","namespace_reset","observe"].map((a)=>D(a,void 0,n)),...Nr(o,"user_defaults_suite")}}function Nr(o,n){if(o.platform!=="ios"||!o.iosStorage)return{};return{stores:o.iosStorage.stores.filter((s)=>s.kind===n)}}function xa(o){let n=[O(xr,o.embeddedSdk),O(wr,o.sessionActive)];return{domain:"databases",portable:!0,platformScope:"cross-platform",note:"SQLite inspection (list, read, bounded queries) and mutation via the opt-in sqlQuery tool.",operations:["list","read","observe","write"].map((s)=>D(s,void 0,n)),...Nr(o,"core_data")}}function wa(o){let n=["list","read","write"],s=(a)=>{if(o.platform==="ios"){if(o.deviceType==="simulator")return D(a,void 0,[]);if(o.iosFileIntegration===!0)return{operation:a,state:"partial",reason:"Available only through an opt-in app file-access integration; not native iOS behavior.",prerequisites:[Da]};return D(a,"Direct app-container file access is unsupported on physical iOS devices unless an opt-in app integration advertises it.",[])}if(o.deviceType==="emulator")return D(a,void 0,[]);if(o.debuggableBuild===!1)return{operation:a,state:"partial",reason:"Private containers require a debuggable app build; externalFiles remains available.",prerequisites:[Ar]};return D(a,void 0,[O(Ar,o.debuggableBuild)])};return{domain:"app_containers",portable:!0,platformScope:"cross-platform",note:"putAppFile target.domain app_containers. Canonical resources: automobile:devices/{deviceId}/storage-domains/app_containers/{appId}/{container}[/{path}]{?userId}; compatibility aliases: automobile:devices/{deviceId}/apps/{appId}/files/{container}[/{path}]{?userId}. Fully available on simulators/emulators; qualified on physical devices.",operations:n.map(s)}}function Na(o){if(o.platform==="ios"){let n=o.deviceType==="simulator"?void 0:"Physical iOS user_files is unsupported without an on-device fixture-app integration; generic iosFileIntegration does not provide it.",s=[O(Pa,o.iosFilesFixtureInstalled)];return{domain:"user_files",portable:!1,platformScope:"cross-platform",note:"iOS Simulator only: managed fixture-app Documents/automobile namespaces. The fixture app is built and installed on the first write when it is missing (needs Xcode's simulator SDK). Writes require its installed container; picker visibility is reported separately and unavailable unless verified. Physical iOS is unsupported. Canonical user_files resources list/read only these managed namespaces.",operations:[n?D("list",n,[]):D("list",void 0,[]),n?D("read",n,[]):D("read",void 0,[]),D("write",n,s,"Stages files in the managed iOS Files fixture app; picker visibility requires separate verification."),D("namespace_reset",n,s,"Resets only Documents/automobile/<namespace> in the managed fixture app."),D("media_indexing",n??"iOS user_files has no Android media indexing equivalent.",[])]}}return{domain:"user_files",portable:!1,platformScope:"cross-platform",note:'Android user-visible shared storage. putAppFile target.domain user_files writes, resets one namespace, and optionally indexes media in bounded Downloads namespaces; canonical resources: automobile:devices/{deviceId}/storage-domains/user_files/{namespace}[/{path}]; compatibility aliases: the "Downloads Namespace Files" and "Downloads Namespace File" MCP resources expose listing and reading at automobile:devices/{deviceId}/downloads/{namespace}[/{path}].',operations:[D("list",void 0,[O(J,o.activeUserProfile)],'Exposed by the "Downloads Namespace Files" MCP resource template.'),D("read",void 0,[O(J,o.activeUserProfile)],'Exposed by the "Downloads Namespace File" MCP resource template.'),D("write",void 0,[O(J,o.activeUserProfile)]),D("namespace_reset",void 0,[O(J,o.activeUserProfile)],"Resets only the declared user_files namespace."),D("media_indexing",void 0,[O(J,o.activeUserProfile)],"Requested with putAppFile target.indexMedia.")]}}function ka(o){let n=D("write",void 0,[O(J,o.activeUserProfile)]),s=o.platform==="ios"?D("media_indexing","iOS has no MediaScanner-style host-triggered indexing equivalent.",[]):D("media_indexing",void 0,[O(J,o.activeUserProfile)],"Verified as part of Android putAppFile media_library writes."),a=D("write",o.deviceType==="simulator"?void 0:"iOS media-library fixture staging is only supported on iOS Simulators.",[],"Imports image and video fixtures through xcrun simctl addmedia; picker visibility is unverified.");return{domain:"media_library",portable:!1,platformScope:"cross-platform",note:o.platform==="android"?"Android putAppFile writes bounded media fixtures and verifies MediaStore discovery; list/read is bounded to Download/automobile-media.":o.deviceType==="simulator"?"iOS Simulator putAppFile imports image and video fixtures through simctl addmedia; browse/read is not exposed.":"iOS physical media-library mutation is not exposed.",operations:[...["list","read"].map((d)=>o.platform==="ios"?Ia(d,De):D(d,void 0,[O(J,o.activeUserProfile)],"Canonical media_library resources read only Download/automobile-media.")),o.platform==="ios"?a:n,s]}}function Ma(o){if(o.platform==="android")return{domain:"secure_state",portable:!1,platformScope:"android",note:"App-owned Android Keystore metadata via storage.keystore; exact declared scopes only, never key material. resetKeychain deletes only declared aliases; package-data reset is separate.",capabilities:o.keystore?[o.keystore]:[],operations:[{operation:"read",state:"unavailable",reason:"SDK alias metadata is read-only; no host storage read surface is exposed in this slice.",prerequisites:["code-only KeystoreTestState opt-in and exact declared scope (#5189)"]},D("write","Keystore aliases are not written; scoped alias deletion is exposed by resetKeychain with a declared scope or alias.",[]),D("namespace_reset","Package-data reset is explicit and separate; resetKeychain deletes only aliases declared in a scope.",[])]};return Oa(o)}function Oa(o){return{domain:"secure_state",portable:!1,platformScope:"ios",note:"Keychain. Values are never read or exported. Deleting an exact allowlisted item uses deleteKeychainItem when the capability reports deletion enabled; it still needs storage mutation authorization.",capabilities:o.iosStorage?[o.iosStorage.keychain]:[],operations:[{operation:"read",state:"unavailable",reason:"Keychain values are unavailable by default; no host Keychain inspection adapter is registered.",prerequisites:["host Keychain inspection adapter with an explicit allowlist and per-field redaction"]},D("write","Keychain writes are not an AutoMobile storage feature; exact allowlisted deletion uses deleteKeychainItem.",[]),D("namespace_reset","Bulk Keychain reset is not offered for an app; deleteKeychainItem deletes only exact allowlisted items, and resetKeychain resets the whole simulator Keychain.",[])]}}function _a(){return[{domain:"user_files",platform:"android",description:"Android bounded Downloads namespaces are platform-specific; the separate iOS Simulator fixture-app provider does not make user_files portable."},{domain:"user_files",platform:"ios",description:"iOS Simulator staging requires an installed managed Files fixture app; picker visibility requires separate verification. Physical iOS is unsupported; this is not portable storage."},{domain:"app_containers",platform:"ios",description:"Physical-iOS app-container file access is exposed only through an opt-in app integration, not as native portable behavior."},{domain:"secure_state",platform:"ios",description:"Keychain capability and Core Data store states come from the embedded SDK and are iOS-specific; treat as an extension point, not portable storage."}]}function Ua(o,n){if((o==="user_files"||o==="media_library")&&(n==="list"||n==="read"))return`SharedStorageReadService ${n} provider`;return n==="namespace_reset"||n==="media_indexing"?`write provider declaring ${n}`:`${n} provider`}function lt(o,n){let a=(o.providerCoverage??W8()).find((c)=>c.platform===o.platform&&c.domain===n.domain)??{write:!1,list:!1,read:!1,namespaceReset:!1,mediaIndexing:!1},d={write:a.write,list:a.list,read:a.read,namespace_reset:a.write&&a.namespaceReset,media_indexing:a.write&&a.mediaIndexing};if(n.domain==="user_files"||n.domain==="media_library"){let c=(n.domain==="user_files"?o.sharedStorageReadCoverage:o.mediaLibraryReadCoverage)??Ae(o.platform,n.domain);d.list=c.list,d.read=c.read}return{...n,operations:n.operations.map((c)=>{let u=c.operation;if(d[u])return c;let m=Ua(n.domain,u);return{...c,state:c.state==="unsupported"?"unsupported":"unavailable",reason:`${c.reason?`${c.reason} `:""}No ${m} is registered for ${o.platform}:${n.domain}.`}})}}function Ne(o){return{schemaVersion:we,platform:o.platform,deviceType:o.deviceType,appId:o.appId,context:{embeddedSdk:o.embeddedSdk,sessionActive:o.sessionActive,debuggableBuild:o.debuggableBuild,authorized:o.authorized,activeUserProfile:o.activeUserProfile,iosFileIntegration:o.iosFileIntegration,iosFilesFixtureInstalled:o.iosFilesFixtureInstalled},domains:[lt(o,wa(o)),lt(o,Na(o)),lt(o,ka(o)),Aa(o),xa(o),Ma(o)],extensionPoints:_a()}}function kr(o,n,s){return o.domains.find((a)=>a.domain===n)?.operations.find((a)=>a.operation===s)}var Fa="automobile:devices/{deviceId}/storage/capabilities{?appId}";async function La(o){return _s(o,"StorageCapabilityResources")}function Or(o){if(o.platform==="ios")return z({deviceId:o.deviceId});return o.deviceId.startsWith("emulator-")?"emulator":"physical"}function ut(o,n,s,a){return{platform:te(o.platform,"Storage capability resolution"),deviceType:Or(o),embeddedSdk:N.isEmbeddedSdkEnabled(),sessionActive:!0,activeUserProfile:s,...a===void 0?{}:{debuggableBuild:a},appId:n}}async function Ba(o,n){let s;if(o.platform==="android")try{let a=(n.adbFactory??v).create(o);await(n.createUserResolver??((c)=>new It(c)))(a).resolve({currentUser:!0}),s=!0}catch(a){if(a instanceof Nm)e.debug(`[StorageCapabilityResources] No selectable Android profile: ${a}`),s=!1;else e.warn(`[StorageCapabilityResources] Active Android profile probe failed: ${a}`)}return s}async function $a(o,n,s){if(o.platform!=="android"||Or(o)!=="physical"||!n)return;try{let a=(s.adbFactory??v).create(o);return await(s.probeDebuggableBuild??cr)(a,n)}catch(a){e.warn("[StorageCapabilityResources] Debuggable Android build probe failed",a);return}}async function qa(o,n,s){try{return await(s.createKeystoreDiscovery?.(o)??E.getInstance(o)).discoverKeystore(n)}catch(a){return e.warn("[StorageCapabilityResources] Keystore discovery unavailable",a),{schemaVersion:1,capability:"storage.keystore",outcome:"unavailable",reason:"BRIDGE_UNAVAILABLE",bridgeAvailable:!1,metadata:"supported",mutation:"declared_unsupported",deviceLocked:"unknown",scopes:[]}}}function _r(o){return{discoverIosStorage:async(n)=>Dr(await o.getStorageCapabilitiesForIos(n))}}async function ja(o,n,s){if(!s.createIosStorageDiscovery)return ct();try{return await s.createIosStorageDiscovery(o).discoverIosStorage(n)}catch(a){return e.warn("[StorageCapabilityResources] iOS storage discovery unavailable",a),ct()}}function Ha(o,n){let s=`automobile:devices/${o}/storage/capabilities`;return n?`${s}?appId=${Ze(n)}`:s}function Ka(o){return o.appFileCoverage?o.appFileCoverage.describeProviderCoverage():EM().describeProviderCoverage?.()??A1()}function Mr(o,n,s="user_files"){return o.sharedStorageReadCoverage?o.sharedStorageReadCoverage(n,s):DJ().describeReadCoverage?.(n,s)}async function Va(o,n={}){let{deviceId:s}=o,a=o.appId?o.appId:void 0,d=Ha(s,a);try{let c=await La(s);if(!c)return{uri:d,mimeType:"application/json",text:JSON.stringify({error:`Device not found or not booted: ${s}`,schemaVersion:we},null,2)};let[u,m]=await Promise.all([Ba(c,n),$a(c,a,n)]),p=ut(c,a,u,m);if(p.providerCoverage=Ka(n),p.sharedStorageReadCoverage=Mr(n,c.platform),p.mediaLibraryReadCoverage=Mr(n,c.platform,"media_library"),c.platform==="android"&&a&&p.embeddedSdk)p.keystore=await qa(c,a,n);if(c.platform==="ios"&&a&&p.embeddedSdk)p.iosStorage=await ja(c,a,n);let f=Ne(p);return{uri:d,mimeType:"application/json",text:JSON.stringify({deviceId:s,...f},null,2)}}catch(c){return e.error(`[StorageCapabilityResources] Failed to compute capabilities: ${c}`),{uri:d,mimeType:"application/json",text:JSON.stringify({error:`Failed to compute storage capabilities: ${c}`,schemaVersion:we},null,2)}}}function Ur(o={}){q.registerTemplate(Fa,"Storage Capabilities",{description:"Versioned descriptor of which storage operations (list, read, write, namespace reset, media indexing, observation) are available per logical domain (app containers, user-visible files, media library, key-value state, databases, secure state) for a device and optional app context. Clients negotiate capabilities instead of inferring them from platform names.",mimeType:"application/json",handler:(n)=>Va(n,o)}),e.info("[StorageCapabilityResources] Registered storage capability resources")}var Ga=1,Ja="automobile:devices/{deviceId}/sdk/capabilities{?appId}";function za(o,n){let s=`automobile:devices/${o}/sdk/capabilities`;return n?`${s}?appId=${Ze(n)}`:s}function ge(o,n,s){return{uri:o,mimeType:"application/json",text:JSON.stringify({schemaVersion:Ga,deviceId:s,...n},null,2)}}async function Wa(o,n){try{let a=await(n.adbFactory??v).create(o).getForegroundApp();return a?{packageName:a.packageName,userId:a.userId}:void 0}catch(s){e.warn("[SdkCapabilityResources] Foreground app probe failed",s);return}}async function Ya(o,n,s,a){try{return await(a.createReader?.(o)??E.getInstance(o)).getSdkCapabilities(n,s)}catch(d){return e.warn("[SdkCapabilityResources] SDK capability read failed",d),ku("CTRLPROXY_UNREACHABLE")}}async function Qa(o,n={}){let{deviceId:s}=o,a=o.appId?o.appId:void 0,d=za(s,a);try{let c=await _s(s,"SdkCapabilityResources");if(!c)return ge(d,{error:`Device not found or not booted: ${s}`});if(c.platform!=="android")return ge(d,{appId:a??null,result:ku("UNSUPPORTED_PLATFORM")},s);let u=await Wa(c,n),m=a??u?.packageName;if(!m)return ge(d,{appId:null,result:ku("NO_APP")},s);let p=u?.packageName===m?u.userId:void 0;return ge(d,{appId:m,result:await Ya(c,m,p,n)},s)}catch(c){return e.error(`[SdkCapabilityResources] Failed to read SDK capabilities: ${c}`),ge(d,{error:`Failed to read SDK capabilities: ${c}`},s)}}function Fr(o={}){q.registerTemplate(Ja,"SDK Capabilities",{description:"Versioned SDK capability states and capture policy (headers, bodies, mutations) for the bound device's app, read through CtrlProxy. An older SDK, CtrlProxy, or a release build yields status 'unavailable' with a reason, never an empty capability set.",mimeType:"application/json",handler:(n)=>Qa(n,o)}),e.info("[SdkCapabilityResources] Registered SDK capability resources")}var Br={STORES:"automobile:devices/{deviceId}/storage/{packageName}/datastore/{adapterName}/stores",ENTRIES:"automobile:devices/{deviceId}/storage/{packageName}/datastore/{adapterName}/{storeName}/entries"},W="datastore",Xa={listDataStores(o,n,s){return E.getInstance(o,v).listDataStores(n,s)},getDataStore(o,n,s,a){return E.getInstance(o,v).getDataStore(n,s,a)}},ke={stores:new Map,entries:new Map};function $r(o){let n=JSON.stringify(o),s=0;for(let a=0;a<n.length;a++){let d=n.charCodeAt(a);s=(s<<5)-s+d,s=s&s}return s.toString(16)}async function Za(o){return _s(o,"DataStoreResources")}function ed(o,n,s){return`automobile:devices/${o}/storage/${Ze(n)}/datastore/${Ze(s)}/stores`}function td(o,n,s,a){return`automobile:devices/${o}/storage/${Ze(n)}/datastore/${Ze(s)}/${Ze(a)}/entries`}function ee(o,n){return{uri:o,mimeType:"application/json",text:JSON.stringify(n,null,2)}}function qr(o){return ee(Ii(o)??"",{status:"unavailable",kind:W,deviceId:o.deviceId,reason:"Malformed resource URI: a path segment is not valid percent-encoding."})}function Me(o,n,s){let a=Ne(ut(o,n));return kr(a,"key_value",s)}async function jr(o,n,s,a){let d=await Za(o);if(!d)return{diagnostic:{status:"unavailable",kind:W,deviceId:o,packageName:n,adapterName:s,reason:`Device not found or not booted: ${o}`}};if(d.platform!=="android")return{diagnostic:{status:"unsupported",kind:W,deviceId:o,packageName:n,adapterName:s,platform:d.platform,reason:`DataStore is Android-only; not available on ${d.platform}.`,capability:Me(d,n,a)}};if(!N.isEmbeddedSdkEnabled()){let c=Me(d,n,a);return{diagnostic:{status:"disabled",kind:W,deviceId:o,packageName:n,adapterName:s,platform:d.platform,reason:c?.reason??"DataStore inspection requires the AutoMobile SDK embedded with storage inspection.",capability:c}}}return{device:d}}async function od(o,n){let s=o.deviceId,a=Lo(o.packageName),d=Lo(o.adapterName);if(a===null||d===null)return qr(o);let c=ed(s,a,d),u=await jr(s,a,d,"list");if("diagnostic"in u)return ee(c,u.diagnostic);let m=u.device;try{let p=await n.listDataStores(m,a,d),f=new Date().toISOString(),S=$r(p),h=`${s}:${a}:${d}`,T=ke.stores.get(h);if(T&&T.hash!==S)q.notifyResourceUpdated(c);return ke.stores.set(h,{hash:S}),ee(c,{status:"available",kind:W,deviceId:s,packageName:a,adapterName:d,platform:m.platform,stores:p,totalCount:p.length,lastUpdated:f,capability:Me(m,a,"list")})}catch(p){e.warn(`[DataStoreResources] Failed to list data stores: ${p}`);let f=uy(p);return ee(c,{status:"unavailable",kind:W,deviceId:s,packageName:a,adapterName:d,platform:m.platform,reason:f?TM(a):`Failed to list data stores (adapter or app integration may be absent): ${p}`})}}async function rd(o,n){let s=o.deviceId,a=Lo(o.packageName),d=Lo(o.adapterName),c=Lo(o.storeName);if(a===null||d===null||c===null)return qr(o);let u=td(s,a,d,c),m=await jr(s,a,d,"read");if("diagnostic"in m)return ee(u,{...m.diagnostic,name:c});let p=m.device;try{let f=await n.getDataStore(p,a,d,c),S=new Date().toISOString(),h=$r(f),T=`${s}:${a}:${d}:${c}`,I=ke.entries.get(T);if(I&&I.hash!==h)q.notifyResourceUpdated(u);return ke.entries.set(T,{hash:h}),ee(u,{status:"available",kind:W,deviceId:s,packageName:a,adapterName:d,name:c,platform:p.platform,entries:f,totalCount:f.length,lastUpdated:S,capability:Me(p,a,"read")})}catch(f){e.warn(`[DataStoreResources] Failed to get data store entries: ${f}`);let S=uy(f);return ee(u,{status:"unavailable",kind:W,deviceId:s,packageName:a,adapterName:d,name:c,platform:p.platform,reason:S?TM(a):`Failed to read data store (adapter or app integration may be absent): ${f}`})}}function Hr(o=Xa){q.registerTemplate(Br.STORES,"App DataStore Instances",{description:"List the Jetpack DataStore instances an app exposes through a host-registered AutoMobile SDK adapter (Android only).",mimeType:"application/json",handler:(n)=>od(n,o)}),q.registerTemplate(Br.ENTRIES,"DataStore Instance Entries",{description:"Read the key-value entries of a named Jetpack DataStore instance via a host-registered AutoMobile SDK adapter (Android only).",mimeType:"application/json",handler:(n)=>rd(n,o)}),e.info("[DataStoreResources] Registered DataStore resources")}async function id(){let{getAppFileService:o}=await import("./chunk-gsyfebqj.js");return o()}function nd(o,n=qu){return async(s)=>{let a=aG(s),d=await(await o()).listFiles({deviceId:a.deviceId,appId:a.appId,container:a.container,userId:a.userId});return{uri:n(a),mimeType:"application/json",text:JSON.stringify(d,null,2)}}}function sd(o,n=qu){return async(s)=>{let a=aG(s);if(a.path===void 0)throw Error("App file resource path is required.");let d=await(await o()).readFile({deviceId:a.deviceId,appId:a.appId,container:a.container,userId:a.userId,path:a.path});return{uri:n(a),mimeType:d.mimeType,...d.text!==void 0?{text:d.text}:{blob:d.blob??""}}}}function Kr(o){let n=o?async()=>o:id;for(let[s,a]of[[s8,a8],[o8,qu]])q.registerTemplate(s.CONTAINER,"App Container Files",{description:"List files in a logical app container for a specific device and app. Android auto-resolves the installed user; optional ?userId=N selects a profile.",mimeType:"application/json",handler:nd(n,a)}),q.registerTemplate(s.FILE,"App Container File",{description:"Read a file from a logical app container. Android auto-resolves the installed user; optional ?userId=N selects a profile. UTF-8 content is returned as text; binary content is returned as a base64 MCP blob.",mimeType:"application/octet-stream",handler:sd(n,a)})}var ad={resolveActiveSession:Xp,service:zU};function dd(o){try{return decodeURIComponent(o)}catch(n){return e.debug(`[SessionLogResources] undecodable session segment ${o}: ${n}`),o}}function Oe(o,n,s){return{uri:o,mimeType:"application/json",text:JSON.stringify({code:n,error:s},null,2)}}function cd(o){return async(n,s)=>{let{sessionUuid:a,appId:d,...c}=n,u=dd(a),m=Ii(n)??`automobile:device-session/${a}/apps/${d}/logs`;if(s.sessionUuid!==u)return Oe(m,"SESSION_NOT_BOUND","This resource can only be read by its bound device session.");let p=o.resolveActiveSession(u);if(!p)return Oe(m,"SESSION_NOT_ACTIVE",`No active device session found for sessionUuid ${u}.`);let f;try{f=d8(d,c)}catch(h){return Oe(m,"INVALID_REQUEST",r(h))}let S=l8(u,f);try{let h=await o.service().collect({sessionUuid:u,device:p.device,request:f,signal:s.signal});return{uri:S,mimeType:"application/json",text:JSON.stringify(h,null,2)}}catch(h){return e.warn(`[SessionLogResources] collection failed for session ${u}: ${r(h)}`,h),Oe(S,"COLLECTION_FAILED",r(h))}}}function Vr(o={}){let n={...ad,...o};q.registerTemplateWithReadContext(c8,"Session Execution Logs",{description:"Collect bounded execution logs for an app on the device owned by the caller's session: named app-container log files (`container`, `paths`), iOS Simulator App Group files (`groupId`, `groupPaths`), and an app-scoped unified-log window (`lastSeconds`, `level`). Each source reports its own outcome; `maxBytes` bounds every entry.",mimeType:"application/json",handler:cd(n)})}var ld="automobile:device-session/{sessionUuid}/apps/{appId}/crash-reports/{reportId}{?maxBytes}",ud=262144,pd=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/,md={resolveActiveSession:Xp,readerFor:(o)=>gZ(o,{adb:v.create(o),fileSystem:Pw})};function pt(o){try{return decodeURIComponent(o)}catch(n){return e.debug(`[CrashReportResources] undecodable segment ${o}: ${n}`),o}}function Jr(o,n){return{uri:o,mimeType:"application/json",text:JSON.stringify(n,null,2)}}function oe(o,n,s){return Jr(o,{code:n,error:s})}function gd(o){if(o===void 0||o==="")return ud;let n=Number(o);if(!Number.isSafeInteger(n)||n<1||n>Gb)return`maxBytes must be an integer from 1 to ${Gb}.`;return n}function fd(o,n){return o.sessionUuid===n||o.ownsSession?.(n)===!0}function yd(o){return async(n,s)=>{let{sessionUuid:a,appId:d,reportId:c}=n,u=pt(a),m=Ii(n)??`automobile:device-session/${a}/apps/${d}/crash-reports/${c}`;if(!fd(s,u))return oe(m,"SESSION_NOT_BOUND","This resource can only be read by its bound device session.");let p=o.resolveActiveSession(u);if(!p)return oe(m,"SESSION_NOT_ACTIVE",`No active device session found for sessionUuid ${u}.`);let f=pt(c),S=gd(n.maxBytes);if(typeof S==="string"||!pd.test(f))return oe(m,"INVALID_REQUEST",typeof S==="string"?S:"reportId is not a valid crash report id.");let h;try{h=WU(pt(d))}catch(T){return oe(m,"INVALID_REQUEST",r(T))}return vd(o,{device:p.device,uri:m,appId:h,reportId:f,maxBytes:S,context:s})}}async function vd(o,n){let{device:s,uri:a,appId:d,reportId:c,maxBytes:u,context:m}=n,p=o.readerFor(s);if(!p)return oe(a,"UNSUPPORTED",`Crash reports are not available for ${s.deviceId}: physical iOS retrieval is not implemented yet.`);try{let f=await p.read(c,m.signal);if(!f||f.report.appId!==d)return oe(a,"NOT_FOUND",`No crash report ${c} for ${d} on this device.`);let S=Buffer.from(f.text,"utf8"),h=S.byteLength>u?S.subarray(0,u):S;return Jr(a,{reportId:f.report.id,source:f.report.source,appId:d,reportPath:f.report.reportPath,byteCount:S.byteLength,truncated:h.byteLength<S.byteLength,text:h.toString("utf8")})}catch(f){return m.signal?.throwIfAborted(),e.warn(`[CrashReportResources] read ${c} failed: ${r(f)}`,f),oe(a,"READ_FAILED",r(f))}}function zr(o={}){let n={...md,...o};q.registerTemplateWithReadContext(ld,"Native Crash Report",{description:"The full OS crash report (an `.ips` on iOS Simulator, a dropbox entry on Android) named by `crashApp`'s `crashReport.reportId`, for the device owned by the caller's session. `maxBytes` bounds the returned text.",mimeType:"application/json",handler:yd(n)})}async function hd(){let{getSharedStorageReadService:o}=await import("./chunk-gmr45m8f.js");return o()}function Rd(o,n=Z,s="user_files"){return async(a)=>{let d=rt(a),c=await(await o()).list({deviceId:d.deviceId,namespace:d.namespace,domain:s});return{uri:n({deviceId:d.deviceId,namespace:d.namespace}),mimeType:"application/json",text:JSON.stringify({...c,files:c.files.map((u)=>({...u,resourceUri:n({deviceId:d.deviceId,namespace:d.namespace,path:u.path})}))},null,2)}}}function bd(o,n=Z,s="user_files"){return async(a)=>{let d=rt(a);if(d.path===void 0)throw Error("Shared-storage file resource path is required.");let c=await(await o()).read({deviceId:d.deviceId,namespace:d.namespace,domain:s,path:d.path}),u=n({deviceId:d.deviceId,namespace:d.namespace,path:d.path});if(c.observation!=="complete")return{uri:u,mimeType:"application/json",text:JSON.stringify({...c,resourceUri:u},null,2)};return{uri:u,mimeType:c.mimeType??"application/octet-stream",...c.text!==void 0?{text:c.text}:{blob:c.blob??""}}}}function Wr(o){let n=o?async()=>o:hd;for(let[s,a,d]of[[pr,le,"user_files"],[mr,xe,"media_library"],[ur,Z,"user_files"]])q.registerTemplate(s.NAMESPACE,d==="media_library"?"Media Library Namespace Files":"Downloads Namespace Files",{description:"List files staged by putAppFile into one bounded storage-domain namespace, with normalized relative paths, byte counts, MIME types, and SHA-256 verification hashes.",mimeType:"application/json",handler:Rd(n,a,d)}),q.registerTemplate(s.FILE,d==="media_library"?"Media Library Namespace File":"Downloads Namespace File",{description:"Read one file staged by putAppFile in a bounded storage-domain namespace. UTF-8 content is returned as text; binary content is returned as a base64 MCP blob.",mimeType:"application/octet-stream",handler:bd(n,a,d)})}var Td="automobile:config/feature-flags/{key}";function Yr(){let o=new Set(ww.map((n)=>n.key));q.registerTemplate(Td,"Feature flag configuration",{description:"Read feature flag state and configuration by key",mimeType:"application/json",handler:async(n)=>{let s=n.key;if(!s||!o.has(s))throw Error(`Unknown feature flag: ${s}`);let c=(await sr.getInstance().listFlags()).find((m)=>m.key===s);if(!c)throw Error(`Feature flag not found: ${s}`);let u={key:c.key,enabled:c.enabled,config:c.config??null};return{uri:`automobile:config/feature-flags/${s}`,mimeType:"application/json",text:JSON.stringify(u)}}})}import{isAbsolute as Cd,win32 as Ed}from"path";var mt="bundletool";async function Qr(o={},n={locator:new fM,hostExecutor:new re}){let s=await n.locator.locate();if(!s.found)return{name:mt,status:"warn",message:`bundletool not found (${s.reason}); installApp cannot install .aab or .apks artifacts`,recommendation:DE.join("; ")};let{command:a}=s;try{let d=await n.hostExecutor.executeCommand(a.file,[...a.args,"version"],{timeoutMs:o.timeoutMs,signal:o.signal});return{name:mt,status:"pass",message:`bundletool ${d.stdout.trim()||"(version unknown)"}`,value:a.location}}catch(d){return e.warn(`[doctor] bundletool version check failed: ${r(d)}`,d),{name:mt,status:"fail",message:`bundletool at ${a.location} did not run: ${r(d)}`,recommendation:DE.join("; ")}}}var gt="automobile:host/toolchain";function Id(o){let n=o.iosDependencies??hn();return{now:()=>new Date,timer:i,checkAdbInstallation:(s)=>l1(void 0,s),checkAdbVersion:(s)=>u1(void 0,s),checkEmulator:(s)=>RG(s),checkAndroidCommandLineTools:(s)=>d1(s),checkBundletool:(s)=>Qr(s),checkXcodeInstallation:()=>p1(void 0,n),checkXcodeCommandLineTools:()=>m1(void 0,n),checkXcrunAvailable:()=>f1(n),checkSimctlAvailable:()=>h1(n),probeCoreDeviceVersion:(s)=>PG(n,s)}}function Xr(o,n){let s=[n];if(typeof o==="string"&&!Zr(o))s.push(o);for(let a of s){let d=a.trim().replace(/^v/i,"").match(/\d+(?:\.\d+)+/);if(d)return d[0]}return}function Y(o,n,s={}){if(n.status!=="pass")return{name:o,available:!1,error:n.message};let a=typeof n.value==="string"?n.value:void 0,d=s.version?Xr(n.value,n.message):void 0;return{name:o,available:!0,...d?{version:d}:{},...s.location&&a!==void 0&&Zr(a)?{location:a}:{}}}function Zr(o){return Cd(o)||Ed.isAbsolute(o)}async function K(o,n,s){let a=new AbortController,d;try{return await l(Promise.resolve().then(()=>n({signal:a.signal,timeoutMs:Yi})),{timer:s,timeoutMs:Yi,label:o,timeoutError:()=>d=Error(`Probe timed out after ${Yi}ms`),onTimeout:()=>a.abort(d)})}catch(c){let u=r(c);return e.warn(`[HostToolchainResources] ${o} probe failed: ${u}`,c),{name:o,status:"fail",message:u}}}async function Pd(o,n){let s=new AbortController,a;try{return await l(Promise.resolve().then(()=>o({signal:s.signal,timeoutMs:Yi})),{timer:n,timeoutMs:Yi,label:"CoreDevice",timeoutError:()=>a=Error(`Probe timed out after ${Yi}ms`),onTimeout:()=>s.abort(a)})}catch(d){let c=r(d);return e.warn(`[HostToolchainResources] CoreDevice probe failed: ${c}`,d),{status:"unparsable",reason:c}}}function Dd(o){return{name:"devicectl",available:o.status==="meets-requirement"||o.status==="below-required",...o.status==="meets-requirement"||o.status==="below-required"?{version:o.version}:{error:o.reason},coreDevice:{status:o.status,requiredVersion:Fk($R),simulatorBootState:o.simulatorBootState??{status:"unavailable",reason:"simulator state unavailable"},capabilities:o.capabilities??{status:"not probed",entries:[]}}}}function Ad(o){try{return o().toISOString()}catch(n){return e.warn(`[HostToolchainResources] clock failed: ${r(n)}`,n),"1970-01-01T00:00:00.000Z"}}function xd(o={}){let n={...Id(o),...o},s=n.timer??i;return async()=>{let a=Ad(n.now);try{let[d,c,u,m,p,f,S,h,T,I]=await Promise.all([K("adb installation",n.checkAdbInstallation,s),K("adb version",n.checkAdbVersion,s),K("emulator",n.checkEmulator,s),K("Android command line tools",n.checkAndroidCommandLineTools,s),K("bundletool",n.checkBundletool,s),K("xcodebuild",n.checkXcodeInstallation,s),K("xcode-select",n.checkXcodeCommandLineTools,s),K("xcrun",n.checkXcrunAvailable,s),K("simctl",n.checkSimctlAvailable,s),Pd(n.probeCoreDeviceVersion,s)]),C=Y("adb",d,{location:!0});if(C.available&&c.status==="pass"){let Q=Xr(c.value,c.message);if(Q)C.version=Q}else if(C.available)C.available=!1,C.error=c.message;let w=Y("sdkmanager",m,{version:!0,location:!0}),M={lastUpdated:a,entries:[C,Y("emulator",u,{location:!0}),w,{...w,name:"avdmanager"},Y("bundletool",p,{version:!0,location:!0}),Y("xcodebuild",f,{version:!0}),Y("xcode-select",S,{location:!0}),Y("xcrun",h),Y("simctl",T),Dd(I)]};return{uri:gt,mimeType:"application/json",text:JSON.stringify(M)}}catch(d){return e.warn(`[HostToolchainResources] resource read failed: ${r(d)}`,d),{uri:gt,mimeType:"application/json",text:JSON.stringify({lastUpdated:a,entries:[]})}}}}function ei(o={}){q.register(gt,"Host Toolchain",{description:"Read-only diagnostic status for Android and Apple host tooling.",mimeType:"application/json",handler:xd(o)})}var ft="automobile:tools";function wd(o){try{return o().toISOString()}catch(n){return e.warn(`[ToolCatalogResource] clock failed: ${r(n)}`,n),"1970-01-01T00:00:00.000Z"}}function Nd(o={}){let n={now:o.now??(()=>new Date),sessionToolSelectionService:o.sessionToolSelectionService??mc()};return async()=>{let s=wd(n.now);try{let a=await Promise.all(F.getAllTools().filter((c)=>F.isUserConfigurableTool(c.name)).map(async(c)=>{let u=await n.sessionToolSelectionService.isEnabled(void 0,c.name,c.defaultEnabled);return{name:c.name,enabledWithoutSession:u,requiresDeviceSession:!u}}));return a.sort((c,u)=>c.name.localeCompare(u.name)),{uri:ft,mimeType:"application/json",text:JSON.stringify({lastUpdated:s,tools:a})}}catch(a){return e.warn(`[ToolCatalogResource] resource read failed: ${r(a)}`,a),{uri:ft,mimeType:"application/json",text:JSON.stringify({lastUpdated:s,tools:[]})}}}}function ti(){q.register(ft,"Tool Catalog",{description:"Every registered AutoMobile tool with its default enabled/gated state, discoverable without acquiring a device.",mimeType:"application/json",handler:Nd()})}var k={REQUEST:"automobile:network/request/{requestId}",TRAFFIC:"automobile:network/traffic",LIVE:"automobile:network/traffic/live",ERRORS:"automobile:network/traffic/errors",SLOW:"automobile:network/traffic/slow",STATS:"automobile:network/stats",STATE:"automobile:network/state",MOCKS:"automobile:network/mocks",CONNECTIVITY:"automobile:network/connectivity"},ni=["host","method","statusCode","since","limit","deviceId","bucketSeconds"],kd=`${k.TRAFFIC}{?${ni.join(",")}}`,Md=new Set(ni);function Ue(o){return{id:o.id,timestamp:o.timestamp,method:o.method,url:o.url,host:o.host,path:o.path,statusCode:o.statusCode,durationMs:o.durationMs,protocol:o.protocol,requestId:o.requestId,connectionId:o.connectionId,direction:o.direction,metadata:o.metadata,sequenceNumber:o.sequenceNumber,contentType:o.contentType,error:o.error}}function Od(o){let n=o.requestBody!==null&&o.requestBodySize>Nz,s=o.responseBody!==null&&o.responseBodySize>Nz;return{id:o.id,timestamp:o.timestamp,method:o.method,url:o.url,statusCode:o.statusCode,durationMs:o.durationMs,host:o.host,path:o.path,protocol:o.protocol,requestId:o.requestId,connectionId:o.connectionId,direction:o.direction,metadata:o.metadata,sequenceNumber:o.sequenceNumber,contentType:o.contentType,requestHeaders:o.requestHeaders,responseHeaders:o.responseHeaders,requestBody:o.requestBody,responseBody:o.responseBody,requestBodySize:o.requestBodySize,responseBodySize:o.responseBodySize,requestBodyTruncated:n,responseBodyTruncated:s,error:o.error}}function _d(o){let n=Object.keys(o).filter((m)=>!Md.has(m));if(n.length>0)throw Error(`Unknown query parameters: ${n.join(", ")}`);let s=o.since?parseInt(o.since,10):void 0,a=o.limit?parseInt(o.limit,10):void 0,d=a?Math.min(Math.max(1,a),200):50,c=o.bucketSeconds?parseInt(o.bucketSeconds,10):void 0,u=c&&Number.isFinite(c)&&c>0?c:void 0;return{host:o.host,method:o.method,statusCode:o.statusCode,sinceTimestamp:s&&Number.isFinite(s)?s:void 0,limit:d,deviceId:o.deviceId,bucketSeconds:u}}var oi=1000;function Ud(o,n){if(o.length===0)return[];let s=n*1000,a=o.map((h)=>h.timestamp),d=Math.min(...a),c=Math.max(...a),u=Math.floor(d/s)*s,m=Math.floor(c/s)*s+s;if(Math.ceil((m-u)/s)>oi)u=m-oi*s;let f=new Map;for(let h=u;h<m;h+=s)f.set(h,[]);for(let h of o){let T=Math.floor(h.timestamp/s)*s,I=f.get(T);if(I)I.push(h)}let S=[];for(let[h,T]of f){let I=T.map((C)=>C.durationMs).sort((C,w)=>C-w);S.push({bucketStart:h,bucketEnd:h+s,requests:T.length,errors:T.filter(Pg).length,avgDurationMs:I.length>0?Math.round(I.reduce((C,w)=>C+w,0)/I.length):0,p50:Math.round(ii(I,50)),p95:Math.round(ii(I,95))})}return S.sort((h,T)=>h.bucketStart-T.bucketStart)}function $d(o){let n=Object.create(null),s=Object.create(null);for(let a of o){let d=a.host??"unknown";if(!n[d])n[d]={requests:0,errors:0,p50:0,p95:0},s[d]=[];if(n[d].requests++,Pg(a))n[d].errors++;if(a.durationMs>0)s[d].push(a.durationMs)}for(let a of Object.keys(n)){let d=s[a].sort((c,u)=>c-u);n[a].p50=Math.round(ii(d,50)),n[a].p95=Math.round(ii(d,95))}return n}var qd={getNetworkEvents:dk,getNetworkEventById:gne};async function ri(o,n){try{let s=_d(o),a=await n.getNetworkEvents(s);if(s.bucketSeconds){let c=Ud(a,s.bucketSeconds);return{uri:k.TRAFFIC,mimeType:"application/json",text:JSON.stringify({timeSeries:c,bucketSeconds:s.bucketSeconds,totalRequests:a.length},null,2)}}let d={events:a.map(Ue),count:a.length,hasMore:a.length>=s.limit};return{uri:k.TRAFFIC,mimeType:"application/json",text:JSON.stringify(d,null,2)}}catch(s){return e.error(`[NetworkResources] Failed to query traffic: ${s}`),{uri:k.TRAFFIC,mimeType:"application/json",text:JSON.stringify({error:`Failed to query traffic: ${s}`})}}}function jd(o){q.register(k.LIVE,"Live Network Traffic",{description:"Real-time captured network traffic. Subscribe to receive notifications on new requests.",mimeType:"application/json",handler:async()=>{let n=await o.getNetworkEvents({limit:20});return{uri:k.LIVE,mimeType:"application/json",text:JSON.stringify({events:n.map(Ue)},null,2)}}}),q.register(k.ERRORS,"Network Errors",{description:"Recent network errors (recorded transport error, missing/zero status, or status >= 400). Subscribe to receive notifications on new errors.",mimeType:"application/json",handler:async()=>{let n=await o.getNetworkEvents({errorsOnly:!0,limit:20});return{uri:k.ERRORS,mimeType:"application/json",text:JSON.stringify({errors:n.map(Ue)},null,2)}}}),q.register(k.STATS,"Network Stats",{description:"Aggregate network statistics with p50/p95 latency. Subscribe to receive notifications when error rate crosses threshold.",mimeType:"application/json",handler:async()=>{let n=await o.getNetworkEvents({limit:200}),s=n.length,a=n.filter(Pg).length,d=s>0?a/s:0,c=n.map((S)=>S.durationMs).filter((S)=>S>0).sort((S,h)=>S-h),u=c.length>0?c.reduce((S,h)=>S+h,0)/c.length:0,m=Math.round(ii(c,50)),p=Math.round(ii(c,95)),f=$d(n);return{uri:k.STATS,mimeType:"application/json",text:JSON.stringify({totalRequests:s,errorCount:a,errorRate:d,avgDurationMs:u,p50:m,p95:p,byHost:f},null,2)}}})}function si(o=qd){q.register(k.TRAFFIC,"Network Traffic",{description:"Query captured network traffic. Use query parameters to filter by host, method, statusCode, since, limit, deviceId.",mimeType:"application/json",handler:()=>ri({},o)}),q.registerTemplate(kd,"Network Traffic",{description:"Query captured network traffic with optional filters.",mimeType:"application/json",handler:async(n)=>ri(n,o)}),q.registerTemplate(k.REQUEST,"Network Request Detail",{description:"Full HTTP request and response detail for a single captured network call (bodies truncated to 10KB).",mimeType:"application/json",handler:async(n)=>{let s=parseInt(n.requestId,10);if(!Number.isFinite(s)||s<1)return{uri:`automobile:network/request/${n.requestId}`,mimeType:"application/json",text:JSON.stringify({error:`Invalid requestId: ${n.requestId}`})};try{let a=await o.getNetworkEventById(s);if(!a)return{uri:`automobile:network/request/${s}`,mimeType:"application/json",text:JSON.stringify({error:`Network request ${s} not found`})};return{uri:`automobile:network/request/${s}`,mimeType:"application/json",text:JSON.stringify(Od(a),null,2)}}catch(a){return e.error(`[NetworkResources] Failed to get request ${s}: ${a}`),{uri:`automobile:network/request/${s}`,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve request: ${a}`})}}}}),jd(o),q.register(k.SLOW,"Slow Network Requests",{description:"Recent slow network requests (exceeding configured threshold). Subscribe to receive notifications on new slow requests.",mimeType:"application/json",handler:async()=>{let s=cn.getInstance().slowThresholdMs,d=(await o.getNetworkEvents({limit:200})).filter((c)=>c.durationMs>=s);return{uri:k.SLOW,mimeType:"application/json",text:JSON.stringify({thresholdMs:s,events:d.slice(0,50).map(Ue),count:d.length},null,2)}}}),q.register(k.STATE,"Network State",{description:"Current network capture and simulation state (capturing, error simulation, notification config).",mimeType:"application/json",handler:async()=>{let n=cn.getInstance();return{uri:k.STATE,mimeType:"application/json",text:JSON.stringify(n.getSnapshot(),null,2)}}}),q.register(k.MOCKS,"Network Mocks",{description:"Currently active mock network response rules, each tagged with the device it applies to.",mimeType:"application/json",handler:async()=>{let s=cn.getInstance().getAllMocks();return{uri:k.MOCKS,mimeType:"application/json",text:JSON.stringify({count:s.length,mocks:s},null,2)}}}),q.register(k.CONNECTIVITY,"Network Connectivity",{description:"Current device network connectivity state. Subscribe to receive notifications on connectivity changes.",mimeType:"application/json",handler:async()=>({uri:k.CONNECTIVITY,mimeType:"application/json",text:JSON.stringify({type:"unknown",details:"Connectivity status requires active device connection"})})}),e.info("[NetworkResources] Registered network resources")}var Hd=3;function St(o){return typeof o==="object"&&o!==null&&!Array.isArray(o)}function Kd(o){if(!St(o)||typeof o.id!=="string"||typeof o.deviceId!=="string")return!1;return typeof o.observedAtMs==="number"&&typeof o.updatedAtMs==="number"&&typeof o.detectionPath==="string"&&St(o.recovery)&&Array.isArray(o.recovery.attempts)&&St(o.recovery.policy)}function yt(o){try{let n=JSON.parse(o);if(!Kd(n))return;if(n.outputUnavailable!=="adopted")delete n.outputUnavailable;return n}catch(n){e.warn(`[EmulatorLossIncidentRepository] Invalid stored incident: ${n}`,n);return}}class tM{database;timer;idGenerator;maxRetained;constructor({db:o,timer:n=i,idGenerator:s=B,maxRetained:a=z4}={}){this.database=o,this.timer=n,this.idGenerator=s,this.maxRetained=a}async open(o){let n=this.timer.now(),s={id:`emulator-loss-${this.idGenerator.next()}`,observedAtMs:n,updatedAtMs:n,deviceId:o.deviceId,...o.avdName?{avdName:o.avdName}:{},detectionPath:o.detectionPath,...o.processExit?{processExit:{...o.processExit}}:{},...o.outputTail?{outputTail:o.outputTail}:{},...o.outputUnavailable==="adopted"?{outputUnavailable:o.outputUnavailable}:{},...o.lastAdbState?{lastAdbState:o.lastAdbState}:{},...o.session?{session:{...o.session}}:{},recovery:{policy:{...o.recoveryPolicy},attempts:[]}};return await this.getDb().transaction().execute(async(a)=>{await a.insertInto("emulator_loss_incidents").values({incident_id:s.id,device_id:s.deviceId,observed_at_ms:s.observedAtMs,updated_at_ms:s.updatedAtMs,revision:0,incident_json:JSON.stringify(s)}).execute();let c=(await a.selectFrom("emulator_loss_incidents").select("incident_id").orderBy("observed_at_ms","desc").orderBy("id","desc").execute()).slice(this.maxRetained).map((u)=>u.incident_id);if(c.length>0)await a.deleteFrom("emulator_loss_incidents").where("incident_id","in",c).execute()}),s}async recordRecoveryAttempt(o,n){await this.update(o,(s)=>{s.recovery.attempts.push({...n})})}async completeRecovery(o,n,s={}){await this.update(o,(a)=>{if(a.recovery.outcome=n,s.replacementDeviceId)a.replacementDeviceId=s.replacementDeviceId;if(a.session&&s.sessionState)a.session.state=s.sessionState})}async get(o){let n=await this.getDb().selectFrom("emulator_loss_incidents").select("incident_json").where("incident_id","=",o).executeTakeFirst();return n?yt(n.incident_json):void 0}async list(o=this.maxRetained){return(await this.getDb().selectFrom("emulator_loss_incidents").select("incident_json").orderBy("observed_at_ms","desc").orderBy("id","desc").limit(o).execute()).flatMap((s)=>{let a=yt(s.incident_json);return a?[a]:[]})}getDb(){return this.database??_e()}async update(o,n){for(let s=0;s<Hd;s++){let a=await this.getDb().selectFrom("emulator_loss_incidents").select(["incident_json","revision"]).where("incident_id","=",o).executeTakeFirst();if(!a)return;let d=yt(a.incident_json);if(!d)return;n(d),d.updatedAtMs=this.timer.now();let c=await this.getDb().updateTable("emulator_loss_incidents").set({updated_at_ms:d.updatedAtMs,revision:a.revision+1,incident_json:JSON.stringify(d)}).where("incident_id","=",o).where("revision","=",a.revision).executeTakeFirst();if(Number(c.numUpdatedRows)>0)return}throw Error(`Could not update emulator-loss incident ${o} after concurrent updates`)}}var Fe={ARCHIVE:"automobile:emulators/loss-incidents"};async function Vd(o={}){try{let n=await(o.reader??new tM).list();return{uri:Fe.ARCHIVE,mimeType:"application/json",text:JSON.stringify({incidents:n,count:n.length},null,2)}}catch(n){return e.warn(`[EmulatorLossIncidentResources] Failed to list incidents: ${n}`,n),{uri:Fe.ARCHIVE,mimeType:"application/json",text:JSON.stringify({error:"Failed to list emulator-loss incidents."},null,2)}}}function ai(o={}){q.register(Fe.ARCHIVE,"Android Emulator Loss Incidents",{description:"Bounded diagnostics and recovery outcomes for unexpectedly lost Android emulators.",mimeType:"application/json",handler:()=>Vd(o)})}class vt{minted=new Set;toolResultsNoStructuredContent=new Map;actionsCompactMetadata=new Map;prototypeFullSchema=new Map;record(o){if(o.trim().length>0)this.minted.add(o)}has(o){return this.minted.has(o)}setToolResultsNoStructuredContent(o,n){if(o.trim().length>0){if(this.toolResultsNoStructuredContent.get(o)!==n)this.toolResultsNoStructuredContent.set(o,n),Er.emit("tools")}}getToolResultsNoStructuredContent(o){return this.toolResultsNoStructuredContent.get(o)}setActionsCompactMetadata(o,n){if(o.trim().length>0)this.actionsCompactMetadata.set(o,n)}getActionsCompactMetadata(o){return this.actionsCompactMetadata.get(o)}setPrototypeFullSchema(o,n){if(o.trim().length>0&&this.prototypeFullSchema.get(o)!==n)this.prototypeFullSchema.set(o,n),Er.emit("tools")}getPrototypeFullSchema(o){return this.prototypeFullSchema.get(o)}}class ht{db;constructor({db:o}={}){this.db=o??null}getDb(){return this.db??_e()}async insert(o){try{await(await this.getDb()).insertInto("tool_selection_profile_provenance").values({profile_uuid:o}).onConflict((s)=>s.column("profile_uuid").doNothing()).execute()}catch(n){e.warn(`[ToolSelectionProfileProvenanceRepository] Failed to persist minted profile ${o}: ${n}`)}}async loadAll(){try{return(await(await this.getDb()).selectFrom("tool_selection_profile_provenance").select(["profile_uuid"]).execute()).map((s)=>s.profile_uuid)}catch(o){return e.warn(`[ToolSelectionProfileProvenanceRepository] Failed to load persisted profiles: ${o}`),[]}}}class di{repository;memory=new vt;constructor(o){this.repository=o}record(o){if(this.memory.record(o),o.trim().length>0)Yt().track(()=>this.repository.insert(o))}has(o){return this.memory.has(o)}setToolResultsNoStructuredContent(o,n){this.memory.setToolResultsNoStructuredContent(o,n)}getToolResultsNoStructuredContent(o){return this.memory.getToolResultsNoStructuredContent(o)}setActionsCompactMetadata(o,n){this.memory.setActionsCompactMetadata(o,n)}getActionsCompactMetadata(o){return this.memory.getActionsCompactMetadata(o)}setPrototypeFullSchema(o,n){this.memory.setPrototypeFullSchema(o,n)}getPrototypeFullSchema(o){return this.memory.getPrototypeFullSchema(o)}async load(){let o=await this.repository.loadAll();for(let n of o)this.memory.record(n)}}var IU=new di(new ht);var bt;function kae(o){j8(()=>it.getInstance()),Cte(()=>it.getInstance()),kte(()=>it.getInstance()),zb();let n=F.removalEpochForRegistration;if(bt?.daemonMode!==o||bt.removalEpoch!==n){let s=(a)=>x.getInstance(a);IM({daemonMode:o,iosRunnerLocation:s,iosAccessibilityFocus:s,keystoreReset:(a)=>E.getInstance(a)}),bt={daemonMode:o,removalEpoch:F.removalEpochForRegistration}}bQ(new Set(F.getConfigurableToolNames()))}var Tt;function Gd(o){if(Tt?.iosDependencies===o&&Tt.clearEpoch===q.clearEpochForRegistration)return;Jd(o),Tt={iosDependencies:o,clearEpoch:q.clearEpochForRegistration}}function Jd(o){HJ(),QX(),JX({featureFlags:()=>sr.getInstance()}),e8(),t8(),XJ(),yo(()=>mM()),No(),_o(),Fo(),Go(),Wo(),Yo(),Qo(),V8(),or(),dr(),Ur({createIosStorageDiscovery:(n)=>_r(x.getInstance(n))}),Fr(),Hr(),Kr(),Vr(),zr(),Wr(),Yr(),q8(),ei({iosDependencies:o}),ti(),si(),ai()}function ci(o){return o.requestMcpSessionId??o.sessionContext?.sessionId}function zd(o){if(o.taskOwnerKey?.trim())return o.taskOwnerKey;let n=o.stateless?o.requestMcpSessionId:ci(o);return n?.trim()?n:void 0}function Wd(o){return o.taskManager??(o.daemonMode?po():void 0)}function Yd(o,n,s){let a=Wd(n),d=zd(n);if(a)NJ(o,{taskManager:a,ownerKey:d});return fo({execute:s,taskManager:a,ownerKey:d,eligibleTools:n.taskEligibleTools??mo,...n.taskLeaseKeepalive&&{keepalive:n.taskLeaseKeepalive}})}function Qd(o){if(o.sessionToolBindingStore)return{store:o.sessionToolBindingStore,owned:!1};if(o.daemonMode&&o.stateless)return{store:Ke(),owned:!1};return{store:He(),owned:!0}}function Xd(o){if(o.deviceReadiness)F.setDeviceReadiness(o.deviceReadiness);else if(!o.daemonMode&&!F.hasDeviceReadiness())F.setDeviceReadiness(Hc.createInstance())}function Zd(o){return{resources:{subscribe:!0,listChanged:!0},tools:o==="modern"?{listChanged:!0}:{},prompts:{},...o==="modern"&&{extensions:{[Xy]:{}}}}}function ec(o,n){if(n.era==="modern")return{era:"modern",deviceChoiceRequestState:n.deviceChoiceRequestState};return o?{}:{ambiguousDeviceElicitation:n.ambiguousDeviceElicitation??{}}}function tc(o){return o.era==="modern"?{verify:(o.deviceChoiceRequestState??CU).verify}:void 0}function oc(o){ZJ(o),QJ((n)=>E.getInstance(n))}var zK=(o={})=>{F.setMutationRecording(IH(R,{keyboardProfilesFor:(C)=>E.getInstance(C)})),Xd(o);let n=Qd(o),s=new qe(o.sessionContext?.initialSessionToolBinding,o.sessionContext?.initialToolSelectionProfile,void 0,{initialReleasedSessionUuid:o.sessionContext?.initialReleasedSession,namesLiveSessionOfBoundPlan:Te,store:n.store}),a=ci(o),d=o.planExecutionLock??Et(),c=o.daemonMode??!1,u=o.toolSelectionProfileRegistry??IU;oc(sr.getInstance()),sr.getInstance().initialize().catch((C)=>{e.warn(`Failed to initialize feature flags: ${C}`)}),Dt.startPhase("toolRegistration"),kae(c),Dt.endPhase("toolRegistration");let m=o.iosDependencies??hn({coreDeviceProbe:vb()});Dt.startPhase("resourceRegistration"),Gd(m),Dt.endPhase("resourceRegistration"),Dt.startPhase("sdkInitialization");let p=rM({name:"AutoMobile",version:Cn()},Zd(o.era),{cacheHints:o.era==="modern"?Ct:void 0,requestState:tc(o)});Dt.endPhase("sdkInitialization"),Dt.startPhase("serverHandlerRegistration");let f={ephemeral:o.stateless===!0};if(F.registerWithServer(p,f),sr.getInstance().setToolListChangedNotifier({notifyToolListChanged:()=>F.notifyToolListChanged()}),XM(p),q.registerWithServer(p,(C)=>({sessionUuid:s.effectiveSessionUuid(a),ownsSession:(w)=>s.ownsSession(a,w),releasedSessionUuid:s.releasedResourceSessionUuid(a),signal:C,clientSupportsApps:oH(p.server.getClientCapabilities())}),f),f.ephemeral){let C=p.close.bind(p);p.close=async()=>{try{await C()}finally{s.dispose(),F.untrackServer(p),q.untrackServer(p)}}}let S=p.server.onclose;p.server.onclose=()=>{if(s.dispose(),n.owned)n.store.dispose();if(!c)KM(o.sessionContext?.sessionId);S?.()};let h=Vt({options:o,bindingKey:a,sessionToolBinding:s,toolSelectionProfileRegistry:u});p.server.setRequestHandler("tools/list",async()=>await h()),p.server.setRequestHandler("ping",async()=>({})),p.server.setRequestHandler("prompts/list",async()=>({prompts:[]}));let T=(C)=>{if(c&&C.params&&C.params.arguments)C.params.arguments=pre(C.params.arguments);e.info("Request: ",{...C,params:{...C.params,arguments:hh(C.params.name,ui(C.params.arguments))}})},I=lo({options:o,daemonMode:c,serverBindingKey:a,sessionToolBinding:s,planExecutionLock:d,toolSelectionProfileRegistry:u,listSessionTools:h});return MJ(OJ(Gr.getInstance())),iM(p,{progressFailureMessage:"Failed to send progress notification",prepare:T,execute:Yd(p,o,I)},ec(c,o)),Dt.endPhase("serverHandlerRegistration"),p};function _U(){return q.refreshBeforeList()}
|
|
4
|
+
export{SE,EJ,IJ,_J,xJ,CJ,oy,AU,TU,kU,wE,EU,RE,DJ,tM,IU,kae,zK,_U};
|
|
5
|
+
|
|
6
|
+
//# debugId=F835665E1D3726CD64756E2164756E21
|