@testmuai/kane-cli 0.7.0 → 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 (267) hide show
  1. package/dist/ChatSurface-E7QKI4LA.js +8 -0
  2. package/dist/{ChromeProfilePicker-DK2A3NYY.js → ChromeProfilePicker-DGDWGCZD.js} +1 -1
  3. package/dist/{CliFeedbackPrompt-D5QDOBE2.js → CliFeedbackPrompt-SYCZXSME.js} +1 -1
  4. package/dist/{CliUploadProgress-AIZL7N6Z.js → CliUploadProgress-VDEAKXJY.js} +1 -1
  5. package/dist/{ConfigView-SDBCTYUU.js → ConfigView-HPKRQXMC.js} +1 -1
  6. package/dist/EvidenceViewOffer-F5YG54OC.js +2 -0
  7. package/dist/{FolderPicker-IVBHPPMW.js → FolderPicker-4NSDXQY5.js} +1 -1
  8. package/dist/{HelpView-YYYX4RKI.js → HelpView-ON6BFGJM.js} +1 -1
  9. package/dist/{InfoBox-MQV3XBT4.js → InfoBox-B23NZ6IG.js} +1 -1
  10. package/dist/{LinksBox-NCFNBUMW.js → LinksBox-TI26VFFH.js} +1 -1
  11. package/dist/{ProfilesView-6GXF6CP2.js → ProfilesView-CRO5AH3H.js} +1 -1
  12. package/dist/{ProjectPicker-W6XDGNDJ.js → ProjectPicker-3N7LJOXU.js} +1 -1
  13. package/dist/{SaveSessionPrompt-QF3P7ERS.js → SaveSessionPrompt-UTOEC5AW.js} +1 -1
  14. package/dist/SingleShotApp-Y3YDFQSD.js +2 -0
  15. package/dist/{SummaryBox-4SZI4XSO.js → SummaryBox-JK64EKC2.js} +1 -1
  16. package/dist/TestMdRunView-O6JTHV5W.js +2 -0
  17. package/dist/{WhoamiView-N3HAJ3TN.js → WhoamiView-6QSLPNF6.js} +1 -1
  18. package/dist/{auth-RXNBQZI2.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-MI3IPBJS.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-CSGQIY7X.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-3Q6WAK6P.js +2 -0
  31. package/dist/{chunk-EN7NW7DU.js → chunk-4LTXE3IX.js} +1 -1
  32. package/dist/{chunk-NR23HZU4.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-5FJJJNJK.js +4 -0
  37. package/dist/{chunk-BCH3JCND.js → chunk-5SXMV66P.js} +1 -1
  38. package/dist/{chunk-AV6E6WLY.js → chunk-5WXGMXGA.js} +2 -2
  39. package/dist/chunk-5ZQZOVWY.js +4 -0
  40. package/dist/{chunk-FMR2KPSK.js → chunk-6KPPGMO2.js} +1 -1
  41. package/dist/{chunk-77WMTCUQ.js → chunk-74HTO7K3.js} +1 -1
  42. package/dist/{chunk-FCHTL74E.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-T7ZPMTGS.js → chunk-AECMF3T2.js} +1 -1
  46. package/dist/chunk-AFBKGZFG.js +2 -0
  47. package/dist/chunk-AFPHLUQ5.js +6 -0
  48. package/dist/chunk-AJ56AMT6.js +9 -0
  49. package/dist/{chunk-RODHDQU3.js → chunk-APPYQZFK.js} +1 -1
  50. package/dist/{chunk-XLKRV2JH.js → chunk-AXTGYOMK.js} +1 -1
  51. package/dist/{chunk-AYY7RYMK.js → chunk-B5RS2XZU.js} +2 -2
  52. package/dist/chunk-BB2W35TW.js +2 -0
  53. package/dist/chunk-BKHXPBWN.js +2 -0
  54. package/dist/{chunk-KCBS57IF.js → chunk-BXYWX4J3.js} +1 -1
  55. package/dist/chunk-C3T7TKAC.js +349 -0
  56. package/dist/{chunk-IQODWB32.js → chunk-CLGC7VEO.js} +1 -1
  57. package/dist/{chunk-6HYW5RFX.js → chunk-CUM23TLF.js} +1 -1
  58. package/dist/chunk-DBIBROYW.js +5 -0
  59. package/dist/chunk-DBKNJRJG.js +2 -0
  60. package/dist/chunk-DUAXZYAD.js +4 -0
  61. package/dist/chunk-DYW5C6II.js +2 -0
  62. package/dist/chunk-DZPGG4S6.js +7 -0
  63. package/dist/{chunk-GQ3NCBYR.js → chunk-EOLFTMWF.js} +1 -1
  64. package/dist/chunk-F7ISS545.js +2 -0
  65. package/dist/{chunk-CH3VWCRZ.js → chunk-FBHRBFHP.js} +1 -1
  66. package/dist/{chunk-X5P2T7MA.js → chunk-FDIPQRX4.js} +1 -1
  67. package/dist/chunk-GFKCTYCA.js +6 -0
  68. package/dist/{chunk-5WE4DHXL.js → chunk-GYNTNKNB.js} +1 -1
  69. package/dist/{chunk-RQYS3KGU.js → chunk-H32GM5G4.js} +1 -1
  70. package/dist/{chunk-4BAMZSFU.js → chunk-HYSFJSIG.js} +1 -1
  71. package/dist/chunk-I7TIGB7K.js +2 -0
  72. package/dist/chunk-IDX3TOPY.js +6 -0
  73. package/dist/{chunk-CVOGP253.js → chunk-IMR64OCZ.js} +1 -1
  74. package/dist/{chunk-3RZ63RBO.js → chunk-IOD3HQVW.js} +1 -1
  75. package/dist/{chunk-QBCS57EO.js → chunk-J5FBU425.js} +40 -40
  76. package/dist/chunk-JKM2PUHI.js +4 -0
  77. package/dist/{chunk-HOOXUO3X.js → chunk-JPWLGHPM.js} +1 -1
  78. package/dist/chunk-JZ26R6UL.js +2 -0
  79. package/dist/chunk-KBM3XHAM.js +2 -0
  80. package/dist/chunk-KCCSWEGA.js +4 -0
  81. package/dist/{chunk-J3EMJ7US.js → chunk-KQZA2QSC.js} +1 -1
  82. package/dist/{chunk-MV4UYTZT.js → chunk-KWIK22R6.js} +1 -1
  83. package/dist/chunk-L2TV4G56.js +4 -0
  84. package/dist/{chunk-VYMCE7UR.js → chunk-M6FKJKC6.js} +2 -2
  85. package/dist/{chunk-5YHVK2EO.js → chunk-MK7JUOYV.js} +1 -1
  86. package/dist/chunk-N2P4MI32.js +2 -0
  87. package/dist/{chunk-A2IQRVPR.js → chunk-O75ZHGJG.js} +1 -1
  88. package/dist/chunk-OR6MCL6Z.js +2 -0
  89. package/dist/chunk-ORQNKZ2Z.js +5 -0
  90. package/dist/{chunk-GRB66C5S.js → chunk-OS4VSIHT.js} +1 -1
  91. package/dist/{chunk-E5PWL3BG.js → chunk-OUJQVBUT.js} +3 -3
  92. package/dist/{chunk-SBZWFULF.js → chunk-PLOWZLG5.js} +1 -1
  93. package/dist/chunk-QIGPXYMF.js +19 -0
  94. package/dist/chunk-QOFZSHSC.js +47 -0
  95. package/dist/{chunk-2XMJ6YAE.js → chunk-R5T4RLF5.js} +1 -1
  96. package/dist/chunk-R7QAS6LZ.js +4 -0
  97. package/dist/{chunk-YHQFYZJ5.js → chunk-RDNFVZEB.js} +1 -1
  98. package/dist/{chunk-67SSEGDO.js → chunk-SFII7HPP.js} +1 -1
  99. package/dist/{chunk-4SJC64KQ.js → chunk-SL6PCVM2.js} +1 -1
  100. package/dist/{chunk-QQUZF2DZ.js → chunk-STVP2XHO.js} +1 -1
  101. package/dist/chunk-TH47OOBV.js +4 -0
  102. package/dist/chunk-TRJUD3XJ.js +5 -0
  103. package/dist/{chunk-XIXR63FI.js → chunk-UC7MNPIN.js} +1 -1
  104. package/dist/chunk-UD7KKHPW.js +5 -0
  105. package/dist/chunk-VAYBKR76.js +4 -0
  106. package/dist/chunk-VFII6C46.js +2 -0
  107. package/dist/chunk-VGFTNLQQ.js +2 -0
  108. package/dist/{chunk-AIMINJVP.js → chunk-VHZ4S57N.js} +1 -1
  109. package/dist/chunk-VLWMMOMF.js +6 -0
  110. package/dist/chunk-VMM4LC4V.js +10 -0
  111. package/dist/{chunk-DFDDUMG5.js → chunk-VOOPWFHW.js} +1 -1
  112. package/dist/{chunk-4GLYNAK7.js → chunk-VRLUNZAK.js} +1 -1
  113. package/dist/chunk-VRVFPMCR.js +2 -0
  114. package/dist/{chunk-WREVEATJ.js → chunk-VT54ARGE.js} +1 -1
  115. package/dist/{chunk-LGVHW4ZA.js → chunk-VWKVUOXU.js} +1 -1
  116. package/dist/chunk-W4B5LOEX.js +4 -0
  117. package/dist/{chunk-K7USHLVZ.js → chunk-W5TTF7GB.js} +3 -3
  118. package/dist/chunk-WXHQYYD5.js +2 -0
  119. package/dist/{chunk-44IWSV6L.js → chunk-XUS4WKDS.js} +1 -1
  120. package/dist/chunk-XWKUZJCP.js +2 -0
  121. package/dist/chunk-YTHQNN2L.js +3 -0
  122. package/dist/{chunk-K4VIM4RM.js → chunk-ZBOWFJB2.js} +2 -2
  123. package/dist/chunk-ZMNJBUAO.js +2 -0
  124. package/dist/{chunk-MTHCUBDF.js → chunk-ZRASQ63J.js} +1 -1
  125. package/dist/{chunk-B4LLKQTK.js → chunk-ZUGCHQFC.js} +1 -1
  126. package/dist/committer-SWEWEYNX.js +2 -0
  127. package/dist/{config-5GOFF5F4.js → config-CWZV6XPT.js} +1 -1
  128. package/dist/cover-cmd-NWIRJY5Z.js +3 -0
  129. package/dist/{credentials-GXDXVMXW.js → credentials-YHTJGKEO.js} +1 -1
  130. package/dist/descriptor-OEUZZCOK.js +2 -0
  131. package/dist/design-committer-VYT6NU3T.js +2 -0
  132. package/dist/dispatch-WVNXB7AD.js +2 -0
  133. package/dist/docx-convert-CHLJUTFH.js +2 -0
  134. package/dist/dossier-KTLTGT2X.js +3 -0
  135. package/dist/evidence-IVDNXWPL.js +2 -0
  136. package/dist/evolve-cmd-XBX4SX5H.js +2 -0
  137. package/dist/{exit-manager-MXUD7GQ7.js → exit-manager-XZL4KIJU.js} +1 -1
  138. package/dist/explain-UAAQWHYR.js +2 -0
  139. package/dist/{explain-cmd-NWIYH5MI.js → explain-cmd-75MCF2ZV.js} +1 -1
  140. package/dist/{explain-cmd-DBUTPZHA.js → explain-cmd-IZEHWZV5.js} +1 -1
  141. package/dist/extract-bind-5OWELRME.js +10 -0
  142. package/dist/extract-cmd-ZRYMJ6IC.js +5 -0
  143. package/dist/feeder-C3TOJPKK.js +2 -0
  144. package/dist/gaps-cmd-XBRXKXDL.js +3 -0
  145. package/dist/{gate-B6C6KLFA.js → gate-54BRAE7N.js} +1 -1
  146. package/dist/{generate-headless-LZ4HRSQ4.js → generate-headless-D6BISWDC.js} +2 -2
  147. package/dist/{headless-io-PWW6YKH2.js → headless-io-66RG5NN5.js} +1 -1
  148. package/dist/identity-ADZ4PAJF.js +2 -0
  149. package/dist/index.js +61 -62
  150. package/dist/ingest-EX72IEQT.js +2 -0
  151. package/dist/ingest-cmd-YTGOICTC.js +2 -0
  152. package/dist/interactive-bind-XSRD36MO.js +25 -0
  153. package/dist/lifecycle-cmd-EQSFAZG6.js +2 -0
  154. package/dist/list-cmd-IRJSUCM5.js +3 -0
  155. package/dist/{list-commands-WIVODSEL.js → list-commands-RCYHJ5Y3.js} +1 -1
  156. package/dist/locks-cmd-CSVSWY2Y.js +2 -0
  157. package/dist/logical-ids-TEBCQJGO.js +2 -0
  158. package/dist/login-flow-PYAPYCPY.js +2 -0
  159. package/dist/maintenance-cmd-MVFA6H74.js +2 -0
  160. package/dist/next-TRSKMBO5.js +2 -0
  161. package/dist/paths-JCYX6UWL.js +2 -0
  162. package/dist/pdf-convert-OZIRUADA.js +2 -0
  163. package/dist/{persist-recorded-session-J6Z2SCTT.js → persist-recorded-session-DTYCLXTQ.js} +1 -1
  164. package/dist/phase-seed-DIRETNU6.js +2 -0
  165. package/dist/pipeline-MXFOD6ES.js +2 -0
  166. package/dist/readmodel-XOYGGQ3S.js +2 -0
  167. package/dist/reconcile-cmd-EG6BOU3A.js +2 -0
  168. package/dist/reconcile-deps-HTT6IPHT.js +4 -0
  169. package/dist/reconcile-engine-JQNXALNY.js +2 -0
  170. package/dist/{recording-banner-IRFMIZSJ.js → recording-banner-76GCIPUN.js} +1 -1
  171. package/dist/records-IOZTZUZV.js +2 -0
  172. package/dist/{require-project-folder-XSBJGIVF.js → require-project-folder-ACRDP5ZB.js} +1 -1
  173. package/dist/{resolver-IDCGRPFJ.js → resolver-SRPCFW7P.js} +1 -1
  174. package/dist/revert-NQ7GEVSE.js +2 -0
  175. package/dist/review-cmd-L3V5UP5T.js +4 -0
  176. package/dist/run-GMZCDRDD.js +2 -0
  177. package/dist/run-TFRWPGXP.js +2 -0
  178. package/dist/run-channel-RGH4WIQX.js +2 -0
  179. package/dist/{run-test-md-QCERS7FQ.js → run-test-md-KEHSRMCM.js} +2 -2
  180. package/dist/sessions-GIEXOCE4.js +2 -0
  181. package/dist/sessions-cmd-ZVYGSRJ3.js +25 -0
  182. package/dist/{skill-installer-WAVEVCSG.js → skill-installer-HBN3A35K.js} +1 -1
  183. package/dist/spawner-GC5CFAJ7.js +2 -0
  184. package/dist/structured-answers-A43Q25CZ.js +5 -0
  185. package/dist/tcg-generate-V7YFNC5O.js +2 -0
  186. package/dist/testmd-actions-MNDOO76O.js +2 -0
  187. package/dist/token-refresh-3UYMCYG3.js +2 -0
  188. package/dist/trust-gate-EX7R2P4Y.js +2 -0
  189. package/dist/{validate-basic-IJKKRQRU.js → validate-basic-ZGWPBYB6.js} +1 -1
  190. package/dist/verdicts-SCETLY5J.js +2 -0
  191. package/dist/{version-check-O5GYZYTP.js → version-check-CJWKDAXV.js} +1 -1
  192. package/dist/{view-cmd-GQBFCPDL.js → view-cmd-SOVM64L2.js} +1 -1
  193. package/dist/walk-session-YUYRULPY.js +2 -0
  194. package/dist/with-telemetry-E7QWPGL6.js +2 -0
  195. package/package.json +6 -6
  196. package/dist/ChatSurface-PMEOJBZG.js +0 -8
  197. package/dist/EvidenceViewOffer-EOKJE2B6.js +0 -2
  198. package/dist/SingleShotApp-T673X7BS.js +0 -2
  199. package/dist/TestMdRunView-SNYEO6CS.js +0 -2
  200. package/dist/bind-NSGW5BBZ.js +0 -6
  201. package/dist/bootstrap-RPT3JOGD.js +0 -2
  202. package/dist/bridge-BTSWCJ3B.js +0 -2
  203. package/dist/chat-committer-OS7ULZMH.js +0 -2
  204. package/dist/chat-controller-QLORQWJZ.js +0 -2
  205. package/dist/chunk-3C5GMAM4.js +0 -2
  206. package/dist/chunk-3CJIMPQK.js +0 -14
  207. package/dist/chunk-4XSW6WZD.js +0 -5
  208. package/dist/chunk-5YPBPZUR.js +0 -2
  209. package/dist/chunk-6W6AIDLJ.js +0 -4
  210. package/dist/chunk-7E24OCGX.js +0 -2
  211. package/dist/chunk-7YPK6EDR.js +0 -4
  212. package/dist/chunk-DGIPQINV.js +0 -12
  213. package/dist/chunk-EV3EHXEI.js +0 -4
  214. package/dist/chunk-F7WKDMX7.js +0 -47
  215. package/dist/chunk-FHKDTM5L.js +0 -6
  216. package/dist/chunk-FPFOW6BS.js +0 -2
  217. package/dist/chunk-FRBYGSGJ.js +0 -4
  218. package/dist/chunk-GG43HSU2.js +0 -3
  219. package/dist/chunk-J2KSZUOO.js +0 -4
  220. package/dist/chunk-J44RN3FB.js +0 -2
  221. package/dist/chunk-JSF5JYZC.js +0 -9
  222. package/dist/chunk-KHQHVSZ6.js +0 -5
  223. package/dist/chunk-MAO5BAQI.js +0 -347
  224. package/dist/chunk-N4LMQR7C.js +0 -6
  225. package/dist/chunk-QM4S2APK.js +0 -2
  226. package/dist/chunk-RCTM7NGT.js +0 -2
  227. package/dist/chunk-RN4OSVTG.js +0 -6
  228. package/dist/chunk-UXPQRALY.js +0 -13
  229. package/dist/chunk-V3UE6RJP.js +0 -2
  230. package/dist/chunk-VJFFMOUA.js +0 -2
  231. package/dist/chunk-VOHQA2SP.js +0 -2
  232. package/dist/chunk-WTXHOWUP.js +0 -3
  233. package/dist/chunk-Y5RNCJAN.js +0 -19
  234. package/dist/chunk-Z2JSEL3I.js +0 -4
  235. package/dist/cover-cmd-SV3I23UM.js +0 -2
  236. package/dist/descriptor-KXDJ4XYD.js +0 -2
  237. package/dist/docx-convert-ZBVQO2LG.js +0 -2
  238. package/dist/dossier-KJSJPWOW.js +0 -3
  239. package/dist/evidence-VDNZ3K23.js +0 -2
  240. package/dist/evolve-cmd-BLSVVW4I.js +0 -2
  241. package/dist/explain-EBVIUS2X.js +0 -2
  242. package/dist/extract-bind-3SWPBZX6.js +0 -8
  243. package/dist/extract-cmd-HEX7F4IS.js +0 -6
  244. package/dist/gaps-cmd-CKCHH3HQ.js +0 -2
  245. package/dist/ingest-FIIO67ZN.js +0 -2
  246. package/dist/ingest-cmd-KRPZVB7W.js +0 -7
  247. package/dist/interactive-bind-PTAZVCE7.js +0 -10
  248. package/dist/lifecycle-cmd-32LG364Q.js +0 -2
  249. package/dist/list-cmd-UTZ2PQUK.js +0 -3
  250. package/dist/logical-ids-I7B3VJEH.js +0 -2
  251. package/dist/login-flow-GX7CTVWN.js +0 -2
  252. package/dist/maintenance-cmd-BZAGSYGI.js +0 -2
  253. package/dist/pdf-convert-S7VYE6AV.js +0 -2
  254. package/dist/pipeline-HT7FCEXA.js +0 -2
  255. package/dist/readmodel-S5RAQH3F.js +0 -2
  256. package/dist/reconcile-cmd-2VHBKFA5.js +0 -2
  257. package/dist/revert-RQJE56HF.js +0 -2
  258. package/dist/review-cmd-7LXGYHHQ.js +0 -4
  259. package/dist/run-4LTYFTF2.js +0 -2
  260. package/dist/run-YGJZ2SXX.js +0 -2
  261. package/dist/sessions-cmd-DTQYDZNT.js +0 -23
  262. package/dist/spawner-YNYB4Z7K.js +0 -2
  263. package/dist/tcg-generate-D35EMRMQ.js +0 -2
  264. package/dist/testmd-actions-NB5Z6QJ3.js +0 -2
  265. package/dist/token-refresh-OY3WLAKD.js +0 -2
  266. package/dist/walk-session-OPAEV4WR.js +0 -2
  267. /package/dist/{chunk-BC7UVJJB.js → chunk-CH273NAE.js} +0 -0
@@ -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.0",
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.0",
38
- "@testmuai/kane-cli-darwin-x64": "0.7.0",
39
- "@testmuai/kane-cli-linux-x64": "0.7.0",
40
- "@testmuai/kane-cli-linux-arm64": "0.7.0",
41
- "@testmuai/kane-cli-win-x64": "0.7.0",
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 Lt,b as ae,c as Ot,d as Je}from"./chunk-VJFFMOUA.js";import{a as _t}from"./chunk-IQODWB32.js";import{a as Ae}from"./chunk-7YPK6EDR.js";import{b as Dt,c as Mt}from"./chunk-GG43HSU2.js";import"./chunk-FMR2KPSK.js";import{a as Bt,b as At,c as Et}from"./chunk-67SSEGDO.js";import{a as St}from"./chunk-5Y2G4NC7.js";import"./chunk-NVGBE2DR.js";import"./chunk-6W6AIDLJ.js";import"./chunk-6HYW5RFX.js";import"./chunk-J2KSZUOO.js";import"./chunk-5YPBPZUR.js";import"./chunk-IAHKTEET.js";import{a as Ct}from"./chunk-YCCUBQY4.js";import{a as It}from"./chunk-5WE4DHXL.js";import{b as Rt}from"./chunk-DFS4RMVP.js";import{y as r}from"./chunk-B4LLKQTK.js";import{a as V}from"./chunk-HCBYKLMW.js";import{a as S,b as n,k as Be}from"./chunk-C44QQJR4.js";import{a as Cn}from"./chunk-6YGTRKDT.js";import{e as U}from"./chunk-UR6MHSHU.js";var k=U(Cn(),1);var c=U(V(),1),Bn=60,An=100;function Ye(e,s){let i=e.options.length,a=i,d=e.multi_select?a++:null,g=e.allow_free_text?a++:null,u=s?a++:null;return{optionCount:i,doneIdx:d,freeIdx:g,batchIdx:u,maxSel:a-1}}var En="\xA0",Dn={high:{text:`\u203C${En}high`,color:r.red},med:{text:"med",color:"yellow"},low:{text:"low",color:r.dim}};function Mn(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 Ln(e,s,i){let a=m=>e[m].length+6,d=a(s),g=s,u=s;for(;;){let m=u+1<e.length?a(u+1):1/0,h=g-1>=0?a(g-1):1/0;if(m===1/0&&h===1/0)break;if(m<=h){if(d+m>i)break;d+=m,u+=1}else{if(d+h>i)break;d+=h,g-=1}}return{lo:g,hi:u}}function Pt({batch:e,qView:s,sel:i=0,focused:a=!1,freeText:d=null,multiSelFor:g}){let{stdout:u}=Be(),m=u?.columns??80,h=m<Bn,I=Math.min(m-1,An),f=Math.max(0,Math.min(e.questions.length-1,s??(e.cursor<0?0:e.cursor))),p=e.questions[f],L=e.resolution[f],A=e.resolution.filter(F=>!F).length,w=e.questions.length-A,R=Ae(e),C=Ye(p,R!==""),v=g?g(f):[],E=Dn[p.risk],x=F=>a&&i===F?(0,c.jsx)(n,{color:r.assuranceAccent,children:"\u276F"}):" ",N=`? the agent needs ${A===1?"one answer":`${A} answers`}`,_=e.questions.length>1?` \xB7 ${f+1} of ${e.questions.length} \xB7 ${w} answered`:"",q=(0,c.jsxs)(S,{flexDirection:"column",children:[(0,c.jsx)(S,{paddingLeft:2,children:(0,c.jsxs)(n,{bold:!0,children:[p.text,E?(0,c.jsx)(n,{color:E.color,bold:!1,children:` ${E.text}`}):null]})}),(0,c.jsx)(S,{paddingLeft:2,children:(0,c.jsx)(n,{color:r.dim,children:p.rationale})}),(0,c.jsx)(n,{children:" "}),p.options.map((F,O)=>{let H=a&&i===O;return(0,c.jsxs)(S,{flexDirection:"column",children:[(0,c.jsxs)(n,{children:[x(O)," ",p.multi_select?(0,c.jsx)(n,{color:v.includes(O)?r.green:r.dim,children:v.includes(O)?"[x] ":"[ ] "}):null,(0,c.jsx)(n,{color:H?r.assuranceAccent:void 0,children:`${O+1}. ${F.label}`}),O===p.recommended_index?(0,c.jsx)(n,{color:r.dim,children:" (recommended)"}):null,L?.selected_index===O?(0,c.jsx)(n,{color:r.dim,children:" (current)"}):null]}),F.detail?(0,c.jsx)(S,{paddingLeft:5,children:(0,c.jsx)(n,{color:r.dim,children:F.detail})}):null]},`o-${O}`)}),p.multi_select&&C.doneIdx!=null?(0,c.jsxs)(n,{children:[x(C.doneIdx)," ",(0,c.jsx)(n,{color:r.green,children:"\u2714"}),(0,c.jsx)(n,{color:a&&i===C.doneIdx?r.assuranceAccent:void 0,children:" done \u2014 confirm selection"})]}):null,p.allow_free_text?(0,c.jsx)(n,{children:" "}):null,p.allow_free_text?d?(0,c.jsxs)(S,{children:[(0,c.jsxs)(n,{children:[(0,c.jsx)(n,{color:r.assuranceAccent,children:"\u276F"})," ",(0,c.jsx)(n,{color:r.dim,children:"\u270E "})]}),(0,c.jsx)(Ct,{value:d.value,onChange:d.onChange,onSubmit:d.onSubmit,onCancel:d.onCancel,placeholder:"Tell me what to do"})]}):(0,c.jsxs)(n,{children:[C.freeIdx!=null?x(C.freeIdx):" "," ",(0,c.jsx)(n,{color:a&&C.freeIdx!=null&&i===C.freeIdx?r.assuranceAccent:r.dim,children:"\u270E Tell me what to do"})]}):null]}),de=R!==""?(0,c.jsxs)(c.Fragment,{children:[(0,c.jsx)(n,{children:" "}),(0,c.jsxs)(n,{children:[a&&C.batchIdx!=null&&i===C.batchIdx?(0,c.jsx)(n,{color:r.assuranceAccent,children:"\u276F"}):" "," ",(0,c.jsx)(n,{color:r.assuranceAccent,children:"\xBB"}),(0,c.jsx)(n,{bold:!0,color:a&&C.batchIdx!=null&&i===C.batchIdx?r.assuranceAccent:void 0,children:" Go with recommendations"}),A>=5?(0,c.jsx)(n,{color:r.dim,children:` \u2014 resolves all ${A} open`}):null,(0,c.jsx)(n,{color:r.dim,children:" (tab)"})]})]}):null;if(h)return(0,c.jsxs)(S,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,c.jsx)(n,{color:r.assuranceAccent,bold:!0,children:N}),e.questions.length>1?(0,c.jsx)(n,{color:r.dim,children:_.replace(/^ · /,"")}):null,(0,c.jsx)(n,{children:" "}),q,de,(0,c.jsx)(S,{paddingLeft:2,children:(0,c.jsx)(n,{color:r.muted,children:"\u2191\u2193 \u23CE \xB7 \u2190 \u2192 questions \xB7 esc back"})})]});let _e=`\u2500\u2500 ${N}${_} `,Oe=Math.max(2,I-_e.length),me="\u2191\u2193 select \xB7 \u23CE confirm \xB7 \u2190 \u2192 questions \xB7 type = your words \xB7 esc back",ge=`\u2500\u2500 ${me} `,te=Math.max(2,I-ge.length),K=e.questions.map(F=>Mn(F)),D=e.questions.length>1?Ln(K,f,I-8):null;return(0,c.jsxs)(S,{marginTop:1,marginBottom:1,flexDirection:"column",children:[(0,c.jsxs)(n,{color:r.assuranceAccent,children:["\u2500\u2500 ",(0,c.jsx)(n,{bold:!0,children:N}),_?(0,c.jsx)(n,{color:r.dim,children:_}):null,` ${"\u2500".repeat(Oe)}`]}),D?(0,c.jsx)(S,{marginTop:1,children:(0,c.jsxs)(n,{children:[D.lo>0?(0,c.jsx)(n,{color:r.dim,children:"\u25C0 "}):" ",e.questions.slice(D.lo,D.hi+1).map((F,O)=>{let H=D.lo+O,we=O>0?" ":"";return H===f?(0,c.jsxs)(n,{children:[we,(0,c.jsx)(n,{backgroundColor:r.assuranceAccent,color:"#0d1117",bold:!0,children:` ${K[H]} `})]},F.id):(0,c.jsxs)(n,{children:[we,e.resolution[H]?(0,c.jsxs)(n,{children:[(0,c.jsx)(n,{color:r.green,children:"\u2713 "}),(0,c.jsx)(n,{color:r.dim,children:K[H]})]}):(0,c.jsx)(n,{color:r.dim,children:`\u25CB ${K[H]}`})]},F.id)}),D.hi<e.questions.length-1?(0,c.jsx)(n,{color:r.dim,children:" \u25B6"}):null]})}):null,(0,c.jsx)(n,{children:" "}),q,de,(0,c.jsx)(n,{children:" "}),(0,c.jsxs)(n,{color:r.assuranceAccent,children:["\u2500\u2500 ",(0,c.jsx)(n,{color:r.muted,children:me}),` ${"\u2500".repeat(te)}`]})]})}var M=U(V(),1),qt={high:0,med:1,low:2},_n={high:r.red,med:"yellow",low:r.dim};function On(e){return e.map((s,i)=>({r:s,i})).sort((s,i)=>(qt[s.r.risk??"zz"]??3)-(qt[i.r.risk??"zz"]??3)||s.i-i.i).map(({r:s})=>s)}var ne=(e,s)=>e.length<=s?e:s<=1?"\u2026":`${e.slice(0,s-1)}\u2026`,Ee=(e,s)=>e+" ".repeat(Math.max(0,s-e.length));function Ft({rows:e,width:s=120,badgeHeader:i="risk"}){if(e.length===0)return null;let a=On(e),d=v=>v.staged||!v.id?"(staged)":_t(v.id),g=Math.max(2,...a.map(v=>d(v).length)),u=Math.max(i.length,...a.map(v=>(v.badge??"").length)),m=s>=96&&a.some(v=>v.summary),I=s-(m?13:10)-g-u,f=Math.max(...a.map(v=>Math.max(v.title.length,(v.marker??"").length)),5),p=Math.max(5,m?Math.min(f,Math.max(16,Math.floor(I*.5))):Math.min(f,I)),L=m?Math.max(7,I-p):0,A=(v,E,x,N)=>v+N.map(_=>`\u2500${"\u2500".repeat(_.length)}\u2500`).join(E)+x,w=(v,E,x,N)=>[Ee(ne(v,g),g),Ee(ne(E,p),p),Ee(ne(x,u),u),...m?[Ee(ne(N,L),L)]:[]],R=w("id","title",i,"summary"),C=[];C.push((0,M.jsx)(n,{color:r.dim,children:A("\u250C","\u252C","\u2510",R)},"t")),C.push((0,M.jsxs)(n,{children:[R.map((v,E)=>(0,M.jsxs)(n,{children:[(0,M.jsx)(n,{color:r.dim,children:E===0?"\u2502 ":" \u2502 "}),(0,M.jsx)(n,{bold:!0,children:v})]},E)),(0,M.jsx)(n,{color:r.dim,children:" \u2502"})]},"h")),C.push((0,M.jsx)(n,{color:r.dim,children:A("\u251C","\u253C","\u2524",R)},"m"));for(let[v,E]of a.entries()){let x=w(d(E),ne(E.title,p),ne(E.badge??"",u),ne(E.summary??"",L)),N=E.badgeColor??_n[E.badge??""]??r.dim;if(C.push((0,M.jsxs)(n,{children:[(0,M.jsx)(n,{color:r.dim,children:"\u2502 "}),(0,M.jsx)(n,{color:r.assuranceAccent,children:x[0]}),(0,M.jsx)(n,{color:r.dim,children:" \u2502 "}),x[1],(0,M.jsx)(n,{color:r.dim,children:" \u2502 "}),(0,M.jsx)(n,{color:N,children:x[2]}),m?(0,M.jsxs)(M.Fragment,{children:[(0,M.jsx)(n,{color:r.dim,children:" \u2502 "}),x[3]]}):null,(0,M.jsx)(n,{color:r.dim,children:" \u2502"})]},`r-${v}`)),E.marker){let _=w("",ne(E.marker,p),"","");C.push((0,M.jsx)(n,{color:r.dim,children:`\u2502 ${_.join(" \u2502 ")} \u2502`},`mk-${v}`))}}return C.push((0,M.jsx)(n,{color:r.dim,children:A("\u2514","\u2534","\u2518",R)},"b")),(0,M.jsx)(M.Fragment,{children:C})}var Pn={"use-case":"use-cases",ac:"ACs",scenario:"scenarios",test:"tests",gap:"gaps"},ee=e=>Pn[e]??`${e}s`,Nt=e=>e==="ac"?"AC":e==="use-case"?"use-case":e,Ze=e=>e.kind??"use-case",Wt=e=>`${Ze(e)}:${e.temp_ref}`;function jt(e){let s=e,i=s.badge??e.risk??null,a=s.why??e.summary??e.description??null;return JSON.stringify([e.title,i,a,s.extra??null,e.depends_on_hint??null])}function Ut(e){return e.filter(s=>s.role==="agent"&&typeof s.turnIndex=="number"&&Array.isArray(s.items)&&s.items.length>0)}function se(e){let s=new Map,i=1;for(let g of Ut(e)){let u=new Set;for(let m of g.items){let h=Wt(m);if(u.has(h))continue;u.add(h);let I=s.get(h);s.set(h,{num:I?.num??i++,ref:m.temp_ref,kind:Ze(m),item:m,turnIndex:g.turnIndex,fingerprint:jt(m)})}}let a=[...s.values()].sort((g,u)=>g.num-u.num),d=[];for(let g of a){let u=d.find(m=>m.kind===g.kind);u?u.count++:d.push({kind:g.kind,label:ee(g.kind),count:1})}return{entries:a,byRef:s,counts:d}}function Vt(e,s){let a=Ut(e).find(w=>w.turnIndex===s);if(!a)return null;let d=e.filter(w=>w.role!=="agent"||typeof w.turnIndex!="number"||w.turnIndex<=s),g=se(d),u=se(e.filter(w=>w.role!=="agent"||typeof w.turnIndex!="number"||w.turnIndex<s)),m=[],h=new Map,I=new Map,f=new Map,p=new Set;for(let w of a.items){let R=Wt(w);if(p.has(R))continue;p.add(R);let C=u.byRef.get(R),v=w.changed===!0,E=g.byRef.get(R).num,x=Ze(w);if(C&&!v&&C.fingerprint===jt(w)){h.set(x,(h.get(x)??0)+1);continue}let N=!!C||v,_=N?f:I;_.set(x,(_.get(x)??0)+1),m.push({item:w,num:E,updated:N})}let L=[...h.entries()].map(([w,R])=>({label:ee(w),count:R})),A=[...[...I.entries()].map(([w,R])=>`${R} new ${R===1?Nt(w):ee(w)}`),...[...f.entries()].map(([w,R])=>`${R} updated ${R===1?Nt(w):ee(w)}`)].join(" \xB7 ");return{fresh:m,unchanged:L,headerStats:A}}function et(e,s){let i=e.entries.filter(g=>g.turnIndex===s);if(i.length===0)return e;let a=new Map(i.map(g=>[g.ref,g])),d=[];for(let g of i){let u=d.find(m=>m.kind===g.kind);u?u.count+=1:d.push({kind:g.kind,label:ee(g.kind),count:1})}return{entries:i,byRef:a,counts:d}}var b=U(V(),1);function qn(e){let s=e.form==="assumed"?" (flagged)":e.form==="deferred"?"":" (you)",i=e.note?` \u2014 ${e.note}`:"";return e.form==="deferred"?`\u21B3 deferred q${e.qNum} ${e.stub}${i}`:e.form==="changed"?`\u21B3 changed q${e.qNum} ${e.stub}: ${e.prev??"?"} \u2192 ${e.choice??"?"}${s}${i}`:`\u21B3 ${e.form} q${e.qNum} ${e.stub}: ${e.choice??"?"}${s}${i}`}var Fn=Math.min(process.stdout?.columns??100,120)-2;function Kt({block:e,annotations:s}){switch(e.kind){case"banner":return(0,b.jsx)(S,{marginTop:1,children:(0,b.jsx)(n,{color:r.dim,children:` \u2500\u2500 ${e.text} \u2500\u2500`})});case"user":return(0,b.jsxs)(S,{marginTop:1,children:[(0,b.jsx)(n,{color:r.orange,children:"\u276F "}),(0,b.jsx)(n,{children:e.text})]});case"note":return(0,b.jsx)(n,{color:r.dim,children:` ${e.text}`});case"agent":return(0,b.jsx)(S,{marginTop:1,children:(0,b.jsx)(At,{text:e.text,accent:r.assuranceAccent})});case"thinking":return(0,b.jsx)(S,{marginTop:1,children:(0,b.jsx)(n,{color:r.dim,children:` thought for ${(e.tookMs/1e3).toFixed(1)}s`})});case"tool":return(0,b.jsx)(n,{color:r.dim,children:` ${Dt({name:e.name,status:e.status==="ok"?"done":e.status,detail:e.detail})}`});case"usage":return(0,b.jsx)(n,{color:r.dim,children:` \xB7 ${e.credits.toFixed(1)} credits \u2014 total ${e.total.toFixed(1)}`});case"turn":{let i=s??null,a=i?i.fresh:e.items.map((f,p)=>({item:f,num:p+1,updated:!1})),d={usecase:"risk","use-case":"risk",ac:"check",scenario:"kind",test:"check",gap:"severity",stylenote:"kind"},g=f=>f.kind??"use-case",u=new Map;for(let f of a){let p=f.item,L=g(f.item),A=p.risk==="high"||p.risk==="med"||p.risk==="low"?p.risk:void 0,w={id:p.logical_id??"",staged:!p.logical_id,title:p.title,badge:p.badge??p.risk??"",summary:p.why??p.summary??p.description??"",...A?{risk:A}:{},...f.updated?{marker:"\u21B3 changed"}:{}},R=u.get(L)??[];R.push(w),u.set(L,R)}let m=a.some(f=>!!f.item.kind),h=(i?.unchanged??[]).reduce((f,p)=>f+p.count,0),I=i?.headerStats?` \u2014 ${i.headerStats}${h>0?` (${h} unchanged)`:""}`:"";return(0,b.jsxs)(S,{flexDirection:"column",marginLeft:2,children:[(0,b.jsxs)(n,{bold:!0,children:[m?"design":e.heading,I?(0,b.jsx)(n,{bold:!1,color:r.dim,children:I}):null]}),[...u.entries()].map(([f,p])=>(0,b.jsxs)(S,{flexDirection:"column",children:[u.size>1?(0,b.jsx)(n,{color:r.dim,children:`${ee(f)} \xB7 ${p.length}`}):null,(0,b.jsx)(Ft,{rows:p,width:Fn,badgeHeader:d[f]??"info"})]},f)),i&&i.unchanged.length>0&&(0,b.jsx)(n,{color:r.dim,children:` \u22EE unchanged: ${i.unchanged.map(f=>`${f.count} ${f.label}`).join(" \xB7 ")}`})]})}case"answer":return(0,b.jsx)(n,{color:r.dim,children:qn(e.receipt)});case"continued":return(0,b.jsx)(n,{color:r.dim,children:"\u21B3 continued"});case"commit":return(0,b.jsxs)(S,{flexDirection:"column",children:[(0,b.jsx)(n,{color:e.ok?r.green:r.red,children:` ${e.ok?"\u2714":"\u2717"} ${e.line}`}),(e.warnings??[]).map((i,a)=>(0,b.jsx)(n,{color:r.dim,children:` \u26A0 ${i}`},`w-${a}`))]});case"error":return(0,b.jsxs)(It,{variant:"error",paddingX:1,children:[(0,b.jsx)(n,{color:r.red,children:e.title}),e.detail.map((i,a)=>(0,b.jsx)(n,{color:r.dim,children:i},`d-${a}`))]});case"interrupted":return(0,b.jsxs)(S,{flexDirection:"column",children:[(0,b.jsx)(n,{color:r.red,children:"interrupted \u2014 session not saved"}),e.detail?(0,b.jsx)(n,{color:r.dim,children:e.detail}):null]});case"pause":return(0,b.jsxs)(S,{flexDirection:"column",children:[(0,b.jsx)(n,{children:`paused: session ${e.sid} saved`}),e.expires_at?(0,b.jsx)(n,{color:r.dim,children:`expires: ${e.expires_at}`}):null,(0,b.jsx)(n,{children:`resume: ${e.resume}`}),e.messageForm?(0,b.jsx)(n,{children:`or say something on the way in: ${e.messageForm}`}):null]});case"summary":return(0,b.jsxs)(S,{flexDirection:"column",children:[(0,b.jsx)(n,{bold:!0,children:"session summary"}),e.lines.map((i,a)=>(0,b.jsx)(n,{children:` ${i}`},`s-${a}`))]})}}var ue=U(V(),1);function Qt({item:e}){return(0,ue.jsxs)(S,{flexDirection:"column",marginLeft:2,children:[(e.cite??[]).map((s,i)=>(0,ue.jsx)(n,{dimColor:!0,children:`cite ${s.anchor??"conv"} \u2014 "${s.quote??""}"`},`cite-${i}`)),(e.depends_on_hint??[]).length>0&&(0,ue.jsx)(n,{dimColor:!0,children:`depends on: ${(e.depends_on_hint??[]).join(", ")}`}),Object.entries(e.extra??{}).map(([s,i])=>(0,ue.jsx)(n,{dimColor:!0,children:`${s}: ${i}`},`extra-${s}`))]})}var $=U(V(),1),tt=(e,s)=>Math.max(0,Math.min(s,e));function Me(e,s,i){switch(s.type){case"move":return e.level==="detail"?{...e,scroll:Math.max(0,(e.scroll??0)+s.delta)}:{...e,cursor:tt(e.cursor+s.delta,Math.max(0,i-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 Xt={"use-case":"use-cases",ac:"acs",scenario:"scenarios",test:"tests",gap:"gaps"};function zt(e,s){if(e.level==="detail")return{level:"detail",cursor:tt(e.num-1,Math.max(0,s.entries.length-1))};if(e.section){let i=s.entries.findIndex(a=>Xt[a.kind]===e.section);if(i>=0)return{level:"list",cursor:i}}return{level:"list",cursor:0}}function Nn(e){let s=[];for(let i of e.entries){let a=s.find(d=>d.kind===i.kind);a?a.entries.push(i):s.push({kind:i.kind,entries:[i]})}return s}var Ht=3;function Wn({items:e,cursor:s,verb:i,more:a}){let d=`view \xB7 ${i} so far \xB7 ${e.counts.map(u=>`${u.count} ${u.count===1?u.label.replace(/s$/,""):u.label}`).join(" \xB7 ")}`,g=e.entries[s];return(0,$.jsxs)(S,{flexDirection:"column",borderStyle:"round",borderColor:r.dim,paddingX:1,children:[(0,$.jsx)(n,{bold:!0,children:d}),Nn(e).map(({kind:u,entries:m})=>{let h=g?.kind===u,I=h?m.findIndex(A=>A.ref===g.ref):-1,f=h?tt(I-1,Math.max(0,m.length-Ht)):0,p=m.slice(f,f+(h?Ht:1)),L=m.length-p.length;return(0,$.jsxs)(S,{flexDirection:"column",children:[(0,$.jsx)(n,{color:r.dim,children:`${Xt[u]??ee(u)} \xB7 ${m.length}`}),p.map(A=>{let w=h&&A.ref===g.ref,R=A.item.badge;return(0,$.jsxs)(n,{children:[(0,$.jsx)(n,{color:r.assuranceAccent,children:w?"\u203A ":" "}),(0,$.jsx)(n,{children:`${A.num} \xB7 ${A.item.title}`}),R?(0,$.jsx)(n,{color:r.dim,children:` \xB7 ${R}`}):null]},`${A.kind}:${A.ref}`)}),L>0&&(0,$.jsx)(n,{color:r.dim,children:` \u22EE ${L} more`})]},u)}),a?(0,$.jsxs)(n,{children:[(0,$.jsx)(n,{color:r.assuranceAccent,children:s===e.entries.length?"\u203A ":" "}),(0,$.jsx)(n,{color:r.dim,children:`\u22EF show all \u2014 ${a.hidden} more from earlier turns`})]}):null,(0,$.jsx)(n,{color:r.dim,children:"\u2191\u2193 move \xB7 \u21B5 detail \xB7 esc back"})]})}var De=14;function jn({items:e,cursor:s,explain:i,grandTotal:a,dossier:d,scroll:g=0}){let u=e.entries[s];if(!u)return(0,$.jsx)(n,{color:r.dim,children:"nothing to show"});if(d){let h=Math.max(0,Math.min(g,Math.max(0,d.lines.length-De))),I=d.lines.slice(h,h+De);return(0,$.jsxs)(S,{flexDirection:"column",borderStyle:"round",borderColor:r.dim,paddingX:1,children:[(0,$.jsxs)(n,{bold:!0,children:[`view \xB7 ${d.id}`,d.id.toLowerCase()!==d.rawId?(0,$.jsx)(n,{bold:!1,color:r.dim,children:` \xB7 ${d.rawId}`}):null]}),(0,$.jsx)(n,{bold:!0,children:d.title}),h>0?(0,$.jsx)(n,{color:r.muted,children:`\u22EE ${h} above`}):null,I.map((f,p)=>(0,$.jsx)(n,{color:f.dim?r.dim:void 0,children:f.text},`dl-${p}`)),d.lines.length>h+De?(0,$.jsx)(n,{color:r.muted,children:`\u22EE ${d.lines.length-h-De} more`}):null,(0,$.jsx)(n,{color:r.dim,children:"\u2191\u2193 scroll \xB7 esc back"})]})}let m=u.item;return(0,$.jsxs)(S,{flexDirection:"column",borderStyle:"round",borderColor:r.dim,paddingX:1,children:[(0,$.jsx)(n,{bold:!0,children:`view \xB7 ${u.kind} ${u.num} of ${a??e.entries.length}`}),(0,$.jsx)(n,{children:u.item.title}),m.badge?(0,$.jsx)(n,{color:r.dim,children:`kind: ${m.badge}`}):null,m.why?(0,$.jsx)(n,{color:r.dim,children:m.why}):null,(0,$.jsx)(Qt,{item:u.item}),i?.map((h,I)=>(0,$.jsx)(n,{color:r.dim,children:h},`ex-${I}`)),(0,$.jsx)(n,{color:r.dim,children:"view-only \u2014 approvals happen in chat"}),(0,$.jsx)(n,{color:r.dim,children:"\u2191\u2193 prev/next \xB7 esc back to list"})]})}function Gt({items:e,state:s,verb:i,more:a,explain:d,grandTotal:g,dossier:u=null}){return s.level==="list"?(0,$.jsx)(Wn,{items:e,cursor:s.cursor,verb:i,more:a}):(0,$.jsx)(jn,{items:e,cursor:s.cursor,explain:d,grandTotal:g,dossier:u,scroll:s.scroll??0})}var Un={"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 Jt(e){let s=(e??"").trim().toLowerCase();if(!s)return{level:"list"};if(/^\d+$/.test(s)){let a=parseInt(s,10);return a>=1?{level:"detail",num:a}:{error:"items are numbered from 1 \u2014 /view 1"}}let i=Un[s];return i?{level:"list",section:i}:{error:"try /view, /view <number>, or /view acs|scenarios|tests"}}var B=U(V(),1),Vn=6,Yt=12;function Kn(e,s,i){let a=Math.max(20,s),d=[];for(let u of e.split(`
3
- `)){if(u.length<=a){d.push(u);continue}let m="";for(let h of u.split(" "))m&&m.length+1+h.length>a?(d.push(m),m=h):m=m?`${m} ${h}`:h;d.push(m)}let g=Math.max(0,d.length-i);return{body:d.slice(-i).join(`
4
- `),hidden:g}}var Le=["\u280B","\u2819","\u2839","\u2838","\u283C","\u2834","\u2826","\u2827","\u2807","\u280F"];function Zt(e){let s={key:"redesign",label:"re-design from scratch",detail:"replaces the current design"},i={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"},i]:[i,s]}function _r({controller:e,verb:s="extract",onCtrlC:i,chain:a=null,inspect:d=null}){let[,g]=(0,k.useState)(0),[u,m]=(0,k.useState)(!1),[h,I]=(0,k.useState)(null),[f,p]=(0,k.useState)(null),L=(0,k.useRef)(null),[A,w]=(0,k.useState)(null),R=(0,k.useRef)(null),C=t=>{R.current=t,w(t)},v=t=>{L.current=t,p(t),t===null&&C(null)},E=(0,k.useRef)([]),[x,N]=(0,k.useState)(null),_=(0,k.useRef)(null),q=t=>{_.current=t,N(t)},de=Rt(),{stdout:_e}=Be(),Oe=_e?.columns??80,me=(0,k.useRef)(0),ge=(0,k.useRef)(0);(0,k.useEffect)(()=>{let t=()=>{let o=e.state.ledger;for(let y=me.current;y<o.length;y++){let T=o[y],P=T.kind==="turn"?Vt(e.state.turns,T.turnIndex):void 0;de.append((0,B.jsx)(Kt,{block:T,annotations:P},`lg-${y}`))}me.current=o.length};t();let l=e.subscribe(()=>{t();let o=e.state;L.current&&(o.pending||o.status==="pausing")&&(v(null),o.pending&&I("questions arrived \u2014 back to chat")),g(y=>y+1)});return g(o=>o+1),l},[e,de]);let{thinking:te,status:K,pending:D,confirm:F,ledger:O,activeTurn:H,stream:we,notice:$e}=e.state,nt=(we?.text??"").trimEnd(),rt=nt.length>0,en=u&&(te.liveThinking.length>0||te.thinkingLog.length>0),tn=Kn(te.liveThinking||te.thinkingLog.map(t=>t.text).join(`
5
- `),Oe-6,Yt),st=rt?nt.split(`
6
- `).slice(-Vn):[];H&&(ge.current=H.turnIndex);let nn=D?D.resolution.filter(t=>!t).length:0,it;for(let t=O.length-1;t>=0;t--){if(E.current.some(o=>o.end!=null&&t>=o.start&&t<o.end))continue;let l=O[t];if(l.kind==="banner"&&!l.text.startsWith("kane")){it=l.text;break}}let fe=te.activity[te.activity.length-1],Pe=fe?fe.status==="decision"?fe.label:Mt({name:fe.name,status:fe.status}):void 0,ot=K==="streaming"||K==="working",[lt,rn]=(0,k.useState)(0);St(()=>rn(t=>t+1),ot||x?.kind==="running"?120:null);let sn=e.state.busySince?Math.floor((Date.now()-e.state.busySince)/1e3):0,on=rt?"Writing\u2026":Pe?`${Pe.charAt(0).toUpperCase()}${Pe.slice(1)}\u2026`:e.state.workingLabel??(s==="design"?"Designing\u2026":"Thinking\u2026"),ln=e.state.turns.some(t=>t.role==="agent"),[cn,an]=(0,k.useState)(0),[un,dn]=(0,k.useState)(!1),[ct,mn]=(0,k.useState)(null),pe=(0,k.useRef)(0),at=(0,k.useRef)(!1),ut=(0,k.useRef)(null),he=t=>{pe.current=t,an(t)},dt=t=>{at.current=t,dn(t)},ie=t=>{ut.current=t,mn(t)},[qe,gn]=(0,k.useState)(0),Q=(0,k.useRef)(0),xe=t=>{Q.current=t,gn(t)},mt=D?D.questions[0]?.id??"b":null;(0,k.useEffect)(()=>{D&&xe(D.cursor<0?0:D.cursor)},[mt,D?.cursor]);let Fe=()=>{let t=z.current;if(!t)return;let l=t.questions.length;for(let o=1;o<=l;o++){let y=(Q.current+o)%l;if(!t.resolution[y]){xe(y);return}}},gt=D?D.questions[Math.max(0,Math.min(D.questions.length-1,qe))]:void 0,X=(0,k.useRef)(gt);X.current=gt;let z=(0,k.useRef)(D);z.current=D;let fn=D?`${mt}:${qe}`:null;(0,k.useEffect)(()=>{if(ie(null),X.current){dt(!0);let t=z.current?.resolution[Q.current]?.selected_index;he(t??X.current.recommended_index??0)}else dt(!1)},[fn]);let ve=t=>{let l=z.current;return Ye(t,l?Ae(l)!=="":!1)},pn={isFocused:()=>at.current&&X.current!=null&&ut.current==null||_.current!=null&&_.current.kind!=="running"||G.current&&$t.current==null,onMove:t=>{let l=X.current;if(l){he(Math.max(0,Math.min(ve(l).maxSel,pe.current+t)));return}let o=_.current;if(o?.kind==="picker"){q({...o,sel:Math.max(0,Math.min(o.items.length-1,o.sel+t))});return}if(o?.kind==="ask"||o?.kind==="confirm"||o?.kind==="failed"){let y=(o.kind==="ask"?Ie.current.length:o.kind==="failed"?Re.current.length:2)-1;q({...o,sel:Math.max(0,Math.min(y,o.sel+t))});return}o&&!G.current||G.current&&le(Math.max(0,Math.min(Te.current.length-1,ze.current+t)))},onSelect:()=>{let t=X.current,l=z.current;if(!t||!l){let T=_.current;if(T?.kind==="picker"){let W=T.items[T.sel];W&&(W.designed?q({kind:"confirm",item:W,sel:0}):Ke(W,!1));return}if(T?.kind==="confirm"){Zt(T.item)[T.sel]?.key==="redesign"?Ke(T.item,!0):Ve();return}if(T?.kind==="ask"){let W=Ie.current[T.sel]?.key;W==="another"?Ve():W==="view"?Ge(""):q(null);return}if(T?.kind==="failed"){let W=Re.current[T.sel]?.key;W==="retry"?Ke(T.item,T.force):W==="view"?Ge(""):q(null);return}if(T&&!G.current||!G.current)return;switch(Te.current[ze.current]?.key){case"finish":e.completeSession();return;case"continue":e.continueParked();return;case"design-chain":Ve();return;case"view":Ge("",ge.current);return;case"free":ce("");return}return}let o=ve(t),y=pe.current;if(o.batchIdx!=null&&y===o.batchIdx){e.goWithRecommendations();return}if(o.freeIdx!=null&&y===o.freeIdx){ie("");return}if(o.doneIdx!=null&&y===o.doneIdx){e.confirmMulti(Q.current),Fe();return}if(t.multi_select){e.toggleOption(Q.current,y);return}e.submitAnswer(Q.current,y),Fe()},onLeft:()=>{z.current&&xe(Math.max(0,Q.current-1))},onRight:()=>{let t=z.current;t&&xe(Math.min(t.questions.length-1,Q.current+1))},onDigit:t=>{let l=X.current;if(l){t-1<l.options.length&&he(t-1);return}let o=_.current;if(o?.kind==="picker"){t-1<o.items.length&&q({...o,sel:t-1});return}if(o?.kind==="ask"){t-1<Ie.current.length&&q({...o,sel:t-1});return}if(o?.kind==="failed"){t-1<Re.current.length&&q({...o,sel:t-1});return}if(o?.kind==="confirm"){t-1<2&&q({...o,sel:t-1});return}if(!(o&&!G.current)&&G.current){let y=Te.current,T=0;for(let P=0;P<y.length;P++)if(!y[P].free&&(T+=1,T===t)){le(P);return}}},isMulti:()=>{let t=X.current;return!!t?.multi_select&&pe.current<(t?.options.length??0)},onSpace:()=>{z.current&&e.toggleOption(Q.current,pe.current)},onTab:()=>{let t=X.current;if(!t)return;let l=ve(t);l.batchIdx!=null&&he(l.batchIdx)},onType:t=>{let l=X.current;if(l){if(!l.allow_free_text)return;let o=ve(l);he(o.freeIdx??0),ie(t);return}if(!(_.current&&!G.current)&&G.current){let o=Lt(Te.current);if(o==null)return;le(o),ce(t)}},onBack:()=>{let t=_.current;if(t&&t.kind!=="running"){q(null);return}let l=z.current;if(l){for(let o=Q.current-1;o>=0;o--)if(l.resolution[o]){xe(o);return}}}},hn=ct!=null?{value:ct,onChange:t=>ie(t),onSubmit:t=>{ie(null),t.trim()&&z.current&&(e.submitFreeText(Q.current,t),Fe())},onCancel:()=>ie(null)}:null,ft=i??(()=>e.requestPause()),re=e.state.checkpoint,ke=x?.kind==="running"&&K==="idle",be=K==="idle"&&ln&&!D&&!f&&(!x||ke),G=(0,k.useRef)(!1);G.current=be;let J=se(e.state.turns).entries.length,ye,Y;for(let t=O.length-1;t>=0;t--){if(E.current.some(o=>o.end!=null&&t>=o.start&&t<o.end))continue;let l=O[t];if(!ye&&l.kind==="commit"&&l.ok&&(ye=l.line),!Y&&l.kind==="banner"&&l.text.startsWith("designing: ")&&(Y=l.text.slice(11)),ye&&Y)break}let Ne;for(let t=O.length-1;t>=0;t--){let l=O[t];if(l.kind==="user")break;if(l.kind==="commit"&&l.ok&&/\bapplied\b/.test(l.line)){Ne=l.line;break}}let Z=Y?{"acceptance criteria":"scenarios",scenarios:"acceptance criteria + exercises","acceptance criteria + exercises":"tests + gaps"}[Y]:void 0,pt={"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"},ht=Y?pt[Y]:void 0,xt=Z?pt[Z]:void 0,xn="phases: acceptance criteria \u2192 scenarios \u2192 wiring \u2192 tests \xB7 stop anytime with finish",kn=(()=>{for(let t=O.length-1;t>=0;t--){let l=O[t];if(l.kind==="agent")return l.text}return null})(),oe=/\?\s*$/.test((kn??"").trimEnd()),kt=s==="design"&&!re&&(oe||Z!==void 0),bt=Y==="tests + gaps",Se=x?.kind==="running"?x.title:"the design",yt=!!e.state.error&&!e.senderAlive(),bn=F?"the agent needs a clarification before it can apply that":ke&&!re?oe?`${Se} \u2014 the agent asked a question`:Ne?`${Se} \u2014 ${Ne}`:bt?`${Se} \u2014 design complete`:`${Se} \u2014 the agent is waiting on you`:re?Y?`${Y} done${Z?` \u2014 next: ${Z}`:""}`:ye??"phase done":yt?"the agent stopped \u2014 the session is view-only":kt?oe?"the agent asked a question \u2014 answer or continue":`design incomplete \u2014 ${Z} not started`:ye??"waiting on you",We=F?[{key:"free",label:"clarify \u2014 type which one you meant",free:!0}]:ke&&!re?bt&&!oe?[{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:oe?"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}]:re?[{key:"continue",label:Z?`continue to ${Z}`:"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}]:yt?[...J>0?[{key:"view",label:"view what's saved"}]:[],{key:"free",label:"tell me what to change",free:!0}]:kt?[{key:"continue",label:oe?"continue \u2014 go with your suggestion":`continue \u2014 ${Z} 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"},...a?[{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}],je=[{key:"another",label:"design another use-case\u2026"},...J>0?[{key:"view",label:"view what was designed"}]:[],{key:"back",label:"done \u2014 back"}],Ie=(0,k.useRef)(je);Ie.current=je;let Ue=[{key:"retry",label:"try again"},...J>0?[{key:"view",label:"view what's saved"}]:[],{key:"back",label:"back"}],Re=(0,k.useRef)(Ue);Re.current=Ue;let Ve=()=>{let t=a?.listUcs()??[];if(t.length===0){I("no use-cases to design yet");return}q({kind:"picker",items:t,sel:0})},Ke=(t,l)=>{let o={start:e.state.ledger.length,end:null};E.current.push(o);let y=()=>{o.end=e.state.ledger.length};q({kind:"running",title:t.title,item:t,force:l,startedAt:Date.now()}),a.runDesignChild(t.key,l).then(T=>{y(),T===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 ${T}`}),q({kind:"failed",item:t,force:l,detail:`child exited ${T}`,sel:0}))}).catch(T=>{y();let P=T instanceof Error?T.message:String(T);e.ledger({kind:"commit",ok:!1,line:`design for ${t.title} failed \u2014 ${P}`}),q({kind:"failed",item:t,force:l,detail:P,sel:0})})},Te=(0,k.useRef)(We);Te.current=We;let Qe=be&&re&&ht!==void 0,He=E.current.find(t=>t.end==null)?.start??"top",Tt=(0,k.useRef)(new Set),[yn,wt]=(0,k.useState)(!1);(0,k.useEffect)(()=>{Qe?Tt.current.has(He)||(Tt.current.add(He),wt(!0)):wt(!1)},[Qe,He]);let Tn=Qe?[...yn?[xn]:[],`${ht}${xt?` \xB7 next: ${xt}`:""}`]:[],[wn,$n]=(0,k.useState)(0),[Xe,vn]=(0,k.useState)(null),ze=(0,k.useRef)(0),$t=(0,k.useRef)(null),le=t=>{ze.current=t,$n(t)},ce=t=>{$t.current=t,vn(t)},Sn=`${be}:${re}:${ge.current}`;(0,k.useEffect)(()=>{le(0),ce(null)},[Sn]);let In=Xe!=null?{value:Xe,onChange:t=>ce(t),onSubmit:t=>{ce(null),le(0);let l=t.trim();l&&(I(null),e.submit(l))},onCancel:()=>{ce(null),le(0)}}:null,Ge=(t,l)=>{if(/^(uc|sc|ac|t|gap|sty)-\d+$/i.test(t.trim())){let P=t.trim().toLowerCase(),Ce=se(e.state.turns).entries.findIndex(j=>(j.item.logical_id??"").toLowerCase()===P);if(Ce<0){I(`${t.trim().toUpperCase()} isn't in this session's items \u2014 view lists what this session minted`);return}v({level:"detail",cursor:Ce,scroll:0}),C(null);return}let o=Jt(t);if("error"in o){I(o.error);return}let y=se(e.state.turns);if(y.entries.length===0){I("nothing proposed yet \u2014 the first turn is still coming");return}if(o.level==="detail"&&o.num>y.entries.length){I(`no item ${o.num} \u2014 the set has ${y.entries.length} item${y.entries.length===1?"":"s"}`);return}let T=l!=null?et(y,l):y;v(zt(o,T)),C(l!=null&&T.entries.length<y.entries.length?l:null)},vt=(0,B.jsx)(Ot,{verb:s,subject:it,pendingCount:nn,creditsTotal:e.state.credits?.total,state:ke?"waiting on you":D||be||f||x&&x.kind!=="running"?"idle":void 0});if(f){let t=se(e.state.turns),l=A!=null?et(t,A):t,o=t.entries.length-l.entries.length,y=f.level==="list"&&o>0,T=l.entries.length+(y?1:0),P=l.entries[f.cursor],W=f.level==="detail"&&P?e.explainLines(P.item.slug??P.item.temp_ref):null,Ce=f.level==="detail"&&P&&d?d(P.item.logical_id??e.aliasOf(P.item.temp_ref)??P.item.temp_ref):null;return(0,B.jsxs)(S,{flexDirection:"column",children:[(0,B.jsx)(Je,{onToggleThinking:()=>m(j=>!j),onCtrlC:ft,explorer:{isOpen:()=>L.current!==null,onMove:j=>v(L.current&&Me(L.current,{type:"move",delta:j},T)),onEnter:()=>{let j=L.current;if(j){if(j.level==="list"&&y&&j.cursor===l.entries.length){C(null);return}v(Me(j,{type:"enter"},T))}},onBack:()=>{v(L.current&&Me(L.current,{type:"back"},T)),setTimeout(()=>g(j=>j+1),0)}}}),(0,B.jsx)(Gt,{items:l,state:f,verb:s,more:y?{hidden:o}:null,explain:W,grandTotal:t.entries.length,dossier:Ce}),($e??h)&&($e??h).split(`
7
- `).map((j,Rn)=>(0,B.jsx)(n,{color:r.orange,children:j},`nt-${Rn}`)),vt]})}return(0,B.jsxs)(S,{flexDirection:"column",children:[(0,B.jsx)(Je,{onToggleThinking:()=>m(t=>!t),onCtrlC:ft,panel:pn}),en&&(0,B.jsx)(Et,{thinking:tn.body,expanded:!0,thinkingDone:K!=="streaming",maxLines:Yt+1}),st.length>0&&(0,B.jsx)(S,{flexDirection:"column",children:st.map((t,l)=>(0,B.jsx)(n,{children:Bt(t).map((o,y)=>(0,B.jsx)(n,{bold:o.bold,italic:o.italic,color:o.code?r.dim:void 0,children:o.text},y))},`st-${l}`))}),D&&(0,B.jsx)(Pt,{batch:D,qView:qe,sel:cn,focused:un,freeText:hn,multiSelFor:t=>e.multiSelection(t)}),F&&(0,B.jsx)(n,{color:"yellow",children:F.prompt}),($e??h)&&($e??h).split(`
8
- `).map((t,l)=>(0,B.jsx)(n,{color:r.orange,children:t},`nt-${l}`)),ot&&!D&&(0,B.jsxs)(n,{color:r.assuranceAccent,children:[`${Le[lt%Le.length]} ${on} `,(0,B.jsx)(n,{color:r.dim,children:`(${sn}s)`})]}),be&&(0,B.jsx)(ae,{headline:bn,rows:We,sel:wn,focused:Xe==null,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 type = your own words",freeText:In,sublines:Tn}),x?.kind==="picker"&&(0,B.jsx)(ae,{ask:!0,headline:"design tests for which use-case?",rows:x.items.map(t=>({key:t.key,label:t.title,detail:t.badge})),sel:x.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}),x?.kind==="confirm"&&(0,B.jsx)(ae,{ask:!0,headline:`${x.item.title} is already designed${x.item.designed==="stale"?" \u2014 and the use-case has changed since":""}`,rows:Zt(x.item).map(t=>({key:t.key,label:t.label,detail:t.detail})),sel:x.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}),x?.kind==="running"&&!ke&&(0,B.jsxs)(n,{color:r.assuranceAccent,children:[`${Le[lt%Le.length]} Designing ${x.title}\u2026 `,(0,B.jsx)(n,{color:r.dim,children:`(${Math.floor((Date.now()-x.startedAt)/1e3)}s)`})]}),x?.kind==="ask"&&(0,B.jsx)(ae,{headline:`designed ${x.title}`,rows:je,sel:x.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}),x?.kind==="failed"&&(0,B.jsx)(ae,{headline:`design failed \u2014 ${x.item.title} (${x.detail})`,rows:Ue,sel:x.sel,focused:!0,legend:"\u2191\u2193 \xB7 \u23CE select \xB7 esc back"}),K==="pausing"&&(0,B.jsx)(n,{color:r.dim,children:"pausing \u2014 saving session\u2026 (ctrl+c again = force quit)"}),vt]})}export{_r as ChatSurface,Kn as tailVisualRows};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a}from"./chunk-GQ3NCBYR.js";import"./chunk-RFHMDQXZ.js";import"./chunk-UXPQRALY.js";import"./chunk-FCMLIK7P.js";import"./chunk-CJJXT5DO.js";import"./chunk-QM4S2APK.js";import"./chunk-ZPDM6FO7.js";import"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-EHN5HTUD.js";import"./chunk-L5LI2JF4.js";import"./chunk-7E24OCGX.js";import"./chunk-FRBYGSGJ.js";import"./chunk-6W6AIDLJ.js";import"./chunk-6HYW5RFX.js";import"./chunk-J2KSZUOO.js";import"./chunk-5YPBPZUR.js";import"./chunk-IAHKTEET.js";import"./chunk-Y5RNCJAN.js";import"./chunk-5EOX4MEY.js";import"./chunk-A2IQRVPR.js";import"./chunk-B4LLKQTK.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-KCBS57IF.js";import"./chunk-77WMTCUQ.js";import"./chunk-4SJC64KQ.js";import"./chunk-TDPWFYTJ.js";import"./chunk-T7ZPMTGS.js";import"./chunk-NR23HZU4.js";import"./chunk-FPFOW6BS.js";import"./chunk-WAOCHXJ5.js";import"./chunk-L5LI2JF4.js";import"./chunk-CH3VWCRZ.js";import"./chunk-4BAMZSFU.js";import"./chunk-YCCUBQY4.js";import"./chunk-RQYS3KGU.js";import"./chunk-Y5RNCJAN.js";import"./chunk-5EOX4MEY.js";import"./chunk-2WVKOZ6W.js";import"./chunk-NLCCBXXV.js";import"./chunk-RZ4F3BHX.js";import"./chunk-A2IQRVPR.js";import"./chunk-VE3SUJMA.js";import"./chunk-WREVEATJ.js";import"./chunk-4GLYNAK7.js";import"./chunk-B4LLKQTK.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-LGVHW4ZA.js";import"./chunk-5YHVK2EO.js";import"./chunk-E5PWL3BG.js";import"./chunk-TDPWFYTJ.js";import"./chunk-T7ZPMTGS.js";import"./chunk-AIMINJVP.js";import"./chunk-5Y2G4NC7.js";import"./chunk-Y5RNCJAN.js";import"./chunk-5EOX4MEY.js";import"./chunk-A2IQRVPR.js";import"./chunk-J3EMJ7US.js";import"./chunk-5WE4DHXL.js";import"./chunk-DFS4RMVP.js";import"./chunk-B4LLKQTK.js";import"./chunk-HCBYKLMW.js";import"./chunk-C44QQJR4.js";import"./chunk-6YGTRKDT.js";import"./chunk-UR6MHSHU.js";export{a as TestMdRunView};
@@ -1,6 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as w}from"./chunk-MAO5BAQI.js";import"./chunk-3RZ63RBO.js";import"./chunk-KHU7C6EE.js";import"./chunk-JSF5JYZC.js";import"./chunk-J44RN3FB.js";import"./chunk-JFAFKHDX.js";import"./chunk-YKTYVJBN.js";import"./chunk-CVOGP253.js";import"./chunk-427OQS2N.js";import"./chunk-3C5GMAM4.js";import"./chunk-GG43HSU2.js";import"./chunk-FMR2KPSK.js";import"./chunk-DNNZ353O.js";import"./chunk-FHKDTM5L.js";import"./chunk-ZPDM6FO7.js";import{a as u}from"./chunk-BC7UVJJB.js";import"./chunk-NVGBE2DR.js";import"./chunk-L5LI2JF4.js";import"./chunk-7E24OCGX.js";import"./chunk-FRBYGSGJ.js";import"./chunk-6W6AIDLJ.js";import"./chunk-6HYW5RFX.js";import"./chunk-J2KSZUOO.js";import"./chunk-5YPBPZUR.js";import"./chunk-IAHKTEET.js";import"./chunk-5EOX4MEY.js";import"./chunk-B4LLKQTK.js";import"./chunk-UR6MHSHU.js";import{existsSync as y}from"fs";var O=new Set(["interactive","agent","ci","override"]);function C(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,because:e.because,changeDelta:e.changeDelta,priorDesign:e.priorDesign}}async function _(e){let g=async(r,n)=>{if(process.stderr.write(r+`
3
- `),e.mode!=="agent")return 2;let{makeHeadlessIO:i,agentRefusal:o}=await import("./headless-io-PWW6YKH2.js");return o(i("ndjson","design"),r,n)},m=C(e);if("error"in m)return g(m.error);let a=m;{let{validateResumeMessage:r}=await import("./headless-io-PWW6YKH2.js"),n=r(a,"design");if(n)return g(n)}if(!y(u(process.cwd())))return g("error: no context store here (run `kane-cli context ingest` + `kane-cli context extract` first)","NO_STORE");let t=null;try{if(!a.mode&&!process.stdin.isTTY)return process.stderr.write(`design: no TTY \u2014 pass an explicit --mode agent|ci|override to run headless
4
- `),2;let r=a.mode??"interactive";if(r==="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)
5
- `),2;let{bindDesignInteractive:s}=await import("./interactive-bind-PTAZVCE7.js");return await s(a)}let{resolveAgentAuthEnv:n}=await import("./spawner-YNYB4Z7K.js"),{runAgent:i}=await import("./bridge-BTSWCJ3B.js"),{preflightTurn:o}=await import("./turn-preflight-JGYT7LXP.js"),{makeInterruptGuard:h}=await import("./interrupt-guard-UREUWNRL.js"),{baseUrlAdvisory:v}=await import("./turn-preflight-JGYT7LXP.js"),{makeHeadlessIO:T,resolveEncoding:x,guardedChannels:D}=await import("./headless-io-PWW6YKH2.js");t=T(x(r),"design");let{telemetryBootstrap:b,telemetryEnvName:E}=await import("./bootstrap-RPT3JOGD.js"),c=b({verb:"design",mode:r,contextRoot:u(process.cwd()),env:E(),resumeSid:a.resume,write:!0,longSession:!0}),l={...await n(),...c.spawnEnv()},p=v();p&&t.out(p);let d=h(i,s=>t.out(s)),f=D(t,()=>d.interrupted(),/^error: (design agent failed|the design agent ended)/);try{let s=await w({...a,mode:r},{contextDir:u(process.cwd()),agent:d.agent,preflightTurn:()=>o(l),ask:async()=>[],out:f.out,emit:f.emit,progress:t.progress,isTTY:!1,auth:l,telemetry:c});return d.interrupted()&&s!==3?(t.out("interrupted \u2014 no session saved"),await c.end({exit_code:130}),t.done(130)):(s===1&&t.out(c.supportFooter()),await c.end({exit_code:s}),t.done(s))}finally{d.dispose()}}catch(r){let n=r instanceof Error?r.message:String(r);t?.event({type:"error",message:`error: design failed: ${n}`});let i=t?o=>t.out(o):o=>process.stderr.write(o+`
6
- `);return i(`error: design failed: ${n}`),(process.env.ASSURANCE_LOG_LEVEL??"").toLowerCase()==="debug"&&r instanceof Error&&r.stack&&i(r.stack),i("hint: per-run trace logs live under .context/logs/ (design-*.log)"),t?t.done(1):1}}export{_ as designTestsCommand};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a,b}from"./chunk-WTXHOWUP.js";import"./chunk-FHKDTM5L.js";import"./chunk-2XMJ6YAE.js";import"./chunk-BKM2LWU2.js";import"./chunk-Y5RNCJAN.js";import"./chunk-5EOX4MEY.js";import"./chunk-RZ4F3BHX.js";import"./chunk-B4LLKQTK.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-N4LMQR7C.js";import"./chunk-RCTM7NGT.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 ne}from"./chunk-427OQS2N.js";import{a as w,b as ee}from"./chunk-FMR2KPSK.js";import{d as Z}from"./chunk-NVGBE2DR.js";import{a as X}from"./chunk-7E24OCGX.js";import"./chunk-FRBYGSGJ.js";import{c as Y,d as z,n as Q}from"./chunk-6W6AIDLJ.js";import{a as j,b as F}from"./chunk-6HYW5RFX.js";import{c as J,e as W}from"./chunk-J2KSZUOO.js";import{e as L,f as A,g as P,h as x}from"./chunk-5YPBPZUR.js";import"./chunk-IAHKTEET.js";import"./chunk-UR6MHSHU.js";var de=new Set(["approve","edit","reject"]);function ye(k){let{contextDir:f,graph:s,ops:oe,by:l}=k,N=k.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=[],$=[],y=[],m=[],I=[],O=[],_=[...k.judgements??[]],D=[],q=new Map,B=new Set,G=[],b=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 E=(e,n,t)=>{let i=s.resolve(n);if(!i)return o.push({code:"UNKNOWN_NODE",detail:`${e}: ${n} names nothing in the graph`}),null;let p=s.tipOf(i.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=E("approve",e.target,e.expectedCid);n&&m.push({id:n,kind:"review-item",resolution:"approved",edit:null,reason:null,by:l})}else if(e.kind==="reject"){let n=E("reject",e.target,e.expectedCid);if(!n)continue;if(m.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}I.push({kind:"node",old:n,new:t.cid,reason:e.reason,by:l})}}else if(e.kind==="edit"){let n=E("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 i={...t.content};for(let[c,u]of Object.entries(e.edit))u!==void 0&&(i[c]=u);if(typeof i.title=="string"&&!i.title.trim()){o.push({code:"EMPTY_TITLE",detail:`edit: ${e.target} edited title is empty`});continue}let p=A(t.label,i);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,i);if(d===n){m.push({id:n,kind:"review-item",resolution:"approved",edit:null,reason:null,by:l});continue}$.push({cid:d,label:t.label,content:i}),I.push({kind:"node",old:n,new:d,reason:e.reason??"edited in chat",by:l}),m.push({id:d,kind:"review-item",resolution:"edited",edit:{...e.edit},reason:null,by:l})}else if(e.kind==="enhance"){if(!E("enhance",e.target,e.expectedCid))continue;for(let t of e.edges){let i=s.nodeLabel.get(t.src)??"(unknown)",p=s.nodeLabel.get(t.dst)??"(unknown)";for(let r of x(t.type,i,p,t.props))o.push({code:r.code,detail:`enhance ${e.target}: ${r.detail}`});let d=F(t.type,t.src,t.dst,t.props);if(s.edgesFrom(t.src).some(r=>r.ecid===d)||y.some(r=>r.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 r=`${t.type}|${t.src}`;b.has(r)&&o.push({code:"CARDINALITY_VIOLATION",detail:`${t.type} from ${t.src}: two one-live edges in one turn`}),b.add(r)}if(a==="one-live-per-src-and-dst"){let r=`${t.type}|dst|${t.dst}`;b.has(r)&&o.push({code:"CARDINALITY_VIOLATION",detail:`${t.type} onto ${t.dst}: two one-live edges in one turn (strict 1:1)`}),b.add(r)}y.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 i=s.getNode(n)?.content?.blob,p=typeof i=="string"?Z(f,i)?.toString("utf8")??"":"",d=ee(p,e.cite.turn);if(d===null){o.push({code:"BAD_ANCHOR",detail:`add: ${w(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 ${w(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),r={source_id:e.convSourceId,source_cid:n,anchor:w(e.cite.turn),quote:e.cite.quote};for(let g of x(L.DERIVES,"source",e.label,r))o.push({code:g.code,detail:`add: ${g.detail}`});$.push({cid:a,label:e.label,content:c}),y.push({ecid:F("DERIVES",n,a,r),type:L.DERIVES,src:n,dst:a,props:r}),e.rationale&&_.push({about:a,rationale:e.rationale,by:l});let v=Q(e.label,g=>B.has(g),s.names.keys());v!==null&&(B.add(v),O.push({cid:a,slug:v,by:l})),D.push({cid:a,...v!==null?{slug:v}:{}}),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(),re=W(f,{ts:new Date().toISOString(),proposal_id:null,nodes:$,edges:y,review:m,supersessions:I,...O.length>0?{names:O}:{},..._.length>0?{judgements:_}:{},event_ids:K,source_head_moves:{}},{expectPrev:T}),R=X(f),S=new Set;for(let e of I)if(e.kind==="node"){S.add(e.old);for(let n of R.edgesInto(e.old))S.add(n.src)}for(let e of D)S.add(e.cid);let ie=[...S].map(e=>({cid:e,state:R.stale(R.tipOf(e))})).filter(e=>e.state!=="fresh");return{record:re.record,errors:null,applied:K,skipped:C,minted:D,staleDelta:ie}}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-7YPK6EDR.js";import"./chunk-GG43HSU2.js";import"./chunk-FMR2KPSK.js";import"./chunk-NVGBE2DR.js";import"./chunk-6HYW5RFX.js";import"./chunk-J2KSZUOO.js";import"./chunk-5YPBPZUR.js";import"./chunk-IAHKTEET.js";import"./chunk-UR6MHSHU.js";export{c as makeChatController,b as questionStub,a as recommendationPicks};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{d as g}from"./chunk-5YPBPZUR.js";function $(s,n){let t=null;for(let[i,e]of s.designOf)i!==n&&s.tipOf(i)!==n||(t==null||e.seq>t.seq)&&(t={...e,designed_at_cid:i});return t}function v(s,n){let t=new Map;for(let[c,o]of s.superseded)o!=null&&t.set(o,c);let i=[n],e=n;for(;t.has(e);)e=t.get(e),i.unshift(e);return i}function h(s,n,t){let i=s.resolve(n);if(!i){let r=[...s.names.keys()].filter(m=>m.startsWith("uc-")).sort().slice(0,6);return{ok:!1,code:2,message:`unknown use-case '${n}' \u2014 no live node by that logical id or cid${r.length?` (known: ${r.join(", ")})`:""}`}}let e=i.tip;if(s.superseded.has(e)&&s.superseded.get(e)===null)return{ok:!1,code:2,message:`use-case '${n}' was removed (tombstoned) \u2014 nothing to design`};let c=s.nodeLabel.get(e);if(c!==g.USECASE)return{ok:!1,code:2,message:`'${n}' is a ${c??"missing node"}, not a use-case \u2014 design runs per use-case`};let o=s.nameOf.get(e)??s.nameOf.get(i.cid)??e.slice(0,19);if(s.trust.get(e)==="archived"){let r=s.archivedReason.get(e);return{ok:!1,code:2,message:`use-case '${o}' is archived${r?` (${r})`:""} \u2014 design runs only over live use-cases`}}let d=$(s,e);if(d==null||t)return{ok:!0};let a=v(s,e),l=a.length;if(d.designed_at_cid===e)return{ok:!1,code:2,message:`'${o}' is already designed @ v${l} \u2014 current; use --force to redesign`};let u=a.indexOf(d.designed_at_cid),f=u>=0?`v${u+1}`:"an earlier version";return{ok:!1,code:2,message:`'${o}' was designed @ ${f} \u2014 the use-case is now @ v${l} (STALE); use --force to redesign`}}export{$ as a,h as b};
@@ -1,14 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{b as j}from"./chunk-4XSW6WZD.js";import{a as U}from"./chunk-DNNZ353O.js";import{d as F}from"./chunk-QM4S2APK.js";import{a as x}from"./chunk-7E24OCGX.js";import{a as D,b as M,e as G,f as N}from"./chunk-6W6AIDLJ.js";import{b as V}from"./chunk-J2KSZUOO.js";import{d as b,e as $,g as P}from"./chunk-5YPBPZUR.js";function W(e,n,t,i,o){let d=t.rows.filter(p=>{let u=i.get(p.temp_ref);return u!==void 0&&u!=="reject"});if(d.length===0)return{record:null,errors:null};let s={version:1,read_basis:n.latestHash,source:{source_id:t.source_id,source_cid:n.heads.get(t.source_id)??""},use_cases:d.map(p=>p.uc)},g=new Map;for(let p of d){let u=i.get(p.temp_ref);typeof u=="object"?g.set(p.temp_ref,{resolution:"edited",edit:u.edited}):g.set(p.temp_ref,{resolution:p.uc.matches_existing&&p.uc.changed?"edited":"approved"})}let l=ee(s,n,t.staged_source_cid);if(l.errors!==null)return{record:null,errors:l.errors};let r=l.proposal,f=s.source.source_cid?L(e,n,s.source.source_cid):null;if(f!==null){r=Z(r,f);let p=G(r,z(f),n);if(p.length>0)return{record:null,errors:[{code:"HELD_CITES_STALE",detail:"the source moved after this plan staged \u2014 its quotes no longer verify against the current head; re-run kane-cli maintain reconcile to re-stage"},...p]}}let m=`held-${(n.latestHash??"root").slice(-12)}-${d.length}`;return N({contextDir:e,graph:n,proposal:r,proposalId:m,verdicts:g,by:o,autoName:!0})}function z(e){return e.replace(/\n$/,"").split(`
3
- `).map((t,i)=>`${String(i+1).padStart(4,"0")}| ${t}`).join(`
4
- `)}function Z(e,n){let t=n.replace(/\n$/,""),i=z(n),o=d=>{if(!d?.quote)return d;let s=M(i,d.anchor);if(s!==null&&s.includes(d.quote))return d;let g=t.indexOf(d.quote);if(g===-1||t.indexOf(d.quote,g+1)!==-1)return d;let l=t.slice(0,g).split(`
5
- `).length,r=l+d.quote.replace(/\n$/,"").split(`
6
- `).length-1;return{...d,anchor:`L${l}-L${r}`}};return{...e,use_cases:e.use_cases.map(d=>({...d,cite:o(d.cite)??d.cite,...d.criteria?{criteria:d.criteria.map(s=>({...s,cite:o(s.cite)??s.cite}))}:{},...d.updated?.criteria?{updated:{...d.updated,criteria:d.updated.criteria.map(s=>({...s,cite:o(s.cite)??s.cite}))}}:{}}))}}function ee(e,n,t){let i=[],o=n.mediaOf(e.source.source_cid).images??[],d=t!==void 0?n.mediaOf(t).images??[]:null,s=(l,r)=>{let f=l?D(l.anchor):null;if(!l||f?.kind!=="img-part")return l;if(d===null)return i.push({code:"HELD_CITES_STALE",detail:`${r}: this plan predates image-part staging \u2014 ${l.anchor} cannot be verified against the version it staged under; re-run kane-cli maintain reconcile to re-stage`}),l;let m=d.find(c=>c.ref===f.ref)?.blob;if(m===void 0)return i.push({code:"HELD_CITES_STALE",detail:`${r}: ${l.anchor} names no decodable image of the staged version \u2014 re-run kane-cli maintain reconcile to re-stage`}),l;if(o.some(c=>c.ref===f.ref&&c.blob===m))return l;let p=o.filter(c=>c.blob===m),u=p.filter(c=>c.delivery==="selected");if(u.length===1)return{...l,anchor:`img#${u[0].ref}`};if(p.length===1)return{...l,anchor:`img#${p[0].ref}`};if(p.length===0){let c=d.find(h=>h.ref===f.ref)?.appearance;if(c!==void 0){let h=o.filter(v=>v.appearance===c),E=h.filter(v=>v.delivery==="selected");if(E.length===1)return{...l,anchor:`img#${E[0].ref}`};if(h.length===1)return{...l,anchor:`img#${h[0].ref}`}}}return i.push({code:"HELD_CITES_STALE",detail:`${r}: the image behind ${l.anchor} is ${p.length===0?"no longer in":"ambiguous in"} the current head \u2014 re-run kane-cli maintain reconcile to re-stage`}),l};return{proposal:{...e,use_cases:e.use_cases.map(l=>({...l,cite:s(l.cite,l.temp_ref)??l.cite,...l.criteria?{criteria:l.criteria.map(r=>({...r,cite:s(r.cite,l.temp_ref)??r.cite}))}:{},...l.updated?.criteria?{updated:{...l.updated,criteria:l.updated.criteria.map(r=>({...r,cite:s(r.cite,l.temp_ref)??r.cite}))}}:{}}))},errors:i.length>0?i:null}}function J(e,n,t=[]){let i=j(e,n),o=new Set,d=[],s=f=>{!f||o.has(f)||(o.add(f),d.push(y(e,f)))};for(let f of i.pairs)s(f.scenario),s(f.test);for(let[f,m]of i.verifies){s(f);for(let p of m)s(p)}if(t.length===0)return{stale_refs:d};let g=f=>`${String(f.props.source_id)}\0${String(f.props.anchor)}`,l=new Set;for(let{cid:f}of e.byLabel(b.USECASE))if(e.tipOf(f)===n)for(let m of e.edgesInto(f)){if(m.type!==$.DERIVES)continue;let p=m.props.claim;typeof p=="string"&&t.includes(p)&&l.add(g(m))}if(l.size===0)return{stale_refs:d};let r=new Set;for(let[f,m]of i.verifies)if(e.edgesInto(f).some(u=>u.type===$.DERIVES&&l.has(g(u)))){r.add(y(e,f));for(let u of m)r.add(y(e,u))}return{stale_refs:d,...r.size>0?{direct_refs:[...r]}:{}}}var B="this release plans changes only \u2014 blast-radius impact and drift meaning-checks are not measured, and REMOVE rows are never executed automatically",te="suite untouched; graph updated";function T(e,n){return!e.superseded.has(n)&&e.trust.get(n)!=="archived"}function y(e,n,t=new Set){let i=e.nameOf.get(n);if(i!==void 0)return i;if(t.has(n))return n;t.add(n);for(let[o,d]of e.superseded){if(d!==n)continue;let s=y(e,o,t);if(s!==o)return s}return n}function C(e){return String(e).slice(0,19)}function A(e,n,t){let i=e.edgesFrom(n).find(o=>o.type===t);return i?e.tipOf(i.dst):null}function Y(e,n){let t=e.nodeLabel.get(n);if(t===b.USECASE)return n;if(t===b.SCENARIO)return A(e,n,$.BELONGS_TO);if(t===b.AC){let i=A(e,n,$.SCOPED_TO);return i?e.nodeLabel.get(i)===b.USECASE?i:A(e,i,$.BELONGS_TO):null}if(t===b.TEST){let i=A(e,n,$.AUTOMATES);return i?A(e,i,$.BELONGS_TO):null}return null}function q(e,n){let t=[],i=new Map;for(let o of e.derivesInto(n))i.set(String(o.props.source_id),o);for(let[o,d]of i){let s=e.heads.get(o);if(s==null){t.push(`DERIVES pin ${o} @ ${C(d.props.source_cid)} \u2014 source retired`);continue}if(s!==d.props.source_cid){let g=e.convChains.get(o)?.chain;if(g&&g.includes(String(d.props.source_cid)))continue;t.push(`DERIVES pin ${o} @ ${C(d.props.source_cid)} \u2014 source head moved to ${C(s)}`)}}for(let o of e.edgesFrom(n))P(o.type)?.pin?.comparesTo==="dst_tip"&&e.superseded.has(o.dst)&&t.push(`${o.type} pin \u2192 ${y(e,o.dst)} \u2014 target superseded`);return t.join("; ")||"structural pin broken"}var ne=new Set([b.USECASE,b.SCENARIO,b.AC,b.TEST]);function O(e,n){return e.ref<n.ref?-1:e.ref>n.ref?1:0}function L(e,n,t){let i=U(e,n,t);return i===null?null:i.toString("utf8")}function re(e,n,t,i,o){let d=t.props.quote;if(typeof d=="string"&&d.length>0)return i.includes(d);let s=String(t.props.source_cid);o.has(s)||o.set(s,L(e,n,s));let g=o.get(s);if(g===null)return!1;let l=M(g,String(t.props.anchor));return l===null?!1:l.split(`
7
- `).some(r=>r.trim().length>0&&i.includes(r.trim()))}function se(e,n,t){let i=D(String(n.props.anchor));if(i?.kind!=="img-part")return!1;let d=(e.mediaOf(String(n.props.source_cid)).images??[]).find(r=>r.ref===i.ref),s=d?.blob;if(s===void 0)return!1;let g=e.mediaOf(t).images??[];if(g.some(r=>r.blob===s))return!0;let l=d?.appearance;return l!==void 0&&g.filter(r=>r.appearance===l).length===1}var K=128*1024,X=64*1024;function oe(e,n){let t=e.split(`
8
- `),i=n.split(`
9
- `),o=0;for(;o<t.length&&o<i.length&&t[o]===i[o];)o++;let d=t.length,s=i.length;for(;d>o&&s>o&&t[d-1]===i[s-1];)d--,s--;if(d===o&&s===o)return"";let g=t.slice(o,d),l=i.slice(o,s),f=ie(g,l,2e3),m=[];if(f===null)m.push(`@@ old L${o+1}-L${d} \u2192 new L${o+1}-L${s} @@`,...g.map(p=>`- ${p}`),...l.map(p=>`+ ${p}`));else{let p=f.map((c,h)=>c.op==="="?-1:h).filter(c=>c>=0),u=0;for(;u<p.length;){let c=u;for(;c+1<p.length&&p[c+1]-p[c]<=3;)c++;let h=Math.max(p[u]-1,0),E=Math.min(p[c]+1,f.length-1),v=f.slice(h,E+1),S=o+(v[0].ai??0)+1,w=o+(v[0].bi??0)+1,a=v.filter(R=>R.op!=="+").length,_=v.filter(R=>R.op!=="-").length;m.push(`@@ old L${S}-L${S+Math.max(a-1,0)} \u2192 new L${w}-L${w+Math.max(_-1,0)} @@`);for(let R of v)m.push(R.op==="="?` ${R.line}`:`${R.op} ${R.line}`);u=c+1}}return m.join(`
10
- `)}function ie(e,n,t){let i=e.length,o=n.length,d=Math.min(i+o,t),s=new Map([[1,0]]),g=[],l=!1;for(let p=0;p<=d&&!l;p++){g.push(new Map(s));for(let u=-p;u<=p;u+=2){let c=u===-p||u!==p&&(s.get(u-1)??0)<(s.get(u+1)??0)?s.get(u+1)??0:(s.get(u-1)??0)+1,h=c-u;for(;c<i&&h<o&&e[c]===n[h];)c++,h++;if(s.set(u,c),c>=i&&h>=o){l=!0;break}}}if(!l)return null;let r=i,f=o,m=[];for(let p=g.length-1;p>0;p--){let u=g[p],c=r-f,h=c===-p||c!==p&&(u.get(c-1)??0)<(u.get(c+1)??0)?c+1:c-1,E=u.get(h)??0,v=E-h;for(;r>E&&f>v;)m.push({op:"=",line:e[r-1],ai:r-1,bi:f-1}),r--,f--;p>0&&(r===E?(m.push({op:"+",line:n[f-1],ai:r,bi:f-1}),f--):(m.push({op:"-",line:e[r-1],ai:r-1,bi:f}),r--))}for(;r>0&&f>0;)m.push({op:"=",line:e[r-1],ai:r-1,bi:f-1}),r--,f--;for(;r>0;)m.push({op:"-",line:e[r-1],ai:r-1,bi:0}),r--;for(;f>0;)m.push({op:"+",line:n[f-1],ai:0,bi:f-1}),f--;return m.reverse()}function ce(e){let n=Buffer.byteLength(e,"utf8");if(n<=K+X)return{diff:e,truncated:!1};let t=Buffer.from(e,"utf8"),i=K;for(;i>0&&(t[i]&192)===128;)i--;let o=n-X;for(;o<n&&(t[o]&192)===128;)o++;let d=t.subarray(0,i).toString("utf8"),s=t.subarray(o).toString("utf8");return{diff:`${d}
11
- \u2026 [diff truncated: ${n-i-(n-o)} bytes omitted] \u2026
12
- ${s}`,truncated:!0}}function ae(e,n){let t=x(e),i=t.heads.get(n);if(typeof i!="string")return null;let o=[];for(let u of V(e).records){let c=u.source_head_moves?.[n];c!==void 0&&c!==o[o.length-1]&&o.push(c)}let d=o.lastIndexOf(i),s=d>0?o[d-1]:null;if(typeof s!="string"||s===i)return null;let g=L(e,t,s),l=L(e,t,i);if(g===null||l===null)return null;let{diff:r,truncated:f}=ce(oe(g,l)),m=new Set,p=[];for(let u of t.edgesFrom(s))u.type!==$.DERIVES||t.nodeLabel.get(u.dst)!==b.USECASE||m.has(u.dst)||(m.add(u.dst),p.push({id:u.dst,title:String(t.getNode(u.dst)?.content.title??"")}));return{source_id:n,old_head:s,new_head:i,diff:r,...f?{truncated:!0}:{},prior_ucs:p}}function de(e,n,t){let i=e.getNode(n)?.content??{},o=e.getNode(t)?.content??{},s=[...new Set([...Object.keys(i),...Object.keys(o)])].sort().filter(g=>JSON.stringify(i[g])!==JSON.stringify(o[g]));return s.length>0?`updated: ${s.join(", ")}`:"updated"}function le(e,n,t,i,o,d,s){let g=new Set((s?.rows??[]).map(c=>c.matched_cid).filter(c=>!!c)),l=[];for(let[c,h]of t.superseded)h===null||c===h||n.superseded.has(c)||t.nodeLabel.get(c)===b.USECASE&&l.push({kind:"MODIFY",ref:y(t,c),old_cid:c,new_cid:h,summary:de(t,c,h)});let r=d.map(c=>({kind:"ADD",ref:y(t,c),cid:c}));for(let c of s?.rows??[])c.kind==="MODIFY"&&c.matched_cid?l.push({kind:"MODIFY",ref:y(t,c.matched_cid),old_cid:c.matched_cid,new_cid:null,summary:`${c.why} (staged)`}):c.kind==="ADD"&&r.push({kind:"ADD",ref:c.title,cid:null});let f=[],m=L(e,t,o),p=new Map;for(let{cid:c}of t.byLabel(b.USECASE)){if(!T(t,c)||g.has(c))continue;let h=t.derivesInto(c),E=h.filter(w=>String(w.props.source_id)===i);E.length===0||E.some(w=>w.props.source_cid===o)||E.some(w=>{let a=String(w.props.anchor),_=D(a);return _?.kind==="img-whole"?!1:_?.kind==="img-part"?se(t,w,o):m!==null&&re(e,t,w,m,p)})||h.some(w=>{let a=String(w.props.source_id);if(a===i)return!1;let _=t.heads.get(a);return _!=null})||f.push({kind:"ARCHIVE",ref:y(t,c),cid:c,why:`evidence decayed: no quote from ${i} relocates into @${C(o)}, no other live source, no fresh evidence this run`,impact:J(t,t.tipOf(c))})}let u=(c,h)=>c.ref<h.ref?-1:c.ref>h.ref?1:0;return[...l.sort(u),...r.sort(u),...f.sort(u)]}function Ee(e,n,t,i,o){let d=n.rows.find(u=>u.temp_ref===t);if(!d)return{ok:!1,message:`held item ${t} missing from the plan artifact`};let s=d,g=x(e);if(s.matched_cid){let u=g.tipOf(s.matched_cid);if(g.superseded.get(u)===null)return{ok:!1,message:`use-case for "${s.title}" was retired meanwhile \u2014 nothing to update`};u!==s.matched_cid&&(s={...s,matched_cid:u,uc:{...s.uc,matches_existing:{cid:u}}})}let l=o?{edited:o}:"approve",r=W(e,g,{source_id:n.source_id,...n.staged_source_cid!==void 0?{staged_source_cid:n.staged_source_cid}:{},rows:[s]},new Map([[s.temp_ref,l]]),i);if(r.errors)return{ok:!1,message:r.errors.map(u=>`${u.code}: ${u.detail}`).join("; ")};let f=x(e),m=s.matched_cid?f.tipOf(s.matched_cid):r.record?.nodes.find(u=>u.label==="usecase")?.cid??r.record?.review[0]?.id;return{ok:!0,ref:m?y(f,m):s.title,kind:s.kind}}async function ve(e,n,t,i={}){let o=x(e),d=o.heads.get(n)??null,s=new Set(o.staleList().filter(a=>a.state==="stale").map(a=>a.cid)),g=await t.reingest(n);if(g.status==="unchanged"&&!i.resumeHeld)return{source_id:n,changed:!1,head:{status:g.status,before:d,after:g.cid},note:`nothing to reconcile \u2014 ${n} is unchanged`,skipped_arms:B,changeset:[],rows:[]};let l=i.resumeHeld?{minted:[],matched:[],held:i.resumeHeld}:await t.reextract(n),r=x(e),f=l.minted.map(a=>{let _=y(r,a);return{kind:"ADD",origin:"content-change",ref:_,reason:`new use-case extracted from ${n}`,provenance:`extraction commit \u2014 DERIVES ${n} @ ${C(g.cid)}`,action:`kane-cli design tests --use-case ${_}`}}),m=r.staleList().filter(a=>a.state==="stale"&&!s.has(a.cid)&&T(r,a.cid)).map(a=>a.cid),p=m.map(a=>{let _=y(r,a),R=ne.has(r.nodeLabel.get(a)??"");return{kind:"MODIFY",origin:"structural-stale",ref:_,reason:"stale (structural)",provenance:q(r,a),action:R?`kane-cli maintain evolve ${_}`:`kane-cli design explain ${_}`}}),u=[],c=[];for(let a of l.held?.rows??[])if(a.kind==="ADD")u.push({kind:"ADD",origin:"content-change",ref:a.title,held_ref:a.temp_ref,reason:`${a.why} (staged \u2014 commits on approval)`,provenance:`staged extraction of ${n} @ ${C(g.cid)}`,action:"approve to commit + design"});else{let _=a.matched_cid?r.tipOf(a.matched_cid):null,R=_?r.getNode(_)?.content.criteria??[]:[],I=(a.uc.updated?.criteria??[]).map(k=>typeof k=="string"?k:k.text),Q=[...I.filter(k=>!R.includes(k)),...a.uc.updated?.criteria!==void 0?R.filter(k=>!I.includes(k)):[]],H=_?J(r,_,Q):void 0;c.push({kind:"MODIFY",origin:"content-change",ref:a.matched_cid?y(r,a.matched_cid):a.title,held_ref:a.temp_ref,reason:`${a.why} (staged \u2014 commits on approval)`,provenance:`staged extraction of ${n} @ ${C(g.cid)}`,action:"approve to commit the updated version (old\u2192new redirect)",...H?{impact:H}:{}})}let h=new Set;for(let a of[...l.minted,...l.matched])h.add(r.tipOf(a));for(let a of l.held?.rows??[])a.matched_cid&&h.add(r.tipOf(a.matched_cid));for(let a of m){let _=Y(r,r.tipOf(a));_&&r.nodeLabel.get(_)===b.USECASE&&h.add(r.tipOf(_))}let E=[];for(let a of await F(r,"design")){if(a.kind!=="no-verifies")continue;let _=r.resolve(a.ref);if(!_)continue;let R=Y(r,_.tip);!R||!h.has(r.tipOf(R))||E.push({kind:"ADD",origin:"content-change",ref:a.ref,reason:a.why,provenance:`gaps engine (design) \u2014 uncovered AC of touched use-case ${y(r,R)}`,action:a.ready_command})}let v=[];for(let{cid:a}of r.byLabel(b.USECASE))T(r,a)&&r.stale(a)==="orphaned"&&v.push({kind:"REMOVE",ref:y(r,a),reason:"orphaned \u2014 no live source evidences this use-case",provenance:q(r,a),action:"plan-only \u2014 REMOVE is not executed in this release"});let S=new Set,w=[...f.sort(O),...u.sort(O),...E.sort(O),...c.sort(O),...p.sort(O),...v.sort(O)].filter(a=>{let _=`${a.kind}\0${a.ref}`;return S.has(_)?!1:(S.add(_),!0)});return{source_id:n,changed:!0,head:{status:g.status,before:d,after:g.cid},note:te,skipped_arms:B,changeset:le(e,o,r,n,g.cid,l.minted,l.held),rows:w,...l.held?{held:l.held}:{}}}function be(e,n){return async t=>{let{ingestFile:i}=await import("./ingest-FIIO67ZN.js"),{convertPdf:o}=await import("./pdf-convert-S7VYE6AV.js"),{convertDocx:d}=await import("./docx-convert-ZBVQO2LG.js"),s=await i({contextDir:e,filePath:n,asId:t,converters:{pdf:o,docx:d}});return{status:s.status,cid:s.cid}}}function Re(e,n={}){return async t=>{let i=[],[{runExtract:o},{resolveAgentAuthEnv:d},{runAgent:s},{preflightTurn:g}]=await Promise.all([import("./run-YGJZ2SXX.js"),import("./spawner-YNYB4Z7K.js"),import("./bridge-BTSWCJ3B.js"),import("./turn-preflight-JGYT7LXP.js")]),l=await d(),r=new Set(x(e).byLabel(b.USECASE).map(S=>S.cid)),f=ae(e,t)??void 0,m=0,p=await o({mode:"override",...f?{changeContext:f}:{}},{contextDir:e,agent:s,preflightTurn:()=>g(l),ask:async()=>[],review:async S=>{if(!n.stage)return new Map(S.map(a=>[a.temp_ref,{resolution:a.matches_existing&&a.changed?"edited":"skipped"}]));let w=new Map;for(let a of S){if(a.matches_existing&&!a.changed){w.set(a.temp_ref,{resolution:"skipped"});continue}i.push({kind:a.matches_existing?"MODIFY":"ADD",temp_ref:a.temp_ref,title:a.title,why:a.matches_existing?`updated: ${Object.keys(a.updated??{}).join(", ")||"content"}`:`newly extracted from ${t}`,...a.matches_existing?{matched_cid:a.matches_existing.cid,updated:a.updated}:{},uc:a}),w.set(a.temp_ref,{resolution:"rejected"})}return w},confirmStale:async()=>!1,out:S=>process.stderr.write(S+`
13
- `),progress:S=>process.stderr.write(S+`
14
- `),emit:S=>{S.type==="commit"&&typeof S.assumed=="number"&&(m+=S.assumed)},isTTY:!1,auth:l});if(p!==0)throw new Error(`reconcile: re-extract of ${t} failed (exit ${p})`);let u=x(e),c=u.heads.get(t),h=[],E=[];if(typeof c=="string"){let S=new Set;for(let w of u.edgesFrom(c))w.type!==$.DERIVES||u.nodeLabel.get(w.dst)!==b.USECASE||S.has(w.dst)||(S.add(w.dst),!(n.stage&&u.trust.get(w.dst)==="archived")&&(r.has(w.dst)?E:h).push(w.dst))}let v=x(e).heads.get(t);return{minted:h,matched:E,defaultsTaken:m,...n.stage?{held:{source_id:t,...v!=null?{staged_source_cid:v}:{},rows:i}}:{}}}}export{Ee as a,ve as b,be as c,Re as d};
@@ -1,5 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as S,b as A,d as P}from"./chunk-GRB66C5S.js";import{a as U}from"./chunk-JFAFKHDX.js";import{a as O}from"./chunk-3C5GMAM4.js";import{a as G}from"./chunk-DNNZ353O.js";import{a as E,b as $}from"./chunk-7E24OCGX.js";import{b as T}from"./chunk-6W6AIDLJ.js";import{d as g,e as m}from"./chunk-5YPBPZUR.js";var v=(e,t,n=new Set)=>{let o=e.nameOf.get(t);if(o!==void 0)return o;if(n.has(t))return t;n.add(t);for(let[s,r]of e.superseded){if(r!==t)continue;let c=v(e,s,n);if(c!==s)return c}return t};function M(e,t){let n=e.stale(t);if(n==="fresh")return;if(n==="orphaned")return"orphaned \u2014 no live source evidences this item";let o=[],s=new Map;for(let r of e.derivesInto(t))s.set(String(r.props.source_id),r);for(let[r,c]of s){let i=e.heads.get(r);if(i==null||i===c.props.source_cid)continue;let u=e.convChains.get(r)?.chain;u&&u.includes(String(c.props.source_cid))||o.push(`DERIVES pin ${r}@${String(c.props.source_cid).slice(0,19)} broke \u2014 the source head moved`)}for(let r of e.edgesFrom(t)){if(r.type===m.DERIVES||!e.superseded.has(r.dst))continue;let c=e.tipOf(r.dst);if(e.superseded.has(c)){o.push(`${r.type} pin \u2192 ${v(e,r.dst)} \u2014 target retired`);continue}let i=L(e,r.dst,c);o.push(i.length>0?`${v(e,r.dst)} updated: ${i.map(u=>u.field).join(", ")}`:`${r.type} pin \u2192 ${v(e,r.dst)} \u2014 target superseded`)}return o.length>0?o.join("; "):"stale \u2014 a pinned dependency moved"}function L(e,t,n){let o=e.getNode(t)?.content??{},s=e.getNode(n)?.content??{},r=i=>i===void 0?"":Array.isArray(i)?i.map(String).join(" \xB7 "):typeof i=="object"?JSON.stringify(i):String(i),c=[];for(let i of[...new Set([...Object.keys(o),...Object.keys(s)])].sort())JSON.stringify(o[i])!==JSON.stringify(s[i])&&c.push({field:i,old:r(o[i]),new:r(s[i])});return c}function V(e,t){let n=[];for(let{cid:o}of e.byLabel(g.SCENARIO))e.superseded.has(o)||e.edgesFrom(o).some(s=>s.type===m.BELONGS_TO&&e.tipOf(s.dst)===t)&&n.push(o);return n}function R(e,t){let n=[],o=[],s=[],r=V(e,t),c=new Set(r),i=(u,f)=>{let a=M(e,f);return a===void 0?u:{...u,stale:!0,stale_reason:a}};for(let u of r){let f=e.getNode(u)?.content??{};n.push(i({ref:v(e,u),title:String(f.title??""),case_type:String(f.case_type??""),intent:String(f.intent??"")},u));for(let a of e.edgesInto(u)){if(a.type!==m.AUTOMATES||e.superseded.has(a.src))continue;let d=e.getNode(a.src)?.content??{},l=e.edgesFrom(a.src).filter(p=>p.type===m.VERIFIES&&!e.superseded.has(p.dst)).map(p=>v(e,p.dst));o.push(i({ref:v(e,a.src),title:String(d.title??""),check:d.check,verifies:l},a.src))}}for(let{cid:u}of e.byLabel(g.AC)){if(e.superseded.has(u))continue;let f=e.edgesFrom(u).find(p=>p.type===m.SCOPED_TO);if(!f)continue;let a=e.tipOf(f.dst);if(!(a===t||c.has(a)))continue;let l=e.getNode(u)?.content??{};s.push(i({ref:v(e,u),text:String(l.text??""),kind:String(l.kind??""),scope:a===t?"use-case":v(e,a)},u))}return{scenarios:n,tests:o,acs:s}}function I(e,t,n){let o=G(e,t,n);return o===null?null:o.toString("utf8")}function q(e,t){let n=t.split(`
3
- `).map(s=>s.replace(/^\d+\| /,"")),o=[];for(let s of e.split(`
4
- `)){let r=s.trim();if(r.length===0)continue;let c=n.find(i=>i.includes(r));c!==void 0&&!o.includes(c.trim())&&o.push(c.trim())}return o.length>0?o.join(`
5
- `):{removed:!0}}function J(e,t,n,o){if(o!==void 0&&o.trim().length>0)return{kind:"user-directive",text:o.trim()};let s=[n,...R(t,n).acs.map(u=>t.resolve(u.ref)?.cid??"")].filter(Boolean),r=[],c=new Set;for(let u of s){let f=new Map;for(let a of t.derivesInto(u))f.set(String(a.props.source_id),a);for(let[a,d]of f){let l=t.heads.get(a);if(l==null||l===d.props.source_cid)continue;let p=String(d.props.anchor),b=`${a}\0${p}`;if(c.has(b)||p==="img#whole")continue;c.add(b);let k=I(e,t,String(d.props.source_cid)),w=k===null?null:T(k,p);if(w===null)continue;let x=I(e,t,l);r.push({source_id:a,anchor:p,old_anchor_text:w,new_anchor_text:x===null?{removed:!0}:q(w,x)})}}let i;for(let[u,f]of t.superseded){if(f!==n||t.nodeLabel.get(u)!==g.USECASE)continue;let a=L(t,u,n);a.length>0&&(i=a);break}return{kind:"source-change",changes:r,...i?{uc_updated:i}:{}}}function N(e,t,n,o){let s=R(t,n);if(s.scenarios.length===0&&s.tests.length===0&&s.acs.length===0)return;let r=J(e,t,n,o);if(!(r.kind==="source-change"&&r.changes.length===0&&!r.uc_updated))return{prior_design:s,change_delta:r}}var _=new Set([g.USECASE,g.SCENARIO,g.AC,g.TEST]);function h(e,t){return!e.superseded.has(t)&&e.trust.get(t)!=="archived"}function y(e,t,n){let o=e.edgesFrom(t).find(s=>s.type===n);return o?e.tipOf(o.dst):null}function D(e,t,n){if(n===g.USECASE)return t;if(n===g.SCENARIO)return y(e,t,m.BELONGS_TO);if(n===g.AC){let o=y(e,t,m.SCOPED_TO);return o?e.nodeLabel.get(o)===g.USECASE?o:y(e,o,m.BELONGS_TO):null}if(n===g.TEST){let o=y(e,t,m.AUTOMATES);return o?y(e,o,m.BELONGS_TO):null}return null}function j(e,t){let n=e.nameOf.get(t);if(n)return n;for(let[o,s]of e.names)if(e.tipOf(s)===t)return o;return t}function B(e,t){return{ucTip:t,display:j(e,t),seamRef:e.nameOf.get(t)??t}}function Y(e,t){let n=e.resolve(t);if(!n)return{ok:!1,message:`unknown ref '${t}' \u2014 no test/scenario/ac/use-case by that id or cid`};let o=n.tip,s=e.nodeLabel.get(o);if(!s||!_.has(s))return{ok:!1,message:`'${t}' is a ${s??"missing node"} \u2014 evolve takes a test, scenario, acceptance criterion, or use-case`};let r=D(e,o,s);return!r||e.nodeLabel.get(r)!==g.USECASE?{ok:!1,message:`cannot resolve '${t}' to a parent use-case \u2014 its ${s} chain is broken`}:e.superseded.has(r)?{ok:!1,message:`use-case ${j(e,r)} was removed \u2014 nothing to evolve`}:{ok:!0,target:B(e,r)}}function ae(e,t){return C(e,t)}function C(e,t){let n=[];for(let{cid:s}of e.byLabel(g.SCENARIO)){if(!h(e,s)||!e.edgesFrom(s).some(c=>c.type===m.BELONGS_TO&&e.tipOf(c.dst)===t))continue;let r=e.edgesInto(s).filter(c=>c.type===m.AUTOMATES&&h(e,c.src));if(r.length===0)n.push({scenario:s,test:null});else for(let c of r)n.push({scenario:s,test:c.src})}let o=new Map;for(let{cid:s}of e.byLabel(g.AC)){if(!h(e,s)||D(e,s,g.AC)!==t)continue;let r=e.edgesInto(s).filter(c=>c.type===m.VERIFIES&&h(e,c.src)).map(c=>c.src).sort();o.set(s,r)}return{pairs:n,verifies:o}}function H(e,t){let n=c=>`${c.scenario}\0${c.test??""}`,o=new Set(e.pairs.map(n)),s=new Set(t.pairs.map(n)),r=[];for(let[c,i]of e.verifies){let u=t.verifies.get(c);u&&(i.length===u.length&&i.every((f,a)=>f===u[a])||r.push({ac:c,before:i,after:u}))}return{superseded:e.pairs.filter(c=>!s.has(n(c))),minted:t.pairs.filter(c=>!o.has(n(c))),retained:t.pairs.filter(c=>o.has(n(c))),moves:r}}function z(e,t,n,o,s){let r=i=>t.nameOf.get(i)??i,c=i=>` - ${r(i.scenario)} \xB7 ${i.test?r(i.test):"(no test)"}`;e.out(`evolved: use-case ${n} \u2014 design record ${o.before} \u2192 ${o.after}`),e.out(`superseded: ${s.superseded.length} pair(s)`);for(let i of s.superseded)e.out(c(i));e.out(`minted: ${s.minted.length} pair(s)`);for(let i of s.minted)e.out(c(i));e.out(`retained: ${s.retained.length} pair(s)`);for(let i of s.retained)e.out(c(i));if(s.moves.length===0)e.out("verifies moves: none");else{e.out("verifies moves:");for(let i of s.moves){let u=f=>f.length>0?f.map(r).join(" + "):"(none)";e.out(` - ${r(i.ac)}: ${u(i.before)} \u2192 ${u(i.after)}`)}}}async function F(e,t,n,o,s,r){let c=E(e),i=O(c,t.ucTip);if(!i)return r==="batch"?(o.out(`note: ${t.display} has no design output \u2014 nothing to evolve; run kane-cli design tests --use-case ${t.display} first`),{code:0,outcome:"no-design"}):(S(o,`nothing to evolve \u2014 run kane-cli design tests --use-case ${t.display} first (no design output)`),{code:2,outcome:"no-design"});let u=C(c,t.ucTip),f=`evolve re-designs the parent use-case ${t.display}; ${u.pairs.length} pair(s) affected`;if(n.yes)o.out(f);else if(!await o.confirm(`${f} \u2014 proceed?`))return o.out(r==="batch"?`skipped ${t.display}`:"declined \u2014 nothing evolved"),{code:0,outcome:"declined"};let a=N(e,c,t.ucTip,n.because),d=await s(t.seamRef,{yes:!!n.yes,...n.mode?{mode:n.mode}:{},...n.because?{because:n.because}:{},...a!==void 0?{changeDelta:a.change_delta,priorDesign:a.prior_design}:{}});if(d===3)return o.out(`design session for ${t.display} paused \u2014 resume with \`kane-cli design tests --resume\`, then re-run evolve for the diff`),{code:d,outcome:"paused"};if(d!==0)return S(o,`design run for ${t.display} ended with exit code ${d} \u2014 no diff to report`),{code:d,outcome:"failed"};let l=E(e),p=l.tipOf(t.ucTip),b=O(l,p)?.seq;return z(o,l,t.display,{before:i.seq,after:b??"?"},H(u,C(l,p))),{code:0,outcome:"evolved"}}function K(e){let t=new Map,n=0;for(let{cid:s,state:r}of e.staleList()){if(r==="superseded")continue;let c=e.nodeLabel.get(s);if(!c||!_.has(c)||!h(e,s)||!$(e,s))continue;let i=D(e,s,c);!i||e.nodeLabel.get(i)!==g.USECASE||e.superseded.has(i)||(n++,t.has(i)||t.set(i,B(e,i)))}return{targets:[...t.values()].sort((s,r)=>s.display<r.display?-1:s.display>r.display?1:0),staleCount:n}}function Q(e,t){for(let{cid:n,state:o}of e.staleList()){if(o==="superseded")continue;let s=e.nodeLabel.get(n);if(!(!s||!_.has(s)||!h(e,n))&&$(e,n)&&D(e,n,s)===t)return!0}return!1}async function W(e,t,n,o={},s=process.cwd()){if(e&&t.fromStale)return S(n,"pass a <ref> OR --from-stale, not both"),2;if(!e&&!t.fromStale)return S(n,"evolve needs a <ref> or --from-stale"),2;let r=A(s,n);if(!r)return 2;let c=o.runDesignForUc??X;n.out(`evolving ${e??"stale use-cases"}: reading the graph\u2026`);let i=E(r),u,f=null;if(e){let d=Y(i,e);if(!d.ok)return S(n,d.message),2;if(!t.because&&O(i,d.target.ucTip)&&!Q(i,d.target.ucTip))return S(n,`nothing changed underneath ${e} \u2014 its sources and requirements are current; use --because "<reason>" to re-design anyway`),2;u=[d.target]}else{let{targets:d,staleCount:l}=K(i);if(d.length===0)return n.out("nothing stale \u2014 nothing to evolve"),0;f=`from-stale: ${l} stale node(s) \u2192 ${d.length} use-case(s)`,u=d}if(!t.yes&&!n.isTTY)return S(n,"evolve needs a TTY \u2014 the blast-radius confirm is the point; headless evolution rides `kane-cli maintain reconcile`"),2;if(f&&n.out(f),e){let d=await F(r,u[0],t,n,c,"single");return d.outcome==="evolved"&&t.because&&U(r,{ts:new Date().toISOString(),command:"evolve",id:e,verdict:"gap-resolved-evolve",polarity:"preference",by:{kind:"human",id:process.env.USER??"operator"},target:e,reason:t.because}),d.code}let a=0;for(let d of u){let{code:l}=await F(r,d,t,n,c,"batch");l!==0&&a===0&&(a=l)}return a}var X=async(e,t)=>{let{designTestsCommand:n}=await import("./bind-NSGW5BBZ.js"),o=()=>n({useCase:e,force:!0,...t.mode?{mode:t.mode}:t.yes?{mode:"override"}:{},...t.because?{because:t.because}:{},...t.changeDelta!==void 0?{changeDelta:t.changeDelta}:{},...t.priorDesign!==void 0?{priorDesign:t.priorDesign}:{}});if(t.mode!=="agent")return o();let s=process.stdout.write;process.stdout.write=((...r)=>!0);try{return await o()}finally{process.stdout.write=s}};async function de(e,t){return W(e,t,P(),{})}export{Y as a,ae as b,F as c,K as d,W as e,X as f,de as g};
@@ -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,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as M,b as A,d as K}from"./chunk-6HYW5RFX.js";import{c as z,e as P}from"./chunk-J2KSZUOO.js";import{d as L,e as R,f as U,g as B,h as J}from"./chunk-5YPBPZUR.js";function Z(c,s){let t=c.toLowerCase().trim().replace(/[^a-z0-9]+/g,"-").replace(/^-+|-+$/g,"");if(t.length>60){let o=t.lastIndexOf("-",60);t=(o>0?t.slice(0,o):t.slice(0,60)).replace(/-+$/g,"")}if(!G.test(t))return null;let e=t;for(let o=2;s(e);o++)e=`${t}-${o}`;return G.test(e)?e:null}var ee={source:"src",usecase:"uc",scenario:"sc",ac:"ac",test:"t",gap:"gap",stylenote:"sty"};function ae(c,s,t){let e=ee[c];return Z(e?`${e} ${s}`:s,t)}var te={usecase:"uc",scenario:"sc",ac:"ac",test:"t",gap:"gap",stylenote:"sty"},ue=/^(uc|sc|ac|t|gap|sty)-\d+$/i;function Q(c,s,t){let e=te[c];if(!e)return null;let o=new RegExp(`^${e}-(\\d+)$`),u=0;for(let a of t){let p=o.exec(a);if(!p)continue;let m=Number(p[1]);Number.isSafeInteger(m)&&m>u&&(u=m)}let r=u+1;for(;s(`${e}-${r}`);)r+=1;return`${e}-${r}`}var re=/^L([1-9]\d*)-L([1-9]\d*)$/,ie=/^img#(p[1-9]\d*-[1-9]\d*|i[1-9]\d*)$/;function q(c){if(c==="img#whole")return{kind:"img-whole"};let s=ie.exec(c);if(s)return{kind:"img-part",ref:s[1]};let t=re.exec(c);return t?{kind:"lines",a:parseInt(t[1],10),b:parseInt(t[2],10)}:null}function se(c,s){let t=/^L(\d+)-L(\d+)$/.exec(s);if(!t)return null;let e=parseInt(t[1],10),o=parseInt(t[2],10),u=c.split(`
3
- `);return e<1||o<e||o>u.length?null:u.slice(e-1,o).map(r=>r.replace(/^\d+\| /,"")).join(`
4
- `)}function F(c,s,t){let e=q(s.anchor);if(c.format==="image")return e?.kind==="img-whole"?[]:[{code:"CITE_ANCHOR_INVALID",detail:`image cites are anchor-only (img#whole), got ${s.anchor}`}];if(e?.kind==="img-part")return new Set((c.images??[]).map(r=>r.ref)).has(e.ref)?[]:[{code:"CITE_ANCHOR_INVALID",detail:`anchor ${s.anchor} names no embedded image of this source version`}];if(!s.anchor||s.quote===void 0||s.quote==="")return[{code:"MISSING_CITE",detail:"text-kind cites need anchor+quote"}];let o=t!==null?se(t,s.anchor):null;return o===null?[{code:"BAD_ANCHOR",detail:`anchor ${s.anchor} does not resolve in the source`}]:o.includes(s.quote)?[]:[{code:"QUOTE_MISMATCH",detail:`quote is not verbatim within ${s.anchor}`}]}var G=/^[a-z0-9][a-z0-9-]{1,63}$/;function X(c,s,t,e){if(!s)return{error:{code:"SUPERSEDE_TARGET_MISSING",detail:"supersede verdict needs a target (slug or cid)"}};let o=c.resolve(s);return o?o.superseded||e.has(o.cid)?{error:{code:"ALREADY_SUPERSEDED",detail:`${s} is already superseded (tip: ${o.tip})`}}:o.cid===t?{error:{code:"SELF_SUPERSEDE",detail:"a node cannot supersede itself"}}:{targetCid:o.cid}:{error:{code:"UNKNOWN_SUPERSEDE_TARGET",detail:`${s} names nothing in the graph`}}}function oe(c,s,t,e,o=[]){if(!B(s)?.acyclic)return null;if(t===e)return{code:"EDGE_CYCLE",detail:`${s} ${t} \u2192 itself`};let r=m=>[...c.edgesFrom(m).filter(E=>E.type===s).map(E=>E.dst),...o.filter(E=>E.type===s&&E.src===m).map(E=>E.dst)],a=new Set,p=[e];for(;p.length>0;){let m=p.pop();if(m===t)return{code:"EDGE_CYCLE",detail:`${s} ${t} \u2192 ${e} closes a cycle`};a.has(m)||(a.add(m),p.push(...r(m)))}return null}function Ie(c,s,t,e){let u=B(s)?.cardinality;if(u!=="one-live-per-src"&&u!=="one-live-per-src-and-dst")return null;let r=c.edgesFrom(t).filter(a=>a.type===s&&!c.superseded.has(a.dst));if(r.length>0)return{code:"CARDINALITY_VIOLATION",detail:`${s} from ${t} already has a live edge (${r[0].ecid}) \u2014 supersede it first`};if(u==="one-live-per-src-and-dst"&&e!==void 0){let a=c.edgesInto(e).filter(p=>p.type===s&&!c.superseded.has(p.src));if(a.length>0)return{code:"CARDINALITY_VIOLATION",detail:`${s} onto ${e} already has a live edge (${a[0].ecid}) \u2014 strict 1:1, supersede it first`}}return null}var Y=new Set(["high","med","low"]);function ve(c,s,t){let e=[],o=t.mediaOf(c.source.source_cid),u=new Set;for(let r of c.use_cases){if(u.has(r.temp_ref)&&e.push({code:"DUP_TEMP_REF",detail:`duplicate temp_ref ${r.temp_ref}`}),u.add(r.temp_ref),(!r.title||!r.title.trim())&&e.push({code:"EMPTY_TITLE",detail:`${r.temp_ref}: title is empty`}),Y.has(r.risk)||e.push({code:"BAD_RISK",detail:`${r.temp_ref}: risk ${JSON.stringify(r.risk)} not in high|med|low`}),!r.cite||!r.cite.anchor)e.push({code:"MISSING_CITE",detail:`${r.temp_ref}: every derived use-case must carry a cite`});else for(let a of F(o,r.cite,s))e.push({code:a.code,detail:`${r.temp_ref}: ${a.detail}`});r.matches_existing&&!t.hasNode(r.matches_existing.cid)&&e.push({code:"UNKNOWN_MATCH",detail:`${r.temp_ref}: matches_existing ${r.matches_existing.cid} is not in the graph`});for(let[a,p]of(r.criteria??[]).entries())if((!p.text||!p.text.trim())&&e.push({code:"EMPTY_CRITERION",detail:`${r.temp_ref}.criteria[${a}]: text is empty`}),!p.cite||!p.cite.anchor)e.push({code:"MISSING_CITE",detail:`${r.temp_ref}.criteria[${a}]: every criterion carries its own cite`});else for(let m of F(o,p.cite,s))e.push({code:m.code,detail:`${r.temp_ref}.criteria[${a}]: ${m.detail}`});for(let[a,p]of(r.updated?.criteria??[]).entries())if((!p.text||!p.text.trim())&&e.push({code:"EMPTY_CRITERION",detail:`${r.temp_ref}.updated.criteria[${a}]: text is empty`}),!p.cite||!p.cite.anchor)e.push({code:"MISSING_CITE",detail:`${r.temp_ref}.updated.criteria[${a}]: every updated criterion carries its own cite`});else for(let m of F(o,p.cite,s))e.push({code:m.code,detail:`${r.temp_ref}.updated.criteria[${a}]: ${m.detail}`})}return e}function Ne(c){let{contextDir:s,graph:t,proposal:e,proposalId:o,verdicts:u,by:r,allowStaleBasis:a,extractorVersion:p,autoName:m}=c,E=z(s);if(!a&&e.read_basis!==E)return{record:null,errors:[{code:"STALE_BASIS",detail:`proposal read_basis ${String(e.read_basis)} != latest ${String(E)}`}]};if(!t.hasNode(e.source.source_cid))return{record:null,errors:[{code:"MISSING_SOURCE_NODE",detail:`source ${e.source.source_id} (${e.source.source_cid}) is not a committed node \u2014 ingest it first`}]};let f=[],h=t.mediaOf(e.source.source_cid),w=new Set,I=[],S=[],b=[],D=[],C=[],O=[],j=new Set,W=new Set,H=(i,n,V)=>{let x=X(t,n.supersedeTarget,V,j);if("error"in x){f.push({code:x.error.code,detail:`${i}: ${x.error.detail}`});return}j.add(x.targetCid),C.push({kind:"node",old:x.targetCid,new:V,reason:n.reason??`superseded via review by ${r.id}`,by:r})};for(let i of e.use_cases){let n=u.get(i.temp_ref)??{resolution:"skipped"};w.has(i.temp_ref)&&f.push({code:"DUP_TEMP_REF",detail:`duplicate temp_ref ${i.temp_ref}`}),w.add(i.temp_ref),(!i.title||!i.title.trim())&&f.push({code:"EMPTY_TITLE",detail:`${i.temp_ref}: title is empty`}),Y.has(i.risk)||f.push({code:"BAD_RISK",detail:`${i.temp_ref}: risk ${JSON.stringify(i.risk)} not in high|med|low`});let V=q(i.cite?.anchor??"");if(h.format==="image"){if(V?.kind!=="img-whole"){f.push({code:i.cite?.anchor?"CITE_ANCHOR_INVALID":"MISSING_CITE",detail:`${i.temp_ref}: image cites are anchor-only (img#whole)`});continue}}else if(V?.kind==="img-part"){if(!(h.images??[]).some(g=>g.ref===V.ref)){f.push({code:"CITE_ANCHOR_INVALID",detail:`${i.temp_ref}: anchor ${i.cite?.anchor} names no embedded image of this source version`});continue}}else if(!i.cite||!i.cite.anchor||!i.cite.quote){f.push({code:"MISSING_CITE",detail:`${i.temp_ref}: every derived use-case must cite anchor+quote`});continue}n.resolution==="edited"&&n.edit&&(n.edit.title!==void 0&&!n.edit.title.trim()&&f.push({code:"EMPTY_TITLE",detail:`${i.temp_ref}: edited title is empty`}),n.edit.risk!==void 0&&!Y.has(n.edit.risk)&&f.push({code:"BAD_RISK",detail:`${i.temp_ref}: edited risk ${JSON.stringify(n.edit.risk)} invalid`}));let x=K({title:n.edit?.title??i.title,description:i.description,summary:n.edit?.summary??i.summary,actors:i.actors,value:i.value,risk:n.edit?.risk??i.risk,...i.criteria&&i.criteria.length>0?{criteria:i.criteria.map(d=>d.text)}:{}}),_=M("usecase",x),y={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:i.cite.anchor,...i.cite.quote?{quote:i.cite.quote}:{}};if(i.matches_existing&&!t.hasNode(i.matches_existing.cid)){f.push({code:"UNKNOWN_MATCH",detail:`${i.temp_ref}: matches_existing ${i.matches_existing.cid} is not in the graph`});continue}let v=i.matches_existing?.cid??(t.hasNode(_)?_:null);if(v&&t.superseded.has(v)){let d=t.tipOf(v);v=t.superseded.has(d)?null:d}if(v){if(i.changed&&(n.resolution==="approved"||n.resolution==="edited")){let d=i.updated;if(!d||Object.keys(d).length===0){f.push({code:"CHANGED_NEEDS_PAYLOAD",detail:`${i.temp_ref}: changed:true needs an updated{...} payload naming the moved fields`});continue}let g=t.getNode(v)?.content??{},$=(d.criteria??[]).map(l=>typeof l=="string"?{text:l,cite:void 0}:l),T=K({title:n.edit?.title??d.title??String(g.title??i.title),...d.description??g.description?{description:d.description??g.description}:{},...n.edit?.summary??d.summary??g.summary?{summary:n.edit?.summary??d.summary??g.summary}:{},...d.actors??g.actors?{actors:d.actors??g.actors}:{},...d.value??g.value?{value:d.value??g.value}:{},risk:n.edit?.risk??d.risk??String(g.risk??i.risk),...d.criteria?$.length>0?{criteria:$.map(l=>l.text)}:{}:g.criteria?{criteria:g.criteria}:{}}),k=M("usecase",T);if(k!==v){for(let l of U("usecase",T))f.push({code:l.code,detail:`${i.temp_ref}: ${l.detail}`});I.push({cid:k,label:L.USECASE,content:T}),S.push({ecid:A("DERIVES",y.source_cid,k,y),type:R.DERIVES,src:y.source_cid,dst:k,props:y});for(let l of $){if(!l.cite)continue;let N={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:l.cite.anchor,...l.cite.quote?{quote:l.cite.quote}:{},claim:l.text};S.push({ecid:A("DERIVES",N.source_cid,k,N),type:R.DERIVES,src:N.source_cid,dst:k,props:N})}H(i.temp_ref,{resolution:"supersede",supersedeTarget:v,reason:n.reason??`matches-but-changed: ${e.source.source_id} moved (${Object.keys(d).join(", ")})`},k),D.push({id:k,kind:"review-item",resolution:n.resolution,edit:n.resolution==="edited"?{...n.edit}:null,reason:null,by:r});continue}for(let l of $){if(!l.cite)continue;let N={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:l.cite.anchor,...l.cite.quote?{quote:l.cite.quote}:{},claim:l.text};S.push({ecid:A("DERIVES",N.source_cid,v,N),type:R.DERIVES,src:N.source_cid,dst:v,props:N})}}n.resolution!=="rejected"&&(S.push({ecid:A("DERIVES",y.source_cid,v,y),type:R.DERIVES,src:y.source_cid,dst:v,props:y}),(n.resolution==="approved"||n.resolution==="edited"||n.resolution==="supersede")&&D.push({id:v,kind:"review-item",resolution:"approved",edit:null,reason:null,by:r}),n.resolution==="supersede"&&H(i.temp_ref,n,v));continue}for(let d of U("usecase",x))f.push({code:d.code,detail:`${i.temp_ref}: ${d.detail}`});for(let d of J(R.DERIVES,"source","usecase",y))f.push({code:d.code,detail:`${i.temp_ref}: ${d.detail}`});I.push({cid:_,label:L.USECASE,content:x}),S.push({ecid:A("DERIVES",y.source_cid,_,y),type:R.DERIVES,src:y.source_cid,dst:_,props:y});for(let d of i.criteria??[]){let g={source_id:e.source.source_id,source_cid:e.source.source_cid,anchor:d.cite.anchor,...d.cite.quote?{quote:d.cite.quote}:{},claim:d.text};S.push({ecid:A("DERIVES",g.source_cid,_,g),type:R.DERIVES,src:g.source_cid,dst:_,props:g})}for(let d of i.depends_on_hint??[]){let g=l=>l.toLowerCase().trim().replace(/\s+/g," "),$=null,T=t.resolve(d);if(T&&!T.superseded&&t.nodeLabel.get(T.cid)===L.USECASE&&($=T.cid),!$){for(let{cid:l,content:N}of t.byLabel(L.USECASE))if(!t.superseded.has(l)&&g(String(N.title??""))===g(d)){$=l;break}}if(!$){let l=I.find(N=>N.label===L.USECASE&&g(String(N.content.title??""))===g(d));l&&($=l.cid)}!$||$===_||oe(t,R.DEPENDS_ON,_,$,b)||b.some(l=>l.src===_&&l.dst===$)||(S.push({ecid:A(R.DEPENDS_ON,_,$,{reason:"extract hint"}),type:R.DEPENDS_ON,src:_,dst:$,props:{reason:"extract hint"}}),b.push({src:_,dst:$,type:R.DEPENDS_ON}))}if((n.resolution==="approved"||n.resolution==="edited"||n.resolution==="supersede")&&t.superseded.get(_)===null&&!j.has(_)&&C.push({kind:"node",old:_,new:_,reason:`re-minted after tombstone via review by ${r.id}`,by:r}),m){let d=Q("usecase",g=>W.has(g),t.names.keys());d!==null&&!t.nameOf.has(_)&&(W.add(d),O.push({cid:_,slug:d,by:r}))}n.resolution==="approved"?D.push({id:_,kind:"review-item",resolution:"approved",edit:null,reason:null,by:r}):n.resolution==="edited"?D.push({id:_,kind:"review-item",resolution:"edited",edit:{...n.edit},reason:null,by:r}):n.resolution==="rejected"?D.push({id:_,kind:"review-item",resolution:"rejected",edit:null,reason:n.reason??null,by:r}):n.resolution==="supersede"&&(D.push({id:_,kind:"review-item",resolution:"approved",edit:null,reason:n.reason??null,by:r}),H(i.temp_ref,n,_))}return f.length?{record:null,errors:f}:{record:P(s,{ts:new Date().toISOString(),proposal_id:o,...o!=null?{extraction_of:e.source.source_cid}:{},...o!=null&&p?{extractor_version:p}:{},nodes:I,edges:S,review:D,supersessions:C,...O.length>0?{names:O}:{},...c.judgements&&c.judgements.length>0?{judgements:c.judgements}:{},source_head_moves:{}},{expectPrev:E}).record,errors:null}}function ye(c){let{contextDir:s,graph:t,verdicts:e,by:o}=c,u=[],r=[],a=[],p=[],m=new Set;for(let[f,h]of e){if(h.resolution==="skipped")continue;let w=t.resolve(f);if(!w){u.push({code:"UNKNOWN_NODE",detail:`${f} names nothing in the graph`});continue}if(w.superseded){u.push({code:"SUPERSEDED_TARGET",detail:`${f} is superseded \u2014 review the tip (${w.tip})`});continue}let I=w.cid;if(h.resolution==="approved")a.push({id:I,kind:"review-item",resolution:"approved",edit:null,reason:null,by:o});else if(h.resolution==="rejected")a.push({id:I,kind:"review-item",resolution:"rejected",edit:null,reason:h.reason??null,by:o});else if(h.resolution==="edited"){let S=t.getNode(I);if(!S){u.push({code:"UNKNOWN_NODE",detail:`${f}: node file unreadable`});continue}let b={...S.content,...h.edit?.title!==void 0?{title:h.edit.title}:{},...h.edit?.summary!==void 0?{summary:h.edit.summary}:{},...h.edit?.risk!==void 0?{risk:h.edit.risk}:{}},D=U(S.label,b);if(D.length>0){for(let O of D)u.push({code:O.code,detail:`${f}: ${O.detail}`});continue}let C=M(S.label,b);if(C===I){a.push({id:I,kind:"review-item",resolution:"approved",edit:null,reason:null,by:o});continue}r.push({cid:C,label:S.label,content:b}),m.add(I),p.push({kind:"node",old:I,new:C,reason:h.reason??"edited in review",by:o}),a.push({id:C,kind:"review-item",resolution:"edited",edit:{...h.edit},reason:null,by:o})}else if(h.resolution==="supersede"){let S=X(t,h.supersedeTarget,I,m);if("error"in S){u.push({code:S.error.code,detail:`${f}: ${S.error.detail}`});continue}m.add(S.targetCid),p.push({kind:"node",old:S.targetCid,new:I,reason:h.reason??`superseded via review by ${o.id}`,by:o}),a.push({id:I,kind:"review-item",resolution:"approved",edit:null,reason:h.reason??null,by:o})}}return u.length?{record:null,errors:u}:a.length===0&&p.length===0?{record:null,errors:[{code:"NO_VERDICTS",detail:"every item was skipped \u2014 nothing to commit"}]}:{record:P(s,{ts:new Date().toISOString(),proposal_id:null,nodes:r,edges:[],review:a,supersessions:p,source_head_moves:{}},{expectPrev:t.latestHash}).record,errors:null}}function Re(c){let{contextDir:s,graph:t,assignments:e,by:o}=c,u=[],r=[],a=new Set;for(let{ref:m,slug:E}of e){if(!G.test(E)){u.push({code:"BAD_SLUG",detail:`${JSON.stringify(E)} \u2014 slugs are kebab-case ${String(G)}`});continue}let f=t.resolve(m);if(!f){u.push({code:"UNKNOWN_REF",detail:`${m} names nothing in the graph`});continue}if(f.superseded){u.push({code:"SUPERSEDED_TARGET",detail:`${m} is superseded \u2014 name the tip instead (${f.tip})`});continue}let h=t.names.get(E);if(h!==void 0&&!t.superseded.has(h)&&h!==f.cid||a.has(E)){u.push({code:"SLUG_TAKEN",detail:`${E} already names ${h??"another node in this record"}`});continue}a.add(E),r.push({cid:f.cid,slug:E,by:o})}return u.length?{record:null,errors:u}:r.length===0?{record:null,errors:[{code:"NO_ASSIGNMENTS",detail:"nothing to name"}]}:{record:P(s,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[],names:r,source_head_moves:{}},{expectPrev:t.latestHash}).record,errors:null}}function De(c){let{contextDir:s,graph:t,sourceId:e,reason:o,by:u}=c,r=t.heads.get(e);return r===void 0?{record:null,errors:[{code:"UNKNOWN_SOURCE",detail:`no source ${e} in the graph`}]}:r===null?{record:null,errors:[{code:"ALREADY_RETIRED",detail:`source ${e} is already retired`}]}:{record:P(s,{ts:new Date().toISOString(),proposal_id:null,nodes:[],edges:[],review:[],supersessions:[{kind:"node",old:r,new:null,reason:o??`retired source ${e}`,by:u}],source_head_moves:{[e]:null},names:[]},{expectPrev:t.latestHash}).record,errors:null}}export{q as a,se as b,oe as c,Ie as d,ve as e,Ne as f,ye as g,Re as h,De as i,Z as j,ee as k,ae as l,ue as m,Q as n};
@@ -1,2 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as G,b as R}from"./chunk-FRBYGSGJ.js";import{m as I}from"./chunk-6W6AIDLJ.js";import{a as L}from"./chunk-J2KSZUOO.js";import{e as N,g as M}from"./chunk-5YPBPZUR.js";import{existsSync as P,readFileSync as D}from"fs";function z(d){let n=R(d),g=new Map(Object.entries(n.heads)),l=new Map(Object.entries(n.trust)),a=new Map(Object.entries(n.nodeLabel)),i=new Map(Object.entries(n.superseded)),f=new Map(Object.entries(n.names)),T=new Map(Object.entries(n.archivedReason)),k=new Set(n.appliedEvents),E=new Map(Object.entries(n.conv)),q=e=>n.media[e]??{format:"text",media_type:"text/plain",anchors_supported:["L-L"]},h=new Map;for(let[e,t]of f)h.set(t,e);let m=new Map,C=e=>{if(m.has(e))return m.get(e);if(!a.has(e))return m.set(e,null),null;let t=G(d,e);if(!P(t))throw new L(`derived node file missing for ${e} \u2014 run kane-cli context rebuild`);let s=JSON.parse(D(t,"utf8"));return m.set(e,s),s},b=e=>{let t=e,s=new Set;for(;i.has(t)&&!s.has(t);){s.add(t);let r=i.get(t);if(typeof r!="string")break;t=r}return t},w=null,H=e=>{let t=h.get(e);if(t!==void 0)return t;if(w===null){w=new Map;for(let[c,o]of i)typeof o=="string"&&w.set(o,c)}let s=new Set,r=e;for(;!s.has(r);){s.add(r);let c=w.get(r);if(c===void 0)return null;let o=h.get(c);if(o!==void 0)return o;r=c}return null},x=e=>{I.test(e)&&(e=e.toLowerCase());let t=g.get(e),s=a.has(e)?e:f.get(e)??(typeof t=="string"?t:void 0);if(s===void 0||!a.has(s))return null;let r=b(s);return{cid:s,tip:r,superseded:i.has(s)||i.has(r)}},S=new Map;for(let e of Object.values(n.forward))for(let t of e){let s=S.get(t.dst);s?s.push(t):S.set(t.dst,[t])}let v=e=>(e??[]).filter(t=>!i.has(t.ecid)),O=e=>v(S.get(e)),y=e=>O(e).filter(t=>t.type===N.DERIVES),F=e=>v(n.forward[e]).some(t=>M(t.type)?.pin?.comparesTo==="dst_tip"&&i.has(t.dst)),_=e=>{if(i.has(e))return"superseded";let t=y(e);if(t.length===0)return F(e)?"stale":"fresh";let s=new Map;for(let o of t)s.set(o.props.source_id,o);let r=!1,c=!1;for(let[o,u]of s){let p=g.get(o);if(p!=null&&(r=!0,p!==u.props.source_cid)){let j=E.get(o)?.chain;(!j||!j.includes(u.props.source_cid))&&(c=!0)}}return r?c||F(e)?"stale":"fresh":"orphaned"};return{heads:g,trust:l,nodeLabel:a,superseded:i,names:f,nameOf:h,archivedReason:T,appliedEvents:k,convChains:E,mediaOf:q,extractedSourceCids:new Set(n.extracted),designOf:new Map(Object.entries(n.design_of??{})),latestHash:n.applied.hash,lastSeq:n.applied.seq,hasNode:e=>a.has(e),getNode:C,byLabel:e=>[...a.entries()].filter(([,t])=>t===e).map(([t])=>({cid:t,content:C(t)?.content??{}})),edgesFrom:e=>v(n.forward[e]),edgesInto:O,derivesInto:y,resolve:x,tipOf:b,displayNameOf:H,stale:_,staleList:()=>[...a.keys()].map(e=>({cid:e,state:_(e)})).filter(e=>e.state!=="fresh"),execHistory:e=>{let t=x(e);if(!t)return[];let s=b(t.cid),r=new Set([s]),c=!0;for(;c;){c=!1;for(let[u,p]of i)p!==null&&r.has(p)&&!r.has(u)&&(r.add(u),c=!0)}let o=[];for(let u of Object.entries(n.exec??{}))r.has(u[0])&&o.push(...u[1]);return o.sort((u,p)=>u.started_at<p.started_at?-1:1)}}}function B(d,n){if(d.stale(n)!=="stale")return!1;let g=new Map;for(let l of d.derivesInto(n))g.set(l.props.source_id,l);for(let[l,a]of g){let i=d.heads.get(l);if(i==null||i===a.props.source_cid)continue;let f=d.convChains.get(l)?.chain;if(!f||!f.includes(a.props.source_cid))return!0}for(let l of d.edgesFrom(n)){if(M(l.type)?.pin?.comparesTo!=="dst_tip"||!d.superseded.has(l.dst))continue;let a=d.tipOf(l.dst);if(d.superseded.has(a)||d.nodeLabel.get(a)==="usecase")return!0}return!1}export{z as a,B as b};
@@ -1,4 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{a as Z,d as ee,e as te,f as ne}from"./chunk-GG43HSU2.js";import{b as B,d as Y}from"./chunk-FMR2KPSK.js";import{d as X}from"./chunk-NVGBE2DR.js";var oe=new Set(["approve","edit","reject"]);function ae(r,t){return`chatop:${t}:${r.target??"new"}:${r.op}:${r.seq}`}function ue(r,t,k,h){let u=ae(r,t),f=r.payload;switch(r.op){case"approve":return{kind:"approve",target:r.target,expectedCid:r.expected_cid,eventId:u};case"edit":{let{reason:i,...b}=f;return{kind:"edit",target:r.target,expectedCid:r.expected_cid,edit:b,reason:i,eventId:u}}case"enhance":return{kind:"enhance",target:r.target,expectedCid:r.expected_cid,edges:f.edges??[],eventId:u};case"reject":return{kind:"reject",target:r.target,expectedCid:r.expected_cid,reason:f.reason??"",redirectTo:f.redirect_to,eventId:u};case"add":{let i=f.proposal_item??{},b=String(i.label??"");if(!k.mint_gate.includes(b))throw new Error(`GATED_LABEL: cannot mint "${b}" (gate: ${k.mint_gate.join(", ")})`);let c=i.cite??{},p=i.conv_source_id??h;if(!p||typeof c.turn!="number"||!c.quote)throw new Error("INVALID_ADD: a chat add requires a conversation cite {turn, quote} and conv_source_id");return{kind:"add",label:b,content:i.content??{},cite:{turn:c.turn,quote:c.quote},convSourceId:p,rationale:i.rationale,eventId:u}}}}function ie(r,t,k={}){let h=k.turn??0,u=[],f=[];for(let c of r)(c.op==="add"||c.op==="enhance")&&f.push(c);let i=new Map;for(let c of r){if(!oe.has(c.op)||!c.target)continue;let p=i.get(c.target)??[];p.push(c),i.set(c.target,p)}for(let[c,p]of i){let w=Math.max(...p.map(_=>_.seq)),C=p.filter(_=>_.seq===w);if(C.length>1){u.push({target:c,seq:w,kinds:C.map(_=>_.op)});continue}f.push(C[0])}return{chatOps:f.sort((c,p)=>c.seq-p.seq).map(c=>ue(c,h,t,k.convSourceId)),ambiguous:u}}function ce(r){let t=[];return r.questions.forEach((k,h)=>{if(r.resolution[h])return;let u=k.recommended_index!=null?k.options[k.recommended_index]?.label:void 0;u!=null&&t.push(k.risk==="high"?`${u} \u203C`:u)}),t.length>3?`${t.slice(0,3).join(" \xB7 ")} \xB7 +${t.length-3} more`:t.join(" \xB7 ")}function re(r){let t=r.text.replace(/\?+\s*$/,"");return t.length<=36?t:`${t.slice(0,33)}\u2026`}function de(r){return r.use_cases??[]}var le={acs:"acceptance criteria",scenarios:"scenarios",exercises:"exercises",tests:"tests",gaps:"gaps"};function ge(r){let t=[],k=[],h=(i,b)=>{b.length!==0&&(k.push(i),t.push(...b))},u=i=>typeof i=="string"&&/^[a-z]{1,4}\d{1,4}$/i.test(i)?i:null,f=i=>{let b=u(i.automates)??"1 scenario",c=i.verifies??[],p=c.map(u).filter(_=>_!==null).slice(0,2),w=c.length-p.length,C=p.length?`${p.join(" ")}${w>0?` +${w}`:""}`:`${c.length} ACs`;return`covers ${b} \xB7 verifies ${C}`};return h("acs",(r.acs??[]).map(i=>({temp_ref:i.temp_ref,title:i.text,kind:"ac",badge:String(i.kind),extra:{...i.expected_answer?{expects:`${String(i.expected_answer.operator??"")} \xB7 ${String(i.expected_answer.operand??"")}`}:{},"scoped to":i.scoped_to??"(use-case)"}}))),h("scenarios",(r.scenarios??[]).map(i=>({temp_ref:i.temp_ref,title:i.title,kind:"scenario",badge:i.case_type,why:i.intent,depends_on_hint:i.depends_on??[],extra:{technique:i.technique_notes}}))),h("exercises",(r.exercises??[]).map(i=>({temp_ref:u(i.scenario)??"wiring",title:`${u(i.scenario)??"scenario"} exercises ${u(i.ac)??"1 AC"}`,kind:"exercise",badge:"wires",why:i.rationale}))),h("tests",(r.tests??[]).map(i=>({temp_ref:i.temp_ref,title:i.title,kind:"test",why:f(i),depends_on_hint:i.reuses??[],extra:{automates:String(i.automates??"?"),verifies:(i.verifies??[]).join(", "),check:i.check?`${String(i.check.kind)} vs ${String(i.check.verified_against)}`:"?"}}))),h("gaps",(r.gaps??[]).map(i=>({temp_ref:i.temp_ref??i.ref??"?",title:String(i.question?.header??i.kind),kind:"gap",badge:i.kind,why:i.risk_rationale}))),{items:t,heading:k.join(" + ")||"design"}}function be(r={}){let t={turns:[],thinking:ee(),pending:null,confirm:null,status:"idle",ledger:[],activeTurn:null,stream:null,checkpoint:!1},k=e=>{let n=[],s=e.minted.map(a=>a.slug).filter(Boolean);s.length&&n.push(`added ${s.join(", ")}`);let o=e.applied.length-e.minted.length;return o>0&&n.push(`${o} change${o===1?"":"s"} applied`),e.staleDelta.length&&n.push(`stales ${e.staleDelta.length}`),n.join(" \xB7 ")||"no changes"},h=[];r.onRender&&h.push(r.onRender);let u=0,f=0,i=null,b=null,c=null,p=[],w=0,C=e=>{if(!(!c||!r.contextDir||!e.trim()))try{let n=r.refreshGraph?.()??r.graph;if(!n)return;Y({contextDir:r.contextDir,graph:n,sourceId:c,text:e,by:r.by??{kind:"human",id:"owner"}})}catch{}},_=e=>{if(!c||!r.contextDir)return;let n=r.refreshGraph?.()??r.graph,s=n?.heads.get(c),o=n?.convChains.get(c);if(!n||typeof s!="string"||!o)return;let a=n.getNode(s)?.content?.blob,g=typeof a=="string"?X(r.contextDir,a)?.toString("utf8")??"":"";if(g)for(let y of e){if(y.kind!=="add"||y.convSourceId!==c)continue;let E=B(g,y.cite.turn);if(!(E!==null&&E.includes(y.cite.quote)))for(let S=o.turns;S>=1;S--){let N=B(g,S);if(N!==null&&N.includes(y.cite.quote)){y.cite={...y.cite,turn:S};break}}}},P=null,F=new Map,Q=new Map,G=null,m=()=>{M&&(clearTimeout(M),M=null);for(let e of h)e()},M=null,U=()=>{M||(M=setTimeout(()=>{M=null;for(let e of h)e()},80))},l=e=>{t.ledger.push(e)},R=null,O=!1,q=(e=!1)=>{R?l({kind:"agent",text:R}):e&&O&&l({kind:"note",text:'chat to refine ("looks good" approves; /done finishes)'}),R=null,O=!1},se=()=>{R=null,O=!1},A=null,W=e=>{if(A){if(e)for(let n of A.items){let s=e.get(n.temp_ref);s&&(n.logical_id=s)}l({kind:"turn",...A}),A=null}},T=()=>{W(),t.activeTurn&&(t.activeTurn=null)},z=(e,n)=>n.choice||(n.selected_index!=null?e.options[n.selected_index]?.label??"?":"?"),L=()=>{let e=t.pending;if(!e)return;if(!e.resolution.every(Boolean)){e.cursor=e.resolution.findIndex(o=>o===null);return}let n=e.questions.map((o,a)=>{let g=e.resolution[a];return g.form==="deferred"?{id:o.id,selected_index:null,free_text:null}:g.free_text!=null?{id:o.id,selected_index:null,free_text:g.free_text}:{id:o.id,selected_index:g.selected_index,free_text:null}});t.pending=null,t.status=t.status==="pausing"?"pausing":"streaming",t.status==="streaming"&&(t.busySince=Date.now());let s=P;P=null,s?.(n)},j=(e,n)=>{let s=t.pending,o=s.questions[e],a=s.resolution[e];s.resolution[e]=n;let g=re(o);a?l({kind:"answer",receipt:{form:"changed",qNum:e+1,stub:g,choice:z(o,n),prev:a.choice}}):n.form==="deferred"?l({kind:"answer",receipt:{form:"deferred",qNum:e+1,stub:g}}):l({kind:"answer",receipt:{form:n.form,qNum:e+1,stub:g,choice:z(o,n)}})},H=()=>{let e=t.pending;e&&(e.questions.forEach((n,s)=>{e.resolution[s]||j(s,{form:"deferred",selected_index:null,free_text:null,choice:""})}),L())},I=new Map,K=e=>{I.clear();let n={high:0,med:1,low:2};return e=e.map((s,o)=>({q:s,i:o})).sort((s,o)=>(n[s.q.risk]??3)-(n[o.q.risk]??3)||s.i-o.i).map(({q:s})=>s),{questions:e,cursor:0,resolution:e.map(()=>null)}};return{state:t,explainLines(e){if(!r.explain||!r.graph||r.contextDir===void 0)return null;let n=r.explain(r.contextDir,r.graph,e);return n.target?[`${n.target.label} ${n.target.slug??n.target.cid.slice(0,19)}:`,...n.entries.map(s=>` [${s.kind}] ${s.rationale??s.detail}`)]:null},explainRef(e){if(!r.explain||!r.graph||r.contextDir===void 0){l({kind:"note",text:"explain isn't available here"}),m();return}let n=r.explain(r.contextDir,r.graph,e),s=n.target?[`${n.target.label} ${n.target.slug??n.target.cid.slice(0,19)}:`,...n.entries.map(o=>` [${o.kind}] ${o.rationale??o.detail}`)].join(`
3
- `):`unknown ref: ${e}`;l({kind:"note",text:s}),m()},subscribe(e){return h.push(e),()=>{let n=h.indexOf(e);n>=0&&h.splice(n,1)}},submit(e){if(t.confirm&&(t.confirm=null),!t.pending){if(!i){t.turns.push({role:"user",text:e}),l({kind:"user",text:e}),t.notice="the agent isn't running \u2014 nothing sent",m();return}for(t.notice=void 0,t.checkpoint=!1,q(),t.turns.push({role:"user",text:e}),l({kind:"user",text:e}),C(e),t.status="streaming",t.busySince=Date.now(),t.error=void 0,f+=1;p.length>0;)f+=1,i({type:"user_message",message_id:`u${f}-receipt`,text:p.shift()});i({type:"user_message",message_id:`u${f}`,text:e}),m()}},attachSender(e){let n=i;return i=e,()=>{i=n}},attachOnCommitted(e){b=e},attachConversationSource(e){c=e},holdReceipt(e){p.push(e),t.checkpoint=!0,m()},drainHeldReceipts(){return p.splice(0,p.length)},submitAnswer(e,n){let s=t.pending,o=s?.questions[e],a=o?.options[n]?.label;!s||!o||a==null||(j(e,{form:"answered",selected_index:n,free_text:null,choice:a}),L(),m())},submitFreeText(e,n){let s=t.pending,o=s?.questions[e],a=n.trim();!s||!o||!a||(j(e,{form:"answered",selected_index:null,free_text:a,choice:a}),L(),m())},toggleOption(e,n){let s=t.pending?.questions[e];if(!s||s.options[n]==null)return;let o=I.get(e)??new Set;o.has(n)?o.delete(n):o.add(n),I.set(e,o),m()},multiSelection(e){return[...I.get(e)??[]].sort((n,s)=>n-s)},confirmMulti(e){let n=t.pending,s=n?.questions[e];if(!n||!s)return;let o=[...I.get(e)??[]].sort((g,y)=>g-y).map(g=>s.options[g]?.label).filter(g=>g!=null);if(o.length===0)return;I.delete(e);let a=o.join(", ");j(e,{form:"answered",selected_index:null,free_text:a,choice:a}),L(),m()},goWithRecommendations(){let e=t.pending;if(!e)return{picks:""};let n=ce(e),s=null;return e.questions.forEach((o,a)=>{if(e.resolution[a])return;let g=o.recommended_index,y=g!=null?o.options[g]?.label:void 0;if(y==null){s===null&&(s=a);return}j(a,{form:"assumed",selected_index:g,free_text:null,choice:y})}),s!==null?(e.cursor=s,m(),{blocked:s}):(L(),m(),{picks:n})},reopenQuestion(){let e=t.pending;if(!e)return;let n=e.cursor<0?e.questions.length:e.cursor;for(let s=n-1;s>=0;s--)if(e.resolution[s]){e.cursor=s,m();return}},continueParked(){if(i){for(t.checkpoint=!1,l({kind:"continued"});p.length>0;)f+=1,i({type:"user_message",message_id:`u${f}-receipt`,text:p.shift()});f+=1,i({type:"user_message",message_id:`u${f}`,text:"continue"}),t.status="streaming",t.busySince=Date.now(),m()}},note(e){l({kind:"note",text:e}),m()},aliasOf(e){return Q.get(e)},registerAliases(e){for(let n of e)Q.set(n.ref,n.cid);W(new Map(e.filter(n=>n.id).map(n=>[n.ref,n.id]))),m()},setWorking(e){if(e!=null){if(t.status!=="idle"&&t.status!=="working")return;t.status==="idle"&&(t.busySince=Date.now()),t.status="working",t.workingLabel=e}else{if(t.status!=="working")return;t.status="idle",t.workingLabel=void 0,t.busySince=void 0}m()},ledger(e){e.kind==="commit"&&W(),(e.kind==="pause"||e.kind==="error"||e.kind==="summary")&&(T(),q()),(e.kind==="summary"||e.kind==="pause")&&(t.stream=null),l(e),e.kind==="commit"&&(e.ok?q(!0):se()),m()},senderAlive(){return i!=null},completeSession(){H(),i?.({type:"session_complete"}),t.status="idle",t.busySince=void 0,m()},requestPause(){H(),t.status="pausing",t.busySince=void 0;let e=i;Promise.resolve().then(()=>e?.({type:"pause"})),m()},ask(e){return t.pending=K(e),F=new Map(e.map((n,s)=>[n.id,s+1])),t.status="awaiting-input",t.busySince=void 0,m(),new Promise(n=>{P=n})},noteCoercion(e,n){l({kind:"answer",receipt:{form:"assumed",qNum:F.get(e.id)??0,stub:re(e),choice:n,note:"your typed answer couldn't be used here"}}),m()},onAgentEvent(e){switch(e.type){case"reasoning_delta":case"reasoning_done":case"tool_activity":case"decision_activity":{let n=t.thinking;if(t.thinking=ne(n,e),t.thinking!==n){if(e.type==="reasoning_done"&&e.present)l({kind:"thinking",tookMs:e.took_ms});else if(e.type==="tool_activity"&&e.status!=="started")l({kind:"tool",name:e.name,status:e.status==="done"?"ok":e.status,detail:e.detail});else if(e.type==="decision_activity"){let s=`\xB7 ${te(e)}`,o=t.ledger.length-1;for(;o>=0&&t.ledger[o].kind==="tool";)o--;let a=t.ledger[o];a&&a.kind==="note"&&a.text===s||l({kind:"note",text:s})}}if(e.type==="reasoning_delta"){U();return}break}case"usage":t.credits={turn:e.credits,total:e.total_credits};break;case"text_delta":{let n=G;if(n&&(e.turn_id<n.turn_id||e.turn_id===n.turn_id&&e.attempt<n.attempt))return;(!n||n.turn_id!==e.turn_id||n.attempt!==e.attempt)&&(G={turn_id:e.turn_id,attempt:e.attempt},t.stream={text:""}),t.stream={text:(t.stream?.text??"")+e.text},U();return}case"progress":break;case"proposal":{u+=1,T(),t.stream=null,t.busySince&&(l({kind:"note",text:`\u2713 done in ${Math.max(1,Math.round((Date.now()-t.busySince)/1e3))}s`}),t.busySince=void 0);let n=de(e.proposal),s=r.dedupFlags?.(e.proposal);if(s)for(let o of n){let a=s.get(o.temp_ref);a&&(o.matches_existing=a)}t.turns.push({role:"agent",turnIndex:u,items:n,text:e.narrative}),R=e.narrative??null,O=!0,t.activeTurn={turnIndex:u,heading:"use-cases",items:n},A={turnIndex:u,heading:"use-cases",items:n},(t.status==="streaming"||t.status==="working")&&(t.status="idle"),t.workingLabel=void 0;break}case"design":{u+=1,T(),t.stream=null,t.busySince&&(l({kind:"note",text:`\u2713 done in ${Math.max(1,Math.round((Date.now()-t.busySince)/1e3))}s`}),t.busySince=void 0);let{items:n,heading:s}=ge(e.design),o=e.design.phase==="wiring"?"acceptance criteria + exercises":s.split(" + ").map(a=>le[a]??a).join(" + ");l({kind:"banner",text:`designing: ${o}`}),t.turns.push({role:"agent",turnIndex:u,items:n,itemsHeading:s,text:e.narrative}),R=e.narrative??null,O=!0,t.activeTurn={turnIndex:u,heading:s,items:n},A={turnIndex:u,heading:s,items:n},(t.status==="streaming"||t.status==="working")&&(t.status="idle"),t.workingLabel=void 0;break}case"ask_user":t.pending=K(e.questions),t.status="awaiting-input",t.busySince=void 0;break;case"chat_ops":{u+=1,T(),t.stream=null,t.status==="streaming"&&(t.status="idle",t.busySince=void 0);let n=e.chat_ops??e,s=Array.isArray(n.ops)?n.ops:[],o=n.text??e.text??"",a=r.refreshGraph?.()??r.graph,g=d=>Q.get(d)??d,y=s.map(d=>{if(!d.target)return d;let x=g(d.target),v=d.expected_cid;if(v==null&&a){let J=a.resolve(x);J&&(v=a.tipOf(J.cid))}let $=d.payload?.redirect_to,D=$&&g($);return x===d.target&&v===d.expected_cid&&D===$?d:{...d,target:x,expected_cid:v,...D!==$?{payload:{...d.payload,redirect_to:D}}:{}}}),E;try{if(!Array.isArray(n.ops))throw new Error("the agent sent an unreadable change set (no ops array) \u2014 say it again in different words");E=ie(y,r.descriptor??{mint_gate:[]},{turn:u,...c?{convSourceId:c}:{}})}catch(d){t.error=d instanceof Error?d.message:String(d),t.turns.push({role:"agent",turnIndex:u,text:o,narration:t.error}),o&&l({kind:"agent",text:o}),l({kind:"error",title:t.error,detail:[]});break}let{chatOps:S,ambiguous:N}=E;if(N.length>0){let d=N[0];t.confirm={kind:"ambiguity-confirm",prompt:`did you mean edit or ${d.kinds.filter(x=>x!=="edit").join("/")} on ${d.target}?`},t.turns.push({role:"agent",turnIndex:u,text:o}),o&&l({kind:"agent",text:o});break}if(_(S),r.commitChatTurn&&S.length>0){let d=r.commitChatTurn({contextDir:r.contextDir??"",graph:r.refreshGraph?.()??r.graph,ops:S,by:r.by??{kind:"human",id:"owner"},...r.descriptor?.mint_gate?{mintable:r.descriptor.mint_gate}:{}});if(d.errors)t.error=d.errors.map(x=>x.detail).join("; "),t.turns.push({role:"agent",turnIndex:u,text:o}),l({kind:"commit",ok:!1,line:"commit failed \u2014 nothing landed",warnings:d.errors.map(x=>`${x.code}: ${x.detail}`)}),p.push(["COMMIT FAILED (chat turn) \u2014 nothing landed; do not assume any of your last ops applied.",...d.errors.map(x=>`- ${x.code}: ${x.detail}`),...d.errors.some(x=>x.code==="UNKNOWN_FIELD")?["If you were changing citations or matched-existing content, that is proposal territory (approve/re-propose) \u2014 a chat edit can only replace a node's own schema fields."]:[]].join(`
4
- `)),o&&l({kind:"agent",text:o});else{d.applied.length>0&&r.session?.markApplied(d.applied);let x=k(d);t.turns.push({role:"agent",turnIndex:u,text:o,narration:x}),l({kind:"commit",ok:!0,line:x});let v=r.refreshGraph?.();if(v&&b&&b(v),v)try{w+=1;let V=r.descriptor?.mint_gate?.includes("usecase")?"extract":"design",$=Z({verb:V,commitN:w,phase:"chat",committed:d.minted.map(D=>({cid:D.cid,...D.slug?{logical_id:D.slug}:{}}))},v);p.push($.text)}catch{}o&&l({kind:"agent",text:o})}}else t.turns.push({role:"agent",turnIndex:u,text:o}),o&&l({kind:"agent",text:o});C(o);break}case"done":case"session_complete":T(),q(),t.status="idle",t.busySince=void 0,i=null;break;case"error":T(),q(),t.stream=null,t.status="idle",t.busySince=void 0,t.error=e.message,i=null,l({kind:"error",title:e.message,detail:[]});break;case"session_paused":break;default:break}m()}}}export{ce as a,re as b,be as c};
@@ -1,12 +0,0 @@
1
- import { createRequire } from 'module'; const require = createRequire(import.meta.url);
2
- import{f as He}from"./chunk-K7USHLVZ.js";import{a as he,e as Be,g as je,h as We}from"./chunk-JSF5JYZC.js";import{a as Ge,b as qe,c as Le}from"./chunk-J44RN3FB.js";import{a as Te,b as Ne}from"./chunk-JFAFKHDX.js";import{b as Fe}from"./chunk-YKTYVJBN.js";import{a as Ue}from"./chunk-CVOGP253.js";import{a as Me}from"./chunk-GG43HSU2.js";import{c as Ie}from"./chunk-FMR2KPSK.js";import{c as Pe}from"./chunk-V3UE6RJP.js";import{a as se,b as Ae}from"./chunk-DNNZ353O.js";import{b as Oe}from"./chunk-FHKDTM5L.js";import{a as V}from"./chunk-NVGBE2DR.js";import{a as R}from"./chunk-7E24OCGX.js";import{e as z,f as re}from"./chunk-6W6AIDLJ.js";import{d as j}from"./chunk-5YPBPZUR.js";import{b as Ee}from"./chunk-IAHKTEET.js";import{a as Re}from"./chunk-5EOX4MEY.js";import{appendFileSync as ot,mkdirSync as pe,writeFileSync as _e}from"fs";import{dirname as nt,extname as at,join as U}from"path";var E=class extends Error{code;constructor(e,c){super(`${e}: ${c}`),this.name="ProposalAdapterError",this.code=e}};function ze(s){return s.version===2}function Ve(s,e){if(s.read_basis.length!==1)throw new E("READ_BASIS_COUNT",`read_basis must have exactly 1 element, got ${s.read_basis.length}`);let c=s.read_basis[0],u=s.use_cases.map(i=>{if(i.cite.length!==1)throw new E("CITE_COUNT",`${i.temp_ref}: cite must have exactly 1 element, got ${i.cite.length}`);let g=i.cite[0];if(g.source_id!==c.source_id)throw new E("SOURCE_MISMATCH",`${i.temp_ref}: cite source ${g.source_id} != read_basis source ${c.source_id} (single-source)`);return{temp_ref:i.temp_ref,title:i.title,...i.description!==void 0?{description:i.description}:{},...i.summary!==void 0?{summary:i.summary}:{},...i.actors!==void 0?{actors:i.actors}:{},...i.value!==void 0?{value:i.value}:{},risk:i.risk,cite:{anchor:g.anchor,quote:g.quote},...i.criteria!=null&&i.criteria.length>0?{criteria:i.criteria.map((d,_)=>{if(d.cite.source_id!==c.source_id)throw new E("SOURCE_MISMATCH",`${i.temp_ref}.criteria[${_}]: cite source ${d.cite.source_id} != read_basis source ${c.source_id} (single-source)`);return{text:d.text,cite:{anchor:d.cite.anchor,quote:d.cite.quote}}})}:{},depends_on_hint:i.depends_on_hint,matches_existing:i.matches_existing,...i.conflicts_with!=null?{conflicts_with:i.conflicts_with}:{},...i.changed?{changed:!0}:{},...i.updated!=null?{updated:{...i.updated.title!=null?{title:i.updated.title}:{},...i.updated.description!=null?{description:i.updated.description}:{},...i.updated.summary!=null?{summary:i.updated.summary}:{},...i.updated.actors!=null?{actors:i.updated.actors}:{},...i.updated.value!=null?{value:i.updated.value}:{},...i.updated.risk!=null?{risk:i.updated.risk}:{},...i.updated.criteria!=null?{criteria:i.updated.criteria.map((d,_)=>{if(d.cite.source_id!==c.source_id)throw new E("SOURCE_MISMATCH",`${i.temp_ref}.updated.criteria[${_}]: cite source ${d.cite.source_id} != read_basis source ${c.source_id} (single-source)`);return{text:d.text,cite:{anchor:d.cite.anchor,quote:d.cite.quote}}})}:{}}}:{},...i.change_note!=null?{change_note:i.change_note}:{}}});return{version:1,read_basis:e,source:{source_id:c.source_id,source_cid:c.source_cid},use_cases:u}}function Je(s){let{contextDir:e,graph:c}=s,u=s.maxDigestBytes??4096,i={},g=[];for(let[l,f]of c.heads){if(i[l]=f,typeof f!="string")continue;let x=c.mediaOf(f),k=c.getNode(f)?.content?.blob;if(typeof k=="string")if(x.format==="image")g.push({source_id:l,cid:f,format:"image",blobRef:{path:V(e,k),cid:k}});else{let n=se(e,c,f)?.toString("utf8")??"";g.push({source_id:l,cid:f,format:x.format,text:n})}}g.sort((l,f)=>l.source_id<f.source_id?-1:1);let d=[];for(let l of c.byLabel(j.STYLENOTE).sort((f,x)=>f.cid<x.cid?-1:1))c.superseded.has(l.cid)||d.push(`\u2022 ${String(l.content.statement)} [${String(l.content.learned_from_kind)}]`);let _="";for(let l of d){if(Buffer.byteLength(_+l+`
3
- `,"utf8")>u)break;_+=l+`
4
- `}return{read_basis:i,sources:g,styleNoteDigest:_}}function Ke(s,e){let c=Je({contextDir:s,graph:e}).styleNoteDigest;return c.length>0?c:void 0}function ct(s,e){let c=(s.images??[]).filter(u=>u.delivery==="selected");if(c.length!==0)return c.map(u=>({ref:u.ref,...u.page!==void 0?{page:u.page}:{},...u.loc!==void 0?{loc:u.loc}:{},media_type:u.media_type,blob_ref:{path:V(e,u.blob),cid:u.blob}}))}function dt(s){return s.length>8&&s[0]===137&&s[1]===80&&s[2]===78&&s[3]===71?"image/png":s.length>3&&s[0]===255&&s[1]===216&&s[2]===255?"image/jpeg":s.length>12&&s.toString("ascii",0,4)==="RIFF"&&s.toString("ascii",8,12)==="WEBP"?"image/webp":null}function Xe(s){return s.toISOString().replace(/[-:]/g,"").slice(0,15)}function ut(s){return s.startsWith("su-conv-")?`conv-${Ee(Buffer.from(s,"utf8")).slice(0,8)}`:s}function et(s){return s.source_id.startsWith("su-conv-")?"the conversation":s.source_id}function lt(s,e,c){return`reading ${et(s)}${c>1?` (source ${e} of ${c})`:""}`}function J(s){return s.toLowerCase().trim().replace(/\s+/g," ")}function Ye(s,e){let c=new Map,u=new Map,i=new Map;for(let{cid:d,content:_}of e.byLabel(j.USECASE)){if(e.superseded.has(d))continue;(e.trust.get(d)==="archived"?i:u).set(J(String(_.title??"")),d)}let g=d=>e.trust.get(d)==="archived"?{cid:d,archived:!0,reason:e.archivedReason.get(d)}:{cid:d};for(let d of s.use_cases){if(d.matches_existing){let f=d.matches_existing.cid;if(e.superseded.has(f)){let x=e.tipOf(f);f=e.superseded.has(x)?null:x}if(f!==null){c.set(d.temp_ref,g(f));continue}}let _=u.get(J(d.title));if(_){c.set(d.temp_ref,{cid:_});continue}let l=i.get(J(d.title));l&&c.set(d.temp_ref,g(l))}return c}var Qe=/^(\S+)\.criteria\[(\d+)\]/;function mt(s,e,c){if(e.length===0||!e.every(i=>Qe.test(i.detail)))return!1;let u=new Map;for(let i of e){let g=Qe.exec(i.detail),d=u.get(g[1])??new Set;d.add(Number(g[2])),u.set(g[1],d)}for(let i of s.use_cases){let g=u.get(i.temp_ref);g?.size&&(i.criteria=(i.criteria??[]).filter((d,_)=>!g.has(_)),c(`${i.temp_ref}: dropped ${g.size} criteria with unverifiable cites \u2014 committed without them (criteria are hints, not oracles)`))}return!0}async function Ze(s,e,c,u,i=()=>{},g){let d=(_,l)=>i(_,l,s.session_id);return je(s,e,c,u,i,{async onProposalEvent(_){let l=_,f=null,x=null;if(ze(l))try{f=Ve(l,s.read_basis),d("adapter",{ok:!0,use_cases:f.use_cases.length})}catch(k){x=k instanceof E?k.message:String(k),d("adapter",{ok:!1,error:x})}else f=l;return f&&f.use_cases.length===0&&e.out("warning: the agent proposed ZERO use-cases for this source"),f&&g&&await g(f),{proposal:f,error:x}}})}var gt=new Set(["agent","ci","override"]);async function Jt(s,e){let c=s.mode??"interactive";if(c==="interactive"){if(!e.isTTY)return e.out("extract: --mode interactive needs a TTY (use --mode agent|ci|override headless)"),2}else if(!gt.has(c))return e.out(`extract: unknown mode "${c}" \u2014 interactive | agent | ci | override`),2;let u=e.telemetry?.enabled?e.telemetry:void 0,i=Xe(e.now?.()??new Date),g=u?Re(u.ids.context_instance_id??null,"extract",u.ids.session_id):U(e.contextDir,"logs",`extract-${i}.log`);pe(nt(g),{recursive:!0});let d=`run-${i}-${Math.random().toString(36).slice(2,8)}`,_=t=>t==="error"||t==="failed_proposal"?"error":t==="repair_respawn"?"warn":"info",l=(t,a,m)=>{try{ot(g,JSON.stringify({ts:new Date().toISOString(),level:_(t),run_id:d,...u?{user_session_id:u.ids.session_id}:{},...m?{session_id:m}:{},kind:t,data:a})+`
5
- `)}catch{}u?.wireTrace(t,a,m)};e.out(`trace: ${he(g)}`),u&&e.out(u.banner()),e.emit?.({type:"run_start",mode:c,trace:g});let f=Fe();if(f&&e.out(f),e.preflightTurn){let t=await e.preflightTurn();if(l("preflight",t),!t.ok)return e.out(t.message??"error: turn-endpoint preflight failed"),e.emit?.({type:"error",message:t.message??"error: turn-endpoint preflight failed",code:"PREFLIGHT"}),2}let x=R(e.contextDir),k=Ke(e.contextDir,x);if(s.source){if(s.resume){let a="error: --source cannot be combined with --resume (the resumed session already has its scope)";return e.out(a),e.emit?.({type:"error",message:a,code:"SOURCE_WITH_RESUME"}),2}let t=x.heads.get(s.source);if(typeof t!="string"){let a=t===null?`error: --source ${s.source} was ingested but is retired \u2014 re-ingest it to extract again`:`error: --source ${s.source} is not an ingested source (kane-cli context list shows them)`;return e.out(a),e.emit?.({type:"error",message:a,code:"SOURCE_UNKNOWN"}),2}}let n=null;if(s.resume){try{n=Le(e.contextDir,s.resume,x)}catch(m){return e.out(`error: ${m instanceof Error?m.message:String(m)}`),e.emit?.({type:"error",message:`error: ${m instanceof Error?m.message:String(m)}`}),1}let t=n.handle.state.change_basis;if(t&&(x.heads.get(t.source_id)??null)!==t.new_head){let m=`error: ${t.source_id} moved while this reconcile extraction was paused \u2014 its recorded change context no longer matches; re-run kane-cli maintain reconcile against the current file (session ${s.resume} is defunct and can be ignored)`;return e.out(m),e.emit?.({type:"error",message:m,code:"CHANGE_BASIS_MOVED"}),n.handle.release(),2}n.staleBasis.length>0&&e.out(`note: changed since the pause: ${n.staleBasis.join(", ")} \u2014 re-presented items may be stale`);let a=n.handle.state.held_receipts??[];if(a.length>0)if(e.chat?.holdReceipt)for(let m of a)e.chat.holdReceipt(m);else e={...e,initialMessage:[a.join(`
6
-
7
- `),e.initialMessage].filter(Boolean).join(`
8
-
9
- `)};n.handle.state.assumed.length>0&&e.out(`note: ${n.handle.state.assumed.length} default(s) were assumed while you were away \u2014 kane-cli context sessions show ${s.resume} lists them`)}let xe=x.extractedSourceCids,K=!!(s.force||n?.handle.state.force),y=[],P=[];for(let[t,a]of x.heads.entries())if(a!=null&&!(s.source&&t!==s.source)){if(!s.source&&!n&&t.startsWith("su-conv-")){e.out(`skipped: ${t} \u2014 conversation source (extract it explicitly with --source ${t})`),P.push({source_id:t,reason:"conversation"});continue}if(n){let m=t in n.handle.state.read_basis,I=n.handle.state.corpus_cursor.remaining.includes(t);if(!m&&!I)continue;if(I&&!K&&xe.has(a)){e.out(`cached: ${t} @ ${a.slice(0,19)} already extracted \u2014 skipping`),P.push({source_id:t,reason:"cached"});continue}}else if(!K&&xe.has(a)){e.out(`cached: ${t} @ ${a.slice(0,19)} already extracted \u2014 skipping`),P.push({source_id:t,reason:"cached"});continue}y.push({source_id:t,cid:a})}let tt=t=>{let a=He(e.contextDir,t);a&&e.out(`note: a reconcile plan for ${t} is pending (${a.pending} item(s)) \u2014 resume with \`kane-cli maintain reconcile --apply ${a.path}\``)};for(let t of P)t.reason==="cached"&&tt(t.source_id);if(e.emit?.({type:"corpus",sources:y,skipped:P}),y.length===0){if(n){let m=`error: resumed session's paused source (${Object.keys(n.handle.state.read_basis).join(", ")||"unknown"}) is no longer in the corpus \u2014 restore/re-ingest it and re-run --resume ${s.resume}, or discard with: kane-cli context sessions clean ${s.resume}`;return e.out(m),e.emit?.({type:"error",message:m,code:"SOURCE_MISSING"}),n.handle.release(),2}let t=P.length>0&&P.every(a=>a.reason==="conversation");return e.out(s.source?`extract: nothing to do \u2014 ${s.source} is already extracted at its current snapshot (--force to re-run)`:t?"extract: nothing to do \u2014 only conversation sources here (extract one explicitly with --source <id>)":"extract: nothing to do \u2014 every ingested source is already extracted"),0}let X=new Map;if(n&&n.questions.length>0&&!s.message){e.out(`re-presenting ${n.questions.length} unanswered question(s) from the paused session`);let t=await e.ask(n.questions.map(Ge));for(let a of t)X.set(a.id,a)}let H=e.by??{kind:"human",id:"owner"},A=c==="interactive"&&!s.plan&&!!e.chat,ie=0,ye=0;try{for(let t of y){let a=R(e.contextDir),m={current:a};e.chat?.attachOnCommitted?.(r=>{m.current=r});let I=a.getNode(t.cid),Y=String(I?.content.blob??""),oe=se(e.contextDir,a,t.cid);if(!oe)return e.out(`error: ${t.source_id}: blob ${Y} missing from .context/blobs`),e.emit?.({type:"error",source_id:t.source_id,message:`error: ${t.source_id}: blob ${Y} missing from .context/blobs`,code:"BLOB_MISSING"}),1;let G=a.mediaOf(t.cid),ne=G.media_type.startsWith("image/");if(!ne){let r=dt(oe);if(r){e.out(`skipping ${t.source_id}: binary ${r} ingested before image support \u2014 re-ingest it (kane-cli context ingest) to extract from it`),e.emit?.({type:"source_skipped",source_id:t.source_id,reason:"binary_pre_media"});continue}}let q=ne?`0001| (image source ${t.source_id} \u2014 the content is attached as an image; cite it with anchor img#whole)`:Ae(oe),ve=Xe(e.now?.()??new Date),M=`${ve}-${t.source_id}`,be=!!(n&&t.source_id in n.handle.state.read_basis)?s.resume:`ext-${ve}-${ut(t.source_id)}`,T="";if(A){let r=Ie({contextDir:e.contextDir,graph:R(e.contextDir),sessionStamp:be,by:H});r.errors===null||r.errors[0]?.code==="CONV_SOURCE_EXISTS"?(T=r.sourceId,e.chat.attachConversationSource?.(T),m.current=R(e.contextDir)):e.out(`warning: conversation source unavailable (${r.errors[0]?.detail}) \u2014 chat adds will not land this session`)}let $={type:"run_config",version:1,session_id:be,mode:c,source:{source_id:t.source_id,source_cid:t.cid,kind:Pe.has(G.format)?G.format:at(t.source_id)||"md",numbered_text:q,...(()=>{let r=ct(G,e.contextDir);return r?{images:r}:{}})()},existing_use_cases:a.byLabel(j.USECASE).filter(({cid:r})=>a.trust.get(r)!=="archived"&&!a.superseded.has(r)).map(({cid:r,content:o})=>({id:r,title:String(o.title??""),summary:String(o.summary??"")})),read_basis:m.current.latestHash,max_free_text_rounds:Be,graph_reads:!0,verb:"extract",...k!==void 0?{style_note_digest:k}:{},...s.changeContext&&s.changeContext.source_id===t.source_id?{change_context:s.changeContext}:{},topology:Ue(),...A?{chat:!0}:{},...ne?{image_sources:[{source_id:t.source_id,source_cid:t.cid,media_type:G.media_type,blob_ref:{path:V(e.contextDir,Y),cid:Y}}]}:{},...n&&t.source_id in n.handle.state.read_basis?{resume:{agent_state:n.handle.state.agent_state}}:{}};A||e.out(n&&t.source_id in n.handle.state.read_basis?`resuming: ${t.source_id} (session ${s.resume})`:`extracting: ${t.source_id} @ ${t.cid.slice(0,19)}`),e.emit?.({type:"source_start",source_id:t.source_id,cid:t.cid,index:y.indexOf(t)+1,total:y.length,resumed:!!(n&&t.source_id in n.handle.state.read_basis)}),e.chat?.ledger?.({kind:"banner",text:lt(t,y.indexOf(t)+1,y.length)}),e.chat?.setWorking?.(`Reading ${et(t)}\u2026`);let $e=new Map;l("spawn",{source_id:t.source_id,source_cid:t.cid,resume:!!n,chat:A},$.session_id);let Se=!1,rt=async r=>{let o=z(r,q,R(e.contextDir));if(l("kane_validate",{errors:o.map(p=>p.code)},$.session_id),o.length>0){e.chat.submit("[auto-repair] the proposal failed validation: "+o.map(p=>`${p.code}: ${p.detail}`).join("; ")+" \u2014 please re-finalize with these fixed.");return}let v=R(e.contextDir),C=Ye(r,v),ee=U(e.contextDir,"proposals",M);pe(ee,{recursive:!0}),_e(U(ee,"proposal.json"),JSON.stringify(r,null,2)+`
10
- `);let it=new Map(r.use_cases.map(p=>[p.temp_ref,{resolution:"skipped"}])),te=re({contextDir:e.contextDir,graph:v,proposal:r,proposalId:M,verdicts:it,by:{kind:"ai",id:"extract-agent"},autoName:!0});if(te.errors){e.chat.ledger?.({kind:"commit",ok:!1,line:"commit failed \u2014 nothing landed",warnings:te.errors.map(p=>`${p.code}: ${p.detail}`)});return}Se=!0;let F=te.record.nodes.length;ie+=F;let B=r.use_cases.length-F;{let p=R(e.contextDir),De=new Map;for(let{cid:b,content:D}of p.byLabel(j.USECASE))p.superseded.has(b)||De.set(J(String(D.title??"")),b);let fe=[];for(let b of r.use_cases){let D=null;if(b.matches_existing?.cid&&p.hasNode(b.matches_existing.cid)){let W=p.tipOf(b.matches_existing.cid);D=p.superseded.has(W)?null:W}D=D??De.get(J(b.title))??null,D&&fe.push({ref:b.temp_ref,cid:D,...p.displayNameOf(D)?{id:p.displayNameOf(D)}:{}})}fe.length>0&&e.chat.registerAliases?.(fe),m.current=p;let ke=b=>{for(let[D,W]of p.names)if(W===b&&!p.superseded.has(W))return D},Ce=Me({verb:"extract",commitN:1,phase:"proposal",committed:te.record.nodes.map(b=>({cid:b.cid,...ke(b.cid)?{logical_id:ke(b.cid)}:{}})),reused:B},p);e.emit?.(Ce.event),e.chat.holdReceipt?.(Ce.text)}l("commit",{derived:F,evidence_matched:B,chat:!0},$.session_id),e.chat.ledger?.({kind:"commit",ok:!0,line:F===0&&B>0?`all ${B} matched existing \u2014 nothing new to save`:`saved ${F} use-case${F===1?"":"s"} as drafts`+(B>0?` \xB7 ${B} matched existing`:"")})},we=!!(n&&t.source_id in n.handle.state.read_basis),Q=we&&X.size>0?{...e,ask:async r=>r.every(o=>X.has(o.id))?(n.handle.markApplied(r.map(o=>`resolveq:${s.resume}:${o.id}`)),e.out(`answered ${r.length} re-asked question(s) from the held resume answers`),r.map(o=>X.get(o.id))):e.ask(r)}:e;we&&s.message&&(Q={...Q,initialMessage:s.message});let h=await Ze($,{...Q,graphSlot:m},$e,a,l,A?rt:void 0);if(e.chat?.setWorking?.(null),h.error)return e.out(`error: agent failed for ${t.source_id}: ${h.error}`),e.emit?.({type:"error",source_id:t.source_id,message:`error: agent failed for ${t.source_id}: ${h.error}`}),1;if(h.highRisk)return e.out(`error: ${h.highRisk.length} high-risk decision${h.highRisk.length===1?"":"s"} need a human \u2014 ci mode won't guess. Re-run with --mode agent to pause for review.`),e.emit?.({type:"error",source_id:t.source_id,message:`error: high-risk question(s) in ci mode (fail-closed): ${h.highRisk.map(r=>r.id).join(", ")}`,code:"HIGH_RISK_CI"}),1;if(h.paused){let r=y.slice(y.indexOf(t)+1).map(ee=>ee.source_id),o=n?.handle??Oe(e.contextDir,{sid:$.session_id,mode:"agent",created_at:(e.now?.()??new Date).toISOString(),expires_at:new Date((e.now?.()??new Date).getTime()+1440*60*1e3).toISOString(),agent_state:h.paused.agent_state,pending:{questions:[],proposals:[]},assumed:[],read_basis:{[t.source_id]:t.cid},corpus_cursor:{remaining:r},conv_source:T,verb:"extract",...K?{force:!0}:{},...s.changeContext?{change_basis:{source_id:s.changeContext.source_id,new_head:s.changeContext.new_head}}:{},...u?{user_session_id:u.ids.session_id}:{}});T&&o.state.conv_source!==T&&o.save({conv_source:T});let v=e.chat?.drainHeldReceipts?.()??[];(v.length>0||(o.state.held_receipts?.length??0)>0)&&o.save({held_receipts:v}),n?.handle&&o.save({read_basis:{[t.source_id]:t.cid},corpus_cursor:{remaining:r},...K&&!o.state.force?{force:!0}:{},...u&&o.state.user_session_id!==u.ids.session_id?{user_session_id:u.ids.session_id}:{}}),qe(o,h.paused),l("session_paused",{sid:o.state.sid},$.session_id);let C=`kane-cli context extract --resume ${o.state.sid} --mode ${c}`;return e.out(`paused: session ${o.state.sid} saved \u2014 resume with: ${C}`),e.emit?.({type:"session_paused",sid:o.state.sid,source_id:t.source_id,mode:c,resume:C,expires_at:o.state.expires_at,pending_questions:h.paused.pending.questions}),e.chat?.ledger?.({kind:"pause",sid:o.state.sid,expires_at:o.state.expires_at,resume:C,messageForm:`${C} --message "<your words>"`}),3}if(A){if(ye+=h.assumedDefaults??0,h.error)return 1;if(!Se){let r=y.length-y.indexOf(t)-1;return e.out(`done \u2014 nothing committed for ${t.source_id} (no finalize before the session ended)`+(r>0?`; stopping here \u2014 ${r} remaining source(s) not extracted (re-run kane-cli context extract to continue)`:"")),n&&t.source_id in n.handle.state.read_basis&&(n.handle.complete(),n=null),0}n&&t.source_id in n.handle.state.read_basis&&(n.handle.complete(),n=null);continue}if(!h.proposal)return e.out(`error: agent ended without a proposal for ${t.source_id}`),e.emit?.({type:"error",source_id:t.source_id,message:`error: agent ended without a proposal for ${t.source_id}`}),1;let w=z(h.proposal,q,a);if(l("kane_validate",{errors:w.map(r=>r.code)},$.session_id),w.length>0&&mt(h.proposal,w,r=>e.out(r))&&(l("criteria_dropped",{source_id:t.source_id},$.session_id),w=z(h.proposal,q,a)),w.length>0){if(e.out("the agent's proposal didn't validate \u2014 retrying once"),e.emit?.({type:"validate_failed",source_id:t.source_id,codes:w.map(r=>r.code),repairing:!0}),l("repair_respawn",{source_id:t.source_id},$.session_id),h=await Ze($,{...Q,graphSlot:m},$e,a,l),h.error||!h.proposal)return e.out(`error: repair run failed for ${t.source_id}`),e.emit?.({type:"error",source_id:t.source_id,message:`error: repair run failed for ${t.source_id}`}),1;if(w=z(h.proposal,q,a),w.length>0){for(let r of w)e.out(` ${r.detail}`);return e.emit?.({type:"validate_failed",source_id:t.source_id,codes:w.map(r=>r.code),repairing:!1}),e.emit?.({type:"error",source_id:t.source_id,message:`error: proposal failed validation after repair (${w.map(r=>r.code).join(", ")})`}),1}}let S=h.proposal,Z=Ye(S,a),ae=U(e.contextDir,"proposals",M);if(pe(ae,{recursive:!0}),_e(U(ae,"proposal.json"),JSON.stringify(S,null,2)+`
11
- `),s.plan){e.out(`plan: ${S.use_cases.length} use-case(s) proposed from ${t.source_id} (nothing committed)`);for(let r of S.use_cases){let o=Z.get(r.temp_ref),v=o?o.archived?` \u2248 matches ARCHIVED ${o.cid.slice(0,19)}${o.reason?` \u2014 previously rejected: "${o.reason}"`:" \u2014 previously rejected"}`:` \u2248 matches ${o.cid.slice(0,19)}`:"";e.out(` [${r.risk}] ${r.title} \u2014 cite ${r.cite.anchor}${v}`)}e.emit?.({type:"plan",source_id:t.source_id,use_cases:S.use_cases.map(r=>{let o=Z.get(r.temp_ref);return{risk:r.risk,title:r.title,anchor:r.cite.anchor,...o?{match:o.cid,match_archived:!!o.archived}:{}}})}),h.assumedDefaults&&e.out(`assumed: ${h.assumedDefaults} default(s) auto-taken (flagged)`);continue}for(let r of S.use_cases){if(!r.conflicts_with?.length)continue;let o=r.conflicts_with.filter(C=>a.resolve(C)!==null),v=r.conflicts_with.filter(C=>a.resolve(C)===null);v.length>0&&(e.out(`note: ${r.temp_ref}: dropped unresolvable conflict hint(s): ${v.join(", ")}`),r.conflicts_with=o.length>0?o:void 0)}l("review_start",{use_cases:S.use_cases.length,flags:Z.size},$.session_id);let L=await e.review(S.use_cases,Z);l("review_verdicts",[...L.entries()].map(([r,o])=>({ref:r,resolution:o.resolution})),$.session_id),_e(U(ae,"review.json"),JSON.stringify(S.use_cases.map(r=>{let o=L.get(r.temp_ref)??{resolution:"skipped"};return{id:r.temp_ref,kind:"review-item",resolution:o.resolution,edit:o.edit??null,reason:o.reason??null,...o.supersedeTarget?{supersede_target:o.supersedeTarget}:{},by:H}}),null,2)+`
12
- `);let ce=a,O=re({contextDir:e.contextDir,graph:ce,proposal:S,proposalId:M,verdicts:L,by:H,autoName:!0});if(O.errors&&O.errors[0]?.code==="STALE_BASIS"){if(!await e.confirmStale(`the context changed while you reviewed (${O.errors[0].detail}) \u2014 commit against the new head anyway?`))return e.out("aborted: proposal not committed"),e.emit?.({type:"error",source_id:t.source_id,message:"aborted: proposal not committed",code:"STALE_BASIS"}),e.emit?.({type:"done",status:"aborted",exit_code:1}),1;ce=R(e.contextDir),O=re({contextDir:e.contextDir,graph:ce,proposal:S,proposalId:M,verdicts:L,by:H,allowStaleBasis:!0,autoName:!0})}if(O.errors){for(let r of O.errors)e.out(` ${r.detail}`);return e.emit?.({type:"error",source_id:t.source_id,message:`error: commit failed: ${O.errors.map(r=>`${r.code}: ${r.detail}`).join("; ")}`}),1}let st=new Date().toISOString();for(let r of S.use_cases){let o=L.get(r.temp_ref)??{resolution:"skipped"};for(let v of Ne({ts:st,command:"context extract",id:r.temp_ref,by:H},o.resolution))Te(e.contextDir,v)}let N=O.record,de=new Map(N.review.map(r=>[r.id,r.resolution])),ue=[...de.values()].filter(r=>r==="approved"||r==="edited").length,le=[...de.values()].filter(r=>r==="rejected").length,me=N.nodes.filter(r=>!de.has(r.cid)).length,ge=N.supersessions.filter(r=>r.kind==="node"&&r.new!==r.old).length;l("commit",{trusted:ue,derived:me,archived:le},$.session_id),e.out(`committed: ${ue} trusted, ${me} derived (queued), ${le} archived`+(ge>0?`, ${ge} superseded`:"")),h.assumedDefaults&&e.out(`assumed: ${h.assumedDefaults} default(s) auto-taken (flagged)`),e.emit?.({type:"commit",source_id:t.source_id,proposal_id:M,trusted:ue,derived:me,archived:le,superseded:ge,assumed:h.assumedDefaults??0,evidence_matched:Math.max(0,S.use_cases.length-N.nodes.length),minted:N.nodes.map(r=>{let o=N.names?.find(v=>v.cid===r.cid)?.slug;return{cid:r.cid,...o?{logical_id:o}:{}}})}),n&&t.source_id in n.handle.state.read_basis&&(n.handle.complete(),e.out(`session ${s.resume} complete`),e.emit?.({type:"session_complete",sid:s.resume,source_id:t.source_id}),u?.event("ASR_SESSION_COMPLETE",{}),n=null)}}finally{n?.handle.release()}if(A){let t=e.chat?.state.ledger.filter(I=>I.kind==="answer"&&I.receipt.form==="assumed").length??0,a=ye+t,m=e.chat?.state.credits?.total;e.chat?.ledger?.({kind:"summary",lines:[`saved ${ie} use-case${ie===1?"":"s"} across ${y.length} source${y.length===1?"":"s"}`,...a>0?[`${a} assumed default(s)`]:[],...m!==void 0?[`credits used: ${m.toFixed(1)}`]:[],`trace: ${he(g)}`]})}return s.plan||We(e.contextDir),0}export{ct as a,ut as b,et as c,lt as d,Ye as e,Jt as f};
@@ -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};