@kaeawc/auto-mobile 0.0.91 → 0.0.92

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.
Files changed (267) hide show
  1. package/dist/build-info.json +12 -12
  2. package/dist/schemas/README.md +16 -0
  3. package/dist/schemas/prototype-icon-names.json +302 -0
  4. package/dist/src/chunk-09442h7v.js +4 -0
  5. package/dist/src/chunk-0dfnyfkh.js +5 -0
  6. package/dist/src/chunk-0e4gm1kj.js +5 -0
  7. package/dist/src/chunk-0eb8576f.js +4 -0
  8. package/dist/src/chunk-0rjm4nx7.js +5 -0
  9. package/dist/src/chunk-0w1spptt.js +6 -0
  10. package/dist/src/chunk-1zmh2eak.js +4 -0
  11. package/dist/src/chunk-28k63ha3.js +5 -0
  12. package/dist/src/chunk-2d4wmp8b.js +4 -0
  13. package/dist/src/chunk-2e6s75qv.js +78 -0
  14. package/dist/src/chunk-2v7tw1nj.js +5 -0
  15. package/dist/src/chunk-32jpxz2y.js +323 -0
  16. package/dist/src/chunk-34zxqcmq.js +5 -0
  17. package/dist/src/chunk-3jmvqygr.js +238 -0
  18. package/dist/src/chunk-3swvfhqt.js +5 -0
  19. package/dist/src/chunk-44bt78m9.js +5 -0
  20. package/dist/src/chunk-488vt2bp.js +4 -0
  21. package/dist/src/chunk-4fgdhcwx.js +5 -0
  22. package/dist/src/chunk-4jp2se4w.js +4 -0
  23. package/dist/src/chunk-4pfftt07.js +5 -0
  24. package/dist/src/chunk-4vhr9e4t.js +4 -0
  25. package/dist/src/chunk-4xd6zs3y.js +15 -0
  26. package/dist/src/chunk-51567pg8.js +4 -0
  27. package/dist/src/chunk-5agqsfev.js +4 -0
  28. package/dist/src/chunk-5d706gmr.js +4 -0
  29. package/dist/src/chunk-5kd4rqk7.js +5 -0
  30. package/dist/src/chunk-5s645vr4.js +4 -0
  31. package/dist/src/chunk-61t538bm.js +4 -0
  32. package/dist/src/chunk-6d3mmqxt.js +54 -0
  33. package/dist/src/chunk-6hyt398x.js +5 -0
  34. package/dist/src/chunk-6mnr8kpm.js +4 -0
  35. package/dist/src/chunk-6pg7bqck.js +4 -0
  36. package/dist/src/chunk-79q5xsdc.js +42 -0
  37. package/dist/src/chunk-7bdgand3.js +4 -0
  38. package/dist/src/chunk-84cp9dw5.js +4 -0
  39. package/dist/src/chunk-86f2h5ww.js +5 -0
  40. package/dist/src/chunk-8cghfzb2.js +19 -0
  41. package/dist/src/chunk-8en08r7q.js +5 -0
  42. package/dist/src/chunk-950qcq1e.js +10 -0
  43. package/dist/src/chunk-9rkfyt6q.js +5 -0
  44. package/dist/src/chunk-9tf2p9y9.js +5 -0
  45. package/dist/src/chunk-9y5bcy28.js +6 -0
  46. package/dist/src/chunk-a2sc4jm0.js +5 -0
  47. package/dist/src/chunk-a4k9rt7z.js +5 -0
  48. package/dist/src/chunk-aa5ng3d1.js +4 -0
  49. package/dist/src/chunk-ajsrz473.js +5 -0
  50. package/dist/src/chunk-b3h0a6ca.js +4 -0
  51. package/dist/src/chunk-b4cxdzwy.js +20 -0
  52. package/dist/src/chunk-b6a737qt.js +4 -0
  53. package/dist/src/chunk-bn64x5z5.js +5 -0
  54. package/dist/src/chunk-bvh649za.js +12 -0
  55. package/dist/src/chunk-c9nk1r78.js +5 -0
  56. package/dist/src/chunk-c9tyfg4j.js +26 -0
  57. package/dist/src/chunk-cfsdfqnm.js +4 -0
  58. package/dist/src/chunk-cxyf04jc.js +7 -0
  59. package/dist/src/chunk-d57432wq.js +4 -0
  60. package/dist/src/chunk-da08tx5v.js +4 -0
  61. package/dist/src/chunk-eka89q3k.js +4 -0
  62. package/dist/src/chunk-f2tc08m2.js +4 -0
  63. package/dist/src/chunk-f8tnk179.js +5 -0
  64. package/dist/src/chunk-f9s1kkhx.js +5 -0
  65. package/dist/src/chunk-fbp8a4rx.js +4 -0
  66. package/dist/src/chunk-fd2z0sze.js +4 -0
  67. package/dist/src/chunk-fk927f4q.js +54 -0
  68. package/dist/src/chunk-fxmr3a0f.js +4 -0
  69. package/dist/src/chunk-gaqwhd44.js +4 -0
  70. package/dist/src/chunk-ggtd5x5a.js +5 -0
  71. package/dist/src/chunk-gndcfrm7.js +4 -0
  72. package/dist/src/chunk-h3n4adc6.js +310 -0
  73. package/dist/src/chunk-h5pjbb83.js +4 -0
  74. package/dist/src/chunk-hgnnh302.js +4 -0
  75. package/dist/src/chunk-hmke8nhx.js +5 -0
  76. package/dist/src/chunk-j2bx12hn.js +4 -0
  77. package/dist/src/chunk-j70y1a2g.js +4 -0
  78. package/dist/src/chunk-jdqvcq0a.js +5 -0
  79. package/dist/src/chunk-jhnbfj19.js +55 -0
  80. package/dist/src/chunk-js1jpyxp.js +6 -0
  81. package/dist/src/chunk-kbjq0qvb.js +4 -0
  82. package/dist/src/chunk-kfwx57xd.js +4 -0
  83. package/dist/src/chunk-km0dy5vc.js +71 -0
  84. package/dist/src/chunk-kzwctna2.js +4 -0
  85. package/dist/src/chunk-m9ehyehy.js +4 -0
  86. package/dist/src/chunk-mct91p1f.js +4 -0
  87. package/dist/src/chunk-mf9spd4g.js +5 -0
  88. package/dist/src/chunk-mgrcansb.js +4 -0
  89. package/dist/src/chunk-mqc1d0eb.js +6 -0
  90. package/dist/src/chunk-n1zmpk0z.js +4 -0
  91. package/dist/src/chunk-ncyjf63g.js +4 -0
  92. package/dist/src/chunk-nr64d21q.js +973 -0
  93. package/dist/src/chunk-nwm2pq5v.js +168 -0
  94. package/dist/src/chunk-pm06b05d.js +9 -0
  95. package/dist/src/chunk-q50s00ry.js +4 -0
  96. package/dist/src/chunk-qv2918jt.js +4 -0
  97. package/dist/src/chunk-qwye1958.js +14 -0
  98. package/dist/src/chunk-r0f1q783.js +5 -0
  99. package/dist/src/chunk-r14wwk37.js +18 -0
  100. package/dist/src/chunk-r20pe1nv.js +5 -0
  101. package/dist/src/chunk-r8z9pfve.js +5 -0
  102. package/dist/src/chunk-rdpgkjf6.js +4 -0
  103. package/dist/src/chunk-rkr0dks9.js +5 -0
  104. package/dist/src/chunk-rn84t3sf.js +11 -0
  105. package/dist/src/chunk-s123kn7n.js +4 -0
  106. package/dist/src/chunk-s1zq65ny.js +4 -0
  107. package/dist/src/chunk-s73qn3fx.js +4 -0
  108. package/dist/src/chunk-sjn0nj4p.js +5 -0
  109. package/dist/src/chunk-sns0c35v.js +7 -0
  110. package/dist/src/chunk-stfzjr9y.js +8 -0
  111. package/dist/src/chunk-sz1a7p43.js +4 -0
  112. package/dist/src/chunk-t4dr5c8v.js +8 -0
  113. package/dist/src/chunk-tc8k9c1j.js +4 -0
  114. package/dist/src/chunk-teznhase.js +4 -0
  115. package/dist/src/chunk-ty9xgmz4.js +4 -0
  116. package/dist/src/chunk-tyazf3sk.js +145 -0
  117. package/dist/src/chunk-v6npjrjm.js +5 -0
  118. package/dist/src/chunk-v90es00d.js +4 -0
  119. package/dist/src/chunk-vbvtzkwz.js +5 -0
  120. package/dist/src/chunk-vefd8qee.js +8 -0
  121. package/dist/src/chunk-vs9r72ta.js +17 -0
  122. package/dist/src/chunk-w2mwa0jk.js +4 -0
  123. package/dist/src/chunk-w7zsh13a.js +9 -0
  124. package/dist/src/chunk-w88k0bgr.js +4 -0
  125. package/dist/src/chunk-wry6skrm.js +4 -0
  126. package/dist/src/chunk-wzdt0enk.js +4 -0
  127. package/dist/src/chunk-xhhv854c.js +4 -0
  128. package/dist/src/chunk-y58270hd.js +4 -0
  129. package/dist/src/chunk-yk0hmbex.js +4 -0
  130. package/dist/src/chunk-ympy4fdz.js +28 -0
  131. package/dist/src/chunk-yw436axy.js +4 -0
  132. package/dist/src/chunk-z04jrpjy.js +5 -0
  133. package/dist/src/chunk-z2xznczw.js +4 -0
  134. package/dist/src/chunk-z4xnrgps.js +4 -0
  135. package/dist/src/chunk-z7csyszv.js +4 -0
  136. package/dist/src/chunk-z8t0v07j.js +11 -0
  137. package/dist/src/chunk-z916af47.js +228 -0
  138. package/dist/src/chunk-zcr8he8q.js +5 -0
  139. package/dist/src/chunk-zd9vmkzn.js +9 -0
  140. package/dist/src/chunk-zg67wjkh.js +5 -0
  141. package/dist/src/chunk-zj939v0h.js +5 -0
  142. package/dist/src/chunk-zkdjwtc1.js +4 -0
  143. package/dist/src/chunk-zkv5kzt6.js +4 -0
  144. package/dist/src/daemon/processEntry.js +4 -0
  145. package/dist/src/index.js +4 -2843
  146. package/dist/src/runtime/bunRuntimeGuard.js +4 -0
  147. package/dist/src/utils/workers/iosBundleExtractWorker.js +2 -3
  148. package/package.json +5 -5
  149. package/schemas/README.md +16 -0
  150. package/schemas/prototype-icon-names.json +302 -0
  151. package/node_modules/@borewit/text-codec/README.md +0 -87
  152. package/node_modules/@jimp/diff/node_modules/pixelmatch/README.md +0 -110
  153. package/node_modules/@jimp/diff/node_modules/pixelmatch/node_modules/pngjs/README.md +0 -433
  154. package/node_modules/@jimp/file-ops/dist/browser/index.js +0 -8
  155. package/node_modules/@jimp/js-png/README.md +0 -35
  156. package/node_modules/@jimp/js-png/src/__image_snapshots__/index-node-test-ts-png-should-use-png-options-1-snap.png +0 -0
  157. package/node_modules/@jimp/js-png/src/output.png +0 -0
  158. package/node_modules/@jimp/js-png/vitest.config.browser.mjs +0 -3
  159. package/node_modules/@jimp/plugin-resize/README.md +0 -12
  160. package/node_modules/@jimp/plugin-resize/vitest.config.browser.mjs +0 -3
  161. package/node_modules/@tokenizer/inflate/README.md +0 -114
  162. package/node_modules/@tokenizer/token/README.md +0 -19
  163. package/node_modules/await-to-js/README.md +0 -82
  164. package/node_modules/debug/README.md +0 -481
  165. package/node_modules/exif-parser/README.md +0 -83
  166. package/node_modules/file-type/readme.md +0 -667
  167. package/node_modules/ieee754/README.md +0 -51
  168. package/node_modules/mime/README.md +0 -178
  169. package/node_modules/ms/readme.md +0 -59
  170. package/node_modules/parse-bmfont-xml/README.md +0 -74
  171. package/node_modules/parse-bmfont-xml/lib/browser.js +0 -85
  172. package/node_modules/parse-bmfont-xml/node_modules/xml2js/README.md +0 -507
  173. package/node_modules/pngjs/README.md +0 -287
  174. package/node_modules/sax/README.md +0 -228
  175. package/node_modules/strtok3/README.md +0 -795
  176. package/node_modules/tinycolor2/README.md +0 -492
  177. package/node_modules/tinycolor2/cjs/test.js +0 -2191
  178. package/node_modules/tinycolor2/cjs/test_template.js +0 -26
  179. package/node_modules/tinycolor2/deno_asserts@0.168.0.mjs +0 -807
  180. package/node_modules/tinycolor2/esm/test.js +0 -2189
  181. package/node_modules/tinycolor2/esm/test_template.js +0 -24
  182. package/node_modules/tinycolor2/tinycolor.js +0 -1191
  183. package/node_modules/token-types/README.md +0 -160
  184. package/node_modules/uint8array-extras/readme.md +0 -318
  185. package/node_modules/xml-parse-from-string/README.md +0 -35
  186. package/node_modules/xmlbuilder/README.md +0 -86
  187. package/node_modules/zod/README.md +0 -208
  188. package/node_modules/zod/v4/locales/ar.d.cts +0 -4
  189. package/node_modules/zod/v4/locales/ar.d.ts +0 -4
  190. package/node_modules/zod/v4/locales/az.d.cts +0 -4
  191. package/node_modules/zod/v4/locales/az.d.ts +0 -4
  192. package/node_modules/zod/v4/locales/be.d.cts +0 -4
  193. package/node_modules/zod/v4/locales/be.d.ts +0 -4
  194. package/node_modules/zod/v4/locales/ca.d.cts +0 -4
  195. package/node_modules/zod/v4/locales/ca.d.ts +0 -4
  196. package/node_modules/zod/v4/locales/cs.d.cts +0 -4
  197. package/node_modules/zod/v4/locales/cs.d.ts +0 -4
  198. package/node_modules/zod/v4/locales/de.d.cts +0 -4
  199. package/node_modules/zod/v4/locales/de.d.ts +0 -4
  200. package/node_modules/zod/v4/locales/en.d.cts +0 -5
  201. package/node_modules/zod/v4/locales/en.d.ts +0 -5
  202. package/node_modules/zod/v4/locales/eo.d.cts +0 -5
  203. package/node_modules/zod/v4/locales/eo.d.ts +0 -5
  204. package/node_modules/zod/v4/locales/es.d.cts +0 -4
  205. package/node_modules/zod/v4/locales/es.d.ts +0 -4
  206. package/node_modules/zod/v4/locales/fa.d.cts +0 -4
  207. package/node_modules/zod/v4/locales/fa.d.ts +0 -4
  208. package/node_modules/zod/v4/locales/fi.d.cts +0 -4
  209. package/node_modules/zod/v4/locales/fi.d.ts +0 -4
  210. package/node_modules/zod/v4/locales/fr-CA.d.cts +0 -4
  211. package/node_modules/zod/v4/locales/fr-CA.d.ts +0 -4
  212. package/node_modules/zod/v4/locales/fr.d.cts +0 -4
  213. package/node_modules/zod/v4/locales/fr.d.ts +0 -4
  214. package/node_modules/zod/v4/locales/he.d.cts +0 -4
  215. package/node_modules/zod/v4/locales/he.d.ts +0 -4
  216. package/node_modules/zod/v4/locales/hu.d.cts +0 -4
  217. package/node_modules/zod/v4/locales/hu.d.ts +0 -4
  218. package/node_modules/zod/v4/locales/id.d.cts +0 -4
  219. package/node_modules/zod/v4/locales/id.d.ts +0 -4
  220. package/node_modules/zod/v4/locales/index.d.cts +0 -39
  221. package/node_modules/zod/v4/locales/index.d.ts +0 -39
  222. package/node_modules/zod/v4/locales/it.d.cts +0 -4
  223. package/node_modules/zod/v4/locales/it.d.ts +0 -4
  224. package/node_modules/zod/v4/locales/ja.d.cts +0 -4
  225. package/node_modules/zod/v4/locales/ja.d.ts +0 -4
  226. package/node_modules/zod/v4/locales/kh.d.cts +0 -4
  227. package/node_modules/zod/v4/locales/kh.d.ts +0 -4
  228. package/node_modules/zod/v4/locales/ko.d.cts +0 -4
  229. package/node_modules/zod/v4/locales/ko.d.ts +0 -4
  230. package/node_modules/zod/v4/locales/mk.d.cts +0 -4
  231. package/node_modules/zod/v4/locales/mk.d.ts +0 -4
  232. package/node_modules/zod/v4/locales/ms.d.cts +0 -4
  233. package/node_modules/zod/v4/locales/ms.d.ts +0 -4
  234. package/node_modules/zod/v4/locales/nl.d.cts +0 -4
  235. package/node_modules/zod/v4/locales/nl.d.ts +0 -4
  236. package/node_modules/zod/v4/locales/no.d.cts +0 -4
  237. package/node_modules/zod/v4/locales/no.d.ts +0 -4
  238. package/node_modules/zod/v4/locales/ota.d.cts +0 -4
  239. package/node_modules/zod/v4/locales/ota.d.ts +0 -4
  240. package/node_modules/zod/v4/locales/pl.d.cts +0 -4
  241. package/node_modules/zod/v4/locales/pl.d.ts +0 -4
  242. package/node_modules/zod/v4/locales/ps.d.cts +0 -4
  243. package/node_modules/zod/v4/locales/ps.d.ts +0 -4
  244. package/node_modules/zod/v4/locales/pt.d.cts +0 -4
  245. package/node_modules/zod/v4/locales/pt.d.ts +0 -4
  246. package/node_modules/zod/v4/locales/ru.d.cts +0 -4
  247. package/node_modules/zod/v4/locales/ru.d.ts +0 -4
  248. package/node_modules/zod/v4/locales/sl.d.cts +0 -4
  249. package/node_modules/zod/v4/locales/sl.d.ts +0 -4
  250. package/node_modules/zod/v4/locales/sv.d.cts +0 -4
  251. package/node_modules/zod/v4/locales/sv.d.ts +0 -4
  252. package/node_modules/zod/v4/locales/ta.d.cts +0 -4
  253. package/node_modules/zod/v4/locales/ta.d.ts +0 -4
  254. package/node_modules/zod/v4/locales/th.d.cts +0 -4
  255. package/node_modules/zod/v4/locales/th.d.ts +0 -4
  256. package/node_modules/zod/v4/locales/tr.d.cts +0 -5
  257. package/node_modules/zod/v4/locales/tr.d.ts +0 -5
  258. package/node_modules/zod/v4/locales/ua.d.cts +0 -4
  259. package/node_modules/zod/v4/locales/ua.d.ts +0 -4
  260. package/node_modules/zod/v4/locales/ur.d.cts +0 -4
  261. package/node_modules/zod/v4/locales/ur.d.ts +0 -4
  262. package/node_modules/zod/v4/locales/vi.d.cts +0 -4
  263. package/node_modules/zod/v4/locales/vi.d.ts +0 -4
  264. package/node_modules/zod/v4/locales/zh-CN.d.cts +0 -4
  265. package/node_modules/zod/v4/locales/zh-CN.d.ts +0 -4
  266. package/node_modules/zod/v4/locales/zh-TW.d.cts +0 -4
  267. package/node_modules/zod/v4/locales/zh-TW.d.ts +0 -4
@@ -0,0 +1,6 @@
1
+ // @bun
2
+ import{i,Xe,dn,Q,l,e}from"./chunk-z8t0v07j.js";import{L,Wt,ke}from"./chunk-32jpxz2y.js";import{FQ,JF,w,JQ,Uu,fC,Nh,av,aT,cT,iw,ow,sw,pT,ss,vee,U,q,ne,oe,v,F,S,zh,OC,Xee,Qe,_w,RW,Kh,Zee,DT,rn,rt,qr,me,hi,Jh,NL,yc,W,M,cu,_m,Mv,Tte,ri,et,aR,ak,Hi,Wv,yk,CB,bR,sd,_,k}from"./chunk-h3n4adc6.js";import{WS,kr,sr,jd,hQ,am,dm,At}from"./chunk-6d3mmqxt.js";import{iJ,sJ}from"./chunk-6hyt398x.js";import{Ar}from"./chunk-tyazf3sk.js";import{cP,dP,YO,Td,eM,Ip,c8,n1,iM,Co,Ga,Si,H,u8,bf,Sf,c1,eG,m8,hP,Ps,NE,h8,pM,T8,Xg,mM,ci,E1,N,wM,Hs,Zg,cG,dG,uo,E8,I8,_8}from"./chunk-3jmvqygr.js";import{kn}from"./chunk-ggtd5x5a.js";import{y,z,f,ee,P,gl}from"./chunk-79q5xsdc.js";import{Et,Ic,bt,Nf,RZ,Fd}from"./chunk-nwm2pq5v.js";import{uO,C$,Kk,GR,JY,XY,Gk,pO,D$,mO,mb,I2,fb,ZY}from"./chunk-zj939v0h.js";import{hb,e9,N$,F$,eE,wO,d9,tE,RO,l9,u9,Sd,p9,m9,y9,v9,Ru,b9,q2,yb,Go,wd,cf,q$,V$,S9,vb,W$,w9,R9,z$,rK,tP,sU,aU,cU,dU,lU,nK,ln,uU,pU,mU,fU,iK,eJ,tJ,Ug,DO,rJ,Hg,rP,OO,MO,PU,mE,TU,kU,EU,aK,cK,dK,NO}from"./chunk-z916af47.js";import{Du,Vp,Wp}from"./chunk-a2sc4jm0.js";import{A6,CZ,k6,DZ,OZ,E6,NI,Ey,Iy,dS,jZ,Ul,j}from"./chunk-8cghfzb2.js";import{Wf,nA}from"./chunk-44bt78m9.js";import{VA}from"./chunk-4fgdhcwx.js";import{ho,aQ}from"./chunk-0e4gm1kj.js";import{RP,PM,Fr,AM,TM}from"./chunk-qwye1958.js";import{Cl,hy,zt,ZM}from"./chunk-mqc1d0eb.js";import{AP,oy,W8,_P,dy}from"./chunk-rn84t3sf.js";import{Rd,$O,SJ,Au,wJ}from"./chunk-ympy4fdz.js";import{wE,Ac,CJ}from"./chunk-cxyf04jc.js";import{Yie}from"./chunk-0dfnyfkh.js";import{r,t}from"./chunk-9rkfyt6q.js";var Tt={"tools/list":{ttlMs:5000,cacheScope:"private"},"server/discover":{ttlMs:60000,cacheScope:"private"}};var ai=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||ai.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 M.getPlanExecutionLockScope()}}var Ct=()=>new Be(j,new $e);var di=60000,li=1024,ui={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=ui){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>=li){let n=this.forgottenUntil.keys().next().value;if(n===void 0)break;this.forgottenUntil.delete(n)}this.forgottenUntil.set(o,this.timer.now()+di)}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=L,{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=Td(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 Sf(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 g=(h)=>(!m||h.platform===m)&&(!p||h.deviceId===p);if(n.sessionUuid)return u;if(this.initialSessionUuid)return pi(s(this.initialSessionUuid),g,u,{deferForeignDevice:d&&p!==void 0,requested:{deviceId:p,platform:m}}),u;return this.resolveAcquiredDeviceSession(o,s,g,{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 g=n(p);return g?[{sessionUuid:p,...g}]:[]});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 pi(o,n,s,{deferForeignDevice:a,requested:d}){if(!o||n(o)||a)return;throw new bf(s,o,d)}var je;function It(o){je=o}function Wk(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=N.registerSessionBindingReleaseHandler({onSessionReleased:o}),s=hi.subscribe((a)=>o(a));return()=>{n(),s()}},onBindingChanged:()=>N.notifyToolSelectionChanged()})}var Pt;function Ke(){return Pt??=He(),Pt}It(Ke);function mi(o){if(!w.isInitialized())aQ(o);throw new t("MCP request was cancelled during acquisition.")}function Dt(o,n){if(!Fr(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 EU(a),a}async function xt(o,n,s){if(s.length===0)return{};try{let a=await cK(o,n,s,!0);if(a.requested.length>0)N.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 ${bt}.`;return e.warn(`[MCP] ${d}`,a),{enableToolsError:d}}}function wt(o,n){return n.enableToolsError||n.skipped?ve(o,n):o}async function Nt(o,n,s,{service:a,enableTools:d,connectionProfileUuid:c}){if(o!=="provisionDevice"||!s)return n;let u=await xt(a,s,d);try{return ve(n,{enabledTools:await dK(a,[s],{connectionProfileUuid:c,labelSessionUuids:[]}),...u})}catch(m){return e.warn("[MCP] Could not enrich provisionDevice with enabled tools",{error:m}),wt(n,u)}}function ve(o,n){let s=!1;return NL(o,{...o,content:o.content.map((a)=>{if(s||a.type!=="text"||typeof a.text!=="string")return a;return s=!0,{...a,text:yc({...JSON.parse(a.text),...n})}}),...o.structuredContent?{structuredContent:{...o.structuredContent,...n}}:{}})}async function gi(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 fi(o){return o==="getAndroid"||o==="getApple"||o==="startDevice"}async function kt(o){let{toolName:n,acquiredSessionUuid:s,requestSignal:a}=o,d=o.result;if(!fi(n)||d?.isError||!s)return d;let c=!1,u=await xt(o.sessionToolSelectionService,s,o.requestedEnableTools);try{let m=new Set((await gi(o.listSessionTools(s),a)).tools.map((R)=>R.name)),p=N.getAllTools().filter((R)=>N.isUserConfigurableTool(R.name)).map((R)=>R.name).sort(),g=p.filter((R)=>!m.has(R)),h=p.filter((R)=>m.has(R));d=ve(d,{gatedTools:g,enabledTools:h,...u})}catch(m){c||=Boolean(a?.aborted),e.warn("[MCP] Could not enrich acquisition with gated tools",{tool:n,error:m}),d=wt(d,u)}if(c||a?.aborted)mi(s);return d}function he(o,n){let s=M.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 Mt(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 _t(o,n){let s=M.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 Ot(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 Ut(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 Ft(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 yi="prototype",Lt=new WeakMap,vi={inline(o){let n=Lt.get(o);if(n)return n;let{withFullAdvertisedSpecSchema:s}=import.meta.require("./chunk-wzdt0enk.js"),a=s(o);return Lt.set(o,a),a}},Bt={daemonDefault:nA,inliner:vi};function $t(o,n,s){if(!n||s.daemonDefault.isEnabled())return o;return o.map((a)=>a.name===yi?{...a,inputSchema:s.inliner.inline(a.inputSchema)}:a)}function qt(o){let{options:n,bindingKey:s,sessionToolBinding:a,toolSelectionProfileRegistry:d}=o,c=o.daemon??w,u=o.prototypeSchema??Bt;return async(m=a.effectiveSessionUuid(s))=>{let p=a.connectionToolSelectionProfileUuid(s),g=n.toolSelectionSessionManager??c.sessionManager(),h=rt(m,g),R=$t(N.getToolDefinitions({suppressOutputSchema:he(d,p)}),Ot(d,p,u.daemonDefault.isEnabled()),u),b=h?Array.from(new Set(Object.values(g?.getDeviceLabels(h)??{}))):[];return{tools:(await Promise.all(R.map(async(C)=>{let T=N.getTool(C.name),D=T?.requiresDevice??!1,x=TU(D,h,b,[h,m]);return Nf(C.name)||await kU(C.name,T?.defaultEnabled??!0,x,{sessionToolSelectionService:n.sessionToolSelectionService,connectionProfileUuid:p})?C:void 0}))).filter((C)=>C!==void 0)}}}function Re(o){let s=(!o.daemonMode||o.requiresDevice?void 0:w.brokerConnectionScopes())?.get(o.mcpSessionId),a=s?w.sessionManager():void 0;if(!s||!a)return;let d=JF({binding:s,toolName:o.toolName,args:o.args&&typeof o.args==="object"?o.args:{},requesterSessionUuid:o.sessionUuid?rt(o.sessionUuid,a)??o.sessionUuid:void 0,grantedDeviceOf:(c)=>a.findSession(c)?.assignedDevice});if(d)throw d}function jt(o,n,s=w){let a=j.getAdmittedSessionUse(n),d=s.sessionManager(),c=rt(a,d)??a,u=I8(o,c),p=(a?d?.peekSession(a):void 0)??(c?d?.peekSession(c):void 0);return p?E8(u,ZM(p)):u}function Ht(o,n,s,a){if(a&&o.deviceHeldForLateRead(n,s)!==void 0)return;return o.getSessionForNewExecution(n,s)}async function Kt(o,n){let{name:s,tool:a,providedSessionUuid:d,execution:c}=o;if(!n.daemonMode||!d||a.requiresDevice||Fr(s)||a.selectsActiveDevice===!0||s===bt&&n.toolSelectionProfileRegistry.has(d))return;let u=eG(d,o.context.requestMcpSessionId);if(await w.requireSessionManager().admitIssuedSessionForAutomation(d,Ul(c),{...m8(n.plainReadCall,u),signal:q()}),u)j.markReadOnlySessionAccess(c.id);else j.markSessionAdmitted(c.id)}function Vt(o){let n=new Set;if(!Fr(o))return{released:n,cleanup:void 0};let s=(c)=>{n.add(c)},a=N.registerSessionBindingReleaseHandler({onSessionReleased:s}),d=hi.subscribe(s);return{released:n,cleanup:()=>{try{a()}finally{d()}}}}function Gt(o,n){if(o.tool.selectsActiveDevice===!0&&!n?.isError&&o.sessionToolBinding.bind(o.sessionId,TM(n)?.sessionUuid??o.routingSessionUuid))N.notifyToolSelectionChanged()}function Ri(o,n){if(o!=="videoRecording"||!n||typeof n!=="object")return!1;let s=n;return s.action==="stop"&&typeof s.recordingId==="string"}function bi(o,n,s){if(!n)return ho(o)!==void 0;return s!==null&&s!==void 0&&n.isAdmittedForAutomation(s)}async function Jt(o,n){let{name:s,tool:a,providedSessionUuid:d,sessionId:c,sessionToolBinding:u}=o,{implicitAutolockMcpSessionId:m}=o,p=Ri(s,o.parsedParams),g=Di(),h=a.isDeviceReadOnlyCall?.(o.parsedParams)===!0,R=Pi(o,{daemonSessionManager:g,skip:n.readOutsideBoundSession||p,readOnlyCall:h});if(!d||Ei(s,n,p)||g!==void 0&&Ci(d,m)||!bi(d,g,R))return;if(u.bind(c,d))N.notifyToolSelectionChanged();if(a.requiresDevice&&!h&&g)await Ti(d,m)}async function Ti(o,n){if(n)await w.requireDevicePoolWrites().attachExplicitSessionUuidCall(o,n)}function Ci(o,n){return w.requireFullDevicePool().isSessionOwnedByOtherConnection(o,n)}function Ei(o,n,s){return Ii(o)||n.readOutsideBoundSession||Boolean(n.result?.isError)||s}function Ii(o){return Fr(o)||uo(o)||o===bt}function Pi(o,n){let{daemonSessionManager:s}=n;return s&&o.providedSessionUuid&&!n.skip&&!uo(o.name)?Ht(s,o.providedSessionUuid,Ul(o.execution),n.readOnlyCall):void 0}function Di(o=w){return o.sessionManager()}import{timingSafeEqual as Ai}from"crypto";function xi(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[fC];return typeof n==="string"?n:void 0}function wi(o){return!!o&&typeof o==="object"&&!Array.isArray(o)&&o[pT]===!0}function Ni(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[Uu];return typeof n==="number"&&Number.isFinite(n)&&n>0?n:void 0}function ki(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[Nh];return typeof n==="number"&&Number.isFinite(n)&&n>0?n:void 0}function Mi(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[av];return typeof n==="string"&&n.length>0?n:void 0}function _i(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[iw];return typeof n==="boolean"?n:void 0}function Oi(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[ow];return typeof n==="boolean"?n:void 0}function Ui(o){if(!o||typeof o!=="object"||Array.isArray(o))return;let n=o[sw];return typeof n==="boolean"?n:void 0}function Fi(o,n){if(!n||!o||typeof o!=="object"||Array.isArray(o))return;let s=o,a=s[cT];if(typeof a!=="string"||a.length!==n.length||!Ai(Buffer.from(a),Buffer.from(n)))return;let d=s[aT];return d==="forward"||d==="reverse"?d:void 0}function Li(o,n){let s=xi(o);if(s===void 0)return;return n.trustForwardedSessionId===!0?s:n.sessionKey??s}function Yt(o,n){let{daemonMode:s}=n;return{requestMcpSessionId:s?Li(o,n):void 0,requestOneShotCli:s&&wi(o),requestedToolResultsNoStructuredContent:s?_i(o):void 0,requestedActionsCompactMetadata:s?Oi(o):void 0,requestedPrototypeFullSchema:s?Ui(o):void 0,requestTimeoutMs:s?Ni(o):void 0,requestDeadlineMs:s?ki(o):void 0,requestLiveDeadlineKey:s?Mi(o):void 0,requestAcceptanceDiscoveryOrder:s?Fi(o,n.acceptanceDiscoveryCapability):void 0}}function Bi(o){let{parsedParams:n}=o;return{...n,...o.tool.selectsActiveDevice===!0&&o.routingSessionUuid?{sessionUuid:o.routingSessionUuid}:{}}}function $i(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 Qt(o){let{name:n,tool:s,toolParams:a,execution:d,sessionId:c,sessionToolBinding:u,options:m}=o,p=Bi(o),g=s.supportsProgress?o.progress:void 0,h=()=>jd({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:(b)=>u.ownsSession(c,b),execution:{deviceBinding:{bindDeviceExecution:(b)=>j.bindDeviceExecution(d.id,b)},...Ul(d)},requestDeadline:$i(o),toolSelectionProfileUuid:o.connectionProfileUuid,actionsCompactMetadata:o.actionsCompactMetadata,labelSessionUuids:o.labelSessionUuids,routingBaseSessionUuid:o.routingBaseSessionUuid,sessionToolSelectionService:m.sessionToolSelectionService??(n==="executePlan"?Fd():void 0)},()=>s.handler(p,g,o.requestSignal));return await CB({textState:o.textState,getDeadlineMs:o.getRequestDeadlineMs},()=>U(o.requestSignal,h))}class be extends t{data;constructor(o,n){super(`Unknown tool: ${o}${n?`. ${n}`:""}`);this.name="UnknownToolError",this.data={code:Vp,toolName:o}}}class Ve extends t{data;constructor(o,n){let s=n.join("; ");super(`Unknown tool: ${o}${s?`. ${s}`:""}`);this.name="ToolUnavailableError",this.data={code:Du,toolName:o}}}function Ge(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 WY(o){return Ge(o)===Du}function zY(o){if(Ge(o)!==Vp)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 jY(o){return Ge(o)===Wp}function Te(o,n){return!!w.sessionManager()?.isLiveSessionOfSamePlan(o,n)}function Xt(o,n){let s=N.getTool(o);if(!s){let a=N.getRegisteredTool(o);if(a)throw new Ve(o,N.getToolAvailabilityGateReasons(a));throw new be(o,cP(o))}if(o===bt){let a=n;if(typeof a.toolName==="string"&&a.toolNames===void 0||Array.isArray(a.toolNames)&&a.toolNames.every((d)=>typeof d==="string"))EU(aK(a))}return s}function Je(o){return typeof o==="string"&&o.trim().length>0?o:void 0}function qi(o,n,s){let{tool:a,implicitAutolockMcpSessionId:d}=o,c=Zt(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 Zt(o){return o==="android"||o==="ios"?o:void 0}function ji(o){let n=w.sessionManager()?.peekSession(o);return n?.assignedDevice?w.devicePool()?.getDevice(n.assignedDevice)?.platform:void 0}function Ki(o){let n=w.sessionManager(),s=w.devicePool();if(!n||!s)return ho(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 Vi(o,n){let{name:s,tool:a,toolParams:d,sessionId:c,daemonMode:u,sessionToolBinding:m}=o,p=o.context.requestMcpSessionId,g=u?w.brokerConnectionScopes()?.get(p):void 0,h=FQ({binding:!n.deviceId&&!n.device&&!n.sessionUuid?g:void 0,action:s,platform:Zt(n.platform),grantedPlatformOf:ji});if(h)throw h;let R=a.isDeviceReadOnlyCall?.(d)===!0;return{routingSessionUuid:m.resolveDeviceSessionUuid(c,d,Ki,{selectingActiveDevice:a.selectsActiveDevice===!0,deferForeignDevice:a.selectsActiveDevice!==!0&&(R||g!==void 0),readOnly:R}),resolvedImplicitAutolockSessionUuid:void 0}}function eo(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:Je(c.sessionUuid)});if(!(d.requiresDevice&&!Fr(a)||d.selectsActiveDevice===!0))return p;let g=c,h=w.devicePool();if(h&&m&&!s&&!g.sessionUuid&&!g.device)return qi(o,g,h);return Vi(o,g)}function Gi(o,n){return o?w.devicePool()?.resolveAutolockSessionForMcpSession(n):void 0}function to(o){let{name:n,tool:s,toolParams:a,sessionId:d,sessionToolBinding:c}=o;if(!s.requiresDevice||Fr(n))return!1;let u=Je(a.sessionUuid),m=c.boundDeviceSessionUuid(d)??Gi(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 Sf(m,u)}function Ji(o){let{scope:n,toolSelectionProfileRegistry:s}=o,{name:a,toolParams:d,sessionId:c,sessionToolBinding:u,context:m}=n,p=a===bt,g=typeof d.sessionUuid==="string"?d.sessionUuid:void 0,h=o.initialConnectionProfileUuid;if(p&&!h&&!g?.trim().length)h=u.createAndBindToolSelectionProfile(c),s.record(h);return Mt(s,h,p?m.requestedToolResultsNoStructuredContent:void 0),Ft(s,h,p?m.requestedActionsCompactMetadata:void 0),Ut(s,h,p?m.requestedPrototypeFullSchema:void 0),{connectionProfileUuid:h,requestedToolSelectionProfileUuid:g,toolResultsNoStructuredContent:he(s,h),actionsCompactMetadata:_t(s,h)}}function zi(o,n=w){return o.toolSelectionSessionManager??n.sessionManager()}function Wi(o,n,s){let{connectionProfileUuid:a,requestedToolSelectionProfileUuid:d}=n;return o.name===bt&&d!==void 0&&d===a?o.sessionToolBinding.boundDeviceSessionUuid(o.sessionId)??s:s}function oo(o){let{scope:n,options:s,routingSessionUuid:a}=o,{name:d,tool:c,toolParams:u}=n,m=Ji(o),{connectionProfileUuid:p}=m,g=Je(u.device),h=zi(s),R=Wi(n,m,a),b=uo(d),C=b?R:rt(R,h),T=C?h?.getDeviceLabels(C):void 0;return{connectionProfileUuid:p,toolResultsNoStructuredContent:m.toolResultsNoStructuredContent,actionsCompactMetadata:m.actionsCompactMetadata,requestedDeviceLabel:g,routingBaseSessionUuid:C,derivedLabelSessionUuid:c.requiresDevice&&g?T?.[g]:void 0,labelSessionUuids:b?[]:Array.from(new Set(Object.values(T??{})))}}var Yi=(o)=>{let n=k.getExistingInstance(o);return n?.isLastConnectionFailureForwardingLeaseConflict()?n.getLastConnectionFailureMessage():void 0};function Qi(o){let n=[],s=o;while(s instanceof Error&&n.length<8&&!n.includes(s))n.push(s),s=s.cause;return n}function ro(o,n,s=Yi){let a=Qi(o),d=a.find((u)=>u instanceof Jh),c=d?.message??(a.some((u)=>u instanceof VA)?[...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 Xi(o,n,s=w){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=DZ(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 OZ(a,d)}catch(d){return e.warn("[MCP] Failed to read session for device-loss continuity",d),a}}function ze(o){return{content:[{type:"text",text:JSON.stringify(o)}],isError:!0}}async function io(o,n){let{toolName:s,execution:a}=n;if(o instanceof hy){let m=NI(),p={content:[{type:"text",text:JSON.stringify(m)}],structuredContent:m,isError:!0};return n.daemonMode?p:fb(p,mb(dP(n.tool),n.toolResultsNoStructuredContent))}if(o instanceof zt)return ze(RP({message:o.message,sessionUuid:o.sessionUuid,reason:o.release.releaseReason,release:o.release}));if(o instanceof zh)j.unmarkSessionAdmitted(a.id);let d=PM(a.cancelReason);if(d)return ze(d);if(o instanceof zh)return Hs(o,{toolName:s,source:"MCP"});let c=ro(o,a.deviceIds);if(c)return Hs(c,{toolName:s,source:"MCP"});let u=k6(o,n.executionSessionUuid)??k6(ss(a.abortController.signal),n.executionSessionUuid);if(u){n.endExecutionOnce();let m=Math.max(0,i.now()-a.startTime),p=CZ(n.requestTimeoutMs,m);return ze(await Xi(u,p))}return n.withRoutedSession(Hs(n.textState.timeoutError(o)??o,{toolName:s,source:"MCP"}))}function Zi(o){return typeof o==="string"&&o.trim().length>0?o:void 0}function en(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 wM(s.scope,s.reason)}function tn(o,n,s,a){let d,c=aU(ci(s),o.schema);try{sU(c),d=o.schema.parse(c)}catch(u){throw new(u instanceof gl?mE:t)(`Invalid parameters for tool ${n}: ${Sd(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 on(o){let{tool:n,parsedParams:s}=o;if(!c1(n,s))return;for(let a of new Set([o.providedSessionUuid,o.derivedLabelSessionUuid]))hP(o.name,a,o.requestMcpSessionId,s)}function nn(o){let{providedSessionUuid:n,implicitAutolockMcpSessionId:s}=o,a=n?w.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?w.requireSessionManager().getSession(n):void 0;return d&&Cl(d.livenessPolicy)&&!a.isSessionOwnedByConnection(n,s)?n:void 0}function sn(o){let{toolParams:n}=o,s=o.tool.requiresDevice&&!o.executionSessionUuid&&!("deviceId"in n)&&!("platform"in n)&&!("device"in n)&&!("sessionUuid"in n);return j.startExecution(o.name,o.executionSessionId,o.executionSessionUuid,{transportSessionId:o.sessionId,unresolvedAutolockMcpSessionId:s?o.implicitAutolockMcpSessionId:void 0})}function an(o,n){let s=n.acceptanceDiscoveryRequested?null:mb(dP(n.tool),n.toolResultsNoStructuredContent);if(s!==null&&I2(o))e.debug("[MCP] Omitted structuredContent",{tool:n.name,reason:s});return fb(o,s)}async function cn(o,n){let{plan:s}=n,{name:a,tool:d,execution:c,sessionId:u,sessionToolBinding:m,options:p}=s,g;try{g=Vt(a),await Kt(s,{daemonMode:o.daemonMode,plainReadCall:n.plainReadCall,toolSelectionProfileRegistry:o.toolSelectionProfileRegistry});let h=await Qt(s),R=Fr(a)?AM(h):void 0;h=await kt({toolName:a,result:h,acquiredSessionUuid:R,requestedEnableTools:n.requestedEnableTools,sessionToolSelectionService:p.sessionToolSelectionService,listSessionTools:o.listSessionTools,requestSignal:s.requestSignal}),h=await Nt(a,h,R,{service:p.sessionToolSelectionService,enableTools:n.requestedEnableTools,connectionProfileUuid:s.connectionProfileUuid}),Gt(s,h),await Jt(s,{result:h,readOutsideBoundSession:n.readOutsideBoundSession});let b=an(h,{name:a,tool:d,toolResultsNoStructuredContent:n.toolResultsNoStructuredContent,acceptanceDiscoveryRequested:s.context.requestAcceptanceDiscoveryOrder!==void 0});if(R&&g.released.has(R))throw new t(`Device session ${R} was released during acquisition. Call ${a} again to acquire a device.`);if(R&&m.bind(u,R))N.notifyToolSelectionChanged();return n.withRoutedSession(b)}catch(h){return await io(h,{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{g?.cleanup?.()}finally{n.endExecutionOnce()}}}function un(o,n,s){let{name:a,args:d}=n,{options:c,daemonMode:u,sessionToolBinding:m}=o,p=c.sessionContext?.sessionId,g=s.requestMcpSessionId??(!u?p:void 0),h=s.requestMcpSessionId??o.serverBindingKey,R,b=!1;try{R=m.effectiveSessionUuid(h,d,{readOnly:N.getTool(a)?.isDeviceReadOnlyCall?.(d)===!0,onReadOutsideBoundSession:()=>{b=!0}})}catch(Le){return{failure:Hs(Le,{toolName:a,source:"MCP"})}}let C=m.connectionToolSelectionProfileUuid(h),T=Xt(a,d),D={name:a,tool:T,toolParams:d,sessionId:h,daemonMode:u,context:s,sessionToolBinding:m,implicitAutolockMcpSessionId:g},x=eo(D,R,Boolean(c.sessionContext?.initialSessionToolBinding));b=to(D)||b;let X=oo({scope:D,options:c,toolSelectionProfileRegistry:o.toolSelectionProfileRegistry,routingSessionUuid:x.routingSessionUuid,initialConnectionProfileUuid:C}),Se=Zi(d.sessionUuid);return{name:a,tool:T,toolParams:d,sessionId:p,bindingKey:h,context:s,implicitAutolockMcpSessionId:g,routingSessionUuid:x.routingSessionUuid,resolvedImplicitAutolockSessionUuid:x.resolvedImplicitAutolockSessionUuid,readOutsideBoundSession:b,selection:X,providedSessionUuid:Se,executionSessionUuid:X.derivedLabelSessionUuid??Se??x.routingSessionUuid}}function pn(o,n){let{name:s,tool:a,toolParams:d,sessionId:c,context:u,providedSessionUuid:m,selection:p}=n;en(o,{name:s,tool:a,toolParams:d,sessionId:c,executionSessionUuid:n.executionSessionUuid,routingSessionUuid:n.routingSessionUuid});let g=tn(a,s,d,{daemonMode:o.daemonMode,mcpSessionId:u.requestMcpSessionId,providedSessionUuid:m});if(o.daemonMode)on({name:s,tool:a,parsedParams:g,providedSessionUuid:m,derivedLabelSessionUuid:p.derivedLabelSessionUuid,requestMcpSessionId:u.requestMcpSessionId});return{parsedParams:g,plainReadCall:!a.requiresDevice&&(uo(s)||a.isDeviceReadOnlyCall?.(g)===!0),requestedEnableTools:Dt(s,g),handlerRoutingSessionUuid:a.requiresDevice&&p.requestedDeviceLabel&&p.routingBaseSessionUuid?p.routingBaseSessionUuid:n.routingSessionUuid}}function mn(o,n,s,a){let{name:d,tool:c,toolParams:u,sessionId:m,context:p,implicitAutolockMcpSessionId:g}=n,h=sn({name:d,tool:c,toolParams:u,executionSessionId:n.bindingKey,executionSessionUuid:n.executionSessionUuid,sessionId:a.executionScopeId??m,implicitAutolockMcpSessionId:g});if(s.plainReadCall)j.markReadOnlySessionAccess(h.id);if(n.resolvedImplicitAutolockSessionUuid)j.setResolvedAutolockSessionUuid(h.id,n.resolvedImplicitAutolockSessionUuid);let{requestLiveDeadlineKey:R,requestDeadlineMs:b}=p,C=(R?eE(R):void 0)??new yk,T=()=>(R?N$(R):void 0)??b;j.setExecutionDeadline(h.id,T,R?(ye)=>F$(R,ye):void 0);let D=(ye)=>o.daemonMode?_8(jt(ye,h.id),nn({daemonMode:o.daemonMode,tool:c,parsedParams:s.parsedParams,providedSessionUuid:n.providedSessionUuid,implicitAutolockMcpSessionId:g})):ye,x=!1,X=()=>{if(!x)x=!0,Le(),j.endExecution(h.id)},Se=vee(h.abortController.signal,a.signal),Le=E6(j,h.id,a.signal);return{execution:h,textState:C,getRequestDeadlineMs:T,requestSignal:Se,withRoutedSession:D,endExecutionOnce:X}}function gn(o,n){let{tool:s,providedSessionUuid:a,implicitAutolockMcpSessionId:d}=o;return a&&s.requiresDevice&&s.isDeviceReadOnlyCall?.(n.parsedParams)!==!0&&d?w.devicePoolWrites()?.beginMcpBind(d):void 0}async function fn(o,n){let s=Yt(n.args,{daemonMode:o.daemonMode,acceptanceDiscoveryCapability:o.options.acceptanceDiscoveryCapability,sessionKey:o.options.requestMcpSessionId,trustForwardedSessionId:o.options.trustForwardedMcpSessionId===!0}),a=un(o,n,s);if("failure"in a)return a.failure;let d=pn(o,a),c;try{c=mn(o,a,d,n.extra)}catch(m){if(m instanceof dS)return jZ(m);throw m}let u=gn(a,d);return cn(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 Sn(o,n){let s=o?N.getTool(n.name):void 0;if(!s)return n;let a=N.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 no(o){return async(n)=>{try{let s=Sn(o.daemonMode,n);return await fn(o,s instanceof Promise?await s:s)}catch(s){if(!Zg(s))throw s;return Hs(s,{toolName:n.name,source:"MCP"})}}}var so,Ce;function ao(){return so??=new dG({store:new cG}),so}function KY(){return Ce??=new NE({sessions:()=>w.sessionManager()}),Ce}function GY(){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 yn(o){return({name:n})=>o.has(n)?{onCancel:"abort"}:void 0}var vn=yn(new Set(["startDevice","executePlan","installApp"])),co=(o)=>o.name==="videoRecording"&&o.args.action==="stop"?{onCancel:"detach"}:vn(o),hn="mcp-task:";function Rn(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:`${hn}${n.task.taskId}`,sendNotification:async()=>{}}}}function lo(o){return(n)=>{let s=o.eligibleTools(n);if(!s)return o.execute(n);let a=n.args.deviceId===void 0&&Kk()&&pO(n.extra.envelope?.[Ar]);return h8({declared:Iy({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=Rn(n,d),u=d.task;if(!u||!a)return o.execute(c);return D$(c,(m)=>o.execute(m),async({inputRequests:m})=>({responses:await u.requestInput(m)}),{recorder:Gk,declared:GR(n.extra.envelope?.[Ar])})})}}var bn=5000;class po{lastSyncAt;inFlight;resyncIfStale(o,n=i){if(this.inFlight)return this.inFlight;if(this.lastSyncAt!==void 0&&n.now()-this.lastSyncAt<bn)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 Tn=new po;function mo(o,n=i){H.registerListRefresher("installed-apps",()=>Tn.resyncIfStale(o,n))}function Cn(o,n){return o.packageId===n.packageId&&o.versionCode===n.versionCode&&o.contentHash===n.contentHash}function Ee(o,n){return o?.some((s)=>Cn(s.buildKey,n))??!1}function fo(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 go(o,n,s){let a=Ee(o,n),d=Ee(o,s);return a?d?"both":"onlyA":d?"onlyB":null}function So(o,n,s){return{appId:o.appId,buildA:n,buildB:s,nodes:o.nodes.flatMap((a)=>{let d=go(a.provenance,n,s);return d?[{...a,presence:d}]:[]}),edges:o.edges.flatMap((a)=>{let d=go(a.provenance,n,s);return d?[{...a,presence:d}]:[]})}}class yo{coverageRepository;navigationRepository;timer;constructor(o={}){this.coverageRepository=o.coverageRepository??Xee,this.navigationRepository=o.navigationRepository??new OC,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 g=u.inEdgesByScreen.get(p.screen_name)??[],h=u.outEdgesByScreen.get(p.screen_name)??[],R=g.length+h.length,b=this.getNodeDepth(p.screen_name,u),C=p.visit_count/m*50,T=b>0?1/b*50:25,D=C+T;a.push({type:"node",id:p.id,screenName:p.screen_name,criticalityScore:D,recommendation:this.generateNodeRecommendation(p,b,R)})}for(let p of s){let g=u.nodeByScreen.get(p.from_screen),h=u.nodeByScreen.get(p.to_screen);if(!g||!h)continue;let R=this.getNodeDepth(p.from_screen,u),C=(g.visit_count+h.visit_count)/2/m*50,T=R>0?1/R*50:25,D=C+T;a.push({type:"edge",id:p.id,fromScreen:p.from_screen,toScreen:p.to_screen,criticalityScore:D,recommendation:this.generateEdgeRecommendation(p,R)})}return a.sort((p,g)=>g.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 g=d.get(p.from_screen)??[];g.push(p),d.set(p.from_screen,g);let h=a.get(p.to_screen)??[];h.push(p),a.set(p.to_screen,h)}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 g=u+1;s.set(p.to_screen,g),a.push({screen:p.to_screen,depth:g})}}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 vo=new yo;var E={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"},En=1000;function B(o){if(!o)return;try{return decodeURIComponent(o).trim()}catch(n){return e.debug(`[NavigationResources] param decode failed for '${o}': ${n}`),o.trim()}}var We=null;function Po(o=w){return o.sessionManager()?.getAllSessions()??[]}function In(o,n=!0){if(n&&o?.sessionUuid)return me.getInstanceForSession(o.sessionUuid);let s=Po();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 me.getInstanceForSession(s[0].sessionId);return me.getInstance()}function K(o,n=!0){return We??In(o,n)}var Ro=null,pe=new Map;function Ye(o){if(pe.has(o))return;pe.set(o,i.setTimeout(()=>{pe.delete(o);let n=o?Po():[],s=n.length===1?n[0].sessionId:void 0;H.notifyResourcesUpdated([E.APPS,E.GRAPH,E.HISTORY],o,s).catch((a)=>{e.warn("[NavigationResources] Failed to notify navigation updates",a)})},En))}function Pn(o){let n=Ro;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(Ye);else if(n?.setGraphUpdateListener)n.setGraphUpdateListener(null);if(Ro=o,o.setGraphUpdateListener)o.setGraphUpdateListener(Ye)}var Dn=null;function An(){return Dn??sd.getInstance()}async function bo(o,n){let s=o?`automobile:navigation/graph?appId=${Qe(o)}`:E.GRAPH;try{let a,d=K(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 Ze(o,n){let s=Number(B(o));if(!Number.isFinite(s))throw Error(`Invalid ${n}: ${o}`);return s}function Do(o,n){return{uri:o,mimeType:"application/json",text:JSON.stringify({error:n},null,2)}}async function xn(o){let n=Si(o)??E.GRAPH_BUILD_FILTER;try{let s=B(o.appId);if(!s)throw Error("App ID is required.");let a={packageId:s,versionCode:Ze(o.versionCode,"versionCode"),contentHash:B(o.contentHash)??""},d=K(void 0,!1),c=await(d.exportGraphSummaryForApp?.(s)??d.exportGraphSummary());return{uri:n,mimeType:"application/json",text:JSON.stringify(fo(c,a),null,2)}}catch(s){return e.error(`[NavigationResources] Failed to get build-filtered navigation graph: ${s}`),Do(n,`Failed to retrieve build-filtered navigation graph: ${s}`)}}async function wn(o){let n=Si(o)??E.GRAPH_BUILD_DIFF;try{let s=B(o.appId);if(!s)throw Error("App ID is required.");let a={packageId:s,versionCode:Ze(o.versionCodeA,"versionCodeA"),contentHash:B(o.contentHashA)??""},d={packageId:s,versionCode:Ze(o.versionCodeB,"versionCodeB"),contentHash:B(o.contentHashB)??""},c=K(void 0,!1),u=await(c.exportGraphSummaryForApp?.(s)??c.exportGraphSummary());return{uri:n,mimeType:"application/json",text:JSON.stringify(So(u,a,d),null,2)}}catch(s){return e.error(`[NavigationResources] Failed to get build diff navigation graph: ${s}`),Do(n,`Failed to retrieve build diff navigation graph: ${s}`)}}async function Nn(){let o=E.APPS;try{let s={apps:await K(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 To(o,n={},s){try{let a=await K(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 Z(o,n){return{uri:o,mimeType:"application/json",text:JSON.stringify({error:n},null,2)}}async function Eo(o,n,s){let a=n?`automobile:navigation/nodes/${o}?appId=${Qe(n)}`:`automobile:navigation/nodes/${o}`;try{let d=await K(s,!n).getNodeResourceById(o,n);if(!d)return Z(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}`),Z(a,`Failed to retrieve navigation node ${o}: ${d}`)}}async function Mn(o,n){let s=`automobile:navigation/nodes?screen=${Qe(o)}`;try{let a=await K(n).getNodeResourceByScreen(o);if(!a)return Z(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}`),Z(s,`Failed to retrieve navigation node '${o}': ${a}`)}}function _n(o){let n=B(o.cursor)??"",s=B(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 Io(o,n,s){let a=_w(o,n);try{let d=K(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=An(),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 g=await m.readScreenshot(p);if(!g)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:g.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 On(){H.register(E.APPS,"Navigation Apps",{description:"Apps that have a persisted navigation graph (appId, displayName, lastUpdated). No connected device required.",mimeType:"application/json",handler:()=>Nn()}),H.register(E.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)=>bo(void 0,o)}),H.registerTemplate(E.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=B(o.appId);return bo(n)}}),H.registerTemplate(E.GRAPH_BUILD_FILTER,"Navigation Graph (Build Filter)",{description:"App-union navigation graph annotated for one app build.",mimeType:"application/json",handler:xn}),H.registerTemplate(E.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:wn})}function Un(){H.register(E.HISTORY,"Navigation History",{description:"Ordered navigation history for the current app (nodes and edges).",mimeType:"application/json",handler:(n)=>To(E.HISTORY,{},n)});let o=async(n,s)=>{try{let{cursor:a,limit:d}=_n(n),c=new URLSearchParams;if(a)c.set("cursor",a);if(d)c.set("limit",d.toString());let u=c.toString(),m=u?`${E.HISTORY}?${u}`:E.HISTORY;return To(m,{cursor:a,limit:d},s)}catch(a){return e.error(`[NavigationResources] Failed to parse navigation history params: ${a}`),{uri:E.HISTORY,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve navigation history: ${a}`},null,2)}}};H.registerTemplateWithReadContext(E.HISTORY_WITH_CURSOR_AND_LIMIT,"Navigation History",{description:"Ordered navigation history with pagination support.",mimeType:"application/json",handler:o}),H.registerTemplateWithReadContext(E.HISTORY_WITH_CURSOR,"Navigation History",{description:"Ordered navigation history with pagination support.",mimeType:"application/json",handler:o}),H.registerTemplateWithReadContext(E.HISTORY_WITH_LIMIT,"Navigation History",{description:"Ordered navigation history with pagination support.",mimeType:"application/json",handler:o})}function Fn(){H.registerTemplate(E.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=B(o.appId);if(!Number.isFinite(n))return Z(`automobile:navigation/nodes/${o.nodeId}`,`Invalid navigation node id: ${o.nodeId}`);return Eo(n,s)}}),H.registerTemplateWithReadContext(E.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 Z(`automobile:navigation/nodes/${o.nodeId}`,`Invalid navigation node id: ${o.nodeId}`);return Eo(s,void 0,n)}}),H.registerTemplateWithReadContext(E.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=B(o.screenName)??"";if(!s)return Z("automobile:navigation/nodes?screen=","Screen name is required.");return Mn(s,n)}}),H.registerTemplate(E.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=B(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 Io(n,s)}}),H.registerTemplateWithReadContext(E.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 Io(s,void 0,n)}})}function Ao(o={}){if(o.navigationGraph)We=o.navigationGraph;Pn(We??me.getInstance()),me.setSessionGraphUpdateListener(Ye),On(),Un(),Fn(),H.register(E.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 K(n).exportGraphSummary()).appId;if(!s)return{uri:E.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 vo.generateReport(s);return{uri:E.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:E.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 Ln=rK,Bn=1000,$n=1,xo=5000,qn=new tP;function jn(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 Hn(o){let n={};if(o.testClass)n.testClass=o.testClass;if(o.testMethod)n.testMethod=o.testMethod;if(jn(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 wo(o,n=qn){let s=o.lookbackDays??Ln,a=o.limit??Bn,d=o.minSamples??$n,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((g,h)=>g+h.sampleSize,0),p=Hn(o);return{testTimings:u.map((g)=>({testClass:g.testClass,testMethod:g.testMethod,averageDurationMs:g.averageDurationMs,sampleSize:g.sampleSize,lastRunTimestampMs:g.lastRunTimestampMs||null,lastRun:g.lastRunTimestampMs?new Date(g.lastRunTimestampMs).toISOString():null,successRate:g.sampleSize>0?Number((g.passedCount/g.sampleSize).toFixed(4)):0,failureRate:g.sampleSize>0?Number((g.failedCount/g.sampleSize).toFixed(4)):0,stdDevDurationMs:g.stdDevDurationMs,statusCounts:{passed:g.passedCount,failed:g.failedCount,skipped:g.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"},Kn=`${se.BASE}?{params}`,Vn=new Set(["lookbackDays","limit","minSamples","orderBy","orderDirection","testClass","testMethod","deviceId","deviceName","devicePlatform","deviceType","appVersion","gitCommit","targetSdk","jdkVersion","jvmTarget","gradleVersion","isCi","sessionUuid"]);function Gn(o){let n=Object.keys(o).filter((s)=>!Vn.has(s));if(n.length>0)throw Error(`Unknown query parameters: ${n.join(", ")}`);return{lookbackDays:wd(o.lookbackDays,"lookbackDays",{min:1}),limit:wd(o.limit,"limit",{min:1,max:xo}),minSamples:wd(o.minSamples,"minSamples",{min:0}),orderBy:cf(o.orderBy,"orderBy",["lastRun","averageDuration","sampleSize"]),orderDirection:cf(o.orderDirection,"orderDirection",["asc","desc"]),testClass:Go(o.testClass),testMethod:Go(o.testMethod),deviceId:Go(o.deviceId),deviceName:Go(o.deviceName),devicePlatform:cf(o.devicePlatform,"devicePlatform",["android","ios"]),deviceType:cf(o.deviceType,"deviceType",["emulator","simulator","device"]),appVersion:Go(o.appVersion),gitCommit:Go(o.gitCommit),targetSdk:wd(o.targetSdk,"targetSdk",{min:1}),jdkVersion:Go(o.jdkVersion),jvmTarget:Go(o.jvmTarget),gradleVersion:Go(o.gradleVersion),isCi:q$(o.isCi,"isCi"),sessionUuid:Go(o.sessionUuid)}}function Jn(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 zn(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 Wn(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);Jn(n,o),zn(n,o);let s=n.toString();return s?`${se.BASE}?${s}`:se.BASE}async function No(o,n){try{let s=await wo(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 ko(){H.register(se.BASE,"Test Timing History",{description:"Historical aggregated test execution timing statistics.",mimeType:"application/json",handler:()=>No({},se.BASE)}),H.registerTemplate(Kn,"Test Timing History",{description:"Historical aggregated test execution timing statistics.",mimeType:"application/json",handler:async(o)=>{try{let n=V$(o.params??""),s=Gn(n),a=Wn(s);return No(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"},Yn=100,Qn=500,Xn=30,Zn=`${ae.BASE}?{params}`,es=new Set(["lookbackDays","limit","testClass","testMethod","deviceId","orderDirection","latestOnly"]);function ts(o){let n=Object.keys(o).filter((s)=>!es.has(s));if(n.length>0)throw Error(`Unknown query parameters: ${n.join(", ")}`);return{lookbackDays:wd(o.lookbackDays,"lookbackDays",{min:1}),limit:wd(o.limit,"limit",{min:1,max:Qn}),testClass:Go(o.testClass),testMethod:Go(o.testMethod),deviceId:Go(o.deviceId),orderDirection:cf(o.orderDirection,"orderDirection",["asc","desc"]),latestOnly:q$(o.latestOnly,"latestOnly")}}function os(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 rs(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 is(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 ns(o,n=new tP){let s=o.lookbackDays??Xn,a=o.limit??Yn,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 b of m){let C=`${b.testClass}::${b.testMethod}`;p.set(C,(p.get(C)||0)+1)}let g=m;if(c){let b=new Set;g=m.filter((C)=>{let T=`${C.testClass}::${C.testMethod}`;if(b.has(T))return!1;return b.add(T),!0}),g=g.slice(0,a)}let h=g.map((b)=>{let C=`${b.testClass}::${b.testMethod}`,T=p.get(C)||1;return rs(b,T)}),R=is(o);return{testRuns:h,generatedAt:new Date().toISOString(),totalRuns:h.length,query:{lookbackDays:s,limit:a,orderDirection:d},filters:R}}async function Mo(o,n){try{let s=await ns(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 _o(){H.register(ae.BASE,"Test Run History",{description:"Individual test run history with step-level details and screens visited.",mimeType:"application/json",handler:()=>Mo({},ae.BASE)}),H.registerTemplate(Zn,"Test Run History",{description:"Individual test run history with step-level details and screens visited.",mimeType:"application/json",handler:async(o)=>{try{let n=V$(o.params??""),s=ts(n),a=os(s);return Mo(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 as=50,ds=0,Uo=500,cs=new am,ls=new YO;function Oo(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 us(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 Fo(o,n={auditRepository:cs,toolCallRepository:ls}){let s=Oo(o.startTime),a=Oo(o.endTime),d=o.limit??as,c=o.offset??ds,u=await n.auditRepository.listResults({startTime:s,endTime:a,limit:d,offset:c,deviceId:o.deviceId}),m=us(u.results.map((g)=>g.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"},qo=["startTime","endTime","limit","offset","deviceId"],ps=`${de.BASE}{?${qo.join(",")}}`,ms=new Set(qo);function Lo(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 Bo(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 gs(o){let n=Object.keys(o).filter((m)=>!ms.has(m));if(n.length>0)throw Error(`Unknown query parameters: ${n.join(", ")}`);let s=Bo(o.startTime,"startTime"),a=Bo(o.endTime,"endTime"),d=o.limit?.trim(),c=o.offset?.trim(),u=o.deviceId?.trim();return{startTime:s,endTime:a,limit:Lo(d,"limit",{min:1,max:Uo}),offset:Lo(c,"offset",{min:0}),deviceId:u||void 0}}function fs(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);let s=n.toString();return s?`${de.BASE}?${s}`:de.BASE}async function $o(o,n){try{let s=await Fo(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 jo(){H.register(de.BASE,"Performance Results",{description:"List UI performance audit results from the local database.",mimeType:"application/json",handler:()=>$o({},de.BASE)}),H.registerTemplate(ps,"Performance Results",{description:"List UI performance audit results from the local database.",mimeType:"application/json",handler:async(o)=>{try{let n=gs(o),s=fs(n);return $o(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 Ho from"fs/promises";function Ss(o,n){return Yie(n,o,()=>Error(`Refusing to read recording file outside the archive root: ${o}`))}var Ie={lookupLatest:wJ,getById:Au,list:SJ,readFile:Ho.readFile,get archiveRoot(){return Xe(dn.VIDEO_ARCHIVE)}};function ys(o){if(o.format==="mp4")return"video/mp4";if(o.format==="mov")return"video/quicktime";return"application/octet-stream"}function vs(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 hs(o){return o instanceof Error&&"code"in o&&o.code==="ENOENT"}async function Ko(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=Ss(o.filePath,s.archiveRoot),c=(await s.readFile(a)).toString("base64");return{uri:n,mimeType:ys(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: ${hs(a)?d:a}`,metadata:o},null,2)}}}async function Rs(o=Ie){try{let{recording:n,newestWithoutFile:s}=await o.lookupLatest();if(!n)return{uri:Rd.LATEST,mimeType:"application/json",text:JSON.stringify(s?{error:vs(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 Ko(a,Rd.LATEST,o)}catch(n){return e.error(`[VideoRecordingResources] Failed to get latest recording: ${n}`),{uri:Rd.LATEST,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve latest recording: ${n}`},null,2)}}}async function bs(o=Ie){try{let n=await o.list();return{uri:Rd.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:Rd.ARCHIVE,mimeType:"application/json",text:JSON.stringify({error:`Failed to list recordings: ${n}`},null,2)}}}async function Ts(o,n=Ie){try{let s=o.recordingId;if(!s)return{uri:Rd.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:$O(s),mimeType:"application/json",text:JSON.stringify({error:`Recording not found: ${s}`},null,2)};return Ko(a,$O(s),n)}catch(s){return e.error(`[VideoRecordingResources] Failed to read recording: ${s}`),{uri:Rd.ARCHIVE_ITEM,mimeType:"application/json",text:JSON.stringify({error:`Failed to retrieve recording: ${s}`},null,2)}}}function Vo(){H.register(Rd.LATEST,"Latest Video Recording",{description:"The most recent video recording with metadata and base64-encoded video data.",mimeType:"video/mp4",handler:()=>Rs()}),H.register(Rd.ARCHIVE,"Video Recording Archive",{description:"Metadata list for archived video recordings.",mimeType:"application/json",handler:()=>bs()}),H.registerTemplate(Rd.ARCHIVE_ITEM,"Video Recording",{description:"Video recording content and metadata for the specified recording ID.",mimeType:"video/mp4",handler:Ts}),e.info("[VideoRecordingResources] Registered video recording resources")}var Cs={DEVICE_LOCALIZATION:"automobile:devices/{deviceId}/localization"};async function Es(o){return Ps(o,"LocalizationResources")}function Is(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 Ds(o,n=(s)=>new dy(s)){let s=`automobile:devices/${o}/localization`,a=await Es(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=Is(a,c);return{uri:s,mimeType:"application/json",text:JSON.stringify(u,null,2)}}function Jo(){H.registerTemplate(Cs.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)=>Ds(o.deviceId)}),e.info("[LocalizationResources] Registered localization resources")}async function As(){try{let{snapshots:o,count:n,totalSizeBytes:s,unsizedCount:a,pendingReclaimCount:d,orphanedAvdSnapshots:c}=await CJ(),u=await Ac();return{uri:wE.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:wE.ARCHIVE,mimeType:"application/json",text:JSON.stringify({error:`Failed to list snapshots: ${o}`},null,2)}}}function zo(){H.register(wE.ARCHIVE,"Device Snapshot Archive",{description:"Metadata list for captured device snapshots.",mimeType:"application/json",handler:As}),e.info("[DeviceSnapshotResources] Registered device snapshot resources")}function Mg(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 A$(o,n){let s=Mg(o,n);return s===void 0?void 0:new Date(s).toISOString()}function T$(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 k$(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 Wo=["minute","hour","day","week"],Yo=["1h","24h","3d","7d","30d"],xs={"1h":3600000,"24h":86400000,"3d":259200000,"7d":604800000,"30d":2592000000};function zk(o){return xs[o]}function E$(o){if(o===void 0||o===null)return"hour";if(typeof o!=="string")throw Error(`Invalid aggregation: ${String(o)}`);if(!Wo.includes(o))throw Error(`Invalid aggregation: ${o}. Must be one of: ${Wo.join(", ")}`);return o}function jk(o){if(o===void 0||o===null)return;if(typeof o!=="string")throw Error(`Invalid dateRange: ${String(o)}`);if(!Yo.includes(o))throw Error(`Invalid dateRange: ${o}. Must be one of: ${Yo.join(", ")}`);return o}var ce={BASE:"automobile:failures",TIMELINE:"automobile:failures/timeline"},ws=new bR;async function Ns(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"],ks=`${ce.TIMELINE}{?${tt.join(",")}}`,Ms=new Set(tt),_s="24h";function Os(o){let n=Object.keys(o).filter((s)=>!Ms.has(s));if(n.length>0)throw Error(`Unknown query parameters: ${n.join(", ")}. Supported: ${tt.join(", ")}`);return{dateRange:Qo(o,"dateRange",jk)??_s,aggregation:Qo(o,"aggregation",E$)}}function Us(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 Qo(o,n,s){try{return s(o[n])}catch(a){let d=Us(Si(o),n);if(d!==void 0&&d!==o[n])s(d);throw a}}function Xo(o,n){return{uri:o,mimeType:"application/json",text:JSON.stringify({error:n},null,2)}}async function Fs(o,n,s){let a;try{a=Os(o)}catch(d){return e.warn(`[FailuresResources] Invalid timeline query: ${r(d)}`),Xo(Si(o)??ce.TIMELINE,r(d))}try{let{dateRange:d,aggregation:c}=a,u=s.now(),m=u-zk(d),p=await n.getTimelineData({startTime:m,endTime:u,aggregation:c}),g={dataPoints:p.dataPoints,dateRange:d,aggregation:c,previousPeriodTotals:p.previousPeriodTotals};return{uri:`${ce.TIMELINE}?dateRange=${d}&aggregation=${c}`,mimeType:"application/json",text:JSON.stringify(g,null,2)}}catch(d){return e.error(`[FailuresResources] Failed to get timeline: ${d}`),Xo(ce.TIMELINE,`Failed to retrieve timeline: ${d}`)}}function Zo(o=ws,n=i){H.register(ce.BASE,"Failures",{description:"List all failure groups (crashes, ANRs, tool failures) with aggregated data.",mimeType:"application/json",handler:()=>Ns(ce.BASE,o)}),H.registerTemplate(ks,"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)=>Fs(s,o,n)}),e.info("[FailuresResources] Registered failures resources")}var er={FILES:"automobile:devices/{deviceId}/storage/{packageName}/files",ENTRIES:"automobile:devices/{deviceId}/storage/{packageName}/{fileName}/entries"},Pe={files:new Map,entries:new Map};function tr(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 or(o){return Ps(o,"StorageResources")}async function Ls(o,n,s={}){if(o.platform==="android")return(s.preferenceFilesClient?.(o)??k.getInstance(o,v)).listPreferenceFiles(n);else if(o.platform==="ios")return(s.preferenceFilesClient?.(o)??_.getInstance(o)).listPreferenceFiles(n);throw Error(`Unsupported platform: ${o.platform}`)}async function Bs(o,n,s,a={}){if(o.platform==="android"){let d=a.preferenceEntriesClient?.(o)??k.getInstance(o,v);try{return{entries:await d.getPreferenceEntries(n,s),source:"ctrlproxy"}}catch(c){if(!$s(c))throw c;try{let u=(a.adbClientFactory??v).create(o),m=await Xg(u,n).catch(mM),p=await oy(u,n,AP(s),m);return{entries:await W8(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)??_.getInstance(o)).getPreferenceEntries(n,s),source:"ctrlproxy"};throw Error(`Unsupported platform: ${o.platform}`)}function $s(o){return o instanceof _m||Ug(o)||Tte(o)}function qs(o,n){return`${o}:${n}`}function js(o,n,s){return`${o}:${n}:${s}`}function rr(o){return{uri:Si(o)??"",mimeType:"application/json",text:JSON.stringify({error:"Malformed resource URI: a path segment is not valid percent-encoding."},null,2)}}function Ks(o,n){return`automobile:devices/${o}/storage/${Qe(n)}/files`}function Vs(o,n,s){return`automobile:devices/${o}/storage/${Qe(n)}/${Qe(s)}/entries`}async function Gs(o,n={}){let{deviceId:s,packageName:a}=o,d=Co(a);if(d===null)return rr(o);let c=Ks(s,d);e.info(`[StorageResources] getStorageFilesResource: deviceId=${s}, packageName=${d}`);try{let u=await or(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 Ls(u,d,n);e.info(`[StorageResources] listPreferenceFiles returned ${m.length} files`);let p=new Date().toISOString(),g=tr(m),h=qs(s,d),R=Pe.files.get(h);if(R&&R.hash!==g)e.info(`[StorageResources] Storage files changed for ${d} on ${s}`),H.notifyResourceUpdated(c);return Pe.files.set(h,{files:m,lastUpdated:p,hash:g}),{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}`,...Mv(u)},null,2)}}}async function Js(o,n={}){let{deviceId:s,packageName:a,fileName:d}=o,c=Co(a),u=Co(d);if(c===null||u===null)return rr(o);let m=Vs(s,c,u);try{let p=await or(s);if(!p)return{uri:m,mimeType:"application/json",text:JSON.stringify({error:`Device not found or not booted: ${s}`},null,2)};let{entries:g,source:h}=await Bs(p,c,u,n),R=new Date().toISOString(),b=tr(g),C=js(s,c,u),T=Pe.entries.get(C);if(T&&T.hash!==b)e.info(`[StorageResources] Storage entries changed for ${c}/${u} on ${s}`),H.notifyResourceUpdated(m);Pe.entries.set(C,{entries:g,lastUpdated:R,hash:b});let D=p.platform==="ios"?g.map((x)=>_P(x)?{...x,value:null,redacted:!0}:x):g;return{uri:m,mimeType:"application/json",text:JSON.stringify({deviceId:s,packageName:c,fileName:u,platform:p.platform,source:h,entries:D,totalCount:g.length,lastUpdated:R},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}`,...Mv(p instanceof t&&p.cause instanceof _m?p.cause:p)},null,2)}}}function ir(o={}){H.registerTemplate(er.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)=>Gs(n,o)}),H.registerTemplate(er.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)=>Js(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 nr(o,n){try{let s=await o.executeCommand(`shell dumpsys package ${S(n)}`,{timeoutMs:5000,maxBuffer:oe});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(ar(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(ar(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 ar({deviceId:o,namespace:n,path:s,byteCount:a,modifiedSeconds:d}){return JSON.stringify([o,n,s,a,d])}import{createHash as Ys}from"crypto";import{posix as ge}from"path";import{TextDecoder as Qs}from"util";var dr={NAMESPACE:"automobile:devices/{deviceId}/downloads/{namespace}",FILE:"automobile:devices/{deviceId}/downloads/{namespace}/{path}"},cr={NAMESPACE:"automobile:devices/{deviceId}/storage-domains/user_files/{namespace}",FILE:"automobile:devices/{deviceId}/storage-domains/user_files/{namespace}/{path}"},lr={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 Ws(o){return rP(o).split("/").map((n)=>Qe(n)).join("/")}function te(o){return ur(o,!1)}function le(o){return ur(o,!0)}function ur(o,n){let s=Hg(o.namespace),a=`automobile:devices/${Qe(o.deviceId)}/${n?"storage-domains/user_files":"downloads"}/${Qe(s)}`;return o.path===void 0?a:`${a}/${Ws(o.path)}`}function it(o){let n=Hg(Ga(o.namespace));return{deviceId:Ga(o.deviceId),namespace:n,...o.path!==void 0?{path:rP(Ga(o.path))}:{}}}var Xs=67108864,Zs=120000,vr="__AUTOMOBILE_NS_MISSING__",hr="__AUTOMOBILE_FILE_MISSING__",ea=24576,ta="Hash unavailable: file changed or disappeared during listing",nt=null;function YY(){if(!nt)nt=oa();return nt}function oa(o={}){return new Rr(o.adbFactory??v,o.createUserResolver??((n)=>new At(n)),o.deviceResolver??ra,{hashCache:o.hashCache??new ot,iosFixtureReader:o.iosFixtureReader??new OO((n)=>new F(n),yb)})}async function ra(o){return Ps(o,"SharedStorageReadService")}class Rr{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=Hg(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:yr(o.deviceId)};s.platform=a.platform;let d=fr(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(g){return e.warn(`[SharedStorageRead] resolve user failed for list: ${r(g)}`,g),{...s,observation:"unavailable",reason:r(g)}}let m=Sr(u.userId,n),p={...s,userId:u.userId,userSource:u.source,downloadsDirectory:m};try{let g=await st(c,ia(m),o.signal);if(g.trim()===vr)return this.hashCache.retainNamespacePaths(o.deviceId,n,new Set),{...p,observation:"missing",reason:fa(m)};let h=aa(g,m);this.hashCache.retainNamespacePaths(o.deviceId,n,new Set(h.map((b)=>b.absolutePath)));let R=await la(c,h,o,{namespace:n,directory:m,cache:this.hashCache});return{...p,observation:"complete",files:da(h,R,o.deviceId,n).map((b)=>({...b,resourceUri:gr(o)({deviceId:o.deviceId,namespace:n,path:b.path})}))}}catch(g){return e.warn(`[SharedStorageRead] list ${m} failed: ${r(g)}`,g),{...p,observation:"unavailable",reason:r(g)}}}async read(o){let n=Hg(o.namespace),s=rP(o.path),a={deviceId:o.deviceId,platform:"android",namespace:n,path:s,observation:"complete",resourceUri:gr(o)({deviceId:o.deviceId,namespace:n,path:s})},d=await this.deviceResolver(o.deviceId);if(!d)return{...a,observation:"unavailable",reason:yr(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=fr(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(h){return e.warn(`[SharedStorageRead] resolve user failed for read: ${r(h)}`,h),{...a,observation:"unavailable",reason:r(h)}}a.userId=m.userId;let p=Sr(m.userId,n),g=ge.join(p,s);if(g!==p&&!g.startsWith(`${p}/`))throw new t(`path escapes shared-storage namespace ${n}`);try{let h=await st(u,sa(g),o.signal);if(h.trim()===hr)return{...a,observation:"missing",reason:Sa(g)};let R=Buffer.from(h.replace(/\s+/g,""),"base64");return{...a,...pr(R,s)}}catch(h){return e.warn(`[SharedStorageRead] read ${g} failed: ${r(h)}`,h),{...a,observation:"unavailable",reason:r(h)}}}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??ge.basename(d.path),byteCount:d.byteCount,lastModified:d.lastModified,mimeType:at(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:mr(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,...pr(a,s.path)}}catch(a){return e.warn("[SharedStorageRead] iOS namespace read failed",a),{...s,observation:mr(a)?"missing":"unavailable",reason:r(a)}}}}function pr(o,n){let s=pa(o);return{byteCount:o.byteLength,sha256:Ys("sha256").update(o).digest("hex"),mimeType:at(n)??(s===void 0?"application/octet-stream":"text/plain; charset=utf-8"),...s===void 0?{blob:o.toString("base64")}:{text:s}}}function mr(o){return o instanceof Error&&"code"in o&&o.code==="ENOENT"}function gr(o){return o.domain==="media_library"?xe:te}function fr(o,n){if(n.domain==="media_library"){if(o.platform==="ios")return De;if(Hg(n.namespace)!=="automobile-media")return"Only the putAppFile automobile-media namespace supports media_library list/read."}if(o.platform==="ios"&&W(o)!=="simulator")return ga(o.platform);return}function Sr(o,n){return ge.join(`/storage/emulated/${o}/Download`,n)}function ia(o){return`if [ -d ${S(o)} ]; then find ${S(o)} -type f -exec stat -c '%s|%Y|%n' {} \\; ; else printf '%s' ${S(vr)}; fi`}function na(o){return`sha256sum ${o.map((n)=>S(n)).join(" ")}`}function sa(o){return`if [ -f ${S(o)} ]; then base64 ${S(o)}; else printf '%s' ${S(hr)}; fi`}async function st(o,n,s){return(await o.executeCommand(`shell ${n}`,{timeoutMs:Zs,maxBuffer:Xs,noRetry:!0,signal:s})).stdout}function aa(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)),g=Number(a.slice(d+1,c));if(!Number.isFinite(p)||!Number.isFinite(g))return null;return{path:m,absolutePath:u,byteCount:p,modifiedSeconds:g}}).filter((a)=>a!==null)}function da(o,n,s,a){return o.map((d)=>{let c=at(d.path),u=n.get(d.absolutePath);return{path:d.path,name:ge.basename(d.path),byteCount:d.byteCount,...c?{mimeType:c}:{},...u?{sha256:u}:{sha256Unavailable:ta},lastModified:new Date(d.modifiedSeconds*1000).toISOString(),resourceUri:te({deviceId:s,namespace:a,path:d.path})}})}function ca(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 la(o,n,s,{namespace:a,directory:d,cache:c}){let u=new Map,m=(g)=>({deviceId:s.deviceId,namespace:a,path:g.absolutePath,byteCount:g.byteCount,modifiedSeconds:g.modifiedSeconds}),p=n.filter((g)=>{let h=c.get(m(g));if(h)u.set(g.absolutePath,h);return!h});for(let g of ua(p)){let h;try{h=await st(o,na(g.map((b)=>b.absolutePath)),s.signal)}catch(b){e.warn(`[SharedStorageRead] hash files in ${d} failed: ${r(b)}`,b);continue}let R=ca(h);for(let b of g){let C=R.get(b.absolutePath);if(!C)continue;u.set(b.absolutePath,C),c.set(m(b),C)}}return u}function ua(o){let n=[],s=[],a=10;for(let d of o){let c=S(d.absolutePath).length+(s.length>0?1:0);if(s.length>0&&a+c>ea)n.push(s),s=[],a=10;s.push(d),a+=c}if(s.length>0)n.push(s);return n}function pa(o){try{let n=new Qs("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 ma={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 at(o){let n=ge.basename(o),s=n.lastIndexOf(".");if(s<=0)return;return ma[n.slice(s+1).toLowerCase()]}function yr(o){return`Device not found or not booted: ${o}`}function ga(o){return`Bounded user_files reads require Android or an iOS Simulator; physical ${o} devices are unsupported.`}function fa(o){return`Downloads namespace directory does not exist: ${o}`}function Sa(o){return`File does not exist in the Downloads namespace: ${o}`}var ya=f({itemClass:ee("genericPassword"),service:y(),account:y(),accessGroup:y()}),va=f({schemaVersion:ee(1),capability:ee("storage.keychain"),inspection:ee("unavailable"),deletion:P(["enabled","disabled","unknown"]),reason:P(["DISABLED","NO_ALLOWLISTED_SCOPES","SDK_TOO_OLD","BRIDGE_UNAVAILABLE"]).nullable().optional(),deletionScopes:z(ya)}),ha=f({kind:P(["user_defaults_suite","core_data"]),identifier:y(),sharing:P(["app_private","app_group"]),appGroup:y().nullable().optional(),coordination:P(["single_process","uncoordinated","host_coordinated"]),query:P(["supported","unsupported"]),reason:y().nullable().optional()});function br(o){return{schemaVersion:1,capability:"storage.keychain",inspection:"unavailable",deletion:"unknown",reason:o,deletionScopes:[]}}function Tr(o){let n=typeof o==="object"&&o!==null?o:{},s=va.safeParse(n.keychain),a=Array.isArray(n.stores)?n.stores:[];return{keychain:s.success?s.data:br("SDK_TOO_OLD"),stores:a.flatMap((d)=>{let c=ha.safeParse(d);return c.success?[c.data]:[]})}}function dt(){return{keychain:br("BRIDGE_UNAVAILABLE"),stores:[]}}var we=1;function I(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 Ra(o,n){return{operation:o,state:"unavailable",reason:n}}function O(o,n){return{label:o,satisfied:n}}var Er="AutoMobile SDK embedded with storage inspection",Ir="active CtrlProxy runner session",Cr="debuggable app build",G="active Android user/profile",ba="managed iOS Files fixture app installed",Ta="opt-in iOS app file-access integration";function Ca(o){let n=[O(Er,o.embeddedSdk),O(Ir,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)=>I(a,void 0,n)),...Pr(o,"user_defaults_suite")}}function Pr(o,n){if(o.platform!=="ios"||!o.iosStorage)return{};return{stores:o.iosStorage.stores.filter((s)=>s.kind===n)}}function Ea(o){let n=[O(Er,o.embeddedSdk),O(Ir,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)=>I(s,void 0,n)),...Pr(o,"core_data")}}function Ia(o){let n=["list","read","write"],s=(a)=>{if(o.platform==="ios"){if(o.deviceType==="simulator")return I(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:[Ta]};return I(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 I(a,void 0,[]);if(o.debuggableBuild===!1)return{operation:a,state:"partial",reason:"Private containers require a debuggable app build; externalFiles remains available.",prerequisites:[Cr]};return I(a,void 0,[O(Cr,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 Pa(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(ba,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?I("list",n,[]):I("list",void 0,[]),n?I("read",n,[]):I("read",void 0,[]),I("write",n,s,"Stages files in the managed iOS Files fixture app; picker visibility requires separate verification."),I("namespace_reset",n,s,"Resets only Documents/automobile/<namespace> in the managed fixture app."),I("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:[I("list",void 0,[O(G,o.activeUserProfile)],'Exposed by the "Downloads Namespace Files" MCP resource template.'),I("read",void 0,[O(G,o.activeUserProfile)],'Exposed by the "Downloads Namespace File" MCP resource template.'),I("write",void 0,[O(G,o.activeUserProfile)]),I("namespace_reset",void 0,[O(G,o.activeUserProfile)],"Resets only the declared user_files namespace."),I("media_indexing",void 0,[O(G,o.activeUserProfile)],"Requested with putAppFile target.indexMedia.")]}}function Da(o){let n=I("write",void 0,[O(G,o.activeUserProfile)]),s=o.platform==="ios"?I("media_indexing","iOS has no MediaScanner-style host-triggered indexing equivalent.",[]):I("media_indexing",void 0,[O(G,o.activeUserProfile)],"Verified as part of Android putAppFile media_library writes."),a=I("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"?Ra(d,De):I(d,void 0,[O(G,o.activeUserProfile)],"Canonical media_library resources read only Download/automobile-media.")),o.platform==="ios"?a:n,s]}}function Aa(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)"]},I("write","Keystore aliases are not written; scoped alias deletion is exposed by resetKeychain with a declared scope or alias.",[]),I("namespace_reset","Package-data reset is explicit and separate; resetKeychain deletes only aliases declared in a scope.",[])]};return xa(o)}function xa(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"]},I("write","Keychain writes are not an AutoMobile storage feature; exact allowlisted deletion uses deleteKeychainItem.",[]),I("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 wa(){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 Na(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 ct(o,n){let a=(o.providerCoverage??rJ()).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=Na(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:[ct(o,Ia(o)),ct(o,Pa(o)),ct(o,Da(o)),Ca(o),Ea(o),Aa(o)],extensionPoints:wa()}}function Dr(o,n,s){return o.domains.find((a)=>a.domain===n)?.operations.find((a)=>a.operation===s)}var ka="automobile:devices/{deviceId}/storage/capabilities{?appId}";async function Ma(o){return Ps(o,"StorageCapabilityResources")}function wr(o){if(o.platform==="ios")return W({deviceId:o.deviceId});return o.deviceId.startsWith("emulator-")?"emulator":"physical"}function lt(o,n,s,a){return{platform:Q(o.platform,"Storage capability resolution"),deviceType:wr(o),embeddedSdk:M.isEmbeddedSdkEnabled(),sessionActive:!0,activeUserProfile:s,...a===void 0?{}:{debuggableBuild:a},appId:n}}async function _a(o,n){let s;if(o.platform==="android")try{let a=(n.adbFactory??v).create(o);await(n.createUserResolver??((c)=>new At(c)))(a).resolve({currentUser:!0}),s=!0}catch(a){if(a instanceof dm)e.debug(`[StorageCapabilityResources] No selectable Android profile: ${a}`),s=!1;else e.warn(`[StorageCapabilityResources] Active Android profile probe failed: ${a}`)}return s}async function Oa(o,n,s){if(o.platform!=="android"||wr(o)!=="physical"||!n)return;try{let a=(s.adbFactory??v).create(o);return await(s.probeDebuggableBuild??nr)(a,n)}catch(a){e.warn("[StorageCapabilityResources] Debuggable Android build probe failed",a);return}}async function Ua(o,n,s){try{return await(s.createKeystoreDiscovery?.(o)??k.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 Nr(o){return{discoverIosStorage:async(n)=>Tr(await o.getStorageCapabilitiesForIos(n))}}async function Fa(o,n,s){if(!s.createIosStorageDiscovery)return dt();try{return await s.createIosStorageDiscovery(o).discoverIosStorage(n)}catch(a){return e.warn("[StorageCapabilityResources] iOS storage discovery unavailable",a),dt()}}function La(o,n){let s=`automobile:devices/${o}/storage/capabilities`;return n?`${s}?appId=${Qe(n)}`:s}function Ba(o){return o.appFileCoverage?o.appFileCoverage.describeProviderCoverage():MO().describeProviderCoverage?.()??PU()}function xr(o,n,s="user_files"){return o.sharedStorageReadCoverage?o.sharedStorageReadCoverage(n,s):YY().describeReadCoverage?.(n,s)}async function $a(o,n={}){let{deviceId:s}=o,a=o.appId?o.appId:void 0,d=La(s,a);try{let c=await Ma(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([_a(c,n),Oa(c,a,n)]),p=lt(c,a,u,m);if(p.providerCoverage=Ba(n),p.sharedStorageReadCoverage=xr(n,c.platform),p.mediaLibraryReadCoverage=xr(n,c.platform,"media_library"),c.platform==="android"&&a&&p.embeddedSdk)p.keystore=await Ua(c,a,n);if(c.platform==="ios"&&a&&p.embeddedSdk)p.iosStorage=await Fa(c,a,n);let g=Ne(p);return{uri:d,mimeType:"application/json",text:JSON.stringify({deviceId:s,...g},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 Mr(o={}){H.registerTemplate(ka,"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)=>$a(n,o)}),e.info("[StorageCapabilityResources] Registered storage capability resources")}var qa=1,ja="automobile:devices/{deviceId}/sdk/capabilities{?appId}";function Ha(o,n){let s=`automobile:devices/${o}/sdk/capabilities`;return n?`${s}?appId=${Qe(n)}`:s}function fe(o,n,s){return{uri:o,mimeType:"application/json",text:JSON.stringify({schemaVersion:qa,deviceId:s,...n},null,2)}}async function Ka(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 Va(o,n,s,a){try{return await(a.createReader?.(o)??k.getInstance(o)).getSdkCapabilities(n,s)}catch(d){return e.warn("[SdkCapabilityResources] SDK capability read failed",d),cu("CTRLPROXY_UNREACHABLE")}}async function Ja(o,n={}){let{deviceId:s}=o,a=o.appId?o.appId:void 0,d=Ha(s,a);try{let c=await Ps(s,"SdkCapabilityResources");if(!c)return fe(d,{error:`Device not found or not booted: ${s}`});if(c.platform!=="android")return fe(d,{appId:a??null,result:cu("UNSUPPORTED_PLATFORM")},s);let u=await Ka(c,n),m=a??u?.packageName;if(!m)return fe(d,{appId:null,result:cu("NO_APP")},s);let p=u?.packageName===m?u.userId:void 0;return fe(d,{appId:m,result:await Va(c,m,p,n)},s)}catch(c){return e.error(`[SdkCapabilityResources] Failed to read SDK capabilities: ${c}`),fe(d,{error:`Failed to read SDK capabilities: ${c}`},s)}}function _r(o={}){H.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)=>Ja(n,o)}),e.info("[SdkCapabilityResources] Registered SDK capability resources")}var Or={STORES:"automobile:devices/{deviceId}/storage/{packageName}/datastore/{adapterName}/stores",ENTRIES:"automobile:devices/{deviceId}/storage/{packageName}/datastore/{adapterName}/{storeName}/entries"},J="datastore",za={listDataStores(o,n,s){return k.getInstance(o,v).listDataStores(n,s)},getDataStore(o,n,s,a){return k.getInstance(o,v).getDataStore(n,s,a)}},Me={stores:new Map,entries:new Map};function Ur(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 Wa(o){return Ps(o,"DataStoreResources")}function Ya(o,n,s){return`automobile:devices/${o}/storage/${Qe(n)}/datastore/${Qe(s)}/stores`}function Qa(o,n,s,a){return`automobile:devices/${o}/storage/${Qe(n)}/datastore/${Qe(s)}/${Qe(a)}/entries`}function re(o,n){return{uri:o,mimeType:"application/json",text:JSON.stringify(n,null,2)}}function Lr(o){return re(Si(o)??"",{status:"unavailable",kind:J,deviceId:o.deviceId,reason:"Malformed resource URI: a path segment is not valid percent-encoding."})}function _e(o,n,s){let a=Ne(lt(o,n));return Dr(a,"key_value",s)}async function Br(o,n,s,a){let d=await Wa(o);if(!d)return{diagnostic:{status:"unavailable",kind:J,deviceId:o,packageName:n,adapterName:s,reason:`Device not found or not booted: ${o}`}};if(d.platform!=="android")return{diagnostic:{status:"unsupported",kind:J,deviceId:o,packageName:n,adapterName:s,platform:d.platform,reason:`DataStore is Android-only; not available on ${d.platform}.`,capability:_e(d,n,a)}};if(!M.isEmbeddedSdkEnabled()){let c=_e(d,n,a);return{diagnostic:{status:"disabled",kind:J,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 Xa(o,n){let s=o.deviceId,a=Co(o.packageName),d=Co(o.adapterName);if(a===null||d===null)return Lr(o);let c=Ya(s,a,d),u=await Br(s,a,d,"list");if("diagnostic"in u)return re(c,u.diagnostic);let m=u.device;try{let p=await n.listDataStores(m,a,d),g=new Date().toISOString(),h=Ur(p),R=`${s}:${a}:${d}`,b=Me.stores.get(R);if(b&&b.hash!==h)H.notifyResourceUpdated(c);return Me.stores.set(R,{hash:h}),re(c,{status:"available",kind:J,deviceId:s,packageName:a,adapterName:d,platform:m.platform,stores:p,totalCount:p.length,lastUpdated:g,capability:_e(m,a,"list")})}catch(p){e.warn(`[DataStoreResources] Failed to list data stores: ${p}`);let g=Ug(p);return re(c,{status:"unavailable",kind:J,deviceId:s,packageName:a,adapterName:d,platform:m.platform,reason:g?DO(a):`Failed to list data stores (adapter or app integration may be absent): ${p}`})}}async function Za(o,n){let s=o.deviceId,a=Co(o.packageName),d=Co(o.adapterName),c=Co(o.storeName);if(a===null||d===null||c===null)return Lr(o);let u=Qa(s,a,d,c),m=await Br(s,a,d,"read");if("diagnostic"in m)return re(u,{...m.diagnostic,name:c});let p=m.device;try{let g=await n.getDataStore(p,a,d,c),h=new Date().toISOString(),R=Ur(g),b=`${s}:${a}:${d}:${c}`,C=Me.entries.get(b);if(C&&C.hash!==R)H.notifyResourceUpdated(u);return Me.entries.set(b,{hash:R}),re(u,{status:"available",kind:J,deviceId:s,packageName:a,adapterName:d,name:c,platform:p.platform,entries:g,totalCount:g.length,lastUpdated:h,capability:_e(p,a,"read")})}catch(g){e.warn(`[DataStoreResources] Failed to get data store entries: ${g}`);let h=Ug(g);return re(u,{status:"unavailable",kind:J,deviceId:s,packageName:a,adapterName:d,name:c,platform:p.platform,reason:h?DO(a):`Failed to read data store (adapter or app integration may be absent): ${g}`})}}function $r(o=za){H.registerTemplate(Or.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)=>Xa(n,o)}),H.registerTemplate(Or.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)=>Za(n,o)}),e.info("[DataStoreResources] Registered DataStore resources")}async function ed(){let{getAppFileService:o}=await import("./chunk-cfsdfqnm.js");return o()}function td(o,n=Ru){return async(s)=>{let a=q2(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 od(o,n=Ru){return async(s)=>{let a=q2(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 jr(o){let n=o?async()=>o:ed;for(let[s,a]of[[v9,b9],[y9,Ru]])H.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:td(n,a)}),H.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:od(n,a)})}var rd={resolveActiveSession:Ip,service:z$};function id(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 nd(o){return async(n,s)=>{let{sessionUuid:a,appId:d,...c}=n,u=id(a),m=Si(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 g;try{g=w9(d,c)}catch(R){return Oe(m,"INVALID_REQUEST",r(R))}let h=R9(u,g);try{let R=await o.service().collect({sessionUuid:u,device:p.device,request:g,signal:s.signal});return{uri:h,mimeType:"application/json",text:JSON.stringify(R,null,2)}}catch(R){return e.warn(`[SessionLogResources] collection failed for session ${u}: ${r(R)}`,R),Oe(h,"COLLECTION_FAILED",r(R))}}}function Hr(o={}){let n={...rd,...o};H.registerTemplateWithReadContext(S9,"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:nd(n)})}var ad="automobile:device-session/{sessionUuid}/apps/{appId}/crash-reports/{reportId}{?maxBytes}",dd=262144,cd=/^[A-Za-z0-9][A-Za-z0-9._-]{0,127}$/,ld={resolveActiveSession:Ip,readerFor:(o)=>T8(o,{adb:v.create(o),fileSystem:pM})};function ut(o){try{return decodeURIComponent(o)}catch(n){return e.debug(`[CrashReportResources] undecodable segment ${o}: ${n}`),o}}function Kr(o,n){return{uri:o,mimeType:"application/json",text:JSON.stringify(n,null,2)}}function ie(o,n,s){return Kr(o,{code:n,error:s})}function ud(o){if(o===void 0||o==="")return dd;let n=Number(o);if(!Number.isSafeInteger(n)||n<1||n>vb)return`maxBytes must be an integer from 1 to ${vb}.`;return n}function pd(o,n){return o.sessionUuid===n||o.ownsSession?.(n)===!0}function md(o){return async(n,s)=>{let{sessionUuid:a,appId:d,reportId:c}=n,u=ut(a),m=Si(n)??`automobile:device-session/${a}/apps/${d}/crash-reports/${c}`;if(!pd(s,u))return ie(m,"SESSION_NOT_BOUND","This resource can only be read by its bound device session.");let p=o.resolveActiveSession(u);if(!p)return ie(m,"SESSION_NOT_ACTIVE",`No active device session found for sessionUuid ${u}.`);let g=ut(c),h=ud(n.maxBytes);if(typeof h==="string"||!cd.test(g))return ie(m,"INVALID_REQUEST",typeof h==="string"?h:"reportId is not a valid crash report id.");let R;try{R=W$(ut(d))}catch(b){return ie(m,"INVALID_REQUEST",r(b))}return gd(o,{device:p.device,uri:m,appId:R,reportId:g,maxBytes:h,context:s})}}async function gd(o,n){let{device:s,uri:a,appId:d,reportId:c,maxBytes:u,context:m}=n,p=o.readerFor(s);if(!p)return ie(a,"UNSUPPORTED",`Crash reports are not available for ${s.deviceId}: physical iOS retrieval is not implemented yet.`);try{let g=await p.read(c,m.signal);if(!g||g.report.appId!==d)return ie(a,"NOT_FOUND",`No crash report ${c} for ${d} on this device.`);let h=Buffer.from(g.text,"utf8"),R=h.byteLength>u?h.subarray(0,u):h;return Kr(a,{reportId:g.report.id,source:g.report.source,appId:d,reportPath:g.report.reportPath,byteCount:h.byteLength,truncated:R.byteLength<h.byteLength,text:R.toString("utf8")})}catch(g){return m.signal?.throwIfAborted(),e.warn(`[CrashReportResources] read ${c} failed: ${r(g)}`,g),ie(a,"READ_FAILED",r(g))}}function Vr(o={}){let n={...ld,...o};H.registerTemplateWithReadContext(ad,"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:md(n)})}async function fd(){let{getSharedStorageReadService:o}=await import("./chunk-0eb8576f.js");return o()}function yd(o,n=te,s="user_files"){return async(a)=>{let d=it(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 vd(o,n=te,s="user_files"){return async(a)=>{let d=it(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 Gr(o){let n=o?async()=>o:fd;for(let[s,a,d]of[[cr,le,"user_files"],[lr,xe,"media_library"],[dr,te,"user_files"]])H.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:yd(n,a,d)}),H.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:vd(n,a,d)})}var hd="automobile:config/feature-flags/{key}";function Jr(){let o=new Set(WS.map((n)=>n.key));H.registerTemplate(hd,"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 bd,win32 as Cd}from"path";var pt="bundletool";async function zr(o={},n={locator:new RO,hostExecutor:new ne}){let s=await n.locator.locate();if(!s.found)return{name:pt,status:"warn",message:`bundletool not found (${s.reason}); installApp cannot install .aab or .apks artifacts`,recommendation:tE.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:pt,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:pt,status:"fail",message:`bundletool at ${a.location} did not run: ${r(d)}`,recommendation:tE.join("; ")}}}var mt="automobile:host/toolchain";function Ed(o){let n=o.iosDependencies??ln();return{now:()=>new Date,timer:i,checkAdbInstallation:(s)=>dU(void 0,s),checkAdbVersion:(s)=>lU(void 0,s),checkEmulator:(s)=>nK(s),checkAndroidCommandLineTools:(s)=>cU(s),checkBundletool:(s)=>zr(s),checkXcodeInstallation:()=>uU(void 0,n),checkXcodeCommandLineTools:()=>pU(void 0,n),checkXcrunAvailable:()=>mU(n),checkSimctlAvailable:()=>fU(n),probeCoreDeviceVersion:(s)=>iK(n,s)}}function Wr(o,n){let s=[n];if(typeof o==="string"&&!Yr(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?Wr(n.value,n.message):void 0;return{name:o,available:!0,...d?{version:d}:{},...s.location&&a!==void 0&&Yr(a)?{location:a}:{}}}function Yr(o){return bd(o)||Cd.isAbsolute(o)}async function V(o,n,s){let a=new AbortController,d;try{return await l(Promise.resolve().then(()=>n({signal:a.signal,timeoutMs:Hi})),{timer:s,timeoutMs:Hi,label:o,timeoutError:()=>d=Error(`Probe timed out after ${Hi}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 Id(o,n){let s=new AbortController,a;try{return await l(Promise.resolve().then(()=>o({signal:s.signal,timeoutMs:Hi})),{timer:n,timeoutMs:Hi,label:"CoreDevice",timeoutError:()=>a=Error(`Probe timed out after ${Hi}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 Pd(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:ak(aR),simulatorBootState:o.simulatorBootState??{status:"unavailable",reason:"simulator state unavailable"},capabilities:o.capabilities??{status:"not probed",entries:[]}}}}function Dd(o){try{return o().toISOString()}catch(n){return e.warn(`[HostToolchainResources] clock failed: ${r(n)}`,n),"1970-01-01T00:00:00.000Z"}}function Ad(o={}){let n={...Ed(o),...o},s=n.timer??i;return async()=>{let a=Dd(n.now);try{let[d,c,u,m,p,g,h,R,b,C]=await Promise.all([V("adb installation",n.checkAdbInstallation,s),V("adb version",n.checkAdbVersion,s),V("emulator",n.checkEmulator,s),V("Android command line tools",n.checkAndroidCommandLineTools,s),V("bundletool",n.checkBundletool,s),V("xcodebuild",n.checkXcodeInstallation,s),V("xcode-select",n.checkXcodeCommandLineTools,s),V("xcrun",n.checkXcrunAvailable,s),V("simctl",n.checkSimctlAvailable,s),Id(n.probeCoreDeviceVersion,s)]),T=Y("adb",d,{location:!0});if(T.available&&c.status==="pass"){let X=Wr(c.value,c.message);if(X)T.version=X}else if(T.available)T.available=!1,T.error=c.message;let D=Y("sdkmanager",m,{version:!0,location:!0}),x={lastUpdated:a,entries:[T,Y("emulator",u,{location:!0}),D,{...D,name:"avdmanager"},Y("bundletool",p,{version:!0,location:!0}),Y("xcodebuild",g,{version:!0}),Y("xcode-select",h,{location:!0}),Y("xcrun",R),Y("simctl",b),Pd(C)]};return{uri:mt,mimeType:"application/json",text:JSON.stringify(x)}}catch(d){return e.warn(`[HostToolchainResources] resource read failed: ${r(d)}`,d),{uri:mt,mimeType:"application/json",text:JSON.stringify({lastUpdated:a,entries:[]})}}}}function Qr(o={}){H.register(mt,"Host Toolchain",{description:"Read-only diagnostic status for Android and Apple host tooling.",mimeType:"application/json",handler:Ad(o)})}var gt="automobile:tools";function xd(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??Fd()};return async()=>{let s=xd(n.now);try{let a=await Promise.all(N.getAllTools().filter((c)=>N.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:gt,mimeType:"application/json",text:JSON.stringify({lastUpdated:s,tools:a})}}catch(a){return e.warn(`[ToolCatalogResource] resource read failed: ${r(a)}`,a),{uri:gt,mimeType:"application/json",text:JSON.stringify({lastUpdated:s,tools:[]})}}}}function Xr(){H.register(gt,"Tool Catalog",{description:"Every registered AutoMobile tool with its default enabled/gated state, discoverable without acquiring a device.",mimeType:"application/json",handler:Nd()})}var A={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"},ti=["host","method","statusCode","since","limit","deviceId","bucketSeconds"],kd=`${A.TRAFFIC}{?${ti.join(",")}}`,Md=new Set(ti);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 _d(o){let n=o.requestBody!==null&&o.requestBodySize>RW,s=o.responseBody!==null&&o.responseBodySize>RW;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 Od(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 Zr=1000;function Ud(o,n){if(o.length===0)return[];let s=n*1000,a=o.map((R)=>R.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)>Zr)u=m-Zr*s;let g=new Map;for(let R=u;R<m;R+=s)g.set(R,[]);for(let R of o){let b=Math.floor(R.timestamp/s)*s,C=g.get(b);if(C)C.push(R)}let h=[];for(let[R,b]of g){let C=b.map((T)=>T.durationMs).sort((T,D)=>T-D);h.push({bucketStart:R,bucketEnd:R+s,requests:b.length,errors:b.filter(Kh).length,avgDurationMs:C.length>0?Math.round(C.reduce((T,D)=>T+D,0)/C.length):0,p50:Math.round(ri(C,50)),p95:Math.round(ri(C,95))})}return h.sort((R,b)=>R.bucketStart-b.bucketStart)}function Ld(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++,Kh(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(ri(d,50)),n[a].p95=Math.round(ri(d,95))}return n}var Bd={getNetworkEvents:DT,getNetworkEventById:Zee};async function ei(o,n){try{let s=Od(o),a=await n.getNetworkEvents(s);if(s.bucketSeconds){let c=Ud(a,s.bucketSeconds);return{uri:A.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:A.TRAFFIC,mimeType:"application/json",text:JSON.stringify(d,null,2)}}catch(s){return e.error(`[NetworkResources] Failed to query traffic: ${s}`),{uri:A.TRAFFIC,mimeType:"application/json",text:JSON.stringify({error:`Failed to query traffic: ${s}`})}}}function $d(o){H.register(A.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:A.LIVE,mimeType:"application/json",text:JSON.stringify({events:n.map(Ue)},null,2)}}}),H.register(A.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:A.ERRORS,mimeType:"application/json",text:JSON.stringify({errors:n.map(Ue)},null,2)}}}),H.register(A.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(Kh).length,d=s>0?a/s:0,c=n.map((h)=>h.durationMs).filter((h)=>h>0).sort((h,R)=>h-R),u=c.length>0?c.reduce((h,R)=>h+R,0)/c.length:0,m=Math.round(ri(c,50)),p=Math.round(ri(c,95)),g=Ld(n);return{uri:A.STATS,mimeType:"application/json",text:JSON.stringify({totalRequests:s,errorCount:a,errorRate:d,avgDurationMs:u,p50:m,p95:p,byHost:g},null,2)}}})}function oi(o=Bd){H.register(A.TRAFFIC,"Network Traffic",{description:"Query captured network traffic. Use query parameters to filter by host, method, statusCode, since, limit, deviceId.",mimeType:"application/json",handler:()=>ei({},o)}),H.registerTemplate(kd,"Network Traffic",{description:"Query captured network traffic with optional filters.",mimeType:"application/json",handler:async(n)=>ei(n,o)}),H.registerTemplate(A.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(_d(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}`})}}}}),$d(o),H.register(A.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=rn.getInstance().slowThresholdMs,d=(await o.getNetworkEvents({limit:200})).filter((c)=>c.durationMs>=s);return{uri:A.SLOW,mimeType:"application/json",text:JSON.stringify({thresholdMs:s,events:d.slice(0,50).map(Ue),count:d.length},null,2)}}}),H.register(A.STATE,"Network State",{description:"Current network capture and simulation state (capturing, error simulation, notification config).",mimeType:"application/json",handler:async()=>{let n=rn.getInstance();return{uri:A.STATE,mimeType:"application/json",text:JSON.stringify(n.getSnapshot(),null,2)}}}),H.register(A.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=rn.getInstance().getAllMocks();return{uri:A.MOCKS,mimeType:"application/json",text:JSON.stringify({count:s.length,mocks:s},null,2)}}}),H.register(A.CONNECTIVITY,"Network Connectivity",{description:"Current device network connectivity state. Subscribe to receive notifications on connectivity changes.",mimeType:"application/json",handler:async()=>({uri:A.CONNECTIVITY,mimeType:"application/json",text:JSON.stringify({type:"unknown",details:"Connectivity status requires active device connection"})})}),e.info("[NetworkResources] Registered network resources")}var qd=3;function ft(o){return typeof o==="object"&&o!==null&&!Array.isArray(o)}function Hd(o){if(!ft(o)||typeof o.id!=="string"||typeof o.deviceId!=="string")return!1;return typeof o.observedAtMs==="number"&&typeof o.updatedAtMs==="number"&&typeof o.detectionPath==="string"&&ft(o.recovery)&&Array.isArray(o.recovery.attempts)&&ft(o.recovery.policy)}function St(o){try{let n=JSON.parse(o);if(!Hd(n))return;if(n.outputUnavailable!=="adopted")delete n.outputUnavailable;return n}catch(n){e.warn(`[EmulatorLossIncidentRepository] Invalid stored incident: ${n}`,n);return}}class lO{database;timer;idGenerator;maxRetained;constructor({db:o,timer:n=i,idGenerator:s=L,maxRetained:a=A6}={}){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?St(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=St(s.incident_json);return a?[a]:[]})}getDb(){return this.database??ke()}async update(o,n){for(let s=0;s<qd;s++){let a=await this.getDb().selectFrom("emulator_loss_incidents").select(["incident_json","revision"]).where("incident_id","=",o).executeTakeFirst();if(!a)return;let d=St(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 Kd(o={}){try{let n=await(o.reader??new lO).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 ii(o={}){H.register(Fe.ARCHIVE,"Android Emulator Loss Incidents",{description:"Bounded diagnostics and recovery outcomes for unexpectedly lost Android emulators.",mimeType:"application/json",handler:()=>Kd(o)})}class yt{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),kr.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),kr.emit("tools")}getPrototypeFullSchema(o){return this.prototypeFullSchema.get(o)}}class vt{db;constructor({db:o}={}){this.db=o??null}getDb(){return this.db??ke()}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 ni{repository;memory=new yt;constructor(o){this.repository=o}record(o){if(this.memory.record(o),o.trim().length>0)Wt().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 I$=new ni(new vt);var ht;function doe(o){iJ(()=>et.getInstance()),sJ(()=>et.getInstance()),hQ(()=>et.getInstance()),hb();let n=N.removalEpochForRegistration;if(ht?.daemonMode!==o||ht.removalEpoch!==n){let s=(a)=>_.getInstance(a);NO({daemonMode:o,iosRunnerLocation:s,iosAccessibilityFocus:s,keystoreReset:(a)=>k.getInstance(a)}),ht={daemonMode:o,removalEpoch:N.removalEpochForRegistration}}RZ(new Set(N.getConfigurableToolNames()))}var Rt;function Vd(o){if(Rt?.iosDependencies===o&&Rt.clearEpoch===H.clearEpochForRegistration)return;Gd(o),Rt={iosDependencies:o,clearEpoch:H.clearEpochForRegistration}}function Gd(o){e9(),u8(),c8(),p9(),m9(),d9(),mo(()=>wO()),Ao(),ko(),_o(),jo(),Vo(),Jo(),zo(),tJ(),Zo(),ir(),Mr({createIosStorageDiscovery:(n)=>Nr(_.getInstance(n))}),_r(),$r(),jr(),Hr(),Vr(),Gr(),Jr(),eJ(),Qr({iosDependencies:o}),Xr(),oi(),ii()}function si(o){return o.requestMcpSessionId??o.sessionContext?.sessionId}function Jd(o){if(o.taskOwnerKey?.trim())return o.taskOwnerKey;let n=o.stateless?o.requestMcpSessionId:si(o);return n?.trim()?n:void 0}function zd(o){return o.taskManager??(o.daemonMode?ao():void 0)}function Wd(o,n,s){let a=zd(n),d=Jd(n);if(a)ZY(o,{taskManager:a,ownerKey:d});return lo({execute:s,taskManager:a,ownerKey:d,eligibleTools:n.taskEligibleTools??co,...n.taskLeaseKeepalive&&{keepalive:n.taskLeaseKeepalive}})}function Yd(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 Qd(o){if(o.deviceReadiness)N.setDeviceReadiness(o.deviceReadiness);else if(!o.daemonMode&&!N.hasDeviceReadiness())N.setDeviceReadiness(Ic.createInstance())}function Xd(o){return{resources:{subscribe:!0,listChanged:!0},tools:o==="modern"?{listChanged:!0}:{},prompts:{},...o==="modern"&&{extensions:{[Ey]:{}}}}}function Zd(o,n){if(n.era==="modern")return{era:"modern",deviceChoiceRequestState:n.deviceChoiceRequestState};return o?{}:{ambiguousDeviceElicitation:n.ambiguousDeviceElicitation??{}}}function ec(o){return o.era==="modern"?{verify:(o.deviceChoiceRequestState??C$).verify}:void 0}function tc(o){l9(o),u9((n)=>k.getInstance(n))}var E2=(o={})=>{N.setMutationRecording(E1(w,{keyboardProfilesFor:(T)=>k.getInstance(T)})),Qd(o);let n=Yd(o),s=new qe(o.sessionContext?.initialSessionToolBinding,o.sessionContext?.initialToolSelectionProfile,void 0,{initialReleasedSessionUuid:o.sessionContext?.initialReleasedSession,namesLiveSessionOfBoundPlan:Te,store:n.store}),a=si(o),d=o.planExecutionLock??Ct(),c=o.daemonMode??!1,u=o.toolSelectionProfileRegistry??I$;tc(sr.getInstance()),sr.getInstance().initialize().catch((T)=>{e.warn(`Failed to initialize feature flags: ${T}`)}),Et.startPhase("toolRegistration"),doe(c),Et.endPhase("toolRegistration");let m=o.iosDependencies??ln({coreDeviceProbe:Wv()});Et.startPhase("resourceRegistration"),Vd(m),Et.endPhase("resourceRegistration"),Et.startPhase("sdkInitialization");let p=uO({name:"AutoMobile",version:kn()},Xd(o.era),{cacheHints:o.era==="modern"?Tt:void 0,requestState:ec(o)});Et.endPhase("sdkInitialization"),Et.startPhase("serverHandlerRegistration");let g={ephemeral:o.stateless===!0};if(N.registerWithServer(p,g),sr.getInstance().setToolListChangedNotifier({notifyToolListChanged:()=>N.notifyToolListChanged()}),iM(p),H.registerWithServer(p,(T)=>({sessionUuid:s.effectiveSessionUuid(a),ownsSession:(D)=>s.ownsSession(a,D),releasedSessionUuid:s.releasedResourceSessionUuid(a),signal:T,clientSupportsApps:n1(p.server.getClientCapabilities())}),g),g.ephemeral){let T=p.close.bind(p);p.close=async()=>{try{await T()}finally{s.dispose(),N.untrackServer(p),H.untrackServer(p)}}}let h=p.server.onclose;p.server.onclose=()=>{if(s.dispose(),n.owned)n.store.dispose();if(!c)eM(o.sessionContext?.sessionId);h?.()};let R=qt({options:o,bindingKey:a,sessionToolBinding:s,toolSelectionProfileRegistry:u});p.server.setRequestHandler("tools/list",async()=>await R()),p.server.setRequestHandler("ping",async()=>({})),p.server.setRequestHandler("prompts/list",async()=>({prompts:[]}));let b=(T)=>{if(c&&T.params&&T.params.arguments)T.params.arguments=JQ(T.params.arguments);e.info("Request: ",{...T,params:{...T.params,arguments:Wf(T.params.name,ci(T.params.arguments))}})},C=no({options:o,daemonMode:c,serverBindingKey:a,sessionToolBinding:s,planExecutionLock:d,toolSelectionProfileRegistry:u,listSessionTools:R});return XY(JY(qr.getInstance())),mO(p,{progressFailureMessage:"Failed to send progress notification",prepare:b,execute:Wd(p,o,C)},Zd(c,o)),Et.endPhase("serverHandlerRegistration"),p};function _$(){return H.refreshBeforeList()}
4
+ export{Wk,WY,zY,jY,KY,GY,Mg,A$,T$,k$,zk,E$,jk,YY,lO,I$,doe,E2,_$};
5
+
6
+ //# debugId=A6D03DA2D6EDC0E264756E2164756E21