@testmuai/kane-cli 0.8.12 → 0.8.14

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 (308) hide show
  1. package/dist/{ChatSurface-DALSIICW.js → ChatSurface-AVL3TJA2.js} +3 -3
  2. package/dist/{ChromeProfilePicker-ZMVZH3AK.js → ChromeProfilePicker-WJZJOZ6Z.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-K66H7YE6.js → CliFeedbackPrompt-65BQF5G5.js} +1 -1
  4. package/dist/{CliUploadProgress-5DZHZY4M.js → CliUploadProgress-HEBZYKGN.js} +1 -1
  5. package/dist/{ConfigView-S5KBV62S.js → ConfigView-JEVQ2SO4.js} +1 -1
  6. package/dist/EvidenceViewOffer-5MB4ZXKM.js +2 -0
  7. package/dist/FolderPicker-SYFXH6D5.js +2 -0
  8. package/dist/{InfoBox-7PAM2FQH.js → InfoBox-KM5DLBCV.js} +1 -1
  9. package/dist/{LinksBox-2NVZ3FHJ.js → LinksBox-FQA36GTV.js} +1 -1
  10. package/dist/{ProfilesView-SIUBF7IU.js → ProfilesView-76KGHTMK.js} +1 -1
  11. package/dist/{ProjectPicker-5NI554X3.js → ProjectPicker-65YOU46H.js} +1 -1
  12. package/dist/{SaveSessionPrompt-5OULBV5N.js → SaveSessionPrompt-QD6BNTWO.js} +1 -1
  13. package/dist/ScrollbackTap-QHJOFYMC.js +2 -0
  14. package/dist/SingleShotApp-U54ETXS3.js +2 -0
  15. package/dist/{SummaryBox-GTGF3CBO.js → SummaryBox-N2B6DUDD.js} +1 -1
  16. package/dist/TestMdRunView-WA4TC5PT.js +2 -0
  17. package/dist/{TestrunEvidenceTable-7WBCOGYW.js → TestrunEvidenceTable-3WLQVTF4.js} +1 -1
  18. package/dist/{WhoamiView-E2SVBHLC.js → WhoamiView-T26HA4ZZ.js} +1 -1
  19. package/dist/agent-parse-XMWVKCRD.js +2 -0
  20. package/dist/{app-download-SAXSYXIV.js → app-download-XKZWFMEK.js} +1 -1
  21. package/dist/attach-target-V6LECVES.js +2 -0
  22. package/dist/{auth-3LLVDHOJ.js → auth-PPJANIMZ.js} +1 -1
  23. package/dist/{binary-WSMIRJNC.js → binary-DKWWODT2.js} +1 -1
  24. package/dist/bind-62AZYFAY.js +15 -0
  25. package/dist/{bootstrap-QTVHGL45.js → bootstrap-6IJNZIPT.js} +1 -1
  26. package/dist/bridge-X5DEJL6F.js +2 -0
  27. package/dist/{changelog-CNYWOB2V.js → changelog-UTGJ7FSP.js} +1 -1
  28. package/dist/chat-committer-HDE3TP5I.js +2 -0
  29. package/dist/chat-controller-3EPK7UZG.js +2 -0
  30. package/dist/chunk-22QIVSQR.js +29 -0
  31. package/dist/{chunk-CQ3ZQ5UK.js → chunk-2BFXT7VQ.js} +3 -3
  32. package/dist/{chunk-AHRL4E3M.js → chunk-2RMHDOP4.js} +1 -1
  33. package/dist/{chunk-HPUQJRDX.js → chunk-3BHRGHIZ.js} +1 -1
  34. package/dist/{chunk-EEFZXZTZ.js → chunk-3IXEARDX.js} +1 -1
  35. package/dist/chunk-3N6IAVD5.js +7 -0
  36. package/dist/{chunk-3OU2F34I.js → chunk-3SPOJWRA.js} +1 -1
  37. package/dist/chunk-3YX3RQXO.js +2 -0
  38. package/dist/chunk-42FHKRPA.js +4 -0
  39. package/dist/{chunk-FBYB3SRE.js → chunk-4BBDKWM3.js} +1 -1
  40. package/dist/{chunk-UDFDTFBL.js → chunk-4K5XTIJ6.js} +1 -1
  41. package/dist/chunk-52WM3XYO.js +4 -0
  42. package/dist/{chunk-H6VS5RYO.js → chunk-53MPG2J3.js} +1 -1
  43. package/dist/{chunk-R7QAS6LZ.js → chunk-55YDTPB7.js} +1 -1
  44. package/dist/{chunk-IDX3TOPY.js → chunk-5LJRZI7S.js} +1 -1
  45. package/dist/chunk-66MOZKD2.js +2 -0
  46. package/dist/chunk-6F6YI3ZG.js +2 -0
  47. package/dist/chunk-6LGED4FC.js +35 -0
  48. package/dist/chunk-73ULUGBM.js +5 -0
  49. package/dist/{chunk-X6APRDUM.js → chunk-75I46VTM.js} +2 -2
  50. package/dist/{chunk-5FYO3PFG.js → chunk-7L25ZNNP.js} +1 -1
  51. package/dist/chunk-7O54QURK.js +2 -0
  52. package/dist/{chunk-4T35SA2O.js → chunk-7RAI77XD.js} +1 -1
  53. package/dist/{chunk-7NXHVC7G.js → chunk-AC7BPO4X.js} +1 -1
  54. package/dist/chunk-AHXOKBVE.js +7 -0
  55. package/dist/{chunk-DNNZ353O.js → chunk-ALCE5RLK.js} +1 -1
  56. package/dist/{chunk-5AHOVOWV.js → chunk-ARG56PJG.js} +1 -1
  57. package/dist/chunk-B2ZGG7WM.js +2 -0
  58. package/dist/{chunk-GNAPBOAJ.js → chunk-BAKJPQGU.js} +1 -1
  59. package/dist/chunk-BJYGWXVP.js +52 -0
  60. package/dist/chunk-C74ABM24.js +2 -0
  61. package/dist/chunk-CGT4NFQN.js +8 -0
  62. package/dist/{chunk-EV64VI66.js → chunk-CRZUBDJ3.js} +1 -1
  63. package/dist/{chunk-M4WSRYRA.js → chunk-DA57DXCF.js} +1 -1
  64. package/dist/chunk-DHJSM5DT.js +2 -0
  65. package/dist/{chunk-UZXCCO7V.js → chunk-EMSLJTYN.js} +1 -1
  66. package/dist/{chunk-2LXJ2ZM3.js → chunk-FFFB5BXL.js} +1 -1
  67. package/dist/{chunk-WIAZN7G4.js → chunk-FFVNISYH.js} +1 -1
  68. package/dist/chunk-FQNQVC5O.js +5 -0
  69. package/dist/{chunk-NSD2H67E.js → chunk-GESG672R.js} +1 -1
  70. package/dist/{chunk-FHYG3QLL.js → chunk-GKZ2KVE6.js} +1 -1
  71. package/dist/chunk-GP7WD4UY.js +4 -0
  72. package/dist/{chunk-7R5K4IGS.js → chunk-GPIXV7AV.js} +2 -2
  73. package/dist/chunk-H6TNBKGR.js +5 -0
  74. package/dist/chunk-HOA4VWSD.js +5 -0
  75. package/dist/chunk-IE3OO5GI.js +2 -0
  76. package/dist/chunk-IICQ5KRD.js +5 -0
  77. package/dist/{chunk-VG7BTA5G.js → chunk-IQ7GPETF.js} +1 -1
  78. package/dist/{chunk-AFNDJK2A.js → chunk-IQ7NGOAT.js} +1 -1
  79. package/dist/{chunk-F2CET54H.js → chunk-J7NRD4Q7.js} +1 -1
  80. package/dist/{chunk-FAREJ4P2.js → chunk-JH6E632O.js} +1 -1
  81. package/dist/{chunk-L7GAZQYL.js → chunk-JJJSDDQ2.js} +1 -1
  82. package/dist/{chunk-XWO5MDEU.js → chunk-JKX57HA7.js} +1 -1
  83. package/dist/{chunk-LLY7TQSI.js → chunk-K7K23DIQ.js} +1 -1
  84. package/dist/chunk-KN65CUNT.js +15 -0
  85. package/dist/{chunk-YF26DH4Z.js → chunk-KOL6ZWOQ.js} +1 -1
  86. package/dist/{chunk-COVIEKZN.js → chunk-KOPP4CJW.js} +1 -1
  87. package/dist/chunk-KZG4E5RM.js +2 -0
  88. package/dist/{chunk-GRDYYYIQ.js → chunk-L4M7753M.js} +1 -1
  89. package/dist/{chunk-ZVJGHQNG.js → chunk-L6MOO4WT.js} +1 -1
  90. package/dist/chunk-LBNADEQN.js +8 -0
  91. package/dist/{chunk-HWHLKBUT.js → chunk-LL5DQO6V.js} +1 -1
  92. package/dist/chunk-LNV7C2YO.js +6 -0
  93. package/dist/{chunk-3N2YOHD6.js → chunk-LR5DJ6EN.js} +1 -1
  94. package/dist/{chunk-ZXN67F4U.js → chunk-M7DN6FO3.js} +1 -1
  95. package/dist/chunk-MLRO7OH3.js +9 -0
  96. package/dist/{chunk-ZZI4Y3CX.js → chunk-MNE5VMHT.js} +1 -1
  97. package/dist/{chunk-3G3LY6BM.js → chunk-N7ZRF5K3.js} +1 -1
  98. package/dist/{chunk-MMQLVGUJ.js → chunk-NBMLBCJ3.js} +1 -1
  99. package/dist/{chunk-WHYEXCTG.js → chunk-NDCRJXYF.js} +1 -1
  100. package/dist/{chunk-4E4GJPEM.js → chunk-NOLYYHVG.js} +1 -1
  101. package/dist/{chunk-IWVA37B6.js → chunk-O25AL4B7.js} +1 -1
  102. package/dist/{chunk-2MTAXT2U.js → chunk-O2APH6TZ.js} +1 -1
  103. package/dist/{chunk-KAZGHWGK.js → chunk-O3XBIURC.js} +1 -1
  104. package/dist/{chunk-APZCLVZD.js → chunk-O5AS2ZIX.js} +1 -1
  105. package/dist/{chunk-43DM2I6Q.js → chunk-O6U2HU5M.js} +1 -1
  106. package/dist/{chunk-7KAPHA56.js → chunk-OH2NSBO6.js} +1 -1
  107. package/dist/{chunk-3CCD434H.js → chunk-OO5GMBVI.js} +1 -1
  108. package/dist/chunk-OPL2MIQG.js +2 -0
  109. package/dist/chunk-P3JUE2RM.js +17 -0
  110. package/dist/{chunk-QZRHXGNI.js → chunk-PGU64EWQ.js} +1 -1
  111. package/dist/{chunk-24QPDHRD.js → chunk-Q7XBMBMR.js} +1 -1
  112. package/dist/{chunk-4TZSEC2C.js → chunk-QJ5O27SJ.js} +1 -1
  113. package/dist/{chunk-YTAAF62A.js → chunk-QPUVOVD7.js} +1 -1
  114. package/dist/{chunk-5A4QG7ZM.js → chunk-RBHQXWR7.js} +1 -1
  115. package/dist/{chunk-G52YPXKT.js → chunk-RH6KFHJB.js} +1 -1
  116. package/dist/{chunk-ASYWKYTQ.js → chunk-RQLU4NDG.js} +12 -12
  117. package/dist/{chunk-U27OWZPW.js → chunk-SFTFHFG3.js} +7 -7
  118. package/dist/{chunk-H6NHARB4.js → chunk-SGHP44WS.js} +1 -1
  119. package/dist/{chunk-U2CIXGZR.js → chunk-SQDQADWD.js} +1 -1
  120. package/dist/{chunk-IE4BCGUE.js → chunk-SX56MVUO.js} +1 -1
  121. package/dist/{chunk-O5U6EAL3.js → chunk-TCAHDVII.js} +1 -1
  122. package/dist/chunk-TNBF5OMZ.js +2 -0
  123. package/dist/chunk-TU6IMGWO.js +2 -0
  124. package/dist/{chunk-5G22NOZK.js → chunk-UHT5SVP5.js} +1 -1
  125. package/dist/{chunk-L2BCQQLJ.js → chunk-UXH3RMQ7.js} +1 -1
  126. package/dist/{chunk-DYXYNH6X.js → chunk-VNFCX2SH.js} +1 -1
  127. package/dist/{chunk-O7U5BVX5.js → chunk-WBHSPN55.js} +2 -2
  128. package/dist/chunk-WILT62DP.js +16 -0
  129. package/dist/{chunk-I57TM22L.js → chunk-WOA7VCGA.js} +1 -1
  130. package/dist/{chunk-SA6EDKUF.js → chunk-WR42Q3HU.js} +1 -1
  131. package/dist/chunk-X5276I5H.js +9 -0
  132. package/dist/{chunk-75HF3GPO.js → chunk-X74PP5NJ.js} +1 -1
  133. package/dist/{chunk-3XWKKSIM.js → chunk-XGHMZJGI.js} +2 -2
  134. package/dist/{chunk-XS2LZFCH.js → chunk-YCH7H7JX.js} +1 -1
  135. package/dist/{chunk-IGW77FMB.js → chunk-YHR2YAN5.js} +1 -1
  136. package/dist/chunk-YHVG7V3E.js +21 -0
  137. package/dist/chunk-YLQHY4A7.js +2 -0
  138. package/dist/{chunk-KGKJU27A.js → chunk-YYYQ5MVD.js} +1 -1
  139. package/dist/chunk-ZA4M4O7E.js +27 -0
  140. package/dist/chunk-ZKEOPIQ3.js +9 -0
  141. package/dist/chunk-ZUZ6QJRA.js +23 -0
  142. package/dist/{chunk-4ASRA7CD.js → chunk-ZWHPIR2Z.js} +2 -2
  143. package/dist/chunk-ZZTZJPT2.js +88 -0
  144. package/dist/committer-IYQPXG6C.js +2 -0
  145. package/dist/{config-HUK7V364.js → config-3AKWRTFS.js} +1 -1
  146. package/dist/{controller-client-OB4WD2C4.js → controller-client-ZF5IXRUV.js} +1 -1
  147. package/dist/cover-cmd-ZLAWMEC2.js +3 -0
  148. package/dist/{credentials-6DP4KAMJ.js → credentials-Q4WH5CBN.js} +1 -1
  149. package/dist/{deps-bundle-PZNXSKLC.js → deps-bundle-RVZK6LZJ.js} +1 -1
  150. package/dist/{deps-resolve-62XK3LKV.js → deps-resolve-6F2U4TJP.js} +1 -1
  151. package/dist/design-committer-J57IAAA5.js +2 -0
  152. package/dist/dispatch-46BETGXY.js +2 -0
  153. package/dist/{doctor-ZQQ4VMPY.js → doctor-WRPG56HH.js} +1 -1
  154. package/dist/docx-convert-WPZS6OIC.js +2 -0
  155. package/dist/{dossier-Y6TJWFZU.js → dossier-UGJMYYAB.js} +1 -1
  156. package/dist/evidence-XWR32HWP.js +2 -0
  157. package/dist/evolve-cmd-27ZQN6YB.js +2 -0
  158. package/dist/explain-H5HJEDEF.js +2 -0
  159. package/dist/explain-cmd-JCJTXVZY.js +9 -0
  160. package/dist/{explain-cmd-XCRO4AS6.js → explain-cmd-R45I5MT7.js} +1 -1
  161. package/dist/extract-bind-D5BYYGYA.js +14 -0
  162. package/dist/{extract-cmd-IPBCCR3T.js → extract-cmd-CCYW7FIY.js} +3 -3
  163. package/dist/feeder-RSHMGW6B.js +2 -0
  164. package/dist/gaps-cmd-3VJKQ25D.js +3 -0
  165. package/dist/{generate-headless-CLMSXEAS.js → generate-headless-2M6UT3IK.js} +2 -2
  166. package/dist/headless-io-3A3BZVQ5.js +2 -0
  167. package/dist/index.js +206 -164
  168. package/dist/ingest-QGLVY7ND.js +2 -0
  169. package/dist/ingest-cmd-HVTUK264.js +2 -0
  170. package/dist/install-5WJLE7XT.js +2 -0
  171. package/dist/interactive-bind-OJCYNQPI.js +26 -0
  172. package/dist/lifecycle-cmd-GWFGUGTC.js +2 -0
  173. package/dist/{list-cmd-V3HJ5K4O.js → list-cmd-AXDW64OY.js} +1 -1
  174. package/dist/list-commands-YNZ6EFIF.js +2 -0
  175. package/dist/{locks-cmd-CSVSWY2Y.js → locks-cmd-67OHQZNV.js} +1 -1
  176. package/dist/logical-ids-DN6IZSUM.js +2 -0
  177. package/dist/login-flow-PRXFPRYZ.js +2 -0
  178. package/dist/maintenance-cmd-QEMK6YNV.js +2 -0
  179. package/dist/{mobile-prompts-WJVFBWW5.js → mobile-prompts-OXHA5GHJ.js} +1 -1
  180. package/dist/{objective-variable-gate-GCQYYM77.js → objective-variable-gate-76GYUHEP.js} +1 -1
  181. package/dist/open-provider-E5VUGFNE.js +2 -0
  182. package/dist/pdf-convert-5H4HQNN3.js +2 -0
  183. package/dist/{persist-recorded-session-MHLD4A32.js → persist-recorded-session-KWPH37HI.js} +1 -1
  184. package/dist/phase-seed-HKJ2EF7R.js +2 -0
  185. package/dist/pipeline-A2OGF4XW.js +2 -0
  186. package/dist/prepare-target-P6BWJZBZ.js +2 -0
  187. package/dist/readmodel-IBFRM6EO.js +2 -0
  188. package/dist/reconcile-cmd-V7TDYETT.js +2 -0
  189. package/dist/reconcile-deps-X6IGH4CA.js +4 -0
  190. package/dist/reconcile-engine-OGXSIE7O.js +2 -0
  191. package/dist/{recording-banner-4H4AL6YN.js → recording-banner-IZWN2XFY.js} +1 -1
  192. package/dist/records-TJJJWBUD.js +2 -0
  193. package/dist/registry-GOLIFVK5.js +2 -0
  194. package/dist/{require-project-folder-G2G4WKWW.js → require-project-folder-PEEUITK6.js} +1 -1
  195. package/dist/{resolve-run-intent-MZRPYN4V.js → resolve-run-intent-JGXXE45Y.js} +1 -1
  196. package/dist/{resolver-X5NHNX5O.js → resolver-TY7XLJBN.js} +1 -1
  197. package/dist/revert-6BBBK3I4.js +2 -0
  198. package/dist/review-cmd-74YTPT7E.js +5 -0
  199. package/dist/run-DN4XARP2.js +2 -0
  200. package/dist/run-GRYWYKIH.js +2 -0
  201. package/dist/{run-test-md-4VRH7FU5.js → run-test-md-DFCKCQ4T.js} +2 -2
  202. package/dist/sessions-NH7WQWMX.js +2 -0
  203. package/dist/{sessions-cmd-VDQGRBEM.js → sessions-cmd-DV442ZCY.js} +1 -1
  204. package/dist/{skill-installer-WPW6NDCR.js → skill-installer-GRU3HOYF.js} +1 -1
  205. package/dist/{spawner-R3XOP3GP.js → spawner-LNMD4NJF.js} +1 -1
  206. package/dist/store-guard-Q4MYZQHF.js +2 -0
  207. package/dist/structured-answers-NADW6D44.js +5 -0
  208. package/dist/sync-cmd-H6Y5EB3L.js +2 -0
  209. package/dist/sync-setup-THGRBKTA.js +2 -0
  210. package/dist/sync-setup-ui-RC727VK6.js +3 -0
  211. package/dist/tcg-generate-SZZ7MJXY.js +2 -0
  212. package/dist/testmd-actions-MRIUOOXO.js +2 -0
  213. package/dist/testmd-sync-UYVJ47BN.js +2 -0
  214. package/dist/token-refresh-KN5JK2U4.js +2 -0
  215. package/dist/{validate-basic-YNGP5JFB.js → validate-basic-RCBEELSB.js} +1 -1
  216. package/dist/{variable-receipt-2VCUG7NN.js → variable-receipt-JHRW73Z6.js} +1 -1
  217. package/dist/verdicts-XFXDRND4.js +2 -0
  218. package/dist/{version-check-GUGRBTIH.js → version-check-Z774UWW3.js} +1 -1
  219. package/dist/{view-cmd-SXXNDZIC.js → view-cmd-I4LQGJ2X.js} +1 -1
  220. package/dist/walk-session-FP52IGLB.js +2 -0
  221. package/dist/with-telemetry-P6RUPWBH.js +2 -0
  222. package/package.json +12 -11
  223. package/dist/EvidenceViewOffer-UACWB3YJ.js +0 -2
  224. package/dist/FolderPicker-YH5TKMX3.js +0 -2
  225. package/dist/ScrollbackTap-Q3IOKNMS.js +0 -2
  226. package/dist/SingleShotApp-LA3EMPUK.js +0 -2
  227. package/dist/TestMdRunView-5MNKJJMS.js +0 -2
  228. package/dist/bind-A3M4PV4V.js +0 -12
  229. package/dist/bridge-E2C5VV3H.js +0 -2
  230. package/dist/chat-committer-RAOIL2T6.js +0 -2
  231. package/dist/chat-controller-YJCNU76T.js +0 -2
  232. package/dist/chunk-4O6XBS5G.js +0 -5
  233. package/dist/chunk-54JZ6VEW.js +0 -4
  234. package/dist/chunk-5DT7PIGB.js +0 -5
  235. package/dist/chunk-5KLDW3ZW.js +0 -85
  236. package/dist/chunk-6A47PRDS.js +0 -4
  237. package/dist/chunk-6FCPS2VT.js +0 -4
  238. package/dist/chunk-7RFGO3TH.js +0 -2
  239. package/dist/chunk-DBIBROYW.js +0 -5
  240. package/dist/chunk-DPUV6OSP.js +0 -2
  241. package/dist/chunk-G2Q2TP3O.js +0 -9
  242. package/dist/chunk-IAHKTEET.js +0 -2
  243. package/dist/chunk-IVQX3AKL.js +0 -4
  244. package/dist/chunk-JDGBRACP.js +0 -16
  245. package/dist/chunk-JOATASPP.js +0 -4
  246. package/dist/chunk-KRL2BDI5.js +0 -8
  247. package/dist/chunk-N7Z7BQYO.js +0 -3
  248. package/dist/chunk-NJJQL54J.js +0 -2
  249. package/dist/chunk-NP3VGFZM.js +0 -26
  250. package/dist/chunk-NVGBE2DR.js +0 -2
  251. package/dist/chunk-OS4VSIHT.js +0 -4
  252. package/dist/chunk-OZMYKG6E.js +0 -6
  253. package/dist/chunk-QQ5MHSSY.js +0 -2
  254. package/dist/chunk-RV7Q4RUV.js +0 -7
  255. package/dist/chunk-SACCB44S.js +0 -21
  256. package/dist/chunk-T4OJX2GZ.js +0 -15
  257. package/dist/chunk-TLFNUXKS.js +0 -2
  258. package/dist/chunk-UH2ZTX4E.js +0 -2
  259. package/dist/chunk-VDM3TWF6.js +0 -17
  260. package/dist/chunk-W3Z7AZNT.js +0 -4
  261. package/dist/chunk-WMVPJWWA.js +0 -37
  262. package/dist/chunk-XMTSHHYQ.js +0 -4
  263. package/dist/chunk-ZVZHE7KH.js +0 -27
  264. package/dist/committer-C6UCDYMC.js +0 -2
  265. package/dist/cover-cmd-5LPHIOSI.js +0 -3
  266. package/dist/design-committer-UPC6NZUF.js +0 -2
  267. package/dist/dispatch-7JCKGQVC.js +0 -2
  268. package/dist/docx-convert-BIV5T7F5.js +0 -2
  269. package/dist/evidence-YAXIWZ6A.js +0 -2
  270. package/dist/evolve-cmd-5ACHYQPE.js +0 -2
  271. package/dist/explain-3HAZY7Q6.js +0 -2
  272. package/dist/explain-cmd-RMJPXD4U.js +0 -9
  273. package/dist/extract-bind-BF2G6AS6.js +0 -10
  274. package/dist/feeder-IOR3XRNF.js +0 -2
  275. package/dist/gaps-cmd-3WXL6PAW.js +0 -3
  276. package/dist/headless-io-66RG5NN5.js +0 -2
  277. package/dist/ingest-TTUQ7UDK.js +0 -2
  278. package/dist/ingest-cmd-KP5M6XTA.js +0 -2
  279. package/dist/install-5VWCH5GW.js +0 -2
  280. package/dist/interactive-bind-MOV2VWHJ.js +0 -25
  281. package/dist/lifecycle-cmd-KSMETBPP.js +0 -2
  282. package/dist/list-commands-KUDSKVP5.js +0 -2
  283. package/dist/logical-ids-MLXAH45L.js +0 -2
  284. package/dist/login-flow-GZ3XHVCS.js +0 -2
  285. package/dist/maintenance-cmd-VFYGKY3X.js +0 -2
  286. package/dist/pdf-convert-OZIRUADA.js +0 -2
  287. package/dist/phase-seed-BMOSAA74.js +0 -2
  288. package/dist/pipeline-G7KWRK2G.js +0 -2
  289. package/dist/prepare-target-SQ5IGKXD.js +0 -2
  290. package/dist/readmodel-TDRFVDVI.js +0 -2
  291. package/dist/reconcile-cmd-NI3AYU3Y.js +0 -2
  292. package/dist/reconcile-deps-DCHUFIEC.js +0 -4
  293. package/dist/reconcile-engine-QXUKUKSL.js +0 -2
  294. package/dist/records-JLS63SDI.js +0 -2
  295. package/dist/registry-R6QNPI5E.js +0 -2
  296. package/dist/revert-PRR3D4XM.js +0 -2
  297. package/dist/review-cmd-SAGIKWEW.js +0 -4
  298. package/dist/run-PBS2J4N4.js +0 -2
  299. package/dist/run-VTUYLPSG.js +0 -2
  300. package/dist/sessions-GIEXOCE4.js +0 -2
  301. package/dist/structured-answers-YAVW65G4.js +0 -5
  302. package/dist/tcg-generate-HIC5AA3L.js +0 -2
  303. package/dist/testmd-actions-VOSP7L74.js +0 -2
  304. package/dist/testmd-sync-GNCDKPQN.js +0 -2
  305. package/dist/token-refresh-GSFVJ6GU.js +0 -2
  306. package/dist/verdicts-PRXUKSDV.js +0 -2
  307. package/dist/walk-session-G3DLBR24.js +0 -2
  308. package/dist/with-telemetry-5Y2CVPXK.js +0 -2
@@ -1,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{j as Re,k as oe,l as se,m as _e,n as $e,o as ae}from"./chunk-X6APRDUM.js";import{a as te,c as re,d as ye,f as ie}from"./chunk-U2CIXGZR.js";import{a as P,b as we,d as ke}from"./chunk-OS4VSIHT.js";import{a as X,b as N,c as ee,d as W,e as he,g as O,h as ne}from"./chunk-W5TTF7GB.js";import{a as ge}from"./chunk-BZAGVBCX.js";import{d as ve}from"./chunk-6J5T5FEY.js";import{a as S}from"./chunk-O5U6EAL3.js";import{b as Z,c as J,d as Q}from"./chunk-VDM3TWF6.js";import{h as me,j as pe}from"./chunk-54JZ6VEW.js";import{C as I}from"./chunk-W3Z7AZNT.js";import{g as T}from"./chunk-XMTSHHYQ.js";import{existsSync as Oe,statSync as Ue}from"fs";import{basename as G,resolve as q}from"path";function Ee(e){if(!e||e.stale_refs.length===0)return"\u2014";let n=e.direct_refs??[];return`${e.stale_refs.length} stale${n.length>0?` \xB7 ${n.length} direct`:""}`}function ce(e,n){let t=[...e.rows.filter(a=>a.kind!=="REMOVE").map(a=>[a.kind,S(a.ref),a.reason,Ee(a.impact)]),...e.archive.map(a=>["ARCHIVE",S(a.ref),a.why,Ee(a.impact)])],r=Math.max(40,n??100),i=[`reconcile ${e.source_id} \u2014 head ${e.head.status} \xB7 ${t.length} decision${t.length===1?"":"s"}`];return t.length>0&&i.push(...ve(["kind","ref","why","impact"],t,r,2)),e.changed&&i.push(e.held?`extract ran in override mode; ${e.defaultsTaken??0} default(s) auto-taken; matched-but-changed and new proposals HELD for your verdict (staged \u2014 nothing committed)`:`extract ran in override mode; ${e.defaultsTaken??0} default(s) auto-taken; matched-but-changed proposals auto-committed as edits`),i.push("each row becomes a card below \u2014 verdicts commit as they land"),e.planPath&&i.push(`plan: ${e.planPath}`),i}var xe=new Set(["interactive","agent","ci","override"]);function Ae(e,n){if(e.mode!==void 0&&!xe.has(e.mode))return{error:`--mode must be interactive | agent | ci | override, got '${e.mode}'`,code:"MODE_USAGE"};let t=e.mode,r="reconcile without a TTY needs an explicit mode \u2014 pass --mode agent|ci|override, or --plan for a preview";return t==="interactive"&&!n?{error:r}:t||(n?"interactive":e.plan?"override":{error:r})}async function Pe(e){let{makeHeadlessIO:n,agentRefusal:t}=await import("./headless-io-66RG5NN5.js");return t(n("ndjson","reconcile"),e,"MODE_USAGE")}function Me(e,n,t,r){if(J(t)){let v=Q(t),s=v?.sourceIdFor(t)??null;if(v===null||s===null)return{error:`--from '${t}' is not a supported remote URL \u2014 supported: ${Z.map(u=>u.hint).join("; ")}`};if(r!==void 0&&r!==s)return{error:`--source-id '${r}' does not match this URL's own identity '${s}' \u2014 re-run without --source-id. A source adopted with --as updates by re-running context ingest with the same --as; reconcile follows only the URL's own id`};let c=I(e);if(!c.heads.has(s))return{error:`unknown source '${s}' \u2014 see \`kane-cli context list --type source\`. If this URL was ingested under a custom id, update it by re-running context ingest with the same --as`};if(c.heads.get(s)==null)return{error:`source '${s}' is retired \u2014 restore it first with \`kane-cli context revert\`, then reconcile`};let _=z(e,s,{remoteUrl:t});return _!==null?{error:_}:{sourceId:s,remoteUrl:t}}if(r===void 0)return{error:"reconcile needs --from <file> AND --source-id <id> \u2014 see `kane-cli context list --type source` for ids"};let i=q(n,t);if(!Oe(i)||!Ue(i).isFile())return{error:`--from '${t}' is not a file \u2014 pass the changed source document`};let a=me(i);if(!a.ok)return{error:`--from '${t}' is not an ingestable document \u2014 allowed: ${a.allowlist.join(", ")}`};let o=I(e);if(!o.heads.has(r))return{error:`unknown source '${r}' \u2014 see \`kane-cli context list --type source\``};if(o.heads.get(r)==null)return{error:`source '${r}' is retired \u2014 restore it first with \`kane-cli context revert\`, then reconcile`};let w=z(e,r,{filePath:i});if(w!==null)return{error:w};let f=null;try{f=pe(i)}catch{}return f!==null&&f!==r&&o.heads.get(f)!=null?{error:`'${G(i)}' already backs live source '${f}' \u2014 did you mean --source-id ${f}? To truly move these bytes under '${r}', retire '${f}' first`}:{sourceId:r,filePath:i}}function C(e){return e==null?"(none)":e.slice(0,19)}function Y(e,n,t,r=!1,i){if(e.out(`reconcile ${n.source_id}: head ${n.head.status} \u2014 ${C(n.head.before)} \u2192 ${C(n.head.after)}`),r||(e.out(`note: ${n.note}`),e.out(`skipped arms: ${n.skipped_arms}`)),n.changed&&(e.out(n.held?`extract ran in override mode; ${t?.defaultsTaken??0} default(s) auto-taken; matched-but-changed and new proposals HELD for your verdict (staged \u2014 nothing committed)`:`extract ran in override mode; ${t?.defaultsTaken??0} default(s) auto-taken; matched-but-changed proposals auto-committed as edits`),i?.({type:"defaults_taken",count:t?.defaultsTaken??0})),r){let a=n.changeset??[],o=(f,v)=>{let s=a.filter(c=>c.kind===f).length;return s>0?`${s} ${v}`:null},w=[o("ADD","add"),o("MODIFY","modify"),o("ARCHIVE","archive")].filter(Boolean);n.changed&&e.out(`changeset: ${a.length} item(s)${w.length?` \u2014 ${w.join(" \xB7 ")}`:""}`),e.out(`plan: ${n.rows.length} row(s) \u2014 each gets a card below`);return}if(n.changed){let a=n.changeset??[];e.out(`changeset: ${a.length} item(s)`);for(let o of a)if(o.kind==="MODIFY")e.out(` [MODIFY] ${S(o.ref)} \u2014 ${o.summary} (${C(o.old_cid)} \u2192 ${o.new_cid===null?"(staged)":C(o.new_cid)})`);else if(o.kind==="ADD")e.out(` [ADD] ${S(o.ref)}`);else{e.out(` [ARCHIVE] ${S(o.ref)} \u2014 ${o.why}`);let w=le(o.impact,"retiring drops");w&&e.out(` ${w}`)}}e.out(`plan: ${n.rows.length} row(s)`);for(let a of n.rows){e.out(` [${a.kind}] ${S(a.ref)} \u2014 ${a.reason}`);let o=le(a.impact,"approving marks");o&&e.out(` ${o}`),e.out(` provenance: ${a.provenance}`),e.out(` action: ${a.action}`)}}function De(e,n){return ce({source_id:e.source_id,head:{status:e.head.status},rows:e.rows,archive:(e.changeset??[]).filter(t=>t.kind==="ARCHIVE"),changed:e.changed,held:!!e.held,defaultsTaken:n?.defaultsTaken},process.stdout.columns)}function le(e,n){if(!e||e.stale_refs.length===0)return null;let t=e.direct_refs??[];return`impact: ${n} ${e.stale_refs.length} item(s) stale`+(t.length>0?` \u2014 ${t.length} directly touched: ${t.join(", ")}`:"")}function D(e){return e==="interactive"?"override":e}async function M(e,n,t,r,i,a,o=[],w="override",f,v,s,c,_,u,E){let m;try{m=ne(e)}catch(d){return P(r,d instanceof Error?d.message:String(d)),1}try{if(!t){let{runWalkSession:d}=await import("./walk-session-G3DLBR24.js"),{telemetryEnvName:R}=await import("./bootstrap-QTVHGL45.js");return await d({dir:e,rows:n,archive:o,held:f??null,childMode:w,runDesign:c??null,mark:a,markA:s,...v?{archiveState:v}:{},...u?{meta:{verb:"reconcile",sid:u,env:R()}}:{},...E?{resumeCmd:E}:{},signals:b=>U(e,b.ref,b.verdict,b.reason),..._?{script:_}:{}})}return await Te(e,n,t,r,i,a,o,w,f,v)}finally{m()}}var H=(e,n)=>e?`kane-cli maintain reconcile --from ${e} --source-id ${n}`:void 0,He=e=>e===null?void 0:"filePath"in e?e.filePath:e.remoteUrl,V=e=>`${e} high-risk item(s) need a human \u2014 ci mode won't guess. Walk interactively or use --mode agent.`;function F(e,n,t){let r=n.rows;e({type:"reconcile_plan",source_id:n.source_id,plan_path:t,rows:r.map(i=>({kind:i.kind,ref:i.ref,why:i.reason})),archive:n.changeset.filter(i=>i.kind==="ARCHIVE").map(i=>({ref:i.ref,why:i.why}))})}function de(e={}){return{type:"reconcile_summary",applied:0,skipped:0,deferred:0,plan_only:0,failed:0,paused:0,stale_created:0,...e}}var L=de();async function j(e,n,t,r,i,a,o,w,f){F(i,n,t);let v=n.changeset.filter(_=>_.kind==="ARCHIVE"&&f?.[_.ref]===void 0),s=n.rows,c;try{c=ne(e)}catch(_){return i({type:"error",message:_ instanceof Error?_.message:String(_)}),i(de()),2}try{return await Fe(e,n,t,r,i,a,o,s,v,w)}finally{c()}}async function Fe(e,n,t,r,i,a,o,w,f,v){let s=0,c=0,_=0,u=0,E=0,m=0,d=0,R=new Set,b=(h,p)=>{try{v?.(h,p)}catch{}};for(let[h,p]of w.entries()){i({type:"reconcile_row_start",kind:p.kind,ref:p.ref,...p.impact?{stale:p.impact.stale_refs.length,direct:p.impact.direct_refs?.length??0}:{}});let g=(l,$,x)=>i({type:"reconcile_row_end",kind:p.kind,ref:p.ref,outcome:l,...$!==void 0?{exit_code:$}:{},...x?{detail:x}:{}});if(p.applied){c++,g("skipped");continue}if(p.kind==="REMOVE"){E++,g("plan-only");continue}if(p.held_ref&&n.held){let l=new Set;if(p.kind==="MODIFY"&&p.impact){let x=I(e);for(let A of p.impact.stale_refs){let K=x.resolve(A);K&&x.stale(K.tip)==="fresh"&&l.add(A)}}let $=oe(e,n.held,p.held_ref,ue);if(!$.ok){_++,d===0&&(d=1),g("failed",1,$.message);continue}if($.kind==="ADD"){let x=await r($.ref,{yes:!0,mode:o});if(x!==0){x===3?(u++,d===0&&(d=3),g("paused",3)):(_++,d===0&&(d=1),g("failed",x));continue}}s++,$.kind!=="ADD"&&p.impact&&(m+=l.size),b(h,"approved"),U(e,p.ref,$.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve"),g("applied");continue}let y=te(I(e),p.ref);if(!y.ok){c++,g("skipped");continue}let k=y.target;if(R.has(k.ucTip)){c++,g("skipped");continue}if(p.kind==="ADD"){let l=await r(k.seamRef,{yes:!0,mode:o});if(l===3){u++,d===0&&(d=3),g("paused",3);continue}if(l!==0){_++,d===0&&(d=1),g("failed",l);continue}R.add(k.ucTip),s++,b(h,"approved"),U(e,p.ref,"gap-resolved-create"),g("applied")}else{let l=await re(e,k,{yes:!0,mode:o},a,r,"batch");l.outcome==="evolved"?(R.add(k.ucTip),s++,b(h,"approved"),U(e,p.ref,"gap-resolved-evolve"),g("applied")):l.outcome==="paused"?(u++,d===0&&(d=l.code),g("paused",l.code)):l.outcome==="failed"?(_++,d===0&&(d=1),g("failed",l.code)):(c++,g("skipped"))}}return f.length>0&&(i({type:"reconcile_paused",plan_path:t,pending:f.map(h=>({ref:h.ref,why:h.why}))}),u+=f.length,d===0&&(d=3)),i(de({applied:s,skipped:c,plan_only:E,failed:_,paused:u,stale_created:m})),d}var ue={kind:"human",id:process.env.USER??"operator"};function U(e,n,t,r){ge(e,{ts:new Date().toISOString(),command:"reconcile-walk",id:n,verdict:t,polarity:"preference",by:ue,target:n,...r!==void 0?{reason:r}:{}})}async function Te(e,n,t,r,i,a,o=[],w="override",f,v){let s=0,c=0,_=0,u=0,E=0,m=0,d=0,R=new Set;for(let[b,h]of n.entries()){if(h.applied){r.out(`skipped ${h.ref} \u2014 already applied (${h.applied.outcome} at ${h.applied.at})`),c++;continue}let p=l=>{try{a?.(b,l)}catch($){P(r,`could not record applied state for ${h.ref}: ${$ instanceof Error?$.message:String($)}`)}};if(h.kind==="REMOVE"){r.out(`REMOVE ${h.ref} \u2014 plan-only in this release (not executed)`),u++;continue}if(h.held_ref&&f){let l=oe(e,f,h.held_ref,ue);if(!l.ok){P(r,`held ${h.ref}: ${l.message}`),E++,d===0&&(d=1);continue}if(r.out(`committed ${l.ref} (${h.kind==="ADD"?"minted":"updated \u2014 old\u2192new redirect"})`),l.kind==="ADD"){let $=await i(l.ref,{yes:t,mode:w});if($===3){r.out(`design session for ${l.ref} paused \u2014 resume with the "kane-cli design tests --resume <session>" command printed above`),m++,d===0&&(d=3),p("approved");continue}if($!==0){P(r,`design run for ${l.ref} ended with exit code ${$}`),E++,d===0&&(d=1),p("approved");continue}}s++,p("approved"),U(e,h.ref,h.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve");continue}let g=I(e),y=te(g,h.ref);if(!y.ok){r.out(`skipped ${h.ref} \u2014 ${y.message}`),c++;continue}let k=y.target;if(R.has(k.ucTip)){r.out(`skipped ${h.ref} \u2014 use-case ${k.display} already handled in this walk`),c++;continue}if(h.kind==="ADD"){let l=await i(k.seamRef,{yes:t,mode:w});if(l===3){r.out(`design session for ${k.display} paused \u2014 resume with the "kane-cli design tests --resume <session>" command printed above; this row lands when that session completes`),m++,d===0&&(d=3);continue}if(l!==0){P(r,`design run for ${k.display} ended with exit code ${l}`),E++,d===0&&(d=1);continue}R.add(k.ucTip),s++,p("approved"),U(e,h.ref,"gap-resolved-create")}else{let l=await re(e,k,{yes:!0,mode:w},r,i,"batch");l.outcome==="evolved"?(R.add(k.ucTip),s++,p("approved"),U(e,h.ref,"gap-resolved-evolve")):l.outcome==="paused"?(m++,d===0&&(d=l.code)):l.outcome==="failed"?(E++,d===0&&(d=l.code)):c++}}for(let b of o)if(b.kind==="ARCHIVE"&&v?.[b.ref]===void 0){r.out(`[ARCHIVE] ${b.ref} \u2014 ${b.why}`);{let h=le(b.impact,"retiring drops");h&&r.out(` ${h}`)}r.out(" plan-only \u2014 retire belongs to the interactive session (never headless)"),u++}return r.out(`reconcile walk: ${s} applied, ${c} skipped, ${_} deferred, ${u} plan-only`+(E>0?`, ${E} failed`:"")+(m>0?`, ${m} paused`:"")),d}var Be=new Set(Z.map(e=>e.name));function z(e,n,t){let r=I(e),i=r.heads.get(n);if(i==null)return null;let a=r.mediaOf(i);if("remoteUrl"in t){let o=Q(t.remoteUrl)?.name??"remote";return a.format!==o?`source '${n}' is backed by ${a.format} content, not a ${o} source \u2014 reconcile it with the --from it was originally ingested from`:null}return Be.has(a.format)?`source '${n}' is a remote ${a.format} source \u2014 pass its URL to --from, not a file`:null}function fe(e,n,t,r){return"remoteUrl"in n?$e(e,n.remoteUrl,{out:t.out,err:t.err},r.remoteFindProvider):_e(e,n.filePath)}function Ie(e){return e.remote_url!==void 0?{remoteUrl:e.remote_url}:e.backing_path!==void 0?{filePath:e.backing_path}:null}async function Se(e,n,t,r,i,a=!1,o=!1){let w=i.seams??{reingest:fe(e,t,r,i),reextract:ae(e,{stage:a,hostOut:c=>r.out(c),hostEmit:c=>{c.type!=="run_start"&&i.emitEvent?.(c)},...i.emitEvent?{}:{hostProgress:c=>process.stderr.write(c+`
3
- `)}})},f=null,v={reingest:w.reingest,reextract:async c=>f=await w.reextract(c)},s;try{r.out(`reconciling ${n}: re-reading the source and comparing against the graph\u2026`),s=await(i.buildPlan??se)(e,n,v)}catch(c){return P(r,`reconcile failed: ${c instanceof Error?c.message:String(c)}`),null}if(s.changed)if(o)for(let c of De(s,f))r.out(c);else Y(r,s,f,!1,i.emitEvent);return s}async function Ve(e){let[{render:n},t,{ScrollbackProvider:r},{ChatSurface:i},{makeChatController:a},{makeReconcileDeps:o}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./scrollback-JLPJR25X.js"),import("./ChatSurface-DALSIICW.js"),import("./chat-controller-YJCNU76T.js"),import("./reconcile-deps-DCHUFIEC.js")]),w=t.default??t,f=a(),v=o({contextDir:e,note:s=>f.note(s)});return new Promise(s=>{let c=n(w.createElement(r,null,w.createElement(i,{controller:f,verb:"extract",reconcile:v,autoReview:!0,onReviewExit:()=>{c.unmount(),s(0)},onCtrlC:()=>{c.unmount(),s(v.pending()?3:0)}})),{exitOnCtrlC:!1})})}async function Le(e,n,t,r,i){let a=N(e,n);if("error"in a)return P(r,a.error),2;let{plan:o,path:w}=a,f=t==="override"||t==="ci";if(n===void 0&&t==="interactive"&&r.isTTY&&!await r.confirm(`apply plan ${G(w)} for ${o.source_id} (created ${o.created})?`))return r.out(`not applying ${G(w)}`),0;let v=i.runDesignForUc??ie,s=i.runDesignForUc??null,c=i.sessionScript,_=(h,p)=>O(w,h,p),u=(h,p)=>W(w,h,p),E=T(e);if(E===o.head_pin){if(t==="agent"){let p=i.emitEvent??(()=>{});return j(e,B(o),w,v,p,r,D(t),_,o.archive_state)}let h=ee(o);if(t==="ci"&&h.length>0)return P(r,V(h.length)),2;if(r.out(`applying stored plan ${G(w)} for ${o.source_id} (${o.rows.length} row(s))`),!f)for(let p of ce({source_id:o.source_id,head:{status:"stored plan"},rows:o.rows,archive:(o.changeset??[]).filter(g=>g.kind==="ARCHIVE"),changed:!1,held:!!o.held},process.stdout.columns))r.out(p);return M(e,o.rows,f,r,v,_,o.changeset??[],D(t),o.held,o.archive_state,u,s,c,o.source_id,H(o.backing_path??o.remote_url,o.source_id))}if(r.out(`graph moved since this plan (${C(o.head_pin)} \u2192 ${C(E)}) \u2014 recomputing`),o.held)return Ce(e,o,r,i,t,v,!1);let m=Ie(o);if(m===null)return P(r,`stored plan for ${o.source_id} names no backing file or URL \u2014 re-run reconcile --from`),2;let d=z(e,o.source_id,m);if(d!==null)return P(r,`stored plan cannot replay: ${d}`),2;let R=await Se(e,o.source_id,m,r,i,!1,t==="interactive");if(!R)return 1;if(!R.changed)return Y(r,R,null,!1,i.emitEvent),0;if(t==="agent"){let h=i.emitEvent??(()=>{});return j(e,R,null,v,h,r,D(t))}let b=R.changeset.filter(h=>h.kind==="ARCHIVE");return t==="ci"&&b.length>0?(P(r,V(b.length)),2):M(e,R.rows,f,r,v,void 0,R.changeset,D(t),R.held,void 0,void 0,s,c,R.source_id,H(He(m),R.source_id))}function B(e,n=!1){return{source_id:e.source_id,changed:!0,head:{status:"unchanged",before:e.head_pin,after:e.head_pin},note:e.note,skipped_arms:e.skipped_arms,changeset:e.changeset??[],rows:n?e.rows.filter(t=>t.applied===void 0):e.rows,...e.held?{held:e.held}:{}}}async function je(e,n,t,r,i,a,o){let w=r.runDesignForUc??null,f=r.sessionScript,v=he(e,n);if(v===null)return null;if("error"in v)return P(t,v.error),2;let{plan:s,path:c}=v,_=s.rows.filter(d=>d.applied===void 0),u=ee(s),E=r.emitEvent??(()=>{});if(_.length===0&&u.length===0){t.out(`already reconciled \u2014 plan ${s.created} applied ${s.rows.length} row(s)`);let d=ye(I(e)).staleCount;return d>0&&(t.out(`${d} item(s) still stale \u2014 kane-cli maintain evolve --from-stale`),E({type:"stale_debt",count:d})),i==="agent"&&(F(E,B(s),c),E({...L})),0}let m=T(e);return m!==s.head_pin?(t.out(`plan ${s.created} superseded \u2014 graph moved (${C(s.head_pin)} \u2192 ${C(m)}); recomputing`),Ce(e,s,t,r,i,a,o)):(t.out(`resuming plan ${s.created} \u2014 ${_.length} pending row(s)${u.length>0?`, ${u.length} undecided archive item(s)`:""}`),o?(Y(t,B(s),null,!1,r.emitEvent),t.out(`plan stored: ${c}`),i==="agent"&&(F(E,B(s),c),E({...L})),0):i==="agent"?j(e,B(s),c,a,E,t,D(i),(d,R)=>O(c,d,R),s.archive_state):i==="ci"&&u.length>0?(P(t,V(u.length)),2):M(e,s.rows,i==="override"||i==="ci",t,a,(d,R)=>O(c,d,R),s.changeset??[],D(i),s.held,s.archive_state,(d,R)=>W(c,d,R),w,f,s.source_id,H(s.backing_path??s.remote_url,s.source_id)))}async function Ce(e,n,t,r,i,a,o){let w=r.runDesignForUc??null,f=r.sessionScript,v;if(n.held){let g=I(e),y=new Set(n.rows.filter(l=>l.held_ref!==void 0&&l.applied!==void 0).map(l=>l.held_ref)),k=[];for(let l of n.held.rows){if(y.has(l.temp_ref))continue;if(!l.matched_cid){k.push(l);continue}let $=g.tipOf(l.matched_cid);if(g.superseded.get($)===null){t.out(`dropped held "${l.title}" \u2014 its use-case was retired meanwhile`),r.emitEvent?.({type:"held_dropped",ref:l.temp_ref,title:l.title,reason:"target_retired"});continue}k.push($===l.matched_cid?l:{...l,matched_cid:$,uc:{...l.uc,matches_existing:{cid:$}}})}v={source_id:n.held.source_id,rows:k}}let s=Ie(n);if(s===null)return P(t,`stored plan for ${n.source_id} names no backing file or URL \u2014 re-run reconcile --from`),2;let c=z(e,n.source_id,s);if(c!==null)return P(t,`stored plan cannot replay: ${c}`),2;let _=r.seams??{reingest:fe(e,s,t,r),reextract:ae(e,{stage:v!==void 0,hostOut:g=>t.out(g),hostEmit:g=>{g.type!=="run_start"&&r.emitEvent?.(g)},...r.emitEvent?{}:{hostProgress:g=>process.stderr.write(g+`
4
- `)}})},u;try{u=await(r.buildPlan??se)(e,n.source_id,_,{resumeHeld:v})}catch(g){return P(t,`reconcile failed: ${g instanceof Error?g.message:String(g)}`),1}if(i==="interactive"&&!o)for(let g of De(u,null))t.out(g);else Y(t,u,null,!1,r.emitEvent);let E=T(e),m=null;if(E!=null){let g={},y=new Set(u.changeset.filter(k=>k.kind==="ARCHIVE").map(k=>k.ref));for(let[k,l]of Object.entries(n.archive_state??{}))y.has(k)&&(g[k]=l);m=X(e,{version:2,source_id:u.source_id,...n.remote_url!==void 0?{remote_url:n.remote_url}:{backing_path:n.backing_path},head_pin:E,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:u.skipped_arms,note:u.note,changeset:u.changeset,rows:u.rows,...u.held?{held:u.held}:{},...Object.keys(g).length>0?{archive_state:g}:{}}),t.out(`plan stored: ${m}`)}if(o){if(i==="agent"){let g=r.emitEvent??(()=>{});F(g,u,m),g({...L})}return 0}let d=r.emitEvent??(()=>{}),R=m?N(e,m).plan.archive_state:void 0,b=m?(g,y)=>O(m,g,y):void 0,h=m?(g,y)=>W(m,g,y):void 0;if(i==="agent")return j(e,u,m,a,d,t,D(i),b,R);let p=u.changeset.filter(g=>g.kind==="ARCHIVE"&&R?.[g.ref]===void 0);return i==="ci"&&p.length>0?(P(t,V(p.length)),2):M(e,u.rows,i==="override"||i==="ci",t,a,b,u.changeset,D(i),u.held,R,h,w,f,u.source_id,H(n.backing_path??n.remote_url,u.source_id))}async function be(e,n,t={},r=process.cwd()){let{telemetryBootstrap:i,telemetryEnvName:a}=await import("./bootstrap-QTVHGL45.js"),o=i({verb:"reconcile",mode:typeof e.mode=="string"?e.mode:"interactive",contextRoot:q(r,".context"),env:a(),applyPlanPath:typeof e.apply=="string"?q(r,e.apply):void 0,write:!0,longSession:!0});e.mode==="agent"&&t.emitEvent?.({type:"run_start",session:o.ids.session_id});let w=await Ye(e,n,t,r);return w===1&&e.mode!=="agent"&&(n.err??n.out)(o.supportFooter()),await o.end({exit_code:w}),w}async function Ye(e,n,t={},r=process.cwd()){let i=e.apply!==void 0&&e.apply!==!1,a=typeof e.apply=="string"?e.apply:void 0;if(e.plan&&i)return P(n,"pass --plan OR --apply, not both"),2;let o=e.from!==void 0||!i,w=e.from!==void 0&&J(e.from);if(o&&(!e.from||!e.sourceId&&!w))return P(n,"reconcile needs --from <file|url> AND --source-id <id> (files only \u2014 a URL derives its own id) \u2014 see `kane-cli context list --type source` for ids"),2;if(e.from&&a!==void 0)return P(n,"pass --from OR --apply <path>, not both \u2014 a stored plan names its own source"),2;let f=we(r,n);if(!f)return 2;if(e.mode!==void 0&&!xe.has(e.mode))return Pe(`--mode must be interactive | agent | ci | override, got '${e.mode}'`);let v=e.mode==="agent"||e.mode==="ci"||e.mode==="override";if(i&&!v&&!n.isTTY)return P(n,"refusing to apply without a TTY to confirm \u2014 pass --mode override|ci"),2;let s=!e.plan,c="override";if(e.from){let y=Ae(e,n.isTTY);if(typeof y=="object")return y.code==="MODE_USAGE"?Pe(y.error):(P(n,y.error),2);c=y}let _=c==="override"||c==="ci";if(i&&!e.from){let{makeReconcileDeps:y}=await import("./reconcile-deps-DCHUFIEC.js"),k=a===void 0?y({contextDir:f}).pending():null;if(k?.kind==="cards"){let $=e.mode??"interactive";return!n.isTTY||$!=="interactive"?(P(n,`a held changeset for ${k.source} awaits review (${k.count} change(s)) \u2014 resume in a terminal: kane-cli maintain reconcile --apply [HELD_REVIEW]`),2):(t.cardApplyMount??Ve)(f)}let l=e.mode??"interactive";return Le(f,a===void 0?void 0:q(r,a),l,n,t)}let u=Me(f,r,e.from,e.sourceId);if("error"in u)return P(n,u.error),2;if(!i){let{sessionsHoldingSource:y}=await import("./sessions-GIEXOCE4.js"),{holders:k,corrupt:l}=y(f,u.sourceId);if(l>0)return P(n,`cannot verify review holds \u2014 ${l} session file(s) unreadable; inspect with kane-cli context sessions list, clean with kane-cli context sessions clean, then retry [SESSIONS_UNREADABLE]`),2;if(k.length>0)return P(n,`session ${k[0]} holds item(s) for review pinned to ${u.sourceId} \u2014 finish that review first: kane-cli context extract --resume ${k[0]} [SOURCE_HELD]`),2}if(c==="interactive"&&!e.plan&&!i){let y=t.seams?.reingest??fe(f,u,n,t),k;try{k=await y(u.sourceId)}catch($){return P(n,$ instanceof Error?$.message:String($)),1}let l=k.status==="unchanged"?null:Re(f,u.sourceId);if(k.status!=="unchanged"&&!l)return n.out(`${u.sourceId} landed for the first time \u2014 extract it: kane-cli context extract --source ${u.sourceId}`),0;if(l){let x=await(t.chatMount??(async A=>{let{bindExtractInteractive:K}=await import("./extract-bind-BF2G6AS6.js");return K(A)}))({mode:"interactive",posture:"reconcile",source:u.sourceId,changeContext:l});if(x===3){let{sessionsHoldingSource:A}=await import("./sessions-GIEXOCE4.js");if(A(f,u.sourceId).holders.length===0)return 0}return x}}let E="remoteUrl"in u?{remoteUrl:u.remoteUrl}:{filePath:u.filePath},m=await Se(f,u.sourceId,E,n,t,!!e.plan||c==="interactive",c==="interactive"&&!e.plan);if(!m)return 1;let d=t.runDesignForUc??ie,R=t.runDesignForUc??null,b=t.sessionScript;if(!m.changed){let y=await je(f,u.sourceId,n,t,c,d,!!e.plan);if(y!==null)return y;if(Y(n,m,null,!1,t.emitEvent),c==="agent"){let k=t.emitEvent??(()=>{});F(k,m,null),k({...L})}return 0}let h=T(f),p=null;if(h!=null?p=X(f,{version:2,source_id:m.source_id,..."remoteUrl"in E?{remote_url:E.remoteUrl}:{backing_path:E.filePath},head_pin:h,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:m.skipped_arms,note:m.note,changeset:m.changeset,rows:m.rows,...m.held?{held:m.held}:{}}):P(n,"no chain head after extract \u2014 plan not stored"),c==="agent"){let y=t.emitEvent??(()=>{});if(!s)return F(y,m,p),y({...L}),0;let k=p?(l,$)=>O(p,l,$):void 0;return j(f,m,p,d,y,n,D(c),k)}if(!s)return p&&n.out(`plan stored: ${p}`),0;let g=m.changeset.filter(y=>y.kind==="ARCHIVE");if(c==="ci"&&g.length>0)return p&&n.out(`plan stored: ${p}`),P(n,V(g.length)),2;if(p){n.out(`plan stored: ${p}`);let y=p;return M(f,Ke(f,y)??m.rows,_,n,d,(k,l)=>O(y,k,l),m.changeset,D(c),m.held,void 0,void 0,R,b,m.source_id,H(e.from,m.source_id))}return M(f,m.rows,_,n,d,void 0,m.changeset,D(c),m.held,void 0,void 0,R,b,m.source_id,H(e.from,m.source_id))}function Ke(e,n){let t=N(e,n);return"error"in t?null:t.plan.rows}async function dn(e,n={},t,r=process.cwd()){if(e.mode==="agent"){let{makeHeadlessIO:i}=await import("./headless-io-66RG5NN5.js"),a=t?i("ndjson","reconcile",t):i("ndjson","reconcile"),o={out:a.out,err:v=>a.event({type:"error",message:v}),isTTY:!1,confirm:async()=>!1,ask:async()=>""},{runWithChannel:w}=await import("./run-channel-RGH4WIQX.js"),f=2;try{f=await w({event:v=>a.event(v)},()=>be(e,o,{...n,emitEvent:v=>a.event(v)},r))}catch(v){f=1,a.event({type:"error",message:v instanceof Error?v.message:String(v)})}return a.done(f)}return be(e,ke(),n,r)}export{Ae as a,Me as b,D as c,U as d,be as e,dn as f};
@@ -1,8 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b}from"./chunk-VZ7KXRXB.js";import{c as h}from"./chunk-EYOCNMUM.js";import{dirname as A,isAbsolute as L,resolve as j}from"path";var v=["db","api","js","smartui","network_query","network_assertion"];var i=class extends Error{constructor(r,o,e){super(`[${o}${e!=null?`:${e}`:""}] ${r}`);this.file=o;this.line=e;this.name="TestMdParseError"}},Y=new Set(["username","access_key","oauth","profile","project_id","folder_id"]),k=new Set(["mode","max_steps","timeout","global_context","local_context","variables","session_context","code_export","code_language","url","target","chrome_profile","cdp_endpoint","ws_endpoint","headless","app","no_reset","os_version","device_name","on_lock_conflict","tags","assurance"]),R=new Set(["optional"]),K=new Set(["optional","variables"]),T=new Set(["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"]),P=new Set(["app","no_reset","os_version","device_name"]),C=new Set(["mode","on_lock_conflict","tags","assurance"]);function oe(t,n){let r=n.split(`
3
- `),{global:o,bodyStartLine:e}=M(t,r),{title:s,steps:a}=W(t,r,e);return{path:t,title:s,global:o,steps:a}}function M(t,n){if(n[0]?.trim()!=="---")return{global:{},bodyStartLine:0};let r=-1;for(let l=1;l<n.length;l++)if(n[l].trim()==="---"){r=l;break}if(r===-1)throw new i("frontmatter is missing closing '---'",t,1);let o=n.slice(1,r).join(`
4
- `),e;try{e=b(o)??{}}catch(l){throw new i(`invalid YAML in frontmatter: ${l.message}`,t,1)}if(E(t,e,"frontmatter",1),e.on_lock_conflict!==void 0){let l=e.on_lock_conflict;if(l!=="readonly"&&l!=="fail"&&l!=="wait")throw new i(`on_lock_conflict must be 'readonly' | 'fail' | 'wait', got: ${JSON.stringify(l)}`,t,1)}if(x(t,e,1),e.assurance!==void 0){let l=e.assurance;if(l===null||typeof l!="object"||Array.isArray(l))throw new i("assurance must be a mapping with sub-keys {id, base}",t,1);let c=l;for(let d of Object.keys(c))if(d!=="id"&&d!=="base")throw new i(`unknown assurance sub-key '${d}' \u2014 the engine block allows only {id, base}`,t,1);if(typeof c.id!="string"||c.id.length===0)throw new i("assurance.id must be a non-empty string (logical id)",t,1);if(c.base!==void 0&&!(typeof c.base=="string"&&/^sha256:[0-9a-f]+$/.test(c.base)))throw new i("assurance.base must be a 'sha256:<hex>' string",t,1)}if(e.tags!==void 0){let l=e.tags,c=Array.isArray(l)?l.map(d=>String(d)).join(","):String(l);e.tags=B(c,t,1)}if(e.target!==void 0&&(e.target=G(e.target,t,1)),e.app!==void 0&&(e.app=V(e.app,t,1)),e.no_reset!==void 0&&typeof e.no_reset!="boolean")throw new i(`no_reset must be boolean: got ${typeof e.no_reset}`,t,1);if(e.os_version!==void 0&&typeof e.os_version!="string")if(typeof e.os_version=="number")e.os_version=String(e.os_version);else throw new i(`os_version must be a string: got ${typeof e.os_version}`,t,1);let s=e.target,a=s==="emulator"||s==="simulator";if(a&&e.app===void 0)throw new i(`target: ${String(s)} needs an app \u2014 add \`app: <path-to-build | AppId>\``,t,1);if(!a&&e.app!==void 0)throw new i("app requires a mobile target \u2014 add `target: emulator` or `target: simulator`",t,1);if(!a&&e.no_reset!==void 0)throw new i("no_reset requires a mobile target \u2014 add `target: emulator` or `target: simulator`",t,1);if(!a&&e.os_version!==void 0)throw new i("os_version requires a mobile target \u2014 add `target: emulator` or `target: simulator`",t,1);if(e.device_name!==void 0&&typeof e.device_name!="string")throw new i(`device_name must be a string: got ${typeof e.device_name}`,t,1);if(!a&&e.device_name!==void 0)throw new i("device_name requires a mobile target \u2014 add `target: emulator` or `target: simulator`",t,1);return{global:e,bodyStartLine:r+1}}function B(t,n,r){let e=t.trim().replace(/^\[/,"").replace(/\]$/,"").split(",").map(s=>s.trim().toLowerCase());if(e.length===0||e.some(s=>s.length===0))throw new i("tags must be a non-empty list of non-empty strings",n,r);return[...new Set(e)]}var I=new Set(["chrome","cdp","ws","emulator","simulator"]),N="target must be one of 'chrome' | 'cdp' | 'ws' (web) or 'emulator' | 'simulator' (mobile, with a root `app:` key)";function G(t,n,r){if(typeof t=="string"&&I.has(t))return t;throw t!==null&&typeof t=="object"&&!Array.isArray(t)?new i(`the mapping form of target is no longer accepted \u2014 write flat keys:
5
- target: emulator | simulator
6
- app: <path-to-build | AppId>`,n,r):new i(`${N} \u2014 got: ${JSON.stringify(t)}`,n,r)}function V(t,n,r){if(typeof t!="string"||t.trim().length===0)throw new i("app must be a build (e.g. ./builds/app-debug.apk) or an app id from your cloud uploads",n,r);let o=t.trim();if(!/\.(apk|zip)$/i.test(o)&&!/^APP\d{6,}$/.test(o))throw new i(`app '${o}' is not a build \u2014 expected a path ending in .apk or .zip, or an app id from your cloud uploads.`,n,r);return q(o,n)}function q(t,n){return/^APP[0-9A-Za-z_-]+$/.test(t)||L(t)?t:j(A(n),t)}function re(t){let n=t.target;if(!(n!=="emulator"&&n!=="simulator"))return{platform:h(n)??"",app:t.app??"",...t.no_reset!==void 0?{no_reset:t.no_reset}:{}}}function ie(t){let n=t.target;return n==="chrome"||n==="cdp"||n==="ws"?n:void 0}var F=/\s@verifies\s+(ac-[\w.:\/-]+(?:\s*,\s*ac-[\w.:\/-]+)*)\s*$/;function z(t,n,r){let o=F.exec(n);if(o)return{label:n.slice(0,o.index).trim(),verifies:o[1].split(",").map(s=>s.trim())};let e=n.lastIndexOf("@verifies");if(e>0&&/\s/.test(n[e-1])){let s=n.slice(e+9).split(/[\s,]+/).filter(a=>a.length>0);if(s.length===0||s.every(a=>a.startsWith("ac-")))throw new i("malformed @verifies directive \u2014 expected '@verifies ac-<id>[, ac-<id>\u2026]' at the end of the heading",t,r)}return{label:n,verifies:[]}}var $=v.join("|"),H=new RegExp(`^(.*\\S)\\s+@(${$})\\s*$`),J=new RegExp(`^@(${$})\\s*$`);function S(t,n,r,o){let e=J.exec(n);if(e)throw new i(`replay-only marker @${e[1]} needs a step label before it (e.g. '## Step 3 @${e[1]}')`,t,r);let s=H.exec(n);if(!s)return null;let a=s[2];if(o)throw new i(`only one replay-only marker per step \u2014 found @${o} and @${a}`,t,r);return{label:s[1].trim(),replayOnly:a}}function U(t,n,r){let o=n,e,s=S(t,o,r,e);s&&({label:o,replayOnly:e}=s);let a=z(t,o,r);o=a.label;let l=S(t,o,r,e);return l&&({label:o,replayOnly:e}=l),{label:o,verifies:a.verifies,...e?{replayOnly:e}:{}}}function W(t,n,r){let o,e=r;for(;e<n.length&&n[e].trim()==="";)e++;let s=e<n.length?/^#\s+(.+?)\s*$/.exec(n[e]):null;s&&(o=s[1],e++);let a=[];for(let c=e;c<n.length;c++)/^##\s/.test(n[c])&&a.push(c);let l=[];for(let c=0;c<a.length;c++){let d=a[c],u=a[c+1]??n.length,m=n[d].replace(/^##\s+/,"").trim(),{label:y,verifies:f,replayOnly:g}=U(t,m,d+1),p=n.slice(d+1,u),{config:w,body:_,optional:O}=D(t,d+1,p);if(g&&_.kind==="import_ref")throw new i(`@${g} is a replay-only marker for objective steps \u2014 it cannot mark an @import row`,t,d+1);l.push({index:c+1,heading:y,verifies:f,config:w,body:_,headingLine:d+1,optional:O,...g?{replayOnly:g}:{}})}return{title:o,steps:l}}function D(t,n,r){let o=0;for(;o<r.length&&r[o].trim()==="";)o++;let e,s=n;if(o<r.length&&/^```yaml\s*$/.test(r[o])){let f=o;s=n+f,o++;let g=-1;for(;o<r.length;){if(/^```\s*$/.test(r[o])){g=o;break}o++}if(g===-1)throw new i("step-config fenced ```yaml block is not closed",t,s);let p=r.slice(f+1,g).join(`
7
- `);try{e=b(p)??{}}catch(w){throw new i(`invalid YAML in step config: ${w.message}`,t,s)}o=g+1}let a=Z(r.slice(o)),l=a.filter(f=>f.trim()!=="");if(l.length>0&&/^@session\s+/.test(l[0].trim()))throw new i("@session is no longer supported (iteration 3); use @import instead",t,n);let c=/^@import\s+(\S.*)$/,u=a.filter(f=>c.test(f.trim())).length>0;if(u&&l.length!==1)throw new i("step body must be exactly one of prose / @import",t,n);let m=!1,y;if(e){if(E(t,e,u?"step config (ref)":"step config (objective)",s),x(t,e,s),typeof e.optional=="boolean")m=e.optional;else if(e.optional!==void 0)throw new i(`step config 'optional' must be boolean: got ${typeof e.optional}`,t,s);let f={...e};delete f.optional,u&&delete f.variables,!u&&Object.keys(f).length>0&&(y=f)}if(u){let g=c.exec(l[0].trim())[1].trim(),p=e?.variables;return{body:{kind:"import_ref",path:g,...p&&Object.keys(p).length>0?{bindings:p}:{}},optional:m}}return{body:{kind:"objective",text:a.join(`
8
- `).trim()},config:y,optional:m}}function Z(t){let n=0,r=t.length;for(;n<r&&t[n].trim()==="";)n++;for(;r>n&&t[r-1].trim()==="";)r--;return t.slice(n,r)}function x(t,n,r){let o=n.variables;if(o==null)return;if(typeof o!="object"||Array.isArray(o))throw new i("variables must be an object map",t,r);let e={};for(let[s,a]of Object.entries(o))if(typeof a=="string")e[s]={value:a};else if(a&&typeof a=="object"&&!Array.isArray(a)&&typeof a.value=="string")e[s]=a;else throw new i(`variable '${s}' must be a string or { value: ... } object`,t,r);n.variables=e}function E(t,n,r,o){for(let e of Object.keys(n)){if(Y.has(e))throw new i(`auth/identity keys are CLI-only: ${e}`,t,o);if(r==="frontmatter"){if(R.has(e))throw new i(`step-only key in frontmatter: ${e}`,t,o);if(!k.has(e))throw new i(`unknown config key: ${e}`,t,o)}else if(r==="step config (objective)"){if(!k.has(e)&&!R.has(e))throw new i(`unknown config key: ${e}`,t,o);if(T.has(e))throw new i(`chrome config is global-only: ${e}`,t,o);if(P.has(e))throw new i(`'${e}' is global-only: the whole run drives one app`,t,o);if(C.has(e))throw new i(`'${e}' is run-level and cannot be set per-step`,t,o)}else if(!K.has(e))throw new i(`step config on @import may only contain 'optional' / 'variables': got ${e}`,t,o)}}export{oe as a,re as b,ie as c,F as d};
@@ -1,3 +0,0 @@
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(`
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 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{homedir as a}from"os";import{join as t}from"path";var m="0.8.12";var e=t(a(),".testmuai","kaneai"),d=t(e,"profiles"),g=t(e,"tui-config.json"),h=t(e,"media"),b="https://registry.npmjs.org/@testmuai/kane-cli",A="https://api.github.com/repos/LambdaTest/kane-cli/releases",n="@testmuai/kane-cli-skill",_=`https://registry.npmjs.org/${n}`,r="kane-cli",L=[{dir:t(a(),".claude","skills",r),agent:"Claude Code"},{dir:t(a(),".agents","skills",r),agent:"Codex CLI"},{dir:t(a(),".gemini","skills",r),agent:"Gemini CLI"}],x="https://dd-proxy.lambdatest.com/intake/kane-cli",U="https://kaneai-playground.lambdatest.io",u=9222,R=9230,I=t(e,"chrome-profiles"),o=t(e,"hints"),E=t(o,"state.json");function C(s){return t(o,`catalog-${s}.json`)}var c="127.0.0.1",T=18392,S=18400,i="/callback";function f(s){return`http://${c}:${s}${i}`}var B="KANE CLI",N="*",P={prod:{authBaseUrl:"https://auth.lambdatest.com",consentUrl:"https://accounts.lambdatest.com",controllerBaseUrl:"https://kaneai-api.lambdatest.com/v16-controller/v1",tmsBaseUrl:"https://test-manager-api.lambdatest.com/api",testGeneratorBaseUrl:"https://test-manager-api.lambdatest.com",secretsBaseUrl:"https://api-hyperexecute.lambdatest.com",testManagerUiUrl:"https://test-manager.lambdatest.com",shareApiBaseUrl:"https://api.lambdatest.com",v16ServerHost:"https://kaneai-api.lambdatest.com/v16-server",evidenceViewerUrl:"https://evidence.lambdatest.com",mediaArtefactsHost:"prod-mobile-artefacts.lambdatest.com",mobileAppBaseUrl:"https://api.lambdatest.com"},stage:{authBaseUrl:"https://stage-auth.lambdatestinternal.com",consentUrl:"https://stage-accounts.lambdatestinternal.com",controllerBaseUrl:"https://auteur-stage-automind.lambdatestinternal.com/v16-controller/v1",tmsBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com/api",testGeneratorBaseUrl:"https://stage-test-manager-api.lambdatestinternal.com",secretsBaseUrl:"https://api-stage-hyperexecute.lambdatestinternal.com",testManagerUiUrl:"https://stage-test-manager.lambdatestinternal.com",shareApiBaseUrl:"https://stage-api.lambdatestinternal.com",v16ServerHost:"https://auteur-stage-automind.lambdatestinternal.com/v16-server",evidenceViewerUrl:"https://stage-evidence.lambdatestinternal.com",mediaArtefactsHost:"stage-mobile-artefacts.lambdatestinternal.com",mobileAppBaseUrl:"https://stage-api.lambdatestinternal.com"}},O={orange:"#ff9500",generateAccent:"#0d9488",assuranceAccent:"#b388ff",purple:"#b388ff",secondary:"#888888",dim:"#666666",muted:"#444444",green:"#4ade80",red:"#ef4444",amber:"#fbbf24"};export{m as a,e as b,g as c,h as d,b as e,A as f,n as g,L as h,x as i,U as j,u as k,R as l,I as m,E as n,C as o,c as p,T as q,S as r,i as s,f as t,B as u,N as v,P as w,O as x};
@@ -1,26 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as w}from"./chunk-KRL2BDI5.js";import{b as h,c as b}from"./chunk-VZ7KXRXB.js";import{b as $}from"./chunk-IAHKTEET.js";var j=new Set(["delta","state-transition"]),K=/^capture baseline:/i;function I(e){return typeof e=="string"?e:e.text}function S(e){return typeof e=="object"&&e.baseline===!0||K.test(I(e).trim())}function T(e){return typeof e=="object"&&e!==null&&!Array.isArray(e)&&"derived"in e}function B(e,r){if(e.check_prose)return e.check_prose;let t=r.find(o=>o.ref===e.check.verified_against),n=t?.text?` \u2014 the stated promise: ${t.text}`:"",s=String(e.check.operand??e.check.within??e.check.metric??"");return e.check.kind==="forbidden-presence"?`Confirm '${s}' does NOT appear (forbidden-presence)${n}`:`Confirm ${e.check.kind} check: ${s} (${e.check.operator})${n}`}var N=/^## Step \d+ — assert\s*$/;function X(e,r){let t=e.split(`
3
- `),n=!1;for(let s=0;s<t.length;s++){let o=/^(##\s.*?)\s@verifies\s+(.+?)\s*$/.exec(t[s]);if(!o)continue;n=!0;let c=o[2].split(",").map(a=>a.trim()).filter(Boolean).map(a=>{let i=r(a)??(a.startsWith("ac-")?a:null);if(!i)throw new Error(`@verifies ref '${a}' does not resolve to a committed AC`);return i});t[s]=`${o[1]} @verifies ${c.join(", ")}`}return{md:t.join(`
4
- `),tagged:n}}function Y(e,r){if(r.length!==0&&!e.split(`
5
- `).some(t=>/^##\s/.test(t)&&w.test(t)))throw new Error("generated body has no @verifies binding for its ACs \u2014 the emitter contract is broken")}function ee(e){let r=e.split(`
6
- `);if(r[0]?.trim()!=="---")return{};let t=r.slice(1).findIndex(n=>n.trim()==="---");if(t<0)return{};try{return h(r.slice(1,t+1).join(`
7
- `))??{}}catch{return{}}}function te(e,r){if(r.length===0)return e;let t=e.split(`
8
- `);for(let n=t.length-1;n>=0;n--){if(/^## Step \d+ — assert @verifies /.test(t[n]))return e;if(N.test(t[n]))return t[n]=`${t[n].trimEnd()} @verifies ${r.join(", ")}`,t.join(`
9
- `)}return e}function ne(e,r){return r.size===0?e:e.split(`
10
- `).map(t=>{let n=t.match(/^@import\s+(\S+)\s*$/);if(n&&r.has(n[1]))return`@import ${r.get(n[1])}`;let s=t.match(/^## Import: (\S+)\s*$/);return s&&r.has(s[1])?`## Import: ${r.get(s[1])}`:t}).join(`
11
- `)}function E(e){let r=e.expected_mode??(T(e.operand)?"runtime-derived":"inferred");return{kind:e.kind,operator:e.operator,...e.operand!==void 0?{operand:e.operand}:{},...j.has(e.kind)?{baseline:e.baseline??null}:{},...e.within!==void 0?{within:e.within}:{},...e.metric!==void 0?{metric:e.metric}:{},...e.threshold!==void 0?{threshold:e.threshold}:{},...e.unit!==void 0?{unit:e.unit}:{},verified_against:e.verified_against,expected_mode:r,review_required:e.review_required??r==="runtime-derived"}}function re(e,r,t){if(j.has(e.check.kind)&&!e.steps.some(S))throw new Error(`emitTestMd: check kind '${e.check.kind}' needs a baseline-capture step before the action (a step starting 'capture baseline: <metric>' or { baseline: true }) \u2014 the validator should have caught this`);let n=[];if(e.target){let i=u=>/^[A-Za-z0-9._/@-]+$/.test(u)?u:JSON.stringify(u);n.push("---",`target: ${e.target}`),e.app&&n.push(`app: ${i(e.app)}`),n.push("---","")}n.push(`# ${e.title}`,""),r.intent&&n.push(`> ${r.intent}`,"");for(let i of e.reuses??[])n.push(`## Import: ${i}`,"",`@import ${i}`,"");let s=[],o=e.steps.some(i=>typeof i=="object"&&(i.verifies?.length??0)>0),c=0;for(let i of e.steps){c++;let u=I(i).trim(),l=typeof i=="object"&&i.verifies?.length?` @verifies ${i.verifies.join(", ")}`:"";n.push(`## Step ${c}${l}`,"",u,""),s.push({step:c,objective:u,...S(i)?{baseline:!0}:{},...typeof i=="object"&&i.verifies?.length?{verifies:[...i.verifies]}:{}})}if(o){let i=-1;if(e.steps.forEach((u,l)=>{typeof u=="object"&&u.verifies?.includes(e.check.verified_against)&&(i=l)}),i<0)throw new Error(`emitTestMd: no tagged step claims check.verified_against (${String(e.check.verified_against)}) \u2014 the check would be dropped`);s[i].check=E(e.check)}else{c++;let i=B(e,t);n.push(`## Step ${c} \u2014 assert`,"",i,""),s.push({step:c,objective:i,check:E(e.check)})}let a=b({title:e.title,...r.title?{scenario:r.title}:{},objectives:s},{sortKeys:!0,lineWidth:-1});return{test_md:n.join(`
12
- `),objectives_yaml:a}}function ie(e){let t=e.replace(/\r\n/g,`
13
- `).split(`
14
- `).map(o=>o.replace(/[ \t]+$/,""));if(t[0]?.trim()==="---"){let o=t.slice(1).findIndex(c=>c.trim()==="---");if(o>=0){let c=h(t.slice(1,o+1).join(`
15
- `))??{},a="assurance"in c;delete c.assurance,Object.keys(c).length===0&&a?t=t.slice(o+2):t=["---",...b(c,{sortKeys:!0,lineWidth:-1}).trimEnd().split(`
16
- `),"---",...t.slice(o+2)]}}let n=[];for(let o of t)o===""&&n[n.length-1]===""||n.push(o);for(;n[0]==="";)n.shift();for(;n[n.length-1]==="";)n.pop();let s=n.join(`
17
- `)+`
18
- `;return"sha256:"+$(Buffer.from("assurance.testdef\0"+s,"utf8"))}import{existsSync as M,readFileSync as O}from"fs";import{dirname as W,isAbsolute as z,resolve as D}from"path";var _=/^@import\s+(\S+)\s*$/;function F(e){let r=new Set;for(let t=0;t<e.length;t++)if(_.test(e[t].trim()))for(let n=t-1;n>=0;n--){let s=e[n].trim();if(s!==""){s==="```"&&r.add(t);break}}return r}function G(e,r,t=new Set,n=0){if(n>10)return e;let s=e.split(`
19
- `),o=F(s);return s.map((c,a)=>{let i=_.exec(c.trim());if(!i||o.has(a))return c;let u=r(i[1]);if(!u||t.has(u.cycleKey))return c;let l=new Set(t);return l.add(u.cycleKey),G(u.body.trimEnd(),u.next,l,n+1)}).join(`
20
- `)}function q(e){return r=>{let t=e.resolve(r);if(!t)return null;let n=e.getNode(t.tip)?.content.test_md_blob;return n?{body:n,cycleKey:t.tip,next:q(e)}:null}}function V(e,r){return t=>{let n=z(t)?t:D(e,t);if(!M(n))return null;let s=O(n,"utf8"),o=P(s);return!o||!r.resolve(o)?null:{body:J(s),cycleKey:n,next:V(W(n),r)}}}function R(e,r){let t=-1;for(let d=1;d<r;d++)if(/^assurance\s*:\s*$/.test(e[d])){t=d;break}if(t<0)return null;let n=r;for(let d=t+1;d<r;d++)if(/^[^\s#]/.test(e[d])){n=d;break}let s,o=t,c,a,i,u,l,f=!1;for(let d=t+1;d<n;d++){let p=e[d].endsWith("\r")?e[d].slice(0,-1):e[d];if(p.trim()===""||/^\s*#/.test(p))continue;o=d;let v=/^(\s+)([^\s:#][^:]*):\s*(.*)$/.exec(p);if(!v){/^\s*["']?base["']?\s*:/.test(p)&&(f=!0);continue}let[,x,L,C]=v,m=L.trimEnd();s===void 0&&(s=x);let g=x===s,k=/^([^#\s]\S*)?\s*(#.*)?$/.exec(C.trim()),y=k?.[1];m==="id"&&g&&c===void 0&&(c=d,a=y),m==="base"&&(g&&i===void 0?(i=d,u=y,l=k?.[2]):g||(f=!0)),m!=="base"&&/^["']base["']$/.test(m)&&(f=!0)}return{start:t,lastChild:o,childIndent:s,idLine:c,id:a,baseLine:i,base:u,baseComment:l,strayBase:f}}function H(e){let r=A(e);if(!r)return null;let t=e.split(`
21
- `),n=R(t,r.endLine);return n?.id?{id:n.id,...n.base!==void 0?{base:n.base}:{}}:null}function P(e){return H(e)?.id??null}function A(e){let r=e.split(`
22
- `);if(r[0]?.trim()!=="---")return null;for(let t=1;t<r.length;t++)if(r[t].trim()==="---")return{text:r.slice(1,t).join(`
23
- `),endLine:t};return null}function J(e){let r=A(e);if(!r)return e;let t=e.split(`
24
- `),n=R(t,r.endLine),s=[],o=!1;for(let a=1;a<r.endLine;a++){let i=t[a];if(n&&a>=n.start&&a<=n.lastChild){o=!1;continue}if(/^assurance\s*:\s*\{/.test(i)){o=!0;continue}o&&/^\s+\S/.test(i)||(o=!1,s.push(i))}let c=t.slice(r.endLine+1).join(`
25
- `);return s.every(a=>a.trim()==="")?c:["---",...s,"---",c].join(`
26
- `)}export{T as a,X as b,Y as c,ee as d,te as e,ne as f,re as g,ie as h,_ as i,F as j,G as k,q as l,V as m,R as n,H as o,J as p};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as o}from"./chunk-IAHKTEET.js";import{existsSync as c,mkdirSync as f,readFileSync as u,renameSync as l,writeFileSync as g}from"fs";import{dirname as p,join as a}from"path";function i(t,r){let n=r.startsWith("sha256:")?r.slice(7):r;return a(t,"blobs",n.slice(0,2),n.slice(2))}function B(t,r){return i(t,r)}function m(t){let r=Buffer.concat([Buffer.from("assurance.blob\0","utf8"),t]);return"sha256:"+o(r)}function d(t,r){let n=m(r),e=i(t,n);if(!c(e)){f(p(e),{recursive:!0});let s=`${e}.tmp-${process.pid}`;g(s,r),l(s,e)}return n}function S(t,r){let n=i(t,r);return c(n)?u(n):null}export{B as a,m as b,d as c,S as d};
@@ -1,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as o}from"./chunk-5DT7PIGB.js";import{a as n}from"./chunk-CH273NAE.js";import{existsSync as c}from"fs";function s(t,r){(t.err??t.out)(`error: ${r}`)}function a(t,r){let e=n(t);return c(e)?e:(s(r,"no context store here (run `kane-cli context ingest <files>` first)"),null)}async function p(t,r,e){return e?!0:t.isTTY?t.confirm(`${r}?`):(s(t,`refusing to ${r} without --yes (no TTY to confirm)`),!1)}function d(){return{out:t=>process.stdout.write(t+`
3
- `),err:t=>process.stderr.write(t+`
4
- `),isTTY:o(),confirm:async t=>{let{createInterface:r}=await import("readline/promises"),e=r({input:process.stdin,output:process.stdout});try{let i=await e.question(`${t} [y/N] `);return/^y(es)?$/i.test(i.trim())}finally{e.close()}},ask:async t=>{let{createInterface:r}=await import("readline/promises"),e=r({input:process.stdin,output:process.stdout});try{return await e.question(t)}finally{e.close()}}}}export{s as a,a as b,p as c,d};
@@ -1,6 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{e as U}from"./chunk-EHN5HTUD.js";import{b as J,c as w,e as q,i as z,j as Q,k as X,l as Y,m as T}from"./chunk-T4OJX2GZ.js";import{a as G}from"./chunk-KRL2BDI5.js";import{copyFileSync as le,cpSync as pe,existsSync as $,mkdirSync as ue,readFileSync as Oe,readdirSync as ce,rmSync as Te,writeFileSync as Ae}from"fs";import{dirname as _e,isAbsolute as Ee,join as y,relative as Le,resolve as Ke}from"path";import{writeFileSync as ge,mkdirSync as Se,readFileSync as ye}from"fs";import{dirname as Re,basename as Z}from"path";function te(e){let t=e.outPath??w(e.sourcePath);Se(Re(t),{recursive:!0});let s=[];s.push("---"),s.push(`test: ../${Z(e.sourcePath)}`),s.push(`status: ${e.overallStatus}`),s.push(`started: ${e.startedISO}`),s.push(`duration_s: ${e.durationS}`),s.push(`session_id: ${e.sessionId}`),s.push("---",""),s.push(`# ${e.title??Z(e.sourcePath)} \u2014 Result`,"");for(let l=0;l<e.rootSteps.length;l++){let d=e.rootSteps[l],r=e.outcomes.find(u=>u.rootStepIndex===l+1);if(s.push(xe(d,r)),r?.stepMd5&&s.push(`md5: ${r.stepMd5}`),r?.status==="failed"&&r.reason&&s.push(`Reason: ${r.reason}`),r?.softFailures?.length)for(let u of r.softFailures){let o=u.reason?`: ${u.reason}`:"";s.push(`\u26A0 optional sub-step ${u.subStepIndex} failed${o}`)}d.body.kind==="objective"&&r?.status!=="skipped"&&s.push(d.body.text),s.push("")}return ge(t,s.join(`
3
- `),"utf8"),t}function xe(e,t){if(!t)return`## ${e.heading} (no outcome)`;let s=t.duration_s!=null?`${t.duration_s}s`:"\u2014";if(t.status==="skipped")return`## ${e.heading} \u23ED skipped`;let l=t.softFailed?" (optional)":"";if(t.refKind&&t.status==="passed"){let d=t.helperResultRelPath?` \u2192 ${t.helperResultRelPath}`:"";return`## ${e.heading} \u2713 passed (via @${t.refKind} ${t.refLabel} \u2014 ${t.inlinedCount} inlined steps, ${s}${d})`}if(t.refKind&&t.status==="failed"){let d=t.failedSubStepIndex&&t.failedSubStepIndex.length>0?` \u2014 at sub-step ${t.failedSubStepIndex.join(" \u2192 sub-step ")}`:"",r=t.helperResultRelPath?` \u2192 ${t.helperResultRelPath}`:"";return`## ${e.heading} \u2717 failed${l} (via @${t.refKind} ${t.refLabel}${d}, ${s}${r})`}return t.status==="passed"?`## ${e.heading} \u2713 passed (${s})`:`## ${e.heading} \u2717 failed${l} (${s})`}var Ie=/^##\s+(.+?)\s+(✓ passed|✗ failed(?:\s+\(optional\))?|⏭ skipped)(?:\s+\((.*)\))?\s*$/,ke=/via\s+@\w+\s+(\S+).*?(?:→\s+(\S+))?\s*$/,be=/^md5:\s+([a-f0-9]{32})\s*$/;function ee(e,t){for(let s=t;s<e.length&&!/^##\s/.test(e[s]);s++){if(e[s].trim()==="")continue;let l=be.exec(e[s]);return l?l[1]:null}return null}function D(e){let s=ye(e,"utf8").split(`
4
- `),l="passed";if(s[0]?.trim()==="---")for(let r=1;r<s.length&&s[r].trim()!=="---";r++){let u=/^status:\s+(passed|failed|interrupted)\s*$/.exec(s[r]);u&&(l=u[1])}let d=[];for(let r=0;r<s.length;r++){let u=Ie.exec(s[r]);if(!u)continue;let o=u[1],n=u[2],c=u[3]??"",m=n.startsWith("\u2713")?"passed":n.startsWith("\u23ED")?"skipped":"failed";if(/via\s+@/.test(c)){let f=ke.exec(c),v=f?.[1]??"",x=f?.[2]??null;d.push({kind:"import",heading:o,status:m,md5:ee(s,r+1),importPath:v,helperResultRelPath:x})}else d.push({kind:"objective",heading:o,status:m,md5:ee(s,r+1)})}return{overallStatus:l,steps:d}}import{copyFileSync as se,existsSync as C,mkdirSync as ve,writeFileSync as ne,promises as Ue}from"fs";import{join as M,dirname as re,basename as Pe}from"path";async function ie(e){for(let t=0;t<e.totalRunDirs;t++){let s=e.runIndex+t,l=M(e.sessionDir,"runs",String(s)),d=M(e.stagingStepDir,"flows",String(t));ve(d,{recursive:!0});let r=M(d,"actions.ndjson");if(e.packTestDir){let n=M(e.packTestDir,"logs",`${s}-actions.ndjson`);if(C(n)){se(n,r);continue}let c=re(re(e.packTestDir)),m=Pe(e.packTestDir),R=C(c)?await U(c,`tests/${m}/logs/${s}-actions.ndjson`).catch(()=>null):null;ne(r,R??"");continue}let u=[M(l,"run-test","actions.ndjson"),M(l,"actions.ndjson")],o=!1;for(let n of u)if(C(n)){se(n,r),o=!0;break}o||ne(r,"")}}import{existsSync as A,readdirSync as we}from"fs";import{dirname as $e,join as j,basename as H}from"path";function et(e,t){let s=[];return e.steps.forEach((l,d)=>{let r=t[d];!l.replayOnly||!r||r.kind!=="author"||s.push({flatIndex:l.flatIndex,file:l.owningFile,heading:l.trace[l.trace.length-1].heading,kind:l.replayOnly,reason:r.reason})}),s}function tt(e){let t=[],s=new Set,l=new Map;function d(n){if(l.has(n))return l.get(n);let c=w(n),m=A(c)?D(c):null;return l.set(n,m),m}let r=new Map;function u(n){if(r.has(n))return r.get(n);let c=j(n,"Result.md"),m=A(c)?D(c):null;return r.set(n,m),m}function o(n){for(let c=1;c<n.trace.length;c++){let m=n.trace[c-1],R=d(m.file);if(!R)continue;let f=R.steps[m.stepIndex-1];if(f){if(f.kind!=="import")return{kind:"author",reason:"structure-mismatch"};if(H(f.importPath)!==H(n.trace[c].file))return{kind:"author",reason:"structure-mismatch"};if(f.md5!=null&&f.md5!==m.rowMd5)return{kind:"author",reason:"structure-mismatch"}}}return null}for(let n of e.steps){let c=n.trace[n.trace.length-1].stepIndex,m=n.replayOnly,R=s.has(n.owningFile);for(let g=0;g<n.trace.length-1&&!R;g++)s.has(n.trace[g].file)&&(R=!0);if(R&&!m){t.push({kind:"author",reason:d(n.owningFile)===null?"no-result-md":"downstream-of-divergence"});continue}let f=o(n);if(f){for(let g=0;g<n.trace.length;g++)s.add(n.trace[g].file);if(!m){t.push(f);continue}}let v=d(n.owningFile),x;if(v===null&&n.trace.length>1){let g=W(n.trace);x=oe(n,u(g),c,g)}else x=oe(n,v,c);if(m&&x.kind==="replay"&&(x={...x,replayOnly:m}),t.push(x),x.kind==="author"){s.add(n.owningFile);for(let g=0;g<n.trace.length-1;g++)s.add(n.trace[g].file)}}return t}function oe(e,t,s,l=null){if(!t)return{kind:"author",reason:"no-result-md"};let d=t.steps[s-1];if(!d)return{kind:"author",reason:"no-result-md"};if(d.kind!=="objective")return{kind:"author",reason:"structure-mismatch"};if(d.status!=="passed")return{kind:"author",reason:"recorded-failed"};let r=T(e);if(r!==d.md5)return{kind:"author",reason:"md5-mismatch"};let u=l===null?X(e.owningFile,s,r.slice(0,8)):j(l,".internal","steps",`${s}-${r.slice(0,8)}`),o=De(u);return o===0?{kind:"author",reason:"missing-recording"}:{kind:"replay",recordingDir:u,flowCount:o}}function De(e){let t=j(e,"flows");if(!A(t))return 0;let s;try{s=we(t,{withFileTypes:!0}).filter(d=>d.isDirectory()&&/^\d+$/.test(d.name)).map(d=>parseInt(d.name,10))}catch{return 0}if(s.length===0)return 0;let l=Math.max(...s);for(let d=0;d<=l;d++)if(!A(j(t,String(d),"actions.ndjson")))return 0;return l+1}function st(e){return e.some(t=>t.kind==="author")}function nt(e){for(let t=0;t<e.length;t++)if(e[t].kind==="author")return t;return e.length}function W(e){let t=r=>{let u=H(r);return u.endsWith("_test.md")?u.slice(0,-8):u.endsWith(".md")?u.slice(0,-3):u},s=t(e[0].file),l=t(e[e.length-1].file),d=e.slice(0,-1).map(r=>String(r.stepIndex));return j($e(e[e.length-1].file),`helper-output-${l}-${s}-${d.join("-")}`)}function rt(e){return Array.from({length:e.flowCount},(t,s)=>j(e.recordingDir,"flows",String(s),"actions.ndjson"))}import{existsSync as ae,mkdirSync as Me,rmSync as je,cpSync as Fe}from"fs";function de(e,t){ae(e)&&(ae(t)&&je(t,{recursive:!0,force:!0}),Me(t,{recursive:!0}),Fe(e,t,{recursive:!0}))}async function St(e){let t=new Map;for(let o of e.stepRunRecords)t.set(o.testmdStepIndex,o);let s=e.authoredFlatIdx??new Set,l=[],d=[],r=new Map,u=o=>{if(r.has(o))return r.get(o);let n=y(o,"Result.md"),c=$(n)?D(n):null;return r.set(o,c),c};for(let o of e.resolvedTest.unitFiles){let n=o.file===e.resolvedTest.rootPath,c=G(o.file,Oe(o.file,"utf8")),m=w(o.file),R=$(m)?D(m):null,f=[],v=[],x=[],g=[];if(!n)for(let a of e.resolvedTest.steps){if(a.owningFile!==o.file||a.trace.length<2)continue;let i=W(a.trace);g.includes(i)||g.push(i)}let F=a=>{if(R!==null)return null;for(let i of g){let P=u(i)?.steps[a-1];if(P)return{row:P,dir:i}}return null},V=[],_=!1,B=!1,E=!1,L=!1;for(let a of c.steps){let i=a.index,p=R?.steps[i-1];if(a.body.kind==="objective"){let h=e.resolvedTest.steps.filter(S=>S.owningFile===o.file&&S.trace[S.trace.length-1].stepIndex===i&&t.has(S.flatIndex)),I=h.length>0?h[h.length-1]:null;if(I){_=!0,s.has(I.flatIndex)&&(B=!0);let S=T(I),k;n?k=e.outcomes.find(he=>he.rootStepIndex===i)??{rootStepIndex:i,status:"skipped"}:k={rootStepIndex:i,status:fe(I,e.outcomes)},k.status==="failed"&&(E=!0),k.stepMd5==null&&(k.stepMd5=S),f.push(k),v.push({stepIndex:i,md5:S,rec:t.get(I.flatIndex)}),(!p||p.kind!=="objective"||p.status!==k.status||k.status==="passed"&&p.md5!==S)&&(L=!0)}else if(p&&p.kind==="objective")f.push({rootStepIndex:i,status:p.status,...p.md5?{stepMd5:p.md5}:{}}),x.push(i);else if(!n&&F(i)?.row.kind==="objective"){let S=F(i),k=S.row;f.push({rootStepIndex:i,status:k.status,...k.md5?{stepMd5:k.md5}:{}}),V.push({psIdx:i,dir:S.dir})}else n?f.push(e.outcomes.find(S=>S.rootStepIndex===i)??{rootStepIndex:i,status:"skipped"}):f.push({rootStepIndex:i,status:"skipped"});continue}let P=Ee(a.body.path)?a.body.path:Ke(_e(o.file),a.body.path),O=Y({path:a.body.path,bindings:a.body.bindings,optional:a.optional??!1}),K=Le(J(o.file),w(P)),N=e.resolvedTest.steps.filter(h=>h.trace.some((I,S)=>S<h.trace.length-1&&I.file===o.file&&I.stepIndex===i)&&t.has(h.flatIndex));if(N.length>0){_=!0;let h;if(n)h=e.outcomes.find(I=>I.rootStepIndex===i)??{rootStepIndex:i,status:"passed",refKind:"import",refLabel:a.body.path};else{let I=N.some(S=>fe(S,e.outcomes)==="failed");h={rootStepIndex:i,status:I?"failed":"passed",refKind:"import",refLabel:a.body.path,inlinedCount:N.length}}h.status==="failed"&&(E=!0),h.stepMd5==null&&(h.stepMd5=O),h.helperResultRelPath==null&&(h.helperResultRelPath=K),f.push(h),(!p||p.kind!=="import"||p.status!==h.status||p.md5!==O)&&(L=!0)}else if(p&&p.kind==="import")f.push({rootStepIndex:i,status:p.status,refKind:"import",refLabel:p.importPath,...p.md5?{stepMd5:p.md5}:{},...p.helperResultRelPath?{helperResultRelPath:p.helperResultRelPath}:{}});else if(!n&&F(i)?.row.kind==="import"){let h=F(i).row;f.push({rootStepIndex:i,status:h.status,refKind:"import",refLabel:a.body.path})}else n?f.push(e.outcomes.find(h=>h.rootStepIndex===i)??{rootStepIndex:i,status:"skipped",refKind:"import",refLabel:a.body.path}):f.push({rootStepIndex:i,status:"skipped",refKind:"import",refLabel:a.body.path})}if(!(n||_&&(B||E||R===null||L)))continue;l.push(o.file);let b=z(o.file);ue(y(b,".internal"),{recursive:!0});for(let a of v){let i=y(b,".internal","steps",`${a.stepIndex}-${a.md5.slice(0,8)}`);ue(i,{recursive:!0}),await ie({sessionDir:e.sessionDir,runIndex:a.rec.runIndex,totalRunDirs:a.rec.totalRunDirs,stagingStepDir:i,packTestDir:e.packTestDir})}if(x.length>0){let a=Q(o.file);if($(a))for(let i of ce(a)){let p=parseInt(i.split("-")[0]??"",10);!Number.isNaN(p)&&x.includes(p)&&pe(y(a,i),y(b,".internal","steps",i),{recursive:!0})}}for(let a of V){let i=y(a.dir,".internal","steps");if($(i))for(let p of ce(i))parseInt(p.split("-")[0]??"",10)===a.psIdx&&pe(y(i,p),y(b,".internal","steps",p),{recursive:!0})}let me=f.some(a=>a.status==="failed");if(te({sourcePath:o.file,title:c.title,rootSteps:c.steps,outcomes:f,overallStatus:n?e.overallStatus:me?"failed":"passed",startedISO:e.startedISO,durationS:n?e.durationS:0,sessionId:e.sessionId,outPath:y(b,"Result.md")}),n){let a={};e.commitId&&(a.commit_id=e.commitId),e.tmsIds.testId&&(a.test_id=e.tmsIds.testId),e.tmsIds.testcaseId&&(a.testcase_id=e.tmsIds.testcaseId),e.tmsIds.projectId&&(a.project_id=e.tmsIds.projectId),e.tmsIds.folderId&&(a.folder_id=e.tmsIds.folderId),e.tmsIds.orgId&&(a.org_id=e.tmsIds.orgId),e.tmsIds.sessionName&&(a.session_name=e.tmsIds.sessionName),Ae(y(b,".internal","meta.json"),JSON.stringify(a,null,2)+`
5
- `,"utf8");let i=y(e.sessionDir,"execution.json");if($(i))try{le(i,y(b,".internal","execution.json"))}catch{}if(e.codeExportDir){let p=e.codeExportLanguage??"python",P=e.codeExportFramework??"playwright",O=y(b,`${P}-${p}-code`);try{de(e.codeExportDir,O)}catch(K){process.stderr.write(`warn: codegen copy failed: ${K.message}
6
- `)}}}else if(o.kind==="test"||o.kind==="module"){let a=q(o.file);if($(a))try{le(a,y(b,".internal","meta.json"))}catch{}}!n&&g.length>0&&f.every(i=>i.status!=="skipped")&&d.push({unitFile:o.file,dirs:g.filter(i=>$(i))})}return{changedUnitFiles:l,legacySweep:d}}function yt(e){for(let t of e)try{Te(t,{recursive:!0,force:!0})}catch{}}function fe(e,t){let s=e.trace[0].stepIndex,l=t.find(o=>o.rootStepIndex===s);if(!l)return"skipped";if(l.status==="passed")return"passed";if(l.status==="skipped")return"skipped";let d=e.trace.slice(1).map(o=>o.stepIndex),r=l.failedSubStepIndex??[],u=Math.min(d.length,r.length);for(let o=0;o<u;o++)if(d[o]!==r[o])return d[o]<r[o]?"passed":"skipped";return d.length===r.length?"failed":d.length<r.length?"passed":"skipped"}export{te as a,et as b,tt as c,st as d,nt as e,rt as f,de as g,St as h,yt as i};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as O,b as B,c as P}from"./chunk-YMLC55J4.js";import{d as w,e as h}from"./chunk-AKX4VRRR.js";var z={window:10,latest_only:!1,stale_at_run_weight:.5,counted_verdicts:["passed","failed"],accepted_oracle_modes:["authored","inferred","runtime-derived"],verified_threshold:.5,min_passes:1,risk_weights:{high:3}},Y={window:10,latest_only:!0,stale_at_run_weight:0,counted_verdicts:["passed","failed"],accepted_oracle_modes:["authored","inferred"],verified_threshold:1,min_passes:1,risk_weights:{high:3}},K={lenient:z,strict:Y};function Q(e,t){let s=e.slice(-t.window),i=new Map;for(let c of s)i.set(c.execution_id,c);let d=[...i.values()].sort((c,u)=>c.ts<u.ts?-1:c.ts>u.ts?1:c.execution_id<u.execution_id?-1:1).filter(c=>t.counted_verdicts.includes(c.verdict)&&t.accepted_oracle_modes.includes(c.oracle_mode));return t.latest_only&&d.length>1?[d[d.length-1]]:d}function Z(e,t){let s=Q(e,t),i=0,d=0,c=0;for(let l of s){let b=l.stale_at_run?t.stale_at_run_weight:1;i+=b,l.verdict==="passed"&&(d+=b,c++)}let u=i>0?Math.round(d/i*100)/100:0;return{score:u,verified:u>=t.verified_threshold&&c>=t.min_passes,passes:c,counted:s.length}}function U(e,t){let s=0,i=0;for(let d of e){let c=t[d.risk]??1;s+=c,d.verified&&(i+=c)}return s>0?Math.round(i/s*100):0}function ee(e,t){let s={},i={},d=[],c=0;for(let u of e.usecases){let l=[];for(let o of u.acceptance_criteria){let _=Z(o.executions??[],t);s[o.id]=_;let m={risk:o.risk,verified:_.verified};l.push(m),d.push(m)}let b=l.filter(o=>o.verified).length,n=l.length>0&&b===l.length?"covered":b>0?"partial":"uncovered";n==="covered"&&c++,i[u.id]={status:n,pct:U(l,t.risk_weights)}}return{config:t,acs:s,usecases:i,summary:{coverage_pct:U(d,t.risk_weights),acs_verified:`${d.filter(u=>u.verified).length}/${d.length}`,usecases_covered:`${c}/${e.usecases.length}`,uncovered:Object.values(i).filter(u=>u.status==="uncovered").length}}}function pe(e,t=K){return{rollup_version:1,stale_sources:new Set(e.usecases.flatMap(s=>s.stale_sources??[])).size,high_risk_gaps:(e.gaps??[]).filter(s=>s.risk==="high").length,aspects:Object.fromEntries(Object.entries(t).map(([s,i])=>[s,ee(e,i)]))}}var W={high:3};function fe(e){let t=e.byLabel(w.USECASE).filter(({cid:n})=>O(e,n)),s=new Map(t.map(({cid:n})=>[n,[]]));for(let{cid:n,content:o}of e.byLabel(w.AC)){if(!O(e,n))continue;let _=P(e,n),m=_?s.get(_):void 0;m&&m.push({risk:String(o.risk??""),designed:B(e,n),stale:e.stale(n)!=="fresh"})}let i={},d=[],c=0,u=0,l=0,b=0;for(let{cid:n}of t){let o=s.get(n),_=o.map(v=>({risk:v.risk,verified:v.designed}));d.push(..._),u+=o.length;let m=o.filter(v=>v.designed).length;c+=m;let x=o.filter(v=>v.stale).length,A=e.edgesInto(n).some(v=>v.type===h.BELONGS_TO&&O(e,v.src));A||b++;let k=o.length===0||m===0?"undesigned":m===o.length&&x===0&&A?"complete":"partial";k==="complete"&&l++,i[e.displayNameOf(n)??n]={pct:U(_,W),status:k,staleAcs:x}}return{pct:U(d,W),acs_designed:`${c}/${u}`,usecases_complete:`${l}/${t.length}`,ucs_needing_scenarios:b,perUc:i,config:{criterion:"live_verifies_edge",risk_weights:{high:3},freshness:"not_discounted"}}}var y=(e,t)=>e.nameOf.get(t)??t,R=(e,t)=>!e.superseded.has(t);function te(e,t){return e.byLabel(w.SCENARIO).filter(({cid:s})=>R(e,s)).filter(({cid:s})=>e.edgesFrom(s).some(i=>i.type===h.BELONGS_TO&&e.tipOf(i.dst)===t)).map(({cid:s})=>s)}function se(e,t,s){let i=[];for(let{cid:d}of e.byLabel(w.AC)){if(!R(e,d))continue;let c=e.edgesFrom(d).find(l=>l.type===h.SCOPED_TO);if(!c)continue;let u=e.tipOf(c.dst);u===t?i.push({cid:d,scope:{type:"usecase",ref:y(e,t)}}):s.has(u)&&i.push({cid:d,scope:{type:"scenario",ref:y(e,u)}})}return i}function ne(e){let t=e.filter(s=>s!==void 0).map(s=>s.execution);return t.includes("failed")?"failed":t.includes("blocked")?"blocked":t.includes("passed")?"passed":"not-run"}var oe={passed:"passed",failed:"failed",broken:"blocked",skipped:"not-run"};function re(e,t){let s=t.flatMap(i=>i?.acs??[]).filter(i=>i.ref===e).map(i=>oe[i.verdict]??"not-run");return s.length===0?ne(t):s.includes("failed")?"failed":s.includes("blocked")?"blocked":s.includes("passed")?"passed":"not-run"}function Se(e){return ie(e,new Map)}function ie(e,t,s){let i=s?.scope==="run",d=[],c=new Set,u=new Map;for(let[n,o]of e.nameOf)u.set(e.tipOf(n)??n,o);let l=n=>u.get(n)??y(e,n);for(let{cid:n,content:o}of e.byLabel(w.USECASE)){if(!R(e,n)||e.trust.get(n)==="archived")continue;let _=e.tipOf(n),m=e.derivesInto(_).filter(r=>!e.superseded.has(r.ecid)),x=[...new Set(m.map(r=>String(r.props?.source_id??"")).filter(Boolean))].sort(),A=x.map(r=>{let f=e.heads.get(r);if(typeof f!="string")return{id:r};let p=e.getNode(f)?.content.blob;return{id:r,media_type:e.mediaOf(f).media_type,...typeof p=="string"?{cid:p}:{}}}),k=m[0],v=new Map;for(let r of m)r.props?.source_id&&r.props?.source_cid&&v.set(String(r.props.source_id),String(r.props.source_cid));let T=x.filter(r=>{let f=e.heads.get(r),p=v.get(r);return f!=null&&p!==void 0&&f!==p}).sort(),L=e.edgesFrom(n).filter(r=>r.type===h.DEPENDS_ON&&!e.superseded.has(r.ecid)).map(r=>de(e,r.dst)).filter(r=>r!==null).sort(),D=te(e,_),q=new Set(D),H=D.map(r=>{let f=e.getNode(r)?.content??{},p=e.edgesFrom(r).filter(S=>S.type===h.EXERCISES&&!e.superseded.has(S.ecid)&&R(e,e.tipOf(S.dst))).map(S=>y(e,e.tipOf(S.dst))).sort();return{id:y(e,r),case_type:String(f.case_type??""),intent:String(f.intent??""),exercises:p}}).sort((r,f)=>r.id<f.id?-1:1),$=!1,E=new Set([_]);for(let r of D)E.add(r);let J=se(e,_,q).map(({cid:r,scope:f})=>{let p=e.getNode(r)?.content??{},S=[...new Set(e.edgesInto(r).filter(a=>a.type===h.VERIFIES&&!e.superseded.has(a.ecid)).map(a=>e.tipOf(a.src)).filter(a=>!!a&&R(e,a)))].sort((a,g)=>l(a)<l(g)?-1:1),G=S.length>0,N=S.map(a=>t.get(`id:${l(a)}`)??t.get(`def:${String(e.getNode(a)?.content.definitionId??"")}`)),j=N.some(a=>a!==void 0);j&&($=!0),E.add(r);for(let a of S)E.add(a);let X=G&&!j?"unknown":e.stale(r)==="fresh"?"fresh":"stale",C=p.expected_answer??{},I=y(e,r),F=S.flatMap(a=>(e.execHistory?.(l(a))??[]).map(g=>({execution_id:String(g.execution_id),ts:String(g.started_at),verdict:String(g.per_ac?.find(M=>M.ac_ref===I)?.verdict??g.verdict),stale_at_run:!!g.stale_at_run,oracle_mode:String(g.oracle_mode),...g.via_parent?{via_parent:String(g.via_parent)}:{}}))).sort((a,g)=>a.ts<g.ts?-1:1).slice(-10);return{id:I,text:String(p.text??""),risk:String(p.risk??""),scope:f,covered_by:S.map(a=>l(a)),...G?{link_type:"verifies"}:{},execution:re(I,N),fresh:X,derived:!!p.derived,...p.kind||p.expected_answer?{expected_answer:{...p.kind?{kind:String(p.kind)}:{},statement:String(p.text??""),...C.operator!==void 0?{operator:C.operator}:{},...C.operand!==void 0?{operand:C.operand}:{}}}:{},...G?{satisfied_by:S.map((a,g)=>{let M=e.getNode(a)?.content.check??{},V=N[g]?.steps?.checkStepId??M.verified_against;return{test:l(a),...V?{step:V}:{}}})}:{},...F.length?{executions:F}:{}}}).sort((r,f)=>r.id<f.id?-1:1);if(!(i&&!$)){for(let r of E)c.add(r);d.push({id:y(e,n),title:String(o.title??""),...o.description||o.summary?{description:String(o.description??o.summary)}:{},...Array.isArray(o.actors)&&o.actors.length?{actors:o.actors.map(String)}:{},...o.value?{value:String(o.value)}:{},risk:String(o.risk??""),status:e.trust.get(n)==="trusted"?"approved":"draft",sources:A,...T.length?{stale_sources:T}:{},...L.length?{depends_on:L}:{},...k?{provenance:{derived_from:`${String(k.props?.source_id??"")}#${String(k.props?.anchor??"")}`}}:{},scenarios:H,acceptance_criteria:J})}}d.sort((n,o)=>n.id<o.id?-1:1);let b=e.byLabel(w.GAP).filter(({cid:n})=>R(e,n)&&e.trust.get(n)!=="archived").filter(({content:n})=>{if(!i||typeof n.uc=="string"&&c.has(e.tipOf(n.uc)))return!0;let o=typeof n.ref=="string"?e.resolve(n.ref):null;return o!==null&&c.has(e.tipOf(o.cid))}).map(({cid:n,content:o})=>({ref:y(e,n),kind:String(o.kind??""),...o.risk?{risk:String(o.risk)}:{},...o.question?{question:ce(o.question)}:{}})).sort((n,o)=>n.ref<o.ref?-1:1);return{usecases:d,...b.length?{gaps:b}:{},...i?{scope:"run"}:{}}}function ce(e){if(typeof e=="string")return e;let t=e?.header;return typeof t=="string"?t:""}function de(e,t){let s=e.tipOf(t);return e.nodeLabel.get(s)!==w.USECASE||!R(e,s)?null:y(e,s)}export{K as a,Q as b,Z as c,pe as d,fe as e,Se as f,ie as g};
@@ -1,7 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{g as E}from"./chunk-R7QAS6LZ.js";import{i as S}from"./chunk-XS2LZFCH.js";import{a as C,b as k,c as R,d as D}from"./chunk-VDM3TWF6.js";import{j as T,k as $,l as b}from"./chunk-54JZ6VEW.js";import{c as y}from"./chunk-5DT7PIGB.js";import{a as O}from"./chunk-CH273NAE.js";import{C as _}from"./chunk-W3Z7AZNT.js";import{existsSync as H}from"fs";import{basename as q}from"path";import{appendFileSync as L,mkdirSync as U}from"fs";import{homedir as F}from"os";import{dirname as G,join as j}from"path";function P(c,s){let n=/^(DOCX_[A-Z_]+):/.exec(s)?.[1];if(n)try{let u=process.env.KANE_CONTEXT_REFUSAL_LOG??j(F(),".testmuai","kaneai","context-refusals.log");U(G(u),{recursive:!0}),L(u,`${new Date().toISOString()} ${n} ${c}
3
- `)}catch{}}async function w(c,s,n,u=process.cwd(),p){let l=O(u),g=[];if(s.as!==void 0&&c.length>1)return(n.err??n.out)(`error: --as names ONE source identity \u2014 pass a single file (got ${c.length})`,"AS_SINGLE_SOURCE"),{code:2,results:g};for(let o of c){if(R(o)){let a=D(o);if(a===null)return(n.err??n.out)(`error: ${o}: unsupported remote URL \u2014 supported: ${k.map(d=>d.hint).join("; ")}`,"UNSUPPORTED_URL"),{code:1,results:g};let r=await a.ingest(o,s.as,n,l,p);if(r.code!==0)return{code:r.code,results:g};r.result&&g.push({status:r.result.status==="versioned"?"versioned":r.result.status==="unchanged"?"unchanged":"created",source_id:r.result.source_id,source_cid:r.result.source_cid});continue}let f=s.as,v;if(f===void 0&&H(l)){let a=T(o),r=$(a);if(r){let d=_(l);d.heads.get(r)!=null&&d.heads.get(a)==null&&(v=r,n.isTTY&&await n.confirm(`${a} looks like a new version of existing source '${r}' \u2014 ingest as '${r}' (replaces the current version; items built on it go stale)?`)&&(f=r))}}let e;try{e=await b({contextDir:l,filePath:o,asId:f,confirmSameSource:n.isTTY?a=>n.confirm(`identical bytes already ingested as ${a} \u2014 treat as the same source?`):void 0,converters:{pdf:E,docx:S}})}catch(a){let r=a instanceof Error?a.message:String(a);return P(o,r),(n.err??n.out)(`error: ${o}: ${r}`,"INGEST_FAILED"),{code:1,results:g}}n.out(C(n.isTTY,e,q(o)));for(let a of e.warnings??[])n.out(`warning: ${a}`);if(e.composite&&(e.composite.delivered>0||e.composite.omitted>0)){let a=e.composite.pages!==void 0?` ${e.composite.pages} pages,`:"";n.out(`${e.source_id}: ${e.composite.kind},${a} ${e.composite.delivered} images delivered (${e.composite.omitted} omitted)`)}let m;if(!n.isTTY&&e.status==="created"){let a=_(l);for(let[r,d]of a.heads.entries())if(!(r===e.source_id||d==null)&&a.getNode(d)?.content.blob===e.blob){m=r,n.out(`hint: identical bytes already ingested as ${r} \u2014 merged later via review`);break}}g.push({status:e.status,source_id:e.source_id,source_cid:e.cid,...e.warnings?.length?{warnings:e.warnings}:{},...e.composite?{media:{kind:e.composite.kind,...e.composite.pages!==void 0?{pages:e.composite.pages}:{},delivered:e.composite.delivered,omitted:e.composite.omitted}}:{},...m?{duplicate_of:m}:{},...v&&f===void 0?{lineage_candidate:v}:{}})}return{code:0,results:g}}async function se(c,s,n,u=process.cwd(),p){return(await w(c,s,n,u,p)).code}async function ie(c,s){if(s.mode!=null&&!["interactive","agent","ci","override"].includes(s.mode)){let{makeHeadlessIO:t,agentRefusal:i}=await import("./headless-io-66RG5NN5.js");return i(t("ndjson","extract"),`ingest: --mode must be interactive | agent | ci | override, got '${s.mode}'`,"MODE_USAGE")}let n=y();if(s.mode==="interactive"&&!n)return process.stderr.write(`ingest: --mode interactive needs a TTY on stdin and stdout (use --mode agent|ci|override headless)
4
- `),2;let u=s.mode??(n?"interactive":void 0),p=u==="interactive"||u==="agent"||u==="override";if(!p&&(s.plan||s.force||s.trust!==void 0))return process.stderr.write(`ingest: --plan/--force/--trust steer the extraction \u2014 not available when only landing (use --mode agent to extract headless)
5
- `),2;let{createInterface:l}=await import("readline/promises"),g=u==="agent",o=g?(await import("./headless-io-66RG5NN5.js")).makeHeadlessIO("ndjson","extract"):null,f=[],v=()=>{for(let t of f.splice(0))o.event({type:"error",message:t.message,...t.code?{code:t.code}:{}})},e=t=>{for(let i of t)o.event({type:"ingested",source_id:i.source_id,status:i.status,cid:i.source_cid,...i.warnings?.length?{warnings:i.warnings}:{},...i.media?{media:i.media}:{},...i.duplicate_of?{duplicate_of:i.duplicate_of}:{},...i.lineage_candidate?{lineage_candidate:i.lineage_candidate}:{}})},m=o?{out:()=>{},err:(t,i)=>f.push({message:t.replace(/^error: /,""),...i?{code:i}:{}}),isTTY:!1,confirm:async()=>!1}:{out:t=>process.stdout.write(t+`
6
- `),err:t=>process.stderr.write(t+`
7
- `),isTTY:n,confirm:async t=>{let i=l({input:process.stdin,output:process.stdout});try{let h=await i.question(`${t} [Y/n] `);return!/^n(o)?$/i.test(h.trim())}finally{i.close()}}};if(!p){let{withTelemetry:t}=await import("./with-telemetry-5Y2CVPXK.js");return t("ingest",async()=>{let{code:i,results:h}=await w(c,{as:s.as},m,void 0,void 0);if(i!==0)return i;let I=h.filter(Y=>Y.status!=="unchanged").length;return I>0&&(m.err??m.out)(`landed ${I} source(s) \u2014 run kane-cli context extract to extract them`),0},{write:!0})}let a;try{a=o?await(await import("./run-channel-RGH4WIQX.js")).runWithChannel({event:o.event},()=>w(c,{as:s.as},m,void 0,void 0)):await w(c,{as:s.as},m,void 0,void 0)}catch(t){if(o)return v(),o.event({type:"error",message:t instanceof Error?t.message:String(t),code:"INGEST_FAILED"}),o.done(1,"error");throw t}let{code:r,results:d}=a;if(r!==0)return o?(e(d),v(),o.done(r,r===2?"refused":"error")):r;if(d.length===0)return o?o.done(0):0;let{extractCommand:A}=await import("./extract-cmd-IPBCCR3T.js"),N=[...new Set(d.map(t=>t.source_id))],x=await A({...s.mode!==void 0?{mode:s.mode}:{},...s.plan?{plan:!0}:{},...s.force?{force:!0}:{},...s.trust!==void 0?{trust:s.trust}:{},sources:N,landed:d});if(x===2&&!g){let t=d.filter(i=>i.status!=="unchanged").length;t>0&&(m.err??m.out)(`note: the ${t} landed source(s) are safe \u2014 extract later with kane-cli context extract`)}return x}export{w as a,se as b,ie as c};
@@ -1,21 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as kt,g as xt}from"./chunk-QQ5MHSSY.js";import{b as y,c as me,d as ut,f as fe,g as ge}from"./chunk-5GUD3CIH.js";import{b as ve,c as K,d as ye,e as be}from"./chunk-DYXYNH6X.js";import{a as lt,d as pt,h as L,i as mt,j as ft,k as U,l as gt,m as Z,n as _t,o as F,p as ht}from"./chunk-NP3VGFZM.js";import{d as Et}from"./chunk-NVGBE2DR.js";import{a as V,b as z,d as dt}from"./chunk-EHN5HTUD.js";import{a as re}from"./chunk-CH273NAE.js";import{d as _e}from"./chunk-KRL2BDI5.js";import{b as $,c as k}from"./chunk-VZ7KXRXB.js";import{a as le,c as st,d as at,e as ct,f as pe}from"./chunk-P7YZ3PU3.js";import{C as x,e as bt,f as wt}from"./chunk-W3Z7AZNT.js";import{b as G}from"./chunk-6FCPS2VT.js";import{a as yt}from"./chunk-UH2ZTX4E.js";import{b as he,d as ee,g as te,j as H}from"./chunk-XMTSHHYQ.js";import{d as q,f as vt}from"./chunk-AKX4VRRR.js";import{a as it,b as ot}from"./chunk-HPUQJRDX.js";import{a as nt}from"./chunk-NJJQL54J.js";function D(e){if(e===null)return"broken";let t=Math.floor(e/100);return t===1?"passed":t===7?"failed":t===2?"skipped":"broken"}var C={failed:3,broken:2,passed:1,skipped:0};function we(e){let t="skipped";for(let r of e)C[r]>C[t]&&(t=r);return t}import{createHash as fr}from"crypto";import{basename as gr}from"path";function ke(e){let t=e.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40);return t.length>0?t:"session"}function xe(e){return fr("sha256").update(e).digest("hex").slice(0,8)}function Ee(e){let t=gr(e).replace(/_test\.md$/i,"").replace(/\.md$/i,"");return`${ke(t)}-${xe(e)}`}function Ie(e,t){return`${ke(e)}-${xe(t)}`}function Se(e){let t=e?.trim();return t||void 0}function It(e=process.env){let t=Se(e.TEST_INSTANCE_ID),r=Se(e.JOB_ID),n=Se(e.TASK_ID);return{...t?{testInstanceId:t}:{},...r?{jobId:r}:{},...n?{taskId:n}:{}}}function Re(e,t=process.env){let r=It(t),n={...r.testInstanceId?{hyper_test_instance_id:r.testInstanceId}:{},...r.jobId?{hyper_job_id:r.jobId}:{},...r.taskId?{hyper_task_id:r.taskId}:{},...e},i={};for(let[o,s]of Object.entries(n))typeof s=="string"&&s.length>0&&(i[o]=s);return i}function _r(e,t){return{pack_test_dir:e,ordinal_offset:t}}import{promises as I}from"fs";import{join as S}from"path";function Ae(e){let t={evidence:"0.1",run_id:e.execution_id,status:"running",title:e.title,started:e.started,environment:{producer:{name:"kane-cli",version:e.producerVersion},...e.surfaces?{surfaces:e.surfaces}:{},run_kind:e.run_kind,origin:e.origin,pid:e.pid},...e.credits!==void 0?{metrics:{credits:{value:e.credits,type:"count"}}}:{}};return k(t,{lineWidth:-1})}async function Pe(e,t,r,n=process.cwd(),i){let o=i??y(e.execution_id,n),s=S(o,"tests",t);return await I.mkdir(S(o,"coverage"),{recursive:!0}),await I.writeFile(S(o,"coverage",".keep"),""),await I.mkdir(s,{recursive:!0}),await I.writeFile(S(o,"run.yaml"),Ae(e)),r&&await I.writeFile(S(s,r.path),r.content),o}async function hr(e,t=process.cwd()){let r=y(e.execution_id,t);await I.mkdir(S(r,"coverage"),{recursive:!0}),await I.writeFile(S(r,"coverage",".keep"),"");let n=$(Ae(e));return n.environment&&delete n.environment.run_kind,await I.writeFile(S(r,"run.yaml"),k(n,{lineWidth:-1})),r}async function vr(e,t=process.cwd()){return z(y(e,t),new Date().toISOString())}async function $e(e,t=process.cwd()){await I.rm(y(e,t),{recursive:!0,force:!0})}import{promises as Le}from"fs";import{join as Fe}from"path";function ne(e){let t={evidence:"0.1",test:e.testId,status:e.status,...e.durationMs!==void 0?{duration_ms:e.durationMs}:{},...e.attempts&&e.attempts.length?{attempts:e.attempts}:{},...e.flaky!==void 0?{flaky:e.flaky}:{},...e.adaptiveHeal?{adaptive_heal:e.adaptiveHeal}:{},...e.definitionPath?{definition:{path:e.definitionPath}}:{},...e.definitionId?{definition_id:e.definitionId}:{},...e.assuranceId?{assurance_id:e.assuranceId}:{},...Object.keys(e.externalId).length?{external_id:e.externalId}:{},...e.tags&&e.tags.length?{tags:e.tags}:{},...Object.keys(e.environment).length?{environment:e.environment}:{},steps:e.steps};return k(t,{lineWidth:-1})}function Ce(e){return k({logs:e},{lineWidth:-1})}async function De(e,t,r){await Le.writeFile(Fe(e,"tests",t,"result.yaml"),r)}async function je(e,t,r){let n=Fe(e,"tests",t,"logs");await Le.mkdir(n,{recursive:!0}),await Le.writeFile(Fe(n,"meta.yaml"),r)}import{promises as ie}from"fs";import{join as St}from"path";function Rt(e){return St(e,".internal","meta.json")}async function At(e){let t;try{t=await ie.readFile(Rt(e),"utf8")}catch(n){if(n?.code==="ENOENT")return null;throw n}let r=JSON.parse(t);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("meta.json is not a JSON object");return r}async function Oe(e,t){let r;try{r=await At(e)??{}}catch(s){console.warn(`evidence: meta.json at ${e} unreadable \u2014 skipping execution-pointer append to preserve identity`,s);return}let n=Array.isArray(r.executions)?r.executions:[];n.push(t),r.executions=n,await ie.mkdir(St(e,".internal"),{recursive:!0});let i=Rt(e),o=`${i}.tmp-${process.pid}-${Date.now()}`;await ie.writeFile(o,JSON.stringify(r,null,2)+`
3
- `),await ie.rename(o,i)}async function yr(e){try{let t=await At(e);return t&&Array.isArray(t.executions)?t.executions:[]}catch{return[]}}async function br(e,t,r=process.cwd()){let n=await fe(e,r);if(!n){let o=`evidence: no pack found for "${e}"`;return t.json?console.log(JSON.stringify({valid:!1,error:"not_found",target:e})):console.error(o),2}let i=await V(n,t.profile??"L1");return t.json?console.log(JSON.stringify({valid:i.valid,status:i.status,diagnostics:i.diagnostics})):console.log(`evidence: ${i.valid?"valid":"INVALID"} (${t.profile??"L1"}, status ${i.status})`),i.valid?0:1}function Te(e){let t=[];for(let r of e){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)t.push(D(i))}return we(t)}function wr(e){let t=null;for(let r of e){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)i!=null&&(t==null||C[D(i)]>C[D(t)]||C[D(i)]===C[D(t)]&&i>t)&&(t=i)}return t}import{promises as kr}from"fs";import{extname as Pt,basename as xr}from"path";var Er={".ndjson":"ndjson",".log":"log",".json":"json",".har":"har"};async function Me(e){let t;try{t=await kr.readdir(e)}catch{return[]}return t.filter(r=>r!=="meta.yaml"&&!r.startsWith(".")).sort().map(r=>({name:xr(r,Pt(r)),file:r,format:Er[Pt(r)]??"txt"}))}import{mkdirSync as Ir,appendFileSync as Sr}from"fs";import{join as $t}from"path";function Ne(e,t){return $t(e,"tests",t,"logs")}function Be(e,t,r,n={},i){try{i?.(t,r,r,n)}catch{}if(e)try{Ir(e,{recursive:!0});let o=JSON.stringify({ts:new Date().toISOString(),level:t,event:r,...n})+`
4
- `;Sr($t(e,"diagnostics.ndjson"),o)}catch{}}import{promises as R}from"fs";import{dirname as jr,join as j}from"path";import{statSync as Rr}from"fs";import{promises as Ve}from"fs";import{basename as Ar,join as Pr}from"path";var $r=1e6,Lr=2e6;function Fr(){return it.map(e=>ot(e))}function Lt(e=Fr()){return e.map(t=>{let r=0;try{r=Rr(t).size}catch{}return{path:t,offset:r}})}var Cr=/\x1b\[[0-9;]*[A-Za-z]/g;async function Dr(e,t,r){let n;try{n=await Ve.open(e,"r");let i=(await n.stat()).size,o=t<=i?t:0,s=i-o;if(s<=0)return null;let c=s>r?i-r:o,u=Buffer.alloc(Math.min(s,r));return await n.read(u,0,u.length,c),u.toString("utf8")}catch{return null}finally{await n?.close().catch(()=>{})}}async function Ft(e,t){let r=t.caps?.stderr??$r,n=t.caps?.appium??Lr,i=[];t.runnerStderrPath&&i.push({src:t.runnerStderrPath,from:0,cap:r});for(let o of t.appiumMarks??[])i.push({src:o.path,from:o.offset,cap:n});for(let o of i){let s=await Dr(o.src,o.from,o.cap);if(s===null)continue;let c=s.replace(Cr,"");if(c!=="")try{await Ve.mkdir(e,{recursive:!0}),await Ve.writeFile(Pr(e,Ar(o.src)),c)}catch{}}}async function Or(e){try{let t=j(e,"tests"),r=await R.readdir(t).catch(()=>[]);for(let n of r){let i=j(t,n,"steps"),o=await R.readdir(i).catch(()=>[]);for(let s of o){let c=await R.readFile(j(i,s,"failure.yaml"),"utf8").catch(()=>null);if(c!=null)try{let u=$(c);if(u&&typeof u=="object"&&u.triage)return!0}catch{}}}}catch{}return!1}async function Ct(e,t,r,n={}){let i=j(e,"tests",t,"logs");if(r)try{await R.mkdir(i,{recursive:!0}),await R.copyFile(r,j(i,"tui.log"))}catch{}await Ft(i,{runnerStderrPath:r?j(jr(r),"runner-stderr.log"):void 0,appiumMarks:n.appiumMarks});let o=await Me(i);if(!o.length&&n.requireRealLog)throw new Error(`evidence test ${t} has no real log to declare`);o.length&&await je(e,t,Ce(o))}async function ze(e){let t=e.cwd??process.cwd(),r=e.packDir??y(e.executionId,t);if(!e.saved&&!e.packDir)return await $e(e.executionId,t),{sealed:!1};await Ct(r,e.testId,e.tuiLogPath,{requireRealLog:e.requireRealLog,appiumMarks:e.appiumMarks});let n=j(r,"run.yaml"),i=$(await R.readFile(n,"utf8"));i.environment={...i.environment??{},saved:e.saved,run_kind:e.runKind},await R.writeFile(n,k(i,{lineWidth:-1}));let o=await R.open(n,"r+");try{await o.sync()}finally{await o.close()}let s=await Or(r);await z(r,new Date().toISOString());let c;try{let a=await V(r,"L1");c=a.valid;let l=(a.diagnostics??[]).filter(d=>String(d?.code??"").includes("failure.status_disagrees"));if(l.length>0)if(e.expectStatusDisagrees||s){let d=e.expectStatusDisagrees?"expected under --bug-detection continue":"self-explained by triaged failure record(s)";console.warn(`evidence: ${l.length} status_disagrees advisory(ies) \u2014 ${d}`)}else console.warn(`evidence: ${l.length} status_disagrees advisory(ies) \u2014 step verdicts disagree with their failure records`,l);if(!a.valid){console.warn(`evidence: sealed pack ${e.executionId} failed L1 validation`,a.diagnostics);let d=String(a.diagnostics?.[0]?.code??"");Be(Ne(r,e.testId),"warn","EVIDENCE_INVALID",{execution_id:e.executionId,first_code:d,surface:e.surface??"testmd"},e.log)}}catch(a){console.warn(`evidence: validation error for ${e.executionId}`,a)}let u;if(e.saved&&e.packDir)try{u=await ut(r,e.executionId,t)}catch(a){console.warn(`evidence: store install failed for ${e.executionId}`,a)}if(e.outputStemDir)try{await Oe(e.outputStemDir,{execution_id:e.executionId,run_kind:e.runKind,status:e.verdict,valid:c,at:new Date().toISOString()})}catch(a){console.warn(`evidence: execution-pointer append failed for ${e.executionId} (pack is sealed)`,a)}return{sealed:!0,valid:c,storePath:u}}import{release as Mt}from"os";import{execFileSync as Tr}from"child_process";import{promises as Dt}from"fs";import{join as jt}from"path";function Ot(e){return e.replace(/\([^)]*\)/g," ").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"")||void 0}async function Tt(e){try{let t=jt(e,"steps"),r=(await Dt.readdir(t,{withFileTypes:!0})).filter(n=>n.isDirectory()).map(n=>n.name).sort((n,i)=>(parseInt(n,10)||0)-(parseInt(i,10)||0));for(let n of r)try{let i=await Dt.readFile(jt(t,n,"step.json"),"utf8"),s=JSON.parse(i).basis?.window;if(Array.isArray(s)&&s.length===2&&Number.isFinite(Number(s[0]))&&Number.isFinite(Number(s[1]))&&Number(s[0])>0&&Number(s[1])>0)return`${Math.round(Number(s[0]))}x${Math.round(Number(s[1]))}`}catch{}return}catch{return}}var Nt=!1,oe;function Mr(){if(!Nt)if(Nt=!0,process.platform==="darwin")try{oe=Tr("sw_vers",["-productVersion"],{timeout:2e3}).toString().trim()||void 0}catch{oe=Mt()||void 0}else oe=Mt()||void 0;return oe}function Ue(e){let t={os:le(process.platform)},r=Mr();if(r&&(t.os_version=r),e.cdpBrowser){let i=/^([A-Za-z]+)\/(\d+)/.exec(e.cdpBrowser);i&&(t.browser=i[1].replace(/^Headless/,""),t.browser_version=i[2])}e.resolution&&(t.resolution=e.resolution);let n=at(t,e.runnerEnvironment);if(!n.native_platform)return n;if(e.deviceName&&(n.device=e.deviceName),e.deviceModel){let i=Ot(e.deviceModel);i&&(n.device_slug=i)}return e.pixelResolution&&(n.viewport=n.resolution??Nr(e.pixelResolution,n.pixel_ratio)??e.pixelResolution,n.resolution=e.pixelResolution),n}function Nr(e,t){if(!t||!Number.isFinite(t)||t<=0)return;let r=/^(\d+)x(\d+)$/.exec(e);if(r)return`${Math.round(Number(r[1])/t)}x${Math.round(Number(r[2])/t)}`}async function Bt(e){if(e)try{let t=await fetch(`${e}/json/version`,{signal:AbortSignal.timeout(2e3)});if(!t.ok)return;let r=await t.json();return typeof r.Browser=="string"?r.Browser:void 0}catch{return}}function Br(e){let t;return()=>(t||(t=Bt(e)),t)}import{promises as b,existsSync as A,readFileSync as qr}from"fs";import{basename as Hr,join as _}from"path";import{readFileSync as Vr}from"fs";import{dirname as zr,resolve as Ur}from"path";function Vt(e,t){let r=Ur(e),n=Vr(r,"utf8");return L(t?U(n,Z(zr(r),t)):n)}async function zt(e){for(let t of await b.readdir(e,{withFileTypes:!0})){let r=_(e,t.name);if(t.isDirectory()){await zt(r);continue}try{await b.unlink(r)}catch{await b.truncate(r,0)}}await b.rmdir(e).catch(()=>{})}function Gr(e){let t=e.authorBoundary<0||e.authorBoundary>e.totalSteps?e.totalSteps:e.authorBoundary;return{shrink_count:e.shrinkCount,complete_reauthor:t===0&&e.totalSteps>0,author_boundary:t,total_steps:e.totalSteps,reauthored_steps:e.totalSteps-t,credits_consumed:Math.round(e.creditsConsumed*100)/100}}var W=class e{constructor(t){this.opts=t}executionId;testId;definitionPath=null;definitionContent=null;accumulatedSteps=[];maxOrdinal=0;_attempts=[];_packDirOverride;_attached=!1;appiumMarks=Lt();get attached(){return this._attached}static async attach(t){let r=Hr(t.packDir).replace(/\.evidence$/,""),n=new e({origin:"testrun",runKind:"author",pid:process.pid,title:t.testId,started:new Date().toISOString(),producerVersion:nt,cwd:t.cwd});n.executionId=r,n.testId=t.testId,n._packDirOverride=t.packDir,n._attached=!0;let i=_(t.packDir,"tests",t.testId);return await b.mkdir(i,{recursive:!0}),t.definition&&(await b.writeFile(_(i,t.definition.path),t.definition.content),n.definitionPath=t.definition.path,n.definitionContent=t.definition.content),n}async start(){if(this._attached)throw new Error("attach-mode session is already started");this.executionId=me(),this.testId=this.opts.testmdRelPath?Ee(this.opts.testmdRelPath):Ie(this.opts.objectiveOrName??"session",this.opts.sessionId??this.executionId);let t=this.opts.definition??null;return await Pe({execution_id:this.executionId,title:this.opts.title,started:this.opts.started,producerVersion:this.opts.producerVersion,surfaces:this.opts.surfaces,run_kind:this.opts.runKind,origin:this.opts.origin,pid:this.opts.pid,...this.opts.credits!==void 0?{credits:this.opts.credits}:{}},this.testId,t,this.opts.cwd,this.opts.packRootDir?this.pack:void 0),t&&(this.definitionPath=t.path,this.definitionContent=t.content),{executionId:this.executionId,testId:this.testId,packTestDir:this.packTestDir}}get pack(){return this._packDirOverride?this._packDirOverride:this.opts.packRootDir?_(this.opts.packRootDir,`${this.executionId}.evidence`):y(this.executionId,this.opts.cwd)}get packTestDir(){return _(this.pack,"tests",this.testId)}async writeDefinition(t,r="test.md"){await b.writeFile(_(this.packTestDir,r),t),this.definitionPath=r,this.definitionContent=t}computeAssuranceId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let t=_(this.opts.cwd,this.opts.testmdRelPath);if(A(t))return F(qr(t,"utf8"))?.id}}catch{}}computeDefinitionId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let t=_(this.opts.cwd,this.opts.testmdRelPath),r=_(this.opts.cwd,".context"),n=A(r)?x(r):void 0;if(A(t))return Vt(t,n)}if(this.definitionContent!=null)return L(this.definitionContent)}catch{}}noteSpawn(t){this.accumulatedSteps.push(...t.steps),this.maxOrdinal=Math.max(this.maxOrdinal,t.maxOrdinal)}nextOrdinalOffset(){return this.maxOrdinal}get steps(){return this.accumulatedSteps}get attempts(){return this._attempts}async archiveAttempt(t,r,n={}){let i=this._attempts.length+1,o=_(this.packTestDir,String(i)),s=n.log,c=(a,p)=>s?.("warn","ARCHIVE_ATTEMPT_FAILED",`Attempt ${i}: ${a} could not be archived into ${i}/; the next attempt will mingle with it`,{attempt:i,dir:a,error:String(p)}),u;try{await b.mkdir(o,{recursive:!0})}catch(a){c(`${i}/`,a)}for(let a of["steps","logs","v16-trajectory"]){let p=_(this.packTestDir,a);if(!A(p))continue;let l=_(o,a);try{await b.rename(p,l);continue}catch(d){s?.("warn","ARCHIVE_ATTEMPT_RENAME_FAILED",`Attempt ${i}: rename of ${a}/ refused; copying it into ${i}/ and emptying the originals in place`,{attempt:i,dir:a,error:String(d),fallback:"copy+truncate"})}try{await b.cp(p,l,{recursive:!0}),await zt(p)}catch(d){c(a,d)}}try{this.definitionPath&&A(_(this.packTestDir,this.definitionPath))&&await b.copyFile(_(this.packTestDir,this.definitionPath),_(o,this.definitionPath));let a=_(o,"steps");if(A(a)){for(let p of await b.readdir(a))if(A(_(a,p,"failure.yaml"))){u=`${i}/steps/${p}/failure.yaml`;break}}}catch(a){c("definition + failure pointer",a)}return this._attempts.push({n:i,status:t,steps:this.accumulatedSteps,...r!==void 0?{failedAt:r}:{},...u?{failure:u}:{}}),this.accumulatedSteps=[],this.maxOrdinal=0,i}async writeResult(t){let r=Te(t.spawns),n=this._attempts.length?[...this._attempts.map(m=>({status:m.status})),{status:r,...t.durationMs!==void 0?{duration_ms:t.durationMs}:{}}]:void 0,i=n?new Set(n.map(m=>m.status)).size>1:void 0,o=this._attempts.length>0,s=t.heal,c=o||s?.forced?{triggered:o,...o?{outcome:r==="passed"?"healed":"exhausted"}:{},...s?Gr(s):{},...o?{attempts:this._attempts.map(m=>({n:m.n,status:m.status,failed_at:m.failedAt??-1,...m.failure?{failure:m.failure}:{}}))}:{}}:void 0,u=this.pack,a=Re(t.externalIdInput),p=pe(t.runnerEnv,t.intentEnv),l=this.computeDefinitionId(),d=this.computeAssuranceId();await De(u,this.testId,ne({testId:this.testId,status:r,durationMs:t.durationMs,definitionPath:this.definitionPath,definitionId:l,assuranceId:d,externalId:a,environment:p,steps:t.steps,tags:t.tags,attempts:n,flaky:i,adaptiveHeal:c}));for(let m of this._attempts){let g=_(this.packTestDir,String(m.n));A(g)&&await b.writeFile(_(g,"result.yaml"),ne({testId:this.testId,status:m.status,definitionPath:this.definitionPath,definitionId:l,assuranceId:d,externalId:a,environment:p,steps:m.steps,tags:t.tags}))}let f=t.externalIdInput;return t.log&&(f.commit_id||f.test_id||f.testcase_id)&&t.log("info","EVIDENCE_EXTERNAL_ID","Evidence external-id mapping",{execution_id:this.executionId,commit_id:f.commit_id??null,test_id:f.test_id??null,testcase_id:f.testcase_id??null,project_id:f.project_id??null,session_id:f.session_id??null,session_name:f.session_name??null,hyper_test_instance_id:a.hyper_test_instance_id??null,hyper_job_id:a.hyper_job_id??null,hyper_task_id:a.hyper_task_id??null}),r}get id(){return this.executionId}get test(){return this.testId}};async function Kr(e,t,r=ge){try{let n=await r(e);if(n.aborted.length>0||n.removed.length>0)try{t?.("info","EVIDENCE_RECOVERY","Startup evidence recovery swept incomplete packs",{aborted:n.aborted,removed:n.removed,origin:"startup"})}catch{}return n}catch(n){return console.warn("evidence: startup recovery failed",n),{aborted:[],removed:[]}}}import{promises as _n}from"fs";import{existsSync as Ke,mkdirSync as dn,readdirSync as un,readFileSync as ln,rmSync as pn,statSync as mn,writeFileSync as fn}from"fs";import{join as M}from"path";import{mkdirSync as Wr,renameSync as Yr,rmSync as Jr,writeFileSync as Xr}from"fs";import{join as Ut}from"path";var Qr=5e6;function qt(e,t,r){let n=Ut(e,"coverage","sources"),i=new Map,o=!1;try{for(let s of r.usecases)for(let c of s.sources){if(i.has(c.id)){c.file=i.get(c.id);continue}if(!c.cid)continue;let u=Et(t,c.cid);if(u===null||u.byteLength>Qr)continue;o||(Wr(n,{recursive:!0}),o=!0);let a=Ut(n,c.id),p=`${a}.tmp-${process.pid}`;Xr(p,u),Yr(p,a);let l=`coverage/sources/${c.id}`;i.set(c.id,l),c.file=l}}catch{for(let s of r.usecases)for(let c of s.sources)delete c.file;if(o)try{Jr(n,{recursive:!0,force:!0})}catch{}}}import{appendFileSync as Zt,existsSync as O,readFileSync as P,renameSync as er,writeFileSync as tr}from"fs";import{dirname as He,isAbsolute as ae,join as T,resolve as ce}from"path";var Zr=new Set(["inline","testmd","testrun"]),en=new Set(["inferred","authored","runtime-derived"]),se=new Set(["passed","failed","broken","skipped"]);function Ht(e,t,r){if(r.facts.length===0)return{record:null,errors:[{code:"EMPTY_EXECUTIONS",detail:"a run with no designed units attaches no facts \u2014 skip the call"}]};let n=t;for(let i=0;;i++){let o=te(e);if(n.latestHash!==o){if(i>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(n.latestHash)} but chain head is ${String(o)} \u2014 retry budget exhausted`}]};n=x(e);continue}let s=tn(e,n,r);if(s!=="cas")return s;if(i>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:"concurrent appends kept moving the head \u2014 retry budget exhausted"}]};n=x(e)}}function Gt(e,t){return Zr.has(e.mode)?se.has(e.verdict)?en.has(e.oracle_mode)?typeof e.drift_flag!="boolean"||typeof e.stale_at_run!="boolean"?[{code:"MISSING_FIELD",detail:`${t}: drift_flag and stale_at_run are required booleans`}]:!e.execution_id||!e.started_at||!e.definition_id_at_run?[{code:"MISSING_FIELD",detail:`${t}: execution_id, started_at and definition_id_at_run are required`}]:[]:[{code:"BAD_ORACLE_MODE",detail:`${t}: oracle_mode '${e.oracle_mode}' not in inferred|authored|runtime-derived`}]:[{code:"BAD_VERDICT",detail:`${t}: verdict '${e.verdict}' not in ${[...se].join("|")}`}]:[{code:"BAD_MODE",detail:`${t}: mode '${e.mode}' not in inline|testmd|testrun`}]}function Kt(e,t,r,n){return{about:t,definition_id_at_run:e.definition_id_at_run,verdict:e.verdict,...r&&r.length?{per_ac:r}:{},drift_flag:e.drift_flag,oracle_mode:e.oracle_mode,stale_at_run:e.stale_at_run,...n.length?{unresolved_acs:n}:{},execution_id:e.execution_id,...e.evidence_id?{evidence_id:e.evidence_id}:{},...e.duration_ms!==void 0?{duration_ms:e.duration_ms}:{},started_at:e.started_at,mode:e.mode,local:e.local,...e.via_parent?{via_parent:e.via_parent}:{}}}function Wt(e,t){if(!Array.isArray(t.facts)||t.facts.length===0)return{record:null,errors:[{code:"EMPTY_EXECUTIONS",detail:"parked line carries no facts"}]};for(let r=0;;r++){let n=x(e),i=t.facts.filter(a=>n.appliedEvents.has(a.event_id)).map(a=>a.event_id),o=t.facts.filter(a=>!n.appliedEvents.has(a.event_id));if(o.length===0)return{record:null,errors:null,applied:[],skipped:i,rejected:[]};let s=[],c=[],u=[];for(let a of o){let p=`executions[${a.ref}]`,l=[];if(!a.about_cid||!n.hasNode(a.about_cid))l.push({code:"UNKNOWN_REF",detail:`${p}: about_cid '${String(a.about_cid)}' is not in the graph \u2014 the pinned run-time target is gone`});else if(n.nodeLabel.get(a.about_cid)!==q.TEST)l.push({code:"ILLEGAL_TARGET",detail:`${p}: execution facts attach to tests \u2014 '${a.about_cid}' is a ${n.nodeLabel.get(a.about_cid)}`});else if(!a.event_id)l.push({code:"MISSING_FIELD",detail:`${p}: parked facts require event_id`});else{l.push(...Gt(a,p));for(let m of a.per_ac??[])se.has(m.verdict)||l.push({code:"BAD_VERDICT",detail:`${p}.per_ac['${m.ac_ref}']: verdict '${m.verdict}'`})}if(l.length>0){s.push({event_id:a.event_id??"",errors:l});continue}let d=[],f=[...a.unresolved_acs??[]];for(let m of a.per_ac??[]){let g=n.resolve(m.ac_ref),w=g?n.tipOf(g.cid):null;if(!g||!w||n.superseded.has(w)||n.nodeLabel.get(w)!==q.AC){f.push(m.ac_ref);continue}d.push({ac_ref:n.nameOf.get(w)??w,verdict:m.verdict})}c.push(Kt(a,a.about_cid,d,f)),u.push(a.event_id)}if(c.length===0)return{record:null,errors:null,applied:[],skipped:i,rejected:s};try{let a=H(e,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],executions:c,event_ids:[...u].sort(),source_head_moves:{}},{expectPrev:n.latestHash,busyRetry:{deadlineMs:5e3}}),p;try{G(e)}catch(l){p=`parked facts committed, but the projection refresh failed (${l instanceof Error?l.message:String(l)}) \u2014 read state rebuilds on the next open`}return{record:a.record,errors:null,applied:u,skipped:i,rejected:s,...p?{warnings:[p]}:{}}}catch(a){if(!(a instanceof he))throw a;if(r>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:"concurrent appends kept moving the head \u2014 parked replay retry budget exhausted (line stays queued)"}]}}}}function tn(e,t,r){let n=[],i=[];for(let c of r.facts){let u=`executions[${c.ref}]`,a=t.resolve(c.ref),p=a?t.tipOf(a.cid):null;if(!a||!p||t.superseded.has(p)){n.push({code:"UNKNOWN_REF",detail:`${u}: '${c.ref}' is not a live committed node`});continue}if(t.nodeLabel.get(p)!==q.TEST){n.push({code:"ILLEGAL_TARGET",detail:`${u}: execution facts attach to tests \u2014 '${c.ref}' is a ${t.nodeLabel.get(p)}`});continue}let l=Gt(c,u);if(l.length>0){n.push(...l);continue}let d=[];for(let f of c.per_ac??[]){let m=t.resolve(f.ac_ref),g=m?t.tipOf(m.cid):null;if(!m||!g||t.superseded.has(g)||t.nodeLabel.get(g)!==q.AC){n.push({code:"UNKNOWN_REF",detail:`${u}.per_ac: '${f.ac_ref}' is not a live AC`});continue}if(!se.has(f.verdict)){n.push({code:"BAD_VERDICT",detail:`${u}.per_ac['${f.ac_ref}']: verdict '${f.verdict}'`});continue}d.push({ac_ref:t.nameOf.get(g)??g,verdict:f.verdict})}i.push(Kt(c,p,d,c.unresolved_acs??[]))}if(n.length>0)return{record:null,errors:n};let o;try{o=H(e,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],executions:i,...r.eventIds&&r.eventIds.length>0?{event_ids:r.eventIds}:{},source_head_moves:{}},{expectPrev:t.latestHash,busyRetry:{deadlineMs:r.lockDeadlineMs??5e3}})}catch(c){if(c instanceof he)return"cas";throw c}let s;try{G(e)}catch(c){s=`facts committed, but the projection refresh failed (${c instanceof Error?c.message:String(c)}) \u2014 read state rebuilds on the next open`}return{record:o.record,errors:null,...s?{warnings:[s]}:{}}}function rr(e){let t={failed:3,broken:2,skipped:1,passed:0},r=new Map;for(let n of e)for(let i of n.verifies??[]){let o=r.get(i);(o===void 0||(t[n.status]??0)>(t[o]??0))&&r.set(i,n.status)}return[...r.entries()].map(([n,i])=>({ref:n,verdict:i}))}function nr(e){let t=[],r=re(e.cwd);if(!O(r))return{synced:0,superseded:0,skipped:"no-context",warnings:t};let n=e.by??{kind:"ai",id:"exec-sync"},i=e.lockDeadlineMs;try{rn(r,t,i)}catch(d){t.push(`sync: parked-facts replay failed (${d instanceof Error?d.message:String(d)}) \u2014 queue intact, retrying next sync`)}let o=x(r),s=[],c=0,u=new Set,a=new Set(e.members.map(d=>ae(d.path)?d.path:ce(e.cwd,d.path))),p=new Map;for(let d of e.members){let f=ae(d.path)?d.path:ce(e.cwd,d.path);if(!O(f)){t.push(`sync: member file missing: ${f} \u2014 skipped, no fact attached`);continue}for(let m of nn(f,t))if(!u.has(m.path))try{let g=m.path===f,w=!g&&a.has(m.path),h=g?void 0:F(P(f,"utf8"))?.id,Y=P(m.path,"utf8"),E=F(Y);if(!E?.id){u.add(m.path);continue}let ue=o.resolve(E.id),N=ue?o.tipOf(ue.cid):null;if(!ue||!N||o.superseded.has(N)){u.add(m.path),t.push(`sync: ${E.id} does not resolve to a live test \u2014 skipped (foreign store?)`);continue}let J=L(U(Y,Z(He(m.path),o))),mr=String(o.getNode(N)?.content.test_md_blob??""),X=L(U(mr,gt(o))),B=!1,Q=N;if(J===X)E.base!==X&&Qt(m.path,Y,X,t);else if(E.base===X){let v=sn(r,o,N,Y,J,He(m.path),n);v.error?(t.push(`sync: could not supersede ${E.id}: ${v.error}`),B=!0):(c++,Q=v.newCid,B=v.oracleTier,Qt(m.path,P(m.path,"utf8"),J,t),o=x(r))}else B=!0,t.push(E.base?`sync: ${E.id} was edited from an older version \u2014 graph kept; reconcile via a redesign or maintain`:`sync: ${E.id} carries no base pin (hand-copied file?) \u2014 fact attached with drift flag`);if(w){B&&p.set(m.path,!0);continue}u.add(m.path);let Ze=o.getNode(Q)?.content.check,et=g?d.acs??[]:[],tt=et.filter(v=>Jt(o,v.ref)),rt=et.filter(v=>!Jt(o,v.ref)).map(v=>v.ref);s.push({ref:E.id,about_cid:Q,definition_id_at_run:J,verdict:d.verdict,...tt.length?{per_ac:tt.map(v=>({ac_ref:v.ref,verdict:v.verdict}))}:{},drift_flag:B||p.get(m.path)===!0||g&&d.driftFlag===!0,oracle_mode:Ze?.expected_mode??(lt(Ze?.operand)?"runtime-derived":"inferred"),stale_at_run:o.stale(Q)!=="fresh",...rt.length?{unresolved_acs:rt}:{},execution_id:d.executionId,...d.evidenceId?{evidence_id:d.evidenceId}:{},...d.durationMs!==void 0?{duration_ms:d.durationMs}:{},started_at:d.startedAt,mode:d.mode,local:d.local,...h?{via_parent:h}:{}})}catch(g){m.path!==f&&a.has(m.path)||u.add(m.path),t.push(`sync: ${m.path} failed to sync (${g instanceof Error?g.message:String(g)}) \u2014 skipped; other members unaffected`)}}if(s.length===0)return{synced:0,superseded:c,warnings:t};let l;try{l=Ht(r,x(r),{facts:s,by:n,lockDeadlineMs:i})}catch(d){return t.push(`sync facts: commit threw: ${d instanceof Error?d.message:String(d)}`),Yt(r,s,n,t,i),{synced:0,superseded:c,warnings:t}}return l.errors?(Yt(r,s,n,t,i),t.push(...l.errors.map(d=>`sync facts: ${d.code}: ${d.detail}`)),{synced:0,superseded:c,warnings:t}):(l.warnings&&t.push(...l.warnings.map(d=>`sync facts: ${d}`)),{synced:s.length,superseded:c,warnings:t})}var Ge="pending-facts.ndjson",qe=".pending-facts.bad";function Yt(e,t,r,n,i){try{let o={by:r,ts:new Date().toISOString(),facts:t.map(c=>({...c,about_cid:c.about_cid??"",event_id:`exec-fact:${c.execution_id}:${c.ref}`}))},s=null;try{s=ee(e,{deadlineMs:i??5e3})}catch{n.push("sync facts: store lock busy \u2014 parking without it (a concurrent queue rewrite may race this line)")}try{Zt(T(e,Ge),JSON.stringify(o)+`
5
- `)}finally{s?.()}n.push(`sync facts: commit failed \u2014 ${t.length} fact(s) parked to ${T(e,Ge)}; they replay on the next sync`)}catch(o){n.push(`sync facts: could not park the failed batch (${o instanceof Error?o.message:String(o)}) \u2014 this run's facts are LOST`)}}function rn(e,t,r){let n=T(e,Ge);if(!O(n))return;let i;{let a=ee(e,{deadlineMs:r??5e3});try{i=P(n,"utf8")}finally{a()}}let o=i.split(`
6
- `).filter(a=>a.trim()!=="");if(o.length===0)return;let s=new Set,c=[],u=[];for(let a of o){let p=null;try{let d=JSON.parse(a);d&&Array.isArray(d.facts)&&(p=d)}catch{}if(!p){c.push(a),s.add(a);continue}let l=Wt(e,p);if(l.errors){if(l.errors.some(d=>d.code==="STALE_BASIS")){t.push(`sync: parked facts replay deferred (${l.errors[0].detail}) \u2014 retrying next sync`);continue}c.push(a),s.add(a),t.push(`sync: parked facts line quarantined to ${T(e,qe)} (${l.errors.map(d=>`${d.code}: ${d.detail}`).join("; ")})`);continue}for(let d of l.rejected){let f=p.facts.find(m=>m.event_id===d.event_id);u.push({parent:a,line:JSON.stringify({...f??{event_id:d.event_id},_reason:d.errors})})}l.rejected.length>0&&t.push(`sync: ${l.rejected.length} parked fact(s) quarantined to ${T(e,qe)} (${l.rejected.map(d=>d.errors.map(f=>`${f.code}: ${f.detail}`).join("; ")).join(" | ")})`),s.add(a),l.warnings&&t.push(...l.warnings.map(d=>`sync: ${d}`)),l.applied.length>0&&t.push(`sync: replayed ${l.applied.length} parked fact(s) from a previous run`)}if(s.size!==0)try{let a=ee(e,{deadlineMs:r??5e3});try{let l=(O(n)?P(n,"utf8"):"").split(`
7
- `).filter(g=>g.trim()!==""),d=[...c.filter(g=>l.includes(g)),...u.filter(g=>l.includes(g.parent)).map(g=>g.line)];d.length>0&&Zt(T(e,qe),d.map(g=>g+`
8
- `).join(""));let f=l.filter(g=>!s.has(g)),m=`${n}.tmp.${process.pid}`;tr(m,f.length>0?f.join(`
9
- `)+`
10
- `:""),er(m,n)}finally{a()}}catch(a){t.push(`sync: queue rewrite failed (${a instanceof Error?a.message:String(a)}) \u2014 already-applied lines dedupe next sync; bad lines re-quarantine then`)}}function nn(e,t){let r=[],n=new Set,i=o=>{if(n.has(o)||!O(o))return;n.add(o);let s;try{s=P(o,"utf8")}catch(c){t.push(`sync: unreadable unit ${o} (${c instanceof Error?c.message:String(c)}) \u2014 skipped`);return}for(let c of s.split(`
11
- `)){let u=/^@import\s+(\S+)\s*$/.exec(c.trim());if(!u)continue;let a=ae(u[1])?u[1]:ce(He(o),u[1]);if(!O(a))continue;let p;try{p=P(a,"utf8")}catch(l){t.push(`sync: unreadable import ${a} (${l instanceof Error?l.message:String(l)}) \u2014 skipped; importer continues`);continue}F(p)?.id&&i(a)}r.push({path:o})};return i(e),r}function Jt(e,t){let r=e.resolve(t),n=r?e.tipOf(r.cid):null;return!!(r&&n&&!e.superseded.has(n)&&e.nodeLabel.get(n)==="ac")}function on(e,t,r){let n=e.split(`
12
- `),i=ft(n);return n.map((o,s)=>{let c=mt.exec(o.trim());if(!c||i.has(s))return o;let u=c[1];if(r.resolve(u))return o;let a=ae(u)?u:ce(t,u);if(!O(a))return o;let p=F(P(a,"utf8"))?.id;return!p||!r.resolve(p)?o:`@import ${p}`}).join(`
13
- `)}function sn(e,t,r,n,i,o,s){let c=t.getNode(r);if(!c)return{oracleTier:!1,error:"tip unreadable"};let u=on(ht(n),o,t),a=String(c.content.test_md_blob??""),p=/^#\s+(.+?)\s*$/m.exec(u)?.[1]??String(c.content.title??""),l={...c.content,test_md_blob:u,definitionId:i,title:p};{let h=an(u);h.target!==void 0?l.target=h.target:delete l.target,h.app!==void 0?l.app=h.app:delete l.app}let d=vt("test",l);if(d.length>0)return{oracleTier:!1,error:d.map(h=>h.detail).join("; ")};let f=yt("test",l);if(f===r)return{newCid:r,oracleTier:!1};let m=Xt(a)!==Xt(u);if(bt(t,r,f))return{oracleTier:m,error:"file content reproduces an already-superseded version (supersession cycle guard) \u2014 graph kept; re-edit forward or redesign"};let g=wt({graph:t,oldTip:r,newCid:f,newLabel:"test",by:s,reason:`re-blessed onto ${f} (edited on disk, run sync)`});if(g.errors.length>0)return{oracleTier:m,error:`edge re-bless refused: ${g.errors.join("; ")}`};let w=te(e);if(t.latestHash!==w)return{oracleTier:m,error:`store advanced under the sync (basis ${String(t.latestHash)} vs head ${String(w)}) \u2014 re-run to retry`};try{H(e,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:f,label:"test",content:l}],edges:g.edges,review:[{id:f,kind:"review-item",resolution:"edited",edit:null,reason:"edited on disk (run sync)",by:s}],supersessions:[{kind:"node",old:r,new:f,reason:"edited on disk (run sync)",by:s},...g.supersessions],source_head_moves:{}},{expectPrev:w})}catch(h){return{oracleTier:m,error:h instanceof Error?h.message:String(h)}}return G(e),{newCid:f,oracleTier:m}}function an(e){let t=pt(e);return{...typeof t.target=="string"?{target:t.target}:{},...typeof t.app=="string"?{app:t.app}:{}}}function Xt(e){let t=[],r=e.split(`
14
- `),n=r.some(o=>/^##\s/.test(o)&&_e.test(o)),i=!1;for(let o of r){if(/^##\s/.test(o)){let s=_e.exec(o);i=n?s!==null:/\bassert\b/i.test(o),s&&t.push(`v:${s[1].trim()}`);continue}i&&o.trim()!==""&&t.push(o.trim())}return t.join(`
15
- `)}var cn=0;function Qt(e,t,r,n){try{let i=t.split(`
16
- `),o=-1;if(i[0]?.trim()==="---"){for(let u=1;u<i.length;u++)if(i[u].trim()==="---"){o=u;break}}if(o<0)return;let s=_t(i,o);if(!s)return;if(s.baseLine!==void 0){let u=i[s.baseLine].endsWith("\r")?"\r":"";i[s.baseLine]=`${s.childIndent}base: ${r}${s.baseComment?` ${s.baseComment}`:""}${u}`}else if(s.strayBase){n.push(`sync: ${e} has a base: line this scanner cannot confidently rewrite (unexpected indentation or key quoting) \u2014 pin refresh skipped (stale pin until the shape is fixed)`);return}else{let a=i[s.idLine??s.start].endsWith("\r")?"\r":"";i.splice((s.idLine??s.start)+1,0,`${s.childIndent??" "}base: ${r}${a}`)}let c=`${e}.tmp-sync.${process.pid}-${cn++}`;tr(c,i.join(`
17
- `)),er(c,e)}catch(i){n.push(`sync: pin refresh failed for ${e} (${i instanceof Error?i.message:String(i)}) \u2014 next run self-heals`)}}var gn={passed:"passed",failed:"failed",broken:"blocked",skipped:"not-run"},ir=(e,t)=>{try{if(!Ke(t))return{status:"skipped",reason:"no context store at the project root"};let r=M(e,"tests");if(!Ke(r))return{status:"skipped",reason:"pack has no tests/"};let n=new Map;for(let c of un(r)){let u=M(r,c,"result.yaml");if(!Ke(u)||!mn(M(r,c)).isDirectory())continue;let a=$(ln(u,"utf8"));if(!a?.definition_id&&!a?.assurance_id)continue;let p=rr(a.steps??[]),l={testShortId:String(a.test??c),execution:gn[String(a.status)]??"not-run",...p.length?{acs:p}:{}};a.assurance_id&&n.set(`id:${a.assurance_id}`,l),a.definition_id&&n.set(`def:${a.definition_id}`,l)}let i=xt(x(t),n,{scope:"run"}),o=kt(i);qt(e,t,i);let s=k({...i,rollup:o},{lineWidth:-1});return dn(M(e,"coverage"),{recursive:!0}),fn(M(e,"coverage","usecases.yaml"),s),{status:"written"}}catch(r){try{pn(M(e,"coverage","sources"),{recursive:!0,force:!0})}catch{}return{status:"skipped",reason:r instanceof Error?r.message:String(r)}}};async function hn(e){try{let t=new W({origin:"inline",runKind:"author",pid:e.pid,title:e.title,started:new Date().toISOString(),producerVersion:e.producerVersion,surfaces:e.surfaces,objectiveOrName:e.objectiveOrName,sessionId:e.sessionId,cwd:e.cwd,packRootDir:e.packRootDir}),r=await t.start();return{session:t,...r,packDir:t.pack,spawns:[],startedAtMs:Date.now(),cwd:e.cwd}}catch(t){return console.warn("evidence: inline pack creation failed",t),null}}function vn(e,t,r){if(!e)return;e.session.noteSpawn(t),t.resolution&&(e.resolution=t.resolution),e.runnerEnvironment=st(e.runnerEnvironment,t.runnerEnvironment);let n=(r?.per_flow_metadata??[]).map(i=>({resultCode:i?.result_code!=null?Number(i.result_code):null}));e.spawns.push({resultCode:r?.result_code!=null?Number(r.result_code):null,...n.length?{perFlow:n}:{}})}function yn(e){if(e)return{packTestDir:e.packTestDir,ordinalOffset:e.session.nextOrdinalOffset()}}async function bn(e,t){if(!e)return null;if(e.finalized)return e.finalized;let r=(n,i,o)=>t.log?t.log("warn",n,i,o):console.warn(`evidence: ${i}`,o??"");try{if(t.recordedTestPath)try{await e.session.writeDefinition(await _n.readFile(t.recordedTestPath,"utf8"))}catch(s){r("EVIDENCE_DEFINITION_FAILED","could not attach synthesized test.md",{error:String(s)})}let n=t.cdpBrowserCapture?await t.cdpBrowserCapture():void 0,i=await e.session.writeResult({steps:e.session.steps,spawns:e.spawns.length?e.spawns:[{resultCode:null}],externalIdInput:{...t.externalIdInput,execution_id:e.executionId},runnerEnv:Ue({cdpBrowser:n,resolution:e.resolution,runnerEnvironment:e.runnerEnvironment,deviceName:t.deviceName,deviceModel:t.deviceModel,pixelResolution:await Tt(e.packTestDir)}),intentEnv:ct(t.model,e.runnerEnvironment),durationMs:t.durationMs??Date.now()-e.startedAtMs,log:t.log});try{if(t.recordedTestPath){let s=nr({cwd:t.cwd??e.cwd??process.cwd(),members:[{path:t.recordedTestPath,verdict:i,executionId:e.executionId,startedAt:new Date(e.startedAtMs).toISOString(),mode:"inline",local:t.local??!1}]});for(let c of s.warnings)r("EXEC_SYNC",c)}}catch(s){r("EXEC_SYNC","exec-sync failed",{error:String(s)})}try{let s=(t.coverageWriter??ir)(e.packDir,re(t.cwd??e.cwd??process.cwd()));s.status==="skipped"&&r("EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${s.reason}`)}catch(s){r("EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(s)})}let o=await ze({executionId:e.executionId,testId:e.testId,saved:t.saved,runKind:"author",verdict:i,cwd:t.cwd??e.cwd,packDir:e.packDir,tuiLogPath:t.tuiLogPath,log:t.log,surface:"inline",requireRealLog:!!e.runnerEnvironment?.native_platform,appiumMarks:e.session.appiumMarks});return e.finalized=o,t.log?.("info","EVIDENCE_SEALED","Inline pack sealed",{execution_id:e.executionId,verdict:i,valid:o.valid,pack:e.packDir,store_copy:o.storePath??null}),o}catch(n){return r("EVIDENCE_SEAL_FAILED","inline pack finalize failed",{error:String(n)}),null}}import{statSync as wn,openSync as kn,readSync as xn,closeSync as En}from"fs";import{basename as In,resolve as Sn}from"path";async function Rn(e,t,r={}){let n=r.out??(p=>process.stdout.write(p+`
18
- `)),i=p=>(n(`error: ${p}`),2);if(t.env!=="prod"&&t.env!=="stage")return i(`invalid --env: ${String(t.env)}`);if(t.port!==void 0&&(!Number.isInteger(t.port)||t.port<1||t.port>65535))return i("invalid --port: expected an integer 1-65535");let o;try{o=K(t.env,t.viewerUrl),new URL(o)}catch{return i(`invalid --viewer-url: ${t.viewerUrl}`)}if(e.length===0)return i("no pack paths given");let s=new Map;for(let p of e){let l=Sn(p),d;try{d=wn(l)}catch{return i(`${p}: not found`)}if(d.isDirectory())return i(`${p}: is a directory \u2014 packs must be sealed .evidence files (run the execution to completion, or seal it, first)`);if(!d.isFile())return i(`${p}: not a regular file`);let f=Buffer.alloc(2),m=kn(l,"r");try{xn(m,f,0,2,0)}finally{En(m)}if(f.toString("latin1")!=="PK")return i(`${p}: not a sealed evidence pack (zip magic missing)`);let g=In(l);if(s.has(g))return i(`duplicate pack basename: ${g} (URL names collide \u2014 rename one)`);s.set(g,l)}let c=r.log??((p,l,d)=>process.stderr.write(`warn: ${l} reason=${d.reason} path=${d.path}
19
- `)),u;try{u=await ve({packs:s,allowedOrigins:[new URL(o).origin],port:t.port,log:c})}catch(p){return i(`could not bind 127.0.0.1${t.port?`:${t.port}`:""} \u2014 ${p.message}`)}n(`serving ${s.size} pack${s.size===1?"":"s"} on http://127.0.0.1:${u.port}`);for(let p of s.keys()){let l=u.urlFor(p);n(p),n(` pack ${l}`),n(` viewer ${ye(l,o)}`)}return n("press Ctrl-C to stop"),await(r.hold??An)(),await u.close(),0}function An(){return new Promise(e=>{let t=process.listeners("SIGINT");process.removeAllListeners("SIGINT"),process.once("SIGINT",()=>{for(let r of t)process.on("SIGINT",r);e()})})}import{promises as de}from"fs";import{tmpdir as Fn}from"os";import{join as ar,resolve as Ye}from"path";var Pn=["error","prefer_first","prefer_latest","discard"],$n=["external_id.commit_id","external_id.test_id","environment.os","environment.os_version","environment.browser","environment.browser_version"];function or(e){let t=e.replace(/-/g,"_");return Pn.includes(t)?t:null}function sr(e){let t=e==="discard"?{on_collision:"discard"}:{on_collision:"error",identity:{keys:[...$n],on_same:e??"nest",on_different:e?"error":"split"}};return k({packs:{require_status:"finalized",require_valid:"L1",on_ineligible:"abort"},tests:t,rules:[{file:"run.yaml",key:"run_id",must:"different",on_violation:"skip"},{file:"result.yaml",key:"external_id.project_id",must:"same",on_violation:"error"},{file:"result.yaml",key:"external_id.org_id",must:"same",on_violation:"error"}]},{lineWidth:-1})}async function We(e){try{if(!e.isTTY){e.log(be(e.packPath));return}let t=K(e.env);await(e.renderPrompt??Ln)(e.packPath,t)}catch(t){try{e.log(`evidence view failed \u2014 ${t.message}`)}catch{}}}async function Ln(e,t){let r=await import("./react-QWOAB3TB.js"),{render:n}=await import("./build-JIKYOZUH.js"),{EvidenceViewOffer:i}=await import("./EvidenceViewOffer-UACWB3YJ.js");await new Promise(o=>{let s=n(r.default.createElement(i,{packPath:e,viewerBase:t,onDone:()=>{s.unmount(),o()}}),{stdout:process.stderr,exitOnCtrlC:!1})})}async function Cn(e,t,r=process.cwd(),n={}){let i=n.out??(d=>process.stdout.write(d+`
20
- `)),o=n.err??(d=>process.stderr.write(d+`
21
- `)),s=d=>(o(`evidence merge: ${d}`),2);if(!t.runId)return s("--run-id is required (merged identity is the caller's fact)");if(t.rules&&t.onCollision)return s("--rules and --on-collision are mutually exclusive");let c;if(t.onCollision!==void 0){let d=or(t.onCollision);if(!d)return s(`invalid --on-collision: ${t.onCollision} (expected error | prefer-first | prefer-latest | discard)`);c=d}let u=[];for(let d of e){let f=await Dn(d,r);if(!f)return s(`no pack found for "${d}"`);u.push(f)}let a=t.out?Ye(r,t.out):y(t.runId,r),p=null,l;t.rules?l=Ye(r,t.rules):(p=await de.mkdtemp(ar(Fn(),"kane-merge-rules-")),l=ar(p,"merge-rules.yaml"),await de.writeFile(l,sr(c)));try{let d=await(n.mergeFn??dt)(u,{runId:t.runId,out:a,rulesPath:l,title:t.title,finalize:t.finalize});return t.json?i(JSON.stringify(d)):jn(i,d),d.output.finalized&&!t.json&&await(n.offer??We)({packPath:a,env:t.env,isTTY:n.isTTY??(!!process.stdin.isTTY&&!!process.stderr.isTTY),log:o}),0}catch(d){let f=d instanceof Error?d.message:String(d);return d?.code==="ABORT"?(o(`evidence merge: aborted \u2014 ${f}`),1):s(f)}finally{p&&await de.rm(p,{recursive:!0,force:!0}).catch(()=>{})}}async function Dn(e,t){let r=Ye(t,e);if(await cr(r))return r;let n=y(e,t);return await cr(n)?n:null}async function cr(e){try{return await de.stat(e),!0}catch{return!1}}function jn(e,t){let{packs:r,tests:n,output:i}=t;e(`evidence: merged ${n.merged} tests from ${r.eligible.length} packs -> ${i.path} (${i.finalized?"sealed":"live"})`);for(let o of r.skipped)e(` skipped ${o.runId}: ${o.rule} \u2014 ${o.reason}`);for(let o of n.collisions){let s;o.action==="nest"?s=`nested into ${o.folder}, latest ${o.winner}`:o.action==="split"?s=`split into ${o.folder}`:s=`winner ${o.winner}`,e(` collision ${o.test}: ${s} (${o.rule})`)}for(let o of n.discarded)e(` discarded ${o}`)}import{copyFileSync as On,existsSync as Je,mkdirSync as Tn}from"fs";import{join as dr}from"path";function Mn(e,t,r){try{let n=dr(e,"auteur","execution.json");if(Je(n))return!0;for(let i of t)if(!(!i||!Je(i)))return Tn(dr(e,"auteur"),{recursive:!0}),On(i,n),!0}catch(n){try{r?.("debug","EVIDENCE_BLOB_COPY_FAILED","auteur execution blob copy failed",{operation:"ensureAuteurExecution",source:t.find(i=>i&&Je(i))??null,error:n instanceof Error?n.message:String(n)})}catch{}}return!1}import{readFileSync as Nn}from"fs";import{join as Bn}from"path";var ur="module_block";var Vn=new Set(["generative_block",ur]);function Qe(e){let t=[],r=!0,n=o=>{if(o===null||typeof o!="object")return;let s=o;if(Array.isArray(s.operations))for(let c of s.operations){let u=c?.operation_id;typeof u=="string"&&u&&t.push(u)}if(Array.isArray(s.children)){Vn.has(s.content_type)||(r=!1);for(let c of s.children)n(c)}if(Array.isArray(s.branches)){r=!1;for(let c of s.branches){let u=c?.children;if(Array.isArray(u))for(let a of u)n(a)}}},i=e?.instructions;if(Array.isArray(i))for(let o of i)n(o);return{ids:t,linear:r}}function zn(e){return Qe(e).ids}function Xe(e,t){let r=new Set(t.map(c=>c.action_id).filter(Boolean)),n=-1;for(let c of r){let u=e.indexOf(c);u>n&&(n=u)}let i=t.reduce((c,u)=>Math.max(c,u.ordinal),0),o=new Set,s=[];for(let c of e.slice(n+1))r.has(c)||o.has(c)||(o.add(c),s.push({id:c,ordinal:++i,status:"skipped",action_id:c}));return s}function lr(e,t){let r=new Set(t),n=e.filter(o=>o.action_id);if(n.some(o=>r.has(o.action_id))||n.length>t.length)return null;let i=0;return e.map(o=>o.action_id?{...o,action_id:t[i++]}:o)}function Un(e,t){if(e.length>t.length)return!1;for(let r=0;r<e.length;r++)if(t[r]!==e[r].action_id)return!1;return!0}function qn(e,t,r,n=!0){if(t.length===0)return{steps:e,tail:[]};let i=(r&&n?lr(e,t):null)??e,o=i.filter(c=>c.action_id),s=new Set(t);return o.length>0&&o.every(c=>s.has(c.action_id))?{steps:i,tail:Xe(t,i)}:o.length>0&&!Un(o,t)?{steps:i,tail:[],unjoined:!0}:{steps:i,tail:Xe(t,i)}}function pr(e){try{let t=Nn(Bn(e,"auteur","execution.json"),"utf8");return Qe(JSON.parse(t))}catch{return{ids:[],linear:!0}}}function Hn(e){return pr(e).ids}export{D as a,we as b,ke as c,xe as d,Ee as e,Ie as f,It as g,Re as h,_r as i,Ae as j,Pe as k,hr as l,vr as m,$e as n,ne as o,Ce as p,De as q,je as r,Oe as s,yr as t,br as u,Te as v,wr as w,Me as x,Ne as y,Be as z,Ct as A,ze as B,Tt as C,Ue as D,Bt as E,Br as F,W as G,Kr as H,rr as I,nr as J,ir as K,hn as L,vn as M,yn as N,bn as O,Rn as P,sr as Q,We as R,Cn as S,Mn as T,ur as U,Qe as V,zn as W,Xe as X,lr as Y,qn as Z,pr as _,Hn as $};
@@ -1,15 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as w,c as M}from"./chunk-KRL2BDI5.js";import{dirname as K,basename as N,join as d}from"path";function W(t){let e=N(t);return e.endsWith("_test.md")?e.slice(0,-8):e.endsWith("_module.md")?e.slice(0,-10):e.endsWith(".md")?e.slice(0,-3):e}function f(t){return d(K(t),`output-${W(t)}`)}function nt(t){return d(f(t),"Result.md")}function _(t){return d(f(t),".internal")}function x(t){return d(_(t),"meta.json")}function it(t){return d(_(t),"execution.json")}function rt(t,e,n){return d(f(t),`${e}-${n}-code`)}function ot(t){return d(f(t),"generated-code")}function st(t){return f(t)+".staging"}function G(t){return d(_(t),"steps")}function dt(t,e,n){return d(G(t),`${e}-${n}`)}import{writeFileSync as J,mkdirSync as L,readFileSync as H}from"fs";import{dirname as j}from"path";function k(t){try{return JSON.parse(H(x(t),"utf8"))}catch{return null}}function ut(t){let e=x(t.sourcePath);try{L(j(e),{recursive:!0})}catch(r){return process.stderr.write(`
3
- \u26A0 Failed to create output directory.
4
- ${r.message}
5
- Path: ${j(e)}
6
-
7
- `),e}let n={commit_id:t.commitId};t.testId!==void 0&&(n.test_id=t.testId),t.testcaseId!==void 0&&(n.testcase_id=t.testcaseId),t.projectId!==void 0&&(n.project_id=t.projectId),t.folderId!==void 0&&(n.folder_id=t.folderId),t.orgId!==void 0&&(n.org_id=t.orgId),t.sessionName!==void 0&&(n.session_name=t.sessionName),t.plan!==void 0&&(n.plan=t.plan);try{J(e,JSON.stringify(n,null,2)+`
8
- `,"utf8")}catch(r){process.stderr.write(`
9
- \u26A0 Failed to write meta.json.
10
- ${r.message}
11
- Path: ${e}
12
-
13
- `)}return e}import{readFileSync as Y,existsSync as z}from"fs";import{basename as C,dirname as q,isAbsolute as Q,resolve as T}from"path";import{createHash as O}from"crypto";function h(t){if(t==null)return null;if(Array.isArray(t))return t.map(h);if(typeof t=="object"){let e={};for(let n of Object.keys(t).sort()){let r=t[n];r!==void 0&&(e[n]=h(r))}return e}return t}function U(t){if(t.body.kind!=="objective")throw new Error("stepMd5: only objective steps have an md5; @import rows do not");let e={...t.config??{},optional:t.optional??!1},n=JSON.stringify(h(e));return O("md5").update(t.body.text).update(`
14
- `).update(n).digest("hex")}function I(t){let e={};for(let[r,o]of Object.entries(t.bindings??{}))e[r]={value:o.value,...o.secret===!0?{secret:!0}:{},...o.syntax?{syntax:o.syntax}:{}};let n=JSON.stringify(h({bindings:e,optional:t.optional}));return O("md5").update(t.path).update(`
15
- `).update(n).digest("hex")}function mt(t){return U({index:t.trace[t.trace.length-1].stepIndex,heading:t.trace[t.trace.length-1].heading,verifies:[],body:{kind:"objective",text:t.objective},config:t.parsedConfig,headingLine:1,optional:t.optional})}var E=["target","chrome_profile","cdp_endpoint","ws_endpoint","headless"],X=["app","no_reset","os_version","device_name"],Z=["mode","on_lock_conflict","tags","target","chrome_profile","cdp_endpoint","ws_endpoint","headless","app","no_reset","os_version","device_name"],u=class extends Error{constructor(e){super(e),this.name="TestMdResolveError"}};function v(t){let e=C(t);return e.endsWith("_test.md")?"test":e.endsWith("_module.md")?"module":"helper"}function Rt(t){let e=T(t),n=$(e),r=B(n.global),o=[],a=[],s=[{file:e,kind:v(e)}],c=[];return F(n,a,o,[],e,{},s,c,{}),o.forEach((l,b)=>l.flatIndex=b+1),{rootPath:e,rootTitle:n.title,rootGlobal:n.global,rootSteps:n.steps,chrome:r,steps:o,unitFiles:s,warnings:c}}function St(t){let e=[];for(let n of t.unitFiles){if(n.kind!=="test")continue;let r=k(n.file);r&&e.push({file:n.file,...r.project_id?{project_id:String(r.project_id)}:{},...r.org_id?{org_id:String(r.org_id)}:{}})}return e}function $(t){if(!z(t))throw new u(`@import path not found: ${t}`);let e=Y(t,"utf8");return w(t,e)}function F(t,e,n,r,o,a,s,c,p){if(e.includes(t.path)){let i=[...e,t.path].map(g=>C(g)).join(" \u2192 ");throw new u(`cyclic reference: ${i}`)}e.push(t.path);let l=r.length===0,b=t.global.variables??{};for(let i of Object.keys(a))if(Object.hasOwn(b,i))throw new u(`callsite binding '${i}' collides with a declared variable in ${t.path} (frontmatter variables are pinned; parameters are its undeclared names)`);let R=t.global;if(!l){let i={...t.global};for(let g of Z)i[g]!==void 0&&(c.push(`${t.path}: '${g}' is root-governed on imported units \u2014 ignored`),delete i[g]);i.url!==void 0&&(p.pending=String(i.url),delete i.url),R=i}for(let i of t.steps){let g=i.body.kind!=="objective";if(i.optional&&g&&!l)throw new u(`intermediate-ref 'optional' is not supported in v1: ${t.path}:${i.headingLine}`);if(i.body.kind==="objective"){let y={file:t.path,stepIndex:i.index,heading:i.heading,optional:i.optional??!1},D=tt(R,i.config,a),S={flatIndex:0,objective:i.body.text,sourceFile:t.path,trace:[...r,y],config:D,parsedConfig:i.config,optional:i.optional??!1,verifies:i.verifies,owningFile:t.path,unitKind:v(t.path),...i.replayOnly?{replayOnly:i.replayOnly}:{}};p.pending&&(S.unitEntryUrl=p.pending,p.pending=void 0),n.push(S);continue}let P={file:t.path,stepIndex:i.index,heading:i.heading,optional:i.optional??!1,rowMd5:I({path:i.body.path,bindings:i.body.bindings,optional:i.optional??!1})},V=q(t.path),m=Q(i.body.path)?i.body.path:T(V,i.body.path),A=$(m);s.some(y=>y.file===m)||s.push({file:m,kind:v(m)}),F(A,e,n,[...r,P],o,i.body.bindings??{},s,c,p)}l||(p.pending=void 0),e.pop()}function B(t){let e={};for(let n of E){if(n==="target"){let r=M(t);r!==void 0&&(e.target=r);continue}t[n]!==void 0&&(e[n]=t[n])}return e}function tt(t,e,n){let r={};for(let[s,c]of Object.entries(t))E.includes(s)||X.includes(s)||(r[s]=c);let o={...r,...e??{}},a={...n,...t.variables??{},...e?.variables??{}};return Object.keys(a).length>0?o.variables=a:delete o.variables,o}export{W as a,f as b,nt as c,_ as d,x as e,it as f,rt as g,ot as h,st as i,G as j,dt as k,I as l,mt as m,k as n,ut as o,u as p,v as q,Rt as r,St as s};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as j}from"./chunk-O5U6EAL3.js";import{d as K}from"./chunk-RKXHVP2Z.js";import{a as L}from"./chunk-5Y2G4NC7.js";import{a as M}from"./chunk-YCCUBQY4.js";import{x as s}from"./chunk-NJJQL54J.js";import{a as O}from"./chunk-HCBYKLMW.js";import{a as x,b as n,i as D,k as E}from"./chunk-C44QQJR4.js";import{a as I}from"./chunk-6YGTRKDT.js";import{e as y}from"./chunk-UR6MHSHU.js";var g=y(O(),1);function ee(e){let t=e.findIndex(r=>r.free);return t>=0?t:null}var q=60,Q=100;function te({headline:e,ask:t=!1,rows:r,sel:o,focused:d,freeText:c=null,freeTextNote:h,sublines:b=[]}){let{stdout:p}=E(),i=p?.columns??80,v=i<q,k=Math.min(i-1,Q),u=a=>d&&o===a?(0,g.jsx)(n,{color:s.assuranceAccent,children:"\u276F"}):" ",m=t?`? ${e}`:e,A=Math.max(4,k-3),S=b.map((a,w)=>(0,g.jsx)(n,{color:s.dim,children:` ${a.length>A?`${a.slice(0,A-1)}\u2026`:a}`},`sub-${w}`)),R=0,B=r.map((a,w)=>a.free?c?(0,g.jsxs)(x,{flexDirection:"column",children:[(0,g.jsxs)(x,{children:[(0,g.jsxs)(n,{children:[(0,g.jsx)(n,{color:s.assuranceAccent,children:"\u276F"})," ",(0,g.jsx)(n,{color:s.dim,children:"\u270E "})]}),(0,g.jsx)(M,{value:c.value,onChange:c.onChange,onSubmit:c.onSubmit,onCancel:c.onCancel,placeholder:a.label})]}),h?(0,g.jsx)(n,{color:s.muted,children:` ${h}`}):null]},a.key):(0,g.jsxs)(n,{children:[u(w)," ",(0,g.jsx)(n,{color:s.dim,children:`\u270E ${a.label}`})]},a.key):(R+=1,(0,g.jsxs)(n,{bold:d&&o===w,children:[u(w),` ${R}. ${a.label}`,a.detail?(0,g.jsx)(n,{color:s.dim,bold:!1,children:` \u2014 ${a.detail}`}):null]},a.key)));return v?(0,g.jsxs)(x,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,g.jsx)(n,{bold:!0,color:s.assuranceAccent,children:m}),S,B]}):(0,g.jsxs)(x,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,g.jsx)(n,{bold:!0,color:s.assuranceAccent,children:m}),S,(0,g.jsx)(n,{children:" "}),B]})}var H=y(I(),1);var $=y(O(),1),N=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function le(e){let t=e.replace(/…$/,"");return t&&t.charAt(0).toLowerCase()+t.slice(1)}function F(e,t){if(e.length<=t)return e;if(t<=1)return"\u2026";let r=Math.ceil((t-1)/2),o=Math.floor((t-1)/2);return`${e.slice(0,r)}\u2026${o>0?e.slice(-o):""}`}function ce({status:e,meta:t,tallies:r,keys:o,child:d,cols:c}){let{stdout:h}=E(),b=c??h?.columns??80,p=e.kind==="working"||e.kind==="child-working",[i,v]=(0,H.useState)(0);L(()=>v(f=>f+1),p?120:null);let k=N[i%N.length],u,m;switch(e.kind){case"working":u=`${k} ${e.step}${e.elapsedS!==void 0?` \xB7 ${e.elapsedS}s`:""}`,m=s.assuranceAccent;break;case"waiting":u=`\u25CF waiting on you${e.pending?` \u2014 ${e.pending} question${e.pending===1?"":"s"}`:""}`,m=s.amber;break;case"idle":u="\u25CF idle",m=s.assuranceAccent;break;case"card":u=`\u25CF card ${e.n} of ${e.m}`,m=s.amber;break;case"child-working":u=`${k} child: ${e.step}`,m=s.assuranceAccent;break;case"child-waiting":u="\u25CF child waiting on you",m=s.amber;break}let A=d?`${t.verb} \u25B8 ${d.verb}`:t.verb,S=d?.sid?t.sid?`${F(t.sid,14)} \u25B8 ${d.sid}`:d.sid:t.sid,R=t.env==="prod"?"":t.env,B=[A,S,R].filter(Boolean),a=" \xB7 ",w=u.length+a.length+B.join(a).length,C=t.subject;if(C){let f=b-w-a.length;C=f>=8?F(C,f):void 0}let _=[A,...C?[C]:[],S,R].filter(Boolean).join(a);return(0,$.jsxs)(x,{flexDirection:"column",children:[(0,$.jsx)(n,{color:s.muted,children:"\u2500".repeat(Math.max(1,b))}),(0,$.jsxs)(n,{children:[(0,$.jsx)(n,{color:m,children:u}),(0,$.jsx)(n,{color:s.dim,children:`${a}${_}`})]}),(0,$.jsx)(n,{color:s.dim,children:r.items.length>0?r.items.join(a):" "}),(0,$.jsx)(n,{color:s.muted,children:o.join(a)})]})}var P=y(I(),1);function ue({onToggleThinking:e,onCtrlC:t,explorer:r,panel:o}){let c=(0,P.useRef)(null),h=(0,P.useRef)(""),b=()=>{c.current&&clearTimeout(c.current),c.current=null,h.current=""};return(0,P.useEffect)(()=>b,[]),D((p,i)=>{if(i.ctrl&&p==="t"){e();return}if(i.ctrl&&p==="c"){t();return}if(!i.ctrl&&p.includes("")){t();return}if(!i.ctrl&&p.includes("")){e();return}if(r&&r.isOpen()){let v=()=>{c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{b(),r.onBack()},150)};if(c.current){if(i.upArrow||i.downArrow||i.return){b(),i.return?r.onEnter():r.onMove(i.upArrow?-1:1);return}if(h.current+=p,h.current==="["){v();return}let k=h.current;b();let u=/^\[([ABCD])/.exec(k);if(u){(u[1]==="A"||u[1]==="B")&&r.onMove(u[1]==="A"?-1:1);return}r.onBack();return}if(i.upArrow){r.onMove(-1);return}if(i.downArrow){r.onMove(1);return}if(i.return){r.onEnter();return}if(i.escape){h.current="",v();return}return}if(o&&o.isFocused()){let v=()=>{c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{b(),o.onBack()},150)};if(c.current){if(i.upArrow||i.downArrow||i.return||i.leftArrow||i.rightArrow){b(),i.return?o.onSelect():i.leftArrow?o.onLeft?.():i.rightArrow?o.onRight?.():o.onMove(i.upArrow?-1:1);return}if(h.current+=p,h.current==="["){v();return}let k=h.current;b();let u=/^\[([ABCD])/.exec(k);if(u){u[1]==="A"||u[1]==="B"?o.onMove(u[1]==="A"?-1:1):u[1]==="C"?o.onRight?.():o.onLeft?.();return}o.onBack();return}if(i.upArrow){o.onMove(-1);return}if(i.downArrow){o.onMove(1);return}if(i.leftArrow){o.onLeft?.();return}if(i.rightArrow){o.onRight?.();return}if(i.return){o.onSelect();return}if(i.escape){h.current="",v();return}if(/^[1-9]$/.test(p)){o.onDigit(Number(p));return}if(i.tab){o.onTab?.();return}if(p===" "&&o.isMulti()){o.onSpace();return}if(p&&!i.ctrl&&!i.meta){o.onType(p);return}return}}),null}var l=y(O(),1);function X(e){return e.kind==="REVIEW"?[{v:"approve",label:"approve",detail:"mark it reviewed and trusted"},{v:"archive",label:"archive",detail:"reject it \u2014 asks for a reason; impact shown above"},{v:"defer",label:"defer",detail:"not now \u2014 stays queued"}]:e.kind==="PAIR"?[{v:"merge",label:"merge",detail:"duplicate \u2014 fold into the older item (it stays unreviewed)"},{v:"keep_both",label:"keep both",detail:"genuinely distinct \u2014 promote both"},{v:"defer",label:"defer",detail:"not now \u2014 stays queued"}]:e.kind==="ARCHIVE"?[{v:"archive",label:"retire",detail:"hidden from now on; history is kept and it can be reverted"},{v:"skip",label:"skip",detail:"keep it \u2014 decided, never re-offered"},{v:"defer",label:"defer",detail:"not now \u2014 the plan re-offers it"}]:e.heldPayload?[{v:"approve",label:"approve update",detail:"commit the held payload \u2014 impact preview above"},{v:"skip",label:"keep current",detail:"drop the held payload (the owner's disk state stays untouched)"},{v:"defer",label:"defer",detail:"not now \u2014 stays held"}]:[{v:"approve",label:"approve",detail:e.kind==="ADD"?"commit + design it":"commit the updated version (old\u2192new redirect)"},{v:"skip",label:e.origin==="content-change"?"reject":"skip",detail:e.origin==="content-change"?"drop the staged proposal \u2014 nothing committed":"leave it as is"},{v:"defer",label:"defer",detail:"not now \u2014 the plan keeps it staged"}]}function V(e){let t=X(e);return e.viewDiff&&t.push({v:"view_diff",label:"view diff",detail:"full old \u2192 new"}),t}function W(e){return e.kind==="ARCHIVE"?null:V(e).length}var Y={ADD:{color:s.green??"green"},MODIFY:{color:"yellow"},ARCHIVE:{color:s.red},REVIEW:{color:"cyan"},PAIR:{color:"magenta"}},U=60;function be({card:e,position:t,sel:r=0,focused:o=!1,freeText:d=null,editorIntent:c="steer"}){let{stdout:h}=E(),b=h?.columns??80,p=b<U,i=V(e),v=W(e),k=Y[e.kind],u=f=>o&&r===f?(0,l.jsx)(n,{color:s.assuranceAccent,children:"\u276F"}):" ",m=e.impact,A=m&&"stale_refs"in m&&m.stale_refs.length>0?`${e.kind==="ARCHIVE"?"retiring leaves":"approving marks"} ${m.stale_refs.length} item(s) stale`+((m.direct_refs?.length??0)>0?` \u2014 ${m.direct_refs.length} directly touched: ${m.direct_refs.join(", ")}`:""):m&&"design_children"in m?`${e.kind==="REVIEW"?"archiving drops":"merging folds"} ${m.design_children} design child(ren)`:null,S=e.provenance&&e.provenance!==e.why?e.provenance:e.origin??null,R=[{label:"why",text:e.why},...S?[{label:"from",text:S,dimmer:!0}]:[],...e.tier?[{label:"match",text:e.tier,dimmer:!0}]:[],...A?[{label:"impact",text:A}]:[]],B=Math.max(...R.map(f=>f.label.length)),a="? reconcile",w=`item ${t.n} of ${t.of}`,C=(0,l.jsxs)(x,{flexDirection:"column",children:[(0,l.jsx)(x,{paddingLeft:2,children:(0,l.jsxs)(n,{bold:!0,children:[(0,l.jsx)(n,{color:k.color,children:`[${e.kind}]`}),` ${j(e.title)}`]})}),R.map((f,T)=>(0,l.jsx)(x,{paddingLeft:2,children:(0,l.jsxs)(n,{children:[(0,l.jsx)(n,{color:s.dim,children:`${f.label.padEnd(B)} `}),(0,l.jsx)(n,{color:f.dimmer?s.dim:void 0,children:f.text})]})},`f-${T}`)),e.diffSummary?(0,l.jsx)(x,{paddingLeft:2,children:(0,l.jsx)(n,{color:s.dim,children:e.diffSummary})}):(e.diff??[]).map((f,T)=>(0,l.jsx)(x,{paddingLeft:4,children:(0,l.jsx)(n,{color:f.op==="-"?"red":"green",children:`${f.op==="-"?"\u2212":"+"} ${f.field==="criteria"?"criterion":f.field}: ${f.text}`})},`d-${T}`)),(e.citeLines??[]).map((f,T)=>(0,l.jsx)(x,{paddingLeft:2,children:(0,l.jsx)(n,{color:s.dim,children:f})},`c-${T}`)),(0,l.jsx)(n,{children:" "}),i.map((f,T)=>(0,l.jsxs)(n,{children:[u(T),` ${T+1}. ${f.label}`,(0,l.jsx)(n,{color:s.dim,children:` \u2014 ${f.detail}`})]},`o-${T}`)),v!==null||d&&c==="because"?d?(0,l.jsxs)(x,{flexDirection:"column",children:[(0,l.jsxs)(x,{children:[(0,l.jsxs)(n,{children:[(0,l.jsx)(n,{color:s.assuranceAccent,children:"\u276F"})," ",(0,l.jsx)(n,{color:s.dim,children:"\u270E "})]}),(0,l.jsx)(M,{value:d.value,onChange:d.onChange,onSubmit:d.onSubmit,onCancel:d.onCancel,placeholder:c==="because"?"why archive it?":"say what to adjust"})]}),(0,l.jsx)(n,{color:s.muted,children:c==="because"?" submits as: archive \xB7 your reason goes on the record":e.kind==="PAIR"?" submits as: defer \xB7 your note parks with the card (it re-offers)":" submits as: approve \xB7 your words steer the re-design"})]}):v!==null?(0,l.jsxs)(n,{children:[u(v)," ",(0,l.jsx)(n,{color:s.dim,children:e.kind==="PAIR"?"\u270E defer with a note \u2014 say what you noticed":"\u270E approve with changes \u2014 say what to adjust"})]}):null:null]});if(p)return(0,l.jsxs)(x,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,l.jsx)(n,{bold:!0,color:s.assuranceAccent,children:a}),(0,l.jsx)(n,{color:s.dim,children:w}),C]});let _=Math.max(2,Math.min(b-1,100)-a.length-w.length);return(0,l.jsxs)(x,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,l.jsxs)(n,{children:[(0,l.jsx)(n,{bold:!0,color:s.assuranceAccent,children:a})," ".repeat(_),(0,l.jsx)(n,{color:s.dim,children:w})]}),(0,l.jsx)(n,{children:" "}),C]})}var z={"acceptance criteria":1,scenarios:2,"acceptance criteria + exercises":3,"tests + gaps":4};function we(e,t){let r=[],o=K(e.turns).entries.length;if(t==="design"){let c;for(let b=e.ledger.length-1;b>=0;b--){let p=e.ledger[b];if(p.kind==="banner"&&p.text.startsWith("designing: ")){c=p.text.slice(11);break}}let h=c?z[c]:void 0;h&&r.push(`phase ${h}/4`),o>0&&r.push(`${o} item${o===1?"":"s"} this session`)}else o>0&&r.push(`${o} saved as draft${o===1?"":"s"}`);let d=e.pending?e.pending.resolution.filter(c=>!c).length:0;return d>0&&r.push(`${d} question${d===1?"":"s"} pending`),e.credits&&r.push(`${e.credits.total.toFixed(1)} credits`),{items:r}}function ke(e,t){let r=[],o=e.applied+e.committed+e.retired;r.push(`${o} applied`),r.push(`${t} to decide`);let d=[];return e.skipped>0&&d.push(`${e.skipped} skipped`),e.deferred>0&&d.push(`${e.deferred} deferred`),e.failed>0&&d.push(`${e.failed} failed`),{items:[...r,...d]}}function Ae(e,t){let r=["\u2191\u2193 select","\u23CE confirm"];return e.multi_select&&r.push("space toggle"),t.batchCount>1&&r.push("\u2190 \u2192 questions"),(e.allow_free_text||e.options.some(o=>o.input===!0))&&r.push("\u270E type your own"),t.canAttach&&r.push("@ attach a file or URL"),t.escBack&&r.push("esc back"),{keys:r}}function Se(e,t){let r=["\u2191\u2193 select","\u23CE confirm"];return e.some(o=>o.free)&&r.push("\u270E type your own"),t.escBack&&r.push("esc back"),{keys:r}}function Re(e){let t=["\u2191\u2193 select","\u23CE confirm","1-9 verdict"];return W(e)!==null&&t.push("type = adjust"),t.push("esc \xB7 nothing to undo"),{keys:t}}export{ee as a,te as b,le as c,ce as d,ue as e,X as f,V as g,W as h,be as i,we as j,ke as k,Ae as l,Se as m,Re as n};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{i as s,j as e}from"./chunk-AKX4VRRR.js";import{a as t,b as i}from"./chunk-IAHKTEET.js";function a(r,n){return"sha256:"+i(Buffer.from("assurance."+r+"\0"+t(s(r,n)),"utf8"))}function f(r,n,o,u){return"sha256:"+i(Buffer.from("assurance.edge\0"+t({type:r,src:n,dst:o,props:e(r,u)}),"utf8"))}function d(r,n){return{source_id:r,blob:n}}function p(r){return{...r,derived:!0}}export{a,f as b,d as c,p as d};