@testmuai/kane-cli 0.7.1 → 0.7.2

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 (258) hide show
  1. package/dist/ChatSurface-E7QKI4LA.js +8 -0
  2. package/dist/{ChromeProfilePicker-4CDSPBWL.js → ChromeProfilePicker-DGDWGCZD.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-TLRVBA4E.js → CliFeedbackPrompt-SYCZXSME.js} +1 -1
  4. package/dist/{CliUploadProgress-WGGFLUSF.js → CliUploadProgress-VDEAKXJY.js} +1 -1
  5. package/dist/{ConfigView-DBANTBXC.js → ConfigView-HPKRQXMC.js} +1 -1
  6. package/dist/EvidenceViewOffer-F5YG54OC.js +2 -0
  7. package/dist/{FolderPicker-W7RCIFEL.js → FolderPicker-4NSDXQY5.js} +1 -1
  8. package/dist/{HelpView-FBCX32U7.js → HelpView-ON6BFGJM.js} +1 -1
  9. package/dist/{InfoBox-KK2ICVS4.js → InfoBox-B23NZ6IG.js} +1 -1
  10. package/dist/{LinksBox-KKRANMR3.js → LinksBox-TI26VFFH.js} +1 -1
  11. package/dist/{ProfilesView-DGPXSAQN.js → ProfilesView-CRO5AH3H.js} +1 -1
  12. package/dist/{ProjectPicker-ESQSL4TT.js → ProjectPicker-3N7LJOXU.js} +1 -1
  13. package/dist/{SaveSessionPrompt-AQGP5W6E.js → SaveSessionPrompt-UTOEC5AW.js} +1 -1
  14. package/dist/SingleShotApp-Y3YDFQSD.js +2 -0
  15. package/dist/{SummaryBox-BFZJW2KK.js → SummaryBox-JK64EKC2.js} +1 -1
  16. package/dist/TestMdRunView-O6JTHV5W.js +2 -0
  17. package/dist/{WhoamiView-JABY3I5Q.js → WhoamiView-6QSLPNF6.js} +1 -1
  18. package/dist/{auth-76LVI6B5.js → auth-IKFVW3NX.js} +1 -1
  19. package/dist/bind-KCUSVJXG.js +12 -0
  20. package/dist/bootstrap-NFYYRGGR.js +2 -0
  21. package/dist/bridge-JSKEO4N3.js +2 -0
  22. package/dist/{changelog-PSWPPOAF.js → changelog-AAH2ZBYO.js} +1 -1
  23. package/dist/chat-committer-UUC6JTRJ.js +2 -0
  24. package/dist/chat-controller-T2FAI55V.js +2 -0
  25. package/dist/{chunk-NAE7MBR2.js → chunk-23VPUWBD.js} +3 -3
  26. package/dist/chunk-2UIHS2FH.js +2 -0
  27. package/dist/chunk-2WFZIQ62.js +2 -0
  28. package/dist/chunk-2WRBTLFN.js +13 -0
  29. package/dist/chunk-2YEHV2CX.js +2 -0
  30. package/dist/{chunk-KVQOBPAZ.js → chunk-3Q6WAK6P.js} +1 -1
  31. package/dist/{chunk-6HEGD6H2.js → chunk-4LTXE3IX.js} +1 -1
  32. package/dist/{chunk-KT6G7AF2.js → chunk-4NFCAGRK.js} +1 -1
  33. package/dist/chunk-53IBTIL3.js +12 -0
  34. package/dist/{chunk-FCMLIK7P.js → chunk-5DBK6QNS.js} +1 -1
  35. package/dist/chunk-5DT7PIGB.js +5 -0
  36. package/dist/{chunk-XDHZMCTA.js → chunk-5FJJJNJK.js} +2 -2
  37. package/dist/{chunk-XVDJ423L.js → chunk-5SXMV66P.js} +1 -1
  38. package/dist/{chunk-6UJDOAYR.js → chunk-5WXGMXGA.js} +2 -2
  39. package/dist/chunk-5ZQZOVWY.js +4 -0
  40. package/dist/{chunk-5KFS3GAZ.js → chunk-6KPPGMO2.js} +1 -1
  41. package/dist/{chunk-RNSSM2BK.js → chunk-74HTO7K3.js} +1 -1
  42. package/dist/{chunk-PMHJRT3A.js → chunk-7KORP5FF.js} +1 -1
  43. package/dist/chunk-7OYZR6JA.js +3 -0
  44. package/dist/chunk-7QJ75SYR.js +8 -0
  45. package/dist/{chunk-DXV6MBTD.js → chunk-AECMF3T2.js} +1 -1
  46. package/dist/{chunk-3LWTUMDG.js → chunk-AFBKGZFG.js} +1 -1
  47. package/dist/{chunk-AM5S4KG4.js → chunk-AFPHLUQ5.js} +1 -1
  48. package/dist/chunk-AJ56AMT6.js +9 -0
  49. package/dist/{chunk-NJPTOKW5.js → chunk-APPYQZFK.js} +1 -1
  50. package/dist/{chunk-CSQ46PJ7.js → chunk-AXTGYOMK.js} +1 -1
  51. package/dist/{chunk-HPMS5KO6.js → chunk-B5RS2XZU.js} +2 -2
  52. package/dist/chunk-BKHXPBWN.js +2 -0
  53. package/dist/{chunk-SRDHPKJT.js → chunk-BXYWX4J3.js} +1 -1
  54. package/dist/chunk-C3T7TKAC.js +349 -0
  55. package/dist/{chunk-JEUA4UWK.js → chunk-CLGC7VEO.js} +1 -1
  56. package/dist/{chunk-L4JIMNKW.js → chunk-CUM23TLF.js} +1 -1
  57. package/dist/chunk-DBIBROYW.js +5 -0
  58. package/dist/chunk-DBKNJRJG.js +2 -0
  59. package/dist/{chunk-M7WQM4UA.js → chunk-DUAXZYAD.js} +1 -1
  60. package/dist/chunk-DZPGG4S6.js +7 -0
  61. package/dist/{chunk-2KBD6JZX.js → chunk-EOLFTMWF.js} +1 -1
  62. package/dist/{chunk-2XGDWUJ5.js → chunk-F7ISS545.js} +1 -1
  63. package/dist/{chunk-JKTFTF24.js → chunk-FBHRBFHP.js} +1 -1
  64. package/dist/{chunk-L7VREJTG.js → chunk-FDIPQRX4.js} +1 -1
  65. package/dist/{chunk-AAONIIQV.js → chunk-GFKCTYCA.js} +1 -1
  66. package/dist/{chunk-73C4PRYU.js → chunk-GYNTNKNB.js} +1 -1
  67. package/dist/{chunk-KNDSQ4PS.js → chunk-H32GM5G4.js} +1 -1
  68. package/dist/{chunk-323MLBYA.js → chunk-HYSFJSIG.js} +1 -1
  69. package/dist/chunk-I7TIGB7K.js +2 -0
  70. package/dist/chunk-IDX3TOPY.js +6 -0
  71. package/dist/{chunk-CVOGP253.js → chunk-IMR64OCZ.js} +1 -1
  72. package/dist/{chunk-IBNC444G.js → chunk-IOD3HQVW.js} +1 -1
  73. package/dist/{chunk-URQUQWGW.js → chunk-J5FBU425.js} +40 -40
  74. package/dist/chunk-JKM2PUHI.js +4 -0
  75. package/dist/{chunk-ZM5PVRJK.js → chunk-JPWLGHPM.js} +1 -1
  76. package/dist/{chunk-5JTUL6XL.js → chunk-JZ26R6UL.js} +1 -1
  77. package/dist/chunk-KBM3XHAM.js +2 -0
  78. package/dist/{chunk-SY3HLQMV.js → chunk-KCCSWEGA.js} +1 -1
  79. package/dist/{chunk-APAIWBIH.js → chunk-KQZA2QSC.js} +1 -1
  80. package/dist/{chunk-X3ICV5M5.js → chunk-KWIK22R6.js} +1 -1
  81. package/dist/{chunk-33QXD75Y.js → chunk-M6FKJKC6.js} +2 -2
  82. package/dist/{chunk-IXVOXJP6.js → chunk-MK7JUOYV.js} +1 -1
  83. package/dist/chunk-N2P4MI32.js +2 -0
  84. package/dist/{chunk-JRMDGLLT.js → chunk-O75ZHGJG.js} +1 -1
  85. package/dist/chunk-OR6MCL6Z.js +2 -0
  86. package/dist/chunk-ORQNKZ2Z.js +5 -0
  87. package/dist/{chunk-QROUKGKU.js → chunk-OS4VSIHT.js} +1 -1
  88. package/dist/{chunk-UI7KULSI.js → chunk-OUJQVBUT.js} +3 -3
  89. package/dist/{chunk-UBFKZEX3.js → chunk-PLOWZLG5.js} +1 -1
  90. package/dist/chunk-QIGPXYMF.js +19 -0
  91. package/dist/chunk-QOFZSHSC.js +47 -0
  92. package/dist/{chunk-2XMJ6YAE.js → chunk-R5T4RLF5.js} +1 -1
  93. package/dist/chunk-R7QAS6LZ.js +4 -0
  94. package/dist/{chunk-CDQX6HGJ.js → chunk-RDNFVZEB.js} +1 -1
  95. package/dist/{chunk-NRTHYROA.js → chunk-SFII7HPP.js} +1 -1
  96. package/dist/{chunk-3FN5VJMV.js → chunk-SL6PCVM2.js} +1 -1
  97. package/dist/{chunk-LQZ2BU7Q.js → chunk-STVP2XHO.js} +1 -1
  98. package/dist/chunk-TH47OOBV.js +4 -0
  99. package/dist/{chunk-OHRS3H7Z.js → chunk-TRJUD3XJ.js} +1 -1
  100. package/dist/{chunk-BAL64WSI.js → chunk-UC7MNPIN.js} +1 -1
  101. package/dist/chunk-UD7KKHPW.js +5 -0
  102. package/dist/chunk-VAYBKR76.js +4 -0
  103. package/dist/chunk-VFII6C46.js +2 -0
  104. package/dist/{chunk-R2RGSO4B.js → chunk-VHZ4S57N.js} +1 -1
  105. package/dist/{chunk-WJ5HDEVH.js → chunk-VLWMMOMF.js} +1 -1
  106. package/dist/chunk-VMM4LC4V.js +10 -0
  107. package/dist/{chunk-322JEJEH.js → chunk-VOOPWFHW.js} +1 -1
  108. package/dist/{chunk-4OPQJ7PE.js → chunk-VRLUNZAK.js} +1 -1
  109. package/dist/{chunk-AH7ZZIZY.js → chunk-VRVFPMCR.js} +1 -1
  110. package/dist/{chunk-F6ZOJXYU.js → chunk-VT54ARGE.js} +1 -1
  111. package/dist/{chunk-NBKQT7LJ.js → chunk-VWKVUOXU.js} +1 -1
  112. package/dist/chunk-W4B5LOEX.js +4 -0
  113. package/dist/{chunk-36OC3TFE.js → chunk-W5TTF7GB.js} +2 -2
  114. package/dist/chunk-WXHQYYD5.js +2 -0
  115. package/dist/{chunk-NOCIMJSN.js → chunk-XUS4WKDS.js} +1 -1
  116. package/dist/chunk-XWKUZJCP.js +2 -0
  117. package/dist/chunk-YTHQNN2L.js +3 -0
  118. package/dist/{chunk-V36ATG7A.js → chunk-ZBOWFJB2.js} +2 -2
  119. package/dist/chunk-ZMNJBUAO.js +2 -0
  120. package/dist/{chunk-LR5XO2KD.js → chunk-ZRASQ63J.js} +1 -1
  121. package/dist/{chunk-C4G7RVJ6.js → chunk-ZUGCHQFC.js} +1 -1
  122. package/dist/committer-SWEWEYNX.js +2 -0
  123. package/dist/{config-R3GF2FZA.js → config-CWZV6XPT.js} +1 -1
  124. package/dist/{cover-cmd-TXICWHUU.js → cover-cmd-NWIRJY5Z.js} +1 -1
  125. package/dist/{credentials-XN4ROCQ3.js → credentials-YHTJGKEO.js} +1 -1
  126. package/dist/descriptor-OEUZZCOK.js +2 -0
  127. package/dist/design-committer-VYT6NU3T.js +2 -0
  128. package/dist/dispatch-WVNXB7AD.js +2 -0
  129. package/dist/docx-convert-CHLJUTFH.js +2 -0
  130. package/dist/{dossier-QZV74XOS.js → dossier-KTLTGT2X.js} +1 -1
  131. package/dist/{evidence-V23FPVXQ.js → evidence-IVDNXWPL.js} +1 -1
  132. package/dist/evolve-cmd-XBX4SX5H.js +2 -0
  133. package/dist/{exit-manager-HNFATGSM.js → exit-manager-XZL4KIJU.js} +1 -1
  134. package/dist/explain-UAAQWHYR.js +2 -0
  135. package/dist/{explain-cmd-RZW6QJYM.js → explain-cmd-75MCF2ZV.js} +1 -1
  136. package/dist/{explain-cmd-X7JZLSZZ.js → explain-cmd-IZEHWZV5.js} +1 -1
  137. package/dist/extract-bind-5OWELRME.js +10 -0
  138. package/dist/extract-cmd-ZRYMJ6IC.js +5 -0
  139. package/dist/feeder-C3TOJPKK.js +2 -0
  140. package/dist/{gaps-cmd-BWCRLLBK.js → gaps-cmd-XBRXKXDL.js} +1 -1
  141. package/dist/{gate-YHBPWEM5.js → gate-54BRAE7N.js} +1 -1
  142. package/dist/{generate-headless-BSTDLZZY.js → generate-headless-D6BISWDC.js} +2 -2
  143. package/dist/{headless-io-BL3TEAX5.js → headless-io-66RG5NN5.js} +1 -1
  144. package/dist/identity-ADZ4PAJF.js +2 -0
  145. package/dist/index.js +43 -43
  146. package/dist/ingest-EX72IEQT.js +2 -0
  147. package/dist/ingest-cmd-YTGOICTC.js +2 -0
  148. package/dist/{interactive-bind-43HGDF5K.js → interactive-bind-XSRD36MO.js} +7 -6
  149. package/dist/{lifecycle-cmd-D6TVTYRK.js → lifecycle-cmd-EQSFAZG6.js} +1 -1
  150. package/dist/{list-cmd-XCAV2FKA.js → list-cmd-IRJSUCM5.js} +1 -1
  151. package/dist/{list-commands-747UTUSS.js → list-commands-RCYHJ5Y3.js} +1 -1
  152. package/dist/locks-cmd-CSVSWY2Y.js +2 -0
  153. package/dist/logical-ids-TEBCQJGO.js +2 -0
  154. package/dist/login-flow-PYAPYCPY.js +2 -0
  155. package/dist/maintenance-cmd-MVFA6H74.js +2 -0
  156. package/dist/pdf-convert-OZIRUADA.js +2 -0
  157. package/dist/{persist-recorded-session-MDPWWUA7.js → persist-recorded-session-DTYCLXTQ.js} +1 -1
  158. package/dist/phase-seed-DIRETNU6.js +2 -0
  159. package/dist/pipeline-MXFOD6ES.js +2 -0
  160. package/dist/readmodel-XOYGGQ3S.js +2 -0
  161. package/dist/reconcile-cmd-EG6BOU3A.js +2 -0
  162. package/dist/reconcile-deps-HTT6IPHT.js +4 -0
  163. package/dist/reconcile-engine-JQNXALNY.js +2 -0
  164. package/dist/{recording-banner-TALO7PUR.js → recording-banner-76GCIPUN.js} +1 -1
  165. package/dist/records-IOZTZUZV.js +2 -0
  166. package/dist/{require-project-folder-R347LFDQ.js → require-project-folder-ACRDP5ZB.js} +1 -1
  167. package/dist/{resolver-IDCGRPFJ.js → resolver-SRPCFW7P.js} +1 -1
  168. package/dist/revert-NQ7GEVSE.js +2 -0
  169. package/dist/review-cmd-L3V5UP5T.js +4 -0
  170. package/dist/run-GMZCDRDD.js +2 -0
  171. package/dist/run-TFRWPGXP.js +2 -0
  172. package/dist/run-channel-RGH4WIQX.js +2 -0
  173. package/dist/{run-test-md-DFNIGYB7.js → run-test-md-KEHSRMCM.js} +2 -2
  174. package/dist/sessions-GIEXOCE4.js +2 -0
  175. package/dist/{sessions-cmd-AQWLL5ZN.js → sessions-cmd-ZVYGSRJ3.js} +4 -4
  176. package/dist/{skill-installer-ANXTCXQV.js → skill-installer-HBN3A35K.js} +1 -1
  177. package/dist/spawner-GC5CFAJ7.js +2 -0
  178. package/dist/structured-answers-A43Q25CZ.js +5 -0
  179. package/dist/tcg-generate-V7YFNC5O.js +2 -0
  180. package/dist/testmd-actions-MNDOO76O.js +2 -0
  181. package/dist/token-refresh-3UYMCYG3.js +2 -0
  182. package/dist/{validate-basic-O2DP2XJL.js → validate-basic-ZGWPBYB6.js} +1 -1
  183. package/dist/verdicts-SCETLY5J.js +2 -0
  184. package/dist/{version-check-RNR3JCQ5.js → version-check-CJWKDAXV.js} +1 -1
  185. package/dist/{view-cmd-YSEGA5PI.js → view-cmd-SOVM64L2.js} +1 -1
  186. package/dist/walk-session-YUYRULPY.js +2 -0
  187. package/dist/with-telemetry-E7QWPGL6.js +2 -0
  188. package/package.json +6 -6
  189. package/dist/ChatSurface-D66CACLX.js +0 -8
  190. package/dist/EvidenceViewOffer-DNCQ3A6R.js +0 -2
  191. package/dist/SingleShotApp-SMCAIKCE.js +0 -2
  192. package/dist/TestMdRunView-FMKZJ3A3.js +0 -2
  193. package/dist/bind-AACBTSAA.js +0 -12
  194. package/dist/bootstrap-CNOZ5VRB.js +0 -2
  195. package/dist/bridge-T4HL4TG7.js +0 -2
  196. package/dist/chat-committer-4BQBOKI4.js +0 -2
  197. package/dist/chat-controller-NNTMKEPG.js +0 -2
  198. package/dist/chunk-2SREGETM.js +0 -4
  199. package/dist/chunk-3STZLM5J.js +0 -4
  200. package/dist/chunk-5YPBPZUR.js +0 -2
  201. package/dist/chunk-BQHKBOSF.js +0 -11
  202. package/dist/chunk-DQ54MH7F.js +0 -13
  203. package/dist/chunk-EV3EHXEI.js +0 -4
  204. package/dist/chunk-F7WKDMX7.js +0 -47
  205. package/dist/chunk-FPFOW6BS.js +0 -2
  206. package/dist/chunk-GVIPTX6T.js +0 -6
  207. package/dist/chunk-GW5DWAXY.js +0 -2
  208. package/dist/chunk-HJERKSBK.js +0 -349
  209. package/dist/chunk-IQDWBTRJ.js +0 -3
  210. package/dist/chunk-KRXSXQBU.js +0 -12
  211. package/dist/chunk-NAC7SFBE.js +0 -5
  212. package/dist/chunk-NRC2G4Y5.js +0 -5
  213. package/dist/chunk-O56PUUNL.js +0 -9
  214. package/dist/chunk-QM4S2APK.js +0 -2
  215. package/dist/chunk-SE6WNCYU.js +0 -4
  216. package/dist/chunk-SWESH2J7.js +0 -10
  217. package/dist/chunk-T63R6QT4.js +0 -4
  218. package/dist/chunk-UPPEOQJQ.js +0 -3
  219. package/dist/chunk-UX2B7L6K.js +0 -2
  220. package/dist/chunk-VOHQA2SP.js +0 -2
  221. package/dist/chunk-W5DOU2DV.js +0 -2
  222. package/dist/chunk-W6VD2XFO.js +0 -19
  223. package/dist/chunk-WWNSD6FA.js +0 -6
  224. package/dist/chunk-ZLCZDAEX.js +0 -6
  225. package/dist/committer-2EJPVVCQ.js +0 -2
  226. package/dist/descriptor-KXDJ4XYD.js +0 -2
  227. package/dist/design-committer-BQUWD6AC.js +0 -2
  228. package/dist/docx-convert-ZBVQO2LG.js +0 -2
  229. package/dist/evolve-cmd-PZCPXDMR.js +0 -2
  230. package/dist/explain-UE4IACQH.js +0 -2
  231. package/dist/extract-bind-BFY7IRL4.js +0 -10
  232. package/dist/extract-cmd-U3MGK2LP.js +0 -6
  233. package/dist/feeder-XGTFV7TZ.js +0 -2
  234. package/dist/ingest-AL6CABJT.js +0 -2
  235. package/dist/ingest-cmd-O6OWWZT4.js +0 -2
  236. package/dist/locks-cmd-QAULI5LV.js +0 -2
  237. package/dist/logical-ids-4G4FAHNJ.js +0 -2
  238. package/dist/login-flow-CV76ENHV.js +0 -2
  239. package/dist/maintenance-cmd-ZRB4NTGG.js +0 -2
  240. package/dist/pdf-convert-S7VYE6AV.js +0 -2
  241. package/dist/phase-seed-52LRE3LH.js +0 -2
  242. package/dist/pipeline-LM5JAK7F.js +0 -2
  243. package/dist/readmodel-X7L7W2BA.js +0 -2
  244. package/dist/reconcile-cmd-DGCSDML6.js +0 -2
  245. package/dist/records-5SVUXJBW.js +0 -2
  246. package/dist/revert-DXXYXJGN.js +0 -2
  247. package/dist/review-cmd-2QF5HTI7.js +0 -4
  248. package/dist/run-52UIBPXD.js +0 -2
  249. package/dist/run-VRVH4VO3.js +0 -2
  250. package/dist/sessions-BLXZVK5U.js +0 -2
  251. package/dist/spawner-AH5FTUYU.js +0 -2
  252. package/dist/structured-answers-QHFGZPSS.js +0 -5
  253. package/dist/tcg-generate-WKCBBKI5.js +0 -2
  254. package/dist/testmd-actions-RPYG6TJG.js +0 -2
  255. package/dist/token-refresh-NIDUOTRM.js +0 -2
  256. package/dist/verdicts-TJH3O5UW.js +0 -2
  257. package/dist/walk-session-HXW4OSA2.js +0 -2
  258. package/dist/with-telemetry-PNP6CAVM.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-APAIWBIH.js";import{y as o}from"./chunk-C4G7RVJ6.js";import{a as R}from"./chunk-HCBYKLMW.js";import{a as y,b as c,j as x}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var k=b(w(),1);var i=b(R(),1);function A(e){let t=e.decisions.filter(r=>r.kind==="replay").length,l=e.decisions.filter(r=>r.kind==="author").length,p=e.outcomes.filter(r=>r.status==="passed").length,d=e.outcomes.filter(r=>r.status==="failed").length,f=e.outcomes.filter(r=>r.status==="skipped").length,a=o.green,n;e.cancelled||e.overallStatus==="interrupted"?(a=o.orange,n="CANCELLED"):e.overallStatus==="failed"?(a=o.red,n="FAILED"):n="PASSED";let s=`${n} \xB7 ${e.durationS}s \xB7 ${e.outcomes.length} steps (${p} passed, ${d} failed, ${f} skipped)`,T=`${t} replay \xB7 ${l} author`,C=e.retryTriggered,_="yes \u2014 run recovered after a replay miss",u,h=o.dim;if(e.cancelled)u="\u2013 not committed (cancellation)";else if(e.overallStatus==="failed")u="\u2013 not committed (run failed)",h=o.red;else if(!e.shouldCommit)e.isFirstRun?u="\u2013 not committed (first run skipped commit)":e.lockHeld?u="\u2013 not committed":u="\u2013 not committed (readonly fallback / no lock)";else{let r=e.uploadResult?.testcaseId;u=r?`\u2713 pushed (testcase=${r})`:"\u2713 pushed",h=o.green}let v=e.shouldReplaceLocalOutput?"output dir replaced":e.anyAuthorStepRan?"untouched (cancellation or no replace)":"untouched (replay-only)",m,g=o.dim;return e.shouldUploadArtifacts?e.uploadResult?.success?(m="\u2713 TMS",g=o.green):e.uploadResult?(m=`\u2717 failed${e.uploadResult.error?`: ${e.uploadResult.error}`:""}`,g=o.red):m="\u2013 not run":m="\u2013 skipped (--local or no auth)",{resultLine:{color:a,text:s},breakdown:T,showRetries:C,retriesText:_,commitText:u,commitColor:h,artifactsText:v,uploadText:m,uploadColor:g}}function O(e){let t=e.decisions.filter(s=>s.kind==="replay").length,l=e.decisions.filter(s=>s.kind==="author").length,p=e.outcomes.filter(s=>s.status==="passed").length,d=e.outcomes.filter(s=>s.status==="failed").length,f=e.outcomes.filter(s=>s.status==="skipped").length,a,n=!1;return e.cancelled?a="cancellation":e.overallStatus==="failed"?a="run_failed":e.shouldCommit&&e.uploadResult?.testcaseId?(a="ok",n=!0):!e.shouldCommit&&!e.lockHeld&&!e.isFirstRun?a="readonly_fallback":a="not_committed",{type:"test_md_summary",overall_status:e.overallStatus,duration_s:e.durationS,steps:{total:e.outcomes.length,passed:p,failed:d,skipped:f,replay_decisions:t,author_decisions:l},retries:{triggered:e.retryTriggered},commit:{committed:n,reason:a,...e.uploadResult?.testcaseId?{testcase_id:e.uploadResult.testcaseId}:{}},artifacts:{replaced:e.shouldReplaceLocalOutput},upload:{performed:e.shouldUploadArtifacts,...e.uploadResult?{succeeded:!!e.uploadResult.success}:{}},...e.shareUrl?{share_url:e.shareUrl}:{},cancelled:e.cancelled,...e.imports&&e.imports.length>0?{imports:e.imports}:{}}}function D({data:e}){let t=A(e),l=[{label:"result",value:(0,i.jsx)(c,{color:t.resultLine.color,bold:!0,children:t.resultLine.text})},{label:"breakdown",value:(0,i.jsx)(c,{color:o.dim,children:t.breakdown})}];return t.showRetries&&l.push({label:"retries",value:(0,i.jsx)(c,{color:o.orange,children:t.retriesText})}),l.push({label:"commit",value:(0,i.jsx)(c,{color:t.commitColor,children:t.commitText})}),l.push({label:"artifacts",value:(0,i.jsx)(c,{color:o.dim,children:t.artifactsText})}),l.push({label:"upload",value:(0,i.jsx)(c,{color:t.uploadColor,children:t.uploadText})}),(0,i.jsx)(S,{title:"Run summary",titleColor:"#ff9500",rows:l})}function I({data:e}){let{exit:t}=x();return(0,k.useEffect)(()=>{let l=setTimeout(()=>t(),50);return()=>clearTimeout(l)},[t]),(0,i.jsx)(y,{flexDirection:"column",children:(0,i.jsx)(D,{data:e})})}export{A as a,O as b,D as c,I as d};
2
+ import{a as S}from"./chunk-KQZA2QSC.js";import{y as o}from"./chunk-ZUGCHQFC.js";import{a as R}from"./chunk-HCBYKLMW.js";import{a as y,b as c,j as x}from"./chunk-C44QQJR4.js";import{a as w}from"./chunk-6YGTRKDT.js";import{e as b}from"./chunk-UR6MHSHU.js";var k=b(w(),1);var i=b(R(),1);function A(e){let t=e.decisions.filter(r=>r.kind==="replay").length,l=e.decisions.filter(r=>r.kind==="author").length,p=e.outcomes.filter(r=>r.status==="passed").length,d=e.outcomes.filter(r=>r.status==="failed").length,f=e.outcomes.filter(r=>r.status==="skipped").length,a=o.green,n;e.cancelled||e.overallStatus==="interrupted"?(a=o.orange,n="CANCELLED"):e.overallStatus==="failed"?(a=o.red,n="FAILED"):n="PASSED";let s=`${n} \xB7 ${e.durationS}s \xB7 ${e.outcomes.length} steps (${p} passed, ${d} failed, ${f} skipped)`,T=`${t} replay \xB7 ${l} author`,C=e.retryTriggered,_="yes \u2014 run recovered after a replay miss",u,h=o.dim;if(e.cancelled)u="\u2013 not committed (cancellation)";else if(e.overallStatus==="failed")u="\u2013 not committed (run failed)",h=o.red;else if(!e.shouldCommit)e.isFirstRun?u="\u2013 not committed (first run skipped commit)":e.lockHeld?u="\u2013 not committed":u="\u2013 not committed (readonly fallback / no lock)";else{let r=e.uploadResult?.testcaseId;u=r?`\u2713 pushed (testcase=${r})`:"\u2713 pushed",h=o.green}let v=e.shouldReplaceLocalOutput?"output dir replaced":e.anyAuthorStepRan?"untouched (cancellation or no replace)":"untouched (replay-only)",m,g=o.dim;return e.shouldUploadArtifacts?e.uploadResult?.success?(m="\u2713 TMS",g=o.green):e.uploadResult?(m=`\u2717 failed${e.uploadResult.error?`: ${e.uploadResult.error}`:""}`,g=o.red):m="\u2013 not run":m="\u2013 skipped (--local or no auth)",{resultLine:{color:a,text:s},breakdown:T,showRetries:C,retriesText:_,commitText:u,commitColor:h,artifactsText:v,uploadText:m,uploadColor:g}}function O(e){let t=e.decisions.filter(s=>s.kind==="replay").length,l=e.decisions.filter(s=>s.kind==="author").length,p=e.outcomes.filter(s=>s.status==="passed").length,d=e.outcomes.filter(s=>s.status==="failed").length,f=e.outcomes.filter(s=>s.status==="skipped").length,a,n=!1;return e.cancelled?a="cancellation":e.overallStatus==="failed"?a="run_failed":e.shouldCommit&&e.uploadResult?.testcaseId?(a="ok",n=!0):!e.shouldCommit&&!e.lockHeld&&!e.isFirstRun?a="readonly_fallback":a="not_committed",{type:"test_md_summary",overall_status:e.overallStatus,duration_s:e.durationS,steps:{total:e.outcomes.length,passed:p,failed:d,skipped:f,replay_decisions:t,author_decisions:l},retries:{triggered:e.retryTriggered},commit:{committed:n,reason:a,...e.uploadResult?.testcaseId?{testcase_id:e.uploadResult.testcaseId}:{}},artifacts:{replaced:e.shouldReplaceLocalOutput},upload:{performed:e.shouldUploadArtifacts,...e.uploadResult?{succeeded:!!e.uploadResult.success}:{}},...e.shareUrl?{share_url:e.shareUrl}:{},cancelled:e.cancelled,...e.imports&&e.imports.length>0?{imports:e.imports}:{}}}function D({data:e}){let t=A(e),l=[{label:"result",value:(0,i.jsx)(c,{color:t.resultLine.color,bold:!0,children:t.resultLine.text})},{label:"breakdown",value:(0,i.jsx)(c,{color:o.dim,children:t.breakdown})}];return t.showRetries&&l.push({label:"retries",value:(0,i.jsx)(c,{color:o.orange,children:t.retriesText})}),l.push({label:"commit",value:(0,i.jsx)(c,{color:t.commitColor,children:t.commitText})}),l.push({label:"artifacts",value:(0,i.jsx)(c,{color:o.dim,children:t.artifactsText})}),l.push({label:"upload",value:(0,i.jsx)(c,{color:t.uploadColor,children:t.uploadText})}),(0,i.jsx)(S,{title:"Run summary",titleColor:"#ff9500",rows:l})}function I({data:e}){let{exit:t}=x();return(0,k.useEffect)(()=>{let l=setTimeout(()=>t(),50);return()=>clearTimeout(l)},[t]),(0,i.jsx)(y,{flexDirection:"column",children:(0,i.jsx)(D,{data:e})})}export{A as a,O as b,D as c,I as d};
@@ -1,10 +1,10 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as B,b as V,c as se}from"./chunk-33QXD75Y.js";import{a as j,b as N}from"./chunk-ZM5PVRJK.js";import{a as C,b as Y,e as M,f as te,m as re}from"./chunk-RKWJG3WW.js";import{a as ne,b as oe}from"./chunk-2YQ6TW77.js";import{a as L}from"./chunk-DXV6MBTD.js";import{a as ee}from"./chunk-WAOCHXJ5.js";import{a as Z}from"./chunk-KNDSQ4PS.js";import{a as A}from"./chunk-RZ4F3BHX.js";import{a as H}from"./chunk-JRMDGLLT.js";import{a as O}from"./chunk-F6ZOJXYU.js";import{y as h}from"./chunk-C4G7RVJ6.js";import{a as F}from"./chunk-HCBYKLMW.js";import{a as k,b as g,i as Q}from"./chunk-C44QQJR4.js";import{a as X}from"./chunk-6YGTRKDT.js";import{e as v}from"./chunk-UR6MHSHU.js";var D=v(X(),1);import{existsSync as P,readFileSync as Je,rmSync as pe,unlinkSync as Ke}from"fs";import{resolve as G}from"path";import{promises as ie,realpathSync as ke}from"fs";import{homedir as be}from"os";import{join as q,parse as Te,relative as ae,resolve as ce}from"path";var le=new Set(["node_modules",".git","dist","build",".next",".venv","venv","target","__pycache__"]),R=class extends Error{constructor(s){super(`refusing to scan '${s}'. Run from your project root, or pass --root <dir>.`);this.cwd=s;this.name="HomeRefusedError"}};function ue(e){try{return ke(ce(e))}catch{return ce(e)}}function Ee(e){let r=ue(e),s=ue(be()),n=Te(r).root;if(process.platform==="win32"){let o=t=>t.toLowerCase();return o(r)===o(s)||o(r)===o(n)}return r===s||r===n}async function U(e){if(Ee(e.root))throw new R(e.root);let r=e.maxEntries??5e4,s=e.maxResults??5e3,n=new Set(e.ignore??[]),o=[],t=0,i=0,c=!1,f,l=[e.root];for(;l.length>0&&!c;){let a=l.shift(),m;try{m=await ie.readdir(a,{withFileTypes:!0})}catch{continue}i++;for(let b of m){if(t++,t>r){c=!0,f="max_entries";break}let w=b.name,E=q(a,w);if(b.isDirectory()){if(le.has(w)||w.startsWith(".")||w.startsWith("output-")||n.has(w))continue;l.push(E)}else if(b.isFile()&&w.endsWith("_test.md")&&(o.push({path:E,relPath:ae(e.root,E),source:"cwd"}),o.length>=s)){c=!0,f="max_results";break}}e.onProgress?.(i,o.length)}if(!c){let m=[{dir:q(e.root,".testmuai","tests"),depth:0}];for(;m.length>0&&!c;){let{dir:b,depth:w}=m.shift(),E;try{E=await ie.readdir(b,{withFileTypes:!0})}catch{continue}i++;for(let u of E){if(t++,t>r){c=!0,f="max_entries";break}let x=u.name,y=q(b,x);if(u.isDirectory()){if(w>=20||x.startsWith(".")||x.startsWith("output-")||le.has(x))continue;m.push({dir:y,depth:w+1})}else if(u.isFile()&&x.endsWith("_test.md")&&(o.push({path:y,relPath:ae(e.root,y),source:"tests-dir"}),o.length>=s)){c=!0,f="max_results";break}}}}return{results:o,aborted:c,abortReason:f,dirsScanned:i}}import{readFileSync as Se}from"fs";function W(e){try{return re(e,Se(e,"utf8")).global.tags??[]}catch{return[]}}import{mkdirSync as ve,writeFileSync as Re}from"fs";import{join as Pe}from"path";function de(e,r){return`Basic ${Buffer.from(`${e}:${r}`).toString("base64")}`}async function Me(e){let r=ne({tmsBaseUrl:e.tmsBaseUrl,testcaseId:e.testcaseId,codeExport:{enabled:!0,language:e.language,skipValidation:e.skipValidation}}),s=await A(r.url,{method:"POST",headers:{"content-type":"application/json",authorization:de(e.auth.username,e.auth.access_key)},body:JSON.stringify(r.body)});if(!s.ok)throw new Error(`code-export trigger failed: ${s.status} ${await s.text()}`);e.log("info","CODE_EXPORT_TRIGGERED","Code export triggered",{testcase_id:e.testcaseId})}async function De(e){let r=oe({tmsBaseUrl:e.tmsBaseUrl,testcaseId:e.testcaseId}),s=e.pollIntervalMs??5e3,n=e.timeoutMs??3e5,o=Date.now()+n;for(;Date.now()<o;){let t=await A(r,{headers:{authorization:de(e.auth.username,e.auth.access_key),accept:"application/json"}});if(!t.ok){await new Promise(l=>setTimeout(l,s));continue}let c=(await t.json()).data?.find(l=>l.code_name==="kane-cli-trigger");if(!c){await new Promise(l=>setTimeout(l,s));continue}let f=(c.status??"").toLowerCase();if(f==="in progress"||f==="in_progress"||f==="pending"){await new Promise(l=>setTimeout(l,s));continue}if(!c.url||c.url.length===0)throw new Error(`code-export status=${c.status} but no files returned`);ve(e.outDir,{recursive:!0});for(let l of c.url){let a=Pe(e.outDir,l.file_name),m=await A(l.file_url);if(!m.ok){e.log("warn","CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:l.file_name,status:m.status});continue}let b=await m.text();Re(a,b,"utf-8")}return e.log("info","CODE_EXPORT_DOWNLOADED","Code export saved",{out_dir:e.outDir,file_count:c.url.length}),e.outDir}throw new Error("code-export polling timed out")}async function fe(e){return await Me(e),await De(e)}var T=v(X(),1);import{existsSync as $e,readFileSync as Ce}from"fs";var p=v(F(),1);function Ie(e){B(e);let r=M(e);if(!$e(r))return null;try{return JSON.parse(Ce(r,"utf8"))}catch{return{}}}function Fe(e){return e===null?"never_run":e.testcase_id?"synced":"local_only"}function Oe(e){return e==="synced"?"\u2601":e==="local_only"?"\u25A3":"\u25CB"}function Ae(e){return e==="tests-dir"?"\u2726":" "}function Le(e,r){return r==="all"?!0:r==="synced"?e.status==="synced":r==="local"?e.status==="local_only":r==="never_run"?e.status==="never_run":r==="cli"?e.source==="tests-dir":r==="hand"?e.source==="cwd":!0}var z=["all","synced","local","never_run","cli","hand"];function Be(e){let r=z.indexOf(e);return z[(r+1)%z.length]}function me({root:e,currentOrgId:r,onSelect:s,onCancel:n}){let[o,t]=(0,T.useState)([]),[i,c]=(0,T.useState)(null),[f,l]=(0,T.useState)(!0),[a,m]=(0,T.useState)("all");(0,T.useEffect)(()=>{(async()=>{try{let u=await U({root:e}),x=[];for(let y of u.results){let K=Ie(y.path);K?.org_id!==void 0&&K.org_id!==r||x.push({path:y.path,relPath:y.relPath,name:C(y.path),status:Fe(K),source:y.source,tags:W(y.path)})}t(x),l(!1)}catch(u){u instanceof R,c(u.message),l(!1)}})()},[e,r]);let b=(0,T.useMemo)(()=>o.filter(u=>Le(u,a)).map(u=>({id:u.path,label:`${Oe(u.status)} ${Ae(u.source)} ${u.relPath}${u.tags.length>0?` [${u.tags.join(", ")}]`:""}`})),[o,a]),w=(0,T.useMemo)(()=>Ne(a,o),[a,o]);if(i)return(0,p.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.red,paddingX:2,paddingY:1,children:[(0,p.jsx)(g,{color:h.red,bold:!0,children:"testmd"}),(0,p.jsx)(k,{marginTop:1,children:(0,p.jsx)(g,{color:h.red,children:i})})]});let E=a==="all"?"all":je(a);return(0,p.jsx)(Z,{title:`testmd \xB7 filter: ${E}`,items:b,loading:f,itemNoun:"tests",onSelect:u=>{let x=o.find(y=>y.path===u.id);x&&s(x)},onCancel:n,onTab:()=>m(u=>Be(u)),extraHint:"cycle filter",footer:w})}function je(e){return e==="synced"?"synced (\u2601)":e==="local"?"local (\u25A3)":e==="never_run"?"never run (\u25CB)":e==="cli"?"cli-generated (\u2726)":e==="hand"?"hand-written":"all"}function Ne(e,r){let s={synced:r.filter(o=>o.status==="synced").length,local:r.filter(o=>o.status==="local_only").length,never:r.filter(o=>o.status==="never_run").length,cli:r.filter(o=>o.source==="tests-dir").length,hand:r.filter(o=>o.source==="cwd").length},n=o=>o?h.orange:h.dim;return(0,p.jsxs)(k,{flexDirection:"column",children:[(0,p.jsx)(g,{color:h.dim,children:"legend:"}),(0,p.jsxs)(k,{children:[(0,p.jsx)(g,{color:n(e==="synced"),children:` \u2601 synced (${s.synced}) `}),(0,p.jsx)(g,{color:n(e==="local"),children:`\u25A3 local (${s.local}) `}),(0,p.jsx)(g,{color:n(e==="never_run"),children:`\u25CB never run (${s.never})`})]}),(0,p.jsxs)(k,{children:[(0,p.jsx)(g,{color:n(e==="cli"),children:` \u2726 cli-generated (${s.cli}) `}),(0,p.jsx)(g,{color:n(e==="hand"),children:` hand-written (${s.hand})`})]})]})}var I=v(X(),1);import{existsSync as Ue,readFileSync as We}from"fs";var d=v(F(),1);function ge({path:e,relPath:r,onAction:s,onBack:n,onView:o}){let[t,i]=(0,I.useState)(null),[c,f]=(0,I.useState)(!1);(0,I.useEffect)(()=>{let a=M(e);if(Ue(a))try{i(JSON.parse(We(a,"utf8")))}catch{i(null)}},[e]),Q((a,m)=>{if(m.escape){if(c){f(!1);return}n();return}if(c){a==="y"||a==="Y"?(f(!1),s("delete")):(a==="n"||a==="N")&&f(!1);return}a==="r"&&s("run"),a==="e"&&t?.testcase_id&&s("export"),a==="d"&&f(!0),a==="v"&&o&&o()});let l=({k:a,v:m})=>m?(0,d.jsxs)(g,{children:[(0,d.jsx)(g,{color:h.dim,children:a.padEnd(14)}),m]}):null;return(0,d.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.orange,paddingX:2,paddingY:1,children:[(0,d.jsx)(g,{color:h.orange,bold:!0,children:r}),(0,d.jsx)(k,{marginTop:1,flexDirection:"column",children:t?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(l,{k:"test_id",v:t.test_id}),(0,d.jsx)(l,{k:"testcase_id",v:t.testcase_id}),(0,d.jsx)(l,{k:"project_id",v:t.project_id}),(0,d.jsx)(l,{k:"folder_id",v:t.folder_id}),(0,d.jsx)(l,{k:"org_id",v:t.org_id}),(0,d.jsx)(l,{k:"session_name",v:t.session_name}),(0,d.jsx)(l,{k:"commit_id",v:t.commit_id})]}):(0,d.jsx)(g,{color:h.dim,children:"(never run \u2014 no meta.json)"})}),c?(0,d.jsx)(k,{marginTop:1,children:(0,d.jsxs)(g,{color:h.red,bold:!0,children:["Delete ",r," and its output dir? [y/n]"]})}):(0,d.jsx)(k,{marginTop:1,children:(0,d.jsxs)(g,{color:h.dim,children:["[r] run [e] export",t?.testcase_id?"":" (need testcase_id)"," [d] delete",o?" [v] view":""," [Esc] back"]})})]})}function $(e){B(e);let r=M(e);if(!P(r))return null;try{return JSON.parse(Je(r,"utf8"))}catch{return null}}function he(e,r){return!e||e.org_id===void 0?!0:e.org_id===r}function J(e,r){return he(e,r)?null:(process.stderr.write(`error: this test belongs to org ${e.org_id}; you are logged in as org ${r}.
2
+ import{a as B,b as V,c as se}from"./chunk-M6FKJKC6.js";import{a as j,b as N}from"./chunk-JPWLGHPM.js";import{a as ne,b as oe}from"./chunk-2YQ6TW77.js";import{a as C,b as Y,e as M,f as te,m as re}from"./chunk-RKWJG3WW.js";import{a as L}from"./chunk-AECMF3T2.js";import{a as ee}from"./chunk-WAOCHXJ5.js";import{a as Z}from"./chunk-H32GM5G4.js";import{a as A}from"./chunk-RZ4F3BHX.js";import{a as H}from"./chunk-O75ZHGJG.js";import{a as O}from"./chunk-VT54ARGE.js";import{y as h}from"./chunk-ZUGCHQFC.js";import{a as F}from"./chunk-HCBYKLMW.js";import{a as k,b as g,i as Q}from"./chunk-C44QQJR4.js";import{a as X}from"./chunk-6YGTRKDT.js";import{e as v}from"./chunk-UR6MHSHU.js";var D=v(X(),1);import{existsSync as P,readFileSync as Je,rmSync as pe,unlinkSync as Ke}from"fs";import{resolve as G}from"path";import{promises as ie,realpathSync as ke}from"fs";import{homedir as be}from"os";import{join as q,parse as Te,relative as ae,resolve as ce}from"path";var le=new Set(["node_modules",".git","dist","build",".next",".venv","venv","target","__pycache__"]),R=class extends Error{constructor(s){super(`refusing to scan '${s}'. Run from your project root, or pass --root <dir>.`);this.cwd=s;this.name="HomeRefusedError"}};function ue(e){try{return ke(ce(e))}catch{return ce(e)}}function Ee(e){let r=ue(e),s=ue(be()),n=Te(r).root;if(process.platform==="win32"){let o=t=>t.toLowerCase();return o(r)===o(s)||o(r)===o(n)}return r===s||r===n}async function U(e){if(Ee(e.root))throw new R(e.root);let r=e.maxEntries??5e4,s=e.maxResults??5e3,n=new Set(e.ignore??[]),o=[],t=0,i=0,c=!1,f,l=[e.root];for(;l.length>0&&!c;){let a=l.shift(),m;try{m=await ie.readdir(a,{withFileTypes:!0})}catch{continue}i++;for(let b of m){if(t++,t>r){c=!0,f="max_entries";break}let w=b.name,E=q(a,w);if(b.isDirectory()){if(le.has(w)||w.startsWith(".")||w.startsWith("output-")||n.has(w))continue;l.push(E)}else if(b.isFile()&&w.endsWith("_test.md")&&(o.push({path:E,relPath:ae(e.root,E),source:"cwd"}),o.length>=s)){c=!0,f="max_results";break}}e.onProgress?.(i,o.length)}if(!c){let m=[{dir:q(e.root,".testmuai","tests"),depth:0}];for(;m.length>0&&!c;){let{dir:b,depth:w}=m.shift(),E;try{E=await ie.readdir(b,{withFileTypes:!0})}catch{continue}i++;for(let u of E){if(t++,t>r){c=!0,f="max_entries";break}let x=u.name,y=q(b,x);if(u.isDirectory()){if(w>=20||x.startsWith(".")||x.startsWith("output-")||le.has(x))continue;m.push({dir:y,depth:w+1})}else if(u.isFile()&&x.endsWith("_test.md")&&(o.push({path:y,relPath:ae(e.root,y),source:"tests-dir"}),o.length>=s)){c=!0,f="max_results";break}}}}return{results:o,aborted:c,abortReason:f,dirsScanned:i}}import{readFileSync as Se}from"fs";function W(e){try{return re(e,Se(e,"utf8")).global.tags??[]}catch{return[]}}import{mkdirSync as ve,writeFileSync as Re}from"fs";import{join as Pe}from"path";function de(e,r){return`Basic ${Buffer.from(`${e}:${r}`).toString("base64")}`}async function Me(e){let r=ne({tmsBaseUrl:e.tmsBaseUrl,testcaseId:e.testcaseId,codeExport:{enabled:!0,language:e.language,skipValidation:e.skipValidation}}),s=await A(r.url,{method:"POST",headers:{"content-type":"application/json",authorization:de(e.auth.username,e.auth.access_key)},body:JSON.stringify(r.body)});if(!s.ok)throw new Error(`code-export trigger failed: ${s.status} ${await s.text()}`);e.log("info","CODE_EXPORT_TRIGGERED","Code export triggered",{testcase_id:e.testcaseId})}async function De(e){let r=oe({tmsBaseUrl:e.tmsBaseUrl,testcaseId:e.testcaseId}),s=e.pollIntervalMs??5e3,n=e.timeoutMs??3e5,o=Date.now()+n;for(;Date.now()<o;){let t=await A(r,{headers:{authorization:de(e.auth.username,e.auth.access_key),accept:"application/json"}});if(!t.ok){await new Promise(l=>setTimeout(l,s));continue}let c=(await t.json()).data?.find(l=>l.code_name==="kane-cli-trigger");if(!c){await new Promise(l=>setTimeout(l,s));continue}let f=(c.status??"").toLowerCase();if(f==="in progress"||f==="in_progress"||f==="pending"){await new Promise(l=>setTimeout(l,s));continue}if(!c.url||c.url.length===0)throw new Error(`code-export status=${c.status} but no files returned`);ve(e.outDir,{recursive:!0});for(let l of c.url){let a=Pe(e.outDir,l.file_name),m=await A(l.file_url);if(!m.ok){e.log("warn","CODE_EXPORT_FILE_FAILED","Failed to download file",{file_name:l.file_name,status:m.status});continue}let b=await m.text();Re(a,b,"utf-8")}return e.log("info","CODE_EXPORT_DOWNLOADED","Code export saved",{out_dir:e.outDir,file_count:c.url.length}),e.outDir}throw new Error("code-export polling timed out")}async function fe(e){return await Me(e),await De(e)}var T=v(X(),1);import{existsSync as $e,readFileSync as Ce}from"fs";var p=v(F(),1);function Ie(e){B(e);let r=M(e);if(!$e(r))return null;try{return JSON.parse(Ce(r,"utf8"))}catch{return{}}}function Fe(e){return e===null?"never_run":e.testcase_id?"synced":"local_only"}function Oe(e){return e==="synced"?"\u2601":e==="local_only"?"\u25A3":"\u25CB"}function Ae(e){return e==="tests-dir"?"\u2726":" "}function Le(e,r){return r==="all"?!0:r==="synced"?e.status==="synced":r==="local"?e.status==="local_only":r==="never_run"?e.status==="never_run":r==="cli"?e.source==="tests-dir":r==="hand"?e.source==="cwd":!0}var z=["all","synced","local","never_run","cli","hand"];function Be(e){let r=z.indexOf(e);return z[(r+1)%z.length]}function me({root:e,currentOrgId:r,onSelect:s,onCancel:n}){let[o,t]=(0,T.useState)([]),[i,c]=(0,T.useState)(null),[f,l]=(0,T.useState)(!0),[a,m]=(0,T.useState)("all");(0,T.useEffect)(()=>{(async()=>{try{let u=await U({root:e}),x=[];for(let y of u.results){let K=Ie(y.path);K?.org_id!==void 0&&K.org_id!==r||x.push({path:y.path,relPath:y.relPath,name:C(y.path),status:Fe(K),source:y.source,tags:W(y.path)})}t(x),l(!1)}catch(u){u instanceof R,c(u.message),l(!1)}})()},[e,r]);let b=(0,T.useMemo)(()=>o.filter(u=>Le(u,a)).map(u=>({id:u.path,label:`${Oe(u.status)} ${Ae(u.source)} ${u.relPath}${u.tags.length>0?` [${u.tags.join(", ")}]`:""}`})),[o,a]),w=(0,T.useMemo)(()=>Ne(a,o),[a,o]);if(i)return(0,p.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.red,paddingX:2,paddingY:1,children:[(0,p.jsx)(g,{color:h.red,bold:!0,children:"testmd"}),(0,p.jsx)(k,{marginTop:1,children:(0,p.jsx)(g,{color:h.red,children:i})})]});let E=a==="all"?"all":je(a);return(0,p.jsx)(Z,{title:`testmd \xB7 filter: ${E}`,items:b,loading:f,itemNoun:"tests",onSelect:u=>{let x=o.find(y=>y.path===u.id);x&&s(x)},onCancel:n,onTab:()=>m(u=>Be(u)),extraHint:"cycle filter",footer:w})}function je(e){return e==="synced"?"synced (\u2601)":e==="local"?"local (\u25A3)":e==="never_run"?"never run (\u25CB)":e==="cli"?"cli-generated (\u2726)":e==="hand"?"hand-written":"all"}function Ne(e,r){let s={synced:r.filter(o=>o.status==="synced").length,local:r.filter(o=>o.status==="local_only").length,never:r.filter(o=>o.status==="never_run").length,cli:r.filter(o=>o.source==="tests-dir").length,hand:r.filter(o=>o.source==="cwd").length},n=o=>o?h.orange:h.dim;return(0,p.jsxs)(k,{flexDirection:"column",children:[(0,p.jsx)(g,{color:h.dim,children:"legend:"}),(0,p.jsxs)(k,{children:[(0,p.jsx)(g,{color:n(e==="synced"),children:` \u2601 synced (${s.synced}) `}),(0,p.jsx)(g,{color:n(e==="local"),children:`\u25A3 local (${s.local}) `}),(0,p.jsx)(g,{color:n(e==="never_run"),children:`\u25CB never run (${s.never})`})]}),(0,p.jsxs)(k,{children:[(0,p.jsx)(g,{color:n(e==="cli"),children:` \u2726 cli-generated (${s.cli}) `}),(0,p.jsx)(g,{color:n(e==="hand"),children:` hand-written (${s.hand})`})]})]})}var I=v(X(),1);import{existsSync as Ue,readFileSync as We}from"fs";var d=v(F(),1);function ge({path:e,relPath:r,onAction:s,onBack:n,onView:o}){let[t,i]=(0,I.useState)(null),[c,f]=(0,I.useState)(!1);(0,I.useEffect)(()=>{let a=M(e);if(Ue(a))try{i(JSON.parse(We(a,"utf8")))}catch{i(null)}},[e]),Q((a,m)=>{if(m.escape){if(c){f(!1);return}n();return}if(c){a==="y"||a==="Y"?(f(!1),s("delete")):(a==="n"||a==="N")&&f(!1);return}a==="r"&&s("run"),a==="e"&&t?.testcase_id&&s("export"),a==="d"&&f(!0),a==="v"&&o&&o()});let l=({k:a,v:m})=>m?(0,d.jsxs)(g,{children:[(0,d.jsx)(g,{color:h.dim,children:a.padEnd(14)}),m]}):null;return(0,d.jsxs)(k,{flexDirection:"column",borderStyle:"round",borderColor:h.orange,paddingX:2,paddingY:1,children:[(0,d.jsx)(g,{color:h.orange,bold:!0,children:r}),(0,d.jsx)(k,{marginTop:1,flexDirection:"column",children:t?(0,d.jsxs)(d.Fragment,{children:[(0,d.jsx)(l,{k:"test_id",v:t.test_id}),(0,d.jsx)(l,{k:"testcase_id",v:t.testcase_id}),(0,d.jsx)(l,{k:"project_id",v:t.project_id}),(0,d.jsx)(l,{k:"folder_id",v:t.folder_id}),(0,d.jsx)(l,{k:"org_id",v:t.org_id}),(0,d.jsx)(l,{k:"session_name",v:t.session_name}),(0,d.jsx)(l,{k:"commit_id",v:t.commit_id})]}):(0,d.jsx)(g,{color:h.dim,children:"(never run \u2014 no meta.json)"})}),c?(0,d.jsx)(k,{marginTop:1,children:(0,d.jsxs)(g,{color:h.red,bold:!0,children:["Delete ",r," and its output dir? [y/n]"]})}):(0,d.jsx)(k,{marginTop:1,children:(0,d.jsxs)(g,{color:h.dim,children:["[r] run [e] export",t?.testcase_id?"":" (need testcase_id)"," [d] delete",o?" [v] view":""," [Esc] back"]})})]})}function $(e){B(e);let r=M(e);if(!P(r))return null;try{return JSON.parse(Je(r,"utf8"))}catch{return null}}function he(e,r){return!e||e.org_id===void 0?!0:e.org_id===r}function J(e,r){return he(e,r)?null:(process.stderr.write(`error: this test belongs to org ${e.org_id}; you are logged in as org ${r}.
3
3
  Switch profiles with \`kane-cli profiles switch\` to act on it.
4
4
  `),2)}async function Ut(e={}){let r=!!process.stdin.isTTY&&!e.json,s=new O,n=new L;await V({isInteractive:r,creds:s,config:n});let o=s.getDefaultEnv()??"prod";try{let t=await N({creds:s,env:o,log:()=>{}});return t.resolvedCreds?.org_id===void 0?(process.stderr.write("error: TMS did not return an org_id. Run `kane-cli login` again.\n"),{ok:!1,code:2}):{ok:!0,orgId:String(t.resolvedCreds.org_id)}}catch(t){if(t instanceof j)return process.stderr.write("error: not authenticated. Run `kane-cli login` first.\n"),{ok:!1,code:2};throw t}}async function Wt(e,r){if(process.stdin.isTTY&&!e.json)return await Ye(r,e.root);let s=e.root??process.cwd(),n;try{n=await U({root:s,ignore:e.ignore})}catch(o){if(o instanceof R)return process.stderr.write(`error: ${o.message}
5
5
  `),2;throw o}for(let o of n.results){let t=$(o.path);if(!he(t,r))continue;let i={path:o.relPath.startsWith(".")?o.relPath:`./${o.relPath}`,name:C(o.path),has_meta:t!==null,source:o.source,synced:!!t?.testcase_id,tags:W(o.path)};t&&(t.test_id&&(i.test_id=t.test_id),t.testcase_id&&(i.testcase_id=t.testcase_id),t.org_id&&(i.org_id=t.org_id),t.project_id&&(i.project_id=t.project_id),t.folder_id&&(i.folder_id=t.folder_id)),process.stdout.write(JSON.stringify(i)+`
6
6
  `)}return n.aborted&&process.stderr.write(`warn: walk aborted (${n.abortReason}). Pass --root or --ignore to narrow.
7
- `),0}var _e=-1001,ye=-1002,we=-1003,_={action:null,path:null};function Xe(e,r){return _.action=e,_.path=r,e==="run"?_e:e==="export"?ye:we}function He({root:e,currentOrgId:r,onComplete:s}){let[n,o]=D.default.useState({kind:"list"});return D.default.useEffect(()=>{n.kind==="exiting"&&s(n.code)},[n,s]),n.kind==="list"?D.default.createElement(me,{root:e,currentOrgId:r,onSelect:t=>o({kind:"inspect",path:t.path,relPath:t.relPath}),onCancel:()=>o({kind:"exiting",code:0})}):n.kind==="inspect"?D.default.createElement(ge,{path:n.path,relPath:n.relPath,onAction:async t=>{o({kind:"exiting",code:Xe(t,n.path)})},onBack:()=>o({kind:"list"})}):null}async function Ye(e,r){let s=r??process.cwd(),{render:n}=await import("./build-JIKYOZUH.js"),o=await new Promise(t=>{let{unmount:i,waitUntilExit:c}=n(D.default.createElement(He,{root:s,currentOrgId:e,onComplete:f=>{i(),t(f)}}),{stdout:process.stderr,exitOnCtrlC:!0});c().then(()=>t(0)).catch(()=>t(0))});if(o===_e&&_.path){let{runTestMdFile:t}=await import("./run-test-md-DFNIGYB7.js"),i=await t(_.path,{});return _.action=null,_.path=null,i}if(o===ye&&_.path){let t=await qe(_.path,{},e);return _.action=null,_.path=null,t}if(o===we&&_.path){let t=await Ve(_.path,!0,e);return _.action=null,_.path=null,t}return o}async function Jt(e,r){let s=G(e);if(!P(s))return process.stderr.write(`error: file not found: ${s}
7
+ `),0}var _e=-1001,ye=-1002,we=-1003,_={action:null,path:null};function Xe(e,r){return _.action=e,_.path=r,e==="run"?_e:e==="export"?ye:we}function He({root:e,currentOrgId:r,onComplete:s}){let[n,o]=D.default.useState({kind:"list"});return D.default.useEffect(()=>{n.kind==="exiting"&&s(n.code)},[n,s]),n.kind==="list"?D.default.createElement(me,{root:e,currentOrgId:r,onSelect:t=>o({kind:"inspect",path:t.path,relPath:t.relPath}),onCancel:()=>o({kind:"exiting",code:0})}):n.kind==="inspect"?D.default.createElement(ge,{path:n.path,relPath:n.relPath,onAction:async t=>{o({kind:"exiting",code:Xe(t,n.path)})},onBack:()=>o({kind:"list"})}):null}async function Ye(e,r){let s=r??process.cwd(),{render:n}=await import("./build-JIKYOZUH.js"),o=await new Promise(t=>{let{unmount:i,waitUntilExit:c}=n(D.default.createElement(He,{root:s,currentOrgId:e,onComplete:f=>{i(),t(f)}}),{stdout:process.stderr,exitOnCtrlC:!0});c().then(()=>t(0)).catch(()=>t(0))});if(o===_e&&_.path){let{runTestMdFile:t}=await import("./run-test-md-KEHSRMCM.js"),i=await t(_.path,{});return _.action=null,_.path=null,i}if(o===ye&&_.path){let t=await qe(_.path,{},e);return _.action=null,_.path=null,t}if(o===we&&_.path){let t=await Ve(_.path,!0,e);return _.action=null,_.path=null,t}return o}async function Jt(e,r){let s=G(e);if(!P(s))return process.stderr.write(`error: file not found: ${s}
8
8
  `),2;let n=$(s),o=J(n,r);if(o!==null)return o;let t={path:s,name:C(s),has_meta:n!==null};return n&&(n.commit_id&&(t.commit_id=n.commit_id),n.test_id&&(t.test_id=n.test_id),n.testcase_id&&(t.testcase_id=n.testcase_id),n.project_id&&(t.project_id=n.project_id),n.folder_id&&(t.folder_id=n.folder_id),n.org_id&&(t.org_id=n.org_id),n.session_name&&(t.session_name=n.session_name)),process.stdout.write(JSON.stringify(t)+`
9
9
  `),0}async function Ve(e,r,s){let n=G(e);if(!P(n))return process.stderr.write(`error: file not found: ${n}
10
10
  `),2;let o=$(n),t=J(o,s);if(t!==null)return t;if(!r)return process.stderr.write(`error: refusing to delete without --yes.
@@ -0,0 +1,4 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{j as we,k as ie,l as oe,m as ye,n as ke,o as se}from"./chunk-7QJ75SYR.js";import{a as ne,c as te,d as ve,f as re}from"./chunk-AFBKGZFG.js";import{a as E,b as ge,d as he}from"./chunk-OS4VSIHT.js";import{a as Q,b as K,c as X,d as N,e as pe,g as C,h as ee}from"./chunk-W5TTF7GB.js";import{a as me}from"./chunk-JFAFKHDX.js";import{a as H}from"./chunk-CLGC7VEO.js";import{b as z,c as Z,d as J}from"./chunk-VMM4LC4V.js";import{e as ue,g as fe}from"./chunk-W4B5LOEX.js";import{A as S}from"./chunk-TH47OOBV.js";import{f as F}from"./chunk-DUAXZYAD.js";import{existsSync as De,statSync as xe}from"fs";import{basename as W,resolve as G}from"path";var _e=new Set(["interactive","agent","ci","override"]);function Se(e,n){if(e.mode!==void 0&&!_e.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 Re(e){let{makeHeadlessIO:n,agentRefusal:t}=await import("./headless-io-66RG5NN5.js");return t(n("ndjson","reconcile"),e,"MODE_USAGE")}function Oe(e,n,t,r){if(Z(t)){let v=J(t),a=v?.sourceIdFor(t)??null;if(v===null||a===null)return{error:`--from '${t}' is not a supported remote URL \u2014 supported: ${z.map(u=>u.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=S(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 $=q(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=G(n,t);if(!De(i)||!xe(i).isFile())return{error:`--from '${t}' is not a file \u2014 pass the changed source document`};let l=ue(i);if(!l.ok)return{error:`--from '${t}' is not an ingestable document \u2014 allowed: ${l.allowlist.join(", ")}`};let o=S(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=q(e,r,{filePath:i});if(w!==null)return{error:w};let d=null;try{d=fe(i)}catch{}return d!==null&&d!==r&&o.heads.get(d)!=null?{error:`'${W(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 O(e){return e==null?"(none)":e.slice(0,19)}function j(e,n,t,r=!1,i){if(e.out(`reconcile ${n.source_id}: head ${n.head.status} \u2014 ${O(n.head.before)} \u2192 ${O(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 l=n.changeset??[],o=(d,v)=>{let a=l.filter(c=>c.kind===d).length;return a>0?`${a} ${v}`:null},w=[o("ADD","add"),o("MODIFY","modify"),o("ARCHIVE","archive")].filter(Boolean);n.changed&&e.out(`changeset: ${l.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 l=n.changeset??[];e.out(`changeset: ${l.length} item(s)`);for(let o of l)if(o.kind==="MODIFY")e.out(` [MODIFY] ${H(o.ref)} \u2014 ${o.summary} (${O(o.old_cid)} \u2192 ${o.new_cid===null?"(staged)":O(o.new_cid)})`);else if(o.kind==="ADD")e.out(` [ADD] ${H(o.ref)}`);else{e.out(` [ARCHIVE] ${H(o.ref)} \u2014 ${o.why}`);let w=ae(o.impact,"retiring drops");w&&e.out(` ${w}`)}}e.out(`plan: ${n.rows.length} row(s)`);for(let l of n.rows){e.out(` [${l.kind}] ${H(l.ref)} \u2014 ${l.reason}`);let o=ae(l.impact,"approving marks");o&&e.out(` ${o}`),e.out(` provenance: ${l.provenance}`),e.out(` action: ${l.action}`)}}function ae(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 x(e){return e==="interactive"?"override":e}async function A(e,n,t,r,i,l,o=[],w="override",d,v,a,c,$){let u;try{u=ee(e)}catch(R){return E(r,R instanceof Error?R.message:String(R)),1}try{if(!t){let{runWalkSession:R}=await import("./walk-session-YUYRULPY.js");return await R({dir:e,rows:n,archive:o,held:d??null,childMode:w,runDesign:c??null,mark:l,markA:a,...v?{archiveState:v}:{},signals:m=>I(e,m.ref,m.verdict,m.reason),...$?{script:$}:{}})}return await Ie(e,n,t,r,i,l,o,w,d,v)}finally{u()}}var L=e=>`${e} high-risk item(s) need a human \u2014 ci mode won't guess. Walk interactively or use --mode agent.`;function M(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 ce(e={}){return{type:"reconcile_summary",applied:0,skipped:0,deferred:0,plan_only:0,failed:0,paused:0,stale_created:0,...e}}var V=ce();async function B(e,n,t,r,i,l,o,w,d){M(i,n,t);let v=n.changeset.filter($=>$.kind==="ARCHIVE"&&d?.[$.ref]===void 0),a=n.rows,c;try{c=ee(e)}catch($){return i({type:"error",message:$ instanceof Error?$.message:String($)}),i(ce()),2}try{return await Ce(e,n,t,r,i,l,o,a,v,w)}finally{c()}}async function Ce(e,n,t,r,i,l,o,w,d,v){let a=0,c=0,$=0,u=0,R=0,m=0,f=0,P=new Set,b=(g,p)=>{try{v?.(g,p)}catch{}};for(let[g,p]of w.entries()){i({type:"reconcile_row_start",kind:p.kind,ref:p.ref,...p.impact?{stale:p.impact.stale_refs.length,direct:p.impact.direct_refs?.length??0}:{}});let h=(s,_,D)=>i({type:"reconcile_row_end",kind:p.kind,ref:p.ref,outcome:s,..._!==void 0?{exit_code:_}:{},...D?{detail:D}:{}});if(p.applied){c++,h("skipped");continue}if(p.kind==="REMOVE"){R++,h("plan-only");continue}if(p.held_ref&&n.held){let s=new Set;if(p.kind==="MODIFY"&&p.impact){let D=S(e);for(let U of p.impact.stale_refs){let Y=D.resolve(U);Y&&D.stale(Y.tip)==="fresh"&&s.add(U)}}let _=ie(e,n.held,p.held_ref,le);if(!_.ok){$++,f===0&&(f=1),h("failed",1,_.message);continue}if(_.kind==="ADD"){let D=await r(_.ref,{yes:!0,mode:o});if(D!==0){D===3?(u++,f===0&&(f=3),h("paused",3)):($++,f===0&&(f=1),h("failed",D));continue}}a++,_.kind!=="ADD"&&p.impact&&(m+=s.size),b(g,"approved"),I(e,p.ref,_.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve"),h("applied");continue}let k=ne(S(e),p.ref);if(!k.ok){c++,h("skipped");continue}let y=k.target;if(P.has(y.ucTip)){c++,h("skipped");continue}if(p.kind==="ADD"){let s=await r(y.seamRef,{yes:!0,mode:o});if(s===3){u++,f===0&&(f=3),h("paused",3);continue}if(s!==0){$++,f===0&&(f=1),h("failed",s);continue}P.add(y.ucTip),a++,b(g,"approved"),I(e,p.ref,"gap-resolved-create"),h("applied")}else{let s=await te(e,y,{yes:!0,mode:o},l,r,"batch");s.outcome==="evolved"?(P.add(y.ucTip),a++,b(g,"approved"),I(e,p.ref,"gap-resolved-evolve"),h("applied")):s.outcome==="paused"?(u++,f===0&&(f=s.code),h("paused",s.code)):s.outcome==="failed"?($++,f===0&&(f=1),h("failed",s.code)):(c++,h("skipped"))}}return d.length>0&&(i({type:"reconcile_paused",plan_path:t,pending:d.map(g=>({ref:g.ref,why:g.why}))}),u+=d.length,f===0&&(f=3)),i(ce({applied:a,skipped:c,plan_only:R,failed:$,paused:u,stale_created:m})),f}var le={kind:"human",id:process.env.USER??"operator"};function I(e,n,t,r){me(e,{ts:new Date().toISOString(),command:"reconcile-walk",id:n,verdict:t,polarity:"preference",by:le,target:n,...r!==void 0?{reason:r}:{}})}async function Ie(e,n,t,r,i,l,o=[],w="override",d,v){let a=0,c=0,$=0,u=0,R=0,m=0,f=0,P=new Set;for(let[b,g]of n.entries()){if(g.applied){r.out(`skipped ${g.ref} \u2014 already applied (${g.applied.outcome} at ${g.applied.at})`),c++;continue}let p=s=>{try{l?.(b,s)}catch(_){E(r,`could not record applied state for ${g.ref}: ${_ instanceof Error?_.message:String(_)}`)}};if(g.kind==="REMOVE"){r.out(`REMOVE ${g.ref} \u2014 plan-only in this release (not executed)`),u++;continue}if(g.held_ref&&d){let s=ie(e,d,g.held_ref,le);if(!s.ok){E(r,`held ${g.ref}: ${s.message}`),R++,f===0&&(f=1);continue}if(r.out(`committed ${s.ref} (${g.kind==="ADD"?"minted":"updated \u2014 old\u2192new redirect"})`),s.kind==="ADD"){let _=await i(s.ref,{yes:t,mode:w});if(_===3){r.out(`design session for ${s.ref} paused \u2014 resume with the "kane-cli design tests --resume <session>" command printed above`),m++,f===0&&(f=3),p("approved");continue}if(_!==0){E(r,`design run for ${s.ref} ended with exit code ${_}`),R++,f===0&&(f=1),p("approved");continue}}a++,p("approved"),I(e,g.ref,g.kind==="ADD"?"gap-resolved-create":"gap-resolved-evolve");continue}let h=S(e),k=ne(h,g.ref);if(!k.ok){r.out(`skipped ${g.ref} \u2014 ${k.message}`),c++;continue}let y=k.target;if(P.has(y.ucTip)){r.out(`skipped ${g.ref} \u2014 use-case ${y.display} already handled in this walk`),c++;continue}if(g.kind==="ADD"){let s=await i(y.seamRef,{yes:t,mode:w});if(s===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`),m++,f===0&&(f=3);continue}if(s!==0){E(r,`design run for ${y.display} ended with exit code ${s}`),R++,f===0&&(f=1);continue}P.add(y.ucTip),a++,p("approved"),I(e,g.ref,"gap-resolved-create")}else{let s=await te(e,y,{yes:!0,mode:w},r,i,"batch");s.outcome==="evolved"?(P.add(y.ucTip),a++,p("approved"),I(e,g.ref,"gap-resolved-evolve")):s.outcome==="paused"?(m++,f===0&&(f=s.code)):s.outcome==="failed"?(R++,f===0&&(f=s.code)):c++}}for(let b of o)if(b.kind==="ARCHIVE"&&v?.[b.ref]===void 0){r.out(`[ARCHIVE] ${b.ref} \u2014 ${b.why}`);{let g=ae(b.impact,"retiring drops");g&&r.out(` ${g}`)}r.out(" plan-only \u2014 retire belongs to the interactive session (never headless)"),u++}return r.out(`reconcile walk: ${a} applied, ${c} skipped, ${$} deferred, ${u} plan-only`+(R>0?`, ${R} failed`:"")+(m>0?`, ${m} paused`:"")),f}var Ue=new Set(z.map(e=>e.name));function q(e,n,t){let r=S(e),i=r.heads.get(n);if(i==null)return null;let l=r.mediaOf(i);if("remoteUrl"in t){let o=J(t.remoteUrl)?.name??"remote";return l.format!==o?`source '${n}' is backed by ${l.format} content, not a ${o} source \u2014 reconcile it with the --from it was originally ingested from`:null}return Ue.has(l.format)?`source '${n}' is a remote ${l.format} source \u2014 pass its URL to --from, not a file`:null}function de(e,n,t,r){return"remoteUrl"in n?ke(e,n.remoteUrl,{out:t.out,err:t.err},r.remoteFindProvider):ye(e,n.filePath)}function Ee(e){return e.remote_url!==void 0?{remoteUrl:e.remote_url}:e.backing_path!==void 0?{filePath:e.backing_path}:null}async function Pe(e,n,t,r,i,l=!1,o=!1){let w=i.seams??{reingest:de(e,t,r,i),reextract:se(e,{stage:l,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,v={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??oe)(e,n,v)}catch(c){return E(r,`reconcile failed: ${c instanceof Error?c.message:String(c)}`),null}return a.changed&&j(r,a,d,o,i.emitEvent),a}async function Ae(e){let[{render:n},t,{ScrollbackProvider:r},{ChatSurface:i},{makeChatController:l},{makeReconcileDeps:o}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./react-QWOAB3TB.js"),import("./scrollback-JLPJR25X.js"),import("./ChatSurface-E7QKI4LA.js"),import("./chat-controller-T2FAI55V.js"),import("./reconcile-deps-HTT6IPHT.js")]),w=t.default??t,d=l(),v=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:v,autoReview:!0,onReviewExit:()=>{c.unmount(),a(0)},onCtrlC:()=>{c.unmount(),a(v.pending()?3:0)}})),{exitOnCtrlC:!1})})}async function Me(e,n,t,r,i){let l=K(e,n);if("error"in l)return E(r,l.error),2;let{plan:o,path:w}=l,d=t==="override"||t==="ci";if(n===void 0&&t==="interactive"&&r.isTTY&&!await r.confirm(`apply plan ${W(w)} for ${o.source_id} (created ${o.created})?`))return r.out(`not applying ${W(w)}`),0;let v=i.runDesignForUc??re,a=i.runDesignForUc??null,c=i.sessionScript,$=(g,p)=>C(w,g,p),u=(g,p)=>N(w,g,p),R=F(e);if(R===o.head_pin){if(t==="agent"){let p=i.emitEvent??(()=>{});return B(e,T(o),w,v,p,r,x(t),$,o.archive_state)}let g=X(o);return t==="ci"&&g.length>0?(E(r,L(g.length)),2):(r.out(`applying stored plan ${W(w)} for ${o.source_id} (${o.rows.length} row(s))`),A(e,o.rows,d,r,v,$,o.changeset??[],x(t),o.held,o.archive_state,u,a,c))}if(r.out(`graph moved since this plan (${O(o.head_pin)} \u2192 ${O(R)}) \u2014 recomputing`),o.held)return be(e,o,r,i,t,v,!1);let m=Ee(o);if(m===null)return E(r,`stored plan for ${o.source_id} names no backing file or URL \u2014 re-run reconcile --from`),2;let f=q(e,o.source_id,m);if(f!==null)return E(r,`stored plan cannot replay: ${f}`),2;let P=await Pe(e,o.source_id,m,r,i,!1,t==="interactive");if(!P)return 1;if(!P.changed)return j(r,P,null,!1,i.emitEvent),0;if(t==="agent"){let g=i.emitEvent??(()=>{});return B(e,P,null,v,g,r,x(t))}let b=P.changeset.filter(g=>g.kind==="ARCHIVE");return t==="ci"&&b.length>0?(E(r,L(b.length)),2):A(e,P.rows,d,r,v,void 0,P.changeset,x(t),P.held,void 0,void 0,a,c)}function T(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 Fe(e,n,t,r,i,l,o){let w=r.runDesignForUc??null,d=r.sessionScript,v=pe(e,n);if(v===null)return null;if("error"in v)return E(t,v.error),2;let{plan:a,path:c}=v,$=a.rows.filter(f=>f.applied===void 0),u=X(a),R=r.emitEvent??(()=>{});if($.length===0&&u.length===0){t.out(`already reconciled \u2014 plan ${a.created} applied ${a.rows.length} row(s)`);let f=ve(S(e)).staleCount;return f>0&&(t.out(`${f} item(s) still stale \u2014 kane-cli maintain evolve --from-stale`),R({type:"stale_debt",count:f})),i==="agent"&&(M(R,T(a),c),R({...V})),0}let m=F(e);return m!==a.head_pin?(t.out(`plan ${a.created} superseded \u2014 graph moved (${O(a.head_pin)} \u2192 ${O(m)}); recomputing`),be(e,a,t,r,i,l,o)):(t.out(`resuming plan ${a.created} \u2014 ${$.length} pending row(s)${u.length>0?`, ${u.length} undecided archive item(s)`:""}`),o?(j(t,T(a),null,!1,r.emitEvent),t.out(`plan stored: ${c}`),i==="agent"&&(M(R,T(a),c),R({...V})),0):i==="agent"?B(e,T(a),c,l,R,t,x(i),(f,P)=>C(c,f,P),a.archive_state):i==="ci"&&u.length>0?(E(t,L(u.length)),2):A(e,a.rows,i==="override"||i==="ci",t,l,(f,P)=>C(c,f,P),a.changeset??[],x(i),a.held,a.archive_state,(f,P)=>N(c,f,P),w,d))}async function be(e,n,t,r,i,l,o){let w=r.runDesignForUc??null,d=r.sessionScript,v;if(n.held){let h=S(e),k=new Set(n.rows.filter(s=>s.held_ref!==void 0&&s.applied!==void 0).map(s=>s.held_ref)),y=[];for(let s of n.held.rows){if(k.has(s.temp_ref))continue;if(!s.matched_cid){y.push(s);continue}let _=h.tipOf(s.matched_cid);if(h.superseded.get(_)===null){t.out(`dropped held "${s.title}" \u2014 its use-case was retired meanwhile`),r.emitEvent?.({type:"held_dropped",ref:s.temp_ref,title:s.title,reason:"target_retired"});continue}y.push(_===s.matched_cid?s:{...s,matched_cid:_,uc:{...s.uc,matches_existing:{cid:_}}})}v={source_id:n.held.source_id,rows:y}}let a=Ee(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=q(e,n.source_id,a);if(c!==null)return E(t,`stored plan cannot replay: ${c}`),2;let $=r.seams??{reingest:de(e,a,t,r),reextract:se(e,{stage:v!==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
+ `)}})},u;try{u=await(r.buildPlan??oe)(e,n.source_id,$,{resumeHeld:v})}catch(h){return E(t,`reconcile failed: ${h instanceof Error?h.message:String(h)}`),1}j(t,u,null,i==="interactive"&&!o,r.emitEvent);let R=F(e),m=null;if(R!=null){let h={},k=new Set(u.changeset.filter(y=>y.kind==="ARCHIVE").map(y=>y.ref));for(let[y,s]of Object.entries(n.archive_state??{}))k.has(y)&&(h[y]=s);m=Q(e,{version:2,source_id:u.source_id,...n.remote_url!==void 0?{remote_url:n.remote_url}:{backing_path:n.backing_path},head_pin:R,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:u.skipped_arms,note:u.note,changeset:u.changeset,rows:u.rows,...u.held?{held:u.held}:{},...Object.keys(h).length>0?{archive_state:h}:{}}),t.out(`plan stored: ${m}`)}if(o){if(i==="agent"){let h=r.emitEvent??(()=>{});M(h,u,m),h({...V})}return 0}let f=r.emitEvent??(()=>{}),P=m?K(e,m).plan.archive_state:void 0,b=m?(h,k)=>C(m,h,k):void 0,g=m?(h,k)=>N(m,h,k):void 0;if(i==="agent")return B(e,u,m,l,f,t,x(i),b,P);let p=u.changeset.filter(h=>h.kind==="ARCHIVE"&&P?.[h.ref]===void 0);return i==="ci"&&p.length>0?(E(t,L(p.length)),2):A(e,u.rows,i==="override"||i==="ci",t,l,b,u.changeset,x(i),u.held,P,g,w,d)}async function $e(e,n,t={},r=process.cwd()){let{telemetryBootstrap:i,telemetryEnvName:l}=await import("./bootstrap-NFYYRGGR.js"),o=i({verb:"reconcile",mode:typeof e.mode=="string"?e.mode:"interactive",contextRoot:G(r,".context"),env:l(),applyPlanPath:typeof e.apply=="string"?G(r,e.apply):void 0,write:!0,longSession:!0});e.mode==="agent"&&t.emitEvent?.({type:"run_start",session:o.ids.session_id});let w=await He(e,n,t,r);return w===1&&e.mode!=="agent"&&(n.err??n.out)(o.supportFooter()),await o.end({exit_code:w}),w}async function He(e,n,t={},r=process.cwd()){let i=e.apply!==void 0&&e.apply!==!1,l=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&&Z(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&&l!==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&&!_e.has(e.mode))return Re(`--mode must be interactive | agent | ci | override, got '${e.mode}'`);let v=e.mode==="agent"||e.mode==="ci"||e.mode==="override";if(i&&!v&&!n.isTTY)return 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=Se(e,n.isTTY);if(typeof k=="object")return k.code==="MODE_USAGE"?Re(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-HTT6IPHT.js"),y=l===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??Ae)(d)}let s=e.mode??"interactive";return Me(d,l===void 0?void 0:G(r,l),s,n,t)}let u=Oe(d,r,e.from,e.sourceId);if("error"in u)return E(n,u.error),2;if(!i){let{sessionsHoldingSource:k}=await import("./sessions-GIEXOCE4.js"),{holders:y,corrupt:s}=k(d,u.sourceId);if(s>0)return E(n,`cannot verify review holds \u2014 ${s} 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 ${u.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??de(d,u,n,t),y;try{y=await k(u.sourceId)}catch(_){return E(n,_ instanceof Error?_.message:String(_)),1}let s=y.status==="unchanged"?null:we(d,u.sourceId);if(y.status!=="unchanged"&&!s)return n.out(`${u.sourceId} landed for the first time \u2014 extract it: kane-cli context extract --source ${u.sourceId}`),0;if(s){let D=await(t.chatMount??(async U=>{let{bindExtractInteractive:Y}=await import("./extract-bind-5OWELRME.js");return Y(U)}))({mode:"interactive",posture:"reconcile",source:u.sourceId,changeContext:s});if(D===3){let{sessionsHoldingSource:U}=await import("./sessions-GIEXOCE4.js");if(U(d,u.sourceId).holders.length===0)return 0}return D}}let R="remoteUrl"in u?{remoteUrl:u.remoteUrl}:{filePath:u.filePath},m=await Pe(d,u.sourceId,R,n,t,!!e.plan||c==="interactive",c==="interactive"&&!e.plan);if(!m)return 1;let f=t.runDesignForUc??re,P=t.runDesignForUc??null,b=t.sessionScript;if(!m.changed){let k=await Fe(d,u.sourceId,n,t,c,f,!!e.plan);if(k!==null)return k;if(j(n,m,null,!1,t.emitEvent),c==="agent"){let y=t.emitEvent??(()=>{});M(y,m,null),y({...V})}return 0}let g=F(d),p=null;if(g!=null?p=Q(d,{version:2,source_id:m.source_id,..."remoteUrl"in R?{remote_url:R.remoteUrl}:{backing_path:R.filePath},head_pin:g,created:new Date().toISOString().replace(/[:.]/g,"-"),skipped_arms:m.skipped_arms,note:m.note,changeset:m.changeset,rows:m.rows,...m.held?{held:m.held}:{}}):E(n,"no chain head after extract \u2014 plan not stored"),c==="agent"){let k=t.emitEvent??(()=>{});if(!a)return M(k,m,p),k({...V}),0;let y=p?(s,_)=>C(p,s,_):void 0;return B(d,m,p,f,k,n,x(c),y)}if(!a)return p&&n.out(`plan stored: ${p}`),0;let h=m.changeset.filter(k=>k.kind==="ARCHIVE");if(c==="ci"&&h.length>0)return p&&n.out(`plan stored: ${p}`),E(n,L(h.length)),2;if(p){n.out(`plan stored: ${p}`);let k=p;return A(d,Te(d,k)??m.rows,$,n,f,(y,s)=>C(k,y,s),m.changeset,x(c),m.held,void 0,void 0,P,b)}return A(d,m.rows,$,n,f,void 0,m.changeset,x(c),m.held,void 0,void 0,P,b)}function Te(e,n){let t=K(e,n);return"error"in t?null:t.plan.rows}async function Xe(e,n={},t,r=process.cwd()){if(e.mode==="agent"){let{makeHeadlessIO:i}=await import("./headless-io-66RG5NN5.js"),l=t?i("ndjson","reconcile",t):i("ndjson","reconcile"),o={out:l.out,err:v=>l.event({type:"error",message:v}),isTTY:!1,confirm:async()=>!1,ask:async()=>""},{runWithChannel:w}=await import("./run-channel-RGH4WIQX.js"),d=2;try{d=await w({event:v=>l.event(v)},()=>$e(e,o,{...n,emitEvent:v=>l.event(v)},r))}catch(v){d=1,l.event({type:"error",message:v instanceof Error?v.message:String(v)})}return l.done(d)}return $e(e,he(),n,r)}export{Se as a,Oe as b,x as c,I as d,$e as e,Xe as f};
@@ -1,4 +1,4 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{c as b,d as _}from"./chunk-NVGBE2DR.js";import{a as g,c as h}from"./chunk-L4JIMNKW.js";import{i as S}from"./chunk-M7WQM4UA.js";import{d as f,f as v}from"./chunk-5YPBPZUR.js";var V=n=>`conv#turn=${n}`;function E(n,o){for(let t of n.split(`
2
+ import{c as b,d as _}from"./chunk-NVGBE2DR.js";import{a as g,c as h}from"./chunk-CUM23TLF.js";import{i as S}from"./chunk-DUAXZYAD.js";import{d as f,f as v}from"./chunk-WXHQYYD5.js";var V=n=>`conv#turn=${n}`;function E(n,o){for(let t of n.split(`
3
3
  `))if(t.trim())try{let r=JSON.parse(t);if(r.turn===o)return r.text}catch{}return null}var y={format:"conversation",media_type:"text/x-conversation",anchors_supported:["#turn="]};function $(n){let{contextDir:o,graph:t,sessionStamp:r}=n,e=`su-conv-${r}`,u=t.heads.get(e);if(typeof u=="string")return{record:null,errors:[{code:"CONV_SOURCE_EXISTS",detail:`${e} already exists \u2014 resume it`}],sourceId:e,cid:u};let i=b(o,Buffer.from("","utf8")),c=h(e,i),a=v("source",c);if(a.length>0)return{record:null,errors:a.map(s=>({code:s.code,detail:s.detail})),sourceId:e,cid:""};let d=g("source",c);return{record:S(o,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:d,label:f.SOURCE,content:c}],edges:[],review:[],supersessions:[],source_head_moves:{[e]:d},media:{[e]:y},conv:{source_id:e,turn:0,append_of:null}},{expectPrev:t.latestHash}).record,errors:null,sourceId:e,cid:d}}function G(n){let{contextDir:o,graph:t,sourceId:r,text:e,force:u}=n,i=t.heads.get(r),c=t.convChains.get(r);if(typeof i!="string"||!c)return{record:null,errors:[{code:"CONV_SOURCE_MISSING",detail:`${r} is not a live conversation source`}]};let d=t.getNode(i)?.content?.blob;if(typeof d!="string")return{record:null,errors:[{code:"CONV_SOURCE_MISSING",detail:`${r} head node unreadable`}]};let l=_(o,d)?.toString("utf8")??"",s=c.turns;if(!u&&s>0&&E(l,s)===e)return{record:null,errors:null,turn:s,cid:i,idempotent:!0};let p=s+1,C=`${l}${JSON.stringify({turn:p,text:e})}
4
4
  `,O=b(o,Buffer.from(C,"utf8")),x=h(r,O),m=g("source",x);return{record:S(o,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:m,label:f.SOURCE,content:x}],edges:[],review:[],supersessions:[],source_head_moves:{[r]:m},media:{[r]:y},conv:{source_id:r,turn:p,append_of:i}},{expectPrev:t.latestHash}).record,errors:null,turn:p,cid:m,idempotent:!1}}export{V as a,E as b,$ as c,G as d};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as Ke}from"./chunk-DXV6MBTD.js";import{a as Fe}from"./chunk-KT6G7AF2.js";import{a as Ne}from"./chunk-FPFOW6BS.js";import{a as Oe}from"./chunk-YCCUBQY4.js";import{a as $e}from"./chunk-JRMDGLLT.js";import{a as Ue}from"./chunk-VE3SUJMA.js";import{a as me}from"./chunk-4OPQJ7PE.js";import{c as _e,y as u}from"./chunk-C4G7RVJ6.js";import{a as te}from"./chunk-HCBYKLMW.js";import{a as p,b as f,h as De,i as be,k as ke}from"./chunk-C44QQJR4.js";import{a as xe}from"./chunk-6YGTRKDT.js";import{e as $}from"./chunk-UR6MHSHU.js";var We=$(xe(),1);import{readFileSync as tt,writeFileSync as nt,mkdirSync as rt}from"fs";import{dirname as ot,join as He}from"path";var it=He(_e,"command-history.json"),At=He(_e,"generate-history.json"),st=200,Ie=class{entries;filePath;max;constructor(t=it,e=st){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(),i=[];for(let s=this.entries.length-1;s>=0;s--)this.entries[s].toLowerCase().includes(e)&&i.push(this.entries[s]);return i}_load(){if(this.filePath===null)return[];try{let t=tt(this.filePath,"utf-8"),e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}_save(){if(this.filePath!==null)try{rt(ot(this.filePath),{recursive:!0}),nt(this.filePath,JSON.stringify(this.entries)+`
2
+ import{a as Ke}from"./chunk-AECMF3T2.js";import{a as Ne}from"./chunk-OR6MCL6Z.js";import{a as Fe}from"./chunk-4NFCAGRK.js";import{a as Oe}from"./chunk-YCCUBQY4.js";import{a as $e}from"./chunk-O75ZHGJG.js";import{a as Ue}from"./chunk-VE3SUJMA.js";import{a as me}from"./chunk-VRLUNZAK.js";import{c as _e,y as u}from"./chunk-ZUGCHQFC.js";import{a as te}from"./chunk-HCBYKLMW.js";import{a as p,b as f,h as De,i as be,k as ke}from"./chunk-C44QQJR4.js";import{a as xe}from"./chunk-6YGTRKDT.js";import{e as $}from"./chunk-UR6MHSHU.js";var We=$(xe(),1);import{readFileSync as tt,writeFileSync as nt,mkdirSync as rt}from"fs";import{dirname as ot,join as He}from"path";var it=He(_e,"command-history.json"),At=He(_e,"generate-history.json"),st=200,Ie=class{entries;filePath;max;constructor(t=it,e=st){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(),i=[];for(let s=this.entries.length-1;s>=0;s--)this.entries[s].toLowerCase().includes(e)&&i.push(this.entries[s]);return i}_load(){if(this.filePath===null)return[];try{let t=tt(this.filePath,"utf-8"),e=JSON.parse(t);return Array.isArray(e)?e:[]}catch{return[]}}_save(){if(this.filePath!==null)try{rt(ot(this.filePath),{recursive:!0}),nt(this.filePath,JSON.stringify(this.entries)+`
3
3
  `)}catch{}}};function Ct(r){let t=(0,We.useRef)(null);return t.current||(t.current=new Ie(r)),t.current}var D=$(xe(),1);var Pe=$(xe(),1);var Q=$(te(),1);function Ge({history:r,onSelect:t,onClose:e}){let[i,s]=(0,Pe.useState)(""),[l,h]=(0,Pe.useState)(0),w=i?r.search(i).slice(0,8):[];return be((T,m)=>{if(m.escape){e();return}if(m.return){w.length>0&&w[l]?t(w[l]):e();return}if(m.upArrow){h(S=>Math.max(0,S-1));return}if(m.downArrow){h(S=>Math.min(w.length-1,S+1));return}if(m.backspace||m.delete){s(S=>S.slice(0,-1)),h(0);return}T&&!m.ctrl&&!m.meta&&(s(S=>S+T),h(0))}),(0,Q.jsxs)(p,{flexDirection:"column",marginLeft:2,borderStyle:"single",paddingX:1,children:[(0,Q.jsx)(f,{color:u.muted,bold:!0,children:"reverse search"}),(0,Q.jsxs)(p,{gap:1,children:[(0,Q.jsx)(f,{color:u.dim,children:"search:"}),(0,Q.jsx)(f,{children:i}),(0,Q.jsx)(f,{color:u.orange,children:"\u2588"})]}),w.length>0&&(0,Q.jsx)(f,{children:" "}),w.map((T,m)=>(0,Q.jsx)(p,{marginLeft:2,children:(0,Q.jsxs)(f,{color:m===l?u.orange:u.dim,bold:m===l,children:[m===l?"\u25B8 ":" ",T]})},`${m}-${T}`))]})}var ue=$(te(),1);function Ve({commands:r,selectedIndex:t}){return r.length===0?null:(0,ue.jsx)(p,{flexDirection:"column",marginBottom:0,children:r.map((e,i)=>{let s=i===t;return(0,ue.jsxs)(p,{children:[(0,ue.jsx)(f,{color:s?u.orange:u.dim,children:s?"\u276F ":" "}),(0,ue.jsxs)(f,{color:s?u.orange:void 0,bold:s,children:["/",e.name]}),e.args&&(0,ue.jsxs)(f,{color:u.dim,children:[" ",e.args]}),(0,ue.jsxs)(f,{color:u.dim,children:[" ",e.description]})]},e.name)})})}var qe=$(xe(),1);var G=$(te(),1),je={scenario:"Scenarios",case:"Test Cases",file:"Files"};function Ye(r){let t={scenario:0,case:0,file:0};for(let e of r)t[e.kind]++;return["scenario","case","file"].filter(e=>t[e]>0).map(e=>`${t[e]} ${je[e]}`).join(" \xB7 ")}var Ee=7;function ze({items:r,selectedIndex:t,accent:e=u.orange}){let i=r.length;if(i===0)return null;let s=Math.floor(Ee/2),l=i<=Ee?0:Math.max(0,Math.min(t-s,i-Ee)),h=Math.min(i,l+Ee),w=l,T=i-h;return(0,G.jsxs)(p,{flexDirection:"column",marginBottom:0,children:[w>0&&(0,G.jsx)(p,{children:(0,G.jsx)(f,{color:u.dim,children:` \u22EF ${w} above \u2014 ${Ye(r.slice(0,l))}`})}),r.slice(l,h).map((m,S)=>{let U=l+S,k=U===t,C=S===0||r[U-1].kind!==m.kind;return(0,G.jsxs)(qe.default.Fragment,{children:[C&&(0,G.jsx)(p,{children:(0,G.jsx)(f,{color:u.dim,children:je[m.kind]})}),(0,G.jsxs)(p,{children:[(0,G.jsx)(f,{color:k?e:u.dim,children:k?"\u276F ":" "}),(0,G.jsx)(f,{color:k?e:void 0,bold:k,children:m.label})]})]},`${m.kind}:${m.value}:${U}`)}),T>0&&(0,G.jsx)(p,{children:(0,G.jsx)(f,{color:u.dim,children:` \u22EF ${T} more \u2014 ${Ye(r.slice(h))}`})})]})}var ye=$(xe(),1);var lt=27,at=127,ct=11;function ut(r){return r>=64&&r<=126}function ft(r,t){r===ct&&t({killToEnd:!0,ctrl:!0,raw:String.fromCharCode(r)})}function dt(r,t){r===at&&t({backspace:!0,meta:!0,raw:"\x1B\x7F"})}function mt(r,t){let e=r.map(s=>String.fromCharCode(s)).join(""),i=/^\[1;([0-9]+)([A-D])$/.exec(e);if(i){let s=parseInt(i[1],10),l=i[2],h={raw:"\x1B"+e};if(s===2)h.shift=!0;else if(s===3)h.meta=!0;else if(s===5)h.ctrl=!0;else return;l==="A"?h.arrowUp=!0:l==="B"?h.arrowDown=!0:l==="C"?h.arrowRight=!0:l==="D"&&(h.arrowLeft=!0),t(h);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 ht(r,t){r===72?t({home:!0,raw:"\x1BO"+String.fromCharCode(r)}):r===70&&t({end:!0,raw:"\x1BO"+String.fromCharCode(r)})}function gt(){let r="IDLE",t=[];function e(){r="IDLE",t=[]}return{feed(i,s){for(let l of i)r==="IDLE"?l===lt?(r="ESC",t=[]):ft(l,s):r==="ESC"?l===91?(r="CSI",t=[]):l===79?(r="SS3",t=[]):(dt(l,s),e()):r==="CSI"?(t.push(l),ut(l)&&(mt([91,...t],s),e())):r==="SS3"&&(ht(l,s),e())},flushIdle(i){r==="ESC"&&t.length===0&&i({raw:"\x1B"}),e()}}}function Xe(r,t={}){let e=(0,ye.useRef)(r);e.current=r;let{stdin:i}=De();(0,ye.useEffect)(()=>{if(t.isActive===!1||!i)return;let s=gt(),l=null,h=w=>{l&&(clearTimeout(l),l=null);let T=Buffer.isBuffer(w)?w:Buffer.from(w,"binary");s.feed(T,m=>e.current(m)),l=setTimeout(()=>{s.flushIdle(m=>e.current(m)),l=null},50)};return i.on("data",h),()=>{i.removeListener("data",h),l&&clearTimeout(l)}},[t.isActive,i])}var y=$(te(),1);function pt(r,t){let e=t-1;for(;e>=0&&r[e]!=="@"&&r[e]!==" "&&r[e]!==`
4
4
  `;)e--;return e<0||r[e]!=="@"||e>0&&r[e-1]!==" "&&r[e-1]!==`
5
5
  `?null:{at:e,query:r.slice(e+1,t).join("")}}var Me=10;function xt(r){return r.replace(/\x1b?\[200~/g,"").replace(/\x1b?\[201~/g,"").replace(/\r\n/g,`
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as c}from"./chunk-M7WQM4UA.js";import{d as l}from"./chunk-5YPBPZUR.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{d as c}from"./chunk-DUAXZYAD.js";import{d as l}from"./chunk-WXHQYYD5.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,3 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{d as X}from"./chunk-BB2W35TW.js";import{a as $}from"./chunk-YKTYVJBN.js";import{A as T,l as z,m as Y,n as H}from"./chunk-TH47OOBV.js";import{b as q,g as N}from"./chunk-DUAXZYAD.js";import{a as W,d as S,f as L}from"./chunk-DBIBROYW.js";import{c as C}from"./chunk-UD7KKHPW.js";import{a as K,c as J}from"./chunk-ZUGCHQFC.js";var ce=3,de=1e4,Q=()=>new Promise(r=>setTimeout(r,25+Math.floor(Math.random()*50))),Z=r=>r==="design"||r==="maintain"?"session":r==="revert"||r==="shape-op"?"exclusive":"commit";function le(r,e,o){for(let s of r){for(let t of s.supersessions)if(t.kind==="node"&&(o.has(t.old)||t.new!==null&&o.has(t.new)))return!0;for(let t of s.nodes)if(t.label==="usecase"&&e.newBuCandidates.length>0||o.has(t.cid))return!0;if(s.design_generation&&e.generationTicket&&s.design_generation.uc_root===e.generationTicket.uc_root)return!0;for(let t of e.sourcePins)if(Object.prototype.hasOwnProperty.call(s.source_head_moves,t.source_id))return!0}return!1}async function De(r,e,o){let{contextDir:s,locks:t,probe:a}=r,m=r.sid??r.rootSid,f=e.newBuCandidates.map(b=>({tempRef:b.tempRef,probeText:b.probeText})),k=0,g=!0,p={hits:[],degraded:!1,probeBasis:null};for(;;){g&&(f.length>0&&(p=await a.batchSimilar(T(s),f)),g=!1);let b=T(s),_={seq:b.lastSeq,hash:b.latestHash},P=new Map,w=[],v=[],R=new Set;for(let d of e.ucTargets){let c=H(b,d.ref);if(c===null)return{ok:!1,kind:"validation",errors:[{code:"UNKNOWN_REF",detail:`${d.ref}: names no living node (unknown or tombstoned chain)`}]};d.expectedTip!==void 0&&d.expectedTip!==c.cid&&P.set(d.expectedTip,c.cid),R.add(c.cid),v.push(L(b,d.ref).key)}(e.verb==="revert"||e.verb==="shape-op")&&(v.length=0,v.push({kind:"context",mode:"exclusive"}));let y;try{y=t.acquire(S(v),{hold:Z(e.verb),verb:e.verb})}catch(d){if(d instanceof W&&(d.code==="UC_HELD"||d.code==="CONTEXT_HELD"))return{ok:!1,kind:"contended",err:d};throw d}let V=!1,M=!1;try{let d=await t.withKeySerialized(v,async()=>{let c=T(s),O=_.hash===c.latestHash?[]:N(s,_.seq,_.hash).records;for(let n of e.ucTargets){let i=H(c,n.ref);if(i===null){w.push({kind:"supersession",ref:n.ref,detail:`${n.ref} was retired while this commit staged \u2014 re-ground or abandon`});continue}for(let l of R)c.superseded.has(l)&&c.tipOf(l)===i.cid&&P.set(l,i.cid)}for(let n of e.sourcePins){let i=c.heads.get(n.source_id);i!=null&&i!==n.source_cid&&w.push({kind:"pin",ref:n.source_id,detail:`source '${n.source_id}' moved (pinned ${n.source_cid.slice(0,19)}, head ${i.slice(0,19)}) \u2014 re-ground or abandon`})}if(w.length>0)return{ok:!1,kind:"drifted",asks:w};if(e.generationTicket){let n=X(c,e.generationTicket);if(n!==null)return{ok:!1,kind:"validation",errors:[n]}}if(f.length>0&&O.length>0){let n=new Set(p.hits.map(u=>u.candidateCid)),i=a.recheckLocal(c,f,p.probeBasis,O);if(i.hits.some(u=>!n.has(u.candidateCid))||i.uncachedNewNodes.length>0)return M=!0,"restart"}if(e.verb!=="revert"&&e.verb!=="shape-op"){let n=S(e.ucTargets.map(u=>L(c,u.ref).key)),i=S(v);if(!(n.length===i.length&&n.every((u,h)=>JSON.stringify(u)===JSON.stringify(i[h]))))return"restart"}if(e.eventIds&&e.eventIds.length>0&&e.eventIds.every(n=>c.appliedEvents.has(n)))return{ok:!0,skipped:"already-applied"};let ae=Date.now()+de,j=c.latestHash,E=c;for(;;){let n={graph:E,expectPrev:j,redirects:P,probeHits:p.hits,degradedProbe:p.degraded,sid:m,eventIds:(l,u)=>{if(e.eventIds&&e.eventIds.length>0)return e.eventIds.slice(0,u);let h=Y(E,r.rootSid,l,u),U=r.reservedEventIds??[];if(U.length===0)return h;let D=`${r.rootSid}:${l}:`,A=0;for(let F of U){if(!F.startsWith(D))continue;let x=F.slice(D.length);/^\d+$/.test(x)&&(A=Math.max(A,Number.parseInt(x,10)))}if(A===0)return h;let G=Number.parseInt(h[0].slice(D.length),10);return!Number.isInteger(G)||G>A?h:Array.from({length:u},(F,x)=>z(r.rootSid,l,A+1+x))},assertLocks:()=>y.assertHeld()};if(r.revalidate){let l=r.revalidate(n);if(l.length>0)return{ok:!1,kind:"validation",errors:l}}y.assertHeld();let i;try{i=o(n)}catch(l){if(l instanceof q){let u=T(s),h=N(s,E.lastSeq,E.latestHash).records;if(!le(h,e,R)&&Date.now()<ae){await Q(),E=u,j=u.latestHash;continue}return"restart"}throw l}return"errors"in i?{ok:!1,kind:"validation",errors:i.errors}:(Z(e.verb)==="session"&&y.touch(),{ok:!0,result:i.result,record:i.record})}});if(d==="restart")V=!0;else return d}finally{y.release()}if(V){if(k+=1,k>=ce)return{ok:!1,kind:"unsettled",attempts:k};M&&(g=!0),await Q();continue}}}import{readFileSync as ue,writeFileSync as fe,renameSync as me,mkdirSync as pe}from"fs";import{dirname as he,join as ge}from"path";var B=1,be=720*60*1e3;function I(r){return ge(J,"embeddings",`alias-${r}.json`)}function ee(r,e=Date.now()){return r!==null&&e-r.fetchedAt<be}function re(r){try{let e=JSON.parse(ue(r,"utf-8"));return e.wrapperVersion!==B||typeof e.purposes!="object"||e.purposes===null?null:{wrapperVersion:B,writtenByVersion:String(e.writtenByVersion??""),purposes:e.purposes}}catch{return null}}function te(r,e,o=I(r)){let t=re(o)?.purposes?.[e];return!t||typeof t.alias!="string"||typeof t.dims!="number"||typeof t.fetchedAt!="number"?null:{alias:t.alias,dims:t.dims,fetchedAt:t.fetchedAt}}function se(r,e,o,s=I(r)){try{pe(he(s),{recursive:!0});let a=re(s)?.purposes??{};a[e]={alias:o.alias,dims:o.dims,fetchedAt:Date.now()};let m={wrapperVersion:B,writtenByVersion:K,purposes:a},f=`${s}.tmp`;fe(f,JSON.stringify(m,null,2)+`
3
+ `),me(f,s)}catch(t){C(`[embed] Failed to save alias cache: ${t instanceof Error?t.message:String(t)}`,"EMBED_CACHE_WRITE_FAILED")}}function ve(r){return r.TESTMUAI_ENV==="stage"?"stage":"prod"}function oe(r){let e=r.env??process.env,o=r.auth?.TESTMUAI_BASIC_AUTH||e.TESTMUAI_BASIC_AUTH;if(o)return{authorization:`Basic ${o}`};let s=r.auth?.TESTMUAI_API_KEY||e.TESTMUAI_API_KEY;return s?{authorization:`Bearer ${s}`}:{}}async function Oe(r,e={}){let o=e.env??process.env,s=ve(o),t=e.aliasCacheFile??I(s),a=e.now??Date.now,m=te(s,r,t);if(ee(m,a()))return{alias:m.alias,dims:m.dims};let k=`${$(o)}/assurance/embed/alias?purpose=${encodeURIComponent(r)}`,g=await(e.fetchImpl??fetch)(k,{method:"GET",headers:oe(e)});if(!g.ok)throw new Error(`embed alias resolve failed: ${g.status}`);let p=await g.json();return se(s,r,{alias:p.alias,dims:p.dims},t),{alias:p.alias,dims:p.dims}}async function je(r,e,o={}){let s=o.env??process.env,t=$(s),a=await(o.fetchImpl??fetch)(`${t}/assurance/embed`,{method:"POST",headers:{...oe(o),"content-type":"application/json"},body:JSON.stringify({purpose:r,input:e})});if(!a.ok)throw new Error(`embed failed: ${a.status}`);return await a.json()}import{readFileSync as ke,writeFileSync as ye,renameSync as Ee,mkdirSync as Ae}from"fs";import{dirname as Te,join as ne}from"path";function we(r){return ne(r,"embeddings")}function xe(r){let e=r.indexOf(":");return e>=0?r.slice(e+1):r}function ie(r,e,o){let s=xe(o);return ne(we(r),e,s.slice(0,2),`${s.slice(2)}.f32`)}function We(r,e,o){try{let s=ke(ie(r,e,o)),t=new Float32Array(Math.floor(s.length/4));for(let a=0;a<t.length;a++)t[a]=s.readFloatLE(a*4);return t}catch{return null}}function qe(r,e,o,s){try{let t=ie(r,e,o);Ae(Te(t),{recursive:!0});let a=Buffer.alloc(s.length*4);for(let f=0;f<s.length;f++)a.writeFloatLE(s[f],f*4);let m=`${t}.tmp`;ye(m,a),Ee(m,t)}catch(t){C(`[embed] Failed to cache vector: ${t instanceof Error?t.message:String(t)}`,"EMBED_CACHE_WRITE_FAILED")}}export{De as a,Oe as b,je as c,We as d,qe as e};
@@ -0,0 +1,8 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{b as K}from"./chunk-AFBKGZFG.js";import{a as B,b as U,c as Y}from"./chunk-AFPHLUQ5.js";import{a as j}from"./chunk-DNNZ353O.js";import{d as F}from"./chunk-XWKUZJCP.js";import{A as k,a as L,b as V,k as G,o as N}from"./chunk-TH47OOBV.js";import{d as I}from"./chunk-DUAXZYAD.js";import{d as v,e as x,g as H}from"./chunk-WXHQYYD5.js";function ee(t,e,n,i,s){let f=n.rows.filter(u=>{let d=i.get(u.temp_ref);return d!==void 0&&d!=="reject"});if(f.length===0)return{record:null,errors:null};let o={version:1,read_basis:e.latestHash,source:{source_id:n.source_id,source_cid:e.heads.get(n.source_id)??""},use_cases:f.map(u=>u.uc)},p=new Map;for(let u of f){let d=i.get(u.temp_ref);typeof d=="object"?p.set(u.temp_ref,{resolution:"edited",edit:d.edited}):p.set(u.temp_ref,{resolution:u.uc.matches_existing&&u.uc.changed?"edited":"approved"})}let g=Y(o,e,n.staged_source_cid);if(g.errors!==null)return{record:null,errors:g.errors};let r=g.proposal,l=o.source.source_cid?D(t,e,o.source.source_cid):null;if(l!==null){r=U(r,l);let u=G(r,B(l),e);if(u.length>0)return{record:null,errors:[{code:"HELD_CITES_STALE",detail:"the source moved after this plan staged \u2014 its quotes no longer verify against the current head; re-run kane-cli maintain reconcile to re-stage"},...u]}}let m=`held-${(e.latestHash??"root").slice(-12)}-${f.length}`;return N({contextDir:t,graph:e,proposal:r,proposalId:m,verdicts:p,by:s,autoName:!0})}function W(t,e,n=[]){let i=K(t,e),s=new Set,f=[],o=l=>{!l||s.has(l)||(s.add(l),f.push(y(t,l)))};for(let l of i.pairs)o(l.scenario),o(l.test);for(let[l,m]of i.verifies){o(l);for(let u of m)o(u)}if(n.length===0)return{stale_refs:f};let p=l=>`${String(l.props.source_id)}\0${String(l.props.anchor)}`,g=new Set;for(let{cid:l}of t.byLabel(v.USECASE))if(t.tipOf(l)===e)for(let m of t.edgesInto(l)){if(m.type!==x.DERIVES)continue;let u=m.props.claim;typeof u=="string"&&n.includes(u)&&g.add(p(m))}if(g.size===0)return{stale_refs:f};let r=new Set;for(let[l,m]of i.verifies)if(t.edgesInto(l).some(d=>d.type===x.DERIVES&&g.has(p(d)))){r.add(y(t,l));for(let d of m)r.add(y(t,d))}return{stale_refs:f,...r.size>0?{direct_refs:[...r]}:{}}}var q="this release plans changes only \u2014 blast-radius impact and drift meaning-checks are not measured, and REMOVE rows are never executed automatically",te="suite untouched; graph updated";function M(t,e){return!t.superseded.has(e)&&t.trust.get(e)!=="archived"}function y(t,e,n=new Set){let i=t.nameOf.get(e);if(i!==void 0)return i;if(n.has(e))return e;n.add(e);for(let[s,f]of t.superseded){if(f!==e)continue;let o=y(t,s,n);if(o!==s)return o}return e}function C(t){return String(t).slice(0,19)}function A(t,e,n){let i=t.edgesFrom(e).find(s=>s.type===n);return i?t.tipOf(i.dst):null}function X(t,e){let n=t.nodeLabel.get(e);if(n===v.USECASE)return e;if(n===v.SCENARIO)return A(t,e,x.BELONGS_TO);if(n===v.AC){let i=A(t,e,x.SCOPED_TO);return i?t.nodeLabel.get(i)===v.USECASE?i:A(t,i,x.BELONGS_TO):null}if(n===v.TEST){let i=A(t,e,x.AUTOMATES);return i?A(t,i,x.BELONGS_TO):null}return null}function z(t,e){let n=[],i=new Map;for(let s of t.derivesInto(e))i.set(String(s.props.source_id),s);for(let[s,f]of i){let o=t.heads.get(s);if(o==null){n.push(`DERIVES pin ${s} @ ${C(f.props.source_cid)} \u2014 source retired`);continue}if(o!==f.props.source_cid){let p=t.convChains.get(s)?.chain;if(p&&p.includes(String(f.props.source_cid)))continue;n.push(`DERIVES pin ${s} @ ${C(f.props.source_cid)} \u2014 source head moved to ${C(o)}`)}}for(let s of t.edgesFrom(e))H(s.type)?.pin?.comparesTo==="dst_tip"&&t.superseded.has(s.dst)&&n.push(`${s.type} pin \u2192 ${y(t,s.dst)} \u2014 target superseded`);return n.join("; ")||"structural pin broken"}var ne=new Set([v.USECASE,v.SCENARIO,v.AC,v.TEST]);function $(t,e){return t.ref<e.ref?-1:t.ref>e.ref?1:0}function D(t,e,n){let i=j(t,e,n);return i===null?null:i.toString("utf8")}function se(t,e,n,i,s){let f=n.props.quote;if(typeof f=="string"&&f.length>0)return i.includes(f);let o=String(n.props.source_cid);s.has(o)||s.set(o,D(t,e,o));let p=s.get(o);if(p===null)return!1;let g=V(p,String(n.props.anchor));return g===null?!1:g.split(`
3
+ `).some(r=>r.trim().length>0&&i.includes(r.trim()))}function oe(t,e,n){let i=L(String(e.props.anchor));if(i?.kind!=="img-part")return!1;let f=(t.mediaOf(String(e.props.source_cid)).images??[]).find(r=>r.ref===i.ref),o=f?.blob;if(o===void 0)return!1;let p=t.mediaOf(n).images??[];if(p.some(r=>r.blob===o))return!0;let g=f?.appearance;return g!==void 0&&p.filter(r=>r.appearance===g).length===1}var J=128*1024,Q=64*1024;function re(t,e){let n=t.split(`
4
+ `),i=e.split(`
5
+ `),s=0;for(;s<n.length&&s<i.length&&n[s]===i[s];)s++;let f=n.length,o=i.length;for(;f>s&&o>s&&n[f-1]===i[o-1];)f--,o--;if(f===s&&o===s)return"";let p=n.slice(s,f),g=i.slice(s,o),l=ie(p,g,2e3),m=[];if(l===null)m.push(`@@ old L${s+1}-L${f} \u2192 new L${s+1}-L${o} @@`,...p.map(u=>`- ${u}`),...g.map(u=>`+ ${u}`));else{let u=l.map((a,h)=>a.op==="="?-1:h).filter(a=>a>=0),d=0;for(;d<u.length;){let a=d;for(;a+1<u.length&&u[a+1]-u[a]<=3;)a++;let h=Math.max(u[d]-1,0),R=Math.min(u[a]+1,l.length-1),b=l.slice(h,R+1),S=s+(b[0].ai??0)+1,_=s+(b[0].bi??0)+1,c=b.filter(E=>E.op!=="+").length,w=b.filter(E=>E.op!=="-").length;m.push(`@@ old L${S}-L${S+Math.max(c-1,0)} \u2192 new L${_}-L${_+Math.max(w-1,0)} @@`);for(let E of b)m.push(E.op==="="?` ${E.line}`:`${E.op} ${E.line}`);d=a+1}}return m.join(`
6
+ `)}function ie(t,e,n){let i=t.length,s=e.length,f=Math.min(i+s,n),o=new Map([[1,0]]),p=[],g=!1;for(let u=0;u<=f&&!g;u++){p.push(new Map(o));for(let d=-u;d<=u;d+=2){let a=d===-u||d!==u&&(o.get(d-1)??0)<(o.get(d+1)??0)?o.get(d+1)??0:(o.get(d-1)??0)+1,h=a-d;for(;a<i&&h<s&&t[a]===e[h];)a++,h++;if(o.set(d,a),a>=i&&h>=s){g=!0;break}}}if(!g)return null;let r=i,l=s,m=[];for(let u=p.length-1;u>0;u--){let d=p[u],a=r-l,h=a===-u||a!==u&&(d.get(a-1)??0)<(d.get(a+1)??0)?a+1:a-1,R=d.get(h)??0,b=R-h;for(;r>R&&l>b;)m.push({op:"=",line:t[r-1],ai:r-1,bi:l-1}),r--,l--;u>0&&(r===R?(m.push({op:"+",line:e[l-1],ai:r,bi:l-1}),l--):(m.push({op:"-",line:t[r-1],ai:r-1,bi:l}),r--))}for(;r>0&&l>0;)m.push({op:"=",line:t[r-1],ai:r-1,bi:l-1}),r--,l--;for(;r>0;)m.push({op:"-",line:t[r-1],ai:r-1,bi:0}),r--;for(;l>0;)m.push({op:"+",line:e[l-1],ai:0,bi:l-1}),l--;return m.reverse()}function ce(t){let e=Buffer.byteLength(t,"utf8");if(e<=J+Q)return{diff:t,truncated:!1};let n=Buffer.from(t,"utf8"),i=J;for(;i>0&&(n[i]&192)===128;)i--;let s=e-Q;for(;s<e&&(n[s]&192)===128;)s++;let f=n.subarray(0,i).toString("utf8"),o=n.subarray(s).toString("utf8");return{diff:`${f}
7
+ \u2026 [diff truncated: ${e-i-(e-s)} bytes omitted] \u2026
8
+ ${o}`,truncated:!0}}function ae(t,e){let n=k(t),i=n.heads.get(e);if(typeof i!="string")return null;let s=[];for(let d of I(t).records){let a=d.source_head_moves?.[e];a!==void 0&&a!==s[s.length-1]&&s.push(a)}let f=s.lastIndexOf(i),o=f>0?s[f-1]:null;if(typeof o!="string"||o===i)return null;let p=D(t,n,o),g=D(t,n,i);if(p===null||g===null)return null;let{diff:r,truncated:l}=ce(re(p,g)),m=new Set,u=[];for(let d of n.edgesFrom(o))d.type!==x.DERIVES||n.nodeLabel.get(d.dst)!==v.USECASE||m.has(d.dst)||(m.add(d.dst),u.push({id:d.dst,title:String(n.getNode(d.dst)?.content.title??"")}));return{source_id:e,old_head:o,new_head:i,diff:r,...l?{truncated:!0}:{},prior_ucs:u}}function de(t,e,n){let i=t.getNode(e)?.content??{},s=t.getNode(n)?.content??{},o=[...new Set([...Object.keys(i),...Object.keys(s)])].sort().filter(p=>JSON.stringify(i[p])!==JSON.stringify(s[p]));return o.length>0?`updated: ${o.join(", ")}`:"updated"}function le(t,e,n,i,s,f,o){let p=new Set((o?.rows??[]).map(a=>a.matched_cid).filter(a=>!!a)),g=[];for(let[a,h]of n.superseded)h===null||a===h||e.superseded.has(a)||n.nodeLabel.get(a)===v.USECASE&&g.push({kind:"MODIFY",ref:y(n,a),old_cid:a,new_cid:h,summary:de(n,a,h)});let r=f.map(a=>({kind:"ADD",ref:y(n,a),cid:a}));for(let a of o?.rows??[])a.kind==="MODIFY"&&a.matched_cid?g.push({kind:"MODIFY",ref:y(n,a.matched_cid),old_cid:a.matched_cid,new_cid:null,summary:`${a.why} (staged)`}):a.kind==="ADD"&&r.push({kind:"ADD",ref:a.title,cid:null});let l=[],m=D(t,n,s),u=new Map;for(let{cid:a}of n.byLabel(v.USECASE)){if(!M(n,a)||p.has(a))continue;let h=n.derivesInto(a),R=h.filter(_=>String(_.props.source_id)===i);R.length===0||R.some(_=>_.props.source_cid===s)||R.some(_=>{let c=String(_.props.anchor),w=L(c);return w?.kind==="img-whole"?!1:w?.kind==="img-part"?oe(n,_,s):m!==null&&se(t,n,_,m,u)})||h.some(_=>{let c=String(_.props.source_id);if(c===i)return!1;let w=n.heads.get(c);return w!=null})||l.push({kind:"ARCHIVE",ref:y(n,a),cid:a,why:`evidence decayed: no quote from ${i} relocates into @${C(s)}, no other live source, no fresh evidence this run`,impact:W(n,n.tipOf(a))})}let d=(a,h)=>a.ref<h.ref?-1:a.ref>h.ref?1:0;return[...g.sort(d),...r.sort(d),...l.sort(d)]}function Ee(t,e,n,i,s){let f=e.rows.find(d=>d.temp_ref===n);if(!f)return{ok:!1,message:`held item ${n} missing from the plan artifact`};let o=f,p=k(t);if(o.matched_cid){let d=p.tipOf(o.matched_cid);if(p.superseded.get(d)===null)return{ok:!1,message:`use-case for "${o.title}" was retired meanwhile \u2014 nothing to update`};d!==o.matched_cid&&(o={...o,matched_cid:d,uc:{...o.uc,matches_existing:{cid:d}}})}let g=s?{edited:s}:"approve",r=ee(t,p,{source_id:e.source_id,...e.staged_source_cid!==void 0?{staged_source_cid:e.staged_source_cid}:{},rows:[o]},new Map([[o.temp_ref,g]]),i);if(r.errors)return{ok:!1,message:r.errors.map(d=>`${d.code}: ${d.detail}`).join("; ")};let l=k(t),m=o.matched_cid?l.tipOf(o.matched_cid):r.record?.nodes.find(d=>d.label==="usecase")?.cid??r.record?.review[0]?.id;return{ok:!0,ref:m?y(l,m):o.title,kind:o.kind}}async function Re(t,e,n,i={}){let s=k(t),f=s.heads.get(e)??null,o=new Set(s.staleList().filter(c=>c.state==="stale").map(c=>c.cid)),p=await n.reingest(e);if(p.status==="unchanged"&&!i.resumeHeld)return{source_id:e,changed:!1,head:{status:p.status,before:f,after:p.cid},note:`nothing to reconcile \u2014 ${e} is unchanged`,skipped_arms:q,changeset:[],rows:[]};let g=i.resumeHeld?{minted:[],matched:[],held:i.resumeHeld}:await n.reextract(e),r=k(t),l=g.minted.map(c=>{let w=y(r,c);return{kind:"ADD",origin:"content-change",ref:w,reason:`new use-case extracted from ${e}`,provenance:`extraction commit \u2014 DERIVES ${e} @ ${C(p.cid)}`,action:`kane-cli design tests --use-case ${w}`}}),m=r.staleList().filter(c=>c.state==="stale"&&!o.has(c.cid)&&M(r,c.cid)).map(c=>c.cid),u=m.map(c=>{let w=y(r,c),E=ne.has(r.nodeLabel.get(c)??"");return{kind:"MODIFY",origin:"structural-stale",ref:w,reason:"stale (structural)",provenance:z(r,c),action:E?`kane-cli maintain evolve ${w}`:`kane-cli design explain ${w}`}}),d=[],a=[];for(let c of g.held?.rows??[])if(c.kind==="ADD")d.push({kind:"ADD",origin:"content-change",ref:c.title,held_ref:c.temp_ref,reason:`${c.why} (staged \u2014 commits on approval)`,provenance:`staged extraction of ${e} @ ${C(p.cid)}`,action:"approve to commit + design"});else{let w=c.matched_cid?r.tipOf(c.matched_cid):null,E=w?r.getNode(w)?.content.criteria??[]:[],T=(c.uc.updated?.criteria??[]).map(O=>typeof O=="string"?O:O.text),Z=[...T.filter(O=>!E.includes(O)),...c.uc.updated?.criteria!==void 0?E.filter(O=>!T.includes(O)):[]],P=w?W(r,w,Z):void 0;a.push({kind:"MODIFY",origin:"content-change",ref:c.matched_cid?y(r,c.matched_cid):c.title,held_ref:c.temp_ref,reason:`${c.why} (staged \u2014 commits on approval)`,provenance:`staged extraction of ${e} @ ${C(p.cid)}`,action:"approve to commit the updated version (old\u2192new redirect)",...P?{impact:P}:{}})}let h=new Set;for(let c of[...g.minted,...g.matched])h.add(r.tipOf(c));for(let c of g.held?.rows??[])c.matched_cid&&h.add(r.tipOf(c.matched_cid));for(let c of m){let w=X(r,r.tipOf(c));w&&r.nodeLabel.get(w)===v.USECASE&&h.add(r.tipOf(w))}let R=[];for(let c of await F(r,"design")){if(c.kind!=="no-verifies")continue;let w=r.resolve(c.ref);if(!w)continue;let E=X(r,w.tip);!E||!h.has(r.tipOf(E))||R.push({kind:"ADD",origin:"content-change",ref:c.ref,reason:c.why,provenance:`gaps engine (design) \u2014 uncovered AC of touched use-case ${y(r,E)}`,action:c.ready_command})}let b=[];for(let{cid:c}of r.byLabel(v.USECASE))M(r,c)&&r.stale(c)==="orphaned"&&b.push({kind:"REMOVE",ref:y(r,c),reason:"orphaned \u2014 no live source evidences this use-case",provenance:z(r,c),action:"plan-only \u2014 REMOVE is not executed in this release"});let S=new Set,_=[...l.sort($),...d.sort($),...R.sort($),...a.sort($),...u.sort($),...b.sort($)].filter(c=>{let w=`${c.kind}\0${c.ref}`;return S.has(w)?!1:(S.add(w),!0)});return{source_id:e,changed:!0,head:{status:p.status,before:f,after:p.cid},note:te,skipped_arms:q,changeset:le(t,s,r,e,p.cid,g.minted,g.held),rows:_,...g.held?{held:g.held}:{}}}function ye(t,e){return async n=>{let{ingestFile:i}=await import("./ingest-EX72IEQT.js"),{convertPdf:s}=await import("./pdf-convert-OZIRUADA.js"),{convertDocx:f}=await import("./docx-convert-CHLJUTFH.js"),o=await i({contextDir:t,filePath:e,asId:n,converters:{pdf:s,docx:f}});return{status:o.status,cid:o.cid}}}function be(t,e,n,i){return async()=>{let f=(i??(await import("./dispatch-WVNXB7AD.js")).findProvider)(e);if(!f)throw new Error(`the remote re-ingest failed \u2014 no provider matches '${e}'`);let o=await f.ingest(e,void 0,{out:n.out,err:n.err,confirm:async()=>!0,isTTY:!1},t,void 0);if(o.code!==0||!o.result)throw new Error("the remote re-ingest failed \u2014 fix the reported problem and re-run");return{status:o.result.status,cid:o.result.source_cid}}}function xe(t,e={}){return async n=>{let i=[],[{runExtract:s},{resolveAgentAuthEnv:f},{runAgent:o},{preflightTurn:p}]=await Promise.all([import("./run-TFRWPGXP.js"),import("./spawner-GC5CFAJ7.js"),import("./bridge-JSKEO4N3.js"),import("./turn-preflight-JGYT7LXP.js")]),g=await f(),r=new Set(k(t).byLabel(v.USECASE).map(S=>S.cid)),l=ae(t,n)??void 0,m=0,u=await s({mode:"override",source:n,...l?{changeContext:l}:{}},{contextDir:t,agent:o,preflightTurn:()=>p(g),ask:async()=>[],review:async S=>{if(!e.stage)return new Map(S.map(c=>[c.temp_ref,{resolution:c.matches_existing&&c.changed?"edited":"skipped"}]));let _=new Map;for(let c of S){if(c.matches_existing&&!c.changed){_.set(c.temp_ref,{resolution:"skipped"});continue}i.push({kind:c.matches_existing?"MODIFY":"ADD",temp_ref:c.temp_ref,title:c.title,why:c.matches_existing?`updated: ${Object.keys(c.updated??{}).join(", ")||"content"}`:`newly extracted from ${n}`,...c.matches_existing?{matched_cid:c.matches_existing.cid,updated:c.updated}:{},uc:c}),_.set(c.temp_ref,{resolution:"rejected"})}return _},confirmStale:async()=>!1,out:S=>e.hostOut?.(S),progress:S=>e.hostProgress?.(S),emit:S=>{S.type==="commit"&&typeof S.assumed=="number"&&(m+=S.assumed),e.hostEmit?.(S)},isTTY:!1,auth:g});if(u!==0)throw new Error(`reconcile: re-extract of ${n} failed (exit ${u})`);let d=k(t),a=d.heads.get(n),h=[],R=[];if(typeof a=="string"){let S=new Set;for(let _ of d.edgesFrom(a))_.type!==x.DERIVES||d.nodeLabel.get(_.dst)!==v.USECASE||S.has(_.dst)||(S.add(_.dst),!(e.stage&&d.trust.get(_.dst)==="archived")&&(r.has(_.dst)?R:h).push(_.dst))}let b=k(t).heads.get(n);return{minted:h,matched:R,defaultsTaken:m,...e.stage?{held:{source_id:n,...b!=null?{staged_source_cid:b}:{},rows:i}}:{}}}}export{ee as a,W as b,q as c,te as d,M as e,X as f,ne as g,re as h,ce as i,ae as j,Ee as k,Re as l,ye as m,be as n,xe as o};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as s,k as l}from"./chunk-C4G7RVJ6.js";import{readFileSync as g,writeFileSync as o,mkdirSync as i,existsSync as p}from"fs";import{dirname as a}from"path";var n={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:l,model:"v16-alpha",project_id:null,project_name:null,folder_id:null,folder_name:null,mode:"testing",assertion_mode:"dom",network_ws:!1,network_sse:!1,bug_detection:"off",final_validation:!1,code_export:{enabled:!0,language:"python",skip_validation:!0},generate:{scenario_limit:2,per_scenario_limit:3,memory_enabled:!1},last_seen_version:"",hints_enabled:!0},c=class{constructor(r=s){this.path=r}exists(){return p(this.path)}load(){try{let r=g(this.path,"utf-8"),e=JSON.parse(r);return{...n,...e,code_export:{...n.code_export,...e.code_export??{}},generate:{...n.generate,...e.generate??{}}}}catch{return{...n,code_export:{...n.code_export},generate:{...n.generate}}}}set(r,e){try{let t=this.load();t[r]=e,i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(t,null,2)+`
2
+ import{d as s,k as l}from"./chunk-ZUGCHQFC.js";import{readFileSync as g,writeFileSync as o,mkdirSync as i,existsSync as p}from"fs";import{dirname as a}from"path";var n={window_size:{width:1920,height:1080},chrome_profile_path:"",default_url:l,model:"v16-alpha",project_id:null,project_name:null,folder_id:null,folder_name:null,mode:"testing",assertion_mode:"dom",network_ws:!1,network_sse:!1,bug_detection:"off",final_validation:!1,code_export:{enabled:!0,language:"python",skip_validation:!0},generate:{scenario_limit:2,per_scenario_limit:3,memory_enabled:!1},last_seen_version:"",hints_enabled:!0},c=class{constructor(r=s){this.path=r}exists(){return p(this.path)}load(){try{let r=g(this.path,"utf-8"),e=JSON.parse(r);return{...n,...e,code_export:{...n.code_export,...e.code_export??{}},generate:{...n.generate,...e.generate??{}}}}catch{return{...n,code_export:{...n.code_export},generate:{...n.generate}}}}set(r,e){try{let t=this.load();t[r]=e,i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(t,null,2)+`
3
3
  `)}catch(t){let d=t instanceof Error?t.message:String(t);process.stderr.write(`[config] Failed to save config: ${d}
4
4
  `)}}save(r){try{let t={...this.load(),...r};i(a(this.path),{recursive:!0}),o(this.path,JSON.stringify(t,null,2)+`
5
5
  `)}catch(e){let t=e instanceof Error?e.message:String(e);process.stderr.write(`[config] Failed to save config: ${t}
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as v,b as w,d as C}from"./chunk-QROUKGKU.js";import{b as k}from"./chunk-OHRS3H7Z.js";import{a as E}from"./chunk-5JTUL6XL.js";import{a as T}from"./chunk-JFAFKHDX.js";import{a as y,b as O}from"./chunk-GW5DWAXY.js";import{d,e as g}from"./chunk-5YPBPZUR.js";var D=new Set([d.USECASE,d.SCENARIO,d.AC,d.TEST]);function p(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function b(e,t,n){let o=e.edgesFrom(t).find(s=>s.type===n);return o?e.tipOf(o.dst):null}function S(e,t,n){if(n===d.USECASE)return t;if(n===d.SCENARIO)return b(e,t,g.BELONGS_TO);if(n===d.AC){let o=b(e,t,g.SCOPED_TO);return o?e.nodeLabel.get(o)===d.USECASE?o:b(e,o,g.BELONGS_TO):null}if(n===d.TEST){let o=b(e,t,g.AUTOMATES);return o?b(e,o,g.BELONGS_TO):null}return null}function A(e,t){let n=e.nameOf.get(t);if(n)return n;for(let[o,s]of e.names)if(e.tipOf(s)===t)return o;return t}function G(e,t){return{ucTip:t,display:A(e,t),seamRef:e.nameOf.get(t)??t}}function L(e,t){let n=e.resolve(t);if(!n)return{ok:!1,message:`unknown ref '${t}' \u2014 no test/scenario/ac/use-case by that id or cid`};let o=n.tip,s=e.nodeLabel.get(o);if(!s||!D.has(s))return{ok:!1,message:`'${t}' is a ${s??"missing node"} \u2014 evolve takes a test, scenario, acceptance criterion, or use-case`};let a=S(e,o,s);return!a||e.nodeLabel.get(a)!==d.USECASE?{ok:!1,message:`cannot resolve '${t}' to a parent use-case \u2014 its ${s} chain is broken`}:e.superseded.has(a)?{ok:!1,message:`use-case ${A(e,a)} was removed \u2014 nothing to evolve`}:{ok:!0,target:G(e,a)}}function z(e,t){return h(e,t)}function h(e,t){let n=[];for(let{cid:s}of e.byLabel(d.SCENARIO)){if(!p(e,s)||!e.edgesFrom(s).some(r=>r.type===g.BELONGS_TO&&e.tipOf(r.dst)===t))continue;let a=e.edgesInto(s).filter(r=>r.type===g.AUTOMATES&&p(e,r.src));if(a.length===0)n.push({scenario:s,test:null});else for(let r of a)n.push({scenario:s,test:r.src})}let o=new Map;for(let{cid:s}of e.byLabel(d.AC)){if(!p(e,s)||S(e,s,d.AC)!==t)continue;let a=e.edgesInto(s).filter(r=>r.type===g.VERIFIES&&p(e,r.src)).map(r=>r.src).sort();o.set(s,a)}return{pairs:n,verifies:o}}function x(e,t){let n=r=>`${r.scenario}\0${r.test??""}`,o=new Set(e.pairs.map(n)),s=new Set(t.pairs.map(n)),a=[];for(let[r,i]of e.verifies){let u=t.verifies.get(r);u&&(i.length===u.length&&i.every((l,f)=>l===u[f])||a.push({ac:r,before:i,after:u}))}return{superseded:e.pairs.filter(r=>!s.has(n(r))),minted:t.pairs.filter(r=>!o.has(n(r))),retained:t.pairs.filter(r=>o.has(n(r))),moves:a}}function P(e,t,n,o,s){let a=i=>t.nameOf.get(i)??i,r=i=>` - ${a(i.scenario)} \xB7 ${i.test?a(i.test):"(no test)"}`;e.out(`evolved: use-case ${n} \u2014 design record ${o.before} \u2192 ${o.after}`),e.out(`superseded: ${s.superseded.length} pair(s)`);for(let i of s.superseded)e.out(r(i));e.out(`minted: ${s.minted.length} pair(s)`);for(let i of s.minted)e.out(r(i));e.out(`retained: ${s.retained.length} pair(s)`);for(let i of s.retained)e.out(r(i));if(s.moves.length===0)e.out("verifies moves: none");else{e.out("verifies moves:");for(let i of s.moves){let u=l=>l.length>0?l.map(a).join(" + "):"(none)";e.out(` - ${a(i.ac)}: ${u(i.before)} \u2192 ${u(i.after)}`)}}}async function U(e,t,n,o,s,a){let r=y(e),i=E(r,t.ucTip);if(!i)return a==="batch"?(o.out(`note: ${t.display} has no design output \u2014 nothing to evolve; run kane-cli design tests --use-case ${t.display} first`),{code:0,outcome:"no-design"}):(v(o,`nothing to evolve \u2014 run kane-cli design tests --use-case ${t.display} first (no design output)`),{code:2,outcome:"no-design"});let u=h(r,t.ucTip),l=`evolve re-designs the parent use-case ${t.display}; ${u.pairs.length} pair(s) affected`;if(n.yes)o.out(l);else if(!await o.confirm(`${l} \u2014 proceed?`))return o.out(a==="batch"?`skipped ${t.display}`:"declined \u2014 nothing evolved"),{code:0,outcome:"declined"};let f=k(e,r,t.ucTip,n.because),c=await s(t.seamRef,{yes:!!n.yes,...n.mode?{mode:n.mode}:{},...n.because?{because:n.because}:{},...f!==void 0?{changeDelta:f.change_delta,priorDesign:f.prior_design}:{}});if(c===3)return o.out(`design session for ${t.display} paused \u2014 resume with \`kane-cli design tests --resume\`, then re-run evolve for the diff`),{code:c,outcome:"paused"};if(c!==0)return v(o,`design run for ${t.display} ended with exit code ${c} \u2014 no diff to report`),{code:c,outcome:"failed"};let m=y(e),$=m.tipOf(t.ucTip),R=E(m,$)?.seq;return P(o,m,t.display,{before:i.seq,after:R??"?"},x(u,h(m,$))),{code:0,outcome:"evolved"}}function F(e){let t=new Map,n=0;for(let{cid:s,state:a}of e.staleList()){if(a==="superseded")continue;let r=e.nodeLabel.get(s);if(!r||!D.has(r)||!p(e,s)||!O(e,s))continue;let i=S(e,s,r);!i||e.nodeLabel.get(i)!==d.USECASE||e.superseded.has(i)||(n++,t.has(i)||t.set(i,G(e,i)))}return{targets:[...t.values()].sort((s,a)=>s.display<a.display?-1:s.display>a.display?1:0),staleCount:n}}function I(e,t){for(let{cid:n,state:o}of e.staleList()){if(o==="superseded")continue;let s=e.nodeLabel.get(n);if(!(!s||!D.has(s)||!p(e,n))&&O(e,n)&&S(e,n,s)===t)return!0}return!1}async function N(e,t,n,o={},s=process.cwd()){if(e&&t.fromStale)return v(n,"pass a <ref> OR --from-stale, not both"),2;if(!e&&!t.fromStale)return v(n,"evolve needs a <ref> or --from-stale"),2;let a=w(s,n);if(!a)return 2;let r=o.runDesignForUc??_;n.out(`evolving ${e??"stale use-cases"}: reading the graph\u2026`);let i=y(a),u,l=null;if(e){let c=L(i,e);if(!c.ok)return v(n,c.message),2;if(!t.because&&E(i,c.target.ucTip)&&!I(i,c.target.ucTip))return v(n,`nothing changed underneath ${e} \u2014 its sources and requirements are current; use --because "<reason>" to re-design anyway`),2;u=[c.target]}else{let{targets:c,staleCount:m}=F(i);if(c.length===0)return n.out("nothing stale \u2014 nothing to evolve"),0;l=`from-stale: ${m} stale node(s) \u2192 ${c.length} use-case(s)`,u=c}if(!t.yes&&!n.isTTY)return v(n,"evolve needs a TTY \u2014 the blast-radius confirm is the point; headless evolution rides `kane-cli maintain reconcile`"),2;if(l&&n.out(l),e){let c=await U(a,u[0],t,n,r,"single");return c.outcome==="evolved"&&t.because&&T(a,{ts:new Date().toISOString(),command:"evolve",id:e,verdict:"gap-resolved-evolve",polarity:"preference",by:{kind:"human",id:process.env.USER??"operator"},target:e,reason:t.because}),c.code}let f=0;for(let c of u){let{code:m}=await U(a,c,t,n,r,"batch");m!==0&&f===0&&(f=m)}return f}var _=async(e,t)=>{let{designTestsCommand:n}=await import("./bind-AACBTSAA.js"),o=()=>n({useCase:e,force:!0,...t.mode?{mode:t.mode}:t.yes?{mode:"override"}:{},...t.because?{because:t.because}:{},...t.changeDelta!==void 0?{changeDelta:t.changeDelta}:{},...t.priorDesign!==void 0?{priorDesign:t.priorDesign}:{}});if(t.mode!=="agent")return o();let s=process.stdout.write;process.stdout.write=((...a)=>!0);try{return await o()}finally{process.stdout.write=s}};async function J(e,t){return N(e,t,C(),{})}export{L as a,z as b,U as c,F as d,N as e,_ as f,J as g};
2
+ import{a as v,b as w,d as C}from"./chunk-OS4VSIHT.js";import{b as k}from"./chunk-TRJUD3XJ.js";import{a as T}from"./chunk-JFAFKHDX.js";import{a as E}from"./chunk-JZ26R6UL.js";import{A as y,B as O}from"./chunk-TH47OOBV.js";import{d,e as g}from"./chunk-WXHQYYD5.js";var D=new Set([d.USECASE,d.SCENARIO,d.AC,d.TEST]);function p(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function b(e,t,n){let o=e.edgesFrom(t).find(s=>s.type===n);return o?e.tipOf(o.dst):null}function S(e,t,n){if(n===d.USECASE)return t;if(n===d.SCENARIO)return b(e,t,g.BELONGS_TO);if(n===d.AC){let o=b(e,t,g.SCOPED_TO);return o?e.nodeLabel.get(o)===d.USECASE?o:b(e,o,g.BELONGS_TO):null}if(n===d.TEST){let o=b(e,t,g.AUTOMATES);return o?b(e,o,g.BELONGS_TO):null}return null}function A(e,t){let n=e.nameOf.get(t);if(n)return n;for(let[o,s]of e.names)if(e.tipOf(s)===t)return o;return t}function G(e,t){return{ucTip:t,display:A(e,t),seamRef:e.nameOf.get(t)??t}}function L(e,t){let n=e.resolve(t);if(!n)return{ok:!1,message:`unknown ref '${t}' \u2014 no test/scenario/ac/use-case by that id or cid`};let o=n.tip,s=e.nodeLabel.get(o);if(!s||!D.has(s))return{ok:!1,message:`'${t}' is a ${s??"missing node"} \u2014 evolve takes a test, scenario, acceptance criterion, or use-case`};let a=S(e,o,s);return!a||e.nodeLabel.get(a)!==d.USECASE?{ok:!1,message:`cannot resolve '${t}' to a parent use-case \u2014 its ${s} chain is broken`}:e.superseded.has(a)?{ok:!1,message:`use-case ${A(e,a)} was removed \u2014 nothing to evolve`}:{ok:!0,target:G(e,a)}}function z(e,t){return h(e,t)}function h(e,t){let n=[];for(let{cid:s}of e.byLabel(d.SCENARIO)){if(!p(e,s)||!e.edgesFrom(s).some(r=>r.type===g.BELONGS_TO&&e.tipOf(r.dst)===t))continue;let a=e.edgesInto(s).filter(r=>r.type===g.AUTOMATES&&p(e,r.src));if(a.length===0)n.push({scenario:s,test:null});else for(let r of a)n.push({scenario:s,test:r.src})}let o=new Map;for(let{cid:s}of e.byLabel(d.AC)){if(!p(e,s)||S(e,s,d.AC)!==t)continue;let a=e.edgesInto(s).filter(r=>r.type===g.VERIFIES&&p(e,r.src)).map(r=>r.src).sort();o.set(s,a)}return{pairs:n,verifies:o}}function x(e,t){let n=r=>`${r.scenario}\0${r.test??""}`,o=new Set(e.pairs.map(n)),s=new Set(t.pairs.map(n)),a=[];for(let[r,i]of e.verifies){let u=t.verifies.get(r);u&&(i.length===u.length&&i.every((l,f)=>l===u[f])||a.push({ac:r,before:i,after:u}))}return{superseded:e.pairs.filter(r=>!s.has(n(r))),minted:t.pairs.filter(r=>!o.has(n(r))),retained:t.pairs.filter(r=>o.has(n(r))),moves:a}}function P(e,t,n,o,s){let a=i=>t.nameOf.get(i)??i,r=i=>` - ${a(i.scenario)} \xB7 ${i.test?a(i.test):"(no test)"}`;e.out(`evolved: use-case ${n} \u2014 design record ${o.before} \u2192 ${o.after}`),e.out(`superseded: ${s.superseded.length} pair(s)`);for(let i of s.superseded)e.out(r(i));e.out(`minted: ${s.minted.length} pair(s)`);for(let i of s.minted)e.out(r(i));e.out(`retained: ${s.retained.length} pair(s)`);for(let i of s.retained)e.out(r(i));if(s.moves.length===0)e.out("verifies moves: none");else{e.out("verifies moves:");for(let i of s.moves){let u=l=>l.length>0?l.map(a).join(" + "):"(none)";e.out(` - ${a(i.ac)}: ${u(i.before)} \u2192 ${u(i.after)}`)}}}async function U(e,t,n,o,s,a){let r=y(e),i=E(r,t.ucTip);if(!i)return a==="batch"?(o.out(`note: ${t.display} has no design output \u2014 nothing to evolve; run kane-cli design tests --use-case ${t.display} first`),{code:0,outcome:"no-design"}):(v(o,`nothing to evolve \u2014 run kane-cli design tests --use-case ${t.display} first (no design output)`),{code:2,outcome:"no-design"});let u=h(r,t.ucTip),l=`evolve re-designs the parent use-case ${t.display}; ${u.pairs.length} pair(s) affected`;if(n.yes)o.out(l);else if(!await o.confirm(`${l} \u2014 proceed?`))return o.out(a==="batch"?`skipped ${t.display}`:"declined \u2014 nothing evolved"),{code:0,outcome:"declined"};let f=k(e,r,t.ucTip,n.because),c=await s(t.seamRef,{yes:!!n.yes,...n.mode?{mode:n.mode}:{},...n.because?{because:n.because}:{},...f!==void 0?{changeDelta:f.change_delta,priorDesign:f.prior_design}:{}});if(c===3)return o.out(`design session for ${t.display} paused \u2014 resume with \`kane-cli design tests --resume\`, then re-run evolve for the diff`),{code:c,outcome:"paused"};if(c!==0)return v(o,`design run for ${t.display} ended with exit code ${c} \u2014 no diff to report`),{code:c,outcome:"failed"};let m=y(e),$=m.tipOf(t.ucTip),R=E(m,$)?.seq;return P(o,m,t.display,{before:i.seq,after:R??"?"},x(u,h(m,$))),{code:0,outcome:"evolved"}}function F(e){let t=new Map,n=0;for(let{cid:s,state:a}of e.staleList()){if(a==="superseded")continue;let r=e.nodeLabel.get(s);if(!r||!D.has(r)||!p(e,s)||!O(e,s))continue;let i=S(e,s,r);!i||e.nodeLabel.get(i)!==d.USECASE||e.superseded.has(i)||(n++,t.has(i)||t.set(i,G(e,i)))}return{targets:[...t.values()].sort((s,a)=>s.display<a.display?-1:s.display>a.display?1:0),staleCount:n}}function I(e,t){for(let{cid:n,state:o}of e.staleList()){if(o==="superseded")continue;let s=e.nodeLabel.get(n);if(!(!s||!D.has(s)||!p(e,n))&&O(e,n)&&S(e,n,s)===t)return!0}return!1}async function N(e,t,n,o={},s=process.cwd()){if(e&&t.fromStale)return v(n,"pass a <ref> OR --from-stale, not both"),2;if(!e&&!t.fromStale)return v(n,"evolve needs a <ref> or --from-stale"),2;let a=w(s,n);if(!a)return 2;let r=o.runDesignForUc??_;n.out(`evolving ${e??"stale use-cases"}: reading the graph\u2026`);let i=y(a),u,l=null;if(e){let c=L(i,e);if(!c.ok)return v(n,c.message),2;if(!t.because&&E(i,c.target.ucTip)&&!I(i,c.target.ucTip))return v(n,`nothing changed underneath ${e} \u2014 its sources and requirements are current; use --because "<reason>" to re-design anyway`),2;u=[c.target]}else{let{targets:c,staleCount:m}=F(i);if(c.length===0)return n.out("nothing stale \u2014 nothing to evolve"),0;l=`from-stale: ${m} stale node(s) \u2192 ${c.length} use-case(s)`,u=c}if(!t.yes&&!n.isTTY)return v(n,"evolve needs a TTY \u2014 the blast-radius confirm is the point; headless evolution rides `kane-cli maintain reconcile`"),2;if(l&&n.out(l),e){let c=await U(a,u[0],t,n,r,"single");return c.outcome==="evolved"&&t.because&&T(a,{ts:new Date().toISOString(),command:"evolve",id:e,verdict:"gap-resolved-evolve",polarity:"preference",by:{kind:"human",id:process.env.USER??"operator"},target:e,reason:t.because}),c.code}let f=0;for(let c of u){let{code:m}=await U(a,c,t,n,r,"batch");m!==0&&f===0&&(f=m)}return f}var _=async(e,t)=>{let{designTestsCommand:n}=await import("./bind-KCUSVJXG.js"),o=()=>n({useCase:e,force:!0,...t.mode?{mode:t.mode}:t.yes?{mode:"override"}:{},...t.because?{because:t.because}:{},...t.changeDelta!==void 0?{changeDelta:t.changeDelta}:{},...t.priorDesign!==void 0?{priorDesign:t.priorDesign}:{}});if(t.mode!=="agent")return o();let s=process.stdout.write;process.stdout.write=((...a)=>!0);try{return await o()}finally{process.stdout.write=s}};async function J(e,t){return N(e,t,C(),{})}export{L as a,z as b,U as c,F as d,N as e,_ as f,J as g};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as b,b as $}from"./chunk-3STZLM5J.js";function C(n){return n.replace(/\n$/,"").split(`
2
+ import{a as b,b as $}from"./chunk-TH47OOBV.js";function C(n){return n.replace(/\n$/,"").split(`
3
3
  `).map((l,o)=>`${String(o+1).padStart(4,"0")}| ${l}`).join(`
4
4
  `)}function S(n,d,l){if(!n.quote)return n;let o=$(l,n.anchor);if(o!==null&&o.includes(n.quote))return n;let a=d.indexOf(n.quote);if(a===-1||d.indexOf(n.quote,a+1)!==-1)return"gone-or-ambiguous";let t=d.slice(0,a).split(`
5
5
  `).length,r=t+n.quote.replace(/\n$/,"").split(`
@@ -0,0 +1,9 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a as ke}from"./chunk-DZPGG4S6.js";import{b as he,c as _e,d as Z,e as ee}from"./chunk-7OYZR6JA.js";import{d as P}from"./chunk-JFAFKHDX.js";import{c as ye,e as we}from"./chunk-VGFTNLQQ.js";import{a as pe}from"./chunk-5FJJJNJK.js";import{a as L}from"./chunk-DNNZ353O.js";import{A as I,z as me}from"./chunk-TH47OOBV.js";import{b as ge}from"./chunk-VAYBKR76.js";import{a as ue}from"./chunk-CUM23TLF.js";import{d as de,i as fe}from"./chunk-DUAXZYAD.js";import{d as ae,f as le}from"./chunk-WXHQYYD5.js";function bt(t){let e=process.env.HOME??"";return e&&t.startsWith(e)?`~${t.slice(e.length)}`:t}import{randomBytes as mt}from"crypto";function te(t,e){let n=Math.min(t.length,e.length),o=0,r=0,c=0;for(let s=0;s<n;s++)o+=t[s]*e[s],r+=t[s]*t[s],c+=e[s]*e[s];return r===0||c===0?0:o/(Math.sqrt(r)*Math.sqrt(c))}function ne(t,e,n){return n*t+(1-n)*e}var re=.7;var ze=["get_node","get_edges","find_by_provenance","match_by_type","stale_nodes","search_similar","search_similar_batch","history"],Qe=["source_read","source_grep","source_list"],Ke=[...ze,...Qe],Se=50,Ee=200,se=10,Re=50,be=20,We=200,Xe=50;function U(t,e,n){let o=typeof t=="number"&&Number.isFinite(t)?Math.floor(t):e;return Math.max(1,Math.min(o,n))}function M(t,e){let n=t[e];if(typeof n!="string"||n.length===0)throw new b(`param "${e}" must be a non-empty string`);return n}function D(t,e){let n=t[e];if(n==null)return null;if(typeof n!="string")throw new b(`param "${e}" must be a string when present`);return n}var b=class extends Error{},xe=24,qe=10,Ye=10;function Je(t){let e=t.cursor;if(e==null)return 0;if(typeof e=="string"&&/^\d+$/.test(e))return Number.parseInt(e,10);throw new b(`BAD_CURSOR: cursor ${JSON.stringify(e)} is not a cursor this store minted`)}function Ae(t,e){let n=e.fields;if(!Array.isArray(n)||n.length===0)return t;let o=new Set(n.filter(r=>typeof r=="string"));return t.map(r=>Object.fromEntries(Object.entries(r).filter(([c])=>o.has(c))))}function oe(t,e,n=Se,o=Ee){let r=Je(e),c=U(e.limit,n,o),s=t.slice(r,r+c),d=r+s.length<t.length;return{rows:Ae(s,e),truncated:d,next_cursor:d?String(r+s.length):null}}var Ze=t=>t.cursor!=null||t.fields!=null;function z(t,e,n=Se){let o=oe(t,e,n);return Ze(e)||o.truncated?{rows:o.rows,truncated:o.truncated,next_cursor:o.next_cursor}:o.rows}function ie(t,e){let n=t.getNode(e);return n?{cid:e,label:n.label,content:n.content,trust:t.trust.get(e)??null,freshness:t.stale(e)}:null}function ve(t){return new Set(t.toLowerCase().replace(/[^\p{L}\p{N}]+/gu," ").split(" ").filter(Boolean))}function Q(t,...e){let n=ve(t);if(n.size===0)return 0;let o=t.trim().toLowerCase(),r=0;for(let c of e){let s=ve(c);if(s.size===0)continue;let d=0;for(let u of n)s.has(u)&&d++;let m=n.size+s.size-d,f=m===0?0:d/m;o&&c.toLowerCase().includes(o)&&(f=Math.max(f,.9)),r=Math.max(r,f)}return r}function et(t,e){let n=M(e,"cid"),o=D(e,"type"),r=D(e,"direction")??"both";if(!["out","in","both"].includes(r))throw new b('param "direction" must be out|in|both');let c=[];(r==="out"||r==="both")&&c.push(...t.edgesFrom(n)),(r==="in"||r==="both")&&c.push(...t.edgesInto(n));let s=c.filter(d=>o==null||d.type===o);return z(s,e)}function tt(t,e){let n=M(e,"source_id"),o=t.heads.get(n)??null,r=[];for(let c of t.nodeLabel.keys()){let s=t.derivesInto(c).filter(m=>m.props.source_id===n).map(m=>({source_cid:m.props.source_cid,anchor:m.props.anchor??null}));if(s.length===0)continue;let d=ie(t,c);d&&r.push({...d,pins:s,pinned_to_head:o!=null&&s.some(m=>m.source_cid===o)})}return z(r,e,Ee)}function nt(t,e){let n=M(e,"label"),o=D(e,"trust"),r=D(e,"freshness"),c=[];for(let{cid:s}of t.byLabel(n)){let d=ie(t,s);d&&(o!=null&&d.trust!==o||r!=null&&d.freshness!==r||c.push(d))}return z(c,e)}function rt(t,e={}){let n=D(e,"label"),o=t.staleList().map(({cid:r,state:c})=>{let s=t.getNode(r);return{cid:r,state:c,label:s?.label??null,title:s?.content.title??null}}).filter(r=>n==null||r.label===n);return z(o,e)}function st(t,e,n){let o=e.extracted,r=D(e,"kind"),c=[];for(let f of[...t.heads.keys()].sort()){let u=t.heads.get(f);if(typeof u!="string")continue;let h=t.mediaOf(u).format;if(r!=null&&h!==r)continue;let _=t.extractedSourceCids.has(u);if(typeof o=="boolean"&&_!==o)continue;let E=0;if(h!=="image"){let y=L(n,t,u);y&&(E=y.toString("utf8").replace(/\n$/,"").split(`
3
+ `).length)}let l=t.extractionCompleteness.get(f);c.push({source_id:f,kind:h,lines:E,head_cid:u,extracted:_,last_extract_at:l?.at??null,extractor_version:l?.extractor_version??null})}let{rows:s,truncated:d,next_cursor:m}=oe(c,e);return{sources:s,truncated:d,next_cursor:m}}function ot(t,e,n){let o=M(e,"ref"),r=t.resolve(o);if(!r)throw new b(`UNKNOWN_REF: ${o} names nothing in the graph`);let c=r.tip,s=new Map;for(let[p,k]of t.superseded)typeof k=="string"&&k!==p&&s.set(k,[...s.get(k)??[],p]);let d=[],m=[c],f=new Set;for(;m.length>0;){let p=m.pop();f.has(p)||(f.add(p),d.push(p),m.push(...s.get(p)??[]))}let{records:u}=de(n),g=new Map,h=new Map;for(let p of u){for(let k of p.nodes)g.has(k.cid)||g.set(k.cid,p.ts);for(let k of p.supersessions)k.kind==="node"&&h.set(k.old,{by_cid:k.new,reason:k.reason})}let _=d.map(p=>({cid:p,minted_at:g.get(p)??null,superseded_by:h.get(p)?.by_cid??null,reason:h.get(p)?.reason??null,change_note:null})),{rows:E,truncated:l,next_cursor:y}=oe(_,e,Ye);return{root_logical_id:t.displayNameOf(c),live_tip:t.superseded.has(c)?null:c,truncated:l,next_cursor:y,chain:E}}function $e(t){let e=t.queries;if(!Array.isArray(e)||e.length<1||e.length>xe)throw new b(`param "queries" must be 1..${xe} entries`);return e.map((n,o)=>{if(typeof n!="object"||n===null)throw new b(`queries[${o}] must be an object`);let r=n;if(typeof r.qid!="string"||r.qid.length===0)throw new b(`queries[${o}].qid must be a non-empty string`);if(typeof r.text!="string"||r.text.length===0)throw new b(`queries[${o}].text must be a non-empty string`);return{qid:r.qid,text:r.text,topK:U(r.top_k,se,qe)}})}function De(t){let e=[];for(let{cid:n,content:o}of t.byLabel("usecase"))t.superseded.has(n)||e.push({cid:n,title:String(o.title??""),summary:String(o.summary??""),description:String(o.description??"")});return e}function Me(t,e,n){let o=De(t);return e.map(r=>{let c=[];for(let s of o){let d=n(r,s);d<=0||c.push({cid:s.cid,logical_id:t.displayNameOf(s.cid),title:s.title,score:Math.round(d*1e3)/1e3,trust:t.trust.get(s.cid)??null,superseded:!1})}return c.sort((s,d)=>d.score-s.score||s.cid.localeCompare(d.cid)),{qid:r.qid,truncated:c.length>r.topK,matches:c.slice(0,r.topK)}})}function Ce(t,e){let n=$e(e);return{results:Me(t,n,(o,r)=>Q(o.text,r.title,r.summary,r.description)),scorer:"lexical_fallback"}}function it(t,e){let n=M(e,"text"),o=D(e,"label")??"usecase",r=U(e.k,se,Re),c=[];for(let{cid:s,content:d}of t.byLabel(o)){let m=String(d.title??""),f=String(d.summary??""),u=Q(n,m,f);u<=0||c.push({cid:s,title:m,summary:f,score:Math.round(u*1e3)/1e3,trust:t.trust.get(s)??null,freshness:t.stale(s)})}return c.sort((s,d)=>d.score-s.score||s.cid.localeCompare(d.cid)),c.slice(0,r)}function Te(t,e,n){let o=t.heads.get(n);if(typeof o!="string"){let c=[...t.heads.keys()].sort().join(", ");throw new b(`unknown source_id "${n}" \u2014 known: ${c||"(none)"}`)}if(t.mediaOf(o).format==="image")throw new b(`source "${n}" is an image \u2014 no line window (cite img#whole)`);let r=L(e,t,o);if(r==null)throw new b(`source "${n}" blob is missing from the store`);return{head:o,lines:r.toString("utf8").replace(/\n$/,"").split(`
4
+ `)}}function ct(t,e,n){return t.slice(e-1,n).map((o,r)=>`${String(e+r).padStart(4,"0")}| ${o}`).join(`
5
+ `)}function at(t,e,n){let o=M(e,"source_id"),r=D(e,"anchor"),c=e.line_range;if(r!=null&&c!=null)throw new b("give anchor OR line_range, not both");let{head:s,lines:d}=Te(t,n,o),m=d.length,f,u;if(r!=null){let g=/^L(\d+)-L(\d+)$/.exec(r);if(!g)throw new b(`anchor "${r}" is not L<a>-L<b>`);let h=Number(g[1]),_=Number(g[2]);if(h<1||_<h||_>m)throw new b(`anchor "${r}" does not resolve (source has ${m} lines)`);f=Math.max(1,h-be),u=Math.min(m,_+be)}else if(c!=null){if(!Array.isArray(c)||c.length!==2||!c.every(_=>Number.isInteger(_)))throw new b('param "line_range" must be [from_line, to_line]');let[g,h]=c;if(g<1||h<g)throw new b('param "line_range" must be 1-based with from \u2264 to');if(g>m)throw new b(`line_range starts past the end (source has ${m} lines)`);f=g,u=Math.min(h,m)}else f=1,u=m;return u=Math.min(u,f+We-1),{window:ct(d,f,u),from_line:f,to_line:u,source_cid:s,total_lines:m}}function lt(t,e,n){let o=M(e,"pattern"),r=D(e,"source_id"),c;try{c=new RegExp(o,"u")}catch(f){throw new b(`invalid pattern: ${f instanceof Error?f.message:String(f)}`)}let s=r!=null?[r]:[...t.heads.keys()].sort(),d=[],m=!1;e:for(let f of s){if(r==null){let g=t.heads.get(f);if(typeof g!="string"||t.mediaOf(g).format==="image")continue}let{lines:u}=Te(t,n,f);for(let g=0;g<u.length;g++)if(c.test(u[g])){if(d.length>=Xe){m=!0;break e}d.push({source_id:f,line:g+1,text:u[g]})}}return{matches:d,truncated:m}}function ut(t,e,n,o){try{switch(e){case"get_node":{let r=ie(t,M(n,"cid"));return r==null?{ok:!0,result:null}:{ok:!0,result:Ae([r],n)[0]}}case"get_edges":return{ok:!0,result:et(t,n)};case"find_by_provenance":return{ok:!0,result:tt(t,n)};case"match_by_type":return{ok:!0,result:nt(t,n)};case"stale_nodes":return{ok:!0,result:rt(t,n)};case"search_similar":return{ok:!0,result:it(t,n)};case"search_similar_batch":return{ok:!0,result:Ce(t,n)};case"history":{if(o==null)throw new b("history unavailable (no context store)");return{ok:!0,result:ot(t,n,o)}}case"source_list":{if(o==null)throw new b("source roster unavailable (no context store)");return{ok:!0,result:st(t,n,o)}}case"source_read":case"source_grep":{if(o==null)throw new b("source text unavailable (no context store)");return{ok:!0,result:(e==="source_read"?at:lt)(t,n,o)}}default:return{ok:!1,error:`unknown method: ${e} \u2014 available: ${Ke.join(", ")}`}}}catch(r){return r instanceof b?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}}var H="assurance.sim";function dt(t){return[t.title,t.summary,t.description].filter(Boolean).join(`
6
+ `)}async function ft(t,e,n){let o=M(e,"text"),r=D(e,"label")??"usecase",c=U(e.k,se,Re),s=[];for(let{cid:m,content:f}of t.byLabel(r)){if(t.superseded.has(m))continue;let u=String(f.title??""),g=String(f.summary??""),h=String(f.description??"");s.push({cid:m,title:u,summary:g,description:h,lex:Q(o,u,g,h)})}let d=m=>{let f=[];for(let u of s){let g=m(u);g.score<=0||f.push({cid:u.cid,title:u.title,summary:u.summary,score:Math.round(g.score*1e3)/1e3,trust:t.trust.get(u.cid)??null,freshness:t.stale(u.cid),...g.dense!==void 0?{dense_score:Math.round(g.dense*1e3)/1e3,lexical_score:Math.round(u.lex*1e3)/1e3}:{}})}return f.sort((u,g)=>g.score-u.score||u.cid.localeCompare(g.cid)),f.slice(0,c)};try{let m=n.readVector??Z,f=n.writeVector??ee,u=n.alpha??re,{alias:g}=await n.resolveAlias(H),h=new Map,_=[],E=[];for(let p of s){let k=m(n.contextDir,g,p.cid);k?h.set(p.cid,k):(_.push(p.cid),E.push(dt(p)))}let{vectors:l}=await n.embed(H,[o,...E]),y=Float32Array.from(l[0]);for(let p=0;p<_.length;p++){let k=Float32Array.from(l[p+1]);h.set(_[p],k),f(n.contextDir,g,_[p],k)}return d(p=>{let k=h.get(p.cid),$=k?te(y,k):0;return{score:ne($,p.lex,u),dense:$}})}catch{return n.onDegraded?.(),d(m=>({score:m.lex}))}}async function gt(t,e,n){let o=$e(e),r=De(t);try{let c=n.readVector??Z,s=n.writeVector??ee,d=n.alpha??re,{alias:m}=await n.resolveAlias(H),f=new Map,u=[],g=[];for(let l of r){let y=c(n.contextDir,m,l.cid);y?f.set(l.cid,y):(u.push(l.cid),g.push([l.title,l.summary,l.description].filter(Boolean).join(`
7
+ `)))}let{vectors:h}=await n.embed(H,[...o.map(l=>l.text),...g]),_=o.map((l,y)=>Float32Array.from(h[y]));for(let l=0;l<u.length;l++){let y=Float32Array.from(h[o.length+l]);f.set(u[l],y),s(n.contextDir,m,u[l],y)}let E=new Map(o.map((l,y)=>[l.qid,y]));return{results:Me(t,o,(l,y)=>{let p=f.get(y.cid),k=p?te(_[E.get(l.qid)],p):0;return ne(k,Q(l.text,y.title,y.summary,y.description),d)}),scorer:"embedding"}}catch{return n.onDegraded?.(),Ce(t,e)}}async function Ie(t,e,n,o){if((e==="search_similar"||e==="search_similar_batch")&&o)try{return{ok:!0,result:e==="search_similar"?await ft(t,n,o):await gt(t,n,o)}}catch(r){return r instanceof b?{ok:!1,error:`${e}: ${r.message}`}:{ok:!1,error:`${e}: graph read failed: ${r instanceof Error?r.message:String(r)}`}}return ut(t,e,n,o?.contextDir)}var pt=2,Ne=10,ht=2;function Ge(t,e,n){return t.map(o=>{let r=e.find(c=>c.id===o.id);if(r&&r.selected_index!=null&&r.selected_index>=0&&r.selected_index<o.options.length){let s=(o.allow_free_text||o.options[r.selected_index]?.input===!0)&&r.free_text!=null?r.free_text:null;return{id:o.id,resolution:"answered",selected_index:r.selected_index,free_text:s}}return r&&r.free_text!=null&&o.allow_free_text?{id:o.id,resolution:"answered",selected_index:-1,free_text:r.free_text}:n.explicitAcceptDefaults?{id:o.id,resolution:"assumed-default",selected_index:o.recommended_index,flagged:!0}:{id:o.id,resolution:"deferred",selected_index:null}})}async function Nt(t,e,n,o,r=()=>{},c){let s=(i,a)=>r(i,a,t.session_id),d=(process.env.ASSURANCE_LOG_LEVEL??"info").toLowerCase()==="debug",m={contextDir:e.contextDir,resolveAlias:i=>he(i,{env:process.env,auth:e.auth}),embed:(i,a)=>_e(i,a,{env:process.env,auth:e.auth}),...e.onEmbedDegraded?{onDegraded:e.onEmbedDegraded}:{}},f=0,u=e.agent(t,{auth:e.auth,onWarn:i=>{s("warn",i),e.out(i)},onStderr:i=>s("agent_stderr",i)}),g=null,h=null,_,E,l=u.send.bind(u),y=new Set(["user_response","user_message","session_complete"]),p=null,k=!1,$=[],v=i=>{if(i.type==="session_complete"&&(k=!0),p!==null&&y.has(i.type)){$.push(i),s("belt_withheld",{type:i.type,unacked_seq:p});return}l(i)};if(t.checkpoints&&!e.checkpoint)throw u.kill(),new Error("run_config.checkpoints is on but DriverDeps.checkpoint sink is absent (programming error)");let C=!1,W=e.pendingDeferral??null,O=!1,je=e.chat?.attachSender?.(i=>v(i));e.initialMessage&&(v({type:"user_message",message_id:`msg-${t.session_id}-${mt(3).toString("hex")}`,text:e.initialMessage}),s("user_message_sent",{chars:e.initialMessage.length,...d?{text:e.initialMessage}:{}}),e.emit?.({type:"message_sent",sid:t.session_id,chars:e.initialMessage.length}),e.chat?.note("\u21B3 delivered to the agent"));let X,F=0,q=0,B=0,Y,R=ye(),N=e.progress??e.out;try{for await(let i of u.events){try{e.chat?.onAgentEvent(i)}catch(a){s("chat_mirror_error",{event_type:i.type,message:a instanceof Error?a.message:String(a)})}if(i.type==="reasoning_delta"?(f+=i.text.length,process.env.KANE_TRACE_REASONING&&s("reasoning_delta",i.text)):i.type==="state_checkpoint"&&!process.env.KANE_TRACE_REASONING?s("state_checkpoint",{seq:i.seq,items:i.delta_items.length,bytes:JSON.stringify(i.delta_items).length}):s(i.type,i),i.type==="reasoning_done"&&s("reasoning_chars",f),i.type==="progress")N(`\u2026 ${i.stage}${i.n?` #${i.n}`:""}`),e.emit?.({type:"agent_activity",kind:"progress",label:`${i.stage}${i.n?` #${i.n}`:""}`});else if(i.type==="reasoning_delta"||i.type==="reasoning_done"||i.type==="tool_activity"||i.type==="decision_activity"){e.onStreamEvent?.(i);let a=R;if(R=we(R,i),R===a)continue;i.type==="reasoning_delta"?R.liveThinking===i.text&&N("\u2237 thinking\u2026"):i.type==="reasoning_done"?i.present&&(N(`thought for ${(i.took_ms/1e3).toFixed(1)}s`),e.emit?.({type:"agent_activity",kind:"thinking_done",label:`thought for ${(i.took_ms/1e3).toFixed(1)}s`})):i.type==="tool_activity"?i.status!=="done"&&(N(R.activity[R.activity.length-1].label),e.emit?.({type:"agent_activity",kind:"tool",label:R.activity[R.activity.length-1].label})):(N(`\xB7 ${R.activity[R.activity.length-1].label}`),e.emit?.({type:"agent_activity",kind:"decision",label:R.activity[R.activity.length-1].label}))}else if(i.type==="usage"){Y=i.total_credits;let a=S=>Math.round(S*100)/100;e.emit?.({type:"usage",credits:a(i.credits),total_credits:a(i.total_credits)})}else if(i.type==="graph_query"){let a=await Ie(e.graphSlot?.current??o,i.method,i.params??{},m),S=a.ok?{type:"graph_result",id:i.id,ok:!0,result:a.result}:{type:"graph_result",id:i.id,ok:!1,error:a.error};s("graph_result",d?{id:i.id,method:i.method,ok:a.ok,result:a.ok?a.result:a.error}:{id:i.id,method:i.method,ok:a.ok}),v(S)}else if(i.type==="ingest_request")if(e.ingest){let a;try{a=await e.ingest({id:i.id,ref:i.ref,purpose:i.purpose??null})}catch(T){s("ingest_executor_threw",{id:i.id,error:T instanceof Error?T.message:String(T)}),a={ok:!1,error:{code:"INGEST_FAILED",message:"the landing failed \u2014 see the trace for detail"}}}let S=a.ok?{type:"ingest_result",id:i.id,ok:!0,result:a.result}:{type:"ingest_result",id:i.id,ok:!1,error:a.error};s("ingest_result",a.ok?{id:i.id,ok:!0,source_id:a.result.source_id}:{id:i.id,ok:!1,code:a.error.code}),v(S)}else{let a={type:"ingest_result",id:i.id,ok:!1,error:{code:"INGEST_UNAVAILABLE",message:"this session has no ingest executor"}};s("ingest_result",{id:i.id,ok:!1,code:a.error.code}),v(a)}else if(i.type==="state_checkpoint"){if(!e.checkpoint)throw new Error("state_checkpoint arrived with no checkpoint sink (programming error)");p=i.seq;try{for(e.checkpoint.persist(i),p=null,l({type:"checkpoint_ack",seq:i.seq}),s("checkpoint_acked",{seq:i.seq,at:i.at});$.length>0&&p===null;)v($.shift())}catch(a){let S=a instanceof Error?a.message:String(a);C||(C=!0,e.out("warning: couldn't save the session checkpoint \u2014 pausing so no work is lost")),s("checkpoint_persist_failed",{seq:i.seq,message:S}),l({type:"pause"})}}else if(i.type==="session_paused")O=!0,E=i;else if(i.type==="done")O=!0;else if(i.type==="ask_user"){i.text&&(e.chat?e.chat.ledger({kind:"agent",text:i.text}):e.out(i.text),e.emit?.({type:"agent_message",text:i.text}));let a=t.mode;if(W){let w=W;W=null,e.emit?.({type:"ask_deferred",source_id:w.ingested.source_id,cid:w.ingested.cid,questions:i.questions.length}),s("ask_deferred",{source_id:w.ingested.source_id,questions:i.questions.length}),v({type:"user_response",answers:[],deferral:{deferred:!0,ingested:w.ingested}});continue}if(a!=="interactive"){let w=i.questions.filter(x=>x.risk==="high");if(a==="ci"&&w.length>0){X=w,u.kill();break}if(a==="agent"&&w.length>0){s("pause_requested",{high:w.map(x=>x.id)}),v({type:"pause"});continue}let A=Ge(i.questions,[],{explicitAcceptDefaults:!0});F+=A.length;for(let x of A)s("assumed_default",{id:x.id,resolution:x.resolution}),e.emit?.({type:"assumed_default",id:x.id,selected_index:x.selected_index,risk:i.questions.find(V=>V.id===x.id)?.risk});let j={type:"user_response",answers:A.map(x=>({id:x.id,selected_index:x.resolution==="deferred"?null:x.selected_index,free_text:null}))};v(j);continue}let S=await e.ask(i.questions);if(!Array.isArray(S)){v({type:"user_response",answers:[],deferral:S});continue}let T=S,Pe=Ge(i.questions,T,{explicitAcceptDefaults:!1}),He={type:"user_response",answers:i.questions.map(w=>{let A=T.find(x=>x.id===w.id);if(A?.free_text!=null){let x=A.selected_index!=null&&A.selected_index>=0&&A.selected_index<w.options.length?A.selected_index:null;if(x!=null){let G=w.allow_free_text||w.options[x]?.input===!0;return G&&A.free_text!=null&&n.set(w.id,(n.get(w.id)??0)+1),{id:w.id,selected_index:x,free_text:G?A.free_text:null}}let V=n.get(w.id)??0;if(!w.allow_free_text||V>=pt){let G=w.options[w.recommended_index]?.label??"recommended option";if(F+=1,e.emit?.({type:"assumed_default",id:w.id,selected_index:w.recommended_index,risk:w.risk}),e.chat?.noteCoercion)e.chat.noteCoercion(w,G);else{let J=w.text.replace(/\?+\s*$/,""),Ue=J.length<=36?J:`${J.slice(0,33)}\u2026`;e.out(`note: couldn't use a typed answer for "${Ue}" \u2014 kept the recommended option (${G})`)}return{id:w.id,selected_index:w.recommended_index,free_text:null}}return n.set(w.id,V+1),{id:w.id,selected_index:null,free_text:A.free_text}}let j=Pe.find(x=>x.id===w.id);return j.resolution==="deferred"?{id:w.id,selected_index:null,free_text:null}:{id:w.id,selected_index:j.selected_index,free_text:null}})};v(He)}else if(i.type==="chat_ops"&&!e.chat){let a=i.chat_ops??i,S=Array.isArray(a.ops)?a.ops.length:0;if(S===0)a.text&&(e.out(a.text),e.emit?.({type:"agent_message",text:a.text})),v({type:"session_complete"}),s("headless_zero_op_chat_turn_complete",{chars:a.text?.length??0});else if(B<ht)B+=1,v({type:"user_message",message_id:`nochat-${t.session_id}-${B}`,text:"[auto-repair] chat ops are unavailable in this mode \u2014 commit through finalize_design, or finish if nothing remains."}),s("headless_chat_ops_nudge",{n:B,ops:S});else{h="the agent kept trying to hold a conversation in a non-interactive run",e.out("error: the agent kept trying to hold a conversation in a non-interactive run \u2014 session closed; re-run interactively, or retry"),s("headless_chat_ops_terminal",{ops:S}),u.kill();break}}else if(i.type===(c.terminalEventType??"proposal")){let a=await c.onProposalEvent(i[i.type]);if(g=a.proposal,a.error&&(h=a.error),a.receipt)e.emit?.(a.receipt.event),t.mode!=="interactive"?(q+=1,a.sessionComplete||q>=Ne?(a.sessionComplete||(e.out(`warning: ${Ne} commits without completion \u2014 closing the session (runaway guard)`),s("receipt_runaway_cap",{commits:q})),v({type:"session_complete"}),s("session_complete_sent",{commit_n:a.receipt.event.commit_n,runaway:!a.sessionComplete})):(v({type:"user_message",message_id:`receipt-${t.session_id}-${String(a.receipt.event.commit_n??0)}`,text:a.receipt.text}),s("receipt_sent",{commit_n:a.receipt.event.commit_n,chars:a.receipt.text.length}))):e.chat?.holdReceipt&&(e.chat.holdReceipt(a.receipt.text),s("receipt_held",{commit_n:a.receipt.event.commit_n}));else if(a.error&&t.mode!=="interactive"){e.out("error: saving the agent's work failed and can't be retried in this mode \u2014 session closed; re-run to retry"),e.emit?.({type:"warning",code:"SAVE_FAILED",message:"saving the agent's work failed and can't be retried in this mode \u2014 session closed; re-run to retry"}),s("headless_commit_error_terminal",{error:a.error}),u.kill();break}}else if(i.type==="error"){O=!0;let a=i;if(a.code==="PAIR_MISMATCH")throw new pe(a.expected??"",a.actual??"");h=i.message,typeof a.code=="string"&&(_=a.code);let S=i.failed_proposal;S&&s("failed_proposal",S)}}}finally{u.kill(),je?.()}let Ve=t.chat===!0&&t.mode==="interactive",ce=!!e.checkpoint&&!O&&!k&&!E&&!X&&h===null&&g===null&&!Ve;return{proposal:g,error:h,..._!==void 0?{errorCode:_}:{},paused:E,highRisk:X,...F>0?{assumedDefaults:F}:{},...Y!==void 0?{creditsTotal:Y}:{},...ce?{crashed:ce}:{}}}function Le(t,e){let n=e.trim(),o=null;for(let r of t??[])if(r.ref===n){if(!r.consumed)return{kind:"unconsumed"};o={kind:"consumed",identity:r.consumed}}return o??{kind:"unauthorized"}}function Lt(t,e,n){let o=e.trim(),r=[...t??[]];return r.find(s=>s.ref===o&&!s.consumed)||r.push({ref:o,entered_at:n.toISOString()}),r}function Oe(t,e,n){let o=e.trim(),r=[...t??[]],c=r.findIndex(s=>s.ref===o&&!s.consumed);return c<0||(r[c]={...r[c],consumed:n}),r}import{basename as K}from"path";function Fe(t,e,n,o,r){let c=e.mediaOf(o),s=0;if(c.format!=="image"){let d=L(t,e,o);d&&(s=d.toString("utf8").replace(/\n$/,"").split(`
8
+ `).length)}return{source_id:n,cid:o,total_lines:s,media_type:c.format,status:r}}function Ht(t){return async e=>{let n=Le(t.handle.state.ingest_registry,e.ref);if(n.kind==="unauthorized")return{ok:!1,error:{code:"INGEST_UNAUTHORIZED_REF",message:"that ref was not provided by the owner this session \u2014 only owner-provided refs may land"}};if(n.kind==="consumed"){let _=t.graphSlot?.current??I(t.contextDir);return{ok:!0,result:Fe(t.contextDir,_,n.identity.source_id,n.identity.cid,"unchanged")}}let o=[],r={out:_=>o.push(_),err:_=>o.push(_),confirm:async()=>!1,isTTY:!1},c;try{c=await ke([e.ref],{},r,t.cwd,t.remoteDeps)}catch(_){return{ok:!1,error:{code:"INGEST_FAILED",message:_ instanceof Error?_.message:String(_)}}}if(c.code!==0||c.results.length===0)return{ok:!1,error:{code:"INGEST_FAILED",message:o.find(E=>E.startsWith("error:"))??o.at(-1)??"the landing failed"}};let s=c.results[0],d={source_id:s.source_id,cid:s.source_cid},m=Oe(t.handle.state.ingest_registry,e.ref,d),f=s.status==="versioned"&&t.schedule,u=t.schedule?[...t.handle.state.ingest_schedule??[],f?{source_id:s.source_id,cid:s.source_cid,status:"skipped",note:"new version of a known source \u2014 its changes await your review (reconcile), never a blind re-extraction"}:{source_id:s.source_id,cid:s.source_cid,status:"pending"}]:void 0;t.handle.save({ingest_registry:m,...u!==void 0?{ingest_schedule:u}:{}}),t.graphSlot&&(t.graphSlot.current=I(t.contextDir));let g=t.graphSlot?.current??I(t.contextDir),h=Fe(t.contextDir,g,s.source_id,s.source_cid,s.status==="unchanged"?"unchanged":"landed");return t.note(f?`landed ${s.source_id} (${K(e.ref)}) \u2014 ${h.total_lines} lines; a NEW VERSION of a known source \u2014 its changes await your review (the check-in offers it), not a blind re-extraction`:t.schedule?`landed ${s.source_id} (${K(e.ref)}) \u2014 ${h.total_lines} lines; scheduled for extraction in this run`:t.scheduleRefused?`landed ${s.source_id} (${K(e.ref)}) \u2014 ${h.total_lines} lines; ${t.scheduleRefused}`:`landed ${s.source_id} (${K(e.ref)}) \u2014 ${h.total_lines} lines; it guides this design only (not extracted \u2014 its own extraction pass adds its use-cases)`),{ok:!0,result:h}}}var _t=3,yt={edit:"edit",reject:"mistake",dedup_dropped:"mistake",approve:"usage",enhance:"directed-edit",add:"directed-edit",default_accepted:"usage",default_overridden:"edit",gap_resolution:"usage",dedup_kept:"usage"};function Be(t){let{contextDir:e,graph:n,watermark:o,by:r}=t,{signals:c}=P(e,o),s=c.filter(l=>l.event_id===void 0||n.appliedEvents.has(l.event_id)),d=new Map;for(let l of s){let y=l.event_id??`${l.ts}|${l.id}|${l.verdict}|${l.polarity}`;d.has(`${y}|${l.polarity}|${l.verdict}`)||d.set(`${y}|${l.polarity}|${l.verdict}`,l)}let m=[...d.values()].sort((l,y)=>(l.event_id??l.ts)<(y.event_id??y.ts)?-1:1),f=new Map;for(let l of m){let y=`${l.verdict}|${l.tag??""}`,p=f.get(y)??{verdict:l.verdict,tag:l.tag,events:new Set};p.events.add(l.event_id??l.ts),f.set(y,p)}let u=[],g=[],h=new Set,_=0;for(let[,l]of[...f.entries()].sort(([y],[p])=>y<p?-1:1)){if(l.events.size<_t)continue;let p={derived:!0,statement:`${l.verdict}${l.tag?`/${l.tag}`:""} recurs (${l.events.size} distinct events) \u2014 bias future proposals ${l.verdict==="approve"?"toward":"away from"} this pattern`,learned_from_kind:yt[l.verdict]??"usage",learned_from:[...l.events].sort()},k=le("stylenote",p);if(k.length>0)return{record:null,errors:k.map(C=>({code:C.code,detail:C.detail})),minted:0};let $=ue("stylenote",p);if(n.hasNode($))continue;u.push({cid:$,label:ae.STYLENOTE,content:p});let v=me("stylenote",C=>h.has(C),n.names.keys());v!==null&&(h.add(v),g.push({cid:$,slug:v,by:r})),_+=1}return u.length===0?{record:null,errors:null,minted:0}:{record:fe(e,{ts:new Date().toISOString(),proposal_id:null,nodes:u,edges:[],review:[],supersessions:[],source_head_moves:{},...g.length>0?{names:g}:{}},{expectPrev:n.latestHash}).record,errors:null,minted:_}}var wt={kind:"system",id:"distiller"};function tn(t,e=n=>process.stderr.write(n+`
9
+ `)){try{let n=I(t),{watermark:o}=P(t),r=Be({contextDir:t,graph:n,watermark:o,by:wt});if(r.errors){let c=r.errors.map(s=>`${s.code}: ${s.detail}`).join("; ");return e(`warning: style-note distill skipped \u2014 ${c}`),{minted:0,error:c}}if(r.minted>0)try{ge(t)}catch{}return{minted:r.minted,error:null}}catch(n){let o=n instanceof Error?n.message:String(n);return e(`warning: style-note distill skipped \u2014 ${o}`),{minted:0,error:o}}}export{bt as a,Ie as b,pt as c,Ge as d,Nt as e,Lt as f,Ht as g,tn as h};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as B}from"./chunk-S3DAAAE5.js";import{a as g}from"./chunk-APAIWBIH.js";import{y as s}from"./chunk-C4G7RVJ6.js";import{a as w}from"./chunk-HCBYKLMW.js";import{a as x,b as t,c as h,i as P,j as S}from"./chunk-C44QQJR4.js";import{a as C}from"./chunk-6YGTRKDT.js";import{e as T}from"./chunk-UR6MHSHU.js";var o=T(C(),1);var e=T(w(),1);function D({defaultName:i,onSubmit:c}){let[d,p]=(0,o.useState)("confirm"),[f,a]=(0,o.useState)(""),[m,u]=(0,o.useState)(null),l=(0,o.useMemo)(()=>f.trim()||i,[f,i]);return P((n,r)=>{if(d==="confirm"){if(n==="y"||n==="Y"){a(i),p("name");return}if(n==="n"||n==="N"||r.escape||r.ctrl&&n==="c"){c(null);return}if(r.return){c(i);return}return}if(r.return){if(!B(l)){u(`name "${l}" is invalid; allowed: letters, digits, underscore, hyphen`);return}c(l);return}if(r.escape||r.ctrl&&n==="c"){c(null);return}if(r.backspace||r.delete){a(v=>v.slice(0,-1)),u(null);return}n&&!r.ctrl&&!r.meta&&(a(v=>v+n),u(null))}),d==="confirm"?(0,e.jsx)(g,{title:"Save session?",titleColor:"#ff9500",rows:[{label:"name",value:(0,e.jsx)(t,{color:s.orange,children:i})}],footer:(0,e.jsxs)(x,{flexDirection:"column",children:[(0,e.jsx)(t,{color:s.dim,children:"enter \u2014 save with this name"}),(0,e.jsx)(t,{color:s.dim,children:"Y \u2014 edit name"}),(0,e.jsx)(t,{color:s.dim,children:"N/esc \u2014 discard session"})]})}):(0,e.jsx)(g,{title:"Save session?",titleColor:"#ff9500",rows:[{label:"name",value:(0,e.jsxs)(x,{children:[(0,e.jsx)(t,{color:s.orange,children:f}),(0,e.jsx)(t,{inverse:!0,children:" "})]})}],footer:(0,e.jsxs)(x,{flexDirection:"column",children:[m&&(0,e.jsx)(t,{color:s.red,children:m}),(0,e.jsx)(t,{color:s.dim,children:"enter \u2014 save \xB7 esc \u2014 discard"})]})})}function V(){return new Date().toISOString().slice(0,19).replace(/:/g,"-")}async function Y(i){return new Promise(c=>{function d(){let{exit:a}=S(),[m,u]=(0,o.useState)(!1);return(0,o.useEffect)(()=>{if(m){let l=setTimeout(()=>a(),50);return()=>clearTimeout(l)}},[m,a]),(0,e.jsx)(D,{defaultName:i,onSubmit:l=>{c(l),u(!0)}})}let{waitUntilExit:p,unmount:f}=h((0,e.jsx)(d,{}),{stdout:process.stderr,exitOnCtrlC:!1});p().then(()=>{try{f()}catch{}})})}export{D as a,V as b,Y as c};
2
+ import{b as B}from"./chunk-S3DAAAE5.js";import{a as g}from"./chunk-KQZA2QSC.js";import{y as s}from"./chunk-ZUGCHQFC.js";import{a as w}from"./chunk-HCBYKLMW.js";import{a as x,b as t,c as h,i as P,j as S}from"./chunk-C44QQJR4.js";import{a as C}from"./chunk-6YGTRKDT.js";import{e as T}from"./chunk-UR6MHSHU.js";var o=T(C(),1);var e=T(w(),1);function D({defaultName:i,onSubmit:c}){let[d,p]=(0,o.useState)("confirm"),[f,a]=(0,o.useState)(""),[m,u]=(0,o.useState)(null),l=(0,o.useMemo)(()=>f.trim()||i,[f,i]);return P((n,r)=>{if(d==="confirm"){if(n==="y"||n==="Y"){a(i),p("name");return}if(n==="n"||n==="N"||r.escape||r.ctrl&&n==="c"){c(null);return}if(r.return){c(i);return}return}if(r.return){if(!B(l)){u(`name "${l}" is invalid; allowed: letters, digits, underscore, hyphen`);return}c(l);return}if(r.escape||r.ctrl&&n==="c"){c(null);return}if(r.backspace||r.delete){a(v=>v.slice(0,-1)),u(null);return}n&&!r.ctrl&&!r.meta&&(a(v=>v+n),u(null))}),d==="confirm"?(0,e.jsx)(g,{title:"Save session?",titleColor:"#ff9500",rows:[{label:"name",value:(0,e.jsx)(t,{color:s.orange,children:i})}],footer:(0,e.jsxs)(x,{flexDirection:"column",children:[(0,e.jsx)(t,{color:s.dim,children:"enter \u2014 save with this name"}),(0,e.jsx)(t,{color:s.dim,children:"Y \u2014 edit name"}),(0,e.jsx)(t,{color:s.dim,children:"N/esc \u2014 discard session"})]})}):(0,e.jsx)(g,{title:"Save session?",titleColor:"#ff9500",rows:[{label:"name",value:(0,e.jsxs)(x,{children:[(0,e.jsx)(t,{color:s.orange,children:f}),(0,e.jsx)(t,{inverse:!0,children:" "})]})}],footer:(0,e.jsxs)(x,{flexDirection:"column",children:[m&&(0,e.jsx)(t,{color:s.red,children:m}),(0,e.jsx)(t,{color:s.dim,children:"enter \u2014 save \xB7 esc \u2014 discard"})]})})}function V(){return new Date().toISOString().slice(0,19).replace(/:/g,"-")}async function Y(i){return new Promise(c=>{function d(){let{exit:a}=S(),[m,u]=(0,o.useState)(!1);return(0,o.useEffect)(()=>{if(m){let l=setTimeout(()=>a(),50);return()=>clearTimeout(l)}},[m,a]),(0,e.jsx)(D,{defaultName:i,onSubmit:l=>{c(l),u(!0)}})}let{waitUntilExit:p,unmount:f}=h((0,e.jsx)(d,{}),{stdout:process.stderr,exitOnCtrlC:!1});p().then(()=>{try{f()}catch{}})})}export{D as a,V as b,Y as c};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{y as m}from"./chunk-C4G7RVJ6.js";import{a as x}from"./chunk-HCBYKLMW.js";import{a as u,b as a,j as g}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as f}from"./chunk-UR6MHSHU.js";var T=f(b(),1);function k(i,n){if(!n)return i;let l=i.trim()||n;return`\x1B]8;;${n}\x07${l}\x1B]8;;\x07`}var r=f(x(),1);function $({shareableLink:i,testCaseLink:n,codeExportDir:l,recordedTestPath:s,outputDir:o,autoExit:p=!0}){let{exit:c}=g();(0,T.useEffect)(()=>{if(!p)return;let t=setTimeout(()=>c(),100);return()=>clearTimeout(t)},[c,p]);let e=[];return s&&e.push({label:"Test",url:s,linkUrl:`file://${s}`}),o&&e.push({label:"Output",url:o,linkUrl:`file://${o}`}),i&&e.push({label:"ShareLink",url:i}),n&&e.push({label:"TestCase",url:n}),l&&!o&&e.push({label:"CodeExport",url:l,linkUrl:`file://${l}`}),e.length===0?(0,r.jsx)(r.Fragment,{}):(0,r.jsx)(u,{flexDirection:"column",marginTop:1,marginLeft:1,children:e.map(t=>(0,r.jsxs)(u,{flexDirection:"column",marginBottom:1,children:[(0,r.jsxs)(a,{color:m.orange,children:[t.label,":"]}),(0,r.jsx)(a,{color:m.dim,children:k(t.url,t.linkUrl??t.url)})]},t.label))})}export{$ as a};
2
+ import{y as m}from"./chunk-ZUGCHQFC.js";import{a as x}from"./chunk-HCBYKLMW.js";import{a as u,b as a,j as g}from"./chunk-C44QQJR4.js";import{a as b}from"./chunk-6YGTRKDT.js";import{e as f}from"./chunk-UR6MHSHU.js";var T=f(b(),1);function k(i,n){if(!n)return i;let l=i.trim()||n;return`\x1B]8;;${n}\x07${l}\x1B]8;;\x07`}var r=f(x(),1);function $({shareableLink:i,testCaseLink:n,codeExportDir:l,recordedTestPath:s,outputDir:o,autoExit:p=!0}){let{exit:c}=g();(0,T.useEffect)(()=>{if(!p)return;let t=setTimeout(()=>c(),100);return()=>clearTimeout(t)},[c,p]);let e=[];return s&&e.push({label:"Test",url:s,linkUrl:`file://${s}`}),o&&e.push({label:"Output",url:o,linkUrl:`file://${o}`}),i&&e.push({label:"ShareLink",url:i}),n&&e.push({label:"TestCase",url:n}),l&&!o&&e.push({label:"CodeExport",url:l,linkUrl:`file://${l}`}),e.length===0?(0,r.jsx)(r.Fragment,{}):(0,r.jsx)(u,{flexDirection:"column",marginTop:1,marginLeft:1,children:e.map(t=>(0,r.jsxs)(u,{flexDirection:"column",marginBottom:1,children:[(0,r.jsxs)(a,{color:m.orange,children:[t.label,":"]}),(0,r.jsx)(a,{color:m.dim,children:k(t.url,t.linkUrl??t.url)})]},t.label))})}export{$ as a};
@@ -1,5 +1,5 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as m}from"./chunk-2WVKOZ6W.js";import{a as g}from"./chunk-JRMDGLLT.js";import{b as f,c as j}from"./chunk-VE3SUJMA.js";var _="KaneAI Generated",E="Untitled";async function p(e){let r=e.config.load(),d=new m(g(e.env).tmsBaseUrl,e.tmsCreds.username,e.tmsCreds.access_key),n=e.projectName??_,o=e.folderName??E,t=r.project_id??null,s=r.project_name??null;if(!t){let a=(await d.listProjects()).find(l=>l.name===n);if(a)t=a.project_id,s=a.name,e.log("info","ENSURE_PROJECT_FOUND","Found default project",{project_id:t,name:s});else{let l=await d.createProject(n);t=l.id,s=l.name,e.log("info","ENSURE_PROJECT_CREATED","Created default project",{project_id:t,name:s})}f(e.creds,e.config,e.profile,e.env,{projectId:t,projectName:s})}let c=r.folder_id??null,i=r.folder_name??null,u=!r.project_id;if(!c||u){let a=(await d.listFolders(t)).find(l=>l.name===o);if(a)c=a.id,i=a.name,e.log("info","ENSURE_FOLDER_FOUND","Found default folder",{folder_id:c,name:i});else{let l=await d.createFolder(t,o);c=l.id,i=l.name,e.log("info","ENSURE_FOLDER_CREATED","Created default folder",{folder_id:c,name:i})}f(e.creds,e.config,e.profile,e.env,{folderId:c,folderName:i})}return{projectId:t,projectName:s??n,folderId:c,folderName:i??o}}function A(e,r,d){let n=e.loadProfileConfig(r,d)??{};return{projectId:n.project_id??null,folderId:n.folder_id??null}}function N(e,r){return e.projectId===null||e.folderId===null||r===null?"needs-picker":r.project==="ok"&&r.folder==="ok"?"ok":r.project==="error"&&r.folder==="error"?"ok-tms-degraded":"needs-picker"}var k=(e,r)=>`error: profile "${e}" (${r}) has no project/folder configured AND no TMS credentials were available to auto-configure one.
2
+ import{a as m}from"./chunk-2WVKOZ6W.js";import{a as g}from"./chunk-O75ZHGJG.js";import{b as f,c as j}from"./chunk-VE3SUJMA.js";var _="KaneAI Generated",E="Untitled";async function p(e){let r=e.config.load(),d=new m(g(e.env).tmsBaseUrl,e.tmsCreds.username,e.tmsCreds.access_key),n=e.projectName??_,o=e.folderName??E,t=r.project_id??null,s=r.project_name??null;if(!t){let a=(await d.listProjects()).find(l=>l.name===n);if(a)t=a.project_id,s=a.name,e.log("info","ENSURE_PROJECT_FOUND","Found default project",{project_id:t,name:s});else{let l=await d.createProject(n);t=l.id,s=l.name,e.log("info","ENSURE_PROJECT_CREATED","Created default project",{project_id:t,name:s})}f(e.creds,e.config,e.profile,e.env,{projectId:t,projectName:s})}let c=r.folder_id??null,i=r.folder_name??null,u=!r.project_id;if(!c||u){let a=(await d.listFolders(t)).find(l=>l.name===o);if(a)c=a.id,i=a.name,e.log("info","ENSURE_FOLDER_FOUND","Found default folder",{folder_id:c,name:i});else{let l=await d.createFolder(t,o);c=l.id,i=l.name,e.log("info","ENSURE_FOLDER_CREATED","Created default folder",{folder_id:c,name:i})}f(e.creds,e.config,e.profile,e.env,{folderId:c,folderName:i})}return{projectId:t,projectName:s??n,folderId:c,folderName:i??o}}function A(e,r,d){let n=e.loadProfileConfig(r,d)??{};return{projectId:n.project_id??null,folderId:n.folder_id??null}}function N(e,r){return e.projectId===null||e.folderId===null||r===null?"needs-picker":r.project==="ok"&&r.folder==="ok"?"ok":r.project==="error"&&r.folder==="error"?"ok-tms-degraded":"needs-picker"}var k=(e,r)=>`error: profile "${e}" (${r}) has no project/folder configured AND no TMS credentials were available to auto-configure one.
3
3
 
4
4
  discover IDs:
5
5
  kane-cli projects list --search "<keyword>" --limit 10
@@ -14,4 +14,4 @@ set them:
14
14
  kane-cli config folder <folder-id>
15
15
  `;function C(e,r){return k(e,r)}function D(e){return`info: auto-configured project "${e.projectName}" (${e.projectId}) and folder "${e.folderName}" (${e.folderId}). Change with: kane-cli config project <id> / kane-cli config folder <id>.`}function S(e){return`${JSON.stringify(T(e))}
16
16
  `}function T(e){return{type:"project_folder_auto_defaulted",project_id:e.projectId,project_name:e.projectName,folder_id:e.folderId,folder_name:e.folderName}}async function x(e){if(e.isLocal)return e.log("info","GATE_SKIP_LOCAL","Gate skipped (--local)",{}),{status:"skip",reason:"local"};j(e.creds,e.config,e.profile,e.env,e.log);let r=A(e.creds,e.profile,e.env),d=null;if(r.projectId!==null){let o=g(e.env);d=await new m(o.tmsBaseUrl,e.tmsCreds.username,e.tmsCreds.access_key).validateProjectFolder(r.projectId,r.folderId??""),e.log("info","GATE_VALIDATE","TMS project/folder validation",{project:d.project,folder:d.folder,folder_was_cached:r.folderId!==null})}else r.folderId!==null&&(f(e.creds,e.config,e.profile,e.env,{folderId:null,folderName:null}),e.log("warn","GATE_CLEARED_ORPHAN_FOLDER","Cleared orphan folder (no project cached)",{folder_id:r.folderId}),r.folderId=null);let n=N(r,d);if(n==="ok")return{status:"ok",projectId:r.projectId,folderId:r.folderId};if(n==="ok-tms-degraded")return e.log("warn","GATE_TMS_DEGRADED","TMS validation failed; using cached IDs",{project_id:r.projectId,folder_id:r.folderId}),{status:"ok",projectId:r.projectId,folderId:r.folderId};if(d){let o={};d.project==="missing"?(o.projectId=null,o.projectName=null,o.folderId=null,o.folderName=null):d.folder==="missing"&&(o.folderId=null,o.folderName=null),Object.keys(o).length>0&&(f(e.creds,e.config,e.profile,e.env,o),e.log("info","GATE_CLEARED_STALE","Cleared stale cached IDs before re-resolve",{project_cleared:d.project==="missing",folder_cleared:d.folder==="missing"||d.project==="missing"}))}try{let o=await p({creds:e.creds,config:e.config,profile:e.profile,env:e.env,tmsCreds:e.tmsCreds,log:e.log}),t={projectId:o.projectId,projectName:o.projectName,folderId:o.folderId,folderName:o.folderName};return e.log("info","GATE_AUTO_DEFAULTED","Auto-configured project/folder",{project_id:t.projectId,project_name:t.projectName,folder_id:t.folderId,folder_name:t.folderName}),e.onAnnounce?e.onAnnounce(t):process.stderr.write(`${D(t)}
17
- `),{status:"ok",projectId:t.projectId,folderId:t.folderId,autoDefaulted:t}}catch(o){let t=C(e.profile,e.env);if(e.log("error","GATE_FATAL","Auto-default failed",{profile:e.profile,env:e.env,cached_project_id:r.projectId,cached_folder_id:r.folderId,validation:d,error:o instanceof Error?o.message:String(o)}),e.onFatalExit)e.onFatalExit(t);else{process.stderr.write(t);let{shutdown:s}=await import("./exit-manager-HNFATGSM.js");s(2,"Project/folder gate failed")}return{status:"cancelled"}}}export{p as a,A as b,N as c,C as d,D as e,S as f,T as g,x as h};
17
+ `),{status:"ok",projectId:t.projectId,folderId:t.folderId,autoDefaulted:t}}catch(o){let t=C(e.profile,e.env);if(e.log("error","GATE_FATAL","Auto-default failed",{profile:e.profile,env:e.env,cached_project_id:r.projectId,cached_folder_id:r.folderId,validation:d,error:o instanceof Error?o.message:String(o)}),e.onFatalExit)e.onFatalExit(t);else{process.stderr.write(t);let{shutdown:s}=await import("./exit-manager-XZL4KIJU.js");s(2,"Project/folder gate failed")}return{status:"cancelled"}}}export{p as a,A as b,N as c,C as d,D as e,S as f,T as g,x as h};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ var n=(()=>{let r=new Uint32Array(256);for(let f=0;f<256;f++){let t=f;for(let e=0;e<8;e++)t=t&1?3988292384^t>>>1:t>>>1;r[f]=t>>>0}return r})();function c(r){let f=4294967295;for(let t=0;t<r.length;t++)f=n[(f^r[t])&255]^f>>>8;return(f^4294967295)>>>0}export{c as a};
@@ -1,2 +1,2 @@
1
1
  import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as K,c as V,d as z,e as ee,f as te}from"./chunk-RNSSM2BK.js";import{c as J}from"./chunk-3FN5VJMV.js";import{a as Q}from"./chunk-DXV6MBTD.js";import{a as Z}from"./chunk-FPFOW6BS.js";import{b as H}from"./chunk-JKTFTF24.js";import{b as W}from"./chunk-323MLBYA.js";import{p as E}from"./chunk-W6VD2XFO.js";import{a as O}from"./chunk-2WVKOZ6W.js";import{a as _}from"./chunk-JRMDGLLT.js";import{a as k,b as A,d as Y}from"./chunk-VE3SUJMA.js";import{a as q}from"./chunk-F6ZOJXYU.js";import{a as G}from"./chunk-HCBYKLMW.js";import{a as c,b as u,i as I,j as X}from"./chunk-C44QQJR4.js";import{a as ue}from"./chunk-6YGTRKDT.js";import{e as F}from"./chunk-UR6MHSHU.js";var i=F(ue(),1);var r=F(G(),1);function _e({resultRef:h,mode:d="singleshot",loginCompleteRef:f}){let{exit:m}=X(),C=(0,i.useRef)(new q),S=(0,i.useRef)(new Q),v=(0,i.useRef)(new J),t=C.current,l=S.current,$=v.current,ne=K(),[P,g]=(0,i.useState)(d==="login"?"login":"gate"),[L,re]=(0,i.useState)(null),[de,R]=(0,i.useState)(null),[ge,T]=(0,i.useState)(null),[N,oe]=(0,i.useState)(null),[U,B]=(0,i.useState)([]),x=(0,i.useCallback)((e,n,s,o)=>$.log(e,n,s,o),[$]),pe=(0,i.useCallback)((e,n)=>{e?k(t,l,e,n):l.save({project_id:null,project_name:null,folder_id:null,folder_name:null})},[t,l]),y=(0,i.useCallback)(()=>{d==="login"?(f&&(f.current=!0),m()):g("input")},[d,m,f]),D=(0,i.useCallback)((e,n)=>{let s=k(t,l,e,n);if(d==="login"){g("ensure-project");return}Y(s)?y():s.projectId?g("ensure-folder"):g("ensure-project")},[t,l,y,d]);I((e,n)=>{n.ctrl&&e==="c"&&E(0,"Ctrl+C exit")});let M=(0,i.useRef)(!1);i.default.useEffect(()=>{M.current||(M.current=!0,d!=="login"&&te(t,x).then(e=>{re(e),e.status==="authenticated"?D(e.result.profile,e.result.env):e.status==="needs_pick"?g("pick"):(R(e.profile??null),T(e.env??null),g("login"))}).catch(e=>{oe(`Auth check failed: ${e instanceof Error?e.message:String(e)}`)}))},[t,x]);let ie=(0,i.useCallback)(e=>{h.current={objective:e},m()},[h,m]),se=(0,i.useCallback)(async(e,n)=>{t.setActiveProfile(e),t.setDefaultEnv(n),(await ee(t,e,n,x)).status==="authenticated"?D(e,n):(R(e),T(n),g("login"))},[t,x,D]),w=(0,i.useCallback)(()=>{let e=t.getActiveProfile(),n=t.getDefaultEnv();if(!e)return null;let s=_(n),o=t.loadBasicAuth(e,n);return new Z(s.controllerBaseUrl,async()=>t.loadCredentials(e,n)?.access_token??null,o,x)},[t,x]),le=(0,i.useCallback)(async()=>{let e=w();if(!e)return null;let n=e.cached??await e.resolve();if(!n)return null;let s=_(t.getDefaultEnv()),o=new O(s.tmsBaseUrl,n.username,n.access_key);try{let p=(await o.listProjects()).find(b=>b.name==="KaneAI Generated");if(p)return{id:p.project_id,name:p.name};let j=await o.createProject("KaneAI Generated");return{id:j.id,name:j.name}}catch{return null}},[w,t]),ae=(0,i.useCallback)(async e=>{let n=w();if(!n)return null;let s=n.cached??await n.resolve();if(!s)return null;let o=_(t.getDefaultEnv()),a=new O(o.tmsBaseUrl,s.username,s.access_key);try{let j=(await a.listFolders(e)).find(ce=>ce.name==="Untitled");if(j)return{id:j.id,name:j.name};let b=await a.createFolder(e,"Untitled");return{id:b.id,name:b.name}}catch{return null}},[w,t]);if(P==="gate")return(0,r.jsx)(c,{paddingX:1,children:(0,r.jsx)(u,{color:"yellow",children:"Checking authentication..."})});if(N)return(0,r.jsxs)(c,{flexDirection:"column",paddingX:1,children:[(0,r.jsx)(u,{color:"red",children:N}),(0,r.jsx)(u,{color:"gray",children:"Press Ctrl+C to exit."})]});if(P==="pick"&&L?.status==="needs_pick")return(0,r.jsx)(fe,{profiles:L.profiles,onSelect:se});if(P==="login")return(0,r.jsx)(z,{devMode:process.env.KANE_DEV_MODE==="1",profiles:t.listProfiles(),onBasicLogin:async(e,n,s,o)=>{let{validateBasicAuth:a}=await import("./validate-basic-O2DP2XJL.js");await a(n,s,o),t.saveBasicAuth(e,n,{username:s,access_key:o}),t.setActiveProfile(e),t.setDefaultEnv(n)},onOAuthLogin:async(e,n)=>{let{LoginFlow:s}=await import("./login-flow-CV76ENHV.js");t.setDefaultEnv(n),t.setActiveProfile(e),await new s(e,n,t).login()},onComplete:(e,n)=>{R(e),T(n),t.setActiveProfile(e),t.setDefaultEnv(n),D(e,n)},onCancel:()=>{E(0,"Login cancelled")}});if(P==="ensure-project"){let e=t.getActiveProfile()??"default",n=t.getDefaultEnv(),s=()=>{if(d==="login"){g("ensure-folder");return}k(t,l,e,n).folderId?y():g("ensure-folder")};return(0,r.jsxs)(c,{flexDirection:"column",children:[(0,r.jsx)(c,{paddingX:1,marginBottom:1,children:(0,r.jsx)(u,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,r.jsx)(H,{resolver:w(),currentProjectId:l.load().project_id,env:n,onSelect:(o,a)=>{A(t,l,e,n,{projectId:o,projectName:a}),B(p=>[...p,`\u2713 Project: ${a} (${o})`]),s()},onCancel:async()=>{let o=await le();o&&(A(t,l,e,n,{projectId:o.id,projectName:o.name}),B(a=>[...a,`\u2713 Default project: ${o.name} (${o.id})`]),s())}})]})}if(P==="ensure-folder"){let e=t.getActiveProfile()??"default",n=t.getDefaultEnv(),s=t.loadProfileConfig(e,n);return(0,r.jsxs)(c,{flexDirection:"column",children:[(0,r.jsx)(c,{paddingX:1,marginBottom:1,children:(0,r.jsx)(u,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,r.jsx)(W,{resolver:w(),projectId:s?.project_id??"",currentFolderId:l.load().folder_id,env:n,onSelect:(o,a)=>{A(t,l,e,n,{folderId:o,folderName:a}),B(p=>[...p,`\u2713 Folder: ${a} (${o})`]),y()},onCancel:async()=>{if(!s?.project_id)return;let o=await ae(s.project_id);o&&(A(t,l,e,n,{folderId:o.id,folderName:o.name}),B(a=>[...a,`\u2713 Default folder: ${o.name} (${o.id})`]),y())}})]})}return P==="input"?(0,r.jsxs)(c,{flexDirection:"column",children:[U.length>0&&(0,r.jsx)(c,{flexDirection:"column",paddingX:1,marginBottom:1,children:U.map((e,n)=>(0,r.jsx)(u,{color:"green",children:e},n))}),(0,r.jsx)(V,{onSubmit:ie,onEscape:()=>E(0,"User pressed Escape"),history:ne,placeholder:"Type an objective..."})]}):(0,r.jsx)(r.Fragment,{})}function fe({profiles:h,onSelect:d}){let[f,m]=(0,i.useState)(0),[C,S]=(0,i.useState)(!1);return I((v,t)=>{if(!C){if(t.escape){E(0,"Profile picker cancelled");return}if(t.upArrow&&f>0&&m(l=>l-1),t.downArrow&&f<h.length-1&&m(l=>l+1),t.return){S(!0);let l=h[f];d(l.profile,l.env).catch(()=>S(!1))}}}),(0,r.jsxs)(c,{flexDirection:"column",paddingX:1,children:[(0,r.jsx)(u,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,r.jsx)(c,{marginTop:1,flexDirection:"column",children:h.map((v,t)=>(0,r.jsxs)(u,{children:[t===f?"\u276F ":" ",(0,r.jsx)(u,{color:t===f?"#ff9500":"white",bold:t===f,children:v.profile}),(0,r.jsxs)(u,{color:"gray",children:[" [",v.env,"]"]})]},`${v.profile}-${v.env}`))}),C&&(0,r.jsx)(c,{marginTop:1,children:(0,r.jsx)(u,{color:"yellow",children:"Validating credentials..."})})]})}export{_e as a};
2
+ import{b as K,c as V,d as z,e as ee,f as te}from"./chunk-74HTO7K3.js";import{c as J}from"./chunk-SL6PCVM2.js";import{a as Q}from"./chunk-AECMF3T2.js";import{a as Z}from"./chunk-OR6MCL6Z.js";import{b as H}from"./chunk-FBHRBFHP.js";import{b as W}from"./chunk-HYSFJSIG.js";import{p as E}from"./chunk-QIGPXYMF.js";import{a as O}from"./chunk-2WVKOZ6W.js";import{a as _}from"./chunk-O75ZHGJG.js";import{a as k,b as A,d as Y}from"./chunk-VE3SUJMA.js";import{a as q}from"./chunk-VT54ARGE.js";import{a as G}from"./chunk-HCBYKLMW.js";import{a as c,b as u,i as I,j as X}from"./chunk-C44QQJR4.js";import{a as ue}from"./chunk-6YGTRKDT.js";import{e as F}from"./chunk-UR6MHSHU.js";var i=F(ue(),1);var r=F(G(),1);function _e({resultRef:h,mode:d="singleshot",loginCompleteRef:f}){let{exit:m}=X(),C=(0,i.useRef)(new q),S=(0,i.useRef)(new Q),v=(0,i.useRef)(new J),t=C.current,l=S.current,$=v.current,ne=K(),[P,g]=(0,i.useState)(d==="login"?"login":"gate"),[L,re]=(0,i.useState)(null),[de,R]=(0,i.useState)(null),[ge,T]=(0,i.useState)(null),[N,oe]=(0,i.useState)(null),[U,B]=(0,i.useState)([]),x=(0,i.useCallback)((e,n,s,o)=>$.log(e,n,s,o),[$]),pe=(0,i.useCallback)((e,n)=>{e?k(t,l,e,n):l.save({project_id:null,project_name:null,folder_id:null,folder_name:null})},[t,l]),y=(0,i.useCallback)(()=>{d==="login"?(f&&(f.current=!0),m()):g("input")},[d,m,f]),D=(0,i.useCallback)((e,n)=>{let s=k(t,l,e,n);if(d==="login"){g("ensure-project");return}Y(s)?y():s.projectId?g("ensure-folder"):g("ensure-project")},[t,l,y,d]);I((e,n)=>{n.ctrl&&e==="c"&&E(0,"Ctrl+C exit")});let M=(0,i.useRef)(!1);i.default.useEffect(()=>{M.current||(M.current=!0,d!=="login"&&te(t,x).then(e=>{re(e),e.status==="authenticated"?D(e.result.profile,e.result.env):e.status==="needs_pick"?g("pick"):(R(e.profile??null),T(e.env??null),g("login"))}).catch(e=>{oe(`Auth check failed: ${e instanceof Error?e.message:String(e)}`)}))},[t,x]);let ie=(0,i.useCallback)(e=>{h.current={objective:e},m()},[h,m]),se=(0,i.useCallback)(async(e,n)=>{t.setActiveProfile(e),t.setDefaultEnv(n),(await ee(t,e,n,x)).status==="authenticated"?D(e,n):(R(e),T(n),g("login"))},[t,x,D]),w=(0,i.useCallback)(()=>{let e=t.getActiveProfile(),n=t.getDefaultEnv();if(!e)return null;let s=_(n),o=t.loadBasicAuth(e,n);return new Z(s.controllerBaseUrl,async()=>t.loadCredentials(e,n)?.access_token??null,o,x)},[t,x]),le=(0,i.useCallback)(async()=>{let e=w();if(!e)return null;let n=e.cached??await e.resolve();if(!n)return null;let s=_(t.getDefaultEnv()),o=new O(s.tmsBaseUrl,n.username,n.access_key);try{let p=(await o.listProjects()).find(b=>b.name==="KaneAI Generated");if(p)return{id:p.project_id,name:p.name};let j=await o.createProject("KaneAI Generated");return{id:j.id,name:j.name}}catch{return null}},[w,t]),ae=(0,i.useCallback)(async e=>{let n=w();if(!n)return null;let s=n.cached??await n.resolve();if(!s)return null;let o=_(t.getDefaultEnv()),a=new O(o.tmsBaseUrl,s.username,s.access_key);try{let j=(await a.listFolders(e)).find(ce=>ce.name==="Untitled");if(j)return{id:j.id,name:j.name};let b=await a.createFolder(e,"Untitled");return{id:b.id,name:b.name}}catch{return null}},[w,t]);if(P==="gate")return(0,r.jsx)(c,{paddingX:1,children:(0,r.jsx)(u,{color:"yellow",children:"Checking authentication..."})});if(N)return(0,r.jsxs)(c,{flexDirection:"column",paddingX:1,children:[(0,r.jsx)(u,{color:"red",children:N}),(0,r.jsx)(u,{color:"gray",children:"Press Ctrl+C to exit."})]});if(P==="pick"&&L?.status==="needs_pick")return(0,r.jsx)(fe,{profiles:L.profiles,onSelect:se});if(P==="login")return(0,r.jsx)(z,{devMode:process.env.KANE_DEV_MODE==="1",profiles:t.listProfiles(),onBasicLogin:async(e,n,s,o)=>{let{validateBasicAuth:a}=await import("./validate-basic-ZGWPBYB6.js");await a(n,s,o),t.saveBasicAuth(e,n,{username:s,access_key:o}),t.setActiveProfile(e),t.setDefaultEnv(n)},onOAuthLogin:async(e,n)=>{let{LoginFlow:s}=await import("./login-flow-PYAPYCPY.js");t.setDefaultEnv(n),t.setActiveProfile(e),await new s(e,n,t).login()},onComplete:(e,n)=>{R(e),T(n),t.setActiveProfile(e),t.setDefaultEnv(n),D(e,n)},onCancel:()=>{E(0,"Login cancelled")}});if(P==="ensure-project"){let e=t.getActiveProfile()??"default",n=t.getDefaultEnv(),s=()=>{if(d==="login"){g("ensure-folder");return}k(t,l,e,n).folderId?y():g("ensure-folder")};return(0,r.jsxs)(c,{flexDirection:"column",children:[(0,r.jsx)(c,{paddingX:1,marginBottom:1,children:(0,r.jsx)(u,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,r.jsx)(H,{resolver:w(),currentProjectId:l.load().project_id,env:n,onSelect:(o,a)=>{A(t,l,e,n,{projectId:o,projectName:a}),B(p=>[...p,`\u2713 Project: ${a} (${o})`]),s()},onCancel:async()=>{let o=await le();o&&(A(t,l,e,n,{projectId:o.id,projectName:o.name}),B(a=>[...a,`\u2713 Default project: ${o.name} (${o.id})`]),s())}})]})}if(P==="ensure-folder"){let e=t.getActiveProfile()??"default",n=t.getDefaultEnv(),s=t.loadProfileConfig(e,n);return(0,r.jsxs)(c,{flexDirection:"column",children:[(0,r.jsx)(c,{paddingX:1,marginBottom:1,children:(0,r.jsx)(u,{color:"yellow",children:"Project & folder are required to save tests \xB7 Esc to use defaults \xB7 Ctrl+C to exit"})}),(0,r.jsx)(W,{resolver:w(),projectId:s?.project_id??"",currentFolderId:l.load().folder_id,env:n,onSelect:(o,a)=>{A(t,l,e,n,{folderId:o,folderName:a}),B(p=>[...p,`\u2713 Folder: ${a} (${o})`]),y()},onCancel:async()=>{if(!s?.project_id)return;let o=await ae(s.project_id);o&&(A(t,l,e,n,{folderId:o.id,folderName:o.name}),B(a=>[...a,`\u2713 Default folder: ${o.name} (${o.id})`]),y())}})]})}return P==="input"?(0,r.jsxs)(c,{flexDirection:"column",children:[U.length>0&&(0,r.jsx)(c,{flexDirection:"column",paddingX:1,marginBottom:1,children:U.map((e,n)=>(0,r.jsx)(u,{color:"green",children:e},n))}),(0,r.jsx)(V,{onSubmit:ie,onEscape:()=>E(0,"User pressed Escape"),history:ne,placeholder:"Type an objective..."})]}):(0,r.jsx)(r.Fragment,{})}function fe({profiles:h,onSelect:d}){let[f,m]=(0,i.useState)(0),[C,S]=(0,i.useState)(!1);return I((v,t)=>{if(!C){if(t.escape){E(0,"Profile picker cancelled");return}if(t.upArrow&&f>0&&m(l=>l-1),t.downArrow&&f<h.length-1&&m(l=>l+1),t.return){S(!0);let l=h[f];d(l.profile,l.env).catch(()=>S(!1))}}}),(0,r.jsxs)(c,{flexDirection:"column",paddingX:1,children:[(0,r.jsx)(u,{color:"#ff9500",bold:!0,children:"Select a profile:"}),(0,r.jsx)(c,{marginTop:1,flexDirection:"column",children:h.map((v,t)=>(0,r.jsxs)(u,{children:[t===f?"\u276F ":" ",(0,r.jsx)(u,{color:t===f?"#ff9500":"white",bold:t===f,children:v.profile}),(0,r.jsxs)(u,{color:"gray",children:[" [",v.env,"]"]})]},`${v.profile}-${v.env}`))}),C&&(0,r.jsx)(c,{marginTop:1,children:(0,r.jsx)(u,{color:"yellow",children:"Validating credentials..."})})]})}export{_e as a};