@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,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as S}from"./chunk-I7TIGB7K.js";import{a as x,b as P,c as C,d as V,e as j}from"./chunk-2LXJ2ZM3.js";import{a as R,b as D}from"./chunk-DNNZ353O.js";import{C as y,c as b,r as f,s as k}from"./chunk-W3Z7AZNT.js";import{e as w}from"./chunk-DBIBROYW.js";function I(o,t){return{contextDir:o,rootSid:t,locks:w(o,t),probe:S(o,{resolveAlias:i=>P(i),embed:(i,s)=>C(i,s),readVector:(i,s)=>V(o,i,s),writeVector:(i,s,n)=>j(o,i,s,n)})}}var N=new Set(["archive"]);async function Y(o,t,i,s){let n=y(o.contextDir);if(i.v==="defer")return{outcome:"deferred"};if(t.kind==="MODIFY_HELD"){if(!t.heldPayload)return{outcome:"failed",detail:`${t.ref} carries no held payload`};let e=t.heldPayload;if(i.v==="keep_current"){if(!e.event_id)return{outcome:"failed",detail:`this held row has no durable event id \u2014 resume the owner to drop it: kane-cli context extract --resume ${e.sid}`};let{commitChatTurn:r}=await import("./chat-committer-RAOIL2T6.js"),u=r({contextDir:o.contextDir,graph:n,ops:[{kind:"resolve_question",questionId:`drop-held:${e.sid}:${e.tempRef}`,resolution:"deferred",eventId:e.event_id}],by:s});return u.errors?{outcome:"failed",detail:u.errors.map(d=>`${d.code}: ${d.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"held-dropped"}),{outcome:"committed",detail:"held payload dropped (recorded) \u2014 the owner's resume will not re-present it"})}if(i.v==="approve"){let r=e.content._held??null;if(!r?.source_id||!r.source_cid||!r.anchor||!r.quote)return{outcome:"failed",detail:`this held row carries no committable provenance \u2014 resume the owner to apply it: kane-cli context extract --resume ${e.sid}`};{let a=n.mediaOf(r.source_cid),m=R(o.contextDir,n,r.source_cid),g=a.format==="image"?null:m?D(m):null;if(a.format!=="image"&&g===null)return{outcome:"failed",detail:`the pinned source ${r.source_id} (${r.source_cid.slice(0,19)}) has no citable text to verify this held row against \u2014 resume the owner: kane-cli context extract --resume ${e.sid}`};let _=b(a,{anchor:r.anchor,quote:r.quote},g);if(_.length>0)return{outcome:"failed",detail:`held provenance does not verify against the pinned source (${_.map($=>`${$.code}: ${$.detail}`).join("; ")}) \u2014 resume the owner: kane-cli context extract --resume ${e.sid}`}}let{commitProposal:u}=await import("./committer-C6UCDYMC.js"),{_held:d,...c}=e.content,q={version:1,read_basis:n.latestHash,source:{source_id:r.source_id,source_cid:r.source_cid},use_cases:[{temp_ref:e.tempRef,title:String(c.title??e.tempRef),...c.summary!==void 0?{summary:c.summary}:{},risk:String(c.risk??"med"),cite:{anchor:r.anchor,quote:r.quote},depends_on_hint:[],matches_existing:null}]},l=await x(I(o.contextDir,o.rootSid??`review-${process.pid}`),{verb:"maintain",ucTargets:[],newBuCandidates:[{tempRef:e.tempRef,title:String(c.title??e.tempRef),probeText:`${String(c.title??"")} ${String(c.summary??"")}`.trim()}],sourcePins:[{source_id:r.source_id,source_cid:r.source_cid}],readBasis:n.latestHash,...e.event_id?{eventIds:[e.event_id]}:{}},a=>{let m=u({contextDir:o.contextDir,graph:a.graph,proposal:q,proposalId:null,verdicts:new Map([[e.tempRef,{resolution:"skipped"}]]),by:s,autoName:!0,allowStaleBasis:!0,eventIds:e.event_id?[e.event_id]:a.eventIds("maintain",1),sid:a.sid,probeHits:a.probeHits});return m.errors!==null?{errors:m.errors}:{result:m,record:m.record}}),h=l.ok&&"result"in l?l.result:{record:null,errors:l.ok?null:l.kind==="validation"?l.errors:[{code:l.kind==="contended"?l.err.code:"UNSETTLED",detail:l.kind==="contended"?`held by ${l.err.holder?.owner_sid??"another session"}`:"concurrent activity kept moving the store"}]};return h.errors?{outcome:"failed",detail:h.errors.map(a=>`${a.code}: ${a.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"held-applied"}),{outcome:"committed",detail:`held payload committed (derived) by ${s.id}`})}return{outcome:"failed",detail:`verdict ${i.v} does not apply to a MODIFY_HELD card`}}let v=n.resolve(t.ref);if(!v)return{outcome:"failed",detail:`${t.ref} names nothing in the graph`};let p=n.tipOf(v.cid);if(i.v==="archive"){if(!i.because||!i.because.trim())return{outcome:"failed",detail:"archive requires --because (a reason the record keeps)"};let e=f({contextDir:o.contextDir,graph:n,verdicts:new Map([[p,{resolution:"rejected",reason:i.because}]]),by:s});return e.errors?{outcome:"failed",detail:e.errors.map(r=>`${r.code}: ${r.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"archived",reason:i.because}),{outcome:"retired"})}if(i.v==="approve"){let e=f({contextDir:o.contextDir,graph:n,verdicts:new Map([[p,{resolution:"approved"}]]),by:s});return e.errors?{outcome:"failed",detail:e.errors.map(r=>`${r.code}: ${r.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"approved"}),{outcome:"applied"})}if(i.v==="merge"||i.v==="keep_both"){if(t.kind!=="PAIR"||!t.pair)return{outcome:"failed",detail:`${t.ref} is not a PAIR card`};let e=n.resolve(t.pair.candidate_cid);if(!e)return{outcome:"failed",detail:`pair candidate ${t.pair.candidate_ref} names nothing`};let r=n.tipOf(e.cid);if(i.v==="merge"){let d=k({contextDir:o.contextDir,graph:n,survivor:r,merged:p,reason:`pair merge: duplicate of ${t.pair.candidate_ref} (score ${t.pair.score})`,by:s});return d.errors?{outcome:"failed",detail:d.errors.map(c=>`${c.code}: ${c.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"pair-merged",reason:t.pair.candidate_ref}),{outcome:"committed",detail:`merged into ${t.pair.candidate_ref} \u2014 survivor stays derived`})}let u=f({contextDir:o.contextDir,graph:n,verdicts:new Map([[p,{resolution:"approved"}],[r,{resolution:"approved"}]]),by:s});return u.errors?{outcome:"failed",detail:u.errors.map(d=>`${d.code}: ${d.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"pair-kept-both",reason:t.pair.candidate_ref}),{outcome:"applied",detail:"both promoted as distinct"})}return{outcome:"failed",detail:`verdict ${i.v} does not apply to a ${t.kind} card`}}export{I as a,N as b,Y as c};
2
+ import{a as S}from"./chunk-I7TIGB7K.js";import{a as x,b as P,c as C,d as V,e as j}from"./chunk-FFFB5BXL.js";import{a as R,b as D}from"./chunk-ALCE5RLK.js";import{C as y,c as b,r as f,s as k}from"./chunk-GP7WD4UY.js";import{f as w}from"./chunk-FQNQVC5O.js";function I(o,t){return{contextDir:o,rootSid:t,locks:w(o,t),probe:S(o,{resolveAlias:i=>P(i),embed:(i,s)=>C(i,s),readVector:(i,s)=>V(o,i,s),writeVector:(i,s,n)=>j(o,i,s,n)})}}var N=new Set(["archive"]);async function Y(o,t,i,s){let n=y(o.contextDir);if(i.v==="defer")return{outcome:"deferred"};if(t.kind==="MODIFY_HELD"){if(!t.heldPayload)return{outcome:"failed",detail:`${t.ref} carries no held payload`};let e=t.heldPayload;if(i.v==="keep_current"){if(!e.event_id)return{outcome:"failed",detail:`this held row has no durable event id \u2014 resume the owner to drop it: kane-cli context extract --resume ${e.sid}`};let{commitChatTurn:r}=await import("./chat-committer-HDE3TP5I.js"),u=r({contextDir:o.contextDir,graph:n,ops:[{kind:"resolve_question",questionId:`drop-held:${e.sid}:${e.tempRef}`,resolution:"deferred",eventId:e.event_id}],by:s});return u.errors?{outcome:"failed",detail:u.errors.map(d=>`${d.code}: ${d.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"held-dropped"}),{outcome:"committed",detail:"held payload dropped (recorded) \u2014 the owner's resume will not re-present it"})}if(i.v==="approve"){let r=e.content._held??null;if(!r?.source_id||!r.source_cid||!r.anchor||!r.quote)return{outcome:"failed",detail:`this held row carries no committable provenance \u2014 resume the owner to apply it: kane-cli context extract --resume ${e.sid}`};{let a=n.mediaOf(r.source_cid),m=R(o.contextDir,n,r.source_cid),g=a.format==="image"?null:m?D(m):null;if(a.format!=="image"&&g===null)return{outcome:"failed",detail:`the pinned source ${r.source_id} (${r.source_cid.slice(0,19)}) has no citable text to verify this held row against \u2014 resume the owner: kane-cli context extract --resume ${e.sid}`};let _=b(a,{anchor:r.anchor,quote:r.quote},g);if(_.length>0)return{outcome:"failed",detail:`held provenance does not verify against the pinned source (${_.map($=>`${$.code}: ${$.detail}`).join("; ")}) \u2014 resume the owner: kane-cli context extract --resume ${e.sid}`}}let{commitProposal:u}=await import("./committer-IYQPXG6C.js"),{_held:d,...c}=e.content,q={version:1,read_basis:n.latestHash,source:{source_id:r.source_id,source_cid:r.source_cid},use_cases:[{temp_ref:e.tempRef,title:String(c.title??e.tempRef),...c.summary!==void 0?{summary:c.summary}:{},risk:String(c.risk??"med"),cite:{anchor:r.anchor,quote:r.quote},depends_on_hint:[],matches_existing:null}]},l=await x(I(o.contextDir,o.rootSid??`review-${process.pid}`),{verb:"maintain",ucTargets:[],newBuCandidates:[{tempRef:e.tempRef,title:String(c.title??e.tempRef),probeText:`${String(c.title??"")} ${String(c.summary??"")}`.trim()}],sourcePins:[{source_id:r.source_id,source_cid:r.source_cid}],readBasis:n.latestHash,...e.event_id?{eventIds:[e.event_id]}:{}},a=>{let m=u({contextDir:o.contextDir,graph:a.graph,proposal:q,proposalId:null,verdicts:new Map([[e.tempRef,{resolution:"skipped"}]]),by:s,autoName:!0,allowStaleBasis:!0,eventIds:e.event_id?[e.event_id]:a.eventIds("maintain",1),sid:a.sid,probeHits:a.probeHits});return m.errors!==null?{errors:m.errors}:{result:m,record:m.record}}),h=l.ok&&"result"in l?l.result:{record:null,errors:l.ok?null:l.kind==="validation"?l.errors:[{code:l.kind==="contended"?l.err.code:"UNSETTLED",detail:l.kind==="contended"?`held by ${l.err.holder?.owner_sid??"another session"}`:"concurrent activity kept moving the store"}]};return h.errors?{outcome:"failed",detail:h.errors.map(a=>`${a.code}: ${a.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"held-applied"}),{outcome:"committed",detail:`held payload committed (derived) by ${s.id}`})}return{outcome:"failed",detail:`verdict ${i.v} does not apply to a MODIFY_HELD card`}}let v=n.resolve(t.ref);if(!v)return{outcome:"failed",detail:`${t.ref} names nothing in the graph`};let p=n.tipOf(v.cid);if(i.v==="archive"){if(!i.because||!i.because.trim())return{outcome:"failed",detail:"archive requires --because (a reason the record keeps)"};let e=f({contextDir:o.contextDir,graph:n,verdicts:new Map([[p,{resolution:"rejected",reason:i.because}]]),by:s});return e.errors?{outcome:"failed",detail:e.errors.map(r=>`${r.code}: ${r.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"archived",reason:i.because}),{outcome:"retired"})}if(i.v==="approve"){let e=f({contextDir:o.contextDir,graph:n,verdicts:new Map([[p,{resolution:"approved"}]]),by:s});return e.errors?{outcome:"failed",detail:e.errors.map(r=>`${r.code}: ${r.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"approved"}),{outcome:"applied"})}if(i.v==="merge"||i.v==="keep_both"){if(t.kind!=="PAIR"||!t.pair)return{outcome:"failed",detail:`${t.ref} is not a PAIR card`};let e=n.resolve(t.pair.candidate_cid);if(!e)return{outcome:"failed",detail:`pair candidate ${t.pair.candidate_ref} names nothing`};let r=n.tipOf(e.cid);if(i.v==="merge"){let d=k({contextDir:o.contextDir,graph:n,survivor:r,merged:p,reason:`pair merge: duplicate of ${t.pair.candidate_ref} (score ${t.pair.score})`,by:s});return d.errors?{outcome:"failed",detail:d.errors.map(c=>`${c.code}: ${c.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"pair-merged",reason:t.pair.candidate_ref}),{outcome:"committed",detail:`merged into ${t.pair.candidate_ref} \u2014 survivor stays derived`})}let u=f({contextDir:o.contextDir,graph:n,verdicts:new Map([[p,{resolution:"approved"}],[r,{resolution:"approved"}]]),by:s});return u.errors?{outcome:"failed",detail:u.errors.map(d=>`${d.code}: ${d.detail}`).join("; ")}:(o.signals?.({ref:t.ref,verdict:"pair-kept-both",reason:t.pair.candidate_ref}),{outcome:"applied",detail:"both promoted as distinct"})}return{outcome:"failed",detail:`verdict ${i.v} does not apply to a ${t.kind} card`}}export{I as a,N as b,Y as c};
@@ -1,4 +1,4 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as $}from"./chunk-MMBBQ4OZ.js";import{j as h}from"./chunk-O7U5BVX5.js";import{a as w}from"./chunk-RZ4F3BHX.js";import{b as v}from"./chunk-NJJQL54J.js";import{spawn as V,spawnSync as _}from"child_process";import{createServer as K}from"net";import{mkdirSync as g,openSync as W,readFileSync as I,renameSync as j,rmSync as x,statSync as Y,writeFileSync as M}from"fs";import{readFile as q}from"fs/promises";import{dirname as l,join as y}from"path";var G=[4723,4724,4725,4726,4727,4728,4729,4730],X={emulator:4750,simulator:4790},z=40,E=2e3,D=3e4,T=500,Ce=["emulator","simulator"];function Q(e){return y(v,"mobile",`appium-server-${e}.log`)}function m(){return y(v,"mobile","appium-servers.json")}function Z(){return y(v,"mobile","appium-servers.lock")}var ee=1e4,re=50;function C(e){let r=Z();try{g(l(r),{recursive:!0})}catch{return e()}let n=!1;for(let o=0;o<re;o++)try{g(r),n=!0;break}catch{try{Date.now()-Y(r).mtimeMs>ee&&x(r,{recursive:!0,force:!0})}catch{}ne(10)}try{return e()}finally{if(n)try{x(r,{recursive:!0,force:!0})}catch{}}}function ne(e){try{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}catch{}}function te(){try{let e=JSON.parse(I(m(),"utf8"));return Array.isArray(e)?e:[]}catch{return[]}}function oe(e){let r=m();g(l(r),{recursive:!0});let n=`${r}.tmp`;M(n,JSON.stringify(e,null,2)),j(n,r)}function se(e,r,n){return`Another mobile session is already running${n?` on ${n}`:""}. Wait for it to finish, or close the terminal running it.`}var A=class extends Error{constructor(n,o){super(n);this.port=o;this.name="DeviceBusyError"}};function ie(e){return w(e,{signal:AbortSignal.timeout(E)}).then(r=>r.ok,()=>!1)}async function ae(e,r){try{return(await w(`http://127.0.0.1:${e}/session/${r}`,{method:"DELETE",signal:AbortSignal.timeout(E)})).ok}catch{return!1}}function R(e){let r=e?.value;return Array.isArray(r)?r.map(n=>{let o=n??{},t=o.capabilities??o;return{...typeof o.id=="string"?{id:o.id}:{},caps:t}}):[]}async function ue(e){try{let r=await w(`http://127.0.0.1:${e}/sessions`,{signal:AbortSignal.timeout(E)});return r.ok?R(await r.json()):[]}catch{return[]}}var ce=["udid","appium:udid","deviceUDID","appium:deviceUDID","deviceName","appium:deviceName"];function L(){let e=r=>{try{let n=_("curl",["-s","--noproxy","*","--max-time","2",...r],{encoding:"utf8",timeout:5e3});return{ok:n.status===0,stdout:n.stdout??""}}catch{return{ok:!1,stdout:""}}};return{readState:()=>{try{let r=JSON.parse(I(m(),"utf8"));return Array.isArray(r)?r:[]}catch{return[]}},alive:b,getJson:r=>{let n=e([r]);if(n.ok)try{return JSON.parse(n.stdout)}catch{return}},del:r=>{let n=e(["-o","/dev/null","-w","%{http_code}","-X","DELETE",r]);return n.ok&&/^2\d\d$/.test(n.stdout.trim())}}}function Le(e,r={}){let n={...L(),...r},o=0;try{for(let t of n.readState()){if(!n.alive(t.pid))continue;let i=R(n.getJson(`http://127.0.0.1:${t.port}/sessions`));for(let s of i)s.id&&de(s.caps,e.udid,e.displayName)&&n.del(`http://127.0.0.1:${t.port}/session/${s.id}`)&&(o+=1)}}catch{}return o}function de(e,r,n){let o=[r,n].filter(t=>!!t).map(t=>t.toLowerCase());for(let t of ce){let i=e[t];if(typeof i=="string"&&o.includes(i.toLowerCase()))return!0}return!1}function pe(e,r,n){let o=W(n.logPath,"a"),t=V(e,r,{stdio:["ignore",o,o],detached:!0,env:{...process.env,...n.env}});return t.unref(),t.pid}async function le(e,r){for(let n=e;n<e+r;n++)if(await new Promise(t=>{let i=K();i.once("error",()=>t(!1)),i.once("listening",()=>i.close(()=>t(!0))),i.listen(n)}))return n;throw new Error(`No free port for the managed Appium server in ${e}-${e+r-1}.`)}function b(e){try{return process.kill(e,0),!0}catch{return!1}}function P(e){try{let r=_("ps",["-o","comm=","-p",String(e)],{encoding:"utf8",timeout:2e3});if(r.status!==0)return!1;let n=r.stdout.trim().toLowerCase();return n===""?!0:n.includes("node")||n.includes("kane")}catch{return!0}}function k(e){try{process.kill(e)}catch{}}async function me(){try{let e=JSON.parse(await q(m(),"utf8"));return Array.isArray(e)?e:[]}catch{return[]}}async function fe(e){let r=process.pid,n=e.filter(o=>o.owner===r);C(()=>{let o=[];for(let t of te())t.owner!==r&&(Se(t)?o.push(t):b(t.pid)&&k(t.pid));oe([...o,...n])})}function Se(e){return e.owner===void 0?!1:b(e.owner)&&P(e.owner)}function ve(){return{probe:ie,sessions:ue,deleteSession:ae,spawn:pe,freePort:le,alive:b,kill:k,readState:me,writeState:fe,owner:process.pid,depsEnv:e=>h().environment(e),bundleVersion:async e=>(await h().status(e)).version,nodeBinary:process.execPath,env:process.env,os:process.platform,now:()=>Date.now(),sleep:e=>new Promise(r=>setTimeout(r,e))}}function we(e,r,n){if(!e.platformToolsDir)return{};let o=n==="win32"?";":":",t=$(r),i=t?.root??l(e.platformToolsDir),s=t?.platformToolsDir??e.platformToolsDir;return{ANDROID_HOME:i,ANDROID_SDK_ROOT:i,PATH:r.PATH?`${s}${o}${r.PATH}`:s}}async function ge(e){let r=await e.readState(),n=[],o=[];for(let t of r)t.owner!==void 0&&e.alive(t.owner)&&(e.ownerIsOurs??P)(t.owner)?n.push(t):o.push(t);for(let t of o){let i=e.ownerIsOurs??P;e.alive(t.pid)&&i(t.pid)&&e.kill(t.pid)}return o.length>0&&await e.writeState(n),n}async function Je(e,r={}){if(r.appiumUrl)return{result:"external",url:r.appiumUrl};let n={...ve(),...r.deps},o=await ge(n),t=o.filter(a=>a.owner===n.owner),i=new Set(t.map(a=>a.port)),s=new Set(o.map(a=>a.port));if(r.device){let a=await ye(n,s,i,e);if(a!==null)throw new A(se(r.device,a.port,a.device),a.port)}let c=await n.bundleVersion(e),u=t.find(a=>a.deviceClass===e&&(a.bundleVersion??c)===c);if(u&&await n.probe(`http://127.0.0.1:${u.port}/status`))return{result:"reused",url:`http://127.0.0.1:${u.port}`};for(let a of t.filter(S=>S.deviceClass===e&&S!==u))n.kill(a.pid);u&&n.kill(u.pid);let d=await n.depsEnv(e);if(!d.appiumHome)throw new Error(`The managed dependencies for the ${e} class are not installed.
2
+ import{a as $}from"./chunk-MMBBQ4OZ.js";import{j as h}from"./chunk-WBHSPN55.js";import{a as w}from"./chunk-RZ4F3BHX.js";import{b as v}from"./chunk-B2ZGG7WM.js";import{spawn as V,spawnSync as _}from"child_process";import{createServer as K}from"net";import{mkdirSync as g,openSync as W,readFileSync as I,renameSync as j,rmSync as x,statSync as Y,writeFileSync as M}from"fs";import{readFile as q}from"fs/promises";import{dirname as l,join as y}from"path";var G=[4723,4724,4725,4726,4727,4728,4729,4730],X={emulator:4750,simulator:4790},z=40,E=2e3,D=3e4,T=500,Ce=["emulator","simulator"];function Q(e){return y(v,"mobile",`appium-server-${e}.log`)}function m(){return y(v,"mobile","appium-servers.json")}function Z(){return y(v,"mobile","appium-servers.lock")}var ee=1e4,re=50;function C(e){let r=Z();try{g(l(r),{recursive:!0})}catch{return e()}let n=!1;for(let o=0;o<re;o++)try{g(r),n=!0;break}catch{try{Date.now()-Y(r).mtimeMs>ee&&x(r,{recursive:!0,force:!0})}catch{}ne(10)}try{return e()}finally{if(n)try{x(r,{recursive:!0,force:!0})}catch{}}}function ne(e){try{Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,e)}catch{}}function te(){try{let e=JSON.parse(I(m(),"utf8"));return Array.isArray(e)?e:[]}catch{return[]}}function oe(e){let r=m();g(l(r),{recursive:!0});let n=`${r}.tmp`;M(n,JSON.stringify(e,null,2)),j(n,r)}function se(e,r,n){return`Another mobile session is already running${n?` on ${n}`:""}. Wait for it to finish, or close the terminal running it.`}var A=class extends Error{constructor(n,o){super(n);this.port=o;this.name="DeviceBusyError"}};function ie(e){return w(e,{signal:AbortSignal.timeout(E)}).then(r=>r.ok,()=>!1)}async function ae(e,r){try{return(await w(`http://127.0.0.1:${e}/session/${r}`,{method:"DELETE",signal:AbortSignal.timeout(E)})).ok}catch{return!1}}function R(e){let r=e?.value;return Array.isArray(r)?r.map(n=>{let o=n??{},t=o.capabilities??o;return{...typeof o.id=="string"?{id:o.id}:{},caps:t}}):[]}async function ue(e){try{let r=await w(`http://127.0.0.1:${e}/sessions`,{signal:AbortSignal.timeout(E)});return r.ok?R(await r.json()):[]}catch{return[]}}var ce=["udid","appium:udid","deviceUDID","appium:deviceUDID","deviceName","appium:deviceName"];function L(){let e=r=>{try{let n=_("curl",["-s","--noproxy","*","--max-time","2",...r],{encoding:"utf8",timeout:5e3});return{ok:n.status===0,stdout:n.stdout??""}}catch{return{ok:!1,stdout:""}}};return{readState:()=>{try{let r=JSON.parse(I(m(),"utf8"));return Array.isArray(r)?r:[]}catch{return[]}},alive:b,getJson:r=>{let n=e([r]);if(n.ok)try{return JSON.parse(n.stdout)}catch{return}},del:r=>{let n=e(["-o","/dev/null","-w","%{http_code}","-X","DELETE",r]);return n.ok&&/^2\d\d$/.test(n.stdout.trim())}}}function Le(e,r={}){let n={...L(),...r},o=0;try{for(let t of n.readState()){if(!n.alive(t.pid))continue;let i=R(n.getJson(`http://127.0.0.1:${t.port}/sessions`));for(let s of i)s.id&&de(s.caps,e.udid,e.displayName)&&n.del(`http://127.0.0.1:${t.port}/session/${s.id}`)&&(o+=1)}}catch{}return o}function de(e,r,n){let o=[r,n].filter(t=>!!t).map(t=>t.toLowerCase());for(let t of ce){let i=e[t];if(typeof i=="string"&&o.includes(i.toLowerCase()))return!0}return!1}function pe(e,r,n){let o=W(n.logPath,"a"),t=V(e,r,{stdio:["ignore",o,o],detached:!0,env:{...process.env,...n.env}});return t.unref(),t.pid}async function le(e,r){for(let n=e;n<e+r;n++)if(await new Promise(t=>{let i=K();i.once("error",()=>t(!1)),i.once("listening",()=>i.close(()=>t(!0))),i.listen(n)}))return n;throw new Error(`No free port for the managed Appium server in ${e}-${e+r-1}.`)}function b(e){try{return process.kill(e,0),!0}catch{return!1}}function P(e){try{let r=_("ps",["-o","comm=","-p",String(e)],{encoding:"utf8",timeout:2e3});if(r.status!==0)return!1;let n=r.stdout.trim().toLowerCase();return n===""?!0:n.includes("node")||n.includes("kane")}catch{return!0}}function k(e){try{process.kill(e)}catch{}}async function me(){try{let e=JSON.parse(await q(m(),"utf8"));return Array.isArray(e)?e:[]}catch{return[]}}async function fe(e){let r=process.pid,n=e.filter(o=>o.owner===r);C(()=>{let o=[];for(let t of te())t.owner!==r&&(Se(t)?o.push(t):b(t.pid)&&k(t.pid));oe([...o,...n])})}function Se(e){return e.owner===void 0?!1:b(e.owner)&&P(e.owner)}function ve(){return{probe:ie,sessions:ue,deleteSession:ae,spawn:pe,freePort:le,alive:b,kill:k,readState:me,writeState:fe,owner:process.pid,depsEnv:e=>h().environment(e),bundleVersion:async e=>(await h().status(e)).version,nodeBinary:process.execPath,env:process.env,os:process.platform,now:()=>Date.now(),sleep:e=>new Promise(r=>setTimeout(r,e))}}function we(e,r,n){if(!e.platformToolsDir)return{};let o=n==="win32"?";":":",t=$(r),i=t?.root??l(e.platformToolsDir),s=t?.platformToolsDir??e.platformToolsDir;return{ANDROID_HOME:i,ANDROID_SDK_ROOT:i,PATH:r.PATH?`${s}${o}${r.PATH}`:s}}async function ge(e){let r=await e.readState(),n=[],o=[];for(let t of r)t.owner!==void 0&&e.alive(t.owner)&&(e.ownerIsOurs??P)(t.owner)?n.push(t):o.push(t);for(let t of o){let i=e.ownerIsOurs??P;e.alive(t.pid)&&i(t.pid)&&e.kill(t.pid)}return o.length>0&&await e.writeState(n),n}async function Je(e,r={}){if(r.appiumUrl)return{result:"external",url:r.appiumUrl};let n={...ve(),...r.deps},o=await ge(n),t=o.filter(a=>a.owner===n.owner),i=new Set(t.map(a=>a.port)),s=new Set(o.map(a=>a.port));if(r.device){let a=await ye(n,s,i,e);if(a!==null)throw new A(se(r.device,a.port,a.device),a.port)}let c=await n.bundleVersion(e),u=t.find(a=>a.deviceClass===e&&(a.bundleVersion??c)===c);if(u&&await n.probe(`http://127.0.0.1:${u.port}/status`))return{result:"reused",url:`http://127.0.0.1:${u.port}`};for(let a of t.filter(S=>S.deviceClass===e&&S!==u))n.kill(a.pid);u&&n.kill(u.pid);let d=await n.depsEnv(e);if(!d.appiumHome)throw new Error(`The managed dependencies for the ${e} class are not installed.
3
3
  Run \`kane-cli doctor --target ${e} --install\` to install them, or pass --appium-url for an external server.`);let p=await n.freePort(X[e],z),O=`http://127.0.0.1:${p}`,J=l(d.appiumHome),U=y(J,"appium","node_modules","appium","index.js"),N=Q(e);r.onProgress?.(`starting the managed Appium server (${e}, port ${p})\u2026`);let f=n.spawn(n.nodeBinary,[U,"--port",String(p),"--allow-insecure=uiautomator2:adb_shell"],{env:{APPIUM_HOME:d.appiumHome,...we(d,n.env,n.os)},logPath:N}),B=n.now()+D,F=Math.ceil(D/T)+1;for(let a=0;a<F&&n.now()<B;a++)if(await n.sleep(T),await n.probe(`${O}/status`)){if(f!==void 0){let S=t.filter(H=>H.deviceClass!==e);await n.writeState([...S,{port:p,pid:f,owner:n.owner,deviceClass:e,...c?{bundleVersion:c}:{},startedAt:new Date(n.now()).toISOString()}])}return r.onProgress?.("Appium server ready"),{result:"started",url:O}}throw f!==void 0&&n.kill(f),new Error(`The managed Appium server (${e}) did not answer on ${p} within ${D/1e3}s.
4
4
  Check its log: ${N}`)}async function ye(e,r=[],n=[],o){let t=new Set(n),i=new Set([...G,...r]);for(let s of i)if(!t.has(s))for(let c of await e.sessions(s)){if(!c.id)continue;if(o){let d=be(c.caps);if(d&&d!==o)continue}let u=De(c.caps);return{port:s,...u?{device:u}:{}}}return null}function be(e){let r=t=>{let i=e[t];return typeof i=="string"?i.toLowerCase():""},n=r("platformName")||r("appium:platformName");if(n.includes("ios"))return"simulator";if(n.includes("android"))return"emulator";let o=r("appium:automationName")||r("automationName");if(o.includes("xcuitest"))return"simulator";if(o.includes("uiautomator"))return"emulator"}var he=["appium:deviceName","deviceName","appium:udid","udid","appium:deviceUDID","deviceUDID"];function De(e){for(let r of he){let n=e[r];if(typeof n=="string"&&n.trim())return n}}function Ue(e={}){let r={...L(),kill:k,writeState:Ae,...e.deps};try{let n=r.readState(),o=e.owner??process.pid,t=n.filter(s=>s.owner===o&&(!e.deviceClass||s.deviceClass===e.deviceClass));for(let s of t){if(!r.alive(s.pid))continue;let c=R(r.getJson(`http://127.0.0.1:${s.port}/sessions`));for(let u of c)u.id&&r.del(`http://127.0.0.1:${s.port}/session/${u.id}`);r.kill(s.pid)}let i=new Set(t.map(s=>`${s.port}:${s.pid}`));C(()=>{r.writeState(r.readState().filter(s=>!i.has(`${s.port}:${s.pid}`)))})}catch{}}function Ae(e){try{let r=m();g(l(r),{recursive:!0}),M(r,JSON.stringify(e,null,2))}catch{}}export{Ce as a,Q as b,se as c,Le as d,ve as e,Je as f,ye as g,Ue as h};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{e as c}from"./chunk-XMTSHHYQ.js";import{d as l}from"./chunk-AKX4VRRR.js";function h(f,o,u){let n=o.resolve(u);if(!n)return{target:null,entries:[]};let t=new Set([n.cid]),r=n.cid;for(;o.superseded.has(r);){let s=o.superseded.get(r);if(typeof s!="string"||t.has(s))break;t.add(s),r=s}let d=o.nodeLabel.get(n.cid)??"(unknown)",{records:p}=c(f),i=[];for(let s of p){for(let e of s.nodes)t.has(e.cid)&&i.push({seq:s.seq,ts:s.ts,kind:"minted",detail:`minted ${e.label} ${e.cid}`});for(let e of s.judgements??[])t.has(e.about)&&i.push({seq:s.seq,ts:s.ts,kind:"judgement",rationale:e.rationale,detail:`judgement on ${e.about}`,by:e.by});for(let e of s.review)t.has(e.id)&&i.push({seq:s.seq,ts:s.ts,kind:"review",detail:`${e.resolution}${e.reason?` \u2014 ${e.reason}`:""}`,by:e.by});for(let e of s.supersessions)e.kind==="node"&&(t.has(e.old)||e.new!==null&&t.has(e.new))&&i.push({seq:s.seq,ts:s.ts,kind:"supersession",detail:`${e.old} \u2192 ${String(e.new)} \u2014 ${e.reason}`,by:e.by});for(let e of s.names??[])t.has(e.cid)&&i.push({seq:s.seq,ts:s.ts,kind:"name",detail:`named ${e.slug}`,by:e.by});if(d===l.SOURCE)for(let[e,a]of Object.entries(s.source_head_moves))(t.has(a??"")||o.heads.get(e)!==void 0&&t.has(n.cid)&&e===o.getNode(n.cid)?.content?.source_id)&&i.push({seq:s.seq,ts:s.ts,kind:"head_move",detail:`${e} head \u2192 ${String(a)}`})}return i.sort((s,e)=>e.seq-s.seq),{target:{cid:n.cid,tip:n.tip,label:d,slug:o.nameOf.get(n.cid)},entries:i}}export{h as a};
2
+ import{F as c}from"./chunk-3N6IAVD5.js";import{d as l}from"./chunk-AKX4VRRR.js";function h(f,o,u){let n=o.resolve(u);if(!n)return{target:null,entries:[]};let t=new Set([n.cid]),r=n.cid;for(;o.superseded.has(r);){let s=o.superseded.get(r);if(typeof s!="string"||t.has(s))break;t.add(s),r=s}let d=o.nodeLabel.get(n.cid)??"(unknown)",{records:p}=c(f),i=[];for(let s of p){for(let e of s.nodes)t.has(e.cid)&&i.push({seq:s.seq,ts:s.ts,kind:"minted",detail:`minted ${e.label} ${e.cid}`});for(let e of s.judgements??[])t.has(e.about)&&i.push({seq:s.seq,ts:s.ts,kind:"judgement",rationale:e.rationale,detail:`judgement on ${e.about}`,by:e.by});for(let e of s.review)t.has(e.id)&&i.push({seq:s.seq,ts:s.ts,kind:"review",detail:`${e.resolution}${e.reason?` \u2014 ${e.reason}`:""}`,by:e.by});for(let e of s.supersessions)e.kind==="node"&&(t.has(e.old)||e.new!==null&&t.has(e.new))&&i.push({seq:s.seq,ts:s.ts,kind:"supersession",detail:`${e.old} \u2192 ${String(e.new)} \u2014 ${e.reason}`,by:e.by});for(let e of s.names??[])t.has(e.cid)&&i.push({seq:s.seq,ts:s.ts,kind:"name",detail:`named ${e.slug}`,by:e.by});if(d===l.SOURCE)for(let[e,a]of Object.entries(s.source_head_moves))(t.has(a??"")||o.heads.get(e)!==void 0&&t.has(n.cid)&&e===o.getNode(n.cid)?.content?.source_id)&&i.push({seq:s.seq,ts:s.ts,kind:"head_move",detail:`${e} head \u2192 ${String(a)}`})}return i.sort((s,e)=>e.seq-s.seq),{target:{cid:n.cid,tip:n.tip,label:d,slug:o.nameOf.get(n.cid)},entries:i}}export{h as a};
@@ -0,0 +1,7 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as le}from"./chunk-FQNQVC5O.js";import{a as S,e as K,f as C,g as ae,h as j,i as ce,j as de}from"./chunk-AKX4VRRR.js";import{closeSync as Oe,existsSync as Ae,fsyncSync as qe,mkdirSync as xe,openSync as Ce,readFileSync as R,readdirSync as je,renameSync as re,rmSync as te,writeFileSync as Fe}from"fs";import{dirname as un,join as b}from"path";import{createHash as He}from"crypto";function E(e){if(e===null)return"null";let n=typeof e;if(n==="string")return JSON.stringify(e.normalize("NFC"));if(n==="boolean")return e?"true":"false";if(n==="number"){if(!Number.isFinite(e))throw new Error("non-finite number is not canonicalizable");return JSON.stringify(e)}if(Array.isArray(e))return"["+e.map(t=>t===void 0?"null":E(t)).join(",")+"]";if(n==="object"){let t=e,a=new Map;for(let o of Object.keys(t)){if(t[o]===void 0)continue;let c=o.normalize("NFC");if(a.has(c))throw new Error(`canonicalization collision: NFC-equivalent duplicate key ${JSON.stringify(c)}`);a.set(c,t[o])}return"{"+[...a.keys()].sort((o,c)=>Buffer.compare(Buffer.from(o,"utf8"),Buffer.from(c,"utf8"))).map(o=>JSON.stringify(o)+":"+E(a.get(o))).join(",")+"}"}throw new Error("unsupported type for canonicalization: "+n)}function I(e){return He("sha256").update(e).digest("hex")}function F(e,n){return"sha256:"+I(Buffer.from("assurance."+e+"\0"+E(ce(e,n)),"utf8"))}function Sn(e,n,t,a){return"sha256:"+I(Buffer.from("assurance.edge\0"+E({type:e,src:n,dst:t,props:de(e,a)}),"utf8"))}function kn(e,n){return{source_id:e,blob:n}}function Nn(e){return{...e,derived:!0}}import{existsSync as D,mkdirSync as Ge,readFileSync as X,renameSync as We,rmSync as pe,writeFileSync as ze}from"fs";import{dirname as Ke,join as J}from"path";var B=e=>J(e,"derived"),ge=e=>J(B(e),"index.json");function he(e,n){let t=n.startsWith("sha256:")?n.slice(7):n;if(!/^[A-Za-z0-9_-]{2,}$/.test(t))throw new Error(`${n} is not a fingerprint: it cannot name a node file`);return J(B(e),"nodes",t.slice(0,2),t.slice(2)+".json")}function O(){return{applied:{seq:0,hash:null},heads:{},trust:{},nodeLabel:{},forward:{},extracted:[],design_of:{},design_generation:{},exec:{},superseded:{},names:{},archivedReason:{},appliedEvents:[],eventDigests:{},completeness:{},srcOwner:{},conv:{},media:{},design_phases:{},edgeRetractions:{}}}function M(e){let n=ge(e);if(!D(n))return null;try{let t=JSON.parse(X(n,"utf8"));return t.superseded===void 0||t.names===void 0||t.archivedReason===void 0||t.appliedEvents===void 0||t.conv===void 0||t.media===void 0||t.exec===void 0||t.completeness===void 0||t.srcOwner===void 0||t.design_phases===void 0||t.edgeRetractions===void 0||t.eventDigests===void 0||t.reverse!==void 0?null:t}catch{return null}}function me(e,n){Ge(Ke(e),{recursive:!0});let t=`${e}.tmp-${process.pid}`;ze(t,n),We(t,e)}function k(e,n,t,a,i={}){let o=i.writeNodeFiles!==!1,c=new Set(n.extracted),p=new Set(n.appliedEvents);t.forEach((s,h)=>{for(let r of s.nodes){let d=he(e,r.cid);o&&!D(d)&&me(d,JSON.stringify({label:r.label,content:r.content})+`
3
+ `),!(r.cid in n.trust)&&r.content.derived===!0&&(n.trust[r.cid]="derived"),n.nodeLabel[r.cid]=r.label}for(let[r,d]of Object.entries(s.source_head_moves))typeof d=="string"&&(n.srcOwner[d]=r);if(s.proposal_id!=null&&typeof s.extraction_of=="string"){c.add(s.extraction_of);let r=null;for(let d of s.edges)if(d.type===K.DERIVES&&d.props.source_cid===s.extraction_of&&typeof d.props.source_id=="string"){r=d.props.source_id;break}if(r??=n.srcOwner[s.extraction_of]??null,r!==null){let d=n.completeness[r];(!d||s.seq>=d.seq)&&(n.completeness[r]={source_cid:s.extraction_of,completeness:"complete",...s.extractor_version?{extractor_version:s.extractor_version}:{},at:s.ts,seq:s.seq})}else n.completenessSkipped=(n.completenessSkipped??0)+1}else if(s.proposal_id!=null&&Array.isArray(s.extraction_of))for(let r of s.extraction_of){c.add(r.source_cid);let d=n.completeness[r.source_id];(!d||s.seq>=d.seq)&&(n.completeness[r.source_id]={source_cid:r.source_cid,completeness:r.completeness,...r.extractor_version?{extractor_version:r.extractor_version}:{},at:r.at,seq:s.seq})}s.design_of&&((n.design_of??={})[s.design_of.uc_cid]={engine:s.design_of.engine,seq:s.seq}),s.design_generation&&((n.design_generation??={})[s.design_generation.uc_root]={gen:s.design_generation.generation,seq:s.seq});{let r=s.design_phase;r&&typeof r.uc_root=="string"&&typeof r.phase=="string"&&typeof r.generation=="number"&&((n.design_phases??={})[r.uc_root]??=[]).push({phase:r.phase,generation:r.generation,seq:s.seq,completeness:r.completeness==="partial"?"partial":"complete"})}for(let r of s.executions??[])((n.exec??={})[r.about]??=[]).push(r);for(let r of s.edges){let{quote:d,...g}=r.props,u=n.forward[r.src]??=[];u.some(l=>l.ecid===r.ecid)||u.push({...r,props:g}),s.proposal_id!=null&&r.type===K.DERIVES&&typeof r.props.source_cid=="string"&&c.add(r.props.source_cid)}for(let r of s.review)r.resolution==="approved"||r.resolution==="edited"?(n.trust[r.id]="trusted",delete n.archivedReason[r.id]):r.resolution==="rejected"?(n.trust[r.id]="archived",r.reason?n.archivedReason[r.id]=r.reason:delete n.archivedReason[r.id]):r.resolution==="reset"&&(n.trust[r.id]="derived",delete n.archivedReason[r.id]);for(let r of s.supersessions)r.kind==="node"?r.new===r.old?delete n.superseded[r.old]:n.superseded[r.old]=r.new:r.revoke?(delete n.superseded[r.ecid],delete n.edgeRetractions[r.ecid]):(n.superseded[r.ecid]=null,n.edgeRetractions[r.ecid]={at:s.ts,...r.by?{by:r.by}:{},...r.reason?{reason:r.reason}:{}});for(let r of s.names??[])n.names[r.slug]=r.cid;for(let[r,d]of Object.entries(s.source_head_moves))n.heads[r]=d;if((s.event_ids??[]).forEach((r,d)=>{p.add(r),n.eventDigests[r]=s.event_digests?.[d]??""}),s.media)for(let[r,d]of Object.entries(s.media)){let g=s.source_head_moves[r];typeof g=="string"&&(n.media[g]=d)}if(s.conv){let r=s.source_head_moves[s.conv.source_id];if(typeof r=="string"){let d=n.conv[s.conv.source_id],g=d&&d.chain.length>0?d.chain[d.chain.length-1]:null;s.conv.append_of===g?n.conv[s.conv.source_id]={turns:s.conv.turn,chain:[...d?.chain??[],r]}:n.conv[s.conv.source_id]={turns:s.conv.turn,chain:[r]}}}for(let[r,d]of Object.entries(s.source_head_moves))s.conv?.source_id!==r&&n.conv[r]!==void 0&&(n.conv[r]=typeof d=="string"?{turns:n.conv[r].turns,chain:[d]}:{turns:n.conv[r].turns,chain:[]});n.applied={seq:s.seq,hash:a[h]}}),n.extracted=[...c].sort(),n.appliedEvents=[...p].sort()}function fe(e,n){me(ge(e),JSON.stringify(n)+`
4
+ `)}function Ye(e){let n=J(e,"meta.json");if(D(n))try{let t=JSON.parse(X(n,"utf8"));if(t.schema!==S||t.canonicalizer!=="v1")throw new f(`schema fence: store is ${t.schema}/${t.canonicalizer}, this build is ${S}/${"v1"} \u2014 migrate explicitly (kane-cli context rebuild after upgrading)`)}catch(t){throw t instanceof f?t:new f(`corrupt meta.json in ${e} \u2014 fix or remove it`)}}function Xe(e){Ye(e);let n=M(e),t=n!==null&&n.applied.seq>0?T(e,n.applied.seq):null;if(n!==null&&t!==null&&t!==n.applied.hash&&(pe(B(e),{recursive:!0,force:!0}),n=null),n===null){n=O();let{records:o,hashes:c}=L(e);return k(e,n,o,c),fe(e,n),n}let{records:a,hashes:i}=A(e,n.applied.seq,n.applied.hash);return a.length>0&&(k(e,n,a,i),fe(e,n)),n}function jn(e){return pe(B(e),{recursive:!0,force:!0}),Xe(e)}var Ze=new Set(["CHAIN_ERROR","DERIVED_MISSING","DERIVED_DRIFT","NODE_FILE_MISSING","NODE_FILE_MISMATCH","NODE_FILE_CORRUPT"]);function Fn(e){return Ze.has(e.code)?e.detail:`${e.code}: ${e.detail}`}function Ln(e){let n=[],t=(u,l)=>{n.push({code:u,detail:l})},a=[],i=[];try{({records:a,hashes:i}=L(e))}catch(u){return{ok:!1,issues:[{code:"CHAIN_ERROR",detail:u instanceof f?u.message:String(u)}],records:0}}let o=O();k(e,o,a,i,{writeNodeFiles:!1});let c=M(e),p=0,s=o;if(c!==null&&c.applied.seq<a.length){let u=c.applied.seq;c.applied.hash===(u===0?null:i[u-1])&&(p=a.length-u,s=O(),k(e,s,a.slice(0,u),i.slice(0,u),{writeNodeFiles:!1}))}if(c===null)t("DERIVED_MISSING","derived/index.json missing or corrupt (run kane-cli context rebuild)");else{let u=l=>JSON.stringify(Y(l));for(let l of["applied","heads","trust","nodeLabel","forward","extracted","superseded","names","archivedReason","appliedEvents","eventDigests","conv","media","design_of","design_generation","design_phases","exec","completeness","srcOwner","edgeRetractions"])u(s[l])!==u(c[l])&&t("DERIVED_DRIFT",`derived drift in index.${l} (run kane-cli context rebuild)`)}let h=new Set;for(let u of Object.values(o.forward))for(let l of u)h.add(l.ecid);let r=new Set,d=new Set;for(let u of a)for(let l of u.supersessions)l.kind==="node"?(l.old in o.nodeLabel||t("SUPERSEDE_UNKNOWN_OLD",`${l.old} (record ${u.seq})`),l.new!==null&&l.new!==l.old&&!(l.new in o.nodeLabel)&&t("SUPERSEDE_UNKNOWN_NEW",`${String(l.new)} (record ${u.seq})`),l.new===l.old?r.delete(l.old):(r.has(l.old)&&t("DOUBLE_SUPERSEDE",`${l.old} re-superseded while live (record ${u.seq})`),r.add(l.old))):(h.has(l.ecid)||t("SUPERSEDE_UNKNOWN_ECID",`${l.ecid} (record ${u.seq})`),l.revoke?(d.has(l.ecid)||t("EDGE_ORPHAN_REVOKE",`${l.ecid} revoked without a standing retraction (record ${u.seq})`),d.delete(l.ecid)):(d.has(l.ecid)&&t("EDGE_DOUBLE_RETRACT",`${l.ecid} re-retracted while already retracted (record ${u.seq})`),d.add(l.ecid)));for(let u of Object.keys(o.superseded)){let l=new Set,y=u;for(;y!==null&&y in o.superseded;){if(l.has(y)){t("SUPERSEDE_CYCLE",`chain from ${u} revisits ${y}`);break}l.add(y),y=o.superseded[y]}}for(let[u,l]of Object.entries(o.names))l in o.nodeLabel||t("NAME_UNKNOWN_TARGET",`slug ${u} \u2192 ${l} not in the graph`);for(let u of a)for(let l of u.edges){let y=o.nodeLabel[l.src]??"(unknown)",w=o.nodeLabel[l.dst]??"(unknown)";for(let m of j(l.type,y,w,l.props))t(m.code,`${l.ecid} ${m.detail}`)}let g=new Map;for(let u of Object.values(o.forward))for(let l of u){if(l.ecid in o.superseded)continue;let y=g.get(l.type)??[];y.push(l),g.set(l.type,y)}for(let[u,l]of g){let y=ae(u);if(y?.acyclic){let w=new Map;for(let v of l)w.set(v.src,[...w.get(v.src)??[],v.dst]);let m=new Map,_=v=>{m.set(v,1);for(let z of w.get(v)??[])if(m.get(z)===1||m.get(z)===void 0&&_(z))return!0;return m.set(v,2),!1};for(let v of w.keys())if(m.get(v)===void 0&&_(v)){t("EDGE_CYCLE",`live ${u} edges form a cycle reachable from ${v}`);break}}if(y?.cardinality==="one-live-per-src"||y?.cardinality==="one-live-per-src-and-dst"){let w=new Map;for(let m of l)m.dst in o.superseded||w.set(m.src,[...w.get(m.src)??[],m]);for(let[m,_]of w)_.length>1&&t("CARDINALITY_VIOLATION",`${_.length} live ${u} edges from ${m} (one-live-per-src): ecids ${_.map(v=>v.ecid).join(",")}`)}if(y?.cardinality==="one-live-per-src-and-dst"){let w=new Map;for(let m of l)m.src in o.superseded||m.dst in o.superseded||w.set(m.dst,[...w.get(m.dst)??[],m]);for(let[m,_]of w)_.length>1&&t("CARDINALITY_VIOLATION",`${_.length} live ${u} edges onto ${m} (one-live-per-dst): ecids ${_.map(v=>v.ecid).join(",")}`)}}for(let[u,l]of Object.entries(s.nodeLabel)){let y=he(e,u);if(!D(y)){t("NODE_FILE_MISSING",`missing node file for ${u} (run kane-cli context rebuild)`);continue}try{let w=JSON.parse(X(y,"utf8"));(w.label!==l||F(w.label,w.content)!==u)&&t("NODE_FILE_MISMATCH",`node file content mismatch for ${u} (run kane-cli context rebuild)`);for(let m of C(w.label,w.content))t(m.code,`${u} ${m.detail}`)}catch{t("NODE_FILE_CORRUPT",`corrupt node file for ${u} (run kane-cli context rebuild)`)}}return{ok:n.length===0,issues:n,records:a.length,...p>0?{pending:p}:{}}}function Y(e){return Array.isArray(e)?e.map(Y):e&&typeof e=="object"?Object.fromEntries(Object.entries(e).sort(([n],[t])=>n<t?-1:1).map(([n,t])=>[n,Y(t)])):e}import{join as Qe}from"path";var ye=/^[A-Za-z0-9][A-Za-z0-9._-]*$/;function Z(e){return typeof e=="string"&&e!=="."&&e!==".."&&ye.test(e)}function Dn(e){if(!Z(e))throw new Error(`unsafe logical_id: ${JSON.stringify(e)} \u2014 must match ${String(ye)} (no path separators)`)}function we(e,n){if(!Z(n))throw new Error(`proposal id ${JSON.stringify(n)} is not a plain name (letters, digits, . _ - after a letter or digit)`);return Qe(e,"proposals",n,"proposal.json")}var q=class extends Error{},en=new Set(["UNKNOWN_LABEL","MISSING_FIELD","BAD_ENUM"]),nn=new Set(["UNKNOWN_EDGE_TYPE","ILLEGAL_EDGE","MISSING_SALIENT"]),tn=["nodes","edges","review","supersessions"],rn=/^sha256:[0-9a-f]{64}$/;function sn(e){let n=[];for(let t of e.nodes)n.push(["node cid",t?.cid]);for(let t of e.edges)n.push(["edge ecid",t?.ecid],["edge src",t?.src],["edge dst",t?.dst]);for(let t of e.supersessions)t?.kind==="node"?(n.push(["superseded cid",t.old]),t.new!==null&&n.push(["superseding cid",t.new])):n.push(["retracted ecid",t?.ecid]);for(let t of e.names??[])n.push(["named cid",t?.cid]);return n}function ve(e){let n=M(e),a=n!==null&&(n.applied.seq===0||T(e,n.applied.seq)===n.applied.hash)?n:O(),{records:i,hashes:o}=A(e,a.applied.seq,a.applied.hash);return i.length>0&&k(e,a,i,o,{writeNodeFiles:!1}),a}function be(e,n,t,a){let i=r=>new q(r);for(let r of tn)if(!Array.isArray(t[r]))throw i(`${r} is not a list`);if(typeof t.source_head_moves!="object"||t.source_head_moves===null||Array.isArray(t.source_head_moves))throw i("source_head_moves is not an object");if(t.media!==void 0&&(typeof t.media!="object"||t.media===null||Array.isArray(t.media)))throw i("media is not an object");if(t.names!==void 0&&!Array.isArray(t.names))throw i("names is not a list");for(let[r,d]of sn(t))if(typeof d!="string"||!rn.test(d))throw i(`${r} ${String(d)} is not a sha256 fingerprint`);if(t.proposal_id!=null)try{we(e,t.proposal_id)}catch(r){throw i(r instanceof Error?r.message:String(r))}let o=new Map;for(let r of t.nodes){let d=C(r.label,r.content);for(let g of d)if(en.has(g.code))throw i(`${r.cid} ${g.detail}`);if(!d.some(g=>g.code==="UNKNOWN_FIELD")&&F(r.label,r.content)!==r.cid)throw i(`${r.cid} is not the hash of its content`);o.set(r.cid,r.label)}let c=r=>n.nodeLabel[r]??o.get(r)??"(unknown)",p=r=>r in n.nodeLabel||o.has(r),s=new Set(t.edges.map(r=>r.ecid)),h=r=>s.has(r)||Object.values(n.forward).some(d=>d.some(g=>g.ecid===r));for(let r of t.edges)for(let d of j(r.type,c(r.src),c(r.dst),r.props))if(nn.has(d.code))throw i(`${r.ecid} ${d.detail}`);for(let r of t.supersessions)if(r.kind==="node"){if(!p(r.old))throw i(`supersedes ${r.old}, which the graph does not hold`);if(r.new!==null&&!p(r.new))throw i(`supersedes with ${r.new}, which the graph does not hold`);if(r.new!==r.old&&r.old in n.superseded)throw i(`${r.old} is re-superseded while already superseded`)}else{if(!h(r.ecid))throw i(`retracts edge ${r.ecid}, which the graph does not hold`);if(r.revoke&&!(r.ecid in n.superseded))throw i(`${r.ecid} is revoked without a standing retraction`);if(!r.revoke&&r.ecid in n.superseded)throw i(`${r.ecid} is re-retracted while already retracted`)}for(let r of t.names??[])if(!p(r.cid))throw i(`names ${r.slug} \u2192 ${r.cid}, which the graph does not hold`);k(e,n,[t],[a],{writeNodeFiles:!1});for(let r of t.supersessions){if(r.kind!=="node"||r.new===r.old)continue;let d=new Set,g=r.old;for(;g!==null&&g in n.superseded;){if(d.has(g))throw i(`supersession chain from ${r.old} revisits ${g}`);d.add(g),g=n.superseded[g]}}}import{existsSync as Q,mkdirSync as on,readFileSync as an}from"fs";import{dirname as _e,join as cn}from"path";var ee="unknown",Ee=()=>ee;function Zn(e){ee=e}var dn=["extract","review","pair-merge","names","retire","gap","gap-close","chat","design","execution","parked","exec-supersede","ingest","distill","conv-mint","conv-turn","archive","revert"],Re={extract:{v:1,args:["proposal","proposalId","verdicts","by","flags","judgements","probeHits","eventIds"],pins:["supersedeTarget","matches_existing","conflicts_with","depends_on_hint","read_basis_heads"]},review:{v:1,args:["verdicts","by","holdArchives"],pins:["verdicts","supersedeTarget"]},"pair-merge":{v:1,args:["survivor","merged","reason","by"],pins:["survivor","merged"]},names:{v:1,args:["assignments","by"],pins:["refs"]},retire:{v:1,args:["sourceId","reason","by"],pins:["head"]},gap:{v:1,args:["content","annotates"],pins:["annotates"]},"gap-close":{v:1,args:["targetTip","resolvedBy","sourceId","by"],pins:["gaps"]},chat:{v:1,args:["ops","judgements","by","mintable","sid"],pins:["targets","enhance","redirectTo","retract","conv"]},design:{v:1,args:["ucRef","sections","by","engine","force","forceScope","reason","generationTicket","templateVersion","phase","phaseCompleteness","eventIds","sid"],pins:["ucRef","automates","verifies","reuses","scope","depends_on","exercises","scoped_to_repoints","judgements","body_tags","forceScope"]},execution:{v:1,args:["facts","by","eventIds"],pins:["facts"]},parked:{v:1,args:["line"],pins:["facts"]},"exec-supersede":{v:1,args:["tip","raw","fileId","by"],pins:["tip","imports"]},ingest:{v:1,args:["source_id","blob","label","media","derived_blobs","eventIds"],pins:["prior_head"]},distill:{v:1,args:["watermark","by"],pins:["events"]},"conv-mint":{v:1,args:["sessionStamp","by"],pins:[]},"conv-turn":{v:1,args:["sourceId","text","force","by"],pins:["append_of"]},archive:{v:1,args:["ref","reason","by"],pins:["ref"]},revert:{v:1,args:["seq","reason","by"],pins:["target"]}};function P(e){if(typeof e!="object"||e===null||Array.isArray(e))return!1;let n=Object.getPrototypeOf(e);return n===Object.prototype||n===null}function V(e){return e===null||typeof e=="string"||typeof e=="boolean"?!0:typeof e=="number"?Number.isFinite(e):Array.isArray(e)?e.every(V):P(e)&&Object.values(e).every(V)}var ln=e=>typeof e=="string"&&dn.includes(e);function $e(e){if(!P(e))return"intent is missing: every append names the intent it fulfils";if(!ln(e.verb))return`intent verb ${String(e.verb)} is not a writer this build knows`;let n=Re[e.verb].v;if(e.v!==n)return`intent ${e.verb} v ${String(e.v)} is not the version this build writes (v ${n})`;if(!P(e.pins)||!V(e.pins))return"intent pins is not a plain JSON object";if(!V(e.args))return"intent args is not JSON";let t=Re[e.verb];for(let a of t.args??[])if(!P(e.args)||!(a in e.args))return`intent ${e.verb} arg ${a} is missing`;for(let a of t.pins??[])if(!(a in e.pins))return`intent ${e.verb} pin ${a} is missing`;return null}function Qn(e){return JSON.parse(JSON.stringify(e))}function Se(e,n){let t=n.slice(7);return cn(e,"intents",t.slice(0,2),`${t}.json`)}function et(e,n){let t=Se(e,n);return Q(t)?JSON.parse(an(t,"utf8")):null}function ke(e,n,t){let a=Se(e,t.hash),i=_e(a),o=_e(i),c=!Q(o),p=c||!Q(i);on(i,{recursive:!0});let s={v:n.v,verb:n.verb,args:n.args,pins:n.pins,born:{...t,build:ee}};return ne(a,JSON.stringify(s)+`
5
+ `),p&&U(o),c&&U(e),a}var f=class extends Error{},Le="run kane-cli context sync or kane-cli context pull to continue, or kane-cli context sync doctor --abort to close it",Ne="run kane-cli context sync doctor to see it, and kane-cli context sync doctor --abort to set the unreadable ledger aside; the backup stays";function fn(e){if(!e||typeof e!="object"||Array.isArray(e))return null;let n=e;if(n.state!=="open"&&n.state!=="closed"||!Array.isArray(n.items))return null;let t=["applied","held","skipped","deduped"];for(let a of n.items){if(!a||typeof a!="object"||Array.isArray(a))return null;let i=a.outcome;if(i===void 0)continue;if(!i||typeof i!="object"||Array.isArray(i))return null;let o=Object.keys(i);if(o.length!==1||!t.includes(o[0]))return null;let c=i[o[0]];if(!c||typeof c!="object")return null}return n}var H=class extends f{constructor(t,a=Le){super(t);this.remedy=a}code="SYNC_REBASE_PENDING"};function pn(e){let n=b(e,"sync","replay");if(!Ae(n))return null;let t=je(n).filter(a=>a.endsWith(".json")&&!a.endsWith(".receipt.json")).sort().reverse();for(let a of t){let i=a.slice(0,-5),o;try{o=fn(JSON.parse(R(b(n,a),"utf8")))}catch{o=null}if(o===null)return{id:i,decisions:0,unreadable:!0};if(o.state==="open")return{id:i,decisions:o.items.filter(c=>c.outcome!==void 0&&c.outcome!==null&&"held"in c.outcome).length}}return null}function gn(e){let n=pn(e);if(!n)return;if(n.unreadable)throw new H(`rebase ${n.id} has a ledger this store cannot read (sync/replay/${n.id}.json); this store takes no other change until it is set aside \u2014 ${Ne}`,Ne);let t=n.decisions>0?`a rebase (${n.id}) is open with ${n.decisions} decision${n.decisions===1?"":"s"} unresolved`:`a rebase (${n.id}) is open and not finished`;throw new H(`${t}; this store takes no other change until it is finished \u2014 ${Le}`)}function hn(e){let n=e.args?.by,t=typeof n=="object"&&n!==null&&typeof n.kind=="string"&&typeof n.id=="string";return{build:Ee(),...t?{by:n}:{}}}function mn(e){return"sha256:"+I(Buffer.from(E({verb:e.verb,args:e.args,pins:e.pins})))}function W(e,n){if(e.schema_version!==void 0&&e.schema_version!==S)throw new f(`record ${n} is stamped ${e.schema_version}, this build reads ${S} \u2014 migrate explicitly`);if(e.parents!==void 0&&!(e.prev_hash===null?e.parents.length===0:e.parents.length===1&&e.parents[0]===e.prev_hash))throw new f(`record ${n}: parents does not mirror prev_hash \u2014 multi-parent records need a DAG-aware reader`)}var G=class extends f{},se=class extends f{code="CONTEXT_APPEND_BUSY"};function ie(e,n){xe(e,{recursive:!0});let t=b(e,".lock"),a=Date.now()+(n?n.deadlineMs:2e3);for(;;)try{return Fe(t,`${process.pid}
6
+ `,{flag:"wx"}),()=>{try{te(t)}catch{}}}catch(i){if(i.code!=="EEXIST")throw i;if(n){let o=null,c=null;try{c=R(t,"utf8");let p=Number.parseInt(c.trim(),10);o=Number.isInteger(p)?p:null}catch{c=null}if(c!==null&&o!==null&&!le(o)){let p=`${t}.break-${process.pid}-${Date.now()}`;try{re(t,p);let s=null;try{s=R(p,"utf8")}catch{s=null}if(s===null||s===c)te(p,{force:!0});else try{re(p,t)}catch{te(p,{force:!0})}}catch(s){if(s.code!=="ENOENT")throw s}continue}if(Date.now()>a)throw new se(`.context append is busy: ${t} held ${o===null?"by a holder that has not written its pid":`by live pid ${o}`} past the deadline`);Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,25+Math.floor(Math.random()*50));continue}if(Date.now()>a)throw new f(`.context is locked by another process \u2014 remove ${t} if that process is gone`);Atomics.wait(new Int32Array(new SharedArrayBuffer(4)),0,0,25)}}var yn=/^\d{6}-[0-9a-f]{12}\.json$/,wn=999999;function Te(e,n){if(e>wn)throw new f(`${n}: position ${e} is above 999,999, the highest a six-digit record file can name \u2014 the sharded commits layout is a follow-up; nothing was written`)}var $=e=>b(e,"commits");function N(e){return"sha256:"+I(Buffer.from(E(e),"utf8"))}var oe=class extends f{constructor(t){let a=[...new Set(t.map(i=>Number(i.slice(0,6))))];super(`FORKED: more than one record at position${a.length>1?"s":""} ${a.join(", ")} \u2014 another copy of this store was merged into commits/. kane-cli context sync doctor lists the files; move the foreign ones out and rebuild.`);this.duplicates=t}code="CONTEXT_FORKED"},De="000001-000000000000.json",Je="store is mid-reset: run kane-cli context sync doctor";function dt(e){return JSON.stringify({seq:1,prev_hash:null,schema_version:"assurance/context@1 :: mid-reset :: run kane-cli context sync doctor",kane:{fence:"reset",nonce:e,journal:"sync/journal.json"}})}function x(e){let{files:n,midReset:t}=Be(e);if(t)throw new f(Je);return n}function Be(e){let n=$(e);if(!Ae(n))return{files:[],midReset:!1};let t=je(n).filter(o=>yn.test(o)).sort(),a=t.indexOf(De);a>=0&&t.splice(a,1);let i=[];for(let o=0;o<t.length;o++){let c=t[o].slice(0,6);(o>0&&t[o-1].slice(0,6)===c||o+1<t.length&&t[o+1].slice(0,6)===c)&&i.push(t[o])}if(i.length>0)throw new oe(i);return{files:t,midReset:a>=0}}function L(e){let n=x(e),t=[],a=[],i=null;return n.forEach((o,c)=>{let p=R(b($(e),o),"utf8"),s;try{s=JSON.parse(p)}catch(d){throw new f(`corrupt commit record ${o}: ${String(d)}`)}if(s.seq!==c+1)throw new f(`sequence gap: expected seq ${c+1}, ${o} has ${s.seq}`);if(s.prev_hash!==i)throw new f(`broken chain at ${o}: prev_hash ${String(s.prev_hash)} != ${String(i)}`);W(s,o);let h=N(s),r=o.slice(7,19);if(!h.slice(7).startsWith(r))throw new f(`tampered record ${o}: content hash ${h} does not match filename`);t.push(s),a.push(h),i=h}),{records:t,hashes:a}}function Me(e){return Pe(e,x(e))}function Pe(e,n){if(n.length===0)return null;let t=n[n.length-1],a=R(b($(e),t),"utf8"),i;try{i=JSON.parse(a)}catch(c){throw new f(`corrupt tail record ${t}: ${String(c)}`)}W(i,t);let o=N(i);if(!o.slice(7).startsWith(t.slice(7,19)))throw new f(`tampered tail record ${t}: content hash ${o} does not match filename`);if(i.seq!==n.length)throw new f(`sequence gap at tail: ${n.length} record files but tail seq is ${i.seq}`);return{seq:i.seq,hash:o}}function lt(e){return Me(e)?.hash??null}var vn="corrupt";function T(e,n){let t=x(e)[n-1];if(!t)return null;try{return N(JSON.parse(R(b($(e),t),"utf8")))}catch{return vn}}function A(e,n,t){let a=x(e);if(a.length<n)throw new f(`derived state is ahead of the record log (applied seq ${n}, ${a.length} records) \u2014 run kane-cli context rebuild`);let i=[],o=[],c=t;for(let p=n;p<a.length;p++){let s=a[p],h=R(b($(e),s),"utf8"),r;try{r=JSON.parse(h)}catch(g){throw new f(`corrupt commit record ${s}: ${String(g)}`)}if(r.seq!==p+1)throw new f(`sequence gap: expected seq ${p+1}, ${s} has ${r.seq}`);if(r.prev_hash!==c)throw new f(`broken chain at ${s}: prev_hash ${String(r.prev_hash)} != ${String(c)}`);W(r,s);let d=N(r);if(!d.slice(7).startsWith(s.slice(7,19)))throw new f(`tampered record ${s}: content hash ${d} does not match filename`);i.push(r),o.push(d),c=d}return{records:i,hashes:o}}function ut(e,n){if(n.seq===0){if(n.hash!==null)throw new f("watermark not in chain: seq 0 cannot carry a hash");return L(e)}let t=x(e);if(t.length<n.seq)throw new f(`watermark not in chain: seq ${n.seq} is beyond the ${t.length}-record chain`);let a=t[n.seq-1],i;try{i=JSON.parse(R(b($(e),a),"utf8"))}catch(c){throw new f(`watermark record ${a} unreadable: ${String(c)}`)}let o=N(i);if(o!==n.hash)throw new f(`watermark not in chain: seq ${n.seq} hashes ${o}, watermark claims ${String(n.hash)}`);return A(e,n.seq,n.hash)}function ft(e,n,t){let a=$e(t.intent);if(a!==null)throw new f(`append refused: ${a}; nothing was written`);if("replayed_from"in n)throw new f("append refused: replayed_from is stamped by the append layer from opts.provenance; nothing was written");if("event_digests"in n||"intent_verb"in n||"created_by"in n)throw new f("append refused: event_digests, intent_verb and created_by are stamped by the append layer from the intent; nothing was written");let i=ie(e,t.busyRetry);try{return Ve(e,n,t)}finally{i()}}function pt(e,n){let t=ie(e);try{return Ve(e,n,{})}finally{t()}}function Ve(e,n,t){t.provenance||gn(e);let a=Me(e),i=(a?.seq??0)+1;Te(i,"append");let o=a?.hash??null;if(t.expectPrev!==void 0&&t.expectPrev!==o)throw new G(`concurrent append detected: validated against ${String(t.expectPrev)} but the chain head is ${String(o)} \u2014 re-open and retry`);let c={seq:i,prev_hash:o,...n,schema_version:S,parents:o===null?[]:[o],...t.intent?{intent_verb:t.intent.verb,created_by:hn(t.intent)}:{},...t.intent&&n.event_ids&&n.event_ids.length>0?{event_digests:n.event_ids.map(()=>mn(t.intent))}:{},...t.provenance?{replayed_from:t.provenance.replayed_from}:{}},p=N(c);if(t.provenance)try{be(e,ve(e),c,p)}catch(h){throw h instanceof q?new f(`replayed record would not pass this store's checks: ${h.message}; nothing was written`):h}t.intent&&ke(e,t.intent,{seq:i,hash:p,ts:c.ts});let s=Ue(e,i,p,JSON.stringify(c)+`
7
+ `);return{seq:i,hash:p,file:s,record:c}}function ne(e,n){let t=`${e}.tmp-${process.pid}`,a=Ce(t,"w");try{Fe(a,n),qe(a)}finally{Oe(a)}re(t,e),U(un(e))}function U(e){try{let n=Ce(e,"r");try{qe(n)}finally{Oe(n)}}catch{}}function Ue(e,n,t,a){let i=$(e);xe(i,{recursive:!0});let o=`${String(n).padStart(6,"0")}-${t.slice(7,19)}.json`,c=b(i,o);return ne(c,a),c}var Ie=100;function gt(e,n,t,a={}){if(n.length===0)return[];if(n.length>Ie)throw new f(`import: batch of ${n.length} exceeds ${Ie} records per lock \u2014 chunk it`);let i=n[0].seq;if(!Number.isInteger(i)||i<1)throw new f(`import: batch starts at seq ${String(i)}, positions start at 1`);Te(i+n.length-1,"import");let o=[],c=t;n.forEach(({seq:s,raw:h},r)=>{let d=i+r;if(s!==d)throw new f(`import: expected seq ${d}, batch carries ${String(s)}`);let g;try{g=JSON.parse(h)}catch(y){throw new f(`import: record ${s} is not JSON: ${String(y)}`)}if(g===null||typeof g!="object"||Array.isArray(g))throw new f(`import: record ${s} is not a JSON object`);let u=g;if(u.seq!==s)throw new f(`import: expected seq ${s}, record carries ${String(u.seq)}`);if(u.prev_hash!==c)throw new f(`import: record ${s} is sealed onto ${String(u.prev_hash)}, local tail is ${String(c)}`);W(u,`import@${s}`);let l=N(u);o.push({seq:s,hash:l,raw:h}),c=l});let p=a.lockHeld?()=>{}:ie(e);try{let s=Be(e);if(s.midReset&&!bn(e,a.underReset))throw new f(Je);let h=Pe(e,s.files);if((h?.hash??null)!==t)throw new G(`import: local tail moved to ${String(h?.seq??0)} ${String(h?.hash??null)} \u2014 re-plan the pull`);if((h?.seq??0)!==i-1)throw new f(`import: batch starts at seq ${i}, local tail is at ${String(h?.seq??0)}`);return o.map(({seq:r,hash:d,raw:g})=>({seq:r,hash:d,file:Ue(e,r,d,g)}))}finally{p()}}function bn(e,n){if(!n)return!1;try{return JSON.parse(R(b($(e),De),"utf8")).kane?.nonce===n.nonce}catch{return!1}}export{E as a,I as b,F as c,Sn as d,kn as e,Nn as f,Dn as g,we as h,q as i,be as j,Zn as k,$e as l,Qn as m,Se as n,et as o,f as p,Le as q,Ne as r,fn as s,H as t,pn as u,gn as v,mn as w,G as x,se as y,ie as z,wn as A,N as B,oe as C,De as D,dt as E,L as F,Me as G,lt as H,vn as I,T as J,A as K,ut as L,ft as M,pt as N,ne as O,U as P,Ie as Q,gt as R,B as S,he as T,O as U,M as V,k as W,Xe as X,jn as Y,Fn as Z,Ln as _};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as Ve}from"./chunk-APZCLVZD.js";import{a as Ye}from"./chunk-FBYB3SRE.js";import{a as We}from"./chunk-YCCUBQY4.js";import{a as qe}from"./chunk-VE3SUJMA.js";import{a as be}from"./chunk-3CCD434H.js";import{a as Ge}from"./chunk-GNAPBOAJ.js";import{a as He}from"./chunk-7KAPHA56.js";import{b as Le,x as u}from"./chunk-NJJQL54J.js";import{a as re}from"./chunk-HCBYKLMW.js";import{a as h,b as f,h as Fe,i as Se,k as Ne}from"./chunk-C44QQJR4.js";import{a as we}from"./chunk-6YGTRKDT.js";import{e as $}from"./chunk-UR6MHSHU.js";var je=$(we(),1);import{readFileSync as ct,writeFileSync as ut,mkdirSync as ft}from"fs";import{dirname as dt,join as ze}from"path";var mt=ze(Le,"command-history.json"),Dt=ze(Le,"generate-history.json"),ht=200,De=class{entries;filePath;max;constructor(t=mt,e=ht){this.filePath=t,this.max=e,this.entries=this._load()}push(t){this.entries.length>0&&this.entries[this.entries.length-1]===t||(this.entries.push(t),this.entries.length>this.max&&(this.entries=this.entries.slice(this.entries.length-this.max)),this._save())}getAll(){return[...this.entries]}search(t){let e=t.toLowerCase(),o=[];for(let s=this.entries.length-1;s>=0;s--)this.entries[s].toLowerCase().includes(e)&&o.push(this.entries[s]);return o}_load(){if(this.filePath===null)return[];try{let t=ct(this.filePath,"utf-8"),e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}_save(){if(this.filePath!==null)try{ft(dt(this.filePath),{recursive:!0}),ut(this.filePath,JSON.stringify(this.entries)+`
2
+ import{a as Ve}from"./chunk-O5AS2ZIX.js";import{a as Ye}from"./chunk-4BBDKWM3.js";import{a as We}from"./chunk-YCCUBQY4.js";import{a as qe}from"./chunk-VE3SUJMA.js";import{a as be}from"./chunk-OO5GMBVI.js";import{a as Ge}from"./chunk-BAKJPQGU.js";import{a as He}from"./chunk-OH2NSBO6.js";import{b as Le,y as u}from"./chunk-B2ZGG7WM.js";import{a as re}from"./chunk-HCBYKLMW.js";import{a as h,b as f,h as Fe,i as Se,k as Ne}from"./chunk-C44QQJR4.js";import{a as we}from"./chunk-6YGTRKDT.js";import{e as $}from"./chunk-UR6MHSHU.js";var je=$(we(),1);import{readFileSync as ct,writeFileSync as ut,mkdirSync as ft}from"fs";import{dirname as dt,join as ze}from"path";var mt=ze(Le,"command-history.json"),Dt=ze(Le,"generate-history.json"),ht=200,De=class{entries;filePath;max;constructor(t=mt,e=ht){this.filePath=t,this.max=e,this.entries=this._load()}push(t){this.entries.length>0&&this.entries[this.entries.length-1]===t||(this.entries.push(t),this.entries.length>this.max&&(this.entries=this.entries.slice(this.entries.length-this.max)),this._save())}getAll(){return[...this.entries]}search(t){let e=t.toLowerCase(),o=[];for(let s=this.entries.length-1;s>=0;s--)this.entries[s].toLowerCase().includes(e)&&o.push(this.entries[s]);return o}_load(){if(this.filePath===null)return[];try{let t=ct(this.filePath,"utf-8"),e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}_save(){if(this.filePath!==null)try{ft(dt(this.filePath),{recursive:!0}),ut(this.filePath,JSON.stringify(this.entries)+`
3
3
  `)}catch{}}};function kt(n){let t=(0,je.useRef)(null);return t.current||(t.current=new De(n)),t.current}var D=$(we(),1);var ke=$(we(),1);var Z=$(re(),1);function Xe({history:n,onSelect:t,onClose:e}){let[o,s]=(0,ke.useState)(""),[l,m]=(0,ke.useState)(0),v=o?n.search(o).slice(0,8):[];return Se((b,d)=>{if(d.escape){e();return}if(d.return){v.length>0&&v[l]?t(v[l]):e();return}if(d.upArrow){m(S=>Math.max(0,S-1));return}if(d.downArrow){m(S=>Math.min(v.length-1,S+1));return}if(d.backspace||d.delete){s(S=>S.slice(0,-1)),m(0);return}b&&!d.ctrl&&!d.meta&&(s(S=>S+b),m(0))}),(0,Z.jsxs)(h,{flexDirection:"column",marginLeft:2,borderStyle:"single",paddingX:1,children:[(0,Z.jsx)(f,{color:u.muted,bold:!0,children:"reverse search"}),(0,Z.jsxs)(h,{gap:1,children:[(0,Z.jsx)(f,{color:u.dim,children:"search:"}),(0,Z.jsx)(f,{children:o}),(0,Z.jsx)(f,{color:u.orange,children:"\u2588"})]}),v.length>0&&(0,Z.jsx)(f,{children:" "}),v.map((b,d)=>(0,Z.jsx)(h,{marginLeft:2,children:(0,Z.jsxs)(f,{color:d===l?u.orange:u.dim,bold:d===l,children:[d===l?"\u25B8 ":" ",b]})},`${d}-${b}`))]})}var X=$(re(),1);function Je({commands:n,selectedIndex:t}){return n.length===0?null:(0,X.jsx)(h,{flexDirection:"column",marginBottom:0,children:n.map((e,o)=>{let s=o===t;return e.disabled?(0,X.jsxs)(h,{children:[(0,X.jsx)(f,{color:u.dim,children:s?"\u276F ":" "}),(0,X.jsxs)(f,{color:u.dim,children:["/",e.name]}),(0,X.jsxs)(f,{color:u.dim,children:[" ",e.disabledReason??e.description]})]},e.name):(0,X.jsxs)(h,{children:[(0,X.jsx)(f,{color:s?u.orange:u.dim,children:s?"\u276F ":" "}),(0,X.jsxs)(f,{color:s?u.orange:void 0,bold:s,children:["/",e.name]}),e.args&&(0,X.jsxs)(f,{color:u.dim,children:[" ",e.args]}),(0,X.jsxs)(f,{color:u.dim,children:[" ",e.description]})]},e.name)})})}var Ze=$(we(),1);var q=$(re(),1),et={scenario:"Scenarios",case:"Test Cases",file:"Files",artifact:"Artifact candidates",installed:"Installed on device"};function Qe(n){let t={scenario:0,case:0,file:0,artifact:0,installed:0};for(let e of n)t[e.kind]++;return["scenario","case","file","artifact","installed"].filter(e=>t[e]>0).map(e=>`${t[e]} ${et[e]}`).join(" \xB7 ")}var Pe=7;function tt({items:n,selectedIndex:t,accent:e=u.orange}){let o=n.length;if(o===0)return null;let s=Math.floor(Pe/2),l=o<=Pe?0:Math.max(0,Math.min(t-s,o-Pe)),m=Math.min(o,l+Pe),v=l,b=o-m;return(0,q.jsxs)(h,{flexDirection:"column",marginBottom:0,children:[v>0&&(0,q.jsx)(h,{children:(0,q.jsx)(f,{color:u.dim,children:` \u22EF ${v} above \u2014 ${Qe(n.slice(0,l))}`})}),n.slice(l,m).map((d,S)=>{let U=l+S,F=d.selectable!==!1,E=U===t&&F,R=S===0||n[U-1].kind!==d.kind;return(0,q.jsxs)(Ze.default.Fragment,{children:[R&&(0,q.jsx)(h,{children:(0,q.jsx)(f,{color:u.dim,children:et[d.kind]})}),(0,q.jsxs)(h,{children:[(0,q.jsx)(f,{color:E?e:u.dim,children:E?"\u276F ":" "}),(0,q.jsxs)(f,{color:E?e:F?void 0:u.dim,bold:E,children:[d.label,d.reason?` \u2014 ${d.reason}`:""]})]})]},`${d.kind}:${d.value}:${U}`)}),b>0&&(0,q.jsx)(h,{children:(0,q.jsx)(f,{color:u.dim,children:` \u22EF ${b} more \u2014 ${Qe(n.slice(m))}`})})]})}var Be=$(we(),1);var gt=27,pt=127,xt=11;function bt(n){return n>=64&&n<=126}function Tt(n,t){n===xt&&t({killToEnd:!0,ctrl:!0,raw:String.fromCharCode(n)})}function vt(n,t){n===pt&&t({backspace:!0,meta:!0,raw:"\x1B\x7F"})}function wt(n,t){let e=n.map(s=>String.fromCharCode(s)).join(""),o=/^\[1;([0-9]+)([A-D])$/.exec(e);if(o){let s=parseInt(o[1],10),l=o[2],m={raw:"\x1B"+e};if(s===2)m.shift=!0;else if(s===3)m.meta=!0;else if(s===5)m.ctrl=!0;else return;l==="A"?m.arrowUp=!0:l==="B"?m.arrowDown=!0:l==="C"?m.arrowRight=!0:l==="D"&&(m.arrowLeft=!0),t(m);return}if(e==="[H"||e==="[1~"||e==="[7~"){t({home:!0,raw:"\x1B"+e});return}if(e==="[F"||e==="[4~"||e==="[8~"){t({end:!0,raw:"\x1B"+e});return}if(e==="[3;5~"){t({delete:!0,ctrl:!0,raw:"\x1B"+e});return}if(e==="[3;3~"){t({delete:!0,meta:!0,raw:"\x1B"+e});return}}function St(n,t){n===72?t({home:!0,raw:"\x1BO"+String.fromCharCode(n)}):n===70&&t({end:!0,raw:"\x1BO"+String.fromCharCode(n)})}function Et(){let n="IDLE",t=[];function e(){n="IDLE",t=[]}return{feed(o,s){for(let l of o)n==="IDLE"?l===gt?(n="ESC",t=[]):Tt(l,s):n==="ESC"?l===91?(n="CSI",t=[]):l===79?(n="SS3",t=[]):(vt(l,s),e()):n==="CSI"?(t.push(l),bt(l)&&(wt([91,...t],s),e())):n==="SS3"&&(St(l,s),e())},flushIdle(o){n==="ESC"&&t.length===0&&o({raw:"\x1B"}),e()}}}function nt(n,t={}){let e=(0,Be.useRef)(n);e.current=n;let{stdin:o}=Fe();(0,Be.useEffect)(()=>{if(t.isActive===!1||!o)return;let s=Et(),l=null,m=v=>{l&&(clearTimeout(l),l=null);let b=Buffer.isBuffer(v)?v:Buffer.from(v,"binary");s.feed(b,d=>e.current(d)),l=setTimeout(()=>{s.flushIdle(d=>e.current(d)),l=null},50)};return o.on("data",m),()=>{o.removeListener("data",m),l&&clearTimeout(l)}},[t.isActive,o])}var w=$(re(),1);function yt(n,t){let e=t-1;for(;e>=0&&n[e]!=="@"&&n[e]!==" "&&n[e]!==`
4
4
  `;)e--;return e<0||n[e]!=="@"||e>0&&n[e-1]!==" "&&n[e-1]!==`
5
5
  `?null:{at:e,query:n.slice(e+1,t).join("")}}function rt(n,t,e){for(let o=t+e;o>=0&&o<n.length;o+=e)if(n[o]?.selectable!==!1)return o;return t}function At(n){let t=n.findIndex(e=>e.selectable!==!1);return t===-1?0:t}var Oe=10;function Rt(n){return n.replace(/\x1b?\[200~/g,"").replace(/\x1b?\[201~/g,"").replace(/\r\n/g,`
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{d as j}from"./chunk-RKXHVP2Z.js";import{a as L}from"./chunk-TCAHDVII.js";import{a as O}from"./chunk-5Y2G4NC7.js";import{a as D}from"./chunk-YCCUBQY4.js";import{y as l}from"./chunk-B2ZGG7WM.js";import{a as E}from"./chunk-HCBYKLMW.js";import{a as g,b as s,i as I,k as B}from"./chunk-C44QQJR4.js";import{a as P}from"./chunk-6YGTRKDT.js";import{e as $}from"./chunk-UR6MHSHU.js";var H=$(P(),1);var w=$(E(),1),K=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function J(e){let t=e.replace(/…$/,"");return t&&t.charAt(0).toLowerCase()+t.slice(1)}function N(e,t){if(e.length<=t)return e;if(t<=1)return"\u2026";let r=Math.ceil((t-1)/2),n=Math.floor((t-1)/2);return`${e.slice(0,r)}\u2026${n>0?e.slice(-n):""}`}function Z({status:e,meta:t,tallies:r,keys:n,child:d,cols:c}){let{stdout:h}=B(),m=c??h?.columns??80,f=e.kind==="working"||e.kind==="child-working",[i,b]=(0,H.useState)(0);O(()=>b(a=>a+1),f?120:null);let k=K[i%K.length],u,p;switch(e.kind){case"working":u=`${k} ${e.step}${e.elapsedS!==void 0?` \xB7 ${e.elapsedS}s`:""}`,p=l.assuranceAccent;break;case"waiting":u=`\u25CF waiting on you${e.pending?` \u2014 ${e.pending} question${e.pending===1?"":"s"}`:""}`,p=l.amber;break;case"idle":u="\u25CF idle",p=l.assuranceAccent;break;case"card":u=`\u25CF card ${e.n} of ${e.m}`,p=l.amber;break;case"child-working":u=`${k} child: ${e.step}`,p=l.assuranceAccent;break;case"child-waiting":u="\u25CF child waiting on you",p=l.amber;break}let A=d?`${t.verb} \u25B8 ${d.verb}`:t.verb,S=d?.sid?t.sid?`${N(t.sid,14)} \u25B8 ${d.sid}`:d.sid:t.sid,C=t.env==="prod"?"":t.env,_=[A,S,C].filter(Boolean),v=" \xB7 ",R=u.length+v.length+_.join(v).length,T=t.subject;if(T){let a=m-R-v.length;T=a>=8?N(T,a):void 0}let M=[A,...T?[T]:[],S,C].filter(Boolean).join(v);return(0,w.jsxs)(g,{flexDirection:"column",children:[(0,w.jsx)(s,{color:l.muted,children:"\u2500".repeat(Math.max(1,m))}),(0,w.jsxs)(s,{children:[(0,w.jsx)(s,{color:p,children:u}),(0,w.jsx)(s,{color:l.dim,children:`${v}${M}`})]}),(0,w.jsx)(s,{color:l.dim,children:r.items.length>0?r.items.join(v):" "}),(0,w.jsx)(s,{color:l.muted,children:n.join(v)})]})}var y=$(P(),1);function ne({onToggleThinking:e,onCtrlC:t,explorer:r,panel:n}){let c=(0,y.useRef)(null),h=(0,y.useRef)(""),m=()=>{c.current&&clearTimeout(c.current),c.current=null,h.current=""};return(0,y.useEffect)(()=>m,[]),I((f,i)=>{if(i.ctrl&&f==="t"){e();return}if(i.ctrl&&f==="c"){t();return}if(!i.ctrl&&f.includes("")){t();return}if(!i.ctrl&&f.includes("")){e();return}if(r&&r.isOpen()){let b=()=>{c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{m(),r.onBack()},150)};if(c.current){if(i.upArrow||i.downArrow||i.return){m(),i.return?r.onEnter():r.onMove(i.upArrow?-1:1);return}if(h.current+=f,h.current==="["){b();return}let k=h.current;m();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="",b();return}return}if(n&&n.isFocused()){let b=()=>{c.current&&clearTimeout(c.current),c.current=setTimeout(()=>{m(),n.onBack()},150)};if(c.current){if(i.upArrow||i.downArrow||i.return||i.leftArrow||i.rightArrow){m(),i.return?n.onSelect():i.leftArrow?n.onLeft?.():i.rightArrow?n.onRight?.():n.onMove(i.upArrow?-1:1);return}if(h.current+=f,h.current==="["){b();return}let k=h.current;m();let u=/^\[([ABCD])/.exec(k);if(u){u[1]==="A"||u[1]==="B"?n.onMove(u[1]==="A"?-1:1):u[1]==="C"?n.onRight?.():n.onLeft?.();return}n.onBack();return}if(i.upArrow){n.onMove(-1);return}if(i.downArrow){n.onMove(1);return}if(i.leftArrow){n.onLeft?.();return}if(i.rightArrow){n.onRight?.();return}if(i.return){n.onSelect();return}if(i.escape){h.current="",b();return}if(/^[1-9]$/.test(f)){n.onDigit(Number(f));return}if(i.tab){n.onTab?.();return}if(f===" "&&n.isMulti()){n.onSpace();return}if(f&&!i.ctrl&&!i.meta){n.onType(f);return}return}}),null}var o=$(E(),1);function V(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 F(e){let t=V(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:F(e).length}var q={ADD:{color:l.green??"green"},MODIFY:{color:"yellow"},ARCHIVE:{color:l.red},REVIEW:{color:"cyan"},PAIR:{color:"magenta"}},Q=60;function ce({card:e,position:t,sel:r=0,focused:n=!1,freeText:d=null,editorIntent:c="steer"}){let{stdout:h}=B(),m=h?.columns??80,f=m<Q,i=F(e),b=W(e),k=q[e.kind],u=a=>n&&r===a?(0,o.jsx)(s,{color:l.assuranceAccent,children:"\u276F"}):" ",p=e.impact,A=p&&"stale_refs"in p&&p.stale_refs.length>0?`${e.kind==="ARCHIVE"?"retiring leaves":"approving marks"} ${p.stale_refs.length} item(s) stale`+((p.direct_refs?.length??0)>0?` \u2014 ${p.direct_refs.length} directly touched: ${p.direct_refs.join(", ")}`:""):p&&"design_children"in p?`${e.kind==="REVIEW"?"archiving drops":"merging folds"} ${p.design_children} design child(ren)`:null,S=e.provenance&&e.provenance!==e.why?e.provenance:e.origin??null,C=[{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}]:[]],_=Math.max(...C.map(a=>a.label.length)),v="? reconcile",R=`item ${t.n} of ${t.of}`,T=(0,o.jsxs)(g,{flexDirection:"column",children:[(0,o.jsx)(g,{paddingLeft:2,children:(0,o.jsxs)(s,{bold:!0,children:[(0,o.jsx)(s,{color:k.color,children:`[${e.kind}]`}),` ${L(e.title)}`]})}),C.map((a,x)=>(0,o.jsx)(g,{paddingLeft:2,children:(0,o.jsxs)(s,{children:[(0,o.jsx)(s,{color:l.dim,children:`${a.label.padEnd(_)} `}),(0,o.jsx)(s,{color:a.dimmer?l.dim:void 0,children:a.text})]})},`f-${x}`)),e.diffSummary?(0,o.jsx)(g,{paddingLeft:2,children:(0,o.jsx)(s,{color:l.dim,children:e.diffSummary})}):(e.diff??[]).map((a,x)=>(0,o.jsx)(g,{paddingLeft:4,children:(0,o.jsx)(s,{color:a.op==="-"?"red":"green",children:`${a.op==="-"?"\u2212":"+"} ${a.field==="criteria"?"criterion":a.field}: ${a.text}`})},`d-${x}`)),(e.citeLines??[]).map((a,x)=>(0,o.jsx)(g,{paddingLeft:2,children:(0,o.jsx)(s,{color:l.dim,children:a})},`c-${x}`)),(0,o.jsx)(s,{children:" "}),i.map((a,x)=>(0,o.jsxs)(s,{children:[u(x),` ${x+1}. ${a.label}`,(0,o.jsx)(s,{color:l.dim,children:` \u2014 ${a.detail}`})]},`o-${x}`)),b!==null||d&&c==="because"?d?(0,o.jsxs)(g,{flexDirection:"column",children:[(0,o.jsxs)(g,{children:[(0,o.jsxs)(s,{children:[(0,o.jsx)(s,{color:l.assuranceAccent,children:"\u276F"})," ",(0,o.jsx)(s,{color:l.dim,children:"\u270E "})]}),(0,o.jsx)(D,{value:d.value,onChange:d.onChange,onSubmit:d.onSubmit,onCancel:d.onCancel,placeholder:c==="because"?"why archive it?":"say what to adjust"})]}),(0,o.jsx)(s,{color:l.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"})]}):b!==null?(0,o.jsxs)(s,{children:[u(b)," ",(0,o.jsx)(s,{color:l.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(f)return(0,o.jsxs)(g,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,o.jsx)(s,{bold:!0,color:l.assuranceAccent,children:v}),(0,o.jsx)(s,{color:l.dim,children:R}),T]});let M=Math.max(2,Math.min(m-1,100)-v.length-R.length);return(0,o.jsxs)(g,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,o.jsxs)(s,{children:[(0,o.jsx)(s,{bold:!0,color:l.assuranceAccent,children:v})," ".repeat(M),(0,o.jsx)(s,{color:l.dim,children:R})]}),(0,o.jsx)(s,{children:" "}),T]})}var Y={"acceptance criteria":1,scenarios:2,"acceptance criteria + exercises":3,"tests + gaps":4};function ue(e,t){let r=[],n=j(e.turns).entries.length;if(t==="design"){let c;for(let m=e.ledger.length-1;m>=0;m--){let f=e.ledger[m];if(f.kind==="banner"&&f.text.startsWith("designing: ")){c=f.text.slice(11);break}}let h=c?Y[c]:void 0;h&&r.push(`phase ${h}/4`),n>0&&r.push(`${n} item${n===1?"":"s"} this session`)}else n>0&&r.push(`${n} saved as draft${n===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 fe(e,t){let r=[],n=e.applied+e.committed+e.retired;r.push(`${n} 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 he(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(n=>n.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 ge(e,t){let r=["\u2191\u2193 select","\u23CE confirm"];return e.some(n=>n.free)&&r.push("\u270E type your own"),t.escBack&&r.push("esc back"),{keys:r}}function be(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{J as a,Z as b,ne as c,V as d,F as e,W as f,ce as g,ue as h,fe as i,he as j,ge as k,be as l};
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{j as be,k as se,l as ae,m as xe,n as De,o as ce}from"./chunk-75I46VTM.js";import{a as re,c as ie,d as Pe,f as oe}from"./chunk-SQDQADWD.js";import{d as Ee}from"./chunk-6J5T5FEY.js";import{a as S}from"./chunk-TCAHDVII.js";import{a as ee,b as W,c as ne,d as G,e as $e,g as O,h as te}from"./chunk-W5TTF7GB.js";import{a as _e}from"./chunk-BZAGVBCX.js";import{b as J,c as Q,d as X}from"./chunk-P3JUE2RM.js";import{j as ke,l as Re}from"./chunk-AHXOKBVE.js";import{P as E,Q as ge,S as he,U as ve,V as we,W as ye,X as Z}from"./chunk-6LGED4FC.js";import{C as I}from"./chunk-GP7WD4UY.js";import{H as B,t as pe}from"./chunk-3N6IAVD5.js";import{existsSync as Oe,statSync as Te}from"fs";import{basename as q,resolve as U}from"path";function Ie(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 le(e,n){let t=[...e.rows.filter(s=>s.kind!=="REMOVE").map(s=>[s.kind,S(s.ref),s.reason,Ie(s.impact)]),...e.archive.map(s=>["ARCHIVE",S(s.ref),s.why,Ie(s.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(...Ee(["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 Ue=new Set(["interactive","agent","ci","override"]);function Be(e,n){if(e.mode!==void 0&&!Ue.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 Se(e){let{makeHeadlessIO:n,agentRefusal:t}=await import("./headless-io-3A3BZVQ5.js");return t(n("ndjson","reconcile"),e,"MODE_USAGE")}function Ve(e,n,t,r){if(Q(t)){let m=X(t),a=m?.sourceIdFor(t)??null;if(m===null||a===null)return{error:`--from '${t}' is not a supported remote URL \u2014 supported: ${J.map(f=>f.hint).join("; ")}`};if(r!==void 0&&r!==a)return{error:`--source-id '${r}' does not match this URL's own identity '${a}' \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(a))return{error:`unknown source '${a}' \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(a)==null)return{error:`source '${a}' is retired \u2014 restore it first with \`kane-cli context revert\`, then reconcile`};let _=z(e,a,{remoteUrl:t});return _!==null?{error:_}:{sourceId:a,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=U(n,t);if(!Oe(i)||!Te(i).isFile())return{error:`--from '${t}' is not a file \u2014 pass the changed source document`};let s=ke(i);if(!s.ok)return{error:`--from '${t}' is not an ingestable document \u2014 allowed: ${s.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 d=null;try{d=Re(i)}catch{}return d!==null&&d!==r&&o.heads.get(d)!=null?{error:`'${q(i)}' already backs live source '${d}' \u2014 did you mean --source-id ${d}? To truly move these bytes under '${r}', retire '${d}' first`}:{sourceId:r,filePath:i}}function C(e){return e==null?"(none)":e.slice(0,19)}function K(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 s=n.changeset??[],o=(d,m)=>{let a=s.filter(c=>c.kind===d).length;return a>0?`${a} ${m}`:null},w=[o("ADD","add"),o("MODIFY","modify"),o("ARCHIVE","archive")].filter(Boolean);n.changed&&e.out(`changeset: ${s.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 s=n.changeset??[];e.out(`changeset: ${s.length} item(s)`);for(let o of s)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=de(o.impact,"retiring drops");w&&e.out(` ${w}`)}}e.out(`plan: ${n.rows.length} row(s)`);for(let s of n.rows){e.out(` [${s.kind}] ${S(s.ref)} \u2014 ${s.reason}`);let o=de(s.impact,"approving marks");o&&e.out(` ${o}`),e.out(` provenance: ${s.provenance}`),e.out(` action: ${s.action}`)}}function Ae(e,n){return le({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 de(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 H(e,n,t,r,i,s,o=[],w="override",d,m,a,c,_,f,P){let p;try{p=te(e)}catch(u){return E(r,u instanceof Error?u.message:String(u)),1}try{if(!t){let{runWalkSession:u}=await import("./walk-session-FP52IGLB.js"),{telemetryEnvName:R}=await import("./bootstrap-6IJNZIPT.js");return await u({dir:e,rows:n,archive:o,held:d??null,childMode:w,runDesign:c??null,mark:s,markA:a,...m?{archiveState:m}:{},...f?{meta:{verb:"reconcile",sid:f,env:R()}}:{},...P?{resumeCmd:P}:{},signals:b=>A(e,b.ref,b.verdict,b.reason),..._?{script:_}:{}})}return await Ye(e,n,t,r,i,s,o,w,d,m)}finally{p()}}var F=(e,n)=>e?`kane-cli maintain reconcile --from ${e} --source-id ${n}`:void 0,Le=e=>e===null?void 0:"filePath"in e?e.filePath:e.remoteUrl,L=e=>`${e} high-risk item(s) need a human \u2014 ci mode won't guess. Walk interactively or use --mode agent.`;function T(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 ue(e={}){return{type:"reconcile_summary",applied:0,skipped:0,deferred:0,plan_only:0,failed:0,paused:0,stale_created:0,...e}}var j=ue();async function Y(e,n,t,r,i,s,o,w,d){T(i,n,t);let m=n.changeset.filter(_=>_.kind==="ARCHIVE"&&d?.[_.ref]===void 0),a=n.rows,c;try{c=te(e)}catch(_){return i({type:"error",message:_ instanceof Error?_.message:String(_)}),i(ue()),2}try{return await je(e,n,t,r,i,s,o,a,m,w)}finally{c()}}async function je(e,n,t,r,i,s,o,w,d,m){let a=0,c=0,_=0,f=0,P=0,p=0,u=0,R=new Set,b=(v,g)=>{try{m?.(v,g)}catch{}};for(let[v,g]of w.entries()){i({type:"reconcile_row_start",kind:g.kind,ref:g.ref,...g.impact?{stale:g.impact.stale_refs.length,direct:g.impact.direct_refs?.length??0}:{}});let h=(l,$,x)=>i({type:"reconcile_row_end",kind:g.kind,ref:g.ref,outcome:l,...$!==void 0?{exit_code:$}:{},...x?{detail:x}:{}});if(g.applied){c++,h("skipped");continue}if(g.kind==="REMOVE"){P++,h("plan-only");continue}if(g.held_ref&&n.held){let l=new Set;if(g.kind==="MODIFY"&&g.impact){let x=I(e);for(let M of g.impact.stale_refs){let N=x.resolve(M);N&&x.stale(N.tip)==="fresh"&&l.add(M)}}let $=se(e,n.held,g.held_ref,fe);if(!$.ok){_++,u===0&&(u=1),h("failed",1,$.message);continue}if($.kind==="ADD"){let x=await r($.ref,{yes:!0,mode:o});if(x!==0){x===3?(f++,u===0&&(u=3),h("paused",3)):(_++,u===0&&(u=1),h("failed",x));continue}}a++,$.kind!=="ADD"&&g.impact&&(p+=l.size),b(v,"approved"),A(e,g.ref,$.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve"),h("applied");continue}let k=re(I(e),g.ref);if(!k.ok){c++,h("skipped");continue}let y=k.target;if(R.has(y.ucTip)){c++,h("skipped");continue}if(g.kind==="ADD"){let l=await r(y.seamRef,{yes:!0,mode:o});if(l===3){f++,u===0&&(u=3),h("paused",3);continue}if(l!==0){_++,u===0&&(u=1),h("failed",l);continue}R.add(y.ucTip),a++,b(v,"approved"),A(e,g.ref,"gap-resolved-create"),h("applied")}else{let l=await ie(e,y,{yes:!0,mode:o},s,r,"batch");l.outcome==="evolved"?(R.add(y.ucTip),a++,b(v,"approved"),A(e,g.ref,"gap-resolved-evolve"),h("applied")):l.outcome==="paused"?(f++,u===0&&(u=l.code),h("paused",l.code)):l.outcome==="failed"?(_++,u===0&&(u=1),h("failed",l.code)):(c++,h("skipped"))}}return d.length>0&&(i({type:"reconcile_paused",plan_path:t,pending:d.map(v=>({ref:v.ref,why:v.why}))}),f+=d.length,u===0&&(u=3)),i(ue({applied:a,skipped:c,plan_only:P,failed:_,paused:f,stale_created:p})),u}var fe={kind:"human",id:process.env.USER??"operator"};function A(e,n,t,r){_e(e,{ts:new Date().toISOString(),command:"reconcile-walk",id:n,verdict:t,polarity:"preference",by:fe,target:n,...r!==void 0?{reason:r}:{}})}async function Ye(e,n,t,r,i,s,o=[],w="override",d,m){let a=0,c=0,_=0,f=0,P=0,p=0,u=0,R=new Set;for(let[b,v]of n.entries()){if(v.applied){r.out(`skipped ${v.ref} \u2014 already applied (${v.applied.outcome} at ${v.applied.at})`),c++;continue}let g=l=>{try{s?.(b,l)}catch($){E(r,`could not record applied state for ${v.ref}: ${$ instanceof Error?$.message:String($)}`)}};if(v.kind==="REMOVE"){r.out(`REMOVE ${v.ref} \u2014 plan-only in this release (not executed)`),f++;continue}if(v.held_ref&&d){let l=se(e,d,v.held_ref,fe);if(!l.ok){E(r,`held ${v.ref}: ${l.message}`),P++,u===0&&(u=1);continue}if(r.out(`committed ${l.ref} (${v.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`),p++,u===0&&(u=3),g("approved");continue}if($!==0){E(r,`design run for ${l.ref} ended with exit code ${$}`),P++,u===0&&(u=1),g("approved");continue}}a++,g("approved"),A(e,v.ref,v.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve");continue}let h=I(e),k=re(h,v.ref);if(!k.ok){r.out(`skipped ${v.ref} \u2014 ${k.message}`),c++;continue}let y=k.target;if(R.has(y.ucTip)){r.out(`skipped ${v.ref} \u2014 use-case ${y.display} already handled in this walk`),c++;continue}if(v.kind==="ADD"){let l=await i(y.seamRef,{yes:t,mode:w});if(l===3){r.out(`design session for ${y.display} paused \u2014 resume with the "kane-cli design tests --resume <session>" command printed above; this row lands when that session completes`),p++,u===0&&(u=3);continue}if(l!==0){E(r,`design run for ${y.display} ended with exit code ${l}`),P++,u===0&&(u=1);continue}R.add(y.ucTip),a++,g("approved"),A(e,v.ref,"gap-resolved-create")}else{let l=await ie(e,y,{yes:!0,mode:w},r,i,"batch");l.outcome==="evolved"?(R.add(y.ucTip),a++,g("approved"),A(e,v.ref,"gap-resolved-evolve")):l.outcome==="paused"?(p++,u===0&&(u=l.code)):l.outcome==="failed"?(P++,u===0&&(u=l.code)):c++}}for(let b of o)if(b.kind==="ARCHIVE"&&m?.[b.ref]===void 0){r.out(`[ARCHIVE] ${b.ref} \u2014 ${b.why}`);{let v=de(b.impact,"retiring drops");v&&r.out(` ${v}`)}r.out(" plan-only \u2014 retire belongs to the interactive session (never headless)"),f++}return r.out(`reconcile walk: ${a} applied, ${c} skipped, ${_} deferred, ${f} plan-only`+(P>0?`, ${P} failed`:"")+(p>0?`, ${p} paused`:"")),u}var Ke=new Set(J.map(e=>e.name));function z(e,n,t){let r=I(e),i=r.heads.get(n);if(i==null)return null;let s=r.mediaOf(i);if("remoteUrl"in t){let o=X(t.remoteUrl)?.name??"remote";return s.format!==o?`source '${n}' is backed by ${s.format} content, not a ${o} source \u2014 reconcile it with the --from it was originally ingested from`:null}return Ke.has(s.format)?`source '${n}' is a remote ${s.format} source \u2014 pass its URL to --from, not a file`:null}function me(e,n,t,r){return"remoteUrl"in n?De(e,n.remoteUrl,{out:t.out,err:t.err},r.remoteFindProvider):xe(e,n.filePath)}function Me(e){return e.remote_url!==void 0?{remoteUrl:e.remote_url}:e.backing_path!==void 0?{filePath:e.backing_path}:null}async function He(e,n,t,r,i,s=!1,o=!1){let w=i.seams??{reingest:me(e,t,r,i),reextract:ce(e,{stage:s,hostOut:c=>r.out(c),hostEmit:c=>{c.type!=="run_start"&&i.emitEvent?.(c)},...i.emitEvent?{}:{hostProgress:c=>process.stderr.write(c+`
3
+ `)}})},d=null,m={reingest:w.reingest,reextract:async c=>d=await w.reextract(c)},a;try{r.out(`reconciling ${n}: re-reading the source and comparing against the graph\u2026`),a=await(i.buildPlan??ae)(e,n,m)}catch(c){return E(r,`reconcile failed: ${c instanceof Error?c.message:String(c)}`),null}if(a.changed)if(o)for(let c of Ae(a,d))r.out(c);else K(r,a,d,!1,i.emitEvent);return a}async function Ne(e){let[{render:n},t,{ScrollbackProvider:r},{ChatSurface:i},{makeChatController:s},{makeReconcileDeps:o}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./scrollback-JLPJR25X.js"),import("./ChatSurface-AVL3TJA2.js"),import("./chat-controller-3EPK7UZG.js"),import("./reconcile-deps-X6IGH4CA.js")]),w=t.default??t,d=s(),m=o({contextDir:e,note:a=>d.note(a)});return new Promise(a=>{let c=n(w.createElement(r,null,w.createElement(i,{controller:d,verb:"extract",reconcile:m,autoReview:!0,onReviewExit:()=>{c.unmount(),a(0)},onCtrlC:()=>{c.unmount(),a(m.pending()?3:0)}})),{exitOnCtrlC:!1})})}async function We(e,n,t,r,i){let s=W(e,n);if("error"in s)return E(r,s.error),2;let{plan:o,path:w}=s,d=t==="override"||t==="ci";if(n===void 0&&t==="interactive"&&r.isTTY&&!await r.confirm(`apply plan ${q(w)} for ${o.source_id} (created ${o.created})?`))return r.out(`not applying ${q(w)}`),0;let m=i.runDesignForUc??oe,a=i.runDesignForUc??null,c=i.sessionScript,_=(v,g)=>O(w,v,g),f=(v,g)=>G(w,v,g),P=B(e);if(P===o.head_pin){if(t==="agent"){let g=i.emitEvent??(()=>{});return Y(e,V(o),w,m,g,r,D(t),_,o.archive_state)}let v=ne(o);if(t==="ci"&&v.length>0)return E(r,L(v.length)),2;if(r.out(`applying stored plan ${q(w)} for ${o.source_id} (${o.rows.length} row(s))`),!d)for(let g of le({source_id:o.source_id,head:{status:"stored plan"},rows:o.rows,archive:(o.changeset??[]).filter(h=>h.kind==="ARCHIVE"),changed:!1,held:!!o.held},process.stdout.columns))r.out(g);return H(e,o.rows,d,r,m,_,o.changeset??[],D(t),o.held,o.archive_state,f,a,c,o.source_id,F(o.backing_path??o.remote_url,o.source_id))}if(r.out(`graph moved since this plan (${C(o.head_pin)} \u2192 ${C(P)}) \u2014 recomputing`),o.held)return Fe(e,o,r,i,t,m,!1);let p=Me(o);if(p===null)return E(r,`stored plan for ${o.source_id} names no backing file or URL \u2014 re-run reconcile --from`),2;let u=z(e,o.source_id,p);if(u!==null)return E(r,`stored plan cannot replay: ${u}`),2;let R=await He(e,o.source_id,p,r,i,!1,t==="interactive");if(!R)return 1;if(!R.changed)return K(r,R,null,!1,i.emitEvent),0;if(t==="agent"){let v=i.emitEvent??(()=>{});return Y(e,R,null,m,v,r,D(t))}let b=R.changeset.filter(v=>v.kind==="ARCHIVE");return t==="ci"&&b.length>0?(E(r,L(b.length)),2):H(e,R.rows,d,r,m,void 0,R.changeset,D(t),R.held,void 0,void 0,a,c,R.source_id,F(Le(p),R.source_id))}function V(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 Ge(e,n,t,r,i,s,o){let w=r.runDesignForUc??null,d=r.sessionScript,m=$e(e,n);if(m===null)return null;if("error"in m)return E(t,m.error),2;let{plan:a,path:c}=m,_=a.rows.filter(u=>u.applied===void 0),f=ne(a),P=r.emitEvent??(()=>{});if(_.length===0&&f.length===0){t.out(`already reconciled \u2014 plan ${a.created} applied ${a.rows.length} row(s)`);let u=Pe(I(e)).staleCount;return u>0&&(t.out(`${u} item(s) still stale \u2014 kane-cli maintain evolve --from-stale`),P({type:"stale_debt",count:u})),i==="agent"&&(T(P,V(a),c),P({...j})),0}let p=B(e);return p!==a.head_pin?(t.out(`plan ${a.created} superseded \u2014 graph moved (${C(a.head_pin)} \u2192 ${C(p)}); recomputing`),Fe(e,a,t,r,i,s,o)):(t.out(`resuming plan ${a.created} \u2014 ${_.length} pending row(s)${f.length>0?`, ${f.length} undecided archive item(s)`:""}`),o?(K(t,V(a),null,!1,r.emitEvent),t.out(`plan stored: ${c}`),i==="agent"&&(T(P,V(a),c),P({...j})),0):i==="agent"?Y(e,V(a),c,s,P,t,D(i),(u,R)=>O(c,u,R),a.archive_state):i==="ci"&&f.length>0?(E(t,L(f.length)),2):H(e,a.rows,i==="override"||i==="ci",t,s,(u,R)=>O(c,u,R),a.changeset??[],D(i),a.held,a.archive_state,(u,R)=>G(c,u,R),w,d,a.source_id,F(a.backing_path??a.remote_url,a.source_id)))}async function Fe(e,n,t,r,i,s,o){let w=r.runDesignForUc??null,d=r.sessionScript,m;if(n.held){let h=I(e),k=new Set(n.rows.filter(l=>l.held_ref!==void 0&&l.applied!==void 0).map(l=>l.held_ref)),y=[];for(let l of n.held.rows){if(k.has(l.temp_ref))continue;if(!l.matched_cid){y.push(l);continue}let $=h.tipOf(l.matched_cid);if(h.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}y.push($===l.matched_cid?l:{...l,matched_cid:$,uc:{...l.uc,matches_existing:{cid:$}}})}m={source_id:n.held.source_id,rows:y}}let a=Me(n);if(a===null)return E(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,a);if(c!==null)return E(t,`stored plan cannot replay: ${c}`),2;let _=r.seams??{reingest:me(e,a,t,r),reextract:ce(e,{stage:m!==void 0,hostOut:h=>t.out(h),hostEmit:h=>{h.type!=="run_start"&&r.emitEvent?.(h)},...r.emitEvent?{}:{hostProgress:h=>process.stderr.write(h+`
4
+ `)}})},f;try{f=await(r.buildPlan??ae)(e,n.source_id,_,{resumeHeld:m})}catch(h){return E(t,`reconcile failed: ${h instanceof Error?h.message:String(h)}`),1}if(i==="interactive"&&!o)for(let h of Ae(f,null))t.out(h);else K(t,f,null,!1,r.emitEvent);let P=B(e),p=null;if(P!=null){let h={},k=new Set(f.changeset.filter(y=>y.kind==="ARCHIVE").map(y=>y.ref));for(let[y,l]of Object.entries(n.archive_state??{}))k.has(y)&&(h[y]=l);p=ee(e,{version:2,source_id:f.source_id,...n.remote_url!==void 0?{remote_url:n.remote_url}:{backing_path:n.backing_path},head_pin:P,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:f.skipped_arms,note:f.note,changeset:f.changeset,rows:f.rows,...f.held?{held:f.held}:{},...Object.keys(h).length>0?{archive_state:h}:{}}),t.out(`plan stored: ${p}`)}if(o){if(i==="agent"){let h=r.emitEvent??(()=>{});T(h,f,p),h({...j})}return 0}let u=r.emitEvent??(()=>{}),R=p?W(e,p).plan.archive_state:void 0,b=p?(h,k)=>O(p,h,k):void 0,v=p?(h,k)=>G(p,h,k):void 0;if(i==="agent")return Y(e,f,p,s,u,t,D(i),b,R);let g=f.changeset.filter(h=>h.kind==="ARCHIVE"&&R?.[h.ref]===void 0);return i==="ci"&&g.length>0?(E(t,L(g.length)),2):H(e,f.rows,i==="override"||i==="ci",t,s,b,f.changeset,D(i),f.held,R,v,w,d,f.source_id,F(n.backing_path??n.remote_url,f.source_id))}async function Ce(e,n,t={},r=process.cwd()){let{telemetryBootstrap:i,telemetryEnvName:s}=await import("./bootstrap-6IJNZIPT.js"),o=i({verb:"reconcile",mode:typeof e.mode=="string"?e.mode:"interactive",contextRoot:U(r,".context"),env:s(),applyPlanPath:typeof e.apply=="string"?U(r,e.apply):void 0,write:!0,longSession:!0});e.mode==="agent"&&t.emitEvent?.({type:"run_start",session:o.ids.session_id});{let m=Oe(U(r,".context"))?ye(U(r,".context")):null;if(m)return e.mode==="agent"?t.emitEvent?.(Z(m)):(E(n,m.text),(n.err??n.out)(`next: ${m.remedy}`)),await o.end({exit_code:2}),2}let w=await ve(U(r,".context"));w&&(e.mode==="agent"?t.emitEvent?.(we(w)):(n.err??n.out)(w.text));let d=await qe(e,n,t,r);return d===1&&e.mode!=="agent"&&(n.err??n.out)(o.supportFooter()),await o.end({exit_code:d}),d}async function qe(e,n,t={},r=process.cwd()){let i=e.apply!==void 0&&e.apply!==!1,s=typeof e.apply=="string"?e.apply:void 0;if(e.plan&&i)return E(n,"pass --plan OR --apply, not both"),2;let o=e.from!==void 0||!i,w=e.from!==void 0&&Q(e.from);if(o&&(!e.from||!e.sourceId&&!w))return E(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&&s!==void 0)return E(n,"pass --from OR --apply <path>, not both \u2014 a stored plan names its own source"),2;let d=ge(r,n);if(!d)return 2;if(e.mode!==void 0&&!Ue.has(e.mode))return Se(`--mode must be interactive | agent | ci | override, got '${e.mode}'`);let m=e.mode==="agent"||e.mode==="ci"||e.mode==="override";if(i&&!m&&!n.isTTY)return E(n,"refusing to apply without a TTY to confirm \u2014 pass --mode override|ci"),2;let a=!e.plan,c="override";if(e.from){let k=Be(e,n.isTTY);if(typeof k=="object")return k.code==="MODE_USAGE"?Se(k.error):(E(n,k.error),2);c=k}let _=c==="override"||c==="ci";if(i&&!e.from){let{makeReconcileDeps:k}=await import("./reconcile-deps-X6IGH4CA.js"),y=s===void 0?k({contextDir:d}).pending():null;if(y?.kind==="cards"){let $=e.mode??"interactive";return!n.isTTY||$!=="interactive"?(E(n,`a held changeset for ${y.source} awaits review (${y.count} change(s)) \u2014 resume in a terminal: kane-cli maintain reconcile --apply [HELD_REVIEW]`),2):(t.cardApplyMount??Ne)(d)}let l=e.mode??"interactive";return We(d,s===void 0?void 0:U(r,s),l,n,t)}let f=Ve(d,r,e.from,e.sourceId);if("error"in f)return E(n,f.error),2;if(!i){let{sessionsHoldingSource:k}=await import("./sessions-NH7WQWMX.js"),{holders:y,corrupt:l}=k(d,f.sourceId);if(l>0)return E(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(y.length>0)return E(n,`session ${y[0]} holds item(s) for review pinned to ${f.sourceId} \u2014 finish that review first: kane-cli context extract --resume ${y[0]} [SOURCE_HELD]`),2}if(c==="interactive"&&!e.plan&&!i){let k=t.seams?.reingest??me(d,f,n,t),y;try{y=await k(f.sourceId)}catch($){return E(n,$ instanceof Error?$.message:String($)),1}let l=y.status==="unchanged"?null:be(d,f.sourceId);if(y.status!=="unchanged"&&!l)return n.out(`${f.sourceId} landed for the first time \u2014 extract it: kane-cli context extract --source ${f.sourceId}`),0;if(l){let x=await(t.chatMount??(async M=>{let{bindExtractInteractive:N}=await import("./extract-bind-D5BYYGYA.js");return N(M)}))({mode:"interactive",posture:"reconcile",source:f.sourceId,changeContext:l});if(x===3){let{sessionsHoldingSource:M}=await import("./sessions-NH7WQWMX.js");if(M(d,f.sourceId).holders.length===0)return 0}return x}}let P="remoteUrl"in f?{remoteUrl:f.remoteUrl}:{filePath:f.filePath},p=await He(d,f.sourceId,P,n,t,!!e.plan||c==="interactive",c==="interactive"&&!e.plan);if(!p)return 1;let u=t.runDesignForUc??oe,R=t.runDesignForUc??null,b=t.sessionScript;if(!p.changed){let k=await Ge(d,f.sourceId,n,t,c,u,!!e.plan);if(k!==null)return k;if(K(n,p,null,!1,t.emitEvent),c==="agent"){let y=t.emitEvent??(()=>{});T(y,p,null),y({...j})}return 0}let v=B(d),g=null;if(v!=null?g=ee(d,{version:2,source_id:p.source_id,..."remoteUrl"in P?{remote_url:P.remoteUrl}:{backing_path:P.filePath},head_pin:v,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:p.skipped_arms,note:p.note,changeset:p.changeset,rows:p.rows,...p.held?{held:p.held}:{}}):E(n,"no chain head after extract \u2014 plan not stored"),c==="agent"){let k=t.emitEvent??(()=>{});if(!a)return T(k,p,g),k({...j}),0;let y=g?(l,$)=>O(g,l,$):void 0;return Y(d,p,g,u,k,n,D(c),y)}if(!a)return g&&n.out(`plan stored: ${g}`),0;let h=p.changeset.filter(k=>k.kind==="ARCHIVE");if(c==="ci"&&h.length>0)return g&&n.out(`plan stored: ${g}`),E(n,L(h.length)),2;if(g){n.out(`plan stored: ${g}`);let k=g;return H(d,ze(d,k)??p.rows,_,n,u,(y,l)=>O(k,y,l),p.changeset,D(c),p.held,void 0,void 0,R,b,p.source_id,F(e.from,p.source_id))}return H(d,p.rows,_,n,u,void 0,p.changeset,D(c),p.held,void 0,void 0,R,b,p.source_id,F(e.from,p.source_id))}function ze(e,n){let t=W(e,n);return"error"in t?null:t.plan.rows}async function hn(e,n={},t,r=process.cwd()){if(e.mode==="agent"){let{makeHeadlessIO:i}=await import("./headless-io-3A3BZVQ5.js"),s=t?i("ndjson","reconcile",t):i("ndjson","reconcile"),o={out:s.out,err:m=>s.event({type:"error",message:m}),isTTY:!1,confirm:async()=>!1,ask:async()=>""},{runWithChannel:w}=await import("./run-channel-RGH4WIQX.js"),d=2;try{d=await w({event:m=>s.event(m)},()=>Ce(e,o,{...n,emitEvent:m=>s.event(m)},r))}catch(m){m instanceof pe?(d=2,s.event(Z({code:m.code,text:m.message,remedy:m.remedy}))):(d=1,s.event({type:"error",message:m instanceof Error?m.message:String(m)}))}return s.done(d)}return Ce(e,he(),n,r)}export{Be as a,Ve as b,D as c,A as d,Ce as e,hn as f};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as l}from"./chunk-DPUV6OSP.js";import{a as c}from"./chunk-NLCCBXXV.js";import{a}from"./chunk-RZ4F3BHX.js";var h=class{constructor(e,t,r,s){this.controllerBaseUrl=e;this.getOAuthToken=t;this.directBasicAuth=r;this.log=s}_cached=null;_revoked=!1;_lastError=null;revoke(){this._revoked=!0,this._cached=null}prime(e){this._revoked||(this._cached=e)}get revoked(){return this._revoked}get cached(){return this._cached}get lastError(){return this._lastError}async resolve(e=!1){if(this._cached&&!e)return this._cached;try{let t;if(this.directBasicAuth)t=new l(this.controllerBaseUrl,{username:this.directBasicAuth.username,accessKey:this.directBasicAuth.access_key});else{let s=await this.getOAuthToken();if(!s)return null;t=new l(this.controllerBaseUrl,s)}let r=await t.getTmsCredentials();this.directBasicAuth&&!r.access_key&&(r.access_key=this.directBasicAuth.access_key),this._cached=r,this._lastError=null;try{let[{refreshIdentitySnapshot:s},{telemetryEnvName:n}]=await Promise.all([import("./identity-ADZ4PAJF.js"),import("./bootstrap-QTVHGL45.js")]);await s(n(),r)}catch{}return this.log?.("info","AUTH_RESOLVE_OK","Auth resolved",{username:r.username,org_id:r.org_id,user_id:r.user_id}),r}catch(t){return this._lastError=t instanceof Error?t:new Error(String(t)),this.log?.("warn","AUTH_RESOLVE_FAILED","Auth resolve failed",{error:this._lastError.message}),null}}async fetch(e,t={}){if(this._revoked)throw new Error("Resolver has been revoked \u2014 identity changed");let r=await this.resolve();if(!r)throw new Error("Not authenticated \u2014 no credentials resolved");let s=i=>({...t,headers:{...t.headers,Authorization:c(i.username,i.access_key)}}),n=await a(e,s(r));if(n.status===401){if(this._revoked)throw new Error("Resolver has been revoked \u2014 identity changed");this.log?.("warn","AUTH_RESOLVE_401","Got 401, re-resolving",{url:e});let i=await this.resolve(!0);if(!i)throw new Error("Re-authentication failed after 401");return a(e,s(i))}return n}};function _(o){if(!o)return"network";let e=/failed:\s*(\d{3})\b/.exec(o.message)?.[1];return e==="401"||e==="403"?"auth":e?"server":"network"}export{h as a,_ as b};
2
+ import{a as l}from"./chunk-DHJSM5DT.js";import{a as c}from"./chunk-NLCCBXXV.js";import{a}from"./chunk-RZ4F3BHX.js";var h=class{constructor(e,t,r,s){this.controllerBaseUrl=e;this.getOAuthToken=t;this.directBasicAuth=r;this.log=s}_cached=null;_revoked=!1;_lastError=null;revoke(){this._revoked=!0,this._cached=null}prime(e){this._revoked||(this._cached=e)}get revoked(){return this._revoked}get cached(){return this._cached}get lastError(){return this._lastError}async resolve(e=!1){if(this._cached&&!e)return this._cached;try{let t;if(this.directBasicAuth)t=new l(this.controllerBaseUrl,{username:this.directBasicAuth.username,accessKey:this.directBasicAuth.access_key});else{let s=await this.getOAuthToken();if(!s)return null;t=new l(this.controllerBaseUrl,s)}let r=await t.getTmsCredentials();this.directBasicAuth&&!r.access_key&&(r.access_key=this.directBasicAuth.access_key),this._cached=r,this._lastError=null;try{let[{refreshIdentitySnapshot:s},{telemetryEnvName:n}]=await Promise.all([import("./identity-ADZ4PAJF.js"),import("./bootstrap-6IJNZIPT.js")]);await s(n(),r)}catch{}return this.log?.("info","AUTH_RESOLVE_OK","Auth resolved",{username:r.username,org_id:r.org_id,user_id:r.user_id}),r}catch(t){return this._lastError=t instanceof Error?t:new Error(String(t)),this.log?.("warn","AUTH_RESOLVE_FAILED","Auth resolve failed",{error:this._lastError.message}),null}}async fetch(e,t={}){if(this._revoked)throw new Error("Resolver has been revoked \u2014 identity changed");let r=await this.resolve();if(!r)throw new Error("Not authenticated \u2014 no credentials resolved");let s=i=>({...t,headers:{...t.headers,Authorization:c(i.username,i.access_key)}}),n=await a(e,s(r));if(n.status===401){if(this._revoked)throw new Error("Resolver has been revoked \u2014 identity changed");this.log?.("warn","AUTH_RESOLVE_401","Got 401, re-resolving",{url:e});let i=await this.resolve(!0);if(!i)throw new Error("Re-authentication failed after 401");return a(e,s(i))}return n}};function _(o){if(!o)return"network";let e=/failed:\s*(\d{3})\b/.exec(o.message)?.[1];return e==="401"||e==="403"?"auth":e?"server":"network"}export{h as a,_ as b};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as f}from"./chunk-F2CET54H.js";import{c as g}from"./chunk-UD7KKHPW.js";import{existsSync as u}from"fs";import{dirname as A,resolve as l}from"path";import{fileURLToPath as E}from"url";var p=A(E(import.meta.url));function _(){return[l(p,".."),l(p,"../../..")]}function x(s){return{"darwin-arm64":"kane-cli-darwin-arm64","darwin-x64":"kane-cli-darwin-x64","linux-x64":"kane-cli-linux-x64","linux-arm64":"kane-cli-linux-arm64","win32-x64":"kane-cli-win-x64"}[s]??null}function T(s){return{"darwin-arm64":"kane-cli-assurance-darwin-arm64","darwin-x64":"kane-cli-assurance-darwin-x64","linux-x64":"kane-cli-assurance-linux-x64","linux-arm64":"kane-cli-assurance-linux-arm64","win32-x64":"kane-cli-assurance-win-x64"}[s]??null}function I(s=_()){let n=x(`${process.platform}-${process.arch}`),i=T(`${process.platform}-${process.arch}`),a=process.platform==="win32"?"assurance-agent.exe":"assurance-agent";for(let e of s){for(let t of i?["@testmuai","@lambdatestincprivate"]:[]){let m=l(e,"node_modules",t,i,"bin",a);if(u(m))return{cmd:m,args:[],tier:"platform"}}for(let t of n?["@testmuai","@lambdatestincprivate"]:[]){let m=l(e,"node_modules",t,n,"bin",a);if(u(m))return{cmd:m,args:[],tier:"platform"}}let c=l(e,"dist","bin",a);if(u(c))return{cmd:c,args:[],tier:"embedded"};let r=l(e,"../assurance-agent/dist",a);if(u(r))return{cmd:r,args:[],tier:"sibling"};let o=l(e,"../assurance-agent/main.py");if(u(o)){let t=l(e,"../assurance-agent/.venv/bin/python");return{cmd:u(t)?t:"python3",args:[o],tier:"dev-python"}}}return null}function U(s,n={}){return{...process.env,...n,...f(),TESTMUAI_SOURCE:"kane-cli",TESTMUAI_SESSION_ID:s,ASSURANCE_LOG_LEVEL:process.env.ASSURANCE_LOG_LEVEL??"info"}}async function P(){if(process.env.TESTMUAI_API_KEY||process.env.TESTMUAI_BASIC_AUTH)return{};try{let{CredentialsManager:s}=await import("./credentials-6DP4KAMJ.js"),n=process.env.TESTMUAI_ENV==="stage"?"stage":"prod",i=new s,a=i.getActiveProfile()??"default",e={TESTMUAI_ENV:n},c=i.loadBasicAuth(a,n);if(c)return e.TESTMUAI_BASIC_AUTH=Buffer.from(`${c.username}:${c.access_key}`,"utf8").toString("base64"),e;let r=i.loadCredentials(a,n);if(r){try{let{refreshOAuthToken:t}=await import("./token-refresh-GSFVJ6GU.js");await t({creds:i,profile:a,env:n,credentials:r})}catch{}let o=i.loadCredentials(a,n)??r;if(typeof o.access_token=="string"){let t=await w(n,o.access_token);return t?(e.TESTMUAI_BASIC_AUTH=t,e):(e.TESTMUAI_API_KEY=o.access_token,e)}}return{}}catch{return{}}}var h=8e3;function d(){return g("warn: session auth may expire during long runs \u2014 if that happens, run `kane-cli login` and retry","AUTH_EXCHANGE_FAILED"),null}async function w(s,n){try{let[{getEnvironment:i},{ControllerClient:a}]=await Promise.all([import("./config-HUK7V364.js"),import("./controller-client-OB4WD2C4.js")]),e=new a(i(s).controllerBaseUrl,n),c;try{let r=await Promise.race([e.getTmsCredentials().catch(()=>null),new Promise(o=>{c=setTimeout(()=>o(null),h)})]);if(typeof r?.username!="string"||!r.username||typeof r.access_key!="string"||!r.access_key)return d();try{let[{refreshIdentitySnapshot:o},{telemetryEnvName:t}]=await Promise.all([import("./identity-ADZ4PAJF.js"),import("./bootstrap-QTVHGL45.js")]);await o(t(),r)}catch{}return Buffer.from(`${r.username}:${r.access_key}`,"utf8").toString("base64")}finally{clearTimeout(c)}}catch{return d()}}export{x as a,T as b,I as c,U as d,P as e};
2
+ import{b as f}from"./chunk-J7NRD4Q7.js";import{c as g}from"./chunk-UD7KKHPW.js";import{existsSync as u}from"fs";import{dirname as A,resolve as l}from"path";import{fileURLToPath as E}from"url";var p=A(E(import.meta.url));function _(){return[l(p,".."),l(p,"../../..")]}function x(s){return{"darwin-arm64":"kane-cli-darwin-arm64","darwin-x64":"kane-cli-darwin-x64","linux-x64":"kane-cli-linux-x64","linux-arm64":"kane-cli-linux-arm64","win32-x64":"kane-cli-win-x64"}[s]??null}function T(s){return{"darwin-arm64":"kane-cli-assurance-darwin-arm64","darwin-x64":"kane-cli-assurance-darwin-x64","linux-x64":"kane-cli-assurance-linux-x64","linux-arm64":"kane-cli-assurance-linux-arm64","win32-x64":"kane-cli-assurance-win-x64"}[s]??null}function I(s=_()){let n=x(`${process.platform}-${process.arch}`),i=T(`${process.platform}-${process.arch}`),a=process.platform==="win32"?"assurance-agent.exe":"assurance-agent";for(let e of s){for(let t of i?["@testmuai","@lambdatestincprivate"]:[]){let m=l(e,"node_modules",t,i,"bin",a);if(u(m))return{cmd:m,args:[],tier:"platform"}}for(let t of n?["@testmuai","@lambdatestincprivate"]:[]){let m=l(e,"node_modules",t,n,"bin",a);if(u(m))return{cmd:m,args:[],tier:"platform"}}let c=l(e,"dist","bin",a);if(u(c))return{cmd:c,args:[],tier:"embedded"};let r=l(e,"../assurance-agent/dist",a);if(u(r))return{cmd:r,args:[],tier:"sibling"};let o=l(e,"../assurance-agent/main.py");if(u(o)){let t=l(e,"../assurance-agent/.venv/bin/python");return{cmd:u(t)?t:"python3",args:[o],tier:"dev-python"}}}return null}function U(s,n={}){return{...process.env,...n,...f(),TESTMUAI_SOURCE:"kane-cli",TESTMUAI_SESSION_ID:s,ASSURANCE_LOG_LEVEL:process.env.ASSURANCE_LOG_LEVEL??"info"}}async function P(){if(process.env.TESTMUAI_API_KEY||process.env.TESTMUAI_BASIC_AUTH)return{};try{let{CredentialsManager:s}=await import("./credentials-Q4WH5CBN.js"),n=process.env.TESTMUAI_ENV==="stage"?"stage":"prod",i=new s,a=i.getActiveProfile()??"default",e={TESTMUAI_ENV:n},c=i.loadBasicAuth(a,n);if(c)return e.TESTMUAI_BASIC_AUTH=Buffer.from(`${c.username}:${c.access_key}`,"utf8").toString("base64"),e;let r=i.loadCredentials(a,n);if(r){try{let{refreshOAuthToken:t}=await import("./token-refresh-KN5JK2U4.js");await t({creds:i,profile:a,env:n,credentials:r})}catch{}let o=i.loadCredentials(a,n)??r;if(typeof o.access_token=="string"){let t=await w(n,o.access_token);return t?(e.TESTMUAI_BASIC_AUTH=t,e):(e.TESTMUAI_API_KEY=o.access_token,e)}}return{}}catch{return{}}}var h=8e3;function d(){return g("warn: session auth may expire during long runs \u2014 if that happens, run `kane-cli login` and retry","AUTH_EXCHANGE_FAILED"),null}async function w(s,n){try{let[{getEnvironment:i},{ControllerClient:a}]=await Promise.all([import("./config-3AKWRTFS.js"),import("./controller-client-ZF5IXRUV.js")]),e=new a(i(s).controllerBaseUrl,n),c;try{let r=await Promise.race([e.getTmsCredentials().catch(()=>null),new Promise(o=>{c=setTimeout(()=>o(null),h)})]);if(typeof r?.username!="string"||!r.username||typeof r.access_key!="string"||!r.access_key)return d();try{let[{refreshIdentitySnapshot:o},{telemetryEnvName:t}]=await Promise.all([import("./identity-ADZ4PAJF.js"),import("./bootstrap-6IJNZIPT.js")]);await o(t(),r)}catch{}return Buffer.from(`${r.username}:${r.access_key}`,"utf8").toString("base64")}finally{clearTimeout(c)}}catch{return d()}}export{x as a,T as b,I as c,U as d,P as e};
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{c as y,d as _}from"./chunk-IE3OO5GI.js";import{M as h,c as g,e as v,m as b}from"./chunk-3N6IAVD5.js";import{d as f,f as x}from"./chunk-AKX4VRRR.js";var G=n=>`conv#turn=${n}`;function I(n,t){for(let o of n.split(`
3
+ `))if(o.trim())try{let r=JSON.parse(o);if(r.turn===t)return r.text}catch{}return null}var C={format:"conversation",media_type:"text/x-conversation",anchors_supported:["#turn="]};function P(n){let{contextDir:t,graph:o,sessionStamp:r}=n,e=`su-conv-${r}`,a=o.heads.get(e);if(typeof a=="string")return{record:null,errors:[{code:"CONV_SOURCE_EXISTS",detail:`${e} already exists \u2014 resume it`}],sourceId:e,cid:a};let s=y(t,Buffer.from("","utf8")),i=v(e,s),u=x("source",i);if(u.length>0)return{record:null,errors:u.map(c=>({code:c.code,detail:c.detail})),sourceId:e,cid:""};let d=g("source",i);return{record:h(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:d,label:f.SOURCE,content:i}],edges:[],review:[],supersessions:[],source_head_moves:{[e]:d},media:{[e]:C},conv:{source_id:e,turn:0,append_of:null}},{expectPrev:o.latestHash,intent:{v:1,verb:"conv-mint",args:b({sessionStamp:r,by:n.by}),pins:{}},provenance:n.provenance}).record,errors:null,sourceId:e,cid:d}}function T(n){let{contextDir:t,graph:o,sourceId:r,text:e,force:a}=n,s=o.heads.get(r),i=o.convChains.get(r);if(typeof s!="string"||!i)return{record:null,errors:[{code:"CONV_SOURCE_MISSING",detail:`${r} is not a live conversation source`}]};let d=o.getNode(s)?.content?.blob;if(typeof d!="string")return{record:null,errors:[{code:"CONV_SOURCE_MISSING",detail:`${r} head node unreadable`}]};let p=_(t,d)?.toString("utf8")??"",c=i.turns;if(!a&&c>0&&I(p,c)===e)return{record:null,errors:null,turn:c,cid:s,idempotent:!0};let l=c+1,O=`${p}${JSON.stringify({turn:l,text:e})}
4
+ `,E=y(t,Buffer.from(O,"utf8")),S=v(r,E),m=g("source",S);return{record:h(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:m,label:f.SOURCE,content:S}],edges:[],review:[],supersessions:[],source_head_moves:{[r]:m},media:{[r]:C},conv:{source_id:r,turn:l,append_of:s}},{expectPrev:o.latestHash,intent:{v:1,verb:"conv-turn",args:b({sourceId:r,text:e,force:a??!1,by:n.by}),pins:{append_of:s}},provenance:n.provenance}).record,errors:null,turn:l,cid:m,idempotent:!1}}export{G as a,I as b,P as c,T as d};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as d,e as g}from"./chunk-GRDYYYIQ.js";import{existsSync as p}from"fs";import{isAbsolute as h,join as l,relative as v}from"path";function u(n){let t=p(l(n,".context"))?"assurance.json":"variables.json";return l(".testmuai","variables",t)}function f(n,t){if(!h(n))return n;let e=v(t,n);return e.startsWith("..")?n:e}function m(n,t){let e=n.used_by;if(e.length===0||e.every(r=>r.file===g))return"";if(t===void 0||!e.every(r=>r.file===t))return e.map(r=>`${r.file} step ${r.step}`).join(" \xB7 ");let a=[...new Set(e.map(r=>r.step))].sort((r,i)=>r-i);return a.length===1?`step ${a[0]}`:`steps ${a.join(", ")}`}function b(n,t){let e=new Map,a={header:"Not in any variables file",rows:[],declare:!0};for(let r of n){if(r.reason!=="value_missing"){a.rows.push(r);continue}let i=f(r.file??u(t),t),s=e.get(i);s||(s={header:i===d?"Waiting for a value passed with --variables":`Waiting for a value in ${i}`,rows:[],declare:!1},e.set(i,s)),s.rows.push(r)}return[...e.values(),...a.rows.length>0?[a]:[]]}function w(n,t){let e=u(t);if(p(l(t,e)))return["",` Add ${n.length===1?"it":"them"} to ${e}`];let a=n.map(s=>`${JSON.stringify(s.name)}:`),r=Math.max(...a.map(s=>s.length))+1,i=a.map((s,o)=>` ${s.padEnd(r)}{ "value": "" }${o<a.length-1?",":""}`);return["",` Create ${e}:`,""," {",...i," }"]}function E(n,t){let e=n.length,a=`\u2717 ${e} variable${e===1?" has":"s have"} no value \u2014 nothing was dispatched`,r=Math.max(...n.map(s=>s.name.length),8)+2,i=b(n,t.cwd).map(s=>{let o=[` ${s.header}`];for(let c of s.rows)o.push(` ${c.name.padEnd(r)}${m(c,t.entryFile)}`.trimEnd());return s.declare&&o.push(...w(s.rows,t.cwd)),o.join(`
2
+ import{a as d,e as g}from"./chunk-L4M7753M.js";import{existsSync as p}from"fs";import{isAbsolute as h,join as l,relative as v}from"path";function u(n){let t=p(l(n,".context"))?"assurance.json":"variables.json";return l(".testmuai","variables",t)}function f(n,t){if(!h(n))return n;let e=v(t,n);return e.startsWith("..")?n:e}function m(n,t){let e=n.used_by;if(e.length===0||e.every(r=>r.file===g))return"";if(t===void 0||!e.every(r=>r.file===t))return e.map(r=>`${r.file} step ${r.step}`).join(" \xB7 ");let a=[...new Set(e.map(r=>r.step))].sort((r,i)=>r-i);return a.length===1?`step ${a[0]}`:`steps ${a.join(", ")}`}function b(n,t){let e=new Map,a={header:"Not in any variables file",rows:[],declare:!0};for(let r of n){if(r.reason!=="value_missing"){a.rows.push(r);continue}let i=f(r.file??u(t),t),s=e.get(i);s||(s={header:i===d?"Waiting for a value passed with --variables":`Waiting for a value in ${i}`,rows:[],declare:!1},e.set(i,s)),s.rows.push(r)}return[...e.values(),...a.rows.length>0?[a]:[]]}function w(n,t){let e=u(t);if(p(l(t,e)))return["",` Add ${n.length===1?"it":"them"} to ${e}`];let a=n.map(s=>`${JSON.stringify(s.name)}:`),r=Math.max(...a.map(s=>s.length))+1,i=a.map((s,o)=>` ${s.padEnd(r)}{ "value": "" }${o<a.length-1?",":""}`);return["",` Create ${e}:`,""," {",...i," }"]}function E(n,t){let e=n.length,a=`\u2717 ${e} variable${e===1?" has":"s have"} no value \u2014 nothing was dispatched`,r=Math.max(...n.map(s=>s.name.length),8)+2,i=b(n,t.cwd).map(s=>{let o=[` ${s.header}`];for(let c of s.rows)o.push(` ${c.name.padEnd(r)}${m(c,t.entryFile)}`.trimEnd());return s.declare&&o.push(...w(s.rows,t.cwd)),o.join(`
3
3
  `)});return`${a}
4
4
 
5
5
  ${i.join(`
@@ -1,4 +1,4 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as F}from"./chunk-BKHXPBWN.js";import{a as k}from"./chunk-N2P4MI32.js";import{b as $}from"./chunk-NVGBE2DR.js";import{deflateSync as Y}from"zlib";function j(n,s){let e=Buffer.alloc(4);e.writeUInt32BE(s.length);let o=Buffer.concat([Buffer.from(n,"latin1"),s]),i=Buffer.alloc(4);return i.writeUInt32BE(F(o)),Buffer.concat([e,o,i])}var G={1:0,3:2,4:6};function N(n,s){let{width:e,height:o,channels:i}=s;if(n.byteLength!==e*o*i)throw new Error(`pngEncode: raw length ${n.byteLength} != ${e}x${o}x${i}`);let d=Buffer.alloc(13);d.writeUInt32BE(e,0),d.writeUInt32BE(o,4),d[8]=8,d[9]=G[i];let t=e*i,a=Buffer.alloc(o*(t+1));for(let f=0;f<o;f++)a[f*(t+1)]=0,n.copy(a,f*(t+1)+1,f*t,(f+1)*t);return Buffer.concat([Buffer.from([137,80,78,71,13,10,26,10]),j("IHDR",d),j("IDAT",Y(a)),j("IEND",Buffer.alloc(0))])}var U=64,X=16,J=12e6,V=6e6,K=5e3,W=3e4,H="",_=class extends Error{constructor(e,o){super(`${e}: ${o}`);this.code=e}};async function q(n,s,e){let o=n.objs.has(s)?n.objs:n.commonObjs.has(s)?n.commonObjs:null;if(o)try{return o.get(s)??null}catch{return null}if(e.remainingMs<=0)return null;let i=s.startsWith("g_")?n.commonObjs:n.objs,d,t=Date.now();try{return await Promise.race([new Promise(a=>{try{i.get(s,f=>a(f??null))}catch{a(null)}}),new Promise(a=>{d=setTimeout(()=>a(null),Math.min(K,e.remainingMs))})])}finally{clearTimeout(d),e.remainingMs-=Date.now()-t}}async function z(){let n=await import("pdfjs-dist/legacy/build/pdf.mjs");return n.default??n}async function oe(n,s){let e=await z();H=e.version;let o={remainingMs:s?.resolveBudgetMs??W},i,d=e.getDocument({data:new Uint8Array(n),isEvalSupported:!1,verbosity:0});try{i=await d.promise}catch(t){throw t.name==="PasswordException"?new _("PDF_ENCRYPTED","password-protected \u2014 decrypt and re-ingest"):new _("PDF_UNREADABLE",String(t.message??t))}try{let t=[],a=[],f=new Map,D=[],T=new Map,R=0,A=0;for(let u=1;u<=i.numPages;u++){let O=await i.getPage(u);t.push(`[page ${u}]`);let C=await O.getTextContent(),c="",E=null;for(let m of C.items){if(typeof m!="object"||m===null||!("str"in m))continue;let p=m,P=Math.round(p.transform[5]);E!==null&&P!==E&&c.trim()!==""&&(t.push(c.trimEnd()),c=""),c!==""&&!c.endsWith(" ")&&p.str!==""&&!p.str.startsWith(" ")&&P===E&&(c+=" "),c+=p.str,A+=p.str.trim().length,E=P,p.hasEOL&&c.trim()!==""&&(t.push(c.trimEnd()),c="",E=null)}c.trim()!==""&&t.push(c.trimEnd());let B=await O.getOperatorList(),M=0;for(let m=0;m<B.fnArray.length;m++){let p=B.fnArray[m]===e.OPS.paintImageXObject,P=B.fnArray[m]===e.OPS.paintInlineImageXObject;if(!p&&!P)continue;M+=1;let h=`p${u}-${M}`,l=(v,L,w,S)=>{a.push({ref:h,page:u,media_type:"image/png",...L?{blob:L}:{},...S?{appearance:S}:{},delivery:v,...w?{duplicate_of:w}:{}}),t.push(v==="duplicate"&&w?`[img#${h}: image on page ${u} \u2014 same as img#${w}; cite img#${w}]`:`[img#${h} omitted: ${v}]`)};if(P){l("unsupported-image-kind");continue}let r=await q(O,B.argsArray[m][0],o);if(!r?.data||!r.width||!r.height){l("undecodable");continue}let I;if(r.kind===e.ImageKind.RGB_24BPP)I=3;else if(r.kind===e.ImageKind.RGBA_32BPP)I=4;else{l("unsupported-image-kind");continue}let y;try{y=N(Buffer.from(r.data.buffer,r.data.byteOffset,r.data.byteLength),{width:r.width,height:r.height,channels:I})}catch{l("undecodable");continue}let g=$(y);f.set(g,y);let b=k(Buffer.from(r.data.buffer,r.data.byteOffset,r.data.byteLength),{width:r.width,height:r.height,channels:I});if(r.width<U||r.height<U){l("below-dimension-floor",g,void 0,b);continue}let x=T.get(g);if(x!==void 0){l("duplicate",g,x,b);continue}if(y.byteLength>V){l("image-too-large",g,void 0,b);continue}if(R+y.byteLength>J){l("vision-byte-budget-reached",g,void 0,b);continue}if(D.length>=X){l("image-cap-reached",g,void 0,b);continue}T.set(g,h),R+=y.byteLength,D.push(h),a.push({ref:h,page:u,media_type:"image/png",blob:g,appearance:b,delivery:"selected"}),t.push(`[img#${h}: image on page ${u}]`)}}if(A===0&&i.numPages>0)throw new _("PDF_NO_TEXT_LAYER","no extractable text \u2014 image-only or scanned pdfs are not supported yet");return{projection:t.join(`
2
+ import{a as F}from"./chunk-BKHXPBWN.js";import{a as k}from"./chunk-N2P4MI32.js";import{b as $}from"./chunk-IE3OO5GI.js";import{deflateSync as Y}from"zlib";function j(n,s){let e=Buffer.alloc(4);e.writeUInt32BE(s.length);let o=Buffer.concat([Buffer.from(n,"latin1"),s]),i=Buffer.alloc(4);return i.writeUInt32BE(F(o)),Buffer.concat([e,o,i])}var G={1:0,3:2,4:6};function N(n,s){let{width:e,height:o,channels:i}=s;if(n.byteLength!==e*o*i)throw new Error(`pngEncode: raw length ${n.byteLength} != ${e}x${o}x${i}`);let d=Buffer.alloc(13);d.writeUInt32BE(e,0),d.writeUInt32BE(o,4),d[8]=8,d[9]=G[i];let t=e*i,a=Buffer.alloc(o*(t+1));for(let f=0;f<o;f++)a[f*(t+1)]=0,n.copy(a,f*(t+1)+1,f*t,(f+1)*t);return Buffer.concat([Buffer.from([137,80,78,71,13,10,26,10]),j("IHDR",d),j("IDAT",Y(a)),j("IEND",Buffer.alloc(0))])}var U=64,X=16,J=12e6,V=6e6,K=5e3,W=3e4,H="",_=class extends Error{constructor(e,o){super(`${e}: ${o}`);this.code=e}};async function q(n,s,e){let o=n.objs.has(s)?n.objs:n.commonObjs.has(s)?n.commonObjs:null;if(o)try{return o.get(s)??null}catch{return null}if(e.remainingMs<=0)return null;let i=s.startsWith("g_")?n.commonObjs:n.objs,d,t=Date.now();try{return await Promise.race([new Promise(a=>{try{i.get(s,f=>a(f??null))}catch{a(null)}}),new Promise(a=>{d=setTimeout(()=>a(null),Math.min(K,e.remainingMs))})])}finally{clearTimeout(d),e.remainingMs-=Date.now()-t}}async function z(){let n=await import("pdfjs-dist/legacy/build/pdf.mjs");return n.default??n}async function oe(n,s){let e=await z();H=e.version;let o={remainingMs:s?.resolveBudgetMs??W},i,d=e.getDocument({data:new Uint8Array(n),isEvalSupported:!1,verbosity:0});try{i=await d.promise}catch(t){throw t.name==="PasswordException"?new _("PDF_ENCRYPTED","password-protected \u2014 decrypt and re-ingest"):new _("PDF_UNREADABLE",String(t.message??t))}try{let t=[],a=[],f=new Map,D=[],T=new Map,R=0,A=0;for(let u=1;u<=i.numPages;u++){let O=await i.getPage(u);t.push(`[page ${u}]`);let C=await O.getTextContent(),c="",E=null;for(let m of C.items){if(typeof m!="object"||m===null||!("str"in m))continue;let p=m,P=Math.round(p.transform[5]);E!==null&&P!==E&&c.trim()!==""&&(t.push(c.trimEnd()),c=""),c!==""&&!c.endsWith(" ")&&p.str!==""&&!p.str.startsWith(" ")&&P===E&&(c+=" "),c+=p.str,A+=p.str.trim().length,E=P,p.hasEOL&&c.trim()!==""&&(t.push(c.trimEnd()),c="",E=null)}c.trim()!==""&&t.push(c.trimEnd());let B=await O.getOperatorList(),M=0;for(let m=0;m<B.fnArray.length;m++){let p=B.fnArray[m]===e.OPS.paintImageXObject,P=B.fnArray[m]===e.OPS.paintInlineImageXObject;if(!p&&!P)continue;M+=1;let h=`p${u}-${M}`,l=(v,L,w,S)=>{a.push({ref:h,page:u,media_type:"image/png",...L?{blob:L}:{},...S?{appearance:S}:{},delivery:v,...w?{duplicate_of:w}:{}}),t.push(v==="duplicate"&&w?`[img#${h}: image on page ${u} \u2014 same as img#${w}; cite img#${w}]`:`[img#${h} omitted: ${v}]`)};if(P){l("unsupported-image-kind");continue}let r=await q(O,B.argsArray[m][0],o);if(!r?.data||!r.width||!r.height){l("undecodable");continue}let I;if(r.kind===e.ImageKind.RGB_24BPP)I=3;else if(r.kind===e.ImageKind.RGBA_32BPP)I=4;else{l("unsupported-image-kind");continue}let y;try{y=N(Buffer.from(r.data.buffer,r.data.byteOffset,r.data.byteLength),{width:r.width,height:r.height,channels:I})}catch{l("undecodable");continue}let g=$(y);f.set(g,y);let b=k(Buffer.from(r.data.buffer,r.data.byteOffset,r.data.byteLength),{width:r.width,height:r.height,channels:I});if(r.width<U||r.height<U){l("below-dimension-floor",g,void 0,b);continue}let x=T.get(g);if(x!==void 0){l("duplicate",g,x,b);continue}if(y.byteLength>V){l("image-too-large",g,void 0,b);continue}if(R+y.byteLength>J){l("vision-byte-budget-reached",g,void 0,b);continue}if(D.length>=X){l("image-cap-reached",g,void 0,b);continue}T.set(g,h),R+=y.byteLength,D.push(h),a.push({ref:h,page:u,media_type:"image/png",blob:g,appearance:b,delivery:"selected"}),t.push(`[img#${h}: image on page ${u}]`)}}if(A===0&&i.numPages>0)throw new _("PDF_NO_TEXT_LAYER","no extractable text \u2014 image-only or scanned pdfs are not supported yet");return{projection:t.join(`
3
3
  `)+`
4
4
  `,inventory:a,blobs:f,delivered:D,pages:i.numPages,converter:{name:"pdfjs-dist",version:e.version,policy:"v1"}}}finally{await d.destroy().catch(()=>{})}}export{U as a,X as b,J as c,V as d,H as e,_ as f,oe as g};
@@ -3,4 +3,4 @@ import{existsSync as f,fsyncSync as X,mkdirSync as z,readFileSync as S,readdirSy
3
3
  `;try{let i=K(o,"wx",384);return H(i,c),j(i),s}catch(i){if(i.code!=="EEXIST")throw i;let p=!1,a;try{let d=JSON.parse(S(o,"utf8")),_=t.getTime()-new Date(d.ts).getTime();p=!M(d.pid)||_>=q,a=d.nonce}catch{p=!0}if(!p)throw new u("SESSION_LOCKED",`${e} is held by another live process`);let g=`${o}.break-${s}`;try{E(o,g);let d;try{d=JSON.parse(S(g,"utf8"))}catch{d=null}if(d===null||d.nonce===a)m(g,{force:!0});else try{E(g,o)}catch{m(g,{force:!0})}}catch(d){if(d.code!=="ENOENT")throw d}return k(n,e,t,r+1)}}function G(n,e,t,r,o){let s=()=>{try{if(JSON.parse(S(h(n,e),"utf8")).nonce!==r)throw new u("SESSION_LOCK_LOST",`${e} lock was taken over`)}catch(i){throw i instanceof u?i:new u("SESSION_LOCK_LOST",`${e} lock file unreadable/gone`)}},c=()=>b(l(n,e),JSON.stringify(t)+`
4
4
  `);return{get state(){return t},isApplied:i=>t.applied_events.includes(i),markApplied(i){s(),t={...t,applied_events:[...new Set([...t.applied_events,...i])].sort()},c()},reconcileSave(i){s(),t={...t,applied_events:[...new Set([...t.applied_events,...i.appliedEvents])].sort(),held_receipts:i.heldReceipts,pending:i.pending},c()},save(i){s();let{agent_state:p,pending:a,assumed:g,read_basis:d,corpus_cursor:_,expires_at:I,force:x,conv_source:R,held_receipts:T,force_scope:D,user_session_id:J,checkpoint:L,target_pins:$,ingest_registry:A,ingest_schedule:P,reconcile:C}=i;t={...t,...p!==void 0?{agent_state:p}:{},...a!==void 0?{pending:a}:{},...g!==void 0?{assumed:g}:{},...d!==void 0?{read_basis:d}:{},..._!==void 0?{corpus_cursor:_}:{},...I!==void 0?{expires_at:I}:{},...x!==void 0?{force:x}:{},...R!==void 0?{conv_source:R}:{},...T!==void 0?{held_receipts:T}:{},...D!==void 0?{force_scope:D}:{},...J!==void 0?{user_session_id:J}:{},...L!==void 0?{checkpoint:L}:{},...$!==void 0?{target_pins:$}:{},...A!==void 0?{ingest_registry:A}:{},...P!==void 0?{ingest_schedule:P}:{},...C!==void 0?{reconcile:C}:{}},c()},complete(){s(),m(O(n,e),{recursive:!0,force:!0})},release(){try{s(),m(h(n,e),{force:!0})}catch(i){if(i instanceof u||i.code==="ENOENT")return;throw i}}}}function W(n,e,t){if(!F.test(e.sid))throw new u("SESSION_MISSING",`bad sid ${JSON.stringify(e.sid)}`);let r=w(t);if(f(l(n,e.sid)))throw new u("SESSION_LOCKED",`${e.sid} already exists \u2014 resume it`);z(O(n,e.sid),{recursive:!0,mode:448});let o=k(n,e.sid,r),s={schema:1,applied_events:[],...e};return b(l(n,e.sid),JSON.stringify(s)+`
5
5
  `),G(n,e.sid,s,o,t)}function Y(n,e,t){if(!F.test(e)||!f(l(n,e)))throw new u("SESSION_MISSING",`no session ${e}`);let r=w(t),o=k(n,e,r),s=JSON.parse(S(l(n,e),"utf8"));if(new Date(s.expires_at).getTime()<=r.getTime())throw m(h(n,e),{force:!0}),new u("SESSION_EXPIRED",`${e} expired at ${s.expires_at}`);let c={...s,expires_at:new Date(r.getTime()+q).toISOString()};return b(l(n,e),JSON.stringify(c)+`
6
- `),G(n,e,c,o,t)}function Z(n,e){try{let t=y(n,"proposals",e,"verdicts.json");return JSON.parse(S(t,"utf8")).resolved===!0}catch{return!1}}function ee(n,e){let t=l(n,e);return f(t)?JSON.parse(S(t,"utf8")):null}function ne(n){let e=v(n);if(!f(e))return[];let t=[];for(let r of N(e)){let o=l(n,r);if(f(o))try{let s=JSON.parse(S(o,"utf8"));t.push({sid:s.sid,mode:s.mode,created_at:s.created_at,expires_at:s.expires_at,pendingCount:s.pending.questions.length+s.pending.proposals.length,verb:s.verb,use_case:s.use_case})}catch{t.push({sid:r,mode:"?",created_at:"",expires_at:"",pendingCount:0,corrupt:!0})}}return t.sort((r,o)=>r.created_at<o.created_at?-1:1)}function te(n,e,t){let r=v(n);if(!f(r))return{holders:[],corrupt:0};let o=w(t),s=[],c=0;for(let i of N(r)){let p=l(n,i);if(f(p))try{let a=JSON.parse(S(p,"utf8"));if(new Date(a.expires_at).getTime()<=o.getTime())continue;let g=a.pending.proposals.some(_=>(_.content?._held?.source_id??null)===e),d=a.reconcile!=null&&e in a.read_basis&&!Z(n,a.reconcile.proposal_id);(g||d)&&s.push(a.sid)}catch{c+=1}}return{holders:s,corrupt:c}}function se(n,e){let t=w(e),r=[],o=[],s=v(n);if(!f(s))return{removed:r,skipped:o};for(let c of N(s)){if(e?.sid&&c!==e.sid)continue;let i=!1,p=!1;try{let a=JSON.parse(S(l(n,c),"utf8"));i=new Date(a.expires_at).getTime()<=t.getTime()}catch{p=!0}if(e?.sid||e?.all||i||p&&e?.all){try{let a=JSON.parse(S(h(n,c),"utf8"));if(M(a.pid)&&a.pid!==process.pid){o.push({sid:c,reason:`in use by live pid ${a.pid}`});continue}}catch{}m(O(n,c),{recursive:!0,force:!0}),r.push(c)}}return{removed:r,skipped:o}}export{u as a,W as b,Y as c,Z as d,ee as e,ne as f,te as g,se as h};
6
+ `),G(n,e,c,o,t)}function Z(n,e){try{let t=y(n,"proposals",e,"verdicts.json");return JSON.parse(S(t,"utf8")).resolved===!0}catch{return!1}}function ee(n,e){let t=l(n,e);return f(t)?JSON.parse(S(t,"utf8")):null}function ne(n){let e=v(n);if(!f(e))return[];let t=[];for(let r of N(e)){let o=l(n,r);if(f(o))try{let s=JSON.parse(S(o,"utf8"));t.push({sid:s.sid,mode:s.mode,created_at:s.created_at,expires_at:s.expires_at,pendingCount:s.pending.questions.length+s.pending.proposals.length,verb:s.verb,use_case:s.use_case})}catch{t.push({sid:r,mode:"?",created_at:"",expires_at:"",pendingCount:0,corrupt:!0})}}return t.sort((r,o)=>r.created_at<o.created_at?-1:1)}function te(n,e,t){let r=v(n);if(!f(r))return{holders:[],corrupt:0};let o=w(t),s=[],c=0;for(let i of N(r)){let p=l(n,i);if(f(p))try{let a=JSON.parse(S(p,"utf8"));if(new Date(a.expires_at).getTime()<=o.getTime())continue;let g=a.pending.proposals.some(_=>(_.content?._held?.source_id??null)===e),d=a.reconcile!=null&&e in a.read_basis&&!Z(n,a.reconcile.proposal_id);(g||d)&&s.push(a.sid)}catch{c+=1}}return{holders:s,corrupt:c}}function se(n,e){let t=w(e),r=[],o=[],s=v(n);if(!f(s))return{removed:r,skipped:o};for(let c of N(s)){if(e?.sid&&c!==e.sid)continue;let i=!1,p=!1;try{let a=JSON.parse(S(l(n,c),"utf8"));i=new Date(a.expires_at).getTime()<=t.getTime()}catch{p=!0}if(e?.sid||e?.all||i||p&&e?.all){try{let a=JSON.parse(S(h(n,c),"utf8"));if(M(a.pid)&&a.pid!==process.pid){o.push({sid:c,reason:`in use by live pid ${a.pid}`});continue}}catch{}m(O(n,c),{recursive:!0,force:!0}),r.push(c)}}return{removed:r,skipped:o}}export{u as a,q as b,W as c,Y as d,Z as e,ee as f,ne as g,te as h,se as i};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as l}from"./chunk-DFS4RMVP.js";function n({into:r}){return r.current=l(),null}export{n as a};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{d as G,f as q,h as H}from"./chunk-3BHRGHIZ.js";import{a as j,b as z,c as K}from"./chunk-JJJSDDQ2.js";import{d as B,f as O}from"./chunk-RQLU4NDG.js";import{a as N}from"./chunk-MMBBQ4OZ.js";import{b as F,c as $,j as R}from"./chunk-WBHSPN55.js";import{a as L}from"./chunk-TZXXJWHA.js";import{n as T}from"./chunk-RSSOJ3L2.js";import{a as Y,b as C,c as V}from"./chunk-AC7BPO4X.js";import{h as J}from"./chunk-TAOHYWEO.js";import{e as E}from"./chunk-Z7S3IWUX.js";import{b as M}from"./chunk-B2ZGG7WM.js";function X(e){return e.kind==="simulator"?e.id:e.virtualName??e.id}function Z(e,r,t={}){let o={platform:e.platform,udid:e.id,target_kind:e.kind};return r&&(o.app_package=r),t.noReset!==void 0&&(o.no_reset=t.noReset),t.appiumUrl&&(o.appium_url=t.appiumUrl),e.platform==="android"&&t.autoGrantPermissions!==void 0&&(o.auto_grant_permissions=t.autoGrantPermissions),e.platform==="ios"&&t.autoAcceptAlerts!==void 0&&(o.auto_accept_alerts=t.autoAcceptAlerts),o}function Q(e=process.env){let r=e.KANE_APPIUM_URL?.trim();return r||null}import{createHash as De}from"crypto";import{readdir as ke,stat as xe}from"fs/promises";import{basename as g,extname as Ie,join as Ue,relative as Se}from"path";import{createHash as ge}from"crypto";import{createReadStream as fe}from"fs";import{mkdir as me,readFile as he,rename as ve,writeFile as we}from"fs/promises";import{dirname as be,join as ye}from"path";var Pe=60,Te=5;function W(){return{entries:[]}}function ee(){return ye(M,"mobile","app-cache.json")}async function A(e){let r=ge("sha256");for await(let t of fe(e))r.update(t);return r.digest("hex")}function Ce(){return{readFile:e=>he(e,"utf8"),writeFile:async(e,r)=>{await me(be(e),{recursive:!0});let t=`${e}.tmp`;await we(t,r),await ve(t,e)},hashFile:A,now:()=>new Date}}function D(e){if(!e)return;let r=/\/(\d{4})\/(\d{2})\/(\d{2})\//.exec(e);if(!r)return;let[,t,o,a]=r,s=new Date(`${t}-${o}-${a}T00:00:00Z`);return Number.isNaN(s.getTime())?void 0:s.toISOString()}function Ae(e,r){if(!e.storedAt)return!0;let t=new Date(e.storedAt).getTime();return Number.isNaN(t)?!0:(r.getTime()-t)/864e5>=Pe-Te}var u=class{deps;constructor(r={}){this.deps={...Ce(),...r}}async read(){try{let r=JSON.parse(await this.deps.readFile(ee()));if(!r||typeof r!="object")return W();let t=r;return{entries:Array.isArray(t.entries)?t.entries:[]}}catch{return W()}}async write(r){await this.deps.writeFile(ee(),JSON.stringify(r,null,2))}async hashOf(r){return this.deps.hashFile(r)}async lookup(r){return(await this.read()).entries.find(o=>o.sha256===r.sha256&&o.env===r.env&&o.orgId===r.orgId&&o.type===r.type)}async remember(r){let t=await this.read();t.entries=[...t.entries.filter(o=>!(o.sha256===r.sha256&&o.env===r.env&&o.orgId===r.orgId&&o.type===r.type)),r],await this.write(t)}async forget(r){let t=await this.read(),o=t.entries.length;t.entries=t.entries.filter(a=>!(a.sha256===r.sha256&&a.env===r.env&&a.orgId===r.orgId&&a.type===r.type)),t.entries.length!==o&&await this.write(t)}isNearExpiry(r){return Ae(r,this.deps.now())}};var re={emulator:[".apk"],simulator:[".zip"]};function te(e){return e.skipped===!0}function _e(e,r){let t=Ie(e).toLowerCase();return t===".ipa"?`${g(e)} is a device build \u2014 .ipa is not accepted for ${r} runs.`:re[r].includes(t)?null:`${g(e)} cannot be uploaded for a ${r} run \u2014 expected one of ${re[r].join(", ")}.`}async function k(e,r){if(!(await xe(e)).isDirectory())return r.hashOf(e);let o=[],a=async p=>{for(let i of await ke(p,{withFileTypes:!0})){let n=Ue(p,i.name);i.isDirectory()?await a(n):i.isFile()&&o.push(n)}};await a(e),o.sort();let s=De("sha256");for(let p of o)s.update(Se(e,p)),s.update("\0"),s.update(await A(p)),s.update("\0");return s.digest("hex")}async function oe(e){let r=_e(e.path,e.type);if(r)return{skipped:!0,reason:r};let t=e.cache??new u,o=e.client??new J(e.baseUrl,{...e.auth,orgId:e.orgId}),a;try{a=await k(e.path,t)}catch(i){return{skipped:!0,reason:`could not read ${g(e.path)}: ${i.message}`}}let s={sha256:a,env:e.env,orgId:e.orgId,type:e.type},p=await t.lookup(s);if(p){if(await o.liveness(p.appId)!=="gone")return{appId:p.appId,...p.appUrl?{appUrl:p.appUrl}:{},fromCache:!0};e.onProgress?.(`${p.appId} is no longer in the cloud \u2014 uploading again`),await t.forget(s)}try{e.onProgress?.(`uploading ${g(e.path)}\u2026`);let i=await o.upload(e.path,e.type);return await t.remember({sha256:a,env:e.env,orgId:e.orgId,type:e.type,appId:i.appId,...i.appUrl?{appUrl:i.appUrl}:{},...D(i.url)?{storedAt:D(i.url)}:{},sourcePath:e.path}),e.onProgress?.(i.cached?`${g(e.path)} already in the cloud (${i.appId})`:`${g(e.path)} uploaded (${i.appId})`),{appId:i.appId,...i.appUrl?{appUrl:i.appUrl}:{},fromCache:!1}}catch(i){return{skipped:!0,reason:i.message}}}function v(e){return`${e.platform}|${X(e)}`}var m=new Map,ae=new Set;function ie(e){return ae.has(v(e))}function nr(e,r,t){r.state==="stopped"&&(m.has(v(r))||se(e,r,t))}async function ne(e,r,t){let o=m.get(v(r));return o?(t?.(`waiting for ${r.displayName} to finish booting\u2026`),o):se(e,r,t)}function se(e,r,t){let o=v(r),a=e.prepare(r,t);m.set(o,a),r.state==="stopped"&&a.then(()=>ae.add(o),()=>{});let s=()=>{m.get(o)===a&&m.delete(o)};return a.then(s,s),a.catch(()=>{}),a}import{basename as Me}from"path";import{spawnSync as Ee}from"child_process";async function Fe(e,r,t){if(!e.teardownPlan||!t.appPackage&&!t.shutdown)return;let o;try{o=await e.teardownPlan(r,t)}catch{return}o.length!==0&&T(`device:${r.id}`,()=>{G({udid:r.id,displayName:r.displayName});for(let a of o)try{Ee(a.file,a.args,{timeout:3e4,stdio:"ignore"})}catch{}})}var pe={emulator:[".apk"],simulator:[".zip"]};async function $e(e,r,t,o){if(e.kind==="package")return e;if(e.kind==="app_id"){let a=r.cloudUpload;if(!a)throw new Error(`${e.value} is an app id, which needs an account to download it. Log in, or pass a path to a local build instead.`);let s=await V({appId:e.value,baseUrl:a.baseUrl,auth:a.auth,...pe[t]?{accepts:pe[t]}:{},...o?{onProgress:o}:{}}),p=I(s.path);if(!p||p.kind==="app_id")throw new Error(`${s.name} is not a build this CLI can install (from ${e.value}).`);return p}try{let a=new u,s=await k(e.value,a),p=new Y;await p.find(s)||o?.(`copying ${Me(e.value)} into the local app store\u2026`);let n=await p.put({key:s,sourcePath:e.value,source:"local"});return{...e,value:n.path}}catch{return e}}function Re(e){T(`appium:${e}`,()=>{H({deviceClass:e,owner:process.pid})})}var x=class extends Error{constructor(r){super(r),this.name="MobileHostUnsupportedError"}},w=class extends Error{constructor(t,o){super(t);this.doctorText=o;this.name="MobilePreflightError"}};async function Ne(e,r,t){let o=t.cloudUpload,a=await oe({path:e,type:r,env:o.env,orgId:o.orgId,userId:o.userId,auth:o.auth,baseUrl:o.baseUrl,...t.onProgress?{onProgress:t.onProgress}:{}});if(te(a)){t.onProgress?.(`app not uploaded \u2014 ${a.reason}`);return}return a.appId}var Be="app must be a build (.apk for an emulator, .zip of the .app bundle for a simulator) or an app id from your cloud uploads \u2014 a package id names something already installed on one device, so it cannot be uploaded, exported as code, or run anywhere else.",de=/\.(apk|zip)$/i;function I(e){let r=e.trim();if(C(r))return{kind:"app_id",value:r};let t=de.exec(r)?.[1]?.toLowerCase();return t?{kind:t,value:r}:null}function Oe(e){return!!e&&(de.test(e)||C(e.trim()))}function Le(e){return e.filter(r=>r.required&&r.status==="fail")}function je(e,r){return!!r&&E(e,r)}async function Dr(e){let r=L();if(!r.supported)throw new x(r.reason);let t=Q()??e.appiumUrl??e.defaults?.appium_url,o=!!(e.agent||!e.interactive),a=R(),s=!!N();o&&e.platform?.toLowerCase()!=="ios"&&!s&&((await a.status("emulator")).installed||await a.ensure("emulator",{automatic:!0,onProgress:e.onProgress}));let p=await j(e.platform,{appiumUrl:t});if(K(p)){let d=p.sections.flatMap(P=>Le(P.checks)).map(P=>P.label).join(", ");throw new w(`Mobile toolchain not ready (${d}). Run \`kane-cli doctor --target ${e.platform?.toLowerCase()==="ios"?"simulator":e.platform?.toLowerCase()==="android"?"emulator":"<emulator|simulator>"}\` for details.`,z(p))}let i=await O({device:e.device,platform:e.platform,defaultTarget:e.defaults?.default_target,interactive:e.interactive}),n;if(i.ok)n=i.target;else if(i.reason==="needs-picker"&&e.pickTarget){let d=await e.pickTarget(i.candidates);if(!d)throw new Error("Target selection cancelled");n=d}else throw new Error(i.message);let f=B(n.platform);if(!f)throw new Error(`No provider for platform "${n.platform}"`);let l=F(n);if(!l)throw new Error(`No managed dependencies serve ${n.platform} ${n.kind} targets yet.`);if(!(s&&n.platform.toLowerCase()==="android"))try{await a.ensure(l,{automatic:o,onProgress:e.onProgress})}catch(d){throw d instanceof $?new w(d.message,d.message):d}let le=n.state!=="ready"||ie(n);n=await ne(f,n,e.onProgress);let ce=await q(l,{...t?{appiumUrl:t}:{},device:{udid:n.id,displayName:n.displayName},onProgress:e.onProgress});Re(l);let U=je(n,e.defaults?.default_target)?e.defaults?.default_app:void 0,h=e.app??(Oe(U)?U:void 0);if(e.app&&!I(e.app))throw new Error(`${e.app}: ${Be}`);let c=h?I(h):null,S=c?await $e(c,e,l,e.onProgress):null,b=S?await f.ensureApp(n,S,e.onProgress):void 0,y=c?.kind==="app_id"?c.value:e.cloudUpload&&c&&h?await Ne(c.value,l,e):void 0;await Fe(f,n,{shutdown:le,...b?{appPackage:b}:{}});let ue=Z(n,b,{noReset:e.noReset??e.defaults?.no_reset,appiumUrl:ce.url,autoGrantPermissions:e.defaults?.auto_grant_permissions,autoAcceptAlerts:e.defaults?.auto_accept_alerts}),_=y??h;return{device:ue,target:n,provider:f,...y?{appId:y}:{},..._?{appRef:_}:{}}}export{X as a,Z as b,te as c,_e as d,oe as e,nr as f,ne as g,x as h,w as i,Be as j,I as k,Oe as l,Dr as m};