@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
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{k as se}from"./chunk-7QJ75SYR.js";import{a as q,c as Q,d as ae}from"./chunk-AFBKGZFG.js";import"./chunk-OS4VSIHT.js";import{c as ce}from"./chunk-VRVFPMCR.js";import"./chunk-TRJUD3XJ.js";import"./chunk-AFPHLUQ5.js";import"./chunk-JFAFKHDX.js";import"./chunk-JZ26R6UL.js";import{b as G,c as ne,d as ie,e as L,g as N,h as oe}from"./chunk-VFII6C46.js";import{a as K}from"./chunk-CLGC7VEO.js";import"./chunk-5DT7PIGB.js";import"./chunk-DNNZ353O.js";import"./chunk-GFKCTYCA.js";import"./chunk-XWKUZJCP.js";import"./chunk-NVGBE2DR.js";import{A as O}from"./chunk-TH47OOBV.js";import{b as re}from"./chunk-VAYBKR76.js";import"./chunk-CUM23TLF.js";import{i as te}from"./chunk-DUAXZYAD.js";import"./chunk-DBIBROYW.js";import"./chunk-WXHQYYD5.js";import"./chunk-IAHKTEET.js";import"./chunk-UD7KKHPW.js";import"./chunk-CH273NAE.js";import{a as ee}from"./chunk-YCCUBQY4.js";import{y as g}from"./chunk-ZUGCHQFC.js";import{a as j}from"./chunk-HCBYKLMW.js";import{a as P,b as w,k as B}from"./chunk-C44QQJR4.js";import{a as be}from"./chunk-6YGTRKDT.js";import{e as H}from"./chunk-UR6MHSHU.js";var D=H(be(),1);function le(r,p,b){let{ref:C,reason:u,by:y}=b;if(!u||u.trim().length===0)return{record:null,errors:[{code:"REASON_REQUIRED",detail:"archiving a node needs a reason \u2014 it becomes the tombstone's provenance"}]};let k=p.resolve(C);if(!k)return{record:null,errors:[{code:"UNKNOWN_REF",detail:`no node '${C}' in the graph`}]};let t=p.tipOf(k.cid);if(p.superseded.has(t))return{record:null,errors:[{code:"ALREADY_ARCHIVED",detail:`${C} is already superseded at its tip (${t.slice(0,19)}\u2026)`}]};let i=te(r,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:t,new:null,reason:u,by:y}],source_head_moves:{}},{expectPrev:p.latestHash});return re(r),{record:i.record,errors:null}}function de(r){let p=r.by??{kind:"human",id:process.env.USER??"operator"},b=r.mode==="interactive"?"override":r.mode,C={out:()=>{},err:()=>{},isTTY:!1,confirm:async()=>!0},u={applied:0,committed:0,retired:0,skipped:0,deferred:0,failed:0},y=new Map;for(let t of r.planRows)if(t.held_ref&&r.held){let i=r.held.rows.find(a=>a.temp_ref===t.held_ref);if(!i)continue;let v={kind:i.kind,ref:i.temp_ref,title:i.title,why:i.why,origin:"content-change",...t.impact?{impact:t.impact}:{}};y.set(v.ref,{card:v,source:"held",heldRef:i.temp_ref})}else if(t.kind==="MODIFY"){let i={kind:"MODIFY",ref:t.ref,title:t.ref,why:`${t.reason}: ${t.provenance}`,origin:t.origin??"structural-stale",...t.impact?{impact:t.impact}:{}};y.set(i.ref,{card:i,source:"row",row:t})}else if(t.kind==="ADD"){let i={kind:"ADD",ref:t.ref,title:t.ref,why:t.reason,origin:t.origin??"content-change"};y.set(i.ref,{card:i,source:"row",row:t})}for(let t of r.archive){if(t.kind!=="ARCHIVE")continue;let i={kind:"ARCHIVE",ref:t.ref,title:t.ref,why:t.why,provenance:t.why,...t.impact?{impact:t.impact}:{}};y.set(i.ref,{card:i,source:"archive",row:t})}for(let t of r.reviewFeeder?.()??[]){if(y.has(t.ref))continue;let i={kind:t.kind==="MODIFY_HELD"?"MODIFY":t.kind,ref:t.ref,title:t.title,why:t.why,...t.impact?{impact:t.impact}:{},...t.pair?{pair:t.pair}:{},...t.held?{held:!0}:{},...t.kind==="MODIFY_HELD"?{heldPayload:!0}:{}};y.set(i.ref,{card:i,source:"review",reviewCard:t})}let k=t=>(u.failed++,{outcome:"failed",detail:t});return{cards:()=>[...y.values()].map(t=>t.card),async submit(t,i){let v=y.get(t);if(!v)return k(`no card ${t}`);if(v.source==="review"){if(v.reviewCard.kind==="PAIR"&&i.v==="approve")return k(`${t} is a PAIR card \u2014 approve is not in its grammar (merge / keep both / defer); words ride a defer note`);let{submitReview:s}=await import("./verdicts-SCETLY5J.js"),x=i.v==="approve"?{v:"approve"}:i.v==="archive"?{v:"archive",because:i.because??""}:i.v==="skip"&&v.reviewCard.kind==="MODIFY_HELD"?{v:"keep_current"}:i.v==="defer"||i.v==="skip"?{v:"defer"}:i.v==="merge"?{v:"merge"}:{v:"keep_both"},h=await s({contextDir:r.contextDir,signals:o=>r.signals({ref:o.ref,verdict:o.verdict,...o.reason?{reason:o.reason}:{}})},v.reviewCard,x,p);return h.outcome==="failed"?(u.failed++,h):h.outcome==="deferred"?(u.deferred++,i.v==="defer"&&i.note?(r.signals({ref:t,verdict:"deferred-with-note",reason:i.note}),{...h,detail:`steering noted: "${i.note}" \u2014 decide ${v.reviewCard.kind==="PAIR"?"merge / keep both":"the verdict"} when it re-offers`}):h):h.outcome==="retired"?(u.retired++,h):h.outcome==="committed"?(u.committed++,h):(u.applied++,h)}if(i.v==="merge"||i.v==="keep_both")return k(`${t} is a ${v.card.kind} card \u2014 ${i.v} applies to review cards only`);if(i.v==="skip")return u.skipped++,r.signals({ref:t,verdict:"gap-dismissed"}),{outcome:"skipped"};if(i.v==="defer")return u.deferred++,i.note?(r.signals({ref:t,verdict:"deferred-with-note",reason:i.note}),{outcome:"deferred",detail:`steering noted: "${i.note}"`}):{outcome:"deferred"};if(i.v==="archive"){if(v.source!=="archive")return k(`${t} is not an ARCHIVE card`);let s=O(r.contextDir),x=s.resolve(v.row.ref);if(x&&s.superseded.has(s.tipOf(x.cid)))return u.skipped++,{outcome:"skipped",detail:"already retired \u2014 nothing to do"};let h=le(r.contextDir,O(r.contextDir),{ref:v.row.ref,reason:`reconcile retire: ${v.row.why}`,by:p});return h.errors?k(h.errors.map(o=>`${o.code}: ${o.detail}`).join("; ")):(u.retired++,r.signals({ref:t,verdict:"gap-resolved-archive",reason:v.row.why}),{outcome:"retired"})}if(v.source==="archive")return k(`${t} takes archive/skip/defer, not approve`);if(v.source==="held"){let s=se(r.contextDir,r.held,v.heldRef,p,i.edits);if(!s.ok)return k(s.message);if(s.kind==="ADD"){let x=await r.runDesign(s.ref,{yes:!0,mode:b,...i.steering?{because:i.steering}:{}});return x!==0?(u.failed++,{outcome:"failed",landed:!0,detail:`committed ${s.ref}, but its design run exited ${x} \u2014 finish with kane-cli design tests --use-case ${s.ref}`}):(u.applied++,r.signals({ref:t,verdict:"gap-resolved-create",...i.steering?{reason:i.steering}:{}}),{outcome:"applied",detail:s.ref})}if(i.steering){let x=O(r.contextDir),h=q(x,s.ref);if(!h.ok)return u.committed++,{outcome:"committed",detail:`committed ${s.ref}, but steering could not resolve it (${h.message}) \u2014 steer via kane-cli maintain evolve ${s.ref}`};let o=await Q(r.contextDir,h.target,{yes:!0,mode:b,because:i.steering},C,r.runDesign,"batch");if(o.outcome==="no-design"){let d=await r.runDesign(h.target.seamRef,{yes:!0,mode:b,because:i.steering});return d!==0?(u.failed++,{outcome:"failed",landed:!0,detail:`committed ${s.ref}, but its steered design run exited ${d} \u2014 finish with kane-cli design tests --use-case ${h.target.seamRef}`}):(u.applied++,r.signals({ref:t,verdict:"gap-resolved-create",reason:i.steering}),{outcome:"applied",detail:s.ref})}return o.outcome==="failed"||o.outcome==="paused"?(u.failed++,{outcome:"failed",landed:!0,detail:`committed ${s.ref}, but the steering evolve ${o.outcome} (exit ${o.code}) \u2014 finish with kane-cli maintain evolve ${s.ref}`}):o.outcome==="declined"?(u.committed++,{outcome:"committed",detail:`committed ${s.ref} \u2014 the steering evolve was declined; re-run kane-cli maintain evolve ${s.ref}`}):(u.applied++,r.signals({ref:t,verdict:"gap-resolved-evolve",reason:i.steering}),{outcome:"applied",detail:s.ref})}return u.committed++,r.signals({ref:t,verdict:"gap-resolved-evolve"}),{outcome:"committed",detail:s.ref}}let a=O(r.contextDir),f=q(a,v.row.ref);if(!f.ok)return k(f.message);if(v.card.kind==="ADD"){let s=await r.runDesign(f.target.seamRef,{yes:!0,mode:b});return s!==0?k(`design run exited ${s}`):(u.applied++,r.signals({ref:t,verdict:"gap-resolved-create"}),{outcome:"applied"})}let R=await Q(r.contextDir,f.target,{yes:!0,mode:b,...i.steering?{because:i.steering}:{}},C,r.runDesign,"batch");return R.outcome==="evolved"?(u.applied++,r.signals({ref:t,verdict:"gap-resolved-evolve",...i.steering?{reason:i.steering}:{}}),{outcome:"applied"}):R.outcome==="failed"||R.outcome==="paused"?k(`evolve ${R.outcome} (exit ${R.code})`):(u.skipped++,{outcome:"skipped",detail:R.outcome})},summary:()=>({...u})}}var _=H(j(),1);function U({mark:r,markColor:p,color:b,indent:C=2,reserve:u=0,children:y}){let{stdout:k}=B(),t=(k?.columns??80)-u,i=C+r.length+1;return(0,_.jsxs)(P,{children:[(0,_.jsx)(P,{width:i,flexShrink:0,children:(0,_.jsx)(w,{color:p,children:`${" ".repeat(C)}${r}`})}),(0,_.jsx)(P,{width:Math.max(20,t-i),children:(0,_.jsx)(w,{color:b,children:y})})]})}var l=H(j(),1);function ue(r){return r.landed?"committed":r.outcome}var ye={applied:{mark:"\u2714",color:"green"},committed:{mark:"\u2714",color:"green"},retired:{mark:"\u2714",color:"green"},skipped:{mark:"\xB7",color:"dim"},deferred:{mark:"\u2013",color:"dim"},failed:{mark:"\u2717",color:"red"}},Y=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function xe(r){return r.v==="archive"?"Retiring\u2026":r.v==="approve"&&r.steering?"Approving with your changes \u2014 committing, then re-designing\u2026":"Applying \u2014 committing\u2026"}function Re({controller:r,cards:p,note:b,markOutcome:C,routeChat:u,listEvolveTargets:y,barSubject:k,onFinish:t,onCtrlC:i,pauseRef:v}){let[a,f]=(0,D.useState)(p.length>0?{at:"card",idx:0,sel:0,editor:null}:{at:"done-panel",sel:0}),R=(0,D.useRef)(0),s=(0,D.useRef)(a);s.current=a;let x=(0,D.useRef)([]),[h,o]=(0,D.useState)(0),d=a.at==="busy"||a.at==="evolving";(0,D.useEffect)(()=>{if(!d)return;let e=setInterval(()=>o(n=>n+1),120);return()=>clearInterval(e)},[d]);let A=(0,D.useRef)(!1),$=()=>{b((0,l.jsx)(w,{color:g.dim,children:"walk paused \u2014 every verdict so far is committed; re-run the same command to continue"})),t(3)},I=()=>{if(A.current)return;A.current=!0;let e=s.current;if(e.at==="busy"||e.at==="evolving"){b((0,l.jsx)(w,{color:g.dim,children:"finishing the current item, then pausing\u2026"}));return}if(e.at==="done-panel"||e.at==="picker"||e.at==="why"||e.at==="view"){t(R.current);return}$()};v&&(v.current=I);let E=a.at==="card"||a.at==="busy"?p[a.idx]:null,T=()=>[{key:"finish",label:"finish"},...y?[{key:"evolve",label:"evolve another use-case\u2026"}]:[],...x.current.length>0?[{key:"view",label:"view what changed"}]:[]],W=()=>{let e=y?.()??[];if(e.length===0){b((0,l.jsx)(w,{color:g.dim,children:"nothing is stale \u2014 no evolve targets right now"})),f({at:"done-panel",sel:0});return}f({at:"picker",items:e,sel:0})},M=e=>{let n=e+1;if(n<p.length)f({at:"card",idx:n,sel:0,editor:null});else{let c=r.summary();b((0,l.jsx)(w,{color:g.dim,children:`reconcile walk: ${c.applied} applied, ${c.committed} committed, ${c.retired} retired, ${c.skipped} skipped, ${c.deferred} deferred`+(c.failed>0?`, ${c.failed} failed`:"")})),f({at:"done-panel",sel:0})}},F=(0,D.useRef)(!1),S=(e,n)=>{if(F.current)return;F.current=!0;let c=p[e];f({at:"busy",idx:e,label:xe(n),startedAt:Date.now()}),r.submit(c.ref,n).catch(m=>({outcome:"failed",detail:m instanceof Error?m.message:String(m)})).then(m=>{let V=ye[m.outcome]??{mark:"\xB7",color:"dim"},we=m.outcome!=="failed"&&m.outcome!=="skipped"&&m.outcome!=="deferred"&&c.impact&&"stale_refs"in c.impact&&c.impact.stale_refs.length>0?` \xB7 ${c.impact.stale_refs.length} item(s) now stale`:"",Z=`${m.outcome} [${c.kind}] ${K(c.title)}${m.detail?` \u2014 ${K(m.detail)}`:""}${we}`;if(x.current.push({mark:V.mark,color:V.color,line:Z}),b((0,l.jsx)(U,{mark:V.mark,markColor:V.color==="green"?g.green:V.color==="red"?g.red:g.dim,color:V.color==="dim"?g.dim:void 0,children:Z})),m.outcome==="failed"&&(R.current=R.current===0?1:R.current),C(c.ref,ue(m)),F.current=!1,A.current){$();return}M(e)})},me=(e,n)=>{f({at:"evolving",title:e.title,startedAt:Date.now()}),u(`${e.key} ${n}`).catch(c=>`\u2717 evolve failed: ${c instanceof Error?c.message:String(c)}`).then(c=>{let m=c.startsWith("\u2713");if(x.current.push({mark:m?"\u2714":"\u2717",color:m?"green":"red",line:c.replace(/^[✓✗]\s*/,"")}),b((0,l.jsx)(U,{mark:m?"\u2714":"\u2717",markColor:m?g.green:g.red,children:c.replace(/^[✓✗]\s*/,"")})),A.current){t(R.current);return}f({at:"done-panel",sel:0})})},fe=(0,D.useMemo)(()=>({isFocused:()=>{let e=s.current;return e.at==="card"&&e.editor===null||e.at==="done-panel"||e.at==="picker"||e.at==="view"},onMove:e=>{f(n=>{if(n.at==="card"){let c=p[n.idx],m=N(c)??L(c).length-1;return{...n,sel:Math.max(0,Math.min(m,n.sel+e))}}return n.at==="done-panel"?{...n,sel:Math.max(0,Math.min(T().length-1,n.sel+e))}:n.at==="picker"?{...n,sel:Math.max(0,Math.min(n.items.length-1,n.sel+e))}:n})},onSelect:()=>{let e=s.current;if(e.at==="card"){let n=p[e.idx],c=N(n);if(c!==null&&e.sel===c){f({...e,editor:"",editorIntent:"steer"});return}let m=L(n)[e.sel];if(m?.v==="archive"&&n.kind==="REVIEW"){f({...e,editor:"",editorIntent:"because"});return}m&&S(e.idx,{v:m.v});return}if(e.at==="done-panel"){let n=T()[e.sel];n?.key==="finish"?t(R.current):n?.key==="evolve"?W():n?.key==="view"&&f({at:"view"});return}if(e.at==="picker"){let n=e.items[e.sel];n&&f({at:"why",item:n,text:""});return}},onDigit:e=>{let n=s.current;if(n.at==="card"){let c=p[n.idx],m=L(c)[e-1];if(m?.v==="archive"&&c.kind==="REVIEW"){f({...n,editor:"",editorIntent:"because"});return}m&&S(n.idx,{v:m.v});return}n.at==="done-panel"&&e-1<T().length&&f({...n,sel:e-1}),n.at==="picker"&&e-1<n.items.length&&f({...n,sel:e-1})},onType:e=>{f(n=>n.at!=="card"||N(p[n.idx])===null?n:{...n,editor:(n.editor??"")+e,editorIntent:n.editorIntent??"steer"})},isMulti:()=>!1,onSpace:()=>{},onBack:()=>{let e=s.current;(e.at==="picker"||e.at==="view")&&f({at:"done-panel",sel:0})}}),[p]);(0,D.useEffect)(()=>{a.at==="done"&&t(R.current)},[a.at]);let pe=a.at==="card"||a.at==="done-panel"||a.at==="picker"||a.at==="why"||a.at==="view",ge=a.at==="card"||a.at==="busy"?`${k?`${k} \xB7 `:""}item ${a.idx+1} of ${p.length}`:k,X=e=>Math.floor((Date.now()-e)/1e3),{stdout:ve}=B(),z=Math.min((ve?.columns??80)-1,100),J=`view \xB7 this run's changes \xB7 ${x.current.length}`,he=Math.max(2,z-(3+J.length+1)),ke=Math.max(2,z-12);return(0,l.jsxs)(P,{flexDirection:"column",children:[(0,l.jsx)(ie,{onToggleThinking:()=>{},onCtrlC:()=>{i(),I()},panel:fe}),a.at==="card"&&E?(0,l.jsx)(oe,{card:E,position:{n:a.idx+1,of:p.length},sel:a.sel,focused:a.editor===null,editorIntent:a.editorIntent??"steer",freeText:a.editor!==null?{value:a.editor,onChange:e=>f(n=>n.at==="card"?{...n,editor:e}:n),onSubmit:e=>{let n=s.current;if(n.at!=="card")return;let c=e.trim();if(!c){f({...n,editor:null,editorIntent:void 0});return}let m=p[n.idx];n.editorIntent==="because"?S(n.idx,{v:"archive",because:c}):m.kind==="PAIR"?S(n.idx,{v:"defer",note:c}):S(n.idx,{v:"approve",steering:c})},onCancel:()=>f(e=>e.at==="card"?{...e,editor:null,editorIntent:void 0}:e)}:null}):null,a.at==="busy"?(0,l.jsxs)(w,{color:g.assuranceAccent,children:[`${Y[h%Y.length]} ${a.label} `,(0,l.jsx)(w,{color:g.dim,children:`(${X(a.startedAt)}s)`})]}):null,a.at==="evolving"?(0,l.jsxs)(w,{color:g.assuranceAccent,children:[`${Y[h%Y.length]} Evolving ${a.title}\u2026 `,(0,l.jsx)(w,{color:g.dim,children:`(${X(a.startedAt)}s)`})]}):null,a.at==="done-panel"?(0,l.jsx)(G,{headline:(()=>{let e=r.summary();return`reconcile done \u2014 ${e.applied+e.committed} applied \xB7 ${e.retired} retired \xB7 ${e.skipped} skipped \xB7 ${e.deferred} deferred${e.failed>0?` \xB7 ${e.failed} failed`:""}`})(),rows:T(),sel:a.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select"}):null,a.at==="picker"?(0,l.jsx)(G,{ask:!0,headline:"evolve which use-case?",rows:a.items.map(e=>({key:e.key,label:e.title,detail:e.badge})),sel:a.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}):null,a.at==="why"?(0,l.jsxs)(P,{flexDirection:"column",borderStyle:"round",borderColor:g.assuranceAccent,paddingX:1,children:[(0,l.jsxs)(P,{children:[(0,l.jsxs)(w,{children:[(0,l.jsx)(w,{color:g.assuranceAccent,children:"\u25B8"})," ",(0,l.jsx)(w,{color:g.dim,children:"\u270E "})]}),(0,l.jsx)(ee,{value:a.text,onChange:e=>f(n=>n.at==="why"?{...n,text:e}:n),onSubmit:e=>{let n=s.current;n.at==="why"&&(e.trim()?me(n.item,e.trim()):f({at:"picker",items:[n.item],sel:0}))},onCancel:()=>{s.current.at==="why"&&W()},placeholder:`what should change about ${a.item.title}?`})]}),(0,l.jsx)(w,{color:g.muted,children:" \u23CE submit \xB7 esc back"})]}):null,a.at==="view"?(0,l.jsxs)(P,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,l.jsxs)(w,{color:g.assuranceAccent,children:["\u2500\u2500 ",(0,l.jsx)(w,{bold:!0,children:J}),` ${"\u2500".repeat(he)}`]}),(0,l.jsx)(w,{children:" "}),x.current.map((e,n)=>(0,l.jsx)(U,{mark:e.mark,markColor:e.color==="green"?g.green:e.color==="red"?g.red:g.dim,color:e.color==="dim"?g.dim:void 0,indent:0,reserve:0,children:e.line},`vc-${n}`)),(0,l.jsx)(w,{children:" "}),(0,l.jsxs)(w,{color:g.assuranceAccent,children:["\u2500\u2500 ",(0,l.jsx)(w,{color:g.muted,children:"esc back"}),` ${"\u2500".repeat(ke)}`]})]}):null,(0,l.jsx)(ne,{verb:"maintain",subject:ge,state:pe?"idle":void 0,hints:"ctrl+c exit"})]})}async function qe(r){let p={current:null},b=o=>{p.current?.append(o)},C=null,u=async(o,d)=>{let[{runDesign:A},{resolveAgentAuthEnv:$},{runAgent:I},{preflightTurn:E}]=await Promise.all([import("./run-GMZCDRDD.js"),import("./spawner-GC5CFAJ7.js"),import("./bridge-JSKEO4N3.js"),import("./turn-preflight-JGYT7LXP.js")]);C??=await $();let T=C;return A({useCase:o,force:!0,mode:d.mode??"override",...d.because?{because:d.because}:{},...d.changeDelta!==void 0?{changeDelta:d.changeDelta}:{},...d.priorDesign!==void 0?{priorDesign:d.priorDesign}:{}},{contextDir:r.dir,agent:I,preflightTurn:()=>E(T),ask:async()=>[],out:()=>{},progress:()=>{},isTTY:!1,auth:T})},y=r.runDesign??u,k=de({contextDir:r.dir,held:r.held,archive:r.archive,planRows:r.rows,runDesign:y,mode:"interactive",signals:r.signals,reviewFeeder:()=>{try{return ce({contextDir:r.dir},O(r.dir))}catch{return[]}}}),t=new Set(r.rows.filter(o=>o.applied!==void 0).map(o=>o.held_ref??o.ref)),i=k.cards().filter(o=>!t.has(o.ref)&&!(o.kind==="ARCHIVE"&&r.archiveState?.[o.ref]!==void 0)),v=o=>r.rows.findIndex(d=>(d.held_ref??d.ref)===o),a=(o,d)=>{try{if(i.find(I=>I.ref===o)?.kind==="ARCHIVE"){d==="retired"?r.markA?.(o,"retired"):d==="skipped"&&r.markA?.(o,"skipped");return}let $=v(o);if($<0)return;d==="applied"||d==="committed"?r.mark?.($,"approved"):d==="skipped"&&r.mark?.($,"skipped")}catch{}},f=async o=>{let[{openGraph:d},{resolveParentUc:A,evolveOneUc:$}]=await Promise.all([import("./readmodel-XOYGGQ3S.js"),import("./evolve-cmd-XBX4SX5H.js")]),[I,...E]=o.split(/\s+/),T=d(r.dir),W=A(T,I);if(!W.ok)return`couldn't resolve '${I}' \u2014 start with a use-case id (uc-\u2026): ${W.message}`;if(E.length===0)return`say what to change: \`${I} <your words>\` \u2014 the words become the redesign's change delta`;let M=E.join(" "),F={out:()=>{},err:()=>{},isTTY:!1,confirm:async()=>!0},S=await $(r.dir,W.target,{yes:!0,mode:"override",because:M},F,y,"batch");return S.outcome==="evolved"?(r.signals({ref:W.target.display,verdict:"gap-resolved-evolve",reason:M}),`\u2713 redesigned ${W.target.display} \u2014 "${M}"`):`\u2717 evolve ${S.outcome} for ${W.target.display} (exit ${S.code})`},R=r.listEvolveTargets??(()=>{let o=O(r.dir);return ae(o).targets.map(d=>({key:d.display,title:d.display,badge:"stale"}))});if(r.script){let o=0;for(let d of i){let A=await r.script(d),$=await k.submit(d.ref,A);$.outcome==="failed"&&o===0&&(o=1),a(d.ref,ue($))}return o}let[{render:s},{ScrollbackProvider:x},{ScrollbackTap:h}]=await Promise.all([import("./build-JIKYOZUH.js"),import("./scrollback-JLPJR25X.js"),import("./ScrollbackTap-Q3IOKNMS.js")]);return new Promise(o=>{let d=!1,A=M=>{d||(d=!0,(async()=>{process.removeListener("SIGINT",T),await p.current?.flush();try{W.unmount()}catch{}o(M)})())},$=0,I={current:null},E=()=>{if($+=1,$>=2){process.removeListener("SIGINT",T);try{W.unmount()}catch{}o(130)}},T=()=>{E(),I.current?.()};process.on("SIGINT",T);let W=s((0,l.jsxs)(x,{children:[(0,l.jsx)(h,{into:p}),(0,l.jsx)(Re,{controller:k,cards:i,note:b,markOutcome:a,routeChat:f,listEvolveTargets:R,barSubject:r.barSubject,onFinish:A,onCtrlC:E,pauseRef:I})]}),{exitOnCtrlC:!1})})}export{Re as WalkSessionSurface,ue as outcomeToMark,qe as runWalkSession};
@@ -0,0 +1,2 @@
1
+ import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
+ import{a}from"./chunk-JKM2PUHI.js";import"./chunk-YTHQNN2L.js";import"./chunk-R5T4RLF5.js";import"./chunk-KBM3XHAM.js";import"./chunk-2YEHV2CX.js";import"./chunk-IDX3TOPY.js";import"./chunk-BKM2LWU2.js";import"./chunk-QIGPXYMF.js";import"./chunk-5EOX4MEY.js";import"./chunk-RZ4F3BHX.js";import"./chunk-ZUGCHQFC.js";import"./chunk-UR6MHSHU.js";export{a as withTelemetry};
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@testmuai/kane-cli",
3
- "version": "0.7.1",
3
+ "version": "0.7.2",
4
4
  "description": "KaneAI Terminal UI — browser automation testing agent",
5
5
  "type": "module",
6
6
  "main": "dist/index.js",
@@ -34,11 +34,11 @@
34
34
  "ws": "^8.20.0"
35
35
  },
36
36
  "optionalDependencies": {
37
- "@testmuai/kane-cli-darwin-arm64": "0.7.1",
38
- "@testmuai/kane-cli-darwin-x64": "0.7.1",
39
- "@testmuai/kane-cli-linux-x64": "0.7.1",
40
- "@testmuai/kane-cli-linux-arm64": "0.7.1",
41
- "@testmuai/kane-cli-win-x64": "0.7.1",
37
+ "@testmuai/kane-cli-darwin-arm64": "0.7.2",
38
+ "@testmuai/kane-cli-darwin-x64": "0.7.2",
39
+ "@testmuai/kane-cli-linux-x64": "0.7.2",
40
+ "@testmuai/kane-cli-linux-arm64": "0.7.2",
41
+ "@testmuai/kane-cli-win-x64": "0.7.2",
42
42
  "@testmuai/kane-cli-node-darwin-arm64": "24.18.0",
43
43
  "@testmuai/kane-cli-node-darwin-x64": "24.18.0",
44
44
  "@testmuai/kane-cli-node-linux-x64": "24.18.0",
@@ -1,8 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as Wt,b as he,c as Ut,d as st}from"./chunk-W5DOU2DV.js";import{a as Nt}from"./chunk-JEUA4UWK.js";import{a as Fe}from"./chunk-SY3HLQMV.js";import{a as Pt,b as Ft}from"./chunk-VGFTNLQQ.js";import"./chunk-L2TV4G56.js";import"./chunk-5KFS3GAZ.js";import{a as _t,b as Ot,c as qt}from"./chunk-NRTHYROA.js";import"./chunk-NVGBE2DR.js";import{a as Et}from"./chunk-5Y2G4NC7.js";import"./chunk-3STZLM5J.js";import"./chunk-L4JIMNKW.js";import"./chunk-M7WQM4UA.js";import"./chunk-WWNSD6FA.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import{a as Pe}from"./chunk-YCCUBQY4.js";import{a as Lt}from"./chunk-73C4PRYU.js";import{b as Mt}from"./chunk-DFS4RMVP.js";import{y as r}from"./chunk-C4G7RVJ6.js";import{a as Q}from"./chunk-HCBYKLMW.js";import{a as T,b as n,k as qe}from"./chunk-C44QQJR4.js";import{a as Pn}from"./chunk-6YGTRKDT.js";import{e as V}from"./chunk-UR6MHSHU.js";var p=V(Pn(),1);var l=V(Q(),1),Fn=60,Wn=100;function it(e,s){let o=e.options.length,c=o,d=e.multi_select?c++:null,m=e.allow_free_text?c++:null,u=s?c++:null;return{optionCount:o,doneIdx:d,freeIdx:m,batchIdx:u,maxSel:c-1}}var Nn="\xA0",Un={high:{text:`\u203C${Nn}high`,color:r.red},med:{text:"med",color:"yellow"},low:{text:"low",color:r.dim}};function jn(e){let s=(e.header??e.text.split(/\s+/).slice(0,3).join(" ")).trim();return s.length>16?`${s.slice(0,15)}\u2026`:s}function Vn(e,s,o){let c=g=>e[g].length+6,d=c(s),m=s,u=s;for(;;){let g=u+1<e.length?c(u+1):1/0,h=m-1>=0?c(m-1):1/0;if(g===1/0&&h===1/0)break;if(g<=h){if(d+g>o)break;d+=g,u+=1}else{if(d+h>o)break;d+=h,m-=1}}return{lo:m,hi:u}}function jt({batch:e,qView:s,sel:o=0,focused:c=!1,freeText:d=null,optionText:m=null,attach:u=null,canAttach:g=!1,multiSelFor:h}){let{stdout:I}=qe(),b=I?.columns??80,w=b<Fn,D=Math.min(b-1,Wn),C=Math.max(0,Math.min(e.questions.length-1,s??(e.cursor<0?0:e.cursor))),x=e.questions[C],R=e.resolution[C],L=e.resolution.filter(F=>!F).length,S=e.questions.length-L,B=Fe(e),f=it(x,B!==""),U=h?h(C):[],O=Un[x.risk],q=F=>c&&o===F?(0,l.jsx)(n,{color:r.assuranceAccent,children:"\u276F"}):" ",le=`? the agent needs ${L===1?"one answer":`${L} answers`}`,ae=e.questions.length>1?` \xB7 ${C+1} of ${e.questions.length} \xB7 ${S} answered`:"",Ae=(0,l.jsxs)(T,{flexDirection:"column",children:[(0,l.jsx)(T,{paddingLeft:2,children:(0,l.jsxs)(n,{bold:!0,children:[x.text,O?(0,l.jsx)(n,{color:O.color,bold:!1,children:` ${O.text}`}):null]})}),(0,l.jsx)(T,{paddingLeft:2,children:(0,l.jsx)(n,{color:r.dim,children:x.rationale})}),(0,l.jsx)(n,{children:" "}),x.options.map((F,P)=>{let X=c&&o===P;return m&&m.optionIndex===P?(0,l.jsx)(T,{flexDirection:"column",children:(0,l.jsxs)(T,{children:[(0,l.jsxs)(n,{children:[(0,l.jsx)(n,{color:r.assuranceAccent,children:"\u276F"})," ",(0,l.jsx)(n,{color:r.assuranceAccent,children:`${P+1}. ${F.label}`}),(0,l.jsx)(n,{color:r.dim,children:" \u270E "})]}),(0,l.jsx)(Pe,{value:m.value,onChange:m.onChange,onSubmit:m.onSubmit,onCancel:m.onCancel,placeholder:F.detail||"type your answer"})]})},`o-${P}`):(0,l.jsxs)(T,{flexDirection:"column",children:[(0,l.jsxs)(n,{children:[q(P)," ",x.multi_select?(0,l.jsx)(n,{color:U.includes(P)?r.green:r.dim,children:U.includes(P)?"[x] ":"[ ] "}):null,(0,l.jsx)(n,{color:X?r.assuranceAccent:void 0,children:`${P+1}. ${F.label}`}),P===x.recommended_index?(0,l.jsx)(n,{color:r.dim,children:" (recommended)"}):null,R?.selected_index===P?(0,l.jsx)(n,{color:r.dim,children:" (current)"}):null]}),F.detail?(0,l.jsx)(T,{paddingLeft:5,children:(0,l.jsx)(n,{color:r.dim,children:F.detail})}):null]},`o-${P}`)}),x.multi_select&&f.doneIdx!=null?(0,l.jsxs)(n,{children:[q(f.doneIdx)," ",(0,l.jsx)(n,{color:r.green,children:"\u2714"}),(0,l.jsx)(n,{color:c&&o===f.doneIdx?r.assuranceAccent:void 0,children:" done \u2014 confirm selection"})]}):null,x.allow_free_text?(0,l.jsx)(n,{children:" "}):null,x.allow_free_text?d?(0,l.jsxs)(T,{children:[(0,l.jsxs)(n,{children:[(0,l.jsx)(n,{color:r.assuranceAccent,children:"\u276F"})," ",(0,l.jsx)(n,{color:r.dim,children:"\u270E "})]}),(0,l.jsx)(Pe,{value:d.value,onChange:d.onChange,onSubmit:d.onSubmit,onCancel:d.onCancel,placeholder:"Tell me what to do"})]}):(0,l.jsxs)(n,{children:[f.freeIdx!=null?q(f.freeIdx):" "," ",(0,l.jsx)(n,{color:c&&f.freeIdx!=null&&o===f.freeIdx?r.assuranceAccent:r.dim,children:"\u270E Tell me what to do"})]}):null,u?(0,l.jsxs)(T,{flexDirection:"column",marginTop:1,children:[(0,l.jsxs)(T,{children:[(0,l.jsxs)(n,{children:[(0,l.jsx)(n,{color:r.assuranceAccent,children:"\u276F"})," ",(0,l.jsx)(n,{color:r.assuranceAccent,children:"@ attach a file or URL"}),(0,l.jsx)(n,{color:r.dim,children:" \u270E "})]}),(0,l.jsx)(Pe,{value:u.value,onChange:u.onChange,onSubmit:u.onSubmit,onCancel:u.onCancel,placeholder:"path or URL"})]}),(0,l.jsx)(T,{paddingLeft:2,children:(0,l.jsx)(n,{color:r.dim,children:"the questions are set aside \u2014 the agent reads the source and re-asks what's still open"})})]}):null]}),be=B!==""?(0,l.jsxs)(l.Fragment,{children:[(0,l.jsx)(n,{children:" "}),(0,l.jsxs)(n,{children:[c&&f.batchIdx!=null&&o===f.batchIdx?(0,l.jsx)(n,{color:r.assuranceAccent,children:"\u276F"}):" "," ",(0,l.jsx)(n,{color:r.assuranceAccent,children:"\xBB"}),(0,l.jsx)(n,{bold:!0,color:c&&f.batchIdx!=null&&o===f.batchIdx?r.assuranceAccent:void 0,children:" Go with recommendations"}),L>=5?(0,l.jsx)(n,{color:r.dim,children:` \u2014 resolves all ${L} open`}):null,(0,l.jsx)(n,{color:r.dim,children:" (tab)"})]})]}):null;if(w)return(0,l.jsxs)(T,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,l.jsx)(n,{color:r.assuranceAccent,bold:!0,children:le}),e.questions.length>1?(0,l.jsx)(n,{color:r.dim,children:ae.replace(/^ · /,"")}):null,(0,l.jsx)(n,{children:" "}),Ae,be,(0,l.jsx)(T,{paddingLeft:2,children:(0,l.jsx)(n,{color:r.muted,children:"\u2191\u2193 \u23CE \xB7 \u2190 \u2192 questions \xB7 esc back"})})]});let ke=`\u2500\u2500 ${le}${ae} `,re=Math.max(2,D-ke.length),Z=g?"\u2191\u2193 select \xB7 \u23CE confirm \xB7 \u2190 \u2192 questions \xB7 type = your words \xB7 @ attach a file or URL \xB7 esc back":"\u2191\u2193 select \xB7 \u23CE confirm \xB7 \u2190 \u2192 questions \xB7 type = your words \xB7 esc back",M=`\u2500\u2500 ${Z} `,ce=Math.max(2,D-M.length),j=e.questions.map(F=>jn(F)),ee=e.questions.length>1?Vn(j,C,D-8):null;return(0,l.jsxs)(T,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,l.jsxs)(n,{color:r.assuranceAccent,children:["\u2500\u2500 ",(0,l.jsx)(n,{bold:!0,children:le}),ae?(0,l.jsx)(n,{color:r.dim,children:ae}):null,` ${"\u2500".repeat(re)}`]}),ee?(0,l.jsx)(T,{marginTop:1,children:(0,l.jsxs)(n,{children:[ee.lo>0?(0,l.jsx)(n,{color:r.dim,children:"\u25C0 "}):" ",e.questions.slice(ee.lo,ee.hi+1).map((F,P)=>{let X=ee.lo+P,ye=P>0?" ":"";return X===C?(0,l.jsxs)(n,{children:[ye,(0,l.jsx)(n,{backgroundColor:r.assuranceAccent,color:"#0d1117",bold:!0,children:` ${j[X]} `})]},F.id):(0,l.jsxs)(n,{children:[ye,e.resolution[X]?(0,l.jsxs)(n,{children:[(0,l.jsx)(n,{color:r.green,children:"\u2713 "}),(0,l.jsx)(n,{color:r.dim,children:j[X]})]}):(0,l.jsx)(n,{color:r.dim,children:`\u25CB ${j[X]}`})]},F.id)}),ee.hi<e.questions.length-1?(0,l.jsx)(n,{color:r.dim,children:" \u25B6"}):null]})}):null,(0,l.jsx)(n,{children:" "}),Ae,be,(0,l.jsx)(n,{children:" "}),(0,l.jsxs)(n,{color:r.assuranceAccent,children:["\u2500\u2500 ",(0,l.jsx)(n,{color:r.muted,children:Z}),` ${"\u2500".repeat(ce)}`]})]})}var E=V(Q(),1),Vt={high:0,med:1,low:2},Kn={high:r.red,med:"yellow",low:r.dim};function Qn(e){return e.map((s,o)=>({r:s,i:o})).sort((s,o)=>(Vt[s.r.risk??"zz"]??3)-(Vt[o.r.risk??"zz"]??3)||s.i-o.i).map(({r:s})=>s)}var se=(e,s)=>e.length<=s?e:s<=1?"\u2026":`${e.slice(0,s-1)}\u2026`,We=(e,s)=>e+" ".repeat(Math.max(0,s-e.length));function Kt({rows:e,width:s=120,badgeHeader:o="risk"}){if(e.length===0)return null;let c=Qn(e),d=S=>S.staged||!S.id?"(staged)":Nt(S.id),m=Math.max(2,...c.map(S=>d(S).length)),u=Math.max(o.length,...c.map(S=>(S.badge??"").length)),g=s>=96&&c.some(S=>S.summary),I=s-(g?13:10)-m-u,b=Math.max(...c.map(S=>Math.max(S.title.length,(S.marker??"").length)),5),w=Math.max(5,g?Math.min(b,Math.max(16,Math.floor(I*.5))):Math.min(b,I)),D=g?Math.max(7,I-w):0,C=(S,B,f,U)=>S+U.map(O=>`\u2500${"\u2500".repeat(O.length)}\u2500`).join(B)+f,x=(S,B,f,U)=>[We(se(S,m),m),We(se(B,w),w),We(se(f,u),u),...g?[We(se(U,D),D)]:[]],R=x("id","title",o,"summary"),L=[];L.push((0,E.jsx)(n,{color:r.dim,children:C("\u250C","\u252C","\u2510",R)},"t")),L.push((0,E.jsxs)(n,{children:[R.map((S,B)=>(0,E.jsxs)(n,{children:[(0,E.jsx)(n,{color:r.dim,children:B===0?"\u2502 ":" \u2502 "}),(0,E.jsx)(n,{bold:!0,children:S})]},B)),(0,E.jsx)(n,{color:r.dim,children:" \u2502"})]},"h")),L.push((0,E.jsx)(n,{color:r.dim,children:C("\u251C","\u253C","\u2524",R)},"m"));for(let[S,B]of c.entries()){let f=x(d(B),se(B.title,w),se(B.badge??"",u),se(B.summary??"",D)),U=B.badgeColor??Kn[B.badge??""]??r.dim;if(L.push((0,E.jsxs)(n,{children:[(0,E.jsx)(n,{color:r.dim,children:"\u2502 "}),(0,E.jsx)(n,{color:r.assuranceAccent,children:f[0]}),(0,E.jsx)(n,{color:r.dim,children:" \u2502 "}),f[1],(0,E.jsx)(n,{color:r.dim,children:" \u2502 "}),(0,E.jsx)(n,{color:U,children:f[2]}),g?(0,E.jsxs)(E.Fragment,{children:[(0,E.jsx)(n,{color:r.dim,children:" \u2502 "}),f[3]]}):null,(0,E.jsx)(n,{color:r.dim,children:" \u2502"})]},`r-${S}`)),B.marker){let O=x("",se(B.marker,w),"","");L.push((0,E.jsx)(n,{color:r.dim,children:`\u2502 ${O.join(" \u2502 ")} \u2502`},`mk-${S}`))}}return L.push((0,E.jsx)(n,{color:r.dim,children:C("\u2514","\u2534","\u2518",R)},"b")),(0,E.jsx)(E.Fragment,{children:L})}var Hn={"use-case":"use-cases",ac:"ACs",scenario:"scenarios",test:"tests",gap:"gaps"},ne=e=>Hn[e]??`${e}s`,Qt=e=>e==="ac"?"AC":e==="use-case"?"use-case":e,ot=e=>e.kind??"use-case",Ht=e=>`${ot(e)}:${e.temp_ref}`;function Xt(e){let s=e,o=s.badge??e.risk??null,c=s.why??e.summary??e.description??null;return JSON.stringify([e.title,o,c,s.extra??null,e.depends_on_hint??null])}function zt(e){return e.filter(s=>s.role==="agent"&&typeof s.turnIndex=="number"&&Array.isArray(s.items)&&s.items.length>0)}function oe(e){let s=new Map,o=1;for(let m of zt(e)){let u=new Set;for(let g of m.items){let h=Ht(g);if(u.has(h))continue;u.add(h);let I=s.get(h);s.set(h,{num:I?.num??o++,ref:g.temp_ref,kind:ot(g),item:g,turnIndex:m.turnIndex,fingerprint:Xt(g)})}}let c=[...s.values()].sort((m,u)=>m.num-u.num),d=[];for(let m of c){let u=d.find(g=>g.kind===m.kind);u?u.count++:d.push({kind:m.kind,label:ne(m.kind),count:1})}return{entries:c,byRef:s,counts:d}}function Gt(e,s){let c=zt(e).find(x=>x.turnIndex===s);if(!c)return null;let d=e.filter(x=>x.role!=="agent"||typeof x.turnIndex!="number"||x.turnIndex<=s),m=oe(d),u=oe(e.filter(x=>x.role!=="agent"||typeof x.turnIndex!="number"||x.turnIndex<s)),g=[],h=new Map,I=new Map,b=new Map,w=new Set;for(let x of c.items){let R=Ht(x);if(w.has(R))continue;w.add(R);let L=u.byRef.get(R),S=x.changed===!0,B=m.byRef.get(R).num,f=ot(x);if(L&&!S&&L.fingerprint===Xt(x)){h.set(f,(h.get(f)??0)+1);continue}let U=!!L||S,O=U?b:I;O.set(f,(O.get(f)??0)+1),g.push({item:x,num:B,updated:U})}let D=[...h.entries()].map(([x,R])=>({label:ne(x),count:R})),C=[...[...I.entries()].map(([x,R])=>`${R} new ${R===1?Qt(x):ne(x)}`),...[...b.entries()].map(([x,R])=>`${R} updated ${R===1?Qt(x):ne(x)}`)].join(" \xB7 ");return{fresh:g,unchanged:D,headerStats:C}}function lt(e,s){let o=e.entries.filter(m=>m.turnIndex===s);if(o.length===0)return e;let c=new Map(o.map(m=>[m.ref,m])),d=[];for(let m of o){let u=d.find(g=>g.kind===m.kind);u?u.count+=1:d.push({kind:m.kind,label:ne(m.kind),count:1})}return{entries:o,byRef:c,counts:d}}var y=V(Q(),1);function Xn(e){let s=e.form==="assumed"?" (assumed)":e.form==="deferred"?"":" (you)",o=e.note?` \u2014 ${e.note}`:"";return e.form==="deferred"?`\u21B3 deferred q${e.qNum} ${e.stub}${o}`:e.form==="changed"?`\u21B3 changed q${e.qNum} ${e.stub}: ${e.prev??"?"} \u2192 ${e.choice??"?"}${s}${o}`:`\u21B3 ${e.form} q${e.qNum} ${e.stub}: ${e.choice??"?"}${s}${o}`}var zn=Math.min(process.stdout?.columns??100,120)-2;function Jt({block:e,annotations:s}){switch(e.kind){case"banner":return(0,y.jsx)(T,{marginTop:1,children:(0,y.jsx)(n,{color:r.dim,children:` \u2500\u2500 ${e.text} \u2500\u2500`})});case"user":return(0,y.jsxs)(T,{marginTop:1,children:[(0,y.jsx)(n,{color:r.orange,children:"\u276F "}),(0,y.jsx)(n,{children:e.text})]});case"note":return(0,y.jsx)(n,{color:r.dim,children:` ${e.text}`});case"agent":return(0,y.jsx)(T,{marginTop:1,children:(0,y.jsx)(Ot,{text:e.text,accent:r.assuranceAccent})});case"thinking":return(0,y.jsx)(T,{marginTop:1,children:(0,y.jsx)(n,{color:r.dim,children:` thought for ${(e.tookMs/1e3).toFixed(1)}s`})});case"tool":return(0,y.jsx)(n,{color:r.dim,children:` ${Pt({name:e.name,status:e.status==="ok"?"done":e.status,detail:e.detail})}`});case"usage":return(0,y.jsx)(n,{color:r.dim,children:` \xB7 ${e.credits.toFixed(1)} credits \u2014 total ${e.total.toFixed(1)}`});case"turn":{let o=s??null,c=o?o.fresh:e.items.map((b,w)=>({item:b,num:w+1,updated:!1})),d={usecase:"risk","use-case":"risk",ac:"check",scenario:"kind",test:"check",gap:"severity",stylenote:"kind"},m=b=>b.kind??"use-case",u=new Map;for(let b of c){let w=b.item,D=m(b.item),C=w.risk==="high"||w.risk==="med"||w.risk==="low"?w.risk:void 0,x={id:w.logical_id??"",staged:!w.logical_id,title:w.title,badge:w.badge??w.risk??"",summary:w.why??w.summary??w.description??"",...C?{risk:C}:{},...b.updated?{marker:"\u21B3 changed"}:{}},R=u.get(D)??[];R.push(x),u.set(D,R)}let g=c.some(b=>!!b.item.kind),h=(o?.unchanged??[]).reduce((b,w)=>b+w.count,0),I=o?.headerStats?` \u2014 ${o.headerStats}${h>0?` (${h} unchanged)`:""}`:"";return(0,y.jsxs)(T,{flexDirection:"column",marginLeft:2,children:[(0,y.jsxs)(n,{bold:!0,children:[g?"design":e.heading,I?(0,y.jsx)(n,{bold:!1,color:r.dim,children:I}):null]}),[...u.entries()].map(([b,w])=>(0,y.jsxs)(T,{flexDirection:"column",children:[u.size>1?(0,y.jsx)(n,{color:r.dim,children:`${ne(b)} \xB7 ${w.length}`}):null,(0,y.jsx)(Kt,{rows:w,width:zn,badgeHeader:d[b]??"info"})]},b)),o&&o.unchanged.length>0&&(0,y.jsx)(n,{color:r.dim,children:` \u22EE unchanged: ${o.unchanged.map(b=>`${b.count} ${b.label}`).join(" \xB7 ")}`})]})}case"answer":return(0,y.jsx)(n,{color:r.dim,children:Xn(e.receipt)});case"continued":return(0,y.jsx)(n,{color:r.dim,children:"\u21B3 continued"});case"commit":return(0,y.jsxs)(T,{flexDirection:"column",children:[(0,y.jsx)(n,{color:e.ok?r.green:r.red,children:` ${e.ok?"\u2714":"\u2717"} ${e.line}`}),(e.warnings??[]).map((o,c)=>(0,y.jsx)(n,{color:r.dim,children:` \u26A0 ${o}`},`w-${c}`))]});case"error":return(0,y.jsxs)(Lt,{variant:"error",paddingX:1,children:[(0,y.jsx)(n,{color:r.red,children:e.title}),e.detail.map((o,c)=>(0,y.jsx)(n,{color:r.dim,children:o},`d-${c}`))]});case"interrupted":return(0,y.jsxs)(T,{flexDirection:"column",children:[(0,y.jsx)(n,{color:r.red,children:"interrupted \u2014 session not saved"}),e.detail?(0,y.jsx)(n,{color:r.dim,children:e.detail}):null]});case"pause":return(0,y.jsxs)(T,{flexDirection:"column",children:[(0,y.jsx)(n,{children:`paused: session ${e.sid} saved`}),e.expires_at?(0,y.jsx)(n,{color:r.dim,children:`expires: ${e.expires_at}`}):null,(0,y.jsx)(n,{children:`resume: ${e.resume}`}),e.messageForm?(0,y.jsx)(n,{children:`or say something on the way in: ${e.messageForm}`}):null]});case"summary":return(0,y.jsxs)(T,{flexDirection:"column",children:[(0,y.jsx)(n,{bold:!0,children:"session summary"}),e.lines.map((o,c)=>(0,y.jsx)(n,{children:` ${o}`},`s-${c}`))]})}}var xe=V(Q(),1);function Yt({item:e}){return(0,xe.jsxs)(T,{flexDirection:"column",marginLeft:2,children:[(e.cite??[]).map((s,o)=>(0,xe.jsx)(n,{dimColor:!0,children:`cite ${s.anchor??"conv"} \u2014 "${s.quote??""}"`},`cite-${o}`)),(e.depends_on_hint??[]).length>0&&(0,xe.jsx)(n,{dimColor:!0,children:`depends on: ${(e.depends_on_hint??[]).join(", ")}`}),Object.entries(e.extra??{}).map(([s,o])=>(0,xe.jsx)(n,{dimColor:!0,children:`${s}: ${o}`},`extra-${s}`))]})}var v=V(Q(),1),at=(e,s)=>Math.max(0,Math.min(s,e));function Ue(e,s,o){switch(s.type){case"move":return e.level==="detail"?{...e,scroll:Math.max(0,(e.scroll??0)+s.delta)}:{...e,cursor:at(e.cursor+s.delta,Math.max(0,o-1))};case"enter":return e.level==="list"?{...e,level:"detail",scroll:0}:e;case"back":return e.level==="detail"?{...e,level:"list",scroll:0}:null}}var en={"use-case":"use-cases",ac:"acs",scenario:"scenarios",test:"tests",gap:"gaps"};function tn(e,s){if(e.level==="detail")return{level:"detail",cursor:at(e.num-1,Math.max(0,s.entries.length-1))};if(e.section){let o=s.entries.findIndex(c=>en[c.kind]===e.section);if(o>=0)return{level:"list",cursor:o}}return{level:"list",cursor:0}}function Gn(e){let s=[];for(let o of e.entries){let c=s.find(d=>d.kind===o.kind);c?c.entries.push(o):s.push({kind:o.kind,entries:[o]})}return s}var Zt=3;function Jn({items:e,cursor:s,verb:o,more:c}){let d=`view \xB7 ${o} so far \xB7 ${e.counts.map(u=>`${u.count} ${u.count===1?u.label.replace(/s$/,""):u.label}`).join(" \xB7 ")}`,m=e.entries[s];return(0,v.jsxs)(T,{flexDirection:"column",borderStyle:"round",borderColor:r.dim,paddingX:1,children:[(0,v.jsx)(n,{bold:!0,children:d}),Gn(e).map(({kind:u,entries:g})=>{let h=m?.kind===u,I=h?g.findIndex(C=>C.ref===m.ref):-1,b=h?at(I-1,Math.max(0,g.length-Zt)):0,w=g.slice(b,b+(h?Zt:1)),D=g.length-w.length;return(0,v.jsxs)(T,{flexDirection:"column",children:[(0,v.jsx)(n,{color:r.dim,children:`${en[u]??ne(u)} \xB7 ${g.length}`}),w.map(C=>{let x=h&&C.ref===m.ref,R=C.item.badge;return(0,v.jsxs)(n,{children:[(0,v.jsx)(n,{color:r.assuranceAccent,children:x?"\u203A ":" "}),(0,v.jsx)(n,{children:`${C.num} \xB7 ${C.item.title}`}),R?(0,v.jsx)(n,{color:r.dim,children:` \xB7 ${R}`}):null]},`${C.kind}:${C.ref}`)}),D>0&&(0,v.jsx)(n,{color:r.dim,children:` \u22EE ${D} more`})]},u)}),c?(0,v.jsxs)(n,{children:[(0,v.jsx)(n,{color:r.assuranceAccent,children:s===e.entries.length?"\u203A ":" "}),(0,v.jsx)(n,{color:r.dim,children:`\u22EF show all \u2014 ${c.hidden} more from earlier turns`})]}):null,(0,v.jsx)(n,{color:r.dim,children:"\u2191\u2193 move \xB7 \u21B5 detail \xB7 esc back"})]})}var Ne=14;function Yn({items:e,cursor:s,explain:o,grandTotal:c,dossier:d,scroll:m=0}){let u=e.entries[s];if(!u)return(0,v.jsx)(n,{color:r.dim,children:"nothing to show"});if(d){let h=Math.max(0,Math.min(m,Math.max(0,d.lines.length-Ne))),I=d.lines.slice(h,h+Ne);return(0,v.jsxs)(T,{flexDirection:"column",borderStyle:"round",borderColor:r.dim,paddingX:1,children:[(0,v.jsxs)(n,{bold:!0,children:[`view \xB7 ${d.id}`,d.id.toLowerCase()!==d.rawId?(0,v.jsx)(n,{bold:!1,color:r.dim,children:` \xB7 ${d.rawId}`}):null]}),(0,v.jsx)(n,{bold:!0,children:d.title}),h>0?(0,v.jsx)(n,{color:r.muted,children:`\u22EE ${h} above`}):null,I.map((b,w)=>(0,v.jsx)(n,{color:b.dim?r.dim:void 0,children:b.text},`dl-${w}`)),d.lines.length>h+Ne?(0,v.jsx)(n,{color:r.muted,children:`\u22EE ${d.lines.length-h-Ne} more`}):null,(0,v.jsx)(n,{color:r.dim,children:"\u2191\u2193 scroll \xB7 esc back"})]})}let g=u.item;return(0,v.jsxs)(T,{flexDirection:"column",borderStyle:"round",borderColor:r.dim,paddingX:1,children:[(0,v.jsx)(n,{bold:!0,children:`view \xB7 ${u.kind} ${u.num} of ${c??e.entries.length}`}),(0,v.jsx)(n,{children:u.item.title}),g.badge?(0,v.jsx)(n,{color:r.dim,children:`kind: ${g.badge}`}):null,g.why?(0,v.jsx)(n,{color:r.dim,children:g.why}):null,(0,v.jsx)(Yt,{item:u.item}),o?.map((h,I)=>(0,v.jsx)(n,{color:r.dim,children:h},`ex-${I}`)),(0,v.jsx)(n,{color:r.dim,children:"view-only \u2014 approvals happen in chat"}),(0,v.jsx)(n,{color:r.dim,children:"\u2191\u2193 prev/next \xB7 esc back to list"})]})}function nn({items:e,state:s,verb:o,more:c,explain:d,grandTotal:m,dossier:u=null}){return s.level==="list"?(0,v.jsx)(Jn,{items:e,cursor:s.cursor,verb:o,more:c}):(0,v.jsx)(Yn,{items:e,cursor:s.cursor,explain:d,grandTotal:m,dossier:u,scroll:s.scroll??0})}var Zn={"use-cases":"use-cases",usecases:"use-cases","use-case":"use-cases",acs:"acs",ac:"acs",scenarios:"scenarios",scenario:"scenarios",tests:"tests",test:"tests",gaps:"gaps",gap:"gaps"};function rn(e){let s=(e??"").trim().toLowerCase();if(!s)return{level:"list"};if(/^\d+$/.test(s)){let c=parseInt(s,10);return c>=1?{level:"detail",num:c}:{error:"items are numbered from 1 \u2014 /view 1"}}let o=Zn[s];return o?{level:"list",section:o}:{error:"try /view, /view <number>, or /view acs|scenarios|tests"}}var A=V(Q(),1),er=6,sn=12;function tr(e,s,o){let c=Math.max(20,s),d=[];for(let u of e.split(`
3
- `)){if(u.length<=c){d.push(u);continue}let g="";for(let h of u.split(" "))g&&g.length+1+h.length>c?(d.push(g),g=h):g=g?`${g} ${h}`:h;d.push(g)}let m=Math.max(0,d.length-o);return{body:d.slice(-o).join(`
4
- `),hidden:m}}var je=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function on(e){let s={key:"redesign",label:"re-design from scratch",detail:"replaces the current design"},o={key:"keep",label:"keep the existing design",detail:"back to the list"};return e.designed==="stale"?[{...s,detail:"the use-case changed since it was designed"},o]:[o,s]}function Kr({controller:e,verb:s="extract",onCtrlC:o,chain:c=null,inspect:d=null}){let[,m]=(0,p.useState)(0),[u,g]=(0,p.useState)(!1),[h,I]=(0,p.useState)(null),[b,w]=(0,p.useState)(null),D=(0,p.useRef)(null),[C,x]=(0,p.useState)(null),R=(0,p.useRef)(null),L=t=>{R.current=t,x(t)},S=t=>{D.current=t,w(t),t===null&&L(null)},B=(0,p.useRef)([]),[f,U]=(0,p.useState)(null),O=(0,p.useRef)(null),q=t=>{O.current=t,U(t)},le=Mt(),{stdout:ae}=qe(),Ae=ae?.columns??80,be=(0,p.useRef)(0),ke=(0,p.useRef)(0);(0,p.useEffect)(()=>{let t=()=>{let i=e.state.ledger;for(let k=be.current;k<i.length;k++){let $=i[k],_=$.kind==="turn"?Gt(e.state.turns,$.turnIndex):void 0;le.append((0,A.jsx)(Jt,{block:$,annotations:_},`lg-${k}`))}be.current=i.length};t();let a=e.subscribe(()=>{t();let i=e.state;D.current&&(i.pending||i.status==="pausing")&&(S(null),i.pending&&I("questions arrived \u2014 back to chat")),m(k=>k+1)});return m(i=>i+1),a},[e,le]);let{thinking:re,status:Z,pending:M,confirm:ce,ledger:j,activeTurn:ee,stream:F,notice:P}=e.state,X=(F?.text??"").trimEnd(),ye=X.length>0,ln=u&&(re.liveThinking.length>0||re.thinkingLog.length>0),an=tr(re.liveThinking||re.thinkingLog.map(t=>t.text).join(`
5
- `),Ae-6,sn),ct=ye?X.split(`
6
- `).slice(-er):[];ee&&(ke.current=ee.turnIndex);let cn=M?M.resolution.filter(t=>!t).length:0,ut;for(let t=j.length-1;t>=0;t--){if(B.current.some(i=>i.end!=null&&t>=i.start&&t<i.end))continue;let a=j[t];if(a.kind==="banner"&&!a.text.startsWith("kane")){ut=a.text;break}}let Te=re.activity[re.activity.length-1],Ve=Te?Te.status==="decision"?Te.label:Ft({name:Te.name,status:Te.status}):void 0,dt=Z==="streaming"||Z==="working",[mt,un]=(0,p.useState)(0);Et(()=>un(t=>t+1),dt||f?.kind==="running"?120:null);let dn=e.state.busySince?Math.floor((Date.now()-e.state.busySince)/1e3):0,mn=ye?"Writing\u2026":Ve?`${Ve.charAt(0).toUpperCase()}${Ve.slice(1)}\u2026`:e.state.workingLabel??(s==="design"?"Designing\u2026":"Thinking\u2026"),gn=e.state.turns.some(t=>t.role==="agent"),[fn,pn]=(0,p.useState)(0),[hn,xn]=(0,p.useState)(!1),[gt,bn]=(0,p.useState)(null),ue=(0,p.useRef)(0),ft=(0,p.useRef)(!1),pt=(0,p.useRef)(null),we=t=>{ue.current=t,pn(t)},ht=t=>{ft.current=t,xn(t)},de=t=>{pt.current=t,bn(t)},[Be,kn]=(0,p.useState)(null),Ke=(0,p.useRef)(null),me=t=>{Ke.current=t,kn(t)},[xt,yn]=(0,p.useState)(null),bt=(0,p.useRef)(null),$e=t=>{bt.current=t,yn(t)},[Qe,Tn]=(0,p.useState)(0),K=(0,p.useRef)(0),ve=t=>{K.current=t,Tn(t)},kt=M?M.questions[0]?.id??"b":null;(0,p.useEffect)(()=>{M&&ve(M.cursor<0?0:M.cursor)},[kt,M?.cursor]);let De=()=>{let t=H.current;if(!t)return;let a=t.questions.length;for(let i=1;i<=a;i++){let k=(K.current+i)%a;if(!t.resolution[k]){ve(k);return}}},yt=M?M.questions[Math.max(0,Math.min(M.questions.length-1,Qe))]:void 0,z=(0,p.useRef)(yt);z.current=yt;let H=(0,p.useRef)(M);H.current=M;let wn=M?`${kt}:${Qe}`:null;(0,p.useEffect)(()=>{if(de(null),me(null),$e(null),z.current){ht(!0);let t=H.current?.resolution[K.current]?.selected_index;we(t??z.current.recommended_index??0)}else ht(!1)},[wn]);let Ee=t=>{let a=H.current;return it(t,a?Fe(a)!=="":!1)},$n={isFocused:()=>ft.current&&z.current!=null&&pt.current==null&&Ke.current==null&&bt.current==null||O.current!=null&&O.current.kind!=="running"||G.current&&Bt.current==null,onMove:t=>{let a=z.current;if(a){we(Math.max(0,Math.min(Ee(a).maxSel,ue.current+t)));return}let i=O.current;if(i?.kind==="picker"){q({...i,sel:Math.max(0,Math.min(i.items.length-1,i.sel+t))});return}if(i?.kind==="ask"||i?.kind==="confirm"||i?.kind==="failed"){let k=(i.kind==="ask"?Me.current.length:i.kind==="failed"?_e.current.length:2)-1;q({...i,sel:Math.max(0,Math.min(k,i.sel+t))});return}i&&!G.current||G.current&&fe(Math.max(0,Math.min(Re.current.length-1,nt.current+t)))},onSelect:()=>{let t=z.current,a=H.current;if(!t||!a){let $=O.current;if($?.kind==="picker"){let W=$.items[$.sel];W&&(W.designed?q({kind:"confirm",item:W,sel:0}):Ye(W,!1));return}if($?.kind==="confirm"){on($.item)[$.sel]?.key==="redesign"?Ye($.item,!0):Je();return}if($?.kind==="ask"){let W=Me.current[$.sel]?.key;W==="another"?Je():W==="view"?rt(""):q(null);return}if($?.kind==="failed"){let W=_e.current[$.sel]?.key;W==="retry"?Ye($.item,$.force):W==="view"?rt(""):q(null);return}if($&&!G.current||!G.current)return;switch(Re.current[nt.current]?.key){case"finish":e.completeSession();return;case"continue":e.continueParked();return;case"design-chain":Je();return;case"view":rt("",ke.current);return;case"free":pe("");return}return}let i=Ee(t),k=ue.current;if(i.batchIdx!=null&&k===i.batchIdx){e.goWithRecommendations();return}if(i.freeIdx!=null&&k===i.freeIdx){de("");return}if(i.doneIdx!=null&&k===i.doneIdx){e.confirmMulti(K.current),De();return}if(t.multi_select){e.toggleOption(K.current,k);return}if(t.options[k]?.input===!0){me({opt:k,value:""});return}e.submitAnswer(K.current,k),De()},onLeft:()=>{H.current&&ve(Math.max(0,K.current-1))},onRight:()=>{let t=H.current;t&&ve(Math.min(t.questions.length-1,K.current+1))},onDigit:t=>{let a=z.current;if(a){t-1<a.options.length&&we(t-1);return}let i=O.current;if(i?.kind==="picker"){t-1<i.items.length&&q({...i,sel:t-1});return}if(i?.kind==="ask"){t-1<Me.current.length&&q({...i,sel:t-1});return}if(i?.kind==="failed"){t-1<_e.current.length&&q({...i,sel:t-1});return}if(i?.kind==="confirm"){t-1<2&&q({...i,sel:t-1});return}if(!(i&&!G.current)&&G.current){let k=Re.current,$=0;for(let _=0;_<k.length;_++)if(!k[_].free&&($+=1,$===t)){fe(_);return}}},isMulti:()=>{let t=z.current;return!!t?.multi_select&&ue.current<(t?.options.length??0)},onSpace:()=>{H.current&&e.toggleOption(K.current,ue.current)},onTab:()=>{let t=z.current;if(!t)return;let a=Ee(t);a.batchIdx!=null&&we(a.batchIdx)},onType:t=>{let a=z.current;if(a){if(t==="@"&&e.canIngest()){$e("");return}let i=ue.current;if(a.options[i]?.input===!0){me({opt:i,value:t});return}if(!a.allow_free_text)return;let k=Ee(a);we(k.freeIdx??0),de(t);return}if(!(O.current&&!G.current)&&G.current){let i=Wt(Re.current);if(i==null)return;fe(i),pe(t)}},onBack:()=>{let t=O.current;if(t&&t.kind!=="running"){q(null);return}let a=H.current;if(a){for(let i=K.current-1;i>=0;i--)if(a.resolution[i]){ve(i);return}}}},vn=gt!=null?{value:gt,onChange:t=>de(t),onSubmit:t=>{de(null),t.trim()&&H.current&&(e.submitFreeText(K.current,t),De())},onCancel:()=>de(null)}:null,Sn=xt!=null?{value:xt,onChange:t=>$e(t),onSubmit:t=>{$e(null),t.trim()&&e.ingestAttach(t)},onCancel:()=>$e(null)}:null,In=Be!=null?{optionIndex:Be.opt,value:Be.value,onChange:t=>me({opt:Be.opt,value:t}),onSubmit:t=>{let a=Ke.current?.opt;me(null),a!=null&&H.current&&(e.submitAnswerWithText(K.current,a,t),De())},onCancel:()=>me(null)}:null,Tt=o??(()=>e.requestPause()),ie=e.state.checkpoint,Se=f?.kind==="running"&&Z==="idle",Ie=Z==="idle"&&gn&&!M&&!b&&(!f||Se),G=(0,p.useRef)(!1);G.current=Ie;let J=oe(e.state.turns).entries.length,Ce,Y;for(let t=j.length-1;t>=0;t--){if(B.current.some(i=>i.end!=null&&t>=i.start&&t<i.end))continue;let a=j[t];if(!Ce&&a.kind==="commit"&&a.ok&&(Ce=a.line),!Y&&a.kind==="banner"&&a.text.startsWith("designing: ")&&(Y=a.text.slice(11)),Ce&&Y)break}let He;for(let t=j.length-1;t>=0;t--){let a=j[t];if(a.kind==="user")break;if(a.kind==="commit"&&a.ok&&/\bapplied\b/.test(a.line)){He=a.line;break}}let te=Y?{"acceptance criteria":"scenarios",scenarios:"acceptance criteria + exercises","acceptance criteria + exercises":"tests + gaps"}[Y]:void 0,wt={"acceptance criteria":"the promises every path of this use-case must keep",scenarios:"the concrete user journeys that exercise those promises","acceptance criteria + exercises":"the wiring pass \u2014 per-journey checks, tied to the promises each journey exercises","tests + gaps":"runnable browser tests \u2014 anything unautomatable is recorded as a gap"},$t=Y?wt[Y]:void 0,vt=te?wt[te]:void 0,Cn="phases: acceptance criteria \u2192 scenarios \u2192 wiring \u2192 tests \xB7 stop anytime with finish",Rn=(()=>{for(let t=j.length-1;t>=0;t--){let a=j[t];if(a.kind==="agent")return a.text}return null})(),ge=/\?\s*$/.test((Rn??"").trimEnd()),St=s==="design"&&!ie&&(ge||te!==void 0),It=Y==="tests + gaps",Le=f?.kind==="running"?f.title:"the design",Ct=!!e.state.error&&!e.senderAlive(),An=ce?"the agent needs a clarification before it can apply that":Se&&!ie?ge?`${Le} \u2014 the agent asked a question`:He?`${Le} \u2014 ${He}`:It?`${Le} \u2014 design complete`:`${Le} \u2014 the agent is waiting on you`:ie?Y?`${Y} done${te?` \u2014 next: ${te}`:""}`:Ce??"phase done":Ct?"the agent stopped \u2014 the session is view-only":St?ge?"the agent asked a question \u2014 answer or continue":`design incomplete \u2014 ${te} not started`:Ce??"waiting on you",Xe=ce?[{key:"free",label:"clarify \u2014 type which one you meant",free:!0}]:Se&&!ie?It&&!ge?[{key:"finish",label:"finish this design"},...J>0?[{key:"view",label:"view what's saved"}]:[],{key:"free",label:"reply \u2014 tell the agent what to change",free:!0}]:[{key:"continue",label:ge?"continue \u2014 go with your suggestion":"continue designing"},...J>0?[{key:"view",label:"view what's saved"}]:[],{key:"finish",label:"finish this design"},{key:"free",label:"reply \u2014 tell the agent what to change",free:!0}]:ie?[{key:"continue",label:te?`continue to ${te}`:"continue"},...J>0?[{key:"view",label:"view what's saved"}]:[],{key:"finish",label:"finish here"},{key:"free",label:"adjust \u2014 tell me what to change",free:!0}]:Ct?[...J>0?[{key:"view",label:"view what's saved"}]:[],{key:"free",label:"tell me what to change",free:!0}]:St?[{key:"continue",label:ge?"continue \u2014 go with your suggestion":`continue \u2014 ${te} next`},...J>0?[{key:"view",label:"view the design"}]:[],{key:"finish",label:"finish anyway"},{key:"free",label:"reply \u2014 answer and continue",free:!0}]:[{key:"finish",label:s==="design"?"finish":"looks good \u2014 finish the session"},...c?[{key:"design-chain",label:"design tests for a use-case\u2026"}]:[],...J>0?[{key:"view",label:s==="design"?"view the design":`view the ${J} draft${J===1?"":"s"}`}]:[],{key:"free",label:s==="design"?"keep adjusting \u2014 tell me what to change":"tell me what to change",free:!0}],ze=[{key:"another",label:"design another use-case\u2026"},...J>0?[{key:"view",label:"view what was designed"}]:[],{key:"back",label:"done \u2014 back"}],Me=(0,p.useRef)(ze);Me.current=ze;let Ge=[{key:"retry",label:"try again"},...J>0?[{key:"view",label:"view what's saved"}]:[],{key:"back",label:"back"}],_e=(0,p.useRef)(Ge);_e.current=Ge;let Je=()=>{let t=c?.listUcs()??[];if(t.length===0){I("no use-cases to design yet");return}q({kind:"picker",items:t,sel:0})},Ye=(t,a)=>{let i={start:e.state.ledger.length,end:null};B.current.push(i);let k=()=>{i.end=e.state.ledger.length};q({kind:"running",title:t.title,item:t,force:a,startedAt:Date.now()}),c.runDesignChild(t.key,a).then($=>{k(),$===0?(e.ledger({kind:"commit",ok:!0,line:`designed ${t.title}`}),q({kind:"ask",title:t.title,sel:0})):(e.ledger({kind:"commit",ok:!1,line:`design for ${t.title} failed \u2014 child exited ${$}`}),q({kind:"failed",item:t,force:a,detail:`child exited ${$}`,sel:0}))}).catch($=>{k();let _=$ instanceof Error?$.message:String($);e.ledger({kind:"commit",ok:!1,line:`design for ${t.title} failed \u2014 ${_}`}),q({kind:"failed",item:t,force:a,detail:_,sel:0})})},Re=(0,p.useRef)(Xe);Re.current=Xe;let Ze=Ie&&ie&&$t!==void 0,et=B.current.find(t=>t.end==null)?.start??"top",Rt=(0,p.useRef)(new Set),[Bn,At]=(0,p.useState)(!1);(0,p.useEffect)(()=>{Ze?Rt.current.has(et)||(Rt.current.add(et),At(!0)):At(!1)},[Ze,et]);let Dn=Ze?[...Bn?[Cn]:[],`${$t}${vt?` \xB7 next: ${vt}`:""}`]:[],[En,Ln]=(0,p.useState)(0),[tt,Mn]=(0,p.useState)(null),nt=(0,p.useRef)(0),Bt=(0,p.useRef)(null),fe=t=>{nt.current=t,Ln(t)},pe=t=>{Bt.current=t,Mn(t)},_n=`${Ie}:${ie}:${ke.current}`;(0,p.useEffect)(()=>{fe(0),pe(null)},[_n]);let On=tt!=null?{value:tt,onChange:t=>pe(t),onSubmit:t=>{pe(null),fe(0);let a=t.trim();a&&(I(null),e.submit(a))},onCancel:()=>{pe(null),fe(0)}}:null,rt=(t,a)=>{if(/^(uc|sc|ac|t|gap|sty)-\d+$/i.test(t.trim())){let _=t.trim().toLowerCase(),Oe=oe(e.state.turns).entries.findIndex(N=>(N.item.logical_id??"").toLowerCase()===_);if(Oe<0){I(`${t.trim().toUpperCase()} isn't in this session's items \u2014 view lists what this session minted`);return}S({level:"detail",cursor:Oe,scroll:0}),L(null);return}let i=rn(t);if("error"in i){I(i.error);return}let k=oe(e.state.turns);if(k.entries.length===0){I("nothing proposed yet \u2014 the first turn is still coming");return}if(i.level==="detail"&&i.num>k.entries.length){I(`no item ${i.num} \u2014 the set has ${k.entries.length} item${k.entries.length===1?"":"s"}`);return}let $=a!=null?lt(k,a):k;S(tn(i,$)),L(a!=null&&$.entries.length<k.entries.length?a:null)},Dt=(0,A.jsx)(Ut,{verb:s,subject:ut,pendingCount:cn,creditsTotal:e.state.credits?.total,state:Se?"waiting on you":M||Ie||b||f&&f.kind!=="running"?"idle":void 0});if(b){let t=oe(e.state.turns),a=C!=null?lt(t,C):t,i=t.entries.length-a.entries.length,k=b.level==="list"&&i>0,$=a.entries.length+(k?1:0),_=a.entries[b.cursor],W=b.level==="detail"&&_?e.explainLines(_.item.slug??_.item.temp_ref):null,Oe=b.level==="detail"&&_&&d?d(_.item.logical_id??e.aliasOf(_.item.temp_ref)??_.item.temp_ref):null;return(0,A.jsxs)(T,{flexDirection:"column",children:[(0,A.jsx)(st,{onToggleThinking:()=>g(N=>!N),onCtrlC:Tt,explorer:{isOpen:()=>D.current!==null,onMove:N=>S(D.current&&Ue(D.current,{type:"move",delta:N},$)),onEnter:()=>{let N=D.current;if(N){if(N.level==="list"&&k&&N.cursor===a.entries.length){L(null);return}S(Ue(N,{type:"enter"},$))}},onBack:()=>{S(D.current&&Ue(D.current,{type:"back"},$)),setTimeout(()=>m(N=>N+1),0)}}}),(0,A.jsx)(nn,{items:a,state:b,verb:s,more:k?{hidden:i}:null,explain:W,grandTotal:t.entries.length,dossier:Oe}),(P??h)&&(P??h).split(`
7
- `).map((N,qn)=>(0,A.jsx)(n,{color:r.orange,children:N},`nt-${qn}`)),Dt]})}return(0,A.jsxs)(T,{flexDirection:"column",children:[(0,A.jsx)(st,{onToggleThinking:()=>g(t=>!t),onCtrlC:Tt,panel:$n}),ln&&(0,A.jsx)(qt,{thinking:an.body,expanded:!0,thinkingDone:Z!=="streaming",maxLines:sn+1}),ct.length>0&&(0,A.jsx)(T,{flexDirection:"column",children:ct.map((t,a)=>(0,A.jsx)(n,{children:_t(t).map((i,k)=>(0,A.jsx)(n,{bold:i.bold,italic:i.italic,color:i.code?r.dim:void 0,children:i.text},k))},`st-${a}`))}),M&&(0,A.jsx)(jt,{batch:M,qView:Qe,sel:fn,focused:hn,freeText:vn,optionText:In,attach:Sn,canAttach:e.canIngest(),multiSelFor:t=>e.multiSelection(t)}),ce&&(0,A.jsx)(n,{color:"yellow",children:ce.prompt}),(P??h)&&(P??h).split(`
8
- `).map((t,a)=>(0,A.jsx)(n,{color:r.orange,children:t},`nt-${a}`)),dt&&!M&&(0,A.jsxs)(n,{color:r.assuranceAccent,children:[`${je[mt%je.length]} ${mn} `,(0,A.jsx)(n,{color:r.dim,children:`(${dn}s)`})]}),Ie&&(0,A.jsx)(he,{headline:An,rows:Xe,sel:En,focused:tt==null,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 type = your own words",freeText:On,sublines:Dn}),f?.kind==="picker"&&(0,A.jsx)(he,{ask:!0,headline:"design tests for which use-case?",rows:f.items.map(t=>({key:t.key,label:t.title,detail:t.badge})),sel:f.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}),f?.kind==="confirm"&&(0,A.jsx)(he,{ask:!0,headline:`${f.item.title} is already designed${f.item.designed==="stale"?" \u2014 and the use-case has changed since":""}`,rows:on(f.item).map(t=>({key:t.key,label:t.label,detail:t.detail})),sel:f.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}),f?.kind==="running"&&!Se&&(0,A.jsxs)(n,{color:r.assuranceAccent,children:[`${je[mt%je.length]} Designing ${f.title}\u2026 `,(0,A.jsx)(n,{color:r.dim,children:`(${Math.floor((Date.now()-f.startedAt)/1e3)}s)`})]}),f?.kind==="ask"&&(0,A.jsx)(he,{headline:`designed ${f.title}`,rows:ze,sel:f.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}),f?.kind==="failed"&&(0,A.jsx)(he,{headline:`design failed \u2014 ${f.item.title} (${f.detail})`,rows:Ge,sel:f.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}),Z==="pausing"&&(0,A.jsx)(n,{color:r.dim,children:"pausing \u2014 saving session\u2026 (ctrl+c again = force quit)"}),Dt]})}export{Kr as ChatSurface,tr as tailVisualRows};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-2KBD6JZX.js";import"./chunk-DQ54MH7F.js";import"./chunk-FCMLIK7P.js";import"./chunk-CJJXT5DO.js";import"./chunk-QM4S2APK.js";import"./chunk-ZPDM6FO7.js";import"./chunk-EHN5HTUD.js";import"./chunk-NVGBE2DR.js";import"./chunk-CH273NAE.js";import"./chunk-L5LI2JF4.js";import"./chunk-RFHMDQXZ.js";import"./chunk-GW5DWAXY.js";import"./chunk-T63R6QT4.js";import"./chunk-3STZLM5J.js";import"./chunk-L4JIMNKW.js";import"./chunk-M7WQM4UA.js";import"./chunk-WWNSD6FA.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-W6VD2XFO.js";import"./chunk-5EOX4MEY.js";import"./chunk-JRMDGLLT.js";import"./chunk-C4G7RVJ6.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as EvidenceViewOffer};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-SRDHPKJT.js";import"./chunk-RNSSM2BK.js";import"./chunk-3FN5VJMV.js";import"./chunk-L5LI2JF4.js";import"./chunk-TDPWFYTJ.js";import"./chunk-DXV6MBTD.js";import"./chunk-KT6G7AF2.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-JKTFTF24.js";import"./chunk-323MLBYA.js";import"./chunk-YCCUBQY4.js";import"./chunk-KNDSQ4PS.js";import"./chunk-W6VD2XFO.js";import"./chunk-5EOX4MEY.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-JRMDGLLT.js";import"./chunk-VE3SUJMA.js";import"./chunk-F6ZOJXYU.js";import"./chunk-4OPQJ7PE.js";import"./chunk-C4G7RVJ6.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as SingleShotApp};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{g as a}from"./chunk-NBKQT7LJ.js";import"./chunk-IXVOXJP6.js";import"./chunk-UI7KULSI.js";import"./chunk-TDPWFYTJ.js";import"./chunk-DXV6MBTD.js";import"./chunk-R2RGSO4B.js";import"./chunk-5Y2G4NC7.js";import"./chunk-W6VD2XFO.js";import"./chunk-5EOX4MEY.js";import"./chunk-JRMDGLLT.js";import"./chunk-APAIWBIH.js";import"./chunk-73C4PRYU.js";import"./chunk-DFS4RMVP.js";import"./chunk-C4G7RVJ6.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as TestMdRunView};
@@ -1,12 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as b}from"./chunk-HJERKSBK.js";import"./chunk-IBNC444G.js";import"./chunk-KHU7C6EE.js";import"./chunk-KVQOBPAZ.js";import"./chunk-AM5S4KG4.js";import"./chunk-5JTUL6XL.js";import"./chunk-O56PUUNL.js";import"./chunk-NRC2G4Y5.js";import"./chunk-BQHKBOSF.js";import"./chunk-2XGDWUJ5.js";import"./chunk-BB2W35TW.js";import"./chunk-VGFTNLQQ.js";import"./chunk-L2TV4G56.js";import"./chunk-JFAFKHDX.js";import"./chunk-5KFS3GAZ.js";import"./chunk-EV3EHXEI.js";import"./chunk-F7WKDMX7.js";import"./chunk-VOHQA2SP.js";import"./chunk-XDHZMCTA.js";import"./chunk-AAONIIQV.js";import"./chunk-YKTYVJBN.js";import"./chunk-CVOGP253.js";import"./chunk-427OQS2N.js";import"./chunk-ZLCZDAEX.js";import"./chunk-SE6WNCYU.js";import"./chunk-DNNZ353O.js";import"./chunk-Q2F5QB2W.js";import"./chunk-GVIPTX6T.js";import"./chunk-ZPDM6FO7.js";import"./chunk-NVGBE2DR.js";import{a as g}from"./chunk-CH273NAE.js";import"./chunk-L5LI2JF4.js";import"./chunk-GW5DWAXY.js";import"./chunk-T63R6QT4.js";import"./chunk-3STZLM5J.js";import"./chunk-L4JIMNKW.js";import"./chunk-M7WQM4UA.js";import"./chunk-WWNSD6FA.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-5EOX4MEY.js";import"./chunk-C4G7RVJ6.js";import"./chunk-UR6MHSHU.js";import{existsSync as N}from"fs";var O=new Set(["interactive","agent","ci","override"]);function Y(e){return e.mode!=null&&!O.has(e.mode)?{error:`design: --mode must be interactive | agent | ci | override, got '${e.mode}'`}:e.strength!=null&&e.strength!=="pairwise"&&e.strength!=="3-wise"?{error:`design: --strength must be pairwise | 3-wise, got '${e.strength}'`}:e.max!=null&&(!Number.isInteger(e.max)||e.max<1)?{error:"design: --max must be a positive integer"}:!e.useCase&&!e.resume?{error:"design: --use-case is required (or --resume <sid> \u2014 the session remembers its use-case)"}:{useCase:e.useCase,max:e.max,strength:e.strength,mode:e.mode,force:e.force,resume:e.resume,plan:e.plan,message:e.message,phase:e.phase,allowUnreviewed:e.allowUnreviewed,because:e.because,changeDelta:e.changeDelta,priorDesign:e.priorDesign}}async function B(e){let l=async(t,n)=>{if(process.stderr.write(t+`
3
- `),e.mode!=="agent")return 2;let{makeHeadlessIO:s,agentRefusal:d}=await import("./headless-io-BL3TEAX5.js");return d(s("ndjson","design"),t,n)},h=Y(e);if("error"in h)return l(h.error);let i=h;{let{validateResumeMessage:t}=await import("./headless-io-BL3TEAX5.js"),n=t(i,"design");if(n)return l(n)}{let{gateStructuredFlags:t}=await import("./structured-answers-QHFGZPSS.js"),n=t(e,"design");if(n)return l(n,"STRUCTURED_FLAGS_USAGE")}if(!N(g(process.cwd())))return l("error: no context store here (run `kane-cli context ingest` + `kane-cli context extract` first)","NO_STORE");let v=!!i.resume;if(i.useCase&&i.resume&&!e.allowUnreviewed)try{let{peekSession:t}=await import("./sessions-BLXZVK5U.js"),n=t(g(process.cwd()),i.resume);v=!!(n&&n.use_case===i.useCase)}catch{v=!1}if(i.useCase&&!v&&!e.allowUnreviewed)try{let[{openGraph:t},{designEntryCheck:n}]=await Promise.all([import("./readmodel-X7L7W2BA.js"),import("./trust-gate-EX7R2P4Y.js")]),s=n(t(g(process.cwd())),i.useCase);if(!s.ok&&(s.code==="UC_UNREVIEWED"||s.code==="UC_ARCHIVED"))if((i.mode??"interactive")==="interactive"&&process.stdin.isTTY&&process.stdout.isTTY){let{createInterface:m}=await import("readline/promises"),c=m({input:process.stdin,output:process.stderr}),p=(await c.question(`design: ${s.detail}
4
- Design against it anyway? (y/N) `)).trim().toLowerCase();if(c.close(),p!=="y"&&p!=="yes")return process.stderr.write(`aborted \u2014 approve it first: ${s.reviewCmd}
5
- `),2}else if(e.mode==="agent"){let{makeHeadlessIO:m}=await import("./headless-io-BL3TEAX5.js"),c=m("ndjson","design");return c.event({type:"error",code:s.code,message:`design: ${s.detail}`,next:[s.reviewCmd]}),c.event({type:"done",status:"refused",exit_code:2,next:[s.reviewCmd,`kane-cli design tests --use-case ${i.useCase} --mode agent --allow-unreviewed`]}),2}else return process.stderr.write(`design: ${s.detail} (${s.reviewCmd})
6
- `),2}catch(t){process.env.KANE_DEBUG&&process.stderr.write(`trust gate skipped: ${String(t)}
7
- `)}let r=null,y=null;try{if(!i.mode&&!process.stdin.isTTY)return process.stderr.write(`design: no TTY \u2014 pass an explicit --mode agent|ci|override to run headless
8
- `),2;let t=i.mode??"interactive";if(t==="interactive"){if(!process.stdin.isTTY||!process.stdout.isTTY)return process.stderr.write(`design: --mode interactive needs a TTY on stdin and stdout (use --mode agent|ci|override headless)
9
- `),2;let{bindDesignInteractive:o}=await import("./interactive-bind-43HGDF5K.js");return await o(i)}let{resolveAgentAuthEnv:n}=await import("./spawner-AH5FTUYU.js"),{runAgent:s}=await import("./bridge-T4HL4TG7.js"),{preflightTurn:d}=await import("./turn-preflight-JGYT7LXP.js"),{makeInterruptGuard:m}=await import("./interrupt-guard-UREUWNRL.js"),{baseUrlAdvisory:c}=await import("./turn-preflight-JGYT7LXP.js"),{makeHeadlessIO:p,resolveEncoding:k,guardedChannels:S}=await import("./headless-io-BL3TEAX5.js"),{withStructuredNext:_,prepareStructuredResume:A}=await import("./structured-answers-QHFGZPSS.js");r=_(p(k(t),"design"));let{telemetryBootstrap:R,telemetryEnvName:U}=await import("./bootstrap-CNOZ5VRB.js"),u=R({verb:"design",mode:t,contextRoot:g(process.cwd()),env:U(),resumeSid:i.resume,write:!0,longSession:!0});y=o=>u.end(o);let x={...await n(),...u.spawnEnv()},a=A({opts:e,contextDir:g(process.cwd()),verb:"design"});if(a.kind==="refuse")return r.out(a.error),t==="agent"&&r.event({type:"error",message:a.error,code:a.code}),await u.end({exit_code:2}),t==="agent"?r.done(2,"refused"):2;let T;if(a.kind==="apply"){for(let o of a.notes)r.out(o);if(a.matchedQids.length>0){r.out(`applying ${a.matchedQids.length} structured answer(s) from --answer to the paused session's pending questions`);for(let o of a.matchedQids)r.event({type:"panel_resolved",id:o,by:"user",via:"flag"})}a.statement&&(T=[i.message,a.statement].filter(Boolean).join(`
10
-
11
- `))}let E=c();E&&r.out(E);let f=m(s,o=>r.out(o)),C=S(r,()=>f.interrupted(),/^error: (design agent failed|the design agent ended)/);try{let o=t==="interactive"&&process.stdin.isTTY&&process.stdout.isTTY?async $=>{let{createInterface:I}=await import("readline/promises"),D=I({input:process.stdin,output:process.stdout});try{return/^y(es)?$/i.test((await D.question(`${$} [y/N] `)).trim())}finally{D.close()}}:void 0,w=await b({...i,mode:t,...T!==void 0?{message:T}:{},...o?{confirmRetarget:o}:{}},{contextDir:g(process.cwd()),agent:f.agent,preflightTurn:()=>d(x),ask:async()=>[],out:C.out,emit:C.emit,progress:r.progress,isTTY:!1,auth:x,telemetry:u});return f.interrupted()&&w!==3?(r.out("interrupted \u2014 no session saved"),await u.end({exit_code:130}),r.done(130)):(w===1&&r.out(u.supportFooter()),await u.end({exit_code:w}),r.done(w))}finally{f.dispose()}}catch(t){y&&await y({exit_code:1}).catch(()=>{});let n=t instanceof Error?t.message:String(t);r?.event({type:"error",message:`error: design failed: ${n}`});let s=r?d=>r.out(d):d=>process.stderr.write(d+`
12
- `);return s(`error: design failed: ${n}`),(process.env.ASSURANCE_LOG_LEVEL??"").toLowerCase()==="debug"&&t instanceof Error&&t.stack&&s(t.stack),s('hint: the full trace is in the file named on the "trace:" line at the start of this run'),r?r.done(1):1}}export{B as designTestsCommand};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b}from"./chunk-IQDWBTRJ.js";import"./chunk-GVIPTX6T.js";import"./chunk-BKM2LWU2.js";import"./chunk-2XMJ6YAE.js";import"./chunk-W6VD2XFO.js";import"./chunk-5EOX4MEY.js";import"./chunk-RZ4F3BHX.js";import"./chunk-C4G7RVJ6.js";import"./chunk-UR6MHSHU.js";export{b as telemetryBootstrap,a as telemetryEnvName};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-WJ5HDEVH.js";import"./chunk-UX2B7L6K.js";import"./chunk-XDHZMCTA.js";import"./chunk-C4G7RVJ6.js";import"./chunk-UR6MHSHU.js";export{a as runAgent};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as V,c as te}from"./chunk-JFAFKHDX.js";import{a as k,b as ee}from"./chunk-5KFS3GAZ.js";import{a as ne}from"./chunk-427OQS2N.js";import{d as Z}from"./chunk-NVGBE2DR.js";import{a as X}from"./chunk-GW5DWAXY.js";import"./chunk-T63R6QT4.js";import{e as Y,f as z,w as Q}from"./chunk-3STZLM5J.js";import{a as j,b as F}from"./chunk-L4JIMNKW.js";import{f as J,i as W}from"./chunk-M7WQM4UA.js";import"./chunk-WWNSD6FA.js";import"./chunk-IAHKTEET.js";import{e as L,f as A,g as P,h as x}from"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";var de=new Set(["approve","edit","reject"]);function ye(m){let{contextDir:f,graph:s,ops:oe,by:l}=m,N=m.mintable??ne(),T=J(f);if(s.latestHash!==T)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(s.latestHash)} but chain head is ${String(T)} \u2014 re-open and retry`}]};let C=[],h=[],M=new Set;for(let e of oe){if(s.appliedEvents.has(e.eventId)||M.has(e.eventId)){C.push(e.eventId);continue}M.add(e.eventId),h.push(e)}if(h.length===0)return{record:null,errors:null,applied:[],skipped:C,minted:[],staleDelta:[]};let o=[],$=[],I=[],v=[],b=[],O=[],_=[...m.judgements??[]],D=[],q=new Map,B=new Set,G=[],E=new Set,se=new Set(N),H=new Set;for(let e of h){if(!de.has(e.kind))continue;let n=e.target,t=s.resolve(n)?.cid??n;H.has(t)&&o.push({code:"MULTIPLE_TERMINAL_OPS",detail:`${n} has more than one terminal op in this turn \u2014 normalize latest-wins first`}),H.add(t)}let S=(e,n,t)=>{let r=s.resolve(n);if(!r)return o.push({code:"UNKNOWN_NODE",detail:`${e}: ${n} names nothing in the graph`}),null;let p=s.tipOf(r.cid);return p!==t||s.superseded.has(t)?(o.push({code:"EXPECTED_CID_MOVED",detail:`${e}: ${n} moved or was archived since it was displayed`,data:{tip:p}}),null):t};for(let e of h)if(e.kind==="approve"){let n=S("approve",e.target,e.expectedCid);n&&v.push({id:n,kind:"review-item",resolution:"approved",edit:null,reason:null,by:l})}else if(e.kind==="reject"){let n=S("reject",e.target,e.expectedCid);if(!n)continue;if(v.push({id:n,kind:"review-item",resolution:"rejected",edit:null,reason:e.reason,by:l}),e.redirectTo!==void 0){let t=s.resolve(e.redirectTo);if(!t||t.superseded){o.push({code:"UNKNOWN_NODE",detail:`reject.redirectTo: ${e.redirectTo} is not a live node`});continue}b.push({kind:"node",old:n,new:t.cid,reason:e.reason,by:l})}}else if(e.kind==="edit"){let n=S("edit",e.target,e.expectedCid);if(!n)continue;let t=s.getNode(n);if(!t){o.push({code:"UNKNOWN_NODE",detail:`edit: ${e.target} node file unreadable`});continue}let r={...t.content};for(let[c,u]of Object.entries(e.edit))u!==void 0&&(r[c]=u);if(typeof r.title=="string"&&!r.title.trim()){o.push({code:"EMPTY_TITLE",detail:`edit: ${e.target} edited title is empty`});continue}let p=A(t.label,r);if(p.length>0){for(let c of p)o.push({code:c.code,detail:`edit ${e.target}: ${c.detail}`});continue}let d=j(t.label,r);if(d===n){v.push({id:n,kind:"review-item",resolution:"approved",edit:null,reason:null,by:l});continue}$.push({cid:d,label:t.label,content:r}),b.push({kind:"node",old:n,new:d,reason:e.reason??"edited in chat",by:l}),v.push({id:d,kind:"review-item",resolution:"edited",edit:{...e.edit},reason:null,by:l})}else if(e.kind==="enhance"){if(!S("enhance",e.target,e.expectedCid))continue;for(let t of e.edges){let r=s.nodeLabel.get(t.src)??"(unknown)",p=s.nodeLabel.get(t.dst)??"(unknown)";for(let i of x(t.type,r,p,t.props))o.push({code:i.code,detail:`enhance ${e.target}: ${i.detail}`});let d=F(t.type,t.src,t.dst,t.props);if(s.edgesFrom(t.src).some(i=>i.ecid===d)||I.some(i=>i.ecid===d))continue;let c=Y(s,t.type,t.src,t.dst,G);c&&o.push(c);let u=z(s,t.type,t.src,t.dst);u&&o.push(u);let a=P(t.type)?.cardinality;if(a==="one-live-per-src"||a==="one-live-per-src-and-dst"){let i=`${t.type}|${t.src}`;E.has(i)&&o.push({code:"CARDINALITY_VIOLATION",detail:`${t.type} from ${t.src}: two one-live edges in one turn`}),E.add(i)}if(a==="one-live-per-src-and-dst"){let i=`${t.type}|dst|${t.dst}`;E.has(i)&&o.push({code:"CARDINALITY_VIOLATION",detail:`${t.type} onto ${t.dst}: two one-live edges in one turn (strict 1:1)`}),E.add(i)}I.push({ecid:d,type:t.type,src:t.src,dst:t.dst,props:t.props}),G.push({src:t.src,dst:t.dst,type:t.type})}}else if(e.kind==="add"){if(!se.has(e.label)){o.push({code:"GATED_LABEL",detail:`add: ${e.label} is not mintable in v1 (gate: ${N.join("|")})`,data:{gate:[...N]}});continue}let n=s.heads.get(e.convSourceId),t=s.convChains.get(e.convSourceId);if(typeof n!="string"||!t){o.push({code:"CONV_SOURCE_MISSING",detail:`add: ${e.convSourceId} is not a live conversation source`});continue}let r=s.getNode(n)?.content?.blob,p=typeof r=="string"?Z(f,r)?.toString("utf8")??"":"",d=ee(p,e.cite.turn);if(d===null){o.push({code:"BAD_ANCHOR",detail:`add: ${k(e.cite.turn)} does not resolve in ${e.convSourceId}`});continue}if(!d.includes(e.cite.quote)){o.push({code:"QUOTE_MISMATCH",detail:`add: quote is not verbatim within ${k(e.cite.turn)}`});continue}let c={...e.content,derived:!0},u=A(e.label,c);if(u.length>0){for(let g of u)o.push({code:g.code,detail:`add: ${g.detail}`});continue}let a=j(e.label,c),i={source_id:e.convSourceId,source_cid:n,anchor:k(e.cite.turn),quote:e.cite.quote};for(let g of x(L.DERIVES,"source",e.label,i))o.push({code:g.code,detail:`add: ${g.detail}`});$.push({cid:a,label:e.label,content:c}),I.push({ecid:F("DERIVES",n,a,i),type:L.DERIVES,src:n,dst:a,props:i}),e.rationale&&_.push({about:a,rationale:e.rationale,by:l});let y=Q(e.label,g=>B.has(g),s.names.keys());y!==null&&(B.add(y),O.push({cid:a,slug:y,by:l})),D.push({cid:a,...y!==null?{slug:y}:{}}),q.set(e.eventId,a)}if(o.length)return{record:null,errors:o};let U=new Date().toISOString();for(let e of h){if(e.kind==="add"){let n=q.get(e.eventId);n&&V(f,{ts:U,command:"extract-chat",id:n,verdict:"add",polarity:"preference",tag:e.label,by:l,event_id:e.eventId,target:n});continue}for(let n of te(e,{ts:U,command:"extract-chat",by:l}))V(f,n)}let K=h.map(e=>e.eventId).sort(),ie=W(f,{ts:new Date().toISOString(),proposal_id:null,nodes:$,edges:I,review:v,supersessions:b,...O.length>0?{names:O}:{},..._.length>0?{judgements:_}:{},event_ids:K,...m.sid?{sid:m.sid}:{},source_head_moves:{}},{expectPrev:T}),R=X(f),w=new Set;for(let e of b)if(e.kind==="node"){w.add(e.old);for(let n of R.edgesInto(e.old))w.add(n.src)}for(let e of D)w.add(e.cid);let re=[...w].map(e=>({cid:e,state:R.stale(R.tipOf(e))})).filter(e=>e.state!=="fresh");return{record:ie.record,errors:null,applied:K,skipped:C,minted:D,staleDelta:re}}export{ye as commitChatTurn};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b,c}from"./chunk-SY3HLQMV.js";import"./chunk-VGFTNLQQ.js";import"./chunk-L2TV4G56.js";import"./chunk-5KFS3GAZ.js";import"./chunk-NVGBE2DR.js";import"./chunk-L4JIMNKW.js";import"./chunk-M7WQM4UA.js";import"./chunk-WWNSD6FA.js";import"./chunk-IAHKTEET.js";import"./chunk-5YPBPZUR.js";import"./chunk-UR6MHSHU.js";export{c as makeChatController,b as questionStub,a as recommendationPicks};
@@ -1,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as o,b as i}from"./chunk-IQDWBTRJ.js";import{resolve as c}from"path";async function w(n,s,r={}){let e=i({verb:n,mode:"cli",contextRoot:c(process.cwd(),".context"),env:o(),write:r.write});try{let t=await s();return r.write&&t===0&&await e.lateBindContext(c(process.cwd(),".context")),t===1&&process.stderr.write(e.supportFooter()+`
3
- `),await e.end({exit_code:t}),t}catch(t){throw e.error("cli_crash"),process.stderr.write(e.supportFooter()+`
4
- `),await e.end({exit_code:1}),t}}export{w as a};
@@ -1,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as Q,b as A,d as Z}from"./chunk-L4JIMNKW.js";import{f as Ee,i as K}from"./chunk-M7WQM4UA.js";import{d as F,e as y,f as Y,g as le,h as pe}from"./chunk-5YPBPZUR.js";function Re(s,n){let r=s.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(r.length>60){let d=r.lastIndexOf("-",60);r=(d>0?r.slice(0,d):r.slice(0,60)).replace(/-+$/g,"")}if(!X.test(r))return null;let e=r;for(let d=2;n(e);d++)e=`${r}-${d}`;return X.test(e)?e:null}var xe={source:"src",usecase:"uc",scenario:"sc",ac:"ac",test:"t",gap:"gap",stylenote:"sty"};function Le(s,n,r){let e=xe[s];return Re(e?`${e} ${n}`:n,r)}var Ce={usecase:"uc",scenario:"sc",ac:"ac",test:"t",gap:"gap",stylenote:"sty"},Ge=/^(uc|sc|ac|t|gap|sty)-\d+$/i;function Se(s,n,r){let e=Ce[s];if(!e)return null;let d=new RegExp(`^${e}-(\\d+)$`),f=0;for(let l of r){let m=d.exec(l);if(!m)continue;let i=Number(m[1]);Number.isSafeInteger(i)&&i>f&&(f=i)}let a=f+1;for(;n(`${e}-${a}`);)a+=1;return`${e}-${a}`}var ye=/^L([1-9]\d*)-L([1-9]\d*)$/,Oe=/^img#(p[1-9]\d*-[1-9]\d*|i[1-9]\d*)$/;function ee(s){if(s==="img#whole")return{kind:"img-whole"};let n=Oe.exec(s);if(n)return{kind:"img-part",ref:n[1]};let r=ye.exec(s);return r?{kind:"lines",a:parseInt(r[1],10),b:parseInt(r[2],10)}:null}function be(s,n){let r=/^L(\d+)-L(\d+)$/.exec(n);if(!r)return null;let e=parseInt(r[1],10),d=parseInt(r[2],10),f=s.split(`
3
- `);return e<1||d<e||d>f.length?null:f.slice(e-1,d).map(a=>a.replace(/^\d+\| /,"")).join(`
4
- `)}function $e(s,n,r){let e=ee(n.anchor);if(s.format==="image")return e?.kind==="img-whole"?[]:[{code:"CITE_ANCHOR_INVALID",detail:`image cites are anchor-only (img#whole), got ${n.anchor}`}];if(e?.kind==="img-part")return new Set((s.images??[]).map(a=>a.ref)).has(e.ref)?[]:[{code:"CITE_ANCHOR_INVALID",detail:`anchor ${n.anchor} names no embedded image of this source version`}];if(!n.anchor||n.quote===void 0||n.quote==="")return[{code:"MISSING_CITE",detail:"text-kind cites need anchor+quote"}];let d=r!==null?be(r,n.anchor):null;return d===null?[{code:"BAD_ANCHOR",detail:`anchor ${n.anchor} does not resolve in the source`}]:d.includes(n.quote)?[]:[{code:"QUOTE_MISMATCH",detail:`quote is not verbatim within ${n.anchor}`}]}var X=/^[a-z0-9][a-z0-9-]{1,63}$/;function Ie(s,n,r,e){if(!n)return{error:{code:"SUPERSEDE_TARGET_MISSING",detail:"supersede verdict needs a target (slug or cid)"}};let d=s.resolve(n);return d?d.superseded||e.has(d.cid)?{error:{code:"ALREADY_SUPERSEDED",detail:`${n} is already superseded (tip: ${d.tip})`}}:d.cid===r?{error:{code:"SELF_SUPERSEDE",detail:"a node cannot supersede itself"}}:{targetCid:d.cid}:{error:{code:"UNKNOWN_SUPERSEDE_TARGET",detail:`${n} names nothing in the graph`}}}function ke(s,n,r,e,d=[]){if(!le(n)?.acyclic)return null;if(r===e)return{code:"EDGE_CYCLE",detail:`${n} ${r} \u2192 itself`};let a=i=>[...s.edgesFrom(i).filter(g=>g.type===n).map(g=>g.dst),...d.filter(g=>g.type===n&&g.src===i).map(g=>g.dst)],l=new Set,m=[e];for(;m.length>0;){let i=m.pop();if(i===r)return{code:"EDGE_CYCLE",detail:`${n} ${r} \u2192 ${e} closes a cycle`};l.has(i)||(l.add(i),m.push(...a(i)))}return null}function ze(s,n,r,e){let f=le(n)?.cardinality;if(f!=="one-live-per-src"&&f!=="one-live-per-src-and-dst")return null;let a=s.edgesFrom(r).filter(l=>l.type===n&&!s.superseded.has(l.dst));if(a.length>0)return{code:"CARDINALITY_VIOLATION",detail:`${n} from ${r} already has a live edge (${a[0].ecid}) \u2014 supersede it first`};if(f==="one-live-per-src-and-dst"&&e!==void 0){let l=s.edgesInto(e).filter(m=>m.type===n&&!s.superseded.has(m.src));if(l.length>0)return{code:"CARDINALITY_VIOLATION",detail:`${n} onto ${e} already has a live edge (${l[0].ecid}) \u2014 strict 1:1, supersede it first`}}return null}var fe=new Set(["high","med","low"]),te=s=>s.cites&&s.cites.length>0?s.cites:[s.cite];function re(s){let n=0;for(let r of s)typeof r=="object"&&r!==null&&"op"in r&&n++;return n===0?"flat":n===s.length?"ops":"mixed"}var De=/^c[1-9][0-9]*$/;function ve(s,n,r,e){let d=new Map,f=[],a=[];for(let[m,i]of n.entries()){let g=`${s}.updated.criteria[${m}]`;if(i.op==="keep"||i.op==="remove"){if(!De.test(i.ref??"")){e.push({code:"CRITERIA_REF_UNKNOWN",detail:`${g}: ref ${JSON.stringify(i.ref)} is not a c<N> criterion index`});continue}if(d.has(i.ref)){e.push({code:"CRITERIA_REF_DUPLICATE",detail:`${g}: ${i.ref} is already named by another op \u2014 every prior criterion appears in exactly one keep or remove`});continue}d.set(i.ref,i);let h=Number.parseInt(i.ref.slice(1),10);if(h>r.length){e.push({code:"CRITERIA_REF_UNKNOWN",detail:`${g}: ${i.ref} \u2014 the live target has ${r.length} criteria`});continue}if(r[h-1]!==i.text){e.push({code:"CRITERIA_REF_MISMATCH",detail:`${g}: ${i.ref} echo mismatch \u2014 the live target's criterion ${h} reads ${JSON.stringify(r[h-1])}, the op echoed ${JSON.stringify(i.text)} \u2014 re-read the node and re-emit`});continue}i.op==="remove"&&(f.push(i.text),(!i.reason||!i.reason.trim())&&e.push({code:"EMPTY_REASON",detail:`${g}: a remove op carries its reason`}))}else!i.text||!i.text.trim()?e.push({code:"EMPTY_CRITERION",detail:`${g}: set text is empty`}):a.push(i.text)}let l=[];for(let m=1;m<=r.length;m++)d.has(`c${m}`)||l.push(`c${m}`);l.length>0&&e.push({code:"CRITERIA_PARTITION_INCOMPLETE",detail:`${s}: prior criteria ${l.join(", ")} named by no keep/remove op \u2014 every prior criterion must be kept or removed (with a reason)`});for(let m of f)a.includes(m)&&e.push({code:"CRITERIA_OP_CONFLICT",detail:`${s}: ${JSON.stringify(m)} is removed AND re-set in the same update \u2014 drop one of the two ops`})}function Ze(s,n,r){let e=[],d=s.sources??[s.source],f=new Map(d.map(i=>[i.source_id,i.source_cid])),a=new Map;if(typeof n=="string")a.set(s.source.source_id,{media:r.mediaOf(s.source.source_cid),numberedText:n});else for(let[i,g]of n)a.set(i,g);for(let i of d)r.hasNode(i.source_cid)||e.push({code:"MISSING_SOURCE_NODE",detail:`source ${i.source_id} (${i.source_cid}) is not a committed node \u2014 ingest it first`});let l=(i,g)=>{let h=g.source_id??s.source.source_id;if(!f.has(h)){e.push({code:"CITE_SOURCE_UNKNOWN",detail:`${i}: cite source ${JSON.stringify(h)} is not in read_basis`});return}let o=a.get(h);if(!o){e.push({code:"MISSING_SOURCE_NODE",detail:`${i}: no citable text available for source ${h}`});return}for(let N of $e(o.media,g,o.numberedText))e.push({code:N.code,detail:`${i}: ${N.detail}`})},m=new Set;for(let i of s.use_cases){if(m.has(i.temp_ref)&&e.push({code:"DUP_TEMP_REF",detail:`duplicate temp_ref ${i.temp_ref}`}),m.add(i.temp_ref),(!i.title||!i.title.trim())&&e.push({code:"EMPTY_TITLE",detail:`${i.temp_ref}: title is empty`}),fe.has(i.risk)||e.push({code:"BAD_RISK",detail:`${i.temp_ref}: risk ${JSON.stringify(i.risk)} not in high|med|low`}),!i.cite||!i.cite.anchor)e.push({code:"MISSING_CITE",detail:`${i.temp_ref}: every derived use-case must carry a cite`});else for(let h of te(i))l(i.temp_ref,h);i.matches_existing&&!r.hasNode(i.matches_existing.cid)&&e.push({code:"UNKNOWN_MATCH",detail:`${i.temp_ref}: matches_existing ${i.matches_existing.cid} is not in the graph`});for(let[h,o]of(i.criteria??[]).entries())(!o.text||!o.text.trim())&&e.push({code:"EMPTY_CRITERION",detail:`${i.temp_ref}.criteria[${h}]: text is empty`}),!o.cite||!o.cite.anchor?e.push({code:"MISSING_CITE",detail:`${i.temp_ref}.criteria[${h}]: every criterion carries its own cite`}):l(`${i.temp_ref}.criteria[${h}]`,o.cite);let g=i.updated?.criteria??[];if(g.length>0){let h=re(g);if(h==="mixed")e.push({code:"CRITERIA_SHAPE_MIXED",detail:`${i.temp_ref}.updated.criteria mixes op-shaped (keep/set/remove) and {text, cite} entries \u2014 emit ONE shape for the whole array`});else if(h==="ops"){let o=g,N=i.matches_existing?Ue(r,i.matches_existing.cid):null;if(!N)e.push({code:"CRITERIA_REF_UNKNOWN",detail:`${i.temp_ref}: op-union criteria address a prior version \u2014 they need a resolvable matches_existing target`});else{let v=r.getNode(N.cid)?.content.criteria??[];ve(i.temp_ref,o,v,e)}for(let[v,R]of o.entries())R.op==="set"&&(!R.cite||!R.cite.anchor?e.push({code:"MISSING_CITE",detail:`${i.temp_ref}.updated.criteria[${v}]: a set op carries the proposing source's cite`}):l(`${i.temp_ref}.updated.criteria[${v}]`,R.cite))}else for(let[o,N]of g.entries())(!N.text||!N.text.trim())&&e.push({code:"EMPTY_CRITERION",detail:`${i.temp_ref}.updated.criteria[${o}]: text is empty`}),!N.cite||!N.cite.anchor?e.push({code:"MISSING_CITE",detail:`${i.temp_ref}.updated.criteria[${o}]: every updated criterion carries its own cite`}):l(`${i.temp_ref}.updated.criteria[${o}]`,N.cite)}}return e}function we(s,n,r){return`${s}:${n}:${r}`}function Te(s,n,r,e){let d=`${n}:${r}:`,f=0;for(let a of s.appliedEvents){if(!a.startsWith(d))continue;let l=a.slice(d.length);if(!/^\d+$/.test(l))continue;let m=Number.parseInt(l,10);m>f&&(f=m)}return Array.from({length:e},(a,l)=>we(n,r,f+1+l))}function Ae(s,n){let r=new Map;for(let[a,l]of s.superseded)typeof l=="string"&&l!==a&&r.set(l,[...r.get(l)??[],a]);let e=[],d=[n],f=new Set;for(;d.length>0;){let a=d.pop();f.has(a)||(f.add(a),e.push(a),d.push(...r.get(a)??[]))}return e}function Ue(s,n){let r=s.resolve(n);if(r===null)return null;let e=r.cid;if(s.superseded.has(e)){let d=s.tipOf(e);return s.superseded.has(d)?null:{cid:d,redirected:!0}}return{cid:e,redirected:!1}}function et(s){let{contextDir:n,graph:r,proposal:e,proposalId:d,verdicts:f,by:a,allowStaleBasis:l,extractorVersion:m,autoName:i}=s,g=Ee(n);if(!l&&e.read_basis!==g)return{record:null,errors:[{code:"STALE_BASIS",detail:`proposal read_basis ${String(e.read_basis)} != latest ${String(g)}`}]};for(let t of e.sources??[e.source])if(!r.hasNode(t.source_cid))return{record:null,errors:[{code:"MISSING_SOURCE_NODE",detail:`source ${t.source_id} (${t.source_cid}) is not a committed node \u2014 ingest it first`}]};let h=new Map((e.sources??[e.source]).map(t=>[t.source_id,t.source_cid])),o=[],N=[],v=new Map,R=[],W=r.mediaOf(e.source.source_cid),j=new Set,V=[],k=[],ie=[],G=[],se=[],oe=[],ne=new Set,me=new Set,z=(t,u,O)=>{let U=Ie(r,u.supersedeTarget,O,ne);if("error"in U){o.push({code:U.error.code,detail:`${t}: ${U.error.detail}`});return}ne.add(U.targetCid),se.push({kind:"node",old:U.targetCid,new:O,reason:u.reason??`superseded via review by ${a.id}`,by:a})};for(let t of e.use_cases){let u=f.get(t.temp_ref)??{resolution:"skipped"};j.has(t.temp_ref)&&o.push({code:"DUP_TEMP_REF",detail:`duplicate temp_ref ${t.temp_ref}`}),j.add(t.temp_ref),(!t.title||!t.title.trim())&&o.push({code:"EMPTY_TITLE",detail:`${t.temp_ref}: title is empty`}),fe.has(t.risk)||o.push({code:"BAD_RISK",detail:`${t.temp_ref}: risk ${JSON.stringify(t.risk)} not in high|med|low`});let O=ee(t.cite?.anchor??""),U=t.cite?.source_id!==void 0&&h.has(t.cite.source_id)?r.mediaOf(h.get(t.cite.source_id)):W;if(U.format==="image"){if(O?.kind!=="img-whole"){o.push({code:t.cite?.anchor?"CITE_ANCHOR_INVALID":"MISSING_CITE",detail:`${t.temp_ref}: image cites are anchor-only (img#whole)`});continue}}else if(O?.kind==="img-part"){if(!(U.images??[]).some(p=>p.ref===O.ref)){o.push({code:"CITE_ANCHOR_INVALID",detail:`${t.temp_ref}: anchor ${t.cite?.anchor} names no embedded image of this source version`});continue}}else if(!t.cite||!t.cite.anchor||!t.cite.quote){o.push({code:"MISSING_CITE",detail:`${t.temp_ref}: every derived use-case must cite anchor+quote`});continue}u.resolution==="edited"&&u.edit&&(u.edit.title!==void 0&&!u.edit.title.trim()&&o.push({code:"EMPTY_TITLE",detail:`${t.temp_ref}: edited title is empty`}),u.edit.risk!==void 0&&!fe.has(u.edit.risk)&&o.push({code:"BAD_RISK",detail:`${t.temp_ref}: edited risk ${JSON.stringify(u.edit.risk)} invalid`}));let ae=Z({title:u.edit?.title??t.title,description:t.description,summary:u.edit?.summary??t.summary,actors:t.actors,value:t.value,risk:u.edit?.risk??t.risk,...t.criteria&&t.criteria.length>0?{criteria:t.criteria.map(c=>c.text)}:{}}),S=Q("usecase",ae),ue=t.cite.source_id??e.source.source_id,he=h.get(ue);if(t.cite.source_id!==void 0&&he===void 0){o.push({code:"CITE_SOURCE_UNKNOWN",detail:`${t.temp_ref}: cite source ${JSON.stringify(ue)} is not in read_basis`});continue}let q={source_id:ue,source_cid:he??e.source.source_cid,anchor:t.cite.anchor,...t.cite.quote?{quote:t.cite.quote}:{}};if(t.matches_existing&&!r.hasNode(t.matches_existing.cid)){o.push({code:"UNKNOWN_MATCH",detail:`${t.temp_ref}: matches_existing ${t.matches_existing.cid} is not in the graph`});continue}let $=t.matches_existing?.cid??(r.hasNode(S)?S:null);if($&&r.superseded.has($)){let c=r.tipOf($);$=r.superseded.has(c)?null:c}if($&&t.matches_existing&&(r.trust.get($)??null)==="derived"){let c=t.updated?.criteria??[];if(t.changed&&c.length>0&&re(c)==="ops"&&(u.resolution==="approved"||u.resolution==="edited")){o.push({code:"UC_UNREVIEWED",detail:`${t.temp_ref}: merge target ${$.slice(0,19)} is unreviewed (derived) \u2014 bless it first (kane-cli context review) and re-propose the merge`});continue}let p=(s.probeHits??[]).find(_=>_.tempRef===t.temp_ref&&_.candidateCid===$);R.push({tempRef:t.temp_ref,candidate_cid:$,score:p?.score??1,scorer:p?.scorer??"lexical_fallback"}),$=null}if($){if(t.changed&&(u.resolution==="approved"||u.resolution==="edited")){let c=t.updated;if(!c||Object.keys(c).length===0){o.push({code:"CHANGED_NEEDS_PAYLOAD",detail:`${t.temp_ref}: changed:true needs an updated{...} payload naming the moved fields`});continue}let p=r.getNode($)?.content??{},_=c.criteria??[],x=_.length>0?re(_):"flat";if(x==="mixed"){o.push({code:"CRITERIA_SHAPE_MIXED",detail:`${t.temp_ref}.updated.criteria mixes op-shaped (keep/set/remove) and {text, cite} entries \u2014 emit ONE shape for the whole array`});continue}if(x==="ops"){let C=_,b=p.criteria??[],D=o.length;ve(t.temp_ref,C,b,o);for(let[H,B]of C.entries())B.op==="set"&&(!B.cite||!B.cite.anchor)&&o.push({code:"MISSING_CITE",detail:`${t.temp_ref}.updated.criteria[${H}]: a set op carries the proposing source's cite`});if(o.length>D)continue;let I=C.filter(H=>H.op!=="remove").map(H=>H.text),T=Z({title:u.edit?.title??c.title??String(p.title??t.title),...c.description??p.description?{description:c.description??p.description}:{},...u.edit?.summary??c.summary??p.summary?{summary:u.edit?.summary??c.summary??p.summary}:{},...c.actors??p.actors?{actors:c.actors??p.actors}:{},...c.value??p.value?{value:c.value??p.value}:{},risk:u.edit?.risk??c.risk??String(p.risk??t.risk),...I.length>0?{criteria:I}:{}}),P=Q("usecase",T);if(P!==$){for(let E of Y("usecase",T))o.push({code:E.code,detail:`${t.temp_ref}: ${E.detail}`});V.push({cid:P,label:F.USECASE,content:T});for(let E of te(t)){let M=E.source_id??e.source.source_id,w=h.get(M);if(!w){o.push({code:"CITE_SOURCE_UNKNOWN",detail:`${t.temp_ref}: cite source ${JSON.stringify(M)} is not in read_basis`});continue}let L={source_id:M,source_cid:w,anchor:E.anchor,...E.quote?{quote:E.quote}:{}};k.push({ecid:A("DERIVES",w,P,L),type:y.DERIVES,src:w,dst:P,props:L})}let B=Ae(r,$).flatMap(E=>r.edgesInto(E)).filter(E=>E.type===y.DERIVES&&typeof E.props.claim=="string");for(let E of C){if(E.op!=="keep")continue;let M=new Set;for(let w of B){let L=w.props;if(L.claim!==E.text)continue;let ge=`${L.source_id}|${L.source_cid}|${L.anchor}`;if(M.has(ge))continue;M.add(ge);let _e={...w.props};k.push({ecid:A("DERIVES",w.src,P,_e),type:y.DERIVES,src:w.src,dst:P,props:_e})}}for(let E of C){if(E.op!=="set")continue;let M=E.cite.source_id??e.source.source_id,w=h.get(M);if(!w){o.push({code:"CITE_SOURCE_UNKNOWN",detail:`${t.temp_ref}: set cite source ${JSON.stringify(M)} is not in read_basis`});continue}let L={source_id:M,source_cid:w,anchor:E.cite.anchor,...E.cite.quote?{quote:E.cite.quote}:{},claim:E.text};k.push({ecid:A("DERIVES",w,P,L),type:y.DERIVES,src:w,dst:P,props:L})}for(let E of C)E.op==="remove"&&N.push({about:$,ref:E.ref,text:E.text,reason:E.reason});z(t.temp_ref,{resolution:"supersede",supersedeTarget:$,reason:u.reason??`criteria merge: ${e.source.source_id} (${C.filter(E=>E.op==="keep").length} kept, ${C.filter(E=>E.op==="set").length} set, ${C.filter(E=>E.op==="remove").length} removed)`},P),G.push({id:P,kind:"review-item",resolution:u.resolution,edit:u.resolution==="edited"?{...u.edit}:null,reason:null,by:a});continue}}else{let C=_.map(I=>typeof I=="string"?{text:I,cite:void 0}:I),b=Z({title:u.edit?.title??c.title??String(p.title??t.title),...c.description??p.description?{description:c.description??p.description}:{},...u.edit?.summary??c.summary??p.summary?{summary:u.edit?.summary??c.summary??p.summary}:{},...c.actors??p.actors?{actors:c.actors??p.actors}:{},...c.value??p.value?{value:c.value??p.value}:{},risk:u.edit?.risk??c.risk??String(p.risk??t.risk),...c.criteria?C.length>0?{criteria:C.map(I=>I.text)}:{}:p.criteria?{criteria:p.criteria}:{}}),D=Q("usecase",b);if(D!==$){for(let I of Y("usecase",b))o.push({code:I.code,detail:`${t.temp_ref}: ${I.detail}`});V.push({cid:D,label:F.USECASE,content:b}),k.push({ecid:A("DERIVES",q.source_cid,D,q),type:y.DERIVES,src:q.source_cid,dst:D,props:q});for(let I of C){if(!I.cite)continue;let T={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:I.cite.anchor,...I.cite.quote?{quote:I.cite.quote}:{},claim:I.text};k.push({ecid:A("DERIVES",T.source_cid,D,T),type:y.DERIVES,src:T.source_cid,dst:D,props:T})}z(t.temp_ref,{resolution:"supersede",supersedeTarget:$,reason:u.reason??`matches-but-changed: ${e.source.source_id} moved (${Object.keys(c).join(", ")})`},D),G.push({id:D,kind:"review-item",resolution:u.resolution,edit:u.resolution==="edited"?{...u.edit}:null,reason:null,by:a});continue}for(let I of C){if(!I.cite)continue;let T={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:I.cite.anchor,...I.cite.quote?{quote:I.cite.quote}:{},claim:I.text};k.push({ecid:A("DERIVES",T.source_cid,$,T),type:y.DERIVES,src:T.source_cid,dst:$,props:T})}}}if(t.changed&&u.resolution==="skipped"){let c=t.updated?.criteria??[];c.length>0&&re(c)==="ops"&&G.push({id:$,kind:"pending_update",resolution:"pending",edit:{temp_ref:t.temp_ref,source_id:e.source.source_id,updated:t.updated},reason:t.change_note??null,by:a})}if(u.resolution!=="rejected"){for(let c of te(t)){let p=c.source_id??e.source.source_id,_=h.get(p);if(!_){o.push({code:"CITE_SOURCE_UNKNOWN",detail:`${t.temp_ref}: cite source ${JSON.stringify(p)} is not in read_basis`});continue}let x={source_id:p,source_cid:_,anchor:c.anchor,...c.quote?{quote:c.quote}:{}};k.push({ecid:A("DERIVES",_,$,x),type:y.DERIVES,src:_,dst:$,props:x})}(u.resolution==="approved"||u.resolution==="edited"||u.resolution==="supersede")&&G.push({id:$,kind:"review-item",resolution:"approved",edit:null,reason:null,by:a}),u.resolution==="supersede"&&z(t.temp_ref,u,$)}continue}for(let c of Y("usecase",ae))o.push({code:c.code,detail:`${t.temp_ref}: ${c.detail}`});for(let c of pe(y.DERIVES,"source","usecase",q))o.push({code:c.code,detail:`${t.temp_ref}: ${c.detail}`});V.push({cid:S,label:F.USECASE,content:ae}),v.set(t.temp_ref,S),k.push({ecid:A("DERIVES",q.source_cid,S,q),type:y.DERIVES,src:q.source_cid,dst:S,props:q});for(let c of te(t).slice(1)){let p=c.source_id??e.source.source_id,_=h.get(p);if(!_){o.push({code:"CITE_SOURCE_UNKNOWN",detail:`${t.temp_ref}: cite source ${JSON.stringify(p)} is not in read_basis`});continue}let x={source_id:p,source_cid:_,anchor:c.anchor,...c.quote?{quote:c.quote}:{}};for(let C of pe(y.DERIVES,"source","usecase",x))o.push({code:C.code,detail:`${t.temp_ref}: ${C.detail}`});k.push({ecid:A("DERIVES",_,S,x),type:y.DERIVES,src:_,dst:S,props:x})}for(let c of t.criteria??[]){let p=c.cite.source_id??e.source.source_id,_=h.get(p);if(!_){o.push({code:"CITE_SOURCE_UNKNOWN",detail:`${t.temp_ref}: criterion cite source ${JSON.stringify(p)} is not in read_basis`});continue}let x={source_id:p,source_cid:_,anchor:c.cite.anchor,...c.cite.quote?{quote:c.cite.quote}:{},claim:c.text};k.push({ecid:A("DERIVES",x.source_cid,S,x),type:y.DERIVES,src:x.source_cid,dst:S,props:x})}for(let c of t.depends_on_hint??[]){let p=b=>b.toLowerCase().trim().replace(/\s+/g," "),_=null,x=r.resolve(c);if(x&&!x.superseded&&r.nodeLabel.get(x.cid)===F.USECASE&&(_=x.cid),!_){for(let{cid:b,content:D}of r.byLabel(F.USECASE))if(!r.superseded.has(b)&&p(String(D.title??""))===p(c)){_=b;break}}if(!_){let b=V.find(D=>D.label===F.USECASE&&p(String(D.content.title??""))===p(c));b&&(_=b.cid)}!_||_===S||ke(r,y.DEPENDS_ON,S,_,ie)||ie.some(b=>b.src===S&&b.dst===_)||(k.push({ecid:A(y.DEPENDS_ON,S,_,{reason:"extract hint"}),type:y.DEPENDS_ON,src:S,dst:_,props:{reason:"extract hint"}}),ie.push({src:S,dst:_,type:y.DEPENDS_ON}))}if((u.resolution==="approved"||u.resolution==="edited"||u.resolution==="supersede")&&r.superseded.get(S)===null&&!ne.has(S)&&se.push({kind:"node",old:S,new:S,reason:`re-minted after tombstone via review by ${a.id}`,by:a}),i){let c=Se("usecase",p=>me.has(p),r.names.keys());c!==null&&!r.nameOf.has(S)&&(me.add(c),oe.push({cid:S,slug:c,by:a}))}u.resolution==="approved"?G.push({id:S,kind:"review-item",resolution:"approved",edit:null,reason:null,by:a}):u.resolution==="edited"?G.push({id:S,kind:"review-item",resolution:"edited",edit:{...u.edit},reason:null,by:a}):u.resolution==="rejected"?G.push({id:S,kind:"review-item",resolution:"rejected",edit:null,reason:u.reason??null,by:a}):u.resolution==="supersede"&&(G.push({id:S,kind:"review-item",resolution:"approved",edit:null,reason:u.reason??null,by:a}),z(t.temp_ref,u,S))}if(o.length)return{record:null,errors:o};let ce=new Date().toISOString(),Ne=(e.sources?.length??0)>1||(e.extraction_claims?.length??0)>0,de;if(Ne){let t=[];if(e.extraction_claims==null)t.push({source_id:e.source.source_id,source_cid:e.source.source_cid,completeness:"complete",...m?{extractor_version:m}:{},at:ce});else{let u=new Map(e.extraction_claims.map(O=>[O.source_id,O.completeness]));for(let O of e.sources??[e.source]){let U=u.get(O.source_id)??null;U!==null&&t.push({source_id:O.source_id,source_cid:O.source_cid,completeness:U,...m?{extractor_version:m}:{},at:ce})}}de=t}else de=e.source.source_cid;let J=[];for(let t of s.probeHits??[])J.push({...v.has(t.tempRef)?{new_cid:v.get(t.tempRef)}:{},candidate_cid:t.candidateCid,score:t.score,scorer:t.scorer,probe_basis:null});for(let t of R){let u=v.get(t.tempRef);J.some(O=>O.new_cid===u&&O.candidate_cid===t.candidate_cid)||J.push({...u!==void 0?{new_cid:u}:{},candidate_cid:t.candidate_cid,score:t.score,scorer:t.scorer,probe_basis:null})}return{record:K(n,{ts:ce,proposal_id:d,...d!=null?{extraction_of:de}:{},...d!=null&&m?{extractor_version:m}:{},...N.length>0?{criteria_removed:N}:{},...J.length>0?{dedup_hits:J}:{},nodes:V,edges:k,review:G,supersessions:se,...oe.length>0?{names:oe}:{},...s.judgements&&s.judgements.length>0?{judgements:s.judgements}:{},...s.eventIds&&s.eventIds.length>0?{event_ids:s.eventIds}:s.sid?{event_ids:Te(r,s.sid,"extract",1)}:{},...s.sid?{sid:s.sid}:{},source_head_moves:{}},{expectPrev:g}).record,errors:null}}function tt(s){let{contextDir:n,graph:r,verdicts:e,by:d}=s,f=[],a=[],l=[],m=[],i=new Set;for(let[h,o]of e){if(o.resolution==="skipped")continue;let N=r.resolve(h);if(!N){f.push({code:"UNKNOWN_NODE",detail:`${h} names nothing in the graph`});continue}if(N.superseded){f.push({code:"SUPERSEDED_TARGET",detail:`${h} is superseded \u2014 review the tip (${N.tip})`});continue}let v=N.cid;if(o.resolution==="approved")l.push({id:v,kind:"review-item",resolution:"approved",edit:null,reason:null,by:d});else if(o.resolution==="rejected")s.holdArchives?l.push({id:v,kind:"pending_archive",resolution:"pending",edit:null,reason:o.reason??null,by:d}):l.push({id:v,kind:"review-item",resolution:"rejected",edit:null,reason:o.reason??null,by:d});else if(o.resolution==="edited"){let R=r.getNode(v);if(!R){f.push({code:"UNKNOWN_NODE",detail:`${h}: node file unreadable`});continue}let W={...R.content,...o.edit?.title!==void 0?{title:o.edit.title}:{},...o.edit?.summary!==void 0?{summary:o.edit.summary}:{},...o.edit?.risk!==void 0?{risk:o.edit.risk}:{}},j=Y(R.label,W);if(j.length>0){for(let k of j)f.push({code:k.code,detail:`${h}: ${k.detail}`});continue}let V=Q(R.label,W);if(V===v){l.push({id:v,kind:"review-item",resolution:"approved",edit:null,reason:null,by:d});continue}a.push({cid:V,label:R.label,content:W}),i.add(v),m.push({kind:"node",old:v,new:V,reason:o.reason??"edited in review",by:d}),l.push({id:V,kind:"review-item",resolution:"edited",edit:{...o.edit},reason:null,by:d})}else if(o.resolution==="supersede"){let R=Ie(r,o.supersedeTarget,v,i);if("error"in R){f.push({code:R.error.code,detail:`${h}: ${R.error.detail}`});continue}i.add(R.targetCid),s.holdArchives?l.push({id:R.targetCid,kind:"pending_archive",resolution:"pending",edit:null,reason:`supersede by ${v}${o.reason?` \u2014 ${o.reason}`:""}`,by:d}):(m.push({kind:"node",old:R.targetCid,new:v,reason:o.reason??`superseded via review by ${d.id}`,by:d}),l.push({id:v,kind:"review-item",resolution:"approved",edit:null,reason:o.reason??null,by:d}))}}return f.length?{record:null,errors:f}:l.length===0&&m.length===0?{record:null,errors:[{code:"NO_VERDICTS",detail:"every item was skipped \u2014 nothing to commit"}]}:{record:K(n,{ts:new Date().toISOString(),proposal_id:null,nodes:a,edges:[],review:l,supersessions:m,source_head_moves:{}},{expectPrev:r.latestHash}).record,errors:null}}function rt(s){let{contextDir:n,graph:r,survivor:e,merged:d,reason:f,by:a}=s,l=r.resolve(e),m=r.resolve(d);return l?m?l.superseded||m.superseded?{record:null,errors:[{code:"ALREADY_SUPERSEDED",detail:"a side of the pair is already superseded \u2014 the pair is drained"}]}:l.cid===m.cid?{record:null,errors:[{code:"SELF_SUPERSEDE",detail:"a pair cannot merge a node into itself"}]}:{record:K(n,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:m.cid,new:l.cid,reason:f??`pair merge: duplicate of ${e}`,by:a}],source_head_moves:{}},{expectPrev:r.latestHash}).record,errors:null}:{record:null,errors:[{code:"UNKNOWN_NODE",detail:`${d} names nothing in the graph`}]}:{record:null,errors:[{code:"UNKNOWN_NODE",detail:`${e} names nothing in the graph`}]}}function it(s){let{contextDir:n,graph:r,assignments:e,by:d}=s,f=[],a=[],l=new Set;for(let{ref:i,slug:g}of e){if(!X.test(g)){f.push({code:"BAD_SLUG",detail:`${JSON.stringify(g)} \u2014 slugs are kebab-case ${String(X)}`});continue}let h=r.resolve(i);if(!h){f.push({code:"UNKNOWN_REF",detail:`${i} names nothing in the graph`});continue}if(h.superseded){f.push({code:"SUPERSEDED_TARGET",detail:`${i} is superseded \u2014 name the tip instead (${h.tip})`});continue}let o=r.names.get(g);if(o!==void 0&&!r.superseded.has(o)&&o!==h.cid||l.has(g)){f.push({code:"SLUG_TAKEN",detail:`${g} already names ${o??"another node in this record"}`});continue}l.add(g),a.push({cid:h.cid,slug:g,by:d})}return f.length?{record:null,errors:f}:a.length===0?{record:null,errors:[{code:"NO_ASSIGNMENTS",detail:"nothing to name"}]}:{record:K(n,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],names:a,source_head_moves:{}},{expectPrev:r.latestHash}).record,errors:null}}function st(s){let{contextDir:n,graph:r,sourceId:e,reason:d,by:f}=s,a=r.heads.get(e);return a===void 0?{record:null,errors:[{code:"UNKNOWN_SOURCE",detail:`no source ${e} in the graph`}]}:a===null?{record:null,errors:[{code:"ALREADY_RETIRED",detail:`source ${e} is already retired`}]}:{record:K(n,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:a,new:null,reason:d??`retired source ${e}`,by:f}],source_head_moves:{[e]:null},names:[]},{expectPrev:r.latestHash}).record,errors:null}}export{ee as a,be as b,$e as c,X as d,ke as e,ze as f,te as g,re as h,ve as i,Ze as j,we as k,Te as l,Ue as m,et as n,tt as o,rt as p,it as q,st as r,Re as s,xe as t,Le as u,Ge as v,Se as w};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- var l="assurance/context@1";var u={source:{hashed:["blob","source_id"],required:["blob","source_id"],enums:{}},usecase:{hashed:["actors","criteria","derived","description","risk","summary","title","value"],required:["derived","risk","title"],enums:{risk:["high","med","low"]}},scenario:{hashed:["case_type","derived","description","intent","parameters","tags","technique_notes","title"],required:["case_type","derived","intent","title"],enums:{case_type:["happy","negative","boundary","edge","security","a11y","perf","i18n"]}},ac:{hashed:["derived","expected_answer","kind","measurable","risk","text"],required:["derived","risk","text"],enums:{risk:["high","med","low"],kind:["presence","forbidden-presence","count","delta","state-transition","absolute","bound","propagation","latency","graded"]}},test:{hashed:["check","config","definitionId","derived","objectives_blob","surface_required","test_md_blob","title"],required:["definitionId","derived","title"],enums:{}},gap:{hashed:["derived","kind","question","ref","risk","risk_rationale","text","uc"],required:["derived","kind"],enums:{kind:["ambiguous","incomplete","contradictory","unmeasurable","missing-expected-result","budget-evicted","invariant-unexercised"],risk:["high","med","low"]}},stylenote:{hashed:["derived","learned_from_kind","statement","tags","text"],unhashed:["learned_from"],required:["derived","learned_from_kind","statement"],enums:{learned_from_kind:["edit","directed-edit","mistake","usage"]}}},f={DERIVES:{src:["source"],dst:["usecase","ac","scenario","test"],salient:["anchor","source_cid","source_id"],optionalSalient:["claim"],props:["anchor","claim","quote","source_cid","source_id"],pin:{comparesTo:"source_head"},cardinality:"many",acyclic:!1},belongs_to:{src:["scenario"],dst:["usecase"],salient:[],props:[],pin:{comparesTo:"dst_tip"},cardinality:"one-live-per-src",acyclic:!1},scoped_to:{src:["ac"],dst:["scenario","usecase"],salient:[],props:[],pin:{comparesTo:"dst_tip"},cardinality:"one-live-per-src",acyclic:!1},exercises:{src:["scenario"],dst:["ac"],salient:[],props:[],pin:{comparesTo:"dst_tip"},cardinality:"many",acyclic:!1},verifies:{src:["test"],dst:["ac"],salient:[],props:[],pin:{comparesTo:"dst_tip"},cardinality:"many",acyclic:!1},automates:{src:["test"],dst:["scenario"],salient:[],props:[],pin:{comparesTo:"dst_tip"},cardinality:"one-live-per-src-and-dst",acyclic:!1},depends_on:{src:["usecase","scenario"],dst:["usecase","scenario"],salient:[],props:["reason"],pin:{comparesTo:"dst_tip"},cardinality:"many",acyclic:!0},reuses:{src:["test"],dst:["test"],salient:[],props:[],pin:{comparesTo:"dst_tip"},cardinality:"many",acyclic:!0},annotates:{src:["gap","stylenote"],dst:["source","usecase","scenario","ac","test"],salient:[],props:["reason"],pin:{comparesTo:"dst_tip"},cardinality:"many",acyclic:!1}},E=["presence","forbidden-presence","count","delta","state-transition","absolute","bound","propagation","latency","graded"];var g={presence:{operators:["exists","forall"],baseline:"null",requires:[]},"forbidden-presence":{operators:["exists","forall"],baseline:"null",requires:[]},count:{operators:["equals","gte","lte"],baseline:"null",requires:[],operand_forms:["literal","derived"]},delta:{operators:["changed-by"],baseline:"required",requires:[]},"state-transition":{operators:["changed-by","equals"],baseline:"required",requires:[]},absolute:{operators:["equals","contains","gte","lte"],baseline:"null",requires:[]},bound:{operators:["gte","lte"],baseline:"null",requires:[]},propagation:{operators:["exists","equals"],baseline:"null",requires:[]},latency:{operators:["lte"],baseline:"null",requires:["within"]},graded:{operators:["gte"],baseline:"null",requires:["metric","threshold"]}},y=Object.freeze({SOURCE:"source",USECASE:"usecase",SCENARIO:"scenario",AC:"ac",TEST:"test",GAP:"gap",STYLENOTE:"stylenote"}),h=Object.freeze({DERIVES:"DERIVES",BELONGS_TO:"belongs_to",SCOPED_TO:"scoped_to",EXERCISES:"exercises",VERIFIES:"verifies",AUTOMATES:"automates",DEPENDS_ON:"depends_on",REUSES:"reuses",ANNOTATES:"annotates"});function c(n,s,i){let r=[],e=g[n];if(!e)return r.push({code:"BAD_CHECK",detail:`${i}.kind ${JSON.stringify(n)} not in ${E.join("|")}`}),r;let o=s.operator;o!==void 0&&!e.operators.includes(o)&&r.push({code:"BAD_CHECK",detail:`${i}: operator ${JSON.stringify(o)} illegal for kind "${String(n)}" (legal: ${e.operators.join("|")})`});for(let a of e.requires)(s[a]===void 0||s[a]===null||s[a]==="")&&r.push({code:"BAD_CHECK",detail:`${i}: kind "${String(n)}" requires "${a}"`});e.baseline==="null"&&s.baseline!==void 0&&s.baseline!==null&&r.push({code:"BAD_CHECK",detail:`${i}: kind "${String(n)}" must carry baseline null (only delta/state-transition have one)`});let t=s.operand;if(t!==null&&typeof t=="object"&&!Array.isArray(t)){let a=Object.keys(t),d=t.derived;(!(e.operand_forms?.includes("derived")??!1)||a.length!==1||a[0]!=="derived"||typeof d!="string"||!d.trim())&&r.push({code:"BAD_CHECK",detail:`${i}: object operand is only the count derivation form {derived: "<how the runtime value is computed>"}`})}return r}function m(n,s){let i=u[n];if(!i)return[{code:"UNKNOWN_LABEL",detail:`unknown node label ${JSON.stringify(n)}`}];let r=[];for(let e of Object.keys(s))s[e]!==void 0&&!i.hashed.includes(e)&&!(i.unhashed??[]).includes(e)&&r.push({code:"UNKNOWN_FIELD",detail:`${n}.${e} is not in the ${l} schema`});for(let e of i.required)(s[e]===void 0||s[e]===null)&&r.push({code:"MISSING_FIELD",detail:`${n}.${e} is required`});for(let[e,o]of Object.entries(i.enums)){let t=s[e];t!==void 0&&!o.includes(t)&&r.push({code:"BAD_ENUM",detail:`${n}.${e} ${JSON.stringify(t)} not in ${o.join("|")}`})}if(n==="test"&&s.check&&typeof s.check=="object"){let e=s.check;r.push(...c(e.kind,e,"test.check"))}if(n==="ac"&&s.expected_answer&&typeof s.expected_answer=="object"){let e=s.expected_answer;r.push(...c(s.kind??e.kind,e,"ac.expected_answer"))}return r}function p(n){return f[n]}function S(n,s,i,r){let e=p(n);if(!e)return[{code:"UNKNOWN_EDGE_TYPE",detail:`unknown edge type ${JSON.stringify(n)}`}];let o=[];e.src.includes(s)||o.push({code:"ILLEGAL_EDGE",detail:`${n} src must be ${e.src.join("|")}, got ${s}`}),e.dst.includes(i)||o.push({code:"ILLEGAL_EDGE",detail:`${n} dst must be ${e.dst.join("|")}, got ${i}`}),n==="depends_on"&&s!==i&&o.push({code:"ILLEGAL_EDGE",detail:`depends_on links same-label nodes only, got ${s}\u2192${i}`});for(let t of e.salient)(r[t]===void 0||r[t]===null)&&o.push({code:"MISSING_SALIENT",detail:`${n}.props.${t} is salient (inside the ecid) and required`});for(let t of Object.keys(r))r[t]!==void 0&&(e.props.includes(t)||o.push({code:"UNKNOWN_EDGE_PROP",detail:`${n}.props.${t} is not in the ${l} schema`}));return o}function k(n,s){let i=u[n];if(!i)return s;let r={};for(let e of i.hashed)s[e]!==void 0&&(r[e]=s[e]);return r}function N(n,s){let i=p(n);if(!i)return s;let r={};for(let e of i.salient)s[e]!==void 0&&(r[e]=s[e]);for(let e of i.optionalSalient??[])s[e]!==void 0&&(r[e]=s[e]);return r}export{l as a,u as b,f as c,y as d,h as e,m as f,p as g,S as h,k as i,N as j};
@@ -1,11 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{g as G}from"./chunk-EV3EHXEI.js";import{a as q,b as X,k as Z}from"./chunk-F7WKDMX7.js";import{a as z}from"./chunk-VOHQA2SP.js";import{c as U}from"./chunk-ZLCZDAEX.js";import{a as M,b as Y,f as V,g as H,h as F,i as K}from"./chunk-SE6WNCYU.js";import{b as B}from"./chunk-NVGBE2DR.js";import{a as D}from"./chunk-CH273NAE.js";import{a as O}from"./chunk-GW5DWAXY.js";import{x as k}from"./chunk-C4G7RVJ6.js";import{existsSync as Te}from"fs";import{basename as $e}from"path";import{appendFileSync as de,mkdirSync as le}from"fs";import{homedir as me}from"os";import{dirname as fe,join as pe}from"path";function W(t,r){let e=/^(DOCX_[A-Z_]+):/.exec(r)?.[1];if(e)try{let o=process.env.KANE_CONTEXT_REFUSAL_LOG??pe(me(),".testmuai","kaneai","context-refusals.log");le(fe(o),{recursive:!0}),de(o,`${new Date().toISOString()} ${e} ${t}
3
- `)}catch{}}var y=class extends Error{constructor(e,o){super(o);this.code=e;this.name="LisError"}};function ge(t){let r=t.TESTMUAI_ENV==="stage"?"stage":"prod";return`${k[r].shareApiBaseUrl}/lis/api/v1`}function he(t){let r=t.env??process.env,e=t.auth?.TESTMUAI_BASIC_AUTH||r.TESTMUAI_BASIC_AUTH;if(e)return{authorization:`Basic ${e}`};let o=t.auth?.TESTMUAI_API_KEY||r.TESTMUAI_API_KEY;return o?{authorization:`Bearer ${o}`}:{}}function R(t,r,e="the issue"){return t===401||t===403?new y("LIS_AUTH","credentials rejected \u2014 run `kane-cli login` and retry"):t>=500?new y("LIS_UNAVAILABLE",`the integrations service returned an error (HTTP ${t}) \u2014 retry later`):new y("JIRA_ISSUE_UNAVAILABLE",`could not fetch ${e}: ${r||`HTTP ${t}`}`)}function j(t){try{return JSON.parse(t.bytes.toString("utf8"))}catch{throw new y("LIS_UNAVAILABLE","the integrations service returned a malformed response \u2014 retry later")}}var ye=3e4;async function T(t,r,e){let o=e.env??process.env,m=e.fetchImpl??fetch,l=new AbortController,d=setTimeout(()=>l.abort(),ye);try{let a=await m(`${ge(o)}${t}`,{...r,headers:{"content-type":"application/json",...he(e),...r.headers??{}},signal:l.signal}),n=await Promise.race([a.arrayBuffer(),new Promise((s,u)=>{l.signal.addEventListener("abort",()=>u(new DOMException("aborted","AbortError")),{once:!0})})]);return{status:a.status,ok:a.ok,headers:a.headers,bytes:Buffer.from(n)}}catch(a){throw l.signal.aborted?new y("LIS_UNAVAILABLE","the integrations service did not respond within 30 seconds \u2014 retry later"):new y("LIS_UNAVAILABLE",`could not reach the integrations service (${a instanceof Error?a.message:String(a)}) \u2014 check your connection and retry`)}finally{clearTimeout(d)}}function $(t){try{return JSON.parse(t.bytes.toString("utf8")).message??""}catch{return""}}async function Q(t={}){let r=await T("/jira/info",{method:"GET"},t);if(!r.ok)throw R(r.status,$(r));let e=j(r),o=(e.data?.SELECTED_PROJECTS??[]).map(m=>m?.key).filter(m=>typeof m=="string"&&m.length>0);return{installed:e.data?.INSTALLED==="YES",selectAll:e.data?.SELECT_ALL===!0,selectedProjects:o}}async function ee(t,r={}){let e=await T("/jira/issue?details=true",{method:"POST",body:JSON.stringify({plugin_code:"jira",issueKey:t})},r);if(!e.ok)throw R(e.status,$(e));let o=j(e);if(o.type==="error"||!o.data)throw new y("JIRA_ISSUE_UNAVAILABLE",`could not fetch the issue: ${o.message??"issue not found or not accessible"}`);return o.data}async function te(t,r={}){let e=await T("/jira/attachment",{method:"POST",body:JSON.stringify({attachment_id:t})},r);if(e.status===413)throw new y("ATTACHMENT_TOO_LARGE","the attachment exceeds the integrations service's size cap");if(e.status===404)throw new y("JIRA_NOT_CONNECTED","Jira is not connected for this account \u2014 connect it in the Integrations screen and retry");if(!e.ok)throw R(e.status,$(e),`attachment ${t}`);return{bytes:e.bytes,mediaType:e.headers.get("content-type")??"application/octet-stream"}}var S="kane.source.jira/1";function re(t){if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);if(Array.isArray(t)){let r=t.map(re).filter(e=>e!==null);return r.length===0?null:r.join(", ")}if(t!==null&&typeof t=="object"){let r=t;for(let e of["name","value","displayName"])if(typeof r[e]=="string")return r[e];return null}return null}function ne(t,r){let e=[],o={},m=t.additional_fields??{};for(let n of Object.keys(m).sort()){let s=re(m[n]);if(s===null){e.push(`field "${n}" has no stable text form \u2014 dropped from the envelope`);continue}o[n]=s}let l=[...t.attachments??[]].map(n=>({id:String(n.id),filename:n.filename??"",media_type:n.mime_type??"application/octet-stream",size:n.size??0})).sort((n,s)=>{let u=Number(n.id),i=Number(s.id);return Number.isFinite(u)&&Number.isFinite(i)?u-i:n.id<s.id?-1:n.id>s.id?1:0}),d=t.key;if(!/^[A-Za-z][A-Za-z0-9_]*-\d+$/.test(d))throw new Error(`cannot build a stable identity for issue key "${d}" \u2014 expected a PROJECT-NUMBER key`);let a={schema:S,site:r,project:d.slice(0,d.lastIndexOf("-")),issue:{id:t.id,key:d},content:{summary:t.summary??"",description:t.description??"",fields:o},attachments:l};return{bytes:Buffer.from(JSON.stringify(a),"utf8"),envelope:a,warnings:e}}var se=64,be=16,Ee=6e6,Ie=5e7,_e=12e6,we={png:"image/png",jpeg:"image/jpeg",webp:"image/webp",gif:"image/gif",bmp:"image/bmp",tiff:"image/tiff",emf:"image/emf",wmf:"image/wmf",unknown:"application/octet-stream"},Ae=new Set(["png","jpeg","webp"]);function ie(t){return async r=>{let e;try{e=JSON.parse(r.toString("utf8"))}catch{throw new Error("JIRA_ENVELOPE_SCHEMA: source bytes are not a kane jira envelope")}if(e.schema!==S)throw new Error(`JIRA_ENVELOPE_SCHEMA: unknown envelope schema "${e.schema}" \u2014 this CLI understands ${S}`);let o=[],m=new Map,l=[],d=0,a=new Map,n=[];for(let i=0;i<e.attachments.length;i++){let c=e.attachments[i],g=`i${i+1}`,w=`attachment:${c.filename}`,p=I=>`[img#${g}] ${c.filename} (${c.media_type}, ${c.size} bytes${I?"":" \u2014 not delivered"})`,f=(I,ue,L)=>{o.push({ref:g,loc:w,media_type:I,...L?.blob?{blob:L.blob}:{},...L?.appearance?{appearance:L.appearance}:{},delivery:ue,...L?.duplicate_of?{duplicate_of:L.duplicate_of}:{}})};if(!c.media_type.startsWith("image/")){f(c.media_type,"unsupported-vision-media-type"),n.push(p(!1));continue}let b;try{b=await t.fetchAttachment(c.id)}catch{f(c.media_type,"external-image-not-fetched"),n.push(p(!1));continue}let A=b.bytes,h=q(A),_=we[h.format],E=B(A);if(m.set(E,A),!Ae.has(h.format)){let I=h.format==="gif"||h.format==="bmp"||h.format==="tiff"?"unsupported-vision-media-type":"unsupported-image-kind";f(_,I,{blob:E}),n.push(p(!1));continue}if(h.width===void 0||h.height===void 0||h.width*h.height>Ie){f(_,"undecodable",{blob:E}),n.push(p(!1));continue}let v;if(h.format==="png"||h.format==="jpeg"){let I=X(A,h.format);if(I===null){f(_,"undecodable",{blob:E}),n.push(p(!1));continue}v=z(I.data,{width:I.width,height:I.height,channels:I.channels})}if(h.width<se||h.height<se){f(_,"below-dimension-floor",{blob:E,appearance:v}),n.push(p(!1));continue}let N=a.get(E);if(N!==void 0){f(_,"duplicate",{blob:E,appearance:v,duplicate_of:N}),n.push(p(!1));continue}if(A.byteLength>Ee){f(_,"image-too-large",{blob:E,appearance:v}),n.push(p(!1));continue}if(d+A.byteLength>_e){f(_,"vision-byte-budget-reached",{blob:E,appearance:v}),n.push(p(!1));continue}if(l.length>=be){f(_,"image-cap-reached",{blob:E,appearance:v}),n.push(p(!1));continue}a.set(E,g),d+=A.byteLength,l.push(g),f(_,"selected",{blob:E,appearance:v}),n.push(p(!0))}let s=[];s.push(`${e.issue.key} \xB7 ${e.site}/${e.project}`,`Summary: ${e.content.summary}`),e.content.description!==""&&s.push("",...e.content.description.split(`
4
- `));let u=Object.keys(e.content.fields);return u.length>0&&s.push("","--- fields ---",...u.map(i=>`${i}: ${e.content.fields[i]}`)),n.length>0&&s.push("","--- attachments ---",...n),{projection:s.join(`
5
- `)+`
6
- `,inventory:o,blobs:m,delivered:l,converter:{name:"jira-convert",version:"1",policy:"v1"}}}}var ve=/^[A-Za-z][A-Za-z0-9_]*-\d+$/;function P(t){if(!/^https?:\/\/.+/i.test(t))return null;let r;try{r=new URL(t)}catch{return null}let e=r.pathname.split("/").filter(Boolean),o=e.lastIndexOf("browse");if(o===-1||o+1>=e.length)return null;let m=e[o+1];return ve.test(m)?{site:r.hostname,issueKey:m.toUpperCase()}:null}async function Le(t,r,e,o,m){let l=P(t);if(l===null)return(e.err??e.out)(`error: ${t}: unsupported remote URL \u2014 expected a Jira issue URL (https://<site>/browse/KEY-123)`),{code:1};let d=m?.lis??{jiraInfo:Q,jiraIssue:ee,jiraAttachment:te};try{let n={auth:await(m?.authEnv??(await import("./auth-76LVI6B5.js")).resolveLisAuthEnv)(),env:process.env},s=await d.jiraInfo(n);if(!s.installed)return(e.err??e.out)(`error: ${t}: Jira is not connected for this account \u2014 connect it in the Integrations screen (integrations.lambdatest.com) and retry`),{code:1};let u=l.issueKey.slice(0,l.issueKey.lastIndexOf("-"));if(!s.selectAll&&s.selectedProjects.length>0&&!s.selectedProjects.includes(u))return(e.err??e.out)(`error: ${t}: project ${u} is not in the integration's selected projects (${s.selectedProjects.join(", ")}) \u2014 add it in the Integrations screen to ingest from it`),{code:1};let i=await d.jiraIssue(l.issueKey,n),c=l.site;if(i.host)try{c=new URL(i.host).hostname}catch{c=i.host.replace(/^https?:\/\//,"").replace(/[/:].*$/,"")}let{bytes:g,warnings:w}=ne(i,c),p=r??l.issueKey.toLowerCase();M(p);let f=await K({contextDir:o,bytes:g,media:Y,sourceId:p,label:t,confirmSameSource:e.isTTY?b=>e.confirm(`identical content already ingested as ${b} \u2014 treat as the same source?`):void 0,converters:{jira:ie({fetchAttachment:b=>d.jiraAttachment(b,n)})}});e.out(x(e.isTTY,f,l.issueKey));for(let b of w)e.out(`warning: ${b}`);for(let b of f.warnings??[])e.out(`warning: ${b}`);if(f.composite){let b=f.composite.delivered+f.composite.omitted;e.out(`${f.source_id}: jira, ${b} attachments, ${f.composite.delivered} images delivered (${f.composite.omitted} omitted)`)}return{code:0,result:{status:f.status,source_id:f.source_id,source_cid:f.cid}}}catch(a){return a instanceof y?((e.err??e.out)(`error: ${t}: ${a.message}`),{code:1}):((e.err??e.out)(`error: ${t}: ${Re(a instanceof Error?a.message:String(a))}`),{code:1})}}function Re(t){let r=t.match(/too large — ([\d.]+ [KM]B), the limit for .+ is ([\d.]+ [KM]B) \[FILE_TOO_LARGE\]/);return r?`the issue's content is too large to ingest (${r[1]}; the limit is ${r[2]}) \u2014 trim the description or attachments in Jira and retry`:t.startsWith("PROJECTION_TOO_LARGE:")?"the issue's text is too large to ingest \u2014 trim the description in Jira and retry":t}var oe={name:"jira",hint:"Jira issue URLs (https://<site>/browse/KEY-123)",match:t=>P(t)!==null,ingest:Le};function x(t,r,e){return t?r.status==="created"?`landed ${r.source_id} (${e}) \u2014 new source`:r.status==="versioned"?`landed ${r.source_id} (${e}) \u2014 new version; dependents go stale`:`${r.source_id} unchanged \u2014 already landed`:`${r.status} ${r.source_id} source ${r.cid} blob ${r.blob}`}var J=[oe];function ae(t){return/^https?:\/\/.+/i.test(t)}function ce(t){return J.find(r=>r.match(t))??null}async function C(t,r,e,o=process.cwd(),m){let l=D(o),d=[];if(r.as!==void 0&&t.length>1)return(e.err??e.out)(`error: --as names ONE source identity \u2014 pass a single file (got ${t.length})`),{code:2,results:d};for(let a of t){if(ae(a)){let u=ce(a);if(u===null)return(e.err??e.out)(`error: ${a}: unsupported remote URL \u2014 supported: ${J.map(c=>c.hint).join("; ")}`),{code:1,results:d};let i=await u.ingest(a,r.as,e,l,m);if(i.code!==0)return{code:i.code,results:d};i.result&&d.push({status:i.result.status==="versioned"?"versioned":i.result.status==="unchanged"?"unchanged":"created",source_id:i.result.source_id,source_cid:i.result.source_cid});continue}let n=r.as;if(e.isTTY&&n===void 0&&Te(l)){let u=V(a),i=H(u);if(i){let c=O(l);c.heads.get(i)!=null&&c.heads.get(u)==null&&await e.confirm(`${u} looks like a new version of existing source '${i}' \u2014 ingest as '${i}' (replaces the current version; items built on it go stale)?`)&&(n=i)}}let s;try{s=await F({contextDir:l,filePath:a,asId:n,confirmSameSource:e.isTTY?u=>e.confirm(`identical bytes already ingested as ${u} \u2014 treat as the same source?`):void 0,converters:{pdf:G,docx:Z}})}catch(u){let i=u instanceof Error?u.message:String(u);return W(a,i),e.out(`error: ${a}: ${i}`),{code:1,results:d}}e.out(x(e.isTTY,s,$e(a)));for(let u of s.warnings??[])e.out(`warning: ${u}`);if(s.composite){let u=s.composite.pages!==void 0?` ${s.composite.pages} pages,`:"";e.out(`${s.source_id}: ${s.composite.kind},${u} ${s.composite.delivered} images delivered (${s.composite.omitted} omitted)`)}if(!e.isTTY&&s.status==="created"){let u=O(l);for(let[i,c]of u.heads.entries())if(!(i===s.source_id||c==null)&&u.getNode(c)?.content.blob===s.blob){e.out(`hint: identical bytes already ingested as ${i} \u2014 merged later via review`);break}}d.push({status:s.status,source_id:s.source_id,source_cid:s.cid})}return{code:0,results:d}}async function mt(t,r,e,o=process.cwd(),m){return(await C(t,r,e,o,m)).code}async function ft(t,r){if(r.mode!=null&&!["interactive","agent","ci","override"].includes(r.mode))return process.stderr.write(`ingest: --mode must be interactive | agent | ci | override, got '${r.mode}'
7
- `),2;let e=U();if(r.mode==="interactive"&&!e)return process.stderr.write(`ingest: --mode interactive needs a TTY on stdin and stdout (use --mode agent|ci|override headless)
8
- `),2;let o=r.mode??(e?"interactive":void 0),m=o==="interactive"||o==="agent"||o==="override";if(!m&&(r.plan||r.force||r.trust!==void 0))return process.stderr.write(`ingest: --plan/--force/--trust steer the extraction \u2014 not available when only landing (use --mode agent to extract headless)
9
- `),2;let{createInterface:l}=await import("readline/promises"),d={out:c=>process.stdout.write(c+`
10
- `),err:c=>process.stderr.write(c+`
11
- `),isTTY:e,confirm:async c=>{let g=l({input:process.stdin,output:process.stdout});try{let w=await g.question(`${c} [Y/n] `);return!/^n(o)?$/i.test(w.trim())}finally{g.close()}}};if(!m){let{withTelemetry:c}=await import("./with-telemetry-PNP6CAVM.js");return c("ingest",async()=>{let{code:g,results:w}=await C(t,{as:r.as},d,void 0,void 0);if(g!==0)return g;let p=w.filter(f=>f.status!=="unchanged").length;return p>0&&(d.err??d.out)(`landed ${p} source(s) \u2014 run kane-cli context extract to extract them`),0},{write:!0})}let{code:a,results:n}=await C(t,{as:r.as},d,void 0,void 0);if(a!==0)return a;if(n.length===0)return 0;let{extractCommand:s}=await import("./extract-cmd-U3MGK2LP.js"),u=[...new Set(n.map(c=>c.source_id))],i=await s({...r.mode!==void 0?{mode:r.mode}:{},...r.plan?{plan:!0}:{},...r.force?{force:!0}:{},...r.trust!==void 0?{trust:r.trust}:{},sources:u,landed:n});if(i===2){let c=n.filter(g=>g.status!=="unchanged").length;c>0&&(d.err??d.out)(`note: the ${c} landed source(s) are safe \u2014 extract later with kane-cli context extract`)}return i}export{C as a,mt as b,ft as c};
@@ -1,13 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as qe,g as et}from"./chunk-FCMLIK7P.js";import{b as w,c as Q,d as Ye,f as q,g as ee}from"./chunk-CJJXT5DO.js";import{a as Ke,e as P,f as T,g as We,h as H,i as D,j as Je}from"./chunk-ZPDM6FO7.js";import{a as F,b as L,d as Ue}from"./chunk-EHN5HTUD.js";import{d as tt}from"./chunk-NVGBE2DR.js";import{a as Y}from"./chunk-CH273NAE.js";import{a as R,b as y}from"./chunk-L5LI2JF4.js";import{a as _}from"./chunk-GW5DWAXY.js";import{b as U}from"./chunk-T63R6QT4.js";import{a as Ze}from"./chunk-L4JIMNKW.js";import{b as Qe,f as z,i as G}from"./chunk-M7WQM4UA.js";import{d as te,f as Xe}from"./chunk-5YPBPZUR.js";import{a as Ge}from"./chunk-JRMDGLLT.js";import{a as ze}from"./chunk-C4G7RVJ6.js";function $(t){if(t===null)return"broken";let e=Math.floor(t/100);return e===1?"passed":e===7?"failed":e===2?"skipped":"broken"}var C={failed:3,broken:2,passed:1,skipped:0};function re(t){let e="skipped";for(let r of t)C[r]>C[e]&&(e=r);return e}import{createHash as At}from"crypto";import{basename as Ot}from"path";function ne(t){let e=t.toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"").slice(0,40);return e.length>0?e:"session"}function ie(t){return At("sha256").update(t).digest("hex").slice(0,8)}function oe(t){let e=Ot(t).replace(/_test\.md$/i,"").replace(/\.md$/i,"");return`${ne(e)}-${ie(t)}`}function se(t,e){return`${ne(t)}-${ie(e)}`}function ae(t){let e={};for(let[r,n]of Object.entries(t))typeof n=="string"&&n.length>0&&(e[r]=n);return e}var Ft={darwin:"macOS",linux:"Linux",win32:"Windows"};function ce(t){return Ft[t]??t}function de(t,e){let r={},n=(i,o)=>{o!==void 0&&o!==""&&(r[i]=o)};return n("model",e.model),n("os",t.os),n("browser",t.browser),n("browser_version",t.browser_version),n("resolution",t.resolution),n("platform",e.platform),n("platform_type",e.platform_type),n("run_kind",e.run_kind),n("os_version",t.os_version),t.device!==void 0&&t.device!==""?r.device=t.device:e.platform_type&&e.platform_type!=="web"&&(r.device=null),r}function Lt(t,e){return{pack_test_dir:t,ordinal_offset:e}}import{promises as x}from"fs";import{join as k}from"path";function ue(t){let e={evidence:"0.1",run_id:t.execution_id,status:"running",title:t.title,started:t.started,environment:{producer:{name:"kane-cli",version:t.producerVersion},...t.surfaces?{surfaces:t.surfaces}:{},run_kind:t.run_kind,origin:t.origin,pid:t.pid},...t.credits!==void 0?{metrics:{credits:{value:t.credits,type:"count"}}}:{}};return y(e,{lineWidth:-1})}async function le(t,e,r,n=process.cwd(),i){let o=i??w(t.execution_id,n),s=k(o,"tests",e);return await x.mkdir(k(o,"coverage"),{recursive:!0}),await x.writeFile(k(o,"coverage",".keep"),""),await x.mkdir(s,{recursive:!0}),await x.writeFile(k(o,"run.yaml"),ue(t)),r&&await x.writeFile(k(s,r.path),r.content),o}async function Tt(t,e=process.cwd()){let r=w(t.execution_id,e);await x.mkdir(k(r,"coverage"),{recursive:!0}),await x.writeFile(k(r,"coverage",".keep"),"");let n=R(ue(t));return n.environment&&delete n.environment.run_kind,await x.writeFile(k(r,"run.yaml"),y(n,{lineWidth:-1})),r}async function jt(t,e=process.cwd()){return L(w(t,e),new Date().toISOString())}async function pe(t,e=process.cwd()){await x.rm(w(t,e),{recursive:!0,force:!0})}import{promises as fe}from"fs";import{join as me}from"path";function ge(t){let e={evidence:"0.1",test:t.testId,status:t.status,...t.durationMs!==void 0?{duration_ms:t.durationMs}:{},...t.definitionPath?{definition:{path:t.definitionPath}}:{},...t.definitionId?{definition_id:t.definitionId}:{},...t.assuranceId?{assurance_id:t.assuranceId}:{},...Object.keys(t.externalId).length?{external_id:t.externalId}:{},...t.tags&&t.tags.length?{tags:t.tags}:{},...Object.keys(t.environment).length?{environment:t.environment}:{},steps:t.steps};return y(e,{lineWidth:-1})}function ve(t){return y({logs:t},{lineWidth:-1})}async function he(t,e,r){await fe.writeFile(me(t,"tests",e,"result.yaml"),r)}async function we(t,e,r){let n=me(t,"tests",e,"logs");await fe.mkdir(n,{recursive:!0}),await fe.writeFile(me(n,"meta.yaml"),r)}import{promises as K}from"fs";import{join as rt}from"path";function nt(t){return rt(t,".internal","meta.json")}async function it(t){let e;try{e=await K.readFile(nt(t),"utf8")}catch(n){if(n?.code==="ENOENT")return null;throw n}let r=JSON.parse(e);if(!r||typeof r!="object"||Array.isArray(r))throw new Error("meta.json is not a JSON object");return r}async function ye(t,e){let r;try{r=await it(t)??{}}catch(s){console.warn(`evidence: meta.json at ${t} unreadable \u2014 skipping execution-pointer append to preserve identity`,s);return}let n=Array.isArray(r.executions)?r.executions:[];n.push(e),r.executions=n,await K.mkdir(rt(t,".internal"),{recursive:!0});let i=nt(t),o=`${i}.tmp-${process.pid}-${Date.now()}`;await K.writeFile(o,JSON.stringify(r,null,2)+`
3
- `),await K.rename(o,i)}async function Nt(t){try{let e=await it(t);return e&&Array.isArray(e.executions)?e.executions:[]}catch{return[]}}async function Vt(t,e,r=process.cwd()){let n=await q(t,r);if(!n){let o=`evidence: no pack found for "${t}"`;return e.json?console.log(JSON.stringify({valid:!1,error:"not_found",target:t})):console.error(o),2}let i=await F(n,e.profile??"L1");return e.json?console.log(JSON.stringify({valid:i.valid,status:i.status,diagnostics:i.diagnostics})):console.log(`evidence: ${i.valid?"valid":"INVALID"} (${e.profile??"L1"}, status ${i.status})`),i.valid?0:1}function _e(t){let e=[];for(let r of t){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)e.push($(i))}return re(e)}function Mt(t){let e=null;for(let r of t){let n=r.perFlow&&r.perFlow.length?r.perFlow.map(i=>i.resultCode):[r.resultCode];for(let i of n)i!=null&&(e==null||C[$(i)]>C[$(e)]||C[$(i)]===C[$(e)]&&i>e)&&(e=i)}return e}import{promises as Bt}from"fs";import{extname as ot,basename as Ht}from"path";var zt={".ndjson":"ndjson",".log":"log",".json":"json",".har":"har"};async function xe(t){let e;try{e=await Bt.readdir(t)}catch{return[]}return e.filter(r=>r!=="meta.yaml").sort().map(r=>({name:Ht(r,ot(r)),file:r,format:zt[ot(r)]??"txt"}))}import{mkdirSync as Gt,appendFileSync as Ut}from"fs";import{join as st}from"path";function Ie(t,e){return st(t,"tests",e,"logs")}function be(t,e,r,n={},i){try{i?.(e,r,r,n)}catch{}if(t)try{Gt(t,{recursive:!0});let o=JSON.stringify({ts:new Date().toISOString(),level:e,event:r,...n})+`
4
- `;Ut(st(t,"diagnostics.ndjson"),o)}catch{}}import{promises as E}from"fs";import{join as A}from"path";async function Yt(t){try{let e=A(t,"tests"),r=await E.readdir(e).catch(()=>[]);for(let n of r){let i=A(e,n,"steps"),o=await E.readdir(i).catch(()=>[]);for(let s of o){let a=await E.readFile(A(i,s,"failure.yaml"),"utf8").catch(()=>null);if(a!=null)try{let c=R(a);if(c&&typeof c=="object"&&c.triage)return!0}catch{}}}}catch{}return!1}async function at(t,e,r){let n=A(t,"tests",e,"logs");if(r)try{await E.mkdir(n,{recursive:!0}),await E.copyFile(r,A(n,"tui.log"))}catch{}let i=await xe(n);i.length&&await we(t,e,ve(i))}async function ke(t){let e=t.cwd??process.cwd(),r=t.packDir??w(t.executionId,e);if(!t.saved&&!t.packDir)return await pe(t.executionId,e),{sealed:!1};await at(r,t.testId,t.tuiLogPath);let n=A(r,"run.yaml"),i=R(await E.readFile(n,"utf8"));i.environment={...i.environment??{},saved:t.saved,run_kind:t.runKind},await E.writeFile(n,y(i,{lineWidth:-1}));let o=await E.open(n,"r+");try{await o.sync()}finally{await o.close()}let s=await Yt(r);await L(r,new Date().toISOString());let a;try{let d=await F(r,"L1");a=d.valid;let p=(d.diagnostics??[]).filter(u=>String(u?.code??"").includes("failure.status_disagrees"));if(p.length>0)if(t.expectStatusDisagrees||s){let u=t.expectStatusDisagrees?"expected under --bug-detection continue":"self-explained by triaged failure record(s)";console.warn(`evidence: ${p.length} status_disagrees advisory(ies) \u2014 ${u}`)}else console.warn(`evidence: ${p.length} status_disagrees advisory(ies) \u2014 step verdicts disagree with their failure records`,p);if(!d.valid){console.warn(`evidence: sealed pack ${t.executionId} failed L1 validation`,d.diagnostics);let u=String(d.diagnostics?.[0]?.code??"");be(Ie(r,t.testId),"warn","EVIDENCE_INVALID",{execution_id:t.executionId,first_code:u,surface:t.surface??"testmd"},t.log)}}catch(d){console.warn(`evidence: validation error for ${t.executionId}`,d)}let c;if(t.saved&&t.packDir)try{c=await Ye(r,t.executionId,e)}catch(d){console.warn(`evidence: store install failed for ${t.executionId}`,d)}if(t.outputStemDir)try{await ye(t.outputStemDir,{execution_id:t.executionId,run_kind:t.runKind,status:t.verdict,valid:a,at:new Date().toISOString()})}catch(d){console.warn(`evidence: execution-pointer append failed for ${t.executionId} (pack is sealed)`,d)}return{sealed:!0,valid:a,storePath:c}}import{release as ct}from"os";import{execFileSync as Kt}from"child_process";var dt=!1,W;function Wt(){if(!dt)if(dt=!0,process.platform==="darwin")try{W=Kt("sw_vers",["-productVersion"],{timeout:2e3}).toString().trim()||void 0}catch{W=ct()||void 0}else W=ct()||void 0;return W}function Ee(t){let e={os:ce(process.platform)},r=Wt();if(r&&(e.os_version=r),t.cdpBrowser){let n=/^([A-Za-z]+)\/(\d+)/.exec(t.cdpBrowser);n&&(e.browser=n[1].replace(/^Headless/,""),e.browser_version=n[2])}return t.resolution&&(e.resolution=t.resolution),e}async function ut(t){if(t)try{let e=await fetch(`${t}/json/version`,{signal:AbortSignal.timeout(2e3)});if(!e.ok)return;let r=await e.json();return typeof r.Browser=="string"?r.Browser:void 0}catch{return}}function Jt(t){let e;return()=>(e||(e=ut(t)),e)}import{promises as Se,existsSync as Re,readFileSync as qt}from"fs";import{basename as er,join as S}from"path";import{readFileSync as Xt}from"fs";import{dirname as Zt,resolve as Qt}from"path";function lt(t,e){let r=Qt(t),n=Xt(r,"utf8");return P(e?T(n,H(Zt(r),e)):n)}var j=class t{constructor(e){this.opts=e}executionId;testId;definitionPath=null;definitionContent=null;accumulatedSteps=[];maxOrdinal=0;_packDirOverride;_attached=!1;get attached(){return this._attached}static async attach(e){let r=er(e.packDir).replace(/\.evidence$/,""),n=new t({origin:"testrun",runKind:"author",pid:process.pid,title:e.testId,started:new Date().toISOString(),producerVersion:ze,cwd:e.cwd});n.executionId=r,n.testId=e.testId,n._packDirOverride=e.packDir,n._attached=!0;let i=S(e.packDir,"tests",e.testId);return await Se.mkdir(i,{recursive:!0}),e.definition&&(await Se.writeFile(S(i,e.definition.path),e.definition.content),n.definitionPath=e.definition.path,n.definitionContent=e.definition.content),n}async start(){if(this._attached)throw new Error("attach-mode session is already started");this.executionId=Q(),this.testId=this.opts.testmdRelPath?oe(this.opts.testmdRelPath):se(this.opts.objectiveOrName??"session",this.opts.sessionId??this.executionId);let e=this.opts.definition??null;return await le({execution_id:this.executionId,title:this.opts.title,started:this.opts.started,producerVersion:this.opts.producerVersion,surfaces:this.opts.surfaces,run_kind:this.opts.runKind,origin:this.opts.origin,pid:this.opts.pid,...this.opts.credits!==void 0?{credits:this.opts.credits}:{}},this.testId,e,this.opts.cwd,this.opts.packRootDir?this.pack:void 0),e&&(this.definitionPath=e.path,this.definitionContent=e.content),{executionId:this.executionId,testId:this.testId,packTestDir:this.packTestDir}}get pack(){return this._packDirOverride?this._packDirOverride:this.opts.packRootDir?S(this.opts.packRootDir,`${this.executionId}.evidence`):w(this.executionId,this.opts.cwd)}get packTestDir(){return S(this.pack,"tests",this.testId)}async writeDefinition(e,r="test.md"){await Se.writeFile(S(this.packTestDir,r),e),this.definitionPath=r,this.definitionContent=e}computeAssuranceId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=S(this.opts.cwd,this.opts.testmdRelPath);if(Re(e))return D(qt(e,"utf8"))?.id}}catch{}}computeDefinitionId(){try{if(this.opts.testmdRelPath&&this.opts.cwd){let e=S(this.opts.cwd,this.opts.testmdRelPath),r=S(this.opts.cwd,".context"),n=Re(r)?_(r):void 0;if(Re(e))return lt(e,n)}if(this.definitionContent!=null)return P(this.definitionContent)}catch{}}noteSpawn(e){this.accumulatedSteps.push(...e.steps),this.maxOrdinal=Math.max(this.maxOrdinal,e.maxOrdinal)}nextOrdinalOffset(){return this.maxOrdinal}get steps(){return this.accumulatedSteps}async writeResult(e){let r=_e(e.spawns),n=this.pack;await he(n,this.testId,ge({testId:this.testId,status:r,durationMs:e.durationMs,definitionPath:this.definitionPath,definitionId:this.computeDefinitionId(),assuranceId:this.computeAssuranceId(),externalId:ae(e.externalIdInput),environment:de(e.runnerEnv,e.intentEnv),steps:e.steps,tags:e.tags}));let i=e.externalIdInput;return e.log&&(i.commit_id||i.test_id||i.testcase_id)&&e.log("info","EVIDENCE_EXTERNAL_ID","Evidence external-id mapping",{execution_id:this.executionId,commit_id:i.commit_id??null,test_id:i.test_id??null,testcase_id:i.testcase_id??null,project_id:i.project_id??null,session_id:i.session_id??null,session_name:i.session_name??null}),r}get id(){return this.executionId}get test(){return this.testId}};async function tr(t,e,r=ee){try{let n=await r(t);if(n.aborted.length>0||n.removed.length>0)try{e?.("info","EVIDENCE_RECOVERY","Startup evidence recovery swept incomplete packs",{aborted:n.aborted,removed:n.removed,origin:"startup"})}catch{}return n}catch(n){return console.warn("evidence: startup recovery failed",n),{aborted:[],removed:[]}}}import{promises as Ir}from"fs";import{existsSync as $e,mkdirSync as gr,readdirSync as vr,readFileSync as hr,rmSync as wr,statSync as yr,writeFileSync as _r}from"fs";import{join as O}from"path";import{mkdirSync as rr,renameSync as nr,rmSync as ir,writeFileSync as or}from"fs";import{join as pt}from"path";var sr=5e6;function ft(t,e,r){let n=pt(t,"coverage","sources"),i=new Map,o=!1;try{for(let s of r.usecases)for(let a of s.sources){if(i.has(a.id)){a.file=i.get(a.id);continue}if(!a.cid)continue;let c=tt(e,a.cid);if(c===null||c.byteLength>sr)continue;o||(rr(n,{recursive:!0}),o=!0);let d=pt(n,a.id),l=`${d}.tmp-${process.pid}`;or(l,c),nr(l,d);let p=`coverage/sources/${a.id}`;i.set(a.id,p),a.file=p}}catch{for(let s of r.usecases)for(let a of s.sources)delete a.file;if(o)try{ir(n,{recursive:!0,force:!0})}catch{}}}import{existsSync as Ce,readFileSync as N,renameSync as ur,writeFileSync as lr}from"fs";import{dirname as wt,isAbsolute as yt,resolve as _t}from"path";var ar=new Set(["inline","testmd","testrun"]),cr=new Set(["inferred","authored","runtime-derived"]),Pe=new Set(["passed","failed","broken","skipped"]);function mt(t,e,r){if(r.facts.length===0)return{record:null,errors:[{code:"EMPTY_EXECUTIONS",detail:"a run with no designed units attaches no facts \u2014 skip the call"}]};let n=e;for(let i=0;;i++){let o=z(t);if(n.latestHash!==o){if(i>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:`graph opened at ${String(n.latestHash)} but chain head is ${String(o)} \u2014 retry budget exhausted`}]};n=_(t);continue}let s=dr(t,n,r);if(s!=="cas")return s;if(i>=3)return{record:null,errors:[{code:"STALE_BASIS",detail:"concurrent appends kept moving the head \u2014 retry budget exhausted"}]};n=_(t)}}function dr(t,e,r){let n=[],i=[];for(let s of r.facts){let a=`executions[${s.ref}]`,c=e.resolve(s.ref),d=c?e.tipOf(c.cid):null;if(!c||!d||e.superseded.has(d)){n.push({code:"UNKNOWN_REF",detail:`${a}: '${s.ref}' is not a live committed node`});continue}if(e.nodeLabel.get(d)!==te.TEST){n.push({code:"ILLEGAL_TARGET",detail:`${a}: execution facts attach to tests \u2014 '${s.ref}' is a ${e.nodeLabel.get(d)}`});continue}if(!ar.has(s.mode)){n.push({code:"BAD_MODE",detail:`${a}: mode '${s.mode}' not in inline|testmd|testrun`});continue}if(!Pe.has(s.verdict)){n.push({code:"BAD_VERDICT",detail:`${a}: verdict '${s.verdict}' not in ${[...Pe].join("|")}`});continue}if(!cr.has(s.oracle_mode)){n.push({code:"BAD_ORACLE_MODE",detail:`${a}: oracle_mode '${s.oracle_mode}' not in inferred|authored|runtime-derived`});continue}if(typeof s.drift_flag!="boolean"||typeof s.stale_at_run!="boolean"){n.push({code:"MISSING_FIELD",detail:`${a}: drift_flag and stale_at_run are required booleans`});continue}if(!s.execution_id||!s.started_at||!s.definition_id_at_run){n.push({code:"MISSING_FIELD",detail:`${a}: execution_id, started_at and definition_id_at_run are required`});continue}let l=[];for(let p of s.per_ac??[]){let u=e.resolve(p.ac_ref),f=u?e.tipOf(u.cid):null;if(!u||!f||e.superseded.has(f)||e.nodeLabel.get(f)!==te.AC){n.push({code:"UNKNOWN_REF",detail:`${a}.per_ac: '${p.ac_ref}' is not a live AC`});continue}if(!Pe.has(p.verdict)){n.push({code:"BAD_VERDICT",detail:`${a}.per_ac['${p.ac_ref}']: verdict '${p.verdict}'`});continue}l.push({ac_ref:e.nameOf.get(f)??f,verdict:p.verdict})}i.push({about:d,definition_id_at_run:s.definition_id_at_run,verdict:s.verdict,...l.length?{per_ac:l}:{},drift_flag:s.drift_flag,oracle_mode:s.oracle_mode,stale_at_run:s.stale_at_run,...s.unresolved_acs?.length?{unresolved_acs:s.unresolved_acs}:{},execution_id:s.execution_id,...s.evidence_id?{evidence_id:s.evidence_id}:{},...s.duration_ms!==void 0?{duration_ms:s.duration_ms}:{},started_at:s.started_at,mode:s.mode,local:s.local,...s.via_parent?{via_parent:s.via_parent}:{}})}if(n.length>0)return{record:null,errors:n};let o;try{o=G(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],executions:i,...r.eventIds&&r.eventIds.length>0?{event_ids:r.eventIds}:{},source_head_moves:{}},{expectPrev:e.latestHash})}catch(s){if(s instanceof Qe)return"cas";throw s}return U(t),{record:o.record,errors:null}}function xt(t){let e={failed:3,broken:2,skipped:1,passed:0},r=new Map;for(let n of t)for(let i of n.verifies??[]){let o=r.get(i);(o===void 0||(e[n.status]??0)>(e[o]??0))&&r.set(i,n.status)}return[...r.entries()].map(([n,i])=>({ref:n,verdict:i}))}function It(t){let e=[],r=Y(t.cwd);if(!Ce(r))return{synced:0,superseded:0,skipped:"no-context",warnings:e};let n=t.by??{kind:"ai",id:"exec-sync"},i=_(r),o=[],s=0,a=new Set;for(let d of t.members){let l=yt(d.path)?d.path:_t(t.cwd,d.path);for(let p of pr(l)){if(a.has(p.path))continue;a.add(p.path);let u=p.path===l?void 0:D(N(l,"utf8"))?.id,f=N(p.path,"utf8"),m=D(f);if(!m?.id)continue;let g=i.resolve(m.id),I=g?i.tipOf(g.cid):null;if(!g||!I||i.superseded.has(I)){e.push(`sync: ${m.id} does not resolve to a live test \u2014 skipped (foreign store?)`);continue}let b=P(T(f,H(wt(p.path),i))),v=String(i.getNode(I)?.content.test_md_blob??""),M=P(T(v,We(i))),B=!1,Z=I;if(b===M)m.base!==M&&ht(p.path,f,M,e);else if(m.base===M){let h=fr(r,i,I,f,b,n);h.error?(e.push(`sync: could not supersede ${m.id}: ${h.error}`),B=!0):(s++,Z=h.newCid,B=h.oracleTier,ht(p.path,N(p.path,"utf8"),b,e),i=_(r))}else B=!0,e.push(m.base?`sync: ${m.id} was edited from an older version \u2014 graph kept; reconcile via a redesign or maintain`:`sync: ${m.id} carries no base pin (hand-copied file?) \u2014 fact attached with drift flag`);let Ve=i.getNode(Z)?.content.check,Me=p.path===l?d.acs??[]:[],Be=Me.filter(h=>gt(i,h.ref)),He=Me.filter(h=>!gt(i,h.ref)).map(h=>h.ref);o.push({ref:m.id,definition_id_at_run:b,verdict:d.verdict,...Be.length?{per_ac:Be.map(h=>({ac_ref:h.ref,verdict:h.verdict}))}:{},drift_flag:B,oracle_mode:Ve?.expected_mode??(Ke(Ve?.operand)?"runtime-derived":"inferred"),stale_at_run:i.stale(Z)!=="fresh",...He.length?{unresolved_acs:He}:{},execution_id:d.executionId,...d.evidenceId?{evidence_id:d.evidenceId}:{},...d.durationMs!==void 0?{duration_ms:d.durationMs}:{},started_at:d.startedAt,mode:d.mode,local:d.local,...u?{via_parent:u}:{}})}}if(o.length===0)return{synced:0,superseded:s,warnings:e};let c=mt(r,_(r),{facts:o,by:n});return c.errors?(e.push(...c.errors.map(d=>`sync facts: ${d.code}: ${d.detail}`)),{synced:0,superseded:s,warnings:e}):{synced:o.length,superseded:s,warnings:e}}function pr(t){let e=[],r=new Set,n=i=>{if(r.has(i)||!Ce(i))return;r.add(i);let o=N(i,"utf8");for(let s of o.split(`
5
- `)){let a=/^@import\s+(\S+)\s*$/.exec(s.trim());if(!a)continue;let c=yt(a[1])?a[1]:_t(wt(i),a[1]);Ce(c)&&D(N(c,"utf8"))?.id&&n(c)}e.push({path:i})};return n(t),e}function gt(t,e){let r=t.resolve(e),n=r?t.tipOf(r.cid):null;return!!(r&&n&&!t.superseded.has(n)&&t.nodeLabel.get(n)==="ac")}function fr(t,e,r,n,i,o){let s=e.getNode(r);if(!s)return{oracleTier:!1,error:"tip unreadable"};let a=Je(n),c=String(s.content.test_md_blob??""),d=/^#\s+(.+?)\s*$/m.exec(a)?.[1]??String(s.content.title??""),l={...s.content,test_md_blob:a,definitionId:i,title:d},p=Xe("test",l);if(p.length>0)return{oracleTier:!1,error:p.map(g=>g.detail).join("; ")};let u=Ze("test",l);if(u===r)return{newCid:r,oracleTier:!1};let f=vt(c)!==vt(a),m=z(t);if(e.latestHash!==m)return{oracleTier:f,error:`store advanced under the sync (basis ${String(e.latestHash)} vs head ${String(m)}) \u2014 re-run to retry`};try{G(t,{ts:new Date().toISOString(),proposal_id:null,nodes:[{cid:u,label:"test",content:l}],edges:[],review:[{id:u,kind:"review-item",resolution:"edited",edit:null,reason:"edited on disk (run sync)",by:o}],supersessions:[{kind:"node",old:r,new:u,reason:"edited on disk (run sync)",by:o}],source_head_moves:{}},{expectPrev:m})}catch(g){return{oracleTier:f,error:g instanceof Error?g.message:String(g)}}return U(t),{newCid:u,oracleTier:f}}var mr=/\s@verifies\s+(ac-[\w.:\/-]+(?:\s*,\s*ac-[\w.:\/-]+)*)\s*$/;function vt(t){let e=[],r=t.split(`
6
- `),n=!1;for(let i of r){if(/^##\s/.test(i)){n=/\bassert\b/i.test(i);let o=mr.exec(i);o&&e.push(`v:${o[1].trim()}`);continue}n&&i.trim()!==""&&e.push(i.trim())}return e.join(`
7
- `)}function ht(t,e,r,n){try{let i=e.split(`
8
- `),o=-1;if(i[0]?.trim()==="---"){for(let c=1;c<i.length;c++)if(i[c].trim()==="---"){o=c;break}}if(o<0)return;let s=!1;for(let c=1;c<o;c++){if(/^\s+base:\s*sha256:[0-9a-f]+\s*$/.test(i[c])){i[c]=i[c].replace(/sha256:[0-9a-f]+/,r),s=!0;break}if(/^assurance:\s*$/.test(i[c])&&!i.slice(c,Math.min(c+3,o)).some(d=>/^\s+base:/.test(d))){i.splice(c+2,0,` base: ${r}`),s=!0;break}}if(!s)return;let a=`${t}.tmp-sync`;lr(a,i.join(`
9
- `)),ur(a,t)}catch(i){n.push(`sync: pin refresh failed for ${t} (${i instanceof Error?i.message:String(i)}) \u2014 next run self-heals`)}}var xr={passed:"passed",failed:"failed",broken:"blocked",skipped:"not-run"},bt=(t,e)=>{try{if(!$e(e))return{status:"skipped",reason:"no context store at the project root"};let r=O(t,"tests");if(!$e(r))return{status:"skipped",reason:"pack has no tests/"};let n=new Map;for(let a of vr(r)){let c=O(r,a,"result.yaml");if(!$e(c)||!yr(O(r,a)).isDirectory())continue;let d=R(hr(c,"utf8"));if(!d?.definition_id&&!d?.assurance_id)continue;let l=xt(d.steps??[]),p={testShortId:String(d.test??a),execution:xr[String(d.status)]??"not-run",...l.length?{acs:l}:{}};d.assurance_id&&n.set(`id:${d.assurance_id}`,p),d.definition_id&&n.set(`def:${d.definition_id}`,p)}let i=et(_(e),n,{scope:"run"}),o=qe(i);ft(t,e,i);let s=y({...i,rollup:o},{lineWidth:-1});return gr(O(t,"coverage"),{recursive:!0}),_r(O(t,"coverage","usecases.yaml"),s),{status:"written"}}catch(r){try{wr(O(t,"coverage","sources"),{recursive:!0,force:!0})}catch{}return{status:"skipped",reason:r instanceof Error?r.message:String(r)}}};async function br(t){try{let e=new j({origin:"inline",runKind:"author",pid:t.pid,title:t.title,started:new Date().toISOString(),producerVersion:t.producerVersion,surfaces:t.surfaces,objectiveOrName:t.objectiveOrName,sessionId:t.sessionId,cwd:t.cwd,packRootDir:t.packRootDir}),r=await e.start();return{session:e,...r,packDir:e.pack,spawns:[],startedAtMs:Date.now(),cwd:t.cwd}}catch(e){return console.warn("evidence: inline pack creation failed",e),null}}function kr(t,e,r){if(!t)return;t.session.noteSpawn(e),e.resolution&&(t.resolution=e.resolution);let n=(r?.per_flow_metadata??[]).map(i=>({resultCode:i?.result_code!=null?Number(i.result_code):null}));t.spawns.push({resultCode:r?.result_code!=null?Number(r.result_code):null,...n.length?{perFlow:n}:{}})}function Er(t){if(t)return{packTestDir:t.packTestDir,ordinalOffset:t.session.nextOrdinalOffset()}}async function Sr(t,e){if(!t)return null;if(t.finalized)return t.finalized;let r=(n,i,o)=>e.log?e.log("warn",n,i,o):console.warn(`evidence: ${i}`,o??"");try{if(e.recordedTestPath)try{await t.session.writeDefinition(await Ir.readFile(e.recordedTestPath,"utf8"))}catch(s){r("EVIDENCE_DEFINITION_FAILED","could not attach synthesized test.md",{error:String(s)})}let n=e.cdpBrowserCapture?await e.cdpBrowserCapture():void 0,i=await t.session.writeResult({steps:t.session.steps,spawns:t.spawns.length?t.spawns:[{resultCode:null}],externalIdInput:{...e.externalIdInput,execution_id:t.executionId},runnerEnv:Ee({cdpBrowser:n,resolution:t.resolution}),intentEnv:{model:e.model,platform:"Desktop",platform_type:"web"},durationMs:e.durationMs??Date.now()-t.startedAtMs,log:e.log});try{if(e.recordedTestPath){let s=It({cwd:e.cwd??t.cwd??process.cwd(),members:[{path:e.recordedTestPath,verdict:i,executionId:t.executionId,startedAt:new Date(t.startedAtMs).toISOString(),mode:"inline",local:e.local??!1}]});for(let a of s.warnings)r("EXEC_SYNC",a)}}catch(s){r("EXEC_SYNC","exec-sync failed",{error:String(s)})}try{let s=(e.coverageWriter??bt)(t.packDir,Y(e.cwd??t.cwd??process.cwd()));s.status==="skipped"&&r("EVIDENCE_COVERAGE_SKIPPED",`coverage/usecases.yaml not written: ${s.reason}`)}catch(s){r("EVIDENCE_COVERAGE_SKIPPED","coverage writer threw",{error:String(s)})}let o=await ke({executionId:t.executionId,testId:t.testId,saved:e.saved,runKind:"author",verdict:i,cwd:e.cwd??t.cwd,packDir:t.packDir,tuiLogPath:e.tuiLogPath,log:e.log,surface:"inline"});return t.finalized=o,e.log?.("info","EVIDENCE_SEALED","Inline pack sealed",{execution_id:t.executionId,verdict:i,valid:o.valid,pack:t.packDir,store_copy:o.storePath??null}),o}catch(n){return r("EVIDENCE_SEAL_FAILED","inline pack finalize failed",{error:String(n)}),null}}import{statSync as Ar,openSync as Or,readSync as Fr,closeSync as Lr}from"fs";import{basename as Tr,resolve as jr}from"path";import{createServer as Rr}from"http";import{createReadStream as Pr,promises as Cr}from"fs";import{randomBytes as $r}from"crypto";var J="127.0.0.1";function kt(t,e){if(!t)return null;let r=/^bytes=(\d*)-(\d*)$/.exec(t.trim());if(!r)return null;let[,n,i]=r;if(n===""&&i==="")return null;if(n===""){let a=Number(i);return a===0||e===0?"unsatisfiable":{start:Math.max(0,e-a),end:e-1}}let o=Number(n);if(o>=e)return"unsatisfiable";let s=i===""?e-1:Math.min(Number(i),e-1);return s<o?null:{start:o,end:s}}async function De(t){let e=$r(16).toString("hex"),r=Rr((i,o)=>{Dr(i,o,t,e).catch(()=>o.destroy())});await new Promise((i,o)=>{r.once("error",o),r.listen(t.port??0,J,()=>{r.removeListener("error",o),i()})});let n=r.address().port;return{port:n,urlFor:i=>`http://${J}:${n}/${e}/${encodeURIComponent(i)}`,close:()=>new Promise(i=>{r.close(()=>i()),r.closeAllConnections()})}}async function Dr(t,e,r,n){let i=t.url??"/",o=v=>{try{r.log?.("warn","EVIDENCE_SERVE_DENIED",{reason:v,path:i})}catch{}};if(t.headers.host!==`${J}:${t.socket.localPort}`){o("host_mismatch"),e.writeHead(403).end();return}let s=t.headers.origin;if(s!==void 0&&!r.allowedOrigins.includes(s)){o("origin_denied"),e.writeHead(403).end();return}let a=s?{"Access-Control-Allow-Origin":s,Vary:"Origin","Access-Control-Expose-Headers":"Content-Range, Content-Length"}:{};if(t.method==="OPTIONS"){let v={...a,"Access-Control-Allow-Methods":"GET, HEAD, OPTIONS","Access-Control-Allow-Headers":"range","Access-Control-Max-Age":"86400"};t.headers["access-control-request-private-network"]==="true"&&(v["Access-Control-Allow-Private-Network"]="true"),e.writeHead(204,v).end();return}if(t.method!=="GET"&&t.method!=="HEAD"){e.writeHead(405,a).end();return}let c;try{let v=new URL(t.url??"/",`http://${J}`).pathname.split("/");if(v.length!==3||v[1]!==n){o("bad_token"),e.writeHead(404,a).end();return}c=decodeURIComponent(v[2])}catch{o("not_found"),e.writeHead(404,a).end();return}let d=r.packs.get(c);if(!d){o("not_found"),e.writeHead(404,a).end();return}let l;try{let v=await Cr.stat(d);if(!v.isFile())throw new Error("not a file");l=v.size}catch{o("not_found"),e.writeHead(404,a).end();return}let p={...a,"Accept-Ranges":"bytes","Content-Type":"application/zip","Cache-Control":"no-store"};if(t.method==="HEAD"){e.writeHead(200,{...p,"Content-Length":String(l)}).end();return}let u=kt(t.headers.range,l);if(u==="unsatisfiable"){o("unsatisfiable"),e.writeHead(416,{...a,"Content-Range":`bytes */${l}`}).end();return}let[f,m,g]=u===null?[0,l-1,200]:[u.start,u.end,206],I={...p,"Content-Length":String(m-f+1)};if(g===206&&(I["Content-Range"]=`bytes ${f}-${m}/${l}`),e.writeHead(g,I),l===0){e.end();return}let b=Pr(d,{start:f,end:m});b.on("error",()=>e.destroy()),e.on("close",()=>b.destroy()),b.pipe(e)}function V(t,e){return(e??Ge(t).evidenceViewerUrl).replace(/\/+$/,"")}function Ae(t,e){return`${e}/?pack=${encodeURIComponent(t)}`}function Oe(t){return`evidence: view locally with \`kane-cli evidence serve ${t}\``}async function Nr(t,e,r={}){let n=r.out??(l=>process.stdout.write(l+`
10
- `)),i=l=>(n(`error: ${l}`),2);if(e.env!=="prod"&&e.env!=="stage")return i(`invalid --env: ${String(e.env)}`);if(e.port!==void 0&&(!Number.isInteger(e.port)||e.port<1||e.port>65535))return i("invalid --port: expected an integer 1-65535");let o;try{o=V(e.env,e.viewerUrl),new URL(o)}catch{return i(`invalid --viewer-url: ${e.viewerUrl}`)}if(t.length===0)return i("no pack paths given");let s=new Map;for(let l of t){let p=jr(l),u;try{u=Ar(p)}catch{return i(`${l}: not found`)}if(u.isDirectory())return i(`${l}: is a directory \u2014 packs must be sealed .evidence files (run the execution to completion, or seal it, first)`);if(!u.isFile())return i(`${l}: not a regular file`);let f=Buffer.alloc(2),m=Or(p,"r");try{Fr(m,f,0,2,0)}finally{Lr(m)}if(f.toString("latin1")!=="PK")return i(`${l}: not a sealed evidence pack (zip magic missing)`);let g=Tr(p);if(s.has(g))return i(`duplicate pack basename: ${g} (URL names collide \u2014 rename one)`);s.set(g,p)}let a=r.log??((l,p,u)=>process.stderr.write(`warn: ${p} reason=${u.reason} path=${u.path}
11
- `)),c;try{c=await De({packs:s,allowedOrigins:[new URL(o).origin],port:e.port,log:a})}catch(l){return i(`could not bind 127.0.0.1${e.port?`:${e.port}`:""} \u2014 ${l.message}`)}n(`serving ${s.size} pack${s.size===1?"":"s"} on http://127.0.0.1:${c.port}`);for(let l of s.keys()){let p=c.urlFor(l);n(l),n(` pack ${p}`),n(` viewer ${Ae(p,o)}`)}return n("press Ctrl-C to stop"),await(r.hold??Vr)(),await c.close(),0}function Vr(){return new Promise(t=>{let e=process.listeners("SIGINT");process.removeAllListeners("SIGINT"),process.once("SIGINT",()=>{for(let r of e)process.on("SIGINT",r);t()})})}import{promises as X}from"fs";import{tmpdir as zr}from"os";import{join as Rt,resolve as Le}from"path";var Mr=["error","prefer_first","prefer_latest","discard"],Br=["external_id.commit_id","external_id.test_id"];function Et(t){let e=t.replace(/-/g,"_");return Mr.includes(e)?e:null}function St(t){let e=t==="discard"?{on_collision:"discard"}:{on_collision:"error",identity:{keys:[...Br],on_same:t??"nest",on_different:t?"error":"split"}};return y({packs:{require_status:"finalized",require_valid:"L1",on_ineligible:"abort"},tests:e,rules:[{file:"run.yaml",key:"run_id",must:"different",on_violation:"skip"},{file:"result.yaml",key:"external_id.project_id",must:"same",on_violation:"error"},{file:"result.yaml",key:"external_id.org_id",must:"same",on_violation:"error"}]},{lineWidth:-1})}async function Fe(t){try{if(!t.isTTY){t.log(Oe(t.packPath));return}let e=V(t.env);await(t.renderPrompt??Hr)(t.packPath,e)}catch(e){try{t.log(`evidence view failed \u2014 ${e.message}`)}catch{}}}async function Hr(t,e){let r=await import("./react-QWOAB3TB.js"),{render:n}=await import("./build-JIKYOZUH.js"),{EvidenceViewOffer:i}=await import("./EvidenceViewOffer-DNCQ3A6R.js");await new Promise(o=>{let s=n(r.default.createElement(i,{packPath:t,viewerBase:e,onDone:()=>{s.unmount(),o()}}),{stdout:process.stderr,exitOnCtrlC:!1})})}async function Gr(t,e,r=process.cwd(),n={}){let i=n.out??(u=>process.stdout.write(u+`
12
- `)),o=n.err??(u=>process.stderr.write(u+`
13
- `)),s=u=>(o(`evidence merge: ${u}`),2);if(!e.runId)return s("--run-id is required (merged identity is the caller's fact)");if(e.rules&&e.onCollision)return s("--rules and --on-collision are mutually exclusive");let a;if(e.onCollision!==void 0){let u=Et(e.onCollision);if(!u)return s(`invalid --on-collision: ${e.onCollision} (expected error | prefer-first | prefer-latest | discard)`);a=u}let c=[];for(let u of t){let f=await Ur(u,r);if(!f)return s(`no pack found for "${u}"`);c.push(f)}let d=e.out?Le(r,e.out):w(e.runId,r),l=null,p;e.rules?p=Le(r,e.rules):(l=await X.mkdtemp(Rt(zr(),"kane-merge-rules-")),p=Rt(l,"merge-rules.yaml"),await X.writeFile(p,St(a)));try{let u=await(n.mergeFn??Ue)(c,{runId:e.runId,out:d,rulesPath:p,title:e.title,finalize:e.finalize});return e.json?i(JSON.stringify(u)):Yr(i,u),u.output.finalized&&!e.json&&await(n.offer??Fe)({packPath:d,env:e.env,isTTY:n.isTTY??(!!process.stdin.isTTY&&!!process.stderr.isTTY),log:o}),0}catch(u){let f=u instanceof Error?u.message:String(u);return u?.code==="ABORT"?(o(`evidence merge: aborted \u2014 ${f}`),1):s(f)}finally{l&&await X.rm(l,{recursive:!0,force:!0}).catch(()=>{})}}async function Ur(t,e){let r=Le(e,t);if(await Pt(r))return r;let n=w(t,e);return await Pt(n)?n:null}async function Pt(t){try{return await X.stat(t),!0}catch{return!1}}function Yr(t,e){let{packs:r,tests:n,output:i}=e;t(`evidence: merged ${n.merged} tests from ${r.eligible.length} packs -> ${i.path} (${i.finalized?"sealed":"live"})`);for(let o of r.skipped)t(` skipped ${o.runId}: ${o.rule} \u2014 ${o.reason}`);for(let o of n.collisions){let s;o.action==="nest"?s=`nested into ${o.folder}, latest ${o.winner}`:o.action==="split"?s=`split into ${o.folder}`:s=`winner ${o.winner}`,t(` collision ${o.test}: ${s} (${o.rule})`)}for(let o of n.discarded)t(` discarded ${o}`)}import{copyFileSync as Kr,existsSync as Te,mkdirSync as Wr}from"fs";import{join as Ct}from"path";function Jr(t,e,r){try{let n=Ct(t,"auteur","execution.json");if(Te(n))return!0;for(let i of e)if(!(!i||!Te(i)))return Wr(Ct(t,"auteur"),{recursive:!0}),Kr(i,n),!0}catch(n){try{r?.("debug","EVIDENCE_BLOB_COPY_FAILED","auteur execution blob copy failed",{operation:"ensureAuteurExecution",source:e.find(i=>i&&Te(i))??null,error:n instanceof Error?n.message:String(n)})}catch{}}return!1}import{readFileSync as Xr}from"fs";import{join as Zr}from"path";function Ne(t){let e=[],r=!0,n=o=>{if(o===null||typeof o!="object")return;let s=o;if(Array.isArray(s.operations))for(let a of s.operations){let c=a?.operation_id;typeof c=="string"&&c&&e.push(c)}if(Array.isArray(s.children)){s.content_type!=="generative_block"&&(r=!1);for(let a of s.children)n(a)}if(Array.isArray(s.branches)){r=!1;for(let a of s.branches){let c=a?.children;if(Array.isArray(c))for(let d of c)n(d)}}},i=t?.instructions;if(Array.isArray(i))for(let o of i)n(o);return{ids:e,linear:r}}function Qr(t){return Ne(t).ids}function je(t,e){let r=new Set(e.map(a=>a.action_id).filter(Boolean)),n=-1;for(let a of r){let c=t.indexOf(a);c>n&&(n=c)}let i=e.reduce((a,c)=>Math.max(a,c.ordinal),0),o=new Set,s=[];for(let a of t.slice(n+1))r.has(a)||o.has(a)||(o.add(a),s.push({id:a,ordinal:++i,status:"skipped",action_id:a}));return s}function $t(t,e){let r=new Set(e),n=t.filter(o=>o.action_id);if(n.some(o=>r.has(o.action_id))||n.length>e.length)return null;let i=0;return t.map(o=>o.action_id?{...o,action_id:e[i++]}:o)}function qr(t,e){if(t.length>e.length)return!1;for(let r=0;r<t.length;r++)if(e[r]!==t[r].action_id)return!1;return!0}function en(t,e,r,n=!0){if(e.length===0)return{steps:t,tail:[]};let i=(r&&n?$t(t,e):null)??t,o=i.filter(a=>a.action_id),s=new Set(e);return o.length>0&&o.every(a=>s.has(a.action_id))?{steps:i,tail:je(e,i)}:o.length>0&&!qr(o,e)?{steps:i,tail:[],unjoined:!0}:{steps:i,tail:je(e,i)}}function Dt(t){try{let e=Xr(Zr(t,"auteur","execution.json"),"utf8");return Ne(JSON.parse(e))}catch{return{ids:[],linear:!0}}}function tn(t){return Dt(t).ids}export{$ as a,re as b,ne as c,ie as d,oe as e,se as f,ae as g,ce as h,de as i,Lt as j,ue as k,le as l,Tt as m,jt as n,pe as o,ge as p,ve as q,he as r,we as s,ye as t,Nt as u,Vt as v,_e as w,Mt as x,xe as y,Ie as z,be as A,at as B,ke as C,Ee as D,ut as E,Jt as F,j as G,tr as H,xt as I,It as J,bt as K,br as L,kr as M,Er as N,Sr as O,kt as P,De as Q,V as R,Ae as S,Oe as T,Nr as U,Fe as V,Gr as W,Jr as X,Ne as Y,Qr as Z,je as _,$t as $,en as aa,Dt as ba,tn as ca};
@@ -1,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as k,b as F}from"./chunk-VOHQA2SP.js";import{b as $}from"./chunk-NVGBE2DR.js";import{deflateSync as Y}from"zlib";function j(n,s){let e=Buffer.alloc(4);e.writeUInt32BE(s.length);let o=Buffer.concat([Buffer.from(n,"latin1"),s]),i=Buffer.alloc(4);return i.writeUInt32BE(F(o)),Buffer.concat([e,o,i])}var G={1:0,3:2,4:6};function N(n,s){let{width:e,height:o,channels:i}=s;if(n.byteLength!==e*o*i)throw new Error(`pngEncode: raw length ${n.byteLength} != ${e}x${o}x${i}`);let d=Buffer.alloc(13);d.writeUInt32BE(e,0),d.writeUInt32BE(o,4),d[8]=8,d[9]=G[i];let t=e*i,a=Buffer.alloc(o*(t+1));for(let f=0;f<o;f++)a[f*(t+1)]=0,n.copy(a,f*(t+1)+1,f*t,(f+1)*t);return Buffer.concat([Buffer.from([137,80,78,71,13,10,26,10]),j("IHDR",d),j("IDAT",Y(a)),j("IEND",Buffer.alloc(0))])}var U=64,X=16,J=12e6,V=6e6,K=5e3,W=3e4,H="",_=class extends Error{constructor(e,o){super(`${e}: ${o}`);this.code=e}};async function q(n,s,e){let o=n.objs.has(s)?n.objs:n.commonObjs.has(s)?n.commonObjs:null;if(o)try{return o.get(s)??null}catch{return null}if(e.remainingMs<=0)return null;let i=s.startsWith("g_")?n.commonObjs:n.objs,d,t=Date.now();try{return await Promise.race([new Promise(a=>{try{i.get(s,f=>a(f??null))}catch{a(null)}}),new Promise(a=>{d=setTimeout(()=>a(null),Math.min(K,e.remainingMs))})])}finally{clearTimeout(d),e.remainingMs-=Date.now()-t}}async function z(){let n=await import("pdfjs-dist/legacy/build/pdf.mjs");return n.default??n}async function oe(n,s){let e=await z();H=e.version;let o={remainingMs:s?.resolveBudgetMs??W},i,d=e.getDocument({data:new Uint8Array(n),isEvalSupported:!1,verbosity:0});try{i=await d.promise}catch(t){throw t.name==="PasswordException"?new _("PDF_ENCRYPTED","password-protected \u2014 decrypt and re-ingest"):new _("PDF_UNREADABLE",String(t.message??t))}try{let t=[],a=[],f=new Map,D=[],T=new Map,R=0,A=0;for(let u=1;u<=i.numPages;u++){let O=await i.getPage(u);t.push(`[page ${u}]`);let C=await O.getTextContent(),c="",E=null;for(let m of C.items){if(typeof m!="object"||m===null||!("str"in m))continue;let p=m,P=Math.round(p.transform[5]);E!==null&&P!==E&&c.trim()!==""&&(t.push(c.trimEnd()),c=""),c!==""&&!c.endsWith(" ")&&p.str!==""&&!p.str.startsWith(" ")&&P===E&&(c+=" "),c+=p.str,A+=p.str.trim().length,E=P,p.hasEOL&&c.trim()!==""&&(t.push(c.trimEnd()),c="",E=null)}c.trim()!==""&&t.push(c.trimEnd());let B=await O.getOperatorList(),M=0;for(let m=0;m<B.fnArray.length;m++){let p=B.fnArray[m]===e.OPS.paintImageXObject,P=B.fnArray[m]===e.OPS.paintInlineImageXObject;if(!p&&!P)continue;M+=1;let h=`p${u}-${M}`,l=(v,L,w,S)=>{a.push({ref:h,page:u,media_type:"image/png",...L?{blob:L}:{},...S?{appearance:S}:{},delivery:v,...w?{duplicate_of:w}:{}}),t.push(v==="duplicate"&&w?`[img#${h}: image on page ${u} \u2014 same as img#${w}; cite img#${w}]`:`[img#${h} omitted: ${v}]`)};if(P){l("unsupported-image-kind");continue}let r=await q(O,B.argsArray[m][0],o);if(!r?.data||!r.width||!r.height){l("undecodable");continue}let I;if(r.kind===e.ImageKind.RGB_24BPP)I=3;else if(r.kind===e.ImageKind.RGBA_32BPP)I=4;else{l("unsupported-image-kind");continue}let y;try{y=N(Buffer.from(r.data.buffer,r.data.byteOffset,r.data.byteLength),{width:r.width,height:r.height,channels:I})}catch{l("undecodable");continue}let g=$(y);f.set(g,y);let b=k(Buffer.from(r.data.buffer,r.data.byteOffset,r.data.byteLength),{width:r.width,height:r.height,channels:I});if(r.width<U||r.height<U){l("below-dimension-floor",g,void 0,b);continue}let x=T.get(g);if(x!==void 0){l("duplicate",g,x,b);continue}if(y.byteLength>V){l("image-too-large",g,void 0,b);continue}if(R+y.byteLength>J){l("vision-byte-budget-reached",g,void 0,b);continue}if(D.length>=X){l("image-cap-reached",g,void 0,b);continue}T.set(g,h),R+=y.byteLength,D.push(h),a.push({ref:h,page:u,media_type:"image/png",blob:g,appearance:b,delivery:"selected"}),t.push(`[img#${h}: image on page ${u}]`)}}if(A===0&&i.numPages>0)throw new _("PDF_NO_TEXT_LAYER","no extractable text \u2014 image-only or scanned pdfs are not supported yet");return{projection:t.join(`
3
- `)+`
4
- `,inventory:a,blobs:f,delivered:D,pages:i.numPages,converter:{name:"pdfjs-dist",version:e.version,policy:"v1"}}}finally{await d.destroy().catch(()=>{})}}export{U as a,X as b,J as c,V as d,H as e,_ as f,oe as g};