@testmuai/kane-cli 0.8.9 → 0.8.11

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 (234) hide show
  1. package/dist/{ChatSurface-HXCRGPSE.js → ChatSurface-YFJDAXOG.js} +1 -1
  2. package/dist/{ChromeProfilePicker-PJS4NGEC.js → ChromeProfilePicker-PUCZN6WU.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-Q56VKWKM.js → CliFeedbackPrompt-JAIB5MHS.js} +1 -1
  4. package/dist/{CliUploadProgress-TMVTKNOT.js → CliUploadProgress-53LQMQJD.js} +1 -1
  5. package/dist/{ConfigView-Y7ZVYT2C.js → ConfigView-7HFP4OXS.js} +1 -1
  6. package/dist/EvidenceViewOffer-2T2ZGHIF.js +2 -0
  7. package/dist/FolderPicker-LTQW4YNR.js +2 -0
  8. package/dist/{InfoBox-IDJYGPXF.js → InfoBox-62YG3YNQ.js} +1 -1
  9. package/dist/{LinksBox-5XNJ3UJJ.js → LinksBox-6NS3GHWO.js} +1 -1
  10. package/dist/{ProfilesView-U73QBC5W.js → ProfilesView-HIKK2HPC.js} +1 -1
  11. package/dist/{ProjectPicker-KCE2VZCO.js → ProjectPicker-2CJMO5TD.js} +1 -1
  12. package/dist/{SaveSessionPrompt-3FHLIRLS.js → SaveSessionPrompt-4DTPZSXD.js} +1 -1
  13. package/dist/SingleShotApp-KXZF5ZJM.js +2 -0
  14. package/dist/{SummaryBox-GKHU4C4H.js → SummaryBox-A6LKKQXJ.js} +1 -1
  15. package/dist/TestMdRunView-6X6W5YAP.js +2 -0
  16. package/dist/{TestrunEvidenceTable-INNZCGTM.js → TestrunEvidenceTable-7SCCTZPH.js} +1 -1
  17. package/dist/{WhoamiView-PSL7PUVT.js → WhoamiView-PDMQ6F5N.js} +1 -1
  18. package/dist/{app-download-MBUJGT3R.js → app-download-K2ELUXWR.js} +1 -1
  19. package/dist/{auth-TYG473Z4.js → auth-5WJSFLCP.js} +1 -1
  20. package/dist/{binary-QQXWA35Q.js → binary-QVQRWQFK.js} +1 -1
  21. package/dist/{bind-WJ5UEMMZ.js → bind-5WELCZ4S.js} +3 -3
  22. package/dist/{bootstrap-MYG4TJVF.js → bootstrap-3LNHRDQH.js} +1 -1
  23. package/dist/bridge-WFSSMJ57.js +2 -0
  24. package/dist/{changelog-N4L5ZUGF.js → changelog-TK6DWFVW.js} +1 -1
  25. package/dist/{chat-committer-K3NOTLOU.js → chat-committer-MAW25ICC.js} +1 -1
  26. package/dist/chat-controller-6GW2HSJP.js +2 -0
  27. package/dist/{chunk-ZAKX5BN6.js → chunk-2E55VQYA.js} +1 -1
  28. package/dist/{chunk-QHUNFH5P.js → chunk-2KQF6WLX.js} +4 -4
  29. package/dist/{chunk-PH4RABYU.js → chunk-2QSG5ZG6.js} +1 -1
  30. package/dist/{chunk-QS3DXKZN.js → chunk-2ZBY2GME.js} +1 -1
  31. package/dist/{chunk-54JZ6VEW.js → chunk-3D7VYEDP.js} +1 -1
  32. package/dist/{chunk-F5BI3ALG.js → chunk-3FJNTRAS.js} +1 -1
  33. package/dist/{chunk-DUEROGOF.js → chunk-3PMEHGH3.js} +1 -1
  34. package/dist/chunk-47WY2637.js +84 -0
  35. package/dist/{chunk-UEIQTXB6.js → chunk-4AZ7IG2A.js} +1 -1
  36. package/dist/{chunk-Z2DT2QMX.js → chunk-4FXSDPQW.js} +1 -1
  37. package/dist/{chunk-6ZNRPDLP.js → chunk-4SXJKDHO.js} +2 -2
  38. package/dist/{chunk-OR6M5HCV.js → chunk-4VYWTTT4.js} +2 -2
  39. package/dist/{chunk-R5PIIYN2.js → chunk-4VZRBBLF.js} +1 -1
  40. package/dist/{chunk-GWSGTZMK.js → chunk-5LEO463W.js} +1 -1
  41. package/dist/{chunk-7RAIRUXO.js → chunk-5NBT5IVT.js} +1 -1
  42. package/dist/{chunk-HKCZ67AT.js → chunk-6DOS5CJ5.js} +1 -1
  43. package/dist/{chunk-N7Z7BQYO.js → chunk-6GH4DRKR.js} +1 -1
  44. package/dist/{chunk-27P7PJAL.js → chunk-7B7OSHPX.js} +1 -1
  45. package/dist/{chunk-WH5RVDD6.js → chunk-7HUJVIMO.js} +1 -1
  46. package/dist/{chunk-NTEI2O3O.js → chunk-7KRCBN6X.js} +2 -2
  47. package/dist/{chunk-XPFFH2PC.js → chunk-7P3JGF2X.js} +1 -1
  48. package/dist/{chunk-AROBXG66.js → chunk-A4BDLZOD.js} +1 -1
  49. package/dist/{chunk-SJBIXLL3.js → chunk-A76UL3EN.js} +1 -1
  50. package/dist/{chunk-M7D7EHNN.js → chunk-ASK4AZFC.js} +1 -1
  51. package/dist/{chunk-CCEXSCTN.js → chunk-AXW3WDFO.js} +1 -1
  52. package/dist/{chunk-IVQX3AKL.js → chunk-B7K5WOOU.js} +1 -1
  53. package/dist/{chunk-VDKGMVXZ.js → chunk-B7TJIUKZ.js} +1 -1
  54. package/dist/{chunk-H6KL3FSB.js → chunk-BE4FBVKY.js} +1 -1
  55. package/dist/chunk-BHSHGWBL.js +2 -0
  56. package/dist/chunk-CABRAZOL.js +5 -0
  57. package/dist/{chunk-H5TNYYZW.js → chunk-CBLUNSF4.js} +1 -1
  58. package/dist/{chunk-O3RRCPIU.js → chunk-CL3AMEK6.js} +1 -1
  59. package/dist/{chunk-ZDAO5D6D.js → chunk-CQKKDIKA.js} +1 -1
  60. package/dist/{chunk-IBPF5IM5.js → chunk-CRPBARFG.js} +1 -1
  61. package/dist/chunk-DEUDRSU7.js +2 -0
  62. package/dist/{chunk-IJYV3KKD.js → chunk-DHWS7SLT.js} +2 -2
  63. package/dist/{chunk-ZBJAYCPS.js → chunk-DJJO4IHY.js} +1 -1
  64. package/dist/{chunk-KKBID6TD.js → chunk-DLJIML73.js} +1 -1
  65. package/dist/{chunk-EV64VI66.js → chunk-DP7GPS6S.js} +1 -1
  66. package/dist/chunk-F7R6A6P5.js +4 -0
  67. package/dist/{chunk-CJD3EEPT.js → chunk-FIODM24X.js} +1 -1
  68. package/dist/{chunk-2DKJZPIH.js → chunk-FQRWYXFG.js} +1 -1
  69. package/dist/{chunk-6FCPS2VT.js → chunk-FYLMTZ3J.js} +1 -1
  70. package/dist/{chunk-ZHB7V3NY.js → chunk-G5ZGEZCA.js} +1 -1
  71. package/dist/{chunk-367NASYK.js → chunk-GMXM4WHF.js} +1 -1
  72. package/dist/{chunk-VSEWQEM5.js → chunk-GSNGC7HI.js} +1 -1
  73. package/dist/{chunk-22HCCSL7.js → chunk-GV5BX2IQ.js} +1 -1
  74. package/dist/{chunk-LRHSWJDR.js → chunk-HFRMJP2P.js} +1 -1
  75. package/dist/chunk-HJBORIFP.js +26 -0
  76. package/dist/{chunk-WIAZN7G4.js → chunk-HULEZ3D3.js} +1 -1
  77. package/dist/{chunk-JPZHCB4Z.js → chunk-IX4FH5W6.js} +1 -1
  78. package/dist/{chunk-QDE2BBAK.js → chunk-JAO7TZBV.js} +1 -1
  79. package/dist/{chunk-MJHLQKQC.js → chunk-JJJREAFQ.js} +1 -1
  80. package/dist/{chunk-6UNXON3J.js → chunk-K6BWPGBO.js} +1 -1
  81. package/dist/chunk-KRL2BDI5.js +8 -0
  82. package/dist/{chunk-R7GMVPAF.js → chunk-M3Q7IQMS.js} +1 -1
  83. package/dist/{chunk-WHMMOMUY.js → chunk-M7CGNE2D.js} +4 -4
  84. package/dist/{chunk-2YQ6TW77.js → chunk-NBXYL2JT.js} +6 -6
  85. package/dist/chunk-NGASEXVA.js +27 -0
  86. package/dist/{chunk-VQFJM7VP.js → chunk-NLSR2IFN.js} +1 -1
  87. package/dist/{chunk-H4WIA4IP.js → chunk-NP3VGFZM.js} +1 -1
  88. package/dist/{chunk-6MJGCETZ.js → chunk-NVRXDLJN.js} +1 -1
  89. package/dist/{chunk-OEH4LU5L.js → chunk-NYUMJDCE.js} +1 -1
  90. package/dist/chunk-O7RB4X6I.js +21 -0
  91. package/dist/{chunk-COJGXGKZ.js → chunk-OC7TJTQG.js} +1 -1
  92. package/dist/{chunk-BOZODWIZ.js → chunk-OGJ6ZSLC.js} +1 -1
  93. package/dist/{chunk-EEFZXZTZ.js → chunk-OKBEMFAW.js} +1 -1
  94. package/dist/{chunk-NVNPXOOC.js → chunk-OKCULEBD.js} +1 -1
  95. package/dist/{chunk-XMTSHHYQ.js → chunk-OXHMUZJV.js} +1 -1
  96. package/dist/chunk-OZMYKG6E.js +6 -0
  97. package/dist/chunk-PDXZROJM.js +2 -0
  98. package/dist/{chunk-5G22NOZK.js → chunk-QHSF2CXK.js} +1 -1
  99. package/dist/{chunk-IANCFSSL.js → chunk-QIRZBOKA.js} +1 -1
  100. package/dist/{chunk-W3Z7AZNT.js → chunk-R4EGL7VM.js} +1 -1
  101. package/dist/{chunk-KAZGHWGK.js → chunk-S63XGGBE.js} +1 -1
  102. package/dist/{chunk-ME3DGP7G.js → chunk-SNKFWPEM.js} +2 -2
  103. package/dist/chunk-T4OJX2GZ.js +15 -0
  104. package/dist/chunk-TB2CCKL7.js +2 -0
  105. package/dist/{chunk-FC6DEFUP.js → chunk-TSW5A7W3.js} +1 -1
  106. package/dist/{chunk-UH2ZTX4E.js → chunk-TYRTD5DD.js} +1 -1
  107. package/dist/{chunk-SV5ZTCQA.js → chunk-URLZULC7.js} +1 -1
  108. package/dist/{chunk-TJR4R45C.js → chunk-VGLY4HWA.js} +1 -1
  109. package/dist/{chunk-IDQBMC3B.js → chunk-VUOAFV27.js} +1 -1
  110. package/dist/{chunk-DKUD2D5Y.js → chunk-W4IRHQGO.js} +9 -9
  111. package/dist/{chunk-P2VERPOP.js → chunk-W7NI6JCF.js} +1 -1
  112. package/dist/chunk-WD52ZNQY.js +2 -0
  113. package/dist/chunk-WRVDIZAI.js +6 -0
  114. package/dist/{chunk-DGNVKMGN.js → chunk-X6WB2QTT.js} +1 -1
  115. package/dist/{chunk-IPZFZUJX.js → chunk-XB7EMX6J.js} +1 -1
  116. package/dist/{chunk-KRKGZ2ZW.js → chunk-XS2LZFCH.js} +1 -1
  117. package/dist/{chunk-34VSIQNO.js → chunk-XYSFPVJX.js} +1 -1
  118. package/dist/chunk-Y4ODYIOP.js +6 -0
  119. package/dist/{chunk-O5U6EAL3.js → chunk-YELGHSVH.js} +1 -1
  120. package/dist/{chunk-OME5EJ5X.js → chunk-YQ4MRF57.js} +4 -4
  121. package/dist/{chunk-AOB2ZX45.js → chunk-YSNBXUM6.js} +1 -1
  122. package/dist/{chunk-KGKJU27A.js → chunk-Z4QLCWLB.js} +1 -1
  123. package/dist/{chunk-6S426ODE.js → chunk-Z6GMZOVL.js} +3 -3
  124. package/dist/{chunk-IWVA37B6.js → chunk-ZES42R57.js} +1 -1
  125. package/dist/{chunk-TN4SXGAP.js → chunk-ZMJD3CI7.js} +1 -1
  126. package/dist/{committer-C6UCDYMC.js → committer-42AFWMEX.js} +1 -1
  127. package/dist/{config-ZDGCZZT3.js → config-KU2UICMC.js} +1 -1
  128. package/dist/{cover-cmd-5LPHIOSI.js → cover-cmd-HAOBK2IC.js} +1 -1
  129. package/dist/{credentials-YEWA7HXA.js → credentials-BEC4I5SE.js} +1 -1
  130. package/dist/{deps-bundle-JQUW73W5.js → deps-bundle-EY5T7OH3.js} +1 -1
  131. package/dist/{deps-resolve-RXF3JWAP.js → deps-resolve-MPLFFCZZ.js} +1 -1
  132. package/dist/design-committer-2BQVZPO4.js +2 -0
  133. package/dist/dispatch-NE35HS5F.js +2 -0
  134. package/dist/{doctor-F7R4WUSI.js → doctor-JBXA6WNL.js} +1 -1
  135. package/dist/{docx-convert-JMUMT5C4.js → docx-convert-BIV5T7F5.js} +1 -1
  136. package/dist/{dossier-Y6TJWFZU.js → dossier-WSWXZAPL.js} +1 -1
  137. package/dist/effective-decisions-UNE2TFVA.js +2 -0
  138. package/dist/{evidence-F3CQJQIB.js → evidence-MJV3PY2J.js} +1 -1
  139. package/dist/evolve-cmd-I4Z6IPIM.js +2 -0
  140. package/dist/explain-O3A2HZWD.js +2 -0
  141. package/dist/{explain-cmd-RMJPXD4U.js → explain-cmd-BXFR5DB6.js} +1 -1
  142. package/dist/{explain-cmd-XCRO4AS6.js → explain-cmd-IRQ2YX5L.js} +1 -1
  143. package/dist/{extract-bind-PH3VB7PY.js → extract-bind-PPMY4FFA.js} +3 -3
  144. package/dist/{extract-cmd-HSESPCTL.js → extract-cmd-RHVLPNQB.js} +2 -2
  145. package/dist/{feeder-IOR3XRNF.js → feeder-52VBZY3R.js} +1 -1
  146. package/dist/{gaps-cmd-JIUM5YDY.js → gaps-cmd-MSDGU6OU.js} +1 -1
  147. package/dist/{generate-headless-Z5YF7UHX.js → generate-headless-NSK32S53.js} +2 -2
  148. package/dist/index.js +115 -115
  149. package/dist/ingest-WTPY2VLS.js +2 -0
  150. package/dist/ingest-cmd-GOPW3SNF.js +2 -0
  151. package/dist/install-BDHZVEY4.js +2 -0
  152. package/dist/{interactive-bind-HZG2KCTX.js → interactive-bind-4FNW3OYT.js} +4 -4
  153. package/dist/{lifecycle-cmd-KSMETBPP.js → lifecycle-cmd-HYNG5KH6.js} +1 -1
  154. package/dist/{list-cmd-V3HJ5K4O.js → list-cmd-Y4WEOT3E.js} +1 -1
  155. package/dist/{list-commands-BHQHPHOH.js → list-commands-CJCEW7MQ.js} +1 -1
  156. package/dist/{logical-ids-MLXAH45L.js → logical-ids-N3UZACB4.js} +1 -1
  157. package/dist/login-flow-DLG2WHSZ.js +2 -0
  158. package/dist/{maintenance-cmd-VFYGKY3X.js → maintenance-cmd-UJNH47SG.js} +1 -1
  159. package/dist/{mobile-prompts-ELBW35KK.js → mobile-prompts-SJZVJWSB.js} +1 -1
  160. package/dist/persist-recorded-session-FWBAOQEF.js +3 -0
  161. package/dist/{phase-seed-BMOSAA74.js → phase-seed-2WI7KUYO.js} +1 -1
  162. package/dist/pipeline-B2TYZBMB.js +2 -0
  163. package/dist/prepare-target-JGVB7OKC.js +2 -0
  164. package/dist/readmodel-YDLGQDMH.js +2 -0
  165. package/dist/reconcile-cmd-6ILIXD3U.js +2 -0
  166. package/dist/{reconcile-deps-RX66LB4B.js → reconcile-deps-GMQA6ULT.js} +2 -2
  167. package/dist/{reconcile-engine-OEDO57U7.js → reconcile-engine-XLLYS5ZB.js} +1 -1
  168. package/dist/{recording-banner-COX2HBLL.js → recording-banner-CQBXZMT3.js} +1 -1
  169. package/dist/{records-JLS63SDI.js → records-EW4PIJ5W.js} +1 -1
  170. package/dist/registry-AA5YIO5Y.js +2 -0
  171. package/dist/{replay-policy-CVQ6OJX5.js → replay-policy-A62KXE6Y.js} +1 -1
  172. package/dist/{require-project-folder-XFUJYJEA.js → require-project-folder-K3E3QIOZ.js} +1 -1
  173. package/dist/{resolve-run-intent-24D3BV2J.js → resolve-run-intent-3CENNCF3.js} +1 -1
  174. package/dist/{resolver-ITA6TGPJ.js → resolver-PSNP72H4.js} +1 -1
  175. package/dist/{revert-PRR3D4XM.js → revert-RXHWWUMQ.js} +1 -1
  176. package/dist/{review-cmd-SAGIKWEW.js → review-cmd-JUOWTME4.js} +1 -1
  177. package/dist/run-6CMGGU2W.js +2 -0
  178. package/dist/run-PZIYMD35.js +2 -0
  179. package/dist/{run-test-md-U5PSCPZU.js → run-test-md-XBM6RMCI.js} +2 -2
  180. package/dist/{sessions-cmd-VDQGRBEM.js → sessions-cmd-PGE6LP2W.js} +1 -1
  181. package/dist/{skill-installer-STKFBIY4.js → skill-installer-FBOPYFYS.js} +1 -1
  182. package/dist/{spawner-R76ROCR2.js → spawner-URQ5OAY7.js} +1 -1
  183. package/dist/{structured-answers-YAVW65G4.js → structured-answers-BZWJUX22.js} +1 -1
  184. package/dist/tcg-generate-BPLQ7WJ5.js +2 -0
  185. package/dist/testmd-actions-WJS2YM7B.js +2 -0
  186. package/dist/testmd-sync-TPUBEORI.js +2 -0
  187. package/dist/token-refresh-IT4LVE2H.js +2 -0
  188. package/dist/{validate-basic-BPJVV64Y.js → validate-basic-BXBHTTTO.js} +1 -1
  189. package/dist/verdicts-J5MJHUGG.js +2 -0
  190. package/dist/{version-check-PWHLDMPD.js → version-check-BGHE3LAK.js} +1 -1
  191. package/dist/{view-cmd-SXXNDZIC.js → view-cmd-XD5ENSML.js} +1 -1
  192. package/dist/{walk-session-OMUB7DPJ.js → walk-session-EYBUURRA.js} +1 -1
  193. package/dist/{with-telemetry-WI5FZFEK.js → with-telemetry-L3SO6J3L.js} +1 -1
  194. package/package.json +11 -11
  195. package/dist/EvidenceViewOffer-XV3WF2EC.js +0 -2
  196. package/dist/FolderPicker-UGHFCPUL.js +0 -2
  197. package/dist/SingleShotApp-ECA24PKW.js +0 -2
  198. package/dist/TestMdRunView-KLMMXQCN.js +0 -2
  199. package/dist/bridge-S3WZ4TH2.js +0 -2
  200. package/dist/chat-controller-YJCNU76T.js +0 -2
  201. package/dist/chunk-7UCICMK7.js +0 -5
  202. package/dist/chunk-AARF24Z3.js +0 -26
  203. package/dist/chunk-BVON52QL.js +0 -6
  204. package/dist/chunk-D5MK4WTK.js +0 -26
  205. package/dist/chunk-DWHXXPDX.js +0 -2
  206. package/dist/chunk-EKCGZXZE.js +0 -2
  207. package/dist/chunk-FT23VFSR.js +0 -71
  208. package/dist/chunk-HPBI3P6I.js +0 -6
  209. package/dist/chunk-IPEA7ZOF.js +0 -8
  210. package/dist/chunk-OLKHUNSQ.js +0 -21
  211. package/dist/chunk-TJLGHGUO.js +0 -7
  212. package/dist/chunk-W5BTYVZD.js +0 -2
  213. package/dist/chunk-WHEWZR2C.js +0 -15
  214. package/dist/design-committer-UPC6NZUF.js +0 -2
  215. package/dist/dispatch-TRYJZWJE.js +0 -2
  216. package/dist/effective-decisions-DRM3JSR4.js +0 -2
  217. package/dist/evolve-cmd-ICTXNYU4.js +0 -2
  218. package/dist/explain-3HAZY7Q6.js +0 -2
  219. package/dist/ingest-TTUQ7UDK.js +0 -2
  220. package/dist/ingest-cmd-SNPNVPIO.js +0 -2
  221. package/dist/install-VBUDO2YW.js +0 -2
  222. package/dist/login-flow-TWGSFMWW.js +0 -2
  223. package/dist/persist-recorded-session-DXUJXHC5.js +0 -3
  224. package/dist/pipeline-ULKJX3FG.js +0 -2
  225. package/dist/prepare-target-M656XQLU.js +0 -2
  226. package/dist/readmodel-TDRFVDVI.js +0 -2
  227. package/dist/reconcile-cmd-DBOUGUEB.js +0 -2
  228. package/dist/registry-PAVGNBIB.js +0 -2
  229. package/dist/run-IHELHWA2.js +0 -2
  230. package/dist/run-OTSAYPBQ.js +0 -2
  231. package/dist/tcg-generate-VJARWDD4.js +0 -2
  232. package/dist/testmd-actions-PXGLZV5L.js +0 -2
  233. package/dist/token-refresh-ZFT457VI.js +0 -2
  234. package/dist/verdicts-56ZZN3E4.js +0 -2
@@ -1,8 +1,8 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as K}from"./chunk-LRHSWJDR.js";import{a as B,b as U,c as Y}from"./chunk-KGKJU27A.js";import{a as j}from"./chunk-DNNZ353O.js";import{d as F}from"./chunk-YMLC55J4.js";import{C as k,a as L,b as V,m as G,q as N}from"./chunk-W3Z7AZNT.js";import{e as I}from"./chunk-XMTSHHYQ.js";import{d as v,e as x,g as H}from"./chunk-AKX4VRRR.js";function ee(t,e,n,i,s){let f=n.rows.filter(u=>{let d=i.get(u.temp_ref);return d!==void 0&&d!=="reject"});if(f.length===0)return{record:null,errors:null};let o={version:1,read_basis:e.latestHash,source:{source_id:n.source_id,source_cid:e.heads.get(n.source_id)??""},use_cases:f.map(u=>u.uc)},p=new Map;for(let u of f){let d=i.get(u.temp_ref);typeof d=="object"?p.set(u.temp_ref,{resolution:"edited",edit:d.edited}):p.set(u.temp_ref,{resolution:u.uc.matches_existing&&u.uc.changed?"edited":"approved"})}let g=Y(o,e,n.staged_source_cid);if(g.errors!==null)return{record:null,errors:g.errors};let r=g.proposal,l=o.source.source_cid?D(t,e,o.source.source_cid):null;if(l!==null){r=U(r,l);let u=G(r,B(l),e);if(u.length>0)return{record:null,errors:[{code:"HELD_CITES_STALE",detail:"the source moved after this plan staged \u2014 its quotes no longer verify against the current head; re-run kane-cli maintain reconcile to re-stage"},...u]}}let m=`held-${(e.latestHash??"root").slice(-12)}-${f.length}`;return N({contextDir:t,graph:e,proposal:r,proposalId:m,verdicts:p,by:s,autoName:!0})}function W(t,e,n=[]){let i=K(t,e),s=new Set,f=[],o=l=>{!l||s.has(l)||(s.add(l),f.push(y(t,l)))};for(let l of i.pairs)o(l.scenario),o(l.test);for(let[l,m]of i.verifies){o(l);for(let u of m)o(u)}if(n.length===0)return{stale_refs:f};let p=l=>`${String(l.props.source_id)}\0${String(l.props.anchor)}`,g=new Set;for(let{cid:l}of t.byLabel(v.USECASE))if(t.tipOf(l)===e)for(let m of t.edgesInto(l)){if(m.type!==x.DERIVES)continue;let u=m.props.claim;typeof u=="string"&&n.includes(u)&&g.add(p(m))}if(g.size===0)return{stale_refs:f};let r=new Set;for(let[l,m]of i.verifies)if(t.edgesInto(l).some(d=>d.type===x.DERIVES&&g.has(p(d)))){r.add(y(t,l));for(let d of m)r.add(y(t,d))}return{stale_refs:f,...r.size>0?{direct_refs:[...r]}:{}}}var q="this release plans changes only \u2014 blast-radius impact and drift meaning-checks are not measured, and REMOVE rows are never executed automatically",te="suite untouched; graph updated";function M(t,e){return!t.superseded.has(e)&&t.trust.get(e)!=="archived"}function y(t,e,n=new Set){let i=t.nameOf.get(e);if(i!==void 0)return i;if(n.has(e))return e;n.add(e);for(let[s,f]of t.superseded){if(f!==e)continue;let o=y(t,s,n);if(o!==s)return o}return e}function C(t){return String(t).slice(0,19)}function A(t,e,n){let i=t.edgesFrom(e).find(s=>s.type===n);return i?t.tipOf(i.dst):null}function X(t,e){let n=t.nodeLabel.get(e);if(n===v.USECASE)return e;if(n===v.SCENARIO)return A(t,e,x.BELONGS_TO);if(n===v.AC){let i=A(t,e,x.SCOPED_TO);return i?t.nodeLabel.get(i)===v.USECASE?i:A(t,i,x.BELONGS_TO):null}if(n===v.TEST){let i=A(t,e,x.AUTOMATES);return i?A(t,i,x.BELONGS_TO):null}return null}function z(t,e){let n=[],i=new Map;for(let s of t.derivesInto(e))i.set(String(s.props.source_id),s);for(let[s,f]of i){let o=t.heads.get(s);if(o==null){n.push(`DERIVES pin ${s} @ ${C(f.props.source_cid)} \u2014 source retired`);continue}if(o!==f.props.source_cid){let p=t.convChains.get(s)?.chain;if(p&&p.includes(String(f.props.source_cid)))continue;n.push(`DERIVES pin ${s} @ ${C(f.props.source_cid)} \u2014 source head moved to ${C(o)}`)}}for(let s of t.edgesFrom(e))H(s.type)?.pin?.comparesTo==="dst_tip"&&t.superseded.has(s.dst)&&n.push(`${s.type} pin \u2192 ${y(t,s.dst)} \u2014 target superseded`);return n.join("; ")||"structural pin broken"}var ne=new Set([v.USECASE,v.SCENARIO,v.AC,v.TEST]);function $(t,e){return t.ref<e.ref?-1:t.ref>e.ref?1:0}function D(t,e,n){let i=j(t,e,n);return i===null?null:i.toString("utf8")}function se(t,e,n,i,s){let f=n.props.quote;if(typeof f=="string"&&f.length>0)return i.includes(f);let o=String(n.props.source_cid);s.has(o)||s.set(o,D(t,e,o));let p=s.get(o);if(p===null)return!1;let g=V(p,String(n.props.anchor));return g===null?!1:g.split(`
2
+ import{b as K}from"./chunk-HFRMJP2P.js";import{a as B,b as U,c as Y}from"./chunk-Z4QLCWLB.js";import{a as j}from"./chunk-DNNZ353O.js";import{d as F}from"./chunk-YMLC55J4.js";import{C as k,a as L,b as V,m as G,q as N}from"./chunk-R4EGL7VM.js";import{e as I}from"./chunk-OXHMUZJV.js";import{d as v,e as x,g as H}from"./chunk-AKX4VRRR.js";function ee(t,e,n,i,s){let f=n.rows.filter(u=>{let d=i.get(u.temp_ref);return d!==void 0&&d!=="reject"});if(f.length===0)return{record:null,errors:null};let o={version:1,read_basis:e.latestHash,source:{source_id:n.source_id,source_cid:e.heads.get(n.source_id)??""},use_cases:f.map(u=>u.uc)},p=new Map;for(let u of f){let d=i.get(u.temp_ref);typeof d=="object"?p.set(u.temp_ref,{resolution:"edited",edit:d.edited}):p.set(u.temp_ref,{resolution:u.uc.matches_existing&&u.uc.changed?"edited":"approved"})}let g=Y(o,e,n.staged_source_cid);if(g.errors!==null)return{record:null,errors:g.errors};let r=g.proposal,l=o.source.source_cid?D(t,e,o.source.source_cid):null;if(l!==null){r=U(r,l);let u=G(r,B(l),e);if(u.length>0)return{record:null,errors:[{code:"HELD_CITES_STALE",detail:"the source moved after this plan staged \u2014 its quotes no longer verify against the current head; re-run kane-cli maintain reconcile to re-stage"},...u]}}let m=`held-${(e.latestHash??"root").slice(-12)}-${f.length}`;return N({contextDir:t,graph:e,proposal:r,proposalId:m,verdicts:p,by:s,autoName:!0})}function W(t,e,n=[]){let i=K(t,e),s=new Set,f=[],o=l=>{!l||s.has(l)||(s.add(l),f.push(y(t,l)))};for(let l of i.pairs)o(l.scenario),o(l.test);for(let[l,m]of i.verifies){o(l);for(let u of m)o(u)}if(n.length===0)return{stale_refs:f};let p=l=>`${String(l.props.source_id)}\0${String(l.props.anchor)}`,g=new Set;for(let{cid:l}of t.byLabel(v.USECASE))if(t.tipOf(l)===e)for(let m of t.edgesInto(l)){if(m.type!==x.DERIVES)continue;let u=m.props.claim;typeof u=="string"&&n.includes(u)&&g.add(p(m))}if(g.size===0)return{stale_refs:f};let r=new Set;for(let[l,m]of i.verifies)if(t.edgesInto(l).some(d=>d.type===x.DERIVES&&g.has(p(d)))){r.add(y(t,l));for(let d of m)r.add(y(t,d))}return{stale_refs:f,...r.size>0?{direct_refs:[...r]}:{}}}var q="this release plans changes only \u2014 blast-radius impact and drift meaning-checks are not measured, and REMOVE rows are never executed automatically",te="suite untouched; graph updated";function M(t,e){return!t.superseded.has(e)&&t.trust.get(e)!=="archived"}function y(t,e,n=new Set){let i=t.nameOf.get(e);if(i!==void 0)return i;if(n.has(e))return e;n.add(e);for(let[s,f]of t.superseded){if(f!==e)continue;let o=y(t,s,n);if(o!==s)return o}return e}function C(t){return String(t).slice(0,19)}function A(t,e,n){let i=t.edgesFrom(e).find(s=>s.type===n);return i?t.tipOf(i.dst):null}function X(t,e){let n=t.nodeLabel.get(e);if(n===v.USECASE)return e;if(n===v.SCENARIO)return A(t,e,x.BELONGS_TO);if(n===v.AC){let i=A(t,e,x.SCOPED_TO);return i?t.nodeLabel.get(i)===v.USECASE?i:A(t,i,x.BELONGS_TO):null}if(n===v.TEST){let i=A(t,e,x.AUTOMATES);return i?A(t,i,x.BELONGS_TO):null}return null}function z(t,e){let n=[],i=new Map;for(let s of t.derivesInto(e))i.set(String(s.props.source_id),s);for(let[s,f]of i){let o=t.heads.get(s);if(o==null){n.push(`DERIVES pin ${s} @ ${C(f.props.source_cid)} \u2014 source retired`);continue}if(o!==f.props.source_cid){let p=t.convChains.get(s)?.chain;if(p&&p.includes(String(f.props.source_cid)))continue;n.push(`DERIVES pin ${s} @ ${C(f.props.source_cid)} \u2014 source head moved to ${C(o)}`)}}for(let s of t.edgesFrom(e))H(s.type)?.pin?.comparesTo==="dst_tip"&&t.superseded.has(s.dst)&&n.push(`${s.type} pin \u2192 ${y(t,s.dst)} \u2014 target superseded`);return n.join("; ")||"structural pin broken"}var ne=new Set([v.USECASE,v.SCENARIO,v.AC,v.TEST]);function $(t,e){return t.ref<e.ref?-1:t.ref>e.ref?1:0}function D(t,e,n){let i=j(t,e,n);return i===null?null:i.toString("utf8")}function se(t,e,n,i,s){let f=n.props.quote;if(typeof f=="string"&&f.length>0)return i.includes(f);let o=String(n.props.source_cid);s.has(o)||s.set(o,D(t,e,o));let p=s.get(o);if(p===null)return!1;let g=V(p,String(n.props.anchor));return g===null?!1:g.split(`
3
3
  `).some(r=>r.trim().length>0&&i.includes(r.trim()))}function oe(t,e,n){let i=L(String(e.props.anchor));if(i?.kind!=="img-part")return!1;let f=(t.mediaOf(String(e.props.source_cid)).images??[]).find(r=>r.ref===i.ref),o=f?.blob;if(o===void 0)return!1;let p=t.mediaOf(n).images??[];if(p.some(r=>r.blob===o))return!0;let g=f?.appearance;return g!==void 0&&p.filter(r=>r.appearance===g).length===1}var J=128*1024,Q=64*1024;function re(t,e){let n=t.split(`
4
4
  `),i=e.split(`
5
5
  `),s=0;for(;s<n.length&&s<i.length&&n[s]===i[s];)s++;let f=n.length,o=i.length;for(;f>s&&o>s&&n[f-1]===i[o-1];)f--,o--;if(f===s&&o===s)return"";let p=n.slice(s,f),g=i.slice(s,o),l=ie(p,g,2e3),m=[];if(l===null)m.push(`@@ old L${s+1}-L${f} \u2192 new L${s+1}-L${o} @@`,...p.map(u=>`- ${u}`),...g.map(u=>`+ ${u}`));else{let u=l.map((a,h)=>a.op==="="?-1:h).filter(a=>a>=0),d=0;for(;d<u.length;){let a=d;for(;a+1<u.length&&u[a+1]-u[a]<=3;)a++;let h=Math.max(u[d]-1,0),R=Math.min(u[a]+1,l.length-1),b=l.slice(h,R+1),S=s+(b[0].ai??0)+1,_=s+(b[0].bi??0)+1,c=b.filter(E=>E.op!=="+").length,w=b.filter(E=>E.op!=="-").length;m.push(`@@ old L${S}-L${S+Math.max(c-1,0)} \u2192 new L${_}-L${_+Math.max(w-1,0)} @@`);for(let E of b)m.push(E.op==="="?` ${E.line}`:`${E.op} ${E.line}`);d=a+1}}return m.join(`
6
6
  `)}function ie(t,e,n){let i=t.length,s=e.length,f=Math.min(i+s,n),o=new Map([[1,0]]),p=[],g=!1;for(let u=0;u<=f&&!g;u++){p.push(new Map(o));for(let d=-u;d<=u;d+=2){let a=d===-u||d!==u&&(o.get(d-1)??0)<(o.get(d+1)??0)?o.get(d+1)??0:(o.get(d-1)??0)+1,h=a-d;for(;a<i&&h<s&&t[a]===e[h];)a++,h++;if(o.set(d,a),a>=i&&h>=s){g=!0;break}}}if(!g)return null;let r=i,l=s,m=[];for(let u=p.length-1;u>0;u--){let d=p[u],a=r-l,h=a===-u||a!==u&&(d.get(a-1)??0)<(d.get(a+1)??0)?a+1:a-1,R=d.get(h)??0,b=R-h;for(;r>R&&l>b;)m.push({op:"=",line:t[r-1],ai:r-1,bi:l-1}),r--,l--;u>0&&(r===R?(m.push({op:"+",line:e[l-1],ai:r,bi:l-1}),l--):(m.push({op:"-",line:t[r-1],ai:r-1,bi:l}),r--))}for(;r>0&&l>0;)m.push({op:"=",line:t[r-1],ai:r-1,bi:l-1}),r--,l--;for(;r>0;)m.push({op:"-",line:t[r-1],ai:r-1,bi:0}),r--;for(;l>0;)m.push({op:"+",line:e[l-1],ai:0,bi:l-1}),l--;return m.reverse()}function ce(t){let e=Buffer.byteLength(t,"utf8");if(e<=J+Q)return{diff:t,truncated:!1};let n=Buffer.from(t,"utf8"),i=J;for(;i>0&&(n[i]&192)===128;)i--;let s=e-Q;for(;s<e&&(n[s]&192)===128;)s++;let f=n.subarray(0,i).toString("utf8"),o=n.subarray(s).toString("utf8");return{diff:`${f}
7
7
  \u2026 [diff truncated: ${e-i-(e-s)} bytes omitted] \u2026
8
- ${o}`,truncated:!0}}function ae(t,e){let n=k(t),i=n.heads.get(e);if(typeof i!="string")return null;let s=[];for(let d of I(t).records){let a=d.source_head_moves?.[e];a!==void 0&&a!==s[s.length-1]&&s.push(a)}let f=s.lastIndexOf(i),o=f>0?s[f-1]:null;if(typeof o!="string"||o===i)return null;let p=D(t,n,o),g=D(t,n,i);if(p===null||g===null)return null;let{diff:r,truncated:l}=ce(re(p,g)),m=new Set,u=[];for(let d of n.edgesFrom(o))d.type!==x.DERIVES||n.nodeLabel.get(d.dst)!==v.USECASE||m.has(d.dst)||(m.add(d.dst),u.push({id:d.dst,title:String(n.getNode(d.dst)?.content.title??"")}));return{source_id:e,old_head:o,new_head:i,diff:r,...l?{truncated:!0}:{},prior_ucs:u}}function de(t,e,n){let i=t.getNode(e)?.content??{},s=t.getNode(n)?.content??{},o=[...new Set([...Object.keys(i),...Object.keys(s)])].sort().filter(p=>JSON.stringify(i[p])!==JSON.stringify(s[p]));return o.length>0?`updated: ${o.join(", ")}`:"updated"}function le(t,e,n,i,s,f,o){let p=new Set((o?.rows??[]).map(a=>a.matched_cid).filter(a=>!!a)),g=[];for(let[a,h]of n.superseded)h===null||a===h||e.superseded.has(a)||n.nodeLabel.get(a)===v.USECASE&&g.push({kind:"MODIFY",ref:y(n,a),old_cid:a,new_cid:h,summary:de(n,a,h)});let r=f.map(a=>({kind:"ADD",ref:y(n,a),cid:a}));for(let a of o?.rows??[])a.kind==="MODIFY"&&a.matched_cid?g.push({kind:"MODIFY",ref:y(n,a.matched_cid),old_cid:a.matched_cid,new_cid:null,summary:`${a.why} (staged)`}):a.kind==="ADD"&&r.push({kind:"ADD",ref:a.title,cid:null});let l=[],m=D(t,n,s),u=new Map;for(let{cid:a}of n.byLabel(v.USECASE)){if(!M(n,a)||p.has(a))continue;let h=n.derivesInto(a),R=h.filter(_=>String(_.props.source_id)===i);R.length===0||R.some(_=>_.props.source_cid===s)||R.some(_=>{let c=String(_.props.anchor),w=L(c);return w?.kind==="img-whole"?!1:w?.kind==="img-part"?oe(n,_,s):m!==null&&se(t,n,_,m,u)})||h.some(_=>{let c=String(_.props.source_id);if(c===i)return!1;let w=n.heads.get(c);return w!=null})||l.push({kind:"ARCHIVE",ref:y(n,a),cid:a,why:`evidence decayed: no quote from ${i} relocates into @${C(s)}, no other live source, no fresh evidence this run`,impact:W(n,n.tipOf(a))})}let d=(a,h)=>a.ref<h.ref?-1:a.ref>h.ref?1:0;return[...g.sort(d),...r.sort(d),...l.sort(d)]}function Ee(t,e,n,i,s){let f=e.rows.find(d=>d.temp_ref===n);if(!f)return{ok:!1,message:`held item ${n} missing from the plan artifact`};let o=f,p=k(t);if(o.matched_cid){let d=p.tipOf(o.matched_cid);if(p.superseded.get(d)===null)return{ok:!1,message:`use-case for "${o.title}" was retired meanwhile \u2014 nothing to update`};d!==o.matched_cid&&(o={...o,matched_cid:d,uc:{...o.uc,matches_existing:{cid:d}}})}let g=s?{edited:s}:"approve",r=ee(t,p,{source_id:e.source_id,...e.staged_source_cid!==void 0?{staged_source_cid:e.staged_source_cid}:{},rows:[o]},new Map([[o.temp_ref,g]]),i);if(r.errors)return{ok:!1,message:r.errors.map(d=>`${d.code}: ${d.detail}`).join("; ")};let l=k(t),m=o.matched_cid?l.tipOf(o.matched_cid):r.record?.nodes.find(d=>d.label==="usecase")?.cid??r.record?.review[0]?.id;return{ok:!0,ref:m?y(l,m):o.title,kind:o.kind}}async function Re(t,e,n,i={}){let s=k(t),f=s.heads.get(e)??null,o=new Set(s.staleList().filter(c=>c.state==="stale").map(c=>c.cid)),p=await n.reingest(e);if(p.status==="unchanged"&&!i.resumeHeld)return{source_id:e,changed:!1,head:{status:p.status,before:f,after:p.cid},note:`nothing to reconcile \u2014 ${e} is unchanged`,skipped_arms:q,changeset:[],rows:[]};let g=i.resumeHeld?{minted:[],matched:[],held:i.resumeHeld}:await n.reextract(e),r=k(t),l=g.minted.map(c=>{let w=y(r,c);return{kind:"ADD",origin:"content-change",ref:w,reason:`new use-case extracted from ${e}`,provenance:`extraction commit \u2014 DERIVES ${e} @ ${C(p.cid)}`,action:`kane-cli design tests --use-case ${w}`}}),m=r.staleList().filter(c=>c.state==="stale"&&!o.has(c.cid)&&M(r,c.cid)).map(c=>c.cid),u=m.map(c=>{let w=y(r,c),E=ne.has(r.nodeLabel.get(c)??"");return{kind:"MODIFY",origin:"structural-stale",ref:w,reason:"stale (structural)",provenance:z(r,c),action:E?`kane-cli maintain evolve ${w}`:`kane-cli design explain ${w}`}}),d=[],a=[];for(let c of g.held?.rows??[])if(c.kind==="ADD")d.push({kind:"ADD",origin:"content-change",ref:c.title,held_ref:c.temp_ref,reason:`${c.why} (staged \u2014 commits on approval)`,provenance:`staged extraction of ${e} @ ${C(p.cid)}`,action:"approve to commit + design"});else{let w=c.matched_cid?r.tipOf(c.matched_cid):null,E=w?r.getNode(w)?.content.criteria??[]:[],T=(c.uc.updated?.criteria??[]).map(O=>typeof O=="string"?O:O.text),Z=[...T.filter(O=>!E.includes(O)),...c.uc.updated?.criteria!==void 0?E.filter(O=>!T.includes(O)):[]],P=w?W(r,w,Z):void 0;a.push({kind:"MODIFY",origin:"content-change",ref:c.matched_cid?y(r,c.matched_cid):c.title,held_ref:c.temp_ref,reason:`${c.why} (staged \u2014 commits on approval)`,provenance:`staged extraction of ${e} @ ${C(p.cid)}`,action:"approve to commit the updated version (old\u2192new redirect)",...P?{impact:P}:{}})}let h=new Set;for(let c of[...g.minted,...g.matched])h.add(r.tipOf(c));for(let c of g.held?.rows??[])c.matched_cid&&h.add(r.tipOf(c.matched_cid));for(let c of m){let w=X(r,r.tipOf(c));w&&r.nodeLabel.get(w)===v.USECASE&&h.add(r.tipOf(w))}let R=[];for(let c of await F(r,"design")){if(c.kind!=="no-verifies")continue;let w=r.resolve(c.ref);if(!w)continue;let E=X(r,w.tip);!E||!h.has(r.tipOf(E))||R.push({kind:"ADD",origin:"content-change",ref:c.ref,reason:c.why,provenance:`gaps engine (design) \u2014 uncovered AC of touched use-case ${y(r,E)}`,action:c.ready_command})}let b=[];for(let{cid:c}of r.byLabel(v.USECASE))M(r,c)&&r.stale(c)==="orphaned"&&b.push({kind:"REMOVE",ref:y(r,c),reason:"orphaned \u2014 no live source evidences this use-case",provenance:z(r,c),action:"plan-only \u2014 REMOVE is not executed in this release"});let S=new Set,_=[...l.sort($),...d.sort($),...R.sort($),...a.sort($),...u.sort($),...b.sort($)].filter(c=>{let w=`${c.kind}\0${c.ref}`;return S.has(w)?!1:(S.add(w),!0)});return{source_id:e,changed:!0,head:{status:p.status,before:f,after:p.cid},note:te,skipped_arms:q,changeset:le(t,s,r,e,p.cid,g.minted,g.held),rows:_,...g.held?{held:g.held}:{}}}function ye(t,e){return async n=>{let{ingestFile:i}=await import("./ingest-TTUQ7UDK.js"),{convertPdf:s}=await import("./pdf-convert-OZIRUADA.js"),{convertDocx:f}=await import("./docx-convert-JMUMT5C4.js"),o=await i({contextDir:t,filePath:e,asId:n,converters:{pdf:s,docx:f}});return{status:o.status,cid:o.cid}}}function be(t,e,n,i){return async()=>{let f=(i??(await import("./dispatch-TRYJZWJE.js")).findProvider)(e);if(!f)throw new Error(`the remote re-ingest failed \u2014 no provider matches '${e}'`);let o=await f.ingest(e,void 0,{out:n.out,err:n.err,confirm:async()=>!0,isTTY:!1},t,void 0);if(o.code!==0||!o.result)throw new Error("the remote re-ingest failed \u2014 fix the reported problem and re-run");return{status:o.result.status,cid:o.result.source_cid}}}function xe(t,e={}){return async n=>{let i=[],[{runExtract:s},{resolveAgentAuthEnv:f},{runAgent:o},{preflightTurn:p}]=await Promise.all([import("./run-IHELHWA2.js"),import("./spawner-R76ROCR2.js"),import("./bridge-S3WZ4TH2.js"),import("./turn-preflight-JGYT7LXP.js")]),g=await f(),r=new Set(k(t).byLabel(v.USECASE).map(S=>S.cid)),l=ae(t,n)??void 0,m=0,u=await s({mode:"override",source:n,...l?{changeContext:l}:{}},{contextDir:t,agent:o,preflightTurn:()=>p(g),ask:async()=>[],review:async S=>{if(!e.stage)return new Map(S.map(c=>[c.temp_ref,{resolution:c.matches_existing&&c.changed?"edited":"skipped"}]));let _=new Map;for(let c of S){if(c.matches_existing&&!c.changed){_.set(c.temp_ref,{resolution:"skipped"});continue}i.push({kind:c.matches_existing?"MODIFY":"ADD",temp_ref:c.temp_ref,title:c.title,why:c.matches_existing?`updated: ${Object.keys(c.updated??{}).join(", ")||"content"}`:`newly extracted from ${n}`,...c.matches_existing?{matched_cid:c.matches_existing.cid,updated:c.updated}:{},uc:c}),_.set(c.temp_ref,{resolution:"rejected"})}return _},confirmStale:async()=>!1,out:S=>e.hostOut?.(S),progress:S=>e.hostProgress?.(S),emit:S=>{S.type==="commit"&&typeof S.assumed=="number"&&(m+=S.assumed),e.hostEmit?.(S)},isTTY:!1,auth:g});if(u!==0)throw new Error(`reconcile: re-extract of ${n} failed (exit ${u})`);let d=k(t),a=d.heads.get(n),h=[],R=[];if(typeof a=="string"){let S=new Set;for(let _ of d.edgesFrom(a))_.type!==x.DERIVES||d.nodeLabel.get(_.dst)!==v.USECASE||S.has(_.dst)||(S.add(_.dst),!(e.stage&&d.trust.get(_.dst)==="archived")&&(r.has(_.dst)?R:h).push(_.dst))}let b=k(t).heads.get(n);return{minted:h,matched:R,defaultsTaken:m,...e.stage?{held:{source_id:n,...b!=null?{staged_source_cid:b}:{},rows:i}}:{}}}}export{ee as a,W as b,q as c,te as d,M as e,X as f,ne as g,re as h,ce as i,ae as j,Ee as k,Re as l,ye as m,be as n,xe as o};
8
+ ${o}`,truncated:!0}}function ae(t,e){let n=k(t),i=n.heads.get(e);if(typeof i!="string")return null;let s=[];for(let d of I(t).records){let a=d.source_head_moves?.[e];a!==void 0&&a!==s[s.length-1]&&s.push(a)}let f=s.lastIndexOf(i),o=f>0?s[f-1]:null;if(typeof o!="string"||o===i)return null;let p=D(t,n,o),g=D(t,n,i);if(p===null||g===null)return null;let{diff:r,truncated:l}=ce(re(p,g)),m=new Set,u=[];for(let d of n.edgesFrom(o))d.type!==x.DERIVES||n.nodeLabel.get(d.dst)!==v.USECASE||m.has(d.dst)||(m.add(d.dst),u.push({id:d.dst,title:String(n.getNode(d.dst)?.content.title??"")}));return{source_id:e,old_head:o,new_head:i,diff:r,...l?{truncated:!0}:{},prior_ucs:u}}function de(t,e,n){let i=t.getNode(e)?.content??{},s=t.getNode(n)?.content??{},o=[...new Set([...Object.keys(i),...Object.keys(s)])].sort().filter(p=>JSON.stringify(i[p])!==JSON.stringify(s[p]));return o.length>0?`updated: ${o.join(", ")}`:"updated"}function le(t,e,n,i,s,f,o){let p=new Set((o?.rows??[]).map(a=>a.matched_cid).filter(a=>!!a)),g=[];for(let[a,h]of n.superseded)h===null||a===h||e.superseded.has(a)||n.nodeLabel.get(a)===v.USECASE&&g.push({kind:"MODIFY",ref:y(n,a),old_cid:a,new_cid:h,summary:de(n,a,h)});let r=f.map(a=>({kind:"ADD",ref:y(n,a),cid:a}));for(let a of o?.rows??[])a.kind==="MODIFY"&&a.matched_cid?g.push({kind:"MODIFY",ref:y(n,a.matched_cid),old_cid:a.matched_cid,new_cid:null,summary:`${a.why} (staged)`}):a.kind==="ADD"&&r.push({kind:"ADD",ref:a.title,cid:null});let l=[],m=D(t,n,s),u=new Map;for(let{cid:a}of n.byLabel(v.USECASE)){if(!M(n,a)||p.has(a))continue;let h=n.derivesInto(a),R=h.filter(_=>String(_.props.source_id)===i);R.length===0||R.some(_=>_.props.source_cid===s)||R.some(_=>{let c=String(_.props.anchor),w=L(c);return w?.kind==="img-whole"?!1:w?.kind==="img-part"?oe(n,_,s):m!==null&&se(t,n,_,m,u)})||h.some(_=>{let c=String(_.props.source_id);if(c===i)return!1;let w=n.heads.get(c);return w!=null})||l.push({kind:"ARCHIVE",ref:y(n,a),cid:a,why:`evidence decayed: no quote from ${i} relocates into @${C(s)}, no other live source, no fresh evidence this run`,impact:W(n,n.tipOf(a))})}let d=(a,h)=>a.ref<h.ref?-1:a.ref>h.ref?1:0;return[...g.sort(d),...r.sort(d),...l.sort(d)]}function Ee(t,e,n,i,s){let f=e.rows.find(d=>d.temp_ref===n);if(!f)return{ok:!1,message:`held item ${n} missing from the plan artifact`};let o=f,p=k(t);if(o.matched_cid){let d=p.tipOf(o.matched_cid);if(p.superseded.get(d)===null)return{ok:!1,message:`use-case for "${o.title}" was retired meanwhile \u2014 nothing to update`};d!==o.matched_cid&&(o={...o,matched_cid:d,uc:{...o.uc,matches_existing:{cid:d}}})}let g=s?{edited:s}:"approve",r=ee(t,p,{source_id:e.source_id,...e.staged_source_cid!==void 0?{staged_source_cid:e.staged_source_cid}:{},rows:[o]},new Map([[o.temp_ref,g]]),i);if(r.errors)return{ok:!1,message:r.errors.map(d=>`${d.code}: ${d.detail}`).join("; ")};let l=k(t),m=o.matched_cid?l.tipOf(o.matched_cid):r.record?.nodes.find(d=>d.label==="usecase")?.cid??r.record?.review[0]?.id;return{ok:!0,ref:m?y(l,m):o.title,kind:o.kind}}async function Re(t,e,n,i={}){let s=k(t),f=s.heads.get(e)??null,o=new Set(s.staleList().filter(c=>c.state==="stale").map(c=>c.cid)),p=await n.reingest(e);if(p.status==="unchanged"&&!i.resumeHeld)return{source_id:e,changed:!1,head:{status:p.status,before:f,after:p.cid},note:`nothing to reconcile \u2014 ${e} is unchanged`,skipped_arms:q,changeset:[],rows:[]};let g=i.resumeHeld?{minted:[],matched:[],held:i.resumeHeld}:await n.reextract(e),r=k(t),l=g.minted.map(c=>{let w=y(r,c);return{kind:"ADD",origin:"content-change",ref:w,reason:`new use-case extracted from ${e}`,provenance:`extraction commit \u2014 DERIVES ${e} @ ${C(p.cid)}`,action:`kane-cli design tests --use-case ${w}`}}),m=r.staleList().filter(c=>c.state==="stale"&&!o.has(c.cid)&&M(r,c.cid)).map(c=>c.cid),u=m.map(c=>{let w=y(r,c),E=ne.has(r.nodeLabel.get(c)??"");return{kind:"MODIFY",origin:"structural-stale",ref:w,reason:"stale (structural)",provenance:z(r,c),action:E?`kane-cli maintain evolve ${w}`:`kane-cli design explain ${w}`}}),d=[],a=[];for(let c of g.held?.rows??[])if(c.kind==="ADD")d.push({kind:"ADD",origin:"content-change",ref:c.title,held_ref:c.temp_ref,reason:`${c.why} (staged \u2014 commits on approval)`,provenance:`staged extraction of ${e} @ ${C(p.cid)}`,action:"approve to commit + design"});else{let w=c.matched_cid?r.tipOf(c.matched_cid):null,E=w?r.getNode(w)?.content.criteria??[]:[],T=(c.uc.updated?.criteria??[]).map(O=>typeof O=="string"?O:O.text),Z=[...T.filter(O=>!E.includes(O)),...c.uc.updated?.criteria!==void 0?E.filter(O=>!T.includes(O)):[]],P=w?W(r,w,Z):void 0;a.push({kind:"MODIFY",origin:"content-change",ref:c.matched_cid?y(r,c.matched_cid):c.title,held_ref:c.temp_ref,reason:`${c.why} (staged \u2014 commits on approval)`,provenance:`staged extraction of ${e} @ ${C(p.cid)}`,action:"approve to commit the updated version (old\u2192new redirect)",...P?{impact:P}:{}})}let h=new Set;for(let c of[...g.minted,...g.matched])h.add(r.tipOf(c));for(let c of g.held?.rows??[])c.matched_cid&&h.add(r.tipOf(c.matched_cid));for(let c of m){let w=X(r,r.tipOf(c));w&&r.nodeLabel.get(w)===v.USECASE&&h.add(r.tipOf(w))}let R=[];for(let c of await F(r,"design")){if(c.kind!=="no-verifies")continue;let w=r.resolve(c.ref);if(!w)continue;let E=X(r,w.tip);!E||!h.has(r.tipOf(E))||R.push({kind:"ADD",origin:"content-change",ref:c.ref,reason:c.why,provenance:`gaps engine (design) \u2014 uncovered AC of touched use-case ${y(r,E)}`,action:c.ready_command})}let b=[];for(let{cid:c}of r.byLabel(v.USECASE))M(r,c)&&r.stale(c)==="orphaned"&&b.push({kind:"REMOVE",ref:y(r,c),reason:"orphaned \u2014 no live source evidences this use-case",provenance:z(r,c),action:"plan-only \u2014 REMOVE is not executed in this release"});let S=new Set,_=[...l.sort($),...d.sort($),...R.sort($),...a.sort($),...u.sort($),...b.sort($)].filter(c=>{let w=`${c.kind}\0${c.ref}`;return S.has(w)?!1:(S.add(w),!0)});return{source_id:e,changed:!0,head:{status:p.status,before:f,after:p.cid},note:te,skipped_arms:q,changeset:le(t,s,r,e,p.cid,g.minted,g.held),rows:_,...g.held?{held:g.held}:{}}}function ye(t,e){return async n=>{let{ingestFile:i}=await import("./ingest-WTPY2VLS.js"),{convertPdf:s}=await import("./pdf-convert-OZIRUADA.js"),{convertDocx:f}=await import("./docx-convert-BIV5T7F5.js"),o=await i({contextDir:t,filePath:e,asId:n,converters:{pdf:s,docx:f}});return{status:o.status,cid:o.cid}}}function be(t,e,n,i){return async()=>{let f=(i??(await import("./dispatch-NE35HS5F.js")).findProvider)(e);if(!f)throw new Error(`the remote re-ingest failed \u2014 no provider matches '${e}'`);let o=await f.ingest(e,void 0,{out:n.out,err:n.err,confirm:async()=>!0,isTTY:!1},t,void 0);if(o.code!==0||!o.result)throw new Error("the remote re-ingest failed \u2014 fix the reported problem and re-run");return{status:o.result.status,cid:o.result.source_cid}}}function xe(t,e={}){return async n=>{let i=[],[{runExtract:s},{resolveAgentAuthEnv:f},{runAgent:o},{preflightTurn:p}]=await Promise.all([import("./run-PZIYMD35.js"),import("./spawner-URQ5OAY7.js"),import("./bridge-WFSSMJ57.js"),import("./turn-preflight-JGYT7LXP.js")]),g=await f(),r=new Set(k(t).byLabel(v.USECASE).map(S=>S.cid)),l=ae(t,n)??void 0,m=0,u=await s({mode:"override",source:n,...l?{changeContext:l}:{}},{contextDir:t,agent:o,preflightTurn:()=>p(g),ask:async()=>[],review:async S=>{if(!e.stage)return new Map(S.map(c=>[c.temp_ref,{resolution:c.matches_existing&&c.changed?"edited":"skipped"}]));let _=new Map;for(let c of S){if(c.matches_existing&&!c.changed){_.set(c.temp_ref,{resolution:"skipped"});continue}i.push({kind:c.matches_existing?"MODIFY":"ADD",temp_ref:c.temp_ref,title:c.title,why:c.matches_existing?`updated: ${Object.keys(c.updated??{}).join(", ")||"content"}`:`newly extracted from ${n}`,...c.matches_existing?{matched_cid:c.matches_existing.cid,updated:c.updated}:{},uc:c}),_.set(c.temp_ref,{resolution:"rejected"})}return _},confirmStale:async()=>!1,out:S=>e.hostOut?.(S),progress:S=>e.hostProgress?.(S),emit:S=>{S.type==="commit"&&typeof S.assumed=="number"&&(m+=S.assumed),e.hostEmit?.(S)},isTTY:!1,auth:g});if(u!==0)throw new Error(`reconcile: re-extract of ${n} failed (exit ${u})`);let d=k(t),a=d.heads.get(n),h=[],R=[];if(typeof a=="string"){let S=new Set;for(let _ of d.edgesFrom(a))_.type!==x.DERIVES||d.nodeLabel.get(_.dst)!==v.USECASE||S.has(_.dst)||(S.add(_.dst),!(e.stage&&d.trust.get(_.dst)==="archived")&&(r.has(_.dst)?R:h).push(_.dst))}let b=k(t).heads.get(n);return{minted:h,matched:R,defaultsTaken:m,...e.stage?{held:{source_id:n,...b!=null?{staged_source_cid:b}:{},rows:i}}:{}}}}export{ee as a,W as b,q as c,te as d,M as e,X as f,ne as g,re as h,ce as i,ae as j,Ee as k,Re as l,ye as m,be as n,xe as o};
@@ -1,6 +1,6 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as W}from"./chunk-MSGW4JDG.js";import{d as U,e as F}from"./chunk-4JOD47QI.js";import{a as H}from"./chunk-DWHXXPDX.js";import{createHash as Y}from"crypto";import{access as Q,mkdir as S,mkdtemp as Z,readdir as O,readFile as y,rename as N,rm as v,writeFile as x}from"fs/promises";import{homedir as tt}from"os";import{arch as et,platform as st}from"process";import{dirname as C,isAbsolute as nt,join as l,relative as X,resolve as rt,sep as it}from"path";var q=1,ot={emulator:"emulator",simulator:"simulator"};function Pt(i){return ot[i.kind]??null}var j=class extends Error{constructor(s,e,n){super([`Managed mobile dependencies for ${s} are not installed.`,`- kaneai-mobile-deps ${s} ${e.bundleVersion}: ${e.url} (${_(e.bytes)})`,`Destination: ${n}`,`Run \`kane-cli doctor --target ${s} --install\` to download it.`].join(`
3
- `));this.deviceClass=s;this.name="DepsInstallRequiredError"}};function _(i){return i>=1024*1024?`${Math.ceil(i/(1024*1024))} MB`:`${i} bytes`}function at(i){let t=i/1048576;return t>=10?`${Math.round(t)} MB/s`:t>=1?`${t.toFixed(1)} MB/s`:`${Math.max(1,Math.round(i/1024))} KB/s`}function lt(i){let t=Math.max(1,Math.round(i));return t<60?`~${t}s left`:`~${Math.floor(t/60)}m ${t%60}s left`}var K=8*1024*1024,ct=8;function ut(i){if(!Number.isFinite(i)||i<2*K)return null;let t=Math.min(ct,Math.floor(i/K)),s=Math.ceil(i/t),e=[];for(let n=0;n<i;n+=s)e.push({start:n,end:Math.min(n+s,i)-1});return e}async function L(i,t){let s=i.body;if(!s||typeof s.getReader!="function"){let c=new Uint8Array(await i.arrayBuffer());return t?.(c.length),c}let e=s.getReader(),n=[],r=0;for(;;){let{done:c,value:h}=await e.read();if(c)break;h&&(n.push(h),r+=h.length,t?.(h.length))}let o=new Uint8Array(r),a=0;for(let c of n)o.set(c,a),a+=c.length;return o}var z=3,dt=3e4,k=class extends Error{};async function pt(i,t,s,e,n,r=dt){let o=new Uint8Array(s),a=0,c=new AbortController,h=null,b=!1;try{await Promise.all(e.map(async(f,M)=>{let P=0,V=d=>{P+=d,a+=d,n?.(a)},T=()=>{a=Math.max(0,a-P),P=0},R=null;for(let d=0;d<z;d+=1){if(c.signal.aborted)return;let u=new AbortController,m=()=>u.abort();c.signal.addEventListener("abort",m,{once:!0});let w=!1,g=null,$=()=>{g&&clearTimeout(g),g=setTimeout(()=>{w=!0,u.abort()},r)};try{$();let p=await i(t,{headers:{Range:`bytes=${f.start}-${f.end}`},signal:u.signal});if(typeof p.body?.getReader!="function"&&g&&(clearTimeout(g),g=null),!p.ok)throw new k(`Could not download ${t}: HTTP ${p.status}`);if(p.status!==206){b=!0,M===0?h=await L(p,I=>{$(),V(I)}):await(p.body?.cancel().catch(()=>{})??Promise.resolve());return}let D=f.end-f.start+1,E=await L(p,I=>{$(),V(I)});if(E.length!==D)throw new Error(`range ${f.start}-${f.end} returned ${E.length} bytes (expected ${D})`);o.set(E,f.start);return}catch(p){if(p instanceof k)throw p;if(c.signal.aborted)return;T(),R=w?new Error(`no data for ${Math.round(r/1e3)}s`):p instanceof Error?p:new Error(String(p))}finally{g&&clearTimeout(g),c.signal.removeEventListener("abort",m)}}throw new Error(`Could not download ${t}: range ${f.start}-${f.end} failed after ${z} attempts (${R?.message??"unknown error"}) \u2014 check your network and rerun \`kane-cli doctor --target <emulator|simulator> --install\`.`)}))}catch(f){throw c.abort(),f}return h||(b?null:o)}async function ht(i,t,s,e,n){let r=ut(s);if(r){let c=await pt(i,t,s,r,e,n?.stallMs);if(c)return c}let o=await i(t);if(!o.ok)throw new Error(`Could not download ${t}: HTTP ${o.status}`);let a=0;return L(o,e&&(c=>{a+=c,e(a)}))}function ft(i){return Y("sha256").update(i).digest("hex")}function mt(i,t){let s=X(i,t);return s!==""&&!s.startsWith(`..${it}`)&&s!==".."&&!nt(s)}async function A(i){try{return await Q(i),!0}catch{return!1}}function wt(){return{home:tt(),os:st,arch:et,cliVersion:H,nodeModuleVersion:process.versions.modules,fetch,resolveBundle:async i=>(await import("./deps-resolve-RXF3JWAP.js")).controllerResolveBundle()(i),exec:U,now:()=>new Date,wait:F,processAlive:i=>{try{return process.kill(i,0),!0}catch{return!1}}}}var B=class extends Error{constructor(s,e,n){super(`No managed mobile dependencies are published for ${s} (kane-cli ${e}).
2
+ import{d as W}from"./chunk-MSGW4JDG.js";import{d as U,e as F}from"./chunk-4JOD47QI.js";import{a as H}from"./chunk-DEUDRSU7.js";import{createHash as Y}from"crypto";import{access as Q,mkdir as S,mkdtemp as Z,readdir as O,readFile as y,rename as N,rm as v,writeFile as x}from"fs/promises";import{homedir as tt}from"os";import{arch as et,platform as st}from"process";import{dirname as C,isAbsolute as nt,join as l,relative as X,resolve as rt,sep as it}from"path";var q=1,ot={emulator:"emulator",simulator:"simulator"};function Pt(i){return ot[i.kind]??null}var j=class extends Error{constructor(s,e,n){super([`Managed mobile dependencies for ${s} are not installed.`,`- kaneai-mobile-deps ${s} ${e.bundleVersion}: ${e.url} (${_(e.bytes)})`,`Destination: ${n}`,`Run \`kane-cli doctor --target ${s} --install\` to download it.`].join(`
3
+ `));this.deviceClass=s;this.name="DepsInstallRequiredError"}};function _(i){return i>=1024*1024?`${Math.ceil(i/(1024*1024))} MB`:`${i} bytes`}function at(i){let t=i/1048576;return t>=10?`${Math.round(t)} MB/s`:t>=1?`${t.toFixed(1)} MB/s`:`${Math.max(1,Math.round(i/1024))} KB/s`}function lt(i){let t=Math.max(1,Math.round(i));return t<60?`~${t}s left`:`~${Math.floor(t/60)}m ${t%60}s left`}var K=8*1024*1024,ct=8;function ut(i){if(!Number.isFinite(i)||i<2*K)return null;let t=Math.min(ct,Math.floor(i/K)),s=Math.ceil(i/t),e=[];for(let n=0;n<i;n+=s)e.push({start:n,end:Math.min(n+s,i)-1});return e}async function L(i,t){let s=i.body;if(!s||typeof s.getReader!="function"){let c=new Uint8Array(await i.arrayBuffer());return t?.(c.length),c}let e=s.getReader(),n=[],r=0;for(;;){let{done:c,value:h}=await e.read();if(c)break;h&&(n.push(h),r+=h.length,t?.(h.length))}let o=new Uint8Array(r),a=0;for(let c of n)o.set(c,a),a+=c.length;return o}var z=3,dt=3e4,k=class extends Error{};async function pt(i,t,s,e,n,r=dt){let o=new Uint8Array(s),a=0,c=new AbortController,h=null,b=!1;try{await Promise.all(e.map(async(f,M)=>{let P=0,V=d=>{P+=d,a+=d,n?.(a)},T=()=>{a=Math.max(0,a-P),P=0},R=null;for(let d=0;d<z;d+=1){if(c.signal.aborted)return;let u=new AbortController,m=()=>u.abort();c.signal.addEventListener("abort",m,{once:!0});let w=!1,g=null,$=()=>{g&&clearTimeout(g),g=setTimeout(()=>{w=!0,u.abort()},r)};try{$();let p=await i(t,{headers:{Range:`bytes=${f.start}-${f.end}`},signal:u.signal});if(typeof p.body?.getReader!="function"&&g&&(clearTimeout(g),g=null),!p.ok)throw new k(`Could not download ${t}: HTTP ${p.status}`);if(p.status!==206){b=!0,M===0?h=await L(p,I=>{$(),V(I)}):await(p.body?.cancel().catch(()=>{})??Promise.resolve());return}let D=f.end-f.start+1,E=await L(p,I=>{$(),V(I)});if(E.length!==D)throw new Error(`range ${f.start}-${f.end} returned ${E.length} bytes (expected ${D})`);o.set(E,f.start);return}catch(p){if(p instanceof k)throw p;if(c.signal.aborted)return;T(),R=w?new Error(`no data for ${Math.round(r/1e3)}s`):p instanceof Error?p:new Error(String(p))}finally{g&&clearTimeout(g),c.signal.removeEventListener("abort",m)}}throw new Error(`Could not download ${t}: range ${f.start}-${f.end} failed after ${z} attempts (${R?.message??"unknown error"}) \u2014 check your network and rerun \`kane-cli doctor --target <emulator|simulator> --install\`.`)}))}catch(f){throw c.abort(),f}return h||(b?null:o)}async function ht(i,t,s,e,n){let r=ut(s);if(r){let c=await pt(i,t,s,r,e,n?.stallMs);if(c)return c}let o=await i(t);if(!o.ok)throw new Error(`Could not download ${t}: HTTP ${o.status}`);let a=0;return L(o,e&&(c=>{a+=c,e(a)}))}function ft(i){return Y("sha256").update(i).digest("hex")}function mt(i,t){let s=X(i,t);return s!==""&&!s.startsWith(`..${it}`)&&s!==".."&&!nt(s)}async function A(i){try{return await Q(i),!0}catch{return!1}}function wt(){return{home:tt(),os:st,arch:et,cliVersion:H,nodeModuleVersion:process.versions.modules,fetch,resolveBundle:async i=>(await import("./deps-resolve-MPLFFCZZ.js")).controllerResolveBundle()(i),exec:U,now:()=>new Date,wait:F,processAlive:i=>{try{return process.kill(i,0),!0}catch{return!1}}}}var B=class extends Error{constructor(s,e,n){super(`No managed mobile dependencies are published for ${s} (kane-cli ${e}).
4
4
  This is a packaging gap, not something to install locally \u2014 report it, or pass --appium-url to use an Appium server you manage yourself.`);this.coordinate=s;this.cause=n;this.name="NoPublishedBundleError"}},J=class i{deps;constructor(t={}){this.deps={...wt(),...t}}mobileRoot(){return l(this.deps.home,".testmuai","kaneai","mobile")}depsRoot(){return l(this.mobileRoot(),"deps")}classRoot(t,s){return l(this.depsRoot(),s,t)}resolveCacheFile(){return l(this.depsRoot(),"resolve-cache.json")}resolveCacheKey(t){return`${this.deps.cliVersion}|${this.deps.os}-${this.deps.arch}-${t}`}static RESOLVE_CACHE_TTL_MS=1440*60*1e3;async readCachedWantedVersion(t){try{let e=JSON.parse(await y(this.resolveCacheFile(),"utf8"))[this.resolveCacheKey(t)];if(!e?.bundleVersion||!e.fetchedAt)return null;let n=this.deps.now().getTime()-new Date(e.fetchedAt).getTime();return n>=0&&n<i.RESOLVE_CACHE_TTL_MS?e.bundleVersion:null}catch{return null}}async writeResolveCache(t,s){try{let e={};try{e=JSON.parse(await y(this.resolveCacheFile(),"utf8"))}catch{}e[this.resolveCacheKey(t)]={bundleVersion:s,fetchedAt:this.deps.now().toISOString()},await S(this.depsRoot(),{recursive:!0}),await x(this.resolveCacheFile(),`${JSON.stringify(e,null,2)}
5
5
  `)}catch{}}async warmResolveCache(t){if(await this.readCachedWantedVersion(t)===null)try{await this.resolveOrExplain(t)}catch{}}paths(t,s){let e=this.classRoot(t,s);return{root:e,appium:l(e,"appium"),appiumHome:l(e,"appium-home"),platformTools:l(e,"platform-tools"),wdaDir:l(e,"wda","Build","Products","Debug-iphonesimulator"),iwdpBinDir:l(e,"bin"),installManifest:l(e,"install-manifest.json")}}async status(t,s){s||(s=await this.readCachedWantedVersion(t)??void 0);let e=[];try{e=await O(this.depsRoot())}catch{}s&&(e=e.filter(c=>c===s));let n=null;for(let c of e){let h=this.classRoot(t,c),b=null;try{b=JSON.parse(await y(l(h,"install-manifest.json"),"utf8"))}catch{continue}b.schemaVersion===q&&(!s&&b.cliVersion!==this.deps.cliVersion||(!n||b.installedAt>n.manifest.installedAt)&&(n={manifest:b,root:h}))}if(!n)return{class:t,installed:!1};let r=this.paths(t,n.manifest.bundleVersion),o=[l(r.appium,"node_modules","appium","index.js")];t==="emulator"&&o.push(l(r.platformTools,this.deps.os==="win32"?"adb.exe":"adb")),t==="simulator"&&o.push(l(r.wdaDir,"WebDriverAgentRunner-Runner.app"));for(let c of o)if(!await A(c))return{class:t,installed:!1,version:n.manifest.bundleVersion,root:n.root,corrupt:`a bundle component is missing from disk (${X(n.root,c)})`};let a=await this.postInstallDrifted(r);return{class:t,installed:!0,version:n.manifest.bundleVersion,root:n.root,...a?{needsRepair:a}:{}}}async postInstallDrifted(t){let s=l(t.appiumHome,"node_modules",".cache","appium","extensions.yaml");if(!await A(s))return!1;let e=await y(s,"utf8");for(let n of e.split(`
6
6
  `)){let r=/^\s*installPath:\s*(.+?)\s*$/.exec(n);if(r&&!r[1].startsWith(t.appiumHome))return!0}return!1}async environment(t){let s=await this.status(t);if(!s.installed||!s.version)return{dirs:[]};let e=this.paths(t,s.version),n=[],r={dirs:n,appiumHome:e.appiumHome};return t!=="simulator"&&(n.push(e.platformTools),r.platformToolsDir=e.platformTools),n.push(l(e.appium,"node_modules",".bin")),t==="simulator"&&(n.push(e.iwdpBinDir),r.wdaDir=e.wdaDir,r.wdaRoot=l(e.root,"wda"),r.iwdpBinDir=e.iwdpBinDir),r}async ensure(t,s){let e,n;try{e=await this.resolveOrExplain(t)}catch(a){n=a}let r=await this.status(t,e?.bundleVersion);if(r.installed&&!r.needsRepair)return e&&r.version&&await this.adoptInstall(t,r.version),r;if(!e)throw n;if(r.installed&&r.needsRepair&&r.version){let a=this.paths(t,r.version);return await this.withInstallLock(async()=>{await this.postInstall(a.root,a,s.onProgress)}),await this.adoptInstall(t,r.version),this.status(t,e.bundleVersion)}let o=e;if(!s.automatic&&!s.approved)throw new j(t,o,this.classRoot(t,o.bundleVersion));return await this.withInstallLock(async()=>{(await this.status(t,o.bundleVersion)).installed||await this.install(t,o,s.onProgress)}),this.status(t,o.bundleVersion)}async adoptInstall(t,s){try{let e=this.paths(t,s).installManifest,n=JSON.parse(await y(e,"utf8"));if(n.cliVersion===this.deps.cliVersion)return;n.cliVersion=this.deps.cliVersion;let r=l(C(e),`install-manifest-${process.pid}.json`);await x(r,`${JSON.stringify(n,null,2)}
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as ae}from"./chunk-MMBBQ4OZ.js";import{j as R}from"./chunk-OR6M5HCV.js";import{c as ie,e as ne,i as re,j as K}from"./chunk-Z7S3IWUX.js";import{d as $,e as oe}from"./chunk-4JOD47QI.js";import{a as se}from"./chunk-RZ4F3BHX.js";import{spawn as Xe}from"child_process";import{closeSync as ze,existsSync as Ge,mkdirSync as We,openSync as Ye,readFileSync as Ze,rmSync as Qe}from"fs";import{homedir as ge}from"os";import{dirname as z,join as A}from"path";import{access as Re,mkdir as de,readFile as Le}from"fs/promises";import{homedir as Ce}from"os";import{arch as Fe,platform as Be}from"process";import{join as _}from"path";var Ue=35,qe="google_apis",Ve="KaneCLI_Pixel_API35",He="KaneAI_Pixel_API35";function Ht(t){return t===He?Ve:t}var je=1;function Ke(t,e){return t==="darwin"&&e==="arm64"?"arm64-v8a":"x86_64"}function Je(){return{home:Ce(),os:Be,arch:Fe}}async function le(t){try{return await Re(t),!0}catch{return!1}}var J=class{deps;constructor(e={}){this.deps={...Je(),...e}}paths(){let e=_(this.deps.home,".testmuai","kaneai","mobile"),r=_(e,"android-sdk");return{root:r,emulatorDir:_(r,"emulator"),systemImageDir:_(r,"system-images",`android-${Ue}`,qe,Ke(this.deps.os,this.deps.arch)),avdHome:_(e,"avd"),manifest:_(r,"sdk-manifest.json")}}environment(){let e=this.paths();return{ANDROID_HOME:e.root,ANDROID_SDK_ROOT:e.root,ANDROID_AVD_HOME:e.avdHome}}async ensureSdkRootMarkers(){let e=this.paths().root;await de(_(e,"platforms"),{recursive:!0}),await de(_(e,"platform-tools"),{recursive:!0})}async status(){let e=this.paths(),r=null;try{r=JSON.parse(await Le(e.manifest,"utf8"))}catch{}if(!r||r.schemaVersion!==je)return{emulator:!1,systemImage:!1};let o=this.deps.os==="win32"?"emulator.exe":"emulator";return{emulator:!!r.components.emulator&&await le(_(e.emulatorDir,o)),systemImage:!!r.components.systemImage&&await le(_(e.systemImageDir,"system.img"))}}},ue;function F(){return ue??=new J,ue}var G="android",et="http://127.0.0.1:4723/status",tt=2e3,X=(()=>{let t=Number(process.env.KANE_CLI_EMULATOR_BOOT_TIMEOUT_MS);return Number.isFinite(t)&&t>=3e4?t:3e5})(),it=1e3,nt=3e5;var rt=5,ce="Run `kane-cli doctor --target emulator --install` to install the managed Appium tree.",st={device:"ready",unauthorized:"unauthorized",offline:"offline"};function ot(t){let e={};for(let r of t){let o=r.indexOf(":");o<=0||(e[r.slice(0,o)]=r.slice(o+1))}return e}function at(t){let e=[];for(let r of t.split(`
2
+ import{a as ae}from"./chunk-MMBBQ4OZ.js";import{j as R}from"./chunk-4VYWTTT4.js";import{c as ie,e as ne,i as re,j as K}from"./chunk-Z7S3IWUX.js";import{d as $,e as oe}from"./chunk-4JOD47QI.js";import{a as se}from"./chunk-RZ4F3BHX.js";import{spawn as Xe}from"child_process";import{closeSync as ze,existsSync as Ge,mkdirSync as We,openSync as Ye,readFileSync as Ze,rmSync as Qe}from"fs";import{homedir as ge}from"os";import{dirname as z,join as A}from"path";import{access as Re,mkdir as de,readFile as Le}from"fs/promises";import{homedir as Ce}from"os";import{arch as Fe,platform as Be}from"process";import{join as _}from"path";var Ue=35,qe="google_apis",Ve="KaneCLI_Pixel_API35",He="KaneAI_Pixel_API35";function Ht(t){return t===He?Ve:t}var je=1;function Ke(t,e){return t==="darwin"&&e==="arm64"?"arm64-v8a":"x86_64"}function Je(){return{home:Ce(),os:Be,arch:Fe}}async function le(t){try{return await Re(t),!0}catch{return!1}}var J=class{deps;constructor(e={}){this.deps={...Je(),...e}}paths(){let e=_(this.deps.home,".testmuai","kaneai","mobile"),r=_(e,"android-sdk");return{root:r,emulatorDir:_(r,"emulator"),systemImageDir:_(r,"system-images",`android-${Ue}`,qe,Ke(this.deps.os,this.deps.arch)),avdHome:_(e,"avd"),manifest:_(r,"sdk-manifest.json")}}environment(){let e=this.paths();return{ANDROID_HOME:e.root,ANDROID_SDK_ROOT:e.root,ANDROID_AVD_HOME:e.avdHome}}async ensureSdkRootMarkers(){let e=this.paths().root;await de(_(e,"platforms"),{recursive:!0}),await de(_(e,"platform-tools"),{recursive:!0})}async status(){let e=this.paths(),r=null;try{r=JSON.parse(await Le(e.manifest,"utf8"))}catch{}if(!r||r.schemaVersion!==je)return{emulator:!1,systemImage:!1};let o=this.deps.os==="win32"?"emulator.exe":"emulator";return{emulator:!!r.components.emulator&&await le(_(e.emulatorDir,o)),systemImage:!!r.components.systemImage&&await le(_(e.systemImageDir,"system.img"))}}},ue;function F(){return ue??=new J,ue}var G="android",et="http://127.0.0.1:4723/status",tt=2e3,X=(()=>{let t=Number(process.env.KANE_CLI_EMULATOR_BOOT_TIMEOUT_MS);return Number.isFinite(t)&&t>=3e4?t:3e5})(),it=1e3,nt=3e5;var rt=5,ce="Run `kane-cli doctor --target emulator --install` to install the managed Appium tree.",st={device:"ready",unauthorized:"unauthorized",offline:"offline"};function ot(t){let e={};for(let r of t){let o=r.indexOf(":");o<=0||(e[r.slice(0,o)]=r.slice(o+1))}return e}function at(t){let e=[];for(let r of t.split(`
3
3
  `)){let o=r.trim();if(!o||o.startsWith("*"))continue;let u=o.toLowerCase();if(u.startsWith("list of devices")||u.startsWith("adb server"))continue;let g=o.split(/\s+/),f=g[0],v=g[1];if(!f||!v||!f.startsWith("emulator-"))continue;let b=ot(g.slice(2)),S=b.model?b.model.replace(/_/g," "):void 0;e.push({platform:G,kind:"emulator",id:f,displayName:S??f,state:st[v]??"offline"})}return e}function me(t){let e=[];for(let r of t.split(`
4
4
  `)){let o=r.trim();o&&/^[A-Za-z0-9._-]+$/.test(o)&&(e.includes(o)||e.push(o))}return e}function dt(t){for(let e of t.split(`
5
5
  `)){let r=e.trim();if(!(!r||r==="OK"))return r}}function lt(t){let e=/^Version\s+(\S+)/m.exec(t);return e?.[1]?e[1].split("-")[0]:/Android Debug Bridge version\s+(\S+)/.exec(t)?.[1]}function ut(t){let e=[];for(let r of t.split(`
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as f}from"./chunk-AROBXG66.js";import{x as t}from"./chunk-DWHXXPDX.js";import{a as x}from"./chunk-HCBYKLMW.js";import{a,b as n}from"./chunk-C44QQJR4.js";import{a as R}from"./chunk-6YGTRKDT.js";import{e as c}from"./chunk-UR6MHSHU.js";var p=c(R(),1);var e=c(x(),1);function v(){return[{name:"convert",label:"Converting session data",status:"pending"},{name:"zip",label:"Compressing artifacts",status:"pending"},{name:"presign",label:"Requesting upload URLs",status:"pending"},{name:"upload",label:"Uploading to KaneAI",status:"pending"},{name:"atomic_replace",label:"Replacing local output",status:"pending"},{name:"commit_lock",label:"Committing to TMS",status:"pending"},{name:"finalize",label:"Finalizing test case",status:"pending"},{name:"code_export",label:"Downloading test code",status:"pending"}]}function U(s,o,d,i){return s.map(l=>l.name===o?{...l,status:d,detail:i}:l)}function D(s){let o=s/1e3;if(o<60)return`${o.toFixed(1)}s`;let d=Math.floor(o/60),i=Math.round(o%60);return`${d}m ${i}s`}function w(s){let[o,d]=(0,p.useState)(0),i=p.default.useRef(Date.now());return(0,p.useEffect)(()=>{if(!s)return;i.current=Date.now();let l=setInterval(()=>{d(Date.now()-i.current)},100);return()=>clearInterval(l)},[s]),o}function h({steps:s,status:o,testUrl:d,error:i}){let l=w(o==="uploading");return o==="uploading"?(0,e.jsxs)(a,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(n,{color:t.orange,children:"\u2601 "}),(0,e.jsx)(n,{color:t.orange,bold:!0,children:"Saving to KaneAI"}),(0,e.jsxs)(n,{color:t.dim,children:[" ",D(l)]})]}),(0,e.jsx)(a,{flexDirection:"column",marginTop:1,children:s.filter(r=>r.status!=="skipped"||r.detail).map((r,S,T)=>{let b=S===T.length-1?"\u2514\u2500":"\u251C\u2500",u=r.status==="done",m=r.status==="running",g=r.status==="failed",B=r.status==="skipped";return(0,e.jsxs)(a,{children:[(0,e.jsxs)(n,{color:t.dim,children:[" ",b," "]}),(0,e.jsx)(a,{width:3,children:m?(0,e.jsx)(f,{}):u?(0,e.jsx)(n,{color:t.green,children:"\u2713"}):g?(0,e.jsx)(n,{color:t.red,children:"\u2717"}):B?(0,e.jsx)(n,{color:t.muted,children:"\u2013"}):(0,e.jsx)(n,{color:t.muted,children:"\u25CB"})}),(0,e.jsx)(n,{color:u?t.dim:m?void 0:g?t.red:t.muted,children:r.label}),r.detail&&(0,e.jsxs)(n,{color:t.dim,children:[" ",r.detail]})]},r.name)})}),(0,e.jsx)(a,{marginTop:1,children:(0,e.jsx)(n,{color:t.muted,children:" press Ctrl+C twice to force exit"})})]}):o==="success"?(0,e.jsx)(e.Fragment,{}):(0,e.jsxs)(a,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(n,{color:t.red,children:"\u2601 "}),(0,e.jsx)(n,{color:t.red,bold:!0,children:"Save failed"})]}),i&&(0,e.jsxs)(a,{marginTop:0,children:[(0,e.jsx)(n,{color:t.dim,children:" "}),(0,e.jsx)(n,{color:t.dim,children:i})]})]})}export{v as a,U as b,h as c};
2
+ import{a as f}from"./chunk-A4BDLZOD.js";import{x as t}from"./chunk-DEUDRSU7.js";import{a as x}from"./chunk-HCBYKLMW.js";import{a,b as n}from"./chunk-C44QQJR4.js";import{a as R}from"./chunk-6YGTRKDT.js";import{e as c}from"./chunk-UR6MHSHU.js";var p=c(R(),1);var e=c(x(),1);function v(){return[{name:"convert",label:"Converting session data",status:"pending"},{name:"zip",label:"Compressing artifacts",status:"pending"},{name:"presign",label:"Requesting upload URLs",status:"pending"},{name:"upload",label:"Uploading to KaneAI",status:"pending"},{name:"atomic_replace",label:"Replacing local output",status:"pending"},{name:"commit_lock",label:"Committing to TMS",status:"pending"},{name:"finalize",label:"Finalizing test case",status:"pending"},{name:"code_export",label:"Downloading test code",status:"pending"}]}function U(s,o,d,i){return s.map(l=>l.name===o?{...l,status:d,detail:i}:l)}function D(s){let o=s/1e3;if(o<60)return`${o.toFixed(1)}s`;let d=Math.floor(o/60),i=Math.round(o%60);return`${d}m ${i}s`}function w(s){let[o,d]=(0,p.useState)(0),i=p.default.useRef(Date.now());return(0,p.useEffect)(()=>{if(!s)return;i.current=Date.now();let l=setInterval(()=>{d(Date.now()-i.current)},100);return()=>clearInterval(l)},[s]),o}function h({steps:s,status:o,testUrl:d,error:i}){let l=w(o==="uploading");return o==="uploading"?(0,e.jsxs)(a,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(n,{color:t.orange,children:"\u2601 "}),(0,e.jsx)(n,{color:t.orange,bold:!0,children:"Saving to KaneAI"}),(0,e.jsxs)(n,{color:t.dim,children:[" ",D(l)]})]}),(0,e.jsx)(a,{flexDirection:"column",marginTop:1,children:s.filter(r=>r.status!=="skipped"||r.detail).map((r,S,T)=>{let b=S===T.length-1?"\u2514\u2500":"\u251C\u2500",u=r.status==="done",m=r.status==="running",g=r.status==="failed",B=r.status==="skipped";return(0,e.jsxs)(a,{children:[(0,e.jsxs)(n,{color:t.dim,children:[" ",b," "]}),(0,e.jsx)(a,{width:3,children:m?(0,e.jsx)(f,{}):u?(0,e.jsx)(n,{color:t.green,children:"\u2713"}):g?(0,e.jsx)(n,{color:t.red,children:"\u2717"}):B?(0,e.jsx)(n,{color:t.muted,children:"\u2013"}):(0,e.jsx)(n,{color:t.muted,children:"\u25CB"})}),(0,e.jsx)(n,{color:u?t.dim:m?void 0:g?t.red:t.muted,children:r.label}),r.detail&&(0,e.jsxs)(n,{color:t.dim,children:[" ",r.detail]})]},r.name)})}),(0,e.jsx)(a,{marginTop:1,children:(0,e.jsx)(n,{color:t.muted,children:" press Ctrl+C twice to force exit"})})]}):o==="success"?(0,e.jsx)(e.Fragment,{}):(0,e.jsxs)(a,{flexDirection:"column",paddingX:1,paddingY:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(n,{color:t.red,children:"\u2601 "}),(0,e.jsx)(n,{color:t.red,bold:!0,children:"Save failed"})]}),i&&(0,e.jsxs)(a,{marginTop:0,children:[(0,e.jsx)(n,{color:t.dim,children:" "}),(0,e.jsx)(n,{color:t.dim,children:i})]})]})}export{v as a,U as b,h as c};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{x as n}from"./chunk-DWHXXPDX.js";import{a as s}from"./chunk-HCBYKLMW.js";import{a,b as i}from"./chunk-C44QQJR4.js";import{e as r}from"./chunk-UR6MHSHU.js";var o=r(s(),1);function g({bindings:c,suppressEscBack:p=!1,escBackLabel:m="back to chat"}){let e=c.map(t=>`${t.keys} ${t.label}`);return p||e.push(`esc \xB7 ${m}`),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(i,{color:n.dim,children:e.join(" \xB7 ")})})}export{g as a};
2
+ import{x as n}from"./chunk-DEUDRSU7.js";import{a as s}from"./chunk-HCBYKLMW.js";import{a,b as i}from"./chunk-C44QQJR4.js";import{e as r}from"./chunk-UR6MHSHU.js";var o=r(s(),1);function g({bindings:c,suppressEscBack:p=!1,escBackLabel:m="back to chat"}){let e=c.map(t=>`${t.keys} ${t.label}`);return p||e.push(`esc \xB7 ${m}`),(0,o.jsx)(a,{marginTop:1,children:(0,o.jsx)(i,{color:n.dim,children:e.join(" \xB7 ")})})}export{g as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as u,b as x}from"./chunk-SJBIXLL3.js";import{x as m}from"./chunk-DWHXXPDX.js";import{a as f}from"./chunk-HCBYKLMW.js";import{a as r,b as i}from"./chunk-C44QQJR4.js";import{e as n}from"./chunk-UR6MHSHU.js";var e=n(f(),1);function C({title:B,titleColor:c,borderColor:d,variant:p,rows:s,footer:t,labelWidth:l=14,marginBottom:b=1}){return(0,e.jsxs)(u,{title:B,titleColor:c,borderColor:d,variant:p,marginBottom:b,children:[s.map((o,a)=>typeof o.value=="string"?(0,e.jsx)(x,{label:o.label,value:o.value,valueColor:o.valueColor,labelWidth:l},`${o.label}-${a}`):(0,e.jsxs)(r,{children:[(0,e.jsx)(r,{width:l,children:(0,e.jsx)(i,{color:m.dim,children:o.label})}),o.value]},`${o.label}-${a}`)),t&&(0,e.jsx)(r,{marginTop:1,children:t})]})}export{C as a};
2
+ import{a as u,b as x}from"./chunk-A76UL3EN.js";import{x as m}from"./chunk-DEUDRSU7.js";import{a as f}from"./chunk-HCBYKLMW.js";import{a as r,b as i}from"./chunk-C44QQJR4.js";import{e as n}from"./chunk-UR6MHSHU.js";var e=n(f(),1);function C({title:B,titleColor:c,borderColor:d,variant:p,rows:s,footer:t,labelWidth:l=14,marginBottom:b=1}){return(0,e.jsxs)(u,{title:B,titleColor:c,borderColor:d,variant:p,marginBottom:b,children:[s.map((o,a)=>typeof o.value=="string"?(0,e.jsx)(x,{label:o.label,value:o.value,valueColor:o.valueColor,labelWidth:l},`${o.label}-${a}`):(0,e.jsxs)(r,{children:[(0,e.jsx)(r,{width:l,children:(0,e.jsx)(i,{color:m.dim,children:o.label})}),o.value]},`${o.label}-${a}`)),t&&(0,e.jsx)(r,{marginTop:1,children:t})]})}export{C as a};
@@ -1,3 +1,3 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as Ee}from"./chunk-KGKJU27A.js";import{a as he,b as _e,d as be,e as Se}from"./chunk-BB2W35TW.js";import{a as me}from"./chunk-DNNZ353O.js";import{B as le,c as fe,h as ue,o as pe}from"./chunk-W3Z7AZNT.js";import{a as ge}from"./chunk-JQW2QFSX.js";import{a as ce,b as K}from"./chunk-UH2ZTX4E.js";import{g as de,j as ae}from"./chunk-XMTSHHYQ.js";import{d as u,e as p,f as ie,g as oe,h as re}from"./chunk-AKX4VRRR.js";var Ce=/\s@verifies\s+(ac-[\w.:\/-]+(?:\s*,\s*ac-[\w.:\/-]+)*)\s*$/,N=r=>({record:null,errors:r,minted:{},logicalIds:{},superseded:[],warnings:[],finalizedTests:{}});function w(r){return r.toLowerCase().trim().replace(/\s+/g," ")}function ke(r,I){let t=r.resolve(I);if(!t||r.nodeLabel.get(t.cid)!==u.USECASE||t.superseded)return[];let m=new Set;for(let{cid:g}of r.byLabel(u.SCENARIO))if(!r.superseded.has(g)&&r.edgesFrom(g).some(O=>O.type===p.BELONGS_TO&&r.tipOf(O.dst)===t.cid)){m.add(g);for(let O of r.edgesInto(g))O.type!==p.AUTOMATES||r.superseded.has(O.src)||m.add(O.src)}return[...m]}function Be(r){let{contextDir:I,graph:t,sections:m,by:g}=r,O=r.engine??"design@1",J=de(I);if(t.latestHash!==J)return N([{code:"STALE_BASIS",detail:`graph opened at ${String(t.latestHash)} but chain head is ${String(J)} \u2014 re-open and retry`}]);let D=t.resolve(r.ucRef);if(!D||t.nodeLabel.get(D.cid)!==u.USECASE||D.superseded)return N([{code:"UNKNOWN_UC",detail:`${r.ucRef} is not a live use-case`}]);let S=D.cid,_=[],W=/^design@(\d+)$/.exec(r.templateVersion??""),$e=W!==null&&Number.parseInt(W[1],10)>=3,Q=new Map,ye=(e,s)=>{let n=Q.get(e.source_cid);if(n===void 0){let c=me(r.contextDir,t,e.source_cid);n=c?Ee(c.toString("utf8")):null,Q.set(e.source_cid,n)}if(n===null)return _.push({code:"CITE_UNVERIFIED",detail:`${s}: source ${e.source_id} (${e.source_cid.slice(0,19)}) has no citable text to verify against`}),!1;let d=fe(t.mediaOf(e.source_cid),e,n);if(d.length>0){for(let c of d)_.push({code:"CITE_UNVERIFIED",detail:`${s}: ${c.code}: ${c.detail}`});return!1}return!0},T=[],L=[],y=[],G=[],F=[],E={},x={},j={},k=[],P=[],X=new Set,M=[],q=new Set,R=new Set,V=[];{let e=r.forceScope??(r.force?ke(t,r.ucRef):[]),s=new Set;r.sections.scenarios?.length&&s.add(u.SCENARIO),r.sections.tests?.length&&s.add(u.TEST);for(let n of e)t.superseded.has(n)||(s.has(t.nodeLabel.get(n)??"")?R.add(n):V.push(n))}let A=new Set,z=e=>!t.superseded.has(e)&&(!R.has(e)||A.has(e)),v=(e,s,n)=>{if(E[e])return E[e];let d=t.resolve(e),c=d?z(d.cid)?d.cid:t.tipOf(d.cid):null;return!d||!c||!z(c)?(_.push({code:"UNKNOWN_REF",detail:`${s}: '${e}' is neither in this payload nor a live committed node`}),null):n&&t.nodeLabel.get(c)!==n?(_.push({code:"ILLEGAL_EDGE",detail:`${s}: '${e}' is a ${t.nodeLabel.get(c)}, expected ${n}`}),null):c},ve=(e,s,n,d)=>{if(t.nameOf.has(s)){x[d]=t.nameOf.get(s);return}let c=le(e,h=>X.has(h),t.names.keys());c!==null&&(X.add(c),G.push({cid:s,slug:c,by:g}),x[d]=c)},B=(e,s,n,d)=>{for(let h of ie(e,n))_.push({code:h.code,detail:`${s}: ${h.detail}`});let c=ce(e,n);return t.hasNode(c)&&!t.superseded.has(c)?(R.has(c)&&A.add(c),E[s]=c,c):(T.push({cid:c,label:e,content:n}),E[s]=c,ve(e,c,d,s),c)},$=(e,s,n,d,c)=>{let h=K(e,s,n,d);if(t.edgesFrom(s).some(i=>i.ecid===h&&!t.superseded.has(i.ecid))){e===p.AUTOMATES&&q.add(n);return}if(t.superseded.has(h)){_.push({code:"EDGE_RETRACTED",detail:`${c}: this ${e} edge was retracted (${h}) \u2014 retraction is terminal for commits. Add a NEW relationship (different endpoint or props), redesign, or revert the retracting record`});return}let C=t.nodeLabel.get(s)??T.find(i=>i.cid===s)?.label??"(unknown)",U=t.nodeLabel.get(n)??T.find(i=>i.cid===n)?.label??"(unknown)";for(let i of re(e,C,U,d))_.push({code:i.code,detail:`${c}: ${i.detail}`});let a=ue(t,e,s,n,M);if(a){_.push({code:a.code,detail:`${c}: ${a.detail}`});return}if(e===p.BELONGS_TO||e===p.SCOPED_TO){let i=ge(t,{type:e,src:s,dst:n},{pending:M,retracted:new Set(y.flatMap(o=>o.kind==="edge"?[o.ecid]:[])),freed:new Set([...R].filter(o=>!A.has(o)))},c);if(i){_.push(i);return}}if(e===p.AUTOMATES){if(q.has(n)){_.push({code:"CARDINALITY_VIOLATION",detail:`${c}: two automates onto ${n} in one record (strict 1:1)`});return}if(q.add(n),!R.has(n)||A.has(n)){let i=l=>R.has(l)&&!A.has(l);if(t.edgesFrom(s).some(l=>l.type===p.AUTOMATES&&l.dst!==n&&!t.superseded.has(l.dst)&&!i(l.dst))&&t.hasNode(s)){_.push({code:"CARDINALITY_VIOLATION",detail:`${c}: automates from ${s} already has a live edge \u2014 supersede it first`});return}if(t.edgesInto(n).some(l=>l.type===p.AUTOMATES&&l.src!==s&&!t.superseded.has(l.src)&&!i(l.src))){_.push({code:"CARDINALITY_VIOLATION",detail:`${c}: automates onto ${n} already has a live edge \u2014 strict 1:1, supersede it first`});return}}}L.push({ecid:K(e,s,n,d),type:e,src:s,dst:n,props:d}),M.push({src:s,dst:n,type:e})},H=new Set;for(let e of m.gaps??[]){let s=e.temp_ref??e.ref??"gap",n=e.question;if(!n||typeof n!="object"||!n.header||!Array.isArray(n.options)||n.options.length===0||!Number.isInteger(n.recommended_index)){_.push({code:"GAP_QUESTION_INCOMPLETE",detail:`${s}: design gaps carry a full ranked question object (header/options/recommended_index)`});continue}e.kind==="budget-evicted"&&e.ref&&H.add(e.ref);let d={kind:e.kind,question:n,derived:!0,uc:S,...e.risk?{risk:e.risk}:{},...e.risk_rationale?{risk_rationale:e.risk_rationale}:{},...e.text?{text:e.text}:{},...e.ref?{ref:e.ref}:{}};B(u.GAP,s,d,String(n.header))}let Z=new Map;for(let{cid:e,content:s}of t.byLabel(u.SCENARIO))z(e)&&t.edgesFrom(e).some(n=>n.type===p.BELONGS_TO&&t.tipOf(n.dst)===S)&&Z.set(w(String(s.title??"")),e);for(let e of m.scenarios??[]){let s=Z.get(w(e.title));if(s){_.push({code:"DUPLICATE_SCENARIO",detail:`${e.temp_ref}: '${e.title}' duplicates live scenario ${t.nameOf.get(s)??s} \u2014 exercise/link it instead (reuse before minting)`});continue}let n={title:e.title,intent:e.intent,case_type:e.case_type,derived:!0,...e.technique_notes?{technique_notes:e.technique_notes}:{},...e.description?{description:e.description}:{},...e.parameters?{parameters:e.parameters}:{},...e.tags?{tags:e.tags}:{}};B(u.SCENARIO,e.temp_ref,n,e.title)}for(let e of m.scenarios??[]){let s=E[e.temp_ref];if(s){$(p.BELONGS_TO,s,S,{},e.temp_ref);for(let n of e.depends_on??[]){let d=v(n,`${e.temp_ref}.depends_on`,u.SCENARIO);d&&$(p.DEPENDS_ON,s,d,{},`${e.temp_ref}.depends_on`)}}}for(let e of m.acs??[]){let s={text:e.text,kind:e.kind,risk:e.risk,derived:!0,...e.expected_answer?{expected_answer:e.expected_answer}:{},...e.measurable!==void 0?{measurable:e.measurable}:{}},n=B(u.AC,e.temp_ref,s,e.text);if(!n)continue;let d=e.scope?.type==="scenario"&&e.scope.ref?v(e.scope.ref,`${e.temp_ref}.scope`,u.SCENARIO):S;d&&!t.edgesFrom(n).some(c=>c.type===p.SCOPED_TO&&!t.superseded.has(c.ecid))&&$(p.SCOPED_TO,n,d,{},`${e.temp_ref}.scope`);for(let c of e.cites??[]){if($e&&!ye(c,`${e.temp_ref}.cite`))continue;let h={source_id:c.source_id,source_cid:c.source_cid,anchor:c.anchor,...c.quote?{quote:c.quote}:{}};$(p.DERIVES,c.source_cid,n,h,`${e.temp_ref}.cite`)}}for(let e of m.exercises??[]){let s=v(e.scenario,"exercises.scenario",u.SCENARIO),n=v(e.ac,"exercises.ac",u.AC);s&&n&&$(p.EXERCISES,s,n,{},`exercises ${e.scenario}\u2192${e.ac}`)}let ee=0;for(let e of m.scoped_to_repoints??[]){let s=v(e.ac,"scoped_to_repoints.ac",u.AC),n=v(e.to,"scoped_to_repoints.to");if(!s||!n)continue;let d=t.edgesFrom(s).find(c=>c.type===p.SCOPED_TO&&!t.superseded.has(c.ecid));if(d&&d.dst===n){ee+=1,k.push(`scoped_to_repoints ${e.ac}: already scoped to ${e.to} \u2014 no-op`);continue}d&&y.push({kind:"edge",ecid:d.ecid,reason:`re-scoped to ${e.to} by ${g.id}`,by:g}),$(p.SCOPED_TO,s,n,{},`scoped_to_repoints ${e.ac}`)}let te=new Map;if(r.finalizeTestBody)for(let[e,s]of t.nameOf)te.set(t.tipOf(e),s);let ne=e=>t.nameOf.get(e)??te.get(t.tipOf(e))??null,Oe=e=>{let s=E[e];if(s)return x[e]??ne(s);if(t.names.has(e))return t.resolve(e)?e:null;let n=t.resolve(e);return n?ne(t.tipOf(n.cid)):null};for(let e of m.tests??[]){for(let a of e.reuses??[])H.has(a)&&_.push({code:"REUSES_EVICTED",detail:`${e.temp_ref}: reuses '${a}' which was budget-evicted \u2014 drop the edge; the dependent gap names the missing @import`});{let a=o=>o==="emulator"||o==="simulator"?o:"web",i=o=>{let f=(m.tests??[]).find(Te=>Te.temp_ref===o);if(f)return a(f.target);let l=t.resolve(o),b=l?t.getNode(t.tipOf(l.cid)??l.cid)?.content:void 0;if(typeof b?.target=="string")return a(String(b.target));let se=/^\s*\[mobile:\s*(emulator|simulator)\]/m.exec(String(b?.test_md_blob??""));return se?se[1]:"web"};for(let o of e.reuses??[]){let f=a(e.target),l=i(o);f!==l&&_.push({code:"REUSES_CROSS_SURFACE",detail:`${e.temp_ref}: reuses '${o}' which runs on ${l} while this test runs on ${f} \u2014 a test imports only same-surface units`})}}let s=e.test_md_blob,n=e.definitionId,d=e.objectives_blob;if(r.finalizeTestBody){let a;try{a=r.finalizeTestBody({temp_ref:e.temp_ref,test_md_blob:e.test_md_blob,verifies:e.verifies,reuses:e.reuses??[]},Oe)}catch(i){return N([{code:"FINALIZE_BODY",detail:`${e.temp_ref}: ${i instanceof Error?i.message:String(i)}`}])}a&&(s=a.test_md_blob,n=a.definitionId,d=a.objectives_blob??d,j[e.temp_ref]=n)}let c={title:e.title,check:e.check,definitionId:n,derived:!0,...e.config?{config:e.config}:{},...s?{test_md_blob:s}:{},...d?{objectives_blob:d}:{},...e.surface_required!==void 0?{surface_required:e.surface_required}:{},...e.target?{target:e.target}:{},...e.app&&e.target?{app:e.app}:{}},h=B(u.TEST,e.temp_ref,c,e.title);if(!h)continue;let C=v(e.automates,`${e.temp_ref}.automates`,u.SCENARIO);C&&$(p.AUTOMATES,h,C,{},`${e.temp_ref}.automates`);for(let a of e.verifies){let i=v(a,`${e.temp_ref}.verifies`,u.AC);i&&$(p.VERIFIES,h,i,{},`${e.temp_ref}.verifies`)}for(let a of e.reuses??[]){if(H.has(a))continue;let i=v(a,`${e.temp_ref}.reuses`,u.TEST);i&&$(p.REUSES,h,i,{},`${e.temp_ref}.reuses`)}for(let a of e.verifies){let i=E[a]??t.resolve(a)?.cid;i&&(t.trust.get(i)??"derived")==="derived"&&!T.some(o=>o.cid===i)?k.push(`${e.temp_ref}: verifies ${a} which is still DERIVED (unapproved) \u2014 committed anyway; approve it in chat or via review`):i&&E[a]===i&&(m.acs??[]).some(o=>o.temp_ref===a)&&k.push(`${e.temp_ref}: verifies ${a} minted in this same record (unapproved) \u2014 committed anyway; approve it in chat`)}if(!String(e.test_md_blob??"").split(`
2
+ import{a as Ee}from"./chunk-Z4QLCWLB.js";import{a as he,b as _e,d as be,e as Se}from"./chunk-BB2W35TW.js";import{a as me}from"./chunk-DNNZ353O.js";import{B as le,c as fe,h as ue,o as pe}from"./chunk-R4EGL7VM.js";import{a as ge}from"./chunk-JQW2QFSX.js";import{a as ce,b as K}from"./chunk-TYRTD5DD.js";import{g as de,j as ae}from"./chunk-OXHMUZJV.js";import{d as u,e as p,f as ie,g as oe,h as re}from"./chunk-AKX4VRRR.js";var Ce=/\s@verifies\s+(ac-[\w.:\/-]+(?:\s*,\s*ac-[\w.:\/-]+)*)\s*$/,N=r=>({record:null,errors:r,minted:{},logicalIds:{},superseded:[],warnings:[],finalizedTests:{}});function w(r){return r.toLowerCase().trim().replace(/\s+/g," ")}function ke(r,I){let t=r.resolve(I);if(!t||r.nodeLabel.get(t.cid)!==u.USECASE||t.superseded)return[];let m=new Set;for(let{cid:g}of r.byLabel(u.SCENARIO))if(!r.superseded.has(g)&&r.edgesFrom(g).some(O=>O.type===p.BELONGS_TO&&r.tipOf(O.dst)===t.cid)){m.add(g);for(let O of r.edgesInto(g))O.type!==p.AUTOMATES||r.superseded.has(O.src)||m.add(O.src)}return[...m]}function Be(r){let{contextDir:I,graph:t,sections:m,by:g}=r,O=r.engine??"design@1",J=de(I);if(t.latestHash!==J)return N([{code:"STALE_BASIS",detail:`graph opened at ${String(t.latestHash)} but chain head is ${String(J)} \u2014 re-open and retry`}]);let D=t.resolve(r.ucRef);if(!D||t.nodeLabel.get(D.cid)!==u.USECASE||D.superseded)return N([{code:"UNKNOWN_UC",detail:`${r.ucRef} is not a live use-case`}]);let S=D.cid,_=[],W=/^design@(\d+)$/.exec(r.templateVersion??""),$e=W!==null&&Number.parseInt(W[1],10)>=3,Q=new Map,ye=(e,s)=>{let n=Q.get(e.source_cid);if(n===void 0){let c=me(r.contextDir,t,e.source_cid);n=c?Ee(c.toString("utf8")):null,Q.set(e.source_cid,n)}if(n===null)return _.push({code:"CITE_UNVERIFIED",detail:`${s}: source ${e.source_id} (${e.source_cid.slice(0,19)}) has no citable text to verify against`}),!1;let d=fe(t.mediaOf(e.source_cid),e,n);if(d.length>0){for(let c of d)_.push({code:"CITE_UNVERIFIED",detail:`${s}: ${c.code}: ${c.detail}`});return!1}return!0},T=[],L=[],y=[],G=[],F=[],E={},x={},j={},k=[],P=[],X=new Set,M=[],q=new Set,R=new Set,V=[];{let e=r.forceScope??(r.force?ke(t,r.ucRef):[]),s=new Set;r.sections.scenarios?.length&&s.add(u.SCENARIO),r.sections.tests?.length&&s.add(u.TEST);for(let n of e)t.superseded.has(n)||(s.has(t.nodeLabel.get(n)??"")?R.add(n):V.push(n))}let A=new Set,z=e=>!t.superseded.has(e)&&(!R.has(e)||A.has(e)),v=(e,s,n)=>{if(E[e])return E[e];let d=t.resolve(e),c=d?z(d.cid)?d.cid:t.tipOf(d.cid):null;return!d||!c||!z(c)?(_.push({code:"UNKNOWN_REF",detail:`${s}: '${e}' is neither in this payload nor a live committed node`}),null):n&&t.nodeLabel.get(c)!==n?(_.push({code:"ILLEGAL_EDGE",detail:`${s}: '${e}' is a ${t.nodeLabel.get(c)}, expected ${n}`}),null):c},ve=(e,s,n,d)=>{if(t.nameOf.has(s)){x[d]=t.nameOf.get(s);return}let c=le(e,h=>X.has(h),t.names.keys());c!==null&&(X.add(c),G.push({cid:s,slug:c,by:g}),x[d]=c)},B=(e,s,n,d)=>{for(let h of ie(e,n))_.push({code:h.code,detail:`${s}: ${h.detail}`});let c=ce(e,n);return t.hasNode(c)&&!t.superseded.has(c)?(R.has(c)&&A.add(c),E[s]=c,c):(T.push({cid:c,label:e,content:n}),E[s]=c,ve(e,c,d,s),c)},$=(e,s,n,d,c)=>{let h=K(e,s,n,d);if(t.edgesFrom(s).some(i=>i.ecid===h&&!t.superseded.has(i.ecid))){e===p.AUTOMATES&&q.add(n);return}if(t.superseded.has(h)){_.push({code:"EDGE_RETRACTED",detail:`${c}: this ${e} edge was retracted (${h}) \u2014 retraction is terminal for commits. Add a NEW relationship (different endpoint or props), redesign, or revert the retracting record`});return}let C=t.nodeLabel.get(s)??T.find(i=>i.cid===s)?.label??"(unknown)",U=t.nodeLabel.get(n)??T.find(i=>i.cid===n)?.label??"(unknown)";for(let i of re(e,C,U,d))_.push({code:i.code,detail:`${c}: ${i.detail}`});let a=ue(t,e,s,n,M);if(a){_.push({code:a.code,detail:`${c}: ${a.detail}`});return}if(e===p.BELONGS_TO||e===p.SCOPED_TO){let i=ge(t,{type:e,src:s,dst:n},{pending:M,retracted:new Set(y.flatMap(o=>o.kind==="edge"?[o.ecid]:[])),freed:new Set([...R].filter(o=>!A.has(o)))},c);if(i){_.push(i);return}}if(e===p.AUTOMATES){if(q.has(n)){_.push({code:"CARDINALITY_VIOLATION",detail:`${c}: two automates onto ${n} in one record (strict 1:1)`});return}if(q.add(n),!R.has(n)||A.has(n)){let i=l=>R.has(l)&&!A.has(l);if(t.edgesFrom(s).some(l=>l.type===p.AUTOMATES&&l.dst!==n&&!t.superseded.has(l.dst)&&!i(l.dst))&&t.hasNode(s)){_.push({code:"CARDINALITY_VIOLATION",detail:`${c}: automates from ${s} already has a live edge \u2014 supersede it first`});return}if(t.edgesInto(n).some(l=>l.type===p.AUTOMATES&&l.src!==s&&!t.superseded.has(l.src)&&!i(l.src))){_.push({code:"CARDINALITY_VIOLATION",detail:`${c}: automates onto ${n} already has a live edge \u2014 strict 1:1, supersede it first`});return}}}L.push({ecid:K(e,s,n,d),type:e,src:s,dst:n,props:d}),M.push({src:s,dst:n,type:e})},H=new Set;for(let e of m.gaps??[]){let s=e.temp_ref??e.ref??"gap",n=e.question;if(!n||typeof n!="object"||!n.header||!Array.isArray(n.options)||n.options.length===0||!Number.isInteger(n.recommended_index)){_.push({code:"GAP_QUESTION_INCOMPLETE",detail:`${s}: design gaps carry a full ranked question object (header/options/recommended_index)`});continue}e.kind==="budget-evicted"&&e.ref&&H.add(e.ref);let d={kind:e.kind,question:n,derived:!0,uc:S,...e.risk?{risk:e.risk}:{},...e.risk_rationale?{risk_rationale:e.risk_rationale}:{},...e.text?{text:e.text}:{},...e.ref?{ref:e.ref}:{}};B(u.GAP,s,d,String(n.header))}let Z=new Map;for(let{cid:e,content:s}of t.byLabel(u.SCENARIO))z(e)&&t.edgesFrom(e).some(n=>n.type===p.BELONGS_TO&&t.tipOf(n.dst)===S)&&Z.set(w(String(s.title??"")),e);for(let e of m.scenarios??[]){let s=Z.get(w(e.title));if(s){_.push({code:"DUPLICATE_SCENARIO",detail:`${e.temp_ref}: '${e.title}' duplicates live scenario ${t.nameOf.get(s)??s} \u2014 exercise/link it instead (reuse before minting)`});continue}let n={title:e.title,intent:e.intent,case_type:e.case_type,derived:!0,...e.technique_notes?{technique_notes:e.technique_notes}:{},...e.description?{description:e.description}:{},...e.parameters?{parameters:e.parameters}:{},...e.tags?{tags:e.tags}:{}};B(u.SCENARIO,e.temp_ref,n,e.title)}for(let e of m.scenarios??[]){let s=E[e.temp_ref];if(s){$(p.BELONGS_TO,s,S,{},e.temp_ref);for(let n of e.depends_on??[]){let d=v(n,`${e.temp_ref}.depends_on`,u.SCENARIO);d&&$(p.DEPENDS_ON,s,d,{},`${e.temp_ref}.depends_on`)}}}for(let e of m.acs??[]){let s={text:e.text,kind:e.kind,risk:e.risk,derived:!0,...e.expected_answer?{expected_answer:e.expected_answer}:{},...e.measurable!==void 0?{measurable:e.measurable}:{}},n=B(u.AC,e.temp_ref,s,e.text);if(!n)continue;let d=e.scope?.type==="scenario"&&e.scope.ref?v(e.scope.ref,`${e.temp_ref}.scope`,u.SCENARIO):S;d&&!t.edgesFrom(n).some(c=>c.type===p.SCOPED_TO&&!t.superseded.has(c.ecid))&&$(p.SCOPED_TO,n,d,{},`${e.temp_ref}.scope`);for(let c of e.cites??[]){if($e&&!ye(c,`${e.temp_ref}.cite`))continue;let h={source_id:c.source_id,source_cid:c.source_cid,anchor:c.anchor,...c.quote?{quote:c.quote}:{}};$(p.DERIVES,c.source_cid,n,h,`${e.temp_ref}.cite`)}}for(let e of m.exercises??[]){let s=v(e.scenario,"exercises.scenario",u.SCENARIO),n=v(e.ac,"exercises.ac",u.AC);s&&n&&$(p.EXERCISES,s,n,{},`exercises ${e.scenario}\u2192${e.ac}`)}let ee=0;for(let e of m.scoped_to_repoints??[]){let s=v(e.ac,"scoped_to_repoints.ac",u.AC),n=v(e.to,"scoped_to_repoints.to");if(!s||!n)continue;let d=t.edgesFrom(s).find(c=>c.type===p.SCOPED_TO&&!t.superseded.has(c.ecid));if(d&&d.dst===n){ee+=1,k.push(`scoped_to_repoints ${e.ac}: already scoped to ${e.to} \u2014 no-op`);continue}d&&y.push({kind:"edge",ecid:d.ecid,reason:`re-scoped to ${e.to} by ${g.id}`,by:g}),$(p.SCOPED_TO,s,n,{},`scoped_to_repoints ${e.ac}`)}let te=new Map;if(r.finalizeTestBody)for(let[e,s]of t.nameOf)te.set(t.tipOf(e),s);let ne=e=>t.nameOf.get(e)??te.get(t.tipOf(e))??null,Oe=e=>{let s=E[e];if(s)return x[e]??ne(s);if(t.names.has(e))return t.resolve(e)?e:null;let n=t.resolve(e);return n?ne(t.tipOf(n.cid)):null};for(let e of m.tests??[]){for(let a of e.reuses??[])H.has(a)&&_.push({code:"REUSES_EVICTED",detail:`${e.temp_ref}: reuses '${a}' which was budget-evicted \u2014 drop the edge; the dependent gap names the missing @import`});{let a=o=>o==="emulator"||o==="simulator"?o:"web",i=o=>{let f=(m.tests??[]).find(Te=>Te.temp_ref===o);if(f)return a(f.target);let l=t.resolve(o),b=l?t.getNode(t.tipOf(l.cid)??l.cid)?.content:void 0;if(typeof b?.target=="string")return a(String(b.target));let se=/^\s*\[mobile:\s*(emulator|simulator)\]/m.exec(String(b?.test_md_blob??""));return se?se[1]:"web"};for(let o of e.reuses??[]){let f=a(e.target),l=i(o);f!==l&&_.push({code:"REUSES_CROSS_SURFACE",detail:`${e.temp_ref}: reuses '${o}' which runs on ${l} while this test runs on ${f} \u2014 a test imports only same-surface units`})}}let s=e.test_md_blob,n=e.definitionId,d=e.objectives_blob;if(r.finalizeTestBody){let a;try{a=r.finalizeTestBody({temp_ref:e.temp_ref,test_md_blob:e.test_md_blob,verifies:e.verifies,reuses:e.reuses??[]},Oe)}catch(i){return N([{code:"FINALIZE_BODY",detail:`${e.temp_ref}: ${i instanceof Error?i.message:String(i)}`}])}a&&(s=a.test_md_blob,n=a.definitionId,d=a.objectives_blob??d,j[e.temp_ref]=n)}let c={title:e.title,check:e.check,definitionId:n,derived:!0,...e.config?{config:e.config}:{},...s?{test_md_blob:s}:{},...d?{objectives_blob:d}:{},...e.surface_required!==void 0?{surface_required:e.surface_required}:{},...e.target?{target:e.target}:{},...e.app&&e.target?{app:e.app}:{}},h=B(u.TEST,e.temp_ref,c,e.title);if(!h)continue;let C=v(e.automates,`${e.temp_ref}.automates`,u.SCENARIO);C&&$(p.AUTOMATES,h,C,{},`${e.temp_ref}.automates`);for(let a of e.verifies){let i=v(a,`${e.temp_ref}.verifies`,u.AC);i&&$(p.VERIFIES,h,i,{},`${e.temp_ref}.verifies`)}for(let a of e.reuses??[]){if(H.has(a))continue;let i=v(a,`${e.temp_ref}.reuses`,u.TEST);i&&$(p.REUSES,h,i,{},`${e.temp_ref}.reuses`)}for(let a of e.verifies){let i=E[a]??t.resolve(a)?.cid;i&&(t.trust.get(i)??"derived")==="derived"&&!T.some(o=>o.cid===i)?k.push(`${e.temp_ref}: verifies ${a} which is still DERIVED (unapproved) \u2014 committed anyway; approve it in chat or via review`):i&&E[a]===i&&(m.acs??[]).some(o=>o.temp_ref===a)&&k.push(`${e.temp_ref}: verifies ${a} minted in this same record (unapproved) \u2014 committed anyway; approve it in chat`)}if(!String(e.test_md_blob??"").split(`
3
3
  `).some(a=>/^##\s/.test(a)&&!/—\s?assert/.test(a)&&Ce.test(a))&&e.verifies.length>1){let a=e.check?.verified_against;k.push(`${e.temp_ref}: verifies ${e.verifies.length} ACs but machine-asserts only 1 (check.verified_against=${a!=null?String(a):"?"}) \u2014 the rest ride prose only`)}}let Y=[];{let e=(i,o)=>`${i??""}\0${w(String(o??""))}`,s=(i,o)=>r.reason?`${r.reason} \u2014 evolve by ${g.id}${o?` (${o})`:""}`:i,n=new Map;for(let i of T){if(i.label!==u.SCENARIO&&i.label!==u.TEST)continue;let o=e(i.label,i.content.title);n.set(o,[...n.get(o)??[],i.cid])}let d=new Map;for(let i of R){if(A.has(i))continue;let o=e(t.nodeLabel.get(i),t.getNode(i)?.content.title);d.set(o,[...d.get(o)??[],i])}for(let[i,o]of d){let f=n.get(i)??[],l=o.length===1&&f.length===1;for(let b of o)l?(y.push({kind:"node",old:b,new:f[0],reason:s(`--force redesign of ${r.ucRef} by ${g.id} (title-matched successor)`,"title-matched successor"),by:g}),Y.push({old:b,next:f[0]})):y.push({kind:"node",old:b,new:null,reason:s(`--force redesign of ${r.ucRef} by ${g.id}`),by:g}),P.push(b)}let c=i=>t.edgesFrom(i).some(o=>o.type!==p.SCOPED_TO?!1:o.dst===S||t.tipOf(o.dst)===S?!0:t.nodeLabel.get(o.dst)===u.SCENARIO&&t.edgesFrom(o.dst).some(f=>f.type===p.BELONGS_TO&&t.tipOf(f.dst)===S)),h=new Map;for(let{cid:i,content:o}of t.byLabel(u.AC)){if(t.superseded.has(i)||!c(i))continue;let f=w(String(o.text??""));h.set(f,[...h.get(f)??[],i])}let C=new Map;for(let i of T){if(i.label!==u.AC)continue;let o=w(String(i.content.text??""));C.set(o,[...C.get(o)??[],i.cid])}for(let[i,o]of h){let f=C.get(i)??[];o.length!==1||f.length!==1||(y.push({kind:"node",old:o[0],new:f[0],reason:s(`AC re-emitted with changed content by ${g.id} (text-matched successor)`,"AC text-matched successor"),by:g}),Y.push({old:o[0],next:f[0]}),P.push(o[0]))}let U=new Set(P),a=new Set;for(let i of y)i.kind==="edge"&&a.add(i.ecid);for(let{old:i,next:o}of Y)for(let f of t.edgesInto(i))oe(f.type)?.pin?.comparesTo!=="dst_tip"||t.superseded.has(f.src)||U.has(f.src)||a.has(f.ecid)||(y.push({kind:"edge",ecid:f.ecid,reason:`re-blessed onto ${o} (redirect successor of ${i}) by ${g.id}`,by:g}),a.add(f.ecid),L.some(b=>b.type===f.type&&b.src===f.src&&b.dst===o)||t.edgesFrom(f.src).some(b=>b.type===f.type&&b.dst===o))||f.type===p.AUTOMATES&&q.has(o)||$(f.type,f.src,o,f.props,`rebless ${f.type} from ${t.nameOf.get(f.src)??f.src}`)}if(_.length>0)return N(_);if(T.length===0&&L.length===0&&y.length===0&&F.length===0)return Object.keys(E).length>0||ee>0?(k.push("everything in this phase is already current \u2014 nothing re-committed"),{record:null,errors:null,minted:E,logicalIds:x,superseded:[],warnings:k,finalizedTests:j,...r.force||r.forceScope?{forceScopeRemaining:V}:{}}):N([{code:"EMPTY_DESIGN",detail:"finalize_design produced nothing to commit"}]);if(r.generationTicket){let e=be(t,r.generationTicket);if(e!==null)return N([e])}return{record:ae(I,{ts:new Date().toISOString(),proposal_id:null,nodes:T,edges:L,review:[],supersessions:y,source_head_moves:{},...G.length>0?{names:G}:{},...(()=>{for(let e of m.judgements??[]){let s=e.target?E[e.target]??t.resolve(e.target)?.cid??S:S;F.push({about:s,rationale:`[${e.kind}] ${e.rationale}`,by:g})}return F.length>0?{judgements:F}:{}})(),design_of:{uc_cid:S,engine:O},...r.generationTicket?{design_generation:Se(r.generationTicket,S,g)}:{},...r.eventIds&&r.eventIds.length>0?{event_ids:r.eventIds}:r.sid?{event_ids:pe(t,r.sid,"design",1)}:{},...r.sid?{sid:r.sid}:{},...r.phase?{design_phase:{uc_root:he(t,S),generation:r.generationTicket?.next_gen??_e(t,r.ucRef)?.gen??1,phase:r.phase,completeness:r.phaseCompleteness??"complete"}}:{}},{expectPrev:t.latestHash}).record,errors:null,minted:E,logicalIds:x,superseded:P,warnings:k,finalizedTests:j,...r.force||r.forceScope?{forceScopeRemaining:V}:{}}}function Ue(r,I){let t=[];for(let m of r){let g=m.design_phase;!g||typeof g!="object"||g.uc_root===I&&(typeof g.phase!="string"||typeof g.generation!="number"||t.push({phase:g.phase,generation:g.generation,seq:m.seq,completeness:g.completeness==="partial"?"partial":"complete"}))}return t.sort((m,g)=>m.seq-g.seq)}export{ke as a,Be as b,Ue as c};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as m}from"./chunk-7RAIRUXO.js";import{x as t}from"./chunk-DWHXXPDX.js";import{a as p}from"./chunk-HCBYKLMW.js";import{a,b as r,i as u}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var c=n(b(),1);var e=n(p(),1);function R({onSubmit:l}){let[o,f]=(0,c.useState)(0),s=(0,c.useRef)(!1);return u((x,i)=>{s.current||(i.leftArrow||i.rightArrow?f(d=>d===0?1:0):i.return?(s.current=!0,l(o===0?"positive":"negative")):i.escape&&(s.current=!0,l(null)))}),(0,e.jsxs)(a,{flexDirection:"column",marginTop:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(r,{color:t.secondary,children:"Rate this session: "}),(0,e.jsx)(r,{color:o===0?t.orange:t.dim,children:o===0?"[ \u{1F44D} ]":" \u{1F44D} "}),(0,e.jsx)(r,{children:" "}),(0,e.jsx)(r,{color:o===1?t.orange:t.dim,children:o===1?"[ \u{1F44E} ]":" \u{1F44E} "})]}),(0,e.jsx)(m,{bindings:[{keys:"\u2190/\u2192",label:"select"},{keys:"\u21B5",label:"submit"}],escBackLabel:"skip"})]})}export{R as a};
2
+ import{a as m}from"./chunk-5NBT5IVT.js";import{x as t}from"./chunk-DEUDRSU7.js";import{a as p}from"./chunk-HCBYKLMW.js";import{a,b as r,i as u}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as n}from"./chunk-UR6MHSHU.js";var c=n(b(),1);var e=n(p(),1);function R({onSubmit:l}){let[o,f]=(0,c.useState)(0),s=(0,c.useRef)(!1);return u((x,i)=>{s.current||(i.leftArrow||i.rightArrow?f(d=>d===0?1:0):i.return?(s.current=!0,l(o===0?"positive":"negative")):i.escape&&(s.current=!0,l(null)))}),(0,e.jsxs)(a,{flexDirection:"column",marginTop:1,children:[(0,e.jsxs)(a,{children:[(0,e.jsx)(r,{color:t.secondary,children:"Rate this session: "}),(0,e.jsx)(r,{color:o===0?t.orange:t.dim,children:o===0?"[ \u{1F44D} ]":" \u{1F44D} "}),(0,e.jsx)(r,{children:" "}),(0,e.jsx)(r,{color:o===1?t.orange:t.dim,children:o===1?"[ \u{1F44E} ]":" \u{1F44E} "})]}),(0,e.jsx)(m,{bindings:[{keys:"\u2190/\u2192",label:"select"},{keys:"\u21B5",label:"submit"}],escBackLabel:"skip"})]})}export{R as a};
@@ -1,4 +1,4 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as n}from"./chunk-DWHXXPDX.js";import{createHash as _}from"crypto";import{existsSync as m,readFileSync as u}from"fs";import{dirname as T,join as f,resolve as o}from"path";import{fileURLToPath as E}from"url";var s=T(E(import.meta.url)),l=2;function p(e,r){let t=_("sha256");return t.update(`kane-assurance-contract
2
+ import{a as n}from"./chunk-DEUDRSU7.js";import{createHash as _}from"crypto";import{existsSync as m,readFileSync as u}from"fs";import{dirname as T,join as f,resolve as o}from"path";import{fileURLToPath as E}from"url";var s=T(E(import.meta.url)),l=2;function p(e,r){let t=_("sha256");return t.update(`kane-assurance-contract
3
3
  `),t.update(e),t.update(`
4
4
  agent_state_schema=${r}`),"sha256:"+t.digest("hex")}function d(){return[o(s,".."),o(s,"../../..")]}function i(){return"sha256:da159529b51d00a7c5455d7773dc5143fa670ec0af9646aa5346f22faeb367db"}var a=class extends Error{constructor(t,c){super(`agent/cli contract mismatch (cli ${t||"<unset>"}, agent ${c||"<unset>"}) \u2014 rebuild or reinstall the stale half`);this.expected=t;this.actual=c;this.name="PairMismatchError"}};function I(){return{TESTMUAI_CONTRACT_DIGEST:i(),TESTMUAI_CLIENT_VERSION:process.env.KANE_DEV_FORCE_CLIENT_RELEASE??`kane-cli/${n}`}}export{a,I as b};
@@ -1,4 +1,4 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as m,c}from"./chunk-EYOCNMUM.js";import{c as b,j as v}from"./chunk-DWHXXPDX.js";import{readFileSync as w,writeFileSync as C,mkdirSync as y,existsSync as k}from"fs";import{dirname as x}from"path";var f={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:v,model:"v16-alpha",project_id:null,project_name:null,folder_id:null,folder_name:null,mode:"testing",assertion_mode:"dom",network_ws:!1,network_sse:!1,bug_detection:"off",final_validation:!1,code_export:{enabled:!0,language:"python",skip_validation:!0},generate:{scenario_limit:2,per_scenario_limit:3,memory_enabled:!1},last_seen_version:"",hints_enabled:!0};function T(o){let{mobile:e,...i}=o,t={...i};delete t.target,delete t.device,delete t.device_name,delete t.os_version,delete t.app;let n=e??{};n.tui_target&&(t.target=n.tui_target);let s=n.default_target?.name?.trim(),l=n.default_target?.os_version?.trim();if(s||l)s&&(t.device_name=s),l&&(t.os_version=l);else{let r=n.default_target?.id?.trim();r&&(t.device=r)}n.default_app&&(t.app=n.default_app);let a={};return n.no_reset!==void 0&&(a.no_reset=n.no_reset),n.appium_url!==void 0&&(a.appium_url=n.appium_url),n.auto_grant_permissions!==void 0&&(a.auto_grant_permissions=n.auto_grant_permissions),n.auto_accept_alerts!==void 0&&(a.auto_accept_alerts=n.auto_accept_alerts),Object.keys(a).length>0&&(t.mobile=a),t}function S(o){let e=o.mobile??{},i=typeof o.target=="string"?o.target:void 0,t=typeof o.device=="string"&&o.device.trim()!==""?o.device.trim():void 0,n=g=>typeof g=="string"&&g.trim()!==""?g.trim():void 0,s=n(o.device_name),l=n(o.os_version),a=typeof o.app=="string"&&o.app!==""?o.app:void 0,r={},u=i??e.tui_target;u&&(r.tui_target=u);let _=m(u,void 0).kind,d=_==="emulator"||_==="simulator"?_:null;d&&(s||l)?r.default_target={platform:c(d),kind:d,...s?{name:s}:{},...l?{os_version:l}:{}}:d&&t?r.default_target={platform:c(d),kind:d,id:t}:(e.default_target?.id?.trim()||e.default_target?.name?.trim())&&(r.default_target=e.default_target);let p=a??e.default_app;return p&&(r.default_app=p),e.no_reset!==void 0&&(r.no_reset=e.no_reset),e.appium_url!==void 0&&(r.appium_url=e.appium_url),e.auto_grant_permissions!==void 0&&(r.auto_grant_permissions=e.auto_grant_permissions),e.auto_accept_alerts!==void 0&&(r.auto_accept_alerts=e.auto_accept_alerts),Object.keys(r).length>0?r:void 0}var h=class{constructor(e=b){this.path=e}exists(){return k(this.path)}load(){try{let e=w(this.path,"utf-8"),i=JSON.parse(e),t=S(i),{target:n,device:s,app:l,...a}=i;return{...f,...a,...t?{mobile:t}:{},code_export:{...f.code_export,...i.code_export??{}},generate:{...f.generate,...i.generate??{}}}}catch{return{...f,code_export:{...f.code_export},generate:{...f.generate}}}}write(e){try{y(x(this.path),{recursive:!0}),C(this.path,JSON.stringify(T(e),null,2)+`
2
+ import{a as m,c}from"./chunk-EYOCNMUM.js";import{c as b,j as h}from"./chunk-DEUDRSU7.js";import{readFileSync as w,writeFileSync as y,mkdirSync as C,existsSync as k}from"fs";import{dirname as x}from"path";var f={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:h,model:"v16-alpha",project_id:null,project_name:null,folder_id:null,folder_name:null,mode:"testing",assertion_mode:"dom",network_ws:!1,network_sse:!1,bug_detection:"off",final_validation:!1,code_export:{enabled:!0,language:"python",skip_validation:!0},generate:{scenario_limit:2,per_scenario_limit:3,memory_enabled:!1},last_seen_version:"",hints_enabled:!0};function T(o){let{mobile:e,...i}=o,t={...i};delete t.target,delete t.device,delete t.device_name,delete t.os_version,delete t.app;let n=e??{};n.tui_target&&(t.target=n.tui_target);let s=n.default_target?.name?.trim(),l=n.default_target?.os_version?.trim();if(s||l)s&&(t.device_name=s),l&&(t.os_version=l);else{let r=n.default_target?.id?.trim();r&&(t.device=r)}n.default_app&&(t.app=n.default_app);let a={};return n.no_reset!==void 0&&(a.no_reset=n.no_reset),n.appium_url!==void 0&&(a.appium_url=n.appium_url),n.auto_grant_permissions!==void 0&&(a.auto_grant_permissions=n.auto_grant_permissions),n.auto_accept_alerts!==void 0&&(a.auto_accept_alerts=n.auto_accept_alerts),Object.keys(a).length>0&&(t.mobile=a),t}function S(o){let e=o.mobile??{},i=typeof o.target=="string"?o.target:void 0,t=typeof o.device=="string"&&o.device.trim()!==""?o.device.trim():void 0,n=g=>typeof g=="string"&&g.trim()!==""?g.trim():void 0,s=n(o.device_name),l=n(o.os_version),a=typeof o.app=="string"&&o.app!==""?o.app:void 0,r={},u=i??e.tui_target;u&&(r.tui_target=u);let _=m(u,void 0).kind,d=_==="emulator"||_==="simulator"?_:null;d&&(s||l)?r.default_target={platform:c(d),kind:d,...s?{name:s}:{},...l?{os_version:l}:{}}:d&&t?r.default_target={platform:c(d),kind:d,id:t}:(e.default_target?.id?.trim()||e.default_target?.name?.trim())&&(r.default_target=e.default_target);let p=a??e.default_app;return p&&(r.default_app=p),e.no_reset!==void 0&&(r.no_reset=e.no_reset),e.appium_url!==void 0&&(r.appium_url=e.appium_url),e.auto_grant_permissions!==void 0&&(r.auto_grant_permissions=e.auto_grant_permissions),e.auto_accept_alerts!==void 0&&(r.auto_accept_alerts=e.auto_accept_alerts),Object.keys(r).length>0?r:void 0}var v=class{constructor(e=b){this.path=e}exists(){return k(this.path)}load(){try{let e=w(this.path,"utf-8"),i=JSON.parse(e),t=S(i),{target:n,device:s,app:l,...a}=i;return{...f,...a,...t?{mobile:t}:{},code_export:{...f.code_export,...i.code_export??{}},generate:{...f.generate,...i.generate??{}}}}catch{return{...f,code_export:{...f.code_export},generate:{...f.generate}}}}write(e){try{C(x(this.path),{recursive:!0}),y(this.path,JSON.stringify(T(e),null,2)+`
3
3
  `)}catch(i){let t=i instanceof Error?i.message:String(i);process.stderr.write(`[config] Failed to save config: ${t}
4
- `)}}set(e,i){let t=this.load();t[e]=i,this.write(t)}save(e){this.write({...this.load(),...e})}getMobile(){return this.load().mobile??{}}setMobile(e){let i={...this.getMobile()};for(let t of Object.keys(e)){let n=e[t];n===void 0?delete i[t]:i[t]=n}this.set("mobile",Object.keys(i).length>0?i:void 0)}writeRaw(e){this.write(e)}};export{h as a};
4
+ `)}}set(e,i){let t=this.load();t[e]=i,this.write(t)}save(e){this.write({...this.load(),...e})}getMobile(){return this.load().mobile??{}}setMobile(e){let i={...this.getMobile()};for(let t of Object.keys(e)){let n=e[t];n===void 0?delete i[t]:i[t]=n}this.set("mobile",Object.keys(i).length>0?i:void 0)}writeRaw(e){this.write(e)}};export{v as a};
@@ -1,4 +1,4 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as o,b as i}from"./chunk-VSEWQEM5.js";import{resolve as n}from"path";async function w(c,s,r={}){let e=i({verb:c,mode:"cli",contextRoot:n(process.cwd(),".context"),env:o(),write:r.write});try{let t=await s(e);return r.write&&t===0&&await e.lateBindContext(n(process.cwd(),".context")),t===1&&process.stderr.write(e.supportFooter()+`
2
+ import{a as o,b as i}from"./chunk-GSNGC7HI.js";import{resolve as n}from"path";async function w(c,s,r={}){let e=i({verb:c,mode:"cli",contextRoot:n(process.cwd(),".context"),env:o(),write:r.write});try{let t=await s(e);return r.write&&t===0&&await e.lateBindContext(n(process.cwd(),".context")),t===1&&process.stderr.write(e.supportFooter()+`
3
3
  `),await e.end({exit_code:t}),t}catch(t){throw e.error("cli_crash"),process.stderr.write(e.supportFooter()+`
4
4
  `),await e.end({exit_code:1}),t}}export{w as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-5Y2G4NC7.js";import{x as o}from"./chunk-DWHXXPDX.js";import{a as n}from"./chunk-HCBYKLMW.js";import{b as t}from"./chunk-C44QQJR4.js";import{a as s}from"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var l=r(s(),1);var m=r(n(),1),i=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function b({active:e=!0}){let[p,c]=(0,l.useState)(0);return a(()=>{c(f=>(f+1)%i.length)},e?80:null),(0,m.jsx)(t,{color:o.orange,children:e?i[p]:"\u25CF"})}export{b as a};
2
+ import{a}from"./chunk-5Y2G4NC7.js";import{x as o}from"./chunk-DEUDRSU7.js";import{a as n}from"./chunk-HCBYKLMW.js";import{b as t}from"./chunk-C44QQJR4.js";import{a as s}from"./chunk-6YGTRKDT.js";import{e as r}from"./chunk-UR6MHSHU.js";var l=r(s(),1);var m=r(n(),1),i=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function b({active:e=!0}){let[p,c]=(0,l.useState)(0);return a(()=>{c(f=>(f+1)%i.length)},e?80:null),(0,m.jsx)(t,{color:o.orange,children:e?i[p]:"\u25CF"})}export{b as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{x as o}from"./chunk-DWHXXPDX.js";import{a as m}from"./chunk-HCBYKLMW.js";import{a as e,b as i}from"./chunk-C44QQJR4.js";import{e as d}from"./chunk-UR6MHSHU.js";var r=d(m(),1),s={default:o.muted,error:o.red,success:o.green,info:o.orange,warning:o.orange};function h({title:t,titleColor:a,borderColor:l,variant:n="default",children:c,width:u,paddingX:x=2,paddingY:g=0,marginBottom:f=0}){let p=l??s[n],B=a??(n==="default"?o.orange:s[n]);return(0,r.jsxs)(e,{flexDirection:"column",marginBottom:f,children:[t&&(0,r.jsx)(e,{marginBottom:0,children:(0,r.jsxs)(i,{color:B,bold:!0,children:[" ",t]})}),(0,r.jsx)(e,{borderStyle:"round",borderColor:p,flexDirection:"column",paddingX:x,paddingY:g,width:u,children:c})]})}function k({label:t,value:a,labelColor:l=o.dim,valueColor:n,labelWidth:c=14}){return(0,r.jsxs)(e,{children:[(0,r.jsx)(e,{width:c,flexShrink:0,children:(0,r.jsx)(i,{color:l,children:t})}),(0,r.jsx)(e,{flexShrink:1,children:(0,r.jsx)(i,{color:n,wrap:"wrap",children:a})})]})}function I({label:t}){return(0,r.jsx)(e,{marginTop:1,marginBottom:0,children:(0,r.jsx)(i,{bold:!0,children:t})})}export{h as a,k as b,I as c};
2
+ import{x as o}from"./chunk-DEUDRSU7.js";import{a as m}from"./chunk-HCBYKLMW.js";import{a as e,b as i}from"./chunk-C44QQJR4.js";import{e as d}from"./chunk-UR6MHSHU.js";var r=d(m(),1),s={default:o.muted,error:o.red,success:o.green,info:o.orange,warning:o.orange};function h({title:t,titleColor:a,borderColor:l,variant:n="default",children:c,width:u,paddingX:x=2,paddingY:g=0,marginBottom:f=0}){let p=l??s[n],B=a??(n==="default"?o.orange:s[n]);return(0,r.jsxs)(e,{flexDirection:"column",marginBottom:f,children:[t&&(0,r.jsx)(e,{marginBottom:0,children:(0,r.jsxs)(i,{color:B,bold:!0,children:[" ",t]})}),(0,r.jsx)(e,{borderStyle:"round",borderColor:p,flexDirection:"column",paddingX:x,paddingY:g,width:u,children:c})]})}function k({label:t,value:a,labelColor:l=o.dim,valueColor:n,labelWidth:c=14}){return(0,r.jsxs)(e,{children:[(0,r.jsx)(e,{width:c,flexShrink:0,children:(0,r.jsx)(i,{color:l,children:t})}),(0,r.jsx)(e,{flexShrink:1,children:(0,r.jsx)(i,{color:n,wrap:"wrap",children:a})})]})}function I({label:t}){return(0,r.jsx)(e,{marginTop:1,marginBottom:0,children:(0,r.jsx)(i,{bold:!0,children:t})})}export{h as a,k as b,I as c};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as O,d as S}from"./chunk-Z2DT2QMX.js";import{c as L}from"./chunk-RFHMDQXZ.js";import{n as P,o as R}from"./chunk-RSSOJ3L2.js";import{x as s}from"./chunk-DWHXXPDX.js";import{a as y}from"./chunk-HCBYKLMW.js";import{a as E,b as o,i as h}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as d}from"./chunk-UR6MHSHU.js";var n=d(B(),1);import{basename as D}from"path";var r=d(y(),1),U="evidence-view-server";function Q({packPath:m,viewerBase:w,onDone:V,openUrl:k}){let[t,a]=(0,n.useState)("ask"),[g,b]=(0,n.useState)(null),[l,p]=(0,n.useState)(null),f=(0,n.useRef)(null),u=(0,n.useRef)(!1),x=async()=>{let e=f.current;f.current=null,e&&(R(U),await e.close())},v=()=>{u.current||(u.current=!0,V())};return h((e,i)=>{u.current||(t==="ask"?e==="y"||e==="Y"?a("starting"):(e==="n"||e==="N"||i.return||i.escape)&&v():t==="serving"&&(e==="q"||e==="Q"||i.escape)&&x().then(v))}),(0,n.useEffect)(()=>{if(t!=="starting")return;let e=!1;return(async()=>{try{let i=D(m),c=await O({packs:new Map([[i,m]]),allowedOrigins:[new URL(w).origin]});if(e){await c.close();return}f.current=c,P(U,()=>{c.close()});let T=S(c.urlFor(i),w);b(T);try{await(k??(q=>L(q)))(T)}catch{p("could not open browser \u2014 open the URL manually")}a("serving")}catch(i){p(`evidence view failed \u2014 ${i.message}`),a("failed")}})(),()=>{e=!0}},[t]),(0,n.useEffect)(()=>{if(t!=="failed")return;let e=setTimeout(v,0);return()=>clearTimeout(e)},[t]),(0,n.useEffect)(()=>()=>{x()},[]),t==="ask"?(0,r.jsxs)(o,{children:["View evidence in browser? ",(0,r.jsx)(o,{color:s.dim,children:"(y/N)"})]}):t==="serving"||t==="starting"?(0,r.jsxs)(E,{flexDirection:"column",children:[g?(0,r.jsxs)(o,{children:["viewer ",(0,r.jsx)(o,{color:s.orange,children:g})]}):(0,r.jsx)(o,{color:s.dim,children:"starting\u2026"}),l?(0,r.jsx)(o,{color:"yellow",children:l}):null,t==="serving"?(0,r.jsx)(o,{color:s.dim,children:"Press q when done"}):null]}):l?(0,r.jsx)(o,{color:"yellow",children:l}):null}export{Q as a};
2
+ import{b as O,d as S}from"./chunk-4FXSDPQW.js";import{c as L}from"./chunk-RFHMDQXZ.js";import{n as P,o as R}from"./chunk-RSSOJ3L2.js";import{x as s}from"./chunk-DEUDRSU7.js";import{a as y}from"./chunk-HCBYKLMW.js";import{a as E,b as o,i as h}from"./chunk-C44QQJR4.js";import{a as B}from"./chunk-6YGTRKDT.js";import{e as d}from"./chunk-UR6MHSHU.js";var n=d(B(),1);import{basename as D}from"path";var r=d(y(),1),U="evidence-view-server";function Q({packPath:m,viewerBase:w,onDone:V,openUrl:k}){let[t,a]=(0,n.useState)("ask"),[g,b]=(0,n.useState)(null),[l,p]=(0,n.useState)(null),f=(0,n.useRef)(null),u=(0,n.useRef)(!1),x=async()=>{let e=f.current;f.current=null,e&&(R(U),await e.close())},v=()=>{u.current||(u.current=!0,V())};return h((e,i)=>{u.current||(t==="ask"?e==="y"||e==="Y"?a("starting"):(e==="n"||e==="N"||i.return||i.escape)&&v():t==="serving"&&(e==="q"||e==="Q"||i.escape)&&x().then(v))}),(0,n.useEffect)(()=>{if(t!=="starting")return;let e=!1;return(async()=>{try{let i=D(m),c=await O({packs:new Map([[i,m]]),allowedOrigins:[new URL(w).origin]});if(e){await c.close();return}f.current=c,P(U,()=>{c.close()});let T=S(c.urlFor(i),w);b(T);try{await(k??(q=>L(q)))(T)}catch{p("could not open browser \u2014 open the URL manually")}a("serving")}catch(i){p(`evidence view failed \u2014 ${i.message}`),a("failed")}})(),()=>{e=!0}},[t]),(0,n.useEffect)(()=>{if(t!=="failed")return;let e=setTimeout(v,0);return()=>clearTimeout(e)},[t]),(0,n.useEffect)(()=>()=>{x()},[]),t==="ask"?(0,r.jsxs)(o,{children:["View evidence in browser? ",(0,r.jsx)(o,{color:s.dim,children:"(y/N)"})]}):t==="serving"||t==="starting"?(0,r.jsxs)(E,{flexDirection:"column",children:[g?(0,r.jsxs)(o,{children:["viewer ",(0,r.jsx)(o,{color:s.orange,children:g})]}):(0,r.jsx)(o,{color:s.dim,children:"starting\u2026"}),l?(0,r.jsx)(o,{color:"yellow",children:l}):null,t==="serving"?(0,r.jsx)(o,{color:s.dim,children:"Press q when done"}):null]}):l?(0,r.jsx)(o,{color:"yellow",children:l}):null}export{Q as a};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as R}from"./chunk-TDPWFYTJ.js";import{a as x}from"./chunk-NTEI2O3O.js";import{d as S}from"./chunk-R5PIIYN2.js";import{a as y}from"./chunk-MMBBQ4OZ.js";import{a as p}from"./chunk-H6KL3FSB.js";import{d as g,i as E}from"./chunk-DWHXXPDX.js";import{spawn as M,execSync as h}from"child_process";import{appendFileSync as b,existsSync as m,mkdirSync as C}from"fs";import{homedir as L}from"os";import{join as V,resolve as s,dirname as v,delimiter as T}from"path";import{fileURLToPath as U}from"url";import{createInterface as I}from"readline";async function*A(e){let n=I({input:e,crlfDelay:1/0});for await(let r of n){let o=r.trim();if(o)try{let i=JSON.parse(o);i&&typeof i.type=="string"&&(yield i)}catch{}}}function O(e){return e==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true",V16_BIFURCATION_PHASES:"1"},unset:["V16_NETWORK_WS","V16_NETWORK_SSE"]}:{set:{V16_BIFURCATION_PHASES:"1"},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS","V16_NETWORK_WS","V16_NETWORK_SSE"]}}function w(e){return e?{set:{},unset:["V16_AGENT_SKIP_CP_FINAL"]}:{set:{V16_AGENT_SKIP_CP_FINAL:"true"},unset:[]}}function N(e){return e==="dom"?{set:{V16_AGENT_ENABLE_TEXTUAL_VISUAL:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_TEXTUAL_VISUAL"]}}var c=v(U(import.meta.url));function k(){for(let e of["python3","python"])try{return h(`${e} --version`,{stdio:"ignore"}),e}catch{}return null}function D(){let n=process.platform==="win32"?"v16-runner.exe":"v16-runner",r={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"linux-arm64":["@testmuai/kane-cli-linux-arm64","@lambdatestincprivate/kane-cli-linux-arm64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},o=`${process.platform}-${process.arch}`,i=r[o];if(i)for(let t of i){let a=[s(c,"..","node_modules",t,"bin",n),s(c,"..","..","node_modules",t,"bin",n),s(c,"..","..","..","node_modules",t,"bin",n),s(c,"..","..","..","..","node_modules",t,"bin",n)];for(let u of a)if(m(u))return{cmd:u,args:[]}}let d=[s(c,"bin",n),s(c,"..","bin",n),s(c,"..","..","..","..","v16-runner","dist",n),s(c,"..","..","..","v16-runner","dist",n),s(c,"..","..","v16-runner","dist",n),s(process.cwd(),"v16-runner","dist",n),s(process.cwd(),"..","v16-runner","dist",n)];for(let t of d)if(m(t))return{cmd:t,args:[]};let l=[s(c,"..","..","v16-runner"),s(c,"..","..","..","..","v16-runner"),s(c,"..","..","..","v16-runner"),s(process.cwd(),"v16-runner"),s(process.cwd(),"..","v16-runner")];for(let t of l)if(m(s(t,"main.py"))){for(let u of[s(t,".venv","bin","python"),s(t,"..",".venv","bin","python"),s(t,"..","browser-agent",".venv","bin","python")])if(m(u))return{cmd:u,args:["main.py"],cwd:t};let a=k();if(a)return{cmd:a,args:["main.py"],cwd:t}}return null}function P(e){return e?V(L(),".testmuai","kaneai","sessions",e,"runner-stderr.log"):null}function K(e){let n=M(e.runner.cmd,e.runner.args,{stdio:["pipe","pipe","pipe"],env:e.env,cwd:e.runner.cwd});n.stdin.on("error",()=>{});let r=P(e.sessionId);if(r)try{C(v(r),{recursive:!0})}catch{}let o=1e5,i="";n.stderr.on("data",u=>{if(i+=u.toString(),i.length>o&&(i=i.slice(-o)),r)try{b(r,u)}catch{}}),n.on("error",u=>{e.log?.("error","RUNNER_SPAWN_ERROR","Runner spawn error",{error:u.message})});let d=null,l=null,t=new Promise(u=>{n.on("close",(f,_)=>{d=f,l=_?String(_):null,e.log?.("info","RUNNER_EXIT","Runner exited",{code:f,signal:l??"none"}),u({code:f,signal:l})})}),a=A(n.stdout);return{child:n,events:a,getStderr:()=>i,getExitCode:()=>d,getExitSignal:()=>l,exited:t}}async function B(e,n){if(!n?.platform||!n.target_kind)return;let r=await S(n.platform)?.toolEnv(n.target_kind)??{dirs:[]};if(r.dirs.length>0&&(e.PATH=[...r.dirs,e.PATH??""].filter(Boolean).join(T)),r.appiumHome&&(e.APPIUM_HOME=r.appiumHome),r.wdaRoot&&(e.TESTMU_IOS_WDA_DERIVED_DATA=r.wdaRoot),n.platform==="android"){let o=y();o&&(e.PATH=[o.platformToolsDir,e.PATH??""].filter(Boolean).join(T),e.ANDROID_HOME=o.root,e.ANDROID_SDK_ROOT=o.root)}}function H(e){let n={...process.env};e.environment&&(n.TESTMUAI_ENV=e.environment),n.TESTMUAI_SOURCE="kane-cli",process.platform==="win32"&&(n.PYTHONIOENCODING="utf-8",n.PYTHONUTF8="1");let r=p(e.environment);n.V16_SERVER_API_HOST=r.v16ServerHost,n.ATMS_URL=r.tmsBaseUrl.replace(/\/api\/?$/,""),e.username&&e.accessKey&&(n.LT_USERNAME=e.username,n.LT_ACCESS_KEY=e.accessKey),e.sessionId&&(n.TESTMUAI_SESSION_ID=e.sessionId);let o=O(e.mode??"testing");Object.assign(n,o.set);for(let a of o.unset)delete n[a];let i=new x().load(),d=N(e.assertionMode??(i.assertion_mode==="visual"?"visual":"dom"));Object.assign(n,d.set);for(let a of d.unset)delete n[a];let l=e.finalValidation??i.final_validation,t=w(l);Object.assign(n,t.set);for(let a of t.unset)delete n[a];return n}function G(e,n){let r=p(n?.environment),o=R();o!==void 0&&e.ap_mode===void 0&&(e.ap_mode=o),e.telemetry_proxy_url===void 0&&process.env.KANE_TELEMETRY!=="0"&&(e.telemetry_proxy_url=E),e.media_upload===void 0&&e.org_id&&e.username&&e.access_key&&(e.media_upload={url:r.shareApiBaseUrl.replace(/\/$/,"")+"/mfs/v1.0/media/upload",artefacts_host:r.mediaArtefactsHost,org_id:e.org_id,media_dir:g})}async function oe(e,n){let r=D();if(!r)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");process.env.KANE_SPAWN_DEBUG&&process.stderr.write(`[spawn-debug] ${JSON.stringify(r)}
2
+ import{a as R}from"./chunk-TDPWFYTJ.js";import{a as x}from"./chunk-7KRCBN6X.js";import{d as S}from"./chunk-4VZRBBLF.js";import{a as y}from"./chunk-MMBBQ4OZ.js";import{a as p}from"./chunk-BE4FBVKY.js";import{d as g,i as E}from"./chunk-DEUDRSU7.js";import{spawn as M,execSync as h}from"child_process";import{appendFileSync as b,existsSync as m,mkdirSync as C}from"fs";import{homedir as L}from"os";import{join as V,resolve as s,dirname as v,delimiter as T}from"path";import{fileURLToPath as U}from"url";import{createInterface as I}from"readline";async function*A(e){let n=I({input:e,crlfDelay:1/0});for await(let r of n){let o=r.trim();if(o)try{let i=JSON.parse(o);i&&typeof i.type=="string"&&(yield i)}catch{}}}function O(e){return e==="action"?{set:{V16_AGENT_ENABLE_ALL_BLOCKERS:"true",V16_BIFURCATION_PHASES:"1"},unset:["V16_NETWORK_WS","V16_NETWORK_SSE"]}:{set:{V16_BIFURCATION_PHASES:"1"},unset:["V16_AGENT_ENABLE_ALL_BLOCKERS","V16_NETWORK_WS","V16_NETWORK_SSE"]}}function w(e){return e?{set:{},unset:["V16_AGENT_SKIP_CP_FINAL"]}:{set:{V16_AGENT_SKIP_CP_FINAL:"true"},unset:[]}}function N(e){return e==="dom"?{set:{V16_AGENT_ENABLE_TEXTUAL_VISUAL:"true"},unset:[]}:{set:{},unset:["V16_AGENT_ENABLE_TEXTUAL_VISUAL"]}}var c=v(U(import.meta.url));function k(){for(let e of["python3","python"])try{return h(`${e} --version`,{stdio:"ignore"}),e}catch{}return null}function D(){let n=process.platform==="win32"?"v16-runner.exe":"v16-runner",r={"darwin-arm64":["@testmuai/kane-cli-darwin-arm64","@lambdatestincprivate/kane-cli-darwin-arm64"],"darwin-x64":["@testmuai/kane-cli-darwin-x64","@lambdatestincprivate/kane-cli-darwin-x64"],"linux-x64":["@testmuai/kane-cli-linux-x64","@lambdatestincprivate/kane-cli-linux-x64"],"linux-arm64":["@testmuai/kane-cli-linux-arm64","@lambdatestincprivate/kane-cli-linux-arm64"],"win32-x64":["@testmuai/kane-cli-win-x64","@lambdatestincprivate/kane-cli-win-x64"]},o=`${process.platform}-${process.arch}`,i=r[o];if(i)for(let t of i){let a=[s(c,"..","node_modules",t,"bin",n),s(c,"..","..","node_modules",t,"bin",n),s(c,"..","..","..","node_modules",t,"bin",n),s(c,"..","..","..","..","node_modules",t,"bin",n)];for(let u of a)if(m(u))return{cmd:u,args:[]}}let d=[s(c,"bin",n),s(c,"..","bin",n),s(c,"..","..","..","..","v16-runner","dist",n),s(c,"..","..","..","v16-runner","dist",n),s(c,"..","..","v16-runner","dist",n),s(process.cwd(),"v16-runner","dist",n),s(process.cwd(),"..","v16-runner","dist",n)];for(let t of d)if(m(t))return{cmd:t,args:[]};let l=[s(c,"..","..","v16-runner"),s(c,"..","..","..","..","v16-runner"),s(c,"..","..","..","v16-runner"),s(process.cwd(),"v16-runner"),s(process.cwd(),"..","v16-runner")];for(let t of l)if(m(s(t,"main.py"))){for(let u of[s(t,".venv","bin","python"),s(t,"..",".venv","bin","python"),s(t,"..","browser-agent",".venv","bin","python")])if(m(u))return{cmd:u,args:["main.py"],cwd:t};let a=k();if(a)return{cmd:a,args:["main.py"],cwd:t}}return null}function P(e){return e?V(L(),".testmuai","kaneai","sessions",e,"runner-stderr.log"):null}function K(e){let n=M(e.runner.cmd,e.runner.args,{stdio:["pipe","pipe","pipe"],env:e.env,cwd:e.runner.cwd});n.stdin.on("error",()=>{});let r=P(e.sessionId);if(r)try{C(v(r),{recursive:!0})}catch{}let o=1e5,i="";n.stderr.on("data",u=>{if(i+=u.toString(),i.length>o&&(i=i.slice(-o)),r)try{b(r,u)}catch{}}),n.on("error",u=>{e.log?.("error","RUNNER_SPAWN_ERROR","Runner spawn error",{error:u.message})});let d=null,l=null,t=new Promise(u=>{n.on("close",(f,_)=>{d=f,l=_?String(_):null,e.log?.("info","RUNNER_EXIT","Runner exited",{code:f,signal:l??"none"}),u({code:f,signal:l})})}),a=A(n.stdout);return{child:n,events:a,getStderr:()=>i,getExitCode:()=>d,getExitSignal:()=>l,exited:t}}async function B(e,n){if(!n?.platform||!n.target_kind)return;let r=await S(n.platform)?.toolEnv(n.target_kind)??{dirs:[]};if(r.dirs.length>0&&(e.PATH=[...r.dirs,e.PATH??""].filter(Boolean).join(T)),r.appiumHome&&(e.APPIUM_HOME=r.appiumHome),r.wdaRoot&&(e.TESTMU_IOS_WDA_DERIVED_DATA=r.wdaRoot),n.platform==="android"){let o=y();o&&(e.PATH=[o.platformToolsDir,e.PATH??""].filter(Boolean).join(T),e.ANDROID_HOME=o.root,e.ANDROID_SDK_ROOT=o.root)}}function H(e){let n={...process.env};e.environment&&(n.TESTMUAI_ENV=e.environment),n.TESTMUAI_SOURCE="kane-cli",process.platform==="win32"&&(n.PYTHONIOENCODING="utf-8",n.PYTHONUTF8="1");let r=p(e.environment);n.V16_SERVER_API_HOST=r.v16ServerHost,n.ATMS_URL=r.tmsBaseUrl.replace(/\/api\/?$/,""),e.username&&e.accessKey&&(n.LT_USERNAME=e.username,n.LT_ACCESS_KEY=e.accessKey),e.sessionId&&(n.TESTMUAI_SESSION_ID=e.sessionId);let o=O(e.mode??"testing");Object.assign(n,o.set);for(let a of o.unset)delete n[a];let i=new x().load(),d=N(e.assertionMode??(i.assertion_mode==="visual"?"visual":"dom"));Object.assign(n,d.set);for(let a of d.unset)delete n[a];let l=e.finalValidation??i.final_validation,t=w(l);Object.assign(n,t.set);for(let a of t.unset)delete n[a];return n}function G(e,n){let r=p(n?.environment),o=R();o!==void 0&&e.ap_mode===void 0&&(e.ap_mode=o),e.telemetry_proxy_url===void 0&&process.env.KANE_TELEMETRY!=="0"&&(e.telemetry_proxy_url=E),e.media_upload===void 0&&e.org_id&&e.username&&e.access_key&&(e.media_upload={url:r.shareApiBaseUrl.replace(/\/$/,"")+"/mfs/v1.0/media/upload",artefacts_host:r.mediaArtefactsHost,org_id:e.org_id,media_dir:g})}async function oe(e,n){let r=D();if(!r)throw new Error("v16-runner not found. Build the binary with `cd v16-runner && python build.py` or ensure Python is available.");process.env.KANE_SPAWN_DEBUG&&process.stderr.write(`[spawn-debug] ${JSON.stringify(r)}
3
3
  `);let o=H({environment:n?.environment,mode:n?.mode,assertionMode:n?.assertionMode,finalValidation:n?.finalValidation,username:e.username,accessKey:e.access_key,sessionId:e.session_id});e.device?.platform&&await B(o,e.device),G(e,{environment:n?.environment});let i=K({env:o,runner:r,log:n?.log,sessionId:e.session_id}),d=i.child;d.stdin.write(JSON.stringify(e)+`
4
4
  `);let l=P(e.session_id);if(l)try{C(v(l),{recursive:!0}),b(l,`--- runner spawn ${new Date().toISOString()} run_index=${e.run_index} ---
5
5
  `)}catch{}return{child:d,events:i.events,sendUserResponse(t){let a=JSON.stringify({type:"user_response",answer:t});try{d.stdin.write(a+`
@@ -1,4 +1,4 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as b,d as _}from"./chunk-NVGBE2DR.js";import{a as g,c as h}from"./chunk-UH2ZTX4E.js";import{j as S}from"./chunk-XMTSHHYQ.js";import{d as f,f as v}from"./chunk-AKX4VRRR.js";var V=n=>`conv#turn=${n}`;function E(n,o){for(let t of n.split(`
2
+ import{c as b,d as _}from"./chunk-NVGBE2DR.js";import{a as g,c as h}from"./chunk-TYRTD5DD.js";import{j as S}from"./chunk-OXHMUZJV.js";import{d as f,f as v}from"./chunk-AKX4VRRR.js";var V=n=>`conv#turn=${n}`;function E(n,o){for(let t of n.split(`
3
3
  `))if(t.trim())try{let r=JSON.parse(t);if(r.turn===o)return r.text}catch{}return null}var y={format:"conversation",media_type:"text/x-conversation",anchors_supported:["#turn="]};function $(n){let{contextDir:o,graph:t,sessionStamp:r}=n,e=`su-conv-${r}`,u=t.heads.get(e);if(typeof u=="string")return{record:null,errors:[{code:"CONV_SOURCE_EXISTS",detail:`${e} already exists \u2014 resume it`}],sourceId:e,cid:u};let i=b(o,Buffer.from("","utf8")),c=h(e,i),a=v("source",c);if(a.length>0)return{record:null,errors:a.map(s=>({code:s.code,detail:s.detail})),sourceId:e,cid:""};let d=g("source",c);return{record:S(o,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:d,label:f.SOURCE,content:c}],edges:[],review:[],supersessions:[],source_head_moves:{[e]:d},media:{[e]:y},conv:{source_id:e,turn:0,append_of:null}},{expectPrev:t.latestHash}).record,errors:null,sourceId:e,cid:d}}function G(n){let{contextDir:o,graph:t,sourceId:r,text:e,force:u}=n,i=t.heads.get(r),c=t.convChains.get(r);if(typeof i!="string"||!c)return{record:null,errors:[{code:"CONV_SOURCE_MISSING",detail:`${r} is not a live conversation source`}]};let d=t.getNode(i)?.content?.blob;if(typeof d!="string")return{record:null,errors:[{code:"CONV_SOURCE_MISSING",detail:`${r} head node unreadable`}]};let l=_(o,d)?.toString("utf8")??"",s=c.turns;if(!u&&s>0&&E(l,s)===e)return{record:null,errors:null,turn:s,cid:i,idempotent:!0};let p=s+1,C=`${l}${JSON.stringify({turn:p,text:e})}
4
4
  `,O=b(o,Buffer.from(C,"utf8")),x=h(r,O),m=g("source",x);return{record:S(o,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:m,label:f.SOURCE,content:x}],edges:[],review:[],supersessions:[],source_head_moves:{[r]:m},media:{[r]:y},conv:{source_id:r,turn:p,append_of:i}},{expectPrev:t.latestHash}).record,errors:null,turn:p,cid:m,idempotent:!1}}export{V as a,E as b,$ as c,G as d};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as h}from"./chunk-IBPF5IM5.js";import{a as f}from"./chunk-6UNXON3J.js";import{a as m}from"./chunk-H6KL3FSB.js";var o=class extends Error{constructor(a,l){super(a);this.code=l;this.name="AuthError"}};async function k(c){let{creds:i,env:a,usernameFlag:l,accessKeyFlag:g,log:t}=c,e=null,u=null;if(l&&g)e={username:l,access_key:g},t("info","AUTH_RESOLVE_FLAGS","Auth resolved via CLI flags",{username:l});else{let r=i.resolveAuth();r?.method==="basic"&&(e={username:r.username,access_key:r.access_key},t("info","AUTH_RESOLVE_CONFIG","Auth resolved via config",{username:r.username}))}if(!e){let{credentials:r,profile:E}=i.getActiveCredentials();if(!r)throw new o("Not authenticated \u2014 no credentials found","not_authenticated");if(u=r.access_token,r.expires_at-Date.now()/1e3<300)try{let n=await f({creds:i,profile:E,env:a,credentials:r});n&&(u=n.accessToken,t("info","AUTH_TOKEN_REFRESHED","OAuth token refreshed"))}catch(n){let d=n instanceof Error?n.message:String(n);throw t("error","TOKEN_REFRESH_FAILED","Token refresh failed",{error:d}),new o(`Token refresh failed: ${d}`,"refresh_failed")}}let v=m(a),b=async()=>u,y=e?{username:e.username,access_key:e.access_key}:null,p=new h(v.controllerBaseUrl,b,y,t),s=await p.resolve();return s&&!e&&(e={username:s.username,access_key:s.access_key},t("info","AUTH_RESOLVE_CONTROLLER","Auth resolved via controller",{username:s.username})),{basicAuth:e,token:u,resolver:p,resolvedCreds:s}}export{o as a,k as b};
2
+ import{a as h}from"./chunk-CRPBARFG.js";import{a as f}from"./chunk-K6BWPGBO.js";import{a as m}from"./chunk-BE4FBVKY.js";var o=class extends Error{constructor(a,l){super(a);this.code=l;this.name="AuthError"}};async function k(c){let{creds:i,env:a,usernameFlag:l,accessKeyFlag:g,log:t}=c,e=null,u=null;if(l&&g)e={username:l,access_key:g},t("info","AUTH_RESOLVE_FLAGS","Auth resolved via CLI flags",{username:l});else{let r=i.resolveAuth();r?.method==="basic"&&(e={username:r.username,access_key:r.access_key},t("info","AUTH_RESOLVE_CONFIG","Auth resolved via config",{username:r.username}))}if(!e){let{credentials:r,profile:E}=i.getActiveCredentials();if(!r)throw new o("Not authenticated \u2014 no credentials found","not_authenticated");if(u=r.access_token,r.expires_at-Date.now()/1e3<300)try{let n=await f({creds:i,profile:E,env:a,credentials:r});n&&(u=n.accessToken,t("info","AUTH_TOKEN_REFRESHED","OAuth token refreshed"))}catch(n){let d=n instanceof Error?n.message:String(n);throw t("error","TOKEN_REFRESH_FAILED","Token refresh failed",{error:d}),new o(`Token refresh failed: ${d}`,"refresh_failed")}}let v=m(a),b=async()=>u,y=e?{username:e.username,access_key:e.access_key}:null,p=new h(v.controllerBaseUrl,b,y,t),s=await p.resolve();return s&&!e&&(e={username:s.username,access_key:s.access_key},t("info","AUTH_RESOLVE_CONTROLLER","Auth resolved via controller",{username:s.username})),{basicAuth:e,token:u,resolver:p,resolvedCreds:s}}export{o as a,k as b};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{w as s}from"./chunk-DWHXXPDX.js";function n(r="prod"){let e=s[r];return r!=="stage"?e:{authBaseUrl:process.env.KANE_STAGE_AUTH_URL??e.authBaseUrl,consentUrl:process.env.KANE_STAGE_CONSENT_URL??e.consentUrl,controllerBaseUrl:process.env.TESTMUAI_BASE_URL??e.controllerBaseUrl,tmsBaseUrl:process.env.KANE_STAGE_TMS_URL??e.tmsBaseUrl,testGeneratorBaseUrl:process.env.KANE_STAGE_TCG_URL??e.testGeneratorBaseUrl,secretsBaseUrl:process.env.KANE_STAGE_SECRETS_URL??e.secretsBaseUrl,testManagerUiUrl:process.env.KANE_STAGE_TEST_MANAGER_UI_URL??e.testManagerUiUrl,shareApiBaseUrl:process.env.KANE_STAGE_SHARE_API_URL??e.shareApiBaseUrl,v16ServerHost:process.env.KANE_STAGE_V16_SERVER_HOST??e.v16ServerHost,evidenceViewerUrl:process.env.KANE_STAGE_EVIDENCE_VIEWER_URL??e.evidenceViewerUrl,mediaArtefactsHost:process.env.KANE_STAGE_MEDIA_ARTEFACTS_HOST??e.mediaArtefactsHost,mobileAppBaseUrl:process.env.KANE_STAGE_MOBILE_APP_URL??e.mobileAppBaseUrl}}export{n as a};
2
+ import{w as s}from"./chunk-DEUDRSU7.js";function n(r="prod"){let e=s[r];return r!=="stage"?e:{authBaseUrl:process.env.KANE_STAGE_AUTH_URL??e.authBaseUrl,consentUrl:process.env.KANE_STAGE_CONSENT_URL??e.consentUrl,controllerBaseUrl:process.env.TESTMUAI_BASE_URL??e.controllerBaseUrl,tmsBaseUrl:process.env.KANE_STAGE_TMS_URL??e.tmsBaseUrl,testGeneratorBaseUrl:process.env.KANE_STAGE_TCG_URL??e.testGeneratorBaseUrl,secretsBaseUrl:process.env.KANE_STAGE_SECRETS_URL??e.secretsBaseUrl,testManagerUiUrl:process.env.KANE_STAGE_TEST_MANAGER_UI_URL??e.testManagerUiUrl,shareApiBaseUrl:process.env.KANE_STAGE_SHARE_API_URL??e.shareApiBaseUrl,v16ServerHost:process.env.KANE_STAGE_V16_SERVER_HOST??e.v16ServerHost,evidenceViewerUrl:process.env.KANE_STAGE_EVIDENCE_VIEWER_URL??e.evidenceViewerUrl,mediaArtefactsHost:process.env.KANE_STAGE_MEDIA_ARTEFACTS_HOST??e.mediaArtefactsHost,mobileAppBaseUrl:process.env.KANE_STAGE_MOBILE_APP_URL??e.mobileAppBaseUrl}}export{n as a};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ var n={maxShrinks:3};function r(e){return e.failedAtReplayOnly?{kind:"fail",replayOnly:e.failedAtReplayOnly}:e.hasRetry?e.shrinkCount>=e.maxShrinks?{kind:"complete-reauthor"}:{kind:"retry",newAuthorBoundary:e.failedAt}:{kind:"fail"}}function t(e){return e.adaptiveHeal!==!1}function a(e){return e.retry===void 0&&e.retryCount===void 0?null:`notice: --retry / --retry-count are no longer used \u2014 adaptive heal is on by default (${n.maxShrinks} attempts, then a full re-author). Pass --no-adaptive-heal to disable.`}export{n as a,r as b,t as c,a as d};
@@ -0,0 +1,5 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as q,c as $}from"./chunk-PDXZROJM.js";import{U as V}from"./chunk-O7RB4X6I.js";import{b as z}from"./chunk-5GUD3CIH.js";import{a as ft,b as R}from"./chunk-NBXYL2JT.js";import{a as B}from"./chunk-BPMSNGXQ.js";import{a as M}from"./chunk-DPUV6OSP.js";import{a as F}from"./chunk-NLCCBXXV.js";import{a as P}from"./chunk-RZ4F3BHX.js";import{e as gt}from"./chunk-UR6MHSHU.js";import{readFileSync as C,existsSync as j,readdirSync as qt,mkdirSync as D,writeFileSync as O}from"fs";import{readFile as pt,unlink as $t}from"fs/promises";import{join as E}from"path";import{existsSync as Ct,mkdirSync as jt,readdirSync as at,writeFileSync as Dt}from"fs";import{join as x}from"path";import{randomUUID as v}from"crypto";var mt=["children","instructions","branches","module_content","true_branch","false_branch"];function H(n){let t=new Map,i=s=>{if(!s||typeof s!="object")return;let r=s;if(Array.isArray(r.operations))for(let e of r.operations){let o=e.operation_id;typeof o=="string"&&o&&!t.has(o)&&t.set(o,r)}for(let e of mt){let o=r[e];Array.isArray(o)?o.forEach(i):o&&typeof o=="object"&&i(o)}};return n.forEach(i),t}function J(n,t){let i=new Map;for(let s of n){let r=s.action_id?t.get(s.action_id):void 0;if(!r)continue;let e=i.get(r)??[];e.push(s),i.set(r,e)}return i.size===0?null:[...i].map(([s,r])=>Et(s,r))}function ht(n){if(!n.timestamp||n.duration_ms==null)return"";let t=new Date(n.timestamp);return isNaN(t.getTime())?"":new Date(t.getTime()+n.duration_ms).toISOString()}function G(n){if(n!=null)try{return JSON.parse(n)}catch{return n}}function K(n,t,i){let s=n.user_variables,r=typeof s=="string",e;try{e=r?JSON.parse(s):s??[]}catch{return}if(!Array.isArray(e)||e.length===0)return;let o=e.find(l=>t&&l.name===t)??(e.length===1?e[0]:void 0);o&&(o.value=i,n.user_variables=r?JSON.stringify(e):e)}function Et(n,t){let i=structuredClone(n),s=t[0],r=t[t.length-1];switch(i.status=t.find(e=>e.status!=="success")?.status??s.status,i.start_timestamp=s.timestamp??i.start_timestamp,i.end_timestamp=ht(r)||i.end_timestamp,i.content_type){case"api":{let e=r.action_params?.api_data?.response;e&&typeof e=="object"&&(i.api_data={...i.api_data??{},response:e},K(i,r.output_variable,e));break}case"script":{r.output_value!=null&&K(i,r.output_variable??i.output_variable_name,r.output_value);break}case"db_query":{r.output_value!=null&&(i.db_details={...i.db_details??{},carried_out_query:G(r.output_value)});break}case"screenshot_command":{let e=G(r.output_value);e&&typeof e=="object"&&(i.smartui_results=e);break}case"network_assertion":case"network_query":break;default:break}return i}var bt="/home/kaneai/Downloads";function N(n){return`${bt}/${n}`}function W(n){return"FILE__"+n.replace(/[^A-Za-z0-9]/g,"_")}function L(n){let t=n?.media;return!t||!t.name||!t.media_url?null:{media_id:t.media_id??"",name:t.name,media_url:t.media_url,type:t.type??"doc"}}function Z(n){return n?n.includes(`
3
+ `)?n.split(`
4
+ `).map(t=>t.trim()).filter(Boolean):n.split(". ").map(t=>t.trim()).filter(Boolean).map(t=>t.endsWith(".")?t:t+"."):[]}function w(n){return typeof n=="string"&&n.includes("{{secrets.")}var yt={click:"CLICK",double_click:"CLICK",type:"TYPE",fill:"TYPE",clear:"CLEAR",select:"SELECT",hover:"HOVER",drag:"DRAG_DROP",upload_files:"UPLOAD_FILE",navigate:"OPEN",go_back:"NAVIGATE",go_forward:"NAVIGATE",refresh:"REFRESH",press_key:"SENDKEYS",scroll:"SCROLL_PIXELS",scroll_into_view:"SCROLL_UNTIL_ELEMENT",wait:"WAIT",wait_until:"WAIT_UNTIL",wait_for_load:"WAIT_FOR_LOAD",switch_tab:"SWITCH_TAB",new_tab:"NEW_TAB",close_tab:"CLOSE_TAB",api:"API",evaluate_js:"EVALUATE_JS",vision_query:"VISION_QUERY",textual_query:"TEXTUAL_QUERY",get_url:"GET_URL",get_title:"GET_TITLE",assert:"ASSERTION",math:"MATHEMATICAL_OPERATION",set_cookies:"SET_COOKIES",delete_cookies:"DELETE_COOKIES",clear_cookies:"CLEAR_COOKIES",set_local_storage:"SET_LOCAL_STORAGE",delete_local_storage:"DELETE_LOCAL_STORAGE",clear_local_storage:"CLEAR_LOCAL_STORAGE",set_clipboard:"SET_CLIPBOARD",paste_clipboard:"PASTE_CLIPBOARD",clear_clipboard:"CLEAR_CLIPBOARD",device_control:"DEVICE_CONTROL",device_control_query:"DEVICE_CONTROL_QUERY"},Q={literal:"SET_VARIABLE",condition:"SET_VARIABLE",visual:"VISION_QUERY",dom:"TEXTUAL_QUERY",url:"GET_URL",title:"GET_TITLE",devtool_network:"DEVTOOLS_NETWORK_QUERY",devtool_console:"DEVTOOLS_CONSOLE_QUERY",devtool_cookies:"DEVTOOLS_COOKIES_QUERY",devtool_storage:"DEVTOOLS_STORAGE_QUERY",devtool_performance:"DEVTOOLS_PERFORMANCE",api_response:"API_CALLS_QUERY",textual_visual:"TEXTUAL_ANALYZER"},It=new Set(["CLICK","TYPE","FILL","HOVER","SCROLL_UNTIL_ELEMENT","UPLOAD_FILE","VISION_QUERY","DRAG_DROP","SELECT"]);function tt(n,t){if(n==="analyze"){let s=t?.action_params?.analyzer_type??"";return Q[s]}if(n==="scroll"&&t?.action_params?.into_view===!0)return"SCROLL_UNTIL_ELEMENT";let i=yt[n];return i||console.warn(`[migrator] UNKNOWN action_type "${n}" \u2014 falling back to "${n.toUpperCase()}"; explicit mapping required`),i??n.toUpperCase()}function et(n,t){if(!n||!t)return"";try{let i=new Date(n);return isNaN(i.getTime())?"":new Date(i.getTime()+t).toISOString()}catch{return""}}function nt(n){try{return JSON.parse(n.output_value??"{}")}catch{return{}}}function vt(n){let t=n.output_variable??"";if(!t)return"[]";let s={...nt(n)};return delete s.body,JSON.stringify([{name:t,unique_key:(n.action_id??"").replace(/-/g,"").slice(0,8)||v().replace(/-/g,"").slice(0,8),value:s,variable_description:"API Response"}])}function At(n,t,i){let s=n.action_params??{},r=It.has(t)?"Vision Agent":"Operation Agent",e={operation_type:t};if(t==="OPEN"&&(e.url=s.url??""),t==="SET_VARIABLE"&&(e.variable_name=n.output_variable??s.key??"",e.variable_value=n.output_value??""),t==="UPLOAD_FILE"){let g=L(s);g&&(e.value=N(g.name))}let o={},l={},a=n.action_instruction??"",c=s.text??"",u=s.url??"",p=[["intent",a],["value",c],["url",u]];for(let[g,h]of Object.entries(i)){let I=String(h);if(g.startsWith("secrets."))for(let[y,b]of p)b.includes(I)&&(l[y]=g);for(let[y,b]of p)b.includes(I)&&!(y in o)&&(o[y]=b)}let _=n.action_type,d={operation:n.action_instruction??"",agent:r,operation_dict:e,reasoning:_==="analyze"?s.query??"":n.intent??n.action_instruction??"",variable:o,secrets:l,params:{}};_==="analyze"&&typeof s.code=="string"&&s.code&&(d.code=s.code),_==="analyze"&&typeof s.code_js=="string"&&s.code_js&&(d.code_js=s.code_js),_==="analyze"&&typeof s.condition_expression=="string"&&s.condition_expression&&(d.condition_expression=s.condition_expression),s.uses_websocket===!0&&(d.uses_websocket=!0),s.uses_sse===!0&&(d.uses_sse=!0),_==="analyze"&&s.analyzer_type==="textual_visual"&&(typeof s.wrapped_js=="string"&&(d.wrapped_js=s.wrapped_js),Array.isArray(s.locators)&&(d.locators=s.locators),typeof s.operator=="string"&&(d.operator=s.operator),Array.isArray(s.transforms)&&(d.transforms=s.transforms),typeof s.query=="string"&&(d.query=s.query),typeof s.expected_value=="string"&&(d.expected_value=s.expected_value),typeof s.needs_unit_conversion=="boolean"&&(d.needs_unit_conversion=s.needs_unit_conversion),typeof s.condition=="string"&&(d.condition=s.condition));let m={set_cookies:"cookies",set_clipboard:"text",delete_cookies:"names",set_local_storage:"items",delete_local_storage:"keys"}[_];return m&&s[m]!==void 0&&(d[m]=s[m]),_==="set_clipboard"&&typeof s.html=="string"&&s.html&&(d.html=s.html),d}function Rt(n){let t=n.assertion_tree??{};if(typeof t.passed=="boolean")return t.passed;let i=t.sub_results??[];return i.length===0?t.status==="passed":(t.composite_operator??"and")==="or"?i.some(r=>r.passed===!0):i.every(r=>r.passed===!0)}function it(n){return n.map(t=>({description:t.description??"",store_key:t.store_key??"",expected_value:t.expected??"",extracted_value:t.extracted_value??"",operator:t.operator??"equals",transforms:t.transforms??[]}))}function Pt(n){let t=n.assertion_tree??{},i=t.sub_results??[],s=it(i);return{operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[],sub_results:i,sub_checks:s,composite_operator:t.composite_operator??"and",verification:t.verification??"",claim:t.description??""}}function kt(n){let i=(n.action_params??{}).assertion_tree??{},s=i.sub_results??[],r=it(s);return[{operation:n.action_instruction??"",agent:"Operation Agent",operation_dict:{operation_type:"ASSERTION",assertion_tree:{sub_results:s,sub_checks:r,composite_operator:i.composite_operator??"and",verification:"",claim:i.description??n.action_instruction??"",operator:[],assertion_operands:[],left_operand:null,right_operand:null,operands:[]}},variable:{},secrets:{},params:{}}]}function xt(n,t,i,s){let r=n.visual_data;if(!r||r.x==null||r.y==null)return null;let e=t?`${t}/test_screenshots`:"";return{x:r.x,y:r.y,confidence:0,bbox:r.bbox??null,bbox_source:r.bbox?"accessibility_tree":"fallback",viewport_width:r.viewport_width??1280,viewport_height:r.viewport_height??800,scale_factor:null,raw_image_url:e?`${e}/untagged_screenshot/${i}.${s?.get(i)??"png"}`:"",raw_image_sas_url:"",annotated_image_url:"",annotated_image_sas_url:""}}function Ot(n){if(!n)return"";let t=n;return typeof n=="object"&&!Array.isArray(n)&&Array.isArray(n.frameInfo)&&(t=n.frameInfo),!Array.isArray(t)||t.length===0?"":JSON.stringify(t)}function St(n){return/^(android|ios)_native$/i.test(n.platform??"")}function st(n,t){return n.map(i=>({...i,type:t?i.strategy??i.type??"native":i.isXPath?"xpath":"css"}))}function Nt(n,t,i){let s={selector_target:"",drag_displacement:{},hold_duration_ms:null,move_duration_ms:null,hold_at_destination_ms:null};if(n!=="drag")return s;let r=t.target_selectors,e={};typeof t.direction=="string"&&t.direction&&(e.direction=t.direction,typeof t.fraction=="number"&&(e.fraction=t.fraction));let o=l=>typeof t[l]=="number"?Math.trunc(t[l]):null;return{selector_target:Array.isArray(r)&&r.length>0?st(r,i):"",drag_displacement:e,hold_duration_ms:o("hold_duration_ms"),move_duration_ms:o("move_duration_ms"),hold_at_destination_ms:o("hold_at_destination_ms")}}function X(n,t="",i){let s=n.action_type,r=tt(s,n),e=n.action_params??{},o=n.coordinates??null,l=n.selectors??null,a=!!(l&&l.length>0),c=St(n),u=Nt(s,e,c),p=n.timestamp??"",_=n.duration_ms??0,d=n.variables_used??{},f=n.action_id??v(),m=v(),g=et(p,_),h="",I="";if(s==="navigate")I=e.url??"",h=I;else if(s==="type"||s==="fill")h=e.text??"";else if(s==="press_key")h=e.key??"";else if(s==="wait")h=String(e.ms??e.timeout_ms??"");else if(s==="evaluate_js")h=e.script??"";else if(s==="upload_files"){let U=L(e);U&&(h=N(U.name))}else s==="analyze"&&r==="SET_VARIABLE"&&(h=n.output_value??"");let y="";s==="go_back"?y="back":s==="go_forward"&&(y="forward");let b=n.action_instruction??"",A=w(h)||w(I)||w(b),S=At(n,r,d);return{operation_id:f,instruction_id:m,instruction:b,intent:b,operation_start:p,operation_end:g,status:n.status??"",command:r,name:"",target:"",value:h,message:"",operation_dict:"",frame:Ot(n.frame_info),error_message:n.error??"",code_snippet:"",sub_instruction_obj:JSON.stringify(S),test_id:"",test_version:"",action:"",string_to_float:!1,feedback_msg:"",time_taken:"",create_time_stamp:"",update_time_stamp:"",locator_variable:"",locator_variable_name:"",image_url:t?`${t}/test_screenshots/untagged_screenshot/${f}.${i?.get(f)??"png"}`:"",alternative_xpaths:[],attribute:"",value_description:"",url:I,navigation_direction:y,tagified_image_url:"",query_variable_name:n.output_variable??"",query_variable_value:n.output_value??"",query_variable_type:"",expected_value:"",queried_value:"",operator:"",assertion_status:r==="ASSERTION"?Rt(e):"",query_info_dict:{},query_content_confidence:"none",debugging_logs:[],locator_index:0,query_html:"",user_variables:"[]",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,tab_index:String(e.tab_index??""),tab_identifier:String(e.tab_identifier??""),scroll_value:e.amount??1,scroll_direction:e.direction??"",mi_scroll_payload:{},sleep_duration:0,app_id:"",manual_interaction_tag:"",string_to_float_list:[],js_snippet:s==="evaluate_js"?e.script??"":"",code_error:"",hide:A,dismiss_dialog:!1,use_v2_mobile_tagging:c,multiple_inputs:!1,dialog_action:"",dialog_type:"",is_coordinates_used_for_interaction:o!==null&&!a,element_coordinates_ratio:[],element_bounds_ratio:[],x_coord:a?null:o?.x??null,y_coord:a?null:o?.y??null,target_x_coord:e.target_x??null,target_y_coord:e.target_y??null,source_description:e.source_description??null,target_description:e.target_description??null,use_coordinates:o!==null&&!a,kaneaiMobileTaggingImageLimit:1,clicks_order_code:"se_js_ac",selector:a?st(l,c):"",selector_target:u.selector_target,math_result_variable_name:"",math_result_variable_value:"",expression_tree:r==="ASSERTION"?Pt(e):e.expression_tree??{},assertion_tree:e.assertion_tree??{},assertion_tree_simplified:{},network_throttle:{},is_mobile_offline:!1,autoheal:!1,reprobe:n.reprobe??!1,click_modifier:(e.click_count??1)>=2?{kind:"multi_click",frequency:e.click_count}:null,db_query:"",db_details:{},db_query_decoded:"",is_global_variable:!1,is_global_variable_persist:!1,global_variable_id:"",wait_for_element_timeout:0,failure_condition:r==="ASSERTION"?"Fail test immediately":"",screenshot_command:"",smartui_contents:{},smartui_results:{},result_type:"",result_hint:"",drag_offset:{},drag_displacement:u.drag_displacement,hold_duration_ms:u.hold_duration_ms,move_duration_ms:u.move_duration_ms,hold_at_destination_ms:u.hold_at_destination_ms,start_coordinates:e.source_coordinates?{x:e.source_coordinates[0],y:e.source_coordinates[1]}:{},end_coordinates:e.target_coordinates?{x:e.target_coordinates[0],y:e.target_coordinates[1]}:{},element_rect:null,is_canvas:!1,until_condition:"",until_max_retries:0,until_settle_ms:0,api_data:s==="api"?{request:n.action_params?.api_data?.request??{}}:{},output_variables:s==="api"?n.output_variable?{[n.output_variable]:null}:{}:n.output_variable?{[n.output_variable]:n.output_value??""}:{},visual_context:xt(n,t,f,i),reasoning:s==="analyze"?e.query??"":n.intent??n.action_instruction??""}}function Y(n,t){let i=n.action_type,s=tt(i,n),r=n.timestamp??"",e=n.duration_ms??0,o=et(r,e),l=s==="ASSERTION"||s==="MATHEMATICAL_OPERATION";return{instruction_id:t.instruction_id,instruction_class:l?"non_driver_action":"driver_action",module_id:"",instruction:n.action_instruction??"",command:s,error:null,parent_instruction_id:"",classification_layer_resp:s==="ASSERTION"?kt(n):[],classification_error:{},operations:[t],status:n.status??"",start_timestamp:r,end_timestamp:o,type:"agent_generated",tags:[],html_paths:[],optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,content_type:i==="api"?"api":i==="analyze"&&n.action_params?.analyzer_type==="api_response"?"api_calls_query":i==="analyze"&&n.action_params?.analyzer_type?.startsWith("devtool_")?n.action_params.analyzer_type.replace("devtool_","devtools_"):"instruction",js_snippet:i==="evaluate_js"?n.action_params?.script??"":"",user_variables:i==="api"?vt(n):"[]",api_data:i==="api"?{request:n.action_params?.api_data?.request??{},response:nt(n)}:{},params_used:!1,hard_assertion:s==="ASSERTION"?n.action_params?.failure_condition==="hard":!1,expected_outcome:"",module_execution_index:0,module_version:null,network_throttle:{},isEdited:!1,use_query_assertion_v2:!1,db_query:"",db_details:{},network_assertion_content:{},screenshot_command:"",smartui_contents:{},generative_id:"",plan_id:"",generative_objective:"",error_message:"",error_code:"",reason:"",title:"",used_variables:[],reasoning:i==="analyze"?n.action_params?.query??"":n.intent??n.action_instruction??""}}function Lt(n,t=[]){let i=n.action_params??{},s=i.branches??[],r=i.winning_index??-1,e=i.sub_results??[],o={};for(let a of e){let c=a.sub_results;if(c)for(let u of c){let p=u.store_key;p&&(o[p]=u)}}let l=s.map((a,c)=>{let u=c===r,p=(a.sub_checks??[]).map(_=>{let d=o[_.store_key];return{description:_.description,store_key:_.store_key,expected_value:_.expected_value,stored_value:d?.extracted_value??_.stored_value,operator:_.operator??d?.operator??"equals",transforms:_.transforms??d?.transforms??[]}});if(p.length===0&&a.condition&&e.length>0){let d=e.find(f=>f.branch_index===c)?.sub_results??[];d.length>0&&(p=d.map(f=>({description:f.description??a.condition,store_key:f.store_key??"",expected_value:f.expected??"true",stored_value:f.extracted_value??void 0,operator:f.operator??"equals",transforms:f.transforms??[]})))}return{branch_index:c,condition:a.condition??null,branch_type:a.branch_type??"sub_objective",passed:u,sub_objective:null,custom_event:a.custom_event??null,children:u?t:[],sub_checks:a.condition?p:[],composite_operator:a.composite_operator??"and"}});return{content_type:"conditional_block",instruction_id:`if_else_${v().slice(0,8)}`,instruction:n.action_instruction??"",instruction_class:"driver_action",command:"",status:n.status??"success",resolved_branch_index:r,branches:l,generative_id:"",generative_objective:"",variables_used:{},classification_layer_resp:[],classification_error:{},used_variables:[],user_variables:"[]",module_id:"",module_execution_index:0,module_version:"",plan_id:"",optional_flag:!1,max_retries:0,retries_delay:0,explicit_wait:0,implicit_wait:0,error:null,error_message:"",error_code:"",reason:"",start_timestamp:n.timestamp??"",end_timestamp:"",type:"agent_generated",hook:null,hook_type:null,evaluation_context:{},query_variables:{}}}function rt(n,t,i){for(let s of n)s.content_type==="instruction"&&"generative_id"in s&&(s.generative_id=t,s.generative_objective=i)}function T(n,t="",i,s){let r=[],e=0;for(;e<n.length;){let o=n[e],l=o.action_type;if(!s?.keepFailedActions&&o.status==="error"&&l!=="assert"&&l!=="if_else"&&l!=="child_agent_start"&&l!=="child_agent_end"&&!(o.until_condition&&!o.error)){e+=1;continue}if(l==="analyze"&&(!Q[o.action_params?.analyzer_type??""]||o.action_params?.analyzer_type==="textual_visual"&&o.action_params?.code)){e+=1;continue}if(l==="child_agent_start"){let a=o.action_params?.child_id??"",c=o.action_params?.objective??"",u=[];e+=1;let p=1,_="error",d;for(;e<n.length&&p>0;){let A=n[e],S=A.action_type;if(S==="child_agent_start")p+=1;else if(S==="child_agent_end"&&(p-=1,p===0)){_=A.status??"success",d=A,e+=1;break}p>0&&u.push(A),e+=1}let f=T(u,t,i);rt(f,a,c);let m=d?.action_params?.result_code??null,g=d?.action_params?.reason_code??null,h=d?.action_params?.error_message??null,I=d?.action_params?.summary??null,y=d?.action_params?.one_liner??null,b=_==="error";r.push({content_type:"generative_block",instruction_id:`generative_block_${a}`,generative_id:a,objective:c,status:_,children:f,error_message:b?h??null:null,error_code:b?g??null:null,result_code:m??null,bifurcation_context:[],approach_reason:Z(I),one_liner:y??null});continue}else if(l==="child_agent_end"){e+=1;continue}else if(l==="if_else"){e+=1;let a=[];for(;e<n.length&&n[e].action_type==="child_agent_start";){let c=n[e],u=c.action_params?.child_id??"",p=c.action_params?.objective??"",_=[];e+=1;let d=1,f="error";for(;e<n.length&&d>0;){let g=n[e];if(g.action_type==="child_agent_start")d+=1;else if(g.action_type==="child_agent_end"&&(d-=1,d===0)){f=g.status??"success",e+=1;break}d>0&&_.push(g),e+=1}let m=T(_,t,i);a.push(...m)}r.push(Lt(o,a));continue}else if(l==="query_tool"){e+=1;continue}else if(o.until_condition){let a=X(o,t,i),c=Y(o,a),u=typeof o.until_condition_met=="boolean"?o.until_condition_met:o.status==="success";r.push({content_type:"until_block",instruction_id:`until_${v().slice(0,8)}`,condition:o.until_condition,max_retries:o.until_max_retries??10,settle_ms:o.until_settle_ms??500,current_count:0,condition_met:u,children:[c],generative_id:"",generative_objective:"",variables_used:{},status:o.status??"success"})}else{let a=X(o,t,i),c=Y(o,a);r.push(c)}e+=1}return r}function k(n,t="",i,s){let r=[],e=[],o=s?.passthrough,l=o?H(o.authoredInstructions):null;for(let c of n){if(o&&l&&c.flatIndex!==void 0&&o.replayOnlyFlatIndices.has(c.flatIndex)){let g=J(c.records,l);if(g){for(let h of g)r.push(h),e.push(c.flatIndex);continue}console.warn(`[migrator] replay-only passthrough: no authored operation matched step ${c.flatIndex} (action_id \u2260 any operation_id in the authored blob) \u2014 falling back to this run's records`)}let u=T(c.records,t,i,s);if(u.length===0)continue;let p=v().replace(/-/g,"");rt(u,p,c.objective);let _=u.some(g=>"status"in g&&typeof g.status=="string"?g.status==="error"||g.status==="failed":!1),d=c.resultCode?parseInt(c.resultCode,10):null,f=d!==null&&!isNaN(d)&&d>=200,m=_||f?"error":"success";r.push({content_type:"generative_block",instruction_id:`generative_block_${p}`,generative_id:p,objective:c.objective,status:m,children:u,error_message:m==="error"?c.errorMessage??null:null,error_code:m==="error"?c.reasonCode??null:null,result_code:c.resultCode??null,bifurcation_context:[],approach_reason:Z(c.summary),one_liner:c.oneLiner??null}),e.push(c.flatIndex)}let a=s?.moduleSpans??[];return a.length===0?{instructions:r}:{instructions:ot(r.map((c,u)=>({block:c,flat:e[u]})),a)}}function ot(n,t){let i=[],s=e=>e===void 0?void 0:t.find(o=>e>=o.flatFrom&&e<=o.flatTo),r=0;for(;r<n.length;){let e=s(n[r].flat);if(!e){i.push(n[r].block),r++;continue}let o=[];for(;r<n.length&&s(n[r].flat)===e;)o.push(n[r++]);i.push(Tt(e,ot(o,e.children)))}return i}function wt(n){for(let t of n){let i="status"in t&&typeof t.status=="string"?t.status:"";if(i==="error"||i==="failed"){let s="error_message"in t?t.error_message:void 0,r="error_code"in t?t.error_code:void 0;return{message:s??null,code:r??null}}}return null}function Tt(n,t){let i=n.meta,s=(c,u="")=>typeof i[c]=="string"?i[c]:u,r=(c,u=!1)=>typeof i[c]=="boolean"?i[c]:u,e=c=>Array.isArray(i[c])?i[c]:[],o=typeof i.module_version=="number"||typeof i.module_version=="string"?i.module_version:null,l=s("module_id"),a=wt(t);return{content_type:V,instruction_id:`module_block_${l}`,module_id:l,module_version:o,module_instance_id:v(),module_name:s("module_name"),module_description:s("module_description"),module_platform:s("module_platform"),creation_mode:s("creation_mode","Agent"),tms_status:s("tms_status","active"),is_validated:r("is_validated"),is_dirty:n.dirty,enrichment_id:s("enrichment_id"),tags:e("tags"),project_ids:e("project_ids"),link_to_all:r("link_to_all"),status:a?"error":"success",children:t,error_message:a?.message??null,error_code:a?.code??null,update_available:!1,update_info:{}}}function ct(n,t){let i;try{i=at(n)}catch{return 0}let s=0,r=i.filter(e=>/^\d+$/.test(e)).sort((e,o)=>Number(e)-Number(o));for(let e of r){let o=x(n,e),l=x(o,"logs");if(!Ct(l))continue;let a;try{a=at(l)}catch{continue}let c=a.filter(_=>_.endsWith("-actions.ndjson")).sort((_,d)=>(parseInt(_,10)||0)-(parseInt(d,10)||0)),u=[];for(let _ of c){let d=t.readActions(x(l,_));d.length&&u.push({objective:t.objective??"",records:d})}if(u.length===0)continue;let{instructions:p}=k(u,t.screenshotBaseUrl??"",t.extMap,{keepFailedActions:!0});if(p.length!==0)try{let _=x(o,"auteur");jt(_,{recursive:!0}),Dt(x(_,"execution.json"),JSON.stringify(t.buildBlob(p),null,2)),s++,t.log?.("info","EVIDENCE_ARCHIVED_ATTEMPT_BLOB","Derived nested attempt blob",{attempt:e,instructions:p.length})}catch(_){t.log?.("debug","EVIDENCE_ARCHIVED_ATTEMPT_BLOB_FAILED","Nested attempt blob derivation failed",{attempt:e,error:_ instanceof Error?_.message:String(_)})}}return s}var lt=gt(ft(),1);import{createWriteStream as Ut}from"fs";import{readFile as Ft}from"fs/promises";import{join as Mt,basename as Bt}from"path";import{tmpdir as zt}from"os";var Vt=["**/screenshots/**","**/annotated/**","**/tcg/**","**/bifurcation/**"];async function ut(n){let t=Mt(zt(),`${Bt(n)}_artifacts.zip`);return new Promise((i,s)=>{let r=Ut(t),e=(0,lt.default)("zip",{zlib:{level:6}});r.on("close",()=>i(t)),e.on("error",s),e.pipe(r),e.glob("**/*",{cwd:n,ignore:Vt}),e.finalize()})}async function dt(n){return Ft(n)}async function Gt(n,t){return pt(z(n,t))}function Kt(n){return{key:"artifacts",content_type:"application/zip",filename:`${n}.evidence`}}var _t=class{config;controller;testId;constructor(t){this.config=t,this.controller=new M(t.controllerBaseUrl,t.auth),this.testId=t.testId}log(t,i,s,r){this.config.log?.(t,i,s,r)}async execute(){let{onProgress:t}=this.config;try{if(!this.testId)return this.log("error","PIPELINE_ABORT","No test_id available"),{success:!1,testId:null,error:"No test_id available"};let i=this.config.evidence,s=null;if(this.config.shouldUploadArtifacts!==!1){t("convert","running");let l=this.collectNdjsonPerRun(),a=l.reduce((m,g)=>m+g.records.length,0);this.log("info","PIPELINE_CONVERT","Collected NDJSON records",{total_records:a,run_groups:l.length});let c=this.loadReplayOnlyPassthrough(),{instructions:u}=l.length>0?k(l,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap,{moduleSpans:this.config.moduleSpans,...c?{passthrough:c}:{}}):{instructions:[]};this.log("info","PIPELINE_CONVERT_INSTRUCTIONS","Auteur instructions produced",{count:u.length});let p=this.buildExecutionEnvelope(u),_=Buffer.from(JSON.stringify(p));this.log("info","PIPELINE_CONVERT_BLOB","Blob created",{size_kb:+(_.length/1024).toFixed(1)});let d=E(this.config.sessionDir,"execution.json");O(d,JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_LOCAL_SAVE","Execution blob saved locally",{path:d});let f=i?.packTestDir??this.config.evidenceRead?.packTestDir;if(f){let m=E(f,"auteur");D(m,{recursive:!0}),O(E(m,"execution.json"),JSON.stringify(p,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack",{path:E(m,"execution.json")}),this.deriveArchivedAttemptBlobs(f)}if(t("convert","done"),i)s=_;else{t("zip","running"),this.log("info","PIPELINE_ZIP_START","Zipping session",{session_dir:this.config.sessionDir});let m=null,g;try{m=await ut(this.config.sessionDir),g=await dt(m),this.log("info","PIPELINE_ZIP_DONE","Zip complete",{size_mb:+(g.length/1024/1024).toFixed(1),path:m}),t("zip","done",`${(g.length/1024/1024).toFixed(1)}MB`)}finally{m&&await $t(m).catch(()=>{})}t("presign","running"),this.log("info","PIPELINE_PRESIGN_START","Requesting presigned URLs",{url:`${this.config.controllerBaseUrl}/upload/presign`,test_id:this.testId,session_id:this.config.sessionId});let h=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"artifacts",content_type:"application/zip",filename:`${this.config.sessionId}_artifacts.zip`},{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:h.urls.artifacts?.blob_url,blob_url:h.urls.blob?.blob_url}),t("presign","done"),t("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading artifacts and blob",{artifact_size_mb:+(g.length/1024/1024).toFixed(1),blob_size_kb:+(_.length/1024).toFixed(1)}),await Promise.all([R(h.urls.artifacts.upload_url,g,"application/zip"),R(h.urls.blob.upload_url,_,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),t("upload","done")}}else{let l=this.collectNdjsonPerRun(),a=this.loadReplayOnlyPassthrough(),{instructions:c}=l.length>0?k(l,this.config.screenshotBaseUrl??"",this.config.screenshotExtMap,{keepFailedActions:!0,moduleSpans:this.config.moduleSpans,...a?{passthrough:a}:{}}):{instructions:[]},u=this.buildExecutionEnvelope(c),p=E(this.config.sessionDir,"execution.json");O(p,JSON.stringify(u,null,2)),this.log("info","PIPELINE_LOCAL_SAVE","Execution blob saved locally (no upload)",{path:p});let _=this.config.evidence?.packTestDir??this.config.evidenceRead?.packTestDir;if(_){let d=E(_,"auteur");D(d,{recursive:!0});let f=this.readAuthoredExecution();O(E(d,"execution.json"),f??JSON.stringify(u,null,2)),this.log("info","PIPELINE_CONVERT_PACK_COPY","Execution blob copied into pack (gated)",{path:E(d,"execution.json"),source:f?"authored":"run_envelope"}),this.deriveArchivedAttemptBlobs(_)}t("convert","skipped"),t("zip","skipped"),t("presign","skipped"),t("upload","skipped"),this.log("info","PIPELINE_UPLOAD_SKIPPED","Upload steps skipped (gate disabled)")}if(this.config.shouldReplaceLocalOutput&&this.config.onAtomicReplace){t("atomic_replace","running");try{await this.config.onAtomicReplace(),this.log("info","PIPELINE_ATOMIC_REPLACE_OK","Local output replaced"),t("atomic_replace","done")}catch(l){let a=l instanceof Error?l.message:String(l);throw this.log("error","PIPELINE_ATOMIC_REPLACE_FAILED","Atomic-replace failed",{error:a}),t("atomic_replace","failed",a),l}}else t("atomic_replace","skipped");let r,e;if(this.config.shouldCommit&&!this.config.isFirstRun&&this.config.onCommitLock){t("commit_lock","running");let l=await this.config.onCommitLock();if(l.ok)r=l.testcaseId||void 0,this.log("info","PIPELINE_COMMIT_LOCK_OK","Commit lock acquired",{testcase_id:r??"none",trigger:l.trigger??null,test_instance_id:l.testInstanceId??null}),t("commit_lock","done");else return this.log("error","PIPELINE_COMMIT_LOCK_FAILED","Commit lock failed",{reason:l.reason,message:l.message}),t("commit_lock","failed",`${l.reason??"unknown"}: ${l.message??""}`),{success:!1,testId:this.testId,error:`commit-lock failed: ${l.reason??"unknown"}`}}else t("commit_lock","skipped");if(this.config.isFirstRun&&!this.config.skipTmsFinalize){t("finalize","running"),this.log("info","PIPELINE_FINALIZE_START","Finalizing test (first-run)",{test_id:this.testId,commit_id:this.config.commitId});let l=new B(this.config.tmsBaseUrl,this.config.tmsUsername,this.config.tmsAccessKey),a=this.config.runObjectives&&this.config.runObjectives.length>0?this.config.runObjectives:[this.config.firstObjective];if(r=(await l.endTest(this.testId,{commit_id:this.config.commitId,time_taken:Math.round(this.config.totalDuration),steps_count:this.config.totalSteps,commit_message:this.config.firstObjective.slice(0,255),objectives:a})).testcase_id||void 0,this.log("info","PIPELINE_FINALIZE_OK","Test finalized",{testcase_id:r??"none"}),this.config.onFinalizeSuccess)try{await this.config.onFinalizeSuccess(r)}catch(u){this.log("warn","PIPELINE_FINALIZE_META_FAILED","Meta-rewrite after endTest failed",{error:String(u)})}t("finalize","done")}else t("finalize","skipped"),this.log("info","PIPELINE_FINALIZE_SKIPPED","Finalize skipped (evolve flow or first-run disabled)");if(r&&this.config.shareApiBaseUrl)try{e=await this.generateShareLink(r),this.log("info","PIPELINE_SHARE_OK","Share link generated",{share_id:e})}catch(l){this.log("warn","PIPELINE_SHARE_FAILED","Share link failed",{error:String(l)})}if(i&&s){let l=null;t("zip","running");try{await i.sealFn({testcaseId:r,shareId:e}),l=i.sealedPackPath?await pt(i.sealedPackPath):await Gt(i.executionId,i.cwd),this.log("info","PIPELINE_EVIDENCE_SEALED","Evidence pack sealed",{execution_id:i.executionId}),this.log("info","PIPELINE_PACK_READ","Sealed pack read",{size_mb:+(l.length/1024/1024).toFixed(1)})}catch(a){let c=a instanceof Error?a.message:String(a);this.log("warn","PIPELINE_EVIDENCE_UPLOAD_SKIPPED","Evidence seal/read failed \u2014 uploading blob only",{execution_id:i.executionId,error:c})}if(l){t("zip","done",`${(l.length/1024/1024).toFixed(1)}MB`),t("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[Kt(i.executionId),{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);this.log("info","PIPELINE_PRESIGN_OK","Presigned URLs received",{artifacts_url:a.urls.artifacts?.blob_url,blob_url:a.urls.blob?.blob_url}),t("presign","done"),t("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading pack and blob",{artifact_size_mb:+(l.length/1024/1024).toFixed(1),blob_size_kb:+(s.length/1024).toFixed(1)}),await Promise.all([R(a.urls.artifacts.upload_url,l,"application/zip"),R(a.urls.blob.upload_url,s,"application/json")]),this.log("info","PIPELINE_UPLOAD_OK","Upload complete"),t("upload","done")}else{t("zip","skipped"),t("presign","running");let a=await this.controller.getPresignedUrls(this.testId,this.config.sessionId,[{key:"blob",content_type:"application/json",filename:`${this.config.commitId}.json`}]);t("presign","done"),t("upload","running"),this.log("info","PIPELINE_UPLOAD_START","Uploading blob only (evidence skipped)",{blob_size_kb:+(s.length/1024).toFixed(1)}),await R(a.urls.blob.upload_url,s,"application/json"),this.log("info","PIPELINE_UPLOAD_OK","Blob upload complete (pack skipped)"),t("upload","done")}}let o;if(this.config.codeExport?.enabled&&r){let l=!1;try{await this.triggerCodeExport(r),this.log("info","PIPELINE_CODE_EXPORT_START","Code export triggered"),l=!0}catch(a){let c=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export trigger failed; skipping poll",{error:c}),t("code_export","failed",`trigger failed: ${c}`)}if(l){t("code_export","running","Waiting for code generation\u2026");try{o=await this.pollAndDownloadCode(r,t),this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:o}),t("code_export","done",o)}catch(a){let c=a instanceof Error?a.message:String(a);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:c}),t("code_export","failed",c)}}}else t("code_export","skipped");return this.log("info","PIPELINE_COMPLETE","Pipeline complete"),{success:!0,testId:this.testId,testcaseId:r,shareId:e,codeExportDir:o}}catch(i){return{success:!1,testId:this.testId,error:i instanceof Error?i.message:String(i)}}}async runCodeExport(t,i){let s=i??this.config.onProgress,r=!1;try{await this.triggerCodeExport(t),this.log("info","PIPELINE_CODE_EXPORT_TRIGGER","Code export triggered",{testcase_id:t}),r=!0}catch(e){let o=e instanceof Error?e.message:String(e);this.log("error","PIPELINE_CODE_EXPORT_TRIGGER_FAILED","Code export trigger failed; skipping poll",{error:o}),s("code_export","failed",`trigger failed: ${o}`)}if(r){s("code_export","running","Waiting for code generation\u2026");try{let e=await this.pollAndDownloadCode(t,s);return this.log("info","PIPELINE_CODE_EXPORT_OK","Code export complete",{dir:e}),s("code_export","done",e),e}catch(e){let o=e instanceof Error?e.message:String(e);this.log("error","PIPELINE_CODE_EXPORT_FAILED","Code export failed",{error:o}),s("code_export","failed",o);return}}}deriveArchivedAttemptBlobs(t){try{let i=ct(t,{readActions:s=>this.readNdjsonFromFile(s),buildBlob:s=>this.buildExecutionEnvelope(s),objective:this.config.firstObjective,screenshotBaseUrl:this.config.screenshotBaseUrl??"",extMap:this.config.screenshotExtMap,log:(s,r,e,o)=>this.log(s,r,e,o)});i>0&&this.log("info","PIPELINE_ARCHIVED_ATTEMPTS","Nested retry-attempt blobs derived",{count:i})}catch(i){this.log("debug","PIPELINE_ARCHIVED_ATTEMPTS_FAILED","Nested attempt blob pass failed",{error:i instanceof Error?i.message:String(i)})}}collectNdjsonPerRun(){let t=[],i=this.config.runObjectives??[],s=this.config.runMetadata??[],r=this.config.evidence??this.config.evidenceRead;for(let e=0;e<this.config.runDirs.length;e++){let o=this.config.runDirs[e],l=i[e]||this.config.firstObjective,a=s[e],c=r?this.readNdjsonFromFile(E(r.packTestDir,"logs",`${r.runIndices?.[e]??e}-actions.ndjson`)):this.readNdjsonFromDir(o);if(c.length>0){let u=r?.runIndices?.[e]??e,p=this.config.runFlatIndex?.[u];t.push({objective:l,records:c,...p!==void 0?{flatIndex:p}:{},resultCode:a?.resultCode,reasonCode:a?.reasonCode,errorMessage:a?.errorMessage,summary:a?.summary,oneLiner:a?.oneLiner})}}if(t.length===0){let e=E(this.config.sessionDir,"runs");if(j(e))try{let l=qt(e,{withFileTypes:!0}).filter(a=>a.isDirectory()).map(a=>a.name).sort();for(let a of l){let c=E(e,a),u=this.readNdjsonFromDir(c);u.length>0&&t.push({objective:this.config.firstObjective,records:u})}}catch{}}return t}readNdjsonFromDir(t){let i=[E(t,"run-test","actions.ndjson"),E(t,"actions.ndjson")];for(let s of i)if(j(s))return this.readNdjsonFromFile(s);return[]}readNdjsonFromFile(t){let i=[];if(!j(t))return i;this.log("debug","PIPELINE_COLLECT_READ","Reading NDJSON file",{path:t});let s=C(t,"utf-8");for(let r of s.split(`
5
+ `)){let e=r.trim();if(e)try{i.push(JSON.parse(e))}catch{}}return i}async generateShareLink(t){let i=`${this.config.shareApiBaseUrl}/lshs/api/v1.0/share-item/generate-sharable-link`;this.log("info","PIPELINE_SHARE_START","Requesting share link",{url:i,testcase_id:t});let s={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify({entityIds:[t],entityType:"Test Case Details",expiresAt:7})},r=!!this.config.authResolver;this.log("debug","PIPELINE_SHARE_AUTH","Share link auth config",{resolver:r,fallback_auth_type:typeof this.config.auth=="string"?"bearer":"basic",tms_user:this.config.tmsUsername});let e=r?await this.config.authResolver.fetch(i,s):await P(i,{...s,headers:{...s.headers,Authorization:this.buildAuthHeader()}});if(!e.ok)throw new Error(`Share link API failed: ${e.status} ${await e.text()}`);let o=await e.json();if(!o.shareId)throw new Error("Share link API returned no shareId");return o.shareId}async triggerCodeExport(t){if(!this.config.codeExport)throw new Error("triggerCodeExport called without resolved codeExport config");let{url:i,body:s}=q({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:t,codeExport:this.config.codeExport,mobile:this.config.mobile});this.log("info","PIPELINE_CODE_EXPORT_POST","Triggering code export",{url:i});let r={method:"POST",headers:{"Content-Type":"application/json",Accept:"application/json"},body:JSON.stringify(s)},e=this.config.authResolver?await this.config.authResolver.fetch(i,r):await P(i,{...r,headers:{...r.headers,Authorization:this.buildAuthHeader()}});if(!e.ok)throw new Error(`Code export failed: ${e.status} ${await e.text()}`)}async pollAndDownloadCode(t,i){let s=$({tmsBaseUrl:this.config.tmsBaseUrl,testcaseId:t}),r=this.config.exitTimeoutMs??3e5,e=5e3,o=Date.now()+r;this.log("info","PIPELINE_CODE_EXPORT_POLL","Polling for code export",{url:s,timeout_ms:r});let l=(a,c)=>this.config.authResolver?this.config.authResolver.fetch(a,c):P(a,{...c,headers:{...c?.headers,Authorization:this.buildAuthHeader()}});for(;Date.now()<o;){let a=await l(s,{method:"GET",headers:{Accept:"application/json"}});if(!a.ok){let d=await a.text().catch(()=>"");throw this.log("warn","PIPELINE_CODE_EXPORT_POLL_FAILED","Code export poll non-200; skipping",{status:a.status,body:d.slice(0,200)}),new Error(`code export poll skipped: HTTP ${a.status}`)}let u=(await a.json()).data?.find(d=>d.code_name==="kane-cli-trigger");if(!u){this.log("debug","PIPELINE_CODE_EXPORT_WAITING","No kane-cli-trigger entry yet"),i("code_export","running","Waiting for code generation\u2026"),await this.sleep(e);continue}let p=u.status.toLowerCase();if(p==="in progress"||p==="in_progress"||p==="pending"){this.log("debug","PIPELINE_CODE_EXPORT_IN_PROGRESS","Code export in progress",{status:u.status}),i("code_export","running","Generating code\u2026"),await this.sleep(e);continue}if(!u.url||u.url.length===0)throw new Error(`Code export status=${u.status} but no files returned`);let _=this.config.codeExportDir??E(this.config.sessionDir,"code-export");D(_,{recursive:!0}),this.log("info","PIPELINE_CODE_EXPORT_DOWNLOAD","Downloading code files",{file_count:u.url.length,dir:_}),i("code_export","running",`Downloading ${u.url.length} files\u2026`);for(let d of u.url){let f=E(_,d.file_name),m=await P(d.file_url);if(!m.ok){this.log("warn","PIPELINE_CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:d.file_name,status:m.status});continue}let g=await m.text();O(f,g,"utf-8"),this.log("info","PIPELINE_CODE_EXPORT_FILE_SAVED","File saved",{file_name:d.file_name,size_bytes:g.length})}return _}throw new Error("Code export timed out")}sleep(t){return new Promise(i=>setTimeout(i,t))}buildAuthHeader(){return typeof this.config.auth=="string"?`Bearer ${this.config.auth}`:F(this.config.auth.username,this.config.auth.accessKey)}readAuthoredExecution(){let t=this.config.authoredExecutionPath;if(!t)return null;try{let i=C(t,"utf8");return JSON.parse(i),i}catch{return this.log("warn","PIPELINE_AUTHORED_BLOB_UNREADABLE","Authored execution.json missing/unreadable \u2014 pack gets this run's envelope",{path:t}),null}}loadReplayOnlyPassthrough(){let t=this.config.replayOnlyPassthrough;if(!(!t||t.flatIndices.length===0))try{let i=JSON.parse(C(t.authoredExecutionPath,"utf8"));if(!Array.isArray(i.instructions))throw new Error("no instructions array");return{authoredInstructions:i.instructions,replayOnlyFlatIndices:new Set(t.flatIndices)}}catch(i){this.log("warn","PIPELINE_PASSTHROUGH_BLOB_UNREADABLE","Authored execution.json missing/unreadable \u2014 replay-only steps convert from this run's records",{path:t.authoredExecutionPath,flat_indices:t.flatIndices,error:i instanceof Error?i.message:String(i)});return}}buildExecutionEnvelope(t){let i=this.config.runStatuses.every(c=>c==="passed")?"success":"error",s=this.config.variableIds??{},r=[];if(this.config.variables)for(let[c,u]of Object.entries(this.config.variables)){if(u.secret)continue;let p=c.startsWith("global.")?c.slice(7):c;r.push({id:s[p]??0,name:p,value:u.value,session_value:u.value,is_persist:!1,environment_id:0,environment_name:"No Env"})}let e=[],o=c=>{let u=e.find(p=>p.name===c.name);u?u.value=c.value:e.push(c)},l=[],a=new Set;for(let c of this.collectNdjsonPerRun())for(let u of c.records)if(u.output_variable&&u.output_value!=null&&o({name:u.output_variable,value:String(u.output_value),value_type:"test_level",variable_description:"ANALYZE result"}),u.action_type==="upload_files"){let p=L(u.action_params);if(p){let _=p.media_id||p.media_url;if(!a.has(_)){a.add(_),l.push({media_url:p.media_url,media_id:p.media_id,name:p.name,type:p.type});let d=N(p.name);o({name:W(p.name),value:d,value_type:"string",variable_description:`variable for ${d}`})}}}return{test_id:this.testId,version:"v4",auto_heal_version:this.config.apMode==="v2"?"AH2":"",session_id:this.config.sessionId,org_id:String(this.config.orgId),user_id:String(this.config.userId),url:this.config.firstUrl??"",start_timestamp:this.config.startedAt,end_timestamp:this.config.endedAt,status:i,commit_id:this.config.commitId,instructions:t,modules:[],uploaded_files:l,test_params:[],test_level_variables:JSON.stringify(e),test_global_variables:r,max_network_wait:0,wait_buffer:0,network_throttle:{},secrets:this.config.secrets??[],totp:[],environment_id:0,environment:"",mobile_browser:!1,native_popups:[],smartui:{},module_index:0}}};export{Gt as a,Kt as b,_t as c};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as f}from"./chunk-7RAIRUXO.js";import{x as r}from"./chunk-DWHXXPDX.js";import{a as g}from"./chunk-HCBYKLMW.js";import{a as i,b as n,i as p}from"./chunk-C44QQJR4.js";import{a as x}from"./chunk-6YGTRKDT.js";import{e as d}from"./chunk-UR6MHSHU.js";var b=d(x(),1);var e=d(g(),1),v=[{value:"desktop",label:"Desktop",hint:"Chrome on this machine"},{value:"emulator",label:"Emulator",hint:"a virtual Android device"},{value:"simulator",label:"Simulator",hint:"a virtual iOS device"}];function T(a){return a==="all"?v:v.filter(l=>l.value!=="desktop")}function B({mode:a="all",onSelect:l,onCancel:c}){let u=T(a),[h,m]=(0,b.useState)(0);return p((s,o)=>{if(o.escape&&c){c();return}o.upArrow&&m(t=>Math.max(0,t-1)),o.downArrow&&m(t=>Math.min(u.length-1,t+1)),o.return&&l(u[h].value)}),(0,e.jsxs)(i,{flexDirection:"column",borderStyle:"round",borderColor:r.orange,paddingX:2,paddingY:1,children:[(0,e.jsx)(n,{color:r.orange,bold:!0,children:a==="all"?"Where should tests run?":"Which kind of device?"}),(0,e.jsx)(i,{marginTop:1,flexDirection:"column",children:u.map((s,o)=>{let t=o===h;return(0,e.jsxs)(i,{children:[(0,e.jsxs)(n,{color:t?r.orange:void 0,children:[t?"\u276F ":" ",s.label]}),(0,e.jsxs)(n,{color:r.dim,children:[" ",s.hint]})]},s.value)})}),(0,e.jsx)(i,{marginTop:1,children:(0,e.jsx)(n,{color:r.dim,children:"You can change this any time with /desktop or /mobile."})}),(0,e.jsx)(f,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],suppressEscBack:!c,escBackLabel:"skip"})]})}export{B as a};
2
+ import{a as f}from"./chunk-5NBT5IVT.js";import{x as r}from"./chunk-DEUDRSU7.js";import{a as g}from"./chunk-HCBYKLMW.js";import{a as i,b as n,i as p}from"./chunk-C44QQJR4.js";import{a as x}from"./chunk-6YGTRKDT.js";import{e as d}from"./chunk-UR6MHSHU.js";var b=d(x(),1);var e=d(g(),1),v=[{value:"desktop",label:"Desktop",hint:"Chrome on this machine"},{value:"emulator",label:"Emulator",hint:"a virtual Android device"},{value:"simulator",label:"Simulator",hint:"a virtual iOS device"}];function T(a){return a==="all"?v:v.filter(l=>l.value!=="desktop")}function B({mode:a="all",onSelect:l,onCancel:c}){let u=T(a),[h,m]=(0,b.useState)(0);return p((s,o)=>{if(o.escape&&c){c();return}o.upArrow&&m(t=>Math.max(0,t-1)),o.downArrow&&m(t=>Math.min(u.length-1,t+1)),o.return&&l(u[h].value)}),(0,e.jsxs)(i,{flexDirection:"column",borderStyle:"round",borderColor:r.orange,paddingX:2,paddingY:1,children:[(0,e.jsx)(n,{color:r.orange,bold:!0,children:a==="all"?"Where should tests run?":"Which kind of device?"}),(0,e.jsx)(i,{marginTop:1,flexDirection:"column",children:u.map((s,o)=>{let t=o===h;return(0,e.jsxs)(i,{children:[(0,e.jsxs)(n,{color:t?r.orange:void 0,children:[t?"\u276F ":" ",s.label]}),(0,e.jsxs)(n,{color:r.dim,children:[" ",s.hint]})]},s.value)})}),(0,e.jsx)(i,{marginTop:1,children:(0,e.jsx)(n,{color:r.dim,children:"You can change this any time with /desktop or /mobile."})}),(0,e.jsx)(f,{bindings:[{keys:"\u2191\u2193",label:"navigate"},{keys:"\u21B5",label:"select"}],suppressEscBack:!c,escBackLabel:"skip"})]})}export{B as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as l}from"./chunk-RZ4F3BHX.js";import{a,b as c,e as o}from"./chunk-DWHXXPDX.js";import{readFileSync as f,writeFileSync as d,mkdirSync as h,realpathSync as g}from"fs";import{join as y}from"path";var C="npm install -g @testmuai/kane-cli@latest",b="brew upgrade lambdatest/kane/kane-cli";function w(){try{let t=process.argv[1];if(t&&g(t).includes("/Cellar/"))return b}catch{}return C}var m=y(c,"version-check.json"),S=1440*60*1e3;function k(){try{let t=JSON.parse(f(m,"utf-8"));if(Date.now()-t.checkedAt<S)return t}catch{}return null}function A(t){try{h(c,{recursive:!0}),d(m,JSON.stringify({latest:t,checkedAt:Date.now()}))}catch{}}function u(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);for(let s=0;s<3;s++){let e=(n[s]??0)-(i[s]??0);if(e!==0)return e}return 0}function p(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);return(n[0]??0)!==(i[0]??0)?"major":(n[1]??0)!==(i[1]??0)?"minor":"patch"}async function j(){try{let t=k();if(t)return u(a,t.latest)>0?{current:a,latest:t.latest,severity:p(a,t.latest)}:null;let r=new AbortController,i=setTimeout(()=>r.abort(),5e3),n=await l(o,{headers:{Accept:"application/json"},signal:r.signal});if(clearTimeout(i),!n.ok)return null;let e=(await n.json())["dist-tags"]?.latest;return e?(A(e),u(a,e)>0?{current:a,latest:e,severity:p(a,e)}:null):null}catch{return null}}export{w as a,u as b,p as c,j as d};
2
+ import{a as l}from"./chunk-RZ4F3BHX.js";import{a,b as c,e as o}from"./chunk-DEUDRSU7.js";import{readFileSync as f,writeFileSync as d,mkdirSync as h,realpathSync as g}from"fs";import{join as y}from"path";var C="npm install -g @testmuai/kane-cli@latest",b="brew upgrade lambdatest/kane/kane-cli";function w(){try{let t=process.argv[1];if(t&&g(t).includes("/Cellar/"))return b}catch{}return C}var m=y(c,"version-check.json"),S=1440*60*1e3;function k(){try{let t=JSON.parse(f(m,"utf-8"));if(Date.now()-t.checkedAt<S)return t}catch{}return null}function A(t){try{h(c,{recursive:!0}),d(m,JSON.stringify({latest:t,checkedAt:Date.now()}))}catch{}}function u(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);for(let s=0;s<3;s++){let e=(n[s]??0)-(i[s]??0);if(e!==0)return e}return 0}function p(t,r){let i=t.split(".").map(Number),n=r.split(".").map(Number);return(n[0]??0)!==(i[0]??0)?"major":(n[1]??0)!==(i[1]??0)?"minor":"patch"}async function j(){try{let t=k();if(t)return u(a,t.latest)>0?{current:a,latest:t.latest,severity:p(a,t.latest)}:null;let r=new AbortController,i=setTimeout(()=>r.abort(),5e3),n=await l(o,{headers:{Accept:"application/json"},signal:r.signal});if(clearTimeout(i),!n.ok)return null;let e=(await n.json())["dist-tags"]?.latest;return e?(A(e),u(a,e)>0?{current:a,latest:e,severity:p(a,e)}:null):null}catch{return null}}export{w as a,u as b,p as c,j as d};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{h as _,k as M,m as R,o as h}from"./chunk-H4WIA4IP.js";import{x as k}from"./chunk-W3Z7AZNT.js";import{existsSync as j,mkdirSync as E,readdirSync as N,readFileSync as O,renameSync as T,writeFileSync as G}from"fs";import{join as g}from"path";var P=/^@import\s+(\S+)\s*$/;function W(e,n){let r=e.resolve(n),i=r?String(e.getNode(r.tip)?.content.title??""):"";return i&&k(i,()=>!1)||n}function D(e){return g(e,".testmuai","tests")}function L(e){let n=new Map;if(!j(e))return n;for(let r of N(e)){if(!r.endsWith("_test.md"))continue;let i=g(e,r);try{let s=h(O(i,"utf8"))?.id;s&&n.set(s,[...n.get(s)??[],i])}catch{}}return n}function q(e,n,r){let i=`assurance:
2
+ import{h as _,k as M,m as R,o as h}from"./chunk-NP3VGFZM.js";import{x as k}from"./chunk-R4EGL7VM.js";import{existsSync as j,mkdirSync as E,readdirSync as N,readFileSync as O,renameSync as T,writeFileSync as G}from"fs";import{join as g}from"path";var P=/^@import\s+(\S+)\s*$/;function W(e,n){let r=e.resolve(n),i=r?String(e.getNode(r.tip)?.content.title??""):"";return i&&k(i,()=>!1)||n}function D(e){return g(e,".testmuai","tests")}function L(e){let n=new Map;if(!j(e))return n;for(let r of N(e)){if(!r.endsWith("_test.md"))continue;let i=g(e,r);try{let s=h(O(i,"utf8"))?.id;s&&n.set(s,[...n.get(s)??[],i])}catch{}}return n}function q(e,n,r){let i=`assurance:
3
3
  id: ${n}
4
4
  base: ${r}
5
5
  `,s=e.endsWith(`